ï»¿Ã¿Ã˜Ã¿Ã  JFIF      Ã¿Ã› â€ž 	 ( %!1"%)+...383-7(-.+



-%%--------+------------/----------------------------Ã¿Ã€  Â¶" Ã¿Ã„               Ã¿Ã„ @       !1AQaqÂ�â€˜Â¡"Â±Ã�Ã‘Ã°2â€™BRrÃ¡Sâ€šÃ±3bÂ¢CTÂ²Ã’ #cÃ¿Ã„             Ã¿Ã„ '        1!AQ2a"â€˜Â±#Ã¿Ãš   ? Ã²(/pâ€˜â€”â€“Â¢Â·,M|Â¯GÂ»RÂ£Ã¼eÅ¡T. Ã´Å¸EoCFÃ±â€¡ 4Ã”kÃ¥Ã³xR|Â�Â�ÂµÃ�Â¨Ã“DÃ !Ã‡Â´ÂµËœâ€¡p Ã�Qâ€¹Â§!Ã¾Å¾^ÃµWsÅ’y Â Ã¥Ã�Â§$Ã¡Â«%ÂºqËœâ„¢JyyÃ‹0yÂ�Â«^Ã�Â�
-3ÃƒÃ�Ã‹ÃˆÂ£Ã†\Pâ€™Ã¤â€žs&â€¢â€¹Ãœs Ã¼Ã´'Ã WtÂ¹pÃ±Cp$bÃšF`Â·7.^)Â¾!)Ã’Ã™Ëœâ€“Ã…Ã�Å¡^hÂ¾Ã¸Â³Â·Ã¬eÂ±Å’aeÃ–â€”Ã�,e=B}JÃ©ÃŸÂ¦$$Â½â€”Å¡Ã™ÃœCCÂ¯Â¶Ã¨8ÃŽÂ²â€“Ã…kÃ¨wx
LÃ‰ngTÂ±Ã¦Â¹Â£Ã“cÅ“Â¿Ã�/Â©Ã‰Ã¿ â€°ÃšCÃ’Â­mq;TtÂ¶â€“}0"zÃ–Pcd1Å¡Â­Â¤tË†â€žÃ�Ã“Ã¢qÃº[â„¢Ã¶UCÅ 2ÃžÂ¿Ã˜Â¯Â­Ã‰(Â¸ÃŸÃºÃ§Å¡mW,Ã’ Âºfâ€¹Ã…nâ„¢Ã„LÃªÃƒÂ�8Ã¼Ã�kÃ�â‚¬LÂ¥Ã�uJ1Å“Ã´rÃ‚SÅ’Ã“Ã¶tÂ�!7EUÃ­Ã¯b)Â�AÃ‹iÂ¬Ã¢-Ã™Hk8Ã²Ã�iXYwÃ…)OÂ�^"Ã‡Ã˜riÃ›Ã´{Â»wRUKÃ™Ã�ÃšlÃ“Â¬â‚¬â€šâ€™Ã—Â©T]
Âªbâ€”ÃŠÃ®KC^Ã—Mâ€œxÃ¹Ã¤Ã±zÂ¬zJÃ—{4[Â¹M'IÃ†eH1LCWÃ•]Å“Ã»ÂºÂ WDÃ¦Ã Â°OÃ…â€šÂ¹cÂ²ÃžuAâ€“rL`HÅ¡pCezâ€¡Vâ€™â€”Â Å½â€šÃ‹â€žâ€“Ã±Â­'ÂµR0Ã•Ã–=Ã€:Â±GÂ»C\nÃ†Ã‰5*Â¢Â â€ Â�3Å¡hQ4Ã½Ã’i$Ã•1"Ãœ]Â¢p-q3zcQ$ÂªÃ¶Â¨Â¥Ã¦fâ€ºâ€˜Â»Â´Ã�ÃšHÃ¡â€žeÂ²JÃ‡â€“iÃŠ:Â·Ã Â¬Ã˜c5Ã…kÂ»LaÂª*wiÂ�
[0Ã“wk Â¦aÂ¦0Ã•Â²Ã…Ã…â€šTÂ¸â€™Â³q:Ã†<Â¹Ãº	Ã’ËœÃ†}2VEâ€¢Ã�â‚¬pÂ¡Ã”3ÃšÂº â€¦hÂ³^Ã‡â€¡ÂºÃ§Ã¬Â¥Ã�nÃ³|ËœÃ–Ë†ÃŽË†+Â«Â¦dÃ¸â€˜MÂºâ€“d\ÂªDÃ°Ã›â€žÃŒÃ—LÃ�â€”â€”Ã�9Ã‡|â€¢FÃ¨Ã§Vmâ„¢Â¨â‚¬â„¢3ÃµSâ€“9Ã„Ã¥Â¢<ÃŒâ€°ÃŒmÂ¢Â±`Â·ÂºËœ&ZÂ²Å¾ Ã‹Â®DÂ«Â¶Â»6â„¢â€°Â©Â­HÃˆÃ€Ã¡Â«hÂ­iÂ³04Ã¦â€™hxÅ“i3Ã¯Â¨(Ã“LÂ·â€ â€¹Â¶Ã‹pÅ’
Æ’ÃœÃ’?	:ÃµdsÃ€â€“3Ã¦Ã“Â·ÃœjÃ¢Â¬9â€”]8nÂ¼&]I FÂ£Â¼â€¦Ã¬â€“â€”Å’0vÂ°LÃ‡Â�Ã…fÃ›2TÃ–â€™aÂµËœN@Ã–BSÃ�^Ã Â´4-Â±Â°bÃ—nÃˆÃˆÅ“Ã†D=KdÅ’Ã¸â€¦Ã„ÃˆK,â€ºÃ–RÂ§fjÃ¼$^Ã”ÃŽ!â€ž6^ s:Ãœun\Ã´kCÃžÃ²Ã·<â€”LÃºl
Ã�â€ºGÂ¹Ã€PÃ¡Â¼NcÂ¡Å¡Ã’â€¦Ã™WÃ�Â³Å“Â±vÃŠÃ¡Ã�â€žÃ—9â€¹Pâ€°cEÃ˜â€˜â„¢â€ºÂµÅ¸P<Ã—g1
ÂºÂ©Ã˜Â¬wiÂ�Ã�^l5Ã—I/';Ã‹+Â´Zâ€¡Ã“Ã„FÃ•p[ÃˆÃ°â€™
HÃ„	Ã³
9Â¬Dl4â€œÃ©Â±Ã�â€�V=^HÃ°;Å¾LÃ¤dÃ‰aâ€šÂ°Ã‹,#/Å½~Â²BÃ”Ã›
QÃ£Ã±QtIeÃ³rVB,Ã�Ã‚fâ€¹4#ÃŽÅ“câ€¹Ã‰3ZIÃ–Â Å’Â¢Â¥Â·Ã¼xaâ€¡ÃƒÃ§Ã¨â€žjÅ [5 Ã„!U?,3Å¾ÃŽÃ—â€¦Ã°dÃ“Ã·hÃ¡Å Aâ€°Ã¬Â�Ã„4Ã·ÃƒÃœZÃƒE{â€°Â®+W\ZÃ�E[â€°Â»ÂµkÂ»MÃ�Â­`Â¢Â©â€ ËœÃƒVâ€¹-fÂ¢Â¡â€ Â¢aÂ«eÅ %Â«YÂ¨Â©q%jÃ¢d,Ã”q`) Â¤Â¦â€¦Å¡Ë† Â¦E>0Ã™bÂ²tâ€“Å¸Â�
Ã·jsÃ�â€šÃ’â€™KÃˆcÃ¸(Ã©â€º;k(â€™#Ã´Å’Q
â„¢Â�C>
ÃµÂ³M9Ã³ÂºÃ†ÂµÂ¤Ã§Ã¢;uÃ€Â�)5>RÃ”Â¸fÃ“~ÃˆÂ¦â€”â€™-$feÂ«"FÃ¢UË†ÃŠwÂµPÃ�u
w+"Ã¥Ã‰oÃŒÂ�Â¨6sâ„¢Ã›9Â�Â�(Ã€Â¨Ã¹Â©hEÂ°Â½â€ n`m~â€œ@Â©Â�â€ºp!VkhÂµÂ Ã�1Å¡bEqqÃŠ@ÂºÃ¨lâ€º2 â€“YÃ£%â€˜â€šhÃ›{aÂ¶â€¡Ã…ÃžMÂ²Â¬Ã§L34Â®Ã‡l]Â®â€¹Å½Ã˜Å’m'RÃœe35Ã¦Ã¶Ë†Â­Ã�Â­ cP9Å¡eÃ�kÃ¶oÂ´LÂ³ÃŒ=Â�p8]â€�â€¡BÂ¶,Å¡Âº|Ã‰Â�dzXË†Ã˜k*Ã‡Ãš{#Ã±â€°pÃ£(â‚¬Â¶â€¡9Ã½'Å¡ÃœÂ³Â½Â¯kÆ’â€ Ã‚â€™Ã«SOÆ’â€¢Ã…Â®H6+aÂ¢ÂµË†Â�â€¹YÂ¨bËœb+XË†Ã–!Â°u!Â¢"ÂµË†Â�Ë†n2Ë† Ã…0Ã„`Ã… Ã”Â®c(Â�Ã“ÃœGÂºâ€¢Ã„Â»Å’Â Ã¢WÃ®%q.Ã¡Ã�Ã„Ã·Ã®%umÃ�Â£+ÃœQ,VnÂ¦-GphUÂ¸Â¢XÂ­&,Gt
Â·KÂ¢Ã…Ã…Â·Â¥RÃ„ÃŠÃ‰bKn
NÂ­R2g$VÂµÃ•Ã³
Qr#â€“Ã“ZUÃ�Ã°0ÃŽtÃ™Ã€Å“z
Ã«Ã¶oâ€œÃŽkÂ¯nâ€žTÂ°"SÃž+Â³/â€¦â‚¬Â½"iÂ�Å¾Ã£O%Ã�%&ÃŽâ€�Ã¢â€˜Ã‹Ã˜Â´IË†Ã“Â°Ã‹â€°ÃžM<Jâ€¢â€ºC=Ã¬u*ÃœÂ§â€žÃƒÂ¤GÃ‹Å Ã´;5Â�Å’Ã�Â£Ã±Ã¹Ã¤Â¬6ÃŒ2Â¦â€˜Å¾hÂ¸RÂ�Âº<Ã•Å¡%Ã·Â â€¦Ã‡	â€šgâ€¡.
>3.â„¢yÃ§Ã�zitâ€º`4C`kÂ¢Â¼Ã¡!Ã¡lÃ„Ã¯ sÃ‚[Ã—!Â¤lÂ¾Ã¦o"Æ’Â�IÃ”'@Âªu)3â€ºÃ´Â®â€œ@Z
Ã Â¾]
Ã¼Å“'â€¡4Â¸PÃžkÃ�-qÃ„Hâ€°Ã“Ã�BdÂ´Ã¿ â€”Â¹Â°Ã„A&ÃŠUÂ�Câ€žÃ¶zâ€šâ€šRÃ¦Å tfÂ¬>ËœÃ‘idÅ¡EÃ§Ã‘LÃ·Ã¡Ã½Â¡VÂ±hÂ§Â­cÂ¿Â¥Â¨Æ’@gÂ¼â€¦Ã�Ã¶^ÃžÃ‹c.Ã…Â¾â€žÃ¦â€œIÂ�[Âª+Â·zÃ�Ã’Ãš,Â½Ã�Â»Â¶â‚¬Câ€º7jk$Ã Â¹â€“â‚¬Å½Â¾Ã…Ã™ppÂ¶Ã�Ã¾Ã©ÃŽÂ¤Â Â½Ã˜ÃŽÅ’q Ã±pÃ¦Å¾Ã…Â¥#Ã˜Ã¢4Â�9ÃƒÃ‚K^MYVâ€œ,Â¶Ã‰z_Ã²Ã¦:â€¦;Ã•Â«Â¦I3Ã¢JÂ£Â¤Ã»5$7ÃˆxÃ¼n\Ã¢]ÃŠeÂ¯(Å¸&Å½â€¹Â¶2<6Ã„â€ fÃ— Ã¦Â¢Ã†Â±qWÃ„Â±[(Ã™Ã‚Å½Ã§â€šT7Â¨@ÃˆÃ‰Ã�ÃŸâ€šÃ¯Ã™"&3TYlGÅ½Â�â€ )â€ #5Å AÂ©^T2Ã†Ã�â€ )Â©â€ Â©â€ Â¤yGXÃ�â€ Â©"â€ )Â©Â¼Ã…V WSâ€ #Â©]Râ€“râ€¹q5Ã•bÃ¢WÃ¾BhÂ¯u+ÂªÃ…Ã„Ã—Ã¼â€žnÃ‘^ÃªkÂªÃ�jâ€°jeÅ“WË†Ã•Ã•`ÂµDÂµ2ÃŒ+Ã„ ÂµDÂµÂµ5Ã”{Â¤Ãž0RFâ€™HÃ·AÃ›<ÃŠÃ�Â§ Ã†Ë†Ã¦0Ã‘Â£Ãª4 Ã¶ÃšÂµ[Â¬/1Â²â‚¬Ã¢<-Â¬Å¡Ã¶Â²rÃ—0oÃ—wÂ Â´Â�xÃ�Ã’Ã‹â€ž
g01Â¬â€žÃ¥EMÃ¨â€ºâ€¡Ãƒ\6ÂµEâ€ºâ€˜fÃ™O	kÃ·CÂºnÃ“1`iÃ®Ã’Â²Ã¡Ã‚!Ã‘LÃ„Ã¿ 
Â³Â¬Â�\Ãµ*:M=Ã‡Â»câ€¹2[â€°Ã˜sÃ•LÃ²\Å’KÂ L^â„¢Ã¼Ã„N\Â¶#Â»
Ã‡\â€¦â€¦ÃŸÃ¯IÅ“Ã‰$Â¸ÃŽÃ±Ã�Â®Ã”HÃƒâ€¡	Ã›Ã­/Â´>Liâ€�â€žâ€ g^$ 7NÃ�Ã‘Ã‘2M2ÂªNg=kÂ½Ã�}Å¸l6â€¡	â€”JWË†â€�ÃžÃ©TÂ·+ÂµÂ¦Ã¼Ã‚FÃ¨Â¢Vs6Ã½Ã†4Â»2+2IÃ�9Ã´9Â®Ã‡GÃ™Ã‡1+Ã„8;*Ã•Â§Å¾Â½D*Ã®Ã‘WÃšÃ§Ã¡3MaÂ¤Â·Ë†Â¥t}Å¡Â²Ãœâ€¦Q+Ã†Ã¼Âµ8HÃ­Sâ€�Ã¼xGÃ©Ã�Ë†Â¦Ã‹lâ€žÃ©Ãˆ	5 ÂµÃ„Æ’6Ã¤Ãœ(kIÅ¡Â¯Sâ€ fÃ–&Â¸Â®Ã—v|Ã„yË†*Ã§Â¦Å’Ã‰Ã¹@7-Â®Ã„[]ÃŽÃ–Â¿Ãª`Âºâ€¦=:â€¦Å¾JVnÃ�Â³vÃ°Ã–KEÂ¼â€š Â»mÃ  Ã·fÂ®:Ã‹â„¢â€“4Â�rÃ°Â¡4` ÃœÂ¹Ã§Å¾~â€¹C=Å“â€¦Â¾Ã�j|VDtK.Æ’"9	Ã�
Â­â€“Ã©XÃ¡Â³6WÃ’Ã¯IL-Ã�â€¡
Ã‡
PK     �ŠU]Š/t‹   ‹   '  vendor/composer/autoload_namespaces.phpnu „[µü¤        <?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
);
PK     �ŠU]ç•ŽKÝ:  Ý:  %  vendor/composer/InstalledVersions.phpnu „[µü¤        <?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer;

use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;

/**
 * This class is copied in every Composer installed project and available to all
 *
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 *
 * To require its presence, you can require `composer-runtime-api ^2.0`
 *
 * @final
 */
class InstalledVersions
{
    /**
     * @var mixed[]|null
     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     */
    private static $installed;

    /**
     * @var bool|null
     */
    private static $canGetVendors;

    /**
     * @var array[]
     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static $installedByVendor = array();

    /**
     * Returns a list of all package names which are present, either by being installed, replaced or provided
     *
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackages()
    {
        $packages = array();
        foreach (self::getInstalled() as $installed) {
            $packages[] = array_keys($installed['versions']);
        }

        if (1 === \count($packages)) {
            return $packages[0];
        }

        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
    }

    /**
     * Returns a list of all package names with a specific type e.g. 'library'
     *
     * @param  string   $type
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackagesByType($type)
    {
        $packagesByType = array();

        foreach (self::getInstalled() as $installed) {
            foreach ($installed['versions'] as $name => $package) {
                if (isset($package['type']) && $package['type'] === $type) {
                    $packagesByType[] = $name;
                }
            }
        }

        return $packagesByType;
    }

    /**
     * Checks whether the given package is installed
     *
     * This also returns true if the package name is provided or replaced by another package
     *
     * @param  string $packageName
     * @param  bool   $includeDevRequirements
     * @return bool
     */
    public static function isInstalled($packageName, $includeDevRequirements = true)
    {
        foreach (self::getInstalled() as $installed) {
            if (isset($installed['versions'][$packageName])) {
                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
            }
        }

        return false;
    }

    /**
     * Checks whether the given package satisfies a version constraint
     *
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
     *
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
     *
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
     * @param  string        $packageName
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
     * @return bool
     */
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    {
        $constraint = $parser->parseConstraints($constraint);
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));

        return $provided->matches($constraint);
    }

    /**
     * Returns a version constraint representing all the range(s) which are installed for a given package
     *
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
     * whether a given version of a package is installed, and not just whether it exists
     *
     * @param  string $packageName
     * @return string Version constraint usable with composer/semver
     */
    public static function getVersionRanges($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            $ranges = array();
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
            }
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
            }
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
            }
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
            }

            return implode(' || ', $ranges);
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getPrettyVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['pretty_version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
     */
    public static function getReference($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['reference'])) {
                return null;
            }

            return $installed['versions'][$packageName]['reference'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
     */
    public static function getInstallPath($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @return array
     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     */
    public static function getRootPackage()
    {
        $installed = self::getInstalled();

        return $installed[0]['root'];
    }

    /**
     * Returns the raw installed.php data for custom implementations
     *
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
     * @return array[]
     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     */
    public static function getRawData()
    {
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = include __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }

        return self::$installed;
    }

    /**
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
     *
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    public static function getAllRawData()
    {
        return self::getInstalled();
    }

    /**
     * Lets you reload the static array from another file
     *
     * This is only useful for complex integrations in which a project needs to use
     * this class but then also needs to execute another project's autoloader in process,
     * and wants to ensure both projects have access to their version of installed.php.
     *
     * A typical case would be PHPUnit, where it would need to make sure it reads all
     * the data it needs from this class, then call reload() with
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
     * the project in which it runs can then also use this class safely, without
     * interference between PHPUnit's dependencies and the project's dependencies.
     *
     * @param  array[] $data A vendor/composer/installed.php data set
     * @return void
     *
     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     */
    public static function reload($data)
    {
        self::$installed = $data;
        self::$installedByVendor = array();
    }

    /**
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static function getInstalled()
    {
        if (null === self::$canGetVendors) {
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
        }

        $installed = array();

        if (self::$canGetVendors) {
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
                if (isset(self::$installedByVendor[$vendorDir])) {
                    $installed[] = self::$installedByVendor[$vendorDir];
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                        self::$installed = $installed[count($installed) - 1];
                    }
                }
            }
        }

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = require __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }
        $installed[] = self::$installed;

        return $installed;
    }
}
PK     �ŠU] Õ.  .    vendor/composer/LICENSEnu „[µü¤        
Copyright (c) Nils Adermann, Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

PK     �ŠU]Ûú­+m»  m»  %  vendor/composer/autoload_classmap.phpnu „[µü¤        <?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    'RankMath\\ACF\\ACF' => $baseDir . '/includes/modules/acf/class-acf.php',
    'RankMath\\AI_Visibility\\AI_Visibility' => $baseDir . '/includes/modules/ai-visibility/class-ai-visibility.php',
    'RankMath\\AI_Visibility\\Admin' => $baseDir . '/includes/modules/ai-visibility/Admin/class-admin.php',
    'RankMath\\AI_Visibility\\Api\\Base_Controller' => $baseDir . '/includes/modules/ai-visibility/Api/class-base-controller.php',
    'RankMath\\AI_Visibility\\Api\\Brands_Controller' => $baseDir . '/includes/modules/ai-visibility/Api/class-brands-controller.php',
    'RankMath\\AI_Visibility\\Api\\Checkout_Controller' => $baseDir . '/includes/modules/ai-visibility/Api/class-checkout-controller.php',
    'RankMath\\AI_Visibility\\Api\\Trial_Controller' => $baseDir . '/includes/modules/ai-visibility/Api/class-trial-controller.php',
    'RankMath\\AI_Visibility\\Cache' => $baseDir . '/includes/modules/ai-visibility/class-cache.php',
    'RankMath\\Abilities\\AI_Visibility\\Create_AI_Visibility_Brand' => $baseDir . '/includes/abilities/ai-visibility/class-create-ai-visibility-brand.php',
    'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Brand_Insights' => $baseDir . '/includes/abilities/ai-visibility/class-get-ai-visibility-brand-insights.php',
    'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Brand_Queries' => $baseDir . '/includes/abilities/ai-visibility/class-get-ai-visibility-brand-queries.php',
    'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Overview' => $baseDir . '/includes/abilities/ai-visibility/class-get-ai-visibility-overview.php',
    'RankMath\\Abilities\\AI_Visibility\\Subscriber' => $baseDir . '/includes/abilities/ai-visibility/class-subscriber.php',
    'RankMath\\Abilities\\Abilities' => $baseDir . '/includes/abilities/class-abilities.php',
    'RankMath\\Abilities\\Ability_Interface' => $baseDir . '/includes/abilities/interface-ability.php',
    'RankMath\\Abilities\\Analytics\\Get_Top_Keywords' => $baseDir . '/includes/abilities/analytics/class-get-top-keywords.php',
    'RankMath\\Abilities\\Analytics\\Subscriber' => $baseDir . '/includes/abilities/analytics/class-subscriber.php',
    'RankMath\\Abilities\\Analytics\\Top_Keywords_Runner' => $baseDir . '/includes/abilities/analytics/class-top-keywords-runner.php',
    'RankMath\\Abilities\\Content_Analysis\\Analyze_Post_Content' => $baseDir . '/includes/abilities/content-analysis/class-analyze-post-content.php',
    'RankMath\\Abilities\\Content_Analysis\\Content_Analysis_Data' => $baseDir . '/includes/abilities/content-analysis/class-content-analysis-data.php',
    'RankMath\\Abilities\\Content_Analysis\\Get_SEO_Scores' => $baseDir . '/includes/abilities/content-analysis/class-get-seo-scores.php',
    'RankMath\\Abilities\\Content_Analysis\\Subscriber' => $baseDir . '/includes/abilities/content-analysis/class-subscriber.php',
    'RankMath\\Abilities\\Link_Genius\\Get_Link_Report' => $baseDir . '/includes/abilities/link-genius/class-get-link-report.php',
    'RankMath\\Abilities\\Link_Genius\\Get_Post_Links' => $baseDir . '/includes/abilities/link-genius/class-get-post-links.php',
    'RankMath\\Abilities\\Link_Genius\\Link_Report_Runner' => $baseDir . '/includes/abilities/link-genius/class-link-report-runner.php',
    'RankMath\\Abilities\\Link_Genius\\Post_Links_Runner' => $baseDir . '/includes/abilities/link-genius/class-post-links-runner.php',
    'RankMath\\Abilities\\Link_Genius\\Subscriber' => $baseDir . '/includes/abilities/link-genius/class-subscriber.php',
    'RankMath\\Abilities\\Post_SEO\\Get_Post_SEO_Meta' => $baseDir . '/includes/abilities/post-seo/class-get-post-seo-meta.php',
    'RankMath\\Abilities\\Post_SEO\\Subscriber' => $baseDir . '/includes/abilities/post-seo/class-subscriber.php',
    'RankMath\\Abilities\\SEO_Analysis\\Audit_Result' => $baseDir . '/includes/abilities/seo-analysis/class-audit-result.php',
    'RankMath\\Abilities\\SEO_Analysis\\Audit_Runner' => $baseDir . '/includes/abilities/seo-analysis/class-audit-runner.php',
    'RankMath\\Abilities\\SEO_Analysis\\Audit_Site_SEO' => $baseDir . '/includes/abilities/seo-analysis/class-audit-site-seo.php',
    'RankMath\\Abilities\\SEO_Analysis\\Finding' => $baseDir . '/includes/abilities/seo-analysis/class-finding.php',
    'RankMath\\Abilities\\SEO_Analysis\\Fix_Hint_Map' => $baseDir . '/includes/abilities/seo-analysis/class-fix-hint-map.php',
    'RankMath\\Abilities\\SEO_Analysis\\Fix_Runner' => $baseDir . '/includes/abilities/seo-analysis/class-fix-runner.php',
    'RankMath\\Abilities\\SEO_Analysis\\Fix_Site_SEO' => $baseDir . '/includes/abilities/seo-analysis/class-fix-site-seo.php',
    'RankMath\\Abilities\\SEO_Analysis\\Subscriber' => $baseDir . '/includes/abilities/seo-analysis/class-subscriber.php',
    'RankMath\\Abilities\\Schema\\Get_Post_Schema' => $baseDir . '/includes/abilities/schema/class-get-post-schema.php',
    'RankMath\\Abilities\\Schema\\Subscriber' => $baseDir . '/includes/abilities/schema/class-subscriber.php',
    'RankMath\\Abilities\\Subscriber_Interface' => $baseDir . '/includes/abilities/interface-subscriber.php',
    'RankMath\\Admin\\Admin' => $baseDir . '/includes/admin/class-admin.php',
    'RankMath\\Admin\\Admin_Breadcrumbs' => $baseDir . '/includes/admin/class-admin-breadcrumbs.php',
    'RankMath\\Admin\\Admin_Dashboard_Nav' => $baseDir . '/includes/admin/class-admin-dashboard-nav.php',
    'RankMath\\Admin\\Admin_Header' => $baseDir . '/includes/admin/class-admin-header.php',
    'RankMath\\Admin\\Admin_Helper' => $baseDir . '/includes/admin/class-admin-helper.php',
    'RankMath\\Admin\\Admin_Init' => $baseDir . '/includes/admin/class-admin-init.php',
    'RankMath\\Admin\\Admin_Menu' => $baseDir . '/includes/admin/class-admin-menu.php',
    'RankMath\\Admin\\Api' => $baseDir . '/includes/admin/class-api.php',
    'RankMath\\Admin\\Ask_Review' => $baseDir . '/includes/admin/class-ask-review.php',
    'RankMath\\Admin\\Assets' => $baseDir . '/includes/admin/class-assets.php',
    'RankMath\\Admin\\Bulk_Actions' => $baseDir . '/includes/admin/class-bulk-actions.php',
    'RankMath\\Admin\\CMB2_Fields' => $baseDir . '/includes/admin/class-cmb2-fields.php',
    'RankMath\\Admin\\CMB2_Options' => $baseDir . '/includes/admin/class-cmb2-options.php',
    'RankMath\\Admin\\Database\\Clauses' => $baseDir . '/includes/admin/database/class-clauses.php',
    'RankMath\\Admin\\Database\\Database' => $baseDir . '/includes/admin/database/class-database.php',
    'RankMath\\Admin\\Database\\Escape' => $baseDir . '/includes/admin/database/class-escape.php',
    'RankMath\\Admin\\Database\\GroupBy' => $baseDir . '/includes/admin/database/class-groupby.php',
    'RankMath\\Admin\\Database\\Joins' => $baseDir . '/includes/admin/database/class-joins.php',
    'RankMath\\Admin\\Database\\OrderBy' => $baseDir . '/includes/admin/database/class-orderby.php',
    'RankMath\\Admin\\Database\\Query_Builder' => $baseDir . '/includes/admin/database/class-query-builder.php',
    'RankMath\\Admin\\Database\\Select' => $baseDir . '/includes/admin/database/class-select.php',
    'RankMath\\Admin\\Database\\Translate' => $baseDir . '/includes/admin/database/class-translate.php',
    'RankMath\\Admin\\Database\\Where' => $baseDir . '/includes/admin/database/class-where.php',
    'RankMath\\Admin\\Import_Export' => $baseDir . '/includes/admin/class-import-export.php',
    'RankMath\\Admin\\Importers\\AIOSEO' => $baseDir . '/includes/admin/importers/class-aioseo.php',
    'RankMath\\Admin\\Importers\\AIO_Rich_Snippet' => $baseDir . '/includes/admin/importers/class-aio-rich-snippet.php',
    'RankMath\\Admin\\Importers\\Detector' => $baseDir . '/includes/admin/importers/class-detector.php',
    'RankMath\\Admin\\Importers\\Plugin_Importer' => $baseDir . '/includes/admin/importers/class-plugin-importer.php',
    'RankMath\\Admin\\Importers\\Redirections' => $baseDir . '/includes/admin/importers/class-redirections.php',
    'RankMath\\Admin\\Importers\\SEOPress' => $baseDir . '/includes/admin/importers/class-seopress.php',
    'RankMath\\Admin\\Importers\\Status' => $baseDir . '/includes/admin/importers/class-status.php',
    'RankMath\\Admin\\Importers\\WP_Schema_Pro' => $baseDir . '/includes/admin/importers/class-wp-schema-pro.php',
    'RankMath\\Admin\\Importers\\Yoast' => $baseDir . '/includes/admin/importers/class-yoast.php',
    'RankMath\\Admin\\List_Table' => $baseDir . '/includes/admin/class-list-table.php',
    'RankMath\\Admin\\Lock_Modified_Date' => $baseDir . '/includes/admin/class-lock-modified-date.php',
    'RankMath\\Admin\\Metabox\\IScreen' => $baseDir . '/includes/admin/metabox/interface-screen.php',
    'RankMath\\Admin\\Metabox\\Metabox' => $baseDir . '/includes/admin/metabox/class-metabox.php',
    'RankMath\\Admin\\Metabox\\Post_Screen' => $baseDir . '/includes/admin/metabox/class-post-screen.php',
    'RankMath\\Admin\\Metabox\\Screen' => $baseDir . '/includes/admin/metabox/class-screen.php',
    'RankMath\\Admin\\Metabox\\Taxonomy_Screen' => $baseDir . '/includes/admin/metabox/class-taxonomy-screen.php',
    'RankMath\\Admin\\Metabox\\User_Screen' => $baseDir . '/includes/admin/metabox/class-user-screen.php',
    'RankMath\\Admin\\Notices' => $baseDir . '/includes/admin/class-notices.php',
    'RankMath\\Admin\\Notifications\\Notification' => $baseDir . '/includes/admin/notifications/class-notification.php',
    'RankMath\\Admin\\Notifications\\Notification_Center' => $baseDir . '/includes/admin/notifications/class-notification-center.php',
    'RankMath\\Admin\\Option_Center' => $baseDir . '/includes/admin/class-option-center.php',
    'RankMath\\Admin\\Options' => $baseDir . '/includes/admin/class-options.php',
    'RankMath\\Admin\\Page' => $baseDir . '/includes/admin/class-page.php',
    'RankMath\\Admin\\Post_Columns' => $baseDir . '/includes/admin/class-post-columns.php',
    'RankMath\\Admin\\Post_Filters' => $baseDir . '/includes/admin/class-post-filters.php',
    'RankMath\\Admin\\Pro_Notice' => $baseDir . '/includes/admin/class-pro-notice.php',
    'RankMath\\Admin\\Register_Options_Page' => $baseDir . '/includes/admin/class-register-options-page.php',
    'RankMath\\Admin\\Registration' => $baseDir . '/includes/admin/class-registration.php',
    'RankMath\\Admin\\Sanitize_Settings' => $baseDir . '/includes/admin/class-sanitize-settings.php',
    'RankMath\\Admin\\Setup_Wizard' => $baseDir . '/includes/admin/class-setup-wizard.php',
    'RankMath\\Admin\\Watcher' => $baseDir . '/includes/admin/watcher/class-watcher.php',
    'RankMath\\Admin_Bar_Menu' => $baseDir . '/includes/admin/class-admin-bar-menu.php',
    'RankMath\\Analytics\\AJAX' => $baseDir . '/includes/modules/analytics/class-ajax.php',
    'RankMath\\Analytics\\Analytics' => $baseDir . '/includes/modules/analytics/class-analytics.php',
    'RankMath\\Analytics\\Analytics_Common' => $baseDir . '/includes/modules/analytics/class-analytics-common.php',
    'RankMath\\Analytics\\Analytics_Stats' => $baseDir . '/includes/modules/analytics/class-analytics-stats.php',
    'RankMath\\Analytics\\DB' => $baseDir . '/includes/modules/analytics/class-db.php',
    'RankMath\\Analytics\\Email_Reports' => $baseDir . '/includes/modules/analytics/class-email-reports.php',
    'RankMath\\Analytics\\GTag' => $baseDir . '/includes/modules/analytics/class-gtag.php',
    'RankMath\\Analytics\\Keywords' => $baseDir . '/includes/modules/analytics/class-keywords.php',
    'RankMath\\Analytics\\Objects' => $baseDir . '/includes/modules/analytics/class-objects.php',
    'RankMath\\Analytics\\Posts' => $baseDir . '/includes/modules/analytics/class-posts.php',
    'RankMath\\Analytics\\Rest' => $baseDir . '/includes/modules/analytics/rest/class-rest.php',
    'RankMath\\Analytics\\Stats' => $baseDir . '/includes/modules/analytics/class-stats.php',
    'RankMath\\Analytics\\Summary' => $baseDir . '/includes/modules/analytics/class-summary.php',
    'RankMath\\Analytics\\Url_Inspection' => $baseDir . '/includes/modules/analytics/class-url-inspection.php',
    'RankMath\\Analytics\\Watcher' => $baseDir . '/includes/modules/analytics/class-watcher.php',
    'RankMath\\Analytics\\Workflow\\Base' => $baseDir . '/includes/modules/analytics/workflows/class-base.php',
    'RankMath\\Analytics\\Workflow\\Console' => $baseDir . '/includes/modules/analytics/workflows/class-console.php',
    'RankMath\\Analytics\\Workflow\\Inspections' => $baseDir . '/includes/modules/analytics/workflows/class-inspections.php',
    'RankMath\\Analytics\\Workflow\\Jobs' => $baseDir . '/includes/modules/analytics/workflows/class-jobs.php',
    'RankMath\\Analytics\\Workflow\\OAuth' => $baseDir . '/includes/modules/analytics/workflows/class-oauth.php',
    'RankMath\\Analytics\\Workflow\\Objects' => $baseDir . '/includes/modules/analytics/workflows/class-objects.php',
    'RankMath\\Analytics\\Workflow\\Workflow' => $baseDir . '/includes/modules/analytics/workflows/class-workflow.php',
    'RankMath\\Auto_Updater' => $baseDir . '/includes/class-auto-updater.php',
    'RankMath\\Beta_Optin' => $baseDir . '/includes/modules/version-control/class-beta-optin.php',
    'RankMath\\BuddyPress\\Admin' => $baseDir . '/includes/modules/buddypress/class-admin.php',
    'RankMath\\BuddyPress\\BuddyPress' => $baseDir . '/includes/modules/buddypress/class-buddypress.php',
    'RankMath\\CLI\\Commands' => $baseDir . '/includes/cli/class-commands.php',
    'RankMath\\CMB2' => $baseDir . '/includes/class-cmb2.php',
    'RankMath\\Common' => $baseDir . '/includes/class-common.php',
    'RankMath\\Compatibility' => $baseDir . '/includes/class-compatibility.php',
    'RankMath\\ContentAI\\Admin' => $baseDir . '/includes/modules/content-ai/class-admin.php',
    'RankMath\\ContentAI\\Assets' => $baseDir . '/includes/modules/content-ai/class-assets.php',
    'RankMath\\ContentAI\\Block_Command' => $baseDir . '/includes/modules/content-ai/blocks/command/class-block-command.php',
    'RankMath\\ContentAI\\Bulk_Actions' => $baseDir . '/includes/modules/content-ai/class-bulk-actions.php',
    'RankMath\\ContentAI\\Bulk_Edit_SEO_Meta' => $baseDir . '/includes/modules/content-ai/class-bulk-edit-seo-meta.php',
    'RankMath\\ContentAI\\Bulk_Image_Alt' => $baseDir . '/includes/modules/content-ai/class-bulk-image-alt.php',
    'RankMath\\ContentAI\\Content_AI' => $baseDir . '/includes/modules/content-ai/class-content-ai.php',
    'RankMath\\ContentAI\\Content_AI_Page' => $baseDir . '/includes/modules/content-ai/class-content-ai-page.php',
    'RankMath\\ContentAI\\Event_Scheduler' => $baseDir . '/includes/modules/content-ai/class-event-scheduler.php',
    'RankMath\\ContentAI\\Rest' => $baseDir . '/includes/modules/content-ai/class-rest.php',
    'RankMath\\Dashboard_Widget' => $baseDir . '/includes/admin/class-dashboard-widget.php',
    'RankMath\\Data_Encryption' => $baseDir . '/includes/class-data-encryption.php',
    'RankMath\\Defaults' => $baseDir . '/includes/class-defaults.php',
    'RankMath\\Divi\\Divi' => $baseDir . '/includes/3rdparty/divi/class-divi.php',
    'RankMath\\Divi\\Divi_Admin' => $baseDir . '/includes/3rdparty/divi/class-divi-admin.php',
    'RankMath\\Elementor\\Elementor' => $baseDir . '/includes/3rdparty/elementor/class-elementor.php',
    'RankMath\\Frontend\\Breadcrumbs' => $baseDir . '/includes/frontend/class-breadcrumbs.php',
    'RankMath\\Frontend\\Comments' => $baseDir . '/includes/frontend/class-comments.php',
    'RankMath\\Frontend\\Frontend' => $baseDir . '/includes/frontend/class-frontend.php',
    'RankMath\\Frontend\\Head' => $baseDir . '/includes/frontend/class-head.php',
    'RankMath\\Frontend\\Link_Attributes' => $baseDir . '/includes/frontend/class-link-attributes.php',
    'RankMath\\Frontend\\Redirection' => $baseDir . '/includes/frontend/class-redirection.php',
    'RankMath\\Frontend\\Shortcodes' => $baseDir . '/includes/frontend/class-shortcodes.php',
    'RankMath\\Frontend_SEO_Score' => $baseDir . '/includes/class-frontend-seo-score.php',
    'RankMath\\Google\\Analytics' => $baseDir . '/includes/modules/analytics/google/class-analytics.php',
    'RankMath\\Google\\Api' => $baseDir . '/includes/modules/analytics/google/class-api.php',
    'RankMath\\Google\\Authentication' => $baseDir . '/includes/modules/analytics/google/class-authentication.php',
    'RankMath\\Google\\Console' => $baseDir . '/includes/modules/analytics/google/class-console.php',
    'RankMath\\Google\\Permissions' => $baseDir . '/includes/modules/analytics/google/class-permissions.php',
    'RankMath\\Google\\Request' => $baseDir . '/includes/modules/analytics/google/class-request.php',
    'RankMath\\Google\\Url_Inspection' => $baseDir . '/includes/modules/analytics/google/class-url-inspection.php',
    'RankMath\\Helper' => $baseDir . '/includes/class-helper.php',
    'RankMath\\Helpers\\Analytics' => $baseDir . '/includes/helpers/class-analytics.php',
    'RankMath\\Helpers\\Api' => $baseDir . '/includes/helpers/class-api.php',
    'RankMath\\Helpers\\Arr' => $baseDir . '/includes/helpers/class-arr.php',
    'RankMath\\Helpers\\Attachment' => $baseDir . '/includes/helpers/class-attachment.php',
    'RankMath\\Helpers\\Choices' => $baseDir . '/includes/helpers/class-choices.php',
    'RankMath\\Helpers\\Conditional' => $baseDir . '/includes/helpers/class-conditional.php',
    'RankMath\\Helpers\\Content_AI' => $baseDir . '/includes/helpers/class-content-ai.php',
    'RankMath\\Helpers\\DB' => $baseDir . '/includes/helpers/class-db.php',
    'RankMath\\Helpers\\Editor' => $baseDir . '/includes/helpers/class-editor.php',
    'RankMath\\Helpers\\HTML' => $baseDir . '/includes/helpers/class-html.php',
    'RankMath\\Helpers\\Locale' => $baseDir . '/includes/helpers/class-locale.php',
    'RankMath\\Helpers\\Options' => $baseDir . '/includes/helpers/class-options.php',
    'RankMath\\Helpers\\Param' => $baseDir . '/includes/helpers/class-param.php',
    'RankMath\\Helpers\\Post_Type' => $baseDir . '/includes/helpers/class-post-type.php',
    'RankMath\\Helpers\\Schedule' => $baseDir . '/includes/helpers/class-schedule.php',
    'RankMath\\Helpers\\Schema' => $baseDir . '/includes/helpers/class-schema.php',
    'RankMath\\Helpers\\Security' => $baseDir . '/includes/helpers/class-security.php',
    'RankMath\\Helpers\\Sitepress' => $baseDir . '/includes/helpers/class-sitepress.php',
    'RankMath\\Helpers\\Str' => $baseDir . '/includes/helpers/class-str.php',
    'RankMath\\Helpers\\Taxonomy' => $baseDir . '/includes/helpers/class-taxonomy.php',
    'RankMath\\Helpers\\Url' => $baseDir . '/includes/helpers/class-url.php',
    'RankMath\\Helpers\\WordPress' => $baseDir . '/includes/helpers/class-wordpress.php',
    'RankMath\\Image_Seo\\Add_Attributes' => $baseDir . '/includes/modules/image-seo/class-add-attributes.php',
    'RankMath\\Image_Seo\\Admin' => $baseDir . '/includes/modules/image-seo/class-admin.php',
    'RankMath\\Image_Seo\\Image_Seo' => $baseDir . '/includes/modules/image-seo/class-image-seo.php',
    'RankMath\\Installer' => $baseDir . '/includes/class-installer.php',
    'RankMath\\Instant_Indexing\\Api' => $baseDir . '/includes/modules/instant-indexing/class-api.php',
    'RankMath\\Instant_Indexing\\Instant_Indexing' => $baseDir . '/includes/modules/instant-indexing/class-instant-indexing.php',
    'RankMath\\Instant_Indexing\\Rest' => $baseDir . '/includes/modules/instant-indexing/class-rest.php',
    'RankMath\\Json_Manager' => $baseDir . '/includes/class-json-manager.php',
    'RankMath\\KB' => $baseDir . '/includes/class-kb.php',
    'RankMath\\LLMS\\LLMS_Txt' => $baseDir . '/includes/modules/llms/class-llms-txt.php',
    'RankMath\\Links\\Admin\\Admin' => $baseDir . '/includes/modules/links/Admin/class-admin.php',
    'RankMath\\Links\\Api\\Controller' => $baseDir . '/includes/modules/links/Api/class-controller.php',
    'RankMath\\Links\\ContentProcessor' => $baseDir . '/includes/modules/links/class-contentprocessor.php',
    'RankMath\\Links\\Link' => $baseDir . '/includes/modules/links/class-link.php',
    'RankMath\\Links\\Links' => $baseDir . '/includes/modules/links/class-links.php',
    'RankMath\\Links\\Storage' => $baseDir . '/includes/modules/links/class-storage.php',
    'RankMath\\Local_Seo\\KML_File' => $baseDir . '/includes/modules/local-seo/class-kml-file.php',
    'RankMath\\Local_Seo\\Local_Seo' => $baseDir . '/includes/modules/local-seo/class-local-seo.php',
    'RankMath\\Metadata' => $baseDir . '/includes/class-metadata.php',
    'RankMath\\Module\\Base' => $baseDir . '/includes/module/class-base.php',
    'RankMath\\Module\\Manager' => $baseDir . '/includes/module/class-manager.php',
    'RankMath\\Module\\Module' => $baseDir . '/includes/module/class-module.php',
    'RankMath\\Monitor\\Admin' => $baseDir . '/includes/modules/404-monitor/class-admin.php',
    'RankMath\\Monitor\\DB' => $baseDir . '/includes/modules/404-monitor/class-db.php',
    'RankMath\\Monitor\\Monitor' => $baseDir . '/includes/modules/404-monitor/class-monitor.php',
    'RankMath\\Monitor\\Table' => $baseDir . '/includes/modules/404-monitor/class-table.php',
    'RankMath\\OpenGraph\\Facebook' => $baseDir . '/includes/opengraph/class-facebook.php',
    'RankMath\\OpenGraph\\Facebook_Locale' => $baseDir . '/includes/opengraph/class-facebook-locale.php',
    'RankMath\\OpenGraph\\Image' => $baseDir . '/includes/opengraph/class-image.php',
    'RankMath\\OpenGraph\\OpenGraph' => $baseDir . '/includes/opengraph/class-opengraph.php',
    'RankMath\\OpenGraph\\Slack' => $baseDir . '/includes/opengraph/class-slack.php',
    'RankMath\\OpenGraph\\Twitter' => $baseDir . '/includes/opengraph/class-twitter.php',
    'RankMath\\Paper\\Archive' => $baseDir . '/includes/frontend/paper/class-archive.php',
    'RankMath\\Paper\\Author' => $baseDir . '/includes/frontend/paper/class-author.php',
    'RankMath\\Paper\\BP_Group' => $baseDir . '/includes/modules/buddypress/paper/class-bp-group.php',
    'RankMath\\Paper\\BP_User' => $baseDir . '/includes/modules/buddypress/paper/class-bp-user.php',
    'RankMath\\Paper\\Blog' => $baseDir . '/includes/frontend/paper/class-blog.php',
    'RankMath\\Paper\\Date' => $baseDir . '/includes/frontend/paper/class-date.php',
    'RankMath\\Paper\\Error_404' => $baseDir . '/includes/frontend/paper/class-error-404.php',
    'RankMath\\Paper\\IPaper' => $baseDir . '/includes/frontend/paper/interface-paper.php',
    'RankMath\\Paper\\Misc' => $baseDir . '/includes/frontend/paper/class-misc.php',
    'RankMath\\Paper\\Paper' => $baseDir . '/includes/frontend/paper/class-paper.php',
    'RankMath\\Paper\\Search' => $baseDir . '/includes/frontend/paper/class-search.php',
    'RankMath\\Paper\\Shop' => $baseDir . '/includes/frontend/paper/class-shop.php',
    'RankMath\\Paper\\Singular' => $baseDir . '/includes/frontend/paper/class-singular.php',
    'RankMath\\Paper\\Taxonomy' => $baseDir . '/includes/frontend/paper/class-taxonomy.php',
    'RankMath\\Post' => $baseDir . '/includes/class-post.php',
    'RankMath\\Redirections\\Admin' => $baseDir . '/includes/modules/redirections/class-admin.php',
    'RankMath\\Redirections\\Cache' => $baseDir . '/includes/modules/redirections/class-cache.php',
    'RankMath\\Redirections\\DB' => $baseDir . '/includes/modules/redirections/class-db.php',
    'RankMath\\Redirections\\Debugger' => $baseDir . '/includes/modules/redirections/class-debugger.php',
    'RankMath\\Redirections\\Export' => $baseDir . '/includes/modules/redirections/class-export.php',
    'RankMath\\Redirections\\Import_Export' => $baseDir . '/includes/modules/redirections/class-import-export.php',
    'RankMath\\Redirections\\Metabox' => $baseDir . '/includes/modules/redirections/class-metabox.php',
    'RankMath\\Redirections\\Redirection' => $baseDir . '/includes/modules/redirections/class-redirection.php',
    'RankMath\\Redirections\\Redirections' => $baseDir . '/includes/modules/redirections/class-redirections.php',
    'RankMath\\Redirections\\Redirector' => $baseDir . '/includes/modules/redirections/class-redirector.php',
    'RankMath\\Redirections\\Table' => $baseDir . '/includes/modules/redirections/class-table.php',
    'RankMath\\Redirections\\Watcher' => $baseDir . '/includes/modules/redirections/class-watcher.php',
    'RankMath\\Replace_Variables\\Advanced_Variables' => $baseDir . '/includes/replace-variables/class-advanced-variables.php',
    'RankMath\\Replace_Variables\\Author_Variables' => $baseDir . '/includes/replace-variables/class-author-variables.php',
    'RankMath\\Replace_Variables\\Base' => $baseDir . '/includes/replace-variables/class-base.php',
    'RankMath\\Replace_Variables\\Basic_Variables' => $baseDir . '/includes/replace-variables/class-basic-variables.php',
    'RankMath\\Replace_Variables\\Cache' => $baseDir . '/includes/replace-variables/class-cache.php',
    'RankMath\\Replace_Variables\\Manager' => $baseDir . '/includes/replace-variables/class-manager.php',
    'RankMath\\Replace_Variables\\Post_Variables' => $baseDir . '/includes/replace-variables/class-post-variables.php',
    'RankMath\\Replace_Variables\\Replacer' => $baseDir . '/includes/replace-variables/class-replacer.php',
    'RankMath\\Replace_Variables\\Term_Variables' => $baseDir . '/includes/replace-variables/class-term-variables.php',
    'RankMath\\Replace_Variables\\Variable' => $baseDir . '/includes/replace-variables/class-variable.php',
    'RankMath\\Rest\\Admin' => $baseDir . '/includes/rest/class-admin.php',
    'RankMath\\Rest\\Front' => $baseDir . '/includes/rest/class-front.php',
    'RankMath\\Rest\\Headless' => $baseDir . '/includes/rest/class-headless.php',
    'RankMath\\Rest\\Post' => $baseDir . '/includes/rest/class-post.php',
    'RankMath\\Rest\\Rest_Helper' => $baseDir . '/includes/rest/class-rest-helper.php',
    'RankMath\\Rest\\Sanitize' => $baseDir . '/includes/rest/class-sanitize.php',
    'RankMath\\Rest\\Setup_Wizard' => $baseDir . '/includes/rest/class-setup-wizard.php',
    'RankMath\\Rest\\Shared' => $baseDir . '/includes/rest/class-shared.php',
    'RankMath\\Rewrite' => $baseDir . '/includes/class-rewrite.php',
    'RankMath\\Robots_Txt' => $baseDir . '/includes/modules/robots-txt/class-robots-txt.php',
    'RankMath\\Role_Manager\\Capability_Manager' => $baseDir . '/includes/modules/role-manager/class-capability-manager.php',
    'RankMath\\Role_Manager\\Members' => $baseDir . '/includes/modules/role-manager/class-members.php',
    'RankMath\\Role_Manager\\Role_Manager' => $baseDir . '/includes/modules/role-manager/class-role-manager.php',
    'RankMath\\Role_Manager\\User_Role_Editor' => $baseDir . '/includes/modules/role-manager/class-user-role-editor.php',
    'RankMath\\Rollback_Version' => $baseDir . '/includes/modules/version-control/class-rollback-version.php',
    'RankMath\\Runner' => $baseDir . '/includes/interface-runner.php',
    'RankMath\\SEO_Analysis\\Admin' => $baseDir . '/includes/modules/seo-analysis/class-admin.php',
    'RankMath\\SEO_Analysis\\Result' => $baseDir . '/includes/modules/seo-analysis/class-result.php',
    'RankMath\\SEO_Analysis\\SEO_Analysis' => $baseDir . '/includes/modules/seo-analysis/class-seo-analysis.php',
    'RankMath\\SEO_Analysis\\SEO_Analyzer' => $baseDir . '/includes/modules/seo-analysis/class-seo-analyzer.php',
    'RankMath\\Schema\\Admin' => $baseDir . '/includes/modules/schema/class-admin.php',
    'RankMath\\Schema\\Article' => $baseDir . '/includes/modules/schema/snippets/class-article.php',
    'RankMath\\Schema\\Author' => $baseDir . '/includes/modules/schema/snippets/class-author.php',
    'RankMath\\Schema\\Block' => $baseDir . '/includes/modules/schema/blocks/class-block.php',
    'RankMath\\Schema\\Block_FAQ' => $baseDir . '/includes/modules/schema/blocks/faq/class-block-faq.php',
    'RankMath\\Schema\\Block_HowTo' => $baseDir . '/includes/modules/schema/blocks/howto/class-block-howto.php',
    'RankMath\\Schema\\Block_Parser' => $baseDir . '/includes/modules/schema/blocks/class-block-parser.php',
    'RankMath\\Schema\\Block_Schema' => $baseDir . '/includes/modules/schema/blocks/schema/class-block-schema.php',
    'RankMath\\Schema\\Block_TOC' => $baseDir . '/includes/modules/schema/blocks/toc/class-block-toc.php',
    'RankMath\\Schema\\Blocks' => $baseDir . '/includes/modules/schema/class-blocks.php',
    'RankMath\\Schema\\Blocks\\Admin' => $baseDir . '/includes/modules/schema/blocks/class-admin.php',
    'RankMath\\Schema\\Breadcrumbs' => $baseDir . '/includes/modules/schema/snippets/class-breadcrumbs.php',
    'RankMath\\Schema\\DB' => $baseDir . '/includes/modules/schema/class-db.php',
    'RankMath\\Schema\\Frontend' => $baseDir . '/includes/modules/schema/class-frontend.php',
    'RankMath\\Schema\\JsonLD' => $baseDir . '/includes/modules/schema/class-jsonld.php',
    'RankMath\\Schema\\Opengraph' => $baseDir . '/includes/modules/schema/class-opengraph.php',
    'RankMath\\Schema\\PrimaryImage' => $baseDir . '/includes/modules/schema/snippets/class-primaryimage.php',
    'RankMath\\Schema\\Product' => $baseDir . '/includes/modules/schema/snippets/class-product.php',
    'RankMath\\Schema\\Product_Edd' => $baseDir . '/includes/modules/schema/snippets/class-product-edd.php',
    'RankMath\\Schema\\Product_WooCommerce' => $baseDir . '/includes/modules/schema/snippets/class-product-woocommerce.php',
    'RankMath\\Schema\\Products_Page' => $baseDir . '/includes/modules/schema/snippets/class-products-page.php',
    'RankMath\\Schema\\Publisher' => $baseDir . '/includes/modules/schema/snippets/class-publisher.php',
    'RankMath\\Schema\\Schema' => $baseDir . '/includes/modules/schema/class-schema.php',
    'RankMath\\Schema\\Singular' => $baseDir . '/includes/modules/schema/snippets/class-singular.php',
    'RankMath\\Schema\\Snippet' => $baseDir . '/includes/modules/schema/interface-snippet.php',
    'RankMath\\Schema\\Snippet_Shortcode' => $baseDir . '/includes/modules/schema/class-snippet-shortcode.php',
    'RankMath\\Schema\\WC_Attributes' => $baseDir . '/includes/modules/schema/snippets/class-wc-attributes.php',
    'RankMath\\Schema\\Webpage' => $baseDir . '/includes/modules/schema/snippets/class-webpage.php',
    'RankMath\\Schema\\Website' => $baseDir . '/includes/modules/schema/snippets/class-website.php',
    'RankMath\\Settings' => $baseDir . '/includes/class-settings.php',
    'RankMath\\Sitemap\\Admin' => $baseDir . '/includes/modules/sitemap/class-admin.php',
    'RankMath\\Sitemap\\Cache' => $baseDir . '/includes/modules/sitemap/class-cache.php',
    'RankMath\\Sitemap\\Cache_Watcher' => $baseDir . '/includes/modules/sitemap/class-cache-watcher.php',
    'RankMath\\Sitemap\\Classifier' => $baseDir . '/includes/modules/sitemap/class-classifier.php',
    'RankMath\\Sitemap\\Generator' => $baseDir . '/includes/modules/sitemap/class-generator.php',
    'RankMath\\Sitemap\\Html\\Authors' => $baseDir . '/includes/modules/sitemap/html-sitemap/class-authors.php',
    'RankMath\\Sitemap\\Html\\Posts' => $baseDir . '/includes/modules/sitemap/html-sitemap/class-posts.php',
    'RankMath\\Sitemap\\Html\\Sitemap' => $baseDir . '/includes/modules/sitemap/html-sitemap/class-sitemap.php',
    'RankMath\\Sitemap\\Html\\Terms' => $baseDir . '/includes/modules/sitemap/html-sitemap/class-terms.php',
    'RankMath\\Sitemap\\Image_Parser' => $baseDir . '/includes/modules/sitemap/class-image-parser.php',
    'RankMath\\Sitemap\\Providers\\Author' => $baseDir . '/includes/modules/sitemap/providers/class-author.php',
    'RankMath\\Sitemap\\Providers\\Post_Type' => $baseDir . '/includes/modules/sitemap/providers/class-post-type.php',
    'RankMath\\Sitemap\\Providers\\Provider' => $baseDir . '/includes/modules/sitemap/providers/interface-provider.php',
    'RankMath\\Sitemap\\Providers\\Taxonomy' => $baseDir . '/includes/modules/sitemap/providers/class-taxonomy.php',
    'RankMath\\Sitemap\\Redirect_Core_Sitemaps' => $baseDir . '/includes/modules/sitemap/class-redirect-core-sitemaps.php',
    'RankMath\\Sitemap\\Router' => $baseDir . '/includes/modules/sitemap/class-router.php',
    'RankMath\\Sitemap\\Sitemap' => $baseDir . '/includes/modules/sitemap/class-sitemap.php',
    'RankMath\\Sitemap\\Sitemap_Index' => $baseDir . '/includes/modules/sitemap/class-sitemap-index.php',
    'RankMath\\Sitemap\\Sitemap_XML' => $baseDir . '/includes/modules/sitemap/class-sitemap-xml.php',
    'RankMath\\Sitemap\\Stylesheet' => $baseDir . '/includes/modules/sitemap/class-stylesheet.php',
    'RankMath\\Sitemap\\Timezone' => $baseDir . '/includes/modules/sitemap/class-timezone.php',
    'RankMath\\Sitemap\\XML' => $baseDir . '/includes/modules/sitemap/abstract-xml.php',
    'RankMath\\Status\\Backup' => $baseDir . '/includes/modules/status/class-backup.php',
    'RankMath\\Status\\Error_Log' => $baseDir . '/includes/modules/status/class-error-log.php',
    'RankMath\\Status\\Import_Export_Settings' => $baseDir . '/includes/modules/status/class-import-export-settings.php',
    'RankMath\\Status\\Rest' => $baseDir . '/includes/modules/status/class-rest.php',
    'RankMath\\Status\\Status' => $baseDir . '/includes/modules/status/class-status.php',
    'RankMath\\Status\\System_Status' => $baseDir . '/includes/modules/status/class-system-status.php',
    'RankMath\\Term' => $baseDir . '/includes/class-term.php',
    'RankMath\\ThirdParty\\Loco\\Loco_I18n_Inline' => $baseDir . '/includes/3rdparty/loco/class-loco-i18n-inline.php',
    'RankMath\\ThirdParty\\WPML' => $baseDir . '/includes/3rdparty/wpml/class-wpml.php',
    'RankMath\\Thumbnail_Overlay' => $baseDir . '/includes/class-thumbnail-overlay.php',
    'RankMath\\Tools\\AIOSEO_Blocks' => $baseDir . '/includes/modules/database-tools/class-aioseo-blocks.php',
    'RankMath\\Tools\\AIOSEO_TOC_Converter' => $baseDir . '/includes/modules/database-tools/class-aioseo-toc-converter.php',
    'RankMath\\Tools\\Database_Tools' => $baseDir . '/includes/modules/database-tools/class-database-tools.php',
    'RankMath\\Tools\\Update_Score' => $baseDir . '/includes/modules/database-tools/class-update-score.php',
    'RankMath\\Tools\\Yoast_Blocks' => $baseDir . '/includes/modules/database-tools/class-yoast-blocks.php',
    'RankMath\\Tools\\Yoast_FAQ_Converter' => $baseDir . '/includes/modules/database-tools/class-yoast-faq-converter.php',
    'RankMath\\Tools\\Yoast_HowTo_Converter' => $baseDir . '/includes/modules/database-tools/class-yoast-howto-converter.php',
    'RankMath\\Tools\\Yoast_Local_Converter' => $baseDir . '/includes/modules/database-tools/class-yoast-local-converter.php',
    'RankMath\\Tools\\Yoast_TOC_Converter' => $baseDir . '/includes/modules/database-tools/class-yoast-toc-converter.php',
    'RankMath\\Tracking' => $baseDir . '/includes/class-tracking.php',
    'RankMath\\Traits\\Ajax' => $baseDir . '/includes/traits/class-ajax.php',
    'RankMath\\Traits\\Cache' => $baseDir . '/includes/traits/class-cache.php',
    'RankMath\\Traits\\Hooker' => $baseDir . '/includes/traits/class-hooker.php',
    'RankMath\\Traits\\Meta' => $baseDir . '/includes/traits/class-meta.php',
    'RankMath\\Traits\\Shortcode' => $baseDir . '/includes/traits/class-shortcode.php',
    'RankMath\\Traits\\Wizard' => $baseDir . '/includes/traits/class-wizard.php',
    'RankMath\\Update_Email' => $baseDir . '/includes/class-update-email.php',
    'RankMath\\Updates' => $baseDir . '/includes/class-updates.php',
    'RankMath\\User' => $baseDir . '/includes/class-user.php',
    'RankMath\\Version_Control' => $baseDir . '/includes/modules/version-control/class-version-control.php',
    'RankMath\\Web_Stories\\Web_Stories' => $baseDir . '/includes/modules/web-stories/class-web-stories.php',
    'RankMath\\Wizard\\Compatibility' => $baseDir . '/includes/admin/wizard/class-compatibility.php',
    'RankMath\\Wizard\\Import' => $baseDir . '/includes/admin/wizard/class-import.php',
    'RankMath\\Wizard\\Monitor_Redirection' => $baseDir . '/includes/admin/wizard/class-monitor-redirection.php',
    'RankMath\\Wizard\\Optimization' => $baseDir . '/includes/admin/wizard/class-optimization.php',
    'RankMath\\Wizard\\Ready' => $baseDir . '/includes/admin/wizard/class-ready.php',
    'RankMath\\Wizard\\Role' => $baseDir . '/includes/admin/wizard/class-role.php',
    'RankMath\\Wizard\\Schema_Markup' => $baseDir . '/includes/admin/wizard/class-schema-markup.php',
    'RankMath\\Wizard\\Search_Console' => $baseDir . '/includes/admin/wizard/class-search-console.php',
    'RankMath\\Wizard\\Sitemap' => $baseDir . '/includes/admin/wizard/class-sitemap.php',
    'RankMath\\Wizard\\Wizard_Step' => $baseDir . '/includes/admin/wizard/interface-wizard-step.php',
    'RankMath\\Wizard\\Your_Site' => $baseDir . '/includes/admin/wizard/class-your-site.php',
    'RankMath\\WooCommerce\\Admin' => $baseDir . '/includes/modules/woocommerce/class-admin.php',
    'RankMath\\WooCommerce\\Base' => $baseDir . '/includes/modules/woocommerce/class-base.php',
    'RankMath\\WooCommerce\\Opengraph' => $baseDir . '/includes/modules/woocommerce/class-opengraph.php',
    'RankMath\\WooCommerce\\Permalink_Watcher' => $baseDir . '/includes/modules/woocommerce/class-permalink-watcher.php',
    'RankMath\\WooCommerce\\Product_Redirection' => $baseDir . '/includes/modules/woocommerce/class-product-redirection.php',
    'RankMath\\WooCommerce\\Sitemap' => $baseDir . '/includes/modules/woocommerce/class-sitemap.php',
    'RankMath\\WooCommerce\\WC_Vars' => $baseDir . '/includes/modules/woocommerce/class-wc-vars.php',
    'RankMath\\WooCommerce\\WooCommerce' => $baseDir . '/includes/modules/woocommerce/class-woocommerce.php',
    'WPMedia\\Mixpanel\\Optin' => $vendorDir . '/wp-media/wp-mixpanel/src/Optin.php',
    'WPMedia\\Mixpanel\\Tracking' => $vendorDir . '/wp-media/wp-mixpanel/src/Tracking.php',
    'WPMedia\\Mixpanel\\TrackingPlugin' => $vendorDir . '/wp-media/wp-mixpanel/src/TrackingPlugin.php',
    'WPMedia\\Mixpanel\\WPConsumer' => $vendorDir . '/wp-media/wp-mixpanel/src/WPConsumer.php',
    'WPMedia_Base_MixpanelBase' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Base/MixpanelBase.php',
    'WPMedia_ConsumerStrategies_AbstractConsumer' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/AbstractConsumer.php',
    'WPMedia_ConsumerStrategies_CurlConsumer' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/CurlConsumer.php',
    'WPMedia_ConsumerStrategies_FileConsumer' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/FileConsumer.php',
    'WPMedia_ConsumerStrategies_SocketConsumer' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/SocketConsumer.php',
    'WPMedia_Mixpanel' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Mixpanel.php',
    'WPMedia_Producers_MixpanelBaseProducer' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelBaseProducer.php',
    'WPMedia_Producers_MixpanelEvents' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelEvents.php',
    'WPMedia_Producers_MixpanelGroups' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelGroups.php',
    'WPMedia_Producers_MixpanelPeople' => $vendorDir . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelPeople.php',
    'WP\\MCP\\Abilities\\DiscoverAbilitiesAbility' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/DiscoverAbilitiesAbility.php',
    'WP\\MCP\\Abilities\\ExecuteAbilityAbility' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/ExecuteAbilityAbility.php',
    'WP\\MCP\\Abilities\\GetAbilityInfoAbility' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/GetAbilityInfoAbility.php',
    'WP\\MCP\\Abilities\\McpAbilityHelperTrait' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/McpAbilityHelperTrait.php',
    'WP\\MCP\\Autoloader' => $vendorDir . '/wordpress/mcp-adapter/includes/Autoloader.php',
    'WP\\MCP\\Cli\\McpCommand' => $vendorDir . '/wordpress/mcp-adapter/includes/Cli/McpCommand.php',
    'WP\\MCP\\Cli\\StdioServerBridge' => $vendorDir . '/wordpress/mcp-adapter/includes/Cli/StdioServerBridge.php',
    'WP\\MCP\\Core\\McpAdapter' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpAdapter.php',
    'WP\\MCP\\Core\\McpComponentRegistry' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpComponentRegistry.php',
    'WP\\MCP\\Core\\McpServer' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpServer.php',
    'WP\\MCP\\Core\\McpTransportFactory' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpTransportFactory.php',
    'WP\\MCP\\Domain\\Prompts\\Contracts\\McpPromptBuilderInterface' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/Contracts/McpPromptBuilderInterface.php',
    'WP\\MCP\\Domain\\Prompts\\McpPrompt' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPrompt.php',
    'WP\\MCP\\Domain\\Prompts\\McpPromptBuilder' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptBuilder.php',
    'WP\\MCP\\Domain\\Prompts\\McpPromptValidator' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptValidator.php',
    'WP\\MCP\\Domain\\Prompts\\RegisterAbilityAsMcpPrompt' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/RegisterAbilityAsMcpPrompt.php',
    'WP\\MCP\\Domain\\Resources\\McpResource' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResource.php',
    'WP\\MCP\\Domain\\Resources\\McpResourceValidator' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResourceValidator.php',
    'WP\\MCP\\Domain\\Resources\\RegisterAbilityAsMcpResource' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/RegisterAbilityAsMcpResource.php',
    'WP\\MCP\\Domain\\Tools\\McpTool' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/McpTool.php',
    'WP\\MCP\\Domain\\Tools\\McpToolValidator' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/McpToolValidator.php',
    'WP\\MCP\\Domain\\Tools\\RegisterAbilityAsMcpTool' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/RegisterAbilityAsMcpTool.php',
    'WP\\MCP\\Domain\\Utils\\McpAnnotationMapper' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Utils/McpAnnotationMapper.php',
    'WP\\MCP\\Domain\\Utils\\McpValidator' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Utils/McpValidator.php',
    'WP\\MCP\\Domain\\Utils\\SchemaTransformer' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Utils/SchemaTransformer.php',
    'WP\\MCP\\Handlers\\HandlerHelperTrait' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/HandlerHelperTrait.php',
    'WP\\MCP\\Handlers\\Initialize\\InitializeHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Initialize/InitializeHandler.php',
    'WP\\MCP\\Handlers\\Prompts\\PromptsHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Prompts/PromptsHandler.php',
    'WP\\MCP\\Handlers\\Resources\\ResourcesHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Resources/ResourcesHandler.php',
    'WP\\MCP\\Handlers\\System\\SystemHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/System/SystemHandler.php',
    'WP\\MCP\\Handlers\\Tools\\ToolsHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Tools/ToolsHandler.php',
    'WP\\MCP\\Infrastructure\\ErrorHandling\\Contracts\\McpErrorHandlerInterface' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/Contracts/McpErrorHandlerInterface.php',
    'WP\\MCP\\Infrastructure\\ErrorHandling\\ErrorLogMcpErrorHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/ErrorLogMcpErrorHandler.php',
    'WP\\MCP\\Infrastructure\\ErrorHandling\\McpErrorFactory' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/McpErrorFactory.php',
    'WP\\MCP\\Infrastructure\\ErrorHandling\\NullMcpErrorHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/NullMcpErrorHandler.php',
    'WP\\MCP\\Infrastructure\\Observability\\ConsoleObservabilityHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ConsoleObservabilityHandler.php',
    'WP\\MCP\\Infrastructure\\Observability\\Contracts\\McpObservabilityHandlerInterface' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/Contracts/McpObservabilityHandlerInterface.php',
    'WP\\MCP\\Infrastructure\\Observability\\ErrorLogMcpObservabilityHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ErrorLogMcpObservabilityHandler.php',
    'WP\\MCP\\Infrastructure\\Observability\\McpObservabilityHelperTrait' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/McpObservabilityHelperTrait.php',
    'WP\\MCP\\Infrastructure\\Observability\\NullMcpObservabilityHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/NullMcpObservabilityHandler.php',
    'WP\\MCP\\Plugin' => $vendorDir . '/wordpress/mcp-adapter/includes/Plugin.php',
    'WP\\MCP\\Servers\\DefaultServerFactory' => $vendorDir . '/wordpress/mcp-adapter/includes/Servers/DefaultServerFactory.php',
    'WP\\MCP\\Transport\\Contracts\\McpRestTransportInterface' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpRestTransportInterface.php',
    'WP\\MCP\\Transport\\Contracts\\McpTransportInterface' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpTransportInterface.php',
    'WP\\MCP\\Transport\\HttpTransport' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/HttpTransport.php',
    'WP\\MCP\\Transport\\Infrastructure\\HttpRequestContext' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestContext.php',
    'WP\\MCP\\Transport\\Infrastructure\\HttpRequestHandler' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestHandler.php',
    'WP\\MCP\\Transport\\Infrastructure\\HttpSessionValidator' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpSessionValidator.php',
    'WP\\MCP\\Transport\\Infrastructure\\JsonRpcResponseBuilder' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/JsonRpcResponseBuilder.php',
    'WP\\MCP\\Transport\\Infrastructure\\McpTransportContext' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportContext.php',
    'WP\\MCP\\Transport\\Infrastructure\\McpTransportHelperTrait' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportHelperTrait.php',
    'WP\\MCP\\Transport\\Infrastructure\\RequestRouter' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/RequestRouter.php',
    'WP\\MCP\\Transport\\Infrastructure\\SessionManager' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/SessionManager.php',
    'WP_Async_Request' => $vendorDir . '/a5hleyrich/wp-background-processing/classes/wp-async-request.php',
    'WP_Background_Process' => $vendorDir . '/a5hleyrich/wp-background-processing/classes/wp-background-process.php',
    'donatj\\UserAgent\\Bots' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/Bots.php',
    'donatj\\UserAgent\\Browsers' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/Browsers.php',
    'donatj\\UserAgent\\Platforms' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/Platforms.php',
    'donatj\\UserAgent\\UserAgent' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/UserAgent.php',
    'donatj\\UserAgent\\UserAgentInterface' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/UserAgentInterface.php',
    'donatj\\UserAgent\\UserAgentParser' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgent/UserAgentParser.php',
);
PK     �ŠU]”~Ï%”9  ”9    vendor/composer/installed.jsonnu „[µü¤        {
    "packages": [
        {
            "name": "a5hleyrich/wp-background-processing",
            "version": "1.4.0",
            "version_normalized": "1.4.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/deliciousbrains/wp-background-processing.git",
                "reference": "7ca7cc3504333db3a291bbab7f1917124fba4816"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/deliciousbrains/wp-background-processing/zipball/7ca7cc3504333db3a291bbab7f1917124fba4816",
                "reference": "7ca7cc3504333db3a291bbab7f1917124fba4816",
                "shasum": ""
            },
            "require": {
                "php": ">=7.0"
            },
            "require-dev": {
                "phpcompatibility/phpcompatibility-wp": "*",
                "phpunit/phpunit": "^8.0",
                "spryker/code-sniffer": "^0.17.18",
                "wp-coding-standards/wpcs": "^2.3",
                "yoast/phpunit-polyfills": "^1.0"
            },
            "suggest": {
                "coenjacobs/mozart": "Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library"
            },
            "time": "2024-12-17T14:04:30+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "classes/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0-or-later"
            ],
            "authors": [
                {
                    "name": "Delicious Brains",
                    "email": "nom@deliciousbrains.com"
                }
            ],
            "description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.",
            "support": {
                "issues": "https://github.com/deliciousbrains/wp-background-processing/issues",
                "source": "https://github.com/deliciousbrains/wp-background-processing/tree/1.4.0"
            },
            "install-path": "../a5hleyrich/wp-background-processing"
        },
        {
            "name": "cmb2/cmb2",
            "version": "v2.12.0",
            "version_normalized": "2.12.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/CMB2/CMB2.git",
                "reference": "9a3686d42539ee3c1113bd09623f4ffbbee94397"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/CMB2/CMB2/zipball/9a3686d42539ee3c1113bd09623f4ffbbee94397",
                "reference": "9a3686d42539ee3c1113bd09623f4ffbbee94397",
                "shasum": ""
            },
            "require": {
                "php": ">7.4"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.6",
                "yoast/phpunit-polyfills": "^1.1"
            },
            "suggest": {
                "composer/installers": "~1.0"
            },
            "time": "2026-05-31T02:21:57+00:00",
            "type": "wordpress-plugin",
            "installation-source": "dist",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0-or-later"
            ],
            "authors": [
                {
                    "name": "Justin Sternberg",
                    "email": "justin@dsgnwrks.pro",
                    "homepage": "https://dsgnwrks.pro",
                    "role": "Developer"
                },
                {
                    "name": "WebDevStudios",
                    "email": "contact@webdevstudios.com",
                    "homepage": "https://github.com/WebDevStudios",
                    "role": "Developer"
                }
            ],
            "description": "CMB2 is a metabox, custom fields, and forms library for WordPress that will blow your mind.",
            "homepage": "https://github.com/CMB2/CMB2",
            "keywords": [
                "metabox",
                "plugin",
                "wordpress"
            ],
            "support": {
                "issues": "https://github.com/CMB2/CMB2/issues",
                "source": "http://wordpress.org/support/plugin/cmb2"
            },
            "install-path": "../cmb2/cmb2"
        },
        {
            "name": "donatj/phpuseragentparser",
            "version": "v1.12.0",
            "version_normalized": "1.12.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/donatj/PhpUserAgent.git",
                "reference": "f76fed972ce4a3d7d58fe99a8627132606b58046"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/donatj/PhpUserAgent/zipball/f76fed972ce4a3d7d58fe99a8627132606b58046",
                "reference": "f76fed972ce4a3d7d58fe99a8627132606b58046",
                "shasum": ""
            },
            "require": {
                "ext-ctype": "*",
                "php": ">=5.4.0"
            },
            "require-dev": {
                "camspiers/json-pretty": "~1.0",
                "donatj/drop": "*",
                "ext-json": "*",
                "phpunit/phpunit": "~4.8|~8|~9"
            },
            "time": "2026-06-16T21:13:33+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "src/UserAgentParser.php"
                ],
                "psr-4": {
                    "donatj\\UserAgent\\": "src/UserAgent"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jesse G. Donat",
                    "email": "donatj@gmail.com",
                    "homepage": "https://donatstudios.com",
                    "role": "Developer"
                }
            ],
            "description": "Lightning fast, minimalist PHP UserAgent string parser.",
            "homepage": "https://donatstudios.com/PHP-Parser-HTTP_USER_AGENT",
            "keywords": [
                "browser",
                "browser detection",
                "parser",
                "user agent",
                "useragent"
            ],
            "support": {
                "issues": "https://github.com/donatj/PhpUserAgent/issues",
                "source": "https://github.com/donatj/PhpUserAgent/tree/v1.12.0"
            },
            "funding": [
                {
                    "url": "https://www.paypal.me/donatj/15",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/donatj",
                    "type": "github"
                },
                {
                    "url": "https://ko-fi.com/donatj",
                    "type": "ko_fi"
                }
            ],
            "install-path": "../donatj/phpuseragentparser"
        },
        {
            "name": "woocommerce/action-scheduler",
            "version": "3.9.3",
            "version_normalized": "3.9.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/woocommerce/action-scheduler.git",
                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/woocommerce/action-scheduler/zipball/c58cdbab17651303d406cd3b22cf9d75c71c986c",
                "reference": "c58cdbab17651303d406cd3b22cf9d75c71c986c",
                "shasum": ""
            },
            "require": {
                "php": ">=7.2"
            },
            "require-dev": {
                "phpunit/phpunit": "^8.5",
                "woocommerce/woocommerce-sniffs": "0.1.0",
                "wp-cli/wp-cli": "~2.5.0",
                "yoast/phpunit-polyfills": "^2.0"
            },
            "time": "2025-07-15T09:32:30+00:00",
            "type": "wordpress-plugin",
            "extra": {
                "scripts-description": {
                    "test": "Run unit tests",
                    "phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer",
                    "phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier"
                }
            },
            "installation-source": "dist",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0-or-later"
            ],
            "description": "Action Scheduler for WordPress and WooCommerce",
            "homepage": "https://actionscheduler.org/",
            "support": {
                "issues": "https://github.com/woocommerce/action-scheduler/issues",
                "source": "https://github.com/woocommerce/action-scheduler/tree/3.9.3"
            },
            "install-path": "../woocommerce/action-scheduler"
        },
        {
            "name": "wordpress/mcp-adapter",
            "version": "v0.4.1",
            "version_normalized": "0.4.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/WordPress/mcp-adapter.git",
                "reference": "1a0f9ab868e34b4375be42e873f60765e6632505"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/WordPress/mcp-adapter/zipball/1a0f9ab868e34b4375be42e873f60765e6632505",
                "reference": "1a0f9ab868e34b4375be42e873f60765e6632505",
                "shasum": ""
            },
            "require": {
                "php": "^7.4 || ^8.0"
            },
            "require-dev": {
                "automattic/vipwpcs": "^3.0",
                "php-stubs/wp-cli-stubs": "^2.12",
                "phpcompatibility/php-compatibility": "10.x-dev as 9.99.99",
                "phpcompatibility/phpcompatibility-wp": "^2.1",
                "phpstan/extension-installer": "^1.3",
                "phpstan/php-8-stubs": "^0.4.24",
                "phpstan/phpstan": "^2.1.22",
                "phpstan/phpstan-deprecation-rules": "^2.0.3",
                "phpunit/phpunit": "^9.6",
                "slevomat/coding-standard": "^8.0",
                "szepeviktor/phpstan-wordpress": "^2.0",
                "wp-phpunit/wp-phpunit": "^6.5",
                "wpackagist-plugin/plugin-check": "^1.6",
                "yoast/phpunit-polyfills": "^4.0"
            },
            "time": "2025-12-09T06:56:51+00:00",
            "type": "library",
            "extra": {
                "installer-paths": {
                    "vendor/{$vendor}/{$name}/": [
                        "wpackagist-plugin/plugin-check"
                    ]
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "WP\\MCP\\": "includes/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-2.0-or-later"
            ],
            "authors": [
                {
                    "name": "WordPress AI Team",
                    "homepage": "https://make.wordpress.org/ai/"
                }
            ],
            "description": "Adapter for Abilities API, letting WordPress abilities to be used as MCP tools, resources or prompts",
            "homepage": "https://github.com/wordpress/mcp-adapter",
            "keywords": [
                "abilities-api",
                "adapter",
                "ai",
                "api",
                "integration",
                "mcp",
                "model-context-protocol",
                "wordpress"
            ],
            "support": {
                "issues": "https://github.com/wordpress/mcp-adapter/issues",
                "source": "https://github.com/wordpress/mcp-adapter"
            },
            "install-path": "../wordpress/mcp-adapter"
        },
        {
            "name": "wp-media/wp-mixpanel",
            "version": "v1.4.1",
            "version_normalized": "1.4.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/wp-media/wp-mixpanel.git",
                "reference": "09dea8a51f97e8047defc9f8a995b87dec76baad"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/wp-media/wp-mixpanel/zipball/09dea8a51f97e8047defc9f8a995b87dec76baad",
                "reference": "09dea8a51f97e8047defc9f8a995b87dec76baad",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "php-stubs/wordpress-tests-stubs": "^6.5",
                "phpcompatibility/phpcompatibility-wp": "^2.0",
                "phpstan/extension-installer": "^1.3",
                "phpstan/phpstan-mockery": "^2.0",
                "phpstan/phpstan-phpunit": "^2.0",
                "roave/security-advisories": "dev-master",
                "szepeviktor/phpstan-wordpress": "^2.0",
                "wp-coding-standards/wpcs": "^3",
                "wp-media/phpunit": "^3"
            },
            "time": "2026-05-29T18:02:43+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "WPMedia\\Mixpanel\\": "src/"
                },
                "classmap": [
                    "src/Classes/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "GPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "WP Media",
                    "homepage": "https://github.com/wp-media/wp-mixpanel",
                    "role": "Developer"
                }
            ],
            "description": "WordPress Mixpanel Integration",
            "support": {
                "issues": "https://github.com/wp-media/wp-mixpanel/issues",
                "source": "https://github.com/wp-media/wp-mixpanel/tree/v1.4.1"
            },
            "install-path": "../wp-media/wp-mixpanel"
        }
    ],
    "dev": false,
    "dev-package-names": []
}
PK     �ŠU]º�›  ›  "  vendor/composer/platform_check.phpnu „[µü¤        <?php

// platform_check.php @generated by Composer

$issues = array();

if (!(PHP_VERSION_ID > 70400)) {
    $issues[] = 'Your Composer dependencies require a PHP version "> 7.4.0". You are running ' . PHP_VERSION . '.';
}

if ($issues) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
        } elseif (!headers_sent()) {
            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
        }
    }
    trigger_error(
        'Composer detected issues in your platform: ' . implode(' ', $issues),
        E_USER_ERROR
    );
}
PK     �ŠU]© �ðÙ  Ù  #  vendor/composer/autoload_static.phpnu „[µü¤        <?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInit8d167c330be88fc6ab56339065b33284
{
    public static $files = array (
        'da5f6548f070d3d306f90eee42dd5de6' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgentParser.php',
        'bcb90d312f16e4ff52a76c5aa3f98ae0' => __DIR__ . '/..' . '/cmb2/cmb2/init.php',
        '65bb6728e4ea5a6bfba27700e81f7a00' => __DIR__ . '/../..' . '/includes/template-tags.php',
        '49628becc29116377284b725833a0b5a' => __DIR__ . '/..' . '/woocommerce/action-scheduler/action-scheduler.php',
    );

    public static $prefixLengthsPsr4 = array (
        'd' => 
        array (
            'donatj\\UserAgent\\' => 17,
        ),
        'W' => 
        array (
            'WP\\MCP\\' => 7,
            'WPMedia\\Mixpanel\\' => 17,
        ),
    );

    public static $prefixDirsPsr4 = array (
        'donatj\\UserAgent\\' => 
        array (
            0 => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent',
        ),
        'WP\\MCP\\' => 
        array (
            0 => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes',
        ),
        'WPMedia\\Mixpanel\\' => 
        array (
            0 => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src',
        ),
    );

    public static $classMap = array (
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
        'RankMath\\ACF\\ACF' => __DIR__ . '/../..' . '/includes/modules/acf/class-acf.php',
        'RankMath\\AI_Visibility\\AI_Visibility' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/class-ai-visibility.php',
        'RankMath\\AI_Visibility\\Admin' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/Admin/class-admin.php',
        'RankMath\\AI_Visibility\\Api\\Base_Controller' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/Api/class-base-controller.php',
        'RankMath\\AI_Visibility\\Api\\Brands_Controller' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/Api/class-brands-controller.php',
        'RankMath\\AI_Visibility\\Api\\Checkout_Controller' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/Api/class-checkout-controller.php',
        'RankMath\\AI_Visibility\\Api\\Trial_Controller' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/Api/class-trial-controller.php',
        'RankMath\\AI_Visibility\\Cache' => __DIR__ . '/../..' . '/includes/modules/ai-visibility/class-cache.php',
        'RankMath\\Abilities\\AI_Visibility\\Create_AI_Visibility_Brand' => __DIR__ . '/../..' . '/includes/abilities/ai-visibility/class-create-ai-visibility-brand.php',
        'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Brand_Insights' => __DIR__ . '/../..' . '/includes/abilities/ai-visibility/class-get-ai-visibility-brand-insights.php',
        'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Brand_Queries' => __DIR__ . '/../..' . '/includes/abilities/ai-visibility/class-get-ai-visibility-brand-queries.php',
        'RankMath\\Abilities\\AI_Visibility\\Get_AI_Visibility_Overview' => __DIR__ . '/../..' . '/includes/abilities/ai-visibility/class-get-ai-visibility-overview.php',
        'RankMath\\Abilities\\AI_Visibility\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/ai-visibility/class-subscriber.php',
        'RankMath\\Abilities\\Abilities' => __DIR__ . '/../..' . '/includes/abilities/class-abilities.php',
        'RankMath\\Abilities\\Ability_Interface' => __DIR__ . '/../..' . '/includes/abilities/interface-ability.php',
        'RankMath\\Abilities\\Analytics\\Get_Top_Keywords' => __DIR__ . '/../..' . '/includes/abilities/analytics/class-get-top-keywords.php',
        'RankMath\\Abilities\\Analytics\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/analytics/class-subscriber.php',
        'RankMath\\Abilities\\Analytics\\Top_Keywords_Runner' => __DIR__ . '/../..' . '/includes/abilities/analytics/class-top-keywords-runner.php',
        'RankMath\\Abilities\\Content_Analysis\\Analyze_Post_Content' => __DIR__ . '/../..' . '/includes/abilities/content-analysis/class-analyze-post-content.php',
        'RankMath\\Abilities\\Content_Analysis\\Content_Analysis_Data' => __DIR__ . '/../..' . '/includes/abilities/content-analysis/class-content-analysis-data.php',
        'RankMath\\Abilities\\Content_Analysis\\Get_SEO_Scores' => __DIR__ . '/../..' . '/includes/abilities/content-analysis/class-get-seo-scores.php',
        'RankMath\\Abilities\\Content_Analysis\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/content-analysis/class-subscriber.php',
        'RankMath\\Abilities\\Link_Genius\\Get_Link_Report' => __DIR__ . '/../..' . '/includes/abilities/link-genius/class-get-link-report.php',
        'RankMath\\Abilities\\Link_Genius\\Get_Post_Links' => __DIR__ . '/../..' . '/includes/abilities/link-genius/class-get-post-links.php',
        'RankMath\\Abilities\\Link_Genius\\Link_Report_Runner' => __DIR__ . '/../..' . '/includes/abilities/link-genius/class-link-report-runner.php',
        'RankMath\\Abilities\\Link_Genius\\Post_Links_Runner' => __DIR__ . '/../..' . '/includes/abilities/link-genius/class-post-links-runner.php',
        'RankMath\\Abilities\\Link_Genius\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/link-genius/class-subscriber.php',
        'RankMath\\Abilities\\Post_SEO\\Get_Post_SEO_Meta' => __DIR__ . '/../..' . '/includes/abilities/post-seo/class-get-post-seo-meta.php',
        'RankMath\\Abilities\\Post_SEO\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/post-seo/class-subscriber.php',
        'RankMath\\Abilities\\SEO_Analysis\\Audit_Result' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-audit-result.php',
        'RankMath\\Abilities\\SEO_Analysis\\Audit_Runner' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-audit-runner.php',
        'RankMath\\Abilities\\SEO_Analysis\\Audit_Site_SEO' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-audit-site-seo.php',
        'RankMath\\Abilities\\SEO_Analysis\\Finding' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-finding.php',
        'RankMath\\Abilities\\SEO_Analysis\\Fix_Hint_Map' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-fix-hint-map.php',
        'RankMath\\Abilities\\SEO_Analysis\\Fix_Runner' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-fix-runner.php',
        'RankMath\\Abilities\\SEO_Analysis\\Fix_Site_SEO' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-fix-site-seo.php',
        'RankMath\\Abilities\\SEO_Analysis\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/seo-analysis/class-subscriber.php',
        'RankMath\\Abilities\\Schema\\Get_Post_Schema' => __DIR__ . '/../..' . '/includes/abilities/schema/class-get-post-schema.php',
        'RankMath\\Abilities\\Schema\\Subscriber' => __DIR__ . '/../..' . '/includes/abilities/schema/class-subscriber.php',
        'RankMath\\Abilities\\Subscriber_Interface' => __DIR__ . '/../..' . '/includes/abilities/interface-subscriber.php',
        'RankMath\\Admin\\Admin' => __DIR__ . '/../..' . '/includes/admin/class-admin.php',
        'RankMath\\Admin\\Admin_Breadcrumbs' => __DIR__ . '/../..' . '/includes/admin/class-admin-breadcrumbs.php',
        'RankMath\\Admin\\Admin_Dashboard_Nav' => __DIR__ . '/../..' . '/includes/admin/class-admin-dashboard-nav.php',
        'RankMath\\Admin\\Admin_Header' => __DIR__ . '/../..' . '/includes/admin/class-admin-header.php',
        'RankMath\\Admin\\Admin_Helper' => __DIR__ . '/../..' . '/includes/admin/class-admin-helper.php',
        'RankMath\\Admin\\Admin_Init' => __DIR__ . '/../..' . '/includes/admin/class-admin-init.php',
        'RankMath\\Admin\\Admin_Menu' => __DIR__ . '/../..' . '/includes/admin/class-admin-menu.php',
        'RankMath\\Admin\\Api' => __DIR__ . '/../..' . '/includes/admin/class-api.php',
        'RankMath\\Admin\\Ask_Review' => __DIR__ . '/../..' . '/includes/admin/class-ask-review.php',
        'RankMath\\Admin\\Assets' => __DIR__ . '/../..' . '/includes/admin/class-assets.php',
        'RankMath\\Admin\\Bulk_Actions' => __DIR__ . '/../..' . '/includes/admin/class-bulk-actions.php',
        'RankMath\\Admin\\CMB2_Fields' => __DIR__ . '/../..' . '/includes/admin/class-cmb2-fields.php',
        'RankMath\\Admin\\CMB2_Options' => __DIR__ . '/../..' . '/includes/admin/class-cmb2-options.php',
        'RankMath\\Admin\\Database\\Clauses' => __DIR__ . '/../..' . '/includes/admin/database/class-clauses.php',
        'RankMath\\Admin\\Database\\Database' => __DIR__ . '/../..' . '/includes/admin/database/class-database.php',
        'RankMath\\Admin\\Database\\Escape' => __DIR__ . '/../..' . '/includes/admin/database/class-escape.php',
        'RankMath\\Admin\\Database\\GroupBy' => __DIR__ . '/../..' . '/includes/admin/database/class-groupby.php',
        'RankMath\\Admin\\Database\\Joins' => __DIR__ . '/../..' . '/includes/admin/database/class-joins.php',
        'RankMath\\Admin\\Database\\OrderBy' => __DIR__ . '/../..' . '/includes/admin/database/class-orderby.php',
        'RankMath\\Admin\\Database\\Query_Builder' => __DIR__ . '/../..' . '/includes/admin/database/class-query-builder.php',
        'RankMath\\Admin\\Database\\Select' => __DIR__ . '/../..' . '/includes/admin/database/class-select.php',
        'RankMath\\Admin\\Database\\Translate' => __DIR__ . '/../..' . '/includes/admin/database/class-translate.php',
        'RankMath\\Admin\\Database\\Where' => __DIR__ . '/../..' . '/includes/admin/database/class-where.php',
        'RankMath\\Admin\\Import_Export' => __DIR__ . '/../..' . '/includes/admin/class-import-export.php',
        'RankMath\\Admin\\Importers\\AIOSEO' => __DIR__ . '/../..' . '/includes/admin/importers/class-aioseo.php',
        'RankMath\\Admin\\Importers\\AIO_Rich_Snippet' => __DIR__ . '/../..' . '/includes/admin/importers/class-aio-rich-snippet.php',
        'RankMath\\Admin\\Importers\\Detector' => __DIR__ . '/../..' . '/includes/admin/importers/class-detector.php',
        'RankMath\\Admin\\Importers\\Plugin_Importer' => __DIR__ . '/../..' . '/includes/admin/importers/class-plugin-importer.php',
        'RankMath\\Admin\\Importers\\Redirections' => __DIR__ . '/../..' . '/includes/admin/importers/class-redirections.php',
        'RankMath\\Admin\\Importers\\SEOPress' => __DIR__ . '/../..' . '/includes/admin/importers/class-seopress.php',
        'RankMath\\Admin\\Importers\\Status' => __DIR__ . '/../..' . '/includes/admin/importers/class-status.php',
        'RankMath\\Admin\\Importers\\WP_Schema_Pro' => __DIR__ . '/../..' . '/includes/admin/importers/class-wp-schema-pro.php',
        'RankMath\\Admin\\Importers\\Yoast' => __DIR__ . '/../..' . '/includes/admin/importers/class-yoast.php',
        'RankMath\\Admin\\List_Table' => __DIR__ . '/../..' . '/includes/admin/class-list-table.php',
        'RankMath\\Admin\\Lock_Modified_Date' => __DIR__ . '/../..' . '/includes/admin/class-lock-modified-date.php',
        'RankMath\\Admin\\Metabox\\IScreen' => __DIR__ . '/../..' . '/includes/admin/metabox/interface-screen.php',
        'RankMath\\Admin\\Metabox\\Metabox' => __DIR__ . '/../..' . '/includes/admin/metabox/class-metabox.php',
        'RankMath\\Admin\\Metabox\\Post_Screen' => __DIR__ . '/../..' . '/includes/admin/metabox/class-post-screen.php',
        'RankMath\\Admin\\Metabox\\Screen' => __DIR__ . '/../..' . '/includes/admin/metabox/class-screen.php',
        'RankMath\\Admin\\Metabox\\Taxonomy_Screen' => __DIR__ . '/../..' . '/includes/admin/metabox/class-taxonomy-screen.php',
        'RankMath\\Admin\\Metabox\\User_Screen' => __DIR__ . '/../..' . '/includes/admin/metabox/class-user-screen.php',
        'RankMath\\Admin\\Notices' => __DIR__ . '/../..' . '/includes/admin/class-notices.php',
        'RankMath\\Admin\\Notifications\\Notification' => __DIR__ . '/../..' . '/includes/admin/notifications/class-notification.php',
        'RankMath\\Admin\\Notifications\\Notification_Center' => __DIR__ . '/../..' . '/includes/admin/notifications/class-notification-center.php',
        'RankMath\\Admin\\Option_Center' => __DIR__ . '/../..' . '/includes/admin/class-option-center.php',
        'RankMath\\Admin\\Options' => __DIR__ . '/../..' . '/includes/admin/class-options.php',
        'RankMath\\Admin\\Page' => __DIR__ . '/../..' . '/includes/admin/class-page.php',
        'RankMath\\Admin\\Post_Columns' => __DIR__ . '/../..' . '/includes/admin/class-post-columns.php',
        'RankMath\\Admin\\Post_Filters' => __DIR__ . '/../..' . '/includes/admin/class-post-filters.php',
        'RankMath\\Admin\\Pro_Notice' => __DIR__ . '/../..' . '/includes/admin/class-pro-notice.php',
        'RankMath\\Admin\\Register_Options_Page' => __DIR__ . '/../..' . '/includes/admin/class-register-options-page.php',
        'RankMath\\Admin\\Registration' => __DIR__ . '/../..' . '/includes/admin/class-registration.php',
        'RankMath\\Admin\\Sanitize_Settings' => __DIR__ . '/../..' . '/includes/admin/class-sanitize-settings.php',
        'RankMath\\Admin\\Setup_Wizard' => __DIR__ . '/../..' . '/includes/admin/class-setup-wizard.php',
        'RankMath\\Admin\\Watcher' => __DIR__ . '/../..' . '/includes/admin/watcher/class-watcher.php',
        'RankMath\\Admin_Bar_Menu' => __DIR__ . '/../..' . '/includes/admin/class-admin-bar-menu.php',
        'RankMath\\Analytics\\AJAX' => __DIR__ . '/../..' . '/includes/modules/analytics/class-ajax.php',
        'RankMath\\Analytics\\Analytics' => __DIR__ . '/../..' . '/includes/modules/analytics/class-analytics.php',
        'RankMath\\Analytics\\Analytics_Common' => __DIR__ . '/../..' . '/includes/modules/analytics/class-analytics-common.php',
        'RankMath\\Analytics\\Analytics_Stats' => __DIR__ . '/../..' . '/includes/modules/analytics/class-analytics-stats.php',
        'RankMath\\Analytics\\DB' => __DIR__ . '/../..' . '/includes/modules/analytics/class-db.php',
        'RankMath\\Analytics\\Email_Reports' => __DIR__ . '/../..' . '/includes/modules/analytics/class-email-reports.php',
        'RankMath\\Analytics\\GTag' => __DIR__ . '/../..' . '/includes/modules/analytics/class-gtag.php',
        'RankMath\\Analytics\\Keywords' => __DIR__ . '/../..' . '/includes/modules/analytics/class-keywords.php',
        'RankMath\\Analytics\\Objects' => __DIR__ . '/../..' . '/includes/modules/analytics/class-objects.php',
        'RankMath\\Analytics\\Posts' => __DIR__ . '/../..' . '/includes/modules/analytics/class-posts.php',
        'RankMath\\Analytics\\Rest' => __DIR__ . '/../..' . '/includes/modules/analytics/rest/class-rest.php',
        'RankMath\\Analytics\\Stats' => __DIR__ . '/../..' . '/includes/modules/analytics/class-stats.php',
        'RankMath\\Analytics\\Summary' => __DIR__ . '/../..' . '/includes/modules/analytics/class-summary.php',
        'RankMath\\Analytics\\Url_Inspection' => __DIR__ . '/../..' . '/includes/modules/analytics/class-url-inspection.php',
        'RankMath\\Analytics\\Watcher' => __DIR__ . '/../..' . '/includes/modules/analytics/class-watcher.php',
        'RankMath\\Analytics\\Workflow\\Base' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-base.php',
        'RankMath\\Analytics\\Workflow\\Console' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-console.php',
        'RankMath\\Analytics\\Workflow\\Inspections' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-inspections.php',
        'RankMath\\Analytics\\Workflow\\Jobs' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-jobs.php',
        'RankMath\\Analytics\\Workflow\\OAuth' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-oauth.php',
        'RankMath\\Analytics\\Workflow\\Objects' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-objects.php',
        'RankMath\\Analytics\\Workflow\\Workflow' => __DIR__ . '/../..' . '/includes/modules/analytics/workflows/class-workflow.php',
        'RankMath\\Auto_Updater' => __DIR__ . '/../..' . '/includes/class-auto-updater.php',
        'RankMath\\Beta_Optin' => __DIR__ . '/../..' . '/includes/modules/version-control/class-beta-optin.php',
        'RankMath\\BuddyPress\\Admin' => __DIR__ . '/../..' . '/includes/modules/buddypress/class-admin.php',
        'RankMath\\BuddyPress\\BuddyPress' => __DIR__ . '/../..' . '/includes/modules/buddypress/class-buddypress.php',
        'RankMath\\CLI\\Commands' => __DIR__ . '/../..' . '/includes/cli/class-commands.php',
        'RankMath\\CMB2' => __DIR__ . '/../..' . '/includes/class-cmb2.php',
        'RankMath\\Common' => __DIR__ . '/../..' . '/includes/class-common.php',
        'RankMath\\Compatibility' => __DIR__ . '/../..' . '/includes/class-compatibility.php',
        'RankMath\\ContentAI\\Admin' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-admin.php',
        'RankMath\\ContentAI\\Assets' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-assets.php',
        'RankMath\\ContentAI\\Block_Command' => __DIR__ . '/../..' . '/includes/modules/content-ai/blocks/command/class-block-command.php',
        'RankMath\\ContentAI\\Bulk_Actions' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-bulk-actions.php',
        'RankMath\\ContentAI\\Bulk_Edit_SEO_Meta' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-bulk-edit-seo-meta.php',
        'RankMath\\ContentAI\\Bulk_Image_Alt' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-bulk-image-alt.php',
        'RankMath\\ContentAI\\Content_AI' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-content-ai.php',
        'RankMath\\ContentAI\\Content_AI_Page' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-content-ai-page.php',
        'RankMath\\ContentAI\\Event_Scheduler' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-event-scheduler.php',
        'RankMath\\ContentAI\\Rest' => __DIR__ . '/../..' . '/includes/modules/content-ai/class-rest.php',
        'RankMath\\Dashboard_Widget' => __DIR__ . '/../..' . '/includes/admin/class-dashboard-widget.php',
        'RankMath\\Data_Encryption' => __DIR__ . '/../..' . '/includes/class-data-encryption.php',
        'RankMath\\Defaults' => __DIR__ . '/../..' . '/includes/class-defaults.php',
        'RankMath\\Divi\\Divi' => __DIR__ . '/../..' . '/includes/3rdparty/divi/class-divi.php',
        'RankMath\\Divi\\Divi_Admin' => __DIR__ . '/../..' . '/includes/3rdparty/divi/class-divi-admin.php',
        'RankMath\\Elementor\\Elementor' => __DIR__ . '/../..' . '/includes/3rdparty/elementor/class-elementor.php',
        'RankMath\\Frontend\\Breadcrumbs' => __DIR__ . '/../..' . '/includes/frontend/class-breadcrumbs.php',
        'RankMath\\Frontend\\Comments' => __DIR__ . '/../..' . '/includes/frontend/class-comments.php',
        'RankMath\\Frontend\\Frontend' => __DIR__ . '/../..' . '/includes/frontend/class-frontend.php',
        'RankMath\\Frontend\\Head' => __DIR__ . '/../..' . '/includes/frontend/class-head.php',
        'RankMath\\Frontend\\Link_Attributes' => __DIR__ . '/../..' . '/includes/frontend/class-link-attributes.php',
        'RankMath\\Frontend\\Redirection' => __DIR__ . '/../..' . '/includes/frontend/class-redirection.php',
        'RankMath\\Frontend\\Shortcodes' => __DIR__ . '/../..' . '/includes/frontend/class-shortcodes.php',
        'RankMath\\Frontend_SEO_Score' => __DIR__ . '/../..' . '/includes/class-frontend-seo-score.php',
        'RankMath\\Google\\Analytics' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-analytics.php',
        'RankMath\\Google\\Api' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-api.php',
        'RankMath\\Google\\Authentication' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-authentication.php',
        'RankMath\\Google\\Console' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-console.php',
        'RankMath\\Google\\Permissions' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-permissions.php',
        'RankMath\\Google\\Request' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-request.php',
        'RankMath\\Google\\Url_Inspection' => __DIR__ . '/../..' . '/includes/modules/analytics/google/class-url-inspection.php',
        'RankMath\\Helper' => __DIR__ . '/../..' . '/includes/class-helper.php',
        'RankMath\\Helpers\\Analytics' => __DIR__ . '/../..' . '/includes/helpers/class-analytics.php',
        'RankMath\\Helpers\\Api' => __DIR__ . '/../..' . '/includes/helpers/class-api.php',
        'RankMath\\Helpers\\Arr' => __DIR__ . '/../..' . '/includes/helpers/class-arr.php',
        'RankMath\\Helpers\\Attachment' => __DIR__ . '/../..' . '/includes/helpers/class-attachment.php',
        'RankMath\\Helpers\\Choices' => __DIR__ . '/../..' . '/includes/helpers/class-choices.php',
        'RankMath\\Helpers\\Conditional' => __DIR__ . '/../..' . '/includes/helpers/class-conditional.php',
        'RankMath\\Helpers\\Content_AI' => __DIR__ . '/../..' . '/includes/helpers/class-content-ai.php',
        'RankMath\\Helpers\\DB' => __DIR__ . '/../..' . '/includes/helpers/class-db.php',
        'RankMath\\Helpers\\Editor' => __DIR__ . '/../..' . '/includes/helpers/class-editor.php',
        'RankMath\\Helpers\\HTML' => __DIR__ . '/../..' . '/includes/helpers/class-html.php',
        'RankMath\\Helpers\\Locale' => __DIR__ . '/../..' . '/includes/helpers/class-locale.php',
        'RankMath\\Helpers\\Options' => __DIR__ . '/../..' . '/includes/helpers/class-options.php',
        'RankMath\\Helpers\\Param' => __DIR__ . '/../..' . '/includes/helpers/class-param.php',
        'RankMath\\Helpers\\Post_Type' => __DIR__ . '/../..' . '/includes/helpers/class-post-type.php',
        'RankMath\\Helpers\\Schedule' => __DIR__ . '/../..' . '/includes/helpers/class-schedule.php',
        'RankMath\\Helpers\\Schema' => __DIR__ . '/../..' . '/includes/helpers/class-schema.php',
        'RankMath\\Helpers\\Security' => __DIR__ . '/../..' . '/includes/helpers/class-security.php',
        'RankMath\\Helpers\\Sitepress' => __DIR__ . '/../..' . '/includes/helpers/class-sitepress.php',
        'RankMath\\Helpers\\Str' => __DIR__ . '/../..' . '/includes/helpers/class-str.php',
        'RankMath\\Helpers\\Taxonomy' => __DIR__ . '/../..' . '/includes/helpers/class-taxonomy.php',
        'RankMath\\Helpers\\Url' => __DIR__ . '/../..' . '/includes/helpers/class-url.php',
        'RankMath\\Helpers\\WordPress' => __DIR__ . '/../..' . '/includes/helpers/class-wordpress.php',
        'RankMath\\Image_Seo\\Add_Attributes' => __DIR__ . '/../..' . '/includes/modules/image-seo/class-add-attributes.php',
        'RankMath\\Image_Seo\\Admin' => __DIR__ . '/../..' . '/includes/modules/image-seo/class-admin.php',
        'RankMath\\Image_Seo\\Image_Seo' => __DIR__ . '/../..' . '/includes/modules/image-seo/class-image-seo.php',
        'RankMath\\Installer' => __DIR__ . '/../..' . '/includes/class-installer.php',
        'RankMath\\Instant_Indexing\\Api' => __DIR__ . '/../..' . '/includes/modules/instant-indexing/class-api.php',
        'RankMath\\Instant_Indexing\\Instant_Indexing' => __DIR__ . '/../..' . '/includes/modules/instant-indexing/class-instant-indexing.php',
        'RankMath\\Instant_Indexing\\Rest' => __DIR__ . '/../..' . '/includes/modules/instant-indexing/class-rest.php',
        'RankMath\\Json_Manager' => __DIR__ . '/../..' . '/includes/class-json-manager.php',
        'RankMath\\KB' => __DIR__ . '/../..' . '/includes/class-kb.php',
        'RankMath\\LLMS\\LLMS_Txt' => __DIR__ . '/../..' . '/includes/modules/llms/class-llms-txt.php',
        'RankMath\\Links\\Admin\\Admin' => __DIR__ . '/../..' . '/includes/modules/links/Admin/class-admin.php',
        'RankMath\\Links\\Api\\Controller' => __DIR__ . '/../..' . '/includes/modules/links/Api/class-controller.php',
        'RankMath\\Links\\ContentProcessor' => __DIR__ . '/../..' . '/includes/modules/links/class-contentprocessor.php',
        'RankMath\\Links\\Link' => __DIR__ . '/../..' . '/includes/modules/links/class-link.php',
        'RankMath\\Links\\Links' => __DIR__ . '/../..' . '/includes/modules/links/class-links.php',
        'RankMath\\Links\\Storage' => __DIR__ . '/../..' . '/includes/modules/links/class-storage.php',
        'RankMath\\Local_Seo\\KML_File' => __DIR__ . '/../..' . '/includes/modules/local-seo/class-kml-file.php',
        'RankMath\\Local_Seo\\Local_Seo' => __DIR__ . '/../..' . '/includes/modules/local-seo/class-local-seo.php',
        'RankMath\\Metadata' => __DIR__ . '/../..' . '/includes/class-metadata.php',
        'RankMath\\Module\\Base' => __DIR__ . '/../..' . '/includes/module/class-base.php',
        'RankMath\\Module\\Manager' => __DIR__ . '/../..' . '/includes/module/class-manager.php',
        'RankMath\\Module\\Module' => __DIR__ . '/../..' . '/includes/module/class-module.php',
        'RankMath\\Monitor\\Admin' => __DIR__ . '/../..' . '/includes/modules/404-monitor/class-admin.php',
        'RankMath\\Monitor\\DB' => __DIR__ . '/../..' . '/includes/modules/404-monitor/class-db.php',
        'RankMath\\Monitor\\Monitor' => __DIR__ . '/../..' . '/includes/modules/404-monitor/class-monitor.php',
        'RankMath\\Monitor\\Table' => __DIR__ . '/../..' . '/includes/modules/404-monitor/class-table.php',
        'RankMath\\OpenGraph\\Facebook' => __DIR__ . '/../..' . '/includes/opengraph/class-facebook.php',
        'RankMath\\OpenGraph\\Facebook_Locale' => __DIR__ . '/../..' . '/includes/opengraph/class-facebook-locale.php',
        'RankMath\\OpenGraph\\Image' => __DIR__ . '/../..' . '/includes/opengraph/class-image.php',
        'RankMath\\OpenGraph\\OpenGraph' => __DIR__ . '/../..' . '/includes/opengraph/class-opengraph.php',
        'RankMath\\OpenGraph\\Slack' => __DIR__ . '/../..' . '/includes/opengraph/class-slack.php',
        'RankMath\\OpenGraph\\Twitter' => __DIR__ . '/../..' . '/includes/opengraph/class-twitter.php',
        'RankMath\\Paper\\Archive' => __DIR__ . '/../..' . '/includes/frontend/paper/class-archive.php',
        'RankMath\\Paper\\Author' => __DIR__ . '/../..' . '/includes/frontend/paper/class-author.php',
        'RankMath\\Paper\\BP_Group' => __DIR__ . '/../..' . '/includes/modules/buddypress/paper/class-bp-group.php',
        'RankMath\\Paper\\BP_User' => __DIR__ . '/../..' . '/includes/modules/buddypress/paper/class-bp-user.php',
        'RankMath\\Paper\\Blog' => __DIR__ . '/../..' . '/includes/frontend/paper/class-blog.php',
        'RankMath\\Paper\\Date' => __DIR__ . '/../..' . '/includes/frontend/paper/class-date.php',
        'RankMath\\Paper\\Error_404' => __DIR__ . '/../..' . '/includes/frontend/paper/class-error-404.php',
        'RankMath\\Paper\\IPaper' => __DIR__ . '/../..' . '/includes/frontend/paper/interface-paper.php',
        'RankMath\\Paper\\Misc' => __DIR__ . '/../..' . '/includes/frontend/paper/class-misc.php',
        'RankMath\\Paper\\Paper' => __DIR__ . '/../..' . '/includes/frontend/paper/class-paper.php',
        'RankMath\\Paper\\Search' => __DIR__ . '/../..' . '/includes/frontend/paper/class-search.php',
        'RankMath\\Paper\\Shop' => __DIR__ . '/../..' . '/includes/frontend/paper/class-shop.php',
        'RankMath\\Paper\\Singular' => __DIR__ . '/../..' . '/includes/frontend/paper/class-singular.php',
        'RankMath\\Paper\\Taxonomy' => __DIR__ . '/../..' . '/includes/frontend/paper/class-taxonomy.php',
        'RankMath\\Post' => __DIR__ . '/../..' . '/includes/class-post.php',
        'RankMath\\Redirections\\Admin' => __DIR__ . '/../..' . '/includes/modules/redirections/class-admin.php',
        'RankMath\\Redirections\\Cache' => __DIR__ . '/../..' . '/includes/modules/redirections/class-cache.php',
        'RankMath\\Redirections\\DB' => __DIR__ . '/../..' . '/includes/modules/redirections/class-db.php',
        'RankMath\\Redirections\\Debugger' => __DIR__ . '/../..' . '/includes/modules/redirections/class-debugger.php',
        'RankMath\\Redirections\\Export' => __DIR__ . '/../..' . '/includes/modules/redirections/class-export.php',
        'RankMath\\Redirections\\Import_Export' => __DIR__ . '/../..' . '/includes/modules/redirections/class-import-export.php',
        'RankMath\\Redirections\\Metabox' => __DIR__ . '/../..' . '/includes/modules/redirections/class-metabox.php',
        'RankMath\\Redirections\\Redirection' => __DIR__ . '/../..' . '/includes/modules/redirections/class-redirection.php',
        'RankMath\\Redirections\\Redirections' => __DIR__ . '/../..' . '/includes/modules/redirections/class-redirections.php',
        'RankMath\\Redirections\\Redirector' => __DIR__ . '/../..' . '/includes/modules/redirections/class-redirector.php',
        'RankMath\\Redirections\\Table' => __DIR__ . '/../..' . '/includes/modules/redirections/class-table.php',
        'RankMath\\Redirections\\Watcher' => __DIR__ . '/../..' . '/includes/modules/redirections/class-watcher.php',
        'RankMath\\Replace_Variables\\Advanced_Variables' => __DIR__ . '/../..' . '/includes/replace-variables/class-advanced-variables.php',
        'RankMath\\Replace_Variables\\Author_Variables' => __DIR__ . '/../..' . '/includes/replace-variables/class-author-variables.php',
        'RankMath\\Replace_Variables\\Base' => __DIR__ . '/../..' . '/includes/replace-variables/class-base.php',
        'RankMath\\Replace_Variables\\Basic_Variables' => __DIR__ . '/../..' . '/includes/replace-variables/class-basic-variables.php',
        'RankMath\\Replace_Variables\\Cache' => __DIR__ . '/../..' . '/includes/replace-variables/class-cache.php',
        'RankMath\\Replace_Variables\\Manager' => __DIR__ . '/../..' . '/includes/replace-variables/class-manager.php',
        'RankMath\\Replace_Variables\\Post_Variables' => __DIR__ . '/../..' . '/includes/replace-variables/class-post-variables.php',
        'RankMath\\Replace_Variables\\Replacer' => __DIR__ . '/../..' . '/includes/replace-variables/class-replacer.php',
        'RankMath\\Replace_Variables\\Term_Variables' => __DIR__ . '/../..' . '/includes/replace-variables/class-term-variables.php',
        'RankMath\\Replace_Variables\\Variable' => __DIR__ . '/../..' . '/includes/replace-variables/class-variable.php',
        'RankMath\\Rest\\Admin' => __DIR__ . '/../..' . '/includes/rest/class-admin.php',
        'RankMath\\Rest\\Front' => __DIR__ . '/../..' . '/includes/rest/class-front.php',
        'RankMath\\Rest\\Headless' => __DIR__ . '/../..' . '/includes/rest/class-headless.php',
        'RankMath\\Rest\\Post' => __DIR__ . '/../..' . '/includes/rest/class-post.php',
        'RankMath\\Rest\\Rest_Helper' => __DIR__ . '/../..' . '/includes/rest/class-rest-helper.php',
        'RankMath\\Rest\\Sanitize' => __DIR__ . '/../..' . '/includes/rest/class-sanitize.php',
        'RankMath\\Rest\\Setup_Wizard' => __DIR__ . '/../..' . '/includes/rest/class-setup-wizard.php',
        'RankMath\\Rest\\Shared' => __DIR__ . '/../..' . '/includes/rest/class-shared.php',
        'RankMath\\Rewrite' => __DIR__ . '/../..' . '/includes/class-rewrite.php',
        'RankMath\\Robots_Txt' => __DIR__ . '/../..' . '/includes/modules/robots-txt/class-robots-txt.php',
        'RankMath\\Role_Manager\\Capability_Manager' => __DIR__ . '/../..' . '/includes/modules/role-manager/class-capability-manager.php',
        'RankMath\\Role_Manager\\Members' => __DIR__ . '/../..' . '/includes/modules/role-manager/class-members.php',
        'RankMath\\Role_Manager\\Role_Manager' => __DIR__ . '/../..' . '/includes/modules/role-manager/class-role-manager.php',
        'RankMath\\Role_Manager\\User_Role_Editor' => __DIR__ . '/../..' . '/includes/modules/role-manager/class-user-role-editor.php',
        'RankMath\\Rollback_Version' => __DIR__ . '/../..' . '/includes/modules/version-control/class-rollback-version.php',
        'RankMath\\Runner' => __DIR__ . '/../..' . '/includes/interface-runner.php',
        'RankMath\\SEO_Analysis\\Admin' => __DIR__ . '/../..' . '/includes/modules/seo-analysis/class-admin.php',
        'RankMath\\SEO_Analysis\\Result' => __DIR__ . '/../..' . '/includes/modules/seo-analysis/class-result.php',
        'RankMath\\SEO_Analysis\\SEO_Analysis' => __DIR__ . '/../..' . '/includes/modules/seo-analysis/class-seo-analysis.php',
        'RankMath\\SEO_Analysis\\SEO_Analyzer' => __DIR__ . '/../..' . '/includes/modules/seo-analysis/class-seo-analyzer.php',
        'RankMath\\Schema\\Admin' => __DIR__ . '/../..' . '/includes/modules/schema/class-admin.php',
        'RankMath\\Schema\\Article' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-article.php',
        'RankMath\\Schema\\Author' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-author.php',
        'RankMath\\Schema\\Block' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/class-block.php',
        'RankMath\\Schema\\Block_FAQ' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/faq/class-block-faq.php',
        'RankMath\\Schema\\Block_HowTo' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/howto/class-block-howto.php',
        'RankMath\\Schema\\Block_Parser' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/class-block-parser.php',
        'RankMath\\Schema\\Block_Schema' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/schema/class-block-schema.php',
        'RankMath\\Schema\\Block_TOC' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/toc/class-block-toc.php',
        'RankMath\\Schema\\Blocks' => __DIR__ . '/../..' . '/includes/modules/schema/class-blocks.php',
        'RankMath\\Schema\\Blocks\\Admin' => __DIR__ . '/../..' . '/includes/modules/schema/blocks/class-admin.php',
        'RankMath\\Schema\\Breadcrumbs' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-breadcrumbs.php',
        'RankMath\\Schema\\DB' => __DIR__ . '/../..' . '/includes/modules/schema/class-db.php',
        'RankMath\\Schema\\Frontend' => __DIR__ . '/../..' . '/includes/modules/schema/class-frontend.php',
        'RankMath\\Schema\\JsonLD' => __DIR__ . '/../..' . '/includes/modules/schema/class-jsonld.php',
        'RankMath\\Schema\\Opengraph' => __DIR__ . '/../..' . '/includes/modules/schema/class-opengraph.php',
        'RankMath\\Schema\\PrimaryImage' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-primaryimage.php',
        'RankMath\\Schema\\Product' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-product.php',
        'RankMath\\Schema\\Product_Edd' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-product-edd.php',
        'RankMath\\Schema\\Product_WooCommerce' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-product-woocommerce.php',
        'RankMath\\Schema\\Products_Page' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-products-page.php',
        'RankMath\\Schema\\Publisher' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-publisher.php',
        'RankMath\\Schema\\Schema' => __DIR__ . '/../..' . '/includes/modules/schema/class-schema.php',
        'RankMath\\Schema\\Singular' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-singular.php',
        'RankMath\\Schema\\Snippet' => __DIR__ . '/../..' . '/includes/modules/schema/interface-snippet.php',
        'RankMath\\Schema\\Snippet_Shortcode' => __DIR__ . '/../..' . '/includes/modules/schema/class-snippet-shortcode.php',
        'RankMath\\Schema\\WC_Attributes' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-wc-attributes.php',
        'RankMath\\Schema\\Webpage' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-webpage.php',
        'RankMath\\Schema\\Website' => __DIR__ . '/../..' . '/includes/modules/schema/snippets/class-website.php',
        'RankMath\\Settings' => __DIR__ . '/../..' . '/includes/class-settings.php',
        'RankMath\\Sitemap\\Admin' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-admin.php',
        'RankMath\\Sitemap\\Cache' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-cache.php',
        'RankMath\\Sitemap\\Cache_Watcher' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-cache-watcher.php',
        'RankMath\\Sitemap\\Classifier' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-classifier.php',
        'RankMath\\Sitemap\\Generator' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-generator.php',
        'RankMath\\Sitemap\\Html\\Authors' => __DIR__ . '/../..' . '/includes/modules/sitemap/html-sitemap/class-authors.php',
        'RankMath\\Sitemap\\Html\\Posts' => __DIR__ . '/../..' . '/includes/modules/sitemap/html-sitemap/class-posts.php',
        'RankMath\\Sitemap\\Html\\Sitemap' => __DIR__ . '/../..' . '/includes/modules/sitemap/html-sitemap/class-sitemap.php',
        'RankMath\\Sitemap\\Html\\Terms' => __DIR__ . '/../..' . '/includes/modules/sitemap/html-sitemap/class-terms.php',
        'RankMath\\Sitemap\\Image_Parser' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-image-parser.php',
        'RankMath\\Sitemap\\Providers\\Author' => __DIR__ . '/../..' . '/includes/modules/sitemap/providers/class-author.php',
        'RankMath\\Sitemap\\Providers\\Post_Type' => __DIR__ . '/../..' . '/includes/modules/sitemap/providers/class-post-type.php',
        'RankMath\\Sitemap\\Providers\\Provider' => __DIR__ . '/../..' . '/includes/modules/sitemap/providers/interface-provider.php',
        'RankMath\\Sitemap\\Providers\\Taxonomy' => __DIR__ . '/../..' . '/includes/modules/sitemap/providers/class-taxonomy.php',
        'RankMath\\Sitemap\\Redirect_Core_Sitemaps' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-redirect-core-sitemaps.php',
        'RankMath\\Sitemap\\Router' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-router.php',
        'RankMath\\Sitemap\\Sitemap' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-sitemap.php',
        'RankMath\\Sitemap\\Sitemap_Index' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-sitemap-index.php',
        'RankMath\\Sitemap\\Sitemap_XML' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-sitemap-xml.php',
        'RankMath\\Sitemap\\Stylesheet' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-stylesheet.php',
        'RankMath\\Sitemap\\Timezone' => __DIR__ . '/../..' . '/includes/modules/sitemap/class-timezone.php',
        'RankMath\\Sitemap\\XML' => __DIR__ . '/../..' . '/includes/modules/sitemap/abstract-xml.php',
        'RankMath\\Status\\Backup' => __DIR__ . '/../..' . '/includes/modules/status/class-backup.php',
        'RankMath\\Status\\Error_Log' => __DIR__ . '/../..' . '/includes/modules/status/class-error-log.php',
        'RankMath\\Status\\Import_Export_Settings' => __DIR__ . '/../..' . '/includes/modules/status/class-import-export-settings.php',
        'RankMath\\Status\\Rest' => __DIR__ . '/../..' . '/includes/modules/status/class-rest.php',
        'RankMath\\Status\\Status' => __DIR__ . '/../..' . '/includes/modules/status/class-status.php',
        'RankMath\\Status\\System_Status' => __DIR__ . '/../..' . '/includes/modules/status/class-system-status.php',
        'RankMath\\Term' => __DIR__ . '/../..' . '/includes/class-term.php',
        'RankMath\\ThirdParty\\Loco\\Loco_I18n_Inline' => __DIR__ . '/../..' . '/includes/3rdparty/loco/class-loco-i18n-inline.php',
        'RankMath\\ThirdParty\\WPML' => __DIR__ . '/../..' . '/includes/3rdparty/wpml/class-wpml.php',
        'RankMath\\Thumbnail_Overlay' => __DIR__ . '/../..' . '/includes/class-thumbnail-overlay.php',
        'RankMath\\Tools\\AIOSEO_Blocks' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-aioseo-blocks.php',
        'RankMath\\Tools\\AIOSEO_TOC_Converter' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-aioseo-toc-converter.php',
        'RankMath\\Tools\\Database_Tools' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-database-tools.php',
        'RankMath\\Tools\\Update_Score' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-update-score.php',
        'RankMath\\Tools\\Yoast_Blocks' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-yoast-blocks.php',
        'RankMath\\Tools\\Yoast_FAQ_Converter' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-yoast-faq-converter.php',
        'RankMath\\Tools\\Yoast_HowTo_Converter' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-yoast-howto-converter.php',
        'RankMath\\Tools\\Yoast_Local_Converter' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-yoast-local-converter.php',
        'RankMath\\Tools\\Yoast_TOC_Converter' => __DIR__ . '/../..' . '/includes/modules/database-tools/class-yoast-toc-converter.php',
        'RankMath\\Tracking' => __DIR__ . '/../..' . '/includes/class-tracking.php',
        'RankMath\\Traits\\Ajax' => __DIR__ . '/../..' . '/includes/traits/class-ajax.php',
        'RankMath\\Traits\\Cache' => __DIR__ . '/../..' . '/includes/traits/class-cache.php',
        'RankMath\\Traits\\Hooker' => __DIR__ . '/../..' . '/includes/traits/class-hooker.php',
        'RankMath\\Traits\\Meta' => __DIR__ . '/../..' . '/includes/traits/class-meta.php',
        'RankMath\\Traits\\Shortcode' => __DIR__ . '/../..' . '/includes/traits/class-shortcode.php',
        'RankMath\\Traits\\Wizard' => __DIR__ . '/../..' . '/includes/traits/class-wizard.php',
        'RankMath\\Update_Email' => __DIR__ . '/../..' . '/includes/class-update-email.php',
        'RankMath\\Updates' => __DIR__ . '/../..' . '/includes/class-updates.php',
        'RankMath\\User' => __DIR__ . '/../..' . '/includes/class-user.php',
        'RankMath\\Version_Control' => __DIR__ . '/../..' . '/includes/modules/version-control/class-version-control.php',
        'RankMath\\Web_Stories\\Web_Stories' => __DIR__ . '/../..' . '/includes/modules/web-stories/class-web-stories.php',
        'RankMath\\Wizard\\Compatibility' => __DIR__ . '/../..' . '/includes/admin/wizard/class-compatibility.php',
        'RankMath\\Wizard\\Import' => __DIR__ . '/../..' . '/includes/admin/wizard/class-import.php',
        'RankMath\\Wizard\\Monitor_Redirection' => __DIR__ . '/../..' . '/includes/admin/wizard/class-monitor-redirection.php',
        'RankMath\\Wizard\\Optimization' => __DIR__ . '/../..' . '/includes/admin/wizard/class-optimization.php',
        'RankMath\\Wizard\\Ready' => __DIR__ . '/../..' . '/includes/admin/wizard/class-ready.php',
        'RankMath\\Wizard\\Role' => __DIR__ . '/../..' . '/includes/admin/wizard/class-role.php',
        'RankMath\\Wizard\\Schema_Markup' => __DIR__ . '/../..' . '/includes/admin/wizard/class-schema-markup.php',
        'RankMath\\Wizard\\Search_Console' => __DIR__ . '/../..' . '/includes/admin/wizard/class-search-console.php',
        'RankMath\\Wizard\\Sitemap' => __DIR__ . '/../..' . '/includes/admin/wizard/class-sitemap.php',
        'RankMath\\Wizard\\Wizard_Step' => __DIR__ . '/../..' . '/includes/admin/wizard/interface-wizard-step.php',
        'RankMath\\Wizard\\Your_Site' => __DIR__ . '/../..' . '/includes/admin/wizard/class-your-site.php',
        'RankMath\\WooCommerce\\Admin' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-admin.php',
        'RankMath\\WooCommerce\\Base' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-base.php',
        'RankMath\\WooCommerce\\Opengraph' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-opengraph.php',
        'RankMath\\WooCommerce\\Permalink_Watcher' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-permalink-watcher.php',
        'RankMath\\WooCommerce\\Product_Redirection' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-product-redirection.php',
        'RankMath\\WooCommerce\\Sitemap' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-sitemap.php',
        'RankMath\\WooCommerce\\WC_Vars' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-wc-vars.php',
        'RankMath\\WooCommerce\\WooCommerce' => __DIR__ . '/../..' . '/includes/modules/woocommerce/class-woocommerce.php',
        'WPMedia\\Mixpanel\\Optin' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Optin.php',
        'WPMedia\\Mixpanel\\Tracking' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Tracking.php',
        'WPMedia\\Mixpanel\\TrackingPlugin' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/TrackingPlugin.php',
        'WPMedia\\Mixpanel\\WPConsumer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/WPConsumer.php',
        'WPMedia_Base_MixpanelBase' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Base/MixpanelBase.php',
        'WPMedia_ConsumerStrategies_AbstractConsumer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/AbstractConsumer.php',
        'WPMedia_ConsumerStrategies_CurlConsumer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/CurlConsumer.php',
        'WPMedia_ConsumerStrategies_FileConsumer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/FileConsumer.php',
        'WPMedia_ConsumerStrategies_SocketConsumer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/SocketConsumer.php',
        'WPMedia_Mixpanel' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Mixpanel.php',
        'WPMedia_Producers_MixpanelBaseProducer' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelBaseProducer.php',
        'WPMedia_Producers_MixpanelEvents' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelEvents.php',
        'WPMedia_Producers_MixpanelGroups' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelGroups.php',
        'WPMedia_Producers_MixpanelPeople' => __DIR__ . '/..' . '/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelPeople.php',
        'WP\\MCP\\Abilities\\DiscoverAbilitiesAbility' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Abilities/DiscoverAbilitiesAbility.php',
        'WP\\MCP\\Abilities\\ExecuteAbilityAbility' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Abilities/ExecuteAbilityAbility.php',
        'WP\\MCP\\Abilities\\GetAbilityInfoAbility' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Abilities/GetAbilityInfoAbility.php',
        'WP\\MCP\\Abilities\\McpAbilityHelperTrait' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Abilities/McpAbilityHelperTrait.php',
        'WP\\MCP\\Autoloader' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Autoloader.php',
        'WP\\MCP\\Cli\\McpCommand' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Cli/McpCommand.php',
        'WP\\MCP\\Cli\\StdioServerBridge' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Cli/StdioServerBridge.php',
        'WP\\MCP\\Core\\McpAdapter' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Core/McpAdapter.php',
        'WP\\MCP\\Core\\McpComponentRegistry' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Core/McpComponentRegistry.php',
        'WP\\MCP\\Core\\McpServer' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Core/McpServer.php',
        'WP\\MCP\\Core\\McpTransportFactory' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Core/McpTransportFactory.php',
        'WP\\MCP\\Domain\\Prompts\\Contracts\\McpPromptBuilderInterface' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Prompts/Contracts/McpPromptBuilderInterface.php',
        'WP\\MCP\\Domain\\Prompts\\McpPrompt' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPrompt.php',
        'WP\\MCP\\Domain\\Prompts\\McpPromptBuilder' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptBuilder.php',
        'WP\\MCP\\Domain\\Prompts\\McpPromptValidator' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptValidator.php',
        'WP\\MCP\\Domain\\Prompts\\RegisterAbilityAsMcpPrompt' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Prompts/RegisterAbilityAsMcpPrompt.php',
        'WP\\MCP\\Domain\\Resources\\McpResource' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResource.php',
        'WP\\MCP\\Domain\\Resources\\McpResourceValidator' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResourceValidator.php',
        'WP\\MCP\\Domain\\Resources\\RegisterAbilityAsMcpResource' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Resources/RegisterAbilityAsMcpResource.php',
        'WP\\MCP\\Domain\\Tools\\McpTool' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Tools/McpTool.php',
        'WP\\MCP\\Domain\\Tools\\McpToolValidator' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Tools/McpToolValidator.php',
        'WP\\MCP\\Domain\\Tools\\RegisterAbilityAsMcpTool' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Tools/RegisterAbilityAsMcpTool.php',
        'WP\\MCP\\Domain\\Utils\\McpAnnotationMapper' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Utils/McpAnnotationMapper.php',
        'WP\\MCP\\Domain\\Utils\\McpValidator' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Utils/McpValidator.php',
        'WP\\MCP\\Domain\\Utils\\SchemaTransformer' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Domain/Utils/SchemaTransformer.php',
        'WP\\MCP\\Handlers\\HandlerHelperTrait' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/HandlerHelperTrait.php',
        'WP\\MCP\\Handlers\\Initialize\\InitializeHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/Initialize/InitializeHandler.php',
        'WP\\MCP\\Handlers\\Prompts\\PromptsHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/Prompts/PromptsHandler.php',
        'WP\\MCP\\Handlers\\Resources\\ResourcesHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/Resources/ResourcesHandler.php',
        'WP\\MCP\\Handlers\\System\\SystemHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/System/SystemHandler.php',
        'WP\\MCP\\Handlers\\Tools\\ToolsHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Handlers/Tools/ToolsHandler.php',
        'WP\\MCP\\Infrastructure\\ErrorHandling\\Contracts\\McpErrorHandlerInterface' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/Contracts/McpErrorHandlerInterface.php',
        'WP\\MCP\\Infrastructure\\ErrorHandling\\ErrorLogMcpErrorHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/ErrorLogMcpErrorHandler.php',
        'WP\\MCP\\Infrastructure\\ErrorHandling\\McpErrorFactory' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/McpErrorFactory.php',
        'WP\\MCP\\Infrastructure\\ErrorHandling\\NullMcpErrorHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/NullMcpErrorHandler.php',
        'WP\\MCP\\Infrastructure\\Observability\\ConsoleObservabilityHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ConsoleObservabilityHandler.php',
        'WP\\MCP\\Infrastructure\\Observability\\Contracts\\McpObservabilityHandlerInterface' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/Contracts/McpObservabilityHandlerInterface.php',
        'WP\\MCP\\Infrastructure\\Observability\\ErrorLogMcpObservabilityHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ErrorLogMcpObservabilityHandler.php',
        'WP\\MCP\\Infrastructure\\Observability\\McpObservabilityHelperTrait' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/McpObservabilityHelperTrait.php',
        'WP\\MCP\\Infrastructure\\Observability\\NullMcpObservabilityHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/NullMcpObservabilityHandler.php',
        'WP\\MCP\\Plugin' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Plugin.php',
        'WP\\MCP\\Servers\\DefaultServerFactory' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Servers/DefaultServerFactory.php',
        'WP\\MCP\\Transport\\Contracts\\McpRestTransportInterface' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpRestTransportInterface.php',
        'WP\\MCP\\Transport\\Contracts\\McpTransportInterface' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpTransportInterface.php',
        'WP\\MCP\\Transport\\HttpTransport' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/HttpTransport.php',
        'WP\\MCP\\Transport\\Infrastructure\\HttpRequestContext' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestContext.php',
        'WP\\MCP\\Transport\\Infrastructure\\HttpRequestHandler' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestHandler.php',
        'WP\\MCP\\Transport\\Infrastructure\\HttpSessionValidator' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpSessionValidator.php',
        'WP\\MCP\\Transport\\Infrastructure\\JsonRpcResponseBuilder' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/JsonRpcResponseBuilder.php',
        'WP\\MCP\\Transport\\Infrastructure\\McpTransportContext' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportContext.php',
        'WP\\MCP\\Transport\\Infrastructure\\McpTransportHelperTrait' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportHelperTrait.php',
        'WP\\MCP\\Transport\\Infrastructure\\RequestRouter' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/RequestRouter.php',
        'WP\\MCP\\Transport\\Infrastructure\\SessionManager' => __DIR__ . '/..' . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/SessionManager.php',
        'WP_Async_Request' => __DIR__ . '/..' . '/a5hleyrich/wp-background-processing/classes/wp-async-request.php',
        'WP_Background_Process' => __DIR__ . '/..' . '/a5hleyrich/wp-background-processing/classes/wp-background-process.php',
        'donatj\\UserAgent\\Bots' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/Bots.php',
        'donatj\\UserAgent\\Browsers' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/Browsers.php',
        'donatj\\UserAgent\\Platforms' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/Platforms.php',
        'donatj\\UserAgent\\UserAgent' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/UserAgent.php',
        'donatj\\UserAgent\\UserAgentInterface' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/UserAgentInterface.php',
        'donatj\\UserAgent\\UserAgentParser' => __DIR__ . '/..' . '/donatj/phpuseragentparser/src/UserAgent/UserAgentParser.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInit8d167c330be88fc6ab56339065b33284::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInit8d167c330be88fc6ab56339065b33284::$prefixDirsPsr4;
            $loader->classMap = ComposerStaticInit8d167c330be88fc6ab56339065b33284::$classMap;

        }, null, ClassLoader::class);
    }
}
PK     �ŠU]Æ5KyÄ>  Ä>    vendor/composer/ClassLoader.phpnu „[µü¤        <?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 *     $loader->add('Symfony',           __DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @see    https://www.php-fig.org/psr/psr-0/
 * @see    https://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    /** @var ?string */
    private $vendorDir;

    // PSR-4
    /**
     * @var array[]
     * @psalm-var array<string, array<string, int>>
     */
    private $prefixLengthsPsr4 = array();
    /**
     * @var array[]
     * @psalm-var array<string, array<int, string>>
     */
    private $prefixDirsPsr4 = array();
    /**
     * @var array[]
     * @psalm-var array<string, string>
     */
    private $fallbackDirsPsr4 = array();

    // PSR-0
    /**
     * @var array[]
     * @psalm-var array<string, array<string, string[]>>
     */
    private $prefixesPsr0 = array();
    /**
     * @var array[]
     * @psalm-var array<string, string>
     */
    private $fallbackDirsPsr0 = array();

    /** @var bool */
    private $useIncludePath = false;

    /**
     * @var string[]
     * @psalm-var array<string, string>
     */
    private $classMap = array();

    /** @var bool */
    private $classMapAuthoritative = false;

    /**
     * @var bool[]
     * @psalm-var array<string, bool>
     */
    private $missingClasses = array();

    /** @var ?string */
    private $apcuPrefix;

    /**
     * @var self[]
     */
    private static $registeredLoaders = array();

    /**
     * @param ?string $vendorDir
     */
    public function __construct($vendorDir = null)
    {
        $this->vendorDir = $vendorDir;
    }

    /**
     * @return string[]
     */
    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
        }

        return array();
    }

    /**
     * @return array[]
     * @psalm-return array<string, array<int, string>>
     */
    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    /**
     * @return array[]
     * @psalm-return array<string, string>
     */
    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    /**
     * @return array[]
     * @psalm-return array<string, string>
     */
    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    /**
     * @return string[] Array of classname => path
     * @psalm-return array<string, string>
     */
    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param string[] $classMap Class to filename map
     * @psalm-param array<string, string> $classMap
     *
     * @return void
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap, $classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string          $prefix  The prefix
     * @param string[]|string $paths   The PSR-0 root directories
     * @param bool            $prepend Whether to prepend the directories
     *
     * @return void
     */
    public function add($prefix, $paths, $prepend = false)
    {
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    (array) $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    (array) $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = (array) $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                (array) $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                (array) $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this namespace.
     *
     * @param string          $prefix  The prefix/namespace, with trailing '\\'
     * @param string[]|string $paths   The PSR-4 base directories
     * @param bool            $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    (array) $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    (array) $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                (array) $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                (array) $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string          $prefix The prefix
     * @param string[]|string $paths  The PSR-0 base directories
     *
     * @return void
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string          $prefix The prefix/namespace, with trailing '\\'
     * @param string[]|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     *
     * @return void
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     *
     * @return void
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
     *
     * @param string|null $apcuPrefix
     *
     * @return void
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     *
     * @return void
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);

        if (null === $this->vendorDir) {
            return;
        }

        if ($prepend) {
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
        } else {
            unset(self::$registeredLoaders[$this->vendorDir]);
            self::$registeredLoaders[$this->vendorDir] = $this;
        }
    }

    /**
     * Unregisters this instance as an autoloader.
     *
     * @return void
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));

        if (null !== $this->vendorDir) {
            unset(self::$registeredLoaders[$this->vendorDir]);
        }
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return true|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            includeFile($file);

            return true;
        }

        return null;
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class, '.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    /**
     * Returns the currently registered loaders indexed by their corresponding vendor directories.
     *
     * @return self[]
     */
    public static function getRegisteredLoaders()
    {
        return self::$registeredLoaders;
    }

    /**
     * @param  string       $class
     * @param  string       $ext
     * @return string|false
     */
    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\')) {
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }
}

/**
 * Scope isolated include.
 *
 * Prevents access to $this/self from included files.
 *
 * @param  string $file
 * @return void
 * @private
 */
function includeFile($file)
{
    include $file;
}
PK     �ŠU]1€Õ¼z  z  !  vendor/composer/autoload_psr4.phpnu „[µü¤        <?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'donatj\\UserAgent\\' => array($vendorDir . '/donatj/phpuseragentparser/src/UserAgent'),
    'WP\\MCP\\' => array($vendorDir . '/wordpress/mcp-adapter/includes'),
    'WPMedia\\Mixpanel\\' => array($vendorDir . '/wp-media/wp-mixpanel/src'),
);
PK     �ŠU].¾}Í    "  vendor/composer/autoload_files.phpnu „[µü¤        <?php

// autoload_files.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'da5f6548f070d3d306f90eee42dd5de6' => $vendorDir . '/donatj/phpuseragentparser/src/UserAgentParser.php',
    'bcb90d312f16e4ff52a76c5aa3f98ae0' => $vendorDir . '/cmb2/cmb2/init.php',
    '65bb6728e4ea5a6bfba27700e81f7a00' => $baseDir . '/includes/template-tags.php',
    '49628becc29116377284b725833a0b5a' => $vendorDir . '/woocommerce/action-scheduler/action-scheduler.php',
);
PK     �ŠU]9Xw      vendor/composer/installed.phpnu „[µü¤        <?php return array(
    'root' => array(
        'name' => 'rankmath/seo-by-rank-math',
        'pretty_version' => 'v1.0.274.1',
        'version' => '1.0.274.1',
        'reference' => '9b45f41985e405903ddb2572a9084c1e9798763c',
        'type' => 'wordpress-plugin',
        'install_path' => __DIR__ . '/../../',
        'aliases' => array(),
        'dev' => false,
    ),
    'versions' => array(
        'a5hleyrich/wp-background-processing' => array(
            'pretty_version' => '1.4.0',
            'version' => '1.4.0.0',
            'reference' => '7ca7cc3504333db3a291bbab7f1917124fba4816',
            'type' => 'library',
            'install_path' => __DIR__ . '/../a5hleyrich/wp-background-processing',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'cmb2/cmb2' => array(
            'pretty_version' => 'v2.12.0',
            'version' => '2.12.0.0',
            'reference' => '9a3686d42539ee3c1113bd09623f4ffbbee94397',
            'type' => 'wordpress-plugin',
            'install_path' => __DIR__ . '/../cmb2/cmb2',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'donatj/phpuseragentparser' => array(
            'pretty_version' => 'v1.12.0',
            'version' => '1.12.0.0',
            'reference' => 'f76fed972ce4a3d7d58fe99a8627132606b58046',
            'type' => 'library',
            'install_path' => __DIR__ . '/../donatj/phpuseragentparser',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'rankmath/seo-by-rank-math' => array(
            'pretty_version' => 'v1.0.274.1',
            'version' => '1.0.274.1',
            'reference' => '9b45f41985e405903ddb2572a9084c1e9798763c',
            'type' => 'wordpress-plugin',
            'install_path' => __DIR__ . '/../../',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'woocommerce/action-scheduler' => array(
            'pretty_version' => '3.9.3',
            'version' => '3.9.3.0',
            'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c',
            'type' => 'wordpress-plugin',
            'install_path' => __DIR__ . '/../woocommerce/action-scheduler',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'wordpress/mcp-adapter' => array(
            'pretty_version' => 'v0.4.1',
            'version' => '0.4.1.0',
            'reference' => '1a0f9ab868e34b4375be42e873f60765e6632505',
            'type' => 'library',
            'install_path' => __DIR__ . '/../wordpress/mcp-adapter',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'wp-media/wp-mixpanel' => array(
            'pretty_version' => 'v1.4.1',
            'version' => '1.4.1.0',
            'reference' => '09dea8a51f97e8047defc9f8a995b87dec76baad',
            'type' => 'library',
            'install_path' => __DIR__ . '/../wp-media/wp-mixpanel',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
    ),
);
PK     �ŠU]¾¦<Ê  Ê  !  vendor/composer/autoload_real.phpnu „[µü¤        <?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit8d167c330be88fc6ab56339065b33284
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        require __DIR__ . '/platform_check.php';

        spl_autoload_register(array('ComposerAutoloaderInit8d167c330be88fc6ab56339065b33284', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
        spl_autoload_unregister(array('ComposerAutoloaderInit8d167c330be88fc6ab56339065b33284', 'loadClassLoader'));

        require __DIR__ . '/autoload_static.php';
        call_user_func(\Composer\Autoload\ComposerStaticInit8d167c330be88fc6ab56339065b33284::getInitializer($loader));

        $loader->register(true);

        $includeFiles = \Composer\Autoload\ComposerStaticInit8d167c330be88fc6ab56339065b33284::$files;
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequire8d167c330be88fc6ab56339065b33284($fileIdentifier, $file);
        }

        return $loader;
    }
}

/**
 * @param string $fileIdentifier
 * @param string $file
 * @return void
 */
function composerRequire8d167c330be88fc6ab56339065b33284($fileIdentifier, $file)
{
    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

        require $file;
    }
}
PK     �ŠU]ŒÛ        vendor/cmb2/cmb2/index.phpnu „[µü¤        <?php // Silence is golden.
PK     �ŠU] =g—M‰  M‰    vendor/cmb2/cmb2/LICENSEnu „[µü¤                            GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
PK     �ŠU]/Ï¡§C
  C
  %  vendor/cmb2/cmb2/playwright.config.jsnu „[µü¤        const { defineConfig, devices } = require('@playwright/test');

/**
 * @see https://playwright.dev/docs/test-configuration
 */
module.exports = defineConfig({
  testDir: './tests/playwright',
  /* Run tests in files in parallel */
  fullyParallel: true,
  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,
  /* Retry on CI only */
  retries: process.env.CI ? 2 : 0,
  /* Single worker on CI â€” tests share one WordPress instance so parallel
     execution causes session/state interference (e.g., logout kills other sessions). */
  workers: process.env.CI ? 1 : undefined,
  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: process.env.CI ? 'github' : 'list',
  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  use: {
    /* Base URL to use in actions like `await page.goto('/')`. */
    baseURL: process.env.WP_BASE_URL || 'http://localhost:2623',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',

    /* Screenshot on failure */
    screenshot: 'only-on-failure',

    /* Video on retry */
    video: 'retain-on-failure',
  },

  /* Configure projects for major browsers */
  projects: [
    /* Auth setup â€” runs first, saves login state for other projects */
    {
      name: 'setup',
      testMatch: /auth\.setup\.js/,
    },

    {
      name: 'chromium',
      use: {
        ...devices['Desktop Chrome'],
        storageState: 'tests/playwright/.auth/user.json',
      },
      dependencies: ['setup'],
      testIgnore: /auth\.setup\.js/,
    },

    {
      name: 'firefox',
      use: {
        ...devices['Desktop Firefox'],
        storageState: 'tests/playwright/.auth/user.json',
      },
      dependencies: ['setup'],
      testIgnore: /auth\.setup\.js/,
    },

    {
      name: 'webkit',
      use: {
        ...devices['Desktop Safari'],
        storageState: 'tests/playwright/.auth/user.json',
      },
      dependencies: ['setup'],
      testIgnore: /auth\.setup\.js/,
    },
  ],

  /* Run your local dev server before starting the tests */
  webServer: process.env.SKIP_WP_SERVER ? undefined : {
    command: 'npm run env:tests:start',
    url: process.env.WP_BASE_URL || 'http://localhost:2623',
    reuseExistingServer: !process.env.CI,
    timeout: 180 * 1000,
    stdout: 'pipe',
    stderr: 'pipe',
  },

  /* Global setup and teardown */
  globalSetup: './tests/playwright/global-setup.js',
  globalTeardown: './tests/playwright/global-teardown.js',
});
PK     �ŠU]ê”¾	  ¾	  (  vendor/cmb2/cmb2/scripts/build-banner.jsnu „[µü¤        #!/usr/bin/env node

/**
 * CSS banner injection and minification script.
 *
 * Usage:
 *   node scripts/build-banner.js          # Add expanded banners to CSS files
 *   node scripts/build-banner.js --minify # Create .min.css files with one-line banner
 */

const fs = require( 'fs' );
const path = require( 'path' );

const pkg = require( path.join( __dirname, '..', 'package.json' ) );
const date = new Date().toISOString().slice( 0, 10 );
const year = new Date().getFullYear();

const cssFiles = [
	'css/cmb2.css',
	'css/cmb2-front.css',
	'css/cmb2-display.css',
	'css/cmb2-rtl.css',
	'css/cmb2-front-rtl.css',
	'css/cmb2-display-rtl.css',
];

const expandedBanner =
	'/*!\n' +
	' * ' + pkg.title + ' - v' + pkg.version + ' - ' + date + '\n' +
	' * ' + pkg.homepage + '\n' +
	' * Copyright (c) ' + year + '\n' +
	' * Licensed GPLv2+\n' +
	' */\n';

const minBanner =
	'/*! ' + pkg.title + ' - v' + pkg.version + ' - ' + date +
	' | ' + pkg.homepage +
	' | Copyright (c) ' + year + ' ' + pkg.author.name +
	' | Licensed ' + pkg.license +
	' */';

const isMinify = process.argv.includes( '--minify' );

if ( isMinify ) {
	// Minify mode: create .min.css files with one-line banner.
	let CleanCSS;
	try {
		CleanCSS = require( 'clean-css' );
	} catch ( e1 ) {
		try {
			// clean-css may be nested inside clean-css-cli
			CleanCSS = require( 'clean-css-cli/node_modules/clean-css' );
		} catch ( e2 ) {
			console.error( 'clean-css not found. Install clean-css-cli: npm install clean-css-cli' );
			process.exit( 1 );
		}
	}

	const cleancss = new CleanCSS( { level: 1 } );

	cssFiles.forEach( function( file ) {
		const content = fs.readFileSync( file, 'utf8' );
		const result = cleancss.minify( content );

		if ( result.errors.length ) {
			console.error( 'Error minifying ' + file + ':', result.errors );
			process.exit( 1 );
		}

		const outFile = file.replace( '.css', '.min.css' );
		fs.writeFileSync( outFile, minBanner + '\n' + result.styles );
		console.log( 'Minified: ' + outFile );
	} );
} else {
	// Banner mode: prepend expanded banner to CSS files.
	cssFiles.forEach( function( file ) {
		if ( ! fs.existsSync( file ) ) {
			console.warn( 'Skipping (not found): ' + file );
			return;
		}

		const content = fs.readFileSync( file, 'utf8' );

		// Strip any existing banner before adding new one.
		const stripped = content.replace( /^\/\*![\s\S]*?\*\/\s*/, '' );
		fs.writeFileSync( file, expandedBanner + '\n' + stripped );
		console.log( 'Banner added: ' + file );
	} );
}
PK     �ŠU]ûJåÈ      #  vendor/cmb2/cmb2/.codex/config.tomlnu „[µü¤        [features]
hooks = true
PK     �ŠU]@ýðÞî  î    vendor/cmb2/cmb2/composer.jsonnu „[µü¤        {
	"name": "cmb2/cmb2",
	"description": "CMB2 is a metabox, custom fields, and forms library for WordPress that will blow your mind.",
	"license": "GPL-2.0-or-later",
	"authors": [
		{
			"name": "Justin Sternberg",
			"email": "justin@dsgnwrks.pro",
			"homepage": "https://dsgnwrks.pro",
			"role": "Developer"
		},
		{
			"name": "WebDevStudios",
			"email": "contact@webdevstudios.com",
			"homepage": "https://github.com/WebDevStudios",
			"role": "Developer"
		}
	],
	"keywords": ["wordpress", "plugin", "metabox"],
	"homepage": "https://github.com/CMB2/CMB2",
	"type": "wordpress-plugin",
	"support": {
		"issues": "https://github.com/CMB2/CMB2/issues",
		"source": "http://wordpress.org/support/plugin/cmb2"
	},
	"require": {
		"php": ">7.4"
	},
	"suggest": {
		"composer/installers": "~1.0"
	},
	"require-dev": {
		"phpunit/phpunit": "^9.6",
		"yoast/phpunit-polyfills": "^1.1"
	},
	"scripts": {
		"test": [
			"vendor/bin/phpunit"
		],
		"phpcs:install": "@composer install --working-dir=tools/phpcs --no-interaction",
		"phpcs": "@php tools/phpcs/run.php phpcs",
		"phpcbf": "@php tools/phpcs/run.php phpcbf",
		"post-install-cmd": [
			"@php tools/phpcs/maybe-install.php"
		],
		"post-update-cmd": [
			"@php tools/phpcs/maybe-install.php"
		]
	}
}
PK     �ŠU]¢»5ö        vendor/cmb2/cmb2/js/index.phpnu „[µü¤        <?php
// Silence is golden
PK     �ŠU]¤w/®›  ®›  5  vendor/cmb2/cmb2/js/jquery-ui-timepicker-addon.min.jsnu „[µü¤        /*! jQuery Timepicker Addon - v1.5.0 - 2014-09-01
* http://trentrichardson.com/examples/timepicker
* Copyright (c) 2014 Trent Richardson; Licensed MIT */
(function($){if($.ui.timepicker=$.ui.timepicker||{},!$.ui.timepicker.version){$.extend($.ui,{timepicker:{version:"1.5.0"}});var Timepicker=function(){this.regional=[],this.regional[""]={currentText:"Now",closeText:"Done",amNames:["AM","A"],pmNames:["PM","P"],timeFormat:"HH:mm",timeSuffix:"",timeOnlyTitle:"Choose Time",timeText:"Time",hourText:"Hour",minuteText:"Minute",secondText:"Second",millisecText:"Millisecond",microsecText:"Microsecond",timezoneText:"Time Zone",isRTL:!1},this._defaults={showButtonPanel:!0,timeOnly:!1,timeOnlyShowDate:!1,showHour:null,showMinute:null,showSecond:null,showMillisec:null,showMicrosec:null,showTimezone:null,showTime:!0,stepHour:1,stepMinute:1,stepSecond:1,stepMillisec:1,stepMicrosec:1,hour:0,minute:0,second:0,millisec:0,microsec:0,timezone:null,hourMin:0,minuteMin:0,secondMin:0,millisecMin:0,microsecMin:0,hourMax:23,minuteMax:59,secondMax:59,millisecMax:999,microsecMax:999,minDateTime:null,maxDateTime:null,maxTime:null,minTime:null,onSelect:null,hourGrid:0,minuteGrid:0,secondGrid:0,millisecGrid:0,microsecGrid:0,alwaysSetTime:!0,separator:" ",altFieldTimeOnly:!0,altTimeFormat:null,altSeparator:null,altTimeSuffix:null,altRedirectFocus:!0,pickerTimeFormat:null,pickerTimeSuffix:null,showTimepicker:!0,timezoneList:null,addSliderAccess:!1,sliderAccessArgs:null,controlType:"slider",defaultValue:null,parse:"strict"},$.extend(this._defaults,this.regional[""])};$.extend(Timepicker.prototype,{$input:null,$altInput:null,$timeObj:null,inst:null,hour_slider:null,minute_slider:null,second_slider:null,millisec_slider:null,microsec_slider:null,timezone_select:null,maxTime:null,minTime:null,hour:0,minute:0,second:0,millisec:0,microsec:0,timezone:null,hourMinOriginal:null,minuteMinOriginal:null,secondMinOriginal:null,millisecMinOriginal:null,microsecMinOriginal:null,hourMaxOriginal:null,minuteMaxOriginal:null,secondMaxOriginal:null,millisecMaxOriginal:null,microsecMaxOriginal:null,ampm:"",formattedDate:"",formattedTime:"",formattedDateTime:"",timezoneList:null,units:["hour","minute","second","millisec","microsec"],support:{},control:null,setDefaults:function(e){return extendRemove(this._defaults,e||{}),this},_newInst:function($input,opts){var tp_inst=new Timepicker,inlineSettings={},fns={},overrides,i;for(var attrName in this._defaults)if(this._defaults.hasOwnProperty(attrName)){var attrValue=$input.attr("time:"+attrName);if(attrValue)try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}overrides={beforeShow:function(e,t){return $.isFunction(tp_inst._defaults.evnts.beforeShow)?tp_inst._defaults.evnts.beforeShow.call($input[0],e,t,tp_inst):void 0},onChangeMonthYear:function(e,t,i){tp_inst._updateDateTime(i),$.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)&&tp_inst._defaults.evnts.onChangeMonthYear.call($input[0],e,t,i,tp_inst)},onClose:function(e,t){tp_inst.timeDefined===!0&&""!==$input.val()&&tp_inst._updateDateTime(t),$.isFunction(tp_inst._defaults.evnts.onClose)&&tp_inst._defaults.evnts.onClose.call($input[0],e,t,tp_inst)}};for(i in overrides)overrides.hasOwnProperty(i)&&(fns[i]=opts[i]||null);tp_inst._defaults=$.extend({},this._defaults,inlineSettings,opts,overrides,{evnts:fns,timepicker:tp_inst}),tp_inst.amNames=$.map(tp_inst._defaults.amNames,function(e){return e.toUpperCase()}),tp_inst.pmNames=$.map(tp_inst._defaults.pmNames,function(e){return e.toUpperCase()}),tp_inst.support=detectSupport(tp_inst._defaults.timeFormat+(tp_inst._defaults.pickerTimeFormat?tp_inst._defaults.pickerTimeFormat:"")+(tp_inst._defaults.altTimeFormat?tp_inst._defaults.altTimeFormat:"")),"string"==typeof tp_inst._defaults.controlType?("slider"===tp_inst._defaults.controlType&&$.ui.slider===void 0&&(tp_inst._defaults.controlType="select"),tp_inst.control=tp_inst._controls[tp_inst._defaults.controlType]):tp_inst.control=tp_inst._defaults.controlType;var timezoneList=[-720,-660,-600,-570,-540,-480,-420,-360,-300,-270,-240,-210,-180,-120,-60,0,60,120,180,210,240,270,300,330,345,360,390,420,480,525,540,570,600,630,660,690,720,765,780,840];null!==tp_inst._defaults.timezoneList&&(timezoneList=tp_inst._defaults.timezoneList);var tzl=timezoneList.length,tzi=0,tzv=null;if(tzl>0&&"object"!=typeof timezoneList[0])for(;tzl>tzi;tzi++)tzv=timezoneList[tzi],timezoneList[tzi]={value:tzv,label:$.timepicker.timezoneOffsetString(tzv,tp_inst.support.iso8601)};return tp_inst._defaults.timezoneList=timezoneList,tp_inst.timezone=null!==tp_inst._defaults.timezone?$.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone):-1*(new Date).getTimezoneOffset(),tp_inst.hour=tp_inst._defaults.hour<tp_inst._defaults.hourMin?tp_inst._defaults.hourMin:tp_inst._defaults.hour>tp_inst._defaults.hourMax?tp_inst._defaults.hourMax:tp_inst._defaults.hour,tp_inst.minute=tp_inst._defaults.minute<tp_inst._defaults.minuteMin?tp_inst._defaults.minuteMin:tp_inst._defaults.minute>tp_inst._defaults.minuteMax?tp_inst._defaults.minuteMax:tp_inst._defaults.minute,tp_inst.second=tp_inst._defaults.second<tp_inst._defaults.secondMin?tp_inst._defaults.secondMin:tp_inst._defaults.second>tp_inst._defaults.secondMax?tp_inst._defaults.secondMax:tp_inst._defaults.second,tp_inst.millisec=tp_inst._defaults.millisec<tp_inst._defaults.millisecMin?tp_inst._defaults.millisecMin:tp_inst._defaults.millisec>tp_inst._defaults.millisecMax?tp_inst._defaults.millisecMax:tp_inst._defaults.millisec,tp_inst.microsec=tp_inst._defaults.microsec<tp_inst._defaults.microsecMin?tp_inst._defaults.microsecMin:tp_inst._defaults.microsec>tp_inst._defaults.microsecMax?tp_inst._defaults.microsecMax:tp_inst._defaults.microsec,tp_inst.ampm="",tp_inst.$input=$input,tp_inst._defaults.altField&&(tp_inst.$altInput=$(tp_inst._defaults.altField),tp_inst._defaults.altRedirectFocus===!0&&tp_inst.$altInput.css({cursor:"pointer"}).focus(function(){$input.trigger("focus")})),(0===tp_inst._defaults.minDate||0===tp_inst._defaults.minDateTime)&&(tp_inst._defaults.minDate=new Date),(0===tp_inst._defaults.maxDate||0===tp_inst._defaults.maxDateTime)&&(tp_inst._defaults.maxDate=new Date),void 0!==tp_inst._defaults.minDate&&tp_inst._defaults.minDate instanceof Date&&(tp_inst._defaults.minDateTime=new Date(tp_inst._defaults.minDate.getTime())),void 0!==tp_inst._defaults.minDateTime&&tp_inst._defaults.minDateTime instanceof Date&&(tp_inst._defaults.minDate=new Date(tp_inst._defaults.minDateTime.getTime())),void 0!==tp_inst._defaults.maxDate&&tp_inst._defaults.maxDate instanceof Date&&(tp_inst._defaults.maxDateTime=new Date(tp_inst._defaults.maxDate.getTime())),void 0!==tp_inst._defaults.maxDateTime&&tp_inst._defaults.maxDateTime instanceof Date&&(tp_inst._defaults.maxDate=new Date(tp_inst._defaults.maxDateTime.getTime())),tp_inst.$input.bind("focus",function(){tp_inst._onFocus()}),tp_inst},_addTimePicker:function(e){var t=this.$altInput&&this._defaults.altFieldTimeOnly?this.$input.val()+" "+this.$altInput.val():this.$input.val();this.timeDefined=this._parseTime(t),this._limitMinMaxDateTime(e,!1),this._injectTimePicker()},_parseTime:function(e,t){if(this.inst||(this.inst=$.datepicker._getInst(this.$input[0])),t||!this._defaults.timeOnly){var i=$.datepicker._get(this.inst,"dateFormat");try{var s=parseDateTimeInternal(i,this._defaults.timeFormat,e,$.datepicker._getFormatConfig(this.inst),this._defaults);if(!s.timeObj)return!1;$.extend(this,s.timeObj)}catch(a){return $.timepicker.log("Error parsing the date/time string: "+a+"\ndate/time string = "+e+"\ntimeFormat = "+this._defaults.timeFormat+"\ndateFormat = "+i),!1}return!0}var n=$.datepicker.parseTime(this._defaults.timeFormat,e,this._defaults);return n?($.extend(this,n),!0):!1},_injectTimePicker:function(){var e=this.inst.dpDiv,t=this.inst.settings,i=this,s="",a="",n=null,r={},l={},o=null,c=0,u=0;if(0===e.find("div.ui-timepicker-div").length&&t.showTimepicker){var m=' style="display:none;"',d='<div class="ui-timepicker-div'+(t.isRTL?" ui-timepicker-rtl":"")+'"><dl>'+'<dt class="ui_tpicker_time_label"'+(t.showTime?"":m)+">"+t.timeText+"</dt>"+'<dd class="ui_tpicker_time"'+(t.showTime?"":m)+"></dd>";for(c=0,u=this.units.length;u>c;c++){if(s=this.units[c],a=s.substr(0,1).toUpperCase()+s.substr(1),n=null!==t["show"+a]?t["show"+a]:this.support[s],r[s]=parseInt(t[s+"Max"]-(t[s+"Max"]-t[s+"Min"])%t["step"+a],10),l[s]=0,d+='<dt class="ui_tpicker_'+s+'_label"'+(n?"":m)+">"+t[s+"Text"]+"</dt>"+'<dd class="ui_tpicker_'+s+'"><div class="ui_tpicker_'+s+'_slider"'+(n?"":m)+"></div>",n&&t[s+"Grid"]>0){if(d+='<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>',"hour"===s)for(var h=t[s+"Min"];r[s]>=h;h+=parseInt(t[s+"Grid"],10)){l[s]++;var p=$.datepicker.formatTime(this.support.ampm?"hht":"HH",{hour:h},t);d+='<td data-for="'+s+'">'+p+"</td>"}else for(var _=t[s+"Min"];r[s]>=_;_+=parseInt(t[s+"Grid"],10))l[s]++,d+='<td data-for="'+s+'">'+(10>_?"0":"")+_+"</td>";d+="</tr></table></div>"}d+="</dd>"}var f=null!==t.showTimezone?t.showTimezone:this.support.timezone;d+='<dt class="ui_tpicker_timezone_label"'+(f?"":m)+">"+t.timezoneText+"</dt>",d+='<dd class="ui_tpicker_timezone" '+(f?"":m)+"></dd>",d+="</dl></div>";var g=$(d);for(t.timeOnly===!0&&(g.prepend('<div class="ui-widget-header ui-helper-clearfix ui-corner-all"><div class="ui-datepicker-title">'+t.timeOnlyTitle+"</div>"+"</div>"),e.find(".ui-datepicker-header, .ui-datepicker-calendar").hide()),c=0,u=i.units.length;u>c;c++)s=i.units[c],a=s.substr(0,1).toUpperCase()+s.substr(1),n=null!==t["show"+a]?t["show"+a]:this.support[s],i[s+"_slider"]=i.control.create(i,g.find(".ui_tpicker_"+s+"_slider"),s,i[s],t[s+"Min"],r[s],t["step"+a]),n&&t[s+"Grid"]>0&&(o=100*l[s]*t[s+"Grid"]/(r[s]-t[s+"Min"]),g.find(".ui_tpicker_"+s+" table").css({width:o+"%",marginLeft:t.isRTL?"0":o/(-2*l[s])+"%",marginRight:t.isRTL?o/(-2*l[s])+"%":"0",borderCollapse:"collapse"}).find("td").click(function(){var e=$(this),t=e.html(),a=parseInt(t.replace(/[^0-9]/g),10),n=t.replace(/[^apm]/gi),r=e.data("for");"hour"===r&&(-1!==n.indexOf("p")&&12>a?a+=12:-1!==n.indexOf("a")&&12===a&&(a=0)),i.control.value(i,i[r+"_slider"],s,a),i._onTimeChange(),i._onSelectHandler()}).css({cursor:"pointer",width:100/l[s]+"%",textAlign:"center",overflow:"hidden"}));if(this.timezone_select=g.find(".ui_tpicker_timezone").append("<select></select>").find("select"),$.fn.append.apply(this.timezone_select,$.map(t.timezoneList,function(e){return $("<option />").val("object"==typeof e?e.value:e).text("object"==typeof e?e.label:e)})),this.timezone!==void 0&&null!==this.timezone&&""!==this.timezone){var M=-1*new Date(this.inst.selectedYear,this.inst.selectedMonth,this.inst.selectedDay,12).getTimezoneOffset();M===this.timezone?selectLocalTimezone(i):this.timezone_select.val(this.timezone)}else this.hour!==void 0&&null!==this.hour&&""!==this.hour?this.timezone_select.val(t.timezone):selectLocalTimezone(i);this.timezone_select.change(function(){i._onTimeChange(),i._onSelectHandler()});var v=e.find(".ui-datepicker-buttonpane");if(v.length?v.before(g):e.append(g),this.$timeObj=g.find(".ui_tpicker_time"),null!==this.inst){var k=this.timeDefined;this._onTimeChange(),this.timeDefined=k}if(this._defaults.addSliderAccess){var T=this._defaults.sliderAccessArgs,D=this._defaults.isRTL;T.isRTL=D,setTimeout(function(){if(0===g.find(".ui-slider-access").length){g.find(".ui-slider:visible").sliderAccess(T);var e=g.find(".ui-slider-access:eq(0)").outerWidth(!0);e&&g.find("table:visible").each(function(){var t=$(this),i=t.outerWidth(),s=(""+t.css(D?"marginRight":"marginLeft")).replace("%",""),a=i-e,n=s*a/i+"%",r={width:a,marginRight:0,marginLeft:0};r[D?"marginRight":"marginLeft"]=n,t.css(r)})}},10)}i._limitMinMaxDateTime(this.inst,!0)}},_limitMinMaxDateTime:function(e,t){var i=this._defaults,s=new Date(e.selectedYear,e.selectedMonth,e.selectedDay);if(this._defaults.showTimepicker){if(null!==$.datepicker._get(e,"minDateTime")&&void 0!==$.datepicker._get(e,"minDateTime")&&s){var a=$.datepicker._get(e,"minDateTime"),n=new Date(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0,0);(null===this.hourMinOriginal||null===this.minuteMinOriginal||null===this.secondMinOriginal||null===this.millisecMinOriginal||null===this.microsecMinOriginal)&&(this.hourMinOriginal=i.hourMin,this.minuteMinOriginal=i.minuteMin,this.secondMinOriginal=i.secondMin,this.millisecMinOriginal=i.millisecMin,this.microsecMinOriginal=i.microsecMin),e.settings.timeOnly||n.getTime()===s.getTime()?(this._defaults.hourMin=a.getHours(),this.hour<=this._defaults.hourMin?(this.hour=this._defaults.hourMin,this._defaults.minuteMin=a.getMinutes(),this.minute<=this._defaults.minuteMin?(this.minute=this._defaults.minuteMin,this._defaults.secondMin=a.getSeconds(),this.second<=this._defaults.secondMin?(this.second=this._defaults.secondMin,this._defaults.millisecMin=a.getMilliseconds(),this.millisec<=this._defaults.millisecMin?(this.millisec=this._defaults.millisecMin,this._defaults.microsecMin=a.getMicroseconds()):(this.microsec<this._defaults.microsecMin&&(this.microsec=this._defaults.microsecMin),this._defaults.microsecMin=this.microsecMinOriginal)):(this._defaults.millisecMin=this.millisecMinOriginal,this._defaults.microsecMin=this.microsecMinOriginal)):(this._defaults.secondMin=this.secondMinOriginal,this._defaults.millisecMin=this.millisecMinOriginal,this._defaults.microsecMin=this.microsecMinOriginal)):(this._defaults.minuteMin=this.minuteMinOriginal,this._defaults.secondMin=this.secondMinOriginal,this._defaults.millisecMin=this.millisecMinOriginal,this._defaults.microsecMin=this.microsecMinOriginal)):(this._defaults.hourMin=this.hourMinOriginal,this._defaults.minuteMin=this.minuteMinOriginal,this._defaults.secondMin=this.secondMinOriginal,this._defaults.millisecMin=this.millisecMinOriginal,this._defaults.microsecMin=this.microsecMinOriginal)}if(null!==$.datepicker._get(e,"maxDateTime")&&void 0!==$.datepicker._get(e,"maxDateTime")&&s){var r=$.datepicker._get(e,"maxDateTime"),l=new Date(r.getFullYear(),r.getMonth(),r.getDate(),0,0,0,0);(null===this.hourMaxOriginal||null===this.minuteMaxOriginal||null===this.secondMaxOriginal||null===this.millisecMaxOriginal)&&(this.hourMaxOriginal=i.hourMax,this.minuteMaxOriginal=i.minuteMax,this.secondMaxOriginal=i.secondMax,this.millisecMaxOriginal=i.millisecMax,this.microsecMaxOriginal=i.microsecMax),e.settings.timeOnly||l.getTime()===s.getTime()?(this._defaults.hourMax=r.getHours(),this.hour>=this._defaults.hourMax?(this.hour=this._defaults.hourMax,this._defaults.minuteMax=r.getMinutes(),this.minute>=this._defaults.minuteMax?(this.minute=this._defaults.minuteMax,this._defaults.secondMax=r.getSeconds(),this.second>=this._defaults.secondMax?(this.second=this._defaults.secondMax,this._defaults.millisecMax=r.getMilliseconds(),this.millisec>=this._defaults.millisecMax?(this.millisec=this._defaults.millisecMax,this._defaults.microsecMax=r.getMicroseconds()):(this.microsec>this._defaults.microsecMax&&(this.microsec=this._defaults.microsecMax),this._defaults.microsecMax=this.microsecMaxOriginal)):(this._defaults.millisecMax=this.millisecMaxOriginal,this._defaults.microsecMax=this.microsecMaxOriginal)):(this._defaults.secondMax=this.secondMaxOriginal,this._defaults.millisecMax=this.millisecMaxOriginal,this._defaults.microsecMax=this.microsecMaxOriginal)):(this._defaults.minuteMax=this.minuteMaxOriginal,this._defaults.secondMax=this.secondMaxOriginal,this._defaults.millisecMax=this.millisecMaxOriginal,this._defaults.microsecMax=this.microsecMaxOriginal)):(this._defaults.hourMax=this.hourMaxOriginal,this._defaults.minuteMax=this.minuteMaxOriginal,this._defaults.secondMax=this.secondMaxOriginal,this._defaults.millisecMax=this.millisecMaxOriginal,this._defaults.microsecMax=this.microsecMaxOriginal)}if(null!==e.settings.minTime){var o=new Date("01/01/1970 "+e.settings.minTime);this.hour<o.getHours()?(this.hour=this._defaults.hourMin=o.getHours(),this.minute=this._defaults.minuteMin=o.getMinutes()):this.hour===o.getHours()&&this.minute<o.getMinutes()?this.minute=this._defaults.minuteMin=o.getMinutes():this._defaults.hourMin<o.getHours()?(this._defaults.hourMin=o.getHours(),this._defaults.minuteMin=o.getMinutes()):this._defaults.minuteMin=this._defaults.hourMin===o.getHours()===this.hour&&this._defaults.minuteMin<o.getMinutes()?o.getMinutes():0}if(null!==e.settings.maxTime){var c=new Date("01/01/1970 "+e.settings.maxTime);this.hour>c.getHours()?(this.hour=this._defaults.hourMax=c.getHours(),this.minute=this._defaults.minuteMax=c.getMinutes()):this.hour===c.getHours()&&this.minute>c.getMinutes()?this.minute=this._defaults.minuteMax=c.getMinutes():this._defaults.hourMax>c.getHours()?(this._defaults.hourMax=c.getHours(),this._defaults.minuteMax=c.getMinutes()):this._defaults.minuteMax=this._defaults.hourMax===c.getHours()===this.hour&&this._defaults.minuteMax>c.getMinutes()?c.getMinutes():59}if(void 0!==t&&t===!0){var u=parseInt(this._defaults.hourMax-(this._defaults.hourMax-this._defaults.hourMin)%this._defaults.stepHour,10),m=parseInt(this._defaults.minuteMax-(this._defaults.minuteMax-this._defaults.minuteMin)%this._defaults.stepMinute,10),d=parseInt(this._defaults.secondMax-(this._defaults.secondMax-this._defaults.secondMin)%this._defaults.stepSecond,10),h=parseInt(this._defaults.millisecMax-(this._defaults.millisecMax-this._defaults.millisecMin)%this._defaults.stepMillisec,10),p=parseInt(this._defaults.microsecMax-(this._defaults.microsecMax-this._defaults.microsecMin)%this._defaults.stepMicrosec,10);this.hour_slider&&(this.control.options(this,this.hour_slider,"hour",{min:this._defaults.hourMin,max:u,step:this._defaults.stepHour}),this.control.value(this,this.hour_slider,"hour",this.hour-this.hour%this._defaults.stepHour)),this.minute_slider&&(this.control.options(this,this.minute_slider,"minute",{min:this._defaults.minuteMin,max:m,step:this._defaults.stepMinute}),this.control.value(this,this.minute_slider,"minute",this.minute-this.minute%this._defaults.stepMinute)),this.second_slider&&(this.control.options(this,this.second_slider,"second",{min:this._defaults.secondMin,max:d,step:this._defaults.stepSecond}),this.control.value(this,this.second_slider,"second",this.second-this.second%this._defaults.stepSecond)),this.millisec_slider&&(this.control.options(this,this.millisec_slider,"millisec",{min:this._defaults.millisecMin,max:h,step:this._defaults.stepMillisec}),this.control.value(this,this.millisec_slider,"millisec",this.millisec-this.millisec%this._defaults.stepMillisec)),this.microsec_slider&&(this.control.options(this,this.microsec_slider,"microsec",{min:this._defaults.microsecMin,max:p,step:this._defaults.stepMicrosec}),this.control.value(this,this.microsec_slider,"microsec",this.microsec-this.microsec%this._defaults.stepMicrosec))}}},_onTimeChange:function(){if(this._defaults.showTimepicker){var e=this.hour_slider?this.control.value(this,this.hour_slider,"hour"):!1,t=this.minute_slider?this.control.value(this,this.minute_slider,"minute"):!1,i=this.second_slider?this.control.value(this,this.second_slider,"second"):!1,s=this.millisec_slider?this.control.value(this,this.millisec_slider,"millisec"):!1,a=this.microsec_slider?this.control.value(this,this.microsec_slider,"microsec"):!1,n=this.timezone_select?this.timezone_select.val():!1,r=this._defaults,l=r.pickerTimeFormat||r.timeFormat,o=r.pickerTimeSuffix||r.timeSuffix;"object"==typeof e&&(e=!1),"object"==typeof t&&(t=!1),"object"==typeof i&&(i=!1),"object"==typeof s&&(s=!1),"object"==typeof a&&(a=!1),"object"==typeof n&&(n=!1),e!==!1&&(e=parseInt(e,10)),t!==!1&&(t=parseInt(t,10)),i!==!1&&(i=parseInt(i,10)),s!==!1&&(s=parseInt(s,10)),a!==!1&&(a=parseInt(a,10)),n!==!1&&(n=""+n);var c=r[12>e?"amNames":"pmNames"][0],u=e!==parseInt(this.hour,10)||t!==parseInt(this.minute,10)||i!==parseInt(this.second,10)||s!==parseInt(this.millisec,10)||a!==parseInt(this.microsec,10)||this.ampm.length>0&&12>e!=(-1!==$.inArray(this.ampm.toUpperCase(),this.amNames))||null!==this.timezone&&n!==""+this.timezone;u&&(e!==!1&&(this.hour=e),t!==!1&&(this.minute=t),i!==!1&&(this.second=i),s!==!1&&(this.millisec=s),a!==!1&&(this.microsec=a),n!==!1&&(this.timezone=n),this.inst||(this.inst=$.datepicker._getInst(this.$input[0])),this._limitMinMaxDateTime(this.inst,!0)),this.support.ampm&&(this.ampm=c),this.formattedTime=$.datepicker.formatTime(r.timeFormat,this,r),this.$timeObj&&(l===r.timeFormat?this.$timeObj.text(this.formattedTime+o):this.$timeObj.text($.datepicker.formatTime(l,this,r)+o)),this.timeDefined=!0,u&&this._updateDateTime()}},_onSelectHandler:function(){var e=this._defaults.onSelect||this.inst.settings.onSelect,t=this.$input?this.$input[0]:null;e&&t&&e.apply(t,[this.formattedDateTime,this])},_updateDateTime:function(e){e=this.inst||e;var t=e.currentYear>0?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(e.selectedYear,e.selectedMonth,e.selectedDay),i=$.datepicker._daylightSavingAdjust(t),s=$.datepicker._get(e,"dateFormat"),a=$.datepicker._getFormatConfig(e),n=null!==i&&this.timeDefined;this.formattedDate=$.datepicker.formatDate(s,null===i?new Date:i,a);var r=this.formattedDate;if(""===e.lastVal&&(e.currentYear=e.selectedYear,e.currentMonth=e.selectedMonth,e.currentDay=e.selectedDay),this._defaults.timeOnly===!0&&this._defaults.timeOnlyShowDate===!1?r=this.formattedTime:(this._defaults.timeOnly!==!0&&(this._defaults.alwaysSetTime||n)||this._defaults.timeOnly===!0&&this._defaults.timeOnlyShowDate===!0)&&(r+=this._defaults.separator+this.formattedTime+this._defaults.timeSuffix),this.formattedDateTime=r,this._defaults.showTimepicker)if(this.$altInput&&this._defaults.timeOnly===!1&&this._defaults.altFieldTimeOnly===!0)this.$altInput.val(this.formattedTime),this.$input.val(this.formattedDate);else if(this.$altInput){this.$input.val(r);var l="",o=null!==this._defaults.altSeparator?this._defaults.altSeparator:this._defaults.separator,c=null!==this._defaults.altTimeSuffix?this._defaults.altTimeSuffix:this._defaults.timeSuffix;this._defaults.timeOnly||(l=this._defaults.altFormat?$.datepicker.formatDate(this._defaults.altFormat,null===i?new Date:i,a):this.formattedDate,l&&(l+=o)),l+=null!==this._defaults.altTimeFormat?$.datepicker.formatTime(this._defaults.altTimeFormat,this,this._defaults)+c:this.formattedTime+c,this.$altInput.val(l)}else this.$input.val(r);else this.$input.val(this.formattedDate);this.$input.trigger("change")},_onFocus:function(){if(!this.$input.val()&&this._defaults.defaultValue){this.$input.val(this._defaults.defaultValue);var e=$.datepicker._getInst(this.$input.get(0)),t=$.datepicker._get(e,"timepicker");if(t&&t._defaults.timeOnly&&e.input.val()!==e.lastVal)try{$.datepicker._updateDatepicker(e)}catch(i){$.timepicker.log(i)}}},_controls:{slider:{create:function(e,t,i,s,a,n,r){var l=e._defaults.isRTL;return t.prop("slide",null).slider({orientation:"horizontal",value:l?-1*s:s,min:l?-1*n:a,max:l?-1*a:n,step:r,slide:function(t,s){e.control.value(e,$(this),i,l?-1*s.value:s.value),e._onTimeChange()},stop:function(){e._onSelectHandler()}})},options:function(e,t,i,s,a){if(e._defaults.isRTL){if("string"==typeof s)return"min"===s||"max"===s?void 0!==a?t.slider(s,-1*a):Math.abs(t.slider(s)):t.slider(s);var n=s.min,r=s.max;return s.min=s.max=null,void 0!==n&&(s.max=-1*n),void 0!==r&&(s.min=-1*r),t.slider(s)}return"string"==typeof s&&void 0!==a?t.slider(s,a):t.slider(s)},value:function(e,t,i,s){return e._defaults.isRTL?void 0!==s?t.slider("value",-1*s):Math.abs(t.slider("value")):void 0!==s?t.slider("value",s):t.slider("value")}},select:{create:function(e,t,i,s,a,n,r){for(var l='<select class="ui-timepicker-select ui-state-default ui-corner-all" data-unit="'+i+'" data-min="'+a+'" data-max="'+n+'" data-step="'+r+'">',o=e._defaults.pickerTimeFormat||e._defaults.timeFormat,c=a;n>=c;c+=r)l+='<option value="'+c+'"'+(c===s?" selected":"")+">",l+="hour"===i?$.datepicker.formatTime($.trim(o.replace(/[^ht ]/gi,"")),{hour:c},e._defaults):"millisec"===i||"microsec"===i||c>=10?c:"0"+(""+c),l+="</option>";return l+="</select>",t.children("select").remove(),$(l).appendTo(t).change(function(){e._onTimeChange(),e._onSelectHandler()}),t},options:function(e,t,i,s,a){var n={},r=t.children("select");if("string"==typeof s){if(void 0===a)return r.data(s);n[s]=a}else n=s;return e.control.create(e,t,r.data("unit"),r.val(),n.min||r.data("min"),n.max||r.data("max"),n.step||r.data("step"))},value:function(e,t,i,s){var a=t.children("select");return void 0!==s?a.val(s):a.val()}}}}),$.fn.extend({timepicker:function(e){e=e||{};var t=Array.prototype.slice.call(arguments);return"object"==typeof e&&(t[0]=$.extend(e,{timeOnly:!0})),$(this).each(function(){$.fn.datetimepicker.apply($(this),t)})},datetimepicker:function(e){e=e||{};var t=arguments;return"string"==typeof e?"getDate"===e||"option"===e&&2===t.length&&"string"==typeof t[1]?$.fn.datepicker.apply($(this[0]),t):this.each(function(){var e=$(this);e.datepicker.apply(e,t)}):this.each(function(){var t=$(this);t.datepicker($.timepicker._newInst(t,e)._defaults)})}}),$.datepicker.parseDateTime=function(e,t,i,s,a){var n=parseDateTimeInternal(e,t,i,s,a);if(n.timeObj){var r=n.timeObj;n.date.setHours(r.hour,r.minute,r.second,r.millisec),n.date.setMicroseconds(r.microsec)}return n.date},$.datepicker.parseTime=function(e,t,i){var s=extendRemove(extendRemove({},$.timepicker._defaults),i||{});-1!==e.replace(/\'.*?\'/g,"").indexOf("Z");var a=function(e,t,i){var s,a=function(e,t){var i=[];return e&&$.merge(i,e),t&&$.merge(i,t),i=$.map(i,function(e){return e.replace(/[.*+?|()\[\]{}\\]/g,"\\$&")}),"("+i.join("|")+")?"},n=function(e){var t=e.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),i={h:-1,m:-1,s:-1,l:-1,c:-1,t:-1,z:-1};if(t)for(var s=0;t.length>s;s++)-1===i[(""+t[s]).charAt(0)]&&(i[(""+t[s]).charAt(0)]=s+1);return i},r="^"+(""+e).replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g,function(e){var t=e.length;switch(e.charAt(0).toLowerCase()){case"h":return 1===t?"(\\d?\\d)":"(\\d{"+t+"})";case"m":return 1===t?"(\\d?\\d)":"(\\d{"+t+"})";case"s":return 1===t?"(\\d?\\d)":"(\\d{"+t+"})";case"l":return"(\\d?\\d?\\d)";case"c":return"(\\d?\\d?\\d)";case"z":return"(z|[-+]\\d\\d:?\\d\\d|\\S+)?";case"t":return a(i.amNames,i.pmNames);default:return"("+e.replace(/\'/g,"").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g,function(e){return"\\"+e})+")?"}}).replace(/\s/g,"\\s?")+i.timeSuffix+"$",l=n(e),o="";s=t.match(RegExp(r,"i"));var c={hour:0,minute:0,second:0,millisec:0,microsec:0};return s?(-1!==l.t&&(void 0===s[l.t]||0===s[l.t].length?(o="",c.ampm=""):(o=-1!==$.inArray(s[l.t].toUpperCase(),i.amNames)?"AM":"PM",c.ampm=i["AM"===o?"amNames":"pmNames"][0])),-1!==l.h&&(c.hour="AM"===o&&"12"===s[l.h]?0:"PM"===o&&"12"!==s[l.h]?parseInt(s[l.h],10)+12:Number(s[l.h])),-1!==l.m&&(c.minute=Number(s[l.m])),-1!==l.s&&(c.second=Number(s[l.s])),-1!==l.l&&(c.millisec=Number(s[l.l])),-1!==l.c&&(c.microsec=Number(s[l.c])),-1!==l.z&&void 0!==s[l.z]&&(c.timezone=$.timepicker.timezoneOffsetNumber(s[l.z])),c):!1},n=function(e,t,i){try{var s=new Date("2012-01-01 "+t);if(isNaN(s.getTime())&&(s=new Date("2012-01-01T"+t),isNaN(s.getTime())&&(s=new Date("01/01/2012 "+t),isNaN(s.getTime()))))throw"Unable to parse time with native Date: "+t;return{hour:s.getHours(),minute:s.getMinutes(),second:s.getSeconds(),millisec:s.getMilliseconds(),microsec:s.getMicroseconds(),timezone:-1*s.getTimezoneOffset()}}catch(n){try{return a(e,t,i)}catch(r){$.timepicker.log("Unable to parse \ntimeString: "+t+"\ntimeFormat: "+e)}}return!1};return"function"==typeof s.parse?s.parse(e,t,s):"loose"===s.parse?n(e,t,s):a(e,t,s)},$.datepicker.formatTime=function(e,t,i){i=i||{},i=$.extend({},$.timepicker._defaults,i),t=$.extend({hour:0,minute:0,second:0,millisec:0,microsec:0,timezone:null},t);var s=e,a=i.amNames[0],n=parseInt(t.hour,10);return n>11&&(a=i.pmNames[0]),s=s.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g,function(e){switch(e){case"HH":return("0"+n).slice(-2);case"H":return n;case"hh":return("0"+convert24to12(n)).slice(-2);case"h":return convert24to12(n);case"mm":return("0"+t.minute).slice(-2);case"m":return t.minute;case"ss":return("0"+t.second).slice(-2);case"s":return t.second;case"l":return("00"+t.millisec).slice(-3);case"c":return("00"+t.microsec).slice(-3);case"z":return $.timepicker.timezoneOffsetString(null===t.timezone?i.timezone:t.timezone,!1);case"Z":return $.timepicker.timezoneOffsetString(null===t.timezone?i.timezone:t.timezone,!0);case"T":return a.charAt(0).toUpperCase();case"TT":return a.toUpperCase();case"t":return a.charAt(0).toLowerCase();case"tt":return a.toLowerCase();default:return e.replace(/'/g,"")}})},$.datepicker._base_selectDate=$.datepicker._selectDate,$.datepicker._selectDate=function(e,t){var i,s=this._getInst($(e)[0]),a=this._get(s,"timepicker");a&&s.settings.showTimepicker?(a._limitMinMaxDateTime(s,!0),i=s.inline,s.inline=s.stay_open=!0,this._base_selectDate(e,t),s.inline=i,s.stay_open=!1,this._notifyChange(s),this._updateDatepicker(s)):this._base_selectDate(e,t)},$.datepicker._base_updateDatepicker=$.datepicker._updateDatepicker,$.datepicker._updateDatepicker=function(e){var t=e.input[0];if(!($.datepicker._curInst&&$.datepicker._curInst!==e&&$.datepicker._datepickerShowing&&$.datepicker._lastInput!==t||"boolean"==typeof e.stay_open&&e.stay_open!==!1)){this._base_updateDatepicker(e);var i=this._get(e,"timepicker");i&&i._addTimePicker(e)}},$.datepicker._base_doKeyPress=$.datepicker._doKeyPress,$.datepicker._doKeyPress=function(e){var t=$.datepicker._getInst(e.target),i=$.datepicker._get(t,"timepicker");if(i&&$.datepicker._get(t,"constrainInput")){var s=i.support.ampm,a=null!==i._defaults.showTimezone?i._defaults.showTimezone:i.support.timezone,n=$.datepicker._possibleChars($.datepicker._get(t,"dateFormat")),r=(""+i._defaults.timeFormat).replace(/[hms]/g,"").replace(/TT/g,s?"APM":"").replace(/Tt/g,s?"AaPpMm":"").replace(/tT/g,s?"AaPpMm":"").replace(/T/g,s?"AP":"").replace(/tt/g,s?"apm":"").replace(/t/g,s?"ap":"")+" "+i._defaults.separator+i._defaults.timeSuffix+(a?i._defaults.timezoneList.join(""):"")+i._defaults.amNames.join("")+i._defaults.pmNames.join("")+n,l=String.fromCharCode(void 0===e.charCode?e.keyCode:e.charCode);return e.ctrlKey||" ">l||!n||r.indexOf(l)>-1}return $.datepicker._base_doKeyPress(e)},$.datepicker._base_updateAlternate=$.datepicker._updateAlternate,$.datepicker._updateAlternate=function(e){var t=this._get(e,"timepicker");if(t){var i=t._defaults.altField;if(i){var s=(t._defaults.altFormat||t._defaults.dateFormat,this._getDate(e)),a=$.datepicker._getFormatConfig(e),n="",r=t._defaults.altSeparator?t._defaults.altSeparator:t._defaults.separator,l=t._defaults.altTimeSuffix?t._defaults.altTimeSuffix:t._defaults.timeSuffix,o=null!==t._defaults.altTimeFormat?t._defaults.altTimeFormat:t._defaults.timeFormat;n+=$.datepicker.formatTime(o,t,t._defaults)+l,t._defaults.timeOnly||t._defaults.altFieldTimeOnly||null===s||(n=t._defaults.altFormat?$.datepicker.formatDate(t._defaults.altFormat,s,a)+r+n:t.formattedDate+r+n),$(i).val(e.input.val()?n:"")}}else $.datepicker._base_updateAlternate(e)},$.datepicker._base_doKeyUp=$.datepicker._doKeyUp,$.datepicker._doKeyUp=function(e){var t=$.datepicker._getInst(e.target),i=$.datepicker._get(t,"timepicker");if(i&&i._defaults.timeOnly&&t.input.val()!==t.lastVal)try{$.datepicker._updateDatepicker(t)}catch(s){$.timepicker.log(s)}return $.datepicker._base_doKeyUp(e)},$.datepicker._base_gotoToday=$.datepicker._gotoToday,$.datepicker._gotoToday=function(e){var t=this._getInst($(e)[0]);t.dpDiv,this._base_gotoToday(e);var i=this._get(t,"timepicker");selectLocalTimezone(i);var s=new Date;this._setTime(t,s),this._setDate(t,s)},$.datepicker._disableTimepickerDatepicker=function(e){var t=this._getInst(e);if(t){var i=this._get(t,"timepicker");$(e).datepicker("getDate"),i&&(t.settings.showTimepicker=!1,i._defaults.showTimepicker=!1,i._updateDateTime(t))}},$.datepicker._enableTimepickerDatepicker=function(e){var t=this._getInst(e);if(t){var i=this._get(t,"timepicker");$(e).datepicker("getDate"),i&&(t.settings.showTimepicker=!0,i._defaults.showTimepicker=!0,i._addTimePicker(t),i._updateDateTime(t))}},$.datepicker._setTime=function(e,t){var i=this._get(e,"timepicker");if(i){var s=i._defaults;
i.hour=t?t.getHours():s.hour,i.minute=t?t.getMinutes():s.minute,i.second=t?t.getSeconds():s.second,i.millisec=t?t.getMilliseconds():s.millisec,i.microsec=t?t.getMicroseconds():s.microsec,i._limitMinMaxDateTime(e,!0),i._onTimeChange(),i._updateDateTime(e)}},$.datepicker._setTimeDatepicker=function(e,t,i){var s=this._getInst(e);if(s){var a=this._get(s,"timepicker");if(a){this._setDateFromField(s);var n;t&&("string"==typeof t?(a._parseTime(t,i),n=new Date,n.setHours(a.hour,a.minute,a.second,a.millisec),n.setMicroseconds(a.microsec)):(n=new Date(t.getTime()),n.setMicroseconds(t.getMicroseconds())),"Invalid Date"==""+n&&(n=void 0),this._setTime(s,n))}}},$.datepicker._base_setDateDatepicker=$.datepicker._setDateDatepicker,$.datepicker._setDateDatepicker=function(e,t){var i=this._getInst(e),s=t;if(i){"string"==typeof t&&(s=new Date(t),s.getTime()||(this._base_setDateDatepicker.apply(this,arguments),s=$(e).datepicker("getDate")));var a,n=this._get(i,"timepicker");s instanceof Date?(a=new Date(s.getTime()),a.setMicroseconds(s.getMicroseconds())):a=s,n&&a&&(n.support.timezone||null!==n._defaults.timezone||(n.timezone=-1*a.getTimezoneOffset()),s=$.timepicker.timezoneAdjust(s,n.timezone),a=$.timepicker.timezoneAdjust(a,n.timezone)),this._updateDatepicker(i),this._base_setDateDatepicker.apply(this,arguments),this._setTimeDatepicker(e,a,!0)}},$.datepicker._base_getDateDatepicker=$.datepicker._getDateDatepicker,$.datepicker._getDateDatepicker=function(e,t){var i=this._getInst(e);if(i){var s=this._get(i,"timepicker");if(s){void 0===i.lastVal&&this._setDateFromField(i,t);var a=this._getDate(i);return a&&s._parseTime($(e).val(),s.timeOnly)&&(a.setHours(s.hour,s.minute,s.second,s.millisec),a.setMicroseconds(s.microsec),null!=s.timezone&&(s.support.timezone||null!==s._defaults.timezone||(s.timezone=-1*a.getTimezoneOffset()),a=$.timepicker.timezoneAdjust(a,s.timezone))),a}return this._base_getDateDatepicker(e,t)}},$.datepicker._base_parseDate=$.datepicker.parseDate,$.datepicker.parseDate=function(e,t,i){var s;try{s=this._base_parseDate(e,t,i)}catch(a){if(!(a.indexOf(":")>=0))throw a;s=this._base_parseDate(e,t.substring(0,t.length-(a.length-a.indexOf(":")-2)),i),$.timepicker.log("Error parsing the date string: "+a+"\ndate string = "+t+"\ndate format = "+e)}return s},$.datepicker._base_formatDate=$.datepicker._formatDate,$.datepicker._formatDate=function(e){var t=this._get(e,"timepicker");return t?(t._updateDateTime(e),t.$input.val()):this._base_formatDate(e)},$.datepicker._base_optionDatepicker=$.datepicker._optionDatepicker,$.datepicker._optionDatepicker=function(e,t,i){var s,a=this._getInst(e);if(!a)return null;var n=this._get(a,"timepicker");if(n){var r,l,o,c,u=null,m=null,d=null,h=n._defaults.evnts,p={};if("string"==typeof t){if("minDate"===t||"minDateTime"===t)u=i;else if("maxDate"===t||"maxDateTime"===t)m=i;else if("onSelect"===t)d=i;else if(h.hasOwnProperty(t)){if(i===void 0)return h[t];p[t]=i,s={}}}else if("object"==typeof t){t.minDate?u=t.minDate:t.minDateTime?u=t.minDateTime:t.maxDate?m=t.maxDate:t.maxDateTime&&(m=t.maxDateTime);for(r in h)h.hasOwnProperty(r)&&t[r]&&(p[r]=t[r])}for(r in p)p.hasOwnProperty(r)&&(h[r]=p[r],s||(s=$.extend({},t)),delete s[r]);if(s&&isEmptyObject(s))return;if(u?(u=0===u?new Date:new Date(u),n._defaults.minDate=u,n._defaults.minDateTime=u):m?(m=0===m?new Date:new Date(m),n._defaults.maxDate=m,n._defaults.maxDateTime=m):d&&(n._defaults.onSelect=d),u||m)return c=$(e),o=c.datetimepicker("getDate"),l=this._base_optionDatepicker.call($.datepicker,e,s||t,i),c.datetimepicker("setDate",o),l}return void 0===i?this._base_optionDatepicker.call($.datepicker,e,t):this._base_optionDatepicker.call($.datepicker,e,s||t,i)};var isEmptyObject=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0},extendRemove=function(e,t){$.extend(e,t);for(var i in t)(null===t[i]||void 0===t[i])&&(e[i]=t[i]);return e},detectSupport=function(e){var t=e.replace(/'.*?'/g,"").toLowerCase(),i=function(e,t){return-1!==e.indexOf(t)?!0:!1};return{hour:i(t,"h"),minute:i(t,"m"),second:i(t,"s"),millisec:i(t,"l"),microsec:i(t,"c"),timezone:i(t,"z"),ampm:i(t,"t")&&i(e,"h"),iso8601:i(e,"Z")}},convert24to12=function(e){return e%=12,0===e&&(e=12),e+""},computeEffectiveSetting=function(e,t){return e&&e[t]?e[t]:$.timepicker._defaults[t]},splitDateTime=function(e,t){var i=computeEffectiveSetting(t,"separator"),s=computeEffectiveSetting(t,"timeFormat"),a=s.split(i),n=a.length,r=e.split(i),l=r.length;return l>1?{dateString:r.splice(0,l-n).join(i),timeString:r.splice(0,n).join(i)}:{dateString:e,timeString:""}},parseDateTimeInternal=function(e,t,i,s,a){var n,r,l;if(r=splitDateTime(i,a),n=$.datepicker._base_parseDate(e,r.dateString,s),""===r.timeString)return{date:n};if(l=$.datepicker.parseTime(t,r.timeString,a),!l)throw"Wrong time format";return{date:n,timeObj:l}},selectLocalTimezone=function(e,t){if(e&&e.timezone_select){var i=t||new Date;e.timezone_select.val(-i.getTimezoneOffset())}};$.timepicker=new Timepicker,$.timepicker.timezoneOffsetString=function(e,t){if(isNaN(e)||e>840||-720>e)return e;var i=e,s=i%60,a=(i-s)/60,n=t?":":"",r=(i>=0?"+":"-")+("0"+Math.abs(a)).slice(-2)+n+("0"+Math.abs(s)).slice(-2);return"+00:00"===r?"Z":r},$.timepicker.timezoneOffsetNumber=function(e){var t=(""+e).replace(":","");return"Z"===t.toUpperCase()?0:/^(\-|\+)\d{4}$/.test(t)?("-"===t.substr(0,1)?-1:1)*(60*parseInt(t.substr(1,2),10)+parseInt(t.substr(3,2),10)):e},$.timepicker.timezoneAdjust=function(e,t){var i=$.timepicker.timezoneOffsetNumber(t);return isNaN(i)||e.setMinutes(e.getMinutes()+-e.getTimezoneOffset()-i),e},$.timepicker.timeRange=function(e,t,i){return $.timepicker.handleRange("timepicker",e,t,i)},$.timepicker.datetimeRange=function(e,t,i){$.timepicker.handleRange("datetimepicker",e,t,i)},$.timepicker.dateRange=function(e,t,i){$.timepicker.handleRange("datepicker",e,t,i)},$.timepicker.handleRange=function(e,t,i,s){function a(a,n){var r=t[e]("getDate"),l=i[e]("getDate"),o=a[e]("getDate");if(null!==r){var c=new Date(r.getTime()),u=new Date(r.getTime());c.setMilliseconds(c.getMilliseconds()+s.minInterval),u.setMilliseconds(u.getMilliseconds()+s.maxInterval),s.minInterval>0&&c>l?i[e]("setDate",c):s.maxInterval>0&&l>u?i[e]("setDate",u):r>l&&n[e]("setDate",o)}}function n(t,i,a){if(t.val()){var n=t[e].call(t,"getDate");null!==n&&s.minInterval>0&&("minDate"===a&&n.setMilliseconds(n.getMilliseconds()+s.minInterval),"maxDate"===a&&n.setMilliseconds(n.getMilliseconds()-s.minInterval)),n.getTime&&i[e].call(i,"option",a,n)}}s=$.extend({},{minInterval:0,maxInterval:0,start:{},end:{}},s);var r=!1;return"timepicker"===e&&(r=!0,e="datetimepicker"),$.fn[e].call(t,$.extend({timeOnly:r,onClose:function(){a($(this),i)},onSelect:function(){n($(this),i,"minDate")}},s,s.start)),$.fn[e].call(i,$.extend({timeOnly:r,onClose:function(){a($(this),t)},onSelect:function(){n($(this),t,"maxDate")}},s,s.end)),a(t,i),n(t,i,"minDate"),n(i,t,"maxDate"),$([t.get(0),i.get(0)])},$.timepicker.log=function(){window.console&&window.console.log.apply(window.console,Array.prototype.slice.call(arguments))},$.timepicker._util={_extendRemove:extendRemove,_isEmptyObject:isEmptyObject,_convert24to12:convert24to12,_detectSupport:detectSupport,_selectLocalTimezone:selectLocalTimezone,_computeEffectiveSetting:computeEffectiveSetting,_splitDateTime:splitDateTime,_parseDateTimeInternal:parseDateTimeInternal},Date.prototype.getMicroseconds||(Date.prototype.microseconds=0,Date.prototype.getMicroseconds=function(){return this.microseconds},Date.prototype.setMicroseconds=function(e){return this.setMilliseconds(this.getMilliseconds()+Math.floor(e/1e3)),this.microseconds=e%1e3,this}),$.timepicker.version="1.5.0"}})(jQuery);
PK     ‚ŠU]J5Åá›  á›    vendor/cmb2/cmb2/js/cmb2.jsnu „[µü¤        /**
 * Controls the behaviours of custom metabox fields.
 *
 * @author CMB2 team
 * @see    https://github.com/CMB2/CMB2
 */

/**
 * Custom jQuery for Custom Metaboxes and Fields
 */
window.CMB2 = window.CMB2 || {};
(function(window, document, $, cmb, undefined){
	'use strict';

	// localization strings
	var l10n = window.cmb2_l10;
	var setTimeout = window.setTimeout;
	var $document;
	var $id = function( selector ) {
		return $( document.getElementById( selector ) );
	};
	var getRowId = function( id, newIterator ) {
		id = id.split('-');
		id.splice(id.length - 1, 1);
		id.push( newIterator );
		return id.join('-');
	};
	cmb.$id = $id;
	var defaults = {
		idNumber        : false,
		repeatEls       : 'input:not([type="button"]),select,textarea,.cmb2-media-status',
		noEmpty         : 'input:not([type="button"]):not([type="radio"]):not([type="checkbox"]),textarea',
		repeatUpdate    : 'input:not([type="button"]),select,textarea,label',
		styleBreakPoint : 450,
		mediaHandlers   : {},
		defaults : {
			time_picker  : l10n.defaults.time_picker,
			date_picker  : l10n.defaults.date_picker,
			color_picker : l10n.defaults.color_picker || {},
			code_editor  : l10n.defaults.code_editor,
		},
		media : {
			frames : {},
		},
	};

	cmb.init = function() {
		$document = $( document );

		// Setup the CMB2 object defaults.
		$.extend( cmb, defaults );

		cmb.trigger( 'cmb_pre_init' );

		var $metabox     = cmb.metabox();
		var $repeatGroup = $metabox.find('.cmb-repeatable-group');

		 // Init time/date/color pickers
		cmb.initPickers( $metabox.find('input[type="text"].cmb2-timepicker'), $metabox.find('input[type="text"].cmb2-datepicker'), $metabox.find('input[type="text"].cmb2-colorpicker') );

		// Init code editors.
		cmb.initCodeEditors( $metabox.find( '.cmb2-textarea-code:not(.disable-codemirror)' ) );

		// Insert toggle button into DOM wherever there is multicheck. credit: Genesis Framework
		$( '<p><span class="button-secondary cmb-multicheck-toggle">' + l10n.strings.check_toggle + '</span></p>' ).insertBefore( '.cmb2-checkbox-list:not(.no-select-all)' );

		// Make File List drag/drop sortable:
		cmb.makeListSortable();
		// Make Repeatable fields drag/drop sortable:
		cmb.makeRepeatableSortable();

		$metabox
			.on( 'change', '.cmb2_upload_file', function() {
				cmb.media.field = $( this ).attr( 'id' );
				$id( cmb.media.field + '_id' ).val('');
			})
			// Media/file management
			.on( 'click', '.cmb-multicheck-toggle', cmb.toggleCheckBoxes )
			.on( 'click', '.cmb2-upload-button', cmb.handleMedia )
			.on( 'click', '.cmb-attach-list li, .cmb2-media-status .img-status img, .cmb2-media-status .file-status > span', cmb.handleFileClick )
			.on( 'click', '.cmb2-remove-file-button', cmb.handleRemoveMedia )
			// Repeatable content
			.on( 'click', '.cmb-add-group-row', cmb.addGroupRow )
			.on( 'click', '.cmb-add-row-button', cmb.addAjaxRow )
			.on( 'click', '.cmb-remove-group-row', cmb.removeGroupRow )
			.on( 'click', '.cmb-remove-row-button', cmb.removeAjaxRow )
			// Ajax oEmbed display
			.on( 'keyup paste focusout', '.cmb2-oembed', cmb.maybeOembed )
			// Reset titles when removing a row
			.on( 'cmb2_remove_row', '.cmb-repeatable-group', cmb.resetTitlesAndIterator )
			.on( 'click', '.cmbhandle, .cmbhandle + .cmbhandle-title', cmb.toggleHandle );

		if ( $repeatGroup.length ) {
			$repeatGroup
				.on( 'cmb2_add_row', cmb.emptyValue )
				.on( 'cmb2_add_row', cmb.setDefaults )
				.filter('.sortable').each( function() {
					// Add sorting arrows
					$( this ).find( '.cmb-remove-group-row-button' ).before( '<a class="button-secondary cmb-shift-rows move-up alignleft" href="#"><span class="'+ l10n.up_arrow_class +'"></span></a> <a class="button-secondary cmb-shift-rows move-down alignleft" href="#"><span class="'+ l10n.down_arrow_class +'"></span></a>' );
				})
				.on( 'click', '.cmb-shift-rows', cmb.shiftRows );
		}

		// on pageload
		setTimeout( cmb.resizeoEmbeds, 500);
		// and on window resize
		$( window ).on( 'resize', cmb.resizeoEmbeds );

		if ( $id( 'addtag' ).length ) {
			cmb.listenTagAdd();
		}

		$( document ).on( 'cmb_init', cmb.mceEnsureSave );

		cmb.trigger( 'cmb_init' );
	};

	// Handles updating tiny mce instances when saving a gutenberg post.
	// https://github.com/CMB2/CMB2/issues/1156
	cmb.mceEnsureSave = function() {
		// If no wp.data, do not proceed (no gutenberg)
		if ( ! wp.data || ! wp.data.hasOwnProperty('subscribe') ) {
			return;
		}

		// If the current user cannot richedit, or MCE is not available, bail.
		if ( ! cmb.canTinyMCE() ) {
			return;
		}

		wp.data.subscribe( function() {
			var editor = wp.data.hasOwnProperty('select') ? wp.data.select( 'core/editor' ) : null;

			// the post is currently being saved && we have tinymce editors
			if ( editor && editor.isSavingPost && editor.isSavingPost() && window.tinyMCE.editors.length ) {
				for ( var i = 0; i < window.tinyMCE.editors.length; i++ ) {
					if ( window.tinyMCE.activeEditor !== window.tinyMCE.editors[i] ) {
						window.tinyMCE.editors[i].save();
					}
				}
			}
		});
	};

	cmb.canTinyMCE = function() {
		return l10n.user_can_richedit && window.tinyMCE;
	};

	cmb.listenTagAdd = function() {
		$document.ajaxSuccess( function( evt, xhr, settings ) {
			if ( settings.data && settings.data.length && -1 !== settings.data.indexOf( 'action=add-tag' ) ) {
				cmb.resetBoxes( $id( 'addtag' ).find( '.cmb2-wrap > .cmb2-metabox' ) );
			}
		});
	};

	cmb.resetBoxes = function( $boxes ) {
		$.each( $boxes, function() {
			cmb.resetBox( $( this ) );
		});
	};

	cmb.resetBox = function( $box ) {
		$box.find( '.wp-picker-clear' ).trigger( 'click' );
		$box.find( '.cmb2-remove-file-button' ).trigger( 'click' );
		$box.find( '.cmb-row.cmb-repeatable-grouping:not(:first-of-type) .cmb-remove-group-row' ).click();
		$box.find( '.cmb-repeat-row:not(:first-child)' ).remove();

		$box.find( 'input:not([type="button"]),select,textarea' ).each( function() {
			var $element = $( this );
			var tagName = $element.prop('tagName');

			if ( 'INPUT' === tagName ) {
				var elType = $element.attr( 'type' );
				if ( 'checkbox' === elType || 'radio' === elType ) {
					$element.prop( 'checked', false );
				} else {
					$element.val( '' );
				}
			}
			if ( 'SELECT' === tagName ) {
				$( 'option:selected', this ).prop( 'selected', false );
			}
			if ( 'TEXTAREA' === tagName ) {
				$element.html( '' );
			}
		});
	};

	cmb.resetTitlesAndIterator = function( evt ) {
		if ( ! evt.group ) {
			return;
		}

		var $table = $( evt.target );
		var groupTitle = $table.find( '.cmb-add-group-row' ).data( 'grouptitle' );

		// Loop repeatable group table rows
		$table.find( '.cmb-repeatable-grouping' ).each( function( rowindex ) {
			var $row = $( this );
			var prevIterator = parseInt( $row.data( 'iterator' ), 10 );
			if ( prevIterator === rowindex ) {
				return;
			}

			// Reset rows iterator
			$row
				.attr( 'data-iterator', rowindex )
				.data( 'iterator', rowindex )
				.attr('id', getRowId( $row.attr('id'), rowindex ) )
				.find( cmb.repeatEls ).each( function() {
					cmb.updateNameAttr( $( this ), prevIterator, rowindex );
				});

			cmb.resetGroupTitles( $row, rowindex, groupTitle );
		});
	};

	cmb.resetGroupTitles = function( $row, newIterator, groupTitle ) {
		if ( groupTitle ) {
			var $rowTitle = $row.find( 'h3.cmb-group-title' );

			// Reset rows title
			if ( $rowTitle.length ) {
				$rowTitle.text( groupTitle.replace( '{#}', parseInt( newIterator, 10 ) + 1 ) );
			}
		}
	};

	cmb.toggleHandle = function( evt ) {
		evt.preventDefault();
		cmb.trigger( 'postbox-toggled', $( this ).parent('.postbox').toggleClass('closed') );
	};

	cmb.toggleCheckBoxes = function( evt ) {
		evt.preventDefault();
		var $this = $( this );
		var $multicheck = $this.closest( '.cmb-td' ).find( 'input[type=checkbox]:not([disabled])' );

		var $toggled = ! $this.data( 'checked' );
		$multicheck.prop( 'checked', $toggled ).trigger( 'change' );
		$this.data( 'checked', $toggled );
	};

	cmb.handleMedia = function( evt ) {
		evt.preventDefault();

		var $el = $( this );
		cmb.attach_id = ! $el.hasClass( 'cmb2-upload-list' ) ? $el.closest( '.cmb-td' ).find( '.cmb2-upload-file-id' ).val() : false;
		// Clean up default 0 value
		cmb.attach_id = '0' !== cmb.attach_id ? cmb.attach_id : false;

		cmb.handleFieldMedia( $el.prev('input.cmb2-upload-file'), $el.hasClass( 'cmb2-upload-list' ) );
	};

	cmb.handleFileClick = function( evt ) {
		if ( $( evt.target ).is( 'a' ) ) {
			return;
		}

		evt.preventDefault();

		var $el    = $( this );
		var $td    = $el.closest( '.cmb-td' );
		var isList = $td.find( '.cmb2-upload-button' ).hasClass( 'cmb2-upload-list' );
		cmb.attach_id = isList ? $el.find( 'input[type="hidden"]' ).data( 'id' ) : $td.find( '.cmb2-upload-file-id' ).val();

		if ( cmb.attach_id ) {
			cmb.handleFieldMedia( $td.find( 'input.cmb2-upload-file' ), isList );
		}
	};

	// Leaving this in for back-compat...
	cmb._handleMedia = function( id, isList ) {
		return cmb.handleFieldMedia( $id( id ), isList );
	};

	cmb.handleFieldMedia = function( $field, isList ) {
		if ( ! wp ) {
			return;
		}

		var id  = $field.attr('id');
		var fieldData = $field.data();
		var media, handlers;

		// Get/set unique id since actual id cold _not_ be unique due to bad replacements, etc...
		var uid = fieldData.mediaid;
		if ( ! uid ) {
			uid = _.uniqueId();
			$field.attr('data-mediaid', uid).data('mediaid', uid);
			fieldData.mediaid = uid;
		}

		handlers          = cmb.mediaHandlers;
		media             = cmb.media;
		media.mediaid     = uid;
		media.field       = id;
		media.$field      = $field;
		media.fieldData   = fieldData;
		media.previewSize = media.fieldData.previewsize;
		media.sizeName    = media.fieldData.sizename;
		media.fieldName   = $field.attr('name');
		media.isList      = isList;

		// If this field's media frame already exists, reopen it.
		if ( uid in media.frames ) {
			return media.frames[ uid ].open();
		}

		// Create the media frame.
		media.frames[ uid ] = wp.media( {
			title: cmb.metabox().find('label[for="' + id + '"]').text(),
			library : media.fieldData.queryargs || {},
			button: {
				text: l10n.strings[ isList ? 'upload_files' : 'upload_file' ]
			},
			multiple: isList ? 'add' : false
		} );

		// Enable the additional media filters: https://github.com/CMB2/CMB2/issues/873
		media.frames[ uid ].states.first().set( 'filterable', 'all' );

		cmb.trigger( 'cmb_media_modal_init', media );

		handlers.list = function( selection, returnIt ) {

			// Setup our fileGroup array
			var fileGroup = [];
			var attachmentHtml;

			if ( ! handlers.list.templates ) {
				handlers.list.templates = {
					image : wp.template( 'cmb2-list-image' ),
					file  : wp.template( 'cmb2-list-file' ),
				};
			}

			// Loop through each attachment
			selection.each( function( attachment ) {

				// Image preview or standard generic output if it's not an image.
				attachmentHtml = handlers.getAttachmentHtml( attachment, 'list' );

				// Add our file to our fileGroup array
				fileGroup.push( attachmentHtml );
			});

			if ( ! returnIt ) {
				// Append each item from our fileGroup array to .cmb2-media-status
				media.$field.siblings( '.cmb2-media-status' ).append( fileGroup );
			} else {
				return fileGroup;
			}

		};

		handlers.single = function( selection ) {
			if ( ! handlers.single.templates ) {
				handlers.single.templates = {
					image : wp.template( 'cmb2-single-image' ),
					file  : wp.template( 'cmb2-single-file' ),
				};
			}

			// Only get one file from the uploader
			var attachment = selection.first();

			media.$field.val( attachment.get( 'url' ) );
			media.$field.closest( '.cmb-td' ).find('.cmb2-upload-file-id')
				.val( attachment.get( 'id' ) );

			// Image preview or standard generic output if it's not an image.
			var attachmentHtml = handlers.getAttachmentHtml( attachment, 'single' );

			// add/display our output
			media.$field.siblings( '.cmb2-media-status' ).slideDown().html( attachmentHtml );
		};

		handlers.getAttachmentHtml = function( attachment, templatesId ) {
			var isImage = 'image' === attachment.get( 'type' );
			var data    = handlers.prepareData( attachment, isImage );

			// Image preview or standard generic output if it's not an image.
			return handlers[ templatesId ].templates[ isImage ? 'image' : 'file' ]( data );
		};

		handlers.prepareData = function( data, image ) {
			if ( image ) {
				// Set the correct image size data
				handlers.getImageData.call( data, 50 );
			}

			data                   = data.toJSON();
			data.mediaField        = media.field;
			data.mediaFieldName    = media.fieldName;
			data.stringRemoveImage = l10n.strings.remove_image;
			data.stringFile        = l10n.strings.file;
			data.stringDownload    = l10n.strings.download;
			data.stringRemoveFile  = l10n.strings.remove_file;

			return data;
		};

		handlers.getImageData = function( fallbackSize ) {

			// Preview size dimensions
			var previewW = media.previewSize[0] || fallbackSize;
			var previewH = media.previewSize[1] || fallbackSize;

			// Image dimensions and url
			var url    = this.get( 'url' );
			var width  = this.get( 'width' );
			var height = this.get( 'height' );
			var sizes  = this.get( 'sizes' );

			// Get the correct dimensions and url if a named size is set and exists
			// fallback to the 'large' size
			if ( sizes ) {
				if ( sizes[ media.sizeName ] ) {
					url    = sizes[ media.sizeName ].url;
					width  = sizes[ media.sizeName ].width;
					height = sizes[ media.sizeName ].height;
				} else if ( sizes.large ) {
					url    = sizes.large.url;
					width  = sizes.large.width;
					height = sizes.large.height;
				}
			}

			// Fit the image in to the preview size, keeping the correct aspect ratio
			if ( width > previewW ) {
				height = Math.floor( previewW * height / width );
				width = previewW;
			}

			if ( height > previewH ) {
				width = Math.floor( previewH * width / height );
				height = previewH;
			}

			if ( ! width ) {
				width = previewW;
			}

			if ( ! height ) {
				height = 'svg' === this.get( 'filename' ).split( '.' ).pop() ? '100%' : previewH;
			}

			this.set( 'sizeUrl', url );
			this.set( 'sizeWidth', width );
			this.set( 'sizeHeight', height );

			return this;
		};

		handlers.selectFile = function() {
			var selection = media.frames[ uid ].state().get( 'selection' );
			var type = isList ? 'list' : 'single';

			if ( cmb.attach_id && isList ) {
				$( '[data-id="'+ cmb.attach_id +'"]' ).parents( 'li' ).replaceWith( handlers.list( selection, true ) );
			} else {
				handlers[type]( selection );
			}

			cmb.trigger( 'cmb_media_modal_select', selection, media );
		};

		handlers.openModal = function() {
			var selection = media.frames[ uid ].state().get( 'selection' );
			var attach;

			if ( ! cmb.attach_id ) {
				selection.reset();
			} else {
				attach = wp.media.attachment( cmb.attach_id );
				attach.fetch();
				selection.set( attach ? [ attach ] : [] );
			}

			cmb.trigger( 'cmb_media_modal_open', selection, media );
		};

		// When a file is selected, run a callback.
		media.frames[ uid ]
			.on( 'select', handlers.selectFile )
			.on( 'open', handlers.openModal );

		// Finally, open the modal
		media.frames[ uid ].open();
	};

	cmb.handleRemoveMedia = function( evt ) {
		evt.preventDefault();
		var $this = $( this );
		if ( $this.is( '.cmb-attach-list .cmb2-remove-file-button' ) ) {
			$this.parents( '.cmb2-media-item' ).remove();
			return false;
		}

		var $cell        = $this.closest( '.cmb-td' );
		cmb.media.$field = $cell.find('.cmb2-upload-file');
		cmb.media.field  = cmb.media.$field.attr('id');

		cmb.media.$field.val('');
		$cell.find('.cmb2-upload-file-id').val('');
		$this.parents('.cmb2-media-status').html('');

		return false;
	};

	cmb.cleanRow = function( $row, prevNum, group ) {
		var $elements = $row.find( cmb.repeatUpdate );
		if ( group ) {

			var $other = $row.find( '[id]' ).not( cmb.repeatUpdate );

			// Remove extra ajaxed rows
			$row.find('.cmb-repeat-table .cmb-repeat-row:not(:first-child)').remove();

			// Update all elements w/ an ID
			if ( $other.length ) {
				$other.each( function() {
					var $_this = $( this );
					var oldID = $_this.attr( 'id' );
					var newID = oldID.replace( '_'+ prevNum, '_'+ cmb.idNumber );
					var $buttons = $row.find('[data-selector="'+ oldID +'"]');
					$_this.attr( 'id', newID );

					// Replace data-selector vars
					if ( $buttons.length ) {
						$buttons.attr( 'data-selector', newID ).data( 'selector', newID );
					}
				});
			}
		}

		$elements.filter( ':checked' ).removeAttr( 'checked' );
		$elements.find( ':checked' ).removeAttr( 'checked' );
		$elements.filter( ':selected' ).removeAttr( 'selected' );
		$elements.find( ':selected' ).removeAttr( 'selected', false );

		cmb.resetGroupTitles( $row, cmb.idNumber, $row.data( 'title' ) );

		$elements.each( function() {
			cmb.elReplacements( $( this ), prevNum, group );
		} );

		return cmb;
	};

	cmb.elReplacements = function( $newInput, prevNum, group ) {
		var oldFor    = $newInput.attr( 'for' );
		var oldVal    = $newInput.val();
		var type      = $newInput.prop( 'type' );
		var defVal    = cmb.getFieldArg( $newInput, 'default' );
		var newVal    = 'undefined' !== typeof defVal && false !== defVal ? defVal : '';
		var tagName   = $newInput.prop('tagName');
		var checkable = 'radio' === type || 'checkbox' === type ? oldVal : false;
		var attrs     = {};
		var newID, oldID;
		if ( oldFor ) {
			attrs = { 'for' : oldFor.replace( '_'+ prevNum, '_'+ cmb.idNumber ) };
		} else {
			var oldName = $newInput.attr( 'name' );
			var newName;
			oldID = $newInput.attr( 'id' );

			// Handle adding groups vs rows.
			if ( group ) {
				// Expect another bracket after group's index closing bracket.
				newName = oldName ? oldName.replace( '['+ prevNum +'][', '['+ cmb.idNumber +'][' ) : '';
				// Expect another underscore after group's index trailing underscore.
				newID   = oldID ? oldID.replace( '_' + prevNum + '_', '_' + cmb.idNumber + '_' ) : '';
			}
			else {
				// Row indexes are at the very end of the string.
				newName = oldName ? cmb.replaceLast( oldName, '[' + prevNum + ']', '[' + cmb.idNumber + ']' ) : '';
				newID   = oldID ? cmb.replaceLast( oldID, '_' + prevNum, '_' + cmb.idNumber ) : '';
			}

			attrs = {
				id: newID,
				name: newName
			};

		}

		// Clear out textarea values
		if ( 'TEXTAREA' === tagName ) {
			$newInput.html( newVal );
		}

		if ( 'SELECT' === tagName && 'undefined' !== typeof defVal ) {
			var $toSelect = $newInput.find( '[value="'+ defVal + '"]' );
			if ( $toSelect.length ) {
				$toSelect.attr( 'selected', 'selected' ).prop( 'selected', 'selected' );
			}
		}

		if ( checkable ) {
			$newInput.removeAttr( 'checked' );
			if ( 'undefined' !== typeof defVal && oldVal === defVal ) {
				$newInput.attr( 'checked', 'checked' ).prop( 'checked', 'checked' );
			}
		}

		if ( ! group && $newInput[0].hasAttribute( 'data-iterator' ) ) {
			attrs['data-iterator'] = cmb.idNumber;
		}

		$newInput
			.removeClass( 'hasDatepicker' )
			.val( checkable ? checkable : newVal ).attr( attrs );

		return $newInput;
	};

	cmb.newRowHousekeeping = function( $row ) {
		var $colorPicker = $row.find( '.wp-picker-container' );
		var $list        = $row.find( '.cmb2-media-status' );

		if ( $colorPicker.length ) {
			// Need to clean-up colorpicker before appending
			$colorPicker.each( function() {
				var $td = $( this ).parent();
				$td.html( $td.find( 'input[type="text"].cmb2-colorpicker' ).attr('style', '') );
			});
		}

		// Need to clean-up colorpicker before appending
		if ( $list.length ) {
			$list.empty();
		}

		return cmb;
	};

	cmb.afterRowInsert = function( $row ) {
		// Init pickers from new row
		cmb.initPickers( $row.find('input[type="text"].cmb2-timepicker'), $row.find('input[type="text"].cmb2-datepicker'), $row.find('input[type="text"].cmb2-colorpicker') );
	};

	cmb.updateNameAttr = function ( $el, prevIterator, newIterator ) {
		var name = $el.attr( 'name' ); // get current name

		// If name is defined
		if ( 'undefined' !== typeof name ) {
			var isFileList = $el.attr( 'id' ).indexOf('filelist');

			// Update field name attributes so data is not orphaned when a row is removed and post is saved
			var from    = isFileList ? '[' + prevIterator + '][' : '[' + prevIterator + ']';
			var to      = isFileList ? '[' + newIterator + '][' : '[' + newIterator + ']';
			var newName = name.replace( from, to );

			// New name with replaced iterator
			$el.attr( 'name', newName );
		}
	};

	cmb.emptyValue = function( evt, row ) {
		$( cmb.noEmpty, row ).val( '' );
	};

	cmb.setDefaults = function( evt, row ) {
		$( cmb.noEmpty, row ).each( function() {
			var $el = $(this);
			var defVal = cmb.getFieldArg( $el, 'default' );
			if ( 'undefined' !== typeof defVal && false !== defVal ) {
				$el.val( defVal );
			}
		});
	};

	cmb.addGroupRow = function( evt ) {
		evt.preventDefault();

		var $this = $( this );

		// before anything significant happens
		cmb.triggerElement( $this, 'cmb2_add_group_row_start', $this );

		var $table   = $id( $this.data('selector') );
		var $oldRow  = $table.find('.cmb-repeatable-grouping').last();
		var prevNum  = parseInt( $oldRow.data('iterator'), 10 );
		cmb.idNumber = parseInt( prevNum, 10 ) + 1;
		var $row     = $oldRow.clone();
		var nodeName = $row.prop('nodeName') || 'div';

		// Make sure the next number doesn't exist.
		while ( $table.find( '.cmb-repeatable-grouping[data-iterator="'+ cmb.idNumber +'"]' ).length > 0 ) {
			cmb.idNumber++;
		}

		cmb.newRowHousekeeping( $row.data( 'title', $this.data( 'grouptitle' ) ) ).cleanRow( $row, prevNum, true );
		$row.find( '.cmb-add-row-button' ).prop( 'disabled', false );

		var $newRow = $( '<' + nodeName + ' id="'+ getRowId( $oldRow.attr('id'), cmb.idNumber ) +'" class="postbox cmb-row cmb-repeatable-grouping" data-iterator="'+ cmb.idNumber +'">'+ $row.html() +'</' + nodeName + '>' );
		$oldRow.after( $newRow );

		cmb.afterRowInsert( $newRow );
		cmb.makeRepeatableSortable( $newRow );

		cmb.triggerElement( $table, { type: 'cmb2_add_row', group: true }, $newRow );
	};

	cmb.addAjaxRow = function( evt ) {
		evt.preventDefault();

		var $this     = $( this );
		var $table    = $id( $this.data('selector') );
		var $row      = $table.find('.empty-row');
		var prevNum   = parseInt( $row.find('[data-iterator]').data('iterator'), 10 );
		cmb.idNumber  = parseInt( prevNum, 10 ) + 1;
		var $emptyrow = $row.clone();

		cmb.newRowHousekeeping( $emptyrow ).cleanRow( $emptyrow, prevNum );

		$row.removeClass('empty-row hidden').addClass('cmb-repeat-row');
		$row.after( $emptyrow );

		cmb.afterRowInsert( $emptyrow );

		cmb.triggerElement( $table, { type: 'cmb2_add_row', group: false }, $emptyrow, $row );
	};

	cmb.removeGroupRow = function( evt ) {
		evt.preventDefault();

		var $this        = $( this );
		var confirmation = $this.data('confirm');

		// Process further only if deletion confirmation enabled and user agreed.
		if ( ! cmb.resetRow.resetting && confirmation && ! window.confirm( confirmation ) ) {
			return;
		}

		var $table  = $id( $this.data('selector') );
		var $parent = $this.parents('.cmb-repeatable-grouping');
		var number  = $table.find('.cmb-repeatable-grouping').length;

		if ( number < 2 ) {
			return cmb.resetRow( $parent.parents('.cmb-repeatable-group').find( '.cmb-add-group-row' ), $this );
		}

		cmb.triggerElement( $table, 'cmb2_remove_group_row_start', $this );

		$parent.remove();

		cmb.triggerElement( $table, { type: 'cmb2_remove_row', group: true } );
	};

	cmb.removeAjaxRow = function( evt ) {
		evt.preventDefault();

		var $this = $( this );

		// Check if disabled
		if ( $this.hasClass( 'button-disabled' ) ) {
			return;
		}

		var $parent = $this.parents('.cmb-row');
		var $table  = $this.parents('.cmb-repeat-table');
		var number  = $table.find('.cmb-row').length;

		if ( number <= 2 ) {
			return cmb.resetRow( $parent.find( '.cmb-add-row-button' ), $this );
		}

		if ( $parent.hasClass('empty-row') ) {
			$parent.prev().addClass( 'empty-row' ).removeClass('cmb-repeat-row');
		}

		$this.parents('.cmb-repeat-table .cmb-row').remove();


		cmb.triggerElement( $table, { type: 'cmb2_remove_row', group: false } );
	};

	cmb.resetRow = function( $addNewBtn, $removeBtn ) {
		cmb.resetRow.resetting = true;
		// Click the "add new" button followed by the "remove this" button
		// in order to reset the repeat row to empty values.
		$addNewBtn.trigger( 'click' );
		$removeBtn.trigger( 'click' );
		cmb.resetRow.resetting = false;
	};

	cmb.shiftRows = function( evt ) {

		evt.preventDefault();

		var $this  = $( this );
		var moveUp = $this.hasClass( 'move-up' ) ? true : false;
		var $from  = $this.parents( '.cmb-repeatable-grouping' );
		var $goto  = $from[ moveUp ? 'prev' : 'next' ]( '.cmb-repeatable-grouping' );

		// Before shift occurs.
		cmb.triggerElement( $this, 'cmb2_shift_rows_enter', $this, $from, $goto );

		if ( ! $goto.length ) {
			return;
		}

		// About to shift
		cmb.triggerElement( $this, 'cmb2_shift_rows_start', $this, $from, $goto );

		var fromIterator = $from.attr('data-iterator');
		var toIterator   = $goto.attr('data-iterator');

		// Replace name attributes in both groups.
		$from.find( cmb.repeatEls ).each( function() {
			cmb.updateNameAttr( $( this ), fromIterator, toIterator );
		});
		$goto.find( cmb.repeatEls ).each( function() {
			cmb.updateNameAttr( $( this ), toIterator, fromIterator );
		});

		// Replace titles in both groups.
		var groupTitle = $this.parents( '.cmb-repeatable-group' ).find('[data-grouptitle]').data( 'grouptitle' );
		if ( groupTitle ) {
			cmb.resetGroupTitles( $from, toIterator, groupTitle );
			cmb.resetGroupTitles( $goto, fromIterator, groupTitle );
		}

		// Update the iterators
		$from.data( 'iterator', toIterator );
		$from.attr( 'data-iterator', toIterator );
		$goto.data( 'iterator', fromIterator );
		$goto.attr( 'data-iterator', fromIterator );

		// Now move the group to it's destination.
		$goto[moveUp ? 'before' : 'after']( $from );

		// Scroll to the top of the shifted group.
		$([document.documentElement, document.body]).animate({
			scrollTop: $from.offset().top - 50
		}, 300);

		// shift done
		cmb.triggerElement( $this, 'cmb2_shift_rows_complete', $this, $from, $goto );
	};

	cmb.initPickers = function( $timePickers, $datePickers, $colorPickers ) {
		cmb.trigger( 'cmb_init_pickers', {
			time: $timePickers,
			date: $datePickers,
			color: $colorPickers
		} );

		// Initialize jQuery UI timepickers
		cmb.initDateTimePickers( $timePickers, 'timepicker', 'time_picker' );
		// Initialize jQuery UI datepickers
		cmb.initDateTimePickers( $datePickers, 'datepicker', 'date_picker' );
		// Initialize color picker
		cmb.initColorPickers( $colorPickers );
	};

	cmb.initDateTimePickers = function( $selector, method, defaultKey ) {
		if ( $selector.length ) {
			$selector[ method ]( 'destroy' ).each( function() {
				var $this     = $( this );
				var fieldOpts = $this.data( method ) || {};
				var options   = $.extend( {}, cmb.defaults[ defaultKey ], fieldOpts );
				$this[ method ]( cmb.datePickerSetupOpts( fieldOpts, options, method ) );
			} );
		}
	};

	cmb.datePickerSetupOpts = function( fieldOpts, options, method ) {
		var existing = $.extend( {}, options );

		options.beforeShow = function( input, inst ) {
			if ( 'timepicker' === method ) {
				cmb.addTimePickerClasses( inst.dpDiv );
			}

			// Wrap datepicker w/ class to narrow the scope of jQuery UI CSS and prevent conflicts
			$id( 'ui-datepicker-div' ).addClass( 'cmb2-element' );

			// Let's be sure to call beforeShow if it was added
			if ( 'function' === typeof existing.beforeShow ) {
				existing.beforeShow( input, inst );
			}
		};

		if ( 'timepicker' === method ) {
			options.onChangeMonthYear = function( year, month, inst, picker ) {
				cmb.addTimePickerClasses( inst.dpDiv );

				// Let's be sure to call onChangeMonthYear if it was added
				if ( 'function' === typeof existing.onChangeMonthYear ) {
					existing.onChangeMonthYear( year, month, inst, picker );
				}
			};
		}

		options.onClose = function( dateText, inst ) {
			// Remove the class when we're done with it (and hide to remove FOUC).
			var $picker = $id( 'ui-datepicker-div' ).removeClass( 'cmb2-element' ).hide();
			if ( 'timepicker' === method && ! $( inst.input ).val() ) {
				// Set the timepicker field value if it's empty.
				inst.input.val( $picker.find( '.ui_tpicker_time' ).text() );
			}

			// Let's be sure to call onClose if it was added
			if ( 'function' === typeof existing.onClose ) {
				existing.onClose( dateText, inst );
			}
		};

		return options;
	};

	// Adds classes to timepicker buttons.
	cmb.addTimePickerClasses = function( $picker ) {
		var func = cmb.addTimePickerClasses;
		func.count = func.count || 0;

		// Wait a bit to let the timepicker render, since these are pre-render events.
		setTimeout( function() {
			if ( $picker.find( '.ui-priority-secondary' ).length ) {
				$picker.find( '.ui-priority-secondary' ).addClass( 'button-secondary' );
				$picker.find( '.ui-priority-primary' ).addClass( 'button-primary' );
				func.count = 0;
			} else if ( func.count < 5 ) {
				func.count++;
				func( $picker );
			}
		}, 10 );
	};

	cmb.initColorPickers = function( $selector ) {
		if ( ! $selector.length ) {
			return;
		}
		if ( 'object' === typeof jQuery.wp && 'function' === typeof jQuery.wp.wpColorPicker ) {

			$selector.each( function() {
				var $this = $( this );
				var fieldOpts = $this.data( 'colorpicker' ) || {};
				$this.wpColorPicker( $.extend( {}, cmb.defaults.color_picker, fieldOpts ) );
			} );

		} else {
			$selector.each( function( i ) {
				$( this ).after( '<div id="picker-' + i + '" style="z-index: 1000; background: #EEE; border: 1px solid #CCC; position: absolute; display: block;"></div>' );
				$id( 'picker-' + i ).hide().farbtastic( $( this ) );
			} )
			.focus( function() {
				$( this ).next().show();
			} )
			.blur( function() {
				$( this ).next().hide();
			} );
		}
	};

	cmb.initCodeEditors = function( $selector ) {
		cmb.trigger( 'cmb_init_code_editors', $selector );

		if ( ! cmb.defaults.code_editor || ! wp || ! wp.codeEditor || ! $selector.length ) {
			return;
		}

		$selector.each( function() {
			wp.codeEditor.initialize(
				this.id,
				cmb.codeEditorArgs( $( this ).data( 'codeeditor' ) )
			);
		} );
	};

	cmb.codeEditorArgs = function( overrides ) {
		var props = [ 'codemirror', 'csslint', 'jshint', 'htmlhint' ];
		var args = $.extend( {}, cmb.defaults.code_editor );
		overrides = overrides || {};

		for ( var i = props.length - 1; i >= 0; i-- ) {
			if ( overrides.hasOwnProperty( props[i] ) ) {
				args[ props[i] ] = $.extend( {}, args[ props[i] ] || {}, overrides[ props[i] ] );
			}
		}

		return args;
	};

	cmb.makeListSortable = function() {
		var $filelist = cmb.metabox().find( '.cmb2-media-status.cmb-attach-list' );
		if ( $filelist.length ) {
			$filelist.sortable({ cursor: 'move' }).disableSelection();
		}
	};

	cmb.makeRepeatableSortable = function( $row ) {
		var $repeatables = ($row || cmb.metabox()).find( '.cmb-repeat-table .cmb-field-list' );

		if ( $repeatables.length ) {
			$repeatables.sortable({
				items : '.cmb-repeat-row',
				cursor: 'move',
				// The default "cancel" attributes are: "input,textarea,button,select,option".
				// We are appending .CodeMirror.
				// See https://api.jqueryui.com/sortable/#option-cancel
				cancel: 'input,textarea,button,select,option,.CodeMirror'
			});
		}
	};

	cmb.maybeOembed = function( evt ) {
		var $this = $( this );

		var m = {
			focusout : function() {
				setTimeout( function() {
					// if it's been 2 seconds, hide our spinner
					cmb.spinner( '.cmb2-metabox', true );
				}, 2000);
			},
			keyup : function() {
				var betw = function( min, max ) {
					return ( evt.which <= max && evt.which >= min );
				};
				// Only Ajax on normal keystrokes
				if ( betw( 48, 90 ) || betw( 96, 111 ) || betw( 8, 9 ) || evt.which === 187 || evt.which === 190 ) {
					// fire our ajax function
					cmb.doAjax( $this, evt );
				}
			},
			paste : function() {
				// paste event is fired before the value is filled, so wait a bit
				setTimeout( function() { cmb.doAjax( $this ); }, 100);
			}
		};

		m[ evt.type ]();
	};

	/**
	 * Resize oEmbed videos to fit in their respective metaboxes
	 *
	 * @since  0.9.4
	 *
	 * @return {return}
	 */
	cmb.resizeoEmbeds = function() {
		cmb.metabox().each( function() {
			var $this      = $( this );
			var $tableWrap = $this.parents('.inside');
			var isSide     = $this.parents('.inner-sidebar').length || $this.parents( '#side-sortables' ).length;
			var isSmall    = isSide;
			var isSmallest = false;
			if ( ! $tableWrap.length )  {
				return true; // continue
			}

			// Calculate new width
			var tableW = $tableWrap.width();

			if ( cmb.styleBreakPoint > tableW ) {
				isSmall    = true;
				isSmallest = ( cmb.styleBreakPoint - 62 ) > tableW;
			}

			tableW = isSmall ? tableW : Math.round(($tableWrap.width() * 0.82)*0.97);
			var newWidth = tableW - 30;
			if ( isSmall && ! isSide && ! isSmallest ) {
				newWidth = newWidth - 75;
			}
			if ( newWidth > 639 ) {
				return true; // continue
			}

			var $embeds   = $this.find('.cmb-type-oembed .embed-status');
			var $children = $embeds.children().not('.cmb2-remove-wrapper');
			if ( ! $children.length ) {
				return true; // continue
			}

			$children.each( function() {
				var $this     = $( this );
				var iwidth    = $this.width();
				var iheight   = $this.height();
				var _newWidth = newWidth;
				if ( $this.parents( '.cmb-repeat-row' ).length && ! isSmall ) {
					// Make room for our repeatable "remove" button column
					_newWidth = newWidth - 91;
					_newWidth = 785 > tableW ? _newWidth - 15 : _newWidth;
				}
				// Calc new height
				var newHeight = Math.round((_newWidth * iheight)/iwidth);
				$this.width(_newWidth).height(newHeight);
			});
		});
	};

	// function for running our ajax
	cmb.doAjax = function( $obj ) {
		// get typed value
		var oembed_url = $obj.val();
		// only proceed if the field contains more than 6 characters
		if ( oembed_url.length < 6 ) {
			return;
		}

		// get field id
		var field_id         = $obj.attr('id');
		var $context         = $obj.closest( '.cmb-td' );
		var $embed_container = $context.find( '.embed-status' );
		var $embed_wrap      = $context.find( '.embed_wrap' );
		var $child_el        = $embed_container.find( ':first-child' );
		var oembed_width     = $embed_container.length && $child_el.length ? $child_el.width() : $obj.width();

		cmb.log( 'oembed_url', oembed_url, field_id );

		// show our spinner
		cmb.spinner( $context );
		// clear out previous results
		$embed_wrap.html('');
		// and run our ajax function
		setTimeout( function() {
			// if they haven't typed in 500 ms
			if ( $( '.cmb2-oembed:focus' ).val() !== oembed_url ) {
				return;
			}
			$.ajax({
				type : 'post',
				dataType : 'json',
				url : l10n.ajaxurl,
				data : {
					'action'          : 'cmb2_oembed_handler',
					'oembed_url'      : oembed_url,
					'oembed_width'    : oembed_width > 300 ? oembed_width : 300,
					'field_id'        : field_id,
					'object_id'       : $obj.data( 'objectid' ),
					'object_type'     : $obj.data( 'objecttype' ),
					'cmb2_ajax_nonce' : l10n.ajax_nonce
				},
				success: function(response) {
					cmb.log( response );
					// hide our spinner
					cmb.spinner( $context, true );
					// and populate our results from ajax response
					$embed_wrap.html( response.data );
				}
			});

		}, 500);

	};

	/**
	 * Gets jQuery object containing all CMB metaboxes. Caches the result.
	 *
	 * @since  1.0.2
	 *
	 * @return {Object} jQuery object containing all CMB metaboxes.
	 */
	cmb.metabox = function() {
		if ( cmb.$metabox ) {
			return cmb.$metabox;
		}
		cmb.$metabox = $('.cmb2-wrap > .cmb2-metabox');
		return cmb.$metabox;
	};

	/**
	 * Starts/stops contextual spinner.
	 *
	 * @since  1.0.1
	 *
	 * @param  {object} $context The jQuery parent/context object.
	 * @param  {bool} hide       Whether to hide the spinner (will show by default).
	 *
	 * @return {void}
	 */
	cmb.spinner = function( $context, hide ) {
		var m = hide ? 'removeClass' : 'addClass';
		$('.cmb-spinner', $context )[ m ]( 'is-active' );
	};

	/**
	 * Triggers a jQuery event on the document object.
	 *
	 * @since  2.2.3
	 *
	 * @param  {string} evtName The name of the event to trigger.
	 *
	 * @return {void}
	 */
	cmb.trigger = function( evtName ) {
		var args = Array.prototype.slice.call( arguments, 1 );
		args.push( cmb );
		$document.trigger( evtName, args );
	};

	/**
	 * Triggers a jQuery event on the given jQuery object.
	 *
	 * @since  2.2.3
	 *
	 * @param  {object} $el     The jQuery element object.
	 * @param  {string} evtName The name of the event to trigger.
	 *
	 * @return {void}
	 */
	cmb.triggerElement = function( $el, evtName ) {
		var args = Array.prototype.slice.call( arguments, 2 );
		args.push( cmb );
		$el.trigger( evtName, args );
	};

	/**
	 * Get an argument for a given field.
	 *
	 * @since  2.5.0
	 *
	 * @param  {string|object} hash The field hash, id, or a jQuery object for a field.
	 * @param  {string}        arg  The argument to get on the field.
	 *
	 * @return {mixed}              The argument value.
	 */
	cmb.getFieldArg = function( hash, arg ) {
		return cmb.getField( hash )[ arg ];
	};

	/**
	 * Get a field object instances. Can be filtered by passing in a filter callback function.
	 * e.g. `const fileFields = CMB2.getFields(f => 'file' === f.type);`
	 *
	 * @since  2.5.0
	 *
	 * @param  {mixed} filterCb An optional filter callback function.
	 *
	 * @return array            An array of field object instances.
	 */
	cmb.getFields = function( filterCb ) {
		if ( 'function' === typeof filterCb ) {
			var fields = [];
			$.each( l10n.fields, function( hash, field ) {
				if ( filterCb( field, hash ) ) {
					fields.push( field );
				}
			});
			return fields;
		}

		return l10n.fields;
	};

	/**
	 * Get a field object instance by hash or id.
	 *
	 * @since  2.5.0
	 *
	 * @param  {string|object} hash The field hash, id, or a jQuery object for a field.
	 *
	 * @return {object}        The field object or an empty object.
	 */
	cmb.getField = function( hash ) {
		var field = {};
		hash = hash instanceof jQuery ? hash.data( 'hash' ) : hash;
		if ( hash ) {
			try {
				if ( l10n.fields[ hash ] ) {
					throw new Error( hash );
				}

				cmb.getFields( function( field ) {
					if ( 'function' === typeof hash ) {
						if ( hash( field ) ) {
							throw new Error( field.hash );
						}
					} else  if ( field.id && field.id === hash ) {
						throw new Error( field.hash );
					}
				});
			} catch( e ) {
				field = l10n.fields[ e.message ];
			}
		}

		return field;
	};

	/**
	 * Safely log things if query var is set. Accepts same parameters as console.log.
	 *
	 * @since  1.0.0
	 *
	 * @return {void}
	 */
	cmb.log = function() {
		if ( l10n.script_debug && console && 'function' === typeof console.log ) {
			console.log.apply(console, arguments);
		}
	};

	/**
	 * Replace the last occurrence of a string.
	 *
	 * @since  2.2.6
	 *
	 * @param  {string} string  String to search/replace.
	 * @param  {string} search  String to search.
	 * @param  {string} replace String to replace search with.
	 *
	 * @return {string}         Possibly modified string.
	 */
	cmb.replaceLast = function( string, search, replace ) {
		// find the index of last time word was used
		var n = string.lastIndexOf( search );

		// slice the string in 2, one from the start to the lastIndexOf
		// and then replace the word in the rest
		return string.slice( 0, n ) + string.slice( n ).replace( search, replace );
	};

	// Kick it off!
	$( cmb.init );

})(window, document, jQuery, window.CMB2);
PK     ‚ŠU]ù-*|  *|    vendor/cmb2/cmb2/js/cmb2.min.jsnu „[µü¤        window.CMB2=window.CMB2||{},function(window,document,$,cmb){"use strict";var $document,l10n=window.cmb2_l10,setTimeout=window.setTimeout,$id=function(selector){return $(document.getElementById(selector))},getRowId=function(id,newIterator){return(id=id.split("-")).splice(id.length-1,1),id.push(newIterator),id.join("-")};cmb.$id=$id;var defaults={idNumber:!1,repeatEls:'input:not([type="button"]),select,textarea,.cmb2-media-status',noEmpty:'input:not([type="button"]):not([type="radio"]):not([type="checkbox"]),textarea',repeatUpdate:'input:not([type="button"]),select,textarea,label',styleBreakPoint:450,mediaHandlers:{},defaults:{time_picker:l10n.defaults.time_picker,date_picker:l10n.defaults.date_picker,color_picker:l10n.defaults.color_picker||{},code_editor:l10n.defaults.code_editor},media:{frames:{}}};cmb.init=function(){$document=$(document),$.extend(cmb,defaults),cmb.trigger("cmb_pre_init");var $metabox=cmb.metabox(),$repeatGroup=$metabox.find(".cmb-repeatable-group");cmb.initPickers($metabox.find('input[type="text"].cmb2-timepicker'),$metabox.find('input[type="text"].cmb2-datepicker'),$metabox.find('input[type="text"].cmb2-colorpicker')),cmb.initCodeEditors($metabox.find(".cmb2-textarea-code:not(.disable-codemirror)")),$('<p><span class="button-secondary cmb-multicheck-toggle">'+l10n.strings.check_toggle+"</span></p>").insertBefore(".cmb2-checkbox-list:not(.no-select-all)"),cmb.makeListSortable(),cmb.makeRepeatableSortable(),$metabox.on("change",".cmb2_upload_file",function(){cmb.media.field=$(this).attr("id"),$id(cmb.media.field+"_id").val("")}).on("click",".cmb-multicheck-toggle",cmb.toggleCheckBoxes).on("click",".cmb2-upload-button",cmb.handleMedia).on("click",".cmb-attach-list li, .cmb2-media-status .img-status img, .cmb2-media-status .file-status > span",cmb.handleFileClick).on("click",".cmb2-remove-file-button",cmb.handleRemoveMedia).on("click",".cmb-add-group-row",cmb.addGroupRow).on("click",".cmb-add-row-button",cmb.addAjaxRow).on("click",".cmb-remove-group-row",cmb.removeGroupRow).on("click",".cmb-remove-row-button",cmb.removeAjaxRow).on("keyup paste focusout",".cmb2-oembed",cmb.maybeOembed).on("cmb2_remove_row",".cmb-repeatable-group",cmb.resetTitlesAndIterator).on("click",".cmbhandle, .cmbhandle + .cmbhandle-title",cmb.toggleHandle),$repeatGroup.length&&$repeatGroup.on("cmb2_add_row",cmb.emptyValue).on("cmb2_add_row",cmb.setDefaults).filter(".sortable").each(function(){$(this).find(".cmb-remove-group-row-button").before('<a class="button-secondary cmb-shift-rows move-up alignleft" href="#"><span class="'+l10n.up_arrow_class+'"></span></a> <a class="button-secondary cmb-shift-rows move-down alignleft" href="#"><span class="'+l10n.down_arrow_class+'"></span></a>')}).on("click",".cmb-shift-rows",cmb.shiftRows),setTimeout(cmb.resizeoEmbeds,500),$(window).on("resize",cmb.resizeoEmbeds),$id("addtag").length&&cmb.listenTagAdd(),$(document).on("cmb_init",cmb.mceEnsureSave),cmb.trigger("cmb_init")},cmb.mceEnsureSave=function(){wp.data&&wp.data.hasOwnProperty("subscribe")&&cmb.canTinyMCE()&&wp.data.subscribe(function(){var editor=wp.data.hasOwnProperty("select")?wp.data.select("core/editor"):null;if(editor&&editor.isSavingPost&&editor.isSavingPost()&&window.tinyMCE.editors.length)for(var i=0;i<window.tinyMCE.editors.length;i++)window.tinyMCE.activeEditor!==window.tinyMCE.editors[i]&&window.tinyMCE.editors[i].save()})},cmb.canTinyMCE=function(){return l10n.user_can_richedit&&window.tinyMCE},cmb.listenTagAdd=function(){$document.ajaxSuccess(function(evt,xhr,settings){settings.data&&settings.data.length&&-1!==settings.data.indexOf("action=add-tag")&&cmb.resetBoxes($id("addtag").find(".cmb2-wrap > .cmb2-metabox"))})},cmb.resetBoxes=function($boxes){$.each($boxes,function(){cmb.resetBox($(this))})},cmb.resetBox=function($box){$box.find(".wp-picker-clear").trigger("click"),$box.find(".cmb2-remove-file-button").trigger("click"),$box.find(".cmb-row.cmb-repeatable-grouping:not(:first-of-type) .cmb-remove-group-row").click(),$box.find(".cmb-repeat-row:not(:first-child)").remove(),$box.find('input:not([type="button"]),select,textarea').each(function(){var $element=$(this),tagName=$element.prop("tagName");if("INPUT"===tagName){var elType=$element.attr("type");"checkbox"===elType||"radio"===elType?$element.prop("checked",!1):$element.val("")}"SELECT"===tagName&&$("option:selected",this).prop("selected",!1),"TEXTAREA"===tagName&&$element.html("")})},cmb.resetTitlesAndIterator=function(evt){if(evt.group){var $table=$(evt.target),groupTitle=$table.find(".cmb-add-group-row").data("grouptitle");$table.find(".cmb-repeatable-grouping").each(function(rowindex){var $row=$(this),prevIterator=parseInt($row.data("iterator"),10);prevIterator!==rowindex&&($row.attr("data-iterator",rowindex).data("iterator",rowindex).attr("id",getRowId($row.attr("id"),rowindex)).find(cmb.repeatEls).each(function(){cmb.updateNameAttr($(this),prevIterator,rowindex)}),cmb.resetGroupTitles($row,rowindex,groupTitle))})}},cmb.resetGroupTitles=function($row,newIterator,groupTitle){if(groupTitle){var $rowTitle=$row.find("h3.cmb-group-title");$rowTitle.length&&$rowTitle.text(groupTitle.replace("{#}",parseInt(newIterator,10)+1))}},cmb.toggleHandle=function(evt){evt.preventDefault(),cmb.trigger("postbox-toggled",$(this).parent(".postbox").toggleClass("closed"))},cmb.toggleCheckBoxes=function(evt){evt.preventDefault();var $this=$(this),$multicheck=$this.closest(".cmb-td").find("input[type=checkbox]:not([disabled])"),$toggled=!$this.data("checked");$multicheck.prop("checked",$toggled).trigger("change"),$this.data("checked",$toggled)},cmb.handleMedia=function(evt){evt.preventDefault();var $el=$(this);cmb.attach_id=!$el.hasClass("cmb2-upload-list")&&$el.closest(".cmb-td").find(".cmb2-upload-file-id").val(),cmb.attach_id="0"!==cmb.attach_id&&cmb.attach_id,cmb.handleFieldMedia($el.prev("input.cmb2-upload-file"),$el.hasClass("cmb2-upload-list"))},cmb.handleFileClick=function(evt){if(!$(evt.target).is("a")){evt.preventDefault();var $el=$(this),$td=$el.closest(".cmb-td"),isList=$td.find(".cmb2-upload-button").hasClass("cmb2-upload-list");cmb.attach_id=isList?$el.find('input[type="hidden"]').data("id"):$td.find(".cmb2-upload-file-id").val(),cmb.attach_id&&cmb.handleFieldMedia($td.find("input.cmb2-upload-file"),isList)}},cmb._handleMedia=function(id,isList){return cmb.handleFieldMedia($id(id),isList)},cmb.handleFieldMedia=function($field,isList){if(wp){var media,handlers,id=$field.attr("id"),fieldData=$field.data(),uid=fieldData.mediaid;if(uid||(uid=_.uniqueId(),$field.attr("data-mediaid",uid).data("mediaid",uid),fieldData.mediaid=uid),handlers=cmb.mediaHandlers,(media=cmb.media).mediaid=uid,media.field=id,media.$field=$field,media.fieldData=fieldData,media.previewSize=media.fieldData.previewsize,media.sizeName=media.fieldData.sizename,media.fieldName=$field.attr("name"),media.isList=isList,uid in media.frames)return media.frames[uid].open();media.frames[uid]=wp.media({title:cmb.metabox().find('label[for="'+id+'"]').text(),library:media.fieldData.queryargs||{},button:{text:l10n.strings[isList?"upload_files":"upload_file"]},multiple:!!isList&&"add"}),media.frames[uid].states.first().set("filterable","all"),cmb.trigger("cmb_media_modal_init",media),handlers.list=function(selection,returnIt){var attachmentHtml,fileGroup=[];if(handlers.list.templates||(handlers.list.templates={image:wp.template("cmb2-list-image"),file:wp.template("cmb2-list-file")}),selection.each(function(attachment){attachmentHtml=handlers.getAttachmentHtml(attachment,"list"),fileGroup.push(attachmentHtml)}),returnIt)return fileGroup;media.$field.siblings(".cmb2-media-status").append(fileGroup)},handlers.single=function(selection){handlers.single.templates||(handlers.single.templates={image:wp.template("cmb2-single-image"),file:wp.template("cmb2-single-file")});var attachment=selection.first();media.$field.val(attachment.get("url")),media.$field.closest(".cmb-td").find(".cmb2-upload-file-id").val(attachment.get("id"));var attachmentHtml=handlers.getAttachmentHtml(attachment,"single");media.$field.siblings(".cmb2-media-status").slideDown().html(attachmentHtml)},handlers.getAttachmentHtml=function(attachment,templatesId){var isImage="image"===attachment.get("type"),data=handlers.prepareData(attachment,isImage);return handlers[templatesId].templates[isImage?"image":"file"](data)},handlers.prepareData=function(data,image){return image&&handlers.getImageData.call(data,50),(data=data.toJSON()).mediaField=media.field,data.mediaFieldName=media.fieldName,data.stringRemoveImage=l10n.strings.remove_image,data.stringFile=l10n.strings.file,data.stringDownload=l10n.strings.download,data.stringRemoveFile=l10n.strings.remove_file,data},handlers.getImageData=function(fallbackSize){var previewW=media.previewSize[0]||fallbackSize,previewH=media.previewSize[1]||fallbackSize,url=this.get("url"),width=this.get("width"),height=this.get("height"),sizes=this.get("sizes");return sizes&&(sizes[media.sizeName]?(url=sizes[media.sizeName].url,width=sizes[media.sizeName].width,height=sizes[media.sizeName].height):sizes.large&&(url=sizes.large.url,width=sizes.large.width,height=sizes.large.height)),width>previewW&&(height=Math.floor(previewW*height/width),width=previewW),height>previewH&&(width=Math.floor(previewH*width/height),height=previewH),width||(width=previewW),height||(height="svg"===this.get("filename").split(".").pop()?"100%":previewH),this.set("sizeUrl",url),this.set("sizeWidth",width),this.set("sizeHeight",height),this},handlers.selectFile=function(){var selection=media.frames[uid].state().get("selection"),type=isList?"list":"single";cmb.attach_id&&isList?$('[data-id="'+cmb.attach_id+'"]').parents("li").replaceWith(handlers.list(selection,!0)):handlers[type](selection),cmb.trigger("cmb_media_modal_select",selection,media)},handlers.openModal=function(){var attach,selection=media.frames[uid].state().get("selection");cmb.attach_id?((attach=wp.media.attachment(cmb.attach_id)).fetch(),selection.set(attach?[attach]:[])):selection.reset(),cmb.trigger("cmb_media_modal_open",selection,media)},media.frames[uid].on("select",handlers.selectFile).on("open",handlers.openModal),media.frames[uid].open()}},cmb.handleRemoveMedia=function(evt){evt.preventDefault();var $this=$(this);if($this.is(".cmb-attach-list .cmb2-remove-file-button"))return $this.parents(".cmb2-media-item").remove(),!1;var $cell=$this.closest(".cmb-td");return cmb.media.$field=$cell.find(".cmb2-upload-file"),cmb.media.field=cmb.media.$field.attr("id"),cmb.media.$field.val(""),$cell.find(".cmb2-upload-file-id").val(""),$this.parents(".cmb2-media-status").html(""),!1},cmb.cleanRow=function($row,prevNum,group){var $elements=$row.find(cmb.repeatUpdate);if(group){var $other=$row.find("[id]").not(cmb.repeatUpdate);$row.find(".cmb-repeat-table .cmb-repeat-row:not(:first-child)").remove(),$other.length&&$other.each(function(){var $_this=$(this),oldID=$_this.attr("id"),newID=oldID.replace("_"+prevNum,"_"+cmb.idNumber),$buttons=$row.find('[data-selector="'+oldID+'"]');$_this.attr("id",newID),$buttons.length&&$buttons.attr("data-selector",newID).data("selector",newID)})}return $elements.filter(":checked").removeAttr("checked"),$elements.find(":checked").removeAttr("checked"),$elements.filter(":selected").removeAttr("selected"),$elements.find(":selected").removeAttr("selected",!1),cmb.resetGroupTitles($row,cmb.idNumber,$row.data("title")),$elements.each(function(){cmb.elReplacements($(this),prevNum,group)}),cmb},cmb.elReplacements=function($newInput,prevNum,group){var newID,oldID,oldFor=$newInput.attr("for"),oldVal=$newInput.val(),type=$newInput.prop("type"),defVal=cmb.getFieldArg($newInput,"default"),newVal=void 0!==defVal&&!1!==defVal?defVal:"",tagName=$newInput.prop("tagName"),checkable=("radio"===type||"checkbox"===type)&&oldVal,attrs={};if(oldFor)attrs={for:oldFor.replace("_"+prevNum,"_"+cmb.idNumber)};else{var newName,oldName=$newInput.attr("name");oldID=$newInput.attr("id"),group?(newName=oldName?oldName.replace("["+prevNum+"][","["+cmb.idNumber+"]["):"",newID=oldID?oldID.replace("_"+prevNum+"_","_"+cmb.idNumber+"_"):""):(newName=oldName?cmb.replaceLast(oldName,"["+prevNum+"]","["+cmb.idNumber+"]"):"",newID=oldID?cmb.replaceLast(oldID,"_"+prevNum,"_"+cmb.idNumber):""),attrs={id:newID,name:newName}}if("TEXTAREA"===tagName&&$newInput.html(newVal),"SELECT"===tagName&&void 0!==defVal){var $toSelect=$newInput.find('[value="'+defVal+'"]');$toSelect.length&&$toSelect.attr("selected","selected").prop("selected","selected")}return checkable&&($newInput.removeAttr("checked"),void 0!==defVal&&oldVal===defVal&&$newInput.attr("checked","checked").prop("checked","checked")),!group&&$newInput[0].hasAttribute("data-iterator")&&(attrs["data-iterator"]=cmb.idNumber),$newInput.removeClass("hasDatepicker").val(checkable||newVal).attr(attrs),$newInput},cmb.newRowHousekeeping=function($row){var $colorPicker=$row.find(".wp-picker-container"),$list=$row.find(".cmb2-media-status");return $colorPicker.length&&$colorPicker.each(function(){var $td=$(this).parent();$td.html($td.find('input[type="text"].cmb2-colorpicker').attr("style",""))}),$list.length&&$list.empty(),cmb},cmb.afterRowInsert=function($row){cmb.initPickers($row.find('input[type="text"].cmb2-timepicker'),$row.find('input[type="text"].cmb2-datepicker'),$row.find('input[type="text"].cmb2-colorpicker'))},cmb.updateNameAttr=function($el,prevIterator,newIterator){var name=$el.attr("name");if(void 0!==name){var isFileList=$el.attr("id").indexOf("filelist"),from=isFileList?"["+prevIterator+"][":"["+prevIterator+"]",to=isFileList?"["+newIterator+"][":"["+newIterator+"]",newName=name.replace(from,to);$el.attr("name",newName)}},cmb.emptyValue=function(evt,row){$(cmb.noEmpty,row).val("")},cmb.setDefaults=function(evt,row){$(cmb.noEmpty,row).each(function(){var $el=$(this),defVal=cmb.getFieldArg($el,"default");void 0!==defVal&&!1!==defVal&&$el.val(defVal)})},cmb.addGroupRow=function(evt){evt.preventDefault();var $this=$(this);cmb.triggerElement($this,"cmb2_add_group_row_start",$this);var $table=$id($this.data("selector")),$oldRow=$table.find(".cmb-repeatable-grouping").last(),prevNum=parseInt($oldRow.data("iterator"),10);cmb.idNumber=parseInt(prevNum,10)+1;for(var $row=$oldRow.clone(),nodeName=$row.prop("nodeName")||"div";$table.find('.cmb-repeatable-grouping[data-iterator="'+cmb.idNumber+'"]').length>0;)cmb.idNumber++;cmb.newRowHousekeeping($row.data("title",$this.data("grouptitle"))).cleanRow($row,prevNum,!0),$row.find(".cmb-add-row-button").prop("disabled",!1);var $newRow=$("<"+nodeName+' id="'+getRowId($oldRow.attr("id"),cmb.idNumber)+'" class="postbox cmb-row cmb-repeatable-grouping" data-iterator="'+cmb.idNumber+'">'+$row.html()+"</"+nodeName+">");$oldRow.after($newRow),cmb.afterRowInsert($newRow),cmb.makeRepeatableSortable($newRow),cmb.triggerElement($table,{type:"cmb2_add_row",group:!0},$newRow)},cmb.addAjaxRow=function(evt){evt.preventDefault();var $this=$(this),$table=$id($this.data("selector")),$row=$table.find(".empty-row"),prevNum=parseInt($row.find("[data-iterator]").data("iterator"),10);cmb.idNumber=parseInt(prevNum,10)+1;var $emptyrow=$row.clone();cmb.newRowHousekeeping($emptyrow).cleanRow($emptyrow,prevNum),$row.removeClass("empty-row hidden").addClass("cmb-repeat-row"),$row.after($emptyrow),cmb.afterRowInsert($emptyrow),cmb.triggerElement($table,{type:"cmb2_add_row",group:!1},$emptyrow,$row)},cmb.removeGroupRow=function(evt){evt.preventDefault();var $this=$(this),confirmation=$this.data("confirm");if(cmb.resetRow.resetting||!confirmation||window.confirm(confirmation)){var $table=$id($this.data("selector")),$parent=$this.parents(".cmb-repeatable-grouping");if($table.find(".cmb-repeatable-grouping").length<2)return cmb.resetRow($parent.parents(".cmb-repeatable-group").find(".cmb-add-group-row"),$this);cmb.triggerElement($table,"cmb2_remove_group_row_start",$this),$parent.remove(),cmb.triggerElement($table,{type:"cmb2_remove_row",group:!0})}},cmb.removeAjaxRow=function(evt){evt.preventDefault();var $this=$(this);if(!$this.hasClass("button-disabled")){var $parent=$this.parents(".cmb-row"),$table=$this.parents(".cmb-repeat-table");if($table.find(".cmb-row").length<=2)return cmb.resetRow($parent.find(".cmb-add-row-button"),$this);$parent.hasClass("empty-row")&&$parent.prev().addClass("empty-row").removeClass("cmb-repeat-row"),$this.parents(".cmb-repeat-table .cmb-row").remove(),cmb.triggerElement($table,{type:"cmb2_remove_row",group:!1})}},cmb.resetRow=function($addNewBtn,$removeBtn){cmb.resetRow.resetting=!0,$addNewBtn.trigger("click"),$removeBtn.trigger("click"),cmb.resetRow.resetting=!1},cmb.shiftRows=function(evt){evt.preventDefault();var $this=$(this),moveUp=!!$this.hasClass("move-up"),$from=$this.parents(".cmb-repeatable-grouping"),$goto=$from[moveUp?"prev":"next"](".cmb-repeatable-grouping");if(cmb.triggerElement($this,"cmb2_shift_rows_enter",$this,$from,$goto),$goto.length){cmb.triggerElement($this,"cmb2_shift_rows_start",$this,$from,$goto);var fromIterator=$from.attr("data-iterator"),toIterator=$goto.attr("data-iterator");$from.find(cmb.repeatEls).each(function(){cmb.updateNameAttr($(this),fromIterator,toIterator)}),$goto.find(cmb.repeatEls).each(function(){cmb.updateNameAttr($(this),toIterator,fromIterator)});var groupTitle=$this.parents(".cmb-repeatable-group").find("[data-grouptitle]").data("grouptitle");groupTitle&&(cmb.resetGroupTitles($from,toIterator,groupTitle),cmb.resetGroupTitles($goto,fromIterator,groupTitle)),$from.data("iterator",toIterator),$from.attr("data-iterator",toIterator),$goto.data("iterator",fromIterator),$goto.attr("data-iterator",fromIterator),$goto[moveUp?"before":"after"]($from),$([document.documentElement,document.body]).animate({scrollTop:$from.offset().top-50},300),cmb.triggerElement($this,"cmb2_shift_rows_complete",$this,$from,$goto)}},cmb.initPickers=function($timePickers,$datePickers,$colorPickers){cmb.trigger("cmb_init_pickers",{time:$timePickers,date:$datePickers,color:$colorPickers}),cmb.initDateTimePickers($timePickers,"timepicker","time_picker"),cmb.initDateTimePickers($datePickers,"datepicker","date_picker"),cmb.initColorPickers($colorPickers)},cmb.initDateTimePickers=function($selector,method,defaultKey){$selector.length&&$selector[method]("destroy").each(function(){var $this=$(this),fieldOpts=$this.data(method)||{},options=$.extend({},cmb.defaults[defaultKey],fieldOpts);$this[method](cmb.datePickerSetupOpts(fieldOpts,options,method))})},cmb.datePickerSetupOpts=function(fieldOpts,options,method){var existing=$.extend({},options);return options.beforeShow=function(input,inst){"timepicker"===method&&cmb.addTimePickerClasses(inst.dpDiv),$id("ui-datepicker-div").addClass("cmb2-element"),"function"==typeof existing.beforeShow&&existing.beforeShow(input,inst)},"timepicker"===method&&(options.onChangeMonthYear=function(year,month,inst,picker){cmb.addTimePickerClasses(inst.dpDiv),"function"==typeof existing.onChangeMonthYear&&existing.onChangeMonthYear(year,month,inst,picker)}),options.onClose=function(dateText,inst){var $picker=$id("ui-datepicker-div").removeClass("cmb2-element").hide();"timepicker"!==method||$(inst.input).val()||inst.input.val($picker.find(".ui_tpicker_time").text()),"function"==typeof existing.onClose&&existing.onClose(dateText,inst)},options},cmb.addTimePickerClasses=function($picker){var func=cmb.addTimePickerClasses;func.count=func.count||0,setTimeout(function(){$picker.find(".ui-priority-secondary").length?($picker.find(".ui-priority-secondary").addClass("button-secondary"),$picker.find(".ui-priority-primary").addClass("button-primary"),func.count=0):func.count<5&&(func.count++,func($picker))},10)},cmb.initColorPickers=function($selector){$selector.length&&("object"==typeof jQuery.wp&&"function"==typeof jQuery.wp.wpColorPicker?$selector.each(function(){var $this=$(this),fieldOpts=$this.data("colorpicker")||{};$this.wpColorPicker($.extend({},cmb.defaults.color_picker,fieldOpts))}):$selector.each(function(i){$(this).after('<div id="picker-'+i+'" style="z-index: 1000; background: #EEE; border: 1px solid #CCC; position: absolute; display: block;"></div>'),$id("picker-"+i).hide().farbtastic($(this))}).focus(function(){$(this).next().show()}).blur(function(){$(this).next().hide()}))},cmb.initCodeEditors=function($selector){cmb.trigger("cmb_init_code_editors",$selector),cmb.defaults.code_editor&&wp&&wp.codeEditor&&$selector.length&&$selector.each(function(){wp.codeEditor.initialize(this.id,cmb.codeEditorArgs($(this).data("codeeditor")))})},cmb.codeEditorArgs=function(overrides){var props=["codemirror","csslint","jshint","htmlhint"],args=$.extend({},cmb.defaults.code_editor);overrides=overrides||{};for(var i=props.length-1;i>=0;i--)overrides.hasOwnProperty(props[i])&&(args[props[i]]=$.extend({},args[props[i]]||{},overrides[props[i]]));return args},cmb.makeListSortable=function(){var $filelist=cmb.metabox().find(".cmb2-media-status.cmb-attach-list");$filelist.length&&$filelist.sortable({cursor:"move"}).disableSelection()},cmb.makeRepeatableSortable=function($row){var $repeatables=($row||cmb.metabox()).find(".cmb-repeat-table .cmb-field-list");$repeatables.length&&$repeatables.sortable({items:".cmb-repeat-row",cursor:"move",cancel:"input,textarea,button,select,option,.CodeMirror"})},cmb.maybeOembed=function(evt){var $this=$(this);({focusout:function(){setTimeout(function(){cmb.spinner(".cmb2-metabox",!0)},2e3)},keyup:function(){var betw=function(min,max){return evt.which<=max&&evt.which>=min};(betw(48,90)||betw(96,111)||betw(8,9)||187===evt.which||190===evt.which)&&cmb.doAjax($this,evt)},paste:function(){setTimeout(function(){cmb.doAjax($this)},100)}})[evt.type]()},cmb.resizeoEmbeds=function(){cmb.metabox().each(function(){var $this=$(this),$tableWrap=$this.parents(".inside"),isSide=$this.parents(".inner-sidebar").length||$this.parents("#side-sortables").length,isSmall=isSide,isSmallest=!1;if(!$tableWrap.length)return!0;var tableW=$tableWrap.width();cmb.styleBreakPoint>tableW&&(isSmall=!0,isSmallest=cmb.styleBreakPoint-62>tableW);var newWidth=(tableW=isSmall?tableW:Math.round(.82*$tableWrap.width()*.97))-30;if(!isSmall||isSide||isSmallest||(newWidth-=75),newWidth>639)return!0;var $children=$this.find(".cmb-type-oembed .embed-status").children().not(".cmb2-remove-wrapper");if(!$children.length)return!0;$children.each(function(){var $this=$(this),iwidth=$this.width(),iheight=$this.height(),_newWidth=newWidth;$this.parents(".cmb-repeat-row").length&&!isSmall&&(_newWidth=newWidth-91,_newWidth=785>tableW?_newWidth-15:_newWidth);var newHeight=Math.round(_newWidth*iheight/iwidth);$this.width(_newWidth).height(newHeight)})})},cmb.doAjax=function($obj){var oembed_url=$obj.val();if(!(oembed_url.length<6)){var field_id=$obj.attr("id"),$context=$obj.closest(".cmb-td"),$embed_container=$context.find(".embed-status"),$embed_wrap=$context.find(".embed_wrap"),$child_el=$embed_container.find(":first-child"),oembed_width=$embed_container.length&&$child_el.length?$child_el.width():$obj.width();cmb.log("oembed_url",oembed_url,field_id),cmb.spinner($context),$embed_wrap.html(""),setTimeout(function(){$(".cmb2-oembed:focus").val()===oembed_url&&$.ajax({type:"post",dataType:"json",url:l10n.ajaxurl,data:{action:"cmb2_oembed_handler",oembed_url:oembed_url,oembed_width:oembed_width>300?oembed_width:300,field_id:field_id,object_id:$obj.data("objectid"),object_type:$obj.data("objecttype"),cmb2_ajax_nonce:l10n.ajax_nonce},success:function(response){cmb.log(response),cmb.spinner($context,!0),$embed_wrap.html(response.data)}})},500)}},cmb.metabox=function(){return cmb.$metabox||(cmb.$metabox=$(".cmb2-wrap > .cmb2-metabox")),cmb.$metabox},cmb.spinner=function($context,hide){var m=hide?"removeClass":"addClass";$(".cmb-spinner",$context)[m]("is-active")},cmb.trigger=function(evtName){var args=Array.prototype.slice.call(arguments,1);args.push(cmb),$document.trigger(evtName,args)},cmb.triggerElement=function($el,evtName){var args=Array.prototype.slice.call(arguments,2);args.push(cmb),$el.trigger(evtName,args)},cmb.getFieldArg=function(hash,arg){return cmb.getField(hash)[arg]},cmb.getFields=function(filterCb){if("function"==typeof filterCb){var fields=[];return $.each(l10n.fields,function(hash,field){filterCb(field,hash)&&fields.push(field)}),fields}return l10n.fields},cmb.getField=function(hash){var field={};if(hash=hash instanceof jQuery?hash.data("hash"):hash)try{if(l10n.fields[hash])throw new Error(hash);cmb.getFields(function(field){if("function"==typeof hash){if(hash(field))throw new Error(field.hash)}else if(field.id&&field.id===hash)throw new Error(field.hash)})}catch(e){field=l10n.fields[e.message]}return field},cmb.log=function(){l10n.script_debug&&console&&"function"==typeof console.log&&console.log.apply(console,arguments)},cmb.replaceLast=function(string,search,replace){var n=string.lastIndexOf(search);return string.slice(0,n)+string.slice(n).replace(search,replace)},$(cmb.init)}(window,document,jQuery,window.CMB2),window.CMB2=window.CMB2||{},window.CMB2.wysiwyg=window.CMB2.wysiwyg||{},function(window,document,$,cmb,wysiwyg){"use strict";var toBeDestroyed=[],toBeInitialized=[],all=wysiwyg.all={};function delayedInit(){0===toBeDestroyed.length?toBeInitialized.forEach(function(toInit){toBeInitialized.splice(toBeInitialized.indexOf(toInit),1),wysiwyg.init.apply(wysiwyg,toInit)}):window.setTimeout(delayedInit,100)}function delayedDestroy(){toBeDestroyed.forEach(function(id){toBeDestroyed.splice(toBeDestroyed.indexOf(id),1),wysiwyg.destroy(id)})}wysiwyg.initAll=function(){var $this,data,initiated;$(".cmb2-wysiwyg-placeholder").each(function(){$this=$(this),(data=$this.data()).groupid&&(data.id=$this.attr("id"),data.name=$this.attr("name"),data.value=$this.val(),wysiwyg.init($this,data,!1),initiated=!0)}),!0===initiated&&(void 0!==window.QTags&&window.QTags._buttonsInit(),$(document).on("cmb2_add_row",wysiwyg.addRow).on("cmb2_remove_group_row_start",wysiwyg.destroyRowEditors).on("cmb2_shift_rows_start",wysiwyg.shiftStart).on("cmb2_shift_rows_complete",wysiwyg.shiftComplete))},wysiwyg.addRow=function(evt,$row){wysiwyg.initRow($row,evt)},wysiwyg.destroyRowEditors=function(evt,$btn){wysiwyg.destroy($btn.parents(".cmb-repeatable-grouping").find(".wp-editor-area").attr("id"))},wysiwyg.shiftStart=function(evt,$btn,$from,$to){$from.add($to).find(".wp-editor-wrap textarea").each(function(){wysiwyg.destroy($(this).attr("id"))})},wysiwyg.shiftComplete=function(evt,$btn,$from,$to){$from.add($to).each(function(){wysiwyg.initRow($(this),evt)})},wysiwyg.initRow=function($row,evt){var $toReplace,data,defVal;$row.find(".cmb2-wysiwyg-inner-wrap").each(function(){$toReplace=$(this),data=$toReplace.data(),defVal=void 0!==(defVal=cmb.getFieldArg(data.hash,"default",""))&&!1!==defVal?defVal:"",data.iterator=$row.data("iterator"),data.fieldid=data.id,data.id=data.groupid+"_"+data.iterator+"_"+data.fieldid,data.name=data.groupid+"["+data.iterator+"]["+data.fieldid+"]",data.value="cmb2_add_row"!==evt.type&&$toReplace.find(".wp-editor-area").length?$toReplace.find(".wp-editor-area").val():defVal,0===toBeDestroyed.length?wysiwyg.init($toReplace,data):(toBeInitialized.push([$toReplace,data]),window.setTimeout(delayedInit,100))})},wysiwyg.init=function($toReplace,data,buttonsInit){if(!data.groupid)return!1;var mceActive=cmb.canTinyMCE(),qtActive="function"==typeof window.quicktags;$.extend(data,function(data){var groupid=data.groupid,fieldid=data.fieldid;return all[groupid]&&all[groupid][fieldid]||(all[groupid]=all[groupid]||{},all[groupid][fieldid]={template:wp.template("cmb2-wysiwyg-"+groupid+"-"+fieldid),defaults:{mce:$.extend({},tinyMCEPreInit.mceInit["cmb2_i_"+groupid+fieldid]),qt:$.extend({},tinyMCEPreInit.qtInit["cmb2_i_"+groupid+fieldid])}},delete tinyMCEPreInit.mceInit["cmb2_i_"+groupid+fieldid],delete tinyMCEPreInit.qtInit["cmb2_i_"+groupid+fieldid]),all[groupid][fieldid]}(data)),function(options){var prop,newSettings,newQTS,nameRegex=new RegExp("cmb2_n_"+options.groupid+options.fieldid,"g"),idRegex=new RegExp("cmb2_i_"+options.groupid+options.fieldid,"g");if(void 0===tinyMCEPreInit.mceInit[options.id]){for(prop in newSettings=$.extend({},options.defaults.mce))"string"==typeof newSettings[prop]&&(newSettings[prop]=newSettings[prop].replace(idRegex,options.id).replace(nameRegex,options.name));tinyMCEPreInit.mceInit[options.id]=newSettings}if(void 0===tinyMCEPreInit.qtInit[options.id]){for(prop in newQTS=$.extend({},options.defaults.qt))"string"==typeof newQTS[prop]&&(newQTS[prop]=newQTS[prop].replace(idRegex,options.id).replace(nameRegex,options.name));tinyMCEPreInit.qtInit[options.id]=newQTS}}(data),$toReplace.replaceWith(data.template(data)),mceActive&&window.tinyMCE.init(tinyMCEPreInit.mceInit[data.id]),qtActive&&window.quicktags(tinyMCEPreInit.qtInit[data.id]),mceActive&&$(document.getElementById(data.id)).parents(".wp-editor-wrap").removeClass("html-active").addClass("tmce-active"),!1!==buttonsInit&&void 0!==window.QTags&&window.QTags._buttonsInit()},wysiwyg.destroy=function(id){if(cmb.canTinyMCE()){var editor=tinyMCE.get(id);null!=editor?(editor.destroy(),void 0===tinyMCEPreInit.mceInit[id]&&delete tinyMCEPreInit.mceInit[id],void 0===tinyMCEPreInit.qtInit[id]&&delete tinyMCEPreInit.qtInit[id]):-1===toBeDestroyed.indexOf(id)&&(toBeDestroyed.push(id),window.setTimeout(delayedDestroy,100))}},$(document).on("cmb_init",wysiwyg.initAll)}(window,document,jQuery,window.CMB2,window.CMB2.wysiwyg),window.CMB2=window.CMB2||{},window.CMB2.charcounter=window.CMB2.charcounter||{},function(window,document,$,cmb,counter){"use strict";if(!wp.utils||!wp.utils.WordCounter)return cmb.log("Cannot find wp.utils!");counter.counters={};var counters=counter.counters,wpCounter=new wp.utils.WordCounter;counter.updateCounter=function(field_id){if(!counters.hasOwnProperty(field_id))return null;var instance=counters[field_id],text=instance.editor&&!instance.editor.isHidden()?instance.editor.getContent({format:"raw"}):cmb.$id(field_id).val().trim(),count=wpCounter.count(text,instance.type),exceeded=instance.max&&count>instance.max,val=instance.max?instance.max-count:count;return instance.$el.parents(".cmb2-char-counter-wrap")[exceeded?"addClass":"removeClass"]("cmb2-max-exceeded"),instance.$el.val(val).outerWidth(8*String(val).length+15+"px"),count},counter.instantiate=function($el){var data=$el.data();if(!(data.fieldId in counters)){var instance={$el:$el,max:data.max,type:"words"===data.counterType?"words":"characters_including_spaces",editor:!1};counters[data.fieldId]=instance,counter.updateCounter(data.fieldId)}},counter.initAll=function(){$(".cmb2-char-counter").each(function(){counter.instantiate($(this))})},counter.initWysiwyg=function(evt,editor){editor.id in counters&&(counters[editor.id].editor=editor,editor.on("nodechange keyup",counter.countWysiwyg))},counter.addRow=function(evt,$row){$row.find(".cmb2-char-counter").each(function(){var $this=$(this),field_id=$this.attr("id").replace(/^char-counter-/,"");$this.attr("data-field-id",field_id).data("field-id",field_id),counter.instantiate($this)})},counter.cleanCounters=function(){var field_id,remove=[];for(field_id in counters)document.getElementById(field_id)||remove.push(field_id);remove.length&&_.each(remove,function(field_id){delete counters[field_id]})},counter.countWysiwyg=_.throttle(function(evt){return evt.hasOwnProperty("element")?counter.updateCounter($(evt.element).data("id")):evt.hasOwnProperty("currentTarget")?counter.updateCounter($(evt.currentTarget).data("id")):void 0}),counter.countTextarea=_.throttle(function(evt){counter.updateCounter(evt.currentTarget.id)},400),$(document).on("cmb_init",counter.initAll).on("tinymce-editor-init",counter.initWysiwyg).on("cmb2_add_row",counter.addRow).on("cmb2_remove_row",counter.cleanCounters).on("input keyup",".cmb2-count-chars",counter.countTextarea)}(window,document,jQuery,window.CMB2,window.CMB2.charcounter);PK     ‚ŠU]î	ó®    *  vendor/cmb2/cmb2/.beads/interactions.jsonlnu „[µü¤        {"id":"int-f6186c1fddd8774503e521dfa8b8670e","kind":"field_change","created_at":"2026-05-31T00:00:12.920701Z","actor":"Justin Sternberg","issue_id":"cmb2-g75","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"Pinned wp-env to 2622/2623, updated all 8889 refs, self-starting phptests; verified cold start + 214 tests pass"}}
{"id":"int-f05369fcf819c002c87a25c82ac472de","kind":"field_change","created_at":"2026-05-31T00:14:44.983827Z","actor":"Justin Sternberg","issue_id":"cmb2-kr3","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Baseline screenshots/observations captured on WP 6.3.1 + develop; bug confirmed absent on pre-7.0."}}
{"id":"int-afd5b3d83029cda4cf16d048e98c36b2","kind":"field_change","created_at":"2026-05-31T00:31:09.412889Z","actor":"Justin Sternberg","issue_id":"cmb2-oyp","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Bug reproduced on WP 7.0 + develop on both settings and post-edit surfaces; confirmed visually + via computed background-color."}}
{"id":"int-9549a1593d112d2b39bba593ea15d1bd","kind":"field_change","created_at":"2026-05-31T00:34:04.776317Z","actor":"Justin Sternberg","issue_id":"cmb2-tl6","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"qa-1557 branch = develop + PR fix, ready to build."}}
{"id":"int-7f549a6dc21af415f57991c1d16ff278","kind":"field_change","created_at":"2026-05-31T00:34:30.301373Z","actor":"Justin Sternberg","issue_id":"cmb2-8ww","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"npm run build:css clean; compiled CSS across all variants carries the :not(checkbox/radio):focus rule + fresh banner."}}
{"id":"int-821e7108d8898d670ccfefa51b97fce6","kind":"field_change","created_at":"2026-05-31T00:37:37.67524Z","actor":"Justin Sternberg","issue_id":"cmb2-6j0","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"PR :not() fix verified on WP 7.0, both surfaces, via focus-independent CSSOM matches() check + computed style."}}
{"id":"int-9a1a03859bd9b3d391abfef7cbad5ecc","kind":"field_change","created_at":"2026-05-31T00:39:28.329499Z","actor":"Justin Sternberg","issue_id":"cmb2-7ku","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"No back-compat regression on 6.3.1 with the :not() fix; checkbox/radio indicators (::before) unaffected, text tint preserved."}}
{"id":"int-0399e8dc4cc2eabb55268aadbe84dd8d","kind":"field_change","created_at":"2026-05-31T00:40:54.575881Z","actor":"Justin Sternberg","issue_id":"cmb2-ec8","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Option B (full removal of focus-background rule) implemented and built; #fffff8 gone from all compiled CSS."}}
{"id":"int-acef19ce9398e511d870cd408bb4608a","kind":"field_change","created_at":"2026-05-31T00:43:35.529154Z","actor":"Justin Sternberg","issue_id":"cmb2-8at","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Option B verified across 6.3.1 + 7.0 (both surfaces): fixes bug on 7.0, no regression on 6.3.1, intended text-tint removal only."}}
{"id":"int-e2ce899d2f9c0628d914c2dc721064bf","kind":"field_change","created_at":"2026-05-31T00:56:22.447965Z","actor":"Justin Sternberg","issue_id":"cmb2-vr3","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"PR #1557 force-updated to clean Option B commit; title/description/QA-comment posted; awaiting merge."}}
{"id":"int-b0d259257f751a7cc46d807c8171e59f","kind":"field_change","created_at":"2026-05-31T00:56:22.609131Z","actor":"Justin Sternberg","issue_id":"cmb2-14j","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"QA epic complete: bug reproduced + Option B fix verified on WP 7.0 and 6.3.1 (both surfaces); PR #1557 finalized with Option B."}}
{"id":"int-609ac7c3963b63f52c482951e37a77cf","kind":"field_change","created_at":"2026-05-31T01:13:10.673448Z","actor":"Justin Sternberg","issue_id":"cmb2-do9","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Migrated wp-env off deprecated env/testsPort/testsEnvironment: dev env in .wp-env.json (2622, testsEnvironment:false) + isolated tests env in new .wp-env-tests.json (2623) via --config. Updated phptests (runs in cli container now, no tests-cli), env:tests:* scripts, Playwright webServer, CI test.yml, CLAUDE.md, playwright README. Verified: no deprecation warning, phpunit 214 pass, Playwright plugin+metabox specs pass."}}
{"id":"int-fa30a19689a3cc8554fe4ffdb54845b6","kind":"field_change","created_at":"2026-05-31T01:28:09.672662Z","actor":"Justin Sternberg","issue_id":"cmb2-0sq","extra":{"field":"status","new_value":"in_progress","old_value":"open"}}
{"id":"int-a18293201847231d3c19f8ee5825a9be","kind":"field_change","created_at":"2026-05-31T01:34:39.67677Z","actor":"Justin Sternberg","issue_id":"cmb2-cfj","extra":{"field":"status","new_value":"in_progress","old_value":"open"}}
{"id":"int-bbff1f9ac7c003e0a91ee801fe7f5330","kind":"field_change","created_at":"2026-05-31T01:37:06.473028Z","actor":"Justin Sternberg","issue_id":"cmb2-0sq","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Set WP_DEBUG=true + WP_DEBUG_DISPLAY=false in .wp-env-tests.json: logs PHP deprecations without rendering into pages (verified visual suite stable). aec1d71"}}
{"id":"int-6539bee7eabbcfa7c726d8833ca65a10","kind":"field_change","created_at":"2026-05-31T01:37:06.622781Z","actor":"Justin Sternberg","issue_id":"cmb2-cfj","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Simplified Playwright webServer command to 'npm run env:tests:start'; removed dead CI echo branch. aec1d71"}}
{"id":"int-34391301c83184ac337692c0e67e01a9","kind":"field_change","created_at":"2026-05-31T02:04:33.067846Z","actor":"Justin Sternberg","issue_id":"cmb2-cz6","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Re-scoped Mobile/Tablet visual tests from fullPage post-new.php screenshots to the opened #cmb2_integration_tests_default_closed metabox element at 375px/768px viewports. Local baselines regenerated (mobile 353x230, tablet 746x193 â€” fields reflow captured); full visual suite passes deterministically across 2 consecutive runs. Committed to develop 74551bc (no PR). No CI impact (suite is CI-skipped)."}}
PK     ‚ŠU]“ùC+t
  t
  #  vendor/cmb2/cmb2/.beads/config.yamlnu „[µü¤        # Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags

# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""

# Use no-db mode: JSONL-only, no Dolt database
# When true, .beads/issues.jsonl is the only local store
# no-db: false

# Enable JSON output by default
# json: false

# Feedback title formatting for mutating commands (create/update/close/dep/edit)
# 0 = hide titles, N > 0 = truncate to N characters
# output:
#   title-length: 255

# Default actor for audit trails (overridden by BEADS_ACTOR or --actor)
# actor: ""

# Export events (audit trail) to .beads/events.jsonl on each flush/sync
# When enabled, new events are appended incrementally using a high-water mark.
# Use 'bd export --events' to trigger manually regardless of this setting.
# events-export: false

# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct database
# repos:
#   primary: "."  # Primary repo (where this database lives)
#   additional:   # Additional repos to hydrate from (read-only)
#     - ~/beads-planning  # Personal planning repo
#     - ~/work-planning   # Work planning repo

# Dolt-native backup (periodic backup for off-machine recovery)
# This is full database backup only. Cross-machine sync uses Dolt remotes.
# backup:
#   enabled: false     # Disable auto-backup entirely
#   interval: 15m      # Minimum time between auto-backups
#   git-push: false    # Disable git push (backup locally only)
#   git-repo: ""       # Separate git repo for backups (default: project repo)

# Optional JSONL auto-export for viewers, interchange, and issue-level migration.
# Disabled by default; enable only when an integration needs fresh .beads/issues.jsonl.
# Use relative paths under .beads/ for JSONL import/export filenames.
# export:
#   auto: false
#   path: issues.jsonl
#   interval: 60s
#   git-add: false
# import:
#   path: issues.jsonl

# Integration settings (access with 'bd config get/set')
# Non-secret keys (stored in the database):
# - jira.url, jira.project
# - linear.team_id
# - github.org, github.repo
#
# Secret keys (stored in this file but prefer env vars to avoid git exposure):
# - linear.api_key  â†’ use LINEAR_API_KEY env var instead
# - github.token    â†’ use GITHUB_TOKEN env var instead

sync.remote: "git+ssh://git@github.com/CMB2/CMB2.git"PK     ‚ŠU]ñ¬ÈÛ&  &  0  vendor/cmb2/cmb2/.beads/hooks/prepare-commit-msgnu „[µü¤        #!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.5 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
  export BD_GIT_HOOK=1
  _bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
  _bd_used_perl=0
  if command -v timeout >/dev/null 2>&1; then
    timeout "$_bd_timeout" bd hooks run prepare-commit-msg "$@"
    _bd_exit=$?
  elif command -v gtimeout >/dev/null 2>&1; then
    gtimeout "$_bd_timeout" bd hooks run prepare-commit-msg "$@"
    _bd_exit=$?
  elif command -v perl >/dev/null 2>&1; then
    _bd_used_perl=1
    perl -e 'alarm shift; exec @ARGV' "$_bd_timeout" bd hooks run prepare-commit-msg "$@"
    _bd_exit=$?
  else
    echo >&2 "beads: hook 'prepare-commit-msg' running without timeout; install coreutils or perl to enable BEADS_HOOK_TIMEOUT"
    bd hooks run prepare-commit-msg "$@"
    _bd_exit=$?
  fi
  if [ $_bd_exit -eq 124 ] || { [ $_bd_used_perl -eq 1 ] && [ $_bd_exit -eq 142 ]; }; then
    echo >&2 "beads: hook 'prepare-commit-msg' timed out after ${_bd_timeout}s â€” continuing without beads"
    _bd_exit=0
  fi
  if [ $_bd_exit -eq 3 ]; then
    echo >&2 "beads: database not initialized â€” skipping hook 'prepare-commit-msg'"
    _bd_exit=0
  fi
  if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.5 ---
PK     ‚ŠU]ú[{Âî  î  (  vendor/cmb2/cmb2/.beads/hooks/pre-commitnu „[µü¤        #!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.5 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
  export BD_GIT_HOOK=1
  _bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
  _bd_used_perl=0
  if command -v timeout >/dev/null 2>&1; then
    timeout "$_bd_timeout" bd hooks run pre-commit "$@"
    _bd_exit=$?
  elif command -v gtimeout >/dev/null 2>&1; then
    gtimeout "$_bd_timeout" bd hooks run pre-commit "$@"
    _bd_exit=$?
  elif command -v perl >/dev/null 2>&1; then
    _bd_used_perl=1
    perl -e 'alarm shift; exec @ARGV' "$_bd_timeout" bd hooks run pre-commit "$@"
    _bd_exit=$?
  else
    echo >&2 "beads: hook 'pre-commit' running without timeout; install coreutils or perl to enable BEADS_HOOK_TIMEOUT"
    bd hooks run pre-commit "$@"
    _bd_exit=$?
  fi
  if [ $_bd_exit -eq 124 ] || { [ $_bd_used_perl -eq 1 ] && [ $_bd_exit -eq 142 ]; }; then
    echo >&2 "beads: hook 'pre-commit' timed out after ${_bd_timeout}s â€” continuing without beads"
    _bd_exit=0
  fi
  if [ $_bd_exit -eq 3 ]; then
    echo >&2 "beads: database not initialized â€” skipping hook 'pre-commit'"
    _bd_exit=0
  fi
  if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.5 ---
PK     ‚ŠU]¢cü    +  vendor/cmb2/cmb2/.beads/hooks/post-checkoutnu „[µü¤        #!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.5 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
  export BD_GIT_HOOK=1
  _bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
  _bd_used_perl=0
  if command -v timeout >/dev/null 2>&1; then
    timeout "$_bd_timeout" bd hooks run post-checkout "$@"
    _bd_exit=$?
  elif command -v gtimeout >/dev/null 2>&1; then
    gtimeout "$_bd_timeout" bd hooks run post-checkout "$@"
    _bd_exit=$?
  elif command -v perl >/dev/null 2>&1; then
    _bd_used_perl=1
    perl -e 'alarm shift; exec @ARGV' "$_bd_timeout" bd hooks run post-checkout "$@"
    _bd_exit=$?
  else
    echo >&2 "beads: hook 'post-checkout' running without timeout; install coreutils or perl to enable BEADS_HOOK_TIMEOUT"
    bd hooks run post-checkout "$@"
    _bd_exit=$?
  fi
  if [ $_bd_exit -eq 124 ] || { [ $_bd_used_perl -eq 1 ] && [ $_bd_exit -eq 142 ]; }; then
    echo >&2 "beads: hook 'post-checkout' timed out after ${_bd_timeout}s â€” continuing without beads"
    _bd_exit=0
  fi
  if [ $_bd_exit -eq 3 ]; then
    echo >&2 "beads: database not initialized â€” skipping hook 'post-checkout'"
    _bd_exit=0
  fi
  if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.5 ---
PK     ‚ŠU]]4ïî  î  (  vendor/cmb2/cmb2/.beads/hooks/post-mergenu „[µü¤        #!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.5 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
  export BD_GIT_HOOK=1
  _bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
  _bd_used_perl=0
  if command -v timeout >/dev/null 2>&1; then
    timeout "$_bd_timeout" bd hooks run post-merge "$@"
    _bd_exit=$?
  elif command -v gtimeout >/dev/null 2>&1; then
    gtimeout "$_bd_timeout" bd hooks run post-merge "$@"
    _bd_exit=$?
  elif command -v perl >/dev/null 2>&1; then
    _bd_used_perl=1
    perl -e 'alarm shift; exec @ARGV' "$_bd_timeout" bd hooks run post-merge "$@"
    _bd_exit=$?
  else
    echo >&2 "beads: hook 'post-merge' running without timeout; install coreutils or perl to enable BEADS_HOOK_TIMEOUT"
    bd hooks run post-merge "$@"
    _bd_exit=$?
  fi
  if [ $_bd_exit -eq 124 ] || { [ $_bd_used_perl -eq 1 ] && [ $_bd_exit -eq 142 ]; }; then
    echo >&2 "beads: hook 'post-merge' timed out after ${_bd_timeout}s â€” continuing without beads"
    _bd_exit=0
  fi
  if [ $_bd_exit -eq 3 ]; then
    echo >&2 "beads: database not initialized â€” skipping hook 'post-merge'"
    _bd_exit=0
  fi
  if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.5 ---
PK     ‚ŠU]·R¯à  à  &  vendor/cmb2/cmb2/.beads/hooks/pre-pushnu „[µü¤        #!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.5 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
  export BD_GIT_HOOK=1
  _bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
  _bd_used_perl=0
  if command -v timeout >/dev/null 2>&1; then
    timeout "$_bd_timeout" bd hooks run pre-push "$@"
    _bd_exit=$?
  elif command -v gtimeout >/dev/null 2>&1; then
    gtimeout "$_bd_timeout" bd hooks run pre-push "$@"
    _bd_exit=$?
  elif command -v perl >/dev/null 2>&1; then
    _bd_used_perl=1
    perl -e 'alarm shift; exec @ARGV' "$_bd_timeout" bd hooks run pre-push "$@"
    _bd_exit=$?
  else
    echo >&2 "beads: hook 'pre-push' running without timeout; install coreutils or perl to enable BEADS_HOOK_TIMEOUT"
    bd hooks run pre-push "$@"
    _bd_exit=$?
  fi
  if [ $_bd_exit -eq 124 ] || { [ $_bd_used_perl -eq 1 ] && [ $_bd_exit -eq 142 ]; }; then
    echo >&2 "beads: hook 'pre-push' timed out after ${_bd_timeout}s â€” continuing without beads"
    _bd_exit=0
  fi
  if [ $_bd_exit -eq 3 ]; then
    echo >&2 "beads: database not initialized â€” skipping hook 'pre-push'"
    _bd_exit=0
  fi
  if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.5 ---
PK     ‚ŠU]›�ã±»   »   %  vendor/cmb2/cmb2/.beads/metadata.jsonnu „[µü¤        {
  "database": "dolt",
  "backend": "dolt",
  "dolt_mode": "server",
  "dolt_server_port": 3308,
  "dolt_database": "beads_cmb2",
  "project_id": "0ab5e157-ff0a-4c5d-8948-2d6166a6d85b"
}PK     ‚ŠU]ŽNFÞÏ  Ï  $  vendor/cmb2/cmb2/.beads/issues.jsonlnu „[µü¤        {"_type":"issue","id":"cmb2-u2a","title":"Harden #[AllowDynamicProperties] coverage across CMB2 class roots","description":"The PHP 8.2+ dynamic-property deprecation fix shipped only on the CMB2 class (a leaf), leaving CMB2_Field, all CMB2_Type_* field types, and all CMB2_Display_* classes still emitting deprecations when user code/extensions assign undeclared properties (CMB2's most common customization idiom). None of these classes define __set, so the deprecation fires. Not a regression (2.11.0 had zero coverage) but incomplete. Fix: place #[AllowDynamicProperties] on the extension-surface roots (CMB2_Base covers CMB2 + CMB2_Field via inheritance; CMB2_Type_Base; CMB2_Field_Display) and remove the now-redundant leaf attribute on CMB2. Parsed as a harmless # comment on PHP 7.4-7.x.","status":"closed","priority":1,"issue_type":"task","owner":"justin@dsgnwrks.pro","created_at":"2026-05-30T18:02:19Z","created_by":"Justin Sternberg","updated_at":"2026-05-30T18:13:36Z","started_at":"2026-05-30T18:02:24Z","closed_at":"2026-05-30T18:13:36Z","close_reason":"Widened #[AllowDynamicProperties] to CMB2_Base, CMB2_Type_Base, CMB2_Field_Display; pushed in f372385","dependency_count":0,"dependent_count":0,"comment_count":0}
PK     ‚ŠU]ªo¬/
  
  $  vendor/cmb2/cmb2/tools/phpcs/run.phpnu „[µü¤        <?php
/**
 * Ensure the isolated PHPCS toolchain is installed, then run phpcs or phpcbf.
 *
 * Backs the `composer phpcs` / `composer phpcbf` scripts so a fresh checkout
 * works in one command: if tools/phpcs/vendor is missing, it is installed on
 * demand. Unlike the post-install hook (maybe-install.php), an explicit phpcs
 * invocation on PHP < 8.2 errors clearly rather than skipping â€” the caller
 * asked to lint, so a confusing skip would be worse than an honest failure.
 *
 * Usage (via composer): composer phpcs | composer phpcbf
 *
 * @package CMB2
 */

$tool = $argv[1] ?? 'phpcs';
if ( ! in_array( $tool, array( 'phpcs', 'phpcbf' ), true ) ) {
	fwrite( STDERR, "usage: run.php phpcs|phpcbf\n" );
	exit( 2 );
}

if ( PHP_VERSION_ID < 80200 ) {
	fwrite( STDERR, 'phpcs requires PHP 8.2+ (the ruleset uses sniffers that need it); you are on ' . PHP_VERSION . ".\n" );
	exit( 1 );
}

$bin = __DIR__ . '/vendor/bin/' . $tool;

if ( ! is_file( $bin ) ) {
	$composer = getenv( 'COMPOSER_BINARY' );
	if ( ! $composer ) {
		fwrite( STDERR, "phpcs: tooling not installed and composer binary not detected. Run `composer phpcs:install`.\n" );
		exit( 1 );
	}

	fwrite( STDERR, "phpcs: tooling not installed; installing in tools/phpcs ...\n" );
	$install = escapeshellarg( PHP_BINARY )
		. ' ' . escapeshellarg( $composer )
		. ' install --working-dir=' . escapeshellarg( __DIR__ )
		. ' --no-interaction --no-progress';
	passthru( $install, $install_code );

	if ( 0 !== $install_code || ! is_file( $bin ) ) {
		fwrite( STDERR, "phpcs: tooling install failed.\n" );
		exit( $install_code ?: 1 );
	}
}

// Run from the repo root so the .phpcs.xml.dist and includes/ init.php paths resolve.
passthru( escapeshellarg( $bin ) . ' --standard=.phpcs.xml.dist includes/ init.php', $code );
exit( $code );
PK     ‚ŠU]�õoP      .  vendor/cmb2/cmb2/tools/phpcs/maybe-install.phpnu „[µü¤        <?php
/**
 * Auto-install the isolated PHPCS toolchain after a root `composer install`.
 *
 * Wired to root composer.json post-install-cmd / post-update-cmd. It is GUARDED
 * so it never runs during the PHPUnit CI matrix:
 *
 *   - Skips on PHP < 8.2. The toolchain pulls fig-r/psr2r-sniffer ->
 *     spryker/code-sniffer, which requires PHP 8.2+. Running it on the
 *     7.4/8.0/8.1 test legs would fail `composer install` (the exact bug this
 *     setup avoids â€” see commit history around composer.lock removal).
 *   - Skips when CI is set. CI installs the toolchain explicitly in the PHPCS
 *     job (.github/workflows/phpcs.yml), so it must stay out of the test matrix.
 *
 * The install is best-effort: this script always exits 0 so a phpcs tooling
 * hiccup never fails the developer's root `composer install`.
 *
 * @package CMB2
 */

if ( PHP_VERSION_ID < 80200 || getenv( 'CI' ) ) {
	echo "phpcs: skipping tools/phpcs auto-install (needs PHP 8.2+, skipped in CI). Run `composer phpcs:install` manually if needed.\n";
	exit( 0 );
}

$composer = getenv( 'COMPOSER_BINARY' );
if ( ! $composer ) {
	echo "phpcs: COMPOSER_BINARY not set; run `composer phpcs:install` to set up linting.\n";
	exit( 0 );
}

echo "phpcs: installing isolated toolchain in tools/phpcs ...\n";

$cmd = escapeshellarg( PHP_BINARY )
	. ' ' . escapeshellarg( $composer )
	. ' install --working-dir=' . escapeshellarg( __DIR__ )
	. ' --no-interaction --no-progress';

passthru( $cmd );

// Never fail the parent install on a tooling hiccup.
exit( 0 );
PK     ‚ŠU]Ü&Ú-õ  õ  *  vendor/cmb2/cmb2/tools/phpcs/composer.jsonnu „[µü¤        {
	"name": "cmb2/phpcs-tools",
	"description": "Isolated PHP_CodeSniffer toolchain for linting CMB2. Kept out of the root require-dev so the PHPUnit test matrix (PHP 7.4-8.1) is not forced to resolve sniffer packages that require PHP 8.2+ (e.g. spryker/code-sniffer via fig-r/psr2r-sniffer). Installed only by the PHP 8.3 PHPCS CI job.",
	"license": "GPL-2.0-or-later",
	"require": {
		"squizlabs/php_codesniffer": "^3.9",
		"wp-coding-standards/wpcs": "^3.1",
		"phpcompatibility/phpcompatibility-wp": "^2.1",
		"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
		"sirbrillig/phpcs-variable-analysis": "^2.11",
		"fig-r/psr2r-sniffer": "^1.5"
	},
	"config": {
		"allow-plugins": {
			"dealerdirect/phpcodesniffer-composer-installer": true
		}
	}
}
PK     ‚ŠU]í*\è      vendor/cmb2/cmb2/init.phpnu „[µü¤        <?php
/**
 * The initation loader for CMB2, and the main plugin file.
 *
 * @category     WordPress_Plugin
 * @package      CMB2
 * @author       CMB2 team
 * @license      GPL-2.0+
 * @link         https://cmb2.io
 *
 * Plugin Name:  CMB2
 * Plugin URI:   https://github.com/CMB2/CMB2
 * Description:  CMB2 will create metaboxes and forms with custom fields that will blow your mind.
 * Author:       CMB2 team
 * Author URI:   https://cmb2.io
 * Contributors: Justin Sternberg (@jtsternberg / dsgnwrks.pro)
 *               WebDevStudios (@webdevstudios / webdevstudios.com)
 *               Human Made (@humanmadeltd / hmn.md)
 *               Jared Atchison (@jaredatch / jaredatchison.com)
 *               Bill Erickson (@billerickson / billerickson.net)
 *               Andrew Norcross (@norcross / andrewnorcross.com)
 *
 * Version:      2.12.0
 *
 * Text Domain:  cmb2
 * Domain Path:  languages
 *
 *
 * Released under the GPL license
 * http://www.opensource.org/licenses/gpl-license.php
 *
 * This is an add-on for WordPress
 * https://wordpress.org/
 *
 * **********************************************************************
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * **********************************************************************
 */

/**
 * *********************************************************************
 *               You should not edit the code below
 *               (or any code in the included files)
 *               or things might explode!
 * ***********************************************************************
 */

if ( ! class_exists( 'CMB2_Bootstrap_2120', false ) ) {

	/**
	 * Handles checking for and loading the newest version of CMB2
	 *
	 * @since  2.0.0
	 *
	 * @category  WordPress_Plugin
	 * @package   CMB2
	 * @author    CMB2 team
	 * @license   GPL-2.0+
	 * @link      https://cmb2.io
	 */
	class CMB2_Bootstrap_2120 {

		/**
		 * Current version number
		 *
		 * @var   string
		 * @since 1.0.0
		 */
		const VERSION = '2.12.0';

		/**
		 * Current version hook priority.
		 * Will decrement with each release
		 *
		 * @var   int
		 * @since 2.0.0
		 */
		const PRIORITY = 9956;

		/**
		 * Single instance of the CMB2_Bootstrap_2120 object
		 *
		 * @var CMB2_Bootstrap_2120
		 */
		public static $single_instance = null;

		/**
		 * Creates/returns the single instance CMB2_Bootstrap_2120 object
		 *
		 * @since  2.0.0
		 * @return CMB2_Bootstrap_2120 Single instance object
		 */
		public static function initiate() {
			if ( null === self::$single_instance ) {
				self::$single_instance = new self();
			}
			return self::$single_instance;
		}

		/**
		 * Starts the version checking process.
		 * Creates CMB2_LOADED definition for early detection by other scripts
		 *
		 * Hooks CMB2 inclusion to the init hook on a high priority which decrements
		 * (increasing the priority) with each version release.
		 *
		 * @since 2.0.0
		 */
		private function __construct() {
			/**
			 * A constant you can use to check if CMB2 is loaded
			 * for your plugins/themes with CMB2 dependency
			 */
			if ( ! defined( 'CMB2_LOADED' ) ) {
				define( 'CMB2_LOADED', self::PRIORITY );
			}

			if ( ! function_exists( 'add_action' ) ) {
				// We are running outside of the context of WordPress.
				return;
			}

			add_action( 'init', array( $this, 'include_cmb' ), self::PRIORITY );
		}

		/**
		 * A final check if CMB2 exists before kicking off our CMB2 loading.
		 * CMB2_VERSION and CMB2_DIR constants are set at this point.
		 *
		 * @since  2.0.0
		 */
		public function include_cmb() {
			if ( class_exists( 'CMB2', false ) ) {
				return;
			}

			if ( ! defined( 'CMB2_VERSION' ) ) {
				define( 'CMB2_VERSION', self::VERSION );
			}

			if ( ! defined( 'CMB2_DIR' ) ) {
				define( 'CMB2_DIR', trailingslashit( __DIR__ ) );
			}

			$this->l10ni18n();

			// Include helper functions.
			require_once CMB2_DIR . 'includes/CMB2_Base.php';
			require_once CMB2_DIR . 'includes/CMB2.php';
			require_once CMB2_DIR . 'includes/helper-functions.php';

			// Now kick off the class autoloader.
			spl_autoload_register( 'cmb2_autoload_classes' );

			// Kick the whole thing off.
			require_once cmb2_dir( 'bootstrap.php' );
			cmb2_bootstrap();
		}

		/**
		 * Registers CMB2 text domain path
		 *
		 * @since  2.0.0
		 */
		public function l10ni18n() {

			$loaded = load_plugin_textdomain( 'cmb2', false, '/languages/' );

			if ( ! $loaded ) {
				$loaded = load_muplugin_textdomain( 'cmb2', '/languages/' );
			}

			if ( ! $loaded ) {
				$loaded = load_theme_textdomain( 'cmb2', get_stylesheet_directory() . '/languages/' );
			}

			if ( ! $loaded ) {
				$locale = apply_filters( 'plugin_locale', function_exists( 'determine_locale' ) ? determine_locale() : get_locale(), 'cmb2' );
				$mofile = __DIR__ . '/languages/cmb2-' . $locale . '.mo';
				load_textdomain( 'cmb2', $mofile );
			}
		}

	}

	// Make it so...
	CMB2_Bootstrap_2120::initiate();

}// End if().
PK     ‚ŠU]â£Š¤  ¤    vendor/cmb2/cmb2/.jshintrcnu „[µü¤        {
	"curly": true,
	"eqeqeq": true,
	"immed": true,
	"latedef": true,
	"newcap": true,
	"noarg": true,
	"sub": true,
	"unused": true,
	"undef": true,
	"boss": true,
	"eqnull": true,
	"globals": {
		"exports": true,
		"module": false
	},
	"predef": [
		"document",
		"window",
		"jQuery",
		"cmb2_l10",
		"wp",
		"tinyMCEPreInit",
		"tinyMCE",
		"console",
		"postboxes",
		"pagenow",
		"QTags",
		"quicktags",
		"_"
	]
}
PK     ‚ŠU]ûxÛ    #  vendor/cmb2/cmb2/.wp-env-tests.jsonnu „[µü¤        {
	"port": 2623,
	"plugins": ["."],
	"testsEnvironment": false,
	"config": {
		"WP_DEBUG": true,
		"WP_DEBUG_DISPLAY": false,
		"SCRIPT_DEBUG": false
	},
	"mappings": {
		"wp-content/mu-plugins/cmb2-test-fields.php": "./tests/playwright/fixtures/test-fields.php"
	}
}
PK     ‚ŠU]™�á{  {    vendor/cmb2/cmb2/bootstrap.phpnu „[µü¤        <?php
/**
 * Bootstraps the CMB2 process
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */

/**
 * Function to encapsulate the CMB2 bootstrap process.
 *
 * @since  2.2.0
 * @return void
 */
function cmb2_bootstrap() {

	if ( is_admin() ) {
		/**
		 * Fires on the admin side when CMB2 is included/loaded.
		 *
		 * In most cases, this should be used to add metaboxes. See example-functions.php
		 */
		do_action( 'cmb2_admin_init' );
	}

	/**
	 * Fires when CMB2 is included/loaded
	 *
	 * Can be used to add metaboxes if needed on the front-end or WP-API (or the front and backend).
	 */
	do_action( 'cmb2_init' );

	/**
	 * For back-compat. Does the dirty-work of instantiating all the
	 * CMB2 instances for the cmb2_meta_boxes filter
	 *
	 * @since  2.0.2
	 */
	$cmb_config_arrays = apply_filters( 'cmb2_meta_boxes', array() );
	foreach ( (array) $cmb_config_arrays as $cmb_config ) {
		new CMB2( $cmb_config );
	}

	/**
	 * Fires after all CMB2 instances are created
	 */
	do_action( 'cmb2_init_before_hookup' );

	/**
	 * Get all created metaboxes, and instantiate CMB2_Hookup
	 * on metaboxes which require it.
	 *
	 * @since  2.0.2
	 */
	foreach ( CMB2_Boxes::get_all() as $cmb ) {

		/**
		 * Initiates the box "hookup" into WordPress.
		 *
		 * Unless the 'hookup' box property is `false`, the box will be hooked in as
		 * a post/user/comment/option/term box.
		 *
		 * And if the 'show_in_rest' box property is set, the box will be hooked
		 * into the CMB2 REST API.
		 *
		 * The dynamic portion of the hook name, $cmb->cmb_id, is the box id.
		 *
		 * @since 2.2.6
		 *
		 * @param array $cmb The CMB2 object to hookup.
		 */
		do_action( "cmb2_init_hookup_{$cmb->cmb_id}", $cmb );
	}

	/**
	 * Fires after CMB2 initiation process has been completed
	 */
	do_action( 'cmb2_after_init' );
}

/* End. That's it, folks! */
PK     ‚ŠU]`P³äe  e  *  vendor/cmb2/cmb2/includes/CMB2_Options.phpnu „[µü¤        <?php
/**
 * CMB2 Utility classes for handling multi-dimensional array data for options
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */

/**
 * Retrieves an instance of CMB2_Option based on the option key
 *
 * @package   CMB2
 * @author    CMB2 team
 */
class CMB2_Options {
	/**
	 * Array of all CMB2_Option instances
	 *
	 * @var   array
	 * @since 1.0.0
	 */
	protected static $option_sets = array();

	public static function get( $option_key ) {

		if ( empty( self::$option_sets ) || empty( self::$option_sets[ $option_key ] ) ) {
			self::$option_sets[ $option_key ] = new CMB2_Option( $option_key );
		}

		return self::$option_sets[ $option_key ];
	}
}

/**
 * Handles getting/setting of values to an option array
 * for a specific option key
 *
 * @package   CMB2
 * @author    CMB2 team
 */
class CMB2_Option {

	/**
	 * Options array
	 *
	 * @var array
	 */
	protected $options = array();

	/**
	 * Current option key
	 *
	 * @var string
	 */
	protected $key = '';

	/**
	 * Initiate option object
	 *
	 * @param string $option_key Option key where data will be saved.
	 *                           Leave empty for temporary data store.
	 * @since 2.0.0
	 */
	public function __construct( $option_key = '' ) {
		$this->key = ! empty( $option_key ) ? $option_key : '';
	}

	/**
	 * Delete the option from the db
	 *
	 * @since  2.0.0
	 * @return mixed Delete success or failure
	 */
	public function delete_option() {
		$deleted = $this->key ? delete_option( $this->key ) : true;
		$this->options = $deleted ? array() : $this->options;
		return $this->options;
	}

	/**
	 * Removes an option from an option array
	 *
	 * @since  1.0.1
	 * @param string $field_id Option array field key.
	 * @param bool   $resave Whether or not to resave.
	 * @return array             Modified options
	 */
	public function remove( $field_id, $resave = false ) {

		$this->get_options();

		if ( isset( $this->options[ $field_id ] ) ) {
			unset( $this->options[ $field_id ] );
		}

		if ( $resave ) {
			$this->set();
		}

		return $this->options;
	}

	/**
	 * Retrieves an option from an option array
	 *
	 * @since  1.0.1
	 * @param string $field_id Option array field key.
	 * @param mixed  $default  Fallback value for the option.
	 * @return array             Requested field or default
	 */
	public function get( $field_id, $default = false ) {
		$opts = $this->get_options();

		if ( 'all' == $field_id ) {
			return $opts;
		} elseif ( array_key_exists( $field_id, $opts ) ) {
			return false !== $opts[ $field_id ] ? $opts[ $field_id ] : $default;
		}

		return $default;
	}

	/**
	 * Updates Option data
	 *
	 * @since  1.0.1
	 * @param string $field_id Option array field key.
	 * @param mixed  $value    Value to update data with.
	 * @param bool   $resave   Whether to re-save the data.
	 * @param bool   $single   Whether data should not be an array.
	 * @return boolean Return status of update.
	 */
	public function update( $field_id, $value = '', $resave = false, $single = true ) {
		$this->get_options();

		if ( true !== $field_id ) {

			if ( ! $single ) {
				// If multiple, add to array.
				$this->options[ $field_id ][] = $value;
			} else {
				$this->options[ $field_id ] = $value;
			}
		}

		if ( $resave || true === $field_id ) {
			return $this->set();
		}

		return true;
	}

	/**
	 * Saves the option array
	 * Needs to be run after finished using remove/update_option
	 *
	 * @uses apply_filters() Calls 'cmb2_override_option_save_{$this->key}' hook
	 * to allow overwriting the option value to be stored.
	 *
	 * @since  1.0.1
	 * @param  array $options Optional options to override.
	 * @return bool           Success/Failure
	 */
	public function set( $options = array() ) {
		if ( ! empty( $options ) || empty( $options ) && empty( $this->key ) ) {
			$this->options = $options;
		}

		$this->options = wp_unslash( $this->options ); // get rid of those evil magic quotes.

		if ( empty( $this->key ) ) {
			return false;
		}

		$test_save = apply_filters( "cmb2_override_option_save_{$this->key}", 'cmb2_no_override_option_save', $this->options, $this );

		if ( 'cmb2_no_override_option_save' !== $test_save ) {
			// If override, do not proceed to update the option, just return result.
			return $test_save;
		}

		/**
		 * Whether to auto-load the option when WordPress starts up.
		 *
		 * The dynamic portion of the hook name, $this->key, refers to the option key.
		 *
		 * @since 2.4.0
		 *
		 * @param bool        $autoload   Whether to load the option when WordPress starts up.
		 * @param CMB2_Option $cmb_option This object.
		 */
		$autoload = apply_filters( "cmb2_should_autoload_{$this->key}", true, $this );

		return update_option(
			$this->key,
			$this->options,
			! $autoload || 'no' === $autoload ? false : true
		);
	}

	/**
	 * Retrieve option value based on name of option.
	 *
	 * @uses apply_filters() Calls 'cmb2_override_option_get_{$this->key}' hook to allow
	 * overwriting the option value to be retrieved.
	 *
	 * @since  1.0.1
	 * @param  mixed $default Optional. Default value to return if the option does not exist.
	 * @return mixed          Value set for the option.
	 */
	public function get_options( $default = null ) {
		if ( empty( $this->options ) && ! empty( $this->key ) ) {

			$test_get = apply_filters( "cmb2_override_option_get_{$this->key}", 'cmb2_no_override_option_get', $default, $this );

			if ( 'cmb2_no_override_option_get' !== $test_get ) {
				$this->options = $test_get;
			} else {
				// If no override, get the option.
				$this->options = get_option( $this->key, $default );
			}
		}

		$this->options = (array) $this->options;

		return $this->options;
	}

	/**
	 * Magic getter for our object.
	 *
	 * @since 2.6.0
	 *
	 * @param string $field Requested property.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'options':
			case 'key':
				return $this->{$field};
			default:
				// translators: 1: class name, 2: property name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
		}
	}
}
PK     ‚ŠU]>«{fÔ  fÔ  "  vendor/cmb2/cmb2/includes/CMB2.phpnu „[µü¤        <?php
/**
 * CMB2 - The core metabox object
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @property-read string $cmb_id
 * @property-read array $meta_box
 * @property-read array $updated
 * @property-read bool  $has_columns
 * @property-read array $tax_metaboxes_to_remove
 */

/**
 * The main CMB2 object for storing box data/properties.
 */
class CMB2 extends CMB2_Base {

	/**
	 * Supported CMB2 object types
	 *
	 * @var array
	 * @since 2.11.0
	 */
	protected $core_object_types = array( 'post', 'user', 'comment', 'term', 'options-page' );

	/**
	 * The object properties name.
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected $properties_name = 'meta_box';

	/**
	 * Metabox Config array
	 *
	 * @var   array
	 * @since 0.9.0
	 */
	protected $meta_box = array();

	/**
	 * Type of object registered for metabox. (e.g., post, user, or comment)
	 *
	 * @var   string
	 * @since 1.0.0
	 */
	protected $mb_object_type = null;

	/**
	 * List of fields that are changed/updated on save
	 *
	 * @var   array
	 * @since 1.1.0
	 */
	protected $updated = array();

	/**
	 * Metabox Defaults
	 *
	 * @var   array
	 * @since 1.0.1
	 */
	protected $mb_defaults = array(
		'id'                      => '',
		'title'                   => '',
		// Post type slug, or 'user', 'term', 'comment', or 'options-page'.
		'object_types'            => array(),

		/**
		 * The context within the screen where the boxes should display. Available contexts vary
		 * from screen to screen. Post edit screen contexts include 'normal', 'side', and 'advanced'.
		 *
		 * For placement in locations outside of a metabox, other options include:
		 * 'form_top', 'before_permalink', 'after_title', 'after_editor'
		 *
		 * Comments screen contexts include 'normal' and 'side'. Default is 'normal'.
		 */
		'context'                 => 'normal',
		'priority'                => 'high', // Or 10 for options pages.
		'show_names'              => true, // Show field names on the left.
		'show_on_cb'              => null, // Callback to determine if metabox should display.
		'show_on'                 => array(), // Post IDs or page templates to display this metabox. overrides 'show_on_cb'.
		'cmb_styles'              => true, // Include CMB2 stylesheet.
		'enqueue_js'              => true, // Include CMB2 JS.
		'fields'                  => array(),

		/**
		 * Handles hooking CMB2 forms/metaboxes into the post/attachement/user/options-page screens
		 * and handles hooking in and saving those fields.
		 */
		'hookup'                  => true,
		'save_fields'             => true, // Will not save during hookup if false.
		'closed'                  => false, // Default metabox to being closed.
		'taxonomies'              => array(),
		'new_user_section'        => 'add-new-user', // or 'add-existing-user'.
		'new_term_section'        => true,
		'show_in_rest'            => false,
		'classes'                 => null, // Optionally add classes to the CMB2 wrapper.
		'classes_cb'              => '', // Optionally add classes to the CMB2 wrapper (via a callback).

		/*
		 * The following parameter is for post alternate-context metaboxes only.
		 *
		 * To output the fields 'naked' (without a postbox wrapper/style), then
		 * add a `'remove_box_wrap' => true` to your metabox registration array.
		 */
		'remove_box_wrap'         => false,

		/*
		 * The following parameter is any additional arguments passed as $callback_args
		 * to add_meta_box, if/when applicable.
		 *
		 * CMB2 does not use these arguments in the add_meta_box callback, however, these args
		 * are parsed for certain special properties, like determining Gutenberg/block-editor
		 * compatibility.
		 *
		 * Examples:
		 *
		 * - Make sure default editor is used as metabox is not compatible with block editor
		 *      [ '__block_editor_compatible_meta_box' => false/true ]
		 *
		 * - Or declare this box exists for backwards compatibility
		 *      [ '__back_compat_meta_box' => false ]
		 *
		 * More: https://wordpress.org/gutenberg/handbook/extensibility/meta-box/
		 */
		'mb_callback_args'        => null,

		/*
		 * The following parameters are for options-page metaboxes,
		 * and several are passed along to add_menu_page()/add_submenu_page()
		 */

		// 'menu_title'           => null, // Falls back to 'title' (above). Do not define here so we can set a fallback.
		'message_cb'              => '', // Optionally define the options-save message (via a callback).
		'option_key'              => '', // The actual option key and admin menu page slug.
		'parent_slug'             => '', // Used as first param in add_submenu_page().
		'capability'              => 'manage_options', // Cap required to view options-page.
		'icon_url'                => '', // Menu icon. Only applicable if 'parent_slug' is left empty.
		'position'                => null, // Menu position. Only applicable if 'parent_slug' is left empty.

		'admin_menu_hook'         => 'admin_menu', // Alternately 'network_admin_menu' to add network-level options page.
		'display_cb'              => false, // Override the options-page form output (CMB2_Hookup::options_page_output()).
		'save_button'             => '', // The text for the options-page save button. Defaults to 'Save'.
		'disable_settings_errors' => false, // On settings pages (not options-general.php sub-pages), allows disabling.
		'tab_group'               => '', // Tab-group identifier, enables options page tab navigation.
		// 'tab_title'            => null, // Falls back to 'title' (above). Do not define here so we can set a fallback.
		// 'autoload'             => true, // Defaults to true, the options-page option will be autloaded.
	);

	/**
	 * Metabox field objects
	 *
	 * @var   array
	 * @since 2.0.3
	 */
	protected $fields = array();

	/**
	 * An array of hidden fields to output at the end of the form
	 *
	 * @var   array
	 * @since 2.0.0
	 */
	protected $hidden_fields = array();

	/**
	 * Array of key => value data for saving. Likely $_POST data.
	 *
	 * @var   string
	 * @since 2.0.0
	 */
	protected $generated_nonce = '';

	/**
	 * Whether there are fields to be shown in columns. Set in CMB2::add_field().
	 *
	 * @var   bool
	 * @since 2.2.2
	 */
	protected $has_columns = false;

	/**
	 * If taxonomy field is requesting to remove_default, we store the taxonomy here.
	 *
	 * @var   array
	 * @since 2.2.3
	 */
	protected $tax_metaboxes_to_remove = array();

	/**
	 * Get started
	 *
	 * @since 0.4.0
	 * @param array   $config    Metabox config array.
	 * @param integer $object_id Optional object id.
	 */
	public function __construct( $config, $object_id = 0 ) {

		if ( empty( $config['id'] ) ) {
			wp_die( esc_html__( 'Metabox configuration is required to have an ID parameter.', 'cmb2' ) );
		}

		$this->cmb_id = $config['id'];
		$this->meta_box = wp_parse_args( $config, $this->mb_defaults );
		$this->meta_box['fields'] = array();

		// Ensures object_types is an array.
		$this->set_prop( 'object_types', $this->box_types() );
		$this->object_id( $object_id );

		if ( $this->is_options_page_mb() ) {

			// Check initial priority.
			if ( empty( $config['priority'] ) ) {

				// If not explicitly defined, Reset the priority to 10
				// Fixes https://github.com/CMB2/CMB2/issues/1410.
				$this->meta_box['priority'] = 10;
			}

			$this->init_options_mb();
		}

		$this->mb_object_type();

		if ( ! empty( $config['fields'] ) && is_array( $config['fields'] ) ) {
			$this->add_fields( $config['fields'] );
		}

		CMB2_Boxes::add( $this );

		/**
		 * Hook during initiation of CMB2 object
		 *
		 * The dynamic portion of the hook name, $this->cmb_id, is this meta_box id.
		 *
		 * @param array $cmb This CMB2 object
		 */
		do_action( "cmb2_init_{$this->cmb_id}", $this );

		// Hook in the hookup... how meta.
		add_action( "cmb2_init_hookup_{$this->cmb_id}", array( 'CMB2_Hookup', 'maybe_init_and_hookup' ) );

		// Hook in the rest api functionality.
		add_action( "cmb2_init_hookup_{$this->cmb_id}", array( 'CMB2_REST', 'maybe_init_and_hookup' ) );
	}

	/**
	 * Loops through and displays fields
	 *
	 * @since 1.0.0
	 * @param int    $object_id   Object ID.
	 * @param string $object_type Type of object being saved. (e.g., post, user, or comment).
	 *
	 * @return CMB2
	 */
	public function show_form( $object_id = 0, $object_type = '' ) {
		$this->render_form_open( $object_id, $object_type );

		foreach ( $this->prop( 'fields' ) as $field_args ) {
			$this->render_field( $field_args );
		}

		return $this->render_form_close( $object_id, $object_type );
	}

	/**
	 * Outputs the opening form markup and runs corresponding hooks:
	 * 'cmb2_before_form' and "cmb2_before_{$object_type}_form_{$this->cmb_id}"
	 *
	 * @since  2.2.0
	 * @param  integer $object_id   Object ID.
	 * @param  string  $object_type Object type.
	 *
	 * @return CMB2
	 */
	public function render_form_open( $object_id = 0, $object_type = '' ) {
		$object_type = $this->object_type( $object_type );
		$object_id = $this->object_id( $object_id );

		echo "\n<!-- Begin CMB2 Fields -->\n";

		$this->nonce_field();

		/**
		 * Hook before form table begins
		 *
		 * @param array  $cmb_id      The current box ID.
		 * @param int    $object_id   The ID of the current object.
		 * @param string $object_type The type of object you are working with.
		 *                            Usually `post` (this applies to all post-types).
		 *                            Could also be `comment`, `user` or `options-page`.
		 * @param array  $cmb         This CMB2 object.
		 */
		do_action( 'cmb2_before_form', $this->cmb_id, $object_id, $object_type, $this );

		/**
		 * Hook before form table begins
		 *
		 * The first dynamic portion of the hook name, $object_type, is the type of object
		 * you are working with. Usually `post` (this applies to all post-types).
		 * Could also be `comment`, `user` or `options-page`.
		 *
		 * The second dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
		 *
		 * @param array  $cmb_id      The current box ID
		 * @param int    $object_id   The ID of the current object
		 * @param array  $cmb         This CMB2 object
		 */
		do_action( "cmb2_before_{$object_type}_form_{$this->cmb_id}", $object_id, $this );

		echo '<div class="', esc_attr( $this->box_classes() ), '"><div id="cmb2-metabox-', sanitize_html_class( $this->cmb_id ), '" class="cmb2-metabox cmb-field-list">';

		return $this;
	}

	/**
	 * Defines the classes for the CMB2 form/wrap.
	 *
	 * @since  2.0.0
	 * @return string Space concatenated list of classes
	 */
	public function box_classes() {

		$classes = array( 'cmb2-wrap', 'form-table' );

		// Use the callback to fetch classes.
		if ( $added_classes = $this->get_param_callback_result( 'classes_cb' ) ) {
			$added_classes = is_array( $added_classes ) ? $added_classes : array( $added_classes );
			$classes = array_merge( $classes, $added_classes );
		}

		if ( $added_classes = $this->prop( 'classes' ) ) {
			$added_classes = is_array( $added_classes ) ? $added_classes : array( $added_classes );
			$classes = array_merge( $classes, $added_classes );
		}

		/**
		 * Add our context classes for non-standard metaboxes.
		 *
		 * @since 2.2.4
		 */
		if ( $this->is_alternate_context_box() ) {
			$context = array();

			// Include custom class if requesting no title.
			if ( ! $this->prop( 'title' ) && ! $this->prop( 'remove_box_wrap' ) ) {
				$context[] = 'cmb2-context-wrap-no-title';
			}

			// Include a generic context wrapper.
			$context[] = 'cmb2-context-wrap';

			// Include a context-type based context wrapper.
			$context[] = 'cmb2-context-wrap-' . $this->prop( 'context' );

			// Include an ID based context wrapper as well.
			$context[] = 'cmb2-context-wrap-' . $this->prop( 'id' );

			// And merge all the classes back into the array.
			$classes = array_merge( $classes, $context );
		}

		/**
		 * Globally filter box wrap classes
		 *
		 * @since 2.2.2
		 *
		 * @param string $classes Array of classes for the cmb2-wrap.
		 * @param CMB2   $cmb     This CMB2 object.
		 */
		$classes = apply_filters( 'cmb2_wrap_classes', $classes, $this );

		$split = array();
		foreach ( array_filter( $classes ) as $class ) {
			foreach ( explode( ' ', $class ) as $_class ) {
				// Clean up & sanitize.
				$split[] = sanitize_html_class( wp_strip_all_tags( $_class ) );
			}
		}
		$classes = $split;

		// Remove any duplicates.
		$classes = array_unique( $classes );

		// Make it a string.
		return implode( ' ', $classes );
	}

	/**
	 * Outputs the closing form markup and runs corresponding hooks:
	 * 'cmb2_after_form' and "cmb2_after_{$object_type}_form_{$this->cmb_id}"
	 *
	 * @since  2.2.0
	 * @param  integer $object_id   Object ID.
	 * @param  string  $object_type Object type.
	 *
	 * @return CMB2
	 */
	public function render_form_close( $object_id = 0, $object_type = '' ) {
		$object_type = $this->object_type( $object_type );
		$object_id = $this->object_id( $object_id );

		echo '</div></div>';

		$this->render_hidden_fields();

		/**
		 * Hook after form form has been rendered
		 *
		 * The dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
		 *
		 * The first dynamic portion of the hook name, $object_type, is the type of object
		 * you are working with. Usually `post` (this applies to all post-types).
		 * Could also be `comment`, `user` or `options-page`.
		 *
		 * @param int    $object_id   The ID of the current object
		 * @param array  $cmb         This CMB2 object
		 */
		do_action( "cmb2_after_{$object_type}_form_{$this->cmb_id}", $object_id, $this );

		/**
		 * Hook after form form has been rendered
		 *
		 * @param array  $cmb_id      The current box ID.
		 * @param int    $object_id   The ID of the current object.
		 * @param string $object_type The type of object you are working with.
		 *                            Usually `post` (this applies to all post-types).
		 *                            Could also be `comment`, `user` or `options-page`.
		 * @param array  $cmb         This CMB2 object.
		 */
		do_action( 'cmb2_after_form', $this->cmb_id, $object_id, $object_type, $this );

		echo "\n<!-- End CMB2 Fields -->\n";

		return $this;
	}

	/**
	 * Renders a field based on the field type
	 *
	 * @since  2.2.0
	 * @param  array $field_args A field configuration array.
	 * @return mixed CMB2_Field object if successful.
	 */
	public function render_field( $field_args ) {
		$field_args['context'] = $this->prop( 'context' );

		if ( 'group' === $field_args['type'] ) {

			if ( ! isset( $field_args['show_names'] ) ) {
				$field_args['show_names'] = $this->prop( 'show_names' );
			}
			$field = $this->render_group( $field_args );

		} elseif ( 'hidden' === $field_args['type'] && $this->get_field( $field_args )->should_show() ) {
			// Save rendering for after the metabox.
			$field = $this->add_hidden_field( $field_args );

		} else {

			$field_args['show_names'] = $this->prop( 'show_names' );

			// Render default fields.
			$field = $this->get_field( $field_args )->render_field();
		}

		return $field;
	}

	/**
	 * Render a group of fields.
	 *
	 * @param array|CMB2_Field $args Array of field arguments for a group field parent or the group parent field.
	 * @return CMB2_Field|null Group field object.
	 */
	public function render_group( $args ) {
		$field_group = false;

		if ( $args instanceof CMB2_Field ) {
			$field_group = 'group' === $args->type() ? $args : false;
		} elseif ( isset( $args['id'], $args['fields'] ) && is_array( $args['fields'] ) ) {
			$field_group = $this->get_field( $args );
		}

		if ( ! $field_group ) {
			return;
		}

		$field_group->render_context = 'edit';
		$field_group->peform_param_callback( 'render_row_cb' );

		return $field_group;
	}

	/**
	 * The default callback to render a group of fields.
	 *
	 * @since  2.2.6
	 *
	 * @param  array      $field_args  Array of field arguments for the group field parent.
	 * @param  CMB2_Field $field_group The CMB2_Field group object.
	 *
	 * @return CMB2_Field|null Group field object.
	 */
	public function render_group_callback( $field_args, $field_group ) {

		// If field is requesting to be conditionally shown.
		if ( ! $field_group || ! $field_group->should_show() ) {
			return;
		}

		$field_group->index = 0;

		$field_group->peform_param_callback( 'before_group' );

		$desc      = $field_group->args( 'description' );
		$label     = $field_group->args( 'name' );
		$group_val = (array) $field_group->value();

		echo '<div class="cmb-row cmb-repeat-group-wrap ', esc_attr( $field_group->row_classes() ), '" data-fieldtype="group"><div class="cmb-td"><div data-groupid="', esc_attr( $field_group->id() ), '" id="', esc_attr( $field_group->id() ), '_repeat" ', $this->group_wrap_attributes( $field_group ), '>';

		if ( $desc || $label ) {
			$class = $desc ? ' cmb-group-description' : '';
			echo '<div class="cmb-row', $class, '"><div class="cmb-th">';
			if ( $label ) {
				echo '<h2 class="cmb-group-name">', $label, '</h2>';
			}
			if ( $desc ) {
				echo '<p class="cmb2-metabox-description">', $desc, '</p>';
			}
			echo '</div></div>';
		}

		if ( ! empty( $group_val ) ) {
			$group_val_count = count( $group_val );
			for ( $i = 0; $i < $group_val_count; $i++ ) {
				$this->render_group_row( $field_group );
				$field_group->index++;
			}
		} else {
			$this->render_group_row( $field_group );
		}

		if ( $field_group->args( 'repeatable' ) ) {
			echo '<div class="cmb-row"><div class="cmb-td"><p class="cmb-add-row"><button type="button" data-selector="', esc_attr( $field_group->id() ), '_repeat" data-grouptitle="', esc_attr( $field_group->options( 'group_title' ) ), '" class="cmb-add-group-row button-secondary">', $field_group->options( 'add_button' ), '</button></p></div></div>';
		}

		echo '</div></div></div>';

		$field_group->peform_param_callback( 'after_group' );

		return $field_group;
	}

	/**
	 * Get the group wrap attributes, which are passed through a filter.
	 *
	 * @since  2.2.3
	 * @param  CMB2_Field $field_group The group CMB2_Field object.
	 * @return string                  The attributes string.
	 */
	public function group_wrap_attributes( $field_group ) {
		$classes = 'cmb-nested cmb-field-list cmb-repeatable-group';
		$classes .= $field_group->options( 'sortable' ) ? ' sortable' : ' non-sortable';
		$classes .= $field_group->args( 'repeatable' ) ? ' repeatable' : ' non-repeatable';

		$group_wrap_attributes = array(
			'class' => $classes,
			'style' => 'width:100%;',
		);

		/**
		 * Allow for adding additional HTML attributes to a group wrapper.
		 *
		 * The attributes will be an array of key => value pairs for each attribute.
		 *
		 * @since 2.2.2
		 *
		 * @param string     $group_wrap_attributes Current attributes array.
		 * @param CMB2_Field $field_group           The group CMB2_Field object.
		 */
		$group_wrap_attributes = apply_filters( 'cmb2_group_wrap_attributes', $group_wrap_attributes, $field_group );

		$atts = array();
		foreach ( $group_wrap_attributes as $att => $att_value ) {
			if ( ! CMB2_Utils::is_data_attribute( $att ) ) {
				$att_value = htmlspecialchars( $att_value, ENT_COMPAT );
			}

			$atts[ sanitize_html_class( $att ) ] = sanitize_text_field( $att_value );
		}

		return CMB2_Utils::concat_attrs( $atts );
	}

	/**
	 * Render a repeatable group row
	 *
	 * @since  1.0.2
	 * @param  CMB2_Field $field_group     CMB2_Field group field object.
	 *
	 * @return CMB2
	 */
	public function render_group_row( $field_group ) {

		$field_group->peform_param_callback( 'before_group_row' );
		$closed_class     = $field_group->options( 'closed' ) ? ' closed' : '';
		$confirm_deletion = $field_group->options( 'remove_confirm' );
		$confirm_deletion = ! empty( $confirm_deletion ) ? $confirm_deletion : '';

		echo '
		<div id="cmb-group-', $field_group->id(), '-', $field_group->index, '" class="postbox cmb-row cmb-repeatable-grouping', $closed_class, '" data-iterator="', $field_group->index, '">';

		if ( $field_group->args( 'repeatable' ) ) {
			echo '<button type="button" data-selector="', $field_group->id(), '_repeat" data-confirm="', esc_attr( $confirm_deletion ), '" class="dashicons-before dashicons-no-alt cmb-remove-group-row" title="', esc_attr( $field_group->options( 'remove_button' ) ), '"></button>';
		}

			echo '
			<div class="cmbhandle" title="', esc_attr__( 'Click to toggle', 'cmb2' ), '"><br></div>
			<h3 class="cmb-group-title cmbhandle-title"><span>', $field_group->replace_hash( $field_group->options( 'group_title' ) ), '</span></h3>

			<div class="inside cmb-td cmb-nested cmb-field-list">';
				// Loop and render repeatable group fields.
		foreach ( array_values( $field_group->args( 'fields' ) ) as $field_args ) {
			if ( 'hidden' === $field_args['type'] ) {

				// Save rendering for after the metabox.
				$this->add_hidden_field( $field_args, $field_group );

			} else {

				$field_args['show_names'] = $field_group->args( 'show_names' );
				$field_args['context']    = $field_group->args( 'context' );

				$this->get_field( $field_args, $field_group )->render_field();
			}
		}

		if ( $field_group->args( 'repeatable' ) ) {
			echo '
					<div class="cmb-row cmb-remove-field-row">
						<div class="cmb-remove-row">
							<button type="button" data-selector="', $field_group->id(), '_repeat" data-confirm="', esc_attr( $confirm_deletion ), '" class="cmb-remove-group-row cmb-remove-group-row-button alignright button-secondary">', $field_group->options( 'remove_button' ), '</button>
						</div>
					</div>
					';
		}
			echo '
			</div>
		</div>
		';

		$field_group->peform_param_callback( 'after_group_row' );

		return $this;
	}

	/**
	 * Add a hidden field to the list of hidden fields to be rendered later.
	 *
	 * @since 2.0.0
	 *
	 * @param array           $field_args  Array of field arguments to be passed to CMB2_Field.
	 * @param CMB2_Field|null $field_group CMB2_Field group field object.
	 * @return CMB2_Field
	 */
	public function add_hidden_field( $field_args, $field_group = null ) {
		if ( isset( $field_args['field_args'] ) ) {
			// For back-compatibility.
			$field = new CMB2_Field( $field_args );
		} else {
			$field = $this->get_new_field( $field_args, $field_group );
		}

		$types = new CMB2_Types( $field );

		if ( $field_group ) {
			$types->iterator = $field_group->index;
		}

		$this->hidden_fields[] = $types;

		return $field;
	}

	/**
	 * Loop through and output hidden fields
	 *
	 * @since  2.0.0
	 *
	 * @return CMB2
	 */
	public function render_hidden_fields() {
		if ( ! empty( $this->hidden_fields ) ) {
			foreach ( $this->hidden_fields as $hidden ) {
				$hidden->render();
			}
		}

		return $this;
	}

	/**
	 * Returns array of sanitized field values (without saving them)
	 *
	 * @since  2.0.3
	 * @param  array $data_to_sanitize Array of field_id => value data for sanitizing (likely $_POST data).
	 * @return mixed
	 */
	public function get_sanitized_values( array $data_to_sanitize ) {
		$this->data_to_save = $data_to_sanitize;
		$stored_id          = $this->object_id();

		// We do this So CMB will sanitize our data for us, but not save it.
		$this->object_id( '_' );

		// Ensure temp. data store is empty.
		cmb2_options( 0 )->set();

		// We want to get any taxonomy values back.
		add_filter( "cmb2_return_taxonomy_values_{$this->cmb_id}", '__return_true' );

		// Process/save fields.
		$this->process_fields();

		// Put things back the way they were.
		remove_filter( "cmb2_return_taxonomy_values_{$this->cmb_id}", '__return_true' );

		// Get data from temp. data store.
		$sanitized_values = cmb2_options( 0 )->get_options();

		// Empty out temp. data store again.
		cmb2_options( 0 )->set();

		// Reset the object id.
		$this->object_id( $stored_id );

		return $sanitized_values;
	}

	/**
	 * Loops through and saves field data
	 *
	 * @since  1.0.0
	 * @param  int    $object_id    Object ID.
	 * @param  string $object_type  Type of object being saved. (e.g., post, user, or comment).
	 * @param  array  $data_to_save Array of key => value data for saving. Likely $_POST data.
	 *
	 * @return CMB2
	 */
	public function save_fields( $object_id = 0, $object_type = '', $data_to_save = array() ) {

		// Fall-back to $_POST data.
		$this->data_to_save = ! empty( $data_to_save ) ? $data_to_save : $_POST;
		$object_id = $this->object_id( $object_id );
		$object_type = $this->object_type( $object_type );

		$this->process_fields();

		// If options page, save the updated options.
		if ( 'options-page' === $object_type ) {
			cmb2_options( $object_id )->set();
		}

		return $this->after_save();
	}

	/**
	 * Process and save form fields
	 *
	 * @since  2.0.0
	 *
	 * @return CMB2
	 */
	public function process_fields() {

		$this->pre_process();

		// Remove the show_on properties so saving works.
		$this->prop( 'show_on', array() );

		// save field ids of those that are updated.
		$this->updated = array();

		foreach ( $this->prop( 'fields' ) as $field_args ) {
			$this->process_field( $field_args );
		}

		return $this;
	}

	/**
	 * Process and save a field
	 *
	 * @since  2.0.0
	 * @param  array $field_args Array of field arguments.
	 *
	 * @return CMB2
	 */
	public function process_field( $field_args ) {

		switch ( $field_args['type'] ) {

			case 'group':
				if ( $this->save_group( $field_args ) ) {
					$this->updated[] = $field_args['id'];
				}

				break;

			case 'title':
				// Don't process title fields.
				break;

			default:
				$field = $this->get_new_field( $field_args );

				if ( $field->save_field_from_data( $this->data_to_save ) ) {
					$this->updated[] = $field->id();
				}

				break;
		}

		return $this;
	}

	/**
	 * Fires the "cmb2_{$object_type}_process_fields_{$cmb_id}" action hook.
	 *
	 * @since 2.2.2
	 *
	 * @return CMB2
	 */
	public function pre_process() {
		$object_type = $this->object_type();

		/**
		 * Fires before fields have been processed/saved.
		 *
		 * The dynamic portion of the hook name, $object_type, refers to the
		 * metabox/form's object type
		 *    Usually `post` (this applies to all post-types).
		 *    Could also be `comment`, `user` or `options-page`.
		 *
		 * The dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
		 *
		 * @param array $cmb       This CMB2 object
		 * @param int   $object_id The ID of the current object
		 */
		do_action( "cmb2_{$object_type}_process_fields_{$this->cmb_id}", $this, $this->object_id() );

		return $this;
	}

	/**
	 * Fires the "cmb2_save_{$object_type}_fields" and
	 * "cmb2_save_{$object_type}_fields_{$cmb_id}" action hooks.
	 *
	 * @since  2.x.x
	 *
	 * @return CMB2
	 */
	public function after_save() {
		$object_type = $this->object_type();
		$object_id   = $this->object_id();

		/**
		 * Fires after all fields have been saved.
		 *
		 * The dynamic portion of the hook name, $object_type, refers to the metabox/form's object type
		 * Usually `post` (this applies to all post-types).
		 * Could also be `comment`, `user` or `options-page`.
		 *
		 * @param int    $object_id   The ID of the current object
		 * @param array  $cmb_id      The current box ID
		 * @param string $updated     Array of field ids that were updated.
		 *                            Will only include field ids that had values change.
		 * @param array  $cmb         This CMB2 object
		 */
		do_action( "cmb2_save_{$object_type}_fields", $object_id, $this->cmb_id, $this->updated, $this );

		/**
		 * Fires after all fields have been saved.
		 *
		 * The dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
		 *
		 * The dynamic portion of the hook name, $object_type, refers to the metabox/form's object type
		 * Usually `post` (this applies to all post-types).
		 * Could also be `comment`, `user` or `options-page`.
		 *
		 * @param int    $object_id   The ID of the current object
		 * @param string $updated     Array of field ids that were updated.
		 *                            Will only include field ids that had values change.
		 * @param array  $cmb         This CMB2 object
		 */
		do_action( "cmb2_save_{$object_type}_fields_{$this->cmb_id}", $object_id, $this->updated, $this );

		return $this;
	}

	/**
	 * Save a repeatable group
	 *
	 * @since  1.x.x
	 * @param  array $args Field arguments array.
	 * @return mixed        Return of CMB2_Field::update_data().
	 */
	public function save_group( $args ) {
		if ( ! isset( $args['id'], $args['fields'] ) || ! is_array( $args['fields'] ) ) {
			return;
		}

		return $this->save_group_field( $this->get_new_field( $args ) );
	}

	/**
	 * Save a repeatable group
	 *
	 * @since  1.x.x
	 * @param  CMB2_Field $field_group CMB2_Field group field object.
	 * @return mixed                   Return of CMB2_Field::update_data().
	 */
	public function save_group_field( $field_group ) {
		$base_id = $field_group->id();

		if ( ! isset( $this->data_to_save[ $base_id ] ) ) {
			return;
		}

		$old = $field_group->get_data();
		// Check if group field has sanitization_cb.
		$group_vals = $field_group->sanitization_cb( $this->data_to_save[ $base_id ] );
		$saved      = array();

		$field_group->index = 0;
		$field_group->data_to_save = $this->data_to_save;

		foreach ( array_values( $field_group->fields() ) as $field_args ) {
			if ( 'title' === $field_args['type'] ) {
				// Don't process title fields.
				continue;
			}

			$field  = $this->get_new_field( $field_args, $field_group );
			$sub_id = $field->id( true );
			if ( empty( $saved[ $field_group->index ] ) ) {
				$saved[ $field_group->index ] = array();
			}

			foreach ( (array) $group_vals as $field_group->index => $post_vals ) {

				// Get value.
				$new_val = isset( $group_vals[ $field_group->index ][ $sub_id ] )
					? $group_vals[ $field_group->index ][ $sub_id ]
					: false;

				// Sanitize.
				$new_val = $field->sanitization_cb( $new_val );

				if ( is_array( $new_val ) && $field->args( 'has_supporting_data' ) ) {
					if ( $field->args( 'repeatable' ) ) {
						$_new_val = array();
						foreach ( $new_val as $group_index => $grouped_data ) {
							// Add the supporting data to the $saved array stack.
							$saved[ $field_group->index ][ $grouped_data['supporting_field_id'] ][] = $grouped_data['supporting_field_value'];
							// Reset var to the actual value.
							$_new_val[ $group_index ] = $grouped_data['value'];
						}
						$new_val = $_new_val;
					} else {
						// Add the supporting data to the $saved array stack.
						$saved[ $field_group->index ][ $new_val['supporting_field_id'] ] = $new_val['supporting_field_value'];
						// Reset var to the actual value.
						$new_val = $new_val['value'];
					}
				}

				// Get old value.
				$old_val = is_array( $old ) && isset( $old[ $field_group->index ][ $sub_id ] )
					? $old[ $field_group->index ][ $sub_id ]
					: false;

				$is_updated = ( ! CMB2_Utils::isempty( $new_val ) && $new_val !== $old_val );
				$is_removed = ( CMB2_Utils::isempty( $new_val ) && ! CMB2_Utils::isempty( $old_val ) );

				// Compare values and add to `$updated` array.
				if ( $is_updated || $is_removed ) {
					$this->updated[] = $base_id . '::' . $field_group->index . '::' . $sub_id;
				}

				// Add to `$saved` array.
				$saved[ $field_group->index ][ $sub_id ] = $new_val;

			}// End foreach.

			$saved[ $field_group->index ] = CMB2_Utils::filter_empty( $saved[ $field_group->index ] );
		}// End foreach.

		$saved = CMB2_Utils::filter_empty( $saved );

		return $field_group->update_data( $saved, true );
	}

	/**
	 * Get object id from global space if no id is provided
	 *
	 * @since  1.0.0
	 * @param  integer|string $object_id Object ID.
	 * @return integer|string $object_id Object ID.
	 */
	public function object_id( $object_id = 0 ) {
		global $pagenow;

		if ( $object_id ) {
			$this->object_id = $object_id;
			return $this->object_id;
		}

		if ( $this->object_id ) {
			return $this->object_id;
		}

		// Try to get our object ID from the global space.
		switch ( $this->object_type() ) {
			case 'user':
				$object_id = isset( $_REQUEST['user_id'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['user_id'] ) ) : $object_id;
				$object_id = ! $object_id && 'user-new.php' !== $pagenow && isset( $GLOBALS['user_ID'] ) ? $GLOBALS['user_ID'] : $object_id;
				break;

			case 'comment':
				$object_id = isset( $_REQUEST['c'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['c'] ) ) : $object_id;
				$object_id = ! $object_id && isset( $GLOBALS['comments']->comment_ID ) ? $GLOBALS['comments']->comment_ID : $object_id;
				break;

			case 'term':
				$object_id = isset( $_REQUEST['tag_ID'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['tag_ID'] ) ) : $object_id;
				break;

			case 'options-page':
				$key = $this->doing_options_page();
				if ( ! empty( $key ) ) {
					$object_id = $key;
				}
				break;

			default:
				$object_id = isset( $GLOBALS['post']->ID ) ? $GLOBALS['post']->ID : $object_id;
				$object_id = isset( $_REQUEST['post'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['post'] ) ) : $object_id;
				break;
		}

		/**
		 * Filter the object id.
		 *
		 * @since 2.11.0
		 *
		 * @param  integer|string $object_id Object ID.
		 * @param  CMB2           $cmb       This CMB2 object.
		 */
		$object_id = apply_filters( 'cmb2_set_object_id', $object_id, $this );

		// reset to id or 0.
		$this->object_id = ! empty( $object_id ) ? $object_id : 0;

		return $this->object_id;
	}

	/**
	 * Sets the $object_type based on metabox settings
	 *
	 * @since  1.0.0
	 * @return string Object type.
	 */
	public function mb_object_type() {
		if ( null !== $this->mb_object_type ) {
			return $this->mb_object_type;
		}

		$found_type = '';

		if ( $this->is_options_page_mb() ) {
			$found_type = 'options-page';
		} else {
			$registered_types = $this->box_types();

			// if it's an array of one, extract it.
			if ( 1 === count( $registered_types ) ) {
				$last = end( $registered_types );
				if ( is_string( $last ) ) {
					$found_type = $last;
				}
			} else {
				$current_object_type = $this->current_object_type();
				if ( in_array( $current_object_type, $registered_types, true ) ) {
					$found_type = $current_object_type;
				}
			}
		}

		// Get our object type.
		$mb_object_type = $this->is_supported_core_object_type( $found_type )
			? $found_type
			: 'post';

		/**
		 * Filter the metabox object type.
		 *
		 * @since 2.11.0
		 *
		 * @param string $mb_object_type The metabox object type.
		 * @param string $found_type     The found object type.
		 * @param CMB2   $cmb            This CMB2 object.
		 */
		$this->mb_object_type = apply_filters( 'cmb2_set_box_object_type', $mb_object_type, $found_type, $this );

		return $this->mb_object_type;
	}

	/**
	 * Gets the box 'object_types' array based on box settings.
	 *
	 * @since  2.2.3
	 * @param  array $fallback Fallback value.
	 *
	 * @return array Object types.
	 */
	public function box_types( $fallback = array() ) {
		return CMB2_Utils::ensure_array( $this->prop( 'object_types' ), $fallback );
	}

	/**
	 * Check if given object_type(s) matches any of the registered object types or
	 * taxonomies for this box.
	 *
	 * @since  2.7.0
	 * @param  string|array $object_types The object type(s) to check.
	 * @param  array        $fallback     Fallback object_types value.
	 *
	 * @return bool Whether given object type(s) are registered to this box.
	 */
	public function is_box_type( $object_types = array(), $fallback = array() ) {
		$object_types = (array) $object_types;
		$box_types    = $this->box_types( $fallback );

		if ( in_array( 'term', $box_types, true ) ) {
			$taxonomies = CMB2_Utils::ensure_array( $this->prop( 'taxonomies' ) );
			$box_types = array_merge( $box_types, $taxonomies );
		}

		$found = array_intersect( $object_types, $box_types );

		return ! empty( $found );
	}

	/**
	 * Initates the object types and option key for an options page metabox.
	 *
	 * @since  2.2.5
	 *
	 * @return void
	 */
	public function init_options_mb() {
		$keys  = $this->options_page_keys();
		$types = $this->box_types();

		if ( empty( $keys ) ) {
			$keys = '';
			$types = $this->deinit_options_mb( $types );
		} else {

			// Make sure 'options-page' is one of the object types.
			$types[] = 'options-page';
		}

		// Set/Reset the option_key property.
		$this->set_prop( 'option_key', $keys );

		// Reset the object types.
		$this->set_prop( 'object_types', array_unique( $types ) );
	}

	/**
	 * If object-page initiation failed, remove traces options page setup.
	 *
	 * @since  2.2.5
	 *
	 * @param array $types Array of types.
	 * @return array
	 */
	protected function deinit_options_mb( $types ) {
		if ( isset( $this->meta_box['show_on']['key'] ) && 'options-page' === $this->meta_box['show_on']['key'] ) {
			unset( $this->meta_box['show_on']['key'] );
		}

		if ( array_key_exists( 'options-page', $this->meta_box['show_on'] ) ) {
			unset( $this->meta_box['show_on']['options-page'] );
		}

		$index = array_search( 'options-page', $types );

		if ( false !== $index ) {
			unset( $types[ $index ] );
		}

		return $types;
	}

	/**
	 * Determines if metabox is for an options page
	 *
	 * @since  1.0.1
	 * @return boolean True/False.
	 */
	public function is_options_page_mb() {
		return (
			// 'show_on' values checked for back-compatibility.
			$this->is_old_school_options_page_mb()
			|| in_array( 'options-page', $this->box_types() )
		);
	}

	/**
	 * Determines if metabox uses old-schoold options page config.
	 *
	 * @since  2.2.5
	 * @return boolean True/False.
	 */
	public function is_old_school_options_page_mb() {
		return (
			// 'show_on' values checked for back-compatibility.
			isset( $this->meta_box['show_on']['key'] ) && 'options-page' === $this->meta_box['show_on']['key']
			|| array_key_exists( 'options-page', $this->meta_box['show_on'] )
		);
	}

	/**
	 * Determine if we are on an options page (or saving the options page).
	 *
	 * @since  2.2.5
	 *
	 * @return bool
	 */
	public function doing_options_page() {
		$found_key = false;
		$keys = $this->options_page_keys();

		if ( empty( $keys ) ) {
			return $found_key;
		}

		if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], $keys ) ) {
			$found_key = $_GET['page'];
		}

		if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $keys ) ) {
			$found_key = $_POST['action'];
		}

		return $found_key ? $found_key : false;
	}

	/**
	 * Get the options page key.
	 *
	 * @since  2.2.5
	 * @return string|array
	 */
	public function options_page_keys() {
		$key = '';
		if ( ! $this->is_options_page_mb() ) {
			return $key;
		}

		$values = null;
		if ( ! empty( $this->meta_box['show_on']['value'] ) ) {
			$values = $this->meta_box['show_on']['value'];
		} elseif ( ! empty( $this->meta_box['show_on']['options-page'] ) ) {
			$values = $this->meta_box['show_on']['options-page'];
		} elseif ( $this->prop( 'option_key' ) ) {
			$values = $this->prop( 'option_key' );
		}

		if ( $values ) {
			$key = $values;
		}

		if ( ! is_array( $key ) ) {
			$key = array( $key );
		}

		return $key;
	}

	/**
	 * Returns the object type
	 *
	 * @since  1.0.0
	 * @param string $object_type Type of object being saved. (e.g., post, user, or comment). Optional.
	 * @return string Object type.
	 */
	public function object_type( $object_type = '' ) {
		if ( $object_type ) {
			$this->object_type = $object_type;
			return $this->object_type;
		}

		if ( $this->object_type ) {
			return $this->object_type;
		}

		$this->object_type = $this->current_object_type();

		return $this->object_type;
	}

	/**
	 * Get the object type for the current page, based on the $pagenow global.
	 *
	 * @since  2.2.2
	 * @return string  Page object type name.
	 */
	public function current_object_type() {
		global $pagenow;
		$type = 'post';

		if ( in_array( $pagenow, array( 'user-edit.php', 'profile.php', 'user-new.php' ), true ) ) {
			$type = 'user';
		}

		if ( in_array( $pagenow, array( 'edit-comments.php', 'comment.php' ), true ) ) {
			$type = 'comment';
		}

		if ( in_array( $pagenow, array( 'edit-tags.php', 'term.php' ), true ) ) {
			$type = 'term';
		}

		if ( defined( 'DOING_AJAX' ) && isset( $_POST['action'] ) && 'add-tag' === $_POST['action'] ) {
			$type = 'term';
		}

		if (
			in_array( $pagenow, array( 'admin.php', 'admin-post.php' ), true )
			&& $this->doing_options_page()
		) {
			$type = 'options-page';
		}

		return $type;
	}

	/**
	 * Set metabox property.
	 *
	 * @since  2.2.2
	 * @param  string $property Metabox config property to retrieve.
	 * @param  mixed  $value    Value to set if no value found.
	 * @return mixed            Metabox config property value or false.
	 */
	public function set_prop( $property, $value ) {
		$this->meta_box[ $property ] = $value;

		return $this->prop( $property );
	}

	/**
	 * Get metabox property and optionally set a fallback
	 *
	 * @since  2.0.0
	 * @param  string $property Metabox config property to retrieve.
	 * @param  mixed  $fallback Fallback value to set if no value found.
	 * @return mixed            Metabox config property value or false.
	 */
	public function prop( $property, $fallback = null ) {
		if ( array_key_exists( $property, $this->meta_box ) ) {
			return $this->meta_box[ $property ];
		} elseif ( $fallback ) {
			return $this->meta_box[ $property ] = $fallback;
		}
	}

	/**
	 * Get a field object
	 *
	 * @since  2.0.3
	 * @param  string|array|CMB2_Field $field        Metabox field id or field config array or CMB2_Field object.
	 * @param  CMB2_Field|null         $field_group  (optional) CMB2_Field object (group parent).
	 * @param  bool                    $reset_cached (optional) Reset the internal cache for this field object.
	 *                                               Use sparingly.
	 *
	 * @return CMB2_Field|false                     CMB2_Field object (or false).
	 */
	public function get_field( $field, $field_group = null, $reset_cached = false ) {
		if ( $field instanceof CMB2_Field ) {
			return $field;
		}

		$field_id = is_string( $field ) ? $field : $field['id'];

		$parent_field_id = ! empty( $field_group ) ? $field_group->id() : '';
		$ids = $this->get_field_ids( $field_id, $parent_field_id );

		if ( ! $ids ) {
			return false;
		}

		list( $field_id, $sub_field_id ) = $ids;

		$index = $field_id . ( $sub_field_id ? '|' . $sub_field_id : '' ) . ( $field_group ? '|' . $field_group->index : '' );

		if ( array_key_exists( $index, $this->fields ) && ! $reset_cached ) {
			return $this->fields[ $index ];
		}

		$this->fields[ $index ] = new CMB2_Field( $this->get_field_args( $field_id, $field, $sub_field_id, $field_group ) );

		return $this->fields[ $index ];
	}

	/**
	 * Handles determining which type of arguments to pass to CMB2_Field
	 *
	 * @since  2.0.7
	 * @param  mixed           $field_id     Field (or group field) ID.
	 * @param  mixed           $field_args   Array of field arguments.
	 * @param  mixed           $sub_field_id Sub field ID (if field_group exists).
	 * @param  CMB2_Field|null $field_group  If a sub-field, will be the parent group CMB2_Field object.
	 * @return array                         Array of CMB2_Field arguments.
	 */
	public function get_field_args( $field_id, $field_args, $sub_field_id, $field_group ) {

		// Check if group is passed and if fields were added in the old-school fields array.
		if ( $field_group && ( $sub_field_id || 0 === $sub_field_id ) ) {

			// Update the fields array w/ any modified properties inherited from the group field.
			$this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ] = $field_args;

			return $this->get_default_args( $field_args, $field_group );
		}

		if ( is_array( $field_args ) ) {
			$this->meta_box['fields'][ $field_id ] = array_merge( $field_args, $this->meta_box['fields'][ $field_id ] );
		}

		return $this->get_default_args( $this->meta_box['fields'][ $field_id ] );
	}

	/**
	 * Get default field arguments specific to this CMB2 object.
	 *
	 * @since  2.2.0
	 * @param  array      $field_args  Metabox field config array.
	 * @param  CMB2_Field $field_group (optional) CMB2_Field object (group parent).
	 * @return array                   Array of field arguments.
	 */
	protected function get_default_args( $field_args, $field_group = null ) {
		if ( $field_group ) {
			$args = array(
				'field_args'  => $field_args,
				'group_field' => $field_group,
			);
		} else {
			$args = array(
				'field_args'  => $field_args,
				'object_type' => $this->object_type(),
				'object_id'   => $this->object_id(),
				'cmb_id'      => $this->cmb_id,
			);
		}

		return $args;
	}

	/**
	 * When fields are added in the old-school way, intitate them as they should be
	 *
	 * @since 2.1.0
	 * @param array $fields          Array of fields to add.
	 * @param mixed $parent_field_id Parent field id or null.
	 *
	 * @return CMB2
	 */
	protected function add_fields( $fields, $parent_field_id = null ) {
		foreach ( $fields as $field ) {

			$sub_fields = false;
			if ( array_key_exists( 'fields', $field ) ) {
				$sub_fields = $field['fields'];
				unset( $field['fields'] );
			}

			$field_id = $parent_field_id
				? $this->add_group_field( $parent_field_id, $field )
				: $this->add_field( $field );

			if ( $sub_fields ) {
				$this->add_fields( $sub_fields, $field_id );
			}
		}

		return $this;
	}

	/**
	 * Add a field to the metabox
	 *
	 * @since  2.0.0
	 * @param  array $field    Metabox field config array.
	 * @param  int   $position (optional) Position of metabox. 1 for first, etc.
	 * @return string|false    Field id or false.
	 */
	public function add_field( array $field, $position = 0 ) {
		if ( ! array_key_exists( 'id', $field ) ) {
			return false;
		}

		$this->_add_field_to_array(
			$field,
			$this->meta_box['fields'],
			$position
		);

		return $field['id'];
	}

	/**
	 * Add a field to a group
	 *
	 * @since  2.0.0
	 * @param  string $parent_field_id The field id of the group field to add the field.
	 * @param  array  $field           Metabox field config array.
	 * @param  int    $position        (optional) Position of metabox. 1 for first, etc.
	 * @return mixed                   Array of parent/field ids or false.
	 */
	public function add_group_field( $parent_field_id, array $field, $position = 0 ) {
		if ( ! array_key_exists( $parent_field_id, $this->meta_box['fields'] ) ) {
			return false;
		}

		$parent_field = $this->meta_box['fields'][ $parent_field_id ];

		if ( 'group' !== $parent_field['type'] ) {
			return false;
		}

		if ( ! isset( $parent_field['fields'] ) ) {
			$this->meta_box['fields'][ $parent_field_id ]['fields'] = array();
		}

		$this->_add_field_to_array(
			$field,
			$this->meta_box['fields'][ $parent_field_id ]['fields'],
			$position
		);

		return array( $parent_field_id, $field['id'] );
	}

	/**
	 * Perform some field-type-specific initiation actions.
	 *
	 * @since  2.7.0
	 * @param  array $field Metabox field config array.
	 * @return void
	 */
	protected function field_actions( $field ) {
		$field = CMB2_Hookup_Field::init( $field, $this );

		if ( isset( $field['column'] ) && false !== $field['column'] ) {
			$field = $this->define_field_column( $field );
		}

		if ( isset( $field['taxonomy'] ) && ! empty( $field['remove_default'] ) ) {
			$this->tax_metaboxes_to_remove[ $field['taxonomy'] ] = $field['taxonomy'];
		}

		return $field;
	}

	/**
	 * Defines a field's column if requesting to be show in admin columns.
	 *
	 * @since  2.2.3
	 * @param  array $field Metabox field config array.
	 * @return array         Modified metabox field config array.
	 */
	protected function define_field_column( array $field ) {
		$this->has_columns = true;

		$column = is_array( $field['column'] ) ? $field['column'] : array();

		$field['column'] = wp_parse_args( $column, array(
			'name'     => isset( $field['name'] ) ? $field['name'] : '',
			'position' => false,
		) );

		return $field;
	}

	/**
	 * Add a field array to a fields array in desired position
	 *
	 * @since 2.0.2
	 * @param array   $field    Metabox field config array.
	 * @param array   $fields   Array (passed by reference) to append the field (array) to.
	 * @param integer $position Optionally specify a position in the array to be inserted.
	 */
	protected function _add_field_to_array( $field, &$fields, $position = 0 ) {
		$field = $this->field_actions( $field );

		if ( $position ) {
			CMB2_Utils::array_insert( $fields, array( $field['id'] => $field ), $position );
		} else {
			$fields[ $field['id'] ] = $field;
		}
	}

	/**
	 * Remove a field from the metabox
	 *
	 * @since 2.0.0
	 * @param  string $field_id        The field id of the field to remove.
	 * @param  string $parent_field_id (optional) The field id of the group field to remove field from.
	 * @return bool                    True if field was removed.
	 */
	public function remove_field( $field_id, $parent_field_id = '' ) {
		$ids = $this->get_field_ids( $field_id, $parent_field_id );

		if ( ! $ids ) {
			return false;
		}

		list( $field_id, $sub_field_id ) = $ids;

		unset( $this->fields[ implode( '', $ids ) ] );

		if ( ! $sub_field_id ) {
			unset( $this->meta_box['fields'][ $field_id ] );
			return true;
		}

		if ( isset( $this->fields[ $field_id ]->args['fields'][ $sub_field_id ] ) ) {
			unset( $this->fields[ $field_id ]->args['fields'][ $sub_field_id ] );
		}
		if ( isset( $this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ] ) ) {
			unset( $this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ] );
		}

		return true;
	}

	/**
	 * Update or add a property to a field
	 *
	 * @since  2.0.0
	 * @param  string $field_id        Field id.
	 * @param  string $property        Field property to set/update.
	 * @param  mixed  $value           Value to set the field property.
	 * @param  string $parent_field_id (optional) The field id of the group field to remove field from.
	 * @return mixed                   Field id. Strict compare to false, as success can return a falsey value (like 0).
	 */
	public function update_field_property( $field_id, $property, $value, $parent_field_id = '' ) {
		$ids = $this->get_field_ids( $field_id, $parent_field_id );

		if ( ! $ids ) {
			return false;
		}

		list( $field_id, $sub_field_id ) = $ids;

		if ( ! $sub_field_id ) {
			$this->meta_box['fields'][ $field_id ][ $property ] = $value;
			return $field_id;
		}

		$this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ][ $property ] = $value;
		return $field_id;
	}

	/**
	 * Check if field ids match a field and return the index/field id
	 *
	 * @since  2.0.2
	 * @param  string $field_id        Field id.
	 * @param  string $parent_field_id (optional) Parent field id.
	 * @return mixed                    Array of field/parent ids, or false.
	 */
	public function get_field_ids( $field_id, $parent_field_id = '' ) {
		$sub_field_id = $parent_field_id ? $field_id : '';
		$field_id     = $parent_field_id ? $parent_field_id : $field_id;
		$fields       =& $this->meta_box['fields'];

		if ( ! array_key_exists( $field_id, $fields ) ) {
			$field_id = $this->search_old_school_array( $field_id, $fields );
		}

		if ( false === $field_id ) {
			return false;
		}

		if ( ! $sub_field_id ) {
			return array( $field_id, $sub_field_id );
		}

		if ( 'group' !== $fields[ $field_id ]['type'] ) {
			return false;
		}

		if ( ! array_key_exists( $sub_field_id, $fields[ $field_id ]['fields'] ) ) {
			$sub_field_id = $this->search_old_school_array( $sub_field_id, $fields[ $field_id ]['fields'] );
		}

		return false === $sub_field_id ? false : array( $field_id, $sub_field_id );
	}

	/**
	 * When using the old array filter, it is unlikely field array indexes will be the field id.
	 *
	 * @since  2.0.2
	 * @param  string $field_id The field id.
	 * @param  array  $fields   Array of fields to search.
	 * @return mixed            Field index or false.
	 */
	public function search_old_school_array( $field_id, $fields ) {
		$ids = wp_list_pluck( $fields, 'id' );
		$index = array_search( $field_id, $ids );
		return false !== $index ? $index : false;
	}

	/**
	 * Handles metabox property callbacks, and passes this $cmb object as property.
	 *
	 * @since 2.2.3
	 * @param  callable $cb                The callback method/function/closure.
	 * @param  mixed    $additional_params Any additoinal parameters which should be passed to the callback.
	 * @return mixed                       Return of the callback function.
	 */
	public function do_callback( $cb, $additional_params = null ) {
		return call_user_func( $cb, $this, $additional_params );
	}

	/**
	 * Generate a unique nonce field for each registered meta_box
	 *
	 * @since  2.0.0
	 * @return void
	 */
	public function nonce_field() {
		wp_nonce_field( $this->nonce(), $this->nonce(), false, true );
	}

	/**
	 * Generate a unique nonce for each registered meta_box
	 *
	 * @since  2.0.0
	 * @return string unique nonce string.
	 */
	public function nonce() {
		if ( ! $this->generated_nonce ) {
			$this->generated_nonce = sanitize_html_class( 'nonce_' . basename( __FILE__ ) . $this->cmb_id );
		}

		return $this->generated_nonce;
	}

	/**
	 * Checks if field-saving updated any fields.
	 *
	 * @since  2.2.5
	 *
	 * @return bool
	 */
	public function was_updated() {
		return ! empty( $this->updated );
	}

	/**
	 * Whether this box is an "alternate context" box. This means the box has a 'context' property defined as:
	 * 'form_top', 'before_permalink', 'after_title', or 'after_editor'.
	 *
	 * @since  2.2.4
	 * @return bool
	 */
	public function is_alternate_context_box() {
		return $this->prop( 'context' ) && in_array( $this->prop( 'context' ), array( 'form_top', 'before_permalink', 'after_title', 'after_editor' ), true );
	}

	/**
	 * Whether given object type is one of the core supported object types.
	 *
	 * @since  2.11.0
	 * @return bool
	 */
	public function is_supported_core_object_type( $object_type ) {
		return in_array( $object_type, $this->core_object_types, true );
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param  string $property Object property.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $property ) {
		switch ( $property ) {
			case 'updated':
			case 'has_columns':
			case 'tax_metaboxes_to_remove':
			case 'core_object_types':
				return $this->{$property};
			default:
				return parent::__get( $property );
		}
	}

}
PK     ‚ŠU]tÙMô2  ô2  .  vendor/cmb2/cmb2/includes/helper-functions.phpnu „[µü¤        <?php
/**
 * CMB2 Helper Functions
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */

/**
 * Helper function to provide directory path to CMB2
 *
 * @since  2.0.0
 * @param  string $path Path to append.
 * @return string        Directory with optional path appended
 */
function cmb2_dir( $path = '' ) {
	return CMB2_DIR . $path;
}

/**
 * Autoloads files with CMB2 classes when needed
 *
 * @since  1.0.0
 * @param  string $class_name Name of the class being requested.
 */
function cmb2_autoload_classes( $class_name ) {
	if ( 0 !== strpos( $class_name, 'CMB2' ) ) {
		return;
	}

	$path = 'includes';

	if ( 'CMB2_Type' === $class_name || 0 === strpos( $class_name, 'CMB2_Type_' ) ) {
		$path .= '/types';
	}

	if ( 'CMB2_REST' === $class_name || 0 === strpos( $class_name, 'CMB2_REST_' ) ) {
		$path .= '/rest-api';
	}

	include_once cmb2_dir( "$path/{$class_name}.php" );
}

/**
 * Get instance of the CMB2_Utils class
 *
 * @since  2.0.0
 * @return CMB2_Utils object CMB2 utilities class
 */
function cmb2_utils() {
	static $cmb2_utils;
	$cmb2_utils = $cmb2_utils ? $cmb2_utils : new CMB2_Utils();
	return $cmb2_utils;
}

/**
 * Get instance of the CMB2_Ajax class
 *
 * @since  2.0.0
 * @return CMB2_Ajax object CMB2 ajax class
 */
function cmb2_ajax() {
	return CMB2_Ajax::get_instance();
}

/**
 * Get instance of the CMB2_Option class for the passed metabox ID
 *
 * @since  2.0.0
 *
 * @param string $key Option key to fetch.
 * @return CMB2_Option object Options class for setting/getting options for metabox
 */
function cmb2_options( $key ) {
	return CMB2_Options::get( $key );
}

/**
 * Get a cmb oEmbed. Handles oEmbed getting for non-post objects
 *
 * @since  2.0.0
 * @param  array $args Arguments. Accepts:
 *
 *       'url'         - URL to retrieve the oEmbed from,
 *       'object_id'   - $post_id,
 *       'object_type' - 'post',
 *       'oembed_args' - $embed_args, // array containing 'width', etc
 *       'field_id'    - false,
 *       'cache_key'   - false,
 *       'wp_error'    - true/false, // To return a wp_error object if no embed found.
 *
 * @return string        oEmbed string
 */
function cmb2_get_oembed( $args = array() ) {
	$oembed = cmb2_ajax()->get_oembed_no_edit( $args );

	// Send back our embed.
	if ( $oembed['embed'] && $oembed['embed'] != $oembed['fallback'] ) {
		return '<div class="cmb2-oembed">' . $oembed['embed'] . '</div>';
	}

	$error = sprintf(
		/* translators: 1: results for. 2: link to codex.wordpress.org/Embeds */
		esc_html__( 'No oEmbed Results Found for %1$s. View more info at %2$s.', 'cmb2' ),
		$oembed['fallback'],
		'<a href="https://wordpress.org/support/article/embeds/" target="_blank">codex.wordpress.org/Embeds</a>'
	);

	if ( isset( $args['wp_error'] ) && $args['wp_error'] ) {
		return new WP_Error( 'cmb2_get_oembed_result', $error, compact( 'oembed', 'args' ) );
	}

	// Otherwise, send back error info that no oEmbeds were found.
	return '<p class="ui-state-error-text">' . $error . '</p>';
}

/**
 * Outputs the return of cmb2_get_oembed.
 *
 * @since  2.2.2
 * @see cmb2_get_oembed
 *
 * @param array $args oEmbed args.
 */
function cmb2_do_oembed( $args = array() ) {
	echo cmb2_get_oembed( $args );
}
add_action( 'cmb2_do_oembed', 'cmb2_do_oembed' );

/**
 * A helper function to get an option from a CMB2 options array
 *
 * @since  1.0.1
 * @param  string $option_key Option key.
 * @param  string $field_id   Option array field key.
 * @param  mixed  $default    Optional default fallback value.
 * @return array               Options array or specific field
 */
function cmb2_get_option( $option_key, $field_id = '', $default = false ) {
	return cmb2_options( $option_key )->get( $field_id, $default );
}

/**
 * A helper function to update an option in a CMB2 options array
 *
 * @since  2.0.0
 * @param  string  $option_key Option key.
 * @param  string  $field_id   Option array field key.
 * @param  mixed   $value      Value to update data with.
 * @param  boolean $single     Whether data should not be an array.
 * @return boolean             Success/Failure
 */
function cmb2_update_option( $option_key, $field_id, $value, $single = true ) {
	if ( cmb2_options( $option_key )->update( $field_id, $value, false, $single ) ) {
		return cmb2_options( $option_key )->set();
	}

	return false;
}

/**
 * Get a CMB2 field object.
 *
 * @since  1.1.0
 * @param  array      $meta_box    Metabox ID or Metabox config array.
 * @param  array      $field_id    Field ID or all field arguments.
 * @param  int|string $object_id   Object ID (string for options-page).
 * @param  string     $object_type Type of object being saved. (e.g., post, user, term, comment, or options-page).
 *                             Defaults to metabox object type.
 * @return CMB2_Field|null     CMB2_Field object unless metabox config cannot be found
 */
function cmb2_get_field( $meta_box, $field_id, $object_id = 0, $object_type = '' ) {

	$object_id = $object_id ? $object_id : get_the_ID();
	$cmb = $meta_box instanceof CMB2 ? $meta_box : cmb2_get_metabox( $meta_box, $object_id );

	if ( ! $cmb ) {
		return;
	}

	$cmb->object_type( $object_type ? $object_type : $cmb->mb_object_type() );

	return $cmb->get_field( $field_id );
}

/**
 * Get a field's value.
 *
 * @since  1.1.0
 * @param  array      $meta_box    Metabox ID or Metabox config array.
 * @param  array      $field_id    Field ID or all field arguments.
 * @param  int|string $object_id   Object ID (string for options-page).
 * @param  string     $object_type Type of object being saved. (e.g., post, user, term, comment, or options-page).
 *                             Defaults to metabox object type.
 * @return mixed               Maybe escaped value
 */
function cmb2_get_field_value( $meta_box, $field_id, $object_id = 0, $object_type = '' ) {
	$field = cmb2_get_field( $meta_box, $field_id, $object_id, $object_type );
	return $field->escaped_value();
}

/**
 * Because OOP can be scary
 *
 * @since  2.0.2
 * @param  array $meta_box_config Metabox Config array.
 * @return CMB2 object            Instantiated CMB2 object
 */
function new_cmb2_box( array $meta_box_config ) {
	return cmb2_get_metabox( $meta_box_config );
}

/**
 * Retrieve a CMB2 instance by the metabox ID
 *
 * @since  2.0.0
 * @param  mixed      $meta_box    Metabox ID or Metabox config array.
 * @param  int|string $object_id   Object ID (string for options-page).
 * @param  string     $object_type Type of object being saved.
 *                                 (e.g., post, user, term, comment, or options-page).
 *                                 Defaults to metabox object type.
 * @return CMB2 object
 */
function cmb2_get_metabox( $meta_box, $object_id = 0, $object_type = '' ) {

	if ( $meta_box instanceof CMB2 ) {
		return $meta_box;
	}

	if ( is_string( $meta_box ) ) {
		$cmb = CMB2_Boxes::get( $meta_box );
	} else {
		// See if we already have an instance of this metabox.
		$cmb = CMB2_Boxes::get( $meta_box['id'] );
		// If not, we'll initate a new metabox.
		$cmb = $cmb ? $cmb : new CMB2( $meta_box, $object_id );
	}

	if ( $cmb && $object_id ) {
		$cmb->object_id( $object_id );
	}

	if ( $cmb && $object_type ) {
		$cmb->object_type( $object_type );
	}

	return $cmb;
}

/**
 * Returns array of sanitized field values from a metabox (without saving them)
 *
 * @since  2.0.3
 * @param  mixed $meta_box         Metabox ID or Metabox config array.
 * @param  array $data_to_sanitize Array of field_id => value data for sanitizing (likely $_POST data).
 * @return mixed                   Array of sanitized values or false if no CMB2 object found
 */
function cmb2_get_metabox_sanitized_values( $meta_box, array $data_to_sanitize ) {
	$cmb = cmb2_get_metabox( $meta_box );
	return $cmb ? $cmb->get_sanitized_values( $data_to_sanitize ) : false;
}

/**
 * Retrieve a metabox form
 *
 * @since  2.0.0
 * @param  mixed      $meta_box  Metabox config array or Metabox ID.
 * @param  int|string $object_id Object ID (string for options-page).
 * @param  array $args           Optional arguments array.
 * @return string             CMB2 html form markup
 */
function cmb2_get_metabox_form( $meta_box, $object_id = 0, $args = array() ) {

	$object_id = $object_id ? $object_id : get_the_ID();
	$cmb       = cmb2_get_metabox( $meta_box, $object_id );

	ob_start();
	// Get cmb form.
	cmb2_print_metabox_form( $cmb, $object_id, $args );
	$form = ob_get_clean();

	return apply_filters( 'cmb2_get_metabox_form', $form, $object_id, $cmb );
}

/**
 * Display a metabox form & save it on submission
 *
 * @since  1.0.0
 * @param  mixed      $meta_box  Metabox config array or Metabox ID.
 * @param  int|string $object_id Object ID (string for options-page).
 * @param  array $args           Optional arguments array.
 */
function cmb2_print_metabox_form( $meta_box, $object_id = 0, $args = array() ) {

	$object_id = $object_id ? $object_id : get_the_ID();
	$cmb = cmb2_get_metabox( $meta_box, $object_id );

	// if passing a metabox ID, and that ID was not found.
	if ( ! $cmb ) {
		return;
	}

	$args = wp_parse_args( $args, array(
		'form_format' => '<form class="cmb-form" method="post" id="%1$s" enctype="multipart/form-data" encoding="multipart/form-data"><input type="hidden" name="object_id" value="%2$s">%3$s<input type="submit" name="submit-cmb" value="%4$s" class="button-primary"></form>',
		'save_button' => esc_html__( 'Save', 'cmb2' ),
		'object_type' => $cmb->mb_object_type(),
		'cmb_styles'  => $cmb->prop( 'cmb_styles' ),
		'enqueue_js'  => $cmb->prop( 'enqueue_js' ),
	) );

	// Set object type explicitly (rather than trying to guess from context).
	$cmb->object_type( $args['object_type'] );

	// Save the metabox if it's been submitted
	// check permissions
	// @todo more hardening?
	if (
		$cmb->prop( 'save_fields' )
		// check nonce.
		&& isset( $_POST['submit-cmb'], $_POST['object_id'], $_POST[ $cmb->nonce() ] )
		&& wp_verify_nonce( $_POST[ $cmb->nonce() ], $cmb->nonce() )
		&& $object_id && $_POST['object_id'] == $object_id
	) {
		$cmb->save_fields( $object_id, $cmb->object_type(), $_POST );
	}

	// Enqueue JS/CSS.
	if ( $args['cmb_styles'] ) {
		CMB2_Hookup::enqueue_cmb_css();
	}

	if ( $args['enqueue_js'] ) {
		CMB2_Hookup::enqueue_cmb_js();
	}

	$form_format = apply_filters( 'cmb2_get_metabox_form_format', $args['form_format'], $object_id, $cmb );

	$format_parts = explode( '%3$s', $form_format );

	// Show cmb form.
	printf( $format_parts[0], esc_attr( $cmb->cmb_id ), esc_attr( $object_id ) );
	$cmb->show_form();

	if ( isset( $format_parts[1] ) && $format_parts[1] ) {
		printf( str_ireplace( '%4$s', '%1$s', $format_parts[1] ), esc_attr( $args['save_button'] ) );
	}
}

/**
 * Display a metabox form (or optionally return it) & save it on submission.
 *
 * @since  1.0.0
 * @param  mixed      $meta_box  Metabox config array or Metabox ID.
 * @param  int|string $object_id Object ID (string for options-page).
 * @param  array      $args      Optional arguments array.
 * @return string
 */
function cmb2_metabox_form( $meta_box, $object_id = 0, $args = array() ) {
	if ( ! isset( $args['echo'] ) || $args['echo'] ) {
		cmb2_print_metabox_form( $meta_box, $object_id, $args );
	} else {
		return cmb2_get_metabox_form( $meta_box, $object_id, $args );
	}
}

if ( ! function_exists( 'date_create_from_format' ) ) {

	/**
	 * Reimplementation of DateTime::createFromFormat for PHP < 5.3. :(
	 * Borrowed from http://stackoverflow.com/questions/5399075/php-datetimecreatefromformat-in-5-2
	 *
	 * @param string $date_format Date format.
	 * @param string $date_value  Date value.
	 *
	 * @return DateTime
	 */
	function date_create_from_format( $date_format, $date_value ) {

		$schedule_format = str_replace(
			array( 'M', 'Y', 'm', 'd', 'H', 'i', 'a' ),
			array( '%b', '%Y', '%m', '%d', '%H', '%M', '%p' ),
			$date_format
		);

		/*
		 * %Y, %m and %d correspond to date()'s Y m and d.
		 * %I corresponds to H, %M to i and %p to a
		 */
		// phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.strptimeDeprecated
		$parsed_time = strptime( $date_value, $schedule_format );

		$ymd = sprintf(
			/**
			 * This is a format string that takes six total decimal
			 * arguments, then left-pads them with zeros to either
			 * 4 or 2 characters, as needed
			 */
			'%04d-%02d-%02d %02d:%02d:%02d',
			$parsed_time['tm_year'] + 1900,  // This will be "111", so we need to add 1900.
			$parsed_time['tm_mon'] + 1,      // This will be the month minus one, so we add one.
			$parsed_time['tm_mday'],
			$parsed_time['tm_hour'],
			$parsed_time['tm_min'],
			$parsed_time['tm_sec']
		);

		return new DateTime( $ymd );
	}
}// End if.

if ( ! function_exists( 'date_timestamp_get' ) ) {

	/**
	 * Returns the Unix timestamp representing the date.
	 * Reimplementation of DateTime::getTimestamp for PHP < 5.3. :(
	 *
	 * @param DateTime $date DateTime instance.
	 *
	 * @return int
	 */
	function date_timestamp_get( DateTime $date ) {
		return $date->format( 'U' );
	}
}// End if.
PK     ‚ŠU]þÄ×	  	  =  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Select.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_select field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Select extends CMB2_Type_Taxonomy_Base {

	/**
	 * Current Term Object.
	 *
	 * @since 2.6.1
	 *
	 * @var   null|WP_Term
	 */
	public $current_term = null;

	/**
	 * Saved Term Object.
	 *
	 * @since 2.6.1
	 *
	 * @var   null|WP_Term
	 */
	public $saved_term = null;

	public function render() {
		return $this->rendered(
			$this->types->select( array(
				'options' => $this->get_term_options(),
			) )
		);
	}

	protected function get_term_options() {
		$all_terms = $this->get_terms();

		if ( ! $all_terms || is_wp_error( $all_terms ) ) {
			return $this->no_terms_result( $all_terms, 'strong' );
		}

		$this->saved_term  = $this->get_object_term_or_default();
		$option_none = $this->field->args( 'show_option_none' );
		$options     = '';

		if ( ! empty( $option_none ) ) {

			$field_id = $this->_id( '', false );

			/**
			 * Default (option-none) taxonomy-select value.
			 *
			 * @since 1.3.0
			 *
			 * @param string $option_none_value Default (option-none) taxonomy-select value.
			 */
			$option_none_value = apply_filters( 'cmb2_taxonomy_select_default_value', '' );

			/**
			 * Default (option-none) taxonomy-select value.
			 *
			 * The dynamic portion of the hook name, $field_id, refers to the field id attribute.
			 *
			 * @since 1.3.0
			 *
			 * @param string $option_none_value Default (option-none) taxonomy-select value.
			 */
			$option_none_value = apply_filters( "cmb2_taxonomy_select_{$field_id}_default_value", $option_none_value );

			$options .= $this->select_option( array(
				'label'   => $option_none,
				'value'   => $option_none_value,
				'checked' => $this->saved_term == $option_none_value,
			) );
		}

		$options .= $this->loop_terms( $all_terms, $this->saved_term );

		return $options;
	}

	protected function loop_terms( $all_terms, $saved_term ) {
		$options = '';

		foreach ( $all_terms as $term ) {
			$this->current_term = $term;
			$options .= $this->select_option( array(
				'label'   => $term->name,
				'value'   => $term->slug,
				'checked' => $this->saved_term === $term->slug,
			) );
		}

		return $options;
	}
}
PK     ‚ŠU]�g»8’  ’  <  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Radio.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_radio field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Radio extends CMB2_Type_Taxonomy_Base {
	protected $counter = 0;

	public function render() {
		return $this->rendered(
			$this->types->radio( array(
				'options' => $this->get_term_options(),
			), 'taxonomy_radio' )
		);
	}

	protected function get_term_options() {
		$all_terms = $this->get_terms();

		if ( ! $all_terms || is_wp_error( $all_terms ) ) {
			return $this->no_terms_result( $all_terms );
		}

		$saved_term  = $this->get_object_term_or_default();
		$option_none = $this->field->args( 'show_option_none' );
		$options     = '';

		if ( ! empty( $option_none ) ) {

			$field_id = $this->_id( '', false );

			/**
			 * Default (option-none) taxonomy-radio value.
			 *
			 * @since 1.3.0
			 *
			 * @param string $option_none_value Default (option-none) taxonomy-radio value.
			 */
			$option_none_value = apply_filters( 'cmb2_taxonomy_radio_default_value', '' );

			/**
			 * Default (option-none) taxonomy-radio value.
			 *
			 * The dynamic portion of the hook name, $field_id, refers to the field id attribute.
			 *
			 * @since 1.3.0
			 *
			 * @param string $option_none_value Default (option-none) taxonomy-radio value.
			 */
			$option_none_value = apply_filters( "cmb2_taxonomy_radio_{$field_id}_default_value", $option_none_value );

			$options .= $this->list_term_input( (object) array(
				'slug' => $option_none_value,
				'name' => $option_none,
			), $saved_term );
		}

		$options .= $this->loop_terms( $all_terms, $saved_term );

		return $options;
	}

	protected function loop_terms( $all_terms, $saved_term ) {
		$options = '';
		foreach ( $all_terms as $term ) {
			$options .= $this->list_term_input( $term, $saved_term );
		}

		return $options;
	}

	protected function list_term_input( $term, $saved_term ) {
		$args = array(
			'value' => $term->slug,
			'label' => $term->name,
		);

		if ( $saved_term == $term->slug ) {
			$args['checked'] = 'checked';
		}

		return $this->list_input( $args, ++$this->counter );
	}

}
PK     ‚ŠU]ð5—Df  f  9  vendor/cmb2/cmb2/includes/types/CMB2_Type_Picker_Base.phpnu „[µü¤        <?php
/**
 * CMB Picker base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
abstract class CMB2_Type_Picker_Base extends CMB2_Type_Text {

	/**
	 * Parse the picker attributes.
	 *
	 * @since  2.2.0
	 * @param  string $arg  'date' or 'time'
	 * @param  array  $args Optional arguments to modify (else use $this->field->args['attributes'])
	 * @return array         Array of field attributes
	 */
	public function parse_picker_options( $arg = 'date', $args = array() ) {
		$att    = 'data-' . $arg . 'picker';
		$update = empty( $args );
		$atts   = array();
		$format = $this->field->args( $arg . '_format' );

		if ( $js_format = CMB2_Utils::php_to_js_dateformat( $format ) ) {

			if ( $update ) {
				$atts = $this->field->args( 'attributes' );
			} else {
				$atts = isset( $args['attributes'] )
					? $args['attributes']
					: $atts;
			}

			// Don't override user-provided datepicker values
			$data = isset( $atts[ $att ] )
				? json_decode( $atts[ $att ], true )
				: array();

			$data[ $arg . 'Format' ] = $js_format;
			$atts[ $att ] = function_exists( 'wp_json_encode' )
				? wp_json_encode( $data )
				: json_encode( $data );
		}

		if ( $update ) {
			$this->field->args['attributes'] = $atts;
		}

		return array_merge( $args, $atts );
	}
}
PK     ‚ŠU]Ù("Ÿ  Ÿ  ;  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Base.phpnu „[µü¤        <?php
/**
 * CMB Taxonomy base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
abstract class CMB2_Type_Taxonomy_Base extends CMB2_Type_Multi_Base {

	/**
	 * Parent term ID when looping hierarchical terms.
	 *
	 * @var integer|null
	 */
	protected $parent = null;

	/**
	 * Checks if we can get a post object, and if so, uses `get_the_terms` which utilizes caching.
	 *
	 * @since  1.0.2
	 * @return mixed Array of terms on success
	 */
	public function get_object_terms() {
		switch ( $this->field->object_type ) {
			case 'options-page':
			case 'term':
				return $this->options_terms();
			case 'post':
				// WP caches internally so it's better to use
				return get_the_terms( $this->field->object_id, $this->field->args( 'taxonomy' ) );

			default:
				return $this->non_post_object_terms();
		}
	}

	/**
	 * Gets the term objects for the terms stored via options boxes.
	 *
	 * @since  2.2.4
	 * @return mixed Array of terms on success
	 */
	public function options_terms() {
		if ( empty( $this->field->value ) ) {
			return array();
		}

		$terms = (array) $this->field->value;

		foreach ( $terms as $index => $term ) {
			$terms[ $index ] = get_term_by( 'slug', $term, $this->field->args( 'taxonomy' ) );
		}

		return $terms;
	}

	/**
	 * For non-post objects, wraps the call to wp_get_object_terms with transient caching.
	 *
	 * @since  2.2.4
	 * @return mixed Array of terms on success
	 */
	public function non_post_object_terms() {
		$object_id = $this->field->object_id;
		$taxonomy = $this->field->args( 'taxonomy' );

		$cache_key = "cmb-cache-{$taxonomy}-{$object_id}";

		// Check cache
		$cached = get_transient( $cache_key );

		if ( ! $cached ) {
			$cached = wp_get_object_terms( $object_id, $taxonomy );
			// Do our own (minimal) caching. Long enough for a page-load.
			set_transient( $cache_key, $cached, 60 );
		}

		return $cached;
	}

	/**
	 * Wrapper for `get_terms` to account for changes in WP 4.6 where taxonomy is expected
	 * as part of the arguments.
	 *
	 * @since  2.2.2
	 * @return mixed Array of terms on success
	 */
	public function get_terms() {
		$args = array(
			'taxonomy'   => $this->field->args( 'taxonomy' ),
			'hide_empty' => false,
		);

		if ( null !== $this->parent ) {
			$args['parent'] = $this->parent;
		}

		$args = wp_parse_args( $this->field->prop( 'query_args', array() ), $args );

		return CMB2_Utils::wp_at_least( '4.5.0' )
			? get_terms( $args )
			: get_terms( $this->field->args( 'taxonomy' ), http_build_query( $args ) );
	}

	protected function no_terms_result( $error, $tag = 'li' ) {
		if ( is_wp_error( $error ) ) {
			$message = $error->get_error_message();
			$data = 'data-error="' . esc_attr( $error->get_error_code() ) . '"';
		} else {
			$message = $this->_text( 'no_terms_text', esc_html__( 'No terms', 'cmb2' ) );
			$data = '';
		}

		$this->field->args['select_all_button'] = false;

		return sprintf( '<%3$s><label %1$s>%2$s</label></%3$s>', $data, esc_html( $message ), $tag );
	}

	public function get_object_term_or_default() {
		$saved_terms = $this->get_object_terms();

		return is_wp_error( $saved_terms ) || empty( $saved_terms )
			? $this->field->get_default()
			: array_shift( $saved_terms )->slug;
	}

	/**
	 * Takes a list of all tax terms and outputs.
	 *
	 * @since  2.2.5
	 *
	 * @param  array  $all_terms   Array of all terms.
	 * @param  array|string $saved Array of terms set to the object, or single term slug.
	 *
	 * @return string              List of terms.
	 */
	protected function loop_terms( $all_terms, $saved_terms ) {
		return '';
	}

	/**
	 * Build children hierarchy.
	 *
	 * @param  object       $parent_term The parent term object.
	 * @param  array|string $saved       Array of terms set to the object, or single term slug.
	 *
	 * @return string                    List of terms.
	 */
	protected function build_children( $parent_term, $saved ) {
		if ( empty( $parent_term->term_id ) ) {
			return '';
		}

		$this->parent = $parent_term->term_id;

		$terms   = $this->get_terms();
		$options = '';

		if ( ! empty( $terms ) && is_array( $terms ) ) {
			$options .= $this->child_option_output( $terms, $saved );
		}

		return $options;
	}

	/**
	 * Build child terms output.
	 *
	 * @since  2.6.1
	 *
	 * @param  array        $terms Array of child terms.
	 * @param  array|string $saved Array of terms set to the object, or single term slug.
	 *
	 * @return string              Child option output.
	 */
	public function child_option_output( $terms, $saved ) {
		$output = '<li class="cmb2-indented-hierarchy"><ul>';
		$output .= $this->loop_terms( $terms, $saved );
		$output .= '</ul></li>';

		return $output;
	}

}
PK     ‚ŠU]¡Ðq‰Ó  Ó  N  vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Datetime_Timestamp_Timezone.phpnu „[µü¤        <?php
/**
 * CMB text_datetime_timestamp_timezone field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Text_Datetime_Timestamp_Timezone extends CMB2_Type_Base {

	public function render( $args = array() ) {
		$field = $this->field;

		$value = $field->escaped_value();
		if ( empty( $value ) ) {
			$value = $field->get_default();
		}

		$args = wp_parse_args( $this->args, array(
			'value'                   => $value,
			'desc'                    => $this->_desc( true ),
			'text_datetime_timestamp' => array(),
			'select_timezone'         => array(),
		) );

		$args['value'] = $value;
		if ( is_array( $args['value'] ) ) {
			$args['value'] = '';
		}

		$datetime = CMB2_Utils::get_datetime_from_value( $args['value'] );
		$value    = '';
		$tzstring = '';

		if ( $datetime && $datetime instanceof DateTime ) {
			$tzstring = $datetime->getTimezone()->getName();
			$value    = $datetime->getTimestamp();
		}

		$timestamp_args = wp_parse_args( $args['text_datetime_timestamp'], array(
			'desc'     => '',
			'value'    => $value,
			'rendered' => true,
		) );
		$datetime_timestamp = $this->types->text_datetime_timestamp( $timestamp_args );

		$timezone_select_args = wp_parse_args( $args['select_timezone'], array(
			'class'    => 'cmb2_select cmb2-select-timezone',
			'name'     => $this->_name( '[timezone]' ),
			'id'       => $this->_id( '_timezone' ),
			'options'  => wp_timezone_choice( $tzstring ),
			'desc'     => $args['desc'],
			'rendered' => true,
		) );
		$select = $this->types->select( $timezone_select_args );

		return $this->rendered(
			$datetime_timestamp . "\n" . $select
		);
	}
}
PK     ‚ŠU]kèfJ  J  I  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Radio_Hierarchical.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_radio_hierarchical field type
 *
 * @since  2.2.5
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Radio_Hierarchical extends CMB2_Type_Taxonomy_Radio {

	/**
	 * Parent term ID when looping hierarchical terms.
	 *
	 * @var integer
	 */
	protected $parent = 0;

	public function render() {
		return $this->rendered(
			$this->types->radio( array(
				'options' => $this->get_term_options(),
			), 'taxonomy_radio_hierarchical' )
		);
	}

	protected function list_term_input( $term, $saved_term ) {
		$options = parent::list_term_input( $term, $saved_term );
		$children = $this->build_children( $term, $saved_term );

		if ( ! empty( $children ) ) {
			$options .= $children;
		}

		return $options;
	}

}
PK     ‚ŠU]Ãhý	˜  ˜  :  vendor/cmb2/cmb2/includes/types/CMB2_Type_Counter_Base.phpnu „[µü¤        <?php
/**
 * CMB base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
abstract class CMB2_Type_Counter_Base extends CMB2_Type_Base {

	/**
	 * Whether this type has the counter added.
	 *
	 * @since  2.7.0
	 *
	 * @var boolean
	 */
	public $has_counter = false;

	/**
	 * Return character counter markup for this field.
	 *
	 * @since  2.7.0
	 *
	 * @param  string $val The actual value of this field.
	 *
	 * @return string
	 */
	public function char_counter_markup( $val ) {
		$markup = '';

		if ( ! $this->field->args( 'char_counter' ) ) {
			return $markup;
		}

		$type     = (string) $this->field->args( 'char_counter' );
		$field_id = $this->_id( '', false );
		$char_max = (int) $this->field->prop( 'char_max' );
		if ( $char_max ) {
			$char_max = 'data-max="' . $char_max . '"';
		}

		switch ( $type ) {
			case 'words':
				$label = $char_max
					? $this->_text( 'words_left_text', esc_html__( 'Words left', 'cmb2' ) )
					: $this->_text( 'words_text', esc_html__( 'Words', 'cmb2' ) );
				break;
			default:
				$type  = 'characters';
				$label = $char_max
					? $this->_text( 'characters_left_text', esc_html__( 'Characters left', 'cmb2' ) )
					: $this->_text( 'characters_text', esc_html__( 'Characters', 'cmb2' ) );
				break;
		}

		$msg = $char_max
			? sprintf( '<span class="cmb2-char-max-msg">%s</span>', $this->_text( 'characters_truncated_text', esc_html__( 'Your text may be truncated.', 'cmb2' ) ) )
			: '';

		$length = strlen( $val );
		$width  = $length > 1 ? ( 8 * strlen( (string) $length ) ) + 15 : false;

		$markup .= '<p class="cmb2-char-counter-wrap">';
		$markup .= sprintf(
			'<label><span class="cmb2-char-counter-label">%2$s:</span> <input id="%1$s" data-field-id="%3$s" data-counter-type="%4$s" %5$s class="cmb2-char-counter" type="text" value="%6$s" readonly="readonly" style="%7$s"></label>%8$s',
			esc_attr( 'char-counter-' . $field_id ),
			$label,
			esc_attr( $field_id ),
			$type,
			$char_max,
			$length,
			$width ? "width: {$width}px;" : '',
			$msg
		);
		$markup .= '</p>';

		// Enqueue the required JS.
		$this->field->add_js_dependencies( array(
			'word-count',
			'wp-util',
			'cmb2-char-counter',
		) );

		$this->has_counter = true;

		return $markup;
	}

	/**
	 * Maybe update attributes for the character counter.
	 *
	 * @since  2.7.0
	 *
	 * @param  array  $attributes Array of parsed attributes.
	 *
	 * @return array              Potentially modified attributes.
	 */
	public function maybe_update_attributes_for_char_counter( $attributes ) {
		$char_counter = $this->char_counter_markup( $attributes['value'] );

		// Has character counter?
		if ( $char_counter ) {
			$attributes['class'] = ! empty( $attributes['class'] ) ? $attributes['class'] . ' cmb2-count-chars' : ' cmb2-count-chars';

			// Enforce max chars?
			$max = $this->enforce_max();
			if ( $max ) {
				$attributes['maxlength'] = $max;
			}
			$attributes['desc'] = $char_counter . $attributes['desc'];
		}

		return $attributes;
	}

	/**
	 * Enforce max chars?
	 *
	 * @since  2.7.0
	 *
	 * @return bool Whether to enforce max characters.
	 */
	public function enforce_max() {
		$char_max = (int) $this->field->args( 'char_max' );

		// Enforce max chars?
		return ( $this->field->args( 'char_max_enforce' ) && $char_max > 0
			&& 'words' !== $this->field->args( 'char_counter' ) )
			? $char_max
			: false;
	}

}
PK     ‚ŠU]ë�I�  �  2  vendor/cmb2/cmb2/includes/types/CMB2_Type_Text.phpnu „[µü¤        <?php
/**
 * CMB text field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Text extends CMB2_Type_Counter_Base {

	/**
	 * The type of field
	 *
	 * @var string
	 */
	public $type = 'input';

	/**
	 * Constructor
	 *
	 * @since 2.2.2
	 *
	 * @param CMB2_Types $types
	 * @param array      $args
	 */
	public function __construct( CMB2_Types $types, $args = array(), $type = '' ) {
		parent::__construct( $types, $args );
		$this->type = $type ? $type : $this->type;
	}

	/**
	 * Handles outputting an 'input' element
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @return string       Form input element
	 */
	public function render( $args = array() ) {
		$args = empty( $args ) ? $this->args : $args;
		$a = $this->parse_args( $this->type, array(
			'type'            => 'text',
			'class'           => 'regular-text',
			'name'            => $this->_name(),
			'id'              => $this->_id(),
			'value'           => $this->field->escaped_value(),
			'desc'            => $this->_desc( true ),
			'js_dependencies' => array(),
		), $args );

		// Add character counter?
		$a = $this->maybe_update_attributes_for_char_counter( $a );

		return $this->rendered(
			sprintf( '<input%s/>%s', $this->concat_attrs( $a, array( 'desc' ) ), $a['desc'] )
		);
	}
}
PK     ‚ŠU]ò{ÒÔª  ª  ;  vendor/cmb2/cmb2/includes/types/CMB2_Type_Textarea_Code.phpnu „[µü¤        <?php
/**
 * CMB textarea_code field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Textarea_Code extends CMB2_Type_Textarea {

	/**
	 * Handles outputting an 'textarea' element
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @return string       Form textarea element
	 */
	public function render( $args = array() ) {
		$args = wp_parse_args( $args, array(
			'class' => 'cmb2-textarea-code',
			'desc'  => '</pre>' . $this->_desc( true ),
		) );

		if ( true !== $this->field->options( 'disable_codemirror' )
			&& function_exists( 'wp_enqueue_code_editor' ) ) {
			$args['js_dependencies'] = array( 'code-editor' );
		} else {
			$args['class'] = rtrim( $args['class'] ) . ' disable-codemirror';
		}

		return $this->rendered(
			sprintf( '<pre>%s', parent::render( $args ) )
		);
	}
}
PK     ‚ŠU]i�ÒØÆ!  Æ!  7  vendor/cmb2/cmb2/includes/types/CMB2_Type_File_Base.phpnu „[µü¤        <?php
/**
 * CMB File base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_File_Base extends CMB2_Type_Text {

	/**
	 * Determines if a file has a valid image extension
	 *
	 * @since  1.0.0
	 * @param  string $file File url
	 * @return bool         Whether file has a valid image extension
	 */
	public function is_valid_img_ext( $file, $blah = false ) {
		$file_ext = CMB2_Utils::get_file_ext( $file );

		$valid_types = array( 'jpg', 'jpeg', 'jpe', 'png', 'gif', 'ico', 'icon' );

		$allowed = get_allowed_mime_types();
		if ( ! empty( $allowed ) ) {
			foreach ( (array) $allowed as $type => $mime ) {
				if ( 0 === strpos( $mime, 'image/' ) ) {
					$types = explode( '|', $type );
					$valid_types = array_merge( $valid_types, $types );
				}
			}
			$valid_types = array_unique( $valid_types );
		}

		/**
		 * Which image types are considered valid image file extensions.
		 *
		 * @since 2.0.9
		 *
		 * @param array $valid_types The valid image file extensions.
		 */
		$is_valid_types = apply_filters( 'cmb2_valid_img_types', $valid_types );
		$is_valid = $file_ext && in_array( $file_ext, (array) $is_valid_types );
		$field_id = $this->field->id();

		/**
		 * Filter for determining if a field value has a valid image file-type extension.
		 *
		 * The dynamic portion of the hook name, $field_id, refers to the field id attribute.
		 *
		 * @since 2.0.9
		 *
		 * @param bool   $is_valid Whether field value has a valid image file-type extension.
		 * @param string $file     File url.
		 * @param string $file_ext File extension.
		 */
		return (bool) apply_filters( "cmb2_{$field_id}_is_valid_img_ext", $is_valid, $file, $file_ext );
	}

	/**
	 * file/file_list image wrap
	 *
	 * @since  2.0.2
	 * @param  array $args Array of arguments for output
	 * @return string       Image wrap output
	 */
	public function img_status_output( $args ) {
		return sprintf( '<%1$s class="img-status cmb2-media-item">%2$s<p class="cmb2-remove-wrapper"><a href="#" class="cmb2-remove-file-button"%3$s>%4$s</a></p>%5$s</%1$s>',
			$args['tag'],
			$args['image'],
			isset( $args['cached_id'] ) ? ' rel="' . esc_attr( $args['cached_id'] ) . '"' : '',
			esc_html( $this->_text( 'remove_image_text', esc_html__( 'Remove Image', 'cmb2' ) ) ),
			isset( $args['id_input'] ) ? $args['id_input'] : ''
		);
	}

	/**
	 * file/file_list file wrap
	 *
	 * @since  2.0.2
	 * @param  array $args Array of arguments for output
	 * @return string       File wrap output
	 */
	public function file_status_output( $args ) {
		return sprintf( '<%1$s class="file-status cmb2-media-item"><span>%2$s <strong>%3$s</strong></span>&nbsp;&nbsp; (<a href="%4$s" target="_blank" rel="external">%5$s</a> / <a href="#" class="cmb2-remove-file-button"%6$s>%7$s</a>)%8$s</%1$s>',
			$args['tag'],
			esc_html( $this->_text( 'file_text', esc_html__( 'File:', 'cmb2' ) ) ),
			esc_html( CMB2_Utils::get_file_name_from_path( $args['value'] ) ),
			esc_url( $args['value'] ),
			esc_html( $this->_text( 'file_download_text', esc_html__( 'Download', 'cmb2' ) ) ),
			isset( $args['cached_id'] ) ? ' rel="' . esc_attr( $args['cached_id'] ) . '"' : '',
			esc_html( $this->_text( 'remove_text', esc_html__( 'Remove', 'cmb2' ) ) ),
			isset( $args['id_input'] ) ? $args['id_input'] : ''
		);
	}

	/**
	 * Outputs the file/file_list underscore Javascript templates in the footer.
	 *
	 * @since  2.2.4
	 * @return void
	 */
	public static function output_js_underscore_templates() {
		?>
		<script type="text/html" id="tmpl-cmb2-single-image">
			<div class="img-status cmb2-media-item">
				<img width="{{ data.sizeWidth }}" height="{{ data.sizeHeight }}" src="{{ data.sizeUrl }}" class="cmb-file-field-image" alt="{{ data.filename }}" title="{{ data.filename }}" />
				<p><a href="#" class="cmb2-remove-file-button" rel="{{ data.mediaField }}">{{ data.stringRemoveImage }}</a></p>
			</div>
		</script>
		<script type="text/html" id="tmpl-cmb2-single-file">
			<div class="file-status cmb2-media-item">
				<span>{{ data.stringFile }} <strong>{{ data.filename }}</strong></span>&nbsp;&nbsp; (<a href="{{ data.url }}" target="_blank" rel="external">{{ data.stringDownload }}</a> / <a href="#" class="cmb2-remove-file-button" rel="{{ data.mediaField }}">{{ data.stringRemoveFile }}</a>)
			</div>
		</script>
		<script type="text/html" id="tmpl-cmb2-list-image">
			<li class="img-status cmb2-media-item">
				<img width="{{ data.sizeWidth }}" height="{{ data.sizeHeight }}" src="{{ data.sizeUrl }}" class="cmb-file_list-field-image" alt="{{ data.filename }}">
				<p><a href="#" class="cmb2-remove-file-button" rel="{{ data.mediaField }}[{{ data.id }}]">{{ data.stringRemoveImage }}</a></p>
				<input type="hidden" id="filelist-{{ data.id }}" data-id="{{ data.id }}" name="{{ data.mediaFieldName }}[{{ data.id }}]" value="{{ data.url }}">
			</li>
		</script>
		<script type="text/html" id="tmpl-cmb2-list-file">
			<li class="file-status cmb2-media-item">
				<span>{{ data.stringFile }} <strong>{{ data.filename }}</strong></span>&nbsp;&nbsp; (<a href="{{ data.url }}" target="_blank" rel="external">{{ data.stringDownload }}</a> / <a href="#" class="cmb2-remove-file-button" rel="{{ data.mediaField }}[{{ data.id }}]">{{ data.stringRemoveFile }}</a>)
				<input type="hidden" id="filelist-{{ data.id }}" data-id="{{ data.id }}" name="{{ data.mediaFieldName }}[{{ data.id }}]" value="{{ data.url }}">
			</li>
		</script>
		<?php
	}

	/**
	 * Utility method to return an array of meta data for a registered image size
	 *
	 * Uses CMB2_Utils::get_named_size() to get the closest available named size
	 * from an array of width and height values and CMB2_Utils::get_available_image_sizes()
	 * to get the meta data associated with a named size.
	 *
	 * @since  2.2.4
	 * @param  array|string $img_size  Image size. Accepts an array of width and height (in that order)
	 * @param  string       $fallback  Size to use if the supplied named size doesn't exist
	 * @return array                   Array containing the image size meta data
	 *    $size = (
	 *      'width'  => (int) image size width
	 *      'height' => (int) image size height
	 *      'name'   => (string) e.g. 'thumbnail'
	 *    )
	 */
	public static function get_image_size_data( $img_size = '', $fallback = 'thumbnail' ) {
		$data = array();

		if ( is_array( $img_size ) ) {
			$data['width']  = intval( $img_size[0] );
			$data['height'] = intval( $img_size[1] );
			$data['name']   = '';

			// Try and get the closest named size from our array of dimensions
			if ( $named_size = CMB2_Utils::get_named_size( $img_size ) ) {
				$data['name'] = $named_size;
			}
		} else {

			$image_sizes = CMB2_Utils::get_available_image_sizes();

			// The 'thumb' alias, which works elsewhere, doesn't work in the wp.media uploader
			if ( 'thumb' == $img_size ) {
				$img_size = 'thumbnail';
			}

			// Named size doesn't exist, use $fallback
			if ( ! array_key_exists( $img_size, $image_sizes ) ) {
				$img_size = $fallback;
			}

			// Get image dimensions from named sizes
			$data['width']  = intval( $image_sizes[ $img_size ]['width'] );
			$data['height'] = intval( $image_sizes[ $img_size ]['height'] );
			$data['name']   = $img_size;
		}

		return $data;
	}

	/**
	 * Filters attachment data prepared for JavaScript.
	 *
	 * Adds the url, width, height, and orientation for custom sizes to the JavaScript
	 * object returned by the wp.media uploader. Hooked to 'wp_prepare_attachment_for_js'.
	 *
	 * @since  2.2.4
	 * @param  array      $response   Array of prepared attachment data
	 * @param  int|object $attachment Attachment ID or object
	 * @param  array      $meta       Array of attachment meta data ( from wp_get_attachment_metadata() )
	 * @return array      filtered $response array
	 */
	public static function prepare_image_sizes_for_js( $response, $attachment, $meta ) {
		foreach ( CMB2_Utils::get_available_image_sizes() as $size => $info ) {

			// registered image size exists for this attachment
			if ( isset( $meta['sizes'][ $size ] ) ) {

				$attachment_url = wp_get_attachment_url( $attachment->ID );
				$base_url = str_replace( wp_basename( $attachment_url ), '', $attachment_url );
				$size_meta = $meta['sizes'][ $size ];

				$response['sizes'][ $size ] = array(
					'url'         => $base_url . $size_meta['file'],
					'height'      => $size_meta['height'],
					'width'       => $size_meta['width'],
					'orientation' => $size_meta['height'] > $size_meta['width'] ? 'portrait' : 'landscape',
				);
			}
		}

		return $response;
	}

}
PK     ‚ŠU]$›T,    3  vendor/cmb2/cmb2/includes/types/CMB2_Type_Radio.phpnu „[µü¤        <?php
/**
 * CMB radio field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Radio extends CMB2_Type_Multi_Base {

	/**
	 * The type of radio field
	 *
	 * @var string
	 */
	public $type = 'radio';

	/**
	 * Constructor
	 *
	 * @since 2.2.2
	 *
	 * @param CMB2_Types $types
	 * @param array      $args
	 */
	public function __construct( CMB2_Types $types, $args = array(), $type = '' ) {
		parent::__construct( $types, $args );
		$this->type = $type ? $type : $this->type;
	}

	public function render() {
		$args = $this->parse_args( $this->type, array(
			'class'   => 'cmb2-radio-list cmb2-list',
			'options' => $this->concat_items( array(
				'label'  => 'test',
				'method' => 'list_input',
			) ),
			'desc' => $this->_desc( true ),
		) );

		return $this->rendered( $this->ul( $args ) );
	}

	protected function ul( $a ) {
		return sprintf( '<ul class="%s">%s</ul>%s', $a['class'], $a['options'], $a['desc'] );
	}

}
PK     ‚ŠU]C²Ü”  ”  2  vendor/cmb2/cmb2/includes/types/CMB2_Type_Base.phpnu „[µü¤        <?php
/**
 * CMB base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
#[AllowDynamicProperties] // phpcs:ignore PHPCompatibility.Attributes.NewAttributes -- Back-compat: allow dynamic props (PHP 8.2+) on this class + subclasses.
abstract class CMB2_Type_Base {

	/**
	 * The CMB2_Types object
	 *
	 * @var CMB2_Types
	 */
	public $types;

	/**
	 * Arguments for use in the render method
	 *
	 * @var array
	 */
	public $args;

	/**
	 * Rendered output (if 'rendered' argument is set to false)
	 *
	 * @var string
	 */
	protected $rendered = '';

	/**
	 * Constructor
	 *
	 * @since 2.2.2
	 * @param CMB2_Types $types Object for the field type.
	 * @param array      $args  Array of arguments for the type.
	 */
	public function __construct( CMB2_Types $types, $args = array() ) {
		$this->types      = $types;
		$args['rendered'] = isset( $args['rendered'] ) ? (bool) $args['rendered'] : true;
		$this->args       = $args;
	}

	/**
	 * Handles rendering this field type.
	 *
	 * @since  2.2.2
	 * @return string  Rendered field type.
	 */
	abstract public function render();

	/**
	 * Stores the rendered field output.
	 *
	 * @since  2.2.2
	 * @param  string|CMB2_Type_Base $rendered Rendered output.
	 * @return string|CMB2_Type_Base           Rendered output or this object.
	 */
	public function rendered( $rendered ) {
		$this->field->register_js_data();

		if ( $this->args['rendered'] ) {
			return is_a( $rendered, __CLASS__ ) ? $rendered->rendered : $rendered;
		}

		$this->rendered = is_a( $rendered, __CLASS__ ) ? $rendered->rendered : $rendered;

		return $this;
	}

	/**
	 * Returns the stored rendered field output.
	 *
	 * @since  2.2.2
	 * @return string Stored rendered output (if 'rendered' argument is set to false).
	 */
	public function get_rendered() {
		return $this->rendered;
	}

	/**
	 * Handles parsing and filtering attributes while preserving any passed in via field config.
	 *
	 * @since  1.1.0
	 * @param  string $element        Element for filter.
	 * @param  array  $type_defaults  Type default arguments.
	 * @param  array  $type_overrides Type override arguments.
	 * @return array                  Parsed and filtered arguments.
	 */
	public function parse_args( $element, $type_defaults, $type_overrides = array() ) {
		$args = $this->parse_args_from_overrides( $type_overrides );

		/**
		 * Filter attributes for a field type.
		 * The dynamic portion of the hook name, $element, refers to the field type.
		 *
		 * @since 1.1.0
		 * @param array  $args              The array of attribute arguments.
		 * @param array  $type_defaults     The array of default values.
		 * @param array  $field             The `CMB2_Field` object.
		 * @param object $field_type_object This `CMB2_Types` object.
		 */
		$args = apply_filters( "cmb2_{$element}_attributes", $args, $type_defaults, $this->field, $this->types );

		$args = wp_parse_args( $args, $type_defaults );

		if ( ! empty( $args['js_dependencies'] ) ) {
			$this->field->add_js_dependencies( $args['js_dependencies'] );
		}

		return $args;
	}

	/**
	 * Handles parsing and filtering attributes while preserving any passed in via field config.
	 *
	 * @since  2.2.4
	 * @param  array $type_overrides Type override arguments.
	 * @return array                 Parsed arguments
	 */
	protected function parse_args_from_overrides( $type_overrides = array() ) {
		$type_overrides = empty( $type_overrides ) ? $this->args : $type_overrides;

		if ( true !== $this->field->args( 'disable_hash_data_attribute' ) ) {
			$type_overrides['data-hash'] = $this->field->hash_id();
		}

		$field_overrides = $this->field->args( 'attributes' );

		return ! empty( $field_overrides )
			? wp_parse_args( $field_overrides, $type_overrides )
			: $type_overrides;
	}

	/**
	 * Fall back to CMB2_Types methods
	 *
	 * @param  string $method    Method name being invoked.
	 * @param  array  $arguments Arguments passed for the method.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __call( $method, $arguments ) {
		switch ( $method ) {
			case '_id':
			case '_name':
			case '_desc':
			case '_text':
			case 'concat_attrs':
				return call_user_func_array( array( $this->types, $method ), $arguments );
			default:
				// translators: 1: class name, 2: method name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s method: %2$s', 'cmb2' ), __CLASS__, $method ) );
		}
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param string $field Property being requested.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'field':
				return $this->types->field;
			default:
				// translators: 1: class name, 2: property name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
		}
	}

}
PK     ‚ŠU]�w’  ’  7  vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Time.phpnu „[µü¤        <?php
/**
 * CMB text_time field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Text_Time extends CMB2_Type_Text_Date {

	public function render( $args = array() ) {
		$this->args = $this->parse_picker_options( 'time', wp_parse_args( $this->args, array(
			'class'           => 'cmb2-timepicker text-time',
			'value'           => $this->field->get_timestamp_format( 'time_format' ),
			'js_dependencies' => array( 'jquery-ui-core', 'jquery-ui-datepicker', 'jquery-ui-datetimepicker' ),
		) ) );

		return parent::render();
	}

}
PK     ‚ŠU]Ú§W#å  å  3  vendor/cmb2/cmb2/includes/types/CMB2_Type_Title.phpnu „[µü¤        <?php
/**
 * CMB title field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Title extends CMB2_Type_Base {

	/**
	 * Handles outputting an 'title' element
	 *
	 * @return string Heading element
	 */
	public function render() {
		$name = $this->field->args( 'name' );
		$tag  = 'span';

		if ( ! empty( $name ) ) {
			$tag = $this->field->object_type == 'post' ? 'h5' : 'h3';
		}

		$a = $this->parse_args( 'title', array(
			'tag'   => $tag,
			'class' => empty( $name ) ? 'cmb2-metabox-title-anchor' : 'cmb2-metabox-title',
			'name'  => $name,
			'desc'  => $this->_desc( true ),
			'id'    => str_replace( '_', '-', sanitize_html_class( $this->field->id() ) ),
		) );

		return $this->rendered(
			sprintf(
				'<%1$s %2$s>%3$s</%1$s>%4$s',
				$a['tag'],
				$this->concat_attrs( $a, array( 'tag', 'name', 'desc' ) ),
				$a['name'],
				$a['desc']
			)
		);
	}

}
PK     ‚ŠU]ž¹QM	  	  7  vendor/cmb2/cmb2/includes/types/CMB2_Type_File_List.phpnu „[µü¤        <?php
/**
 * CMB file_list field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_File_List extends CMB2_Type_File_Base {

	public function render( $args = array() ) {
		$field      = $this->field;
		$meta_value = $field->escaped_value();
		$name       = $this->_name();
		$img_size   = $field->args( 'preview_size' );
		$query_args = $field->args( 'query_args' );
		$output     = '';

		// get an array of image size meta data, fallback to 'thumbnail'
		$img_size_data = parent::get_image_size_data( $img_size, 'thumbnail' );

		$output .= parent::render( array(
			'type'  => 'hidden',
			'class' => 'cmb2-upload-file cmb2-upload-list',
			'size'  => 45,
			'desc'  => '',
			'value' => '',
			'data-previewsize' => sprintf( '[%d,%d]', $img_size_data['width'], $img_size_data['height'] ),
			'data-sizename'    => $img_size_data['name'],
			'data-queryargs'   => ! empty( $query_args ) ? json_encode( $query_args ) : '',
			'js_dependencies'  => 'media-editor',
		) );

		$output .= parent::render( array(
			'type'  => 'button',
			'class' => 'cmb2-upload-button button-secondary cmb2-upload-list',
			'value' => esc_attr( $this->_text( 'add_upload_files_text', esc_html__( 'Add or Upload Files', 'cmb2' ) ) ),
			'name'  => false,
			'id'    => false,
		) );

		$output .= '<ul id="' . $this->_id( '-status', false ) . '" class="cmb2-media-status cmb-attach-list">';

		if ( $meta_value && is_array( $meta_value ) ) {

			foreach ( $meta_value as $id => $fullurl ) {
				$id_input = parent::render( array(
					'type'    => 'hidden',
					'value'   => $fullurl,
					'name'    => $name . '[' . $id . ']',
					'id'      => 'filelist-' . $id,
					'data-id' => $id,
					'desc'    => '',
					'class'   => false,
				) );

				if ( $this->is_valid_img_ext( $fullurl ) ) {

					$output .= $this->img_status_output( array(
						'image'    => wp_get_attachment_image( $id, $img_size ),
						'tag'      => 'li',
						'id_input' => $id_input,
					) );

				} else {

					$output .= $this->file_status_output( array(
						'value'    => $fullurl,
						'tag'      => 'li',
						'id_input' => $id_input,
					) );

				}
			}
		}

		$output .= '</ul>';

		return $this->rendered( $output );
	}

}
PK     ‚ŠU]Ëª3/    A  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Multicheck.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_multicheck field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Multicheck extends CMB2_Type_Taxonomy_Base {
	protected $counter = 0;

	public function render() {
		return $this->rendered(
			$this->types->radio( array(
				'class'   => $this->get_wrapper_classes(),
				'options' => $this->get_term_options(),
			), 'taxonomy_multicheck' )
		);
	}

	protected function get_term_options() {
		$all_terms = $this->get_terms();

		if ( ! $all_terms || is_wp_error( $all_terms ) ) {
			return $this->no_terms_result( $all_terms );
		}

		return $this->loop_terms( $all_terms, $this->get_object_term_or_default() );
	}

	protected function loop_terms( $all_terms, $saved_terms ) {
		$options = '';
		foreach ( $all_terms as $term ) {
			$options .= $this->list_term_input( $term, $saved_terms );
		}

		return $options;
	}

	protected function list_term_input( $term, $saved_terms ) {
		$args = array(
			'value' => $term->slug,
			'label' => $term->name,
			'type'  => 'checkbox',
			'name'  => $this->_name() . '[]',
		);

		if ( is_array( $saved_terms ) && in_array( $term->slug, $saved_terms ) ) {
			$args['checked'] = 'checked';
		}

		return $this->list_input( $args, ++$this->counter );
	}

	public function get_object_term_or_default() {
		$saved_terms = $this->get_object_terms();

		return is_wp_error( $saved_terms ) || empty( $saved_terms )
			? $this->field->get_default()
			: wp_list_pluck( $saved_terms, 'slug' );
	}

	protected function get_wrapper_classes() {
		$classes = 'cmb2-checkbox-list cmb2-list';
		if ( false === $this->field->args( 'select_all_button' ) ) {
			$classes .= ' no-select-all';
		}

		return $classes;
	}

}
PK     ‚ŠU]ZÈ¤  ¤  2  vendor/cmb2/cmb2/includes/types/CMB2_Type_File.phpnu „[µü¤        <?php
/**
 * CMB file field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_File extends CMB2_Type_File_Base {

	/**
	 * Handles outputting an 'file' field
	 *
	 * @param  array $args Override arguments.
	 * @return string      Form input element
	 */
	public function render( $args = array() ) {
		$args    = empty( $args ) ? $this->args : $args;
		$field   = $this->field;
		$options = (array) $field->options();

		$a = $this->args = $this->parse_args( 'file', array(
			'class'           => 'cmb2-upload-file regular-text',
			'id'              => $this->_id(),
			'name'            => $this->_name(),
			'value'           => $field->escaped_value(),
			'id_value'        => null,
			'desc'            => $this->_desc( true ),
			'size'            => 45,
			'js_dependencies' => 'media-editor',
			'preview_size'    => $field->args( 'preview_size' ),
			'query_args'      => $field->args( 'query_args' ),

			// if options array and 'url' => false, then hide the url field.
			'type'            => array_key_exists( 'url', $options ) && false === $options['url']
				? 'hidden'
				: 'text',
		), $args );

		// get an array of image size meta data, fallback to 'large'.
		$this->args['img_size_data'] = $img_size_data = parent::get_image_size_data(
			$a['preview_size'],
			'large'
		);

		$output = '';

		$output .= parent::render( array(
			'type'             => $a['type'],
			'class'            => $a['class'],
			'value'            => $a['value'],
			'id'               => $a['id'],
			'name'             => $a['name'],
			'size'             => $a['size'],
			'desc'             => '',
			'data-previewsize' => sprintf( '[%d,%d]', $img_size_data['width'], $img_size_data['height'] ),
			'data-sizename'    => $img_size_data['name'],
			'data-queryargs'   => ! empty( $a['query_args'] ) ? json_encode( $a['query_args'] ) : '',
			'js_dependencies'  => $a['js_dependencies'],
		) );

		// Now remove the data-iterator attribute if it exists.
		// (Possible if being used within a custom field)
		// This is not elegant, but compensates for CMB2_Types::_id
		// automagically & inelegantly adding the data-iterator attribute.
		// Single responsibility principle? pffft.
		$parts            = explode( '"', $this->args['id'] );
		$this->args['id'] = $parts[0];

		$output .= sprintf(
			'<input class="cmb2-upload-button button-secondary" type="button" value="%1$s" />',
			esc_attr( $this->_text( 'add_upload_file_text', esc_html__( 'Add or Upload File', 'cmb2' ) ) )
		);

		$output .= $a['desc'];
		$output .= $this->get_id_field_output();

		$output .= '<div id="' . esc_attr( $field->id() ) . '-status" class="cmb2-media-status">';
		if ( ! empty( $a['value'] ) ) {
			$output .= $this->get_file_preview_output();
		}
		$output .= '</div>';

		return $this->rendered( $output );
	}

	/**
	 * Return attempted file preview output for a provided file.
	 *
	 * @since 2.2.5
	 *
	 * @return string
	 */
	public function get_file_preview_output() {
		if ( ! $this->is_valid_img_ext( $this->args['value'] ) ) {

			return $this->file_status_output( array(
				'value'     => $this->args['value'],
				'tag'       => 'div',
				'cached_id' => $this->args['id'],
			) );
		}

		if ( $this->args['id_value'] ) {
			$image = wp_get_attachment_image( $this->args['id_value'], $this->args['preview_size'], null, array(
				'class' => 'cmb-file-field-image',
			) );
		} else {
			$image = '<img style="max-width: ' . absint( $this->args['img_size_data']['width'] ) . 'px; width: 100%;" src="' . esc_url( $this->args['value'] ) . '" class="cmb-file-field-image" alt="" />';
		}

		return $this->img_status_output( array(
			'image'     => $image,
			'tag'       => 'div',
			'cached_id' => $this->args['id'],
		) );
	}

	/**
	 * Return field ID output as a hidden field.
	 *
	 * @since 2.2.5
	 *
	 * @return string
	 */
	public function get_id_field_output() {
		$field = $this->field;

		/*
		 * A little bit of magic (tsk tsk) replacing the $this->types->field object,
		 * So that the render function is using the proper field object.
		 */
		$this->types->field = $this->get_id_field();

		$output = parent::render( array(
			'type'  => 'hidden',
			'class' => 'cmb2-upload-file-id',
			'value' => $this->types->field->value,
			'desc'  => '',
		) );

		// We need to put the original field object back
		// or other fields in a custom field will be broken.
		$this->types->field = $field;

		return $output;
	}

	/**
	 * Return field ID data.
	 *
	 * @since 2.2.5
	 *
	 * @return mixed
	 */
	public function get_id_field() {

		// reset field args for attachment id.
		$args = array(
			// if we're looking at a file in a group, we need to get the non-prefixed id.
			'id' => ( $this->field->group ? $this->field->args( '_id' ) : $this->args['id'] ) . '_id',
			'disable_hash_data_attribute' => true,
		);

		// and get new field object
		// (need to set it to the types field property).
		$id_field = $this->field->get_field_clone( $args );

		$id_value = absint( null !== $this->args['id_value'] ? $this->args['id_value'] : $id_field->escaped_value() );

		// we don't want to output "0" as a value.
		if ( ! $id_value ) {
			$id_value = '';
		}

		// if there is no id saved yet, try to get it from the url.
		if ( $this->args['value'] && ! $id_value ) {
			$id_value = CMB2_Utils::image_id_from_url( esc_url_raw( $this->args['value'] ) );
		}

		$id_field->value = $id_value;

		return $id_field;
	}

}
PK     ‚ŠU]1ÂSÎÂ  Â  8  vendor/cmb2/cmb2/includes/types/CMB2_Type_Multi_Base.phpnu „[µü¤        <?php
/**
 * CMB Multi base field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
abstract class CMB2_Type_Multi_Base extends CMB2_Type_Base {

	/**
	 * Generates html for an option element
	 *
	 * @since  1.1.0
	 * @param  array $args Arguments array containing value, label, and checked boolean
	 * @return string       Generated option element html
	 */
	public function select_option( $args = array() ) {
		return sprintf( "\t" . '<option value="%s" %s>%s</option>', $args['value'], selected( isset( $args['checked'] ) && $args['checked'], true, false ), $args['label'] ) . "\n";
	}

	/**
	 * Generates html for list item with input
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @param  int   $i    Iterator value
	 * @return string       Gnerated list item html
	 */
	public function list_input( $args = array(), $i = '' ) {
		$a = $this->parse_args( 'list_input', array(
			'type'  => 'radio',
			'class' => 'cmb2-option',
			'name'  => $this->_name(),
			'id'    => $this->_id( $i ),
			'value' => $this->field->escaped_value(),
			'label' => '',
		), $args );

		return sprintf( "\t" . '<li><input%s/> <label for="%s">%s</label></li>' . "\n", $this->concat_attrs( $a, array( 'label' ) ), $a['id'], $a['label'] );
	}

	/**
	 * Generates html for list item with checkbox input
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @param  int   $i    Iterator value
	 * @return string       Gnerated list item html
	 */
	public function list_input_checkbox( $args, $i ) {
		$saved_value = $this->field->escaped_value();
		if ( is_array( $saved_value ) && in_array( $args['value'], $saved_value ) ) {
			$args['checked'] = 'checked';
		}
		$args['type'] = 'checkbox';
		return $this->list_input( $args, $i );
	}

	/**
	 * Generates html for concatenated items
	 *
	 * @since  1.1.0
	 * @param  array $args Optional arguments
	 * @return string        Concatenated html items
	 */
	public function concat_items( $args = array() ) {
		$field = $this->field;

		$method = isset( $args['method'] ) ? $args['method'] : 'select_option';
		unset( $args['method'] );

		$value = null !== $field->escaped_value()
			? $field->escaped_value()
			: $field->get_default();

		$value = CMB2_Utils::normalize_if_numeric( $value );

		$concatenated_items = '';
		$i = 1;

		$options = array();
		if ( $option_none = $field->args( 'show_option_none' ) ) {
			$options[''] = $option_none;
		}
		$options = $options + (array) $field->options();
		foreach ( $options as $opt_value => $opt_label ) {

			// Clone args & modify for just this item
			$a = $args;

			$a['value'] = $opt_value;
			$a['label'] = $opt_label;

			// Check if this option is the value of the input
			if ( $value === CMB2_Utils::normalize_if_numeric( $opt_value ) ) {
				$a['checked'] = 'checked';
			}

			$concatenated_items .= $this->$method( $a, $i++ );
		}

		return $concatenated_items;
	}

}
PK     ‚ŠU]sÔ‚¡    5  vendor/cmb2/cmb2/includes/types/CMB2_Type_Wysiwyg.phpnu „[µü¤        <?php
/**
 * CMB wysiwyg field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @method string _id()
 * @method string _desc()
 */
class CMB2_Type_Wysiwyg extends CMB2_Type_Textarea {

	/**
	 * Handles outputting a 'wysiwyg' element
	 * @since  1.1.0
	 * @return string Form wysiwyg element
	 */
	public function render( $args = array() ) {
		$field = $this->field;
		$a = $this->parse_args( 'wysiwyg', array(
			'id'      => $this->_id( '', false ),
			'value'   => $field->escaped_value( 'stripslashes' ),
			'desc'    => $this->_desc( true ),
			'options' => $field->options(),
		) );

		if ( ! $field->group ) {

			$a = $this->maybe_update_attributes_for_char_counter( $a );

			if ( $this->has_counter ) {
				$a['options']['editor_class'] = ! empty( $a['options']['editor_class'] )
					? $a['options']['editor_class'] . ' cmb2-count-chars'
					: 'cmb2-count-chars';
			}

			return $this->rendered( $this->get_wp_editor( $a ) . $a['desc'] );
		}

		// Character counter not currently working for grouped WYSIWYG
		$this->field->args['char_counter'] = false;

		// wysiwyg fields in a group need some special handling.
		$field->add_js_dependencies( array( 'wp-util', 'cmb2-wysiwyg' ) );

		// Hook in our template-output to the footer.
		add_action( is_admin() ? 'admin_footer' : 'wp_footer', array( $this, 'add_wysiwyg_template_for_group' ) );

		return $this->rendered(
			sprintf( '<div class="cmb2-wysiwyg-wrap">%s', parent::render( array(
				'class'         => 'cmb2_textarea cmb2-wysiwyg-placeholder',
				'data-groupid'  => $field->group->id(),
				'data-iterator' => $field->group->index,
				'data-fieldid'  => $field->id( true ),
				'desc'          => '</div>' . $this->_desc( true ),
			) ) )
		);
	}

	protected function get_wp_editor( $args ) {
		ob_start();
		wp_editor( $args['value'], $args['id'], $args['options'] );
		return ob_get_clean();
	}

	public function add_wysiwyg_template_for_group() {
		$group_id = $this->field->group->id();
		$field_id = $this->field->id( true );
		$hash     = $this->field->hash_id();
		$options  = $this->field->options();
		$options['textarea_name'] = 'cmb2_n_' . $group_id . $field_id;

		// Initate the editor with special id/value/name so we can retrieve the options in JS.
		$editor = $this->get_wp_editor( array(
			'value'   => 'cmb2_v_' . $group_id . $field_id,
			'id'      => 'cmb2_i_' . $group_id . $field_id,
			'options' => $options,
		) );

		// Then replace the special id/value/name with underscore placeholders.
		$editor = str_replace(
			array(
				'cmb2_n_' . $group_id . $field_id,
				'cmb2_v_' . $group_id . $field_id,
				'cmb2_i_' . $group_id . $field_id,
			), array(
				'{{ data.name }}',
				'{{{ data.value }}}',
				'{{ data.id }}',
			),
			$editor
		);

		// And put the editor instance in a JS template wrapper.
		echo '<script type="text/template" id="tmpl-cmb2-wysiwyg-' . $group_id . '-' . $field_id . '">';
		// Need to wrap the template in a wrapper div w/ specific data attributes which will be used when adding/removing rows.
		echo '<div class="cmb2-wysiwyg-inner-wrap" data-iterator="{{ data.iterator }}" data-groupid="' . $group_id . '" data-id="' . $field_id . '" data-hash="' . $hash . '">' . $editor . '</div>';
		echo '</script>';
	}

}
PK     ‚ŠU]`s+ú—  —  =  vendor/cmb2/cmb2/includes/types/CMB2_Type_Select_Timezone.phpnu „[µü¤        <?php
/**
 * CMB select_timezone field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Select_Timezone extends CMB2_Type_Select {

	public function render() {

		$this->field->args['default'] = $this->field->get_default()
			? $this->field->get_default()
			: CMB2_Utils::timezone_string();

		$this->args = wp_parse_args( $this->args, array(
			'class'   => 'cmb2_select cmb2-select-timezone',
			'options' => wp_timezone_choice( $this->field->escaped_value() ),
			'desc'    => $this->_desc(),
		) );

		return parent::render();
	}
}
PK     ‚ŠU]ñ�~•ì  ì  J  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Select_Hierarchical.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_select_hierarchical field type
 *
 * @since  2.6.1
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Select_Hierarchical extends CMB2_Type_Taxonomy_Select {

	/**
	 * Parent term ID when looping hierarchical terms.
	 *
	 * @since  2.6.1
	 *
	 * @var integer
	 */
	protected $parent = 0;

	/**
	 * Child loop depth.
	 *
	 * @since  2.6.1
	 *
	 * @var integer
	 */
	protected $level = 0;

	public function render() {
		return $this->rendered(
			$this->types->select( array(
				'options' => $this->get_term_options(),
			), 'taxonomy_select_hierarchical' )
		);
	}

	public function select_option( $args = array() ) {
		if ( $this->level > 0 ) {
			$args['label'] = str_repeat( '&nbsp;&nbsp;&nbsp;&nbsp;', $this->level ) . $args['label'];
		}
		$option = parent::select_option( $args );
		$children = $this->build_children( $this->current_term, $this->saved_term );

		if ( ! empty( $children ) ) {
			$option .= $children;
		}

		return $option;
	}

	/**
	 * Build children hierarchy.
	 *
	 * @since  2.6.1
	 *
	 * @param  array        $terms Array of child terms.
	 * @param  array|string $saved Array of terms set to the object, or single term slug.
	 *
	 * @return string              Child option output.
	 */
	public function child_option_output( $terms, $saved ) {
		$this->level++;
		$output = $this->loop_terms( $terms, $saved );
		$this->level--;

		return $output;
	}

}
PK     ‚ŠU]ì4î‡V	  V	  E  vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Datetime_Timestamp.phpnu „[µü¤        <?php
/**
 * CMB text_datetime_timestamp field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Text_Datetime_Timestamp extends CMB2_Type_Picker_Base {

	public function render( $args = array() ) {
		$field = $this->field;

		$value = $field->escaped_value();
		if ( empty( $value ) ) {
			$value = $field->get_default();
		}

		$args = wp_parse_args( $this->args, array(
			'value'      => $value,
			'desc'       => $this->_desc(),
			'datepicker' => array(),
			'timepicker' => array(),
		) );

		if ( empty( $args['value'] ) ) {
			$args['value'] = $value;
			// This will be used if there is a select_timezone set for this field
			$tz_offset = $field->field_timezone_offset();
			if ( ! empty( $tz_offset ) ) {
				$args['value'] -= $tz_offset;
			}
		}

		$has_good_value = ! empty( $args['value'] ) && ! is_array( $args['value'] );

		$date_input = parent::render( $this->date_args( $args, $has_good_value ) );
		$time_input = parent::render( $this->time_args( $args, $has_good_value ) );

		return $this->rendered( $date_input . "\n" . $time_input );
	}

	public function date_args( $args, $has_good_value ) {
		$date_args = wp_parse_args( $args['datepicker'], array(
			'class' => 'cmb2-text-small cmb2-datepicker',
			'name'  => $this->_name( '[date]' ),
			'id'    => $this->_id( '_date' ),
			'value' => $has_good_value ? $this->field->get_timestamp_format( 'date_format', $args['value'] ) : '',
			'desc'  => '',
		) );

		$date_args['rendered'] = true;

		// Let's get the date-format, and set it up as a data attr for the field.
		return $this->parse_picker_options( 'date', $date_args );
	}

	public function time_args( $args, $has_good_value ) {
		$time_args = wp_parse_args( $args['timepicker'], array(
			'class' => 'cmb2-timepicker text-time',
			'name'  => $this->_name( '[time]' ),
			'id'    => $this->_id( '_time' ),
			'value' => $has_good_value ? $this->field->get_timestamp_format( 'time_format', $args['value'] ) : '',
			'desc'  => $args['desc'],
			'js_dependencies' => array( 'jquery-ui-core', 'jquery-ui-datepicker', 'jquery-ui-datetimepicker' ),
		) );

		$time_args['rendered'] = true;

		// Let's get the time-format, and set it up as a data attr for the field.
		return $this->parse_picker_options( 'time', $time_args );
	}

}
PK     ‚ŠU]khþ–Ÿ  Ÿ  4  vendor/cmb2/cmb2/includes/types/CMB2_Type_Select.phpnu „[µü¤        <?php
/**
 * CMB select field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Select extends CMB2_Type_Multi_Base {

	public function render() {
		$a = $this->parse_args( 'select', array(
			'class'   => 'cmb2_select',
			'name'    => $this->_name(),
			'id'      => $this->_id(),
			'desc'    => $this->_desc( true ),
			'options' => $this->concat_items(),
		) );

		$attrs = $this->concat_attrs( $a, array( 'desc', 'options' ) );

		return $this->rendered(
			sprintf( '<select%s>%s</select>%s', $attrs, $a['options'], $a['desc'] )
		);
	}
}
PK     ‚ŠU]¾-  -  9  vendor/cmb2/cmb2/includes/types/CMB2_Type_Colorpicker.phpnu „[µü¤        <?php
/**
 * CMB colorpicker field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Colorpicker extends CMB2_Type_Text {

	/**
	 * The optional value for the colorpicker field
	 *
	 * @var string
	 */
	public $value = '';

	/**
	 * Constructor
	 *
	 * @since 2.2.2
	 *
	 * @param CMB2_Types $types Object for the field type.
	 * @param array      $args  Array of arguments for the type.
	 * @param string     $value Value that the field type is currently set to, or default value.
	 */
	public function __construct( CMB2_Types $types, $args = array(), $value = '' ) {
		parent::__construct( $types, $args );
		$this->value = $value ? $value : $this->value;
	}

	/**
	 * Render the field for the field type.
	 *
	 * @since 2.2.2
	 *
	 * @param array $args Array of arguments for the rendering.
	 *
	 * @return CMB2_Type_Base|string
	 */
	public function render( $args = array() ) {
		$meta_value = $this->value ? $this->value : $this->field->escaped_value();

		$meta_value = self::sanitize_color( $meta_value );

		wp_enqueue_style( 'wp-color-picker' );

		$args = wp_parse_args( $args, array(
			'class' => 'cmb2-text-small',
		) );

		$args['class']          .= ' cmb2-colorpicker';
		$args['value']           = $meta_value;
		$args['js_dependencies'] = array( 'wp-color-picker' );

		if ( $this->field->options( 'alpha' ) ) {
			$args['js_dependencies'][] = 'wp-color-picker-alpha';
			$args['data-alpha']        = 'true';
		}

		$args = wp_parse_args( $this->args, $args );

		return parent::render( $args );
	}

	/**
	 * Sanitizes the given color, or array of colors.
	 *
	 * @since 2.9.0
	 *
	 * @param string|array $color The color or array of colors to sanitize.
	 *
	 * @return string|array The color or array of colors, sanitized.
	 */
	public static function sanitize_color( $color ) {

		if ( is_array( $color ) ) {

			$color = array_map( array( 'CMB2_Type_Colorpicker', 'sanitize_color' ), $color );

		} else {

			// Regexp for hexadecimal colors
			$hex_color = '(([a-fA-F0-9]){3}){1,2}$';

			if ( preg_match( '/^' . $hex_color . '/i', $color ) ) {
				// Value is just 123abc, so prepend #
				$color = '#' . $color;
			} elseif (
				// If value doesn't match #123abc...
				! preg_match( '/^#' . $hex_color . '/i', $color )
				// And value doesn't match rgba()...
				&& 0 !== strpos( trim( $color ), 'rgba' )
			) {
				// Then sanitize to just #.
				$color = '#';
			}
		}

		return $color;
	}

	/**
	 * Provide the option to use a rgba colorpicker.
	 *
	 * @since 2.2.6.2
	 */
	public static function dequeue_rgba_colorpicker_script() {
		if ( wp_script_is( 'jw-cmb2-rgba-picker-js', 'enqueued' ) ) {
			wp_dequeue_script( 'jw-cmb2-rgba-picker-js' );
			CMB2_JS::register_colorpicker_alpha( true );
		}
	}

}
PK     ‚ŠU]—:[	  	  4  vendor/cmb2/cmb2/includes/types/CMB2_Type_Oembed.phpnu „[µü¤        <?php
/**
 * CMB oembed field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Oembed extends CMB2_Type_Text {

	public function render( $args = array() ) {
		$field = $this->field;

		$meta_value = trim( $field->escaped_value() );

		$oembed = ! empty( $meta_value )
			? cmb2_ajax()->get_oembed( array(
				'url'         => $field->escaped_value(),
				'object_id'   => $field->object_id,
				'object_type' => $field->object_type,
				'oembed_args' => array(
					'width' => '640',
				),
				'field_id'    => $this->_id( '', false ),
			) )
			: '';

		return parent::render( array(
			'class'           => 'cmb2-oembed regular-text',
			'data-objectid'   => $field->object_id,
			'data-objecttype' => $field->object_type,
		) )
		. '<p class="cmb-spinner spinner"></p>'
		. '<div id="' . $this->_id( '-status' ) . '" class="cmb2-media-status ui-helper-clearfix embed_wrap">' . $oembed . '</div>';
	}

}
PK     ‚ŠU]/I†B  B  8  vendor/cmb2/cmb2/includes/types/CMB2_Type_Multicheck.phpnu „[µü¤        <?php
/**
 * CMB multicheck field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Multicheck extends CMB2_Type_Radio {

	/**
	 * The type of radio field
	 *
	 * @var string
	 */
	public $type = 'checkbox';

	public function render( $args = array() ) {
		$classes = false === $this->field->args( 'select_all_button' )
			? 'cmb2-checkbox-list no-select-all cmb2-list'
			: 'cmb2-checkbox-list cmb2-list';

		$args = $this->parse_args( $this->type, array(
			'class'   => $classes,
			'options' => $this->concat_items( array(
				'name'   => $this->_name() . '[]',
				'method' => 'list_input_checkbox',
			) ),
			'desc' => $this->_desc( true ),
		) );

		return $this->rendered( $this->ul( $args ) );
	}

}
PK     ƒŠU]ÎM(à  à  7  vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Date.phpnu „[µü¤        <?php
/**
 * CMB text_date field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Text_Date extends CMB2_Type_Picker_Base {

	public function render( $args = array() ) {
		$args = $this->parse_args( 'text_date', array(
			'class'           => 'cmb2-text-small cmb2-datepicker',
			'value'           => $this->field->get_timestamp_format(),
			'desc'            => $this->_desc(),
			'js_dependencies' => array( 'jquery-ui-core', 'jquery-ui-datepicker' ),
		) );

		if ( false === strpos( $args['class'], 'timepicker' ) ) {
			$this->parse_picker_options( 'date' );
		}

		return parent::render( $args );
	}

}
PK     ƒŠU]®ü:j    6  vendor/cmb2/cmb2/includes/types/CMB2_Type_Checkbox.phpnu „[µü¤        <?php
/**
 * CMB checkbox field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Checkbox extends CMB2_Type_Text {

	/**
	 * If checkbox is checked
	 *
	 * @var mixed
	 */
	public $is_checked = null;

	/**
	 * Constructor
	 *
	 * @since 2.2.2
	 *
	 * @param CMB2_Types $types      Object for the field type.
	 * @param array      $args       Array of arguments for the type.
	 * @param mixed      $is_checked Whether or not the field is checked, or default value.
	 */
	public function __construct( CMB2_Types $types, $args = array(), $is_checked = null ) {
		parent::__construct( $types, $args );
		$this->is_checked = $is_checked;
	}

	/**
	 * Render the field for the field type.
	 *
	 * @since 2.2.2
	 *
	 * @param array $args Array of arguments for the rendering.
	 * @return CMB2_Type_Base|string
	 */
	public function render( $args = array() ) {
		$defaults = array(
			'type'  => 'checkbox',
			'class' => 'cmb2-option cmb2-list',
			'value' => 'on',
			'desc'  => '',
		);

		$meta_value = $this->field->escaped_value();

		$is_checked = null === $this->is_checked
			? ! empty( $meta_value )
			: $this->is_checked;

		if ( $is_checked ) {
			$defaults['checked'] = 'checked';
		}

		$args = $this->parse_args( 'checkbox', $defaults );

		return $this->rendered(
			sprintf(
				'%s <label for="%s">%s</label>',
				parent::render( $args ),
				$this->_id( '', false ),
				$this->_desc()
			)
		);
	}

}
PK     ƒŠU]óC¤g�  �  N  vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Multicheck_Hierarchical.phpnu „[µü¤        <?php
/**
 * CMB taxonomy_multicheck_hierarchical field type
 *
 * @since  2.2.5
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Taxonomy_Multicheck_Hierarchical extends CMB2_Type_Taxonomy_Multicheck {

	/**
	 * Parent term ID when looping hierarchical terms.
	 *
	 * @var integer
	 */
	protected $parent = 0;

	public function render() {
		return $this->rendered(
			$this->types->radio( array(
				'class'   => $this->get_wrapper_classes(),
				'options' => $this->get_term_options(),
			), 'taxonomy_multicheck_hierarchical' )
		);
	}

	protected function list_term_input( $term, $saved_terms ) {
		$options = parent::list_term_input( $term, $saved_terms );
		$children = $this->build_children( $term, $saved_terms );

		if ( ! empty( $children ) ) {
			$options .= $children;
		}

		return $options;
	}

}
PK     ƒŠU]Òu\F    6  vendor/cmb2/cmb2/includes/types/CMB2_Type_Textarea.phpnu „[µü¤        <?php
/**
 * CMB textarea field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Textarea extends CMB2_Type_Counter_Base {

	/**
	 * Handles outputting an 'textarea' element
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @return string       Form textarea element
	 */
	public function render( $args = array() ) {
		$args = empty( $args ) ? $this->args : $args;
		$a = $this->parse_args( 'textarea', array(
			'class' => 'cmb2_textarea',
			'name'  => $this->_name(),
			'id'    => $this->_id(),
			'cols'  => 60,
			'rows'  => 10,
			'value' => $this->field->escaped_value( 'esc_textarea' ),
			'desc'  => $this->_desc( true ),
		), $args );

		// Add character counter?
		$a = $this->maybe_update_attributes_for_char_counter( $a );

		return $this->rendered(
			sprintf( '<textarea%s>%s</textarea>%s', $this->concat_attrs( $a, array( 'desc', 'value' ) ), $a['value'], $a['desc'] )
		);
	}
}
PK     ƒŠU]ö-E\Þ=  Þ=  5  vendor/cmb2/cmb2/includes/shim/WP_REST_Controller.phpnu „[µü¤        <?php


abstract class WP_REST_Controller {

	/**
	 * The namespace of this controller's route.
	 *
	 * @var string
	 */
	protected $namespace;

	/**
	 * The base of this controller's route.
	 *
	 * @var string
	 */
	protected $rest_base;

	/**
	 * Register the routes for the objects of the controller.
	 */
	public function register_routes() {
		/* translators: %s: register_routes() */
		_doing_it_wrong( 'WP_REST_Controller::register_routes', sprintf( __( "Method '%s' must be overridden." ), __METHOD__ ), '4.7' );
	}

	/**
	 * Check if a given request has access to get items.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function get_items_permissions_check( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Get a collection of items.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_items( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Check if a given request has access to get a specific item.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function get_item_permissions_check( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Get one item from the collection.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_item( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Check if a given request has access to create items.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function create_item_permissions_check( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Create one item from the collection.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function create_item( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Check if a given request has access to update a specific item.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function update_item_permissions_check( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Update one item from the collection.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function update_item( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Check if a given request has access to delete a specific item.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function delete_item_permissions_check( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Delete one item from the collection.
	 *
	 * @param WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function delete_item( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Prepare the item for create or update operation.
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return WP_Error|object $prepared_item
	 */
	protected function prepare_item_for_database( $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Prepare the item for the REST response.
	 *
	 * @param mixed           $item WordPress representation of the item.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response $response
	 */
	public function prepare_item_for_response( $item, $request ) {
		return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ), array(
			'status' => 405,
		) );
	}

	/**
	 * Prepare a response for inserting into a collection.
	 *
	 * @param WP_REST_Response $response Response object.
	 * @return array Response data, ready for insertion into collection data.
	 */
	public function prepare_response_for_collection( $response ) {
		if ( ! ( $response instanceof WP_REST_Response ) ) {
			return $response;
		}

		$data = (array) $response->get_data();
		$server = rest_get_server();

		if ( method_exists( $server, 'get_compact_response_links' ) ) {
			$links = call_user_func( array( $server, 'get_compact_response_links' ), $response );
		} else {
			$links = call_user_func( array( $server, 'get_response_links' ), $response );
		}

		if ( ! empty( $links ) ) {
			$data['_links'] = $links;
		}

		return $data;
	}

	/**
	 * Filter a response based on the context defined in the schema.
	 *
	 * @param array  $data
	 * @param string $context
	 * @return array
	 */
	public function filter_response_by_context( $data, $context ) {

		$schema = $this->get_item_schema();
		foreach ( $data as $key => $value ) {
			if ( empty( $schema['properties'][ $key ] ) || empty( $schema['properties'][ $key ]['context'] ) ) {
				continue;
			}

			if ( ! in_array( $context, $schema['properties'][ $key ]['context'] ) ) {
				unset( $data[ $key ] );
				continue;
			}

			if ( 'object' === $schema['properties'][ $key ]['type'] && ! empty( $schema['properties'][ $key ]['properties'] ) ) {
				foreach ( $schema['properties'][ $key ]['properties'] as $attribute => $details ) {
					if ( empty( $details['context'] ) ) {
						continue;
					}
					if ( ! in_array( $context, $details['context'] ) ) {
						if ( isset( $data[ $key ][ $attribute ] ) ) {
							unset( $data[ $key ][ $attribute ] );
						}
					}
				}
			}
		}

		return $data;
	}

	/**
	 * Get the item's schema, conforming to JSON Schema.
	 *
	 * @return array
	 */
	public function get_item_schema() {
		return $this->add_additional_fields_schema( array() );
	}

	/**
	 * Get the item's schema for display / public consumption purposes.
	 *
	 * @return array
	 */
	public function get_public_item_schema() {

		$schema = $this->get_item_schema();

		foreach ( $schema['properties'] as &$property ) {
			if ( isset( $property['arg_options'] ) ) {
				unset( $property['arg_options'] );
			}
		}

		return $schema;
	}

	/**
	 * Get the query params for collections.
	 *
	 * @return array
	 */
	public function get_collection_params() {
		return array(
			'context'                => $this->get_context_param(),
			'page'                   => array(
				'description'        => __( 'Current page of the collection.' ),
				'type'               => 'integer',
				'default'            => 1,
				'sanitize_callback'  => 'absint',
				'validate_callback'  => 'rest_validate_request_arg',
				'minimum'            => 1,
			),
			'per_page'               => array(
				'description'        => __( 'Maximum number of items to be returned in result set.' ),
				'type'               => 'integer',
				'default'            => 10,
				'minimum'            => 1,
				'maximum'            => 100,
				'sanitize_callback'  => 'absint',
				'validate_callback'  => 'rest_validate_request_arg',
			),
			'search'                 => array(
				'description'        => __( 'Limit results to those matching a string.' ),
				'type'               => 'string',
				'sanitize_callback'  => 'sanitize_text_field',
				'validate_callback'  => 'rest_validate_request_arg',
			),
		);
	}

	/**
	 * Get the magical context param.
	 *
	 * Ensures consistent description between endpoints, and populates enum from schema.
	 *
	 * @param array $args
	 * @return array
	 */
	public function get_context_param( $args = array() ) {
		$param_details = array(
			'description'        => __( 'Scope under which the request is made; determines fields present in response.' ),
			'type'               => 'string',
			'sanitize_callback'  => 'sanitize_key',
			'validate_callback'  => 'rest_validate_request_arg',
		);
		$schema = $this->get_item_schema();
		if ( empty( $schema['properties'] ) ) {
			return array_merge( $param_details, $args );
		}
		$contexts = array();
		foreach ( $schema['properties'] as $attributes ) {
			if ( ! empty( $attributes['context'] ) ) {
				$contexts = array_merge( $contexts, $attributes['context'] );
			}
		}
		if ( ! empty( $contexts ) ) {
			$param_details['enum'] = array_unique( $contexts );
			rsort( $param_details['enum'] );
		}
		return array_merge( $param_details, $args );
	}

	/**
	 * Add the values from additional fields to a data object.
	 *
	 * @param array           $object
	 * @param WP_REST_Request $request
	 * @return array modified object with additional fields.
	 */
	protected function add_additional_fields_to_object( $object, $request ) {

		$additional_fields = $this->get_additional_fields();

		foreach ( $additional_fields as $field_name => $field_options ) {

			if ( ! $field_options['get_callback'] ) {
				continue;
			}

			$object[ $field_name ] = call_user_func( $field_options['get_callback'], $object, $field_name, $request, $this->get_object_type() );
		}

		return $object;
	}

	/**
	 * Update the values of additional fields added to a data object.
	 *
	 * @param array           $object
	 * @param WP_REST_Request $request
	 */
	protected function update_additional_fields_for_object( $object, $request ) {

		$additional_fields = $this->get_additional_fields();

		foreach ( $additional_fields as $field_name => $field_options ) {

			if ( ! $field_options['update_callback'] ) {
				continue;
			}

			// Don't run the update callbacks if the data wasn't passed in the request.
			if ( ! isset( $request[ $field_name ] ) ) {
				continue;
			}

			call_user_func( $field_options['update_callback'], $request[ $field_name ], $object, $field_name, $request, $this->get_object_type() );
		}
	}

	/**
	 * Add the schema from additional fields to an schema array.
	 *
	 * The type of object is inferred from the passed schema.
	 *
	 * @param array $schema Schema array.
	 */
	protected function add_additional_fields_schema( $schema ) {
		if ( empty( $schema['title'] ) ) {
			return $schema;
		}

		/**
		 * Can't use $this->get_object_type otherwise we cause an inf loop.
		 */
		$object_type = $schema['title'];

		$additional_fields = $this->get_additional_fields( $object_type );

		foreach ( $additional_fields as $field_name => $field_options ) {
			if ( ! $field_options['schema'] ) {
				continue;
			}

			$schema['properties'][ $field_name ] = $field_options['schema'];
		}

		return $schema;
	}

	/**
	 * Get all the registered additional fields for a given object-type.
	 *
	 * @param  string $object_type
	 * @return array
	 */
	protected function get_additional_fields( $object_type = null ) {

		if ( ! $object_type ) {
			$object_type = $this->get_object_type();
		}

		if ( ! $object_type ) {
			return array();
		}

		global $wp_rest_additional_fields;

		if ( ! $wp_rest_additional_fields || ! isset( $wp_rest_additional_fields[ $object_type ] ) ) {
			return array();
		}

		return $wp_rest_additional_fields[ $object_type ];
	}

	/**
	 * Get the object type this controller is responsible for managing.
	 *
	 * @return string
	 */
	protected function get_object_type() {
		$schema = $this->get_item_schema();

		if ( ! $schema || ! isset( $schema['title'] ) ) {
			return null;
		}

		return $schema['title'];
	}

	/**
	 * Get an array of endpoint arguments from the item schema for the controller.
	 *
	 * @param string $method HTTP method of the request. The arguments
	 *                       for `CREATABLE` requests are checked for required
	 *                       values and may fall-back to a given default, this
	 *                       is not done on `EDITABLE` requests. Default is
	 *                       WP_REST_Server::CREATABLE.
	 * @return array $endpoint_args
	 */
	public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) {

		$schema                = $this->get_item_schema();
		$schema_properties     = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
		$endpoint_args = array();

		foreach ( $schema_properties as $field_id => $params ) {

			// Arguments specified as `readonly` are not allowed to be set.
			if ( ! empty( $params['readonly'] ) ) {
				continue;
			}

			$endpoint_args[ $field_id ] = array(
				'validate_callback' => 'rest_validate_request_arg',
				'sanitize_callback' => 'rest_sanitize_request_arg',
			);

			if ( isset( $params['description'] ) ) {
				$endpoint_args[ $field_id ]['description'] = $params['description'];
			}

			if ( WP_REST_Server::CREATABLE === $method && isset( $params['default'] ) ) {
				$endpoint_args[ $field_id ]['default'] = $params['default'];
			}

			if ( WP_REST_Server::CREATABLE === $method && ! empty( $params['required'] ) ) {
				$endpoint_args[ $field_id ]['required'] = true;
			}

			foreach ( array( 'type', 'format', 'enum' ) as $schema_prop ) {
				if ( isset( $params[ $schema_prop ] ) ) {
					$endpoint_args[ $field_id ][ $schema_prop ] = $params[ $schema_prop ];
				}
			}

			// Merge in any options provided by the schema property.
			if ( isset( $params['arg_options'] ) ) {

				// Only use required / default from arg_options on CREATABLE endpoints.
				if ( WP_REST_Server::CREATABLE !== $method ) {
					$params['arg_options'] = array_diff_key( $params['arg_options'], array(
						'required' => '',
						'default' => '',
					) );
				}

				$endpoint_args[ $field_id ] = array_merge( $endpoint_args[ $field_id ], $params['arg_options'] );
			}
		}// End foreach().

		return $endpoint_args;
	}

	/**
	 * Retrieves post data given a post ID or post object.
	 *
	 * This is a subset of the functionality of the `get_post()` function, with
	 * the additional functionality of having `the_post` action done on the
	 * resultant post object. This is done so that plugins may manipulate the
	 * post that is used in the REST API.
	 *
	 * @see get_post()
	 * @global WP_Query $wp_query
	 *
	 * @param int|WP_Post $post Post ID or post object. Defaults to global $post.
	 * @return WP_Post|null A `WP_Post` object when successful.
	 */
	public function get_post( $post ) {
		$post_obj = get_post( $post );

		/**
		 * Filter the post.
		 *
		 * Allows plugins to filter the post object as returned by `\WP_REST_Controller::get_post()`.
		 *
		 * @param WP_Post|null $post_obj  The post object as returned by `get_post()`.
		 * @param int|WP_Post  $post      The original value used to obtain the post object.
		 */
		$post = apply_filters( 'rest_the_post', $post_obj, $post );

		return $post;
	}
}
PK     ƒŠU]‹‚€   €   %  vendor/cmb2/cmb2/includes/CMB2_JS.phpnu „[µü¤        <?php
/**
 * Handles the dependencies and enqueueing of the CMB2 JS scripts
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_JS {

	/**
	 * The CMB2 JS handle
	 *
	 * @var   string
	 * @since 2.0.7
	 */
	protected static $handle = 'cmb2-scripts';

	/**
	 * The CMB2 JS variable name
	 *
	 * @var   string
	 * @since 2.0.7
	 */
	protected static $js_variable = 'cmb2_l10';

	/**
	 * Array of CMB2 JS dependencies
	 *
	 * @var   array
	 * @since 2.0.7
	 */
	protected static $dependencies = array(
		'jquery' => 'jquery',
	);

	/**
	 * Array of CMB2 fields model data for JS.
	 *
	 * @var   array
	 * @since 2.4.0
	 */
	protected static $fields = array();

	/**
	 * Add a dependency to the array of CMB2 JS dependencies
	 *
	 * @since 2.0.7
	 * @param array|string $dependencies Array (or string) of dependencies to add.
	 */
	public static function add_dependencies( $dependencies ) {
		foreach ( (array) $dependencies as $dependency ) {
			self::$dependencies[ $dependency ] = $dependency;
		}
	}

	/**
	 * Add field model data to the array for JS.
	 *
	 * @since 2.4.0
	 *
	 * @param CMB2_Field $field Field object.
	 */
	public static function add_field_data( CMB2_Field $field ) {
		$hash = $field->hash_id();
		if ( ! isset( self::$fields[ $hash ] ) ) {
			self::$fields[ $hash ] = $field->js_data();
		}
	}

	/**
	 * Enqueue the CMB2 JS
	 *
	 * @since  2.0.7
	 */
	public static function enqueue() {
		// Filter required script dependencies.
		$dependencies = self::$dependencies = apply_filters( 'cmb2_script_dependencies', self::$dependencies );

		// Only use minified files if SCRIPT_DEBUG is off.
		$debug = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG;

		$min = $debug ? '' : '.min';

		// if colorpicker.
		if ( isset( $dependencies['wp-color-picker'] ) ) {
			if ( ! is_admin() ) {
				self::colorpicker_frontend();
			}

			// Enqueue colorpicker
			if ( ! wp_script_is( 'wp-color-picker', 'enqueued' ) ) {
				wp_enqueue_script( 'wp-color-picker' );
			}

			if ( isset( $dependencies['wp-color-picker-alpha'] ) ) {
				self::register_colorpicker_alpha();
			}
		}

		// if file/file_list.
		if ( isset( $dependencies['media-editor'] ) ) {
			wp_enqueue_media();
			CMB2_Type_File_Base::output_js_underscore_templates();
		}

		// if timepicker.
		if ( isset( $dependencies['jquery-ui-datetimepicker'] ) ) {
			self::register_datetimepicker();
		}

		// if cmb2-wysiwyg.
		$enqueue_wysiwyg = isset( $dependencies['cmb2-wysiwyg'] ) && $debug;
		unset( $dependencies['cmb2-wysiwyg'] );

		// if cmb2-char-counter.
		$enqueue_char_counter = isset( $dependencies['cmb2-char-counter'] ) && $debug;
		unset( $dependencies['cmb2-char-counter'] );

		// Enqueue cmb JS.
		wp_enqueue_script( self::$handle, CMB2_Utils::url( "js/cmb2{$min}.js" ), array_values( $dependencies ), CMB2_VERSION, true );

		// if SCRIPT_DEBUG, we need to enqueue separately.
		if ( $enqueue_wysiwyg ) {
			wp_enqueue_script( 'cmb2-wysiwyg', CMB2_Utils::url( 'js/cmb2-wysiwyg.js' ), array( 'jquery', 'wp-util' ), CMB2_VERSION );
		}
		if ( $enqueue_char_counter ) {
			wp_enqueue_script( 'cmb2-char-counter', CMB2_Utils::url( 'js/cmb2-char-counter.js' ), array( 'jquery', 'wp-util' ), CMB2_VERSION );
		}

		self::localize( $debug );

		do_action( 'cmb2_footer_enqueue' );
	}

	/**
	 * Register or enqueue the wp-color-picker-alpha script.
	 *
	 * @since  2.2.7
	 *
	 * @param  boolean $enqueue Whether or not to enqueue.
	 *
	 * @return void
	 */
	public static function register_colorpicker_alpha( $enqueue = false ) {
		// Only use minified files if SCRIPT_DEBUG is off.
		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
		$func = $enqueue ? 'wp_enqueue_script' : 'wp_register_script';
		$func( 'wp-color-picker-alpha', CMB2_Utils::url( "js/wp-color-picker-alpha{$min}.js" ), array( 'wp-color-picker' ), '2.1.3' );
	}

	/**
	 * Register or enqueue the jquery-ui-datetimepicker script.
	 *
	 * @since  2.2.7
	 *
	 * @param  boolean $enqueue Whether or not to enqueue.
	 *
	 * @return void
	 */
	public static function register_datetimepicker( $enqueue = false ) {
		$func = $enqueue ? 'wp_enqueue_script' : 'wp_register_script';
		$func( 'jquery-ui-datetimepicker', CMB2_Utils::url( 'js/jquery-ui-timepicker-addon.min.js' ), array( 'jquery-ui-slider' ), '1.5.0' );
	}

	/**
	 * We need to register colorpicker on the front-end
	 *
	 * @since  2.0.7
	 */
	protected static function colorpicker_frontend() {
		wp_register_script( 'iris', admin_url( 'js/iris.min.js' ), array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ), CMB2_VERSION );
		wp_register_script( 'wp-color-picker', admin_url( 'js/color-picker.min.js' ), array( 'iris' ), CMB2_VERSION );
		wp_localize_script( 'wp-color-picker', 'wpColorPickerL10n', array(
			'clear'         => esc_html__( 'Clear', 'cmb2' ),
			'defaultString' => esc_html__( 'Default', 'cmb2' ),
			'pick'          => esc_html__( 'Select Color', 'cmb2' ),
			'current'       => esc_html__( 'Current Color', 'cmb2' ),
		) );
	}

	/**
	 * Localize the php variables for CMB2 JS
	 *
	 * @since  2.0.7
	 *
	 * @param mixed $debug Whether or not we are debugging.
	 */
	protected static function localize( $debug ) {
		static $localized = false;
		if ( $localized ) {
			return;
		}

		$localized = true;
		$l10n = array(
			'fields'            => self::$fields,
			'ajax_nonce'        => wp_create_nonce( 'ajax_nonce' ),
			'ajaxurl'           => admin_url( '/admin-ajax.php' ),
			'script_debug'      => $debug,
			'up_arrow_class'    => 'dashicons dashicons-arrow-up-alt2',
			'down_arrow_class'  => 'dashicons dashicons-arrow-down-alt2',
			'user_can_richedit' => user_can_richedit(),
			'defaults'          => array(
				'code_editor'  => false,
				'color_picker' => false,
				'date_picker'  => array(
					'changeMonth'     => true,
					'changeYear'      => true,
					'dateFormat'      => _x( 'mm/dd/yy', 'Valid formatDate string for jquery-ui datepicker', 'cmb2' ),
					'dayNames'        => explode( ',', esc_html__( 'Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday', 'cmb2' ) ),
					'dayNamesMin'     => explode( ',', esc_html__( 'Su, Mo, Tu, We, Th, Fr, Sa', 'cmb2' ) ),
					'dayNamesShort'   => explode( ',', esc_html__( 'Sun, Mon, Tue, Wed, Thu, Fri, Sat', 'cmb2' ) ),
					'monthNames'      => explode( ',', esc_html__( 'January, February, March, April, May, June, July, August, September, October, November, December', 'cmb2' ) ),
					'monthNamesShort' => explode( ',', esc_html__( 'Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec', 'cmb2' ) ),
					'nextText'        => esc_html__( 'Next', 'cmb2' ),
					'prevText'        => esc_html__( 'Prev', 'cmb2' ),
					'currentText'     => esc_html__( 'Today', 'cmb2' ),
					'closeText'       => esc_html__( 'Done', 'cmb2' ),
					'clearText'       => esc_html__( 'Clear', 'cmb2' ),
				),
				'time_picker'  => array(
					'timeOnlyTitle' => esc_html__( 'Choose Time', 'cmb2' ),
					'timeText'      => esc_html__( 'Time', 'cmb2' ),
					'hourText'      => esc_html__( 'Hour', 'cmb2' ),
					'minuteText'    => esc_html__( 'Minute', 'cmb2' ),
					'secondText'    => esc_html__( 'Second', 'cmb2' ),
					'currentText'   => esc_html__( 'Now', 'cmb2' ),
					'closeText'     => esc_html__( 'Done', 'cmb2' ),
					'timeFormat'    => _x( 'hh:mm TT', 'Valid formatting string, as per http://trentrichardson.com/examples/timepicker/', 'cmb2' ),
					'controlType'   => 'select',
					'stepMinute'    => 5,
				),
			),
			'strings' => array(
				'upload_file'  => esc_html__( 'Use this file', 'cmb2' ),
				'upload_files' => esc_html__( 'Use these files', 'cmb2' ),
				'remove_image' => esc_html__( 'Remove Image', 'cmb2' ),
				'remove_file'  => esc_html__( 'Remove', 'cmb2' ),
				'file'         => esc_html__( 'File:', 'cmb2' ),
				'download'     => esc_html__( 'Download', 'cmb2' ),
				'check_toggle' => esc_html__( 'Select / Deselect All', 'cmb2' ),
			),
		);

		if ( isset( self::$dependencies['code-editor'] ) && function_exists( 'wp_enqueue_code_editor' ) ) {
			$l10n['defaults']['code_editor'] = wp_enqueue_code_editor( array(
				'type' => 'text/html',
			) );
		}

		wp_localize_script( self::$handle, self::$js_variable, apply_filters( 'cmb2_localized_data', $l10n ) );
	}

}
PK     ƒŠU]§l˜Þ    /  vendor/cmb2/cmb2/includes/CMB2_Hookup_Field.phpnu „[µü¤        <?php
/**
 * CMB2 Hookup Field
 *
 * Adds necessary hooks for certain field types.
 *
 * @since  2.11.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Hookup_Field {

	/**
	 * Field id.
	 *
	 * @var   string
	 * @since 2.11.0
	 */
	protected $field_id;

	/**
	 * CMB2 object id.
	 *
	 * @var   string
	 * @since 2.11.0
	 */
	protected $cmb_id;

	/**
	 * The object type we are performing the hookup for
	 *
	 * @var   string
	 * @since 2.11.0
	 */
	protected $object_type = 'post';

	/**
	 * Initialize all hooks for the given field.
	 *
	 * @since  2.11.0
	 * @param  array $field The field arguments array.
	 * @param  CMB2  $cmb   The CMB2 object.
	 * @return array        The field arguments array.
	 */
	public static function init( $field, CMB2 $cmb ) {
		switch ( $field['type'] ) {
			case 'file':
			case 'file_list':
				// Initiate attachment JS hooks.
				add_filter( 'wp_prepare_attachment_for_js', array( 'CMB2_Type_File_Base', 'prepare_image_sizes_for_js' ), 10, 3 );
				break;

			case 'oembed':
				// Initiate oembed Ajax hooks.
				cmb2_ajax();
				break;

			case 'group':
				if ( empty( $field['render_row_cb'] ) ) {
					$field['render_row_cb'] = array( $cmb, 'render_group_callback' );
				}
				break;
			case 'colorpicker':
				// https://github.com/JayWood/CMB2_RGBa_Picker
				// Dequeue the rgba_colorpicker custom field script if it is used,
				// since we now enqueue our own more current version.
				add_action( 'admin_enqueue_scripts', array( 'CMB2_Type_Colorpicker', 'dequeue_rgba_colorpicker_script' ), 99 );
				break;

			case 'text_datetime_timestamp_timezone':
				foreach ( $cmb->box_types() as $object_type ) {
					if ( ! $cmb->is_supported_core_object_type( $object_type ) ) {
						// Ignore post-types...
						continue;
					}

					if ( empty( $field['field_hookup_instance'][ $object_type ] ) ) {
						$instance = new self( $field, $object_type, $cmb );
						$method   = 'options-page' === $object_type
							? 'text_datetime_timestamp_timezone_option_back_compat'
							: 'text_datetime_timestamp_timezone_back_compat';

						$field['field_hookup_instance'][ $object_type ] = array( $instance, $method );
					}

					if ( false === $field['field_hookup_instance'][ $object_type ] ) {
						// If set to false, no need to filter.
						// This can be set if you have updated your use of the field type value to
						// assume the JSON value.
						continue;
					}

					if ( 'options-page' === $object_type ) {
						$option_name = $cmb->object_id();
						add_filter( "pre_option_{$option_name}", $field['field_hookup_instance'][ $object_type ], 10, 3 );
						continue;
					}

					add_filter( "get_{$object_type}_metadata", $field['field_hookup_instance'][ $object_type ], 10, 5 );
				}
				break;
		}

		return $field;
	}

	/**
	 * Constructor
	 *
	 * @since 2.11.0
	 * @param CMB2 $cmb The CMB2 object to hookup.
	 */
	public function __construct( $field, $object_type, CMB2 $cmb ) {
		$this->field_id    = $field['id'];
		$this->object_type = $object_type;
		$this->cmb_id      = $cmb->cmb_id;
	}

	/**
	 * Adds a back-compat shim for text_datetime_timestamp_timezone field type values.
	 *
	 * Handles old serialized DateTime values, as well as the new JSON formatted values.
	 *
	 * @since  2.11.0
	 *
	 * @param  mixed  $value     The value of the metadata.
	 * @param  int    $object_id ID of the object metadata is for.
	 * @param  string $meta_key  Meta key.
	 * @param  bool   $single    Whether to return a single value.
	 * @param  string $meta_type Type of object metadata is for.
	 * @return mixed             Maybe reserialized value.
	 */
	public function text_datetime_timestamp_timezone_back_compat( $value, $object_id, $meta_key, $single, $meta_type ) {
		if ( $meta_key === $this->field_id ) {
			remove_filter( "get_{$meta_type}_metadata", array( $this, __FUNCTION__ ), 10, 5 );
			$value = get_metadata( $meta_type, $object_id, $meta_key, $single );
			add_filter( "get_{$meta_type}_metadata", array( $this, __FUNCTION__ ), 10, 5 );

			$value = $this->reserialize_safe_value( $value );
		}

		return $value;
	}

	/**
	 * Adds a back-compat shim for text_datetime_timestamp_timezone field type values on options pages.
	 *
	 * Handles old serialized DateTime values, as well as the new JSON formatted values.
	 *
	 * @since  2.11.0
	 *
	 * @param  mixed  $value         The value of the option.
	 * @param  string $option        Option name.
	 * @param  mixed  $default_value Default value.
	 * @return mixed                 The updated value.
	 */
	public function text_datetime_timestamp_timezone_option_back_compat( $value, $option, $default_value ) {
		remove_filter( "pre_option_{$option}", array( $this, __FUNCTION__ ), 10, 3 );
		$value = get_option( $option, $default_value );
		add_filter( "pre_option_{$option}", array( $this, __FUNCTION__ ), 10, 3 );

		if ( ! empty( $value ) && is_array( $value ) ) {

			// Loop fields and update values for all text_datetime_timestamp_timezone fields.
			foreach ( CMB2_Boxes::get( $this->cmb_id )->prop( 'fields' ) as $field ) {
				if (
					'text_datetime_timestamp_timezone' === $field['type']
					&& ! empty( $value[ $field['id'] ] )
				) {
					$value[ $field['id'] ] = $this->reserialize_safe_value( $value[ $field['id'] ] );
				}
			}
		}

		return $value;
	}

	/**
	 * Reserialize a value to a safe serialized DateTime value.
	 *
	 * @since  2.11.0
	 *
	 * @param  mixed $value The value to check.
	 * @return mixed       The value, possibly reserialized.
	 */
	protected function reserialize_safe_value( $value ) {
		if ( is_array( $value ) ) {
			return array_map( array( $this, 'reserialize_safe_value' ), $value );
		}

		$updated_val = CMB2_Utils::get_datetime_from_value( $value );
		$value = $updated_val ? serialize( $updated_val ) : '';

		return $value;
	}
}
PK     ƒŠU]¢»5ö      #  vendor/cmb2/cmb2/includes/index.phpnu „[µü¤        <?php
// Silence is golden
PK     ƒŠU]œWÓ‡D  ‡D  +  vendor/cmb2/cmb2/includes/CMB2_Sanitize.phpnu „[µü¤        <?php
/**
 * CMB2 field sanitization
 *
 * @since  0.0.4
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @method string _id()
 */
class CMB2_Sanitize {

	/**
	 * A CMB field object
	 *
	 * @var CMB2_Field object
	 */
	public $field;

	/**
	 * Field's value
	 *
	 * @var mixed
	 */
	public $value;

	/**
	 * Setup our class vars
	 *
	 * @since 1.1.0
	 * @param CMB2_Field $field A CMB2 field object.
	 * @param mixed      $value Field value.
	 */
	public function __construct( CMB2_Field $field, $value ) {
		$this->field = $field;
		$this->value = $value;
	}

	/**
	 * Catchall method if field's 'sanitization_cb' is NOT defined,
	 * or field type does not have a corresponding validation method.
	 *
	 * @since  1.0.0
	 *
	 * @param  string $name      Non-existent method name.
	 * @param  array  $arguments All arguments passed to the method.
	 * @return mixed
	 */
	public function __call( $name, $arguments ) {
		return $this->default_sanitization();
	}

	/**
	 * Default fallback sanitization method. Applies filters.
	 *
	 * @since  1.0.2
	 */
	public function default_sanitization() {
		$field_type = $this->field->type();

		/**
		 * This exists for back-compatibility, but validation
		 * is not what happens here.
		 *
		 * @deprecated See documentation for "cmb2_sanitize_{$field_type}".
		 */
		if ( function_exists( 'apply_filters_deprecated' ) ) {
			$override_value = apply_filters_deprecated( "cmb2_validate_{$field_type}", array( null, $this->value, $this->field->object_id, $this->field->args(), $this ), '2.0.0', "cmb2_sanitize_{$field_type}" );
		} else {
			$override_value = apply_filters( "cmb2_validate_{$field_type}", null, $this->value, $this->field->object_id, $this->field->args(), $this );
		}

		if ( null !== $override_value ) {
			return $override_value;
		}

		$sanitized_value = '';
		switch ( $field_type ) {
			case 'wysiwyg':
			case 'textarea_small':
			case 'oembed':
				$sanitized_value = $this->textarea();
				break;
			case 'taxonomy_select':
			case 'taxonomy_select_hierarchical':
			case 'taxonomy_radio':
			case 'taxonomy_radio_inline':
			case 'taxonomy_radio_hierarchical':
			case 'taxonomy_multicheck':
			case 'taxonomy_multicheck_hierarchical':
			case 'taxonomy_multicheck_inline':
				$sanitized_value = $this->taxonomy();
				break;
			case 'multicheck':
			case 'multicheck_inline':
			case 'file_list':
			case 'group':
				// no filtering
				$sanitized_value = $this->value;
				break;
			default:
				// Handle repeatable fields array
				// We'll fallback to 'sanitize_text_field'
				$sanitized_value = $this->_default_sanitization();
				break;
		}

		return $this->_is_empty_array( $sanitized_value ) ? '' : $sanitized_value;
	}

	/**
	 * Default sanitization method, sanitize_text_field. Checks if value is array.
	 *
	 * @since  2.2.4
	 * @return mixed  Sanitized value.
	 */
	protected function _default_sanitization() {
		// Handle repeatable fields array.
		return is_array( $this->value ) ? array_map( 'sanitize_text_field', $this->value ) : sanitize_text_field( $this->value );
	}

	/**
	 * Sets the object terms to the object (if not options-page) and optionally returns the sanitized term values.
	 *
	 * @since  2.2.4
	 * @return mixed  Blank value, or sanitized term values if "cmb2_return_taxonomy_values_{$cmb_id}" is true.
	 */
	public function taxonomy() {
		$sanitized_value = '';

		if ( ! $this->field->args( 'taxonomy' ) ) {
			CMB2_Utils::log_if_debug( __METHOD__, __LINE__, "{$this->field->type()} {$this->field->_id( '', false )} is missing the 'taxonomy' parameter." );
		} else {

			if ( in_array( $this->field->object_type, array( 'options-page', 'term' ), true ) ) {
				$return_values = true;
			} else {
				wp_set_object_terms( $this->field->object_id, $this->value, $this->field->args( 'taxonomy' ) );
				$return_values = false;
			}

			$cmb_id = $this->field->cmb_id;

			/**
			 * Filter whether 'taxonomy_*' fields should return their value when being sanitized.
			 *
			 * By default, these fields do not return a value as we do not want them stored to meta
			 * (as they are stored as terms). This allows overriding that and is used by CMB2::get_sanitized_values().
			 *
			 * The dynamic portion of the hook, $cmb_id, refers to the this field's CMB2 box id.
			 *
			 * @since 2.2.4
			 *
			 * @param bool          $return_values By default, this is only true for 'options-page' boxes. To enable:
			 *                                     `add_filter( "cmb2_return_taxonomy_values_{$cmb_id}", '__return_true' );`
			 * @param CMB2_Sanitize $sanitizer This object.
			 */
			if ( apply_filters( "cmb2_return_taxonomy_values_{$cmb_id}", $return_values, $this ) ) {
				$sanitized_value = $this->_default_sanitization();
			}
		}

		return $sanitized_value;
	}

	/**
	 * Simple checkbox validation
	 *
	 * @since  1.0.1
	 * @return string|false 'on' or false
	 */
	public function checkbox() {
		return $this->value === 'on' ? 'on' : false;
	}

	/**
	 * Validate url in a meta value.
	 *
	 * @since  1.0.1
	 * @return string        Empty string or escaped url
	 */
	public function text_url() {
		$protocols = $this->field->args( 'protocols' );
		$default   = $this->field->get_default();

		// for repeatable.
		if ( is_array( $this->value ) ) {
			foreach ( $this->value as $key => $val ) {
				$this->value[ $key ] = self::sanitize_and_secure_url( $val, $protocols, $default );
			}
		} else {
			$this->value = self::sanitize_and_secure_url( $this->value, $protocols, $default );
		}

		return $this->value;
	}

	public function colorpicker() {
		// for repeatable.
		if ( is_array( $this->value ) ) {
			$check = $this->value;
			$this->value = array();
			foreach ( $check as $key => $val ) {
				if ( $val && '#' != $val ) {
					$this->value[ $key ] = esc_attr( $val );
				}
			}
		} else {
			$this->value = ! $this->value || '#' == $this->value ? '' : esc_attr( $this->value );
		}
		return $this->value;
	}

	/**
	 * Validate email in a meta value
	 *
	 * @since  1.0.1
	 * @return string       Empty string or sanitized email
	 */
	public function text_email() {
		// for repeatable.
		if ( is_array( $this->value ) ) {
			foreach ( $this->value as $key => $val ) {
				$val = trim( $val );
				$this->value[ $key ] = is_email( $val ) ? $val : '';
			}
		} else {
			$this->value = trim( $this->value );
			$this->value = is_email( $this->value ) ? $this->value : '';
		}

		return $this->value;
	}

	/**
	 * Validate money in a meta value
	 *
	 * @since  1.0.1
	 * @return string Empty string or sanitized money value
	 */
	public function text_money() {
		if ( ! $this->value ) {
			return '';
		}

		global $wp_locale;

		$search = array( $wp_locale->number_format['thousands_sep'], $wp_locale->number_format['decimal_point'] );
		$replace = array( '', '.' );

		// Strip slashes. Example: 2\'180.00.
		// See https://github.com/CMB2/CMB2/issues/1014.
		$this->value = wp_unslash( $this->value );

		// for repeatable.
		if ( is_array( $this->value ) ) {
			foreach ( $this->value as $key => $val ) {
				if ( $val ) {
					$this->value[ $key ] = number_format_i18n( (float) str_ireplace( $search, $replace, $val ), 2 );
				}
			}
		} else {
			$this->value = number_format_i18n( (float) str_ireplace( $search, $replace, $this->value ), 2 );
		}

		return $this->value;
	}

	/**
	 * Converts text date to timestamp
	 *
	 * @since  1.0.2
	 * @return string Timestring
	 */
	public function text_date_timestamp() {
		// date_create_from_format if there is a slash in the value.
		$this->value = wp_unslash( $this->value );

		return is_array( $this->value )
			? array_map( array( $this->field, 'get_timestamp_from_value' ), $this->value )
			: $this->field->get_timestamp_from_value( $this->value );
	}

	/**
	 * Datetime to timestamp
	 *
	 * @since  1.0.1
	 *
	 * @param bool $repeat Whether or not to repeat.
	 * @return string|array Timestring
	 */
	public function text_datetime_timestamp( $repeat = false ) {
		// date_create_from_format if there is a slash in the value.
		$this->value = wp_unslash( $this->value );

		if ( $this->is_empty_value() ) {
			return '';
		}

		$repeat_value = $this->_check_repeat( __FUNCTION__, $repeat );
		if ( false !== $repeat_value ) {
			return $repeat_value;
		}

		// Account for timestamp values passed through REST API.
		if ( $this->is_valid_date_value() ) {

			$this->value = CMB2_Utils::make_valid_time_stamp( $this->value );

		} elseif ( isset( $this->value['date'], $this->value['time'] ) ) {
			$this->value = $this->field->get_timestamp_from_value( $this->value['date'] . ' ' . $this->value['time'] );
		}

		if ( $tz_offset = $this->field->field_timezone_offset() ) {
			$this->value += (int) $tz_offset;
		}

		return $this->value;
	}

	/**
	 * Datetime to timestamp with timezone
	 *
	 * @since  1.0.1
	 *
	 * @param bool $repeat Whether or not to repeat.
	 * @return string       Timestring
	 */
	public function text_datetime_timestamp_timezone( $repeat = false ) {
		static $utc_values = array();

		if ( $this->is_empty_value() ) {
			return '';
		}

		// date_create_from_format if there is a slash in the value.
		$this->value = wp_unslash( $this->value );

		$utc_key = $this->field->_id( '', false ) . '_utc';

		$repeat_value = $this->_check_repeat( __FUNCTION__, $repeat );
		if ( false !== $repeat_value ) {
			if ( ! empty( $utc_values[ $utc_key ] ) ) {
				$this->_save_utc_value( $utc_key, $utc_values[ $utc_key ] );
				unset( $utc_values[ $utc_key ] );
			}

			return $repeat_value;
		}

		$tzstring = null;

		if ( is_array( $this->value ) && array_key_exists( 'timezone', $this->value ) ) {
			$tzstring = $this->value['timezone'];
		}

		if ( empty( $tzstring ) ) {
			$tzstring = CMB2_Utils::timezone_string();
		}

		$offset = CMB2_Utils::timezone_offset( $tzstring );

		if ( 'UTC' === substr( $tzstring, 0, 3 ) ) {
			$tzstring = timezone_name_from_abbr( '', $offset, 0 );
			/**
			 * The timezone_name_from_abbr() returns false if not found based on offset.
			 * Since there are currently some invalid timezones in wp_timezone_dropdown(),
			 * fallback to an offset of 0 (UTC+0)
			 * https://core.trac.wordpress.org/ticket/29205
			 */
			$tzstring = false !== $tzstring ? $tzstring : timezone_name_from_abbr( '', 0, 0 );
		}

		$full_format = $this->field->args['date_format'] . ' ' . $this->field->args['time_format'];

		try {
			$datetime = null;

			if ( is_array( $this->value ) ) {

				$full_date = $this->value['date'] . ' ' . $this->value['time'];
				$datetime = date_create_from_format( $full_format, $full_date );

			} elseif ( $this->is_valid_date_value() ) {

				$timestamp = CMB2_Utils::make_valid_time_stamp( $this->value );
				if ( $timestamp ) {
					$datetime = new DateTime();
					$datetime->setTimestamp( $timestamp );
				}
			}

			if ( ! is_object( $datetime ) ) {
				$this->value = $utc_stamp = '';
			} else {
				$datetime->setTimezone( new DateTimeZone( $tzstring ) );
				$utc_stamp   = date_timestamp_get( $datetime ) - $offset;
				$this->value = json_encode( $datetime );
			}

			if ( $this->field->group ) {
				$this->value = array(
					'supporting_field_value' => $utc_stamp,
					'supporting_field_id'    => $utc_key,
					'value'                  => $this->value,
				);
			} else {
				// Save the utc timestamp supporting field.
				if ( $repeat ) {
					$utc_values[ $utc_key ][] = $utc_stamp;
				} else {
					$this->_save_utc_value( $utc_key, $utc_stamp );
				}
			}
		} catch ( Exception $e ) {
			$this->value = '';
			CMB2_Utils::log_if_debug( __METHOD__, __LINE__, $e->getMessage() );
		}

		return $this->value;
	}

	/**
	 * Sanitize textareas and wysiwyg fields
	 *
	 * @since  1.0.1
	 * @return string       Sanitized data
	 */
	public function textarea() {
		return is_array( $this->value ) ? array_map( 'wp_kses_post', $this->value ) : ( $this->value !== null ? wp_kses_post( $this->value ) : '' );
	}

	/**
	 * Sanitize code textareas
	 *
	 * @since  1.0.2
	 *
	 * @param bool $repeat Whether or not to repeat.
	 * @return string       Sanitized data
	 */
	public function textarea_code( $repeat = false ) {
		$repeat_value = $this->_check_repeat( __FUNCTION__, $repeat );
		if ( false !== $repeat_value ) {
			return $repeat_value;
		}

		return htmlspecialchars_decode( stripslashes( $this->value ), ENT_COMPAT );
	}

	/**
	 * Handles saving of attachment post ID and sanitizing file url
	 *
	 * @since  1.1.0
	 * @return string        Sanitized url
	 */
	public function file() {
		$file_id_key = $this->field->_id( '', false ) . '_id';

		if ( $this->field->group ) {
			// Return an array with url/id if saving a group field.
			$this->value = $this->_get_group_file_value_array( $file_id_key );
		} else {
			$this->_save_file_id_value( $file_id_key );
			$this->text_url();
		}

		return $this->value;
	}

	/**
	 * Gets the values for the `file` field type from the data being saved.
	 *
	 * @since  2.2.0
	 *
	 * @param mixed $id_key ID key to use.
	 * @return array
	 */
	public function _get_group_file_value_array( $id_key ) {
		$alldata = $this->field->group->data_to_save;
		$base_id = $this->field->group->_id( '', false );
		$i       = $this->field->group->index;

		// Check group $alldata data.
		$id_val = isset( $alldata[ $base_id ][ $i ][ $id_key ] )
			? absint( $alldata[ $base_id ][ $i ][ $id_key ] )
			: '';

		// We don't want to save 0 to the DB for file fields.
		if ( 0 === $id_val ) {
			$id_val = '';
		}

		return array(
			'value' => $this->text_url(),
			'supporting_field_value' => $id_val,
			'supporting_field_id'    => $id_key,
		);
	}

	/**
	 * Peforms saving of `file` attachement's ID
	 *
	 * @since  1.1.0
	 *
	 * @param mixed $file_id_key ID key to use.
	 * @return mixed
	 */
	public function _save_file_id_value( $file_id_key ) {
		$id_field = $this->_new_supporting_field( $file_id_key );

		// Check standard data_to_save data.
		$id_val = isset( $this->field->data_to_save[ $file_id_key ] )
			? $this->field->data_to_save[ $file_id_key ]
			: null;

		// If there is no ID saved yet, try to get it from the url.
		if ( $this->value && ! $id_val ) {
			$id_val = CMB2_Utils::image_id_from_url( $this->value );

			// If there is an ID but user emptied the input value, remove the ID.
		} elseif ( ! $this->value && $id_val ) {
			$id_val = null;
		}

		return $id_field->save_field( $id_val );
	}

	/**
	 * Peforms saving of `text_datetime_timestamp_timezone` utc timestamp
	 *
	 * @since  2.2.0
	 *
	 * @param mixed $utc_key   UTC key.
	 * @param mixed $utc_stamp UTC timestamp.
	 * @return mixed
	 */
	public function _save_utc_value( $utc_key, $utc_stamp ) {
		return $this->_new_supporting_field( $utc_key )->save_field( $utc_stamp );
	}

	/**
	 * Returns a new, supporting, CMB2_Field object based on a new field id.
	 *
	 * @since  2.2.0
	 *
	 * @param mixed $new_field_id New field ID.
	 * @return CMB2_Field
	 */
	public function _new_supporting_field( $new_field_id ) {
		return $this->field->get_field_clone( array(
			'id' => $new_field_id,
			'sanitization_cb' => false,
		) );
	}

	/**
	 * If repeating, loop through and re-apply sanitization method
	 *
	 * @since  1.1.0
	 * @param  string $method Class method.
	 * @param  bool   $repeat Whether repeating or not.
	 * @return mixed          Sanitized value
	 */
	public function _check_repeat( $method, $repeat ) {
		if ( $repeat || ! $this->field->args( 'repeatable' ) ) {
			return false;
		}

		$values_array = $this->value;

		$new_value = array();
		foreach ( $values_array as $this->value ) {
			if ( $this->value ) {
				$val = $this->$method( true );
				if ( ! empty( $val ) ) {
					$new_value[] = $val;
				}
			}
		}

		$this->value = $new_value;

		return empty( $this->value ) ? null : $this->value;
	}

	/**
	 * Determine if passed value is an empty array
	 *
	 * @since  2.0.6
	 * @param  mixed $to_check Value to check.
	 * @return boolean         Whether value is an array that's empty
	 */
	public function _is_empty_array( $to_check ) {
		if ( is_array( $to_check ) ) {
			$cleaned_up = array_filter( $to_check );
			return empty( $cleaned_up );
		}
		return false;
	}

	/**
	 * Sanitize a URL. Make the default scheme HTTPS.
	 *
	 * @since  2.10.0
	 * @param  string  $value     Unescaped URL.
	 * @param  array   $protocols Allowed protocols for URL.
	 * @param  string  $default   Default value if no URL found.
	 * @return string             escaped URL.
	 */
	public static function sanitize_and_secure_url( $url, $protocols = null, $default = null ) {
		if ( empty( $url ) ) {
			return $default;
		}

		$orig_scheme = parse_url( $url, PHP_URL_SCHEME );
		$url         = esc_url_raw( $url, $protocols );

		// If original url has no scheme...
		if ( null === $orig_scheme ) {

			// Let's make sure the added scheme is https.
			$url = set_url_scheme( $url, 'https' );
		}

		return $url;
	}

	/**
	 * Check if the current field's value is empty.
	 *
	 * @since  2.9.1
	 *
	 * @return boolean Wether value is empty.
	 */
	public function is_empty_value() {
		if ( empty( $this->value ) ) {
			return true;
		}

		if ( is_array( $this->value ) ) {
			$test = array_filter( $this->value );
			if ( empty( $test ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Check if the current field's value is a valid date value.
	 *
	 * @since  2.9.1
	 *
	 * @return boolean Wether value is a valid date value.
	 */
	public function is_valid_date_value() {
		return is_scalar( $this->value ) && CMB2_Utils::is_valid_date( $this->value );
	}

}
PK     ƒŠU]öIáÐ  Ð  A  vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller_Boxes.phpnu „[µü¤        <?php
/**
 * CMB2 objects/boxes endpoint for WordPress REST API.
 * Allows access to boxes configuration data.
 *
 * @todo  Add better documentation.
 * @todo  Research proper schema.
 *
 * @since 2.2.3
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_REST_Controller_Boxes extends CMB2_REST_Controller {

	/**
	 * The base of this controller's route.
	 *
	 * @var string
	 */
	protected $rest_base = 'boxes';

	/**
	 * The combined $namespace and $rest_base for these routes.
	 *
	 * @var string
	 */
	protected $namespace_base = '';

	/**
	 * Constructor
	 *
	 * @since 2.2.3
	 */
	public function __construct( WP_REST_Server $wp_rest_server ) {
		$this->namespace_base = $this->namespace . '/' . $this->rest_base;
		parent::__construct( $wp_rest_server );
	}

	/**
	 * Register the routes for the objects of the controller.
	 *
	 * @since 2.2.3
	 */
	public function register_routes() {
		$args = array(
			'_embed' => array(
				'description' => __( 'Includes the registered fields for the box in the response.', 'cmb2' ),
			),
		);

		// @todo determine what belongs in the context param.
		// $args['context'] = $this->get_context_param();
		// $args['context']['required'] = false;
		// $args['context']['default'] = 'view';
		// $args['context']['enum'] = array( 'view', 'embed' );
		// Returns all boxes data.
		register_rest_route( $this->namespace, '/' . $this->rest_base, array(
			array(
				'methods'             => WP_REST_Server::READABLE,
				'permission_callback' => array( $this, 'get_items_permissions_check' ),
				'callback'            => array( $this, 'get_items' ),
				'args'                => $args,
			),
			'schema' => array( $this, 'get_item_schema' ),
		) );

		$args['_rendered'] = array(
			'description' => __( 'Includes the fully rendered attributes, \'form_open\', \'form_close\', as well as the enqueued \'js_dependencies\' script handles, and \'css_dependencies\' stylesheet handles.', 'cmb2' ),
		);

		// Returns specific box's data.
		register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<cmb_id>[\w-]+)', array(
			array(
				'methods'             => WP_REST_Server::READABLE,
				'permission_callback' => array( $this, 'get_item_permissions_check' ),
				'callback'            => array( $this, 'get_item' ),
				'args'                => $args,
			),
			'schema' => array( $this, 'get_item_schema' ),
		) );
	}

	/**
	 * Check if a given request has access to get boxes.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function get_items_permissions_check( $request ) {
		$this->initiate_request( $request, __FUNCTION__ );

		/**
		 * By default, no special permissions needed.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_access Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return apply_filters( 'cmb2_api_get_boxes_permissions_check', true, $this );
	}

	/**
	 * Get all public CMB2 boxes.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_items( $request ) {
		$this->initiate_request( $request, 'boxes_read' );

		$boxes = CMB2_REST::get_all();
		if ( empty( $boxes ) ) {
			return new WP_Error( 'cmb2_rest_no_boxes', __( 'No boxes found.', 'cmb2' ), array(
				'status' => 403,
			) );
		}

		$boxes_data = array();

		// Loop and prepare boxes data.
		foreach ( $boxes as $this->rest_box ) {
			if (
				// Make sure this box can be read
				$this->rest_box->rest_read
				// And make sure current user can view this box.
				&& $this->get_item_permissions_check_filter( $this->request )
			) {
				$boxes_data[] = $this->server->response_to_data(
					$this->get_rest_box(),
					isset( $this->request['_embed'] )
				);
			}
		}

		return $this->prepare_item( $boxes_data );
	}

	/**
	 * Check if a given request has access to a box.
	 * By default, no special permissions needed, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return WP_Error|boolean
	 */
	public function get_item_permissions_check( $request ) {
		$this->initiate_rest_read_box( $request, 'box_read' );

		return $this->get_item_permissions_check_filter();
	}

	/**
	 * Check by filter if a given request has access to a box.
	 * By default, no special permissions needed, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  bool $can_access Whether the current request has access to view the box by default.
	 * @return WP_Error|boolean
	 */
	public function get_item_permissions_check_filter( $can_access = true ) {
		/**
		 * By default, no special permissions needed.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_access Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return $this->maybe_hook_callback_and_apply_filters( 'cmb2_api_get_box_permissions_check', $can_access );
	}

	/**
	 * Get one CMB2 box from the collection.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_item( $request ) {
		$this->initiate_rest_read_box( $request, 'box_read' );

		if ( is_wp_error( $this->rest_box ) ) {
			return $this->rest_box;
		}

		return $this->prepare_item( $this->get_rest_box() );
	}

	/**
	 * Get a CMB2 box prepared for REST
	 *
	 * @since 2.2.3
	 *
	 * @return array
	 */
	public function get_rest_box() {
		$cmb = $this->rest_box->cmb;

		$boxes_data = $cmb->meta_box;

		if ( isset( $this->request['_rendered'] ) && $this->namespace_base !== ltrim( CMB2_REST_Controller::get_intial_route(), '/' ) ) {
			$boxes_data['form_open'] = $this->get_cb_results( array( $cmb, 'render_form_open' ) );
			$boxes_data['form_close'] = $this->get_cb_results( array( $cmb, 'render_form_close' ) );

			global $wp_scripts, $wp_styles;
			$before_css = $wp_styles->queue;
			$before_js = $wp_scripts->queue;

			CMB2_JS::enqueue();

			$boxes_data['js_dependencies'] = array_values( array_diff( $wp_scripts->queue, $before_js ) );
			$boxes_data['css_dependencies'] = array_values( array_diff( $wp_styles->queue, $before_css ) );
		}

		// TODO: look into 'embed' parameter.
		// http://demo.wp-api.org/wp-json/wp/v2/posts?_embed
		unset( $boxes_data['fields'] );
		// Handle callable properties.
		unset( $boxes_data['show_on_cb'] );

		$response = rest_ensure_response( $boxes_data );

		$response->add_links( $this->prepare_links( $cmb ) );

		return $response;
	}

	/**
	 * Return an array of contextual links for box/boxes.
	 *
	 * @since  2.2.3
	 *
	 * @param  CMB2_REST $cmb CMB2_REST object to build links from.
	 *
	 * @return array          Array of links
	 */
	protected function prepare_links( $cmb ) {
		$boxbase      = $this->namespace_base . '/' . $cmb->cmb_id;
		$query_string = $this->get_query_string();

		return array(
			// Standard Link Relations -- http://v2.wp-api.org/extending/linking/
			'self' => array(
				'href' => rest_url( $boxbase . $query_string ),
			),
			'collection' => array(
				'href' => rest_url( $this->namespace_base . $query_string ),
			),
			// Custom Link Relations -- http://v2.wp-api.org/extending/linking/
			// TODO URL should document relationship.
			'https://cmb2.io/fields' => array(
				'href' => rest_url( trailingslashit( $boxbase ) . 'fields' . $query_string ),
				'embeddable' => true,
			),
		);
	}

}
PK     ƒŠU]Ô˜?tž+  ž+  ;  vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller.phpnu „[µü¤        <?php
if ( ! class_exists( 'WP_REST_Controller' ) ) {
	// Shim the WP_REST_Controller class if wp-api plugin not installed, & not in core.
	require_once cmb2_dir( 'includes/shim/WP_REST_Controller.php' );
}

/**
 * Creates CMB2 objects/fields endpoint for WordPress REST API.
 * Allows access to fields registered to a specific post type and more.
 *
 * @todo  Add better documentation.
 * @todo  Research proper schema.
 *
 * @since 2.2.3
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
abstract class CMB2_REST_Controller extends WP_REST_Controller {

	/**
	 * The namespace of this controller's route.
	 *
	 * @var string
	 */
	protected $namespace = CMB2_REST::NAME_SPACE;

	/**
	 * The base of this controller's route.
	 *
	 * @var string
	 */
	protected $rest_base;

	/**
	 * The current request object
	 *
	 * @var WP_REST_Request $request
	 * @since 2.2.3
	 */
	public $request;

	/**
	 * The current server object
	 *
	 * @var WP_REST_Server $server
	 * @since 2.2.3
	 */
	public $server;

	/**
	 * Box object id
	 *
	 * @var   mixed
	 * @since 2.2.3
	 */
	public $object_id = null;

	/**
	 * Box object type
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	public $object_type = '';

	/**
	 * CMB2 Instance
	 *
	 * @var CMB2_REST
	 */
	protected $rest_box;

	/**
	 * CMB2_Field Instance
	 *
	 * @var CMB2_Field
	 */
	protected $field;

	/**
	 * The initial route
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected static $route = '';

	/**
	 * Defines which endpoint the initial request is.
	 *
	 * @var string $request_type
	 * @since 2.2.3
	 */
	protected static $request_type = '';

	/**
	 * Constructor
	 *
	 * @since 2.2.3
	 */
	public function __construct( WP_REST_Server $wp_rest_server ) {
		$this->server = $wp_rest_server;
	}

	/**
	 * A wrapper for `apply_filters` which checks for box/field properties to hook to the filter.
	 *
	 * Checks if a CMB object callback property exists, and if it does,
	 * hook it to the permissions filter.
	 *
	 * @since  2.2.3
	 *
	 * @param  string $filter         The name of the filter to apply.
	 * @param  bool   $default_access The default access for this request.
	 *
	 * @return void
	 */
	public function maybe_hook_callback_and_apply_filters( $filter, $default_access ) {
		if ( ! $this->rest_box && $this->request->get_param( 'cmb_id' ) ) {
			$this->rest_box = CMB2_REST::get_rest_box( $this->request->get_param( 'cmb_id' ) );
		}

		$default_access = $this->maybe_hook_registered_callback( $filter, $default_access );

		/**
		 * Apply the permissions check filter.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $default_access Whether this CMB2 endpoint can be accessed.
		 * @param object $controller     This CMB2_REST_Controller object.
		 */
		$default_access = apply_filters( $filter, $default_access, $this );

		$this->maybe_unhook_registered_callback( $filter );

		return $default_access;
	}

	/**
	 * Checks if the CMB2 box has any registered callback parameters for the given filter.
	 *
	 * The registered handlers will have a property name which matches the filter, except:
	 * - The 'cmb2_api' prefix will be removed
	 * - A '_cb' suffix will be added (to stay inline with other '*_cb' parameters).
	 *
	 * @since  2.2.3
	 *
	 * @param  string $filter      The filter name.
	 * @param  bool   $default_val The default filter value.
	 *
	 * @return bool                The possibly-modified filter value (if the '*_cb' param is non-callable).
	 */
	public function maybe_hook_registered_callback( $filter, $default_val ) {
		if ( ! $this->rest_box || is_wp_error( $this->rest_box ) ) {
			return $default_val;
		}

		// Hook box specific filter callbacks.
		$val = $this->rest_box->cmb->maybe_hook_parameter( $filter, $default_val );
		if ( null !== $val ) {
			$default_val = $val;
		}

		return $default_val;
	}

	/**
	 * Unhooks any CMB2 box registered callback parameters for the given filter.
	 *
	 * @since  2.2.3
	 *
	 * @param  string $filter The filter name.
	 *
	 * @return void
	 */
	public function maybe_unhook_registered_callback( $filter ) {
		if ( ! $this->rest_box || is_wp_error( $this->rest_box ) ) {
			return;
		}

		// Unhook box specific filter callbacks.
		$this->rest_box->cmb->maybe_hook_parameter( $filter, null, 'remove_filter' );
	}

	/**
	 * Prepare a CMB2 object for serialization
	 *
	 * @since 2.2.3
	 *
	 * @param  mixed $data
	 * @return array $data
	 */
	public function prepare_item( $data ) {
		return $this->prepare_item_for_response( $data, $this->request );
	}

	/**
	 * Output buffers a callback and returns the results.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed $cb Callable function/method.
	 * @return mixed     Results of output buffer after calling function/method.
	 */
	public function get_cb_results( $cb ) {
		$args = func_get_args();
		array_shift( $args ); // ignore $cb
		ob_start();
		call_user_func_array( $cb, $args );

		return ob_get_clean();
	}

	/**
	 * Prepare the CMB2 item for the REST response.
	 *
	 * @since 2.2.3
	 *
	 * @param  mixed           $item     WordPress representation of the item.
	 * @param  WP_REST_Request $request  Request object.
	 * @return WP_REST_Response $response
	 */
	public function prepare_item_for_response( $data, $request = null ) {
		$data = $this->filter_response_by_context( $data, $this->request['context'] );

		/**
		 * Filter the prepared CMB2 item response.
		 *
		 * @since 2.2.3
		 *
		 * @param mixed  $data           Prepared data
		 * @param object $request        The WP_REST_Request object
		 * @param object $cmb2_endpoints This endpoints object
		 */
		return apply_filters( 'cmb2_rest_prepare', rest_ensure_response( $data ), $this->request, $this );
	}

	/**
	 * Initiates the request property and the rest_box property if box is readable.
	 *
	 * @since  2.2.3
	 *
	 * @param  WP_REST_Request $request      Request object.
	 * @param  string          $request_type A description of the type of request being made.
	 *
	 * @return void
	 */
	protected function initiate_rest_read_box( $request, $request_type ) {
		$this->initiate_rest_box( $request, $request_type );

		if ( ! is_wp_error( $this->rest_box ) && ! $this->rest_box->rest_read ) {
			$this->rest_box = new WP_Error( 'cmb2_rest_no_read_error', __( 'This box does not have read permissions.', 'cmb2' ), array(
				'status' => 403,
			) );
		}
	}

	/**
	 * Initiates the request property and the rest_box property if box is writeable.
	 *
	 * @since  2.2.3
	 *
	 * @param  WP_REST_Request $request      Request object.
	 * @param  string          $request_type A description of the type of request being made.
	 *
	 * @return void
	 */
	protected function initiate_rest_edit_box( $request, $request_type ) {
		$this->initiate_rest_box( $request, $request_type );

		if ( ! is_wp_error( $this->rest_box ) && ! $this->rest_box->rest_edit ) {
			$this->rest_box = new WP_Error( 'cmb2_rest_no_write_error', __( 'This box does not have write permissions.', 'cmb2' ), array(
				'status' => 403,
			) );
		}
	}

	/**
	 * Initiates the request property and the rest_box property.
	 *
	 * @since  2.2.3
	 *
	 * @param  WP_REST_Request $request      Request object.
	 * @param  string          $request_type A description of the type of request being made.
	 *
	 * @return void
	 */
	protected function initiate_rest_box( $request, $request_type ) {
		$this->initiate_request( $request, $request_type );

		$this->rest_box = CMB2_REST::get_rest_box( $this->request->get_param( 'cmb_id' ) );

		if ( ! $this->rest_box ) {

			$this->rest_box = new WP_Error( 'cmb2_rest_box_not_found_error', __( 'No box found by that id. A box needs to be registered with the "show_in_rest" parameter configured.', 'cmb2' ), array(
				'status' => 403,
			) );

		} else {

			if ( isset( $this->request['object_id'] ) ) {
				$this->rest_box->cmb->object_id( sanitize_text_field( $this->request['object_id'] ) );
			}

			if ( isset( $this->request['object_type'] ) ) {
				$this->rest_box->cmb->object_type( sanitize_text_field( $this->request['object_type'] ) );
			}
		}
	}

	/**
	 * Initiates the request property and sets up the initial static properties.
	 *
	 * @since  2.2.3
	 *
	 * @param  WP_REST_Request $request      Request object.
	 * @param  string          $request_type A description of the type of request being made.
	 *
	 * @return void
	 */
	public function initiate_request( $request, $request_type ) {
		$this->request = $request;

		if ( ! isset( $this->request['context'] ) || empty( $this->request['context'] ) ) {
			$this->request['context'] = 'view';
		}

		if ( ! self::$request_type ) {
			self::$request_type = $request_type;
		}

		if ( ! self::$route ) {
			self::$route = $this->request->get_route();
		}
	}

	/**
	 * Useful when getting `_embed`-ed items
	 *
	 * @since  2.2.3
	 *
	 * @return string  Initial requested type.
	 */
	public static function get_intial_request_type() {
		return self::$request_type;
	}

	/**
	 * Useful when getting `_embed`-ed items
	 *
	 * @since  2.2.3
	 *
	 * @return string  Initial requested route.
	 */
	public static function get_intial_route() {
		return self::$route;
	}

	/**
	 * Get CMB2 fields schema, conforming to JSON Schema
	 *
	 * @since 2.2.3
	 *
	 * @return array
	 */
	public function get_item_schema() {
		$schema = array(
			'$schema'              => 'http://json-schema.org/draft-04/schema#',
			'title'                => 'CMB2',
			'type'                 => 'object',
			'properties'           => array(
				'description' => array(
					'description' => __( 'A human-readable description of the object.', 'cmb2' ),
					'type'        => 'string',
					'context'     => array(
						'view',
					),
				),
				'name' => array(
					'description' => __( 'The id for the object.', 'cmb2' ),
					'type'        => 'integer',
					'context'     => array(
						'view',
					),
				),
				'name' => array(
					'description' => __( 'The title for the object.', 'cmb2' ),
					'type'        => 'string',
					'context'     => array(
						'view',
					),
				),
			),
		);

		return $this->add_additional_fields_schema( $schema );
	}

	/**
	 * Return an array of contextual links for endpoint/object
	 *
	 * @link http://v2.wp-api.org/extending/linking/
	 * @link http://www.iana.org/assignments/link-relations/link-relations.xhtml
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed $object Object to build links from.
	 *
	 * @return array          Array of links
	 */
	abstract protected function prepare_links( $object );

	/**
	 * Get whitelisted query strings from URL for appending to link URLS.
	 *
	 * @since  2.2.3
	 *
	 * @return string URL query stringl
	 */
	public function get_query_string() {
		$defaults = array(
			'object_id'   => 0,
			'object_type' => '',
			'_rendered'   => '',
			// '_embed'      => '',
		);

		$query_string = '';

		foreach ( $defaults as $key => $value ) {
			if ( isset( $this->request[ $key ] ) ) {
				$query_string .= $query_string ? '&' : '?';
				$query_string .= $key;
				if ( $value = sanitize_text_field( $this->request[ $key ] ) ) {
					$query_string .= '=' . $value;
				}
			}
		}

		return $query_string;
	}

}
PK     ƒŠU]­»7í?  í?  B  vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.phpnu „[µü¤        <?php
/**
 * CMB2 objects/fields endpoint for WordPress REST API.
 * Allows access to fields registered to a specific box.
 *
 * @todo  Add better documentation.
 * @todo  Research proper schema.
 *
 * @since 2.2.3
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_REST_Controller_Fields extends CMB2_REST_Controller_Boxes {

	/**
	 * Register the routes for the objects of the controller.
	 *
	 * @since 2.2.3
	 */
	public function register_routes() {
		$args = array(
			'_embed' => array(
				'description' => __( 'Includes the box object which the fields are registered to in the response.', 'cmb2' ),
			),
			'_rendered' => array(
				'description' => __( 'When the \'_rendered\' argument is passed, the renderable field attributes will be returned fully rendered. By default, the names of the callback handers for the renderable attributes will be returned.', 'cmb2' ),
			),
			'object_id' => array(
				'description' => __( 'To view or modify the field\'s value, the \'object_id\' and \'object_type\' arguments are required.', 'cmb2' ),
			),
			'object_type' => array(
				'description' => __( 'To view or modify the field\'s value, the \'object_id\' and \'object_type\' arguments are required.', 'cmb2' ),
			),
		);

		// Returns specific box's fields.
		register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<cmb_id>[\w-]+)/fields/', array(
			array(
				'methods'             => WP_REST_Server::READABLE,
				'permission_callback' => array( $this, 'get_items_permissions_check' ),
				'callback'            => array( $this, 'get_items' ),
				'args'                => $args,
			),
			'schema' => array( $this, 'get_item_schema' ),
		) );

		$delete_args = $args;
		$delete_args['object_id']['required'] = true;
		$delete_args['object_type']['required'] = true;

		// Returns specific field data.
		register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P<cmb_id>[\w-]+)/fields/(?P<field_id>[\w-]+)', array(
			array(
				'methods'             => WP_REST_Server::READABLE,
				'permission_callback' => array( $this, 'get_item_permissions_check' ),
				'callback'            => array( $this, 'get_item' ),
				'args'                => $args,
			),
			array(
				'methods'             => WP_REST_Server::EDITABLE,
				'permission_callback' => array( $this, 'update_item_permissions_check' ),
				'callback'            => array( $this, 'update_item' ),
				'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				'args'                => $args,
			),
			array(
				'methods'             => WP_REST_Server::DELETABLE,
				'permission_callback' => array( $this, 'delete_item_permissions_check' ),
				'callback'            => array( $this, 'delete_item' ),
				'args'                => $delete_args,
			),
			'schema' => array( $this, 'get_item_schema' ),
		) );
	}

	/**
	 * Check if a given request has access to get fields.
	 * By default, no special permissions needed, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|boolean
	 */
	public function get_items_permissions_check( $request ) {
		$this->initiate_rest_read_box( $request, 'fields_read' );
		$can_access = true;

		/**
		 * By default, no special permissions needed.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_access Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return $this->maybe_hook_callback_and_apply_filters( 'cmb2_api_get_fields_permissions_check', $can_access );
	}

	/**
	 * Get all public CMB2 box fields.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_items( $request ) {
		if ( ! $this->rest_box ) {
			$this->initiate_rest_read_box( $request, 'fields_read' );
		}

		if ( is_wp_error( $this->rest_box ) ) {
			return $this->rest_box;
		}

		$fields = array();
		foreach ( $this->rest_box->cmb->prop( 'fields', array() ) as $field ) {

			// Make sure this field can be read.
			$this->field = $this->rest_box->field_can_read( $field['id'], true );

			// And make sure current user can view this box.
			if ( $this->field && $this->get_item_permissions_check_filter() ) {
				$fields[ $field['id'] ] = $this->server->response_to_data(
					$this->prepare_field_response(),
					isset( $this->request['_embed'] )
				);
			}
		}

		return $this->prepare_item( $fields );
	}

	/**
	 * Check if a given request has access to a field.
	 * By default, no special permissions needed, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return WP_Error|boolean
	 */
	public function get_item_permissions_check( $request ) {
		$this->initiate_rest_read_box( $request, 'field_read' );
		if ( ! is_wp_error( $this->rest_box ) ) {
			$this->field = $this->rest_box->field_can_read( $this->request->get_param( 'field_id' ), true );
		}

		return $this->get_item_permissions_check_filter();
	}

	/**
	 * Check by filter if a given request has access to a field.
	 * By default, no special permissions needed, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  bool $can_access Whether the current request has access to view the field by default.
	 * @return WP_Error|boolean
	 */
	public function get_item_permissions_check_filter( $can_access = true ) {
		/**
		 * By default, no special permissions needed.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_access Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return $this->maybe_hook_callback_and_apply_filters( 'cmb2_api_get_field_permissions_check', $can_access );
	}

	/**
	 * Get one CMB2 field from the collection.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function get_item( $request ) {
		$this->initiate_rest_read_box( $request, 'field_read' );

		if ( is_wp_error( $this->rest_box ) ) {
			return $this->rest_box;
		}

		return $this->prepare_read_field( $this->request->get_param( 'field_id' ) );
	}

	/**
	 * Check if a given request has access to update a field value.
	 * By default, requires 'edit_others_posts' capability, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return WP_Error|boolean
	 */
	public function update_item_permissions_check( $request ) {
		$this->initiate_rest_read_box( $request, 'field_value_update' );
		if ( ! is_wp_error( $this->rest_box ) ) {
			$this->field = $this->rest_box->field_can_edit( $this->request->get_param( 'field_id' ), true );
		}

		$can_update = current_user_can( 'edit_others_posts' );

		/**
		 * By default, 'edit_others_posts' is required capability.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_update Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return $this->maybe_hook_callback_and_apply_filters( 'cmb2_api_update_field_value_permissions_check', $can_update );
	}

	/**
	 * Update CMB2 field value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function update_item( $request ) {
		$this->initiate_rest_read_box( $request, 'field_value_update' );

		if ( ! $this->request['value'] ) {
			return new WP_Error( 'cmb2_rest_update_field_error', __( 'CMB2 Field value cannot be updated without the value parameter specified.', 'cmb2' ), array(
				'status' => 400,
			) );
		}

		return $this->modify_field_value( 'updated' );
	}

	/**
	 * Check if a given request has access to delete a field value.
	 * By default, requires 'delete_others_posts' capability, but filtering return value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return WP_Error|boolean
	 */
	public function delete_item_permissions_check( $request ) {
		$this->initiate_rest_read_box( $request, 'field_value_delete' );
		if ( ! is_wp_error( $this->rest_box ) ) {
			$this->field = $this->rest_box->field_can_edit( $this->request->get_param( 'field_id' ), true );
		}

		$can_delete = current_user_can( 'delete_others_posts' );

		/**
		 * By default, 'delete_others_posts' is required capability.
		 *
		 * @since 2.2.3
		 *
		 * @param bool   $can_delete Whether this CMB2 endpoint can be accessed.
		 * @param object $controller This CMB2_REST_Controller object.
		 */
		return $this->maybe_hook_callback_and_apply_filters( 'cmb2_api_delete_field_value_permissions_check', $can_delete );
	}

	/**
	 * Delete CMB2 field value.
	 *
	 * @since 2.2.3
	 *
	 * @param  WP_REST_Request $request Full data about the request.
	 * @return WP_Error|WP_REST_Response
	 */
	public function delete_item( $request ) {
		$this->initiate_rest_read_box( $request, 'field_value_delete' );

		return $this->modify_field_value( 'deleted' );
	}

	/**
	 * Modify CMB2 field value.
	 *
	 * @since 2.2.3
	 *
	 * @param  string $activity The modification activity (updated or deleted).
	 * @return WP_Error|WP_REST_Response
	 */
	public function modify_field_value( $activity ) {

		if ( ! $this->request['object_id'] || ! $this->request['object_type'] ) {
			return new WP_Error( 'cmb2_rest_modify_field_value_error', __( 'CMB2 Field value cannot be modified without the object_id and object_type parameters specified.', 'cmb2' ), array(
				'status' => 400,
			) );
		}

		if ( is_wp_error( $this->rest_box ) ) {
			return $this->rest_box;
		}

		$this->field = $this->rest_box->field_can_edit(
			$this->field ? $this->field : $this->request->get_param( 'field_id' ),
			true
		);

		if ( ! $this->field ) {
			return new WP_Error( 'cmb2_rest_no_field_by_id_error', __( 'No field found by that id.', 'cmb2' ), array(
				'status' => 403,
			) );
		}

		$this->field->args[ "value_{$activity}" ] = (bool) 'deleted' === $activity
			? $this->field->remove_data()
			: $this->field->save_field( $this->request['value'] );

		// If options page, save the $activity options
		if ( 'options-page' == $this->request['object_type'] ) {
			$this->field->args[ "value_{$activity}" ] = cmb2_options( $this->request['object_id'] )->set();
		}

		return $this->prepare_read_field( $this->field );
	}

	/**
	 * Get a response object for a specific field ID.
	 *
	 * @since 2.2.3
	 *
	 * @param  string\CMB2_Field Field id or Field object.
	 * @return WP_Error|WP_REST_Response
	 */
	public function prepare_read_field( $field ) {
		$this->field = $this->rest_box->field_can_read( $field, true );

		if ( ! $this->field ) {
			return new WP_Error( 'cmb2_rest_no_field_by_id_error', __( 'No field found by that id.', 'cmb2' ), array(
				'status' => 403,
			) );
		}

		return $this->prepare_item( $this->prepare_field_response() );
	}

	/**
	 * Get a specific field response.
	 *
	 * @since 2.2.3
	 *
	 * @param  CMB2_Field Field object.
	 * @return array      Response array.
	 */
	public function prepare_field_response() {
		$field_data = $this->prepare_field_data( $this->field );
		$response = rest_ensure_response( $field_data );

		$response->add_links( $this->prepare_links( $this->field ) );

		return $response;
	}

	/**
	 * Prepare the field data array for JSON.
	 *
	 * @since  2.2.3
	 *
	 * @param  CMB2_Field $field field object.
	 *
	 * @return array             Array of field data.
	 */
	protected function prepare_field_data( CMB2_Field $field ) {
		$field_data = array();
		$params_to_ignore = array( 'show_in_rest', 'options' );
		$params_to_rename = array(
			'label_cb' => 'label',
			'options_cb' => 'options',
		);

		// Run this first so the js_dependencies arg is populated.
		$cb = $field->maybe_callback( 'render_row_cb' );
		$rendered = $cb
			// Ok, callback is good, let's run it.
			? $this->get_cb_results( $cb, $field->args(), $field )
			: false;

		$field_args = $field->args();

		foreach ( $field_args as $key => $value ) {
			if ( in_array( $key, $params_to_ignore, true ) ) {
				continue;
			}

			if ( 'options_cb' === $key ) {
				$value = $field->options();
			} elseif ( in_array( $key, CMB2_Field::$callable_fields, true ) ) {

				if ( isset( $this->request['_rendered'] ) ) {
					$value = $key === 'render_row_cb' ? $rendered : $field->get_param_callback_result( $key );
				} elseif ( is_array( $value ) ) {
					// We need to rewrite callbacks as string as they will cause
					// JSON recursion errors.
					$class = is_string( $value[0] ) ? $value[0] : get_class( $value[0] );
					$value = $class . '::' . $value[1];
				}
			}

			$key = isset( $params_to_rename[ $key ] ) ? $params_to_rename[ $key ] : $key;

			if ( empty( $value ) || is_scalar( $value ) || is_array( $value ) ) {
				$field_data[ $key ] = $value;
			} else {
				// translators: %s: field key.
				$field_data[ $key ] = sprintf( __( 'Value Error for %s', 'cmb2' ), $key );
			}
		}

		if ( $field->args( 'has_supporting_data' ) ) {
			$field_data = $this->get_supporting_data( $field_data, $field );
		}

		if ( $this->request['object_id'] && $this->request['object_type'] ) {
			$field_data['value'] = $field->get_rest_value();
		}

		return $field_data;
	}

	/**
	 * Gets field supporting data (field id and value).
	 *
	 * @since  2.7.0
	 *
	 * @param  CMB2_Field $field      Field object.
	 * @param  array      $field_data Array of field data.
	 *
	 * @return array                  Array of field data.
	 */
	public function get_supporting_data( $field_data, $field ) {

		// Reset placement of this property.
		unset( $field_data['has_supporting_data'] );
		$field_data['has_supporting_data'] = true;

		$field = $field->get_supporting_field();
		$field_data['supporting_data'] = array(
			'id' => $field->_id( '', false ),
		);

		if ( $this->request['object_id'] && $this->request['object_type'] ) {
			$field_data['supporting_data']['value'] = $field->get_rest_value();
		}

		return $field_data;
	}

	/**
	 * Return an array of contextual links for field/fields.
	 *
	 * @since  2.2.3
	 *
	 * @param  CMB2_Field $field Field object to build links from.
	 *
	 * @return array             Array of links
	 */
	protected function prepare_links( $field ) {
		$boxbase      = $this->namespace_base . '/' . $this->rest_box->cmb->cmb_id;
		$query_string = $this->get_query_string();

		$links = array(
			'self' => array(
				'href' => rest_url( trailingslashit( $boxbase ) . 'fields/' . $field->_id( '', false ) . $query_string ),
			),
			'collection' => array(
				'href' => rest_url( trailingslashit( $boxbase ) . 'fields' . $query_string ),
			),
			'up' => array(
				'embeddable' => true,
				'href' => rest_url( $boxbase . $query_string ),
			),
		);

		return $links;
	}

	/**
	 * Checks if the CMB2 box or field has any registered callback parameters for the given filter.
	 *
	 * The registered handlers will have a property name which matches the filter, except:
	 * - The 'cmb2_api' prefix will be removed
	 * - A '_cb' suffix will be added (to stay inline with other '*_cb' parameters).
	 *
	 * @since  2.2.3
	 *
	 * @param  string $filter      The filter name.
	 * @param  bool   $default_val The default filter value.
	 *
	 * @return bool                The possibly-modified filter value (if the _cb param is a non-callable).
	 */
	public function maybe_hook_registered_callback( $filter, $default_val ) {
		$default_val = parent::maybe_hook_registered_callback( $filter, $default_val );

		if ( $this->field ) {

			// Hook field specific filter callbacks.
			$val = $this->field->maybe_hook_parameter( $filter, $default_val );
			if ( null !== $val ) {
				$default_val = $val;
			}
		}

		return $default_val;
	}

	/**
	 * Unhooks any CMB2 box or field registered callback parameters for the given filter.
	 *
	 * @since  2.2.3
	 *
	 * @param  string $filter The filter name.
	 *
	 * @return void
	 */
	public function maybe_unhook_registered_callback( $filter ) {
		parent::maybe_unhook_registered_callback( $filter );

		if ( $this->field ) {
			// Unhook field specific filter callbacks.
			$this->field->maybe_hook_parameter( $filter, null, 'remove_filter' );
		}
	}

}
PK     ƒŠU]wìÕà[  à[  0  vendor/cmb2/cmb2/includes/rest-api/CMB2_REST.phpnu „[µü¤        <?php
/**
 * Handles hooking CMB2 objects/fields into the WordPress REST API
 * which can allow fields to be read and/or updated.
 *
 * @since  2.2.3
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @property-read read_fields Array of readable field objects.
 * @property-read edit_fields Array of editable field objects.
 * @property-read rest_read   Whether CMB2 object is readable via the rest api.
 * @property-read rest_edit   Whether CMB2 object is editable via the rest api.
 */
class CMB2_REST extends CMB2_Hookup_Base {

	/**
	 * The current CMB2 REST endpoint version
	 *
	 * @var string
	 * @since 2.2.3
	 */
	const VERSION = '1';

	/**
	 * The CMB2 REST base namespace (v should always be followed by $version)
	 *
	 * @var string
	 * @since 2.2.3
	 */
	const NAME_SPACE = 'cmb2/v1';

	/**
	 * @var   CMB2 object
	 * @since 2.2.3
	 */
	public $cmb;

	/**
	 * @var   CMB2_REST[] objects
	 * @since 2.2.3
	 */
	protected static $boxes = array();

	/**
	 * @var   array Array of cmb ids for each type.
	 * @since 2.2.3
	 */
	protected static $type_boxes = array(
		'post' => array(),
		'user' => array(),
		'comment' => array(),
		'term' => array(),
	);

	/**
	 * Array of readable field objects.
	 *
	 * @var   CMB2_Field[]
	 * @since 2.2.3
	 */
	protected $read_fields = array();

	/**
	 * Array of editable field objects.
	 *
	 * @var   CMB2_Field[]
	 * @since 2.2.3
	 */
	protected $edit_fields = array();

	/**
	 * Whether CMB2 object is readable via the rest api.
	 *
	 * @var boolean
	 */
	protected $rest_read = false;

	/**
	 * Whether CMB2 object is editable via the rest api.
	 *
	 * @var boolean
	 */
	protected $rest_edit = false;

	/**
	 * A functionalized constructor, used for the hookup action callbacks.
	 *
	 * @since  2.2.6
	 *
	 * @param  CMB2 $cmb The CMB2 object to hookup
	 *
	 * @return CMB2_Hookup_Base $hookup The hookup object.
	 */
	public static function maybe_init_and_hookup( CMB2 $cmb ) {
		if ( $cmb->prop( 'show_in_rest' ) && function_exists( 'rest_get_server' ) ) {

			$hookup = new self( $cmb );

			return $hookup->universal_hooks();
		}

		return false;
	}

	/**
	 * Constructor
	 *
	 * @since 2.2.3
	 *
	 * @param CMB2 $cmb The CMB2 object to be registered for the API.
	 */
	public function __construct( CMB2 $cmb ) {
		$this->cmb = $cmb;
		self::$boxes[ $cmb->cmb_id ] = $this;

		$show_value = $this->cmb->prop( 'show_in_rest' );

		$this->rest_read = self::is_readable( $show_value );
		$this->rest_edit = self::is_editable( $show_value );
	}

	/**
	 * Hooks to register on frontend and backend.
	 *
	 * @since  2.2.3
	 *
	 * @return void
	 */
	public function universal_hooks() {
		// hook up the CMB rest endpoint classes
		$this->once( 'rest_api_init', array( __CLASS__, 'init_routes' ), 0 );

		if ( function_exists( 'register_rest_field' ) ) {
			$this->once( 'rest_api_init', array( __CLASS__, 'register_cmb2_fields' ), 50 );
		}

		$this->declare_read_edit_fields();

		add_filter( 'is_protected_meta', array( $this, 'is_protected_meta' ), 10, 3 );

		return $this;
	}

	/**
	 * Initiate the CMB2 Boxes and Fields routes
	 *
	 * @since  2.2.3
	 *
	 * @return void
	 */
	public static function init_routes() {
		$wp_rest_server = rest_get_server();

		$boxes_controller = new CMB2_REST_Controller_Boxes( $wp_rest_server );
		$boxes_controller->register_routes();

		$fields_controller = new CMB2_REST_Controller_Fields( $wp_rest_server );
		$fields_controller->register_routes();
	}

	/**
	 * Loop through REST boxes and call register_rest_field for each object type.
	 *
	 * @since  2.2.3
	 *
	 * @return void
	 */
	public static function register_cmb2_fields() {
		$alltypes = $taxonomies = array();

		foreach ( self::$boxes as $cmb_id => $rest_box ) {

			// Hook box specific filter callbacks.
			$callback = $rest_box->cmb->prop( 'register_rest_field_cb' );
			if ( is_callable( $callback ) ) {
				call_user_func( $callback, $rest_box );
				continue;
			}

			$types = array_flip( $rest_box->cmb->box_types( array( 'post' ) ) );

			if ( isset( $types['user'] ) ) {
				unset( $types['user'] );
				self::$type_boxes['user'][ $cmb_id ] = $cmb_id;
			}

			if ( isset( $types['comment'] ) ) {
				unset( $types['comment'] );
				self::$type_boxes['comment'][ $cmb_id ] = $cmb_id;
			}

			if ( isset( $types['term'] ) ) {
				unset( $types['term'] );

				$taxonomies = array_merge(
					$taxonomies,
					CMB2_Utils::ensure_array( $rest_box->cmb->prop( 'taxonomies' ) )
				);

				self::$type_boxes['term'][ $cmb_id ] = $cmb_id;
			}

			if ( ! empty( $types ) ) {
				$alltypes = array_merge( $alltypes, array_flip( $types ) );
				self::$type_boxes['post'][ $cmb_id ] = $cmb_id;
			}
		}

		$alltypes = array_unique( $alltypes );

		if ( ! empty( $alltypes ) ) {
			self::register_rest_field( $alltypes, 'post' );
		}

		if ( ! empty( self::$type_boxes['user'] ) ) {
			self::register_rest_field( 'user', 'user' );
		}

		if ( ! empty( self::$type_boxes['comment'] ) ) {
			self::register_rest_field( 'comment', 'comment' );
		}

		if ( ! empty( self::$type_boxes['term'] ) ) {
			self::register_rest_field( $taxonomies, 'term' );
		}
	}

	/**
	 * Wrapper for register_rest_field.
	 *
	 * @since  2.2.3
	 *
	 * @param string|array $object_types Object(s) the field is being registered
	 *                                   to, "post"|"term"|"comment" etc.
	 * @param string       $object_types       Canonical object type for callbacks.
	 *
	 * @return void
	 */
	protected static function register_rest_field( $object_types, $object_type ) {
		register_rest_field( $object_types, 'cmb2', array(
			'get_callback'    => array( __CLASS__, "get_{$object_type}_rest_values" ),
			'update_callback' => array( __CLASS__, "update_{$object_type}_rest_values" ),
			'schema'          => null, // @todo add schema
		) );
	}

	/**
	 * Setup readable and editable fields.
	 *
	 * @since  2.2.3
	 *
	 * @return void
	 */
	protected function declare_read_edit_fields() {
		foreach ( $this->cmb->prop( 'fields' ) as $field ) {
			$show_in_rest = isset( $field['show_in_rest'] ) ? $field['show_in_rest'] : null;

			if ( false === $show_in_rest ) {
				continue;
			}

			if ( $this->can_read( $show_in_rest ) ) {
				$this->read_fields[] = $field['id'];
			}

			if ( $this->can_edit( $show_in_rest ) ) {
				$this->edit_fields[] = $field['id'];
			}
		}
	}

	/**
	 * Determines if a field is readable based on it's show_in_rest value
	 * and the box's show_in_rest value.
	 *
	 * @since  2.2.3
	 *
	 * @param  bool $show_in_rest Field's show_in_rest value. Default null.
	 *
	 * @return bool               Whether field is readable.
	 */
	protected function can_read( $show_in_rest ) {
		// if 'null', then use default box value.
		if ( null === $show_in_rest ) {
			return $this->rest_read;
		}

		// Else check if the value represents readable.
		return self::is_readable( $show_in_rest );
	}

	/**
	 * Determines if a field is editable based on it's show_in_rest value
	 * and the box's show_in_rest value.
	 *
	 * @since  2.2.3
	 *
	 * @param  bool $show_in_rest Field's show_in_rest value. Default null.
	 *
	 * @return bool               Whether field is editable.
	 */
	protected function can_edit( $show_in_rest ) {
		// if 'null', then use default box value.
		if ( null === $show_in_rest ) {
			return $this->rest_edit;
		}

		// Else check if the value represents editable.
		return self::is_editable( $show_in_rest );
	}

	/**
	 * Handler for getting post custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  array           $object      The object data from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return mixed
	 */
	public static function get_post_rest_values( $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::get_rest_values( $object, $request, $object_type, 'post' );
		}
	}

	/**
	 * Handler for getting user custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  array           $object      The object data from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return mixed
	 */
	public static function get_user_rest_values( $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::get_rest_values( $object, $request, $object_type, 'user' );
		}
	}

	/**
	 * Handler for getting comment custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  array           $object      The object data from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return mixed
	 */
	public static function get_comment_rest_values( $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::get_rest_values( $object, $request, $object_type, 'comment' );
		}
	}

	/**
	 * Handler for getting term custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  array           $object      The object data from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return mixed
	 */
	public static function get_term_rest_values( $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::get_rest_values( $object, $request, $object_type, 'term' );
		}
	}

	/**
	 * Handler for getting custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  array           $object           The object data from the response
	 * @param  WP_REST_Request $request          Current request
	 * @param  string          $object_type      The request object type
	 * @param  string          $main_object_type The cmb main object type
	 *
	 * @return mixed
	 */
	protected static function get_rest_values( $object, $request, $object_type, $main_object_type = 'post' ) {
		if ( ! isset( $object['id'] ) ) {
			return;
		}

		$values = array();

		if ( ! empty( self::$type_boxes[ $main_object_type ] ) ) {
			foreach ( self::$type_boxes[ $main_object_type ] as $cmb_id ) {
				$rest_box = self::$boxes[ $cmb_id ];

				if ( ! $rest_box->cmb->is_box_type( $object_type ) ) {
					continue;
				}

				$result = self::get_box_rest_values( $rest_box, $object['id'], $main_object_type );
				if ( ! empty( $result ) ) {
					if ( empty( $values[ $cmb_id ] ) ) {
						$values[ $cmb_id ] = $result;
					} else {
						$values[ $cmb_id ] = array_merge( $values[ $cmb_id ], $result );
					}
				}
			}
		}

		return $values;
	}

	/**
	 * Get box rest values.
	 *
	 * @since  2.7.0
	 *
	 * @param  CMB2_REST $rest_box         The CMB2_REST object.
	 * @param  integer   $object_id        The object ID.
	 * @param  string    $main_object_type The object type (post, user, term, etc)
	 *
	 * @return array                       Array of box rest values.
	 */
	public static function get_box_rest_values( $rest_box, $object_id = 0, $main_object_type = 'post' ) {

		$rest_box->cmb->object_id( $object_id );
		$rest_box->cmb->object_type( $main_object_type );

		$values = array();

		foreach ( $rest_box->read_fields as $field_id ) {
			$field = $rest_box->cmb->get_field( $field_id );
			$field->object_id( $object_id );
			$field->object_type( $main_object_type );

			$values[ $field->id( true ) ] = $field->get_rest_value();

			if ( $field->args( 'has_supporting_data' ) ) {
				$field = $field->get_supporting_field();
				$values[ $field->id( true ) ] = $field->get_rest_value();
			}
		}

		return $values;
	}

	/**
	 * Handler for updating post custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed           $values      The value of the field
	 * @param  object          $object      The object from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return bool|int
	 */
	public static function update_post_rest_values( $values, $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::update_rest_values( $values, $object, $request, $object_type, 'post' );
		}
	}

	/**
	 * Handler for updating user custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed           $values      The value of the field
	 * @param  object          $object      The object from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return bool|int
	 */
	public static function update_user_rest_values( $values, $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::update_rest_values( $values, $object, $request, $object_type, 'user' );
		}
	}

	/**
	 * Handler for updating comment custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed           $values      The value of the field
	 * @param  object          $object      The object from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return bool|int
	 */
	public static function update_comment_rest_values( $values, $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::update_rest_values( $values, $object, $request, $object_type, 'comment' );
		}
	}

	/**
	 * Handler for updating term custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed           $values      The value of the field
	 * @param  object          $object      The object from the response
	 * @param  string          $field_name  Name of field
	 * @param  WP_REST_Request $request     Current request
	 * @param  string          $object_type The request object type
	 *
	 * @return bool|int
	 */
	public static function update_term_rest_values( $values, $object, $field_name, $request, $object_type ) {
		if ( 'cmb2' === $field_name ) {
			return self::update_rest_values( $values, $object, $request, $object_type, 'term' );
		}
	}

	/**
	 * Handler for updating custom field data.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed           $values           The value of the field
	 * @param  object          $object           The object from the response
	 * @param  WP_REST_Request $request          Current request
	 * @param  string          $object_type      The request object type
	 * @param  string          $main_object_type The cmb main object type
	 *
	 * @return bool|int
	 */
	protected static function update_rest_values( $values, $object, $request, $object_type, $main_object_type = 'post' ) {
		if ( empty( $values ) || ! is_array( $values ) ) {
			return;
		}

		$object_id = self::get_object_id( $object, $main_object_type );

		if ( ! $object_id ) {
			return;
		}

		$updated = array();

		if ( ! empty( self::$type_boxes[ $main_object_type ] ) ) {
			foreach ( self::$type_boxes[ $main_object_type ] as $cmb_id ) {
				$result = self::santize_box_rest_values( $values, self::$boxes[ $cmb_id ], $object_id, $main_object_type );
				if ( ! empty( $result ) ) {
					$updated[ $cmb_id ] = $result;
				}
			}
		}

		return $updated;
	}

	/**
	 * Updates box rest values.
	 *
	 * @since  2.7.0
	 *
	 * @param  array     $values           Array of values.
	 * @param  CMB2_REST $rest_box         The CMB2_REST object.
	 * @param  integer   $object_id        The object ID.
	 * @param  string    $main_object_type The object type (post, user, term, etc)
	 *
	 * @return mixed|bool                  Array of updated statuses if successful.
	 */
	public static function santize_box_rest_values( $values, $rest_box, $object_id = 0, $main_object_type = 'post' ) {

		if ( ! array_key_exists( $rest_box->cmb->cmb_id, $values ) ) {
			return false;
		}

		$rest_box->cmb->object_id( $object_id );
		$rest_box->cmb->object_type( $main_object_type );

		return $rest_box->sanitize_box_values( $values );
	}

	/**
	 * Loop through box fields and sanitize the values.
	 *
	 * @since  2.2.o
	 *
	 * @param  array $values Array of values being provided.
	 * @return array           Array of updated/sanitized values.
	 */
	public function sanitize_box_values( array $values ) {
		$updated = array();

		$this->cmb->pre_process();

		foreach ( $this->edit_fields as $field_id ) {
			$updated[ $field_id ] = $this->sanitize_field_value( $values, $field_id );
		}

		$this->cmb->after_save();

		return $updated;
	}

	/**
	 * Handles returning a sanitized field value.
	 *
	 * @since  2.2.3
	 *
	 * @param  array  $values   Array of values being provided.
	 * @param  string $field_id The id of the field to update.
	 *
	 * @return mixed             The results of saving/sanitizing a field value.
	 */
	protected function sanitize_field_value( array $values, $field_id ) {
		if ( ! array_key_exists( $field_id, $values[ $this->cmb->cmb_id ] ) ) {
			return;
		}

		$field = $this->cmb->get_field( $field_id );

		if ( 'title' == $field->type() ) {
			return;
		}

		$field->object_id( $this->cmb->object_id() );
		$field->object_type( $this->cmb->object_type() );

		if ( 'group' == $field->type() ) {
			return $this->sanitize_group_value( $values, $field );
		}

		return $field->save_field( $values[ $this->cmb->cmb_id ][ $field_id ] );
	}

	/**
	 * Handles returning a sanitized group field value.
	 *
	 * @since  2.2.3
	 *
	 * @param  array      $values Array of values being provided.
	 * @param  CMB2_Field $field  CMB2_Field object.
	 *
	 * @return mixed               The results of saving/sanitizing the group field value.
	 */
	protected function sanitize_group_value( array $values, CMB2_Field $field ) {
		$fields = $field->fields();
		if ( empty( $fields ) ) {
			return;
		}

		$this->cmb->data_to_save[ $field->_id( '', false ) ] = $values[ $this->cmb->cmb_id ][ $field->_id( '', false ) ];

		return $this->cmb->save_group_field( $field );
	}

	/**
	 * Filter whether a meta key is protected.
	 *
	 * @since 2.2.3
	 *
	 * @param bool   $protected Whether the key is protected. Default false.
	 * @param string $meta_key  Meta key.
	 * @param string $meta_type Meta type.
	 */
	public function is_protected_meta( $protected, $meta_key, $meta_type ) {
		if ( $this->field_can_edit( $meta_key ) ) {
			return false;
		}

		return $protected;
	}

	/**
	 * Get the object ID for the given object/type.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed  $object      The object to get the ID for.
	 * @param  string $object_type The object type we are looking for.
	 *
	 * @return int                 The object ID if found.
	 */
	public static function get_object_id( $object, $object_type = 'post' ) {
		switch ( $object_type ) {
			case 'user':
			case 'post':
				if ( isset( $object->ID ) ) {
					return intval( $object->ID );
				}
				// no break
			case 'comment':
				if ( isset( $object->comment_ID ) ) {
					return intval( $object->comment_ID );
				}
				// no break
			case 'term':
				if ( is_array( $object ) && isset( $object['term_id'] ) ) {
					return intval( $object['term_id'] );
				} elseif ( isset( $object->term_id ) ) {
					return intval( $object->term_id );
				}
		}

		return 0;
	}

	/**
	 * Checks if a given field can be read.
	 *
	 * @since  2.2.3
	 *
	 * @param  string|CMB2_Field $field_id      Field ID or CMB2_Field object.
	 * @param  boolean           $return_object Whether to return the Field object.
	 *
	 * @return mixed                            False if field can't be read or true|CMB2_Field object.
	 */
	public function field_can_read( $field_id, $return_object = false ) {
		return $this->field_can( 'read_fields', $field_id, $return_object );
	}

	/**
	 * Checks if a given field can be edited.
	 *
	 * @since  2.2.3
	 *
	 * @param  string|CMB2_Field $field_id      Field ID or CMB2_Field object.
	 * @param  boolean           $return_object Whether to return the Field object.
	 *
	 * @return mixed                            False if field can't be edited or true|CMB2_Field object.
	 */
	public function field_can_edit( $field_id, $return_object = false ) {
		return $this->field_can( 'edit_fields', $field_id, $return_object );
	}

	/**
	 * Checks if a given field can be read or edited.
	 *
	 * @since  2.2.3
	 *
	 * @param  string            $type          Whether we are checking for read or edit fields.
	 * @param  string|CMB2_Field $field_id      Field ID or CMB2_Field object.
	 * @param  boolean           $return_object Whether to return the Field object.
	 *
	 * @return mixed                            False if field can't be read or edited or true|CMB2_Field object.
	 */
	protected function field_can( $type, $field_id, $return_object = false ) {
		if ( ! in_array( $field_id instanceof CMB2_Field ? $field_id->id() : $field_id, $this->{$type}, true ) ) {
			return false;
		}

		return $return_object ? $this->cmb->get_field( $field_id ) : true;
	}

	/**
	 * Get a CMB2_REST instance object from the registry by a CMB2 id.
	 *
	 * @since  2.2.3
	 *
	 * @param  string $cmb_id CMB2 config id
	 *
	 * @return CMB2_REST|false The CMB2_REST object or false.
	 */
	public static function get_rest_box( $cmb_id ) {
		return isset( self::$boxes[ $cmb_id ] ) ? self::$boxes[ $cmb_id ] : false;
	}

	/**
	 * Remove a CMB2_REST instance object from the registry.
	 *
	 * @since  2.2.3
	 *
	 * @param string $cmb_id A CMB2 instance id.
	 */
	public static function remove( $cmb_id ) {
		if ( array_key_exists( $cmb_id, self::$boxes ) ) {
			unset( self::$boxes[ $cmb_id ] );
		}
	}

	/**
	 * Retrieve all CMB2_REST instances from the registry.
	 *
	 * @since  2.2.3
	 * @return CMB2[] Array of all registered CMB2_REST instances.
	 */
	public static function get_all() {
		return self::$boxes;
	}

	/**
	 * Checks if given value is readable.
	 *
	 * Value is considered readable if it is not empty and if it does not match the editable blacklist.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed $value Value to check.
	 *
	 * @return boolean       Whether value is considered readable.
	 */
	public static function is_readable( $value ) {
		return ! empty( $value ) && ! in_array( $value, array(
			WP_REST_Server::CREATABLE,
			WP_REST_Server::EDITABLE,
			WP_REST_Server::DELETABLE,
		), true );
	}

	/**
	 * Checks if given value is editable.
	 *
	 * Value is considered editable if matches the editable whitelist.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed $value Value to check.
	 *
	 * @return boolean       Whether value is considered editable.
	 */
	public static function is_editable( $value ) {
		return in_array( $value, array(
			WP_REST_Server::EDITABLE,
			WP_REST_Server::ALLMETHODS,
		), true );
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param string $field
	 * @throws Exception Throws an exception if the field is invalid.
	 *
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'read_fields':
			case 'edit_fields':
			case 'rest_read':
			case 'rest_edit':
				return $this->{$field};
			default:
				throw new Exception( 'Invalid ' . __CLASS__ . ' property: ' . $field );
		}
	}

}
PK     ƒŠU]“h¤
  ¤
  .  vendor/cmb2/cmb2/includes/CMB2_Hookup_Base.phpnu „[µü¤        <?php
/**
 * Base class for hooking CMB2 into WordPress.
 *
 * @since  2.2.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @property-read string $object_type
 * @property-read CMB2   $cmb
 */
abstract class CMB2_Hookup_Base {

	/**
	 * CMB2 object.
	 *
	 * @var   CMB2 object
	 * @since 2.0.2
	 */
	protected $cmb;

	/**
	 * The object type we are performing the hookup for
	 *
	 * @var   string
	 * @since 2.0.9
	 */
	protected $object_type = 'post';

	/**
	 * A functionalized constructor, used for the hookup action callbacks.
	 *
	 * @since  2.2.6
	 *
	 * @throws Exception Failed implementation.
	 *
	 * @param  CMB2 $cmb The CMB2 object to hookup.
	 */
	public static function maybe_init_and_hookup( CMB2 $cmb ) {
		// translators: %s: function name.
		throw new Exception( sprintf( esc_html__( '%1$s should be implemented by the extended class.', 'cmb2' ), __FUNCTION__ ) );
	}

	/**
	 * Constructor
	 *
	 * @since 2.0.0
	 * @param CMB2 $cmb The CMB2 object to hookup.
	 */
	public function __construct( CMB2 $cmb ) {
		$this->cmb = $cmb;
		$this->object_type = $this->cmb->mb_object_type();
	}

	abstract public function universal_hooks();

	/**
	 * Ensures WordPress hook only gets fired once per object.
	 *
	 * @since  2.0.0
	 * @param string   $action        The name of the filter to hook the $hook callback to.
	 * @param callback $hook          The callback to be run when the filter is applied.
	 * @param integer  $priority      Order the functions are executed.
	 * @param int      $accepted_args The number of arguments the function accepts.
	 */
	public function once( $action, $hook, $priority = 10, $accepted_args = 1 ) {
		static $hooks_completed = array();

		$args = func_get_args();

		// Get object hash.. This bypasses issues with serializing closures.
		if ( is_object( $hook ) ) {
			$args[1] = spl_object_hash( $args[1] );
		} elseif ( is_array( $hook ) && is_object( $hook[0] ) ) {
			$args[1][0] = spl_object_hash( $hook[0] );
		}

		$key = md5( serialize( $args ) );

		if ( ! isset( $hooks_completed[ $key ] ) ) {
			$hooks_completed[ $key ] = 1;
			add_filter( $action, $hook, $priority, $accepted_args );
		}
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param string $field Property to return.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'object_type':
			case 'cmb':
				return $this->{$field};
			default:
				// translators: 1: class name, 2: property name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
		}
	}
}
PK     ƒŠU]–¦‚õ¶  õ¶  (  vendor/cmb2/cmb2/includes/CMB2_Field.phpnu „[µü¤        <?php
/**
 * CMB2 field objects
 *
 * @since  1.1.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @method string _id()
 * @method string type()
 * @method mixed fields()
 */
class CMB2_Field extends CMB2_Base {

	/**
	 * The object properties name.
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected $properties_name = 'args';

	/**
	 * Field arguments
	 *
	 * @var   mixed
	 * @since 1.1.0
	 */
	public $args = array();

	/**
	 * Field group object or false (if no group)
	 *
	 * @var   mixed
	 * @since 1.1.0
	 */
	public $group = false;

	/**
	 * Field meta value
	 *
	 * @var   mixed
	 * @since 1.1.0
	 */
	public $value = null;

	/**
	 * Field meta value
	 *
	 * @var   mixed
	 * @since 1.1.0
	 */
	public $escaped_value = null;

	/**
	 * Grouped Field's current numeric index during the save process
	 *
	 * @var   mixed
	 * @since 2.0.0
	 */
	public $index = 0;

	/**
	 * Array of field options
	 *
	 * @var   array
	 * @since 2.0.0
	 */
	protected $field_options = array();

	/**
	 * Array of provided field text strings
	 *
	 * @var   array
	 * @since 2.0.0
	 */
	protected $strings;

	/**
	 * The field's render context. In most cases, 'edit', but can be 'display'.
	 *
	 * @var   string
	 * @since 2.2.2
	 */
	public $render_context = 'edit';

	/**
	 * All CMB2_Field callable field arguments.
	 * Can be used to determine if a field argument is callable.
	 *
	 * @var array
	 */
	public static $callable_fields = array(
		'default_cb',
		'classes_cb',
		'options_cb',
		'text_cb',
		'label_cb',
		'render_row_cb',
		'display_cb',
		'before_group',
		'before_group_row',
		'before_row',
		'before',
		'before_field',
		'after_field',
		'after',
		'after_row',
		'after_group_row',
		'after_group',
	);

	/**
	 * Represents a unique hash representing this field.
	 *
	 * @since  2.2.4
	 *
	 * @var string
	 */
	protected $hash_id = '';

	/**
	 * Constructs our field object
	 *
	 * @since 1.1.0
	 * @param array $args Field arguments.
	 */
	public function __construct( $args ) {

		if ( ! empty( $args['group_field'] ) ) {
			$this->group       = $args['group_field'];
			$this->object_id   = $this->group->object_id;
			$this->object_type = $this->group->object_type;
			$this->cmb_id      = $this->group->cmb_id;
		} else {
			$this->object_id   = isset( $args['object_id'] ) && '_' !== $args['object_id'] ? $args['object_id'] : 0;
			$this->object_type = isset( $args['object_type'] ) ? $args['object_type'] : 'post';

			if ( isset( $args['cmb_id'] ) ) {
				$this->cmb_id = $args['cmb_id'];
			}
		}

		$this->args = $this->_set_field_defaults( $args['field_args'] );

		if ( $this->object_id ) {
			$this->value = $this->get_data();
		}
	}

	/**
	 * Non-existent methods fallback to checking for field arguments of the same name
	 *
	 * @since  1.1.0
	 * @param  string $name     Method name.
	 * @param  array  $arguments Array of passed-in arguments.
	 * @return mixed             Value of field argument
	 */
	public function __call( $name, $arguments ) {
		if ( 'string' === $name ) {
			return call_user_func_array( array( $this, 'get_string' ), $arguments );
		}

		$key = isset( $arguments[0] ) ? $arguments[0] : '';
		return $this->args( $name, $key );
	}

	/**
	 * Retrieves the field id
	 *
	 * @since  1.1.0
	 * @param  boolean $raw Whether to retrieve pre-modidifed id.
	 * @return string       Field id
	 */
	public function id( $raw = false ) {
		$id = $raw ? '_id' : 'id';
		return $this->args( $id );
	}

	/**
	 * Get a field argument
	 *
	 * @since  1.1.0
	 * @param  string $key  Argument to check.
	 * @param  string $_key Sub argument to check.
	 * @return mixed        Argument value or false if non-existent
	 */
	public function args( $key = '', $_key = '' ) {
		$arg = $this->_data( 'args', $key );

		if ( in_array( $key, array( 'default', 'default_cb' ), true ) ) {

			$arg = $this->get_default();

		} elseif ( $_key ) {

			$arg = isset( $arg[ $_key ] ) ? $arg[ $_key ] : false;
		}

		return $arg;
	}

	/**
	 * Retrieve a portion of a field property
	 *
	 * @since  1.1.0
	 * @param  string $var Field property to check.
	 * @param  string $key Field property array key to check.
	 * @return mixed        Queried property value or false
	 */
	public function _data( $var, $key = '' ) {
		$vars = $this->{$var};
		if ( $key ) {
			return array_key_exists( $key, $vars ) ? $vars[ $key ] : false;
		}
		return $vars;
	}

	/**
	 * Get Field's value
	 *
	 * @since  1.1.0
	 * @param  string $key If value is an array, is used to get array key->value.
	 * @return mixed       Field value or false if non-existent
	 */
	public function value( $key = '' ) {
		return $this->_data( 'value', $key );
	}

	/**
	 * Retrieves metadata/option data
	 *
	 * @since  1.0.1
	 * @param  string $field_id Meta key/Option array key.
	 * @param  array  $args     Override arguments.
	 * @return mixed            Meta/Option value
	 */
	public function get_data( $field_id = '', $args = array() ) {
		if ( $field_id ) {
			$args['field_id'] = $field_id;
		} elseif ( $this->group ) {
			$args['field_id'] = $this->group->id();
		}

		$a = $this->data_args( $args );

		/**
		 * Filter whether to override getting of meta value.
		 * Returning a non 'cmb2_field_no_override_val' value
		 * will effectively short-circuit the value retrieval.
		 *
		 * @since 2.0.0
		 *
		 * @param mixed $value     The value get_metadata() should
		 *                         return - a single metadata value,
		 *                         or an array of values.
		 *
		 * @param int   $object_id Object ID.
		 *
		 * @param array $args {
		 *     An array of arguments for retrieving data
		 *
		 *     @type string $type     The current object type
		 *     @type int    $id       The current object ID
		 *     @type string $field_id The ID of the field being requested
		 *     @type bool   $repeat   Whether current field is repeatable
		 *     @type bool   $single   Whether current field is a single database row
		 * }
		 *
		 * @param CMB2_Field object $field This field object
		 */
		$data = apply_filters( 'cmb2_override_meta_value', 'cmb2_field_no_override_val', $this->object_id, $a, $this );

		/**
		 * Filter and parameters are documented for 'cmb2_override_meta_value' filter (above).
		 *
		 * The dynamic portion of the hook, $field_id, refers to the current
		 * field id paramater. Returning a non 'cmb2_field_no_override_val' value
		 * will effectively short-circuit the value retrieval.
		 *
		 * @since 2.0.0
		 */
		$data = apply_filters( "cmb2_override_{$a['field_id']}_meta_value", $data, $this->object_id, $a, $this );

		// If no override, get value normally.
		if ( 'cmb2_field_no_override_val' === $data ) {
			$data = 'options-page' === $a['type']
				? cmb2_options( $a['id'] )->get( $a['field_id'] )
				: get_metadata( $a['type'], $a['id'], $a['field_id'], ( $a['single'] || $a['repeat'] ) );
		}

		if ( $this->group ) {

			$data = is_array( $data ) && isset( $data[ $this->group->index ][ $this->args( '_id' ) ] )
				? $data[ $this->group->index ][ $this->args( '_id' ) ]
				: false;
		}

		return $data;
	}

	/**
	 * Updates metadata/option data.
	 *
	 * @since  1.0.1
	 * @param  mixed $new_value Value to update data with.
	 * @param  bool  $single    Whether data is an array (add_metadata).
	 * @return mixed
	 */
	public function update_data( $new_value, $single = true ) {
		$a = $this->data_args( array(
			'single' => $single,
		) );

		$a['value'] = $a['repeat'] ? array_values( $new_value ) : $new_value;

		/**
		 * Filter whether to override saving of meta value.
		 * Returning a non-null value will effectively short-circuit the function.
		 *
		 * @since 2.0.0
		 *
		 * @param null|bool $check  Whether to allow updating metadata for the given type.
		 *
		 * @param array $args {
		 *     Array of data about current field including:
		 *
		 *     @type string $value    The value to set
		 *     @type string $type     The current object type
		 *     @type int    $id       The current object ID
		 *     @type string $field_id The ID of the field being updated
		 *     @type bool   $repeat   Whether current field is repeatable
		 *     @type bool   $single   Whether current field is a single database row
		 * }
		 *
		 * @param array $field_args All field arguments
		 *
		 * @param CMB2_Field object $field This field object
		 */
		$override = apply_filters( 'cmb2_override_meta_save', null, $a, $this->args(), $this );

		/**
		 * Filter and parameters are documented for 'cmb2_override_meta_save' filter (above).
		 *
		 * The dynamic portion of the hook, $a['field_id'], refers to the current
		 * field id paramater. Returning a non-null value
		 * will effectively short-circuit the function.
		 *
		 * @since 2.0.0
		 */
		$override = apply_filters( "cmb2_override_{$a['field_id']}_meta_save", $override, $a, $this->args(), $this );

		// If override, return that.
		if ( null !== $override ) {
			return $override;
		}

		// Options page handling (or temp data store).
		if ( 'options-page' === $a['type'] || empty( $a['id'] ) ) {
			return cmb2_options( $a['id'] )->update( $a['field_id'], $a['value'], false, $a['single'] );
		}

		// Add metadata if not single.
		if ( ! $a['single'] ) {
			return add_metadata( $a['type'], $a['id'], $a['field_id'], $a['value'], false );
		}

		// Delete meta if we have an empty array.
		if ( is_array( $a['value'] ) && empty( $a['value'] ) ) {
			return delete_metadata( $a['type'], $a['id'], $a['field_id'], $this->value );
		}

		// Update metadata.
		return update_metadata( $a['type'], $a['id'], $a['field_id'], $a['value'] );
	}

	/**
	 * Removes/updates metadata/option data.
	 *
	 * @since  1.0.1
	 * @param  string $old Old value.
	 * @return mixed
	 */
	public function remove_data( $old = '' ) {
		$a = $this->data_args( array(
			'old' => $old,
		) );

		/**
		 * Filter whether to override removing of meta value.
		 * Returning a non-null value will effectively short-circuit the function.
		 *
		 * @since 2.0.0
		 *
		 * @param null|bool $delete Whether to allow metadata deletion of the given type.
		 * @param array $args       Array of data about current field including:
		 *                              'type'     : Current object type
		 *                              'id'       : Current object ID
		 *                              'field_id' : Current Field ID
		 *                              'repeat'   : Whether current field is repeatable
		 *                              'single'   : Whether to save as a
		 *                                           single meta value
		 * @param array $field_args All field arguments
		 * @param CMB2_Field object $field This field object
		 */
		$override = apply_filters( 'cmb2_override_meta_remove', null, $a, $this->args(), $this );

		/**
		 * Filter whether to override removing of meta value.
		 *
		 * The dynamic portion of the hook, $a['field_id'], refers to the current
		 * field id paramater. Returning a non-null value
		 * will effectively short-circuit the function.
		 *
		 * @since 2.0.0
		 *
		 * @param null|bool $delete Whether to allow metadata deletion of the given type.
		 * @param array $args       Array of data about current field including:
		 *                              'type'     : Current object type
		 *                              'id'       : Current object ID
		 *                              'field_id' : Current Field ID
		 *                              'repeat'   : Whether current field is repeatable
		 *                              'single'   : Whether to save as a
		 *                                           single meta value
		 * @param array $field_args All field arguments
		 * @param CMB2_Field object $field This field object
		 */
		$override = apply_filters( "cmb2_override_{$a['field_id']}_meta_remove", $override, $a, $this->args(), $this );

		// If no override, remove as usual.
		if ( null !== $override ) {
			return $override;
		} elseif ( 'options-page' === $a['type'] || empty( $a['id'] ) ) {
			// Option page handling.
			return cmb2_options( $a['id'] )->remove( $a['field_id'] );
		}

		// Remove metadata.
		return delete_metadata( $a['type'], $a['id'], $a['field_id'], $old );
	}

	/**
	 * Data variables for get/set data methods
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments.
	 * @return array       Updated arguments
	 */
	public function data_args( $args = array() ) {
		$args = wp_parse_args( $args, array(
			'type'     => $this->object_type,
			'id'       => $this->object_id,
			'field_id' => $this->id( true ),
			'repeat'   => $this->args( 'repeatable' ),
			'single'   => ! $this->args( 'multiple' ),
		) );
		return $args;
	}

	/**
	 * Checks if field has a registered sanitization callback
	 *
	 * @since  1.0.1
	 * @param  mixed $meta_value Meta value.
	 * @return mixed             Possibly sanitized meta value
	 */
	public function sanitization_cb( $meta_value ) {

		if ( $this->args( 'repeatable' ) && is_array( $meta_value ) ) {
			// Remove empties.
			$meta_value = array_filter( $meta_value );
		}

		// Check if the field has a registered validation callback.
		$cb = $this->maybe_callback( 'sanitization_cb' );
		if ( false === $cb ) {
			// If requesting NO validation, return meta value.
			return $meta_value;
		} elseif ( $cb ) {
			// Ok, callback is good, let's run it.
			return call_user_func( $cb, $meta_value, $this->args(), $this );
		}

		$sanitizer = new CMB2_Sanitize( $this, $meta_value );
		$field_type = $this->type();

		/**
		 * Filter the value before it is saved.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * Passing a non-null value to the filter will short-circuit saving
		 * the field value, saving the passed value instead.
		 *
		 * @param bool|mixed $override_value Sanitization/Validation override value to return.
		 *                                   Default: null. false to skip it.
		 * @param mixed      $value      The value to be saved to this field.
		 * @param int        $object_id  The ID of the object where the value will be saved
		 * @param array      $field_args The current field's arguments
		 * @param object     $sanitizer  This `CMB2_Sanitize` object
		 */
		$override_value = apply_filters( "cmb2_sanitize_{$field_type}", null, $sanitizer->value, $this->object_id, $this->args(), $sanitizer );

		if ( null !== $override_value ) {
			return $override_value;
		}

		// Sanitization via 'CMB2_Sanitize'.
		return $sanitizer->{$field_type}();
	}

	/**
	 * Process $_POST data to save this field's value
	 *
	 * @since  2.0.3
	 * @param  array $data_to_save $_POST data to check.
	 * @return array|int|bool                Result of save, false on failure
	 */
	public function save_field_from_data( array $data_to_save ) {
		$this->data_to_save = $data_to_save;

		$meta_value = isset( $this->data_to_save[ $this->id( true ) ] )
			? $this->data_to_save[ $this->id( true ) ]
			: null;

		return $this->save_field( $meta_value );
	}

	/**
	 * Sanitize/store a value to this field
	 *
	 * @since  2.0.0
	 * @param  array $meta_value Desired value to sanitize/store.
	 * @return array|int|bool              Result of save. false on failure
	 */
	public function save_field( $meta_value ) {

		$updated   = false;
		$action    = '';
		$new_value = $this->sanitization_cb( $meta_value );

		if ( ! $this->args( 'save_field' ) ) {

			// Nothing to see here.
			$action = 'disabled';

		} elseif ( $this->args( 'multiple' ) && ! $this->args( 'repeatable' ) && ! $this->group ) {

			$this->remove_data();
			$count = 0;

			if ( ! empty( $new_value ) ) {
				foreach ( $new_value as $add_new ) {
					if ( $this->update_data( $add_new, false ) ) {
						$count++;
					}
				}
			}

			$updated = $count ? $count : false;
			$action  = 'repeatable';

		} elseif ( ! CMB2_Utils::isempty( $new_value ) && $new_value !== $this->get_data() ) {
			$updated = $this->update_data( $new_value );
			$action  = 'updated';
		} elseif ( CMB2_Utils::isempty( $new_value ) ) {
			$updated = $this->remove_data();
			$action  = 'removed';
		}

		if ( $updated ) {
			$this->value = $this->get_data();
			$this->escaped_value = null;
		}

		$field_id = $this->id( true );

		/**
		 * Hooks after save field action.
		 *
		 * @since 2.2.0
		 *
		 * @param string            $field_id the current field id paramater.
		 * @param bool              $updated  Whether the metadata update action occurred.
		 * @param string            $action   Action performed. Could be "repeatable", "updated", or "removed".
		 * @param CMB2_Field object $field    This field object
		 */
		do_action( 'cmb2_save_field', $field_id, $updated, $action, $this );

		/**
		 * Hooks after save field action.
		 *
		 * The dynamic portion of the hook, $field_id, refers to the
		 * current field id paramater.
		 *
		 * @since 2.2.0
		 *
		 * @param bool              $updated Whether the metadata update action occurred.
		 * @param string            $action  Action performed. Could be "repeatable", "updated", or "removed".
		 * @param CMB2_Field object $field   This field object
		 */
		do_action( "cmb2_save_field_{$field_id}", $updated, $action, $this );

		return $updated;
	}

	/**
	 * Determine if current type is exempt from escaping
	 *
	 * @since  1.1.0
	 * @return bool  True if exempt
	 */
	public function escaping_exception() {
		// These types cannot be escaped.
		return in_array( $this->type(), array(
			'file_list',
			'multicheck',
			'text_datetime_timestamp_timezone',
		) );
	}

	/**
	 * Determine if current type cannot be repeatable
	 *
	 * @since  1.1.0
	 * @param  string $type Field type to check.
	 * @return bool         True if type cannot be repeatable
	 */
	public function repeatable_exception( $type ) {
		// These types cannot be repeatable.
		$internal_fields = array(
			// Use file_list instead.
			'file'                             => 1,
			'radio'                            => 1,
			'title'                            => 1,
			'wysiwyg'                          => 1,
			'checkbox'                         => 1,
			'radio_inline'                     => 1,
			'taxonomy_radio'                   => 1,
			'taxonomy_radio_inline'            => 1,
			'taxonomy_radio_hierarchical'      => 1,
			'taxonomy_select'                  => 1,
			'taxonomy_select_hierarchical'     => 1,
			'taxonomy_multicheck'              => 1,
			'taxonomy_multicheck_inline'       => 1,
			'taxonomy_multicheck_hierarchical' => 1,
		);

		/**
		 * Filter field types that are non-repeatable.
		 *
		 * Note that this does *not* allow overriding the default non-repeatable types.
		 *
		 * @since 2.1.1
		 *
		 * @param array $fields Array of fields designated as non-repeatable. Note that the field names are *keys*,
		 *                      and not values. The value can be anything, because it is meaningless. Example:
		 *                      array( 'my_custom_field' => 1 )
		 */
		$all_fields = array_merge( apply_filters( 'cmb2_non_repeatable_fields', array() ), $internal_fields );
		return isset( $all_fields[ $type ] );
	}

	/**
	 * Determine if current type has its own defaults field-arguments method.
	 *
	 * @since  2.2.6
	 * @param  string $type Field type to check.
	 * @return bool         True if has own method.
	 */
	public function has_args_method( $type ) {

		// These types have their own arguments parser.
		$type_methods = array(
			'group'   => 'set_field_defaults_group',
			'wysiwyg' => 'set_field_defaults_wysiwyg',
		);

		if ( isset( $type_methods[ $type ] ) ) {
			return $type_methods[ $type ];
		}

		$all_or_nothing_types = array_flip( apply_filters( 'cmb2_all_or_nothing_types', array(
			'select',
			'radio',
			'radio_inline',
			'taxonomy_select',
			'taxonomy_select_hierarchical',
			'taxonomy_radio',
			'taxonomy_radio_inline',
			'taxonomy_radio_hierarchical',
		), $this ) );

		if ( isset( $all_or_nothing_types[ $type ] ) ) {
			return 'set_field_defaults_all_or_nothing_types';
		}

		return false;
	}

	/**
	 * Escape the value before output. Defaults to 'esc_attr()'
	 *
	 * @since  1.0.1
	 * @param  callable|string $func       Escaping function (if not esc_attr()).
	 * @param  mixed           $meta_value Meta value.
	 * @return mixed                Final value.
	 */
	public function escaped_value( $func = 'esc_attr', $meta_value = '' ) {

		if ( null !== $this->escaped_value ) {
			return $this->escaped_value;
		}

		$meta_value = $meta_value ? $meta_value : $this->value();

		// Check if the field has a registered escaping callback.
		if ( $cb = $this->maybe_callback( 'escape_cb' ) ) {
			// Ok, callback is good, let's run it.
			return call_user_func( $cb, $meta_value, $this->args(), $this );
		}

		$field_type = $this->type();

		/**
		 * Filter the value for escaping before it is ouput.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * Passing a non-null value to the filter will short-circuit the built-in
		 * escaping for this field.
		 *
		 * @param bool|mixed $override_value Escaping override value to return.
		 *                                   Default: null. false to skip it.
		 * @param mixed      $meta_value The value to be output.
		 * @param array      $field_args The current field's arguments.
		 * @param object     $field      This `CMB2_Field` object.
		 */
		$esc = apply_filters( "cmb2_types_esc_{$field_type}", null, $meta_value, $this->args(), $this );
		if ( null !== $esc ) {
			return $esc;
		}

		if ( false === $cb || $this->escaping_exception() ) {
			// If requesting NO escaping, return meta value.
			return $this->val_or_default( $meta_value );
		}

		// escaping function passed in?
		$func       = $func ? $func : 'esc_attr';
		$meta_value = $this->val_or_default( $meta_value );

		if ( is_array( $meta_value ) ) {
			foreach ( $meta_value as $key => $value ) {
				$meta_value[ $key ] = call_user_func( $func, $value );
			}
		} else {
			$meta_value = call_user_func( $func, $meta_value );
		}

		$this->escaped_value = $meta_value;
		return $this->escaped_value;
	}

	/**
	 * Return non-empty value or field default if value IS empty
	 *
	 * @since  2.0.0
	 * @param  mixed $meta_value Field value.
	 * @return mixed             Field value, or default value
	 */
	public function val_or_default( $meta_value ) {
		return ! CMB2_Utils::isempty( $meta_value ) ? $meta_value : $this->get_default();
	}

	/**
	 * Offset a time value based on timezone
	 *
	 * @since  1.0.0
	 * @return string Offset time string
	 */
	public function field_timezone_offset() {
		return CMB2_Utils::timezone_offset( $this->field_timezone() );
	}

	/**
	 * Return timezone string
	 *
	 * @since  1.0.0
	 * @return string Timezone string
	 */
	public function field_timezone() {
		$value = '';

		// Is timezone arg set?
		if ( $this->args( 'timezone' ) ) {
			$value = $this->args( 'timezone' );
		} elseif ( $this->args( 'timezone_meta_key' ) ) {
			// Is there another meta key with a timezone stored as its value we should use?
			$value = $this->get_data( $this->args( 'timezone_meta_key' ) );
		}

		return $value;
	}

	/**
	 * Format the timestamp field value based on the field date/time format arg
	 *
	 * @since  2.0.0
	 * @param  int    $meta_value Timestamp.
	 * @param  string $format     Either date_format or time_format.
	 * @return string             Formatted date
	 */
	public function format_timestamp( $meta_value, $format = 'date_format' ) {
		return date( stripslashes( $this->args( $format ) ), $meta_value );
	}

	/**
	 * Return a formatted timestamp for a field
	 *
	 * @since  2.0.0
	 * @param  string     $format     Either date_format or time_format.
	 * @param  string|int $meta_value Optional meta value to check.
	 * @return string             Formatted date
	 */
	public function get_timestamp_format( $format = 'date_format', $meta_value = 0 ) {
		$meta_value = $meta_value ? $meta_value : $this->escaped_value();
		if ( empty( $meta_value ) ) {
			$meta_value = $this->get_default();
		}

		$meta_value = CMB2_Utils::make_valid_time_stamp( $meta_value );
		if ( empty( $meta_value ) ) {
			return '';
		}

		return is_array( $meta_value )
			? array_map( array( $this, 'format_timestamp' ), $meta_value, $format )
			: $this->format_timestamp( $meta_value, $format );
	}

	/**
	 * Get timestamp from text date
	 *
	 * @since  2.2.0
	 * @param  string $value Date value.
	 * @return mixed         Unix timestamp representing the date.
	 */
	public function get_timestamp_from_value( $value ) {
		$timestamp = CMB2_Utils::get_timestamp_from_value( $value, $this->args( 'date_format' ) );
		if ( empty( $timestamp ) && CMB2_Utils::is_valid_date( $value ) ) {
			$timestamp = CMB2_Utils::make_valid_time_stamp( $value );
		}

		return $timestamp;
	}

	/**
	 * Get field render callback and Render the field row
	 *
	 * @since 1.0.0
	 */
	public function render_field() {
		$this->render_context = 'edit';

		$this->peform_param_callback( 'render_row_cb' );

		// For chaining.
		return $this;
	}

	/**
	 * Default field render callback
	 *
	 * @since 2.1.1
	 */
	public function render_field_callback() {

		// If field is requesting to not be shown on the front-end.
		if ( ! is_admin() && ! $this->args( 'on_front' ) ) {
			return;
		}

		// If field is requesting to be conditionally shown.
		if ( ! $this->should_show() ) {
			return;
		}

		$field_type = $this->type();

		/**
		 * Hook before field row begins.
		 *
		 * @param CMB2_Field $field The current field object.
		 */
		do_action( 'cmb2_before_field_row', $this );

		/**
		 * Hook before field row begins.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * @param CMB2_Field $field The current field object.
		 */
		do_action( "cmb2_before_{$field_type}_field_row", $this );

		$this->peform_param_callback( 'before_row' );

		printf( "<div class=\"cmb-row %s\" data-fieldtype=\"%s\">\n", $this->row_classes(), $field_type );

		if ( ! $this->args( 'show_names' ) ) {
			echo "\n\t<div class=\"cmb-td\">\n";

			$this->peform_param_callback( 'label_cb' );

		} else {

			if ( $this->get_param_callback_result( 'label_cb' ) ) {
				echo '<div class="cmb-th">', $this->peform_param_callback( 'label_cb' ), '</div>';
			}

			echo "\n\t<div class=\"cmb-td\">\n";
		}

		$this->peform_param_callback( 'before' );

		$types = new CMB2_Types( $this );
		$types->render();

		$this->peform_param_callback( 'after' );

		echo "\n\t</div>\n</div>";

		$this->peform_param_callback( 'after_row' );

		/**
		 * Hook after field row ends.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * @param CMB2_Field $field The current field object.
		 */
		do_action( "cmb2_after_{$field_type}_field_row", $this );

		/**
		 * Hook after field row ends.
		 *
		 * @param CMB2_Field $field The current field object.
		 */
		do_action( 'cmb2_after_field_row', $this );

		// For chaining.
		return $this;
	}

	/**
	 * The default label_cb callback (if not a title field)
	 *
	 * @since  2.1.1
	 * @return string Label html markup.
	 */
	public function label() {
		if ( ! $this->args( 'name' ) ) {
			return '';
		}

		$style = ! $this->args( 'show_names' ) ? ' style="display:none;"' : '';

		return sprintf( "\n" . '<label%1$s for="%2$s">%3$s</label>' . "\n", $style, $this->id(), $this->args( 'name' ) );
	}

	/**
	 * Defines the classes for the current CMB2 field row
	 *
	 * @since  2.0.0
	 * @return string Space concatenated list of classes
	 */
	public function row_classes() {

		$classes = array();

		/**
		 * By default, 'text_url' and 'text' fields get table-like styling
		 *
		 * @since 2.0.0
		 *
		 * @param array $field_types The types of fields which should get the 'table-layout' class
		 */
		$repeat_table_rows_types = apply_filters( 'cmb2_repeat_table_row_types', array(
			'text_url',
			'text',
		) );

		$conditional_classes = array(
			'cmb-type-' . str_replace( '_', '-', sanitize_html_class( $this->type() ) ) => true,
			'cmb2-id-' . str_replace( '_', '-', sanitize_html_class( $this->id() ) )    => true,
			'cmb-repeat'             => $this->args( 'repeatable' ),
			'cmb-repeat-group-field' => $this->group,
			'cmb-inline'             => $this->args( 'inline' ),
			'table-layout'           => 'edit' === $this->render_context && in_array( $this->type(), $repeat_table_rows_types ),
		);

		foreach ( $conditional_classes as $class => $condition ) {
			if ( $condition ) {
				$classes[] = $class;
			}
		}

		if ( $added_classes = $this->args( 'classes' ) ) {
			$added_classes = is_array( $added_classes ) ? implode( ' ', $added_classes ) : (string) $added_classes;
		} elseif ( $added_classes = $this->get_param_callback_result( 'classes_cb' ) ) {
			$added_classes = is_array( $added_classes ) ? implode( ' ', $added_classes ) : (string) $added_classes;
		}

		if ( $added_classes ) {
			$classes[] = esc_attr( $added_classes );
		}

		/**
		 * Globally filter row classes
		 *
		 * @since 2.0.0
		 *
		 * @param string            $classes Space-separated list of row classes
		 * @param CMB2_Field object $field   This field object
		 */
		return apply_filters( 'cmb2_row_classes', implode( ' ', $classes ), $this );
	}

	/**
	 * Get field display callback and render the display value in the column.
	 *
	 * @since 2.2.2
	 */
	public function render_column() {
		$this->render_context = 'display';

		$this->peform_param_callback( 'display_cb' );

		// For chaining.
		return $this;
	}

	/**
	 * The method to fetch the value for this field for the REST API.
	 *
	 * @since 2.5.0
	 */
	public function get_rest_value() {
		$field_type = $this->type();
		$field_id   = $this->id( true );

		if ( $cb = $this->maybe_callback( 'rest_value_cb' ) ) {
			add_filter( "cmb2_get_rest_value_for_{$field_id}", $cb, 99 );
		}

		$value = $this->get_data();

		/**
		 * Filter the value before it is sent to the REST request.
		 *
		 * @since 2.5.0
		 *
		 * @param mixed      $value The value from CMB2_Field::get_data()
		 * @param CMB2_Field $field This field object.
		 */
		$value = apply_filters( 'cmb2_get_rest_value', $value, $this );

		/**
		 * Filter the value before it is sent to the REST request.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * @since 2.5.0
		 *
		 * @param mixed      $value The value from CMB2_Field::get_data()
		 * @param CMB2_Field $field This field object.
		 */
		$value = apply_filters( "cmb2_get_rest_value_{$field_type}", $value, $this );

		/**
		 * Filter the value before it is sent to the REST request.
		 *
		 * The dynamic portion of the hook name, $field_id, refers to the field id.
		 *
		 * @since 2.5.0
		 *
		 * @param mixed      $value The value from CMB2_Field::get_data()
		 * @param CMB2_Field $field This field object.
		 */
		return apply_filters( "cmb2_get_rest_value_for_{$field_id}", $value, $this );
	}

	/**
	 * Get a field object for a supporting field. (e.g. file field)
	 *
	 * @since  2.7.0
	 *
	 * @return CMB2_Field|bool Supporting field object, if supported.
	 */
	public function get_supporting_field() {
		$suffix = $this->args( 'has_supporting_data' );
		if ( empty( $suffix ) ) {
			return false;
		}

		return $this->get_field_clone( array(
			'id' => $this->_id( '', false ) . $suffix,
			'sanitization_cb' => false,
		) );
	}

	/**
	 * Default callback to outputs field value in a display format.
	 *
	 * @since 2.2.2
	 */
	public function display_value_callback() {
		// If field is requesting to be conditionally shown.
		if ( ! $this->should_show() ) {
			return;
		}

		$display = new CMB2_Field_Display( $this );
		$field_type = $this->type();

		/**
		 * A filter to bypass the default display.
		 *
		 * The dynamic portion of the hook name, $field_type, refers to the field type.
		 *
		 * Passing a non-null value to the filter will short-circuit the default display.
		 *
		 * @param bool|mixed         $pre_output Default null value.
		 * @param CMB2_Field         $field      This field object.
		 * @param CMB2_Field_Display $display    The `CMB2_Field_Display` object.
		 */
		$pre_output = apply_filters( "cmb2_pre_field_display_{$field_type}", null, $this, $display );

		if ( null !== $pre_output ) {
			echo $pre_output;
			return;
		}

		$this->peform_param_callback( 'before_display_wrap' );

		printf( "<div class=\"cmb-column %s\" data-fieldtype=\"%s\">\n", $this->row_classes(), $field_type );

		$this->peform_param_callback( 'before_display' );

		CMB2_Field_Display::get( $this )->display();

		$this->peform_param_callback( 'after_display' );

		echo "\n</div>";

		$this->peform_param_callback( 'after_display_wrap' );

		// For chaining.
		return $this;
	}

	/**
	 * Replaces a hash key - {#} - with the repeatable index
	 *
	 * @since  1.2.0
	 * @param  string $value Value to update.
	 * @return string        Updated value
	 */
	public function replace_hash( $value ) {
		// Replace hash with 1 based count.
		return str_replace( '{#}', ( $this->index + 1 ), $value );
	}

	/**
	 * Retrieve text parameter from field's text array (if it has one), or use fallback text
	 * For back-compatibility, falls back to checking the options array.
	 *
	 * @since  2.2.2
	 * @param  string $text_key Key in field's text array.
	 * @param  string $fallback Fallback text.
	 * @return string            Text
	 */
	public function get_string( $text_key, $fallback ) {
		// If null, populate with our field strings values.
		if ( null === $this->strings ) {
			$this->strings = (array) $this->args['text'];

			if ( is_callable( $this->args['text_cb'] ) ) {
				$strings = call_user_func( $this->args['text_cb'], $this );

				if ( $strings && is_array( $strings ) ) {
					$this->strings += $strings;
				}
			}
		}

		// If we have that string value, send it back.
		if ( isset( $this->strings[ $text_key ] ) ) {
			return $this->strings[ $text_key ];
		}

		// Check options for back-compat.
		$string = $this->options( $text_key );

		return $string ? $string : $fallback;
	}

	/**
	 * Retrieve options args.
	 *
	 * @since  2.0.0
	 * @param  string $key Specific option to retrieve.
	 * @return array|mixed Array of options or specific option.
	 */
	public function options( $key = '' ) {
		if ( empty( $this->field_options ) ) {
			$this->set_options();
		}

		if ( $key ) {
			return array_key_exists( $key, $this->field_options ) ? $this->field_options[ $key ] : false;
		}

		return $this->field_options;
	}

	/**
	 * Generates/sets options args. Calls options_cb if it exists.
	 *
	 * @since  2.2.5
	 *
	 * @return array Array of options
	 */
	public function set_options() {
		$this->field_options = (array) $this->args['options'];

		if ( is_callable( $this->args['options_cb'] ) ) {
			$options = call_user_func( $this->args['options_cb'], $this );

			if ( $options && is_array( $options ) ) {
				$this->field_options = $options + $this->field_options;
			}
		}

		return $this->field_options;
	}

	/**
	 * Store JS dependencies as part of the field args.
	 *
	 * @since 2.2.0
	 * @param array $dependencies Dependies to register for this field.
	 */
	public function add_js_dependencies( $dependencies = array() ) {
		foreach ( (array) $dependencies as $dependency ) {
			$this->args['js_dependencies'][ $dependency ] = $dependency;
		}

		CMB2_JS::add_dependencies( $dependencies );
	}

	/**
	 * Send field data to JS.
	 *
	 * @since 2.2.0
	 */
	public function register_js_data() {
		if ( $this->group ) {
			CMB2_JS::add_field_data( $this->group );
		}

		return CMB2_JS::add_field_data( $this );
	}

	/**
	 * Get an array of some of the field data to be used in the Javascript.
	 *
	 * @since  2.2.4
	 *
	 * @return array
	 */
	public function js_data() {
		return array(
			'label'     => $this->args( 'name' ),
			'id'        => $this->id( true ),
			'type'      => $this->type(),
			'hash'      => $this->hash_id(),
			'box'       => $this->cmb_id,
			'id_attr'   => $this->id(),
			'name_attr' => $this->args( '_name' ),
			'default'   => $this->get_default(),
			'group'     => $this->group_id(),
			'index'     => $this->group ? $this->group->index : null,
		);
	}

	/**
	 * Returns a unique hash representing this field.
	 *
	 * @since  2.2.4
	 *
	 * @return string
	 */
	public function hash_id() {
		if ( '' === $this->hash_id ) {
			$this->hash_id = CMB2_Utils::generate_hash( $this->cmb_id . '||' . $this->id() );
		}

		return $this->hash_id;
	}

	/**
	 * Gets the id of the group field if this field is part of a group.
	 *
	 * @since  2.2.4
	 *
	 * @return string
	 */
	public function group_id() {
		return $this->group ? $this->group->id( true ) : '';
	}

	/**
	 * Get CMB2_Field default value, either from default param or default_cb param.
	 *
	 * @since  0.2.2
	 *
	 * @return mixed  Default field value
	 */
	public function get_default() {
		$default = $this->args['default'];

		if ( null !== $default ) {
			return apply_filters( 'cmb2_default_filter', $default, $this );
		}

		$param = is_callable( $this->args['default_cb'] ) ? 'default_cb' : 'default';
		$default = $this->args['default'] = $this->get_param_callback_result( $param );

		// Allow a filter override of the default value.
		return apply_filters( 'cmb2_default_filter', $this->args['default'], $this );
	}

	/**
	 * Fills in empty field parameters with defaults
	 *
	 * @since 1.1.0
	 *
	 * @param  array $args Field config array.
	 * @return array        Modified field config array.
	 */
	public function _set_field_defaults( $args ) {
		$defaults = $this->get_default_field_args( $args );

		/**
		 * Filter the CMB2 Field defaults.
		 *
		 * @since 2.6.0
		 * @param array             $defaults Metabox field config array defaults.
		 * @param string            $id       Field id for the current field to allow for selective filtering.
		 * @param string            $type     Field type for the current field to allow for selective filtering.
		 * @param CMB2_Field object $field    This field object.
		 */
		$defaults = apply_filters( 'cmb2_field_defaults', $defaults, $args['id'], $args['type'], $this );

		// Set up blank or default values for empty ones.
		$args = wp_parse_args( $args, $defaults );

		/**
		 * Filtering the CMB2 Field arguments once merged with the defaults, but before further processing.
		 *
		 * @since 2.6.0
		 * @param array             $args  Metabox field config array defaults.
		 * @param CMB2_Field object $field This field object.
		 */
		$args = apply_filters( 'cmb2_field_arguments_raw', $args, $this );

		/*
		 * Deprecated usage:
		 *
		 * 'std' -- use 'default' (no longer works)
		 * 'row_classes' -- use 'class', or 'class_cb'
		 * 'default' -- as callback (use default_cb)
		 */
		$args = $this->convert_deprecated_params( $args );

		$args['repeatable'] = $args['repeatable'] && ! $this->repeatable_exception( $args['type'] );
		$args['inline']     = $args['inline'] || false !== stripos( $args['type'], '_inline' );
		$args['_id']        = $args['id'];
		$args['_name']      = $args['id'];

		if ( $method = $this->has_args_method( $args['type'] ) ) {
			$args = $this->{$method}( $args );
		}

		if ( $this->group ) {
			$args = $this->set_group_sub_field_defaults( $args );
		}

		$with_supporting = array(
			// CMB2_Sanitize::_save_file_id_value()/CMB2_Sanitize::_get_group_file_value_array().
			'file' => '_id',
			// See CMB2_Sanitize::_save_utc_value().
			'text_datetime_timestamp_timezone' => '_utc',
		);

		$args['has_supporting_data'] = isset( $with_supporting[ $args['type'] ] )
			? $with_supporting[ $args['type'] ]
			: false;

		// Repeatable fields require jQuery sortable library.
		if ( ! empty( $args['repeatable'] ) ) {
			CMB2_JS::add_dependencies( 'jquery-ui-sortable' );
		}

		/**
		 * Filter the CMB2 Field arguments after processing.
		 *
		 * @since 2.6.0
		 * @param array             $args  Metabox field config array after processing.
		 * @param CMB2_Field object $field This field object.
		 */
		return apply_filters( 'cmb2_field_arguments', $args, $this );
	}

	/**
	 * Sets default arguments for the group field types.
	 *
	 * @since 2.2.6
	 *
	 * @param  array $args Field config array.
	 * @return array        Modified field config array.
	 */
	protected function set_field_defaults_group( $args ) {
		$args['options'] = wp_parse_args( $args['options'], array(
			'add_button'     => esc_html__( 'Add Group', 'cmb2' ),
			'remove_button'  => esc_html__( 'Remove Group', 'cmb2' ),
			'remove_confirm' => '',
		) );

		return $args;
	}

	/**
	 * Sets default arguments for the wysiwyg field types.
	 *
	 * @since 2.2.6
	 *
	 * @param  array $args Field config array.
	 * @return array        Modified field config array.
	 */
	protected function set_field_defaults_wysiwyg( $args ) {
		$args['id'] = strtolower( str_ireplace( '-', '_', $args['id'] ) );
		$args['options']['textarea_name'] = $args['_name'];

		return $args;
	}

	/**
	 * Sets default arguments for the all-or-nothing field types.
	 *
	 * @since 2.2.6
	 *
	 * @param  array $args Field config array.
	 * @return array        Modified field config array.
	 */
	protected function set_field_defaults_all_or_nothing_types( $args ) {
		$args['show_option_none'] = isset( $args['show_option_none'] ) ? $args['show_option_none'] : null;
		$args['show_option_none'] = true === $args['show_option_none'] ? esc_html__( 'None', 'cmb2' ) : $args['show_option_none'];

		if ( null === $args['show_option_none'] ) {
			$off_by_default = in_array( $args['type'], array( 'select', 'radio', 'radio_inline' ), true );
			$args['show_option_none'] = $off_by_default ? false : esc_html__( 'None', 'cmb2' );
		}

		return $args;
	}

	/**
	 * Sets default arguments for group sub-fields.
	 *
	 * @since 2.2.6
	 *
	 * @param  array $args Field config array.
	 * @return array        Modified field config array.
	 */
	protected function set_group_sub_field_defaults( $args ) {
		$args['id']    = $this->group->args( 'id' ) . '_' . $this->group->index . '_' . $args['id'];
		$args['_name'] = $this->group->args( 'id' ) . '[' . $this->group->index . '][' . $args['_name'] . ']';

		return $args;
	}

	/**
	 * Gets the default arguments for all fields.
	 *
	 * @since 2.2.6
	 *
	 * @param  array $args Field config array.
	 * @return array        Field defaults.
	 */
	protected function get_default_field_args( $args ) {
		$type = isset( $args['type'] ) ? $args['type'] : '';

		return array(
			'type'              => $type,
			'name'              => '',
			'desc'              => '',
			'before'            => '',
			'after'             => '',
			'options'           => array(),
			'options_cb'        => '',
			'text'              => array(),
			'text_cb'           => '',
			'attributes'        => array(),
			'protocols'         => null,
			'default'           => null,
			'default_cb'        => '',
			'classes'           => null,
			'classes_cb'        => '',
			'select_all_button' => true,
			'multiple'          => false,
			'repeatable'        => 'group' === $type,
			'inline'            => false,
			'on_front'          => true,
			'show_names'        => true,
			'save_field'        => true, // Will not save if false.
			'date_format'       => 'm\/d\/Y',
			'time_format'       => 'h:i A',
			'description'       => isset( $args['desc'] ) ? $args['desc'] : '',
			'preview_size'      => 'file' === $type ? array( 350, 350 ) : array( 50, 50 ),
			'render_row_cb'     => array( $this, 'render_field_callback' ),
			'display_cb'        => array( $this, 'display_value_callback' ),
			'label_cb'          => 'title' !== $type ? array( $this, 'label' ) : '',
			'column'            => false,
			'js_dependencies'   => array(),
			'show_in_rest'      => null,
			'char_counter'      => false,
			'char_max'          => false,
			'char_max_enforce'  => false,
		);
	}

	/**
	 * Get default field arguments specific to this CMB2 object.
	 *
	 * @since  2.2.0
	 * @param  array      $field_args  Metabox field config array.
	 * @param  CMB2_Field $field_group (optional) CMB2_Field object (group parent).
	 * @return array                   Array of field arguments.
	 */
	protected function get_default_args( $field_args, $field_group = null ) {
		$args = parent::get_default_args( array(), $this->group );

		if ( isset( $field_args['field_args'] ) ) {
			$args = wp_parse_args( $field_args, $args );
		} else {
			$args['field_args'] = wp_parse_args( $field_args, $this->args );
		}

		return $args;
	}

	/**
	 * Returns a cloned version of this field object, but with
	 * modified/overridden field arguments.
	 *
	 * @since  2.2.2
	 * @param  array $field_args Array of field arguments, or entire array of
	 *                           arguments for CMB2_Field.
	 *
	 * @return CMB2_Field         The new CMB2_Field instance.
	 */
	public function get_field_clone( $field_args ) {
		return $this->get_new_field( $field_args );
	}

	/**
	 * Returns the CMB2 instance this field is registered to.
	 *
	 * @since  2.2.2
	 *
	 * @return CMB2|WP_Error If new CMB2_Field is called without cmb_id arg, returns error.
	 */
	public function get_cmb() {
		if ( ! $this->cmb_id ) {
			return new WP_Error( 'no_cmb_id', esc_html__( 'Sorry, this field does not have a cmb_id specified.', 'cmb2' ) );
		}

		return cmb2_get_metabox( $this->cmb_id, $this->object_id, $this->object_type );
	}

	/**
	 * Converts deprecated field parameters to the current/proper parameter, and throws a deprecation notice.
	 *
	 * @since  2.2.3
	 * @param  array $args Metabox field config array.
	 * @return array       Modified field config array.
	 */
	protected function convert_deprecated_params( $args ) {

		if ( isset( $args['row_classes'] ) ) {

			// We'll let this one be.
			// $this->deprecated_param( __CLASS__ . '::__construct()', '2.2.3', self::DEPRECATED_PARAM, 'row_classes', 'classes' );
			// row_classes param could be a callback. This is definitely deprecated.
			if ( is_callable( $args['row_classes'] ) ) {

				$this->deprecated_param( __CLASS__ . '::__construct()', '2.2.3', self::DEPRECATED_CB_PARAM, 'row_classes', 'classes_cb' );

				$args['classes_cb'] = $args['row_classes'];
				$args['classes'] = null;
			} else {

				$args['classes'] = $args['row_classes'];
			}

			unset( $args['row_classes'] );
		}

		// default param can be passed a callback as well.
		if ( is_callable( $args['default'] ) ) {

			$this->deprecated_param( __CLASS__ . '::__construct()', '2.2.3', self::DEPRECATED_CB_PARAM, 'default', 'default_cb' );

			$args['default_cb'] = $args['default'];
			$args['default'] = null;
		}

		// options param can be passed a callback as well.
		if ( is_callable( $args['options'] ) ) {

			$this->deprecated_param( __CLASS__ . '::__construct()', '2.2.3', self::DEPRECATED_CB_PARAM, 'options', 'options_cb' );

			$args['options_cb'] = $args['options'];
			$args['options'] = array();
		}

		return $args;
	}

}
PK     ƒŠU]j/,MŸS  ŸS  (  vendor/cmb2/cmb2/includes/CMB2_Types.phpnu „[µü¤        <?php
/**
 * CMB field type objects
 *
 * @since  1.0.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Types {

	/**
	 * An iterator value for repeatable fields
	 *
	 * @var   integer
	 * @since 1.0.0
	 */
	public $iterator = 0;

	/**
	 * Current CMB2_Field field object
	 *
	 * @var   CMB2_Field object
	 * @since 1.0.0
	 */
	public $field;

	/**
	 * Current CMB2_Type_Base object
	 *
	 * @var   CMB2_Type_Base object
	 * @since 2.2.2
	 */
	public $type = null;

	public function __construct( CMB2_Field $field ) {
		$this->field = $field;
	}

	/**
	 * Default fallback. Allows rendering fields via "cmb2_render_$fieldtype" hook
	 *
	 * @since 1.0.0
	 * @param string $fieldtype Non-existent field type name
	 * @param array  $arguments All arguments passed to the method
	 */
	public function __call( $fieldtype, $arguments ) {

		// Check for methods to be proxied to the CMB2_Type_Base object.
		if ( $exists = $this->maybe_proxy_method( $fieldtype, $arguments ) ) {
			return $exists['value'];
		}

		// Check for custom field type class.
		if ( $object = $this->maybe_custom_field_object( $fieldtype, $arguments ) ) {
			return $object->render();
		}

		/**
		 * Pass non-existent field types through an action.
		 *
		 * The dynamic portion of the hook name, $fieldtype, refers to the field type.
		 *
		 * @param array  $field              The passed in `CMB2_Field` object
		 * @param mixed  $escaped_value      The value of this field escaped.
		 *                                   It defaults to `sanitize_text_field`.
		 *                                   If you need the unescaped value, you can access it
		 *                                   via `$field->value()`
		 * @param int    $object_id          The ID of the current object
		 * @param string $object_type        The type of object you are working with.
		 *                                   Most commonly, `post` (this applies to all post-types),
		 *                                   but could also be `comment`, `user` or `options-page`.
		 * @param object $field_type_object  This `CMB2_Types` object
		 */
		do_action( "cmb2_render_{$fieldtype}", $this->field, $this->field->escaped_value(), $this->field->object_id, $this->field->object_type, $this );
	}

	/**
	 * Render a field (and handle repeatable)
	 *
	 * @since  1.1.0
	 */
	public function render() {
		if ( $this->field->args( 'repeatable' ) ) {
			$this->render_repeatable_field();
		} else {
			$this->_render();
		}
	}

	/**
	 * Render a field type
	 *
	 * @since  1.1.0
	 */
	protected function _render() {
		$this->field->peform_param_callback( 'before_field' );
		echo $this->{$this->field->type()}();
		$this->field->peform_param_callback( 'after_field' );
	}

	/**
	 * Proxies the method call to the CMB2_Type_Base object, if it exists, otherwise returns a default fallback value.
	 *
	 * @since  2.2.2
	 *
	 * @param  string $method  Method to call on the CMB2_Type_Base object.
	 * @param  mixed  $default Default fallback value if method is not found.
	 * @param  array  $args    Optional arguments to pass to proxy method.
	 *
	 * @return mixed           Results from called method.
	 */
	protected function proxy_method( $method, $default, $args = array() ) {
		if ( ! is_object( $this->type ) ) {
			$this->guess_type_object( $method );
		}

		if ( is_object( $this->type ) && method_exists( $this->type, $method ) ) {

			return empty( $args )
				? $this->type->$method()
				: call_user_func_array( array( $this->type, $method ), $args );
		}

		return $default;
	}

	/**
	 * If no CMB2_Types::$type object is initiated when a proxy method is called, it means
	 * it's a custom field type (which SHOULD be instantiating a Type), but let's try and
	 * guess the type object for them and instantiate it.
	 *
	 * @since  2.2.3
	 *
	 * @param string $method  Method attempting to be called on the CMB2_Type_Base object.
	 * @return bool
	 */
	protected function guess_type_object( $method ) {
		$fieldtype = $this->field->type();

		// Try to "guess" the Type object based on the method requested.
		switch ( $method ) {
			case 'select_option':
			case 'list_input':
			case 'list_input_checkbox':
			case 'concat_items':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_Select' );
				break;
			case 'is_valid_img_ext':
			case 'img_status_output':
			case 'file_status_output':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_File_Base' );
				break;
			case 'parse_picker_options':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_Text_Date' );
				break;
			case 'get_object_terms':
			case 'get_terms':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_Taxonomy_Multicheck' );
				break;
			case 'date_args':
			case 'time_args':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_Text_Datetime_Timestamp' );
				break;
			case 'parse_args':
				$this->get_new_render_type( $fieldtype, 'CMB2_Type_Text' );
				break;
		}

		return null !== $this->type;
	}

	/**
	 * Check for methods to be proxied to the CMB2_Type_Base object.
	 *
	 * @since  2.2.4
	 * @param  string $method    The possible method to proxy.
	 * @param  array  $arguments All arguments passed to the method.
	 * @return bool|array        False if not proxied, else array with 'value' key being the return of the method.
	 */
	public function maybe_proxy_method( $method, $arguments ) {
		$exists = false;

		$proxied = array(
			'get_object_terms'     => array(),
			'is_valid_img_ext'     => false,
			'parse_args'           => array(),
			'concat_items'         => '',
			'select_option'        => '',
			'list_input'           => '',
			'list_input_checkbox'  => '',
			'img_status_output'    => '',
			'file_status_output'   => '',
			'parse_picker_options' => array(),
		);
		if ( isset( $proxied[ $method ] ) ) {
			$exists = array(
				// Ok, proxy the method call to the CMB2_Type_Base object.
				'value' => $this->proxy_method( $method, $proxied[ $method ], $arguments ),
			);
		}

		return $exists;
	}

	/**
	 * Checks for a custom field CMB2_Type_Base class to use for rendering.
	 *
	 * @since 2.2.4
	 *
	 * @param string $fieldtype Non-existent field type name.
	 * @param array  $args      Optional field arguments.
	 *
	 * @return bool|CMB2_Type_Base Type object if custom field is an object, false if field was added with
	 *                             `cmb2_render_{$field_type}` action.
	 * @throws Exception if custom field type class does not extend CMB2_Type_Base.
	 */
	public function maybe_custom_field_object( $fieldtype, $args = array() ) {
		if ( $render_class_name = $this->get_render_type_class( $fieldtype ) ) {
			$this->type = new $render_class_name( $this, $args );

			if ( ! ( $this->type instanceof CMB2_Type_Base ) ) {
				throw new Exception( __( 'Custom CMB2 field type classes must extend CMB2_Type_Base.', 'cmb2' ) );
			}

			return $this->type;
		}

		return false;
	}

	/**
	 * Gets the render type CMB2_Type_Base object to use for rendering the field.
	 *
	 * @since  2.2.4
	 * @param  string $fieldtype         The type of field being rendered.
	 * @param  string $render_class_name The default field type class to use. Defaults to null.
	 * @param  array  $args              Optional arguments to pass to type class.
	 * @param  mixed  $additional        Optional additional argument to pass to type class.
	 * @return CMB2_Type_Base            Type object.
	 */
	public function get_new_render_type( $fieldtype, $render_class_name = null, $args = array(), $additional = '' ) {
		$render_class_name = $this->get_render_type_class( $fieldtype, $render_class_name );
		$this->type = new $render_class_name( $this, $args, $additional );

		return $this->type;
	}

	/**
	 * Checks for the render type class to use for rendering the field.
	 *
	 * @since  2.2.4
	 * @param  string $fieldtype         The type of field being rendered.
	 * @param  string $render_class_name The default field type class to use. Defaults to null.
	 * @return string                    The field type class to use.
	 */
	public function get_render_type_class( $fieldtype, $render_class_name = null ) {
		$render_class_name = $this->field->args( 'render_class' ) ? $this->field->args( 'render_class' ) : $render_class_name;

		if ( has_action( "cmb2_render_class_{$fieldtype}" ) ) {

			/**
			 * Filters the custom field type class used for rendering the field. Class is required to extend CMB2_Type_Base.
			 *
			 * The dynamic portion of the hook name, $fieldtype, refers to the (custom) field type.
			 *
			 * @since 2.2.4
			 *
			 * @param string $render_class_name The custom field type class to use. Default null.
			 * @param object $field_type_object This `CMB2_Types` object.
			 */
			$render_class_name = apply_filters( "cmb2_render_class_{$fieldtype}", $render_class_name, $this );
		}

		return $render_class_name && class_exists( $render_class_name ) ? $render_class_name : false;
	}

	/**
	 * Retrieve text parameter from field's options array (if it has one), or use fallback text
	 *
	 * @since 2.0.0
	 * @param  string $text_key Key in field's options array.
	 * @param  string $fallback Fallback text.
	 * @return string
	 */
	public function _text( $text_key, $fallback = '' ) {
		return $this->field->get_string( $text_key, $fallback );
	}

	/**
	 * Determine a file's extension
	 *
	 * @since  1.0.0
	 * @param  string $file File url
	 * @return string|false File extension or false
	 */
	public function get_file_ext( $file ) {
		return CMB2_Utils::get_file_ext( $file );
	}

	/**
	 * Get the file name from a url
	 *
	 * @since  2.0.0
	 * @param  string $value File url or path
	 * @return string        File name
	 */
	public function get_file_name_from_path( $value ) {
		return CMB2_Utils::get_file_name_from_path( $value );
	}

	/**
	 * Combines attributes into a string for a form element
	 *
	 * @since  1.1.0
	 * @param  array $attrs        Attributes to concatenate
	 * @param  array $attr_exclude Attributes that should NOT be concatenated
	 * @return string               String of attributes for form element
	 */
	public function concat_attrs( $attrs, $attr_exclude = array() ) {
		return CMB2_Utils::concat_attrs( $attrs, $attr_exclude );
	}

	/**
	 * Generates repeatable field table markup
	 *
	 * @since  1.0.0
	 */
	public function render_repeatable_field() {
		$table_id = $this->field->id() . '_repeat';

		$this->_desc( true, true, true );
		?>

		<div id="<?php echo $table_id; ?>" class="cmb-repeat-table cmb-nested">
			<div class="cmb-tbody cmb-field-list">
				<?php $this->repeatable_rows(); ?>
			</div>
		</div>
		<p class="cmb-add-row">
			<button type="button" data-selector="<?php echo $table_id; ?>" class="cmb-add-row-button button-secondary"><?php echo esc_html( $this->_text( 'add_row_text', esc_html__( 'Add Row', 'cmb2' ) ) ); ?></button>
		</p>

		<?php
		// reset iterator
		$this->iterator = 0;
	}

	/**
	 * Generates repeatable field rows
	 *
	 * @since  1.1.0
	 */
	public function repeatable_rows() {
		$meta_value = array_filter( (array) $this->field->escaped_value() );
		// check for default content
		$default = $this->field->get_default();

		// check for saved data
		if ( ! empty( $meta_value ) ) {
			$meta_value = is_array( $meta_value ) ? array_filter( $meta_value ) : $meta_value;
			$meta_value = ! empty( $meta_value ) ? $meta_value : $default;
		} else {
			$meta_value = $default;
		}

		// Loop value array and add a row
		if ( ! empty( $meta_value ) ) {
			foreach ( (array) $meta_value as $val ) {
				$this->field->escaped_value = $val;
				$this->repeat_row();
				$this->iterator++;
			}
		} else {

			// If value is empty (including empty array), then clear the value.
			$this->field->escaped_value = $this->field->value = null;

			// Otherwise add one row
			$this->repeat_row();
		}

		// Then add an empty row
		$this->field->escaped_value = $default;
		$this->iterator = $this->iterator ? $this->iterator : 1;
		$this->repeat_row( 'empty-row hidden' );
	}

	/**
	 * Generates a repeatable row's markup
	 *
	 * @since 1.1.0
	 * @param string $classes Repeatable table row's class
	 */
	protected function repeat_row( $classes = 'cmb-repeat-row' ) {
		$classes = explode( ' ', $classes );
		$classes = array_map( 'sanitize_html_class', $classes );
		?>

		<div class="cmb-row <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
			<div class="cmb-td">
				<?php $this->_render(); ?>
			</div>
			<div class="cmb-td cmb-remove-row">
				<button type="button" class="button-secondary cmb-remove-row-button" title="<?php echo esc_attr( $this->_text( 'remove_row_button_title', esc_html__( 'Remove Row', 'cmb2' ) ) ); ?>"><?php echo esc_html( $this->_text( 'remove_row_text', esc_html__( 'Remove', 'cmb2' ) ) ); ?></button>
			</div>
		</div>

		<?php
	}

	/**
	 * Generates description markup.
	 *
	 * @since 1.0.0
	 * @param bool $paragraph    Paragraph tag or span.
	 * @param bool $echo         Whether to echo description or only return it.
	 * @param bool $repeat_group Whether to repeat the group.
	 * @return string Field's description markup.
	 */
	public function _desc( $paragraph = false, $echo = false, $repeat_group = false ) {
		// Prevent description from printing multiple times for repeatable fields
		if ( ! $repeat_group && ( $this->field->args( 'repeatable' ) || $this->iterator > 0 ) ) {
			return '';
		}

		$desc = $this->field->args( 'description' );

		if ( ! $desc ) {
			return;
		}

		$tag = $paragraph ? 'p' : 'span';
		$desc = sprintf( "\n" . '<%1$s class="cmb2-metabox-description">%2$s</%1$s>' . "\n", $tag, $desc );

		if ( $echo ) {
			echo $desc;
		}

		return $desc;
	}

	/**
	 * Generate field name attribute
	 *
	 * @since  1.1.0
	 * @param  string $suffix For multi-part fields
	 * @return string          Name attribute
	 */
	public function _name( $suffix = '' ) {
		return $this->field->args( '_name' ) . ( $this->field->args( 'repeatable' ) ? '[' . $this->iterator . ']' : '' ) . $suffix;
	}

	/**
	 * Generate field id attribute
	 *
	 * @since  1.1.0
	 * @param  string $suffix                     For multi-part fields
	 * @param  bool   $append_repeatable_iterator Whether to append the iterator attribue if the field is repeatable.
	 * @return string                             Id attribute
	 */
	public function _id( $suffix = '', $append_repeatable_iterator = true ) {
		$id = $this->field->id() . $suffix . ( $this->field->args( 'repeatable' ) ? '_' . $this->iterator : '' );

		if ( $append_repeatable_iterator && $this->field->args( 'repeatable' ) ) {
			$id .= '" data-iterator="' . $this->iterator;
		}

		return $id;
	}

	/**
	 * Handles outputting an 'input' element
	 *
	 * @since  1.1.0
	 * @param  array  $args Override arguments
	 * @param  string $type Field type
	 * @return string       Form input element
	 */
	public function input( $args = array(), $type = __FUNCTION__ ) {
		return $this->get_new_render_type( 'text', 'CMB2_Type_Text', $args, $type )->render();
	}

	/**
	 * Handles outputting an 'textarea' element
	 *
	 * @since  1.1.0
	 * @param  array $args Override arguments
	 * @return string       Form textarea element
	 */
	public function textarea( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Textarea', $args )->render();
	}

	/**
	 * Begin Field Types
	 */

	public function text() {
		return $this->input();
	}

	public function hidden() {
		$args = array(
			'type'  => 'hidden',
			'desc'  => '',
			'class' => 'cmb2-hidden',
		);
		if ( $this->field->group ) {
			$args['data-groupid'] = $this->field->group->id();
			$args['data-iterator'] = $this->iterator;
		}

		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', $args, 'input' )->render();
	}

	public function text_small() {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', array(
			'class' => 'cmb2-text-small',
			'desc'  => $this->_desc(),
		), 'input' )->render();
	}

	public function text_medium() {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', array(
			'class' => 'cmb2-text-medium',
			'desc'  => $this->_desc(),
		), 'input' )->render();
	}

	public function text_email() {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', array(
			'class' => 'cmb2-text-email cmb2-text-medium',
			'type'  => 'email',
		), 'input' )->render();
	}

	public function text_url() {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', array(
			'class' => 'cmb2-text-url cmb2-text-medium regular-text',
			'value' => $this->field->escaped_value( 'esc_url' ),
		), 'input' )->render();
	}

	public function text_money() {
		$input = $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text', array(
			'class' => 'cmb2-text-money',
			'desc'  => $this->_desc(),
		), 'input' )->render();
		return ( ! $this->field->get_param_callback_result( 'before_field' ) ? '$ ' : ' ' ) . $input;
	}

	public function textarea_small() {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Textarea', array(
			'class' => 'cmb2-textarea-small',
			'rows'  => 4,
		) )->render();
	}

	public function textarea_code( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Textarea_Code', $args )->render();
	}

	public function wysiwyg( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Wysiwyg', $args )->render();
	}

	public function text_date( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text_Date', $args )->render();
	}

	// Alias for text_date
	public function text_date_timestamp( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text_Date', $args )->render();
	}

	public function text_time( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text_Time', $args )->render();
	}

	public function text_datetime_timestamp( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text_Datetime_Timestamp', $args )->render();
	}

	public function text_datetime_timestamp_timezone( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Text_Datetime_Timestamp_Timezone', $args )->render();
	}

	public function select_timezone( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Select_Timezone', $args )->render();
	}

	public function colorpicker( $args = array(), $meta_value = '' ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Colorpicker', $args, $meta_value )->render();
	}

	public function title( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Title', $args )->render();
	}

	public function select( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Select', $args )->render();
	}

	public function taxonomy_select( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Select', $args )->render();
	}

	public function taxonomy_select_hierarchical( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Select_Hierarchical', $args )->render();
	}

	public function radio( $args = array(), $type = __FUNCTION__ ) {
		return $this->get_new_render_type( $type, 'CMB2_Type_Radio', $args, $type )->render();
	}

	public function radio_inline( $args = array() ) {
		return $this->radio( $args, __FUNCTION__ );
	}

	public function multicheck( $type = 'checkbox' ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Multicheck', array(), $type )->render();
	}

	public function multicheck_inline() {
		return $this->multicheck( 'multicheck_inline' );
	}

	public function checkbox( $args = array(), $is_checked = null ) {
		// Avoid get_new_render_type since we need a different default for the 3rd argument than ''.
		$render_class_name = $this->get_render_type_class( __FUNCTION__, 'CMB2_Type_Checkbox' );
		$this->type = new $render_class_name( $this, $args, $is_checked );
		return $this->type->render();
	}

	public function taxonomy_radio( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Radio', $args )->render();
	}

	public function taxonomy_radio_hierarchical( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Radio_Hierarchical', $args )->render();
	}

	public function taxonomy_radio_inline( $args = array() ) {
		return $this->taxonomy_radio( $args );
	}

	public function taxonomy_multicheck( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Multicheck', $args )->render();
	}

	public function taxonomy_multicheck_hierarchical( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Taxonomy_Multicheck_Hierarchical', $args )->render();
	}

	public function taxonomy_multicheck_inline( $args = array() ) {
		return $this->taxonomy_multicheck( $args );
	}

	public function oembed( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_Oembed', $args )->render();
	}

	public function file_list( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_File_List', $args )->render();
	}

	public function file( $args = array() ) {
		return $this->get_new_render_type( __FUNCTION__, 'CMB2_Type_File', $args )->render();
	}

}
PK     ƒŠU]VV¸x$  $  '  vendor/cmb2/cmb2/includes/CMB2_Ajax.phpnu „[µü¤        <?php

/**
 * CMB2 ajax methods
 * (i.e. a lot of work to get oEmbeds to work with non-post objects)
 *
 * @since  0.9.5
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 */
class CMB2_Ajax {

	// Whether to hijack the oembed cache system.
	protected $hijack      = false;
	protected $object_id   = 0;
	protected $embed_args  = array();
	protected $object_type = 'post';
	protected $ajax_update = false;

	/**
	 * Instance of this class.
	 *
	 * @since 2.2.2
	 * @var object
	 */
	protected static $instance;

	/**
	 * Get the singleton instance of this class.
	 *
	 * @since 2.2.2
	 * @return CMB2_Ajax
	 */
	public static function get_instance() {
		if ( ! ( self::$instance instanceof self ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * Constructor
	 *
	 * @since 2.2.0
	 */
	protected function __construct() {
		add_action( 'wp_ajax_cmb2_oembed_handler', array( $this, 'oembed_handler' ) );
		add_action( 'wp_ajax_nopriv_cmb2_oembed_handler', array( $this, 'oembed_handler' ) );
		// Need to occasionally clean stale oembed cache data from the option value.
		add_action( 'cmb2_save_options-page_fields', array( __CLASS__, 'clean_stale_options_page_oembeds' ) );
	}

	/**
	 * Handles our oEmbed ajax request
	 *
	 * @since  0.9.5
	 * @return mixed oEmbed embed code | fallback | error message
	 */
	public function oembed_handler() {

		// Verify our nonce.
		if ( ! ( isset( $_REQUEST['cmb2_ajax_nonce'], $_REQUEST['oembed_url'] ) && wp_verify_nonce( $_REQUEST['cmb2_ajax_nonce'], 'ajax_nonce' ) ) ) {
			die();
		}

		// Sanitize our search string.
		$oembed_string = sanitize_text_field( $_REQUEST['oembed_url'] );

		// Send back error if empty.
		if ( empty( $oembed_string ) ) {
			wp_send_json_error( '<p class="ui-state-error-text">' . esc_html__( 'Please Try Again', 'cmb2' ) . '</p>' );
		}

		// Set width of embed.
		$embed_width = isset( $_REQUEST['oembed_width'] ) && intval( $_REQUEST['oembed_width'] ) < 640 ? intval( $_REQUEST['oembed_width'] ) : '640';

		// Set url.
		$oembed_url = esc_url( $oembed_string );

		// Set args.
		$embed_args = array(
			'width' => $embed_width,
		);

		$this->ajax_update = true;

		// Get embed code (or fallback link).
		$html = $this->get_oembed( array(
			'url'         => $oembed_url,
			'object_id'   => $_REQUEST['object_id'],
			'object_type' => isset( $_REQUEST['object_type'] ) ? $_REQUEST['object_type'] : 'post',
			'oembed_args' => $embed_args,
			'field_id'    => $_REQUEST['field_id'],
		) );

		wp_send_json_success( $html );
	}

	/**
	 * Retrieves oEmbed from url/object ID
	 *
	 * @since  0.9.5
	 * @param  array $args Arguments for method.
	 * @return mixed HTML markup with embed or fallback.
	 */
	public function get_oembed_no_edit( $args ) {
		global $wp_embed;

		$oembed_url = esc_url( $args['url'] );

		// Sanitize object_id.
		$this->object_id = is_numeric( $args['object_id'] ) ? absint( $args['object_id'] ) : sanitize_text_field( $args['object_id'] );

		$args = wp_parse_args( $args, array(
			'object_type' => 'post',
			'oembed_args' => array(),
			'field_id'    => false,
			'wp_error'    => false,
		) );

		$this->embed_args =& $args;

		/*
		 * Set the post_ID so oEmbed won't fail
		 * wp-includes/class-wp-embed.php, WP_Embed::shortcode()
		 */
		$wp_embed->post_ID = $this->object_id;

		// Special scenario if NOT a post object.
		if ( isset( $args['object_type'] ) && 'post' != $args['object_type'] ) {

			if ( 'options-page' == $args['object_type'] ) {

				// Bogus id to pass some numeric checks. Issue with a VERY large WP install?
				$wp_embed->post_ID = 1987645321;
			}

			// Ok, we need to hijack the oembed cache system.
			$this->hijack = true;
			$this->object_type = $args['object_type'];

			// Gets ombed cache from our object's meta (vs postmeta).
			add_filter( 'get_post_metadata', array( $this, 'hijack_oembed_cache_get' ), 10, 3 );

			// Sets ombed cache in our object's meta (vs postmeta).
			add_filter( 'update_post_metadata', array( $this, 'hijack_oembed_cache_set' ), 10, 4 );

		}

		$embed_args = '';

		foreach ( $args['oembed_args'] as $key => $val ) {
			$embed_args .= " $key=\"$val\"";
		}

		// Ping WordPress for an embed.
		$embed = $wp_embed->run_shortcode( '[embed' . $embed_args . ']' . $oembed_url . '[/embed]' );

		// Fallback that WordPress creates when no oEmbed was found.
		$fallback = $wp_embed->maybe_make_link( $oembed_url );

		return compact( 'embed', 'fallback', 'args' );
	}

	/**
	 * Retrieves oEmbed from url/object ID
	 *
	 * @since  0.9.5
	 * @param  array $args Arguments for method.
	 * @return string HTML markup with embed or fallback.
	 */
	public function get_oembed( $args ) {
		$oembed = $this->get_oembed_no_edit( $args );

		// Send back our embed.
		if ( $oembed['embed'] && $oembed['embed'] != $oembed['fallback'] ) {
			return '<div class="cmb2-oembed embed-status">' . $oembed['embed'] . '<p class="cmb2-remove-wrapper"><a href="#" class="cmb2-remove-file-button" rel="' . $oembed['args']['field_id'] . '">' . esc_html__( 'Remove Embed', 'cmb2' ) . '</a></p></div>';
		}

		// Otherwise, send back error info that no oEmbeds were found.
		return sprintf(
			'<p class="ui-state-error-text">%s</p>',
			sprintf(
				/* translators: 1: results for. 2: link to codex.wordpress.org/Embeds */
				esc_html__( 'No oEmbed Results Found for %1$s. View more info at %2$s.', 'cmb2' ),
				$oembed['fallback'],
				'<a href="https://wordpress.org/support/article/embeds/" target="_blank">codex.wordpress.org/Embeds</a>'
			)
		);
	}

	/**
	 * Hijacks retrieving of cached oEmbed.
	 * Returns cached data from relevant object metadata (vs postmeta)
	 *
	 * @since  0.9.5
	 * @param  boolean $check     Whether to retrieve postmeta or override.
	 * @param  int     $object_id Object ID.
	 * @param  string  $meta_key  Object metakey.
	 * @return mixed              Object's oEmbed cached data.
	 */
	public function hijack_oembed_cache_get( $check, $object_id, $meta_key ) {
		if ( ! $this->hijack || ( $this->object_id != $object_id && 1987645321 !== $object_id ) ) {
			return $check;
		}

		if ( $this->ajax_update ) {
			return false;
		}

		return $this->cache_action( $meta_key );
	}

	/**
	 * Hijacks saving of cached oEmbed.
	 * Saves cached data to relevant object metadata (vs postmeta)
	 *
	 * @since  0.9.5
	 * @param  boolean $check      Whether to continue setting postmeta.
	 * @param  int     $object_id  Object ID to get postmeta from.
	 * @param  string  $meta_key   Postmeta's key.
	 * @param  mixed   $meta_value Value of the postmeta to be saved.
	 * @return boolean             Whether to continue setting.
	 */
	public function hijack_oembed_cache_set( $check, $object_id, $meta_key, $meta_value ) {

		if (
			! $this->hijack
			|| ( $this->object_id != $object_id && 1987645321 !== $object_id )
			// Only want to hijack oembed meta values.
			|| 0 !== strpos( $meta_key, '_oembed_' )
		) {
			return $check;
		}

		$this->cache_action( $meta_key, $meta_value );

		// Anything other than `null` to cancel saving to postmeta.
		return true;
	}

	/**
	 * Gets/updates the cached oEmbed value from/to relevant object metadata (vs postmeta).
	 *
	 * @since 1.3.0
	 *
	 * @param string $meta_key Postmeta's key.
	 * @return mixed
	 */
	protected function cache_action( $meta_key ) {
		$func_args = func_get_args();
		$action    = isset( $func_args[1] ) ? 'update' : 'get';

		if ( 'options-page' === $this->object_type ) {

			$args = array( $meta_key );

			if ( 'update' === $action ) {
				$args[] = $func_args[1];
				$args[] = true;
			}

			// Cache the result to our options.
			$status = call_user_func_array( array( cmb2_options( $this->object_id ), $action ), $args );
		} else {

			$args = array( $this->object_type, $this->object_id, $meta_key );
			$args[] = 'update' === $action ? $func_args[1] : true;

			// Cache the result to our metadata.
			$status = call_user_func_array( $action . '_metadata', $args );
		}

		return $status;
	}

	/**
	 * Hooks in when options-page data is saved to clean stale
	 * oembed cache data from the option value.
	 *
	 * @since  2.2.0
	 * @param  string $option_key The options-page option key.
	 * @return void
	 */
	public static function clean_stale_options_page_oembeds( $option_key ) {
		$options = cmb2_options( $option_key )->get_options();
		$modified = false;
		if ( is_array( $options ) ) {

			$ttl = apply_filters( 'oembed_ttl', DAY_IN_SECONDS, '', array(), 0 );
			$now = time();

			foreach ( $options as $key => $value ) {
				// Check for cached oembed data.
				if ( 0 === strpos( $key, '_oembed_time_' ) ) {
					$cached_recently = ( $now - $value ) < $ttl;

					if ( ! $cached_recently ) {
						$modified = true;
						// Remove the the cached ttl expiration, and the cached oembed value.
						unset( $options[ $key ] );
						unset( $options[ str_replace( '_oembed_time_', '_oembed_', $key ) ] );
					}
				} elseif ( '{{unknown}}' === $value ) {
					// Remove the cached unknown values.
					$modified = true;
					unset( $options[ $key ] );
				}
			}
		}

		// Update the option and remove stale cache data.
		if ( $modified ) {
			cmb2_options( $option_key )->set( $options );
		}
	}

}
PK     ƒŠU]°x\¤  ¤  (  vendor/cmb2/cmb2/includes/CMB2_Boxes.phpnu „[µü¤        <?php

/**
 * A CMB2 object instance registry for storing every CMB2 instance.
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Boxes {

	/**
	 * Array of all metabox objects.
	 *
	 * @since 2.0.0
	 * @var array
	 */
	protected static $cmb2_instances = array();

	/**
	 * Add a CMB2 instance object to the registry.
	 *
	 * @since 1.X.X
	 *
	 * @param CMB2 $cmb_instance CMB2 instance.
	 */
	public static function add( CMB2 $cmb_instance ) {
		self::$cmb2_instances[ $cmb_instance->cmb_id ] = $cmb_instance;
	}

	/**
	 * Remove a CMB2 instance object from the registry.
	 *
	 * @since 1.X.X
	 *
	 * @param string $cmb_id A CMB2 instance id.
	 */
	public static function remove( $cmb_id ) {
		if ( array_key_exists( $cmb_id, self::$cmb2_instances ) ) {
			unset( self::$cmb2_instances[ $cmb_id ] );
		}
	}

	/**
	 * Retrieve a CMB2 instance by cmb id.
	 *
	 * @since 1.X.X
	 *
	 * @param string $cmb_id A CMB2 instance id.
	 *
	 * @return CMB2|bool False or CMB2 object instance.
	 */
	public static function get( $cmb_id ) {
		if ( empty( self::$cmb2_instances ) || empty( self::$cmb2_instances[ $cmb_id ] ) ) {
			return false;
		}

		return self::$cmb2_instances[ $cmb_id ];
	}

	/**
	 * Retrieve all CMB2 instances registered.
	 *
	 * @since  1.X.X
	 * @return CMB2[] Array of all registered cmb2 instances.
	 */
	public static function get_all() {
		return self::$cmb2_instances;
	}

	/**
	 * Retrieve all CMB2 instances that have the specified property set.
	 *
	 * @since  2.4.0
	 * @param  string $property Property name.
	 * @param  mixed  $compare  (Optional) The value to compare.
	 * @return CMB2[]           Array of matching cmb2 instances.
	 */
	public static function get_by( $property, $compare = 'nocompare' ) {
		$boxes = array();

		foreach ( self::$cmb2_instances as $cmb_id => $cmb ) {
			$prop = $cmb->prop( $property );

			if ( 'nocompare' === $compare ) {
				if ( ! empty( $prop ) ) {
					$boxes[ $cmb_id ] = $cmb;
				}
				continue;
			}

			if ( $compare === $prop ) {
				$boxes[ $cmb_id ] = $cmb;
			}
		}

		return $boxes;
	}

	/**
	 * Retrieve all CMB2 instances as long as they do not include the ignored property.
	 *
	 * @since  2.4.0
	 * @param  string $property  Property name.
	 * @param  mixed  $to_ignore The value to ignore.
	 * @return CMB2[]            Array of matching cmb2 instances.
	 */
	public static function filter_by( $property, $to_ignore = null ) {
		$boxes = array();

		foreach ( self::$cmb2_instances as $cmb_id => $cmb ) {

			if ( $to_ignore === $cmb->prop( $property ) ) {
				continue;
			}

			$boxes[ $cmb_id ] = $cmb;
		}

		return $boxes;
	}

	/**
	 * Deprecated and left for back-compatibility. The original `get_by_property`
	 * method was misnamed and never actually used by CMB2 core.
	 *
	 * @since  2.2.3
	 *
	 * @param  string $property  Property name.
	 * @param  mixed  $to_ignore The value to ignore.
	 * @return CMB2[]            Array of matching cmb2 instances.
	 */
	public static function get_by_property( $property, $to_ignore = null ) {
		_deprecated_function( __METHOD__, '2.4.0', 'CMB2_Boxes::filter_by()' );
		return self::filter_by( $property );
	}
}
PK     ƒŠU]Áv�•2  •2  0  vendor/cmb2/cmb2/includes/CMB2_Field_Display.phpnu „[µü¤        <?php
/**
 * CMB2 field display base.
 *
 * @since 2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
#[AllowDynamicProperties] // phpcs:ignore PHPCompatibility.Attributes.NewAttributes -- Back-compat: allow dynamic props (PHP 8.2+) on this class + subclasses.
class CMB2_Field_Display {

	/**
	 * A CMB field object
	 *
	 * @var   CMB2_Field object
	 * @since 2.2.2
	 */
	public $field;

	/**
	 * The CMB field object's value.
	 *
	 * @var   mixed
	 * @since 2.2.2
	 */
	public $value;

	/**
	 * Get the corresponding display class for the field type.
	 *
	 * @since  2.2.2
	 * @param  CMB2_Field $field Requested field type.
	 * @return CMB2_Field_Display
	 */
	public static function get( CMB2_Field $field ) {
		$fieldtype          = $field->type();
		$display_class_name = $field->args( 'display_class' );

		if ( empty( $display_class_name ) ) {
			switch ( $fieldtype ) {
				case 'text_url':
					$display_class_name = 'CMB2_Display_Text_Url';
					break;
				case 'text_money':
					$display_class_name = 'CMB2_Display_Text_Money';
					break;
				case 'colorpicker':
					$display_class_name = 'CMB2_Display_Colorpicker';
					break;
				case 'checkbox':
					$display_class_name = 'CMB2_Display_Checkbox';
					break;
				case 'wysiwyg':
				case 'textarea_small':
					$display_class_name = 'CMB2_Display_Textarea';
					break;
				case 'textarea_code':
					$display_class_name = 'CMB2_Display_Textarea_Code';
					break;
				case 'text_time':
					$display_class_name = 'CMB2_Display_Text_Time';
					break;
				case 'text_date':
				case 'text_date_timestamp':
				case 'text_datetime_timestamp':
					$display_class_name = 'CMB2_Display_Text_Date';
					break;
				case 'text_datetime_timestamp_timezone':
					$display_class_name = 'CMB2_Display_Text_Date_Timezone';
					break;
				case 'select':
				case 'radio':
				case 'radio_inline':
					$display_class_name = 'CMB2_Display_Select';
					break;
				case 'multicheck':
				case 'multicheck_inline':
					$display_class_name = 'CMB2_Display_Multicheck';
					break;
				case 'taxonomy_radio':
				case 'taxonomy_radio_inline':
				case 'taxonomy_select':
				case 'taxonomy_select_hierarchical':
				case 'taxonomy_radio_hierarchical':
					$display_class_name = 'CMB2_Display_Taxonomy_Radio';
					break;
				case 'taxonomy_multicheck':
				case 'taxonomy_multicheck_inline':
				case 'taxonomy_multicheck_hierarchical':
					$display_class_name = 'CMB2_Display_Taxonomy_Multicheck';
					break;
				case 'file':
					$display_class_name = 'CMB2_Display_File';
					break;
				case 'file_list':
					$display_class_name = 'CMB2_Display_File_List';
					break;
				case 'oembed':
					$display_class_name = 'CMB2_Display_oEmbed';
					break;
				default:
					$display_class_name = __CLASS__;
					break;
			}// End switch.
		}

		if ( has_action( "cmb2_display_class_{$fieldtype}" ) ) {

			/**
			 * Filters the custom field display class used for displaying the field. Class is required to extend CMB2_Type_Base.
			 *
			 * The dynamic portion of the hook name, $fieldtype, refers to the (custom) field type.
			 *
			 * @since 2.2.4
			 *
			 * @param string $display_class_name The custom field display class to use.
			 * @param object $field              The `CMB2_Field` object.
			 */
			$display_class_name = apply_filters( "cmb2_display_class_{$fieldtype}", $display_class_name, $field );
		}

		return new $display_class_name( $field );
	}

	/**
	 * Setup our class vars
	 *
	 * @since 2.2.2
	 * @param CMB2_Field $field A CMB2 field object.
	 */
	public function __construct( CMB2_Field $field ) {
		$this->field = $field;
		$this->value = $this->field->value;
	}

	/**
	 * Catchall method if field's 'display_cb' is NOT defined, or field type does
	 * not have a corresponding display method
	 *
	 * @since 2.2.2
	 */
	public function display() {
		// If repeatable.
		if ( $this->field->args( 'repeatable' ) ) {

			// And has a repeatable value.
			if ( is_array( $this->field->value ) ) {

				// Then loop and output.
				echo '<ul class="cmb2-' . esc_attr( sanitize_html_class( str_replace( '_', '-', $this->field->type() ) ) ) . '">';
				foreach ( $this->field->value as $val ) {
					$this->value = $val;
					echo '<li>', $this->_display(), '</li>';
				}
				echo '</ul>';
			}
		} else {
			$this->_display();
		}
	}

	/**
	 * Default fallback display method.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		print_r( $this->value );
	}
}

class CMB2_Display_Text_Url extends CMB2_Field_Display {
	/**
	 * Display url value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo make_clickable( esc_url( $this->value ) );
	}
}

class CMB2_Display_Text_Money extends CMB2_Field_Display {
	/**
	 * Display text_money value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		$this->value = $this->value ? $this->value : '0';
		echo ( ! $this->field->get_param_callback_result( 'before_field' ) ? '$' : ' ' ), $this->value;
	}
}

class CMB2_Display_Colorpicker extends CMB2_Field_Display {
	/**
	 * Display color picker value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo '<span class="cmb2-colorpicker-swatch"><span style="background-color:', esc_attr( $this->value ), '"></span> ', esc_html( $this->value ), '</span>';
	}
}

class CMB2_Display_Checkbox extends CMB2_Field_Display {
	/**
	 * Display multicheck value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo $this->value === 'on' ? 'on' : 'off';
	}
}

class CMB2_Display_Select extends CMB2_Field_Display {
	/**
	 * Display select value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		$options = $this->field->options();

		$fallback = $this->field->args( 'show_option_none' );
		if ( ! $fallback && isset( $options[''] ) ) {
			$fallback = $options[''];
		}
		if ( ! $this->value && $fallback ) {
			echo $fallback;
		} elseif ( isset( $options[ $this->value ] ) ) {
			echo $options[ $this->value ];
		} else {
			echo esc_attr( $this->value );
		}
	}
}

class CMB2_Display_Multicheck extends CMB2_Field_Display {
	/**
	 * Display multicheck value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		if ( empty( $this->value ) || ! is_array( $this->value ) ) {
			return;
		}

		$options = $this->field->options();

		$output = array();
		foreach ( $this->value as $val ) {
			if ( isset( $options[ $val ] ) ) {
				$output[] = $options[ $val ];
			} else {
				$output[] = esc_attr( $val );
			}
		}

		echo implode( ', ', $output );
	}
}

class CMB2_Display_Textarea extends CMB2_Field_Display {
	/**
	 * Display textarea value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo wpautop( wp_kses_post( $this->value ) );
	}
}

class CMB2_Display_Textarea_Code extends CMB2_Field_Display {
	/**
	 * Display textarea_code value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo '<xmp class="cmb2-code">' . print_r( $this->value, true ) . '</xmp>';
	}
}

class CMB2_Display_Text_Time extends CMB2_Field_Display {
	/**
	 * Display text_time value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo $this->field->get_timestamp_format( 'time_format', $this->value );
	}
}

class CMB2_Display_Text_Date extends CMB2_Field_Display {
	/**
	 * Display text_date value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		echo $this->field->get_timestamp_format( 'date_format', $this->value );
	}
}

class CMB2_Display_Text_Date_Timezone extends CMB2_Field_Display {
	/**
	 * Display text_datetime_timestamp_timezone value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		if ( empty( $this->value ) ) {
			return;
		}

		$datetime = CMB2_Utils::get_datetime_from_value( $this->value );
		if ( ! $datetime || ! $datetime instanceof DateTime ) {
			return;
		}

		$date     = $datetime->format( stripslashes( $this->field->args( 'date_format' ) ) );
		$time     = $datetime->format( stripslashes( $this->field->args( 'time_format' ) ) );
		$timezone = $datetime->getTimezone()->getName();

		echo $date;
		if ( $time ) {
			echo ' ' . $time;
		}
		if ( $timezone ) {
			echo ', ' . $timezone;
		}
	}
}

class CMB2_Display_Taxonomy_Radio extends CMB2_Field_Display {
	/**
	 * Display single taxonomy value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		$taxonomy = $this->field->args( 'taxonomy' );
		$types    = new CMB2_Types( $this->field );
		$type     = $types->get_new_render_type( $this->field->type(), 'CMB2_Type_Taxonomy_Radio' );
		$terms    = $type->get_object_terms();
		$term     = false;

		if ( is_wp_error( $terms ) || empty( $terms ) && ( $default = $this->field->get_default() ) ) {
			$term = get_term_by( 'slug', $default, $taxonomy );
		} elseif ( ! empty( $terms ) ) {
			$term = $terms[ key( $terms ) ];
		}

		if ( $term ) {
			$link = get_edit_term_link( $term->term_id, $taxonomy );
			echo '<a href="', esc_url( $link ? $link : '' ), '">', esc_html( $term->name ), '</a>';
		}
	}
}

class CMB2_Display_Taxonomy_Multicheck extends CMB2_Field_Display {
	/**
	 * Display taxonomy values.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		$taxonomy = $this->field->args( 'taxonomy' );
		$types    = new CMB2_Types( $this->field );
		$type     = $types->get_new_render_type( $this->field->type(), 'CMB2_Type_Taxonomy_Multicheck' );
		$terms    = $type->get_object_terms();

		if ( is_wp_error( $terms ) || empty( $terms ) && ( $default = $this->field->get_default() ) ) {
			$terms = array();
			if ( is_array( $default ) ) {
				foreach ( $default as $slug ) {
					$terms[] = get_term_by( 'slug', $slug, $taxonomy );
				}
			} else {
				$terms[] = get_term_by( 'slug', $default, $taxonomy );
			}
		}

		if ( is_array( $terms ) ) {

			$links = array();
			foreach ( $terms as $term ) {
				$link = get_edit_term_link( $term->term_id, $taxonomy );
				$links[] = '<a href="' . esc_url( $link ? $link : '' ) . '">' . esc_html( $term->name ) . '</a>';
			}
			// Then loop and output.
			echo '<div class="cmb2-taxonomy-terms-', esc_attr( sanitize_html_class( $taxonomy ) ), '">';
			echo implode( ', ', $links );
			echo '</div>';
		}
	}
}

class CMB2_Display_File extends CMB2_Field_Display {
	/**
	 * Display file value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		if ( empty( $this->value ) ) {
			return;
		}

		$this->value = esc_url_raw( $this->value );

		$types = new CMB2_Types( $this->field );
		$type  = $types->get_new_render_type( $this->field->type(), 'CMB2_Type_File_Base' );

		$id = $this->field->get_field_clone( array(
			'id' => $this->field->_id( '', false ) . '_id',
		) )->escaped_value( 'absint' );

		$this->file_output( $this->value, $id, $type );
	}

	protected function file_output( $url_value, $id, CMB2_Type_File_Base $field_type ) {
		// If there is no ID saved yet, try to get it from the url.
		if ( $url_value && ! $id ) {
			$id = CMB2_Utils::image_id_from_url( esc_url_raw( $url_value ) );
		}

		if ( $field_type->is_valid_img_ext( $url_value ) ) {
			$img_size = $this->field->args( 'preview_size' );

			if ( $id ) {
				$image = wp_get_attachment_image( $id, $img_size, null, array(
					'class' => 'cmb-image-display',
				) );
			} else {
				$size = is_array( $img_size ) ? $img_size[0] : 200;
				$image = '<img class="cmb-image-display" style="max-width: ' . absint( $size ) . 'px; width: 100%; height: auto;" src="' . esc_url( $url_value ) . '" alt="" />';
			}

			echo $image;

		} else {

			printf( '<div class="file-status"><span>%1$s <strong><a href="%2$s">%3$s</a></strong></span></div>',
				esc_html( $field_type->_text( 'file_text', __( 'File:', 'cmb2' ) ) ),
				esc_url( $url_value ),
				esc_html( CMB2_Utils::get_file_name_from_path( $url_value ) )
			);

		}
	}
}

class CMB2_Display_File_List extends CMB2_Display_File {
	/**
	 * Display file_list value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		if ( empty( $this->value ) || ! is_array( $this->value ) ) {
			return;
		}

		$types = new CMB2_Types( $this->field );
		$type  = $types->get_new_render_type( $this->field->type(), 'CMB2_Type_File_Base' );

		echo '<ul class="cmb2-display-file-list">';
		foreach ( $this->value as $id => $fullurl ) {
			echo '<li>', $this->file_output( esc_url_raw( $fullurl ), $id, $type ), '</li>';
		}
		echo '</ul>';
	}
}

// phpcs:ignore PEAR.NamingConventions.ValidClassName.Invalid -- "oEmbed" is the correct brand casing; renaming this public class is a BC break.
class CMB2_Display_oEmbed extends CMB2_Field_Display {
	/**
	 * Display oembed value.
	 *
	 * @since 2.2.2
	 */
	protected function _display() {
		if ( ! $this->value ) {
			return;
		}

		cmb2_do_oembed( array(
			'url'         => $this->value,
			'object_id'   => $this->field->object_id,
			'object_type' => $this->field->object_type,
			'oembed_args' => array(
				'width' => '300',
			),
			'field_id'    => $this->field->id(),
		) );
	}
}
PK     ƒŠU]S›ÂvÃm  Ãm  )  vendor/cmb2/cmb2/includes/CMB2_Hookup.phpnu „[µü¤        <?php
/**
 * Handles hooking CMB2 forms/metaboxes into the post/attachement/user screens
 * and handles hooking in and saving those fields.
 *
 * @since  2.0.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Hookup extends CMB2_Hookup_Base {

	/**
	 * Only allow JS registration once
	 *
	 * @var   bool
	 * @since 2.0.7
	 */
	protected static $js_registration_done = false;

	/**
	 * Only allow CSS registration once
	 *
	 * @var   bool
	 * @since 2.0.7
	 */
	protected static $css_registration_done = false;

	/**
	 * CMB taxonomies array for term meta
	 *
	 * @var   array
	 * @since 2.2.0
	 */
	protected $taxonomies = array();

	/**
	 * Custom field columns.
	 *
	 * @var   array
	 * @since 2.2.2
	 */
	protected $columns = array();

	/**
	 * Array of CMB2_Options_Hookup instances if options page metabox.
	 *
	 * @var   CMB2_Options_Hookup[]|null
	 * @since 2.2.5
	 */
	protected $options_hookup = null;

	/**
	 * A functionalized constructor, used for the hookup action callbacks.
	 *
	 * @since  2.2.6
	 *
	 * @param  CMB2 $cmb The CMB2 object to hookup.
	 *
	 * @return CMB2_Hookup_Base $hookup The hookup object.
	 */
	public static function maybe_init_and_hookup( CMB2 $cmb ) {
		if ( $cmb->prop( 'hookup' ) ) {

			$hookup = new self( $cmb );

			// Hook in the hookup... how meta.
			return $hookup->universal_hooks();
		}

		return false;
	}

	public function universal_hooks() {
		foreach ( get_class_methods( 'CMB2_Show_Filters' ) as $filter ) {
			add_filter( 'cmb2_show_on', array( 'CMB2_Show_Filters', $filter ), 10, 3 );
		}

		if ( is_admin() ) {
			// Register our scripts and styles for cmb.
			$this->once( 'admin_enqueue_scripts', array( __CLASS__, 'register_scripts' ), 8 );
			$this->once( 'admin_enqueue_scripts', array( $this, 'do_scripts' ) );

			$this->maybe_enqueue_column_display_styles();

			switch ( $this->object_type ) {
				case 'post':
					return $this->post_hooks();
				case 'comment':
					return $this->comment_hooks();
				case 'user':
					return $this->user_hooks();
				case 'term':
					return $this->term_hooks();
				case 'options-page':
					return $this->options_page_hooks();

			}
		}

		do_action( 'cmb2_init_hooks', $this );

		return $this;
	}

	public function post_hooks() {

		// Fetch the context we set in our call.
		$context = $this->cmb->prop( 'context' ) ? $this->cmb->prop( 'context' ) : 'normal';

		// Call the proper hook based on the context provided.
		switch ( $context ) {

			case 'form_top':
				add_action( 'edit_form_top', array( $this, 'add_context_metaboxes' ) );
				break;

			case 'before_permalink':
				add_action( 'edit_form_before_permalink', array( $this, 'add_context_metaboxes' ) );
				break;

			case 'after_title':
				add_action( 'edit_form_after_title', array( $this, 'add_context_metaboxes' ) );
				break;

			case 'after_editor':
				add_action( 'edit_form_after_editor', array( $this, 'add_context_metaboxes' ) );
				break;

			default:
				add_action( 'add_meta_boxes', array( $this, 'add_metaboxes' ) );
		}

		add_action( 'add_meta_boxes', array( $this, 'remove_default_tax_metaboxes' ) );
		add_action( 'add_attachment', array( $this, 'save_post' ) );
		add_action( 'edit_attachment', array( $this, 'save_post' ) );
		add_action( 'save_post', array( $this, 'save_post' ), 10, 2 );

		if ( $this->cmb->has_columns ) {
			foreach ( $this->cmb->box_types() as $post_type ) {
				add_filter( "manage_{$post_type}_posts_columns", array( $this, 'register_column_headers' ) );
				add_action( "manage_{$post_type}_posts_custom_column", array( $this, 'column_display' ), 10, 2 );
				add_filter( "manage_edit-{$post_type}_sortable_columns", array( $this, 'columns_sortable' ) );
				add_action( 'pre_get_posts', array( $this, 'columns_sortable_orderby' ) );
			}
		}

		return $this;
	}

	public function comment_hooks() {
		add_action( 'add_meta_boxes_comment', array( $this, 'add_metaboxes' ) );
		add_action( 'edit_comment', array( $this, 'save_comment' ) );

		if ( $this->cmb->has_columns ) {
			add_filter( 'manage_edit-comments_columns', array( $this, 'register_column_headers' ) );
			add_action( 'manage_comments_custom_column', array( $this, 'column_display' ), 10, 3 );
			add_filter( 'manage_edit-comments_sortable_columns', array( $this, 'columns_sortable' ) );
			add_action( 'pre_get_posts', array( $this, 'columns_sortable_orderby' ) );
		}

		return $this;
	}

	public function user_hooks() {
		$priority = $this->get_priority();

		add_action( 'show_user_profile', array( $this, 'user_metabox' ), $priority );
		add_action( 'edit_user_profile', array( $this, 'user_metabox' ), $priority );
		add_action( 'user_new_form', array( $this, 'user_new_metabox' ), $priority );

		add_action( 'personal_options_update', array( $this, 'save_user' ) );
		add_action( 'edit_user_profile_update', array( $this, 'save_user' ) );
		add_action( 'user_register', array( $this, 'save_user' ) );

		if ( $this->cmb->has_columns ) {
			add_filter( 'manage_users_columns', array( $this, 'register_column_headers' ) );
			add_filter( 'manage_users_custom_column', array( $this, 'return_column_display' ), 10, 3 );
			add_filter( 'manage_users_sortable_columns', array( $this, 'columns_sortable' ) );
			add_action( 'pre_get_posts', array( $this, 'columns_sortable_orderby' ) );
		}

		return $this;
	}

	public function term_hooks() {
		if ( ! function_exists( 'get_term_meta' ) ) {
			wp_die( esc_html__( 'Term Metadata is a WordPress 4.4+ feature. Please upgrade your WordPress install.', 'cmb2' ) );
		}

		if ( ! $this->cmb->prop( 'taxonomies' ) ) {
			wp_die( esc_html__( 'Term metaboxes configuration requires a "taxonomies" parameter.', 'cmb2' ) );
		}

		$this->taxonomies = (array) $this->cmb->prop( 'taxonomies' );
		$show_on_term_add = $this->cmb->prop( 'new_term_section' );
		$priority         = $this->get_priority( 8 );

		foreach ( $this->taxonomies as $taxonomy ) {
			// Display our form data.
			add_action( "{$taxonomy}_edit_form", array( $this, 'term_metabox' ), $priority, 2 );

			$show_on_add = is_array( $show_on_term_add )
				? in_array( $taxonomy, $show_on_term_add )
				: (bool) $show_on_term_add;

			/**
			 * Filter to determine if the term's fields should show in the "Add term" section.
			 *
			 * The dynamic portion of the hook name, $cmb_id, is the metabox id.
			 *
			 * @param bool   $show_on_add Default is the value of the new_term_section cmb parameter.
			 * @param object $cmb         The CMB2 instance
			 */
			$show_on_add = apply_filters( "cmb2_show_on_term_add_form_{$this->cmb->cmb_id}", $show_on_add, $this->cmb );

			// Display form in add-new section (unless specified not to).
			if ( $show_on_add ) {
				add_action( "{$taxonomy}_add_form_fields", array( $this, 'term_metabox' ), $priority, 2 );
			}

			if ( $this->cmb->has_columns ) {
				add_filter( "manage_edit-{$taxonomy}_columns", array( $this, 'register_column_headers' ) );
				add_filter( "manage_{$taxonomy}_custom_column", array( $this, 'return_column_display' ), 10, 3 );
				add_filter( "manage_edit-{$taxonomy}_sortable_columns", array( $this, 'columns_sortable' ) );
				add_action( 'pre_get_posts', array( $this, 'columns_sortable_orderby' ) );
			}
		}

		add_action( 'created_term', array( $this, 'save_term' ), 10, 3 );
		add_action( 'edited_terms', array( $this, 'save_term' ), 10, 2 );
		add_action( 'delete_term', array( $this, 'delete_term' ), 10, 3 );

		return $this;
	}

	public function options_page_hooks() {
		$option_keys = $this->cmb->options_page_keys();

		if ( ! empty( $option_keys ) ) {
			foreach ( $option_keys as $option_key ) {
				$this->options_hookup[ $option_key ] = new CMB2_Options_Hookup( $this->cmb, $option_key );
				$this->options_hookup[ $option_key ]->hooks();
			}
		}

		return $this;
	}

	/**
	 * Registers styles for CMB2
	 *
	 * @since 2.0.7
	 */
	protected static function register_styles() {
		if ( self::$css_registration_done ) {
			return;
		}

		// Only use minified files if SCRIPT_DEBUG is off.
		$min   = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
		$front = is_admin() ? '' : '-front';
		$rtl   = is_rtl() ? '-rtl' : '';

		/**
		 * Filters the registered style dependencies for the cmb2 stylesheet.
		 *
		 * @param array $dependencies The registered style dependencies for the cmb2 stylesheet.
		 */
		$dependencies = apply_filters( 'cmb2_style_dependencies', array() );
		wp_register_style( 'cmb2-styles', CMB2_Utils::url( "css/cmb2{$front}{$rtl}{$min}.css" ), $dependencies );
		wp_register_style( 'cmb2-display-styles', CMB2_Utils::url( "css/cmb2-display{$rtl}{$min}.css" ), $dependencies );

		self::$css_registration_done = true;
	}

	/**
	 * Registers scripts for CMB2
	 *
	 * @since  2.0.7
	 */
	protected static function register_js() {
		if ( self::$js_registration_done ) {
			return;
		}

		$hook = is_admin() ? 'admin_footer' : 'wp_footer';
		add_action( $hook, array( 'CMB2_JS', 'enqueue' ), 8 );

		self::$js_registration_done = true;
	}

	/**
	 * Registers scripts and styles for CMB2
	 *
	 * @since  1.0.0
	 */
	public static function register_scripts() {
		self::register_styles();
		self::register_js();
	}

	/**
	 * Enqueues scripts and styles for CMB2 in admin_head.
	 *
	 * @since 1.0.0
	 *
	 * @param string $hook Current hook for the admin page.
	 */
	public function do_scripts( $hook ) {
		$should_pre_enqueue = in_array( $hook, array(
			'post.php',
			'post-new.php',
			'page-new.php',
			'page.php',
			'comment.php',
			'edit-tags.php',
			'term.php',
			'user-new.php',
			'profile.php',
			'user-edit.php',
		), true );

		/**
		 * Filter to determine if CMB2 should be pre-enqueued on the current page.
		 *
		 * `show_form_for_type` will have us covered if we miss something here, but may be a
		 * flash of unstyled content.
		 *
		 * @param bool   $should_pre_enqueue Whether CMB2 should be pre-enqueued on the current page.
		 * @param string $hook               The current hook for the admin page.
		 * @param object $cmb                The CMB2 object.
		 */
		$should_pre_enqueue = apply_filters( 'cmb2_should_pre_enqueue', $should_pre_enqueue, $hook, $this );

		// only pre-enqueue our scripts/styles on the proper pages
		// show_form_for_type will have us covered if we miss something here.
		if ( $should_pre_enqueue ) {
			if ( $this->cmb->prop( 'cmb_styles' ) ) {
				self::enqueue_cmb_css();
			}
			if ( $this->cmb->prop( 'enqueue_js' ) ) {
				self::enqueue_cmb_js();
			}
		}
	}

	/**
	 * Register the CMB2 field column headers.
	 *
	 * @since 2.2.2
	 *
	 * @param array $columns Array of columns available for the admin page.
	 */
	public function register_column_headers( $columns ) {
		foreach ( $this->cmb->prop( 'fields' ) as $field ) {
			if ( empty( $field['column'] ) ) {
				continue;
			}

			$column = $field['column'];

			if ( false === $column['position'] ) {
				$columns[ $field['id'] ] = $column['name'];
			} else {
				$before = array_slice( $columns, 0, absint( $column['position'] ) );
				$before[ $field['id'] ] = $column['name'];
				$columns = $before + $columns;
			}

			$column['field'] = $field;
			$this->columns[ $field['id'] ] = $column;
		}

		return $columns;
	}

	/**
	 * The CMB2 field column display output.
	 *
	 * @since 2.2.2
	 *
	 * @param string $column_name Current column name.
	 * @param mixed  $object_id Current object ID.
	 */
	public function column_display( $column_name, $object_id ) {
		if ( isset( $this->columns[ $column_name ] ) ) {
			$field = new CMB2_Field( array(
				'field_args'  => $this->columns[ $column_name ]['field'],
				'object_type' => $this->object_type,
				'object_id'   => $this->cmb->object_id( $object_id ),
				'cmb_id'      => $this->cmb->cmb_id,
			) );

			$this->cmb->get_field( $field )->render_column();
		}
	}

	/**
	 * Returns the columns sortable array.
	 *
	 * @since 2.6.1
	 *
	 * @param array $columns An array of sortable columns.
	 *
	 * @return array $columns An array of sortable columns with CMB2 columns.
	 */
	public function columns_sortable( $columns ) {
		foreach ( $this->cmb->prop( 'fields' ) as $field ) {
			if ( ! empty( $field['column'] ) && empty( $field['column']['disable_sortable'] ) ) {
				$columns[ $field['id'] ] = $field['id'];
			}
		}

		return $columns;
	}

	/**
	 * Return the query object to order by custom columns if selected
	 *
	 * @since 2.6.1
	 *
	 * @param object $query Object query from WordPress
	 *
	 * @return void
	 */
	public function columns_sortable_orderby( $query ) {
		if ( ! is_admin() ) {
			return;
		}

		$orderby = $query->get( 'orderby' );

		foreach ( $this->cmb->prop( 'fields' ) as $field ) {
			if (
				empty( $field['column'] )
				|| ! empty( $field['column']['disable_sortable'] )
				|| $field['id'] !== $orderby
			) {
				continue;
			}

			$query->set( 'meta_key', $field['id'] );

			$type = $field['type'];

			if ( ! empty( $field['attributes']['type'] ) ) {
				switch ( $field['attributes']['type'] ) {
					case 'number':
					case 'date':
						$type = $field['attributes']['type'];
						break;
					case 'range':
						$type = 'number';
						break;
				}
			}

			switch ( $type ) {
				case 'number':
				case 'text_date_timestamp':
				case 'text_datetime_timestamp':
				case 'text_money':
					$query->set( 'orderby', 'meta_value_num' );
					break;
				case 'text_time':
					$query->set( 'orderby', 'meta_value_time' );
					break;
				case 'text_date':
					$query->set( 'orderby', 'meta_value_date' );
					break;

				default:
					$query->set( 'orderby', 'meta_value' );
					break;
			}
		}
	}

	/**
	 * Returns the column display.
	 *
	 * @since 2.2.2
	 */
	public function return_column_display( $empty, $custom_column, $object_id ) {
		ob_start();
		$this->column_display( $custom_column, $object_id );
		$column = ob_get_clean();

		return $column ? $column : $empty;
	}

	/**
	 * Output the CMB2 box/fields in an alternate context (not in a standard metabox area).
	 *
	 * @since 2.2.4
	 */
	public function add_context_metaboxes() {

		if ( ! $this->show_on() ) {
			return;
		}

		$page = get_current_screen()->id;

		foreach ( $this->cmb->box_types() as $object_type ) {
			$screen = convert_to_screen( $object_type );

			// If we're on the right post-type/object...
			if ( isset( $screen->id ) && $screen->id === $page ) {

				// Show the box.
				$this->output_context_metabox();
			}
		}
	}

	/**
	 * Output the CMB2 box/fields in an alternate context (not in a standard metabox area).
	 *
	 * @since 2.2.4
	 */
	public function output_context_metabox() {
		$title = $this->cmb->prop( 'title' );

		/*
		 * To keep from outputting the open/close markup, do not include
		 * a 'title' property in your metabox registration array.
		 *
		 * To output the fields 'naked' (without a postbox wrapper/style), then
		 * add a `'remove_box_wrap' => true` to your metabox registration array.
		 */
		$add_wrap = ! empty( $title ) || ! $this->cmb->prop( 'remove_box_wrap' );
		$add_handle = $add_wrap && ! empty( $title );

		// Open the context-box wrap.
		$this->context_box_title_markup_open( $add_handle );

		// Show the form fields.
		$this->cmb->show_form();

		// Close the context-box wrap.
		$this->context_box_title_markup_close( $add_handle );
	}

	/**
	 * Output the opening markup for a context box.
	 *
	 * @since 2.2.4
	 * @param bool $add_handle Whether to add the metabox handle and opening div for .inside.
	 */
	public function context_box_title_markup_open( $add_handle = true ) {
		$cmb_id = $this->cmb->cmb_id;
		$title  = $this->cmb->prop( 'title' );
		$screen = get_current_screen();
		$page   = $screen->id;
		$is_55  = CMB2_Utils::wp_at_least( '5.5' );

		add_filter( "postbox_classes_{$page}_{$cmb_id}", array( $this, 'postbox_classes' ) );

		$hidden_class = '';

		if ( $is_55 ) {

			// get_hidden_meta_boxes() doesn't apply in the block editor.
			$is_hidden = ! $screen->is_block_editor() && in_array( $cmb_id, get_hidden_meta_boxes( $screen ), true );

			$hidden_class = $is_hidden
				? ' hide-if-js'
				: '';
		}

		$toggle_button = sprintf(
			'<button type="button" class="handlediv button-link" aria-expanded="true"><span class="screen-reader-text">%s</span><span class="toggle-indicator" aria-hidden="true"></span></button>',
			/* translators: %s: name of CMB2 box (panel) */
			sprintf( __( 'Toggle panel: %s' ), $title )
		);
		$title_tag = '<h2 class="hndle"><span>' . esc_attr( $title ) . '</span></h2>' . "\n";

		echo '<div id="' . $cmb_id . '" class="' . postbox_classes( $cmb_id, $page ) . $hidden_class . '">' . "\n";

		if ( $add_handle ) {

			if ( $is_55 ) {
				echo '<div class="postbox-header">';
				echo $title_tag;

				echo '<div class="handle-actions hide-if-no-js">';
				echo $toggle_button;
				echo '</div>';

				echo '</div>' . "\n";

			} else {
				echo $toggle_button;
				echo $title_tag;
			}

			echo '<div class="inside">' . "\n";
		}
	}

	/**
	 * Output the closing markup for a context box.
	 *
	 * @since 2.2.4
	 * @param bool $add_inside_close Whether to add closing div for .inside.
	 */
	public function context_box_title_markup_close( $add_inside_close = true ) {

		// Load the closing divs for a title box.
		if ( $add_inside_close ) {
			echo '</div>' . "\n"; // .inside
		}

		echo '</div>' . "\n"; // .context-box
	}

	/**
	 * Add metaboxes (to 'post' or 'comment' object types)
	 *
	 * @since 1.0.0
	 */
	public function add_metaboxes() {

		if ( ! $this->show_on() ) {
			return;
		}

		/*
		 * To keep from registering an actual post-screen metabox,
		 * omit the 'title' property from the metabox registration array.
		 *
		 * (WordPress will not display metaboxes without titles anyway)
		 *
		 * This is a good solution if you want to handle outputting your
		 * metaboxes/fields elsewhere in the post-screen.
		 */
		if ( ! $this->cmb->prop( 'title' ) ) {
			return;
		}

		$page = get_current_screen()->id;
		add_filter( "postbox_classes_{$page}_{$this->cmb->cmb_id}", array( $this, 'postbox_classes' ) );

		foreach ( $this->cmb->box_types() as $object_type ) {
			add_meta_box(
				$this->cmb->cmb_id,
				$this->cmb->prop( 'title' ),
				array( $this, 'metabox_callback' ),
				$object_type,
				$this->cmb->prop( 'context' ),
				$this->cmb->prop( 'priority' ),
				$this->cmb->prop( 'mb_callback_args' )
			);
		}
	}

	/**
	 * Remove the specified default taxonomy metaboxes for a post-type.
	 *
	 * @since 2.2.3
	 *
	 */
	public function remove_default_tax_metaboxes() {
		$to_remove = array_filter( (array) $this->cmb->tax_metaboxes_to_remove, 'taxonomy_exists' );
		if ( empty( $to_remove ) ) {
			return;
		}

		foreach ( $this->cmb->box_types() as $post_type ) {
			foreach ( $to_remove as $taxonomy ) {
				$mb_id = is_taxonomy_hierarchical( $taxonomy ) ? "{$taxonomy}div" : "tagsdiv-{$taxonomy}";
				remove_meta_box( $mb_id, $post_type, 'side' );
			}
		}
	}

	/**
	 * Modify metabox postbox classes.
	 *
	 * @since 2.2.4
	 * @param  array $classes Array of classes.
	 * @return array           Modified array of classes
	 */
	public function postbox_classes( $classes ) {
		if ( $this->cmb->prop( 'closed' ) && ! in_array( 'closed', $classes ) ) {
			$classes[] = 'closed';
		}

		if ( $this->cmb->is_alternate_context_box() ) {
			$classes = $this->alternate_context_postbox_classes( $classes );
		} else {
			$classes[] = 'cmb2-postbox';
		}

		return $classes;
	}

	/**
	 * Modify metabox altnernate context postbox classes.
	 *
	 * @since 2.2.4
	 * @param  array $classes Array of classes.
	 * @return array           Modified array of classes
	 */
	protected function alternate_context_postbox_classes( $classes ) {
		$classes[] = 'context-box';
		$classes[] = 'context-' . $this->cmb->prop( 'context' ) . '-box';

		if ( in_array( $this->cmb->cmb_id, get_hidden_meta_boxes( get_current_screen() ) ) ) {
			$classes[] = 'hide-if-js';
		}

		$add_wrap = $this->cmb->prop( 'title' ) || ! $this->cmb->prop( 'remove_box_wrap' );

		if ( $add_wrap ) {
			$classes[] = 'cmb2-postbox postbox';
		} else {
			$classes[] = 'cmb2-no-box-wrap';
		}

		return $classes;
	}

	/**
	 * Display metaboxes for a post or comment object.
	 *
	 * @since  1.0.0
	 */
	public function metabox_callback() {
		$object_id = 'comment' === $this->object_type ? get_comment_ID() : get_the_ID();
		$this->cmb->show_form( $object_id, $this->object_type );
	}

	/**
	 * Display metaboxes for new user page.
	 *
	 * @since 1.0.0
	 *
	 * @param mixed $section User section metabox.
	 */
	public function user_new_metabox( $section ) {
		if ( $section === $this->cmb->prop( 'new_user_section' ) ) {
			$object_id = $this->cmb->object_id();
			$this->cmb->object_id( isset( $_REQUEST['user_id'] ) ? $_REQUEST['user_id'] : $object_id );
			$this->user_metabox();
		}
	}

	/**
	 * Display metaboxes for a user object.
	 *
	 * @since  1.0.0
	 */
	public function user_metabox() {
		$this->show_form_for_type( 'user' );
	}

	/**
	 * Display metaboxes for a taxonomy term object.
	 *
	 * @since  2.2.0
	 */
	public function term_metabox() {
		$this->show_form_for_type( 'term' );
	}

	/**
	 * Display metaboxes for an object type.
	 *
	 * @since 2.2.0
	 * @param  string $type Object type.
	 * @return void
	 */
	public function show_form_for_type( $type ) {
		if ( $type != $this->object_type ) {
			return;
		}

		if ( ! $this->show_on() ) {
			return;
		}

		if ( $this->cmb->prop( 'cmb_styles' ) ) {
			self::enqueue_cmb_css();
		}
		if ( $this->cmb->prop( 'enqueue_js' ) ) {
			self::enqueue_cmb_js();
		}

		$this->cmb->show_form( 0, $type );
	}

	/**
	 * Determines if metabox should be shown in current context.
	 *
	 * @since 2.0.0
	 * @return bool Whether metabox should be added/shown.
	 */
	public function show_on() {
		// If metabox is requesting to be conditionally shown.
		$show = $this->cmb->should_show();

		/**
		 * Filter to determine if metabox should show. Default is true.
		 *
		 * @param array  $show          Default is true, show the metabox.
		 * @param mixed  $meta_box_args Array of the metabox arguments.
		 * @param mixed  $cmb           The CMB2 instance.
		 */
		$show = (bool) apply_filters( 'cmb2_show_on', $show, $this->cmb->meta_box, $this->cmb );

		return $show;
	}

	/**
	 * Get the CMB priority property set to numeric hook priority.
	 *
	 * @since 2.2.0
	 *
	 * @param integer $default Default display hook priority.
	 * @return integer          Hook priority.
	 */
	public function get_priority( $default = 10 ) {
		$priority = $this->cmb->prop( 'priority' );

		if ( ! is_numeric( $priority ) ) {
			switch ( $priority ) {

				case 'high':
					$priority = 5;
					break;

				case 'low':
					$priority = 20;
					break;

				default:
					$priority = $default;
					break;
			}
		}

		return $priority;
	}

	/**
	 * Save data from post metabox
	 *
	 * @since 1.0.0
	 * @param  int   $post_id Post ID.
	 * @param  mixed $post    Post object.
	 * @return void
	 */
	public function save_post( $post_id, $post = false ) {

		$post_type = $post ? $post->post_type : get_post_type( $post_id );

		$do_not_pass_go = (
			! $this->can_save( $post_type )
			// Check user editing permissions.
			|| ( 'page' === $post_type && ! current_user_can( 'edit_page', $post_id ) )
			|| ! current_user_can( 'edit_post', $post_id )
		);

		if ( $do_not_pass_go ) {
			return;
		}

		$this->cmb->save_fields( $post_id, 'post', $_POST );
	}

	/**
	 * Save data from comment metabox.
	 *
	 * @since 2.0.9
	 * @param  int $comment_id Comment ID.
	 * @return void
	 */
	public function save_comment( $comment_id ) {

		$can_edit = current_user_can( 'moderate_comments', $comment_id );

		if ( $this->can_save( get_comment_type( $comment_id ) ) && $can_edit ) {
			$this->cmb->save_fields( $comment_id, 'comment', $_POST );
		}
	}

	/**
	 * Save data from user fields.
	 *
	 * @since 1.0.x
	 * @param  int $user_id User ID.
	 * @return void
	 */
	public function save_user( $user_id ) {
		// check permissions.
		if ( $this->can_save( 'user' ) ) {
			$this->cmb->save_fields( $user_id, 'user', $_POST );
		}
	}

	/**
	 * Save data from term fields
	 *
	 * @since 2.2.0
	 * @param int    $term_id  Term ID.
	 * @param int    $tt_id    Term Taxonomy ID.
	 * @param string $taxonomy Taxonomy.
	 * @return void
	 */
	public function save_term( $term_id, $tt_id, $taxonomy = '' ) {
		$taxonomy = $taxonomy ? $taxonomy : $tt_id;

		// check permissions.
		if ( $this->taxonomy_can_save( $taxonomy ) && $this->can_save( 'term' ) ) {
			$this->cmb->save_fields( $term_id, 'term', $_POST );
		}
	}

	/**
	 * Delete term meta when a term is deleted.
	 *
	 * @since 2.2.0
	 * @param  int    $term_id  Term ID.
	 * @param  int    $tt_id    Term Taxonomy ID.
	 * @param  string $taxonomy Taxonomy.
	 * @return void
	 */
	public function delete_term( $term_id, $tt_id, $taxonomy = '' ) {
		if ( $this->taxonomy_can_save( $taxonomy ) ) {

			$data_to_delete = array();
			foreach ( $this->cmb->prop( 'fields' ) as $field ) {
				$data_to_delete[ $field['id'] ] = '';
			}

			$this->cmb->save_fields( $term_id, 'term', $data_to_delete );
		}
	}

	/**
	 * Determines if the current object is able to be saved.
	 *
	 * @since  2.0.9
	 * @param  string $type Current object type.
	 * @return bool         Whether object can be saved.
	 */
	public function can_save( $type = '' ) {

		$can_save = (
			$this->cmb->prop( 'save_fields' )
			// check nonce.
			&& isset( $_POST[ $this->cmb->nonce() ] )
			&& wp_verify_nonce( $_POST[ $this->cmb->nonce() ], $this->cmb->nonce() )
			// check if autosave.
			&& ! ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
			// get the metabox types & compare it to this type.
			&& ( $type && in_array( $type, $this->cmb->box_types() ) )
			// Don't do updates during a switch-to-blog instance.
			&& ! ( is_multisite() && ms_is_switched() )
		);

		/**
		 * Filter to determine if metabox is allowed to save.
		 *
		 * @param bool   $can_save Whether the current metabox can save.
		 * @param object $cmb      The CMB2 instance.
		 */
		return apply_filters( 'cmb2_can_save', $can_save, $this->cmb );
	}

	/**
	 * Determine if taxonomy of term being modified is cmb2-editable.
	 *
	 * @since 2.2.0
	 *
	 * @param string $taxonomy Taxonomy of term being modified.
	 * @return bool             Whether taxonomy is editable.
	 */
	public function taxonomy_can_save( $taxonomy ) {
		if ( empty( $this->taxonomies ) || ! in_array( $taxonomy, $this->taxonomies ) ) {
			return false;
		}

		$taxonomy_object = get_taxonomy( $taxonomy );
		// Can the user edit this term?
		if ( ! isset( $taxonomy_object->cap ) || ! current_user_can( $taxonomy_object->cap->edit_terms ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Enqueues the 'cmb2-display-styles' if the conditions match (has columns, on the right page, etc).
	 *
	 * @since  2.2.2.1
	 */
	protected function maybe_enqueue_column_display_styles() {
		global $pagenow;
		if (
			$pagenow
			&& $this->cmb->has_columns
			&& $this->cmb->prop( 'cmb_styles' )
			&& in_array( $pagenow, array( 'edit.php', 'users.php', 'edit-comments.php', 'edit-tags.php' ), 1 )
			) {
			self::enqueue_cmb_css( 'cmb2-display-styles' );
		}
	}

	/**
	 * Includes CMB2 styles.
	 *
	 * @since 2.0.0
	 *
	 * @param string $handle CSS handle.
	 * @return mixed
	 */
	public static function enqueue_cmb_css( $handle = 'cmb2-styles' ) {

		/**
		 * Filter to determine if CMB2'S css should be enqueued.
		 *
		 * @param bool $enqueue_css Default is true.
		 */
		if ( ! apply_filters( 'cmb2_enqueue_css', true ) ) {
			return false;
		}

		self::register_styles();

		/*
		 * White list the options as this method can be used as a hook callback
		 * and have a different argument passed.
		 */
		return wp_enqueue_style( 'cmb2-display-styles' === $handle ? $handle : 'cmb2-styles' );
	}

	/**
	 * Includes CMB2 JS.
	 *
	 * @since  2.0.0
	 */
	public static function enqueue_cmb_js() {

		/**
		 * Filter to determine if CMB2'S JS should be enqueued.
		 *
		 * @param bool $enqueue_js Default is true.
		 */
		if ( ! apply_filters( 'cmb2_enqueue_js', true ) ) {
			return false;
		}

		self::register_js();
		return true;
	}

}
PK     ƒŠU]YÎ1$Þ,  Þ,  1  vendor/cmb2/cmb2/includes/CMB2_Options_Hookup.phpnu „[µü¤        <?php
/**
 * Handles hooking CMB2 forms/metaboxes into the post/attachement/user screens
 * and handles hooking in and saving those fields.
 *
 * @since  2.0.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Options_Hookup extends CMB2_Hookup {

	/**
	 * The object type we are performing the hookup for
	 *
	 * @var   string
	 * @since 2.0.9
	 */
	protected $object_type = 'options-page';

	/**
	 * Options page key.
	 *
	 * @var   string
	 * @since 2.2.5
	 */
	protected $option_key = '';

	/**
	 * Constructor
	 *
	 * @since 2.0.0
	 * @param CMB2   $cmb        The CMB2 object to hookup.
	 * @param string $option_key Option key to use.
	 */
	public function __construct( CMB2 $cmb, $option_key ) {
		$this->cmb = $cmb;
		$this->option_key = $option_key;
	}

	public function hooks() {
		if ( empty( $this->option_key ) ) {
			return;
		}

		if ( ! $this->cmb->prop( 'autoload', true ) ) {
			// Disable option autoload if requested.
			add_filter( "cmb2_should_autoload_{$this->option_key}", '__return_false' );
		}

		/**
		 * For WP < 4.7. Ensure the register_setting function exists.
		 */
		if ( ! CMB2_Utils::wp_at_least( '4.7' ) && ! function_exists( 'register_setting' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}

		// Register setting to cmb2 group.
		register_setting( 'cmb2', $this->option_key );

		// Handle saving the data.
		add_action( 'admin_post_' . $this->option_key, array( $this, 'save_options' ) );

		// Optionally network_admin_menu.
		$hook = $this->cmb->prop( 'admin_menu_hook' );

		// Hook in to add our menu.
		add_action( $hook, array( $this, 'options_page_menu_hooks' ), $this->get_priority() );

		// If in the network admin, need to use get/update_site_option.
		if ( 'network_admin_menu' === $hook ) {
			// Override CMB's getter.
			add_filter( "cmb2_override_option_get_{$this->option_key}", array( $this, 'network_get_override' ), 10, 2 );
			// Override CMB's setter.
			add_filter( "cmb2_override_option_save_{$this->option_key}", array( $this, 'network_update_override' ), 10, 2 );
		}
	}

	/**
	 * Hook up our admin menu item and admin page.
	 *
	 * @since  2.2.5
	 *
	 * @return void
	 */
	public function options_page_menu_hooks() {
		$parent_slug = $this->cmb->prop( 'parent_slug' );
		$title       = $this->cmb->prop( 'title' );
		$menu_title  = $this->cmb->prop( 'menu_title', $title );
		$capability  = $this->cmb->prop( 'capability' );
		$callback    = array( $this, 'options_page_output' );

		if ( $parent_slug ) {
			$page_hook = add_submenu_page(
				$parent_slug,
				$title,
				$menu_title,
				$capability,
				$this->option_key,
				$callback
			);
		} else {
			$page_hook = add_menu_page(
				$title,
				$menu_title,
				$capability,
				$this->option_key,
				$callback,
				$this->cmb->prop( 'icon_url' ),
				$this->cmb->prop( 'position' )
			);
		}

		if ( $this->cmb->prop( 'cmb_styles' ) ) {
			// Include CMB CSS in the head to avoid FOUC.
			add_action( "admin_print_styles-{$page_hook}", array( 'CMB2_Hookup', 'enqueue_cmb_css' ) );
		}

		$this->maybe_register_message();
	}

	/**
	 * If there is a message callback, let it determine how to register the message,
	 * else add a settings message if on this settings page.
	 *
	 * @since  2.2.6
	 *
	 * @return void
	 */
	public function maybe_register_message() {
		$is_options_page = self::is_page( $this->option_key );
		$should_notify   = ! $this->cmb->prop( 'disable_settings_errors' ) && isset( $_GET['settings-updated'] ) && $is_options_page;
		$is_updated      = $should_notify && 'true' === $_GET['settings-updated'];
		$setting         = "{$this->option_key}-notices";
		$code            = '';
		$message         = __( 'Nothing to update.', 'cmb2' );
		$type            = 'notice-warning';

		if ( $is_updated ) {
			$message = __( 'Settings updated.', 'cmb2' );
			$type    = 'updated';
		}

		// Check if parameter has registered a callback.
		if ( $cb = $this->cmb->maybe_callback( 'message_cb' ) ) {

			/**
			 * The 'message_cb' callback will receive the following parameters.
			 * Unless there are other reasons for notifications, the callback should only
			 * `add_settings_error()` if `$args['should_notify']` is truthy.
			 *
			 * @param CMB2  $cmb The CMB2 object.
			 * @param array $args {
			 *     An array of message arguments
			 *
			 *     @type bool   $is_options_page Whether current page is this options page.
			 *     @type bool   $should_notify   Whether options were saved and we should be notified.
			 *     @type bool   $is_updated      Whether options were updated with save (or stayed the same).
			 *     @type string $setting         For add_settings_error(), Slug title of the setting to which
			 *                                   this error applies.
			 *     @type string $code            For add_settings_error(), Slug-name to identify the error.
			 *                                   Used as part of 'id' attribute in HTML output.
			 *     @type string $message         For add_settings_error(), The formatted message text to display
			 *                                   to the user (will be shown inside styled `<div>` and `<p>` tags).
			 *                                   Will be 'Settings updated.' if $is_updated is true, else 'Nothing to update.'
			 *     @type string $type            For add_settings_error(), Message type, controls HTML class.
			 *                                   Accepts 'error', 'updated', '', 'notice-warning', etc.
			 *                                   Will be 'updated' if $is_updated is true, else 'notice-warning'.
			 * }
			 */
			$args = compact( 'is_options_page', 'should_notify', 'is_updated', 'setting', 'code', 'message', 'type' );

			$this->cmb->do_callback( $cb, $args );

		} elseif ( $should_notify ) {

			add_settings_error( $setting, $code, $message, $type );
		}
	}

	/**
	 * Display options-page output. To override, set 'display_cb' box property.
	 *
	 * @since  2.2.5
	 */
	public function options_page_output() {
		$this->maybe_output_settings_notices();

		$callback = $this->cmb->prop( 'display_cb' );
		if ( is_callable( $callback ) ) {
			return call_user_func( $callback, $this );
		}

		?>
		<div class="wrap cmb2-options-page option-<?php echo esc_attr( sanitize_html_class( $this->option_key ) ); ?>">
			<?php if ( $this->cmb->prop( 'title' ) ) : ?>
				<h2><?php echo wp_kses_post( $this->cmb->prop( 'title' ) ); ?></h2>
			<?php endif; ?>
			<?php $this->options_page_tab_nav_output(); ?>
			<form class="cmb-form" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="POST" id="<?php echo $this->cmb->cmb_id; ?>" enctype="multipart/form-data" encoding="multipart/form-data">
				<input type="hidden" name="action" value="<?php echo esc_attr( $this->option_key ); ?>">
				<?php $this->options_page_metabox(); ?>
				<?php submit_button( esc_attr( $this->cmb->prop( 'save_button' ) ), 'primary', 'submit-cmb' ); ?>
			</form>
		</div>
		<?php
	}

	/**
	 * Display options-page Tab Navigation output.
	 *
	 * @since 2.9.0
	 */
	public function options_page_tab_nav_output() {
		$tabs = $this->get_tab_group_tabs();
		if ( empty( $tabs ) ) {
			return;
		}
		?>
		<h2 class="nav-tab-wrapper">
			<?php foreach ( $tabs as $option_key => $tab_title ) : ?>
				<?php // phpcs:ignore Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace -- Inline alternative-syntax conditional in template markup; keep on one line. ?>
				<a class="nav-tab<?php if ( self::is_page( $option_key ) ) : ?> nav-tab-active<?php endif; ?>" href="<?php menu_page_url( $option_key ); ?>"><?php echo wp_kses_post( $tab_title ); ?></a>
			<?php endforeach; ?>
		</h2>
		<?php
	}

	/**
	 * Outputs the settings notices if a) not a sub-page of 'options-general.php'
	 * (because settings_errors() already called in wp-admin/options-head.php),
	 * and b) the 'disable_settings_errors' prop is not set or truthy.
	 *
	 * @since  2.2.5
	 * @return void
	 */
	public function maybe_output_settings_notices() {
		global $parent_file;

		// The settings sub-pages will already have settings_errors() called in wp-admin/options-head.php.
		if ( 'options-general.php' !== $parent_file ) {
			settings_errors( "{$this->option_key}-notices" );
		}
	}

	/**
	 * Gets navigation tabs array for CMB2 options pages which share the
	 * same tab_group property.
	 *
	 * @since 2.4.0
	 * @return array Array of tab information ($option_key => $tab_title)
	 */
	public function get_tab_group_tabs() {
		$tab_group = $this->cmb->prop( 'tab_group' );
		$tabs      = array();

		if ( $tab_group ) {
			$boxes = CMB2_Boxes::get_by( 'tab_group', $tab_group );

			foreach ( $boxes as $cmb ) {
				$option_key = $cmb->options_page_keys();

				// Must have an option key, must be an options page box.
				if ( ! isset( $option_key[0] ) || 'options-page' !== $cmb->mb_object_type() ) {
					continue;
				}

				$tabs[ $option_key[0] ] = $cmb->prop( 'tab_title', $cmb->prop( 'title' ) );
			}
		}

		return apply_filters( 'cmb2_tab_group_tabs', $tabs, $tab_group );
	}

	/**
	 * Display metaboxes for an options-page object.
	 *
	 * @since  2.2.5
	 */
	public function options_page_metabox() {
		$this->show_form_for_type( 'options-page' );
	}

	/**
	 * Save data from options page, then redirects back.
	 *
	 * @since  2.2.5
	 * @return void
	 */
	public function save_options() {
		$url = wp_get_referer();
		if ( ! $url ) {
			$url = admin_url();
		}

		if (
			$this->can_save( 'options-page' )
			// check params.
			&& isset( $_POST['submit-cmb'], $_POST['action'] )
			&& $this->option_key === $_POST['action']
		) {

			$updated = $this->cmb
				->save_fields( $this->option_key, $this->cmb->object_type(), $_POST )
				->was_updated(); // Will be false if no values were changed/updated.

			$url = add_query_arg( 'settings-updated', $updated ? 'true' : 'false', $url );
		}

		wp_safe_redirect( esc_url_raw( $url ), 303 /* WP_Http::SEE_OTHER */ );
		exit;
	}

	/**
	 * Replaces get_option with get_site_option.
	 *
	 * @since 2.2.5
	 *
	 * @param mixed $test    Not used.
	 * @param mixed $default Default value to use.
	 * @return mixed Value set for the network option.
	 */
	public function network_get_override( $test, $default = false ) {
		return get_site_option( $this->option_key, $default );
	}

	/**
	 * Replaces update_option with update_site_option.
	 *
	 * @since 2.2.5
	 *
	 * @param mixed $test         Not used.
	 * @param mixed $option_value Value to use.
	 * @return bool Success/Failure
	 */
	public function network_update_override( $test, $option_value ) {
		return update_site_option( $this->option_key, $option_value );
	}

	/**
	 * Determines if given page slug matches the 'page' GET query variable.
	 *
	 * @since  2.4.0
	 *
	 * @param  string $page Page slug.
	 * @return boolean
	 */
	public static function is_page( $page ) {
		return isset( $_GET['page'] ) && $page === $_GET['page'];
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param string $field Property to retrieve.
	 *
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'object_type':
			case 'option_key':
			case 'cmb':
				return $this->{$field};
			default:
				// translators: 1: class name, 2: property name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
		}
	}
}
PK     ƒŠU]ýïøz  z  /  vendor/cmb2/cmb2/includes/CMB2_Show_Filters.phpnu „[µü¤        <?php
/**
 * Show On Filters
 * Use the 'cmb2_show_on' filter to further refine the conditions
 * under which a metabox is displayed.
 * Below you can limit it by ID and page template
 *
 * All methods in this class are automatically filtered
 *
 * @since  1.0.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Show_Filters {

	/**
	 * Get Show_on key. backwards compatible w/ 'key' indexes
	 *
	 * @since  2.0.0
	 *
	 * @param  array $meta_box_args Metabox config array.
	 *
	 * @return mixed                show_on key or false
	 */
	private static function get_show_on_key( $meta_box_args ) {
		$show_on = isset( $meta_box_args['show_on'] ) ? (array) $meta_box_args['show_on'] : false;
		if ( $show_on && is_array( $show_on ) ) {

			if ( array_key_exists( 'key', $show_on ) ) {
				return $show_on['key'];
			}

			$keys = array_keys( $show_on );
			return $keys[0];
		}

		return false;
	}

	/**
	 * Get Show_on value. backwards compatible w/ 'value' indexes
	 *
	 * @since  2.0.0
	 *
	 * @param  array $meta_box_args Metabox config array.
	 *
	 * @return mixed                show_on value or false
	 */
	private static function get_show_on_value( $meta_box_args ) {
		$show_on = isset( $meta_box_args['show_on'] ) ? (array) $meta_box_args['show_on'] : false;

		if ( $show_on && is_array( $show_on ) ) {

			if ( array_key_exists( 'value', $show_on ) ) {
				return $show_on['value'];
			}

			$keys = array_keys( $show_on );

			return $show_on[ $keys[0] ];
		}

		return array();
	}

	/**
	 * Add metaboxes for an specific ID
	 *
	 * @since  1.0.0
	 * @param  bool  $display       To display or not.
	 * @param  array $meta_box_args Metabox config array.
	 * @param  CMB2  $cmb           The CMB2 instance.
	 * @return bool                 Whether to display this metabox on the current page.
	 */
	public static function check_id( $display, $meta_box_args, $cmb ) {

		$key = self::get_show_on_key( $meta_box_args );
		if ( ! $key || 'id' !== $key ) {
			return $display;
		}

		$object_id = is_admin() ? $cmb->object_id() : get_the_ID();

		if ( ! $object_id ) {
			return false;
		}

		// If current page id is in the included array, display the metabox.
		return in_array( $object_id, (array) self::get_show_on_value( $meta_box_args ) );
	}

	/**
	 * Add metaboxes for an specific Page Template
	 *
	 * @since  1.0.0
	 * @param  bool  $display       To display or not.
	 * @param  array $meta_box_args Metabox config array.
	 * @param  CMB2  $cmb           CMB2 object.
	 * @return bool            Whether to display this metabox on the current page.
	 */
	public static function check_page_template( $display, $meta_box_args, $cmb ) {

		$key = self::get_show_on_key( $meta_box_args );
		if ( ! $key || 'page-template' !== $key ) {
			return $display;
		}

		$object_id = $cmb->object_id();

		if ( ! $object_id || 'post' !== $cmb->object_type() ) {
			return false;
		}

		// Get current template.
		$current_template = get_post_meta( $object_id, '_wp_page_template', true );

		// See if there's a match.
		if ( $current_template && in_array( $current_template, (array) self::get_show_on_value( $meta_box_args ) ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Only show options-page metaboxes on their options page (but only enforce on the admin side)
	 *
	 * @since  1.0.0
	 * @param  bool  $display  To display or not.
	 * @param  array $meta_box_args Metabox config array.
	 * @return bool            Whether to display this metabox on the current page.
	 */
	public static function check_admin_page( $display, $meta_box_args ) {

		$key = self::get_show_on_key( $meta_box_args );
		// check if this is a 'options-page' metabox.
		if ( ! $key || 'options-page' !== $key ) {
			return $display;
		}

		// Enforce 'show_on' filter in the admin.
		if ( is_admin() ) {

			// If there is no 'page' query var, our filter isn't applicable.
			if ( ! isset( $_GET['page'] ) ) {
				return $display;
			}

			$show_on = self::get_show_on_value( $meta_box_args );

			if ( empty( $show_on ) ) {
				return false;
			}

			if ( is_array( $show_on ) ) {
				foreach ( $show_on as $page ) {
					if ( $_GET['page'] == $page ) {
						return true;
					}
				}
			} else {
				if ( $_GET['page'] == $show_on ) {
					return true;
				}
			}

			return false;

		}

		// Allow options-page metaboxes to be displayed anywhere on the front-end.
		return true;
	}

}
PK     ƒŠU]·—‘
ŸX  ŸX  (  vendor/cmb2/cmb2/includes/CMB2_Utils.phpnu „[µü¤        <?php
/**
 * CMB2 Utilities
 *
 * @since  1.1.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Utils {

	/**
	 * The WordPress ABSPATH constant.
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected static $ABSPATH = ABSPATH;

	/**
	 * The url which is used to load local resources.
	 *
	 * @var   string
	 * @since 2.0.0
	 */
	protected static $url = '';

	/**
	 * Utility method that attempts to get an attachment's ID by it's url
	 *
	 * @since  1.0.0
	 * @param  string $img_url Attachment url.
	 * @return int|false            Attachment ID or false
	 */
	public static function image_id_from_url( $img_url ) {
		$attachment_id = 0;
		$dir = wp_upload_dir();

		// Is URL in uploads directory?
		if ( false === strpos( $img_url, $dir['baseurl'] . '/' ) ) {
			return false;
		}

		$file = basename( $img_url );

		$query_args = array(
			'post_type'   => 'attachment',
			'post_status' => 'inherit',
			'fields'      => 'ids',
			'meta_query'  => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required to resolve an attachment ID from its file URL; no non-meta alternative.
				array(
					'value'   => $file,
					'compare' => 'LIKE',
					'key'     => '_wp_attachment_metadata',
				),
			),
		);

		$query = new WP_Query( $query_args );

		if ( $query->have_posts() ) {

			foreach ( $query->posts as $post_id ) {
				$meta = wp_get_attachment_metadata( $post_id );
				$original_file       = basename( $meta['file'] );
				$cropped_image_files = isset( $meta['sizes'] ) ? wp_list_pluck( $meta['sizes'], 'file' ) : array();
				if ( $original_file === $file || in_array( $file, $cropped_image_files ) ) {
					$attachment_id = $post_id;
					break;
				}
			}
		}

		return 0 === $attachment_id ? false : $attachment_id;
	}

	/**
	 * Utility method to get a combined list of default and custom registered image sizes
	 *
	 * @since  2.2.4
	 * @link   http://core.trac.wordpress.org/ticket/18947
	 * @global array $_wp_additional_image_sizes
	 * @return array The image sizes
	 */
	public static function get_available_image_sizes() {
		global $_wp_additional_image_sizes;

		$default_image_sizes = array( 'thumbnail', 'medium', 'large' );
		$image_sizes         = array();
		foreach ( $default_image_sizes as $size ) {
			$image_sizes[ $size ] = array(
				'height' => intval( get_option( "{$size}_size_h" ) ),
				'width'  => intval( get_option( "{$size}_size_w" ) ),
				'crop'   => get_option( "{$size}_crop" ) ? get_option( "{$size}_crop" ) : false,
			);
		}

		if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) ) {
			$image_sizes = array_merge( $image_sizes, $_wp_additional_image_sizes );
		}

		return $image_sizes;
	}

	/**
	 * Utility method to return the closest named size from an array of values
	 *
	 * Based off of WordPress's image_get_intermediate_size()
	 * If the size matches an existing size then it will be used. If there is no
	 * direct match, then the nearest image size larger than the specified size
	 * will be used. If nothing is found, then the function will return false.
	 * Uses get_available_image_sizes() to get all available sizes.
	 *
	 * @since  2.2.4
	 * @param  array|string $size Image size. Accepts an array of width and height (in that order).
	 * @return false|string       Named image size e.g. 'thumbnail'
	 */
	public static function get_named_size( $size ) {
		$data = array();

		// Find the best match when '$size' is an array.
		if ( is_array( $size ) ) {
			$image_sizes = self::get_available_image_sizes();
			$candidates = array();

			foreach ( $image_sizes as $_size => $data ) {

				// If there's an exact match to an existing image size, short circuit.
				if ( $data['width'] == $size[0] && $data['height'] == $size[1] ) {
					$candidates[ $data['width'] * $data['height'] ] = array( $_size, $data );
					break;
				}

				// If it's not an exact match, consider larger sizes with the same aspect ratio.
				if ( $data['width'] >= $size[0] && $data['height'] >= $size[1] ) {

					/**
					 * To test for varying crops, we constrain the dimensions of the larger image
					 * to the dimensions of the smaller image and see if they match.
					 */
					if ( $data['width'] > $size[0] ) {
						$constrained_size = wp_constrain_dimensions( $data['width'], $data['height'], $size[0] );
						$expected_size = array( $size[0], $size[1] );
					} else {
						$constrained_size = wp_constrain_dimensions( $size[0], $size[1], $data['width'] );
						$expected_size = array( $data['width'], $data['height'] );
					}

					// If the image dimensions are within 1px of the expected size, we consider it a match.
					$matched = ( abs( $constrained_size[0] - $expected_size[0] ) <= 1 && abs( $constrained_size[1] - $expected_size[1] ) <= 1 );

					if ( $matched ) {
						$candidates[ $data['width'] * $data['height'] ] = array( $_size, $data );
					}
				}
			}

			if ( ! empty( $candidates ) ) {
				// Sort the array by size if we have more than one candidate.
				if ( 1 < count( $candidates ) ) {
					ksort( $candidates );
				}

				$data = array_shift( $candidates );
				$data = $data[0];
			} elseif ( ! empty( $image_sizes['thumbnail'] ) && $image_sizes['thumbnail']['width'] >= $size[0] && $image_sizes['thumbnail']['width'] >= $size[1] ) {
				/*
				 * When the size requested is smaller than the thumbnail dimensions, we
				 * fall back to the thumbnail size.
				 */
				$data = 'thumbnail';
			} else {
				return false;
			}
		} elseif ( ! empty( $image_sizes[ $size ] ) ) {
			$data = $size;
		}// End if.

		// If we still don't have a match at this point, return false.
		if ( empty( $data ) ) {
			return false;
		}

		return $data;
	}

	/**
	 * Utility method that returns time string offset by timezone
	 *
	 * @since  1.0.0
	 * @param  string $tzstring Time string.
	 * @return string           Offset time string
	 */
	public static function timezone_offset( $tzstring ) {
		$tz_offset = 0;

		if ( ! empty( $tzstring ) && is_string( $tzstring ) ) {
			if ( 'UTC' === substr( $tzstring, 0, 3 ) ) {
				$tzstring = str_replace( array( ':15', ':30', ':45' ), array( '.25', '.5', '.75' ), $tzstring );
				return intval( floatval( substr( $tzstring, 3 ) ) * HOUR_IN_SECONDS );
			}

			try {
				$date_time_zone_selected = new DateTimeZone( $tzstring );
				$tz_offset = timezone_offset_get( $date_time_zone_selected, date_create() );
			} catch ( Exception $e ) {
				self::log_if_debug( __METHOD__, __LINE__, $e->getMessage() );
			}
		}

		return $tz_offset;
	}

	/**
	 * Utility method that returns a timezone string representing the default timezone for the site.
	 *
	 * Roughly copied from WordPress, as get_option('timezone_string') will return
	 * an empty string if no value has been set on the options page.
	 * A timezone string is required by the wp_timezone_choice() used by the
	 * select_timezone field.
	 *
	 * @since  1.0.0
	 * @return string Timezone string
	 */
	public static function timezone_string() {
		$current_offset = get_option( 'gmt_offset' );
		$tzstring       = get_option( 'timezone_string' );

		// Remove old Etc mappings. Fallback to gmt_offset.
		if ( false !== strpos( $tzstring, 'Etc/GMT' ) ) {
			$tzstring = '';
		}

		if ( empty( $tzstring ) ) { // Create a UTC+- zone if no timezone string exists.
			if ( 0 == $current_offset ) {
				$tzstring = 'UTC+0';
			} elseif ( $current_offset < 0 ) {
				$tzstring = 'UTC' . $current_offset;
			} else {
				$tzstring = 'UTC+' . $current_offset;
			}
		}

		return $tzstring;
	}

	/**
	 * Returns a unix timestamp, first checking if value already is a timestamp.
	 *
	 * @since  2.0.0
	 * @param  string|int $string Possible timestamp string.
	 * @return int Time stamp.
	 */
	public static function make_valid_time_stamp( $string ) {
		if ( ! $string ) {
			return 0;
		}

		$valid = self::is_valid_time_stamp( $string );
		if ( $valid ) {
			$timestamp  = (int) $string;
			$length     = strlen( (string) $timestamp );
			$unixlength = strlen( (string) time() );
			$diff       = $length - $unixlength;

			// If value is larger than a unix timestamp, we need to round to the
			// nearest unix timestamp (in seconds).
			if ( $diff > 0 ) {
				$divider   = (int) '1' . str_repeat( '0', $diff );
				$timestamp = round( $timestamp / $divider );
			}
		} else {
			$timestamp = @strtotime( (string) $string ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentionally suppress notices on arbitrary input; false return is the error check.
		}

		return $timestamp;
	}

	/**
	 * Determine if a value is a valid date.
	 *
	 * @since  2.9.1
	 * @param  mixed $date Value to check.
	 * @return boolean     Whether value is a valid date
	 */
	public static function is_valid_date( $date ) {
		// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentionally suppress notices on arbitrary input; the boolean result is the validity check.
		return ( is_string( $date ) && @strtotime( $date ) )
			|| self::is_valid_time_stamp( $date );
	}

	/**
	 * Determine if a value is a valid timestamp
	 *
	 * @since  2.0.0
	 * @param  mixed $timestamp Value to check.
	 * @return boolean           Whether value is a valid timestamp
	 */
	public static function is_valid_time_stamp( $timestamp ) {
		return (string) (int) $timestamp === (string) $timestamp
			&& $timestamp <= PHP_INT_MAX
			&& $timestamp >= ~PHP_INT_MAX;
	}

	/**
	 * Checks if a value is 'empty'. Still accepts 0.
	 *
	 * @since  2.0.0
	 * @param  mixed $value Value to check.
	 * @return bool         True or false
	 */
	public static function isempty( $value ) {
		return null === $value || '' === $value || false === $value || array() === $value;
	}

	/**
	 * Checks if a value is not 'empty'. 0 doesn't count as empty.
	 *
	 * @since  2.2.2
	 * @param  mixed $value Value to check.
	 * @return bool         True or false
	 */
	public static function notempty( $value ) {
		return null !== $value && '' !== $value && false !== $value && array() !== $value;
	}

	/**
	 * Filters out empty values (not including 0).
	 *
	 * @since  2.2.2
	 * @param  mixed $value Value to check.
	 * @return array True or false.
	 */
	public static function filter_empty( $value ) {
		return array_filter( $value, array( __CLASS__, 'notempty' ) );
	}

	/**
	 * Insert a single array item inside another array at a set position
	 *
	 * @since  2.0.2
	 * @param  array $array    Array to modify. Is passed by reference, and no return is needed. Passed by reference.
	 * @param  array $new      New array to insert.
	 * @param  int   $position Position in the main array to insert the new array.
	 */
	public static function array_insert( &$array, $new, $position ) {
		$before = array_slice( $array, 0, $position - 1 );
		$after  = array_diff_key( $array, $before );
		$array  = array_merge( $before, $new, $after );
	}

	/**
	 * Defines the url which is used to load local resources.
	 * This may need to be filtered for local Window installations.
	 * If resources do not load, please check the wiki for details.
	 *
	 * @since  1.0.1
	 *
	 * @param string $path URL path.
	 * @return string URL to CMB2 resources
	 */
	public static function url( $path = '' ) {
		if ( self::$url ) {
			return self::$url . $path;
		}

		$cmb2_url = self::get_url_from_dir( cmb2_dir() );

		/**
		 * Filter the CMB location url.
		 *
		 * @param string $cmb2_url Currently registered url.
		 */
		self::$url = trailingslashit( apply_filters( 'cmb2_meta_box_url', $cmb2_url, CMB2_VERSION ) );

		return self::$url . $path;
	}

	/**
	 * Converts a system path to a URL
	 *
	 * @since  2.2.2
	 * @param  string $dir Directory path to convert.
	 * @return string      Converted URL.
	 */
	public static function get_url_from_dir( $dir ) {
		$dir = self::normalize_path( $dir );

		// Let's test if We are in the plugins or mu-plugins dir.
		$test_dir = trailingslashit( $dir ) . 'unneeded.php';
		if (
			0 === strpos( $test_dir, self::normalize_path( WPMU_PLUGIN_DIR ) )
			|| 0 === strpos( $test_dir, self::normalize_path( WP_PLUGIN_DIR ) )
		) {
			// Ok, then use plugins_url, as it is more reliable.
			return trailingslashit( plugins_url( '', $test_dir ) );
		}

		// Ok, now let's test if we are in the theme dir.
		$theme_root = self::normalize_path( get_theme_root() );
		if ( 0 === strpos( $dir, $theme_root ) ) {
			// Ok, then use get_theme_root_uri.
			return set_url_scheme(
				trailingslashit(
					str_replace(
						untrailingslashit( $theme_root ),
						untrailingslashit( get_theme_root_uri() ),
						$dir
					)
				)
			);
		}

		// Check to see if it's anywhere in the root directory.
		$site_dir = self::get_normalized_abspath();
		$site_url = trailingslashit( is_multisite() ? network_site_url() : site_url() );

		$url = str_replace(
			array( $site_dir, WP_PLUGIN_DIR ),
			array( $site_url, WP_PLUGIN_URL ),
			$dir
		);

		return set_url_scheme( $url );
	}

	/**
	 * Get the normalized absolute path defined by WordPress.
	 *
	 * @since  2.2.6
	 *
	 * @return string  Normalized absolute path.
	 */
	protected static function get_normalized_abspath() {
		return self::normalize_path( self::$ABSPATH );
	}

	/**
	 * `wp_normalize_path` wrapper for back-compat. Normalize a filesystem path.
	 *
	 * On windows systems, replaces backslashes with forward slashes
	 * and forces upper-case drive letters.
	 * Allows for two leading slashes for Windows network shares, but
	 * ensures that all other duplicate slashes are reduced to a single.
	 *
	 * @since 2.2.0
	 *
	 * @param string $path Path to normalize.
	 * @return string Normalized path.
	 */
	protected static function normalize_path( $path ) {
		if ( function_exists( 'wp_normalize_path' ) ) {
			return wp_normalize_path( $path );
		}

		// Replace newer WP's version of wp_normalize_path.
		$path = str_replace( '\\', '/', $path );
		$path = preg_replace( '|(?<=.)/+|', '/', $path );
		if ( ':' === substr( $path, 1, 1 ) ) {
			$path = ucfirst( $path );
		}

		return $path;
	}

	/**
	 * Get timestamp from text date
	 *
	 * @since  2.2.0
	 * @param  string $value       Date value.
	 * @param  string $date_format Expected date format.
	 * @return mixed               Unix timestamp representing the date.
	 */
	public static function get_timestamp_from_value( $value, $date_format ) {
		$date_object = date_create_from_format( $date_format, $value );
		return $date_object ? $date_object->setTime( 0, 0, 0 )->getTimeStamp() : strtotime( $value );
	}

	/**
	 * Takes a php date() format string and returns a string formatted to suit for the date/time pickers
	 * It will work only with the following subset of date() options:
	 *
	 * Formats: d, l, j, z, m, F, n, y, and Y.
	 *
	 * A slight effort is made to deal with escaped characters.
	 *
	 * Other options are ignored, because they would either bring compatibility problems between PHP and JS, or
	 * bring even more translation troubles.
	 *
	 * @since 2.2.0
	 * @param string $format PHP date format.
	 * @return string reformatted string
	 */
	public static function php_to_js_dateformat( $format ) {

		// order is relevant here, since the replacement will be done sequentially.
		$supported_options = array(
			'd'   => 'dd',  // Day, leading 0.
			'j'   => 'd',   // Day, no 0.
			'z'   => 'o',   // Day of the year, no leading zeroes.
			// 'D' => 'D',   // Day name short, not sure how it'll work with translations.
			'l '  => 'DD ',  // Day name full, idem before.
			'l, ' => 'DD, ',  // Day name full, idem before.
			'm'   => 'mm',  // Month of the year, leading 0.
			'n'   => 'm',   // Month of the year, no leading 0.
			// 'M' => 'M',   // Month, Short name.
			'F '  => 'MM ',  // Month, full name.
			'F, ' => 'MM, ',  // Month, full name.
			'y'   => 'y',   // Year, two digit.
			'Y'   => 'yy',  // Year, full.
			'H'   => 'HH',  // Hour with leading 0 (24 hour).
			'G'   => 'H',   // Hour with no leading 0 (24 hour).
			'h'   => 'hh',  // Hour with leading 0 (12 hour).
			'g'   => 'h',   // Hour with no leading 0 (12 hour).
			'i'   => 'mm',  // Minute with leading 0.
			's'   => 'ss',  // Second with leading 0.
			'a'   => 'tt',  // am/pm.
			'A'   => 'TT', // AM/PM.
		);

		foreach ( $supported_options as $php => $js ) {
			// replaces every instance of a supported option, but skips escaped characters.
			$format = preg_replace( "~(?<!\\\\)$php~", $js, $format );
		}

		$supported_options = array(
			'l' => 'DD',  // Day name full, idem before.
			'F' => 'MM',  // Month, full name.
		);

		if ( isset( $supported_options[ $format ] ) ) {
			$format = $supported_options[ $format ];
		}

		$format = preg_replace_callback( '~(?:\\\.)+~', array( __CLASS__, 'wrap_escaped_chars' ), $format );

		return $format;
	}

	/**
	 * Get a DateTime object from a value.
	 *
	 * @since 2.11.0
	 *
	 * @param string $value The value to convert to a DateTime object.
	 *
	 * @return DateTime|null
	 */
	public static function get_datetime_from_value( $value ) {
		return is_serialized( $value )
			// Ok, we need to unserialize the value
			// -- allows back-compat for older field values with serialized DateTime objects.
			? self::unserialize_datetime( $value )
			// Handle new json formatted values.
			: self::json_to_datetime( $value );
	}

	/**
	 * Unserialize a datetime value string.
	 *
	 * This is a back-compat method for older field values with serialized DateTime objects.
	 *
	 * @since 2.11.0
	 *
	 * @param string $date_value The serialized datetime value.
	 *
	 * @return DateTime|null
	 */
	public static function unserialize_datetime( $date_value ) {
		$datetime = @unserialize( trim( $date_value ), array( 'allowed_classes' => array( 'DateTime' ) ) );

		return $datetime && $datetime instanceof DateTime ? $datetime : null;
	}

	/**
	 * Convert a json datetime value string to a DateTime object.
	 *
	 * @since 2.11.0
	 *
	 * @param string $json_string The json value string.
	 *
	 * @return DateTime|null
	 */
	public static function json_to_datetime( $json_string ) {
		if ( ! is_string( $json_string ) ) {
			return null;
		}

		$json = json_decode( $json_string );

		// Check if json decode was successful
		if ( json_last_error() !== JSON_ERROR_NONE ) {
			return null;
		}

		// If so, convert to DateTime object.
		return self::unserialize_datetime( str_replace(
			'stdClass',
			'DateTime',
			serialize( $json )
		) );
	}

	/**
	 * Helper function for CMB_Utils::php_to_js_dateformat().
	 *
	 * @since  2.2.0
	 * @param  string $value Value to wrap/escape.
	 * @return string Modified value
	 */
	public static function wrap_escaped_chars( $value ) {
		return '&#39;' . str_replace( '\\', '', $value[0] ) . '&#39;';
	}

	/**
	 * Send to debug.log if WP_DEBUG is defined and true
	 *
	 * @since  2.2.0
	 *
	 * @param  string $function Function name.
	 * @param  int    $line     Line number.
	 * @param  mixed  $msg      Message to output.
	 * @param  mixed  $debug    Variable to print_r.
	 */
	public static function log_if_debug( $function, $line, $msg, $debug = null ) {
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
			error_log( "In $function, $line:" . print_r( $msg, true ) . ( $debug ? print_r( $debug, true ) : '' ) );
		}
	}

	/**
	 * Determine a file's extension
	 *
	 * @since  1.0.0
	 * @param  string $file File url.
	 * @return string|false       File extension or false
	 */
	public static function get_file_ext( $file ) {
		$parsed = parse_url( $file, PHP_URL_PATH );
		return $parsed ? strtolower( pathinfo( $parsed, PATHINFO_EXTENSION ) ) : false;
	}

	/**
	 * Get the file name from a url
	 *
	 * @since  2.0.0
	 * @param  string $value File url or path.
	 * @return string        File name
	 */
	public static function get_file_name_from_path( $value ) {
		$parts = explode( '/', $value );
		return is_array( $parts ) ? end( $parts ) : $value;
	}

	/**
	 * Check if WP version is at least $version.
	 *
	 * @since  2.2.2
	 * @param  string $version WP version string to compare.
	 * @return bool            Result of comparison check.
	 */
	public static function wp_at_least( $version ) {
		return version_compare( get_bloginfo( 'version' ), $version, '>=' );
	}

	/**
	 * Combines attributes into a string for a form element.
	 *
	 * @since  1.1.0
	 * @param  array $attrs        Attributes to concatenate.
	 * @param  array $attr_exclude Attributes that should NOT be concatenated.
	 * @return string              String of attributes for form element.
	 */
	public static function concat_attrs( $attrs, $attr_exclude = array() ) {
		$attr_exclude[] = 'rendered';
		$attr_exclude[] = 'js_dependencies';

		$attributes = '';
		foreach ( $attrs as $attr => $val ) {
			$excluded = in_array( $attr, (array) $attr_exclude, true );
			$empty    = false === $val && 'value' !== $attr;
			if ( ! $excluded && ! $empty ) {
				$val = is_array( $val ) ? implode( ',', $val ) : $val;

				// if data attribute, use single quote wraps, else double.
				$quotes = self::is_data_attribute( $attr ) ? "'" : '"';
				$attributes .= sprintf( ' %1$s=%3$s%2$s%3$s', $attr, $val, $quotes );
			}
		}
		return $attributes;
	}

	/**
	 * Check if given attribute is a data attribute.
	 *
	 * @since  2.2.5
	 *
	 * @param string $att HTML attribute.
	 * @return boolean
	 */
	public static function is_data_attribute( $att ) {
		return 0 === stripos( $att, 'data-' );
	}

	/**
	 * Ensures value is an array.
	 *
	 * @since  2.2.3
	 *
	 * @param  mixed $value   Value to ensure is array.
	 * @param  array $default Default array. Defaults to empty array.
	 *
	 * @return array          The array.
	 */
	public static function ensure_array( $value, $default = array() ) {
		if ( empty( $value ) ) {
			return $default;
		}

		if ( is_array( $value ) || is_object( $value ) ) {
			return (array) $value;
		}

		// Not sure anything would be non-scalar that is not an array or object?
		if ( ! is_scalar( $value ) ) {
			return $default;
		}

		return (array) $value;
	}

	/**
	 * If number is numeric, normalize it with floatval or intval, depending on if decimal is found.
	 *
	 * @since  2.2.6
	 *
	 * @param mixed $value Value to normalize (if numeric).
	 * @return mixed         Possibly normalized value.
	 */
	public static function normalize_if_numeric( $value ) {
		if ( is_numeric( $value ) ) {
			$value = false !== strpos( $value, '.' ) ? floatval( $value ) : intval( $value );
		}

		return $value;
	}

	/**
	 * Generates a 12 character unique hash from a string.
	 *
	 * @since  2.4.0
	 *
	 * @param string $string String to create a hash from.
	 *
	 * @return string
	 */
	public static function generate_hash( $string ) {
		return substr( base_convert( md5( $string ), 16, 32 ), 0, 12 );
	}

}
PK     ƒŠU]®¢X°>  °>  '  vendor/cmb2/cmb2/includes/CMB2_Base.phpnu „[µü¤        <?php
/**
 * CMB2 Base - Base object functionality.
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @property-read $args        The objects array of properties/arguments.
 * @property-read $meta_box    The objects array of properties/arguments.
 * @property-read $properties  The objects array of properties/arguments.
 * @property-read $cmb_id      Current CMB2 instance ID
 * @property-read $object_id   Object ID
 * @property-read $object_type Type of object being handled. (e.g., post, user, comment, or term)
 */
#[AllowDynamicProperties] // phpcs:ignore PHPCompatibility.Attributes.NewAttributes -- Back-compat: allow dynamic props (PHP 8.2+) on this class + subclasses.
abstract class CMB2_Base {

	/**
	 * Current CMB2 instance ID
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected $cmb_id = '';

	/**
	 * The object properties name.
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected $properties_name = 'meta_box';

	/**
	 * Object ID
	 *
	 * @var   mixed
	 * @since 2.2.3
	 */
	protected $object_id = 0;

	/**
	 * Type of object being handled. (e.g., post, user, comment, or term)
	 *
	 * @var   string
	 * @since 2.2.3
	 */
	protected $object_type = '';

	/**
	 * Array of key => value data for saving. Likely $_POST data.
	 *
	 * @var   array
	 * @since 2.2.3
	 */
	public $data_to_save = array();

	/**
	 * Array of field param callback results
	 *
	 * @var   array
	 * @since 2.0.0
	 */
	protected $callback_results = array();

	/**
	 * The deprecated_param method deprecated param message signature.
	 */
	const DEPRECATED_PARAM = 1;

	/**
	 * The deprecated_param method deprecated callback param message signature.
	 */
	const DEPRECATED_CB_PARAM = 2;

	/**
	 * Get started
	 *
	 * @since 2.2.3
	 * @param array $args Object properties array.
	 */
	public function __construct( $args = array() ) {
		if ( ! empty( $args ) ) {
			foreach ( array(
				'cmb_id',
				'properties_name',
				'object_id',
				'object_type',
				'data_to_save',
			) as $object_prop ) {
				if ( isset( $args[ $object_prop ] ) ) {
					$this->{$object_prop} = $args[ $object_prop ];
				}
			}
		}
	}

	/**
	 * Returns the object ID
	 *
	 * @since  2.2.3
	 * @param  integer $object_id Object ID.
	 * @return integer Object ID
	 */
	public function object_id( $object_id = 0 ) {
		if ( $object_id ) {
			$this->object_id = $object_id;
		}

		return $this->object_id;
	}

	/**
	 * Returns the object type
	 *
	 * @since  2.2.3
	 * @param  string $object_type Object Type.
	 * @return string Object type
	 */
	public function object_type( $object_type = '' ) {
		if ( $object_type ) {
			$this->object_type = $object_type;
		}

		return $this->object_type;
	}

	/**
	 * Get the object type for the current page, based on the $pagenow global.
	 *
	 * @since  2.2.2
	 * @return string  Page object type name.
	 */
	public function current_object_type() {
		global $pagenow;
		$type = 'post';

		if ( in_array( $pagenow, array( 'user-edit.php', 'profile.php', 'user-new.php' ), true ) ) {
			$type = 'user';
		}

		if ( in_array( $pagenow, array( 'edit-comments.php', 'comment.php' ), true ) ) {
			$type = 'comment';
		}

		if ( in_array( $pagenow, array( 'edit-tags.php', 'term.php' ), true ) ) {
			$type = 'term';
		}

		return $type;
	}

	/**
	 * Set object property.
	 *
	 * @since  2.2.2
	 * @param  string $property Metabox config property to retrieve.
	 * @param  mixed  $value    Value to set if no value found.
	 * @return mixed            Metabox config property value or false.
	 */
	public function set_prop( $property, $value ) {
		$this->{$this->properties_name}[ $property ] = $value;

		return $this->prop( $property );
	}

	/**
	 * Get object property and optionally set a fallback
	 *
	 * @since  2.0.0
	 * @param  string $property Metabox config property to retrieve.
	 * @param  mixed  $fallback Fallback value to set if no value found.
	 * @return mixed            Metabox config property value or false
	 */
	public function prop( $property, $fallback = null ) {
		if ( array_key_exists( $property, $this->{$this->properties_name} ) ) {
			return $this->{$this->properties_name}[ $property ];
		} elseif ( $fallback ) {
			return $this->{$this->properties_name}[ $property ] = $fallback;
		}
	}

	/**
	 * Get default field arguments specific to this CMB2 object.
	 *
	 * @since  2.2.0
	 * @param  array      $field_args  Metabox field config array.
	 * @param  CMB2_Field $field_group (optional) CMB2_Field object (group parent).
	 * @return array                   Array of field arguments.
	 */
	protected function get_default_args( $field_args, $field_group = null ) {
		if ( $field_group ) {
			$args = array(
				'field_args'  => $field_args,
				'group_field' => $field_group,
			);
		} else {
			$args = array(
				'field_args'  => $field_args,
				'object_type' => $this->object_type(),
				'object_id'   => $this->object_id(),
				'cmb_id'      => $this->cmb_id,
			);
		}

		return $args;
	}

	/**
	 * Get a new field object specific to this CMB2 object.
	 *
	 * @since  2.2.0
	 * @param  array      $field_args  Metabox field config array.
	 * @param  CMB2_Field $field_group (optional) CMB2_Field object (group parent).
	 * @return CMB2_Field CMB2_Field object
	 */
	protected function get_new_field( $field_args, $field_group = null ) {
		return new CMB2_Field( $this->get_default_args( $field_args, $field_group ) );
	}

	/**
	 * Determine whether this cmb object should show, based on the 'show_on_cb' callback.
	 *
	 * @since 2.0.9
	 *
	 * @return bool Whether this cmb should be shown.
	 */
	public function should_show() {
		// Default to showing this cmb
		$show = true;

		// Use the callback to determine showing the cmb, if it exists.
		if ( is_callable( $this->prop( 'show_on_cb' ) ) ) {
			$show = (bool) call_user_func( $this->prop( 'show_on_cb' ), $this );
		}

		return $show;
	}

	/**
	 * Displays the results of the param callbacks.
	 *
	 * @since 2.0.0
	 * @param string $param Field parameter.
	 */
	public function peform_param_callback( $param ) {
		echo $this->get_param_callback_result( $param );
	}

	/**
	 * Store results of the param callbacks for continual access
	 *
	 * @since  2.0.0
	 * @param  string $param Field parameter.
	 * @return mixed         Results of param/param callback
	 */
	public function get_param_callback_result( $param ) {

		// If we've already retrieved this param's value.
		if ( array_key_exists( $param, $this->callback_results ) ) {

			// Send it back.
			return $this->callback_results[ $param ];
		}

		// Check if parameter has registered a callback.
		if ( $cb = $this->maybe_callback( $param ) ) {

			// Ok, callback is good, let's run it and store the result.
			ob_start();
			$returned = $this->do_callback( $cb );

			// Grab the result from the output buffer and store it.
			$echoed = ob_get_clean();

			// This checks if the user returned or echoed their callback.
			// Defaults to using the echoed value.
			$this->callback_results[ $param ] = $echoed ? $echoed : $returned;

		} else {

			// Otherwise just get whatever is there.
			$this->callback_results[ $param ] = isset( $this->{$this->properties_name}[ $param ] ) ? $this->{$this->properties_name}[ $param ] : false;
		}

		return $this->callback_results[ $param ];
	}

	/**
	 * Unset the cached results of the param callback.
	 *
	 * @since  2.2.6
	 * @param  string $param Field parameter.
	 * @return CMB2_Base
	 */
	public function unset_param_callback_cache( $param ) {
		if ( isset( $this->callback_results[ $param ] ) ) {
			unset( $this->callback_results[ $param ] );
		}

		return $this;
	}

	/**
	 * Handles the parameter callbacks, and passes this object as parameter.
	 *
	 * @since  2.2.3
	 * @param  callable $cb                The callback method/function/closure.
	 * @param  mixed    $additional_params Any additoinal parameters which should be passed to the callback.
	 * @return mixed                       Return of the callback function.
	 */
	protected function do_callback( $cb, $additional_params = null ) {
		return call_user_func( $cb, $this->{$this->properties_name}, $this, $additional_params );
	}

	/**
	 * Checks if field has a callback value
	 *
	 * @since  1.0.1
	 * @param  string $cb Callback string.
	 * @return mixed      NULL, false for NO validation, or $cb string if it exists.
	 */
	public function maybe_callback( $cb ) {
		$args = $this->{$this->properties_name};
		if ( ! isset( $args[ $cb ] ) ) {
			return null;
		}

		// Check if requesting explicitly false.
		$cb = false !== $args[ $cb ] && 'false' !== $args[ $cb ] ? $args[ $cb ] : false;

		// If requesting NO validation, return false.
		if ( ! $cb ) {
			return false;
		}

		if ( is_callable( $cb ) ) {
			return $cb;
		}

		return null;
	}

	/**
	 * Checks if this object has parameter corresponding to the given filter
	 * which is callable. If so, it registers the callback, and if not,
	 * converts the maybe-modified $val to a boolean for return.
	 *
	 * The registered handlers will have a parameter name which matches the filter, except:
	 * - The 'cmb2_api' prefix will be removed
	 * - A '_cb' suffix will be added (to stay inline with other '*_cb' parameters).
	 *
	 * @since  2.2.3
	 *
	 * @param  string $hook_name     The hook name.
	 * @param  bool   $val           The default value.
	 * @param  string $hook_function The hook function. Default: 'add_filter'.
	 *
	 * @return null|bool             Null if hook is registered, or bool for value.
	 */
	public function maybe_hook_parameter( $hook_name, $val = null, $hook_function = 'add_filter' ) {

		// Remove filter prefix, add param suffix.
		$parameter = substr( $hook_name, strlen( 'cmb2_api_' ) ) . '_cb';

		return self::maybe_hook(
			$this->prop( $parameter, $val ),
			$hook_name,
			$hook_function
		);
	}

	/**
	 * Checks if given value is callable, and registers the callback.
	 * If is non-callable, converts the $val to a boolean for return.
	 *
	 * @since  2.2.3
	 *
	 * @param  bool   $val           The default value.
	 * @param  string $hook_name     The hook name.
	 * @param  string $hook_function The hook function.
	 *
	 * @return null|bool         Null if hook is registered, or bool for value.
	 */
	public static function maybe_hook( $val, $hook_name, $hook_function ) {
		if ( is_callable( $val ) ) {
			call_user_func( $hook_function, $hook_name, $val, 10, 2 );
			return null;
		}

		// Cast to bool.
		return ! ! $val;
	}

	/**
	 * Mark a param as deprecated and inform when it has been used.
	 *
	 * There is a default WordPress hook deprecated_argument_run that will be called
	 * that can be used to get the backtrace up to what file and function used the
	 * deprecated argument.
	 *
	 * The current behavior is to trigger a user error if WP_DEBUG is true.
	 *
	 * @since 2.2.3
	 *
	 * @param string $function The function that was called.
	 * @param string $version  The version of CMB2 that deprecated the argument used.
	 * @param string $message  Optional. A message regarding the change, or numeric
	 *                         key to generate message from additional arguments.
	 *                         Default null.
	 */
	protected function deprecated_param( $function, $version, $message = null ) {

		$args = func_get_args();

		if ( is_numeric( $message ) ) {

			switch ( $message ) {

				case self::DEPRECATED_PARAM:
					// translators: 1: deprecated field parameter name, 2: replacement parameter name.
					$message = sprintf( __( 'The "%1$s" field parameter has been deprecated in favor of the "%2$s" parameter.', 'cmb2' ), $args[3], $args[4] );
					break;

				case self::DEPRECATED_CB_PARAM:
					// translators: 1: deprecated callback parameter name, 2: replacement parameter name.
					$message = sprintf( __( 'Using the "%1$s" field parameter as a callback has been deprecated in favor of the "%2$s" parameter.', 'cmb2' ), $args[3], $args[4] );
					break;

				default:
					$message = null;
					break;
			}
		}

		/**
		 * Fires when a deprecated argument is called. This is a WP core action.
		 *
		 * @since 2.2.3
		 *
		 * @param string $function The function that was called.
		 * @param string $message  A message regarding the change.
		 * @param string $version  The version of CMB2 that deprecated the argument used.
		 */
		do_action( 'deprecated_argument_run', $function, $message, $version );

		/**
		 * Filters whether to trigger an error for deprecated arguments. This is a WP core filter.
		 *
		 * @since 2.2.3
		 *
		 * @param bool $trigger Whether to trigger the error for deprecated arguments. Default true.
		 */
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) {
			if ( function_exists( '__' ) ) {
				if ( ! is_null( $message ) ) {
					// translators: 1: function name, 2: version number, 3: additional message.
					trigger_error( sprintf( __( '%1$s was called with a parameter that is <strong>deprecated</strong> since version %2$s! %3$s', 'cmb2' ), $function, $version, $message ) );
				} else {
					// translators: 1: function name, 2: version number.
					trigger_error( sprintf( __( '%1$s was called with a parameter that is <strong>deprecated</strong> since version %2$s with no alternative available.', 'cmb2' ), $function, $version ) );
				}
			} else {
				if ( ! is_null( $message ) ) {
					trigger_error( sprintf( '%1$s was called with a parameter that is <strong>deprecated</strong> since version %2$s! %3$s', $function, $version, $message ) );
				} else {
					trigger_error( sprintf( '%1$s was called with a parameter that is <strong>deprecated</strong> since version %2$s with no alternative available.', $function, $version ) );
				}
			}
		}
	}

	/**
	 * Magic getter for our object.
	 *
	 * @param string $field Requested property.
	 * @throws Exception Throws an exception if the field is invalid.
	 * @return mixed
	 */
	public function __get( $field ) {
		switch ( $field ) {
			case 'args':
			case 'meta_box':
				if ( $field === $this->properties_name ) {
					return $this->{$this->properties_name};
				}
				// no break
			case 'properties':
				return $this->{$this->properties_name};
			case 'cmb_id':
			case 'object_id':
			case 'object_type':
				return $this->{$field};
			default:
				// translators: 1: class name, 2: property name.
				throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
		}
	}

	/**
	 * Allows overloading the object with methods... Whooaaa oooh it's magic, y'knoooow.
	 *
	 * @since 1.0.0
	 * @throws Exception Invalid method exception.
	 *
	 * @param string $method Non-existent method.
	 * @param array  $args   All arguments passed to the method.
	 * @return mixed
	 */
	public function __call( $method, $args ) {
		$object_class = strtolower( get_class( $this ) );

		if ( ! has_filter( "{$object_class}_inherit_{$method}" ) ) {
			// translators: 1: class name, 2: method name.
			throw new Exception( sprintf( esc_html__( 'Invalid %1$s method: %2$s', 'cmb2' ), get_class( $this ), $method ) );
		}

		array_unshift( $args, $this );

		/**
		 * Allows overloading the object (CMB2 or CMB2_Field) with additional capabilities
		 * by registering hook callbacks.
		 *
		 * The first dynamic portion of the hook name, $object_class, refers to the object class,
		 * either cmb2 or cmb2_field.
		 *
		 * The second dynamic portion of the hook name, $method, is the non-existent method being
		 * called on the object. To avoid possible future methods encroaching on your hooks,
		 * use a unique method (aka, $cmb->prefix_my_method()).
		 *
		 * When registering your callback, you will need to ensure that you register the correct
		 * number of `$accepted_args`, accounting for this object instance being the first argument.
		 *
		 * @param array $args The arguments to be passed to the hook.
		 *                    The first argument will always be this object instance.
		 */
		return apply_filters_ref_array( "{$object_class}_inherit_{$method}", $args );
	}
}
PK     ƒŠU]ûRLz�  �    vendor/cmb2/cmb2/AGENTS.mdnu „[µü¤        # Agent Instructions

This project uses **bd** (beads) for issue tracking. Run `bd onboard` to get started.

## Quick Reference

```bash
bd ready              # Find available work
bd show <id>          # View issue details
bd update <id> --claim  # Claim work atomically
bd close <id>         # Complete work
bd sync               # Sync with git
```

## Non-Interactive Shell Commands

**ALWAYS use non-interactive flags** with file operations to avoid hanging on confirmation prompts.

Shell commands like `cp`, `mv`, and `rm` may be aliased to include `-i` (interactive) mode on some systems, causing the agent to hang indefinitely waiting for y/n input.

**Use these forms instead:**
```bash
# Force overwrite without prompting
cp -f source dest           # NOT: cp source dest
mv -f source dest           # NOT: mv source dest
rm -f file                  # NOT: rm file

# For recursive operations
rm -rf directory            # NOT: rm -r directory
cp -rf source dest          # NOT: cp -r source dest
```

**Other commands that may prompt:**
- `scp` - use `-o BatchMode=yes` for non-interactive
- `ssh` - use `-o BatchMode=yes` to fail instead of prompting
- `apt-get` - use `-y` flag
- `brew` - use `HOMEBREW_NO_AUTO_UPDATE=1` env var

<!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:970c3bf2 -->
## Beads Issue Tracker

This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.

### Quick Reference

```bash
bd ready              # Find available work
bd show <id>          # View issue details
bd update <id> --claim  # Claim work
bd close <id>         # Complete work
```

### Rules

- Use `bd` for ALL task tracking â€” do NOT use TodoWrite, TaskCreate, or markdown TODO lists
- Run `bd prime` for detailed command reference and session close protocol
- Use `bd remember` for persistent knowledge â€” do NOT use MEMORY.md files

**Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md for details and anti-patterns.

## Agent Context Profiles

The managed Beads block is task-tracking guidance, not permission to override repository, user, or orchestrator instructions.

- **Conservative (default)**: Use `bd` for task tracking. Do not run git commits, git pushes, or Dolt remote sync unless explicitly asked. At handoff, report changed files, validation, and suggested next commands.
- **Minimal**: Keep tool instruction files as pointers to `bd prime`; use the same conservative git policy unless active instructions say otherwise.
- **Team-maintainer**: Only when the repository explicitly opts in, agents may close beads, run quality gates, commit, and push as part of session close. A current "do not commit" or "do not push" instruction still wins.

## Session Completion

This protocol applies when ending a Beads implementation workflow. It is subordinate to explicit user, repository, and orchestrator instructions.

1. **File issues for remaining work** - Create beads for anything that needs follow-up
2. **Run quality gates** (if code changed) - Tests, linters, builds
3. **Update issue status** - Close finished work, update in-progress items
4. **Handle git/sync by active profile**:
   ```bash
   # Conservative/minimal/default: report status and proposed commands; wait for approval.
   git status

   # Team-maintainer opt-in only, unless current instructions forbid it:
   git pull --rebase
   bd dolt push
   git push
   git status
   ```
5. **Hand off** - Summarize changes, validation, issue status, and any blocked sync/commit/push step

**Critical rules:**
- Explicit user or orchestrator instructions override this Beads block.
- Do not commit or push without clear authority from the active profile or the current user request.
- If a required sync or push is blocked, stop and report the exact command and error.
<!-- END BEADS INTEGRATION -->

<!-- BEGIN BEADS CODEX SETUP: generated by bd setup codex -->
## Beads Issue Tracker

Use Beads (`bd`) for durable task tracking in repositories that include it. Use the `beads` skill at `.agents/skills/beads/SKILL.md` (project install) or `~/.agents/skills/beads/SKILL.md` (global install) for Beads workflow guidance, then use the `bd` CLI for issue operations.

### Quick Reference

```bash
bd ready                # Find available work
bd show <id>            # View issue details
bd update <id> --claim  # Claim work
bd close <id>           # Complete work
bd prime                # Refresh Beads context
```

### Rules

- Use `bd` for all task tracking; do not create markdown TODO lists.
- Run `bd prime` when Beads context is missing or stale. Codex 0.129.0+ can load Beads context automatically through native hooks; use `/hooks` to inspect or toggle them.
- Keep persistent project memory in Beads via `bd remember`; do not create ad hoc memory files.

**Architecture in one line:** issues live in a local Dolt DB; sync uses `refs/dolt/data` on your git remote; `.beads/issues.jsonl` is a passive export. See https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md for details and anti-patterns.
<!-- END BEADS CODEX SETUP -->
PK     ƒŠU]ˆÏ)Db  b  .  vendor/cmb2/cmb2/.agents/skills/beads/SKILL.mdnu „[µü¤        ---
name: beads
description: Use when working in a repository that uses bd or Beads for durable project task tracking, issue dependencies, blocker management, multi-session handoff, or shared work memory. Trigger when the user asks to find ready work, claim or close tasks, create follow-up work, inspect blockers, recover project context, or choose between local planning and persistent project tracking.
---

# Beads

Use Beads as the shared project task system. Local plans, scratch files, and personal memories are useful, but they are not the durable source of truth for project work.

## First Step

Run:

```bash
bd prime
```

If that prints nothing, check whether the repository has an active Beads workspace:

```bash
bd where
```

## Preferred Route

Use the `bd` CLI when shell access is available. It is the most compact and direct Beads interface.

## Core CLI Workflow

1. Find work:

```bash
bd ready
bd list --status=open
bd list --status=in_progress
```

2. Inspect before editing:

```bash
bd show <id>
```

3. Claim work atomically:

```bash
bd update <id> --claim
```

4. Create durable follow-up work when implementation reveals new tasks:

```bash
bd create "Short title" --description="Why this exists and what needs to be done" --type=task --priority=2
```

5. Close completed work:

```bash
bd close <id> --reason="Completed"
```

## What Belongs In Beads

Use Beads for:

- shared project tasks
- blockers and dependencies
- discovered follow-up work
- work that must survive thread reset, compaction, or handoff
- status that another person or agent should be able to resume

Use agent-local planning tools only for the current turn's execution checklist. Do not treat them as shared project state.

## Rules

- Do not create markdown TODO files as the source of truth when Beads is available.
- Do not use `bd edit`; it opens an interactive editor. Use `bd update` flags instead.
- Prefer `--json` when parsing `bd` output programmatically.
- If hooks are installed, `bd prime` may already be injected. Run it manually when context is missing.
- Do not auto-close or mutate tasks unless the work is actually complete.
PK     ƒŠU]'í!ž¯   ¯   8  vendor/cmb2/cmb2/.agents/skills/beads/agents/openai.yamlnu „[µü¤        interface:
  display_name: "Beads"
  short_description: "Project task tracking with bd"
  default_prompt: "Use $beads to inspect ready work and manage durable project tasks."
PK     ƒŠU]ÞRM"˜  "˜  !  vendor/cmb2/cmb2/css/cmb2-rtl.cssnu „[µü¤        /*!
 * CMB2 - v2.12.0 - 2026-05-31
 * https://cmb2.io
 * Copyright (c) 2026
 * Licensed GPLv2+
 */

/*--------------------------------------------------------------
 * Main Wrap
--------------------------------------------------------------*/
.cmb2-wrap {
  margin: 0;
}
.cmb2-wrap input,
.cmb2-wrap textarea {
  max-width: 100%;
}
.cmb2-wrap input[type=text].cmb2-oembed {
  width: 100%;
}
.cmb2-wrap textarea {
  width: 500px;
  padding: 8px;
}
.cmb2-wrap textarea.cmb2-textarea-code {
  font-family: "Courier 10 Pitch", Courier, monospace;
  line-height: 16px;
}
.cmb2-wrap input.cmb2-text-small, .cmb2-wrap input.cmb2-timepicker {
  width: 100px;
}
.cmb2-wrap input.cmb2-text-money {
  width: 90px;
}
.cmb2-wrap input.cmb2-text-medium {
  width: 230px;
}
.cmb2-wrap input.cmb2-upload-file {
  width: 65%;
}
.cmb2-wrap input.ed_button {
  padding: 2px 4px;
}
.cmb2-wrap input:not([type=hidden]) + input,
.cmb2-wrap input:not([type=hidden]) + .button-secondary,
.cmb2-wrap input:not([type=hidden]) + select {
  margin-right: 20px;
}
.cmb2-wrap ul {
  margin: 0;
}
.cmb2-wrap li {
  font-size: 14px;
  line-height: 16px;
  margin: 1px 0 5px 0;
}
.cmb2-wrap select {
  font-size: 14px;
  margin-top: 3px;
}
.cmb2-wrap input[type=radio] {
  margin: 0 0 0 5px;
  padding: 0;
}
.cmb2-wrap input[type=checkbox] {
  margin: 0 0 0 5px;
  padding: 0;
}
.cmb2-wrap button,
.cmb2-wrap .button-secondary {
  white-space: nowrap;
}
.cmb2-wrap .mceLayout {
  border: 1px solid #e9e9e9 !important;
}
.cmb2-wrap .mceIframeContainer {
  background: #ffffff;
}
.cmb2-wrap .meta_mce {
  width: 97%;
}
.cmb2-wrap .meta_mce textarea {
  width: 100%;
}
.cmb2-wrap .cmb-multicheck-toggle {
  margin-top: -1em;
}
.cmb2-wrap .wp-picker-clear.button,
.cmb2-wrap .wp-picker-default.button {
  margin-right: 6px;
  padding: 2px 8px;
}
.cmb2-wrap .cmb-row {
  margin: 0;
}
.cmb2-wrap .cmb-row:after {
  content: "";
  clear: both;
  display: block;
  width: 100%;
}
.cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description {
  padding-top: 0;
  padding-bottom: 1em;
}

body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before {
  margin: 0.1875rem;
}
@media screen and (max-width: 782px) {
  body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before {
    margin: 0.4375rem;
  }
}

.cmb2-metabox {
  clear: both;
  margin: 0;
}
.cmb2-metabox > .cmb-row:first-of-type > .cmb-td,
.cmb2-metabox > .cmb-row:first-of-type > .cmb-th,
.cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-td,
.cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-th {
  border: 0;
}

.cmb-add-row {
  margin: 1.8em 0 0;
}

.cmb-nested .cmb-td,
.cmb-repeatable-group .cmb-th,
.cmb-repeatable-group:first-of-type {
  border: 0;
}

.cmb-row:last-of-type,
.cmb2-wrap .cmb-row:last-of-type,
.cmb-repeatable-group:last-of-type {
  border-bottom: 0;
}

.cmb-repeatable-grouping {
  border: 1px solid #e9e9e9;
  padding: 0 1em;
}
.cmb-repeatable-grouping.cmb-row {
  margin: 0 0 0.8em;
}
.cmb-th {
  color: #222222;
  float: right;
  font-weight: 600;
  padding: 20px 0 20px 10px;
  vertical-align: top;
  width: 200px;
}
@media (max-width: 450px) {
  .cmb-th {
    font-size: 1.2em;
    display: block;
    float: none;
    padding-bottom: 1em;
    text-align: right;
    width: 100%;
  }
  .cmb-th label {
    display: block;
    margin-top: 0;
    margin-bottom: 0.5em;
  }
}

.cmb-td {
  line-height: 1.3;
  max-width: 100%;
  padding: 15px 10px;
  vertical-align: middle;
}

.cmb-type-title .cmb-td {
  padding: 0;
}

.cmb-th label {
  display: block;
  padding: 5px 0;
}

.cmb-th + .cmb-td {
  float: right;
}

.cmb-td .cmb-td {
  padding-bottom: 1em;
}

.cmb-remove-row {
  text-align: left;
}

.empty-row.hidden {
  display: none;
}

.cmb-repeat-table {
  background-color: #fafafa;
  border: 1px solid rgb(225.35, 225.35, 225.35);
}
.cmb-repeat-table .cmb-row.cmb-repeat-row {
  position: relative;
  counter-increment: el;
  margin: 0;
  padding: 10px 50px 10px 10px;
  border-bottom: none !important;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row + .cmb-repeat-row {
  border-top: solid 1px #e9e9e9;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row.ui-sortable-helper {
  outline: dashed 2px #e9e9e9 !important;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row:before {
  content: counter(el);
  display: block;
  top: 0;
  right: 0;
  position: absolute;
  width: 35px;
  height: 100%;
  line-height: 35px;
  cursor: move;
  color: #757575;
  text-align: center;
  border-left: solid 1px #e9e9e9;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row .cmb-td {
  margin: 0;
  padding: 0;
}
.cmb-repeat-table + .cmb-add-row {
  margin: 0;
}
.cmb-repeat-table + .cmb-add-row:before {
  content: "";
  width: 1px;
  height: 1.6em;
  display: block;
  margin-right: 17px;
  background-color: rgb(220.25, 220.25, 220.25);
}
.cmb-repeat-table .cmb-remove-row {
  top: 7px;
  left: 7px;
  position: absolute;
  width: auto;
  margin-right: 0;
  padding: 0 !important;
  display: none;
}
.cmb-repeat-table .cmb-remove-row > .cmb-remove-row-button {
  font-size: 20px;
  text-indent: -1000px;
  overflow: hidden;
  position: relative;
  height: auto;
  line-height: 1;
  padding: 0 10px 0;
}
.cmb-repeat-table .cmb-remove-row > .cmb-remove-row-button:before {
  content: "\f335";
  font-family: "Dashicons";
  speak: none;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  margin: 0;
  text-indent: 0;
  position: absolute;
  top: 0;
  right: 0;
  width: 100%;
  height: 100%;
  text-align: center;
  line-height: 1.3;
}
.cmb-repeat-table .cmb-repeat-row:hover .cmb-remove-row {
  display: block;
}

.cmb-repeatable-group .cmb-th {
  padding: 5px;
}
.cmb-repeatable-group .cmb-group-title {
  background-color: #e9e9e9;
  padding: 8px 2.2em 8px 12px;
  margin: 0 -1em;
  min-height: 1.5em;
  font-size: 14px;
  line-height: 1.4;
}
.cmb-repeatable-group .cmb-group-title h4 {
  border: 0;
  margin: 0;
  font-size: 1.2em;
  font-weight: 500;
  padding: 0.5em 0.75em;
}
.cmb-repeatable-group .cmb-group-title .cmb-th {
  display: block;
  width: 100%;
}
.cmb-repeatable-group .cmb-group-description .cmb-th {
  font-size: 1.2em;
  display: block;
  float: none;
  padding-bottom: 1em;
  text-align: right;
  width: 100%;
}
.cmb-repeatable-group .cmb-group-description .cmb-th label {
  display: block;
  margin-top: 0;
  margin-bottom: 0.5em;
}
.cmb-repeatable-group .cmb-shift-rows {
  margin-left: 1em;
}
.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-up-alt2 {
  margin-top: 0.15em;
}
.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-down-alt2 {
  margin-top: 0.2em;
}
.cmb-repeatable-group .cmb2-upload-button {
  float: left;
}

p.cmb2-metabox-description {
  color: #666;
  letter-spacing: 0.01em;
  margin: 0;
  padding-top: 0.5em;
}

span.cmb2-metabox-description {
  color: #666;
  letter-spacing: 0.01em;
}

.cmb2-metabox-title {
  margin: 0 0 5px 0;
  padding: 5px 0 0 0;
  font-size: 14px;
}

.cmb-inline ul {
  padding: 4px 0 0 0;
}

.cmb-inline li {
  display: inline-block;
  padding-left: 18px;
}

.cmb-type-textarea-code pre {
  margin: 0;
}

.cmb2-media-status .img-status {
  clear: none;
  display: inline-block;
  vertical-align: middle;
  margin-left: 10px;
  width: auto;
}
.cmb2-media-status .img-status img {
  max-width: 350px;
  height: auto;
}
.cmb2-media-status .img-status img,
.cmb2-media-status .embed-status {
  background: #eee;
  border: 5px solid #ffffff;
  outline: 1px solid #e9e9e9;
  box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
  background-image: linear-gradient(-45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0);
  background-position: 100% 0, right 10px top 10px;
  background-size: 20px 20px;
  border-radius: 2px;
  -moz-border-radius: 2px;
  margin: 15px 0 0 0;
}
.cmb2-media-status .embed-status {
  float: right;
  max-width: 800px;
}
.cmb2-media-status .img-status, .cmb2-media-status .embed-status {
  position: relative;
}
.cmb2-media-status .img-status .cmb2-remove-file-button, .cmb2-media-status .embed-status .cmb2-remove-file-button {
  background: url(../images/ico-delete.png);
  height: 16px;
  right: -5px;
  position: absolute;
  text-indent: -9999px;
  top: -5px;
  width: 16px;
}
.cmb2-media-status .img-status .cmb2-remove-file-button {
  top: 10px;
}
.cmb2-media-status .img-status img, .cmb2-media-status .file-status > span {
  cursor: pointer;
}
.cmb2-media-status.cmb-attach-list .img-status img, .cmb2-media-status.cmb-attach-list .file-status > span {
  cursor: move;
}

.cmb-type-file-list .cmb2-media-status .img-status {
  clear: none;
  vertical-align: middle;
  width: auto;
  margin-left: 10px;
  margin-bottom: 10px;
  margin-top: 0;
}

.cmb-attach-list li {
  clear: both;
  display: inline-block;
  width: 100%;
  margin-top: 5px;
  margin-bottom: 10px;
}
.cmb-attach-list li img {
  float: right;
  margin-left: 10px;
}

.cmb2-remove-wrapper {
  margin: 0;
}

.child-cmb2 .cmb-th {
  text-align: right;
}

.cmb2-indented-hierarchy {
  padding-right: 1.5em;
}

@media (max-width: 450px) {
  .cmb-th,
  .cmb-td,
  .cmb-th + .cmb-td {
    display: block;
    float: none;
    width: 100%;
  }
}
/*--------------------------------------------------------------
 * Post Metaboxes
--------------------------------------------------------------*/
#poststuff .cmb-group-title {
  margin-right: -1em;
  margin-left: -1em;
  min-height: 1.5em;
}

#poststuff .repeatable .cmb-group-title {
  padding-right: 2.2em;
}

.cmb2-postbox .cmb2-wrap, .cmb-type-group .cmb2-wrap {
  margin: 0;
}
.cmb2-postbox .cmb2-wrap > .cmb-field-list > .cmb-row, .cmb-type-group .cmb2-wrap > .cmb-field-list > .cmb-row {
  padding: 1.8em 0;
}
.cmb2-postbox .cmb2-wrap input[type=text].cmb2-oembed, .cmb-type-group .cmb2-wrap input[type=text].cmb2-oembed {
  width: 100%;
}
.cmb2-postbox .cmb-row, .cmb-type-group .cmb-row {
  padding: 0 0 1.8em;
  margin: 0 0 0.8em;
}
.cmb2-postbox .cmb-row .cmbhandle, .cmb-type-group .cmb-row .cmbhandle {
  left: -1em;
  position: relative;
  color: #222222;
}
.cmb2-postbox .cmb-repeatable-grouping, .cmb-type-group .cmb-repeatable-grouping {
  padding: 0 1em;
  max-width: 100%;
  min-width: 1px !important;
}
.cmb2-postbox .cmb-repeatable-group > .cmb-row, .cmb-type-group .cmb-repeatable-group > .cmb-row {
  padding-bottom: 0;
}
.cmb2-postbox .cmb-th, .cmb-type-group .cmb-th {
  width: 18%;
  padding: 0 0 0 2%;
}
.cmb2-postbox .cmb-td, .cmb-type-group .cmb-td {
  margin-bottom: 0;
  padding: 0;
  line-height: 1.3;
}
.cmb2-postbox .cmb-th + .cmb-td, .cmb-type-group .cmb-th + .cmb-td {
  width: 80%;
  float: left;
}
.cmb2-postbox .cmb-row:not(:last-of-type),
.cmb2-postbox .cmb-repeatable-group:not(:last-of-type), .cmb-type-group .cmb-row:not(:last-of-type),
.cmb-type-group .cmb-repeatable-group:not(:last-of-type) {
  border-bottom: 1px solid #e9e9e9;
}
@media (max-width: 450px) {
  .cmb2-postbox .cmb-row:not(:last-of-type),
  .cmb2-postbox .cmb-repeatable-group:not(:last-of-type), .cmb-type-group .cmb-row:not(:last-of-type),
  .cmb-type-group .cmb-repeatable-group:not(:last-of-type) {
    border-bottom: 0;
  }
}
.cmb2-postbox .cmb-repeat-group-field,
.cmb2-postbox .cmb-remove-field-row, .cmb-type-group .cmb-repeat-group-field,
.cmb-type-group .cmb-remove-field-row {
  padding-top: 1.8em;
}
.cmb2-postbox .button-secondary .dashicons, .cmb-type-group .button-secondary .dashicons {
  line-height: 1.3;
}
.cmb2-postbox .button-secondary.move-up .dashicons, .cmb2-postbox .button-secondary.move-down .dashicons, .cmb-type-group .button-secondary.move-up .dashicons, .cmb-type-group .button-secondary.move-down .dashicons {
  line-height: 1.1;
}
.cmb2-postbox .button-secondary.cmb-add-group-row .dashicons, .cmb-type-group .button-secondary.cmb-add-group-row .dashicons {
  line-height: 1.5;
}

/*--------------------------------------------------------------
 * Context Metaboxes
--------------------------------------------------------------*/
/* Metabox collapse arrow indicators */
.js .cmb2-postbox.context-box .handlediv {
  text-align: center;
}
.js .cmb2-postbox.context-box .toggle-indicator:before {
  content: "\f142";
  display: inline-block;
  font: normal 20px/1 dashicons;
  speak: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-decoration: none !important;
}
.js .cmb2-postbox.context-box.closed .toggle-indicator:before {
  content: "\f140";
}

.cmb2-postbox.context-box {
  margin-bottom: 10px;
}
.cmb2-postbox.context-box.context-before_permalink-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-after_title-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-after_editor-box {
  margin-top: 20px;
  margin-bottom: 0;
}
.cmb2-postbox.context-box.context-form_top-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-form_top-box .hndle {
  font-size: 14px;
  padding: 8px 12px;
  margin: 0;
  line-height: 1.4;
}
.cmb2-postbox.context-box .hndle {
  cursor: auto;
}

.cmb2-context-wrap {
  margin-top: 10px;
}
.cmb2-context-wrap.cmb2-context-wrap-form_top {
  margin-left: 300px;
  width: auto;
}
.cmb2-context-wrap.cmb2-context-wrap-no-title .cmb2-metabox {
  padding: 10px;
}
.cmb2-context-wrap .cmb-th {
  padding: 0 0 0 2%;
  width: 18%;
}
.cmb2-context-wrap .cmb-td {
  width: 80%;
  padding: 0;
}
.cmb2-context-wrap .cmb-row {
  margin-bottom: 10px;
}
.cmb2-context-wrap .cmb-row:last-of-type {
  margin-bottom: 0;
}

/* one column on the post write/edit screen */
@media only screen and (max-width: 850px) {
  .cmb2-context-wrap.cmb2-context-wrap-form_top {
    margin-left: 0;
  }
}
/*--------------------------------------------------------------
 * Options page
--------------------------------------------------------------*/
.cmb2-options-page {
  max-width: 1200px;
}
.cmb2-options-page.wrap > h2 {
  margin-bottom: 1em;
}
.cmb2-options-page .cmb2-metabox > .cmb-row {
  padding: 1em;
  margin-top: -1px;
  background: #ffffff;
  border: 1px solid #e9e9e9;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th {
  padding: 0;
  font-weight: initial;
}
.cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th + .cmb-td {
  float: none;
  padding: 0 1em 0 0;
  margin-right: 200px;
}
@media (max-width: 450px) {
  .cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th + .cmb-td {
    padding: 0;
    margin-right: 0;
  }
}
.cmb2-options-page .cmb2-wrap .cmb-type-title {
  margin-top: 1em;
  padding: 0.6em 1em;
  background-color: #fafafa;
}
.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-title {
  font-size: 12px;
  margin-top: 0;
  margin-bottom: 0;
  text-transform: uppercase;
}
.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-description {
  padding-top: 0.25em;
}
.cmb2-options-page .cmb-repeatable-group .cmb-group-description .cmb-th {
  padding: 0 0 0.8em 0;
}
.cmb2-options-page .cmb-repeatable-group .cmb-group-name {
  font-size: 16px;
  margin-top: 0;
  margin-bottom: 0;
}
.cmb2-options-page .cmb-repeatable-group .cmb-th > .cmb2-metabox-description {
  font-weight: 400;
  padding-bottom: 0 !important;
}

/*--------------------------------------------------------------
 * New-Term Page
--------------------------------------------------------------*/
#addtag .cmb-th {
  float: none;
  width: auto;
  padding: 20px 0 0;
}
#addtag .cmb-td {
  padding: 0;
}
#addtag .cmb-th + .cmb-td {
  float: none;
}
#addtag select {
  max-width: 100%;
}
#addtag .cmb2-metabox {
  padding-bottom: 20px;
}
#addtag .cmb-row li label {
  display: inline;
}

/*--------------------------------------------------------------
 * Misc.
--------------------------------------------------------------*/
#poststuff .cmb-repeatable-group h2 {
  margin: 0;
}

.edit-tags-php .cmb2-metabox-title,
.profile-php .cmb2-metabox-title,
.user-edit-php .cmb2-metabox-title {
  font-size: 1.4em;
}

.cmb2-postbox .cmb-spinner, .cmb2-no-box-wrap .cmb-spinner {
  float: right;
  display: none;
}

.cmb-spinner {
  display: none;
}
.cmb-spinner.is-active {
  display: block;
}

/*--------------------------------------------------------------
 * Sidebar Placement Adjustments
--------------------------------------------------------------*/
.inner-sidebar .cmb2-wrap > .cmb-field-list > .cmb-row,
#side-sortables .cmb2-wrap > .cmb-field-list > .cmb-row {
  padding: 1.4em 0;
}
.inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker),
#side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker) {
  width: 100%;
}
.inner-sidebar .cmb2-wrap input + input:not(.wp-picker-clear), .inner-sidebar .cmb2-wrap input + select,
#side-sortables .cmb2-wrap input + input:not(.wp-picker-clear),
#side-sortables .cmb2-wrap input + select {
  margin-right: 0;
  margin-top: 1em;
  display: block;
}
.inner-sidebar .cmb2-wrap input.cmb2-text-money,
#side-sortables .cmb2-wrap input.cmb2-text-money {
  max-width: 70%;
}
.inner-sidebar .cmb2-wrap input.cmb2-text-money + .cmb2-metabox-description,
#side-sortables .cmb2-wrap input.cmb2-text-money + .cmb2-metabox-description {
  display: block;
}
.inner-sidebar .cmb2-wrap label,
#side-sortables .cmb2-wrap label {
  display: block;
  font-weight: 700;
  padding: 0 0 5px;
}
.inner-sidebar textarea,
#side-sortables textarea {
  max-width: 99%;
}
.inner-sidebar .cmb-repeatable-group,
#side-sortables .cmb-repeatable-group {
  border-bottom: 1px solid #e9e9e9;
}
.inner-sidebar .cmb-type-group > .cmb-td > .cmb-repeatable-group,
#side-sortables .cmb-type-group > .cmb-td > .cmb-repeatable-group {
  border-bottom: 0;
  margin-bottom: -1.4em;
}
.inner-sidebar .cmb-th,
.inner-sidebar .cmb-td:not(.cmb-remove-row),
.inner-sidebar .cmb-th + .cmb-td,
#side-sortables .cmb-th,
#side-sortables .cmb-td:not(.cmb-remove-row),
#side-sortables .cmb-th + .cmb-td {
  width: 100%;
  display: block;
  float: none;
}
.inner-sidebar .closed .inside,
#side-sortables .closed .inside {
  display: none;
}
.inner-sidebar .cmb-th,
#side-sortables .cmb-th {
  display: block;
  float: none;
  padding-bottom: 1em;
  text-align: right;
  width: 100%;
}
.inner-sidebar .cmb-th label,
#side-sortables .cmb-th label {
  display: block;
  margin-top: 0;
  margin-bottom: 0.5em;
}
.inner-sidebar .cmb-th label,
#side-sortables .cmb-th label {
  font-size: 14px;
  line-height: 1.4em;
}
.inner-sidebar .cmb-th,
#side-sortables .cmb-th {
  padding-right: 0;
  padding-left: 0;
}
.inner-sidebar .cmb-group-description .cmb-th,
#side-sortables .cmb-group-description .cmb-th {
  padding-top: 0;
}
.inner-sidebar .cmb-group-description .cmb2-metabox-description,
#side-sortables .cmb-group-description .cmb2-metabox-description {
  padding: 0;
}
.inner-sidebar .cmb-group-title .cmb-th,
#side-sortables .cmb-group-title .cmb-th {
  padding: 0;
}
.inner-sidebar .cmb-repeatable-grouping + .cmb-repeatable-grouping,
#side-sortables .cmb-repeatable-grouping + .cmb-repeatable-grouping {
  margin-top: 1em;
}
.inner-sidebar .cmb2-media-status .img-status img,
.inner-sidebar .cmb2-media-status .embed-status img,
#side-sortables .cmb2-media-status .img-status img,
#side-sortables .cmb2-media-status .embed-status img {
  max-width: 90%;
  height: auto;
}
.inner-sidebar .cmb2-list label,
#side-sortables .cmb2-list label {
  display: inline;
  font-weight: normal;
}
.inner-sidebar .cmb2-metabox-description,
#side-sortables .cmb2-metabox-description {
  display: block;
  padding: 7px 0 0;
}
.inner-sidebar .cmb-type-checkbox .cmb-td label,
.inner-sidebar .cmb-type-checkbox .cmb2-metabox-description,
#side-sortables .cmb-type-checkbox .cmb-td label,
#side-sortables .cmb-type-checkbox .cmb2-metabox-description {
  font-weight: normal;
  display: inline;
}
.inner-sidebar .cmb-row .cmb2-metabox-description,
#side-sortables .cmb-row .cmb2-metabox-description {
  padding-bottom: 1.8em;
}
.inner-sidebar .cmb2-metabox-title,
#side-sortables .cmb2-metabox-title {
  font-size: 1.2em;
  font-style: italic;
}
.inner-sidebar .cmb-remove-row,
#side-sortables .cmb-remove-row {
  clear: both;
  padding-top: 12px;
  padding-bottom: 0;
}
.inner-sidebar .cmb2-upload-button,
#side-sortables .cmb2-upload-button {
  clear: both;
  margin-top: 12px;
}

/*--------------------------------------------------------------
 * Collapsible UI
--------------------------------------------------------------*/
.cmb2-metabox .cmbhandle {
  color: #757575;
  float: left;
  width: 27px;
  height: 30px;
  cursor: pointer;
  left: -1em;
  position: relative;
}
.cmb2-metabox .cmbhandle:before {
  content: "\f142";
  left: 12px;
  font: normal 20px/1 "dashicons";
  speak: none;
  display: inline-block;
  padding: 8px 10px;
  top: 0;
  position: relative;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-decoration: none !important;
}
.cmb2-metabox .postbox.closed .cmbhandle:before {
  content: "\f140";
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row {
  -webkit-appearance: none !important;
  background: none !important;
  border: none !important;
  position: absolute;
  right: 0;
  top: 0.5em;
  line-height: 1em;
  padding: 2px 6px 3px;
  opacity: 0.5;
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]) {
  cursor: pointer;
  color: #a00;
  opacity: 1;
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover {
  color: #f00;
}

/*
 * jQuery UI CSS Framework 1.8.16
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Theming/API
 *
 * WordPress Styles adopted from "jQuery UI Datepicker CSS for WordPress"
 * https://github.com/stuttter/wp-datepicker-styling
 *
 */
* html .cmb2-element.ui-helper-clearfix {
  height: 1%;
}

.cmb2-element.ui-datepicker, .cmb2-element .ui-datepicker {
  padding: 0;
  margin: 0;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
  background-color: #fff;
  border: 1px solid #dfdfdf;
  border-top: none;
  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
  min-width: 17em;
  width: auto;
}
.cmb2-element.ui-datepicker *, .cmb2-element .ui-datepicker * {
  padding: 0;
  font-family: "Open Sans", sans-serif;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
}
.cmb2-element.ui-datepicker table, .cmb2-element .ui-datepicker table {
  font-size: 13px;
  margin: 0;
  border: none;
  border-collapse: collapse;
}
.cmb2-element.ui-datepicker .ui-widget-header,
.cmb2-element.ui-datepicker .ui-datepicker-header, .cmb2-element .ui-datepicker .ui-widget-header,
.cmb2-element .ui-datepicker .ui-datepicker-header {
  background-image: none;
  border: none;
  color: #fff;
  font-weight: normal;
}
.cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover, .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover {
  background: transparent;
  border-color: transparent;
  cursor: pointer;
}
.cmb2-element.ui-datepicker .ui-datepicker-title, .cmb2-element .ui-datepicker .ui-datepicker-title {
  margin: 0;
  padding: 10px 0;
  color: #fff;
  font-size: 14px;
  line-height: 14px;
  text-align: center;
}
.cmb2-element.ui-datepicker .ui-datepicker-title select, .cmb2-element .ui-datepicker .ui-datepicker-title select {
  margin-top: -8px;
  margin-bottom: -8px;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-datepicker-next, .cmb2-element .ui-datepicker .ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-datepicker-next {
  position: relative;
  top: 0;
  height: 34px;
  width: 34px;
}
.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-next, .cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-next {
  border: none;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-datepicker-prev-hover, .cmb2-element .ui-datepicker .ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-datepicker-prev-hover {
  right: 0;
}
.cmb2-element.ui-datepicker .ui-datepicker-next,
.cmb2-element.ui-datepicker .ui-datepicker-next-hover, .cmb2-element .ui-datepicker .ui-datepicker-next,
.cmb2-element .ui-datepicker .ui-datepicker-next-hover {
  left: 0;
}
.cmb2-element.ui-datepicker .ui-datepicker-next span,
.cmb2-element.ui-datepicker .ui-datepicker-prev span, .cmb2-element .ui-datepicker .ui-datepicker-next span,
.cmb2-element .ui-datepicker .ui-datepicker-prev span {
  display: none;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev, .cmb2-element .ui-datepicker .ui-datepicker-prev {
  float: right;
}
.cmb2-element.ui-datepicker .ui-datepicker-next, .cmb2-element .ui-datepicker .ui-datepicker-next {
  float: left;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev:before,
.cmb2-element.ui-datepicker .ui-datepicker-next:before, .cmb2-element .ui-datepicker .ui-datepicker-prev:before,
.cmb2-element .ui-datepicker .ui-datepicker-next:before {
  font: normal 20px/34px "dashicons";
  padding-right: 7px;
  color: #fff;
  speak: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 34px;
  height: 34px;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev:before, .cmb2-element .ui-datepicker .ui-datepicker-prev:before {
  content: "\f341";
}
.cmb2-element.ui-datepicker .ui-datepicker-next:before, .cmb2-element .ui-datepicker .ui-datepicker-next:before {
  content: "\f345";
}
.cmb2-element.ui-datepicker .ui-datepicker-prev-hover:before,
.cmb2-element.ui-datepicker .ui-datepicker-next-hover:before, .cmb2-element .ui-datepicker .ui-datepicker-prev-hover:before,
.cmb2-element .ui-datepicker .ui-datepicker-next-hover:before {
  opacity: 0.7;
}
.cmb2-element.ui-datepicker select.ui-datepicker-month,
.cmb2-element.ui-datepicker select.ui-datepicker-year, .cmb2-element .ui-datepicker select.ui-datepicker-month,
.cmb2-element .ui-datepicker select.ui-datepicker-year {
  width: 33%;
  background: transparent;
  border-color: transparent;
  box-shadow: none;
  color: #fff;
}
.cmb2-element.ui-datepicker select.ui-datepicker-month option,
.cmb2-element.ui-datepicker select.ui-datepicker-year option, .cmb2-element .ui-datepicker select.ui-datepicker-month option,
.cmb2-element .ui-datepicker select.ui-datepicker-year option {
  color: #333;
}
.cmb2-element.ui-datepicker thead, .cmb2-element .ui-datepicker thead {
  color: #fff;
  font-weight: 600;
}
.cmb2-element.ui-datepicker thead th, .cmb2-element .ui-datepicker thead th {
  font-weight: normal;
}
.cmb2-element.ui-datepicker th, .cmb2-element .ui-datepicker th {
  padding: 10px;
}
.cmb2-element.ui-datepicker td, .cmb2-element .ui-datepicker td {
  padding: 0;
  border: 1px solid #f4f4f4;
}
.cmb2-element.ui-datepicker td.ui-datepicker-other-month, .cmb2-element .ui-datepicker td.ui-datepicker-other-month {
  border: transparent;
}
.cmb2-element.ui-datepicker td.ui-datepicker-week-end, .cmb2-element .ui-datepicker td.ui-datepicker-week-end {
  background-color: #f4f4f4;
  border: 1px solid #f4f4f4;
}
.cmb2-element.ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today, .cmb2-element .ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today {
  -webkit-box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
  -moz-box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
}
.cmb2-element.ui-datepicker td.ui-datepicker-today, .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background-color: #f0f0c0;
}
.cmb2-element.ui-datepicker td.ui-datepicker-current-day, .cmb2-element .ui-datepicker td.ui-datepicker-current-day {
  background: #bbdd88;
}
.cmb2-element.ui-datepicker td .ui-state-default, .cmb2-element .ui-datepicker td .ui-state-default {
  background: transparent;
  border: none;
  text-align: center;
  text-decoration: none;
  width: auto;
  display: block;
  padding: 5px 10px;
  font-weight: normal;
  color: #444;
}
.cmb2-element.ui-datepicker td.ui-state-disabled .ui-state-default, .cmb2-element .ui-datepicker td.ui-state-disabled .ui-state-default {
  opacity: 0.5;
}
.cmb2-element.ui-datepicker, .cmb2-element .ui-datepicker {
  /* Default Color Scheme */
}
.cmb2-element.ui-datepicker .ui-widget-header,
.cmb2-element.ui-datepicker .ui-datepicker-header, .cmb2-element .ui-datepicker .ui-widget-header,
.cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #00a0d2;
}
.cmb2-element.ui-datepicker thead, .cmb2-element .ui-datepicker thead {
  background: #32373c;
}
.cmb2-element.ui-datepicker td .ui-state-hover, .cmb2-element.ui-datepicker td .ui-state-active, .cmb2-element .ui-datepicker td .ui-state-hover, .cmb2-element .ui-datepicker td .ui-state-active {
  background: #0073aa;
  color: #fff;
}
.cmb2-element.ui-datepicker .ui-timepicker-div, .cmb2-element .ui-datepicker .ui-timepicker-div {
  font-size: 14px;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl, .cmb2-element .ui-datepicker .ui-timepicker-div dl {
  text-align: right;
  padding: 0 0.6em;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dt, .cmb2-element .ui-datepicker .ui-timepicker-div dl dt {
  float: right;
  clear: right;
  padding: 0 5px 0 0;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dd, .cmb2-element .ui-datepicker .ui-timepicker-div dl dd {
  margin: 0 40% 10px 10px;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dd select, .cmb2-element .ui-datepicker .ui-timepicker-div dl dd select {
  width: 100%;
}
.cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane {
  padding: 0.6em;
  text-align: right;
}
.cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-primary, .cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-secondary, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-primary, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-secondary {
  padding: 0 10px 1px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  margin: 0 0.4em 0.4em 0.6em;
}

.admin-color-fresh .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-fresh .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-fresh .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-fresh .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #00a0d2;
}
.admin-color-fresh .cmb2-element.ui-datepicker thead, .admin-color-fresh .cmb2-element .ui-datepicker thead {
  background: #32373c;
}
.admin-color-fresh .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-fresh .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #0073aa;
  color: #fff;
}

.admin-color-blue .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-blue .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-blue .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-blue .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #52accc;
}
.admin-color-blue .cmb2-element.ui-datepicker thead, .admin-color-blue .cmb2-element .ui-datepicker thead {
  background: #4796b3;
}
.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-blue .cmb2-element.ui-datepicker td .ui-state-active, .admin-color-blue .cmb2-element .ui-datepicker td .ui-state-hover, .admin-color-blue .cmb2-element .ui-datepicker td .ui-state-active {
  background: #096484;
  color: #fff;
}
.admin-color-blue .cmb2-element.ui-datepicker td.ui-datepicker-today, .admin-color-blue .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background: #eee;
}

.admin-color-coffee .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-coffee .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-coffee .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-coffee .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #59524c;
}
.admin-color-coffee .cmb2-element.ui-datepicker thead, .admin-color-coffee .cmb2-element .ui-datepicker thead {
  background: #46403c;
}
.admin-color-coffee .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-coffee .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #c7a589;
  color: #fff;
}

.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #523f6d;
}
.admin-color-ectoplasm .cmb2-element.ui-datepicker thead, .admin-color-ectoplasm .cmb2-element .ui-datepicker thead {
  background: #413256;
}
.admin-color-ectoplasm .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-ectoplasm .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #a3b745;
  color: #fff;
}

.admin-color-midnight .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-midnight .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-midnight .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-midnight .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #363b3f;
}
.admin-color-midnight .cmb2-element.ui-datepicker thead, .admin-color-midnight .cmb2-element .ui-datepicker thead {
  background: #26292c;
}
.admin-color-midnight .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-midnight .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #e14d43;
  color: #fff;
}

.admin-color-ocean .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-ocean .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-ocean .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-ocean .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #738e96;
}
.admin-color-ocean .cmb2-element.ui-datepicker thead, .admin-color-ocean .cmb2-element .ui-datepicker thead {
  background: #627c83;
}
.admin-color-ocean .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-ocean .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #9ebaa0;
  color: #fff;
}

.admin-color-sunrise .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header,
.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover, .admin-color-sunrise .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header,
.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover {
  background: #cf4944;
}
.admin-color-sunrise .cmb2-element.ui-datepicker th, .admin-color-sunrise .cmb2-element .ui-datepicker th {
  border-color: #be3631;
  background: #be3631;
}
.admin-color-sunrise .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-sunrise .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #dd823b;
  color: #fff;
}

.admin-color-light .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-light .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #e5e5e5;
}
.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-month,
.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-year, .admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-month,
.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-year {
  color: #555;
}
.admin-color-light .cmb2-element.ui-datepicker thead, .admin-color-light .cmb2-element .ui-datepicker thead {
  background: #888;
}
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-title,
.admin-color-light .cmb2-element.ui-datepicker td .ui-state-default,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-prev:before,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-next:before, .admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-title,
.admin-color-light .cmb2-element .ui-datepicker td .ui-state-default,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-prev:before,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-next:before {
  color: #555;
}
.admin-color-light .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-light .cmb2-element.ui-datepicker td .ui-state-active, .admin-color-light .cmb2-element .ui-datepicker td .ui-state-hover, .admin-color-light .cmb2-element .ui-datepicker td .ui-state-active {
  background: #ccc;
}
.admin-color-light .cmb2-element.ui-datepicker td.ui-datepicker-today, .admin-color-light .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background: #eee;
}

.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #56b274;
}
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker thead, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker thead {
  background: #36533f;
}
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #446950;
  color: #fff;
}

.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #4ca26a;
}
.admin-color-bbp-mint .cmb2-element.ui-datepicker thead, .admin-color-bbp-mint .cmb2-element .ui-datepicker thead {
  background: #4f6d59;
}
.admin-color-bbp-mint .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-bbp-mint .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #5fb37c;
  color: #fff;
}

/*--------------------------------------------------------------
 * Character counter
--------------------------------------------------------------*/
.cmb2-char-counter-wrap {
  margin: 0.5em 0 1em;
}
.cmb2-char-counter-wrap input[type=text] {
  font-size: 12px;
  width: 25px;
}
.cmb2-char-counter-wrap.cmb2-max-exceeded input[type=text] {
  border-color: #a00 !important;
}
.cmb2-char-counter-wrap.cmb2-max-exceeded .cmb2-char-max-msg {
  display: inline-block;
}

.cmb2-char-max-msg {
  color: #a00;
  display: none;
  font-weight: 600;
  margin-right: 1em;
}
PK     ƒŠU]¢»5ö        vendor/cmb2/cmb2/css/index.phpnu „[µü¤        <?php
// Silence is golden
PK     ƒŠU]Ýª…m˜  ˜    vendor/cmb2/cmb2/css/cmb2.cssnu „[µü¤        /*!
 * CMB2 - v2.12.0 - 2026-05-31
 * https://cmb2.io
 * Copyright (c) 2026
 * Licensed GPLv2+
 */

/*--------------------------------------------------------------
 * Main Wrap
--------------------------------------------------------------*/
.cmb2-wrap {
  margin: 0;
}
.cmb2-wrap input,
.cmb2-wrap textarea {
  max-width: 100%;
}
.cmb2-wrap input[type=text].cmb2-oembed {
  width: 100%;
}
.cmb2-wrap textarea {
  width: 500px;
  padding: 8px;
}
.cmb2-wrap textarea.cmb2-textarea-code {
  font-family: "Courier 10 Pitch", Courier, monospace;
  line-height: 16px;
}
.cmb2-wrap input.cmb2-text-small, .cmb2-wrap input.cmb2-timepicker {
  width: 100px;
}
.cmb2-wrap input.cmb2-text-money {
  width: 90px;
}
.cmb2-wrap input.cmb2-text-medium {
  width: 230px;
}
.cmb2-wrap input.cmb2-upload-file {
  width: 65%;
}
.cmb2-wrap input.ed_button {
  padding: 2px 4px;
}
.cmb2-wrap input:not([type=hidden]) + input,
.cmb2-wrap input:not([type=hidden]) + .button-secondary,
.cmb2-wrap input:not([type=hidden]) + select {
  margin-left: 20px;
}
.cmb2-wrap ul {
  margin: 0;
}
.cmb2-wrap li {
  font-size: 14px;
  line-height: 16px;
  margin: 1px 0 5px 0;
}
.cmb2-wrap select {
  font-size: 14px;
  margin-top: 3px;
}
.cmb2-wrap input[type=radio] {
  margin: 0 5px 0 0;
  padding: 0;
}
.cmb2-wrap input[type=checkbox] {
  margin: 0 5px 0 0;
  padding: 0;
}
.cmb2-wrap button,
.cmb2-wrap .button-secondary {
  white-space: nowrap;
}
.cmb2-wrap .mceLayout {
  border: 1px solid #e9e9e9 !important;
}
.cmb2-wrap .mceIframeContainer {
  background: #ffffff;
}
.cmb2-wrap .meta_mce {
  width: 97%;
}
.cmb2-wrap .meta_mce textarea {
  width: 100%;
}
.cmb2-wrap .cmb-multicheck-toggle {
  margin-top: -1em;
}
.cmb2-wrap .wp-picker-clear.button,
.cmb2-wrap .wp-picker-default.button {
  margin-left: 6px;
  padding: 2px 8px;
}
.cmb2-wrap .cmb-row {
  margin: 0;
}
.cmb2-wrap .cmb-row:after {
  content: "";
  clear: both;
  display: block;
  width: 100%;
}
.cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description {
  padding-top: 0;
  padding-bottom: 1em;
}

body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before {
  margin: 0.1875rem;
}
@media screen and (max-width: 782px) {
  body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before {
    margin: 0.4375rem;
  }
}

.cmb2-metabox {
  clear: both;
  margin: 0;
}
.cmb2-metabox > .cmb-row:first-of-type > .cmb-td,
.cmb2-metabox > .cmb-row:first-of-type > .cmb-th,
.cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-td,
.cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-th {
  border: 0;
}

.cmb-add-row {
  margin: 1.8em 0 0;
}

.cmb-nested .cmb-td,
.cmb-repeatable-group .cmb-th,
.cmb-repeatable-group:first-of-type {
  border: 0;
}

.cmb-row:last-of-type,
.cmb2-wrap .cmb-row:last-of-type,
.cmb-repeatable-group:last-of-type {
  border-bottom: 0;
}

.cmb-repeatable-grouping {
  border: 1px solid #e9e9e9;
  padding: 0 1em;
}
.cmb-repeatable-grouping.cmb-row {
  margin: 0 0 0.8em;
}
.cmb-th {
  color: #222222;
  float: left;
  font-weight: 600;
  padding: 20px 10px 20px 0;
  vertical-align: top;
  width: 200px;
}
@media (max-width: 450px) {
  .cmb-th {
    font-size: 1.2em;
    display: block;
    float: none;
    padding-bottom: 1em;
    text-align: left;
    width: 100%;
  }
  .cmb-th label {
    display: block;
    margin-top: 0;
    margin-bottom: 0.5em;
  }
}

.cmb-td {
  line-height: 1.3;
  max-width: 100%;
  padding: 15px 10px;
  vertical-align: middle;
}

.cmb-type-title .cmb-td {
  padding: 0;
}

.cmb-th label {
  display: block;
  padding: 5px 0;
}

.cmb-th + .cmb-td {
  float: left;
}

.cmb-td .cmb-td {
  padding-bottom: 1em;
}

.cmb-remove-row {
  text-align: right;
}

.empty-row.hidden {
  display: none;
}

.cmb-repeat-table {
  background-color: #fafafa;
  border: 1px solid rgb(225.35, 225.35, 225.35);
}
.cmb-repeat-table .cmb-row.cmb-repeat-row {
  position: relative;
  counter-increment: el;
  margin: 0;
  padding: 10px 10px 10px 50px;
  border-bottom: none !important;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row + .cmb-repeat-row {
  border-top: solid 1px #e9e9e9;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row.ui-sortable-helper {
  outline: dashed 2px #e9e9e9 !important;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row:before {
  content: counter(el);
  display: block;
  top: 0;
  left: 0;
  position: absolute;
  width: 35px;
  height: 100%;
  line-height: 35px;
  cursor: move;
  color: #757575;
  text-align: center;
  border-right: solid 1px #e9e9e9;
}
.cmb-repeat-table .cmb-row.cmb-repeat-row .cmb-td {
  margin: 0;
  padding: 0;
}
.cmb-repeat-table + .cmb-add-row {
  margin: 0;
}
.cmb-repeat-table + .cmb-add-row:before {
  content: "";
  width: 1px;
  height: 1.6em;
  display: block;
  margin-left: 17px;
  background-color: rgb(220.25, 220.25, 220.25);
}
.cmb-repeat-table .cmb-remove-row {
  top: 7px;
  right: 7px;
  position: absolute;
  width: auto;
  margin-left: 0;
  padding: 0 !important;
  display: none;
}
.cmb-repeat-table .cmb-remove-row > .cmb-remove-row-button {
  font-size: 20px;
  text-indent: -1000px;
  overflow: hidden;
  position: relative;
  height: auto;
  line-height: 1;
  padding: 0 10px 0;
}
.cmb-repeat-table .cmb-remove-row > .cmb-remove-row-button:before {
  content: "\f335";
  font-family: "Dashicons";
  speak: none;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  margin: 0;
  text-indent: 0;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  text-align: center;
  line-height: 1.3;
}
.cmb-repeat-table .cmb-repeat-row:hover .cmb-remove-row {
  display: block;
}

.cmb-repeatable-group .cmb-th {
  padding: 5px;
}
.cmb-repeatable-group .cmb-group-title {
  background-color: #e9e9e9;
  padding: 8px 12px 8px 2.2em;
  margin: 0 -1em;
  min-height: 1.5em;
  font-size: 14px;
  line-height: 1.4;
}
.cmb-repeatable-group .cmb-group-title h4 {
  border: 0;
  margin: 0;
  font-size: 1.2em;
  font-weight: 500;
  padding: 0.5em 0.75em;
}
.cmb-repeatable-group .cmb-group-title .cmb-th {
  display: block;
  width: 100%;
}
.cmb-repeatable-group .cmb-group-description .cmb-th {
  font-size: 1.2em;
  display: block;
  float: none;
  padding-bottom: 1em;
  text-align: left;
  width: 100%;
}
.cmb-repeatable-group .cmb-group-description .cmb-th label {
  display: block;
  margin-top: 0;
  margin-bottom: 0.5em;
}
.cmb-repeatable-group .cmb-shift-rows {
  margin-right: 1em;
}
.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-up-alt2 {
  margin-top: 0.15em;
}
.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-down-alt2 {
  margin-top: 0.2em;
}
.cmb-repeatable-group .cmb2-upload-button {
  float: right;
}

p.cmb2-metabox-description {
  color: #666;
  letter-spacing: 0.01em;
  margin: 0;
  padding-top: 0.5em;
}

span.cmb2-metabox-description {
  color: #666;
  letter-spacing: 0.01em;
}

.cmb2-metabox-title {
  margin: 0 0 5px 0;
  padding: 5px 0 0 0;
  font-size: 14px;
}

.cmb-inline ul {
  padding: 4px 0 0 0;
}

.cmb-inline li {
  display: inline-block;
  padding-right: 18px;
}

.cmb-type-textarea-code pre {
  margin: 0;
}

.cmb2-media-status .img-status {
  clear: none;
  display: inline-block;
  vertical-align: middle;
  margin-right: 10px;
  width: auto;
}
.cmb2-media-status .img-status img {
  max-width: 350px;
  height: auto;
}
.cmb2-media-status .img-status img,
.cmb2-media-status .embed-status {
  background: #eee;
  border: 5px solid #ffffff;
  outline: 1px solid #e9e9e9;
  box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
  background-image: linear-gradient(45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0), linear-gradient(45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0);
  background-position: 0 0, 10px 10px;
  background-size: 20px 20px;
  border-radius: 2px;
  -moz-border-radius: 2px;
  margin: 15px 0 0 0;
}
.cmb2-media-status .embed-status {
  float: left;
  max-width: 800px;
}
.cmb2-media-status .img-status, .cmb2-media-status .embed-status {
  position: relative;
}
.cmb2-media-status .img-status .cmb2-remove-file-button, .cmb2-media-status .embed-status .cmb2-remove-file-button {
  background: url(../images/ico-delete.png);
  height: 16px;
  left: -5px;
  position: absolute;
  text-indent: -9999px;
  top: -5px;
  width: 16px;
}
.cmb2-media-status .img-status .cmb2-remove-file-button {
  top: 10px;
}
.cmb2-media-status .img-status img, .cmb2-media-status .file-status > span {
  cursor: pointer;
}
.cmb2-media-status.cmb-attach-list .img-status img, .cmb2-media-status.cmb-attach-list .file-status > span {
  cursor: move;
}

.cmb-type-file-list .cmb2-media-status .img-status {
  clear: none;
  vertical-align: middle;
  width: auto;
  margin-right: 10px;
  margin-bottom: 10px;
  margin-top: 0;
}

.cmb-attach-list li {
  clear: both;
  display: inline-block;
  width: 100%;
  margin-top: 5px;
  margin-bottom: 10px;
}
.cmb-attach-list li img {
  float: left;
  margin-right: 10px;
}

.cmb2-remove-wrapper {
  margin: 0;
}

.child-cmb2 .cmb-th {
  text-align: left;
}

.cmb2-indented-hierarchy {
  padding-left: 1.5em;
}

@media (max-width: 450px) {
  .cmb-th,
  .cmb-td,
  .cmb-th + .cmb-td {
    display: block;
    float: none;
    width: 100%;
  }
}
/*--------------------------------------------------------------
 * Post Metaboxes
--------------------------------------------------------------*/
#poststuff .cmb-group-title {
  margin-left: -1em;
  margin-right: -1em;
  min-height: 1.5em;
}

#poststuff .repeatable .cmb-group-title {
  padding-left: 2.2em;
}

.cmb2-postbox .cmb2-wrap, .cmb-type-group .cmb2-wrap {
  margin: 0;
}
.cmb2-postbox .cmb2-wrap > .cmb-field-list > .cmb-row, .cmb-type-group .cmb2-wrap > .cmb-field-list > .cmb-row {
  padding: 1.8em 0;
}
.cmb2-postbox .cmb2-wrap input[type=text].cmb2-oembed, .cmb-type-group .cmb2-wrap input[type=text].cmb2-oembed {
  width: 100%;
}
.cmb2-postbox .cmb-row, .cmb-type-group .cmb-row {
  padding: 0 0 1.8em;
  margin: 0 0 0.8em;
}
.cmb2-postbox .cmb-row .cmbhandle, .cmb-type-group .cmb-row .cmbhandle {
  right: -1em;
  position: relative;
  color: #222222;
}
.cmb2-postbox .cmb-repeatable-grouping, .cmb-type-group .cmb-repeatable-grouping {
  padding: 0 1em;
  max-width: 100%;
  min-width: 1px !important;
}
.cmb2-postbox .cmb-repeatable-group > .cmb-row, .cmb-type-group .cmb-repeatable-group > .cmb-row {
  padding-bottom: 0;
}
.cmb2-postbox .cmb-th, .cmb-type-group .cmb-th {
  width: 18%;
  padding: 0 2% 0 0;
}
.cmb2-postbox .cmb-td, .cmb-type-group .cmb-td {
  margin-bottom: 0;
  padding: 0;
  line-height: 1.3;
}
.cmb2-postbox .cmb-th + .cmb-td, .cmb-type-group .cmb-th + .cmb-td {
  width: 80%;
  float: right;
}
.cmb2-postbox .cmb-row:not(:last-of-type),
.cmb2-postbox .cmb-repeatable-group:not(:last-of-type), .cmb-type-group .cmb-row:not(:last-of-type),
.cmb-type-group .cmb-repeatable-group:not(:last-of-type) {
  border-bottom: 1px solid #e9e9e9;
}
@media (max-width: 450px) {
  .cmb2-postbox .cmb-row:not(:last-of-type),
  .cmb2-postbox .cmb-repeatable-group:not(:last-of-type), .cmb-type-group .cmb-row:not(:last-of-type),
  .cmb-type-group .cmb-repeatable-group:not(:last-of-type) {
    border-bottom: 0;
  }
}
.cmb2-postbox .cmb-repeat-group-field,
.cmb2-postbox .cmb-remove-field-row, .cmb-type-group .cmb-repeat-group-field,
.cmb-type-group .cmb-remove-field-row {
  padding-top: 1.8em;
}
.cmb2-postbox .button-secondary .dashicons, .cmb-type-group .button-secondary .dashicons {
  line-height: 1.3;
}
.cmb2-postbox .button-secondary.move-up .dashicons, .cmb2-postbox .button-secondary.move-down .dashicons, .cmb-type-group .button-secondary.move-up .dashicons, .cmb-type-group .button-secondary.move-down .dashicons {
  line-height: 1.1;
}
.cmb2-postbox .button-secondary.cmb-add-group-row .dashicons, .cmb-type-group .button-secondary.cmb-add-group-row .dashicons {
  line-height: 1.5;
}

/*--------------------------------------------------------------
 * Context Metaboxes
--------------------------------------------------------------*/
/* Metabox collapse arrow indicators */
.js .cmb2-postbox.context-box .handlediv {
  text-align: center;
}
.js .cmb2-postbox.context-box .toggle-indicator:before {
  content: "\f142";
  display: inline-block;
  font: normal 20px/1 dashicons;
  speak: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-decoration: none !important;
}
.js .cmb2-postbox.context-box.closed .toggle-indicator:before {
  content: "\f140";
}

.cmb2-postbox.context-box {
  margin-bottom: 10px;
}
.cmb2-postbox.context-box.context-before_permalink-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-after_title-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-after_editor-box {
  margin-top: 20px;
  margin-bottom: 0;
}
.cmb2-postbox.context-box.context-form_top-box {
  margin-top: 10px;
}
.cmb2-postbox.context-box.context-form_top-box .hndle {
  font-size: 14px;
  padding: 8px 12px;
  margin: 0;
  line-height: 1.4;
}
.cmb2-postbox.context-box .hndle {
  cursor: auto;
}

.cmb2-context-wrap {
  margin-top: 10px;
}
.cmb2-context-wrap.cmb2-context-wrap-form_top {
  margin-right: 300px;
  width: auto;
}
.cmb2-context-wrap.cmb2-context-wrap-no-title .cmb2-metabox {
  padding: 10px;
}
.cmb2-context-wrap .cmb-th {
  padding: 0 2% 0 0;
  width: 18%;
}
.cmb2-context-wrap .cmb-td {
  width: 80%;
  padding: 0;
}
.cmb2-context-wrap .cmb-row {
  margin-bottom: 10px;
}
.cmb2-context-wrap .cmb-row:last-of-type {
  margin-bottom: 0;
}

/* one column on the post write/edit screen */
@media only screen and (max-width: 850px) {
  .cmb2-context-wrap.cmb2-context-wrap-form_top {
    margin-right: 0;
  }
}
/*--------------------------------------------------------------
 * Options page
--------------------------------------------------------------*/
.cmb2-options-page {
  max-width: 1200px;
}
.cmb2-options-page.wrap > h2 {
  margin-bottom: 1em;
}
.cmb2-options-page .cmb2-metabox > .cmb-row {
  padding: 1em;
  margin-top: -1px;
  background: #ffffff;
  border: 1px solid #e9e9e9;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th {
  padding: 0;
  font-weight: initial;
}
.cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th + .cmb-td {
  float: none;
  padding: 0 0 0 1em;
  margin-left: 200px;
}
@media (max-width: 450px) {
  .cmb2-options-page .cmb2-metabox > .cmb-row > .cmb-th + .cmb-td {
    padding: 0;
    margin-left: 0;
  }
}
.cmb2-options-page .cmb2-wrap .cmb-type-title {
  margin-top: 1em;
  padding: 0.6em 1em;
  background-color: #fafafa;
}
.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-title {
  font-size: 12px;
  margin-top: 0;
  margin-bottom: 0;
  text-transform: uppercase;
}
.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-description {
  padding-top: 0.25em;
}
.cmb2-options-page .cmb-repeatable-group .cmb-group-description .cmb-th {
  padding: 0 0 0.8em 0;
}
.cmb2-options-page .cmb-repeatable-group .cmb-group-name {
  font-size: 16px;
  margin-top: 0;
  margin-bottom: 0;
}
.cmb2-options-page .cmb-repeatable-group .cmb-th > .cmb2-metabox-description {
  font-weight: 400;
  padding-bottom: 0 !important;
}

/*--------------------------------------------------------------
 * New-Term Page
--------------------------------------------------------------*/
#addtag .cmb-th {
  float: none;
  width: auto;
  padding: 20px 0 0;
}
#addtag .cmb-td {
  padding: 0;
}
#addtag .cmb-th + .cmb-td {
  float: none;
}
#addtag select {
  max-width: 100%;
}
#addtag .cmb2-metabox {
  padding-bottom: 20px;
}
#addtag .cmb-row li label {
  display: inline;
}

/*--------------------------------------------------------------
 * Misc.
--------------------------------------------------------------*/
#poststuff .cmb-repeatable-group h2 {
  margin: 0;
}

.edit-tags-php .cmb2-metabox-title,
.profile-php .cmb2-metabox-title,
.user-edit-php .cmb2-metabox-title {
  font-size: 1.4em;
}

.cmb2-postbox .cmb-spinner, .cmb2-no-box-wrap .cmb-spinner {
  float: left;
  display: none;
}

.cmb-spinner {
  display: none;
}
.cmb-spinner.is-active {
  display: block;
}

/*--------------------------------------------------------------
 * Sidebar Placement Adjustments
--------------------------------------------------------------*/
.inner-sidebar .cmb2-wrap > .cmb-field-list > .cmb-row,
#side-sortables .cmb2-wrap > .cmb-field-list > .cmb-row {
  padding: 1.4em 0;
}
.inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker),
#side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker) {
  width: 100%;
}
.inner-sidebar .cmb2-wrap input + input:not(.wp-picker-clear), .inner-sidebar .cmb2-wrap input + select,
#side-sortables .cmb2-wrap input + input:not(.wp-picker-clear),
#side-sortables .cmb2-wrap input + select {
  margin-left: 0;
  margin-top: 1em;
  display: block;
}
.inner-sidebar .cmb2-wrap input.cmb2-text-money,
#side-sortables .cmb2-wrap input.cmb2-text-money {
  max-width: 70%;
}
.inner-sidebar .cmb2-wrap input.cmb2-text-money + .cmb2-metabox-description,
#side-sortables .cmb2-wrap input.cmb2-text-money + .cmb2-metabox-description {
  display: block;
}
.inner-sidebar .cmb2-wrap label,
#side-sortables .cmb2-wrap label {
  display: block;
  font-weight: 700;
  padding: 0 0 5px;
}
.inner-sidebar textarea,
#side-sortables textarea {
  max-width: 99%;
}
.inner-sidebar .cmb-repeatable-group,
#side-sortables .cmb-repeatable-group {
  border-bottom: 1px solid #e9e9e9;
}
.inner-sidebar .cmb-type-group > .cmb-td > .cmb-repeatable-group,
#side-sortables .cmb-type-group > .cmb-td > .cmb-repeatable-group {
  border-bottom: 0;
  margin-bottom: -1.4em;
}
.inner-sidebar .cmb-th,
.inner-sidebar .cmb-td:not(.cmb-remove-row),
.inner-sidebar .cmb-th + .cmb-td,
#side-sortables .cmb-th,
#side-sortables .cmb-td:not(.cmb-remove-row),
#side-sortables .cmb-th + .cmb-td {
  width: 100%;
  display: block;
  float: none;
}
.inner-sidebar .closed .inside,
#side-sortables .closed .inside {
  display: none;
}
.inner-sidebar .cmb-th,
#side-sortables .cmb-th {
  display: block;
  float: none;
  padding-bottom: 1em;
  text-align: left;
  width: 100%;
}
.inner-sidebar .cmb-th label,
#side-sortables .cmb-th label {
  display: block;
  margin-top: 0;
  margin-bottom: 0.5em;
}
.inner-sidebar .cmb-th label,
#side-sortables .cmb-th label {
  font-size: 14px;
  line-height: 1.4em;
}
.inner-sidebar .cmb-th,
#side-sortables .cmb-th {
  padding-left: 0;
  padding-right: 0;
}
.inner-sidebar .cmb-group-description .cmb-th,
#side-sortables .cmb-group-description .cmb-th {
  padding-top: 0;
}
.inner-sidebar .cmb-group-description .cmb2-metabox-description,
#side-sortables .cmb-group-description .cmb2-metabox-description {
  padding: 0;
}
.inner-sidebar .cmb-group-title .cmb-th,
#side-sortables .cmb-group-title .cmb-th {
  padding: 0;
}
.inner-sidebar .cmb-repeatable-grouping + .cmb-repeatable-grouping,
#side-sortables .cmb-repeatable-grouping + .cmb-repeatable-grouping {
  margin-top: 1em;
}
.inner-sidebar .cmb2-media-status .img-status img,
.inner-sidebar .cmb2-media-status .embed-status img,
#side-sortables .cmb2-media-status .img-status img,
#side-sortables .cmb2-media-status .embed-status img {
  max-width: 90%;
  height: auto;
}
.inner-sidebar .cmb2-list label,
#side-sortables .cmb2-list label {
  display: inline;
  font-weight: normal;
}
.inner-sidebar .cmb2-metabox-description,
#side-sortables .cmb2-metabox-description {
  display: block;
  padding: 7px 0 0;
}
.inner-sidebar .cmb-type-checkbox .cmb-td label,
.inner-sidebar .cmb-type-checkbox .cmb2-metabox-description,
#side-sortables .cmb-type-checkbox .cmb-td label,
#side-sortables .cmb-type-checkbox .cmb2-metabox-description {
  font-weight: normal;
  display: inline;
}
.inner-sidebar .cmb-row .cmb2-metabox-description,
#side-sortables .cmb-row .cmb2-metabox-description {
  padding-bottom: 1.8em;
}
.inner-sidebar .cmb2-metabox-title,
#side-sortables .cmb2-metabox-title {
  font-size: 1.2em;
  font-style: italic;
}
.inner-sidebar .cmb-remove-row,
#side-sortables .cmb-remove-row {
  clear: both;
  padding-top: 12px;
  padding-bottom: 0;
}
.inner-sidebar .cmb2-upload-button,
#side-sortables .cmb2-upload-button {
  clear: both;
  margin-top: 12px;
}

/*--------------------------------------------------------------
 * Collapsible UI
--------------------------------------------------------------*/
.cmb2-metabox .cmbhandle {
  color: #757575;
  float: right;
  width: 27px;
  height: 30px;
  cursor: pointer;
  right: -1em;
  position: relative;
}
.cmb2-metabox .cmbhandle:before {
  content: "\f142";
  right: 12px;
  font: normal 20px/1 "dashicons";
  speak: none;
  display: inline-block;
  padding: 8px 10px;
  top: 0;
  position: relative;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-decoration: none !important;
}
.cmb2-metabox .postbox.closed .cmbhandle:before {
  content: "\f140";
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row {
  -webkit-appearance: none !important;
  background: none !important;
  border: none !important;
  position: absolute;
  left: 0;
  top: 0.5em;
  line-height: 1em;
  padding: 2px 6px 3px;
  opacity: 0.5;
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]) {
  cursor: pointer;
  color: #a00;
  opacity: 1;
}
.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover {
  color: #f00;
}

/*
 * jQuery UI CSS Framework 1.8.16
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Theming/API
 *
 * WordPress Styles adopted from "jQuery UI Datepicker CSS for WordPress"
 * https://github.com/stuttter/wp-datepicker-styling
 *
 */
* html .cmb2-element.ui-helper-clearfix {
  height: 1%;
}

.cmb2-element.ui-datepicker, .cmb2-element .ui-datepicker {
  padding: 0;
  margin: 0;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
  background-color: #fff;
  border: 1px solid #dfdfdf;
  border-top: none;
  -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
  min-width: 17em;
  width: auto;
}
.cmb2-element.ui-datepicker *, .cmb2-element .ui-datepicker * {
  padding: 0;
  font-family: "Open Sans", sans-serif;
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
}
.cmb2-element.ui-datepicker table, .cmb2-element .ui-datepicker table {
  font-size: 13px;
  margin: 0;
  border: none;
  border-collapse: collapse;
}
.cmb2-element.ui-datepicker .ui-widget-header,
.cmb2-element.ui-datepicker .ui-datepicker-header, .cmb2-element .ui-datepicker .ui-widget-header,
.cmb2-element .ui-datepicker .ui-datepicker-header {
  background-image: none;
  border: none;
  color: #fff;
  font-weight: normal;
}
.cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover, .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover {
  background: transparent;
  border-color: transparent;
  cursor: pointer;
}
.cmb2-element.ui-datepicker .ui-datepicker-title, .cmb2-element .ui-datepicker .ui-datepicker-title {
  margin: 0;
  padding: 10px 0;
  color: #fff;
  font-size: 14px;
  line-height: 14px;
  text-align: center;
}
.cmb2-element.ui-datepicker .ui-datepicker-title select, .cmb2-element .ui-datepicker .ui-datepicker-title select {
  margin-top: -8px;
  margin-bottom: -8px;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-datepicker-next, .cmb2-element .ui-datepicker .ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-datepicker-next {
  position: relative;
  top: 0;
  height: 34px;
  width: 34px;
}
.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-next, .cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-next {
  border: none;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev,
.cmb2-element.ui-datepicker .ui-datepicker-prev-hover, .cmb2-element .ui-datepicker .ui-datepicker-prev,
.cmb2-element .ui-datepicker .ui-datepicker-prev-hover {
  left: 0;
}
.cmb2-element.ui-datepicker .ui-datepicker-next,
.cmb2-element.ui-datepicker .ui-datepicker-next-hover, .cmb2-element .ui-datepicker .ui-datepicker-next,
.cmb2-element .ui-datepicker .ui-datepicker-next-hover {
  right: 0;
}
.cmb2-element.ui-datepicker .ui-datepicker-next span,
.cmb2-element.ui-datepicker .ui-datepicker-prev span, .cmb2-element .ui-datepicker .ui-datepicker-next span,
.cmb2-element .ui-datepicker .ui-datepicker-prev span {
  display: none;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev, .cmb2-element .ui-datepicker .ui-datepicker-prev {
  float: left;
}
.cmb2-element.ui-datepicker .ui-datepicker-next, .cmb2-element .ui-datepicker .ui-datepicker-next {
  float: right;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev:before,
.cmb2-element.ui-datepicker .ui-datepicker-next:before, .cmb2-element .ui-datepicker .ui-datepicker-prev:before,
.cmb2-element .ui-datepicker .ui-datepicker-next:before {
  font: normal 20px/34px "dashicons";
  padding-left: 7px;
  color: #fff;
  speak: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 34px;
  height: 34px;
}
.cmb2-element.ui-datepicker .ui-datepicker-prev:before, .cmb2-element .ui-datepicker .ui-datepicker-prev:before {
  content: "\f341";
}
.cmb2-element.ui-datepicker .ui-datepicker-next:before, .cmb2-element .ui-datepicker .ui-datepicker-next:before {
  content: "\f345";
}
.cmb2-element.ui-datepicker .ui-datepicker-prev-hover:before,
.cmb2-element.ui-datepicker .ui-datepicker-next-hover:before, .cmb2-element .ui-datepicker .ui-datepicker-prev-hover:before,
.cmb2-element .ui-datepicker .ui-datepicker-next-hover:before {
  opacity: 0.7;
}
.cmb2-element.ui-datepicker select.ui-datepicker-month,
.cmb2-element.ui-datepicker select.ui-datepicker-year, .cmb2-element .ui-datepicker select.ui-datepicker-month,
.cmb2-element .ui-datepicker select.ui-datepicker-year {
  width: 33%;
  background: transparent;
  border-color: transparent;
  box-shadow: none;
  color: #fff;
}
.cmb2-element.ui-datepicker select.ui-datepicker-month option,
.cmb2-element.ui-datepicker select.ui-datepicker-year option, .cmb2-element .ui-datepicker select.ui-datepicker-month option,
.cmb2-element .ui-datepicker select.ui-datepicker-year option {
  color: #333;
}
.cmb2-element.ui-datepicker thead, .cmb2-element .ui-datepicker thead {
  color: #fff;
  font-weight: 600;
}
.cmb2-element.ui-datepicker thead th, .cmb2-element .ui-datepicker thead th {
  font-weight: normal;
}
.cmb2-element.ui-datepicker th, .cmb2-element .ui-datepicker th {
  padding: 10px;
}
.cmb2-element.ui-datepicker td, .cmb2-element .ui-datepicker td {
  padding: 0;
  border: 1px solid #f4f4f4;
}
.cmb2-element.ui-datepicker td.ui-datepicker-other-month, .cmb2-element .ui-datepicker td.ui-datepicker-other-month {
  border: transparent;
}
.cmb2-element.ui-datepicker td.ui-datepicker-week-end, .cmb2-element .ui-datepicker td.ui-datepicker-week-end {
  background-color: #f4f4f4;
  border: 1px solid #f4f4f4;
}
.cmb2-element.ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today, .cmb2-element .ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today {
  -webkit-box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
  -moz-box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
}
.cmb2-element.ui-datepicker td.ui-datepicker-today, .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background-color: #f0f0c0;
}
.cmb2-element.ui-datepicker td.ui-datepicker-current-day, .cmb2-element .ui-datepicker td.ui-datepicker-current-day {
  background: #bbdd88;
}
.cmb2-element.ui-datepicker td .ui-state-default, .cmb2-element .ui-datepicker td .ui-state-default {
  background: transparent;
  border: none;
  text-align: center;
  text-decoration: none;
  width: auto;
  display: block;
  padding: 5px 10px;
  font-weight: normal;
  color: #444;
}
.cmb2-element.ui-datepicker td.ui-state-disabled .ui-state-default, .cmb2-element .ui-datepicker td.ui-state-disabled .ui-state-default {
  opacity: 0.5;
}
.cmb2-element.ui-datepicker, .cmb2-element .ui-datepicker {
  /* Default Color Scheme */
}
.cmb2-element.ui-datepicker .ui-widget-header,
.cmb2-element.ui-datepicker .ui-datepicker-header, .cmb2-element .ui-datepicker .ui-widget-header,
.cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #00a0d2;
}
.cmb2-element.ui-datepicker thead, .cmb2-element .ui-datepicker thead {
  background: #32373c;
}
.cmb2-element.ui-datepicker td .ui-state-hover, .cmb2-element.ui-datepicker td .ui-state-active, .cmb2-element .ui-datepicker td .ui-state-hover, .cmb2-element .ui-datepicker td .ui-state-active {
  background: #0073aa;
  color: #fff;
}
.cmb2-element.ui-datepicker .ui-timepicker-div, .cmb2-element .ui-datepicker .ui-timepicker-div {
  font-size: 14px;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl, .cmb2-element .ui-datepicker .ui-timepicker-div dl {
  text-align: left;
  padding: 0 0.6em;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dt, .cmb2-element .ui-datepicker .ui-timepicker-div dl dt {
  float: left;
  clear: left;
  padding: 0 0 0 5px;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dd, .cmb2-element .ui-datepicker .ui-timepicker-div dl dd {
  margin: 0 10px 10px 40%;
}
.cmb2-element.ui-datepicker .ui-timepicker-div dl dd select, .cmb2-element .ui-datepicker .ui-timepicker-div dl dd select {
  width: 100%;
}
.cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane {
  padding: 0.6em;
  text-align: left;
}
.cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-primary, .cmb2-element.ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-secondary, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-primary, .cmb2-element .ui-datepicker .ui-timepicker-div + .ui-datepicker-buttonpane .button-secondary {
  padding: 0 10px 1px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  margin: 0 0.6em 0.4em 0.4em;
}

.admin-color-fresh .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-fresh .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-fresh .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-fresh .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #00a0d2;
}
.admin-color-fresh .cmb2-element.ui-datepicker thead, .admin-color-fresh .cmb2-element .ui-datepicker thead {
  background: #32373c;
}
.admin-color-fresh .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-fresh .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #0073aa;
  color: #fff;
}

.admin-color-blue .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-blue .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-blue .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-blue .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #52accc;
}
.admin-color-blue .cmb2-element.ui-datepicker thead, .admin-color-blue .cmb2-element .ui-datepicker thead {
  background: #4796b3;
}
.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-blue .cmb2-element.ui-datepicker td .ui-state-active, .admin-color-blue .cmb2-element .ui-datepicker td .ui-state-hover, .admin-color-blue .cmb2-element .ui-datepicker td .ui-state-active {
  background: #096484;
  color: #fff;
}
.admin-color-blue .cmb2-element.ui-datepicker td.ui-datepicker-today, .admin-color-blue .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background: #eee;
}

.admin-color-coffee .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-coffee .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-coffee .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-coffee .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #59524c;
}
.admin-color-coffee .cmb2-element.ui-datepicker thead, .admin-color-coffee .cmb2-element .ui-datepicker thead {
  background: #46403c;
}
.admin-color-coffee .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-coffee .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #c7a589;
  color: #fff;
}

.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #523f6d;
}
.admin-color-ectoplasm .cmb2-element.ui-datepicker thead, .admin-color-ectoplasm .cmb2-element .ui-datepicker thead {
  background: #413256;
}
.admin-color-ectoplasm .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-ectoplasm .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #a3b745;
  color: #fff;
}

.admin-color-midnight .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-midnight .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-midnight .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-midnight .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #363b3f;
}
.admin-color-midnight .cmb2-element.ui-datepicker thead, .admin-color-midnight .cmb2-element .ui-datepicker thead {
  background: #26292c;
}
.admin-color-midnight .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-midnight .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #e14d43;
  color: #fff;
}

.admin-color-ocean .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-ocean .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-ocean .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-ocean .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #738e96;
}
.admin-color-ocean .cmb2-element.ui-datepicker thead, .admin-color-ocean .cmb2-element .ui-datepicker thead {
  background: #627c83;
}
.admin-color-ocean .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-ocean .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #9ebaa0;
  color: #fff;
}

.admin-color-sunrise .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header,
.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover, .admin-color-sunrise .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header,
.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover {
  background: #cf4944;
}
.admin-color-sunrise .cmb2-element.ui-datepicker th, .admin-color-sunrise .cmb2-element .ui-datepicker th {
  border-color: #be3631;
  background: #be3631;
}
.admin-color-sunrise .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-sunrise .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #dd823b;
  color: #fff;
}

.admin-color-light .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-light .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #e5e5e5;
}
.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-month,
.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-year, .admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-month,
.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-year {
  color: #555;
}
.admin-color-light .cmb2-element.ui-datepicker thead, .admin-color-light .cmb2-element .ui-datepicker thead {
  background: #888;
}
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-title,
.admin-color-light .cmb2-element.ui-datepicker td .ui-state-default,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-prev:before,
.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-next:before, .admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-title,
.admin-color-light .cmb2-element .ui-datepicker td .ui-state-default,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-prev:before,
.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-next:before {
  color: #555;
}
.admin-color-light .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-light .cmb2-element.ui-datepicker td .ui-state-active, .admin-color-light .cmb2-element .ui-datepicker td .ui-state-hover, .admin-color-light .cmb2-element .ui-datepicker td .ui-state-active {
  background: #ccc;
}
.admin-color-light .cmb2-element.ui-datepicker td.ui-datepicker-today, .admin-color-light .cmb2-element .ui-datepicker td.ui-datepicker-today {
  background: #eee;
}

.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #56b274;
}
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker thead, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker thead {
  background: #36533f;
}
.admin-color-bbp-evergreen .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-bbp-evergreen .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #446950;
  color: #fff;
}

.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-widget-header,
.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-datepicker-header, .admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-widget-header,
.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-datepicker-header {
  background: #4ca26a;
}
.admin-color-bbp-mint .cmb2-element.ui-datepicker thead, .admin-color-bbp-mint .cmb2-element .ui-datepicker thead {
  background: #4f6d59;
}
.admin-color-bbp-mint .cmb2-element.ui-datepicker td .ui-state-hover, .admin-color-bbp-mint .cmb2-element .ui-datepicker td .ui-state-hover {
  background: #5fb37c;
  color: #fff;
}

/*--------------------------------------------------------------
 * Character counter
--------------------------------------------------------------*/
.cmb2-char-counter-wrap {
  margin: 0.5em 0 1em;
}
.cmb2-char-counter-wrap input[type=text] {
  font-size: 12px;
  width: 25px;
}
.cmb2-char-counter-wrap.cmb2-max-exceeded input[type=text] {
  border-color: #a00 !important;
}
.cmb2-char-counter-wrap.cmb2-max-exceeded .cmb2-char-max-msg {
  display: inline-block;
}

.cmb2-char-max-msg {
  color: #a00;
  display: none;
  font-weight: 600;
  margin-left: 1em;
}
PK     ƒŠU]&°úÜp�  p�  !  vendor/cmb2/cmb2/css/cmb2.min.cssnu „[µü¤        /*! CMB2 - v2.12.0 - 2026-05-31 | https://cmb2.io | Copyright (c) 2026 CMB2 team | Licensed GPLv2 */
/*!
 * CMB2 - v2.12.0 - 2026-05-31
 * https://cmb2.io
 * Copyright (c) 2026
 * Licensed GPLv2+
 */.cmb2-wrap{margin:0}.cmb2-wrap input,.cmb2-wrap textarea{max-width:100%}.cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb2-wrap textarea{width:500px;padding:8px}.cmb2-wrap textarea.cmb2-textarea-code{font-family:"Courier 10 Pitch",Courier,monospace;line-height:16px}.cmb2-wrap input.cmb2-text-small,.cmb2-wrap input.cmb2-timepicker{width:100px}.cmb2-wrap input.cmb2-text-money{width:90px}.cmb2-wrap input.cmb2-text-medium{width:230px}.cmb2-wrap input.cmb2-upload-file{width:65%}.cmb2-wrap input.ed_button{padding:2px 4px}.cmb2-wrap input:not([type=hidden])+.button-secondary,.cmb2-wrap input:not([type=hidden])+input,.cmb2-wrap input:not([type=hidden])+select{margin-left:20px}.cmb2-wrap ul{margin:0}.cmb2-wrap li{font-size:14px;line-height:16px;margin:1px 0 5px 0}.cmb2-wrap select{font-size:14px;margin-top:3px}.cmb2-wrap input[type=radio]{margin:0 5px 0 0;padding:0}.cmb2-wrap input[type=checkbox]{margin:0 5px 0 0;padding:0}.cmb2-wrap .button-secondary,.cmb2-wrap button{white-space:nowrap}.cmb2-wrap .mceLayout{border:1px solid #e9e9e9!important}.cmb2-wrap .mceIframeContainer{background:#fff}.cmb2-wrap .meta_mce{width:97%}.cmb2-wrap .meta_mce textarea{width:100%}.cmb2-wrap .cmb-multicheck-toggle{margin-top:-1em}.cmb2-wrap .wp-picker-clear.button,.cmb2-wrap .wp-picker-default.button{margin-left:6px;padding:2px 8px}.cmb2-wrap .cmb-row{margin:0}.cmb2-wrap .cmb-row:after{content:"";clear:both;display:block;width:100%}.cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description{padding-top:0;padding-bottom:1em}body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before{margin:.1875rem}@media screen and (max-width:782px){body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before{margin:.4375rem}}.cmb2-metabox{clear:both;margin:0}.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-th,.cmb2-metabox>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox>.cmb-row:first-of-type>.cmb-th{border:0}.cmb-add-row{margin:1.8em 0 0}.cmb-nested .cmb-td,.cmb-repeatable-group .cmb-th,.cmb-repeatable-group:first-of-type{border:0}.cmb-repeatable-group:last-of-type,.cmb-row:last-of-type,.cmb2-wrap .cmb-row:last-of-type{border-bottom:0}.cmb-repeatable-grouping{border:1px solid #e9e9e9;padding:0 1em}.cmb-repeatable-grouping.cmb-row{margin:0 0 .8em}.cmb-th{color:#222;float:left;font-weight:600;padding:20px 10px 20px 0;vertical-align:top;width:200px}@media (max-width:450px){.cmb-th{font-size:1.2em;display:block;float:none;padding-bottom:1em;text-align:left;width:100%}.cmb-th label{display:block;margin-top:0;margin-bottom:.5em}}.cmb-td{line-height:1.3;max-width:100%;padding:15px 10px;vertical-align:middle}.cmb-type-title .cmb-td{padding:0}.cmb-th label{display:block;padding:5px 0}.cmb-th+.cmb-td{float:left}.cmb-td .cmb-td{padding-bottom:1em}.cmb-remove-row{text-align:right}.empty-row.hidden{display:none}.cmb-repeat-table{background-color:#fafafa;border:1px solid rgb(225.35,225.35,225.35)}.cmb-repeat-table .cmb-row.cmb-repeat-row{position:relative;counter-increment:el;margin:0;padding:10px 10px 10px 50px;border-bottom:none!important}.cmb-repeat-table .cmb-row.cmb-repeat-row+.cmb-repeat-row{border-top:solid 1px #e9e9e9}.cmb-repeat-table .cmb-row.cmb-repeat-row.ui-sortable-helper{outline:dashed 2px #e9e9e9!important}.cmb-repeat-table .cmb-row.cmb-repeat-row:before{content:counter(el);display:block;top:0;left:0;position:absolute;width:35px;height:100%;line-height:35px;cursor:move;color:#757575;text-align:center;border-right:solid 1px #e9e9e9}.cmb-repeat-table .cmb-row.cmb-repeat-row .cmb-td{margin:0;padding:0}.cmb-repeat-table+.cmb-add-row{margin:0}.cmb-repeat-table+.cmb-add-row:before{content:"";width:1px;height:1.6em;display:block;margin-left:17px;background-color:rgb(220.25,220.25,220.25)}.cmb-repeat-table .cmb-remove-row{top:7px;right:7px;position:absolute;width:auto;margin-left:0;padding:0!important;display:none}.cmb-repeat-table .cmb-remove-row>.cmb-remove-row-button{font-size:20px;text-indent:-1000px;overflow:hidden;position:relative;height:auto;line-height:1;padding:0 10px 0}.cmb-repeat-table .cmb-remove-row>.cmb-remove-row-button:before{content:"\f335";font-family:Dashicons;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;margin:0;text-indent:0;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;line-height:1.3}.cmb-repeat-table .cmb-repeat-row:hover .cmb-remove-row{display:block}.cmb-repeatable-group .cmb-th{padding:5px}.cmb-repeatable-group .cmb-group-title{background-color:#e9e9e9;padding:8px 12px 8px 2.2em;margin:0 -1em;min-height:1.5em;font-size:14px;line-height:1.4}.cmb-repeatable-group .cmb-group-title h4{border:0;margin:0;font-size:1.2em;font-weight:500;padding:.5em .75em}.cmb-repeatable-group .cmb-group-title .cmb-th{display:block;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th{font-size:1.2em;display:block;float:none;padding-bottom:1em;text-align:left;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th label{display:block;margin-top:0;margin-bottom:.5em}.cmb-repeatable-group .cmb-shift-rows{margin-right:1em}.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-up-alt2{margin-top:.15em}.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-down-alt2{margin-top:.2em}.cmb-repeatable-group .cmb2-upload-button{float:right}p.cmb2-metabox-description{color:#666;letter-spacing:.01em;margin:0;padding-top:.5em}span.cmb2-metabox-description{color:#666;letter-spacing:.01em}.cmb2-metabox-title{margin:0 0 5px 0;padding:5px 0 0 0;font-size:14px}.cmb-inline ul{padding:4px 0 0 0}.cmb-inline li{display:inline-block;padding-right:18px}.cmb-type-textarea-code pre{margin:0}.cmb2-media-status .img-status{clear:none;display:inline-block;vertical-align:middle;margin-right:10px;width:auto}.cmb2-media-status .img-status img{max-width:350px;height:auto}.cmb2-media-status .embed-status,.cmb2-media-status .img-status img{background:#eee;border:5px solid #fff;outline:1px solid #e9e9e9;box-shadow:inset 0 0 15px rgba(0,0,0,.3),inset 0 0 0 1px rgba(0,0,0,.05);background-image:linear-gradient(45deg,#d0d0d0 25%,transparent 25%,transparent 75%,#d0d0d0 75%,#d0d0d0),linear-gradient(45deg,#d0d0d0 25%,transparent 25%,transparent 75%,#d0d0d0 75%,#d0d0d0);background-position:0 0,10px 10px;background-size:20px 20px;border-radius:2px;-moz-border-radius:2px;margin:15px 0 0 0}.cmb2-media-status .embed-status{float:left;max-width:800px}.cmb2-media-status .embed-status,.cmb2-media-status .img-status{position:relative}.cmb2-media-status .embed-status .cmb2-remove-file-button,.cmb2-media-status .img-status .cmb2-remove-file-button{background:url(../images/ico-delete.png);height:16px;left:-5px;position:absolute;text-indent:-9999px;top:-5px;width:16px}.cmb2-media-status .img-status .cmb2-remove-file-button{top:10px}.cmb2-media-status .file-status>span,.cmb2-media-status .img-status img{cursor:pointer}.cmb2-media-status.cmb-attach-list .file-status>span,.cmb2-media-status.cmb-attach-list .img-status img{cursor:move}.cmb-type-file-list .cmb2-media-status .img-status{clear:none;vertical-align:middle;width:auto;margin-right:10px;margin-bottom:10px;margin-top:0}.cmb-attach-list li{clear:both;display:inline-block;width:100%;margin-top:5px;margin-bottom:10px}.cmb-attach-list li img{float:left;margin-right:10px}.cmb2-remove-wrapper{margin:0}.child-cmb2 .cmb-th{text-align:left}.cmb2-indented-hierarchy{padding-left:1.5em}@media (max-width:450px){.cmb-td,.cmb-th,.cmb-th+.cmb-td{display:block;float:none;width:100%}}#poststuff .cmb-group-title{margin-left:-1em;margin-right:-1em;min-height:1.5em}#poststuff .repeatable .cmb-group-title{padding-left:2.2em}.cmb-type-group .cmb2-wrap,.cmb2-postbox .cmb2-wrap{margin:0}.cmb-type-group .cmb2-wrap>.cmb-field-list>.cmb-row,.cmb2-postbox .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.8em 0}.cmb-type-group .cmb2-wrap input[type=text].cmb2-oembed,.cmb2-postbox .cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb-type-group .cmb-row,.cmb2-postbox .cmb-row{padding:0 0 1.8em;margin:0 0 .8em}.cmb-type-group .cmb-row .cmbhandle,.cmb2-postbox .cmb-row .cmbhandle{right:-1em;position:relative;color:#222}.cmb-type-group .cmb-repeatable-grouping,.cmb2-postbox .cmb-repeatable-grouping{padding:0 1em;max-width:100%;min-width:1px!important}.cmb-type-group .cmb-repeatable-group>.cmb-row,.cmb2-postbox .cmb-repeatable-group>.cmb-row{padding-bottom:0}.cmb-type-group .cmb-th,.cmb2-postbox .cmb-th{width:18%;padding:0 2% 0 0}.cmb-type-group .cmb-td,.cmb2-postbox .cmb-td{margin-bottom:0;padding:0;line-height:1.3}.cmb-type-group .cmb-th+.cmb-td,.cmb2-postbox .cmb-th+.cmb-td{width:80%;float:right}.cmb-type-group .cmb-repeatable-group:not(:last-of-type),.cmb-type-group .cmb-row:not(:last-of-type),.cmb2-postbox .cmb-repeatable-group:not(:last-of-type),.cmb2-postbox .cmb-row:not(:last-of-type){border-bottom:1px solid #e9e9e9}@media (max-width:450px){.cmb-type-group .cmb-repeatable-group:not(:last-of-type),.cmb-type-group .cmb-row:not(:last-of-type),.cmb2-postbox .cmb-repeatable-group:not(:last-of-type),.cmb2-postbox .cmb-row:not(:last-of-type){border-bottom:0}}.cmb-type-group .cmb-remove-field-row,.cmb-type-group .cmb-repeat-group-field,.cmb2-postbox .cmb-remove-field-row,.cmb2-postbox .cmb-repeat-group-field{padding-top:1.8em}.cmb-type-group .button-secondary .dashicons,.cmb2-postbox .button-secondary .dashicons{line-height:1.3}.cmb-type-group .button-secondary.move-down .dashicons,.cmb-type-group .button-secondary.move-up .dashicons,.cmb2-postbox .button-secondary.move-down .dashicons,.cmb2-postbox .button-secondary.move-up .dashicons{line-height:1.1}.cmb-type-group .button-secondary.cmb-add-group-row .dashicons,.cmb2-postbox .button-secondary.cmb-add-group-row .dashicons{line-height:1.5}.js .cmb2-postbox.context-box .handlediv{text-align:center}.js .cmb2-postbox.context-box .toggle-indicator:before{content:"\f142";display:inline-block;font:normal 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js .cmb2-postbox.context-box.closed .toggle-indicator:before{content:"\f140"}.cmb2-postbox.context-box{margin-bottom:10px}.cmb2-postbox.context-box.context-before_permalink-box{margin-top:10px}.cmb2-postbox.context-box.context-after_title-box{margin-top:10px}.cmb2-postbox.context-box.context-after_editor-box{margin-top:20px;margin-bottom:0}.cmb2-postbox.context-box.context-form_top-box{margin-top:10px}.cmb2-postbox.context-box.context-form_top-box .hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.cmb2-postbox.context-box .hndle{cursor:auto}.cmb2-context-wrap{margin-top:10px}.cmb2-context-wrap.cmb2-context-wrap-form_top{margin-right:300px;width:auto}.cmb2-context-wrap.cmb2-context-wrap-no-title .cmb2-metabox{padding:10px}.cmb2-context-wrap .cmb-th{padding:0 2% 0 0;width:18%}.cmb2-context-wrap .cmb-td{width:80%;padding:0}.cmb2-context-wrap .cmb-row{margin-bottom:10px}.cmb2-context-wrap .cmb-row:last-of-type{margin-bottom:0}@media only screen and (max-width:850px){.cmb2-context-wrap.cmb2-context-wrap-form_top{margin-right:0}}.cmb2-options-page{max-width:1200px}.cmb2-options-page.wrap>h2{margin-bottom:1em}.cmb2-options-page .cmb2-metabox>.cmb-row{padding:1em;margin-top:-1px;background:#fff;border:1px solid #e9e9e9;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th{padding:0;font-weight:initial}.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th+.cmb-td{float:none;padding:0 0 0 1em;margin-left:200px}@media (max-width:450px){.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th+.cmb-td{padding:0;margin-left:0}}.cmb2-options-page .cmb2-wrap .cmb-type-title{margin-top:1em;padding:.6em 1em;background-color:#fafafa}.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-title{font-size:12px;margin-top:0;margin-bottom:0;text-transform:uppercase}.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-description{padding-top:.25em}.cmb2-options-page .cmb-repeatable-group .cmb-group-description .cmb-th{padding:0 0 .8em 0}.cmb2-options-page .cmb-repeatable-group .cmb-group-name{font-size:16px;margin-top:0;margin-bottom:0}.cmb2-options-page .cmb-repeatable-group .cmb-th>.cmb2-metabox-description{font-weight:400;padding-bottom:0!important}#addtag .cmb-th{float:none;width:auto;padding:20px 0 0}#addtag .cmb-td{padding:0}#addtag .cmb-th+.cmb-td{float:none}#addtag select{max-width:100%}#addtag .cmb2-metabox{padding-bottom:20px}#addtag .cmb-row li label{display:inline}#poststuff .cmb-repeatable-group h2{margin:0}.edit-tags-php .cmb2-metabox-title,.profile-php .cmb2-metabox-title,.user-edit-php .cmb2-metabox-title{font-size:1.4em}.cmb2-no-box-wrap .cmb-spinner,.cmb2-postbox .cmb-spinner{float:left;display:none}.cmb-spinner{display:none}.cmb-spinner.is-active{display:block}#side-sortables .cmb2-wrap>.cmb-field-list>.cmb-row,.inner-sidebar .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.4em 0}#side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker),.inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker){width:100%}#side-sortables .cmb2-wrap input+input:not(.wp-picker-clear),#side-sortables .cmb2-wrap input+select,.inner-sidebar .cmb2-wrap input+input:not(.wp-picker-clear),.inner-sidebar .cmb2-wrap input+select{margin-left:0;margin-top:1em;display:block}#side-sortables .cmb2-wrap input.cmb2-text-money,.inner-sidebar .cmb2-wrap input.cmb2-text-money{max-width:70%}#side-sortables .cmb2-wrap input.cmb2-text-money+.cmb2-metabox-description,.inner-sidebar .cmb2-wrap input.cmb2-text-money+.cmb2-metabox-description{display:block}#side-sortables .cmb2-wrap label,.inner-sidebar .cmb2-wrap label{display:block;font-weight:700;padding:0 0 5px}#side-sortables textarea,.inner-sidebar textarea{max-width:99%}#side-sortables .cmb-repeatable-group,.inner-sidebar .cmb-repeatable-group{border-bottom:1px solid #e9e9e9}#side-sortables .cmb-type-group>.cmb-td>.cmb-repeatable-group,.inner-sidebar .cmb-type-group>.cmb-td>.cmb-repeatable-group{border-bottom:0;margin-bottom:-1.4em}#side-sortables .cmb-td:not(.cmb-remove-row),#side-sortables .cmb-th,#side-sortables .cmb-th+.cmb-td,.inner-sidebar .cmb-td:not(.cmb-remove-row),.inner-sidebar .cmb-th,.inner-sidebar .cmb-th+.cmb-td{width:100%;display:block;float:none}#side-sortables .closed .inside,.inner-sidebar .closed .inside{display:none}#side-sortables .cmb-th,.inner-sidebar .cmb-th{display:block;float:none;padding-bottom:1em;text-align:left;width:100%}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{display:block;margin-top:0;margin-bottom:.5em}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{font-size:14px;line-height:1.4em}#side-sortables .cmb-th,.inner-sidebar .cmb-th{padding-left:0;padding-right:0}#side-sortables .cmb-group-description .cmb-th,.inner-sidebar .cmb-group-description .cmb-th{padding-top:0}#side-sortables .cmb-group-description .cmb2-metabox-description,.inner-sidebar .cmb-group-description .cmb2-metabox-description{padding:0}#side-sortables .cmb-group-title .cmb-th,.inner-sidebar .cmb-group-title .cmb-th{padding:0}#side-sortables .cmb-repeatable-grouping+.cmb-repeatable-grouping,.inner-sidebar .cmb-repeatable-grouping+.cmb-repeatable-grouping{margin-top:1em}#side-sortables .cmb2-media-status .embed-status img,#side-sortables .cmb2-media-status .img-status img,.inner-sidebar .cmb2-media-status .embed-status img,.inner-sidebar .cmb2-media-status .img-status img{max-width:90%;height:auto}#side-sortables .cmb2-list label,.inner-sidebar .cmb2-list label{display:inline;font-weight:400}#side-sortables .cmb2-metabox-description,.inner-sidebar .cmb2-metabox-description{display:block;padding:7px 0 0}#side-sortables .cmb-type-checkbox .cmb-td label,#side-sortables .cmb-type-checkbox .cmb2-metabox-description,.inner-sidebar .cmb-type-checkbox .cmb-td label,.inner-sidebar .cmb-type-checkbox .cmb2-metabox-description{font-weight:400;display:inline}#side-sortables .cmb-row .cmb2-metabox-description,.inner-sidebar .cmb-row .cmb2-metabox-description{padding-bottom:1.8em}#side-sortables .cmb2-metabox-title,.inner-sidebar .cmb2-metabox-title{font-size:1.2em;font-style:italic}#side-sortables .cmb-remove-row,.inner-sidebar .cmb-remove-row{clear:both;padding-top:12px;padding-bottom:0}#side-sortables .cmb2-upload-button,.inner-sidebar .cmb2-upload-button{clear:both;margin-top:12px}.cmb2-metabox .cmbhandle{color:#757575;float:right;width:27px;height:30px;cursor:pointer;right:-1em;position:relative}.cmb2-metabox .cmbhandle:before{content:"\f142";right:12px;font:normal 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.cmb2-metabox .postbox.closed .cmbhandle:before{content:"\f140"}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row{-webkit-appearance:none!important;background:0 0!important;border:none!important;position:absolute;left:0;top:.5em;line-height:1em;padding:2px 6px 3px;opacity:.5}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]){cursor:pointer;color:#a00;opacity:1}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover{color:red}* html .cmb2-element.ui-helper-clearfix{height:1%}.cmb2-element .ui-datepicker,.cmb2-element.ui-datepicker{padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background-color:#fff;border:1px solid #dfdfdf;border-top:none;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075);min-width:17em;width:auto}.cmb2-element .ui-datepicker *,.cmb2-element.ui-datepicker *{padding:0;font-family:"Open Sans",sans-serif;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.cmb2-element .ui-datepicker table,.cmb2-element.ui-datepicker table{font-size:13px;margin:0;border:none;border-collapse:collapse}.cmb2-element .ui-datepicker .ui-datepicker-header,.cmb2-element .ui-datepicker .ui-widget-header,.cmb2-element.ui-datepicker .ui-datepicker-header,.cmb2-element.ui-datepicker .ui-widget-header{background-image:none;border:none;color:#fff;font-weight:400}.cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover,.cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover{background:0 0;border-color:transparent;cursor:pointer}.cmb2-element .ui-datepicker .ui-datepicker-title,.cmb2-element.ui-datepicker .ui-datepicker-title{margin:0;padding:10px 0;color:#fff;font-size:14px;line-height:14px;text-align:center}.cmb2-element .ui-datepicker .ui-datepicker-title select,.cmb2-element.ui-datepicker .ui-datepicker-title select{margin-top:-8px;margin-bottom:-8px}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-prev{position:relative;top:0;height:34px;width:34px}.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-next,.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-next,.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-prev{border:none}.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element .ui-datepicker .ui-datepicker-prev-hover,.cmb2-element.ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-prev-hover{left:0}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element .ui-datepicker .ui-datepicker-next-hover,.cmb2-element.ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-next-hover{right:0}.cmb2-element .ui-datepicker .ui-datepicker-next span,.cmb2-element .ui-datepicker .ui-datepicker-prev span,.cmb2-element.ui-datepicker .ui-datepicker-next span,.cmb2-element.ui-datepicker .ui-datepicker-prev span{display:none}.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-prev{float:left}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-next{float:right}.cmb2-element .ui-datepicker .ui-datepicker-next:before,.cmb2-element .ui-datepicker .ui-datepicker-prev:before,.cmb2-element.ui-datepicker .ui-datepicker-next:before,.cmb2-element.ui-datepicker .ui-datepicker-prev:before{font:normal 20px/34px dashicons;padding-left:7px;color:#fff;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:34px;height:34px}.cmb2-element .ui-datepicker .ui-datepicker-prev:before,.cmb2-element.ui-datepicker .ui-datepicker-prev:before{content:"\f341"}.cmb2-element .ui-datepicker .ui-datepicker-next:before,.cmb2-element.ui-datepicker .ui-datepicker-next:before{content:"\f345"}.cmb2-element .ui-datepicker .ui-datepicker-next-hover:before,.cmb2-element .ui-datepicker .ui-datepicker-prev-hover:before,.cmb2-element.ui-datepicker .ui-datepicker-next-hover:before,.cmb2-element.ui-datepicker .ui-datepicker-prev-hover:before{opacity:.7}.cmb2-element .ui-datepicker select.ui-datepicker-month,.cmb2-element .ui-datepicker select.ui-datepicker-year,.cmb2-element.ui-datepicker select.ui-datepicker-month,.cmb2-element.ui-datepicker select.ui-datepicker-year{width:33%;background:0 0;border-color:transparent;box-shadow:none;color:#fff}.cmb2-element .ui-datepicker select.ui-datepicker-month option,.cmb2-element .ui-datepicker select.ui-datepicker-year option,.cmb2-element.ui-datepicker select.ui-datepicker-month option,.cmb2-element.ui-datepicker select.ui-datepicker-year option{color:#333}.cmb2-element .ui-datepicker thead,.cmb2-element.ui-datepicker thead{color:#fff;font-weight:600}.cmb2-element .ui-datepicker thead th,.cmb2-element.ui-datepicker thead th{font-weight:400}.cmb2-element .ui-datepicker th,.cmb2-element.ui-datepicker th{padding:10px}.cmb2-element .ui-datepicker td,.cmb2-element.ui-datepicker td{padding:0;border:1px solid #f4f4f4}.cmb2-element .ui-datepicker td.ui-datepicker-other-month,.cmb2-element.ui-datepicker td.ui-datepicker-other-month{border:transparent}.cmb2-element .ui-datepicker td.ui-datepicker-week-end,.cmb2-element.ui-datepicker td.ui-datepicker-week-end{background-color:#f4f4f4;border:1px solid #f4f4f4}.cmb2-element .ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today,.cmb2-element.ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today{-webkit-box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1)}.cmb2-element .ui-datepicker td.ui-datepicker-today,.cmb2-element.ui-datepicker td.ui-datepicker-today{background-color:#f0f0c0}.cmb2-element .ui-datepicker td.ui-datepicker-current-day,.cmb2-element.ui-datepicker td.ui-datepicker-current-day{background:#bd8}.cmb2-element .ui-datepicker td .ui-state-default,.cmb2-element.ui-datepicker td .ui-state-default{background:0 0;border:none;text-align:center;text-decoration:none;width:auto;display:block;padding:5px 10px;font-weight:400;color:#444}.cmb2-element .ui-datepicker td.ui-state-disabled .ui-state-default,.cmb2-element.ui-datepicker td.ui-state-disabled .ui-state-default{opacity:.5}.cmb2-element .ui-datepicker .ui-datepicker-header,.cmb2-element .ui-datepicker .ui-widget-header,.cmb2-element.ui-datepicker .ui-datepicker-header,.cmb2-element.ui-datepicker .ui-widget-header{background:#00a0d2}.cmb2-element .ui-datepicker thead,.cmb2-element.ui-datepicker thead{background:#32373c}.cmb2-element .ui-datepicker td .ui-state-active,.cmb2-element .ui-datepicker td .ui-state-hover,.cmb2-element.ui-datepicker td .ui-state-active,.cmb2-element.ui-datepicker td .ui-state-hover{background:#0073aa;color:#fff}.cmb2-element .ui-datepicker .ui-timepicker-div,.cmb2-element.ui-datepicker .ui-timepicker-div{font-size:14px}.cmb2-element .ui-datepicker .ui-timepicker-div dl,.cmb2-element.ui-datepicker .ui-timepicker-div dl{text-align:left;padding:0 .6em}.cmb2-element .ui-datepicker .ui-timepicker-div dl dt,.cmb2-element.ui-datepicker .ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.cmb2-element .ui-datepicker .ui-timepicker-div dl dd,.cmb2-element.ui-datepicker .ui-timepicker-div dl dd{margin:0 10px 10px 40%}.cmb2-element .ui-datepicker .ui-timepicker-div dl dd select,.cmb2-element.ui-datepicker .ui-timepicker-div dl dd select{width:100%}.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane{padding:.6em;text-align:left}.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-primary,.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-secondary,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-primary,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-secondary{padding:0 10px 1px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:0 .6em .4em .4em}.admin-color-fresh .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-fresh .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-fresh .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-fresh .cmb2-element.ui-datepicker .ui-widget-header{background:#00a0d2}.admin-color-fresh .cmb2-element .ui-datepicker thead,.admin-color-fresh .cmb2-element.ui-datepicker thead{background:#32373c}.admin-color-fresh .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-fresh .cmb2-element.ui-datepicker td .ui-state-hover{background:#0073aa;color:#fff}.admin-color-blue .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-blue .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-blue .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-blue .cmb2-element.ui-datepicker .ui-widget-header{background:#52accc}.admin-color-blue .cmb2-element .ui-datepicker thead,.admin-color-blue .cmb2-element.ui-datepicker thead{background:#4796b3}.admin-color-blue .cmb2-element .ui-datepicker td .ui-state-active,.admin-color-blue .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-active,.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-hover{background:#096484;color:#fff}.admin-color-blue .cmb2-element .ui-datepicker td.ui-datepicker-today,.admin-color-blue .cmb2-element.ui-datepicker td.ui-datepicker-today{background:#eee}.admin-color-coffee .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-coffee .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-coffee .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-coffee .cmb2-element.ui-datepicker .ui-widget-header{background:#59524c}.admin-color-coffee .cmb2-element .ui-datepicker thead,.admin-color-coffee .cmb2-element.ui-datepicker thead{background:#46403c}.admin-color-coffee .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-coffee .cmb2-element.ui-datepicker td .ui-state-hover{background:#c7a589;color:#fff}.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-widget-header{background:#523f6d}.admin-color-ectoplasm .cmb2-element .ui-datepicker thead,.admin-color-ectoplasm .cmb2-element.ui-datepicker thead{background:#413256}.admin-color-ectoplasm .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-ectoplasm .cmb2-element.ui-datepicker td .ui-state-hover{background:#a3b745;color:#fff}.admin-color-midnight .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-midnight .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-midnight .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-midnight .cmb2-element.ui-datepicker .ui-widget-header{background:#363b3f}.admin-color-midnight .cmb2-element .ui-datepicker thead,.admin-color-midnight .cmb2-element.ui-datepicker thead{background:#26292c}.admin-color-midnight .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-midnight .cmb2-element.ui-datepicker td .ui-state-hover{background:#e14d43;color:#fff}.admin-color-ocean .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-ocean .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-ocean .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-ocean .cmb2-element.ui-datepicker .ui-widget-header{background:#738e96}.admin-color-ocean .cmb2-element .ui-datepicker thead,.admin-color-ocean .cmb2-element.ui-datepicker thead{background:#627c83}.admin-color-ocean .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-ocean .cmb2-element.ui-datepicker td .ui-state-hover{background:#9ebaa0;color:#fff}.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-sunrise .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-widget-header{background:#cf4944}.admin-color-sunrise .cmb2-element .ui-datepicker th,.admin-color-sunrise .cmb2-element.ui-datepicker th{border-color:#be3631;background:#be3631}.admin-color-sunrise .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-sunrise .cmb2-element.ui-datepicker td .ui-state-hover{background:#dd823b;color:#fff}.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-light .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-light .cmb2-element.ui-datepicker .ui-widget-header{background:#e5e5e5}.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-month,.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-year,.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-month,.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-year{color:#555}.admin-color-light .cmb2-element .ui-datepicker thead,.admin-color-light .cmb2-element.ui-datepicker thead{background:#888}.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-next:before,.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-prev:before,.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-title,.admin-color-light .cmb2-element .ui-datepicker td .ui-state-default,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-next:before,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-prev:before,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-title,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-default{color:#555}.admin-color-light .cmb2-element .ui-datepicker td .ui-state-active,.admin-color-light .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-active,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-hover{background:#ccc}.admin-color-light .cmb2-element .ui-datepicker td.ui-datepicker-today,.admin-color-light .cmb2-element.ui-datepicker td.ui-datepicker-today{background:#eee}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-widget-header{background:#56b274}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker thead,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker thead{background:#36533f}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker td .ui-state-hover{background:#446950;color:#fff}.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-widget-header{background:#4ca26a}.admin-color-bbp-mint .cmb2-element .ui-datepicker thead,.admin-color-bbp-mint .cmb2-element.ui-datepicker thead{background:#4f6d59}.admin-color-bbp-mint .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-bbp-mint .cmb2-element.ui-datepicker td .ui-state-hover{background:#5fb37c;color:#fff}.cmb2-char-counter-wrap{margin:.5em 0 1em}.cmb2-char-counter-wrap input[type=text]{font-size:12px;width:25px}.cmb2-char-counter-wrap.cmb2-max-exceeded input[type=text]{border-color:#a00!important}.cmb2-char-counter-wrap.cmb2-max-exceeded .cmb2-char-max-msg{display:inline-block}.cmb2-char-max-msg{color:#a00;display:none;font-weight:600;margin-left:1em}PK     ƒŠU]DUVÁ‹�  ‹�  %  vendor/cmb2/cmb2/css/cmb2-rtl.min.cssnu „[µü¤        /*! CMB2 - v2.12.0 - 2026-05-31 | https://cmb2.io | Copyright (c) 2026 CMB2 team | Licensed GPLv2 */
/*!
 * CMB2 - v2.12.0 - 2026-05-31
 * https://cmb2.io
 * Copyright (c) 2026
 * Licensed GPLv2+
 */.cmb2-wrap{margin:0}.cmb2-wrap input,.cmb2-wrap textarea{max-width:100%}.cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb2-wrap textarea{width:500px;padding:8px}.cmb2-wrap textarea.cmb2-textarea-code{font-family:"Courier 10 Pitch",Courier,monospace;line-height:16px}.cmb2-wrap input.cmb2-text-small,.cmb2-wrap input.cmb2-timepicker{width:100px}.cmb2-wrap input.cmb2-text-money{width:90px}.cmb2-wrap input.cmb2-text-medium{width:230px}.cmb2-wrap input.cmb2-upload-file{width:65%}.cmb2-wrap input.ed_button{padding:2px 4px}.cmb2-wrap input:not([type=hidden])+.button-secondary,.cmb2-wrap input:not([type=hidden])+input,.cmb2-wrap input:not([type=hidden])+select{margin-right:20px}.cmb2-wrap ul{margin:0}.cmb2-wrap li{font-size:14px;line-height:16px;margin:1px 0 5px 0}.cmb2-wrap select{font-size:14px;margin-top:3px}.cmb2-wrap input[type=radio]{margin:0 0 0 5px;padding:0}.cmb2-wrap input[type=checkbox]{margin:0 0 0 5px;padding:0}.cmb2-wrap .button-secondary,.cmb2-wrap button{white-space:nowrap}.cmb2-wrap .mceLayout{border:1px solid #e9e9e9!important}.cmb2-wrap .mceIframeContainer{background:#fff}.cmb2-wrap .meta_mce{width:97%}.cmb2-wrap .meta_mce textarea{width:100%}.cmb2-wrap .cmb-multicheck-toggle{margin-top:-1em}.cmb2-wrap .wp-picker-clear.button,.cmb2-wrap .wp-picker-default.button{margin-right:6px;padding:2px 8px}.cmb2-wrap .cmb-row{margin:0}.cmb2-wrap .cmb-row:after{content:"";clear:both;display:block;width:100%}.cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description{padding-top:0;padding-bottom:1em}body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before{margin:.1875rem}@media screen and (max-width:782px){body.block-editor-page.branch-5-3 .cmb2-wrap .cmb-row .cmb2-radio-list input[type=radio]::before{margin:.4375rem}}.cmb2-metabox{clear:both;margin:0}.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-th,.cmb2-metabox>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox>.cmb-row:first-of-type>.cmb-th{border:0}.cmb-add-row{margin:1.8em 0 0}.cmb-nested .cmb-td,.cmb-repeatable-group .cmb-th,.cmb-repeatable-group:first-of-type{border:0}.cmb-repeatable-group:last-of-type,.cmb-row:last-of-type,.cmb2-wrap .cmb-row:last-of-type{border-bottom:0}.cmb-repeatable-grouping{border:1px solid #e9e9e9;padding:0 1em}.cmb-repeatable-grouping.cmb-row{margin:0 0 .8em}.cmb-th{color:#222;float:right;font-weight:600;padding:20px 0 20px 10px;vertical-align:top;width:200px}@media (max-width:450px){.cmb-th{font-size:1.2em;display:block;float:none;padding-bottom:1em;text-align:right;width:100%}.cmb-th label{display:block;margin-top:0;margin-bottom:.5em}}.cmb-td{line-height:1.3;max-width:100%;padding:15px 10px;vertical-align:middle}.cmb-type-title .cmb-td{padding:0}.cmb-th label{display:block;padding:5px 0}.cmb-th+.cmb-td{float:right}.cmb-td .cmb-td{padding-bottom:1em}.cmb-remove-row{text-align:left}.empty-row.hidden{display:none}.cmb-repeat-table{background-color:#fafafa;border:1px solid rgb(225.35,225.35,225.35)}.cmb-repeat-table .cmb-row.cmb-repeat-row{position:relative;counter-increment:el;margin:0;padding:10px 50px 10px 10px;border-bottom:none!important}.cmb-repeat-table .cmb-row.cmb-repeat-row+.cmb-repeat-row{border-top:solid 1px #e9e9e9}.cmb-repeat-table .cmb-row.cmb-repeat-row.ui-sortable-helper{outline:dashed 2px #e9e9e9!important}.cmb-repeat-table .cmb-row.cmb-repeat-row:before{content:counter(el);display:block;top:0;right:0;position:absolute;width:35px;height:100%;line-height:35px;cursor:move;color:#757575;text-align:center;border-left:solid 1px #e9e9e9}.cmb-repeat-table .cmb-row.cmb-repeat-row .cmb-td{margin:0;padding:0}.cmb-repeat-table+.cmb-add-row{margin:0}.cmb-repeat-table+.cmb-add-row:before{content:"";width:1px;height:1.6em;display:block;margin-right:17px;background-color:rgb(220.25,220.25,220.25)}.cmb-repeat-table .cmb-remove-row{top:7px;left:7px;position:absolute;width:auto;margin-right:0;padding:0!important;display:none}.cmb-repeat-table .cmb-remove-row>.cmb-remove-row-button{font-size:20px;text-indent:-1000px;overflow:hidden;position:relative;height:auto;line-height:1;padding:0 10px 0}.cmb-repeat-table .cmb-remove-row>.cmb-remove-row-button:before{content:"\f335";font-family:Dashicons;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;margin:0;text-indent:0;position:absolute;top:0;right:0;width:100%;height:100%;text-align:center;line-height:1.3}.cmb-repeat-table .cmb-repeat-row:hover .cmb-remove-row{display:block}.cmb-repeatable-group .cmb-th{padding:5px}.cmb-repeatable-group .cmb-group-title{background-color:#e9e9e9;padding:8px 2.2em 8px 12px;margin:0 -1em;min-height:1.5em;font-size:14px;line-height:1.4}.cmb-repeatable-group .cmb-group-title h4{border:0;margin:0;font-size:1.2em;font-weight:500;padding:.5em .75em}.cmb-repeatable-group .cmb-group-title .cmb-th{display:block;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th{font-size:1.2em;display:block;float:none;padding-bottom:1em;text-align:right;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th label{display:block;margin-top:0;margin-bottom:.5em}.cmb-repeatable-group .cmb-shift-rows{margin-left:1em}.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-up-alt2{margin-top:.15em}.cmb-repeatable-group .cmb-shift-rows .dashicons-arrow-down-alt2{margin-top:.2em}.cmb-repeatable-group .cmb2-upload-button{float:left}p.cmb2-metabox-description{color:#666;letter-spacing:.01em;margin:0;padding-top:.5em}span.cmb2-metabox-description{color:#666;letter-spacing:.01em}.cmb2-metabox-title{margin:0 0 5px 0;padding:5px 0 0 0;font-size:14px}.cmb-inline ul{padding:4px 0 0 0}.cmb-inline li{display:inline-block;padding-left:18px}.cmb-type-textarea-code pre{margin:0}.cmb2-media-status .img-status{clear:none;display:inline-block;vertical-align:middle;margin-left:10px;width:auto}.cmb2-media-status .img-status img{max-width:350px;height:auto}.cmb2-media-status .embed-status,.cmb2-media-status .img-status img{background:#eee;border:5px solid #fff;outline:1px solid #e9e9e9;box-shadow:inset 0 0 15px rgba(0,0,0,.3),inset 0 0 0 1px rgba(0,0,0,.05);background-image:linear-gradient(-45deg,#d0d0d0 25%,transparent 25%,transparent 75%,#d0d0d0 75%,#d0d0d0),linear-gradient(-45deg,#d0d0d0 25%,transparent 25%,transparent 75%,#d0d0d0 75%,#d0d0d0);background-position:100% 0,right 10px top 10px;background-size:20px 20px;border-radius:2px;-moz-border-radius:2px;margin:15px 0 0 0}.cmb2-media-status .embed-status{float:right;max-width:800px}.cmb2-media-status .embed-status,.cmb2-media-status .img-status{position:relative}.cmb2-media-status .embed-status .cmb2-remove-file-button,.cmb2-media-status .img-status .cmb2-remove-file-button{background:url(../images/ico-delete.png);height:16px;right:-5px;position:absolute;text-indent:-9999px;top:-5px;width:16px}.cmb2-media-status .img-status .cmb2-remove-file-button{top:10px}.cmb2-media-status .file-status>span,.cmb2-media-status .img-status img{cursor:pointer}.cmb2-media-status.cmb-attach-list .file-status>span,.cmb2-media-status.cmb-attach-list .img-status img{cursor:move}.cmb-type-file-list .cmb2-media-status .img-status{clear:none;vertical-align:middle;width:auto;margin-left:10px;margin-bottom:10px;margin-top:0}.cmb-attach-list li{clear:both;display:inline-block;width:100%;margin-top:5px;margin-bottom:10px}.cmb-attach-list li img{float:right;margin-left:10px}.cmb2-remove-wrapper{margin:0}.child-cmb2 .cmb-th{text-align:right}.cmb2-indented-hierarchy{padding-right:1.5em}@media (max-width:450px){.cmb-td,.cmb-th,.cmb-th+.cmb-td{display:block;float:none;width:100%}}#poststuff .cmb-group-title{margin-right:-1em;margin-left:-1em;min-height:1.5em}#poststuff .repeatable .cmb-group-title{padding-right:2.2em}.cmb-type-group .cmb2-wrap,.cmb2-postbox .cmb2-wrap{margin:0}.cmb-type-group .cmb2-wrap>.cmb-field-list>.cmb-row,.cmb2-postbox .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.8em 0}.cmb-type-group .cmb2-wrap input[type=text].cmb2-oembed,.cmb2-postbox .cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb-type-group .cmb-row,.cmb2-postbox .cmb-row{padding:0 0 1.8em;margin:0 0 .8em}.cmb-type-group .cmb-row .cmbhandle,.cmb2-postbox .cmb-row .cmbhandle{left:-1em;position:relative;color:#222}.cmb-type-group .cmb-repeatable-grouping,.cmb2-postbox .cmb-repeatable-grouping{padding:0 1em;max-width:100%;min-width:1px!important}.cmb-type-group .cmb-repeatable-group>.cmb-row,.cmb2-postbox .cmb-repeatable-group>.cmb-row{padding-bottom:0}.cmb-type-group .cmb-th,.cmb2-postbox .cmb-th{width:18%;padding:0 0 0 2%}.cmb-type-group .cmb-td,.cmb2-postbox .cmb-td{margin-bottom:0;padding:0;line-height:1.3}.cmb-type-group .cmb-th+.cmb-td,.cmb2-postbox .cmb-th+.cmb-td{width:80%;float:left}.cmb-type-group .cmb-repeatable-group:not(:last-of-type),.cmb-type-group .cmb-row:not(:last-of-type),.cmb2-postbox .cmb-repeatable-group:not(:last-of-type),.cmb2-postbox .cmb-row:not(:last-of-type){border-bottom:1px solid #e9e9e9}@media (max-width:450px){.cmb-type-group .cmb-repeatable-group:not(:last-of-type),.cmb-type-group .cmb-row:not(:last-of-type),.cmb2-postbox .cmb-repeatable-group:not(:last-of-type),.cmb2-postbox .cmb-row:not(:last-of-type){border-bottom:0}}.cmb-type-group .cmb-remove-field-row,.cmb-type-group .cmb-repeat-group-field,.cmb2-postbox .cmb-remove-field-row,.cmb2-postbox .cmb-repeat-group-field{padding-top:1.8em}.cmb-type-group .button-secondary .dashicons,.cmb2-postbox .button-secondary .dashicons{line-height:1.3}.cmb-type-group .button-secondary.move-down .dashicons,.cmb-type-group .button-secondary.move-up .dashicons,.cmb2-postbox .button-secondary.move-down .dashicons,.cmb2-postbox .button-secondary.move-up .dashicons{line-height:1.1}.cmb-type-group .button-secondary.cmb-add-group-row .dashicons,.cmb2-postbox .button-secondary.cmb-add-group-row .dashicons{line-height:1.5}.js .cmb2-postbox.context-box .handlediv{text-align:center}.js .cmb2-postbox.context-box .toggle-indicator:before{content:"\f142";display:inline-block;font:normal 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js .cmb2-postbox.context-box.closed .toggle-indicator:before{content:"\f140"}.cmb2-postbox.context-box{margin-bottom:10px}.cmb2-postbox.context-box.context-before_permalink-box{margin-top:10px}.cmb2-postbox.context-box.context-after_title-box{margin-top:10px}.cmb2-postbox.context-box.context-after_editor-box{margin-top:20px;margin-bottom:0}.cmb2-postbox.context-box.context-form_top-box{margin-top:10px}.cmb2-postbox.context-box.context-form_top-box .hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.cmb2-postbox.context-box .hndle{cursor:auto}.cmb2-context-wrap{margin-top:10px}.cmb2-context-wrap.cmb2-context-wrap-form_top{margin-left:300px;width:auto}.cmb2-context-wrap.cmb2-context-wrap-no-title .cmb2-metabox{padding:10px}.cmb2-context-wrap .cmb-th{padding:0 0 0 2%;width:18%}.cmb2-context-wrap .cmb-td{width:80%;padding:0}.cmb2-context-wrap .cmb-row{margin-bottom:10px}.cmb2-context-wrap .cmb-row:last-of-type{margin-bottom:0}@media only screen and (max-width:850px){.cmb2-context-wrap.cmb2-context-wrap-form_top{margin-left:0}}.cmb2-options-page{max-width:1200px}.cmb2-options-page.wrap>h2{margin-bottom:1em}.cmb2-options-page .cmb2-metabox>.cmb-row{padding:1em;margin-top:-1px;background:#fff;border:1px solid #e9e9e9;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th{padding:0;font-weight:initial}.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th+.cmb-td{float:none;padding:0 1em 0 0;margin-right:200px}@media (max-width:450px){.cmb2-options-page .cmb2-metabox>.cmb-row>.cmb-th+.cmb-td{padding:0;margin-right:0}}.cmb2-options-page .cmb2-wrap .cmb-type-title{margin-top:1em;padding:.6em 1em;background-color:#fafafa}.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-title{font-size:12px;margin-top:0;margin-bottom:0;text-transform:uppercase}.cmb2-options-page .cmb2-wrap .cmb-type-title .cmb2-metabox-description{padding-top:.25em}.cmb2-options-page .cmb-repeatable-group .cmb-group-description .cmb-th{padding:0 0 .8em 0}.cmb2-options-page .cmb-repeatable-group .cmb-group-name{font-size:16px;margin-top:0;margin-bottom:0}.cmb2-options-page .cmb-repeatable-group .cmb-th>.cmb2-metabox-description{font-weight:400;padding-bottom:0!important}#addtag .cmb-th{float:none;width:auto;padding:20px 0 0}#addtag .cmb-td{padding:0}#addtag .cmb-th+.cmb-td{float:none}#addtag select{max-width:100%}#addtag .cmb2-metabox{padding-bottom:20px}#addtag .cmb-row li label{display:inline}#poststuff .cmb-repeatable-group h2{margin:0}.edit-tags-php .cmb2-metabox-title,.profile-php .cmb2-metabox-title,.user-edit-php .cmb2-metabox-title{font-size:1.4em}.cmb2-no-box-wrap .cmb-spinner,.cmb2-postbox .cmb-spinner{float:right;display:none}.cmb-spinner{display:none}.cmb-spinner.is-active{display:block}#side-sortables .cmb2-wrap>.cmb-field-list>.cmb-row,.inner-sidebar .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.4em 0}#side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker),.inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker){width:100%}#side-sortables .cmb2-wrap input+input:not(.wp-picker-clear),#side-sortables .cmb2-wrap input+select,.inner-sidebar .cmb2-wrap input+input:not(.wp-picker-clear),.inner-sidebar .cmb2-wrap input+select{margin-right:0;margin-top:1em;display:block}#side-sortables .cmb2-wrap input.cmb2-text-money,.inner-sidebar .cmb2-wrap input.cmb2-text-money{max-width:70%}#side-sortables .cmb2-wrap input.cmb2-text-money+.cmb2-metabox-description,.inner-sidebar .cmb2-wrap input.cmb2-text-money+.cmb2-metabox-description{display:block}#side-sortables .cmb2-wrap label,.inner-sidebar .cmb2-wrap label{display:block;font-weight:700;padding:0 0 5px}#side-sortables textarea,.inner-sidebar textarea{max-width:99%}#side-sortables .cmb-repeatable-group,.inner-sidebar .cmb-repeatable-group{border-bottom:1px solid #e9e9e9}#side-sortables .cmb-type-group>.cmb-td>.cmb-repeatable-group,.inner-sidebar .cmb-type-group>.cmb-td>.cmb-repeatable-group{border-bottom:0;margin-bottom:-1.4em}#side-sortables .cmb-td:not(.cmb-remove-row),#side-sortables .cmb-th,#side-sortables .cmb-th+.cmb-td,.inner-sidebar .cmb-td:not(.cmb-remove-row),.inner-sidebar .cmb-th,.inner-sidebar .cmb-th+.cmb-td{width:100%;display:block;float:none}#side-sortables .closed .inside,.inner-sidebar .closed .inside{display:none}#side-sortables .cmb-th,.inner-sidebar .cmb-th{display:block;float:none;padding-bottom:1em;text-align:right;width:100%}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{display:block;margin-top:0;margin-bottom:.5em}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{font-size:14px;line-height:1.4em}#side-sortables .cmb-th,.inner-sidebar .cmb-th{padding-right:0;padding-left:0}#side-sortables .cmb-group-description .cmb-th,.inner-sidebar .cmb-group-description .cmb-th{padding-top:0}#side-sortables .cmb-group-description .cmb2-metabox-description,.inner-sidebar .cmb-group-description .cmb2-metabox-description{padding:0}#side-sortables .cmb-group-title .cmb-th,.inner-sidebar .cmb-group-title .cmb-th{padding:0}#side-sortables .cmb-repeatable-grouping+.cmb-repeatable-grouping,.inner-sidebar .cmb-repeatable-grouping+.cmb-repeatable-grouping{margin-top:1em}#side-sortables .cmb2-media-status .embed-status img,#side-sortables .cmb2-media-status .img-status img,.inner-sidebar .cmb2-media-status .embed-status img,.inner-sidebar .cmb2-media-status .img-status img{max-width:90%;height:auto}#side-sortables .cmb2-list label,.inner-sidebar .cmb2-list label{display:inline;font-weight:400}#side-sortables .cmb2-metabox-description,.inner-sidebar .cmb2-metabox-description{display:block;padding:7px 0 0}#side-sortables .cmb-type-checkbox .cmb-td label,#side-sortables .cmb-type-checkbox .cmb2-metabox-description,.inner-sidebar .cmb-type-checkbox .cmb-td label,.inner-sidebar .cmb-type-checkbox .cmb2-metabox-description{font-weight:400;display:inline}#side-sortables .cmb-row .cmb2-metabox-description,.inner-sidebar .cmb-row .cmb2-metabox-description{padding-bottom:1.8em}#side-sortables .cmb2-metabox-title,.inner-sidebar .cmb2-metabox-title{font-size:1.2em;font-style:italic}#side-sortables .cmb-remove-row,.inner-sidebar .cmb-remove-row{clear:both;padding-top:12px;padding-bottom:0}#side-sortables .cmb2-upload-button,.inner-sidebar .cmb2-upload-button{clear:both;margin-top:12px}.cmb2-metabox .cmbhandle{color:#757575;float:left;width:27px;height:30px;cursor:pointer;left:-1em;position:relative}.cmb2-metabox .cmbhandle:before{content:"\f142";left:12px;font:normal 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.cmb2-metabox .postbox.closed .cmbhandle:before{content:"\f140"}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row{-webkit-appearance:none!important;background:0 0!important;border:none!important;position:absolute;right:0;top:.5em;line-height:1em;padding:2px 6px 3px;opacity:.5}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]){cursor:pointer;color:#a00;opacity:1}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover{color:red}* html .cmb2-element.ui-helper-clearfix{height:1%}.cmb2-element .ui-datepicker,.cmb2-element.ui-datepicker{padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background-color:#fff;border:1px solid #dfdfdf;border-top:none;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075);min-width:17em;width:auto}.cmb2-element .ui-datepicker *,.cmb2-element.ui-datepicker *{padding:0;font-family:"Open Sans",sans-serif;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.cmb2-element .ui-datepicker table,.cmb2-element.ui-datepicker table{font-size:13px;margin:0;border:none;border-collapse:collapse}.cmb2-element .ui-datepicker .ui-datepicker-header,.cmb2-element .ui-datepicker .ui-widget-header,.cmb2-element.ui-datepicker .ui-datepicker-header,.cmb2-element.ui-datepicker .ui-widget-header{background-image:none;border:none;color:#fff;font-weight:400}.cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover,.cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover{background:0 0;border-color:transparent;cursor:pointer}.cmb2-element .ui-datepicker .ui-datepicker-title,.cmb2-element.ui-datepicker .ui-datepicker-title{margin:0;padding:10px 0;color:#fff;font-size:14px;line-height:14px;text-align:center}.cmb2-element .ui-datepicker .ui-datepicker-title select,.cmb2-element.ui-datepicker .ui-datepicker-title select{margin-top:-8px;margin-bottom:-8px}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-prev{position:relative;top:0;height:34px;width:34px}.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-next,.cmb2-element .ui-datepicker .ui-state-hover.ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-next,.cmb2-element.ui-datepicker .ui-state-hover.ui-datepicker-prev{border:none}.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element .ui-datepicker .ui-datepicker-prev-hover,.cmb2-element.ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-prev-hover{right:0}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element .ui-datepicker .ui-datepicker-next-hover,.cmb2-element.ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-next-hover{left:0}.cmb2-element .ui-datepicker .ui-datepicker-next span,.cmb2-element .ui-datepicker .ui-datepicker-prev span,.cmb2-element.ui-datepicker .ui-datepicker-next span,.cmb2-element.ui-datepicker .ui-datepicker-prev span{display:none}.cmb2-element .ui-datepicker .ui-datepicker-prev,.cmb2-element.ui-datepicker .ui-datepicker-prev{float:right}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element.ui-datepicker .ui-datepicker-next{float:left}.cmb2-element .ui-datepicker .ui-datepicker-next:before,.cmb2-element .ui-datepicker .ui-datepicker-prev:before,.cmb2-element.ui-datepicker .ui-datepicker-next:before,.cmb2-element.ui-datepicker .ui-datepicker-prev:before{font:normal 20px/34px dashicons;padding-right:7px;color:#fff;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:34px;height:34px}.cmb2-element .ui-datepicker .ui-datepicker-prev:before,.cmb2-element.ui-datepicker .ui-datepicker-prev:before{content:"\f341"}.cmb2-element .ui-datepicker .ui-datepicker-next:before,.cmb2-element.ui-datepicker .ui-datepicker-next:before{content:"\f345"}.cmb2-element .ui-datepicker .ui-datepicker-next-hover:before,.cmb2-element .ui-datepicker .ui-datepicker-prev-hover:before,.cmb2-element.ui-datepicker .ui-datepicker-next-hover:before,.cmb2-element.ui-datepicker .ui-datepicker-prev-hover:before{opacity:.7}.cmb2-element .ui-datepicker select.ui-datepicker-month,.cmb2-element .ui-datepicker select.ui-datepicker-year,.cmb2-element.ui-datepicker select.ui-datepicker-month,.cmb2-element.ui-datepicker select.ui-datepicker-year{width:33%;background:0 0;border-color:transparent;box-shadow:none;color:#fff}.cmb2-element .ui-datepicker select.ui-datepicker-month option,.cmb2-element .ui-datepicker select.ui-datepicker-year option,.cmb2-element.ui-datepicker select.ui-datepicker-month option,.cmb2-element.ui-datepicker select.ui-datepicker-year option{color:#333}.cmb2-element .ui-datepicker thead,.cmb2-element.ui-datepicker thead{color:#fff;font-weight:600}.cmb2-element .ui-datepicker thead th,.cmb2-element.ui-datepicker thead th{font-weight:400}.cmb2-element .ui-datepicker th,.cmb2-element.ui-datepicker th{padding:10px}.cmb2-element .ui-datepicker td,.cmb2-element.ui-datepicker td{padding:0;border:1px solid #f4f4f4}.cmb2-element .ui-datepicker td.ui-datepicker-other-month,.cmb2-element.ui-datepicker td.ui-datepicker-other-month{border:transparent}.cmb2-element .ui-datepicker td.ui-datepicker-week-end,.cmb2-element.ui-datepicker td.ui-datepicker-week-end{background-color:#f4f4f4;border:1px solid #f4f4f4}.cmb2-element .ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today,.cmb2-element.ui-datepicker td.ui-datepicker-week-end.ui-datepicker-today{-webkit-box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 0 1px 0 rgba(0,0,0,.1)}.cmb2-element .ui-datepicker td.ui-datepicker-today,.cmb2-element.ui-datepicker td.ui-datepicker-today{background-color:#f0f0c0}.cmb2-element .ui-datepicker td.ui-datepicker-current-day,.cmb2-element.ui-datepicker td.ui-datepicker-current-day{background:#bd8}.cmb2-element .ui-datepicker td .ui-state-default,.cmb2-element.ui-datepicker td .ui-state-default{background:0 0;border:none;text-align:center;text-decoration:none;width:auto;display:block;padding:5px 10px;font-weight:400;color:#444}.cmb2-element .ui-datepicker td.ui-state-disabled .ui-state-default,.cmb2-element.ui-datepicker td.ui-state-disabled .ui-state-default{opacity:.5}.cmb2-element .ui-datepicker .ui-datepicker-header,.cmb2-element .ui-datepicker .ui-widget-header,.cmb2-element.ui-datepicker .ui-datepicker-header,.cmb2-element.ui-datepicker .ui-widget-header{background:#00a0d2}.cmb2-element .ui-datepicker thead,.cmb2-element.ui-datepicker thead{background:#32373c}.cmb2-element .ui-datepicker td .ui-state-active,.cmb2-element .ui-datepicker td .ui-state-hover,.cmb2-element.ui-datepicker td .ui-state-active,.cmb2-element.ui-datepicker td .ui-state-hover{background:#0073aa;color:#fff}.cmb2-element .ui-datepicker .ui-timepicker-div,.cmb2-element.ui-datepicker .ui-timepicker-div{font-size:14px}.cmb2-element .ui-datepicker .ui-timepicker-div dl,.cmb2-element.ui-datepicker .ui-timepicker-div dl{text-align:right;padding:0 .6em}.cmb2-element .ui-datepicker .ui-timepicker-div dl dt,.cmb2-element.ui-datepicker .ui-timepicker-div dl dt{float:right;clear:right;padding:0 5px 0 0}.cmb2-element .ui-datepicker .ui-timepicker-div dl dd,.cmb2-element.ui-datepicker .ui-timepicker-div dl dd{margin:0 40% 10px 10px}.cmb2-element .ui-datepicker .ui-timepicker-div dl dd select,.cmb2-element.ui-datepicker .ui-timepicker-div dl dd select{width:100%}.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane{padding:.6em;text-align:right}.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-primary,.cmb2-element .ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-secondary,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-primary,.cmb2-element.ui-datepicker .ui-timepicker-div+.ui-datepicker-buttonpane .button-secondary{padding:0 10px 1px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:0 .4em .4em .6em}.admin-color-fresh .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-fresh .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-fresh .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-fresh .cmb2-element.ui-datepicker .ui-widget-header{background:#00a0d2}.admin-color-fresh .cmb2-element .ui-datepicker thead,.admin-color-fresh .cmb2-element.ui-datepicker thead{background:#32373c}.admin-color-fresh .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-fresh .cmb2-element.ui-datepicker td .ui-state-hover{background:#0073aa;color:#fff}.admin-color-blue .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-blue .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-blue .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-blue .cmb2-element.ui-datepicker .ui-widget-header{background:#52accc}.admin-color-blue .cmb2-element .ui-datepicker thead,.admin-color-blue .cmb2-element.ui-datepicker thead{background:#4796b3}.admin-color-blue .cmb2-element .ui-datepicker td .ui-state-active,.admin-color-blue .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-active,.admin-color-blue .cmb2-element.ui-datepicker td .ui-state-hover{background:#096484;color:#fff}.admin-color-blue .cmb2-element .ui-datepicker td.ui-datepicker-today,.admin-color-blue .cmb2-element.ui-datepicker td.ui-datepicker-today{background:#eee}.admin-color-coffee .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-coffee .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-coffee .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-coffee .cmb2-element.ui-datepicker .ui-widget-header{background:#59524c}.admin-color-coffee .cmb2-element .ui-datepicker thead,.admin-color-coffee .cmb2-element.ui-datepicker thead{background:#46403c}.admin-color-coffee .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-coffee .cmb2-element.ui-datepicker td .ui-state-hover{background:#c7a589;color:#fff}.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-ectoplasm .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-ectoplasm .cmb2-element.ui-datepicker .ui-widget-header{background:#523f6d}.admin-color-ectoplasm .cmb2-element .ui-datepicker thead,.admin-color-ectoplasm .cmb2-element.ui-datepicker thead{background:#413256}.admin-color-ectoplasm .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-ectoplasm .cmb2-element.ui-datepicker td .ui-state-hover{background:#a3b745;color:#fff}.admin-color-midnight .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-midnight .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-midnight .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-midnight .cmb2-element.ui-datepicker .ui-widget-header{background:#363b3f}.admin-color-midnight .cmb2-element .ui-datepicker thead,.admin-color-midnight .cmb2-element.ui-datepicker thead{background:#26292c}.admin-color-midnight .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-midnight .cmb2-element.ui-datepicker td .ui-state-hover{background:#e14d43;color:#fff}.admin-color-ocean .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-ocean .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-ocean .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-ocean .cmb2-element.ui-datepicker .ui-widget-header{background:#738e96}.admin-color-ocean .cmb2-element .ui-datepicker thead,.admin-color-ocean .cmb2-element.ui-datepicker thead{background:#627c83}.admin-color-ocean .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-ocean .cmb2-element.ui-datepicker td .ui-state-hover{background:#9ebaa0;color:#fff}.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-sunrise .cmb2-element .ui-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-sunrise .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-sunrise .cmb2-element.ui-datepicker .ui-widget-header{background:#cf4944}.admin-color-sunrise .cmb2-element .ui-datepicker th,.admin-color-sunrise .cmb2-element.ui-datepicker th{border-color:#be3631;background:#be3631}.admin-color-sunrise .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-sunrise .cmb2-element.ui-datepicker td .ui-state-hover{background:#dd823b;color:#fff}.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-light .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-light .cmb2-element.ui-datepicker .ui-widget-header{background:#e5e5e5}.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-month,.admin-color-light .cmb2-element .ui-datepicker select.ui-datepicker-year,.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-month,.admin-color-light .cmb2-element.ui-datepicker select.ui-datepicker-year{color:#555}.admin-color-light .cmb2-element .ui-datepicker thead,.admin-color-light .cmb2-element.ui-datepicker thead{background:#888}.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-next:before,.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-prev:before,.admin-color-light .cmb2-element .ui-datepicker .ui-datepicker-title,.admin-color-light .cmb2-element .ui-datepicker td .ui-state-default,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-next:before,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-prev:before,.admin-color-light .cmb2-element.ui-datepicker .ui-datepicker-title,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-default{color:#555}.admin-color-light .cmb2-element .ui-datepicker td .ui-state-active,.admin-color-light .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-active,.admin-color-light .cmb2-element.ui-datepicker td .ui-state-hover{background:#ccc}.admin-color-light .cmb2-element .ui-datepicker td.ui-datepicker-today,.admin-color-light .cmb2-element.ui-datepicker td.ui-datepicker-today{background:#eee}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-bbp-evergreen .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker .ui-widget-header{background:#56b274}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker thead,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker thead{background:#36533f}.admin-color-bbp-evergreen .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-bbp-evergreen .cmb2-element.ui-datepicker td .ui-state-hover{background:#446950;color:#fff}.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-datepicker-header,.admin-color-bbp-mint .cmb2-element .ui-datepicker .ui-widget-header,.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-datepicker-header,.admin-color-bbp-mint .cmb2-element.ui-datepicker .ui-widget-header{background:#4ca26a}.admin-color-bbp-mint .cmb2-element .ui-datepicker thead,.admin-color-bbp-mint .cmb2-element.ui-datepicker thead{background:#4f6d59}.admin-color-bbp-mint .cmb2-element .ui-datepicker td .ui-state-hover,.admin-color-bbp-mint .cmb2-element.ui-datepicker td .ui-state-hover{background:#5fb37c;color:#fff}.cmb2-char-counter-wrap{margin:.5em 0 1em}.cmb2-char-counter-wrap input[type=text]{font-size:12px;width:25px}.cmb2-char-counter-wrap.cmb2-max-exceeded input[type=text]{border-color:#a00!important}.cmb2-char-counter-wrap.cmb2-max-exceeded .cmb2-char-max-msg{display:inline-block}.cmb2-char-max-msg{color:#a00;display:none;font-weight:600;margin-right:1em}PK     ƒŠU]¿éØ€s  s  ,  vendor/wordpress/mcp-adapter/mcp-adapter.phpnu „[µü¤        <?php
/**
 * WordPress MCP Adapter
 *
 * @package     mcp-adapter
 * @author      WordPress.org Contributors
 * @copyright   2025 Plugin Contributors
 * @license     GPL-2.0-or-later
 *
 * @wordpress-plugin
 * Plugin Name:       MCP Adapter
 * Plugin URI:        https://github.com/WordPress/mcp-adapter
 * Description:       Adapter for Abilities API, letting the abilities to be used as MCP tools, resources or prompts.
 * Requires at least: 6.8
 * Version:           0.4.1
 * Requires PHP:      7.4
 * Author:            WordPress.org Contributors
 * Author URI:        https://github.com/WordPress/mcp-adapter/graphs/contributors
 * License:           GPLv2 or later
 * License URI:       https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * Text Domain:       mcp-adapter
 */

declare (strict_types = 1);

namespace WP\MCP;

// Exit if accessed directly.
defined( 'ABSPATH' ) || exit();

/**
 * Define the plugin constants.
 */
function constants(): void {
	/**
	 * Shortcut constant to the path of this file.
	 */
	define( 'WP_MCP_DIR', plugin_dir_path( __FILE__ ) );

	/**
	 * Version of the plugin.
	 */
	define( 'WP_MCP_VERSION', '0.4.1' );
}

constants();
require_once __DIR__ . '/includes/Autoloader.php';

// If autoloader failed, we cannot proceed.
if ( ! Autoloader::autoload() ) {
	return;
}

// Load the plugin.
if ( class_exists( Plugin::class ) ) {
	Plugin::instance();
}
PK     ƒŠU]�d�Ø  Ø  *  vendor/wordpress/mcp-adapter/composer.jsonnu „[µü¤        {
	"name": "wordpress/mcp-adapter",
	"description": "Adapter for Abilities API, letting WordPress abilities to be used as MCP tools, resources or prompts",
	"license": "GPL-2.0-or-later",
	"type": "library",
	"keywords": [
		"wordpress",
		"mcp",
		"api",
		"adapter",
		"integration",
		"model-context-protocol",
		"abilities-api",
		"ai"
	],
	"authors": [
		{
			"name": "WordPress AI Team",
			"homepage": "https://make.wordpress.org/ai/"
		}
	],
	"homepage": "https://github.com/wordpress/mcp-adapter",
	"support": {
		"issues": "https://github.com/wordpress/mcp-adapter/issues",
		"source": "https://github.com/wordpress/mcp-adapter"
	},
	"minimum-stability": "dev",
	"prefer-stable": true,
	"config": {
		"platform": {
			"php": "7.4"
		},
		"sort-packages": true,
		"optimize-autoloader": true,
		"preferred-install": "dist",
		"allow-plugins": {
			"automattic/jetpack-autoloader": true,
			"composer/installers": true,
			"dealerdirect/phpcodesniffer-composer-installer": true,
			"phpstan/extension-installer": true
		}
	},
	"repositories": [
		{
			"type": "composer",
			"url": "https://wpackagist.org",
			"only": [
				"wpackagist-plugin/*",
				"wpackagist-theme/*"
			]
		}
	],
	"extra": {
		"installer-paths": {
			"vendor/{$vendor}/{$name}/": [
				"wpackagist-plugin/plugin-check"
			]
		}
	},
	"autoload": {
		"psr-4": {
			"WP\\MCP\\": "includes/"
		}
	},
	"autoload-dev": {
		"psr-4": {
			"WP\\MCP\\Tests\\": [
				"tests/"
			]
		}
	},
	"require": {
		"php": "^7.4 || ^8.0"
	},
	"require-dev": {
		"automattic/vipwpcs": "^3.0",
		"php-stubs/wp-cli-stubs": "^2.12",
		"phpcompatibility/php-compatibility": "10.x-dev as 9.99.99",
		"phpcompatibility/phpcompatibility-wp": "^2.1",
		"phpstan/extension-installer": "^1.3",
		"phpstan/php-8-stubs": "^0.4.24",
		"phpstan/phpstan": "^2.1.22",
		"phpstan/phpstan-deprecation-rules": "^2.0.3",
		"phpunit/phpunit": "^9.6",
		"slevomat/coding-standard": "^8.0",
		"szepeviktor/phpstan-wordpress": "^2.0",
		"wp-phpunit/wp-phpunit": "^6.5",
		"wpackagist-plugin/plugin-check": "^1.6",
		"yoast/phpunit-polyfills": "^4.0"
	},
	"scripts": {
		"lint:php": "phpcs",
		"lint:php:fix": "phpcbf",
		"lint:php:stan": "vendor/bin/phpstan analyse --memory-limit=1G",
		"test": "phpunit --strict-coverage"
	}
}
PK     ƒŠU]¡ôFN¬F  ¬F  '  vendor/wordpress/mcp-adapter/LICENSE.mdnu „[µü¤                            GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
PK     ƒŠU]2¬Yõ  õ  0  vendor/wordpress/mcp-adapter/includes/Plugin.phpnu „[µü¤        <?php
/**
 * The main plugin file.
 *
 * If we evolve from a canonical plugin into WordPress core, this file would be left behind.
 *
 * @package WP\MCP
 */

declare(strict_types = 1);

namespace WP\MCP;

use WP\MCP\Core\McpAdapter;

/**
 * Class - Plugin
 */
final class Plugin {
	/**
	 * The one true plugin.
	 *
	 * @var static
	 */
	private static self $instance;

	/**
	 * Gets the singleton instance of the plugin.
	 *
	 * @return self The plugin instance.
	 */
	public static function instance(): self {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new self();
			self::$instance->setup();

			/**
			 * Fires after the main plugin class has been initialized.
			 *
			 * @param self $instance The main plugin class instance.
			 */
			do_action( 'wp_mcp_init', self::$instance );
		}

		return self::$instance;
	}

	/**
	 * Sets up the plugin.
	 */
	private function setup(): void {
		// Bail if dependencies are not met.
		if ( ! $this->has_dependencies() ) {
			return;
		}

		McpAdapter::instance();
	}

	/**
	 * Checks if all required dependencies are available.
	 *
	 * Will log an admin notice if dependencies are missing.
	 *
	 * @return bool True if all dependencies are met, false otherwise.
	 */
	private function has_dependencies(): bool {
		// Check if Abilities API is available.
		if ( ! function_exists( 'wp_register_ability' ) ) {
			add_action(
				'admin_notices',
				static function () {
					wp_admin_notice(
						__( 'Abilities API not available (wp_register_ability function not found)', 'mcp-adapter' ),
						array(
							'type'    => 'error',
							'dismiss' => false,
						),
					);
				}
			);

			return false;
		}

		return true;
	}

	/**
	 * Prevents the class from being cloned.
	 */
	public function __clone() {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				// translators: %s: Class name.
				esc_html__( 'The %s class should not be cloned.', 'mcp-adapter' ),
				esc_html( self::class ),
			),
			'0.1.0'
		);
	}

	/**
	 * Prevents the class from being deserialized.
	 */
	public function __wakeup() {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				// translators: %s: Class name.
				esc_html__( 'De-serializing instances of %s is not allowed.', 'mcp-adapter' ),
				esc_html( self::class ),
			),
			'0.1.0'
		);
	}
}
PK     ƒŠU]ŽE@5b  b  L  vendor/wordpress/mcp-adapter/includes/Abilities/DiscoverAbilitiesAbility.phpnu „[µü¤        <?php
/**
 * Ability for discovering available WordPress abilities.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Abilities;

/**
 * Discover Abilities - Lists all available WordPress abilities in the system.
 *
 * This ability provides discovery functionality for the MCP protocol.
 * It discovers all registered WordPress abilities in the system.
 *
 * SECURITY CONSIDERATIONS:
 * - This ability exposes information about all registered abilities in the system
 * - Only abilities with mcp.public=true metadata will be returned
 * - Requires proper WordPress capability checks for secure operation
 *
 * @see https://github.com/your-repo/mcp-adapter/docs/security.md for detailed security configuration
 */
final class DiscoverAbilitiesAbility {
	use McpAbilityHelperTrait;

	/**
	 * Register the ability.
	 */
	public static function register(): void {
		wp_register_ability(
			'mcp-adapter/discover-abilities',
			array(
				'label'               => 'Discover Abilities',
				'description'         => 'Discover all available WordPress abilities in the system. Returns a list of all registered abilities with their basic information.',
				'category'            => 'mcp-adapter',
				'output_schema'       => array(
					'type'       => 'object',
					'properties' => array(
						'abilities' => array(
							'type'  => 'array',
							'items' => array(
								'type'       => 'object',
								'properties' => array(
									'name'        => array( 'type' => 'string' ),
									'label'       => array( 'type' => 'string' ),
									'description' => array( 'type' => 'string' ),
								),
								'required'   => array( 'name', 'label', 'description' ),
							),
						),
					),
					'required'   => array( 'abilities' ),
				),
				'permission_callback' => array( self::class, 'check_permission' ),
				'execute_callback'    => array( self::class, 'execute' ),
				'meta'                => array(
					'annotations' => array(
						'readonly'    => true,
						'destructive' => false,
						'idempotent'  => true,
					),
				),
			)
		);
	}

	/**
	 * Check permissions for discovering abilities.
	 *
	 * Validates user capabilities and caller identity.
	 *
	 * @param array $input Input parameters (unused for this ability).
	 *
	 * @return bool|\WP_Error True if the user has permission to discover abilities.
	 * @phpstan-return bool|\WP_Error
	 */
	public static function check_permission( $input = array() ) {
		// Validate user authentication and capabilities
		return self::validate_user_access();
	}

	/**
	 * Validate user authentication and basic capabilities for discover abilities.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	private static function validate_user_access() {
		// Verify caller identity - ensure user is authenticated
		if ( ! is_user_logged_in() ) {
			return new \WP_Error( 'authentication_required', 'User must be authenticated to access this ability' );
		}

		// Check basic capability requirement - allow customization via filter
		$required_capability = apply_filters( 'mcp_adapter_discover_abilities_capability', 'read' );
		// phpcs:ignore WordPress.WP.Capabilities.Undetermined -- Capability is determined dynamically via filter
		if ( ! current_user_can( $required_capability ) ) {
			return new \WP_Error(
				'insufficient_capability',
				sprintf( 'User lacks required capability: %s', $required_capability )
			);
		}

		return true;
	}

	/**
	 * Execute the discover abilities functionality.
	 *
	 * Enforces security checks and mcp.public filtering.
	 *
	 * @param array $input Input parameters (unused for this ability).
	 *
	 * @return array Array containing public MCP abilities.
	 */
	public static function execute( $input = array() ): array {
		// Enforce security checks before execution
		$permission_check = self::check_permission( $input );
		if ( is_wp_error( $permission_check ) ) {
			return array(
				'error' => $permission_check->get_error_message(),
			);
		}

		// Get all abilities and filter for publicly exposed ones
		$abilities = wp_get_abilities();

		$ability_list = array();
		foreach ( $abilities as $ability ) {
			$ability_name = $ability->get_name();

			// Check if ability is publicly exposed via MCP
			if ( ! self::is_ability_mcp_public( $ability ) ) {
				continue;
			}

			// Only discover abilities with type='tool' (default type)
			if ( self::get_ability_mcp_type( $ability ) !== 'tool' ) {
				continue;
			}

			$ability_list[] = array(
				'name'        => $ability_name,
				'label'       => $ability->get_label(),
				'description' => $ability->get_description(),
			);
		}

		return array(
			'abilities' => $ability_list,
		);
	}
}
PK     ƒŠU]½àS»    I  vendor/wordpress/mcp-adapter/includes/Abilities/GetAbilityInfoAbility.phpnu „[µü¤        <?php
/**
 * Ability for getting detailed information about WordPress abilities.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Abilities;

/**
 * Get Ability Info - Get detailed information about a specific WordPress ability.
 *
 * This ability provides detailed information about any registered WordPress ability,
 * including its input/output schemas, description, and usage examples.
 *
 * SECURITY CONSIDERATIONS:
 * - This ability exposes detailed schemas and metadata about abilities
 * - Only abilities with mcp.public=true metadata can be queried via default MCP server.
 * - Requires proper WordPress capability checks for secure operation
 *
 * @see https://github.com/your-repo/mcp-adapter/docs/security.md for detailed security configuration
 */
final class GetAbilityInfoAbility {
	use McpAbilityHelperTrait;

	/**
	 * Register the ability.
	 */
	public static function register(): void {
		wp_register_ability(
			'mcp-adapter/get-ability-info',
			array(
				'label'               => 'Get Ability Info',
				'description'         => 'Get detailed information about a specific WordPress ability including its input/output schema, description, and usage examples.',
				'category'            => 'mcp-adapter',
				'input_schema'        => array(
					'type'                 => 'object',
					'properties'           => array(
						'ability_name' => array(
							'type'        => 'string',
							'description' => 'The full name of the ability to get information about',
						),
					),
					'required'             => array( 'ability_name' ),
					'additionalProperties' => false,
				),
				'output_schema'       => array(
					'type'       => 'object',
					'properties' => array(
						'name'          => array( 'type' => 'string' ),
						'label'         => array( 'type' => 'string' ),
						'description'   => array( 'type' => 'string' ),
						'input_schema'  => array(
							'type'        => 'object',
							'description' => 'JSON Schema for the ability input parameters',
						),
						'output_schema' => array(
							'type'        => 'object',
							'description' => 'JSON Schema for the ability output structure',
						),
						'meta'          => array(
							'type'        => 'object',
							'description' => 'Additional metadata about the ability',
						),
					),
					'required'   => array( 'name', 'label', 'description', 'input_schema' ),
				),
				'permission_callback' => array( self::class, 'check_permission' ),
				'execute_callback'    => array( self::class, 'execute' ),
				'meta'                => array(
					'annotations' => array(
						'readonly'    => true,
						'destructive' => false,
						'idempotent'  => true,
					),
				),
			)
		);
	}

	/**
	 * Check permissions for getting ability info.
	 *
	 * Validates user capabilities, caller identity, and MCP exposure restrictions.
	 *
	 * @param array $input Input parameters containing ability_name.
	 *
	 * @return bool|\WP_Error True if the user has permission to get ability info.
	 * @phpstan-return bool|\WP_Error
	 */
	public static function check_permission( $input = array() ) {
		$ability_name = $input['ability_name'] ?? '';

		if ( empty( $ability_name ) ) {
			return new \WP_Error( 'missing_ability_name', 'Ability name is required' );
		}

		// Validate user authentication and capabilities
		$user_check = self::validate_user_access();
		if ( is_wp_error( $user_check ) ) {
			return $user_check;
		}

		// Check MCP exposure restrictions
		return self::check_ability_mcp_exposure( $ability_name );
	}

	/**
	 * Validate user authentication and basic capabilities for get ability info.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	private static function validate_user_access() {
		// Verify caller identity - ensure user is authenticated
		if ( ! is_user_logged_in() ) {
			return new \WP_Error( 'authentication_required', 'User must be authenticated to access this ability' );
		}

		// Check basic capability requirement - allow customization via filter
		$required_capability = apply_filters( 'mcp_adapter_get_ability_info_capability', 'read' );
		// phpcs:ignore WordPress.WP.Capabilities.Undetermined -- Capability is determined dynamically via filter
		if ( ! current_user_can( $required_capability ) ) {
			return new \WP_Error(
				'insufficient_capability',
				sprintf( 'User lacks required capability: %s', $required_capability )
			);
		}

		return true;
	}

	/**
	 * Execute the get ability info functionality.
	 *
	 * Enforces security checks before returning ability information.
	 *
	 * @param array $input Input parameters containing ability_name.
	 *
	 * @return array Array containing detailed ability information.
	 */
	public static function execute( $input = array() ): array {
		$ability_name = $input['ability_name'] ?? '';

		if ( empty( $ability_name ) ) {
			return array(
				'error' => 'Ability name is required',
			);
		}

		// Enforce security checks before execution
		$permission_check = self::check_permission( $input );
		if ( is_wp_error( $permission_check ) ) {
			return array(
				'error' => $permission_check->get_error_message(),
			);
		}

		$ability = wp_get_ability( $ability_name );

		if ( ! $ability ) {
			return array(
				'error' => "Ability '{$ability_name}' not found",
			);
		}

		$ability_info = array(
			'name'         => $ability->get_name(),
			'label'        => $ability->get_label(),
			'description'  => $ability->get_description(),
			'input_schema' => $ability->get_input_schema(),
		);

		// Add output schema if available
		$output_schema = $ability->get_output_schema();
		if ( ! empty( $output_schema ) ) {
			$ability_info['output_schema'] = $output_schema;
		}

		// Add meta information if available
		$meta = $ability->get_meta();
		if ( ! empty( $meta ) ) {
			$ability_info['meta'] = $meta;
		}

		return $ability_info;
	}
}
PK     ƒŠU]JÄ/¨D	  D	  I  vendor/wordpress/mcp-adapter/includes/Abilities/McpAbilityHelperTrait.phpnu „[µü¤        <?php
/**
 * Helper trait for WordPress abilities providing MCP-related utilities.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Abilities;

/**
 * Trait McpAbilityHelperTrait
 *
 * Provides helper methods for MCP abilities including MCP exposure checking and metadata handling.
 */
trait McpAbilityHelperTrait {

	/**
	 * Checks if ability is publicly exposed via MCP.
	 *
	 * Validates against the ability's mcp.public metadata flag.
	 * Only abilities with mcp.public=true are accessible via default MCP server.
	 *
	 * @param string $ability_name The ability name to check.
	 *
	 * @return bool|\WP_Error True if publicly exposed, WP_Error if not.
	 */
	protected static function check_ability_mcp_exposure( string $ability_name ) {
		$ability = wp_get_ability( $ability_name );

		if ( ! $ability ) {
			return new \WP_Error( 'ability_not_found', "Ability '{$ability_name}' not found" );
		}

		$meta          = $ability->get_meta();
		$is_public_mcp = $meta['mcp']['public'] ?? false;

		if ( ! $is_public_mcp ) {
			return new \WP_Error(
				'ability_not_public_mcp',
				sprintf( 'Ability "%s" is not exposed via MCP (mcp.public!=true)', $ability_name )
			);
		}

		return true;
	}

	/**
	 * Checks if ability is publicly exposed via MCP (simple boolean version).
	 *
	 * This is a simplified version that returns only boolean values,
	 * useful for filtering operations where WP_Error handling isn't needed.
	 *
	 * @param \WP_Ability $ability The ability object to check.
	 *
	 * @return bool True if publicly exposed, false otherwise.
	 */
	protected static function is_ability_mcp_public( \WP_Ability $ability ): bool {
		$meta = $ability->get_meta();
		return (bool) ( $meta['mcp']['public'] ?? false );
	}

	/**
	 * Gets the MCP type of an ability.
	 *
	 * Returns the type specified in meta.mcp.type, defaulting to 'tool' if not specified.
	 *
	 * @param \WP_Ability $ability The ability object to check.
	 *
	 * @return string The MCP type ('tool', 'resource', or 'prompt'). Defaults to 'tool'.
	 */
	protected static function get_ability_mcp_type( \WP_Ability $ability ): string {
		$meta = $ability->get_meta();
		$type = $meta['mcp']['type'] ?? 'tool';

		// Validate type is one of the allowed values
		if ( ! in_array( $type, array( 'tool', 'resource', 'prompt' ), true ) ) {
			return 'tool';
		}

		return $type;
	}
}
PK     ƒŠU]WÁœ2S  S  I  vendor/wordpress/mcp-adapter/includes/Abilities/ExecuteAbilityAbility.phpnu „[µü¤        <?php
/**
 * Ability for executing WordPress abilities.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Abilities;

/**
 * Execute Ability - Executes a WordPress ability with provided parameters.
 *
 * This ability provides the primary execution layer for running any registered
 * WordPress ability through the MCP protocol.
 *
 * SECURITY CONSIDERATIONS:
 * - This ability has openWorldHint=true, allowing execution of any registered ability
 * - Only abilities with mcp.public=true metadata can be executed via default MCP server.
 * - Requires proper WordPress capability checks for secure operation
 * - Caller identity verification is enforced through WordPress authentication
 *
 * @see https://github.com/your-repo/mcp-adapter/docs/security.md for detailed security configuration
 */
final class ExecuteAbilityAbility {
	use McpAbilityHelperTrait;

	/**
	 * Register the ability.
	 */
	public static function register(): void {
		wp_register_ability(
			'mcp-adapter/execute-ability',
			array(
				'label'               => 'Execute Ability',
				'description'         => 'Execute a WordPress ability with the provided parameters. This is the primary execution layer that can run any registered ability.',
				'category'            => 'mcp-adapter',
				'input_schema'        => array(
					'type'                 => 'object',
					'properties'           => array(
						'ability_name' => array(
							'type'        => 'string',
							'description' => 'The full name of the ability to execute',
						),
						'parameters'   => array(
							'type'        => 'object',
							'description' => 'Parameters to pass to the ability',
						),
					),
					'required'             => array( 'ability_name', 'parameters' ),
					'additionalProperties' => false,
				),
				'output_schema'       => array(
					'type'       => 'object',
					'properties' => array(
						'success' => array( 'type' => 'boolean' ),
						'data'    => array(
							'description' => 'The result data from the ability execution',
						),
						'error'   => array(
							'type'        => 'string',
							'description' => 'Error message if execution failed',
						),
					),
					'required'   => array( 'success' ),
				),
				'permission_callback' => array( self::class, 'check_permission' ),
				'execute_callback'    => array( self::class, 'execute' ),
				'meta'                => array(
					'annotations' => array(
						'readonly'    => false,
						'destructive' => true,
						'idempotent'  => false,
					),
				),
			)
		);
	}

	/**
	 * Check permissions for executing abilities.
	 *
	 * Validates user capabilities, caller identity, and MCP exposure restrictions.
	 *
	 * @param array $input Input parameters containing ability_name and parameters.
	 *
	 * @return bool|\WP_Error True if the user has permission to execute the specified ability.
	 * @phpstan-return bool|\WP_Error
	 */
	public static function check_permission( $input = array() ) {
		$ability_name = $input['ability_name'] ?? '';

		if ( empty( $ability_name ) ) {
			return new \WP_Error( 'missing_ability_name', 'Ability name is required' );
		}

		// Validate user authentication and capabilities
		$user_check = self::validate_user_access();
		if ( is_wp_error( $user_check ) ) {
			return $user_check;
		}

		// Check MCP exposure restrictions
		$exposure_check = self::check_ability_mcp_exposure( $ability_name );
		if ( is_wp_error( $exposure_check ) ) {
			return $exposure_check;
		}

		// Get the target ability
		$ability = wp_get_ability( $ability_name );
		if ( ! $ability ) {
			return new \WP_Error( 'ability_not_found', "Ability '{$ability_name}' not found" );
		}

		// Check if the user has permission to execute the target ability
		$parameters        = empty( $input['parameters'] ) ? null : $input['parameters'];
		$permission_result = $ability->check_permissions( $parameters );

		// Return WP_Error as-is, or convert other values to boolean
		if ( is_wp_error( $permission_result ) ) {
			return $permission_result;
		}

		return (bool) $permission_result;
	}

	/**
	 * Validate user authentication and basic capabilities for execute ability.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	private static function validate_user_access() {
		// Verify caller identity - ensure user is authenticated
		if ( ! is_user_logged_in() ) {
			return new \WP_Error( 'authentication_required', 'User must be authenticated to access this ability' );
		}

		// Check basic capability requirement - allow customization via filter
		$required_capability = apply_filters( 'mcp_adapter_execute_ability_capability', 'read' );
		// phpcs:ignore WordPress.WP.Capabilities.Undetermined -- Capability is determined dynamically via filter
		if ( ! current_user_can( $required_capability ) ) {
			return new \WP_Error(
				'insufficient_capability',
				sprintf( 'User lacks required capability: %s', $required_capability )
			);
		}

		return true;
	}

	/**
	 * Execute the ability execution functionality.
	 *
	 * Enforces security checks before executing any ability.
	 *
	 * @param array $input Input parameters containing ability_name and parameters.
	 *
	 * @return array Array containing execution results.
	 */
	public static function execute( $input = array() ): array {
		$ability_name = $input['ability_name'] ?? '';
		$parameters   = empty( $input['parameters'] ) ? null : $input['parameters'];

		if ( empty( $ability_name ) ) {
			return array(
				'success' => false,
				'error'   => 'Ability name is required',
			);
		}

		// Enforce security checks before execution
		// Note: WordPress will have already called check_permission, but we double-check
		// as an additional security layer for direct method calls
		$permission_check = self::check_permission( $input );
		if ( is_wp_error( $permission_check ) ) {
			return array(
				'success' => false,
				'error'   => $permission_check->get_error_message(),
			);
		}

		if ( ! $permission_check ) {
			return array(
				'success' => false,
				'error'   => 'Permission denied for ability execution',
			);
		}

		$ability = wp_get_ability( $ability_name );

		if ( ! $ability ) {
			return array(
				'success' => false,
				'error'   => "Ability '{$ability_name}' not found",
			);
		}

		try {
			// Execute the ability
			$result = $ability->execute( $parameters );

			// Check if the result is a WP_Error
			if ( is_wp_error( $result ) ) {
				return array(
					'success' => false,
					'error'   => $result->get_error_message(),
				);
			}

			return array(
				'success' => true,
				'data'    => $result,
			);
		} catch ( \Throwable $e ) {
			return array(
				'success' => false,
				'error'   => $e->getMessage(),
			);
		}
	}
}
PK     ƒŠU]¨¬ìk9  9  f  vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/ErrorLogMcpObservabilityHandler.phpnu „[µü¤        <?php
/**
 * ErrorLogMcpObservabilityHandler class for logging MCP observability metrics to PHP error log.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\Observability;

/**
 * Class ErrorLogMcpObservabilityHandler
 *
 * This class handles observability tracking by writing metrics to the PHP error log.
 * This provides a simple way to track MCP metrics without external dependencies.
 *
 * @package WP\MCP\ObservabilityHandlers
 */
class ErrorLogMcpObservabilityHandler implements Contracts\McpObservabilityHandlerInterface {

	use McpObservabilityHelperTrait;

	/**
	 * Emit a countable event for tracking with optional timing data.
	 *
	 * @param string     $event The event name to record.
	 * @param array      $tags Optional tags to attach to the event.
	 * @param float|null $duration_ms Optional duration in milliseconds for timing measurements.
	 *
	 * @return void
	 */
	public function record_event( string $event, array $tags = array(), ?float $duration_ms = null ): void {
		$formatted_event = self::format_metric_name( $event );
		$merged_tags     = self::merge_tags( $tags );
		$formatted_tags  = self::format_tags( $merged_tags );

		// Include timing data if provided
		if ( null !== $duration_ms ) {
			$log_message = sprintf(
				'[MCP Observability] EVENT %s %.2fms %s',
				$formatted_event,
				$duration_ms,
				$formatted_tags
			);
		} else {
			$log_message = sprintf(
				'[MCP Observability] EVENT %s %s',
				$formatted_event,
				$formatted_tags
			);
		}

		error_log( $log_message ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
	}

	/**
	 * Format tags array into a readable string for logging.
	 *
	 * @param array $tags The tags to format.
	 *
	 * @return string
	 */
	private static function format_tags( array $tags ): string {
		if ( empty( $tags ) ) {
			return '';
		}

		$formatted = array_map(
			static function ( $key, $value ) {
				return sprintf( '%s=%s', $key, $value );
			},
			array_keys( $tags ),
			array_values( $tags )
		);

		return '[' . implode( ',', $formatted ) . ']';
	}
}
PK     ƒŠU]7ã×c  c  b  vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/ConsoleObservabilityHandler.phpnu „[µü¤        <?php
/**
 * Console Observability Handler for testing and debugging.
 *
 * Outputs formatted observability events to stdout for easy testing.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\Observability;

use WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface;

/**
 * Console-based observability handler for testing.
 *
 * Outputs nicely formatted events to stdout/error_log with JSON formatting.
 */
class ConsoleObservabilityHandler implements McpObservabilityHandlerInterface {

	use McpObservabilityHelperTrait;

	/**
	 * Record an event with formatted output.
	 *
	 * @param string     $event The event name.
	 * @param array      $tags Tags to attach.
	 * @param float|null $duration_ms Duration in milliseconds.
	 *
	 * @return void
	 */
	public function record_event( string $event, array $tags = array(), ?float $duration_ms = null ): void {
		$formatted_event = self::format_metric_name( $event );
		$merged_tags     = self::merge_tags( $tags );

		// Create a structured output
		$output = array(
			'event'       => $formatted_event,
			'duration_ms' => $duration_ms,
			'tags'        => $merged_tags,
			'timestamp'   => gmdate( 'Y-m-d H:i:s' ),
		);

		// Pretty print JSON for readability
		$json = wp_json_encode( $output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES );

		// Output with visual separator
		$separator = str_repeat( '=', 80 );
		$message   = "\n{$separator}\n[MCP OBSERVABILITY EVENT]\n{$separator}\n{$json}\n{$separator}\n";

		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
		error_log( $message );
	}
}
PK     ƒŠU]ek³Xã  ã  b  vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/McpObservabilityHelperTrait.phpnu „[µü¤        <?php
/**
 * Helper trait for MCP observability handlers providing shared utility methods.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\Observability;

/**
 * Trait McpObservabilityHelperTrait
 *
 * Provides shared utility methods for observability handlers including
 * tag management, metric formatting, and sanitization functionality.
 */
trait McpObservabilityHelperTrait {
	/**
	 * Error categories keyed by throwable class name.
	 *
	 * @used-by ::categorize_error() method.
	*/
	private static array $error_categories = array(
		\ArgumentCountError::class       => 'arguments',
		\Error::class                    => 'system',
		\InvalidArgumentException::class => 'validation',
		\LogicException::class           => 'logic',
		\RuntimeException::class         => 'execution',
		\TypeError::class                => 'type',
	);

	/**
	 * Get default tags that should be included with all metrics.
	 *
	 * @return array
	 */
	public static function get_default_tags(): array {
		return array(
			'site_id'   => function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0,
			'user_id'   => function_exists( 'get_current_user_id' ) ? get_current_user_id() : 0,
			'timestamp' => time(),
		);
	}

	/**
	 * Sanitize tags to ensure they are safe for logging and don't contain sensitive data.
	 *
	 * @param array $tags The tags to sanitize.
	 *
	 * @return array
	 */
	public static function sanitize_tags( array $tags ): array {
		$sanitized = array();

		foreach ( $tags as $key => $value ) {
			// Convert to string and limit length to prevent log bloat.
			$key = substr( (string) $key, 0, 64 );

			// Convert value to string, handling null specially.
			if ( null === $value ) {
				$value = '';
			} elseif ( is_scalar( $value ) ) {
				$value = (string) $value;
			} else {
				$value = wp_json_encode( $value );
				// wp_json_encode can return false on failure, ensure we have a string.
				if ( false === $value ) {
					$value = '';
				}
			}

			// Remove potentially sensitive information patterns.
			$value = preg_replace( '/\b(?:password|token|key|secret|auth)\b/i', '[REDACTED]', $value );

			$sanitized[ $key ] = $value;
		}

		return $sanitized;
	}

	/**
	 * Format metric name to follow consistent naming conventions.
	 *
	 * @param string $metric The raw metric name.
	 *
	 * @return string
	 */
	public static function format_metric_name( string $metric ): string {
		// Ensure metric starts with 'mcp.' prefix.
		if ( ! str_starts_with( $metric, 'mcp.' ) ) {
			$metric = 'mcp.' . $metric;
		}

		// Convert to lowercase and replace spaces/special chars with dots.
		$metric = strtolower( $metric );
		$metric = (string) preg_replace( '/[^a-z0-9_\.]/', '.', $metric );
		$metric = (string) preg_replace( '/\.+/', '.', $metric ); // Remove duplicate dots.
		// Remove leading/trailing dots.

		return trim( $metric, '.' );
	}

	/**
	 * Merge default tags with provided tags.
	 *
	 * @param array $tags The user-provided tags.
	 *
	 * @return array
	 */
	public static function merge_tags( array $tags ): array {
		$default_tags = self::get_default_tags();
		$merged_tags  = array_merge( $default_tags, $tags );

		return self::sanitize_tags( $merged_tags );
	}

	/**
	 * Categorize an exception into a general error category.
	 *
	 * @param \Throwable $exception The exception to categorize.
	 *
	 * @return string
	 */
	public static function categorize_error( \Throwable $exception ): string {
		return self::$error_categories[ get_class( $exception ) ] ?? 'unknown';
	}
}
PK     ƒŠU]¿¯‡ìº  º  q  vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/Contracts/McpObservabilityHandlerInterface.phpnu „[µü¤        <?php
/**
 * Interface for MCP observability handlers.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\Observability\Contracts;

/**
 * Interface for handling MCP observability metrics and tracking.
 *
 * This interface defines the contract for observability handlers that can
 * track metrics like request counts, timing, and error rates in the MCP adapter.
 * Concrete implementations can integrate with various observability systems.
 */
interface McpObservabilityHandlerInterface {

	/**
	 * Emit a countable event for tracking with optional timing data.
	 *
	 * @param string     $event The event name to record.
	 * @param array      $tags Optional tags to attach to the event.
	 * @param float|null $duration_ms Optional duration in milliseconds for timing measurements.
	 *
	 * @return void
	 */
	public function record_event( string $event, array $tags = array(), ?float $duration_ms = null ): void;
}
PK     ƒŠU]T#“f#  #  b  vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/NullMcpObservabilityHandler.phpnu „[µü¤        <?php
/**
 * NullMcpObservabilityHandler class for handling MCP observability without tracking.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\Observability;

/**
 * Class NullMcpObservabilityHandler
 *
 * This class handles MCP observability by doing nothing. It is used when no
 * observability tracking is desired, providing zero overhead.
 *
 * @package WP\MCP\ObservabilityHandlers
 */
class NullMcpObservabilityHandler implements Contracts\McpObservabilityHandlerInterface {

	/**
	 * Emit a countable event for tracking with optional timing data.
	 *
	 * This method does nothing and is used when no observability tracking is desired.
	 *
	 * @param string     $event The event name to record.
	 * @param array      $tags Optional tags to attach to the event.
	 * @param float|null $duration_ms Optional duration in milliseconds for timing measurements.
	 *
	 * @return void
	 */
	public function record_event( string $event, array $tags = array(), ?float $duration_ms = null ): void {
		// Do nothing.
	}
}
PK     ƒŠU]�àBÔ-  -  V  vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/McpErrorFactory.phpnu „[µü¤        <?php
/**
 * Factory class for creating MCP error responses.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\ErrorHandling;

/**
 * Factory for creating standardized MCP error responses.
 *
 * This class provides static methods for creating various types of JSON-RPC
 * error responses according to the MCP specification.
 */
class McpErrorFactory {

	/**
	 * Standard JSON-RPC error codes as defined in the specification.
	 */
	public const PARSE_ERROR      = -32700;
	public const INVALID_REQUEST  = -32600;
	public const METHOD_NOT_FOUND = -32601;
	public const INVALID_PARAMS   = -32602;
	public const INTERNAL_ERROR   = -32603;

	/**
	 * Implementation-defined server error codes (in -32000 to -32099 range as per JSON-RPC spec).
	 * Using conservative, well-established error codes only.
	 */
	public const SERVER_ERROR       = -32000; // Generic server error (includes MCP disabled)
	public const TIMEOUT_ERROR      = -32001; // Request timeout
	public const RESOURCE_NOT_FOUND = -32002; // Resource not found
	public const TOOL_NOT_FOUND     = -32003; // Tool not found
	public const PROMPT_NOT_FOUND   = -32004; // Prompt not found
	public const PERMISSION_DENIED  = -32008; // Access denied/forbidden
	public const UNAUTHORIZED       = -32010; // Authentication required

	/**
	 * Create a standardized JSON-RPC error response.
	 *
	 * @param int    $id The request ID.
	 * @param int    $code The error code.
	 * @param string $message The error message.
	 * @param mixed|null $data Optional additional error data.
	 *
	 * @return array
	 */
	public static function create_error_response( int $id, int $code, string $message, $data = null ): array {
		$response = array(
			'jsonrpc' => '2.0',
			'id'      => $id,
			'error'   => array(
				'code'    => $code,
				'message' => $message,
			),
		);

		if ( null !== $data ) {
			$response['error']['data'] = $data;
		}

		return $response;
	}

	/**
	 * Create a parse error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function parse_error( int $id, string $details = '' ): array {
		$message = __( 'Parse error', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::PARSE_ERROR, $message );
	}

	/**
	 * Create an invalid request error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function invalid_request( int $id, string $details = '' ): array {
		$message = __( 'Invalid Request', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::INVALID_REQUEST, $message );
	}

	/**
	 * Create a method not found error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $method The method that was not found.
	 *
	 * @return array
	 */
	public static function method_not_found( int $id, string $method ): array {
		return self::create_error_response(
			$id,
			self::METHOD_NOT_FOUND,
			sprintf(
				/* translators: %s: method name */
				__( 'Method not found: %s', 'mcp-adapter' ),
				$method
			)
		);
	}

	/**
	 * Create an invalid params error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function invalid_params( int $id, string $details = '' ): array {
		$message = __( 'Invalid params', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::INVALID_PARAMS, $message );
	}

	/**
	 * Create an internal error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function internal_error( int $id, string $details = '' ): array {
		$message = __( 'Internal error', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::INTERNAL_ERROR, $message );
	}

	/**
	 * Create an MCP disabled error response.
	 *
	 * @param int $id The request ID.
	 *
	 * @return array
	 */
	public static function mcp_disabled( int $id ): array {
		return self::create_error_response(
			$id,
			self::SERVER_ERROR,
			__( 'MCP functionality is currently disabled', 'mcp-adapter' )
		);
	}

	/**
	 * Create a validation error response (uses standard invalid params error).
	 *
	 * @param int    $id The request ID.
	 * @param string $details Validation error details.
	 *
	 * @return array
	 */
	public static function validation_error( int $id, string $details ): array {
		return self::create_error_response(
			$id,
			self::INVALID_PARAMS,
			sprintf(
				/* translators: %s: validation details */
				__( 'Validation error: %s', 'mcp-adapter' ),
				$details
			)
		);
	}

	/**
	 * Create a missing parameter error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $parameter The missing parameter name.
	 *
	 * @return array
	 */
	public static function missing_parameter( int $id, string $parameter ): array {
		return self::create_error_response(
			$id,
			self::INVALID_PARAMS,
			sprintf(
				/* translators: %s: parameter name */
				__( 'Missing required parameter: %s', 'mcp-adapter' ),
				$parameter
			)
		);
	}

	/**
	 * Create a resource not found error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $resource_uri The resource identifier.
	 *
	 * @return array
	 */
	public static function resource_not_found( int $id, string $resource_uri ): array {
		return self::create_error_response(
			$id,
			self::RESOURCE_NOT_FOUND,
			sprintf(
				/* translators: %s: resource identifier */
				__( 'Resource not found: %s', 'mcp-adapter' ),
				$resource_uri
			)
		);
	}

	/**
	 * Create a tool not found error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $tool The tool name.
	 *
	 * @return array
	 */
	public static function tool_not_found( int $id, string $tool ): array {
		return self::create_error_response(
			$id,
			self::TOOL_NOT_FOUND,
			sprintf(
				/* translators: %s: tool name */
				__( 'Tool not found: %s', 'mcp-adapter' ),
				$tool
			)
		);
	}

	/**
	 * Create a tool not found error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $ability The tool name.
	 *
	 * @return array
	 */
	public static function ability_not_found( int $id, string $ability ): array {
		return self::create_error_response(
			$id,
			self::TOOL_NOT_FOUND,
			sprintf(
				/* translators: %s: tool name */
				__( 'Ability not found: %s', 'mcp-adapter' ),
				$ability
			)
		);
	}

	/**
	 * Create a prompt not found error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $prompt The prompt name.
	 *
	 * @return array
	 */
	public static function prompt_not_found( int $id, string $prompt ): array {
		return self::create_error_response(
			$id,
			self::PROMPT_NOT_FOUND,
			sprintf(
				/* translators: %s: prompt name */
				__( 'Prompt not found: %s', 'mcp-adapter' ),
				$prompt
			)
		);
	}

	/**
	 * Create a permission denied error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function permission_denied( int $id, string $details = '' ): array {
		$message = __( 'Permission denied', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::PERMISSION_DENIED, $message );
	}

	/**
	 * Create an unauthorized error response.
	 *
	 * @param int    $id The request ID.
	 * @param string $details Optional additional details.
	 *
	 * @return array
	 */
	public static function unauthorized( int $id, string $details = '' ): array {
		$message = __( 'Unauthorized', 'mcp-adapter' );
		if ( $details ) {
			$message .= ': ' . $details;
		}

		return self::create_error_response( $id, self::UNAUTHORIZED, $message );
	}

	/**
	 * Translate MCP error code to appropriate HTTP status code.
	 *
	 * Maps JSON-RPC error codes to HTTP status codes according to best practices:
	 * - Transport-level errors (malformed JSON-RPC) â†’ HTTP 4xx
	 * - Application-level errors (business logic) â†’ HTTP 200 with JSON-RPC error
	 *
	 * @param int|string $mcp_error_code The MCP/JSON-RPC error code (integer or string).
	 *
	 * @return int The appropriate HTTP status code.
	 */
	public static function mcp_error_to_http_status( $mcp_error_code ): int {
		// Handle integer error codes (existing logic)
		switch ( $mcp_error_code ) {
			// Transport-level errors - these indicate malformed requests
			case self::PARSE_ERROR:      // Invalid JSON - syntactic error
				return 400;

			case self::INVALID_REQUEST:  // Invalid JSON-RPC structure - syntactic error
				return 400;

			// Authentication and authorization errors
			case self::UNAUTHORIZED:     // Authentication required
				return 401;

			case self::PERMISSION_DENIED: // Access forbidden
				return 403;

			// Resource not found errors
			case self::RESOURCE_NOT_FOUND:
			case self::TOOL_NOT_FOUND:
			case self::PROMPT_NOT_FOUND:
			case self::METHOD_NOT_FOUND:
				return 404;

			// Server errors
			case self::INTERNAL_ERROR:
			case self::SERVER_ERROR:
				return 500;

			case self::TIMEOUT_ERROR:
				return 504;

			// Application-level errors - return 200 with JSON-RPC error
			case self::INVALID_PARAMS:
			default:
				return 200;
		}
	}

	/**
	 * Determine if an MCP error should return HTTP 200 or an HTTP error status.
	 *
	 * This method helps distinguish between transport-level errors (which should
	 * return HTTP error codes) and application-level errors (which should return
	 * HTTP 200 with a JSON-RPC error response).
	 *
	 * @param array $error_response The MCP error response array.
	 *
	 * @return int The appropriate HTTP status code.
	 */
	public static function get_http_status_for_error( array $error_response ): int {
		if ( ! isset( $error_response['error']['code'] ) ) {
			return 500; // Invalid error response structure
		}

		return self::mcp_error_to_http_status( $error_response['error']['code'] );
	}

	/**
	 * Validate JSON-RPC message structure.
	 *
	 * @param mixed $message The message to validate.
	 *
	 * @return bool|array Returns true if valid, or error array if invalid.
	 */
	public static function validate_jsonrpc_message( $message ) {
		if ( ! is_array( $message ) ) {
			return self::invalid_request( 0, __( 'Message must be a JSON object', 'mcp-adapter' ) );
		}

		// Must have jsonrpc field with value "2.0".
		if ( ! isset( $message['jsonrpc'] ) || '2.0' !== $message['jsonrpc'] ) {
			return self::invalid_request( 0, __( 'jsonrpc version must be "2.0"', 'mcp-adapter' ) );
		}

		// Must be either a request/notification (has method) or a response (has result/error).
		$is_request_or_notification = isset( $message['method'] );
		$is_response                = isset( $message['result'] ) || isset( $message['error'] );

		if ( ! $is_request_or_notification && ! $is_response ) {
			return self::invalid_request( 0, __( 'Message must have either method or result/error field', 'mcp-adapter' ) );
		}

		// Responses must have an id field.
		if ( $is_response && ! isset( $message['id'] ) ) {
			return self::invalid_request( 0, __( 'Response messages must have an id field', 'mcp-adapter' ) );
		}

		return true;
	}
}
PK     ƒŠU]¹Ï0ûø  ø  i  vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/Contracts/McpErrorHandlerInterface.phpnu „[µü¤        <?php
/**
 * Interface for MCP error handlers.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\ErrorHandling\Contracts;

/**
 * Interface for handling MCP error logging.
 *
 * This interface defines the contract for error handlers that can log
 * error messages with context information and different severity types.
 */
interface McpErrorHandlerInterface {

	/**
	 * Log an error message with optional context and type.
	 *
	 * @param string $message The log message.
	 * @param array  $context Additional context data.
	 * @param string $type The log type (e.g., 'error', 'info', 'debug').
	 *
	 * @return void
	 */
	public function log( string $message, array $context = array(), string $type = 'error' ): void;
}
PK     ƒŠU]¦BA�o  o  Z  vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/NullMcpErrorHandler.phpnu „[µü¤        <?php
/**
 * NullMcpErrorHandler class for handling MCP errors without logging.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\ErrorHandling;

/**
 * Class NullMcpErrorHandler
 *
 * This class handles MCP errors by doing nothing. It is used when no error handling is desired.
 *
 * @package WP\MCP\ErrorHandlers
 */
class NullMcpErrorHandler implements Contracts\McpErrorHandlerInterface {

	/**
	 * Log with context.
	 *
	 * This method does nothing and is used when no error handling is desired.
	 *
	 * @param string $message The log message.
	 * @param array  $context Additional context data.
	 * @param string $type The type of log (e.g., 'error', 'info', etc.). Default is 'error'.
	 *
	 * @return void
	 */
	public function log( string $message, array $context = array(), string $type = 'error' ): void {
		// Do nothing.
	}
}
PK     ƒŠU]�9ëÍW  W  ^  vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/ErrorLogMcpErrorHandler.phpnu „[µü¤        <?php
/**
 * ErrorLogMcpErrorHandler class for logging MCP errors to PHP error log.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Infrastructure\ErrorHandling;

/**
 * Class ErrorLogMcpErrorHandler
 *
 * This class handles error logging by writing logs to the PHP error log.
 *
 * @package WP\MCP\ErrorHandlers
 */
class ErrorLogMcpErrorHandler implements Contracts\McpErrorHandlerInterface {

	/**
	 * Log with context.
	 *
	 * @param string $message The log message.
	 * @param array  $context Additional context data.
	 * @param string $type The type of log (e.g., 'error', 'info', etc.). Default is 'error'.
	 *
	 * @return void
	 */
	public function log( string $message, array $context = array(), string $type = 'error' ): void {
		$user_id     = function_exists( 'get_current_user_id' ) ? get_current_user_id() : 0;
		$log_message = sprintf(
			'[%s] %s | Context: %s | User ID: %d',
			strtoupper( $type ),
			$message,
			wp_json_encode( $context ),
			$user_id
		);
		error_log( $log_message ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
	}
}
PK     ƒŠU]~—·ù…!  …!  ?  vendor/wordpress/mcp-adapter/includes/Cli/StdioServerBridge.phpnu „[µü¤        <?php
/**
 * STDIO Server Bridge for MCP Adapter
 *
 * This service acts as a bridge between the STDIO protocol and MCP servers,
 * allowing any registered server to be exposed via command-line interface.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Cli;

use WP\MCP\Core\McpServer;
use WP\MCP\Transport\Infrastructure\RequestRouter;

/**
 * STDIO Server Bridge - Exposes MCP servers via STDIO protocol
 *
 * This service handles JSON-RPC communication over stdin/stdout and delegates
 * requests to the appropriate MCP server. Unlike transport implementations,
 * this is a presentation layer service that can work with any server.
 */
class StdioServerBridge {

	/**
	 * The MCP server to expose via STDIO.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $server;

	/**
	 * Request router for handling MCP requests.
	 *
	 * @var \WP\MCP\Transport\Infrastructure\RequestRouter
	 */
	private RequestRouter $request_router;

	/**
	 * Whether the bridge is currently running.
	 *
	 * @var bool
	 */
	private bool $is_running = false;

	/**
	 * Initialize the STDIO server bridge.
	 *
	 * @param \WP\MCP\Core\McpServer $server The MCP server to expose.
	 */
	public function __construct( McpServer $server ) {
		$this->server = $server;

		// Create request router using server's infrastructure
		$this->request_router = $this->create_request_router();
	}

	/**
	 * Start the STDIO server bridge.
	 *
	 * This method reads JSON-RPC messages from stdin and writes responses to stdout.
	 * It runs in a loop until terminated or until it receives a shutdown signal.
	 *
	 * @throws \RuntimeException If STDIO transport is disabled.
	 */
	public function serve(): void {
		// Check if STDIO transport is enabled
		$enable_serve = apply_filters( 'mcp_adapter_enable_stdio_transport', true );

		if ( ! $enable_serve ) {
			throw new \RuntimeException(
				'The STDIO transport is disabled. Enable it by setting the "mcp_adapter_enable_stdio_transport" filter to true.'
			);
		}

		$this->is_running = true;

		// Log to stderr to keep stdout clean for MCP messages
		$this->log_to_stderr( sprintf( 'MCP STDIO Bridge started for server: %s', $this->server->get_server_id() ) );

		// Main server loop
		while ( $this->is_running ) {
			try {
				// Read a line from stdin (blocking)
				$input = fgets( STDIN );

				if ( false === $input ) {
					// EOF or error reading from stdin
					break;
				}

				// Trim newline delimiter
				$input = rtrim( $input, "\r\n" );

				if ( empty( $input ) ) {
					// Empty line, continue reading
					continue;
				}

				// Process the request and get response
				$response = $this->handle_request( $input );

				// Write response to stdout with newline delimiter
				if ( ! empty( $response ) ) {
					// Use fwrite() for precise binary-safe JSON-RPC protocol communication.
					// WP_CLI output functions would add formatting/prefixes that break MCP protocol.
					// MCP requires exact control over stdout for machine-to-machine communication.
					fwrite( STDOUT, $response . "\n" ); // phpcs:ignore
					fflush( STDOUT );
				}
			} catch ( \Throwable $e ) {
				// Log errors to stderr
				$this->log_to_stderr( 'Error processing request: ' . $e->getMessage() );

				// Send error response
				$error_response = wp_json_encode(
					array(
						'jsonrpc' => '2.0',
						'error'   => array(
							'code'    => -32603,
							'message' => 'Internal error',
							'data'    => array(
								'details' => $e->getMessage(),
							),
						),
						'id'      => null,
					)
				);

				fwrite( STDOUT, $error_response . "\n" ); // phpcs:ignore
				fflush( STDOUT );
			}
		}

		$this->log_to_stderr( 'MCP STDIO Bridge stopped' );
	}

	/**
	 * Stop the STDIO server bridge.
	 */
	public function stop(): void {
		$this->is_running = false;
	}

	/**
	 * Handle a JSON-RPC request string and return a JSON-RPC response string.
	 *
	 * @param string $json_input The JSON-RPC request string.
	 *
	 * @return string The JSON-RPC response string (empty for notifications).
	 */
	private function handle_request( string $json_input ): string {
		try {
			// Parse JSON-RPC request
			$request = json_decode( $json_input, true );

			if ( json_last_error() !== JSON_ERROR_NONE ) {
				return $this->create_error_response(
					null,
					-32700,
					'Parse error',
					'Invalid JSON was received by the server.'
				);
			}

			// Validate JSON-RPC structure
			if ( ! is_array( $request ) ) {
				return $this->create_error_response(
					null,
					-32600,
					'Invalid Request',
					'The JSON sent is not a valid Request object.'
				);
			}

			// Check for JSON-RPC version
			if ( ! isset( $request['jsonrpc'] ) || '2.0' !== $request['jsonrpc'] ) {
				return $this->create_error_response(
					$request['id'] ?? null,
					-32600,
					'Invalid Request',
					'The JSON-RPC version must be 2.0.'
				);
			}

			// Extract request components
			$method = $request['method'] ?? null;
			$params = $request['params'] ?? array();
			$id     = $request['id'] ?? null;

			if ( ! is_string( $method ) ) {
				return $this->create_error_response(
					$id,
					-32600,
					'Invalid Request',
					'Method must be a string.'
				);
			}

			// Convert params to array if it's an object
			if ( is_object( $params ) ) {
				$params = (array) $params;
			}

			if ( ! is_array( $params ) ) {
				$params = array();
			}

			// Route the request to the appropriate handler
			$result = $this->request_router->route_request(
				$method,
				$params,
				$id,
				'stdio'
			);

			// If this is a notification (no id), don't send a response
			if ( null === $id ) {
				return '';
			}

			// Format the response
			return $this->format_response( $result, $id );
		} catch ( \Throwable $e ) {
			// Handle unexpected errors
			return $this->create_error_response(
				null,
				-32603,
				'Internal error',
				$e->getMessage()
			);
		}
	}

	/**
	 * Format a handler result as a JSON-RPC response.
	 *
	 * @param array $result The handler result.
	 * @param mixed $id     The request ID.
	 *
	 * @return string The JSON-RPC response string.
	 */
	private function format_response( array $result, $id ): string {
		$response = array(
			'jsonrpc' => '2.0',
			'id'      => $id,
		);

		// Check if result contains an error
		if ( isset( $result['error'] ) ) {
			$error = $result['error'];

			// Ensure error has required fields
			$response['error'] = array(
				'code'    => $error['code'] ?? -32603,
				'message' => $error['message'] ?? 'Internal error',
			);

			// Add data field if present
			if ( isset( $error['data'] ) ) {
				$response['error']['data'] = $error['data'];
			}
		} else {
			// Success response
			$response['result'] = (object) $result;
		}

		$json = wp_json_encode( $response, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );

		if ( false === $json ) {
			// Fallback for encoding errors
			return $this->create_error_response(
				$id,
				-32603,
				'Internal error',
				'Failed to encode response as JSON.'
			);
		}

		return $json;
	}

	/**
	 * Create a JSON-RPC error response.
	 *
	 * @param mixed  $id      The request ID (can be null).
	 * @param int    $code    The error code.
	 * @param string $message The error message.
	 * @param string $data    Optional error data.
	 *
	 * @return string The JSON error response string.
	 */
	private function create_error_response( $id, int $code, string $message, string $data = '' ): string {
		$response = array(
			'jsonrpc' => '2.0',
			'error'   => array(
				'code'    => $code,
				'message' => $message,
			),
			'id'      => $id,
		);

		if ( ! empty( $data ) ) {
			$response['error']['data'] = $data;
		}

		return wp_json_encode( $response, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) ?: '{"jsonrpc":"2.0","error":{"code":-32603,"message":"Internal error"},"id":null}';
	}

	/**
	 * Create a request router for the server.
	 *
	 * @return \WP\MCP\Transport\Infrastructure\RequestRouter
	 */
	private function create_request_router(): RequestRouter {
		// Create transport context using server's infrastructure
		$context = $this->server->create_transport_context();
		return $context->request_router;
	}

	/**
	 * Log a message to stderr.
	 *
	 * @param string $message The message to log.
	 */
	private function log_to_stderr( string $message ): void {
		fwrite( STDERR, "[MCP STDIO Bridge] $message\n" ); // phpcs:ignore
	}

	/**
	 * Get the server this bridge is exposing.
	 *
	 * @return \WP\MCP\Core\McpServer
	 */
	public function get_server(): McpServer {
		return $this->server;
	}
}
PK     „ŠU]ú9Û¶d  d  8  vendor/wordpress/mcp-adapter/includes/Cli/McpCommand.phpnu „[µü¤        <?php
/**
 * WP-CLI Command for MCP STDIO Transport
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Cli;

use WP\MCP\Core\McpAdapter;
use function WP_CLI\Utils\format_items;

/**
 * Manage MCP servers via WP-CLI.
 *
 * Provides commands to serve MCP servers over STDIO transport for
 * communication with MCP clients via subprocess.
 */
class McpCommand extends \WP_CLI_Command { // phpcs:ignore

	/**
	 * Serve an MCP server via STDIO transport.
	 *
	 * This command starts an MCP server that communicates via standard input/output
	 * using the JSON-RPC 2.0 protocol. It's designed to be launched as a subprocess
	 * by MCP clients.
	 *
	 * ## OPTIONS
	 *
	 * [--server=<server-id>]
	 * : The ID of the MCP server to serve. If not specified, uses the first available server.
	 *
	 * [--user=<id|login|email>]
	 * : Run as a specific WordPress user for permission checks.
	 * : Without this, runs as unauthenticated (limited capabilities).
	 *
	 * ## EXAMPLES
	 *
	 *     # Serve the default MCP server as admin user
	 *     wp mcp serve --user=admin
	 *
	 *     # Serve a specific server as user with ID 1
	 *     wp mcp serve --server=my-mcp-server --user=1
	 *
	 *     # Serve without authentication (limited capabilities)
	 *     wp mcp serve --server=public-server
	 *
	 * @when after_wp_load
	 * @synopsis [--server=<server-id>] [--user=<id|login|email>]
	 */
	public function serve( array $args, array $assoc_args ): void {

		// Get the MCP adapter instance
		$adapter = McpAdapter::instance();

		// Get all registered servers
		$servers = $adapter->get_servers();

		if ( empty( $servers ) ) {
			\WP_CLI::error( 'No MCP servers are registered. Please register at least one server first.' );
		}

		// Determine which server to use
		$server_id = $assoc_args['server'] ?? null;
		$server    = null;

		if ( $server_id ) {
			$server = $adapter->get_server( $server_id );
			if ( ! $server ) {
				\WP_CLI::error( sprintf( 'Server with ID "%s" not found.', $server_id ) );
			}
		} else {
			// Use the first available server
			$server    = array_values( $servers )[0];
			$server_id = $server->get_server_id();
			\WP_CLI::line( sprintf( 'Using server: %s', $server_id ) );
		}

		// Set user context if specified
		if ( isset( $assoc_args['user'] ) ) {
			$user = $this->get_user( $assoc_args['user'] );
			if ( ! $user ) {
				\WP_CLI::error( sprintf( 'User "%s" not found.', $assoc_args['user'] ) );
			}

			wp_set_current_user( $user->ID );
			\WP_CLI::debug( sprintf( 'Running as user: %s (ID: %d)', $user->user_login, $user->ID ) );
		} else {
			\WP_CLI::debug( 'Running without authentication. Some capabilities may be limited.' );
		}

		// Create and start STDIO server bridge
		try {
			\WP_CLI::debug( sprintf( 'Starting STDIO bridge for server: %s', $server_id ) );

			// Create STDIO server bridge
			$stdio_bridge = new StdioServerBridge( $server );

			// Start serving (this blocks until terminated)
			$stdio_bridge->serve();
		} catch ( \RuntimeException $e ) {
			\WP_CLI::error( $e->getMessage() );
		} catch ( \Throwable $e ) {
			\WP_CLI::error( 'Failed to start STDIO bridge: ' . $e->getMessage() );
		}
	}

	/**
	 * List all registered MCP servers.
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - csv
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     # List all MCP servers
	 *     wp mcp list
	 *
	 *     # List servers in JSON format
	 *     wp mcp list --format=json
	 *
	 * @when after_wp_load
	 * @synopsis [--format=<format>]
	 */
	public function list( array $args, array $assoc_args ): void {
		$adapter = McpAdapter::instance();

		$servers = $adapter->get_servers();

		if ( empty( $servers ) ) {
			\WP_CLI::line( 'No MCP servers registered.' );
			return;
		}

		$items = array();
		foreach ( $servers as $server ) {
			$items[] = array(
				'ID'          => $server->get_server_id(),
				'Name'        => $server->get_server_name(),
				'Version'     => $server->get_server_version(),
				'Tools'       => count( $server->get_tools() ),
				'Resources'   => count( $server->get_resources() ),
				'Prompts'     => count( $server->get_prompts() ),
				'Description' => $server->get_server_description(),
			);
		}

		$format = $assoc_args['format'] ?? 'table';
		format_items( $format, $items, array( 'ID', 'Name', 'Version', 'Tools', 'Resources', 'Prompts' ) );
	}

	/**
	 * Get a user by ID, login, or email.
	 *
	 * @param string $user User identifier (ID, login, or email).
	 * @return \WP_User|false User object or false if not found.
	 */
	private function get_user( string $user ) {
		// Try as ID first
		if ( is_numeric( $user ) ) {
			return get_user_by( 'id', (int) $user );
		}

		// Try as login
		$user_obj = get_user_by( 'login', $user );
		if ( $user_obj ) {
			return $user_obj;
		}

		// Try as email
		return get_user_by( 'email', $user );
	}
}
PK     „ŠU]Ö8ê®>  >  F  vendor/wordpress/mcp-adapter/includes/Servers/DefaultServerFactory.phpnu „[µü¤        <?php
/**
 * Factory for creating the default WordPress MCP server.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Servers;

use WP\MCP\Core\McpAdapter;
use WP\MCP\Infrastructure\ErrorHandling\ErrorLogMcpErrorHandler;
use WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler;
use WP\MCP\Transport\HttpTransport;

/**
 * Factory for creating the default WordPress MCP server.
 *
 * This server automatically discovers and exposes abilities with mcp.public=true metadata:
 * - discover-abilities: Lists all publicly available WordPress abilities
 * - get-ability-info: Gets detailed information about specific abilities
 * - execute-ability: Executes WordPress abilities with provided parameters
 */
class DefaultServerFactory {

	/**
	 * Create default server for WordPress MCP Adapter with WordPress filters support.
	 *
	 * This method creates a server using WordPress-specific defaults and applies
	 * WordPress filters for customization, making it perfect for use within
	 * the McpAdapter.
	 *
	 * @return void
	 */
	public static function create(): void {

		// Auto-discover resources and prompts from abilities
		$auto_discovered_resources = self::discover_abilities_by_type( 'resource' );
		$auto_discovered_prompts   = self::discover_abilities_by_type( 'prompt' );

		// WordPress-specific defaults
		$wordpress_defaults = array(
			'server_id'              => 'mcp-adapter-default-server',
			'server_route_namespace' => 'mcp',
			'server_route'           => 'mcp-adapter-default-server',
			'server_name'            => 'MCP Adapter Default Server',
			'server_description'     => 'Default MCP server for WordPress abilities discovery and execution',
			'server_version'         => 'v1.0.0',
			'mcp_transports'         => array( HttpTransport::class ),
			'error_handler'          => ErrorLogMcpErrorHandler::class,
			'observability_handler'  => NullMcpObservabilityHandler::class,
			'tools'                  => array(
				'mcp-adapter/discover-abilities',
				'mcp-adapter/get-ability-info',
				'mcp-adapter/execute-ability',
			),
			'resources'              => $auto_discovered_resources,
			'prompts'                => $auto_discovered_prompts,
		);

		// Apply WordPress filter for customization
		$config = apply_filters( 'mcp_adapter_default_server_config', $wordpress_defaults );

		// Ensure config is an array and merge with defaults
		if ( ! is_array( $config ) ) {
			$config = $wordpress_defaults;
		}
		$config = wp_parse_args( $config, $wordpress_defaults );

		// Use McpAdapter to create the server with full validation
		$adapter = McpAdapter::instance();
		$result  = $adapter->create_server(
			$config['server_id'],
			$config['server_route_namespace'],
			$config['server_route'],
			$config['server_name'],
			$config['server_description'],
			$config['server_version'],
			$config['mcp_transports'],
			$config['error_handler'],
			$config['observability_handler'],
			$config['tools'],
			$config['resources'],
			$config['prompts']
		);

		// Log error if server creation failed, but don't halt execution.
		// This allows other servers to be registered even if default server fails.
		if ( ! is_wp_error( $result ) ) {
			return;
		}

		_doing_it_wrong(
			__METHOD__,
			sprintf(
				'MCP Adapter: Failed to create default server. Error: %s (Code: %s)',
				esc_html( $result->get_error_message() ),
				esc_html( (string) $result->get_error_code() )
			),
			'n.e.x.t'
		);
	}

	/**
	 * Discover abilities by MCP type.
	 *
	 * Scans all registered abilities and returns those with the specified type
	 * and public MCP exposure.
	 *
	 * @param string $type The MCP type to filter by ('tool', 'resource', or 'prompt').
	 *
	 * @return array Array of ability names matching the specified type.
	 */
	private static function discover_abilities_by_type( string $type ): array {
		$abilities = wp_get_abilities();
		$filtered  = array();

		foreach ( $abilities as $ability ) {
			$ability_name = $ability->get_name();
			$meta         = $ability->get_meta();

			// Skip if not publicly exposed
			if ( ! ( $meta['mcp']['public'] ?? false ) ) {
				continue;
			}

			// Get the type (defaults to 'tool' if not specified)
			$ability_type = $meta['mcp']['type'] ?? 'tool';

			// Add to filtered list if type matches
			if ( $ability_type !== $type ) {
				continue;
			}

			$filtered[] = $ability_name;
		}

		return $filtered;
	}
}
PK     „ŠU]-ÁØjB  jB  C  vendor/wordpress/mcp-adapter/includes/Core/McpComponentRegistry.phpnu „[µü¤        <?php
/**
 * MCP Component Registry for managing tools, resources, and prompts.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Core;

use WP\MCP\Domain\Prompts\Contracts\McpPromptBuilderInterface;
use WP\MCP\Domain\Prompts\McpPrompt;
use WP\MCP\Domain\Prompts\RegisterAbilityAsMcpPrompt;
use WP\MCP\Domain\Resources\McpResource;
use WP\MCP\Domain\Resources\RegisterAbilityAsMcpResource;
use WP\MCP\Domain\Tools\McpTool;
use WP\MCP\Domain\Tools\RegisterAbilityAsMcpTool;
use WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface;
use WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface;

/**
 * Registry for managing MCP server components (tools, resources, prompts).
 */
class McpComponentRegistry {
	/**
	 * Tools registered to the server.
	 *
	 * @var array
	 */
	private array $tools = array();

	/**
	 * Resources registered to the server.
	 *
	 * @var array
	 */
	private array $resources = array();

	/**
	 * Prompts registered to the server.
	 *
	 * @var array
	 */
	private array $prompts = array();

	/**
	 * MCP Server instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp_server;

	/**
	 * Error handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface
	 */
	private McpErrorHandlerInterface $error_handler;

	/**
	 * Observability handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface
	 */
	private McpObservabilityHandlerInterface $observability_handler;

	/**
	 * Whether MCP validation is enabled.
	 *
	 * @var bool
	 */
	private bool $mcp_validation_enabled;

	/**
	 * Whether to record component registration.
	 *
	 * @var bool
	 */
	private bool $should_record_component_registration;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp_server MCP server instance.
	 * @param \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface $error_handler Error handler instance.
	 * @param \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface $observability_handler Observability handler instance.
	 * @param bool                                                                       $mcp_validation_enabled Whether MCP validation is enabled.
	 */
	public function __construct(
		McpServer $mcp_server,
		McpErrorHandlerInterface $error_handler,
		McpObservabilityHandlerInterface $observability_handler,
		bool $mcp_validation_enabled
	) {
		$this->mcp_server             = $mcp_server;
		$this->error_handler          = $error_handler;
		$this->observability_handler  = $observability_handler;
		$this->mcp_validation_enabled = $mcp_validation_enabled;

		// Allow filtering whether component registration events should be recorded.
		// Default is false to avoid polluting observability logs during startup.
		$this->should_record_component_registration = apply_filters( 'mcp_adapter_observability_record_component_registration', false );
	}

	/**
	 * Register tools to the server.
	 *
	 * @param array $tools Array of ability names (strings) to convert to MCP tools.
	 *
	 * @return void
	 */
	public function register_tools( array $tools ): void {
		foreach ( $tools as $tool_item ) {
			if ( ! is_string( $tool_item ) ) {
				continue;
			}

			// Treat as ability name
			$ability = wp_get_ability( $tool_item );

			if ( ! $ability ) {
				$this->error_handler->log( "WordPress ability '{$tool_item}' does not exist.", array( "RegisterAbilityAsMcpTool::{$tool_item}" ) );

				// Track ability tool registration failure.
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'failed',
							'component_type' => 'ability_tool',
							'component_name' => $tool_item,
							'failure_reason' => 'ability_not_found',
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
				continue;
			}

			$tool = RegisterAbilityAsMcpTool::make( $ability, $this->mcp_server );

			// Check if tool creation returned an error
			if ( is_wp_error( $tool ) ) {
				$this->error_handler->log( $tool->get_error_message(), array( "RegisterAbilityAsMcpTool::{$tool_item}" ) );

				// Track ability tool registration failure.
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'failed',
							'component_type' => 'ability_tool',
							'component_name' => $tool_item,
							'error_code'     => $tool->get_error_code(),
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
				continue;
			}

			// If registry has validation enabled, validate the tool (bypassing server's validation flag)
			if ( $this->mcp_validation_enabled ) {
				$context_to_use    = "McpComponentRegistry::register_tools::{$tool_item}";
				$validation_result = \WP\MCP\Domain\Tools\McpToolValidator::validate_tool_instance( $tool, $context_to_use );

				// Check if validation returned an error
				if ( is_wp_error( $validation_result ) ) {
					$this->error_handler->log( $validation_result->get_error_message(), array( "RegisterAbilityAsMcpTool::{$tool_item}" ) );

					// Track ability tool registration failure.
					if ( $this->should_record_component_registration ) {
						$this->observability_handler->record_event(
							'mcp.component.registration',
							array(
								'status'         => 'failed',
								'component_type' => 'ability_tool',
								'component_name' => $tool_item,
								'error_code'     => $validation_result->get_error_code(),
								'server_id'      => $this->mcp_server->get_server_id(),
							)
						);
					}
					continue;
				}
			}

			// Add the processed tools to this server.
			$this->tools[ $tool->get_name() ] = $tool;

			// Track successful ability tool registration.
			if ( ! $this->should_record_component_registration ) {
				continue;
			}

			$this->observability_handler->record_event(
				'mcp.component.registration',
				array(
					'status'         => 'success',
					'component_type' => 'ability_tool',
					'component_name' => $tool_item,
					'server_id'      => $this->mcp_server->get_server_id(),
				)
			);
		}
	}

	/**
	 * Register a McpTool instance directly to the server.
	 *
	 * @param \WP\MCP\Domain\Tools\McpTool $tool The tool instance to register.
	 *
	 * @return void
	 */
	public function add_tool( McpTool $tool ): void {
		// Set the MCP server before validation (validation needs it to check if validation is enabled)
		$tool->set_mcp_server( $this->mcp_server );

		// Validate if validation is enabled (call validator directly to respect registry's validation flag)
		if ( $this->mcp_validation_enabled ) {
			$context_to_use    = "McpComponentRegistry::add_tool::{$tool->get_name()}";
			$validation_result = \WP\MCP\Domain\Tools\McpToolValidator::validate_tool_instance( $tool, $context_to_use );

			// Check if validation returned an error
			if ( is_wp_error( $validation_result ) ) {
				$this->error_handler->log( $validation_result->get_error_message(), array( "McpComponentRegistry::add_tool::{$tool->get_name()}" ) );

				// Track tool registration failure
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'failed',
							'component_type' => 'tool',
							'component_name' => $tool->get_name(),
							'error_code'     => $validation_result->get_error_code(),
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
				return;
			}
		}

		// Add the tool to this server
		$this->tools[ $tool->get_name() ] = $tool;

		// Track successful tool registration
		if ( ! $this->should_record_component_registration ) {
			return;
		}

		$this->observability_handler->record_event(
			'mcp.component.registration',
			array(
				'status'         => 'success',
				'component_type' => 'tool',
				'component_name' => $tool->get_name(),
				'server_id'      => $this->mcp_server->get_server_id(),
			)
		);
	}

	/**
	 * Register resources to the server.
	 *
	 * @param array $abilities Array of ability names to convert to MCP resources.
	 *
	 * @return void
	 */
	public function register_resources( array $abilities ): void {
		foreach ( $abilities as $ability_name ) {
			if ( ! is_string( $ability_name ) ) {
				continue;
			}

			$ability = wp_get_ability( $ability_name );

			if ( ! $ability ) {
				$this->error_handler->log( "WordPress ability '{$ability_name}' does not exist.", array( "RegisterAbilityAsMcpResource::{$ability_name}" ) );

				// Track resource registration failure.
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'failed',
							'component_type' => 'resource',
							'component_name' => $ability_name,
							'failure_reason' => 'ability_not_found',
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
				continue;
			}

			$resource = RegisterAbilityAsMcpResource::make( $ability, $this->mcp_server );

			// Check if resource creation returned an error
			if ( is_wp_error( $resource ) ) {
				$this->error_handler->log( $resource->get_error_message(), array( "RegisterAbilityAsMcpResource::{$ability_name}" ) );

				// Track resource registration failure.
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'failed',
							'component_type' => 'resource',
							'component_name' => $ability_name,
							'error_code'     => $resource->get_error_code(),
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
				continue;
			}

			// Add the processed resources to this server.
			$this->resources[ $resource->get_uri() ] = $resource;

			// Track successful resource registration.
			if ( ! $this->should_record_component_registration ) {
				continue;
			}

			$this->observability_handler->record_event(
				'mcp.component.registration',
				array(
					'status'         => 'success',
					'component_type' => 'resource',
					'component_name' => $ability_name,
					'server_id'      => $this->mcp_server->get_server_id(),
				)
			);
		}
	}

	/**
	 * Register prompts to the server.
	 *
	 * @param array $prompts Array of prompts to register. Can be ability names (strings) or prompt builder class names.
	 *
	 * @return void
	 */
	public function register_prompts( array $prompts ): void {
		foreach ( $prompts as $prompt_item ) {
			if ( ! is_string( $prompt_item ) ) {
				continue;
			}

			// Check if it's a class that implements McpPromptBuilderInterface
			if ( class_exists( $prompt_item ) && in_array( McpPromptBuilderInterface::class, class_implements( $prompt_item ) ?: array(), true ) ) {
				// Create instance of the prompt builder class
				try {
					/** @var \WP\MCP\Domain\Prompts\Contracts\McpPromptBuilderInterface $builder */
					$builder = new $prompt_item();
					$prompt  = $builder->build();
				} catch ( \Throwable $e ) {
					$this->error_handler->log( "Failed to build prompt from class '{$prompt_item}': {$e->getMessage()}", array( "McpPromptBuilder::{$prompt_item}" ) );

					if ( $this->should_record_component_registration ) {
						$this->observability_handler->record_event(
							'mcp.component.registration',
							array(
								'status'         => 'failed',
								'component_type' => 'prompt',
								'component_name' => $prompt_item,
								'failure_reason' => 'builder_exception',
								'server_id'      => $this->mcp_server->get_server_id(),
							)
						);
					}
					continue;
				}

				// Set the MCP server after building
				$prompt->set_mcp_server( $this->mcp_server );

				// Validate if validation is enabled (call validator directly to respect registry's validation flag)
				if ( $this->mcp_validation_enabled ) {
					$context_to_use    = "McpPromptBuilder::{$prompt_item}";
					$validation_result = \WP\MCP\Domain\Prompts\McpPromptValidator::validate_prompt_instance( $prompt, $context_to_use );

					// Check if validation returned an error
					if ( is_wp_error( $validation_result ) ) {
						$this->error_handler->log( $validation_result->get_error_message(), array( "McpPromptBuilder::{$prompt_item}" ) );

						// Track prompt registration failure
						if ( $this->should_record_component_registration ) {
							$this->observability_handler->record_event(
								'mcp.component.registration',
								array(
									'status'         => 'failed',
									'component_type' => 'prompt',
									'component_name' => $prompt_item,
									'error_code'     => $validation_result->get_error_code(),
									'server_id'      => $this->mcp_server->get_server_id(),
								)
							);
						}
						continue;
					}
				}

				// Add the prompt to this server
				$this->prompts[ $prompt->get_name() ] = $prompt;

				// Track successful prompt registration
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'success',
							'component_type' => 'prompt',
							'component_name' => $prompt_item,
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
			} else {
				// Treat as ability name (legacy behavior)
				$ability = wp_get_ability( $prompt_item );

				if ( ! $ability ) {
					$this->error_handler->log( "WordPress ability '{$prompt_item}' does not exist.", array( "RegisterAbilityAsMcpPrompt::{$prompt_item}" ) );

					// Track prompt registration failure.
					if ( $this->should_record_component_registration ) {
						$this->observability_handler->record_event(
							'mcp.component.registration',
							array(
								'status'         => 'failed',
								'component_type' => 'prompt',
								'component_name' => $prompt_item,
								'failure_reason' => 'ability_not_found',
								'server_id'      => $this->mcp_server->get_server_id(),
							)
						);
					}
					continue;
				}

				// Use RegisterMcpPrompt to handle all validation and processing.
				$prompt = RegisterAbilityAsMcpPrompt::make( $ability, $this->mcp_server );

				// Check if prompt creation returned an error
				if ( is_wp_error( $prompt ) ) {
					$this->error_handler->log( $prompt->get_error_message(), array( "RegisterAbilityAsMcpPrompt::{$prompt_item}" ) );

					// Track prompt registration failure.
					if ( $this->should_record_component_registration ) {
						$this->observability_handler->record_event(
							'mcp.component.registration',
							array(
								'status'         => 'failed',
								'component_type' => 'prompt',
								'component_name' => $prompt_item,
								'error_code'     => $prompt->get_error_code(),
								'server_id'      => $this->mcp_server->get_server_id(),
							)
						);
					}
					continue;
				}

				// Add the processed prompts to this server.
				$this->prompts[ $prompt->get_name() ] = $prompt;

				// Track successful prompt registration.
				if ( $this->should_record_component_registration ) {
					$this->observability_handler->record_event(
						'mcp.component.registration',
						array(
							'status'         => 'success',
							'component_type' => 'prompt',
							'component_name' => $prompt_item,
							'server_id'      => $this->mcp_server->get_server_id(),
						)
					);
				}
			}
		}
	}

	/**
	 * Get all tools registered to the server.
	 *
	 * @return \WP\MCP\Domain\Tools\McpTool[]
	 */
	public function get_tools(): array {
		return $this->tools;
	}

	/**
	 * Get all resources registered to the server.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource[]
	 */
	public function get_resources(): array {
		return $this->resources;
	}

	/**
	 * Get all prompts registered to the server.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt[]
	 */
	public function get_prompts(): array {
		return $this->prompts;
	}

	/**
	 * Get a specific tool by name.
	 *
	 * @param string $tool_name Tool name.
	 *
	 * @return \WP\MCP\Domain\Tools\McpTool|null
	 */
	public function get_tool( string $tool_name ): ?McpTool {
		return $this->tools[ $tool_name ] ?? null;
	}

	/**
	 * Get a specific resource by URI.
	 *
	 * @param string $resource_uri Resource URI.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource|null
	 */
	public function get_resource( string $resource_uri ): ?McpResource {
		return $this->resources[ $resource_uri ] ?? null;
	}

	/**
	 * Get a specific prompt by name.
	 *
	 * @param string $prompt_name Prompt name.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt|null
	 */
	public function get_prompt( string $prompt_name ): ?McpPrompt {
		return $this->prompts[ $prompt_name ] ?? null;
	}
}
PK     „ŠU]=@§¸-  ¸-  8  vendor/wordpress/mcp-adapter/includes/Core/McpServer.phpnu „[µü¤        <?php
/**
 * WordPress MCP Server class for managing server-specific tools, resources, and prompts.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Core;

use WP\MCP\Domain\Prompts\McpPrompt;
use WP\MCP\Domain\Resources\McpResource;
use WP\MCP\Domain\Tools\McpTool;
use WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface;
use WP\MCP\Infrastructure\ErrorHandling\NullMcpErrorHandler;
use WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface;
use WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler;
use WP\MCP\Transport\Infrastructure\McpTransportContext;

/**
 * WordPress MCP Server - Represents a single MCP server with its tools, resources, and prompts.
 */
class McpServer {
	/**
	 * Server ID.
	 *
	 * @var string
	 */
	private string $server_id;

	/**
	 * Server URL.
	 *
	 * @var string
	 */
	private string $server_route_namespace;

	/**
	 * Server route.
	 *
	 * @var string
	 */
	private string $server_route;

	/**
	 * Server name.
	 *
	 * @var string
	 */
	private string $server_name;

	/**
	 * Server description.
	 *
	 * @var string
	 */
	private string $server_description;

	/**
	 * Server version.
	 *
	 * @var string
	 */
	private string $server_version;

	/**
	 * Component registry for managing tools, resources, and prompts.
	 *
	 * @var \WP\MCP\Core\McpComponentRegistry
	 */
	private McpComponentRegistry $component_registry;

	/**
	 * Transport factory for initializing transports.
	 *
	 * @var \WP\MCP\Core\McpTransportFactory
	 */
	private McpTransportFactory $transport_factory;

	/**
	 * Error handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface
	 */
	public McpErrorHandlerInterface $error_handler;

	/**
	 * Observability handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface
	 */
	public McpObservabilityHandlerInterface $observability_handler;

	/**
	 * Whether MCP validation is enabled.
	 *
	 * @var bool
	 */
	private bool $mcp_validation_enabled;

	/**
	 * Transport permission callback.
	 *
	 * @var callable|null
	 */
	private $transport_permission_callback;


	/**
	 * Constructor.
	 *
	 * @param string                                              $server_id Unique identifier for the server.
	 * @param string                                              $server_route_namespace Server route namespace.
	 * @param string                                              $server_route Server route.
	 * @param string                                              $server_name Human-readable server name.
	 * @param string                                              $server_description Server description.
	 * @param string                                              $server_version Server version.
	 * @param array                                               $mcp_transports Array of MCP transport class names to initialize (e.g., [McpRestTransport::class]).
	 * @param class-string<\WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface>|null         $error_handler Error handler class to use (e.g., NullMcpErrorHandler::class). Must implement McpErrorHandlerInterface. If null, NullMcpErrorHandler will be used.
	 * @param class-string<\WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface>|null $observability_handler Observability handler class to use (e.g., NullMcpObservabilityHandler::class). Must implement McpObservabilityHandlerInterface. If null, NullMcpObservabilityHandler will be used.
	 * @param array                                               $tools Optional ability names to register as tools during construction.
	 * @param array                                               $resources Optional resources to register during construction.
	 * @param array                                               $prompts Optional prompts to register during construction.
	 * @param callable|null                                       $transport_permission_callback Optional custom permission callback for transport-level authentication. If null, defaults to is_user_logged_in().
	 *
	 * @throws \Exception Thrown if the MCP transport class does not extend AbstractMcpTransport.
	 */
	public function __construct(
		string $server_id,
		string $server_route_namespace,
		string $server_route,
		string $server_name,
		string $server_description,
		string $server_version,
		array $mcp_transports,
		?string $error_handler,
		?string $observability_handler,
		array $tools = array(),
		array $resources = array(),
		array $prompts = array(),
		?callable $transport_permission_callback = null
	) {
		// Store server configuration
		$this->server_id                     = $server_id;
		$this->server_route_namespace        = $server_route_namespace;
		$this->server_route                  = $server_route;
		$this->server_name                   = $server_name;
		$this->server_description            = $server_description;
		$this->server_version                = $server_version;
		$this->transport_permission_callback = $transport_permission_callback;

		// Setup validation flag. Validation is disabled by default for performance.
		// Abilities API is also validating all abilities.
		$this->mcp_validation_enabled = apply_filters( 'mcp_adapter_validation_enabled', false );

		// Setup handlers and components
		$this->setup_handlers( $error_handler, $observability_handler );
		$this->setup_components( $tools, $resources, $prompts, $mcp_transports );
	}

	/**
	 * Setup error and observability handlers.
	 *
	 * @param string|null $error_handler Error handler class name.
	 * @param string|null $observability_handler Observability handler class name.
	 */
	private function setup_handlers( ?string $error_handler, ?string $observability_handler ): void {
		// Instantiate error handler
		if ( $error_handler && class_exists( $error_handler ) ) {
			/** @var \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface $handler */
			$handler             = new $error_handler();
			$this->error_handler = $handler;
		} else {
			$this->error_handler = new NullMcpErrorHandler();
		}

		// Instantiate observability handler
		if ( $observability_handler && class_exists( $observability_handler ) ) {
			/** @var \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface $handler */
			$handler                     = new $observability_handler();
			$this->observability_handler = $handler;
		} else {
			$this->observability_handler = new NullMcpObservabilityHandler();
		}
	}

	/**
	 * Setup component registry and transport factory.
	 *
	 * @param array $tools Tools to register.
	 * @param array $resources Resources to register.
	 * @param array $prompts Prompts to register.
	 * @param array $mcp_transports Transport classes to initialize.
	 *
	 * @throws \Exception
	 */
	private function setup_components( array $tools, array $resources, array $prompts, array $mcp_transports ): void {
		// Initialize component registry
		$this->component_registry = new McpComponentRegistry(
			$this,
			$this->error_handler,
			$this->observability_handler,
			$this->mcp_validation_enabled
		);

		// Initialize transport factory
		$this->transport_factory = new McpTransportFactory( $this );

		// Register tools, resources, and prompts
		$this->register_mcp_components( $tools, $resources, $prompts );

		// Initialize transports
		$this->transport_factory->initialize_transports( $mcp_transports );
	}

	/**
	 * Register initial tools, resources, and prompts.
	 *
	 * @param array $tools Tools to register.
	 * @param array $resources Resources to register.
	 * @param array $prompts Prompts to register.
	 */
	private function register_mcp_components( array $tools, array $resources, array $prompts ): void {
		// Register tools if provided
		if ( ! empty( $tools ) ) {
			$this->component_registry->register_tools( $tools );
		}

		// Register resources if provided
		if ( ! empty( $resources ) ) {
			$this->component_registry->register_resources( $resources );
		}

		// Register prompts if provided
		if ( empty( $prompts ) ) {
			return;
		}

		$this->component_registry->register_prompts( $prompts );
	}

	/**
	 * Get server ID.
	 *
	 * @return string
	 */
	public function get_server_id(): string {
		return $this->server_id;
	}

	/**
	 * Get server route namespace.
	 *
	 * @return string
	 */
	public function get_server_route_namespace(): string {
		return $this->server_route_namespace;
	}

	/**
	 * Get server route.
	 *
	 * @return string
	 */
	public function get_server_route(): string {
		return $this->server_route;
	}

	/**
	 * Get server name.
	 *
	 * @return string
	 */
	public function get_server_name(): string {
		return $this->server_name;
	}

	/**
	 * Get server description.
	 *
	 * @return string
	 */
	public function get_server_description(): string {
		return $this->server_description;
	}

	/**
	 * Get server version.
	 *
	 * @return string
	 */
	public function get_server_version(): string {
		return $this->server_version;
	}

	/**
	 * Get the transport permission callback.
	 *
	 * @return callable|null
	 */
	public function get_transport_permission_callback(): ?callable {
		return $this->transport_permission_callback;
	}

	/**
	 * Get the observability handler instance.
	 *
	 * @return \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface
	 */
	public function get_observability_handler(): McpObservabilityHandlerInterface {
		return $this->observability_handler;
	}

	public function get_error_handler(): McpErrorHandlerInterface {
		return $this->error_handler;
	}

	/**
	 * Get all tools registered to this server.
	 *
	 * @return array
	 */
	public function get_tools(): array {
		return $this->component_registry->get_tools();
	}

	/**
	 * Get all resources registered to this server.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource[]
	 */
	public function get_resources(): array {
		return $this->component_registry->get_resources();
	}

	/**
	 * Get all prompts registered to this server.
	 *
	 * @return array
	 */
	public function get_prompts(): array {
		return $this->component_registry->get_prompts();
	}

	/**
	 * Get a specific tool by name.
	 *
	 * @param string $tool_name Tool name.
	 *
	 * @return \WP\MCP\Domain\Tools\McpTool|null
	 */
	public function get_tool( string $tool_name ): ?McpTool {
		return $this->component_registry->get_tool( $tool_name );
	}

	/**
	 * Get a specific resource by URI.
	 *
	 * @param string $resource_uri Resource URI.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource|null
	 */
	public function get_resource( string $resource_uri ): ?McpResource {
		return $this->component_registry->get_resource( $resource_uri );
	}

	/**
	 * Get a specific prompt by name.
	 *
	 * @param string $prompt_name Prompt name.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt|null
	 */
	public function get_prompt( string $prompt_name ): ?McpPrompt {
		return $this->component_registry->get_prompt( $prompt_name );
	}

	/**
	 * Create transport context with all required dependencies.
	 *
	 * @return \WP\MCP\Transport\Infrastructure\McpTransportContext
	 */
	public function create_transport_context(): McpTransportContext {
		return $this->transport_factory->create_transport_context();
	}

	/**
	 * Check if MCP validation is enabled.
	 *
	 * @return bool
	 */
	public function is_mcp_validation_enabled(): bool {
		return $this->mcp_validation_enabled;
	}

	/**
	 * Get the component registry instance.
	 *
	 * @return \WP\MCP\Core\McpComponentRegistry
	 */
	public function get_component_registry(): McpComponentRegistry {
		return $this->component_registry;
	}
}
PK     „ŠU]MÀ:Xf  f  B  vendor/wordpress/mcp-adapter/includes/Core/McpTransportFactory.phpnu „[µü¤        <?php
/**
 * MCP Transport Factory for initializing MCP transports.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Core;

use WP\MCP\Handlers\Initialize\InitializeHandler;
use WP\MCP\Handlers\Prompts\PromptsHandler;
use WP\MCP\Handlers\Resources\ResourcesHandler;
use WP\MCP\Handlers\System\SystemHandler;
use WP\MCP\Handlers\Tools\ToolsHandler;
use WP\MCP\Transport\Contracts\McpTransportInterface;
use WP\MCP\Transport\Infrastructure\McpTransportContext;

/**
 * Factory for creating and initializing MCP transports.
 */
class McpTransportFactory {
	/**
	 * MCP Server instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp_server;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp_server MCP server instance.
	 */
	public function __construct( McpServer $mcp_server ) {
		$this->mcp_server = $mcp_server;
	}

	/**
	 * Initialize MCP transports for the server.
	 *
	 * @param array $mcp_transports Array of MCP transport class names to initialize.
	 */
	public function initialize_transports( array $mcp_transports ): void {
		foreach ( $mcp_transports as $mcp_transport ) {
			// Check if class exists
			if ( ! class_exists( $mcp_transport ) ) {
				_doing_it_wrong(
					__FUNCTION__,
					sprintf(
						/* translators: %s: Transport class name */
						esc_html__( 'Transport class "%s" does not exist. Make sure the class is properly autoloaded or included.', 'mcp-adapter' ),
						esc_html( $mcp_transport )
					),
					'0.1.0'
				);
				// Log error and continue processing other transports
				$this->mcp_server->get_error_handler()->log(
					sprintf( 'Transport class "%s" does not exist.', $mcp_transport ),
					array( 'McpTransportFactory::initialize_transports' )
				);
				continue;
			}

			// Check for interface implementation
			if ( ! in_array( McpTransportInterface::class, class_implements( $mcp_transport ) ?: array(), true ) ) {
				_doing_it_wrong(
					__FUNCTION__,
					sprintf(
						/* translators: %s: Transport class name */
						esc_html__( 'Transport class "%s" must implement McpTransportInterface. Check your transport implementation.', 'mcp-adapter' ),
						esc_html( $mcp_transport )
					),
					'0.1.0'
				);
				// Log error and continue processing other transports
				$this->mcp_server->get_error_handler()->log(
					sprintf( 'MCP transport class "%s" must implement the McpTransportInterface.', $mcp_transport ),
					array( 'McpTransportFactory::initialize_transports' )
				);
				continue;
			}

			// Interface-based instantiation with dependency injection
			$context = $this->create_transport_context();
			new $mcp_transport( $context );
		}
	}

	/**
	 * Create transport context with all required dependencies.
	 *
	 * @return \WP\MCP\Transport\Infrastructure\McpTransportContext
	 */
	public function create_transport_context(): McpTransportContext {
		// Create handlers
		$initialize_handler = new InitializeHandler( $this->mcp_server );
		$tools_handler      = new ToolsHandler( $this->mcp_server );
		$resources_handler  = new ResourcesHandler( $this->mcp_server );
		$prompts_handler    = new PromptsHandler( $this->mcp_server );
		$system_handler     = new SystemHandler();

		// Create the context - the router will be created automatically
		return new McpTransportContext(
			array(
				'mcp_server'                    => $this->mcp_server,
				'initialize_handler'            => $initialize_handler,
				'tools_handler'                 => $tools_handler,
				'resources_handler'             => $resources_handler,
				'prompts_handler'               => $prompts_handler,
				'system_handler'                => $system_handler,
				'observability_handler'         => $this->mcp_server->get_observability_handler(),
				'error_handler'                 => $this->mcp_server->get_error_handler(),
				'transport_permission_callback' => $this->mcp_server->get_transport_permission_callback(),
			)
		);
	}
}
PK     „ŠU]zÕMîÜ%  Ü%  9  vendor/wordpress/mcp-adapter/includes/Core/McpAdapter.phpnu „[µü¤        <?php
/**
 * WordPress MCP Registry - Main class for managing multiple MCP servers.
 *
 * @package WP\MCP\Core
 */

declare( strict_types=1 );

namespace WP\MCP\Core;

use WP\MCP\Abilities\DiscoverAbilitiesAbility;
use WP\MCP\Abilities\ExecuteAbilityAbility;
use WP\MCP\Abilities\GetAbilityInfoAbility;
use WP\MCP\Cli\McpCommand;
use WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface;
use WP\MCP\Infrastructure\ErrorHandling\NullMcpErrorHandler;
use WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface;
use WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler;
use WP\MCP\Servers\DefaultServerFactory;

/**
 * WordPress MCP Registry - Main class for managing multiple MCP servers.
 */
final class McpAdapter {

	public const VERSION = '0.4.1';

	/**
	 * Registry instance
	 *
	 * @var \WP\MCP\Core\McpAdapter
	 */
	private static self $instance;

	/**
	 * Registered servers
	 *
	 * @var \WP\MCP\Core\McpServer[]
	 */
	private array $servers = array();

	/**
	 * Track if adapter has been initialized to prevent duplicate initialization
	 *
	 * @var bool
	 */
	private static bool $initialized = false;

	/**
	 * Get the registry instance
	 *
	 * @return \WP\MCP\Core\McpAdapter
	 */
	public static function instance(): self {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new self();

			// In WP-CLI context, initialize immediately so commands have access to servers
			if ( defined( 'WP_CLI' ) && constant( 'WP_CLI' ) ) {
				add_action( 'init', array( self::$instance, 'init' ), 20 );
			} else {
				// Initialize for REST API requests with reasonable priority
				add_action( 'rest_api_init', array( self::$instance, 'init' ), 15 );
			}
		}

		return self::$instance;
	}

		/**
	 * Initialize the registry
	 *
	 * @internal For use by instance initialization only.
	 */
	public function init(): void {
		if ( self::$initialized ) {
			return;
		}

		$this->maybe_create_default_server();

		do_action( 'mcp_adapter_init', $this );
		$this->register_wp_cli_commands();
		self::$initialized = true;
	}

	/**
	 * Create and register a new MCP server.
	 *
	 * @param string $server_id Unique identifier for the server.
	 * @param string $server_route_namespace Server route namespace.
	 * @param string $server_route Server route.
	 * @param string $server_name Server name.
	 * @param string $server_description Server description.
	 * @param string $server_version Server version.
	 * @param array $mcp_transports Array of classes that extend the BaseTransport.
	 * @param class-string<\WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface> $error_handler The error handler class name. If null, NullMcpErrorHandler will be used.
	 * @param class-string<\WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface> $observability_handler The observability handler class name. If null, NullMcpObservabilityHandler will be used.
	 * @param array $tools Ability names to register as tools.
	 * @param array $resources Resources to register.
	 * @param array $prompts Prompts to register.
	 * @param callable|null $transport_permission_callback Optional custom permission callback for transport-level authentication. If null, defaults to is_user_logged_in().
	 *
	 * @return \WP\MCP\Core\McpAdapter|\WP_Error McpAdapter instance on success, WP_Error on failure.
	 */
	public function create_server( string $server_id, string $server_route_namespace, string $server_route, string $server_name, string $server_description, string $server_version, array $mcp_transports, ?string $error_handler, ?string $observability_handler = null, array $tools = array(), array $resources = array(), array $prompts = array(), ?callable $transport_permission_callback = null ) {
		// Use NullMcpErrorHandler if no error handler is provided.
		if ( ! $error_handler ) {
			$error_handler = NullMcpErrorHandler::class;
		}

		// Validate error handler class exists and implements McpErrorHandlerInterface.
		if ( ! class_exists( $error_handler ) ) {
			return new \WP_Error(
				'invalid_error_handler',
				sprintf(
					/* translators: %s: error handler class name */
					esc_html__( 'Error handler class "%s" does not exist.', 'mcp-adapter' ),
					esc_html( $error_handler )
				)
			);
		}

		if ( ! in_array( McpErrorHandlerInterface::class, class_implements( $error_handler ) ?: array(), true ) ) {
			return new \WP_Error(
				'invalid_error_handler',
				sprintf(
				/* translators: %s: error handler class name */
					esc_html__( 'Error handler class "%s" must implement the McpErrorHandlerInterface.', 'mcp-adapter' ),
					esc_html( $error_handler )
				)
			);
		}

		// Use NullMcpObservabilityHandler if no observability handler is provided.
		if ( ! $observability_handler ) {
			$observability_handler = NullMcpObservabilityHandler::class;
		}

		// Validate observability handler class exists and implements McpObservabilityHandlerInterface.
		if ( ! class_exists( $observability_handler ) ) {
			return new \WP_Error(
				'invalid_observability_handler',
				sprintf(
				/* translators: %s: observability handler class name */
					esc_html__( 'Observability handler class "%s" does not exist.', 'mcp-adapter' ),
					esc_html( $observability_handler )
				)
			);
		}

		if ( ! in_array( McpObservabilityHandlerInterface::class, class_implements( $observability_handler ) ?: array(), true ) ) {
			return new \WP_Error(
				'invalid_observability_handler',
				sprintf(
				/* translators: %s: observability handler class name */
					esc_html__( 'Observability handler class "%s" must implement the McpObservabilityHandlerInterface interface.', 'mcp-adapter' ),
					esc_html( $observability_handler )
				)
			);
		}

		if ( ! doing_action( 'mcp_adapter_init' ) ) {
			_doing_it_wrong(
				__FUNCTION__,
				esc_html__( 'MCP Servers must be created during the "mcp_adapter_init" action. Hook into "mcp_adapter_init" to register your server.', 'mcp-adapter' ),
				'0.1.0'
			);
			return new \WP_Error(
				'invalid_timing',
				esc_html__( 'MCP Server creation must be done during mcp_adapter_init action.', 'mcp-adapter' )
			);
		}

		if ( isset( $this->servers[ $server_id ] ) ) {
			_doing_it_wrong(
				__FUNCTION__,
				sprintf(
				// translators: %s: server ID
					esc_html__( 'Server with ID "%s" already exists. Each server must have a unique ID.', 'mcp-adapter' ),
					esc_html( $server_id )
				),
				'0.1.0'
			);
			return new \WP_Error(
				'duplicate_server_id',
				// translators: %s: server ID.
				sprintf( esc_html__( 'Server with ID "%s" already exists.', 'mcp-adapter' ), esc_html( $server_id ) )
			);
		}

		// Create server with tools, resources, and prompts - let server handle all registration logic.
		$server = new McpServer(
			$server_id,
			$server_route_namespace,
			$server_route,
			$server_name,
			$server_description,
			$server_version,
			$mcp_transports,
			$error_handler,
			$observability_handler,
			$tools,
			$resources,
			$prompts,
			$transport_permission_callback
		);

		// Track server creation.
		$server->get_observability_handler()->record_event(
			'mcp.server.created',
			array(
				'status'          => 'success',
				'server_id'       => $server_id,
				'transport_count' => count( $mcp_transports ),
				'tools_count'     => count( $tools ),
				'resources_count' => count( $resources ),
				'prompts_count'   => count( $prompts ),
			)
		);

		// Add server to registry.
		$this->servers[ $server_id ] = $server;

		return $this;
	}

	/**
	 * Get a server by ID.
	 *
	 * @param string $server_id Server ID.
	 *
	 * @return \WP\MCP\Core\McpServer|null
	 */
	public function get_server( string $server_id ): ?McpServer {
		return $this->servers[ $server_id ] ?? null;
	}

	/**
	 * Get all registered servers
	 *
	 * @return \WP\MCP\Core\McpServer[]
	 */
	public function get_servers(): array {
		return $this->servers;
	}

	/**
	 * Conditionally create the default server based on filter.
	 *
	 * @internal For use by adapter initialization only.
	 */
	private function maybe_create_default_server(): void {
		// Allow disabling default server creation
		if ( ! apply_filters( 'mcp_adapter_create_default_server', true ) ) {
			return;
		}

		// Register category before abilities
		add_action( 'wp_abilities_api_categories_init', array( $this, 'register_default_category' ) );
		add_action( 'wp_abilities_api_init', array( $this, 'register_default_abilities' ) );

		add_action( 'mcp_adapter_init', array( DefaultServerFactory::class, 'create' ) );
	}

	/**
	 * Register the default MCP category.
	 *
	 * @return void
	 */
	public function register_default_category(): void {
		wp_register_ability_category(
			'mcp-adapter',
			array(
				'label'       => 'MCP Adapter',
				'description' => 'Abilities for the MCP Adapter',
			)
		);
	}

	/**
	 * Register the default MCP abilities.
	 *
	 * @return void
	 */
	public function register_default_abilities(): void {
		// Register the three core MCP abilities
		DiscoverAbilitiesAbility::register();
		GetAbilityInfoAbility::register();
		ExecuteAbilityAbility::register();
	}

	/**
	 * Register WP-CLI commands if WP-CLI is available
	 *
	 * @internal For use by adapter initialization only.
	 */
	private function register_wp_cli_commands(): void {
		// Only register if WP-CLI is available
		if ( ! defined( 'WP_CLI' ) || ! constant( 'WP_CLI' ) ) {
			return;
		}

		if ( ! class_exists( 'WP_CLI' ) ) {
			return;
		}

		\WP_CLI::add_command(
			'mcp-adapter',
			McpCommand::class,
			array(
				'shortdesc' => 'Manage MCP servers via WP-CLI.',
				'longdesc'  => 'Commands for managing and serving MCP servers, including STDIO transport.',
			)
		);
	}
}
PK     „ŠU]v=öYÕ  Õ  A  vendor/wordpress/mcp-adapter/includes/Transport/HttpTransport.phpnu „[µü¤        <?php
/**
 * MCP HTTP Transport for WordPress - MCP 2025-06-18 Compliant
 *
 * This transport implements the MCP Streamable HTTP specification and can work
 * both with and without the mcp-wordpress-remote proxy.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport;

use WP\MCP\Transport\Contracts\McpRestTransportInterface;
use WP\MCP\Transport\Infrastructure\HttpRequestContext;
use WP\MCP\Transport\Infrastructure\HttpRequestHandler;
use WP\MCP\Transport\Infrastructure\McpTransportContext;
use WP\MCP\Transport\Infrastructure\McpTransportHelperTrait;

/**
 * MCP HTTP Transport - Unified transport for both proxy and direct clients
 *
 * Implements MCP 2025-06-18 Streamable HTTP specification
 */
class HttpTransport implements McpRestTransportInterface {
	use McpTransportHelperTrait;

	/**
	 * The HTTP request handler.
	 *
	 * @var \WP\MCP\Transport\Infrastructure\HttpRequestHandler
	 */
	protected HttpRequestHandler $request_handler;

	/**
	 * Initialize the class and register routes
	 *
	 * @param \WP\MCP\Transport\Infrastructure\McpTransportContext $transport_context The transport context.
	 */
	public function __construct( McpTransportContext $transport_context ) {
		$this->request_handler = new HttpRequestHandler( $transport_context );
		add_action( 'rest_api_init', array( $this, 'register_routes' ), 16 );
	}

	/**
	 * Register MCP HTTP routes
	 */
	public function register_routes(): void {
		// Get server info from request handler's transport context
		$server = $this->request_handler->transport_context->mcp_server;

		// Single endpoint for MCP communication (POST, GET for SSE, DELETE for session termination)
		register_rest_route(
			$server->get_server_route_namespace(),
			$server->get_server_route(),
			array(
				'methods'             => array( 'POST', 'GET', 'DELETE' ),
				'callback'            => array( $this, 'handle_request' ),
				'permission_callback' => array( $this, 'check_permission' ),
			)
		);
	}

	/**
	 * Check if the user has permission to access the MCP API
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request The request object.
	 *
	 * @return bool True if the user has permission, false otherwise.
	 */
	public function check_permission( \WP_REST_Request $request ) {
		$context = new HttpRequestContext( $request );

		// Check permission using callback or default
		$transport_context = $this->request_handler->transport_context;

		if ( null !== $transport_context->transport_permission_callback ) {
			try {
				$result = call_user_func( $transport_context->transport_permission_callback, $context->request );

				// Handle WP_Error returns
				if ( ! is_wp_error( $result ) ) {
					// Return boolean result directly
					return $result;
				}

				// Log the error and fall back to default permission
				$this->request_handler->transport_context->error_handler->log(
					'Permission callback returned WP_Error: ' . $result->get_error_message(),
					array( 'HttpTransport::check_permission' )
				);
				// Fall through to default permission check
			} catch ( \Throwable $e ) {
				// Log the error using the error handler, and fall back to default permission
				$this->request_handler->transport_context->error_handler->log( 'Error in transport permission callback: ' . $e->getMessage(), array( 'HttpTransport::check_permission' ) );
			}
		}
		$user_capability = apply_filters( 'mcp_adapter_default_transport_permission_user_capability', 'read', $context );

		// Validate that the filtered capability is a non-empty string
		if ( ! is_string( $user_capability ) || empty( $user_capability ) ) {
			$user_capability = 'read';
		}

		$user_has_capability = current_user_can( $user_capability ); // phpcs:ignore WordPress.WP.Capabilities.Undetermined -- Capability is filtered and defaults to 'read'

		if ( ! $user_has_capability ) {
			$user_id = get_current_user_id();
			$this->request_handler->transport_context->error_handler->log(
				sprintf( 'Permission denied for MCP API access. User ID %d does not have capability "%s"', $user_id, $user_capability ),
				array( 'HttpTransport::check_permission' )
			);
		}

		return $user_has_capability;
	}

	/**
	 * Handle HTTP requests according to MCP 2025-06-18 specification
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request The request object.
	 *
	 * @return \WP_REST_Response
	 */
	public function handle_request( \WP_REST_Request $request ): \WP_REST_Response {
		$context = new HttpRequestContext( $request );

		return $this->request_handler->handle_request( $context );
	}
}
PK     „ŠU]$p~Žv  v  U  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestContext.phpnu „[µü¤        <?php
/**
 * MCP HTTP Transport for WordPress - MCP 2025-06-18 Compliant
 *
 * @package McpAdapter
 */
declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

/**
 * A simple data carrier for HTTP request context.
 * Properties are public for easy access but should be treated as read-only after construction.
 */
class HttpRequestContext {

	/**
	 * The original WordPress REST request object.
	 *
	 * @var \WP_REST_Request<array<string, mixed>>
	 */
	public \WP_REST_Request $request;

	/**
	 * The HTTP method of the request.
	 *
	 * @var string
	 */
	public string $method;


	/**
	 * The Mcp-Session-Id header from the request.
	 *
	 * @var string|null
	 */
	public ?string $session_id;

	/**
	 * The JSON-decoded body of the request.
	 *
	 * @var array|null
	 */
	public ?array $body;

	/**
	 * The Accept header from the request.
	 *
	 * @var string|null
	 */
	public ?string $accept_header;

	/**
	 * Constructor.
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request The original request object.
	 */
	public function __construct( \WP_REST_Request $request ) {
		$this->request       = $request;
		$this->method        = $request->get_method();
		$this->session_id    = $request->get_header( 'Mcp-Session-Id' );
		$this->accept_header = $request->get_header( 'accept' );
		$this->body          = 'POST' === $this->method ? $request->get_json_params() : null;
	}
}
PK     „ŠU]çi˜�  �  W  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpSessionValidator.phpnu „[µü¤        <?php
/**
 * HTTP Session Validator for MCP Transport
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles HTTP-specific session validation logic for MCP transports.
 *
 * Centralizes HTTP request context validation and session management coordination
 * to eliminate duplication across transport implementations.
 */
class HttpSessionValidator {

	/**
	 * Validate session for MCP HTTP requests.
	 *
	 * Performs complete session validation including HTTP headers, user authentication,
	 * and session validity in a single method to reduce method call overhead.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return array|true Returns true if valid, error array if invalid.
	 */
	public static function validate_session( HttpRequestContext $context ) {
		// Check session header presence
		$session_id = $context->session_id;
		if ( ! $session_id ) {
			return McpErrorFactory::invalid_request( 0, 'Missing Mcp-Session-Id header' );
		}

		// Check user authentication
		$user_id = get_current_user_id();
		if ( ! $user_id ) {
			return McpErrorFactory::unauthorized( 0, 'User not authenticated' );
		}

		// Validate session using SessionManager
		if ( ! SessionManager::validate_session( $user_id, $session_id ) ) {
			return McpErrorFactory::invalid_params( 0, 'Invalid or expired session' );
		}

		return true;
	}

	/**
	 * Validate session header presence in HTTP request.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return string|array Session ID on success, error array on failure.
	 */
	public static function validate_session_header( HttpRequestContext $context ) {
		$session_id = $context->session_id;

		if ( ! $session_id ) {
			return McpErrorFactory::invalid_request( 0, 'Missing Mcp-Session-Id header' );
		}

		return $session_id;
	}

	/**
	 * Create a new session for the current user with HTTP context awareness.
	 *
	 * Validates user authentication and creates session, providing better error
	 * context than direct SessionManager calls.
	 *
	 * @param array $params The client parameters from initialize request.
	 *
	 * @return string|array Session ID on success, error array on failure.
	 */
	public static function create_session( array $params = array() ) {
		$user_id = get_current_user_id();
		if ( ! $user_id ) {
			return McpErrorFactory::unauthorized( 0, 'User authentication required for session creation' );
		}

		$session_id = SessionManager::create_session( $user_id, $params );

		if ( ! $session_id ) {
			return McpErrorFactory::internal_error( 0, 'Failed to create session' );
		}

		return $session_id;
	}

	/**
	 * Terminate a session with full HTTP context validation.
	 *
	 * Performs complete validation workflow for session termination including
	 * header validation, user authentication, and session cleanup.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return array|true Returns true on success, error array on failure.
	 */
	public static function terminate_session( HttpRequestContext $context ) {
		// Validate session header
		$session_id = $context->session_id;
		if ( ! $session_id ) {
			return McpErrorFactory::invalid_request( 0, 'Missing Mcp-Session-Id header' );
		}

		// Validate user authentication
		$user_id = get_current_user_id();
		if ( ! $user_id ) {
			return McpErrorFactory::unauthorized( 0, 'User not authenticated' );
		}

		// Terminate the session
		SessionManager::delete_session( $user_id, $session_id );

		return true;
	}
}
PK     „ŠU]\l=Á   Á   U  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestHandler.phpnu „[µü¤        <?php
/**
 * HTTP Request Handler for MCP Transport
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles HTTP request routing and processing for MCP transports.
 *
 * Centralizes request routing logic to eliminate duplication and provide
 * consistent request handling across transport implementations.
 *
 */
class HttpRequestHandler {

	/**
	 * The transport context.
	 *
	 * @var \WP\MCP\Transport\Infrastructure\McpTransportContext
	 */
	public McpTransportContext $transport_context;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\McpTransportContext $transport_context The transport context.
	 */
	public function __construct( McpTransportContext $transport_context ) {
		$this->transport_context = $transport_context;
	}

	/**
	 * Route HTTP request to appropriate handler.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return \WP_REST_Response HTTP response.
	 */
	public function handle_request( HttpRequestContext $context ): \WP_REST_Response {
		// Handle POST requests (sending MCP messages to server)
		if ( 'POST' === $context->method ) {
			return $this->handle_mcp_request( $context );
		}

		// Handle GET requests (listening for messages from server via SSE)
		if ( 'GET' === $context->method ) {
			return $this->handle_sse_request( $context );
		}

		// Handle DELETE requests (session termination)
		if ( 'DELETE' === $context->method ) {
			return $this->handle_session_termination( $context );
		}

		// Method not allowed
		return new \WP_REST_Response(
			McpErrorFactory::internal_error( 0, 'Method not allowed' ),
			405
		);
	}


	/**
	 * Handle MCP POST requests.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return \WP_REST_Response MCP response.
	 */
	private function handle_mcp_request( HttpRequestContext $context ): \WP_REST_Response {
		try {
			// Validate request body
			if ( null === $context->body ) {
				return new \WP_REST_Response(
					McpErrorFactory::parse_error( 0, 'Invalid JSON in request body' ),
					400
				);
			}

			return $this->process_mcp_messages( $context );
		} catch ( \Throwable $exception ) {
			$this->transport_context->mcp_server->error_handler->log(
				'Unexpected error in handle_mcp_request',
				array(
					'transport' => static::class,
					'server_id' => $this->transport_context->mcp_server->get_server_id(),
					'error'     => $exception->getMessage(),
				)
			);

			return new \WP_REST_Response(
				McpErrorFactory::internal_error( 0, 'Handler error occurred' ),
				500
			);
		}
	}

	/**
	 * Process MCP messages using JsonRpcResponseBuilder.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return \WP_REST_Response MCP response.
	 */
	private function process_mcp_messages( HttpRequestContext $context ): \WP_REST_Response {
		$is_batch_request = JsonRpcResponseBuilder::is_batch_request( $context->body );
		$messages         = JsonRpcResponseBuilder::normalize_messages( $context->body );

		$response_body = JsonRpcResponseBuilder::process_messages(
			$messages,
			$is_batch_request,
			function ( array $message ) use ( $context ) {
				return $this->process_single_message( $message, $context );
			}
		);

		// Determine HTTP status code based on error type
		if ( ! $is_batch_request && isset( $response_body['error'] ) ) {
			$http_status = McpErrorFactory::get_http_status_for_error( $response_body );
			return new \WP_REST_Response( $response_body, $http_status );
		}

		return new \WP_REST_Response( $response_body, 200 );
	}

	/**
	 * Process a single MCP message.
	 *
	 * @param array              $message The MCP JSON-RPC message.
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return array|null JSON-RPC response or null for notifications.
	 */
	private function process_single_message( array $message, HttpRequestContext $context ): ?array {
		// Validate JSON-RPC message format
		$validation = McpErrorFactory::validate_jsonrpc_message( $message );
		if ( isset( $validation['error'] ) ) {
			return $validation;
		}

		// Handle notifications (no response required)
		if ( isset( $message['method'] ) && ! isset( $message['id'] ) ) {
			return null; // Notifications don't get a response
		}

		// Process requests with IDs
		if ( isset( $message['method'] ) && isset( $message['id'] ) ) {
			return $this->process_jsonrpc_request( $message, $context );
		}

		return null;
	}

	/**
	 * Process a JSON-RPC request message.
	 *
	 * @param array              $message The JSON-RPC message.
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return array JSON-RPC response.
	 */
	private function process_jsonrpc_request( array $message, HttpRequestContext $context ): array {
		$request_id = $message['id']; // Preserve original scalar ID (string, number, or null)
		$method     = $message['method'];
		$params     = $message['params'] ?? array();

		// Validate session for all requests except initialize (router will handle initialize session creation)
		if ( 'initialize' !== $method ) {
			$session_validation = HttpSessionValidator::validate_session( $context );
			if ( true !== $session_validation ) {
				return JsonRpcResponseBuilder::create_error_response( $request_id, $session_validation['error'] ?? $session_validation );
			}
		}

		// Route the request through the transport context
		$result = $this->transport_context->request_router->route_request(
			$method,
			$params,
			$request_id,
			$this->get_transport_name(),
			$context
		);

		// Handle session header if provided by router
		if ( isset( $result['_session_id'] ) ) {
			$this->add_session_header_to_response( $result['_session_id'] );
			unset( $result['_session_id'] ); // Remove from actual response data
		}

		// Format response based on result
		if ( isset( $result['error'] ) ) {
			return JsonRpcResponseBuilder::create_error_response( $request_id, $result['error'] );
		}

		return JsonRpcResponseBuilder::create_success_response( $request_id, $result );
	}


	/**
	 * Handle GET requests (SSE streaming).
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return \WP_REST_Response SSE response.
	 */
	private function handle_sse_request( HttpRequestContext $context ): \WP_REST_Response {
		// SSE streaming not yet implemented - return HTTP 405 with no body
		return new \WP_REST_Response( null, 405 );
	}

	/**
	 * Handle DELETE requests (session termination).
	 *
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext $context The HTTP request context.
	 *
	 * @return \WP_REST_Response Termination response.
	 */
	private function handle_session_termination( HttpRequestContext $context ): \WP_REST_Response {
		$result = HttpSessionValidator::terminate_session( $context );

		if ( true !== $result ) {
			$http_status = McpErrorFactory::get_http_status_for_error( $result );
			return new \WP_REST_Response( $result, $http_status );
		}

		return new \WP_REST_Response( null, 200 );
	}

	/**
	 * Get transport name for observability.
	 *
	 * @return string Transport name.
	 */
	private function get_transport_name(): string {
		return 'HTTP';
	}

	/**
	 * Add session header to the REST response.
	 *
	 * Uses a static flag to prevent multiple filters from being added
	 * if this method is called multiple times during a single request
	 * (e.g., during batch JSON-RPC processing).
	 *
	 * @param string $session_id The session ID to add to the response header.
	 *
	 * @return void
	 */
	private function add_session_header_to_response( string $session_id ): void {
		static $current_session_id = null;

		// Only add filter once per request, or if session ID changes
		if ( null !== $current_session_id && $current_session_id === $session_id ) {
			return;
		}

		add_filter(
			'rest_post_dispatch',
			static function ( $response ) use ( $session_id ) {
				if ( $response instanceof \WP_REST_Response ) {
					$response->header( 'Mcp-Session-Id', $session_id );
				}

				return $response;
			}
		);

		$current_session_id = $session_id;
	}
}
PK     „ŠU]Ã†lî  î  Q  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/SessionManager.phpnu „[µü¤        <?php
/**
 * MCP Session Manager using User Meta
 *
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

/**
 * MCP Session Manager
 *
 * Handles session creation, validation, and cleanup using user meta storage.
 * Sessions are tied to authenticated users to prevent anonymous session flooding.
 */
final class SessionManager {

	/**
	 * User meta key for storing sessions
	 *
	 * @var string
	 */
	private const SESSION_META_KEY = 'mcp_adapter_sessions';

	/**
	 * Maximum sessions per user.
	 *
	 * @var int
	 */
	private const DEFAULT_MAX_SESSIONS = 32;

	/**
	 * Session inactivity timeout in seconds (24 hours).
	 *
	 * @var int
	 */
	private const DEFAULT_INACTIVITY_TIMEOUT = DAY_IN_SECONDS;

	/**
	 * Get configuration values.
	 *
	 * @return array<string, int> Configuration array.
	 */
	private static function get_config(): array {
		return array(
			'max_sessions'       => (int) apply_filters( 'mcp_adapter_session_max_per_user', self::DEFAULT_MAX_SESSIONS ),
			'inactivity_timeout' => (int) apply_filters( 'mcp_adapter_session_inactivity_timeout', self::DEFAULT_INACTIVITY_TIMEOUT ),
		);
	}

	/**
	 * Clear an inactive session (internal cleanup).
	 *
	 * @param int $user_id The user ID.
	 * @param string $session_id The session ID to clear.
	 *
	 * @return void
	 */
	private static function clear_session( int $user_id, string $session_id ): void {
		$sessions = self::get_all_user_sessions( $user_id );

		if ( ! isset( $sessions[ $session_id ] ) ) {
			return;
		}

		unset( $sessions[ $session_id ] );
		update_user_meta( $user_id, self::SESSION_META_KEY, $sessions );
	}

	/**
	 * Create a new session for a user
	 *
	 * @param int $user_id The user ID.
	 * @param array $params Client parameters from initialize request.
	 *
	 * @return string|false The session ID on success, false on failure.
	 */
	public static function create_session( int $user_id, array $params = array() ) {
		if ( ! $user_id || ! get_user_by( 'id', $user_id ) ) {
			return false;
		}

		// Cleanup inactive sessions first
		self::cleanup_expired_sessions( $user_id );

		// Get current sessions
		$sessions = self::get_all_user_sessions( $user_id );

		// Check session limit - remove oldest if over limit
		$config       = self::get_config();
		$max_sessions = $config['max_sessions'];
		if ( count( $sessions ) >= $max_sessions ) {
			// Remove oldest session (FIFO) - sort by created_at and remove first
			uasort(
				$sessions,
				static function ( $a, $b ) {
					return $a['created_at'] <=> $b['created_at'];
				}
			);

			array_shift( $sessions );
		}

		// Create a new session
		$session_id = wp_generate_uuid4();
		$now        = time();

		$sessions[ $session_id ] = array(
			'created_at'    => $now,
			'last_activity' => $now,
			'client_params' => $params,
		);

		// Save sessions
		update_user_meta( $user_id, self::SESSION_META_KEY, $sessions );

		return $session_id;
	}

	/**
	 * Get a specific session for a user
	 *
	 * @param int $user_id The user ID.
	 * @param string $session_id The session ID.
	 *
	 * @return array|\WP_Error|false Session data on success, WP_Error on invalid input, false if not found or inactive.
	 */
	public static function get_session( int $user_id, string $session_id ) {
		if ( ! $user_id || ! $session_id ) {
			return new \WP_Error( 403, 'Invalid user ID or session ID.' );
		}

		$sessions = self::get_all_user_sessions( $user_id );

		if ( ! isset( $sessions[ $session_id ] ) ) {
			return false;
		}

		$session = $sessions[ $session_id ];

		// Check inactivity timeout
		$config             = self::get_config();
		$inactivity_timeout = $config['inactivity_timeout'];
		if ( $session['last_activity'] + $inactivity_timeout < time() ) {
			self::clear_session( $user_id, $session_id );

			return false;
		}

		return $session;
	}

	/**
	 * Validate a session and update last activity
	 *
	 * @param int $user_id The user ID.
	 * @param string $session_id The session ID.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_session( int $user_id, string $session_id ): bool {
		if ( ! $user_id || ! $session_id ) {
			return false;
		}

		// Opportunistic cleanup
		self::cleanup_expired_sessions( $user_id );

		$sessions = self::get_all_user_sessions( $user_id );

		if ( ! isset( $sessions[ $session_id ] ) ) {
			return false;
		}

		$session = $sessions[ $session_id ];

		// Check inactivity timeout
		$config             = self::get_config();
		$inactivity_timeout = $config['inactivity_timeout'];
		if ( $session['last_activity'] + $inactivity_timeout < time() ) {
			self::clear_session( $user_id, $session_id );

			return false;
		}

		// Update last activity
		$sessions[ $session_id ]['last_activity'] = time();
		update_user_meta( $user_id, self::SESSION_META_KEY, $sessions );

		return true;
	}

	/**
	 * Delete a specific session
	 *
	 * @param int $user_id The user ID.
	 * @param string $session_id The session ID.
	 *
	 * @return bool True on success, false on failure.
	 */
	public static function delete_session( int $user_id, string $session_id ): bool {
		if ( ! $user_id || ! $session_id ) {
			return false;
		}

		$sessions = self::get_all_user_sessions( $user_id );

		if ( ! isset( $sessions[ $session_id ] ) ) {
			return false;
		}

		unset( $sessions[ $session_id ] );

		if ( empty( $sessions ) ) {
			delete_user_meta( $user_id, self::SESSION_META_KEY );
		} else {
			update_user_meta( $user_id, self::SESSION_META_KEY, $sessions );
		}

		return true;
	}

	/**
	 * Cleanup inactive sessions for a user
	 *
	 * @param int $user_id The user ID.
	 *
	 * @return int Number of sessions removed.
	 */
	public static function cleanup_expired_sessions( int $user_id ): int {
		if ( ! $user_id ) {
			return 0;
		}

		$sessions = self::get_all_user_sessions( $user_id );
		$now      = time();
		$removed  = 0;

		$config             = self::get_config();
		$inactivity_timeout = $config['inactivity_timeout'];

		foreach ( $sessions as $session_id => $session ) {
			// Check if still active - skip if valid
			if ( $session['last_activity'] + $inactivity_timeout >= $now ) {
				continue;
			}

			// Session is inactive - remove it
			unset( $sessions[ $session_id ] );
			++$removed;
		}

		if ( $removed > 0 ) {
			if ( empty( $sessions ) ) {
				delete_user_meta( $user_id, self::SESSION_META_KEY );
			} else {
				update_user_meta( $user_id, self::SESSION_META_KEY, $sessions );
			}
		}

		return $removed;
	}

	/**
	 * Get all sessions for a user
	 *
	 * @param int $user_id The user ID.
	 *
	 * @return array Array of sessions.
	 */
	public static function get_all_user_sessions( int $user_id ): array {
		if ( ! $user_id ) {
			return array();
		}

		$sessions = get_user_meta( $user_id, self::SESSION_META_KEY, true );

		if ( ! is_array( $sessions ) ) {
			return array();
		}

		return $sessions;
	}
}
PK     „ŠU]2ý¡nÑ  Ñ  V  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportContext.phpnu „[µü¤        <?php
/**
 * Transport context object for dependency injection.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

use WP\MCP\Core\McpServer;
use WP\MCP\Handlers\Initialize\InitializeHandler;
use WP\MCP\Handlers\Prompts\PromptsHandler;
use WP\MCP\Handlers\Resources\ResourcesHandler;
use WP\MCP\Handlers\System\SystemHandler;
use WP\MCP\Handlers\Tools\ToolsHandler;
use WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface;
use WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface;

/**
 * Transport context object for dependency injection.
 *
 * Contains all dependencies needed by transport implementations,
 * promoting loose coupling and easier testing.
 *
 * Note: The request_router parameter is optional. If not provided,
 * a RequestRouter instance will be automatically created with this
 * context as its dependency.
 */
class McpTransportContext {

	/**
	 * Initialize the transport context.
	 *
	 * @param \WP\MCP\Core\McpServer             $mcp_server The MCP server instance.
	 * @param \WP\MCP\Handlers\Initialize\InitializeHandler     $initialize_handler The initialize handler.
	 * @param \WP\MCP\Handlers\Tools\ToolsHandler          $tools_handler The tools handler.
	 * @param \WP\MCP\Handlers\Resources\ResourcesHandler      $resources_handler The resources handler.
	 * @param \WP\MCP\Handlers\Prompts\PromptsHandler        $prompts_handler The prompts handler.
	 * @param \WP\MCP\Handlers\System\SystemHandler         $system_handler The system handler.
	 * @param string                $observability_handler The observability handler class name.
	 * @param \WP\MCP\Transport\Infrastructure\RequestRouter|null $request_router The request router service.
	 * @param callable|null         $transport_permission_callback Optional custom permission callback for transport-level authentication.
	 */
	/**
	 * The MCP server instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	public McpServer $mcp_server;

	/**
	 * The initialize handler.
	 *
	 * @var \WP\MCP\Handlers\Initialize\InitializeHandler
	 */
	public InitializeHandler $initialize_handler;

	/**
	 * The tools handler.
	 *
	 * @var \WP\MCP\Handlers\Tools\ToolsHandler
	 */
	public ToolsHandler $tools_handler;

	/**
	 * The resources handler.
	 *
	 * @var \WP\MCP\Handlers\Resources\ResourcesHandler
	 */
	public ResourcesHandler $resources_handler;

	/**
	 * The prompts handler.
	 *
	 * @var \WP\MCP\Handlers\Prompts\PromptsHandler
	 */
	public PromptsHandler $prompts_handler;

	/**
	 * The system handler.
	 *
	 * @var \WP\MCP\Handlers\System\SystemHandler
	 */
	public SystemHandler $system_handler;

	/**
	 * The observability handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface
	 */
	public McpObservabilityHandlerInterface $observability_handler;

	/**
	 * The error handler instance.
	 *
	 * @var \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface
	 */
	public McpErrorHandlerInterface $error_handler;

	/**
	 * The request router service.
	 */
	public RequestRouter $request_router;

	/**
	 * Optional custom permission callback for transport-level authentication.
	 *
	 * @var callable|callable-string|null
	 */
	public $transport_permission_callback;

	/**
	 * Initialize the transport context.
	 *
	 * @param array{
	 *   mcp_server: \WP\MCP\Core\McpServer,
	 *   initialize_handler: \WP\MCP\Handlers\Initialize\InitializeHandler,
	 *   tools_handler: \WP\MCP\Handlers\Tools\ToolsHandler,
	 *   resources_handler: \WP\MCP\Handlers\Resources\ResourcesHandler,
	 *   prompts_handler: \WP\MCP\Handlers\Prompts\PromptsHandler,
	 *   system_handler: \WP\MCP\Handlers\System\SystemHandler,
	 *   observability_handler: \WP\MCP\Infrastructure\Observability\Contracts\McpObservabilityHandlerInterface,
	 *   request_router?: \WP\MCP\Transport\Infrastructure\RequestRouter,
	 *   transport_permission_callback?: callable|null,
	 *   error_handler?: \WP\MCP\Infrastructure\ErrorHandling\Contracts\McpErrorHandlerInterface
	 * } $properties Properties to set on the context.
	 * Note: request_router is optional and will be auto-created if not provided.
	 */
	public function __construct( array $properties ) {
		foreach ( $properties as $name => $value ) {
			$this->$name = $value;
		}

		// If request_router is provided, we're done
		if ( isset( $properties['request_router'] ) ) {
			return;
		}

		// Create request_router if not provided
		$this->request_router = new RequestRouter( $this );
	}
}
PK     „ŠU]¯HŸ=©!  ©!  P  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/RequestRouter.phpnu „[µü¤        <?php
/**
 * Service for routing MCP requests to appropriate handlers.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Service for routing MCP requests to appropriate handlers.
 *
 * Extracted from AbstractMcpTransport to be reusable across
 * all transport implementations via dependency injection.
 */
class RequestRouter {

	/**
	 * The transport context.
	 *
	 * @var \WP\MCP\Transport\Infrastructure\McpTransportContext
	 */
	private McpTransportContext $context;

	/**
	 * Initialize the request router.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\McpTransportContext $context The transport context.
	 */
	public function __construct(
		McpTransportContext $context
	) {
		$this->context = $context;
	}

	/**
	 * Route a request to the appropriate handler.
	 *
	 * @param string $method The MCP method name.
	 * @param array  $params The request parameters.
	 * @param mixed  $request_id The request ID (for JSON-RPC) - string, number, or null.
	 * @param string $transport_name Transport name for observability.
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext|null $http_context HTTP context for session management.
	 *
	 * @return array
	 */
	public function route_request( string $method, array $params, $request_id = 0, string $transport_name = 'unknown', ?HttpRequestContext $http_context = null ): array {
		// Track request start time.
		$start_time = microtime( true );

		// Common tags for all metrics.
		$common_tags = array(
			'method'     => $method,
			'transport'  => $transport_name,
			'server_id'  => $this->context->mcp_server->get_server_id(),
			'params'     => $this->sanitize_params_for_logging( $params ),
			'request_id' => $request_id,
			'session_id' => $http_context ? $http_context->session_id : null,
		);

		$handlers = array(
			'initialize'          => fn() => $this->handle_initialize_with_session( $params, $request_id, $http_context ),
			'ping'                => fn() => $this->context->system_handler->ping( $request_id ),
			'tools/list'          => fn() => $this->context->tools_handler->list_tools( $request_id ),
			'tools/list/all'      => fn() => $this->context->tools_handler->list_all_tools( $request_id ),
			'tools/call'          => fn() => $this->context->tools_handler->call_tool( $params, $request_id ),
			'resources/list'      => fn() => $this->add_cursor_compatibility( $this->context->resources_handler->list_resources( $request_id ) ),
			'resources/read'      => fn() => $this->context->resources_handler->read_resource( $params, $request_id ),
			'prompts/list'        => fn() => $this->context->prompts_handler->list_prompts( $request_id ),
			'prompts/get'         => fn() => $this->context->prompts_handler->get_prompt( $params, $request_id ),
			'logging/setLevel'    => fn() => $this->context->system_handler->set_logging_level( $params, $request_id ),
			'completion/complete' => fn() => $this->context->system_handler->complete( $request_id ),
			'roots/list'          => fn() => $this->context->system_handler->list_roots( $request_id ),
		);

		try {
			$result = isset( $handlers[ $method ] ) ? $handlers[ $method ]() : $this->create_method_not_found_error( $method );

			// Calculate request duration.
			$duration = ( microtime( true ) - $start_time ) * 1000; // Convert to milliseconds.

			// Extract metadata from handler response (if present).
			$metadata = $result['_metadata'] ?? array();
			unset( $result['_metadata'] ); // Don't send to client.

			// Capture newly created session ID from initialize if present.
			if ( isset( $result['_session_id'] ) ) {
				$metadata['new_session_id'] = $result['_session_id'];
			}

			// Merge common tags with handler metadata.
			$tags = array_merge( $common_tags, $metadata );

			// Determine status and record event.
			if ( isset( $result['error'] ) ) {
				$tags['status']     = 'error';
				$tags['error_code'] = $result['error']['code'] ?? -32603;
				$this->context->observability_handler->record_event( 'mcp.request', $tags, $duration );

				return $result;
			}

			// Successful request.
			$tags['status'] = 'success';
			$this->context->observability_handler->record_event( 'mcp.request', $tags, $duration );

			return $result;
		} catch ( \Throwable $exception ) {
			// Calculate request duration.
			$duration = ( microtime( true ) - $start_time ) * 1000; // Convert to milliseconds.

			// Track exception with categorization.
			$tags = array_merge(
				$common_tags,
				array(
					'status'         => 'error',
					'error_type'     => get_class( $exception ),
					'error_category' => $this->categorize_error( $exception ),
				)
			);
			$this->context->observability_handler->record_event( 'mcp.request', $tags, $duration );

			// Create error response from exception.
			return array( 'error' => McpErrorFactory::internal_error( $request_id, 'Handler error occurred' )['error'] );
		}
	}

	/**
	 * Add nextCursor for backward compatibility with existing API.
	 *
	 * @param array $result The result array.
	 * @return array
	 */
	public function add_cursor_compatibility( array $result ): array {
		if ( ! isset( $result['nextCursor'] ) ) {
			$result['nextCursor'] = '';
		}

		return $result;
	}

	/**
	 * Handle initialize requests with session management.
	 *
	 * @param array $params The request parameters.
	 * @param mixed $request_id The request ID.
	 * @param \WP\MCP\Transport\Infrastructure\HttpRequestContext|null $http_context HTTP context for session management.
	 * @return array
	 */
	private function handle_initialize_with_session( array $params, $request_id, ?HttpRequestContext $http_context ): array {
		// Get the initialize response from the handler
		$result = $this->context->initialize_handler->handle( $request_id );

		// Handle session creation if HTTP context is provided and initialize was successful
		if ( $http_context && ! isset( $result['error'] ) && ! $http_context->session_id ) {
			$session_result = HttpSessionValidator::create_session( $params );

			if ( is_array( $session_result ) ) {
				// Session creation failed - extract inner error from JSON-RPC response
				return array( 'error' => $session_result['error'] ?? $session_result );
			}

			// Store session ID in result for HttpRequestHandler to add as header
			$result['_session_id'] = $session_result;
		}

		return $result;
	}

	/**
	 * Create a method not found error with generic format.
	 *
	 * @param string $method The method that was not found.
	 * @return array
	 */
	private function create_method_not_found_error( string $method ): array {
		return array(
			'error' => McpErrorFactory::method_not_found( 0, $method )['error'],
		);
	}

	/**
	 * Categorize an exception into a general error category.
	 *
	 * @param \Throwable $exception The exception to categorize.
	 *
	 * @return string
	 */
	private function categorize_error( \Throwable $exception ): string {
		$error_categories = array(
			\ArgumentCountError::class       => 'arguments',
			\Error::class                    => 'system',
			\InvalidArgumentException::class => 'validation',
			\LogicException::class           => 'logic',
			\RuntimeException::class         => 'execution',
			\TypeError::class                => 'type',
		);

		return $error_categories[ get_class( $exception ) ] ?? 'unknown';
	}

	/**
	 * Sanitize request params for logging to remove sensitive data and limit size.
	 *
	 * @param array $params The request parameters to sanitize.
	 *
	 * @return array Sanitized parameters safe for logging.
	 */
	private function sanitize_params_for_logging( array $params ): array {
		// Return early for empty parameters.
		if ( empty( $params ) ) {
			return array();
		}

		$sanitized = array();

		// Extract only safe, useful fields for observability
		$safe_fields = array( 'name', 'protocolVersion', 'uri' );

		foreach ( $safe_fields as $field ) {
			if ( ! isset( $params[ $field ] ) || ! is_scalar( $params[ $field ] ) ) {
				continue;
			}

			$sanitized[ $field ] = $params[ $field ];
		}

		// Add clientInfo name if available (useful for debugging)
		if ( isset( $params['clientInfo']['name'] ) ) {
			$sanitized['client_name'] = $params['clientInfo']['name'];
		}

		// Add arguments count for tool calls (but not the actual arguments to avoid logging sensitive data)
		if ( isset( $params['arguments'] ) && is_array( $params['arguments'] ) ) {
			$sanitized['arguments_count'] = count( $params['arguments'] );
			$sanitized['arguments_keys']  = array_keys( $params['arguments'] );
		}

		return $sanitized;
	}
}
PK     „ŠU]®­Ò¾    Z  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportHelperTrait.phpnu „[µü¤        <?php
/**
 * Helper trait for MCP transport implementations providing shared utility methods.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

/**
 * Trait McpTransportHelperTrait
 *
 * Provides shared utility methods for transport implementations including
 * naming conventions, error creation, and common operations.
 */
trait McpTransportHelperTrait {

	/**
	 * Get a normalized transport name for tagging purposes.
	 *
	 * Extracts the transport name from the class name for use in observability metrics.
	 *
	 * @return string
	 */
	protected function get_transport_name(): string {
		// Get the class name without namespace.
		$class_name = substr( (string) strrchr( static::class, '\\' ), 1 );

		// Remove common suffixes and convert to lowercase.
		$transport_name = strtolower(
			str_replace( array( 'McpTransport', 'Transport' ), '', $class_name )
		);

		// Fallback to 'unknown' if extraction fails.
		return ! empty( $transport_name ) ? $transport_name : 'unknown';
	}
}
PK     „ŠU]øIß&A  A  Y  vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/JsonRpcResponseBuilder.phpnu „[µü¤        <?php
/**
 * JSON-RPC Response Builder for MCP Transport
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Infrastructure;

/**
 * Builds standardized JSON-RPC 2.0 responses for MCP transport.
 *
 * Centralizes response creation logic to eliminate duplication and ensure
 * consistent response formatting across all MCP transport implementations.
 */
class JsonRpcResponseBuilder {

	/**
	 * Create a JSON-RPC 2.0 success response.
	 *
	 * @param mixed $request_id The request ID from the original JSON-RPC request (string, number, or null).
	 * @param mixed $result The result data to return.
	 *
	 * @return array The formatted JSON-RPC response.
	 */
	public static function create_success_response( $request_id, $result ): array {
		return array(
			'jsonrpc' => '2.0',
			'id'      => $request_id,
			// Make sure the result is an object (not an array)
			'result'  => (object) $result,
		);
	}

	/**
	 * Create a JSON-RPC 2.0 error response.
	 *
	 * @param mixed $request_id The request ID from the original JSON-RPC request (string, number, or null).
	 * @param array $error The error array with 'code', 'message', and optional 'data'.
	 *
	 * @return array The formatted JSON-RPC error response.
	 */
	public static function create_error_response( $request_id, array $error ): array {
		return array(
			'jsonrpc' => '2.0',
			'id'      => $request_id,
			'error'   => $error,
		);
	}

	/**
	 * Process multiple MCP messages and format the response correctly.
	 *
	 * Handles both batch requests (array of messages) and single requests,
	 * returning the appropriate response format per JSON-RPC 2.0 specification.
	 *
	 * @param array $messages Array of JSON-RPC messages to process.
	 * @param bool $is_batch_request Whether the original request was a batch.
	 * @param callable $processor Callback function to process each individual message.
	 *                                Should accept (array $message) and return array $response.
	 *
	 * @return array|null The formatted response (array for batch, single response for non-batch).
	 */
	public static function process_messages( array $messages, bool $is_batch_request, callable $processor ): ?array {
		$results = array();

		foreach ( $messages as $message ) {
			$response = call_user_func( $processor, $message );
			if ( null === $response ) {
				continue;
			}

			$results[] = $response;
		}

		// Return response format based on original request format (JSON-RPC 2.0 spec)
		// If the request was a batch, response MUST be an array, even if only one result
		return $is_batch_request ? $results : ( $results[0] ?? null );
	}

	/**
	 * Determine if a request body represents a batch request.
	 *
	 * Per JSON-RPC 2.0 specification, a batch request is an array with at least one element.
	 *
	 * @param mixed $body The decoded request body.
	 *
	 * @return bool True if this is a batch request.
	 */
	public static function is_batch_request( $body ): bool {
		return is_array( $body ) && isset( $body[0] );
	}

	/**
	 * Normalize request body to an array of messages.
	 *
	 * Converts single messages to an array for uniform processing.
	 *
	 * @param mixed $body The decoded request body.
	 *
	 * @return array Array of messages for processing.
	 */
	public static function normalize_messages( $body ): array {
		return self::is_batch_request( $body ) ? $body : array( $body );
	}
}
PK     „ŠU]N•Ò*,  ,  W  vendor/wordpress/mcp-adapter/includes/Transport/Contracts/McpRestTransportInterface.phpnu „[µü¤        <?php
/**
 * Interface for MCP REST transport protocols.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Contracts;

use WP_REST_Request;

/**
 * Interface for MCP REST transport protocols.
 *
 * This interface extends the base transport interface to provide
 * WordPress REST API specific functionality, with methods that
 * work specifically with WP_REST_Request objects.
 */
interface McpRestTransportInterface extends McpTransportInterface {

	/**
	 * Check if the user has permission to access the MCP API.
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request The WordPress REST request object.
	 * @return bool|\WP_Error True if allowed, WP_Error or false if not.
	 */
	public function check_permission( WP_REST_Request $request );

	/**
	 * Handle incoming REST requests.
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request The WordPress REST request object.
	 * @return \WP_REST_Response REST API response object.
	 */
	public function handle_request( WP_REST_Request $request ): \WP_REST_Response;
}
PK     „ŠU]ÃÝµÉä  ä  S  vendor/wordpress/mcp-adapter/includes/Transport/Contracts/McpTransportInterface.phpnu „[µü¤        <?php
/**
 * Interface for MCP transport protocols.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Transport\Contracts;

use WP\MCP\Transport\Infrastructure\McpTransportContext;

/**
 * Base interface for MCP transport protocols.
 *
 * This interface defines the core contract for all MCP transport implementations,
 * providing common functionality for initialization and route registration.
 * Specific transport protocols should extend this interface with their own
 * request handling methods.
 */
interface McpTransportInterface {

	/**
	 * Initialize the transport with provided context.
	 *
	 * @param \WP\MCP\Transport\Infrastructure\McpTransportContext $context Dependency injection container.
	 */
	public function __construct( McpTransportContext $context );

	/**
	 * Register transport-specific routes.
	 *
	 * Called during WordPress REST API initialization to register
	 * endpoints for this transport.
	 */
	public function register_routes(): void;
}
PK     „ŠU]sY`Ã  Ã  4  vendor/wordpress/mcp-adapter/includes/Autoloader.phpnu „[µü¤        <?php
/**
 * PSR-4 Autoloader for PHP classes inside plugin.
 *
 * Ensures that autoloaders are present, and logs an Admin notice if not.
 *
 * Can be bypassed by defining the WP_MCP_AUTOLOAD constant to false.
 *
 * @package WP\MCP
 */

declare( strict_types = 1 );

namespace WP\MCP;

/**
 * Class - Autoloader
 */
final class Autoloader {
	/**
	 * Whether the autoloader has been loaded.
	 *
	 * @var bool
	 */
	protected static bool $is_loaded = false;

	/**
	 * Attempt to autoload the Composer dependencies.
	 */
	public static function autoload(): bool {
		// If we're not *supposed* to autoload anything, then return true.
		if ( defined( 'WP_MCP_AUTOLOAD' ) && false === WP_MCP_AUTOLOAD ) {
			return true;
		}

		if ( self::$is_loaded ) {
			return self::$is_loaded;
		}

		$autoloader      = WP_MCP_DIR . '/vendor/autoload.php';
		self::$is_loaded = self::require_autoloader( $autoloader );

		return self::$is_loaded;
	}

	/**
	 * Attempts to load the autoloader file, if it exists.
	 *
	 * @param string $autoloader_file The path to the autoloader file.
	 */
	private static function require_autoloader( string $autoloader_file ): bool {
		if ( ! is_readable( $autoloader_file ) ) {
			self::missing_autoloader_notice();
			return false;
		}

		return (bool) require_once $autoloader_file; // phpcs:ignore WordPressVIPMinimum.Files.IncludingFile.UsingVariable -- Autoloader is a Composer file.
	}

	/**
	 * Displays a notice if the autoloader is missing.
	 */
	private static function missing_autoloader_notice(): void {

		$hooks = array(
			'admin_notices',
			'network_admin_notices',
		);

		foreach ( $hooks as $hook ) {
			add_action(
				$hook,
				static function () {
					$error_message = __( 'MCP Adapter: The Composer autoloader was not found. If you installed the plugin from the GitHub source code, make sure to run `composer install`.', 'mcp-adapter' );

					if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
						error_log( esc_html( $error_message ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- This is a development notice.
					}
					?>
					<div class="error notice">
						<p>
							<?php echo esc_html( $error_message ); ?>
						</p>
					</div>
					<?php
				}
			);
		}
	}
}
PK     „ŠU]Rã�Z  Z  M  vendor/wordpress/mcp-adapter/includes/Handlers/Resources/ResourcesHandler.phpnu „[µü¤        <?php
/**
 * Resources method handlers for MCP requests.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers\Resources;

use WP\MCP\Core\McpServer;
use WP\MCP\Handlers\HandlerHelperTrait;
use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles resources-related MCP methods.
 */
class ResourcesHandler {
	use HandlerHelperTrait;

	/**
	 * The WordPress MCP instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp The WordPress MCP instance.
	 */
	public function __construct( McpServer $mcp ) {
		$this->mcp = $mcp;
	}


	/**
	 * Handles the resources/list request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with resources list and metadata.
	 */
	public function list_resources( int $request_id = 0 ): array {
		// Get the registered resources from the MCP instance and extract only the args.
		$resources = array();
		foreach ( $this->mcp->get_resources() as $resource ) {
			$resources[] = $resource->to_array();
		}

		return array(
			'resources' => $resources,
			'_metadata' => array(
				'component_type'  => 'resources',
				'resources_count' => count( $resources ),
			),
		);
	}

	/**
	 * Handles the resources/read request.
	 *
	 * @param array $params     Request parameters.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with resource contents or error.
	 */
	public function read_resource( array $params, int $request_id = 0 ): array {
		// Extract parameters using helper method.
		$request_params = $this->extract_params( $params );

		if ( ! isset( $request_params['uri'] ) ) {
			return array(
				'error'     => McpErrorFactory::missing_parameter( $request_id, 'uri' )['error'],
				'_metadata' => array(
					'component_type' => 'resource',
					'failure_reason' => 'missing_parameter',
				),
			);
		}

		// Implement resource reading logic here.
		$uri      = $request_params['uri'];
		$resource = $this->mcp->get_resource( $uri );

		if ( ! $resource ) {
			return array(
				'error'     => McpErrorFactory::resource_not_found( $request_id, $uri )['error'],
				'_metadata' => array(
					'component_type' => 'resource',
					'resource_uri'   => $uri,
					'failure_reason' => 'not_found',
				),
			);
		}

		/**
		 * Get the ability
		 *
		 * @var \WP_Ability|\WP_Error $ability
		 */
		$ability = $resource->get_ability();

		// Check if getting the ability returned an error
		if ( is_wp_error( $ability ) ) {
			$this->mcp->error_handler->log(
				'Failed to get ability for resource',
				array(
					'resource_uri'  => $uri,
					'error_message' => $ability->get_error_message(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, $ability->get_error_message() )['error'],
				'_metadata' => array(
					'component_type' => 'resource',
					'resource_uri'   => $uri,
					'resource_name'  => $resource->get_name(),
					'failure_reason' => 'ability_retrieval_failed',
					'error_code'     => $ability->get_error_code(),
				),
			);
		}

		try {
			$has_permission = $ability->check_permissions();
			if ( true !== $has_permission ) {
				// Extract detailed error message and code if WP_Error was returned
				$error_message  = 'Access denied for resource: ' . $resource->get_name();
				$failure_reason = 'permission_denied';

				if ( is_wp_error( $has_permission ) ) {
					$error_message  = $has_permission->get_error_message();
					$failure_reason = $has_permission->get_error_code(); // Use WP_Error code as failure_reason
				}

				return array(
					'error'     => McpErrorFactory::permission_denied( $request_id, $error_message )['error'],
					'_metadata' => array(
						'component_type' => 'resource',
						'resource_uri'   => $uri,
						'resource_name'  => $resource->get_name(),
						'ability_name'   => $ability->get_name(),
						'failure_reason' => $failure_reason,
					),
				);
			}

			$contents = $ability->execute();

			// Handle WP_Error objects that weren't converted by the ability.
			if ( is_wp_error( $contents ) ) {
				$this->mcp->error_handler->log(
					'Ability returned WP_Error object',
					array(
						'ability'       => $ability->get_name(),
						'error_code'    => $contents->get_error_code(),
						'error_message' => $contents->get_error_message(),
					)
				);

				return array(
					'error'     => McpErrorFactory::internal_error( $request_id, $contents->get_error_message() )['error'],
					'_metadata' => array(
						'component_type' => 'resource',
						'resource_uri'   => $uri,
						'resource_name'  => $resource->get_name(),
						'ability_name'   => $ability->get_name(),
						'failure_reason' => 'wp_error',
						'error_code'     => $contents->get_error_code(),
					),
				);
			}

			// Successful execution - return contents.
			return array(
				'contents'  => $contents,
				'_metadata' => array(
					'component_type' => 'resource',
					'resource_uri'   => $uri,
					'resource_name'  => $resource->get_name(),
					'ability_name'   => $ability->get_name(),
				),
			);
		} catch ( \Throwable $exception ) {
			$this->mcp->error_handler->log(
				'Error reading resource',
				array(
					'uri'       => $uri,
					'exception' => $exception->getMessage(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, 'Failed to read resource' )['error'],
				'_metadata' => array(
					'component_type' => 'resource',
					'resource_uri'   => $uri,
					'failure_reason' => 'execution_failed',
					'error_type'     => get_class( $exception ),
				),
			);
		}
	}
}
PK     „ŠU]�þ�<.4  .4  E  vendor/wordpress/mcp-adapter/includes/Handlers/Tools/ToolsHandler.phpnu „[µü¤        <?php
/**
 * Tools method handlers for MCP requests.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers\Tools;

use WP\MCP\Core\McpServer;
use WP\MCP\Domain\Tools\McpTool;
use WP\MCP\Handlers\HandlerHelperTrait;
use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles tools-related MCP methods.
 */
class ToolsHandler {
	use HandlerHelperTrait;

	/**
	 * The WordPress MCP instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp The WordPress MCP instance.
	 */
	public function __construct( McpServer $mcp ) {
		$this->mcp = $mcp;
	}

	/**
	 * Handles the tools/list request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with tools list and metadata.
	 */
	public function list_tools( int $request_id = 0 ): array {
		$tools      = $this->mcp->get_tools();
		$safe_tools = array();

		foreach ( $tools as $tool ) {
			$safe_tools[] = $this->sanitize_tool_data( $tool );
		}

		return array(
			'tools'     => $safe_tools,
			'_metadata' => array(
				'component_type' => 'tools',
				'tools_count'    => count( $safe_tools ),
			),
		);
	}

	/**
	 * Handles the tools/list/all request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with all tools including availability status and metadata.
	 */
	public function list_all_tools( int $request_id = 0 ): array {
		// Return all tools with additional details.
		$tools      = $this->mcp->get_tools();
		$safe_tools = array();

		foreach ( $tools as $tool ) {
			$safe_tool              = $this->sanitize_tool_data( $tool );
			$safe_tool['available'] = true;
			$safe_tools[]           = $safe_tool;
		}

		return array(
			'tools'     => $safe_tools,
			'_metadata' => array(
				'component_type' => 'tools',
				'tools_count'    => count( $safe_tools ),
			),
		);
	}

	/**
	 * Handles the tools/call request.
	 *
	 * @param array $message    Request message.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with tool execution results or error.
	 */
	public function call_tool( array $message, int $request_id = 0 ): array {
		// Extract parameters using helper method.
		$request_params = $this->extract_params( $message );

		if ( ! isset( $request_params['name'] ) ) {
			return array(
				'error'     => McpErrorFactory::missing_parameter( $request_id, 'tool name' )['error'],
				'_metadata' => array(
					'component_type' => 'tool',
					'failure_reason' => 'missing_parameter',
				),
			);
		}

		try {
			// Implement a tool calling logic here.
			$result = $this->handle_tool_call( $request_params, $request_id );

			// Check if the result contains an error.
			// Distinguish between protocol errors (JSON-RPC format) and tool execution errors (isError format).
			if ( isset( $result['error'] ) ) {
				$failure_reason = $result['_metadata']['failure_reason'] ?? '';

				// Protocol errors (keep JSON-RPC error format):
				// - not_found (tool doesn't exist)
				// - ability_retrieval_failed (internal error getting ability)
				$protocol_errors = array( 'not_found', 'ability_retrieval_failed' );

				if ( in_array( $failure_reason, $protocol_errors, true ) ) {
					// Return as JSON-RPC error
					return $result;
				}

				// Tool execution errors (convert to isError: true format):
				// - permission_denied, permission_check_failed
				// - wp_error, execution_failed
				// Note: Error format varies by ability implementation. ExecuteAbilityAbility
				// returns errors as plain strings, while other abilities return an array
				// with a 'message' key. This handles both formats here for compatibility (#89).
				if ( is_string( $result['error'] ) ) {
					$error_message = $result['error'];
				} else {
					$error_message = $result['error']['message'] ?? 'An error occurred while executing the tool.';
				}
				$response = array(
					'content' => array(
						array(
							'type' => 'text',
							'text' => $error_message,
						),
					),
					'isError' => true,
				);

				// Preserve metadata if present.
				if ( isset( $result['_metadata'] ) ) {
					$response['_metadata'] = $result['_metadata'];
				}

				return $response;
			}

			// Successful tool execution - format the response.
			$response = array(
				'content' => array(
					array(
						'type' => 'text',
					),
				),
			);

			// Extract and store metadata before adding result to response content.
			$response['_metadata'] = $result['_metadata'] ?? array(
				'component_type' => 'tool',
				'tool_name'      => $request_params['name'],
			);

			// Remove metadata from result so it doesn't appear in content or structuredContent.
			unset( $result['_metadata'] );

			// @todo: add support for EmbeddedResource schema.ts:619.
			if ( isset( $result['type'] ) && 'image' === $result['type'] ) {
				$response['content'][0]['type'] = 'image';
				$response['content'][0]['data'] = base64_encode( $result['results'] ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode

				// @todo: improve this ?!.
				$response['content'][0]['mimeType'] = $result['mimeType'] ?? 'image/png';
			} else {
				$response['content'][0]['text'] = wp_json_encode( $result );
				$response['structuredContent']  = $result;
			}

			return $response;
		} catch ( \Throwable $exception ) {
			$this->mcp->error_handler->log(
				'Error calling tool',
				array(
					'tool'      => $request_params['name'],
					'exception' => $exception->getMessage(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, 'Failed to execute tool' )['error'],
				'_metadata' => array(
					'component_type' => 'tool',
					'tool_name'      => $request_params['name'],
					'failure_reason' => 'exception',
					'error_type'     => get_class( $exception ),
				),
			);
		}
	}

	/**
	 * Sanitizes tool data for JSON encoding by removing callback functions and other problematic data.
	 *
	 * @param \WP\MCP\Domain\Tools\McpTool $tool Raw tool data.
	 *
	 * @return array Sanitized tool data safe for JSON encoding.
	 */
	private function sanitize_tool_data( McpTool $tool ): array {
		// Convert the tool to an array representation.
		$tool = $tool->to_array();
		// Create a safe copy with only JSON-serializable data.
		$safe_tool = array(
			'name'        => $tool['name'] ?? '',
			'description' => $tool['description'] ?? '',
			'type'        => $tool['type'] ?? 'action',
		);

		// Include input schema if present (should be JSON-safe).
		if ( isset( $tool['inputSchema'] ) && is_array( $tool['inputSchema'] ) ) {
			$safe_tool['inputSchema'] = $tool['inputSchema'];
		}

		// Include output schema if present (should be JSON-safe).
		if ( isset( $tool['outputSchema'] ) && is_array( $tool['outputSchema'] ) ) {
			$safe_tool['outputSchema'] = $tool['outputSchema'];
		}

		// Include annotations if present.
		if ( isset( $tool['annotations'] ) && is_array( $tool['annotations'] ) ) {
			$safe_tool['annotations'] = $tool['annotations'];
		}

		// Note: We deliberately exclude 'callback' and 'permission_callback'
		// as these are PHP callables that can cause circular references during JSON encoding.

		return $safe_tool;
	}

	/**
	 * Handles tool call request.
	 *
	 * @param array $params     The request parameters.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with tool execution results or error.
	 */
	public function handle_tool_call( array $params, int $request_id = 0 ): array {
		$tool_name = $params['name'];
		$args      = $params['arguments'] ?? array();

		// Get the tool callbacks.
		$tool = $this->mcp->get_tool( $params['name'] );

		// Check if the tool exists.
		if ( ! $tool ) {
			$this->mcp->error_handler->log(
				'Tool not found',
				array(
					'tool' => $tool_name,
				)
			);

			return array(
				'error'     => McpErrorFactory::tool_not_found( $request_id, $tool_name )['error'],
				'_metadata' => array(
					'component_type' => 'tool',
					'tool_name'      => $tool_name,
					'failure_reason' => 'not_found',
				),
			);
		}

		/**
		 * Get the ability
		 *
		 * @var \WP_Ability|\WP_Error $ability
		 */
		$ability = $tool->get_ability();

		// Check if getting the ability returned an error
		if ( is_wp_error( $ability ) ) {
			$this->mcp->error_handler->log(
				'Failed to get ability for tool',
				array(
					'tool'          => $tool_name,
					'error_message' => $ability->get_error_message(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, $ability->get_error_message() )['error'],
				'_metadata' => array(
					'component_type' => 'tool',
					'tool_name'      => $tool_name,
					'failure_reason' => 'ability_retrieval_failed',
					'error_code'     => $ability->get_error_code(),
				),
			);
		}

		// Unwrap arguments if schema was transformed from flattened to object format
		$tool_metadata = $tool->get_metadata();
		$input_wrapped = ! empty( $tool_metadata['_input_schema_transformed'] );
		if ( $input_wrapped ) {
			// Unwrap: {input: "value"} â†’ "value"
			$input_wrapper = $tool_metadata['_input_schema_wrapper'] ?? 'input';
			$args          = is_array( $args ) ? ( $args[ $input_wrapper ] ?? null ) : null;
		}

		// If ability has no input schema and args is empty, pass null instead
		$ability_input_schema = $ability->get_input_schema();
		if ( empty( $ability_input_schema ) && empty( $args ) ) {
			$args = null;
		}

		// Run ability Permission Callback.
		try {
			$has_permission = $ability->check_permissions( $args );
			if ( true !== $has_permission ) {
				// Extract detailed error message and code if WP_Error was returned
				$error_message  = 'Access denied for tool: ' . $tool_name;
				$failure_reason = 'permission_denied';

				if ( is_wp_error( $has_permission ) ) {
					$error_message  = $has_permission->get_error_message();
					$failure_reason = $has_permission->get_error_code(); // Use WP_Error code as failure_reason
				}

				return array(
					'error'     => McpErrorFactory::permission_denied( $request_id, $error_message )['error'],
					'_metadata' => array(
						'component_type' => 'tool',
						'tool_name'      => $tool_name,
						'ability_name'   => $ability->get_name(),
						'failure_reason' => $failure_reason,
					),
				);
			}
		} catch ( \Throwable $e ) {
			$this->mcp->error_handler->log(
				'Error running ability permission callback',
				array(
					'ability'   => $ability->get_name(),
					'exception' => $e->getMessage(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, 'Error running ability permission callback' )['error'],
				'_metadata' => array(
					'component_type' => 'tool',
					'tool_name'      => $tool_name,
					'ability_name'   => $ability->get_name(),
					'failure_reason' => 'permission_check_failed',
					'error_type'     => get_class( $e ),
				),
			);
		}

		// Execute the tool callback.
		try {
			$result = $ability->execute( $args );

			// Handle WP_Error objects that weren't converted by the ability.
			if ( is_wp_error( $result ) ) {
				$this->mcp->error_handler->log(
					'Ability returned WP_Error object',
					array(
						'ability'       => $ability->get_name(),
						'error_code'    => $result->get_error_code(),
						'error_message' => $result->get_error_message(),
					)
				);

				// Return error for conversion to isError format by call_tool().
				return array(
					'error'     => array(
						'message' => $result->get_error_message(),
						'code'    => $result->get_error_code(),
					),
					'_metadata' => array(
						'component_type' => 'tool',
						'tool_name'      => $tool_name,
						'ability_name'   => $ability->get_name(),
						'failure_reason' => 'wp_error',
						'error_code'     => $result->get_error_code(),
					),
				);
			}

			// Wrap result if output schema was transformed from flattened to object format
			$output_wrapped = ! empty( $tool_metadata['_output_schema_transformed'] );
			if ( $output_wrapped ) {
				// Wrap: "value" â†’ {result: "value"}
				$output_wrapper = $tool_metadata['_output_schema_wrapper'] ?? 'result';
				$result         = array( $output_wrapper => $result );
			}

			// Ensure $result is always an array before adding metadata.
			if ( ! is_array( $result ) ) {
				$result = array( 'result' => $result );
			}

			// Successful execution - add metadata.
			$result['_metadata'] = array(
				'component_type' => 'tool',
				'tool_name'      => $tool_name,
				'ability_name'   => $ability->get_name(),
			);

			return $result;
		} catch ( \Throwable $e ) {
			$this->mcp->error_handler->log(
				'Tool execution failed',
				array(
					'tool'      => $tool_name,
					'exception' => $e->getMessage(),
				)
			);

			// Return error for conversion to isError format by call_tool().
			return array(
				'error'     => array(
					'message' => $e->getMessage(),
				),
				'_metadata' => array(
					'component_type' => 'tool',
					'tool_name'      => $tool_name,
					'ability_name'   => $ability->get_name(),
					'failure_reason' => 'execution_failed',
					'error_type'     => get_class( $e ),
				),
			);
		}
	}
}
PK     „ŠU]¸™5ÆN  N  E  vendor/wordpress/mcp-adapter/includes/Handlers/HandlerHelperTrait.phpnu „[µü¤        <?php
/**
 * Helper trait for MCP handlers.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers;

use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Provides common helper methods for MCP handlers.
 */
trait HandlerHelperTrait {
	/**
	 * Extracts parameters from a request message.
	 *
	 * Handles both direct params and nested params structure for backward compatibility.
	 * This normalizes the dual parameter patterns found throughout handlers.
	 *
	 * @param array $data Request data that may have params at root or nested.
	 *
	 * @return array Extracted parameters.
	 */
	protected function extract_params( array $data ): array {
		return $data['params'] ?? $data;
	}

	/**
	 * Creates a standardized error response.
	 *
	 * This helper ensures all error responses follow the same format and
	 * properly extract the error field from McpErrorFactory responses.
	 *
	 * @param int    $code       Error code.
	 * @param string $message    Error message.
	 * @param int    $request_id Optional. Request ID for JSON-RPC. Default 0.
	 *
	 * @return array Error response array with 'error' key.
	 */
	protected function create_error_response( int $code, string $message, int $request_id = 0 ): array {
		return array(
			'id'    => $request_id,
			'error' => array(
				'code'    => $code,
				'message' => $message,
			),
		);
	}

	/**
	 * Extracts error array from McpErrorFactory response.
	 *
	 * McpErrorFactory methods return ['error' => [...]] but handlers
	 * often need just the error array itself.
	 *
	 * @param array $factory_response Response from McpErrorFactory method.
	 *
	 * @return array Error array (without wrapping 'error' key).
	 */
	protected function extract_error( array $factory_response ): array {
		return $factory_response['error'] ?? $factory_response;
	}

	/**
	 * Creates missing parameter error response.
	 *
	 * @param string $param_name Missing parameter name.
	 * @param int    $request_id Optional. Request ID for JSON-RPC. Default 0.
	 *
	 * @return array Error response array.
	 */
	protected function missing_parameter_error( string $param_name, int $request_id = 0 ): array {
		return array( 'error' => McpErrorFactory::missing_parameter( $request_id, $param_name )['error'] );
	}

	/**
	 * Creates permission denied error response.
	 *
	 * @param string $denied_resource Resource that was denied.
	 * @param int    $request_id      Optional. Request ID for JSON-RPC. Default 0.
	 *
	 * @return array Error response array.
	 */
	protected function permission_denied_error( string $denied_resource, int $request_id = 0 ): array {
		return array( 'error' => McpErrorFactory::permission_denied( $request_id, 'Access denied for: ' . $denied_resource )['error'] );
	}

	/**
	 * Creates internal error response.
	 *
	 * @param string $message    Error message.
	 * @param int    $request_id Optional. Request ID for JSON-RPC. Default 0.
	 *
	 * @return array Error response array.
	 */
	protected function internal_error( string $message, int $request_id = 0 ): array {
		return array( 'error' => McpErrorFactory::internal_error( $request_id, $message )['error'] );
	}

	/**
	 * Creates a standardized success response.
	 *
	 * @param mixed $data Response data.
	 *
	 * @return array Success response array.
	 */
	protected function create_success_response( $data ): array {
		return array(
			'result' => $data,
		);
	}
}
PK     „ŠU]ŒAÕµ  µ  O  vendor/wordpress/mcp-adapter/includes/Handlers/Initialize/InitializeHandler.phpnu „[µü¤        <?php
/**
 * Initialize method handler for MCP requests.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers\Initialize;

use WP\MCP\Core\McpServer;
use stdClass;

/**
 * Handles the initialize MCP method.
 */
class InitializeHandler {
	/**
	 * The WordPress MCP instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp The WordPress MCP instance.
	 */
	public function __construct( McpServer $mcp ) {
		$this->mcp = $mcp;
	}

	/**
	 * Handles the initialize request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with server capabilities and information.
	 */
	public function handle( int $request_id = 0 ): array {
		$server_info = array(
			'name'    => $this->mcp->get_server_name(),
			'version' => $this->mcp->get_server_version(),
		);

		// MCP 2025-06-18 compliant capabilities
		$capabilities = array(
			'tools'       => new stdClass(), // Empty object indicates support
			'resources'   => new stdClass(), // Basic resources support without listChanged/subscribe
			'prompts'     => new stdClass(), // Basic prompts support without listChanged
			'logging'     => new stdClass(), // Server supports sending log messages to client
			'completions' => new stdClass(), // Server supports argument autocompletion (note: plural!)
		);

		// Send the response according to JSON-RPC 2.0 and InitializeResult schema.
		return array(
			'protocolVersion' => '2025-06-18',
			'serverInfo'      => $server_info,
			'capabilities'    => (object) $capabilities,
			'instructions'    => $this->mcp->get_server_description(),
		);
	}
}
PK     „ŠU]%ñBÄ  Ä  I  vendor/wordpress/mcp-adapter/includes/Handlers/Prompts/PromptsHandler.phpnu „[µü¤        <?php
/**
 * Prompts method handlers for MCP requests.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers\Prompts;

use WP\MCP\Core\McpServer;
use WP\MCP\Handlers\HandlerHelperTrait;
use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles prompts-related MCP methods.
 */
class PromptsHandler {
	use HandlerHelperTrait;

	/**
	 * The WordPress MCP instance.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp;

	/**
	 * Constructor.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp The WordPress MCP instance.
	 */
	public function __construct( McpServer $mcp ) {
		$this->mcp = $mcp;
	}


	/**
	 * Handles the prompts/list request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with prompts list and metadata.
	 */
	public function list_prompts( int $request_id = 0 ): array {
		// Get the registered prompts from the MCP instance and extract only the args.
		$prompts = array();
		foreach ( $this->mcp->get_prompts() as $prompt ) {
			$prompts[] = $prompt->to_array();
		}

		return array(
			'prompts'   => $prompts,
			'_metadata' => array(
				'component_type' => 'prompts',
				'prompts_count'  => count( $prompts ),
			),
		);
	}

	/**
	 * Handles the prompts/get request.
	 *
	 * @param array $params     Request parameters.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with prompt execution results or error.
	 */
	public function get_prompt( array $params, int $request_id = 0 ): array {
		// Extract parameters using helper method.
		$request_params = $this->extract_params( $params );

		if ( ! isset( $request_params['name'] ) ) {
			return array(
				'error'     => McpErrorFactory::missing_parameter( $request_id, 'name' )['error'],
				'_metadata' => array(
					'component_type' => 'prompt',
					'failure_reason' => 'missing_parameter',
				),
			);
		}

		// Get the prompt by name.
		$prompt_name = $request_params['name'];
		$prompt      = $this->mcp->get_prompt( $prompt_name );

		if ( ! $prompt ) {
			return array(
				'error'     => McpErrorFactory::prompt_not_found( $request_id, $prompt_name )['error'],
				'_metadata' => array(
					'component_type' => 'prompt',
					'prompt_name'    => $prompt_name,
					'failure_reason' => 'not_found',
				),
			);
		}

		// Get the arguments for the prompt.
		$arguments = $request_params['arguments'] ?? array();

		try {
			// Check if this is a builder-based prompt that can execute directly
			if ( $prompt->is_builder_based() ) {
				// Direct execution through the builder (bypasses abilities completely)
				// Note: Builder permission checks return bool only, not WP_Error
				$has_permission = $prompt->check_permission_direct( $arguments );
				if ( ! $has_permission ) {
					return array(
						'error'     => McpErrorFactory::permission_denied( $request_id, 'Access denied for prompt: ' . $prompt_name )['error'],
						'_metadata' => array(
							'component_type' => 'prompt',
							'prompt_name'    => $prompt_name,
							'failure_reason' => 'permission_denied',
							'is_builder'     => true,
						),
					);
				}

				$result              = $prompt->execute_direct( $arguments );
				$result['_metadata'] = array(
					'component_type' => 'prompt',
					'prompt_name'    => $prompt_name,
					'is_builder'     => true,
				);

				return $result;
			}

			/**
			 * Traditional ability-based execution
			 *
			 * Get the ability for the prompt.
			 *
			 * @var \WP_Ability|\WP_Error $ability
			 */
			$ability = $prompt->get_ability();

			// Check if getting the ability returned an error
			if ( is_wp_error( $ability ) ) {
				$this->mcp->error_handler->log(
					'Failed to get ability for prompt',
					array(
						'prompt_name'   => $prompt_name,
						'error_message' => $ability->get_error_message(),
					)
				);

				return array(
					'error'     => McpErrorFactory::internal_error( $request_id, $ability->get_error_message() )['error'],
					'_metadata' => array(
						'component_type' => 'prompt',
						'prompt_name'    => $prompt_name,
						'failure_reason' => 'ability_retrieval_failed',
						'error_code'     => $ability->get_error_code(),
						'is_builder'     => false,
					),
				);
			}

			// If ability has no input schema and arguments is empty, pass null
			// This is required by WP_Ability::validate_input() which expects null when no schema
			$ability_input_schema = $ability->get_input_schema();
			if ( empty( $ability_input_schema ) && empty( $arguments ) ) {
				$arguments = null;
			}
			$has_permission = $ability->check_permissions( $arguments );
			if ( true !== $has_permission ) {
				// Extract detailed error message and code if WP_Error was returned
				$error_message  = 'Access denied for prompt: ' . $prompt_name;
				$failure_reason = 'permission_denied';

				if ( is_wp_error( $has_permission ) ) {
					$error_message  = $has_permission->get_error_message();
					$failure_reason = $has_permission->get_error_code(); // Use WP_Error code as failure_reason
				}

				return array(
					'error'     => McpErrorFactory::permission_denied( $request_id, $error_message )['error'],
					'_metadata' => array(
						'component_type' => 'prompt',
						'prompt_name'    => $prompt_name,
						'ability_name'   => $ability->get_name(),
						'failure_reason' => $failure_reason,
						'is_builder'     => false,
					),
				);
			}

			$result = $ability->execute( $arguments );

			// Handle WP_Error objects that weren't converted by the ability.
			if ( is_wp_error( $result ) ) {
				$this->mcp->error_handler->log(
					'Ability returned WP_Error object',
					array(
						'ability'       => $ability->get_name(),
						'error_code'    => $result->get_error_code(),
						'error_message' => $result->get_error_message(),
					)
				);

				return array(
					'error'     => McpErrorFactory::internal_error( $request_id, $result->get_error_message() )['error'],
					'_metadata' => array(
						'component_type' => 'prompt',
						'prompt_name'    => $prompt_name,
						'ability_name'   => $ability->get_name(),
						'failure_reason' => 'wp_error',
						'error_code'     => $result->get_error_code(),
						'is_builder'     => false,
					),
				);
			}

			// Successful execution - add metadata.
			$result['_metadata'] = array(
				'component_type' => 'prompt',
				'prompt_name'    => $prompt_name,
				'ability_name'   => $ability->get_name(),
				'is_builder'     => false,
			);

			return $result;
		} catch ( \Throwable $e ) {
			$this->mcp->error_handler->log(
				'Prompt execution failed',
				array(
					'prompt_name' => $prompt_name,
					'arguments'   => $arguments,
					'error'       => $e->getMessage(),
				)
			);

			return array(
				'error'     => McpErrorFactory::internal_error( $request_id, 'Prompt execution failed' )['error'],
				'_metadata' => array(
					'component_type' => 'prompt',
					'prompt_name'    => $prompt_name,
					'failure_reason' => 'execution_failed',
					'error_type'     => get_class( $e ),
				),
			);
		}
	}
}
PK     „ŠU]åp“'	  '	  G  vendor/wordpress/mcp-adapter/includes/Handlers/System/SystemHandler.phpnu „[µü¤        <?php
/**
 * System method handlers for MCP requests.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Handlers\System;

use WP\MCP\Infrastructure\ErrorHandling\McpErrorFactory;

/**
 * Handles system-related MCP methods.
 */
class SystemHandler {
	/**
	 * Handles the ping request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Empty result array per MCP specification.
	 */
	public function ping( int $request_id = 0 ): array {
		// According to MCP specification, ping returns an empty result.
		return array();
	}

	/**
	 * Handles the logging/setLevel request.
	 *
	 * @param array $params     Request parameters.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with error if level parameter is missing, empty array otherwise.
	 */
	public function set_logging_level( array $params, int $request_id = 0 ): array {
		if ( ! isset( $params['params']['level'] ) && ! isset( $params['level'] ) ) {
			return array( 'error' => McpErrorFactory::missing_parameter( $request_id, 'level' )['error'] );
		}

		// @todo: Implement logging level setting logic here.

		return array();
	}

	/**
	 * Handles the completion/complete request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Completion response array.
	 */
	public function complete( int $request_id = 0 ): array {
		// Implement completion logic here.

		return array();
	}

	/**
	 * Handles the roots/list request.
	 *
	 * @param int $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with roots list.
	 */
	public function list_roots( int $request_id = 0 ): array {
		// Implement roots listing logic here.
		$roots = array();

		return array(
			'roots' => $roots,
		);
	}

	/**
	 * Handles method not found errors.
	 *
	 * @param array $params     Request parameters.
	 * @param int   $request_id Optional. The request ID for JSON-RPC. Default 0.
	 *
	 * @return array Response with method not found error.
	 */
	public function method_not_found( array $params, int $request_id = 0 ): array {
		$method = $params['method'] ?? 'unknown';

		return array( 'error' => McpErrorFactory::method_not_found( $request_id, $method )['error'] );
	}
}
PK     „ŠU]r¸A™Y*  Y*  C  vendor/wordpress/mcp-adapter/includes/Domain/Utils/McpValidator.phpnu „[µü¤        <?php
/**
 * MCP Validator utility class for validating MCP component data.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Utils;

/**
 * Utility class for validating MCP component data according to MCP specification.
 *
 * Provides shared validation implementations used across multiple MCP component
 * validators and registration classes. Each method focuses on a specific validation concern.
 */
class McpValidator {

	/**
	 * Validate ISO 8601 timestamp format.
	 *
	 * Checks if a string is a valid ISO 8601 timestamp by attempting to parse
	 * it using multiple ISO 8601 format variations.
	 *
	 * @param string $timestamp The timestamp to validate.
	 *
	 * @return bool True if valid ISO 8601 timestamp, false otherwise.
	 */
	public static function validate_iso8601_timestamp( string $timestamp ): bool {
		// Try to parse as DateTime with ISO 8601 format.
		$datetime = \DateTime::createFromFormat( \DateTime::ATOM, $timestamp );
		if ( $datetime && $datetime->format( \DateTime::ATOM ) === $timestamp ) {
			return true;
		}

		// Try alternative ISO 8601 formats.
		$formats = array(
			'Y-m-d\TH:i:s\Z',           // UTC format
			'Y-m-d\TH:i:sP',            // With timezone offset
			'Y-m-d\TH:i:s.u\Z',         // With microseconds UTC
			'Y-m-d\TH:i:s.uP',          // With microseconds and timezone
		);

		foreach ( $formats as $format ) {
			$datetime = \DateTime::createFromFormat( $format, $timestamp );
			if ( $datetime && $datetime->format( $format ) === $timestamp ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Validate an MCP component name.
	 *
	 * Validates that a name follows MCP naming conventions:
	 * - Must not be empty
	 * - Must not exceed the maximum length
	 * - Must only contain letters, numbers, hyphens (-), and underscores (_)
	 *
	 * @param string $name The name to validate.
	 * @param int    $max_length Maximum allowed length. Default is 255.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_name( string $name, int $max_length = 255 ): bool {
		// Names should not be empty.
		if ( empty( $name ) ) {
			return false;
		}

		// Check length constraints.
		if ( strlen( $name ) > $max_length ) {
			return false;
		}

		// Only allow letters, numbers, hyphens, and underscores.
		return (bool) preg_match( '/^[a-zA-Z0-9_-]+$/', $name );
	}

	/**
	 * Validate a tool or prompt name (max 255 characters).
	 *
	 * @param string $name The name to validate.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_tool_or_prompt_name( string $name ): bool {
		return self::validate_name( $name, 255 );
	}

	/**
	 * Validate an argument name (max 64 characters).
	 *
	 * @param string $name The name to validate.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_argument_name( string $name ): bool {
		return self::validate_name( $name, 64 );
	}

	/**
	 * Validate general MIME type format.
	 *
	 * Validates that a MIME type follows the standard format: type/subtype
	 * where both type and subtype contain valid characters.
	 *
	 * @param string $mime_type The MIME type to validate.
	 *
	 * @return bool True if valid MIME type format, false otherwise.
	 */
	public static function validate_mime_type( string $mime_type ): bool {
		return (bool) preg_match( '/^[a-zA-Z0-9][a-zA-Z0-9!#$&\-\^_]*\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-\^_]*$/', $mime_type );
	}

	/**
	 * Validate image MIME type.
	 *
	 * Checks if the MIME type is a valid image type according to MCP specification.
	 *
	 * @param string $mime_type The MIME type to validate.
	 *
	 * @return bool True if valid image MIME type, false otherwise.
	 */
	public static function validate_image_mime_type( string $mime_type ): bool {
		return str_starts_with( strtolower( $mime_type ), 'image/' );
	}

	/**
	 * Validate audio MIME type.
	 *
	 * Checks if the MIME type is a valid audio type according to MCP specification.
	 *
	 * @param string $mime_type The MIME type to validate.
	 *
	 * @return bool True if valid audio MIME type, false otherwise.
	 */
	public static function validate_audio_mime_type( string $mime_type ): bool {
		return str_starts_with( strtolower( $mime_type ), 'audio/' );
	}

	/**
	 * Validate base64 content.
	 *
	 * Checks if a string is valid base64-encoded content.
	 *
	 * @param string $content The content to validate as base64.
	 *
	 * @return bool True if valid base64, false otherwise.
	 */
	public static function validate_base64( string $content ): bool {
		// Base64 content should not be empty.
		if ( empty( $content ) ) {
			return false;
		}

		// Reject whitespace-only strings (they decode to empty string but aren't valid base64 content).
		if ( trim( $content ) === '' ) {
			return false;
		}

		// Check if it's valid base64 encoding.
		return base64_decode( $content, true ) !== false; // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
	}

	/**
	 * Validate a resource URI format.
	 *
	 * Per MCP spec: "The URI can use any protocol; it is up to the server how to interpret it."
	 * This validates basic URI structure per RFC 3986.
	 *
	 * @param string $uri The URI to validate.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_resource_uri( string $uri ): bool {
		// URI should not be empty.
		if ( empty( $uri ) ) {
			return false;
		}

		// Check reasonable length constraints.
		if ( strlen( $uri ) > 2048 ) {
			return false;
		}

		// Basic URI validation: must have scheme followed by colon (RFC 3986).
		// This accepts any protocol as per MCP specification.
		return (bool) preg_match( '/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/', $uri );
	}

	/**
	 * Validate a role value according to MCP specification.
	 *
	 * Valid roles are "user" or "assistant".
	 *
	 * @param string $role The role to validate.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_role( string $role ): bool {
		return in_array( $role, array( 'user', 'assistant' ), true );
	}

	/**
	 * Validate an array of roles according to MCP specification.
	 *
	 * All roles must be strings and must be either "user" or "assistant".
	 *
	 * @param array $roles The roles array to validate.
	 *
	 * @return bool True if all roles are valid, false otherwise.
	 */
	public static function validate_roles_array( array $roles ): bool {
		if ( empty( $roles ) ) {
			return false;
		}

		foreach ( $roles as $role ) {
			if ( ! is_string( $role ) || ! self::validate_role( $role ) ) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Validate a priority value according to MCP specification.
	 *
	 * Priority must be a number between 0.0 and 1.0 (inclusive).
	 *
	 * @param mixed $priority The priority value to validate.
	 *
	 * @return bool True if valid, false otherwise.
	 */
	public static function validate_priority( $priority ): bool {
		if ( ! is_numeric( $priority ) ) {
			return false;
		}

		$priority_float = (float) $priority;
		return $priority_float >= 0.0 && $priority_float <= 1.0;
	}

	/**
	 * Get validation errors for tool-specific MCP annotations.
	 *
	 * Validates tool annotation fields per MCP 2025-06-18 specification:
	 * - readOnlyHint, destructiveHint, idempotentHint, openWorldHint must be booleans
	 * - title must be a non-empty string
	 *
	 * Only validates known tool annotation fields. Unknown fields are ignored.
	 *
	 * @param array $annotations The annotations to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function get_tool_annotation_validation_errors( array $annotations ): array {
		$errors = array();

		foreach ( $annotations as $field => $value ) {
			switch ( $field ) {
				case 'readOnlyHint':
				case 'destructiveHint':
				case 'idempotentHint':
				case 'openWorldHint':
					if ( ! is_bool( $value ) ) {
						$errors[] = sprintf(
							/* translators: %s: annotation field name */
							__( 'Tool annotation field %s must be a boolean', 'mcp-adapter' ),
							$field
						);
					}
					break;

				case 'title':
					if ( ! is_string( $value ) ) {
						$errors[] = sprintf(
							/* translators: %s: annotation field name */
							__( 'Tool annotation field %s must be a string', 'mcp-adapter' ),
							$field
						);
						break;
					}
					if ( empty( trim( $value ) ) ) {
						$errors[] = sprintf(
							/* translators: %s: annotation field name */
							__( 'Tool annotation field %s must be a non-empty string', 'mcp-adapter' ),
							$field
						);
					}
					break;

				default:
					// Unknown fields are ignored to allow forward compatibility.
					break;
			}
		}

		return $errors;
	}

	/**
	 * Get validation errors for shared MCP annotations.
	 *
	 * Validates shared annotation fields per MCP 2025-06-18 specification:
	 * - audience must be a non-empty array of valid Role values ("user", "assistant")
	 * - lastModified must be a valid ISO 8601 formatted string
	 * - priority must be a number between 0.0 and 1.0
	 *
	 * Only validates known shared annotation fields. Unknown fields are ignored.
	 * Used by resources, prompts, and tools.
	 *
	 * @param array $annotations The annotations to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function get_annotation_validation_errors( array $annotations ): array {
		$errors = array();

		foreach ( $annotations as $field => $value ) {
			switch ( $field ) {
				case 'audience':
					if ( ! is_array( $value ) ) {
						$errors[] = __( 'Annotation field audience must be an array', 'mcp-adapter' );
						break;
					}
					if ( empty( $value ) ) {
						$errors[] = __( 'Annotation field audience must be a non-empty array', 'mcp-adapter' );
						break;
					}
					if ( ! self::validate_roles_array( $value ) ) {
						$errors[] = __( 'Annotation field audience must contain only valid roles ("user" or "assistant")', 'mcp-adapter' );
					}
					break;

				case 'lastModified':
					if ( ! is_string( $value ) || empty( trim( $value ) ) ) {
						$errors[] = __( 'Annotation field lastModified must be a non-empty string', 'mcp-adapter' );
						break;
					}
					if ( ! self::validate_iso8601_timestamp( trim( $value ) ) ) {
						$errors[] = __( 'Annotation field lastModified must be a valid ISO 8601 timestamp', 'mcp-adapter' );
					}
					break;

				case 'priority':
					if ( ! is_numeric( $value ) ) {
						$errors[] = __( 'Annotation field priority must be a number', 'mcp-adapter' );
						break;
					}
					if ( ! self::validate_priority( $value ) ) {
						$errors[] = __( 'Annotation field priority must be between 0.0 and 1.0', 'mcp-adapter' );
					}
					break;

				default:
					// Unknown fields are ignored to allow forward compatibility.
					break;
			}
		}

		return $errors;
	}
}
PK     „ŠU]�¡ýx  x  H  vendor/wordpress/mcp-adapter/includes/Domain/Utils/SchemaTransformer.phpnu „[µü¤        <?php
/**
 * SchemaTransformer class for converting flattened schemas to MCP-compatible object schemas.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Utils;

/**
 * SchemaTransformer class.
 *
 * This class transforms flattened JSON schemas (e.g., type: string, number, boolean, array)
 * into MCP-compatible object schemas. MCP requires all tool input schemas to be of type "object".
 *
 * @package McpAdapter
 */
class SchemaTransformer {
	/**
	 * Transform a schema to MCP-compatible object format.
	 *
	 * If the schema is already an object type, it is returned unchanged.
	 * If the schema is a flattened type (string, number, boolean, array), it is
	 * wrapped in an object structure with a single property (defaults to "input").
	 *
	 * @param array<string,mixed>|null $schema       The JSON schema to transform.
	 * @param string                   $wrapper_key  Property name to use when wrapping non-object schemas.
	 *
	 * @return array<string,mixed> Array containing 'schema', 'was_transformed' (bool), and 'wrapper_property' when transformed.
	 */
	public static function transform_to_object_schema( ?array $schema, string $wrapper_key = 'input' ): array {
		// Handle null or empty schema - return minimal object schema
		if ( empty( $schema ) ) {
			return array(
				'schema'           => array(
					'type'                 => 'object',
					'additionalProperties' => false,
				),
				'was_transformed'  => false, // Empty schema wasn't really transformed
				'wrapper_property' => null,
			);
		}

		// If no type is specified, just return it as-is. It will fail MCP validation later because MCP requires an explicit type: "object"
		if ( ! isset( $schema['type'] ) ) {
			return array(
				'schema'           => $schema,
				'was_transformed'  => false,
				'wrapper_property' => null,
			);
		}

		// If already an object type, return as-is
		if ( 'object' === $schema['type'] ) {
			return array(
				'schema'           => $schema,
				'was_transformed'  => false,
				'wrapper_property' => null,
			);
		}

		// Transform flattened schema to object format
		return array(
			'schema'           => self::wrap_in_object( $schema, $wrapper_key ),
			'was_transformed'  => true,
			'wrapper_property' => $wrapper_key,
		);
	}

	/**
	 * Wrap a flattened schema in an object structure.
	 *
	 * Creates an object schema with a single property (named by $wrapper_key) that
	 * contains the original flattened schema.
	 *
	 * @param array<string,mixed> $schema The flattened schema to wrap.
	 * @param string              $wrapper_key Property name to wrap the value under.
	 *
	 * @return array<string,mixed> The wrapped object schema.
	 */
	private static function wrap_in_object( array $schema, string $wrapper_key ): array {
		return array(
			'type'       => 'object',
			'properties' => array(
				$wrapper_key => $schema,
			),
			'required'   => array( $wrapper_key ),
		);
	}
}
PK     „ŠU]xZ#    J  vendor/wordpress/mcp-adapter/includes/Domain/Utils/McpAnnotationMapper.phpnu „[µü¤        <?php
/**
 * MCP Annotation Mapper utility class for mapping WordPress ability annotations to MCP format.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Utils;

/**
 * Utility class for mapping WordPress ability annotations to MCP Annotations format.
 *
 * Provides shared annotation mapping and transformation logic used across multiple
 * MCP component registration classes. Handles conversion of WordPress-format annotations
 * to MCP-compliant annotation structures.
 */
class McpAnnotationMapper {

	/**
	 * Comprehensive mapping of MCP annotations.
	 *
	 * Maps MCP annotation fields to their type, which features they apply to,
	 * and their WordPress Ability API equivalent property names.
	 *
	 * Structure:
	 * - type: The data type (boolean, string, array, number)
	 * - features: Array of MCP features where this annotation is used (tool, resource, prompt)
	 * - ability_property: The WordPress Ability API property name (may differ from MCP field name), or null if mapping 1:1
	 *
	 * @var array<string, array{type: string, features: array<string>, ability_property: string|null}>
	 */
	private static array $mcp_annotations = array(
		// Shared annotations (all features) - in annotations object.
		'audience'        => array(
			'type'             => 'array',
			'features'         => array( 'tool', 'resource', 'prompt' ),
			'ability_property' => null,
		),
		'lastModified'    => array(
			'type'             => 'string',
			'features'         => array( 'tool', 'resource', 'prompt' ),
			'ability_property' => null,
		),
		'priority'        => array(
			'type'             => 'number',
			'features'         => array( 'tool', 'resource', 'prompt' ),
			'ability_property' => null,
		),
		'readOnlyHint'    => array(
			'type'             => 'boolean',
			'features'         => array( 'tool' ),
			'ability_property' => 'readonly',
		),
		'destructiveHint' => array(
			'type'             => 'boolean',
			'features'         => array( 'tool' ),
			'ability_property' => 'destructive',
		),
		'idempotentHint'  => array(
			'type'             => 'boolean',
			'features'         => array( 'tool' ),
			'ability_property' => 'idempotent',
		),
		'openWorldHint'   => array(
			'type'             => 'boolean',
			'features'         => array( 'tool' ),
			'ability_property' => null,
		),
		'title'           => array(
			'type'             => 'string',
			'features'         => array( 'tool' ),
			'ability_property' => null,
		),
	);

	/**
	 * Map WordPress ability annotation property names to MCP field names.
	 *
	 * Maps WordPress-format field names to MCP equivalents (e.g., readonly â†’ readOnlyHint).
	 * Only includes annotations applicable to the specified feature type.
	 * Null values are excluded from the result.
	 *
	 * @param array  $ability_annotations WordPress ability annotations.
	 * @param string $feature_type        The MCP feature type ('tool', 'resource', or 'prompt').
	 *
	 * @return array Mapped annotations for the specified feature type.
	 */
	public static function map( array $ability_annotations, string $feature_type ): array {
		$result = array();

		foreach ( self::$mcp_annotations as $mcp_field => $config ) {
			if ( ! in_array( $feature_type, $config['features'], true ) ) {
				continue;
			}

			$value = self::resolve_annotation_value(
				$ability_annotations,
				$mcp_field,
				$config['ability_property']
			);

			if ( null === $value ) {
				continue;
			}

			$normalized = self::normalize_annotation_value( $config['type'], $value );
			if ( null === $normalized ) {
				continue;
			}

			$result[ $mcp_field ] = $normalized;
		}

		return $result;
	}

	/**
	 * Resolve the annotation value, preferring WordPress-format overrides when available.
	 *
	 * @param array       $annotations     Raw annotations from the ability.
	 * @param string      $mcp_field       The MCP field name.
	 * @param string|null $ability_property Optional WordPress-format field name, or null if mapping 1:1.
	 *
	 * @return mixed The annotation value, or null if not found.
	 */
	private static function resolve_annotation_value( array $annotations, string $mcp_field, ?string $ability_property ) {
		// WordPress-format overrides take precedence when present.
		if ( null !== $ability_property && array_key_exists( $ability_property, $annotations ) && ! is_null( $annotations[ $ability_property ] ) ) {
			return $annotations[ $ability_property ];
		}

		if ( array_key_exists( $mcp_field, $annotations ) && ! is_null( $annotations[ $mcp_field ] ) ) {
			return $annotations[ $mcp_field ];
		}

		return null;
	}

	/**
	 * Normalize annotation values to the types expected by MCP.
	 *
	 * @param string $field_type Expected MCP type (boolean, string, array, number).
	 * @param mixed  $value      Raw annotation value.
	 *
	 * @return mixed|null Normalized value or null if invalid.
	 */
	private static function normalize_annotation_value( string $field_type, $value ) {
		switch ( $field_type ) {
			case 'boolean':
				return (bool) $value;

			case 'string':
				if ( ! is_scalar( $value ) ) {
					return null;
				}
				$trimmed = trim( (string) $value );
				return '' === $trimmed ? null : $trimmed;

			case 'array':
				return is_array( $value ) && ! empty( $value ) ? $value : null;

			case 'number':
				return is_numeric( $value ) ? (float) $value : null;

			default:
				return $value;
		}
	}
}
PK     „ŠU]ÆËo&  &  F  vendor/wordpress/mcp-adapter/includes/Domain/Resources/McpResource.phpnu „[µü¤        <?php
/**
 * WordPress MCP Resource class for representing MCP resources according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Resources;

use WP\MCP\Core\McpServer;

/**
 * Represents an MCP resource according to the Model Context Protocol specification.
 *
 * Resources enable models to access external data sources, such as files, databases,
 * or web APIs. Each resource is uniquely identified by a URI and includes metadata
 * describing its content type and structure.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/resources
 */
class McpResource {

	/**
	 * The ability name.
	 *
	 * @var string
	 */
	private string $ability;

	/**
	 * Unique identifier for the resource.
	 *
	 * @var string
	 */
	private string $uri;

	/**
	 * Optional human-readable name of the resource for display purposes.
	 *
	 * @var string|null
	 */
	private ?string $name;

	/**
	 * Optional human-readable description of the resource.
	 *
	 * @var string|null
	 */
	private ?string $description;

	/**
	 * Optional MIME type of the resource content.
	 *
	 * @var string|null
	 */
	private ?string $mime_type;

	/**
	 * Text content of the resource (for TextResourceContents).
	 *
	 * @var string|null
	 */
	private ?string $text;

	/**
	 * Base64-encoded binary content of the resource (for BlobResourceContents).
	 *
	 * @var string|null
	 */
	private ?string $blob;

	/**
	 * Optional properties describing resource metadata.
	 *
	 * @var array
	 */
	private array $annotations;

	/**
	 * The MCP server instance this resource belongs to.
	 *
	 * @var \WP\MCP\Core\McpServer|null
	 */
	private ?McpServer $mcp_server = null;

	/**
	 * Constructor for McpResource.
	 *
	 * @param string      $ability The ability name.
	 * @param string      $uri Unique URI identifier for the resource.
	 * @param string|null $name Optional human-readable name for display.
	 * @param string|null $description Optional human-readable description.
	 * @param string|null $mime_type Optional MIME type of the content.
	 * @param string|null $text Optional text content (mutually exclusive with blob).
	 * @param string|null $blob Optional base64-encoded binary content (mutually exclusive with text).
	 * @param array       $annotations Optional properties describing resource metadata.
	 */
	public function __construct(
		string $ability,
		string $uri,
		?string $name = null,
		?string $description = null,
		?string $mime_type = null,
		?string $text = null,
		?string $blob = null,
		array $annotations = array()
	) {
		$this->ability     = $ability;
		$this->uri         = $uri;
		$this->name        = $name;
		$this->description = $description;
		$this->mime_type   = $mime_type;
		$this->text        = $text;
		$this->blob        = $blob;
		$this->annotations = $annotations;
	}

	/**
	 * Get the resource URI.
	 *
	 * @return string
	 */
	public function get_uri(): string {
		return $this->uri;
	}

	/**
	 * Get the resource name.
	 *
	 * @return string|null
	 */
	public function get_name(): ?string {
		return $this->name;
	}

	/**
	 * Get the resource description.
	 *
	 * @return string|null
	 */
	public function get_description(): ?string {
		return $this->description;
	}

	/**
	 * Get the MIME type.
	 *
	 * @return string|null
	 */
	public function get_mime_type(): ?string {
		return $this->mime_type;
	}

	/**
	 * Get the text content.
	 *
	 * @return string|null
	 */
	public function get_text(): ?string {
		return $this->text;
	}

	/**
	 * Get the blob content.
	 *
	 * @return string|null
	 */
	public function get_blob(): ?string {
		return $this->blob;
	}

	/**
	 * Get the annotations.
	 *
	 * @return array
	 */
	public function get_annotations(): array {
		return $this->annotations;
	}

	/**
	 * Get the ability name.
	 *
	 * @return \WP_Ability|\WP_Error WP_Ability instance on success, WP_Error on failure.
	 */
	public function get_ability() {
		$ability = wp_get_ability( $this->ability );
		if ( ! $ability ) {
			return new \WP_Error(
				'ability_not_found',
				sprintf(
					/* translators: %s: ability name */
					esc_html__( "WordPress ability '%s' does not exist.", 'mcp-adapter' ),
					esc_html( $this->ability )
				)
			);
		}
		return $ability;
	}

	/**
	 * Set the resource name.
	 *
	 * @param string|null $name The name to set.
	 *
	 * @return void
	 */
	public function set_name( ?string $name ): void {
		$this->name = $name;
	}

	/**
	 * Set the resource description.
	 *
	 * @param string|null $description The description to set.
	 *
	 * @return void
	 */
	public function set_description( ?string $description ): void {
		$this->description = $description;
	}

	/**
	 * Set the MIME type.
	 *
	 * @param string|null $mime_type The MIME type to set.
	 *
	 * @return void
	 */
	public function set_mime_type( ?string $mime_type ): void {
		$this->mime_type = $mime_type;
	}

	/**
	 * Set the text content.
	 *
	 * @param string|null $text The text content to set.
	 *
	 * @return void
	 */
	public function set_text( ?string $text ): void {
		$this->text = $text;
		// Clear blob content if setting text.
		if ( is_null( $text ) ) {
			return;
		}

		$this->blob = null;
	}

	/**
	 * Set the blob content.
	 *
	 * @param string|null $blob The base64-encoded blob content to set.
	 *
	 * @return void
	 */
	public function set_blob( ?string $blob ): void {
		$this->blob = $blob;
		// Clear text content if setting blob.
		if ( is_null( $blob ) ) {
			return;
		}

		$this->text = null;
	}

	/**
	 * Set the annotations.
	 *
	 * @param array $annotations The annotations to set.
	 *
	 * @return void
	 */
	public function set_annotations( array $annotations ): void {
		$this->annotations = $annotations;
	}

	/**
	 * Add an annotation.
	 *
	 * @param string $key The annotation key.
	 * @param mixed  $value The annotation value.
	 *
	 * @return void
	 */
	public function add_annotation( string $key, $value ): void {
		$this->annotations[ $key ] = $value;
	}

	/**
	 * Remove an annotation.
	 *
	 * @param string $key The annotation key to remove.
	 *
	 * @return void
	 */
	public function remove_annotation( string $key ): void {
		unset( $this->annotations[ $key ] );
	}

	/**
	 * Get the MCP server instance this resource belongs to.
	 *
	 * @return \WP\MCP\Core\McpServer
	 */
	public function get_mcp_server(): McpServer {
		if ( null === $this->mcp_server ) {
			throw new \RuntimeException( 'MCP server has not been set on this resource instance.' );
		}

		return $this->mcp_server;
	}

	/**
	 * Set the MCP server instance this resource belongs to.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return void
	 */
	public function set_mcp_server( McpServer $mcp_server ): void {
		$this->mcp_server = $mcp_server;
	}

	/**
	 * Convert the resource to an array representation according to MCP specification.
	 *
	 * @return array
	 */
	public function to_array(): array {
		$resource_data = array(
			'uri' => $this->uri,
		);

		// Add optional fields only if they have values.
		if ( ! is_null( $this->name ) ) {
			$resource_data['name'] = $this->name;
		}

		if ( ! is_null( $this->description ) ) {
			$resource_data['description'] = $this->description;
		}

		if ( ! is_null( $this->mime_type ) ) {
			$resource_data['mimeType'] = $this->mime_type;
		}

		if ( ! is_null( $this->text ) ) {
			$resource_data['text'] = $this->text;
		}

		if ( ! is_null( $this->blob ) ) {
			$resource_data['blob'] = $this->blob;
		}

		if ( ! empty( $this->annotations ) ) {
			$resource_data['annotations'] = $this->annotations;
		}

		return $resource_data;
	}

	/**
	 * Convert the resource to JSON representation.
	 *
	 * @return string
	 */
	public function to_json(): string {
		$json = wp_json_encode( $this->to_array() );
		return false !== $json ? $json : '{}';
	}

	/**
	 * Create an McpResource instance from an array.
	 *
	 * @param array     $data Array containing resource data.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return self|\WP_Error Returns a new McpResource instance or WP_Error if validation fails.
	 */
	public static function from_array( array $data, McpServer $mcp_server ) {
		$resource = new self(
			$data['ability'] ?? '',
			$data['uri'] ?? '',
			$data['name'] ?? null,
			$data['description'] ?? null,
			$data['mimeType'] ?? null,
			$data['text'] ?? null,
			$data['blob'] ?? null,
			$data['annotations'] ?? array()
		);

		$resource->mcp_server = $mcp_server;

		return $resource->validate( "McpResource::from_array::{$data['uri']}" );
	}

	/**
	 * Check if this is a text resource.
	 *
	 * @return bool
	 */
	public function is_text_resource(): bool {
		return ! is_null( $this->text ) && is_null( $this->blob );
	}

	/**
	 * Check if this is a blob resource.
	 *
	 * @return bool
	 */
	public function is_blob_resource(): bool {
		return ! is_null( $this->blob ) && is_null( $this->text );
	}

	/**
	 * Validate the resource data.
	 *
	 * @param string $context Optional context for error messages.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource|\WP_Error Resource instance on success, WP_Error on failure.
	 */
	public function validate( string $context = '' ) {
		if ( null === $this->mcp_server ) {
			return new \WP_Error(
				'resource_missing_mcp_server',
				esc_html__( 'MCP server must be set before validating a resource.', 'mcp-adapter' )
			);
		}

		if ( ! $this->mcp_server->is_mcp_validation_enabled() ) {
			return $this;
		}

		$context_to_use    = $context ?: "McpResource::{$this->name}";
		$validation_result = McpResourceValidator::validate_resource_instance( $this, $context_to_use );

		if ( is_wp_error( $validation_result ) ) {
			return $validation_result;
		}

		return $this;
	}
}
PK     „ŠU].Q—Î  Î  O  vendor/wordpress/mcp-adapter/includes/Domain/Resources/McpResourceValidator.phpnu „[µü¤        <?php
/**
 * MCP Resource Validator class for validating MCP resources according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Resources;

use WP\MCP\Domain\Utils\McpValidator;

/**
 * Validates MCP resources against the Model Context Protocol specification.
 *
 * Provides minimal, resource-efficient validation to ensure resources conform
 * to the MCP schema requirements without heavy processing overhead.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/resources
 */
class McpResourceValidator {

	/**
	 * Validate the MCP resource data array against the MCP schema.
	 *
	 * @param array  $resource_data The resource data to validate.
	 * @param string $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_resource_data( array $resource_data, string $context = '' ) {
		$validation_errors = self::get_validation_errors( $resource_data );

		if ( ! empty( $validation_errors ) ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %s: comma-separated list of validation errors */
				__( 'Resource validation failed: %s', 'mcp-adapter' ),
				implode( ', ', $validation_errors )
			);
			return new \WP_Error( 'resource_validation_failed', esc_html( $error_message ) );
		}

		return true;
	}

	/**
	 * Validate an McpResource instance against the MCP schema.
	 *
	 * @param \WP\MCP\Domain\Resources\McpResource $the_resource The resource instance to validate.
	 * @param string      $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_resource_instance( McpResource $the_resource, string $context = '' ) {
		$uniqueness_result = self::validate_resource_uniqueness( $the_resource, $context );
		if ( is_wp_error( $uniqueness_result ) ) {
			return $uniqueness_result;
		}

		return self::validate_resource_data( $the_resource->to_array(), $context );
	}

	/**
	 * Get validation error details for debugging purposes.
	 * This is the core validation method - all other validation methods use this.
	 *
	 * @param array $resource_data The resource data to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function get_validation_errors( array $resource_data ): array {
		$errors = array();

		// Sanitize string inputs.
		if ( isset( $resource_data['uri'] ) && is_string( $resource_data['uri'] ) ) {
			$resource_data['uri'] = trim( $resource_data['uri'] );
		}
		if ( isset( $resource_data['name'] ) && is_string( $resource_data['name'] ) ) {
			$resource_data['name'] = trim( $resource_data['name'] );
		}
		if ( isset( $resource_data['description'] ) && is_string( $resource_data['description'] ) ) {
			$resource_data['description'] = trim( $resource_data['description'] );
		}
		if ( isset( $resource_data['mimeType'] ) && is_string( $resource_data['mimeType'] ) ) {
			$resource_data['mimeType'] = trim( $resource_data['mimeType'] );
		}

		// Validate the required URI field.
		if ( empty( $resource_data['uri'] ) || ! is_string( $resource_data['uri'] ) ) {
			$errors[] = __( 'Resource URI is required and must be a non-empty string', 'mcp-adapter' );
		} elseif ( ! McpValidator::validate_resource_uri( $resource_data['uri'] ) ) {
			$errors[] = __( 'Resource URI must be a valid URI format', 'mcp-adapter' );
		}

		// Validate content - must have either text OR blob (but not both).
		$has_text = ! empty( $resource_data['text'] );
		$has_blob = ! empty( $resource_data['blob'] );

		if ( ! $has_text && ! $has_blob ) {
			$errors[] = __( 'Resource must have either text or blob content', 'mcp-adapter' );
		} elseif ( $has_text && $has_blob ) {
			$errors[] = __( 'Resource cannot have both text and blob content - only one is allowed', 'mcp-adapter' );
		}

		// Validate text content if present.
		if ( $has_text && ! is_string( $resource_data['text'] ) ) {
			$errors[] = __( 'Resource text content must be a string', 'mcp-adapter' );
		}

		// Validate blob content if present.
		if ( $has_blob && ! is_string( $resource_data['blob'] ) ) {
			$errors[] = __( 'Resource blob content must be a string (base64-encoded)', 'mcp-adapter' );
		}

		// Validate optional fields if present.
		if ( isset( $resource_data['name'] ) && ! is_string( $resource_data['name'] ) ) {
			$errors[] = __( 'Resource name must be a string if provided', 'mcp-adapter' );
		}

		if ( isset( $resource_data['description'] ) && ! is_string( $resource_data['description'] ) ) {
			$errors[] = __( 'Resource description must be a string if provided', 'mcp-adapter' );
		}

		if ( isset( $resource_data['mimeType'] ) ) {
			if ( ! is_string( $resource_data['mimeType'] ) ) {
				$errors[] = __( 'Resource mimeType must be a string if provided', 'mcp-adapter' );
			} elseif ( ! McpValidator::validate_mime_type( $resource_data['mimeType'] ) ) {
				$errors[] = __( 'Resource mimeType must be a valid MIME type format', 'mcp-adapter' );
			}
		}

		// Validate annotations structure if present.
		if ( isset( $resource_data['annotations'] ) ) {
			if ( ! is_array( $resource_data['annotations'] ) ) {
				$errors[] = __( 'Resource annotations must be an array if provided', 'mcp-adapter' );
			} else {
				$annotation_errors = McpValidator::get_annotation_validation_errors( $resource_data['annotations'] );
				if ( ! empty( $annotation_errors ) ) {
					$errors = array_merge( $errors, $annotation_errors );
				}
			}
		}

		return $errors;
	}

	/**
	 * Validate that the resource is unique within the MCP server.
	 *
	 * @param \WP\MCP\Domain\Resources\McpResource $the_resource The resource instance to validate.
	 * @param string      $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if unique, WP_Error if the resource URI is not unique.
	 */
	public static function validate_resource_uniqueness( McpResource $the_resource, string $context = '' ) {
		$this_resource_uri = $the_resource->get_uri();
		$existing_resource = $the_resource->get_mcp_server()->get_resource( $this_resource_uri );
		if ( $existing_resource ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %s: resource URI */
				__( 'Resource URI \'%s\' is not unique. It already exists in the MCP server.', 'mcp-adapter' ),
				$this_resource_uri
			);
			return new \WP_Error( 'resource_not_unique', esc_html( $error_message ) );
		}

		return true;
	}
}
PK     „ŠU]D1¿  ¿  W  vendor/wordpress/mcp-adapter/includes/Domain/Resources/RegisterAbilityAsMcpResource.phpnu „[µü¤        <?php
/**
 * RegisterAbilityAsMcpResource class for converting WordPress abilities to MCP resources.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Resources;

use WP\MCP\Core\McpServer;
use WP\MCP\Domain\Utils\McpAnnotationMapper;
use WP_Ability;

/**
 * Converts WordPress abilities to MCP resources according to the specification.
 *
 * This class extracts resource URI and other properties from ability metadata.
 * The ability meta must contain a 'uri' field with the resource URI.
 *
 * Example ability meta structure:
 * array(
 *     'uri' => 'WordPress://mcp-adapter/my-resource',
 *     'mimeType' => 'text/plain',
 *     'annotations' => array(...)
 * )
 */
class RegisterAbilityAsMcpResource {
	/**
	 * The WordPress ability instance.
	 *
	 * @var \WP_Ability
	 */
	private WP_Ability $ability;

	/**
	 * The MCP server.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp_server;

	/**
	 * Make a new instance of the class.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource|\WP_Error Returns resource instance or WP_Error if validation fails.
	 */
	public static function make( WP_Ability $ability, McpServer $mcp_server ) {
		$resource = new self( $ability, $mcp_server );

		return $resource->get_resource();
	}

	/**
	 * Constructor.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 */
	private function __construct( WP_Ability $ability, McpServer $mcp_server ) {
		$this->mcp_server = $mcp_server;
		$this->ability    = $ability;
	}

	/**
	 * Get the resource URI.
	 *
	 * @return string|\WP_Error URI string or WP_Error if not found in ability meta.
	 */
	public function get_uri() {
		$ability_meta = $this->ability->get_meta();

			// First try to get URI from ability meta and normalize whitespace.
		if ( isset( $ability_meta['uri'] ) && is_string( $ability_meta['uri'] ) ) {
			$uri = trim( $ability_meta['uri'] );
			if ( '' !== $uri ) {
				return $uri;
			}
		}

		// If not found in meta, return error since URI should be provided in ability meta
		return new \WP_Error(
			'resource_uri_not_found',
			sprintf(
				"Resource URI not found in ability meta for '%s'. URI must be provided in ability meta data.",
				$this->ability->get_name()
			)
		);
	}

	/**
	 * Get the MCP resource data array.
	 *
	 * @return array<string,mixed>|\WP_Error Resource data array or WP_Error if URI is not found.
	 */
	private function get_data() {
		$uri = $this->get_uri();
		if ( is_wp_error( $uri ) ) {
			return $uri;
		}

		$resource_data = array(
			'ability' => $this->ability->get_name(),
			'uri'     => $uri,
		);

		// Add optional name from ability label
		$label = trim( $this->ability->get_label() );
		if ( ! empty( $label ) ) {
			$resource_data['name'] = $label;
		}

		// Add optional description
		$description = trim( $this->ability->get_description() );
		if ( ! empty( $description ) ) {
			$resource_data['description'] = $description;
		}

		// Get resource content from ability
		$content = $this->get_ability_content();
		if ( isset( $content['text'] ) ) {
			$resource_data['text'] = $content['text'];
		}
		if ( isset( $content['blob'] ) ) {
			$resource_data['blob'] = $content['blob'];
		}
		if ( isset( $content['mimeType'] ) ) {
			$resource_data['mimeType'] = $content['mimeType'];
		}

		// Map annotations from ability meta to MCP format using unified mapper.
		$ability_meta = $this->ability->get_meta();
		if ( ! empty( $ability_meta['annotations'] ) && is_array( $ability_meta['annotations'] ) ) {
			$mcp_annotations = McpAnnotationMapper::map( $ability_meta['annotations'], 'resource' );
			if ( ! empty( $mcp_annotations ) ) {
				$resource_data['annotations'] = $mcp_annotations;
			}
		}

		return $resource_data;
	}

	/**
	 * Get resource content from the ability.
	 * This method should be implemented based on how abilities provide resource content.
	 *
	 * @return array<string,mixed> Array with 'text', 'blob', and/or 'mimeType' keys
	 */
	private function get_ability_content(): array {
		// @todo: Probably this can be improved so it will not be loaded when the resource list is called
		$content = array();

		// Check if ability has resource content methods
		if ( method_exists( $this->ability, 'get_resource_content' ) ) {
			$resource_content = call_user_func( array( $this->ability, 'get_resource_content' ) );
			if ( is_array( $resource_content ) ) {
				return $resource_content;
			}
		}

		// Fallback: try to get content from ability description as text
		$description = $this->ability->get_description();
		if ( ! empty( $description ) ) {
			$content['text']     = $description;
			$content['mimeType'] = 'text/plain';
		}

		return $content;
	}

	/**
	 * Get the MCP resource instance.
	 * Uses the centralized McpResourceValidator for consistent validation.
	 *
	 * @return \WP\MCP\Domain\Resources\McpResource|\WP_Error Returns the MCP resource instance or WP_Error if validation fails.
	 */
	private function get_resource() {
		$data = $this->get_data();
		if ( is_wp_error( $data ) ) {
			return $data;
		}

		return McpResource::from_array( $data, $this->mcp_server );
	}
}
PK     „ŠU]u,qÙ™&  ™&  G  vendor/wordpress/mcp-adapter/includes/Domain/Tools/McpToolValidator.phpnu „[µü¤        <?php
/**
 * MCP Tool Validator class for validating MCP tools according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Tools;

use WP\MCP\Domain\Utils\McpValidator;
use stdClass;

/**
 * Validates MCP tools against the Model Context Protocol specification.
 *
 * Provides minimal, resource-efficient validation to ensure tools conform
 * to the MCP schema requirements without heavy processing overhead.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/tools
 */
class McpToolValidator {

	/**
	 * Validate the MCP tool data array against the MCP schema.
	 *
	 * @param array  $tool_data The tool data to validate.
	 * @param string $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_tool_data( array $tool_data, string $context = '' ) {
		$validation_errors = self::get_validation_errors( $tool_data );

		if ( ! empty( $validation_errors ) ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %s: comma-separated list of validation errors */
				__( 'Tool validation failed: %s', 'mcp-adapter' ),
				implode( ', ', $validation_errors )
			);
			return new \WP_Error( 'tool_validation_failed', esc_html( $error_message ) );
		}

		return true;
	}

	/**
	 * Validate an McpTool instance against the MCP schema.
	 *
	 * @param \WP\MCP\Domain\Tools\McpTool $tool The tool instance to validate.
	 * @param string  $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_tool_instance( McpTool $tool, string $context = '' ) {
		$uniqueness_result = self::validate_tool_uniqueness( $tool, $context );
		if ( is_wp_error( $uniqueness_result ) ) {
			return $uniqueness_result;
		}

		return self::validate_tool_data( $tool->to_array(), $context );
	}

	/**
	 * Get validation error details for debugging purposes.
	 * This is the core validation method - all other validation methods use this.
	 *
	 * @param array $tool_data The tool data to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function get_validation_errors( array $tool_data ): array {
		$errors = array();

		// Sanitize string inputs.
		if ( isset( $tool_data['name'] ) && is_string( $tool_data['name'] ) ) {
			$tool_data['name'] = trim( $tool_data['name'] );
		}
		if ( isset( $tool_data['description'] ) && is_string( $tool_data['description'] ) ) {
			$tool_data['description'] = trim( $tool_data['description'] );
		}
		if ( isset( $tool_data['title'] ) && is_string( $tool_data['title'] ) ) {
			$tool_data['title'] = trim( $tool_data['title'] );
		}

		// Check the required fields.
		if ( empty( $tool_data['name'] ) || ! is_string( $tool_data['name'] ) || ! McpValidator::validate_tool_or_prompt_name( $tool_data['name'] ) ) {
			$errors[] = __( 'Tool name is required and must only contain letters, numbers, hyphens (-), and underscores (_), and be 255 characters or less', 'mcp-adapter' );
		}

		if ( empty( $tool_data['description'] ) || ! is_string( $tool_data['description'] ) ) {
			$errors[] = __( 'Tool description is required and must be a non-empty string', 'mcp-adapter' );
		}

		// Validate inputSchema (required field).
		$input_schema_errors = self::get_schema_validation_errors( $tool_data['inputSchema'] ?? null, 'inputSchema' );
		if ( ! empty( $input_schema_errors ) ) {
			$errors = array_merge( $errors, $input_schema_errors );
		}

		// Check optional fields if present.
		if ( isset( $tool_data['title'] ) && ! is_string( $tool_data['title'] ) ) {
			$errors[] = __( 'Tool title must be a string if provided', 'mcp-adapter' );
		}

		// Validate outputSchema (optional field).
		if ( isset( $tool_data['outputSchema'] ) ) {
			$output_schema_errors = self::get_schema_validation_errors( $tool_data['outputSchema'], 'outputSchema' );
			if ( ! empty( $output_schema_errors ) ) {
				$errors = array_merge( $errors, $output_schema_errors );
			}
		}

		// Validate annotations structure if present.
		if ( isset( $tool_data['annotations'] ) ) {
			if ( ! is_array( $tool_data['annotations'] ) ) {
				$errors[] = __( 'Tool annotations must be an array if provided', 'mcp-adapter' );
			} else {
				// Validate shared annotations (audience, lastModified, priority).
				$shared_annotation_errors = McpValidator::get_annotation_validation_errors( $tool_data['annotations'] );
				if ( ! empty( $shared_annotation_errors ) ) {
					$errors = array_merge( $errors, $shared_annotation_errors );
				}

				// Validate tool-specific annotations (readOnlyHint, destructiveHint, etc.).
				$tool_annotation_errors = McpValidator::get_tool_annotation_validation_errors( $tool_data['annotations'] );
				if ( ! empty( $tool_annotation_errors ) ) {
					$errors = array_merge( $errors, $tool_annotation_errors );
				}
			}
		}

		return $errors;
	}

	/**
	 * Get detailed validation errors for a schema object.
	 *
	 * @param array|mixed $schema The schema to validate.
	 * @param string      $field_name The name of the field being validated (for error messages).
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	private static function get_schema_validation_errors( $schema, string $field_name ): array {
		// Normalize stdClass to array for validation, and reject scalars/null.
		if ( $schema instanceof stdClass ) {
			$schema = (array) $schema;
		}

		// Schema must be an array/object - early return for performance.
		if ( ! is_array( $schema ) ) {
			return array(
				sprintf(
				/* translators: %s: field name (inputSchema or outputSchema) */
					__( 'Tool %s must be a valid JSON schema object', 'mcp-adapter' ),
					$field_name
				),
			);
		}

		$errors = array();

		// Input schemas commonly describe an object of arguments. Allow omitted type (empty schema) or type 'object'.
		// For output schemas, do not enforce a specific type; any valid JSON Schema is acceptable per MCP.
		if ( 'inputSchema' === $field_name && isset( $schema['type'] ) && 'object' !== $schema['type'] ) {
			$errors[] = sprintf(
			/* translators: %s: field name */
				__( 'Tool %s, if specifying a type, must use type \'object\'', 'mcp-adapter' ),
				$field_name
			);
		}

		// If properties exist, they must be an array/object.
		if ( isset( $schema['properties'] ) && ! is_array( $schema['properties'] ) ) {
			$errors[] = sprintf(
			/* translators: %s: field name */
				__( 'Tool %s properties must be an object/array', 'mcp-adapter' ),
				$field_name
			);
		}

		// If required exists, it must be an array.
		if ( isset( $schema['required'] ) && ! is_array( $schema['required'] ) ) {
			$errors[] = sprintf(
			/* translators: %s: field name */
				__( 'Tool %s required field must be an array', 'mcp-adapter' ),
				$field_name
			);
		}

		// If properties are provided, validate their basic structure.
		if ( isset( $schema['properties'] ) && is_array( $schema['properties'] ) ) {
			foreach ( $schema['properties'] as $property_name => $property ) {
				if ( ! is_array( $property ) ) {
					$errors[] = sprintf(
					/* translators: %1$s: field name, %2$s: property name */
						__( 'Tool %1$s property \'%2$s\' must be an object', 'mcp-adapter' ),
						$field_name,
						$property_name
					);
					continue;
				}

				// Each property should have a type (though not strictly required by JSON Schema).
				if ( ! isset( $property['type'] ) || is_string( $property['type'] ) || is_array( $property['type'] ) ) {
					continue;
				}

				// If type is neither string nor array, it's invalid.
				$errors[] = sprintf(
				/* translators: %1$s: field name, %2$s: property name */
					__( 'Tool %1$s property \'%2$s\' type must be a string or array of strings (union type)', 'mcp-adapter' ),
					$field_name,
					$property_name
				);
			}
		}

		// If required array is provided, validate its structure.
		if ( isset( $schema['required'] ) && is_array( $schema['required'] ) ) {
			foreach ( $schema['required'] as $required_field ) {
				if ( ! is_string( $required_field ) ) {
					$errors[] = sprintf(
					/* translators: %s: field name */
						__( 'Tool %s required field names must be strings', 'mcp-adapter' ),
						$field_name
					);
					continue;
				}

				// Check that required fields exist in properties (if properties are defined).
				if ( ! isset( $schema['properties'] ) || isset( $schema['properties'][ $required_field ] ) ) {
					continue;
				}

				$errors[] = sprintf(
				/* translators: %1$s: field name, %2$s: required field */
					__( 'Tool %1$s required field \'%2$s\' does not exist in properties', 'mcp-adapter' ),
					$field_name,
					$required_field
				);
			}
		}

		return $errors;
	}

	/**
	 * Validate that the tool name is unique within the server.
	 *
	 * @param \WP\MCP\Domain\Tools\McpTool $tool The tool instance to validate.
	 * @param string  $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if unique, WP_Error if the tool name is not unique.
	 */
	public static function validate_tool_uniqueness( McpTool $tool, string $context = '' ) {
		$this_tool_name = $tool->get_name();
		$server         = $tool->get_mcp_server();
		$existing_tool  = $server->get_tool( $this_tool_name );

		// Check if a tool with this name already exists.
		if ( $existing_tool ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %1$s: tool name, %2$s: server ID */
				__( 'Tool name \'%1$s\' is not unique. A tool with this name already exists on server \'%2$s\'.', 'mcp-adapter' ),
				$this_tool_name,
				$server->get_server_id()
			);
			return new \WP_Error( 'tool_not_unique', esc_html( $error_message ) );
		}

		return true;
	}
}
PK     „ŠU]�’]é(#  (#  >  vendor/wordpress/mcp-adapter/includes/Domain/Tools/McpTool.phpnu „[µü¤        <?php
/**
 * WordPress MCP Tool class for representing MCP tools according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Tools;

use WP\MCP\Core\McpServer;

/**
 * Represents an MCP tool according to the Model Context Protocol specification.
 *
 * Tools enable models to interact with external systems, such as querying databases,
 * calling APIs, or performing computations. Each tool is uniquely identified by a name
 * and includes metadata describing its schema.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/tools
 */
class McpTool {

	/**
	 * Ability name for the tool, used for registration.
	 *
	 * @var string
	 */
	private string $ability;

	/**
	 * Unique identifier for the tool.
	 *
	 * @var string
	 */
	private string $name;

	/**
	 * Optional human-readable name of the tool for display purposes.
	 *
	 * @var string|null
	 */
	private ?string $title;

	/**
	 * Human-readable description of functionality.
	 *
	 * @var string
	 */
	private string $description;

	/**
	 * JSON Schema defining expected parameters.
	 *
	 * @var array
	 */
	private array $input_schema;

	/**
	 * Optional JSON Schema defining expected output structure.
	 *
	 * @var array|null
	 */
	private ?array $output_schema;

	/**
	 * Optional properties describing tool behavior.
	 *
	 * @var array
	 */
	private array $annotations;

	/**
	 * Internal metadata used by the server (not exposed to MCP clients).
	 *
	 * @var array
	 */
	private array $metadata;

	/**
	 * The MCP server instance this tool belongs to.
	 *
	 * @var \WP\MCP\Core\McpServer|null
	 */
	private ?McpServer $mcp_server = null;

	/**
	 * Constructor for McpTool.
	 *
	 * @param string      $ability The ability name.
	 * @param string      $name Unique identifier for the tool.
	 * @param string      $description Human-readable description of functionality.
	 * @param array       $input_schema JSON Schema defining expected parameters.
	 * @param string|null $title Optional human-readable name for display.
	 * @param array|null  $output_schema Optional JSON Schema for output structure.
	 * @param array       $annotations Optional properties describing tool behavior.
	 * @param array       $metadata Internal metadata used by the server (not returned to clients).
	 */
	public function __construct(
		string $ability,
		string $name,
		string $description,
		array $input_schema,
		?string $title = null,
		?array $output_schema = null,
		array $annotations = array(),
		array $metadata = array()
	) {
		$this->ability       = $ability;
		$this->name          = $name;
		$this->title         = $title;
		$this->description   = $description;
		$this->input_schema  = $input_schema;
		$this->output_schema = $output_schema;
		$this->annotations   = $annotations;
		$this->metadata      = $metadata;
	}

	/**
	 * Get the ability name.
	 *
	 * @return \WP_Ability|\WP_Error WP_Ability instance on success, WP_Error on failure.
	 */
	public function get_ability() {
		$ability = wp_get_ability( $this->ability );
		if ( ! $ability ) {
			return new \WP_Error(
				'ability_not_found',
				sprintf(
					/* translators: %s: ability name */
					esc_html__( "WordPress ability '%s' does not exist.", 'mcp-adapter' ),
					esc_html( $this->ability )
				)
			);
		}
		return $ability;
	}

	/**
	 * Get the tool name.
	 *
	 * @return string
	 */
	public function get_name(): string {
		return $this->name;
	}

	/**
	 * Get the tool title.
	 *
	 * @return string|null
	 */
	public function get_title(): ?string {
		return $this->title;
	}

	/**
	 * Get the tool description.
	 *
	 * @return string
	 */
	public function get_description(): string {
		return $this->description;
	}

	/**
	 * Get the input schema.
	 *
	 * @return array
	 */
	public function get_input_schema(): array {
		return $this->input_schema;
	}

	/**
	 * Get the output schema.
	 *
	 * @return array|null
	 */
	public function get_output_schema(): ?array {
		return $this->output_schema;
	}

	/**
	 * Get the annotations.
	 *
	 * @return array
	 */
	public function get_annotations(): array {
		return $this->annotations;
	}

	/**
	 * Get internal metadata for server-side processing.
	 *
	 * @return array
	 */
	public function get_metadata(): array {
		return $this->metadata;
	}

	/**
	 * Set the tool title.
	 *
	 * @param string|null $title The title to set.
	 *
	 * @return void
	 */
	public function set_title( ?string $title ): void {
		$this->title = $title;
	}

	/**
	 * Set the tool description.
	 *
	 * @param string $description The description to set.
	 *
	 * @return void
	 */
	public function set_description( string $description ): void {
		$this->description = $description;
	}

	/**
	 * Set the input schema.
	 *
	 * @param array $input_schema The input schema to set.
	 *
	 * @return void
	 */
	public function set_input_schema( array $input_schema ): void {
		$this->input_schema = $input_schema;
	}

	/**
	 * Set the output schema.
	 *
	 * @param array|null $output_schema The output schema to set.
	 *
	 * @return void
	 */
	public function set_output_schema( ?array $output_schema ): void {
		$this->output_schema = $output_schema;
	}

	/**
	 * Set the annotations.
	 *
	 * @param array $annotations The annotations to set.
	 *
	 * @return void
	 */
	public function set_annotations( array $annotations ): void {
		$this->annotations = $annotations;
	}

	/**
	 * Set internal metadata.
	 *
	 * @param array $metadata Internal metadata values.
	 *
	 * @return void
	 */
	public function set_metadata( array $metadata ): void {
		$this->metadata = $metadata;
	}

	/**
	 * Add an annotation.
	 *
	 * @param string $key The annotation key.
	 * @param mixed  $value The annotation value.
	 *
	 * @return void
	 */
	public function add_annotation( string $key, $value ): void {
		$this->annotations[ $key ] = $value;
	}

	/**
	 * Remove an annotation.
	 *
	 * @param string $key The annotation key to remove.
	 *
	 * @return void
	 */
	public function remove_annotation( string $key ): void {
		unset( $this->annotations[ $key ] );
	}

	/**
	 * Get the MCP server instance this tool belongs to.
	 *
	 * @return \WP\MCP\Core\McpServer
	 */
	public function get_mcp_server(): McpServer {
		if ( null === $this->mcp_server ) {
			throw new \RuntimeException( 'MCP server has not been set on this tool instance.' );
		}

		return $this->mcp_server;
	}

	/**
	 * Set the MCP server instance this tool belongs to.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return void
	 */
	public function set_mcp_server( McpServer $mcp_server ): void {
		$this->mcp_server = $mcp_server;
	}

	/**
	 * Convert the tool to an array representation according to MCP specification.
	 *
	 * @return array
	 */
	public function to_array(): array {
		$input_schema_for_json = empty( $this->input_schema )
			? array( 'type' => 'object' )
			: $this->input_schema;

		$tool_data = array(
			'name'        => $this->name,
			'description' => $this->description,
			'inputSchema' => $input_schema_for_json,
		);

		if ( ! is_null( $this->title ) ) {
			$tool_data['title'] = $this->title;
		}

		if ( ! is_null( $this->output_schema ) ) {
			$tool_data['outputSchema'] = $this->output_schema;
		}

		if ( ! empty( $this->annotations ) ) {
			$tool_data['annotations'] = $this->annotations;
		}

		return $tool_data;
	}

	/**
	 * Create an McpTool instance from an array.
	 *
	 * @param array     $data Array containing tool data.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return self|\WP_Error Returns a new McpTool instance or WP_Error if validation fails.
	 */
	public static function from_array( array $data, McpServer $mcp_server ) {
		$tool = new self(
			$data['ability'] ?? '',
			$data['name'] ?? '',
			$data['description'] ?? '',
			$data['inputSchema'] ?? array(),
			$data['title'] ?? null,
			$data['outputSchema'] ?? null,
			$data['annotations'] ?? array(),
			$data['_metadata'] ?? array()
		);
		$tool->set_mcp_server( $mcp_server );

		return $tool->validate( "McpTool::from_array::{$data['name']}" );
	}

	/**
	 * Validate the tool according to MCP specification requirements.
	 * Uses the centralized McpToolValidator for consistent validation.
	 *
	 * @param string $context Optional context for error messages.
	 *
	 * @return self|\WP_Error Returns the validated tool instance or WP_Error if validation fails.
	 */
	public function validate( string $context = '' ) {
		if ( null === $this->mcp_server ) {
			return new \WP_Error(
				'tool_missing_mcp_server',
				esc_html__( 'MCP server must be set before validating a tool.', 'mcp-adapter' )
			);
		}

		if ( ! $this->mcp_server->is_mcp_validation_enabled() ) {
			return $this;
		}

		$context_to_use    = $context ?: "McpTool::{$this->name}";
		$validation_result = McpToolValidator::validate_tool_instance( $this, $context_to_use );

		if ( is_wp_error( $validation_result ) ) {
			return $validation_result;
		}

		return $this;
	}
}
PK     „ŠU]ìQD…  …  O  vendor/wordpress/mcp-adapter/includes/Domain/Tools/RegisterAbilityAsMcpTool.phpnu „[µü¤        <?php
/**
 * RegisterAbilityAsMcpTool class for converting WordPress abilities to MCP tools.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Tools;

use WP\MCP\Core\McpServer;
use WP\MCP\Domain\Utils\McpAnnotationMapper;
use WP\MCP\Domain\Utils\SchemaTransformer;
use WP_Ability;

/**
 * RegisterAbilityAsMcpTool class.
 *
 * This class registers a WordPress ability as an MCP tool.
 *
 * @package McpAdapter
 */
class RegisterAbilityAsMcpTool {
	/**
	 * The WordPress ability instance.
	 *
	 * @var \WP_Ability
	 */
	private WP_Ability $ability;

	/**
	 * The MCP server.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp_server;

	/**
	 * Make a new instance of the class.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 *
	 * @return \WP\MCP\Domain\Tools\McpTool|\WP_Error Returns a new instance of McpTool or WP_Error if validation fails.
	 */
	public static function make( WP_Ability $ability, McpServer $mcp_server ) {
		$tool = new self( $ability, $mcp_server );

		return $tool->get_tool();
	}

	/**
	 * Constructor.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 */
	private function __construct( WP_Ability $ability, McpServer $mcp_server ) {
		$this->mcp_server = $mcp_server;
		$this->ability    = $ability;
	}

	/**
	 * Get the MCP tool data array.
	 *
	 * @return array<string,mixed>
	 */
	private function get_data(): array {
		// Transform input schema to MCP-compatible object format
		$input_transform = SchemaTransformer::transform_to_object_schema(
			$this->ability->get_input_schema()
		);

		$tool_data = array(
			'ability'     => $this->ability->get_name(),
			'name'        => str_replace( '/', '-', trim( $this->ability->get_name() ) ),
			'description' => trim( $this->ability->get_description() ),
			'inputSchema' => $input_transform['schema'],
		);

		// Add optional title from ability label.
		$label = $this->ability->get_label();
		$label = trim( $label );
		if ( ! empty( $label ) ) {
			$tool_data['title'] = $label;
		}

		// Add optional output schema, transformed to object format if needed.
		$output_schema    = $this->ability->get_output_schema();
		$output_transform = null;
		if ( ! empty( $output_schema ) ) {
			$output_transform          = SchemaTransformer::transform_to_object_schema(
				$output_schema,
				'result'
			);
			$tool_data['outputSchema'] = $output_transform['schema'];
		}

		// Map annotations from ability meta to MCP format using unified mapper.
		$ability_meta = $this->ability->get_meta();
		if ( ! empty( $ability_meta['annotations'] ) && is_array( $ability_meta['annotations'] ) ) {
			$mcp_annotations = McpAnnotationMapper::map( $ability_meta['annotations'], 'tool' );
			if ( ! empty( $mcp_annotations ) ) {
				$tool_data['annotations'] = $mcp_annotations;
			}
		}

		// Set annotations.title from label if annotations exist but don't have a title.
		if ( ! empty( $label ) && isset( $tool_data['annotations'] ) && ! isset( $tool_data['annotations']['title'] ) ) {
			$tool_data['annotations']['title'] = $label;
		}

		// Store transformation metadata as internal metadata (stripped before responding to clients).
		if ( $input_transform['was_transformed'] || ( $output_transform && $output_transform['was_transformed'] ) ) {
			$tool_data['_metadata'] = array();

			if ( $input_transform['was_transformed'] ) {
				$tool_data['_metadata']['_input_schema_transformed'] = true;
				$tool_data['_metadata']['_input_schema_wrapper']     = $input_transform['wrapper_property'] ?? 'input';
			}

			if ( $output_transform && $output_transform['was_transformed'] ) {
				$tool_data['_metadata']['_output_schema_transformed'] = true;
				$tool_data['_metadata']['_output_schema_wrapper']     = $output_transform['wrapper_property'] ?? 'result';
			}
		}

		return $tool_data;
	}

	/**
	 * Get the MCP tool instance.
	 *
	 * @return \WP\MCP\Domain\Tools\McpTool|\WP_Error The validated MCP tool instance or WP_Error if validation fails.
	 */
	private function get_tool() {
		return McpTool::from_array( $this->get_data(), $this->mcp_server );
	}
}
PK     …ŠU]}­_	j)  j)  B  vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPrompt.phpnu „[µü¤        <?php
/**
 * WordPress MCP Prompt class for representing MCP prompts according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Prompts;

use WP\MCP\Core\McpServer;

/**
 * Represents an MCP prompt according to the Model Context Protocol specification.
 *
 * Prompts provide structured messages and instructions for interacting with language models.
 * Each prompt is uniquely identified by a name and can include arguments for customization.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/prompts
 */
class McpPrompt {

	/**
	 * The ability name.
	 *
	 * @var string
	 */
	private string $ability;

	/**
	 * Unique identifier for the prompt.
	 *
	 * @var string
	 */
	private string $name;

	/**
	 * Optional human-readable name of the prompt for display purposes.
	 *
	 * @var string|null
	 */
	private ?string $title;

	/**
	 * Optional human-readable description of the prompt.
	 *
	 * @var string|null
	 */
	private ?string $description;

	/**
	 * Optional list of arguments for prompt customization.
	 *
	 * @var array
	 */
	private array $arguments;

	/**
	 * Optional properties describing prompt metadata.
	 *
	 * @var array
	 */
	private array $annotations;

	/**
	 * The MCP server instance this prompt belongs to.
	 *
	 * @var \WP\MCP\Core\McpServer|null
	 */
	private ?McpServer $mcp_server = null;

	/**
	 * Constructor for McpPrompt.
	 *
	 * @param string      $ability The ability name.
	 * @param string      $name Unique identifier for the prompt.
	 * @param string|null $title Optional human-readable name for display.
	 * @param string|null $description Optional human-readable description.
	 * @param array       $arguments Optional list of arguments for customization.
	 * @param array       $annotations Optional properties describing prompt metadata.
	 */
	public function __construct(
		string $ability,
		string $name,
		?string $title = null,
		?string $description = null,
		array $arguments = array(),
		array $annotations = array()
	) {
		$this->ability     = $ability;
		$this->name        = $name;
		$this->title       = $title;
		$this->description = $description;
		$this->arguments   = $arguments;
		$this->annotations = $annotations;
	}

	/**
	 * Get the prompt name.
	 *
	 * @return string
	 */
	public function get_name(): string {
		return $this->name;
	}

	/**
	 * Get the prompt title.
	 *
	 * @return string|null
	 */
	public function get_title(): ?string {
		return $this->title;
	}

	/**
	 * Get the prompt description.
	 *
	 * @return string|null
	 */
	public function get_description(): ?string {
		return $this->description;
	}

	/**
	 * Get the prompt arguments.
	 *
	 * @return array
	 */
	public function get_arguments(): array {
		return $this->arguments;
	}

	/**
	 * Get the annotations.
	 *
	 * @return array
	 */
	public function get_annotations(): array {
		return $this->annotations;
	}

	/**
	 * Get the ability name.
	 *
	 * @return \WP_Ability|\WP_Error WP_Ability instance on success, WP_Error on failure.
	 */
	public function get_ability() {
		$ability = wp_get_ability( $this->ability );
		if ( ! $ability ) {
			return new \WP_Error(
				'ability_not_found',
				sprintf(
					/* translators: %s: ability name */
					esc_html__( "WordPress ability '%s' does not exist.", 'mcp-adapter' ),
					esc_html( $this->ability )
				)
			);
		}
		return $ability;
	}

	/**
	 * Set the prompt title.
	 *
	 * @param string|null $title The title to set.
	 *
	 * @return void
	 */
	public function set_title( ?string $title ): void {
		$this->title = $title;
	}

	/**
	 * Set the prompt description.
	 *
	 * @param string|null $description The description to set.
	 *
	 * @return void
	 */
	public function set_description( ?string $description ): void {
		$this->description = $description;
	}

	/**
	 * Set the prompt arguments.
	 *
	 * @param array $arguments The arguments to set.
	 *
	 * @return void
	 */
	public function set_arguments( array $arguments ): void {
		$this->arguments = $arguments;
	}

	/**
	 * Set the annotations.
	 *
	 * @param array $annotations The annotations to set.
	 *
	 * @return void
	 */
	public function set_annotations( array $annotations ): void {
		$this->annotations = $annotations;
	}

	/**
	 * Add an argument to the prompt.
	 *
	 * @param array $argument The argument to add.
	 *
	 * @return void
	 */
	public function add_argument( array $argument ): void {
		$this->arguments[] = $argument;
	}

	/**
	 * Remove an argument by name.
	 *
	 * @param string $name The argument name to remove.
	 *
	 * @return void
	 */
	public function remove_argument( string $name ): void {
		$this->arguments = array_filter(
			$this->arguments,
			static function ( $argument ) use ( $name ) {
				return ( $argument['name'] ?? '' ) !== $name;
			}
		);
		// Re-index array.
		$this->arguments = array_values( $this->arguments );
	}

	/**
	 * Get an argument by name.
	 *
	 * @param string $name The argument name.
	 *
	 * @return array|null The argument if found, null otherwise.
	 */
	public function get_argument( string $name ): ?array {
		foreach ( $this->arguments as $argument ) {
			if ( ( $argument['name'] ?? '' ) === $name ) {
				return $argument;
			}
		}

		return null;
	}

	/**
	 * Check if an argument exists.
	 *
	 * @param string $name The argument name.
	 *
	 * @return bool True if argument exists, false otherwise.
	 */
	public function has_argument( string $name ): bool {
		return $this->get_argument( $name ) !== null;
	}

	/**
	 * Add an annotation.
	 *
	 * @param string $key The annotation key.
	 * @param mixed  $value The annotation value.
	 *
	 * @return void
	 */
	public function add_annotation( string $key, $value ): void {
		$this->annotations[ $key ] = $value;
	}

	/**
	 * Remove an annotation.
	 *
	 * @param string $key The annotation key to remove.
	 *
	 * @return void
	 */
	public function remove_annotation( string $key ): void {
		unset( $this->annotations[ $key ] );
	}

	/**
	 * Convert the prompt to an array representation according to MCP specification.
	 *
	 * @return array
	 */
	public function to_array(): array {
		$prompt_data = array(
			'name' => $this->name,
		);

		// Add optional fields only if they have values.
		if ( ! is_null( $this->title ) ) {
			$prompt_data['title'] = $this->title;
		}

		if ( ! is_null( $this->description ) ) {
			$prompt_data['description'] = $this->description;
		}

		if ( ! empty( $this->arguments ) ) {
			$prompt_data['arguments'] = $this->arguments;
		}

		if ( ! empty( $this->annotations ) ) {
			$prompt_data['annotations'] = $this->annotations;
		}

		return $prompt_data;
	}

	/**
	 * Convert the prompt to JSON representation.
	 *
	 * @return string
	 */
	public function to_json(): string {
		$json = wp_json_encode( $this->to_array() );
		return false !== $json ? $json : '{}';
	}

	/**
	 * Create an McpPrompt instance from an array.
	 *
	 * @param array     $data Array containing prompt data.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return self|\WP_Error Returns a new McpPrompt instance or WP_Error if validation fails.
	 */
	public static function from_array( array $data, McpServer $mcp_server ) {
		$prompt = new self(
			$data['ability'] ?? '',
			$data['name'] ?? '',
			$data['title'] ?? null,
			$data['description'] ?? null,
			$data['arguments'] ?? array(),
			$data['annotations'] ?? array()
		);

		$prompt->set_mcp_server( $mcp_server );

		return $prompt->validate( "McpPrompt::from_array::{$data['name']}" );
	}

	/**
	 * Validate the prompt instance.
	 *
	 * @param string $context Optional context for error messages.
	 *
	 * @return self|\WP_Error Returns the validated prompt instance or WP_Error if validation fails.
	 */
	public function validate( string $context = '' ) {
		if ( null === $this->mcp_server ) {
			return new \WP_Error(
				'prompt_missing_mcp_server',
				esc_html__( 'MCP server must be set before validating a prompt.', 'mcp-adapter' )
			);
		}

		if ( ! $this->mcp_server->is_mcp_validation_enabled() ) {
			return $this;
		}

		$context_to_use    = $context ?: "McpPrompt::{$this->name}";
		$validation_result = McpPromptValidator::validate_prompt_instance( $this, $context_to_use );

		if ( is_wp_error( $validation_result ) ) {
			return $validation_result;
		}

		return $this;
	}

	/**
	 * Create a standard argument definition.
	 *
	 * @param string      $name The argument name.
	 * @param string|null $description Optional argument description.
	 * @param bool        $required Whether the argument is required.
	 *
	 * @return array The argument definition.
	 */
	public static function create_argument( string $name, ?string $description = null, bool $required = false ): array {
		$argument = array(
			'name' => $name,
		);

		if ( ! is_null( $description ) ) {
			$argument['description'] = $description;
		}

		if ( $required ) {
			$argument['required'] = true;
		}

		return $argument;
	}

	/**
	 * Get the MCP server instance this tool belongs to.
	 *
	 * @return \WP\MCP\Core\McpServer
	 */
	public function get_mcp_server(): McpServer {
		if ( null === $this->mcp_server ) {
			throw new \RuntimeException( 'MCP server has not been set on this prompt instance.' );
		}

		return $this->mcp_server;
	}

	/**
	 * Set the MCP server instance this tool belongs to.
	 *
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server instance.
	 *
	 * @return void
	 */
	public function set_mcp_server( McpServer $mcp_server ): void {
		$this->mcp_server = $mcp_server;
	}

	/**
	 * Check if this prompt is builder-based (has direct execution capability).
	 *
	 * @return bool True if this prompt can execute directly, false if it needs abilities.
	 */
	public function is_builder_based(): bool {
		return false; // Default: requires abilities
	}

	/**
	 * Execute the prompt directly (for builder-based prompts).
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return array The prompt response.
	 * @throws \Exception If this prompt is not builder-based.
	 */
	public function execute_direct( array $arguments ): array {
		throw new \Exception( 'This prompt does not support direct execution' );
	}

	/**
	 * Check permission directly (for builder-based prompts).
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return bool True if execution is allowed.
	 * @throws \Exception If this prompt is not builder-based.
	 */
	public function check_permission_direct( array $arguments ): bool {
		throw new \Exception( 'This prompt does not support direct permission checking' );
	}
}
PK     …ŠU]^«lL°  °  S  vendor/wordpress/mcp-adapter/includes/Domain/Prompts/RegisterAbilityAsMcpPrompt.phpnu „[µü¤        <?php
/**
 * RegisterAbilityAsMcpPrompt class for converting WordPress abilities to MCP prompts.
 *
 * @package McpAdapter
 */

namespace WP\MCP\Domain\Prompts;

use WP\MCP\Core\McpServer;
use WP\MCP\Domain\Utils\McpAnnotationMapper;
use WP_Ability;

/**
 * Converts WordPress abilities to MCP prompts according to the specification.
 *
 * This class extracts prompt data from ability properties and converts the JSON Schema
 * input_schema to MCP prompt arguments format.
 *
 * The ability must have an input_schema defined using JSON Schema format, which will
 * be automatically converted to MCP prompt arguments.
 *
 * Example ability registration:
 * wp_register_ability(
 *     'prompts/code-review',
 *     array(
 *         'label' => 'Code Review Prompt',
 *         'description' => 'Generate code review prompt',
 *         'input_schema' => array(
 *             'type' => 'object',
 *             'properties' => array(
 *                 'code' => array('type' => 'string', 'description' => 'Code to review'),
 *             ),
 *             'required' => array('code'),
 *         ),
 *         'meta' => array(
 *             'mcp' => array('public' => true, 'type' => 'prompt'),
 *             'annotations' => array(...)
 *         )
 *     )
 * );
 */
class RegisterAbilityAsMcpPrompt {
	/**
	 * The WordPress ability instance.
	 *
	 * @var \WP_Ability
	 */
	private WP_Ability $ability;

	/**
	 * The MCP server.
	 *
	 * @var \WP\MCP\Core\McpServer
	 */
	private McpServer $mcp_server;

	/**
	 * Make a new instance of the class.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt|\WP_Error Returns prompt instance or WP_Error if validation fails.
	 */
	public static function make( WP_Ability $ability, McpServer $mcp_server ) {
		$prompt = new self( $ability, $mcp_server );

		return $prompt->get_prompt();
	}

	/**
	 * Constructor.
	 *
	 * @param \WP_Ability            $ability    The ability.
	 * @param \WP\MCP\Core\McpServer $mcp_server The MCP server.
	 */
	private function __construct( WP_Ability $ability, McpServer $mcp_server ) {
		$this->mcp_server = $mcp_server;
		$this->ability    = $ability;
	}

	/**
	 * Get the MCP prompt data array.
	 *
	 * @return array<string,mixed>
	 */
	private function get_data(): array {
		$ability_name = trim( $this->ability->get_name() );
		$prompt_data  = array(
			'ability' => $ability_name,
			'name'    => str_replace( '/', '-', $ability_name ),
		);

		// Add optional title from ability label
		$label = trim( $this->ability->get_label() );
		if ( ! empty( $label ) ) {
			$prompt_data['title'] = $label;
		}

		// Add optional description
		$description = trim( $this->ability->get_description() );
		if ( ! empty( $description ) ) {
			$prompt_data['description'] = $description;
		}

		$input_schema = $this->ability->get_input_schema();
		if ( ! empty( $input_schema ) ) {
			$arguments = $this->convert_input_schema_to_arguments( $input_schema );
			if ( ! empty( $arguments ) ) {
				$prompt_data['arguments'] = $arguments;
			}
		}

		// Map annotations from ability meta to MCP format using unified mapper.
		$ability_meta = $this->ability->get_meta();
		if ( ! empty( $ability_meta['annotations'] ) && is_array( $ability_meta['annotations'] ) ) {
			$mcp_annotations = McpAnnotationMapper::map( $ability_meta['annotations'], 'prompt' );
			if ( ! empty( $mcp_annotations ) ) {
				$prompt_data['annotations'] = $mcp_annotations;
			}
		}

		return $prompt_data;
	}

	/**
	 * Convert JSON Schema input_schema to MCP prompt arguments format.
	 *
	 * Converts from WordPress Abilities JSON Schema format:
	 * {
	 *   "type": "object",
	 *   "properties": {
	 *     "topic": {"type": "string", "description": "..."},
	 *     "tone": {"type": "string", "description": "..."}
	 *   },
	 *   "required": ["topic"]
	 * }
	 *
	 * To MCP prompt arguments format:
	 * [
	 *   {"name": "topic", "description": "...", "required": true},
	 *   {"name": "tone", "description": "...", "required": false}
	 * ]
	 *
	 * @param array<string,mixed> $input_schema The JSON Schema from ability.
	 * @return array<int,array<string,mixed>> MCP-formatted arguments array.
	 */
	private function convert_input_schema_to_arguments( array $input_schema ): array {
		$arguments = array();

		// Ensure we have properties to convert
		if ( empty( $input_schema['properties'] ) || ! is_array( $input_schema['properties'] ) ) {
			return $arguments;
		}

		// Get the list of required properties
		$required_fields = array();
		if ( isset( $input_schema['required'] ) && is_array( $input_schema['required'] ) ) {
			$required_fields = $input_schema['required'];
		}

		// Convert each property to an MCP argument
		foreach ( $input_schema['properties'] as $property_name => $property_schema ) {
			if ( ! is_array( $property_schema ) ) {
				continue;
			}

			$argument = array(
				'name'     => $property_name,
				'required' => in_array( $property_name, $required_fields, true ),
			);

			// Add description if available
			if ( ! empty( $property_schema['description'] ) ) {
				$argument['description'] = $property_schema['description'];
			}

			$arguments[] = $argument;
		}

		return $arguments;
	}

	/**
	 * Get the MCP prompt instance.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt|\WP_Error MCP prompt instance or WP_Error if validation fails.
	 */
	private function get_prompt() {
		return McpPrompt::from_array( $this->get_data(), $this->mcp_server );
	}
}
PK     …ŠU].3>e7  7  \  vendor/wordpress/mcp-adapter/includes/Domain/Prompts/Contracts/McpPromptBuilderInterface.phpnu „[µü¤        <?php
/**
 * Interface for MCP Prompt Builders.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Prompts\Contracts;

use WP\MCP\Domain\Prompts\McpPrompt;

/**
 * Interface for building MCP prompts.
 *
 * Classes implementing this interface can be passed directly to McpServer::register_prompts()
 * instead of requiring WordPress abilities.
 */
interface McpPromptBuilderInterface {

	/**
	 * Build and return the MCP prompt instance.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt The built prompt.
	 */
	public function build(): McpPrompt;

	/**
	 * Get the unique name for this prompt.
	 *
	 * @return string The prompt name.
	 */
	public function get_name(): string;

	/**
	 * Get the prompt title.
	 *
	 * @return string|null The prompt title.
	 */
	public function get_title(): ?string;

	/**
	 * Get the prompt description.
	 *
	 * @return string|null The prompt description.
	 */
	public function get_description(): ?string;

	/**
	 * Get the prompt arguments.
	 *
	 * @return array The prompt arguments.
	 */
	public function get_arguments(): array;

	/**
	 * Handle the prompt execution when called.
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return array The prompt response.
	 */
	public function handle( array $arguments ): array;

	/**
	 * Check if the current user has permission to execute this prompt.
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return bool True if execution is allowed, false otherwise.
	 */
	public function has_permission( array $arguments ): bool;
}
PK     …ŠU]~*'y  y  I  vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptBuilder.phpnu „[µü¤        <?php
/**
 * Abstract base class for building MCP prompts.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Prompts;

use WP\MCP\Domain\Prompts\Contracts\McpPromptBuilderInterface;

/**
 * Abstract base class for building MCP prompts.
 *
 * Extend this class to create custom prompts that can be registered
 * directly with McpServer without requiring WordPress abilities.
 */
abstract class McpPromptBuilder implements McpPromptBuilderInterface {

	/**
	 * The prompt name.
	 *
	 * @var string
	 */
	protected string $name;

	/**
	 * The prompt title.
	 *
	 * @var string|null
	 */
	protected ?string $title = null;

	/**
	 * The prompt description.
	 *
	 * @var string|null
	 */
	protected ?string $description = null;

	/**
	 * The prompt arguments.
	 *
	 * @var array
	 */
	protected array $arguments = array();

	/**
	 * The prompt annotations.
	 *
	 * @var array
	 */
	protected array $annotations = array();

	/**
	 * Build and return the MCP prompt instance.
	 *
	 * @return \WP\MCP\Domain\Prompts\McpPrompt The built prompt.
	 * @throws \InvalidArgumentException If validation fails.
	 */
	public function build(): McpPrompt {
		$this->configure();

		// Create a synthetic ability name for the prompt
		// Use empty string if name is empty (validation will catch it)
		$synthetic_ability = empty( $this->name ) ? 'synthetic/' : 'synthetic/' . $this->name;

		// Create a builder-based prompt that completely bypasses abilities
		$builder = $this;
		$prompt  = new class(
			$synthetic_ability,
			$this->name,
			$this->title,
			$this->description,
			$this->arguments,
			$this->annotations,
			$builder
		) extends McpPrompt {
			private McpPromptBuilderInterface $builder;

			public function __construct(
				string $ability,
				string $name,
				?string $title,
				?string $description,
				array $arguments,
				array $annotations,
				McpPromptBuilderInterface $builder
			) {
				parent::__construct( $ability, $name, $title, $description, $arguments, $annotations );
				$this->builder = $builder;
			}

			// This prompt is builder-based and doesn't need abilities
			public function is_builder_based(): bool {
				return true;
			}

			// Direct execution through the builder
			public function execute_direct( array $arguments ): array {
				return $this->builder->handle( $arguments );
			}

			// Direct permission checking through the builder
			public function check_permission_direct( array $arguments ): bool {
				return $this->builder->has_permission( $arguments );
			}

			/**
			 * Fallback for ability-based execution (should not be used).
			 *
			 * @return \WP_Error Always returns an error as builder-based prompts don't have abilities.
			 */
			public function get_ability(): \WP_Error {
				// This should not be called for builder-based prompts
				return new \WP_Error(
					'builder_has_no_ability',
					esc_html__( 'Builder-based prompts do not have an associated ability.', 'mcp-adapter' )
				);
			}
		};

		return $prompt;
	}

	/**
	 * Get the unique name for this prompt.
	 *
	 * @return string The prompt name.
	 */
	public function get_name(): string {
		if ( empty( $this->name ) ) {
			$this->configure();
		}

		return $this->name;
	}

	/**
	 * Get the prompt title.
	 *
	 * @return string|null The prompt title.
	 */
	public function get_title(): ?string {
		if ( empty( $this->name ) ) {
			$this->configure();
		}

		return $this->title;
	}

	/**
	 * Get the prompt description.
	 *
	 * @return string|null The prompt description.
	 */
	public function get_description(): ?string {
		if ( empty( $this->name ) ) {
			$this->configure();
		}

		return $this->description;
	}

	/**
	 * Get the prompt arguments.
	 *
	 * @return array The prompt arguments.
	 */
	public function get_arguments(): array {
		if ( empty( $this->name ) ) {
			$this->configure();
		}

		return $this->arguments;
	}

	/**
	 * Get the prompt annotations.
	 *
	 * @return array The prompt annotations.
	 */
	public function get_annotations(): array {
		if ( empty( $this->name ) ) {
			$this->configure();
		}

		return $this->annotations;
	}

	/**
	 * Configure the prompt properties.
	 *
	 * Subclasses must implement this method to set the name, title,
	 * description, and arguments for the prompt.
	 *
	 * @return void
	 */
	abstract protected function configure(): void;

	/**
	 * Handle the prompt execution when called.
	 *
	 * Subclasses must implement this method to handle the prompt logic.
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return array The prompt response.
	 */
	abstract public function handle( array $arguments ): array;

	/**
	 * Check if the current user has permission to execute this prompt.
	 *
	 * Default implementation allows all executions. Override this method
	 * to implement custom permission logic.
	 *
	 * @param array $arguments The arguments passed to the prompt.
	 *
	 * @return bool True if execution is allowed, false otherwise.
	 */
	public function has_permission( array $arguments ): bool {
		// Default: allow all executions
		// Override this method to implement custom permission logic
		return true;
	}

	/**
	 * Helper method to create an argument definition.
	 *
	 * @param string      $name The argument name.
	 * @param string|null $description Optional argument description.
	 * @param bool        $required Whether the argument is required.
	 *
	 * @return array The argument definition.
	 */
	protected function create_argument( string $name, ?string $description = null, bool $required = false ): array {
		$argument = array(
			'name' => $name,
		);

		if ( ! is_null( $description ) ) {
			$argument['description'] = $description;
		}

		if ( $required ) {
			$argument['required'] = true;
		}

		return $argument;
	}

	/**
	 * Helper method to add an argument to the prompt.
	 *
	 * @param string      $name The argument name.
	 * @param string|null $description Optional argument description.
	 * @param bool        $required Whether the argument is required.
	 *
	 * @return self
	 */
	protected function add_argument( string $name, ?string $description = null, bool $required = false ): self {
		$this->arguments[] = $this->create_argument( $name, $description, $required );

		return $this;
	}
}
PK     …ŠU]PkQè½6  ½6  K  vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptValidator.phpnu „[µü¤        <?php
/**
 * MCP Prompt Validator class for validating MCP prompts according to the specification.
 *
 * @package McpAdapter
 */

declare( strict_types=1 );

namespace WP\MCP\Domain\Prompts;

use WP\MCP\Domain\Resources\McpResourceValidator;
use WP\MCP\Domain\Utils\McpValidator;

/**
 * Validates MCP prompts against the Model Context Protocol specification.
 *
 * Provides minimal, resource-efficient validation to ensure prompts conform
 * to the MCP schema requirements without heavy processing overhead.
 *
 * @link https://modelcontextprotocol.io/specification/2025-06-18/server/prompts
 */
class McpPromptValidator {

	/**
	 * Validate an MCP prompt data array against the MCP schema.
	 *
	 * @param array  $prompt_data The prompt data to validate.
	 * @param string $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_prompt_data( array $prompt_data, string $context = '' ) {
		$validation_errors = self::get_validation_errors( $prompt_data );

		if ( ! empty( $validation_errors ) ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %s: comma-separated list of validation errors */
				__( 'Prompt validation failed: %s', 'mcp-adapter' ),
				implode( ', ', $validation_errors )
			);
			return new \WP_Error( 'prompt_validation_failed', esc_html( $error_message ) );
		}

		return true;
	}

	/**
	 * Validate an McpPrompt instance against the MCP schema.
	 *
	 * @param \WP\MCP\Domain\Prompts\McpPrompt $prompt The prompt instance to validate.
	 * @param string    $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if valid, WP_Error if validation fails.
	 */
	public static function validate_prompt_instance( McpPrompt $prompt, string $context = '' ) {
		$uniqueness_result = self::validate_prompt_uniqueness( $prompt, $context );
		if ( is_wp_error( $uniqueness_result ) ) {
			return $uniqueness_result;
		}

		return self::validate_prompt_data( $prompt->to_array(), $context );
	}

	/**
	 * Validate that the resource is unique within the MCP server.
	 *
	 * @param \WP\MCP\Domain\Prompts\McpPrompt $prompt The resource instance to validate.
	 * @param string    $context Optional context for error messages.
	 *
	 * @return bool|\WP_Error True if unique, WP_Error if the prompt name is not unique.
	 */
	public static function validate_prompt_uniqueness( McpPrompt $prompt, string $context = '' ) {
		$this_prompt_name  = $prompt->get_name();
		$existing_resource = $prompt->get_mcp_server()->get_prompt( $this_prompt_name );
		if ( $existing_resource ) {
			$error_message  = $context ? "[{$context}] " : '';
			$error_message .= sprintf(
			/* translators: %s is the prompt name */
				__( "Prompt name '%s' is not unique. It already exists in the MCP server.", 'mcp-adapter' ),
				$this_prompt_name
			);
			return new \WP_Error( 'prompt_not_unique', esc_html( $error_message ) );
		}

		return true;
	}

	/**
	 * Get validation error details for debugging purposes.
	 * This is the core validation method - all other validation methods use this.
	 *
	 * @param array $prompt_data The prompt data to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function get_validation_errors( array $prompt_data ): array {
		$errors = array();

		// Sanitize string inputs
		if ( isset( $prompt_data['name'] ) && is_string( $prompt_data['name'] ) ) {
			$prompt_data['name'] = trim( $prompt_data['name'] );
		}
		if ( isset( $prompt_data['title'] ) && is_string( $prompt_data['title'] ) ) {
			$prompt_data['title'] = trim( $prompt_data['title'] );
		}
		if ( isset( $prompt_data['description'] ) && is_string( $prompt_data['description'] ) ) {
			$prompt_data['description'] = trim( $prompt_data['description'] );
		}

		// Check required fields
		if ( empty( $prompt_data['name'] ) || ! is_string( $prompt_data['name'] ) || ! McpValidator::validate_tool_or_prompt_name( $prompt_data['name'] ) ) {
			$errors[] = __( 'Prompt name is required and must only contain letters, numbers, hyphens (-), and underscores (_), and be 255 characters or less', 'mcp-adapter' );
		}

		// Check optional fields if present
		if ( isset( $prompt_data['title'] ) && ! is_string( $prompt_data['title'] ) ) {
			$errors[] = __( 'Prompt title must be a string if provided', 'mcp-adapter' );
		}

		if ( isset( $prompt_data['description'] ) && ! is_string( $prompt_data['description'] ) ) {
			$errors[] = __( 'Prompt description must be a string if provided', 'mcp-adapter' );
		}

		// Validate arguments (optional field)
		if ( isset( $prompt_data['arguments'] ) ) {
			$arguments_errors = self::get_arguments_validation_errors( $prompt_data['arguments'] );
			if ( ! empty( $arguments_errors ) ) {
				$errors = array_merge( $errors, $arguments_errors );
			}
		}

		// Validate annotations structure if present.
		if ( isset( $prompt_data['annotations'] ) ) {
			if ( ! is_array( $prompt_data['annotations'] ) ) {
				$errors[] = __( 'Prompt annotations must be an array if provided', 'mcp-adapter' );
			} else {
				$annotation_errors = McpValidator::get_annotation_validation_errors( $prompt_data['annotations'] );
				if ( ! empty( $annotation_errors ) ) {
					$errors = array_merge( $errors, $annotation_errors );
				}
			}
		}

		return $errors;
	}

	/**
	 * Get detailed validation errors for prompt arguments.
	 *
	 * @param array|mixed $arguments The arguments to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	private static function get_arguments_validation_errors( $arguments ): array {
		$errors = array();

		// Arguments must be an array
		if ( ! is_array( $arguments ) ) {
			return array( __( 'Prompt arguments must be an array if provided', 'mcp-adapter' ) );
		}

		// Validate each argument
		foreach ( $arguments as $index => $argument ) {
			if ( ! is_array( $argument ) ) {
				$errors[] = sprintf(
				/* translators: %d: argument index */
					__( 'Prompt argument at index %d must be an object', 'mcp-adapter' ),
					$index
				);
				continue;
			}

			// Check required name field
			if ( empty( $argument['name'] ) || ! is_string( $argument['name'] ) ) {
				$errors[] = sprintf(
				/* translators: %d: argument index */
					__( 'Prompt argument at index %d must have a non-empty name string', 'mcp-adapter' ),
					$index
				);
				continue;
			}

			// Validate argument name format
			if ( ! McpValidator::validate_argument_name( $argument['name'] ) ) {
				$errors[] = sprintf(
				/* translators: %s: argument name */
					__( 'Prompt argument \'%s\' name must only contain letters, numbers, hyphens (-), and underscores (_), and be 64 characters or less', 'mcp-adapter' ),
					$argument['name']
				);
			}

			// Check optional description field
			if ( isset( $argument['description'] ) && ! is_string( $argument['description'] ) ) {
				$errors[] = sprintf(
				/* translators: %s: argument name */
					__( 'Prompt argument \'%s\' description must be a string if provided', 'mcp-adapter' ),
					$argument['name']
				);
			}

			// Check optional required field
			if ( ! isset( $argument['required'] ) || is_bool( $argument['required'] ) ) {
				continue;
			}

			$errors[] = sprintf(
			/* translators: %s: argument name */
				__( 'Prompt argument \'%s\' required field must be a boolean if provided', 'mcp-adapter' ),
				$argument['name']
			);
		}

		return $errors;
	}

	/**
	 * Validate prompt messages array (used when getting a prompt with messages).
	 *
	 * @param array $messages The messages to validate.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	public static function validate_prompt_messages( array $messages ): array {
		$errors = array();

		foreach ( $messages as $index => $message ) {
			if ( ! is_array( $message ) ) {
				$errors[] = sprintf(
				/* translators: %d: message index */
					__( 'Message at index %d must be an object', 'mcp-adapter' ),
					$index
				);
				continue;
			}

			// Check the required role field
			if ( empty( $message['role'] ) || ! is_string( $message['role'] ) ) {
				$errors[] = sprintf(
				/* translators: %d: message index */
					__( 'Message at index %d must have a role field', 'mcp-adapter' ),
					$index
				);
				continue;
			}

			// Validate role value
			if ( ! in_array( $message['role'], array( 'user', 'assistant' ), true ) ) {
				$errors[] = sprintf(
				/* translators: %d: message index */
					__( 'Message at index %d role must be either \'user\' or \'assistant\'', 'mcp-adapter' ),
					$index
				);
			}

			// Check the required content field
			if ( empty( $message['content'] ) || ! is_array( $message['content'] ) ) {
				$errors[] = sprintf(
				/* translators: %d: message index */
					__( 'Message at index %d must have a content object', 'mcp-adapter' ),
					$index
				);
				continue;
			}

			// Validate content
			$content_errors = self::get_content_validation_errors( $message['content'], $index );
			if ( empty( $content_errors ) ) {
				continue;
			}

			$errors = array_merge( $errors, $content_errors );
		}

		return $errors;
	}

	/**
	 * Get validation errors for message content.
	 *
	 * @param array $content The content to validate.
	 * @param int   $message_index The message index for error reporting.
	 *
	 * @return array Array of validation errors, empty if valid.
	 */
	private static function get_content_validation_errors( array $content, int $message_index ): array {
		$errors = array();

		// Check the required type field
		if ( empty( $content['type'] ) || ! is_string( $content['type'] ) ) {
			return array(
				sprintf(
				/* translators: %d: message index */
					__( 'Message %d content must have a type field', 'mcp-adapter' ),
					$message_index
				),
			);
		}

		$type = $content['type'];

		switch ( $type ) {
			case 'text':
				if ( empty( $content['text'] ) || ! is_string( $content['text'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d text content must have a non-empty text field', 'mcp-adapter' ),
						$message_index
					);
				}
				break;

			case 'image':
				if ( empty( $content['data'] ) || ! is_string( $content['data'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d image content must have a data field with base64-encoded image', 'mcp-adapter' ),
						$message_index
					);
				} elseif ( ! McpValidator::validate_base64( $content['data'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d image content data must be valid base64', 'mcp-adapter' ),
						$message_index
					);
				}

				if ( empty( $content['mimeType'] ) || ! is_string( $content['mimeType'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d image content must have a mimeType field', 'mcp-adapter' ),
						$message_index
					);
				} elseif ( ! McpValidator::validate_image_mime_type( $content['mimeType'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d image content must have a valid image MIME type', 'mcp-adapter' ),
						$message_index
					);
				}
				break;

			case 'audio':
				if ( empty( $content['data'] ) || ! is_string( $content['data'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d audio content must have a data field with base64-encoded audio', 'mcp-adapter' ),
						$message_index
					);
				} elseif ( ! McpValidator::validate_base64( $content['data'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d audio content data must be valid base64', 'mcp-adapter' ),
						$message_index
					);
				}

				if ( empty( $content['mimeType'] ) || ! is_string( $content['mimeType'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d audio content must have a mimeType field', 'mcp-adapter' ),
						$message_index
					);
				} elseif ( ! McpValidator::validate_audio_mime_type( $content['mimeType'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d audio content must have a valid audio MIME type', 'mcp-adapter' ),
						$message_index
					);
				}
				break;

			case 'resource':
				if ( empty( $content['resource'] ) || ! is_array( $content['resource'] ) ) {
					$errors[] = sprintf(
					/* translators: %d: message index */
						__( 'Message %d resource content must have a resource object', 'mcp-adapter' ),
						$message_index
					);
				} else {
					// Validate embedded resource using the resource validator for strict MCP compliance.
					$resource_errors = McpResourceValidator::get_validation_errors( $content['resource'] );
					foreach ( $resource_errors as $resource_error ) {
						$errors[] = sprintf(
						/* translators: %1$d: message index, %2$s: resource error */
							__( 'Message %1$d embedded resource: %2$s', 'mcp-adapter' ),
							$message_index,
							$resource_error
						);
					}
				}
				break;

			default:
				$errors[] = sprintf(
				/* translators: %1$d: message index, %2$s: content type */
					__( 'Message %1$d content type \'%2$s\' is not supported. Must be \'text\', \'image\', \'audio\', or \'resource\'', 'mcp-adapter' ),
					$message_index,
					$type
				);
				break;
		}

		// Check optional annotations
		if ( isset( $content['annotations'] ) ) {
			if ( ! is_array( $content['annotations'] ) ) {
				$errors[] = sprintf(
				/* translators: %d: message index */
					__( 'Message %d content annotations must be an array if provided', 'mcp-adapter' ),
					$message_index
				);
			} else {
				$annotation_errors = McpValidator::get_annotation_validation_errors( $content['annotations'] );
				if ( ! empty( $annotation_errors ) ) {
					$errors = array_merge( $errors, $annotation_errors );
				}
			}
		}

		return $errors;
	}
}
PK     …ŠU]x
¦È      vendor/autoload.phpnu „[µü¤        <?php

// autoload.php @generated by Composer

if (PHP_VERSION_ID < 50600) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, $err);
        } elseif (!headers_sent()) {
            echo $err;
        }
    }
    trigger_error(
        $err,
        E_USER_ERROR
    );
}

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit8d167c330be88fc6ab56339065b33284::getLoader();
PK     …ŠU]'™¹n  n  7  vendor/donatj/phpuseragentparser/.helpers/constants.phpnu „[µü¤        <?php

require __DIR__ . '/../vendor/autoload.php';

$class = new ReflectionClass($argv[1]);

echo "Predefined helper constants from `{$class->getName()}`\n\n";

echo "| Constant | {$argv[2]} | \n|----------|----------| \n";

foreach( $class->getConstants() as $constant => $value ) {
	echo "| `{$class->getShortName()}::{$constant}` |  {$value} | \n";
}

echo "\n";PK     …ŠU]BÇ¶Œ  Œ  8  vendor/donatj/phpuseragentparser/examples/procedural.phpnu „[µü¤        <?php

// if you're using composer
require __DIR__ . '/../vendor/autoload.php';

// v0 style global function - @deprecated
$uaInfo = parse_user_agent();
// or
// modern namespaced function
$uaInfo = donatj\UserAgent\parse_user_agent();

echo $uaInfo[donatj\UserAgent\PLATFORM] . PHP_EOL;
echo $uaInfo[donatj\UserAgent\BROWSER] . PHP_EOL;
echo $uaInfo[donatj\UserAgent\BROWSER_VERSION] . PHP_EOL;
PK     …ŠU]‚ô'c  c  =  vendor/donatj/phpuseragentparser/examples/object-oriented.phpnu „[µü¤        <?php

use donatj\UserAgent\UserAgentParser;

// if you're using composer
require __DIR__ . '/../vendor/autoload.php';

$parser = new UserAgentParser();

// object-oriented call
$ua = $parser->parse();
// or
// command style invocation
$ua = $parser();

echo $ua->platform() . PHP_EOL;
echo $ua->browser() . PHP_EOL;
echo $ua->browserVersion() . PHP_EOL;
PK     †ŠU]æ¯ÐlÞ  Þ  +  vendor/donatj/phpuseragentparser/.mddoc.xmlnu „[µü¤        <mddoc>
	<docpage target="README.md">

		<autoloader namespace="donatj\UserAgent" type="psr4" root="src" />

		<section title="PHP User Agent Parser">
			<text><![CDATA[
[![Join the chat at https://gitter.im/PhpUserAgentParser/Lobby](https://badges.gitter.im/PhpUserAgentParser/Lobby.svg)](https://gitter.im/PhpUserAgentParser/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
]]></text>
			<badge-poser type="version"/>
			<badge-poser type="downloads"/>
			<badge-poser type="license"/>
			<badge-github-action name="donatj/phpUserAgent" workflow-file="ci.yml"/>
			<section title="What It Is">
				<text><![CDATA[
A simple, streamlined PHP user-agent parser!

Licensed under the MIT license: https://www.opensource.org/licenses/mit-license.php
]]></text>
			</section>
			<section title="Upgrading to `1.*`">
				<text><![CDATA[
The new `1.*` release **does not break compatibility** with `0.*` and nothing need to change to upgrade. However, the global `parse_user_agent` is now deprecated; it has been replaced with the namespaced `\donatj\UserAgent\parse_user_agent` and functions exactly the same. You can easily replace any existing call to `parse_user_agent` with `\donatj\UserAgent\parse_user_agent`

In addition, 1.x adds a convenience object wrapper you may use should you prefer. More information on this is in the Usage section below.
]]></text>
			</section>
			<section title="Why Use This">
				<text><![CDATA[
You have your choice in user-agent parsers. This one detects **all modern browsers** in a very light, quick, understandable fashion.
It is less than 200 lines of code, and consists of just three regular expressions!
It can also correctly identify exotic versions of IE others fail on.

It offers 100% unit test coverage, is installable via Composer, and is very easy to use.
]]></text>
			</section>
			<section title="What It Does Not Do">
				<text><![CDATA[
This is not meant as a browser "knowledge engine" but rather a simple parser. Anything not adequately provided directly by the user agent string itself will simply not be provided by this.
]]></text>

				<section title="OS Versions">
					<text><![CDATA[
User-agent strings **are not** a reliable source of OS Version!

- Many agents simply don't send the information.
- Others provide varying levels of accuracy.
- Parsing Windows versions alone almost nearly doubles the size of the code.

I'm much more interested in keeping this thing *tiny* and accurate than adding nichÃ© features and would rather focus on things that can be **done well**.

All that said, there is the start of a [branch to do it](https://github.com/donatj/PhpUserAgent/tree/os_version_detection) I created for a client if you want to poke it, I update it from time to time, but frankly if you need to *reliably detect OS Version*, using user-agent isn't the way to do it. I'd go with JavaScript.
]]></text>
				</section>
				<section title="Undetectable Browsers">
					<text><![CDATA[
- **Brave** - Brave is simply not differentiable from Chrome. This was a design decision on their part.
]]></text>
				</section>
				<section title="Undetectable Platforms">
					<text><![CDATA[
- **iPadOS 13+** - Starting with iPadOS 13 and further hardened in 14, iPadOS returns the **exact** same string as macOS. It is no longer distinguishable by UA string. (See: [#69](https://github.com/donatj/PhpUserAgent/issues/69))
]]></text>
				</section>
			</section>
			<section title="Requirements">
				<composer-requires/>
			</section>
			<section title="Installing">
				<text>PHP User Agent is available through Packagist via Composer.</text>
				<composer-install/>
			</section>
			<section title="Usage">
				<text>The classic procedural use is as simple as:</text>
				<source name="examples/procedural.php" lang="php" />

				<text>The new object-oriented wrapper form:</text>
				<source name="examples/object-oriented.php" lang="php" />
			</section>
			<section title="Currently Tested Platforms">
				<exec cmd="php .helpers/constants.php 'donatj\UserAgent\Platforms' 'Platform'"/>
			</section>
			<section title="Currently Tested Browsers">
				<text><![CDATA[
> [!NOTE]
> There is overlap between browsers and bots. Before bots were given their own separate class, a number were added to the browser list.
> They appear in both lists for backward compatibility. This is likely to be remedied should there be a future major release.]]></text>
				<exec cmd="php .helpers/constants.php 'donatj\UserAgent\Browsers' 'Browser'"/>
			</section>
			<section title="Tested Bots">
				<exec cmd="php .helpers/constants.php 'donatj\UserAgent\Bots' 'Bots'"/>
			</section>
			<text><![CDATA[
More information is available at [Donat Studios](https://donatstudios.com/PHP-Parser-HTTP_USER_AGENT).
]]></text>
		</section>
	</docpage>
</mddoc>
PK     †ŠU]ìâƒX    .  vendor/donatj/phpuseragentparser/composer.jsonnu „[µü¤        {
	"name": "donatj/phpuseragentparser",
	"type": "library",
	"description": "Lightning fast, minimalist PHP UserAgent string parser.",
	"keywords": [
		"user agent",
		"useragent",
		"parser",
		"browser",
		"browser detection"
	],
	"homepage": "https://donatstudios.com/PHP-Parser-HTTP_USER_AGENT",
	"license": "MIT",
	"require": {
		"php": ">=5.4.0",
		"ext-ctype": "*"
	},
	"require-dev": {
		"camspiers/json-pretty": "~1.0",
		"phpunit/phpunit": "~4.8|~8|~9",
		"donatj/drop": "*",
		"ext-json": "*"
	},
	"authors": [
		{
			"name": "Jesse G. Donat",
			"email": "donatj@gmail.com",
			"homepage": "https://donatstudios.com",
			"role": "Developer"
		}
	],
	"autoload": {
		"files": [
			"src/UserAgentParser.php"
		],
		"psr-4": {
			"donatj\\UserAgent\\": "src/UserAgent"
		}
	}
}
PK     †ŠU]ÿ!§B  B  +  vendor/donatj/phpuseragentparser/LICENSE.mdnu „[µü¤        The MIT License
===============

Copyright (c) 2013 Jesse G. Donat

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.PK     †ŠU]’ðóØ  Ø  )  vendor/donatj/phpuseragentparser/Makefilenu „[µü¤        .PHONY: test
test:
	./vendor/bin/phpunit --coverage-text

.PHONY: clean
clean:
	-rm tests/user_agents.json
	touch tests/user_agents.json

.PHONY: generate
generate:
	php bin/user_agent_sorter.php > tests/user_agents.tmp.json && mv tests/user_agents.tmp.json tests/user_agents.dist.json
	php bin/constant_generator.php

.PHONY: init
init:
	php bin/init_user_agent.php > tests/user_agents.tmp.json && mv tests/user_agents.tmp.json tests/user_agents.dist.json
	make generate
PK     †ŠU]“�2#  2#  8  vendor/donatj/phpuseragentparser/src/UserAgentParser.phpnu „[µü¤        <?php

/**
 * @author Jesse G. Donat <donatj@gmail.com>
 *
 * @link https://donatstudios.com/PHP-Parser-HTTP_USER_AGENT
 * @link https://github.com/donatj/PhpUserAgent
 *
 * @license MIT https://github.com/donatj/PhpUserAgent/blob/master/LICENSE.md
 */

namespace {

	/**
	 * Parses a user agent string into its important parts
	 *
	 * This method is defined for backwards comparability with the old global method.
	 *
	 * @param string|null $u_agent User agent string to parse or null. Uses $_SERVER['HTTP_USER_AGENT'] on NULL
	 * @return string[] an array with 'browser', 'version' and 'platform' keys
	 * @throws \InvalidArgumentException on not having a proper user agent to parse.
	 *
	 * @deprecated This exists for backwards compatibility with 0.x and will likely be removed in 2.x
	 * @see \donatj\UserAgent\parse_user_agent
	 */
	function parse_user_agent( $u_agent = null ) {
		return \donatj\UserAgent\parse_user_agent($u_agent);
	}
}

namespace donatj\UserAgent {

	const PLATFORM        = 'platform';
	const BROWSER         = 'browser';
	const BROWSER_VERSION = 'version';

	/**
	 * Parses a user agent string into its important parts
	 *
	 * @param string|null $u_agent User agent string to parse or null. Uses $_SERVER['HTTP_USER_AGENT'] on NULL
	 * @return string[] an array with 'browser', 'version' and 'platform' keys
	 * @throws \InvalidArgumentException on not having a proper user agent to parse.
	 */
	function parse_user_agent( $u_agent = null ) {
		if( $u_agent === null && isset($_SERVER['HTTP_USER_AGENT']) ) {
			$u_agent = (string)$_SERVER['HTTP_USER_AGENT'];
		}

		if( $u_agent === null ) {
			throw new \InvalidArgumentException('parse_user_agent requires a user agent');
		}

		$platform = null;
		$browser  = null;
		$version  = null;

		$return = [ PLATFORM => &$platform, BROWSER => &$browser, BROWSER_VERSION => &$version ];

		if( !$u_agent ) {
			return $return;
		}

		if( preg_match('/\((.*?)\)/m', $u_agent, $parent_matches) ) {
			preg_match_all(<<<'REGEX'
/(?P<platform>BB\d+;|Android|Adr|Symbian|Sailfish|CrOS|Fuchsia|Tizen|iPhone|iPad|iPod|Linux|(?:Open|Net|Free)BSD|Macintosh|
Windows(?:\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|X11|(?:New\ )?Nintendo\ (?:WiiU?|3?DS|Switch)|Xbox(?:\ One)?)
(?:\ [^;]*)?
(?:;|$)/imx
REGEX
				, $parent_matches[1], $result);

			$priority = [ 'Xbox One', 'Xbox', 'Windows Phone', 'Tizen', 'Android', 'FreeBSD', 'NetBSD', 'OpenBSD', 'CrOS', 'Fuchsia', 'X11', 'Sailfish' ];

			$result[PLATFORM] = array_unique($result[PLATFORM]);
			if( count($result[PLATFORM]) > 1 ) {
				if( $keys = array_intersect($priority, $result[PLATFORM]) ) {
					$platform = reset($keys);
				} else {
					$platform = $result[PLATFORM][0];
				}
			} elseif( isset($result[PLATFORM][0]) ) {
				$platform = $result[PLATFORM][0];
			}
		}

		if( $platform == 'linux-gnu' || $platform == 'X11' ) {
			$platform = 'Linux';
		} elseif( $platform == 'CrOS' ) {
			$platform = 'Chrome OS';
		} elseif( $platform == 'Adr' ) {
			$platform = 'Android';
		} elseif( $platform === null ) {
			if( preg_match_all('%(?P<platform>Android)[:/ ]%ix', $u_agent, $result) ) {
				$platform = $result[PLATFORM][0];
			}
		}

		preg_match_all(<<<'REGEX'
%(?P<prev>.)?(?P<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit|
TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|(?-i:Edge)|EdgA?|CriOS|UCBrowser|Puffin|
OculusBrowser|SamsungBrowser|SailfishBrowser|XiaoMi/MiuiBrowser|YaApp_Android|Whale|
Applebot|Facebot|Googlebot|YandexBot|bingbot|Lynx|Version|
Valve\ Steam\ Tenfoot|Mastodon|
NintendoBrowser|PLAYSTATION\ (?:\d|Vita)+)
\)?;?
(?:[:/ ](?P<version>[0-9A-Z.]+)|/[A-Z]*)
%ix
REGEX
			, $u_agent, $result);

		// If nothing matched, check for simple bot patterns
		if( !isset($result[BROWSER][0], $result[BROWSER_VERSION][0]) ) {
			// Try: bot/version with contact info "site.com botname/1.0 (+contact)"
			if( preg_match('%(?P<browser>[A-Z0-9\-]+)[/ ](?P<version>[0-9A-Z.]+)\s*\(\+(?:https?:|[a-z0-9._-]+@[a-z0-9._-]+)%ix', $u_agent, $g_result) ) {
				return [ PLATFORM => $platform, BROWSER => $g_result[BROWSER], BROWSER_VERSION => $g_result[BROWSER_VERSION] ];
			}
			// Try: simple bot at start "BotName/version" (not Mozilla)
			if( preg_match('%^(?!Mozilla)(?P<browser>[A-Z0-9\-]+)([/ :](?P<version>[0-9A-Z.]+))?%ix', $u_agent, $g_result) ) {
				return [ PLATFORM => $platform, BROWSER => $g_result[BROWSER], BROWSER_VERSION => empty($g_result[BROWSER_VERSION]) ? null : $g_result[BROWSER_VERSION] ];
			}
		}

		if(
			(
				empty($result[BROWSER][0])
				|| ($result['prev'][0] !== '')
			)
			&& preg_match(<<<'REGEX'
%[(;]\s*(?P<browser>[^(/;]+)
(?:[:/ ]v?(?P<version>[0-9A-Z.]+)[^;)\s]*)?
;?(?:\s*robot;)?\s*\+(?:https?:|[a-z0-9._-]+@[a-z0-9._-]+)%ix
REGEX
				, $u_agent, $bot_result)
		) {
			return [
				PLATFORM        => $platform,
				BROWSER         => trim($bot_result['browser']),
				BROWSER_VERSION => empty($bot_result['version']) ? null : $bot_result['version'],
			];
		}

		if( !isset($result[BROWSER][0], $result[BROWSER_VERSION][0]) ) {
			return $return;
		}

		if( preg_match('/rv:(?P<version>[0-9A-Z.]+)/i', $u_agent, $rv_result) ) {
			$rv_result = $rv_result[BROWSER_VERSION];
		}

		$browser = $result[BROWSER][0];
		$version = $result[BROWSER_VERSION][0];

		$lowerBrowser = array_map('strtolower', $result[BROWSER]);

		$find = function( $search, &$key = null, &$value = null ) use ( $lowerBrowser ) {
			$search = (array)$search;

			foreach( $search as $val ) {
				$xkey = array_search(strtolower($val), $lowerBrowser);
				if( $xkey !== false ) {
					$value = $val;
					$key   = $xkey;

					return true;
				}
			}

			return false;
		};

		$findT = function( array $search, &$key = null, &$value = null ) use ( $find ) {
			$value2 = null;
			if( $find(array_keys($search), $key, $value2) ) {
				$value = $search[$value2];

				return true;
			}

			return false;
		};

		$key = 0;
		$val = '';
		if( $findT([ 'OPR' => 'Opera', 'Facebot' => 'iMessageBot', 'UCBrowser' => 'UC Browser', 'YaBrowser' => 'Yandex', 'YaApp_Android' => 'Yandex', 'Iceweasel' => 'Firefox', 'Icecat' => 'Firefox', 'CriOS' => 'Chrome', 'Edg' => 'Edge', 'EdgA' => 'Edge', 'XiaoMi/MiuiBrowser' => 'MiuiBrowser' ], $key, $browser) ) {
			$version = is_numeric(substr($result[BROWSER_VERSION][$key], 0, 1)) ? $result[BROWSER_VERSION][$key] : null;
		} elseif( $find('Playstation Vita', $key, $platform) ) {
			$platform = 'PlayStation Vita';
			$browser  = 'Browser';
		} elseif( $find([ 'Kindle Fire', 'Silk' ], $key, $val) ) {
			$browser  = $val == 'Silk' ? 'Silk' : 'Kindle';
			$platform = 'Kindle Fire';
			if( !($version = $result[BROWSER_VERSION][$key]) || !is_numeric($version[0]) ) {
				$version = $result[BROWSER_VERSION][array_search('Version', $result[BROWSER])];
			}
		} elseif( $find('NintendoBrowser', $key) || $platform == 'Nintendo 3DS' ) {
			$browser = 'NintendoBrowser';
			$version = $result[BROWSER_VERSION][$key];
		} elseif( $find([ 'Kindle' ], $key, $platform) ) {
			$browser = $result[BROWSER][$key];
			$version = $result[BROWSER_VERSION][$key];
		} elseif( $find('Opera', $key, $browser) ) {
			$find('Version', $key);
			$version = $result[BROWSER_VERSION][$key];
		} elseif( $find('Puffin', $key, $browser) ) {
			$version = $result[BROWSER_VERSION][$key];
			if( strlen($version) > 3 ) {
				$part = substr($version, -2);
				if( ctype_upper($part) ) {
					$version = substr($version, 0, -2);

					$flags = [ 'IP' => 'iPhone', 'IT' => 'iPad', 'AP' => 'Android', 'AT' => 'Android', 'WP' => 'Windows Phone', 'WT' => 'Windows' ];
					if( isset($flags[$part]) ) {
						$platform = $flags[$part];
					}
				}
			}
		} elseif( $find([ 'Googlebot', 'Applebot', 'IEMobile', 'Edge', 'Midori', 'Whale', 'Vivaldi', 'OculusBrowser', 'SamsungBrowser', 'Valve Steam Tenfoot', 'Chrome', 'HeadlessChrome', 'SailfishBrowser' ], $key, $browser) ) {
			$version = $result[BROWSER_VERSION][$key];
		} elseif( $rv_result && $find('Trident') ) {
			$browser = 'MSIE';
			$version = $rv_result;
		} elseif( $browser == 'AppleWebKit' ) {
			if( $platform == 'Android' ) {
				$browser = 'Android Browser';
			} elseif( strpos((string)$platform, 'BB') === 0 ) {
				$browser  = 'BlackBerry Browser';
				$platform = 'BlackBerry';
			} elseif( $platform == 'BlackBerry' || $platform == 'PlayBook' ) {
				$browser = 'BlackBerry Browser';
			} elseif( $find('Safari', $key, $browser) || $find('TizenBrowser', $key, $browser) ) {
				$version = $result[BROWSER_VERSION][$key];
			} elseif( count($result[BROWSER]) ) {
				$key     = count($result[BROWSER]) - 1;
				$browser = $result[BROWSER][$key];
				$version = $result[BROWSER_VERSION][$key];
			}

			if( $find('Version', $key) ) {
				$version = $result[BROWSER_VERSION][$key];
			}
		} elseif( $pKey = preg_grep('/playstation \d/i', $result[BROWSER]) ) {
			$pKey = reset($pKey);

			$platform = 'PlayStation ' . preg_replace('/\D/', '', $pKey);
			$browser  = 'NetFront';
		}

		return $return;
	}
}
PK     †ŠU]m)Ži  i  <  vendor/donatj/phpuseragentparser/src/UserAgent/Platforms.phpnu „[µü¤        <?php

// DO NOT EDIT THIS FILE - IT IS GENERATED BY constant_generator.php

namespace donatj\UserAgent;

interface Platforms {

	const MACINTOSH        = 'Macintosh';
	const CHROME_OS        = 'Chrome OS';
	const LINUX            = 'Linux';
	const WINDOWS          = 'Windows';
	const ANDROID          = 'Android';
	const BLACKBERRY       = 'BlackBerry';
	const FREEBSD          = 'FreeBSD';
	const FUCHSIA          = 'Fuchsia';
	const IPAD             = 'iPad';
	const IPHONE           = 'iPhone';
	const IPOD             = 'iPod';
	const KINDLE           = 'Kindle';
	const KINDLE_FIRE      = 'Kindle Fire';
	const NETBSD           = 'NetBSD';
	const NEW_NINTENDO_3DS = 'New Nintendo 3DS';
	const NINTENDO_3DS     = 'Nintendo 3DS';
	const NINTENDO_DS      = 'Nintendo DS';
	const NINTENDO_SWITCH  = 'Nintendo Switch';
	const NINTENDO_WII     = 'Nintendo Wii';
	const NINTENDO_WIIU    = 'Nintendo WiiU';
	const OPENBSD          = 'OpenBSD';
	const PLAYBOOK         = 'PlayBook';
	const PLAYSTATION_3    = 'PlayStation 3';
	const PLAYSTATION_4    = 'PlayStation 4';
	const PLAYSTATION_5    = 'PlayStation 5';
	const PLAYSTATION_VITA = 'PlayStation Vita';
	const SAILFISH         = 'Sailfish';
	const SYMBIAN          = 'Symbian';
	const TIZEN            = 'Tizen';
	const WINDOWS_PHONE    = 'Windows Phone';
	const XBOX             = 'Xbox';
	const XBOX_ONE         = 'Xbox One';

}

PK     †ŠU]nÜþ©�  �  B  vendor/donatj/phpuseragentparser/src/UserAgent/UserAgentParser.phpnu „[µü¤        <?php

namespace donatj\UserAgent;

class UserAgentParser {

	/**
	 * Parses a user agent string into its important parts, provide an object
	 *
	 * @param string|null $u_agent User agent string to parse or null. Uses $_SERVER['HTTP_USER_AGENT'] on NULL
	 * @return UserAgent an object with 'browser', 'browserVersion' and 'platform' methods
	 * @throws \InvalidArgumentException on not having a proper user agent to parse.
	 * @see \donatj\UserAgent\parse_user_agent()
	 *
	 */
	public function parse( $u_agent = null ) {
		$parsed = parse_user_agent($u_agent);

		return new UserAgent(
			$parsed[PLATFORM],
			$parsed[BROWSER],
			$parsed[BROWSER_VERSION]
		);
	}

	/**
	 * Parses a user agent string into its important parts
	 *
	 * @param string|null $u_agent User agent string to parse or null. Uses $_SERVER['HTTP_USER_AGENT'] on NULL
	 * @return UserAgent an object with 'browser', 'browserVersion' and 'platform' methods
	 * @throws \InvalidArgumentException on not having a proper user agent to parse.
	 * @see \donatj\UserAgent\parse_user_agent()
	 *
	 */
	public function __invoke( $u_agent = null ) {
		return $this->parse($u_agent);
	}

}
PK     †ŠU][�«ÔÏ  Ï  E  vendor/donatj/phpuseragentparser/src/UserAgent/UserAgentInterface.phpnu „[µü¤        <?php

namespace donatj\UserAgent;

interface UserAgentInterface {

	/**
	 * @return string|null
	 * @see \donatj\UserAgent\Platforms for a list of tested platforms
	 */
	public function platform();

	/**
	 * @return string|null
	 * @see \donatj\UserAgent\Browsers for a list of tested browsers.
	 */
	public function browser();

	/**
	 * The version string. Formatting depends on the browser.
	 *
	 * @return string|null
	 */
	public function browserVersion();
}PK     †ŠU]À5šN	  N	  ;  vendor/donatj/phpuseragentparser/src/UserAgent/Browsers.phpnu „[µü¤        <?php

// DO NOT EDIT THIS FILE - IT IS GENERATED BY constant_generator.php

namespace donatj\UserAgent;

interface Browsers {

	const ADSBOT_GOOGLE       = 'AdsBot-Google';
	const ANDROID_BROWSER     = 'Android Browser';
	const APPLEBOT            = 'Applebot';
	const BAIDUSPIDER         = 'Baiduspider';
	const BINGBOT             = 'bingbot';
	const BLACKBERRY_BROWSER  = 'BlackBerry Browser';
	const BROWSER             = 'Browser';
	const BUNJALLOO           = 'Bunjalloo';
	const CAMINO              = 'Camino';
	const CHATGPT_USER        = 'ChatGPT-User';
	const CHROME              = 'Chrome';
	const CURL                = 'curl';
	const EDGE                = 'Edge';
	const FACEBOOKEXTERNALHIT = 'facebookexternalhit';
	const FEEDVALIDATOR       = 'FeedValidator';
	const FIREFOX             = 'Firefox';
	const GOOGLEBOT           = 'Googlebot';
	const GOOGLEBOT_IMAGE     = 'Googlebot-Image';
	const GOOGLEBOT_VIDEO     = 'Googlebot-Video';
	const GPTBOT              = 'GPTBot';
	const HEADLESSCHROME      = 'HeadlessChrome';
	const IEMOBILE            = 'IEMobile';
	const IMESSAGEBOT         = 'iMessageBot';
	const KINDLE              = 'Kindle';
	const LYNX                = 'Lynx';
	const MASTODON            = 'Mastodon';
	const MIDORI              = 'Midori';
	const MIUIBROWSER         = 'MiuiBrowser';
	const MSIE                = 'MSIE';
	const MSNBOT_MEDIA        = 'msnbot-media';
	const NETFRONT            = 'NetFront';
	const NINTENDOBROWSER     = 'NintendoBrowser';
	const OAI_SEARCHBOT       = 'OAI-SearchBot';
	const OCULUSBROWSER       = 'OculusBrowser';
	const OPERA               = 'Opera';
	const PUFFIN              = 'Puffin';
	const SAFARI              = 'Safari';
	const SAILFISHBROWSER     = 'SailfishBrowser';
	const SAMSUNGBROWSER      = 'SamsungBrowser';
	const SILK                = 'Silk';
	const SLACKBOT            = 'Slackbot';
	const TELEGRAMBOT         = 'TelegramBot';
	const TIZENBROWSER        = 'TizenBrowser';
	const TWITTERBOT          = 'Twitterbot';
	const UC_BROWSER          = 'UC Browser';
	const VALVE_STEAM_TENFOOT = 'Valve Steam Tenfoot';
	const VIVALDI             = 'Vivaldi';
	const WGET                = 'Wget';
	const WHALE               = 'Whale';
	const WORDPRESS           = 'WordPress';
	const YANDEX              = 'Yandex';
	const YANDEXBOT           = 'YandexBot';
	const YETI                = 'Yeti';

}

PK     †ŠU]ÿ’º/  /  <  vendor/donatj/phpuseragentparser/src/UserAgent/UserAgent.phpnu „[µü¤        <?php

namespace donatj\UserAgent;

class UserAgent implements UserAgentInterface {

	/**
	 * @var string|null
	 */
	private $platform;
	/**
	 * @var string|null
	 */
	private $browser;
	/**
	 * @var string|null
	 */
	private $browserVersion;

	/**
	 * UserAgent constructor.
	 *
	 * @param string|null $platform
	 * @param string|null $browser
	 * @param string|null $browserVersion
	 */
	public function __construct( $platform, $browser, $browserVersion ) {
		$this->platform       = $platform;
		$this->browser        = $browser;
		$this->browserVersion = $browserVersion;
	}

	/**
	 * @return string|null
	 * @see \donatj\UserAgent\Platforms for a list of tested platforms
	 */
	public function platform() {
		return $this->platform;
	}

	/**
	 * @return string|null
	 * @see \donatj\UserAgent\Browsers for a list of tested browsers.
	 */
	public function browser() {
		return $this->browser;
	}

	/**
	 * The version string. Formatting depends on the browser.
	 *
	 * @return string|null
	 */
	public function browserVersion() {
		return $this->browserVersion;
	}
}
PK     †ŠU]oòèQd  d  7  vendor/donatj/phpuseragentparser/src/UserAgent/Bots.phpnu „[µü¤        <?php

// DO NOT EDIT THIS FILE - IT IS GENERATED BY constant_generator.php

namespace donatj\UserAgent;

interface Bots {

	const ADKERNELTOPICCRAWLER  = 'AdkernelTopicCrawler';
	const ADSBOT_GOOGLE         = 'AdsBot-Google';
	const AHREFSBOT             = 'AhrefsBot';
	const AHREFSSITEAUDIT       = 'AhrefsSiteAudit';
	const AMAZONADBOT           = 'AmazonAdBot';
	const AMAZONBOT             = 'Amazonbot';
	const APPLEBOT              = 'Applebot';
	const ARCHIVE_ORG_BOT       = 'archive.org_bot';
	const AWARIOBOT             = 'AwarioBot';
	const BAIDUSPIDER           = 'Baiduspider';
	const BAIDUSPIDER_RENDER    = 'Baiduspider-render';
	const BARKROWLER            = 'Barkrowler';
	const BINGBOT               = 'bingbot';
	const BLEXBOT               = 'BLEXBot';
	const BRAVEBOT              = 'Bravebot';
	const CENSYSINSPECT         = 'CensysInspect';
	const CHATGPT_USER          = 'ChatGPT-User';
	const CLAUDEBOT             = 'ClaudeBot';
	const COCCOCBOT_IMAGE       = 'coccocbot-image';
	const COCCOCBOT_WEB         = 'coccocbot-web';
	const CURL                  = 'curl';
	const DATAFORSEOBOT         = 'DataForSeoBot';
	const DISCORDBOT            = 'Discordbot';
	const DOTBOT                = 'DotBot';
	const DVBOT                 = 'DVbot';
	const EV_CRAWLER            = 'ev-crawler';
	const FACEBOOKEXTERNALHIT   = 'facebookexternalhit';
	const FEEDBOT               = 'feedbot';
	const FEEDVALIDATOR         = 'FeedValidator';
	const GOOGLEBOT             = 'Googlebot';
	const GOOGLEBOT_IMAGE       = 'Googlebot-Image';
	const GOOGLEBOT_VIDEO       = 'Googlebot-Video';
	const GOOGLE_READ_ALOUD     = 'Google-Read-Aloud';
	const GOOGLE_SAFETY         = 'Google-Safety';
	const GPTBOT                = 'GPTBot';
	const HEEXYBOT              = 'Heexybot';
	const HUBSPOT_DOMAIN_CHECK  = 'HubSpot Domain check';
	const IBOUBOT               = 'IbouBot';
	const IMESSAGEBOT           = 'iMessageBot';
	const LEIKIBOT              = 'Leikibot';
	const MASTODON              = 'Mastodon';
	const MINIFLUX              = 'Miniflux';
	const MODATSCANNER          = 'ModatScanner';
	const MOJEEKBOT             = 'MojeekBot';
	const MSNBOT_MEDIA          = 'msnbot-media';
	const OAI_SEARCHBOT         = 'OAI-SearchBot';
	const PERPLEXITYBOT         = 'PerplexityBot';
	const PERPLEXITY_USER       = 'Perplexity-User';
	const PETALBOT              = 'PetalBot';
	const PINTERESTBOT          = 'Pinterestbot';
	const PROXIMIC              = 'proximic';
	const SCOURRSSBOT           = 'ScourRSSBot';
	const SEMRUSHBOT            = 'SemrushBot';
	const SEMRUSHBOT_SI         = 'SemrushBot-SI';
	const SERANKINGBACKLINKSBOT = 'SERankingBacklinksBot';
	const SEZNAMBOT             = 'SeznamBot';
	const SLACKBOT              = 'Slackbot';
	const SMTBOT                = 'SMTBot';
	const SPIDERLING            = 'SpiderLing';
	const SURDOTLYBOT           = 'SurdotlyBot';
	const TELEGRAMBOT           = 'TelegramBot';
	const TWITTERBOT            = 'Twitterbot';
	const WELLKNOWNBOT          = 'WellKnownBot';
	const WGET                  = 'Wget';
	const WORDPRESS             = 'WordPress';
	const WPBOT                 = 'wpbot';
	const YANDEXBOT             = 'YandexBot';
	const YANDEXIMAGES          = 'YandexImages';
	const YANDEXMOBILEBOT       = 'YandexMobileBot';
	const YANDEXRCA             = 'YandexRCA';
	const YANDEXUSERPROXY       = 'YandexUserproxy';
	const YETI                  = 'Yeti';

}

PK     †ŠU]0Âò)  )  G  vendor/a5hleyrich/wp-background-processing/classes/wp-async-request.phpnu „[µü¤        <?php
/**
 * WP Async Request
 *
 * @package WP-Background-Processing
 */

/**
 * Abstract WP_Async_Request class.
 *
 * @abstract
 */
abstract class WP_Async_Request {

	/**
	 * Prefix
	 *
	 * (default value: 'wp')
	 *
	 * @var string
	 * @access protected
	 */
	protected $prefix = 'wp';

	/**
	 * Action
	 *
	 * (default value: 'async_request')
	 *
	 * @var string
	 * @access protected
	 */
	protected $action = 'async_request';

	/**
	 * Identifier
	 *
	 * @var mixed
	 * @access protected
	 */
	protected $identifier;

	/**
	 * Data
	 *
	 * (default value: array())
	 *
	 * @var array
	 * @access protected
	 */
	protected $data = array();

	/**
	 * Initiate new async request.
	 */
	public function __construct() {
		$this->identifier = $this->prefix . '_' . $this->action;

		add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
		add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
	}

	/**
	 * Set data used during the request.
	 *
	 * @param array $data Data.
	 *
	 * @return $this
	 */
	public function data( $data ) {
		$this->data = $data;

		return $this;
	}

	/**
	 * Dispatch the async request.
	 *
	 * @return array|WP_Error|false HTTP Response array, WP_Error on failure, or false if not attempted.
	 */
	public function dispatch() {
		$url  = add_query_arg( $this->get_query_args(), $this->get_query_url() );
		$args = $this->get_post_args();

		return wp_remote_post( esc_url_raw( $url ), $args );
	}

	/**
	 * Get query args.
	 *
	 * @return array
	 */
	protected function get_query_args() {
		if ( property_exists( $this, 'query_args' ) ) {
			return $this->query_args;
		}

		$args = array(
			'action' => $this->identifier,
			'nonce'  => wp_create_nonce( $this->identifier ),
		);

		/**
		 * Filters the query arguments used during an async request.
		 *
		 * @param array $args
		 */
		return apply_filters( $this->identifier . '_query_args', $args );
	}

	/**
	 * Get query URL.
	 *
	 * @return string
	 */
	protected function get_query_url() {
		if ( property_exists( $this, 'query_url' ) ) {
			return $this->query_url;
		}

		$url = admin_url( 'admin-ajax.php' );

		/**
		 * Filters the query URL used during an async request.
		 *
		 * @param string $url
		 */
		return apply_filters( $this->identifier . '_query_url', $url );
	}

	/**
	 * Get post args.
	 *
	 * @return array
	 */
	protected function get_post_args() {
		if ( property_exists( $this, 'post_args' ) ) {
			return $this->post_args;
		}

		$args = array(
			'timeout'   => 5,
			'blocking'  => false,
			'body'      => $this->data,
			'cookies'   => $_COOKIE, // Passing cookies ensures request is performed as initiating user.
			'sslverify' => apply_filters( 'https_local_ssl_verify', false ), // Local requests, fine to pass false.
		);

		/**
		 * Filters the post arguments used during an async request.
		 *
		 * @param array $args
		 */
		return apply_filters( $this->identifier . '_post_args', $args );
	}

	/**
	 * Maybe handle a dispatched request.
	 *
	 * Check for correct nonce and pass to handler.
	 *
	 * @return void|mixed
	 */
	public function maybe_handle() {
		// Don't lock up other requests while processing.
		session_write_close();

		check_ajax_referer( $this->identifier, 'nonce' );

		$this->handle();

		return $this->maybe_wp_die();
	}

	/**
	 * Should the process exit with wp_die?
	 *
	 * @param mixed $return What to return if filter says don't die, default is null.
	 *
	 * @return void|mixed
	 */
	protected function maybe_wp_die( $return = null ) {
		/**
		 * Should wp_die be used?
		 *
		 * @return bool
		 */
		if ( apply_filters( $this->identifier . '_wp_die', true ) ) {
			wp_die();
		}

		return $return;
	}

	/**
	 * Handle a dispatched request.
	 *
	 * Override this method to perform any actions required
	 * during the async request.
	 */
	abstract protected function handle();
}
PK     †ŠU]³™ùZ  ùZ  L  vendor/a5hleyrich/wp-background-processing/classes/wp-background-process.phpnu „[µü¤        <?php
/**
 * WP Background Process
 *
 * @package WP-Background-Processing
 */

/**
 * Abstract WP_Background_Process class.
 *
 * @abstract
 * @extends WP_Async_Request
 */
abstract class WP_Background_Process extends WP_Async_Request {
	/**
	 * The default query arg name used for passing the chain ID to new processes.
	 */
	const CHAIN_ID_ARG_NAME = 'chain_id';

	/**
	 * Unique background process chain ID.
	 *
	 * @var string
	 */
	private $chain_id;

	/**
	 * Action
	 *
	 * (default value: 'background_process')
	 *
	 * @var string
	 * @access protected
	 */
	protected $action = 'background_process';

	/**
	 * Start time of current process.
	 *
	 * (default value: 0)
	 *
	 * @var int
	 * @access protected
	 */
	protected $start_time = 0;

	/**
	 * Cron_hook_identifier
	 *
	 * @var string
	 * @access protected
	 */
	protected $cron_hook_identifier;

	/**
	 * Cron_interval_identifier
	 *
	 * @var string
	 * @access protected
	 */
	protected $cron_interval_identifier;

	/**
	 * Restrict object instantiation when using unserialize.
	 *
	 * @var bool|array
	 */
	protected $allowed_batch_data_classes = true;

	/**
	 * The status set when process is cancelling.
	 *
	 * @var int
	 */
	const STATUS_CANCELLED = 1;

	/**
	 * The status set when process is paused or pausing.
	 *
	 * @var int;
	 */
	const STATUS_PAUSED = 2;

	/**
	 * Initiate new background process.
	 *
	 * @param bool|array $allowed_batch_data_classes Optional. Array of class names that can be unserialized. Default true (any class).
	 */
	public function __construct( $allowed_batch_data_classes = true ) {
		parent::__construct();

		if ( empty( $allowed_batch_data_classes ) && false !== $allowed_batch_data_classes ) {
			$allowed_batch_data_classes = true;
		}

		if ( ! is_bool( $allowed_batch_data_classes ) && ! is_array( $allowed_batch_data_classes ) ) {
			$allowed_batch_data_classes = true;
		}

		// If allowed_batch_data_classes property set in subclass,
		// only apply override if not allowing any class.
		if ( true === $this->allowed_batch_data_classes || true !== $allowed_batch_data_classes ) {
			$this->allowed_batch_data_classes = $allowed_batch_data_classes;
		}

		$this->cron_hook_identifier     = $this->identifier . '_cron';
		$this->cron_interval_identifier = $this->identifier . '_cron_interval';

		add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );
		add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );

		// Ensure dispatch query args included extra data.
		add_filter( $this->identifier . '_query_args', array( $this, 'filter_dispatch_query_args' ) );
	}

	/**
	 * Schedule the cron healthcheck and dispatch an async request to start processing the queue.
	 *
	 * @access public
	 * @return array|WP_Error|false HTTP Response array, WP_Error on failure, or false if not attempted.
	 */
	public function dispatch() {
		if ( $this->is_processing() ) {
			// Process already running.
			return false;
		}

		/**
		 * Filter fired before background process dispatches its next process.
		 *
		 * @param bool   $cancel   Should the dispatch be cancelled? Default false.
		 * @param string $chain_id The background process chain ID.
		 */
		$cancel = apply_filters( $this->identifier . '_pre_dispatch', false, $this->get_chain_id() );

		if ( $cancel ) {
			return false;
		}

		// Schedule the cron healthcheck.
		$this->schedule_event();

		// Perform remote post.
		return parent::dispatch();
	}

	/**
	 * Push to the queue.
	 *
	 * Note, save must be called in order to persist queued items to a batch for processing.
	 *
	 * @param mixed $data Data.
	 *
	 * @return $this
	 */
	public function push_to_queue( $data ) {
		$this->data[] = $data;

		return $this;
	}

	/**
	 * Save the queued items for future processing.
	 *
	 * @return $this
	 */
	public function save() {
		$key = $this->generate_key();

		if ( ! empty( $this->data ) ) {
			update_site_option( $key, $this->data );
		}

		// Clean out data so that new data isn't prepended with closed session's data.
		$this->data = array();

		return $this;
	}

	/**
	 * Update a batch's queued items.
	 *
	 * @param string $key  Key.
	 * @param array  $data Data.
	 *
	 * @return $this
	 */
	public function update( $key, $data ) {
		if ( ! empty( $data ) ) {
			update_site_option( $key, $data );
		}

		return $this;
	}

	/**
	 * Delete a batch of queued items.
	 *
	 * @param string $key Key.
	 *
	 * @return $this
	 */
	public function delete( $key ) {
		delete_site_option( $key );

		return $this;
	}

	/**
	 * Delete entire job queue.
	 */
	public function delete_all() {
		$batches = $this->get_batches();

		foreach ( $batches as $batch ) {
			$this->delete( $batch->key );
		}

		delete_site_option( $this->get_status_key() );

		$this->cancelled();
	}

	/**
	 * Cancel job on next batch.
	 */
	public function cancel() {
		update_site_option( $this->get_status_key(), self::STATUS_CANCELLED );

		// Just in case the job was paused at the time.
		$this->dispatch();
	}

	/**
	 * Has the process been cancelled?
	 *
	 * @return bool
	 */
	public function is_cancelled() {
		return $this->get_status() === self::STATUS_CANCELLED;
	}

	/**
	 * Called when background process has been cancelled.
	 */
	protected function cancelled() {
		do_action( $this->identifier . '_cancelled', $this->get_chain_id() );
	}

	/**
	 * Pause job on next batch.
	 */
	public function pause() {
		update_site_option( $this->get_status_key(), self::STATUS_PAUSED );
	}

	/**
	 * Has the process been paused?
	 *
	 * @return bool
	 */
	public function is_paused() {
		return $this->get_status() === self::STATUS_PAUSED;
	}

	/**
	 * Called when background process has been paused.
	 */
	protected function paused() {
		do_action( $this->identifier . '_paused', $this->get_chain_id() );
	}

	/**
	 * Resume job.
	 */
	public function resume() {
		delete_site_option( $this->get_status_key() );

		$this->schedule_event();
		$this->dispatch();
		$this->resumed();
	}

	/**
	 * Called when background process has been resumed.
	 */
	protected function resumed() {
		do_action( $this->identifier . '_resumed', $this->get_chain_id() );
	}

	/**
	 * Is queued?
	 *
	 * @return bool
	 */
	public function is_queued() {
		return ! $this->is_queue_empty();
	}

	/**
	 * Is the tool currently active, e.g. starting, working, paused or cleaning up?
	 *
	 * @return bool
	 */
	public function is_active() {
		return $this->is_queued() || $this->is_processing() || $this->is_paused() || $this->is_cancelled();
	}

	/**
	 * Generate key for a batch.
	 *
	 * Generates a unique key based on microtime. Queue items are
	 * given a unique key so that they can be merged upon save.
	 *
	 * @param int    $length Optional max length to trim key to, defaults to 64 characters.
	 * @param string $key    Optional string to append to identifier before hash, defaults to "batch".
	 *
	 * @return string
	 */
	protected function generate_key( $length = 64, $key = 'batch' ) {
		$unique  = md5( microtime() . wp_rand() );
		$prepend = $this->identifier . '_' . $key . '_';

		return substr( $prepend . $unique, 0, $length );
	}

	/**
	 * Get the status key.
	 *
	 * @return string
	 */
	protected function get_status_key() {
		return $this->identifier . '_status';
	}

	/**
	 * Get the status value for the process.
	 *
	 * @return int
	 */
	protected function get_status() {
		global $wpdb;

		if ( is_multisite() ) {
			$status = $wpdb->get_var(
				$wpdb->prepare(
					"SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d LIMIT 1",
					$this->get_status_key(),
					get_current_network_id()
				)
			);
		} else {
			$status = $wpdb->get_var(
				$wpdb->prepare(
					"SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1",
					$this->get_status_key()
				)
			);
		}

		return absint( $status );
	}

	/**
	 * Maybe process a batch of queued items.
	 *
	 * Checks whether data exists within the queue and that
	 * the process is not already running.
	 */
	public function maybe_handle() {
		// Don't lock up other requests while processing.
		session_write_close();

		check_ajax_referer( $this->identifier, 'nonce' );

		// Background process already running.
		if ( $this->is_processing() ) {
			return $this->maybe_wp_die();
		}

		// Cancel requested.
		if ( $this->is_cancelled() ) {
			$this->clear_scheduled_event();
			$this->delete_all();

			return $this->maybe_wp_die();
		}

		// Pause requested.
		if ( $this->is_paused() ) {
			$this->clear_scheduled_event();
			$this->paused();

			return $this->maybe_wp_die();
		}

		// No data to process.
		if ( $this->is_queue_empty() ) {
			return $this->maybe_wp_die();
		}

		$this->handle();

		return $this->maybe_wp_die();
	}

	/**
	 * Is queue empty?
	 *
	 * @return bool
	 */
	protected function is_queue_empty() {
		return empty( $this->get_batch() );
	}

	/**
	 * Is process running?
	 *
	 * Check whether the current process is already running
	 * in a background process.
	 *
	 * @return bool
	 *
	 * @deprecated 1.1.0 Superseded.
	 * @see        is_processing()
	 */
	protected function is_process_running() {
		return $this->is_processing();
	}

	/**
	 * Is the background process currently running?
	 *
	 * @return bool
	 */
	public function is_processing() {
		if ( get_site_transient( $this->identifier . '_process_lock' ) ) {
			// Process already running.
			return true;
		}

		return false;
	}

	/**
	 * Lock process.
	 *
	 * Lock the process so that multiple instances can't run simultaneously.
	 * Override if applicable, but the duration should be greater than that
	 * defined in the time_exceeded() method.
	 *
	 * @param bool $reset_start_time Optional, default true.
	 */
	public function lock_process( $reset_start_time = true ) {
		if ( $reset_start_time ) {
			$this->start_time = time(); // Set start time of current process.
		}

		$lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute
		$lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration );

		$microtime = microtime();
		$locked    = set_site_transient( $this->identifier . '_process_lock', $microtime, $lock_duration );

		/**
		 * Action to note whether the background process managed to create its lock.
		 *
		 * The lock is used to signify that a process is running a task and no other
		 * process should be allowed to run the same task until the lock is released.
		 *
		 * @param bool   $locked        Whether the lock was successfully created.
		 * @param string $microtime     Microtime string value used for the lock.
		 * @param int    $lock_duration Max number of seconds that the lock will live for.
		 * @param string $chain_id      Current background process chain ID.
		 */
		do_action(
			$this->identifier . '_process_locked',
			$locked,
			$microtime,
			$lock_duration,
			$this->get_chain_id()
		);
	}

	/**
	 * Unlock process.
	 *
	 * Unlock the process so that other instances can spawn.
	 *
	 * @return $this
	 */
	protected function unlock_process() {
		$unlocked = delete_site_transient( $this->identifier . '_process_lock' );

		/**
		 * Action to note whether the background process managed to release its lock.
		 *
		 * The lock is used to signify that a process is running a task and no other
		 * process should be allowed to run the same task until the lock is released.
		 *
		 * @param bool   $unlocked Whether the lock was released.
		 * @param string $chain_id Current background process chain ID.
		 */
		do_action( $this->identifier . '_process_unlocked', $unlocked, $this->get_chain_id() );

		return $this;
	}

	/**
	 * Get batch.
	 *
	 * @return stdClass Return the first batch of queued items.
	 */
	protected function get_batch() {
		return array_reduce(
			$this->get_batches( 1 ),
			static function ( $carry, $batch ) {
				return $batch;
			},
			array()
		);
	}

	/**
	 * Get batches.
	 *
	 * @param int $limit Number of batches to return, defaults to all.
	 *
	 * @return array of stdClass
	 */
	public function get_batches( $limit = 0 ) {
		global $wpdb;

		if ( empty( $limit ) || ! is_int( $limit ) ) {
			$limit = 0;
		}

		$table        = $wpdb->options;
		$column       = 'option_name';
		$key_column   = 'option_id';
		$value_column = 'option_value';

		if ( is_multisite() ) {
			$table        = $wpdb->sitemeta;
			$column       = 'meta_key';
			$key_column   = 'meta_id';
			$value_column = 'meta_value';
		}

		$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';

		$sql = '
			SELECT *
			FROM ' . $table . '
			WHERE ' . $column . ' LIKE %s
			ORDER BY ' . $key_column . ' ASC
			';

		$args = array( $key );

		if ( ! empty( $limit ) ) {
			$sql .= ' LIMIT %d';

			$args[] = $limit;
		}

		$items = $wpdb->get_results(
			$wpdb->prepare(
				$sql, // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
				$args
			)
		);

		$batches = array();

		if ( ! empty( $items ) ) {
			$allowed_classes = $this->allowed_batch_data_classes;

			$batches = array_map(
				static function ( $item ) use ( $column, $value_column, $allowed_classes ) {
					$batch       = new stdClass();
					$batch->key  = $item->{$column};
					$batch->data = static::maybe_unserialize( $item->{$value_column}, $allowed_classes );

					return $batch;
				},
				$items
			);
		}

		return $batches;
	}

	/**
	 * Handle a dispatched request.
	 *
	 * Pass each queue item to the task handler, while remaining
	 * within server memory and time limit constraints.
	 */
	protected function handle() {
		$this->lock_process();

		/**
		 * Number of seconds to sleep between batches. Defaults to 0 seconds, minimum 0.
		 *
		 * @param int $seconds
		 */
		$throttle_seconds = max(
			0,
			apply_filters(
				$this->identifier . '_seconds_between_batches',
				apply_filters(
					$this->prefix . '_seconds_between_batches',
					0
				)
			)
		);

		do {
			$batch = $this->get_batch();

			foreach ( $batch->data as $key => $value ) {
				$task = $this->task( $value );

				if ( false !== $task ) {
					$batch->data[ $key ] = $task;
				} else {
					unset( $batch->data[ $key ] );
				}

				// Keep the batch up to date while processing it.
				if ( ! empty( $batch->data ) ) {
					$this->update( $batch->key, $batch->data );
				}

				// Let the server breathe a little.
				sleep( $throttle_seconds );

				// Batch limits reached, or pause or cancel requested.
				if ( ! $this->should_continue() ) {
					break;
				}
			}

			// Delete current batch if fully processed.
			if ( empty( $batch->data ) ) {
				$this->delete( $batch->key );
			}
		} while ( ! $this->is_queue_empty() && $this->should_continue() );

		$this->unlock_process();

		// Start next batch or complete process.
		if ( ! $this->is_queue_empty() ) {
			$this->dispatch();
		} else {
			$this->complete();
		}

		return $this->maybe_wp_die();
	}

	/**
	 * Memory exceeded?
	 *
	 * Ensures the batch process never exceeds 90%
	 * of the maximum WordPress memory.
	 *
	 * @return bool
	 */
	protected function memory_exceeded() {
		$memory_limit   = $this->get_memory_limit() * 0.9; // 90% of max memory
		$current_memory = memory_get_usage( true );
		$return         = false;

		if ( $current_memory >= $memory_limit ) {
			$return = true;
		}

		return apply_filters( $this->identifier . '_memory_exceeded', $return );
	}

	/**
	 * Get memory limit in bytes.
	 *
	 * @return int
	 */
	protected function get_memory_limit() {
		if ( function_exists( 'ini_get' ) ) {
			$memory_limit = ini_get( 'memory_limit' );
		} else {
			// Sensible default.
			$memory_limit = '128M';
		}

		if ( ! $memory_limit || -1 === intval( $memory_limit ) ) {
			// Unlimited, set to 32GB.
			$memory_limit = '32000M';
		}

		return wp_convert_hr_to_bytes( $memory_limit );
	}

	/**
	 * Time limit exceeded?
	 *
	 * Ensures the batch never exceeds a sensible time limit.
	 * A timeout limit of 30s is common on shared hosting.
	 *
	 * @return bool
	 */
	protected function time_exceeded() {
		$finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds
		$return = false;

		if ( time() >= $finish ) {
			$return = true;
		}

		return apply_filters( $this->identifier . '_time_exceeded', $return );
	}

	/**
	 * Complete processing.
	 *
	 * Override if applicable, but ensure that the below actions are
	 * performed, or, call parent::complete().
	 */
	protected function complete() {
		delete_site_option( $this->get_status_key() );

		// Remove the cron healthcheck job from the cron schedule.
		$this->clear_scheduled_event();

		$this->completed();
	}

	/**
	 * Called when background process has completed.
	 */
	protected function completed() {
		do_action( $this->identifier . '_completed', $this->get_chain_id() );
	}

	/**
	 * Get the cron healthcheck interval in minutes.
	 *
	 * Default is 5 minutes, minimum is 1 minute.
	 *
	 * @return int
	 */
	public function get_cron_interval() {
		$interval = 5;

		if ( property_exists( $this, 'cron_interval' ) ) {
			$interval = $this->cron_interval;
		}

		$interval = apply_filters( $this->cron_interval_identifier, $interval );

		return is_int( $interval ) && 0 < $interval ? $interval : 5;
	}

	/**
	 * Schedule the cron healthcheck job.
	 *
	 * @access public
	 *
	 * @param mixed $schedules Schedules.
	 *
	 * @return mixed
	 */
	public function schedule_cron_healthcheck( $schedules ) {
		$interval = $this->get_cron_interval();

		if ( 1 === $interval ) {
			$display = __( 'Every Minute' );
		} else {
			$display = sprintf( __( 'Every %d Minutes' ), $interval );
		}

		// Adds an "Every NNN Minute(s)" schedule to the existing cron schedules.
		$schedules[ $this->cron_interval_identifier ] = array(
			'interval' => MINUTE_IN_SECONDS * $interval,
			'display'  => $display,
		);

		return $schedules;
	}

	/**
	 * Handle cron healthcheck event.
	 *
	 * Restart the background process if not already running
	 * and data exists in the queue.
	 */
	public function handle_cron_healthcheck() {
		if ( $this->is_processing() ) {
			// Background process already running.
			exit;
		}

		if ( $this->is_queue_empty() ) {
			// No data to process.
			$this->clear_scheduled_event();
			exit;
		}

		$this->dispatch();
	}

	/**
	 * Schedule the cron healthcheck event.
	 */
	protected function schedule_event() {
		if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) {
			wp_schedule_event(
				time() + ( $this->get_cron_interval() * MINUTE_IN_SECONDS ),
				$this->cron_interval_identifier,
				$this->cron_hook_identifier
			);
		}
	}

	/**
	 * Clear scheduled cron healthcheck event.
	 */
	protected function clear_scheduled_event() {
		$timestamp = wp_next_scheduled( $this->cron_hook_identifier );

		if ( $timestamp ) {
			wp_unschedule_event( $timestamp, $this->cron_hook_identifier );
		}
	}

	/**
	 * Cancel the background process.
	 *
	 * Stop processing queue items, clear cron job and delete batch.
	 *
	 * @deprecated 1.1.0 Superseded.
	 * @see        cancel()
	 */
	public function cancel_process() {
		$this->cancel();
	}

	/**
	 * Perform task with queued item.
	 *
	 * Override this method to perform any actions required on each
	 * queue item. Return the modified item for further processing
	 * in the next pass through. Or, return false to remove the
	 * item from the queue.
	 *
	 * @param mixed $item Queue item to iterate over.
	 *
	 * @return mixed
	 */
	abstract protected function task( $item );

	/**
	 * Maybe unserialize data, but not if an object.
	 *
	 * @param mixed      $data            Data to be unserialized.
	 * @param bool|array $allowed_classes Array of class names that can be unserialized.
	 *
	 * @return mixed
	 */
	protected static function maybe_unserialize( $data, $allowed_classes ) {
		if ( is_serialized( $data ) ) {
			$options = array();
			if ( is_bool( $allowed_classes ) || is_array( $allowed_classes ) ) {
				$options['allowed_classes'] = $allowed_classes;
			}

			return @unserialize( $data, $options ); // @phpcs:ignore
		}

		return $data;
	}

	/**
	 * Should any processing continue?
	 *
	 * @return bool
	 */
	public function should_continue() {
		/**
		 * Filter whether the current background process should continue running the task
		 * if there is data to be processed.
		 *
		 * If the processing time or memory limits have been exceeded, the value will be false.
		 * If pause or cancel have been requested, the value will be false.
		 *
		 * It is very unlikely that you would want to override a false value with true.
		 *
		 * If false is returned here, it does not necessarily mean background processing is
		 * complete. If there is batch data still to be processed and pause or cancel have not
		 * been requested, it simply means this background process should spawn a new process
		 * for the chain to continue processing and then close itself down.
		 *
		 * @param bool   $continue Should the current process continue processing the task?
		 * @param string $chain_id The current background process chain's ID.
		 *
		 * @return bool
		 */
		return apply_filters(
			$this->identifier . '_should_continue',
			! ( $this->time_exceeded() || $this->memory_exceeded() || $this->is_paused() || $this->is_cancelled() ),
			$this->get_chain_id()
		);
	}

	/**
	 * Get the string used to identify this type of background process.
	 *
	 * @return string
	 */
	public function get_identifier() {
		return $this->identifier;
	}

	/**
	 * Return the current background process chain's ID.
	 *
	 * If the chain's ID hasn't been set before this function is first used,
	 * and hasn't been passed as a query arg during dispatch,
	 * the chain ID will be generated before being returned.
	 *
	 * @return string
	 */
	public function get_chain_id() {
		if ( empty( $this->chain_id ) && wp_doing_ajax() ) {
			check_ajax_referer( $this->identifier, 'nonce' );

			if ( ! empty( $_GET[ $this->get_chain_id_arg_name() ] ) ) {
				$chain_id = sanitize_key( $_GET[ $this->get_chain_id_arg_name() ] );

				if ( wp_is_uuid( $chain_id ) ) {
					$this->chain_id = $chain_id;

					return $this->chain_id;
				}
			}
		}

		if ( empty( $this->chain_id ) ) {
			$this->chain_id = wp_generate_uuid4();
		}

		return $this->chain_id;
	}

	/**
	 * Filters the query arguments used during an async request.
	 *
	 * @param array $args Current query args.
	 *
	 * @return array
	 */
	public function filter_dispatch_query_args( $args ) {
		$args[ $this->get_chain_id_arg_name() ] = $this->get_chain_id();

		return $args;
	}

	/**
	 * Get the query arg name used for passing the chain ID to new processes.
	 *
	 * @return string
	 */
	private function get_chain_id_arg_name() {
		static $chain_id_arg_name;

		if ( ! empty( $chain_id_arg_name ) ) {
			return $chain_id_arg_name;
		}

		/**
		 * Filter the query arg name used for passing the chain ID to new processes.
		 *
		 * If you encounter problems with using the default query arg name, you can
		 * change it with this filter.
		 *
		 * @param string $chain_id_arg_name Default "chain_id".
		 *
		 * @return string
		 */
		$chain_id_arg_name = apply_filters( $this->identifier . '_chain_id_arg_name', self::CHAIN_ID_ARG_NAME );

		if ( ! is_string( $chain_id_arg_name ) || empty( $chain_id_arg_name ) ) {
			$chain_id_arg_name = self::CHAIN_ID_ARG_NAME;
		}

		return $chain_id_arg_name;
	}
}
PK     ‡ŠU]ŽJïÓè  è  G  vendor/a5hleyrich/wp-background-processing/wp-background-processing.phpnu „[µü¤        <?php
/**
 * WP-Background Processing
 *
 * @package WP-Background-Processing
 */

/**
 * Plugin Name: WP Background Processing
 * Plugin URI: https://github.com/deliciousbrains/wp-background-processing
 * Description: Asynchronous requests and background processing in WordPress.
 * Author: Delicious Brains Inc.
 * Version: 1.0
 * Author URI: https://deliciousbrains.com/
 * GitHub Plugin URI: https://github.com/deliciousbrains/wp-background-processing
 * GitHub Branch: master
 */

if ( ! class_exists( 'WP_Async_Request' ) ) {
	require_once plugin_dir_path( __FILE__ ) . 'classes/wp-async-request.php';
}
if ( ! class_exists( 'WP_Background_Process' ) ) {
	require_once plugin_dir_path( __FILE__ ) . 'classes/wp-background-process.php';
}
PK     ‡ŠU]˜OÎ  Î  8  vendor/a5hleyrich/wp-background-processing/composer.jsonnu „[µü¤        {
  "name": "deliciousbrains/wp-background-processing",
  "description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.",
  "type": "library",
  "require": {
    "php": ">=7.0"
  },
  "suggest": {
    "coenjacobs/mozart": "Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library"
  },
  "license": "GPL-2.0-or-later",
  "authors": [
    {
      "name": "Delicious Brains",
      "email": "nom@deliciousbrains.com"
    }
  ],
  "autoload": {
    "classmap": [
      "classes/"
    ]
  },
  "require-dev": {
    "phpunit/phpunit": "^8.0",
    "yoast/phpunit-polyfills": "^1.0",
    "spryker/code-sniffer": "^0.17.18",
    "phpcompatibility/phpcompatibility-wp": "*",
    "wp-coding-standards/wpcs": "^2.3"
  },
  "config": {
    "allow-plugins": {
      "dealerdirect/phpcodesniffer-composer-installer": true
    }
  }
}
PK     ‡ŠU]•.ZŒž  ž  ?  vendor/a5hleyrich/wp-background-processing/.circleci/config.ymlnu „[µü¤        workflows:
  version: 2
  main:
    jobs:
      - php72-build
      - php73-build
      - php74-build
      - php80-build

version: 2

job-references:
  mysql_image: &mysql_image
    cimg/mysql:5.7

  setup_environment: &setup_environment
    name: "Setup Environment Variables"
    command: |
      echo "export PATH=$HOME/.composer/vendor/bin:$PATH" >> $BASH_ENV
      source /home/circleci/.bashrc

  install_dependencies: &install_dependencies
    name: "Install Dependencies"
    command: |
      sudo apt-get update && sudo apt-get install mysql-client subversion

  php_job: &php_job
    environment:
      - WP_TESTS_DIR: "/tmp/wordpress-tests-lib"
      - WP_CORE_DIR: "/tmp/wordpress/"
    steps:
      - checkout
      - run: php --version
      - run: composer --version
      - run: *setup_environment
      - run: *install_dependencies
      - run:
          name: "Run Tests"
          command: |
            rm -rf $WP_TESTS_DIR $WP_CORE_DIR
            bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest
            make test-unit
            WP_MULTISITE=1 make test-unit
            make test-style

jobs:
  php56-build:
    <<: *php_job
    docker:
      - image: cimg/php:5.6
      - image: *mysql_image

  php70-build:
    <<: *php_job
    docker:
      - image: cimg/php:7.0
      - image: *mysql_image

  php71-build:
    <<: *php_job
    docker:
      - image: cimg/php:7.1
      - image: *mysql_image

  php72-build:
    <<: *php_job
    docker:
      - image: cimg/php:7.2
      - image: *mysql_image

  php73-build:
    <<: *php_job
    docker:
      - image: cimg/php:7.3
      - image: *mysql_image

  php74-build:
    <<: *php_job
    docker:
      - image: cimg/php:7.4
      - image: *mysql_image

  php80-build:
    <<: *php_job
    docker:
      - image: cimg/php:8.0
      - image: *mysql_image

  php81-build:
    <<: *php_job
    docker:
      - image: cimg/php:8.1
      - image: *mysql_image
PK     ‡ŠU]½Ó7»$;  $;  6  vendor/a5hleyrich/wp-background-processing/license.txtnu „[µü¤                GNU GENERAL PUBLIC LICENSE
           Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
              51 Franklin St, Fifth Floor, Boston, MA 02110, USA

 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

          Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

        GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

          NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

         END OF TERMS AND CONDITIONSPK     ‡ŠU]TË{Lg  g  5  vendor/a5hleyrich/wp-background-processing/.phpcs.xmlnu „[µü¤        <?xml version="1.0"?>
<ruleset name="WordPress Coding Standards based custom ruleset for your plugin">
	<description>Generally-applicable sniffs for WordPress plugins.</description>

	<!-- What to scan -->
	<file>.</file>
	<exclude-pattern>/vendor/</exclude-pattern>
	<exclude-pattern>/node_modules/</exclude-pattern>
	<exclude-pattern>/tests/*</exclude-pattern>

	<!-- How to scan -->
	<!-- Usage instructions: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage -->
	<!-- Annotated ruleset: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml -->
	<arg value="sp"/> <!-- Show sniff and progress -->
	<arg name="basepath" value="./"/><!-- Strip the file paths down to the relevant bit -->
	<arg name="colors"/>
	<arg name="extensions" value="php"/>
	<arg name="parallel" value="8"/><!-- Enables parallel processing when available for faster results. -->

	<!-- Rules: Check PHP version compatibility -->
	<!-- https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions -->
	<config name="testVersion" value="5.6-"/>
	<!-- https://github.com/PHPCompatibility/PHPCompatibilityWP -->
	<rule ref="PHPCompatibilityWP"/>

	<!-- Rules: WordPress Coding Standards -->
	<!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards -->
	<!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/wiki/Customizable-sniff-properties -->
	<config name="minimum_supported_wp_version" value="4.6"/>
	<rule ref="WordPress">
		<!-- Unable to fix -->
		<exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
		<exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound"/>
		<exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound"/>
		<exclude name="WordPress.DB.DirectDatabaseQuery.NoCaching"/>

		<!-- TODO: Maybe fix -->
		<exclude name="WordPress.WP.CronInterval.ChangeDetected"/>
		<exclude name="WordPress.DB.DirectDatabaseQuery.DirectQuery"/>
	</rule>
	<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
		<properties>
			<!-- Value: replace the function, class, and variable prefixes used. Separate multiple prefixes with a comma. -->
			<property name="prefixes" type="array" value="wpbp"/>
		</properties>

		<!-- TODO: Maybe fix -->
		<exclude name="WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound"/>
	</rule>
	<rule ref="WordPress.WP.I18n">
		<properties>
			<!-- Value: replace the text domain used. -->
			<property name="text_domain" type="array" value="wp-background-processing"/>
		</properties>

		<!-- TODO: Should fix -->
		<exclude name="WordPress.WP.I18n.MissingArgDomain"/>
		<exclude name="WordPress.WP.I18n.MissingTranslatorsComment"/>
	</rule>
	<rule ref="WordPress.WhiteSpace.ControlStructureSpacing">
		<properties>
			<property name="blank_line_check" value="true"/>
		</properties>
	</rule>
</ruleset>
PK     ‡ŠU]Q6JÀ8  8  3  vendor/a5hleyrich/wp-background-processing/Makefilenu „[µü¤        .PHONY: test
test: test-unit test-style

.PHONY: test-unit
test-unit: vendor
	vendor/bin/phpunit

.PHONY: test-style
test-style: vendor
	vendor/bin/phpcs

vendor: composer.json
	composer install --ignore-platform-reqs

.PHONY: clean
clean:
	rm -rf vendor
	rm -f tests/.phpunit.result.cache .phpunit.result.cache
PK     ‡ŠU]À5DÏ  Ï  8  vendor/woocommerce/action-scheduler/action-scheduler.phpnu „[µü¤        <?php
/**
 * Plugin Name: Action Scheduler
 * Plugin URI: https://actionscheduler.org
 * Description: A robust scheduling library for use in WordPress plugins.
 * Author: Automattic
 * Author URI: https://automattic.com/
 * Version: 3.9.3
 * License: GPLv3
 * Requires at least: 6.5
 * Tested up to: 6.8
 * Requires PHP: 7.2
 *
 * Copyright 2019 Automattic, Inc.  (https://automattic.com/contact/)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 * @package ActionScheduler
 */

if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.

	if ( ! class_exists( 'ActionScheduler_Versions', false ) ) {
		require_once __DIR__ . '/classes/ActionScheduler_Versions.php';
		add_action( 'plugins_loaded', array( 'ActionScheduler_Versions', 'initialize_latest_version' ), 1, 0 );
	}

	add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_3', 0, 0 ); // WRCS: DEFINED_VERSION.

	// phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace
	/**
	 * Registers this version of Action Scheduler.
	 */
	function action_scheduler_register_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
		$versions = ActionScheduler_Versions::instance();
		$versions->register( '3.9.3', 'action_scheduler_initialize_3_dot_9_dot_3' ); // WRCS: DEFINED_VERSION.
	}

	// phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace
	/**
	 * Initializes this version of Action Scheduler.
	 */
	function action_scheduler_initialize_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION.
		// A final safety check is required even here, because historic versions of Action Scheduler
		// followed a different pattern (in some unusual cases, we could reach this point and the
		// ActionScheduler class is already definedâ€”so we need to guard against that).
		if ( ! class_exists( 'ActionScheduler', false ) ) {
			require_once __DIR__ . '/classes/abstracts/ActionScheduler.php';
			ActionScheduler::init( __FILE__ );
		}
	}

	// Support usage in themes - load this version if no plugin has loaded a version yet.
	if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) {
		action_scheduler_initialize_3_dot_9_dot_3(); // WRCS: DEFINED_VERSION.
		do_action( 'action_scheduler_pre_theme_init' );
		ActionScheduler_Versions::initialize_latest_version();
	}
}
PK     ‡ŠU]÷ÝQ§T  T  b  vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.phpnu „[µü¤        <?php

/**
 * Abstract class with common Queue Cleaner functionality.
 */
abstract class ActionScheduler_Abstract_QueueRunner_Deprecated {

	/**
	 * Get the maximum number of seconds a batch can run for.
	 *
	 * @deprecated 2.1.1
	 * @return int The number of seconds.
	 */
	protected function get_maximum_execution_time() {
		_deprecated_function( __METHOD__, '2.1.1', 'ActionScheduler_Abstract_QueueRunner::get_time_limit()' );

		$maximum_execution_time = 30;

		// Apply deprecated filter.
		if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) {
			_deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' );
			$maximum_execution_time = apply_filters( 'action_scheduler_maximum_execution_time', $maximum_execution_time );
		}

		return absint( $maximum_execution_time );
	}
}
PK     ‡ŠU]ã=™“@  @  V  vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Abstract_Schedule
 */
abstract class ActionScheduler_Schedule_Deprecated implements ActionScheduler_Schedule {

	/**
	 * Get the date & time this schedule was created to run, or calculate when it should be run
	 * after a given date & time.
	 *
	 * @param DateTime $after DateTime to calculate against.
	 *
	 * @return DateTime|null
	 */
	public function next( ?DateTime $after = null ) {
		if ( empty( $after ) ) {
			$return_value       = $this->get_date();
			$replacement_method = 'get_date()';
		} else {
			$return_value       = $this->get_next( $after );
			$replacement_method = 'get_next( $after )';
		}

		_deprecated_function( __METHOD__, '3.0.0', __CLASS__ . '::' . $replacement_method ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

		return $return_value;
	}
}
PK     ‡ŠU]ì—™  ™  <  vendor/woocommerce/action-scheduler/deprecated/functions.phpnu „[µü¤        <?php
/**
 * Deprecated API functions for scheduling actions
 *
 * Functions with the wc prefix were deprecated to avoid confusion with
 * Action Scheduler being included in WooCommerce core, and it providing
 * a different set of APIs for working with the action queue.
 *
 * @package ActionScheduler
 */

/**
 * Schedule an action to run one time.
 *
 * @param int    $timestamp When the job will run.
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 *
 * @return string The job ID
 */
function wc_schedule_single_action( $timestamp, $hook, $args = array(), $group = '' ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_schedule_single_action()' );
	return as_schedule_single_action( $timestamp, $hook, $args, $group );
}

/**
 * Schedule a recurring action.
 *
 * @param int    $timestamp When the first instance of the job will run.
 * @param int    $interval_in_seconds How long to wait between runs.
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 *
 * @deprecated 2.1.0
 *
 * @return string The job ID
 */
function wc_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '' ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_schedule_recurring_action()' );
	return as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args, $group );
}

/**
 * Schedule an action that recurs on a cron-like schedule.
 *
 * @param int    $timestamp The schedule will start on or after this time.
 * @param string $schedule A cron-link schedule string.
 * @see http://en.wikipedia.org/wiki/Cron
 *   *    *    *    *    *    *
 *   â”¬    â”¬    â”¬    â”¬    â”¬    â”¬
 *   |    |    |    |    |    |
 *   |    |    |    |    |    + year [optional]
 *   |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
 *   |    |    |    +---------- month (1 - 12)
 *   |    |    +--------------- day of month (1 - 31)
 *   |    +-------------------- hour (0 - 23)
 *   +------------------------- min (0 - 59)
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 *
 * @deprecated 2.1.0
 *
 * @return string The job ID
 */
function wc_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '' ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_schedule_cron_action()' );
	return as_schedule_cron_action( $timestamp, $schedule, $hook, $args, $group );
}

/**
 * Cancel the next occurrence of a job.
 *
 * @param string $hook The hook that the job will trigger.
 * @param array  $args Args that would have been passed to the job.
 * @param string $group Action's group.
 *
 * @deprecated 2.1.0
 */
function wc_unschedule_action( $hook, $args = array(), $group = '' ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_unschedule_action()' );
	as_unschedule_action( $hook, $args, $group );
}

/**
 * Get next scheduled action.
 *
 * @param string $hook Action's hook.
 * @param array  $args Action's args.
 * @param string $group Action's group.
 *
 * @deprecated 2.1.0
 *
 * @return int|bool The timestamp for the next occurrence, or false if nothing was found
 */
function wc_next_scheduled_action( $hook, $args = null, $group = '' ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_next_scheduled_action()' );
	return as_next_scheduled_action( $hook, $args, $group );
}

/**
 * Find scheduled actions
 *
 * @param array  $args Possible arguments, with their default values:
 *        'hook' => '' - the name of the action that will be triggered
 *        'args' => NULL - the args array that will be passed with the action
 *        'date' => NULL - the scheduled date of the action. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone.
 *        'date_compare' => '<=' - operator for testing "date". accepted values are '!=', '>', '>=', '<', '<=', '='
 *        'modified' => NULL - the date the action was last updated. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone.
 *        'modified_compare' => '<=' - operator for testing "modified". accepted values are '!=', '>', '>=', '<', '<=', '='
 *        'group' => '' - the group the action belongs to
 *        'status' => '' - ActionScheduler_Store::STATUS_COMPLETE or ActionScheduler_Store::STATUS_PENDING
 *        'claimed' => NULL - TRUE to find claimed actions, FALSE to find unclaimed actions, a string to find a specific claim ID
 *        'per_page' => 5 - Number of results to return
 *        'offset' => 0
 *        'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', or 'date'
 *        'order' => 'ASC'.
 * @param string $return_format OBJECT, ARRAY_A, or ids.
 *
 * @deprecated 2.1.0
 *
 * @return array
 */
function wc_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
	_deprecated_function( __FUNCTION__, '2.1.0', 'as_get_scheduled_actions()' );
	return as_get_scheduled_actions( $args, $return_format );
}
PK     ‡ŠU]—¸À#  #  S  vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Store_Deprecated
 *
 * @codeCoverageIgnore
 */
abstract class ActionScheduler_Store_Deprecated {

	/**
	 * Mark an action that failed to fetch correctly as failed.
	 *
	 * @since 2.2.6
	 *
	 * @param int $action_id The ID of the action.
	 */
	public function mark_failed_fetch_action( $action_id ) {
		_deprecated_function( __METHOD__, '3.0.0', 'ActionScheduler_Store::mark_failure()' );
		self::$store->mark_failure( $action_id );
	}

	/**
	 * Add base hooks
	 *
	 * @since 2.2.6
	 */
	protected static function hook() {
		_deprecated_function( __METHOD__, '3.0.0' );
	}

	/**
	 * Remove base hooks
	 *
	 * @since 2.2.6
	 */
	protected static function unhook() {
		_deprecated_function( __METHOD__, '3.0.0' );
	}

	/**
	 * Get the site's local time.
	 *
	 * @deprecated 2.1.0
	 * @return DateTimeZone
	 */
	protected function get_local_timezone() {
		_deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' );
		return ActionScheduler_TimezoneHelper::get_local_timezone();
	}
}
PK     ‡ŠU]»?Z—Z  Z  W  vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_AdminView_Deprecated
 *
 * Store deprecated public functions previously found in the ActionScheduler_AdminView class.
 * Keeps them out of the way of the main class.
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_AdminView_Deprecated {

	/**
	 * Adjust parameters for custom post type.
	 *
	 * @param array $args Args.
	 */
	public function action_scheduler_post_type_args( $args ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $args;
	}

	/**
	 * Customise the post status related views displayed on the Scheduled Actions administration screen.
	 *
	 * @param array $views An associative array of views and view labels which can be used to filter the 'scheduled-action' posts displayed on the Scheduled Actions administration screen.
	 * @return array $views An associative array of views and view labels which can be used to filter the 'scheduled-action' posts displayed on the Scheduled Actions administration screen.
	 */
	public function list_table_views( $views ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $views;
	}

	/**
	 * Do not include the "Edit" action for the Scheduled Actions administration screen.
	 *
	 * Hooked to the 'bulk_actions-edit-action-scheduler' filter.
	 *
	 * @param array $actions An associative array of actions which can be performed on the 'scheduled-action' post type.
	 * @return array $actions An associative array of actions which can be performed on the 'scheduled-action' post type.
	 */
	public function bulk_actions( $actions ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $actions;
	}

	/**
	 * Completely customer the columns displayed on the Scheduled Actions administration screen.
	 *
	 * Because we can't filter the content of the default title and date columns, we need to recreate our own
	 * custom columns for displaying those post fields. For the column content, @see self::list_table_column_content().
	 *
	 * @param array $columns An associative array of columns that are use for the table on the Scheduled Actions administration screen.
	 * @return array $columns An associative array of columns that are use for the table on the Scheduled Actions administration screen.
	 */
	public function list_table_columns( $columns ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $columns;
	}

	/**
	 * Make our custom title & date columns use defaulting title & date sorting.
	 *
	 * @param array $columns An associative array of columns that can be used to sort the table on the Scheduled Actions administration screen.
	 * @return array $columns An associative array of columns that can be used to sort the table on the Scheduled Actions administration screen.
	 */
	public static function list_table_sortable_columns( $columns ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $columns;
	}

	/**
	 * Print the content for our custom columns.
	 *
	 * @param string $column_name The key for the column for which we should output our content.
	 * @param int    $post_id The ID of the 'scheduled-action' post for which this row relates.
	 */
	public static function list_table_column_content( $column_name, $post_id ) {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Hide the inline "Edit" action for all 'scheduled-action' posts.
	 *
	 * Hooked to the 'post_row_actions' filter.
	 *
	 * @param array   $actions An associative array of actions which can be performed on the 'scheduled-action' post type.
	 * @param WP_Post $post The 'scheduled-action' post object.
	 * @return array $actions An associative array of actions which can be performed on the 'scheduled-action' post type.
	 */
	public static function row_actions( $actions, $post ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $actions;
	}

	/**
	 * Run an action when triggered from the Action Scheduler administration screen.
	 *
	 * @codeCoverageIgnore
	 */
	public static function maybe_execute_action() {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Convert an interval of seconds into a two part human friendly string.
	 *
	 * The WordPress human_time_diff() function only calculates the time difference to one degree, meaning
	 * even if an action is 1 day and 11 hours away, it will display "1 day". This function goes one step
	 * further to display two degrees of accuracy.
	 *
	 * Based on Crontrol::interval() function by Edward Dale: https://wordpress.org/plugins/wp-crontrol/
	 *
	 * @return void
	 */
	public static function admin_notices() {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Filter search queries to allow searching by Claim ID (i.e. post_password).
	 *
	 * @param string   $orderby MySQL orderby string.
	 * @param WP_Query $query Instance of a WP_Query object.
	 * @return void
	 */
	public function custom_orderby( $orderby, $query ) {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Filter search queries to allow searching by Claim ID (i.e. post_password).
	 *
	 * @param string   $search MySQL search string.
	 * @param WP_Query $query Instance of a WP_Query object.
	 * @return void
	 */
	public function search_post_password( $search, $query ) {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Change messages when a scheduled action is updated.
	 *
	 * @param  array $messages Messages.
	 * @return array
	 */
	public function post_updated_messages( $messages ) {
		_deprecated_function( __METHOD__, '2.0.0' );
		return $messages;
	}

}
PK     ‡ŠU]R
Ö:    H  vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.phpnu „[µü¤        <?php

/**
 * ActionScheduler DateTime class.
 *
 * This is a custom extension to DateTime that
 */
class ActionScheduler_DateTime extends DateTime {

	/**
	 * UTC offset.
	 *
	 * Only used when a timezone is not set. When a timezone string is
	 * used, this will be set to 0.
	 *
	 * @var int
	 */
	protected $utcOffset = 0; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase

	/**
	 * Get the unix timestamp of the current object.
	 *
	 * Missing in PHP 5.2 so just here so it can be supported consistently.
	 *
	 * @return int
	 */
	#[\ReturnTypeWillChange]
	public function getTimestamp() {
		return method_exists( 'DateTime', 'getTimestamp' ) ? parent::getTimestamp() : $this->format( 'U' );
	}

	/**
	 * Set the UTC offset.
	 *
	 * This represents a fixed offset instead of a timezone setting.
	 *
	 * @param string|int $offset UTC offset value.
	 */
	public function setUtcOffset( $offset ) {
		$this->utcOffset = intval( $offset ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
	}

	/**
	 * Returns the timezone offset.
	 *
	 * @return int
	 * @link http://php.net/manual/en/datetime.getoffset.php
	 */
	#[\ReturnTypeWillChange]
	public function getOffset() {
		return $this->utcOffset ? $this->utcOffset : parent::getOffset(); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
	}

	/**
	 * Set the TimeZone associated with the DateTime
	 *
	 * @param DateTimeZone $timezone Timezone object.
	 *
	 * @return static
	 * @link http://php.net/manual/en/datetime.settimezone.php
	 */
	#[\ReturnTypeWillChange]
	public function setTimezone( $timezone ) {
		$this->utcOffset = 0; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
		parent::setTimezone( $timezone );

		return $this;
	}

	/**
	 * Get the timestamp with the WordPress timezone offset added or subtracted.
	 *
	 * @since  3.0.0
	 * @return int
	 */
	public function getOffsetTimestamp() {
		return $this->getTimestamp() + $this->getOffset();
	}
}
PK     ‡ŠU]èö<?ƒ)  ƒ)  I  vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_AdminView
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_AdminView extends ActionScheduler_AdminView_Deprecated {

	/**
	 * Instance.
	 *
	 * @var null|self
	 */
	private static $admin_view = null;

	/**
	 * Screen ID.
	 *
	 * @var string
	 */
	private static $screen_id = 'tools_page_action-scheduler';

	/**
	 * ActionScheduler_ListTable instance.
	 *
	 * @var ActionScheduler_ListTable
	 */
	protected $list_table;

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_AdminView
	 * @codeCoverageIgnore
	 */
	public static function instance() {

		if ( empty( self::$admin_view ) ) {
			$class            = apply_filters( 'action_scheduler_admin_view_class', 'ActionScheduler_AdminView' );
			self::$admin_view = new $class();
		}

		return self::$admin_view;
	}

	/**
	 * Initialize.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {

			if ( class_exists( 'WooCommerce' ) ) {
				add_action( 'woocommerce_admin_status_content_action-scheduler', array( $this, 'render_admin_ui' ) );
				add_action( 'woocommerce_system_status_report', array( $this, 'system_status_report' ) );
				add_filter( 'woocommerce_admin_status_tabs', array( $this, 'register_system_status_tab' ) );
			}

			add_action( 'admin_menu', array( $this, 'register_menu' ) );
			add_action( 'admin_notices', array( $this, 'maybe_check_pastdue_actions' ) );
			add_action( 'current_screen', array( $this, 'add_help_tabs' ) );
		}
	}

	/**
	 * Print system status report.
	 */
	public function system_status_report() {
		$table = new ActionScheduler_wcSystemStatus( ActionScheduler::store() );
		$table->render();
	}

	/**
	 * Registers action-scheduler into WooCommerce > System status.
	 *
	 * @param array $tabs An associative array of tab key => label.
	 * @return array $tabs An associative array of tab key => label, including Action Scheduler's tabs
	 */
	public function register_system_status_tab( array $tabs ) {
		$tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' );

		return $tabs;
	}

	/**
	 * Include Action Scheduler's administration under the Tools menu.
	 *
	 * A menu under the Tools menu is important for backward compatibility (as that's
	 * where it started), and also provides more convenient access than the WooCommerce
	 * System Status page, and for sites where WooCommerce isn't active.
	 */
	public function register_menu() {
		$hook_suffix = add_submenu_page(
			'tools.php',
			__( 'Scheduled Actions', 'action-scheduler' ),
			__( 'Scheduled Actions', 'action-scheduler' ),
			'manage_options',
			'action-scheduler',
			array( $this, 'render_admin_ui' )
		);
		add_action( 'load-' . $hook_suffix, array( $this, 'process_admin_ui' ) );
	}

	/**
	 * Triggers processing of any pending actions.
	 */
	public function process_admin_ui() {
		$this->get_list_table();
	}

	/**
	 * Renders the Admin UI
	 */
	public function render_admin_ui() {
		$table = $this->get_list_table();
		$table->display_page();
	}

	/**
	 * Get the admin UI object and process any requested actions.
	 *
	 * @return ActionScheduler_ListTable
	 */
	protected function get_list_table() {
		if ( null === $this->list_table ) {
			$this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() );
			$this->list_table->process_actions();
		}

		return $this->list_table;
	}

	/**
	 * Action: admin_notices
	 *
	 * Maybe check past-due actions, and print notice.
	 *
	 * @uses $this->check_pastdue_actions()
	 */
	public function maybe_check_pastdue_actions() {

		// Filter to prevent checking actions (ex: inappropriate user).
		if ( ! apply_filters( 'action_scheduler_check_pastdue_actions', current_user_can( 'manage_options' ) ) ) {
			return;
		}

		// Get last check transient.
		$last_check = get_transient( 'action_scheduler_last_pastdue_actions_check' );

		// If transient exists, we're within interval, so bail.
		if ( ! empty( $last_check ) ) {
			return;
		}

		// Perform the check.
		$this->check_pastdue_actions();
	}

	/**
	 * Check past-due actions, and print notice.
	 */
	protected function check_pastdue_actions() {

		// Set thresholds.
		$threshold_seconds = (int) apply_filters( 'action_scheduler_pastdue_actions_seconds', DAY_IN_SECONDS );
		$threshold_min     = (int) apply_filters( 'action_scheduler_pastdue_actions_min', 1 );

		// Set fallback value for past-due actions count.
		$num_pastdue_actions = 0;

		// Allow third-parties to preempt the default check logic.
		$check = apply_filters( 'action_scheduler_pastdue_actions_check_pre', null );

		// If no third-party preempted and there are no past-due actions, return early.
		if ( ! is_null( $check ) ) {
			return;
		}

		// Scheduled actions query arguments.
		$query_args = array(
			'date'     => as_get_datetime_object( time() - $threshold_seconds ),
			'status'   => ActionScheduler_Store::STATUS_PENDING,
			'per_page' => $threshold_min,
		);

		// If no third-party preempted, run default check.
		if ( is_null( $check ) ) {
			$store               = ActionScheduler_Store::instance();
			$num_pastdue_actions = (int) $store->query_actions( $query_args, 'count' );

			// Check if past-due actions count is greater than or equal to threshold.
			$check = ( $num_pastdue_actions >= $threshold_min );
			$check = (bool) apply_filters( 'action_scheduler_pastdue_actions_check', $check, $num_pastdue_actions, $threshold_seconds, $threshold_min );
		}

		// If check failed, set transient and abort.
		if ( ! boolval( $check ) ) {
			$interval = apply_filters( 'action_scheduler_pastdue_actions_check_interval', round( $threshold_seconds / 4 ), $threshold_seconds );
			set_transient( 'action_scheduler_last_pastdue_actions_check', time(), $interval );

			return;
		}

		$actions_url = add_query_arg(
			array(
				'page'   => 'action-scheduler',
				'status' => 'past-due',
				'order'  => 'asc',
			),
			admin_url( 'tools.php' )
		);

		// Print notice.
		echo '<div class="notice notice-warning"><p>';
		printf(
			wp_kses(
				// translators: 1) is the number of affected actions, 2) is a link to an admin screen.
				_n(
					'<strong>Action Scheduler:</strong> %1$d <a href="%2$s">past-due action</a> found; something may be wrong. <a href="https://actionscheduler.org/faq/#my-site-has-past-due-actions-what-can-i-do" target="_blank">Read documentation &raquo;</a>',
					'<strong>Action Scheduler:</strong> %1$d <a href="%2$s">past-due actions</a> found; something may be wrong. <a href="https://actionscheduler.org/faq/#my-site-has-past-due-actions-what-can-i-do" target="_blank">Read documentation &raquo;</a>',
					$num_pastdue_actions,
					'action-scheduler'
				),
				array(
					'strong' => array(),
					'a'      => array(
						'href'   => true,
						'target' => true,
					),
				)
			),
			absint( $num_pastdue_actions ),
			esc_attr( esc_url( $actions_url ) )
		);
		echo '</p></div>';

		// Facilitate third-parties to evaluate and print notices.
		do_action( 'action_scheduler_pastdue_actions_extra_notices', $query_args );
	}

	/**
	 * Provide more information about the screen and its data in the help tab.
	 */
	public function add_help_tabs() {
		$screen = get_current_screen();

		if ( ! $screen || self::$screen_id !== $screen->id ) {
			return;
		}

		$as_version       = ActionScheduler_Versions::instance()->latest_version();
		$as_source        = ActionScheduler_SystemInformation::active_source();
		$as_source_path   = ActionScheduler_SystemInformation::active_source_path();
		$as_source_markup = sprintf( '<code>%s</code>', esc_html( $as_source_path ) );

		if ( ! empty( $as_source ) ) {
			$as_source_markup = sprintf(
				'%s: <abbr title="%s">%s</abbr>',
				ucfirst( $as_source['type'] ),
				esc_attr( $as_source_path ),
				esc_html( $as_source['name'] )
			);
		}

		$screen->add_help_tab(
			array(
				'id'      => 'action_scheduler_about',
				'title'   => __( 'About', 'action-scheduler' ),
				'content' =>
					// translators: %s is the Action Scheduler version.
					'<h2>' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '</h2>' .
					'<p>' .
						__( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) .
					'</p>' .
					'<h3>' . esc_html__( 'Source', 'action-scheduler' ) . '</h3>' .
					'<p>' .
						esc_html__( 'Action Scheduler is currently being loaded from the following location. This can be useful when debugging, or if requested by the support team.', 'action-scheduler' ) .
					'</p>' .
					'<p>' . $as_source_markup . '</p>' .
					'<h3>' . esc_html__( 'WP CLI', 'action-scheduler' ) . '</h3>' .
					'<p>' .
						sprintf(
							/* translators: %1$s is WP CLI command (not translatable) */
							esc_html__( 'WP CLI commands are available: execute %1$s for a list of available commands.', 'action-scheduler' ),
							'<code>wp help action-scheduler</code>'
						) .
					'</p>',
			)
		);

		$screen->add_help_tab(
			array(
				'id'      => 'action_scheduler_columns',
				'title'   => __( 'Columns', 'action-scheduler' ),
				'content' =>
					'<h2>' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '</h2>' .
					'<ul>' .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) .
					sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) .
					'</ul>',
			)
		);
	}
}
PK     ‡ŠU]¬�¯û!  !  E  vendor/woocommerce/action-scheduler/classes/migration/LogMigrator.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

use ActionScheduler_Logger;

/**
 * Class LogMigrator
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class LogMigrator {
	/**
	 * Source logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $source;

	/**
	 * Destination logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $destination;

	/**
	 * ActionMigrator constructor.
	 *
	 * @param ActionScheduler_Logger $source_logger Source logger object.
	 * @param ActionScheduler_Logger $destination_logger Destination logger object.
	 */
	public function __construct( ActionScheduler_Logger $source_logger, ActionScheduler_Logger $destination_logger ) {
		$this->source      = $source_logger;
		$this->destination = $destination_logger;
	}

	/**
	 * Migrate an action log.
	 *
	 * @param int $source_action_id Source logger object.
	 * @param int $destination_action_id Destination logger object.
	 */
	public function migrate( $source_action_id, $destination_action_id ) {
		$logs = $this->source->get_logs( $source_action_id );

		foreach ( $logs as $log ) {
			if ( absint( $log->get_action_id() ) === absint( $source_action_id ) ) {
				$this->destination->log( $destination_action_id, $log->get_message(), $log->get_date() );
			}
		}
	}
}
PK     ‡ŠU]ât·j*  *  O  vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

/**
 * Class DryRun_ActionMigrator
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class DryRun_ActionMigrator extends ActionMigrator {
	/**
	 * Simulate migrating an action.
	 *
	 * @param int $source_action_id Action ID.
	 *
	 * @return int
	 */
	public function migrate( $source_action_id ) {
		do_action( 'action_scheduler/migrate_action_dry_run', $source_action_id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

		return 0;
	}
}
PK     ‡ŠU]kcÚO|  |  @  vendor/woocommerce/action-scheduler/classes/migration/Runner.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

/**
 * Class Runner
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class Runner {
	/**
	 * Source store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $source_store;

	/**
	 * Destination store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $destination_store;

	/**
	 * Source logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $source_logger;

	/**
	 * Destination logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $destination_logger;

	/**
	 * Batch fetcher instance.
	 *
	 * @var BatchFetcher
	 */
	private $batch_fetcher;

	/**
	 * Action migrator instance.
	 *
	 * @var ActionMigrator
	 */
	private $action_migrator;

	/**
	 * Log migrator instance.
	 *
	 * @var LogMigrator
	 */
	private $log_migrator;

	/**
	 * Progress bar instance.
	 *
	 * @var ProgressBar
	 */
	private $progress_bar;

	/**
	 * Runner constructor.
	 *
	 * @param Config $config Migration configuration object.
	 */
	public function __construct( Config $config ) {
		$this->source_store       = $config->get_source_store();
		$this->destination_store  = $config->get_destination_store();
		$this->source_logger      = $config->get_source_logger();
		$this->destination_logger = $config->get_destination_logger();

		$this->batch_fetcher = new BatchFetcher( $this->source_store );
		if ( $config->get_dry_run() ) {
			$this->log_migrator    = new DryRun_LogMigrator( $this->source_logger, $this->destination_logger );
			$this->action_migrator = new DryRun_ActionMigrator( $this->source_store, $this->destination_store, $this->log_migrator );
		} else {
			$this->log_migrator    = new LogMigrator( $this->source_logger, $this->destination_logger );
			$this->action_migrator = new ActionMigrator( $this->source_store, $this->destination_store, $this->log_migrator );
		}

		if ( defined( 'WP_CLI' ) && WP_CLI ) {
			$this->progress_bar = $config->get_progress_bar();
		}
	}

	/**
	 * Run migration batch.
	 *
	 * @param int $batch_size Optional batch size. Default 10.
	 *
	 * @return int Size of batch processed.
	 */
	public function run( $batch_size = 10 ) {
		$batch      = $this->batch_fetcher->fetch( $batch_size );
		$batch_size = count( $batch );

		if ( ! $batch_size ) {
			return 0;
		}

		if ( $this->progress_bar ) {
			/* translators: %d: amount of actions */
			$this->progress_bar->set_message( sprintf( _n( 'Migrating %d action', 'Migrating %d actions', $batch_size, 'action-scheduler' ), $batch_size ) );
			$this->progress_bar->set_count( $batch_size );
		}

		$this->migrate_actions( $batch );

		return $batch_size;
	}

	/**
	 * Migration a batch of actions.
	 *
	 * @param array $action_ids List of action IDs to migrate.
	 */
	public function migrate_actions( array $action_ids ) {
		do_action( 'action_scheduler/migration_batch_starting', $action_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

		\ActionScheduler::logger()->unhook_stored_action();
		$this->destination_logger->unhook_stored_action();

		foreach ( $action_ids as $source_action_id ) {
			$destination_action_id = $this->action_migrator->migrate( $source_action_id );
			if ( $destination_action_id ) {
				$this->destination_logger->log(
					$destination_action_id,
					sprintf(
						/* translators: 1: source action ID 2: source store class 3: destination action ID 4: destination store class */
						__( 'Migrated action with ID %1$d in %2$s to ID %3$d in %4$s', 'action-scheduler' ),
						$source_action_id,
						get_class( $this->source_store ),
						$destination_action_id,
						get_class( $this->destination_store )
					)
				);
			}

			if ( $this->progress_bar ) {
				$this->progress_bar->tick();
			}
		}

		if ( $this->progress_bar ) {
			$this->progress_bar->finish();
		}

		\ActionScheduler::logger()->hook_stored_action();

		do_action( 'action_scheduler/migration_batch_complete', $action_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Initialize destination store and logger.
	 */
	public function init_destination() {
		$this->destination_store->init();
		$this->destination_logger->init();
	}
}
PK     ‡ŠU]�ŒWõ(  (  C  vendor/woocommerce/action-scheduler/classes/migration/Scheduler.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

/**
 * Class Scheduler
 *
 * @package Action_Scheduler\WP_CLI
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class Scheduler {
	/** Migration action hook. */
	const HOOK = 'action_scheduler/migration_hook';

	/** Migration action group. */
	const GROUP = 'action-scheduler-migration';

	/**
	 * Set up the callback for the scheduled job.
	 */
	public function hook() {
		add_action( self::HOOK, array( $this, 'run_migration' ), 10, 0 );
	}

	/**
	 * Remove the callback for the scheduled job.
	 */
	public function unhook() {
		remove_action( self::HOOK, array( $this, 'run_migration' ), 10 );
	}

	/**
	 * The migration callback.
	 */
	public function run_migration() {
		$migration_runner = $this->get_migration_runner();
		$count            = $migration_runner->run( $this->get_batch_size() );

		if ( 0 === $count ) {
			$this->mark_complete();
		} else {
			$this->schedule_migration( time() + $this->get_schedule_interval() );
		}
	}

	/**
	 * Mark the migration complete.
	 */
	public function mark_complete() {
		$this->unschedule_migration();

		\ActionScheduler_DataController::mark_migration_complete();
		do_action( 'action_scheduler/migration_complete' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Get a flag indicating whether the migration is scheduled.
	 *
	 * @return bool Whether there is a pending action in the store to handle the migration
	 */
	public function is_migration_scheduled() {
		$next = as_next_scheduled_action( self::HOOK );

		return ! empty( $next );
	}

	/**
	 * Schedule the migration.
	 *
	 * @param int $when Optional timestamp to run the next migration batch. Defaults to now.
	 *
	 * @return string The action ID
	 */
	public function schedule_migration( $when = 0 ) {
		$next = as_next_scheduled_action( self::HOOK );

		if ( ! empty( $next ) ) {
			return $next;
		}

		if ( empty( $when ) ) {
			$when = time() + MINUTE_IN_SECONDS;
		}

		return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
	}

	/**
	 * Remove the scheduled migration action.
	 */
	public function unschedule_migration() {
		as_unschedule_action( self::HOOK, null, self::GROUP );
	}

	/**
	 * Get migration batch schedule interval.
	 *
	 * @return int Seconds between migration runs. Defaults to 0 seconds to allow chaining migration via Async Runners.
	 */
	private function get_schedule_interval() {
		return (int) apply_filters( 'action_scheduler/migration_interval', 0 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Get migration batch size.
	 *
	 * @return int Number of actions to migrate in each batch. Defaults to 250.
	 */
	private function get_batch_size() {
		return (int) apply_filters( 'action_scheduler/migration_batch_size', 250 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Get migration runner object.
	 *
	 * @return Runner
	 */
	private function get_migration_runner() {
		$config = Controller::instance()->get_migration_config_object();

		return new Runner( $config );
	}

}
PK     ‡ŠU]o€ATË  Ë  L  vendor/woocommerce/action-scheduler/classes/migration/DryRun_LogMigrator.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

/**
 * Class DryRun_LogMigrator
 *
 * @package Action_Scheduler\Migration
 *
 * @codeCoverageIgnore
 */
class DryRun_LogMigrator extends LogMigrator {
	/**
	 * Simulate migrating an action log.
	 *
	 * @param int $source_action_id Source logger object.
	 * @param int $destination_action_id Destination logger object.
	 */
	public function migrate( $source_action_id, $destination_action_id ) {
		// no-op.
	}
}
PK     ‡ŠU]¡XÔ£+  +  Y  vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_DBStoreMigrator
 *
 * A class for direct saving of actions to the table data store during migration.
 *
 * @since 3.0.0
 */
class ActionScheduler_DBStoreMigrator extends ActionScheduler_DBStore {

	/**
	 * Save an action with optional last attempt date.
	 *
	 * Normally, saving an action sets its attempted date to 0000-00-00 00:00:00 because when an action is first saved,
	 * it can't have been attempted yet, but migrated completed actions will have an attempted date, so we need to save
	 * that when first saving the action.
	 *
	 * @param ActionScheduler_Action $action Action to migrate.
	 * @param null|DateTime          $scheduled_date Optional date of the first instance to store.
	 * @param null|DateTime          $last_attempt_date Optional date the action was last attempted.
	 *
	 * @return string The action ID
	 * @throws \RuntimeException When the action is not saved.
	 */
	public function save_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null, ?DateTime $last_attempt_date = null ) {
		try {
			/**
			 * Global.
			 *
			 * @var \wpdb $wpdb
			 */
			global $wpdb;

			$action_id = parent::save_action( $action, $scheduled_date );

			if ( null !== $last_attempt_date ) {
				$data = array(
					'last_attempt_gmt'   => $this->get_scheduled_date_string( $action, $last_attempt_date ),
					'last_attempt_local' => $this->get_scheduled_date_string_local( $action, $last_attempt_date ),
				);

				$wpdb->update( $wpdb->actionscheduler_actions, $data, array( 'action_id' => $action_id ), array( '%s', '%s' ), array( '%d' ) );
			}

			return $action_id;
		} catch ( \Exception $e ) {
			// translators: %s is an error message.
			throw new \RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 );
		}
	}
}
PK     ‡ŠU]ñ.×«  «  H  vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

/**
 * Class ActionMigrator
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class ActionMigrator {
	/**
	 * Source store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $source;

	/**
	 * Destination store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $destination;

	/**
	 * LogMigrator instance.
	 *
	 * @var LogMigrator
	 */
	private $log_migrator;

	/**
	 * ActionMigrator constructor.
	 *
	 * @param \ActionScheduler_Store $source_store Source store object.
	 * @param \ActionScheduler_Store $destination_store Destination store object.
	 * @param LogMigrator            $log_migrator Log migrator object.
	 */
	public function __construct( \ActionScheduler_Store $source_store, \ActionScheduler_Store $destination_store, LogMigrator $log_migrator ) {
		$this->source       = $source_store;
		$this->destination  = $destination_store;
		$this->log_migrator = $log_migrator;
	}

	/**
	 * Migrate an action.
	 *
	 * @param int $source_action_id Action ID.
	 *
	 * @return int 0|new action ID
	 * @throws \RuntimeException When unable to delete action from the source store.
	 */
	public function migrate( $source_action_id ) {
		try {
			$action = $this->source->fetch_action( $source_action_id );
			$status = $this->source->get_status( $source_action_id );
		} catch ( \Exception $e ) {
			$action = null;
			$status = '';
		}

		if ( is_null( $action ) || empty( $status ) || ! $action->get_schedule()->get_date() ) {
			// null action or empty status means the fetch operation failed or the action didn't exist.
			// null schedule means it's missing vital data.
			// delete it and move on.
			try {
				$this->source->delete_action( $source_action_id );
			} catch ( \Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
				// nothing to do, it didn't exist in the first place.
			}
			do_action( 'action_scheduler/no_action_to_migrate', $source_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			return 0;
		}

		try {

			// Make sure the last attempt date is set correctly for completed and failed actions.
			$last_attempt_date = ( \ActionScheduler_Store::STATUS_PENDING !== $status ) ? $this->source->get_date( $source_action_id ) : null;

			$destination_action_id = $this->destination->save_action( $action, null, $last_attempt_date );
		} catch ( \Exception $e ) {
			do_action( 'action_scheduler/migrate_action_failed', $source_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			return 0; // could not save the action in the new store.
		}

		try {
			switch ( $status ) {
				case \ActionScheduler_Store::STATUS_FAILED:
					$this->destination->mark_failure( $destination_action_id );
					break;
				case \ActionScheduler_Store::STATUS_CANCELED:
					$this->destination->cancel_action( $destination_action_id );
					break;
			}

			$this->log_migrator->migrate( $source_action_id, $destination_action_id );
			$this->source->delete_action( $source_action_id );

			$test_action = $this->source->fetch_action( $source_action_id );
			if ( ! is_a( $test_action, 'ActionScheduler_NullAction' ) ) {
				// translators: %s is an action ID.
				throw new \RuntimeException( sprintf( __( 'Unable to remove source migrated action %s', 'action-scheduler' ), $source_action_id ) );
			}
			do_action( 'action_scheduler/migrated_action', $source_action_id, $destination_action_id, $this->source, $this->destination ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			return $destination_action_id;
		} catch ( \Exception $e ) {
			// could not delete from the old store.
			$this->source->mark_migrated( $source_action_id );

			// phpcs:disable WordPress.NamingConventions.ValidHookName.UseUnderscores
			do_action( 'action_scheduler/migrate_action_incomplete', $source_action_id, $destination_action_id, $this->source, $this->destination );
			do_action( 'action_scheduler/migrated_action', $source_action_id, $destination_action_id, $this->source, $this->destination );
			// phpcs:enable

			return $destination_action_id;
		}
	}
}
PK     ‡ŠU]�åµ|  |  D  vendor/woocommerce/action-scheduler/classes/migration/Controller.phpnu „[µü¤        <?php

namespace Action_Scheduler\Migration;

use ActionScheduler_DataController;
use ActionScheduler_LoggerSchema;
use ActionScheduler_StoreSchema;
use Action_Scheduler\WP_CLI\ProgressBar;

/**
 * Class Controller
 *
 * The main plugin/initialization class for migration to custom tables.
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class Controller {
	/**
	 * Instance.
	 *
	 * @var self
	 */
	private static $instance;

	/**
	 * Scheduler instance.
	 *
	 * @var Action_Scheduler\Migration\Scheduler
	 */
	private $migration_scheduler;

	/**
	 * Class name of the store object.
	 *
	 * @var string
	 */
	private $store_classname;

	/**
	 * Class name of the logger object.
	 *
	 * @var string
	 */
	private $logger_classname;

	/**
	 * Flag to indicate migrating custom store.
	 *
	 * @var bool
	 */
	private $migrate_custom_store;

	/**
	 * Controller constructor.
	 *
	 * @param Scheduler $migration_scheduler Migration scheduler object.
	 */
	protected function __construct( Scheduler $migration_scheduler ) {
		$this->migration_scheduler = $migration_scheduler;
		$this->store_classname     = '';
	}

	/**
	 * Set the action store class name.
	 *
	 * @param string $class Classname of the store class.
	 *
	 * @return string
	 */
	public function get_store_class( $class ) {
		if ( \ActionScheduler_DataController::is_migration_complete() ) {
			return \ActionScheduler_DataController::DATASTORE_CLASS;
		} elseif ( \ActionScheduler_Store::DEFAULT_CLASS !== $class ) {
			$this->store_classname = $class;
			return $class;
		} else {
			return 'ActionScheduler_HybridStore';
		}
	}

	/**
	 * Set the action logger class name.
	 *
	 * @param string $class Classname of the logger class.
	 *
	 * @return string
	 */
	public function get_logger_class( $class ) {
		\ActionScheduler_Store::instance();

		if ( $this->has_custom_datastore() ) {
			$this->logger_classname = $class;
			return $class;
		} else {
			return \ActionScheduler_DataController::LOGGER_CLASS;
		}
	}

	/**
	 * Get flag indicating whether a custom datastore is in use.
	 *
	 * @return bool
	 */
	public function has_custom_datastore() {
		return (bool) $this->store_classname;
	}

	/**
	 * Set up the background migration process.
	 *
	 * @return void
	 */
	public function schedule_migration() {
		$logging_tables = new ActionScheduler_LoggerSchema();
		$store_tables   = new ActionScheduler_StoreSchema();

		/*
		 * In some unusual cases, the expected tables may not have been created. In such cases
		 * we do not schedule a migration as doing so will lead to fatal error conditions.
		 *
		 * In such cases the user will likely visit the Tools > Scheduled Actions screen to
		 * investigate, and will see appropriate messaging (this step also triggers an attempt
		 * to rebuild any missing tables).
		 *
		 * @see https://github.com/woocommerce/action-scheduler/issues/653
		 */
		if (
			ActionScheduler_DataController::is_migration_complete()
			|| $this->migration_scheduler->is_migration_scheduled()
			|| ! $store_tables->tables_exist()
			|| ! $logging_tables->tables_exist()
		) {
			return;
		}

		$this->migration_scheduler->schedule_migration();
	}

	/**
	 * Get the default migration config object
	 *
	 * @return ActionScheduler\Migration\Config
	 */
	public function get_migration_config_object() {
		static $config = null;

		if ( ! $config ) {
			$source_store  = $this->store_classname ? new $this->store_classname() : new \ActionScheduler_wpPostStore();
			$source_logger = $this->logger_classname ? new $this->logger_classname() : new \ActionScheduler_wpCommentLogger();

			$config = new Config();
			$config->set_source_store( $source_store );
			$config->set_source_logger( $source_logger );
			$config->set_destination_store( new \ActionScheduler_DBStoreMigrator() );
			$config->set_destination_logger( new \ActionScheduler_DBLogger() );

			if ( defined( 'WP_CLI' ) && WP_CLI ) {
				$config->set_progress_bar( new ProgressBar( '', 0 ) );
			}
		}

		return apply_filters( 'action_scheduler/migration_config', $config ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Hook dashboard migration notice.
	 */
	public function hook_admin_notices() {
		if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) {
			return;
		}
		add_action( 'admin_notices', array( $this, 'display_migration_notice' ), 10, 0 );
	}

	/**
	 * Show a dashboard notice that migration is in progress.
	 */
	public function display_migration_notice() {
		printf( '<div class="notice notice-warning"><p>%s</p></div>', esc_html__( 'Action Scheduler migration in progress. The list of scheduled actions may be incomplete.', 'action-scheduler' ) );
	}

	/**
	 * Add store classes. Hook migration.
	 */
	private function hook() {
		add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
		add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
		add_action( 'init', array( $this, 'maybe_hook_migration' ) );
		add_action( 'wp_loaded', array( $this, 'schedule_migration' ) );

		// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen.
		add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
		add_action( 'load-woocommerce_page_wc-status', array( $this, 'hook_admin_notices' ), 10, 0 );
	}

	/**
	 * Possibly hook the migration scheduler action.
	 */
	public function maybe_hook_migration() {
		if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) {
			return;
		}

		$this->migration_scheduler->hook();
	}

	/**
	 * Allow datastores to enable migration to AS tables.
	 */
	public function allow_migration() {
		if ( ! \ActionScheduler_DataController::dependencies_met() ) {
			return false;
		}

		if ( null === $this->migrate_custom_store ) {
			$this->migrate_custom_store = apply_filters( 'action_scheduler_migrate_data_store', false );
		}

		return ( ! $this->has_custom_datastore() ) || $this->migrate_custom_store;
	}

	/**
	 * Proceed with the migration if the dependencies have been met.
	 */
	public static function init() {
		if ( \ActionScheduler_DataController::dependencies_met() ) {
			self::instance()->hook();
		}
	}

	/**
	 * Singleton factory.
	 */
	public static function instance() {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new static( new Scheduler() );
		}

		return self::$instance;
	}
}
PK     ‡ŠU]’T˜”n  n  @  vendor/woocommerce/action-scheduler/classes/migration/Config.phpnu „[µü¤        <?php


namespace Action_Scheduler\Migration;

use Action_Scheduler\WP_CLI\ProgressBar;
use ActionScheduler_Logger as Logger;
use ActionScheduler_Store as Store;

/**
 * Class Config
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * A config builder for the ActionScheduler\Migration\Runner class
 */
class Config {
	/**
	 * Source store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $source_store;

	/**
	 * Source logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $source_logger;

	/**
	 * Destination store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $destination_store;

	/**
	 * Destination logger instance.
	 *
	 * @var ActionScheduler_Logger
	 */
	private $destination_logger;

	/**
	 * Progress bar object.
	 *
	 * @var Action_Scheduler\WP_CLI\ProgressBar
	 */
	private $progress_bar;

	/**
	 * Flag indicating a dryrun.
	 *
	 * @var bool
	 */
	private $dry_run = false;

	/**
	 * Config constructor.
	 */
	public function __construct() {

	}

	/**
	 * Get the configured source store.
	 *
	 * @return ActionScheduler_Store
	 * @throws \RuntimeException When source store is not configured.
	 */
	public function get_source_store() {
		if ( empty( $this->source_store ) ) {
			throw new \RuntimeException( __( 'Source store must be configured before running a migration', 'action-scheduler' ) );
		}

		return $this->source_store;
	}

	/**
	 * Set the configured source store.
	 *
	 * @param ActionScheduler_Store $store Source store object.
	 */
	public function set_source_store( Store $store ) {
		$this->source_store = $store;
	}

	/**
	 * Get the configured source logger.
	 *
	 * @return ActionScheduler_Logger
	 * @throws \RuntimeException When source logger is not configured.
	 */
	public function get_source_logger() {
		if ( empty( $this->source_logger ) ) {
			throw new \RuntimeException( __( 'Source logger must be configured before running a migration', 'action-scheduler' ) );
		}

		return $this->source_logger;
	}

	/**
	 * Set the configured source logger.
	 *
	 * @param ActionScheduler_Logger $logger Logger object.
	 */
	public function set_source_logger( Logger $logger ) {
		$this->source_logger = $logger;
	}

	/**
	 * Get the configured destination store.
	 *
	 * @return ActionScheduler_Store
	 * @throws \RuntimeException When destination store is not configured.
	 */
	public function get_destination_store() {
		if ( empty( $this->destination_store ) ) {
			throw new \RuntimeException( __( 'Destination store must be configured before running a migration', 'action-scheduler' ) );
		}

		return $this->destination_store;
	}

	/**
	 * Set the configured destination store.
	 *
	 * @param ActionScheduler_Store $store Action store object.
	 */
	public function set_destination_store( Store $store ) {
		$this->destination_store = $store;
	}

	/**
	 * Get the configured destination logger.
	 *
	 * @return ActionScheduler_Logger
	 * @throws \RuntimeException When destination logger is not configured.
	 */
	public function get_destination_logger() {
		if ( empty( $this->destination_logger ) ) {
			throw new \RuntimeException( __( 'Destination logger must be configured before running a migration', 'action-scheduler' ) );
		}

		return $this->destination_logger;
	}

	/**
	 * Set the configured destination logger.
	 *
	 * @param ActionScheduler_Logger $logger Logger object.
	 */
	public function set_destination_logger( Logger $logger ) {
		$this->destination_logger = $logger;
	}

	/**
	 * Get flag indicating whether it's a dry run.
	 *
	 * @return bool
	 */
	public function get_dry_run() {
		return $this->dry_run;
	}

	/**
	 * Set flag indicating whether it's a dry run.
	 *
	 * @param bool $dry_run Dry run toggle.
	 */
	public function set_dry_run( $dry_run ) {
		$this->dry_run = (bool) $dry_run;
	}

	/**
	 * Get progress bar object.
	 *
	 * @return ActionScheduler\WPCLI\ProgressBar
	 */
	public function get_progress_bar() {
		return $this->progress_bar;
	}

	/**
	 * Set progress bar object.
	 *
	 * @param ActionScheduler\WPCLI\ProgressBar $progress_bar Progress bar object.
	 */
	public function set_progress_bar( ProgressBar $progress_bar ) {
		$this->progress_bar = $progress_bar;
	}
}
PK     ‡ŠU]¥ÇÕñè  è  F  vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.phpnu „[µü¤        <?php

namespace Action_Scheduler\Migration;

use ActionScheduler_Store as Store;

/**
 * Class BatchFetcher
 *
 * @package Action_Scheduler\Migration
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class BatchFetcher {
	/**
	 * Store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $store;

	/**
	 * BatchFetcher constructor.
	 *
	 * @param ActionScheduler_Store $source_store Source store object.
	 */
	public function __construct( Store $source_store ) {
		$this->store = $source_store;
	}

	/**
	 * Retrieve a list of actions.
	 *
	 * @param int $count The number of actions to retrieve.
	 *
	 * @return int[] A list of action IDs
	 */
	public function fetch( $count = 10 ) {
		foreach ( $this->get_query_strategies( $count ) as $query ) {
			$action_ids = $this->store->query_actions( $query );
			if ( ! empty( $action_ids ) ) {
				return $action_ids;
			}
		}

		return array();
	}

	/**
	 * Generate a list of prioritized of action search parameters.
	 *
	 * @param int $count Number of actions to find.
	 *
	 * @return array
	 */
	private function get_query_strategies( $count ) {
		$now  = as_get_datetime_object();
		$args = array(
			'date'     => $now,
			'per_page' => $count,
			'offset'   => 0,
			'orderby'  => 'date',
			'order'    => 'ASC',
		);

		$priorities = array(
			Store::STATUS_PENDING,
			Store::STATUS_FAILED,
			Store::STATUS_CANCELED,
			Store::STATUS_COMPLETE,
			Store::STATUS_RUNNING,
			'', // any other unanticipated status.
		);

		foreach ( $priorities as $status ) {
			yield wp_parse_args(
				array(
					'status'       => $status,
					'date_compare' => '<=',
				),
				$args
			);

			yield wp_parse_args(
				array(
					'status'       => $status,
					'date_compare' => '>=',
				),
				$args
			);
		}
	}
}
PK     ‡ŠU]M¶.L‡  ‡  L  vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_QueueCleaner
 */
class ActionScheduler_QueueCleaner {

	/**
	 * The batch size.
	 *
	 * @var int
	 */
	protected $batch_size;

	/**
	 * ActionScheduler_Store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $store = null;

	/**
	 * 31 days in seconds.
	 *
	 * @var int
	 */
	private $month_in_seconds = 2678400;

	/**
	 * Default list of statuses purged by the cleaner process.
	 *
	 * @var string[]
	 */
	private $default_statuses_to_purge = array(
		ActionScheduler_Store::STATUS_COMPLETE,
		ActionScheduler_Store::STATUS_CANCELED,
	);

	/**
	 * ActionScheduler_QueueCleaner constructor.
	 *
	 * @param ActionScheduler_Store|null $store      The store instance.
	 * @param int                        $batch_size The batch size.
	 */
	public function __construct( ?ActionScheduler_Store $store = null, $batch_size = 20 ) {
		$this->store      = $store ? $store : ActionScheduler_Store::instance();
		$this->batch_size = $batch_size;
	}

	/**
	 * Default queue cleaner process used by queue runner.
	 *
	 * @return array
	 */
	public function delete_old_actions() {
		/**
		 * Filter the minimum scheduled date age for action deletion.
		 *
		 * @param int $retention_period Minimum scheduled age in seconds of the actions to be deleted.
		 */
		$lifespan = apply_filters( 'action_scheduler_retention_period', $this->month_in_seconds );

		try {
			$cutoff = as_get_datetime_object( $lifespan . ' seconds ago' );
		} catch ( Exception $e ) {
			_doing_it_wrong(
				__METHOD__,
				sprintf(
					/* Translators: %s is the exception message. */
					esc_html__( 'It was not possible to determine a valid cut-off time: %s.', 'action-scheduler' ),
					esc_html( $e->getMessage() )
				),
				'3.5.5'
			);

			return array();
		}

		/**
		 * Filter the statuses when cleaning the queue.
		 *
		 * @param string[] $default_statuses_to_purge Action statuses to clean.
		 */
		$statuses_to_purge = (array) apply_filters( 'action_scheduler_default_cleaner_statuses', $this->default_statuses_to_purge );

		return $this->clean_actions( $statuses_to_purge, $cutoff, $this->get_batch_size() );
	}

	/**
	 * Delete selected actions limited by status and date.
	 *
	 * @param string[] $statuses_to_purge List of action statuses to purge. Defaults to canceled, complete.
	 * @param DateTime $cutoff_date Date limit for selecting actions. Defaults to 31 days ago.
	 * @param int|null $batch_size Maximum number of actions per status to delete. Defaults to 20.
	 * @param string   $context Calling process context. Defaults to `old`.
	 * @return array Actions deleted.
	 */
	public function clean_actions( array $statuses_to_purge, DateTime $cutoff_date, $batch_size = null, $context = 'old' ) {
		$batch_size = ! is_null( $batch_size ) ? $batch_size : $this->batch_size;
		$cutoff     = ! is_null( $cutoff_date ) ? $cutoff_date : as_get_datetime_object( $this->month_in_seconds . ' seconds ago' );
		$lifespan   = time() - $cutoff->getTimestamp();

		if ( empty( $statuses_to_purge ) ) {
			$statuses_to_purge = $this->default_statuses_to_purge;
		}

		$deleted_actions = array();

		foreach ( $statuses_to_purge as $status ) {
			$actions_to_delete = $this->store->query_actions(
				array(
					'status'           => $status,
					'modified'         => $cutoff,
					'modified_compare' => '<=',
					'per_page'         => $batch_size,
					'orderby'          => 'none',
				)
			);

			$deleted_actions = array_merge( $deleted_actions, $this->delete_actions( $actions_to_delete, $lifespan, $context ) );
		}

		return $deleted_actions;
	}

	/**
	 * Delete actions.
	 *
	 * @param int[]  $actions_to_delete List of action IDs to delete.
	 * @param int    $lifespan Minimum scheduled age in seconds of the actions being deleted.
	 * @param string $context Context of the delete request.
	 * @return array Deleted action IDs.
	 */
	private function delete_actions( array $actions_to_delete, $lifespan = null, $context = 'old' ) {
		$deleted_actions = array();

		if ( is_null( $lifespan ) ) {
			$lifespan = $this->month_in_seconds;
		}

		foreach ( $actions_to_delete as $action_id ) {
			try {
				$this->store->delete_action( $action_id );
				$deleted_actions[] = $action_id;
			} catch ( Exception $e ) {
				/**
				 * Notify 3rd party code of exceptions when deleting a completed action older than the retention period
				 *
				 * This hook provides a way for 3rd party code to log or otherwise handle exceptions relating to their
				 * actions.
				 *
				 * @param int $action_id The scheduled actions ID in the data store
				 * @param Exception $e The exception thrown when attempting to delete the action from the data store
				 * @param int $lifespan The retention period, in seconds, for old actions
				 * @param int $count_of_actions_to_delete The number of old actions being deleted in this batch
				 * @since 2.0.0
				 */
				do_action( "action_scheduler_failed_{$context}_action_deletion", $action_id, $e, $lifespan, count( $actions_to_delete ) );
			}
		}
		return $deleted_actions;
	}

	/**
	 * Unclaim pending actions that have not been run within a given time limit.
	 *
	 * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed
	 * as a parameter is 10x the time limit used for queue processing.
	 *
	 * @param int $time_limit The number of seconds to allow a queue to run before unclaiming its pending actions. Default 300 (5 minutes).
	 */
	public function reset_timeouts( $time_limit = 300 ) {
		$timeout = apply_filters( 'action_scheduler_timeout_period', $time_limit );

		if ( $timeout < 0 ) {
			return;
		}

		$cutoff           = as_get_datetime_object( $timeout . ' seconds ago' );
		$actions_to_reset = $this->store->query_actions(
			array(
				'status'           => ActionScheduler_Store::STATUS_PENDING,
				'modified'         => $cutoff,
				'modified_compare' => '<=',
				'claimed'          => true,
				'per_page'         => $this->get_batch_size(),
				'orderby'          => 'none',
			)
		);

		foreach ( $actions_to_reset as $action_id ) {
			$this->store->unclaim_action( $action_id );
			do_action( 'action_scheduler_reset_action', $action_id );
		}
	}

	/**
	 * Mark actions that have been running for more than a given time limit as failed, based on
	 * the assumption some uncatchable and unloggable fatal error occurred during processing.
	 *
	 * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed
	 * as a parameter is 10x the time limit used for queue processing.
	 *
	 * @param int $time_limit The number of seconds to allow an action to run before it is considered to have failed. Default 300 (5 minutes).
	 */
	public function mark_failures( $time_limit = 300 ) {
		$timeout = apply_filters( 'action_scheduler_failure_period', $time_limit );

		if ( $timeout < 0 ) {
			return;
		}

		$cutoff           = as_get_datetime_object( $timeout . ' seconds ago' );
		$actions_to_reset = $this->store->query_actions(
			array(
				'status'           => ActionScheduler_Store::STATUS_RUNNING,
				'modified'         => $cutoff,
				'modified_compare' => '<=',
				'per_page'         => $this->get_batch_size(),
				'orderby'          => 'none',
			)
		);

		foreach ( $actions_to_reset as $action_id ) {
			$this->store->mark_failure( $action_id );
			do_action( 'action_scheduler_failed_action', $action_id, $timeout );
		}
	}

	/**
	 * Do all of the cleaning actions.
	 *
	 * @param int $time_limit The number of seconds to use as the timeout and failure period. Default 300 (5 minutes).
	 */
	public function clean( $time_limit = 300 ) {
		$this->delete_old_actions();
		$this->reset_timeouts( $time_limit );
		$this->mark_failures( $time_limit );
	}

	/**
	 * Get the batch size for cleaning the queue.
	 *
	 * @return int
	 */
	protected function get_batch_size() {
		/**
		 * Filter the batch size when cleaning the queue.
		 *
		 * @param int $batch_size The number of actions to clean in one batch.
		 */
		return absint( apply_filters( 'action_scheduler_cleanup_batch_size', $this->batch_size ) );
	}
}
PK     ‡ŠU]Yv^@  @  M  vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Compatibility
 */
class ActionScheduler_Compatibility {
	/**
	 * Converts a shorthand byte value to an integer byte value.
	 *
	 * Wrapper for wp_convert_hr_to_bytes(), moved to load.php in WordPress 4.6 from media.php
	 *
	 * @link https://secure.php.net/manual/en/function.ini-get.php
	 * @link https://secure.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
	 *
	 * @param string $value A (PHP ini) byte value, either shorthand or ordinary.
	 * @return int An integer byte value.
	 */
	public static function convert_hr_to_bytes( $value ) {
		if ( function_exists( 'wp_convert_hr_to_bytes' ) ) {
			return wp_convert_hr_to_bytes( $value );
		}

		$value = strtolower( trim( $value ) );
		$bytes = (int) $value;

		if ( false !== strpos( $value, 'g' ) ) {
			$bytes *= GB_IN_BYTES;
		} elseif ( false !== strpos( $value, 'm' ) ) {
			$bytes *= MB_IN_BYTES;
		} elseif ( false !== strpos( $value, 'k' ) ) {
			$bytes *= KB_IN_BYTES;
		}

		// Deal with large (float) values which run into the maximum integer size.
		return min( $bytes, PHP_INT_MAX );
	}

	/**
	 * Attempts to raise the PHP memory limit for memory intensive processes.
	 *
	 * Only allows raising the existing limit and prevents lowering it.
	 *
	 * Wrapper for wp_raise_memory_limit(), added in WordPress v4.6.0
	 *
	 * @return bool|int|string The limit that was set or false on failure.
	 */
	public static function raise_memory_limit() {
		if ( function_exists( 'wp_raise_memory_limit' ) ) {
			return wp_raise_memory_limit( 'admin' );
		}

		$current_limit     = @ini_get( 'memory_limit' ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
		$current_limit_int = self::convert_hr_to_bytes( $current_limit );

		if ( -1 === $current_limit_int ) {
			return false;
		}

		$wp_max_limit       = WP_MAX_MEMORY_LIMIT;
		$wp_max_limit_int   = self::convert_hr_to_bytes( $wp_max_limit );
		$filtered_limit     = apply_filters( 'admin_memory_limit', $wp_max_limit );
		$filtered_limit_int = self::convert_hr_to_bytes( $filtered_limit );

		// phpcs:disable WordPress.PHP.IniSet.memory_limit_Blacklisted
		// phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged

		if ( -1 === $filtered_limit_int || ( $filtered_limit_int > $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
			if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
				return $filtered_limit;
			} else {
				return false;
			}
		} elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
			if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
				return $wp_max_limit;
			} else {
				return false;
			}
		}

		// phpcs:enable

		return false;
	}

	/**
	 * Attempts to raise the PHP timeout for time intensive processes.
	 *
	 * Only allows raising the existing limit and prevents lowering it. Wrapper for wc_set_time_limit(), when available.
	 *
	 * @param int $limit The time limit in seconds.
	 */
	public static function raise_time_limit( $limit = 0 ) {
		$limit              = (int) $limit;
		$max_execution_time = (int) ini_get( 'max_execution_time' );

		// If the max execution time is already set to zero (unlimited), there is no reason to make a further change.
		if ( 0 === $max_execution_time ) {
			return;
		}

		// Whichever of $max_execution_time or $limit is higher is the amount by which we raise the time limit.
		$raise_by = 0 === $limit || $limit > $max_execution_time ? $limit : $max_execution_time;

		if ( function_exists( 'wc_set_time_limit' ) ) {
			wc_set_time_limit( $raise_by );
		} elseif ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.safe_modeDeprecatedRemoved
			@set_time_limit( $raise_by ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
		}
	}
}
PK     ‡ŠU][•‚„ì  ì  J  vendor/woocommerce/action-scheduler/classes/ActionScheduler_OptionLock.phpnu „[µü¤        <?php

/**
 * Provide a way to set simple transient locks to block behaviour
 * for up-to a given duration.
 *
 * Class ActionScheduler_OptionLock
 *
 * @since 3.0.0
 */
class ActionScheduler_OptionLock extends ActionScheduler_Lock {

	/**
	 * Set a lock using options for a given amount of time (60 seconds by default).
	 *
	 * Using an autoloaded option avoids running database queries or other resource intensive tasks
	 * on frequently triggered hooks, like 'init' or 'shutdown'.
	 *
	 * For example, ActionScheduler_QueueRunner->maybe_dispatch_async_request() uses a lock to avoid
	 * calling ActionScheduler_QueueRunner->has_maximum_concurrent_batches() every time the 'shutdown',
	 * hook is triggered, because that method calls ActionScheduler_QueueRunner->store->get_claim_count()
	 * to find the current number of claims in the database.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @bool True if lock value has changed, false if not or if set failed.
	 */
	public function set( $lock_type ) {
		global $wpdb;

		$lock_key            = $this->get_key( $lock_type );
		$existing_lock_value = $this->get_existing_lock( $lock_type );
		$new_lock_value      = $this->new_lock_value( $lock_type );

		// The lock may not exist yet, or may have been deleted.
		if ( empty( $existing_lock_value ) ) {
			return (bool) $wpdb->insert(
				$wpdb->options,
				array(
					'option_name'  => $lock_key,
					'option_value' => $new_lock_value,
					'autoload'     => 'no',
				)
			);
		}

		if ( $this->get_expiration_from( $existing_lock_value ) >= time() ) {
			return false;
		}

		// Otherwise, try to obtain the lock.
		return (bool) $wpdb->update(
			$wpdb->options,
			array( 'option_value' => $new_lock_value ),
			array(
				'option_name'  => $lock_key,
				'option_value' => $existing_lock_value,
			)
		);
	}

	/**
	 * If a lock is set, return the timestamp it was set to expiry.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
	 */
	public function get_expiration( $lock_type ) {
		return $this->get_expiration_from( $this->get_existing_lock( $lock_type ) );
	}

	/**
	 * Given the lock string, derives the lock expiration timestamp (or false if it cannot be determined).
	 *
	 * @param string $lock_value String containing a timestamp, or pipe-separated combination of unique value and timestamp.
	 *
	 * @return false|int
	 */
	private function get_expiration_from( $lock_value ) {
		$lock_string = explode( '|', $lock_value );

		// Old style lock?
		if ( count( $lock_string ) === 1 && is_numeric( $lock_string[0] ) ) {
			return (int) $lock_string[0];
		}

		// New style lock?
		if ( count( $lock_string ) === 2 && is_numeric( $lock_string[1] ) ) {
			return (int) $lock_string[1];
		}

		return false;
	}

	/**
	 * Get the key to use for storing the lock in the transient
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return string
	 */
	protected function get_key( $lock_type ) {
		return sprintf( 'action_scheduler_lock_%s', $lock_type );
	}

	/**
	 * Supplies the existing lock value, or an empty string if not set.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 *
	 * @return string
	 */
	private function get_existing_lock( $lock_type ) {
		global $wpdb;

		// Now grab the existing lock value, if there is one.
		return (string) $wpdb->get_var(
			$wpdb->prepare(
				"SELECT option_value FROM $wpdb->options WHERE option_name = %s",
				$this->get_key( $lock_type )
			)
		);
	}

	/**
	 * Supplies a lock value consisting of a unique value and the current timestamp, which are separated by a pipe
	 * character.
	 *
	 * Example: (string) "649de012e6b262.09774912|1688068114"
	 *
	 * @param string $lock_type A string to identify different lock types.
	 *
	 * @return string
	 */
	private function new_lock_value( $lock_type ) {
		return uniqid( '', true ) . '|' . ( time() + $this->get_duration( $lock_type ) );
	}
}
PK     ‡ŠU]_MŒ»j  j  H  vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Versions
 */
class ActionScheduler_Versions {
	/**
	 * ActionScheduler_Versions instance.
	 *
	 * @var ActionScheduler_Versions
	 */
	private static $instance = null;

	/**
	 * Versions.
	 *
	 * @var array<string, callable>
	 */
	private $versions = array();

	/**
	 * Registered sources.
	 *
	 * @var array<string, string>
	 */
	private $sources = array();

	/**
	 * Register version's callback.
	 *
	 * @param string   $version_string          Action Scheduler version.
	 * @param callable $initialization_callback Callback to initialize the version.
	 */
	public function register( $version_string, $initialization_callback ) {
		if ( isset( $this->versions[ $version_string ] ) ) {
			return false;
		}

		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
		$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
		$source    = $backtrace[0]['file'];

		$this->versions[ $version_string ] = $initialization_callback;
		$this->sources[ $source ]          = $version_string;
		return true;
	}

	/**
	 * Get all versions.
	 */
	public function get_versions() {
		return $this->versions;
	}

	/**
	 * Get registered sources.
	 *
	 * Use with caution: this method is only available as of Action Scheduler's 3.9.1
	 * release and, owing to the way Action Scheduler is loaded, it's possible that the
	 * class definition used at runtime will belong to an earlier version.
	 *
	 * @since 3.9.1
	 *
	 * @return array<string, string>
	 */
	public function get_sources() {
		return $this->sources;
	}

	/**
	 * Get latest version registered.
	 */
	public function latest_version() {
		$keys = array_keys( $this->versions );
		if ( empty( $keys ) ) {
			return false;
		}
		uasort( $keys, 'version_compare' );
		return end( $keys );
	}

	/**
	 * Get callback for latest registered version.
	 */
	public function latest_version_callback() {
		$latest = $this->latest_version();

		if ( empty( $latest ) || ! isset( $this->versions[ $latest ] ) ) {
			return '__return_null';
		}

		return $this->versions[ $latest ];
	}

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_Versions
	 * @codeCoverageIgnore
	 */
	public static function instance() {
		if ( empty( self::$instance ) ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 * Initialize.
	 *
	 * @codeCoverageIgnore
	 */
	public static function initialize_latest_version() {
		$self = self::instance();
		call_user_func( $self->latest_version_callback() );
	}

	/**
	 * Returns information about the plugin or theme which contains the current active version
	 * of Action Scheduler.
	 *
	 * If this cannot be determined, or if Action Scheduler is being loaded via some other
	 * method, then it will return an empty array. Otherwise, if populated, the array will
	 * look like the following:
	 *
	 *     [
	 *         'type' => 'plugin', # or 'theme'
	 *         'name' => 'Name',
	 *     ]
	 *
	 * @deprecated 3.9.2 Use ActionScheduler_SystemInformation::active_source().
	 *
	 * @return array
	 */
	public function active_source(): array {
		_deprecated_function( __METHOD__, '3.9.2', 'ActionScheduler_SystemInformation::active_source()' );
		return ActionScheduler_SystemInformation::active_source();
	}

	/**
	 * Returns the directory path for the currently active installation of Action Scheduler.
	 *
	 * @deprecated 3.9.2 Use ActionScheduler_SystemInformation::active_source_path().
	 *
	 * @return string
	 */
	public function active_source_path(): string {
		_deprecated_function( __METHOD__, '3.9.2', 'ActionScheduler_SystemInformation::active_source_path()' );
		return ActionScheduler_SystemInformation::active_source_path();
	}
}
PK     ‡ŠU]ô)K[Ÿ  Ÿ  N  vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wcSystemStatus
 */
class ActionScheduler_wcSystemStatus {

	/**
	 * The active data stores
	 *
	 * @var ActionScheduler_Store
	 */
	protected $store;

	/**
	 * Constructor method for ActionScheduler_wcSystemStatus.
	 *
	 * @param ActionScheduler_Store $store Active store object.
	 *
	 * @return void
	 */
	public function __construct( $store ) {
		$this->store = $store;
	}

	/**
	 * Display action data, including number of actions grouped by status and the oldest & newest action in each status.
	 *
	 * Helpful to identify issues, like a clogged queue.
	 */
	public function render() {
		$action_counts     = $this->store->action_counts();
		$status_labels     = $this->store->get_status_labels();
		$oldest_and_newest = $this->get_oldest_and_newest( array_keys( $status_labels ) );

		$this->get_template( $status_labels, $action_counts, $oldest_and_newest );
	}

	/**
	 * Get oldest and newest scheduled dates for a given set of statuses.
	 *
	 * @param array $status_keys Set of statuses to find oldest & newest action for.
	 * @return array
	 */
	protected function get_oldest_and_newest( $status_keys ) {

		$oldest_and_newest = array();

		foreach ( $status_keys as $status ) {
			$oldest_and_newest[ $status ] = array(
				'oldest' => '&ndash;',
				'newest' => '&ndash;',
			);

			if ( 'in-progress' === $status ) {
				continue;
			}

			$oldest_and_newest[ $status ]['oldest'] = $this->get_action_status_date( $status, 'oldest' );
			$oldest_and_newest[ $status ]['newest'] = $this->get_action_status_date( $status, 'newest' );
		}

		return $oldest_and_newest;
	}

	/**
	 * Get oldest or newest scheduled date for a given status.
	 *
	 * @param string $status Action status label/name string.
	 * @param string $date_type Oldest or Newest.
	 * @return DateTime
	 */
	protected function get_action_status_date( $status, $date_type = 'oldest' ) {

		$order = 'oldest' === $date_type ? 'ASC' : 'DESC';

		$action = $this->store->query_actions(
			array(
				'status'   => $status,
				'per_page' => 1,
				'order'    => $order,
			)
		);

		if ( ! empty( $action ) ) {
			$date_object = $this->store->get_date( $action[0] );
			$action_date = $date_object->format( 'Y-m-d H:i:s O' );
		} else {
			$action_date = '&ndash;';
		}

		return $action_date;
	}

	/**
	 * Get oldest or newest scheduled date for a given status.
	 *
	 * @param array $status_labels Set of statuses to find oldest & newest action for.
	 * @param array $action_counts Number of actions grouped by status.
	 * @param array $oldest_and_newest Date of the oldest and newest action with each status.
	 */
	protected function get_template( $status_labels, $action_counts, $oldest_and_newest ) {
		$as_version   = ActionScheduler_Versions::instance()->latest_version();
		$as_datastore = get_class( ActionScheduler_Store::instance() );
		?>

		<table class="wc_status_table widefat" cellspacing="0">
			<thead>
				<tr>
					<th colspan="5" data-export-label="Action Scheduler"><h2><?php esc_html_e( 'Action Scheduler', 'action-scheduler' ); ?><?php echo wc_help_tip( esc_html__( 'This section shows details of Action Scheduler.', 'action-scheduler' ) ); ?></h2></th>
				</tr>
				<tr>
					<td colspan="2" data-export-label="Version"><?php esc_html_e( 'Version:', 'action-scheduler' ); ?></td>
					<td colspan="3"><?php echo esc_html( $as_version ); ?></td>
				</tr>
				<tr>
					<td colspan="2" data-export-label="Data store"><?php esc_html_e( 'Data store:', 'action-scheduler' ); ?></td>
					<td colspan="3"><?php echo esc_html( $as_datastore ); ?></td>
				</tr>
				<tr>
					<td><strong><?php esc_html_e( 'Action Status', 'action-scheduler' ); ?></strong></td>
					<td class="help">&nbsp;</td>
					<td><strong><?php esc_html_e( 'Count', 'action-scheduler' ); ?></strong></td>
					<td><strong><?php esc_html_e( 'Oldest Scheduled Date', 'action-scheduler' ); ?></strong></td>
					<td><strong><?php esc_html_e( 'Newest Scheduled Date', 'action-scheduler' ); ?></strong></td>
				</tr>
			</thead>
			<tbody>
				<?php
				foreach ( $action_counts as $status => $count ) {
					// WC uses the 3rd column for export, so we need to display more data in that (hidden when viewed as part of the table) and add an empty 2nd column.
					printf(
						'<tr><td>%1$s</td><td>&nbsp;</td><td>%2$s<span style="display: none;">, Oldest: %3$s, Newest: %4$s</span></td><td>%3$s</td><td>%4$s</td></tr>',
						esc_html( $status_labels[ $status ] ),
						esc_html( number_format_i18n( $count ) ),
						esc_html( $oldest_and_newest[ $status ]['oldest'] ),
						esc_html( $oldest_and_newest[ $status ]['newest'] )
					);
				}
				?>
			</tbody>
		</table>

		<?php
	}

	/**
	 * Is triggered when invoking inaccessible methods in an object context.
	 *
	 * @param string $name Name of method called.
	 * @param array  $arguments Parameters to invoke the method with.
	 *
	 * @return mixed
	 * @link https://php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods
	 */
	public function __call( $name, $arguments ) {
		switch ( $name ) {
			case 'print':
				_deprecated_function( __CLASS__ . '::print()', '2.2.4', __CLASS__ . '::render()' );
				return call_user_func_array( array( $this, 'render' ), $arguments );
		}

		return null;
	}
}
PK     ‡ŠU]C;a@3  3  X  vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_RecurringActionScheduler
 *
 * This class ensures that the `action_scheduler_ensure_recurring_actions` hook is triggered on a daily interval. This
 * simplifies the process for other plugins to register their recurring actions without requiring each plugin to query
 * or schedule actions independently on every request.
 */
class ActionScheduler_RecurringActionScheduler {

	/**
	 * @var string The hook of the scheduled recurring action that is run to trigger the
	 *      `action_scheduler_ensure_recurring_actions` hook that plugins should use.  We can't directly have the
	 *      scheduled action hook be the hook plugins should use because the actions will show as failed if no plugin
	 *      was actively hooked into it.
	 */
	private const RUN_SCHEDULED_RECURRING_ACTIONS_HOOK = 'action_scheduler_run_recurring_actions_schedule_hook';

	/**
	 * Initialize the instance.  Should only be run on a single instance per request.
	 *
	 * @return void
	 */
	public function init(): void {
		add_action( self::RUN_SCHEDULED_RECURRING_ACTIONS_HOOK, array( $this, 'run_recurring_scheduler_hook' ) );
		if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
			add_action( 'action_scheduler_init', array( $this, 'schedule_recurring_scheduler_hook' ) );
		}
	}

	/**
	 * Schedule the recurring `action_scheduler_ensure_recurring_actions` action if not already scheduled.
	 *
	 * @return void
	 */
	public function schedule_recurring_scheduler_hook(): void {
		if ( false === wp_cache_get( 'as_is_ensure_recurring_actions_scheduled' ) ) {
			if ( ! as_has_scheduled_action( self::RUN_SCHEDULED_RECURRING_ACTIONS_HOOK ) ) {
				as_schedule_recurring_action(
					time(),
					DAY_IN_SECONDS,
					self::RUN_SCHEDULED_RECURRING_ACTIONS_HOOK,
					[],
					'ActionScheduler',
					true,
					20
				);
			}
			wp_cache_set( 'as_is_ensure_recurring_actions_scheduled', true, HOUR_IN_SECONDS );
		}
	}

	/**
	 * Trigger the hook to allow other plugins to schedule their recurring actions.
	 *
	 * @return void
	 */
	public function run_recurring_scheduler_hook(): void {
		/**
		 * Fires to allow extensions to verify and ensure their recurring actions are scheduled.
		 *
		 * This action is scheduled to trigger once every 24 hrs for the purpose of having 3rd party plugins verify that
		 * any previously scheduled recurring actions are still scheduled. Because recurring actions could stop getting
		 * rescheduled by default due to excessive failures, database issues, or other interruptions, extensions can use
		 * this hook to check for the existence of their recurring actions and reschedule them if necessary.
		 *
		 * Example usage:
		 *
		 * add_action('action_scheduler_ensure_recurring_actions', function() {
		 *     // Check if the recurring action is scheduled, and reschedule if missing.
		 *     if ( ! as_has_scheduled_action('my_recurring_action') ) {
		 *         as_schedule_recurring_action( time(), HOUR_IN_SECONDS, 'my_recurring_action' );
		 *     }
		 * });
		 *
		 * @since 3.9.3
		 */
		do_action( 'action_scheduler_ensure_recurring_actions' );
	}
}
PK     ‡ŠU]O§£
  
  Q  vendor/woocommerce/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_FatalErrorMonitor
 */
class ActionScheduler_FatalErrorMonitor {

	/**
	 * ActionScheduler_ActionClaim instance.
	 *
	 * @var ActionScheduler_ActionClaim
	 */
	private $claim = null;

	/**
	 * ActionScheduler_Store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $store = null;

	/**
	 * Current action's ID.
	 *
	 * @var int
	 */
	private $action_id = 0;

	/**
	 * Construct.
	 *
	 * @param ActionScheduler_Store $store Action store.
	 */
	public function __construct( ActionScheduler_Store $store ) {
		$this->store = $store;
	}

	/**
	 * Start monitoring.
	 *
	 * @param ActionScheduler_ActionClaim $claim Claimed actions.
	 */
	public function attach( ActionScheduler_ActionClaim $claim ) {
		$this->claim = $claim;
		add_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) );
		add_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0, 1 );
		add_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0, 0 );
		add_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0, 0 );
		add_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0, 0 );
	}

	/**
	 * Stop monitoring.
	 */
	public function detach() {
		$this->claim = null;
		$this->untrack_action();
		remove_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) );
		remove_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0 );
		remove_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0 );
		remove_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0 );
		remove_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0 );
	}

	/**
	 * Track specified action.
	 *
	 * @param int $action_id Action ID to track.
	 */
	public function track_current_action( $action_id ) {
		$this->action_id = $action_id;
	}

	/**
	 * Un-track action.
	 */
	public function untrack_action() {
		$this->action_id = 0;
	}

	/**
	 * Handle unexpected shutdown.
	 */
	public function handle_unexpected_shutdown() {
		$error = error_get_last();

		if ( $error ) {
			if ( in_array( $error['type'], array( E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR ), true ) ) {
				if ( ! empty( $this->action_id ) ) {
					$this->store->mark_failure( $this->action_id );
					do_action( 'action_scheduler_unexpected_shutdown', $this->action_id, $error );
				}
			}

			$this->store->release_claim( $this->claim );
		}
	}
}
PK     ˆŠU]×‹žÛÏ  Ï  V  vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.phpnu „[µü¤        <?php

/**
 * InvalidAction Exception.
 *
 * Used for identifying actions that are invalid in some way.
 *
 * @package ActionScheduler
 */
class ActionScheduler_InvalidActionException extends \InvalidArgumentException implements ActionScheduler_Exception {

	/**
	 * Create a new exception when the action's schedule cannot be fetched.
	 *
	 * @param string $action_id The action ID with bad args.
	 * @param mixed  $schedule  Passed schedule.
	 * @return static
	 */
	public static function from_schedule( $action_id, $schedule ) {
		$message = sprintf(
			/* translators: 1: action ID 2: schedule */
			__( 'Action [%1$s] has an invalid schedule: %2$s', 'action-scheduler' ),
			$action_id,
			var_export( $schedule, true ) // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		);

		return new static( $message );
	}

	/**
	 * Create a new exception when the action's args cannot be decoded to an array.
	 *
	 * @param string $action_id The action ID with bad args.
	 * @param mixed  $args      Passed arguments.
	 * @return static
	 */
	public static function from_decoding_args( $action_id, $args = array() ) {
		$message = sprintf(
			/* translators: 1: action ID 2: arguments */
			__( 'Action [%1$s] has invalid arguments. It cannot be JSON decoded to an array. $args = %2$s', 'action-scheduler' ),
			$action_id,
			var_export( $args, true ) // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		);

		return new static( $message );
	}
}
PK     ˆŠU]¨ÝÊ²ø%  ø%  K  vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_QueueRunner
 */
class ActionScheduler_QueueRunner extends ActionScheduler_Abstract_QueueRunner {
	const WP_CRON_HOOK = 'action_scheduler_run_queue';

	const WP_CRON_SCHEDULE = 'every_minute';

	/**
	 * ActionScheduler_AsyncRequest_QueueRunner instance.
	 *
	 * @var ActionScheduler_AsyncRequest_QueueRunner
	 */
	protected $async_request;

	/**
	 * ActionScheduler_QueueRunner instance.
	 *
	 * @var ActionScheduler_QueueRunner
	 */
	private static $runner = null;

	/**
	 * Number of processed actions.
	 *
	 * @var int
	 */
	private $processed_actions_count = 0;

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_QueueRunner
	 * @codeCoverageIgnore
	 */
	public static function instance() {
		if ( empty( self::$runner ) ) {
			$class        = apply_filters( 'action_scheduler_queue_runner_class', 'ActionScheduler_QueueRunner' );
			self::$runner = new $class();
		}

		return self::$runner;
	}

	/**
	 * ActionScheduler_QueueRunner constructor.
	 *
	 * @param ActionScheduler_Store|null                    $store Store object.
	 * @param ActionScheduler_FatalErrorMonitor|null        $monitor Monitor object.
	 * @param ActionScheduler_QueueCleaner|null             $cleaner Cleaner object.
	 * @param ActionScheduler_AsyncRequest_QueueRunner|null $async_request Async request runner object.
	 */
	public function __construct( ?ActionScheduler_Store $store = null, ?ActionScheduler_FatalErrorMonitor $monitor = null, ?ActionScheduler_QueueCleaner $cleaner = null, ?ActionScheduler_AsyncRequest_QueueRunner $async_request = null ) {
		parent::__construct( $store, $monitor, $cleaner );

		if ( is_null( $async_request ) ) {
			$async_request = new ActionScheduler_AsyncRequest_QueueRunner( $this->store );
		}

		$this->async_request = $async_request;
	}

	/**
	 * Initialize.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {

		add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) ); // phpcs:ignore WordPress.WP.CronInterval.CronSchedulesInterval

		// Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param.
		$next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
		if ( $next_timestamp ) {
			wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
		}

		$cron_context = array( 'WP Cron' );

		if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
			$schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
			wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
		}

		add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) );
		$this->hook_dispatch_async_request();
	}

	/**
	 * Hook check for dispatching an async request.
	 */
	public function hook_dispatch_async_request() {
		add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) );
	}

	/**
	 * Unhook check for dispatching an async request.
	 */
	public function unhook_dispatch_async_request() {
		remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) );
	}

	/**
	 * Check if we should dispatch an async request to process actions.
	 *
	 * This method is attached to 'shutdown', so is called frequently. To avoid slowing down
	 * the site, it mitigates the work performed in each request by:
	 * 1. checking if it's in the admin context and then
	 * 2. haven't run on the 'shutdown' hook within the lock time (60 seconds by default)
	 * 3. haven't exceeded the number of allowed batches.
	 *
	 * The order of these checks is important, because they run from a check on a value:
	 * 1. in memory - is_admin() maps to $GLOBALS or the WP_ADMIN constant
	 * 2. in memory - transients use autoloaded options by default
	 * 3. from a database query - has_maximum_concurrent_batches() run the query
	 *    $this->store->get_claim_count() to find the current number of claims in the DB.
	 *
	 * If all of these conditions are met, then we request an async runner check whether it
	 * should dispatch a request to process pending actions.
	 */
	public function maybe_dispatch_async_request() {
		// Only start an async queue at most once every 60 seconds.
		if (
			is_admin()
			&& ! ActionScheduler::lock()->is_locked( 'async-request-runner' )
			&& ActionScheduler::lock()->set( 'async-request-runner' )
		) {
			$this->async_request->maybe_dispatch();
		}
	}

	/**
	 * Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. 'action_scheduler_run_queue'
	 *
	 * The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0
	 * that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context
	 * passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK,
	 * should set a context as the first parameter. For an example of this, refer to the code seen in
	 *
	 * @see ActionScheduler_AsyncRequest_QueueRunner::handle()
	 *
	 * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
	 *        Generally, this should be capitalised and not localised as it's a proper noun.
	 * @return int The number of actions processed.
	 */
	public function run( $context = 'WP Cron' ) {
		ActionScheduler_Compatibility::raise_memory_limit();
		ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() );
		do_action( 'action_scheduler_before_process_queue' );
		$this->run_cleanup();

		$this->processed_actions_count = 0;
		if ( false === $this->has_maximum_concurrent_batches() ) {
			do {
				$batch_size                     = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 );
				$processed_actions_in_batch     = $this->do_batch( $batch_size, $context );
				$this->processed_actions_count += $processed_actions_in_batch;
			} while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $this->processed_actions_count ) ); // keep going until we run out of actions, time, or memory.
		}

		do_action( 'action_scheduler_after_process_queue' );
		return $this->processed_actions_count;
	}

	/**
	 * Process a batch of actions pending in the queue.
	 *
	 * Actions are processed by claiming a set of pending actions then processing each one until either the batch
	 * size is completed, or memory or time limits are reached, defined by @see $this->batch_limits_exceeded().
	 *
	 * @param int    $size The maximum number of actions to process in the batch.
	 * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
	 *                        Generally, this should be capitalised and not localised as it's a proper noun.
	 * @return int The number of actions processed.
	 */
	protected function do_batch( $size = 100, $context = '' ) {
		$claim = $this->store->stake_claim( $size );
		$this->monitor->attach( $claim );
		$processed_actions = 0;

		foreach ( $claim->get_actions() as $action_id ) {
			// bail if we lost the claim.
			if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ), true ) ) {
				break;
			}
			$this->process_action( $action_id, $context );
			$processed_actions++;

			if ( $this->batch_limits_exceeded( $processed_actions + $this->processed_actions_count ) ) {
				break;
			}
		}
		$this->store->release_claim( $claim );
		$this->monitor->detach();
		$this->clear_caches();
		return $processed_actions;
	}

	/**
	 * Flush the cache if possible (intended for use after a batch of actions has been processed).
	 *
	 * This is useful because running large batches can eat up memory and because invalid data can accrue in the
	 * runtime cache, which may lead to unexpected results.
	 */
	protected function clear_caches() {
		/*
		 * Calling wp_cache_flush_runtime() lets us clear the runtime cache without invalidating the external object
		 * cache, so we will always prefer this method (as compared to calling wp_cache_flush()) when it is available.
		 *
		 * However, this function was only introduced in WordPress 6.0. Additionally, the preferred way of detecting if
		 * it is supported changed in WordPress 6.1 so we use two different methods to decide if we should utilize it.
		 */
		$flushing_runtime_cache_explicitly_supported = function_exists( 'wp_cache_supports' ) && wp_cache_supports( 'flush_runtime' );
		$flushing_runtime_cache_implicitly_supported = ! function_exists( 'wp_cache_supports' ) && function_exists( 'wp_cache_flush_runtime' );

		if ( $flushing_runtime_cache_explicitly_supported || $flushing_runtime_cache_implicitly_supported ) {
			wp_cache_flush_runtime();
		} elseif (
			! wp_using_ext_object_cache()
			/**
			 * When an external object cache is in use, and when wp_cache_flush_runtime() is not available, then
			 * normally the cache will not be flushed after processing a batch of actions (to avoid a performance
			 * penalty for other processes).
			 *
			 * This filter makes it possible to override this behavior and always flush the cache, even if an external
			 * object cache is in use.
			 *
			 * @since 1.0
			 *
			 * @param bool $flush_cache If the cache should be flushed.
			 */
			|| apply_filters( 'action_scheduler_queue_runner_flush_cache', false )
		) {
			wp_cache_flush();
		}
	}

	/**
	 * Add schedule to WP cron.
	 *
	 * @param array<string, array<string, int|string>> $schedules Schedules.
	 * @return array<string, array<string, int|string>>
	 */
	public function add_wp_cron_schedule( $schedules ) {
		$schedules['every_minute'] = array(
			'interval' => 60, // in seconds.
			'display'  => __( 'Every minute', 'action-scheduler' ),
		);

		return $schedules;
	}
}
PK     ˆŠU]ð¼
¯?  ¯?  M  vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_ActionFactory
 */
class ActionScheduler_ActionFactory {

	/**
	 * Return stored actions for given params.
	 *
	 * @param string                        $status The action's status in the data store.
	 * @param string                        $hook The hook to trigger when this action runs.
	 * @param array                         $args Args to pass to callbacks when the hook is triggered.
	 * @param ActionScheduler_Schedule|null $schedule The action's schedule.
	 * @param string                        $group A group to put the action in.
	 * phpcs:ignore Squiz.Commenting.FunctionComment.ExtraParamComment
	 * @param int                           $priority The action priority.
	 *
	 * @return ActionScheduler_Action An instance of the stored action.
	 */
	public function get_stored_action( $status, $hook, array $args = array(), ?ActionScheduler_Schedule $schedule = null, $group = '' ) {
		// The 6th parameter ($priority) is not formally declared in the method signature to maintain compatibility with
		// third-party subclasses created before this param was added.
		$priority = func_num_args() >= 6 ? (int) func_get_arg( 5 ) : 10;

		switch ( $status ) {
			case ActionScheduler_Store::STATUS_PENDING:
				$action_class = 'ActionScheduler_Action';
				break;
			case ActionScheduler_Store::STATUS_CANCELED:
				$action_class = 'ActionScheduler_CanceledAction';
				if ( ! is_null( $schedule ) && ! is_a( $schedule, 'ActionScheduler_CanceledSchedule' ) && ! is_a( $schedule, 'ActionScheduler_NullSchedule' ) ) {
					$schedule = new ActionScheduler_CanceledSchedule( $schedule->get_date() );
				}
				break;
			default:
				$action_class = 'ActionScheduler_FinishedAction';
				break;
		}

		$action_class = apply_filters( 'action_scheduler_stored_action_class', $action_class, $status, $hook, $args, $schedule, $group );

		$action = new $action_class( $hook, $args, $schedule, $group );
		$action->set_priority( $priority );

		/**
		 * Allow 3rd party code to change the instantiated action for a given hook, args, schedule and group.
		 *
		 * @param ActionScheduler_Action   $action The instantiated action.
		 * @param string                   $hook The instantiated action's hook.
		 * @param array                    $args The instantiated action's args.
		 * @param ActionScheduler_Schedule $schedule The instantiated action's schedule.
		 * @param string                   $group The instantiated action's group.
		 * @param int                      $priority The action priority.
		 */
		return apply_filters( 'action_scheduler_stored_action_instance', $action, $hook, $args, $schedule, $group, $priority );
	}

	/**
	 * Enqueue an action to run one time, as soon as possible (rather a specific scheduled time).
	 *
	 * This method creates a new action using the NullSchedule. In practice, this results in an action scheduled to
	 * execute "now". Therefore, it will generally run as soon as possible but is not prioritized ahead of other actions
	 * that are already past-due.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param string $group A group to put the action in.
	 *
	 * @return int The ID of the stored action.
	 */
	public function async( $hook, $args = array(), $group = '' ) {
		return $this->async_unique( $hook, $args, $group, false );
	}

	/**
	 * Same as async, but also supports $unique param.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param string $group A group to put the action in.
	 * @param bool   $unique Whether to ensure the action is unique.
	 *
	 * @return int The ID of the stored action.
	 */
	public function async_unique( $hook, $args = array(), $group = '', $unique = true ) {
		$schedule = new ActionScheduler_NullSchedule();
		$action   = new ActionScheduler_Action( $hook, $args, $schedule, $group );
		return $unique ? $this->store_unique_action( $action, $unique ) : $this->store( $action );
	}

	/**
	 * Create single action.
	 *
	 * @param string $hook  The hook to trigger when this action runs.
	 * @param array  $args  Args to pass when the hook is triggered.
	 * @param int    $when  Unix timestamp when the action will run.
	 * @param string $group A group to put the action in.
	 *
	 * @return int The ID of the stored action.
	 */
	public function single( $hook, $args = array(), $when = null, $group = '' ) {
		return $this->single_unique( $hook, $args, $when, $group, false );
	}

	/**
	 * Create single action only if there is no pending or running action with same name and params.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param int    $when Unix timestamp when the action will run.
	 * @param string $group A group to put the action in.
	 * @param bool   $unique Whether action scheduled should be unique.
	 *
	 * @return int The ID of the stored action.
	 */
	public function single_unique( $hook, $args = array(), $when = null, $group = '', $unique = true ) {
		$date     = as_get_datetime_object( $when );
		$schedule = new ActionScheduler_SimpleSchedule( $date );
		$action   = new ActionScheduler_Action( $hook, $args, $schedule, $group );
		return $unique ? $this->store_unique_action( $action ) : $this->store( $action );
	}

	/**
	 * Create the first instance of an action recurring on a given interval.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param int    $first Unix timestamp for the first run.
	 * @param int    $interval Seconds between runs.
	 * @param string $group A group to put the action in.
	 *
	 * @return int The ID of the stored action.
	 */
	public function recurring( $hook, $args = array(), $first = null, $interval = null, $group = '' ) {
		return $this->recurring_unique( $hook, $args, $first, $interval, $group, false );
	}

	/**
	 * Create the first instance of an action recurring on a given interval only if there is no pending or running action with same name and params.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param int    $first Unix timestamp for the first run.
	 * @param int    $interval Seconds between runs.
	 * @param string $group A group to put the action in.
	 * @param bool   $unique Whether action scheduled should be unique.
	 *
	 * @return int The ID of the stored action.
	 */
	public function recurring_unique( $hook, $args = array(), $first = null, $interval = null, $group = '', $unique = true ) {
		if ( empty( $interval ) ) {
			return $this->single_unique( $hook, $args, $first, $group, $unique );
		}
		$date     = as_get_datetime_object( $first );
		$schedule = new ActionScheduler_IntervalSchedule( $date, $interval );
		$action   = new ActionScheduler_Action( $hook, $args, $schedule, $group );
		return $unique ? $this->store_unique_action( $action ) : $this->store( $action );
	}

	/**
	 * Create the first instance of an action recurring on a Cron schedule.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param int    $base_timestamp The first instance of the action will be scheduled
	 *        to run at a time calculated after this timestamp matching the cron
	 *        expression. This can be used to delay the first instance of the action.
	 * @param int    $schedule A cron definition string.
	 * @param string $group A group to put the action in.
	 *
	 * @return int The ID of the stored action.
	 */
	public function cron( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '' ) {
		return $this->cron_unique( $hook, $args, $base_timestamp, $schedule, $group, false );
	}


	/**
	 * Create the first instance of an action recurring on a Cron schedule only if there is no pending or running action with same name and params.
	 *
	 * @param string $hook The hook to trigger when this action runs.
	 * @param array  $args Args to pass when the hook is triggered.
	 * @param int    $base_timestamp The first instance of the action will be scheduled
	 *        to run at a time calculated after this timestamp matching the cron
	 *        expression. This can be used to delay the first instance of the action.
	 * @param int    $schedule A cron definition string.
	 * @param string $group A group to put the action in.
	 * @param bool   $unique Whether action scheduled should be unique.
	 *
	 * @return int The ID of the stored action.
	 **/
	public function cron_unique( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '', $unique = true ) {
		if ( empty( $schedule ) ) {
			return $this->single_unique( $hook, $args, $base_timestamp, $group, $unique );
		}
		$date     = as_get_datetime_object( $base_timestamp );
		$cron     = CronExpression::factory( $schedule );
		$schedule = new ActionScheduler_CronSchedule( $date, $cron );
		$action   = new ActionScheduler_Action( $hook, $args, $schedule, $group );
		return $unique ? $this->store_unique_action( $action ) : $this->store( $action );
	}

	/**
	 * Create a successive instance of a recurring or cron action.
	 *
	 * Importantly, the action will be rescheduled to run based on the current date/time.
	 * That means when the action is scheduled to run in the past, the next scheduled date
	 * will be pushed forward. For example, if a recurring action set to run every hour
	 * was scheduled to run 5 seconds ago, it will be next scheduled for 1 hour in the
	 * future, which is 1 hour and 5 seconds from when it was last scheduled to run.
	 *
	 * Alternatively, if the action is scheduled to run in the future, and is run early,
	 * likely via manual intervention, then its schedule will change based on the time now.
	 * For example, if a recurring action set to run every day, and is run 12 hours early,
	 * it will run again in 24 hours, not 36 hours.
	 *
	 * This slippage is less of an issue with Cron actions, as the specific run time can
	 * be set for them to run, e.g. 1am each day. In those cases, and entire period would
	 * need to be missed before there was any change is scheduled, e.g. in the case of an
	 * action scheduled for 1am each day, the action would need to run an entire day late.
	 *
	 * @param ActionScheduler_Action $action The existing action.
	 *
	 * @return string The ID of the stored action
	 * @throws InvalidArgumentException If $action is not a recurring action.
	 */
	public function repeat( $action ) {
		$schedule = $action->get_schedule();
		$next     = $schedule->get_next( as_get_datetime_object() );

		if ( is_null( $next ) || ! $schedule->is_recurring() ) {
			throw new InvalidArgumentException( __( 'Invalid action - must be a recurring action.', 'action-scheduler' ) );
		}

		$schedule_class = get_class( $schedule );
		$new_schedule   = new $schedule( $next, $schedule->get_recurrence(), $schedule->get_first_date() );
		$new_action     = new ActionScheduler_Action( $action->get_hook(), $action->get_args(), $new_schedule, $action->get_group() );
		$new_action->set_priority( $action->get_priority() );
		return $this->store( $new_action );
	}

	/**
	 * Creates a scheduled action.
	 *
	 * This general purpose method can be used in place of specific methods such as async(),
	 * async_unique(), single() or single_unique(), etc.
	 *
	 * @internal Not intended for public use, should not be overridden by subclasses.
	 *
	 * @param array $options {
	 *     Describes the action we wish to schedule.
	 *
	 *     @type string     $type      Must be one of 'async', 'cron', 'recurring', or 'single'.
	 *     @type string     $hook      The hook to be executed.
	 *     @type array      $arguments Arguments to be passed to the callback.
	 *     @type string     $group     The action group.
	 *     @type bool       $unique    If the action should be unique.
	 *     @type int        $when      Timestamp. Indicates when the action, or first instance of the action in the case
	 *                                 of recurring or cron actions, becomes due.
	 *     @type int|string $pattern   Recurrence pattern. This is either an interval in seconds for recurring actions
	 *                                 or a cron expression for cron actions.
	 *     @type int        $priority  Lower values means higher priority. Should be in the range 0-255.
	 * }
	 *
	 * @return int The action ID. Zero if there was an error scheduling the action.
	 */
	public function create( array $options = array() ) {
		$defaults = array(
			'type'      => 'single',
			'hook'      => '',
			'arguments' => array(),
			'group'     => '',
			'unique'    => false,
			'when'      => time(),
			'pattern'   => null,
			'priority'  => 10,
		);

		$options = array_merge( $defaults, $options );

		// Cron/recurring actions without a pattern are treated as single actions (this gives calling code the ability
		// to use functions like as_schedule_recurring_action() to schedule recurring as well as single actions).
		if ( ( 'cron' === $options['type'] || 'recurring' === $options['type'] ) && empty( $options['pattern'] ) ) {
			$options['type'] = 'single';
		}

		switch ( $options['type'] ) {
			case 'async':
				$schedule = new ActionScheduler_NullSchedule();
				break;

			case 'cron':
				$date     = as_get_datetime_object( $options['when'] );
				$cron     = CronExpression::factory( $options['pattern'] );
				$schedule = new ActionScheduler_CronSchedule( $date, $cron );
				break;

			case 'recurring':
				$date     = as_get_datetime_object( $options['when'] );
				$schedule = new ActionScheduler_IntervalSchedule( $date, $options['pattern'] );
				break;

			case 'single':
				$date     = as_get_datetime_object( $options['when'] );
				$schedule = new ActionScheduler_SimpleSchedule( $date );
				break;

			default:
				// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
				error_log( "Unknown action type '{$options['type']}' specified when trying to create an action for '{$options['hook']}'." );
				return 0;
		}

		$action = new ActionScheduler_Action( $options['hook'], $options['arguments'], $schedule, $options['group'] );
		$action->set_priority( $options['priority'] );

		$action_id = 0;
		try {
			$action_id = $options['unique'] ? $this->store_unique_action( $action ) : $this->store( $action );
		} catch ( Exception $e ) {
			// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
			error_log(
				sprintf(
					/* translators: %1$s is the name of the hook to be enqueued, %2$s is the exception message. */
					__( 'Caught exception while enqueuing action "%1$s": %2$s', 'action-scheduler' ),
					$options['hook'],
					$e->getMessage()
				)
			);
		}
		return $action_id;
	}

	/**
	 * Save action to database.
	 *
	 * @param ActionScheduler_Action $action Action object to save.
	 *
	 * @return int The ID of the stored action
	 */
	protected function store( ActionScheduler_Action $action ) {
		$store = ActionScheduler_Store::instance();
		return $store->save_action( $action );
	}

	/**
	 * Store action if it's unique.
	 *
	 * @param ActionScheduler_Action $action Action object to store.
	 *
	 * @return int ID of the created action. Will be 0 if action was not created.
	 */
	protected function store_unique_action( ActionScheduler_Action $action ) {
		$store = ActionScheduler_Store::instance();
		if ( method_exists( $store, 'save_unique_action' ) ) {
			return $store->save_unique_action( $action );
		} else {
			/**
			 * Fallback to non-unique action if the store doesn't support unique actions.
			 * We try to save the action as unique, accepting that there might be a race condition.
			 * This is likely still better than giving up on unique actions entirely.
			 */
			$existing_action_id = (int) $store->find_action(
				$action->get_hook(),
				array(
					'args'   => $action->get_args(),
					'status' => ActionScheduler_Store::STATUS_PENDING,
					'group'  => $action->get_group(),
				)
			);
			if ( $existing_action_id > 0 ) {
				return 0;
			}
			return $store->save_action( $action );
		}
	}
}
PK     ˆŠU]/Ðº  º  S  vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_LoggerSchema
 *
 * @codeCoverageIgnore
 *
 * Creates a custom table for storing action logs
 */
class ActionScheduler_LoggerSchema extends ActionScheduler_Abstract_Schema {
	const LOG_TABLE = 'actionscheduler_logs';

	/**
	 * Schema version.
	 *
	 * Increment this value to trigger a schema update.
	 *
	 * @var int
	 */
	protected $schema_version = 3;

	/**
	 * Construct.
	 */
	public function __construct() {
		$this->tables = array(
			self::LOG_TABLE,
		);
	}

	/**
	 * Performs additional setup work required to support this schema.
	 */
	public function init() {
		add_action( 'action_scheduler_before_schema_update', array( $this, 'update_schema_3_0' ), 10, 2 );
	}

	/**
	 * Get table definition.
	 *
	 * @param string $table Table name.
	 */
	protected function get_table_definition( $table ) {
		global $wpdb;
		$table_name      = $wpdb->$table;
		$charset_collate = $wpdb->get_charset_collate();
		switch ( $table ) {

			case self::LOG_TABLE:
				$default_date = ActionScheduler_StoreSchema::DEFAULT_DATE;
				return "CREATE TABLE $table_name (
				        log_id bigint(20) unsigned NOT NULL auto_increment,
				        action_id bigint(20) unsigned NOT NULL,
				        message text NOT NULL,
				        log_date_gmt datetime NULL default '{$default_date}',
				        log_date_local datetime NULL default '{$default_date}',
				        PRIMARY KEY  (log_id),
				        KEY action_id (action_id),
				        KEY log_date_gmt (log_date_gmt)
				        ) $charset_collate";

			default:
				return '';
		}
	}

	/**
	 * Update the logs table schema, allowing datetime fields to be NULL.
	 *
	 * This is needed because the NOT NULL constraint causes a conflict with some versions of MySQL
	 * configured with sql_mode=NO_ZERO_DATE, which can for instance lead to tables not being created.
	 *
	 * Most other schema updates happen via ActionScheduler_Abstract_Schema::update_table(), however
	 * that method relies on dbDelta() and this change is not possible when using that function.
	 *
	 * @param string $table Name of table being updated.
	 * @param string $db_version The existing schema version of the table.
	 */
	public function update_schema_3_0( $table, $db_version ) {
		global $wpdb;

		if ( 'actionscheduler_logs' !== $table || version_compare( $db_version, '3', '>=' ) ) {
			return;
		}

		// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
		$table_name   = $wpdb->prefix . 'actionscheduler_logs';
		$table_list   = $wpdb->get_col( "SHOW TABLES LIKE '{$table_name}'" );
		$default_date = ActionScheduler_StoreSchema::DEFAULT_DATE;

		if ( ! empty( $table_list ) ) {
			$query = "
				ALTER TABLE {$table_name}
				MODIFY COLUMN log_date_gmt datetime NULL default '{$default_date}',
				MODIFY COLUMN log_date_local datetime NULL default '{$default_date}'
			";
			$wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		}
		// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	}
}
PK     ˆŠU]³¸J�  �  R  vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_StoreSchema
 *
 * @codeCoverageIgnore
 *
 * Creates custom tables for storing scheduled actions
 */
class ActionScheduler_StoreSchema extends ActionScheduler_Abstract_Schema {
	const ACTIONS_TABLE = 'actionscheduler_actions';
	const CLAIMS_TABLE  = 'actionscheduler_claims';
	const GROUPS_TABLE  = 'actionscheduler_groups';
	const DEFAULT_DATE  = '0000-00-00 00:00:00';

	/**
	 * Schema version.
	 *
	 * Increment this value to trigger a schema update.
	 *
	 * @var int
	 */
	protected $schema_version = 8;

	/**
	 * Construct.
	 */
	public function __construct() {
		$this->tables = array(
			self::ACTIONS_TABLE,
			self::CLAIMS_TABLE,
			self::GROUPS_TABLE,
		);
	}

	/**
	 * Performs additional setup work required to support this schema.
	 */
	public function init() {
		add_action( 'action_scheduler_before_schema_update', array( $this, 'update_schema_5_0' ), 10, 2 );
	}

	/**
	 * Get table definition.
	 *
	 * @param string $table Table name.
	 */
	protected function get_table_definition( $table ) {
		global $wpdb;
		$table_name      = $wpdb->$table;
		$charset_collate = $wpdb->get_charset_collate();
		$default_date    = self::DEFAULT_DATE;
		// phpcs:ignore Squiz.PHP.CommentedOutCode
		$max_index_length = 191; // @see wp_get_db_schema()

		$hook_status_scheduled_date_gmt_max_index_length = $max_index_length - 20 - 8; // - status, - scheduled_date_gmt

		switch ( $table ) {

			case self::ACTIONS_TABLE:
				return "CREATE TABLE {$table_name} (
				        action_id bigint(20) unsigned NOT NULL auto_increment,
				        hook varchar(191) NOT NULL,
				        status varchar(20) NOT NULL,
				        scheduled_date_gmt datetime NULL default '{$default_date}',
				        scheduled_date_local datetime NULL default '{$default_date}',
				        priority tinyint unsigned NOT NULL default '10',
				        args varchar($max_index_length),
				        schedule longtext,
				        group_id bigint(20) unsigned NOT NULL default '0',
				        attempts int(11) NOT NULL default '0',
				        last_attempt_gmt datetime NULL default '{$default_date}',
				        last_attempt_local datetime NULL default '{$default_date}',
				        claim_id bigint(20) unsigned NOT NULL default '0',
				        extended_args varchar(8000) DEFAULT NULL,
				        PRIMARY KEY  (action_id),
				        KEY hook_status_scheduled_date_gmt (hook($hook_status_scheduled_date_gmt_max_index_length), status, scheduled_date_gmt),
				        KEY status_scheduled_date_gmt (status, scheduled_date_gmt),
				        KEY scheduled_date_gmt (scheduled_date_gmt),
				        KEY args (args($max_index_length)),
				        KEY group_id (group_id),
				        KEY last_attempt_gmt (last_attempt_gmt),
				        KEY `claim_id_status_priority_scheduled_date_gmt` (`claim_id`,`status`,`priority`,`scheduled_date_gmt`),
				        KEY `status_last_attempt_gmt` (`status`,`last_attempt_gmt`),
				        KEY `status_claim_id` (`status`,`claim_id`)
				        ) $charset_collate";

			case self::CLAIMS_TABLE:
				return "CREATE TABLE {$table_name} (
				        claim_id bigint(20) unsigned NOT NULL auto_increment,
				        date_created_gmt datetime NULL default '{$default_date}',
				        PRIMARY KEY  (claim_id),
				        KEY date_created_gmt (date_created_gmt)
				        ) $charset_collate";

			case self::GROUPS_TABLE:
				return "CREATE TABLE {$table_name} (
				        group_id bigint(20) unsigned NOT NULL auto_increment,
				        slug varchar(255) NOT NULL,
				        PRIMARY KEY  (group_id),
				        KEY slug (slug($max_index_length))
				        ) $charset_collate";

			default:
				return '';
		}
	}

	/**
	 * Update the actions table schema, allowing datetime fields to be NULL.
	 *
	 * This is needed because the NOT NULL constraint causes a conflict with some versions of MySQL
	 * configured with sql_mode=NO_ZERO_DATE, which can for instance lead to tables not being created.
	 *
	 * Most other schema updates happen via ActionScheduler_Abstract_Schema::update_table(), however
	 * that method relies on dbDelta() and this change is not possible when using that function.
	 *
	 * @param string $table Name of table being updated.
	 * @param string $db_version The existing schema version of the table.
	 */
	public function update_schema_5_0( $table, $db_version ) {
		global $wpdb;

		if ( 'actionscheduler_actions' !== $table || version_compare( $db_version, '5', '>=' ) ) {
			return;
		}

		// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
		$table_name   = $wpdb->prefix . 'actionscheduler_actions';
		$table_list   = $wpdb->get_col( "SHOW TABLES LIKE '{$table_name}'" );
		$default_date = self::DEFAULT_DATE;

		if ( ! empty( $table_list ) ) {
			$query = "
				ALTER TABLE {$table_name}
				MODIFY COLUMN scheduled_date_gmt datetime NULL default '{$default_date}',
				MODIFY COLUMN scheduled_date_local datetime NULL default '{$default_date}',
				MODIFY COLUMN last_attempt_gmt datetime NULL default '{$default_date}',
				MODIFY COLUMN last_attempt_local datetime NULL default '{$default_date}'
		";
			$wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		}
		// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	}
}
PK     ˆŠU]ÐñüAvT  vT  I  vendor/woocommerce/action-scheduler/classes/ActionScheduler_ListTable.phpnu „[µü¤        <?php

/**
 * Implements the admin view of the actions.
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_ListTable extends ActionScheduler_Abstract_ListTable {

	/**
	 * The package name.
	 *
	 * @var string
	 */
	protected $package = 'action-scheduler';

	/**
	 * Columns to show (name => label).
	 *
	 * @var array
	 */
	protected $columns = array();

	/**
	 * Actions (name => label).
	 *
	 * @var array
	 */
	protected $row_actions = array();

	/**
	 * The active data stores
	 *
	 * @var ActionScheduler_Store
	 */
	protected $store;

	/**
	 * A logger to use for getting action logs to display
	 *
	 * @var ActionScheduler_Logger
	 */
	protected $logger;

	/**
	 * A ActionScheduler_QueueRunner runner instance (or child class)
	 *
	 * @var ActionScheduler_QueueRunner
	 */
	protected $runner;

	/**
	 * Bulk actions. The key of the array is the method name of the implementation.
	 * Example: bulk_<key>(array $ids, string $sql_in).
	 *
	 * See the comments in the parent class for further details
	 *
	 * @var array
	 */
	protected $bulk_actions = array();

	/**
	 * Flag variable to render our notifications, if any, once.
	 *
	 * @var bool
	 */
	protected static $did_notification = false;

	/**
	 * Array of seconds for common time periods, like week or month, alongside an internationalised string representation, i.e. "Day" or "Days"
	 *
	 * @var array
	 */
	private static $time_periods;

	/**
	 * Sets the current data store object into `store->action` and initialises the object.
	 *
	 * @param ActionScheduler_Store       $store Store object.
	 * @param ActionScheduler_Logger      $logger Logger object.
	 * @param ActionScheduler_QueueRunner $runner Runner object.
	 */
	public function __construct( ActionScheduler_Store $store, ActionScheduler_Logger $logger, ActionScheduler_QueueRunner $runner ) {

		$this->store  = $store;
		$this->logger = $logger;
		$this->runner = $runner;

		$this->table_header = __( 'Scheduled Actions', 'action-scheduler' );

		$this->bulk_actions = array(
			'delete' => __( 'Delete', 'action-scheduler' ),
		);

		$this->columns = array(
			'hook'        => __( 'Hook', 'action-scheduler' ),
			'status'      => __( 'Status', 'action-scheduler' ),
			'args'        => __( 'Arguments', 'action-scheduler' ),
			'group'       => __( 'Group', 'action-scheduler' ),
			'recurrence'  => __( 'Recurrence', 'action-scheduler' ),
			'schedule'    => __( 'Scheduled Date', 'action-scheduler' ),
			'log_entries' => __( 'Log', 'action-scheduler' ),
		);

		$this->sort_by = array(
			'schedule',
			'hook',
			'group',
		);

		$this->search_by = array(
			'hook',
			'args',
			'claim_id',
		);

		$request_status = $this->get_request_status();

		if ( empty( $request_status ) ) {
			$this->sort_by[] = 'status';
		} elseif ( in_array( $request_status, array( 'in-progress', 'failed' ), true ) ) {
			$this->columns  += array( 'claim_id' => __( 'Claim ID', 'action-scheduler' ) );
			$this->sort_by[] = 'claim_id';
		}

		$this->row_actions = array(
			'hook' => array(
				'run'    => array(
					'name' => __( 'Run', 'action-scheduler' ),
					'desc' => __( 'Process the action now as if it were run as part of a queue', 'action-scheduler' ),
				),
				'cancel' => array(
					'name'  => __( 'Cancel', 'action-scheduler' ),
					'desc'  => __( 'Cancel the action now to avoid it being run in future', 'action-scheduler' ),
					'class' => 'cancel trash',
				),
			),
		);

		self::$time_periods = array(
			array(
				'seconds' => YEAR_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s year', '%s years', 'action-scheduler' ),
			),
			array(
				'seconds' => MONTH_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s month', '%s months', 'action-scheduler' ),
			),
			array(
				'seconds' => WEEK_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s week', '%s weeks', 'action-scheduler' ),
			),
			array(
				'seconds' => DAY_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s day', '%s days', 'action-scheduler' ),
			),
			array(
				'seconds' => HOUR_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s hour', '%s hours', 'action-scheduler' ),
			),
			array(
				'seconds' => MINUTE_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s minute', '%s minutes', 'action-scheduler' ),
			),
			array(
				'seconds' => 1,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s second', '%s seconds', 'action-scheduler' ),
			),
		);

		parent::__construct(
			array(
				'singular' => 'action-scheduler',
				'plural'   => 'action-scheduler',
				'ajax'     => false,
			)
		);

		add_screen_option(
			'per_page',
			array(
				'default' => $this->items_per_page,
			)
		);

		add_filter( 'set_screen_option_' . $this->get_per_page_option_name(), array( $this, 'set_items_per_page_option' ), 10, 3 );
		set_screen_options();
	}

	/**
	 * Handles setting the items_per_page option for this screen.
	 *
	 * @param mixed  $status Default false (to skip saving the current option).
	 * @param string $option Screen option name.
	 * @param int    $value  Screen option value.
	 * @return int
	 */
	public function set_items_per_page_option( $status, $option, $value ) {
		return $value;
	}
	/**
	 * Convert an interval of seconds into a two part human friendly string.
	 *
	 * The WordPress human_time_diff() function only calculates the time difference to one degree, meaning
	 * even if an action is 1 day and 11 hours away, it will display "1 day". This function goes one step
	 * further to display two degrees of accuracy.
	 *
	 * Inspired by the Crontrol::interval() function by Edward Dale: https://wordpress.org/plugins/wp-crontrol/
	 *
	 * @param int $interval A interval in seconds.
	 * @param int $periods_to_include Depth of time periods to include, e.g. for an interval of 70, and $periods_to_include of 2, both minutes and seconds would be included. With a value of 1, only minutes would be included.
	 * @return string A human friendly string representation of the interval.
	 */
	private static function human_interval( $interval, $periods_to_include = 2 ) {

		if ( $interval <= 0 ) {
			return __( 'Now!', 'action-scheduler' );
		}

		$output           = '';
		$num_time_periods = count( self::$time_periods );

		for ( $time_period_index = 0, $periods_included = 0, $seconds_remaining = $interval; $time_period_index < $num_time_periods && $seconds_remaining > 0 && $periods_included < $periods_to_include; $time_period_index++ ) {

			$periods_in_interval = floor( $seconds_remaining / self::$time_periods[ $time_period_index ]['seconds'] );

			if ( $periods_in_interval > 0 ) {
				if ( ! empty( $output ) ) {
					$output .= ' ';
				}
				$output            .= sprintf( translate_nooped_plural( self::$time_periods[ $time_period_index ]['names'], $periods_in_interval, 'action-scheduler' ), $periods_in_interval );
				$seconds_remaining -= $periods_in_interval * self::$time_periods[ $time_period_index ]['seconds'];
				$periods_included++;
			}
		}

		return $output;
	}

	/**
	 * Returns the recurrence of an action or 'Non-repeating'. The output is human readable.
	 *
	 * @param ActionScheduler_Action $action Action object.
	 *
	 * @return string
	 */
	protected function get_recurrence( $action ) {
		$schedule = $action->get_schedule();
		if ( $schedule->is_recurring() && method_exists( $schedule, 'get_recurrence' ) ) {
			$recurrence = $schedule->get_recurrence();

			if ( is_numeric( $recurrence ) ) {
				/* translators: %s: time interval */
				return sprintf( __( 'Every %s', 'action-scheduler' ), self::human_interval( $recurrence ) );
			} else {
				return $recurrence;
			}
		}

		return __( 'Non-repeating', 'action-scheduler' );
	}

	/**
	 * Serializes the argument of an action to render it in a human friendly format.
	 *
	 * @param array $row The array representation of the current row of the table.
	 *
	 * @return string
	 */
	public function column_args( array $row ) {
		if ( empty( $row['args'] ) ) {
			return apply_filters( 'action_scheduler_list_table_column_args', '', $row );
		}

		$row_html = '<ul>';
		foreach ( $row['args'] as $key => $value ) {
			$row_html .= sprintf( '<li><code>%s => %s</code></li>', esc_html( var_export( $key, true ) ), esc_html( var_export( $value, true ) ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		}
		$row_html .= '</ul>';

		return apply_filters( 'action_scheduler_list_table_column_args', $row_html, $row );
	}

	/**
	 * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal.
	 *
	 * @param array $row Action array.
	 * @return string
	 */
	public function column_log_entries( array $row ) {

		$log_entries_html = '<ol>';

		$timezone = new DateTimezone( 'UTC' );

		foreach ( $row['log_entries'] as $log_entry ) {
			$log_entries_html .= $this->get_log_entry_html( $log_entry, $timezone );
		}

		$log_entries_html .= '</ol>';

		return $log_entries_html;
	}

	/**
	 * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal.
	 *
	 * @param ActionScheduler_LogEntry $log_entry Log entry object.
	 * @param DateTimezone             $timezone Timestamp.
	 * @return string
	 */
	protected function get_log_entry_html( ActionScheduler_LogEntry $log_entry, DateTimezone $timezone ) {
		$date = $log_entry->get_date();
		$date->setTimezone( $timezone );
		return sprintf( '<li><strong>%s</strong><br/>%s</li>', esc_html( $date->format( 'Y-m-d H:i:s O' ) ), esc_html( $log_entry->get_message() ) );
	}

	/**
	 * Only display row actions for pending actions.
	 *
	 * @param array  $row         Row to render.
	 * @param string $column_name Current row.
	 *
	 * @return string
	 */
	protected function maybe_render_actions( $row, $column_name ) {
		if ( 'pending' === strtolower( $row['status_name'] ) ) {
			return parent::maybe_render_actions( $row, $column_name );
		}

		return '';
	}

	/**
	 * Renders admin notifications
	 *
	 * Notifications:
	 *  1. When the maximum number of tasks are being executed simultaneously.
	 *  2. Notifications when a task is manually executed.
	 *  3. Tables are missing.
	 */
	public function display_admin_notices() {
		global $wpdb;

		if ( ( is_a( $this->store, 'ActionScheduler_HybridStore' ) || is_a( $this->store, 'ActionScheduler_DBStore' ) ) && apply_filters( 'action_scheduler_enable_recreate_data_store', true ) ) {
			$table_list = array(
				'actionscheduler_actions',
				'actionscheduler_logs',
				'actionscheduler_groups',
				'actionscheduler_claims',
			);

			$found_tables = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}actionscheduler%'" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
			foreach ( $table_list as $table_name ) {
				if ( ! in_array( $wpdb->prefix . $table_name, $found_tables, true ) ) {
					$this->admin_notices[] = array(
						'class'   => 'error',
						'message' => __( 'It appears one or more database tables were missing. Attempting to re-create the missing table(s).', 'action-scheduler' ),
					);
					$this->recreate_tables();
					parent::display_admin_notices();

					return;
				}
			}
		}

		if ( $this->runner->has_maximum_concurrent_batches() ) {
			$claim_count           = $this->store->get_claim_count();
			$this->admin_notices[] = array(
				'class'   => 'updated',
				'message' => sprintf(
					/* translators: %s: amount of claims */
					_n(
						'Maximum simultaneous queues already in progress (%s queue). No additional queues will begin processing until the current queues are complete.',
						'Maximum simultaneous queues already in progress (%s queues). No additional queues will begin processing until the current queues are complete.',
						$claim_count,
						'action-scheduler'
					),
					$claim_count
				),
			);
		} elseif ( $this->store->has_pending_actions_due() ) {

			$async_request_lock_expiration = ActionScheduler::lock()->get_expiration( 'async-request-runner' );

			// No lock set or lock expired.
			if ( false === $async_request_lock_expiration || $async_request_lock_expiration < time() ) {
				$in_progress_url = add_query_arg( 'status', 'in-progress', remove_query_arg( 'status' ) );
				/* translators: %s: process URL */
				$async_request_message = sprintf( __( 'A new queue has begun processing. <a href="%s">View actions in-progress &raquo;</a>', 'action-scheduler' ), esc_url( $in_progress_url ) );
			} else {
				/* translators: %d: seconds */
				$async_request_message = sprintf( __( 'The next queue will begin processing in approximately %d seconds.', 'action-scheduler' ), $async_request_lock_expiration - time() );
			}

			$this->admin_notices[] = array(
				'class'   => 'notice notice-info',
				'message' => $async_request_message,
			);
		}

		$notification = get_transient( 'action_scheduler_admin_notice' );

		if ( is_array( $notification ) ) {
			delete_transient( 'action_scheduler_admin_notice' );

			$action           = $this->store->fetch_action( $notification['action_id'] );
			$action_hook_html = '<strong><code>' . $action->get_hook() . '</code></strong>';

			if ( 1 === absint( $notification['success'] ) ) {
				$class = 'updated';
				switch ( $notification['row_action_type'] ) {
					case 'run':
						/* translators: %s: action HTML */
						$action_message_html = sprintf( __( 'Successfully executed action: %s', 'action-scheduler' ), $action_hook_html );
						break;
					case 'cancel':
						/* translators: %s: action HTML */
						$action_message_html = sprintf( __( 'Successfully canceled action: %s', 'action-scheduler' ), $action_hook_html );
						break;
					default:
						/* translators: %s: action HTML */
						$action_message_html = sprintf( __( 'Successfully processed change for action: %s', 'action-scheduler' ), $action_hook_html );
						break;
				}
			} else {
				$class = 'error';
				/* translators: 1: action HTML 2: action ID 3: error message */
				$action_message_html = sprintf( __( 'Could not process change for action: "%1$s" (ID: %2$d). Error: %3$s', 'action-scheduler' ), $action_hook_html, esc_html( $notification['action_id'] ), esc_html( $notification['error_message'] ) );
			}

			$action_message_html = apply_filters( 'action_scheduler_admin_notice_html', $action_message_html, $action, $notification );

			$this->admin_notices[] = array(
				'class'   => $class,
				'message' => $action_message_html,
			);
		}

		parent::display_admin_notices();
	}

	/**
	 * Prints the scheduled date in a human friendly format.
	 *
	 * @param array $row The array representation of the current row of the table.
	 *
	 * @return string
	 */
	public function column_schedule( $row ) {
		return $this->get_schedule_display_string( $row['schedule'] );
	}

	/**
	 * Get the scheduled date in a human friendly format.
	 *
	 * @param ActionScheduler_Schedule $schedule Action's schedule.
	 * @return string
	 */
	protected function get_schedule_display_string( ActionScheduler_Schedule $schedule ) {

		$schedule_display_string = '';

		if ( is_a( $schedule, 'ActionScheduler_NullSchedule' ) ) {
			return __( 'async', 'action-scheduler' );
		}

		if ( ! method_exists( $schedule, 'get_date' ) || ! $schedule->get_date() ) {
			return '0000-00-00 00:00:00';
		}

		$next_timestamp = $schedule->get_date()->getTimestamp();

		$schedule_display_string .= $schedule->get_date()->format( 'Y-m-d H:i:s O' );
		$schedule_display_string .= '<br/>';

		if ( gmdate( 'U' ) > $next_timestamp ) {
			/* translators: %s: date interval */
			$schedule_display_string .= sprintf( __( ' (%s ago)', 'action-scheduler' ), self::human_interval( gmdate( 'U' ) - $next_timestamp ) );
		} else {
			/* translators: %s: date interval */
			$schedule_display_string .= sprintf( __( ' (%s)', 'action-scheduler' ), self::human_interval( $next_timestamp - gmdate( 'U' ) ) );
		}

		return $schedule_display_string;
	}

	/**
	 * Bulk delete.
	 *
	 * Deletes actions based on their ID. This is the handler for the bulk delete. It assumes the data
	 * properly validated by the callee and it will delete the actions without any extra validation.
	 *
	 * @param int[]  $ids Action IDs.
	 * @param string $ids_sql Inherited and unused.
	 */
	protected function bulk_delete( array $ids, $ids_sql ) {
		foreach ( $ids as $id ) {
			try {
				$this->store->delete_action( $id );
			} catch ( Exception $e ) {
				// A possible reason for an exception would include a scenario where the same action is deleted by a
				// concurrent request.
				// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
				error_log(
					sprintf(
						/* translators: 1: action ID 2: exception message. */
						__( 'Action Scheduler was unable to delete action %1$d. Reason: %2$s', 'action-scheduler' ),
						$id,
						$e->getMessage()
					)
				);
			}
		}
	}

	/**
	 * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their
	 * parameters are valid.
	 *
	 * @param int $action_id Action ID.
	 */
	protected function row_action_cancel( $action_id ) {
		$this->process_row_action( $action_id, 'cancel' );
	}

	/**
	 * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their
	 * parameters are valid.
	 *
	 * @param int $action_id Action ID.
	 */
	protected function row_action_run( $action_id ) {
		$this->process_row_action( $action_id, 'run' );
	}

	/**
	 * Force the data store schema updates.
	 */
	protected function recreate_tables() {
		if ( is_a( $this->store, 'ActionScheduler_HybridStore' ) ) {
			$store = $this->store;
		} else {
			$store = new ActionScheduler_HybridStore();
		}
		add_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10, 2 );

		$store_schema  = new ActionScheduler_StoreSchema();
		$logger_schema = new ActionScheduler_LoggerSchema();
		$store_schema->register_tables( true );
		$logger_schema->register_tables( true );

		remove_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10 );
	}
	/**
	 * Implements the logic behind processing an action once an action link is clicked on the list table.
	 *
	 * @param int    $action_id Action ID.
	 * @param string $row_action_type The type of action to perform on the action.
	 */
	protected function process_row_action( $action_id, $row_action_type ) {
		try {
			switch ( $row_action_type ) {
				case 'run':
					$this->runner->process_action( $action_id, 'Admin List Table' );
					break;
				case 'cancel':
					$this->store->cancel_action( $action_id );
					break;
			}
			$success       = 1;
			$error_message = '';
		} catch ( Exception $e ) {
			$success       = 0;
			$error_message = $e->getMessage();
		}

		set_transient( 'action_scheduler_admin_notice', compact( 'action_id', 'success', 'error_message', 'row_action_type' ), 30 );
	}

	/**
	 * {@inheritDoc}
	 */
	public function prepare_items() {
		$this->prepare_column_headers();

		$per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page );

		$query = array(
			'per_page' => $per_page,
			'offset'   => $this->get_items_offset(),
			'status'   => $this->get_request_status(),
			'orderby'  => $this->get_request_orderby(),
			'order'    => $this->get_request_order(),
			'search'   => $this->get_request_search_query(),
		);

		/**
		 * Change query arguments to query for past-due actions.
		 * Past-due actions have the 'pending' status and are in the past.
		 * This is needed because registering 'past-due' as a status is overkill.
		 */
		if ( 'past-due' === $this->get_request_status() ) {
			$query['status'] = ActionScheduler_Store::STATUS_PENDING;
			$query['date']   = as_get_datetime_object();
		}

		$this->items = array();

		$total_items = $this->store->query_actions( $query, 'count' );

		$status_labels = $this->store->get_status_labels();

		foreach ( $this->store->query_actions( $query ) as $action_id ) {
			try {
				$action = $this->store->fetch_action( $action_id );
			} catch ( Exception $e ) {
				continue;
			}
			if ( is_a( $action, 'ActionScheduler_NullAction' ) ) {
				continue;
			}
			$this->items[ $action_id ] = array(
				'ID'          => $action_id,
				'hook'        => $action->get_hook(),
				'status_name' => $this->store->get_status( $action_id ),
				'status'      => $status_labels[ $this->store->get_status( $action_id ) ],
				'args'        => $action->get_args(),
				'group'       => $action->get_group(),
				'log_entries' => $this->logger->get_logs( $action_id ),
				'claim_id'    => $this->store->get_claim_id( $action_id ),
				'recurrence'  => $this->get_recurrence( $action ),
				'schedule'    => $action->get_schedule(),
			);
		}

		$this->set_pagination_args(
			array(
				'total_items' => $total_items,
				'per_page'    => $per_page,
				'total_pages' => ceil( $total_items / $per_page ),
			)
		);
	}

	/**
	 * Prints the available statuses so the user can click to filter.
	 */
	protected function display_filter_by_status() {
		$this->status_counts = $this->store->action_counts() + $this->store->extra_action_counts();
		parent::display_filter_by_status();
	}

	/**
	 * Get the text to display in the search box on the list table.
	 */
	protected function get_search_box_button_text() {
		return __( 'Search hook, args and claim ID', 'action-scheduler' );
	}

	/**
	 * {@inheritDoc}
	 */
	protected function get_per_page_option_name() {
		return str_replace( '-', '_', $this->screen->id ) . '_per_page';
	}
}
PK     ˆŠU]/åÂ(�  �  T  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_DBLogger
 *
 * Action logs data table data store.
 *
 * @since 3.0.0
 */
class ActionScheduler_DBLogger extends ActionScheduler_Logger {

	/**
	 * Add a record to an action log.
	 *
	 * @param int           $action_id Action ID.
	 * @param string        $message Message to be saved in the log entry.
	 * @param DateTime|null $date Timestamp of the log entry.
	 *
	 * @return int     The log entry ID.
	 */
	public function log( $action_id, $message, ?DateTime $date = null ) {
		if ( empty( $date ) ) {
			$date = as_get_datetime_object();
		} else {
			$date = clone $date;
		}

		$date_gmt = $date->format( 'Y-m-d H:i:s' );
		ActionScheduler_TimezoneHelper::set_local_timezone( $date );
		$date_local = $date->format( 'Y-m-d H:i:s' );

		/** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort
		global $wpdb;
		$wpdb->insert(
			$wpdb->actionscheduler_logs,
			array(
				'action_id'      => $action_id,
				'message'        => $message,
				'log_date_gmt'   => $date_gmt,
				'log_date_local' => $date_local,
			),
			array( '%d', '%s', '%s', '%s' )
		);

		return $wpdb->insert_id;
	}

	/**
	 * Retrieve an action log entry.
	 *
	 * @param int $entry_id Log entry ID.
	 *
	 * @return ActionScheduler_LogEntry
	 */
	public function get_entry( $entry_id ) {
		/** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort
		global $wpdb;
		$entry = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_logs} WHERE log_id=%d", $entry_id ) );

		return $this->create_entry_from_db_record( $entry );
	}

	/**
	 * Create an action log entry from a database record.
	 *
	 * @param object $record Log entry database record object.
	 *
	 * @return ActionScheduler_LogEntry
	 */
	private function create_entry_from_db_record( $record ) {
		if ( empty( $record ) ) {
			return new ActionScheduler_NullLogEntry();
		}

		if ( is_null( $record->log_date_gmt ) ) {
			$date = as_get_datetime_object( ActionScheduler_StoreSchema::DEFAULT_DATE );
		} else {
			$date = as_get_datetime_object( $record->log_date_gmt );
		}

		return new ActionScheduler_LogEntry( $record->action_id, $record->message, $date );
	}

	/**
	 * Retrieve an action's log entries from the database.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return ActionScheduler_LogEntry[]
	 */
	public function get_logs( $action_id ) {
		/** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort
		global $wpdb;

		$records = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_logs} WHERE action_id=%d", $action_id ) );

		return array_map( array( $this, 'create_entry_from_db_record' ), $records );
	}

	/**
	 * Initialize the data store.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		$table_maker = new ActionScheduler_LoggerSchema();
		$table_maker->init();
		$table_maker->register_tables();

		parent::init();

		add_action( 'action_scheduler_deleted_action', array( $this, 'clear_deleted_action_logs' ), 10, 1 );
	}

	/**
	 * Delete the action logs for an action.
	 *
	 * @param int $action_id Action ID.
	 */
	public function clear_deleted_action_logs( $action_id ) {
		/** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort
		global $wpdb;
		$wpdb->delete( $wpdb->actionscheduler_logs, array( 'action_id' => $action_id ), array( '%d' ) );
	}

	/**
	 * Bulk add cancel action log entries.
	 *
	 * @param array $action_ids List of action ID.
	 */
	public function bulk_log_cancel_actions( $action_ids ) {
		if ( empty( $action_ids ) ) {
			return;
		}

		/** @var \wpdb $wpdb */ //phpcs:ignore Generic.Commenting.DocComment.MissingShort
		global $wpdb;
		$date     = as_get_datetime_object();
		$date_gmt = $date->format( 'Y-m-d H:i:s' );
		ActionScheduler_TimezoneHelper::set_local_timezone( $date );
		$date_local = $date->format( 'Y-m-d H:i:s' );
		$message    = __( 'action canceled', 'action-scheduler' );
		$format     = '(%d, ' . $wpdb->prepare( '%s, %s, %s', $message, $date_gmt, $date_local ) . ')';
		$sql_query  = "INSERT {$wpdb->actionscheduler_logs} (action_id, message, log_date_gmt, log_date_local) VALUES ";
		$value_rows = array();

		foreach ( $action_ids as $action_id ) {
			$value_rows[] = $wpdb->prepare( $format, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		}
		$sql_query .= implode( ',', $value_rows );

		$wpdb->query( $sql_query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	}
}
PK     ˆŠU]÷êB  B  k  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wpPostStore_PostStatusRegistrar
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_wpPostStore_PostStatusRegistrar {

	/**
	 * Registrar.
	 */
	public function register() {
		register_post_status( ActionScheduler_Store::STATUS_RUNNING, array_merge( $this->post_status_args(), $this->post_status_running_labels() ) );
		register_post_status( ActionScheduler_Store::STATUS_FAILED, array_merge( $this->post_status_args(), $this->post_status_failed_labels() ) );
	}

	/**
	 * Build the args array for the post type definition
	 *
	 * @return array
	 */
	protected function post_status_args() {
		$args = array(
			'public'                    => false,
			'exclude_from_search'       => false,
			'show_in_admin_all_list'    => true,
			'show_in_admin_status_list' => true,
		);

		return apply_filters( 'action_scheduler_post_status_args', $args );
	}

	/**
	 * Build the args array for the post type definition
	 *
	 * @return array
	 */
	protected function post_status_failed_labels() {
		$labels = array(
			'label'       => _x( 'Failed', 'post', 'action-scheduler' ),
			/* translators: %s: count */
			'label_count' => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'action-scheduler' ),
		);

		return apply_filters( 'action_scheduler_post_status_failed_labels', $labels );
	}

	/**
	 * Build the args array for the post type definition
	 *
	 * @return array
	 */
	protected function post_status_running_labels() {
		$labels = array(
			'label'       => _x( 'In-Progress', 'post', 'action-scheduler' ),
			/* translators: %s: count */
			'label_count' => _n_noop( 'In-Progress <span class="count">(%s)</span>', 'In-Progress <span class="count">(%s)</span>', 'action-scheduler' ),
		);

		return apply_filters( 'action_scheduler_post_status_running_labels', $labels );
	}
}
PK     ˆŠU]TŒ¢�  �  W  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wpPostStore
 */
class ActionScheduler_wpPostStore extends ActionScheduler_Store {
	const POST_TYPE         = 'scheduled-action';
	const GROUP_TAXONOMY    = 'action-group';
	const SCHEDULE_META_KEY = '_action_manager_schedule';
	const DEPENDENCIES_MET  = 'as-post-store-dependencies-met';

	/**
	 * Used to share information about the before_date property of claims internally.
	 *
	 * This is used in preference to passing the same information as a method param
	 * for backwards-compatibility reasons.
	 *
	 * @var DateTime|null
	 */
	private $claim_before_date = null;

	/**
	 * Local Timezone.
	 *
	 * @var DateTimeZone
	 */
	protected $local_timezone = null;

	/**
	 * Save action.
	 *
	 * @param ActionScheduler_Action $action Scheduled Action.
	 * @param DateTime|null          $scheduled_date Scheduled Date.
	 *
	 * @throws RuntimeException Throws an exception if the action could not be saved.
	 * @return int
	 */
	public function save_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		try {
			$this->validate_action( $action );
			$post_array = $this->create_post_array( $action, $scheduled_date );
			$post_id    = $this->save_post_array( $post_array );
			$this->save_post_schedule( $post_id, $action->get_schedule() );
			$this->save_action_group( $post_id, $action->get_group() );
			do_action( 'action_scheduler_stored_action', $post_id );
			return $post_id;
		} catch ( Exception $e ) {
			/* translators: %s: action error message */
			throw new RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 );
		}
	}

	/**
	 * Create post array.
	 *
	 * @param ActionScheduler_Action $action Scheduled Action.
	 * @param DateTime|null          $scheduled_date Scheduled Date.
	 *
	 * @return array Returns an array of post data.
	 */
	protected function create_post_array( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		$post = array(
			'post_type'     => self::POST_TYPE,
			'post_title'    => $action->get_hook(),
			'post_content'  => wp_json_encode( $action->get_args() ),
			'post_status'   => ( $action->is_finished() ? 'publish' : 'pending' ),
			'post_date_gmt' => $this->get_scheduled_date_string( $action, $scheduled_date ),
			'post_date'     => $this->get_scheduled_date_string_local( $action, $scheduled_date ),
		);
		return $post;
	}

	/**
	 * Save post array.
	 *
	 * @param array $post_array Post array.
	 * @return int Returns the post ID.
	 * @throws RuntimeException Throws an exception if the action could not be saved.
	 */
	protected function save_post_array( $post_array ) {
		add_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10, 1 );
		add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 );

		$has_kses = false !== has_filter( 'content_save_pre', 'wp_filter_post_kses' );

		if ( $has_kses ) {
			// Prevent KSES from corrupting JSON in post_content.
			kses_remove_filters();
		}

		$post_id = wp_insert_post( $post_array );

		if ( $has_kses ) {
			kses_init_filters();
		}

		remove_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10 );
		remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 );

		if ( is_wp_error( $post_id ) || empty( $post_id ) ) {
			throw new RuntimeException( __( 'Unable to save action.', 'action-scheduler' ) );
		}
		return $post_id;
	}

	/**
	 * Filter insert post data.
	 *
	 * @param array $postdata Post data to filter.
	 *
	 * @return array
	 */
	public function filter_insert_post_data( $postdata ) {
		if ( self::POST_TYPE === $postdata['post_type'] ) {
			$postdata['post_author'] = 0;
			if ( 'future' === $postdata['post_status'] ) {
				$postdata['post_status'] = 'publish';
			}
		}
		return $postdata;
	}

	/**
	 * Create a (probably unique) post name for scheduled actions in a more performant manner than wp_unique_post_slug().
	 *
	 * When an action's post status is transitioned to something other than 'draft', 'pending' or 'auto-draft, like 'publish'
	 * or 'failed' or 'trash', WordPress will find a unique slug (stored in post_name column) using the wp_unique_post_slug()
	 * function. This is done to ensure URL uniqueness. The approach taken by wp_unique_post_slug() is to iterate over existing
	 * post_name values that match, and append a number 1 greater than the largest. This makes sense when manually creating a
	 * post from the Edit Post screen. It becomes a bottleneck when automatically processing thousands of actions, with a
	 * database containing thousands of related post_name values.
	 *
	 * WordPress 5.1 introduces the 'pre_wp_unique_post_slug' filter for plugins to address this issue.
	 *
	 * We can short-circuit WordPress's wp_unique_post_slug() approach using the 'pre_wp_unique_post_slug' filter. This
	 * method is available to be used as a callback on that filter. It provides a more scalable approach to generating a
	 * post_name/slug that is probably unique. Because Action Scheduler never actually uses the post_name field, or an
	 * action's slug, being probably unique is good enough.
	 *
	 * For more backstory on this issue, see:
	 * - https://github.com/woocommerce/action-scheduler/issues/44 and
	 * - https://core.trac.wordpress.org/ticket/21112
	 *
	 * @param string $override_slug Short-circuit return value.
	 * @param string $slug          The desired slug (post_name).
	 * @param int    $post_ID       Post ID.
	 * @param string $post_status   The post status.
	 * @param string $post_type     Post type.
	 * @return string
	 */
	public function set_unique_post_slug( $override_slug, $slug, $post_ID, $post_status, $post_type ) {
		if ( self::POST_TYPE === $post_type ) {
			$override_slug = uniqid( self::POST_TYPE . '-', true ) . '-' . wp_generate_password( 32, false );
		}
		return $override_slug;
	}

	/**
	 * Save post schedule.
	 *
	 * @param int    $post_id  Post ID of the scheduled action.
	 * @param string $schedule Schedule to save.
	 *
	 * @return void
	 */
	protected function save_post_schedule( $post_id, $schedule ) {
		update_post_meta( $post_id, self::SCHEDULE_META_KEY, $schedule );
	}

	/**
	 * Save action group.
	 *
	 * @param int    $post_id Post ID.
	 * @param string $group   Group to save.
	 * @return void
	 */
	protected function save_action_group( $post_id, $group ) {
		if ( empty( $group ) ) {
			wp_set_object_terms( $post_id, array(), self::GROUP_TAXONOMY, false );
		} else {
			wp_set_object_terms( $post_id, array( $group ), self::GROUP_TAXONOMY, false );
		}
	}

	/**
	 * Fetch actions.
	 *
	 * @param int $action_id Action ID.
	 * @return object
	 */
	public function fetch_action( $action_id ) {
		$post = $this->get_post( $action_id );
		if ( empty( $post ) || self::POST_TYPE !== $post->post_type ) {
			return $this->get_null_action();
		}

		try {
			$action = $this->make_action_from_post( $post );
		} catch ( ActionScheduler_InvalidActionException $exception ) {
			do_action( 'action_scheduler_failed_fetch_action', $post->ID, $exception );
			return $this->get_null_action();
		}

		return $action;
	}

	/**
	 * Get post.
	 *
	 * @param string $action_id - Action ID.
	 * @return WP_Post|null
	 */
	protected function get_post( $action_id ) {
		if ( empty( $action_id ) ) {
			return null;
		}
		return get_post( $action_id );
	}

	/**
	 * Get NULL action.
	 *
	 * @return ActionScheduler_NullAction
	 */
	protected function get_null_action() {
		return new ActionScheduler_NullAction();
	}

	/**
	 * Make action from post.
	 *
	 * @param WP_Post $post Post object.
	 * @return WP_Post
	 */
	protected function make_action_from_post( $post ) {
		$hook = $post->post_title;

		$args = json_decode( $post->post_content, true );
		$this->validate_args( $args, $post->ID );

		$schedule = get_post_meta( $post->ID, self::SCHEDULE_META_KEY, true );
		$this->validate_schedule( $schedule, $post->ID );

		$group = wp_get_object_terms( $post->ID, self::GROUP_TAXONOMY, array( 'fields' => 'names' ) );
		$group = empty( $group ) ? '' : reset( $group );

		return ActionScheduler::factory()->get_stored_action( $this->get_action_status_by_post_status( $post->post_status ), $hook, $args, $schedule, $group );
	}

	/**
	 * Get action status by post status.
	 *
	 * @param string $post_status Post status.
	 *
	 * @throws InvalidArgumentException Throw InvalidArgumentException if $post_status not in known status fields returned by $this->get_status_labels().
	 * @return string
	 */
	protected function get_action_status_by_post_status( $post_status ) {

		switch ( $post_status ) {
			case 'publish':
				$action_status = self::STATUS_COMPLETE;
				break;
			case 'trash':
				$action_status = self::STATUS_CANCELED;
				break;
			default:
				if ( ! array_key_exists( $post_status, $this->get_status_labels() ) ) {
					throw new InvalidArgumentException( sprintf( 'Invalid post status: "%s". No matching action status available.', $post_status ) );
				}
				$action_status = $post_status;
				break;
		}

		return $action_status;
	}

	/**
	 * Get post status by action status.
	 *
	 * @param string $action_status Action status.
	 *
	 * @throws InvalidArgumentException Throws InvalidArgumentException if $post_status not in known status fields returned by $this->get_status_labels().
	 * @return string
	 */
	protected function get_post_status_by_action_status( $action_status ) {

		switch ( $action_status ) {
			case self::STATUS_COMPLETE:
				$post_status = 'publish';
				break;
			case self::STATUS_CANCELED:
				$post_status = 'trash';
				break;
			default:
				if ( ! array_key_exists( $action_status, $this->get_status_labels() ) ) {
					throw new InvalidArgumentException( sprintf( 'Invalid action status: "%s".', $action_status ) );
				}
				$post_status = $action_status;
				break;
		}

		return $post_status;
	}

	/**
	 * Returns the SQL statement to query (or count) actions.
	 *
	 * @param array  $query            - Filtering options.
	 * @param string $select_or_count  - Whether the SQL should select and return the IDs or just the row count.
	 *
	 * @throws InvalidArgumentException - Throw InvalidArgumentException if $select_or_count not count or select.
	 * @return string SQL statement. The returned SQL is already properly escaped.
	 */
	protected function get_query_actions_sql( array $query, $select_or_count = 'select' ) {

		if ( ! in_array( $select_or_count, array( 'select', 'count' ), true ) ) {
			throw new InvalidArgumentException( __( 'Invalid schedule. Cannot save action.', 'action-scheduler' ) );
		}

		$query = wp_parse_args(
			$query,
			array(
				'hook'             => '',
				'args'             => null,
				'date'             => null,
				'date_compare'     => '<=',
				'modified'         => null,
				'modified_compare' => '<=',
				'group'            => '',
				'status'           => '',
				'claimed'          => null,
				'per_page'         => 5,
				'offset'           => 0,
				'orderby'          => 'date',
				'order'            => 'ASC',
				'search'           => '',
			)
		);

		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;
		$sql        = ( 'count' === $select_or_count ) ? 'SELECT count(p.ID)' : 'SELECT p.ID ';
		$sql       .= "FROM {$wpdb->posts} p";
		$sql_params = array();
		if ( empty( $query['group'] ) && 'group' === $query['orderby'] ) {
			$sql .= " LEFT JOIN {$wpdb->term_relationships} tr ON tr.object_id=p.ID";
			$sql .= " LEFT JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id=tt.term_taxonomy_id";
			$sql .= " LEFT JOIN {$wpdb->terms} t ON tt.term_id=t.term_id";
		} elseif ( ! empty( $query['group'] ) ) {
			$sql         .= " INNER JOIN {$wpdb->term_relationships} tr ON tr.object_id=p.ID";
			$sql         .= " INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id=tt.term_taxonomy_id";
			$sql         .= " INNER JOIN {$wpdb->terms} t ON tt.term_id=t.term_id";
			$sql         .= ' AND t.slug=%s';
			$sql_params[] = $query['group'];
		}
		$sql         .= ' WHERE post_type=%s';
		$sql_params[] = self::POST_TYPE;
		if ( $query['hook'] ) {
			$sql         .= ' AND p.post_title=%s';
			$sql_params[] = $query['hook'];
		}
		if ( ! is_null( $query['args'] ) ) {
			$sql         .= ' AND p.post_content=%s';
			$sql_params[] = wp_json_encode( $query['args'] );
		}

		if ( $query['status'] ) {
			$post_statuses = array_map( array( $this, 'get_post_status_by_action_status' ), (array) $query['status'] );
			$placeholders  = array_fill( 0, count( $post_statuses ), '%s' );
			$sql          .= ' AND p.post_status IN (' . join( ', ', $placeholders ) . ')';
			$sql_params    = array_merge( $sql_params, array_values( $post_statuses ) );
		}

		if ( $query['date'] instanceof DateTime ) {
			$date = clone $query['date'];
			$date->setTimezone( new DateTimeZone( 'UTC' ) );
			$date_string  = $date->format( 'Y-m-d H:i:s' );
			$comparator   = $this->validate_sql_comparator( $query['date_compare'] );
			$sql         .= " AND p.post_date_gmt $comparator %s";
			$sql_params[] = $date_string;
		}

		if ( $query['modified'] instanceof DateTime ) {
			$modified = clone $query['modified'];
			$modified->setTimezone( new DateTimeZone( 'UTC' ) );
			$date_string  = $modified->format( 'Y-m-d H:i:s' );
			$comparator   = $this->validate_sql_comparator( $query['modified_compare'] );
			$sql         .= " AND p.post_modified_gmt $comparator %s";
			$sql_params[] = $date_string;
		}

		if ( true === $query['claimed'] ) {
			$sql .= " AND p.post_password != ''";
		} elseif ( false === $query['claimed'] ) {
			$sql .= " AND p.post_password = ''";
		} elseif ( ! is_null( $query['claimed'] ) ) {
			$sql         .= ' AND p.post_password = %s';
			$sql_params[] = $query['claimed'];
		}

		if ( ! empty( $query['search'] ) ) {
			$sql .= ' AND (p.post_title LIKE %s OR p.post_content LIKE %s OR p.post_password LIKE %s)';
			for ( $i = 0; $i < 3; $i++ ) {
				$sql_params[] = sprintf( '%%%s%%', $query['search'] );
			}
		}

		if ( 'select' === $select_or_count ) {
			switch ( $query['orderby'] ) {
				case 'hook':
					$orderby = 'p.post_title';
					break;
				case 'group':
					$orderby = 't.name';
					break;
				case 'status':
					$orderby = 'p.post_status';
					break;
				case 'modified':
					$orderby = 'p.post_modified';
					break;
				case 'claim_id':
					$orderby = 'p.post_password';
					break;
				case 'schedule':
				case 'date':
				default:
					$orderby = 'p.post_date_gmt';
					break;
			}
			if ( 'ASC' === strtoupper( $query['order'] ) ) {
				$order = 'ASC';
			} else {
				$order = 'DESC';
			}
			$sql .= " ORDER BY $orderby $order";
			if ( $query['per_page'] > 0 ) {
				$sql         .= ' LIMIT %d, %d';
				$sql_params[] = $query['offset'];
				$sql_params[] = $query['per_page'];
			}
		}

		return $wpdb->prepare( $sql, $sql_params ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	}

	/**
	 * Query for action count or list of action IDs.
	 *
	 * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status.
	 *
	 * @see ActionScheduler_Store::query_actions for $query arg usage.
	 *
	 * @param array  $query      Query filtering options.
	 * @param string $query_type Whether to select or count the results. Defaults to select.
	 *
	 * @return string|array|null The IDs of actions matching the query. Null on failure.
	 */
	public function query_actions( $query = array(), $query_type = 'select' ) {
		/**
		 * Global $wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		$sql = $this->get_query_actions_sql( $query, $query_type );

		return ( 'count' === $query_type ) ? $wpdb->get_var( $sql ) : $wpdb->get_col( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared
	}

	/**
	 * Get a count of all actions in the store, grouped by status
	 *
	 * @return array
	 */
	public function action_counts() {

		$action_counts_by_status = array();
		$action_stati_and_labels = $this->get_status_labels();
		$posts_count_by_status   = (array) wp_count_posts( self::POST_TYPE, 'readable' );

		foreach ( $posts_count_by_status as $post_status_name => $count ) {

			try {
				$action_status_name = $this->get_action_status_by_post_status( $post_status_name );
			} catch ( Exception $e ) {
				// Ignore any post statuses that aren't for actions.
				continue;
			}
			if ( array_key_exists( $action_status_name, $action_stati_and_labels ) ) {
				$action_counts_by_status[ $action_status_name ] = $count;
			}
		}

		return $action_counts_by_status;
	}

	/**
	 * Cancel action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @throws InvalidArgumentException If $action_id is not identified.
	 */
	public function cancel_action( $action_id ) {
		$post = get_post( $action_id );
		if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) {
			/* translators: %s is the action ID */
			throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to cancel this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		do_action( 'action_scheduler_canceled_action', $action_id );
		add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 );
		wp_trash_post( $action_id );
		remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 );
	}

	/**
	 * Delete action.
	 *
	 * @param int $action_id Action ID.
	 * @return void
	 * @throws InvalidArgumentException If action is not identified.
	 */
	public function delete_action( $action_id ) {
		$post = get_post( $action_id );
		if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) {
			/* translators: %s is the action ID */
			throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to delete this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		do_action( 'action_scheduler_deleted_action', $action_id );

		wp_delete_post( $action_id, true );
	}

	/**
	 * Get date for claim id.
	 *
	 * @param int $action_id Action ID.
	 * @return ActionScheduler_DateTime The date the action is schedule to run, or the date that it ran.
	 */
	public function get_date( $action_id ) {
		$next = $this->get_date_gmt( $action_id );
		return ActionScheduler_TimezoneHelper::set_local_timezone( $next );
	}

	/**
	 * Get Date GMT.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @throws InvalidArgumentException If $action_id is not identified.
	 * @return ActionScheduler_DateTime The date the action is schedule to run, or the date that it ran.
	 */
	public function get_date_gmt( $action_id ) {
		$post = get_post( $action_id );
		if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) {
			/* translators: %s is the action ID */
			throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to determine the date of this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		if ( 'publish' === $post->post_status ) {
			return as_get_datetime_object( $post->post_modified_gmt );
		} else {
			return as_get_datetime_object( $post->post_date_gmt );
		}
	}

	/**
	 * Stake claim.
	 *
	 * @param int           $max_actions Maximum number of actions.
	 * @param DateTime|null $before_date Jobs must be schedule before this date. Defaults to now.
	 * @param array         $hooks       Claim only actions with a hook or hooks.
	 * @param string        $group       Claim only actions in the given group.
	 *
	 * @return ActionScheduler_ActionClaim
	 * @throws RuntimeException When there is an error staking a claim.
	 * @throws InvalidArgumentException When the given group is not valid.
	 */
	public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
		$this->claim_before_date = $before_date;
		$claim_id                = $this->generate_claim_id();
		$this->claim_actions( $claim_id, $max_actions, $before_date, $hooks, $group );
		$action_ids              = $this->find_actions_by_claim_id( $claim_id );
		$this->claim_before_date = null;

		return new ActionScheduler_ActionClaim( $claim_id, $action_ids );
	}

	/**
	 * Get claim count.
	 *
	 * @return int
	 */
	public function get_claim_count() {
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
		return $wpdb->get_var(
			$wpdb->prepare(
				"SELECT COUNT(DISTINCT post_password) FROM {$wpdb->posts} WHERE post_password != '' AND post_type = %s AND post_status IN ('in-progress','pending')",
				array( self::POST_TYPE )
			)
		);
	}

	/**
	 * Generate claim id.
	 *
	 * @return string
	 */
	protected function generate_claim_id() {
		$claim_id = md5( microtime( true ) . wp_rand( 0, 1000 ) );
		return substr( $claim_id, 0, 20 ); // to fit in db field with 20 char limit.
	}

	/**
	 * Claim actions.
	 *
	 * @param string        $claim_id    Claim ID.
	 * @param int           $limit       Limit.
	 * @param DateTime|null $before_date Should use UTC timezone.
	 * @param array         $hooks       Claim only actions with a hook or hooks.
	 * @param string        $group       Claim only actions in the given group.
	 *
	 * @return int The number of actions that were claimed.
	 * @throws RuntimeException  When there is a database error.
	 */
	protected function claim_actions( $claim_id, $limit, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
		// Set up initial variables.
		$date      = null === $before_date ? as_get_datetime_object() : clone $before_date;
		$limit_ids = ! empty( $group );
		$ids       = $limit_ids ? $this->get_actions_by_group( $group, $limit, $date ) : array();

		// If limiting by IDs and no posts found, then return early since we have nothing to update.
		if ( $limit_ids && 0 === count( $ids ) ) {
			return 0;
		}

		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		/*
		 * Build up custom query to update the affected posts. Parameters are built as a separate array
		 * to make it easier to identify where they are in the query.
		 *
		 * We can't use $wpdb->update() here because of the "ID IN ..." clause.
		 */
		$update = "UPDATE {$wpdb->posts} SET post_password = %s, post_modified_gmt = %s, post_modified = %s";
		$params = array(
			$claim_id,
			current_time( 'mysql', true ),
			current_time( 'mysql' ),
		);

		// Build initial WHERE clause.
		$where    = "WHERE post_type = %s AND post_status = %s AND post_password = ''";
		$params[] = self::POST_TYPE;
		$params[] = ActionScheduler_Store::STATUS_PENDING;

		if ( ! empty( $hooks ) ) {
			$placeholders = array_fill( 0, count( $hooks ), '%s' );
			$where       .= ' AND post_title IN (' . join( ', ', $placeholders ) . ')';
			$params       = array_merge( $params, array_values( $hooks ) );
		}

		/*
		 * Add the IDs to the WHERE clause. IDs not escaped because they came directly from a prior DB query.
		 *
		 * If we're not limiting by IDs, then include the post_date_gmt clause.
		 */
		if ( $limit_ids ) {
			$where .= ' AND ID IN (' . join( ',', $ids ) . ')';
		} else {
			$where   .= ' AND post_date_gmt <= %s';
			$params[] = $date->format( 'Y-m-d H:i:s' );
		}

		// Add the ORDER BY clause and,ms limit.
		$order    = 'ORDER BY menu_order ASC, post_date_gmt ASC, ID ASC LIMIT %d';
		$params[] = $limit;

		// Run the query and gather results.
		$rows_affected = $wpdb->query( $wpdb->prepare( "{$update} {$where} {$order}", $params ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare

		if ( false === $rows_affected ) {
			throw new RuntimeException( __( 'Unable to claim actions. Database error.', 'action-scheduler' ) );
		}

		return (int) $rows_affected;
	}

	/**
	 * Get IDs of actions within a certain group and up to a certain date/time.
	 *
	 * @param string   $group The group to use in finding actions.
	 * @param int      $limit The number of actions to retrieve.
	 * @param DateTime $date  DateTime object representing cutoff time for actions. Actions retrieved will be
	 *                        up to and including this DateTime.
	 *
	 * @return array IDs of actions in the appropriate group and before the appropriate time.
	 * @throws InvalidArgumentException When the group does not exist.
	 */
	protected function get_actions_by_group( $group, $limit, DateTime $date ) {
		// Ensure the group exists before continuing.
		if ( ! term_exists( $group, self::GROUP_TAXONOMY ) ) {
			/* translators: %s is the group name */
			throw new InvalidArgumentException( sprintf( __( 'The group "%s" does not exist.', 'action-scheduler' ), $group ) );
		}

		// Set up a query for post IDs to use later.
		$query      = new WP_Query();
		$query_args = array(
			'fields'           => 'ids',
			'post_type'        => self::POST_TYPE,
			'post_status'      => ActionScheduler_Store::STATUS_PENDING,
			'has_password'     => false,
			'posts_per_page'   => $limit * 3,
			'suppress_filters' => true, // phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.SuppressFilters_suppress_filters
			'no_found_rows'    => true,
			'orderby'          => array(
				'menu_order' => 'ASC',
				'date'       => 'ASC',
				'ID'         => 'ASC',
			),
			'date_query'       => array(
				'column'    => 'post_date_gmt',
				'before'    => $date->format( 'Y-m-d H:i' ),
				'inclusive' => true,
			),
			'tax_query'        => array( // phpcs:ignore WordPress.DB.SlowDBQuery
				array(
					'taxonomy'         => self::GROUP_TAXONOMY,
					'field'            => 'slug',
					'terms'            => $group,
					'include_children' => false,
				),
			),
		);

		return $query->query( $query_args );
	}

	/**
	 * Find actions by claim ID.
	 *
	 * @param string $claim_id Claim ID.
	 * @return array
	 */
	public function find_actions_by_claim_id( $claim_id ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		$action_ids  = array();
		$before_date = isset( $this->claim_before_date ) ? $this->claim_before_date : as_get_datetime_object();
		$cut_off     = $before_date->format( 'Y-m-d H:i:s' );

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$results = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s",
				array(
					self::POST_TYPE,
					$claim_id,
				)
			)
		);

		// Verify that the scheduled date for each action is within the expected bounds (in some unusual
		// cases, we cannot depend on MySQL to honor all of the WHERE conditions we specify).
		foreach ( $results as $claimed_action ) {
			if ( $claimed_action->post_date_gmt <= $cut_off ) {
				$action_ids[] = absint( $claimed_action->ID );
			}
		}

		return $action_ids;
	}

	/**
	 * Release pending actions from a claim.
	 *
	 * @param ActionScheduler_ActionClaim $claim Claim object to release.
	 * @return void
	 * @throws RuntimeException When the claim is not unlocked.
	 */
	public function release_claim( ActionScheduler_ActionClaim $claim ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		$claim_id = $claim->get_id();
		if ( trim( $claim_id ) === '' ) {
			// Verify that the claim_id is valid before attempting to release it.
			return;
		}

		// Only attempt to release pending actions to be claimed again. Running and complete actions are no longer relevant outside of admin/analytics.
		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$action_ids = $wpdb->get_col(
			$wpdb->prepare(
				"SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s AND post_status = %s",
				self::POST_TYPE,
				$claim_id,
				self::STATUS_PENDING
			)
		);

		if ( empty( $action_ids ) ) {
			return; // nothing to do.
		}
		$action_id_string = implode( ',', array_map( 'intval', $action_ids ) );

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$result = $wpdb->query(
			$wpdb->prepare(
				"UPDATE {$wpdb->posts} SET post_password = '' WHERE ID IN ($action_id_string) AND post_password = %s", //phpcs:ignore
				array(
					$claim->get_id(),
				)
			)
		);
		if ( false === $result ) {
			/* translators: %s: claim ID */
			throw new RuntimeException( sprintf( __( 'Unable to unlock claim %s. Database error.', 'action-scheduler' ), $claim->get_id() ) );
		}
	}

	/**
	 * Unclaim action.
	 *
	 * @param string $action_id Action ID.
	 * @throws RuntimeException When unable to unlock claim on action ID.
	 */
	public function unclaim_action( $action_id ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		//phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$result = $wpdb->query(
			$wpdb->prepare(
				"UPDATE {$wpdb->posts} SET post_password = '' WHERE ID = %d AND post_type = %s",
				$action_id,
				self::POST_TYPE
			)
		);
		if ( false === $result ) {
			/* translators: %s: action ID */
			throw new RuntimeException( sprintf( __( 'Unable to unlock claim on action %s. Database error.', 'action-scheduler' ), $action_id ) );
		}
	}

	/**
	 * Mark failure on action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return void
	 * @throws RuntimeException When unable to mark failure on action ID.
	 */
	public function mark_failure( $action_id ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$result = $wpdb->query(
			$wpdb->prepare( "UPDATE {$wpdb->posts} SET post_status = %s WHERE ID = %d AND post_type = %s", self::STATUS_FAILED, $action_id, self::POST_TYPE )
		);
		if ( false === $result ) {
			/* translators: %s: action ID */
			throw new RuntimeException( sprintf( __( 'Unable to mark failure on action %s. Database error.', 'action-scheduler' ), $action_id ) );
		}
	}

	/**
	 * Return an action's claim ID, as stored in the post password column
	 *
	 * @param int $action_id Action ID.
	 * @return mixed
	 */
	public function get_claim_id( $action_id ) {
		return $this->get_post_column( $action_id, 'post_password' );
	}

	/**
	 * Return an action's status, as stored in the post status column
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return mixed
	 * @throws InvalidArgumentException When the action ID is invalid.
	 */
	public function get_status( $action_id ) {
		$status = $this->get_post_column( $action_id, 'post_status' );

		if ( null === $status ) {
			throw new InvalidArgumentException( __( 'Invalid action ID. No status found.', 'action-scheduler' ) );
		}

		return $this->get_action_status_by_post_status( $status );
	}

	/**
	 * Get post column
	 *
	 * @param string $action_id Action ID.
	 * @param string $column_name Column Name.
	 *
	 * @return string|null
	 */
	private function get_post_column( $action_id, $column_name ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		return $wpdb->get_var(
			$wpdb->prepare(
				"SELECT {$column_name} FROM {$wpdb->posts} WHERE ID=%d AND post_type=%s", // phpcs:ignore
				$action_id,
				self::POST_TYPE
			)
		);
	}

	/**
	 * Log Execution.
	 *
	 * @throws Exception If the action status cannot be updated to self::STATUS_RUNNING ('in-progress').
	 *
	 * @param string $action_id Action ID.
	 */
	public function log_execution( $action_id ) {
		/**
		 * Global wpdb object.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$status_updated = $wpdb->query(
			$wpdb->prepare(
				"UPDATE {$wpdb->posts} SET menu_order = menu_order+1, post_status=%s, post_modified_gmt = %s, post_modified = %s WHERE ID = %d AND post_type = %s",
				self::STATUS_RUNNING,
				current_time( 'mysql', true ),
				current_time( 'mysql' ),
				$action_id,
				self::POST_TYPE
			)
		);

		if ( ! $status_updated ) {
			throw new Exception(
				sprintf(
					/* translators: 1: action ID. 2: status slug. */
					__( 'Unable to update the status of action %1$d to %2$s.', 'action-scheduler' ),
					$action_id,
					self::STATUS_RUNNING
				)
			);
		}
	}

	/**
	 * Record that an action was completed.
	 *
	 * @param string $action_id ID of the completed action.
	 *
	 * @throws InvalidArgumentException When the action ID is invalid.
	 * @throws RuntimeException         When there was an error executing the action.
	 */
	public function mark_complete( $action_id ) {
		$post = get_post( $action_id );
		if ( empty( $post ) || ( self::POST_TYPE !== $post->post_type ) ) {
			/* translators: %s is the action ID */
			throw new InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having completed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		add_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10, 1 );
		add_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10, 5 );
		$result = wp_update_post(
			array(
				'ID'          => $action_id,
				'post_status' => 'publish',
			),
			true
		);
		remove_filter( 'wp_insert_post_data', array( $this, 'filter_insert_post_data' ), 10 );
		remove_filter( 'pre_wp_unique_post_slug', array( $this, 'set_unique_post_slug' ), 10 );
		if ( is_wp_error( $result ) ) {
			throw new RuntimeException( $result->get_error_message() );
		}

		/**
		 * Fires after a scheduled action has been completed.
		 *
		 * @since 3.4.2
		 *
		 * @param int $action_id Action ID.
		 */
		do_action( 'action_scheduler_completed_action', $action_id );
	}

	/**
	 * Mark action as migrated when there is an error deleting the action.
	 *
	 * @param int $action_id Action ID.
	 */
	public function mark_migrated( $action_id ) {
		wp_update_post(
			array(
				'ID'          => $action_id,
				'post_status' => 'migrated',
			)
		);
	}

	/**
	 * Determine whether the post store can be migrated.
	 *
	 * @param [type] $setting - Setting value.
	 * @return bool
	 */
	public function migration_dependencies_met( $setting ) {
		global $wpdb;

		$dependencies_met = get_transient( self::DEPENDENCIES_MET );
		if ( empty( $dependencies_met ) ) {
			$maximum_args_length = apply_filters( 'action_scheduler_maximum_args_length', 191 );
			$found_action        = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
				$wpdb->prepare(
					"SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND CHAR_LENGTH(post_content) > %d LIMIT 1",
					$maximum_args_length,
					self::POST_TYPE
				)
			);
			$dependencies_met    = $found_action ? 'no' : 'yes';
			set_transient( self::DEPENDENCIES_MET, $dependencies_met, DAY_IN_SECONDS );
		}

		return 'yes' === $dependencies_met ? $setting : false;
	}

	/**
	 * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4.
	 *
	 * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However,
	 * as we prepare to move to custom tables, and can use an indexed VARCHAR column instead, we want to warn
	 * developers of this impending requirement.
	 *
	 * @param ActionScheduler_Action $action Action object.
	 */
	protected function validate_action( ActionScheduler_Action $action ) {
		try {
			parent::validate_action( $action );
		} catch ( Exception $e ) {
			/* translators: %s is the error message */
			$message = sprintf( __( '%s Support for strings longer than this will be removed in a future version.', 'action-scheduler' ), $e->getMessage() );
			_doing_it_wrong( 'ActionScheduler_Action::$args', esc_html( $message ), '2.1.0' );
		}
	}

	/**
	 * (@codeCoverageIgnore)
	 */
	public function init() {
		add_filter( 'action_scheduler_migration_dependencies_met', array( $this, 'migration_dependencies_met' ) );

		$post_type_registrar = new ActionScheduler_wpPostStore_PostTypeRegistrar();
		$post_type_registrar->register();

		$post_status_registrar = new ActionScheduler_wpPostStore_PostStatusRegistrar();
		$post_status_registrar->register();

		$taxonomy_registrar = new ActionScheduler_wpPostStore_TaxonomyRegistrar();
		$taxonomy_registrar->register();
	}
}
PK     ˆŠU]ji1ú  ú  i  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wpPostStore_TaxonomyRegistrar
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_wpPostStore_TaxonomyRegistrar {

	/**
	 * Registrar.
	 */
	public function register() {
		register_taxonomy( ActionScheduler_wpPostStore::GROUP_TAXONOMY, ActionScheduler_wpPostStore::POST_TYPE, $this->taxonomy_args() );
	}

	/**
	 * Get taxonomy arguments.
	 */
	protected function taxonomy_args() {
		$args = array(
			'label'             => __( 'Action Group', 'action-scheduler' ),
			'public'            => false,
			'hierarchical'      => false,
			'show_admin_column' => true,
			'query_var'         => false,
			'rewrite'           => false,
		);

		$args = apply_filters( 'action_scheduler_taxonomy_args', $args );
		return $args;
	}
}
PK     ˆŠU]¿ð/`Ñ   Ñ   S  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_DBStore
 *
 * Action data table data store.
 *
 * @since 3.0.0
 */
class ActionScheduler_DBStore extends ActionScheduler_Store {

	/**
	 * Used to share information about the before_date property of claims internally.
	 *
	 * This is used in preference to passing the same information as a method param
	 * for backwards-compatibility reasons.
	 *
	 * @var DateTime|null
	 */
	private $claim_before_date = null;

	/**
	 * Maximum length of args.
	 *
	 * @var int
	 */
	protected static $max_args_length = 8000;

	/**
	 * Maximum length of index.
	 *
	 * @var int
	 */
	protected static $max_index_length = 191;

	/**
	 * List of claim filters.
	 *
	 * @var array
	 */
	protected $claim_filters = array(
		'group'          => '',
		'hooks'          => '',
		'exclude-groups' => '',
	);

	/**
	 * Initialize the data store
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		$table_maker = new ActionScheduler_StoreSchema();
		$table_maker->init();
		$table_maker->register_tables();
	}

	/**
	 * Save an action, checks if this is a unique action before actually saving.
	 *
	 * @param ActionScheduler_Action $action         Action object.
	 * @param DateTime|null          $scheduled_date Optional schedule date. Default null.
	 *
	 * @return int                  Action ID.
	 * @throws RuntimeException     Throws exception when saving the action fails.
	 */
	public function save_unique_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		return $this->save_action_to_db( $action, $scheduled_date, true );
	}

	/**
	 * Save an action. Can save duplicate action as well, prefer using `save_unique_action` instead.
	 *
	 * @param ActionScheduler_Action $action Action object.
	 * @param DateTime|null          $scheduled_date Optional schedule date. Default null.
	 *
	 * @return int Action ID.
	 * @throws RuntimeException     Throws exception when saving the action fails.
	 */
	public function save_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		return $this->save_action_to_db( $action, $scheduled_date, false );
	}

	/**
	 * Save an action.
	 *
	 * @param ActionScheduler_Action $action Action object.
	 * @param ?DateTime              $date Optional schedule date. Default null.
	 * @param bool                   $unique Whether the action should be unique.
	 *
	 * @return int Action ID.
	 * @throws \RuntimeException     Throws exception when saving the action fails.
	 */
	private function save_action_to_db( ActionScheduler_Action $action, ?DateTime $date = null, $unique = false ) {
		global $wpdb;

		try {
			$this->validate_action( $action );

			$data = array(
				'hook'                 => $action->get_hook(),
				'status'               => ( $action->is_finished() ? self::STATUS_COMPLETE : self::STATUS_PENDING ),
				'scheduled_date_gmt'   => $this->get_scheduled_date_string( $action, $date ),
				'scheduled_date_local' => $this->get_scheduled_date_string_local( $action, $date ),
				'schedule'             => serialize( $action->get_schedule() ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
				'group_id'             => current( $this->get_group_ids( $action->get_group() ) ),
				'priority'             => $action->get_priority(),
			);

			$args = wp_json_encode( $action->get_args() );
			if ( strlen( $args ) <= static::$max_index_length ) {
				$data['args'] = $args;
			} else {
				$data['args']          = $this->hash_args( $args );
				$data['extended_args'] = $args;
			}

			$insert_sql = $this->build_insert_sql( $data, $unique );

			// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- $insert_sql should be already prepared.
			$wpdb->query( $insert_sql );
			$action_id = $wpdb->insert_id;

			if ( is_wp_error( $action_id ) ) {
				throw new \RuntimeException( $action_id->get_error_message() );
			} elseif ( empty( $action_id ) ) {
				if ( $unique ) {
					return 0;
				}
				throw new \RuntimeException( $wpdb->last_error ? $wpdb->last_error : __( 'Database error.', 'action-scheduler' ) );
			}

			do_action( 'action_scheduler_stored_action', $action_id );

			return $action_id;
		} catch ( \Exception $e ) {
			/* translators: %s: error message */
			throw new \RuntimeException( sprintf( __( 'Error saving action: %s', 'action-scheduler' ), $e->getMessage() ), 0 );
		}
	}

	/**
	 * Helper function to build insert query.
	 *
	 * @param array $data Row data for action.
	 * @param bool  $unique Whether the action should be unique.
	 *
	 * @return string Insert query.
	 */
	private function build_insert_sql( array $data, $unique ) {
		global $wpdb;

		$columns      = array_keys( $data );
		$values       = array_values( $data );
		$placeholders = array_map( array( $this, 'get_placeholder_for_column' ), $columns );

		$table_name = ! empty( $wpdb->actionscheduler_actions ) ? $wpdb->actionscheduler_actions : $wpdb->prefix . 'actionscheduler_actions';

		$column_sql      = '`' . implode( '`, `', $columns ) . '`';
		$placeholder_sql = implode( ', ', $placeholders );
		$where_clause    = $this->build_where_clause_for_insert( $data, $table_name, $unique );

		// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare	 -- $column_sql and $where_clause are already prepared. $placeholder_sql is hardcoded.
		$insert_query = $wpdb->prepare(
			"
INSERT INTO $table_name ( $column_sql )
SELECT $placeholder_sql FROM DUAL
WHERE ( $where_clause ) IS NULL",
			$values
		);
		// phpcs:enable

		return $insert_query;
	}

	/**
	 * Helper method to build where clause for action insert statement.
	 *
	 * @param array  $data Row data for action.
	 * @param string $table_name Action table name.
	 * @param bool   $unique Where action should be unique.
	 *
	 * @return string Where clause to be used with insert.
	 */
	private function build_where_clause_for_insert( $data, $table_name, $unique ) {
		global $wpdb;

		if ( ! $unique ) {
			return 'SELECT NULL FROM DUAL';
		}

		$pending_statuses            = array(
			ActionScheduler_Store::STATUS_PENDING,
			ActionScheduler_Store::STATUS_RUNNING,
		);
		$pending_status_placeholders = implode( ', ', array_fill( 0, count( $pending_statuses ), '%s' ) );

		// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- $pending_status_placeholders is hardcoded.
		$where_clause = $wpdb->prepare(
			"
SELECT action_id FROM $table_name
WHERE status IN ( $pending_status_placeholders )
AND hook = %s
AND `group_id` = %d
",
			array_merge(
				$pending_statuses,
				array(
					$data['hook'],
					$data['group_id'],
				)
			)
		);
		// phpcs:enable

		return "$where_clause" . ' LIMIT 1';
	}

	/**
	 * Helper method to get $wpdb->prepare placeholder for a given column name.
	 *
	 * @param string $column_name Name of column in actions table.
	 *
	 * @return string Placeholder to use for given column.
	 */
	private function get_placeholder_for_column( $column_name ) {
		$string_columns = array(
			'hook',
			'status',
			'scheduled_date_gmt',
			'scheduled_date_local',
			'args',
			'schedule',
			'last_attempt_gmt',
			'last_attempt_local',
			'extended_args',
		);

		return in_array( $column_name, $string_columns, true ) ? '%s' : '%d';
	}

	/**
	 * Generate a hash from json_encoded $args using MD5 as this isn't for security.
	 *
	 * @param string $args JSON encoded action args.
	 * @return string
	 */
	protected function hash_args( $args ) {
		return md5( $args );
	}

	/**
	 * Get action args query param value from action args.
	 *
	 * @param array $args Action args.
	 * @return string
	 */
	protected function get_args_for_query( $args ) {
		$encoded = wp_json_encode( $args );
		if ( strlen( $encoded ) <= static::$max_index_length ) {
			return $encoded;
		}
		return $this->hash_args( $encoded );
	}
	/**
	 * Get a group's ID based on its name/slug.
	 *
	 * @param string|array $slugs                The string name of a group, or names for several groups.
	 * @param bool         $create_if_not_exists Whether to create the group if it does not already exist. Default, true - create the group.
	 *
	 * @return array The group IDs, if they exist or were successfully created. May be empty.
	 */
	protected function get_group_ids( $slugs, $create_if_not_exists = true ) {
		$slugs     = (array) $slugs;
		$group_ids = array();

		if ( empty( $slugs ) ) {
			return array();
		}

		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		foreach ( $slugs as $slug ) {
			$group_id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT group_id FROM {$wpdb->actionscheduler_groups} WHERE slug=%s", $slug ) );

			if ( empty( $group_id ) && $create_if_not_exists ) {
				$group_id = $this->create_group( $slug );
			}

			if ( $group_id ) {
				$group_ids[] = $group_id;
			}
		}

		return $group_ids;
	}

	/**
	 * Create an action group.
	 *
	 * @param string $slug Group slug.
	 *
	 * @return int Group ID.
	 */
	protected function create_group( $slug ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$wpdb->insert( $wpdb->actionscheduler_groups, array( 'slug' => $slug ) );

		return (int) $wpdb->insert_id;
	}

	/**
	 * Retrieve an action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return ActionScheduler_Action
	 */
	public function fetch_action( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$data = $wpdb->get_row(
			$wpdb->prepare(
				"SELECT a.*, g.slug AS `group` FROM {$wpdb->actionscheduler_actions} a LEFT JOIN {$wpdb->actionscheduler_groups} g ON a.group_id=g.group_id WHERE a.action_id=%d",
				$action_id
			)
		);

		if ( empty( $data ) ) {
			return $this->get_null_action();
		}

		if ( ! empty( $data->extended_args ) ) {
			$data->args = $data->extended_args;
			unset( $data->extended_args );
		}

		// Convert NULL dates to zero dates.
		$date_fields = array(
			'scheduled_date_gmt',
			'scheduled_date_local',
			'last_attempt_gmt',
			'last_attempt_gmt',
		);
		foreach ( $date_fields as $date_field ) {
			if ( is_null( $data->$date_field ) ) {
				$data->$date_field = ActionScheduler_StoreSchema::DEFAULT_DATE;
			}
		}

		try {
			$action = $this->make_action_from_db_record( $data );
		} catch ( ActionScheduler_InvalidActionException $exception ) {
			do_action( 'action_scheduler_failed_fetch_action', $action_id, $exception );
			return $this->get_null_action();
		}

		return $action;
	}

	/**
	 * Create a null action.
	 *
	 * @return ActionScheduler_NullAction
	 */
	protected function get_null_action() {
		return new ActionScheduler_NullAction();
	}

	/**
	 * Create an action from a database record.
	 *
	 * @param object $data Action database record.
	 *
	 * @return ActionScheduler_Action|ActionScheduler_CanceledAction|ActionScheduler_FinishedAction
	 */
	protected function make_action_from_db_record( $data ) {

		$hook     = $data->hook;
		$args     = json_decode( $data->args, true );
		$schedule = unserialize( $data->schedule ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize

		$this->validate_args( $args, $data->action_id );
		$this->validate_schedule( $schedule, $data->action_id );

		if ( empty( $schedule ) ) {
			$schedule = new ActionScheduler_NullSchedule();
		}
		$group = $data->group ? $data->group : '';

		return ActionScheduler::factory()->get_stored_action( $data->status, $data->hook, $args, $schedule, $group, $data->priority );
	}

	/**
	 * Returns the SQL statement to query (or count) actions.
	 *
	 * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status.
	 *
	 * @param array  $query Filtering options.
	 * @param string $select_or_count  Whether the SQL should select and return the IDs or just the row count.
	 *
	 * @return string SQL statement already properly escaped.
	 * @throws \InvalidArgumentException If the query is invalid.
	 * @throws \RuntimeException When "unknown partial args matching value".
	 */
	protected function get_query_actions_sql( array $query, $select_or_count = 'select' ) {

		if ( ! in_array( $select_or_count, array( 'select', 'count' ), true ) ) {
			throw new InvalidArgumentException( __( 'Invalid value for select or count parameter. Cannot query actions.', 'action-scheduler' ) );
		}

		$query = wp_parse_args(
			$query,
			array(
				'hook'                  => '',
				'args'                  => null,
				'partial_args_matching' => 'off', // can be 'like' or 'json'.
				'date'                  => null,
				'date_compare'          => '<=',
				'modified'              => null,
				'modified_compare'      => '<=',
				'group'                 => '',
				'status'                => '',
				'claimed'               => null,
				'per_page'              => 5,
				'offset'                => 0,
				'orderby'               => 'date',
				'order'                 => 'ASC',
			)
		);

		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$db_server_info = is_callable( array( $wpdb, 'db_server_info' ) ) ? $wpdb->db_server_info() : $wpdb->db_version();
		if ( false !== strpos( $db_server_info, 'MariaDB' ) ) {
			$supports_json = version_compare(
				PHP_VERSION_ID >= 80016 ? $wpdb->db_version() : preg_replace( '/[^0-9.].*/', '', str_replace( '5.5.5-', '', $db_server_info ) ),
				'10.2',
				'>='
			);
		} else {
			$supports_json = version_compare( $wpdb->db_version(), '5.7', '>=' );
		}

		$sql        = ( 'count' === $select_or_count ) ? 'SELECT count(a.action_id)' : 'SELECT a.action_id';
		$sql       .= " FROM {$wpdb->actionscheduler_actions} a";
		$sql_params = array();

		if ( ! empty( $query['group'] ) || 'group' === $query['orderby'] ) {
			$sql .= " LEFT JOIN {$wpdb->actionscheduler_groups} g ON g.group_id=a.group_id";
		}

		$sql .= ' WHERE 1=1';

		if ( ! empty( $query['group'] ) ) {
			$sql         .= ' AND g.slug=%s';
			$sql_params[] = $query['group'];
		}

		if ( ! empty( $query['hook'] ) ) {
			$sql         .= ' AND a.hook=%s';
			$sql_params[] = $query['hook'];
		}

		if ( ! is_null( $query['args'] ) ) {
			switch ( $query['partial_args_matching'] ) {
				case 'json':
					if ( ! $supports_json ) {
						throw new \RuntimeException( __( 'JSON partial matching not supported in your environment. Please check your MySQL/MariaDB version.', 'action-scheduler' ) );
					}
					$supported_types = array(
						'integer' => '%d',
						'boolean' => '%s',
						'double'  => '%f',
						'string'  => '%s',
					);
					foreach ( $query['args'] as $key => $value ) {
						$value_type = gettype( $value );
						if ( 'boolean' === $value_type ) {
							$value = $value ? 'true' : 'false';
						}
						$placeholder = isset( $supported_types[ $value_type ] ) ? $supported_types[ $value_type ] : false;
						if ( ! $placeholder ) {
							throw new \RuntimeException(
								sprintf(
									/* translators: %s: provided value type */
									__( 'The value type for the JSON partial matching is not supported. Must be either integer, boolean, double or string. %s type provided.', 'action-scheduler' ),
									$value_type
								)
							);
						}
						$sql         .= ' AND JSON_EXTRACT(a.args, %s)=' . $placeholder;
						$sql_params[] = '$.' . $key;
						$sql_params[] = $value;
					}
					break;
				case 'like':
					foreach ( $query['args'] as $key => $value ) {
						$sql         .= ' AND a.args LIKE %s';
						$json_partial = $wpdb->esc_like( trim( wp_json_encode( array( $key => $value ) ), '{}' ) );
						$sql_params[] = "%{$json_partial}%";
					}
					break;
				case 'off':
					$sql         .= ' AND a.args=%s';
					$sql_params[] = $this->get_args_for_query( $query['args'] );
					break;
				default:
					throw new \RuntimeException( __( 'Unknown partial args matching value.', 'action-scheduler' ) );
			}
		}

		if ( $query['status'] ) {
			$statuses     = (array) $query['status'];
			$placeholders = array_fill( 0, count( $statuses ), '%s' );
			$sql         .= ' AND a.status IN (' . join( ', ', $placeholders ) . ')';
			$sql_params   = array_merge( $sql_params, array_values( $statuses ) );
		}

		if ( $query['date'] instanceof \DateTime ) {
			$date = clone $query['date'];
			$date->setTimezone( new \DateTimeZone( 'UTC' ) );
			$date_string  = $date->format( 'Y-m-d H:i:s' );
			$comparator   = $this->validate_sql_comparator( $query['date_compare'] );
			$sql         .= " AND a.scheduled_date_gmt $comparator %s";
			$sql_params[] = $date_string;
		}

		if ( $query['modified'] instanceof \DateTime ) {
			$modified = clone $query['modified'];
			$modified->setTimezone( new \DateTimeZone( 'UTC' ) );
			$date_string  = $modified->format( 'Y-m-d H:i:s' );
			$comparator   = $this->validate_sql_comparator( $query['modified_compare'] );
			$sql         .= " AND a.last_attempt_gmt $comparator %s";
			$sql_params[] = $date_string;
		}

		if ( true === $query['claimed'] ) {
			$sql .= ' AND a.claim_id != 0';
		} elseif ( false === $query['claimed'] ) {
			$sql .= ' AND a.claim_id = 0';
		} elseif ( ! is_null( $query['claimed'] ) ) {
			$sql         .= ' AND a.claim_id = %d';
			$sql_params[] = $query['claimed'];
		}

		if ( ! empty( $query['search'] ) ) {
			$sql .= ' AND (a.hook LIKE %s OR (a.extended_args IS NULL AND a.args LIKE %s) OR a.extended_args LIKE %s';
			for ( $i = 0; $i < 3; $i++ ) {
				$sql_params[] = sprintf( '%%%s%%', $query['search'] );
			}

			$search_claim_id = (int) $query['search'];
			if ( $search_claim_id ) {
				$sql         .= ' OR a.claim_id = %d';
				$sql_params[] = $search_claim_id;
			}

			$sql .= ')';
		}

		if ( 'select' === $select_or_count ) {
			if ( 'ASC' === strtoupper( $query['order'] ) ) {
				$order = 'ASC';
			} else {
				$order = 'DESC';
			}
			switch ( $query['orderby'] ) {
				case 'hook':
					$sql .= " ORDER BY a.hook $order";
					break;
				case 'group':
					$sql .= " ORDER BY g.slug $order";
					break;
				case 'modified':
					$sql .= " ORDER BY a.last_attempt_gmt $order";
					break;
				case 'none':
					break;
				case 'action_id':
					$sql .= " ORDER BY a.action_id $order";
					break;
				case 'date':
				default:
					$sql .= " ORDER BY a.scheduled_date_gmt $order";
					break;
			}

			if ( $query['per_page'] > 0 ) {
				$sql         .= ' LIMIT %d, %d';
				$sql_params[] = $query['offset'];
				$sql_params[] = $query['per_page'];
			}
		}

		if ( ! empty( $sql_params ) ) {
			$sql = $wpdb->prepare( $sql, $sql_params ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		}

		return $sql;
	}

	/**
	 * Query for action count or list of action IDs.
	 *
	 * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status.
	 *
	 * @see ActionScheduler_Store::query_actions for $query arg usage.
	 *
	 * @param array  $query      Query filtering options.
	 * @param string $query_type Whether to select or count the results. Defaults to select.
	 *
	 * @return string|array|null The IDs of actions matching the query. Null on failure.
	 */
	public function query_actions( $query = array(), $query_type = 'select' ) {
		/**
		 * Global.
		 *
		 * @var wpdb $wpdb
		 */
		global $wpdb;

		$sql = $this->get_query_actions_sql( $query, $query_type );

		return ( 'count' === $query_type ) ? $wpdb->get_var( $sql ) : $wpdb->get_col( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoSql, WordPress.DB.DirectDatabaseQuery.NoCaching
	}

	/**
	 * Get a count of all actions in the store, grouped by status.
	 *
	 * @return array Set of 'status' => int $count pairs for statuses with 1 or more actions of that status.
	 */
	public function action_counts() {
		global $wpdb;

		$sql  = "SELECT a.status, count(a.status) as 'count'";
		$sql .= " FROM {$wpdb->actionscheduler_actions} a";
		$sql .= ' GROUP BY a.status';

		$actions_count_by_status = array();
		$action_stati_and_labels = $this->get_status_labels();

		foreach ( $wpdb->get_results( $sql ) as $action_data ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
			// Ignore any actions with invalid status.
			if ( array_key_exists( $action_data->status, $action_stati_and_labels ) ) {
				$actions_count_by_status[ $action_data->status ] = $action_data->count;
			}
		}

		return $actions_count_by_status;
	}

	/**
	 * Cancel an action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return void
	 * @throws \InvalidArgumentException If the action update failed.
	 */
	public function cancel_action( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$updated = $wpdb->update(
			$wpdb->actionscheduler_actions,
			array( 'status' => self::STATUS_CANCELED ),
			array( 'action_id' => $action_id ),
			array( '%s' ),
			array( '%d' )
		);
		if ( false === $updated ) {
			/* translators: %s: action ID */
			throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to cancel this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		do_action( 'action_scheduler_canceled_action', $action_id );
	}

	/**
	 * Cancel pending actions by hook.
	 *
	 * @since 3.0.0
	 *
	 * @param string $hook Hook name.
	 *
	 * @return void
	 */
	public function cancel_actions_by_hook( $hook ) {
		$this->bulk_cancel_actions( array( 'hook' => $hook ) );
	}

	/**
	 * Cancel pending actions by group.
	 *
	 * @param string $group Group slug.
	 *
	 * @return void
	 */
	public function cancel_actions_by_group( $group ) {
		$this->bulk_cancel_actions( array( 'group' => $group ) );
	}

	/**
	 * Bulk cancel actions.
	 *
	 * @since 3.0.0
	 *
	 * @param array $query_args Query parameters.
	 */
	protected function bulk_cancel_actions( $query_args ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		if ( ! is_array( $query_args ) ) {
			return;
		}

		// Don't cancel actions that are already canceled.
		if ( isset( $query_args['status'] ) && self::STATUS_CANCELED === $query_args['status'] ) {
			return;
		}

		$action_ids = true;
		$query_args = wp_parse_args(
			$query_args,
			array(
				'per_page' => 1000,
				'status'   => self::STATUS_PENDING,
				'orderby'  => 'none',
			)
		);

		while ( $action_ids ) {
			$action_ids = $this->query_actions( $query_args );
			if ( empty( $action_ids ) ) {
				break;
			}

			$format     = array_fill( 0, count( $action_ids ), '%d' );
			$query_in   = '(' . implode( ',', $format ) . ')';
			$parameters = $action_ids;
			array_unshift( $parameters, self::STATUS_CANCELED );

			$wpdb->query(
				$wpdb->prepare(
					"UPDATE {$wpdb->actionscheduler_actions} SET status = %s WHERE action_id IN {$query_in}", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
					$parameters
				)
			);

			do_action( 'action_scheduler_bulk_cancel_actions', $action_ids );
		}
	}

	/**
	 * Delete an action.
	 *
	 * @param int $action_id Action ID.
	 * @throws \InvalidArgumentException If the action deletion failed.
	 */
	public function delete_action( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$deleted = $wpdb->delete( $wpdb->actionscheduler_actions, array( 'action_id' => $action_id ), array( '%d' ) );
		if ( empty( $deleted ) ) {
			/* translators: %s is the action ID */
			throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to delete this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		do_action( 'action_scheduler_deleted_action', $action_id );
	}

	/**
	 * Get the schedule date for an action.
	 *
	 * @param string $action_id Action ID.
	 *
	 * @return \DateTime The local date the action is scheduled to run, or the date that it ran.
	 */
	public function get_date( $action_id ) {
		$date = $this->get_date_gmt( $action_id );
		ActionScheduler_TimezoneHelper::set_local_timezone( $date );
		return $date;
	}

	/**
	 * Get the GMT schedule date for an action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @throws \InvalidArgumentException If action cannot be identified.
	 * @return \DateTime The GMT date the action is scheduled to run, or the date that it ran.
	 */
	protected function get_date_gmt( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$record = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d", $action_id ) );
		if ( empty( $record ) ) {
			/* translators: %s is the action ID */
			throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to determine the date of this action. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
		if ( self::STATUS_PENDING === $record->status ) {
			return as_get_datetime_object( $record->scheduled_date_gmt );
		} else {
			return as_get_datetime_object( $record->last_attempt_gmt );
		}
	}

	/**
	 * Stake a claim on actions.
	 *
	 * @param int           $max_actions Maximum number of action to include in claim.
	 * @param DateTime|null $before_date Jobs must be schedule before this date. Defaults to now.
	 * @param array         $hooks Hooks to filter for.
	 * @param string        $group Group to filter for.
	 *
	 * @return ActionScheduler_ActionClaim
	 */
	public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
		$claim_id = $this->generate_claim_id();

		$this->claim_before_date = $before_date;
		$this->claim_actions( $claim_id, $max_actions, $before_date, $hooks, $group );
		$action_ids              = $this->find_actions_by_claim_id( $claim_id );
		$this->claim_before_date = null;

		return new ActionScheduler_ActionClaim( $claim_id, $action_ids );
	}

	/**
	 * Generate a new action claim.
	 *
	 * @return int Claim ID.
	 */
	protected function generate_claim_id() {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$now = as_get_datetime_object();
		$wpdb->insert( $wpdb->actionscheduler_claims, array( 'date_created_gmt' => $now->format( 'Y-m-d H:i:s' ) ) );

		return $wpdb->insert_id;
	}

	/**
	 * Set a claim filter.
	 *
	 * @param string $filter_name Claim filter name.
	 * @param mixed  $filter_values Values to filter.
	 * @return void
	 */
	public function set_claim_filter( $filter_name, $filter_values ) {
		if ( isset( $this->claim_filters[ $filter_name ] ) ) {
			$this->claim_filters[ $filter_name ] = $filter_values;
		}
	}

	/**
	 * Get the claim filter value.
	 *
	 * @param string $filter_name Claim filter name.
	 * @return mixed
	 */
	public function get_claim_filter( $filter_name ) {
		if ( isset( $this->claim_filters[ $filter_name ] ) ) {
			return $this->claim_filters[ $filter_name ];
		}

		return '';
	}

	/**
	 * Mark actions claimed.
	 *
	 * @param string        $claim_id Claim Id.
	 * @param int           $limit Number of action to include in claim.
	 * @param DateTime|null $before_date Should use UTC timezone.
	 * @param array         $hooks Hooks to filter for.
	 * @param string        $group Group to filter for.
	 *
	 * @return int The number of actions that were claimed.
	 * @throws \InvalidArgumentException Throws InvalidArgumentException if group doesn't exist.
	 * @throws \RuntimeException Throws RuntimeException if unable to claim action.
	 */
	protected function claim_actions( $claim_id, $limit, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;
		$now  = as_get_datetime_object();
		$date = is_null( $before_date ) ? $now : clone $before_date;

		// Set claim filters.
		if ( ! empty( $hooks ) ) {
			$this->set_claim_filter( 'hooks', $hooks );
		} else {
			$hooks = $this->get_claim_filter( 'hooks' );
		}
		if ( ! empty( $group ) ) {
			$this->set_claim_filter( 'group', $group );
		} else {
			$group = $this->get_claim_filter( 'group' );
		}

		$where        = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s';
		$where_params = array(
			$date->format( 'Y-m-d H:i:s' ),
			self::STATUS_PENDING,
		);

		if ( ! empty( $hooks ) ) {
			$placeholders = array_fill( 0, count( $hooks ), '%s' );
			$where        .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';
			$where_params = array_merge( $where_params, array_values( $hooks ) );
		}

		$group_operator = 'IN';
		if ( empty( $group ) ) {
			$group          = $this->get_claim_filter( 'exclude-groups' );
			$group_operator = 'NOT IN';
		}

		if ( ! empty( $group ) ) {
			$group_ids = $this->get_group_ids( $group, false );

			// throw exception if no matching group(s) found, this matches ActionScheduler_wpPostStore's behaviour.
			if ( empty( $group_ids ) ) {
				throw new InvalidArgumentException(
					sprintf(
						/* translators: %s: group name(s) */
						_n(
							'The group "%s" does not exist.',
							'The groups "%s" do not exist.',
							is_array( $group ) ? count( $group ) : 1,
							'action-scheduler'
						),
						$group
					)
				);
			}

			$id_list = implode( ',', array_map( 'intval', $group_ids ) );
			$where  .= " AND group_id {$group_operator} ( $id_list )";
		}

		/**
		 * Sets the order-by clause used in the action claim query.
		 *
		 * @param string $order_by_sql
		 * @param string $claim_id Claim Id.
		 * @param array  $hooks    Hooks to filter for.
		 *
		 * @since 3.8.3 Made $claim_id and $hooks available.
		 * @since 3.4.0
		 */
		$order       = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks );
		$skip_locked = $this->db_supports_skip_locked() ? ' SKIP LOCKED' : '';

		// Selecting the action_ids that we plan to claim, while skipping any locked rows to avoid deadlocking.
		$select_sql = $wpdb->prepare( "SELECT action_id from {$wpdb->actionscheduler_actions} {$where} {$order} LIMIT %d FOR UPDATE{$skip_locked}", array_merge( $where_params, array( $limit ) ) );

		// Now place it into an UPDATE statement by joining the result sets, allowing for the SKIP LOCKED behavior to take effect.
		$update_sql    = "UPDATE {$wpdb->actionscheduler_actions} t1 JOIN ( $select_sql ) t2 ON t1.action_id = t2.action_id SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";
		$update_params = array(
			$claim_id,
			$now->format( 'Y-m-d H:i:s' ),
			current_time( 'mysql' ),
		);

		$rows_affected = $wpdb->query( $wpdb->prepare( $update_sql, $update_params ) );
		if ( false === $rows_affected ) {
			$error = empty( $wpdb->last_error )
				? _x( 'unknown', 'database error', 'action-scheduler' )
				: $wpdb->last_error;
			throw new \RuntimeException(
				sprintf(
					/* translators: %s database error. */
					__( 'Unable to claim actions. Database error: %s.', 'action-scheduler' ),
					$error
				)
			);
		}

		return (int) $rows_affected;
	}

	/**
	 * Determines whether the database supports using SKIP LOCKED. This logic mimicks the $wpdb::has_cap() logic.
	 *
	 * SKIP_LOCKED support was added to MariaDB in 10.6.0 and to MySQL in 8.0.1
	 *
	 * @return bool
	 */
	private function db_supports_skip_locked() {
		global $wpdb;
		$db_version     = $wpdb->db_version();
		$db_server_info = $wpdb->db_server_info();
		$is_mariadb     = ( false !== strpos( $db_server_info, 'MariaDB' ) );

		if ( $is_mariadb &&
		     '5.5.5' === $db_version &&
		     PHP_VERSION_ID < 80016 // PHP 8.0.15 or older.
		) {
			/*
			 * Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions.
			 */
			$db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info );
			$db_version     = preg_replace( '/[^0-9.].*/', '', $db_server_info );
		}

		$is_supported = ( $is_mariadb && version_compare( $db_version, '10.6.0', '>=' ) ) ||
		                ( ! $is_mariadb && version_compare( $db_version, '8.0.1', '>=' ) );

		/**
		 * Filter whether the database supports the SKIP LOCKED modifier for queries.
		 *
		 * @param bool $is_supported Whether SKIP LOCKED is supported.
		 *
		 * @since 3.9.3
		 */
		return apply_filters( 'action_scheduler_db_supports_skip_locked', $is_supported );
	}

	/**
	 * Get the number of active claims.
	 *
	 * @return int
	 */
	public function get_claim_count() {
		global $wpdb;

		$sql = "SELECT COUNT(DISTINCT claim_id) FROM {$wpdb->actionscheduler_actions} WHERE claim_id != 0 AND status IN ( %s, %s)";
		$sql = $wpdb->prepare( $sql, array( self::STATUS_PENDING, self::STATUS_RUNNING ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		return (int) $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	}

	/**
	 * Return an action's claim ID, as stored in the claim_id column.
	 *
	 * @param string $action_id Action ID.
	 * @return mixed
	 */
	public function get_claim_id( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$sql = "SELECT claim_id FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d";
		$sql = $wpdb->prepare( $sql, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		return (int) $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	}

	/**
	 * Retrieve the action IDs of action in a claim.
	 *
	 * @param  int $claim_id Claim ID.
	 * @return int[]
	 */
	public function find_actions_by_claim_id( $claim_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$action_ids  = array();
		$before_date = isset( $this->claim_before_date ) ? $this->claim_before_date : as_get_datetime_object();
		$cut_off     = $before_date->format( 'Y-m-d H:i:s' );

		$sql = $wpdb->prepare(
			"SELECT action_id, scheduled_date_gmt FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC",
			$claim_id
		);

		// Verify that the scheduled date for each action is within the expected bounds (in some unusual
		// cases, we cannot depend on MySQL to honor all of the WHERE conditions we specify).
		foreach ( $wpdb->get_results( $sql ) as $claimed_action ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
			if ( $claimed_action->scheduled_date_gmt <= $cut_off ) {
				$action_ids[] = absint( $claimed_action->action_id );
			}
		}

		return $action_ids;
	}

	/**
	 * Release pending actions from a claim and delete the claim.
	 *
	 * @param ActionScheduler_ActionClaim $claim Claim object.
	 * @throws \RuntimeException When unable to release actions from claim.
	 */
	public function release_claim( ActionScheduler_ActionClaim $claim ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		if ( 0 === intval( $claim->get_id() ) ) {
			// Verify that the claim_id is valid before attempting to release it.
			return;
		}

		/**
		 * Deadlock warning: This function modifies actions to release them from claims that have been processed. Earlier, we used to it in a atomic query, i.e. we would update all actions belonging to a particular claim_id with claim_id = 0.
		 * While this was functionally correct, it would cause deadlock, since this update query will hold a lock on the claim_id_.. index on the action table.
		 * This allowed the possibility of a race condition, where the claimer query is also running at the same time, then the claimer query will also try to acquire a lock on the claim_id_.. index, and in this case if claim release query has already progressed to the point of acquiring the lock, but have not updated yet, it would cause a deadlock.
		 *
		 * We resolve this by getting all the actions_id that we want to release claim from in a separate query, and then releasing the claim on each of them. This way, our lock is acquired on the action_id index instead of the claim_id index. Note that the lock on claim_id will still be acquired, but it will only when we actually make the update, rather than when we select the actions.
		 *
		 * We only release pending actions in order for them to be claimed by another process.
		 */
		$action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d AND status = %s", $claim->get_id(), self::STATUS_PENDING ) );

		$row_updates = 0;
		if ( count( $action_ids ) > 0 ) {
			$action_id_string = implode( ',', array_map( 'absint', $action_ids ) );
			$row_updates      = $wpdb->query( "UPDATE {$wpdb->actionscheduler_actions} SET claim_id = 0 WHERE action_id IN ({$action_id_string})" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
		}

		$wpdb->delete( $wpdb->actionscheduler_claims, array( 'claim_id' => $claim->get_id() ), array( '%d' ) );

		if ( $row_updates < count( $action_ids ) ) {
			throw new RuntimeException(
				sprintf(
					// translators: %d is an id.
					__( 'Unable to release actions from claim id %d.', 'action-scheduler' ),
					$claim->get_id()
				)
			);
		}
	}

	/**
	 * Remove the claim from an action.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return void
	 */
	public function unclaim_action( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$wpdb->update(
			$wpdb->actionscheduler_actions,
			array( 'claim_id' => 0 ),
			array( 'action_id' => $action_id ),
			array( '%s' ),
			array( '%d' )
		);
	}

	/**
	 * Mark an action as failed.
	 *
	 * @param int $action_id Action ID.
	 * @throws \InvalidArgumentException Throw an exception if action was not updated.
	 */
	public function mark_failure( $action_id ) {
		/**
		 * Global.

		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$updated = $wpdb->update(
			$wpdb->actionscheduler_actions,
			array( 'status' => self::STATUS_FAILED ),
			array( 'action_id' => $action_id ),
			array( '%s' ),
			array( '%d' )
		);
		if ( empty( $updated ) ) {
			/* translators: %s is the action ID */
			throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having failed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}
	}

	/**
	 * Add execution message to action log.
	 *
	 * @throws Exception If the action status cannot be updated to self::STATUS_RUNNING ('in-progress').
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return void
	 */
	public function log_execution( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$sql = "UPDATE {$wpdb->actionscheduler_actions} SET attempts = attempts+1, status=%s, last_attempt_gmt = %s, last_attempt_local = %s WHERE action_id = %d";
		$sql = $wpdb->prepare( $sql, self::STATUS_RUNNING, current_time( 'mysql', true ), current_time( 'mysql' ), $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		$status_updated = $wpdb->query( $sql );

		if ( ! $status_updated ) {
			throw new Exception(
				sprintf(
					/* translators: 1: action ID. 2: status slug. */
					__( 'Unable to update the status of action %1$d to %2$s.', 'action-scheduler' ),
					$action_id,
					self::STATUS_RUNNING
				)
			);
		}
	}

	/**
	 * Mark an action as complete.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return void
	 * @throws \InvalidArgumentException Throw an exception if action was not updated.
	 */
	public function mark_complete( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$updated = $wpdb->update(
			$wpdb->actionscheduler_actions,
			array(
				'status'             => self::STATUS_COMPLETE,
				'last_attempt_gmt'   => current_time( 'mysql', true ),
				'last_attempt_local' => current_time( 'mysql' ),
			),
			array( 'action_id' => $action_id ),
			array( '%s' ),
			array( '%d' )
		);
		if ( empty( $updated ) ) {
			/* translators: %s is the action ID */
			throw new \InvalidArgumentException( sprintf( __( 'Unidentified action %s: we were unable to mark this action as having completed. It may may have been deleted by another process.', 'action-scheduler' ), $action_id ) );
		}

		/**
		 * Fires after a scheduled action has been completed.
		 *
		 * @since 3.4.2
		 *
		 * @param int $action_id Action ID.
		 */
		do_action( 'action_scheduler_completed_action', $action_id );
	}

	/**
	 * Get an action's status.
	 *
	 * @param int $action_id Action ID.
	 *
	 * @return string
	 * @throws \InvalidArgumentException Throw an exception if not status was found for action_id.
	 * @throws \RuntimeException Throw an exception if action status could not be retrieved.
	 */
	public function get_status( $action_id ) {
		/**
		 * Global.
		 *
		 * @var \wpdb $wpdb
		 */
		global $wpdb;

		$sql    = "SELECT status FROM {$wpdb->actionscheduler_actions} WHERE action_id=%d";
		$sql    = $wpdb->prepare( $sql, $action_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		$status = $wpdb->get_var( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		if ( is_null( $status ) ) {
			throw new \InvalidArgumentException( __( 'Invalid action ID. No status found.', 'action-scheduler' ) );
		} elseif ( empty( $status ) ) {
			throw new \RuntimeException( __( 'Unknown status found for action.', 'action-scheduler' ) );
		} else {
			return $status;
		}
	}
}
PK     ˆŠU]ôÀÒu    [  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wpCommentLogger
 */
class ActionScheduler_wpCommentLogger extends ActionScheduler_Logger {
	const AGENT = 'ActionScheduler';
	const TYPE  = 'action_log';

	/**
	 * Create log entry.
	 *
	 * @param string        $action_id Action ID.
	 * @param string        $message   Action log's message.
	 * @param DateTime|null $date      Action log's timestamp.
	 *
	 * @return string The log entry ID
	 */
	public function log( $action_id, $message, ?DateTime $date = null ) {
		if ( empty( $date ) ) {
			$date = as_get_datetime_object();
		} else {
			$date = as_get_datetime_object( clone $date );
		}
		$comment_id = $this->create_wp_comment( $action_id, $message, $date );
		return $comment_id;
	}

	/**
	 * Create comment.
	 *
	 * @param int      $action_id Action ID.
	 * @param string   $message Action log's message.
	 * @param DateTime $date Action log entry's timestamp.
	 */
	protected function create_wp_comment( $action_id, $message, DateTime $date ) {

		$comment_date_gmt = $date->format( 'Y-m-d H:i:s' );
		ActionScheduler_TimezoneHelper::set_local_timezone( $date );
		$comment_data = array(
			'comment_post_ID'  => $action_id,
			'comment_date'     => $date->format( 'Y-m-d H:i:s' ),
			'comment_date_gmt' => $comment_date_gmt,
			'comment_author'   => self::AGENT,
			'comment_content'  => $message,
			'comment_agent'    => self::AGENT,
			'comment_type'     => self::TYPE,
		);

		return wp_insert_comment( $comment_data );
	}

	/**
	 * Get single log entry for action.
	 *
	 * @param string $entry_id Entry ID.
	 *
	 * @return ActionScheduler_LogEntry
	 */
	public function get_entry( $entry_id ) {
		$comment = $this->get_comment( $entry_id );

		if ( empty( $comment ) || self::TYPE !== $comment->comment_type ) {
			return new ActionScheduler_NullLogEntry();
		}

		$date = as_get_datetime_object( $comment->comment_date_gmt );
		ActionScheduler_TimezoneHelper::set_local_timezone( $date );
		return new ActionScheduler_LogEntry( $comment->comment_post_ID, $comment->comment_content, $date );
	}

	/**
	 * Get action's logs.
	 *
	 * @param string $action_id Action ID.
	 *
	 * @return ActionScheduler_LogEntry[]
	 */
	public function get_logs( $action_id ) {
		$status = 'all';
		$logs   = array();

		if ( get_post_status( $action_id ) === 'trash' ) {
			$status = 'post-trashed';
		}

		$comments = get_comments(
			array(
				'post_id' => $action_id,
				'orderby' => 'comment_date_gmt',
				'order'   => 'ASC',
				'type'    => self::TYPE,
				'status'  => $status,
			)
		);

		foreach ( $comments as $c ) {
			$entry = $this->get_entry( $c );

			if ( ! empty( $entry ) ) {
				$logs[] = $entry;
			}
		}

		return $logs;
	}

	/**
	 * Get comment.
	 *
	 * @param int $comment_id Comment ID.
	 */
	protected function get_comment( $comment_id ) {
		return get_comment( $comment_id );
	}

	/**
	 * Filter comment queries.
	 *
	 * @param WP_Comment_Query $query Comment query object.
	 */
	public function filter_comment_queries( $query ) {
		foreach ( array( 'ID', 'parent', 'post_author', 'post_name', 'post_parent', 'type', 'post_type', 'post_id', 'post_ID' ) as $key ) {
			if ( ! empty( $query->query_vars[ $key ] ) ) {
				return; // don't slow down queries that wouldn't include action_log comments anyway.
			}
		}
		$query->query_vars['action_log_filter'] = true;
		add_filter( 'comments_clauses', array( $this, 'filter_comment_query_clauses' ), 10, 2 );
	}

	/**
	 * Filter comment queries.
	 *
	 * @param array            $clauses Query's clauses.
	 * @param WP_Comment_Query $query Query object.
	 *
	 * @return array
	 */
	public function filter_comment_query_clauses( $clauses, $query ) {
		if ( ! empty( $query->query_vars['action_log_filter'] ) ) {
			$clauses['where'] .= $this->get_where_clause();
		}
		return $clauses;
	}

	/**
	 * Make sure Action Scheduler logs are excluded from comment feeds, which use WP_Query, not
	 * the WP_Comment_Query class handled by @see self::filter_comment_queries().
	 *
	 * @param string   $where Query's `where` clause.
	 * @param WP_Query $query Query object.
	 *
	 * @return string
	 */
	public function filter_comment_feed( $where, $query ) {
		if ( is_comment_feed() ) {
			$where .= $this->get_where_clause();
		}
		return $where;
	}

	/**
	 * Return a SQL clause to exclude Action Scheduler comments.
	 *
	 * @return string
	 */
	protected function get_where_clause() {
		global $wpdb;
		return sprintf( " AND {$wpdb->comments}.comment_type != '%s'", self::TYPE );
	}

	/**
	 * Remove action log entries from wp_count_comments()
	 *
	 * @param array $stats   Comment count.
	 * @param int   $post_id Post ID.
	 *
	 * @return object
	 */
	public function filter_comment_count( $stats, $post_id ) {
		global $wpdb;

		if ( 0 === $post_id ) {
			$stats = $this->get_comment_count();
		}

		return $stats;
	}

	/**
	 * Retrieve the comment counts from our cache, or the database if the cached version isn't set.
	 *
	 * @return object
	 */
	protected function get_comment_count() {
		global $wpdb;

		$stats = get_transient( 'as_comment_count' );

		if ( ! $stats ) {
			$stats    = array();
			$count    = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} WHERE comment_type NOT IN('order_note','action_log') GROUP BY comment_approved", ARRAY_A );
			$total    = 0;
			$stats    = array();
			$approved = array(
				'0'            => 'moderated',
				'1'            => 'approved',
				'spam'         => 'spam',
				'trash'        => 'trash',
				'post-trashed' => 'post-trashed',
			);

			foreach ( (array) $count as $row ) {
				// Don't count post-trashed toward totals.
				if ( 'post-trashed' !== $row['comment_approved'] && 'trash' !== $row['comment_approved'] ) {
					$total += $row['num_comments'];
				}
				if ( isset( $approved[ $row['comment_approved'] ] ) ) {
					$stats[ $approved[ $row['comment_approved'] ] ] = $row['num_comments'];
				}
			}

			$stats['total_comments'] = $total;
			$stats['all']            = $total;

			foreach ( $approved as $key ) {
				if ( empty( $stats[ $key ] ) ) {
					$stats[ $key ] = 0;
				}
			}

			$stats = (object) $stats;
			set_transient( 'as_comment_count', $stats );
		}

		return $stats;
	}

	/**
	 * Delete comment count cache whenever there is new comment or the status of a comment changes. Cache
	 * will be regenerated next time ActionScheduler_wpCommentLogger::filter_comment_count() is called.
	 */
	public function delete_comment_count_cache() {
		delete_transient( 'as_comment_count' );
	}

	/**
	 * Initialize.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		add_action( 'action_scheduler_before_process_queue', array( $this, 'disable_comment_counting' ), 10, 0 );
		add_action( 'action_scheduler_after_process_queue', array( $this, 'enable_comment_counting' ), 10, 0 );

		parent::init();

		add_action( 'pre_get_comments', array( $this, 'filter_comment_queries' ), 10, 1 );
		add_action( 'wp_count_comments', array( $this, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs.
		add_action( 'comment_feed_where', array( $this, 'filter_comment_feed' ), 10, 2 );

		// Delete comments count cache whenever there is a new comment or a comment status changes.
		add_action( 'wp_insert_comment', array( $this, 'delete_comment_count_cache' ) );
		add_action( 'wp_set_comment_status', array( $this, 'delete_comment_count_cache' ) );
	}

	/**
	 * Defer comment counting.
	 */
	public function disable_comment_counting() {
		wp_defer_comment_counting( true );
	}

	/**
	 * Enable comment counting.
	 */
	public function enable_comment_counting() {
		wp_defer_comment_counting( false );
	}

}
PK     ˆŠU]Ej„×†1  †1  W  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.phpnu „[µü¤        <?php

use ActionScheduler_Store as Store;
use Action_Scheduler\Migration\Runner;
use Action_Scheduler\Migration\Config;
use Action_Scheduler\Migration\Controller;

/**
 * Class ActionScheduler_HybridStore
 *
 * A wrapper around multiple stores that fetches data from both.
 *
 * @since 3.0.0
 */
class ActionScheduler_HybridStore extends Store {
	const DEMARKATION_OPTION = 'action_scheduler_hybrid_store_demarkation';

	/**
	 * Primary store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $primary_store;

	/**
	 * Secondary store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private $secondary_store;

	/**
	 * Runner instance.
	 *
	 * @var Action_Scheduler\Migration\Runner
	 */
	private $migration_runner;

	/**
	 * The dividing line between IDs of actions created
	 * by the primary and secondary stores.
	 *
	 * @var int
	 *
	 * Methods that accept an action ID will compare the ID against
	 * this to determine which store will contain that ID. In almost
	 * all cases, the ID should come from the primary store, but if
	 * client code is bypassing the API functions and fetching IDs
	 * from elsewhere, then there is a chance that an unmigrated ID
	 * might be requested.
	 */
	private $demarkation_id = 0;

	/**
	 * ActionScheduler_HybridStore constructor.
	 *
	 * @param Config|null $config Migration config object.
	 */
	public function __construct( ?Config $config = null ) {
		$this->demarkation_id = (int) get_option( self::DEMARKATION_OPTION, 0 );
		if ( empty( $config ) ) {
			$config = Controller::instance()->get_migration_config_object();
		}
		$this->primary_store    = $config->get_destination_store();
		$this->secondary_store  = $config->get_source_store();
		$this->migration_runner = new Runner( $config );
	}

	/**
	 * Initialize the table data store tables.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		add_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10, 2 );
		$this->primary_store->init();
		$this->secondary_store->init();
		remove_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10 );
	}

	/**
	 * When the actions table is created, set its autoincrement
	 * value to be one higher than the posts table to ensure that
	 * there are no ID collisions.
	 *
	 * @param string $table_name Table name.
	 * @param string $table_suffix Suffix of table name.
	 *
	 * @return void
	 * @codeCoverageIgnore
	 */
	public function set_autoincrement( $table_name, $table_suffix ) {
		if ( ActionScheduler_StoreSchema::ACTIONS_TABLE === $table_suffix ) {
			if ( empty( $this->demarkation_id ) ) {
				$this->demarkation_id = $this->set_demarkation_id();
			}

			/**
			 * Global.
			 *
			 * @var \wpdb $wpdb
			 */
			global $wpdb;

			/**
			 * A default date of '0000-00-00 00:00:00' is invalid in MySQL 5.7 when configured with
			 * sql_mode including both STRICT_TRANS_TABLES and NO_ZERO_DATE.
			 */
			$default_date = new DateTime( 'tomorrow' );
			$null_action  = new ActionScheduler_NullAction();
			$date_gmt     = $this->get_scheduled_date_string( $null_action, $default_date );
			$date_local   = $this->get_scheduled_date_string_local( $null_action, $default_date );

			$row_count = $wpdb->insert(
				$wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
				array(
					'action_id'            => $this->demarkation_id,
					'hook'                 => '',
					'status'               => '',
					'scheduled_date_gmt'   => $date_gmt,
					'scheduled_date_local' => $date_local,
					'last_attempt_gmt'     => $date_gmt,
					'last_attempt_local'   => $date_local,
				)
			);
			if ( $row_count > 0 ) {
				$wpdb->delete(
					$wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
					array( 'action_id' => $this->demarkation_id )
				);
			}
		}
	}

	/**
	 * Store the demarkation id in WP options.
	 *
	 * @param int $id The ID to set as the demarkation point between the two stores
	 *                Leave null to use the next ID from the WP posts table.
	 *
	 * @return int The new ID.
	 *
	 * @codeCoverageIgnore
	 */
	private function set_demarkation_id( $id = null ) {
		if ( empty( $id ) ) {
			/**
			 * Global.
			 *
			 * @var \wpdb $wpdb
			 */
			global $wpdb;

			$id = (int) $wpdb->get_var( "SELECT MAX(ID) FROM $wpdb->posts" );
			$id++;
		}
		update_option( self::DEMARKATION_OPTION, $id );

		return $id;
	}

	/**
	 * Find the first matching action from the secondary store.
	 * If it exists, migrate it to the primary store immediately.
	 * After it migrates, the secondary store will logically contain
	 * the next matching action, so return the result thence.
	 *
	 * @param string $hook Action's hook.
	 * @param array  $params Action's arguments.
	 *
	 * @return string
	 */
	public function find_action( $hook, $params = array() ) {
		$found_unmigrated_action = $this->secondary_store->find_action( $hook, $params );
		if ( ! empty( $found_unmigrated_action ) ) {
			$this->migrate( array( $found_unmigrated_action ) );
		}

		return $this->primary_store->find_action( $hook, $params );
	}

	/**
	 * Find actions matching the query in the secondary source first.
	 * If any are found, migrate them immediately. Then the secondary
	 * store will contain the canonical results.
	 *
	 * @param array  $query Query arguments.
	 * @param string $query_type Whether to select or count the results. Default, select.
	 *
	 * @return int[]
	 */
	public function query_actions( $query = array(), $query_type = 'select' ) {
		$found_unmigrated_actions = $this->secondary_store->query_actions( $query, 'select' );
		if ( ! empty( $found_unmigrated_actions ) ) {
			$this->migrate( $found_unmigrated_actions );
		}

		return $this->primary_store->query_actions( $query, $query_type );
	}

	/**
	 * Get a count of all actions in the store, grouped by status
	 *
	 * @return array Set of 'status' => int $count pairs for statuses with 1 or more actions of that status.
	 */
	public function action_counts() {
		$unmigrated_actions_count = $this->secondary_store->action_counts();
		$migrated_actions_count   = $this->primary_store->action_counts();
		$actions_count_by_status  = array();

		foreach ( $this->get_status_labels() as $status_key => $status_label ) {

			$count = 0;

			if ( isset( $unmigrated_actions_count[ $status_key ] ) ) {
				$count += $unmigrated_actions_count[ $status_key ];
			}

			if ( isset( $migrated_actions_count[ $status_key ] ) ) {
				$count += $migrated_actions_count[ $status_key ];
			}

			$actions_count_by_status[ $status_key ] = $count;
		}

		$actions_count_by_status = array_filter( $actions_count_by_status );

		return $actions_count_by_status;
	}

	/**
	 * If any actions would have been claimed by the secondary store,
	 * migrate them immediately, then ask the primary store for the
	 * canonical claim.
	 *
	 * @param int           $max_actions Maximum number of actions to claim.
	 * @param null|DateTime $before_date Latest timestamp of actions to claim.
	 * @param string[]      $hooks Hook of actions to claim.
	 * @param string        $group Group of actions to claim.
	 *
	 * @return ActionScheduler_ActionClaim
	 */
	public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
		$claim = $this->secondary_store->stake_claim( $max_actions, $before_date, $hooks, $group );

		$claimed_actions = $claim->get_actions();
		if ( ! empty( $claimed_actions ) ) {
			$this->migrate( $claimed_actions );
		}

		$this->secondary_store->release_claim( $claim );

		return $this->primary_store->stake_claim( $max_actions, $before_date, $hooks, $group );
	}

	/**
	 * Migrate a list of actions to the table data store.
	 *
	 * @param array $action_ids List of action IDs.
	 */
	private function migrate( $action_ids ) {
		$this->migration_runner->migrate_actions( $action_ids );
	}

	/**
	 * Save an action to the primary store.
	 *
	 * @param ActionScheduler_Action $action Action object to be saved.
	 * @param DateTime|null          $date Optional. Schedule date. Default null.
	 *
	 * @return int The action ID
	 */
	public function save_action( ActionScheduler_Action $action, ?DateTime $date = null ) {
		return $this->primary_store->save_action( $action, $date );
	}

	/**
	 * Retrieve an existing action whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function fetch_action( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id, true );
		if ( $store ) {
			return $store->fetch_action( $action_id );
		} else {
			return new ActionScheduler_NullAction();
		}
	}

	/**
	 * Cancel an existing action whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function cancel_action( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			$store->cancel_action( $action_id );
		}
	}

	/**
	 * Delete an existing action whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function delete_action( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			$store->delete_action( $action_id );
		}
	}

	/**
	 * Get the schedule date an existing action whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function get_date( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			return $store->get_date( $action_id );
		} else {
			return null;
		}
	}

	/**
	 * Mark an existing action as failed whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function mark_failure( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			$store->mark_failure( $action_id );
		}
	}

	/**
	 * Log the execution of an existing action whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function log_execution( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			$store->log_execution( $action_id );
		}
	}

	/**
	 * Mark an existing action complete whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function mark_complete( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			$store->mark_complete( $action_id );
		}
	}

	/**
	 * Get an existing action status whether migrated or not.
	 *
	 * @param int $action_id Action ID.
	 */
	public function get_status( $action_id ) {
		$store = $this->get_store_from_action_id( $action_id );
		if ( $store ) {
			return $store->get_status( $action_id );
		}
		return null;
	}

	/**
	 * Return which store an action is stored in.
	 *
	 * @param int  $action_id ID of the action.
	 * @param bool $primary_first Optional flag indicating search the primary store first.
	 * @return ActionScheduler_Store
	 */
	protected function get_store_from_action_id( $action_id, $primary_first = false ) {
		if ( $primary_first ) {
			$stores = array(
				$this->primary_store,
				$this->secondary_store,
			);
		} elseif ( $action_id < $this->demarkation_id ) {
			$stores = array(
				$this->secondary_store,
				$this->primary_store,
			);
		} else {
			$stores = array(
				$this->primary_store,
			);
		}

		foreach ( $stores as $store ) {
			$action = $store->fetch_action( $action_id );
			if ( ! is_a( $action, 'ActionScheduler_NullAction' ) ) {
				return $store;
			}
		}
		return null;
	}

	/**
	 * * * * * * * * * * * * * * * * * * * * * * * * * * *
	 * All claim-related functions should operate solely
	 * on the primary store.
	 * * * * * * * * * * * * * * * * * * * * * * * * * * *
	 */

	/**
	 * Get the claim count from the table data store.
	 */
	public function get_claim_count() {
		return $this->primary_store->get_claim_count();
	}

	/**
	 * Retrieve the claim ID for an action from the table data store.
	 *
	 * @param int $action_id Action ID.
	 */
	public function get_claim_id( $action_id ) {
		return $this->primary_store->get_claim_id( $action_id );
	}

	/**
	 * Release a claim in the table data store on any pending actions.
	 *
	 * @param ActionScheduler_ActionClaim $claim Claim object.
	 */
	public function release_claim( ActionScheduler_ActionClaim $claim ) {
		$this->primary_store->release_claim( $claim );
	}

	/**
	 * Release claims on an action in the table data store.
	 *
	 * @param int $action_id Action ID.
	 */
	public function unclaim_action( $action_id ) {
		$this->primary_store->unclaim_action( $action_id );
	}

	/**
	 * Retrieve a list of action IDs by claim.
	 *
	 * @param int $claim_id Claim ID.
	 */
	public function find_actions_by_claim_id( $claim_id ) {
		return $this->primary_store->find_actions_by_claim_id( $claim_id );
	}
}
PK     ˆŠU]ÒëuÉ  É  i  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_wpPostStore_PostTypeRegistrar
 *
 * @codeCoverageIgnore
 */
class ActionScheduler_wpPostStore_PostTypeRegistrar {
	/**
	 * Registrar.
	 */
	public function register() {
		register_post_type( ActionScheduler_wpPostStore::POST_TYPE, $this->post_type_args() );
	}

	/**
	 * Build the args array for the post type definition
	 *
	 * @return array
	 */
	protected function post_type_args() {
		$args = array(
			'label'        => __( 'Scheduled Actions', 'action-scheduler' ),
			'description'  => __( 'Scheduled actions are hooks triggered on a certain date and time.', 'action-scheduler' ),
			'public'       => false,
			'map_meta_cap' => true,
			'hierarchical' => false,
			'supports'     => array( 'title', 'editor', 'comments' ),
			'rewrite'      => false,
			'query_var'    => false,
			'can_export'   => true,
			'ep_mask'      => EP_NONE,
			'labels'       => array(
				'name'               => __( 'Scheduled Actions', 'action-scheduler' ),
				'singular_name'      => __( 'Scheduled Action', 'action-scheduler' ),
				'menu_name'          => _x( 'Scheduled Actions', 'Admin menu name', 'action-scheduler' ),
				'add_new'            => __( 'Add', 'action-scheduler' ),
				'add_new_item'       => __( 'Add New Scheduled Action', 'action-scheduler' ),
				'edit'               => __( 'Edit', 'action-scheduler' ),
				'edit_item'          => __( 'Edit Scheduled Action', 'action-scheduler' ),
				'new_item'           => __( 'New Scheduled Action', 'action-scheduler' ),
				'view'               => __( 'View Action', 'action-scheduler' ),
				'view_item'          => __( 'View Action', 'action-scheduler' ),
				'search_items'       => __( 'Search Scheduled Actions', 'action-scheduler' ),
				'not_found'          => __( 'No actions found', 'action-scheduler' ),
				'not_found_in_trash' => __( 'No actions found in trash', 'action-scheduler' ),
			),
		);

		$args = apply_filters( 'action_scheduler_post_type_args', $args );
		return $args;
	}
}
PK     ˆŠU]ØZï±  ±  P  vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_WPCommentCleaner
 *
 * @since 3.0.0
 */
class ActionScheduler_WPCommentCleaner {

	/**
	 * Post migration hook used to cleanup the WP comment table.
	 *
	 * @var string
	 */
	protected static $cleanup_hook = 'action_scheduler/cleanup_wp_comment_logs';

	/**
	 * An instance of the ActionScheduler_wpCommentLogger class to interact with the comments table.
	 *
	 * This instance should only be used as an interface. It should not be initialized.
	 *
	 * @var ActionScheduler_wpCommentLogger
	 */
	protected static $wp_comment_logger = null;

	/**
	 * The key used to store the cached value of whether there are logs in the WP comment table.
	 *
	 * @var string
	 */
	protected static $has_logs_option_key = 'as_has_wp_comment_logs';

	/**
	 * Initialize the class and attach callbacks.
	 */
	public static function init() {
		if ( empty( self::$wp_comment_logger ) ) {
			self::$wp_comment_logger = new ActionScheduler_wpCommentLogger();
		}

		add_action( self::$cleanup_hook, array( __CLASS__, 'delete_all_action_comments' ) );

		// While there are orphaned logs left in the comments table, we need to attach the callbacks which filter comment counts.
		add_action( 'pre_get_comments', array( self::$wp_comment_logger, 'filter_comment_queries' ), 10, 1 );
		add_action( 'wp_count_comments', array( self::$wp_comment_logger, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs.
		add_action( 'comment_feed_where', array( self::$wp_comment_logger, 'filter_comment_feed' ), 10, 2 );

		// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen.
		add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) );
		add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) );
	}

	/**
	 * Determines if there are log entries in the wp comments table.
	 *
	 * Uses the flag set on migration completion set by @see self::maybe_schedule_cleanup().
	 *
	 * @return boolean Whether there are scheduled action comments in the comments table.
	 */
	public static function has_logs() {
		return 'yes' === get_option( self::$has_logs_option_key );
	}

	/**
	 * Schedules the WP Post comment table cleanup to run in 6 months if it's not already scheduled.
	 * Attached to the migration complete hook 'action_scheduler/migration_complete'.
	 */
	public static function maybe_schedule_cleanup() {
		$has_logs = 'no';

		$args = array(
			'type'   => ActionScheduler_wpCommentLogger::TYPE,
			'number' => 1,
			'fields' => 'ids',
		);

		if ( (bool) get_comments( $args ) ) {
			$has_logs = 'yes';

			if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) {
				as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook );
			}
		}

		update_option( self::$has_logs_option_key, $has_logs, true );
	}

	/**
	 * Delete all action comments from the WP Comments table.
	 */
	public static function delete_all_action_comments() {
		global $wpdb;

		$wpdb->delete(
			$wpdb->comments,
			array(
				'comment_type'  => ActionScheduler_wpCommentLogger::TYPE,
				'comment_agent' => ActionScheduler_wpCommentLogger::AGENT,
			)
		);

		update_option( self::$has_logs_option_key, 'no', true );
	}

	/**
	 * Registers admin notices about the orphaned action logs.
	 */
	public static function register_admin_notice() {
		add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) );
	}

	/**
	 * Prints details about the orphaned action logs and includes information on where to learn more.
	 */
	public static function print_admin_notice() {
		$next_cleanup_message        = '';
		$next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook );

		if ( $next_scheduled_cleanup_hook ) {
			/* translators: %s: date interval */
			$next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) );
		}

		$notice = sprintf(
			/* translators: 1: next cleanup message 2: github issue URL */
			__( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s <a href="%2$s">Learn more &raquo;</a>', 'action-scheduler' ),
			$next_cleanup_message,
			'https://github.com/woocommerce/action-scheduler/issues/368'
		);

		echo '<div class="notice notice-warning"><p>' . wp_kses_post( $notice ) . '</p></div>';
	}
}
PK     ˆŠU]hÏ   Ï   I  vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.phpnu „[µü¤        <?php

/**
 * ActionScheduler Exception Interface.
 *
 * Facilitates catching Exceptions unique to Action Scheduler.
 *
 * @package ActionScheduler
 * @since 2.1.0
 */
interface ActionScheduler_Exception {}
PK     ˆŠU]™¸ç¬Œ  Œ  K  vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_ActionClaim
 */
class ActionScheduler_ActionClaim {
	/**
	 * Claim ID.
	 *
	 * @var string
	 */
	private $id = '';

	/**
	 * Claimed action IDs.
	 *
	 * @var int[]
	 */
	private $action_ids = array();

	/**
	 * Construct.
	 *
	 * @param string $id Claim ID.
	 * @param int[]  $action_ids Action IDs.
	 */
	public function __construct( $id, array $action_ids ) {
		$this->id         = $id;
		$this->action_ids = $action_ids;
	}

	/**
	 * Get claim ID.
	 */
	public function get_id() {
		return $this->id;
	}

	/**
	 * Get IDs of claimed actions.
	 */
	public function get_actions() {
		return $this->action_ids;
	}
}
PK     ˆŠU]±È dJ  J  L  vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_NullLogEntry
 */
class ActionScheduler_NullLogEntry extends ActionScheduler_LogEntry {

	/**
	 * Construct.
	 *
	 * @param string $action_id Action ID.
	 * @param string $message   Log entry.
	 */
	public function __construct( $action_id = '', $message = '' ) {
		// nothing to see here.
	}

}
PK     ˆŠU]ð.w>ó  ó  Z  vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.phpnu „[µü¤        <?php

/**
 * Commands for Action Scheduler.
 */
class ActionScheduler_WPCLI_Clean_Command extends WP_CLI_Command {
	/**
	 * Run the Action Scheduler Queue Cleaner
	 *
	 * ## OPTIONS
	 *
	 * [--batch-size=<size>]
	 * : The maximum number of actions to delete per batch. Defaults to 20.
	 *
	 * [--batches=<size>]
	 * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue all eligible actions are deleted.
	 *
	 * [--status=<status>]
	 * : Only clean actions with the specified status. Defaults to Canceled, Completed. Define multiple statuses as a comma separated string (without spaces), e.g. `--status=complete,failed,canceled`
	 *
	 * [--before=<datestring>]
	 * : Only delete actions with scheduled date older than this. Defaults to 31 days. e.g `--before='7 days ago'`, `--before='02-Feb-2020 20:20:20'`
	 *
	 * [--pause=<seconds>]
	 * : The number of seconds to pause between batches. Default no pause.
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @throws \WP_CLI\ExitException When an error occurs.
	 *
	 * @subcommand clean
	 */
	public function clean( $args, $assoc_args ) {
		// Handle passed arguments.
		$batch   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 20 ) );
		$batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) );
		$status  = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'status', '' ) );
		$status  = array_filter( array_map( 'trim', $status ) );
		$before  = \WP_CLI\Utils\get_flag_value( $assoc_args, 'before', '' );
		$sleep   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', 0 );

		$batches_completed = 0;
		$actions_deleted   = 0;
		$unlimited         = 0 === $batches;
		try {
			$lifespan = as_get_datetime_object( $before );
		} catch ( Exception $e ) {
			$lifespan = null;
		}

		try {
			// Custom queue cleaner instance.
			$cleaner = new ActionScheduler_QueueCleaner( null, $batch );

			// Clean actions for as long as possible.
			while ( $unlimited || $batches_completed < $batches ) {
				if ( $sleep && $batches_completed > 0 ) {
					sleep( $sleep );
				}

				$deleted = count( $cleaner->clean_actions( $status, $lifespan, null, 'CLI' ) );
				if ( $deleted <= 0 ) {
					break;
				}
				$actions_deleted += $deleted;
				$batches_completed++;
				$this->print_success( $deleted );
			}
		} catch ( Exception $e ) {
			$this->print_error( $e );
		}

		$this->print_total_batches( $batches_completed );
		if ( $batches_completed > 1 ) {
			$this->print_success( $actions_deleted );
		}
	}

	/**
	 * Print WP CLI message about how many batches of actions were processed.
	 *
	 * @param int $batches_processed Number of batches processed.
	 */
	protected function print_total_batches( int $batches_processed ) {
		WP_CLI::log(
			sprintf(
				/* translators: %d refers to the total number of batches processed */
				_n( '%d batch processed.', '%d batches processed.', $batches_processed, 'action-scheduler' ),
				$batches_processed
			)
		);
	}

	/**
	 * Convert an exception into a WP CLI error.
	 *
	 * @param Exception $e The error object.
	 */
	protected function print_error( Exception $e ) {
		WP_CLI::error(
			sprintf(
				/* translators: %s refers to the exception error message */
				__( 'There was an error deleting an action: %s', 'action-scheduler' ),
				$e->getMessage()
			)
		);
	}

	/**
	 * Print a success message with the number of completed actions.
	 *
	 * @param int $actions_deleted Number of deleted actions.
	 */
	protected function print_success( int $actions_deleted ) {
		WP_CLI::success(
			sprintf(
				/* translators: %d refers to the total number of actions deleted */
				_n( '%d action deleted.', '%d actions deleted.', $actions_deleted, 'action-scheduler' ),
				$actions_deleted
			)
		);
	}
}
PK     ˆŠU]‡,µÏ¸  ¸  H  vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.phpnu „[µü¤        <?php


namespace Action_Scheduler\WP_CLI;

use Action_Scheduler\Migration\Config;
use Action_Scheduler\Migration\Runner;
use Action_Scheduler\Migration\Scheduler;
use Action_Scheduler\Migration\Controller;
use WP_CLI;
use WP_CLI_Command;

/**
 * Class Migration_Command
 *
 * @package Action_Scheduler\WP_CLI
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class Migration_Command extends WP_CLI_Command {

	/**
	 * Number of actions migrated.
	 *
	 * @var int
	 */
	private $total_processed = 0;

	/**
	 * Register the command with WP-CLI
	 */
	public function register() {
		if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) {
			return;
		}

		WP_CLI::add_command(
			'action-scheduler migrate',
			array( $this, 'migrate' ),
			array(
				'shortdesc' => 'Migrates actions to the DB tables store',
				'synopsis'  => array(
					array(
						'type'        => 'assoc',
						'name'        => 'batch-size',
						'optional'    => true,
						'default'     => 100,
						'description' => 'The number of actions to process in each batch',
					),
					array(
						'type'        => 'assoc',
						'name'        => 'free-memory-on',
						'optional'    => true,
						'default'     => 50,
						'description' => 'The number of actions to process between freeing memory. 0 disables freeing memory',
					),
					array(
						'type'        => 'assoc',
						'name'        => 'pause',
						'optional'    => true,
						'default'     => 0,
						'description' => 'The number of seconds to pause when freeing memory',
					),
					array(
						'type'        => 'flag',
						'name'        => 'dry-run',
						'optional'    => true,
						'description' => 'Reports on the actions that would have been migrated, but does not change any data',
					),
				),
			)
		);
	}

	/**
	 * Process the data migration.
	 *
	 * @param array $positional_args Required for WP CLI. Not used in migration.
	 * @param array $assoc_args Optional arguments.
	 *
	 * @return void
	 */
	public function migrate( $positional_args, $assoc_args ) {
		$this->init_logging();

		$config = $this->get_migration_config( $assoc_args );
		$runner = new Runner( $config );
		$runner->init_destination();

		$batch_size = isset( $assoc_args['batch-size'] ) ? (int) $assoc_args['batch-size'] : 100;
		$free_on    = isset( $assoc_args['free-memory-on'] ) ? (int) $assoc_args['free-memory-on'] : 50;
		$sleep      = isset( $assoc_args['pause'] ) ? (int) $assoc_args['pause'] : 0;
		\ActionScheduler_DataController::set_free_ticks( $free_on );
		\ActionScheduler_DataController::set_sleep_time( $sleep );

		do {
			$actions_processed      = $runner->run( $batch_size );
			$this->total_processed += $actions_processed;
		} while ( $actions_processed > 0 );

		if ( ! $config->get_dry_run() ) {
			// let the scheduler know that there's nothing left to do.
			$scheduler = new Scheduler();
			$scheduler->mark_complete();
		}

		WP_CLI::success( sprintf( '%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed ) );
	}

	/**
	 * Build the config object used to create the Runner
	 *
	 * @param array $args Optional arguments.
	 *
	 * @return ActionScheduler\Migration\Config
	 */
	private function get_migration_config( $args ) {
		$args = wp_parse_args(
			$args,
			array(
				'dry-run' => false,
			)
		);

		$config = Controller::instance()->get_migration_config_object();
		$config->set_dry_run( ! empty( $args['dry-run'] ) );

		return $config;
	}

	/**
	 * Hook command line logging into migration actions.
	 */
	private function init_logging() {
		add_action(
			'action_scheduler/migrate_action_dry_run',
			function ( $action_id ) {
				WP_CLI::debug( sprintf( 'Dry-run: migrated action %d', $action_id ) );
			}
		);

		add_action(
			'action_scheduler/no_action_to_migrate',
			function ( $action_id ) {
				WP_CLI::debug( sprintf( 'No action found to migrate for ID %d', $action_id ) );
			}
		);

		add_action(
			'action_scheduler/migrate_action_failed',
			function ( $action_id ) {
				WP_CLI::warning( sprintf( 'Failed migrating action with ID %d', $action_id ) );
			}
		);

		add_action(
			'action_scheduler/migrate_action_incomplete',
			function ( $source_id, $destination_id ) {
				WP_CLI::warning( sprintf( 'Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id ) );
			},
			10,
			2
		);

		add_action(
			'action_scheduler/migrated_action',
			function ( $source_id, $destination_id ) {
				WP_CLI::debug( sprintf( 'Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id ) );
			},
			10,
			2
		);

		add_action(
			'action_scheduler/migration_batch_starting',
			function ( $batch ) {
				WP_CLI::debug( 'Beginning migration of batch: ' . print_r( $batch, true ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
			}
		);

		add_action(
			'action_scheduler/migration_batch_complete',
			function ( $batch ) {
				WP_CLI::log( sprintf( 'Completed migration of %d actions', count( $batch ) ) );
			}
		);
	}
}
PK     ˆŠU][Qj  j  L  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

use function \WP_CLI\Utils\get_flag_value;

/**
 * WP-CLI command: action-scheduler action create
 */
class Create_Command extends \ActionScheduler_WPCLI_Command {

	const ASYNC_OPTS = array( 'async', 0 );

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$hook           = $this->args[0];
		$schedule_start = $this->args[1];
		$callback_args  = get_flag_value( $this->assoc_args, 'args', array() );
		$group          = get_flag_value( $this->assoc_args, 'group', '' );
		$interval       = absint( get_flag_value( $this->assoc_args, 'interval', 0 ) );
		$cron           = get_flag_value( $this->assoc_args, 'cron', '' );
		$unique         = get_flag_value( $this->assoc_args, 'unique', false );
		$priority       = absint( get_flag_value( $this->assoc_args, 'priority', 10 ) );

		if ( ! empty( $callback_args ) ) {
			$callback_args = json_decode( $callback_args, true );
		}

		$function_args = array(
			'start'         => $schedule_start,
			'cron'          => $cron,
			'interval'      => $interval,
			'hook'          => $hook,
			'callback_args' => $callback_args,
			'group'         => $group,
			'unique'        => $unique,
			'priority'      => $priority,
		);

		try {
			// Generate schedule start if appropriate.
			if ( ! in_array( $schedule_start, static::ASYNC_OPTS, true ) ) {
				$schedule_start         = as_get_datetime_object( $schedule_start );
				$function_args['start'] = $schedule_start->format( 'U' );
			}
		} catch ( \Exception $e ) {
			\WP_CLI::error( $e->getMessage() );
		}

		// Default to creating single action.
		$action_type = 'single';
		$function    = 'as_schedule_single_action';

		if ( ! empty( $interval ) ) { // Creating recurring action.
			$action_type = 'recurring';
			$function    = 'as_schedule_recurring_action';

			$function_args = array_filter(
				$function_args,
				static function( $key ) {
					return in_array( $key, array( 'start', 'interval', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true );
				},
				ARRAY_FILTER_USE_KEY
			);
		} elseif ( ! empty( $cron ) ) { // Creating cron action.
			$action_type = 'cron';
			$function    = 'as_schedule_cron_action';

			$function_args = array_filter(
				$function_args,
				static function( $key ) {
					return in_array( $key, array( 'start', 'cron', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true );
				},
				ARRAY_FILTER_USE_KEY
			);
		} elseif ( in_array( $function_args['start'], static::ASYNC_OPTS, true ) ) { // Enqueue async action.
			$action_type = 'async';
			$function    = 'as_enqueue_async_action';

			$function_args = array_filter(
				$function_args,
				static function( $key ) {
					return in_array( $key, array( 'hook', 'callback_args', 'group', 'unique', 'priority' ), true );
				},
				ARRAY_FILTER_USE_KEY
			);
		} else { // Enqueue single action.
			$function_args = array_filter(
				$function_args,
				static function( $key ) {
					return in_array( $key, array( 'start', 'hook', 'callback_args', 'group', 'unique', 'priority' ), true );
				},
				ARRAY_FILTER_USE_KEY
			);
		}

		$function_args = array_values( $function_args );

		try {
			$action_id = call_user_func_array( $function, $function_args );
		} catch ( \Exception $e ) {
			$this->print_error( $e );
		}

		if ( 0 === $action_id ) {
			$e = new \Exception( __( 'Unable to create a scheduled action.', 'action-scheduler' ) );
			$this->print_error( $e );
		}

		$this->print_success( $action_id, $action_type );
	}

	/**
	 * Print a success message with the action ID.
	 *
	 * @param int    $action_id   Created action ID.
	 * @param string $action_type Type of action.
	 *
	 * @return void
	 */
	protected function print_success( $action_id, $action_type ) {
		\WP_CLI::success(
			sprintf(
				/* translators: %1$s: type of action, %2$d: ID of the created action */
				__( '%1$s action (%2$d) scheduled.', 'action-scheduler' ),
				ucfirst( $action_type ),
				$action_id
			)
		);
	}

	/**
	 * Convert an exception into a WP CLI error.
	 *
	 * @param \Exception $e The error object.
	 * @throws \WP_CLI\ExitException When an error occurs.
	 * @return void
	 */
	protected function print_error( \Exception $e ) {
		\WP_CLI::error(
			sprintf(
				/* translators: %s refers to the exception error message. */
				__( 'There was an error creating the scheduled action: %s', 'action-scheduler' ),
				$e->getMessage()
			)
		);
	}

}
PK     ‰ŠU]ýœWq  q  I  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

/**
 * WP-CLI command: action-scheduler action run
 */
class Run_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Array of action IDs to execute.
	 *
	 * @var int[]
	 */
	protected $action_ids = array();

	/**
	 * Number of executed, failed, ignored, invalid, and total actions.
	 *
	 * @var array<string, int>
	 */
	protected $action_counts = array(
		'executed' => 0,
		'failed'   => 0,
		'ignored'  => 0,
		'invalid'  => 0,
		'total'    => 0,
	);

	/**
	 * Construct.
	 *
	 * @param string[]              $args       Positional arguments.
	 * @param array<string, string> $assoc_args Keyed arguments.
	 */
	public function __construct( array $args, array $assoc_args ) {
		parent::__construct( $args, $assoc_args );

		$this->action_ids             = array_map( 'absint', $args );
		$this->action_counts['total'] = count( $this->action_ids );

		add_action( 'action_scheduler_execution_ignored', array( $this, 'on_action_ignored' ) );
		add_action( 'action_scheduler_after_execute', array( $this, 'on_action_executed' ) );
		add_action( 'action_scheduler_failed_execution', array( $this, 'on_action_failed' ), 10, 2 );
		add_action( 'action_scheduler_failed_validation', array( $this, 'on_action_invalid' ), 10, 2 );
	}

	/**
	 * Execute.
	 *
	 * @return void
	 */
	public function execute() {
		$runner = \ActionScheduler::runner();

		$progress_bar = \WP_CLI\Utils\make_progress_bar(
			sprintf(
				/* translators: %d: number of actions */
				_n( 'Executing %d action', 'Executing %d actions', $this->action_counts['total'], 'action-scheduler' ),
				number_format_i18n( $this->action_counts['total'] )
			),
			$this->action_counts['total']
		);

		foreach ( $this->action_ids as $action_id ) {
			$runner->process_action( $action_id, 'Action Scheduler CLI' );
			$progress_bar->tick();
		}

		$progress_bar->finish();

		foreach ( array(
			'ignored',
			'invalid',
			'failed',
		) as $type ) {
			$count = $this->action_counts[ $type ];

			if ( empty( $count ) ) {
				continue;
			}

			/*
			 * translators:
			 * %1$d: count of actions evaluated.
			 * %2$s: type of action evaluated.
			 */
			$format = _n( '%1$d action %2$s.', '%1$d actions %2$s.', $count, 'action-scheduler' );

			\WP_CLI::warning(
				sprintf(
					$format,
					number_format_i18n( $count ),
					$type
				)
			);
		}

		\WP_CLI::success(
			sprintf(
				/* translators: %d: number of executed actions */
				_n( 'Executed %d action.', 'Executed %d actions.', $this->action_counts['executed'], 'action-scheduler' ),
				number_format_i18n( $this->action_counts['executed'] )
			)
		);
	}

	/**
	 * Action: action_scheduler_execution_ignored
	 *
	 * @param int $action_id Action ID.
	 * @return void
	 */
	public function on_action_ignored( $action_id ) {
		if ( 'action_scheduler_execution_ignored' !== current_action() ) {
			return;
		}

		$action_id = absint( $action_id );

		if ( ! in_array( $action_id, $this->action_ids, true ) ) {
			return;
		}

		$this->action_counts['ignored']++;
		\WP_CLI::debug( sprintf( 'Action %d was ignored.', $action_id ) );
	}

	/**
	 * Action: action_scheduler_after_execute
	 *
	 * @param int $action_id Action ID.
	 * @return void
	 */
	public function on_action_executed( $action_id ) {
		if ( 'action_scheduler_after_execute' !== current_action() ) {
			return;
		}

		$action_id = absint( $action_id );

		if ( ! in_array( $action_id, $this->action_ids, true ) ) {
			return;
		}

		$this->action_counts['executed']++;
		\WP_CLI::debug( sprintf( 'Action %d was executed.', $action_id ) );
	}

	/**
	 * Action: action_scheduler_failed_execution
	 *
	 * @param int        $action_id Action ID.
	 * @param \Exception $e         Exception.
	 * @return void
	 */
	public function on_action_failed( $action_id, \Exception $e ) {
		if ( 'action_scheduler_failed_execution' !== current_action() ) {
			return;
		}

		$action_id = absint( $action_id );

		if ( ! in_array( $action_id, $this->action_ids, true ) ) {
			return;
		}

		$this->action_counts['failed']++;
		\WP_CLI::debug( sprintf( 'Action %d failed execution: %s', $action_id, $e->getMessage() ) );
	}

	/**
	 * Action: action_scheduler_failed_validation
	 *
	 * @param int        $action_id Action ID.
	 * @param \Exception $e         Exception.
	 * @return void
	 */
	public function on_action_invalid( $action_id, \Exception $e ) {
		if ( 'action_scheduler_failed_validation' !== current_action() ) {
			return;
		}

		$action_id = absint( $action_id );

		if ( ! in_array( $action_id, $this->action_ids, true ) ) {
			return;
		}

		$this->action_counts['invalid']++;
		\WP_CLI::debug( sprintf( 'Action %d failed validation: %s', $action_id, $e->getMessage() ) );
	}

}
PK     ‰ŠU]dø6\      I  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

/**
 * WP-CLI command: action-scheduler action get
 */
class Get_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$action_id = $this->args[0];
		$store     = \ActionScheduler::store();
		$logger    = \ActionScheduler::logger();
		$action    = $store->fetch_action( $action_id );

		if ( is_a( $action, ActionScheduler_NullAction::class ) ) {
			/* translators: %d is action ID. */
			\WP_CLI::error( sprintf( esc_html__( 'Unable to retrieve action %d.', 'action-scheduler' ), $action_id ) );
		}

		$only_logs   = ! empty( $this->assoc_args['field'] ) && 'log_entries' === $this->assoc_args['field'];
		$only_logs   = $only_logs || ( ! empty( $this->assoc_args['fields'] ) && 'log_entries' === $this->assoc_args['fields'] );
		$log_entries = array();

		foreach ( $logger->get_logs( $action_id ) as $log_entry ) {
			$log_entries[] = array(
				'date'    => $log_entry->get_date()->format( static::DATE_FORMAT ),
				'message' => $log_entry->get_message(),
			);
		}

		if ( $only_logs ) {
			$args = array(
				'format' => \WP_CLI\Utils\get_flag_value( $this->assoc_args, 'format', 'table' ),
			);

			$formatter = new \WP_CLI\Formatter( $args, array( 'date', 'message' ) );
			$formatter->display_items( $log_entries );

			return;
		}

		try {
			$status = $store->get_status( $action_id );
		} catch ( \Exception $e ) {
			\WP_CLI::error( $e->getMessage() );
		}

		$action_arr = array(
			'id'             => $this->args[0],
			'hook'           => $action->get_hook(),
			'status'         => $status,
			'args'           => $action->get_args(),
			'group'          => $action->get_group(),
			'recurring'      => $action->get_schedule()->is_recurring() ? 'yes' : 'no',
			'scheduled_date' => $this->get_schedule_display_string( $action->get_schedule() ),
			'log_entries'    => $log_entries,
		);

		$fields = array_keys( $action_arr );

		if ( ! empty( $this->assoc_args['fields'] ) ) {
			$fields = explode( ',', $this->assoc_args['fields'] );
		}

		$formatter = new \WP_CLI\Formatter( $this->assoc_args, $fields );
		$formatter->display_item( $action_arr );
	}

}
PK     ‰ŠU]‚þ[    L  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Cancel_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

use function \WP_CLI\Utils\get_flag_value;

/**
 * WP-CLI command: action-scheduler action cancel
 */
class Cancel_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$hook          = '';
		$group         = get_flag_value( $this->assoc_args, 'group', '' );
		$callback_args = get_flag_value( $this->assoc_args, 'args', null );
		$all           = get_flag_value( $this->assoc_args, 'all', false );

		if ( ! empty( $this->args[0] ) ) {
			$hook = $this->args[0];
		}

		if ( ! empty( $callback_args ) ) {
			$callback_args = json_decode( $callback_args, true );
		}

		if ( $all ) {
			$this->cancel_all( $hook, $callback_args, $group );
			return;
		}

		$this->cancel_single( $hook, $callback_args, $group );
	}

	/**
	 * Cancel single action.
	 *
	 * @param string $hook The hook that the job will trigger.
	 * @param array  $callback_args Args that would have been passed to the job.
	 * @param string $group The group the job is assigned to.
	 * @return void
	 */
	protected function cancel_single( $hook, $callback_args, $group ) {
		if ( empty( $hook ) ) {
			\WP_CLI::error( __( 'Please specify hook of action to cancel.', 'action-scheduler' ) );
		}

		try {
			$result = as_unschedule_action( $hook, $callback_args, $group );
		} catch ( \Exception $e ) {
			$this->print_error( $e, false );
		}

		if ( null === $result ) {
			$e = new \Exception( __( 'Unable to cancel scheduled action: check the logs.', 'action-scheduler' ) );
			$this->print_error( $e, false );
		}

		$this->print_success( false );
	}

	/**
	 * Cancel all actions.
	 *
	 * @param string $hook The hook that the job will trigger.
	 * @param array  $callback_args Args that would have been passed to the job.
	 * @param string $group The group the job is assigned to.
	 * @return void
	 */
	protected function cancel_all( $hook, $callback_args, $group ) {
		if ( empty( $hook ) && empty( $group ) ) {
			\WP_CLI::error( __( 'Please specify hook and/or group of actions to cancel.', 'action-scheduler' ) );
		}

		try {
			$result = as_unschedule_all_actions( $hook, $callback_args, $group );
		} catch ( \Exception $e ) {
			$this->print_error( $e, $multiple );
		}

		/**
		 * Because as_unschedule_all_actions() does not provide a result,
		 * neither confirm or deny actions cancelled.
		 */
		\WP_CLI::success( __( 'Request to cancel scheduled actions completed.', 'action-scheduler' ) );
	}

	/**
	 * Print a success message.
	 *
	 * @return void
	 */
	protected function print_success() {
		\WP_CLI::success( __( 'Scheduled action cancelled.', 'action-scheduler' ) );
	}

	/**
	 * Convert an exception into a WP CLI error.
	 *
	 * @param \Exception $e The error object.
	 * @param bool       $multiple Boolean if multiple actions.
	 * @throws \WP_CLI\ExitException When an error occurs.
	 * @return void
	 */
	protected function print_error( \Exception $e, $multiple ) {
		\WP_CLI::error(
			sprintf(
				/* translators: %1$s: singular or plural %2$s: refers to the exception error message. */
				__( 'There was an error cancelling the %1$s: %2$s', 'action-scheduler' ),
				$multiple ? __( 'scheduled actions', 'action-scheduler' ) : __( 'scheduled action', 'action-scheduler' ),
				$e->getMessage()
			)
		);
	}

}
PK     ‰ŠU]'O„[e
  e
  L  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

/**
 * WP-CLI command: action-scheduler action delete
 */
class Delete_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Array of action IDs to delete.
	 *
	 * @var int[]
	 */
	protected $action_ids = array();

	/**
	 * Number of deleted, failed, and total actions deleted.
	 *
	 * @var array<string, int>
	 */
	protected $action_counts = array(
		'deleted' => 0,
		'failed'  => 0,
		'total'   => 0,
	);

	/**
	 * Construct.
	 *
	 * @param string[]              $args       Positional arguments.
	 * @param array<string, string> $assoc_args Keyed arguments.
	 */
	public function __construct( array $args, array $assoc_args ) {
		parent::__construct( $args, $assoc_args );

		$this->action_ids             = array_map( 'absint', $args );
		$this->action_counts['total'] = count( $this->action_ids );

		add_action( 'action_scheduler_deleted_action', array( $this, 'on_action_deleted' ) );
	}

	/**
	 * Execute.
	 *
	 * @return void
	 */
	public function execute() {
		$store = \ActionScheduler::store();

		$progress_bar = \WP_CLI\Utils\make_progress_bar(
			sprintf(
				/* translators: %d: number of actions to be deleted */
				_n( 'Deleting %d action', 'Deleting %d actions', $this->action_counts['total'], 'action-scheduler' ),
				number_format_i18n( $this->action_counts['total'] )
			),
			$this->action_counts['total']
		);

		foreach ( $this->action_ids as $action_id ) {
			try {
				$store->delete_action( $action_id );
			} catch ( \Exception $e ) {
				$this->action_counts['failed']++;
				\WP_CLI::warning( $e->getMessage() );
			}

			$progress_bar->tick();
		}

		$progress_bar->finish();

		/* translators: %1$d: number of actions deleted */
		$format = _n( 'Deleted %1$d action', 'Deleted %1$d actions', $this->action_counts['deleted'], 'action-scheduler' ) . ', ';
		/* translators: %2$d: number of actions deletions failed */
		$format .= _n( '%2$d failure.', '%2$d failures.', $this->action_counts['failed'], 'action-scheduler' );

		\WP_CLI::success(
			sprintf(
				$format,
				number_format_i18n( $this->action_counts['deleted'] ),
				number_format_i18n( $this->action_counts['failed'] )
			)
		);
	}

	/**
	 * Action: action_scheduler_deleted_action
	 *
	 * @param int $action_id Action ID.
	 * @return void
	 */
	public function on_action_deleted( $action_id ) {
		if ( 'action_scheduler_deleted_action' !== current_action() ) {
			return;
		}

		$action_id = absint( $action_id );

		if ( ! in_array( $action_id, $this->action_ids, true ) ) {
			return;
		}

		$this->action_counts['deleted']++;
		\WP_CLI::debug( sprintf( 'Action %d was deleted.', $action_id ) );
	}

}
PK     ‰ŠU]¦=Î C  C  J  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaping output is not necessary in WP CLI.

use function \WP_CLI\Utils\get_flag_value;

/**
 * WP-CLI command: action-scheduler action next
 */
class Next_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$hook          = $this->args[0];
		$group         = get_flag_value( $this->assoc_args, 'group', '' );
		$callback_args = get_flag_value( $this->assoc_args, 'args', null );
		$raw           = (bool) get_flag_value( $this->assoc_args, 'raw', false );

		if ( ! empty( $callback_args ) ) {
			$callback_args = json_decode( $callback_args, true );
		}

		if ( $raw ) {
			\WP_CLI::line( as_next_scheduled_action( $hook, $callback_args, $group ) );
			return;
		}

		$params = array(
			'hook'    => $hook,
			'orderby' => 'date',
			'order'   => 'ASC',
			'group'   => $group,
		);

		if ( is_array( $callback_args ) ) {
			$params['args'] = $callback_args;
		}

		$params['status'] = \ActionScheduler_Store::STATUS_RUNNING;
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		\WP_CLI::debug( 'ActionScheduler()::store()->query_action( ' . var_export( $params, true ) . ' )' );

		$store     = \ActionScheduler::store();
		$action_id = $store->query_action( $params );

		if ( $action_id ) {
			echo $action_id;
			return;
		}

		$params['status'] = \ActionScheduler_Store::STATUS_PENDING;
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		\WP_CLI::debug( 'ActionScheduler()::store()->query_action( ' . var_export( $params, true ) . ' )' );

		$action_id = $store->query_action( $params );

		if ( $action_id ) {
			echo $action_id;
			return;
		}

		\WP_CLI::warning( 'No matching next action.' );
	}

}
PK     ‰ŠU]N¬ª7  7  J  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaping output is not necessary in WP CLI.

/**
 * WP-CLI command: action-scheduler action list
 */
class List_Command extends \ActionScheduler_WPCLI_Command {

	const PARAMETERS = array(
		'hook',
		'args',
		'date',
		'date_compare',
		'modified',
		'modified_compare',
		'group',
		'status',
		'claimed',
		'per_page',
		'offset',
		'orderby',
		'order',
	);

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$store  = \ActionScheduler::store();
		$logger = \ActionScheduler::logger();

		$fields = array(
			'id',
			'hook',
			'status',
			'group',
			'recurring',
			'scheduled_date',
		);

		$this->process_csv_arguments_to_arrays();

		if ( ! empty( $this->assoc_args['fields'] ) ) {
			$fields = $this->assoc_args['fields'];
		}

		$formatter  = new \WP_CLI\Formatter( $this->assoc_args, $fields );
		$query_args = $this->assoc_args;

		/**
		 * The `claimed` parameter expects a boolean or integer:
		 * check for string 'false', and set explicitly to `false` boolean.
		 */
		if ( array_key_exists( 'claimed', $query_args ) && 'false' === strtolower( $query_args['claimed'] ) ) {
			$query_args['claimed'] = false;
		}

		$return_format = 'OBJECT';

		if ( in_array( $formatter->format, array( 'ids', 'count' ), true ) ) {
			$return_format = '\'ids\'';
		}

		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_var_export
		$params = var_export( $query_args, true );

		if ( empty( $query_args ) ) {
			$params = 'array()';
		}

		\WP_CLI::debug(
			sprintf(
				'as_get_scheduled_actions( %s, %s )',
				$params,
				$return_format
			)
		);

		if ( ! empty( $query_args['args'] ) ) {
			$query_args['args'] = json_decode( $query_args['args'], true );
		}

		switch ( $formatter->format ) {

			case 'ids':
				$actions = as_get_scheduled_actions( $query_args, 'ids' );
				echo implode( ' ', $actions );
				break;

			case 'count':
				$actions = as_get_scheduled_actions( $query_args, 'ids' );
				$formatter->display_items( $actions );
				break;

			default:
				$actions = as_get_scheduled_actions( $query_args, OBJECT );

				$actions_arr = array();

				foreach ( $actions as $action_id => $action ) {
					$action_arr = array(
						'id'             => $action_id,
						'hook'           => $action->get_hook(),
						'status'         => $store->get_status( $action_id ),
						'args'           => $action->get_args(),
						'group'          => $action->get_group(),
						'recurring'      => $action->get_schedule()->is_recurring() ? 'yes' : 'no',
						'scheduled_date' => $this->get_schedule_display_string( $action->get_schedule() ),
						'log_entries'    => array(),
					);

					foreach ( $logger->get_logs( $action_id ) as $log_entry ) {
						$action_arr['log_entries'][] = array(
							'date'    => $log_entry->get_date()->format( static::DATE_FORMAT ),
							'message' => $log_entry->get_message(),
						);
					}

					$actions_arr[] = $action_arr;
				}

				$formatter->display_items( $actions_arr );
				break;

		}
	}

}
PK     ‰ŠU]æÂ’yß  ß  N  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI\Action;

use function \WP_CLI\Utils\get_flag_value;

/**
 * WP-CLI command: action-scheduler action generate
 */
class Generate_Command extends \ActionScheduler_WPCLI_Command {

	/**
	 * Execute command.
	 *
	 * @return void
	 */
	public function execute() {
		$hook           = $this->args[0];
		$schedule_start = $this->args[1];
		$callback_args  = get_flag_value( $this->assoc_args, 'args', array() );
		$group          = get_flag_value( $this->assoc_args, 'group', '' );
		$interval       = (int) get_flag_value( $this->assoc_args, 'interval', 0 ); // avoid absint() to support negative intervals
		$count          = absint( get_flag_value( $this->assoc_args, 'count', 1 ) );

		if ( ! empty( $callback_args ) ) {
			$callback_args = json_decode( $callback_args, true );
		}

		$schedule_start = as_get_datetime_object( $schedule_start );

		$function_args = array(
			'start'         => absint( $schedule_start->format( 'U' ) ),
			'interval'      => $interval,
			'count'         => $count,
			'hook'          => $hook,
			'callback_args' => $callback_args,
			'group'         => $group,
		);

		$function_args = array_values( $function_args );

		try {
			$actions_added = $this->generate( ...$function_args );
		} catch ( \Exception $e ) {
			$this->print_error( $e );
		}

		$num_actions_added = count( (array) $actions_added );

		$this->print_success( $num_actions_added, 'single' );
	}

	/**
	 * Schedule multiple single actions.
	 *
	 * @param int    $schedule_start Starting timestamp of first action.
	 * @param int    $interval How long to wait between runs.
	 * @param int    $count Limit number of actions to schedule.
	 * @param string $hook The hook to trigger.
	 * @param array  $args Arguments to pass when the hook triggers.
	 * @param string $group The group to assign this job to.
	 * @return int[] IDs of actions added.
	 */
	protected function generate( $schedule_start, $interval, $count, $hook, array $args = array(), $group = '' ) {
		$actions_added = array();

		$progress_bar = \WP_CLI\Utils\make_progress_bar(
			sprintf(
				/* translators: %d is number of actions to create */
				_n( 'Creating %d action', 'Creating %d actions', $count, 'action-scheduler' ),
				number_format_i18n( $count )
			),
			$count
		);

		for ( $i = 0; $i < $count; $i++ ) {
			$actions_added[] = as_schedule_single_action( $schedule_start + ( $i * $interval ), $hook, $args, $group );
			$progress_bar->tick();
		}

		$progress_bar->finish();

		return $actions_added;
	}

	/**
	 * Print a success message with the action ID.
	 *
	 * @param int    $actions_added Number of actions generated.
	 * @param string $action_type   Type of actions scheduled.
	 * @return void
	 */
	protected function print_success( $actions_added, $action_type ) {
		\WP_CLI::success(
			sprintf(
				/* translators: %1$d refers to the total number of tasks added, %2$s is the action type */
				_n( '%1$d %2$s action scheduled.', '%1$d %2$s actions scheduled.', $actions_added, 'action-scheduler' ),
				number_format_i18n( $actions_added ),
				$action_type
			)
		);
	}

	/**
	 * Convert an exception into a WP CLI error.
	 *
	 * @param \Exception $e The error object.
	 * @throws \WP_CLI\ExitException When an error occurs.
	 * @return void
	 */
	protected function print_error( \Exception $e ) {
		\WP_CLI::error(
			sprintf(
				/* translators: %s refers to the exception error message. */
				__( 'There was an error creating the scheduled action: %s', 'action-scheduler' ),
				$e->getMessage()
			)
		);
	}

}
PK     ‰ŠU]·8¥€Î
  Î
  B  vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI;

/**
 * WP_CLI progress bar for Action Scheduler.
 */

/**
 * Class ProgressBar
 *
 * @package Action_Scheduler\WP_CLI
 *
 * @since 3.0.0
 *
 * @codeCoverageIgnore
 */
class ProgressBar {

	/**
	 * Current number of ticks.
	 *
	 * @var integer
	 */
	protected $total_ticks;

	/**
	 * Total number of ticks.
	 *
	 * @var integer
	 */
	protected $count;

	/**
	 * Progress bar update interval.
	 *
	 * @var integer
	 */
	protected $interval;

	/**
	 * Progress bar message.
	 *
	 * @var string
	 */
	protected $message;

	/**
	 * Instance.
	 *
	 * @var \cli\progress\Bar
	 */
	protected $progress_bar;

	/**
	 * ProgressBar constructor.
	 *
	 * @param string  $message    Text to display before the progress bar.
	 * @param integer $count      Total number of ticks to be performed.
	 * @param integer $interval   Optional. The interval in milliseconds between updates. Default 100.
	 *
	 * @throws \Exception When this is not run within WP CLI.
	 */
	public function __construct( $message, $count, $interval = 100 ) {
		if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) ) {
			/* translators: %s php class name */
			throw new \Exception( sprintf( __( 'The %s class can only be run within WP CLI.', 'action-scheduler' ), __CLASS__ ) );
		}

		$this->total_ticks = 0;
		$this->message     = $message;
		$this->count       = $count;
		$this->interval    = $interval;
	}

	/**
	 * Increment the progress bar ticks.
	 */
	public function tick() {
		if ( null === $this->progress_bar ) {
			$this->setup_progress_bar();
		}

		$this->progress_bar->tick();
		$this->total_ticks++;

		do_action( 'action_scheduler/progress_tick', $this->total_ticks ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
	}

	/**
	 * Get the progress bar tick count.
	 *
	 * @return int
	 */
	public function current() {
		return $this->progress_bar ? $this->progress_bar->current() : 0;
	}

	/**
	 * Finish the current progress bar.
	 */
	public function finish() {
		if ( null !== $this->progress_bar ) {
			$this->progress_bar->finish();
		}

		$this->progress_bar = null;
	}

	/**
	 * Set the message used when creating the progress bar.
	 *
	 * @param string $message The message to be used when the next progress bar is created.
	 */
	public function set_message( $message ) {
		$this->message = $message;
	}

	/**
	 * Set the count for a new progress bar.
	 *
	 * @param integer $count The total number of ticks expected to complete.
	 */
	public function set_count( $count ) {
		$this->count = $count;
		$this->finish();
	}

	/**
	 * Set up the progress bar.
	 */
	protected function setup_progress_bar() {
		$this->progress_bar = \WP_CLI\Utils\make_progress_bar(
			$this->message,
			$this->count,
			$this->interval
		);
	}
}
PK     ‰ŠU]Lø Ù  Ù  X  vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.phpnu „[µü¤        <?php

use Action_Scheduler\WP_CLI\ProgressBar;

/**
 * WP CLI Queue runner.
 *
 * This class can only be called from within a WP CLI instance.
 */
class ActionScheduler_WPCLI_QueueRunner extends ActionScheduler_Abstract_QueueRunner {

	/**
	 * Claimed actions.
	 *
	 * @var array
	 */
	protected $actions;

	/**
	 * ActionScheduler_ActionClaim instance.
	 *
	 * @var ActionScheduler_ActionClaim
	 */
	protected $claim;

	/**
	 * Progress bar instance.
	 *
	 * @var \cli\progress\Bar
	 */
	protected $progress_bar;

	/**
	 * ActionScheduler_WPCLI_QueueRunner constructor.
	 *
	 * @param ActionScheduler_Store|null             $store Store object.
	 * @param ActionScheduler_FatalErrorMonitor|null $monitor Monitor object.
	 * @param ActionScheduler_QueueCleaner|null      $cleaner Cleaner object.
	 *
	 * @throws Exception When this is not run within WP CLI.
	 */
	public function __construct( ?ActionScheduler_Store $store = null, ?ActionScheduler_FatalErrorMonitor $monitor = null, ?ActionScheduler_QueueCleaner $cleaner = null ) {
		if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) ) {
			/* translators: %s php class name */
			throw new Exception( sprintf( __( 'The %s class can only be run within WP CLI.', 'action-scheduler' ), __CLASS__ ) );
		}

		parent::__construct( $store, $monitor, $cleaner );
	}

	/**
	 * Set up the Queue before processing.
	 *
	 * @param int    $batch_size The batch size to process.
	 * @param array  $hooks      The hooks being used to filter the actions claimed in this batch.
	 * @param string $group      The group of actions to claim with this batch.
	 * @param bool   $force      Whether to force running even with too many concurrent processes.
	 *
	 * @return int The number of actions that will be run.
	 * @throws \WP_CLI\ExitException When there are too many concurrent batches.
	 */
	public function setup( $batch_size, $hooks = array(), $group = '', $force = false ) {
		$this->run_cleanup();
		$this->add_hooks();

		// Check to make sure there aren't too many concurrent processes running.
		if ( $this->has_maximum_concurrent_batches() ) {
			if ( $force ) {
				WP_CLI::warning( __( 'There are too many concurrent batches, but the run is forced to continue.', 'action-scheduler' ) );
			} else {
				WP_CLI::error( __( 'There are too many concurrent batches.', 'action-scheduler' ) );
			}
		}

		// Stake a claim and store it.
		$this->claim = $this->store->stake_claim( $batch_size, null, $hooks, $group );
		$this->monitor->attach( $this->claim );
		$this->actions = $this->claim->get_actions();

		return count( $this->actions );
	}

	/**
	 * Add our hooks to the appropriate actions.
	 */
	protected function add_hooks() {
		add_action( 'action_scheduler_before_execute', array( $this, 'before_execute' ) );
		add_action( 'action_scheduler_after_execute', array( $this, 'after_execute' ), 10, 2 );
		add_action( 'action_scheduler_failed_execution', array( $this, 'action_failed' ), 10, 2 );
	}

	/**
	 * Set up the WP CLI progress bar.
	 */
	protected function setup_progress_bar() {
		$count              = count( $this->actions );
		$this->progress_bar = new ProgressBar(
			/* translators: %d: amount of actions */
			sprintf( _n( 'Running %d action', 'Running %d actions', $count, 'action-scheduler' ), $count ),
			$count
		);
	}

	/**
	 * Process actions in the queue.
	 *
	 * @param string $context Optional runner context. Default 'WP CLI'.
	 *
	 * @return int The number of actions processed.
	 */
	public function run( $context = 'WP CLI' ) {
		do_action( 'action_scheduler_before_process_queue' );
		$this->setup_progress_bar();
		foreach ( $this->actions as $action_id ) {
			// Error if we lost the claim.
			if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $this->claim->get_id() ), true ) ) {
				WP_CLI::warning( __( 'The claim has been lost. Aborting current batch.', 'action-scheduler' ) );
				break;
			}

			$this->process_action( $action_id, $context );
			$this->progress_bar->tick();
		}

		$completed = $this->progress_bar->current();
		$this->progress_bar->finish();
		$this->store->release_claim( $this->claim );
		do_action( 'action_scheduler_after_process_queue' );

		return $completed;
	}

	/**
	 * Handle WP CLI message when the action is starting.
	 *
	 * @param int $action_id Action ID.
	 */
	public function before_execute( $action_id ) {
		/* translators: %s refers to the action ID */
		WP_CLI::log( sprintf( __( 'Started processing action %s', 'action-scheduler' ), $action_id ) );
	}

	/**
	 * Handle WP CLI message when the action has completed.
	 *
	 * @param int                         $action_id ActionID.
	 * @param null|ActionScheduler_Action $action The instance of the action. Default to null for backward compatibility.
	 */
	public function after_execute( $action_id, $action = null ) {
		// backward compatibility.
		if ( null === $action ) {
			$action = $this->store->fetch_action( $action_id );
		}
		/* translators: 1: action ID 2: hook name */
		WP_CLI::log( sprintf( __( 'Completed processing action %1$s with hook: %2$s', 'action-scheduler' ), $action_id, $action->get_hook() ) );
	}

	/**
	 * Handle WP CLI message when the action has failed.
	 *
	 * @param int       $action_id Action ID.
	 * @param Exception $exception Exception.
	 * @throws \WP_CLI\ExitException With failure message.
	 */
	public function action_failed( $action_id, $exception ) {
		WP_CLI::error(
			/* translators: 1: action ID 2: exception message */
			sprintf( __( 'Error processing action %1$s: %2$s', 'action-scheduler' ), $action_id, $exception->getMessage() ),
			false
		);
	}

	/**
	 * Sleep and help avoid hitting memory limit
	 *
	 * @param int $sleep_time Amount of seconds to sleep.
	 * @deprecated 3.0.0
	 */
	protected function stop_the_insanity( $sleep_time = 0 ) {
		_deprecated_function( 'ActionScheduler_WPCLI_QueueRunner::stop_the_insanity', '3.0.0', 'ActionScheduler_DataController::free_memory' );

		ActionScheduler_DataController::free_memory();
	}

	/**
	 * Maybe trigger the stop_the_insanity() method to free up memory.
	 */
	protected function maybe_stop_the_insanity() {
		// The value returned by progress_bar->current() might be padded. Remove padding, and convert to int.
		$current_iteration = intval( trim( $this->progress_bar->current() ) );
		if ( 0 === $current_iteration % 50 ) {
			$this->stop_the_insanity();
		}
	}
}
PK     ‰ŠU]=�3”   ”   E  vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI;

/**
 * Action command for Action Scheduler.
 */
class Action_Command extends \WP_CLI_Command {

	/**
	 * Cancel the next occurrence or all occurrences of a scheduled action.
	 *
	 * ## OPTIONS
	 *
	 * [<hook>]
	 * : Name of the action hook.
	 *
	 * [--group=<group>]
	 * : The group the job is assigned to.
	 *
	 * [--args=<args>]
	 * : JSON object of arguments assigned to the job.
	 * ---
	 * default: []
	 * ---
	 *
	 * [--all]
	 * : Cancel all occurrences of a scheduled action.
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function cancel( array $args, array $assoc_args ) {
		require_once 'Action/Cancel_Command.php';
		$command = new Action\Cancel_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Creates a new scheduled action.
	 *
	 * ## OPTIONS
	 *
	 * <hook>
	 * : Name of the action hook.
	 *
	 * <start>
	 * : A unix timestamp representing the date you want the action to start. Also 'async' or 'now' to enqueue an async action.
	 *
	 * [--args=<args>]
	 * : JSON object of arguments to pass to callbacks when the hook triggers.
	 * ---
	 * default: []
	 * ---
	 *
	 * [--cron=<cron>]
	 * : A cron-like schedule string (https://crontab.guru/).
	 * ---
	 * default: ''
	 * ---
	 *
	 * [--group=<group>]
	 * : The group to assign this job to.
	 * ---
	 * default: ''
	 * ---
	 *
	 * [--interval=<interval>]
	 * : Number of seconds to wait between runs.
	 * ---
	 * default: 0
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     wp action-scheduler action create hook_async async
	 *     wp action-scheduler action create hook_single 1627147598
	 *     wp action-scheduler action create hook_recurring 1627148188 --interval=5
	 *     wp action-scheduler action create hook_cron 1627147655 --cron='5 4 * * *'
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function create( array $args, array $assoc_args ) {
		require_once 'Action/Create_Command.php';
		$command = new Action\Create_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Delete existing scheduled action(s).
	 *
	 * ## OPTIONS
	 *
	 * <id>...
	 * : One or more IDs of actions to delete.
	 * ---
	 * default: 0
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     # Delete the action with id 100
	 *     $ wp action-scheduler action delete 100
	 *
	 *     # Delete the actions with ids 100 and 200
	 *     $ wp action-scheduler action delete 100 200
	 *
	 *     # Delete the first five pending actions in 'action-scheduler' group
	 *     $ wp action-scheduler action delete $( wp action-scheduler action list --status=pending --group=action-scheduler --format=ids )
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function delete( array $args, array $assoc_args ) {
		require_once 'Action/Delete_Command.php';
		$command = new Action\Delete_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Generates some scheduled actions.
	 *
	 * ## OPTIONS
	 *
	 * <hook>
	 * : Name of the action hook.
	 *
	 * <start>
	 * : The Unix timestamp representing the date you want the action to start.
	 *
	 * [--count=<count>]
	 * : Number of actions to create.
	 * ---
	 * default: 1
	 * ---
	 *
	 * [--interval=<interval>]
	 * : Number of seconds to wait between runs.
	 * ---
	 * default: 0
	 * ---
	 *
	 * [--args=<args>]
	 * : JSON object of arguments to pass to callbacks when the hook triggers.
	 * ---
	 * default: []
	 * ---
	 *
	 * [--group=<group>]
	 * : The group to assign this job to.
	 * ---
	 * default: ''
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     wp action-scheduler action generate test_multiple 1627147598 --count=5 --interval=5
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function generate( array $args, array $assoc_args ) {
		require_once 'Action/Generate_Command.php';
		$command = new Action\Generate_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Get details about a scheduled action.
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The ID of the action to get.
	 * ---
	 * default: 0
	 * ---
	 *
	 * [--field=<field>]
	 * : Instead of returning the whole action, returns the value of a single field.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to specific fields (comma-separated). Defaults to all fields.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - csv
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function get( array $args, array $assoc_args ) {
		require_once 'Action/Get_Command.php';
		$command = new Action\Get_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Get a list of scheduled actions.
	 *
	 * Display actions based on all arguments supported by
	 * [as_get_scheduled_actions()](https://actionscheduler.org/api/#function-reference--as_get_scheduled_actions).
	 *
	 * ## OPTIONS
	 *
	 * [--<field>=<value>]
	 * : One or more arguments to pass to as_get_scheduled_actions().
	 *
	 * [--field=<field>]
	 * : Prints the value of a single property for each action.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to specific object properties.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - csv
	 *   - ids
	 *   - json
	 *   - count
	 *   - yaml
	 * ---
	 *
	 * ## AVAILABLE FIELDS
	 *
	 * These fields will be displayed by default for each action:
	 *
	 * * id
	 * * hook
	 * * status
	 * * group
	 * * recurring
	 * * scheduled_date
	 *
	 * These fields are optionally available:
	 *
	 * * args
	 * * log_entries
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 *
	 * @subcommand list
	 */
	public function subcommand_list( array $args, array $assoc_args ) {
		require_once 'Action/List_Command.php';
		$command = new Action\List_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Get logs for a scheduled action.
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The ID of the action to get.
	 * ---
	 * default: 0
	 * ---
	 *
	 * @param array $args Positional arguments.
	 * @return void
	 */
	public function logs( array $args ) {
		$command = sprintf( 'action-scheduler action get %d --field=log_entries', $args[0] );
		WP_CLI::runcommand( $command );
	}

	/**
	 * Get the ID or timestamp of the next scheduled action.
	 *
	 * ## OPTIONS
	 *
	 * <hook>
	 * : The hook of the next scheduled action.
	 *
	 * [--args=<args>]
	 * : JSON object of arguments to search for next scheduled action.
	 * ---
	 * default: []
	 * ---
	 *
	 * [--group=<group>]
	 * : The group to which the next scheduled action is assigned.
	 * ---
	 * default: ''
	 * ---
	 *
	 * [--raw]
	 * : Display the raw output of as_next_scheduled_action() (timestamp or boolean).
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function next( array $args, array $assoc_args ) {
		require_once 'Action/Next_Command.php';
		$command = new Action\Next_Command( $args, $assoc_args );
		$command->execute();
	}

	/**
	 * Run existing scheduled action(s).
	 *
	 * ## OPTIONS
	 *
	 * <id>...
	 * : One or more IDs of actions to run.
	 * ---
	 * default: 0
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     # Run the action with id 100
	 *     $ wp action-scheduler action run 100
	 *
	 *     # Run the actions with ids 100 and 200
	 *     $ wp action-scheduler action run 100 200
	 *
	 *     # Run the first five pending actions in 'action-scheduler' group
	 *     $ wp action-scheduler action run $( wp action-scheduler action list --status=pending --group=action-scheduler --format=ids )
	 *
	 * @param array $args       Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @return void
	 */
	public function run( array $args, array $assoc_args ) {
		require_once 'Action/Run_Command.php';
		$command = new Action\Run_Command( $args, $assoc_args );
		$command->execute();
	}

}
PK     ‰ŠU]@CQE  E  E  vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.phpnu „[µü¤        <?php

namespace Action_Scheduler\WP_CLI;

// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaping output is not necessary in WP CLI.

use ActionScheduler_SystemInformation;
use WP_CLI;
use function \WP_CLI\Utils\get_flag_value;

/**
 * System info WP-CLI commands for Action Scheduler.
 */
class System_Command {

	/**
	 * Data store for querying actions
	 *
	 * @var ActionScheduler_Store
	 */
	protected $store;

	/**
	 * Construct.
	 */
	public function __construct() {
		$this->store = \ActionScheduler::store();
	}

	/**
	 * Print in-use data store class.
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Keyed args.
	 * @return void
	 *
	 * @subcommand data-store
	 */
	public function datastore( array $args, array $assoc_args ) {
		echo $this->get_current_datastore();
	}

	/**
	 * Print in-use runner class.
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Keyed args.
	 * @return void
	 */
	public function runner( array $args, array $assoc_args ) {
		echo $this->get_current_runner();
	}

	/**
	 * Get system status.
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Keyed args.
	 * @return void
	 */
	public function status( array $args, array $assoc_args ) {
		/**
		 * Get runner status.
		 *
		 * @link https://github.com/woocommerce/action-scheduler-disable-default-runner
		 */
		$runner_enabled = has_action( 'action_scheduler_run_queue', array( \ActionScheduler::runner(), 'run' ) );

		\WP_CLI::line( sprintf( 'Data store: %s', $this->get_current_datastore() ) );
		\WP_CLI::line( sprintf( 'Runner: %s%s', $this->get_current_runner(), ( $runner_enabled ? '' : ' (disabled)' ) ) );
		\WP_CLI::line( sprintf( 'Version: %s', $this->get_latest_version() ) );

		$rows              = array();
		$action_counts     = $this->store->action_counts();
		$oldest_and_newest = $this->get_oldest_and_newest( array_keys( $action_counts ) );

		foreach ( $action_counts as $status => $count ) {
			$rows[] = array(
				'status' => $status,
				'count'  => $count,
				'oldest' => $oldest_and_newest[ $status ]['oldest'],
				'newest' => $oldest_and_newest[ $status ]['newest'],
			);
		}

		$formatter = new \WP_CLI\Formatter( $assoc_args, array( 'status', 'count', 'oldest', 'newest' ) );
		$formatter->display_items( $rows );
	}

	/**
	 * Display the active version, or all registered versions.
	 *
	 * ## OPTIONS
	 *
	 * [--all]
	 * : List all registered versions.
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Keyed args.
	 * @return void
	 */
	public function version( array $args, array $assoc_args ) {
		$all    = (bool) get_flag_value( $assoc_args, 'all' );
		$latest = $this->get_latest_version();

		if ( ! $all ) {
			echo $latest;
			\WP_CLI::halt( 0 );
		}

		$instance = \ActionScheduler_Versions::instance();
		$versions = $instance->get_versions();
		$rows     = array();

		foreach ( $versions as $version => $callback ) {
			$active = $version === $latest;

			$rows[ $version ] = array(
				'version'  => $version,
				'callback' => $callback,
				'active'   => $active ? 'yes' : 'no',
			);
		}

		uksort( $rows, 'version_compare' );

		$formatter = new \WP_CLI\Formatter( $assoc_args, array( 'version', 'callback', 'active' ) );
		$formatter->display_items( $rows );
	}

	/**
	 * Display the current source, or all registered sources.
	 *
	 * ## OPTIONS
	 *
	 * [--all]
	 * : List all registered sources.
	 *
	 * [--fullpath]
	 * : List full path of source(s).
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Keyed args.
	 * @uses ActionScheduler_SystemInformation::active_source_path()
	 * @uses \WP_CLI\Formatter::display_items()
	 * @uses $this->get_latest_version()
	 * @return void
	 */
	public function source( array $args, array $assoc_args ) {
		$all      = (bool) get_flag_value( $assoc_args, 'all' );
		$fullpath = (bool) get_flag_value( $assoc_args, 'fullpath' );
		$source   = ActionScheduler_SystemInformation::active_source_path();
		$path     = $source;

		if ( ! $fullpath ) {
			$path = str_replace( ABSPATH, '', $path );
		}

		if ( ! $all ) {
			echo $path;
			\WP_CLI::halt( 0 );
		}

		$sources = ActionScheduler_SystemInformation::get_sources();

		if ( empty( $sources ) ) {
			WP_CLI::log( __( 'Detailed information about registered sources is not currently available.', 'action-scheduler' ) );
			return;
		}

		$rows = array();

		foreach ( $sources as $check_source => $version ) {
			$active = dirname( $check_source ) === $source;
			$path   = $check_source;

			if ( ! $fullpath ) {
				$path = str_replace( ABSPATH, '', $path );
			}

			$rows[ $check_source ] = array(
				'source'  => $path,
				'version' => $version,
				'active'  => $active ? 'yes' : 'no',
			);
		}

		ksort( $rows );

		\WP_CLI::log( PHP_EOL . 'Please note there can only be one unique registered instance of Action Scheduler per ' . PHP_EOL . 'version number, so this list may not include all the currently present copies of ' . PHP_EOL . 'Action Scheduler.' . PHP_EOL );

		$formatter = new \WP_CLI\Formatter( $assoc_args, array( 'source', 'version', 'active' ) );
		$formatter->display_items( $rows );
	}

	/**
	 * Get current data store.
	 *
	 * @return string
	 */
	protected function get_current_datastore() {
		return get_class( $this->store );
	}

	/**
	 * Get latest version.
	 *
	 * @param null|\ActionScheduler_Versions $instance Versions.
	 * @return string
	 */
	protected function get_latest_version( $instance = null ) {
		if ( is_null( $instance ) ) {
			$instance = \ActionScheduler_Versions::instance();
		}

		return $instance->latest_version();
	}

	/**
	 * Get current runner.
	 *
	 * @return string
	 */
	protected function get_current_runner() {
		return get_class( \ActionScheduler::runner() );
	}

	/**
	 * Get oldest and newest scheduled dates for a given set of statuses.
	 *
	 * @param array $status_keys Set of statuses to find oldest & newest action for.
	 * @return array
	 */
	protected function get_oldest_and_newest( $status_keys ) {
		$oldest_and_newest = array();

		foreach ( $status_keys as $status ) {
			$oldest_and_newest[ $status ] = array(
				'oldest' => '&ndash;',
				'newest' => '&ndash;',
			);

			if ( 'in-progress' === $status ) {
				continue;
			}

			$oldest_and_newest[ $status ]['oldest'] = $this->get_action_status_date( $status, 'oldest' );
			$oldest_and_newest[ $status ]['newest'] = $this->get_action_status_date( $status, 'newest' );
		}

		return $oldest_and_newest;
	}

	/**
	 * Get oldest or newest scheduled date for a given status.
	 *
	 * @param string $status Action status label/name string.
	 * @param string $date_type Oldest or Newest.
	 * @return string
	 */
	protected function get_action_status_date( $status, $date_type = 'oldest' ) {
		$order = 'oldest' === $date_type ? 'ASC' : 'DESC';

		$args = array(
			'status'   => $status,
			'per_page' => 1,
			'order'    => $order,
		);

		$action = $this->store->query_actions( $args );

		if ( ! empty( $action ) ) {
			$date_object = $this->store->get_date( $action[0] );
			$action_date = $date_object->format( 'Y-m-d H:i:s O' );
		} else {
			$action_date = '&ndash;';
		}

		return $action_date;
	}

}
PK     ‰ŠU]ãã÷ÜÇ  Ç  ^  vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.phpnu „[µü¤        <?php

/**
 * Commands for Action Scheduler.
 */
class ActionScheduler_WPCLI_Scheduler_command extends WP_CLI_Command {

	/**
	 * Force tables schema creation for Action Scheduler
	 *
	 * ## OPTIONS
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 *
	 * @subcommand fix-schema
	 */
	public function fix_schema( $args, $assoc_args ) {
		$schema_classes = array( ActionScheduler_LoggerSchema::class, ActionScheduler_StoreSchema::class );

		foreach ( $schema_classes as $classname ) {
			if ( is_subclass_of( $classname, ActionScheduler_Abstract_Schema::class ) ) {
				$obj = new $classname();
				$obj->init();
				$obj->register_tables( true );

				WP_CLI::success(
					sprintf(
						/* translators: %s refers to the schema name*/
						__( 'Registered schema for %s', 'action-scheduler' ),
						$classname
					)
				);
			}
		}
	}

	/**
	 * Run the Action Scheduler
	 *
	 * ## OPTIONS
	 *
	 * [--batch-size=<size>]
	 * : The maximum number of actions to run. Defaults to 100.
	 *
	 * [--batches=<size>]
	 * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue being executed until all actions are complete.
	 *
	 * [--cleanup-batch-size=<size>]
	 * : The maximum number of actions to clean up. Defaults to the value of --batch-size.
	 *
	 * [--hooks=<hooks>]
	 * : Only run actions with the specified hook. Omitting this option runs actions with any hook. Define multiple hooks as a comma separated string (without spaces), e.g. `--hooks=hook_one,hook_two,hook_three`
	 *
	 * [--group=<group>]
	 * : Only run actions from the specified group. Omitting this option runs actions from all groups.
	 *
	 * [--exclude-groups=<groups>]
	 * : Run actions from all groups except the specified group(s). Define multiple groups as a comma separated string (without spaces), e.g. '--group_a,group_b'. This option is ignored when `--group` is used.
	 *
	 * [--free-memory-on=<count>]
	 * : The number of actions to process between freeing memory. 0 disables freeing memory. Default 50.
	 *
	 * [--pause=<seconds>]
	 * : The number of seconds to pause when freeing memory. Default no pause.
	 *
	 * [--force]
	 * : Whether to force execution despite the maximum number of concurrent processes being exceeded.
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Keyed arguments.
	 * @throws \WP_CLI\ExitException When an error occurs.
	 *
	 * @subcommand run
	 */
	public function run( $args, $assoc_args ) {
		// Handle passed arguments.
		$batch          = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 100 ) );
		$batches        = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) );
		$clean          = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'cleanup-batch-size', $batch ) );
		$hooks          = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
		$hooks          = array_filter( array_map( 'trim', $hooks ) );
		$group          = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
		$exclude_groups = \WP_CLI\Utils\get_flag_value( $assoc_args, 'exclude-groups', '' );
		$free_on        = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', 50 );
		$sleep          = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', 0 );
		$force          = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );

		ActionScheduler_DataController::set_free_ticks( $free_on );
		ActionScheduler_DataController::set_sleep_time( $sleep );

		$batches_completed = 0;
		$actions_completed = 0;
		$unlimited         = 0 === $batches;
		if ( is_callable( array( ActionScheduler::store(), 'set_claim_filter' ) ) ) {
			$exclude_groups = $this->parse_comma_separated_string( $exclude_groups );

			if ( ! empty( $exclude_groups ) ) {
				ActionScheduler::store()->set_claim_filter( 'exclude-groups', $exclude_groups );
			}
		}

		try {
			// Custom queue cleaner instance.
			$cleaner = new ActionScheduler_QueueCleaner( null, $clean );

			// Get the queue runner instance.
			$runner = new ActionScheduler_WPCLI_QueueRunner( null, null, $cleaner );

			// Determine how many tasks will be run in the first batch.
			$total = $runner->setup( $batch, $hooks, $group, $force );

			// Run actions for as long as possible.
			while ( $total > 0 ) {
				$this->print_total_actions( $total );
				$actions_completed += $runner->run();
				$batches_completed++;

				// Maybe set up tasks for the next batch.
				$total = ( $unlimited || $batches_completed < $batches ) ? $runner->setup( $batch, $hooks, $group, $force ) : 0;
			}
		} catch ( Exception $e ) {
			$this->print_error( $e );
		}

		$this->print_total_batches( $batches_completed );
		$this->print_success( $actions_completed );
	}

	/**
	 * Converts a string of comma-separated values into an array of those same values.
	 *
	 * @param string $string The string of one or more comma separated values.
	 *
	 * @return array
	 */
	private function parse_comma_separated_string( $string ): array {
		return array_filter( str_getcsv( $string ) );
	}

	/**
	 * Print WP CLI message about how many actions are about to be processed.
	 *
	 * @param int $total Number of actions found.
	 */
	protected function print_total_actions( $total ) {
		WP_CLI::log(
			sprintf(
				/* translators: %d refers to how many scheduled tasks were found to run */
				_n( 'Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler' ),
				$total
			)
		);
	}

	/**
	 * Print WP CLI message about how many batches of actions were processed.
	 *
	 * @param int $batches_completed Number of completed batches.
	 */
	protected function print_total_batches( $batches_completed ) {
		WP_CLI::log(
			sprintf(
				/* translators: %d refers to the total number of batches executed */
				_n( '%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler' ),
				$batches_completed
			)
		);
	}

	/**
	 * Convert an exception into a WP CLI error.
	 *
	 * @param Exception $e The error object.
	 *
	 * @throws \WP_CLI\ExitException Under some conditions WP CLI may throw an exception.
	 */
	protected function print_error( Exception $e ) {
		WP_CLI::error(
			sprintf(
				/* translators: %s refers to the exception error message */
				__( 'There was an error running the action scheduler: %s', 'action-scheduler' ),
				$e->getMessage()
			)
		);
	}

	/**
	 * Print a success message with the number of completed actions.
	 *
	 * @param int $actions_completed Number of completed actions.
	 */
	protected function print_success( $actions_completed ) {
		WP_CLI::success(
			sprintf(
				/* translators: %d refers to the total number of tasks completed */
				_n( '%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler' ),
				$actions_completed
			)
		);
	}
}
PK     ‰ŠU]q´âY  Y  R  vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_NullAction.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_NullAction
 */
class ActionScheduler_NullAction extends ActionScheduler_Action {

	/**
	 * Construct.
	 *
	 * @param string                        $hook Action hook.
	 * @param mixed[]                       $args Action arguments.
	 * @param null|ActionScheduler_Schedule $schedule Action schedule.
	 */
	public function __construct( $hook = '', array $args = array(), ?ActionScheduler_Schedule $schedule = null ) {
		$this->set_schedule( new ActionScheduler_NullSchedule() );
	}

	/**
	 * Execute action.
	 */
	public function execute() {
		// don't execute.
	}
}
PK     ‰ŠU]Ké¹Ü(  (  V  vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_FinishedAction
 */
class ActionScheduler_FinishedAction extends ActionScheduler_Action {

	/**
	 * Execute action.
	 */
	public function execute() {
		// don't execute.
	}

	/**
	 * Get finished state.
	 */
	public function is_finished() {
		return true;
	}
}
PK     ‰ŠU]^�3ks  s  V  vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_CanceledAction
 *
 * Stored action which was canceled and therefore acts like a finished action but should always return a null schedule,
 * regardless of schedule passed to its constructor.
 */
class ActionScheduler_CanceledAction extends ActionScheduler_FinishedAction {

	/**
	 * Construct.
	 *
	 * @param string                        $hook Action's hook.
	 * @param array                         $args Action's arguments.
	 * @param null|ActionScheduler_Schedule $schedule Action's schedule.
	 * @param string                        $group Action's group.
	 */
	public function __construct( $hook, array $args = array(), ?ActionScheduler_Schedule $schedule = null, $group = '' ) {
		parent::__construct( $hook, $args, $schedule, $group );
		if ( is_null( $schedule ) ) {
			$this->set_schedule( new ActionScheduler_NullSchedule() );
		}
	}
}
PK     ‰ŠU]Ž°UH  H  N  vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Action
 */
class ActionScheduler_Action {
	/**
	 * Action's hook.
	 *
	 * @var string
	 */
	protected $hook = '';

	/**
	 * Action's args.
	 *
	 * @var array<string, mixed>
	 */
	protected $args = array();

	/**
	 * Action's schedule.
	 *
	 * @var ActionScheduler_Schedule
	 */
	protected $schedule = null;

	/**
	 * Action's group.
	 *
	 * @var string
	 */
	protected $group = '';

	/**
	 * Priorities are conceptually similar to those used for regular WordPress actions.
	 * Like those, a lower priority takes precedence over a higher priority and the default
	 * is 10.
	 *
	 * Unlike regular WordPress actions, the priority of a scheduled action is strictly an
	 * integer and should be kept within the bounds 0-255 (anything outside the bounds will
	 * be brought back into the acceptable range).
	 *
	 * @var int
	 */
	protected $priority = 10;

	/**
	 * Construct.
	 *
	 * @param string                        $hook Action's hook.
	 * @param mixed[]                       $args Action's arguments.
	 * @param null|ActionScheduler_Schedule $schedule Action's schedule.
	 * @param string                        $group Action's group.
	 */
	public function __construct( $hook, array $args = array(), ?ActionScheduler_Schedule $schedule = null, $group = '' ) {
		$schedule = empty( $schedule ) ? new ActionScheduler_NullSchedule() : $schedule;
		$this->set_hook( $hook );
		$this->set_schedule( $schedule );
		$this->set_args( $args );
		$this->set_group( $group );
	}

	/**
	 * Executes the action.
	 *
	 * If no callbacks are registered, an exception will be thrown and the action will not be
	 * fired. This is useful to help detect cases where the code responsible for setting up
	 * a scheduled action no longer exists.
	 *
	 * @throws Exception If no callbacks are registered for this action.
	 */
	public function execute() {
		$hook = $this->get_hook();

		if ( ! has_action( $hook ) ) {
			throw new Exception(
				sprintf(
					/* translators: 1: action hook. */
					__( 'Scheduled action for %1$s will not be executed as no callbacks are registered.', 'action-scheduler' ),
					$hook
				)
			);
		}

		do_action_ref_array( $hook, array_values( $this->get_args() ) );
	}

	/**
	 * Set action's hook.
	 *
	 * @param string $hook Action's hook.
	 */
	protected function set_hook( $hook ) {
		$this->hook = $hook;
	}

	/**
	 * Get action's hook.
	 */
	public function get_hook() {
		return $this->hook;
	}

	/**
	 * Set action's schedule.
	 *
	 * @param ActionScheduler_Schedule $schedule Action's schedule.
	 */
	protected function set_schedule( ActionScheduler_Schedule $schedule ) {
		$this->schedule = $schedule;
	}

	/**
	 * Action's schedule.
	 *
	 * @return ActionScheduler_Schedule
	 */
	public function get_schedule() {
		return $this->schedule;
	}

	/**
	 * Set action's args.
	 *
	 * @param mixed[] $args Action's arguments.
	 */
	protected function set_args( array $args ) {
		$this->args = $args;
	}

	/**
	 * Get action's args.
	 */
	public function get_args() {
		return $this->args;
	}

	/**
	 * Section action's group.
	 *
	 * @param string $group Action's group.
	 */
	protected function set_group( $group ) {
		$this->group = $group;
	}

	/**
	 * Action's group.
	 *
	 * @return string
	 */
	public function get_group() {
		return $this->group;
	}

	/**
	 * Action has not finished.
	 *
	 * @return bool
	 */
	public function is_finished() {
		return false;
	}

	/**
	 * Sets the priority of the action.
	 *
	 * @param int $priority Priority level (lower is higher priority). Should be in the range 0-255.
	 *
	 * @return void
	 */
	public function set_priority( $priority ) {
		if ( $priority < 0 ) {
			$priority = 0;
		} elseif ( $priority > 255 ) {
			$priority = 255;
		}

		$this->priority = (int) $priority;
	}

	/**
	 * Gets the action priority.
	 *
	 * @return int
	 */
	public function get_priority() {
		return $this->priority;
	}
}
PK     ŠŠU]….>–  –  H  vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_LogEntry
 */
class ActionScheduler_LogEntry {

	/**
	 * Action's ID for log entry.
	 *
	 * @var int $action_id
	 */
	protected $action_id = '';

	/**
	 * Log entry's message.
	 *
	 * @var string $message
	 */
	protected $message = '';

	/**
	 * Log entry's date.
	 *
	 * @var Datetime $date
	 */
	protected $date;

	/**
	 * Constructor
	 *
	 * @param mixed    $action_id Action ID.
	 * @param string   $message   Message.
	 * @param Datetime $date      Datetime object with the time when this log entry was created. If this parameter is
	 *                            not provided a new Datetime object (with current time) will be created.
	 */
	public function __construct( $action_id, $message, $date = null ) {
		/*
		 * ActionScheduler_wpCommentLogger::get_entry() previously passed a 3rd param of $comment->comment_type
		 * to ActionScheduler_LogEntry::__construct(), goodness knows why, and the Follow-up Emails plugin
		 * hard-codes loading its own version of ActionScheduler_wpCommentLogger with that out-dated method,
		 * goodness knows why, so we need to guard against that here instead of using a DateTime type declaration
		 * for the constructor's 3rd param of $date and causing a fatal error with older versions of FUE.
		 */
		if ( null !== $date && ! is_a( $date, 'DateTime' ) ) {
			_doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' );
			$date = null;
		}

		$this->action_id = $action_id;
		$this->message   = $message;
		$this->date      = $date ? $date : new Datetime();
	}

	/**
	 * Returns the date when this log entry was created
	 *
	 * @return Datetime
	 */
	public function get_date() {
		return $this->date;
	}

	/**
	 * Get action ID of log entry.
	 */
	public function get_action_id() {
		return $this->action_id;
	}

	/**
	 * Get log entry message.
	 */
	public function get_message() {
		return $this->message;
	}
}

PK     ŠŠU]ùˆKU  U  P  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Logger
 *
 * @codeCoverageIgnore
 */
abstract class ActionScheduler_Logger {

	/**
	 * Instance.
	 *
	 * @var null|self
	 */
	private static $logger = null;

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_Logger
	 */
	public static function instance() {
		if ( empty( self::$logger ) ) {
			$class        = apply_filters( 'action_scheduler_logger_class', 'ActionScheduler_wpCommentLogger' );
			self::$logger = new $class();
		}
		return self::$logger;
	}

	/**
	 * Create log entry.
	 *
	 * @param string        $action_id Action ID.
	 * @param string        $message   Log message.
	 * @param DateTime|null $date      Log date.
	 *
	 * @return string The log entry ID
	 */
	abstract public function log( $action_id, $message, ?DateTime $date = null );

	/**
	 * Get action's log entry.
	 *
	 * @param string $entry_id Entry ID.
	 *
	 * @return ActionScheduler_LogEntry
	 */
	abstract public function get_entry( $entry_id );

	/**
	 * Get action's logs.
	 *
	 * @param string $action_id Action ID.
	 *
	 * @return ActionScheduler_LogEntry[]
	 */
	abstract public function get_logs( $action_id );


	/**
	 * Initialize.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		$this->hook_stored_action();
		add_action( 'action_scheduler_canceled_action', array( $this, 'log_canceled_action' ), 10, 1 );
		add_action( 'action_scheduler_begin_execute', array( $this, 'log_started_action' ), 10, 2 );
		add_action( 'action_scheduler_after_execute', array( $this, 'log_completed_action' ), 10, 3 );
		add_action( 'action_scheduler_failed_execution', array( $this, 'log_failed_action' ), 10, 3 );
		add_action( 'action_scheduler_failed_action', array( $this, 'log_timed_out_action' ), 10, 2 );
		add_action( 'action_scheduler_unexpected_shutdown', array( $this, 'log_unexpected_shutdown' ), 10, 2 );
		add_action( 'action_scheduler_reset_action', array( $this, 'log_reset_action' ), 10, 1 );
		add_action( 'action_scheduler_execution_ignored', array( $this, 'log_ignored_action' ), 10, 2 );
		add_action( 'action_scheduler_failed_fetch_action', array( $this, 'log_failed_fetch_action' ), 10, 2 );
		add_action( 'action_scheduler_failed_to_schedule_next_instance', array( $this, 'log_failed_schedule_next_instance' ), 10, 2 );
		add_action( 'action_scheduler_bulk_cancel_actions', array( $this, 'bulk_log_cancel_actions' ), 10, 1 );
	}

	/**
	 * Register callback for storing action.
	 */
	public function hook_stored_action() {
		add_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
	}

	/**
	 * Unhook callback for storing action.
	 */
	public function unhook_stored_action() {
		remove_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
	}

	/**
	 * Log action stored.
	 *
	 * @param int $action_id Action ID.
	 */
	public function log_stored_action( $action_id ) {
		$this->log( $action_id, __( 'action created', 'action-scheduler' ) );
	}

	/**
	 * Log action cancellation.
	 *
	 * @param int $action_id Action ID.
	 */
	public function log_canceled_action( $action_id ) {
		$this->log( $action_id, __( 'action canceled', 'action-scheduler' ) );
	}

	/**
	 * Log action start.
	 *
	 * @param int    $action_id Action ID.
	 * @param string $context Action execution context.
	 */
	public function log_started_action( $action_id, $context = '' ) {
		if ( ! empty( $context ) ) {
			/* translators: %s: context */
			$message = sprintf( __( 'action started via %s', 'action-scheduler' ), $context );
		} else {
			$message = __( 'action started', 'action-scheduler' );
		}
		$this->log( $action_id, $message );
	}

	/**
	 * Log action completion.
	 *
	 * @param int                         $action_id Action ID.
	 * @param null|ActionScheduler_Action $action Action.
	 * @param string                      $context Action execution context.
	 */
	public function log_completed_action( $action_id, $action = null, $context = '' ) {
		if ( ! empty( $context ) ) {
			/* translators: %s: context */
			$message = sprintf( __( 'action complete via %s', 'action-scheduler' ), $context );
		} else {
			$message = __( 'action complete', 'action-scheduler' );
		}
		$this->log( $action_id, $message );
	}

	/**
	 * Log action failure.
	 *
	 * @param int       $action_id Action ID.
	 * @param Exception $exception Exception.
	 * @param string    $context Action execution context.
	 */
	public function log_failed_action( $action_id, Exception $exception, $context = '' ) {
		if ( ! empty( $context ) ) {
			/* translators: 1: context 2: exception message */
			$message = sprintf( __( 'action failed via %1$s: %2$s', 'action-scheduler' ), $context, $exception->getMessage() );
		} else {
			/* translators: %s: exception message */
			$message = sprintf( __( 'action failed: %s', 'action-scheduler' ), $exception->getMessage() );
		}
		$this->log( $action_id, $message );
	}

	/**
	 * Log action timeout.
	 *
	 * @param int    $action_id  Action ID.
	 * @param string $timeout Timeout.
	 */
	public function log_timed_out_action( $action_id, $timeout ) {
		/* translators: %s: amount of time */
		$this->log( $action_id, sprintf( __( 'action marked as failed after %s seconds. Unknown error occurred. Check server, PHP and database error logs to diagnose cause.', 'action-scheduler' ), $timeout ) );
	}

	/**
	 * Log unexpected shutdown.
	 *
	 * @param int     $action_id Action ID.
	 * @param mixed[] $error     Error.
	 */
	public function log_unexpected_shutdown( $action_id, $error ) {
		if ( ! empty( $error ) ) {
			/* translators: 1: error message 2: filename 3: line */
			$this->log( $action_id, sprintf( __( 'unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler' ), $error['message'], $error['file'], $error['line'] ) );
		}
	}

	/**
	 * Log action reset.
	 *
	 * @param int $action_id Action ID.
	 */
	public function log_reset_action( $action_id ) {
		$this->log( $action_id, __( 'action reset', 'action-scheduler' ) );
	}

	/**
	 * Log ignored action.
	 *
	 * @param int    $action_id Action ID.
	 * @param string $context Action execution context.
	 */
	public function log_ignored_action( $action_id, $context = '' ) {
		if ( ! empty( $context ) ) {
			/* translators: %s: context */
			$message = sprintf( __( 'action ignored via %s', 'action-scheduler' ), $context );
		} else {
			$message = __( 'action ignored', 'action-scheduler' );
		}
		$this->log( $action_id, $message );
	}

	/**
	 * Log the failure of fetching the action.
	 *
	 * @param string         $action_id Action ID.
	 * @param null|Exception $exception The exception which occurred when fetching the action. NULL by default for backward compatibility.
	 */
	public function log_failed_fetch_action( $action_id, ?Exception $exception = null ) {

		if ( ! is_null( $exception ) ) {
			/* translators: %s: exception message */
			$log_message = sprintf( __( 'There was a failure fetching this action: %s', 'action-scheduler' ), $exception->getMessage() );
		} else {
			$log_message = __( 'There was a failure fetching this action', 'action-scheduler' );
		}

		$this->log( $action_id, $log_message );
	}

	/**
	 * Log the failure of scheduling the action's next instance.
	 *
	 * @param int       $action_id Action ID.
	 * @param Exception $exception Exception object.
	 */
	public function log_failed_schedule_next_instance( $action_id, Exception $exception ) {
		/* translators: %s: exception message */
		$this->log( $action_id, sprintf( __( 'There was a failure scheduling the next instance of this action: %s', 'action-scheduler' ), $exception->getMessage() ) );
	}

	/**
	 * Bulk add cancel action log entries.
	 *
	 * Implemented here for backward compatibility. Should be implemented in parent loggers
	 * for more performant bulk logging.
	 *
	 * @param array $action_ids List of action ID.
	 */
	public function bulk_log_cancel_actions( $action_ids ) {
		if ( empty( $action_ids ) ) {
			return;
		}

		foreach ( $action_ids as $action_id ) {
			$this->log_canceled_action( $action_id );
		}
	}
}
PK     ŠŠU]|„#g  g  [  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Abstract_Schedule
 */
abstract class ActionScheduler_Abstract_Schedule extends ActionScheduler_Schedule_Deprecated {

	/**
	 * The date & time the schedule is set to run.
	 *
	 * @var DateTime
	 */
	private $scheduled_date = null;

	/**
	 * Timestamp equivalent of @see $this->scheduled_date
	 *
	 * @var int
	 */
	protected $scheduled_timestamp = null;

	/**
	 * Construct.
	 *
	 * @param DateTime $date The date & time to run the action.
	 */
	public function __construct( DateTime $date ) {
		$this->scheduled_date = $date;
	}

	/**
	 * Check if a schedule should recur.
	 *
	 * @return bool
	 */
	abstract public function is_recurring();

	/**
	 * Calculate when the next instance of this schedule would run based on a given date & time.
	 *
	 * @param DateTime $after Start timestamp.
	 * @return DateTime
	 */
	abstract protected function calculate_next( DateTime $after );

	/**
	 * Get the next date & time when this schedule should run after a given date & time.
	 *
	 * @param DateTime $after Start timestamp.
	 * @return DateTime|null
	 */
	public function get_next( DateTime $after ) {
		$after = clone $after;
		if ( $after > $this->scheduled_date ) {
			$after = $this->calculate_next( $after );
			return $after;
		}
		return clone $this->scheduled_date;
	}

	/**
	 * Get the date & time the schedule is set to run.
	 *
	 * @return DateTime|null
	 */
	public function get_date() {
		return $this->scheduled_date;
	}

	/**
	 * For PHP 5.2 compat, because DateTime objects can't be serialized
	 *
	 * @return array
	 */
	public function __sleep() {
		$this->scheduled_timestamp = $this->scheduled_date->getTimestamp();
		return array(
			'scheduled_timestamp',
		);
	}

	/**
	 * Wakeup.
	 */
	public function __wakeup() {
		$this->scheduled_date = as_get_datetime_object( $this->scheduled_timestamp );
		unset( $this->scheduled_timestamp );
	}
}
PK     ŠŠU]0C›Ê5  Ê5  ^  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.phpnu „[µü¤        <?php

/**
 * Abstract class with common Queue Cleaner functionality.
 */
abstract class ActionScheduler_Abstract_QueueRunner extends ActionScheduler_Abstract_QueueRunner_Deprecated {

	/**
	 * ActionScheduler_QueueCleaner instance.
	 *
	 * @var ActionScheduler_QueueCleaner
	 */
	protected $cleaner;

	/**
	 * ActionScheduler_FatalErrorMonitor instance.
	 *
	 * @var ActionScheduler_FatalErrorMonitor
	 */
	protected $monitor;

	/**
	 * ActionScheduler_Store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	protected $store;

	/**
	 * The created time.
	 *
	 * Represents when the queue runner was constructed and used when calculating how long a PHP request has been running.
	 * For this reason it should be as close as possible to the PHP request start time.
	 *
	 * @var int
	 */
	private $created_time;

	/**
	 * ActionScheduler_Abstract_QueueRunner constructor.
	 *
	 * @param ActionScheduler_Store|null             $store Store object.
	 * @param ActionScheduler_FatalErrorMonitor|null $monitor Monitor object.
	 * @param ActionScheduler_QueueCleaner|null      $cleaner Cleaner object.
	 */
	public function __construct( ?ActionScheduler_Store $store = null, ?ActionScheduler_FatalErrorMonitor $monitor = null, ?ActionScheduler_QueueCleaner $cleaner = null ) {

		$this->created_time = microtime( true );

		$this->store   = $store ? $store : ActionScheduler_Store::instance();
		$this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor( $this->store );
		$this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner( $this->store );
	}

	/**
	 * Process an individual action.
	 *
	 * @param int    $action_id The action ID to process.
	 * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
	 *                        Generally, this should be capitalised and not localised as it's a proper noun.
	 * @throws \Exception When error running action.
	 */
	public function process_action( $action_id, $context = '' ) {
		// Temporarily override the error handler while we process the current action.
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
		set_error_handler(
			/**
			 * Temporary error handler which can catch errors and convert them into exceptions. This facilitates more
			 * robust error handling across all supported PHP versions.
			 *
			 * @throws Exception
			 *
			 * @param int    $type    Error level expressed as an integer.
			 * @param string $message Error message.
			 */
			function ( $type, $message ) {
				throw new Exception( $message );
			},
			E_USER_ERROR | E_RECOVERABLE_ERROR
		);

		/*
		 * The nested try/catch structure is required because we potentially need to convert thrown errors into
		 * exceptions (and an exception thrown from a catch block cannot be caught by a later catch block in the *same*
		 * structure).
		 */
		try {
			try {
				$valid_action = true;

				do_action( 'action_scheduler_before_execute', $action_id, $context );

				if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
					$valid_action = false;
					do_action( 'action_scheduler_execution_ignored', $action_id, $context );
					return;
				}

				do_action( 'action_scheduler_begin_execute', $action_id, $context );

				$action = $this->store->fetch_action( $action_id );
				$this->store->log_execution( $action_id );
				$action->execute();
				do_action( 'action_scheduler_after_execute', $action_id, $action, $context );
				$this->store->mark_complete( $action_id );
			} catch ( Throwable $e ) {
				// Throwable is defined when executing under PHP 7.0 and up. We convert it to an exception, for
				// compatibility with ActionScheduler_Logger.
				throw new Exception( $e->getMessage(), $e->getCode(), $e );
			}
		} catch ( Exception $e ) {
			// This catch block exists for compatibility with PHP 5.6.
			$this->handle_action_error( $action_id, $e, $context, $valid_action );
		} finally {
			restore_error_handler();
		}

		if ( isset( $action ) && is_a( $action, 'ActionScheduler_Action' ) && $action->get_schedule()->is_recurring() ) {
			$this->schedule_next_instance( $action, $action_id );
		}
	}

	/**
	 * Marks actions as either having failed execution or failed validation, as appropriate.
	 *
	 * @param int       $action_id    Action ID.
	 * @param Exception $e            Exception instance.
	 * @param string    $context      Execution context.
	 * @param bool      $valid_action If the action is valid.
	 *
	 * @return void
	 */
	private function handle_action_error( $action_id, $e, $context, $valid_action ) {
		if ( $valid_action ) {
			$this->store->mark_failure( $action_id );
			/**
			 * Runs when action execution fails.
			 *
			 * @param int       $action_id Action ID.
			 * @param Exception $e         Exception instance.
			 * @param string    $context   Execution context.
			 */
			do_action( 'action_scheduler_failed_execution', $action_id, $e, $context );
		} else {
			/**
			 * Runs when action validation fails.
			 *
			 * @param int       $action_id Action ID.
			 * @param Exception $e         Exception instance.
			 * @param string    $context   Execution context.
			 */
			do_action( 'action_scheduler_failed_validation', $action_id, $e, $context );
		}
	}

	/**
	 * Schedule the next instance of the action if necessary.
	 *
	 * @param ActionScheduler_Action $action Action.
	 * @param int                    $action_id Action ID.
	 */
	protected function schedule_next_instance( ActionScheduler_Action $action, $action_id ) {
		// If a recurring action has been consistently failing, we may wish to stop rescheduling it.
		if (
			ActionScheduler_Store::STATUS_FAILED === $this->store->get_status( $action_id )
			&& $this->recurring_action_is_consistently_failing( $action, $action_id )
		) {
			ActionScheduler_Logger::instance()->log(
				$action_id,
				__( 'This action appears to be consistently failing. A new instance will not be scheduled.', 'action-scheduler' )
			);

			return;
		}

		try {
			ActionScheduler::factory()->repeat( $action );
		} catch ( Exception $e ) {
			do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action );
		}
	}

	/**
	 * Determine if the specified recurring action has been consistently failing.
	 *
	 * @param ActionScheduler_Action $action    The recurring action to be rescheduled.
	 * @param int                    $action_id The ID of the recurring action.
	 *
	 * @return bool
	 */
	private function recurring_action_is_consistently_failing( ActionScheduler_Action $action, $action_id ) {
		/**
		 * Controls the failure threshold for recurring actions.
		 *
		 * Before rescheduling a recurring action, we look at its status. If it failed, we then check if all of the most
		 * recent actions (upto the threshold set by this filter) sharing the same hook have also failed: if they have,
		 * that is considered consistent failure and a new instance of the action will not be scheduled.
		 *
		 * @param int $failure_threshold Number of actions of the same hook to examine for failure. Defaults to 5.
		 */
		$consistent_failure_threshold = (int) apply_filters( 'action_scheduler_recurring_action_failure_threshold', 5 );

		// This query should find the earliest *failing* action (for the hook we are interested in) within our threshold.
		$query_args = array(
			'hook'         => $action->get_hook(),
			'status'       => ActionScheduler_Store::STATUS_FAILED,
			'date'         => date_create( 'now', timezone_open( 'UTC' ) )->format( 'Y-m-d H:i:s' ),
			'date_compare' => '<',
			'per_page'     => 1,
			'offset'       => $consistent_failure_threshold - 1,
		);

		$first_failing_action_id = $this->store->query_actions( $query_args );

		// If we didn't retrieve an action ID, then there haven't been enough failures for us to worry about.
		if ( empty( $first_failing_action_id ) ) {
			return false;
		}

		// Now let's fetch the first action (having the same hook) of *any status* within the same window.
		unset( $query_args['status'] );
		$first_action_id_with_the_same_hook = $this->store->query_actions( $query_args );

		/**
		 * If a recurring action is assessed as consistently failing, it will not be rescheduled. This hook provides a
		 * way to observe and optionally override that assessment.
		 *
		 * @param bool                   $is_consistently_failing If the action is considered to be consistently failing.
		 * @param ActionScheduler_Action $action                  The action being assessed.
		 */
		return (bool) apply_filters(
			'action_scheduler_recurring_action_is_consistently_failing',
			$first_action_id_with_the_same_hook === $first_failing_action_id,
			$action
		);
	}

	/**
	 * Run the queue cleaner.
	 */
	protected function run_cleanup() {
		$this->cleaner->clean( 10 * $this->get_time_limit() );
	}

	/**
	 * Get the number of concurrent batches a runner allows.
	 *
	 * @return int
	 */
	public function get_allowed_concurrent_batches() {
		return apply_filters( 'action_scheduler_queue_runner_concurrent_batches', 1 );
	}

	/**
	 * Check if the number of allowed concurrent batches is met or exceeded.
	 *
	 * @return bool
	 */
	public function has_maximum_concurrent_batches() {
		return $this->store->get_claim_count() >= $this->get_allowed_concurrent_batches();
	}

	/**
	 * Get the maximum number of seconds a batch can run for.
	 *
	 * @return int The number of seconds.
	 */
	protected function get_time_limit() {

		$time_limit = 30;

		// Apply deprecated filter from deprecated get_maximum_execution_time() method.
		if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) {
			_deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' );
			$time_limit = apply_filters( 'action_scheduler_maximum_execution_time', $time_limit );
		}

		return absint( apply_filters( 'action_scheduler_queue_runner_time_limit', $time_limit ) );
	}

	/**
	 * Get the number of seconds the process has been running.
	 *
	 * @return int The number of seconds.
	 */
	protected function get_execution_time() {
		$execution_time = microtime( true ) - $this->created_time;

		// Get the CPU time if the hosting environment uses it rather than wall-clock time to calculate a process's execution time.
		if ( function_exists( 'getrusage' ) && apply_filters( 'action_scheduler_use_cpu_execution_time', defined( 'PANTHEON_ENVIRONMENT' ) ) ) {
			$resource_usages = getrusage();

			if ( isset( $resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'] ) ) {
				$execution_time = $resource_usages['ru_stime.tv_sec'] + ( $resource_usages['ru_stime.tv_usec'] / 1000000 );
			}
		}

		return $execution_time;
	}

	/**
	 * Check if the host's max execution time is (likely) to be exceeded if processing more actions.
	 *
	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action.
	 * @return bool
	 */
	protected function time_likely_to_be_exceeded( $processed_actions ) {
		$execution_time     = $this->get_execution_time();
		$max_execution_time = $this->get_time_limit();

		// Safety against division by zero errors.
		if ( 0 === $processed_actions ) {
			return $execution_time >= $max_execution_time;
		}

		$time_per_action       = $execution_time / $processed_actions;
		$estimated_time        = $execution_time + ( $time_per_action * 3 );
		$likely_to_be_exceeded = $estimated_time > $max_execution_time;

		return apply_filters( 'action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time );
	}

	/**
	 * Get memory limit
	 *
	 * Based on WP_Background_Process::get_memory_limit()
	 *
	 * @return int
	 */
	protected function get_memory_limit() {
		if ( function_exists( 'ini_get' ) ) {
			$memory_limit = ini_get( 'memory_limit' );
		} else {
			$memory_limit = '128M'; // Sensible default, and minimum required by WooCommerce.
		}

		if ( ! $memory_limit || -1 === $memory_limit || '-1' === $memory_limit ) {
			// Unlimited, set to 32GB.
			$memory_limit = '32G';
		}

		return ActionScheduler_Compatibility::convert_hr_to_bytes( $memory_limit );
	}

	/**
	 * Memory exceeded
	 *
	 * Ensures the batch process never exceeds 90% of the maximum WordPress memory.
	 *
	 * Based on WP_Background_Process::memory_exceeded()
	 *
	 * @return bool
	 */
	protected function memory_exceeded() {

		$memory_limit    = $this->get_memory_limit() * 0.90;
		$current_memory  = memory_get_usage( true );
		$memory_exceeded = $current_memory >= $memory_limit;

		return apply_filters( 'action_scheduler_memory_exceeded', $memory_exceeded, $this );
	}

	/**
	 * See if the batch limits have been exceeded, which is when memory usage is almost at
	 * the maximum limit, or the time to process more actions will exceed the max time limit.
	 *
	 * Based on WC_Background_Process::batch_limits_exceeded()
	 *
	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action.
	 * @return bool
	 */
	protected function batch_limits_exceeded( $processed_actions ) {
		return $this->memory_exceeded() || $this->time_likely_to_be_exceeded( $processed_actions );
	}

	/**
	 * Process actions in the queue.
	 *
	 * @param string $context Optional identifier for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
	 *        Generally, this should be capitalised and not localised as it's a proper noun.
	 * @return int The number of actions processed.
	 */
	abstract public function run( $context = '' );
}
PK     ŠŠU]Òr�Í;  ;  W  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.phpnu „[µü¤        <?php

/**
 * Abstract for WP-CLI commands.
 */
abstract class ActionScheduler_WPCLI_Command extends \WP_CLI_Command {

	const DATE_FORMAT = 'Y-m-d H:i:s O';

	/**
	 * Keyed arguments.
	 *
	 * @var string[]
	 */
	protected $args;

	/**
	 * Positional arguments.
	 *
	 * @var array<string, string>
	 */
	protected $assoc_args;

	/**
	 * Construct.
	 *
	 * @param string[]              $args       Positional arguments.
	 * @param array<string, string> $assoc_args Keyed arguments.
	 * @throws \Exception When loading a CLI command file outside of WP CLI context.
	 */
	public function __construct( array $args, array $assoc_args ) {
		if ( ! defined( 'WP_CLI' ) || ! constant( 'WP_CLI' ) ) {
			/* translators: %s php class name */
			throw new \Exception( sprintf( __( 'The %s class can only be run within WP CLI.', 'action-scheduler' ), get_class( $this ) ) );
		}

		$this->args       = $args;
		$this->assoc_args = $assoc_args;
	}

	/**
	 * Execute command.
	 */
	abstract public function execute();

	/**
	 * Get the scheduled date in a human friendly format.
	 *
	 * @see ActionScheduler_ListTable::get_schedule_display_string()
	 * @param ActionScheduler_Schedule $schedule Schedule.
	 * @return string
	 */
	protected function get_schedule_display_string( ActionScheduler_Schedule $schedule ) {

		$schedule_display_string = '';

		if ( ! $schedule->get_date() ) {
			return '0000-00-00 00:00:00';
		}

		$next_timestamp = $schedule->get_date()->getTimestamp();

		$schedule_display_string .= $schedule->get_date()->format( static::DATE_FORMAT );

		return $schedule_display_string;
	}

	/**
	 * Transforms arguments with '__' from CSV into expected arrays.
	 *
	 * @see \WP_CLI\CommandWithDBObject::process_csv_arguments_to_arrays()
	 * @link https://github.com/wp-cli/entity-command/blob/c270cc9a2367cb8f5845f26a6b5e203397c91392/src/WP_CLI/CommandWithDBObject.php#L99
	 * @return void
	 */
	protected function process_csv_arguments_to_arrays() {
		foreach ( $this->assoc_args as $k => $v ) {
			if ( false !== strpos( $k, '__' ) ) {
				$this->assoc_args[ $k ] = explode( ',', $v );
			}
		}
	}

}
PK     ŠŠU]@ò#  #  Y  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.phpnu „[µü¤        <?php


/**
 * Class ActionScheduler_Abstract_Schema
 *
 * @package Action_Scheduler
 *
 * @codeCoverageIgnore
 *
 * Utility class for creating/updating custom tables
 */
abstract class ActionScheduler_Abstract_Schema {

	/**
	 * Increment this value in derived class to trigger a schema update.
	 *
	 * @var int
	 */
	protected $schema_version = 1;

	/**
	 * Schema version stored in database.
	 *
	 * @var string
	 */
	protected $db_version;

	/**
	 * Names of tables that will be registered by this class.
	 *
	 * @var array
	 */
	protected $tables = array();

	/**
	 * Can optionally be used by concrete classes to carry out additional initialization work
	 * as needed.
	 */
	public function init() {}

	/**
	 * Register tables with WordPress, and create them if needed.
	 *
	 * @param bool $force_update Optional. Default false. Use true to always run the schema update.
	 *
	 * @return void
	 */
	public function register_tables( $force_update = false ) {
		global $wpdb;

		// make WP aware of our tables.
		foreach ( $this->tables as $table ) {
			$wpdb->tables[] = $table;
			$name           = $this->get_full_table_name( $table );
			$wpdb->$table   = $name;
		}

		// create the tables.
		if ( $this->schema_update_required() || $force_update ) {
			foreach ( $this->tables as $table ) {
				/**
				 * Allow custom processing before updating a table schema.
				 *
				 * @param string $table Name of table being updated.
				 * @param string $db_version Existing version of the table being updated.
				 */
				do_action( 'action_scheduler_before_schema_update', $table, $this->db_version );
				$this->update_table( $table );
			}
			$this->mark_schema_update_complete();
		}
	}

	/**
	 * Get table definition.
	 *
	 * @param string $table The name of the table.
	 *
	 * @return string The CREATE TABLE statement, suitable for passing to dbDelta
	 */
	abstract protected function get_table_definition( $table );

	/**
	 * Determine if the database schema is out of date
	 * by comparing the integer found in $this->schema_version
	 * with the option set in the WordPress options table
	 *
	 * @return bool
	 */
	private function schema_update_required() {
		$option_name      = 'schema-' . static::class;
		$this->db_version = get_option( $option_name, 0 );

		// Check for schema option stored by the Action Scheduler Custom Tables plugin in case site has migrated from that plugin with an older schema.
		if ( 0 === $this->db_version ) {

			$plugin_option_name = 'schema-';

			switch ( static::class ) {
				case 'ActionScheduler_StoreSchema':
					$plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Store_Table_Maker';
					break;
				case 'ActionScheduler_LoggerSchema':
					$plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Logger_Table_Maker';
					break;
			}

			$this->db_version = get_option( $plugin_option_name, 0 );

			delete_option( $plugin_option_name );
		}

		return version_compare( $this->db_version, $this->schema_version, '<' );
	}

	/**
	 * Update the option in WordPress to indicate that
	 * our schema is now up to date
	 *
	 * @return void
	 */
	private function mark_schema_update_complete() {
		$option_name = 'schema-' . static::class;

		// work around race conditions and ensure that our option updates.
		$value_to_save = (string) $this->schema_version . '.0.' . time();

		update_option( $option_name, $value_to_save );
	}

	/**
	 * Update the schema for the given table
	 *
	 * @param string $table The name of the table to update.
	 *
	 * @return void
	 */
	private function update_table( $table ) {
		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
		$definition = $this->get_table_definition( $table );
		if ( $definition ) {
			$updated = dbDelta( $definition );
			foreach ( $updated as $updated_table => $update_description ) {
				if ( strpos( $update_description, 'Created table' ) === 0 ) {
					do_action( 'action_scheduler/created_table', $updated_table, $table ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
				}
			}
		}
	}

	/**
	 * Get full table name.
	 *
	 * @param string $table Table name.
	 *
	 * @return string The full name of the table, including the
	 *                table prefix for the current blog
	 */
	protected function get_full_table_name( $table ) {
		return $GLOBALS['wpdb']->prefix . $table;
	}

	/**
	 * Confirms that all of the tables registered by this schema class have been created.
	 *
	 * @return bool
	 */
	public function tables_exist() {
		global $wpdb;

		$tables_exist = true;

		foreach ( $this->tables as $table_name ) {
			$table_name     = $wpdb->prefix . $table_name;
			$pattern        = str_replace( '_', '\\_', $table_name );
			$existing_table = $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $pattern ) );

			if ( $existing_table !== $table_name ) {
				$tables_exist = false;
				break;
			}
		}

		return $tables_exist;
	}
}
PK     ŠŠU]³èƒ    N  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.phpnu „[µü¤        <?php

/**
 * Abstract class for setting a basic lock to throttle some action.
 *
 * Class ActionScheduler_Lock
 */
abstract class ActionScheduler_Lock {

	/**
	 * Instance.
	 *
	 * @var ActionScheduler_Lock
	 */
	private static $locker = null;

	/**
	 * Duration of lock.
	 *
	 * @var int
	 */
	protected static $lock_duration = MINUTE_IN_SECONDS;

	/**
	 * Check if a lock is set for a given lock type.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return bool
	 */
	public function is_locked( $lock_type ) {
		return ( $this->get_expiration( $lock_type ) >= time() );
	}

	/**
	 * Set a lock.
	 *
	 * To prevent race conditions, implementations should avoid setting the lock if the lock is already held.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return bool
	 */
	abstract public function set( $lock_type );

	/**
	 * If a lock is set, return the timestamp it was set to expiry.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
	 */
	abstract public function get_expiration( $lock_type );

	/**
	 * Get the amount of time to set for a given lock. 60 seconds by default.
	 *
	 * @param string $lock_type A string to identify different lock types.
	 * @return int
	 */
	protected function get_duration( $lock_type ) {
		return apply_filters( 'action_scheduler_lock_duration', self::$lock_duration, $lock_type );
	}

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_Lock
	 */
	public static function instance() {
		if ( empty( self::$locker ) ) {
			$class        = apply_filters( 'action_scheduler_lock_class', 'ActionScheduler_OptionLock' );
			self::$locker = new $class();
		}
		return self::$locker;
	}
}
PK     ŠŠU]t[®zæ  æ  d  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Abstract_RecurringSchedule
 */
abstract class ActionScheduler_Abstract_RecurringSchedule extends ActionScheduler_Abstract_Schedule {

	/**
	 * The date & time the first instance of this schedule was setup to run (which may not be this instance).
	 *
	 * Schedule objects are attached to an action object. Each schedule stores the run date for that
	 * object as the start date - @see $this->start - and logic to calculate the next run date after
	 * that - @see $this->calculate_next(). The $first_date property also keeps a record of when the very
	 * first instance of this chain of schedules ran.
	 *
	 * @var DateTime
	 */
	private $first_date = null;

	/**
	 * Timestamp equivalent of @see $this->first_date
	 *
	 * @var int
	 */
	protected $first_timestamp = null;

	/**
	 * The recurrence between each time an action is run using this schedule.
	 * Used to calculate the start date & time. Can be a number of seconds, in the
	 * case of ActionScheduler_IntervalSchedule, or a cron expression, as in the
	 * case of ActionScheduler_CronSchedule. Or something else.
	 *
	 * @var mixed
	 */
	protected $recurrence;

	/**
	 * Construct.
	 *
	 * @param DateTime      $date The date & time to run the action.
	 * @param mixed         $recurrence The data used to determine the schedule's recurrence.
	 * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
	 */
	public function __construct( DateTime $date, $recurrence, ?DateTime $first = null ) {
		parent::__construct( $date );
		$this->first_date = empty( $first ) ? $date : $first;
		$this->recurrence = $recurrence;
	}

	/**
	 * Schedule is recurring.
	 *
	 * @return bool
	 */
	public function is_recurring() {
		return true;
	}

	/**
	 * Get the date & time of the first schedule in this recurring series.
	 *
	 * @return DateTime|null
	 */
	public function get_first_date() {
		return clone $this->first_date;
	}

	/**
	 * Get the schedule's recurrence.
	 *
	 * @return string
	 */
	public function get_recurrence() {
		return $this->recurrence;
	}

	/**
	 * For PHP 5.2 compat, since DateTime objects can't be serialized
	 *
	 * @return array
	 */
	public function __sleep() {
		$sleep_params          = parent::__sleep();
		$this->first_timestamp = $this->first_date->getTimestamp();
		return array_merge(
			$sleep_params,
			array(
				'first_timestamp',
				'recurrence',
			)
		);
	}

	/**
	 * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
	 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. This was addressed in
	 * Action Scheduler 3.0.0, where properties and property names were aligned for better
	 * inheritance. To maintain backward compatibility with scheduled serialized and stored
	 * prior to 3.0, we need to correctly map the old property names.
	 */
	public function __wakeup() {
		parent::__wakeup();
		if ( $this->first_timestamp > 0 ) {
			$this->first_date = as_get_datetime_object( $this->first_timestamp );
		} else {
			$this->first_date = $this->get_date();
		}
	}
}
PK     ŠŠU]
k~¦    X  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_TimezoneHelper
 */
abstract class ActionScheduler_TimezoneHelper {

	/**
	 * DateTimeZone object.
	 *
	 * @var null|DateTimeZone
	 */
	private static $local_timezone = null;

	/**
	 * Set a DateTime's timezone to the WordPress site's timezone, or a UTC offset
	 * if no timezone string is available.
	 *
	 * @since  2.1.0
	 *
	 * @param DateTime $date Timestamp.
	 * @return ActionScheduler_DateTime
	 */
	public static function set_local_timezone( DateTime $date ) {

		// Accept a DateTime for easier backward compatibility, even though we require methods on ActionScheduler_DateTime.
		if ( ! is_a( $date, 'ActionScheduler_DateTime' ) ) {
			$date = as_get_datetime_object( $date->format( 'U' ) );
		}

		if ( get_option( 'timezone_string' ) ) {
			$date->setTimezone( new DateTimeZone( self::get_local_timezone_string() ) );
		} else {
			$date->setUtcOffset( self::get_local_timezone_offset() );
		}

		return $date;
	}

	/**
	 * Helper to retrieve the timezone string for a site until a WP core method exists
	 * (see https://core.trac.wordpress.org/ticket/24730).
	 *
	 * Adapted from wc_timezone_string() and https://secure.php.net/manual/en/function.timezone-name-from-abbr.php#89155.
	 *
	 * If no timezone string is set, and its not possible to match the UTC offset set for the site to a timezone
	 * string, then an empty string will be returned, and the UTC offset should be used to set a DateTime's
	 * timezone.
	 *
	 * @since 2.1.0
	 * @param bool $reset Unused.
	 * @return string PHP timezone string for the site or empty if no timezone string is available.
	 */
	protected static function get_local_timezone_string( $reset = false ) {
		// If site timezone string exists, return it.
		$timezone = get_option( 'timezone_string' );
		if ( $timezone ) {
			return $timezone;
		}

		// Get UTC offset, if it isn't set then return UTC.
		$utc_offset = intval( get_option( 'gmt_offset', 0 ) );
		if ( 0 === $utc_offset ) {
			return 'UTC';
		}

		// Adjust UTC offset from hours to seconds.
		$utc_offset *= 3600;

		// Attempt to guess the timezone string from the UTC offset.
		$timezone = timezone_name_from_abbr( '', $utc_offset );
		if ( $timezone ) {
			return $timezone;
		}

		// Last try, guess timezone string manually.
		foreach ( timezone_abbreviations_list() as $abbr ) {
			foreach ( $abbr as $city ) {
				if ( (bool) date( 'I' ) === (bool) $city['dst'] && $city['timezone_id'] && intval( $city['offset'] ) === $utc_offset ) { // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date	 -- we are actually interested in the runtime timezone.
					return $city['timezone_id'];
				}
			}
		}

		// No timezone string.
		return '';
	}

	/**
	 * Get timezone offset in seconds.
	 *
	 * @since  2.1.0
	 * @return float
	 */
	protected static function get_local_timezone_offset() {
		$timezone = get_option( 'timezone_string' );

		if ( $timezone ) {
			$timezone_object = new DateTimeZone( $timezone );
			return $timezone_object->getOffset( new DateTime( 'now' ) );
		} else {
			return floatval( get_option( 'gmt_offset', 0 ) ) * HOUR_IN_SECONDS;
		}
	}

	/**
	 * Get local timezone.
	 *
	 * @param bool $reset Toggle to discard stored value.
	 * @deprecated 2.1.0
	 */
	public static function get_local_timezone( $reset = false ) {
		_deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' );
		if ( $reset ) {
			self::$local_timezone = null;
		}
		if ( ! isset( self::$local_timezone ) ) {
			$tzstring = get_option( 'timezone_string' );

			if ( empty( $tzstring ) ) {
				$gmt_offset = absint( get_option( 'gmt_offset' ) );
				if ( 0 === $gmt_offset ) {
					$tzstring = 'UTC';
				} else {
					$gmt_offset *= HOUR_IN_SECONDS;
					$tzstring    = timezone_name_from_abbr( '', $gmt_offset, 1 );

					// If there's no timezone string, try again with no DST.
					if ( false === $tzstring ) {
						$tzstring = timezone_name_from_abbr( '', $gmt_offset, 0 );
					}

					// Try mapping to the first abbreviation we can find.
					if ( false === $tzstring ) {
						$is_dst = date( 'I' ); // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date	 -- we are actually interested in the runtime timezone.
						foreach ( timezone_abbreviations_list() as $abbr ) {
							foreach ( $abbr as $city ) {
								if ( $city['dst'] === $is_dst && $city['offset'] === $gmt_offset ) {
									// If there's no valid timezone ID, keep looking.
									if ( is_null( $city['timezone_id'] ) ) {
										continue;
									}

									$tzstring = $city['timezone_id'];
									break 2;
								}
							}
						}
					}

					// If we still have no valid string, then fall back to UTC.
					if ( false === $tzstring ) {
						$tzstring = 'UTC';
					}
				}
			}

			self::$local_timezone = new DateTimeZone( $tzstring );
		}
		return self::$local_timezone;
	}
}
PK     ŠŠU]i|ÉÒ/b  /b  \  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.phpnu „[µü¤        <?php

if ( ! class_exists( 'WP_List_Table' ) ) {
	require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}

/**
 * Action Scheduler Abstract List Table class
 *
 * This abstract class enhances WP_List_Table making it ready to use.
 *
 * By extending this class we can focus on describing how our table looks like,
 * which columns needs to be shown, filter, ordered by and more and forget about the details.
 *
 * This class supports:
 *  - Bulk actions
 *  - Search
 *  - Sortable columns
 *  - Automatic translations of the columns
 *
 * @codeCoverageIgnore
 * @since  2.0.0
 */
abstract class ActionScheduler_Abstract_ListTable extends WP_List_Table {

	/**
	 * The table name
	 *
	 * @var string
	 */
	protected $table_name;

	/**
	 * Package name, used to get options from WP_List_Table::get_items_per_page.
	 *
	 * @var string
	 */
	protected $package;

	/**
	 * How many items do we render per page?
	 *
	 * @var int
	 */
	protected $items_per_page = 10;

	/**
	 * Enables search in this table listing. If this array
	 * is empty it means the listing is not searchable.
	 *
	 * @var array
	 */
	protected $search_by = array();

	/**
	 * Columns to show in the table listing. It is a key => value pair. The
	 * key must much the table column name and the value is the label, which is
	 * automatically translated.
	 *
	 * @var array
	 */
	protected $columns = array();

	/**
	 * Defines the row-actions. It expects an array where the key
	 * is the column name and the value is an array of actions.
	 *
	 * The array of actions are key => value, where key is the method name
	 * (with the prefix row_action_<key>) and the value is the label
	 * and title.
	 *
	 * @var array
	 */
	protected $row_actions = array();

	/**
	 * The Primary key of our table
	 *
	 * @var string
	 */
	protected $ID = 'ID';

	/**
	 * Enables sorting, it expects an array
	 * of columns (the column names are the values)
	 *
	 * @var array
	 */
	protected $sort_by = array();

	/**
	 * The default sort order
	 *
	 * @var string
	 */
	protected $filter_by = array();

	/**
	 * The status name => count combinations for this table's items. Used to display status filters.
	 *
	 * @var array
	 */
	protected $status_counts = array();

	/**
	 * Notices to display when loading the table. Array of arrays of form array( 'class' => {updated|error}, 'message' => 'This is the notice text display.' ).
	 *
	 * @var array
	 */
	protected $admin_notices = array();

	/**
	 * Localised string displayed in the <h1> element above the able.
	 *
	 * @var string
	 */
	protected $table_header;

	/**
	 * Enables bulk actions. It must be an array where the key is the action name
	 * and the value is the label (which is translated automatically). It is important
	 * to notice that it will check that the method exists (`bulk_$name`) and will throw
	 * an exception if it does not exists.
	 *
	 * This class will automatically check if the current request has a bulk action, will do the
	 * validations and afterwards will execute the bulk method, with two arguments. The first argument
	 * is the array with primary keys, the second argument is a string with a list of the primary keys,
	 * escaped and ready to use (with `IN`).
	 *
	 * @var array
	 */
	protected $bulk_actions = array();

	/**
	 * Makes translation easier, it basically just wraps
	 * `_x` with some default (the package name).
	 *
	 * @param string $text The new text to translate.
	 * @param string $context The context of the text.
	 * @return string|void The translated text.
	 *
	 * @deprecated 3.0.0 Use `_x()` instead.
	 */
	protected function translate( $text, $context = '' ) {
		return $text;
	}

	/**
	 * Reads `$this->bulk_actions` and returns an array that WP_List_Table understands. It
	 * also validates that the bulk method handler exists. It throws an exception because
	 * this is a library meant for developers and missing a bulk method is a development-time error.
	 *
	 * @return array
	 *
	 * @throws RuntimeException Throws RuntimeException when the bulk action does not have a callback method.
	 */
	protected function get_bulk_actions() {
		$actions = array();

		foreach ( $this->bulk_actions as $action => $label ) {
			if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) {
				throw new RuntimeException( "The bulk action $action does not have a callback method" );
			}

			$actions[ $action ] = $label;
		}

		return $actions;
	}

	/**
	 * Checks if the current request has a bulk action. If that is the case it will validate and will
	 * execute the bulk method handler. Regardless if the action is valid or not it will redirect to
	 * the previous page removing the current arguments that makes this request a bulk action.
	 */
	protected function process_bulk_action() {
		global $wpdb;
		// Detect when a bulk action is being triggered.
		$action = $this->current_action();
		if ( ! $action ) {
			return;
		}

		check_admin_referer( 'bulk-' . $this->_args['plural'] );

		$method = 'bulk_' . $action;
		if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) {
			$ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')';
			$id      = array_map( 'absint', $_GET['ID'] );
			$this->$method( $id, $wpdb->prepare( $ids_sql, $id ) ); //phpcs:ignore WordPress.DB.PreparedSQL
		}

		if ( isset( $_SERVER['REQUEST_URI'] ) ) {
			wp_safe_redirect(
				remove_query_arg(
					array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ),
					esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) )
				)
			);
			exit;
		}
	}

	/**
	 * Default code for deleting entries.
	 * validated already by process_bulk_action()
	 *
	 * @param array  $ids ids of the items to delete.
	 * @param string $ids_sql the sql for the ids.
	 * @return void
	 */
	protected function bulk_delete( array $ids, $ids_sql ) {
		$store = ActionScheduler::store();
		foreach ( $ids as $action_id ) {
			$store->delete( $action_id );
		}
	}

	/**
	 * Prepares the _column_headers property which is used by WP_Table_List at rendering.
	 * It merges the columns and the sortable columns.
	 */
	protected function prepare_column_headers() {
		$this->_column_headers = array(
			$this->get_columns(),
			get_hidden_columns( $this->screen ),
			$this->get_sortable_columns(),
		);
	}

	/**
	 * Reads $this->sort_by and returns the columns name in a format that WP_Table_List
	 * expects
	 */
	public function get_sortable_columns() {
		$sort_by = array();
		foreach ( $this->sort_by as $column ) {
			$sort_by[ $column ] = array( $column, true );
		}
		return $sort_by;
	}

	/**
	 * Returns the columns names for rendering. It adds a checkbox for selecting everything
	 * as the first column
	 */
	public function get_columns() {
		$columns = array_merge(
			array( 'cb' => '<input type="checkbox" />' ),
			$this->columns
		);

		return $columns;
	}

	/**
	 * Get prepared LIMIT clause for items query
	 *
	 * @global wpdb $wpdb
	 *
	 * @return string Prepared LIMIT clause for items query.
	 */
	protected function get_items_query_limit() {
		global $wpdb;

		$per_page = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page );
		return $wpdb->prepare( 'LIMIT %d', $per_page );
	}

	/**
	 * Returns the number of items to offset/skip for this current view.
	 *
	 * @return int
	 */
	protected function get_items_offset() {
		$per_page     = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page );
		$current_page = $this->get_pagenum();
		if ( 1 < $current_page ) {
			$offset = $per_page * ( $current_page - 1 );
		} else {
			$offset = 0;
		}

		return $offset;
	}

	/**
	 * Get prepared OFFSET clause for items query
	 *
	 * @global wpdb $wpdb
	 *
	 * @return string Prepared OFFSET clause for items query.
	 */
	protected function get_items_query_offset() {
		global $wpdb;

		return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() );
	}

	/**
	 * Prepares the ORDER BY sql statement. It uses `$this->sort_by` to know which
	 * columns are sortable. This requests validates the orderby $_GET parameter is a valid
	 * column and sortable. It will also use order (ASC|DESC) using DESC by default.
	 */
	protected function get_items_query_order() {
		if ( empty( $this->sort_by ) ) {
			return '';
		}

		$orderby = esc_sql( $this->get_request_orderby() );
		$order   = esc_sql( $this->get_request_order() );

		return "ORDER BY {$orderby} {$order}";
	}

	/**
	 * Querystring arguments to persist between form submissions.
	 *
	 * @since 3.7.3
	 *
	 * @return string[]
	 */
	protected function get_request_query_args_to_persist() {
		return array_merge(
			$this->sort_by,
			array(
				'page',
				'status',
				'tab',
			)
		);
	}

	/**
	 * Return the sortable column specified for this request to order the results by, if any.
	 *
	 * @return string
	 */
	protected function get_request_orderby() {

		$valid_sortable_columns = array_values( $this->sort_by );

		if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns, true ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$orderby = sanitize_text_field( wp_unslash( $_GET['orderby'] ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended
		} else {
			$orderby = $valid_sortable_columns[0];
		}

		return $orderby;
	}

	/**
	 * Return the sortable column order specified for this request.
	 *
	 * @return string
	 */
	protected function get_request_order() {

		if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( sanitize_text_field( wp_unslash( $_GET['order'] ) ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$order = 'DESC';
		} else {
			$order = 'ASC';
		}

		return $order;
	}

	/**
	 * Return the status filter for this request, if any.
	 *
	 * @return string
	 */
	protected function get_request_status() {
		$status = ( ! empty( $_GET['status'] ) ) ? sanitize_text_field( wp_unslash( $_GET['status'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended
		return $status;
	}

	/**
	 * Return the search filter for this request, if any.
	 *
	 * @return string
	 */
	protected function get_request_search_query() {
		$search_query = ( ! empty( $_GET['s'] ) ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended
		return $search_query;
	}

	/**
	 * Process and return the columns name. This is meant for using with SQL, this means it
	 * always includes the primary key.
	 *
	 * @return array
	 */
	protected function get_table_columns() {
		$columns = array_keys( $this->columns );
		if ( ! in_array( $this->ID, $columns, true ) ) {
			$columns[] = $this->ID;
		}

		return $columns;
	}

	/**
	 * Check if the current request is doing a "full text" search. If that is the case
	 * prepares the SQL to search texts using LIKE.
	 *
	 * If the current request does not have any search or if this list table does not support
	 * that feature it will return an empty string.
	 *
	 * @return string
	 */
	protected function get_items_query_search() {
		global $wpdb;

		if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return '';
		}

		$search_string = sanitize_text_field( wp_unslash( $_GET['s'] ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended

		$filter = array();
		foreach ( $this->search_by as $column ) {
			$wild     = '%';
			$sql_like = $wild . $wpdb->esc_like( $search_string ) . $wild;
			$filter[] = $wpdb->prepare( '`' . $column . '` LIKE %s', $sql_like ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.DB.PreparedSQL.NotPrepared
		}
		return implode( ' OR ', $filter );
	}

	/**
	 * Prepares the SQL to filter rows by the options defined at `$this->filter_by`. Before trusting
	 * any data sent by the user it validates that it is a valid option.
	 */
	protected function get_items_query_filters() {
		global $wpdb;

		if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return '';
		}

		$filter = array();

		foreach ( $this->filter_by as $column => $options ) {
			if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
				continue;
			}

			$filter[] = $wpdb->prepare( "`$column` = %s", sanitize_text_field( wp_unslash( $_GET['filter_by'][ $column ] ) ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
		}

		return implode( ' AND ', $filter );

	}

	/**
	 * Prepares the data to feed WP_Table_List.
	 *
	 * This has the core for selecting, sorting and filtering data. To keep the code simple
	 * its logic is split among many methods (get_items_query_*).
	 *
	 * Beside populating the items this function will also count all the records that matches
	 * the filtering criteria and will do fill the pagination variables.
	 */
	public function prepare_items() {
		global $wpdb;

		$this->process_bulk_action();

		$this->process_row_actions();

		if ( ! empty( $_REQUEST['_wp_http_referer'] && ! empty( $_SERVER['REQUEST_URI'] ) ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
			wp_safe_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) );
			exit;
		}

		$this->prepare_column_headers();

		$limit   = $this->get_items_query_limit();
		$offset  = $this->get_items_query_offset();
		$order   = $this->get_items_query_order();
		$where   = array_filter(
			array(
				$this->get_items_query_search(),
				$this->get_items_query_filters(),
			)
		);
		$columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`';

		if ( ! empty( $where ) ) {
			$where = 'WHERE (' . implode( ') AND (', $where ) . ')';
		} else {
			$where = '';
		}

		$sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";

		$this->set_items( $wpdb->get_results( $sql, ARRAY_A ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		$query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
		$total_items = $wpdb->get_var( $query_count ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
		$per_page    = $this->get_items_per_page( $this->get_per_page_option_name(), $this->items_per_page );
		$this->set_pagination_args(
			array(
				'total_items' => $total_items,
				'per_page'    => $per_page,
				'total_pages' => ceil( $total_items / $per_page ),
			)
		);
	}

	/**
	 * Display the table.
	 *
	 * @param string $which The name of the table.
	 */
	public function extra_tablenav( $which ) {
		if ( ! $this->filter_by || 'top' !== $which ) {
			return;
		}

		echo '<div class="alignleft actions">';

		foreach ( $this->filter_by as $id => $options ) {
			$default = ! empty( $_GET['filter_by'][ $id ] ) ? sanitize_text_field( wp_unslash( $_GET['filter_by'][ $id ] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			if ( empty( $options[ $default ] ) ) {
				$default = '';
			}

			echo '<select name="filter_by[' . esc_attr( $id ) . ']" class="first" id="filter-by-' . esc_attr( $id ) . '">';

			foreach ( $options as $value => $label ) {
				echo '<option value="' . esc_attr( $value ) . '" ' . esc_html( $value === $default ? 'selected' : '' ) . '>'
					. esc_html( $label )
				. '</option>';
			}

			echo '</select>';
		}

		submit_button( esc_html__( 'Filter', 'action-scheduler' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
		echo '</div>';
	}

	/**
	 * Set the data for displaying. It will attempt to unserialize (There is a chance that some columns
	 * are serialized). This can be override in child classes for further data transformation.
	 *
	 * @param array $items Items array.
	 */
	protected function set_items( array $items ) {
		$this->items = array();
		foreach ( $items as $item ) {
			$this->items[ $item[ $this->ID ] ] = array_map( 'maybe_unserialize', $item );
		}
	}

	/**
	 * Renders the checkbox for each row, this is the first column and it is named ID regardless
	 * of how the primary key is named (to keep the code simpler). The bulk actions will do the proper
	 * name transformation though using `$this->ID`.
	 *
	 * @param array $row The row to render.
	 */
	public function column_cb( $row ) {
		return '<input name="ID[]" type="checkbox" value="' . esc_attr( $row[ $this->ID ] ) . '" />';
	}

	/**
	 * Renders the row-actions.
	 *
	 * This method renders the action menu, it reads the definition from the $row_actions property,
	 * and it checks that the row action method exists before rendering it.
	 *
	 * @param array  $row Row to be rendered.
	 * @param string $column_name Column name.
	 * @return string
	 */
	protected function maybe_render_actions( $row, $column_name ) {
		if ( empty( $this->row_actions[ $column_name ] ) ) {
			return;
		}

		$row_id = $row[ $this->ID ];

		$actions      = '<div class="row-actions">';
		$action_count = 0;
		foreach ( $this->row_actions[ $column_name ] as $action_key => $action ) {

			$action_count++;

			if ( ! method_exists( $this, 'row_action_' . $action_key ) ) {
				continue;
			}

			$action_link = ! empty( $action['link'] ) ? $action['link'] : add_query_arg(
				array(
					'row_action' => $action_key,
					'row_id'     => $row_id,
					'nonce'      => wp_create_nonce( $action_key . '::' . $row_id ),
				)
			);
			$span_class  = ! empty( $action['class'] ) ? $action['class'] : $action_key;
			$separator   = ( $action_count < count( $this->row_actions[ $column_name ] ) ) ? ' | ' : '';

			$actions .= sprintf( '<span class="%s">', esc_attr( $span_class ) );
			$actions .= sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', esc_url( $action_link ), esc_attr( $action['desc'] ), esc_html( $action['name'] ) );
			$actions .= sprintf( '%s</span>', $separator );
		}
		$actions .= '</div>';
		return $actions;
	}

	/**
	 * Process the bulk actions.
	 *
	 * @return void
	 */
	protected function process_row_actions() {
		$parameters = array( 'row_action', 'row_id', 'nonce' );
		foreach ( $parameters as $parameter ) {
			if ( empty( $_REQUEST[ $parameter ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
				return;
			}
		}

		$action = sanitize_text_field( wp_unslash( $_REQUEST['row_action'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
		$row_id = sanitize_text_field( wp_unslash( $_REQUEST['row_id'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
		$nonce  = sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
		$method = 'row_action_' . $action; // phpcs:ignore WordPress.Security.NonceVerification.Recommended

		if ( wp_verify_nonce( $nonce, $action . '::' . $row_id ) && method_exists( $this, $method ) ) {
			$this->$method( sanitize_text_field( wp_unslash( $row_id ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		}

		if ( isset( $_SERVER['REQUEST_URI'] ) ) {
			wp_safe_redirect(
				remove_query_arg(
					array( 'row_id', 'row_action', 'nonce' ),
					esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) )
				)
			);
			exit;
		}
	}

	/**
	 * Default column formatting, it will escape everything for security.
	 *
	 * @param array  $item The item array.
	 * @param string $column_name Column name to display.
	 *
	 * @return string
	 */
	public function column_default( $item, $column_name ) {
		$column_html  = esc_html( $item[ $column_name ] );
		$column_html .= $this->maybe_render_actions( $item, $column_name );
		return $column_html;
	}

	/**
	 * Display the table heading and search query, if any
	 */
	protected function display_header() {
		echo '<h1 class="wp-heading-inline">' . esc_attr( $this->table_header ) . '</h1>';
		if ( $this->get_request_search_query() ) {
			/* translators: %s: search query */
			echo '<span class="subtitle">' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . '</span>';
		}
		echo '<hr class="wp-header-end">';
	}

	/**
	 * Display the table heading and search query, if any
	 */
	protected function display_admin_notices() {
		foreach ( $this->admin_notices as $notice ) {
			echo '<div id="message" class="' . esc_attr( $notice['class'] ) . '">';
			echo '	<p>' . wp_kses_post( $notice['message'] ) . '</p>';
			echo '</div>';
		}
	}

	/**
	 * Prints the available statuses so the user can click to filter.
	 */
	protected function display_filter_by_status() {

		$status_list_items = array();
		$request_status    = $this->get_request_status();

		// Helper to set 'all' filter when not set on status counts passed in.
		if ( ! isset( $this->status_counts['all'] ) ) {
			$all_count = array_sum( $this->status_counts );
			if ( isset( $this->status_counts['past-due'] ) ) {
				$all_count -= $this->status_counts['past-due'];
			}
			$this->status_counts = array( 'all' => $all_count ) + $this->status_counts;
		}

		// Translated status labels.
		$status_labels             = ActionScheduler_Store::instance()->get_status_labels();
		$status_labels['all']      = esc_html_x( 'All', 'status labels', 'action-scheduler' );
		$status_labels['past-due'] = esc_html_x( 'Past-due', 'status labels', 'action-scheduler' );

		foreach ( $this->status_counts as $status_slug => $count ) {

			if ( 0 === $count ) {
				continue;
			}

			if ( $status_slug === $request_status || ( empty( $request_status ) && 'all' === $status_slug ) ) {
				$status_list_item = '<li class="%1$s"><a href="%2$s" class="current">%3$s</a> (%4$d)</li>';
			} else {
				$status_list_item = '<li class="%1$s"><a href="%2$s">%3$s</a> (%4$d)</li>';
			}

			$status_name         = isset( $status_labels[ $status_slug ] ) ? $status_labels[ $status_slug ] : ucfirst( $status_slug );
			$status_filter_url   = ( 'all' === $status_slug ) ? remove_query_arg( 'status' ) : add_query_arg( 'status', $status_slug );
			$status_filter_url   = remove_query_arg( array( 'paged', 's' ), $status_filter_url );
			$status_list_items[] = sprintf( $status_list_item, esc_attr( $status_slug ), esc_url( $status_filter_url ), esc_html( $status_name ), absint( $count ) );
		}

		if ( $status_list_items ) {
			echo '<ul class="subsubsub">';
			echo implode( " | \n", $status_list_items ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			echo '</ul>';
		}
	}

	/**
	 * Renders the table list, we override the original class to render the table inside a form
	 * and to render any needed HTML (like the search box). By doing so the callee of a function can simple
	 * forget about any extra HTML.
	 */
	protected function display_table() {
		echo '<form id="' . esc_attr( $this->_args['plural'] ) . '-filter" method="get">';
		foreach ( $this->get_request_query_args_to_persist() as $arg ) {
			$arg_value = isset( $_GET[ $arg ] ) ? sanitize_text_field( wp_unslash( $_GET[ $arg ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			if ( ! $arg_value ) {
				continue;
			}

			echo '<input type="hidden" name="' . esc_attr( $arg ) . '" value="' . esc_attr( $arg_value ) . '" />';
		}

		if ( ! empty( $this->search_by ) ) {
			echo $this->search_box( $this->get_search_box_button_text(), 'plugin' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		}
		parent::display();
		echo '</form>';
	}

	/**
	 * Process any pending actions.
	 */
	public function process_actions() {
		$this->process_bulk_action();
		$this->process_row_actions();

		if ( ! empty( $_REQUEST['_wp_http_referer'] ) && ! empty( $_SERVER['REQUEST_URI'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
			wp_safe_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) );
			exit;
		}
	}

	/**
	 * Render the list table page, including header, notices, status filters and table.
	 */
	public function display_page() {
		$this->prepare_items();

		echo '<div class="wrap">';
		$this->display_header();
		$this->display_admin_notices();
		$this->display_filter_by_status();
		$this->display_table();
		echo '</div>';
	}

	/**
	 * Get the text to display in the search box on the list table.
	 */
	protected function get_search_box_placeholder() {
		return esc_html__( 'Search', 'action-scheduler' );
	}

	/**
	 * Gets the screen per_page option name.
	 *
	 * @return string
	 */
	protected function get_per_page_option_name() {
		return $this->package . '_items_per_page';
	}
}
PK     ŠŠU]q'_à�,  �,  I  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.phpnu „[µü¤        <?php

use Action_Scheduler\WP_CLI\Migration_Command;
use Action_Scheduler\Migration\Controller;

/**
 * Class ActionScheduler
 *
 * @codeCoverageIgnore
 */
abstract class ActionScheduler {

	/**
	 * Plugin file path.
	 *
	 * @var string
	 */
	private static $plugin_file = '';

	/**
	 * ActionScheduler_ActionFactory instance.
	 *
	 * @var ActionScheduler_ActionFactory
	 */
	private static $factory = null;

	/**
	 * Data store is initialized.
	 *
	 * @var bool
	 */
	private static $data_store_initialized = false;

	/**
	 * Factory.
	 */
	public static function factory() {
		if ( ! isset( self::$factory ) ) {
			self::$factory = new ActionScheduler_ActionFactory();
		}
		return self::$factory;
	}

	/**
	 * Get Store instance.
	 */
	public static function store() {
		return ActionScheduler_Store::instance();
	}

	/**
	 * Get Lock instance.
	 */
	public static function lock() {
		return ActionScheduler_Lock::instance();
	}

	/**
	 * Get Logger instance.
	 */
	public static function logger() {
		return ActionScheduler_Logger::instance();
	}

	/**
	 * Get QueueRunner instance.
	 */
	public static function runner() {
		return ActionScheduler_QueueRunner::instance();
	}

	/**
	 * Get AdminView instance.
	 */
	public static function admin_view() {
		return ActionScheduler_AdminView::instance();
	}

	/**
	 * Get the absolute system path to the plugin directory, or a file therein
	 *
	 * @static
	 * @param string $path Path relative to plugin directory.
	 * @return string
	 */
	public static function plugin_path( $path ) {
		$base = dirname( self::$plugin_file );
		if ( $path ) {
			return trailingslashit( $base ) . $path;
		} else {
			return untrailingslashit( $base );
		}
	}

	/**
	 * Get the absolute URL to the plugin directory, or a file therein
	 *
	 * @static
	 * @param string $path Path relative to plugin directory.
	 * @return string
	 */
	public static function plugin_url( $path ) {
		return plugins_url( $path, self::$plugin_file );
	}

	/**
	 * Autoload.
	 *
	 * @param string $class Class name.
	 */
	public static function autoload( $class ) {
		$d           = DIRECTORY_SEPARATOR;
		$classes_dir = self::plugin_path( 'classes' . $d );
		$separator   = strrpos( $class, '\\' );
		if ( false !== $separator ) {
			if ( 0 !== strpos( $class, 'Action_Scheduler' ) ) {
				return;
			}
			$class = substr( $class, $separator + 1 );
		}

		if ( 'Deprecated' === substr( $class, -10 ) ) {
			$dir = self::plugin_path( 'deprecated' . $d );
		} elseif ( self::is_class_abstract( $class ) ) {
			$dir = $classes_dir . 'abstracts' . $d;
		} elseif ( self::is_class_migration( $class ) ) {
			$dir = $classes_dir . 'migration' . $d;
		} elseif ( 'Schedule' === substr( $class, -8 ) ) {
			$dir = $classes_dir . 'schedules' . $d;
		} elseif ( 'Action' === substr( $class, -6 ) ) {
			$dir = $classes_dir . 'actions' . $d;
		} elseif ( 'Schema' === substr( $class, -6 ) ) {
			$dir = $classes_dir . 'schema' . $d;
		} elseif ( strpos( $class, 'ActionScheduler' ) === 0 ) {
			$segments = explode( '_', $class );
			$type     = isset( $segments[1] ) ? $segments[1] : '';

			switch ( $type ) {
				case 'WPCLI':
					$dir = $classes_dir . 'WP_CLI' . $d;
					break;
				case 'DBLogger':
				case 'DBStore':
				case 'HybridStore':
				case 'wpPostStore':
				case 'wpCommentLogger':
					$dir = $classes_dir . 'data-stores' . $d;
					break;
				default:
					$dir = $classes_dir;
					break;
			}
		} elseif ( self::is_class_cli( $class ) ) {
			$dir = $classes_dir . 'WP_CLI' . $d;
		} elseif ( strpos( $class, 'CronExpression' ) === 0 ) {
			$dir = self::plugin_path( 'lib' . $d . 'cron-expression' . $d );
		} elseif ( strpos( $class, 'WP_Async_Request' ) === 0 ) {
			$dir = self::plugin_path( 'lib' . $d );
		} else {
			return;
		}

		if ( file_exists( $dir . "{$class}.php" ) ) {
			include $dir . "{$class}.php";
			return;
		}
	}

	/**
	 * Initialize the plugin
	 *
	 * @static
	 * @param string $plugin_file Plugin file path.
	 */
	public static function init( $plugin_file ) {
		self::$plugin_file = $plugin_file;
		spl_autoload_register( array( __CLASS__, 'autoload' ) );

		/**
		 * Fires in the early stages of Action Scheduler init hook.
		 */
		do_action( 'action_scheduler_pre_init' );

		require_once self::plugin_path( 'functions.php' );
		ActionScheduler_DataController::init();

		$store                      = self::store();
		$logger                     = self::logger();
		$runner                     = self::runner();
		$admin_view                 = self::admin_view();
		$recurring_action_scheduler = new ActionScheduler_RecurringActionScheduler();

		// Ensure initialization on plugin activation.
		if ( ! did_action( 'init' ) ) {
			// phpcs:ignore Squiz.PHP.CommentedOutCode
			add_action( 'init', array( $admin_view, 'init' ), 0, 0 ); // run before $store::init().
			add_action( 'init', array( $store, 'init' ), 1, 0 );
			add_action( 'init', array( $logger, 'init' ), 1, 0 );
			add_action( 'init', array( $runner, 'init' ), 1, 0 );
			add_action( 'init', array( $recurring_action_scheduler, 'init' ), 1, 0 );

			add_action(
				'init',
				/**
				 * Runs after the active store's init() method has been called.
				 *
				 * It would probably be preferable to have $store->init() (or it's parent method) set this itself,
				 * once it has initialized, however that would cause problems in cases where a custom data store is in
				 * use and it has not yet been updated to follow that same logic.
				 */
				function () {
					self::$data_store_initialized = true;

					/**
					 * Fires when Action Scheduler is ready: it is safe to use the procedural API after this point.
					 *
					 * @since 3.5.5
					 */
					do_action( 'action_scheduler_init' );
				},
				1
			);
		} else {
			$admin_view->init();
			$store->init();
			$logger->init();
			$runner->init();
			$recurring_action_scheduler->init();
			self::$data_store_initialized = true;

			/**
			 * Fires when Action Scheduler is ready: it is safe to use the procedural API after this point.
			 *
			 * @since 3.5.5
			 */
			do_action( 'action_scheduler_init' );
		}

		if ( apply_filters( 'action_scheduler_load_deprecated_functions', true ) ) {
			require_once self::plugin_path( 'deprecated/functions.php' );
		}

		if ( defined( 'WP_CLI' ) && WP_CLI ) {
			WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command' );
			WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Clean_Command' );
			WP_CLI::add_command( 'action-scheduler action', '\Action_Scheduler\WP_CLI\Action_Command' );
			WP_CLI::add_command( 'action-scheduler', '\Action_Scheduler\WP_CLI\System_Command' );
			if ( ! ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration() ) {
				$command = new Migration_Command();
				$command->register();
			}
		}

		/**
		 * Handle WP comment cleanup after migration.
		 */
		if ( is_a( $logger, 'ActionScheduler_DBLogger' ) && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs() ) {
			ActionScheduler_WPCommentCleaner::init();
		}

		add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
	}

	/**
	 * Check whether the AS data store has been initialized.
	 *
	 * @param string $function_name The name of the function being called. Optional. Default `null`.
	 * @return bool
	 */
	public static function is_initialized( $function_name = null ) {
		if ( ! self::$data_store_initialized && ! empty( $function_name ) ) {
			$message = sprintf(
				/* translators: %s function name. */
				__( '%s() was called before the Action Scheduler data store was initialized', 'action-scheduler' ),
				esc_attr( $function_name )
			);
			_doing_it_wrong( esc_html( $function_name ), esc_html( $message ), '3.1.6' );
		}

		return self::$data_store_initialized;
	}

	/**
	 * Determine if the class is one of our abstract classes.
	 *
	 * @since 3.0.0
	 *
	 * @param string $class The class name.
	 *
	 * @return bool
	 */
	protected static function is_class_abstract( $class ) {
		static $abstracts = array(
			'ActionScheduler'                            => true,
			'ActionScheduler_Abstract_ListTable'         => true,
			'ActionScheduler_Abstract_QueueRunner'       => true,
			'ActionScheduler_Abstract_Schedule'          => true,
			'ActionScheduler_Abstract_RecurringSchedule' => true,
			'ActionScheduler_Lock'                       => true,
			'ActionScheduler_Logger'                     => true,
			'ActionScheduler_Abstract_Schema'            => true,
			'ActionScheduler_Store'                      => true,
			'ActionScheduler_TimezoneHelper'             => true,
			'ActionScheduler_WPCLI_Command'              => true,
		);

		return isset( $abstracts[ $class ] ) && $abstracts[ $class ];
	}

	/**
	 * Determine if the class is one of our migration classes.
	 *
	 * @since 3.0.0
	 *
	 * @param string $class The class name.
	 *
	 * @return bool
	 */
	protected static function is_class_migration( $class ) {
		static $migration_segments = array(
			'ActionMigrator'  => true,
			'BatchFetcher'    => true,
			'DBStoreMigrator' => true,
			'DryRun'          => true,
			'LogMigrator'     => true,
			'Config'          => true,
			'Controller'      => true,
			'Runner'          => true,
			'Scheduler'       => true,
		);

		$segments = explode( '_', $class );
		$segment  = isset( $segments[1] ) ? $segments[1] : $class;

		return isset( $migration_segments[ $segment ] ) && $migration_segments[ $segment ];
	}

	/**
	 * Determine if the class is one of our WP CLI classes.
	 *
	 * @since 3.0.0
	 *
	 * @param string $class The class name.
	 *
	 * @return bool
	 */
	protected static function is_class_cli( $class ) {
		static $cli_segments = array(
			'QueueRunner'                             => true,
			'Command'                                 => true,
			'ProgressBar'                             => true,
			'\Action_Scheduler\WP_CLI\Action_Command' => true,
			'\Action_Scheduler\WP_CLI\System_Command' => true,
		);

		$segments = explode( '_', $class );
		$segment  = isset( $segments[1] ) ? $segments[1] : $class;

		return isset( $cli_segments[ $segment ] ) && $cli_segments[ $segment ];
	}

	/**
	 * Clone.
	 */
	final public function __clone() {
		trigger_error( 'Singleton. No cloning allowed!', E_USER_ERROR ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
	}

	/**
	 * Wakeup.
	 */
	final public function __wakeup() {
		trigger_error( 'Singleton. No serialization allowed!', E_USER_ERROR ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
	}

	/**
	 * Construct.
	 */
	final private function __construct() {}

	/** Deprecated **/

	/**
	 * Get DateTime object.
	 *
	 * @param null|string $when     Date/time string.
	 * @param string      $timezone Timezone string.
	 */
	public static function get_datetime_object( $when = null, $timezone = 'UTC' ) {
		_deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
		return as_get_datetime_object( $when, $timezone );
	}

	/**
	 * Issue deprecated warning if an Action Scheduler function is called in the shutdown hook.
	 *
	 * @param string $function_name The name of the function being called.
	 * @deprecated 3.1.6.
	 */
	public static function check_shutdown_hook( $function_name ) {
		_deprecated_function( __FUNCTION__, '3.1.6' );
	}
}
PK     ŠŠU]î¢\¹98  98  O  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Store
 *
 * @codeCoverageIgnore
 */
abstract class ActionScheduler_Store extends ActionScheduler_Store_Deprecated {
	const STATUS_COMPLETE = 'complete';
	const STATUS_PENDING  = 'pending';
	const STATUS_RUNNING  = 'in-progress';
	const STATUS_FAILED   = 'failed';
	const STATUS_CANCELED = 'canceled';
	const DEFAULT_CLASS   = 'ActionScheduler_wpPostStore';

	/**
	 * ActionScheduler_Store instance.
	 *
	 * @var ActionScheduler_Store
	 */
	private static $store = null;

	/**
	 * Maximum length of args.
	 *
	 * @var int
	 */
	protected static $max_args_length = 191;

	/**
	 * Save action.
	 *
	 * @param ActionScheduler_Action $action Action to save.
	 * @param null|DateTime          $scheduled_date Optional Date of the first instance
	 *                                               to store. Otherwise uses the first date of the action's
	 *                                               schedule.
	 *
	 * @return int The action ID
	 */
	abstract public function save_action( ActionScheduler_Action $action, ?DateTime $scheduled_date = null );

	/**
	 * Get action.
	 *
	 * @param string $action_id Action ID.
	 *
	 * @return ActionScheduler_Action
	 */
	abstract public function fetch_action( $action_id );

	/**
	 * Find an action.
	 *
	 * Note: the query ordering changes based on the passed 'status' value.
	 *
	 * @param string $hook Action hook.
	 * @param array  $params Parameters of the action to find.
	 *
	 * @return string|null ID of the next action matching the criteria or NULL if not found.
	 */
	public function find_action( $hook, $params = array() ) {
		$params = wp_parse_args(
			$params,
			array(
				'args'   => null,
				'status' => self::STATUS_PENDING,
				'group'  => '',
			)
		);

		// These params are fixed for this method.
		$params['hook']     = $hook;
		$params['orderby']  = 'date';
		$params['per_page'] = 1;

		if ( ! empty( $params['status'] ) ) {
			if ( self::STATUS_PENDING === $params['status'] ) {
				$params['order'] = 'ASC'; // Find the next action that matches.
			} else {
				$params['order'] = 'DESC'; // Find the most recent action that matches.
			}
		}

		$results = $this->query_actions( $params );

		return empty( $results ) ? null : $results[0];
	}

	/**
	 * Query for action count or list of action IDs.
	 *
	 * @since 3.3.0 $query['status'] accepts array of statuses instead of a single status.
	 *
	 * @param array  $query {
	 *      Query filtering options.
	 *
	 *      @type string       $hook             The name of the actions. Optional.
	 *      @type string|array $status           The status or statuses of the actions. Optional.
	 *      @type array        $args             The args array of the actions. Optional.
	 *      @type DateTime     $date             The scheduled date of the action. Used in UTC timezone. Optional.
	 *      @type string       $date_compare     Operator for selecting by $date param. Accepted values are '!=', '>', '>=', '<', '<=', '='. Defaults to '<='.
	 *      @type DateTime     $modified         The last modified date of the action. Used in UTC timezone. Optional.
	 *      @type string       $modified_compare Operator for comparing $modified param. Accepted values are '!=', '>', '>=', '<', '<=', '='. Defaults to '<='.
	 *      @type string       $group            The group the action belongs to. Optional.
	 *      @type bool|int     $claimed          TRUE to find claimed actions, FALSE to find unclaimed actions, an int to find a specific claim ID. Optional.
	 *      @type int          $per_page         Number of results to return. Defaults to 5.
	 *      @type int          $offset           The query pagination offset. Defaults to 0.
	 *      @type int          $orderby          Accepted values are 'hook', 'group', 'modified', 'date' or 'none'. Defaults to 'date'.
	 *      @type string       $order            Accepted values are 'ASC' or 'DESC'. Defaults to 'ASC'.
	 * }
	 * @param string $query_type Whether to select or count the results. Default, select.
	 *
	 * @return string|array|null The IDs of actions matching the query. Null on failure.
	 */
	abstract public function query_actions( $query = array(), $query_type = 'select' );

	/**
	 * Run query to get a single action ID.
	 *
	 * @since 3.3.0
	 *
	 * @see ActionScheduler_Store::query_actions for $query arg usage but 'per_page' and 'offset' can't be used.
	 *
	 * @param array $query Query parameters.
	 *
	 * @return int|null
	 */
	public function query_action( $query ) {
		$query['per_page'] = 1;
		$query['offset']   = 0;
		$results           = $this->query_actions( $query );

		if ( empty( $results ) ) {
			return null;
		} else {
			return (int) $results[0];
		}
	}

	/**
	 * Get a count of all actions in the store, grouped by status
	 *
	 * @return array
	 */
	abstract public function action_counts();

	/**
	 * Get additional action counts.
	 *
	 * - add past-due actions
	 *
	 * @return array
	 */
	public function extra_action_counts() {
		$extra_actions = array();

		$pastdue_action_counts = (int) $this->query_actions(
			array(
				'status' => self::STATUS_PENDING,
				'date'   => as_get_datetime_object(),
			),
			'count'
		);

		if ( $pastdue_action_counts ) {
			$extra_actions['past-due'] = $pastdue_action_counts;
		}

		/**
		 * Allows 3rd party code to add extra action counts (used in filters in the list table).
		 *
		 * @since 3.5.0
		 * @param $extra_actions array Array with format action_count_identifier => action count.
		 */
		return apply_filters( 'action_scheduler_extra_action_counts', $extra_actions );
	}

	/**
	 * Cancel action.
	 *
	 * @param string $action_id Action ID.
	 */
	abstract public function cancel_action( $action_id );

	/**
	 * Delete action.
	 *
	 * @param string $action_id Action ID.
	 */
	abstract public function delete_action( $action_id );

	/**
	 * Get action's schedule or run timestamp.
	 *
	 * @param string $action_id Action ID.
	 *
	 * @return DateTime The date the action is schedule to run, or the date that it ran.
	 */
	abstract public function get_date( $action_id );


	/**
	 * Make a claim.
	 *
	 * @param int           $max_actions Maximum number of actions to claim.
	 * @param DateTime|null $before_date Claim only actions schedule before the given date. Defaults to now.
	 * @param array         $hooks       Claim only actions with a hook or hooks.
	 * @param string        $group       Claim only actions in the given group.
	 *
	 * @return ActionScheduler_ActionClaim
	 */
	abstract public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' );

	/**
	 * Get claim count.
	 *
	 * @return int
	 */
	abstract public function get_claim_count();

	/**
	 * Release the claim.
	 *
	 * @param ActionScheduler_ActionClaim $claim Claim object.
	 */
	abstract public function release_claim( ActionScheduler_ActionClaim $claim );

	/**
	 * Un-claim the action.
	 *
	 * @param string $action_id Action ID.
	 */
	abstract public function unclaim_action( $action_id );

	/**
	 * Mark action as failed.
	 *
	 * @param string $action_id Action ID.
	 */
	abstract public function mark_failure( $action_id );

	/**
	 * Log action's execution.
	 *
	 * @param string $action_id Actoin ID.
	 */
	abstract public function log_execution( $action_id );

	/**
	 * Mark action as complete.
	 *
	 * @param string $action_id Action ID.
	 */
	abstract public function mark_complete( $action_id );

	/**
	 * Get action's status.
	 *
	 * @param string $action_id Action ID.
	 * @return string
	 */
	abstract public function get_status( $action_id );

	/**
	 * Get action's claim ID.
	 *
	 * @param string $action_id Action ID.
	 * @return mixed
	 */
	abstract public function get_claim_id( $action_id );

	/**
	 * Find actions by claim ID.
	 *
	 * @param string $claim_id Claim ID.
	 * @return array
	 */
	abstract public function find_actions_by_claim_id( $claim_id );

	/**
	 * Validate SQL operator.
	 *
	 * @param string $comparison_operator Operator.
	 * @return string
	 */
	protected function validate_sql_comparator( $comparison_operator ) {
		if ( in_array( $comparison_operator, array( '!=', '>', '>=', '<', '<=', '=' ), true ) ) {
			return $comparison_operator;
		}

		return '=';
	}

	/**
	 * Get the time MySQL formatted date/time string for an action's (next) scheduled date.
	 *
	 * @param ActionScheduler_Action $action Action.
	 * @param null|DateTime          $scheduled_date Action's schedule date (optional).
	 * @return string
	 */
	protected function get_scheduled_date_string( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		$next = is_null( $scheduled_date ) ? $action->get_schedule()->get_date() : $scheduled_date;

		if ( ! $next ) {
			$next = date_create();
		}

		$next->setTimezone( new DateTimeZone( 'UTC' ) );

		return $next->format( 'Y-m-d H:i:s' );
	}

	/**
	 * Get the time MySQL formatted date/time string for an action's (next) scheduled date.
	 *
	 * @param ActionScheduler_Action|null $action Action.
	 * @param null|DateTime               $scheduled_date Action's scheduled date (optional).
	 * @return string
	 */
	protected function get_scheduled_date_string_local( ActionScheduler_Action $action, ?DateTime $scheduled_date = null ) {
		$next = is_null( $scheduled_date ) ? $action->get_schedule()->get_date() : $scheduled_date;

		if ( ! $next ) {
			$next = date_create();
		}

		ActionScheduler_TimezoneHelper::set_local_timezone( $next );
		return $next->format( 'Y-m-d H:i:s' );
	}

	/**
	 * Validate that we could decode action arguments.
	 *
	 * @param mixed $args      The decoded arguments.
	 * @param int   $action_id The action ID.
	 *
	 * @throws ActionScheduler_InvalidActionException When the decoded arguments are invalid.
	 */
	protected function validate_args( $args, $action_id ) {
		// Ensure we have an array of args.
		if ( ! is_array( $args ) ) {
			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id );
		}

		// Validate JSON decoding if possible.
		if ( function_exists( 'json_last_error' ) && JSON_ERROR_NONE !== json_last_error() ) {
			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id, $args );
		}
	}

	/**
	 * Validate a ActionScheduler_Schedule object.
	 *
	 * @param mixed $schedule  The unserialized ActionScheduler_Schedule object.
	 * @param int   $action_id The action ID.
	 *
	 * @throws ActionScheduler_InvalidActionException When the schedule is invalid.
	 */
	protected function validate_schedule( $schedule, $action_id ) {
		if ( empty( $schedule ) || ! is_a( $schedule, 'ActionScheduler_Schedule' ) ) {
			throw ActionScheduler_InvalidActionException::from_schedule( $action_id, $schedule );
		}
	}

	/**
	 * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4.
	 *
	 * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However,
	 * with custom tables, we use an indexed VARCHAR column instead.
	 *
	 * @param  ActionScheduler_Action $action Action to be validated.
	 * @throws InvalidArgumentException When json encoded args is too long.
	 */
	protected function validate_action( ActionScheduler_Action $action ) {
		if ( strlen( wp_json_encode( $action->get_args() ) ) > static::$max_args_length ) {
			// translators: %d is a number (maximum length of action arguments).
			throw new InvalidArgumentException( sprintf( __( 'ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler' ), static::$max_args_length ) );
		}
	}

	/**
	 * Cancel pending actions by hook.
	 *
	 * @since 3.0.0
	 *
	 * @param string $hook Hook name.
	 *
	 * @return void
	 */
	public function cancel_actions_by_hook( $hook ) {
		$action_ids = true;
		while ( ! empty( $action_ids ) ) {
			$action_ids = $this->query_actions(
				array(
					'hook'     => $hook,
					'status'   => self::STATUS_PENDING,
					'per_page' => 1000,
					'orderby'  => 'none',
				)
			);

			$this->bulk_cancel_actions( $action_ids );
		}
	}

	/**
	 * Cancel pending actions by group.
	 *
	 * @since 3.0.0
	 *
	 * @param string $group Group slug.
	 *
	 * @return void
	 */
	public function cancel_actions_by_group( $group ) {
		$action_ids = true;
		while ( ! empty( $action_ids ) ) {
			$action_ids = $this->query_actions(
				array(
					'group'    => $group,
					'status'   => self::STATUS_PENDING,
					'per_page' => 1000,
					'orderby'  => 'none',
				)
			);

			$this->bulk_cancel_actions( $action_ids );
		}
	}

	/**
	 * Cancel a set of action IDs.
	 *
	 * @since 3.0.0
	 *
	 * @param int[] $action_ids List of action IDs.
	 *
	 * @return void
	 */
	private function bulk_cancel_actions( $action_ids ) {
		foreach ( $action_ids as $action_id ) {
			$this->cancel_action( $action_id );
		}

		do_action( 'action_scheduler_bulk_cancel_actions', $action_ids );
	}

	/**
	 * Get status labels.
	 *
	 * @return array<string, string>
	 */
	public function get_status_labels() {
		return array(
			self::STATUS_COMPLETE => __( 'Complete', 'action-scheduler' ),
			self::STATUS_PENDING  => __( 'Pending', 'action-scheduler' ),
			self::STATUS_RUNNING  => __( 'In-progress', 'action-scheduler' ),
			self::STATUS_FAILED   => __( 'Failed', 'action-scheduler' ),
			self::STATUS_CANCELED => __( 'Canceled', 'action-scheduler' ),
		);
	}

	/**
	 * Check if there are any pending scheduled actions due to run.
	 *
	 * @return string
	 */
	public function has_pending_actions_due() {
		$pending_actions = $this->query_actions(
			array(
				'per_page' => 1,
				'date'     => as_get_datetime_object(),
				'status'   => self::STATUS_PENDING,
				'orderby'  => 'none',
			),
			'count'
		);

		return ! empty( $pending_actions );
	}

	/**
	 * Callable initialization function optionally overridden in derived classes.
	 */
	public function init() {}

	/**
	 * Callable function to mark an action as migrated optionally overridden in derived classes.
	 *
	 * @param int $action_id Action ID.
	 */
	public function mark_migrated( $action_id ) {}

	/**
	 * Get instance.
	 *
	 * @return ActionScheduler_Store
	 */
	public static function instance() {
		if ( empty( self::$store ) ) {
			$class       = apply_filters( 'action_scheduler_store_class', self::DEFAULT_CLASS );
			self::$store = new $class();
		}
		return self::$store;
	}
}
PK     ‹ŠU]ü3|Á	  Á	  Q  vendor/woocommerce/action-scheduler/classes/ActionScheduler_SystemInformation.phpnu „[µü¤        <?php

/**
 * Provides information about active and registered instances of Action Scheduler.
 */
class ActionScheduler_SystemInformation {
	/**
	 * Returns information about the plugin or theme which contains the current active version
	 * of Action Scheduler.
	 *
	 * If this cannot be determined, or if Action Scheduler is being loaded via some other
	 * method, then it will return an empty array. Otherwise, if populated, the array will
	 * look like the following:
	 *
	 *     [
	 *         'type' => 'plugin', # or 'theme'
	 *         'name' => 'Name',
	 *     ]
	 *
	 * @return array
	 */
	public static function active_source(): array {
		$plugins      = get_plugins();
		$plugin_files = array_keys( $plugins );

		foreach ( $plugin_files as $plugin_file ) {
			$plugin_path = trailingslashit( WP_PLUGIN_DIR ) . dirname( $plugin_file );
			$plugin_file = trailingslashit( WP_PLUGIN_DIR ) . $plugin_file;

			if ( 0 !== strpos( dirname( __DIR__ ), $plugin_path ) ) {
				continue;
			}

			$plugin_data = get_plugin_data( $plugin_file );

			if ( ! is_array( $plugin_data ) || empty( $plugin_data['Name'] ) ) {
				continue;
			}

			return array(
				'type' => 'plugin',
				'name' => $plugin_data['Name'],
			);
		}

		$themes = (array) search_theme_directories();

		foreach ( $themes as $slug => $data ) {
			$needle = trailingslashit( $data['theme_root'] ) . $slug . '/';

			if ( 0 !== strpos( __FILE__, $needle ) ) {
				continue;
			}

			$theme = wp_get_theme( $slug );

			if ( ! is_object( $theme ) || ! is_a( $theme, \WP_Theme::class ) ) {
				continue;
			}

			return array(
				'type' => 'theme',
				// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
				'name' => $theme->Name,
			);
		}

		return array();
	}

	/**
	 * Returns the directory path for the currently active installation of Action Scheduler.
	 *
	 * @return string
	 */
	public static function active_source_path(): string {
		return trailingslashit( dirname( __DIR__ ) );
	}

	/**
	 * Get registered sources.
	 *
	 * It is not always possible to obtain this information. For instance, if earlier versions (<=3.9.0) of
	 * Action Scheduler register themselves first, then the necessary data about registered sources will
	 * not be available.
	 *
	 * @return array<string, string>
	 */
	public static function get_sources() {
		$versions = ActionScheduler_Versions::instance();
		return method_exists( $versions, 'get_sources' ) ? $versions->get_sources() : array();
	}
}
PK     ‹ŠU]Š[’�Å  Å  V  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_NullSchedule
 */
class ActionScheduler_NullSchedule extends ActionScheduler_SimpleSchedule {

	/**
	 * DateTime instance.
	 *
	 * @var DateTime|null
	 */
	protected $scheduled_date;

	/**
	 * Make the $date param optional and default to null.
	 *
	 * @param null|DateTime $date The date & time to run the action.
	 */
	public function __construct( ?DateTime $date = null ) {
		$this->scheduled_date = null;
	}

	/**
	 * This schedule has no scheduled DateTime, so we need to override the parent __sleep().
	 *
	 * @return array
	 */
	public function __sleep() {
		return array();
	}

	/**
	 * Wakeup.
	 */
	public function __wakeup() {
		$this->scheduled_date = null;
	}
}
PK     ‹ŠU]Ã^ü?	  ?	  X  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_SimpleSchedule
 */
class ActionScheduler_SimpleSchedule extends ActionScheduler_Abstract_Schedule {

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null|DateTime
	 */
	private $timestamp = null;

	/**
	 * Calculate when this schedule should start after a given date & time using
	 * the number of seconds between recurrences.
	 *
	 * @param DateTime $after Timestamp.
	 *
	 * @return DateTime|null
	 */
	public function calculate_next( DateTime $after ) {
		return null;
	}

	/**
	 * Schedule is not recurring.
	 *
	 * @return bool
	 */
	public function is_recurring() {
		return false;
	}

	/**
	 * Serialize schedule with data required prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
	 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0
	 * aligned properties and property names for better inheritance. To guard against the
	 * scheduled date for single actions always being seen as "now" if downgrading to
	 * Action Scheduler < 3.0.0, we need to also store the data with the old property names
	 * so if it's unserialized in AS < 3.0, the schedule doesn't end up with a null recurrence.
	 *
	 * @return array
	 */
	public function __sleep() {

		$sleep_params = parent::__sleep();

		$this->timestamp = $this->scheduled_timestamp;

		return array_merge(
			$sleep_params,
			array(
				'timestamp',
			)
		);
	}

	/**
	 * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
	 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0
	 * aligned properties and property names for better inheritance. To maintain backward
	 * compatibility with schedules serialized and stored prior to 3.0, we need to correctly
	 * map the old property names with matching visibility.
	 */
	public function __wakeup() {

		if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->timestamp ) ) {
			$this->scheduled_timestamp = $this->timestamp;
			unset( $this->timestamp );
		}
		parent::__wakeup();
	}
}
PK     ‹ŠU]¤þ‘o  o  Z  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_SimpleSchedule
 */
class ActionScheduler_CanceledSchedule extends ActionScheduler_SimpleSchedule {

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null
	 */
	private $timestamp = null;

	/**
	 * Calculate when the next instance of this schedule would run based on a given date & time.
	 *
	 * @param DateTime $after Timestamp.
	 *
	 * @return DateTime|null
	 */
	public function calculate_next( DateTime $after ) {
		return null;
	}

	/**
	 * Cancelled actions should never have a next schedule, even if get_next()
	 * is called with $after < $this->scheduled_date.
	 *
	 * @param DateTime $after Timestamp.
	 * @return DateTime|null
	 */
	public function get_next( DateTime $after ) {
		return null;
	}

	/**
	 * Action is not recurring.
	 *
	 * @return bool
	 */
	public function is_recurring() {
		return false;
	}

	/**
	 * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
	 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0
	 * aligned properties and property names for better inheritance. To maintain backward
	 * compatibility with schedules serialized and stored prior to 3.0, we need to correctly
	 * map the old property names with matching visibility.
	 */
	public function __wakeup() {
		if ( ! is_null( $this->timestamp ) ) {
			$this->scheduled_timestamp = $this->timestamp;
			unset( $this->timestamp );
		}
		parent::__wakeup();
	}
}
PK     ‹ŠU]›¾è{I
  I
  Z  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_IntervalSchedule
 */
class ActionScheduler_IntervalSchedule extends ActionScheduler_Abstract_RecurringSchedule implements ActionScheduler_Schedule {

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null
	 */
	private $start_timestamp = null;

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null
	 */
	private $interval_in_seconds = null;

	/**
	 * Calculate when this schedule should start after a given date & time using
	 * the number of seconds between recurrences.
	 *
	 * @param DateTime $after Timestamp.
	 * @return DateTime
	 */
	protected function calculate_next( DateTime $after ) {
		$after->modify( '+' . (int) $this->get_recurrence() . ' seconds' );
		return $after;
	}

	/**
	 * Schedule interval in seconds.
	 *
	 * @return int
	 */
	public function interval_in_seconds() {
		_deprecated_function( __METHOD__, '3.0.0', '(int)ActionScheduler_Abstract_RecurringSchedule::get_recurrence()' );
		return (int) $this->get_recurrence();
	}

	/**
	 * Serialize interval schedules with data required prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, recurring schedules used different property names to
	 * refer to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0
	 * aligned properties and property names for better inheritance. To guard against the
	 * possibility of infinite loops if downgrading to Action Scheduler < 3.0.0, we need to
	 * also store the data with the old property names so if it's unserialized in AS < 3.0,
	 * the schedule doesn't end up with a null/false/0 recurrence.
	 *
	 * @return array
	 */
	public function __sleep() {

		$sleep_params = parent::__sleep();

		$this->start_timestamp     = $this->scheduled_timestamp;
		$this->interval_in_seconds = $this->recurrence;

		return array_merge(
			$sleep_params,
			array(
				'start_timestamp',
				'interval_in_seconds',
			)
		);
	}

	/**
	 * Unserialize interval schedules serialized/stored prior to AS 3.0.0
	 *
	 * For more background, @see ActionScheduler_Abstract_RecurringSchedule::__wakeup().
	 */
	public function __wakeup() {
		if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->start_timestamp ) ) {
			$this->scheduled_timestamp = $this->start_timestamp;
			unset( $this->start_timestamp );
		}

		if ( is_null( $this->recurrence ) && ! is_null( $this->interval_in_seconds ) ) {
			$this->recurrence = $this->interval_in_seconds;
			unset( $this->interval_in_seconds );
		}
		parent::__wakeup();
	}
}
PK     ‹ŠU]¾3<wÈ  È  R  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_Schedule
 */
interface ActionScheduler_Schedule {
	/**
	 * Get the date & time this schedule was created to run, or calculate when it should be run
	 * after a given date & time.
	 *
	 * @param null|DateTime $after Timestamp.
	 * @return DateTime|null
	 */
	public function next( ?DateTime $after = null );

	/**
	 * Identify the schedule as (not) recurring.
	 *
	 * @return bool
	 */
	public function is_recurring();
}
PK     ŒŠU]k¬È>÷  ÷  V  vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.phpnu „[µü¤        <?php

/**
 * Class ActionScheduler_CronSchedule
 */
class ActionScheduler_CronSchedule extends ActionScheduler_Abstract_RecurringSchedule implements ActionScheduler_Schedule {

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null
	 */
	private $start_timestamp = null;

	/**
	 * Deprecated property @see $this->__wakeup() for details.
	 *
	 * @var null
	 */
	private $cron = null;

	/**
	 * Wrapper for parent constructor to accept a cron expression string and map it to a CronExpression for this
	 * objects $recurrence property.
	 *
	 * @param DateTime              $start The date & time to run the action at or after. If $start aligns with the CronSchedule passed via $recurrence, it will be used. If it does not align, the first matching date after it will be used.
	 * @param CronExpression|string $recurrence The CronExpression used to calculate the schedule's next instance.
	 * @param DateTime|null         $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
	 */
	public function __construct( DateTime $start, $recurrence, ?DateTime $first = null ) {
		if ( ! is_a( $recurrence, 'CronExpression' ) ) {
			$recurrence = CronExpression::factory( $recurrence );
		}

		// For backward compatibility, we need to make sure the date is set to the first matching cron date, not whatever date is passed in. Importantly, by passing true as the 3rd param, if $start matches the cron expression, then it will be used. This was previously handled in the now deprecated next() method.
		$date = $recurrence->getNextRunDate( $start, 0, true );

		// parent::__construct() will set this to $date by default, but that may be different to $start now.
		$first = empty( $first ) ? $start : $first;

		parent::__construct( $date, $recurrence, $first );
	}

	/**
	 * Calculate when an instance of this schedule would start based on a given
	 * date & time using its the CronExpression.
	 *
	 * @param DateTime $after Timestamp.
	 * @return DateTime
	 */
	protected function calculate_next( DateTime $after ) {
		return $this->recurrence->getNextRunDate( $after, 0, false );
	}

	/**
	 * Get the schedule's recurrence.
	 *
	 * @return string
	 */
	public function get_recurrence() {
		return strval( $this->recurrence );
	}

	/**
	 * Serialize cron schedules with data required prior to AS 3.0.0
	 *
	 * Prior to Action Scheduler 3.0.0, recurring schedules used different property names to
	 * refer to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
	 * was the same as ActionScheduler_SimpleSchedule::timestamp. Action Scheduler 3.0.0
	 * aligned properties and property names for better inheritance. To guard against the
	 * possibility of infinite loops if downgrading to Action Scheduler < 3.0.0, we need to
	 * also store the data with the old property names so if it's unserialized in AS < 3.0,
	 * the schedule doesn't end up with a null recurrence.
	 *
	 * @return array
	 */
	public function __sleep() {

		$sleep_params = parent::__sleep();

		$this->start_timestamp = $this->scheduled_timestamp;
		$this->cron            = $this->recurrence;

		return array_merge(
			$sleep_params,
			array(
				'start_timestamp',
				'cron',
			)
		);
	}

	/**
	 * Unserialize cron schedules serialized/stored prior to AS 3.0.0
	 *
	 * For more background, @see ActionScheduler_Abstract_RecurringSchedule::__wakeup().
	 */
	public function __wakeup() {
		if ( is_null( $this->scheduled_timestamp ) && ! is_null( $this->start_timestamp ) ) {
			$this->scheduled_timestamp = $this->start_timestamp;
			unset( $this->start_timestamp );
		}

		if ( is_null( $this->recurrence ) && ! is_null( $this->cron ) ) {
			$this->recurrence = $this->cron;
			unset( $this->cron );
		}
		parent::__wakeup();
	}
}

PK     ŒŠU]çs  s  X  vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.phpnu „[µü¤        <?php

defined( 'ABSPATH' ) || exit;

/**
 * ActionScheduler_AsyncRequest_QueueRunner class.
 */
class ActionScheduler_AsyncRequest_QueueRunner extends WP_Async_Request {

	/**
	 * Data store for querying actions
	 *
	 * @var ActionScheduler_Store
	 */
	protected $store;

	/**
	 * Prefix for ajax hooks
	 *
	 * @var string
	 */
	protected $prefix = 'as';

	/**
	 * Action for ajax hooks
	 *
	 * @var string
	 */
	protected $action = 'async_request_queue_runner';

	/**
	 * Initiate new async request.
	 *
	 * @param ActionScheduler_Store $store Store object.
	 */
	public function __construct( ActionScheduler_Store $store ) {
		parent::__construct();
		$this->store = $store;
	}

	/**
	 * Handle async requests
	 *
	 * Run a queue, and maybe dispatch another async request to run another queue
	 * if there are still pending actions after completing a queue in this request.
	 */
	protected function handle() {
		do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context.

		$sleep_seconds = $this->get_sleep_seconds();

		if ( $sleep_seconds ) {
			sleep( $sleep_seconds );
		}

		$this->maybe_dispatch();
	}

	/**
	 * If the async request runner is needed and allowed to run, dispatch a request.
	 */
	public function maybe_dispatch() {
		if ( ! $this->allow() ) {
			return;
		}

		$this->dispatch();
		ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request();
	}

	/**
	 * Only allow async requests when needed.
	 *
	 * Also allow 3rd party code to disable running actions via async requests.
	 */
	protected function allow() {

		if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) {
			$allow = false;
		} else {
			$allow = true;
		}

		return apply_filters( 'action_scheduler_allow_async_request_runner', $allow );
	}

	/**
	 * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that.
	 */
	protected function get_sleep_seconds() {
		return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this );
	}
}
PK     ŒŠU]w°¡u‰  ‰  N  vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.phpnu „[µü¤        <?php

use Action_Scheduler\Migration\Controller;

/**
 * Class ActionScheduler_DataController
 *
 * The main plugin/initialization class for the data stores.
 *
 * Responsible for hooking everything up with WordPress.
 *
 * @package Action_Scheduler
 *
 * @since 3.0.0
 */
class ActionScheduler_DataController {
	/** Action data store class name. */
	const DATASTORE_CLASS = 'ActionScheduler_DBStore';

	/** Logger data store class name. */
	const LOGGER_CLASS = 'ActionScheduler_DBLogger';

	/** Migration status option name. */
	const STATUS_FLAG = 'action_scheduler_migration_status';

	/** Migration status option value. */
	const STATUS_COMPLETE = 'complete';

	/** Migration minimum required PHP version. */
	const MIN_PHP_VERSION = '5.5';

	/**
	 * Instance.
	 *
	 * @var ActionScheduler_DataController
	 */
	private static $instance;

	/**
	 * Sleep time in seconds.
	 *
	 * @var int
	 */
	private static $sleep_time = 0;

	/**
	 * Tick count required for freeing memory.
	 *
	 * @var int
	 */
	private static $free_ticks = 50;

	/**
	 * Get a flag indicating whether the migration environment dependencies are met.
	 *
	 * @return bool
	 */
	public static function dependencies_met() {
		$php_support = version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
		return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true );
	}

	/**
	 * Get a flag indicating whether the migration is complete.
	 *
	 * @return bool Whether the flag has been set marking the migration as complete
	 */
	public static function is_migration_complete() {
		return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE;
	}

	/**
	 * Mark the migration as complete.
	 */
	public static function mark_migration_complete() {
		update_option( self::STATUS_FLAG, self::STATUS_COMPLETE );
	}

	/**
	 * Unmark migration when a plugin is de-activated. Will not work in case of silent activation, for example in an update.
	 * We do this to mitigate the bug of lost actions which happens if there was an AS 2.x to AS 3.x migration in the past, but that plugin is now
	 * deactivated and the site was running on AS 2.x again.
	 */
	public static function mark_migration_incomplete() {
		delete_option( self::STATUS_FLAG );
	}

	/**
	 * Set the action store class name.
	 *
	 * @param string $class Classname of the store class.
	 *
	 * @return string
	 */
	public static function set_store_class( $class ) {
		return self::DATASTORE_CLASS;
	}

	/**
	 * Set the action logger class name.
	 *
	 * @param string $class Classname of the logger class.
	 *
	 * @return string
	 */
	public static function set_logger_class( $class ) {
		return self::LOGGER_CLASS;
	}

	/**
	 * Set the sleep time in seconds.
	 *
	 * @param integer $sleep_time The number of seconds to pause before resuming operation.
	 */
	public static function set_sleep_time( $sleep_time ) {
		self::$sleep_time = (int) $sleep_time;
	}

	/**
	 * Set the tick count required for freeing memory.
	 *
	 * @param integer $free_ticks The number of ticks to free memory on.
	 */
	public static function set_free_ticks( $free_ticks ) {
		self::$free_ticks = (int) $free_ticks;
	}

	/**
	 * Free memory if conditions are met.
	 *
	 * @param int $ticks Current tick count.
	 */
	public static function maybe_free_memory( $ticks ) {
		if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) {
			self::free_memory();
		}
	}

	/**
	 * Reduce memory footprint by clearing the database query and object caches.
	 */
	public static function free_memory() {
		if ( 0 < self::$sleep_time ) {
			/* translators: %d: amount of time */
			\WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) );
			sleep( self::$sleep_time );
		}

		\WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) );

		/**
		 * Globals.
		 *
		 * @var $wpdb            \wpdb
		 * @var $wp_object_cache \WP_Object_Cache
		 */
		global $wpdb, $wp_object_cache;

		$wpdb->queries = array();

		if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) {
			return;
		}

		// Not all drop-ins support these props, however, there may be existing installations that rely on these being cleared.
		if ( property_exists( $wp_object_cache, 'group_ops' ) ) {
			$wp_object_cache->group_ops = array();
		}
		if ( property_exists( $wp_object_cache, 'stats' ) ) {
			$wp_object_cache->stats = array();
		}
		if ( property_exists( $wp_object_cache, 'memcache_debug' ) ) {
			$wp_object_cache->memcache_debug = array();
		}
		if ( property_exists( $wp_object_cache, 'cache' ) ) {
			$wp_object_cache->cache = array();
		}

		if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
			call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important!
		}
	}

	/**
	 * Connect to table datastores if migration is complete.
	 * Otherwise, proceed with the migration if the dependencies have been met.
	 */
	public static function init() {
		if ( self::is_migration_complete() ) {
			add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 );
			add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 );
			add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) );
		} elseif ( self::dependencies_met() ) {
			Controller::init();
		}

		add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) );
	}

	/**
	 * Singleton factory.
	 */
	public static function instance() {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new static();
		}

		return self::$instance;
	}
}
PK     ŒŠU]f¹g9M  M  1  vendor/woocommerce/action-scheduler/functions.phpnu „[µü¤        <?php
/**
 * General API functions for scheduling actions
 *
 * @package ActionScheduler.
 */

/**
 * Enqueue an action to run one time, as soon as possible
 *
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
 *
 * @return int The action ID. Zero if there was an error scheduling the action.
 */
function as_enqueue_async_action( $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return 0;
	}

	/**
	 * Provides an opportunity to short-circuit the default process for enqueuing async
	 * actions.
	 *
	 * Returning a value other than null from the filter will short-circuit the normal
	 * process. The expectation in such a scenario is that callbacks will return an integer
	 * representing the enqueued action ID (enqueued using some alternative process) or else
	 * zero.
	 *
	 * @param int|null $pre_option The value to return instead of the option value.
	 * @param string   $hook       Action hook.
	 * @param array    $args       Action arguments.
	 * @param string   $group      Action group.
	 * @param int      $priority   Action priority.
	 * @param bool     $unique     Unique action.
	 */
	$pre = apply_filters( 'pre_as_enqueue_async_action', null, $hook, $args, $group, $priority, $unique );
	if ( null !== $pre ) {
		return is_int( $pre ) ? $pre : 0;
	}

	return ActionScheduler::factory()->create(
		array(
			'type'      => 'async',
			'hook'      => $hook,
			'arguments' => $args,
			'group'     => $group,
			'unique'    => $unique,
			'priority'  => $priority,
		)
	);
}

/**
 * Schedule an action to run one time
 *
 * @param int    $timestamp When the job will run.
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
 *
 * @return int The action ID. Zero if there was an error scheduling the action.
 */
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return 0;
	}

	/**
	 * Provides an opportunity to short-circuit the default process for enqueuing single
	 * actions.
	 *
	 * Returning a value other than null from the filter will short-circuit the normal
	 * process. The expectation in such a scenario is that callbacks will return an integer
	 * representing the scheduled action ID (scheduled using some alternative process) or else
	 * zero.
	 *
	 * @param int|null $pre_option The value to return instead of the option value.
	 * @param int      $timestamp  When the action will run.
	 * @param string   $hook       Action hook.
	 * @param array    $args       Action arguments.
	 * @param string   $group      Action group.
	 * @param int      $priorities Action priority.
	 * @param bool     $unique     Unique action.
	 */
	$pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority, $unique );
	if ( null !== $pre ) {
		return is_int( $pre ) ? $pre : 0;
	}

	return ActionScheduler::factory()->create(
		array(
			'type'      => 'single',
			'hook'      => $hook,
			'arguments' => $args,
			'when'      => $timestamp,
			'group'     => $group,
			'unique'    => $unique,
			'priority'  => $priority,
		)
	);
}

/**
 * Schedule a recurring action
 *
 * @param int    $timestamp When the first instance of the job will run.
 * @param int    $interval_in_seconds How long to wait between runs.
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
 *
 * @return int The action ID. Zero if there was an error scheduling the action.
 */
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return 0;
	}

	$interval = (int) $interval_in_seconds;

	// We expect an integer and allow it to be passed using float and string types, but otherwise
	// should reject unexpected values.
	// phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
	if ( ! is_numeric( $interval_in_seconds ) || $interval_in_seconds != $interval ) {
		_doing_it_wrong(
			__METHOD__,
			sprintf(
				/* translators: 1: provided value 2: provided type. */
				esc_html__( 'An integer was expected but "%1$s" (%2$s) was received.', 'action-scheduler' ),
				esc_html( $interval_in_seconds ),
				esc_html( gettype( $interval_in_seconds ) )
			),
			'3.6.0'
		);

		return 0;
	}

	/**
	 * Provides an opportunity to short-circuit the default process for enqueuing recurring
	 * actions.
	 *
	 * Returning a value other than null from the filter will short-circuit the normal
	 * process. The expectation in such a scenario is that callbacks will return an integer
	 * representing the scheduled action ID (scheduled using some alternative process) or else
	 * zero.
	 *
	 * @param int|null $pre_option          The value to return instead of the option value.
	 * @param int      $timestamp           When the action will run.
	 * @param int      $interval_in_seconds How long to wait between runs.
	 * @param string   $hook                Action hook.
	 * @param array    $args                Action arguments.
	 * @param string   $group               Action group.
	 * @param int      $priority            Action priority.
	 * @param bool     $unique              Unique action.
	 */
	$pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority, $unique );
	if ( null !== $pre ) {
		return is_int( $pre ) ? $pre : 0;
	}

	return ActionScheduler::factory()->create(
		array(
			'type'      => 'recurring',
			'hook'      => $hook,
			'arguments' => $args,
			'when'      => $timestamp,
			'pattern'   => $interval_in_seconds,
			'group'     => $group,
			'unique'    => $unique,
			'priority'  => $priority,
		)
	);
}

/**
 * Schedule an action that recurs on a cron-like schedule.
 *
 * @param int    $timestamp The first instance of the action will be scheduled
 *           to run at a time calculated after this timestamp matching the cron
 *           expression. This can be used to delay the first instance of the action.
 * @param string $schedule A cron-link schedule string.
 * @see http://en.wikipedia.org/wiki/Cron
 *   *    *    *    *    *    *
 *   â”¬    â”¬    â”¬    â”¬    â”¬    â”¬
 *   |    |    |    |    |    |
 *   |    |    |    |    |    + year [optional]
 *   |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
 *   |    |    |    +---------- month (1 - 12)
 *   |    |    +--------------- day of month (1 - 31)
 *   |    +-------------------- hour (0 - 23)
 *   +------------------------- min (0 - 59)
 * @param string $hook The hook to trigger.
 * @param array  $args Arguments to pass when the hook triggers.
 * @param string $group The group to assign this job to.
 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
 *
 * @return int The action ID. Zero if there was an error scheduling the action.
 */
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return 0;
	}

	/**
	 * Provides an opportunity to short-circuit the default process for enqueuing cron
	 * actions.
	 *
	 * Returning a value other than null from the filter will short-circuit the normal
	 * process. The expectation in such a scenario is that callbacks will return an integer
	 * representing the scheduled action ID (scheduled using some alternative process) or else
	 * zero.
	 *
	 * @param int|null $pre_option The value to return instead of the option value.
	 * @param int      $timestamp  When the action will run.
	 * @param string   $schedule   Cron-like schedule string.
	 * @param string   $hook       Action hook.
	 * @param array    $args       Action arguments.
	 * @param string   $group      Action group.
	 * @param int      $priority   Action priority.
	 * @param bool     $unique     Unique action.
	 */
	$pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority, $unique );
	if ( null !== $pre ) {
		return is_int( $pre ) ? $pre : 0;
	}

	return ActionScheduler::factory()->create(
		array(
			'type'      => 'cron',
			'hook'      => $hook,
			'arguments' => $args,
			'when'      => $timestamp,
			'pattern'   => $schedule,
			'group'     => $group,
			'unique'    => $unique,
			'priority'  => $priority,
		)
	);
}

/**
 * Cancel the next occurrence of a scheduled action.
 *
 * While only the next instance of a recurring or cron action is unscheduled by this method, that will also prevent
 * all future instances of that recurring or cron action from being run. Recurring and cron actions are scheduled in
 * a sequence instead of all being scheduled at once. Each successive occurrence of a recurring action is scheduled
 * only after the former action is run. If the next instance is never run, because it's unscheduled by this function,
 * then the following instance will never be scheduled (or exist), which is effectively the same as being unscheduled
 * by this method also.
 *
 * @param string $hook The hook that the job will trigger.
 * @param array  $args Args that would have been passed to the job.
 * @param string $group The group the job is assigned to.
 *
 * @return int|null The scheduled action ID if a scheduled action was found, or null if no matching action found.
 */
function as_unschedule_action( $hook, $args = array(), $group = '' ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return 0;
	}
	$params = array(
		'hook'    => $hook,
		'status'  => ActionScheduler_Store::STATUS_PENDING,
		'orderby' => 'date',
		'order'   => 'ASC',
		'group'   => $group,
	);
	if ( is_array( $args ) ) {
		$params['args'] = $args;
	}

	$action_id = ActionScheduler::store()->query_action( $params );

	if ( $action_id ) {
		try {
			ActionScheduler::store()->cancel_action( $action_id );
		} catch ( Exception $exception ) {
			ActionScheduler::logger()->log(
				$action_id,
				sprintf(
					/* translators: %1$s is the name of the hook to be cancelled, %2$s is the exception message. */
					__( 'Caught exception while cancelling action "%1$s": %2$s', 'action-scheduler' ),
					$hook,
					$exception->getMessage()
				)
			);

			$action_id = null;
		}
	}

	return $action_id;
}

/**
 * Cancel all occurrences of a scheduled action.
 *
 * @param string $hook The hook that the job will trigger.
 * @param array  $args Args that would have been passed to the job.
 * @param string $group The group the job is assigned to.
 */
function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return;
	}
	if ( empty( $args ) ) {
		if ( ! empty( $hook ) && empty( $group ) ) {
			ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook );
			return;
		}
		if ( ! empty( $group ) && empty( $hook ) ) {
			ActionScheduler_Store::instance()->cancel_actions_by_group( $group );
			return;
		}
	}
	do {
		$unscheduled_action = as_unschedule_action( $hook, $args, $group );
	} while ( ! empty( $unscheduled_action ) );
}

/**
 * Check if there is an existing action in the queue with a given hook, args and group combination.
 *
 * An action in the queue could be pending, in-progress or async. If the is pending for a time in
 * future, its scheduled date will be returned as a timestamp. If it is currently being run, or an
 * async action sitting in the queue waiting to be processed, in which case boolean true will be
 * returned. Or there may be no async, in-progress or pending action for this hook, in which case,
 * boolean false will be the return value.
 *
 * @param string $hook Name of the hook to search for.
 * @param array  $args Arguments of the action to be searched.
 * @param string $group Group of the action to be searched.
 *
 * @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action.
 */
function as_next_scheduled_action( $hook, $args = null, $group = '' ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return false;
	}

	$params = array(
		'hook'    => $hook,
		'orderby' => 'date',
		'order'   => 'ASC',
		'group'   => $group,
	);

	if ( is_array( $args ) ) {
		$params['args'] = $args;
	}

	$params['status'] = ActionScheduler_Store::STATUS_RUNNING;
	$action_id        = ActionScheduler::store()->query_action( $params );
	if ( $action_id ) {
		return true;
	}

	$params['status'] = ActionScheduler_Store::STATUS_PENDING;
	$action_id        = ActionScheduler::store()->query_action( $params );
	if ( null === $action_id ) {
		return false;
	}

	$action         = ActionScheduler::store()->fetch_action( $action_id );
	$scheduled_date = $action->get_schedule()->get_date();
	if ( $scheduled_date ) {
		return (int) $scheduled_date->format( 'U' );
	} elseif ( null === $scheduled_date ) { // pending async action with NullSchedule.
		return true;
	}

	return false;
}

/**
 * Check if there is a scheduled action in the queue but more efficiently than as_next_scheduled_action().
 *
 * It's recommended to use this function when you need to know whether a specific action is currently scheduled
 * (pending or in-progress).
 *
 * @since 3.3.0
 *
 * @param string $hook  The hook of the action.
 * @param array  $args  Args that have been passed to the action. Null will matches any args.
 * @param string $group The group the job is assigned to.
 *
 * @return bool True if a matching action is pending or in-progress, false otherwise.
 */
function as_has_scheduled_action( $hook, $args = null, $group = '' ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return false;
	}

	$query_args = array(
		'hook'    => $hook,
		'status'  => array( ActionScheduler_Store::STATUS_RUNNING, ActionScheduler_Store::STATUS_PENDING ),
		'group'   => $group,
		'orderby' => 'none',
	);

	if ( null !== $args ) {
		$query_args['args'] = $args;
	}

	$action_id = ActionScheduler::store()->query_action( $query_args );

	return null !== $action_id;
}

/**
 * Find scheduled actions
 *
 * @param array  $args Possible arguments, with their default values.
 *         'hook' => '' - the name of the action that will be triggered.
 *         'args' => NULL - the args array that will be passed with the action.
 *         'date' => NULL - the scheduled date of the action. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone.
 *         'date_compare' => '<=' - operator for testing "date". accepted values are '!=', '>', '>=', '<', '<=', '='.
 *         'modified' => NULL - the date the action was last updated. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime(). Used in UTC timezone.
 *         'modified_compare' => '<=' - operator for testing "modified". accepted values are '!=', '>', '>=', '<', '<=', '='.
 *         'group' => '' - the group the action belongs to.
 *         'status' => '' - ActionScheduler_Store::STATUS_COMPLETE or ActionScheduler_Store::STATUS_PENDING.
 *         'claimed' => NULL - TRUE to find claimed actions, FALSE to find unclaimed actions, a string to find a specific claim ID.
 *         'per_page' => 5 - Number of results to return.
 *         'offset' => 0.
 *         'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', 'date' or 'none'.
 *         'order' => 'ASC'.
 *
 * @param string $return_format OBJECT, ARRAY_A, or ids.
 *
 * @return array
 */
function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
	if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
		return array();
	}
	$store = ActionScheduler::store();
	foreach ( array( 'date', 'modified' ) as $key ) {
		if ( isset( $args[ $key ] ) ) {
			$args[ $key ] = as_get_datetime_object( $args[ $key ] );
		}
	}
	$ids = $store->query_actions( $args );

	if ( 'ids' === $return_format || 'int' === $return_format ) {
		return $ids;
	}

	$actions = array();
	foreach ( $ids as $action_id ) {
		$actions[ $action_id ] = $store->fetch_action( $action_id );
	}

	if ( ARRAY_A === $return_format ) {
		foreach ( $actions as $action_id => $action_object ) {
			$actions[ $action_id ] = get_object_vars( $action_object );
		}
	}

	return $actions;
}

/**
 * Helper function to create an instance of DateTime based on a given
 * string and timezone. By default, will return the current date/time
 * in the UTC timezone.
 *
 * Needed because new DateTime() called without an explicit timezone
 * will create a date/time in PHP's timezone, but we need to have
 * assurance that a date/time uses the right timezone (which we almost
 * always want to be UTC), which means we need to always include the
 * timezone when instantiating datetimes rather than leaving it up to
 * the PHP default.
 *
 * @param mixed  $date_string A date/time string. Valid formats are explained in http://php.net/manual/en/datetime.formats.php.
 * @param string $timezone A timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available http://php.net/manual/en/timezones.php.
 *
 * @return ActionScheduler_DateTime
 */
function as_get_datetime_object( $date_string = null, $timezone = 'UTC' ) {
	if ( is_object( $date_string ) && $date_string instanceof DateTime ) {
		$date = new ActionScheduler_DateTime( $date_string->format( 'Y-m-d H:i:s' ), new DateTimeZone( $timezone ) );
	} elseif ( is_numeric( $date_string ) ) {
		$date = new ActionScheduler_DateTime( '@' . $date_string, new DateTimeZone( $timezone ) );
	} else {
		$date = new ActionScheduler_DateTime( null === $date_string ? 'now' : $date_string, new DateTimeZone( $timezone ) );
	}
	return $date;
}

/**
 * Check if a specific feature is supported by the current version of Action Scheduler.
 *
 * @since 3.9.3
 *
 * @param string $feature The feature to check support for.
 *
 * @return bool True if the feature is supported, false otherwise.
 */
function as_supports( string $feature ): bool {
	$supported_features = array( 'ensure_recurring_actions_hook' );

	return in_array( $feature, $supported_features, true );
}
PK     ŒŠU] =g—M‰  M‰  /  vendor/woocommerce/action-scheduler/license.txtnu „[µü¤                            GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
PK     ŒŠU]_Wl†  †  <  vendor/woocommerce/action-scheduler/lib/WP_Async_Request.phpnu „[µü¤        <?php
/**
 * WP Async Request
 *
 * @package WP-Background-Processing
 */

/*
Library URI: https://github.com/deliciousbrains/wp-background-processing/blob/fbbc56f2480910d7959972ec9ec0819a13c6150a/classes/wp-async-request.php
Author: Delicious Brains Inc.
Author URI: https://deliciousbrains.com/
License: GNU General Public License v2.0
License URI: https://github.com/deliciousbrains/wp-background-processing/commit/126d7945dd3d39f39cb6488ca08fe1fb66cb351a
*/

if ( ! class_exists( 'WP_Async_Request' ) ) {

	/**
	 * Abstract WP_Async_Request class.
	 *
	 * @abstract
	 */
	abstract class WP_Async_Request {

		/**
		 * Prefix
		 *
		 * (default value: 'wp')
		 *
		 * @var string
		 */
		protected $prefix = 'wp';

		/**
		 * Action
		 *
		 * (default value: 'async_request')
		 *
		 * @var string
		 */
		protected $action = 'async_request';

		/**
		 * Identifier
		 *
		 * @var mixed
		 */
		protected $identifier;

		/**
		 * Data
		 *
		 * (default value: array())
		 *
		 * @var array
		 */
		protected $data = array();

		/**
		 * Initiate new async request
		 */
		public function __construct() {
			$this->identifier = $this->prefix . '_' . $this->action;

			add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
			add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
		}

		/**
		 * Set data used during the request
		 *
		 * @param array $data Data.
		 *
		 * @return $this
		 */
		public function data( $data ) {
			$this->data = $data;

			return $this;
		}

		/**
		 * Dispatch the async request
		 *
		 * @return array|WP_Error
		 */
		public function dispatch() {
			$url  = add_query_arg( $this->get_query_args(), $this->get_query_url() );
			$args = $this->get_post_args();

			return wp_remote_post( esc_url_raw( $url ), $args );
		}

		/**
		 * Get query args
		 *
		 * @return array
		 */
		protected function get_query_args() {
			if ( property_exists( $this, 'query_args' ) ) {
				return $this->query_args;
			}

			$args = array(
				'action' => $this->identifier,
				'nonce'  => wp_create_nonce( $this->identifier ),
			);

			/**
			 * Filters the post arguments used during an async request.
			 *
			 * @param array $url
			 */
			return apply_filters( $this->identifier . '_query_args', $args );
		}

		/**
		 * Get query URL
		 *
		 * @return string
		 */
		protected function get_query_url() {
			if ( property_exists( $this, 'query_url' ) ) {
				return $this->query_url;
			}

			$url = admin_url( 'admin-ajax.php' );

			/**
			 * Filters the post arguments used during an async request.
			 *
			 * @param string $url
			 */
			return apply_filters( $this->identifier . '_query_url', $url );
		}

		/**
		 * Get post args
		 *
		 * @return array
		 */
		protected function get_post_args() {
			if ( property_exists( $this, 'post_args' ) ) {
				return $this->post_args;
			}

			$args = array(
				'timeout'   => 0.01,
				'blocking'  => false,
				'body'      => $this->data,
				'cookies'   => $_COOKIE,
				'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
			);

			/**
			 * Filters the post arguments used during an async request.
			 *
			 * @param array $args
			 */
			return apply_filters( $this->identifier . '_post_args', $args );
		}

		/**
		 * Maybe handle
		 *
		 * Check for correct nonce and pass to handler.
		 */
		public function maybe_handle() {
			// Don't lock up other requests while processing.
			session_write_close();

			check_ajax_referer( $this->identifier, 'nonce' );

			$this->handle();

			wp_die();
		}

		/**
		 * Handle
		 *
		 * Override this method to perform any actions required
		 * during the async request.
		 */
		abstract protected function handle();

	}
}
PK     ŒŠU]3e›3r  r  Y  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.phpnu „[µü¤        <?php

/**
 * CRON field interface
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
interface CronExpression_FieldInterface
{
    /**
     * Check if the respective value of a DateTime field satisfies a CRON exp
     *
     * @param DateTime $date  DateTime object to check
     * @param string   $value CRON expression to test against
     *
     * @return bool Returns TRUE if satisfied, FALSE otherwise
     */
    public function isSatisfiedBy(DateTime $date, $value);

    /**
     * When a CRON expression is not satisfied, this method is used to increment
     * or decrement a DateTime object by the unit of the cron field
     *
     * @param DateTime $date   DateTime object to change
     * @param bool     $invert (optional) Set to TRUE to decrement
     *
     * @return CronExpression_FieldInterface
     */
    public function increment(DateTime $date, $invert = false);

    /**
     * Validates a CRON expression for a given field
     *
     * @param string $value CRON expression value to validate
     *
     * @return bool Returns TRUE if valid, FALSE otherwise
     */
    public function validate($value);
}
PK     ŒŠU]NÅ»_-  _-  J  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.phpnu „[µü¤        <?php

/**
 * CRON expression parser that can determine whether or not a CRON expression is
 * due to run, the next run date and previous run date of a CRON expression.
 * The determinations made by this class are accurate if checked run once per
 * minute (seconds are dropped from date time comparisons).
 *
 * Schedule parts must map to:
 * minute [0-59], hour [0-23], day of month, month [1-12|JAN-DEC], day of week
 * [1-7|MON-SUN], and an optional year.
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 * @link http://en.wikipedia.org/wiki/Cron
 */
class CronExpression
{
    const MINUTE = 0;
    const HOUR = 1;
    const DAY = 2;
    const MONTH = 3;
    const WEEKDAY = 4;
    const YEAR = 5;

    /**
     * @var array CRON expression parts
     */
    private $cronParts;

    /**
     * @var CronExpression_FieldFactory CRON field factory
     */
    private $fieldFactory;

    /**
     * @var array Order in which to test of cron parts
     */
    private static $order = array(self::YEAR, self::MONTH, self::DAY, self::WEEKDAY, self::HOUR, self::MINUTE);

    /**
     * Factory method to create a new CronExpression.
     *
     * @param string $expression The CRON expression to create.  There are
     *      several special predefined values which can be used to substitute the
     *      CRON expression:
     *
     *      @yearly, @annually) - Run once a year, midnight, Jan. 1 - 0 0 1 1 *
     *      @monthly - Run once a month, midnight, first of month - 0 0 1 * *
     *      @weekly - Run once a week, midnight on Sun - 0 0 * * 0
     *      @daily - Run once a day, midnight - 0 0 * * *
     *      @hourly - Run once an hour, first minute - 0 * * * *
     *
*@param CronExpression_FieldFactory $fieldFactory (optional) Field factory to use
     *
     * @return CronExpression
     */
    public static function factory($expression, ?CronExpression_FieldFactory $fieldFactory = null)
    {
        $mappings = array(
            '@yearly' => '0 0 1 1 *',
            '@annually' => '0 0 1 1 *',
            '@monthly' => '0 0 1 * *',
            '@weekly' => '0 0 * * 0',
            '@daily' => '0 0 * * *',
            '@hourly' => '0 * * * *'
        );

        if (isset($mappings[$expression])) {
            $expression = $mappings[$expression];
        }

        return new self($expression, $fieldFactory ? $fieldFactory : new CronExpression_FieldFactory());
    }

    /**
     * Parse a CRON expression
     *
     * @param string       $expression   CRON expression (e.g. '8 * * * *')
     * @param CronExpression_FieldFactory $fieldFactory Factory to create cron fields
     */
    public function __construct($expression, CronExpression_FieldFactory $fieldFactory)
    {
        $this->fieldFactory = $fieldFactory;
        $this->setExpression($expression);
    }

    /**
     * Set or change the CRON expression
     *
     * @param string $value CRON expression (e.g. 8 * * * *)
     *
     * @return CronExpression
     * @throws InvalidArgumentException if not a valid CRON expression
     */
    public function setExpression($value)
    {
        $this->cronParts = preg_split('/\s/', $value, -1, PREG_SPLIT_NO_EMPTY);
        if (count($this->cronParts) < 5) {
            throw new InvalidArgumentException(
                $value . ' is not a valid CRON expression'
            );
        }

        foreach ($this->cronParts as $position => $part) {
            $this->setPart($position, $part);
        }

        return $this;
    }

    /**
     * Set part of the CRON expression
     *
     * @param int    $position The position of the CRON expression to set
     * @param string $value    The value to set
     *
     * @return CronExpression
     * @throws InvalidArgumentException if the value is not valid for the part
     */
    public function setPart($position, $value)
    {
        if (!$this->fieldFactory->getField($position)->validate($value)) {
            throw new InvalidArgumentException(
                'Invalid CRON field value ' . $value . ' as position ' . $position
            );
        }

        $this->cronParts[$position] = $value;

        return $this;
    }

    /**
     * Get a next run date relative to the current date or a specific date
     *
     * @param string|DateTime $currentTime (optional) Relative calculation date
     * @param int             $nth         (optional) Number of matches to skip before returning a
     *     matching next run date.  0, the default, will return the current
     *     date and time if the next run date falls on the current date and
     *     time.  Setting this value to 1 will skip the first match and go to
     *     the second match.  Setting this value to 2 will skip the first 2
     *     matches and so on.
     * @param bool $allowCurrentDate (optional) Set to TRUE to return the
     *     current date if it matches the cron expression
     *
     * @return DateTime
     * @throws RuntimeException on too many iterations
     */
    public function getNextRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false)
    {
        return $this->getRunDate($currentTime, $nth, false, $allowCurrentDate);
    }

    /**
     * Get a previous run date relative to the current date or a specific date
     *
     * @param string|DateTime $currentTime      (optional) Relative calculation date
     * @param int             $nth              (optional) Number of matches to skip before returning
     * @param bool            $allowCurrentDate (optional) Set to TRUE to return the
     *     current date if it matches the cron expression
     *
     * @return DateTime
     * @throws RuntimeException on too many iterations
     * @see CronExpression::getNextRunDate
     */
    public function getPreviousRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false)
    {
        return $this->getRunDate($currentTime, $nth, true, $allowCurrentDate);
    }

    /**
     * Get multiple run dates starting at the current date or a specific date
     *
     * @param int             $total            Set the total number of dates to calculate
     * @param string|DateTime $currentTime      (optional) Relative calculation date
     * @param bool            $invert           (optional) Set to TRUE to retrieve previous dates
     * @param bool            $allowCurrentDate (optional) Set to TRUE to return the
     *     current date if it matches the cron expression
     *
     * @return array Returns an array of run dates
     */
    public function getMultipleRunDates($total, $currentTime = 'now', $invert = false, $allowCurrentDate = false)
    {
        $matches = array();
        for ($i = 0; $i < max(0, $total); $i++) {
            $matches[] = $this->getRunDate($currentTime, $i, $invert, $allowCurrentDate);
        }

        return $matches;
    }

    /**
     * Get all or part of the CRON expression
     *
     * @param string $part (optional) Specify the part to retrieve or NULL to
     *      get the full cron schedule string.
     *
     * @return string|null Returns the CRON expression, a part of the
     *      CRON expression, or NULL if the part was specified but not found
     */
    public function getExpression($part = null)
    {
        if (null === $part) {
            return implode(' ', $this->cronParts);
        } elseif (array_key_exists($part, $this->cronParts)) {
            return $this->cronParts[$part];
        }

        return null;
    }

    /**
     * Helper method to output the full expression.
     *
     * @return string Full CRON expression
     */
    public function __toString()
    {
        return $this->getExpression();
    }

    /**
     * Determine if the cron is due to run based on the current date or a
     * specific date.  This method assumes that the current number of
     * seconds are irrelevant, and should be called once per minute.
     *
     * @param string|DateTime $currentTime (optional) Relative calculation date
     *
     * @return bool Returns TRUE if the cron is due to run or FALSE if not
     */
    public function isDue($currentTime = 'now')
    {
        if ('now' === $currentTime) {
            $currentDate = date('Y-m-d H:i');
            $currentTime = strtotime($currentDate);
        } elseif ($currentTime instanceof DateTime) {
            $currentDate = $currentTime->format('Y-m-d H:i');
            $currentTime = strtotime($currentDate);
        } else {
            $currentTime = new DateTime($currentTime);
            $currentTime->setTime($currentTime->format('H'), $currentTime->format('i'), 0);
            $currentDate = $currentTime->format('Y-m-d H:i');
            $currentTime = (int)($currentTime->getTimestamp());
        }

        return $this->getNextRunDate($currentDate, 0, true)->getTimestamp() == $currentTime;
    }

    /**
     * Get the next or previous run date of the expression relative to a date
     *
     * @param string|DateTime $currentTime      (optional) Relative calculation date
     * @param int             $nth              (optional) Number of matches to skip before returning
     * @param bool            $invert           (optional) Set to TRUE to go backwards in time
     * @param bool            $allowCurrentDate (optional) Set to TRUE to return the
     *     current date if it matches the cron expression
     *
     * @return DateTime
     * @throws RuntimeException on too many iterations
     */
    protected function getRunDate($currentTime = null, $nth = 0, $invert = false, $allowCurrentDate = false)
    {
        if ($currentTime instanceof DateTime) {
            $currentDate = $currentTime;
        } else {
            $currentDate = new DateTime($currentTime ? $currentTime : 'now');
            $currentDate->setTimezone(new DateTimeZone(date_default_timezone_get()));
        }

        $currentDate->setTime($currentDate->format('H'), $currentDate->format('i'), 0);
        $nextRun = clone $currentDate;
        $nth = (int) $nth;

        // Set a hard limit to bail on an impossible date
        for ($i = 0; $i < 1000; $i++) {

            foreach (self::$order as $position) {
                $part = $this->getExpression($position);
                if (null === $part) {
                    continue;
                }

                $satisfied = false;
                // Get the field object used to validate this part
                $field = $this->fieldFactory->getField($position);
                // Check if this is singular or a list
                if (strpos($part, ',') === false) {
                    $satisfied = $field->isSatisfiedBy($nextRun, $part);
                } else {
                    foreach (array_map('trim', explode(',', $part)) as $listPart) {
                        if ($field->isSatisfiedBy($nextRun, $listPart)) {
                            $satisfied = true;
                            break;
                        }
                    }
                }

                // If the field is not satisfied, then start over
                if (!$satisfied) {
                    $field->increment($nextRun, $invert);
                    continue 2;
                }
            }

            // Skip this match if needed
            if ((!$allowCurrentDate && $nextRun == $currentDate) || --$nth > -1) {
                $this->fieldFactory->getField(0)->increment($nextRun, $invert);
                continue;
            }

            return $nextRun;
        }

        // @codeCoverageIgnoreStart
        throw new RuntimeException('Impossible CRON expression');
        // @codeCoverageIgnoreEnd
    }
}
PK     �ŠU]vbZä    Z  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.phpnu „[µü¤        <?php

/**
 * Day of month field.  Allows: * , / - ? L W
 *
 * 'L' stands for "last" and specifies the last day of the month.
 *
 * The 'W' character is used to specify the weekday (Monday-Friday) nearest the
 * given day. As an example, if you were to specify "15W" as the value for the
 * day-of-month field, the meaning is: "the nearest weekday to the 15th of the
 * month". So if the 15th is a Saturday, the trigger will fire on Friday the
 * 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If
 * the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you
 * specify "1W" as the value for day-of-month, and the 1st is a Saturday, the
 * trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary
 * of a month's days. The 'W' character can only be specified when the
 * day-of-month is a single day, not a range or list of days.
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_DayOfMonthField extends CronExpression_AbstractField
{
    /**
     * Get the nearest day of the week for a given day in a month
     *
     * @param int $currentYear  Current year
     * @param int $currentMonth Current month
     * @param int $targetDay    Target day of the month
     *
     * @return DateTime Returns the nearest date
     */
    private static function getNearestWeekday($currentYear, $currentMonth, $targetDay)
    {
        $tday = str_pad($targetDay, 2, '0', STR_PAD_LEFT);
        $target = new DateTime("$currentYear-$currentMonth-$tday");
        $currentWeekday = (int) $target->format('N');

        if ($currentWeekday < 6) {
            return $target;
        }

        $lastDayOfMonth = $target->format('t');

        foreach (array(-1, 1, -2, 2) as $i) {
            $adjusted = $targetDay + $i;
            if ($adjusted > 0 && $adjusted <= $lastDayOfMonth) {
                $target->setDate($currentYear, $currentMonth, $adjusted);
                if ($target->format('N') < 6 && $target->format('m') == $currentMonth) {
                    return $target;
                }
            }
        }
    }

    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        // ? states that the field value is to be skipped
        if ($value == '?') {
            return true;
        }

        $fieldValue = $date->format('d');

        // Check to see if this is the last day of the month
        if ($value == 'L') {
            return $fieldValue == $date->format('t');
        }

        // Check to see if this is the nearest weekday to a particular value
        if (strpos($value, 'W')) {
            // Parse the target day
            $targetDay = substr($value, 0, strpos($value, 'W'));
            // Find out if the current day is the nearest day of the week
            return $date->format('j') == self::getNearestWeekday(
                $date->format('Y'),
                $date->format('m'),
                $targetDay
            )->format('j');
        }

        return $this->isSatisfied($date->format('d'), $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        if ($invert) {
            $date->modify('previous day');
            $date->setTime(23, 59);
        } else {
            $date->modify('next day');
            $date->setTime(0, 0);
        }

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-\?LW0-9A-Za-z]+/', $value);
    }
}
PK     �ŠU]&K(#J  J  ?  vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSEnu „[µü¤        Copyright (c) 2011 Michael Dowling <mtdowling@gmail.com> and contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK     �ŠU]ñuMEQ  Q  Y  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.phpnu „[µü¤        <?php

/**
 * Day of week field.  Allows: * / , - ? L #
 *
 * Days of the week can be represented as a number 0-7 (0|7 = Sunday)
 * or as a three letter string: SUN, MON, TUE, WED, THU, FRI, SAT.
 *
 * 'L' stands for "last". It allows you to specify constructs such as
 * "the last Friday" of a given month.
 *
 * '#' is allowed for the day-of-week field, and must be followed by a
 * number between one and five. It allows you to specify constructs such as
 * "the second Friday" of a given month.
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_DayOfWeekField extends CronExpression_AbstractField
{
    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        if ($value == '?') {
            return true;
        }

        // Convert text day of the week values to integers
        $value = str_ireplace(
            array('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'),
            range(0, 6),
            $value
        );

        $currentYear = $date->format('Y');
        $currentMonth = $date->format('m');
        $lastDayOfMonth = $date->format('t');

        // Find out if this is the last specific weekday of the month
        if (strpos($value, 'L')) {
            $weekday = str_replace('7', '0', substr($value, 0, strpos($value, 'L')));
            $tdate = clone $date;
            $tdate->setDate($currentYear, $currentMonth, $lastDayOfMonth);
            while ($tdate->format('w') != $weekday) {
                $tdate->setDate($currentYear, $currentMonth, --$lastDayOfMonth);
            }

            return $date->format('j') == $lastDayOfMonth;
        }

        // Handle # hash tokens
        if (strpos($value, '#')) {
            list($weekday, $nth) = explode('#', $value);
            // Validate the hash fields
            if ($weekday < 1 || $weekday > 5) {
                throw new InvalidArgumentException("Weekday must be a value between 1 and 5. {$weekday} given");
            }
            if ($nth > 5) {
                throw new InvalidArgumentException('There are never more than 5 of a given weekday in a month');
            }
            // The current weekday must match the targeted weekday to proceed
            if ($date->format('N') != $weekday) {
                return false;
            }

            $tdate = clone $date;
            $tdate->setDate($currentYear, $currentMonth, 1);
            $dayCount = 0;
            $currentDay = 1;
            while ($currentDay < $lastDayOfMonth + 1) {
                if ($tdate->format('N') == $weekday) {
                    if (++$dayCount >= $nth) {
                        break;
                    }
                }
                $tdate->setDate($currentYear, $currentMonth, ++$currentDay);
            }

            return $date->format('j') == $currentDay;
        }

        // Handle day of the week values
        if (strpos($value, '-')) {
            $parts = explode('-', $value);
            if ($parts[0] == '7') {
                $parts[0] = '0';
            } elseif ($parts[1] == '0') {
                $parts[1] = '7';
            }
            $value = implode('-', $parts);
        }

        // Test to see which Sunday to use -- 0 == 7 == Sunday
        $format = in_array(7, str_split($value)) ? 'N' : 'w';
        $fieldValue = $date->format($format);

        return $this->isSatisfied($fieldValue, $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        if ($invert) {
            $date->modify('-1 day');
            $date->setTime(23, 59, 0);
        } else {
            $date->modify('+1 day');
            $date->setTime(0, 0, 0);
        }

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-0-9A-Z]+/', $value);
    }
}
PK     �ŠU]ÿ'¤©  ©  T  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.phpnu „[µü¤        <?php

/**
 * Year field.  Allows: * , / -
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_YearField extends CronExpression_AbstractField
{
    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        return $this->isSatisfied($date->format('Y'), $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        if ($invert) {
            $date->modify('-1 year');
            $date->setDate($date->format('Y'), 12, 31);
            $date->setTime(23, 59, 0);
        } else {
            $date->modify('+1 year');
            $date->setDate($date->format('Y'), 1, 1);
            $date->setTime(0, 0, 0);
        }

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-0-9]+/', $value);
    }
}
PK     ŽŠU]Ð­£w  w  U  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.phpnu „[µü¤        <?php

/**
 * Month field.  Allows: * , / -
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_MonthField extends CronExpression_AbstractField
{
    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        // Convert text month values to integers
        $value = str_ireplace(
            array(
                'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',
                'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'
            ),
            range(1, 12),
            $value
        );

        return $this->isSatisfied($date->format('m'), $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        if ($invert) {
            // $date->modify('last day of previous month'); // remove for php 5.2 compat
            $date->modify('previous month');
            $date->modify($date->format('Y-m-t'));
            $date->setTime(23, 59);
        } else {
            //$date->modify('first day of next month'); // remove for php 5.2 compat
            $date->modify('next month');
            $date->modify($date->format('Y-m-01'));
            $date->setTime(0, 0);
        }

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-0-9A-Z]+/', $value);
    }
}
PK     ŽŠU]f÷„ÈÑ  Ñ  W  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.phpnu „[µü¤        <?php

/**
 * CRON field factory implementing a flyweight factory
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 * @link http://en.wikipedia.org/wiki/Cron
 */
class CronExpression_FieldFactory
{
    /**
     * @var array Cache of instantiated fields
     */
    private $fields = array();

    /**
     * Get an instance of a field object for a cron expression position
     *
     * @param int $position CRON expression position value to retrieve
     *
     * @return CronExpression_FieldInterface
     * @throws InvalidArgumentException if a position is not valid
     */
    public function getField($position)
    {
        if (!isset($this->fields[$position])) {
            switch ($position) {
                case 0:
                    $this->fields[$position] = new CronExpression_MinutesField();
                    break;
                case 1:
                    $this->fields[$position] = new CronExpression_HoursField();
                    break;
                case 2:
                    $this->fields[$position] = new CronExpression_DayOfMonthField();
                    break;
                case 3:
                    $this->fields[$position] = new CronExpression_MonthField();
                    break;
                case 4:
                    $this->fields[$position] = new CronExpression_DayOfWeekField();
                    break;
                case 5:
                    $this->fields[$position] = new CronExpression_YearField();
                    break;
                default:
                    throw new InvalidArgumentException(
                        $position . ' is not a valid position'
                    );
            }
        }

        return $this->fields[$position];
    }
}
PK     ŽŠU]¥è¢"ù  ù  W  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.phpnu „[µü¤        <?php

/**
 * Minutes field.  Allows: * , / -
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_MinutesField extends CronExpression_AbstractField
{
    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        return $this->isSatisfied($date->format('i'), $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        if ($invert) {
            $date->modify('-1 minute');
        } else {
            $date->modify('+1 minute');
        }

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-0-9]+/', $value);
    }
}
PK     ŽŠU]�f-´
  
  X  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.phpnu „[µü¤        <?php

/**
 * Abstract CRON expression field
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
abstract class CronExpression_AbstractField implements CronExpression_FieldInterface
{
    /**
     * Check to see if a field is satisfied by a value
     *
     * @param string $dateValue Date value to check
     * @param string $value     Value to test
     *
     * @return bool
     */
    public function isSatisfied($dateValue, $value)
    {
        if ($this->isIncrementsOfRanges($value)) {
            return $this->isInIncrementsOfRanges($dateValue, $value);
        } elseif ($this->isRange($value)) {
            return $this->isInRange($dateValue, $value);
        }

        return $value == '*' || $dateValue == $value;
    }

    /**
     * Check if a value is a range
     *
     * @param string $value Value to test
     *
     * @return bool
     */
    public function isRange($value)
    {
        return strpos($value, '-') !== false;
    }

    /**
     * Check if a value is an increments of ranges
     *
     * @param string $value Value to test
     *
     * @return bool
     */
    public function isIncrementsOfRanges($value)
    {
        return strpos($value, '/') !== false;
    }

    /**
     * Test if a value is within a range
     *
     * @param string $dateValue Set date value
     * @param string $value     Value to test
     *
     * @return bool
     */
    public function isInRange($dateValue, $value)
    {
        $parts = array_map('trim', explode('-', $value, 2));

        return $dateValue >= $parts[0] && $dateValue <= $parts[1];
    }

    /**
     * Test if a value is within an increments of ranges (offset[-to]/step size)
     *
     * @param string $dateValue Set date value
     * @param string $value     Value to test
     *
     * @return bool
     */
    public function isInIncrementsOfRanges($dateValue, $value)
    {
        $parts = array_map('trim', explode('/', $value, 2));
        $stepSize = isset($parts[1]) ? $parts[1] : 0;
        if ($parts[0] == '*' || $parts[0] === '0') {
            return (int) $dateValue % $stepSize == 0;
        }

        $range = explode('-', $parts[0], 2);
        $offset = $range[0];
        $to = isset($range[1]) ? $range[1] : $dateValue;
        // Ensure that the date value is within the range
        if ($dateValue < $offset || $dateValue > $to) {
            return false;
        }

        for ($i = $offset; $i <= $to; $i+= $stepSize) {
            if ($i == $dateValue) {
                return true;
            }
        }

        return false;
    }
}
PK     �ŠU]P{/ê…  …  U  vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.phpnu „[µü¤        <?php

/**
 * Hours field.  Allows: * , / -
 *
 * @author Michael Dowling <mtdowling@gmail.com>
 */
class CronExpression_HoursField extends CronExpression_AbstractField
{
    /**
     * {@inheritdoc}
     */
    public function isSatisfiedBy(DateTime $date, $value)
    {
        return $this->isSatisfied($date->format('H'), $value);
    }

    /**
     * {@inheritdoc}
     */
    public function increment(DateTime $date, $invert = false)
    {
        // Change timezone to UTC temporarily. This will
        // allow us to go back or forwards and hour even
        // if DST will be changed between the hours.
        $timezone = $date->getTimezone();
        $date->setTimezone(new DateTimeZone('UTC'));
        if ($invert) {
            $date->modify('-1 hour');
            $date->setTime($date->format('H'), 59);
        } else {
            $date->modify('+1 hour');
            $date->setTime($date->format('H'), 0);
        }
        $date->setTimezone($timezone);

        return $this;
    }

    /**
     * {@inheritdoc}
     */
    public function validate($value)
    {
        return (bool) preg_match('/[\*,\/\-0-9]+/', $value);
    }
}
PK     �ŠU]ëËF  F  )  vendor/wp-media/wp-mixpanel/composer.jsonnu „[µü¤        {
    "name": "wp-media/wp-mixpanel",
    "description": "WordPress Mixpanel Integration",
    "license": "GPL-3.0-or-later",
    "authors": [
        {
            "name": "WP Media",
            "homepage": "https://github.com/wp-media/wp-mixpanel",
            "role": "Developer"
        }
    ],
    "support": {
        "issues": "https://github.com/wp-media/wp-mixpanel/issues"
    },
    "config": {
        "sort-packages": true,
        "allow-plugins": {
            "dealerdirect/phpcodesniffer-composer-installer": true,
            "phpstan/extension-installer": true
        }
    },
    "require": {
        "php": ">=7.3"
    },
    "require-dev": {
        "php-stubs/wordpress-tests-stubs": "^6.5",
		"phpcompatibility/phpcompatibility-wp": "^2.0",
		"phpstan/extension-installer": "^1.3",
		"phpstan/phpstan-mockery": "^2.0",
		"phpstan/phpstan-phpunit": "^2.0",
        "roave/security-advisories": "dev-master",
        "szepeviktor/phpstan-wordpress": "^2.0",
        "wp-coding-standards/wpcs": "^3",
        "wp-media/phpunit": "^3"
    },
    "autoload": {
        "psr-4": {
            "WPMedia\\Mixpanel\\": "src/"
        },
        "classmap": [
            "src/Classes/"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "WPMedia\\Mixpanel\\Tests\\": "tests/"
        }
    },
    "scripts": {
        "phpcs": "vendor/bin/phpcs",
        "phpcs:ci": "vendor/bin/phpcs --report-full --report-checkstyle=./phpcs-report.xml",
        "phpcs:fix": "vendor/bin/phpcbf",
        "phpstan": "vendor/bin/phpstan analyze --memory-limit=2G",
        "test-unit": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist",
        "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist"
    }
}
PK     �ŠU]¬bèÓ‚  ‚  .  vendor/wp-media/wp-mixpanel/src/WPConsumer.phpnu „[µü¤        <?php
declare(strict_types=1);

namespace WPMedia\Mixpanel;

use WPMedia_ConsumerStrategies_AbstractConsumer;

/**
 * Consumes messages and sends them to a host/endpoint using WordPress's HTTP API
 */
class WPConsumer extends WPMedia_ConsumerStrategies_AbstractConsumer {

	/**
	 * The host to connect to (e.g. api.mixpanel.com)
	 *
	 * @var string
	 */
	protected $host;

	/**
	 * The host-relative endpoint to write to (e.g. /engage)
	 *
	 * @var string
	 */
	protected $endpoint;

	/**
	 * The maximum number of seconds to allow the call to execute. Default is 30 seconds.
	 *
	 * @var int
	 */
	protected $timeout;

	/**
	 * The protocol to use for the cURL connection
	 *
	 * @var string
	 */
	protected $protocol;

	/**
	 * Creates a new WPConsumer and assigns properties from the $options array
	 *
	 * @param array{host:string, endpoint:string, timeout?: int, use_ssl?: bool} $options Options for the consumer.
	 */
	public function __construct( $options ) {
		parent::__construct( $options );

		$this->host     = $options['host'];
		$this->endpoint = $options['endpoint'];
		$this->timeout  = isset( $options['timeout'] ) ? $options['timeout'] : 30;
		$this->protocol = isset( $options['use_ssl'] ) && ( true === $options['use_ssl'] ) ? 'https' : 'http';
	}

	/**
	 * Send post request to the given host/endpoint using WordPress's HTTP API
	 *
	 * @param mixed[] $batch Batch of data to send to mixpanel.
	 *
	 * @return bool
	 */
	public function persist( $batch ) {
		if ( count( $batch ) <= 0 ) {
			return true;
		}

		$url  = $this->protocol . '://' . $this->host . $this->endpoint;
		$data = 'data=' . $this->_encode( $batch );

		$response = wp_remote_post(
			$url,
			[
				'timeout' => $this->timeout,
				'body'    => $data,
			]
		);

		if ( is_wp_error( $response ) ) {
			$this->_handleError( $response->get_error_code(), $response->get_error_message() );
			return false;
		}

		return true;
	}
}
PK     �ŠU]¥µEZ|  |  )  vendor/wp-media/wp-mixpanel/src/Optin.phpnu „[µü¤        <?php
declare(strict_types=1);

namespace WPMedia\Mixpanel;

class Optin {
	/**
	 * The plugin slug.
	 *
	 * @var string
	 */
	private $plugin_slug;

	/**
	 * The capability required to enable/disable the opt-in.
	 *
	 * @var string
	 */
	private $capability;

	/**
	 * Constructor.
	 *
	 * @param string $plugin_slug The plugin slug.
	 * @param string $capability  The capability required to enable/disable the opt-in.
	 */
	public function __construct( string $plugin_slug, string $capability ) {
		$this->plugin_slug = $plugin_slug;
		$this->capability  = $capability;
	}

	/**
	 * Check if the opt-in is enabled.
	 *
	 * @return bool True if the opt-in is enabled, false otherwise.
	 */
	public function is_enabled(): bool {
		if ( ! current_user_can( $this->capability ) ) {
			return false;
		}

		$optin = get_option( $this->plugin_slug . '_mixpanel_optin', false );

		if ( ! $optin ) {
			return false;
		}

		return true;
	}

	/**
	 * Check if tracking is allowed.
	 *
	 * @return bool
	 */
	public function can_track(): bool {
		return (bool) get_option( $this->plugin_slug . '_mixpanel_optin', false );
	}

	/**
	 * Enable the opt-in.
	 *
	 * @return void
	 */
	public function enable(): void {
		if ( $this->is_enabled() ) {
			return;
		}

		update_option( $this->plugin_slug . '_mixpanel_optin', true );

		/**
		 * Fires when the Mixpanel opt-in status changes to enabled.
		 *
		 * @param bool $status The opt-in status.
		 */
		do_action( $this->plugin_slug . '_mixpanel_optin_changed', true );
	}

	/**
	 * Disable the opt-in.
	 *
	 * @return void
	 */
	public function disable(): void {
		if ( ! $this->is_enabled() ) {
			return;
		}

		delete_option( $this->plugin_slug . '_mixpanel_optin' );

		/**
		 * Fires when the Mixpanel opt-in status changes to disabled.
		 *
		 * @param bool $status The opt-in status.
		 */
		do_action( $this->plugin_slug . '_mixpanel_optin_changed', false );
	}
}
PK     �ŠU]GÃ¸ÔÞ  Þ  ,  vendor/wp-media/wp-mixpanel/src/Tracking.phpnu „[µü¤        <?php
declare(strict_types=1);

namespace WPMedia\Mixpanel;

use WPMedia_Mixpanel;

class Tracking {
	const HOST = 'mixpanel-proxy.group.one';

	/**
	 * Mixpanel instance
	 *
	 * @var WPMedia_Mixpanel
	 */
	private $mixpanel;

	/**
	 * Mixpanel token
	 *
	 * @var string
	 */
	protected $token;

	/**
	 * Constructor
	 *
	 * @param string  $mixpanel_token Mixpanel token.
	 * @param mixed[] $options Options for Mixpanel instance.
	 */
	public function __construct( string $mixpanel_token, array $options = [] ) {
		$mixpanel_options = array_merge(
			[
				'host'            => self::HOST,
				'events_endpoint' => '/track/?ip=0',
			],
			$options
		);

		$this->token    = $mixpanel_token;
		$this->mixpanel = WPMedia_Mixpanel::getInstance(
			$this->token,
			$mixpanel_options
		);
	}

	/**
	 * Check if debug mode is enabled
	 *
	 * @return bool
	 */
	private function is_debug(): bool {
		$debug = ( defined( 'WP_DEBUG' ) ? constant( 'WP_DEBUG' ) : false )
			&& ( defined( 'WP_DEBUG_LOG' ) ? constant( 'WP_DEBUG_LOG' ) : false );

		/**
		 * Filters whether Mixpanel debug mode is enabled.
		 *
		 * @param bool $debug Debug mode value.
		 */
		return apply_filters( 'wp_media_mixpanel_debug', $debug );
	}

	/**
	 * Log event to error log if debug mode is enabled
	 *
	 * @param string  $event Event name.
	 * @param mixed[] $properties Event properties.
	 */
	private function log_event( string $event, array $properties ): void {
		if ( ! $this->is_debug() ) {
			return;
		}

		error_log( 'Mixpanel event: ' . $event . ' ' . var_export( $properties, true ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log, WordPress.PHP.DevelopmentFunctions.error_log_var_export
	}

	/**
	 * Track an event in Mixpanel
	 *
	 * @param string  $event Event name.
	 * @param mixed[] $properties Event properties.
	 */
	public function track( string $event, array $properties ): void {
		$this->log_event( $event, $properties );

		$this->mixpanel->track( $event, $properties );
	}

	/**
	 * Identify a user in Mixpanel
	 *
	 * @param string $user_id User ID.
	 *
	 * @return void
	 */
	public function identify( string $user_id ): void {
		$this->mixpanel->identify( $this->hash( $user_id ) );
	}

	/**
	 * Set a user property in Mixpanel
	 *
	 * @param string $user_id User ID.
	 * @param string $property Property name.
	 * @param mixed  $value Property value.
	 */
	public function set_user_property( string $user_id, string $property, $value ): void {
		$this->mixpanel->people->set(
			$user_id,
			[
				$property => $value,
			],
			'0'
		);
	}

	/**
	 * Hash a value using sha224
	 *
	 * @param string $value Value to hash.
	 *
	 * @return string
	 */
	public function hash( string $value ): string {
		return hash( 'sha224', $value );
	}

	/**
	 * Get the WordPress version
	 *
	 * @return string
	 */
	public function get_wp_version(): string {
		$version = preg_replace( '@^(\d\.\d+).*@', '\1', get_bloginfo( 'version' ) );

		if ( null === $version ) {
			$version = '0.0';
		}

		return $version;
	}

	/**
	 * Get the PHP version
	 *
	 * @return string
	 */
	public function get_php_version(): string {
		$version = preg_replace( '@^(\d\.\d+).*@', '\1', phpversion() );

		if ( null === $version ) {
			$version = '0.0';
		}

		return $version;
	}

	/**
	 * Get the active theme
	 *
	 * @return string
	 */
	public function get_current_theme(): string {
		$theme = wp_get_theme();

		return $theme->get( 'Name' );
	}

	/**
	 * Get list of active plugins names
	 *
	 * @return string[]
	 */
	public function get_active_plugins(): array {
		$plugins        = [];
		$active_plugins = (array) get_option( 'active_plugins', [] );
		$all_plugins    = get_plugins();

		foreach ( $active_plugins as $plugin_path ) {
			if ( ! is_string( $plugin_path ) ) {
				continue;
			}

			if ( ! isset( $all_plugins[ $plugin_path ] ) ) {
				continue;
			}

			$plugins[] = $all_plugins[ $plugin_path ]['Name'];
		}

		return $plugins;
	}

	/**
	 * Get the Mixpanel token
	 *
	 * @return string
	 */
	public function get_token(): string {
		return $this->token;
	}

	/**
	 * Add the Mixpanel script & initialize it
	 */
	public function add_script(): void {
		?>
		<!-- start Mixpanel --><script>
		const MIXPANEL_CUSTOM_LIB_URL = "https://<?php echo esc_js( self::HOST ); ?>/lib.min.js";
		(function (f, b) { if (!b.__SV) { var e, g, i, h; window.mixpanel = b; b._i = []; b.init = function (e, f, c) { function g(a, d) { var b = d.split("."); 2 == b.length && ((a = a[b[0]]), (d = b[1])); a[d] = function () { a.push([d].concat(Array.prototype.slice.call(arguments, 0))); }; } var a = b; "undefined" !== typeof c ? (a = b[c] = []) : (c = "mixpanel"); a.people = a.people || []; a.toString = function (a) { var d = "mixpanel"; "mixpanel" !== c && (d += "." + c); a || (d += " (stub)"); return d; }; a.people.toString = function () { return a.toString(1) + ".people (stub)"; }; i = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split( " "); for (h = 0; h < i.length; h++) g(a, i[h]); var j = "set set_once union unset remove delete".split(" "); a.get_group = function () { function b(c) { d[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); a.push([e, call2]); }; } for ( var d = {}, e = ["get_group"].concat( Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++) b(j[c]); return d; }; b._i.push([e, f, c]); }; b.__SV = 1.2; e = f.createElement("script"); e.type = "text/javascript"; e.async = !0; e.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : "file:" === f.location.protocol && "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js"; g = f.getElementsByTagName("script")[0]; g.parentNode.insertBefore(e, g); } })(document, window.mixpanel || []);
		mixpanel.init( '<?php echo esc_js( $this->token ); ?>', {
			api_host: "https://<?php echo esc_js( self::HOST ); ?>",
			id: false,
			property_blacklist: ['$initial_referrer', '$current_url', '$initial_referring_domain', '$referrer', '$referring_domain']
		} );
		</script><!-- end Mixpanel -->
		<?php
	}
}
PK     �ŠU]pçiv    2  vendor/wp-media/wp-mixpanel/src/TrackingPlugin.phpnu „[µü¤        <?php
declare(strict_types=1);

namespace WPMedia\Mixpanel;

class TrackingPlugin extends Tracking {
	/**
	 * Plugin name & version
	 *
	 * @var string
	 */
	private $plugin;

	/**
	 * Brand name
	 *
	 * @var string
	 */
	private $brand;

	/**
	 * Application name
	 *
	 * @var string
	 */
	private $app;

	/**
	 * Constructor
	 *
	 * @param string $mixpanel_token Mixpanel token.
	 * @param string $plugin         Plugin name.
	 * @param string $brand          Brand name.
	 * @param string $app            Application name.
	 */
	public function __construct( string $mixpanel_token, string $plugin, string $brand = '', string $app = '' ) {
		$options = [
			'consumer'  => 'wp',
			'consumers' => [
				'wp' => 'WPMedia\\Mixpanel\\WPConsumer',
			],
		];

		parent::__construct( $mixpanel_token, $options );

		$this->plugin = $plugin;
		$this->brand  = $brand;
		$this->app    = $app;
	}

	/**
	 * Track an event in Mixpanel with plugin context
	 *
	 * @param string  $event      Event name.
	 * @param mixed[] $properties Event properties.
	 * @param string  $event_capability The capability required to track the event.
	 *
	 * @return void
	 */
	public function track( string $event, array $properties, string $event_capability = '' ): void {
		/**
		 * Filter the default capability required to track a specific event.
		 *
		 * @param string $capability The capability required to track the event.
		 * @param string $event      The event name.
		 * @param string $app        The application name.
		 */
		$default = apply_filters( 'wp_mixpanel_event_capability', 'manage_options', $event, $this->app );

		if ( empty( $event_capability ) ) {
			$event_capability = $default;
		}

		if ( ! current_user_can( $event_capability ) ) {
			return;
		}

		$this->track_direct( $event, $properties );
	}

	/**
	 * Track an event directly in Mixpanel, bypassing capability checks.
	 *
	 * @param string  $event      Event name.
	 * @param mixed[] $properties Event properties.
	 *
	 * @return void
	 */
	public function track_direct( string $event, array $properties ): void {
		$host = wp_parse_url( get_home_url(), PHP_URL_HOST );

		if ( ! $host ) {
			$host = '';
		}

		$defaults = [
			'domain'      => $this->hash( $host ),
			'wp_version'  => $this->get_wp_version(),
			'php_version' => $this->get_php_version(),
			'plugin'      => strtolower( $this->plugin ),
			'brand'       => strtolower( $this->brand ),
			'application' => strtolower( $this->app ),
		];

		$properties = array_merge( $properties, $defaults );

		parent::track( ucfirst( $event ), $properties );
	}

	/**
	 * Track opt-in status change in Mixpanel
	 *
	 * @param bool $status Opt-in status.
	 *
	 * @return void
	 */
	public function track_optin( $status ): void {
		$this->track(
			'WordPress Plugin Data Consent Changed',
			[
				'opt_in_status' => $status,
			]
		);
	}

	/**
	 * Add the Mixpanel script & initialize it
	 */
	public function add_script(): void {
		/**
		 * Filter the default capability required to track with JS.
		 *
		 * @param string $capability The capability required to track the event.
		 * @param string $app        The application name.
		 */
		$capability = apply_filters( 'wp_mixpanel_js_track_capability', 'manage_options', $this->app );

		if ( ! current_user_can( $capability ) ) {
			return;
		}

		parent::add_script();
	}
}
PK     �ŠU]Ï“·im  m  D  vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelGroups.phpnu „[µü¤        <?php

/**
 * Provides an API to create/update group profiles on Mixpanel
 */
class WPMedia_Producers_MixpanelGroups extends WPMedia_Producers_MixpanelBaseProducer {

    /**
     * Internal method to prepare a message given the message data
     * @param $group_key
     * @param $group_id
     * @param $operation
     * @param $value
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the group Profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @return array
     */
    private function _constructPayload($group_key, $group_id, $operation, $value, $ignore_time = false) {
        $payload = array(
            '$token' => $this->_token,
            '$group_key' => $group_key,
            '$group_id' => $group_id,
            '$time' => microtime(true),
            $operation => $value
        );
        if ($ignore_time === true) $payload['$ignore_time'] = true;
        return $payload;
    }

    /**
     * Set properties on a group profile. If the group profile does not exist, it creates it with these properties.
     * If it does exist, it sets the properties to these values, overwriting existing values.
     * @param string|int $group_key the group_key used for groups in Project Settings
     * @param string|int $group_id the group id used for the group profile
     * @param array $props associative array of properties to set on the group profile
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the group profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     */
    public function set($group_key, $group_id, $props, $ignore_time = false) {
        $payload = $this->_constructPayload($group_key, $group_id, '$set', $props, $ignore_time);
        $this->enqueue($payload);
    }

    /**
     * Set properties on a group profile. If the Group profile does not exist, it creates it with these properties.
     * If it does exist, it sets the properties to these values but WILL NOT overwrite existing values.
     * @param string|int $group_key the group_key used for groups in Project Settings
     * @param string|int $group_id the group id used for the group profile
     * @param array $props associative array of properties to set on the group profile
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the group profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     */
    public function setOnce($group_key, $group_id, $props, $ignore_time = false) {
        $payload = $this->_constructPayload($group_key, $group_id, '$set_once', $props, $ignore_time);
        $this->enqueue($payload);
    }

    /**
     * Unset properties on a group profile. If the group does not exist, it creates it with no properties.
     * If it does exist, it unsets these properties. NOTE: In other libraries we use 'unset' which is
     * a reserved word in PHP.
     * @param string|int $group_key the group_key used for groups in Project Settings
     * @param string|int $group_id the group id used for the group profile
     * @param array $props associative array of properties to unset on the group profile
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the group profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     */
    public function remove($group_key, $group_id, $props, $ignore_time = false) {
        $payload = $this->_constructPayload($group_key, $group_id, '$remove', $props, $ignore_time);
        $this->enqueue($payload);
    }

    /**
     * Adds $val to a list located at $prop. If the property does not exist, it will be created. If $val is a string
     * and the list is empty or does not exist, a new list with one value will be created.
     * @param string|int $group_key the group_key used for groups in Project Settings
     * @param string|int $group_id the group id used for the group profile
     * @param string $prop the property that holds the list
     * @param string|array $val items to add to the list
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the group profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     */
    public function union($group_key, $group_id, $prop, $val, $ignore_time = false) {
        $payload = $this->_constructPayload($group_key, $group_id, '$union', array("$prop" => $val), $ignore_time);
        $this->enqueue($payload);
    }

    /**
     * Delete this group profile from Mixpanel
     * @param string|int $group_key the group_key used for groups in Project Settings
     * @param string|int $group_id the group id used for the group profile
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     */
    public function deleteGroup($group_key, $group_id, $ignore_time = false) {
        $payload = $this->_constructPayload($group_key, $group_id, '$delete', "", $ignore_time);
        $this->enqueue($payload);
    }

    /**
     * Returns the "groups" endpoint
     * @return string
     */
    function _getEndpoint() {
        return $this->_options['groups_endpoint'];
    }

}
PK     ‘ŠU]ëæ»œÀ  À  J  vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelBaseProducer.phpnu „[µü¤        <?php

if (!function_exists('json_encode')) {
    throw new Exception('The JSON PHP extension is required.');
}

/**
 * Provides some base methods for use by a message Producer
 */
abstract class WPMedia_Producers_MixpanelBaseProducer extends WPMedia_Base_MixpanelBase {


    /**
     * @var string a token associated to a Mixpanel project
     */
    protected $_token;


    /**
     * @var array a queue to hold messages in memory before flushing in batches
     */
    private $_queue = array();


    /**
     * @var WPMedia_ConsumerStrategies_AbstractConsumer the consumer to use when flushing messages
     */
    private $_consumer = null;


    /**
     * @var array The list of available consumers
     */
    private $_consumers = array(
        "file"      =>  "WPMedia_ConsumerStrategies_FileConsumer",
        "curl"      =>  "WPMedia_ConsumerStrategies_CurlConsumer",
        "socket"    =>  "WPMedia_ConsumerStrategies_SocketConsumer",
    );


    /**
     * If the queue reaches this size we'll auto-flush to prevent out of memory errors
     * @var int
     */
    protected $_max_queue_size = 1000;


    /**
     * Creates a new MixpanelBaseProducer, assings Mixpanel project token, registers custom Consumers, and instantiates
     * the desired consumer
     * @param $token
     * @param array $options
     */
    public function __construct($token, $options = array()) {

        parent::__construct($options);

        // register any customer consumers
        if (isset($options["consumers"])) {
            $this->_consumers = array_merge($this->_consumers, $options['consumers']);
        }

        // set max queue size
        if (isset($options["max_queue_size"])) {
            $this->_max_queue_size = $options['max_queue_size'];
        }

        // associate token
        $this->_token = $token;

        if ($this->_debug()) {
            $this->_log("Using token: ".$this->_token);
        }

        // instantiate the chosen consumer
        $this->_consumer = $this->_getConsumer();

    }


    /**
     * Flush the queue when we destruct the client with retries
     */
    public function __destruct() {
        $attempts = 0;
        $max_attempts = 10;
        $success = false;
        while (!$success && $attempts < $max_attempts) {
            if ($this->_debug()) {
                $this->_log("destruct flush attempt #".($attempts+1));
            }
            $success = $this->flush();
            $attempts++;
        }
    }


    /**
     * Iterate the queue and write in batches using the instantiated Consumer Strategy
     * @param int $desired_batch_size
     * @return bool whether or not the flush was successful
     */
    public function flush($desired_batch_size = 50) {
        $queue_size = count($this->_queue);
        $succeeded = true;
        $num_threads = $this->_consumer->getNumThreads();

        if ($this->_debug()) {
            $this->_log("Flush called - queue size: ".$queue_size);
        }

        while($queue_size > 0 && $succeeded) {
            $batch_size = min(array($queue_size, $desired_batch_size*$num_threads, $this->_options['max_batch_size']*$num_threads));
            $batch = array_splice($this->_queue, 0, $batch_size);
            $succeeded = $this->_persist($batch);

            if (!$succeeded) {
                if ($this->_debug()) {
                    $this->_log("Batch consumption failed!");
                }
                $this->_queue = array_merge($batch, $this->_queue);

                if ($this->_debug()) {
                    $this->_log("added batch back to queue, queue size is now $queue_size");
                }
            }

            $queue_size = count($this->_queue);

            if ($this->_debug()) {
                $this->_log("Batch of $batch_size consumed, queue size is now $queue_size");
            }
        }
        return $succeeded;
    }


    /**
     * Empties the queue without persisting any of the messages
     */
    public function reset() {
        $this->_queue = array();
    }


    /**
     * Returns the in-memory queue
     * @return array
     */
    public function getQueue() {
        return $this->_queue;
    }

    /**
     * Returns the current Mixpanel project token
     * @return string
     */
    public function getToken() {
        return $this->_token;
    }


    /**
     * Given a strategy type, return a new PersistenceStrategy object
     * @return WPMedia_ConsumerStrategies_AbstractConsumer
     */
    protected function _getConsumer() {
        $key = $this->_options['consumer'];
        $Strategy = $this->_consumers[$key];
        if ($this->_debug()) {
            $this->_log("Using consumer: " . $key . " -> " . $Strategy);
        }
        $this->_options['endpoint'] = $this->_getEndpoint();

        return new $Strategy($this->_options);
    }


    /**
     * Add an array representing a message to be sent to Mixpanel to a queue.
     * @param array $message
     */
    public function enqueue($message = array()) {
        array_push($this->_queue, $message);

        // force a flush if we've reached our threshold
        if (count($this->_queue) > $this->_max_queue_size) {
            $this->flush();
        }

        if ($this->_debug()) {
            $this->_log("Queued message: ".json_encode($message));
        }
    }


    /**
     * Add an array representing a list of messages to be sent to Mixpanel to a queue.
     * @param array $messages
     */
    public function enqueueAll($messages = array()) {
        foreach($messages as $message) {
            $this->enqueue($message);
        }

    }


    /**
     * Given an array of messages, persist it with the instantiated Persistence Strategy
     * @param $message
     * @return mixed
     */
    protected function _persist($message) {
        return $this->_consumer->persist($message);
    }




    /**
     * Return the endpoint that should be used by a consumer that consumes messages produced by this producer.
     * @return string
     */
    abstract function _getEndpoint();

}
PK     ‘ŠU]A#x’Û*  Û*  D  vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelPeople.phpnu „[µü¤        <?php

/**
 * Provides an API to create/update profiles on Mixpanel
 */
class WPMedia_Producers_MixpanelPeople extends WPMedia_Producers_MixpanelBaseProducer {

    /**
     * Internal method to prepare a message given the message data
     * @param $distinct_id
     * @param $operation
     * @param $value
     * @param null $ip
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found
     * @return array
     */
    private function _constructPayload($distinct_id, $operation, $value, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = array(
            '$token' => $this->_token,
            '$distinct_id' => $distinct_id,
            '$time' => microtime(true),
            $operation => $value
        );
        if ($ip !== null) $payload['$ip'] = $ip;
        if ($ignore_time === true) $payload['$ignore_time'] = true;
        if ($ignore_alias === true) $payload['$ignore_alias'] = true;
        return $payload;
    }

    /**
     * Set properties on a user record. If the profile does not exist, it creates it with these properties.
     * If it does exist, it sets the properties to these values, overwriting existing values.
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param array $props associative array of properties to set on the profile
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found
     */
    public function set($distinct_id, $props, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$set', $props, $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Set properties on a user record. If the profile does not exist, it creates it with these properties.
     * If it does exist, it sets the properties to these values but WILL NOT overwrite existing values.
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param array $props associative array of properties to set on the profile
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function setOnce($distinct_id, $props, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$set_once', $props, $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Unset properties on a user record. If the profile does not exist, it creates it with no properties.
     * If it does exist, it unsets these properties. NOTE: In other libraries we use 'unset' which is
     * a reserved word in PHP.
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param array $props associative array of properties to unset on the profile
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function remove($distinct_id, $props, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$unset', $props, $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Increments the value of a property on a user record. If the profile does not exist, it creates it and sets the
     * property to the increment value.
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param $prop string the property to increment
     * @param int $val the amount to increment the property by
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function increment($distinct_id, $prop, $val, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$add', array("$prop" => $val), $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Adds $val to a list located at $prop. If the property does not exist, it will be created. If $val is a string
     * and the list is empty or does not exist, a new list with one value will be created.
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param string $prop the property that holds the list
     * @param string|array $val items to add to the list
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function append($distinct_id, $prop, $val, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $operation = gettype($val) == "array" ? '$union' : '$append';
        $payload = $this->_constructPayload($distinct_id, $operation, array("$prop" => $val), $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Adds a transaction to the user's profile for revenue tracking
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param string $amount the transaction amount e.g. "20.50"
     * @param null $timestamp the timestamp of when the transaction occurred (default to current timestamp)
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function trackCharge($distinct_id, $amount, $timestamp = null, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $timestamp = $timestamp == null ? time() : $timestamp;
        $date_iso = date("c", $timestamp);
        $transaction = array(
            '$time' => $date_iso,
            '$amount' => $amount
        );
        $val = array('$transactions' => $transaction);
        $payload = $this->_constructPayload($distinct_id, '$append', $val, $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Clear all transactions stored on a user's profile
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function clearCharges($distinct_id, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$set', array('$transactions' => array()), $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Delete this profile from Mixpanel
     * @param string|int $distinct_id the distinct_id or alias of a user
     * @param string|null $ip the ip address of the client (used for geo-location)
     * @param boolean $ignore_time If the $ignore_time property is true, Mixpanel will not automatically update the "Last Seen" property of the profile. Otherwise, Mixpanel will add a "Last Seen" property associated with the current time
     * @param boolean $ignore_alias If the $ignore_alias property is true, an alias look up will not be performed after ingestion. Otherwise, a lookup for the distinct ID will be performed, and replaced if a match is found     
     */
    public function deleteUser($distinct_id, $ip = null, $ignore_time = false, $ignore_alias = false) {
        $payload = $this->_constructPayload($distinct_id, '$delete', "", $ip, $ignore_time, $ignore_alias);
        $this->enqueue($payload);
    }

    /**
     * Returns the "engage" endpoint
     * @return string
     */
    function _getEndpoint() {
        return $this->_options['people_endpoint'];
    }

}
PK     ‘ŠU] y¡lþ  þ  D  vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelEvents.phpnu „[µü¤        <?php

/**
 * Provides an API to track events on Mixpanel
 */
class WPMedia_Producers_MixpanelEvents extends WPMedia_Producers_MixpanelBaseProducer {

    /**
     * An array of properties to attach to every tracked event
     * @var array
     */
    private $_super_properties = array("mp_lib" => "php");


    /**
     * Track an event defined by $event associated with metadata defined by $properties
     * @param string $event
     * @param array $properties
     */
    public function track($event, $properties = array()) {

        // if no token is passed in, use current token
        if (!isset($properties["token"])) $properties['token'] = $this->_token;

        // if no time is passed in, use the current time
        if (!isset($properties["time"])) $properties['time'] = microtime(true);

        $params['event'] = $event;
        $params['properties'] = array_merge($this->_super_properties, $properties);

        $this->enqueue($params);
    }


    /**
     * Register a property to be sent with every event. If the property has already been registered, it will be
     * overwritten.
     * @param string $property
     * @param mixed $value
     */
    public function register($property, $value) {
        $this->_super_properties[$property] = $value;
    }


    /**
     * Register multiple properties to be sent with every event. If any of the properties have already been registered,
     * they will be overwritten.
     * @param array $props_and_vals
     */
    public function registerAll($props_and_vals = array()) {
        foreach($props_and_vals as $property => $value) {
            $this->register($property, $value);
        }
    }


    /**
     * Register a property to be sent with every event. If the property has already been registered, it will NOT be
     * overwritten.
     * @param $property
     * @param $value
     */
    public function registerOnce($property, $value) {
        if (!isset($this->_super_properties[$property])) {
            $this->register($property, $value);
        }
    }


    /**
     * Register multiple properties to be sent with every event. If any of the properties have already been registered,
     * they will NOT be overwritten.
     * @param array $props_and_vals
     */
    public function registerAllOnce($props_and_vals = array()) {
        foreach($props_and_vals as $property => $value) {
            if (!isset($this->_super_properties[$property])) {
                $this->register($property, $value);
            }
        }
    }


    /**
     * Un-register an property to be sent with every event.
     * @param string $property
     */
    public function unregister($property) {
        unset($this->_super_properties[$property]);
    }


    /**
     * Un-register a list of properties to be sent with every event.
     * @param array $properties
     */
    public function unregisterAll($properties) {
        foreach($properties as $property) {
            $this->unregister($property);
        }
    }


    /**
     * Get a property that is set to be sent with every event
     * @param string $property
     * @return mixed
     */
    public function getProperty($property) {
        return $this->_super_properties[$property];
    }


    /**
     * Identify the user you want to associate to tracked events. The $anon_id must be UUID v4 format (optionally with the
     * prefix '$device:') and not already merged to an $identified_id. All identify calls with a new and valid $anon_id will
     * trigger a track $identify event, and merge to the $identified_id.
     * @param string|int $user_id
     * @param string|int $anon_id [optional]
     */
    public function identify($user_id, $anon_id = null) {
        $this->register("distinct_id", $user_id);

        $UUIDv4 = '/^(\$device:)?[a-zA-Z0-9]*-[a-zA-Z0-9]*-[a-zA-Z0-9]*-[a-zA-Z0-9]*-[a-zA-Z0-9]*$/i';
        if (!empty($anon_id)) {
            if (preg_match($UUIDv4, $anon_id) !== 1) {
                /* not a valid uuid */
                error_log("Running Identify method (identified_id: $user_id, anon_id: $anon_id) failed, anon_id not in UUID v4 format");
            } else {
                $this->track('$identify', array(
                    '$identified_id' => $user_id,
                    '$anon_id'       => $anon_id
                ));
            }
        }
    }


    /**
     * An alias to be merged with the distinct_id. Each alias can only map to one distinct_id.
     * This is helpful when you want to associate a generated id (such as a session id) to a user id or username.
     *
     * Because aliasing can be extremely vulnerable to race conditions and ordering issues, we'll make a synchronous
     * call directly to Mixpanel when this method is called. If it fails we'll throw an Exception as subsequent
     * events are likely to be incorrectly tracked.
     * @param string|int $distinct_id
     * @param string|int $alias
     * @return array $msg
     * @throws Exception
     */
    public function createAlias($distinct_id, $alias) {
        $msg = array(
            "event"         => '$create_alias',
            "properties"    =>  array("distinct_id" => $distinct_id, "alias" => $alias, "token" => $this->_token)
        );

        // Save the current fork/async options
        $old_fork = isset($this->_options['fork']) ? $this->_options['fork'] : false;
        $old_async = isset($this->_options['async']) ? $this->_options['async'] : false;

        // Override fork/async to make the new consumer synchronous
        $this->_options['fork'] = false;
        $this->_options['async'] = false;

        // The name is ambiguous, but this creates a new consumer with current $this->_options
        $consumer = $this->_getConsumer();
        $success = $consumer->persist(array($msg));

        // Restore the original fork/async settings
        $this->_options['fork'] = $old_fork;
        $this->_options['async'] = $old_async;

        if (!$success) {
            error_log("Creating Mixpanel Alias (distinct id: $distinct_id, alias: $alias) failed");
            throw new Exception("Tried to create an alias but the call was not successful");
        } else {
            return $msg;
        }
    }


    /**
     * Returns the "events" endpoint
     * @return string
     */
    function _getEndpoint() {
        return $this->_options['events_endpoint'];
    }
}
PK     ‘ŠU]O²b:  :  =  vendor/wp-media/wp-mixpanel/src/Classes/Base/MixpanelBase.phpnu „[µü¤        <?php

/**
 * This a Base class which all Mixpanel classes extend from to provide some very basic
 * debugging and logging functionality. It also serves to persist $_options across the library.
 *
 */
class WPMedia_Base_MixpanelBase {


    /**
     * Default options that can be overridden via the $options constructor arg
     * @var array
     */
    private $_defaults = array(
        "max_batch_size"    => 50, // the max batch size Mixpanel will accept is 50,
        "max_queue_size"    => 1000, // the max num of items to hold in memory before flushing
        "debug"             => false, // enable/disable debug mode
        "consumer"          => "curl", // which consumer to use
        "host"              => "api.mixpanel.com", // the host name for api calls
        "events_endpoint"   => "/track", // host relative endpoint for events
        "people_endpoint"   => "/engage", // host relative endpoint for people updates
        "groups_endpoint"   => "/groups", // host relative endpoint for groups updates
        "use_ssl"           => true, // use ssl when available
        "error_callback"    => null // callback to use on consumption failures
    );


    /**
     * An array of options to be used by the Mixpanel library.
     * @var array
     */
    protected $_options = array();


    /**
     * Construct a new MixpanelBase object and merge custom options with defaults
     * @param array $options
     */
    public function __construct($options = array()) {
        $options = array_merge($this->_defaults, $options);
        $this->_options = $options;
    }


    /**
     * Log a message to PHP's error log
     * @param $msg
     */
    protected function _log($msg) {
        $arr = debug_backtrace();
        $class = $arr[0]['class'];
        $line = $arr[0]['line'];
        error_log ( "[ $class - line $line ] : " . $msg );
    }


    /**
     * Returns true if in debug mode, false if in production mode
     * @return bool
     */
    protected function _debug() {
        return isset($this->_options["debug"]) && $this->_options["debug"] == true;
    }

}
PK     ‘ŠU](sf""$  "$  4  vendor/wp-media/wp-mixpanel/src/Classes/Mixpanel.phpnu „[µü¤        <?php

/**
 * This is the main class for the Mixpanel PHP Library which provides all of the methods you need to track events,
  * create/update profiles and group profiles.
 *
 * Architecture
 * -------------
 *
 * This library is built such that all messages are buffered in an in-memory "queue"
 * The queue will be automatically flushed at the end of every request. Alternatively, you can call "flush()" manually
 * at any time. Flushed messages will be passed to a Consumer's "persist" method. The library comes with a handful of
 * Consumers. The "CurlConsumer" is used by default which will send the messages to Mixpanel using forked cURL processes.
 * You can implement your own custom Consumer to customize how a message is sent to Mixpanel. This can be useful when
 * you want to put messages onto a distributed queue (such as ActiveMQ or Kestrel) instead of writing to Mixpanel in
 * the user thread.
 *
 * Options
 * -------------
 *
 * <table width="100%" cellpadding="5">
 *  <tr>
 *      <th>Option</th>
 *      <th>Description</th>
 *      <th>Default</th>
 *  </tr>
 *  <tr>
 *      <td>max_queue_size</td>
 *      <td>The maximum number of items to buffer in memory before flushing</td>
 *      <td>1000</td>
 *  </tr>
 *  <tr>
 *      <td>debug</td>
 *      <td>Enable/disable debug mode</td>
 *      <td>false</td>
 *  </tr>
 *  <tr>
 *      <td>consumer</td>
 *      <td>The consumer to use for writing messages</td>
 *      <td>curl</td>
 *  </tr>
 *  <tr>
 *      <td>consumers</td>
 *      <td>An array of custom consumers in the format array(consumer_key => class_name)</td>
 *      <td>null</td>
 *  </tr>
 *  <tr>
 *      <td>host</td>
 *      <td>The host name for api calls (used by some consumers)</td>
 *      <td>api.mixpanel.com</td>
 *  </tr>
 *  <tr>
 *      <td>events_endpoint</td>
 *      <td>The endpoint for tracking events (relative to the host)</td>
 *      <td>/events</td>
 *  </tr>
 *  <tr>
 *      <td>people_endpoint</td>
 *      <td>The endpoint for making people updates (relative to the host)</td>
 *      <td>/engage</td>
 *  </tr>
 *  <tr>
 *      <td>use_ssl</td>
 *      <td>Tell the consumer whether or not to use ssl (when available)</td>
 *      <td>true</td>
 *  </tr>
 *  <tr>
 *      <td>error_callback</td>
 *      <td>The name of a function to be called on consumption failures</td>
 *      <td>null</td>
 *  </tr>
 *  <tr>
 *      <td>connect_timeout</td>
 *      <td>In both the SocketConsumer and CurlConsumer, this is used for the connection timeout (i.e. How long it has take to actually make a connection).
 *      <td>5</td>
 *  </tr>
 *  <tr>
 *      <td>timeout</td>
 *      <td>In the CurlConsumer (non-forked), it is used to determine how long the cURL call has to execute.
 *      <td>30</td>
 *  </tr>
 * </table>
 *
 * Example: Tracking an Event
 * -------------
 *
 * $mp = Mixpanel::getInstance("MY_TOKEN");
 *
 * $mp->track("My Event");
 *
 * Example: Setting Profile Properties
 * -------------
 *
 * $mp = Mixpanel::getInstance("MY_TOKEN", array("use_ssl" => false));
 *
 * $mp->people->set(12345, array(
 * '$first_name'       => "John",
 * '$last_name'        => "Doe",
 * '$email'            => "john.doe@example.com",
 * '$phone'            => "5555555555",
 * 'Favorite Color'    => "red"
 * ));
 *
 */
class WPMedia_Mixpanel extends WPMedia_Base_MixpanelBase {


    /**
     * An instance of the MixpanelPeople class (used to create/update profiles)
     * @var WPMedia_Producers_MixpanelPeople
     */
    public $people;


    /**
     * An instance of the MixpanelEvents class
     * @var WPMedia_Producers_MixpanelEvents
     */
    private $_events;

    /**
     * An instance of the MixpanelGroups class (used to create/update group profiles)
     * @var WPMedia_Producers_MixpanelPeople
     */
    public $group;
 


    /**
     * Instances' list of the Mixpanel class (for singleton use, splitted by token)
     * @var WPMedia_Mixpanel[]
     */
    private static $_instances = array();
    

    /**
     * Instantiates a new Mixpanel instance.
     * @param $token
     * @param array $options
     */
    public function __construct($token, $options = array()) {
        parent::__construct($options);
        $this->people = new WPMedia_Producers_MixpanelPeople($token, $options);
        $this->_events = new WPMedia_Producers_MixpanelEvents($token, $options);
        $this->group = new WPMedia_Producers_MixpanelGroups($token, $options);
    }


    /**
     * Returns a singleton instance of Mixpanel
     * @param $token
     * @param array $options
     * @return WPMedia_Mixpanel
     */
    public static function getInstance($token, $options = array()) {
        if(!isset(self::$_instances[$token])) {
            self::$_instances[$token] = new WPMedia_Mixpanel($token, $options);
        }
        return self::$_instances[$token];
    }


    /**
     * Add an array representing a message to be sent to Mixpanel to the in-memory queue.
     * @param array $message
     */
    public function enqueue($message = array()) {
        $this->_events->enqueue($message);
    }


    /**
     * Add an array representing a list of messages to be sent to Mixpanel to a queue.
     * @param array $messages
     */
    public function enqueueAll($messages = array()) {
        $this->_events->enqueueAll($messages);
    }


    /**
     * Flush the events queue
     * @param int $desired_batch_size
     */
    public function flush($desired_batch_size = 50) {
        $this->_events->flush($desired_batch_size);
    }


    /**
     * Empty the events queue
     */
    public function reset() {
        $this->_events->reset();
    }


    /**
     * Identify the user you want to associate to tracked events. The $anon_id must be UUID v4 format and not already merged to an $identified_id.
     * All identify calls with a new and valid $anon_id will trigger a track $identify event, and merge to the $identified_id.
     * @param string|int $user_id
     * @param string|int $anon_id [optional]
     */
    public function identify($user_id, $anon_id = null) {
        $this->_events->identify($user_id, $anon_id);
    }

    /**
     * Track an event defined by $event associated with metadata defined by $properties
     * @param string $event
     * @param array $properties
     */
    public function track($event, $properties = array()) {
        $this->_events->track($event, $properties);
    }


    /**
     * Register a property to be sent with every event.
     *
     * If the property has already been registered, it will be
     * overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
     * @param string $property
     * @param mixed $value
     */
    public function register($property, $value) {
        $this->_events->register($property, $value);
    }


    /**
     * Register multiple properties to be sent with every event.
     *
     * If any of the properties have already been registered,
     * they will be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
     * instance.
     * @param array $props_and_vals
     */
    public function registerAll($props_and_vals = array()) {
        $this->_events->registerAll($props_and_vals);
    }


    /**
     * Register a property to be sent with every event.
     *
     * If the property has already been registered, it will NOT be
     * overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class instance.
     * @param $property
     * @param $value
     */
    public function registerOnce($property, $value) {
        $this->_events->registerOnce($property, $value);
    }


    /**
     * Register multiple properties to be sent with every event.
     *
     * If any of the properties have already been registered,
     * they will NOT be overwritten. NOTE: Registered properties are only persisted for the life of the Mixpanel class
     * instance.
     * @param array $props_and_vals
     */
    public function registerAllOnce($props_and_vals = array()) {
        $this->_events->registerAllOnce($props_and_vals);
    }


    /**
     * Un-register an property to be sent with every event.
     * @param string $property
     */
    public function unregister($property) {
        $this->_events->unregister($property);
    }


    /**
     * Un-register a list of properties to be sent with every event.
     * @param array $properties
     */
    public function unregisterAll($properties) {
        $this->_events->unregisterAll($properties);
    }


    /**
     * Get a property that is set to be sent with every event
     * @param string $property
     * @return mixed
     */
    public function getProperty($property)
    {
        return $this->_events->getProperty($property);
    }


    /**
     * An alias to be merged with the distinct_id. Each alias can only map to one distinct_id.
     * This is helpful when you want to associate a generated id (such as a session id) to a user id or username.
     * @param string|int $distinct_id
     * @param string|int $alias
     */
    public function createAlias($distinct_id, $alias) {
        $this->_events->createAlias($distinct_id, $alias);
    }
}
PK     ‘ŠU]ãúQ[e  e  O  vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/AbstractConsumer.phpnu „[µü¤        <?php

/**
 * Provides some base methods for use by a Consumer implementation
 */
abstract class WPMedia_ConsumerStrategies_AbstractConsumer extends WPMedia_Base_MixpanelBase {

    /**
     * Creates a new AbstractConsumer
     * @param array $options
     */
    function __construct($options = array()) {

        parent::__construct($options);

        if ($this->_debug()) {
            $this->_log("Instantiated new Consumer");
        }

    }

    /**
     * Encode an array to be persisted
     * @param array $params
     * @return string
     */
    protected function _encode($params) {
        return base64_encode(json_encode($params));
    }

    /**
     * Handles errors that occur in a consumer
     * @param $code
     * @param $msg
     */
    protected function _handleError($code, $msg) {
        if (isset($this->_options['error_callback'])) {
            $handler = $this->_options['error_callback'];
            call_user_func($handler, $code, $msg);
        }

        if ($this->_debug()) {
            $arr = debug_backtrace();
            $class = get_class($arr[0]['object']);
            $line = $arr[0]['line'];
            error_log ( "[ $class - line $line ] : " . print_r($msg, true) );
        }
    }

    /**
     * Number of requests/batches that will be processed in parallel.
     * @return int
     */
    public function getNumThreads() {
        return 1;
    }

    /**
     * Persist a batch of messages in whatever way the implementer sees fit
     * @param array $batch an array of messages to consume
     * @return boolean success or fail
     */
    abstract function persist($batch);
}PK     ‘ŠU]¿ÏzÎ  Î  K  vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/CurlConsumer.phpnu „[µü¤        <?php

/**
 * Consumes messages and sends them to a host/endpoint using cURL
 */
class WPMedia_ConsumerStrategies_CurlConsumer extends WPMedia_ConsumerStrategies_AbstractConsumer {

    /**
     * @var string the host to connect to (e.g. api.mixpanel.com)
     */
    protected $_host;


    /**
     * @var string the host-relative endpoint to write to (e.g. /engage)
     */
    protected $_endpoint;


    /**
     * @var int connect_timeout The number of seconds to wait while trying to connect. Default is 5 seconds.
     */
    protected $_connect_timeout;


    /**
     * @var int timeout The maximum number of seconds to allow cURL call to execute. Default is 30 seconds.
     */
    protected $_timeout;


    /**
     * @var string the protocol to use for the cURL connection
     */
    protected $_protocol;


    /**
     * @var bool|null true to fork the cURL process (using exec) or false to use PHP's cURL extension. false by default
     */
    protected $_fork = null;


    /**
     * @var int number of cURL requests to run in parallel. 1 by default
     */
    protected $_num_threads;


    /**
     * Creates a new CurlConsumer and assigns properties from the $options array
     * @param array $options
     * @throws Exception
     */
    function __construct($options) {
        parent::__construct($options);

        $this->_host = $options['host'];
        $this->_endpoint = $options['endpoint'];
        $this->_connect_timeout = isset($options['connect_timeout']) ? $options['connect_timeout'] : 5;
        $this->_timeout = isset($options['timeout']) ? $options['timeout'] : 30;
        $this->_protocol = isset($options['use_ssl']) && $options['use_ssl'] == true ? "https" : "http";
        $this->_fork = isset($options['fork']) ? ($options['fork'] == true) : false;
        $this->_num_threads = isset($options['num_threads']) ? max(1, intval($options['num_threads'])) : 1;

        // ensure the environment is workable for the given settings
        if ($this->_fork == true) {
            $exists = function_exists('exec');
            if (!$exists) {
                throw new Exception('The "exec" function must exist to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
            }
            $disabled = explode(', ', ini_get('disable_functions'));
            $enabled = !in_array('exec', $disabled);
            if (!$enabled) {
                throw new Exception('The "exec" function must be enabled to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
            }
        } else {
            if (!function_exists('curl_init')) {
                throw new Exception('The cURL PHP extension is required to use the cURL consumer with fork = false. Try setting fork = true or use another consumer.');
            }
        }
    }


    /**
     * Write to the given host/endpoint using either a forked cURL process or using PHP's cURL extension
     * @param array $batch
     * @return bool
     */
    public function persist($batch) {
        if (count($batch) > 0) {
            $url = $this->_protocol . "://" . $this->_host . $this->_endpoint;
            if ($this->_fork) {
                $data = "data=" . $this->_encode($batch);
                return $this->_execute_forked($url, $data);
            } else {
                return $this->_execute($url, $batch);
            }
        } else {
            return true;
        }
    }


    /**
     * Write using the cURL php extension
     * @param $url
     * @param $batch
     * @return bool
     */
    protected function _execute($url, $batch) {
        if ($this->_debug()) {
            $this->_log("Making blocking cURL call to $url");
        }

        $mh = curl_multi_init();
        $chs = array();

        $batch_size = ceil(count($batch) / $this->_num_threads);
        for ($i=0; $i<$this->_num_threads && !empty($batch); $i++) {
            $ch = curl_init();
            $chs[] = $ch;
            $data = "data=" . $this->_encode(array_splice($batch, 0, $batch_size));
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_connect_timeout);
            curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_multi_add_handle($mh,$ch);
        }

        $running = 0;

        do {
            curl_multi_exec($mh, $running);
            curl_multi_select($mh);
        } while ($running > 0);

        $info = curl_multi_info_read($mh);

        $error = false;
        foreach ($chs as $ch) {
            $response = curl_multi_getcontent($ch);
            if (false === $response) {
                $this->_handleError(curl_errno($ch), curl_error($ch));
                $error = true;
            }
            elseif ("1" != trim($response)) {
                $this->_handleError(0, $response);
                $error = true;
            }
            curl_multi_remove_handle($mh, $ch);
        }

        if (CURLE_OK != $info['result']) {
            $this->_handleError($info['result'], "cURL error with code=".$info['result']);
            $error = true;
        }

        curl_multi_close($mh);
        return !$error;
    }


    /**
     * Write using a forked cURL process
     * @param $url
     * @param $data
     * @return bool
     */
    protected function _execute_forked($url, $data) {

        if ($this->_debug()) {
            $this->_log("Making forked cURL call to $url");
        }

        $exec = 'curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d ' . $data . ' "' . $url . '"';

        if(!$this->_debug()) {
            $exec .= " >/dev/null 2>&1 &";
        }

        exec($exec, $output, $return_var);

        if ($return_var != 0) {
            $this->_handleError($return_var, $output);
        }

        return $return_var == 0;
    }

    /**
     * @return int
     */
    public function getConnectTimeout()
    {
        return $this->_connect_timeout;
    }

    /**
     * @return string
     */
    public function getEndpoint()
    {
        return $this->_endpoint;
    }

    /**
     * @return bool|null
     */
    public function getFork()
    {
        return $this->_fork;
    }

    /**
     * @return string
     */
    public function getHost()
    {
        return $this->_host;
    }

    /**
     * @return array
     */
    public function getOptions()
    {
        return $this->_options;
    }

    /**
     * @return string
     */
    public function getProtocol()
    {
        return $this->_protocol;
    }

    /**
     * @return int
     */
    public function getTimeout()
    {
        return $this->_timeout;
    }


    /**
     * Number of requests/batches that will be processed in parallel using curl_multi_exec.
     * @return int
     */
    public function getNumThreads() {
        return $this->_num_threads;
    }
}
PK     ‘ŠU]�ŒF×Ä  Ä  K  vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/FileConsumer.phpnu „[µü¤        <?php

/**
 * Consumes messages and writes them to a file
 */
class WPMedia_ConsumerStrategies_FileConsumer extends WPMedia_ConsumerStrategies_AbstractConsumer {

    /**
     * @var string path to a file that we want to write the messages to
     */
    private $_file;


    /**
     * Creates a new FileConsumer and assigns properties from the $options array
     * @param array $options
     */
    function __construct($options) {
        parent::__construct($options);

        // what file to write to?
        $this->_file = isset($options['file']) ? $options['file'] :  dirname(__FILE__)."/../../messages.txt";
    }


    /**
     * Append $batch to a file
     * @param array $batch
     * @return bool
     */
    public function persist($batch) {
        if (count($batch) > 0) {
            return file_put_contents($this->_file, json_encode($batch)."\n", FILE_APPEND | LOCK_EX) !== false;
        } else {
            return true;
        }
    }
}
PK     ‘ŠU]?•©!÷#  ÷#  M  vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/SocketConsumer.phpnu „[µü¤        <?php
/**
 * Portions of this class were borrowed from
 * https://github.com/segmentio/analytics-php/blob/master/lib/Analytics/Consumer/Socket.php.
 * Thanks for the work!
 *
 * WWWWWW||WWWWWW
 * W W W||W W W
 * ||
 * ( OO )__________
 * /  |           \
 * /o o|    MIT     \
 * \___/||_||__||_|| *
 * || ||  || ||
 * _||_|| _||_||
 * (__|__|(__|__|
 * (The MIT License)
 *
 * Copyright (c) 2013 Segment.io Inc. friends@segment.io
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
 * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
require_once(dirname(__FILE__) . "/AbstractConsumer.php");

/**
 * Consumes messages and writes them to host/endpoint using a persistent socket
 */
class WPMedia_ConsumerStrategies_SocketConsumer extends WPMedia_ConsumerStrategies_AbstractConsumer {

    /**
     * @var string the host to connect to (e.g. api.mixpanel.com)
     */
    private $_host;


    /**
     * @var string the host-relative endpoint to write to (e.g. /engage)
     */
    private $_endpoint;


    /**
     * @var int connect_timeout the socket connection timeout in seconds
     */
    private $_connect_timeout;


    /**
     * @var string the protocol to use for the socket connection
     */
    private $_protocol;


    /**
     * @var resource holds the socket resource
     */
    private $_socket;

    /**
     * @var bool whether or not to wait for a response
     */
    private $_async;

    /**
     * @var int the port to use for the socket connection
     */
    private $_port;


    /**
     * Creates a new SocketConsumer and assigns properties from the $options array
     * @param array $options
     */
    public function __construct($options = array()) {
        parent::__construct($options);


        $this->_host = $options['host'];
        $this->_endpoint = $options['endpoint'];
        $this->_connect_timeout = isset($options['connect_timeout']) ? $options['connect_timeout'] : 5;
        $this->_async = isset($options['async']) && $options['async'] === false ? false : true;

        if (array_key_exists('use_ssl', $options) && $options['use_ssl'] == true) {
            $this->_protocol = "ssl";
            $this->_port = 443;
        } else {
            $this->_protocol = "tcp";
            $this->_port = 80;
        }
    }


    /**
     * Write using a persistent socket connection.
     * @param array $batch
     * @return bool
     */
    public function persist($batch) {

        $socket = $this->_getSocket();
        if (!is_resource($socket)) {
            return false;
        }

        $data = "data=".$this->_encode($batch);

        $body = "";
        $body.= "POST ".$this->_endpoint." HTTP/1.1\r\n";
        $body.= "Host: " . $this->_host . "\r\n";
        $body.= "Content-Type: application/x-www-form-urlencoded\r\n";
        $body.= "Accept: application/json\r\n";
        $body.= "Content-length: " . strlen($data) . "\r\n";
        $body.= "\r\n";
        $body.= $data;

        return $this->_write($socket, $body);
    }


    /**
     * Return cached socket if open or create a new persistent socket
     * @return bool|resource
     */
    private function _getSocket() {
        if(is_resource($this->_socket)) {

            if ($this->_debug()) {
                $this->_log("Using existing socket");
            }

            return $this->_socket;
        } else {

            if ($this->_debug()) {
                $this->_log("Creating new socket at ".time());
            }

            return $this->_createSocket();
        }
    }

    /**
     * Attempt to open a new socket connection, cache it, and return the resource
     * @param bool $retry
     * @return bool|resource
     */
    private function _createSocket($retry = true) {
        try {
            $socket = pfsockopen($this->_protocol . "://" . $this->_host, $this->_port, $err_no, $err_msg, $this->_connect_timeout);

            if ($this->_debug()) {
                $this->_log("Opening socket connection to " . $this->_protocol . "://" . $this->_host . ":" . $this->_port);
            }

            if ($err_no != 0) {
                $this->_handleError($err_no, $err_msg);
                return $retry == true ? $this->_createSocket(false) : false;
            } else {
                // cache the socket
                $this->_socket = $socket;
                return $socket;
            }

        } catch (Exception $e) {
            $this->_handleError($e->getCode(), $e->getMessage());
            return $retry == true ? $this->_createSocket(false) : false;
        }
    }

    /**
     * Attempt to close and dereference a socket resource
     */
    private function _destroySocket() {
        $socket = $this->_socket;
        $this->_socket = null;
        fclose($socket);
    }


    /**
     * Write $data through the given $socket
     * @param $socket
     * @param $data
     * @param bool $retry
     * @return bool
     */
    private function _write($socket, $data, $retry = true) {

        $bytes_sent = 0;
        $bytes_total = strlen($data);
        $socket_closed = false;
        $success = true;
        $max_bytes_per_write = 8192;

        // if we have no data to write just return true
        if ($bytes_total == 0) {
            return true;
        }

        // try to write the data
        while (!$socket_closed && $bytes_sent < $bytes_total) {

            try {
                $bytes = fwrite($socket, $data, $max_bytes_per_write);

                if ($this->_debug()) {
                    $this->_log("Socket wrote ".$bytes." bytes");
                }

                // if we actually wrote data, then remove the written portion from $data left to write
                if ($bytes > 0) {
                    $data = substr($data, $max_bytes_per_write);
                }

            } catch (Exception $e) {
                $this->_handleError($e->getCode(), $e->getMessage());
                $socket_closed = true;
            }

            if (isset($bytes) && $bytes) {
                $bytes_sent += $bytes;
            } else {
                $socket_closed = true;
            }
        }

        // create a new socket if the current one is closed and retry the message
        if ($socket_closed) {

            $this->_destroySocket();

            if ($retry) {
                if ($this->_debug()) {
                    $this->_log("Retrying socket write...");
                }
                $socket = $this->_getSocket();
                if ($socket) return $this->_write($socket, $data, false);
            }

            return false;
        }


        // only wait for the response in debug mode or if we explicitly want to be synchronous
        if ($this->_debug() || !$this->_async) {
            $res = $this->handleResponse(fread($socket, 2048));
            if ($res["status"] != "200") {
                $this->_handleError($res["status"], $res["body"]);
                $success = false;
            }
        }

        return $success;
    }


    /**
     * Parse the response from a socket write (only used for debugging)
     * @param $response
     * @return array
     */
    private function handleResponse($response) {

        $lines = explode("\n", $response);

        // extract headers
        $headers = array();
        foreach($lines as $line) {
            $kvsplit = explode(":", $line);
            if (count($kvsplit) == 2) {
                $header = $kvsplit[0];
                $value = $kvsplit[1];
                $headers[$header] = trim($value);
            }

        }

        // extract status
        $line_one_exploded = explode(" ", $lines[0]);
        $status = $line_one_exploded[1];

        // extract body
        $body = $lines[count($lines) - 1];

        // if the connection has been closed lets kill the socket
        if (isset($headers["Connection"]) and $headers['Connection'] == "close") {
            $this->_destroySocket();
            if ($this->_debug()) {
                $this->_log("Server told us connection closed so lets destroy the socket so it'll reconnect on next call");
            }
        }

        $ret = array(
            "status"  => $status,
            "body" => $body,
        );

        return $ret;
    }


}
PK     ‘ŠU]ŠÌß      uninstall.phpnu „[µü¤        <?php
/**
 * Fired when the plugin is uninstalled.
 *
 * When populating this file, consider the following flow
 * of control:
 *
 * - This method should be static
 * - Check if the $_REQUEST content actually is the plugin name
 * - Run an admin referrer check to make sure it goes through authentication
 * - Verify the output of $_GET makes sense
 * - Repeat with other user roles. Best directly by using the links/query string parameters.
 * - Repeat things for multisite. Once for a single site in the network, once sitewide.
 *
 * This file may be updated more in future version of the Boilerplate; however, this is the
 * general skeleton and outline for how the file should work.
 *
 * @link    https://rankmath.com
 * @since   0.9.0
 * @package RANK_MATH
 */

// If uninstall not called from WordPress, then exit.
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
	exit;
}

// Clear scheduled tasks.
if ( class_exists( 'ActionScheduler_QueueRunner' ) ) {
	ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request();
}
if ( class_exists( 'ActionScheduler_DBStore' ) ) {
	ActionScheduler_DBStore::instance()->cancel_actions_by_group( 'rank-math' );
}

// Set rank_math_clear_data_on_uninstall to TRUE to delete all data on uninstall.
if ( true === apply_filters( 'rank_math_clear_data_on_uninstall', false ) ) {

	if ( ! is_multisite() ) {
		rank_math_remove_data();
		return;
	}

	global $wpdb;

	$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs WHERE archived = '0' AND spam = '0' AND deleted = '0'" );
	if ( ! empty( $blog_ids ) ) {
		foreach ( $blog_ids as $site_id ) {
			switch_to_blog( $site_id );
			rank_math_remove_data();
			restore_current_blog();
		}
	}
}

/**
 * Removes ALL plugin data
 *
 * @since 1.0.35
 */
function rank_math_remove_data() {
	// Delete all options.
	rank_math_delete_options();

	// Delete meta for post, user and term.
	rank_math_delete_meta( 'post' );
	rank_math_delete_meta( 'user' );
	rank_math_delete_meta( 'term' );

	// Drop Tables.
	rank_math_drop_table( '404_logs' );
	rank_math_drop_table( 'redirections' );
	rank_math_drop_table( 'redirections_cache' );
	rank_math_drop_table( 'internal_links' );
	rank_math_drop_table( 'internal_meta' );
	rank_math_drop_table( 'analytics_gsc' );
	rank_math_drop_table( 'analytics_objects' );
	rank_math_drop_table( 'analytics_inspections' );

	// Remove Capabilities.
	/**
	 * PSR-4 Autoload.
	 */
	include __DIR__ . '/vendor/autoload.php';

	\RankMath\Role_Manager\Capability_Manager::get()->remove_capabilities();

	// Clear any cached data that has been removed.
	wp_cache_flush();
}

/**
 * Delete options.
 *
 * @return void
 */
function rank_math_delete_options() {
	global $wpdb;

	$where = $wpdb->prepare( 'WHERE option_name LIKE %s OR option_name LIKE %s', '%' . $wpdb->esc_like( 'rank-math' ) . '%', '%' . $wpdb->esc_like( 'rank_math' ) . '%' );
	$wpdb->query( "DELETE FROM {$wpdb->prefix}options {$where}" ); // phpcs:ignore
}

/**
 * Delete post meta.
 *
 * @param string $table Table name.
 * @return void
 */
function rank_math_delete_meta( $table = 'post' ) {
	global $wpdb;

	$where = $wpdb->prepare( 'WHERE meta_key LIKE %s OR meta_key LIKE %s', '%' . $wpdb->esc_like( 'rank-math' ) . '%', '%' . $wpdb->esc_like( 'rank_math' ) . '%' );
	$wpdb->query( "DELETE FROM {$wpdb->prefix}{$table}meta {$where}" ); // phpcs:ignore
}

/**
 * Drop table from database
 *
 * @param string $name Name of table.
 * @return void
 */
function rank_math_drop_table( $name ) {
	global $wpdb;

	$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}rank_math_{$name}" ); // phpcs:ignore
}
PK     ‘ŠU]TåqÒü  ü    assets/vendor/diacritics/ru.phpnu „[µü¤        <?php
/**
 * Credit (https://www.russianlessons.net/lessons/lesson1_alphabet.php)
 */
return['A'=> '[\u0410\u0430]', 'B'=> '[\u0411\u0431]', 'V'=> '[\u0412\u0432]', 'G'=> '[\u0413\u0433]', 'D'=> '[\u0414\u0434]', 'YE'=> '[\u0415\u0435]', 'YO'=> '[\u0401\u0451]', 'ZH'=> '[\u0416\u0436]', 'Z'=> '[\u0417\u0437]', 'EE'=> '[\u0418\u0438]', 'YI'=> '[\u0419\u0439]', 'K'=> '[\u041A\u043A]', 'L'=> '[\u041B\u043B]', 'M'=> '[\u041C\u043c]', 'P'=> '[\u041F\u043F]', 'T'=> '[\u0422\u0442]', 'U'=> '[\u0423\u0443]', 'F'=> '[\u0424\u0444]', 'H'=> '[\u0425\u0445]', 'TS'=> '[\u0426\u0446]', 'CH'=> '[\u0427\u0447]', 'SH'=> '[\u0428\u0448\u0429\u0449]', 'I'=> '[\u042B\u044B]', 'E'=> '[\u042D\u044D]', 'YU'=> '[\u042E\u044E]', 'YA'=> '[\u042F\u044F]', 'N'=> '[\u041D\u043D]'];
PK     ‘ŠU]­¤´ÿ  ÿ    assets/vendor/diacritics/en.phpnu „[µü¤        <?php
/**
 * Credit lukemadhanga (https://coderwall.com/p/wzpdgq/strip-accents-diacritics-from-a-string-in-javascript)
 *
 * @see https://developer.wordpress.org/reference/functions/remove_accents/ Function used to handle accents in WordPress.
 */
return['A'=>'[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F\u00C5]','AA'=>'[\uA732]','AE'=>'[\u01FC\u01E2]','Ae'=>'[\u00C6]','AO'=>'[\uA734]','AU'=>'[\uA736]','AV'=>'[\uA738\uA73A]','AY'=>'[\uA73C]','B'=>'[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]','C'=>'[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]','D'=>'[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]','DZ'=>'[\u01F1\u01C4]','Dz'=>'[\u01F2\u01C5]','E'=>'[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]','F'=>'[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]','G'=>'[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]','H'=>'[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]','I'=>'[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]','J'=>'[\u004A\u24BF\uFF2A\u0134\u0248]','K'=>'[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]','L'=>'[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]','LJ'=>'[\u01C7]','Lj'=>'[\u01C8]','M'=>'[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]','N'=>'[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]','NJ'=>'[\u01CA]','Nj'=>'[\u01CB]','O'=>'[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u01FE\u0186\u019F\uA74A\uA74C]','Oe'=>'[\u00D8]','oe'=>'[\u00f8]','OI'=>'[\u01A2]','OO'=>'[\uA74E]','OU'=>'[\u0222]','P'=>'[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]','Q'=>'[\u0051\u24C6\uFF31\uA756\uA758\u024A]','R'=>'[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]','S'=>'[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]','T'=>'[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]','TZ'=>'[\uA728]','U'=>'[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]','V'=>'[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]','VY'=>'[\uA760]','W'=>'[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]','X'=>'[\u0058\u24CD\uFF38\u1E8A\u1E8C]','Y'=>'[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]','Z'=>'[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]','a'=>'[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u00E5]','aa'=>'[\uA733]','ae'=>'[\u00E6\u01FD\u01E3]','ao'=>'[\uA735]','au'=>'[\uA737]','av'=>'[\uA739\uA73B]','ay'=>'[\uA73D]','b'=>'[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]','c'=>'[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]','d'=>'[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]','dz'=>'[\u01F3\u01C6]','e'=>'[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]','f'=>'[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]','g'=>'[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]','h'=>'[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]','hv'=>'[\u0195]','i'=>'[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]','j'=>'[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]','k'=>'[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]','l'=>'[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]','lj'=>'[\u01C9]','m'=>'[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]','n'=>'[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]','nj'=>'[\u01CC]','o'=>'[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]','oi'=>'[\u01A3]','ou'=>'[\u0223]','oo'=>'[\uA74F]','p'=>'[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]','q'=>'[\u0071\u24E0\uFF51\u024B\uA757\uA759]','r'=>'[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]','s'=>'[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]','ss'=>'[\u00DF]','t'=>'[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]','tz'=>'[\uA729]','u'=>'[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]','v'=>'[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]','vy'=>'[\uA761]','w'=>'[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]','x'=>'[\u0078\u24E7\uFF58\u1E8B\u1E8D]','y'=>'[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]','z'=>'[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]',];PK     ‘ŠU]íJ»‡  ‡    assets/vendor/diacritics/de.phpnu „[µü¤        <?php
/**
 * Credit lukemadhanga (https://coderwall.com/p/wzpdgq/strip-accents-diacritics-from-a-string-in-javascript)
 */
return['A'=>'[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]','AA'=>'[\uA732]','Ae'=>'[\u00C6\u01FC\u01E2\u00C4]','AO'=>'[\uA734]','AU'=>'[\uA736]','AV'=>'[\uA738\uA73A]','AY'=>'[\uA73C]','B'=>'[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]','C'=>'[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]','D'=>'[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]','DZ'=>'[\u01F1\u01C4]','Dz'=>'[\u01F2\u01C5]','E'=>'[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]','F'=>'[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]','G'=>'[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]','H'=>'[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]','I'=>'[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]','J'=>'[\u004A\u24BF\uFF2A\u0134\u0248]','K'=>'[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]','L'=>'[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]','LJ'=>'[\u01C7]','Lj'=>'[\u01C8]','M'=>'[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]','N'=>'[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]','NJ'=>'[\u01CA]','Nj'=>'[\u01CB]','O'=>'[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]','Oe'=>'[\u00D6]','OI'=>'[\u01A2]','OO'=>'[\uA74E]','OU'=>'[\u0222]','P'=>'[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]','Q'=>'[\u0051\u24C6\uFF31\uA756\uA758\u024A]','R'=>'[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]','S'=>'[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]','T'=>'[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]','TZ'=>'[\uA728]','U'=>'[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]','Ue'=>'[\u00DC]','V'=>'[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]','VY'=>'[\uA760]','W'=>'[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]','X'=>'[\u0058\u24CD\uFF38\u1E8A\u1E8C]','Y'=>'[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]','Z'=>'[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]','a'=>'[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]','aa'=>'[\uA733]','ae'=>'[\u00E6\u01FD\u01E3\u00E4]','ao'=>'[\uA735]','au'=>'[\uA737]','av'=>'[\uA739\uA73B]','ay'=>'[\uA73D]','b'=>'[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]','c'=>'[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]','d'=>'[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]','dz'=>'[\u01F3\u01C6]','e'=>'[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]','f'=>'[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]','g'=>'[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]','h'=>'[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]','hv'=>'[\u0195]','i'=>'[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]','j'=>'[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]','k'=>'[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]','l'=>'[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]','lj'=>'[\u01C9]','m'=>'[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]','n'=>'[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]','nj'=>'[\u01CC]','o'=>'[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]','oe'=>'[\u00f6]','oi'=>'[\u01A3]','ou'=>'[\u0223]','oo'=>'[\uA74F]','p'=>'[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]','q'=>'[\u0071\u24E0\uFF51\u024B\uA757\uA759]','r'=>'[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]','s'=>'[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]','ss'=>'[\u00DF]','t'=>'[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]','tz'=>'[\uA729]','u'=>'[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]','ue'=>'[\u00FC]','v'=>'[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]','vy'=>'[\uA761]','w'=>'[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]','x'=>'[\u0078\u24E7\uFF58\u1E8B\u1E8D]','y'=>'[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]','z'=>'[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]',];PK     ‘ŠU]H*åeÚ. Ú. #  assets/vendor/schema/schema-map.phpnu „[µü¤        {"version":"1.0.0","properties":{"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL"}}}},"rating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}},"bookEditions":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Editions","help":"Either a specific edition of the written work, or the volume of the work"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Book"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Title","help":"The title of the tome. Use for the title of the tome if it differs from the book. *Optional when tome has the same title as the book"}}},"bookEdition":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Edition","help":"The edition of the book"}}},"isbn":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"ISBN","help":"The ISBN of the print book"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"URL","help":"URL specific to this edition if one exists"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datepicker","label":"Date Published","help":"Date of first publication of this tome"}}},"bookFormat":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"radio","label":"Book Format","desc":"The format of the book.","options":{"https:\/\/schema.org\/EBook":"eBook","https:\/\/schema.org\/Hardcover":"Hardcover","https:\/\/schema.org\/Paperback":"Paperback","https:\/\/schema.org\/AudioBook":"Audio Book"},"default":"https:\/\/schema.org\/Hardcover"}}}},"provider":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"type":"radio","label":"Course Provider","classes":"show-property","options":{"Organization":"Organization","Person":"Person"},"default":"Organization"}}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Course Provider Name"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Course Provider URL"}}}},"virtual-location":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"value":"VirtualLocation"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Online Event URL","help":"The URL of the online event, where people can join. This property is required if your event is happening online"}}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}},"physical-location":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Place"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue Name","help":"The venue name."}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue URL","help":"Website URL of the venue"}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}}},"event-performer":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Performer Information"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"type":"radio","label":"Performer","classes":"show-property","options":{"Organization":"Organization","Person":"Person"},"default":"Person"}}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Website or Social Link"}}}},"offers":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Offers"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Offer"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name"}}},"category":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Category"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"URL"}}},"price":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Price"}}},"priceCurrency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Currency"}}},"availability":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Availability","help":"Offer availability","classes":"col-4","options":{"":"None","InStock":"In Stock","SoldOut":"Sold Out","PreOrder":"Preorder"},"default":"InStock"}}},"validFrom":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid From","help":"The date after which the price will no longer be available"}}},"priceValidUntil":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid Until","help":"The date after which the price will no longer be available"}}},"inventoryLevel":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Inventory Level"}}}},"monetary-amount-unit":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Salary"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"QuantitativeValue"}},"value":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Salary (Recommended)","help":"Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","classes":"col-4"}}},"unitText":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Payroll (Recommended)","help":"Salary amount is for","options":{"":"None","YEAR":"Yearly","MONTH":"Monthly","WEEK":"Weekly","DAY":"Daily","HOUR":"Hourly"},"classes":"col-4"}}}},"monetary-amount":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"MonetaryAmount"}},"currency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Salary Currency","help":"ISO 4217 Currency code. Example: EUR","classes":"col-4"}}},"value":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Salary"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"QuantitativeValue"}},"value":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Salary (Recommended)","help":"Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","classes":"col-4"}}},"unitText":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Payroll (Recommended)","help":"Salary amount is for","options":{"":"None","YEAR":"Yearly","MONTH":"Monthly","WEEK":"Weekly","DAY":"Daily","HOUR":"Hourly"},"classes":"col-4"}}}}},"hiring-organization":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Organization"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Hiring Organization","help":"The name of the company. Leave empty to use your own company information.","classes":"col-4"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Organization URL (Recommended)","help":"The URL of the organization offering the job position. Leave empty to use your own company information","classes":"col-6"}}},"logo":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Organization Logo (Recommended)","help":"Logo URL of the organization offering the job position. Leave empty to use your own company information","classes":"col-6"}}}},"brand":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Brand"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Brand Name"}}}},"calories":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"NutritionInformation"}},"calories":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Calories","help":"The number of calories in the recipe. Optional."}}}},"video-object":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Video"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"VideoObject"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Name","help":"A recipe video Name","classes":"col-6"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"textarea","label":"Description","help":"A recipe video Description"}}},"embedUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Video URL","help":"A video URL. Optional.","classes":"col-6"}}},"contentUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Content URL","help":"A URL pointing to the actual video media file","classes":"col-6"}}},"thumbnailUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Recipe Video Thumbnail","help":"A recipe video thumbnail URL","classes":"col-6"}}},"uploadDate":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datepicker","label":"Video Upload Date","classes":"col-6"}}}},"instructionText":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"HowtoStep"}},"text":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"textarea"}}}},"instructions":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Recipe Instructions","help":"Either a specific edition of the written work, or the volume of the work"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"HowToSection"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Name","help":"The title of the tome. Use for the title of the tome if it differs from the book.<br>*Optional when tome has the same title as the book"}}},"itemListElement":{"map":{"isArray":true,"isGroup":true,"isRequired":false,"isRecommended":false,"arrayMap":"instructionText","classes":"show-add-property-group","field":{"label":"Instruction Texts"}}}},"geo-coordinates":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Geo Cordinates"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"GeoCoordinates"}},"latitude":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Latitude"}}},"longitude":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Longitude"}}}},"opening-hours":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Timings"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"OpeningHoursSpecification"}},"dayOfWeek":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"select","multiple":true,"label":"Open Days","options":{"monday":"Monday","tuesday":"Tuesday","wednesday":"Wednesday","thursday":"Thursday","friday":"Friday","saturday":"Saturday","sunday":"Sunday"},"default":[]}}},"opens":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"timepicker","label":"Opening Time","classes":"col-6","placeholder":"09:00 AM"}}},"closes":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"timepicker","label":"Closing Time","classes":"col-6","placeholder":"05:00 PM"}}}},"cuisine":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"cuisine":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Cuisine"}}}}},"schemas":{"Article":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"headline":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"type":"radio","label":"Article Type","classes":"show-property","options":{"Article":"Article","BlogPosting":"Blog Post","NewsArticle":"News Article"},"notice":{"status":"warning","className":"article-notice","content":"Google does not allow Person as the Publisher for articles. Organization will be used instead."}}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Published Date","classes":"hide-group","default":"%date(Y-m-d\\TH:i:sP)%"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Modified Date","classes":"hide-group","default":"%modified(Y-m-d\\TH:i:sP)%"}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Book":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"URL"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}},"hasPart":{"map":{"isArray":true,"isGroup":true,"isRequired":false,"isRecommended":false,"arrayMap":"bookEditions","arrayProps":{"map":{"classes":"book-edition-single"}},"field":{"label":"Editions"}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Course":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"provider":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"type":"radio","label":"Course Provider","classes":"show-property","options":{"Organization":"Organization","Person":"Person"},"default":"Organization"}}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Course Provider Name"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Course Provider URL"}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}}},"Event":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"select","label":"Event Type","help":"Type of the event","classes":"show-property col-4","options":{"Event":"Event","BusinessEvent":"Business Event","ChildrensEvent":"Childrens Event","ComedyEvent":"Comedy Event","DanceEvent":"Dance Event","DeliveryEvent":"Delivery Event","EducationEvent":"Education Event","ExhibitionEvent":"Exhibition Event","Festival":"Festival","FoodEvent":"Food Event","LiteraryEvent":"Literary Event","MusicEvent":"Music Event","PublicationEvent":"Publication Event","SaleEvent":"Sale Event","ScreeningEvent":"Screening Event","SocialEvent":"Social Event","SportsEvent":"Sports Event","TheaterEvent":"Theater Event","VisualArtsEvent":"Visual Arts Event"}}}},"eventStatus":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Event Status","help":"Current status of the event (optional)","options":{"":"None","EventScheduled":"Scheduled","EventCancelled":"Cancelled","EventPostponed":"Postponed","EventRescheduled":"Rescheduled","EventMovedOnline":"Moved Online"},"classes":"col-4","default":"EventScheduled"}}},"eventAttendanceMode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Event Attendance Mode","help":"Indicates whether the event occurs online, offline at a physical location, or a mix of both online and offline.","options":{"Offline":"Offline","Online":"Online","MixedEventAttendanceMode":"Online + Offline"},"default":"Offline","classes":"col-4"}}},"VirtualLocation":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header","dependency":[{"field":"eventAttendanceMode","value":["Online","MixedEventAttendanceMode"]}]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"value":"VirtualLocation"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Online Event URL","help":"The URL of the online event, where people can join. This property is required if your event is happening online"}}}},"location":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header","dependency":[{"field":"eventAttendanceMode","value":["Offline","MixedEventAttendanceMode"]}]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Place"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue Name","help":"The venue name."}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue URL","help":"Website URL of the venue"}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}}},"performer":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Performer Information"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"type":"radio","label":"Performer","classes":"show-property","options":{"Organization":"Organization","Person":"Person"},"default":"Person"}}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Website or Social Link"}}}},"startDate":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Start Date","help":"Date and time of the event","classes":"col-4"}}},"endDate":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"End Date","help":"End date and time of the event","classes":"col-4"}}},"offers":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Offers"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Offer"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name","classes":"hide-group","placeholder":"General Admission"}}},"category":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Category","classes":"hide-group","placeholder":"primary"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"URL"}}},"price":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Price"}}},"priceCurrency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Currency"}}},"availability":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Availability","help":"Offer availability","classes":"col-4","options":{"":"None","InStock":"In Stock","SoldOut":"Sold Out","PreOrder":"Preorder"},"default":"InStock"}}},"validFrom":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid From","help":"The date after which the price will no longer be available"}}},"priceValidUntil":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid Until","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"inventoryLevel":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Inventory Level"}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"JobPosting":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"title":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"baseSalary":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"MonetaryAmount"}},"currency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Salary Currency","help":"ISO 4217 Currency code. Example: EUR","classes":"col-4"}}},"value":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Salary"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"QuantitativeValue"}},"value":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Salary (Recommended)","help":"Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","classes":"col-4"}}},"unitText":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Payroll (Recommended)","help":"Salary amount is for","options":{"":"None","YEAR":"Yearly","MONTH":"Monthly","WEEK":"Weekly","DAY":"Daily","HOUR":"Hourly"},"classes":"col-4"}}}}},"datePosted":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datepicker","label":"Date Posted","help":"The original date on which employer posted the job. You can leave it empty to use the post publication date as job posted date","classes":"col-4"}}},"validThrough":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datepicker","label":"Expiry Posted","help":"The date when the job posting will expire. If a job posting never expires, or you do not know when the job will expire, do not include this property","classes":"col-4"}}},"unpublish":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Unpublish when expired","options":{"on":"Yes","off":"No"},"help":"If checked, post status will be changed to Draft and its URL will return a 404 error, as required by the Rich Result guidelines","classes":"col-4","default":"on"}}},"employmentType":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","multiple":true,"label":"Employment Type (Recommended)","help":"Type of employment. You can choose more than one value","options":{"":"None","FULL_TIME":"Full Time","PART_TIME":"Part Time","CONTRACTOR":"Contractor","TEMPORARY":"Temporary","INTERN":"Intern","VOLUNTEER":"Volunteer","PER_DIEM":"Per Diem","OTHER":"Other"},"default":[]}}},"hiringOrganization":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Organization"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Hiring Organization","help":"The name of the company. Leave empty to use your own company information.","classes":"col-4"}}},"sameAs":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Organization URL (Recommended)","help":"The URL of the organization offering the job position. Leave empty to use your own company information","classes":"col-6"}}},"logo":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Organization Logo (Recommended)","help":"Logo URL of the organization offering the job position. Leave empty to use your own company information","classes":"col-6"}}}},"id":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Posting ID (Recommended)","help":"The hiring organization's unique identifier for the job. Leave empty to use the post ID","classes":"col-6"}}},"jobLocation":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Place"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue Name","help":"The venue name.","classes":"hide-group"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Venue URL","help":"Website URL of the venue","classes":"hide-group"}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Music":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"URL"}}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"radio","label":"Music Type","classes":"show-property","options":{"MusicGroup":"MusicGroup","MusicAlbum":"MusicAlbum"},"default":"MusicGroup"}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Person":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"email":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Email"}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}},"gender":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Gender","classes":"col-6"}}},"jobTitle":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Job title","help":"The job title of the person (for example, Financial Manager).","classes":"col-6"}}}},"Product":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Product name","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"sku":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Product SKU"}}},"brand":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Brand"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Brand Name"}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}},"gtin8":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Gtin","classes":"hide-group"}}},"mpn":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"MPN","classes":"hide-group"}}},"isbn":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"ISBN","classes":"hide-group"}}},"offers":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Offers"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Offer"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name","classes":"hide-group"}}},"category":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Category","classes":"hide-group"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"URL","classes":"hide-group","placeholder":"%url%"}}},"price":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Price"}}},"priceCurrency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Currency"}}},"availability":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Availability","help":"Offer availability","classes":"col-4","options":{"":"None","InStock":"In Stock","SoldOut":"Sold Out","PreOrder":"Preorder"},"default":"InStock"}}},"validFrom":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid From","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"priceValidUntil":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid Until","help":"The date after which the price will no longer be available"}}},"inventoryLevel":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Inventory Level","classes":"hide-group"}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}}},"Recipe":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Published Date","classes":"hide-group","default":"%date(Y-m-d\\TH:i:sP)%"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"prepTime":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Preparation Time","help":"ISO 8601 duration format. Example: PT1H30M","classes":"col-4"}}},"cookTime":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Cooking Time","help":"ISO 8601 duration format. Example: PT1H30M","classes":"col-4"}}},"totalTime":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Total Time","help":"ISO 8601 duration format. Example: PT1H30M","classes":"col-4"}}},"recipeCategory":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Type","help":"Type of dish, for example appetizer, or dessert.","classes":"col-4"}}},"recipeCuisine":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Cuisine","help":"The cuisine of the recipe (for example, French or Ethiopian).","classes":"col-4"}}},"keywords":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Keywords","help":"Other terms for your recipe such as the season, the holiday, or other descriptors. Separate multiple entries with commas.","classes":"col-4"}}},"recipeYield":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Recipe Yield","help":"Quantity produced by the recipe, for example \"4 servings\"","classes":"col-4"}}},"nutrition":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"NutritionInformation"}},"calories":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Calories","help":"The number of calories in the recipe. Optional."}}}},"recipeIngredient":{"map":{"isArray":true,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"show-add-property","field":{"label":"Recipe Ingredients","help":"Recipe ingredients, add one item per line"}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}},"video":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Video"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"VideoObject"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Name","help":"A recipe video Name","classes":"col-6"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"textarea","label":"Description","help":"A recipe video Description"}}},"embedUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Video URL","help":"A video URL. Optional.","classes":"col-6"}}},"contentUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Content URL","help":"A URL pointing to the actual video media file","classes":"col-6"}}},"thumbnailUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Recipe Video Thumbnail","help":"A recipe video thumbnail URL","classes":"col-6"}}},"uploadDate":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datepicker","label":"Video Upload Date","classes":"col-6"}}}},"instructionType":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"radio","label":"Instruction Type","options":{"SingleField":"Single Field","HowToStep":"How To Step"},"default":"SingleField"}}},"instructionsSingleField":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Recipe Instructions"},"dependency":[{"field":"instructionType","value":"SingleField"}]}},"instructionsHowToStep":{"map":{"isArray":true,"isGroup":true,"isRequired":false,"isRecommended":false,"arrayMap":"instructions","field":{"label":"Recipe Instructions"},"dependency":[{"field":"instructionType","value":["HowToStep"]}]}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Restaurant":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"telephone":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Phone Number"}}},"priceRange":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Price Range","classes":"col-4"}}},"address":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Address"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"PostalAddress"}},"streetAddress":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Street Address"}}},"addressLocality":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Locality"}}},"addressRegion":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Region"}}},"postalCode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Postal Code"}}},"addressCountry":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"text","label":"Country"}}}},"geo":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Geo Cordinates"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"GeoCoordinates"}},"latitude":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Latitude"}}},"longitude":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Longitude"}}}},"openingHoursSpecification":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Timings"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"OpeningHoursSpecification"}},"dayOfWeek":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"select","multiple":true,"label":"Open Days","options":{"monday":"Monday","tuesday":"Tuesday","wednesday":"Wednesday","thursday":"Thursday","friday":"Friday","saturday":"Saturday","sunday":"Sunday"},"default":[]}}},"opens":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"timepicker","label":"Opening Time","classes":"col-6","placeholder":"09:00 AM"}}},"closes":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"timepicker","label":"Closing Time","classes":"col-6","placeholder":"05:00 PM"}}}},"servesCuisine":{"map":{"isArray":true,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"show-add-property"}},"hasMenu":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Menu URL","help":"URL pointing to the menu of the restaurant.","classes":"col-6"}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"Service":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"serviceType":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Service Type","help":"The type of service being offered, e.g. veterans' benefits, emergency relief, etc.","classes":"col-4"}}},"offers":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Offers"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Offer"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name","classes":"hide-group"}}},"category":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Category","classes":"hide-group"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"URL","classes":"hide-group"}}},"price":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Price"}}},"priceCurrency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Currency"}}},"availability":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Availability","help":"Offer availability","classes":["col-4","hide-group"],"options":{"":"None","InStock":"In Stock","SoldOut":"Sold Out","PreOrder":"Preorder"},"default":"InStock"}}},"validFrom":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid From","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"priceValidUntil":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid Until","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"inventoryLevel":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Inventory Level","classes":"hide-group"}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"SoftwareApplication":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"reviewLocation":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"select","label":"Review Location","help":"The review or rating must be displayed on the page to comply with Google's Schema guidelines.","options":{"bottom":"Below Content","top":"Above Content","both":"Above and Below Content","custom":"Custom (use shortcode)"},"default":"custom"}}},"reviewLocationShortcode":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"save":"metadata","field":{"type":"text","label":"Shortcode","help":"You can use the Schema Block in the block editor, or copy and paste this in the content. This shortcode will work on this page only.","disabled":"disabled"},"value":"[rank_math_rich_snippet]","dependency":[{"field":"reviewLocation","value":"custom"}]}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"operatingSystem":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Operating System","help":"For example, \"Windows 7\", \"OSX 10.6\", \"Android 1.6\"","classes":"col-6"}}},"applicationCategory":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Application Category","help":"For example, \"Game\", \"Multimedia\"","classes":"col-6"}}},"offers":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Offers"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Offer"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Name","classes":"hide-group"}}},"category":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Category","classes":"hide-group"}}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"URL","classes":"hide-group"}}},"price":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Price"}}},"priceCurrency":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"label":"Currency"}}},"availability":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"select","label":"Availability","help":"Offer availability","classes":["col-4","hide-group"],"options":{"":"None","InStock":"In Stock","SoldOut":"Sold Out","PreOrder":"Preorder"},"default":"InStock"}}},"validFrom":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid From","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"priceValidUntil":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"datepicker","label":"Price Valid Until","help":"The date after which the price will no longer be available","classes":"hide-group"}}},"inventoryLevel":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Inventory Level","classes":"hide-group"}}}},"review":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"field":{"label":"Review"}},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Review"}},"datePublished":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Published Date","placeholder":"%date(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"dateModified":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"datetimepicker","label":"Modified Date","placeholder":"%modified(Y-m-d\\TH:i:sP)%","classes":"hide-group"}}},"author":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Person"}},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Author Name","placeholder":"%name%"}}}},"reviewRating":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":"hide-group-header"},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"Rating"}},"ratingValue":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating","help":"Rating score"}}},"worstRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Minimum","help":"Rating minimum score","placeholder":1}}},"bestRating":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"type":"number","label":"Rating Maximum","help":"Rating maximum score","placeholder":5}}}}},"image":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false,"classes":["hide-group-header","hide-group"]},"@type":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"value":"ImageObject"}},"url":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Image URL","placeholder":"%post_thumbnail%"}}}}},"VideoObject":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false},"name":{"map":{"isArray":false,"isGroup":false,"isRequired":true,"isRecommended":false,"field":{"label":"Headline","placeholder":"%seo_title%"}}},"description":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":true,"field":{"type":"textarea","label":"Description","placeholder":"%seo_description%"}}},"uploadDate":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Upload Date","classes":"hide-group","placeholder":"%date(Y-m-d\\TH:i:sP)%"}}},"contentUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Content URL","help":"A URL pointing to the actual video media file","classes":"col-6"}}},"embedUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Embed URL","help":"A URL pointing to the embeddable player for the video","classes":"col-6"}}},"duration":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Duration","help":"ISO 8601 duration format. Example: 1H30M","classes":"col-6"}}},"interactionCount":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Views","help":"Number of views","classes":"col-6"}}},"thumbnailUrl":{"map":{"isArray":false,"isGroup":false,"isRequired":false,"isRecommended":false,"field":{"label":"Video Thumbnail","help":"A video thumbnail URL","classes":"hide-group","placeholder":"%post_thumbnail%"}}}},"WooCommerceProduct":{"map":{"isArray":false,"isGroup":true,"isRequired":false,"isRecommended":false}}}}PK     ‘ŠU]¹˜;Ev  v    assets/vendor/powerwords/ja.phpnu „[µü¤        <?php
return ['ã�™ã�”ã�„','æ„Ÿå‹•','é©šã��','å”¯ä¸€ç„¡äºŒ','ç¾Žã�—ã�„','å¹¸ç¦�','è¼�ã�‹ã�—ã�„','é­…æƒ‘çš„','ã‚«ãƒªã‚¹ãƒžçš„','è¡�æ’ƒ','æ˜Žçž­','å®Œå…¨ã�«','ä¿¡é ¼ã�§ã��ã‚‹','è‡ªä¿¡','é‡�è¦�','å‰µé€ çš„','æ±ºå®šçš„ã�«','ç¾Žå‘³ã�—ã�„','è¨¼æ˜Žã�™ã‚‹','æ€¥ã�„ã�§','æ±ºæ„�','ä¾¡å€¤ã�Œã�‚ã‚‹','ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯','æ„Ÿå‹•çš„','ä¸�å�¯æ¬ ','ã‚¤ãƒ³ã‚¹ãƒ”ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³','é�©æ–°çš„','å¼·åŠ›ã�ª','é­”æ³•ã�®ã‚ˆã�†ã�ª','å£®å¤§','æ­´å�²çš„','é‡�è¦�ã�ª','ä¿¡ã�˜ã‚‰ã‚Œã�ªã�„','çµ¶å¯¾å¿…è¦�','å¿˜ã‚Œã‚‰ã‚Œã�ªã�„','é­…åŠ›çš„','åˆºæ¿€çš„','åŠ¹æžœçš„','é�©å‘½çš„','æˆ�åŠŸ','å–œã�³','å®‰å…¨','æ„Ÿå‹•çš„','æº€ã�¡è¶³ã‚Šã�Ÿ','ç´ æ™´ã‚‰ã�—ã�„','ç‹¬ç‰¹','ä¾¡å€¤ã�Œã�‚ã‚‹','ç´ æ™´ã‚‰ã�—ã�„','ç†±å¿ƒã�ª','å‹�åˆ©','æ´»æ°—ã�¥ã�‘ã‚‹','çœŸã�«','æƒ…ç†±çš„','ç†±å¿ƒã�ª','å„ªé›…','å¤§èƒ†','ç�†æƒ³çš„','ä¿¡ã�˜ã‚‰ã‚Œã�ªã�„ã�»ã�©','ç�¾å®Ÿçš„','æœ€é�©','ä¸¦å¤–ã‚Œã�Ÿ','è±Šå¯Œ','å£®è¦³','å¤¢ã�®ã‚ˆã�†ã�ª','æ„Ÿæ¿€','é­…äº†ã�™ã‚‹','å®Œç’§','å£®å¤§','è±ªè�¯','é©šç•°çš„','æ„�æ¬²çš„','ç†±ç‹‚çš„','ç”»æœŸçš„','å¼·çƒˆ','é©šæ„•','ç·Šæ€¥','è§£æ±º','æœ€é«˜','è±Šã�‹','å¤§èƒ†ä¸�æ•µ','æœ‰å��','æ„›ã�•ã‚Œã‚‹','ç‰¹åˆ¥','ä¿¡ã�˜ã‚‰ã‚Œã‚‹','ç¢ºå®Ÿ','æƒ…ç†±','æœŸå¾…','æœ€å‰�ç·š','é–‹æ‹“è€…','ãƒ‘ãƒ¯ãƒ•ãƒ«','å½±éŸ¿åŠ›','é«˜å“�è³ª','å�‰å¤§','ç°¡å�˜','å®‰å¿ƒ','é‡�è¦�','ç‹¬è‡ª','æ „å…‰','ç„¡æ•µ','è‡ªç”±','å¸Œæœ›','å¥‡è·¡','æˆ�åŠŸ','è±Šã�‹ã�ª','åŠ›å¼·ã�„','æ „å…‰','é£›èº�','æ³¨ç›®','å£®å¤§','æŒ‘æˆ¦çš„','ä¼�èª¬','ç„¡æ•µ','è�¯éº—','é©šç•°','ç´ æ™´ã‚‰ã�—ã�„','å£®éº—','å�‰å¤§ã�ª','å�‰å¤§','ä¼�èª¬çš„','åˆºæ¿€çš„','ã‚¨ã‚­ã‚µã‚¤ãƒ†ã‚£ãƒ³ã‚°','æœŸå¾…','æ†§ã‚Œ','å„ªç§€','çµ¶å¯¾','å¤§æˆ�åŠŸ','æƒ³åƒ�ã‚’çµ¶ã�™ã‚‹','å®Œç’§','é­…åŠ›çš„','æ„Ÿå‹•çš„','å�‰å¤§','å„ªé›…','ç´ æ™´ã‚‰ã�—ã�„','é�©æ–°çš„','åœ§å€’çš„','å”¯ä¸€'];
PK     ‘ŠU]DiÂ        assets/vendor/powerwords/fi.phpnu „[µü¤        <?php
return ['uskomaton','hÃ¤mmÃ¤styttÃ¤vÃ¤','ihmeellinen','ainutlaatuinen','kaunis','onnellisuus','loistava','kiehtova','karismaattinen','jÃ¤rkyttÃ¤vÃ¤','selkeÃ¤','tÃ¤ysin','luottamuksellinen','luottamus','merkittÃ¤vÃ¤','luova','ehdottomasti','herkullinen','todistaa','kiirehdi','pÃ¤Ã¤ttÃ¤vÃ¤inen','arvokas','dynaaminen','vaikuttava','vÃ¤lttÃ¤mÃ¤tÃ¶n','inspiroiva','innovatiivinen','intensiivinen','tehokas','taianomainen','mahtava','historiallinen','tÃ¤rkeÃ¤','uskomaton','vÃ¤lttÃ¤mÃ¤tÃ¶n','unohtumaton','vastustamaton','legendaarinen','valoisa','ylellisyys','taianomainen','mahtava','majesteettinen','ikimuistoinen','ihmeellinen','ihmeellinen','motivoi','tarpeellinen','uusi','virallinen','tÃ¤ydellinen','intohimoinen','vakuuttava','ilmiÃ¶mÃ¤inen','ilo','suosittu','voima','arvostettu','ihmeellinen','syvÃ¤llinen','vauras','voimakas','laatu','sÃ¤teilevÃ¤','nopea','menestys','vallankumouksellinen','tyytyvÃ¤inen','turvallisuus','sensaatio','rauhallinen','ylellinen','loistava','jalo','yllÃ¤ttÃ¤vÃ¤','lahjakas','pelottava','ainutlaatuinen','arvo','eloisa','voittoisa','elÃ¤vÃ¤','todella','innostunut','aitoa','seikkailunhaluinen','upea','ainutlaatuinen','taattu','erityinen','fiksu','loistava','suuri','ilmainen','taitava','rajaton','virheetÃ¶n','pettÃ¤mÃ¤tÃ¶n','loputon','vaikutusvaltainen','nokkelia','ikimuistoinen','korvaamaton','johtaja','mestari','huomattava','uusi','uraauurtava','voimakas','tunnustettu','vallankumouksellinen','yllÃ¤ttÃ¤vÃ¤','ylivoimainen','voittoisa','ultra','rohkea','arvokas','edistyksellinen','voimakas','nÃ¤kemyksellinen','tahto','elintÃ¤rkeÃ¤','voitto','kunniallinen','pysÃ¤yttÃ¤mÃ¤tÃ¶n','verraton','Ã¤lykÃ¤s','voittamaton','vapaus','ylpeys','rauha','edistys','uudistettu','viisaus','tyydytys','turvallinen','rauhallisuus','ylitys','lahjakkuus','ylittÃ¤Ã¤','muutoksen','rohkeus','voitto'];
PK     ‘ŠU]mt÷iÿ  ÿ    assets/vendor/powerwords/it.phpnu „[µü¤        <?php
return ['incredibile','sorprendente','meraviglioso','unico','bello','felicitÃ ','brillante','affascinante','carismatico','scioccante','chiaro','completamente','riservato','fiducia','significativo','creativo','definitivamente','delizioso','dimostrare','sbrigati','determinato','degno','dinamico','impressionante','essenziale','ispiratore','innovativo','intenso','efficace','magico','magnifico','storico','importante','incredibile','indispensabile','indimenticabile','irresistibile','leggendario','luminoso','lusso','magico','magnifico','maestoso','memorabile','miracoloso','motivante','necessario','nuovo','ufficiale','perfetto','appassionato','persuasivo','fenomenale','piacere','popolare','potere','prestigioso','prodigioso','profondo','prospero','potente','qualitÃ ','radiante','veloce','di successo','rivoluzionario','soddisfatto','sicurezza','sensazionale','sereno','lussuoso','splendido','sublime','sorprendente','talentuoso','terrificante','unico','valore','vibrante','vittorioso','vivace','veramente','zelante','autentico','avventuroso','spettacolare','esclusivo','garantito','straordinario','favoloso','affascinante','formidabile','geniale','grandioso','gratuito','abile','illimitato','impeccabile','infallibile','infinitamente','influente','ingegnoso','indimenticabile','insostituibile','leader','maestro','notevole','innovativo','pioniere','potente','riconosciuto','rivoluzionario','sorprendente','superiore','trionfante','ultra','coraggioso','prezioso','avanguardia','vigoroso','visionario','volontÃ ','vitale','trionfo','glorioso','inarrestabile','ineguagliabile','intelligente','invincibile','libertÃ ','orgoglio','pace','progresso','rinnovato','saggezza','soddisfazione','sicuro','serenitÃ ','superamento','talento','trascendente','trasformativo','coraggio','vittoria'];
PK     ‘ŠU]ƒK        assets/vendor/powerwords/fr.phpnu „[µü¤        <?php
return ['absolument','amazement','astonishing','authentique','beau','bien-Ãªtre','brillant','captivant','charismatique','choc','clair','complÃ¨tement','confidentiel','confiance','consÃ©quent','crÃ©atif','dÃ©finitivement','dÃ©licieux','dÃ©montrer','dÃ©pÃªchez-vous','dÃ©terminÃ©','digne','dynamique','Ã©blouissant','Ã©clatant','Ã©conomique','Ã©fficace','Ã©lÃ©gant','Ã©motionnel','Ã©nergique','Ã©norme','Ã©poustouflant','essentiel','Ã©tonnant','exclusif','expÃ©rience','fabuleux','fantastique','formidable','fort','garanti','gÃ©ant','gÃ©nÃ©reux','grandiose','gratuit','habile','harmonieux','historique','hors pair','important','incroyable','indispensable','inoubliable','inspirant','innovant','intense','invention','irrÃ©sistible','lÃ©gendaire','lumineux','luxe','magique','magnifique','majestueux','marquant','merveilleux','miraculeux','motivant','nÃ©cessaire','nouvelle','officiel','parfait','passionnÃ©','persuasif','phÃ©nomÃ©nal','plaisir','populaire','pouvoir','prestigieux','prodigieux','profond','prospÃ¨re','puissant','qualitÃ©','radieux','rapide','rÃ©ussi','rÃ©volutionnaire','satisfait','sÃ©curitÃ©','sensationnel','serein','somptueux','splendide','sublime','surprenant','talentueux','terrifiant','unique','valeur','vibrant','victorieux','vif','vraiment','zÃ©lÃ©'];
PK     ‘ŠU]Ëðè4/  4/    assets/vendor/powerwords/en.phpnu „[µü¤        <?php return ['a cut above','absolute','absolutely','absolutely lowest','absurd','abuse','accurate','accuse','achieve','actionable','adaptable','adequate','admit','adorable','advantage','advice','affordable','aggravate','aggressive','agitated','agonizing','agony','alarmed','alarming','alienated','aligned','alive','all-inclusive','alluring','always','amazing','amp','animated','annihilate','announcing','anonymous','antagonistic','anxious','apocalypse','appalled','approved','approving','argumentative','armageddon','arrogant','ass kicking','assault','assured','astonishing','astounded','astounding','at ease','atrocious','attack','attractive','audacity','authentic','authoritative','authority','avoid','aware','awe-inspiring','awesome','awkward','backbone','backdoor','backed','backlash','backstabbing','badass','balanced','banned','bargain','barrage','basic','battle','beaming','beat down','beating','beautiful','beauty','begging','behind the scenes','belief','belong','best','best-selling','better','beware','big','billion','black market','blacklisted','blast','blessed','blinded','blissful','blood','bloodbath','bloodcurdling','bloody','blunder','blushing','bold','bomb','bona','bona fide','bonanza','bonus','bootleg','bottom line','bountiful','brave','bravery','brazen','break','breaking','breakthrough','breathtaking','bright','brilliant','broke','brutal','budget','buffoon','bullshit','bully','bumbling','buy','cadaver','calm','cancel anytime','capable','captivate','captivating','carefree','case study','cash','cataclysmic','catapult','catastrophe','caution','censored','centered','certain','certainly','certified','challenge','charming','cheap','cheat','cheat-sheet','cheer','cheerful','child-like','clarity','classified','clear','clueless','collapse','colorful','colossal','comfortable','compare','competitive','complete','completely','completeness','comprehensive','compromise','compulsive','concealed','conclusive','condemning','condescending','confess','confession','confessions','confident','confidential','conquer','conscientious','constructive','content','contrary','controlling','controversial','convenient','convert','cool','cooperative','copy','corpse','corrupt','corrupting','courage','courageous','cover-up','covert','coward','cowardly','crammed','crave','crazy','create','creative','cringeworthy','cripple','crisis','critical','crooked','crush','crushing','damaging','danger','dangerous','daring','dazzling','dead','deadline','deadly','death','decadent','deceived','deceptive','deep','defiance','definitely','definitive','defying','dejected','delicious','delight','delighted','delightful','delirious','delivered','demoralizing','deplorable','depraved','desire','desperate','despicable','destiny','destroy','detailed','devastating','devoted','diagnosed','direct','dirty','disadvantages','disastrous','discount','discover','disdainful','disempowered','disgusted','disgusting','dishonest','disillusioned','disoriented','distracted','distraught','distressed','distrustful','divulge','document','dollar','dominate','doomed','double','doubtful','download','dreadful','dreamy','drive','drowning','dumb','dynamic','eager','earnest','easily','easy','economical','ecstatic','edge','effective','efficient','effortless','elated','eliminate','elite','embarrass','embarrassed','embarrassing','emergency','emerging','emphasize','empowered','enchant','encouraged','endorsed','energetic','energy','enormous','enraged','enthusiastic','envy','epic','epidemic','essential','ethical','euphoric','evil','exactly','exasperated','excellent','excited','excitement','exciting','exclusive','exclusivity','excruciating','exhilarated','expensive','expert','explode','exploit','explosive','exposed','exquisite','extra','extraordinary','extremely','exuberant','eye-opening','fail','fail-proof','failure','faith','famous','fantasy','fascinating','fatigued','faux','faux pas','fearless','feast','feeble','festive','fide','fierce','fight','final','fine','fired','first','first ever','flirt','fluid','focus','focused','fool','fooled','foolish','forbidden','force-fed','forever','forgiving','forgotten','formula','fortune','foul','frantic','free','freebie','freedom','frenzied','frenzy','frightening','frisky','frugal','frustrated','fulfill','fulfilled','full','fully','fun','fun-loving','fundamentals','funniest','funny','furious','gambling','gargantuan','genius','genuine','gift','gigantic','giveaway','glamorous','gleeful','glorious','glowing','goddamn','gorgeous','graceful','grateful','gratified','gravity','great','greatest','greatness','greed','greedy','gripping','grit','grounded','growth','guaranteed','guilt','guilt-free','gullible','guts','hack','happiness','happy','harmful','harsh','hate','have you heard','havoc','hazardous','healthy','heart','heartbreaking','heartwarming','heavenly','hell','helpful','helplessness','hero','hesitant','hidden','high tech','highest','highly effective','hilarious','hoak','hoax','honest','honored','hope','hopeful','horribly','horrific','horrifying','horror','hostile','how to','huge','humility','humor','hurricane','hurry','hypnotic','idiot','ignite','illegal','illusive','imagination','immediately','imminently','impatience','impatient','impenetrable','important','impressive','improved','in the zone','incapable','incapacitated','incompetent','inconsiderate','increase','incredible','indecisive','indulgence','indulgent','inexpensive','inferior','informative','infuriated','ingredients','innocent','innovative','insane','insecure','insider','insidious','inspired','inspiring','instant savings','instantly','instructive','insult','intel','intelligent','intense','interesting','intriguing','introducing','invasion','investment','iron-clad','ironclad','irresistible','irs','is here','jackpot','jail','jaw-dropping','jealous','jeopardy','jittery','jovial','joyous','jubilant','judgmental','jumpstart','just arrived','keen','kickass','kickstart','kill','killed','killing','kills','know it all','lame','largest','lascivious','last','last chance','last minute','latest','laugh','laughing','launch','launching','lavishly','lawsuit','lazy','left behind','legendary','legitimate','liberal','liberated','lick','lies','life-changing','lifetime','light','lighthearted','likely','limited','literally','little-known','loathsome','lonely','looming','loser','lost','love','lucrative','lunatic','lurking','lust','luxurious','luxury','lying','magic','magical','magnificent','mainstream','malicious','mammoth','manipulative','marked down','massive','master','masterclass','maul','mediocre','meditative','meltdown','memorability','memorable','menacing','mesmerizing','meticulous','mind-blowing','minimalist','miracle','mired','mischievous','misgiving','missing out','mistake','monetize','money','moneyback','moneygrubbing','monumental','most important','motivated','mouth-watering','murder','mystery','nail','naked','natural','naughty','nazi','nest egg','never','new','nightmare','no good','no obligation','no one talks about','no questions asked','no risk','no strings attached','non-controlling','noted','novelty','now','obnoxious','obsessed','obsession','obvious','odd','off-kilter','off-limits','off-the record','offensive','official','okay','on-demand','open-minded','opportunities','optimistic','ordeal','outlawed','outrageousness','outstanding','overcome','overjoyed','overnight','overwhelmed','packed','painful','painless','painstaking','pale','panic','panicked','paralyzed','pas','passionate','pathetic','pay zero','payback','perfect','peril','perplexed','perspective','pessimistic','pioneering','piranha','pitfall','pitiful','placid','plague','played','playful','pleased','pluck','plummet','plunge','poison','poisonous','polarizing','poor','popular','portfolio','pound','powerful','powerless','practical','preposterous','prestige','price','priceless','pride','prison','privacy','private','privileged','prize','problem','productive','professional','profit','profitable','profound','promiscuous','promising','promote','protect','protected','proven','provocative','provoke','psychological','pummel','punch','punish','pus','quadruple','quality','quarrelsome','quick','quick-start','quickly','quiet','radiant','rare','ravenous','rebellious','recession-proof','reckoning','recognized','recommend','recreate','reduced','reflective','refugee','refund','refundable','reject','relaxed','release','relentless','reliable','remarkable','replicate','report','reprimanding','repulsed','repulsive','research','resentful','resourceful','responsible','responsive','rested','restricted','results','retaliating','reveal','revealing','revenge','revengeful','revisited','revolting','revolutionary','reward','rich','ridiculous','risky','riveting','rookie','rowdy','ruin','rules','ruthless','sabotaging','sacred','sadistic','sadly','sadness','safe','safety','sale','sampler','sarcastic','satisfied','savage','savagery','save','savings','savvy','scam','scandal','scandalous','scarce','scared','scary','scornful','scream','searing','secret','secret agenda','secret plot','secrets','secure','security','seductive','seething','seize','selected','self-hating','self-sufficient','sensational','senseless','sensual','serene','seriously','severe','sex','sexy','shaking','shameful','shameless','shaming','shatter','shellacking','shocking','should','shrewd','sick and tired','signs','silly','simple','simplicity','simplified','simplistic','sincere','sinful','sins','six-figure','sizable','sizzle','sizzled','sizzles','sizzling','sizzlingly','skill','skyrocket','slaughter','slave','sleazy','sleeping','sly','smash','smiling','smug','smuggle','smuggled','sneak-peek','sneaky','sniveling','snob','snooty','snotty','soar','soaring','solid','solution','spank','special','spectacular','speedy','spell-binding','spine','spirit','spirited','spiteful','spoiler','spontaneous','spotlight','spunky','squirming','stable','staggering','startling','steady','steal','stealthy','steamy','step-by-step','still','stoic','stop','strange','strangle','strategy','stressed','strong','strongly suggest','struggle','stuck up','studies','stunning','stupid','stupid-simple','sturdy','sublime','succeed','success','successful','suck','suddenly','suffer','sunny','super','super-human','superb','supercharge','superior','supported','supportive','sure','sure fire','surefire','surge','surging','surprise','surprised','surprising','survival','survive','suspicious','sweaty','swoon','swoon-worthy','tailspin','tank','tantalizing','targeted','tawdry','tease','technology','teetering','tempting','tenacious','tense','terrible','terrific','terrified','terrifying','terror','terrorist','tested','thankful','the truth','threaten','threatened','thrilled','thrilling','thug','ticked off','tickled','timely','today','torture','toxic','track record','trade secret','tragedy','tragic','transform','transparency','trap','trapped','trauma','traumatized','treacherous','treasure','tremendous','trend','tricks','triggers','triple','triumph','truly','trusting','trustworthy','truth','truthful','turbo-charge','turbocharges','tweaks','twitching','ultimate','unadulterated','unassuming','unauthorized','unbelievable','unburdened','uncaring','uncensored','uncertain','uncomfortable','unconditional','uncontrollable','unconventional','uncovered','undeniable','under priced','undercover','underground','underhanded','underused','unexpected','unforgettable','unheard of','unhurried','uninterested','unique','unjustified','unknowingly','unleashed','unlimited','unlock','unparalleled','unpopular','unreliable','unresponsive','unseen','unstable','unstoppable','unsure','unsurpassed','untapped','unusual','up-sell','upbeat','uplifted','uplifting','urge','urgent','useful','useless','validate','valor','valuable','value','vanquish','vaporize','venomous','verify','vibrant','vicious','victim','victory','vigorous','vilified','vindictive','violated','violent','volatile','vulnerable','waiting','wanted','wanton','warning','waste','weak','wealth','weird','what no one tells you','whip','whopping','wicked','wild','willpower','withheld','wonderful','wondrous','woozy','world','worry','worst','worthwhile','wounded','wreaking','youthful','zen','zinger'];
PK     ‘ŠU]bq§’.  ’.    assets/vendor/powerwords/de.phpnu „[µü¤        <?php return ['abgelenkt','abgesturzt','absolut','abstossend','aburd','abweisen','adaquat','aggressiv','ahnungslos','akkurat','alarmierend','alarmiert','albtraum','all-inclusive','allererste','allererster','allererstes','alleswisser','am schlechtesten','am wichtigsten','angewidert','angriff','angsteinflossend','Angstlich','animiert','ankundigung','anonym','anpassbar','anspruchslos','anstossig','antagonistisch','apokalypse','applaus','argumentativ','arm','armageddon','arrogant','atemberaubend','attacke','attraktiv','aufdeckend','aufgebracht','aufgedeckt','aufgeregt','aufheiternd','aufregend','aufregende','aufregenden','aufregung','aufstachelnd','aufstandisch','aufsteigend','auftreibend','augenoffnend','ausgelassen','ausgeruht','ausgespielt','ausgewahlt','ausgewuhlt','ausnutzen','aussergewohnlich','autark','authentisch','autoritat','backdoor','badass','beangstigend','bedenklich','bedingungslos','bedrohen','bedroht','beforderung','befreit','befriedigend','befriedigt','begehren','begeistern','begeistert','begeisterung','beherzt','behind the scenes','beichte','beleidigung','belohnung','bemerkenswert','beneiden','bequem','beruhmt','beschadigen','beschamend','beschmutzt','beschuldigen','beschutzen','besitz','bessesen','bestatigen','bestatigt','beste','bestimmt','bestrafen','betrug','betrugen','bewahrt','bewiesen','bewiesenermassen','bewusst','bezahlbar','bezaubernd','bizarre','bleich','blendend','blut','blutbad','blutig','bombe','bonanza','bonus','bosartig','bose','boshaft','brilliant','brodelnd','brutal','budget','bullshit','bully','bunt','bunte','bunten','case study','cash','challenge','challgene','chaos','cheat-sheet','clever','content','cool','courage','dankbar','daruber redet keiner','deadline','definitiv','dekadent','demoralisierend','demut','desillusioniert','detailiert','diagnose','die wahrheit','direkt','disastros','discount','dokument','dollar','dominieren','doppelt','download','dreckig','dreifach','dreistigkeit','dringend','dringlichkeit','dumm','dummkopf','dummlich','durchbruch','duselig','dynamik','echt','effektiv','effizient','ehrlich','eier','eifersuchtig','eifrig','eindeutig','eindrucksvoll','eine stufe besser','einfach','einfachheit','einfallsreich','eingebildet','eingeschrankt','eingesperrt','einmalig','einsam','eintauchen','einzigartig','eisern','eliminieren','elite','empathie','empfehle','empfehlen','endeffekt','energie','energisch','enorm','entdecken','entfesselt','entfremdet','enthullen','enthullung','enthusiastisch','entmachtet','entsetzlich','entspannt','entzuckend','entzunden','epidemisch','episch','erbarmlich','erfolg','erfolgreich','erfolgsbilanz','erfreut','erfullen','erfullt','ergebnisse','ergreifen','erhaben','erheben','erhohen','erledigt','ermachtigt','ermudet','ernmutigt','ernsthaft','erobern','erroten','errungenschaft','erschaffen','erschrocken','ersehnen','ersparnisse','erstattbar','erstatten','erstaunlich','erste','ertrinken','essentiell','ethisch','euphorisch','exakt','exklusiv','exklusivitat','exkuisit','experte','explodieren','explosiv','exposed','extrem','exzellent','fahig','fahigkeiten','fail','falle','fantasie','fantastischen','farbenfroh','farbenfrohe','faszinierend','faszinierende','faul','faux pas','faux','fehler','feindselig','feldstudie','fesselnd','festlich','festmahl','festplatte','final','flirt','fluchtling','flussig','fokus','fokussiert','folter','formel','frech','freebie','frei','freiheit','freudig','friedlich','frohlich','frohlichkeit','frustriert','fundamental','fur immer','furchtbar','furchtlos','gangster','garantiert','geblendet','geehrt','gefahr','gefahrlich','gefangen','gefangnis','gefeuert','gegensatzlich','gehassig','geheimnis','geheimnisse','geil','geisseln','geist','geistesgestort','gelassen','geld zuruck','geld','genial','gepackt','gerade angekommen','gerissen','geschenk','geschmuggelt','geschutzt','gestandnis','gestandnisse','gestopft','gestresst','gesucht','gesund','getauscht','getestet','getotet','gewaltig','gewalttatig','gewidmet','gewinnspiel','gier','gierig','gift','giftig','gigantisch','giveaway','glamourose','glanzend','glaube','glaubwurdig','gleichmassig','glittering','glitzernde','gluckselig','golden','grandios','grandiose','grandiosen','grandioses','grauenhaft','grausamkeit','grinsen','groesste','gross','grossartig','grossartig','grossartige','grossartigen','grossartiger','grossartiges','grosse','grossen','grosste','grosszugig','grotesk','grube','grundlegend','gruselig','gunstig','hack','hamisch','hammer','handelsgeheimnis','hartnackig','hass','heilig','heimlich','heisshunger','heisshungrig','heiter','held','hell','herablassend','herausfordernd','herausforderung','herausvorderung','herrlichen','herrschend','hervorragend','herz','herzbrechend','herzerwahrmend','heute','hightech','hilflosigkeit','hilfreich','hilfsbereit','himmlisch','hinterhaltig','hoax','hocheffektiv','hochnasig','hochste','hoffnung','hoffnungsvoll','holle','holocaust','horror','how to','humor','hungrige','hurrikan','hypnotisch','hypnotisierend','idiot','idiotisch','illegal','immer','informativ','inhalt','inkompetent','innovativ','insider','inspirierend','inspiriert','intelligent','intensiv','interessant','interessante','invasion','investment','ist da','jackpot','jederzeit kundigen','jetzt','jubilant','jumpstart','jung','kadaver','kampf','katapult','katastrophe','kaufen','kein risiko','keine verpflichtung','kickstart','kindisch','kitschig','klaglich','klar','knast','kollabieren','kollosal','komfortabel','komisch','kompetitiv','komplett','kompromiss','komsich','konstruktiv','kontrollierend','kontrollverlust','kooperativ','kopie','korrupt','kostenlos','kraftlos','kraftvoll','krankhaft','kreativ', 'kreative','kriese','kritisch','kruppel','lachen','lacherlich','lahm','last minute','lauernd','lebendig','lebenslanglich','lecken','lecker','legendar','legitim','leiche','leicht','leiden','leider','leise','letzte chance','letzte','leuchtend','liberal','licht','liebe','liebenswurdig','liebevoll','life-changing','limitiert','lohnend','loser','losung','lugen','lugend','lukrativ','lust','lustig','lustige','lustigsten','luxorios','magisch','mainstream','mammut','manipulativ','massiv','masterclass','meditierend','meiseter','meistverkauft','meltdown','millionen','mind-blowing','minderwertig','minimalist','missbrauch','misstrauisch','mittelmassig','mittig','modern','moderne','moglichkeiten','monetarisieren','monumental','mord','motiviert','muhelos','muhevoll','mull','mut','mutig','nachmachen','nachteile','nackt','nagel','naiv','natural','nazi','neid','nervos','neu','niedertrachtig','niemals','notfall','notiert','nutzlich','nutzlos','offensichtlich','offiziel','Offnen','ohne hintergedanken','ok','okay','Okonomisch','on-demand','opfer','optimistisch','overnight','packend','panik','panzer','paralisiert','pas','passioniert','pause','payback','peinlich','perfekt','perplex','perskeptive','pessimistisch','pfund','piranha','pleite','plotzlich','pochend','polarisierend','popular','portfolio','praktisch','preis','prestige','privat','privatsphare','priviligiert','problem','produktiv','professionell','profit','profitabel','provokativ','provozierend','prozess','psychologisch','qual','qualen','qualitat','rabatt','rache','rachsuchtig','raffiniert','rasend','rat','rau','recherche','reduziert','reflektieren','regeln','reich','reiche','reichtum','relaxed','report','responsive','revolutionar','riesig','risiko','riskant','riskieren','rotzfrech','rowdy','ruckrat','ruckschlag','rucksichtlos','ruhig','ruiniert','sabotiert','sadistisch','sale','sarkastisch','scam','schabig','schadigend','schadlich','schamlos','schatz','schicksal','schlachten','schlafen','schlag','schlau','schlimm','schmerzhaft','schmerzlos','schmuggel','schnell','schnellstart','schokierend','schonheit','schrecklich','schreien','schritt fur schritt','schuld','schuldlos','schwach','schwarm','schwarzmarkt','schwerkraft','schwinden','sechsstellig','sehenswerte','selbsthass','selten','sensationell','sex','sexy','sicher','sicherheit','sicherlich','sieg','sill','simpel','sinnlich','sinnlos','skandal','skandalos','skill','sklave','sneak-peek','snob','sofort gespart','sofort','sollte','sonnig','sonnige','sonnigen','sorgen','sorgfaltig','sorglos','spannend','sparen','sparsam','spass','spassig','spektakular','speziell','spielen','spoiler','spontan','spotlight','stabil','stark','start','stoisch','stolz','stop','strahlend','strangulieren','strategie','studien','stumperhaft','stur','sunden','sundigend','super','superb','survival','tapfer','tauschend','teaser','technologie','terror','terrorist','teuer','tief','tiefgreifend','tierisch','tod','todlich','toll','tolle','toller','tortur','tot','tote','toten','totend','toxisch','tragisch','tragodie','transfomieren','transparenz','trauma','traumatisiert','traurigkeit','trend','tricks','trigger','triumpf','trocken','trotz','trugerisch','tweaks','tyrann','Ubel','Uberfordert','Uberkommen','Uberleben','Uberlegen','Uberraschend','Uberrascht','Uberraschung','Uberwaltigend','Uberwinden','ultimativ','umfassend','umstritten','umwerfend','unatorisiert','unaufhaltbar','unausgelasted','unbedacht','unbeliebt','unbeschwert','unbewusst','undercover','undokumentiert','unehrlich','unentschlossen','unerwartet','unfahig','ungeduldig','ungedult','ungehort','ungemutlich','ungerechtfertigt','ungesehen','ungetrubt','ungewohnlich','ungezogen','unglaublich','unglaubliches','uninteressiert','unkontrollierbar','unkonventionell','unlimitiert','unpenetrierbar','unschuldig','unsicher','unstabil','unter verschluss','untergrund','unterhaltsam','unterstutz','unterstutzend','unubertroffen','unvergesslich','unverneinbar','unvoreingenommen','unwiderstehlich','unwirtlich','unzensiert','unzuverlassig','up-selling','vaporisieren','verangstigt','verantwortlich','verargert','verarscht','verbessert','verbluffend','verblufft','verboten','verbreiten','verdachtig','verdammt','verdeckt','vereinfacht','verfuhrend','vergebend','vergessen','vergleich','verhauen','verifizieren','verkommen','verlegen','verletzbar','verletzt','verlockend','verloren','vermasselt','vermeiden','vermogen','vernichten','vernichtend','vernunftig','veroffentlichung','verpassen','verraterisch','verruckt','versagen','verschwitzt','versichert','verspielt','versprechend','versteckt','vertrauenswurdig','vertraulich','vertraumt','verurteilend','verwunderlich','verwundet','verzaubernd','verzweifelt','vierfach','vogelfrei','vollig','vollstandig','vorsicht','vorstellungskraft','vorteil','wachstum','wagemutig','wahnsinn','wahnsinnig','wahrhaftig','wahrheit','wahrheitsgemass','wahrscheinlich','warnung','was dir keiner sagt','wehleidig','welt','wenig bekannt','wert','wertvoll','wichtig','widerlich','wiedererkannt','wild','wilde','wilden','willensstarke','wirr','wohltatigkeit','wortlich','wunder','wunderbar','wunderbaren','wunderschon','wutend','zeichen','zeitig','zen','zensiert','zerschlagen','zerschmetternd','zerstorend','zertifiziert','zielorientiert','zischend','zischt','zocken','zogernd','zugeben','zuruckgehalten','zuruckgelassen','zuruckweisen','zusatzlich','zutaten','zuverlassig','zwangsernahrt','zweifelnd','zwickend','zwingend','einfache','einfachen','einfaches','einfacher','simple','simplen','simples','simpler','besten','bestes','bester','beste','bestbewertet','bestbewerteten','bestbewertete','bestbewerteter','bestbewertetes','Ã¼berraschende','Ã¼berraschenden','Ã¼berraschendes','Ã¼berraschender','hilfreiche','hilfreiches','hilfreichen','hilfreicher','fÃ¶rdern','unterstÃ¼tzen','helfen','spielerisch','spannende','spannendes','spannenden','spannender','groÃŸartige','groÃŸartiges','groÃŸartigen','groÃŸartiger','ideal','ideales','idealen','idealer','faszinierend','faszinierendes','faszinierenden','faszinierender','wichtig','wichtige','wichtiges','wichtigen','wichtiger','sicher','sichere','sicheres','sicheren','sicherer','umfassende','umfassendes','umfassenden','umfassender','ultimative','ultimatives','ultimativen','ultimativer','einzigartige','einzigartiges','einzigartigen','einzigartiger'];
PK     ‘ŠU]ï¦Ÿ>‚  ‚    assets/vendor/powerwords/hu.phpnu „[µü¤        <?php
return [ 'elkÃ©pesztÅ‘', 'megdÃ¶bbentÅ‘', 'szenzÃ¡ciÃ³s', 'meglepÅ‘', 'elragadÃ³', 'fÃ©lelmetes', 'ijesztÅ‘', 'vonzÃ³', 'ellentmondÃ¡sos', 'zseniÃ¡lis', 'borzalmas', 'remek', 'elkÃ¡prÃ¡ztatÃ³', 'katasztrofÃ¡lis', 'meghÃ¶kkentÅ‘', 'lenyÅ±gÃ¶zÅ‘', 'csodÃ¡latos', 'ijedt', 'megnyugtatÃ³', 'felkavarÃ³', 'inspirÃ¡lÃ³', 'lehangolÃ³', 'fÃ¡jdalmas', 'gyÃ¶nyÃ¶rÅ±', 'bÃ¡mulatos', 'megszÃ©dÃ­tÅ‘', 'bÅ±nÃ¶s', 'Ã¶rdÃ¶gi', 'lebilincselÅ‘', 'megsemmisÃ­tÅ‘', 'lÃ¡tvÃ¡nyos', 'hÃ¡tborzongatÃ³', 'csÃ¡bÃ­tÃ³', 'fÃ©nyÅ±zÅ‘', 'szÃ­vszorÃ­tÃ³', 'tragikus', 'szertelen', 'Ã¶lelÅ‘', 'megbocsÃ¡tÃ³', 'Ã¶ntelt', 'Ã¶nzÅ‘', 'buzgÃ³', 'hajszolt', 'kÃ¶nyÃ¶rtelen', 'elmÃ©s', 'fantasztikus', 'gÃ¡tlÃ¡stalan', 'Å‘rjÃ­tÅ‘', 'visszataszÃ­tÃ³', 'fÃ©ktelen', 'Ã¶sszetÃ¶rt', 'megrontott', 'fÃ©nyes', 'vÃ¡ratlan', 'Ã©lÃ©nk', 'kifinomult', 'dÃ¶bbenetes', 'felÃ¼dÃ­tÅ‘', 'megvÃ¡ltÃ³', 'megtÃ©vesztÅ‘', 'hatÃ©kony', 'Ã©rzelmes', 'Ã©leterÅ‘s', 'meghatÃ³', 'haragos', 'elÃ©gedett', 'bosszantÃ³', 'nagylelkÅ±', 'ragyogÃ³', 'izgalmas', 'csalÃ³dott', 'megrÃ¡zÃ³', 'mÃ©ltÃ³sÃ¡gteljes', 'csÃ¡bos', 'befogadÃ³', 'kirekesztÅ‘', 'lelkes', 'elkÃ©sett', 'megdÃ¶nthetetlen','csodÃ¡lkozÃ³', 'feszÃ¼lt', 'dermesztÅ‘', 'forrÃ³', 'Ã¶sszetÃ¶rt', 'Ã©lvezetes', 'nyomasztÃ³', 'diadalmas', 'megsebzett', 'megtorlÃ³', 'kitartÃ³', 'remÃ©nytelen', 'Ã©rzÃ©keny', 'tÅ±nÅ‘dÅ‘', 'mÃ¡gikus', 'kifÃ¼rkÃ©szhetetlen', 'vÃ¡gyakozÃ³', 'Ã¼tÅ‘s', 'megbÃ©kÃ©lÅ‘', 'gyÃ¡szos' ];
PK     ‘ŠU]ööËu  u    assets/vendor/powerwords/sv.phpnu „[µü¤        <?php return [
	'akta', 'ansedd', 'ansett', 'ansedda', 'attraktiv', 'attraktivare', 'attraktivast', 'attraktivt',
	'banbrytande', 'belaten', 'belÃ¥ten', 'belÃ¥tnare', 'belÃ¥tnast', 'belÃ¥tet', 'beromd', 'berÃ¶md', 'berÃ¶mda',
	'berÃ¶mdare', 'berÃ¶mdast', 'berÃ¶mt', 'betydelsefull', 'betydelsefullare', 'betydelsefullast', 'betydelsefullt',
	'bevisad', 'bevisa', 'bevisade', 'bevisar', 'bevisat', 'blandande', 'blanda', 'blandar', 'blandade', 'blandat',
	'briljant', 'briljantare', 'briljantast', 'effektiv', 'effektivare', 'effektivast', 'effektivt', 'eftertraktad',
	'eftertraktade', 'eftertraktar', 'eftertraktat', 'elegant', 'elegantare', 'elegantast', 'enastaende',
	'enastÃ¥ende', 'energisk', 'energiskare', 'energiskt', 'exklusiv', 'exklusivare', 'exklusivast', 'exklusivt',
	'fangslande', 'fantastisk', 'fantastiska', 'fantastiskt', 'fint', 'fin', 'finare', 'finast', 'finaste',
	'framgangsrik', 'framgÃ¥ngsrik', 'framgÃ¥ngsrikare', 'framgÃ¥ngsrikast', 'framgÃ¥ngsrikt', 'fullandad',
	'fullÃ¤ndad', 'fullÃ¤ndade', 'fullÃ¤ndat', 'fullgora', 'fullgjorda', 'fullgjorde', 'fullgjort', 'fÃ¤ngslande',
	'fÃ¤ngslad', 'fÃ¤ngslade', 'fÃ¤ngslat', 'fÃ¤ngslar', 'fÃ¶rÃ¤ndra', 'fÃ¶rÃ¤ndrat', 'fÃ¶rtrÃ¤fflig', 'fÃ¶rtrÃ¤ffligare',
	'fÃ¶rtrÃ¤ffligast', 'fÃ¶rtrÃ¤ffligt', 'glansande', 'glÃ¤nsa', 'glÃ¤nsande', 'glÃ¤nste', 'glÃ¤nst', 'glomd', 'glÃ¶mda',
	'glÃ¶mde', 'glÃ¶mma', 'glÃ¶mmer', 'glÃ¶mt', 'hyllad', 'hyllade', 'hyllar', 'hyllat', 'imponerande', 'imponerad',
	'imponerade', 'imponerar', 'imponerat', 'inspirerad', 'inspirerande', 'inspirerar', 'inspirerade', 'inspirerat',
	'kand', 'kÃ¤nd', 'kÃ¤nda', 'kÃ¤ndare', 'kÃ¤ndast', 'kÃ¤nt', 'kraftfull', 'kraftfullare', 'kraftfullast', 'kraftfullt',
	'kraftig', 'kraftigare', 'kraftigast', 'kraftigaste', 'kreativ', 'kreativare', 'kreativast', 'kreativt', 'langtan',
	'legendarisk', 'legendariska', 'legendariskt', 'lidelsefull', 'lidelsefulla', 'lidelsefullare', 'lidelsefullast',
	'lidelsefullt', 'livlig', 'livligare', 'livligast', 'livligt', 'lÃ¤ngtan', 'lysande', 'lyser', 'lyste', 'maktig',
	'mÃ¤ktig', 'mÃ¤ktigare', 'mÃ¤ktigast', 'mÃ¤ktigt', 'minnesvard', 'minnesvÃ¤rd', 'minnesvÃ¤rda', 'minnesvÃ¤rt', 'oerhord',
	'oerhÃ¶rd', 'oerhÃ¶rdare', 'oerhÃ¶rdast', 'oerhÃ¶rt', 'oforglomlig', 'ofÃ¶rglÃ¶mlig', 'ofÃ¶rglÃ¶mligare',
	'ofÃ¶rglÃ¶mligast', 'ofÃ¶rglÃ¶mligt', 'omtycka', 'omtycker', 'omtyckte', 'omtyckt', 'omtyckta', 'ondskefull',
	'ondskefullt', 'ondska', 'onskan', 'otroligare', 'otrolig', 'otroligast', 'otroligt', 'palitlig', 'passion',
	'passionerad', 'passionerade', 'passionerat', 'praktfull', 'praktfullare', 'praktfullast', 'praktfullt', 'pris',
	'prisa', 'prisade', 'prisar', 'prisa', 'prisar', 'prisat', 'professionell', 'professionella', 'professionellt',
	'pÃ¥litlig', 'pÃ¥litligare', 'pÃ¥litligast', 'pÃ¥litligt', 'renommerad', 'renommerade', 'renommerat', 'revolution',
	'revolutionera', 'saker', 'sÃ¤ker', 'sÃ¤krare', 'sÃ¤krast', 'sÃ¤kert', 'sallsynt', 'sÃ¤llsynt', 'sÃ¤llsyntare',
	'sÃ¤llsyntast', 'sÃ¤llsynthet', 'sensationell', 'sensationellare', 'sensationellast', 'sensationellt', 'skapad',
	'skapade', 'skapande', 'skapar', 'skapat', 'sofistikerad', 'sofistikerade', 'sofistikerat', 'speciell',
	'speciellare', 'speciellast', 'speciella', 'speciellt', 'stark', 'starkare', 'starkast', 'starkt', 'storslagen',
	'storslagna', 'storslaget', 'stralande', 'strÃ¥la', 'strÃ¥lade', 'strÃ¥lar', 'strÃ¥lat', 'strÃ¥lande', 'tillfredstalld',
	'tillfredsstÃ¤lld', 'tillfredsstÃ¤llda', 'tillfredsstÃ¤llde', 'tillfredsstÃ¤ller', 'tillfredsstÃ¤lla',
	'tillfredsstÃ¤llt', 'trygg', 'tryggare', 'tryggast', 'tryggt', 'underbar', 'underbarare', 'underbarast', 'underbart',
	'ungdomlig', 'ungdomligare', 'ungdomligast', 'ungdomligt', 'uppfylla', 'uppfylld', 'uppfyller', 'uppfyllt',
	'uppriktig', 'uppriktigare', 'uppriktigast', 'uppriktigt', 'utmarkt', 'utmÃ¤rka', 'utmÃ¤rkt', 'utmÃ¤rktast',
	'utmÃ¤rker', 'utmÃ¤rkte', 'utstralad', 'utstrÃ¥lade', 'utstrÃ¥lar', 'utstrÃ¥lat', 'utstrÃ¥lande', 'vasentlig',
	'vÃ¤sentlig', 'vÃ¤sentligare', 'vÃ¤sentligast', 'vÃ¤sentligt', 'viktig', 'viktigare', 'viktigast', 'viktigt', 'Ã¤kta',
	'Ã¤ktare', 'Ã¤ktast', 'Ã¤ktaste', 'Ã¶nskad', 'Ã¶nska', 'Ã¶nskan', 'Ã¶verlÃ¤gsen', 'Ã¶verlÃ¤gsnare', 'Ã¶verlÃ¤gsnast',
	'Ã¶verlÃ¤gset'
];PK     ’ŠU]�ÀlÈ31  31    assets/vendor/powerwords/id.phpnu „[µü¤        <?php return ['abadi','absolut','agenda rahasia','agresif','ahli','ahmak','ajaib','aktif','akui','alamiah','alur rahasia','aman','aneh','anggaran','anggun','angkuh','animasi','animo','anonim','anti gagal','antusias','apakah anda tahu','argumentatif','asing','asli','asusila','asyik','autentik','awas','ayem','aziz','azmat','badai','badut','bagaimana cara','bagi hadiah','bahagia','bahaya','balas dendam','banget','bangsat','bantahan','banter','banyak akal','baru','baru saja tiba','batalkan kapan saja','batas waktu','batu sandungan','bawah tanah','bebas rasa bersalah','bejat','beli','belum dimanfaatkan','belum pernah terjadi','benar-benar','bencana alam','benci','beneran','bengis','bengkok','beracun','berahi','berani','berapi','berbahagia','berbahaya','berbakti','berbisa','berdarah','berdarah dingin','berdosa','berfokus','bergeliat','bergelombang','berguna','berharap','berharga','berhasil','berhasrat','berhawa-nafsu','berisiko','berjiwa','berkedut','berkelakar','berkembang','berkeringat','berkesan','berkuasa','berkurang','berlimpah','bermanfaat','bermusuhan','berpusat','bersandaran','bersemangat','berseri','berseri-seri','bersertifikat','berseteru','bersih','bersinar','bersorak','bersyukur','bertahan','bertahan hidup','bertambah','bertanggung jawab','bertarung','bertenaga','berterimakasih','bertumbuh','beruap','berubah','berwenang','besar','besar-besaran','bikin emosi','bikin malu','bikin mual','bikin ngiler','bimbang','binal','bingung','bisa beradaptasi','bocoran','bodoh','bohong','bokek','bom','bombardir','bonus','boros','brutal','buas','budak','bui','bukan main','buntut','bunuh','buruan','busuk','busung','buta','cabul','cahaya','cairan','cambuk','canggung','cantik','caruk','cekatan','cemerlang','cengis','cepat','cerah','cerdas','cerewet','ceroboh','cinta','congkak','contekan','contoh','cukup','cukup besar','cukupan','curang','curiga','daftar hitam','dahsyat','daif','dalam','dalam waktu dekat','dapat diandalkan','dapat dikembalikan','dapat ditindaklanjuti','darurat','dasar','daya ingat','definitif','deg-degan','demoralisasi','denda','dendam','dengan cepat','dengan mudah','dengan sedih','dengan serius','derita','detik akhir','di bawah harga','di dalam zona','di sini','diakui','diam','diancam','diasingkan','dibalik layar','diberdayakan','diberkati','dibodohi','dibunuh','dicari','dicatat','dicekok','didiagnosis','didukung','dihukum','dilanggar','dilarang','dilepaskan','dimainkan','dimarahi','dinamis','dipecat','dipercaya','disampaikan','disayangkan','disederhanakan','diselundupkan','disensor','disetujui','diskon','disokong','ditahan','ditandai','ditargetkan','dites','ditipu','diwajibkan','dobel','dokumen','dolar','dominasi','dorongan','dosa','dosa-dosa','durjana','edan','edukatif','efektif','efisien','ekonomis','eksklusif','eksplosif','ekstra','elite','elok','enam angka','eneq','energi','energik','enteng','epidemis','epik','etis','euforia','fantasi','final','fokus','frustrasi','fundamental','gaduh','gagah','gagal','gagal total','gaib','gairah','galak','gampang','ganjil','garang','gasang','gawat','gede','gelap','geli','gelisah','gelora','gembira','gemetar','gengsi','geram','gila','gila hormat','glamor','goblok','godaan','gratis','gravitasi','grogi','gugatan','gugup','gundah','gusar','hadiah','hak istimewa','hakekat','hancur','haram','harapan','harfiah','harga','harga diri','hari ini','hari penghakiman','harta','harus','hasil','hati','hebat','heboh','hemat','hidup','hina','hingar-bingar','hipnosis','hipnotik','hiruk-pikuk','hoaks','hoax','horor','humor','idiot','ilusif','imajinasi','iman','indah','informatif','inkonvensional','inovatif','inspirasi','intel','intens','interesan','intinya','invasi','investasi','iri','irs','istirahat','jackpot','jagoan','jagur','jahat','jahil','jarang','jatuh','jebakan','jelek','jeles','jelimet','jenazah','jengkel','jenius','jijik','jinak','jorok','jubilant','judi','jujur','kacau','kado','kaget','kalah','kasar','kaya','keahlian','keajaiban','keamanan','kebahagiaan','kebaruan','kebebasan','kebenaran','keberanian','kebesaran','kebiadaban','kebohongan','kecanggungan','kecantikan','kecerobohan','kecewa','kedahsyatan','keeksklusifan','kegagahan','kegagalan','kegembiraan','kegigihan','kegirangan','kehilangan','kejam','kejelasan','kejut','kejutan','kejutkan','kekalahan','kekeliruan','kekosenan','kekurangan','kelancangan','kelas master','kelengkapan','kelimpungan','keluhuran','kemaruk','kematian','kemelaratan','kemenangan','kenalan','kengerian','kentara','kepeloporan','kepercayaan','keperkasaan','keracak','kerakusan','keramahan','keras','keras kepala','keringat','kesakitan','kesalahan','kesederhanaan','kesedihan','keselamatan','kesempatan terakhir','kesepian','ketakutan','keteguhan hati','ketekunan','keterlaluan','ketidakberdayaan','ketidaksabaran','keunggulan','keuntungan','kewalahan','keyakinan','khidmat','kiamat','kiat','kickstart','kikuk','kokoh','kolosal','kompetitif','komprehensif','kompromi','konfidensi','konstruktif','kontan','kontroversi','konyol','kooperatif','kopi','korban','korupsi','kotor','kreatif','krisis','kritis','kualitas','kuat','kuno','kurang ajar','kurang dimanfaatkan','kusut','kw','laba','langka','langkah','langsung','laporan','larangan','lawan','lebih bagus','lebih baik','ledakan','lega','legendaris','lelah','lemah','lengkap','lezat','liar','liberal','licik','licin','lihai','limbah','lincah','lipat empat','lonjakan','luar biasa','lucu','luka berat','lumpuh','luwes','mabuk','mahal','mainstream','makarya','makmur','mala','malapetaka','malas','malu','mampu','manipulatif','manis sekali','manjur','mantul','manusia super','mara','marah','masalah','masif','masih','master','mata duitan','mati','mati kutu','mayat','megah','melayang','meledak','meleleh','melena','melepaskan','meletus','melindungi','melongo','melonjak','melontarkan','melumpuhkan','meluncurkan','memaafkan','memalukan','mematikan','membakar','membalas','membandingkan','membenci diri sendiri','memberontak','membinasakan','membocorkan','membuat','membuat ulang','membubung','membuka mata','membunuh','memenuhi','memerah','memetik','memikat','memikat hati','memilukan','memperberat','memperdaya','memperkenalkan','mempermalukan','mempesona','mempesonakan','memprovokasi','memromosikan','memuakkan','memukau','memukul','memusnahkan','memvalidasi','menakjubkan','menakuntukan','menakuti','menakutkan','menang','menangis','menantang','menarik','menawan','mencapai','mencegah','mencekik','mencengkeram','mencolok','mencuri','mencurigakan','mendalam','mendebarkan','menderita','mendesak','mendobrak','mendukung','menegur','menekankan','menemukan','menendang','menentang','menewaskan','mengagumkan','mengaku','mengakui','mengalahkan','mengancam','mengangkat','menganiaya','mengatasi','mengejuntukan','mengeksploitasi','mengerikan','mengerti','mengesankan','mengetahui semua','menggelisahkan','menggemparkan','menggenjot','menggerakkan','menggertakkan','menggilas','menggoda','menghancurkan','menghapuskan','mengharukan','menghebohkan','mengherankan','menghina','menghukum','mengibuli','mengidam','mengigau','menginspirasi','mengintai','mengintimidasi','menguangkan','menguap','menguasai','mengubah','mengubah hidup','mengulangi','mengumumkan','mengungkap','mengungkapkan','menguntungkan','mengutuk','meningkatkan','menipu','menjanjikan','menjerumuskan','menjijikkan','menjilat','menjulang','menolak','menuduh','menundukkan','menunggu','menusuk dari belakang','menutupi','menyabotase','menyakitkan','menyalakan','menyarankan','menyayat','menyelundupkan','menyemangati','menyeramkan','menyerang','menyetujui','menyihir','menyiksa','menyilaukan','menyogok','menyolok','menyoroti','menyuap','meracuni','merangsang','merayu','merebut','merendahkan','merenungkan','meriah','meroket','merosot','merugikan','mewah','meyakinkan','milik','milyar','mimpi buruk','minat','minimalis','miskin','misteri','molek','muak','mudah','mudah dipahami','mulai cepat','mulia','muncul','mungkin','murah','nafsu','naik pitam','naim','nakal','nanah','nasib','nazi','neraka','ngaco','ngakak','ngeri','ngiler','nilai','niscaya','nol rupiah','nyaman','obral','obsesi','oke','omong kosong','optimis','optimistis','orang bodoh','orang dalam','orang gila','orisinil','padat','pahala','pahlawan','paling besar','paling dahsyat','paling efektif','paling lucu','palsu','pandir','panik','parah','pasar gelap','pasti','pastinya','pastinya paling rendah','patut diperhatikan','pecah','pecinta kesenangan','pecundang','pedih','peka','pelanggaran','peluang','peluncuran','pembantaian','pembunuhan','pemecahan','pemicu','pemula','penaklukan','pendendam','pendengki','penemuan','penerobosan','pengakuan','pengecut','pengembalian','pengembalian dana','penghakiman','penghancuran','penghinaan','pengungsi','penipu','penipuan','penjahat','penjara','penjualan terbaik','penting','penuh','penuh dosa','penuh kepercayaan','penuh warna','penyalahgunaan','peraturan','percaya diri','perhitungan','periang','peringatan','perjuangan','perlente','permintaan','persis','perspektif','pertama','pertama dalam sejarah','pertarungan','pertumpahan darah','pesimistis','pesta','petaka','pingsan','pintu belakang','plong','polarisasi','polos','populer','portofolio','pound','praktis','premi','privasi','privat','produktif','profesional','provokatif','psikologis','puas','pucat','pukulan','putus asa','racun','ragu','ragu-ragu','rahasia','rahasia dagang','raksasa','rakus','ramah','reaksi','reflektif','rekam jejak','rendah','rendahan','renjatan','rentan','resep','resmi','responsif','retas','revolusioner','ria','riang','rimbun','risau','riset','risiko','rumus','rusak','sabar','sadar','sadis','sah','sama sekali','samar','samar-samar','sangat bagus','sangat disarankan','sangat efektif','sangat menakjubkan','sangat menarik','sangsi','santai','saran','sarang telur','sarkastik','sayu','secara pengecut','sederhana','sedikit diketahui','segera','seharusnya','sehat','seimbang','sejati','sekarang','seks','seksi','selalu','selamanya','selaras','semalam','sembunyi','sempit','sempurna','semua termasuk','senang sekali','sengit','sensasionil','sentosa','sepenuhnya','seperti anak kecil','seram','serangan','sesegera','seumur hidup','siksa','siksaan','simpan','sinis','sinting','skandal','solusi','sombong','spektakuler','spesial','spoiler','spontan','stabil','stop','strategi','stres','studi','studi kasus','suci','suka hati','sukaria','sukses','sulap','sumber keuntungan','sungguh-sungguh','super','superior','surgawi','swasembada','syahwat','syur','tabah','tabu','tabungan','tabungan instan','tahan resesi','tajam','tak ayal','tak bersyarat','tak dikenal','tak kenal takut','tak tahu malu','tak terkendali','tak ternilai','tak tertandingi','takdir','takut','tamparan','tanda','tanpa beban','tanpa henti','tanpa ikatan','tanpa kewajiban','tanpa pertanyaan','tanpa rasa sakit','tanpa risiko','tanpa sadar','tanpa sensor','tanpa usaha','tantangan','tawa','tawar','tegang','teguh','teknologi','teknologi tinggi','telah ditinjau kembali','telanjang','telaten','teliti','tenang','tendang bokong','tenggelam','tenteram','tentu','tentunya','tepat','tepat waktu','tepi','terakhir','teramat','terang','terangkat','teratas','terbaik','terbaru','terbatas','terbebaskan','terbesar','terbongkar','terbuka','terbukti','tercela','tergeletak','terhormat','teriak','terima kasih','terinspirasi','terjamin','terjangkau','terjatuh','terjebak','terjerambab','terjun','terkejut','terkenal','terkesima','terkespos','terlalu','terlarang','terletak','terlindungi','terlupakan','termenung','termotivasi','terobsesi','teror','teroris','terpenting','terpenuhi','terperdaya','terperinci','terperosok','terpesona','terpilih','tersangkut','terselubung','tersembunyi','tersenyum','tertawa','tertekan','tertentu','tertinggal','tertutup','tetap','tiba-tiba','tidak baik','tidak berdaya','tidak berguna','tidak bisa dipungkiri','tidak bisa ditembus','tidak dapat dihentikan','tidak dipalsukan','tidak disiarkan','tidak handal','tidak kolot','tidak mampu','tidak masuk akal','tidak mengerti','tidak merasa aman','tidak nyaman','tidak past','tidak peduli','tidak pernah','tidak populer','tidak resmi','tidak responsif','tidak sabar','tidak sah','tidak seimbang','tidak sopan','tidak stabil','tidak tenang','tidak tepat','tidak terbatas','tidak terduga','tidak tergesa-gesa','tidak terkendali','tidak terlihat','tidak terlupakan','tidak tertandingi','tidak tertarik','tidak yakin','tidak-tidak','tidur','tingkatkan','tips','tolak','tolol','tragedi','tragis','transparansi','trauma','tren','trik','tripel','tulang belakang','tulang punggung','tulus','uang','uang kembali','ugal-ugalan','ulung','unduh','ungkapan','unik','untung','verifikasi','wabah','wahid','wahyu','wajib','waswas','wewenang','yakin'];
PK     ’ŠU]7è¿æ-  æ-    assets/vendor/powerwords/nl.phpnu „[µü¤        <?php return ['aanbevelen','aangemoedigd','aangrijpende','aankondigen','aanpasbaar','aanpassingen','aantrekkelijke','aanval','aanvraag','aanzienlijke','aarzelende','absoluut','absoluut laagste','absurd','achter scenes','achterbaks','achterdeur','achtergelaten','adembenemende','adequaat','advies','afgeleid','afgeslagen','afgestreept','afgetekend','afgrijselijk','afgunst','aframmelen','aframmeling','afranselen','afrekenen','afval','aggressief','alarmerend','alles-inclusief','altijd','alwetend','amp','angstaanjagende','angstig','annuleer ieder moment','anoniem','apocalypse','arm','armageddon','arrogant','authentiek','autoriteit','baanbrekende','bang','basis','baviaan','beargumenteerd','bedelen','bedreigde','bedreigen','bedriegen','bedrog','bedrogen','begeesterd','beginner','begrip','behoren','bekentenis','bekeren','belachelijk','belangrijk','belangrijkste','belasterd','belastingdienst','beledigend','belediging','beloning','benadruk','benangstigend','beoordelend','bepaalde','beperkt','beproeving','bereiken','berispend','beroemd','beschaamd','beschadigend','beschamen','beschamend','bescheiden','beschermde','beschermen','beschuldigen','besluiteloos','besparingen','beste','betaal niets','betaalbaar','beter','betoverd','betoverend','betreurenswaardig','betrouwbaar','beveiliging','bevordern','bevredigd','bevreesd','bevrijd','bewezen','bewust','bezeten','biechten','biljoen','bleek','bloed','bloedbad','bloedig','bloedstollend','blootgesteld','blozend','blunder','boef','boeien','boeiend','bom','bona','bona fide','bonus','boos','bovenmenselijk','brandend','breken','brekend','briljant','bruis','bruisend','bruist','brutaal','budget','buitengewone','buitensporigheid','bullshit','capabel','case study','cataclysmische','catastrofe','cheat-sheet','comfortabel','compleet','compromis','compulsief','concurrerend','constructief','contant','controle','controleer','controlerend','controversieel','corrumperende','corrupt','creatief','crisis','dalen','dankbaar','dapper','dapperheid','dartel','de waarheid','deadline','decadent','definitief','demoraliserende','desperaat','diep','direct','directe besparingen','document','dodelijk','doden','dolblij','dollar','dom','domineren','dood','doodsbang','doodt','doofpot','doorbraak','download','drang','dreigend','dreigende','driedubbel','dringend','droefenis','dromerig','dubbel','duidelijk','duidelijkheid','duiken','duur','dynamisch','echt','een beetje meer','eenvoud','eenzaam','eerlijk','eerste','effectief','efficient','eigen agenda','elimineer','elite','empowered','energie','energiek','eng','enorm','enorme','enthousiast','epidemisch','episch','erkende','ernstige','ervaren','essentieel','ethisch','etter','euforisch','exclusieve','exclusiviteit','expert','explosief','extra','extreem','eye-opening','failliet','falen','fantasie','fantastisch','fascinerend','feest','feestelijke','fide','fijn','finaal','flauwte','flirt','focus','formule','fortuin','fout','fundamenten','geaaid','geaard','geanimeerd','gebalanceerd','gebruiken','gecensureerd','gecentreerd','gecertificeerd','gedenkwaardig','gedesorienteerd','gedetailleerde','gediagnosticeerd','gedood','geduld','geeerd','geen idee','geergerd','geest','gefrustreerd','gegarandeerd','geheim','geheim motief','geheimen','geinsprireerd','gek','geld','geld terug','geleidelijk','geleverd','geloof','geluk','gelukkig','gemakkelijk','gemotiveerde','genie','genoegen','genoteerd','geobsedeerd','gepaniekeerd','gepassioneerd','gepriviligeerd','gerichte','geschokt','geschonden','geselecteerde','gesmokkeld','gespannen','gespeeld','getest','getraumatiseerd','gevaar','gevaarlijk','gevaarlijke','gevangenis','geweldadig','geweldig','gewond','gezaghebbende','gezegend','gezocht','gift','giftig','giftige','gigantische','gil','glamoureus','gloeiend','glorieus','gluiperig','goed verkopend','goedgekeurd','goedkeuren','goedkoop','gokkend','gracieus','grappig','grappigst','gratis','gretig','grijpen','groei','grondig','groot','grootsheid','grootste','gruwelijke','haast','hand liggend','handelsgeheim','handig','handige','hart','hartverscheurend','hartverwarmend','hatelijk','haten','heb gehoord gezond','hebzucht','heerlijk verrukkelijk','heftig','heilig','heimelijk','hel','helaas','held','helder','hemeld','herzien','high tech','hilarische','hoe','hoffelijk','hoogst effectief','hoogste','hoop','hoopvol','horror','houden van plezier','hulpeloosheid','humor','hunkeren','hypnotisch','idioot','ijzeren','ijzersterk','illegaal','impopulair','in val','inbreken','incapabel','incompetent','incvasie','indrukwekkende','inferieur','informatieve','ingredienten','inhaligheid','innovatief','insider','inspirerend','instabiele','instorten','intelligent','intens','interessante','intrigerende','introductie','investering','is hier','jackpot','jaloers','jeugdige','joviaal','jubelend','juichen','kadaver','kalm','kans','kansen','katapult','kernsmelting','kickstart','kinderachtig','kipsimpel','kleurrijke','knal','kolosaal','kolossaal','koop','koopje','kopie','koppig','korting','kostbaar','krachtig','krachtige','kreupel','kritische','kwaadaardig','kwaliteit','kwetsbare','laatste','laatste kans','lach','lachen','lachend','lafaard','laffe','lam','lancering','last minute','leerzaam','lef','legendarisch','legitiem','letterlijk','leugens','leven','levend','levendig','levensveranderende','liberaal','licht','liefde','liegen','lijden','lijk','likken','loeren','losbandig','losgelaten','loslaten','luchthartige','lucratief','lui','lust','luxe','luxueus','maak','machteloos','magisch','magsich','mainstream','makkelijk','mammoet','manipulatieve','marteling','massief','masterclass','meditatief','meedogenloos','meester','meewerkend','memorabel','meteen','middelmatig','minachtend','minachtende','minimalistische','misbruik','misleidende','mislukking','misvatting','moed','moedig','moeite','moeiteloos','monumentaal','mooi','moord','mysterie','naakt','nachtmerrie','nadelen','nagel','natuurlijk','nauwgezette','nazi','nederigheid','neerbuigend','neerwaartse spiraal','nerveus','net binnen','niet responsief','nieuwe','nieuwigheid','nog steeds','noodgeval','noodlot','nooit','nutteloos','nuttig','obsessie','offensief','officiele','officieus','okay','omvormen','onaangename','onbekwaam','onbelast','onbenut','onbeperkt','onbetaalbaar','onbetrouwbare','onbevooroordeeld','onbewogen','onbewust','onbezonnen','onconventioneel','onder aan de streep','onderbenut','ondergronds','onderhandse','onderprijsd','ondersteund','ondersteunde','ondersteunend','onderzoek','ondeugend','ondeugende','ondoordringbaar','ondragelijk','oneerlijk','oneven','onfeilbaar','ongeautoriseerde','ongebruikelijke','ongecensureerd','ongecontroleerd','ongeduld','ongeduldig','ongeevenaarde','ongehaast','ongehoord','ongeinteresseerd','ongelooflijk','ongelovelijk','ongemakkelijk','ongezien','ongrijpbaar','onmiddellijk','onnozel','onontkenbaar','onovertroffen','onschuldig','ontbreekt','ontdekken','ontdekt','onterecht','ontgoocheld','onthullen','onthullend','onthutsend','ontkracht','ontploffen','ontslagen','ontsteken','ontzagwekkend','onveilige','onverbiddelijk','onvergetelijk','onverschillig','onverschrokken','onverschrokkenheid','onvervalste','onverwachte','onvoorwaardelijke','onweerstaanbaar','onzeker','op zwarte lijst','opbiechten','openen','opgelijnd','opgetild','opgetogen','opgewonden','opkomend','oplossing','opmerkelijk','opnieuw maken','oprechte','optimistisch','opwindend','opzienbarend','overbelasten','overleef','overleven','overtuigend','overvloedig','overweldigd','overwinnen','paniek','pas op','perfect','perspectief','pessimistisch','pest blij','pestkop','piek','pijn','pijnlijke','pijnloos','piranha','pittig','plagen','plotseling','plukken','pond','populair','portfolio','positief','prachtig','praktische','precies','prestige','prijs','privacy','prive','probleem','productieve','professioneel','propvol','provoceren','provocerende','psychologische','radeloos','rampzalig','rand','rapport','ravage','razernij','rebellerend','recessie bestendig','recessie-proof','rechtszaak','redden','reflecterende','regels','repliceren','represailles','repulsive','reputatie','responsief','restitutie','resultaten','reusachtig','revolutionair','rijden','rijk klinken','rijkdom','rijkelijk','risico','riskant','ruggegraat','ruig','ruine','rustig','saboteren','sadistische','sarcastisch','schaamteloos','schaars','schadelijk','schadelijke','schandaal','schandalig','schat','schattig','scheef','schokkend','schoon genoeg','schoonheid','schreeuw','schudden','schuld','schuldgevoel','sensationeel','sensueel','sereen','serieus','sex','sexy','simpel','simplistisch','slaaf','slaan','slachting','slachtoffer','slapend','slecht','slecht ingehouden','slechtste','slim','slinks','slonzig','sluw','smachten','smakeloos','smerig','smokkelen','snel','snel-start','snob','snotterend','snotterig','solide','spannende','sparen','speciaal','spectaculair','speelse','spelbreker','spervuur','spijker','spontaan','spotlight','stabiel','stap polarisatie','stap-voor-stap','stelen','sterk','sterk aanraden','stevige','stijgend','stijgende','stil','stoer','stoicijns','stom slagen','stomend','stoot','stop','stoppen','storm','straffen','stralend','strategie','streng','stressed','strijd','strijden','studies','stuipen','stuntelen','subliem','succes','succesvol','suffig','super','superbe','superieur','tank','technologie','tegenstelling','tekenen','teneergeslagen','terreur','terrorist','terug te betalen','terugbetalen','terugslag','tevreden','tijdige','toegeeflijk','toegeven','toegewijd','toename','toetakelen','tollen','tragedie','tragisch','transparantie','trauma','trefzekere','trend','triggers','triomf','trots','trucs','twijfel','twijfelachtig','twistziek','uit balans','uitbundig','uitdaging','uitgebreid','uitgehongerd','uitgelaten','uitgerust','uitzinnig','ultiem','undercover','uniek','up-sell','vaardigheid','val','valideren','valkuil','vandaag','vasthoudend','vechten','veelbelovende','veilig','veiligheid','venijnig','veraderlijk','verantwoordelijk','verbazend','verbazingwekkend','verbeelding','verbeterde','verblind','verblinden','verboden','verborgen','verdacht','verdampen','verdienen','verdoemd','verdomme','verdorven','verdrinken','vereenvoudigd','verergeren','vergelijk','vergeten','vergevend','verheffend','verkoop','verlamd','verlangen','verleidelijk','verleidelijke','verlicht','verliezer','verloren','vermijd','verminderde','vermoeide','vernietigen','verontrust','veroordelen','veroveren','verpakt','verpletterd','verpletteren','verplichting','verraderlijke','verrassend','verrassende','verrassing','verrast','verrukt','verschrikkelijk','verslaan','verspillen','verstrikt','vertrouwelijk','vertrouwen','vertrouwend','vervbodern','vervreemd','vervuld','vervullen','verwaand','verward','verwoestende','verwoesting','verzamelaar','verzekerd','verzet','verzettend','vet','vierdubbel','vijandig','vindingrijk','vloeibaar','vluchteling','volatiel','volledig','volledigheid','voor altijd','voordeel','voorproef','voortreffelijk','voorzichtig','vreemd','vreselijk','vrijheid','vrijlaten','vrolijk','vuil spel','vurig','waanzinnig','waanzinnige','waar over praat','waarde','waardevolle','waarheid','waarschijnlijk','waarschuwing','wachtend','walgelijk','wankelende','wantrouwend','wat niemand je vertelt','watertanden','weerzinwekkend','weerzinwekkende','weggever','weigeren','weinig bekend','wens','wereld','wild','wilskracht','winst','winstgevende','woedend','wonderful','wonderlijk','wraak','wraakzuchtig','wreed','wreedheid','wulpse','wurgen','zalig','zege','zeker','zeldzaam','zelfgenoegzaam','zelfhatende','zelfverzekerd','zelfvoorzienend','zen','zes-cijferige','ziedend','zielig','zinger','zinloos','zomaar','zonden','zonder vrees','zondig','zonnig','zorgeloos','zorgen zorg','zorgvuldig','zou','zuigen','zuinig','zwaartekracht','zwakke','zwarte markt','zweep','zwetend','zwijmelend'];
PK     ’ŠU]0>Ê¬á  á    assets/vendor/powerwords/es.phpnu „[µü¤        <?php
return ['increÃ­ble','asombroso','maravilloso','Ãºnico','hermoso','felicidad','brillante','cautivador','carismÃ¡tico','impactante','claro','completamente','confidencial','confianza','significativo','creativo','definitivamente','delicioso','demostrar','apresÃºrate','decidido','digno','dinÃ¡mico','impresionante','esencial','inspirador','innovador','intenso','eficaz','mÃ¡gico','magnÃ­fico','histÃ³rico','importante','increÃ­ble','indispensable','inolvidable','irresistible','legendario','luminoso','lujo','mÃ¡gico','magnÃ­fico','majestuoso','memorable','maravilloso','milagroso','motivador','necesario','nuevo','oficial','perfecto','apasionado','persuasivo','fenomenal','placer','popular','poder','prestigioso','prodigioso','profundo','prÃ³spero','poderoso','calidad','radiante','rÃ¡pido','exitoso','revolucionario','satisfecho','seguridad','sensacional','sereno','suntuoso','esplÃ©ndido','sublime','sorprendente','talentoso','terrorÃ­fico','Ãºnico','valor','vibrante','victorioso','vivo','verdaderamente','celoso','autÃ©ntico','aventurero','espectacular','exclusivo','garantizado','extraordinario','fabuloso','fascinante','formidable','genial','grandioso','gratuito','hÃ¡bil','ilimitado','impecable','infalible','infinitamente','influyente','ingenioso','inolvidable','irremplazable','lÃ­der','maestro','notable','novedoso','pionero','poderoso','reconocido','revolucionario','sorprendente','superior','triunfante','ultra','valiente','valioso','vanguardista','vigoroso','visionario','voluntad','vital','triunfo','glorioso','imparable','inigualable','inteligente','invencible','libertad','orgullo','paz','progreso','renovado','sabidurÃ­a','satisfacciÃ³n','seguro','serenidad','superaciÃ³n','talento','transcendente','transformador','valentÃ­a','victoria'];
PK     ’ŠU]<¨æŠÒ Ò $  assets/vendor/select2/select2.min.jsnu „[µü¤        /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */
!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(t){var e,n,s,p,r,o,h,f,g,m,y,v,i,a,_,s=(t&&t.fn&&t.fn.select2&&t.fn.select2.amd&&(u=t.fn.select2.amd),u&&u.requirejs||(u?n=u:u={},g={},m={},y={},v={},i=Object.prototype.hasOwnProperty,a=[].slice,_=/\.js$/,h=function(e,t){var n,s,i=c(e),r=i[0],t=t[1];return e=i[1],r&&(n=x(r=l(r,t))),r?e=n&&n.normalize?n.normalize(e,(s=t,function(e){return l(e,s)})):l(e,t):(r=(i=c(e=l(e,t)))[0],e=i[1],r&&(n=x(r))),{f:r?r+"!"+e:e,n:e,pr:r,p:n}},f={require:function(e){return w(e)},exports:function(e){var t=g[e];return void 0!==t?t:g[e]={}},module:function(e){return{id:e,uri:"",exports:g[e],config:(t=e,function(){return y&&y.config&&y.config[t]||{}})};var t}},r=function(e,t,n,s){var i,r,o,a,l,c=[],u=typeof n,d=A(s=s||e);if("undefined"==u||"function"==u){for(t=!t.length&&n.length?["require","exports","module"]:t,a=0;a<t.length;a+=1)if("require"===(r=(o=h(t[a],d)).f))c[a]=f.require(e);else if("exports"===r)c[a]=f.exports(e),l=!0;else if("module"===r)i=c[a]=f.module(e);else if(b(g,r)||b(m,r)||b(v,r))c[a]=x(r);else{if(!o.p)throw new Error(e+" missing "+r);o.p.load(o.n,w(s,!0),function(t){return function(e){g[t]=e}}(r),{}),c[a]=g[r]}u=n?n.apply(g[e],c):void 0,e&&(i&&i.exports!==p&&i.exports!==g[e]?g[e]=i.exports:u===p&&l||(g[e]=u))}else e&&(g[e]=n)},e=n=o=function(e,t,n,s,i){if("string"==typeof e)return f[e]?f[e](t):x(h(e,A(t)).f);if(!e.splice){if((y=e).deps&&o(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=p}return t=t||function(){},"function"==typeof n&&(n=s,s=i),s?r(p,e,t,n):setTimeout(function(){r(p,e,t,n)},4),o},o.config=function(e){return o(e)},e._defined=g,(s=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),b(g,e)||b(m,e)||(m[e]=[e,t,n])}).amd={jQuery:!0},u.requirejs=e,u.require=n,u.define=s),u.define("almond",function(){}),u.define("jquery",[],function(){var e=t||$;return null==e&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),e}),u.define("select2/utils",["jquery"],function(r){var s={};function c(e){var t,n=e.prototype,s=[];for(t in n)"function"==typeof n[t]&&"constructor"!==t&&s.push(t);return s}s.Extend=function(e,t){var n,s={}.hasOwnProperty;function i(){this.constructor=e}for(n in t)s.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},s.Decorate=function(s,i){var e=c(i),t=c(s);function r(){var e=Array.prototype.unshift,t=i.prototype.constructor.length,n=s.prototype.constructor;0<t&&(e.call(arguments,s.prototype.constructor),n=i.prototype.constructor),n.apply(this,arguments)}i.displayName=s.displayName,r.prototype=new function(){this.constructor=r};for(var n=0;n<t.length;n++){var o=t[n];r.prototype[o]=s.prototype[o]}for(var a=0;a<e.length;a++){var l=e[a];r.prototype[l]=function(e){var t=function(){};e in r.prototype&&(t=r.prototype[e]);var n=i.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}(l)}return r};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,s=e.length;n<s;n++)e[n].apply(this,t)},s.Observable=e,s.generateChars=function(e){for(var t="",n=0;n<e;n++)t+=Math.floor(36*Math.random()).toString(36);return t},s.bind=function(e,t){return function(){e.apply(t,arguments)}},s._convertData=function(e){for(var t in e){var n=t.split("-"),s=e;if(1!==n.length){for(var i=0;i<n.length;i++){var r=n[i];(r=r.substring(0,1).toLowerCase()+r.substring(1))in s||(s[r]={}),i==n.length-1&&(s[r]=e[t]),s=s[r]}delete e[t]}}return e},s.hasScroll=function(e,t){var n=r(t),s=t.style.overflowX,i=t.style.overflowY;return(s!==i||"hidden"!==i&&"visible"!==i)&&("scroll"===s||"scroll"===i||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},s.escapeMarkup=function(e){var t={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},s.__cache={};var n=0;return s.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null!=t||(t=e.id?"select2-data-"+e.id:"select2-data-"+(++n).toString()+"-"+s.generateChars(4),e.setAttribute("data-select2-id",t)),t},s.StoreData=function(e,t,n){e=s.GetUniqueElementId(e);s.__cache[e]||(s.__cache[e]={}),s.__cache[e][t]=n},s.GetData=function(e,t){var n=s.GetUniqueElementId(e);return t?s.__cache[n]&&null!=s.__cache[n][t]?s.__cache[n][t]:r(e).data(t):s.__cache[n]},s.RemoveData=function(e){var t=s.GetUniqueElementId(e);null!=s.__cache[t]&&delete s.__cache[t],e.removeAttribute("data-select2-id")},s.copyNonInternalCssClasses=function(e,t){var n=(n=e.getAttribute("class").trim().split(/\s+/)).filter(function(e){return 0===e.indexOf("select2-")}),t=(t=t.getAttribute("class").trim().split(/\s+/)).filter(function(e){return 0!==e.indexOf("select2-")}),t=n.concat(t);e.setAttribute("class",t.join(" "))},s}),u.define("select2/results",["jquery","./utils"],function(d,p){function s(e,t,n){this.$element=e,this.data=n,this.options=t,s.__super__.constructor.call(this)}return p.Extend(s,p.Observable),s.prototype.render=function(){var e=d('<ul class="select2-results__options" role="listbox"></ul>');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},s.prototype.clear=function(){this.$results.empty()},s.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=d('<li role="alert" aria-live="assertive" class="select2-results__option"></li>'),s=this.options.get("translations").get(e.message);n.append(t(s(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},s.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},s.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var s=e.results[n],s=this.option(s);t.push(s)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},s.prototype.position=function(e,t){t.find(".select2-results").append(e)},s.prototype.sort=function(e){return this.options.get("sorter")(e)},s.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option--selectable"),t=e.filter(".select2-results__option--selected");(0<t.length?t:e).first().trigger("mouseenter"),this.ensureHighlightVisible()},s.prototype.setClasses=function(){var t=this;this.data.current(function(e){var s=e.map(function(e){return e.id.toString()});t.$results.find(".select2-results__option--selectable").each(function(){var e=d(this),t=p.GetData(this,"data"),n=""+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<s.indexOf(n)?(this.classList.add("select2-results__option--selected"),e.attr("aria-selected","true")):(this.classList.remove("select2-results__option--selected"),e.attr("aria-selected","false"))})})},s.prototype.showLoading=function(e){this.hideLoading();e={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},e=this.option(e);e.className+=" loading-results",this.$results.prepend(e)},s.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},s.prototype.option=function(e){var t=document.createElement("li");t.classList.add("select2-results__option"),t.classList.add("select2-results__option--selectable");var n,s={role:"option"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(n in(null!=e.element&&i.call(e.element,":disabled")||null==e.element&&e.disabled)&&(s["aria-disabled"]="true",t.classList.remove("select2-results__option--selectable"),t.classList.add("select2-results__option--disabled")),null==e.id&&t.classList.remove("select2-results__option--selectable"),null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(s.role="group",s["aria-label"]=e.text,t.classList.remove("select2-results__option--selectable"),t.classList.add("select2-results__option--group")),s){var r=s[n];t.setAttribute(n,r)}if(e.children){var o=d(t),a=document.createElement("strong");a.className="select2-results__group",this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],u=this.option(u);l.push(u)}i=d("<ul></ul>",{class:"select2-results__options select2-results__options--nested",role:"none"});i.append(l),o.append(a),o.append(i)}else this.template(e,t);return p.StoreData(t,"data",e),t},s.prototype.bind=function(t,e){var i=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on("results:append",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on("query",function(e){i.hideMessages(),i.showLoading(e)}),t.on("select",function(){t.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())}),t.on("open",function(){i.$results.attr("aria-expanded","true"),i.$results.attr("aria-hidden","false"),i.setClasses(),i.ensureHighlightVisible()}),t.on("close",function(){i.$results.attr("aria-expanded","false"),i.$results.attr("aria-hidden","true"),i.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e,t=i.getHighlightedResults();0!==t.length&&(e=p.GetData(t[0],"data"),t.hasClass("select2-results__option--selected")?i.trigger("close",{}):i.trigger("select",{data:e}))}),t.on("results:previous",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger("mouseenter"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))}),t.on("results:next",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger("mouseenter"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):t<n&&i.$results.scrollTop(e))}),t.on("results:focus",function(e){e.element[0].classList.add("select2-results__option--highlighted"),e.element[0].setAttribute("aria-selected","true")}),t.on("results:message",function(e){i.displayMessage(e)}),d.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-t+e.deltaY,t=0<e.deltaY&&t-e.deltaY<=0,n=e.deltaY<0&&n<=i.$results.height();t?(i.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):n&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option--selectable",function(e){var t=d(this),n=p.GetData(this,"data");t.hasClass("select2-results__option--selected")?i.options.get("multiple")?i.trigger("unselect",{originalEvent:e,data:n}):i.trigger("close",{}):i.trigger("select",{originalEvent:e,data:n})}),this.$results.on("mouseenter",".select2-results__option--selectable",function(e){var t=p.GetData(this,"data");i.getHighlightedResults().removeClass("select2-results__option--highlighted").attr("aria-selected","false"),i.trigger("results:focus",{data:t,element:d(this)})})},s.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},s.prototype.destroy=function(){this.$results.remove()},s.prototype.ensureHighlightVisible=function(){var e,t,n,s,i=this.getHighlightedResults();0!==i.length&&(e=this.$results.find(".select2-results__option--selectable").index(i),s=this.$results.offset().top,t=i.offset().top,n=this.$results.scrollTop()+(t-s),s=t-s,n-=2*i.outerHeight(!1),e<=2?this.$results.scrollTop(0):(s>this.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},s.prototype.template=function(e,t){var n=this.options.get("templateResult"),s=this.options.get("escapeMarkup"),e=n(e,t);null==e?t.style.display="none":"string"==typeof e?t.innerHTML=s(e):d(t).append(e)},s}),u.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),u.define("select2/selection/base",["jquery","../utils","../keys"],function(n,s,i){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return s.Extend(r,s.Observable),r.prototype.render=function(){var e=n('<span class="select2-selection" role="combobox"  aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=s.GetData(this.$element[0],"old-tabindex")?this._tabindex=s.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},r.prototype.bind=function(e,t){var n=this,s=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",s),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},r.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},r.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&s.GetData(this,"element").select2("close")})})},r.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},r.prototype.position=function(e,t){t.find(".selection").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get("disabled")},r}),u.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var s=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",s).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",s),this.$selection.attr("aria-controls",s),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("<span></span>")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(".select2-selection__rendered"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr("title",n):t.removeAttr("title")):this.clear()},i}),u.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,c){function r(e,t){r.__super__.constructor.apply(this,arguments)}return c.Extend(r,e),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add("select2-selection--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var s=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",s),this.$selection.on("click",function(e){n.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){var t;n.isDisabled()||(t=i(this).parent(),t=c.GetData(t[0],"data"),n.trigger("unselect",{originalEvent:e,data:t}))}),this.$selection.on("keydown",".select2-selection__choice__remove",function(e){n.isDisabled()||e.stopPropagation()})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return i('<li class="select2-selection__choice"><button type="button" class="select2-selection__choice__remove" tabindex="-1"><span aria-hidden="true">&times;</span></button><span class="select2-selection__choice__display"></span></li>')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(".select2-selection__rendered").attr("id")+"-choice-",s=0;s<e.length;s++){var i=e[s],r=this.selectionContainer(),o=this.display(i,r),a=n+c.generateChars(4)+"-";i.id?a+=i.id:a+=c.generateChars(4),r.find(".select2-selection__choice__display").append(o).attr("id",a);var l=i.title||i.text;l&&r.attr("title",l);o=this.options.get("translations").get("removeItem"),l=r.find(".select2-selection__choice__remove");l.attr("title",o()),l.attr("aria-label",o()),l.attr("aria-describedby",a),c.StoreData(r[0],"data",i),t.push(r)}this.$selection.find(".select2-selection__rendered").append(t)}},r}),u.define("select2/selection/placeholder",[],function(){function e(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();n.html(this.display(t)),n[0].classList.add("select2-selection__placeholder"),n[0].classList.remove("select2-selection__choice");t=t.title||t.text||n.text();return this.$selection.find(".select2-selection__rendered").attr("title",t),n},e.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();t=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(t)},e}),u.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(i,s,a){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(e){s._handleClear(e)}),t.on("keypress",function(e){s._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){t.stopPropagation();var s=a.GetData(n[0],"data"),i=this.$element.val();this.$element.val(this.placeholder.id);var r={data:s};if(this.trigger("clear",r),r.prevented)this.$element.val(i);else{for(var o=0;o<s.length;o++)if(r={data:s[o]},this.trigger("unselect",r),r.prevented)return void this.$element.val(i);this.$element.trigger("input").trigger("change"),this.trigger("toggle",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=s.DELETE&&t.which!=s.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){var n,s;e.call(this,t),this.$selection.find(".select2-selection__clear").remove(),this.$selection[0].classList.remove("select2-selection--clearable"),0<this.$selection.find(".select2-selection__placeholder").length||0===t.length||(n=this.$selection.find(".select2-selection__rendered").attr("id"),s=this.options.get("translations").get("removeAllItems"),(e=i('<button type="button" class="select2-selection__clear" tabindex="-1"><span aria-hidden="true">&times;</span></button>')).attr("title",s()),e.attr("aria-label",s()),e.attr("aria-describedby",n),a.StoreData(e[0],"data",t),this.$selection.prepend(e),this.$selection[0].classList.add("select2-selection--clearable"))},e}),u.define("select2/selection/search",["jquery","../utils","../keys"],function(s,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=this.options.get("translations").get("search"),n=s('<span class="select2-search select2-search--inline"><textarea class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" ></textarea></span>');this.$searchContainer=n,this.$search=n.find("textarea"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",t());e=e.call(this);return this._transferTabIndex(),e.append(this.$searchContainer),e},e.prototype.bind=function(e,t,n){var s=this,i=t.id+"-results",r=t.id+"-container";e.call(this,t,n),s.$search.attr("aria-describedby",r),t.on("open",function(){s.$search.attr("aria-controls",i),s.$search.trigger("focus")}),t.on("close",function(){s.$search.val(""),s.resizeSearch(),s.$search.removeAttr("aria-controls"),s.$search.removeAttr("aria-activedescendant"),s.$search.trigger("focus")}),t.on("enable",function(){s.$search.prop("disabled",!1),s._transferTabIndex()}),t.on("disable",function(){s.$search.prop("disabled",!0)}),t.on("focus",function(e){s.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?s.$search.attr("aria-activedescendant",e.data._resultId):s.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){s.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){s._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){var t;e.stopPropagation(),s.trigger("keypress",e),s._keyUpPrevented=e.isDefaultPrevented(),e.which!==l.BACKSPACE||""!==s.$search.val()||0<(t=s.$selection.find(".select2-selection__choice").last()).length&&(t=a.GetData(t[0],"data"),s.searchRemoveChoice(t),e.preventDefault())}),this.$selection.on("click",".select2-search--inline",function(e){s.$search.val()&&e.stopPropagation()});var t=document.documentMode,o=t&&t<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){o?s.$selection.off("input.search input.searchcheck"):s.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){var t;o&&"input"===e.type?s.$selection.off("input.search input.searchcheck"):(t=e.which)!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&s.handleSearch(e)})},e.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger("query",{term:e})),this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="100%";""===this.$search.attr("placeholder")&&(e=.75*(this.$search.val().length+1)+"em"),this.$search.css("width",e)},e}),u.define("select2/selection/selectionCss",["../utils"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get("selectionCssClass")||"";return-1!==e.indexOf(":all:")&&(e=e.replace(":all:",""),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define("select2/selection/eventRelay",["jquery"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var s=this,i=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],r=["opening","closing","selecting","unselecting","clearing"];e.call(this,t,n),t.on("*",function(e,t){var n;-1!==i.indexOf(e)&&(t=t||{},n=o.Event("select2:"+e,{params:t}),s.$element.trigger(n),-1!==r.indexOf(e)&&(t.prevented=n.isDefaultPrevented()))})},e}),u.define("select2/translation",["jquery","require"],function(t,n){function s(e){this.dict=e||{}}return s.prototype.all=function(){return this.dict},s.prototype.get=function(e){return this.dict[e]},s.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},s._cache={},s.loadPath=function(e){var t;return e in s._cache||(t=n(e),s._cache[e]=t),new s(s._cache[e])},s}),u.define("select2/diacritics",[],function(){return{"â’¶":"A","ï¼¡":"A","Ã€":"A","Ã�":"A","Ã‚":"A","áº¦":"A","áº¤":"A","áºª":"A","áº¨":"A","Ãƒ":"A","Ä€":"A","Ä‚":"A","áº°":"A","áº®":"A","áº´":"A","áº²":"A","È¦":"A","Ç ":"A","Ã„":"A","Çž":"A","áº¢":"A","Ã…":"A","Çº":"A","Ç�":"A","È€":"A","È‚":"A","áº ":"A","áº¬":"A","áº¶":"A","á¸€":"A","Ä„":"A","Èº":"A","â±¯":"A","êœ²":"AA","Ã†":"AE","Ç¼":"AE","Ç¢":"AE","êœ´":"AO","êœ¶":"AU","êœ¸":"AV","êœº":"AV","êœ¼":"AY","â’·":"B","ï¼¢":"B","á¸‚":"B","á¸„":"B","á¸†":"B","Éƒ":"B","Æ‚":"B","Æ�":"B","â’¸":"C","ï¼£":"C","Ä†":"C","Äˆ":"C","ÄŠ":"C","ÄŒ":"C","Ã‡":"C","á¸ˆ":"C","Æ‡":"C","È»":"C","êœ¾":"C","â’¹":"D","ï¼¤":"D","á¸Š":"D","ÄŽ":"D","á¸Œ":"D","á¸�":"D","á¸’":"D","á¸Ž":"D","Ä�":"D","Æ‹":"D","ÆŠ":"D","Æ‰":"D","ê�¹":"D","Ç±":"DZ","Ç„":"DZ","Ç²":"Dz","Ç…":"Dz","â’º":"E","ï¼¥":"E","Ãˆ":"E","Ã‰":"E","ÃŠ":"E","á»€":"E","áº¾":"E","á»„":"E","á»‚":"E","áº¼":"E","Ä’":"E","á¸”":"E","á¸–":"E","Ä”":"E","Ä–":"E","Ã‹":"E","áºº":"E","Äš":"E","È„":"E","È†":"E","áº¸":"E","á»†":"E","È¨":"E","á¸œ":"E","Ä˜":"E","á¸˜":"E","á¸š":"E","Æ�":"E","ÆŽ":"E","â’»":"F","ï¼¦":"F","á¸ž":"F","Æ‘":"F","ê�»":"F","â’¼":"G","ï¼§":"G","Ç´":"G","Äœ":"G","á¸ ":"G","Äž":"G","Ä ":"G","Ç¦":"G","Ä¢":"G","Ç¤":"G","Æ“":"G","êž ":"G","ê�½":"G","ê�¾":"G","â’½":"H","ï¼¨":"H","Ä¤":"H","á¸¢":"H","á¸¦":"H","Èž":"H","á¸¤":"H","á¸¨":"H","á¸ª":"H","Ä¦":"H","â±§":"H","â±µ":"H","êž�":"H","â’¾":"I","ï¼©":"I","ÃŒ":"I","Ã�":"I","ÃŽ":"I","Ä¨":"I","Äª":"I","Ä¬":"I","Ä°":"I","Ã�":"I","á¸®":"I","á»ˆ":"I","Ç�":"I","Èˆ":"I","ÈŠ":"I","á»Š":"I","Ä®":"I","á¸¬":"I","Æ—":"I","â’¿":"J","ï¼ª":"J","Ä´":"J","Éˆ":"J","â“€":"K","ï¼«":"K","á¸°":"K","Ç¨":"K","á¸²":"K","Ä¶":"K","á¸´":"K","Æ˜":"K","â±©":"K","ê�€":"K","ê�‚":"K","ê�„":"K","êž¢":"K","â“�":"L","ï¼¬":"L","Ä¿":"L","Ä¹":"L","Ä½":"L","á¸¶":"L","á¸¸":"L","Ä»":"L","á¸¼":"L","á¸º":"L","Å�":"L","È½":"L","â±¢":"L","â± ":"L","ê�ˆ":"L","ê�†":"L","êž€":"L","Ç‡":"LJ","Çˆ":"Lj","â“‚":"M","ï¼­":"M","á¸¾":"M","á¹€":"M","á¹‚":"M","â±®":"M","Æœ":"M","â“ƒ":"N","ï¼®":"N","Ç¸":"N","Åƒ":"N","Ã‘":"N","á¹„":"N","Å‡":"N","á¹†":"N","Å…":"N","á¹Š":"N","á¹ˆ":"N","È ":"N","Æ�":"N","êž�":"N","êž¤":"N","ÇŠ":"NJ","Ç‹":"Nj","â“„":"O","ï¼¯":"O","Ã’":"O","Ã“":"O","Ã”":"O","á»’":"O","á»�":"O","á»–":"O","á»”":"O","Ã•":"O","á¹Œ":"O","È¬":"O","á¹Ž":"O","ÅŒ":"O","á¹�":"O","á¹’":"O","ÅŽ":"O","È®":"O","È°":"O","Ã–":"O","Èª":"O","á»Ž":"O","Å�":"O","Ç‘":"O","ÈŒ":"O","ÈŽ":"O","Æ ":"O","á»œ":"O","á»š":"O","á» ":"O","á»ž":"O","á»¢":"O","á»Œ":"O","á»˜":"O","Çª":"O","Ç¬":"O","Ã˜":"O","Ç¾":"O","Æ†":"O","ÆŸ":"O","ê�Š":"O","ê�Œ":"O","Å’":"OE","Æ¢":"OI","ê�Ž":"OO","È¢":"OU","â“…":"P","ï¼°":"P","á¹”":"P","á¹–":"P","Æ¤":"P","â±£":"P","ê��":"P","ê�’":"P","ê�”":"P","â“†":"Q","ï¼±":"Q","ê�–":"Q","ê�˜":"Q","ÉŠ":"Q","â“‡":"R","ï¼²":"R","Å”":"R","á¹˜":"R","Å˜":"R","È�":"R","È’":"R","á¹š":"R","á¹œ":"R","Å–":"R","á¹ž":"R","ÉŒ":"R","â±¤":"R","ê�š":"R","êž¦":"R","êž‚":"R","â“ˆ":"S","ï¼³":"S","áºž":"S","Åš":"S","á¹¤":"S","Åœ":"S","á¹ ":"S","Å ":"S","á¹¦":"S","á¹¢":"S","á¹¨":"S","È˜":"S","Åž":"S","â±¾":"S","êž¨":"S","êž„":"S","â“‰":"T","ï¼´":"T","á¹ª":"T","Å¤":"T","á¹¬":"T","Èš":"T","Å¢":"T","á¹°":"T","á¹®":"T","Å¦":"T","Æ¬":"T","Æ®":"T","È¾":"T","êž†":"T","êœ¨":"TZ","â“Š":"U","ï¼µ":"U","Ã™":"U","Ãš":"U","Ã›":"U","Å¨":"U","á¹¸":"U","Åª":"U","á¹º":"U","Å¬":"U","Ãœ":"U","Ç›":"U","Ç—":"U","Ç•":"U","Ç™":"U","á»¦":"U","Å®":"U","Å°":"U","Ç“":"U","È”":"U","È–":"U","Æ¯":"U","á»ª":"U","á»¨":"U","á»®":"U","á»¬":"U","á»°":"U","á»¤":"U","á¹²":"U","Å²":"U","á¹¶":"U","á¹´":"U","É„":"U","â“‹":"V","ï¼¶":"V","á¹¼":"V","á¹¾":"V","Æ²":"V","ê�ž":"V","É…":"V","ê� ":"VY","â“Œ":"W","ï¼·":"W","áº€":"W","áº‚":"W","Å´":"W","áº†":"W","áº„":"W","áºˆ":"W","â±²":"W","â“�":"X","ï¼¸":"X","áºŠ":"X","áºŒ":"X","â“Ž":"Y","ï¼¹":"Y","á»²":"Y","Ã�":"Y","Å¶":"Y","á»¸":"Y","È²":"Y","áºŽ":"Y","Å¸":"Y","á»¶":"Y","á»´":"Y","Æ³":"Y","ÉŽ":"Y","á»¾":"Y","â“�":"Z","ï¼º":"Z","Å¹":"Z","áº�":"Z","Å»":"Z","Å½":"Z","áº’":"Z","áº”":"Z","Æµ":"Z","È¤":"Z","â±¿":"Z","â±«":"Z","ê�¢":"Z","â“�":"a","ï½�":"a","áºš":"a","Ã ":"a","Ã¡":"a","Ã¢":"a","áº§":"a","áº¥":"a","áº«":"a","áº©":"a","Ã£":"a","Ä�":"a","Äƒ":"a","áº±":"a","áº¯":"a","áºµ":"a","áº³":"a","È§":"a","Ç¡":"a","Ã¤":"a","ÇŸ":"a","áº£":"a","Ã¥":"a","Ç»":"a","ÇŽ":"a","È�":"a","Èƒ":"a","áº¡":"a","áº­":"a","áº·":"a","á¸�":"a","Ä…":"a","â±¥":"a","É�":"a","êœ³":"aa","Ã¦":"ae","Ç½":"ae","Ç£":"ae","êœµ":"ao","êœ·":"au","êœ¹":"av","êœ»":"av","êœ½":"ay","â“‘":"b","ï½‚":"b","á¸ƒ":"b","á¸…":"b","á¸‡":"b","Æ€":"b","Æƒ":"b","É“":"b","â“’":"c","ï½ƒ":"c","Ä‡":"c","Ä‰":"c","Ä‹":"c","Ä�":"c","Ã§":"c","á¸‰":"c","Æˆ":"c","È¼":"c","êœ¿":"c","â†„":"c","â““":"d","ï½„":"d","á¸‹":"d","Ä�":"d","á¸�":"d","á¸‘":"d","á¸“":"d","á¸�":"d","Ä‘":"d","ÆŒ":"d","É–":"d","É—":"d","ê�º":"d","Ç³":"dz","Ç†":"dz","â“”":"e","ï½…":"e","Ã¨":"e","Ã©":"e","Ãª":"e","á»�":"e","áº¿":"e","á»…":"e","á»ƒ":"e","áº½":"e","Ä“":"e","á¸•":"e","á¸—":"e","Ä•":"e","Ä—":"e","Ã«":"e","áº»":"e","Ä›":"e","È…":"e","È‡":"e","áº¹":"e","á»‡":"e","È©":"e","á¸�":"e","Ä™":"e","á¸™":"e","á¸›":"e","É‡":"e","É›":"e","Ç�":"e","â“•":"f","ï½†":"f","á¸Ÿ":"f","Æ’":"f","ê�¼":"f","â“–":"g","ï½‡":"g","Çµ":"g","Ä�":"g","á¸¡":"g","ÄŸ":"g","Ä¡":"g","Ç§":"g","Ä£":"g","Ç¥":"g","É ":"g","êž¡":"g","áµ¹":"g","ê�¿":"g","â“—":"h","ï½ˆ":"h","Ä¥":"h","á¸£":"h","á¸§":"h","ÈŸ":"h","á¸¥":"h","á¸©":"h","á¸«":"h","áº–":"h","Ä§":"h","â±¨":"h","â±¶":"h","É¥":"h","Æ•":"hv","â“˜":"i","ï½‰":"i","Ã¬":"i","Ã­":"i","Ã®":"i","Ä©":"i","Ä«":"i","Ä­":"i","Ã¯":"i","á¸¯":"i","á»‰":"i","Ç�":"i","È‰":"i","È‹":"i","á»‹":"i","Ä¯":"i","á¸­":"i","É¨":"i","Ä±":"i","â“™":"j","ï½Š":"j","Äµ":"j","Ç°":"j","É‰":"j","â“š":"k","ï½‹":"k","á¸±":"k","Ç©":"k","á¸³":"k","Ä·":"k","á¸µ":"k","Æ™":"k","â±ª":"k","ê��":"k","ê�ƒ":"k","ê�…":"k","êž£":"k","â“›":"l","ï½Œ":"l","Å€":"l","Äº":"l","Ä¾":"l","á¸·":"l","á¸¹":"l","Ä¼":"l","á¸½":"l","á¸»":"l","Å¿":"l","Å‚":"l","Æš":"l","É«":"l","â±¡":"l","ê�‰":"l","êž�":"l","ê�‡":"l","Ç‰":"lj","â“œ":"m","ï½�":"m","á¸¿":"m","á¹�":"m","á¹ƒ":"m","É±":"m","É¯":"m","â“�":"n","ï½Ž":"n","Ç¹":"n","Å„":"n","Ã±":"n","á¹…":"n","Åˆ":"n","á¹‡":"n","Å†":"n","á¹‹":"n","á¹‰":"n","Æž":"n","É²":"n","Å‰":"n","êž‘":"n","êž¥":"n","ÇŒ":"nj","â“ž":"o","ï½�":"o","Ã²":"o","Ã³":"o","Ã´":"o","á»“":"o","á»‘":"o","á»—":"o","á»•":"o","Ãµ":"o","á¹�":"o","È­":"o","á¹�":"o","Å�":"o","á¹‘":"o","á¹“":"o","Å�":"o","È¯":"o","È±":"o","Ã¶":"o","È«":"o","á»�":"o","Å‘":"o","Ç’":"o","È�":"o","È�":"o","Æ¡":"o","á»�":"o","á»›":"o","á»¡":"o","á»Ÿ":"o","á»£":"o","á»�":"o","á»™":"o","Ç«":"o","Ç­":"o","Ã¸":"o","Ç¿":"o","É”":"o","ê�‹":"o","ê��":"o","Éµ":"o","Å“":"oe","Æ£":"oi","È£":"ou","ê��":"oo","â“Ÿ":"p","ï½�":"p","á¹•":"p","á¹—":"p","Æ¥":"p","áµ½":"p","ê�‘":"p","ê�“":"p","ê�•":"p","â“ ":"q","ï½‘":"q","É‹":"q","ê�—":"q","ê�™":"q","â“¡":"r","ï½’":"r","Å•":"r","á¹™":"r","Å™":"r","È‘":"r","È“":"r","á¹›":"r","á¹�":"r","Å—":"r","á¹Ÿ":"r","É�":"r","É½":"r","ê�›":"r","êž§":"r","êžƒ":"r","â“¢":"s","ï½“":"s","ÃŸ":"s","Å›":"s","á¹¥":"s","Å�":"s","á¹¡":"s","Å¡":"s","á¹§":"s","á¹£":"s","á¹©":"s","È™":"s","ÅŸ":"s","È¿":"s","êž©":"s","êž…":"s","áº›":"s","â“£":"t","ï½”":"t","á¹«":"t","áº—":"t","Å¥":"t","á¹­":"t","È›":"t","Å£":"t","á¹±":"t","á¹¯":"t","Å§":"t","Æ­":"t","Êˆ":"t","â±¦":"t","êž‡":"t","êœ©":"tz","â“¤":"u","ï½•":"u","Ã¹":"u","Ãº":"u","Ã»":"u","Å©":"u","á¹¹":"u","Å«":"u","á¹»":"u","Å­":"u","Ã¼":"u","Çœ":"u","Ç˜":"u","Ç–":"u","Çš":"u","á»§":"u","Å¯":"u","Å±":"u","Ç”":"u","È•":"u","È—":"u","Æ°":"u","á»«":"u","á»©":"u","á»¯":"u","á»­":"u","á»±":"u","á»¥":"u","á¹³":"u","Å³":"u","á¹·":"u","á¹µ":"u","Ê‰":"u","â“¥":"v","ï½–":"v","á¹½":"v","á¹¿":"v","Ê‹":"v","ê�Ÿ":"v","ÊŒ":"v","ê�¡":"vy","â“¦":"w","ï½—":"w","áº�":"w","áºƒ":"w","Åµ":"w","áº‡":"w","áº…":"w","áº˜":"w","áº‰":"w","â±³":"w","â“§":"x","ï½˜":"x","áº‹":"x","áº�":"x","â“¨":"y","ï½™":"y","á»³":"y","Ã½":"y","Å·":"y","á»¹":"y","È³":"y","áº�":"y","Ã¿":"y","á»·":"y","áº™":"y","á»µ":"y","Æ´":"y","É�":"y","á»¿":"y","â“©":"z","ï½š":"z","Åº":"z","áº‘":"z","Å¼":"z","Å¾":"z","áº“":"z","áº•":"z","Æ¶":"z","È¥":"z","É€":"z","â±¬":"z","ê�£":"z","Î†":"Î‘","Îˆ":"Î•","Î‰":"Î—","ÎŠ":"Î™","Îª":"Î™","ÎŒ":"ÎŸ","ÎŽ":"Î¥","Î«":"Î¥","Î�":"Î©","Î¬":"Î±","Î­":"Îµ","Î®":"Î·","Î¯":"Î¹","ÏŠ":"Î¹","Î�":"Î¹","ÏŒ":"Î¿","Ï�":"Ï…","Ï‹":"Ï…","Î°":"Ï…","ÏŽ":"Ï‰","Ï‚":"Ïƒ","â€™":"'"}}),u.define("select2/data/base",["../utils"],function(n){function s(e,t){s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},s.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},s.prototype.bind=function(e,t){},s.prototype.destroy=function(){},s.prototype.generateResultId=function(e,t){e=e.id+"-result-";return e+=n.generateChars(4),null!=t.id?e+="-"+t.id.toString():e+="-"+n.generateChars(4),e},s}),u.define("select2/data/select",["./base","../utils","jquery"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(":checked"),function(e){return t.item(l(e))}))},n.prototype.select=function(i){var e,r=this;if(i.selected=!0,null!=i.element&&"option"===i.element.tagName.toLowerCase())return i.element.selected=!0,void this.$element.trigger("input").trigger("change");this.$element.prop("multiple")?this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;n<i.length;n++){var s=i[n].id;-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger("input").trigger("change")}):(e=i.id,this.$element.val(e),this.$element.trigger("input").trigger("change"))},n.prototype.unselect=function(i){var r=this;if(this.$element.prop("multiple")){if(i.selected=!1,null!=i.element&&"option"===i.element.tagName.toLowerCase())return i.element.selected=!1,void this.$element.trigger("input").trigger("change");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var s=e[n].id;s!==i.id&&-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger("input").trigger("change")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find("*").each(function(){a.RemoveData(this)})},n.prototype.query=function(t,e){var n=[],s=this;this.$element.children().each(function(){var e;"option"!==this.tagName.toLowerCase()&&"optgroup"!==this.tagName.toLowerCase()||(e=l(this),e=s.item(e),null!==(e=s.matches(t,e))&&n.push(e))}),e({results:n})},n.prototype.addOptions=function(e){this.$element.append(e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement("optgroup")).label=e.text:void 0!==(t=document.createElement("option")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);e=this._normalizeItem(e);return e.element=t,a.StoreData(t,"data",e),l(t)},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],"data")))return t;var n=e[0];if("option"===n.tagName.toLowerCase())t={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if("optgroup"===n.tagName.toLowerCase()){t={text:e.prop("label"),children:[],title:e.prop("title")};for(var s=e.children("option"),i=[],r=0;r<s.length;r++){var o=l(s[r]),o=this.item(o);i.push(o)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],"data",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},n}),u.define("select2/data/array",["./select","../utils","jquery"],function(e,t,c){function s(e,t){this._dataToConvert=t.get("data")||[],s.__super__.constructor.call(this,e,t)}return t.Extend(s,e),s.prototype.bind=function(e,t){s.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},s.prototype.select=function(n){var e=this.$element.find("option").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),s.__super__.select.call(this,n)},s.prototype.convertToOptions=function(e){var t=this,n=this.$element.find("option"),s=n.map(function(){return t.item(c(this)).id}).get(),i=[];for(var r=0;r<e.length;r++){var o,a,l=this._normalizeItem(e[r]);0<=s.indexOf(l.id)?(o=n.filter(function(e){return function(){return c(this).val()==e.id}}(l)),a=this.item(o),a=c.extend(!0,{},l,a),a=this.option(a),o.replaceWith(a)):(a=this.option(l),l.children&&(l=this.convertToOptions(l.children),a.append(l)),i.push(a))}return i},s}),u.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,r){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return r.extend({},e,{q:e.term})},transport:function(e,t,n){e=r.ajax(e);return e.then(t),e.fail(n),e}};return r.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(t,n){var s=this;null!=this._request&&("function"==typeof this._request.abort&&this._request.abort(),this._request=null);var i=r.extend({type:"GET"},this.ajaxOptions);function e(){var e=i.transport(i,function(e){e=s.processResults(e,t);s.options.get("debug")&&window.console&&console.error&&(e&&e.results&&Array.isArray(e.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),n(e)},function(){"status"in e&&(0===e.status||"0"===e.status)||s.trigger("results:message",{message:"errorLoading"})});s._request=e}"function"==typeof i.url&&(i.url=i.url.call(this.$element,t)),"function"==typeof i.data&&(i.data=i.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),u.define("select2/data/tags",["jquery"],function(t){function e(e,t,n){var s=n.get("tags"),i=n.get("createTag");void 0!==i&&(this.createTag=i);i=n.get("insertTag");if(void 0!==i&&(this.insertTag=i),e.call(this,t,n),Array.isArray(s))for(var r=0;r<s.length;r++){var o=s[r],o=this._normalizeItem(o),o=this.option(o);this.$element.append(o)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var s=t.results,i=0;i<s.length;i++){var r=s[i],o=null!=r.children&&!e({results:r.children},!0);if((r.text||"").toUpperCase()===(c.term||"").toUpperCase()||o)return!n&&(t.data=s,void u(t))}if(n)return!0;var a,l=d.createTag(c);null!=l&&((a=d.option(l)).attr("data-select2-tag","true"),d.addOptions([a]),d.insertTag(s,l)),t.results=s,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){if(null==t.term)return null;t=t.term.trim();return""===t?null:{id:t,text:t}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find("option[data-select2-tag]").each(function(){this.selected||t(this).remove()})},e}),u.define("select2/data/tokenizer",["jquery"],function(c){function e(e,t,n){var s=n.get("tokenizer");void 0!==s&&(this.tokenizer=s),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},e.prototype.query=function(e,t,n){var s=this;t.term=t.term||"";var i=this.tokenizer(t,this.options,function(e){var t,n=s._normalizeItem(e);s.$element.find("option").filter(function(){return c(this).val()===n.id}).length||((t=s.option(n)).attr("data-select2-tag",!0),s._removeOldTags(),s.addOptions([t])),t=n,s.trigger("select",{data:t})});i.term!==t.term&&(this.$search.length&&(this.$search.val(i.term),this.$search.trigger("focus")),t.term=i.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,s){for(var i=n.get("tokenSeparators")||[],r=t.term,o=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};o<r.length;){var l=r[o];-1!==i.indexOf(l)?(l=r.substr(0,o),null!=(l=a(c.extend({},t,{term:l})))?(s(l),r=r.substr(o+1)||"",o=0):o++):o++}return{term:r}},e}),u.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("select",function(){s._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected(function(){e.call(s,t,n)})},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current(function(e){e=null!=e?e.length:0;0<n.maximumSelectionLength&&e>=n.maximumSelectionLength?n.trigger("results:message",{message:"maximumSelected",args:{maximum:n.maximumSelectionLength}}):t&&t()})},e}),u.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class="select2-dropdown"><span class="select2-results"></span></span>');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),u.define("select2/dropdown/search",["jquery"],function(r){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("translations").get("search"),e=r('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>');return this.$searchContainer=e,this.$search=e.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",n()),t.prepend(e),t},e.prototype.bind=function(e,t,n){var s=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){s.trigger("keypress",e),s._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){r(this).off("keyup")}),this.$search.on("keyup input",function(e){s.handleSearch(e)}),t.on("open",function(){s.$search.attr("tabindex",0),s.$search.attr("aria-controls",i),s.$search.trigger("focus"),window.setTimeout(function(){s.$search.trigger("focus")},0)}),t.on("close",function(){s.$search.attr("tabindex",-1),s.$search.removeAttr("aria-controls"),s.$search.removeAttr("aria-activedescendant"),s.$search.val(""),s.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||s.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(s.showSearch(e)?s.$searchContainer[0].classList.remove("select2-search--hide"):s.$searchContainer[0].classList.add("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?s.$search.attr("aria-activedescendant",e.data._resultId):s.$search.removeAttr("aria-activedescendant")})},e.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger("query",{term:t})),this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),u.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e}),u.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("query",function(e){s.lastParams=e,s.loading=!0}),t.on("query:append",function(e){s.lastParams=e,s.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&(e=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=e+50&&this.loadMore())},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),u.define("select2/dropdown/attachBody",["jquery","../utils"],function(u,o){function e(e,t,n){this.$dropdownParent=u(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("open",function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)}),t.on("close",function(){s._hideDropdown(),s._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t[0].classList.remove("select2"),t[0].classList.add("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=u("<span></span>"),e=e.call(this);return t.append(e),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0)},e.prototype._attachPositioningHandler=function(e,t){var n=this,s="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id,t=this.$container.parents().filter(o.hasScroll);t.each(function(){o.StoreData(this,"select2-scroll-position",{x:u(this).scrollLeft(),y:u(this).scrollTop()})}),t.on(s,function(e){var t=o.GetData(this,"select2-scroll-position");u(this).scrollTop(t.y)}),u(window).on(s+" "+i+" "+r,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,s="resize.select2."+t.id,t="orientationchange.select2."+t.id;this.$container.parents().filter(o.hasScroll).off(n),u(window).off(n+" "+s+" "+t)},e.prototype._positionDropdown=function(){var e=u(window),t=this.$dropdown[0].classList.contains("select2-dropdown--above"),n=this.$dropdown[0].classList.contains("select2-dropdown--below"),s=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=i.top,r.bottom=i.top+r.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<i.top-o,e=l>i.bottom+o,a={left:i.left,top:r.bottom},l=this.$dropdownParent;"static"===l.css("position")&&(l=l.offsetParent());i={top:0,left:0};(u.contains(document.body,l[0])||l[0].isConnected)&&(i=l.offset()),a.top-=i.top,a.left-=i.left,t||n||(s="below"),e||!c||t?!c&&e&&t&&(s="below"):s="above",("above"==s||t&&"below"!==s)&&(a.top=r.top-i.top-o),null!=s&&(this.$dropdown[0].classList.remove("select2-dropdown--below"),this.$dropdown[0].classList.remove("select2-dropdown--above"),this.$dropdown[0].classList.add("select2-dropdown--"+s),this.$container[0].classList.remove("select2-container--below"),this.$container[0].classList.remove("select2-container--above"),this.$container[0].classList.add("select2-container--"+s)),this.$dropdownContainer.css(a)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),u.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s<t.length;s++){var i=t[s];i.children?n+=e(i.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),u.define("select2/dropdown/selectOnClose",["../utils"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("close",function(e){s._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if("select"===n._type||"unselect"===n._type)return}n=this.getHighlightedResults();n.length<1||(null!=(n=s.GetData(n[0],"data")).element&&n.element.selected||null==n.element&&n.selected||this.trigger("select",{data:n}))},e}),u.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("select",function(e){s._selectTriggered(e)}),t.on("unselect",function(e){s._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),u.define("select2/dropdown/dropdownCss",["../utils"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get("dropdownCssClass")||"";return-1!==e.indexOf(":all:")&&(e=e.replace(":all:",""),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define("select2/dropdown/tagsSearchHighlight",["../utils"],function(s){function e(){}return e.prototype.highlightFirstItem=function(e){var t=this.$results.find(".select2-results__option--selectable:not(.select2-results__option--selected)");if(0<t.length){var n=t.first(),t=s.GetData(n[0],"data").element;if(t&&t.getAttribute&&"true"===t.getAttribute("data-select2-tag"))return void n.trigger("mouseenter")}e.call(this)},e}),u.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,e="Please delete "+t+" character";return 1!=t&&(e+="s"),e},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more resultsâ€¦"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searchingâ€¦"},removeAllItems:function(){return"Remove all items"},removeItem:function(){return"Remove item"},search:function(){return"Search"}}}),u.define("select2/defaults",["jquery","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/selectionCss","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./dropdown/dropdownCss","./dropdown/tagsSearchHighlight","./i18n/en"],function(l,r,o,a,c,u,d,p,h,f,g,t,m,y,v,_,b,$,w,x,A,D,S,E,O,C,L,T,q,I,e){function n(){this.reset()}return n.prototype.apply=function(e){var t;null==(e=l.extend(!0,{},this.defaults,e)).dataAdapter&&(null!=e.ajax?e.dataAdapter=v:null!=e.data?e.dataAdapter=y:e.dataAdapter=m,0<e.minimumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,$)),0<e.maximumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,w)),0<e.maximumSelectionLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,x)),e.tags&&(e.dataAdapter=f.Decorate(e.dataAdapter,_)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=f.Decorate(e.dataAdapter,b))),null==e.resultsAdapter&&(e.resultsAdapter=r,null!=e.ajax&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,E)),null!=e.placeholder&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,S)),e.selectOnClose&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,L)),e.tags&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,I))),null==e.dropdownAdapter&&(e.multiple?e.dropdownAdapter=A:(t=f.Decorate(A,D),e.dropdownAdapter=t),0!==e.minimumResultsForSearch&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,C)),e.closeOnSelect&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,T)),null!=e.dropdownCssClass&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,q)),e.dropdownAdapter=f.Decorate(e.dropdownAdapter,O)),null==e.selectionAdapter&&(e.multiple?e.selectionAdapter=a:e.selectionAdapter=o,null!=e.placeholder&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,c)),e.allowClear&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,u)),e.multiple&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,d)),null!=e.selectionCssClass&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,p)),e.selectionAdapter=f.Decorate(e.selectionAdapter,h)),e.language=this._resolveLanguage(e.language),e.language.push("en");for(var n=[],s=0;s<e.language.length;s++){var i=e.language[s];-1===n.indexOf(i)&&n.push(i)}return e.language=n,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return t[e]||e})}this.defaults={amdLanguageBase:"./i18n/",autocomplete:"off",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:f.escapeMarkup,language:{},matcher:function e(t,n){if(null==t.term||""===t.term.trim())return n;if(n.children&&0<n.children.length){for(var s=l.extend(!0,{},n),i=n.children.length-1;0<=i;i--)null==e(t,n.children[i])&&s.children.splice(i,1);return 0<s.children.length?s:e(t,s)}var r=a(n.text).toUpperCase(),o=a(t.term).toUpperCase();return-1<r.indexOf(o)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},n.prototype.applyFromElement=function(e,t){var n=e.language,s=this.defaults.language,i=t.prop("lang"),t=t.closest("[lang]").prop("lang"),t=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(s),this._resolveLanguage(t));return e.language=t,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(l.isEmptyObject(e))return[];if(l.isPlainObject(e))return[e];for(var t,n=Array.isArray(e)?e:[e],s=[],i=0;i<n.length;i++)s.push(n[i]),"string"==typeof n[i]&&0<n[i].indexOf("-")&&(t=n[i].split("-")[0],s.push(t));return s},n.prototype._processTranslations=function(e,t){for(var n=new g,s=0;s<e.length;s++){var i=new g,r=e[s];if("string"==typeof r)try{i=g.loadPath(r)}catch(e){try{r=this.defaults.amdLanguageBase+r,i=g.loadPath(r)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for "'+r+'" could not be automatically loaded. A fallback will be used instead.')}}else i=l.isPlainObject(r)?new g(r):r;n.extend(i)}return n},n.prototype.set=function(e,t){var n={};n[l.camelCase(e)]=t;n=f._convertData(n);l.extend(!0,this.defaults,n)},new n}),u.define("select2/options",["jquery","./defaults","./utils"],function(c,n,u){function e(e,t){this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=n.applyFromElement(this.options,t)),this.options=n.apply(this.options)}return e.prototype.fromElement=function(e){var t=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.autocomplete&&e.prop("autocomplete")&&(this.options.autocomplete=e.prop("autocomplete")),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),u.GetData(e[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),u.StoreData(e[0],"data",u.GetData(e[0],"select2Tags")),u.StoreData(e[0],"tags",!0)),u.GetData(e[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),e.attr("ajax--url",u.GetData(e[0],"ajaxUrl")),u.StoreData(e[0],"ajax-Url",u.GetData(e[0],"ajaxUrl")));var n={};function s(e,t){return t.toUpperCase()}for(var i=0;i<e[0].attributes.length;i++){var r=e[0].attributes[i].name,o="data-";r.substr(0,o.length)==o&&(r=r.substring(o.length),o=u.GetData(e[0],r),n[r.replace(/-([a-z])/g,s)]=o)}c.fn.jquery&&"1."==c.fn.jquery.substr(0,2)&&e[0].dataset&&(n=c.extend(!0,{},e[0].dataset,n));var a,l=c.extend(!0,{},u.GetData(e[0]),n);for(a in l=u._convertData(l))-1<t.indexOf(a)||(c.isPlainObject(this.options[a])?c.extend(this.options[a],l[a]):this.options[a]=l[a]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),u.define("select2/core",["jquery","./options","./utils","./keys"],function(t,i,r,s){var o=function(e,t){null!=r.GetData(e[0],"select2")&&r.GetData(e[0],"select2").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new i(t,e),o.__super__.constructor.call(this);var n=e.attr("tabindex")||0;r.StoreData(e[0],"old-tabindex",n),e.attr("tabindex","-1");t=this.options.get("dataAdapter");this.dataAdapter=new t(e,this.options);n=this.render();this._placeContainer(n);t=this.options.get("selectionAdapter");this.selection=new t(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,n);t=this.options.get("dropdownAdapter");this.dropdown=new t(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,n);n=this.options.get("resultsAdapter");this.results=new n(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var s=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){s.trigger("selection:update",{data:e})}),e[0].classList.add("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),r.StoreData(e[0],"select2",this),e.data("select2",this)};return r.Extend(o,r.Observable),o.prototype._generateId=function(e){return"select2-"+(null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+r.generateChars(2):r.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},o.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},o.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var s=this._resolveWidth(e,"style");return null!=s?s:this._resolveWidth(e,"element")}if("element"==t){s=e.outerWidth(!1);return s<=0?"auto":s+"px"}if("style"!=t)return"computedstyle"!=t?t:window.getComputedStyle(e[0]).width;e=e.attr("style");if("string"!=typeof e)return null;for(var i=e.split(";"),r=0,o=i.length;r<o;r+=1){var a=i[r].replace(/\s/g,"").match(n);if(null!==a&&1<=a.length)return a[1]}return null},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=r.bind(this._syncAttributes,this),this._syncS=r.bind(this._syncSubtree,this),this._observer=new window.MutationObserver(function(e){t._syncA(),t._syncS(e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})},o.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on("*",function(e,t){n.trigger(e,t)})},o.prototype._registerSelectionEvents=function(){var n=this,s=["toggle","focus"];this.selection.on("toggle",function(){n.toggleDropdown()}),this.selection.on("focus",function(e){n.focus(e)}),this.selection.on("*",function(e,t){-1===s.indexOf(e)&&n.trigger(e,t)})},o.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on("*",function(e,t){n.trigger(e,t)})},o.prototype._registerResultsEvents=function(){var n=this;this.results.on("*",function(e,t){n.trigger(e,t)})},o.prototype._registerEvents=function(){var n=this;this.on("open",function(){n.$container[0].classList.add("select2-container--open")}),this.on("close",function(){n.$container[0].classList.remove("select2-container--open")}),this.on("enable",function(){n.$container[0].classList.remove("select2-container--disabled")}),this.on("disable",function(){n.$container[0].classList.add("select2-container--disabled")}),this.on("blur",function(){n.$container[0].classList.remove("select2-container--focus")}),this.on("query",function(t){n.isOpen()||n.trigger("open",{}),this.dataAdapter.query(t,function(e){n.trigger("results:all",{data:e,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(e){n.trigger("results:append",{data:e,query:t})})}),this.on("keypress",function(e){var t=e.which;n.isOpen()?t===s.ESC||t===s.UP&&e.altKey?(n.close(e),e.preventDefault()):t===s.ENTER||t===s.TAB?(n.trigger("results:select",{}),e.preventDefault()):t===s.SPACE&&e.ctrlKey?(n.trigger("results:toggle",{}),e.preventDefault()):t===s.UP?(n.trigger("results:previous",{}),e.preventDefault()):t===s.DOWN&&(n.trigger("results:next",{}),e.preventDefault()):(t===s.ENTER||t===s.SPACE||t===s.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},o.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},o.prototype._isChangeMutation=function(e){var t=this;if(e.addedNodes&&0<e.addedNodes.length){for(var n=0;n<e.addedNodes.length;n++)if(e.addedNodes[n].selected)return!0}else{if(e.removedNodes&&0<e.removedNodes.length)return!0;if(Array.isArray(e))return e.some(function(e){return t._isChangeMutation(e)})}return!1},o.prototype._syncSubtree=function(e){var e=this._isChangeMutation(e),t=this;e&&this.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})},o.prototype.trigger=function(e,t){var n=o.__super__.trigger,s={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===t&&(t={}),e in s){var i=s[e],s={prevented:!1,name:e,args:t};if(n.call(this,i,s),s.prevented)return void(t.prevented=!0)}n.call(this,e,t)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger("query",{})},o.prototype.close=function(e){this.isOpen()&&this.trigger("close",{originalEvent:e})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o.prototype.isOpen=function(){return this.$container[0].classList.contains("select2-container--open")},o.prototype.hasFocus=function(){return this.$container[0].classList.contains("select2-container--focus")},o.prototype.focus=function(e){this.hasFocus()||(this.$container[0].classList.add("select2-container--focus"),this.trigger("focus",{}))},o.prototype.enable=function(e){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=e&&0!==e.length||(e=[!0]);e=!e[0];this.$element.prop("disabled",e)},o.prototype.data=function(){this.options.get("debug")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},o.prototype.val=function(e){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();e=e[0];Array.isArray(e)&&(e=e.map(function(e){return e.toString()})),this.$element.val(e).trigger("input").trigger("change")},o.prototype.destroy=function(){r.RemoveData(this.$container[0]),this.$container.remove(),this._observer.disconnect(),this._observer=null,this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",r.GetData(this.$element[0],"old-tabindex")),this.$element[0].classList.remove("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),r.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var e=t('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),r.StoreData(e[0],"element",this.$element),e},o}),u.define("jquery-mousewheel",["jquery"],function(e){return e}),u.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,r,t,o){var a;return null==i.fn.select2&&(a=["open","close","destroy"],i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new r(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,s)}),-1<a.indexOf(t)?this:n}),null==i.fn.select2.defaults&&(i.fn.select2.defaults=t),r}),{define:u.define,require:u.require});function b(e,t){return i.call(e,t)}function l(e,t){var n,s,i,r,o,a,l,c,u,d,p=t&&t.split("/"),h=y.map,f=h&&h["*"]||{};if(e){for(t=(e=e.split("/")).length-1,y.nodeIdCompat&&_.test(e[t])&&(e[t]=e[t].replace(_,"")),"."===e[0].charAt(0)&&p&&(e=p.slice(0,p.length-1).concat(e)),c=0;c<e.length;c++)"."===(d=e[c])?(e.splice(c,1),--c):".."===d&&(0===c||1===c&&".."===e[2]||".."===e[c-1]||0<c&&(e.splice(c-1,2),c-=2));e=e.join("/")}if((p||f)&&h){for(c=(n=e.split("/")).length;0<c;--c){if(s=n.slice(0,c).join("/"),p)for(u=p.length;0<u;--u)if(i=h[p.slice(0,u).join("/")],i=i&&i[s]){r=i,o=c;break}if(r)break;!a&&f&&f[s]&&(a=f[s],l=c)}!r&&a&&(r=a,o=l),r&&(n.splice(0,o,r),e=n.join("/"))}return e}function w(t,n){return function(){var e=a.call(arguments,0);return"string"!=typeof e[0]&&1===e.length&&e.push(null),o.apply(p,e.concat([t,n]))}}function x(e){var t;if(b(m,e)&&(t=m[e],delete m[e],v[e]=!0,r.apply(p,t)),!b(g,e)&&!b(v,e))throw new Error("No "+e);return g[e]}function c(e){var t,n=e?e.indexOf("!"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function A(e){return e?c(e):[]}var u=s.require("jquery.select2");return t.fn.select2.amd=s,u});PK     ’ŠU]ë4I!L;  L;  %  assets/vendor/select2/select2.min.cssnu „[µü¤        .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
PK     ’ŠU]ØW1˜­Ò  ­Ò  =  assets/vendor/date-range-picker/jquery.daterangepicker.min.jsnu „[µü¤        /**
 * jquery-date-range-picker
 * @version v0.20.0
 * @link https://github.com/longbill/jquery-date-range-picker
 * @license MIT
 */
!function(e){"function"==typeof define&&define.amd?define(["jquery","moment"],e):"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("jquery"),require("moment")):e(jQuery,moment)}(function(Z,Q){"use strict";Z.dateRangePickerLanguages={default:{selected:"Selected:",day:"Day",days:"Days",apply:"Close","week-1":"mo","week-2":"tu","week-3":"we","week-4":"th","week-5":"fr","week-6":"sa","week-7":"su","week-number":"W","month-name":["january","february","march","april","may","june","july","august","september","october","november","december"],shortcuts:"Shortcuts","custom-values":"Custom Values",past:"Past",following:"Following",previous:"Previous","prev-week":"Week","prev-month":"Month","prev-year":"Year",next:"Next","next-week":"Week","next-month":"Month","next-year":"Year","less-than":"Date range should not be more than %d days","more-than":"Date range should not be less than %d days","default-more":"Please select a date range longer than %d days","default-single":"Please select a date","default-less":"Please select a date range less than %d days","default-range":"Please select a date range between %d and %d days","default-default":"Please select a date range",time:"Time",hour:"Hour",minute:"Minute"},id:{selected:"Terpilih:",day:"Hari",days:"Hari",apply:"Tutup","week-1":"sen","week-2":"sel","week-3":"rab","week-4":"kam","week-5":"jum","week-6":"sab","week-7":"min","week-number":"W","month-name":["januari","februari","maret","april","mei","juni","juli","agustus","september","oktober","november","desember"],shortcuts:"Pintas","custom-values":"Nilai yang ditentukan",past:"Yang Lalu",following:"Mengikuti",previous:"Sebelumnya","prev-week":"Minggu","prev-month":"Bulan","prev-year":"Tahun",next:"Selanjutnya","next-week":"Minggu","next-month":"Bulan","next-year":"Tahun","less-than":"Tanggal harus lebih dari %d hari","more-than":"Tanggal harus kurang dari %d hari","default-more":"Jarak tanggal harus lebih lama dari %d hari","default-single":"Silakan pilih tanggal","default-less":"Jarak rentang tanggal tidak boleh lebih lama dari %d hari","default-range":"Rentang tanggal harus antara %d dan %d hari","default-default":"Silakan pilih rentang tanggal",time:"Waktu",hour:"Jam",minute:"Menit"},az:{selected:"SeÃ§ildi:",day:" gÃ¼n",days:" gÃ¼n",apply:"tÉ™tbiq","week-1":"1","week-2":"2","week-3":"3","week-4":"4","week-5":"5","week-6":"6","week-7":"7","month-name":["yanvar","fevral","mart","aprel","may","iyun","iyul","avqust","sentyabr","oktyabr","noyabr","dekabr"],shortcuts:"QÄ±sayollar",past:"KeÃ§miÅŸ",following:"NÃ¶vbÉ™ti",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"Ã–ncÉ™ki hÉ™ftÉ™","prev-month":"Ã–ncÉ™ki ay","prev-year":"Ã–ncÉ™ki il",next:"&nbsp;&nbsp;&nbsp;","next-week":"NÃ¶vbÉ™ti hÉ™ftÉ™","next-month":"NÃ¶vbÉ™ti ay","next-year":"NÃ¶vbÉ™ti il","less-than":"Tarix aralÄ±ÄŸÄ± %d gÃ¼ndÉ™n Ã§ox olmamalÄ±dÄ±r","more-than":"Tarix aralÄ±ÄŸÄ± %d gÃ¼ndÉ™n az olmamalÄ±dÄ±r","default-more":"%d gÃ¼ndÉ™n Ã§ox bir tarix seÃ§in","default-single":"Tarix seÃ§in","default-less":"%d gÃ¼ndÉ™n az bir tarix seÃ§in","default-range":"%d vÉ™ %d gÃ¼n aralÄ±ÄŸÄ±nda tarixlÉ™r seÃ§in","default-default":"Tarix aralÄ±ÄŸÄ± seÃ§in"},bg:{selected:"Ð˜Ð·Ð±Ñ€Ð°Ð½Ð¾:",day:"Ð”ÐµÐ½",days:"Ð”Ð½Ð¸",apply:"Ð—Ð°Ñ‚Ð²Ð¾Ñ€Ð¸","week-1":"Ð¿Ð½","week-2":"Ð²Ñ‚","week-3":"Ñ�Ñ€","week-4":"Ñ‡Ñ‚","week-5":"Ð¿Ñ‚","week-6":"Ñ�Ð±","week-7":"Ð½Ð´","week-number":"Ð¡","month-name":["Ñ�Ð½ÑƒÐ°Ñ€Ð¸","Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸","Ð¼Ð°Ñ€Ñ‚","Ð°Ð¿Ñ€Ð¸Ð»","Ð¼Ð°Ð¹","ÑŽÐ½Ð¸","ÑŽÐ»Ð¸","Ð°Ð²Ð³ÑƒÑ�Ñ‚","Ñ�ÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸","Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸","Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸","Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸"],shortcuts:"ÐŸÑ€ÐµÐºÐ¸ Ð¿ÑŠÑ‚Ð¸Ñ‰Ð°","custom-values":"ÐŸÐµÑ€Ñ�Ð¾Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð°Ð½Ð¸ Ñ�Ñ‚Ð¾Ð¹Ð½Ð¾Ñ�Ñ‚Ð¸",past:"ÐœÐ¸Ð½Ð°Ð»",following:"Ð¡Ð»ÐµÐ´Ð²Ð°Ñ‰",previous:"ÐŸÑ€ÐµÐ´Ð¸ÑˆÐµÐ½","prev-week":"Ð¡ÐµÐ´Ð¼Ð¸Ñ†Ð°","prev-month":"ÐœÐµÑ�ÐµÑ†","prev-year":"Ð“Ð¾Ð´Ð¸Ð½Ð°",next:"Ð¡Ð»ÐµÐ´Ð²Ð°Ñ‰","next-week":"Ð¡ÐµÐ´Ð¼Ð¸Ñ†Ð°","next-month":"ÐœÐµÑ�ÐµÑ†","next-year":"Ð“Ð¾Ð´Ð¸Ð½Ð°","less-than":"ÐŸÐµÑ€Ð¸Ð¾Ð´ÑŠÑ‚ Ð¾Ñ‚ Ð²Ñ€ÐµÐ¼Ðµ Ð½Ðµ Ñ‚Ñ€Ñ�Ð±Ð²Ð° Ð´Ð° Ðµ Ð¿Ð¾Ð²ÐµÑ‡Ðµ Ð¾Ñ‚ %d Ð´Ð½Ð¸","more-than":"ÐŸÐµÑ€Ð¸Ð¾Ð´ÑŠÑ‚ Ð¾Ñ‚ Ð²Ñ€ÐµÐ¼Ðµ Ð½Ðµ Ñ‚Ñ€Ñ�Ð±Ð²Ð° Ð´Ð° Ðµ Ð¿Ð¾-Ð¼Ð°Ð»ÐºÐ¾ Ð¾Ñ‚ %d Ð´Ð½Ð¸","default-more":"ÐœÐ¾Ð»Ñ� Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ Ð¿ÐµÑ€Ð¸Ð¾Ð´ Ð¿Ð¾-Ð´ÑŠÐ»ÑŠÐ³ Ð¾Ñ‚ %d Ð´Ð½Ð¸","default-single":"ÐœÐ¾Ð»Ñ� Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ Ð´Ð°Ñ‚Ð°","default-less":"ÐœÐ¾Ð»Ñ� Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ Ð¿ÐµÑ€Ð¸Ð¾Ð´ Ð¿Ð¾-ÐºÑŠÑ� Ð¾Ñ‚ %d Ð´Ð½Ð¸","default-range":"ÐœÐ¾Ð»Ñ� Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ Ð¿ÐµÑ€Ð¸Ð¾Ð´ Ð¼ÐµÐ¶Ð´Ñƒ %d Ð¸ %d Ð´Ð½Ð¸","default-default":"ÐœÐ¾Ð»Ñ� Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ Ð¿ÐµÑ€Ð¸Ð¾Ð´",time:"Ð’Ñ€ÐµÐ¼Ðµ",hour:"Ð§Ð°Ñ�",minute:"ÐœÐ¸Ð½ÑƒÑ‚Ð°"},cn:{selected:"å·²é€‰æ‹©:",day:"å¤©",days:"å¤©",apply:"ç¡®å®š","week-1":"ä¸€","week-2":"äºŒ","week-3":"ä¸‰","week-4":"å››","week-5":"äº”","week-6":"å…­","week-7":"æ—¥","week-number":"å‘¨","month-name":["ä¸€æœˆ","äºŒæœˆ","ä¸‰æœˆ","å››æœˆ","äº”æœˆ","å…­æœˆ","ä¸ƒæœˆ","å…«æœˆ","ä¹�æœˆ","å��æœˆ","å��ä¸€æœˆ","å��äºŒæœˆ"],shortcuts:"å¿«æ�·é€‰æ‹©",past:"è¿‡åŽ»",following:"å°†æ�¥",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"ä¸Šå‘¨","prev-month":"ä¸Šä¸ªæœˆ","prev-year":"åŽ»å¹´",next:"&nbsp;&nbsp;&nbsp;","next-week":"ä¸‹å‘¨","next-month":"ä¸‹ä¸ªæœˆ","next-year":"æ˜Žå¹´","less-than":"æ‰€é€‰æ—¥æœŸèŒƒå›´ä¸�èƒ½å¤§äºŽ%då¤©","more-than":"æ‰€é€‰æ—¥æœŸèŒƒå›´ä¸�èƒ½å°�äºŽ%då¤©","default-more":"è¯·é€‰æ‹©å¤§äºŽ%då¤©çš„æ—¥æœŸèŒƒå›´","default-less":"è¯·é€‰æ‹©å°�äºŽ%då¤©çš„æ—¥æœŸèŒƒå›´","default-range":"è¯·é€‰æ‹©%då¤©åˆ°%då¤©çš„æ—¥æœŸèŒƒå›´","default-single":"è¯·é€‰æ‹©ä¸€ä¸ªæ—¥æœŸ","default-default":"è¯·é€‰æ‹©ä¸€ä¸ªæ—¥æœŸèŒƒå›´",time:"æ—¶é—´",hour:"å°�æ—¶",minute:"åˆ†é’Ÿ"},cz:{selected:"VybrÃ¡no:",day:"Den",days:"Dny",apply:"ZavÅ™Ã­t","week-1":"po","week-2":"Ãºt","week-3":"st","week-4":"Ä�t","week-5":"pÃ¡","week-6":"so","week-7":"ne","month-name":["leden","Ãºnor","bÅ™ezen","duben","kvÄ›ten","Ä�erven","Ä�ervenec","srpen","zÃ¡Å™Ã­","Å™Ã­jen","listopad","prosinec"],shortcuts:"Zkratky",past:"po",following:"nÃ¡sledujÃ­cÃ­",previous:"pÅ™edchozÃ­","prev-week":"tÃ½den","prev-month":"mÄ›sÃ­c","prev-year":"rok",next:"dalÅ¡Ã­","next-week":"tÃ½den","next-month":"mÄ›sÃ­c","next-year":"rok","less-than":"Rozsah data by nemÄ›l bÃ½t vÄ›tÅ¡Ã­ neÅ¾ %d dnÅ¯","more-than":"Rozsah data by nemÄ›l bÃ½t menÅ¡Ã­ neÅ¾ %d dnÅ¯","default-more":"ProsÃ­m zvolte rozsah data vÄ›tÅ¡Ã­ neÅ¾ %d dnÅ¯","default-single":"ProsÃ­m zvolte datum","default-less":"ProsÃ­m zvolte rozsah data menÅ¡Ã­ neÅ¾ %d dnÅ¯","default-range":"ProsÃ­m zvolte rozsah data mezi %d a %d dny","default-default":"ProsÃ­m zvolte rozsah data"},de:{selected:"Auswahl:",day:"Tag",days:"Tage",apply:"SchlieÃŸen","week-1":"mo","week-2":"di","week-3":"mi","week-4":"do","week-5":"fr","week-6":"sa","week-7":"so","month-name":["januar","februar","mÃ¤rz","april","mai","juni","juli","august","september","oktober","november","dezember"],shortcuts:"Schnellwahl",past:"Vorherige",following:"Folgende",previous:"Vorherige","prev-week":"Woche","prev-month":"Monat","prev-year":"Jahr",next:"NÃ¤chste","next-week":"Woche","next-month":"Monat","next-year":"Jahr","less-than":"Datumsbereich darf nicht grÃ¶ÃŸer sein als %d Tage","more-than":"Datumsbereich darf nicht kleiner sein als %d Tage","default-more":"Bitte mindestens %d Tage auswÃ¤hlen","default-single":"Bitte ein Datum auswÃ¤hlen","default-less":"Bitte weniger als %d Tage auswÃ¤hlen","default-range":"Bitte einen Datumsbereich zwischen %d und %d Tagen auswÃ¤hlen","default-default":"Bitte ein Start- und Enddatum auswÃ¤hlen",Time:"Zeit",hour:"Stunde",minute:"Minute"},es:{selected:"Seleccionado:",day:"DÃ­a",days:"DÃ­as",apply:"Cerrar","week-1":"lu","week-2":"ma","week-3":"mi","week-4":"ju","week-5":"vi","week-6":"sa","week-7":"do","month-name":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],shortcuts:"Accesos directos",past:"Pasado",following:"Siguiente",previous:"Anterior","prev-week":"Semana","prev-month":"Mes","prev-year":"AÃ±o",next:"Siguiente","next-week":"Semana","next-month":"Mes","next-year":"AÃ±o","less-than":"El rango no deberÃ­a ser mayor de %d dÃ­as","more-than":"El rango no deberÃ­a ser menor de %d dÃ­as","default-more":"Por favor selecciona un rango mayor a %d dÃ­as","default-single":"Por favor selecciona un dÃ­a","default-less":"Por favor selecciona un rango menor a %d dÃ­as","default-range":"Por favor selecciona un rango entre %d y %d dÃ­as","default-default":"Por favor selecciona un rango de fechas."},fr:{selected:"SÃ©lection:",day:"Jour",days:"Jours",apply:"Fermer","week-1":"lu","week-2":"ma","week-3":"me","week-4":"je","week-5":"ve","week-6":"sa","week-7":"di","month-name":["janvier","fÃ©vrier","mars","avril","mai","juin","juillet","aoÃ»t","septembre","octobre","novembre","dÃ©cembre"],shortcuts:"Raccourcis",past:"PassÃ©",following:"Suivant",previous:"PrÃ©cÃ©dent","prev-week":"Semaine","prev-month":"Mois","prev-year":"AnnÃ©e",next:"Suivant","next-week":"Semaine","next-month":"Mois","next-year":"AnnÃ©e","less-than":"L'intervalle ne doit pas Ãªtre supÃ©rieure Ã  %d jours","more-than":"L'intervalle ne doit pas Ãªtre infÃ©rieure Ã  %d jours","default-more":"Merci de choisir une intervalle supÃ©rieure Ã  %d jours","default-single":"Merci de choisir une date","default-less":"Merci de choisir une intervalle infÃ©rieure %d jours","default-range":"Merci de choisir une intervalle comprise entre %d et %d jours","default-default":"Merci de choisir une date"},hu:{selected:"KivÃ¡lasztva:",day:"Nap",days:"Nap",apply:"Ok","week-1":"h","week-2":"k","week-3":"sz","week-4":"cs","week-5":"p","week-6":"sz","week-7":"v","month-name":["januÃ¡r","februÃ¡r","mÃ¡rcius","Ã¡prilis","mÃ¡jus","jÃºnius","jÃºlius","augusztus","szeptember","oktÃ³ber","november","december"],shortcuts:"GyorsvÃ¡lasztÃ³",past:"MÃºlt",following:"KÃ¶vetkezÅ‘",previous:"ElÅ‘zÅ‘","prev-week":"HÃ©t","prev-month":"HÃ³nap","prev-year":"Ã‰v",next:"KÃ¶vetkezÅ‘","next-week":"HÃ©t","next-month":"HÃ³nap","next-year":"Ã‰v","less-than":"A kivÃ¡lasztÃ¡s nem lehet tÃ¶bb %d napnÃ¡l","more-than":"A kivÃ¡lasztÃ¡s nem lehet tÃ¶bb %d napnÃ¡l","default-more":"VÃ¡lassz ki egy idÅ‘szakot ami hosszabb mint %d nap","default-single":"VÃ¡lassz egy napot","default-less":"VÃ¡lassz ki egy idÅ‘szakot ami rÃ¶videbb mint %d nap","default-range":"VÃ¡lassz ki egy %d - %d nap hosszÃº idÅ‘szakot","default-default":"VÃ¡lassz ki egy idÅ‘szakot"},it:{selected:"Selezionati:",day:"Giorno",days:"Giorni",apply:"Chiudi","week-1":"lu","week-2":"ma","week-3":"me","week-4":"gi","week-5":"ve","week-6":"sa","week-7":"do","month-name":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],shortcuts:"Scorciatoie",past:"Scorso",following:"Successivo",previous:"Precedente","prev-week":"Settimana","prev-month":"Mese","prev-year":"Anno",next:"Prossimo","next-week":"Settimana","next-month":"Mese","next-year":"Anno","less-than":"L'intervallo non dev'essere maggiore di %d giorni","more-than":"L'intervallo non dev'essere minore di %d giorni","default-more":"Seleziona un intervallo maggiore di %d giorni","default-single":"Seleziona una data","default-less":"Seleziona un intervallo minore di %d giorni","default-range":"Seleziona un intervallo compreso tra i %d e i %d giorni","default-default":"Seleziona un intervallo di date"},ko:{selected:"ê¸°ê°„:",day:"ì�¼",days:"ì�¼ê°„",apply:"ë‹«ê¸°","week-1":"ì›”","week-2":"í™”","week-3":"ìˆ˜","week-4":"ëª©","week-5":"ê¸ˆ","week-6":"í† ","week-7":"ì�¼","week-number":"ì£¼","month-name":["1ì›”","2ì›”","3ì›”","4ì›”","5ì›”","6ì›”","7ì›”","8ì›”","9ì›”","10ì›”","11ì›”","12ì›”"],shortcuts:"ë‹¨ì¶•í‚¤ë“¤",past:"ì§€ë‚œ(ì˜¤ëŠ˜ê¸°ì¤€)",following:"ì�´í›„(ì˜¤ëŠ˜ê¸°ì¤€)",previous:"ì�´ì „","prev-week":"1ì£¼","prev-month":"1ë‹¬","prev-year":"1ë…„",next:"ë‹¤ì�Œ","next-week":"1ì£¼","next-month":"1ë‹¬","next-year":"1ë…„","less-than":"ë‚ ì§œ ë²”ìœ„ëŠ” %d ì�¼ë³´ë‹¤ ë§Žì�„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤","more-than":"ë‚ ì§œ ë²”ìœ„ëŠ” %d ì�¼ë³´ë‹¤ ìž‘ì�„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤","default-more":"ë‚ ì§œ ë²”ìœ„ë¥¼ %d ì�¼ë³´ë‹¤ ê¸¸ê²Œ ì„ íƒ�í•´ ì£¼ì„¸ìš”","default-single":"ë‚ ì§œë¥¼ ì„ íƒ�í•´ ì£¼ì„¸ìš”","default-less":"%d ì�¼ë³´ë‹¤ ìž‘ì�€ ë‚ ì§œë¥¼ ì„ íƒ�í•´ ì£¼ì„¸ìš”","default-range":"%dì™€ %d ì�¼ ì‚¬ì�´ì�˜ ë‚ ì§œ ë²”ìœ„ë¥¼ ì„ íƒ�í•´ ì£¼ì„¸ìš”","default-default":"ë‚ ì§œ ë²”ìœ„ë¥¼ ì„ íƒ�í•´ ì£¼ì„¸ìš”",time:"ì‹œê°�",hour:"ì‹œ",minute:"ë¶„"},no:{selected:"Valgt:",day:"Dag",days:"Dager",apply:"Lukk","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lÃ¸","week-7":"sÃ¸","month-name":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],shortcuts:"Snarveier","custom-values":"Egendefinerte Verdier",past:"Over",following:"FÃ¸lger",previous:"Forrige","prev-week":"Uke","prev-month":"MÃ¥ned","prev-year":"Ã…r",next:"Neste","next-week":"Uke","next-month":"MÃ¥ned","next-year":"Ã…r","less-than":"Datoperioden skal ikkje vÃ¦re lengre enn %d dager","more-than":"Datoperioden skal ikkje vÃ¦re kortere enn %d dager","default-more":"Vennligst velg ein datoperiode lengre enn %d dager","default-single":"Vennligst velg ein dato","default-less":"Vennligst velg ein datoperiode mindre enn %d dager","default-range":"Vennligst velg ein datoperiode mellom %d og %d dager","default-default":"Vennligst velg ein datoperiode",time:"Tid",hour:"Time",minute:"Minutter"},nl:{selected:"Geselecteerd:",day:"Dag",days:"Dagen",apply:"Ok","week-1":"ma","week-2":"di","week-3":"wo","week-4":"do","week-5":"vr","week-6":"za","week-7":"zo","month-name":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],shortcuts:"Snelkoppelingen","custom-values":"Aangepaste waarden",past:"Verleden",following:"Komend",previous:"Vorige","prev-week":"Week","prev-month":"Maand","prev-year":"Jaar",next:"Volgende","next-week":"Week","next-month":"Maand","next-year":"Jaar","less-than":"Interval moet langer dan %d dagen zijn","more-than":"Interval mag niet minder dan %d dagen zijn","default-more":"Selecteer een interval langer dan %dagen","default-single":"Selecteer een datum","default-less":"Selecteer een interval minder dan %d dagen","default-range":"Selecteer een interval tussen %d en %d dagen","default-default":"Selecteer een interval",time:"Tijd",hour:"Uur",minute:"Minuut"},ru:{selected:"Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð¾:",day:"Ð”ÐµÐ½ÑŒ",days:"Ð”Ð½ÐµÐ¹",apply:"ÐŸÑ€Ð¸Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ","week-1":"Ð¿Ð½","week-2":"Ð²Ñ‚","week-3":"Ñ�Ñ€","week-4":"Ñ‡Ñ‚","week-5":"Ð¿Ñ‚","week-6":"Ñ�Ð±","week-7":"Ð²Ñ�","month-name":["Ñ�Ð½Ð²Ð°Ñ€ÑŒ","Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ","Ð¼Ð°Ñ€Ñ‚","Ð°Ð¿Ñ€ÐµÐ»ÑŒ","Ð¼Ð°Ð¹","Ð¸ÑŽÐ½ÑŒ","Ð¸ÑŽÐ»ÑŒ","Ð°Ð²Ð³ÑƒÑ�Ñ‚","Ñ�ÐµÐ½Ñ‚Ñ�Ð±Ñ€ÑŒ","Ð¾ÐºÑ‚Ñ�Ð±Ñ€ÑŒ","Ð½Ð¾Ñ�Ð±Ñ€ÑŒ","Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ"],shortcuts:"Ð‘Ñ‹Ñ�Ñ‚Ñ€Ñ‹Ð¹ Ð²Ñ‹Ð±Ð¾Ñ€","custom-values":"ÐŸÐ¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑ�ÐºÐ¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ�",past:"ÐŸÑ€Ð¾ÑˆÐµÐ´ÑˆÐ¸Ðµ",following:"Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ðµ",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"Ð�ÐµÐ´ÐµÐ»Ñ�","prev-month":"ÐœÐµÑ�Ñ�Ñ†","prev-year":"Ð“Ð¾Ð´",next:"&nbsp;&nbsp;&nbsp;","next-week":"Ð�ÐµÐ´ÐµÐ»Ñ�","next-month":"ÐœÐµÑ�Ñ�Ñ†","next-year":"Ð“Ð¾Ð´","less-than":"Ð”Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð±Ð¾Ð»ÑŒÑˆÐµ %d Ð´Ð½ÐµÐ¹","more-than":"Ð”Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¼ÐµÐ½ÑŒÑˆÐµ %d Ð´Ð½ÐµÐ¹","default-more":"ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð° Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð±Ð¾Ð»ÑŒÑˆÐµ %d Ð´Ð½ÐµÐ¹","default-single":"ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð° Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ð´Ð°Ñ‚Ñƒ","default-less":"ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð° Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¼ÐµÐ½ÑŒÑˆÐµ %d Ð´Ð½ÐµÐ¹","default-range":"ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð° Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¼ÐµÐ¶Ð´Ñƒ %d Ð¸ %d Ð´Ð½Ñ�Ð¼Ð¸","default-default":"ÐŸÐ¾Ð¶Ð°Ð»ÑƒÐ¹Ñ�Ñ‚Ð° Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½",time:"Ð’Ñ€ÐµÐ¼Ñ�",hour:"Ð§Ð°Ñ�Ñ‹",minute:"ÐœÐ¸Ð½ÑƒÑ‚Ñ‹"},uk:{selected:"Ð’Ð¸Ð±Ñ€Ð°Ð½Ð¾:",day:"Ð”ÐµÐ½ÑŒ",days:"Ð”Ð½Ñ–Ð²",apply:"Ð—Ð°Ñ�Ñ‚Ð¾Ñ�ÑƒÐ²Ð°Ñ‚Ð¸","week-1":"Ð¿Ð½","week-2":"Ð²Ñ‚","week-3":"Ñ�Ñ€","week-4":"Ñ‡Ñ‚","week-5":"Ð¿Ñ‚","week-6":"Ñ�Ð±","week-7":"Ð½Ð´","month-name":["Ñ�Ñ–Ñ‡ÐµÐ½ÑŒ","Ð»ÑŽÑ‚Ð¸Ð¹","Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ","ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ","Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ","Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ","Ð»Ð¸Ð¿ÐµÐ½ÑŒ","Ñ�ÐµÑ€Ð¿ÐµÐ½ÑŒ","Ð²ÐµÑ€ÐµÑ�ÐµÐ½ÑŒ","Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ","Ð»Ð¸Ñ�Ñ‚Ð¾Ð¿Ð°Ð´","Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ"],shortcuts:"Ð¨Ð²Ð¸Ð´ÐºÐ¸Ð¹ Ð²Ð¸Ð±Ñ–Ñ€","custom-values":"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ� ÐºÐ¾Ñ€Ð¸Ñ�Ñ‚ÑƒÐ²Ð°Ñ‡Ð°",past:"ÐœÐ¸Ð½ÑƒÐ»Ñ–",following:"Ð�Ð°Ñ�Ñ‚ÑƒÐ¿Ð½Ñ–",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"Ð¢Ð¸Ð¶Ð´ÐµÐ½ÑŒ","prev-month":"ÐœÑ–Ñ�Ñ�Ñ†ÑŒ","prev-year":"Ð Ñ–Ðº",next:"&nbsp;&nbsp;&nbsp;","next-week":"Ð¢Ð¸Ð¶Ð´ÐµÐ½ÑŒ","next-month":"ÐœÑ–Ñ�Ñ�Ñ†ÑŒ","next-year":"Ð Ñ–Ðº","less-than":"Ð”Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ð±Ñ–Ð»ÑŒÑˆ Ð½Ñ–Ð¶ %d Ð´Ð½Ñ–Ð²","more-than":"Ð”Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚Ð¸ Ð¼ÐµÐ½ÑŒÑˆ Ð½Ñ–Ð¶ %d Ð´Ð½Ñ–Ð²","default-more":"Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ° Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð±Ñ–Ð»ÑŒÑˆÐµ %d Ð´Ð½Ñ–Ð²","default-single":"Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ° Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð´Ð°Ñ‚Ñƒ","default-less":"Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ° Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¼ÐµÐ½ÑˆÐµ %d Ð´Ð½Ñ–Ð²","default-range":"Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ° Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¼Ñ–Ð¶ %d Ñ‚Ð° %d Ð´Ð½Ñ�Ð¼Ð¸","default-default":"Ð‘ÑƒÐ´ÑŒ Ð»Ð°Ñ�ÐºÐ° Ð²Ð¸Ð±ÐµÑ€Ñ–Ñ‚ÑŒ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½",time:"Ð§Ð°Ñ�",hour:"Ð“Ð¾Ð´Ð¸Ð½Ð¸",minute:"Ð¥Ð²Ð¸Ð»Ð¸Ð½Ð¸"},pl:{selected:"Wybrany:",day:"DzieÅ„",days:"Dni",apply:"Zamknij","week-1":"pon","week-2":"wt","week-3":"Å›r","week-4":"czw","week-5":"pt","week-6":"so","week-7":"nd","month-name":["styczeÅ„","luty","marzec","kwiecieÅ„","maj","czerwiec","lipiec","sierpieÅ„","wrzesieÅ„","paÅºdziernik","listopad","grudzieÅ„"],shortcuts:"SkrÃ³ty","custom-values":"Niestandardowe wartoÅ›ci",past:"PrzeszÅ‚e",following:"NastÄ™pne",previous:"Poprzednie","prev-week":"tydzieÅ„","prev-month":"miesiÄ…c","prev-year":"rok",next:"NastÄ™pny","next-week":"tydzieÅ„","next-month":"miesiÄ…c","next-year":"rok","less-than":"Okres nie powinien byÄ‡ dÅ‚uÅ¼szy niÅ¼ %d dni","more-than":"Okres nie powinien byÄ‡ krÃ³tszy niÅ¼  %d ni","default-more":"Wybierz okres dÅ‚uÅ¼szy niÅ¼ %d dni","default-single":"Wybierz datÄ™","default-less":"Wybierz okres krÃ³tszy niÅ¼ %d dni","default-range":"Wybierz okres trwajÄ…cy od %d do %d dni","default-default":"Wybierz okres",time:"Czas",hour:"Godzina",minute:"Minuta"},se:{selected:"Vald:",day:"dag",days:"dagar",apply:"godkÃ¤nn","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lÃ¶","week-7":"sÃ¶","month-name":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],shortcuts:"genvÃ¤gar","custom-values":"Anpassade vÃ¤rden",past:"Ã¶ver",following:"fÃ¶ljande",previous:"fÃ¶rra","prev-week":"vecka","prev-month":"mÃ¥nad","prev-year":"Ã¥r",next:"nÃ¤sta","next-week":"vecka","next-month":"mÃ¥ned","next-year":"Ã¥r","less-than":"Datumintervall bÃ¶r inte vara mindre Ã¤n %d dagar","more-than":"Datumintervall bÃ¶r inte vara mer Ã¤n %d dagar","default-more":"VÃ¤lj ett datumintervall lÃ¤ngre Ã¤n %d dagar","default-single":"VÃ¤lj ett datum","default-less":"VÃ¤lj ett datumintervall mindre Ã¤n %d dagar","default-range":"VÃ¤lj ett datumintervall mellan %d och %d dagar","default-default":"VÃ¤lj ett datumintervall",time:"tid",hour:"timme",minute:"minut"},pt:{selected:"Selecionado:",day:"Dia",days:"Dias",apply:"Fechar","week-1":"seg","week-2":"ter","week-3":"qua","week-4":"qui","week-5":"sex","week-6":"sab","week-7":"dom","week-number":"N","month-name":["janeiro","fevereiro","marÃ§o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],shortcuts:"Atalhos","custom-values":"Valores Personalizados",past:"Passado",following:"Seguinte",previous:"Anterior","prev-week":"Semana","prev-month":"MÃªs","prev-year":"Ano",next:"PrÃ³ximo","next-week":"PrÃ³xima Semana","next-month":"PrÃ³ximo MÃªs","next-year":"PrÃ³ximo Ano","less-than":"O perÃ­odo selecionado nÃ£o deve ser maior que %d dias","more-than":"O perÃ­odo selecionado nÃ£o deve ser menor que %d dias","default-more":"Selecione um perÃ­odo superior a %d dias","default-single":"Selecione uma data","default-less":"Selecione um perÃ­odo inferior a %d dias","default-range":"Selecione um perÃ­odo de %d a %d dias","default-default":"Selecione um perÃ­odo",time:"Tempo",hour:"Hora",minute:"Minuto"},tc:{selected:"å·²é�¸æ“‡:",day:"å¤©",days:"å¤©",apply:"ç¢ºå®š","week-1":"ä¸€","week-2":"äºŒ","week-3":"ä¸‰","week-4":"å››","week-5":"äº”","week-6":"å…­","week-7":"æ—¥","week-number":"å‘¨","month-name":["ä¸€æœˆ","äºŒæœˆ","ä¸‰æœˆ","å››æœˆ","äº”æœˆ","å…­æœˆ","ä¸ƒæœˆ","å…«æœˆ","ä¹�æœˆ","å��æœˆ","å��ä¸€æœˆ","å��äºŒæœˆ"],shortcuts:"å¿«é€Ÿé�¸æ“‡",past:"é�ŽåŽ»",following:"å°‡ä¾†",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"ä¸Šé€±","prev-month":"ä¸Šå€‹æœˆ","prev-year":"åŽ»å¹´",next:"&nbsp;&nbsp;&nbsp;","next-week":"ä¸‹å‘¨","next-month":"ä¸‹å€‹æœˆ","next-year":"æ˜Žå¹´","less-than":"æ‰€é�¸æ—¥æœŸç¯„åœ�ä¸�èƒ½å¤§æ–¼%då¤©","more-than":"æ‰€é�¸æ—¥æœŸç¯„åœ�ä¸�èƒ½å°�æ–¼%då¤©","default-more":"è«‹é�¸æ“‡å¤§æ–¼%då¤©çš„æ—¥æœŸç¯„åœ�","default-less":"è«‹é�¸æ“‡å°�æ–¼%då¤©çš„æ—¥æœŸç¯„åœ�","default-range":"è«‹é�¸æ“‡%då¤©åˆ°%då¤©çš„æ—¥æœŸç¯„åœ�","default-single":"è«‹é�¸æ“‡ä¸€å€‹æ—¥æœŸ","default-default":"è«‹é�¸æ“‡ä¸€å€‹æ—¥æœŸç¯„åœ�",time:"æ—¥æœŸ",hour:"å°�æ™‚",minute:"åˆ†é�˜"},ja:{selected:"é�¸æŠžã�—ã�¾ã�—ã�Ÿ:",day:"æ—¥",days:"æ—¥ã€…",apply:"é–‰ã�˜ã‚‹","week-1":"æœˆ","week-2":"ç�«","week-3":"æ°´","week-4":"æœ¨","week-5":"é‡‘","week-6":"åœŸ","week-7":"æ—¥","month-name":["1æœˆ","2æœˆ","3æœˆ","4æœˆ","5æœˆ","6æœˆ","7æœˆ","8æœˆ","9æœˆ","10æœˆ","11æœˆ","12æœˆ"],shortcuts:"ã‚¯ã‚¤ãƒƒã‚¯é�¸æŠž",past:"é�ŽåŽ»",following:"å°†æ�¥",previous:"&nbsp;&nbsp;&nbsp;","prev-week":"å…ˆé€±ã€�","prev-month":"å…ˆæœˆ","prev-year":"æ˜¨å¹´",next:"&nbsp;&nbsp;&nbsp;","next-week":"æ�¥é€±","next-month":"æ�¥æœˆ","next-year":"æ�¥å¹´","less-than":"æ—¥ä»˜ã�®ç¯„å›²ã�¯ ï¼…d æ—¥ä»¥ä¸Šã�«ã�™ã�¹ã��ã�§ã�¯ã�‚ã‚Šã�¾ã�›ã‚“","more-than":"æ—¥ä»˜ã�®ç¯„å›²ã�¯ ï¼…d æ—¥ã‚’ä¸‹å›žã�£ã�¦ã�¯ã�„ã�‘ã�¾ã�›ã‚“","default-more":"ï¼…d æ—¥ã‚ˆã‚Šã‚‚é•·ã�„æœŸé–“ã‚’é�¸æŠžã�—ã�¦ã��ã� ã�•ã�„","default-less":"ï¼…d æ—¥æœªæº€ã�®æœŸé–“ã‚’é�¸æŠžã�—ã�¦ã��ã� ã�•ã�„","default-range":"ï¼…d ã�¨ï¼… dæ—¥ã�®é–“ã�®æ—¥ä»˜ç¯„å›²ã‚’é�¸æŠžã�—ã�¦ã��ã� ã�•ã�„","default-single":"æ—¥ä»˜ã‚’é�¸æŠžã�—ã�¦ã��ã� ã�•ã�„","default-default":"æ—¥ä»˜ç¯„å›²ã‚’é�¸æŠžã�—ã�¦ã��ã� ã�•ã�„",time:"æ™‚é–“",hour:"æ™‚é–“",minute:"åˆ†"},da:{selected:"Valgt:",day:"Dag",days:"Dage",apply:"Luk","week-1":"ma","week-2":"ti","week-3":"on","week-4":"to","week-5":"fr","week-6":"lÃ¶","week-7":"sÃ¶","month-name":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],shortcuts:"genveje","custom-values":"Brugerdefinerede vÃ¦rdier",past:"Forbi",following:"FÃ¸lgende",previous:"Forrige","prev-week":"uge","prev-month":"mÃ¥nad","prev-year":"Ã¥r",next:"NÃ¦ste","next-week":"NÃ¦ste uge","next-month":"NÃ¦ste mÃ¥ned","next-year":"NÃ¦ste Ã¥r","less-than":"Dato interval bÃ¸r ikke vÃ¦re med end %d dage","more-than":"Dato interval bÃ¸r ikke vÃ¦re mindre end %d dage","default-more":"VÃ¦lg datointerval lÃ¦ngere end %d dage","default-single":"VÃ¦lg dato","default-less":"VÃ¦lg datointerval mindre end %d dage","default-range":"VÃ¦lg datointerval mellem %d og %d dage","default-default":"VÃ¦lg datointerval",time:"tid",hour:"time",minute:"minut"},fi:{selected:"Valittu:",day:"PÃ¤ivÃ¤",days:"PÃ¤ivÃ¤Ã¤",apply:"Sulje","week-1":"ma","week-2":"ti","week-3":"ke","week-4":"to","week-5":"pe","week-6":"la","week-7":"su","week-number":"V","month-name":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesÃ¤kuu","heinÃ¤kuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],shortcuts:"Pikavalinnat","custom-values":"Mukautetut Arvot",past:"Menneet",following:"Tulevat",previous:"Edellinen","prev-week":"Viikko","prev-month":"Kuukausi","prev-year":"Vuosi",next:"Seuraava","next-week":"Viikko","next-month":"Kuukausi","next-year":"Vuosi","less-than":"Aikajakson tulisi olla vÃ¤hemmÃ¤n kuin %d pÃ¤ivÃ¤Ã¤","more-than":"Aikajakson ei tulisi olla vÃ¤hempÃ¤Ã¤ kuin %d pÃ¤ivÃ¤Ã¤","default-more":"Valitse pidempi aikajakso kuin %d pÃ¤ivÃ¤Ã¤","default-single":"Valitse pÃ¤ivÃ¤","default-less":"Valitse lyhyempi aikajakso kuin %d pÃ¤ivÃ¤Ã¤","default-range":"Valitse aikajakso %d ja %d pÃ¤ivÃ¤n vÃ¤liltÃ¤","default-default":"Valitse aikajakso",time:"Aika",hour:"Tunti",minute:"Minuutti"},cat:{selected:"Seleccionats:",day:"Dia",days:"Dies",apply:"Tanca","week-1":"Dl","week-2":"Dm","week-3":"Dc","week-4":"Dj","week-5":"Dv","week-6":"Ds","week-7":"Dg","week-number":"S","month-name":["gener","febrer","marÃ§","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],shortcuts:"DreÃ§eres","custom-values":"Valors personalitzats",past:"Passat",following:"Futur",previous:"Anterior","prev-week":"Setmana","prev-month":"Mes","prev-year":"Any",next:"SegÃ¼ent","next-week":"Setmana","next-month":"Mes","next-year":"Any","less-than":"El perÃ­ode no hauria de ser de mÃ©s de %d dies","more-than":"El perÃ­ode no hauria de ser de menys de %d dies","default-more":"Perfavor selecciona un perÃ­ode mÃ©s gran de %d dies","default-single":"Perfavor selecciona una data","default-less":"Perfavor selecciona un perÃ­ode de menys de %d dies","default-range":"Perfavor selecciona un perÃ­ode d'entre %d i %d dies","default-default":"Perfavor selecciona un perÃ­ode",time:"Temps",hour:"Hora",minute:"Minut"}},Z.fn.dateRangePicker=function(p){p||(p={}),(p=Z.extend(!0,{autoClose:!1,format:"YYYY-MM-DD",separator:" to ",language:"auto",startOfWeek:"sunday",getValue:function(){return Z(this).val()},setValue:function(e){Z(this).attr("readonly")||Z(this).is(":disabled")||e==Z(this).val()||Z(this).val(e)},startDate:!1,endDate:!1,time:{enabled:!1},minDays:0,maxDays:0,showShortcuts:!1,shortcuts:{},customShortcuts:[],inline:!1,container:"body",alwaysOpen:!1,singleDate:!1,lookBehind:!1,batchMode:!1,duration:200,stickyMonths:!1,dayDivAttrs:[],dayTdAttrs:[],selectForward:!1,selectBackward:!1,applyBtnClass:"",singleMonth:"auto",hoveringTooltip:function(e,t,a){return 1<e?e+" "+K("days"):""},showTopbar:!0,swapTime:!1,showWeekNumbers:!1,getWeekNumber:function(e){return Q(e).format("w")},customOpenAnimation:null,customCloseAnimation:null,customArrowPrevSymbol:null,customArrowNextSymbol:null,monthSelect:!1,yearSelect:!1},p)).start=!1,p.end=!1,p.startWeek=!1,p.isTouchDevice="ontouchstart"in window||navigator.msMaxTouchPoints,p.isTouchDevice&&(p.hoveringTooltip=!1),"auto"==p.singleMonth&&(p.singleMonth=Z(window).width()<480),p.singleMonth&&(p.stickyMonths=!1),p.showTopbar||(p.autoClose=!0),p.startDate&&"string"==typeof p.startDate&&(p.startDate=Q(p.startDate,p.format).toDate()),p.endDate&&"string"==typeof p.endDate&&(p.endDate=Q(p.endDate,p.format).toDate()),p.yearSelect&&"boolean"==typeof p.yearSelect&&(p.yearSelect=function(e){return[e-5,e+5]});var m,e,r=function(){{if("auto"==p.language){var e=navigator.language?navigator.language:navigator.browserLanguage;return e&&(e=e.toLowerCase())in Z.dateRangePickerLanguages?Z.dateRangePickerLanguages[e]:Z.dateRangePickerLanguages.default}return p.language&&p.language in Z.dateRangePickerLanguages?Z.dateRangePickerLanguages[p.language]:Z.dateRangePickerLanguages.default}}(),s=!1,n=this,i=Z(n).get(0);return Z(this).off(".datepicker").on("click.datepicker",function(e){m.is(":visible")||t(p.duration)}).on("change.datepicker",function(e){a()}).on("keyup.datepicker",function(){try{clearTimeout(e)}catch(e){}e=setTimeout(function(){a()},2e3)}),function(){var t=this;if(Z(this).data("date-picker-opened"))return void N();Z(this).data("date-picker-opened",!0),(m=function(){var e,t='<div class="date-picker-wrapper';p.extraClass&&(t+=" "+p.extraClass+" "),p.singleDate&&(t+=" single-date "),p.showShortcuts||(t+=" no-shortcuts "),p.showTopbar||(t+=" no-topbar "),p.customTopBar&&(t+=" custom-topbar "),t+='">',p.showTopbar&&(t+='<div class="drp_top-bar">',p.customTopBar?("function"==typeof p.customTopBar&&(p.customTopBar=p.customTopBar()),t+='<div class="custom-top">'+p.customTopBar+"</div>"):(t+='<div class="normal-top"><span class="selection-top">'+K("selected")+' </span> <b class="start-day">...</b>',p.singleDate||(t+=' <span class="separator-day">'+p.separator+'</span> <b class="end-day">...</b> <i class="selected-days">(<span class="selected-days-num">3</span> '+K("days")+")</i>"),t+="</div>",t+='<div class="error-top">error</div><div class="default-top">default</div>'),t+='<input type="button" class="apply-btn disabled'+(!(e="")===p.autoClose&&(e+=" hide"),""!==p.applyBtnClass&&(e+=" "+p.applyBtnClass),e)+'" value="'+K("apply")+'" />',t+="</div>");var a=p.showWeekNumbers?6:5,n="&lt;";p.customArrowPrevSymbol&&(n=p.customArrowPrevSymbol);var r="&gt;";if(p.customArrowNextSymbol&&(r=p.customArrowNextSymbol),t+='<div class="month-wrapper">   <table class="month1" cellspacing="0" border="0" cellpadding="0">       <thead>           <tr class="caption">               <th>                   <span class="prev">'+n+'                   </span>               </th>               <th colspan="'+a+'" class="month-name">               </th>               <th>'+(p.singleDate||!p.stickyMonths?'<span class="next">'+r+"</span>":"")+'               </th>           </tr>           <tr class="week-name">'+E()+"       </thead>       <tbody></tbody>   </table>",p.singleMonth||(t+='<div class="gap">'+function(){for(var e=['<div class="gap-top-mask"></div><div class="gap-bottom-mask"></div><div class="gap-lines">'],t=0;t<20;t++)e.push('<div class="gap-line"><div class="gap-1"></div><div class="gap-2"></div><div class="gap-3"></div></div>');return e.push("</div>"),e.join("")}()+'</div><table class="month2" cellspacing="0" border="0" cellpadding="0">   <thead>   <tr class="caption">       <th>'+(p.stickyMonths?"":'<span class="prev">'+n+"</span>")+'       </th>       <th colspan="'+a+'" class="month-name">       </th>       <th>           <span class="next">'+r+'</span>       </th>   </tr>   <tr class="week-name">'+E()+"   </thead>   <tbody></tbody></table>"),t+='<div class="dp-clearfix"></div><div class="time"><div class="time1"></div>',p.singleDate||(t+='<div class="time2"></div>'),t+='</div><div class="dp-clearfix"></div></div>',t+='<div class="footer">',p.showShortcuts){t+='<div class="shortcuts"><b>'+K("shortcuts")+"</b>";var s=p.shortcuts;if(s){var i;if(s["prev-days"]&&0<s["prev-days"].length){t+='&nbsp;<span class="prev-days">'+K("past");for(var o=0;o<s["prev-days"].length;o++)i=s["prev-days"][o],i+=1<s["prev-days"][o]?K("days"):K("day"),t+=' <a href="javascript:;" shortcut="day,-'+s["prev-days"][o]+'">'+i+"</a>";t+="</span>"}if(s["next-days"]&&0<s["next-days"].length){t+='&nbsp;<span class="next-days">'+K("following");for(var o=0;o<s["next-days"].length;o++)i=s["next-days"][o],i+=1<s["next-days"][o]?K("days"):K("day"),t+=' <a href="javascript:;" shortcut="day,'+s["next-days"][o]+'">'+i+"</a>";t+="</span>"}if(s.prev&&0<s.prev.length){t+='&nbsp;<span class="prev-buttons">'+K("previous");for(var o=0;o<s.prev.length;o++)i=K("prev-"+s.prev[o]),t+=' <a href="javascript:;" shortcut="prev,'+s.prev[o]+'">'+i+"</a>";t+="</span>"}if(s.next&&0<s.next.length){t+='&nbsp;<span class="next-buttons">'+K("next");for(var o=0;o<s.next.length;o++)i=K("next-"+s.next[o]),t+=' <a href="javascript:;" shortcut="next,'+s.next[o]+'">'+i+"</a>";t+="</span>"}}if(p.customShortcuts)for(var o=0;o<p.customShortcuts.length;o++){var d=p.customShortcuts[o];t+='&nbsp;<span class="custom-shortcut"><a href="javascript:;" shortcut="custom">'+d.name+"</a></span>"}t+="</div>"}if(p.showCustomValues&&(t+='<div class="customValues"><b>'+(p.customValueLabel||K("custom-values"))+"</b>",p.customValues))for(var o=0;o<p.customValues.length;o++){var l=p.customValues[o];t+='&nbsp;<span class="custom-value"><a href="javascript:;" custom="'+l.value+'">'+l.name+"</a></span>"}return Z(t+="</div></div>")}().hide()).append('<div class="date-range-length-tip"></div>'),Z(p.container).append(m),p.inline?m.addClass("inline-wrapper"):o();p.alwaysOpen&&m.find(".apply-btn").hide();var e=_();if(G(e),p.time.enabled)if(p.startDate&&p.endDate||p.start&&p.end)Y(Q(p.start||p.startDate).toDate(),"time1"),Y(Q(p.end||p.endDate).toDate(),"time2");else{var a=p.defaultEndTime?p.defaultEndTime:e;Y(e,"time1"),Y(a,"time2")}var n="";n=p.singleDate?K("default-single"):p.minDays&&p.maxDays?K("default-range"):p.minDays?K("default-more"):p.maxDays?K("default-less"):K("default-default");m.find(".default-top").html(n.replace(/\%d/,p.minDays).replace(/\%d/,p.maxDays)),p.singleMonth?m.addClass("single-month"):m.addClass("two-months");setTimeout(function(){l(),s=!0},0),m.click(function(e){e.stopPropagation()}),Z(document).on("click.datepicker",U),m.find(".next").click(function(){p.stickyMonths?function(e){var t=H(p.month1),a=H(p.month2);if(q(a))return;if(!p.singleDate&&0<=L(t,a))return;z(t,"month1"),z(a,"month2"),j()}():function(e){var t=Z(e).parents("table").hasClass("month2"),a=t?p.month2:p.month1;if(a=H(a),!p.singleMonth&&!p.singleDate&&!t&&0<=L(a,p.month2)||q(a))return;z(a,t?"month2":"month1"),I()}(this)}),m.find(".prev").click(function(){p.stickyMonths?function(e){var t=R(p.month1),a=R(p.month2);if(q(t))return;if(!p.singleDate&&L(a,t)<=0)return;z(a,"month2"),z(t,"month1"),j()}():function(e){var t=Z(e).parents("table").hasClass("month2"),a=t?p.month2:p.month1;if(a=R(a),t&&L(a,p.month1)<=0||q(a))return;z(a,t?"month2":"month1"),I()}(this)}),m.attr("unselectable","on").css("user-select","none").on("selectstart",function(e){return e.preventDefault(),!1}),m.find(".apply-btn").click(function(){N();var e=W(new Date(p.start))+p.separator+W(new Date(p.end));Z(t).trigger("datepicker-apply",{value:e,date1:new Date(p.start),date2:new Date(p.end)})}),m.find("[custom]").click(function(){var e=Z(this).attr("custom");p.start=!1,p.end=!1,m.find(".day.checked").removeClass("checked"),p.setValue.call(i,e),M(),S(!0),j(),p.autoClose&&N()}),m.find("[shortcut]").click(function(){var e,t=Z(this).attr("shortcut"),a=new Date,n=!1;if(-1!=t.indexOf("day")){var r=parseInt(t.split(",",2)[1],10);n=new Date((new Date).getTime()+864e5*r),a=new Date(a.getTime()+864e5*(0<r?1:-1))}else if(-1!=t.indexOf("week")){var s;for(e=-1!=t.indexOf("prev,")?-1:1,s=1==e?"monday"==p.startOfWeek?1:0:"monday"==p.startOfWeek?0:6,a=new Date(a.getTime()-864e5);a.getDay()!=s;)a=new Date(a.getTime()+864e5*e);n=new Date(a.getTime()+864e5*e*6)}else if(-1!=t.indexOf("month"))e=-1!=t.indexOf("prev,")?-1:1,(n=1==e?H(a):R(a)).setDate(1),(a=H(n)).setDate(1),a=new Date(a.getTime()-864e5);else if(-1!=t.indexOf("year"))e=-1!=t.indexOf("prev,")?-1:1,(n=new Date).setFullYear(a.getFullYear()+e),n.setMonth(0),n.setDate(1),a.setFullYear(a.getFullYear()+e),a.setMonth(11),a.setDate(31);else if("custom"==t){var i=Z(this).html();if(p.customShortcuts&&0<p.customShortcuts.length)for(var o=0;o<p.customShortcuts.length;o++){var d=p.customShortcuts[o];if(d.name==i){var l=[];if((l=d.dates.call())&&2==l.length&&(n=l[0],a=l[1]),l&&1==l.length){var u=l[0];z(u,"month1"),z(H(u),"month2"),I()}break}}}n&&a&&(T(n,a),M())}),m.find(".time1 input[type=range]").on("change touchmove",function(e){var t=e.target,a="hour"==t.name?Z(t).val().replace(/^(\d{1})$/,"0$1"):void 0,n="minute"==t.name?Z(t).val().replace(/^(\d{1})$/,"0$1"):void 0;c("time1",a,n)}),m.find(".time2 input[type=range]").on("change touchmove",function(e){var t=e.target,a="hour"==t.name?Z(t).val().replace(/^(\d{1})$/,"0$1"):void 0,n="minute"==t.name?Z(t).val().replace(/^(\d{1})$/,"0$1"):void 0;c("time2",a,n)})}.call(this),p.alwaysOpen&&t(0),Z(this).data("dateRangePicker",{setStart:function(e){return"string"==typeof e&&(e=Q(e,p.format).toDate()),p.end=!1,C(e),this},setEnd:function(e,t){var a=new Date;return a.setTime(p.start),"string"==typeof e&&(e=Q(e,p.format).toDate()),T(a,e,t),this},setDateRange:function(e,t,a){"string"==typeof e&&"string"==typeof t&&(e=Q(e,p.format).toDate(),t=Q(t,p.format).toDate()),T(e,t,a)},clear:function(){p.start=!1,p.end=!1,m.find(".day.checked").removeClass("checked"),m.find(".day.last-date-selected").removeClass("last-date-selected"),m.find(".day.first-date-selected").removeClass("first-date-selected"),p.setValue.call(i,""),M(),S(),j()},close:N,open:t,redraw:B,getDatePicker:function(){return m},resetMonthsView:G,destroy:function(){Z(n).off(".datepicker"),Z(n).data("dateRangePicker",""),Z(n).data("date-picker-opened",null),m.remove(),Z(window).off("resize.datepicker",o),Z(document).off("click.datepicker",U)}}),Z(window).on("resize.datepicker",o),this;function o(){if(!p.inline){var e=Z(n).offset();if("relative"==Z(p.container).css("position")){var t=Z(p.container).offset(),a=Math.max(0,e.left+m.outerWidth()-Z("body").width()+16);m.css({top:e.top-t.top+Z(n).outerHeight()+4,left:e.left-t.left-a})}else e.left<460?m.css({top:e.top+Z(n).outerHeight()+parseInt(Z("body").css("border-top")||0,10),left:e.left}):m.css({top:e.top+Z(n).outerHeight()+parseInt(Z("body").css("border-top")||0,10),left:e.left+Z(n).width()-m.width()-16})}}function t(e){B(),a(),p.customOpenAnimation?p.customOpenAnimation.call(m.get(0),function(){Z(n).trigger("datepicker-opened",{relatedTarget:m})}):m.slideDown(e,function(){Z(n).trigger("datepicker-opened",{relatedTarget:m})}),Z(n).trigger("datepicker-open",{relatedTarget:m}),I(),l(),o()}function a(){var e=p.getValue.call(i),t=e?e.split(p.separator):"";if(t&&(1==t.length&&p.singleDate||2<=t.length)){var a=p.format;a.match(/Do/)&&(a=a.replace(/Do/,"D"),t[0]=t[0].replace(/(\d+)(th|nd|st)/,"$1"),2<=t.length&&(t[1]=t[1].replace(/(\d+)(th|nd|st)/,"$1"))),s=!1,2<=t.length?T(d(t[0],a,Q.locale(p.language)),d(t[1],a,Q.locale(p.language))):1==t.length&&p.singleDate&&C(d(t[0],a,Q.locale(p.language))),s=!0}}function d(e,t,a){return Q(e,t,a).isValid()?Q(e,t,a).toDate():Q().toDate()}function l(){var e=m.find(".gap").css("margin-left");e&&(e=parseInt(e));var t=m.find(".month1").width(),a=m.find(".gap").width()+(e?2*e:0),n=m.find(".month2").width();m.find(".month-wrapper").width(t+a+n)}function u(e,t){m.find("."+e+" input[type=range].hour-range").val(Q(t).hours()),m.find("."+e+" input[type=range].minute-range").val(Q(t).minutes()),c(e,Q(t).format("HH"),Q(t).format("mm"))}function h(e,t){p[e]=parseInt(Q(parseInt(t)).startOf("day").add(Q(p[e+"Time"]).format("HH"),"h").add(Q(p[e+"Time"]).format("mm"),"m").valueOf())}function c(e,r,s){switch(r&&m.find("."+e+" .hour-val").text(r),s&&m.find("."+e+" .minute-val").text(s),e){case"time1":p.start&&t("start",Q(p.start)),t("startTime",Q(p.startTime||Q().valueOf()));break;case"time2":p.end&&t("end",Q(p.end)),t("endTime",Q(p.endTime||Q().valueOf()))}function t(e,t){var a=t.format("HH"),n=t.format("mm");p[e]=t.startOf("day").add(r||a,"h").add(s||n,"m").valueOf()}M(),S(),j()}function f(e){var t=e;return"week-range"===p.batchMode?t="monday"===p.startOfWeek?Q(parseInt(e)).startOf("isoweek").valueOf():Q(parseInt(e)).startOf("week").valueOf():"month-range"===p.batchMode&&(t=Q(parseInt(e)).startOf("month").valueOf()),t}function v(e){var t=e;return"week-range"===p.batchMode?t="monday"===p.startOfWeek?Q(parseInt(e)).endOf("isoweek").valueOf():Q(parseInt(e)).endOf("week").valueOf():"month-range"===p.batchMode&&(t=Q(parseInt(e)).endOf("month").valueOf()),t}function g(e){if(!e.hasClass("invalid")){var t=e.attr("time");if(e.addClass("checked"),p.singleDate?(p.start=t,p.end=!1):"week"===p.batchMode?"monday"===p.startOfWeek?(p.start=Q(parseInt(t)).startOf("isoweek").valueOf(),p.end=Q(parseInt(t)).endOf("isoweek").valueOf()):(p.end=Q(parseInt(t)).endOf("week").valueOf(),p.start=Q(parseInt(t)).startOf("week").valueOf()):"workweek"===p.batchMode?(p.start=Q(parseInt(t)).day(1).valueOf(),p.end=Q(parseInt(t)).day(5).valueOf()):"weekend"===p.batchMode?(p.start=Q(parseInt(t)).day(6).valueOf(),p.end=Q(parseInt(t)).day(7).valueOf()):"month"===p.batchMode?(p.start=Q(parseInt(t)).startOf("month").valueOf(),p.end=Q(parseInt(t)).endOf("month").valueOf()):p.start&&p.end||!p.start&&!p.end?(p.start=f(t),p.end=!1):p.start&&(p.end=v(t),p.time.enabled&&h("end",p.end)),p.time.enabled&&(p.start&&h("start",p.start),p.end&&h("end",p.end)),!p.singleDate&&p.start&&p.end&&p.start>p.end){var a=p.end;p.end=v(p.start),p.start=f(a),p.time.enabled&&p.swapTime&&(u("time1",p.start),u("time2",p.end))}p.start=parseInt(p.start),p.end=parseInt(p.end),b(),p.start&&!p.end&&(Z(n).trigger("datepicker-first-date-selected",{date1:new Date(p.start)}),y(e)),w(),M(),S(),j(),x()}}function k(e){if(e=parseInt(e,10),p.startDate&&F(e,p.startDate)<0)return!1;if(p.endDate&&0<F(e,p.endDate))return!1;if(p.start&&!p.end&&!p.singleDate){if(0<p.maxDays&&O(e,p.start)>p.maxDays)return!1;if(0<p.minDays&&O(e,p.start)<p.minDays)return!1;if(p.selectForward&&e<p.start)return!1;if(p.selectBackward&&e>p.start)return!1;if(p.beforeShowDay&&"function"==typeof p.beforeShowDay){for(var t=!0,a=e;1<O(a,p.start);){if(!p.beforeShowDay(new Date(a))[0]){t=!1;break}if(Math.abs(a-p.start)<864e5)break;a>p.start&&(a-=864e5),a<p.start&&(a+=864e5)}if(!t)return!1}}return!0}function w(){return m.find(".day.invalid.tmp").removeClass("tmp invalid").addClass("valid"),p.start&&!p.end&&m.find(".day.toMonth.valid").each(function(){k(parseInt(Z(this).attr("time"),10))?Z(this).addClass("valid tmp").removeClass("invalid"):Z(this).addClass("invalid tmp").removeClass("valid")}),!0}function y(e){var t=parseInt(e.attr("time")),a="";if(e.hasClass("has-tooltip")&&e.attr("data-tooltip"))a='<span class="tooltip-content">'+e.attr("data-tooltip")+"</span>";else if(!e.hasClass("invalid"))if(p.singleDate)m.find(".day.hovering").removeClass("hovering"),e.addClass("hovering");else if(m.find(".day").each(function(){var e=parseInt(Z(this).attr("time"));p.start,p.end;e==t?Z(this).addClass("hovering"):Z(this).removeClass("hovering"),p.start&&!p.end&&(p.start<e&&e<=t||p.start>e&&t<=e)?Z(this).addClass("hovering"):Z(this).removeClass("hovering")}),p.start&&!p.end){var n=O(t,p.start);p.hoveringTooltip&&("function"==typeof p.hoveringTooltip?a=p.hoveringTooltip(n,p.start,t):!0===p.hoveringTooltip&&1<n&&(a=n+" "+K("days")))}if(a){var r=e.offset(),s=m.offset(),i=r.left-s.left,o=r.top-s.top;i+=e.width()/2;var d=m.find(".date-range-length-tip"),l=d.css({visibility:"hidden",display:"none"}).html(a).width(),u=d.height();i-=l/2,o-=u,setTimeout(function(){d.css({left:i,top:o,display:"block",visibility:"visible"})},10)}else m.find(".date-range-length-tip").hide()}function b(){m.find(".day.hovering").removeClass("hovering"),m.find(".date-range-length-tip").hide()}function D(e){var t=e.val(),a=e.attr("name"),n=e.parents("table").hasClass("month1")?"month1":"month2",r="month1"===n?"month2":"month1",s=!!p.startDate&&Q(p.startDate),i=!!p.endDate&&Q(p.endDate),o=Q(p[n])[a](t);s&&o.isSameOrBefore(s)&&(o=s.add("month2"===n?1:0,"month")),i&&o.isSameOrAfter(i)&&(o=i.add(p.singleMonth||"month1"!==n?0:-1,"month")),z(o,n),"month1"===n?(p.stickyMonths||Q(o).isSameOrAfter(p[r],"month"))&&z(Q(o).add(1,"month"),r):(p.stickyMonths||Q(o).isSameOrBefore(p[r],"month"))&&z(Q(o).add(-1,"month"),r),I()}function x(){!0===p.singleDate?s&&p.start&&p.autoClose&&N():s&&p.start&&p.end&&p.autoClose&&N()}function M(){var e=Math.ceil((p.end-p.start)/864e5)+1;p.singleDate?p.start&&!p.end?m.find(".drp_top-bar").removeClass("error").addClass("normal"):m.find(".drp_top-bar").removeClass("error").removeClass("normal"):p.maxDays&&e>p.maxDays?(p.start=!1,p.end=!1,m.find(".day").removeClass("checked"),m.find(".drp_top-bar").removeClass("normal").addClass("error").find(".error-top").html(K("less-than").replace("%d",p.maxDays))):p.minDays&&e<p.minDays?(p.start=!1,p.end=!1,m.find(".day").removeClass("checked"),m.find(".drp_top-bar").removeClass("normal").addClass("error").find(".error-top").html(K("more-than").replace("%d",p.minDays))):p.start||p.end?m.find(".drp_top-bar").removeClass("error").addClass("normal"):m.find(".drp_top-bar").removeClass("error").removeClass("normal"),p.singleDate&&p.start&&!p.end||!p.singleDate&&p.start&&p.end?m.find(".apply-btn").removeClass("disabled"):m.find(".apply-btn").addClass("disabled"),p.batchMode&&(p.start&&p.startDate&&F(p.start,p.startDate)<0||p.end&&p.endDate&&0<F(p.end,p.endDate))&&(p.start=!1,p.end=!1,m.find(".day").removeClass("checked"))}function S(e,t){var a;m.find(".start-day").html("..."),m.find(".end-day").html("..."),m.find(".selected-days").hide(),p.start&&m.find(".start-day").html(W(new Date(parseInt(p.start)))),p.end&&m.find(".end-day").html(W(new Date(parseInt(p.end)))),p.start&&p.singleDate?(m.find(".apply-btn").removeClass("disabled"),a=W(new Date(p.start)),p.setValue.call(i,a,W(new Date(p.start)),W(new Date(p.end))),s&&!t&&Z(n).trigger("datepicker-change",{value:a,date1:new Date(p.start)})):p.start&&p.end?(m.find(".selected-days").show().find(".selected-days-num").html(O(p.end,p.start)),m.find(".apply-btn").removeClass("disabled"),a=W(new Date(p.start))+p.separator+W(new Date(p.end)),p.setValue.call(i,a,W(new Date(p.start)),W(new Date(p.end))),s&&!t&&Z(n).trigger("datepicker-change",{value:a,date1:new Date(p.start),date2:new Date(p.end)})):e?m.find(".apply-btn").removeClass("disabled"):m.find(".apply-btn").addClass("disabled")}function O(e,t){return Math.abs(Q(e).diff(Q(t),"d"))+1}function T(e,t,a){if(e.getTime()>t.getTime()){var n=t;t=e,e=n,n=null}var r=!0;if(p.startDate&&F(e,p.startDate)<0&&(r=!1),p.endDate&&0<F(t,p.endDate)&&(r=!1),!r)return z(p.startDate,"month1"),z(H(p.startDate),"month2"),void I();p.start=e.getTime(),p.end=t.getTime(),p.time.enabled&&(u("time1",e),u("time2",t)),(p.stickyMonths||0<F(e,t)&&0===L(e,t))&&(p.lookBehind?e=R(t):t=H(e)),p.stickyMonths&&!1!==p.endDate&&0<L(t,p.endDate)&&(e=R(e),t=R(t)),p.stickyMonths||0===L(e,t)&&(p.lookBehind?e=R(t):t=H(e)),z(e,"month1"),z(t,"month2"),I(),M(),S(!1,a),x()}function C(e){var t=!0;if(p.startDate&&F(e,p.startDate)<0&&(t=!1),p.endDate&&0<F(e,p.endDate)&&(t=!1),t){if(p.start=e.getTime(),p.time.enabled&&u("time1",e),z(e,"month1"),!0!==p.singleMonth)z(H(e),"month2");I(),S(),x()}else z(p.startDate,"month1")}function j(){(p.start||p.end)&&(m.find(".day").each(function(){var e=parseInt(Z(this).attr("time")),t=p.start,a=p.end;p.time.enabled&&(e=Q(e).startOf("day").valueOf(),t=Q(t||Q().valueOf()).startOf("day").valueOf(),a=Q(a||Q().valueOf()).startOf("day").valueOf()),p.start&&p.end&&e<=a&&t<=e||p.start&&!p.end&&Q(t).format("YYYY-MM-DD")==Q(e).format("YYYY-MM-DD")?Z(this).addClass("checked"):Z(this).removeClass("checked"),p.start&&Q(t).format("YYYY-MM-DD")==Q(e).format("YYYY-MM-DD")?Z(this).addClass("first-date-selected"):Z(this).removeClass("first-date-selected"),p.end&&Q(a).format("YYYY-MM-DD")==Q(e).format("YYYY-MM-DD")?Z(this).addClass("last-date-selected"):Z(this).removeClass("last-date-selected")}),m.find(".week-number").each(function(){Z(this).attr("data-start-time")==p.startWeek&&Z(this).addClass("week-number-selected")}))}function z(e,t){var a=function(e,t){var a=(e=Q(e)).get("month"),n='<div class="month-element">'+A(a)+"</div>";if(!p.monthSelect)return n;var r=!!p.startDate&&Q(p.startDate).add(p.singleMonth||"month2"!==t?0:1,"month"),s=!!p.endDate&&Q(p.endDate).add(p.singleMonth||"month1"!==t?0:-1,"month"),i=r&&e.isSame(r,"year")?r.get("month"):0,o=s&&e.isSame(s,"year")?s.get("month"):11,d=Math.min(i,a),l=Math.max(o,a);if(d===l)return n;return P("month",V({minSelectable:i,maxSelectable:o,minVisible:d,maxVisible:l},a,function(e){return A(e)}))}(e=Q(e).toDate(),t),n=function(e,t){var a=(e=Q(e)).get("year"),n='<div class="month-element">'+a+"</div>";if(!p.yearSelect)return n;var r=p.yearSelect&&"function"==typeof p.yearSelect,s=!!p.startDate&&Q(p.startDate).add(p.singleMonth||"month2"!==t?0:1,"month"),i=!!p.endDate&&Q(p.endDate).add(p.singleMonth||"month1"!==t?0:-1,"month"),o=r?p.yearSelect(a):p.yearSelect.slice(),d=s?Math.max(o[0],s.get("year")):Math.min(o[0],a),l=i?Math.min(o[1],i.get("year")):Math.max(o[1],a),u=Math.min(d,a),m=Math.max(l,a);if(u===m)return n;return P("year",V({minSelectable:d,maxSelectable:l,minVisible:u,maxVisible:m},a))}(e,t);m.find("."+t+" .month-name").html(a+" "+n),m.find("."+t+" tbody").html(function(e){var t=[];e.setDate(1);new Date(e.getTime()-864e5);var a,n,r=new Date,s=e.getDay();0===s&&"monday"===p.startOfWeek&&(s=7);if(0<s)for(var i=s;0<i;i--){var o=new Date(e.getTime()-864e5*i);n=k(o.getTime()),p.startDate&&F(o,p.startDate)<0&&(n=!1),p.endDate&&0<F(o,p.endDate)&&(n=!1),t.push({date:o,type:"lastMonth",day:o.getDate(),time:o.getTime(),valid:n})}for(var d=e.getMonth(),i=0;i<40;i++)a=Q(e).add(i,"days").toDate(),n=k(a.getTime()),p.startDate&&F(a,p.startDate)<0&&(n=!1),p.endDate&&0<F(a,p.endDate)&&(n=!1),t.push({date:a,type:a.getMonth()==d?"toMonth":"nextMonth",day:a.getDate(),time:a.getTime(),valid:n});for(var l=[],u=0;u<6&&"nextMonth"!=t[7*u].type;u++){l.push("<tr>");for(var o=0;o<7;o++){var m="monday"==p.startOfWeek?o+1:o;a=t[7*u+m];var h=Q(a.time).format("L")==Q(r).format("L");if(a.extraClass="",a.tooltip="",a.valid&&p.beforeShowDay&&"function"==typeof p.beforeShowDay){var c=p.beforeShowDay(Q(a.time).toDate());a.valid=c[0],a.extraClass=c[1]||"",a.tooltip=c[2]||"",""!==a.tooltip&&(a.extraClass+=" has-tooltip ")}var f={time:a.time,"data-tooltip":a.tooltip,class:"day "+a.type+" "+a.extraClass+" "+(a.valid?"valid":"invalid")+" "+(h?"real-today":"")};0===o&&p.showWeekNumbers&&l.push('<td><div class="week-number" data-start-time="'+a.time+'">'+p.getWeekNumber(a.date)+"</div></td>"),l.push("<td "+$({},p.dayTdAttrs,a)+"><div "+$(f,p.dayDivAttrs,a)+">"+J(a.time,a.day)+"</div></td>")}l.push("</tr>")}return l.join("")}(e)),p[t]=e,w(),m.find(".day").off("click").click(function(e){g(Z(this))}),m.find(".day").off("mouseenter").mouseenter(function(e){y(Z(this))}),m.find(".day").off("mouseleave").mouseleave(function(e){m.find(".date-range-length-tip").hide(),p.singleDate&&b()}),m.find(".week-number").off("click").click(function(e){var t,a,n,r;t=Z(this),r=parseInt(t.attr("data-start-time"),10),p.startWeek?(m.find(".week-number-selected").removeClass("week-number-selected"),a=new Date(r<p.startWeek?r:p.startWeek),n=new Date(r<p.startWeek?p.startWeek:r),p.startWeek=!1,p.start=Q(a).day("monday"==p.startOfWeek?1:0).valueOf(),p.end=Q(n).day("monday"==p.startOfWeek?7:6).valueOf()):(p.startWeek=r,t.addClass("week-number-selected"),a=new Date(r),p.start=Q(a).day("monday"==p.startOfWeek?1:0).valueOf(),p.end=Q(a).day("monday"==p.startOfWeek?7:6).valueOf()),w(),M(),S(),j(),x()}),m.find(".month").off("change").change(function(e){D(Z(this))}),m.find(".year").off("change").change(function(e){D(Z(this))})}function V(e,t,a){var n=[];a=a||function(e){return e};for(var r=e.minVisible;r<=e.maxVisible;r++)n.push({value:r,text:a(r),selected:r===t,disabled:r<e.minSelectable||r>e.maxSelectable});return n}function P(e,t){for(var a,n='<div class="select-wrapper"><select class="'+e+'" name="'+e+'">',r=0,s=t.length;r<s;r++){var i=t[r];n+='<option value="'+i.value+'"'+(i.selected?" selected":"")+(i.disabled?" disabled":"")+">"+i.text+"</option>",i.selected&&(a=i.text)}return n+="</select>"+a+"</div>"}function Y(e,t){m.find("."+t).append("<div><span>"+K("Time")+': <span class="hour-val">00</span>:<span class="minute-val">00</span></span></div><div class="hour"><label>'+K("Hour")+': <input type="range" class="hour-range" name="hour" min="0" max="23"></label></div><div class="minute"><label>'+K("Minute")+': <input type="range" class="minute-range" name="minute" min="0" max="59"></label></div>'),u(t,e)}function A(e){return K("month-name")[e]}function W(e){return Q(e).format(p.format)}function I(){j();var e=parseInt(Q(p.month1).format("YYYYMM")),t=parseInt(Q(p.month2).format("YYYYMM")),a=Math.abs(e-t);1<a&&89!=a?m.addClass("has-gap").removeClass("no-gap").find(".gap").css("visibility","visible"):m.removeClass("has-gap").addClass("no-gap").find(".gap").css("visibility","hidden");var n=m.find("table.month1").height(),r=m.find("table.month2").height();m.find(".gap").height(Math.max(n,r)+10)}function N(){if(!p.alwaysOpen){var e=function(){Z(n).data("date-picker-opened",!1),Z(n).trigger("datepicker-closed",{relatedTarget:m})};p.customCloseAnimation?p.customCloseAnimation.call(m.get(0),e):Z(m).slideUp(p.duration,e),Z(n).trigger("datepicker-close",{relatedTarget:m})}}function B(){z(p.month1,"month1"),z(p.month2,"month2")}function L(e,t){var a=parseInt(Q(e).format("YYYYMM"))-parseInt(Q(t).format("YYYYMM"));return 0<a?1:0===a?0:-1}function F(e,t){var a=parseInt(Q(e).format("YYYYMMDD"))-parseInt(Q(t).format("YYYYMMDD"));return 0<a?1:0===a?0:-1}function H(e){return Q(e).add(1,"months").toDate()}function R(e){return Q(e).add(-1,"months").toDate()}function E(){var e=p.showWeekNumbers?"<th>"+K("week-number")+"</th>":"";return"monday"==p.startOfWeek?e+"<th>"+K("week-1")+"</th><th>"+K("week-2")+"</th><th>"+K("week-3")+"</th><th>"+K("week-4")+"</th><th>"+K("week-5")+"</th><th>"+K("week-6")+"</th><th>"+K("week-7")+"</th>":e+"<th>"+K("week-7")+"</th><th>"+K("week-1")+"</th><th>"+K("week-2")+"</th><th>"+K("week-3")+"</th><th>"+K("week-4")+"</th><th>"+K("week-5")+"</th><th>"+K("week-6")+"</th>"}function q(e){return e=Q(e),!(!p.startDate||!e.endOf("month").isBefore(p.startDate))||!(!p.endDate||!e.startOf("month").isAfter(p.endDate))}function $(e,t,r){var s=Z.extend(!0,{},e);Z.each(t,function(e,t){var a=t(r);for(var n in a)s.hasOwnProperty(n)?s[n]+=a[n]:s[n]=a[n]});var a="";for(var n in s)s.hasOwnProperty(n)&&(a+=n+'="'+s[n]+'" ');return a}function J(e,t){return p.showDateFilter&&"function"==typeof p.showDateFilter?p.showDateFilter(e,t):t}function K(e){var t=e.toLowerCase(),a=e in r?r[e]:t in r?r[t]:null,n=Z.dateRangePickerLanguages.default;return null==a&&(a=e in n?n[e]:t in n?n[t]:""),a}function _(){var e=p.defaultTime?p.defaultTime:new Date;return p.lookBehind?(p.startDate&&L(e,p.startDate)<0&&(e=H(Q(p.startDate).toDate())),p.endDate&&0<L(e,p.endDate)&&(e=Q(p.endDate).toDate())):(p.startDate&&L(e,p.startDate)<0&&(e=Q(p.startDate).toDate()),p.endDate&&0<L(H(e),p.endDate)&&(e=R(Q(p.endDate).toDate()))),p.singleDate&&(p.startDate&&L(e,p.startDate)<0&&(e=Q(p.startDate).toDate()),p.endDate&&0<L(e,p.endDate)&&(e=Q(p.endDate).toDate())),e}function G(e){e||(e=_()),p.lookBehind?(z(R(e),"month1"),z(e,"month2")):(z(e,"month1"),z(H(e),"month2")),p.singleDate&&z(e,"month1"),j(),I()}function U(e){var t,a;t=e,(a=n[0]).contains(t.target)||t.target==a||null!=a.childNodes&&0<=Z.inArray(t.target,a.childNodes)||m.is(":visible")&&N()}}});PK     ’ŠU]î,‹T      7  assets/vendor/date-range-picker/daterangepicker.min.cssnu „[µü¤        .date-picker{width:170px;height:25px;padding:0;border:0;line-height:25px;padding-left:10px;font-size:12px;font-family:Arial,sans-serif;font-weight:700;cursor:pointer;color:#303030;position:relative;z-index:2}.date-picker-wrapper{position:absolute;z-index:1;border:1px solid #bfbfbf;background-color:#efefef;padding:5px 12px;font-size:12px;line-height:20px;color:#aaa;font-family:Arial,sans-serif;-webkit-box-shadow:3px 3px 10px rgba(0,0,0,.5);box-shadow:3px 3px 10px rgba(0,0,0,.5);-webkit-box-sizing:initial;box-sizing:initial}.dp-clearfix{clear:both;height:0;font-size:0}.date-picker-wrapper.inline-wrapper{position:relative;-webkit-box-shadow:none;box-shadow:none;display:inline-block}.date-picker-wrapper.single-date{width:auto}.date-picker-wrapper.no-shortcuts{padding-bottom:12px}.date-picker-wrapper.no-topbar{padding-top:12px}.date-picker-wrapper .footer{font-size:11px;padding-top:3px}.date-picker-wrapper b{color:#666;font-weight:700}.date-picker-wrapper a{color:#6bb4d6;text-decoration:underline}.date-picker-wrapper .month-name{text-transform:uppercase}.date-picker-wrapper .select-wrapper{position:relative;overflow:hidden;display:inline-block;vertical-align:middle}.date-picker-wrapper .select-wrapper:hover{text-decoration:underline}.date-picker-wrapper .month-element{display:inline-block;vertical-align:middle}.date-picker-wrapper .select-wrapper select{position:absolute;margin:0;padding:0;left:0;top:-1px;font-size:inherit;font-style:inherit;font-weight:inherit;text-transform:inherit;color:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:0;outline:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";filter:alpha(opacity=1);opacity:.01}.date-picker-wrapper .month-wrapper{border:1px solid #bfbfbf;border-radius:3px;background-color:#fff;padding:5px;cursor:default;position:relative;_overflow:hidden}.date-picker-wrapper .month-wrapper table{width:190px;float:left}.date-picker-wrapper .month-wrapper table.month2{width:190px;float:left}.date-picker-wrapper .month-wrapper table td,.date-picker-wrapper .month-wrapper table th{vertical-align:middle;text-align:center;line-height:14px;margin:0;padding:0}.date-picker-wrapper .month-wrapper table .day{padding:5px 0;line-height:1;font-size:12px;margin-bottom:1px;color:#ccc;cursor:default}.date-picker-wrapper .month-wrapper table div.day.lastMonth,.date-picker-wrapper .month-wrapper table div.day.nextMonth{color:#999;cursor:default}.date-picker-wrapper .month-wrapper table .day.checked{background-color:#9cdbf7}.date-picker-wrapper .month-wrapper table .week-name{height:20px;line-height:20px;font-weight:100;text-transform:uppercase}.date-picker-wrapper .month-wrapper table .day.has-tooltip{cursor:help!important}.date-picker-wrapper .month-wrapper table .day.has-tooltip .tooltip{white-space:nowrap}.date-picker-wrapper .time label{white-space:nowrap}.date-picker-wrapper .month-wrapper table .day.toMonth.valid{color:#333;cursor:pointer}.date-picker-wrapper .month-wrapper table .day.toMonth.hovering{background-color:#cdecfa}.date-picker-wrapper .month-wrapper table .day.lastMonth,.date-picker-wrapper .month-wrapper table .day.nextMonth{display:none}.date-picker-wrapper .month-wrapper table .day.real-today{background-color:#ffe684}.date-picker-wrapper .month-wrapper table .day.real-today.checked,.date-picker-wrapper .month-wrapper table .day.real-today.hovering{background-color:#70ccd5}.date-picker-wrapper table .caption{height:40px}.date-picker-wrapper table .caption>th:first-of-type,.date-picker-wrapper table .caption>th:last-of-type{width:27px}.date-picker-wrapper table .caption .next,.date-picker-wrapper table .caption .prev{padding:0 5px;cursor:pointer}.date-picker-wrapper table .caption .next:hover,.date-picker-wrapper table .caption .prev:hover{background-color:#ccc;color:#fff}.date-picker-wrapper .gap{position:relative;z-index:1;width:15px;height:100%;background-color:red;font-size:0;line-height:0;float:left;top:-5px;margin:0 10px -10px;visibility:hidden;height:0}.date-picker-wrapper .gap .gap-lines{height:100%;overflow:hidden}.date-picker-wrapper .gap .gap-line{height:15px;width:15px;position:relative}.date-picker-wrapper .gap .gap-line .gap-1{z-index:1;height:0;border-left:8px solid #fff;border-top:8px solid #eee;border-bottom:8px solid #eee}.date-picker-wrapper .gap .gap-line .gap-2{position:absolute;right:0;top:0;z-index:2;height:0;border-left:8px solid transparent;border-top:8px solid #fff}.date-picker-wrapper .gap .gap-line .gap-3{position:absolute;right:0;top:8px;z-index:2;height:0;border-left:8px solid transparent;border-bottom:8px solid #fff}.date-picker-wrapper .gap .gap-top-mask{width:6px;height:1px;position:absolute;top:-1px;left:1px;background-color:#eee;z-index:3}.date-picker-wrapper .gap .gap-bottom-mask{width:6px;height:1px;position:absolute;bottom:-1px;left:7px;background-color:#eee;z-index:3}.date-picker-wrapper .selected-days{display:none}.date-picker-wrapper .drp_top-bar{line-height:1.4;position:relative;padding:10px 40px 10px 0}.date-picker-wrapper .drp_top-bar .error-top,.date-picker-wrapper .drp_top-bar .normal-top{display:none}.date-picker-wrapper .drp_top-bar .default-top{display:block}.date-picker-wrapper .drp_top-bar.error .default-top{display:none}.date-picker-wrapper .drp_top-bar.error .error-top{display:block;color:red}.date-picker-wrapper .drp_top-bar.normal .default-top{display:none}.date-picker-wrapper .drp_top-bar.normal .normal-top{display:block}.date-picker-wrapper .drp_top-bar.normal .normal-top .selection-top{color:#333}.date-picker-wrapper .drp_top-bar .apply-btn{position:absolute;right:0;top:6px;padding:3px 5px;margin:0;font-size:12px;border-radius:4px;cursor:pointer;color:#d9eef7;border:solid 1px #0076a3;background:#0095cd;background:-moz-linear-gradient(top,#00adee,#0078a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');color:#fff;line-height:initial}.date-picker-wrapper .drp_top-bar .apply-btn.disabled{cursor:pointer;color:#606060;border:solid 1px #b7b7b7;background:#fff;background:-moz-linear-gradient(top,#fff,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed')}.date-picker-wrapper .time{position:relative}.date-picker-wrapper.single-month .time{display:block}.date-picker-wrapper .time input[type=range]{vertical-align:middle;width:129px;padding:0;margin:0;height:20px}.date-picker-wrapper .time1{width:180px;padding:0 5px;text-align:center}.time2{width:180px;padding:0 5px;text-align:center}.date-picker-wrapper .time1{float:left}.date-picker-wrapper .time2{float:right}.date-picker-wrapper .hour{text-align:right}.minute{text-align:right}.date-picker-wrapper .hide{display:none}.date-picker-wrapper .first-date-selected,.date-picker-wrapper .last-date-selected{background-color:#49e!important;color:#fff!important}.date-picker-wrapper .date-range-length-tip{position:absolute;margin-top:-4px;margin-left:-8px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3);display:none;background-color:#ff0;padding:0 6px;border-radius:2px;font-size:12px;line-height:16px;-webkit-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-moz-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-ms-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));-o-filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3));filter:drop-shadow(0 0 3px rgba(0, 0, 0, .3))}.date-picker-wrapper .date-range-length-tip:after{content:'';position:absolute;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ff0;left:50%;margin-left:-4px;bottom:-4px}.date-picker-wrapper.two-months.no-gap .month1 .next,.date-picker-wrapper.two-months.no-gap .month2 .prev{display:none}.date-picker-wrapper .week-number{padding:5px 0;line-height:1;font-size:12px;margin-bottom:1px;color:#999;cursor:pointer}.date-picker-wrapper .week-number.week-number-selected{color:#49e;font-weight:700}PK     ’ŠU]f±x¿$  ¿$  3  assets/vendor/date-range-picker/daterangepicker.cssnu „[µü¤        .date-picker {
  width: 170px;
  height: 25px;
  padding: 0;
  border: 0;
  line-height: 25px;
  padding-left: 10px;
  font-size: 12px;
  font-family: Arial, sans-serif;
  font-weight: bold;
  cursor: pointer;
  color: #303030;
  position: relative;
  z-index: 2;
}

.date-picker-wrapper {
  position: absolute;
  z-index: 1;
  border: 1px solid #bfbfbf;
  background-color: #efefef;
  padding: 5px 12px;
  font-size: 12px;
  line-height: 20px;
  color: #aaa;
  font-family: Arial, sans-serif;
  -webkit-box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
          box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
  -webkit-box-sizing: initial;
          box-sizing: initial;
}

.dp-clearfix {
  clear: both;
  height: 0;
  font-size: 0;
}

.date-picker-wrapper.inline-wrapper {
  position: relative;
  -webkit-box-shadow: none;
          box-shadow: none;
  display: inline-block;
}

.date-picker-wrapper.single-date {
  width: auto;
}

.date-picker-wrapper.no-shortcuts {
  padding-bottom: 12px;
}

.date-picker-wrapper.no-topbar {
  padding-top: 12px;
}

.date-picker-wrapper .footer {
  font-size: 11px;
  padding-top: 3px;
}

.date-picker-wrapper b {
  color: #666;
  font-weight: 700;
}

.date-picker-wrapper a {
  color: #6bb4d6;
  text-decoration: underline;
}

.date-picker-wrapper .month-name {
  text-transform: uppercase;
}

.date-picker-wrapper .select-wrapper {
  position: relative;
  overflow: hidden;
  display: inline-block;
  vertical-align: middle;
}

.date-picker-wrapper .select-wrapper:hover {
  text-decoration: underline;
}

.date-picker-wrapper .month-element {
  display: inline-block;
  vertical-align: middle;
}

.date-picker-wrapper .select-wrapper select {
  position: absolute;
  margin: 0;
  padding: 0;
  left: 0;
  top: -1px;
  font-size: inherit;
  font-style: inherit;
  font-weight: inherit;
  text-transform: inherit;
  color: inherit;
  cursor: pointer;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: transparent;
  border: 0;
  outline: 0;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";
  filter: alpha(opacity=1);
  opacity: 0.01;
}

.date-picker-wrapper .month-wrapper {
  border: 1px solid #bfbfbf;
  border-radius: 3px;
  background-color: #fff;
  padding: 5px;
  cursor: default;
  position: relative;
  _overflow: hidden;
}

.date-picker-wrapper .month-wrapper table {
  width: 190px;
  float: left;
}

.date-picker-wrapper .month-wrapper table.month2 {
  width: 190px;
  float: left;
}

.date-picker-wrapper .month-wrapper table th, .date-picker-wrapper .month-wrapper table td {
  vertical-align: middle;
  text-align: center;
  line-height: 14px;
  margin: 0px;
  padding: 0px;
}

.date-picker-wrapper .month-wrapper table .day {
  padding: 5px 0;
  line-height: 1;
  font-size: 12px;
  margin-bottom: 1px;
  color: #ccc;
  cursor: default;
}

.date-picker-wrapper .month-wrapper table div.day.lastMonth, .date-picker-wrapper .month-wrapper table div.day.nextMonth {
  color: #999;
  cursor: default;
}

.date-picker-wrapper .month-wrapper table .day.checked {
  background-color: #9cdbf7;
}

.date-picker-wrapper .month-wrapper table .week-name {
  height: 20px;
  line-height: 20px;
  font-weight: 100;
  text-transform: uppercase;
}

.date-picker-wrapper .month-wrapper table .day.has-tooltip {
  cursor: help !important;
}

.date-picker-wrapper .month-wrapper table .day.has-tooltip .tooltip {
  white-space: nowrap;
}

.date-picker-wrapper .time label {
  white-space: nowrap;
}

.date-picker-wrapper .month-wrapper table .day.toMonth.valid {
  color: #333;
  cursor: pointer;
}

.date-picker-wrapper .month-wrapper table .day.toMonth.hovering {
  background-color: #cdecfa;
}

.date-picker-wrapper .month-wrapper table .day.nextMonth, .date-picker-wrapper .month-wrapper table .day.lastMonth {
  display: none;
}

.date-picker-wrapper .month-wrapper table .day.real-today {
  background-color: #ffe684;
}

.date-picker-wrapper .month-wrapper table .day.real-today.checked, .date-picker-wrapper .month-wrapper table .day.real-today.hovering {
  background-color: #70ccd5;
}

.date-picker-wrapper table .caption {
  height: 40px;
}

.date-picker-wrapper table .caption > th:first-of-type, .date-picker-wrapper table .caption > th:last-of-type {
  width: 27px;
}

.date-picker-wrapper table .caption .next, .date-picker-wrapper table .caption .prev {
  padding: 0 5px;
  cursor: pointer;
}

.date-picker-wrapper table .caption .next:hover, .date-picker-wrapper table .caption .prev:hover {
  background-color: #ccc;
  color: white;
}

.date-picker-wrapper .gap {
  position: relative;
  z-index: 1;
  width: 15px;
  height: 100%;
  background-color: red;
  font-size: 0;
  line-height: 0;
  float: left;
  top: -5px;
  margin: 0 10px -10px;
  visibility: hidden;
  height: 0;
}

.date-picker-wrapper .gap .gap-lines {
  height: 100%;
  overflow: hidden;
}

.date-picker-wrapper .gap .gap-line {
  height: 15px;
  width: 15px;
  position: relative;
}

.date-picker-wrapper .gap .gap-line .gap-1 {
  z-index: 1;
  height: 0;
  border-left: 8px solid white;
  border-top: 8px solid #eee;
  border-bottom: 8px solid #eee;
}

.date-picker-wrapper .gap .gap-line .gap-2 {
  position: absolute;
  right: 0;
  top: 0px;
  z-index: 2;
  height: 0;
  border-left: 8px solid transparent;
  border-top: 8px solid white;
}

.date-picker-wrapper .gap .gap-line .gap-3 {
  position: absolute;
  right: 0;
  top: 8px;
  z-index: 2;
  height: 0;
  border-left: 8px solid transparent;
  border-bottom: 8px solid white;
}

.date-picker-wrapper .gap .gap-top-mask {
  width: 6px;
  height: 1px;
  position: absolute;
  top: -1px;
  left: 1px;
  background-color: #eee;
  z-index: 3;
}

.date-picker-wrapper .gap .gap-bottom-mask {
  width: 6px;
  height: 1px;
  position: absolute;
  bottom: -1px;
  left: 7px;
  background-color: #eee;
  z-index: 3;
}

.date-picker-wrapper .selected-days {
  display: none;
}

.date-picker-wrapper .drp_top-bar {
  line-height: 1.4;
  position: relative;
  padding: 10px 40px 10px 0;
}

.date-picker-wrapper .drp_top-bar .error-top, .date-picker-wrapper .drp_top-bar .normal-top {
  display: none;
}

.date-picker-wrapper .drp_top-bar .default-top {
  display: block;
}

.date-picker-wrapper .drp_top-bar.error .default-top {
  display: none;
}

.date-picker-wrapper .drp_top-bar.error .error-top {
  display: block;
  color: red;
}

.date-picker-wrapper .drp_top-bar.normal .default-top {
  display: none;
}

.date-picker-wrapper .drp_top-bar.normal .normal-top {
  display: block;
}

.date-picker-wrapper .drp_top-bar.normal .normal-top .selection-top {
  color: #333;
}

.date-picker-wrapper .drp_top-bar .apply-btn {
  position: absolute;
  right: 0px;
  top: 6px;
  padding: 3px 5px;
  margin: 0;
  font-size: 12px;
  border-radius: 4px;
  cursor: pointer;
  color: #d9eef7;
  border: solid 1px #0076a3;
  background: #0095cd;
  background: -moz-linear-gradient(top, #00adee, #0078a5);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
  color: white;
  line-height: initial;
}

.date-picker-wrapper .drp_top-bar .apply-btn.disabled {
  cursor: pointer;
  color: #606060;
  border: solid 1px #b7b7b7;
  background: #fff;
  background: -moz-linear-gradient(top, #fff, #ededed);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
}

.date-picker-wrapper .time {
  position: relative;
}

.date-picker-wrapper.single-month .time {
  display: block;
}

.date-picker-wrapper .time input[type=range] {
  vertical-align: middle;
  width: 129px;
  padding: 0;
  margin: 0;
  height: 20px;
}

.date-picker-wrapper .time1 {
  width: 180px;
  padding: 0 5px;
  text-align: center;
}

/*time styling*/
.time2 {
  width: 180px;
  padding: 0 5px;
  text-align: center;
}

.date-picker-wrapper .time1 {
  float: left;
}

.date-picker-wrapper .time2 {
  float: right;
}

.date-picker-wrapper .hour {
  text-align: right;
}

.minute {
  text-align: right;
}

.date-picker-wrapper .hide {
  display: none;
}

.date-picker-wrapper .first-date-selected, .date-picker-wrapper .last-date-selected {
  background-color: #49e !important;
  color: white !important;
}

.date-picker-wrapper .date-range-length-tip {
  position: absolute;
  margin-top: -4px;
  margin-left: -8px;
  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
          box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
  display: none;
  background-color: yellow;
  padding: 0 6px;
  border-radius: 2px;
  font-size: 12px;
  line-height: 16px;
  -webkit-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
  -moz-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
  -ms-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
  -o-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
  filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
}

.date-picker-wrapper .date-range-length-tip:after {
  content: '';
  position: absolute;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid yellow;
  left: 50%;
  margin-left: -4px;
  bottom: -4px;
}

.date-picker-wrapper.two-months.no-gap .month1 .next, .date-picker-wrapper.two-months.no-gap .month2 .prev {
  display: none;
}

.date-picker-wrapper .week-number {
  padding: 5px 0;
  line-height: 1;
  font-size: 12px;
  margin-bottom: 1px;
  color: #999;
  cursor: pointer;
}

.date-picker-wrapper .week-number.week-number-selected {
  color: #49e;
  font-weight: bold;
}
PK     ’ŠU]t¤Ñ×Ü  Ü     assets/admin/fonts/Rank-Math.ttfnu „[µü¤             €  0OS/2Ñ.  8   `cmapïóß­  4  ägasp     Ô   glyfÜ…R  è  wDhead-c¦j   ¼   6hheai   ô   $hmtx�Ì {  ˜  œlocaÁß©     Ðmaxp t      name™J	û  ~,  †post     ´          HŽ«_<õ 	     ãë‚õ    æZÞ}  ÿû                                         g    g                       ÿ�   ™Ì   �™Ì  ë 3	                               @  ô…                                                                   Ë                                                                                                                                                                                                                                                                         {                       È   ® €  .   é
ê ê.ê5ê:êCêOêZê]ê`êgêpêvêƒê‡ê�êšê ê©ê«ê³êµêºêÄëjëpësë—ë™ë�ëŸë¤ë¬ë´ë½ëÈëÎëÒëáëèëêë÷ì;ìVìdìgìpìsìvìxìì†ìÉìçìëìøííí5í:íMídíqísíƒíŽí‘í•í¥íÁîúï`ïÞïîð¨ó5ó8ó;óEóÁóÐóØô;ô‡ÿÿ      é ê ê.ê5ê:êCêOêZê]ê`êgêoêvêƒê‡ê�êšê ê©ê«ê³êµêºêÄëjëpësë—ë™ë�ëŸë¤ë¬ë´ë¼ëÈëÎëÒëáëèëêë÷ì;ìVìdìfìpìsìvìxìì†ìÉìçìëìøííí5í:íMídíqísíƒíŽí‘í•í¥íÁîúï`ïÞïîð¨ó5ó8ó;óEóÁóÐóØô;ô…ÿÿ ÿãïâÜØÐÅ»¹·±ª¥™–�…€xwpokb½¸¶“’�ŽŠƒ|ukfcUONBÿåØ×ÏÍËÊÄ¾|_\P<+ êÞÝÎÄÂ¿°•]ø{l³'%#Ÿ‘Š(ß                                                                                                                                                                                       ¶`ùuª	Ý6•…bn¸	E
6
 {ÌJÊ=ÄTá¿«BÜr	(ª8e2´6†Æk'›ÍÝJ�üä ²!„"L"¸#X$$ë%n&{&è';(u(Î)Ö*K*À+j+ð,Š-V-ÿ.”/)/s0
1W1ß2Á3m4A4¿5B5�5ð696•7l8�8û9u:p:Ù;$;¢            9            9            9  [ ¤‘p D a o  2#"&54&##"#"&55&&54632332654&''&&54675463&'&6762''#!"&5&"3!265ö)*þ—

V=V

6&þ&6{	þþì�&
	)*
&	*)		a
 ÿ 
þÃ&66&=Âþ•k  º XFŒ    : X q  4632#"&57"32654&3'47667632"'&&'&&5%"276676654'&&'&#667#!"&773!26''vQ89QQ98Q‰,, ,,!þûH/0670/H. EDE  .)%$7'A@'7$%*¾

F56þJ65G		8
¶	9…9PP99PP9L, ,, ,þ’"600GG006G€45QQ54€GÉ6%$*<o01KK10o<*$%6ýÔv.^^.v_^   � š\f D Z d r  4&#"##"&54&#"326556654&''&&54633232654&'5!232#!"&546354&#!"3!2654&#!*)þØ®&6
&66&ýì'66'ÌþRýÍ;
**	
&
**	
&+6&G6'þ�&66&&6£GG>þqp  U U««   7 T  32654&#""&554632"327667654'&&'&#47667632#"'&&'&5Ú&XNNt!""!tNNXXNNt!""!tNNXþ•cBBKKBBccBBKKBBcŽþ¿µµ^"!tNNXXNNt!""!tNNXXNNt!"þUKBBccBBKKBBccBBK    Æ : 
     %%%75#7# ©þæþéþ¼.4üÆÌ
ÖÓÇþ@ÖÖø/´v‡6}wÄ.Uy%ý÷~‘þYZo    áï ?  !!#"'&&'&547667632170'&&'&#&327667656&1Øþ5IY678FAAbaAAI9-,?]W@?Qk\[‡'&$%†]]rdTUz""	-ˆG33B_BCOMBB`%a3))‰ZYa^YY‹+* !vTSe*0  	  îí   < O a o } � ¢  %#"332654&##"332654&#54&#!"333265463!2654&##"&5463!2!"%232654&#""326554&"326554&"#"32656&#"&54&#"32654&#��ñ}}ä7(ý¯'87(˜ÄýÝ˜Qþ~&8ˆ4'J%6ý•5&K¨›'87(ý¯'8½^þ�Q›7')%6k||ã}}å4'@%6  S Ãä + / 2  &&'&&2232676676654&'!!º	ý
	ŠŠ		á	üã�ýè…†%�
þ{þ{	�			vþŠvüÊv    O ±  E  !"01#"3!2654&####"&''&47762326554632Ùý‰OÅ²wNO�FŠŠ!F�)&±,-v;;;þÅþ(+sG!Š!Š!F@NN      Ë  D Q y – ¥ ²  &&#"##"'&&'&547667632#6671&&#"3276676776654&'1#"&54632#0011"&'1&&#"327667654&'##"&551"&54632166321#"&546321"32654&#²
''`77<WMLr!!!!rLMW2"$T,j]]‹)(()‹]]jJCDu// Œ/!!..!!/
-C.MCDeeDCMMDDe>4¬8 FddF 9ªþ›)99)(99(Q2)*;!!rLLWWLMq!!)((‹^]jj]^‹((H22<(!//!!..!m;,eDCMMDDeeDDMOŠ3þ_rPQqþÖ*&>,,??,,>   % {³… 4 i ~ Œ –  676676632'&766776&'&&&'&&#"6&'&#"&'&&'676&''&&6773267667%#"&55&&54632'"332654&#32655#u<++f67f+%8E~
G@,3yA@y33Hï<++f67f+%8E~	G @,3yA@y33HþÕ- -N76NL))))	e4Z!!##!L,'G~72X!'))''k>Ê4Z!!##!L,'G~83W"'))''k>! -- 8"6NN6"8²))))Ê		  « Xí " 8 ‰ �  &&##333!265&'&&'&!5'&&''#46766322654&##4&#54&#"#54&#""#"33#"3333265533265526532654&##5353£#P+>r-:A&T:</!!PþÐ@/AO52%`6$CFOzBCð›Å'%0‰Lþø9UyV/,+M üžŸH0@q)!(ƒM%%%%CCp››   Ó -ë   ) 9  %"32654&#"332654&7!"3!2654&#!"&5463!2  !! ``”þ`&77& &77þ` û! !!p€6'üà&66&"&5ü…   " Ýë   - = M l  74&#"326!26554&#!"'463!2#!"&53!26554&#!"7463!2#!"&5!"3!2#!"3!2654&#[Åš(99(þf)99šþf89))99)þâ)98þâ…üÓ

-üÓ-)9:(â<ýÄ_9()88)':�þ²)99))99) üë8)(9  M ³ë  ' L h r }  27667654'&&'&#"2#"&546"3!2654&#!"&5547667632654&#"327667654'&&'&2&&546"&'7#Æ-''::''-,''::'',B]^AB\\BNDEg#0þÐX:;B,&&99&&,+&&99&&+1ÝX@-Û	Z?K8&&++&&99&&++&&8hY?>ZZ>?YþEfDEN0#0A::WB9&&++'&99&'++&&98Í+?ZþÍÌ(@Z  
  [í¥ " ' + 0 5 9 = Z b j  #54&#"!54&#"#"3!2654&#3#533##5;#=373#332655!3265532!546353#"&5#53#�bþ`&77& &77&ü½  ÖÀÀÂÀÀ8ÀÀÀ8  ý[bí^ü˜# }C{ Z....7&ý»&77&E&7þÞ¶¶¶8µµµµ8¶¶¶¶ ----��ý–’µ#µ’    íâ   ~ Ž ž ® ¾  "32655&&#"332654&#54&#!4655!26554&#!"3!!"#"3326554&##5463!#"3326554&##5!2#"3326554&#5463!2#!&&##"&5546332##"&5546332##"&5546332:ŸQQ±:)þð.- ý¢ -,!þð(;.- [.,! -,![.- .- ]..ý	^ý¢		[[	r[		[	s[		[eý°‹);ž,! .-  .ž;)‹,![.- [ -‹¸- [ -,![.¹‹- [.,![-â  	ýÚ[[		[[	d[		    •ìn  M  3267764'&"4&#"'&"%#"332#!"&5546332654&##"3!26556&#Õ

w	XX	zÑ““	0 ý8".“”*P8Ç8P)u		v			X—þiX			v¨»"./!¼	)»9OO9¹*   •ìm   O  267732652764''&&#"#"332#!"&5546332654&##"3!26556&#s]Sv	x	8““	0 ý8".“”*P8Ç8P)¶]þe“U	w	w	™»"./!¼	)»9OO9¹*   ðí  ) –   "327667654'&&'&#"&54632#%'6654&'766''&&&&'&&'&&554&##"'&7733265546766766767766'4&''&##"&554&'&&'&&'&&#"'766'&&54676&''76766766766554633277)$$55$$)($$55$#(:SR;:RR9Öce	`h	*¦*	][
cg	_h	)¨*]]
vX!
¨	
XKUUKX!
	¨!XKTSKÅ5$$))$#66#$)($$5þ®R;;RR;;R68¡	9	>**@	5�88¡	9	G))J5�¨1	

#JG"	2€0!.€1	

#@		>!		2€.	!
!	,€   3íÊ ! & 6  !"3!#"3!2654&##'!2654&#73#!"&5463!2�üà&56'.RúR.&77þ¼ä/ˆ-Cüà Ê6&þ'6««6'ù&6ü¤¬¬ù   íê   ) > W  !2654&#!"!2654&#!"!"3!2654&!'&&#!"3!2654&#!"&5463!23!2-3þÍ3þÍ²þZ¨Ãþl.'þÄ*+E,,ü»

=	5	¨6©r†+üÀ,,ˆ,ý.@™	
ýx   íê  ( = V  '&"326776655&&''&&557!'&&#!"3!2654&#!"&5463!23!2“††@78?
(2,,2kk7þl.'þÄ*+E,,ü»

=	5	¨2DDMDz''yEMe7b	a7;779e†+üÀ,,ˆ,ý.@™	
ýx  0 }Ð…   1  54&#!'&&#!3!2654&'2!'#!"&5463!3!È(þh
þÃ#00#ú#0Gþ–#•ý0@r³]'2"ý #00#ËmLXý¶`ž 
 ÿûäÃ  7 O r € � ¡ ¯ ½ Ï  '&"32676656&''&&54676632'&"&''&"32676656&'"''&&5467326764''663226554&#"332654&##"'267764'&"3"32655&&'4&##"33263267764'&"Ö…5–5‚D""CÛƒ.0‚0	/$V´„5–6ƒC#"C'%h%ƒ	.		/%/ƒþô•}}M	ij
þÊ¿TT?i		iƒ55B$#C„B$%BÙ„.-ƒ.#0		.ÿ ‚55B#%B„A$&CÚ$$…. -/ƒ0.�}}Š;k		k		þ@}}Œ&ji	   k •ë " A N [  "326767667654'&&'&#"'&'&&'&547667632"32654&#"&54632# SJJn  ((p;<(

(<;p((  nJJS89o)*_?@HH?@_*)o98*GfeHHefG0EE00EE0ëkGGP@QQ FG++FF¡QQ@QGGjügBAšNO:E==[Z==E:ONšAA“eHGfeHHeþàE00DD00E    íë  9 G U c  "327667654'&&'&#"'&&'&547667632#!"3!2654&!"3!2654&!"3!2654& fYZ…'&&'…YZffZY†''''…ZZfZOOw""""vPOZZOPw"##"wOPZ¦þ´Lþ´Lþ´Lë&'…YZffZY†''''…ZZffYZ…'&ü`#"wOPZZOOw""""vPOZZOPw"#’ÂÀ  ( Öì * 5 : E Y  4"5&&'%&"0#3267%6654&'%6632%7%7&&5447%%7326557Ã	þ›1þ™			"ge!	
þ%bœþ”vþ†ªp þ‚‚þ�þ�¥¤¤

¤þb 6³³6 ž ˜¡K¶6þ§¸N¸Nþ±œ½þ/´4³ÐP–±Rþd   L ¸ë & I a t �  !!7667676'&'&&''%"&'&&&546763663236766'&&'&&&'&6762!'576676676676632Špnþ”å�
é!/+4!6k’scABIcþë0*!-'64+	!0Ùý8A:'%K32 =5,)!æþZqQQj"
	!	€€/�€
#

?áá	&%#
[I
d¿íE’''I&,
E
Pþ(™®($(&		$%"Y?   íã  - D [ „   ¬  265546332654&##"3%#"332326554&#"##"3326556&##"&554&#"332654&#4&'&'&&'&#"32766767665"'&&'&'67667632'32654&#"0
‰‰*s‰‰	,-
‰‰*ý‰	*ŠXO005500OO005500OþÂ,((DD((,,((DD((f""""òŒ	*‹ð
‹�*ý,Œ	*‹¸
ŒŒ*ª
..

..
}'&''}""""    ;îÂ % ?  %%676&'&'&&#"326732676&'%"&'&'&47676632âþæ,57ŒNN‹7997ŒNL‹6		ý´Bx/11/xBBy/11/ypã9CCˆAA47;;78HG•GH87;85æ…3.1====0.3101====001  . +ÓÐ   %&"7%6'76&'»þß„„þà	Ñ12Ò	‚,þë+ØþÑ
ŽŽ/Ø    îë + b  7"&'&&7'&&7667%76632''#6776227665&6776&54&#%&&''&&#""ø
	+»	ux	½-$êê¨Â-ð	
ð-Àþóxxþõ#Á&)øö*&Âþï#€€EÇþëƒ‚Ç*
üþ
+  ˜ jí $ . 9 D S a o  #54&###"333!26532655&&#%46332#463!2!5#!"&5!'26554&#"3326554&#"!26554&#"+›$¦$›$G1x1G#þ}¦°ÖWý )%þŠ%øý†þþv:$#:#uýâ2FF2!u!::;XXýP&& ýàpÒÔÒÔÒÔ   pî�   # / O Z k  2654&#"2#"&5462654&#"72#"&546#"&&##"3!26554'&&'&#!546332!!54&'66332HIiiIIiiI2HH22HHÒ>ZZ>>ZZ>(88((880&F d:¤.)*={E..4Ûþ8dG¢FepþÈ9 )$#66eHHeeHHe"E00EE00Eþ�V==VV=<Wð6%'46%%6þí.7>))/(4..EþãuGddGuu&6#$) 	  íè   # / I i † © Æ  2654&#"72#&546%2654&#"72#"&5467!"!"3!2655!2654&!2'&&''&&'&&&&'5&63!2'&&''&&'&&63!"&55667663267667667#!5623267667627#r%65&'54&¯%64'&56%sþ¸0Cþ»&77&x&7-0CEþˆJ"
1*!	-#þHx1**Jxþˆ6 	%=	ˆþÓ
 %=	
$h4&%44%&4}Í4%%55%%4{»C0Õ6'þ0&77&íC0 1D8#ò
	 Ó"þ¸þø	
	IýèA	)ƒH–(m$   ìí  / S  &&#"326764'"'&&54676632%&"#"3265533267764''Ëþ€((þ€€((€!!&þ€*þ€	€€þj			XÝÁXˆˆM€þ€''þ€€!X!rþ€€€	þ€*°			XˆlX	ˆ	‰   îë     ! % , 4 < C [ ^  !"3!265&&#533#5!!#533##532%3#546353#"&5#53'&&326776654&5pý 4GI4à3IIýT«­­­­ã þ`…­­­­­­­h)üÛh«'C­j'#h­)þñ˜˜¹ˆëG4ý 4II4à4Gþ0µµ8³³Ðü˜Ðµí³@h«''­j'üÝh­)E­h)à]¸\v¤R 
  ˆív + E V { Š ™ © ¹ Ç Ö  277326766''766'&&/&&#"76677'&"76&''7%!"3!2654&#!6654&#"32655!3267&&#"#"&546732%3#"&'566356632#"&5#5&&54632#'!"3!2654&#"332654&#£:9.@@	18
	
ÅüÀ.- @..šýêQ::QR9



9R¯	
!2cü«Z0#!2VS^1"	ÈþE»væåF@@-
;		;
-2	þ, ý«.,!U ,ýL	9R>Q::Qþ½Q:	hD0##0Hý˜Z1"	"1Uàh   Pí® + ; U e p  !"333265!3265!326532654&##!"&5463!2&&#"32677766''%#"332655&&##532�üà&77&:3&77&%üà ýÙ	pWV
o664II((®6&þ˜'6þà þà þà 6'h&6þ<h,ä°°
äêJ3*3J§(´(*   Ãì=   &""'&"326766'å	ý¸	þÞ	"	
H	5ýÉþæ	

	7	   íë # @ ]  0"3#54&#"#"33326553265&&#"327667654'&&'&#"'&&'&547667632#ª��Œ�
ªfYZ…'&&'…YZffZY†''''…ZZfZOOw""""vPOZZOPw"##"wOPZ����
Î&'…YZffZY†''''…ZZffYZ…'&ü`#"wOPZZOOw""""vPOZZOPw"#   åì   9 U  "32654&"&54632%&'&&'&#"3276676764"'&&'&'67667632 /AB..BA/!!!!Ï'55~FGJJGF~55''55~FGJJGF~55'þA?>o0/$$/0o>?AA?>o0/$$/0o>?pB..BB..B¨!!!!K?11EE11?	>12DD21>	î;*+65**;;**56+*;   0 fÎš 3  %"&'&&'&&'&&54676632276676632# 
6Ew*0-&$$_6(I! J'6`$$%,0*wF6
f-;i2:m;8f'&*
*&'f8;m83i;- v ˆÐ  .  326514&#"1#4&##"332#"332654&#µ$%%$¶P%HHPØ’%%%%ü¹m&ý•    ƒí{    1 B P ^ l z  #"332655&&##"&5546332#"332655&&###"&5546332!2654&#!"!"3!2654&!"3!2654&!"3!2654&Ý�$$�$#‹��$$�$#‹�èýúýúýúýú{#Œ##Œ#È��þ×$�$$�$ÈŒŒaUþœ�  	  0íÎ    . ? P _ o € Ž  #"332655&&##"&55463327!2654&#!"#"332655&&###"&5546332%!"3!2654&##"332655&&##"&5546332%!"3!2654&»k$$k$$jkØ8ýÈÑk$$k$$jkýÈ8üëk$$k$$jkýÈ8Î#l##m"¦kkÇ#k$$k#¨kkRþð$k$$k$¨kkQ    jí˜ ' 4 @ N  &&&&#"3265%&&#"32654&'"&54632#%"&54632467%25Ó ýÅ*2@[YBBZk2A[ZBBYüÛ+87,-78,¤,87-,78ýÍ
=ý•‚
+/þB./AA/v0þÝA/.BB.Dý $%%$)%%%%P
+	�0•   íí    !4&#"!"3!3265!2654&#ÐþMþKµ²µþKþM³    íë  9 l z  "327667654'&&'&#"'&&'&547667632#&766'&&5467663265546766'&&'#"332654& fYZ…'&&'…YZffZY†''''…ZZfZOOw""""vPOZZOPw"##"wOPZ#B
*+! $34
F/ë&'…YZffZY†''''…ZZffYZ…'&ü`#"wOPZZOOw""""vPOZZOPw"#÷>"

'-#<7#ff`7/E	ýÑ  Ì 4î ! 5  %"&'&&7&'&676676#2&'&&773“)‰	r
2�		þŒ&Pƒ		/þ¬€
]	þ—#þ Íþ¸Ð!	Tþ,   …ð{  + : F  &&#"3!2676&'#!"&'&676632%26554&#"3"32654&Òþœ; "9þœB'Å(A'&ý;&

a##aþU`ãþN##((##Nv-äþ,¶³µ5   ìí &  64'&"&"3267326764'(»			þEþC	½þE		½»þF ½	þC»			þEþC	½þC	½    nì’  2 H  !"333267732656&#!"'&&#!"&5463!2'&"3267764'&"’üÜ%65&ô†‰õ%65þþ~{ÿ #þÀ©=			P¿’5'þ2%6•–5'Ì&6ýÖˆˆÎþ2J¬=			P¿	   ,ìÒ = X ¦  "&'&&'&#"&&#"7762326766556656'&&'&''&&#"&'&&55762"'""'54&#"&"54&#""54&#"&54632766'&454632676632#*(;'&,+&';&)#$5_G)9NœN: G_5$#T	9)S))S)9	rNœNq$h2f3h9RR9-`EDa	/:QR8		-&'99&&,	7%%*Kq
ó%

&ópK*%%6ý`

UU	A‚{{ƒ~U<<V	GeeGV<<T 
 > Áë  " * 2 : E P { ‹ �  '&&#!"3!2656&'#"&'!#"&'33#"&'33#"&'3%663!2!746332#!4&##"#"&53267326732673267#"3326554&#53¾ƒ	"þ"	ƒ*ò*ýR-,m-,™Ó,-™Ò-,šýnøkýi*
P	pZþN*P*`	& 78  87 !77 (
šQQFFÞèèý‹**s(((((((((õ¾¾ü 
	
þø
**þø
óþ
RQQG   ‚ ~í 4 B Q ` € Œ š  '&&#!"332654&##"&5463!2#"32654&'32654&##"!2654&#!"3!2654&#!"3"32677276655665&&#2#"&546'&"53267Z�"þp,<<,ÎÎ��	*ýÛÝÝyþ‡yþ‡>3K*)J5**))8M†=+üö+=‡ý]
*¤)BŽŠIJ52��05J8*))*þîPP    Wìª  + 7 T p ‹  !"333267!326732656&#"&54632#!"&546327&&#"!&&#"&&5463!2"676632326766'&&#!"676632326766'&&}ý-AA-='&>6>&'=-A@/ýx&$$%%$$$�A-+BþÔA,+C ûýBCw#

\56[
!tDCw#	
]54]	"sªA.þº.A!-,"!-,"A.F.AýÈ!""!!""!ƒ(76)(76)F  þºû@7	
+22+	7@@7	
+22+	7@   Ðì0  1 B  6&'&"326766''&47%'&&3267764&32676&*ÚÚ	ÚŠÚ
ÚÚ
Úþt°
°
 	ô9ö÷%ô	
õóõ8ýõ	    @íÁ 6 B T [ i  %&"326732654&'566766576654&'#"&54632%5232277&'&'!57'&%%Úþ0
þ0€	3..R&&$$F#",>++?-"; 	€ôýøŽ101j;<GD)Rjx:eþƒ}}Å¨¨	/þØ	0
7%,>>,$8
>'.	ý’äþe3ö
	ûÿ -	%Š‰‰G 	  ’îm   . < K Y g u ƒ ‘  !"&&#!"3!32655!265&&#"&5463!2!%#!463!232654&##"3!32654&##"#"332654&!#"332654&#"332654&!#"332654&¢þ“þ“++‡‡+,ü¼

o	þyWþz
m
ý'{{Ì||‰{{þ){{{{À{{m	
,ýã+++ýˆ
	ýØ
(	ýã�P“    îí Q ] i v �  &&'&&&&#"'6654&#"32673332654&#""'6654&'73366766'%"&54632#"&54632"&54632#&'&&'&6766732ë*'
ŸL.$?ˆA.-AA-�dE$!*V<<UU<%-8¨$'ü˜ !4&%44%&4Ó/CC//BB/Ã	


6'(]$.{.AC-.A	�#EdˆC*<VV<<U…T4	b,  ý`%44%&44C./CC/.C%		

   ëì  + J Q  4&''&&'&&'&!"3!26576657667#!"&5463!3376677'7ë;	sýË1EE1o1Enþ*‰-0`þÏ#$ý‘%$ÿü	=¾ý3`@.M;	tE1ý’2EE28nþi/Š0^þÑþÔ%$p%ûº?	üþ „_@/  	  vîˆ 4 ` x … ‘ � © µ Á  !"3267732654&##""'&&5463!23265&&#&&'54&'&326766552766'4&'&&'&'7&&'32654&#"3#"&546324&#"326'4632#"&2654&#"72#"&546Žüä'8�9A	•	
8'8J+¦				¦D"
“		��$>K(ýâ7''87('7ƒ66((66((6„#&87'(56'ˆ7'ýÆ-	`c8ýó'6ý°'-
ƒ† 
0:qr! x&87''88''87(&88&O7''88'&8…   { …ë  $ ' D I  #54&#!"3!265576654&'#522'3!54&##463!2#"#7'3^.E1þ82E
ó.,Pp8þ3¦¦fþÒß%Æ$+R	-8p^1EE1ýáù,¤†PýW«Ýï$%ýæ¤jp{þ…   C ½í % 9  '&&#!54&#"#"333265!26776&#!"&55463!2­Pþ€à**ß‚
P:Pýf	
˜Pëgbc*Ï*þ"Þg2$f
Ï	f  	  0ëÐ & = N h y �   ¹ Ê  '&766'&&3267665&&'3267766'&&'&''&32676&'2676&''766'&&37267766'&&7732676&''&"32676&''&'&326776654&267766'&&Â@
	8þeþe8	
@
§§

ýäLL	
;;
	Hp	
pí
&%	
KKep

p
ì;;	LK
çp
p
FK	
%%
KþÌp

p
–(
	#þû#
	(þö
..
	%%	
pG	
F	X	
	/.žF
	G
‹%%
..
	9F
G	
Œ.
		.
äF
	G	   íë    . <  !"3!2654&##!"&5463!2!"3!2654&!"3!2654&�üà&55& &77&%üà ?ýìýìë5&þM'66'³&5ýò³ýj¯    0íÎ - L j ‡   ¹  #"&''4'&&'&#"32672653!26554&%#"'&&'&5532766767#&7#"'&&'&5532766767%2#"'&&'&54766763#"'&&'&553267&&#!"&546332332¦Œ  iBCEDCBh! ! jBCC0)v**þ+3I::R##S--...-R##•$ÕR::HI::R##R-....-R##þÅH::SR::HI::RR::IX+G;:R##S--.1Ó	þˆ�#Œ	ˆ+}%%
		
%$þL$'

**Í(2
	6bã	

	H³								ý—
	6Uµ+	,Í   îæ ( 3 M  "##4&##"#"&54&#"3!265&&#46332#&"76232676&'{ž6'y'6Ÿ8(p'9þ%yÃ>þU8þW

«
	¬KþL&77&þãµþK'99'µþþãpþí	
þí   =íÂ $ / : W  #54&##"#"333!265326554&#%46332!5463!2!5#!"&5332655!326553p«C-ª/A«4IF1–1FI4þ!¨!þèþÚ(à)ü—=&ýj$ÅÅ8.BC-8J3�þÐ1EE10�3J8""88µ*(‚‚þ$&0ccccþÐ    ì`   # / ; G a y  "32654&"&546327"32654&"&546327"32654&"&54632!"32677663!2656&#!""'&&5463!2%)::))::)Ê)::))::)Ë)::))::)Ÿüæ'9�	H(88ý¸�


	’;)(;;();��;)(;;();��;)(;;();�]8(þ ,Q9'�(8þQ
þc    ãï & + 6 D U  &&#"3326766''3267665&&'7'54633#"&5##"&'3%'%%6³7ýËq6N6*G'6(ýØØÜ, XX ,â	BH=r þíÒ‹M6ô-Eþã ë€1"2§5þ 5–þ»ô,þv,þm	þÿû
	DD	
ýÜ  k ˜ë    1 5 D S a o  !"3!265&&#!"&5463!2#"332655&&##5332654&##"332654&##"3!"3!2654&!"3!2654&:ýŒ&57&s'66ýŽt~¶¶��þ@zzzzÝþ#Ýþ#Ýë5&üà&77& &5ü… üàþÝÞüÄÓšÓ    ˜íj   * P \ w �  !"3!2654&#32654&##"#"332654&&67663265546766'&&"32656&!"32677623!2654&##!"&'&&5463!2êþó
þó{{ÚÐÐO/


	,'fý1E	
º82EG1@%ýÇ
¸	%ê$Ó¶G
			
	&.*þê˜F1ýë 	kF1m1Gþ$k$%þ‘    îë  V b n z  !"3!265&&#!"&57326732655732654&#"&&#"'54&#"463!2"&54632#"&5463274632#"& üÀ,,!@-.
üÀ�
%N5&&5x%66'%6q#W4'&5k@ýX Åë,üÀ.- @,üu2x-
&65'n
5&'35&h
5&65'[ÅüÀÓ[¯  C ¿Û ( 6 C O [ g  &&#!'&&##"333!2654&#!"&5'!26776&'#!!2"32654&#"&54632%"32656&"&54632¨%ý»†€#(ýãû 41
%1þBýø'78&'88'w(78'&88'EHý·%o)ã(Bã+	ýÃ8('99'(8††8('99'(8†   è ò f  %#"&'&&546766#"&'&&5463232676676654&''&&''&36766'4632#8o%(*0-+f27>4!=%.*&M !""Z.+S *')b4*#%a43Za:þJ!:; pþ�)(µ+F
?&ýþ'L" K*�þr4a&&)   ­íR   ,  !"3!2654&2"'%663!"&53267%�üà&77& &77&
þq

þq
 üà€€R7&þ'66'ë&78ññýÌÐééþ0   K ·ñ 2 ^  &&&'&&'&7632676676&'"'&&54676637322766'4&'732 "­""Y99F7--Hr	þ„&
2#3þ�þÚ{�	•>$##4	%
þœ
þê

i	C 6þ»þ–f"/	
+!   íë 9 [ w “ Í ä  %&'&&'&547667632766'&'&&'&#"232676&'2676&'&&#"326766'&&5&63"327667654'&&'&"'&&'&547667632%&'&&'&547667632766'&'&&'&#"32676&'%'&"3267764'&"sB66N""vPOZC??k))	//yGFLfZY…'&X==K	�&

6Jh	
G2Ý912IJ219821JJ218-'';;''-,'(;;'(þ„%*L32:)&'B  O/.1E==[4$$-¥o-	@�		c))lAAFZOOw""I34>	F:9S&'…YZfOIJz..

iI8
'1GJJ219821JJ128912Iþ;(',-'';;''-,'(;ºB'&):23L*&.$%4[==E1..P 	eo-@‚	  í ý 0 m  %#"&5#"&5546335476676332##3###21306546330255744'0&##"&55463306554&1#"##017C}!g!!d8'(0`""E[	 J!›}dv(B^HW€‚$}#n$e6--@$‚#\
mþ‚%òþh›kr(€fU‚o 
  íë   # / ; G S _ ƒ    "32654&"&546322654&#"72#"&5&6"32654&"&546322654&#"72#"&546#67667654'&&'&#"3!2654&47667632#"'&&'&5f-AA-.A@/   !-AA-.A@/   !þã-AA-.A@/    -AA-.A@/    Mí;11F''…ZZffYZ…'&&'…YZfÐüq""vPOZZOPw"##"wOPZZOPv""þ@..@@..@¦    8A-.AA.-A¦ æA-.AA.-A¦8@..BA-.B¦    þ£..pBAGfYZ…'&&'…YZffZY†''µZOOw""""vPOZZOPw"##"wOPZ    ýû  ' 4 U u  "327667654'&&'&"&54632"32654&#'!"3!27667654'&&'&##!"'&&'&54766763!2 1*+@@+*11*+@@+*1JiiJJii¸####þ 4..DD..5 4.-DE..4Å5$#(ýþ($#55#$( )$#6ë@+*11*+@@+*11*+@þbiJJiiJJi####�D..4þ 4..DD..5þ4..Dý)$#66#$) ($#55$$)   ¾ Bë < q € Ž  04#&&'&&'&"3!26766766776676676&'#&&'&&''&&'&&'&&'&6766766762#"332654&##"332654&(  #S/:/S# 		

	

	"5

	à	D&0&D�ÌË#††B"&/
	/%#AH1$G#$


#K51G:(+?$	

"?-';6''7ýÙ‹    ’ìn   % M S  '&&#"3227766776656&'77!"&53267%326554&#!"3!2654&#"'%!ÞL	
¤		b£ÉOš<þmþUsw6%üø%65&­

þšõ˜M¥b	£
ºNš=påââÝà%66%þ%6VØ  ° Kë  " \  26766'4&#"34632#"&5%4&#"#"'&&'&54&#"#"3!2654&##56766765 &FnMNmnN…M66N16MÐK239922KQ87?ppB89SCC%2NmnMþÐNoí6MM6þÎ/M6922KK229A9:XqqY::A    íë   , 2  &&'&&#"33%667665&&'#7667'7Þ(S+
	ý�
\	lýlèLÏœþ4ôœs'O%3*U)	ý”	þê	_
m		ýzNæÍ�þ5õœr&P'    @íÀ   ) 7  !2654&#!"!"3!2654&!"3!2654&!"3!2654&0 ü`¬ü` ü` þÒý‚~ˆàþèþè   R ³ë 0 4  !"326554633#"3!2654&##3232655&&##3Mýf)8Øh»hØ:)þðzzë8([[ü˜f\](8ü`h  { ˆë 0 4 B  !"326554633#"3!2654&##3232655&&##3!"3!2654&&ý´'8µ]˜[¸8(îpp ýP²ë7']^ý‘m]^'6ýZnü˜   bì¥    V ‘  #"332656&##"&546332&4'&&'&&##766'&&3!267667676676764'#!"&'&&546767667676676676772š4"11"2#00
4

27(»
<!tF<@$		8+G
þÄ$	7		
#Ý	
x0#þ�#00#p#0þ=pþ�ƒ	%
}# #rJþ¢=		+A55P":}§

$^7    bþ� f È  %"'&&'&'&&7663267&&'&67663&&5546766&&546766725476676326676676236#'327667655&676677"&#&&'&67667&'&&#"#&'&&'&'#"&'2J+)*O%&"	
-U&.G%+	 ''Y013<().*M "0((–lmˆ¼-]2{bb‡$$"$?#Db866d--&'#D0

G**c5b
		I3Y388( !0/()<	*%
jhh¤32[-.•^_a


bD	. )*I		-C		
!)#*    #íÞ   . M  !2654&#!"3!"3!26554&#!"&55463!27"#!"&54&#"3!2654&#â<ýÄëþf)88)š)88þfšÚüì9()9¥s9))99))9€ýüÓ/

üÓ)99)-
   † yë  ' ? R  27667654'&&'&#"2#"&546#"3!26556'&&'&!5476676332 ,'';:(',,'';:(',B\]AB\\§Ê923KŽL22¤ý|<()-Ê-)(<K8&&++&&99&&++&&8hY?>ZZ>?YþEK32:žž:23KþS˜.((<<((.˜ 
  Uí« , T d t … � š ¨ ¶ Ä  32654&##"32##"3326554&#"&5546;2654&##"332654&##"&5532654&##5463%#"3326554&##"&5546332!"3!2654&#!2!5463!"&5!32654&##"332654&##"332654&##"û22 .. 	
11!..!òFF!..!FF	44
' .. ' ..
	'		'	…üÀ.- @..üÀ@ü˜@üÀhþ£{z .!1!.	2.!1!.
2	.!Æ!.	HH8. Å!..!Å .þí

Å		¡,!ýD -,!¼ -8	„„	ý	 þ 	~   ¥ð[ C G  &&'&'&&#"10#"103210326767667676674105&&'&Û/!@@ƒ1221ƒ@@!//!@@ƒ1221ƒ@@!/ýºþÿî!//!))KK))!//!))KK))þš*••  { U…«  3  32654&#"4&&'5#".5466732>àe;hBT…L<k�QQ�k<L…TBh;2ZvCCvZ2ÃÈþPI~[Bn›[Q�k==k�Q[›nB[~IDvY33Yv         + 4 V  #"&'32>54.#"7&&54>32"'&477'3766766;#"''&''##&«Cu›X3`+?8€EjºŒPPŒºjjºŒP# ?Cu›XX›uCý…Õ,ÕL¥6HL7s-
«#HI"« X›uC? #PŒºjjºŒPPŒºjE€8?+`3X›uCCu›þ�Õ,Õ›¤
ËóÌ!æ
Îg     ®                 `        6        u                K      
  Š  	     	   g  	   =  	   |  	      	   R  	 
 4 ¤icomoon i c o m o o nVersion 1.0 V e r s i o n   1 . 0icomoon i c o m o o nicomoon i c o m o o nRegular R e g u l a ricomoon i c o m o o nFont generated by IcoMoon. F o n t   g e n e r a t e d   b y   I c o M o o n .                                   ÿÿ PK     ’ŠU]1”¡�ÌL  ÌL  !  assets/admin/fonts/Rank-Math.woffnu „[µü¤        wOFF     LÌ     Ü                       OS/2  t   9   `Ñ.cmap  Ì  §  äïóß­gasp  LÄ         glyf  D  G–  wDÜ…Rhead     6   6-c¦jhhea  @      $ihmtx  °     œ�Ë {loca  t   Ð   ÐÁß©maxp  \        tname  KÜ   Ú  †™J	ûpost  L¸                H�«_<õ 	     ãë‚õ    æZÞ}  ÿû            xÚc`d``a F0ÉÀ ¦‘@:  w   xœc`d``Hgddàa &4  … yxœc`fþÏ8��•��i&Ó†~ÍøšÁ˜‘“0
 	0800|ie3Y j�d ,J   xœca@,D`æÓÄ©Ådãj [6Ö   xœÕ’KH”a†?/¸ÐùiüÎ94 ‘¸§•â²¦M-$IT4pbð	
ƒ
.,,&[$Ø…(Ô²‹Š2‚%^pã,Ì¨ˆœs¾Ï	~Aq3ŽåÒMÐ¦^žÃY=‹W)•£þôŒÊ:bNæ:dnöB†/T·ÊS%™Ÿ/™Ï>.a?—q¹Š«¹†9Ämá>Žò~ÄOø�ñ¿ã¸4IHÂr_bòP†å±<—q™’Y–5ù*[Â²kæš©7�&dÂ¦Ít˜.Ók>šŸFÌžuìYë·eö’­··lØFì€´CvÄÎnï§jR›©í_£®ß-un¥;ë®º‰�ÀN_:­ãKªc}[þÊ÷Ã±¾ÿÐ·'ã›•þ~*—Rô�6(A«4Oïé-½¡Wô”F(F÷(J=ÔMÔN!j¡fªÅ)œÄ×xï`°#Ø‰­ØŒX‡W1ˆ—±Òð°+°‹ð	â0�p®Ã¸à$hPšõ¦þ¬—u\ÏéýRV{÷¼·½7OŒ9ç�sN‘sÚ3ìôô{Š¾ü^Ç”õ2ž         ¶`ùuª	Ý6•…bn¸	E
6
 {ÌJÊ=ÄTá¿«BÜr	(ª8e2´6†Æk'›ÍÝJ�üä ²!„"L"¸#X$$ë%n&{&è';(u(Î)Ö*K*À+j+ð,Š-V-ÿ.”/)/s0
1W1ß2Á3m4A4¿5B5�5ð696•7l8�8û9u:p:Ù;$;¢xœ¥½	€$E™(œ‘wfUefUVÖÝut]Ý]]]Ýut÷}LwÏ}ÁÀ0ÃÀpÌ8È òÀ‘ap¸aaÄ�UDV¼V„‡âÁª¨ë‰²ú³¸¸¬ ¿ëˆëz-ûèJÿ/2«ª«g€Õ÷WwFEÆ•‘_|wD1ˆi0ÃŒaæº'ÌNæAò>r€YÅœÃ\Â0¨4Í`Ðð™t®:šËdÒ¼Z–“&´Ò«9È«�@Ù@pd¤Rƒ‚ù¼“V§éŸËçjuT«X(x>Ÿ×¡b
jêÊ¥N‡z)¨§£?ª†Õcx<Çj¢*ð}¡x"d¨ÃJÐ�'º¨\ÑŠ',Ãcÿµ"£ÓÂËÃè4™…ˆ¬åì@®f¡kÄ€dÛ†ýJ5ðm†Gàra�axXNykR_$ReÕ0à9¹0ýfyÈR°O*†£}’ä1ÎˆÏ@Œaü‰Ã²BÝþj®VË¡å:B<ÿûnÚ&º�á™Ï3ÛÉ¹•Q™cÆ™íÌ¥0ƒ­‰q&ªîÌž;CdDÈ£Ñz­V‡0Ÿ–3£<ü§aîèôeÓÎ-�oš]qÊBU';ã‡;+èLc½ùïÌa>�niŒmÙ2ÖØrSÏÀ@Or` Åab¿nV•kõòÐê€YêIÎFB«B‘Ùd²„ø¾lo]óåãñ©oð¡Éx<ïÓê½Ùâ—d¿<«Öìµµjl^
HÙ0Ðã†!�á#c›7�Ñký@Ò}�}'!(]+—çMøÌ—ËµùC£Õ-áP(¼¥:zhþ5­–í-.»¤<¼ÎâykÝpù’eÅÞlMÓšÿä‰ù–Î:«tÐõœíëéñ�Å0,s;s9“ìxÜÁœÏ\Fç3GaÐä»à0ÓN6[3\­uÁáH8]Ø¬¢…kšÖD
§´�Tš�ã<Òpá/n9AuÂÕ ð§¡D<ÔÇª¨±…ÚË~}2W“)ˆ4•¯Õòè;†jo¥@‚4l~OÐoY,FÂEÉGd^Ty–‚_8Ç]Yv²M
Aê¯åækyûÚ8ÿð<Íš_a_êÀà�3¶�ÙF!� F˜:s*ÌX{Üt~üt¹º 	GÚæ Øˆam ;8�¢8«èù ¦é•óøýzmß¸ñ©t:õŽ�·wÇí»ã±ó¦§×­›ž>/ïŽã÷ºM5ûË~Ïc´ðY'·áÆím'·áÆaÜóu–!ãŒÌø˜ ¬@	—å¬,—µ¸ºUÍ ÝªëÈÒ3,ów	ûûßí/Q	ÅÑh|áëß‘ŒžÕ¾aOþøÇè5qè³ßS»öÊ¯•¬mìÕ(Ûü/þ:ô>ûŒˆ¢D˜W�üùf%Ü¤Ì¿db–LÚp½ìÎeî�æ¹–&ÏÙU´†O$Î¨ÕsSSçÂxbçLM­X©é»,ëôÉ•[.<sç{ò¹Þì�»v]vþ©ÛÞ™N#	�™Ö´häìé™M¦§wÇ¢>_Öç;'hŽ˜&êë»iÇçœuÆ·ô“©ƒ§ž²§Xf‰ñ3ù5y•ñ0Qf³ÉÁó×2w0b˜¬»‚Z(<³äÎŸi­“.Ž‘Öb¢Ë&å–æôLk9‹‹–Ìv-ºÖâ¤K·µ>GsÂIwM¶QdÚìZ×-¬™y·ªë*Æ^Kc4xY©šŸÊ7ê…{5UÕ-}òÕæ÷j–¥á-še_—kà£^SWUm4¯êÚZZwéezéw¶†4µy·/@“ª9U÷­£•4·�ó�¾Ÿ>‹>‘§©è‹>ò|gÙïvŸfi÷×ó}ŸÛTÑ.ÔÕÿEï x‰öÚ�Žÿ\WÛ]òè“íçÓ¦€ŸÂ$ÈWÉËL?3ÄT Ò Žàràþƒ–Ÿð.8­J&è«K JÝŸ"Ÿç¼R³G6Å/J
àföæ›YLIô+ˆÅ¢!á“¼ËqìÂKø�æ/ŽÜˆC8+zXô Ç"$
‚!+¦b_c_£˜’¢Cæ8ÈTEÉ� >:hßŒ.|¤³	Vàß3	f–®xke30á�Î´ §�U	ÅÚV�" ÀÒ£õ:ð� ¸àà¢(òÏÍ›4kÓÓtNÉghxåÆM·Í©*çw³ªÞ¬¤U�»­/gišEþÞÒNL$&ü–n»õðþý—ÏCI>´TTRêÜ¤o£nYúF¨7|È·�¬b¶0W3÷0a>ãÌ:ô\È¼ñZˆÓ2o°¾ë­·1LZÜ“3$:àryxýfi¥L«R²‡Û•­ášÓÆ°ßÍÔÝ&‡¹®’!ŸádÞäP$Ÿß]¯/;}ÃúËRð¹lý†Ó#•0Ò¡ÞSöïÚuK_¡ÐwË®]û×Î¬ºbh(‰1ñ*·¥R¥R*5Ô#‡½ƒ3| Ú0³jO<‘ˆïY5³aÃ*ˆÇWŒ¢�ÇfÜl$çÎ?.9fâ˜?ÿXÒâf aßß76ÖW+ -{ÔJ_qBÓhÖŸ~úú—¦R<éS<ÞBá–³víß¿ë¬[
…€u¥²Œp
ï	ò¸�r{rÇOð\¼ëñ4¾jÃ¦›Gì³ñx€3Cè²Í[.™F8°LÓP‘†¹+W¬`ŽÉ2×�GÉf”¹€¹Ž¹Þ0ã‡e¬¹l�^xùœ³¸ J“ëµM~Œ¼ÎMsÖ!]ÈsqXš,¸­Ö�µI&4”=™Sæ…ül+´1aæ
Ö£z‚Ä»¬¿o­¾·?ÛÐf•0´¬\Çy8^&óUBB�r`äê©É«GFVkø?Þ¨Vº£\Ç«</‘yˆB3ÉîZö�{’ƒáž�õÚÆžðúD__Å!€ÕÅK	¼$ªgtG*•É¤âëò¼ÓÆ<A‹Üun¯ê•í©|__>áŠo½a…�°´Bcäôt«B*šLF�Fº¶qc-Ý0>Ó‡^$â}ß"¼$ñ(û#ŒŸlŠ•fÌMÌmîªÌ8/À%F0Ó×ç ç�äü©*ýÎg`�tÞ®)´\-ºbv"pµ	^'Wû­t"pµécuD€tüáÌæ~¼â²Áñ©¸™ó�:Š›h™G@x³ýÌäÐ”H6U+ÙÝµÞ™ØÜ¦wR<óOS2c„ã”"ÄÝÐÉÐgÚ´lô7÷“§ý&ÊgË7­·_ÄÇ¶ù„«ébÃ§ôoHö,|ðotÏêr¡ÉKûzRº¯pxv›È:dÅOhû¤‡¸ÿ~Êu?<Â 9Î(L˜écÆ€3èÂ0þ%|A=µ³“.†š2˜	%S–•J†vÓÐà¯ìÝ ²äÐ1‘©Ù»½–©¡c^ëõ”åÆÚ´öP-¿ð"åw	´¹p„–$IÆNC/_€^z˜83È,g60og˜ºî¾OÝé®?åòã�Î·Ù“V/I«ãí"õò*æ”i‹
¼ÙEÅv¶»ù4º�¢;{/ >ÖÑ}Z8¬Ù{õpc¬%(6´Ö7Ö€œ„ëöÏô0>²ð¬¬ë2¤)ÏÒ†È`ßØxágx�ª&01::{¬ÐÓ×hôõäÇßMºõ?C›tÚÅôI=z(¤ãc>èIX[8®‡i¿}Ä*ŒÁ<m€õó(ÌS”É3ë™} E]K%û%Ìþ:äï¬£5+§=lg¢¨Ñ¢�.ï÷r„ KOÈ¹Måò€MZÑ×óùq>ãùüàÀb|`z×YSÓgž9½qÕìÛâ‰L•é\ØÏ oŸ˜v®Ø@.7¦éº6–ËôC\×4âý‘aÿªgûdhÐÿIE;VâušÞ€ZHƒÏ˜oh:ÚwÆÊ;v¬Xy†=Oì]5»±ÊÐyÃ¸<5>~z˜N¢oÚm·?ß~^¾ß}^Ãð}×è­Üa×ëùŽ^Lî`@öð3;É«ä# ›yàÜÊLVÏr�]ÏeöÃœw�Mªƒ~Nà‹ Ÿ*Å@|O`3³�˜u¸G”ê $‡Ï¦ô„T)ÎÊU¹ÅS|†Üq.…J›2—º³ØH’†_<vìÇO=õ•§žj<×±cÍ�NAô*-x–×Z¸×ôfŽ]ë5ÉÌ5Ç,/ÙQ¢ó]rÃz®ù$mÏæêöOüñÆcði@äqtl�tÃ ï¶Û|Áæ=w>­=v§×df&3ó3Gî¸Žy/óAæ“Ì—`Nºd€\Ž{#™c”zé:�IX©ö¶«¸X™®á7HvÖõ‰É¨Ú½âs9[�ÐRp'Þ/½5Ñ¸+ ýÍ¥Áßã}öo0ò÷”“Í%RÈ�ìß&œ”�=¥�”6�W§Y;iš�|FØ ±]=¥RO3®Jø,Ñã›’T¿*í¤ñ� Ò—9_� ñËÛqÑCöè*¦(ƒ|ÒÆJÍOßÒ7�	ùà@êm‚‚'úni=ugrð#ò„q’>6niupgbýì}ì1x”Ò|¾Ý…ÅÎ¨çw’¨ÑÏÜM~E.þ¼W—÷©× ¤¡�•éÈ-Ö¢¨¹ˆlÝ9íˆžmŒCAô#! Ë~áJQ”,q;…Öí¢%‰â;Ñî¢Ó~/•“ÍFº$òÎý_Å‹›ø�Í8š+I�BEIÚŽþšÎ�}ÁvI‚>L›ù'Ó¥¡Ôx‰Î\_üÉ±M›Æ>/vÆt“Ip&HoI¾ŽBn4ßbGãþÂQ]Î)díÁ)bHÅƒb@RüÂU¢ÈI¸ñ?Ž?Î‘]ö#ÞµÍ™™+˜“+a`„{ÿ[ŽŒe4Æ$¿®*þªFo¥Ò;p½Ù¼+Ù@	‡éuùcªi[e‹Cþ™çi›–«³£w”¿vdÊ–-.È3^whh"t¸mÊï-.ÇÖ#ÛóïtÆÕ9SV¼Þaì©Ö^­mUjÐy¾åöËé+ôNÀ¸¯··ªù|Zµ··¯àÄ5ˆg
ã§l�ßŠ¶Ž¡Ÿë	øb‰ß-Æ¼û8‰óÄ–-ÆŠYÖˆyY‰Ûe%Ä�c,çAˆÞ¥ÏœÒ¬7æ'\_üa§tÄÇ‰,”æw±ÉüÁí¾”ÊË¬7à1‚"ÿ0/�¥²2/¢àá·¯Û¦y��Æˆø|ÛÖm÷¦TJ›PZ‚Ò"”ª¬Ê«)ïöu§j>ø	fuí”uøiÍGÇÔ×›©Á�|µLk|šýÉ­[éÕSÓâ^=ám1ßßª7F$V5E$²+âÅb|’X2½D`«ª¢> hÐ#¶á‰ë¾î*T‘�Hæ©±–D4UVà Šò€ B…Ê><,±2+EçÅŒ-/Šü| -òºB$Ž©*‹=ºñøBŠ‘K‡œ
"+T˜¤BÁ
3%ñšÂÁ2aÅÊ¡’”2äˆª)iàC“Zó-&Åä˜ZKáPY!³ÈÀQPÍ·è.ÊÔG,tëJî Ö³ZË#½´ÕYdÿ‡†[KÈTÐþÂËCGÑŒ©-¼ØæJÉ·j9[È×i«”�Êÿ�«-<øñ�#Á.÷¿iÒ¨É¡‡¿t¨a³‚9�ö²Í^9ËdÉ—êî·?E¡þ­oºÄ\¶¢‡‡ú®3ˆÅ8úŒ½ÃIzXÕý_µß^ò!ûk=Åþ™M¨Š°ð¤ ËZÎK¨Š5	=,(ØÑOQ�ÖßÑ½.ë(Æ¬­hÏÂSP;��&š%�þ2)(÷~IV„æU€yÚc�2à�Nƒ‘;$ÂYÝn¿+®ò‚¼ ‹›¢–ºe¢¿hàø®y/£ NÖãDä †b�•H
•�g rá…¨þçº²ŠeW±^qÃªwæýøóWÏn½ìžú¹	ILœSŸ¨×ÇÐž?cü¸ÂkÉ3äbz˜a½óš��ñK–wø»ü°tG¾YˆÚûdÎ¯Ø_Í”Ëü2evžãí{2ènMiòŠ¦)¨<ÉÇ5t~tW,Q<¨’n£¥Ñ·yõ"�[¿½ù8-‡w+Ú5?ð®Ñ?½N^&_e,¦Ôî2æs;ó·Ì§˜/2ßo½£ŽÑÅUk Ëm¤ëÈØ-tÚ¦ò|.ÿ¦õøtÛFØNbº¤ÔâÑ(=”½T1�ïb.Ú;²”“Ì/Q`[­2‹•Ð��Tï©Fb±Èõ‘UéôL$CÑÐO¿ß_
[eÿõ†¡(e ª¢8Ô{Zö†ê=µp,>™É8p4’ÏîËÖ’X"
Ô\’†ô¬ßò6àcÿž®/EGúÝšz­¢ëÊµª¶�—Ø QKÜ„^æíoµ
i_ÖÔSi¡SUmå’DŽUhQÁ‰r¸Z�L÷ffÂ7DbÑhxº7;ùçŒR$2è÷ë~ý0D_™ò5bÉ{þÄ\O«d²Ó­*S½¹™Èó½½GôRDOzYø@Ù!E1ŒÃz9+øv§‹Ngov»¥+¹P
cACÂÙ“í2ªv«³ð5-·¢í]àpeT‡p!H�wƒÔ™f¦˜�ÌÎù‹öK_Âeø©íóì(-ãéÖs.r$°>0sÊÚµ'“…Â�‰e9¦i1¹°lâ@¡�L^¼ví)ÞÇÅc—ôcÑ³WN®^½ròìh¬ØwÉX£8¿wÏêÕ{öÎ—ggËô"Ç{ÎÏožÜ²åØÜ|¿
Ÿþ¹¹¿Ý²erËüüþžÄÂÛx¾gzê¾�›Æg—/ß‰D¢;–/Ÿß´ñ¾©)|×žÕnƒö‹ÐÜªUÐ$ãà{?à¼ãÀm�1óÌ6æ¼ÿ‘ßzóiÈø—Pá-î0³÷ŒGhSGÎØ±wïŽ3nÌÃçÈŽ{wlÚte>7oÚ±cÓæ+Ó°Z®Ü´yÇCögš°Þ!o'ÇOnÏ}ÎÂn·•“[Çw¶‰âWÚäâ©væ§ óócò+¦ó83ËœA-½iºŽ³ÔAÀeþÊ�Œ‹!-Î…žlÍE”YopB¶îÏÖ9å(º­sz6ˆ„ÓëmÄP a _E’å±ï·†ƒöû=–„0’¤t½XODE{â)I¶³TmªòèÜØu0dßø1tà˜}½OGèzûÓ}ö¡ãy“ ÆªÁ?(Ëò†
üöôèö¹ÉšïQÊü>ê«%Ñ�¤÷^`
Éß®{¼fô‰�Ol´ÿ^Œiè„Ã_´‡>;ªGÅGÑ3›ï¡³ô÷[1Gìó)ä¬gä	€œ³†9‡ysÕ[C³„·@n1³©”kr¨iîúÉg�'æzp›qÎµtÓ¼‹«Gè|�pVk^[\qÍe¡á¿Å—Üš5j™ñ›B*_už²XÚÅúæÍš©¨Èù°=>å "èbÓˆp˜¦`6ªö_ýü6ÿ»‚PÊ;è¤j‰ï¼\‹`sNÄÏ›š^ƒÎSìã±²G`}~1žF5•ÏõÚ(çåÖûýq)å+{þÙj6ÂSãùPvÝH%©‡–‡ÃÕ�¾A˜¼Âë>ÝÞqé–-û#QÖÀƒe)eJ‡¡¡w’ýY†n®Tþíß,)§e3¼ìïTÖÈBçùÕY�öY¹SÌ‡}�`"oš~„õ`tM.0 ‹Â,ñð²ÏM(
§E6¢hÞo™Ÿ,ô%TÈ™œ $ 7›Žœ±²£óx‰	2ƒÌ*À�70Ç˜�Ãû«ÔÞH,\*·Í¢º-ötT#Žm´%uk4¨Bƒ
FÝ:½ö^bš‚uÃ¹&_ëÆ0–.ù.«mYÕeþ&
”7%Š>•\îÆ*Qê‰Áîlj:¶²Š	J@¼„ÿxbS¹\­–Ë›q]NN±¿2P(¬ŠD|¾HdU¡0°äno:JÓÿVSo$Íiý�þú™¿…>ý¶D±9°4û	™wèÓ­‰"eSÑÇ@„ÐÂáU5–ÂaM0ä“S®õzóAÓ§™Áœ×ÛŽ›y¯÷Z·iªé0ä×ä+L–ú d³ŽÈÙ19¬F‹¼µðdgÓN‘ÑzÇáX?aºÉÏìW~1«ÖoÝ¸ñ–úX>c_KEA äUV$Ró³ÓW‡à3<tÕôôÕíøÕ^›™9:55ZŸ˜¨7VÏß=¿ºQŸhT_a	Ç©!áÈHixùòw-_^.�—[Ñò0ƒ˜ÓOž%Ï0aÀ¶Yˆ–pT8'|°žå‚µ<¡='OÚÿzƒ�n°_ôIê†IØ‹8D¼aRù¡$jøúðzíãý¤GyÎþ�/ ¿÷½‚áECÏ)=„Î–¸ý×€Áú™s¦î˜Ìê~PÃX›qä(øZóyÇCŒZ×Ì"à9×œ8ÈªP«\•äËÏl.·¨�Œk�ç_“É§±ýO‚ÜÍGÄ]!ö�„xâŒ(ÏKž/² å÷j¿ü%È¤Eàñ Œsè7’)ÿ±� <ßØþ�¢qPÃÿUœ¦Ø`	B&Ç+™ ÒþÁ“3‹í{Mô?qÈ0rž¯ØÿÈ(
IaöB ðS†ÑaŽ»P"Ü¿ø�WDy�ÌeËÔsÜËd?y•é…w4¸ã”–?ž£¥TpQ“Ù‘Zœo&ÛÖvd„Ž7Fµ#E¤ôü¾º£
uoS]w� é¿¿7üP¸÷þp¯®†æ‡ÑUÃó!U'™°}-&!öÓ?ÆŸŽØæ1Ü—�Ú7G³èµ¦KçÜØVŽÚvË…‚÷¢Lx<¾BÕ›?«ÌÍUpJW¯¥ÆKðøÌ9Ù¾½¹9’ËEp²ùâ]ý!­üOTØ<9se2 ¾î`�\2ÌÈ.;€û¤ÚºŽóH·E£;½Þmé PD-‹'X<Ú,IuÔH)ª¿§ÂJ›1C«×\pÁzUV¯®À…~Hmô*4¸ÊÞÜ\2qþøƒ¥¾ârÝˆúÉ5f4`Î–J£?±çÏhn:`SàÃcI¯«§Á5ÊGÒ¥]Ö´<kßqÚòå§�¶|Ùé¿©eó£5@>ö«¦YªÆŠ¾¾¡wù£qa´Tšì—®˜?ÿüù+®ðŒú]¥#�ÔM¥ï_tfkss#ówÌ×»g,Øž‡aÈ¾ÉŒ9¶?³[¯¶DWÎ�º¶Ö.ï®RÊƒ@XÍÕF<ý¤|^Ð�LJÙîÂQvÒáŸ>¥ªµÊÉ™7ó²l­
ÏÁ£9¯iz½� úT–J}ÕZÖø ñrû‰òŒíX3ÐU¹:,ÏÌÚGÑÚpZ¶°Tz†cpF1¬¥ti0
k¯FWy-D"'›÷²‹k{P@CWÙG!Oácµˆ‘Ôˆð(¦’]’ü"°ƒ¦µŸUMò81 ª7OF©7Œö�æ²££ÙÜèµ¦ÇëÇ€LÍïŽf³Õj6;z�éñ�ùäLùGµ¼]¦]~u¦ŒŽ¯jdB¿å}D0ÄXD&Ëùâ‡ØP?NÛO˜šýQ¥v6O ÛÛãGk4³ùS›blD$6ä!¢�#\_PÔxà}{šï¶ÌòÁGX¶@30¾(ÜË—ÿ
ðR ç€˜–ƒr™Œ–ÒÁdCRš:,Q0A.ŽGÁ@¶¥ÈtÉê#Keó<ù¶}ÈWšŸ}ˆšìÜ™Á‚J¥r�TÔìCTÍ�	~Eñè�×Þï*÷_p1Ï?lEÖž�ŠâQ¼ZÐuÚZ>ÌCmz­mO]qßb;´Uú€O;¶�íºz”"™·o—\Ùö($ÞÄ¨Ž,Géõ33q&|À 3Ê,cf€Ç;«[ßè8$ä5Ë	Ô²çOé)zGoüÔÒW	fiúÉ6<ärì-•u[#ò]Õ"šÉÑù5£øÅ‘5hMóÔG>Ÿ—Ð1{7>ò	÷³/Ö·ð“}�äc3ŸØË“Ì¾OôÙÿy¯UU¯WåUAðð÷‚\û¹£äøü(´¶†¶6:o—{¬ñ(H!÷¢g{õQ<	mäi/@±YÚ0zq¼\Ñò>á	,fÙ3Å ×c|p«cÿ<
Øå ÐúYæ4ææfæý€[>Ç|ƒù1õÈä?æŽÆ§–o©í‡°G>ìú¶YŽó�³¾k�£åqõúÙ´€–k-ì$èÁ%Òºžk»úM¾�³(ÏŽZX,x¦¾ÖöÉi¿‚¶ŸŽE‹å—JØK½$Ñ‡€~^çÇÇXŽ1…ç‘Râ	&ª8c½¢èec“’B0Ë7¤V‚KÕä½¼É"ŽÕÂèé…§¨IŽLRûß}Í_b´e\ð	ð?¾k[Çd¿ÿc[þ”�S„Î=�ì@å”Aªè¼bªBØÓD…œrK†ÓŠ_òˆß´gÁýI¾B£?wøò¹IÑËql"2)æ|Âä ¯	‚‚ä	A’„	)‚ ñƒ$
€É%D4ÎÃ[*!ª%¨œFì�dój(ÄÛ’Íõ¢OÛ
ß
„·Œ{½ã[±¿ˆÙ-ã’&â}«X®œa˜’ ØL“Õ¢Ú¼w†^JNïHÐÄô0ÇmÕÛª‚}íÈÁ~f3@Ö'²&˜mÌæ@×:iåR'EFZ`â?A¹Ïµ¹ÆÎòr}¾@t^b#a˜Ê^®±Ý± wŒæDï„#45Ûmhþ3ñŠ’‡=À	
XÀ¤§ŸÆeEà.AžUmV¯VˆE¢ñùd-gß›¯Ù/:ï*yâw-�öåjö2Ç†°ÏBÉ€Ÿ—øVQüô§¡]hýå€®þRÕ×ŽGÖ~4^øl!^.ßÏ|pör‡Ë§šO1;x¸ƒ¯�Õÿ9`¹æ¬DìŸ::<”–Âª'$ãÕHU›ÿHŠÀSC¢ýŠ$Ë®CAÇÚâê¶2Ì$³žQN�,ºWµ]ª:>5Ê¢¾¥ãù[ê¾ðÇ0¾�Šs·Q.ðÖVéòÇþRMŽ;M,61YGßûËu[ŽMãç0Çq‡«øtüÚR´Ð¥ªÌž œN”ÌGßJ0ÇÌÐÔt©4=5d¥¨£T
}?_­^77¿víüÜuÕjžã–Þóv`jåŠKÊC½½CåKV¬œZr‡ÐÆèõ°Ó\ëVÏRÝõìððJ1 ­®¬¢·«*Ã+¤À¯}ÚD±¿V-'¨q¢X¬Öú‹š�úÅ—™½ä{ä>f„ú‹-šg«]x�],-‡¼Ž™˜§:\�ÆcµÐì•Åò`®·÷ìZaMÊT8/§„ÔäÚ|mwoov \¼r.T‹ò†¼WàCƒæÄ•ñ‹&{ó¹b$$[ž‡:áp1—ßÛ˜¸¨1rÁD`0$ˆFi×2U{WÄ°§ÃþŒÞm0 æô,ÿXo$’ÍF"½�oÎFWÓU¹še7Óïçh@î¤¹ál6¼ð9|Q$G‘Ë6ïî¨8ÖáaX'× ß�d†™if3ð
ogÞÉ0þ0Žp‚“‰IN(�±N,ás!yñ·…{{ÃàŒ‰É-T»±Übjˆ,&ÿ;þîMjÅ†ó¥v%�'×d"·F2NðÍV#Øÿ�Ó¸|¨¹ÕÎi[·µÝíí´)ÀmRàìa(ÃL~Ï™É³fòl�Ž1ïý3æ²¾d¦„ÿqf³Kæ+ƒþ§ö—–òB:NP¯‰ñ~:üûn83õM°XæºS„hN®ê–\8þ†í,)D¾—	¿=œÉ„/
§jÀäÂ5ÐÐIýF&â6É<ìdÓI¿pk{^íß8í;ÁÃNM§Ð–ö« 6?³æý^&Üî$³ÑñÄ¥Êy³Ãi9ä6»ô–îHè6Öd»n ‡¬‹L®JžU“zóéž¢Y‰Oî<czz¾Ð¬Ä¦vî˜ž>Ã«.ü¤¿Q¬7ðƒ�úà@½Ñü®*ãåÀu®y7¹^Vq?ê±MÕ;]ššBËöªgjˆ¢9¼ÊÛ£4“½6ëôöeý4âÏâÍTóœ¬ÄÝQ¾Û¡˜”¢½
Ð<FÛu©ý^;,FËßþ{�^{�CªsŸqÞJ=æXNÖ9ùœüG�íÅX´9Xàÿ‡=(·¨Æïrƒq¤ç`Ëm&¸è`C["KÐÛ_n&Šf¦ÃÑ8Ç²¦"+ º^´ýŸJ&z�òŒŒÊâÜP˜£Ãæ þ_Y�þ‹7‚ÁioD…ÇS5ÙÌû¼
ËÆ3Ë¼j=³—¶¿W�q�Ýõ¡Y©ùƒÊÅÌw`ŽGÉ¯AB«¶iRÝ/´·£Öõ¢cÏp$ØŒßD� ×`R÷£úº‹Yè|ßM¾ˆ a]&'€òáÊíÞ¨(!É¾•7N4xQÄ9´ù°b�ðˆ‡ì�’ýñQíŠEUã*æ¨>2¦Ù�a!¡GµQAß& ¨ØO gR„“DSE§Ú€�9B~ÔÂŽwœ™["k».Ž^™RÎTº="WÌ
Ù%Z¼³{Õíø'’é1¿ý� `ÓyütaÊ0Ä`^ÉYÍ‰PN–Y:GÍøý�ãc{[{—”?õÃ…v£—¢ñxÔŽ÷lÌd
…LfcÏA3dƒ~ô²Ï0|vÌ?`>®«�ÒZ�)ZêÅbP·µº¨!GÇÔ²Æ·RÔÑ Ôq@¸€žtdr{Öžq¹Ó/Ú³Ž…œSú"z’¥ÖwÄ÷9Ì /:Eì™¥•ÇAQ{†~¯‹¾È ïêg.†¾ÜÉ„˜
³º[¢hKÎR¯µœL\W”%r„Ž:ÞÝþäÎ…¡Z¨ßßÈ*<¯°7ý![CUlzmî®»RÿÄPeÉxMû©¿[î(06»ú20ÙArg5oW²µ»9øÜSÍ£ïäjÍ{MŽ;z”ãL/úžÏ4}v­ýørg˜›éÀ¾L‡îðä0®2Ë™íÌC7*,e<»ö9[f�8ªcï8iÐ´®=�P…|[^rýüœ¢ T;Æ©|:�oCÌÅâŽ
Á�·eév]ÜÓÞ€Coƒ|†Í‚Ÿø�‰<uëÎO~bäü}™ÞªÏwö¼¡ùúÌ±�Ø8NDNOz4cþläóU{3§
š4ÖwJü�Iš 
—A©K‘Ð"$�2J+{Gçn�P9¶uëXhÐA1Þ=»êŒ‘ Á*ö…Ç· ­¢IÒ`.ßq2$ÍWÏf‹ë.•Ìz<*+{<2BªâÉ™¿S¬+f�mÌ»yÉ”¯—ÐEMÜæ÷zýÛ$Miê»t=]×pÜ5ôû0Búuª¾mÙ²Ó4�®Ë'ñ^q~ÏžyQE�ã0oøO[¶ìTFfV0&ùÇ‡?ÍV©�|3sss»ã›“s¡3@í‹êÀœ»K)å~�ŒœðM-çŽÓTªî×[,ŒžáRmnØÝÔéÂÄÉ¡ÎóKYSª©Ž�/–Ò~€C:Œ*&ðoE„ps+L$ºÈùÆï$ƒøý?tÓïk^L½Æ	øÂ¦uAQæ7Ò¼ÃÞXLlNw’ž&ë†ÑH&†QO¦ê4¤ºAù¾-t;¢ssø§¿ ™_Pó3‡›·$ŠÐ‡ËY�…B¢ûúUì}éKÇà­I2o¿†‘LKÛ¯É<ú�ê�[¡Xûòª¶ïu«û¼kžz¶_Ïä:Àg£ÀÓoavz+sßâ[qñIÛÔ»ÄOÍÙS²„Qâ–ì½]ê8b.½åÒ]‹·¥Â¨´W.<Ûì6n8*´ª[Î$;ð¥ûÀÀ²eß£ ø½@,j¢;D�@%�:ø%Š­ù“(-uÔªèj‡—yÏIñ#ë¬€ °Àƒ‰¤ØÇk</úChm•º�Æûú*$yy¯ x²áFÕ»¼á�ýË)A‰šDôÇö=‚_iîâeºBáM=hõù¦Û|é{ÛôüævÊšµÕhE@ð°a
ÁôèåxumÃyb<^´-²¬¸™:Ën¦»;ætÀ‡c@Mé®ø°rº°½;/)÷«…ò3K˜ÖT×M=àâO^H¹_¹.zÀ¥— µEUgk�¾I¹¶ÉNMbuy>·BE5uE.¿\ÅƒShr¨yU8×�ôfÃ8ÎöF¢½½·',aj°Z´ÿIœèŸ‚=I¿nõ4§g®Ìð¬,ùØ™ÕÚÎL@¾Ì‹©w¬ÂAšÉI²ÅGwUGwE�LVâ…ôåäcS%ûó¥©Ôà@š^S%4Wšj~3åZßSíïÃÁ\¨×úè…š³’IËþüë“uÉâáÁý•J?/`Â[R}ò�>˜gà}”�îRI˜AÔ€îzòué†s£õ¬«·œ�Á‹ººÚ(ž—tüµ*
ˆê¦ž7Œç�ºr'bñy–%7?/X²Š°2øyÃ~‡b’O�8"úØO#™0P]�~oŽþ¤”ÀÝq^.û{	‰ÐÄ þ;Hn—ûC �XVQšP,BŠ„%À8ZÊIàêÿ�©Á¨Nev2PËºëÁä¸@ê]®°ùE¾,ïZ¼ªº«çÏwïÎV¹`e¤R©C‡S|.Të:iïW²YN ÏÛeNæì²¨(â!E)•¶ær½½s™ôÀŠþþ•ƒéøDRRÑìßÇÝÍºñæk(D8³ðÞáòðþ‰eóxU°Ï¿uÿUŠ	3£Œï±£kÑµO“ÐÃ=Ìz$Ñüís’—Õ=ªÆA(ËõìÀŠ½y…PˆWDù’S�mÞé>%þ²½¡‘?Ê,‘¼Kôp¯÷ü‰A�AVRà9ÁìÍ7Ý4’½ÉÜI~íì·(1Ë˜uÌÌÛ˜+˜ÃÌûÜÕ*t»ÿv6D¹Vg½v–a*Kí"—¶ôLƒÔR4»DJ-¹Þ"�|È¾K‹(JD³ïJô÷'Ð{áï=‰~4Ð³ðÇ�øÉg_MNWû�^]$ÈÍ¼Cü!0ô�ÿEqnj§êvßb�N=ÕÉ')¢$$š/%ú}´º¯?�ã=ýÍ£²€ã‚â“šÏé‚Œ’Oš/¡Žæ¤}m>ñ@ƒ»N,ÑöX¤çDlav¤~g(×ñ#ã­€³­�b¿|mÑ<L¡ÚÝç,ttgÒi¡½k„®ÙØóKT] OºQ/j{°9®hŽ‡® @Âä8z1‘PÆ˜üMp}©weè¨ N•(2Õbêí¢xþ¬¯7UFjÛ¶eœÈe=Ìùzý
­ç%÷Z==–•Láž¶%öÙ¡™™¡¡éé!ôUjH"ðz‚ qV6D¸xR£µU=0
A^ávõ–â¡kÔ˜·453Xš’„wk™ÀìùGý3Åe§Ñ§£#þSG%C<—S½Àä¦–´ÜG7w»ÏEá™}vie%	»ÏTL÷‘‚_†hKwpœüŠéj¶Þ='ßV¸¸ÄFFñ	�B�Î«ÛÒÙ°¯Ä1ºé~çYä¸ÀOx"^Ö+H†pyóÛÃ³³Ãø’áÙ‹yÁ.S}Ó 0W¨¼Ûþ>ÊôFšï£t	ýi�—ðrx€¹/‰>¾9²{²¤†T²n&<Q//!Äòï˜nÞY™�­àÆÅ¼&Ø@SC7c‚Pù,ûö?E²½Q| œ}�÷‰Ÿ¼<'®Ä¿`3ø†³'‡Ô�ÇÕ=
|×næ*æàˆ˜¿ccþa‘²wKqîrÜó•E‹÷¢F	êœ0škíXZê±^më®óîÆ#ÁU¹˜ùúâž"“ÑÑ}ÞÉHDs]+$ßu&÷&¾ä½/çQK	ªž¨zû]˜S¬DîM	 @#1Ír°M#ßH¬í÷¨jTyH‚ÏC0ŸœÂ©žøª´•L-
ÞE�XºývËè]òé\l]¡ù³zžd’¯¶|ô¤Ÿ…jµBÁ¹nhŸïƒ2¹F=_ QÐg9ÅÈÑz¾ùõÈ Ês‚´ÛÙ÷AÎã9ÖPpC3-_ówŽòË›¯5?ÏƒÀD>LáØoÂŠyË“äã&Ì²¥Ê^®§ÇÔõK	\zY�aùDHOY=) «èÃó�Fûáíp®ÑÈ¹ýµ6¹¹¹ÆçŠPÜu¬�# -%˜^&Ï¬bÖ´=§Ú`ÑR P9¶VõÓ]f™j¥b¡üçlÍÍtÎ±¡o†ÐT>­çõ�œUš¶•YEþ�ó¢Rb€ò™–¦ˆ6âöÈC¡½ö-ß¿f#èë‘Þ~=LèV,‰ƒ�ä,‹®£æ¿y#Ê+ê@BG¼ºq3nžþÈÿá³°I9=+¨5_!<yP”ýÐ5öêK7#û"`å,Ý•ïJÝ¦¶ŽCXKAIýä„–Š¨Zíò‰ÍJB·Qeä‹TÞùWÇ¢y½ž�7ûÐøf"�æ^*á{Yoæðñ·y|çÒ÷z^1ñýDÑN;¬ÿO}Þ·ù+½{Y`/¿/H„ÝË)mýüqò“c–3™}ÌÕ ¥c>Ç|Ëé³Ë± ä2¾íµ¶h‹¤^ßÜ¢ÓƒS¦U+¿x>GË¯ÒóKÛ¢Ùõ®ÚŽÆlÑí€âÊtgWbW"m›ë°T®ž­ãyÁ�Ø ùÊ$ðÑÀi6ì=öž0Ñ¼%OÊ^UE¥âŽ—G•½X•›/¯'Løz·ÌÄ„LíyÒê.s|€&\ñU²r.ë–[GÑ:Vàö@ÝÀÁ¦|@æNýÕÄ°í ÁÓ×š°Rëÿ=@ÜDhØ‘GsëÜ'd³P€x�Ðh£öwZòÁVƒèžƒÂûuD2ðpèBA°TO�·ÿH…d�Y‚¿D½ØKn‰lÖ&Ì»ßs,�)ÉÚN@:n¡!â¡›K�à97mžÌ·d³ó<T,qœÛäØ&½w[¼µäv+h�ä@à+A~“NC–$ðM4}ºÖâOðÂy€·²‹¹{ÿª­}óK,û+›ÁýÊ1á,ÆÉñjÎÞàùöh®Úü­c«”Öjîo3VŸZ´òÐc×Š5È¬gö3ïqVà)z’¾äXAtDèÝ¢cb.Ëw%ª.µ#› ãúÒCÛN(’}Ã“ÝZÿ´­ær\×,¶6kµŒ”ÝÊ	ÈH&/˜ž™]53½/•D©äþé™™P9ˆé>ìƒñbÑî�DÖŒ�o#™Ì)ƒƒ¥Ripk&¹;ØËÿÈ
n_ÝÉÞJsÝlûéÕãã§Ð~,–ÒøšíÁ~k~b|«Õn0<zVâí£t{ém´WbÆ¼X�£,Û�®ÍÆâYY’äl,Ök¯ï�Çò²L0BïŠ‹±ïÆ0Ó5_MW=:~�tôsq$ð’OÓcÔ÷�æ®Ö=�kå>*AšîõêZœRáÅxó¯	–¥8Ü×4�GãX‚·!ôíêç%Ž,‘ÿ®#G�Ÿy…)0#Îz|ùLf©.nñx“ŽÜ³¨¸C®ƒ‡ƒîZçm¶�ÑÁÒ?XË_�¯ý�T| ?FtÅø¾Úü*^ao5Böé2ËÃúD�È!	}œ¸È‰Sð:]µ×ëJÐ5a¿déÔ¾e(öºüØX=¦h¶ˆâàí—ðä×4ûUX�ÐÒyÞ~•.l%(8vÄå ù_ê<ÄŒ;{_3��oâ×<Úå×œªroàØüdèäÀ#3ƒšzdt�®zç†ñ=Ãs^U_3j“”õ°•²a?_ˆã£}M–çÂÍýÑÞ§·zú‡þ4‰4JÓ3ƒ�µ#¨ºý¥Ý¨¬«Œ¬mÓé`£ñX´Xˆ_½ŠöæÂ¨|žC"ÝÐ~Æ±ù#¿"»;Þ¶Ì<sÐÃ7õ©ÿ…éþ8ÝZ­­úõ·M'0¼(Û7>ÞG/#6Œpä[KïÃß>!ÿo^É�…-%¬#'qxu¡�ÈÒ›O¨aå69 ÂÒIX·ð�}…‰‰BßÄíP5�ê·ÿ)hW£`3‘íí‚š(4l¢ÞÂqœÂ=¨Í>�rw	à�^"ÿÜE?Sîn[ËÝ‚Ëï:µ;*$®ÃÁë”«¨ëy�8¦zg1Q$Gñ-�É²Ž7J>«g�-N¦Nµêñæ·/­m¬çù|4¡'E`kØ$7P€¡p°ù®çžû—�äöíÉ�Ÿñëhzõr ‘—#�ôÙ¯"¿¯ÇßE¸eCí÷ƒ³ªýR¸Çëñ&õã‡0òzŒá8NÇ*ÆG«6SE÷ØOþ¾gÀ>8Ðc_„Y�G’ý'^D¯{£²$�U8¶Š gñ5ÿà‹î²¼×ñE¥>%Õ®�'ø žx.“~’O	ÕÜ/U?�˜Ko¹·"˜ãÍ[sÕz_ž¯á¢÷^ê¦†ßá^÷¸ @ÃóÀö¤s Ö	zÁÎ¸ßŽjy1NÉªëu´xÉP/b;ìÁˆFü?5Â_‹¶©ì³m?’ûÚZŽgé.Ý/p/`ŸýŒ—‰1Ef3s&s¥cEYêèq‚&~‰âåõ¸ond_Ü®
‹ñÄeZ9�-é˜Ö×é/mG’BU3dûwÐóÏÐÐ¦è�—©®—ÓeÅ‡�(§HBÂä�PX7,ÞÛÏºhH².~±ƒ 3?<™�4¿)Op –sÙ0þe¤w&ëñvd¾=�ÈdÃ!x/J’ˆ�O’5"å&Í5‰‚ÕR„ƒ_Â3á¹zÝ;7Ü<îOJÔ†y!šFÏÛáH/ÜÑÍ�<ïÊ:öû5N–OcÎe.v|"ÞŠ[¨ESÕMY<i´­œêJYœÚ.Êu	éõ.Áœ[xªg` E&{QIöˆO‰žÛåˆ'˜U7"L=„¯Rã€+jùl£KÕŒ©ÅÕÓé6B.ôˆdRô4··ö Æô:{Ì§M¯›FŽôt\~® Gé ÊU¢`hƒ¼ÌçjÕ¼x±¬Tsù‘jŽW¹}^Ÿ"Ó½O�®‰;ÑÓ´ÂÂSèYhÐ4¡Á�îÌOÑoxp˜3O¾L~Eâ›˜�ÌÛÜÓóœãÚ í.9Ú+ß’ó®àHR®WD7ÁÊ˜Ý�]`¾H™‚<yØ“6ŸäP4àì:”A…v´k¾DñÚëÉQ~˜•=Ùabª66ð´èã�?j¾–¯7r]B?º²P§2>jä[j
‹ÌêÚê@˜žxÖüßÑ,…O�½¤¯ç%@ËÓ/ýîçy^“š_m(sRhÜhé”‚èÖ�'¥PßÅ_ ì%Èo™½Î)¸í…H—·«Ü¡œ˜ÐuæcûìÍÅ%ÝÒÞ·qî¡5ílwkm»JÐuwôŠ�K²…by°o…y±¾xhGc©å�@�"2¯Ï“=^D°G+18.·!™J§‰¥þSzz’ÈáVŠù¾sGýÅLöœQLFvÄ^c–‹Ÿ3n¯M�[‡ÁX84‘Dôz‡Ù§i†WE„Õ
AôXÿ\!B�GWæšv~}"žFÉDb]ÝáÔ¸lôœ\®Ïñ˜ø`Ï­°J£ÌÀÉR=î�Žƒ–��<z{¯6Œ»í?íJU¼ÌÙ—Ê!Ù¾”“y’¤:¤F<ÞˆŠá Ù
L¦éÈSÇsõaÿ“çÿ“°Íï}è™Aüw»ìR­È:Æ$ÿ›ü'Sqv_8'9¢KKðwq4èOÚ¨â˜Žò¡ÇM,Ý°Roí,j+ýZjg�SÓÚ'Béôccsª!¿Z\�/Sý’}ƒ¢ª
Ê)¯/"£w‰*®`EÍŒ°È~7ëãìçéé!èÂ’ÛüÂš·ŠB4ýnÇ?þV¨*	õf2£´!¿
��D1‰Ä4,‹ö”˜W‹Êö/eEVÐ’©¢#©Öì'1�ì{àM‡°ÀÒ�…{1ñ§‡XIÆÄTP*@+òŽÜézž�>¸’¹‹ù.ó2@ý�»ÐöØèF;ç7TZ’…ã5åÄ:Û-ºìšt·—õžmä-Ûþò>µ¥�ì:åèòéZm£iº.f3+W^Ø×bƒŠ"±Ñ¡¡«ççÖïÝqÆ‘|.Ú¾|ù:ÌaÉGˆ¢ÜÈé²%XÕk÷ùý¬‡ç$"cÁ£’ùÊcÃ•5 ‹˜k+Ãc�ÊðZú‹	oæótkñ„sÆa¡/Ø7d{EU	šëG*ã}¹üt4ªq¦¢ˆ¬™Ln*»çJx¼£½½ƒ„'¢—p¢‚>rÉ ãØ4éîmz7�à€xžÕ×÷ö©©9×w.X32º†C,en|ì+èúÜmZ³ö�¥R)¢bRu£
c�þÖ$+V°d_Þž_{Â0†+wxv:_Èœ<¨Ïë‘èt>×7^Yªj±'‘ƒ±ÀˆJ½ÙQ¯7Ù¹|ùìp©´¹'@X“Ûc¡ÖÚI*]_ï‚™WB¤É”™‹\<\Õ;¾µm(hŸ­–1GœêP©”‰‹�‡GÊîÁä#å
°££ùrnÑE·ìÈ’Ã™ö¦ú²Ã·×ñÌµ¡ÔÛ¨•û|ŸÖÈÊ»©µ{v§º&à NZkSÖý€j¯Åºz>ö#Œªº¿0�ñY«Oê†Ðõ¤7Œ®ÍD.÷î©NêFoøúpæL+5ê¹(³¯eÑo™îs� ´†Ñ…€u‡_f0>DðÞm×«Á—`L¹³R»¥ÇS˜³™ÃÌ±7“ �|C‹B®Æ½‰ùf”©-qA]ºˆ]†á­#`/µÁ•¦&‡‚ÉdÐJ¢ŠŸ˜b¿´4%yb‘$ÚðêÄððœ?Ðí1êB5¢<ðÂ¥'{§Bü`:�íÉRi’^9-YÁdƒ6Mmƒõ8–·`ò•R¬žÆ$Ý`1XšîÔ²?ÜS*˜žš?ÙKÖ9Xà±7ó’¥\-ü‘&yÝ9}udÕ+ÞÚÓ·Ûòéïf¹ò©V-½óÜzm]¡¿5û©Öôë­w“j½Ìû'ý†áŸì/wÇ×^pÁZ¸ž žúÔ�ÛÌh©´*àV•JUwƒ«ð¡»•�£ä2…¦]èÍ¸‡åez˜imY>~rënÜ>×y\XÏ„Ý'=à§í�.}²Ý»&×}Zf:�ëíí£þÓ_b2kcs©ëù�Ê£™–	4ÝÙUbµ�û³:1×sÖùo}QÀùa×ê|µšêìbiÙž�]Æm{ßR'êÌRWRÀ|2™9e(1ž:%“ì$?‹CA1¨q‹%ÏË,öÉH’�ÈÈ<ï#À@ˆiû…ª ±$.
~`�|'±/²'h
‚/_Pä,«I|8–X••C¹U‰X˜¿í;”Qû6ÝÜ—qnkÓéÜ´/e3SFpõpï|ÆÓd{üª7â‘EöFÕ¯fô„×·®:<ôûÇý+U5îëõX>)(ËEy0«�´GY9˜Ÿhµx"/rœ˜ï‰×5Ôüç¶”xË¢´Í:ôTÐ$“e68{†;®¤‹Ûï*õÖëpŽêu‹[Â;v‡ÒÍoR÷{Êk¦ÈO×ó:£üƒ,ˆ”D�àÈ÷¹¼Â}˜rvâ?n2î[f_doóšèr5äõ„t%íb-»ðuÔEŸ l®úå lß‡ÿ€îÝ@;÷NáÏU‚Ï#	Ð”&‹ÿy}ã}Ë˜^ôóŸÑ³L~æh,^†7k‡ÜŸo@§ñüsÀ+ð÷:€Q�I3gºç‡:r€«Âåƒ#¤-E´$‹j¶…‰—ªäÝ4—Çio©kaXmaiÌäæ"Ñ(ºxÃÆ‹ÐÅ�l NÇoø‡£µèúB‚Áu•‘±±Je]Ð9Ø
miÔW o
…èL7€c¡™x4:“E•�]¼Á~fã%èÕÚ†5û{‘!X¢j
-ë6cB“×4=6¾=ã/m«`.åbÑ3ÆÇ§G¯íR±$È•¶IË“½íÃEQÛ¶?êŠßqV 'F[ä§…Sú]–t¡y/“3A¸Á•CaÉ+â·‹ùæÛ!íë1Fèû°GÑï?py~S–Œ·õ	’À7ÿ
ÄAû—‚Æ³ÒÙXðE‚.I:ß|'b7¾‚9„¾û€]EøÀe¹Íyw¯õäzªuBc�aþü-VK5Ie�èžÝªÏG>¾àƒÞIjÇí6ß`|�ªä¨sÆ¢¢/¶5Yö/NŽQÉgkëlï2ÐW[ÔB9JÎ%°¢w-D-�B64÷ö5èRÏíëlV÷=§‡i*¡g¿ó�äx£°“¦ïÔÃ÷¶_3ÙkgRÚUh,ì&ûàm_xùh«GÓÿ}"�²tI®ùÙ|ÃYßc»œÞëôä	Í‘’q£ðëP²élÇÃŸQ5ƒ¯ç�’giVó}m¼„/²|nj¾ÖÜ�/vÆá"*ú¾Ï<õG“zõ7ó·í,][ 2‹†/SG9—òÂ Zvá6ÕéýÛÄ¦Œæ7<¦ºô‹ej­).j¬×+mÜ7šNW2eT†Å0JO�¯(©c,$fÁx2
Ì´¼,èQx¿÷s€Å µÌD“¾^=cf0A�ŠpƒôÏó>™n<ùšÙ«HbÓÖc1¿à%¿$	|2³D^ðÆ€D±ÎY^W•3öÎ!’2e{¹sÎäÚw Ã@¦ÂYE&×z3�dFä"Ðõ²µª¯G³?d.Z‘¼ýúTµº9õiï¸çÚ�jaäRYî ³Ô€(ZÁz4f¨~^6XUDK9Æ{8–§GÙr¦X	1ô—ëÎ%6y€ÙË|“îìqÞCÞ9R¨%ñµ)öˆs*±£Éio‹ªWÚ>˜V×O¹twú~Fè[pÐ°`º/,“vxµªËÔÓ¹L‡5h{©µe`ç»¬C¾½;«¥?Z<^�èï÷´Jhm_qS6—A„7$%(nË•æuÌ²€×²ý‚H$ÖçõùXET.™ÏŸQÑ�e…¾RqCRKë‚FwíBHWÇ²z9ìE…Â=o¿èèwU®9÷Ü÷ôöRÌëåÓ,Ç

¡GñDï5/Z™Yu.éƒcU¾Q«�?8˜cIÞ&Æºè‰yÕUeÙ£Èž�bÍEÁœP<¯z.pZ†añ†,I &¦__3"ø8„{ÎÁÔQ£p#‘hD`ŒWH¦Ê>§ú–éFOŒ(œ]å¼"_QŸ7��f5YÙ¿oßƒ#•�º1Xºû¬³Ï¡äd.„�L½+X…—uzzB$zî*É¯P8áˆ×[êIö)!µ¸&È’¤pdpF">‡Í"8ÕB°h°™¢èr'Àò?e¼L‚)Q«ëR,ïš<ºîÝ§zSUr½e¤M½�in»~ÊÁPÐq{/ý)t„!ÝÞKµÝ§‡žw~¶áWšó‹cbö�YøH9]Þú©u~¢	äãYÚ ¢x`áYZ‚ÊÏu#P…«[¿ø°hÄŸÿk'~äî ò§ÅoWš qb€j4M/äºãÓgî¢?áðÑo�UFÖƒ‰ ~¯GAs}¥ò`ó:@ëà·û
ðîÿ¼ŸgšëF*ã¤žÄ‡6Í }Ê½¥Ba™¡SØ/”îuNÙoòà1NeÎgÞÁaî`îcfg¾oµË˜ãÐšàIGê¹•`&ðÒ²][7ù^ÿÒs"F;ô¡½Ø¢ÿ	—êü`jÅäOpL~‹»×+”*ÉR))y=ò0½¦?‘$z½âoçèí½uc’w”BÏ¨GF¡<­CÙ#å%�é>ndá)j­X¸WÉ$5s�}Hµ?Œr
Á5È!º¼³ý:NRÒ[JA<REôvîT¹"yÜ»¯§J4â‘VÓ¯ÕœÒ(%Ÿ¦]|:Y²_¥¨ž¦½A;�j®¢¿@€¿�l¨Ò7Hj3¢J˜±	X¢Ý“;nÊ˜Ñ˜��ß��Ì3ßâ,<\nÅ×
Ãe3ØÁú�—G*Ýtwt¸LyÏÒ9ŽüDJÅ''W*Ã‡''ã©!‘ž „=1÷-òšŸGÈþþµ“Fš[º¯o=%v]__liNr¢�9ö}¨x÷Ý0¢k Ž� {è9
¨³3ˆÂ ¥ª	l¼8“.a€¤ZÝôÂ}�TV`ô¢ûKŒ?Ú3±oúÔ#ë—]xÛ–-·]¸lý‘S§÷MTvœ™9¸£‚¾JK¡oÒÐÞ¼æº�æ´yñý;¡àòåPaçýCÂÎëÖ¬:xÆÈÈ)ÏP´Â2L?puôÄn§ŽØL\-Á-íHÐªS2»ú“ÀÈq=­×óÔ·Ø=ÖÂ	âuÚ9â/GÃL&G™¹âþí#»ûW6Íîÿü­›7ßúùýô;“\i†hÞöû¯˜iù‘6àÓ´­ÿH��DùÕë¹x”«_Îrò#!³š‹Fù5i1üˆ‚Z!d®LfÚMÑïÙC�•ý»Gh4jßö#Móh?ºÿAŸ"û¾ý;MQµï¤zÂïzEƒûï½Íêaþ?Wl¡¶  xœmÎÁjÂ@…á?-µà®.\Í…Ò]·‚7.\7Æ!tÆd!ô	ú]÷{Œw™�_ÎÜ¹w€9dÜWÆS¿ß×Hþ2�åws.wæ	/¼š§Ê?Í3–üèV–?+™ëäá‘\›Çò‡9—¿Í8óTùÞ<ã�ß¦Š—‘‹¾H8øtmbpëbÅOâª¨Ïš‚Õà­Ápïëî\&õzhÇ™’4X¹‰¡uµ>•­?¹ãÍm«¸SYÁ¦ŸÝjz­6¡Q©ÏIÙ‘›ömßk÷èEñÜƒ=·  xœc`fÀ  }   ÿÿ PK     ’ŠU]ü_œ¯m m    assets/admin/fonts/Rank-Math.svgnu „[µü¤        <?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="Rank-Math" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="1024" descent="0" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="0" d="" />
<glyph unicode="&#xe900;" glyph-name="bank-3" d="M501.76 652.954c16.97 0 30.72-13.754 30.72-30.72v-6.921c30.659-7.748 53.346-35.515 53.346-68.578 0-16.966-13.754-30.72-30.72-30.72s-30.72 13.754-30.72 30.72c0 5.132-4.162 9.29-9.29 9.29h-16.183c-10.92 0-19.775-8.851-19.775-19.775 0-8.241 5.116-15.618 12.833-18.514l41.157-15.438c31.699-11.887 52.699-42.189 52.699-76.042 0-35.062-22.221-64.934-53.346-76.304v-9.675c0-16.966-13.75-30.72-30.72-30.72-16.966 0-30.72 13.754-30.72 30.72v6.918c-30.654 7.746-53.342 35.512-53.342 68.575 0 16.966 13.754 30.72 30.72 30.72s30.72-13.754 30.72-30.72c0-5.128 4.162-9.29 9.29-9.29h16.183c10.92 0 19.775 8.856 19.775 19.775 0 8.245-5.116 15.622-12.833 18.518l-41.157 15.434c-31.699 11.887-52.699 42.189-52.699 76.042 0 35.062 22.221 64.938 53.342 76.308v9.677c0 16.966 13.754 30.72 30.72 30.72zM141.314 556.384c-13.573-10.179-32.828-7.43-43.008 6.144s-7.429 32.829 6.144 43.008l342.014 256.512c32.768 24.576 77.824 24.576 110.592 0l342.016-256.512c13.574-10.179 16.327-29.434 6.144-43.008-10.179-13.574-29.434-16.323-43.008-6.144l-22.528 16.896v-317.305c0-50.901-41.259-92.16-92.16-92.16h-491.518c-50.899 0-92.16 41.259-92.16 92.16v317.305l-22.528-16.896zM520.192 812.896c-10.92 8.192-25.94 8.192-36.864 0l-258.046-193.536v-363.384c0-16.966 13.754-30.72 30.72-30.72h491.518c16.97 0 30.72 13.754 30.72 30.72v363.384l-258.048 193.536z" />
<glyph unicode="&#xe901;" glyph-name="map-marker-11" d="M374.435 645.212c0 75.683 61.355 137.037 137.037 137.037s137.036-61.353 137.036-137.037c0-75.683-61.354-137.037-137.036-137.037s-137.037 61.354-137.037 137.037zM511.472 720.808c-41.751 0-75.596-33.846-75.596-75.597s33.845-75.597 75.596-75.597 75.596 33.845 75.596 75.597c0 41.751-33.845 75.597-75.596 75.597zM509.927 354.693h5.153l-2.568-2.826-2.585 2.826zM249.087 645.141c0 144.908 117.471 262.379 262.38 262.379s262.377-117.471 262.377-262.379c0-94.933-35.009-181.408-77.165-251.327-42.234-70.038-92.733-125.28-126.415-158.351-32.616-32.018-83.71-32.076-116.404-0.156-33.841 33.038-84.634 88.281-127.12 158.339-42.412 69.939-77.654 156.471-77.654 251.495zM511.468 846.080c-110.977 0-200.94-89.963-200.94-200.939 0-79.938 29.774-155.366 68.749-219.636 38.901-64.143 85.866-115.347 117.503-146.235 8.79-8.577 21.688-8.557 30.441 0.037 31.486 30.908 78.176 82.108 116.842 146.235 38.74 64.246 68.342 139.661 68.342 219.599 0 110.976-89.965 200.939-200.937 200.939zM701.137 290.447c12.976 17.056 26.001 35.492 38.556 55.157l70.545-117.576c36.86-61.428-7.389-139.575-79.024-139.575h-438.272c-71.635 0-115.882 78.148-79.027 139.575l70.757 117.928c12.572-19.624 25.615-38.023 38.616-55.058l-56.689-94.482c-12.285-20.476 2.464-46.522 26.342-46.522h438.272c23.88 0 38.625 26.051 26.341 46.522l-56.418 94.032z" />
<glyph unicode="&#xe902;" glyph-name="wallet-1-dollar" d="M532.48 571.060c0 16.966-13.754 30.718-30.72 30.718s-30.72-13.753-30.72-30.718v-9.679c-31.126-11.37-53.342-41.243-53.342-76.308 0-33.853 21-64.156 52.695-76.042l41.161-15.434c7.717-2.896 12.829-10.273 12.829-18.518 0-10.92-8.851-19.775-19.775-19.775h-16.179c-5.132 0-9.29 4.162-9.29 9.29 0 16.966-13.754 30.72-30.72 30.72s-30.72-13.754-30.72-30.72c0-33.063 22.688-60.826 53.342-68.575v-6.918c0-16.966 13.754-30.72 30.72-30.72s30.72 13.754 30.72 30.72v9.675c31.126 11.37 53.342 41.243 53.342 76.304 0 33.853-21 64.156-52.695 76.046l-41.161 15.434c-7.717 2.896-12.829 10.273-12.829 18.514 0 10.924 8.851 19.775 19.775 19.775h16.179c5.132 0 9.29-4.157 9.29-9.29 0-16.966 13.754-30.72 30.72-30.72s30.72 13.754 30.72 30.72c0 33.067-22.688 60.83-53.342 68.579v6.922zM235.52 870.4h430.080c50.897 0 92.16-41.261 92.16-92.16v-71.68h10.24c50.897 0 92.16-41.261 92.16-92.16v-368.64c0-50.897-41.263-92.16-92.16-92.16h-532.48c-50.899 0-92.16 41.263-92.16 92.16v532.48c0 50.899 41.261 92.16 92.16 92.16zM696.32 706.56v71.68c0 16.966-13.754 30.72-30.72 30.72h-430.080c-16.966 0-30.72-13.754-30.72-30.72v-71.68h491.52zM204.8 645.12v-399.36c0-16.966 13.754-30.72 30.72-30.72h532.48c16.966 0 30.72 13.754 30.72 30.72v368.64c0 16.966-13.754 30.72-30.72 30.72h-563.2z" />
<glyph unicode="&#xe903;" glyph-name="info-circle" d="M473.57 654.088c0-21.208 17.195-38.4 38.4-38.4 21.21 0 38.434 17.192 38.434 38.4s-17.195 38.4-38.4 38.4c-21.21 0-38.434-17.193-38.434-38.4zM512.004 333.261c-17.673 0-32 14.327-32 32v180.241c0 17.673 14.323 32 32 32 17.673 0 32-14.327 32-32v-180.241c0-17.673-14.327-32-32-32zM512 938.667c-235.642 0-426.667-191.025-426.667-426.667 0-235.639 191.025-426.667 426.667-426.667 235.639 0 426.667 191.027 426.667 426.667 0 235.642-191.027 426.667-426.667 426.667zM149.333 512c0 200.295 162.371 362.667 362.667 362.667s362.667-162.371 362.667-362.667c0-200.294-162.372-362.667-362.667-362.667s-362.667 162.372-362.667 362.667z" />
<glyph unicode="&#xe904;" glyph-name="rank-math" d="M1024 503.533l-168.827-7.602 29.767-46.545-281.489-179.932-279.273 117.317-324.178-135.137 22.474-53.948 301.658 125.695 284.969-119.689 307.4 196.4 29.767-46.545zM119.91 330.783l204.312 85.133 9.952-4.189v120.974h-214.264zM587.359 826.314v-520.977l16.091-6.649 198.217 126.448v401.177zM353.657 403.438l214.264-90.032v366.136h-214.264z" />
<glyph unicode="&#xe905;" glyph-name="google" d="M984 556.8h-459.2v-136h329.6c-17.6-188.8-171.2-270.4-320-270.4-188.8 0-356.8 147.2-356.8 360 0 204.8 160 360 356.8 360 150.4 0 241.6-97.6 241.6-97.6l92.8 97.6s-124.8 136-340.8 136c-284.8 1.6-502.4-236.8-502.4-494.4 0-249.6 204.8-496 507.2-496 267.2 0 459.2 180.8 459.2 451.2 1.6 56-8 89.6-8 89.6z" />
<glyph unicode="&#xe906;" glyph-name="copy" d="M803.2 75.2h-129.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h129.6c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM572.8 75.2h-124.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h124.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM812.8 755.2h-11.2v155.2c0 51.2-41.6 94.4-94.4 94.4h-593.6c-51.2 0-94.4-41.6-94.4-94.4v-593.6c0-51.2 41.6-94.4 94.4-94.4h152v-6.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v444.8c0 20.8 17.6 38.4 38.4 38.4h452.8c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-30.4 27.2zM265.6 660.8v-382.4h-152c-20.8 0-38.4 17.6-38.4 38.4v593.6c0 20.8 17.6 38.4 38.4 38.4h593.6c20.8 0 38.4-17.6 38.4-38.4v-155.2h-385.6c-51.2 0-94.4-41.6-94.4-94.4zM913.6 702.4c19.2 0 35.2-16 35.2-35.2 0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8c0 49.6-40 91.2-91.2 91.2-16 0-28.8-12.8-28.8-28.8s11.2-27.2 27.2-27.2zM976 595.2c-16 0-28.8-12.8-28.8-28.8v-124.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v124.8c0 16-12.8 28.8-28.8 28.8zM976 368c-16 0-28.8-12.8-28.8-28.8v-124.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v124.8c0 16-12.8 28.8-28.8 28.8zM976 139.2c-16 0-28.8-12.8-28.8-28.8 0-19.2-16-35.2-35.2-35.2-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8c49.6 0 91.2 40 91.2 91.2 1.6 17.6-11.2 30.4-27.2 30.4zM356.8 75.2c-19.2 0-35.2 16-35.2 35.2 0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-49.6 40-91.2 91.2-91.2 16 0 28.8 12.8 28.8 28.8s-11.2 27.2-27.2 27.2z" />
<glyph unicode="&#xe907;" glyph-name="send" d="M953.598 548.786c-6.4 11.2-16 19.2-27.2 25.6l-737.6 412.8c-12.8 6.4-27.2 9.6-41.6 8s-27.2-6.4-38.4-16c-11.2-9.6-19.2-22.4-22.4-35.2-4.8-14.4-3.2-28.8 1.6-43.2l137.6-388.8-137.6-388.8c-4.8-14.4-4.8-28.8-1.6-41.6 3.2-14.4 11.2-25.6 22.4-35.2s24-14.4 38.4-16c1.6 0 4.8 0 6.4 0 11.2 0 24 3.2 35.2 9.6l737.6 412.8c11.2 6.4 20.8 14.4 27.2 25.6s9.6 24 9.6 35.2c0 11.2-3.2 24-9.6 35.2zM156.798 923.186l668.8-374.4h-536l-132.8 374.4zM156.798 100.786l134.4 374.4h536l-670.4-374.4z" />
<glyph unicode="&#xe908;" glyph-name="enter-key" d="M984.615 945.231h-630.154c-21.701 0-39.385-17.684-39.385-39.385 0 0 0-275.692 0-354.462s-78.769-78.769-78.769-78.769h-196.923c-21.701 0-39.385-17.684-39.385-39.385v-315.077c0-21.701 17.684-39.385 39.385-39.385h945.231c21.701 0 39.385 17.684 39.385 39.385v787.692c0 21.701-17.684 39.385-39.385 39.385zM866.462 472.615c0-56.556-52.618-157.538-157.538-157.538h-141.233l70.617-70.617c15.399-15.399 15.399-40.29 0-55.69-7.68-7.68-17.762-11.54-27.845-11.54s-20.165 3.86-27.845 11.54l-137.846 137.846c-15.399 15.399-15.399 40.29 0 55.69l137.846 137.846c15.399 15.399 40.29 15.399 55.69 0s15.399-40.29 0-55.69l-70.617-70.617h141.233c55.060 0 78.769 59.786 78.769 78.769v78.769c0 21.78 17.605 39.385 39.385 39.385s39.385-17.605 39.385-39.385v-78.769z" />
<glyph unicode="&#xe909;" glyph-name="content-ai" horiz-adv-x="971" d="M946.149 337.134c-6.216 3.299-13.59 5.236-21.416 5.236-17.86 0-33.365-10.087-41.127-24.875l-0.122-0.255c-71.62-134.316-210.801-224.182-370.972-224.182-231.424 0-419.030 187.606-419.030 419.030s187.606 419.030 419.030 419.030c34.885 0 68.774-4.263 101.175-12.296l-2.88 0.604c9.56 34.736 33.501 62.584 64.849 77.212l0.734 0.307c-48.958 17.132-105.399 27.028-164.152 27.028-282.77 0-512-229.23-512-512s229.23-512 512-512c195.805 0 365.937 109.914 452.065 271.407l1.342 2.757c3.437 6.322 5.458 13.845 5.458 21.839 0 17.791-10.009 33.244-24.703 41.036l-0.252 0.122zM805.699 888.59c0-43.948-35.627-79.575-79.575-79.575s-79.575 35.627-79.575 79.575c0 43.948 35.627 79.575 79.575 79.575s79.575-35.627 79.575-79.575zM775.46 780.036c-14.472-6.825-31.436-10.809-49.33-10.809-0.002 0-0.005 0-0.007 0v0c-60.177 0.048-109.93 44.62-118.096 102.551l-0.073 0.632c-26.937 6.982-57.862 10.99-89.723 10.99-205.311 0-371.749-166.438-371.749-371.749s166.438-371.749 371.749-371.749c205.311 0 371.749 166.438 371.749 371.749 0 105.43-43.889 200.608-114.392 268.263l-0.128 0.122zM603.445 363.261c0-27.468-22.267-49.734-49.734-49.734s-49.734 22.267-49.734 49.734v4.244c-28.052-27.488-66.357-44.604-108.658-45.092l-0.094-0.001c-94.23 0-170.556 86.803-170.556 193.965s76.326 193.898 170.556 193.898c42.706-0.355 81.322-17.575 109.572-45.315l-0.024 0.023c3.108 24.641 23.934 43.508 49.167 43.508 26.754 0 48.554-21.209 49.503-47.731l0.002-0.087zM772.609 363.261c0-27.468-22.267-49.734-49.734-49.734s-49.734 22.267-49.734 49.734v297.412c0 27.468 22.267 49.734 49.734 49.734s49.734-22.267 49.734-49.734v0zM415.648 622.808c-53.979 0-97.679-47.679-97.679-106.1s43.7-106.498 97.679-106.498 97.679 47.679 97.679 106.498-43.7 106.1-97.679 106.1z" />
<glyph unicode="&#xe90a;" glyph-name="refresh-bulb-1" d="M116.628 612.69c-4.391-16.388 5.334-33.233 21.722-37.624s33.233 5.333 37.624 21.722c18.668 69.671 59.804 131.234 117.027 175.143s127.334 67.709 199.465 67.709c72.126 0 142.242-23.8 199.463-67.709 49.893-38.282 87.552-89.986 108.757-148.781l-68.612 38.636c-14.782 8.325-33.518 3.088-41.841-11.695s-3.088-33.516 11.694-41.841l126.185-71.055c7.102-3.998 15.499-5.009 23.343-2.818 7.848 2.195 14.504 7.414 18.502 14.516l71.049 126.199c8.323 14.784 3.084 33.517-11.698 41.84s-33.518 3.086-41.841-11.698l-31.162-55.35c-25.539 67.384-69.399 126.613-126.972 170.792-67.957 52.142-151.216 80.405-236.868 80.405-85.654 0-168.913-28.263-236.867-80.405s-116.802-125.25-138.971-207.985zM868.413 411.312c4.391 16.388-5.333 33.231-21.721 37.622s-33.235-5.333-37.626-21.721c-18.665-69.669-59.802-131.236-117.027-175.145-57.221-43.909-127.332-67.707-199.463-67.707-72.126 0-142.241 23.798-199.464 67.707-49.805 38.22-87.423 89.809-108.648 148.48l68.103-38.351c14.783-8.323 33.516-3.088 41.841 11.694 8.325 14.787 3.088 33.518-11.695 41.845l-126.185 71.053c-7.1 3.998-15.497 5.009-23.344 2.818-7.847-2.195-14.501-7.418-18.498-14.516l-71.050-126.198c-8.323-14.787-3.086-33.518 11.698-41.841s33.516-3.088 41.84 11.698l31.406 55.779c25.515-67.551 69.437-126.935 127.131-171.205 67.953-52.142 151.213-80.404 236.866-80.404 85.656 0 168.915 28.262 236.868 80.404s116.802 125.252 138.969 207.987zM568.975 443.998v-27.255c0-42.217-34.222-76.444-76.44-76.444-42.222 0-76.444 34.226-76.444 76.444v27.255c-33.645 23.929-55.592 63.234-55.592 107.667 0 72.919 59.114 132.033 132.035 132.033 72.917 0 132.030-59.113 132.030-132.033 0-44.433-21.946-83.739-55.591-107.667zM492.536 622.259c-38.99 0-70.595-31.607-70.595-70.593 0-38.965 31.564-70.554 70.517-70.595h0.152c38.953 0.041 70.517 31.629 70.517 70.595 0 38.986-31.605 70.593-70.59 70.593zM477.532 419.631v-2.888c0-8.286 6.717-15.004 15.004-15.004 8.282 0 15 6.717 15 15.004v2.888h-30.003z" />
<glyph unicode="&#xea20;" glyph-name="bot" d="M675.2 964.8c-46.4 25.6-100.8 40-158.4 40h-1.6c-83.2-1.6-161.6-27.2-220.8-76.8-78.4-64-123.2-160-123.2-260.8v-264c0-27.2 22.4-49.6 49.6-49.6h38.4c19.2-75.2 80-136 156.8-156.8l24-6.4v-121.6c0-27.2 22.4-49.6 49.6-49.6h316.8c27.2 0 49.6 22.4 49.6 49.6v598.4c-3.2 124.8-68.8 235.2-180.8 297.6zM796.8 75.2h-304v158.4l-64 17.6c-62.4 17.6-108.8 68.8-120 132.8l-3.2 25.6h-78.4v257.6c0 84.8 36.8 163.2 102.4 217.6 49.6 41.6 115.2 64 187.2 64 48 0 94.4-11.2 131.2-32 92.8-52.8 148.8-145.6 148.8-248v-593.6zM675.2 667.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-28.8c0 24-19.2 43.2-43.2 43.2v36.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-36.8h-65.6v36.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-36.8c-24 0-43.2-19.2-43.2-43.2h-28.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h28.8v-67.2h-28.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h28.8c0-24 19.2-43.2 43.2-43.2v-28.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v28.8h67.2v-28.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v28.8c24 0 43.2 19.2 43.2 43.2h28.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-28.8v67.2h27.2zM435.2 555.2v155.2h155.2v-155.2h-155.2z" />
<glyph unicode="&#xea2e;" glyph-name="mobile" d="M512 251.2c-32 0-56-25.6-56-56 0-32 25.6-56 56-56s56 25.6 56 56-24 56-56 56zM560 875.2h-96c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h96c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM720 1003.2h-416c-51.2 0-92.8-41.6-92.8-92.8v-800c0-51.2 41.6-92.8 92.8-92.8h416c51.2 0 92.8 41.6 92.8 92.8v801.6c0 51.2-41.6 91.2-92.8 91.2zM756.8 112c0-19.2-16-36.8-36.8-36.8h-416c-19.2 0-36.8 16-36.8 36.8v800c0 19.2 16 36.8 36.8 36.8h416c19.2 0 36.8-16 36.8-36.8v-800z" />
<glyph unicode="&#xea35;" glyph-name="seo-description" d="M91.2 225.6v572.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-572.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8zM288 564.8h409.6c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6h-409.6c-54.4 0-97.6-43.2-97.6-97.6v-30.4c0-52.8 43.2-97.6 97.6-97.6zM246.4 694.4c0 22.4 19.2 41.6 41.6 41.6h409.6c22.4 0 41.6-19.2 41.6-41.6v-30.4c0-22.4-19.2-41.6-41.6-41.6h-409.6c-22.4 0-41.6 19.2-41.6 41.6v30.4zM190.4 329.6c0-54.4 43.2-97.6 97.6-97.6h286.4c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6h-286.4c-54.4 0-97.6-43.2-97.6-97.6v-30.4zM246.4 361.6c0 22.4 19.2 41.6 41.6 41.6h286.4c22.4 0 41.6-19.2 41.6-41.6v-30.4c0-22.4-19.2-41.6-41.6-41.6h-286.4c-22.4 0-41.6 19.2-41.6 41.6v30.4zM891.2 1003.2h-812.8c-14.4 0-27.2-11.2-27.2-27.2s12.8-28.8 27.2-28.8h812.8c22.4 0 41.6-19.2 41.6-41.6v-788.8c0-22.4-19.2-41.6-41.6-41.6h-812.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h812.8c54.4 0 97.6 43.2 97.6 97.6v790.4c0 54.4-44.8 97.6-97.6 97.6z" />
<glyph unicode="&#xea3a;" glyph-name="role-manager" d="M454.4 587.2c118.4 0 214.4 92.8 214.4 208s-96 208-214.4 208-214.4-92.8-214.4-208 96-208 214.4-208zM454.4 947.2c88 0 158.4-68.8 158.4-152s-72-152-158.4-152c-88 0-158.4 68.8-158.4 152s70.4 152 158.4 152zM454.4 504c-208 0-377.6-168-377.6-376v-48c0-32 27.2-59.2 59.2-59.2h304c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-304c-1.6 0-3.2 1.6-3.2 3.2v48c0 174.4 144 318.4 321.6 318.4 16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM737.6 438.4c-115.2 0-209.6-94.4-209.6-209.6s94.4-209.6 209.6-209.6c115.2 0 209.6 94.4 209.6 209.6s-94.4 209.6-209.6 209.6zM737.6 382.4c35.2 0 68.8-12.8 94.4-33.6l-220.8-204.8c-16 24-25.6 52.8-25.6 84.8 0 84.8 67.2 153.6 152 153.6zM737.6 75.2c-32 0-62.4 9.6-88 27.2l219.2 203.2c12.8-22.4 20.8-49.6 20.8-76.8 1.6-84.8-67.2-153.6-152-153.6z" />
<glyph unicode="&#xea43;" glyph-name="calendar" d="M912 857.6h-97.6v46.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-46.4h-491.2v46.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-46.4h-96c-51.2 0-92.8-41.6-92.8-92.8v-580.8c0-51.2 41.6-92.8 92.8-92.8h800c51.2 0 92.8 41.6 92.8 92.8v580.8c0 51.2-41.6 92.8-92.8 92.8zM76.8 568h160v-182.4h-160v182.4zM291.2 568h192v-182.4h-192v182.4zM484.8 329.6v-180.8h-192v180.8h192zM540.8 329.6h192v-180.8h-192v180.8zM540.8 385.6v182.4h192v-182.4h-192zM788.8 568h160v-182.4h-160v182.4zM112 801.6h97.6v-44.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v44.8h492.8v-44.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v44.8h94.4c19.2 0 36.8-16 36.8-36.8v-140.8h-872v140.8c0 20.8 16 36.8 35.2 36.8zM76.8 184v145.6h160v-180.8h-124.8c-19.2 0-35.2 16-35.2 35.2zM912 148.8h-123.2v180.8h160v-145.6c0-19.2-17.6-35.2-36.8-35.2z" />
<glyph unicode="&#xea4f;" glyph-name="sitemap" d="M313.6 868.8c-16 0-28.8-12.8-28.8-28.8v-1.6c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v1.6c-1.6 16-14.4 28.8-28.8 28.8zM739.2 867.2h-81.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h81.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM928 275.2h-17.6v139.2c0 54.4-44.8 99.2-99.2 99.2h-272c0 3.2 1.6 4.8 1.6 8v158.4h275.2c41.6 0 76.8 33.6 76.8 76.8v160c0 41.6-33.6 76.8-76.8 76.8h-606.4c-41.6 0-76.8-33.6-76.8-76.8v-160c0-41.6 33.6-76.8 76.8-76.8h275.2v-158.4c0-3.2 0-4.8 1.6-8h-272c-54.4 0-99.2-44.8-99.2-99.2v-139.2h-19.2c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h91.2c41.6 0 76.8 33.6 76.8 76.8v91.2c0 41.6-33.6 76.8-76.8 76.8h-17.6v139.2c0 24 19.2 43.2 43.2 43.2h270.4v-184h-17.6c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h91.2c41.6 0 76.8 33.6 76.8 76.8v91.2c0 41.6-33.6 76.8-76.8 76.8h-17.6v185.6h270.4c24 0 43.2-19.2 43.2-43.2v-139.2h-17.6c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h92.8c41.6 0 76.8 33.6 76.8 76.8v91.2c0 40-35.2 75.2-76.8 75.2zM188.8 756.8v160c0 11.2 9.6 20.8 20.8 20.8h606.4c11.2 0 20.8-9.6 20.8-20.8v-160c0-11.2-9.6-20.8-20.8-20.8h-606.4c-11.2 1.6-20.8 9.6-20.8 20.8zM208 198.4v-91.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c11.2 0 20.8-9.6 20.8-20.8zM577.6 198.4v-91.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c12.8 0 20.8-9.6 20.8-20.8zM948.8 107.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c11.2 0 20.8-9.6 20.8-20.8v-91.2z" />
<glyph unicode="&#xea5a;" glyph-name="import" d="M468.8 372.8c9.6-9.6 24-16 36.8-16 14.4 0 27.2 4.8 36.8 16l118.4 118.4c11.2 11.2 11.2 28.8 0 40s-28.8 11.2-40 0l-88-88v406.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-406.4l-88 88c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l121.6-118.4zM934.4 540.8h-147.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h147.2c8 0 14.4-6.4 14.4-14.4v-187.2c0-44.8-36.8-80-80-80h-712c-44.8 0-80 36.8-80 80v188.8c0 8 6.4 14.4 14.4 14.4h147.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-148.8c-38.4 0-70.4-32-70.4-70.4v-187.2c0-75.2 60.8-136 136-136h710.4c75.2 0 136 60.8 136 136v185.6c3.2 38.4-28.8 70.4-67.2 70.4z" />
<glyph unicode="&#xea5d;" glyph-name="export" d="M371.2 694.4c6.4 0 14.4 3.2 19.2 8l92.8 92.8v-411.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v403.2l83.2-84.8c11.2-11.2 28.8-11.2 40 0s11.2 28.8 0 40l-118.4 118.4c-9.6 9.6-24 16-36.8 16-14.4 0-27.2-4.8-36.8-16l-120-118.4c-11.2-11.2-11.2-28.8 0-40 6.4-4.8 12.8-8 19.2-8zM934.4 540.8h-147.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h147.2c8 0 14.4-6.4 14.4-14.4v-187.2c0-44.8-36.8-80-80-80h-712c-44.8 0-80 36.8-80 80v188.8c0 8 6.4 14.4 14.4 14.4h147.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-148.8c-38.4 0-70.4-32-70.4-70.4v-187.2c0-75.2 60.8-136 136-136h710.4c75.2 0 136 60.8 136 136v185.6c3.2 38.4-28.8 70.4-67.2 70.4z" />
<glyph unicode="&#xea60;" glyph-name="settings" d="M513.6 708.8c-108.8 0-196.8-88-196.8-196.8s88-196.8 196.8-196.8c108.8 0 196.8 88 196.8 196.8-1.6 107.2-89.6 196.8-196.8 196.8zM513.6 371.2c-76.8 0-140.8 62.4-140.8 140.8s62.4 140.8 140.8 140.8 140.8-62.4 140.8-140.8c-1.6-78.4-64-140.8-140.8-140.8zM984 401.6l-99.2 54.4c3.2 20.8 4.8 40 4.8 59.2 0 22.4-1.6 41.6-4.8 60.8l100.8 56c17.6 9.6 24 30.4 16 49.6l-96 161.6c-9.6 16-30.4 22.4-49.6 16l-104-57.6c-6.4 4.8-12.8 11.2-19.2 16-17.6 16-35.2 30.4-59.2 41.6-4.8 1.6-8 8-8 12.8v62.4c0 38.4-32 70.4-70.4 70.4h-166.4c-38.4 0-70.4-32-70.4-70.4v-64c0-4.8-3.2-9.6-8-12.8-24-11.2-41.6-25.6-60.8-43.2-4.8-4.8-11.2-9.6-17.6-14.4l-92.8 52.8c-30.4 16-51.2 4.8-60.8-11.2l-91.2-156.8c-4.8-9.6-6.4-20.8-3.2-30.4s9.6-19.2 19.2-24l99.2-56c-3.2-17.6-4.8-36.8-4.8-59.2 0-20.8 1.6-40 3.2-59.2l-102.4-56c-17.6-9.6-24-30.4-16-49.6l94.4-161.6c9.6-16 30.4-22.4 49.6-16l104 57.6c6.4-4.8 12.8-9.6 17.6-14.4 19.2-16 35.2-30.4 60.8-41.6 4.8-1.6 8-8 8-12.8v-70.4c0-38.4 32-70.4 70.4-70.4h168c38.4 0 70.4 32 70.4 70.4v73.6c0 4.8 3.2 9.6 8 12.8 24 11.2 40 25.6 59.2 41.6 6.4 4.8 11.2 9.6 17.6 16l92.8-52.8c30.4-16 51.2-4.8 59.2 9.6l92.8 156.8c4.8 9.6 6.4 19.2 4.8 30.4 0 9.6-8 17.6-16 22.4zM865.6 233.6l-88 49.6c-19.2 11.2-43.2 8-59.2-4.8-8-6.4-14.4-12.8-20.8-17.6-17.6-14.4-28.8-25.6-46.4-33.6-24-11.2-40-36.8-40-62.4v-73.6c0-8-6.4-14.4-14.4-14.4h-168c-8 0-14.4 6.4-14.4 14.4v70.4c0 27.2-16 51.2-40 62.4-17.6 8-32 19.2-48 33.6-6.4 4.8-12.8 11.2-20.8 17.6-9.6 8-22.4 12.8-33.6 12.8-9.6 0-17.6-1.6-25.6-6.4l-88-49.6-75.2 128 84.8 48c20.8 11.2 30.4 33.6 28.8 56-1.6 16-3.2 33.6-3.2 51.2 0 19.2 1.6 35.2 3.2 49.6 4.8 24-6.4 48-27.2 59.2l-84.8 46.4 75.2 128 88-49.6c19.2-11.2 43.2-8 59.2 4.8 6.4 6.4 12.8 11.2 19.2 16 17.6 14.4 30.4 25.6 48 35.2 24 11.2 40 36.8 40 62.4v64c0 8 6.4 14.4 14.4 14.4h168c8 0 14.4-6.4 14.4-14.4v-62.4c0-27.2 16-51.2 40-62.4 17.6-8 30.4-19.2 46.4-33.6 6.4-6.4 14.4-11.2 22.4-17.6 16-12.8 40-16 59.2-4.8l88 49.6 75.2-128-84.8-46.4c-20.8-11.2-32-35.2-27.2-59.2 3.2-14.4 3.2-32 3.2-49.6 0-16-1.6-33.6-4.8-51.2-4.8-24 8-48 28.8-59.2l83.2-44.8-75.2-128z" />
<glyph unicode="&#xea67;" glyph-name="desktop" d="M912 969.6h-800c-51.2 0-91.2-41.6-91.2-91.2v-505.6c0-51.2 41.6-92.8 92.8-92.8h273.6l-46.4-171.2h-81.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h505.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-81.6l-46.4 171.2h275.2c51.2 0 92.8 41.6 92.8 92.8v505.6c0 49.6-41.6 91.2-92.8 91.2zM625.6 110.4h-227.2l46.4 171.2h136l44.8-171.2zM948.8 372.8c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v505.6c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-505.6z" />
<glyph unicode="&#xea6f;" glyph-name="htaccess" d="M300.8 566.4h307.2c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-307.2c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM300.8 396.8h307.2c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-307.2c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM723.2 283.2h-422.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h424c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-30.4 28.8zM929.6 817.6h-403.2l-46.4 134.4c-9.6 30.4-38.4 49.6-70.4 49.6h-315.2c-41.6 0-73.6-32-73.6-73.6v-832c0-40 33.6-73.6 73.6-73.6h836.8c40 0 73.6 33.6 73.6 73.6v648c0 40-33.6 73.6-75.2 73.6zM948.8 96c0-9.6-8-17.6-17.6-17.6h-836.8c-9.6 0-17.6 8-17.6 17.6v832c0 9.6 8 17.6 17.6 17.6h316.8c8 0 14.4-4.8 16-11.2l52.8-153.6c3.2-11.2 14.4-19.2 27.2-19.2h424c9.6 0 17.6-8 17.6-17.6v-648z" />
<glyph unicode="&#xea70;" glyph-name="robots" d="M659.2 561.6l-134.4 68.8c-8 4.8-17.6 4.8-25.6 0l-134.4-68.8c-9.6-4.8-14.4-14.4-14.4-25.6v-76.8c0-91.2 44.8-177.6 118.4-228.8l28.8-19.2c4.8-3.2 9.6-4.8 16-4.8s11.2 1.6 16 4.8l28.8 19.2c73.6 51.2 118.4 136 118.4 228.8v76.8c-1.6 11.2-8 20.8-17.6 25.6zM619.2 460.8c0-73.6-35.2-142.4-94.4-182.4l-12.8-9.6-12.8 8c-59.2 40-94.4 108.8-94.4 182.4v59.2l107.2 54.4 107.2-54.4v-57.6zM929.6 817.6h-403.2l-46.4 134.4c-9.6 30.4-38.4 49.6-70.4 49.6h-315.2c-41.6 0-73.6-32-73.6-73.6v-832c0-40 33.6-73.6 73.6-73.6h836.8c40 0 73.6 33.6 73.6 73.6v648c0 40-33.6 73.6-75.2 73.6zM948.8 96c0-9.6-8-17.6-17.6-17.6h-836.8c-9.6 0-17.6 8-17.6 17.6v832c0 9.6 8 17.6 17.6 17.6h316.8c8 0 14.4-4.8 16-11.2l52.8-153.6c3.2-11.2 14.4-19.2 27.2-19.2h424c9.6 0 17.6-8 17.6-17.6v-648z" />
<glyph unicode="&#xea76;" glyph-name="category" d="M968 691.2v92.8c0 36.8-30.4 67.2-67.2 67.2h-408l-9.6 25.6c-6.4 14.4-20.8 24-35.2 24h-316.8c-46.4-1.6-83.2-40-83.2-84.8v-608c0-46.4 36.8-83.2 83.2-83.2h761.6c46.4 0 83.2 36.8 83.2 83.2v459.2c0 8-3.2 16-8 24zM900.8 793.6c6.4 0 11.2-4.8 11.2-11.2v-76.8h-361.6l-35.2 88h385.6zM920 208c0-14.4-12.8-27.2-27.2-27.2h-761.6c-14.4 0-27.2 12.8-27.2 27.2v608c0 14.4 12.8 27.2 27.2 27.2h304l64-158.4c8-20.8 28.8-35.2 51.2-35.2h369.6v-441.6z" />
<glyph unicode="&#xea83;" glyph-name="link" d="M469.503 779.315l-132.214 130.64c-70.829 70.829-185.729 70.829-256.558 0-34.627-34.627-53.515-80.273-53.515-127.492s18.888-94.438 53.515-127.492l130.64-132.214c34.627-34.627 81.847-53.515 127.492-53.515s92.864 17.314 127.492 53.515c34.627 33.053 53.515 78.699 53.515 127.492 1.574 48.793-17.314 94.438-50.367 129.066zM250.72 562.107l-130.64 132.214c-23.61 23.61-37.775 55.089-37.775 89.716s12.592 64.533 37.775 89.716c25.184 25.184 56.663 36.201 89.716 36.201 31.479 0 64.533-12.592 89.716-36.201l130.64-130.64c23.61-23.61 36.201-55.089 36.201-89.716 0-26.758-7.87-50.367-22.036-70.829l-48.793 48.793c-11.018 11.018-28.332 11.018-39.349 0s-11.018-28.332 0-39.349l47.219-45.645c-48.793-31.479-111.752-25.184-152.675 15.74zM943.269 305.549l-132.214 130.64c-70.829 70.829-185.729 70.829-256.558 0-34.627-34.627-53.515-80.273-53.515-127.492 0-48.793 18.888-94.438 53.515-127.492l130.64-132.214c34.627-34.627 81.847-53.515 127.492-53.515s92.864 17.314 127.492 53.515c34.627 33.053 53.515 78.699 53.515 125.918 3.148 50.367-15.74 96.012-50.367 130.64zM903.919 88.341c-48.793-48.793-129.066-48.793-177.859 0l-130.64 132.214c-23.61 23.61-37.775 55.089-37.775 89.716 0 22.036 6.296 44.071 17.314 62.959l45.645-45.645c4.722-4.722 12.592-7.87 18.888-7.87s14.166 3.148 18.888 7.87c11.018 11.018 11.018 28.332 0 39.349l-47.219 47.219c22.036 14.166 47.219 22.036 72.403 22.036 31.479 0 64.533-12.592 89.716-36.201l130.64-130.64c23.61-23.61 36.201-56.663 36.201-89.716 0-36.201-12.592-67.681-36.201-91.29zM636.344 743.114c15.74 0 28.332 12.592 28.332 28.332v124.344c0 15.74-12.592 28.332-28.332 28.332s-28.332-12.592-28.332-28.332v-124.344c1.574-15.74 14.166-28.332 28.332-28.332zM774.854 604.604c0-15.74 12.592-28.332 28.332-28.332h124.344c15.74 0 28.332 12.592 28.332 28.332s-12.592 28.332-28.332 28.332h-124.344c-15.74 0-28.332-12.592-28.332-28.332zM697.729 664.415c7.87 0 14.166 3.148 18.888 7.87l105.456 107.030c11.018 11.018 11.018 28.332 0 39.349s-28.332 11.018-39.349 0l-105.456-107.030c-11.018-11.018-11.018-28.332 0-39.349 6.296-4.722 12.592-7.87 20.462-7.87zM387.656 215.833c-15.74 0-28.332-12.592-28.332-28.332v-124.344c0-15.74 12.592-28.332 28.332-28.332s28.332 12.592 28.332 28.332v124.344c-1.574 17.314-12.592 28.332-28.332 28.332zM208.223 355.916c0 15.74-12.592 28.332-28.332 28.332h-83.421c-15.74 0-28.332-12.592-28.332-28.332s12.592-28.332 28.332-28.332h83.421c15.74 0 28.332 12.592 28.332 28.332zM271.182 305.549l-105.456-105.456c-11.018-11.018-11.018-28.332 0-39.349 4.722-4.722 12.592-7.87 18.888-7.87s14.166 3.148 18.888 7.87l105.456 105.456c11.018 11.018 11.018 28.332 0 39.349-9.444 11.018-26.758 11.018-37.775 0z" />
<glyph unicode="&#xea87;" glyph-name="local-seo" d="M512 1003.2c-222.4 0-404.8-176-404.8-390.4 0-171.2 244.8-454.4 350.4-569.6 14.4-16 33.6-24 54.4-24s40 8 54.4 24c105.6 113.6 350.4 398.4 350.4 569.6 0 216-182.4 390.4-404.8 390.4zM524.8 81.6c-8-8-19.2-8-25.6 0-78.4 84.8-336 376-336 531.2 0 185.6 156.8 334.4 348.8 334.4s348.8-150.4 348.8-334.4c0-155.2-257.6-444.8-336-531.2zM512 772.8c-94.4 0-172.8-76.8-172.8-172.8 0-94.4 76.8-172.8 172.8-172.8s172.8 76.8 172.8 172.8c0 96-78.4 172.8-172.8 172.8zM512 484.8c-64 0-116.8 52.8-116.8 116.8s52.8 116.8 116.8 116.8 116.8-52.8 116.8-116.8-52.8-116.8-116.8-116.8z" />
<glyph unicode="&#xea8f;" glyph-name="misc" d="M512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8zM678.4 732.8h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM678.4 539.2h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM678.4 347.2h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xea9a;" glyph-name="software" d="M963.2 790.4c0 1.6-1.6 1.6-1.6 3.2-11.2 16-27.2 28.8-44.8 36.8l-356.8 163.2c-30.4 14.4-64 14.4-94.4 0l-358.4-163.2c-17.6-8-33.6-20.8-44.8-36.8-1.6-1.6-3.2-3.2-3.2-4.8 0 0 0-1.6-1.6-1.6-11.2-17.6-17.6-38.4-17.6-60.8v-414.4c0-43.2 24-81.6 62.4-100.8l358.4-179.2c16-8 33.6-12.8 51.2-12.8s35.2 4.8 51.2 12.8l356.8 179.2c38.4 19.2 62.4 57.6 62.4 100.8v414.4c0 24-6.4 44.8-19.2 64zM488 942.4c8 3.2 16 4.8 24 4.8s16-1.6 24-4.8l353.6-161.6-155.2-75.2-364.8 182.4 118.4 54.4zM512 596.8l-377.6 184 169.6 78.4 368-184-160-78.4zM129.6 262.4c-19.2 9.6-32 30.4-32 51.2v412.8c0 3.2 0 6.4 1.6 9.6l385.6-188.8v-465.6l-355.2 180.8zM926.4 313.6c0-22.4-12.8-41.6-32-51.2l-355.2-179.2v464l164.8 80v-150.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v177.6l164.8 81.6c0-3.2 1.6-6.4 1.6-9.6v-412.8z" />
<glyph unicode="&#xeaa0;" glyph-name="image" d="M138.232 998.076c-21.252-7.628-33.916-17.552-48.232-37.796l-12-16.968-1.188-422.656c-0.844-300.132 0.096-427.076 3.236-437.904 5.688-19.612 29.512-45.98 49.952-55.288 15.1-6.88 36.576-7.292 382.216-7.376l366.212-0.088 20.868 10.4c24.072 11.992 42.312 35.372 48.484 62.14 5.792 25.132 5.656 808.376-0.148 835.436-5.46 25.452-24.484 50.924-47.82 64.024l-17.812 10-364 0.868c-305.348 0.728-366.54-0.044-379.768-4.792M882.912 934.912l11.088-11.088 1.124-225.104 1.128-225.108-33.26-22.588c-18.288-12.428-54.796-40.972-81.124-63.436-56.872-48.524-88.132-69.576-115.296-77.644-43.172-12.82-76.42-4.54-116.196 28.936-143.732 120.968-215.088 126.672-367.916 29.412-21.304-13.556-41.368-25.66-44.596-26.896-5.12-1.968-5.864 34.776-5.864 289.288 0 316.544-0.836 304.312 21.428 313.384 4.716 1.92 168.28 3.14 363.484 2.712l354.908-0.78 11.092-11.088M606 788.528c-37.272-9.792-72.26-38.044-88.776-71.672-9.64-19.632-11.22-27.652-11.184-56.856 0.044-40.428 8.096-61.476 34.444-90.060 25.212-27.352 50.484-38.932 89.516-41.012 43.38-2.308 70.548 7.796 99.912 37.16 35.904 35.9 47.612 87.504 31.308 137.984-8.732 27.036-38.668 60.136-66.876 73.936-22.788 11.148-66.26 16.324-88.344 10.52M674.536 724.324c6.896-4.204 17.696-14.408 24-22.672 10.148-13.304 11.464-18.312 11.464-43.632 0-35.656-10.304-53.288-39.784-68.088-30.040-15.080-59.088-11.46-84.064 10.472-38.356 33.676-31.46 99.932 12.84 123.32 20.364 10.748 58.404 11.052 75.544 0.6M892 251.692v-152.308l-23.384-23.384h-712.004l-24.612 20.712v174.388l65 40.004c76.752 47.236 89.62 53.944 120.832 63.020 49.4 14.36 94.94-0.4 163.516-53.008 66.116-50.72 76.436-57.412 98.548-63.92 32.68-9.62 77.284-7.696 110.372 4.76 33.328 12.544 62.688 32.272 121.732 81.788 54.72 45.888 72.96 60.152 77 60.212 1.648 0.024 3-68.496 3-152.264" />
<glyph unicode="&#xeaa9;" glyph-name="analyzer" d="M48 753.6c16 0 28.8 12.8 28.8 28.8v139.2c0 9.6 8 16 16 16h137.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-137.6c-40 0-72-32-72-72v-139.2c0-17.6 11.2-30.4 27.2-30.4zM931.2 993.6h-137.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h137.6c9.6 0 16-8 16-16v-139.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v140.8c0 40-33.6 72-73.6 72zM976 270.4c-16 0-28.8-12.8-28.8-28.8v-139.2c0-9.6-8-16-16-16h-137.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h137.6c40 0 72 32 72 72v139.2c1.6 17.6-11.2 30.4-27.2 30.4zM230.4 86.4h-137.6c-9.6 0-16 8-16 16v139.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-139.2c0-40 32-72 72-72h137.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-27.2 27.2zM830.4 512c0 12.8-4.8 25.6-14.4 35.2-44.8 43.2-161.6 145.6-304 145.6s-259.2-102.4-304-145.6c-9.6-9.6-14.4-22.4-14.4-35.2s4.8-25.6 14.4-35.2c44.8-43.2 161.6-145.6 304-145.6s259.2 102.4 304 145.6c9.6 9.6 14.4 22.4 14.4 35.2zM512 387.2c-116.8 0-217.6 84.8-259.2 124.8 41.6 41.6 142.4 124.8 259.2 124.8s217.6-84.8 259.2-124.8c-41.6-41.6-142.4-124.8-259.2-124.8zM454.4 512c0-32 25.6-57.6 57.6-57.6s57.6 25.6 57.6 57.6-25.6 57.6-57.6 57.6-57.6-25.6-57.6-57.6z" />
<glyph unicode="&#xeaab;" glyph-name="search" d="M993.6 112l-281.6 227.2c116.8 152 105.6 369.6-33.6 508.8-73.6 73.6-169.6 113.6-273.6 113.6s-198.4-40-272-113.6c-150.4-150.4-150.4-396.8 0-547.2 73.6-73.6 169.6-113.6 273.6-113.6 100.8 0 196.8 38.4 268.8 108.8l283.2-230.4c4.8-4.8 11.2-6.4 17.6-6.4 8 0 16 3.2 22.4 9.6 9.6 16 8 33.6-4.8 43.2zM406.4 244.8c-88 0-171.2 35.2-233.6 97.6-129.6 129.6-129.6 339.2 0 467.2 62.4 62.4 145.6 97.6 233.6 97.6s171.2-33.6 233.6-97.6c129.6-129.6 129.6-339.2 0-467.2-62.4-64-145.6-97.6-233.6-97.6z" />
<glyph unicode="&#xeab3;" glyph-name="star-filled" d="M955.2 641.6l-289.6 44.8-131.2 275.2c-9.6 19.2-35.2 19.2-44.8 0l-131.2-276.8-288-43.2c-20.8-3.2-28.8-30.4-12.8-44.8l209.6-216-49.6-302.4c-3.2-20.8 17.6-38.4 36.8-25.6l260.8 142.4 259.2-142.4c17.6-9.6 40 6.4 35.2 25.6l-49.6 302.4 209.6 216c12.8 14.4 6.4 41.6-14.4 44.8z" />
<glyph unicode="&#xeab5;" glyph-name="star" d="M248 20.8c-12.8 0-25.6 3.2-36.8 11.2-20.8 14.4-32 40-27.2 65.6l43.2 272-187.2 193.6c-17.6 17.6-24 44.8-16 68.8s27.2 40 51.2 44.8l260.8 41.6 116.8 248c11.2 22.4 33.6 36.8 57.6 36.8 25.6 0 46.4-14.4 57.6-36.8l120-246.4 260.8-41.6c24-3.2 43.2-20.8 51.2-44.8s1.6-51.2-16-68.8l-188.8-193.6 44.8-273.6c4.8-25.6-6.4-51.2-27.2-65.6-19.2-14.4-44.8-16-67.2-4.8l-233.6 128-233.6-128c-9.6-4.8-19.2-6.4-30.4-6.4zM80 601.6l193.6-198.4c9.6-9.6 14.4-24 11.2-38.4l-44.8-276.8c-1.6-6.4 3.2-9.6 4.8-11.2 3.2-3.2 6.4-1.6 8 0l240 131.2c12.8 6.4 27.2 6.4 40 0l240-129.6c1.6 0 3.2-1.6 8 0 1.6 1.6 4.8 4.8 4.8 11.2l-44.8 278.4c-1.6 14.4 1.6 27.2 11.2 38.4l192 198.4c4.8 4.8 3.2 9.6 3.2 12.8 0 1.6-3.2 6.4-6.4 6.4l-268.8 41.6c-14.4 1.6-25.6 11.2-32 24l-120 252.8c-1.6 4.8-4.8 4.8-8 4.8-1.6 0-4.8-1.6-8-4.8l-120-254.4c-6.4-12.8-17.6-22.4-32-24l-267.2-43.2c-4.8 0-6.4-4.8-6.4-6.4-1.6-1.6-3.2-8 1.6-12.8z" />
<glyph unicode="&#xeaba;" glyph-name="trash" d="M811.2 886.4h-155.2v57.6c0 33.6-27.2 60.8-60.8 60.8h-166.4c-33.6-1.6-60.8-27.2-60.8-60.8v-57.6h-155.2c-33.6 0-60.8-27.2-60.8-60.8v-116.8c0-16 12.8-28.8 28.8-28.8h24v-542.4c0-65.6 54.4-120 120-120h376c65.6 0 120 54.4 120 120v545.6h24c16 0 28.8 12.8 28.8 28.8v116.8c-3.2 32-28.8 57.6-62.4 57.6zM424 944c0 1.6 1.6 4.8 4.8 4.8h166.4c1.6 0 4.8-1.6 4.8-4.8v-57.6h-176v57.6zM209.6 827.2c0 1.6 1.6 4.8 4.8 4.8h598.4c1.6 0 4.8-1.6 4.8-4.8v-88h-608v88zM763.2 139.2c0-35.2-28.8-64-64-64h-374.4c-35.2 0-64 28.8-64 64v544h504v-544zM512 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c1.6-16 12.8-27.2 28.8-27.2zM646.4 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c1.6-16 14.4-27.2 28.8-27.2zM377.6 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c0-16 12.8-27.2 28.8-27.2z" />
<glyph unicode="&#xeac4;" glyph-name="users" d="M328 566.4c97.6 0 177.6 76.8 177.6 172.8s-80 172.8-177.6 172.8-177.6-76.8-177.6-172.8 80-172.8 177.6-172.8zM328 856c67.2 0 121.6-52.8 121.6-116.8s-54.4-116.8-121.6-116.8-121.6 52.8-121.6 116.8 54.4 116.8 121.6 116.8zM744 488c83.2 0 152 65.6 152 147.2s-68.8 147.2-152 147.2-152-65.6-152-147.2c0-80 68.8-147.2 152-147.2zM744 728c52.8 0 96-41.6 96-91.2 0-51.2-43.2-91.2-96-91.2s-96 41.6-96 91.2 43.2 91.2 96 91.2zM752 452.8h-14.4c-49.6 0-97.6-14.4-139.2-41.6-40 60.8-110.4 100.8-188.8 100.8h-163.2c-124.8 0-225.6-102.4-225.6-227.2v-126.4c0-25.6 20.8-46.4 46.4-46.4h891.2c27.2 0 48 22.4 48 48v40c-1.6 139.2-115.2 252.8-254.4 252.8zM532.8 168h-456v116.8c0 94.4 76.8 171.2 171.2 171.2h161.6c94.4 0 171.2-76.8 171.2-171.2v-116.8h-48zM948.8 168h-312v116.8c0 25.6-4.8 51.2-12.8 75.2 33.6 24 72 36.8 113.6 36.8h14.4c108.8 0 196.8-88 196.8-196.8v-32z" />
<glyph unicode="&#xeb6a;" glyph-name="images" d="M369.6 360c49.6 0 91.2 40 91.2 89.6s-40 89.6-91.2 89.6-91.2-40-91.2-89.6c1.6-49.6 41.6-89.6 91.2-89.6zM369.6 484.8c19.2 0 35.2-16 35.2-33.6 0-19.2-16-33.6-35.2-33.6-17.6-1.6-33.6 14.4-33.6 32 0 19.2 16 35.2 33.6 35.2zM787.2 689.6c49.6 0 91.2 40 91.2 89.6s-40 89.6-91.2 89.6-91.2-40-91.2-89.6c0-49.6 41.6-89.6 91.2-89.6zM787.2 812.8c19.2 0 35.2-16 35.2-33.6s-16-33.6-35.2-33.6-35.2 16-35.2 33.6 16 33.6 35.2 33.6zM888 1000h-328c-64 0-115.2-51.2-115.2-115.2v-212.8h-324.8c-51.2 0-92.8-41.6-92.8-92.8v-464c0-51.2 41.6-92.8 92.8-92.8h376c51.2 0 92.8 41.6 92.8 92.8v236.8h300.8c64 0 115.2 51.2 115.2 115.2v416c0 65.6-52.8 116.8-116.8 116.8zM560 944h329.6c33.6 0 59.2-27.2 59.2-59.2v-241.6c-12.8-8-32-20.8-35.2-24-14.4-9.6-28.8-22.4-43.2-33.6-41.6-36.8-70.4-57.6-108.8-43.2-6.4 3.2-14.4 9.6-22.4 16l-6.4 4.8c-24 19.2-51.2 41.6-84.8 51.2-20.8 6.4-43.2 6.4-65.6 1.6-12.8 32-44.8 56-81.6 57.6v211.2c-1.6 33.6 25.6 59.2 59.2 59.2zM120 616h376c19.2 0 36.8-16 36.8-36.8v-264c-8-4.8-19.2-12.8-35.2-24-14.4-9.6-28.8-22.4-43.2-33.6-41.6-36.8-70.4-57.6-108.8-43.2-8 3.2-16 9.6-25.6 17.6l-3.2 3.2c-24 19.2-51.2 41.6-84.8 51.2-56 17.6-105.6-11.2-147.2-36.8v329.6c-1.6 20.8 14.4 36.8 35.2 36.8zM496 80h-376c-19.2 0-36.8 16-36.8 36.8v65.6c8 4.8 14.4 9.6 22.4 12.8 38.4 24 73.6 46.4 108.8 35.2 24-6.4 44.8-24 65.6-41.6l3.2-3.2c11.2-9.6 24-20.8 41.6-27.2 14.4-4.8 28.8-8 43.2-8 49.6 0 89.6 33.6 121.6 62.4 12.8 11.2 25.6 22.4 36.8 30.4 1.6 1.6 3.2 1.6 4.8 3.2v-131.2c0-19.2-16-35.2-35.2-35.2zM888 408h-300.8v150.4c16 4.8 28.8 4.8 43.2 1.6 24-6.4 44.8-24 65.6-41.6l4.8-3.2c11.2-9.6 24-20.8 40-25.6s28.8-8 43.2-8c49.6 0 89.6 33.6 121.6 62.4 12.8 11.2 25.6 22.4 38.4 30.4 1.6 1.6 3.2 1.6 4.8 3.2v-108.8c0-33.6-27.2-60.8-60.8-60.8z" />
<glyph unicode="&#xeb70;" glyph-name="redirection" d="M971.2 588.8l-384 384c-20.8 20.8-48 32-76.8 32s-56-11.2-76.8-32l-384-384c-20.8-20.8-32-48-32-76.8s11.2-56 32-76.8l384-384c20.8-20.8 48-32 76.8-32s56 11.2 76.8 32l384 384c43.2 43.2 43.2 110.4 0 153.6zM932.8 475.2l-384-384c-20.8-20.8-52.8-20.8-73.6 0l-384 384c-9.6 9.6-16 22.4-16 36.8s4.8 27.2 16 36.8l384 384c9.6 9.6 22.4 16 36.8 16s27.2-4.8 36.8-16l384-384c19.2-20.8 19.2-52.8 0-73.6zM540.8 667.2c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l88-88h-220.8c-16 0-28.8-12.8-28.8-28.8v-136c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v107.2h193.6l-88-88c-11.2-11.2-11.2-28.8 0-40 4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l136 136c11.2 11.2 11.2 28.8 0 40l-136 137.6z" />
<glyph unicode="&#xeb73;" glyph-name="video" d="M880 1003.2h-736c-68.8 0-123.2-54.4-123.2-123.2v-736c0-68.8 56-124.8 124.8-124.8h736c68.8 0 124.8 56 124.8 124.8v736c-1.6 68.8-57.6 123.2-126.4 123.2zM248 539.2h-171.2v180.8h172.8v-180.8zM76.8 483.2h172.8v-179.2h-172.8v179.2zM304 947.2h416v-872h-416v872zM948.8 539.2h-172.8v180.8h172.8v-180.8zM776 483.2h172.8v-179.2h-172.8v179.2zM948.8 880v-104h-172.8v171.2h104c36.8 0 68.8-30.4 68.8-67.2zM144 947.2h104v-172.8h-171.2v105.6c0 36.8 30.4 67.2 67.2 67.2zM76.8 144v104h172.8v-172.8h-105.6c-36.8 0-67.2 32-67.2 68.8zM880 75.2h-104v172.8h172.8v-104c0-36.8-32-68.8-68.8-68.8zM636.8 555.2l-152 92.8c-16 9.6-35.2 9.6-51.2 1.6-16-9.6-25.6-25.6-25.6-44.8v-184c0-17.6 9.6-35.2 25.6-44.8 8-4.8 16-6.4 25.6-6.4s17.6 3.2 25.6 8l152 92.8c16 9.6 24 25.6 24 43.2s-8 32-24 41.6zM464 430.4v163.2l136-81.6-136-81.6z" />
<glyph unicode="&#xeb97;" glyph-name="schema" d="M419.2 582.4l-11.2-64c-1.6-11.2 3.2-20.8 11.2-27.2s20.8-6.4 28.8-1.6l57.6 30.4 57.6-30.4c4.8-1.6 8-3.2 12.8-3.2 6.4 0 11.2 1.6 16 4.8 8 6.4 12.8 17.6 11.2 27.2l-11.2 64 46.4 44.8c8 8 9.6 19.2 6.4 28.8s-12.8 17.6-22.4 19.2l-64 9.6-28.8 59.2c-4.8 9.6-14.4 16-25.6 16s-20.8-6.4-25.6-16l-28.8-59.2-64-9.6c-11.2-1.6-19.2-9.6-22.4-19.2s0-20.8 6.4-28.8l49.6-44.8zM475.2 632c9.6 1.6 17.6 6.4 20.8 16l9.6 20.8 9.6-20.8c4.8-8 11.2-14.4 20.8-16l22.4-3.2-16-16c-6.4-6.4-9.6-16-8-24l3.2-22.4-20.8 11.2c-8 4.8-17.6 4.8-25.6 0l-20.8-11.2 3.2 22.4c1.6 9.6-1.6 17.6-8 24l-16 16 25.6 3.2zM928 886.4h-832c-41.6 0-76.8-33.6-76.8-76.8v-596.8c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v596.8c0 43.2-35.2 76.8-76.8 76.8zM774.4 193.6h-534.4c3.2 11.2 3.2 20.8 3.2 32 0 76.8-62.4 139.2-139.2 139.2-9.6 0-19.2-1.6-28.8-3.2v318.4c9.6-1.6 19.2-3.2 28.8-3.2 76.8 0 139.2 62.4 139.2 139.2v14.4h528v-14.4c0-76.8 62.4-139.2 139.2-139.2 12.8 0 25.6 1.6 38.4 6.4v-323.2c-12.8 3.2-25.6 6.4-38.4 6.4-76.8 0-139.2-62.4-139.2-139.2 0-12.8 0-22.4 3.2-33.6zM948.8 809.6v-67.2c-11.2-6.4-25.6-9.6-38.4-9.6-44.8 0-83.2 36.8-83.2 83.2 0 4.8 0 9.6 1.6 14.4h99.2c11.2 0 20.8-9.6 20.8-20.8zM96 830.4h89.6c0-4.8 1.6-9.6 1.6-14.4 0-46.4-36.8-83.2-83.2-83.2-9.6 0-19.2 1.6-28.8 4.8v72c1.6 11.2 9.6 20.8 20.8 20.8zM76.8 214.4v89.6c9.6 3.2 19.2 4.8 28.8 4.8 44.8 0 83.2-36.8 83.2-83.2 0-11.2-1.6-20.8-6.4-30.4v-1.6h-86.4c-11.2 0-19.2 9.6-19.2 20.8zM928 193.6h-94.4v1.6c-4.8 9.6-6.4 20.8-6.4 30.4 0 46.4 36.8 83.2 83.2 83.2 14.4 0 27.2-3.2 38.4-9.6v-84.8c0-11.2-9.6-20.8-20.8-20.8zM728 417.6h-443.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h443.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM622.4 313.6h-230.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h228.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-27.2 28.8z" />
<glyph unicode="&#xeb99;" glyph-name="adsense" d="M912 942.4h-800c-51.2 0-92.8-41.6-92.8-92.8v-360c0-51.2 41.6-92.8 92.8-92.8h57.6v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h259.2v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h259.2v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h51.2c51.2 0 92.8 41.6 92.8 92.8v360c0 51.2-41.6 92.8-92.8 92.8zM948.8 489.6c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v360c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-360zM398.4 806.4c-4.8 9.6-14.4 16-25.6 16s-20.8-6.4-25.6-16l-112-228.8c-6.4-14.4-1.6-30.4 12.8-36.8 3.2-1.6 8-3.2 12.8-3.2 9.6 0 20.8 6.4 25.6 16l86.4 176 86.4-176c6.4-14.4 24-19.2 36.8-12.8 14.4 6.4 19.2 24 12.8 36.8l-110.4 228.8zM667.2 825.6h-54.4c-16 0-28.8-12.8-28.8-28.8v-233.6c0-16 12.8-28.8 28.8-28.8h54.4c68.8 0 124.8 56 124.8 124.8v41.6c-1.6 68.8-57.6 124.8-124.8 124.8zM734.4 659.2c0-38.4-30.4-68.8-68.8-68.8h-25.6v179.2h27.2c38.4 0 68.8-30.4 68.8-68.8v-41.6z" />
<glyph unicode="&#xeb9d;" glyph-name="tick" d="M996.8 820.8c-11.2 11.2-28.8 11.2-40 0l-584-566.4c-4.8-4.8-11.2-4.8-16 0l-289.6 281.6c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l289.6-281.6c12.8-12.8 30.4-19.2 46.4-19.2 17.6 0 33.6 6.4 46.4 19.2l584 566.4c12.8 11.2 12.8 28.8 3.2 40z" />
<glyph unicode="&#xeb9f;" glyph-name="circle-plus" d="M681.6 540.8s-1.6 0 0 0h-140.8v140.8c0 16-12.8 27.2-28.8 27.2s-27.2-12.8-27.2-28.8v-140.8h-140.8c-16 0-27.2-12.8-27.2-28.8s12.8-27.2 28.8-27.2h140.8v-140.8c0-16 12.8-27.2 28.8-27.2s27.2 12.8 27.2 28.8v140.8h140.8c16 0 27.2 12.8 27.2 28.8-1.6 14.4-14.4 27.2-28.8 27.2zM512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8z" />
<glyph unicode="&#xeba4;" glyph-name="eye" d="M512 624c-62.4 0-112-51.2-112-112s51.2-112 112-112 112 51.2 112 112-49.6 112-112 112zM512 456c-30.4 0-56 25.6-56 56s25.6 56 56 56 56-25.6 56-56-25.6-56-56-56zM998.4 531.2c-105.6 166.4-288 265.6-486.4 265.6s-380.8-99.2-486.4-265.6c-6.4-11.2-6.4-25.6 0-36.8 105.6-166.4 288-265.6 486.4-265.6s380.8 99.2 486.4 265.6c8 11.2 8 25.6 0 36.8zM512 284.8c-174.4 0-336 84.8-432 228.8 96 142.4 257.6 227.2 432 227.2s336-84.8 432-227.2c-96-144-257.6-228.8-432-228.8z" />
<glyph unicode="&#xebac;" glyph-name="heart-filled" d="M512 102.4c-12.8 0-25.6 4.8-35.2 12.8-36.8 32-73.6 62.4-105.6 89.6-92.8 78.4-174.4 147.2-230.4 214.4-64 76.8-92.8 147.2-92.8 225.6 0 75.2 25.6 145.6 73.6 196.8s113.6 80 185.6 80c52.8 0 102.4-17.6 145.6-49.6 17.6-12.8 32-28.8 46.4-46.4 6.4-8 17.6-8 24 0 14.4 17.6 30.4 32 46.4 46.4 43.2 33.6 92.8 49.6 145.6 49.6 72 0 137.6-28.8 185.6-80s73.6-121.6 73.6-196.8c0-78.4-28.8-148.8-92.8-224-56-67.2-137.6-136-230.4-214.4-32-27.2-68.8-57.6-105.6-89.6-8-9.6-20.8-14.4-33.6-14.4z" />
<glyph unicode="&#xebb4;" glyph-name="info" d="M436.8 913.6c0-34.463 27.937-62.4 62.4-62.4s62.4 27.937 62.4 62.4v0c0 34.463-27.937 62.4-62.4 62.4s-62.4-27.937-62.4-62.4v0M619.2 75.2h-80v620.8c0 35.2-28.8 64-64 64h-72c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h72c4.8 0 8-3.2 8-8v-619.2h-80c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h216c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xebbc;" glyph-name="howto" d="M220.8 891.2h-140.8c-33.6 0-60.8-27.2-60.8-60.8v-140.8c0-33.6 27.2-60.8 60.8-60.8h140.8c33.6 0 60.8 27.2 60.8 60.8v140.8c-1.6 33.6-28.8 60.8-60.8 60.8zM224 691.2c0-1.6-1.6-4.8-4.8-4.8h-139.2c-1.6 0-4.8 1.6-4.8 4.8v140.8c0 1.6 1.6 4.8 4.8 4.8h140.8c1.6 0 4.8-1.6 4.8-4.8v-140.8zM220.8 393.6h-140.8c-33.6 0-60.8-27.2-60.8-60.8v-140.8c0-33.6 27.2-60.8 60.8-60.8h140.8c33.6 0 60.8 27.2 60.8 60.8v140.8c-1.6 33.6-28.8 60.8-60.8 60.8zM224 193.6c0-1.6-1.6-4.8-4.8-4.8h-139.2c-1.6 0-4.8 1.6-4.8 4.8v140.8c0 1.6 1.6 4.8 4.8 4.8h140.8c1.6 0 4.8-1.6 4.8-4.8v-140.8zM457.6 803.2h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM976 718.4h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM976 361.6h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM976 220.8h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xebbd;" glyph-name="faq" d="M187.2 974.4h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v108.8c-1.6 33.6-28.8 59.2-60.8 59.2zM190.4 808c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM408 833.6h568c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-568c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM187.2 635.2h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v107.2c-1.6 33.6-28.8 60.8-60.8 60.8zM190.4 467.2c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM976 548.8h-568c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h568c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM187.2 276.8h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v107.2c-1.6 33.6-28.8 60.8-60.8 60.8zM190.4 108.8c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM976 190.4h-568c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h568c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xebc8;" glyph-name="music" d="M979.2 897.6c-16 14.4-38.4 22.4-60.8 20.8l-571.2-43.2c-41.6-3.2-73.6-38.4-73.6-80v-491.2c-27.2 16-60.8 25.6-99.2 25.6-86.4 0-155.2-49.6-155.2-112s67.2-112 155.2-112 155.2 49.6 155.2 112v374.4l619.2 48v-291.2c-27.2 16-60.8 25.6-99.2 25.6-86.4 0-155.2-49.6-155.2-112s67.2-112 155.2-112 155.2 49.6 155.2 112v579.2c0 19.2-9.6 41.6-25.6 56zM174.4 161.6c-57.6 0-99.2 30.4-99.2 56s40 56 99.2 56 99.2-30.4 99.2-56-41.6-56-99.2-56zM849.6 203.2c-57.6 0-99.2 30.4-99.2 56s40 56 99.2 56 99.2-30.4 99.2-56-41.6-56-99.2-56zM329.6 795.2c0 12.8 9.6 22.4 22.4 24l572.8 43.2c6.4 0 11.2-1.6 16-6.4s8-11.2 8-17.6v-144l-619.2-48v148.8z" />
<glyph unicode="&#xebce;" glyph-name="plus" d="M976 539.2h-435.2v436.8c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-436.8h-436.8c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h436.8v-435.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v435.2h433.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2z" />
<glyph unicode="&#xebd2;" glyph-name="help" d="M512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8zM539.2 833.6c-46.4 8-92.8-4.8-126.4-33.6-35.2-28.8-56-72-56-118.4 0-17.6 3.2-35.2 9.6-51.2 4.8-14.4 20.8-22.4 35.2-17.6s22.4 20.8 17.6 35.2c-3.2 11.2-6.4 20.8-6.4 33.6 0 28.8 12.8 56 35.2 75.2s51.2 27.2 81.6 20.8c40-6.4 72-40 78.4-78.4 8-46.4-16-91.2-59.2-108.8-40-16-65.6-56-65.6-102.4v-102.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v102.4c0 22.4 12.8 43.2 30.4 49.6 67.2 27.2 105.6 97.6 92.8 171.2-11.2 62.4-62.4 113.6-124.8 124.8zM513.6 275.2h-4.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h4.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xebe1;" glyph-name="instant-indexing" d="M403.2 19.2c-6.4 0-11.2 1.6-17.6 3.2-20.8 8-32 27.2-28.8 49.6l41.6 348.8-137.6-27.2c-19.2-3.2-38.4 4.8-48 20.8-11.2 16-9.6 36.8 1.6 52.8l369.6 516.8c12.8 17.6 35.2 24 56 16s32-28.8 28.8-49.6l-49.6-361.6 142.4 35.2c19.2 4.8 38.4-3.2 49.6-19.2s11.2-38.4-1.6-54.4l-371.2-512c-8-11.2-20.8-19.2-35.2-19.2zM408 480c11.2 0 24-4.8 32-12.8 11.2-9.6 16-25.6 14.4-40l-38.4-328 336 464-131.2-33.6c-14.4-3.2-30.4 0-43.2 11.2-11.2 11.2-17.6 25.6-14.4 41.6l46.4 339.2-339.2-467.2 128 25.6h9.6z" />
<glyph unicode="&#xebe8;" glyph-name="404" d="M977.6 352l-355.2 483.2c-25.6 35.2-67.2 56-110.4 56-44.8 0-84.8-20.8-110.4-56l-355.2-483.2c-30.4-41.6-35.2-97.6-11.2-144s70.4-75.2 123.2-75.2h708.8c52.8 0 99.2 28.8 123.2 75.2s17.6 102.4-12.8 144zM939.2 233.6c-14.4-27.2-41.6-44.8-72-44.8h-708.8c-32 0-59.2 16-72 44.8-14.4 27.2-11.2 59.2 6.4 84.8l353.6 483.2c16 20.8 40 33.6 65.6 33.6s49.6-12.8 65.6-33.6l353.6-483.2c19.2-25.6 22.4-56 8-84.8zM512 416c16 0 28.8 12.8 28.8 28.8v179.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-180.8c0-14.4 12.8-27.2 28.8-27.2zM512 363.2c-25.6 0-46.4-20.8-46.4-46.4s20.8-46.4 46.4-46.4c25.6 0 46.4 20.8 46.4 46.4s-20.8 46.4-46.4 46.4z" />
<glyph unicode="&#xebea;" glyph-name="cross" d="M552 512l443.2 444.8c11.2 11.2 11.2 28.8 0 40s-28.8 11.2-40 0l-443.2-444.8-444.8 443.2c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l444.8-443.2-443.2-444.8c-11.2-11.2-11.2-28.8 0-40 4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l444.8 444.8 443.2-444.8c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8c11.2 11.2 11.2 28.8 0 40l-441.6 444.8z" />
<glyph unicode="&#xebf7;" glyph-name="fact-check" d="M913.6 913.6h-803.2c-49.6 0-91.2-40-91.2-91.2v-462.4c0-49.6 40-91.2 91.2-91.2h243.2l134.4-148.8c4.8-6.4 12.8-9.6 20.8-9.6s16 3.2 20.8 9.6l137.6 150.4h244.8c49.6 0 91.2 40 91.2 91.2v460.8c1.6 49.6-40 91.2-89.6 91.2zM948.8 360c0-19.2-16-35.2-35.2-35.2h-257.6c-8 0-16-3.2-20.8-9.6l-126.4-136-123.2 136c-4.8 6.4-12.8 9.6-20.8 9.6h-256c-19.2 0-35.2 16-35.2 35.2v462.4c0 19.2 16 35.2 35.2 35.2h803.2c19.2 0 35.2-16 35.2-35.2v-462.4zM627.2 689.6l-169.6-171.2-60.8 60.8c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l80-80c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l190.4 190.4c11.2 11.2 11.2 28.8 0 40-9.6 11.2-27.2 11.2-38.4 0z" />
<glyph unicode="&#xec3b;" glyph-name="recipe" d="M809.6 784c-27.2 0-54.4-6.4-80-17.6-8 118.4-104 211.2-219.2 211.2s-211.2-92.8-219.2-209.6c-24 9.6-49.6 16-75.2 16-108.8 0-195.2-89.6-195.2-201.6 0-100.8 72-185.6 166.4-198.4v-243.2c0-28.8 12.8-54.4 33.6-72s49.6-25.6 76.8-20.8l57.6 9.6c104 17.6 208 17.6 312 0l57.6-9.6c4.8-1.6 9.6-1.6 16-1.6 22.4 0 44.8 8 62.4 22.4 20.8 17.6 33.6 44.8 33.6 72v243.2c94.4 14.4 166.4 97.6 166.4 198.4 1.6 112-86.4 201.6-193.6 201.6zM766.4 112c-9.6-8-20.8-11.2-32-9.6l-57.6 9.6c-54.4 9.6-110.4 12.8-164.8 12.8s-110.4-4.8-164.8-12.8l-57.6-9.6c-11.2-1.6-22.4 1.6-32 9.6s-14.4 19.2-14.4 30.4v84.8l113.6 19.2c104 17.6 208 17.6 312 0l113.6-19.2v-84.8c-1.6-12.8-6.4-24-16-30.4zM809.6 438.4c-16 0-28.8-12.8-28.8-28.8v-126.4l-104 17.6c-1.6 0-4.8 0-6.4 1.6v129.6c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-123.2c-67.2 6.4-136 6.4-203.2 0v123.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-131.2c-1.6 0-4.8 0-6.4-1.6l-104-17.6v126.4c0 16-12.8 28.8-28.8 28.8-76.8 0-139.2 65.6-139.2 145.6s62.4 145.6 139.2 145.6c32 0 62.4-11.2 86.4-32 9.6-8 22.4-8 32-3.2 9.6 6.4 16 17.6 12.8 28.8-1.6 8-1.6 17.6-1.6 28.8 0 94.4 73.6 171.2 164.8 171.2s164.8-76.8 164.8-171.2c0-11.2-1.6-22.4-3.2-32-1.6-11.2 3.2-24 14.4-30.4s24-4.8 32 3.2c25.6 24 57.6 36.8 91.2 36.8 76.8 0 139.2-65.6 139.2-145.6 1.6-80-62.4-144-137.6-144z" />
<glyph unicode="&#xec56;" glyph-name="restaurant" d="M958.4 734.4l-131.2 232c-12.8 22.4-36.8 36.8-62.4 36.8h-505.6c-25.6 0-49.6-14.4-62.4-36.8l-131.2-232c0-1.6-1.6-1.6-1.6-3.2-1.6-3.2-1.6-6.4-1.6-9.6v-628.8c0-40 32-72 72-72h753.6c40 0 72 32 72 72v627.2c1.6 4.8 0 9.6-1.6 14.4zM272 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM483.2 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM694.4 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM904 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM246.4 939.2c3.2 4.8 8 8 14.4 8h504c6.4 0 11.2-3.2 14.4-8l107.2-190.4h-745.6l105.6 190.4zM288 75.2v265.6c0 9.6 8 16 16 16h80c9.6 0 16-8 16-16v-264h-112zM889.6 75.2h-433.6v265.6c0 40-32 72-72 72h-80c-40 0-72-32-72-72v-264h-96c-9.6 0-16 8-16 16v499.2c22.4-16 48-25.6 76.8-25.6 43.2 0 81.6 20.8 105.6 51.2 24-32 62.4-51.2 105.6-51.2s81.6 20.8 105.6 51.2c24-32 62.4-51.2 105.6-51.2s81.6 20.8 105.6 51.2c24-32 62.4-51.2 105.6-51.2 28.8 0 56 9.6 76.8 25.6v-500.8c-1.6-8-9.6-16-17.6-16zM742.4 412.8h-81.6c-27.2 0-49.6-22.4-49.6-49.6v-81.6c0-27.2 22.4-49.6 49.6-49.6h81.6c27.2 0 49.6 22.4 49.6 49.6v81.6c0 27.2-22.4 49.6-49.6 49.6zM736 286.4h-70.4v70.4h70.4v-70.4z" />
<glyph unicode="&#xec64;" glyph-name="post-format" d="M857.6 844.8l-156.8 134.4c-19.2 16-43.2 25.6-67.2 25.6h-400c-57.6 0-104-46.4-104-104v-777.6c0-57.6 46.4-104 104-104h206.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-206.4c-25.6 0-48 20.8-48 48v776c0 25.6 20.8 48 48 48h400c11.2 0 22.4-4.8 30.4-11.2l156.8-134.4c11.2-9.6 16-22.4 16-36.8v-675.2c0-8-6.4-16-16-16-16 0-27.2-12.8-27.2-28.8s12.8-28.8 28.8-28.8c40 0 72 32 72 72v676.8c0 30.4-14.4 59.2-36.8 78.4zM308.8 779.2h220.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-220.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM308.8 636.8h377.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-377.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM308.8 499.2h377.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-377.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM627.2 425.6c-68.8 0-126.4-56-126.4-126.4 0-36.8 16-72 43.2-94.4v-156.8c0-9.6 4.8-19.2 14.4-24 4.8-3.2 9.6-3.2 14.4-3.2s9.6 1.6 14.4 3.2l41.6 24 41.6-24c8-4.8 19.2-4.8 27.2 0s14.4 14.4 14.4 24v156.8c25.6 22.4 43.2 56 43.2 94.4-1.6 70.4-57.6 126.4-128 126.4zM627.2 369.6c38.4 0 70.4-32 70.4-70.4s-32-70.4-70.4-70.4-70.4 32-70.4 70.4 32 70.4 70.4 70.4zM654.4 96l-12.8 8c-8 4.8-19.2 4.8-27.2 0l-14.4-8v80c8-1.6 17.6-3.2 27.2-3.2s17.6 1.6 27.2 3.2v-80z" />
<glyph unicode="&#xec66;" glyph-name="service" d="M892.8 937.6h-761.6c-60.8 0-110.4-49.6-110.4-110.4v-326.4c0-60.8 49.6-110.4 110.4-110.4h1.6c16-44.8 60.8-78.4 112-78.4s96 32 112 78.4h310.4c16-44.8 60.8-78.4 112-78.4s96 32 112 78.4h1.6c60.8 0 110.4 49.6 110.4 110.4v326.4c1.6 60.8-48 110.4-110.4 110.4zM244.8 369.6c-33.6 0-62.4 25.6-62.4 57.6s27.2 57.6 62.4 57.6 62.4-25.6 62.4-57.6-28.8-57.6-62.4-57.6zM779.2 369.6c-33.6 0-62.4 25.6-62.4 57.6s27.2 57.6 62.4 57.6 62.4-25.6 62.4-57.6-27.2-57.6-62.4-57.6zM948.8 500.8c0-28.8-22.4-52.8-52.8-54.4-9.6 52.8-57.6 94.4-116.8 94.4-57.6 0-107.2-40-116.8-94.4h-300.8c-9.6 52.8-57.6 94.4-116.8 94.4-57.6 0-107.2-40-116.8-94.4-28.8 1.6-52.8 24-52.8 54.4v326.4c0 30.4 24 54.4 54.4 54.4h763.2c30.4 0 54.4-24 54.4-54.4v-326.4zM244.8 249.6c-89.6 0-174.4-44.8-220.8-118.4-8-12.8-4.8-30.4 8-38.4s30.4-4.8 38.4 8c36.8 57.6 102.4 92.8 172.8 92.8 72 0 136-35.2 172.8-92.8 4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8 12.8 8 17.6 25.6 8 38.4-44.8 73.6-126.4 118.4-217.6 118.4zM779.2 249.6c-89.6 0-174.4-44.8-220.8-118.4-8-12.8-4.8-30.4 8-38.4s30.4-4.8 38.4 8c36.8 57.6 102.4 92.8 172.8 92.8s136-35.2 172.8-92.8c4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8 12.8 8 17.6 25.6 8 38.4-44.8 73.6-126.4 118.4-217.6 118.4z" />
<glyph unicode="&#xec67;" glyph-name="code" d="M297.6 768c9.6 11.2 9.6 28.8-1.6 40-11.2 9.6-28.8 9.6-40-1.6l-217.6-244.8c-24-27.2-24-70.4 0-97.6l217.6-246.4c4.8-6.4 12.8-9.6 20.8-9.6 6.4 0 12.8 1.6 19.2 6.4 11.2 9.6 12.8 28.8 1.6 40l-217.6 246.4c-4.8 6.4-4.8 17.6 0 24l217.6 243.2zM985.6 561.6l-217.6 244.8c-9.6 11.2-27.2 12.8-40 1.6-11.2-9.6-12.8-27.2-1.6-40l217.6-244.8c4.8-6.4 4.8-17.6 0-24l-217.6-243.2c-9.6-11.2-9.6-28.8 1.6-40 4.8-4.8 12.8-6.4 19.2-6.4 8 0 16 3.2 20.8 9.6l217.6 244.8c24 27.2 24 68.8 0 97.6zM608 800c-14.4 4.8-30.4-3.2-35.2-17.6l-176-523.2c-3.2-14.4 3.2-30.4 19.2-35.2 3.2-1.6 6.4-1.6 9.6-1.6 11.2 0 22.4 8 27.2 19.2l176 523.2c1.6 14.4-4.8 30.4-20.8 35.2z" />
<glyph unicode="&#xec70;" glyph-name="course" d="M985.6 792l-464 168c-6.4 1.6-12.8 1.6-19.2 0l-464-168c-11.2-4.8-19.2-14.4-19.2-25.6s8-22.4 19.2-25.6l128-46.4v-296c0-12.8 8-22.4 19.2-27.2 137.6-46.4 241.6-65.6 337.6-65.6 48 0 94.4 4.8 140.8 14.4v-48c-44.8-12.8-78.4-52.8-78.4-102.4 0-57.6 48-105.6 105.6-105.6s105.6 48 105.6 105.6c0 48-33.6 89.6-78.4 102.4v62.4c38.4 9.6 76.8 24 120 38.4 11.2 4.8 19.2 14.4 19.2 25.6v294.4l128 46.4c11.2 4.8 19.2 14.4 19.2 25.6s-8 22.4-19.2 27.2zM742.4 169.6c0-27.2-22.4-49.6-49.6-49.6s-49.6 22.4-49.6 49.6 22.4 49.6 49.6 49.6c27.2 0 49.6-22.4 49.6-49.6zM222.4 417.6v254.4l280-100.8c3.2-1.6 6.4-1.6 9.6-1.6s6.4 0 9.6 1.6l142.4 51.2v-246.4c-129.6-27.2-252.8-19.2-441.6 41.6zM801.6 417.6c-28.8-9.6-56-19.2-81.6-25.6v251.2l81.6 30.4v-256zM696 694.4l-120 44.8c-14.4 4.8-30.4-1.6-36.8-16-4.8-14.4 1.6-30.4 16-36.8l57.6-22.4-100.8-36.8-380.8 137.6 380.8 137.6 380.8-137.6-196.8-70.4z" />
<glyph unicode="&#xec73;" glyph-name="book" d="M929.6 876.8h-364.8c-20.8 0-38.4-8-52.8-19.2-14.4 12.8-32 19.2-52.8 19.2h-364.8c-40 0-73.6-33.6-73.6-73.6v-540.8c0-40 33.6-73.6 73.6-73.6h390.4v-14.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v14.4h390.4c40 0 73.6 33.6 73.6 73.6v540.8c-1.6 41.6-35.2 73.6-76.8 73.6zM94.4 244.8c-9.6 0-17.6 8-17.6 17.6v540.8c0 9.6 8 17.6 17.6 17.6h366.4c12.8 0 24-11.2 24-24v-552h-390.4zM948.8 262.4c0-9.6-8-17.6-17.6-17.6h-390.4v552c0 12.8 11.2 24 24 24h364.8c9.6 0 17.6-8 17.6-17.6v-540.8zM217.6 659.2h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s14.4-28.8 28.8-28.8zM678.4 659.2h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM803.2 579.2h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM344 579.2h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM344 432h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM803.2 432h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xec76;" glyph-name="social" d="M1003.2 822.4c-3.2 28.8-16 56-40 75.2-22.4 19.2-51.2 27.2-81.6 25.6-28.8-3.2-56-16-75.2-40s-25.6-51.2-22.4-80c0-8 1.6-16 4.8-22.4l-158.4-92.8c-30.4 48-83.2 81.6-144 81.6-48 0-91.2-20.8-123.2-52.8l-136 123.2c9.6 16 14.4 35.2 14.4 54.4 0 60.8-49.6 110.4-110.4 110.4s-110.4-51.2-110.4-112 49.6-110.4 110.4-110.4c20.8 0 40 6.4 56 16l142.4-129.6c-9.6-20.8-16-44.8-16-70.4 0-92.8 76.8-169.6 169.6-169.6h14.4l36.8-136c-44.8-25.6-75.2-72-75.2-128 0-80 65.6-145.6 145.6-145.6s145.6 65.6 145.6 145.6-65.6 145.6-145.6 145.6c-6.4 0-11.2 0-17.6-1.6l-36.8 132.8c59.2 25.6 100.8 86.4 100.8 155.2 0 12.8-1.6 24-3.2 35.2l168 97.6 4.8-4.8c20.8-16 44.8-25.6 70.4-25.6h11.2c28.8 3.2 56 16 75.2 40s28.8 54.4 25.6 83.2zM131.2 838.4c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4-25.6-54.4-54.4-54.4zM696 166.4c0-49.6-40-89.6-89.6-89.6s-89.6 40-89.6 89.6 40 89.6 89.6 89.6 89.6-40 89.6-89.6zM484.8 484.8c-62.4 0-113.6 51.2-113.6 113.6s51.2 113.6 113.6 113.6 113.6-51.2 113.6-113.6-51.2-113.6-113.6-113.6zM936 777.6c-9.6-11.2-22.4-17.6-36.8-19.2s-28.8 3.2-40 12.8c-11.2 9.6-17.6 22.4-19.2 36.8s3.2 28.8 12.8 40c9.6 11.2 22.4 17.6 36.8 19.2h4.8c12.8 0 25.6-4.8 35.2-12.8 11.2-9.6 17.6-22.4 19.2-36.8 0-14.4-4.8-28.8-12.8-40z" />
<glyph unicode="&#xec78;" glyph-name="edit" d="M1003.2 844.8c0 11.2-4.8 20.8-12.8 28.8l-59.2 59.2c-17.6 17.6-35.2 35.2-52.8 54.4-6.4 8-16 14.4-25.6 16-11.2 1.6-24-1.6-33.6-9.6l-115.2-115.2h-564.8c-65.6 0-118.4-52.8-118.4-118.4v-622.4c0-65.6 52.8-118.4 118.4-118.4h622.4c65.6 0 118.4 52.8 118.4 118.4v568l110.4 110.4c8 8 12.8 19.2 12.8 28.8zM532.8 438.4c-1.6-1.6-4.8-3.2-6.4-4.8l-137.6-46.4 44.8 137.6c1.6 3.2 1.6 4.8 4.8 6.4l304 304 96-94.4-305.6-302.4zM824 137.6c0-33.6-27.2-62.4-62.4-62.4h-622.4c-33.6 0-62.4 27.2-62.4 62.4v624c0 33.6 27.2 62.4 62.4 62.4h510.4l-251.2-251.2c-8-8-14.4-17.6-17.6-28.8l-60.8-185.6c-3.2-9.6-1.6-19.2 3.2-27.2 4.8-6.4 11.2-12.8 25.6-12.8h4.8l190.4 62.4c11.2 3.2 20.8 9.6 28.8 17.6l252.8 251.2v-512zM876.8 782.4l-96 94.4 64 64 46.4-46.4c16-16 32-32 48-49.6l-62.4-62.4z" />
<glyph unicode="&#xec7f;" glyph-name="comments-reply" d="M910.4 904h-796.8c-51.2 0-94.4-41.6-94.4-94.4v-569.6c0-35.2 19.2-67.2 49.6-83.2 14.4-8 28.8-11.2 44.8-11.2 17.6 0 36.8 4.8 52.8 16l142.4 96h57.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-65.6c-4.8 0-11.2-1.6-16-4.8l-148.8-99.2c-11.2-8-25.6-8-38.4-1.6s-20.8 19.2-20.8 33.6v568c0 20.8 16 36.8 36.8 36.8h796.8c20.8 0 38.4-17.6 38.4-38.4v-524.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v526.4c-1.6 51.2-44.8 92.8-96 92.8zM854.4 312c-40 38.4-89.6 65.6-147.2 75.2v44.8c0 17.6-9.6 33.6-25.6 41.6s-35.2 6.4-49.6-6.4l-166.4-131.2c-11.2-9.6-17.6-22.4-17.6-36.8s6.4-27.2 17.6-36.8l166.4-134.4c8-6.4 19.2-9.6 28.8-9.6 6.4 0 14.4 1.6 20.8 4.8 16 8 25.6 24 25.6 41.6v32c38.4-8 84.8-27.2 131.2-56 14.4-9.6 33.6-9.6 48 0 14.4 8 24 25.6 22.4 41.6 0 12.8-1.6 22.4-3.2 28.8-8 41.6-22.4 72-51.2 100.8zM707.2 254.4c-14.4 1.6-28.8-1.6-40-11.2s-17.6-22.4-17.6-36.8v-20.8l-142.4 113.6 142.4 113.6v-30.4c0-24 17.6-43.2 41.6-48 48-8 89.6-28.8 121.6-60.8 20.8-22.4 30.4-41.6 36.8-72v-3.2c-36.8 22.4-89.6 46.4-142.4 56zM164.8 630.4c0-51.2 41.6-94.4 94.4-94.4 51.2 0 94.4 41.6 94.4 94.4 0 51.2-41.6 94.4-94.4 94.4s-94.4-43.2-94.4-94.4zM296 630.4c0-20.8-17.6-38.4-38.4-38.4s-38.4 17.6-38.4 38.4 17.6 38.4 38.4 38.4 38.4-17.6 38.4-38.4zM606.4 630.4c0 51.2-41.6 94.4-94.4 94.4s-94.4-41.6-94.4-94.4c0-51.2 41.6-94.4 94.4-94.4s94.4 43.2 94.4 94.4zM473.6 630.4c0 20.8 17.6 38.4 38.4 38.4s38.4-17.6 38.4-38.4-17.6-38.4-38.4-38.4c-20.8 0-38.4 17.6-38.4 38.4zM764.8 536c51.2 0 94.4 41.6 94.4 94.4 0 51.2-41.6 94.4-94.4 94.4s-92.8-43.2-92.8-94.4 41.6-94.4 92.8-94.4zM764.8 668.8c20.8 0 38.4-17.6 38.4-38.4s-17.6-38.4-38.4-38.4-38.4 17.6-38.4 38.4 17.6 38.4 38.4 38.4z" />
<glyph unicode="&#xec86;" glyph-name="page" d="M862.4 862.4h-46.4v22.4c0 65.6-52.8 118.4-118.4 118.4h-456c-65.6 0-118.4-52.8-118.4-118.4v-542.4c0-19.2 8-36.8 20.8-51.2l243.2-249.6c14.4-14.4 33.6-22.4 52.8-22.4h302.4c40 0 73.6 33.6 73.6 73.6v17.6l80 163.2c1.6 3.2 3.2 8 3.2 12.8l1.6 537.6c0 19.2-17.6 36.8-38.4 38.4zM844.8 728h-112v80c36.8 0 73.6 0 112-1.6v-78.4zM384 124.8l-166.4 171.2h166.4v-171.2zM742.4 75.2h-302.4v238.4c0 20.8-17.6 38.4-38.4 38.4h-222.4v532.8c0 35.2 28.8 62.4 62.4 62.4h454.4c35.2 0 62.4-28.8 62.4-62.4v-22.4h-43.2c-22.4 0-41.6-17.6-41.6-38.4l-1.6-537.6c0-4.8 1.6-8 3.2-12.8l81.6-163.2v-17.6c3.2-9.6-4.8-17.6-14.4-17.6zM787.2 180.8l-56 112v379.2h112v-379.2l-56-112z" />
<glyph unicode="&#xecc9;" glyph-name="direction" d="M940.8 747.2l-80 102.4c-14.4 17.6-35.2 28.8-57.6 28.8h-384v97.6c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-99.2h-224c-40 0-72-32-72-72v-206.4c0-40 32-72 72-72h222.4v-478.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v478.4h385.6c22.4 0 43.2 9.6 57.6 28.8l80 102.4c19.2 25.6 19.2 62.4-1.6 89.6zM897.6 691.2l-80-102.4c-3.2-4.8-8-6.4-12.8-6.4h-665.6c-9.6 0-16 8-16 16v206.4c0 9.6 8 16 16 16h664c4.8 0 9.6-1.6 12.8-6.4l80-102.4c6.4-6.4 6.4-14.4 1.6-20.8z" />
<glyph unicode="&#xece7;" glyph-name="stories" d="M961.6 406.4l-64 40c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l56-35.2-411.2-260.8-411.2 259.2 56 35.2c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-64-40c-14.4-9.6-24-25.6-24-41.6 0-17.6 8-33.6 24-41.6l422.4-265.6c8-4.8 17.6-8 27.2-8s19.2 3.2 27.2 8l422.4 265.6c14.4 9.6 24 25.6 24 41.6-1.6 17.6-9.6 33.6-24 43.2zM422.4 387.2l75.2-46.4c4.8-3.2 9.6-4.8 14.4-4.8s9.6 1.6 14.4 4.8l75.2 46.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-59.2-36.8-59.2 36.8c-12.8 8-30.4 4.8-38.4-8-9.6-12.8-4.8-30.4 8-38.4zM350.4 499.2l-112 70.4c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l112-70.4c6.4-4.8 11.2-4.8 16-4.8 9.6 0 17.6 4.8 24 12.8 8 12.8 3.2 30.4-9.6 38.4zM123.2 580.8c9.6 0 17.6 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-38.4 24 36.8 22.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-75.2-46.4c-8-4.8-12.8-14.4-12.8-24s4.8-19.2 12.8-24l75.2-46.4c4.8-1.6 9.6-3.2 16-3.2zM224 739.2c4.8 0 9.6 1.6 14.4 4.8l112 70.4c12.8 8 17.6 25.6 8 38.4s-25.6 17.6-38.4 8l-112-70.4c-12.8-8-17.6-25.6-8-38.4 6.4-8 14.4-12.8 24-12.8zM452.8 878.4l59.2 36.8 59.2-36.8c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 19.2 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-75.2 46.4c-9.6 6.4-20.8 6.4-30.4 0l-75.2-46.4c-12.8-8-17.6-25.6-8-38.4s27.2-17.6 40-8zM673.6 814.4l112-70.4c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 19.2 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-112 70.4c-12.8 8-30.4 4.8-38.4-8-9.6-12.8-4.8-30.4 8-38.4zM990.4 680l-75.2 46.4c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l36.8-22.4-36.8-22.4c-12.8-8-17.6-25.6-8-38.4 4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8l75.2 46.4c8 4.8 12.8 14.4 12.8 24s-4.8 16-12.8 20.8zM688 448c4.8 0 9.6 1.6 14.4 4.8l112 70.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-112-70.4c-12.8-8-17.6-25.6-8-38.4 6.4-9.6 14.4-12.8 24-12.8z" />
<glyph unicode="&#xeceb;" glyph-name="acf" d="M912 1003.2h-800c-51.2 0-91.2-40-91.2-91.2v-435.2c0-51.2 40-92.8 91.2-92.8h800c51.2 0 92.8 41.6 92.8 92.8v435.2c0 51.2-41.6 91.2-92.8 91.2zM948.8 476.8c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v435.2c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-435.2zM886.4 249.6h-748.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h748.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM886.4 75.2h-748.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h748.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xecf8;" glyph-name="dataset" d="M934.4 392h-140.8c-6.4 0-11.2 3.2-12.8 8l-17.6 43.2v380.8c0 99.2-187.2 150.4-371.2 150.4-182.4 0-368-51.2-371.2-148.8v-435.2c0-97.6 192-152 371.2-152 32 0 64 1.6 94.4 4.8 1.6 0 3.2 0 3.2 1.6v-126.4c0-38.4 32-70.4 70.4-70.4h374.4c38.4 0 70.4 32 70.4 70.4v204.8c0 38.4-32 68.8-70.4 68.8zM494.4 441.6c-33.6-3.2-67.2-6.4-102.4-6.4-193.6 0-315.2 56-315.2 94.4v54.4c68.8-44.8 193.6-67.2 315.2-67.2 123.2 0 246.4 22.4 315.2 67.2v-97.6h-148.8c-30.4 1.6-56-17.6-64-44.8zM707.2 668.8c-1.6-38.4-123.2-94.4-315.2-94.4-193.6 0-315.2 56-315.2 94.4v72c68.8-44.8 192-68.8 315.2-68.8s246.4 22.4 315.2 67.2v-70.4zM392 918.4c192 0 315.2-56 315.2-94.4-1.6-38.4-123.2-94.4-315.2-94.4-193.6 0-315.2 56-315.2 94.4s121.6 94.4 315.2 94.4zM480 300.8c-28.8-3.2-57.6-4.8-88-4.8-190.4 0-315.2 57.6-315.2 96v54.4c68.8-44.8 193.6-67.2 315.2-67.2 33.6 0 65.6 1.6 97.6 4.8v-84.8c-3.2 1.6-6.4 1.6-9.6 1.6zM948.8 120c0-8-6.4-14.4-14.4-14.4h-376c-8 0-14.4 6.4-14.4 14.4v299.2c0 8 6.4 14.4 14.4 14.4h140.8c6.4 0 11.2-3.2 12.8-8l17.6-43.2c11.2-27.2 36.8-43.2 64-43.2h140.8c8 0 14.4-6.4 14.4-14.4v-204.8z" />
<glyph unicode="&#xed0d;" glyph-name="home" d="M891.2 587.2c-16 0-28.8-12.8-28.8-28.8v-436.8c0-22.4-17.6-40-40-40h-158.4v286.4c0 51.2-41.6 92.8-92.8 92.8h-121.6c-51.2 0-92.8-41.6-92.8-92.8v-284.8h-158.4c-22.4 0-40 17.6-40 40v436.8c0 16-12.8 28.8-28.8 28.8s-24-14.4-24-28.8v-436.8c0-52.8 43.2-96 96-96h624c52.8 0 96 43.2 96 96v436.8c-3.2 14.4-16 27.2-30.4 27.2zM416 83.2v284.8c0 19.2 16 36.8 36.8 36.8h121.6c19.2 0 36.8-16 36.8-36.8v-284.8h-195.2zM990.4 707.2l-427.2 275.2c-32 20.8-72 20.8-104 0l-425.6-275.2c-12.8-8-16-25.6-8-38.4s25.6-16 38.4-8l427.2 273.6c12.8 8 30.4 8 43.2 0l427.2-275.2c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 17.6 4.8 24 12.8 8 14.4 4.8 30.4-9.6 40z" />
<glyph unicode="&#xed1f;" glyph-name="toolbox" d="M880 793.6h-171.2v56c0 62.4-51.2 112-112 112h-169.6c-62.4 0-112-51.2-112-112v-56h-171.2c-68.8 0-124.8-56-124.8-124.8v-156.8c0-16 12.8-28.8 28.8-28.8h14.4v-304c0-65.6 52.8-118.4 118.4-118.4h662.4c65.6 0 118.4 52.8 118.4 118.4v304h14.4c16 0 28.8 12.8 28.8 28.8v156.8c0 68.8-56 124.8-124.8 124.8zM371.2 849.6c0 30.4 25.6 56 56 56h168c30.4 0 56-25.6 56-56v-56h-280v56zM76.8 668.8c0 36.8 30.4 68.8 68.8 68.8h736c36.8 0 68.8-30.4 68.8-68.8v-129.6h-873.6v129.6zM905.6 180.8c0-35.2-28.8-62.4-62.4-62.4h-662.4c-35.2 0-62.4 28.8-62.4 62.4v304h196.8v-99.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v99.2h281.6v-99.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v99.2h196.8v-304z" />
<glyph unicode="&#xed35;" glyph-name="comments" d="M292.8 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM292.8 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-20.8-43.2-43.2-43.2zM512 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM512 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-19.2-43.2-43.2-43.2zM732.8 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM732.8 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-20.8-43.2-43.2-43.2zM908.8 864h-793.6c-52.8 0-96-43.2-96-96v-512c0-35.2 17.6-65.6 48-83.2 14.4-8 32-12.8 48-12.8s32 4.8 48 12.8l140.8 81.6c6.4 3.2 12.8 4.8 19.2 4.8h584c52.8 0 96 43.2 96 96v412.8c1.6 52.8-41.6 96-94.4 96zM948.8 355.2c0-22.4-17.6-40-40-40h-584c-16 0-33.6-4.8-48-12.8l-140.8-81.6c-12.8-6.4-27.2-6.4-40 0s-19.2 19.2-19.2 33.6v513.6c0 22.4 17.6 40 40 40h793.6c22.4 0 40-17.6 40-40v-412.8z" />
<glyph unicode="&#xed3a;" glyph-name="job" d="M947.2 977.6c-30.4 24-68.8 32-107.2 22.4l-564.8-139.2h-113.6c-72 0-131.2-59.2-131.2-131.2v-243.2c0-60.8 40-110.4 96-126.4l70.4-284.8c8-33.6 36.8-56 72-56h30.4c22.4 0 43.2 9.6 57.6 27.2s19.2 40 14.4 62.4l-54.4 235.2 524.8-128c9.6-3.2 20.8-3.2 30.4-3.2 27.2 0 54.4 9.6 76.8 27.2 30.4 24 46.4 57.6 46.4 96v545.6c-1.6 38.4-19.2 72-48 96zM305.6 811.2l216 52.8v-512l-216 52.8v406.4zM86.4 486.4v243.2c0 41.6 33.6 75.2 75.2 75.2h88v-393.6h-88c-41.6 0-75.2 33.6-75.2 75.2zM312 83.2c-1.6-3.2-6.4-6.4-14.4-6.4h-30.4c-8 0-14.4 4.8-17.6 12.8l-65.6 265.6h72l60.8-257.6c0-8-1.6-12.8-4.8-14.4zM937.6 334.4c0-19.2-9.6-38.4-25.6-51.2s-38.4-17.6-59.2-12.8l-275.2 67.2v540.8l275.2 67.2c20.8 4.8 41.6 0 59.2-12.8 16-12.8 25.6-30.4 25.6-51.2v-547.2z" />
<glyph unicode="&#xed4d;" glyph-name="post" d="M825.6 1003.2h-627.2c-51.2 0-91.2-40-91.2-91.2v-800c0-51.2 41.6-92.8 92.8-92.8h627.2c51.2 0 92.8 41.6 92.8 92.8v800c-3.2 51.2-43.2 91.2-94.4 91.2zM860.8 112c0-19.2-16-36.8-36.8-36.8h-625.6c-19.2 0-36.8 16-36.8 36.8v800c0 19.2 16 36.8 36.8 36.8h627.2c19.2 0 36.8-16 36.8-36.8v-800zM736 878.4h-182.4c-24 0-44.8-19.2-44.8-44.8v-220.8c0-24 19.2-44.8 44.8-44.8h182.4c24 0 44.8 19.2 44.8 44.8v222.4c-1.6 24-20.8 43.2-44.8 43.2zM723.2 625.6h-156.8v196.8h156.8v-196.8zM275.2 795.2h121.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-121.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM275.2 584h121.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-121.6c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM752 430.4h-476.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h476.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM752 219.2h-476.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h476.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xed64;" glyph-name="support" d="M489.6 723.2h-268.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h268.8c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM220.8 540.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM427.2 470.4h-208c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h208c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM774.4 747.2c-36.8 4.8-70.4-12.8-88-44.8-8-14.4-1.6-30.4 11.2-38.4 14.4-8 30.4-1.6 38.4 11.2 6.4 11.2 19.2 17.6 32 16 14.4-1.6 25.6-12.8 27.2-25.6s-4.8-24-16-28.8c-24-11.2-41.6-40-41.6-67.2v-20.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v20.8c0 4.8 6.4 14.4 11.2 16 32 16 51.2 49.6 46.4 86.4-6.4 40-38.4 70.4-78.4 75.2zM764.8 465.6c-24 0-41.6-19.2-41.6-41.6 0-24 19.2-41.6 41.6-41.6 24 0 41.6 19.2 41.6 41.6 1.6 22.4-17.6 41.6-41.6 41.6zM884.8 873.6h-745.6c-65.6 0-118.4-52.8-118.4-118.4v-532.8c0-25.6 12.8-48 35.2-60.8 11.2-6.4 22.4-9.6 35.2-9.6s24 3.2 35.2 9.6l185.6 107.2c1.6 1.6 4.8 1.6 6.4 1.6h568c65.6 0 118.4 52.8 118.4 118.4v364.8c0 65.6-54.4 120-120 120zM948.8 387.2c0-35.2-28.8-62.4-62.4-62.4h-569.6c-12.8 0-24-3.2-35.2-9.6l-184-107.2c-6.4-3.2-12.8-1.6-14.4 0s-6.4 4.8-6.4 12.8v532.8c0 35.2 28.8 62.4 62.4 62.4h745.6c35.2 0 62.4-28.8 62.4-62.4v-366.4z" />
<glyph unicode="&#xed71;" glyph-name="search-console" d="M928 1003.2h-832c-41.6 0-75.2-33.6-75.2-75.2v-832c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v832c-1.6 41.6-36.8 75.2-78.4 75.2zM948.8 96c0-11.2-9.6-20.8-20.8-20.8h-832c-11.2 0-20.8 9.6-20.8 20.8v305.6l142.4 120c14.4-9.6 32-14.4 49.6-14.4 28.8 0 54.4 12.8 70.4 33.6l78.4-44.8c-1.6-8-3.2-14.4-3.2-22.4 0-49.6 40-91.2 91.2-91.2s91.2 40 91.2 91.2v8l120 110.4c16-12.8 35.2-20.8 57.6-20.8 49.6 0 91.2 40 91.2 91.2s-41.6 89.6-92.8 89.6c-49.6 0-91.2-40-91.2-91.2 0-8 1.6-16 3.2-22.4l-113.6-104c-16 17.6-40 28.8-67.2 28.8-22.4 0-41.6-8-57.6-20.8l-86.4 52.8v3.2c0 49.6-40 91.2-91.2 91.2s-91.2-40-91.2-91.2c0-11.2 1.6-22.4 6.4-32l-107.2-91.2v452.8c0 11.2 9.6 20.8 20.8 20.8h832c11.2 0 20.8-9.6 20.8-20.8v-832zM268.8 563.2c-19.2 0-35.2 16-35.2 35.2s16 35.2 35.2 35.2 35.2-16 35.2-35.2-16-35.2-35.2-35.2zM539.2 472c0-19.2-16-35.2-35.2-35.2s-35.2 16-35.2 35.2 16 35.2 35.2 35.2 35.2-16 35.2-35.2zM736 660.8c0 19.2 16 35.2 35.2 35.2s35.2-16 35.2-35.2-16-35.2-35.2-35.2-35.2 16-35.2 35.2z" />
<glyph unicode="&#xed73;" glyph-name="cart" d="M936 836.8c-17.6 22.4-43.2 33.6-72 33.6h-580.8l-4.8 72c-1.6 25.6-22.4 44.8-48 44.8h-134.4c-16 0-28.8-11.2-28.8-27.2s12.8-28.8 28.8-28.8h128l35.2-585.6c1.6-35.2 32-64 67.2-64h540.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-540.8c-6.4 0-11.2 4.8-11.2 11.2l-6.4 110.4h507.2c43.2 0 81.6 30.4 89.6 72l49.6 227.2c4.8 27.2-1.6 54.4-19.2 76.8zM899.2 771.2l-49.6-227.2c-3.2-16-19.2-28.8-35.2-28.8h-510.4l-17.6 299.2h577.6c11.2 0 20.8-4.8 28.8-12.8 6.4-8 9.6-19.2 6.4-30.4zM379.2 198.4c-52.8 0-94.4-43.2-94.4-96s43.2-96 94.4-96 94.4 43.2 94.4 96-43.2 96-94.4 96zM379.2 64c-20.8 0-38.4 17.6-38.4 40s17.6 40 38.4 40c20.8 0 38.4-17.6 38.4-40s-17.6-40-38.4-40zM769.6 198.4c-52.8 0-94.4-43.2-94.4-96s43.2-96 94.4-96 94.4 43.2 94.4 96c1.6 52.8-41.6 96-94.4 96zM769.6 64c-20.8 0-38.4 17.6-38.4 40s17.6 40 38.4 40c20.8 0 38.4-17.6 38.4-40 1.6-22.4-16-40-38.4-40z" />
<glyph unicode="&#xed83;" glyph-name="attachment" d="M526.4 19.2h-8c-75.2 0-155.2 30.4-204.8 76.8-52.8 49.6-81.6 116.8-81.6 185.6v515.2c0 68.8 33.6 131.2 92.8 169.6 57.6 40 128 49.6 195.2 25.6l4.8-1.6c8-3.2 17.6-4.8 27.2-11.2 73.6-38.4 116.8-107.2 116.8-184v-438.4c0-43.2-14.4-83.2-41.6-113.6-4.8-6.4-8-9.6-11.2-11.2-28.8-27.2-64-41.6-102.4-41.6-43.2 0-86.4 19.2-113.6 52.8-27.2 32-41.6 72-41.6 115.2v368c0 16 12.8 28.8 28.8 28.8s28.8-12.8 28.8-28.8v-368c0-28.8 9.6-57.6 28.8-78.4 17.6-20.8 43.2-33.6 70.4-33.6 24 0 44.8 9.6 62.4 25.6 1.6 1.6 3.2 3.2 6.4 8 17.6 20.8 28.8 48 28.8 78.4v436.8c0 57.6-32 105.6-88 134.4l-1.6 1.6c-3.2 1.6-8 3.2-14.4 6.4l-4.8 1.6c-51.2 17.6-104 9.6-147.2-19.2s-67.2-72-67.2-123.2v-513.6c0-52.8 24-105.6 64-145.6 40-38.4 105.6-62.4 166.4-62.4 57.6-1.6 115.2 20.8 156.8 60.8s64 91.2 62.4 147.2v400c0 16 12.8 28.8 28.8 28.8s28.8-12.8 28.8-28.8v-398.4c1.6-68.8-27.2-136-80-187.2-54.4-49.6-121.6-78.4-190.4-78.4z" />
<glyph unicode="&#xed8e;" glyph-name="mail" d="M912 849.6h-800c-51.2 0-92.8-41.6-92.8-92.8v-491.2c0-51.2 41.6-92.8 92.8-92.8h800c51.2 0 92.8 41.6 92.8 92.8v491.2c0 51.2-41.6 92.8-92.8 92.8zM912 793.6c8 0 14.4-1.6 20.8-6.4l-398.4-241.6c-14.4-8-30.4-8-44.8 0l-398.4 241.6c6.4 3.2 12.8 6.4 20.8 6.4h800zM912 230.4h-800c-19.2 0-36.8 16-36.8 36.8v464l384-233.6c16-9.6 33.6-14.4 51.2-14.4s35.2 4.8 51.2 14.4l384 233.6v-464c3.2-20.8-14.4-36.8-33.6-36.8z" />
<glyph unicode="&#xed91;" glyph-name="tag" d="M928 830.4c-16 16-40 24-62.4 20.8l-172.8-24c-64 94.4-177.6 200-364.8 171.2-16-1.6-25.6-16-24-32s16-25.6 32-24c145.6 22.4 238.4-49.6 296-124.8l-113.6-16c-16-1.6-28.8-9.6-40-19.2l-380.8-356.8c-14.4-14.4-22.4-33.6-22.4-52.8 0-20.8 8-40 22.4-52.8l294.4-278.4c14.4-12.8 32-20.8 51.2-20.8s36.8 6.4 51.2 20.8l382.4 361.6c11.2 11.2 19.2 25.6 22.4 41.6l49.6 323.2c3.2 24-4.8 46.4-20.8 62.4zM892.8 776l-51.2-324.8c0-3.2-3.2-8-4.8-9.6l-382.4-361.6c-6.4-6.4-17.6-6.4-24 0l-294.4 280c-3.2 3.2-4.8 8-4.8 12.8s1.6 9.6 4.8 12.8l379.2 358.4c3.2 3.2 6.4 4.8 9.6 4.8l140.8 19.2c25.6-44.8 36.8-80 38.4-84.8 3.2-12.8 14.4-19.2 27.2-19.2 3.2 0 4.8 0 8 1.6 14.4 4.8 22.4 20.8 19.2 35.2 0 1.6-11.2 33.6-33.6 76.8l148.8 20.8h3.2c6.4 0 9.6-3.2 12.8-4.8 1.6-4.8 4.8-9.6 3.2-17.6z" />
<glyph unicode="&#xed95;" glyph-name="target" d="M371.2 99.2c-176 60.8-294.4 225.6-294.4 412.8 0 240 195.2 435.2 435.2 435.2 179.2 0 342.4-112 406.4-278.4 4.8-14.4 22.4-20.8 36.8-16s20.8 22.4 16 36.8c-73.6 187.2-257.6 313.6-459.2 313.6-272 0-491.2-219.2-491.2-491.2 0-211.2 134.4-398.4 332.8-465.6 3.2-1.6 6.4-1.6 9.6-1.6 11.2 0 22.4 8 27.2 19.2 3.2 14.4-4.8 30.4-19.2 35.2zM512 636.8c27.2 0 52.8-9.6 75.2-25.6 12.8-9.6 30.4-8 40 4.8s8 30.4-4.8 40c-32 24-68.8 36.8-108.8 36.8-97.6 0-177.6-80-177.6-177.6 0-40 12.8-78.4 38.4-108.8 4.8-6.4 14.4-11.2 22.4-11.2 6.4 0 12.8 1.6 17.6 6.4 12.8 9.6 14.4 27.2 4.8 40-17.6 20.8-25.6 48-25.6 75.2-3.2 65.6 51.2 120 118.4 120zM732.8 563.2c-150.4 0-272-121.6-272-272s121.6-272 272-272 272 121.6 272 272-123.2 272-272 272zM732.8 75.2c-118.4 0-216 97.6-216 216s97.6 216 216 216 216-97.6 216-216-97.6-216-216-216zM396.8 260.8c-99.2 44.8-163.2 145.6-163.2 254.4 0 153.6 124.8 278.4 278.4 278.4 108.8 0 209.6-64 254.4-164.8 6.4-14.4 22.4-20.8 36.8-14.4s20.8 22.4 14.4 36.8c-54.4 121.6-174.4 198.4-305.6 198.4-184 0-334.4-150.4-334.4-334.4 0-131.2 76.8-251.2 196.8-304 3.2-1.6 8-3.2 11.2-3.2 11.2 0 20.8 6.4 25.6 16 6.4 14.4 0 30.4-14.4 36.8zM817.6 361.6l-110.4-110.4-44.8 44.8c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l64-64c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l129.6 129.6c11.2 11.2 11.2 28.8 0 40s-25.6 11.2-36.8 0z" />
<glyph unicode="&#xeda5;" glyph-name="facebook" d="M579.2 3.2h-124.8c-32 0-57.6 27.2-57.6 60.8v380.8h-102.4c-32 0-57.6 27.2-57.6 60.8v110.4c0 33.6 25.6 60.8 57.6 60.8h99.2v100.8c0 145.6 86.4 243.2 214.4 243.2h96c32 0 57.6-27.2 57.6-60.8v-129.6c0-33.6-25.6-60.8-57.6-60.8h-68.8v-91.2h91.2c19.2-1.6 35.2-9.6 46.4-22.4 11.2-14.4 16-33.6 12.8-51.2l-19.2-108.8c-3.2-28.8-27.2-49.6-57.6-49.6h-73.6v-382.4c0-32-25.6-60.8-56-60.8zM424 500.8c16 0 28.8-12.8 28.8-28.8v-408c0-3.2 1.6-4.8 1.6-4.8h124.8s1.6 1.6 1.6 4.8v411.2c0 16 12.8 28.8 28.8 28.8h100.8s1.6 0 1.6 1.6v1.6l19.2 107.2c0 3.2 0 4.8-1.6 6.4 0 0-1.6 1.6-3.2 1.6h-118.4c-16 0-28.8 12.8-28.8 28.8v113.6c0 28.8 4.8 60.8 59.2 60.8h65.6s1.6 1.6 1.6 4.8v128c0 3.2-1.6 4.8-1.6 4.8h-94.4c-96 0-158.4-73.6-158.4-187.2v-129.6c0-16-12.8-28.8-28.8-28.8h-128s-1.6-1.6-1.6-4.8v-110.4c0-3.2 1.6-4.8 1.6-4.8l129.6 3.2z" />
<glyph unicode="&#xedc1;" glyph-name="movie" d="M358.4 766.4c-60.8 0-110.4-49.6-110.4-110.4s49.6-110.4 110.4-110.4 110.4 49.6 110.4 110.4-48 110.4-110.4 110.4zM358.4 600c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4c1.6-30.4-24-54.4-54.4-54.4zM665.6 544c60.8 0 110.4 49.6 110.4 110.4s-49.6 110.4-110.4 110.4-110.4-49.6-110.4-110.4 48-110.4 110.4-110.4zM665.6 710.4c30.4 0 54.4-24 54.4-54.4s-24-54.4-54.4-54.4-54.4 24-54.4 54.4c-1.6 28.8 24 54.4 54.4 54.4zM358.4 480c-60.8 0-110.4-49.6-110.4-110.4s49.6-110.4 110.4-110.4 110.4 49.6 110.4 110.4-48 110.4-110.4 110.4zM358.4 313.6c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4-24-54.4-54.4-54.4zM665.6 257.6c60.8 0 110.4 49.6 110.4 110.4s-49.6 112-110.4 112-110.4-49.6-110.4-110.4 48-112 110.4-112zM665.6 424c30.4 0 54.4-24 54.4-54.4s-24-54.4-54.4-54.4-54.4 24-54.4 54.4 24 54.4 54.4 54.4zM976 75.2h-236.8c156.8 83.2 265.6 248 265.6 436.8 0 272-220.8 491.2-492.8 491.2s-491.2-219.2-491.2-491.2 219.2-492.8 491.2-492.8h464c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM76.8 512c0 240 195.2 435.2 435.2 435.2s436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8-435.2 196.8-435.2 436.8z" />
<glyph unicode="&#xeefa;" glyph-name="instagram" d="M512 747.2c-129.6 0-235.2-105.6-235.2-235.2s105.6-235.2 235.2-235.2 235.2 105.6 235.2 235.2-105.6 235.2-235.2 235.2zM512 332.8c-99.2 0-179.2 80-179.2 179.2s80 179.2 179.2 179.2c99.2 0 179.2-80 179.2-179.2s-80-179.2-179.2-179.2zM769.6 862.4c-33.6 0-60.8-27.2-60.8-60.8s27.2-60.8 60.8-60.8c33.6 0 60.8 27.2 60.8 60.8s-27.2 60.8-60.8 60.8zM768 1019.2h-512c-139.2 0-251.2-112-251.2-251.2v-512c0-139.2 113.6-251.2 252.8-251.2h512c139.2 0 251.2 113.6 251.2 252.8v510.4c0 139.2-113.6 251.2-252.8 251.2zM964.8 256c0-108.8-88-196.8-195.2-196.8h-513.6c-107.2 0-195.2 88-195.2 196.8v512c0 107.2 88 195.2 195.2 195.2h512c108.8 0 196.8-88 196.8-196.8v-510.4z" />
<glyph unicode="&#xef60;" glyph-name="light-bulb" d="M808 784s0 1.6-1.6 1.6c-8 22.4-27.2 70.4-70.4 116.8-46.4 49.6-102.4 81.6-164.8 94.4-40 8-78.4 8-118.4 0-62.4-11.2-118.4-43.2-164.8-92.8-43.2-46.4-60.8-94.4-70.4-118.4-11.2-28.8-28.8-76.8-24-142.4 3.2-48 19.2-96 48-142.4 11.2-17.6 25.6-41.6 46.4-70.4 6.4-9.6 11.2-16 16-22.4l1.6-1.6c12.8-17.6 20.8-28.8 28.8-44.8 8-17.6 14.4-35.2 19.2-52.8 3.2-12.8 14.4-20.8 27.2-20.8h265.6c12.8 0 24 8 27.2 20.8 4.8 19.2 11.2 36.8 19.2 51.2 8 16 16 27.2 27.2 43.2l25.6 35.2c16 22.4 28.8 41.6 40 60.8s41.6 72 46.4 142.4c3.2 65.6-14.4 113.6-24 142.4zM755.2 764.8c9.6-25.6 24-64 19.2-116.8-4.8-57.6-30.4-102.4-40-118.4s-22.4-35.2-36.8-56l-24-35.2c-12.8-17.6-22.4-32-32-51.2-6.4-12.8-12.8-27.2-17.6-41.6h-224c-4.8 14.4-9.6 27.2-16 41.6-9.6 20.8-19.2 35.2-33.6 52.8l-1.6 1.6c-4.8 6.4-9.6 12.8-16 22.4-19.2 27.2-33.6 49.6-44.8 67.2-8 14.4-35.2 59.2-40 118.4-4.8 52.8 9.6 91.2 20.8 118.4 8 20.8 22.4 60.8 59.2 99.2 40 40 84.8 65.6 136 76.8 32 6.4 64 6.4 96 0 51.2-11.2 96-36.8 136-78.4 36.8-38.4 51.2-78.4 59.2-99.2v-1.6zM614.4 214.4h-204.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h203.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-27.2 28.8zM579.2 75.2h-134.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h134.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
<glyph unicode="&#xefde;" glyph-name="mail-reply" d="M990.4 408l-76.8 76.8c-8 8-19.2 12.8-32 12.8s-24-4.8-32-12.8l-163.2-164.8c-6.4-6.4-9.6-14.4-12.8-22.4l-20.8-97.6c-3.2-14.4 1.6-30.4 12.8-41.6 8-8 20.8-12.8 32-12.8 3.2 0 6.4 0 9.6 1.6l97.6 20.8c8 1.6 16 6.4 22.4 12.8l163.2 163.2c8 8 12.8 19.2 12.8 32 1.6 11.2-3.2 24-12.8 32zM788.8 222.4l-78.4-17.6 17.6 78.4 153.6 153.6 60.8-60.8-153.6-153.6zM539.2 264h-427.2c-19.2 0-35.2 16-35.2 35.2v484.8l371.2-225.6c16-9.6 32-14.4 49.6-14.4s35.2 4.8 49.6 14.4l374.4 225.6v-220.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v224c0 49.6-41.6 91.2-91.2 91.2h-776c-49.6 0-91.2-41.6-91.2-91.2v-488c0-49.6 40-91.2 91.2-91.2h428.8c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-30.4 27.2zM520 606.4c-12.8-8-28.8-8-41.6 0l-358.4 216h756.8l-356.8-216z" />
<glyph unicode="&#xefee;" glyph-name="podcast" d="M512 323.2c51.2 0 99.2 19.2 134.4 56 35.2 35.2 54.4 81.6 52.8 131.2v305.6c0 104-84.8 187.2-187.2 187.2-104 0-187.2-84.8-187.2-187.2v-304c-1.6-104 83.2-188.8 187.2-188.8zM379.2 816c0 72 59.2 131.2 131.2 131.2s131.2-59.2 131.2-131.2v-305.6c0-35.2-12.8-67.2-36.8-92.8-25.6-25.6-59.2-40-94.4-40-72 0-131.2 59.2-131.2 131.2v307.2zM843.2 520c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-152-123.2-275.2-276.8-275.2-152 0-275.2 123.2-275.2 275.2 0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-172.8 132.8-315.2 302.4-329.6v-113.6h-112c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h280c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-112v113.6c174.4 12.8 308.8 155.2 308.8 329.6z" />
<glyph unicode="&#xf0a8;" glyph-name="pencil" d="M990.4 819.2c-54.4 56-108.8 113.6-166.4 168-9.6 9.6-20.8 16-33.6 16s-24-4.8-33.6-12.8l-624-620.8c-8-8-14.4-19.2-19.2-30.4l-91.2-278.4c-3.2-9.6-1.6-20.8 3.2-28.8 3.2-4.8 11.2-12.8 27.2-12.8h4.8l281.6 94.4c11.2 3.2 20.8 9.6 30.4 19.2l620.8 620.8c9.6 9.6 14.4 20.8 14.4 33.6-1.6 11.2-6.4 24-14.4 32zM329.6 172.8c-1.6-1.6-4.8-4.8-8-4.8l-232-78.4 76.8 230.4c1.6 3.2 3.2 6.4 4.8 8l462.4 460.8 156.8-156.8-460.8-459.2zM830.4 673.6l-156.8 156.8 115.2 113.6c52.8-51.2 105.6-105.6 155.2-156.8l-113.6-113.6z" />
<glyph unicode="&#xf335;" glyph-name="text-align-left" d="M48 904h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-928c-16 0-27.2-12.8-27.2-27.2s11.2-28.8 27.2-28.8zM976 680h-928c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM976 400h-928c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM686.4 120h-638.4c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h638.4c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-28.8 27.2z" />
<glyph unicode="&#xf338;" glyph-name="text" d="M844.8 1003.2h-665.6c-54.4 0-97.6-43.2-97.6-96v-91.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v91.2c0 22.4 17.6 41.6 41.6 41.6h216v-872h-104c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h443.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-104v870.4h216c22.4 0 41.6-17.6 41.6-41.6v-91.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v92.8c-4.8 52.8-48 96-102.4 96zM572.8 75.2h-121.6v872h121.6v-872z" />
<glyph unicode="&#xf33b;" glyph-name="heading" d="M806.4 1003.2h-588.8c-51.2 0-94.4-41.6-94.4-94.4v-92.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v94.4c0 20.8 17.6 38.4 38.4 38.4h180.8v-622.4h-92.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h408c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-91.2v620.8h184c20.8 0 38.4-17.6 38.4-38.4v-92.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v94.4c-3.2 51.2-44.8 92.8-97.6 92.8zM568 324.8h-112v622.4h112v-622.4zM856 75.2h-688c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h689.6c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-30.4 28.8z" />
<glyph unicode="&#xf345;" glyph-name="thumbs-up" d="M153.6 632h-51.2c-46.4 0-83.2-36.8-83.2-83.2v-368c0-46.4 36.8-83.2 83.2-83.2h49.6c46.4 0 83.2 36.8 83.2 83.2v368c1.6 46.4-35.2 83.2-81.6 83.2zM180.8 180.8c0-14.4-12.8-27.2-27.2-27.2h-51.2c-14.4 0-27.2 12.8-27.2 27.2v368c0 14.4 12.8 27.2 27.2 27.2h49.6c14.4 0 27.2-12.8 27.2-27.2v-368zM1001.6 568c-1.6 6.4-1.6 12.8-3.2 17.6-9.6 33.6-30.4 59.2-57.6 73.6-27.2 12.8-54.4 12.8-78.4 12.8h-187.2l27.2 124.8c4.8 19.2 9.6 43.2 3.2 68.8-12.8 43.2-59.2 70.4-102.4 59.2-27.2-6.4-48-27.2-62.4-41.6-8-8-20.8-20.8-38.4-36.8-155.2-152-185.6-184-190.4-200-8-20.8-8-41.6-8-62.4v-350.4c0-27.2 0-73.6 30.4-104s75.2-32 104-32h320c19.2 0 44.8 0 67.2 12.8 32 17.6 46.4 51.2 56 73.6 75.2 174.4 115.2 281.6 121.6 318.4 1.6 24 1.6 46.4-1.6 65.6zM945.6 510.4c-3.2-17.6-22.4-83.2-116.8-305.6-8-20.8-17.6-38.4-30.4-46.4-9.6-4.8-25.6-4.8-40-4.8h-316.8c-27.2 0-52.8 1.6-67.2 14.4-12.8 12.8-14.4 40-14.4 65.6v350.4c0 16 0 28.8 4.8 40 14.4 22.4 129.6 132.8 179.2 180.8 16 16 30.4 28.8 38.4 36.8 11.2 11.2 24 24 36.8 27.2s30.4-6.4 35.2-20.8c3.2-11.2 0-27.2-3.2-41.6l-35.2-160c-1.6-8 0-17.6 4.8-24s12.8-11.2 22.4-9.6l220.8 3.2c19.2 0 38.4 0 51.2-6.4s24-20.8 28.8-38.4c1.6-3.2 1.6-8 3.2-11.2 1.6-14.4 1.6-30.4-1.6-49.6z" />
<glyph unicode="&#xf3c1;" glyph-name="twitter" d="M329.6 97.6c-113.6 0-222.4 32-313.6 94.4-11.2 8-16 20.8-11.2 33.6s17.6 19.2 30.4 17.6c14.4-1.6 28.8-3.2 43.2-3.2 59.2 0 116.8 14.4 168 40-62.4 22.4-112 73.6-134.4 140.8-3.2 9.6 0 20.8 6.4 27.2 1.6 1.6 3.2 3.2 4.8 3.2-49.6 41.6-80 102.4-80 171.2v1.6c0 9.6 4.8 19.2 14.4 24 4.8 3.2 11.2 4.8 16 3.2-19.2 33.6-28.8 70.4-28.8 110.4s9.6 78.4 30.4 112c4.8 8 12.8 12.8 22.4 14.4 9.6 0 17.6-3.2 24-9.6 86.4-107.2 211.2-174.4 347.2-188.8v12.8c0 123.2 99.2 222.4 222.4 222.4 56 0 108.8-20.8 150.4-59.2 22.4 6.4 44.8 20.8 67.2 35.2 9.6 6.4 20.8 12.8 30.4 19.2 9.6 4.8 20.8 4.8 28.8 0 9.6-6.4 14.4-16 12.8-27.2-1.6-8-4.8-40-16-72h24c11.2 1.6 22.4-3.2 28.8-12.8s6.4-22.4 0-30.4c-22.4-35.2-56-57.6-89.6-80l-14.4-9.6v-11.2c-1.6-283.2-219.2-579.2-584-579.2zM142.4 188.8c59.2-22.4 121.6-35.2 187.2-35.2 329.6 0 526.4 267.2 526.4 526.4v20.8c-1.6 9.6 3.2 19.2 11.2 25.6 9.6 6.4 19.2 12.8 27.2 19.2l33.6 24c-4.8 0-8 1.6-12.8 1.6-9.6 1.6-17.6 8-20.8 17.6s-3.2 19.2 3.2 27.2c3.2 4.8 8 12.8 11.2 20.8-22.4-12.8-46.4-25.6-73.6-30.4-9.6-1.6-19.2 1.6-25.6 8-32 33.6-75.2 52.8-121.6 52.8-91.2 0-166.4-75.2-166.4-166.4 0-11.2 1.6-24 4.8-38.4 1.6-8 0-17.6-6.4-24-4.8-6.4-14.4-9.6-22.4-9.6-148.8 9.6-289.6 73.6-392 180.8-4.8-14.4-6.4-30.4-6.4-46.4 0-56 27.2-107.2 73.6-137.6 11.2-6.4 14.4-19.2 11.2-32-3.2-11.2-16-19.2-27.2-19.2-17.6 0-36.8 3.2-54.4 8 16-60.8 64-108.8 128-121.6 12.8-3.2 22.4-14.4 22.4-27.2s-8-24-20.8-27.2c-17.6-4.8-33.6-6.4-48-8 30.4-44.8 80-73.6 136-75.2 11.2 0 22.4-8 25.6-19.2s0-24-9.6-30.4c-56-46.4-123.2-73.6-193.6-84.8z" />
<glyph unicode="&#xf3d0;" glyph-name="seo-title" d="M225.6 932.8h572.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-572.8c-16 0-28.8-12.8-28.8-28.8s14.4-28.8 28.8-28.8zM716.8 817.6h-409.6c-54.4 0-97.6-43.2-97.6-97.6v-30.4c0-54.4 43.2-97.6 97.6-97.6h409.6c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6zM758.4 689.6c0-22.4-19.2-41.6-41.6-41.6h-409.6c-22.4 0-41.6 19.2-41.6 41.6v30.4c0 22.4 19.2 41.6 41.6 41.6h409.6c22.4 0 41.6-19.2 41.6-41.6v-30.4zM976 972.8c-16 0-28.8-12.8-28.8-28.8v-812.8c0-22.4-19.2-41.6-41.6-41.6h-787.2c-22.4 0-41.6 19.2-41.6 41.6v814.4c0 14.4-12.8 27.2-28.8 27.2s-27.2-12.8-27.2-27.2v-812.8c0-54.4 43.2-97.6 97.6-97.6h788.8c54.4 0 97.6 43.2 97.6 97.6v812.8c0 14.4-12.8 27.2-28.8 27.2z" />
<glyph unicode="&#xf3d8;" glyph-name="user" d="M512 587.2c118.4 0 214.4 92.8 214.4 208s-96 208-214.4 208-214.4-92.8-214.4-208 96-208 214.4-208zM512 947.2c88 0 158.4-68.8 158.4-152s-72-152-158.4-152c-88 0-158.4 68.8-158.4 152s70.4 152 158.4 152zM612.8 504h-201.6c-152 0-276.8-123.2-276.8-276.8v-158.4c0-27.2 22.4-49.6 49.6-49.6h654.4c27.2 0 49.6 22.4 49.6 49.6v158.4c1.6 153.6-123.2 276.8-275.2 276.8zM833.6 75.2h-643.2v152c0 121.6 99.2 220.8 220.8 220.8h201.6c121.6 0 220.8-99.2 220.8-220.8v-152z" />
<glyph unicode="&#xf43b;" glyph-name="seo" d="M251.2 544h49.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-49.6c-43.2 0-78.4-35.2-78.4-78.4v-49.6c0-43.2 35.2-78.4 78.4-78.4 11.2 0 22.4-9.6 22.4-22.4v-49.6c0-11.2-9.6-22.4-22.4-22.4h-49.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h49.6c43.2 0 78.4 35.2 78.4 78.4v49.6c0 43.2-35.2 78.4-78.4 78.4-11.2 0-22.4 9.6-22.4 22.4v49.6c0 12.8 11.2 22.4 22.4 22.4zM492.8 544h70.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-70.4c-43.2 0-78.4-35.2-78.4-78.4v-198.4c0-43.2 35.2-78.4 78.4-78.4h70.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-70.4c-11.2 0-22.4 9.6-22.4 22.4v72h51.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-51.2v72c0 6.4 9.6 16 22.4 16zM772.8 600h-38.4c-43.2 0-78.4-35.2-78.4-78.4v-196.8c0-43.2 35.2-78.4 78.4-78.4h38.4c43.2 0 78.4 35.2 78.4 78.4v196.8c0 43.2-35.2 78.4-78.4 78.4zM795.2 324.8c0-12.8-9.6-22.4-22.4-22.4h-38.4c-12.8 0-22.4 9.6-22.4 22.4v196.8c0 12.8 9.6 22.4 22.4 22.4h38.4c12.8 0 22.4-9.6 22.4-22.4v-196.8zM928 939.2h-832c-41.6 0-76.8-33.6-76.8-76.8v-700.8c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v700.8c0 41.6-35.2 76.8-76.8 76.8zM96 883.2h832c11.2 0 20.8-9.6 20.8-20.8v-132.8h-872v132.8c0 11.2 8 20.8 19.2 20.8zM928 140.8h-832c-11.2 0-20.8 9.6-20.8 20.8v512h872v-512c1.6-11.2-8-20.8-19.2-20.8zM587.2 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM697.6 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM808 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8z" />
<glyph unicode="&#xf485;" glyph-name="youtube" d="M987.2 750.4c-11.2 43.2-44.8 76.8-88 88-76.8 20.8-387.2 20.8-387.2 20.8s-310.4 0-387.2-20.8c-43.2-11.2-76.8-44.8-88-88-20.8-78.4-20.8-238.4-20.8-238.4s0-161.6 20.8-238.4c11.2-43.2 44.8-76.8 88-88 76.8-20.8 387.2-20.8 387.2-20.8s310.4 0 387.2 20.8c43.2 11.2 76.8 44.8 88 88 20.8 76.8 20.8 238.4 20.8 238.4s0 160-20.8 238.4zM412.8 363.2v297.6l257.6-148.8-257.6-148.8z" />
    <glyph glyph-name="uni-f486" unicode="&#xf486;" horiz-adv-x="1024" d="M480.0 451.3894 C480.0 433.7167 494.3272 419.3894 512.0 419.3894 C529.6728 419.3894 544.0 433.7167 544.0 451.3894 V906.643 C544.0 924.3158 529.6728 938.643 512.0 938.643 C494.3272 938.643 480.0 924.3158 480.0 906.643 V451.3894 Z M837.3394 474.6708 C837.3394 620.9251 740.8274 744.6389 608.0117 785.5989 V852.0697 C776.6016 809.314 901.3394 656.5588 901.3394 474.6708 C901.3394 259.6498 727.0261 85.3431 512.0073 85.3431 C296.99 85.3431 122.6789 259.6498 122.6789 474.6708 C122.6789 656.561 247.4152 809.3184 416.0117 852.0711 V785.6011 C283.196 744.6433 186.6789 620.928 186.6789 474.6708 C186.6789 294.9976 332.3355 149.3431 512.0073 149.3431 C691.6813 149.3431 837.3394 294.9976 837.3394 474.6708 Z" />
      <glyph glyph-name="uni-f487" unicode="&#xf487;" horiz-adv-x="1024" d="M938.67 512.0 C938.67 276.36 747.64 85.33 512.0 85.33 C443.7 85.33 379.15 101.38 321.91 129.91 L258.86 66.86 C333.51 24.31 419.92 0.0 512.0 0.0 C794.77 0.0 1024.0 229.23 1024.0 512.0 C1024.0 794.77 794.77 1024.0 512.0 1024.0 C229.23 1024.0 0.0 794.77 0.0 512.0 C0.0 419.92 24.31 333.51 66.86 258.86 L129.91 321.91 C101.38 379.15 85.33 443.7 85.33 512.0 C85.33 747.64 276.36 938.67 512.0 938.67 C747.64 938.67 938.67 747.64 938.67 512.0 Z M304.38 228.95 L91.05 15.62 C70.22 -5.21 36.45 -5.21 15.62 15.62 C-5.21 36.45 -5.21 70.21 15.62 91.04 L228.95 304.38 L304.38 228.95 Z M152.61 458.65 H317.65 L372.41 622.91 C382.66 653.68 426.02 654.14 436.93 623.59 L509.36 420.79 L585.33 663.9 C595.51 696.46 641.87 695.61 650.84 662.7 L706.49 458.65 L821.34 458.67 L825.42 458.66 L870.16 458.65 C866.91 436.61 861.68 415.21 854.65 394.65 H683.68 C668.29 394.65 654.8 404.95 650.75 419.8 L615.96 547.35 L543.83 316.52 C534.06 285.25 490.12 284.37 479.11 315.23 L405.76 520.59 L371.56 417.99 C366.92 404.05 353.87 394.65 339.18 394.65 H168.12 C161.09 415.21 155.86 436.61 152.61 458.65 Z" />
  </font></defs></svg>PK     ’ŠU]!¿+ã  ã    assets/admin/img/icon-gif.pngnu „[µü¤        ‰PNG

   IHDR   �   �   MO*3  ªIDATxí�Ut[W¾‡õxÉKa˜yž‡©ôt9?Û‡9enÊÜ®	C!§af.8¶onÝŒ]fŠÝºCÁº±Ží(–Ïwï-­½utŽeÉG² ß÷Vü–÷ÞgÓ‡ú]¨ßk¬îÕ2íQ�ªY­:#„Î¨UÍ:¨:íÑ2Ý«±ú½.T¨)»~IC5K•:,Rô°*5KCõ¥Âhˆ¤
}$ð#UHR(]¨©ªVXlXÕšª‹ò9 A¡çu^dÐóz^#48ÿú¾æë3áïxîe1yŽW8Èq:�Nþ‡Ñ(u?Ó|}?ú�¶)"¼ËÙÂ›œÆ�×QzF´M¿Ëý€.Q­H´”{ÙÉ§8$g*òt»ùŒ¼Äb&#okuIîôkU‹DKØÀzÏ�ÈÓýXÉäe�~�{}M«ä/W’
Ç)AŽ!‚‡w˜ÏpäÖÑj}-w ;Õ&ü<Nïiá6äéTü8Í6¯&×¦;5 ú…Þ=y
?šù€ýìd,à~F _�àOÿÍ5ÈíÛúEÿ4P³Ô%z¶–x:yŸíÌå:†¡œÁ)z"Â~¦¡x»4Kû+ ëu‘Üq|@7YÏ”¡4-g>hÃŸ.v3Åûš~Ü�×YÑ;K¸•‡�±Œ{ÙK+~œf!Š÷¬Æg7 �zÒý8eÕRæ%"x3¹}B³Ð—T'Œ×ñàð2£Q–�Â.:Hä]”h�¾œ�€~¢&»ñTpŽu¨ÃZNOò²I?Ét@—¨ÅnX¯aã0õ‹ål¡ÃNäm‹.Éd@ÿªvóFŽ�Ã(ÔoN¢†H´�õôçh×¿f* R{Ùk.�þ3ñ~s*³¸�’dKm¥™¨Ôþ$\�ƒ›& ü0¢Ò úW…Í »7Û(CùcXÿd@—›¾§Œ?ã¦…ûQ¾Ù®Ë‚
è‡jQ‡ñ2nÞc<ÊG[ôÃ ú’>1�«7ÏåIÓ*a.Ï³�IÈø‰¾Ô×€©Þüû‰Ça%Ê_ J·"c½õ- %"ævâ‰0å‰÷b8ÍÕÈøt_š(bVO�¢¼q	6G�ŒÓèÇfAãVº]ñ<‚òÈû&³eöbÈ�Ó	h�Þ1÷`ÓÍL”W–ð.ñìEÆ×5(õ€f
c‡ÇQÞ9š¿Ïldœ™j@?WDgaØ†òÒ)œÀ¦�+íÉÇÏS	h@âNÅ&º ‡�” <uç°ù˜R{d@ïºS$:�{˜ŒòÚ…Ä³ïìm@_W›(TŸÃ¦ËÞènÓ·zÐjQ¸ç¯Ø|b7³½	è—rD!{=al–Ú{ú¿JP•(tWasÖþ®®JÐ%¢ð-åclžCÆK{¨Vƒ·Ð�!b|¨í) ßˆb±›Èøÿ€¶Šbq"�ºí~h»_@?T·ˆú(æ �¢v6· ˜Ýú¡w@óEÔåÄX�
ÖrZ­yÙHdœïÐ 5Ç6”ÃÄSŽ
ÖGÐÅ|dÛ¬A‰�´~×¡vËYÍµÈmyb@ÏÇ––ahg8*F+Ý]»Sq6•¨8íÒ—ãš&¢Vcs+*V¯¶23°2NchBÅk•Ð�B<ˆM*^Ïiˆ	è¿DÔ*ÝL@Åì™€þ$¢žÀð*nÿd:;¯j³·±€.Ž­!.Åf:*n})ÐPõUÇQ ®g‡°id _wåm&¡þUÑ€f‹¨­ö£>»1y8C=²œD=É©N{•q1¯PÉmÈ8;PelçÑæÉ>Ÿ§è o£í:¼ÿM– 4¬#J„­	G4 Ãf{ÙpMÆ~vl‘ËFldÙAïØ…Rö6ÛÕB!]$¢nÁÐžáxÕ½hd0 …"ö=¶Cú�ˆúJ@ß@àÅ®ÚB"7õ* ›èÜÔçóC7 ˜iŒˆú�€fñîZì^�%	ÿ¾:�€ZØåc:ñˆÉØÌE1'†tŸˆÚ‰ae†õx%Ö7¹"jL# F°íV¡˜†´\D=Šá”¦‡°i±â1ÎËÁ€þê½‘¸"¤Ý‰K­§, þgò´CuNô:†WPÌÝ!ûôjš9C“¿!'Ñhš`NTåý«×‡Ô ‚óí4Üþh†#Ö„5¤ã"8[°y �Z…áŠy,¤S"8ãQð%Ÿº¤i…÷çTHgDPNÂ¦%ëÁ.”¦�c£˜m!œþÍÀúÚÁ’ ªGiºÀç÷ÍZ@“èÀ�y�T��€Îd* CÈrþTÐ(MŸôibì¤;’LaõÍÅ¨“n·:é€‡ùl&!ËCü0¿Ò{x9ì‡¢+„%ëÓ1åX@;¼;‡3ÕÄê^�)õ9P�ïTc·0^ÇÃL	ìf_“ò& 1¼lOVÍrG)U 8lAiêÌ«ó& µÖa/wÜçÕ�?ˆÒ´žxÖçI@£ù;Qþn×°y(¤q"êžæ[ÈçóÿÞ†H”SÁ>VRŽŒ­Eû—0|@Gm8Ä.&!ÄMì¢7Õ9�­½h±ˆºC;%�öÉ™—»]dmÎÁæÚ>M9ZÒÞË©€Û[Ï\…Í"Ô§ˆ‘3—÷_“”¥ÍÛ(Vº/œÂP•±£†]Iþ¯C¾wÊ†³]Ç_ê0E}vRâ^ª9ãûÿ´øLU–Ø›IY=þò¥Øª§±¹
äúÔæÜ¾ÿÝÑ“õT±	+7¸ïr·	‡8KøÜ«šå‡8M/ôœû’Y1;4éAò§QQ8™(õ=Hµ&vá,†FTðŽæ Ž2Ãç*BÔé^Gp*p_ F+#�ñšø€..ÎëPÓˆx/òDôU; kÂQÂ�ŒEìlHh`v@å^ëû°¬cèÄpÚnbåI.õÇ�±ÕØlG1?× ¯…?‹á¯¨@-ç†ˆýäÄü$…®$LŒÍ¨@]‡Í~ßÂ¶ÛMQ·6 j�
Òñ´cpìÂ½*n2’L+šâ&µIŠ›_Åà{içÅžë]*
ß2š°y/ý¢Dë°9Ã8³&y³_É)ôêSç±©py+ò2�åÆ¦ÁÞ\Ó»:ŠßP›(Tk{*4ù�ž2Þ%
ÓÇˆg2ÞÝûZ®õŽ(D[°i°×ßÑÀä¡Hâ·ÃGtqŒE(O×S¹ä_¤Zp{–{Ý¶=ï‹žØµmæ ãÌ>–l«0t3å¥�ãx•#•’íÆŸØ¯nÆ&Âl”—ÞE/0Ïê'é>1AÄ¼›.æ¡ÂpB_Yì¾rfèf	ÊøtM%n6¢ü¶^ƒ}ü¨7ûóyI­O�¤S&¢¸ib*ÊGOéGA=Àv…ÚMD•¸9Íý(Ç¼:Ùzh».ò	¿SØ¿»‡]9ÔÔn¡	€ƒþ×*Âú· �,³'+ppónCýn‰$+ÒQYÆŸý#�¸‰ôû$äþF<�Û°‰'¨€LCk1oànníÇƒpˆÇa\bßóo™|ÊøRµØgk^Ê‘/£Ql%L"o x[ui¦Ãþ©>Æ
Îa³²¶ ·Ð†¸~>ÕO³ñœú—U/Œ×Ð@ŒN&¡,z%{éÄ‹0«(A¶õúröä_,Œ¥,§hâ”%‡3ŸwpðæƒÄ»&‹³ó ¿q‚Ú…mYÃ1�*‘VQâî˜Ç+”ž!¥ïOôFï7[¶ÐÄ‡láž ŠÀÀ�0;�â}Ã¬÷d+ ÓÔf©+ÕºBçùˆgxŠ”§9œ;x¡*qVØ¥Y¦ie3 ã/’ï€ÌÀ‡f> –=¬c9O±ˆ¹ÿçc<ÅãLKéWëàY¦#·ï˜¥øìd ;Õ&ü}”Ôéâ	äéHNcs‚5ŒAnÛt—(Ô¿¿¦UrüO²GH�0}pž:¡¹u´Z_S(C
Î_«Fxû©3ù8‰Ç™Çäe�~­PP†¬—øÁºžM|D„THcuàE]¢P�†¼¿Óuû÷÷±žWi&9ïS‚zo·vèw
mH™ñ‡Z fáïîàq6±Ÿ7iâ8m„‰ÒMŸ³/•3þÍZ`N¦æz@ÆÁ©J�ô¼*5Rƒ2æG@Æ‹4]5
‹€«FÓu‘BÆüÈ8DR…E 6ªBÒ…²aHÙõKªÙÚ§#"E�hŸæh¨ÙÉ*Ì€Œé÷§ûµB{U¯ƒjV«Î
¡³jU³ª^{µB÷kœ~ošR¶ý_w›Óù¯¿    IEND®B`‚PK     ’ŠU]³ñ¡  ¡    assets/admin/img/loader.svgnu „[µü¤        <svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#6c7781"><g fill="none" fill-rule="evenodd"><g transform="translate(1 1)" stroke-width="2"><circle stroke-opacity=".5" cx="18" cy="18" r="18"/><path d="M36 18c0-9.94-8.06-18-18-18"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/></path></g></g></svg>
PK     ’ŠU]®n—‚Ú  ‚Ú  #  assets/admin/img/trends-preview.jpgnu „[µü¤        ÿØÿá Exif  II*            ÿì Ducky     <  ÿá.http://ns.adobe.com/xap/1.0/ <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c005 79.164590, 2020/12/09-11:57:44        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 22.1 (Macintosh)" xmpMM:InstanceID="xmp.iid:D5A9C47992DE11EBBBA2DF45550AB5CB" xmpMM:DocumentID="xmp.did:D5A9C47A92DE11EBBBA2DF45550AB5CB"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:D5A9C47792DE11EBBBA2DF45550AB5CB" stRef:documentID="xmp.did:D5A9C47892DE11EBBBA2DF45550AB5CB"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>ÿî &Adobe dÀ    
  7û  Yq  ”Ž  Ú€ÿÛ „ 		



ÿÂ 9è ÿÄ                               !012@P`"A3B#4�Dp°%5 
	   1!‘2AQq 0a¡Ñ"B3@�±Rr’#4PÁb¢ás`‚²CSÂ$pƒ€� ðñcDd5         1 0!a@P`QAq�p‘"€�°ð¡2b ±BRr 	   !1Qa 0ðAq‘Ññ�¡±Á@Pá`�p€° ÿÚ    úTÀ             I	                                C0             BDÈ                                æ2‹š›•¦d        $L‡<Ø     'P                 C@     � W˜“…¢sODwd        $L…#%¤W766+	€ ‰x                 ñçŽÙ9ÆÑÏ.&2 (Á^`iHÉ��%,#ä’        &B‘Tà–ˆLš�=ø Jå‚ð                 
%ãÉòc¼rHNÑç�K¤:@ã–ÍKà¯0#0           C0‘2‹      (—€                 Q/   ’  (Á^`!a        9:2r´d  _>ÉèÓ,$L…r      .                  Ðª     RÀ+Ì0™L›‚¹1° ˆ”   'Ôñ<Þÿ /³—V“qf&‹ºýOŸëúO7Ø–&@                                ¯0ç§R¡ƒ¨P!,0@z    xŸSÄóû|ßmå{¾ow›_ººyöIAÝ|žg©óýIæûÂDÈ                                æ  DJ     ñžŸ‹åý'xëI€ #ÖyÞÏ¢ó½ia"d                                
ó3p        Â  ”êo	!Ä˜ÉfTŒ                  £åé›Ev6T         2 +Ì             ‘2¢‰                  ÿ 'VÝó{ÓÎ          ¼Àˆ            ”BDÈ                    Ç*^¡Ðõ²€          ¯0†IÒ           hŠòÞ&@                   9û‡5šó6¶Ó%Ü€         y„6<ç¥çy_KÌ±Åž÷ÄöïSu `è       jlj¦$„‰�                 5®v²  UÃvz�¯[ß@          W˜CcÍú^ov,L{ŸÚ»Eþ4œØõ       ›jbz˜ê´Ä�‘2                 !ÍeL7XÕ]�´€O>ý­äiOw=à         ^aŽ6ì\mY+Ù_µò=‹uZ        jlT@°šÓBDÈ               c™§ç_o}Y‡•¦mUÇŸ»¾žp §ç_½Üˆ³Y{ÔÌ          æŽ[À           ÖY6„‰�               ©çß½¼×Ëe½´ÃžÌ÷uòÙÐõs /7D·ð+å²ÿ §›= ñÛ%¼É        +Ì€           	D$L€              /7D·ð"§¼ÌIo":º›EshàGËÓ6šÆ"\¬î¤³÷_-¸æoz™€  +ã¶m5íÜ   ^a‰S¬HÞ`         ¡^cxH™               
^™ôÖ -)êß¡@‡—¦}5�[/ú™’|ÍiâÝÛÝNöò  !CËÓˆž‡­”   
óly|žß‘ËíZš~ƒ¿æ®[›ŒF
ää…’È    Sb lV˜’&@              ñ4üýi¬  ‹?w},à
V™õÖd²ÿ «š;‡5’_ÈÒž­ú  æ²*{Û¾t««ž�A–Ý8‘½œÏª°y„6<Î_k‡G¡_›=öïœ»n_2
ÆQèSÅ:çp    ©±æf+£ÕÇU¦$„‰�        „T÷-ü    5âs,õ¶+³Ôf`  ¯–Ûþ¦`4«ª¸®›E`DÁ–Ìõé¬sÙwÒÎ  TÁ|–ð#«½+œs3hã=Â÷Ìº8 W˜Cc‘G£Å§|Qß²×áÚî�0`Á¹¡¸     `É $+LI	 0j`�     µÍ7L—q¥]_õs   CÊÒ/ú¹…O>ù.à  SÜúk–þ|v¥™€  _-·ý<É  §çß-Ü  nâ[ø W˜›           ŒÂDÈN4Ä�ë¤`$   5âiyº,l©DÃšËÞžd€ [4¯¬Ë36UKÍÑ6ŠÀ  ”Y¬¹ég0_%Ü    1Ž&Îê@ RótM¢°  mÜM 
ó#           ‚C0‘2„¶‘ÖÇn"r^õ3  :z©‚û* "kå³3•­´ïo OÎÑ.ŠÅ|–ßôóPó4Ø×P  9¬³²©.âŸ�|º8    CšË¾–p |Íê¬  ußÀ¼ÂóÖ•È’ÞR        0dB´Ä�‘2  lK$9û±®©.ä Tw[¶5W€  É_%·½LÀGËÓ>º†¼M|–ÙÙVz€  •±ÛsÐ¢®¦ÕX ˜ ¶\ô(Û¸ 
^›ê “ÝD·ð ¯0†Å/g7ÆÙ%Üv¾“Ï“U~|ºS*�C°      jlU@�5¦$„‰�  "§¼q CŸ»ž� Žf�›¢Îº€  Tõ-üM£€ Ëf¼u½œ€    Öoo2YÈ    EGvý
 UÕlvÍ£€  g¸–î æØ§ãl«†è¨ïµôž|ú«óes°R6;à     ¦Ç™˜�ª:­1$$L€ =ëÄ�_-—½<àOÎ¾m     ÍeßK8B�™¦Æº€        5˜¯evª´ +å²÷§œ[ÛYÎ@  mÜIw 
ólG‚ú˜oC¥ìäÞÞ@       4 ­1$$L€ =kÏ@GORÝÄº8 QòôØÙP   *;@i_Sê«=         9²Ãß=\º,q`*:šþ%ÑÀ<ûåÑY  “ÍYû\ ¯0#6           „‰�  #§­y�m»ég¾;RÛ¾@   ˜          q6d³]µ¬«·�X A–Û¾–p)ù×Í¦° >¹áìÉÕ¦þ‹°y€            &@  Žžµæ@ÓÞýó>ºÅ/7Dúª ÄÙ“­›L¼t     úç™§?_&      ìw©¶�µöri“ž€ÕÞ•u-ÜK£Š˜/±®� �»êo˜è» W˜C�«�r           f'³—na"d  éë^d !ÏfýÆöñK}`Búbïš¶UÞÃ´     �yt˜égÑb¾À    
–ÕNêæã±uõòj šó1SÜ×ð˜ ÉÕ–Hï13§ è^a—}Éby           0Ÿ§|ÿ ÕËÇr&@  Ž®±Ì€ Ò¾´«©´Ö ‘«,ÜY§\¡ÔÏ      áìÉn«aî¾¾]@    'Niyì
7SÝÅ¯d€   ³-™/Sp™=@
ó|»è¾KÈ¹V�&*ÙHñ`‡ºð˜üw|IÏQõÎa?6G<Ç×9?ÁßÂ~�óÿ W/È™  Jº×™    ÅÙ’ÕVŠQÞÅ³)    #ƒ»%ú.§m=Ì{     >¼¶+°"øëåÔ    �YfâÌ‚dßt ¯0‡Ë¾‹ä±<Ž¶mÒsež,&nzåhÇb»kYWW>Ì#�«[6Ý¢eŽë÷V76WîºVçèÑ§xîµ”Ú®è;¯Ú®©e^sw•”a?Nùÿ «—ŽäL€ ¥]kÌ€    àîÅz‹Æ&!ïŽ¾M@   Bú"ê$çª7ÓÜÅ¯h�    M¸íÓp�ôwqlÌH   ƒ»ê/dßt ¯0‡Ë¾‹ä±<�£­Q”€A Lf$ƒ Â2œ¦Nz‡ªòœ#)˜#	úwÏý\¼w"d  gU^Í     4ëž6¼·i¸
ÑÜÅ³h�   '^Yë°bQÏLÚiÝMéèQ}ºm   Lpvä¿EÀLC×lº€   åjÍ'=mÉ¼è^a˜}ÊG×           ?Oùï«“ž¤L€¦Š¤§E#‰v~†]sØ   ›£>bvH î¾¾]@   .¼–ë´
Q?é1n»iÛOoÀ  }ôi1$t .£»‹fR  ¬Çf;ôÞ š&ó yŒF           &ÉBDÈ
(”è$RsÌºŽÞ=€ A  9:²Ù®Ì }ôw±l$ $ Gn>…€–˜‘RêºY¯Ÿ‹  el¯—§=ú/ ¬Ä=ñÖË¨  ‰³Ún 	“uÐ¼À            	   RsFÊ¬×Ýên   ‹³%Ên :�'ž¦m   �}Ê^z  KjìäÔ �yaë™¹îÍV  �ôõ²é›Ž€ }ôCß6+° %M×@
ó             $L€ MÌH¡}©ºõ   ì}÷€ çh£·�^üÈ  *Û_7F{ô^  ÏÑGo½¢rAßmyoÑ~ñ    stgïbÛ˜ qÊÓšý€ •7 +Ì     L‘›rØ    	   Ssq[º÷‰ìdÕ´H V¬ÛGSqÐ ÍÓŸ½‡n`H»çŸuYÎüÍº­   Ÿ¢ŒNz»M    ‰s´gïáÚ€—n.–}  ©¸è^`     ¢V)"Á’±ÕMð    &@  ¨æ$ åèÍßÅ·h‘ZÊù÷ÑQf»'¯°  b\ëóØã¼õÎ²ß™»UÙ€          ‰stfîâÛ¼HámÅÐ£B  ©¶è^`      @    &@  ¨æ4  æiÏb¾ãë�ã«”Ú    N             ›£<üw|ÛªÙ¸è  &Û y€            &@  ªæ4                           	iÐ¼À            	   Us	 �  H �  H 	 ’	 I�I �A$   �   D‰´è^`             „‰�  +9Ž@                        $„…—@
ó             $L€ YÎ€                           Ü²è^`             „‰�  +¹Ð                           – +Ì             ‘2  c                           „î€æ             H™©0ZH�Î€                           Ü�Ð¼À            	 !9“‡a"h€                          ºgH¼À            	 0Fd�£T                           “2@æ             H™  $j                           ‰R ¯0             BDÈ  #P                           lJ�y€            &@  � ’  A$      H$€	  I        	   ‘²dH¼À            	   FŒ                           ct€+Ì             ‘2  ˆÀ                           2n�y€            &@  Õ                           M’ ¯0             BDÈ  £            2`           2`   É²@æ             H™  À                           2e 
ó             $L€  0                           €^`             „‰�   ’           ’     ’   $      � ¯0             BDÈ  Êµ[î›V9µj­ÍÄA82Œ'  ‚@B	 €H#	È  �aw¢wD“ÆÒ OKqí0 æU®¿6�H �,uWNÜ€
ó             $L€QTê$CÍ¯TØ:fŸªÀ                   #®ez°’	C£fYºà  "i€y€            &@Ê¨¼�                             ^`             „‰�  *#$é1¡2XLÀ      ÁY–“„dƒ$É°        Rº'H¤‹‰¬�)m ^`             „‰�  9(†Uô##0Fi+pÉu      C‡1ƒc£
rÞ•e±,%.¤        BQ�xr%Ú‰æÌdaq ^`             „‰�    jl          €          56 Á�  ¼À            	                                 W˜             !"d                                
ó             $L€                               ]	             $‰�                                ?ÿÚ  £*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£*2£ ¶ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«GÙ£íügÏÛ³C5ðU•[ƒ�³+�mwM<=}T}¨ï“qãñ‰xÄ¼b^1/—ŒKÆ%ãñ‰xÄ¼b^1/—ŒKÆ% É¸îŒ‚—ŒKÆ%ãñ‰xÄ¼b^1/—ŒKÆ%ãñ‰xÄ¼b^1(ïÎÛîy¼š=æì  Ù~FÚ]Ã‚�k±ü1„ñ´?ö[hâ“ã~$¢Óõ1ö¡ÿ ²mÈÅ7Ûm¬mÄ7î·ÐmáŸw1Ã¹ŠH&šÅºßÁ·gš“ï·Ü7¿ó­¿Ì¢3BR>ëmM¶æÌò‚ò?ËGªD 1oá’Qšcž fvvÁÿ ¿�„YËm· ž-¼PÇ:Q[,LÖŠ’eE$  êcíCÿ gÊG!mKãg>ÚZK²7Ûï +Ïa)¸íwe›cÓ“e;îðîöç0m6û¶“wÛîßù×Åüd¾ÚÛïvy_‡�=y·�ãÆùhŒá(æ¸ –=±m_ÅøÖ‘¶\7[mæ®ÓnðEÿ ¿�ÌjÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�Œ}¨ìô¾ßpÞÿ ÏÉ’8ä_ûø!éé·ß"Wûá_|+ï…}ð¯¾÷Â¾øWß
ÙoÃvÑö(ûT›x¤/%âD¼H—‰ñ"^$KÄ‰x‘/%âD¼H—‰ñ"^$KÄ‰x‘&ÚBÅîcâD¼H—‰ñ"^$KÄ‰x‘/%âD¼H—‰ñ"^$KÄ‰x‘/%Æø!í—p8âæ\q¡*Ž	e£å|ïýã¶±Nü&†HOL´š2x×Àÿ d}Š>ßÆaíÞ»4ö„Ò° ò6q‹)b•÷[’i$�MŠP=_ÕÄ"½n;y_;ÿ DfñÉñÿ #.å÷_%.æ-›¸ÞGg6Ž'Ã_ý‘ö(û‡·�jó¾tKY1�ãø*ÇØ£íüd\ÁjHµ$Z’-I¤‹RE©"Ô‘jHµ$Z’-I¤‹RE©"Ô‘jHµ$Z’-I¤‹RE¨jòW’¼•ä¯%y+É^KRD-AQö©ÈGþy�öï¤n8QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJ×Ë\TTTTTTTTTTTTTTTTTTTTTTTTTö¨ûxx±éØ£Û¹d¬þÀò-XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ‘ñ�·ÝŸ¤?×&OìW¯>ÀìQöû´ÏH�¨5cŒ®_õ|á›5ò!Š-‰lÔ;ýœå·ßm7%Èlæ—Ñÿ *áºá¸û±GÛíîBÏ‹sý\6Ýž¾êù¶¸Ûg>¾âa7øïødjÆ]ä�Á¶–cŠ=Äž“ù_.1üm“n�°;}¾Ý,–B4€�ÃãŒYMëáþ¯–ÚO¸oå´~«~¶‘[oOü£ÚÀs>Öœû±GÛí.ìÌÛ‚BBMÁŸRD?¬øeþî”Þ¼JAI¤‹RE©"Ô‘jHµ$Z’-I¤‹RE©"Ô‘jHµ$Z’-I¤‹RE©"Ô‘jHµ$Z’-I¤‹RE©"Ô‘jHµ$Nr;3Q”}¾Ó¸èœH^9DÚcLÌÌ¥ËÑÂnÆÍ°Ô(äQx«Ù^ÊöW²½•ì¯e{+Ù^ÊöW²½•ì¯e{+Ù^ÊöW²½•ì¯e{+Ù^ÊöW²½•ì¯e¨<cíö’ÏqÀ£B<Mª•Ñ`oïàíVÛ—úøÊvah·é7$ç!&&æÃýUfW‚¼}iöb�·ÚcÌ±íòl÷qwÓ>%ûÌ¥j€ÁÈ‡5ýGÍ‡ú¾}Q�íÙàøçwØÊN1l~VÂ’Ù¿Éí<vùM›Æ)·x¥ù=¬%/Èíc}¾âÄ\ïå<±4š±ê`v(û} žƒ«å¸Áf'…Ô²X…£Ão“c™é5Ù�¡+_ƒÏ/&äÂ†hÉñCý_8ÌæÛ	uw´¥ñ¿ðJ.QA¶ß¼Ql÷��Ë·j¼Ã&¾úh¶Óä56ð¬ÿ ]ÎþWËøõøÝ7Ý`v(û}>¬uæ³;;pÜ¿úY¨ØäÈ¸›Ð"jE‡MÅ0=Ü[õÜcÜöp0bjN´EÓ·ëŠêùMŒ»¦ú¯’h¾“z¶°¼;~.,LÂ," Œ ýòžŠG‚'”û±GÛÁÝ™š@tÒFïè˜[ö•iÇA'‰ùÙ'õ	ó.DƒpDWGÃpÿ énœ©»qËœ¼�ëˆu¯™_2¾e|Êù•ó+æWÌ¯™_2¾e|Êù•ó+æWÌ¯™_2¾e|Êù•ó+æWÌ¯™_2¾e|Êù•ó+æNR»3Q”}¼D™£h™á“†k>¬Ök5šÍf³Y¬Ñ­ûJù¬ÓµXMâášÍf³Y¬Ök51¸Æh�Ü0¸fŸ=Æk5šÍf³Y¬Öj'²LÖkqÚ³Y¬Ök5šÍf³Y§j¶ÝßO5šÍf³Y§ÏqšÍf³Y¬Ök4=q^®us«�\êçW:¹ÕÎ®us«�\êçW:¹ÕÎ®us«�\êçW:¹ÕÎ®us«�\êçW:¹ÕücíàíVhÁ£�keÀå WLk@®NAÈ Ö”�‡E™[2¾q@lc†_Ú^þ¹T9ò¤vŒØÅKœ¼ÁýgÄÉÈ¸¡þ§ve©Ô�ÖŸ`v(ûq¸�ü%‚2¼1I#=y?×6ÿ bàBÄÕšÆj7)îŒ€ÄÛ¬üÉ™ì¸pÁÛÈn¸¡þ­çÈ?¤ÉÄ6ÿ /]œß"0¯/p_)²ÞO&Ü~R“Ðÿ (·0Ï¹�§>ÀìQöã~¼aýO»39—*A¸";ÃŒål`6� x�ÜE…¹»|°›Ð"jEÈn¸¡þ­Ý+£™•Ïô­®Ãuoþ3u¸8v²ò/�˜v»]·ÈmÛÐÿ +åÊ�²=Ñöb�·õâ¬˜fý‹˜¤Ük«'©'ahwPM‰ÿ Y°n_ý<–ëŠêž‘x’SÃ4hzå8•�yöb�·õã Üñà‹ö~d�pŽä)ä3«ý^ýîyâwPL3E‚A¸";ÃŒù¿ ˆDvû™f›êVUYUeU•VUYUeU•VUYUeU•VUYUeU•VUYUeU•VUYUeU•VUYUeU•VUYUeOªíÂ>Üo×¤¼g*F#hûSþûå·}-Þ{%âYî1É F=ËÃýžÓn7ë‚@¸b’æàÿ ¼ø¼é�E(J‚CÂì�'¡Úft/§´‘à0cf–QM¸‰Õà¢ýŸÞTªìÄ+³û}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šû}šo—Ù;ð�·õÂaT‹©d`ÂÑÃ¾‘Ãk4a_A¿ýËsðíåÕ‡Ÿ»;6Ð…�ðØ½‡‰Ù�hÅÈß“³32‡û1?_`‹ú”}¸ß®"$0Æ/‹{ûLŒÇc!YÏ­ûå°ýKŸò?ÕÇqXÝ��¹¤L#¶©ñ‡¿õáÖCÛJ-Æ(ŠR–"ˆ±ME" #áüœ$3Ha†"–LR�·õçíò'w†Fvvæ»Ñ¶yÂ«fûŸºý·œiU°'vü®Á~'ëÂh¤š1a›V››ÊÕ,Ø²ßEþ ŒäØÃ¹±÷”òw,EóúÞ�;Ý|ºiàÊ(õZ-Çÿ ÒÜ4o.æC™Ãl´b¹¤Ü{ƒh¡‹[ÉÛ´…¶ãõ(ûq¿^vÛö.Ìí±'æïŽÍ¤adkxÏ¢$Ä<æý÷¸75Œ™ÙÛ™êÉÆ.üO×ƒ7
½*ô«Ñ�ÙUÕ]•]“;·
º«Ò¯Z½sUuWáWUu,¥)&wnuW§¿©GÛ�§?3›![Ìiµãº¨!v&æoÿ gàíVøâÿ BÜn‚_‘%µÜkÅÉè¶yÅ�Ù�¾<Ý‡—¿‘ía1wâ6q?_ÕFÔ�GÛÃu+Çnm„Nxåá¿QJÇÌù¦ÌY„xäë`V·0Þÿ �âæÛ}Ô›ñu:ÑÞòwòÙµŒ#Ã;èËVå9¶Þ²ž»ñQ•¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ ñ�·„Ã#�m¤™Æ9Î^÷íßCsÌßþÅ†ôÍÌÚ~ø(É™›Žî78 •¥‡Û˜!oöneÄB$;qån‹^Z6»ý¦>Ürwî!Õ�i¸Ö�—'ïò8LÇa#¼|­üº{x£hãäl_NL'¾r-	äQí �“¹PÊÇ�y¸x‚t£Ã´ÇÛŽNõ4R�o!›—µýËáŠ#FãsK$¼�Õc!!1á,ÑD$SoˆˆòëáÊÎÎØg˜!Ž 2,Q÷ú=Ì¥B �wæÐ%å…Å»(LŠN|}¸äïá.ÞW�0/2xP“bÝî˜Zš(±‰>ÊF£á)#_%¶dç¿•EµŽ2åøuàB¼Plöà\Ú3°ì‹»3wRã�¿ÑîÅŠ!ÜNG8È9mÀå�<a~ß¿Ÿn9;°þÛ#ggnn!…¼ÍÄ‰âÝÊ¢‚(›�ìÎÂ�ªû(×›1/ÿ BEá¡Ùm30û³;	I²BBcÃp~T½9÷{L}¸äîÄ-6ÑþÓjž}ìÊ-¤Q¿7?gÐ–o’‰‘îeÜ¨¢£äGÝí1öã>ïÂ£îö˜ûqŸwáAÝí1öã>ïÂƒ»ÚcíÆ}ß…w´ÇÛŒû¿
ïi�·÷~ÞÓo!Ì&£ÜÃ#ð.¿…_i�·„ºMR´fã/ëšÍf³Y¬Ök5šÍf³Y¬Ök5šÏ†k5šÍf³Y¬Ök>¬Ök5šÍf³Y¬Ök5šÍf³Y¬Ök5šÍf³Y¬Ök5ŸÖk5šÍf³Y¬Ök5šÍf‡¯´ÇÛÁÅ‰†(…Æ8Åø_Â‡¯´ÇÛŒºþ=}¦>Üe×ð¡ëí1öã~¿…7_i�·õü)ºûL}¸ßð¶ö¨ûq¿ámíQöþyoç‘öþyoç‘öã›ä †X·KÆ_‘ÙÄÿ hÎ¾È×Ùû#_dkì�}‘¯²5öF¾È×Ùû#_dkì�}‘¯²5öF¾È×Ùû#_dkì�}‘¯²5öF¾È×Ùû#_dkì�}‘¯²5öF¾È×Ùû#_dkì�}‘¯²5öF¾È×Ùû#O»ßšÐÞÈ¾¸VŽþ5æï�}‘¯²5öF¾È×Ùû7Aò›2v!&Á/Élã´ªû#_dkì�}‘¯²5öF¾ÈÔÒ–Oi�·ŽêB�oiC?¢“c±‘}|l¾»nê(vñ5ÌªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¬ªÊ¢ª*¢ª*¢ªÊ¬ªÊ¬ªÊ¬Œb6ŽÙ×Á^¯××m�G5ÌªÊ¬ªÊ¬ªÊ¬ªÈ]«í1öñ’1’0Ûž§æñöã-ÀŽä·;†0uxÐ7bMÚ¡$äÇå³�–Ö6ë(eÕ‹Ñ;Ñ ÜÐA¹	asRÊàá¸�o>°Ë3‰yc§åµ­ºPMª ‰„`�¥ŠðuxÐ7uy£ ÜþÁ»¹ü¼ÇrÅ?µGÛ�qœìÒ‘€vÀÁ,þDbÝLUýc6�ã¥¶ì™Ûkè�°c•…ÅÙ¶Ð½wSc¤åÜÎ5º˜�PEšGbÚ»9mØ=FñŒÂa˜Á‰Dma
¸è‡ûšâ”ušYÝŸÌö¨ûy–µ}k³?¯!,ÌÍíÑöþyoç‘öþx¿‹ÿ ÿÚ  ÿ È8GrÐZAh- ´‚8íüÒŠB§zªªðŸóH:;)#¢è�¦mÀiU?æ�rgÿ ã‰b„êß�†n9çN¡í“/Îåz6R5F7«{Ý•U“»ðç&Ç¸íá·éìu{PYKÝøl§k4MH
­†~1÷û&Ì¯
ë
7«þïE®èIŸ‹~Ä‡#Ã'Èÿ ,ÜtN.($bSf§	rÄ_ÙÂn�„¥£�±7ä¥œœ
6t ÍÄÚ­Tp7eþ¼d;Z1£vŸ$æfvzþ6¾80Ç×‹þ¥Ä¿cRµX
­È‰v?:NAÓðrz4-úã¤Án->­Ñ¸AÈ•è Ôgj¨Šœ^peäòÂü‰©ÝOvÔk“2g¯Ãþœ‰2~&ùEÛ‡N‰ƒ>=ã§
ªÒdÂÍÅ¹5V:ÓtÍî¤LÍ™­1LVs;Ë±øM×‘ Ôc*�	ßôn\½1ËÝÈow¢ï~ÕBVr¥*†­	U—Y91d\79nÕP?ë‰ÿ ³�Þär0ª™-Aú Í…Zå‹IZjãdsa“2àÿ ©(³åH5@w2—»˜Ù îä7!Þ‹PV ûC‹W„ƒV¹±Hv°‡+´ðÇ›ðvªýèÍN[Ô\M‰u>d­�½[=9ÈÝð³({=™ðC“áw¢¹ùF5hŽæã1PDhÞ�âgB4çA–z4Múò‘ºZHÊªÏf|‘a›7æê|kyz§lO‘àÜvr[‘4W¯—ˆè�ìÏ€Æ­\8#Ï› Õ‡pË]XåêãBèš˜d´gsq›•m=Éð‡ê\g*µÚ¿Åm„?RâYÉ�š«·Üß	…Z).âÿ ±âÓdíOBÍTñú#à	Ú˜L.Z„É§s(³ävòZ'Z$´Ih’Ñ%¢KD–‰-Z$´Ih’Ñ%¢KD–‰-Z$´Ih’Ñ%¢KD–‰-Z$´Ih’Ñ%¢KD–‰-å¾#3©$µ£6Û7uÜÞ‚4/™5ž™uá&7e¤<ˆÛÚß”øÜYÐÄ-Ž>‰�HÞƒüTž‚.¼GÐ5É]�Þ‰ž¸ÙëÂ¼k“bw¦å??üx~€ú¯ñç‡n	9Ñó™éÁ�õhWöþtøOJt=¢…“fª¨ÈZ®ô¡uâü§ç–	�fü¯?üp|âËØÙ©É~Q\ÖG×ˆs£Á/T!Uú£rÏ�Ì�¹�ì/ÊNÔæÅÝ†Nkvñ¥ÌÑ§.G“fïˆsæ^ðY·2<C›s�™5ºíäHÜ É½à^ˆÆœÆíÂÊFåÆÕwzòdÏF®däïÉNÔä Õ×Þ™Ñ·,ñŽiÛ’#TïNPg�š«!æ÷6!¢|bvW2±Ÿ� �ëÈîÅE¤ê‚ÉÊ¼ÍGZŽµ9¿=ÚìOú·¿÷àwV2«2r¯+"ZKM—êµ£ûz§kÈ–‹«E“�}Öæu¤˜S½ú`œ•x¹²½^¯W«Õêõz½^¯W«Õêõz½^¯W«Õêõz½^¯W«Õêõz½^¯W«Õêõz½^¯W«�QÕªŽ®uz½^¯W«Õí‰Í•êõz½^¯W«Ó¹ØÊÅb§¼QXÊÕjµX©ÿ ŸoÿÚ  ÿ È<’Ú¼¥å/)yKÊ^Rò—”£–ïÍ7]T1³ñ!¢·+r[_Í7]EèñKr’k”]YÙøm[_Í7MÁŸÕ¿øàrboÏ?OÎË«~v=]WöÃª¬éOÃ©Œ:ð?aÜ+¤J>ßÃEª®FØƒ‰tö	�ÝXtÑ$Fü&ÄíÇ£'é„zpþ?,N4BÜGvðL)ÚŸ“7Néß‹"ëƒøâ}x‹U;®­É`ô4Tü)ù…ðuÀÙ2íÉ%×Ÿ´àçœÝÿ ƒ².¸ß¦Âí^ÕNüO�=_�7iºÓtâü�ªÕj ÑMßîÖ¿6˜¯ p2.¸nUÁüc,ë%r¯.	XW�ò…UýÑ™tUuJó:7^!ÉDÙð¼±äOÂ:`v¯([7tÎ�¸’éÀ9§×øûÓVL¯O›rªºb¹U•;SôáÕ‘r…Óµ8Ngñ‰úz:£ûEx‹§llÕNü®­…ðeÌê�¨¿Ž`§Ä^†.G×Ú‹òÙÑ50fïènNüãÂÈºúÕÉ™_jn˜Gšù·�ê˜Ùñ¯¡¢Ôeª�ý­�g€¹¬éÁX«OW"&BõÂ.‰©€95LU÷wÍ¸ƒgíä‡'Âù·é�Þ‹»ÞÑ�‹QÓ=}½¢™ð³«YXêˆ¹Ü—œW�+Èä
òy¼�^@¯ W�+Èä
òy¼�^@¯ W�+Èä
òy¼�^@¯ W�+Èä
òy¼�^@¯ }:pBÕDø¤|™—kú	6Bõny¾BÙp�‘sòùOì#ÓÐU9>3ê�”oè?ÉGè$À^€yOÅ£ª±ðÕÓ3W‹ŽnÔÄ#\-ÓÔ—ËÐEþ\òîÁ:N[ñ&wLÙQô>‘)G&j‡òÙ);�¤�?”.õ�Zy#t_ªµ•]Ñšµœ[§¨ó¤|›�ôçÿ –Ëœ9òß�xUUW…xW�UUx×QxW…Up7NK|×AÓ‰ó¤ÁDGEû *òÃ|É˜MŸ°7(Ù3×›/L1óË�hï"áÐ¹2>LØ‹.`çï“ó$ÄY?09ÙÕ±¹3.îDoÊ<ßÞ	ª€«Ì~ì.Ê7åÈù3S“XžEk¦nI2g¯ ÊˆZžôL„ÙùaŒ²Lü’*&jò�•eÍí|DTBÞøâÎ­u{· Í3S‘ÛŠ«U—ìé‚œÍ6Zl´Ù07>¶âoÛðÌLÊ÷V»¦r¨âµUî¿e¦´ÛØ»?{¿íZ¬ªN˜½ÖÚ-Tårf§ÿ LÂîÎÜFu ´‚ÐZAh- ´‚ÐZAh- ´‚ÐZAh- ´‚ÐZAh- ´‚ÐZAh- ´‚ÐZ`Êáe¬®ZB´‚ÐZAh'€±ëAh- ´‚ÐZ¢£{“NLµ×�éÍÝUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU1Qyµ–²Ö^C§7uUUUUUUU_ü÷ÿÚ ?þ€zp)ö7N\·á�Ç}úG}öx®†›i8ÐL(¾Ð«Š¹D]ñ=	vb¥1^„Øwˆ±-Úœà¾œ=¤ø‘ðqxÇ´HU=ÏØ¤'q‹Žò“nÞA—	÷ƒÝÓ¬,VJòüOq÷)H¶#.$>ÓÅñ¦ÂyµšG	Eôš:ÁÞBrp8­v"˜«pWöÌ^„?‰âE)q9‹Ä‚Ù*mÒ6–�ËÅ+Û�™½£ìZÝGú�­Bt95êùEJ…ˆ‹Î+Ðð^eQÈ.7¼~¬“‡Ò¬!}O*Çýâ?TßÖg¸¼Š´ÞÁbó‘,äK?L~ãñ‘M ý<DYÇœK#ñ¶jt8,Z	4Ì8pšZ„ý\Í¸­R£êùfÖBÀEyWÕÓ¡ÁÜ&›Ú$èpv)4Öo�üÇ|�3u/–'êæEõ¥'t</"ùË,†�ºåd+ÎIr‰�MŽšÂ³–qŠ\>Á0 \@B¬<á\.”Å|
Šð/ž(A(RrjË“IÆpwÊ¯3�–¼ÍïuÃ¶E&&°³N$š™+ÈYK³WœªÅQB”’m­¡ÌHÒZ¤†óo!]©
HSi7‘Î~ñ']�xjb….¯ƒè·�zì+áÎ­QA_Æ8ÿÚ ?ûá«…À÷Ê�«‘\îÑ]öA·â|J®ö¼óÁí»äVq‹ð.nW=P½p]bÿ ×oÓà‚î�5Ì_S]ú™
fÓ-mù]‡l�sÉ"ÛÙË&A6!b™$Ê.AgvÈ¦�º:NIÄ€ÖÀÕ‡Ø(ò6Ãóú`|ƒGL(<‹-pîÈúE9Ä~SAMg.¬™5ÑÓ‰‰ÎËLŠôÃ¾Ef.°“J%š¹+HII³SŒªEAS”²o­©LXÖZœ¥†Óm!O]¡ŠÈBy6‘Æ~Ñ/M�hhB§.�ƒh¶�:l+aÆ­AQOÁƒ ¬AÈ9 äƒ�rAÈ9 äƒ�rAÈ9 äƒ�rAÈ9 äƒ�rAÈ9 äƒ�rAÈ9!S!ÐT¾B†ƒ�rAÈ9HrAÈ9 äƒ�rÕ……užCbBˆB¿·ÿÚ ?�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH)% ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AH) ¤‚�R
AHàòê�†n®ÃQÇ`6^…ZŒ4cnÂ#jÛ%ÛÁà‘� í:VÍ:¬0½ì1ýÃù(‰za§â5­³	’uÇRóê~Þ¥çÔý½KÏ©ûz—ŸSöõ/>§íê^}OÛÔ¼úŸ·©yõ?oRóê~Þ¥çÔý½KÏ©ûz—ŸSöõ/>§íê^}OÛÔ¼úŸ·©yõ?oRc…Wº/kK]@˜jˆ¸¶ÇX#´Áyõ?oRóê~Þ¥çÔý½KÏ©ûz—ŸSöõ/>§íê^}OÛÔ¼úŸ·©yõ?oRóê~Þ¥çÔý½KÏ©ûz—ŸSöõ/>§íê^}OÛÔ¼úŸ·©xEåí,ÅÚ„ch‡|ÞiýA»o!ãuÐóáˆŸŠVèæøU7WÒs©ŠñÀjD~à4êÔÞÊŸÄ¯âÒm(–µ¿î0ÌJÞ÷öÚâö¿v?£w6|Öª›ûÿ Ð£Gh²�öª›¾øYB�6îÍ«8!Û":c5ÿ §S©ÛÝÍzÂ–.õ ‡h‚Þ)ïm¦IŒþ+ ÖÓ…¥žµ»�UŸqTÒex–Tí:ÇséU˜ÊB�‡RkŠž(G°/LöÛír£MÀýrZ×hˆ­Û¾>ßû(Šœð=‰´Ëƒj¸DR$b¹U¨Hs©µÎðÁ»"%bs†,%Í§‰Ð±6¬CAh{�9qÚ†‰Ñh-ˆ0�¨ÚPL‹¶àØÃÖ…"öø¦ÐÈö®ä)ÿ qŸêüDíoú‡º…JTw‚*®Â[(À’"�6½¦£s0êU>«~—™hìíM­EØ˜ñýS¨Ôe¯ðéVt ]³0Œ,±CÂñÅOï6añ#k„lŽ´\ã…¢dÉV`#±Þ,F>¤ÒÇµÁù Çb.}F´6Ç@†Õh2<Qý¯ú¸¤�ë]%n¤ÂÂqˆG\ƒAÃwˆl`Ý0L¢ÁôØÜ-Á5¸ål,”©¶¤%ŒíM°vrólM5)µå¶·¦êm4Í¥„GbcCZ$ÖØ=1ÿ ÛoµË&ã­AÍ«IºËL½bÅºÓÄÚÁ£|:°?Åé1xÝÿ Œçoukø”·¨v@Ä]�Fdþ®E­X¸R0µÃÃh³Ö·ÖÔÝ]]ÛÍ07wA�Ãìj¡EÔÏƒ½Q¦Íìû¾¶íŒ«V™ñÎñ@8~Š¯i^ÝíèoB©Þ0Ø[ââÅ‹á²
³*6®*•ÅJu)Ói²Ì'Å9pÂaáÕu¬1cÄ£ú†��}î®*ÄaéÄRhæO9Tÿ ¸Ïõ~"v·ýCƒtþUJŸF±Â\%˜m[«Ý@Òs*?Åki†±±k»ótW„ÚÁÞØ×¦öjn1cÁT)º™¤úm{\!Úh�ÿ ê¨T+3yeAâÛD2N å‰…©ßúo‚ün®\+C±áš¾&,Zád5ªD0Õe:­}ZBÒæŽm000[íJ[™ªº�{#`ÌñOXÔ·½áÍ-ðj·z¢\ÑN81vEƒˆT7‡2 ¯R£«—1¢¦PXÃ87²©Š”›EÖý6ˆn«a³‡ÇÜëÔ=—Ó«LóÃA+ªº³ÉÄú�ÒO4€ækþ®-¥f0Y‚Ì`³˜,Áf0Y‚Ì`³˜,Áf0Y‚Ì`³˜,Áf0Y‚Ì`³˜,ÃŠÿ í·ÚïA§ýÆ«ñµ¿ê–�n£okþ®+¾#èíii{�l’o^I½y&õä›×’o^I½y&õä›Ó Ü.lÁC×íâb1Å(‚G±Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­Mÿ ;úÔßó¿­ZH´bs�·ñÇˆ´Ì)¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ©¿çZ›þwõ¢æÇÒI'§Š~#íMçH4FKæp�Mi6»(á©ˆÃÂÏë@Ê:½Òlù:çÁWÄ�a±³‡AMx½Ðì>¸E:§u¤ëà­°+ý¿áÃñj KÍ1öÀŽ­«w‰5iá©tÊr[±¨ÞË*TdH&'
íWñ"{.Å†:å‡
©R²÷ÚubUª·µá8RÐë=º–7S{‚\×°„œ…“ü Ø™eÏ²-O¦ØöOò+Â¥V°>Rç¸ØNLCb ×àš�Àra0�2Þšïäbì@š!ÍNŸÁù¦¼M¦7*¸˜æ5¢1±?%>Û¿ËýU„ÇÃyñ!Þµ¾¬IŸÍ">8Œa(ÃDUA¼_�¸e[«Gm�_íÿ ˆûy¿z¹¹zn‡g#ëàì¸�œz®‡fÁ·ü8@n!ÍdéY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:W—Ò—Ò—Ò—Ò—Ò—Ò—Ò—Ò—Ò—Ò¡ÄÃˆ·œMR¥nÕs]°GÔ«2—e¦˜péŒ"
ÌqkÆ»#ÄðF¢>µnfØÀþ°Ž tƒ§â�CRÇ—jÔƒ‹œòÑâÐ?¨íf/Œ{?Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì³,Ë2Ì?ö¦?QöþÝŸ€;bnÁøË�2hæN	§Xü»×c�×”ú¾!kdÍ®Ô8Ä–ˆžÚUCœaÍ¬kè¶…PòÛHµó„iSª×T³dá®ˆ8cÚ2{S‚;vÄ M¼}°8}ÒGàØ·qØÆÓ-ÁpÂf]£½NÊì¦=®;U„'bˆ=�|Ê¦íMµ)Ð4L
ø{65¬sm#Z™¼S{)=�õK0´¼BÃšKq¡ücGø„•0öZ[Bx£èƒ�•ƒ°ï$4§U®èï"M6#±7`üGœå·kŒÊ�ÌÛƒ[¸^5Ûøv*f�ŽÄJhÐ‡Ò=ÜAycæ
�7fk`})µœØÔlŠðýA¥‰»á‘2gcZ‹m%ýÖØÞŒtŽ51´ð°ëìþ †0Ó“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:VN•“¥déY:T0B<è_†{çƒ?ó7Z²zBðÛ˜Ï˜(	¿Ý<m�á�»j��¤é:ö´ÜV›ŠÓqZn+MÅi¸­7¦â´ÜV›ŠÓqZn+MÅi¸­7¦â´ÜV›ŠÓqZn+MÅi¸­7¦â´ÜV›ŠÓqZn+MÅi¸­7¤z�á¿öðÄÏZ³„„ÓÍÅ©ê0Ö fÛ›•¹�®+š¤öòP´ë‚ˆ´rÍØ­S
cÓNÄÝƒðÊŽÖaw æû§‹Pþ®'‰Ý6?¯‰í?oÖ-;_"çûÅGý·fæ<³v*GjË¸YÇGeŸ©Ú•m8B{„À$*y>-VÖçB.t•:»Åµ*9ÍkÒIƒŒš# !_-s°5 xýÜ3Š«SB,A!	Ç™UÂóF«)š‡Ä¦è´k-±9Ž.sØÐç†1ÎƒOzÍ
˜‰yª1´SigÞ³B¨œTÝ†¸àË†7I¨RÄ<B"ŽÄÝƒð²u!Ïo Pöqc¬“ÅÂï/AÕÁ:ç™ÛÂæ{§�qæ@s(á:}Ó¬pæY–e›xíØ·pã„Qv©,.0¥F¸ËƒX(ah³³Iš‡YT>žÑ2rÝªÒm6îØú¡ÑŽ`hžÕ»VÅJ”|V¾”@ìÔ~(‚l�‰»åSN�wo§„óvÙƒ=zÖû¼:¥6á«Eí©i¥Šœ;%ÚyÊÞC|2÷n†˜Ý‰ ¸ØìšÞžGf¥:mfÖ‡GÚ·x¾ˆªwfR©N«ðCÃï5Ð1ÍhTãÞ/taây1QåÇÿ •ÜÃ?Zwò#ü½¿ùš;vJ†!V$ÁDK„óØ¡È1ú�¾¾#�2nÎ7Óvi…‰çâÖ!w ïÃo¨¯3¡v‰vÕ`ä›±SðÈ‹#açF–6øfÒÌFÅÜ¼õ*t‰‰`„x�pˆ:
Â©A�…œ{C¶ÛèB©hñ'!Wñ €r;v,M�XàT�;}&J/±šÖ¡„AAÖÓ2v®P¸åm�
Ï-Ó�6óÆîD„×p¹L;Ü1ä)�§Ð0ˆ$¤Þ•&ô©7¥I½*MéRoJ“zT›Ò¤Þ•&ô©7¥I½*MéRoJ“zT›Ò¤Þ•&ô©7¥I½*MéRoJ“zT›Ò¤Þ•&ô©7¥I½*MéRoJ“zT;"*¸°pˆÔUzÌhhÂiÒÑ´Þ©5ÔéŒ}–¹“@‰°,nÊ2·óá�,/ÉÝw_$N™©�*3l<ô�o$êzûMáhÖáÊCZ†–ÙÇ?¥¾ß@±¤�aduË#®YrÈë–G\²:å‘×,Ž¹duË#®YrÈë–G\²:å‘×,Ž¹duË#®YrÈë–G\²:å‘×,Ž¹duË#®YrÈë–G\²:å‘×+Zà6qˆÖ¼8v!<ËŒE�‰&š<6Ü¿ãoJ¶.Ú°÷—˜ò1+IwY×Æì’ÝŠÊ—…hÓX‡�ÕÚ<!ý×Xî?Þ<”[�¶µbÆÓÊóTöŽ=CÏ@nÅi‚Ìaé§bnÁÉb…ºøN±hAÚøñ¸,oµþÎKôÔöñžýf`á�‘^# ?™ 4rxÛh9Ûù¨´§tC•ˆ›m§ŒN²}»=|�ùS6"à¡Ý+w«Z“üZö1Œ‰„l¶[Q.£WZUá¶0së†˜E:�küTÃàÜ0ytm$è²ÅB­wÔk«×€Y†=‘úlœâ€m:†‘†7Œ=ŒRÛ;#zàm: …_PÛv&ì³éúÇ¯� ¼W�j™ téâfÀƒuzdu…Ë:ŸºlÙÅqæMÙèØ™(ÇéÏÔ4dÍœ›*Ú9ÖˆöšZ@<ÆÕ¼d{j¶œ÷;éöa Áa¶Ø§Ö$au*tùâÒèûVçH–âÝêc~ÎÔ¯MÝ˜iÿ Žˆªc�c‡£¢1ô!ÀÊA¸·“’	Ôë´�èÉÆÔv&ì³þSëã6—­Û9R;¯´mâDdd¹Ï¥ ™_MÑ#G®ÐîÉâž{=»�„1X³«ÒƒáÚ+;rÅ¥‰»,Bþ+ª{ÒØ9[&-i]¾Ë´…Øirú†Ïpz]=ßþCü!
”ì«NÖÉ6 Ó1ÏÅ#N„›u»ÙÈ—8Á¢eE�ÃCY›¶qà†ˆ…6Ü¦Û”Ûr›nSmÊm¹M·)¶å6Ü¦Û”Ûr›nSmÊm¹M·)¶å6Ü¦Û”Ûr›nSmÊm¹M·)¶å6Ü¦Û”Ûr›nSmÊm¹M·(b(rå�×ÚÞ%“u�«ðº®ÑLiàu>ånÓ~!>1ouö·o~‘íäÞ`Ñ5âV²—ût¿7~1¨÷J�±ã0áæ§í<röRÅ@F=£(=†->‚ç»+m)¢µ<«åŸÈúªi¨âîmÏLão©5í“„x°¸®Ûq~¦¬ÐÚ¦ê{ÆÍƒ�Æ~Ý‡é·Þ:ùØ“Aw®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zåÞ¹w®]ë—zå7xz&Øñ" îËõ:·1µÜgÃ3»-ÚSX;¢Äÿ f­•§h>ƒJ‡¾q?cS€Ì-fÐ™SÞ�UÚš˜ÝC†¦ì{½ª	ãÚ"²A»³'RÚ‡S?ª X¹ø>ìôÐŠˆñ÷z_«ÿ /c²ºhÑ™FÍ£Aô
®ÑLià­CÜv&ìw 2Ÿü�óâ3xléføLÐ"F\±q�´§oÍV\ÍÑÉøµ�9KÌ#±T.|"�Ÿk‰…º¢I�IPt-Z:GÓvfêà8DpŒG`à‚4N`ì)Ì3i�õq…6æ:ù„x¬øG³Ò]ÿ Û`ð³yof¯ÃýD¹hê^!�GpRvŠ€°í˜ô
÷Ayöq dŸ»:tígÀyfnÂusü"|™áÝÝI¥íÃm°pœUvVv(>�y6mæ[È¬!»4},�s©?4˜Ü1¦@Áÿ –åY¸haúy|1î–•V ÞÆÙGÞ°ú‚ bâ Óg†Øe#Ø¡M¸œ*ÚàZ·Œ-ws·JÂÍZŠÞ0’êáã¢pÃVÙ§vpKL'êN/�:m,�'ü·Y¥�4‡”Hh`ÔZVô[‹Æo—ì0Ñu]ÔY‡zƒ,³ê *¨=šÎ¢llÉÑÔ¨àkÜ46Ñ´>2TŠ;Îñ´÷¬æÂ�ýßÍv~ßÆÿ ºŒñbÓúu'8±ý‡ƒH¸44@É°˜!bgûÕVÿ l[Êþ5–»Ç�éÅ/‘
› íÔ¨ï?<ÐU�`5áð[Ö°ÙàìY—^¸¦0La=¨RwÅ¨ñð�g¤×©ïÔ0õYÃ#4íÕÓ§m3­‡«–¨t‘ë±5¾è‡1š‘¤$måë»ÜŸŸ›Èÿ nÇüj"G•©¼™;³Oá™á°‘Ã‚°IB6	Ù©DMNsV(ƒj²Î	ÊJ³RŒmÖ£§ZŽ”mœÖÙðˆÚ‚¢`  Ö‰ 8,0à„lPÑ«ˆÏ„{9'P|ˆÅHûyg;P%SÖDO¯ˆÍå¹©fçiš6ŽV…/}ñ;Ã"¼#š‰À. 3TvJbebÆÖáÊÅ.=º�%jÕqwƒ#4íÝÙ¨˜‡G(Úó+Y±ºJl…ƒ“pu„GàM`g †’@ÄtDªµ<OvmLmWŠ‘�„¶îžm.Ó0›Q²u¼­Mnì�ZÔ!Ä�’~ìéÑ=Ÿ„Ë•æ¢Î—q<SäÕìÔæ"E`Ý¾­M}Ñ´¢÷»gfä8îoŒK’|3;²Ý¥5ƒº!Æfò$;5~ÕÉ’L švôîý”Æ¦^RÐQrÊ.YEË(¹e,¢å”\²‹–QrÊ.YEË(¹e,¢å”\²‹–QrÊ.YEË(¹e,¢å”\²‹–QrÊ.YEË(¹e,¢å”\¤8ßN�ˆÅ%QÕ Âæ`hóÄËJcê†´SŒLbM‘âíÕíRÛ¤r»½/yñ?åãSÞD‡b¯Âz¹Zµ¿åy†Á`âÀp»vö›´&TáCê8m7&ÔspQ§m6™“¬ñËL�…;v~zYN¶hä¿ŠÜ�¶¹ö7ñ˜‹XíE[eFÙQº�)ýª}.ã;+¬(Ñ™G²vh<™Ã�ý†m)´ÇtC‘«»{§?…ÜcOuoˆá™ç ë_Z»�égd(µ–ûÆÓÈ¶½/6–�mÒj3+¹ mj–Soæ°ÍÆ×»Yükù<Ñ™ºÃSM7XG'Z¿ü�ƒv6Î8Þ©ÚYeVëgôAí1k­‘‹Í§+DÊþE{ò©{¿×’fòÑK8ýh9¦-2<8ª84-4·]]çõ…¢”ñÛTóº}å.1¨ùwŠÞkäßuº½.,µî!ŒŒ¢äØÔñXsÄ‘Î šÒÇ3Œs´Ã¤&œ{°™b”ƒX„Õ³j=—0á}^è*¸&Æ>Ù„z_ÔlN½+èïoéwh/û¦v?æd½a4Ä9£Kµ¼>ÀÑ£œ¦ÓÑCÿ ÔyùRˆ—´à6•UÚ˜"¬†îÏ™ë¯©¦£­<¥˜š55Äš§ÎVjŸ9X°âv‚ã‹–�´……ÖîŽÊïpê<ÜX› ™^;¼–y×ú½2!ÑŽ º‹ÿ M¢a�q‰õ‹'8[LöŸ…åÏ²v…NŸk{ÐèêE”ü¢âàâÇâ ˜‘'Â˜s^ìXžÇÄFbUcomØ„A!§Ó±6ÝÑÙ›îc™DZ�j87PÒ¾…~§d/­_}Êvt¨Sl5�<Œ Ì/£õhÄf>­§P;Vô·gwöBíTm©‚&ò¾¥J•6ºÅåu›WdCgà" Ì-/Ý:YýsLZdGñÙä³Ïv¿Ò %þú`ÔÝŒéénÎeÞ'ÝÂb¾›<{ïÍêzºj>Óø©~êl9¨§f¥
Ì}'j"=!x{°,gz»¬ùPc2�ýä…Î0h™FÊ"cf»TM¶È�ñÙ5aá‹]XªÖqÃe¬lÈn²¢ÖÖñ›PZ,°˜Cüw"5°4ëÖ†“8þ/®&þ¸vo_N£]°ðÁÕwºÞÑè]�Þ³¿Ëö•®í+\ÚV¸/´­p_iZà¾ÒµÁ}¥k‚ûJ×ö•®í+\ÚV¸/´­p_iZà¾ÒµÁ}¥k‚ûJ×ö•®í+\ÚV¸/´­p_iZà¾ÒµÁ}¥k‚ûJ×ö•®í+\ÚV¸/´­p_iZà¾ÒµÁ}¥k‚ûJ×ö•®í+\ÚV¸/´­p_iZà¾ÒµÁ}¥k‚ûJ×ö•®í+\ÚV¸/§»`ýUäÖÞHý4†•æÕŽ¼e}-ã÷jˆô¯©ºâç¦b¾ÒµÁ}¥k‚ûJ×ö•®í+\»­`6(xnÕPaQiˆæâÃÄÄïu½£Ð»;µg…}¥k‚ûJ×ö•®í+\ÚV¸/´­p_iZà°)þ§?{Û˜IRîsjE®Äcl#Oª*&Œ¶‚BìV®Ý„¯¨êÕ~"T)ÓÃ±«MÅHÜ¤n*Få#r‘¹HÜT�ÊFâ¤nR7)Š‘¹HÜT�ÊFâ¤nR7#r‘¸©”�ÊFâ¤nR7#r‘¸©”�ÅHÜ¤nR7)Š‘¹HÜ¤nR7)”�ÊFå#r‘¹HÜ¤n*Få#r‘¹HÜ¤nR7#r‘¸©”�ËMÅAìÄ9Ú¢ÁR‘ý‚û�âÿ è¾çx¿ú/¹Þ/þ‹êµ~2å
tðljÓqR7)”�ÅHÜ¤n*Få#qZnü9ÌvWXS_V§ˆYc,„ôíÿ ÀÐ"×‚AÙ¡2„;Oì‚0p²h˜Ø&ª×43X´Ç™a-�"™`e3QÐ‰Ð/*Ÿ†Ò÷Tµ­•‚qQq©‹‡ú½‰Ø˜EF˜bÛL ›RÄ#C'R…ƒH:­‘§ÞV�šÖ°½î�Ù¬§=ÝŒD8K aƒÂ÷ºØH@k(Ò^ç`ôâNÄÂ*0€iÌÛ('
Œ,{Dpæˆ: ±aÃiO7¤—Jñ!ƒ[N„{BÉ¢c`šdi–²¯–î™hEæCU«Vxf„m°M32ÆTòÞ=Q@øgÂ.Â*sÆœ"¼ Ó"q™X`8E¢œXPtU:ø'—'@Áƒ©,‡Óxp-�†^tÀ‡²"=J¹…„¶*-tA}Wáö¡Hbhvz�¤ÀjÒ©UkOƒ€²F#U“ÐªÖðÌj¿°ØP‰¹:sÉ‹Þà[ëTÁ0—¡»be,'v·é€íGhL–c©Ú-.…¶YÎ·|lÊ*LKµb€âu˜ Ho9‚`£kèÔñ"ÒçOVµSÅÅV„f$Àq?¿„¸4k±P©M®,¤N8ƒ‹´-v¹ªÛÎ�Ö±°´Ã›ÖœãYÙÉi`Ž¤èˆvßþ¯I™þá�: ™ŠÞCíi—D�t<E¥´Ü*Y	¶ÁÏj›@v<4ª8üXýPøá½Ì9 ¼`›¨O©TÅ£DZ@hÕB–1Í5",yÐÆ)°ö…ÖŸxþI¦xn·Ö?‰zpŽ‹G§–¸E¦Â8�!ÿ ·÷ÿÚ ?!ñ‚xÁ<`ž0O'ŒÆ	ãñ‚xÁ<`ž0O'ŒÆ	ãñ‚xÁ<`ž0O'ŒÆ	ãñ‚xÁ<`ž0O'ŒÆ	ãñ‚xÁ<`ž0O!ƒOÏ<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñÓÇO<tñß¦³ëóþiÞ<.Iµ
– ¸Dc« aŽÅG2ü±‰,¤a§Qq.  #	äeKÚ‚4èÆ•ÀR³:^ 	TP*Ï¯Î�âï•!dyøùøùøùøùøùøùøùøùøùøùøùøùøùøùøùø–® dÒÄuý‰ó¨$il½gŸ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ‹äy°(®©í| !VÀ\„BÞ]@V €Á{²²«° ØB‚“Ï/0?XÊÁ=Yf<HE¯hÀÀò&‚’j‡ˆPè|P €Ö‘š8´Pøð0âèµö4€¨ �åYõùÒÚŒÂ‰NA)f)GQÇÄ‚Œàh¾§H`+]€2 )›
¤ o
L o(À3•û‡Ä©T
å|	[‹¶¯ìÿ 6<,ðb¼«5H¹×¤ˆ1NzzÁ¬ApÃXâ!l PW¡ZÆ¨1A’VNöÚ�Çœ€bIŒ`‹Â	ŒiÕ aŠ–·WNÂ5 �¯Ž `¨#Tû�†¨Õ�ÀFÃ8•ÅÈÞ‚yÆÞ)Š 8¤ÁZ
¸Î!pTmÀ°\Ø¥9U	Éèp®JR�‘-iRÅš…¡¤¤dY%rÏ' €§åYõùÒÚŸê·lz�T8›8“ÎõáIçdXn%¼wK™Q]U IÅð¯ž7×JÂ­ô`\OÛÎ>+‚£ÐO^9DxëÆ!aF‡%€Œ…›Öâ¬ •“qÚ=è†êTŠ¼€„Ýx?eøØÊ¡ «|BÙÁ:Ž&£—È$Øš•Hü†i!5ôàÜdÓ@™‚}Q àê‹1Wã:Æ'jf9 –¿õÅ)TwŠ¯htëç”èÞØ‰€~u¬6€†gTBQ@ap�XÃ-™'ª+U-¥€
 °…^áK1ºX£7K¥¸øj™CÑ¢""""""""""""""#Yõùü6Û¯îÿ qALŽ¹÷QâZ}J�Hsž+Úx¯iâ½§Šöž+Úx¯iâ½§Šöƒ’+uCbý'L~M}~t  UÕtI?åË—.\¹råË—.\¹pÂ{DAÅö6øR~Ë—.\¹råË—.\¹ràè "²kTâÚðñ[œ@3ÄPÈÅ¦xÄAŸm6¢BFÁç ¤¡¡QªÁ”Ò§jÁ¨Ð5u{@Ð$h°@ô2¶…à`„	Vh7_7^&Zçòh³ëóþn ¶ <RËbE4	Û 9R4R)@›”ÀF+�¬
«z8ð5Õ�DáIˆª+G ê„`0Ähª
½a[Í5¬ õ‡Ž€Ñ  œT¶yú#ˆ@xñ•+3’@x(³�¡XQnöŒÀ† Ø³€}MIw| Ó wl�8u¯9â $¤/V�¼Å0� 
$FØÀ6X03Ä|7^&Zçòh³ëóþŠª„&„’JÈ°|võÍ[Ô£Žª7bHå%%%#•\À\†ÔµÏäÑg×çüÒ !AzªÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÍèÂ[Å“†N8dá“†N8dá�ìÃˆªjýKÑg×çAX3~Š<
r(¼àVˆep+ð)_HªÃ\J‰ñ_JD‰$H‘"D‰$H‘"D‰$H‘"D‰$H‘"D‰$H‘"D‰$H‘% MñZWÝ1"D‰$H‘"D‰$H‘"D‰$H‘ ú«>¿:IjÔ»ST‰ƒ£ÄŠ!B W„xVfÝt€©W5ý™òEÊˆMëú$@q2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2S%2P­%Ÿ_ŸÛ’#„ÙºŒ>QžT~„ ÏoÌuZ‚C|MÁ†‹>¿?·æRd LxTô™J~ƒÛ¡r!�ÒMs›Å÷t€&½j×‡@ô\Â@Ú8î S¶²©ÁH9˜(ñ8ŠKUÑâé–e×âhè" jUÐ”Š`�T8©î_qa¢Ï¯Ïì`N¹Ö1õËA×ú{tºp6ÁÜN  �¨�øAJŽcähfÖ”qgó#‘ƒ	pCpQ*	B…ÎÔƒŠ]¾/B'�µëø‡Ú:”ààÙcé �ÈàH�2Ã„÷/‰¸°Ñg×çõõ±ZX†y¿Ž\¡Å÷´uªË=´òÁý·@Š3hŽ< �!È@pÐÊI�mät¨+àc.¥!öXª9î_qa¢Ï¯ÏêŒ¨T&"ËX+ Ù™ÇOôCât'|ôÖ¯¤,=‹ä~�H�!ŽFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoF€!24é2M}~Td�tB¦ZÓŠÓÉäÎ3n!Í|wPÁ¼ h¥�“ÈÐëU¿©Ò&�È¤  ±®¨\Å^œôA¸8É¼šQ�:‰—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¦^û)—¾Êeï²™{ì¢nŒHÆ›>¿?ª5õÒ8ŽEV÷7'×Nƒ3­Z‰€Ò …`PÇŠúVÔäØ1&ÐœG¨!$årm×dí¡¡œ;,vÞÝ�Îy!<°ü—UŽ§¹|MÅ†‹>¿?ª.Z¹Q°ç7¡®­X„é©ü–a ‚¶“õÁçí ë}�ƒÀö$Cˆcè(#¥¹G¹¶öèebð8ÊUŠJgŒs#‰žà<`p\¬�ˆ­9ÄµN-à¦	ÔYXiÓE…Hi 9[Cˆ’°oBl::Ç!Æ,¸	©
¢T(³ÔªîcÜ€Y…|ÆÜûG@Ö„Kª@„f
 Ô�=Ëân,4YõùýNL‰ŠÅ©ë°¦p®«tÔ A¨7øùŒÅD®³›J©ÕÍ¤ýäj6ÚL»AR�¬hÞ1	¦‚D^Uø›àfø_Ìëûttœ(ÍV|FPD£ò“Ô:ï ÁïÌxah$Üh�âµ˜R&BÐð0W’Š¸*ô+8Â‡A$  1OI‘TOi(Ò ç  ê@Á†J¡VÀ KÐ0VC 1 ,e·>ÑÐ 	2�VÎ=•Jyj¹=­=Ëân,4Yõùü€TeÕ&1¬F”Š‡©ˆ0°>UòQ©”}¢Ž¨€B!ƒqòu@zjç°U€_zQ¨" ¸9N¬nŒ39©Ò@!ˆa°}º#40œCÂÄ³ÀH,HÔ5øH¼Á@!ÊqÄ)í 0  E^¿€mõÐk`®0p‘60©î_qa¢Ï¯Î–¤äÐND”˜ üè"¿uìà›Ù<Ö¾C´
²6ñ0S4p8×O2»–ÅŒêœÄÍ�^|t«<.´€�€fÀƒÓÆXëò»}à=ˆ"ÁYÐÏ!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò“ÈvO!Ù<‡dò�Ù,'è@ ,zh³ëó¤„CÜCˆ¥ÓŸ´AóÀ‰7�G$g(òNIÉ9'$äœ“’rNH¬0"zùhrF ¸†Á™]á”Ha‹œ“’rNIÉ9'$ä€UÝC0Yï
GOŒä„LËõŽIÉ9'$äœ“’rNHný"rNHdágÜ®’rNIÉ9'$äœ“’rF(ÂÛuý'$äœ“’rNHG�:§$äœ“’rNIÉ9#kÃúX§¤ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï<K¼ñ.óÄ»Ïï
rl÷Óg×çHŽØT5Î ªx(J
�èLâ´‰®¦ÁR}!³ù´m\ÄŒ%z÷C×bæòO(Ò.¨€B!ƒpc^žTéÅäuèD
Y:Å‚ÿ .’þƒð:(bdr!»‡ðõ�|KŒ9U¾›Rå›žšþ‡tÀ=ºbé<Ðžh~K¨ê{—ÄÜXh³ëó°®tŠû‘ƒ]ÝRh+“åÁÀp PrŽ_Þ±éYpƒJ°äy³PvÐ!³GÁ?	V�ÃÀ<îv¥q_J
Â­V7{þíÓyé�šnƒ‰ãè'´C	D�šAÄÊ)LùàõJAòÀË:‚¶P£/hH> …Vé.ã•2¢±„R&140J&!Çð�´t/ §×žSÜ¾&âÃEŸ_�¤x >ž°ìÊ¡1@©Ü1;<Y¹f-=%bú…8}‰™_ƒ}qÕ=vnNØ”�â£W/ÅÏð/n—’©‘éÀ¨0Ãœ«¤S=£BÄ}ŠÄ
•x?²�ã Vâ-C&
 êBåJˆÒ'¢˜¦1Â°• ¹’ª„}£ �
 ÇÀzÂ>‡	�38ñžåñ7,úüí"Áß£g¾±¬±é»�©%I 3iI�7mùE¤É`!qaX£¬Û¨S @)ø·@5†¾r±-R*§€2½4Oò¤óÐR	¨èÂ`!@‰aàç¹|MÅ†‹>¿;KÈ§1iŒk¨_W™Ëk¢FÈ(DºiŒäêa«W¥õ<`   @XÊ(¯é>æ àpâDJD¯ .=ªç70´Äb:…õ=hˆi…d°€`{à5Âƒ¼CXP‰ç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞyçyç�çžwžyÞDhH'î`  M}~v±<û.#PÆÕ À¶ÈqóKˆs`è82,±aê5�»��JwŸ]�O+(œ
®.‰k‘ýUŸ_�­B5À1÷ýºN‡^uü P\	ñöŸà–´r€Yi—^$�Á ©°ŒáÍmð»åQ-Åƒ×UÅB*ƒŒ ¬3=¦4aGÌgxCäA®Hšsâ”qå†‹Ž¹8y¢^ÀÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç3÷ùÌýþs?œÏßç G#œ¡T}~vÑÈÓ‡#óï¨Â»Š˜Æxƒ3¬t¥&X £
÷<°4ž·Ì±
¶ Î<øûþ.‘s4û™G�8ðï8{1Ì!<   (†¹rT‡ÿ H>ÒA�Ñc‘ÖßŸÐ¹ph³ëó·‚ rÄ«UË\ðAÈ;� 1�8»3�ÚŸ�Šy¶t¼~ Ø—O�-ñ¨¥2R8Úz^¶&Y±!C$È@UªÇÝ6ya=ñùÒP�-âù–1œœO,YSR�#ŠàN @Ç€	†³„tX<ïGÇ&ñŽ Ãˆ•Ö#ŠÉmDfò¬ÉG¥è# 5pT/aÒlfåÁ¢Ï¯ÏãÄï¼Í� /€'ÇÕ Ê ävÀ!XôŽK‹äM=´vKoÀ ø³P€2¡@ª­ÆÇKmŒþ£É÷-   €e¦ß#¬'¾?:EÝLbJ ³n°ˆ;XäR	·‹ EÝËÖ@C½xñ„ª‚Ï?&)šÁsˆ¹Äƒ%‚¾¡
Œ~+91EøÑô{ñ"�U|Ô6†hqäI´;˜i• �=%ò„† \.•RÆ±Cá�+d88”Q@-MO T`Z$²êH†`=�ÍÓ�8vº1‹\B»�h�Ë,äÃÖ‡“q…7<ù¤
@¡dtÈÈ=!7¬�’ï-Ò…s`ÒÁ`âh3ˆ9ãš|a”w®*I;ð+´¹ph³ëóøñå£“L@&q]QÈ}6Çò?íƒìÑÞPö–@r;sÁAó»çT®é£¥x FGhHšs|?oêu-ò:Â{ãó¥Îx|Ôà¸a	 ˆØ:P�� å(–jt„C	É$‰âó�†!ÐªR˜0K„Y’Ät 	`›r„€DBÍAÈ@4Ì¯X ‚FúÆÕ'Åó‹ KóÆ  XyÆ[uÆ\©­óç+0Ú�¥„ %X€Œâc&5
*‘”¸a)†%@t•ZíNšMŒÜ¸4YõùØ Bâ‡0vÞÁçÊ‰êÁe£Ñ~áIcÈíyUê0è	­úÂµÓÈöh@w„°Î1xQÈ�—n6D€%aSâ‡&žÚ£m�Föñ‰ßõ´vê×¹R�9!€d5-ò:Â¦€—¼cÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆs@á(@Df4,úüéã~W(d3 ªÁXz¸‹–‡P*Yž“ºŒõòr)§oHÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1‹€ÐãP"át	Le1”Æ#P¨FF>œCÝŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œc"ä}^Ò˜Êc)Œ2'£œ>°~¼ÆOî)Œz\»¯QÆ1ŒcÆ1ŒcÆ1ŒcÆÏne��Ñ)Œ¦2˜Êc)ŒÉsŽ<oTA±ŒcÆ1ŒcÆ1ŒcÆ1ŒcX6X
†š¿)Œ¦2˜ÊcyrrÈ8�ñ‰ãÆ'ŒOž1<bxÄñ‰ãÆ'ŒOž1<bxÄñ‰ãÆ'ŒOž1<bxÄñ‰ãÆ'ŒOž1<bq i³ëó¦¢, 2FÙ<xDæ£t¢„M€@zÜ@ÓMÞBõ•¿2’’‘	H„¤¤B!))2'§ùÐ„QD!ñð'Õ)””””””ˆD%%!¡xˆÄ"Šƒ$ ¢LÂ?«,d/Wx„¤¤BR!d+Âòä€•çt?p(¢D" ±£#wvã]éiH„¤BR!))†m‡ÙÆ €D"E,r?ª³ëó°½ÈK´¹fÒ¾/åß£ÃhH=ç°ÖŒyëó>ðÙ”<ÆÏ°–ÄÆ·È°¸ÒQz¼\¡¶Ã?¥¼ØˆBu¢JÃåˆ9�€S{žÅ�ƒ¬yûžçZ×#ú«>¿;Ü†€D¡Ðœð2Ü,båÇfxq:\ †ó„z	`v>®B6 A Ûpñ9¶UNW?Bña«t‘ŒøŸ¡ÆPôt†Ê¡2Š¥>?GŒ #*‚8�bú¸|IàfªK¥xëÚäg@œ…â€xY8 ø6ñ€ªÎÀaˆŽJ¼YWR.”(*{ èŒ@‚š
€Éš²�HŽ”�ƒ©ü>¿;Ü†›
+Zˆ¬4-öõ€ “mÐ÷„˜*×8j]+¦B•lO° ló�ûÂ #*‚-«Wåà†°Dê¹ÚQÀî'À!µFç£‡¦ÍBÃ^¯J�A`.Ä9=± ,D¯r1‰ ,‚5Îƒ' "±ÖEââcãak‘üGJ˜XxÀŠ[c˜!P º‡zÙA±Sh—qTQTru€J®!©¡rºæó@,•†Ô“…Jiø}~vur5âSˆÇ&ò ùÀL#M~Îc�¹‡Ò)=‹Î,¸«ãæ3s±  ÄCExŽ_82œ<y÷´4™”>Ã“_œÌ�UŒÑ/x9 pú±‚D±ª-šqÌŽ0® $!k0ñÜ  
 8…ž_ŠÌf3ŒþŸ_�…ÝbÁ¡ˆ…fº§ÇIF‡öÊR]gnqŽ&nÁÃlñ~�k
�h|S0°ô`ƒ‰‚©0y®©<IÌìlòýUŸ_�…ý†|qÿ gõV}~vÿ Úö}~v¿ÚÖ}~Þ…Ÿ_�…Ïö¥Ÿ_Ÿ÷¡g×çHÐ
É@|#€gÈF2æ@î>Ï¯Î“âi9ÊÆ¤5Úšá'ãñ;€p…qÒ'Ž,Qb‹X¢Å(±EŠ,Qb‹X¢Å(±EŠ,Qbˆã(±EŠ,Qb‹X¢Å(±Dq‹X¢Å(±EŠ,Qb‹X¢Å(±EŠ,Qb‹X¢Å(±EŠ,Qb‹X¢Å(±Dq‹X¢Å(±EŠ,Qb‹X¢Å(±EŠ	ãýUŸ_�&ƒàbpöˆí/ã�<×û…³ëóþôlúüÿ ½>¿?ïjÏ¯ÏûÚ³ëó°»ü]ßª³ëó°»ü]ßª³ëó°7ÿ /ú«>¿;þ,~ªÏ¯ÏûÛ>¿?ïlúüì	À3$ò8ò�ûh$
›Mù@&œ"ãÜ3x¾æñ}Íâû›Å÷7‹îoÜÞ/¹¼_sx¾æñ}Íâû›Å÷7‹îoÜÞ/¹¼_sx¾æñ}Íâû›Å÷7‹îoÜÞ/¹¼_sx¾æñ}Íâû›Å÷7‹îoÜÞ/¹¼_sx¾æñ}Íâû›Å÷7‹îoÜÞ/¹¼_sx¾æñ}Íàû”nY�òC\ ûN/W ÜäpÖ
äáÐÖoÜÞ/¹¼_sx¾æñ}ÅW)ø1óãB÷¤PâLj d 8˜Ý×äOr|™¼_sx¾æñ}Íâû›Å÷7‹îoÜ ”…§õV}~u-ªVxP>ŽZ†Ð�ÂÕTÒn@0`†7ME' xòëð:(GÌ}o2dó­yÔó¹çZ6ó½yÜó­yÖ�¼ëFÞu£o:Ñ·�O;Ñ·�hÛÎ´mçz6ó©çsÎ´mçSÎç�O:žw<îyÜó©çsÎ´mæsÈç‘Ï#žg£o;Ñ§�Ï:™rTJàcò%qaéhÜÍMM ç•:)ÆÎêdÉçSÎômçZ6ó½HõýUŸ_�AÀ}H!�l$®Ÿî,úüì#
ýÈéH°bç
†E9á(Ð7B©W„3Q «´­ª˜$¸8¯… ÜJ´%‚s@—l­ÎH8€T³`Up4‰V$‚ˆŽ0Aˆk?)WÜ%ÁåJ¢b½à BÄ‘ S@®$ ¼Õx•}EåG‡5ºrç¡„”Ž/%Âdpd¡ã…8ÅÒUÁJÒ^ã¡‚kƒ?$�¡’d%~\/HcéX ClNxJ4ÐªU�¦draU€�´…�r B9�¸ ãˆu†²,�R˜K¢Ð!z!R2‡€€  q)ßõv}~v£,­(�ç
M‘	fO“	)i¦�SsàQ¼àe`6(-b#(Ö¥¹!x ±“ 5ûF¿è‹È$V‹-‚ñØ d¥Ðà�˜   ¡}²¡†$ˆT·Ä˜'fàPå¹réÁbaÕ*…l)hY# 
q°q€>p1´„ñqGq�à%"ŒT\” .A™ÀEíÞ @.#ñýx€|PÒ¬!0XSú�ó0t¡$$7Ti’¸zÂ€‡à5¨…Ò
›¶ Þ;¨áŒZþËÆÔ +�ñ¼1¦‚
)LÐmq�.- f§Œ s³l¡ Ã_tbHpzÊöPmþ®Ï¯ÎÔ”Ð-lÿ :ŒÕ8=eh #ãAÀ~¾Ï¯ÏûÛ>¿?ïlúüÿ ½·ëóþcÿÚ ?!ÿ  çŽyÏ9ç<çœóžsÃ´^ç ê¸é1.Rå¢ÑþÒ÷8À 83p�æ�†G¯í(Ì¨x‹GûC¡zçaÿ œ5J ýxBrÁÿ yÎÉÒt¿qþì��Fu•0~_¡?æœ²ˆ”x2‰ñÐ€¸˜HTÀEÏüxE×áâ@÷Ò~°�Ð’w‹á*n¿isŸågTâmÎb’¹„NZµÇJ�â�è^¾3žr™±©â@Ø@¦=ø@.¡¤�”ûÉq­XpgMG?Ö“on:u†?Ø2—ÃŒf#ØA‚*äù!~ a0õF€äG�þ›pqÒM›ã-:^Œ£¶ZµzcKÆ=—£Sâ\åÚêžpœ>{+¨q\ ÅŠ�Àqÿ Šç$é°¤n‡V¢îZ‡œSèu
‡—ù¡ª¸¨ôˆñlkÛ„}q‘ÇoÃ±Ë?â":õØVn-^6$üêèaÐ20]ãÃœ£q¹ç¤ÐÅ{ƒÖQ(Ê ±‡>0±Ä4.3¾fwÌ2Š»Ï,c9K<¿(Cù€Å#çµÉ b£J:u€ ¶†~ug(•ªC€î2\BT°¶På÷8¤C^¸MøŽ¼óK MûY)®û^"«Ot$	9ªŠÇŽÐT,ö`¾32:kÍ>›B.É¥P6tæëÔ>gcïÆÐ@Yöt€´9ú3ô`/bøñáÎ#Á bã“€tÍÇ²'p�½6!´Ac†ôkÕ¸®Æÿ ÙnÇð?Éžæ3Ø,ŽŽ<Ú¤;ÅCn±8à*5¹v¯­$¼¡ú:)om‘â*3µ>Xû�z‰šè67ìu&C¬ÈuýE•¤í\Tsn-p°úa‰½ñÙ¼î:Åœ9#la6o‡$!Ãf7H6}ˆ!“‚«Ú˜¸½BÇZ²8–Æý‡Ý[úþOiú{õ=È9a6�	€îvoÇ¸„ñãÏQ²¹ õŠ°~	§c• Å±scªÄà"9[ö
ÞÕ‚¶N.Nñ·aÀ`'´ü¡ÒýOt½u‰^³ÈmM™‘ÏŽ¥ðïŸçå åãXðŠŸZ¥Vt€-�û¢)JIÉDx?O~£¸Iª7ÄS�ÚÙ¬¨çõ‚6’†íLp ü¡Oà›ÒÕn8ýÅ:ŠÎ7Ãb „F¿²]ªmÎŽ|F¥ ^�ë`Û/Í°g]WŽ°Ÿ™ø�JÇ°!!)EÜOoÙÝ«•cœAÆ“äüŽ¿ •$„„©«þ`4Q±¤aj€L ãìû!|W:Lá*b)Èl.+å±,NTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNTåNVÐ»X¤ØÑ� OÔ8ðÌËõÕ<õ˜1…ÅC‚ßƒKÁà0D&GH01ßž¸MÃ™h ×E|-Îö#ô7ž{+µé áVuè'¦„*¥¿`×Ekøü‡©[Çó[`¦Ž;!¤ ªžPYê®Qè 4‡hL=e­çžÊí¸§9Ò	íç·S…€Z!…‚cMQkÎØSÃó³D@iW	d¾ãíÄ�kÇÔKÅ±]Î`xá+îg@U‡ÜØãxKäqž¤ Ò¦µî%ÂÏ�ß¬D«{Aa™Ë(*ÃwIqk/äFxÕ?ž³á„VãûxŠŠßÞ	¤ðÖ>æ÷ˆ*Ð)÷nVq××ÓRóÏevÞ�FSÆüöÌL½,i[s@c]ZGÌ[PA†üöcIËBÕZV¢Ó–…«yç²/]°2¡×©U|~akN@Òà]Í ÙF19ÆòÙÞ° ©Y-òÚVkA.»2cô7l€Ñ±‡$v¡D%ê‹[ÇkG;ãPdKN-#Þ:‚šs>'ŽUŒ/XôóÙ€åá~{GŒÆc1˜Ìf3ŒÆc1˜Ìf3ŒÆc1˜Ìf3ŒÆc1˜Ìf= ç…ö´‚ËZ£Ö6´¬T�(É6Á(T¯®
Ž¦Ççd·áß÷/eÆ7‘¶ÒŽsñ¬H¹]-³rÑXãØÐ“¬€éËŒGÙYt;]cHì­—�~èdp>'$Çg@½'ãnp€£±-°Ô8ì®˜B¡ÒrB›í’jvŠ—³×!¡ {þòÑcâqšàa]Ü Ž=�—ßû¬Ú=9Áš{CÑa†Ó‘Òr:NGHVÝ?½P%‚ëöÿ bó„-6X¯¢wÄ5Û"p˜»ÇÄuˆ¸zJxÎ0°Òñ„¿Ð>ØR‡J�u»ÿ ‚&í1ã9=`¹-”5Ú¢ºá> D¨VpïLÿ øÁ`m NC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÎC9ä3�ÆØuŒ¹é=q=f œ†rÈg!œ†r9ZÀNC9ä3�ÎC9ä3�ÆÙ(I9Œ^,À"ÑEQEQEQEQEQEQEQEQEQEQEQEQEQE-=)Îg9œæ/`h¢Š(¢Š/ûÝÿÚ ?!ÿ  ãÏ˜DÂ&0‰„L"aéÿ ic–‡8"ÐsF6CP#Eÿ í9D‡V¥¡A(³aX�ã�½åPÝ¤®ãcEÿ í`ðÐQmrTÿ çÅXÿ ¼¤”«—ýØÑVÆ_îÅ„*ÂP(¯Ð�(ø˜PBcËüx#²¯xþ„�„vÆÐYnò×/Ê?´jáh‚ÅŽ·ËMƒú«„åœæO¼J?Ä€âYÖ_I8›è«—Zæ‘Sëoxh Bê†Ž:Ð—¢¦1ß&›ùÃªÐÍ9¦£œé(„:M(µMºAPnÇQ¥r‡£²1¯øüU ¶'«hå¨.<5=IÐHÅ±Ã„µpmþ¨åTñÈAêˆaìr�[µnFƒQÇO	Ç`,!³QÔzéá¥Bì‹[}ÃX2bq:Ô®g¼ü£ù¹PFÐ…¤`ì*e¨5…VµV8iBš—åØ^ðQü)	'`÷à‡2þÎnþ±Þ#ûR„¥·ÆgCtm&[˜Óa;„Ón�ë…Í‰ýøZ…øéK‘}“¡…Är:9ÎÊ­%þ›@`ÝŽ¸÷‰ý‘¬‹8ÆáIuÄlOdbŽ­gãY“”1-júi8�¡€Ù"ö1å¢áÚšòëØØ�€eL¯ÔK†”¢µÞ”¶Ë¨>5© iü!/f#ét°çµ:ó€ŠÖ¿ÓbvZ.RçéÆ¥`k pÐO]šŒcQÐÂÿ ŒÛT±j‹0êØ�‡ñDKŸ”v£R¢ºÔƒµ\q‹œ(•-Â¤0®¨ì‡b²¢a_éÆ¢‹ˆMZªŽP¼*&zEû?,šÅ8¢â$õPcSˆå±)xR§ìƒVóˆÔg$%—ú»–TÐTxkÎ#RŽs° 3ªÎÙUŽZGW_ˆü‡t'oÂ±ât¸¬pzª1–+œ0iBÁ°lø- k„TçÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÎ|çÁ³F·ÚTTF£ZÈ”8œWüˆÅ	à Ì@$‰×‚DÎØ:ž?^ïÐØå²à…¡ZõƒCœEÇà\ŽÑA9¿Ð1:”¬¶%Jêãñ¤kÝ¤Àèp‰½ACG\Š:g BŒHâÃX††­®[!·5äj{ùmÌãc¢Àq§àV×T“Ãñ¶&±üj{´�*‚^±@ª±È6úQ�TN†T4RË%æäc7‹!Ð*{!a@ð¨½ f7F÷™JUU Tî—+…–J²×PÝ<óŽÞçÜ´�8ÚùÊN_÷ÓFéä|aÞ�V^�…c‰úJ›Û¨ðî$¿¯Hëz’Ôp}|Ç"-N~­K\¶Co[8�BUðøÛ à ´q°¬�¸©)«kÆÚ¡ÇnZƒ^í …£�4F€ÀP44hÑ˜ãGz8à!hÚ–¹l‰[ÓlHA§RŠx|@^Ö¤1:T;0¦�sa+âQ<öv¼N©ø¯ðÚp€5¹~€4#\\E˜Ú•pªiáøÚšò��C›/JÏ´EMt:-’¥kT|¶d©YøÛ–¨×Q„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"Ù˜Ycm­D3Ö¤ô�­oÕZYš$;ä©3@¶¹"»��‘exöÖ²1løD³ÚUÊ>u˜¤×Ù“˜ÅÆ¡õf_ÄgÑIdYql¥Ö‰kÙ|O™Í0ÙÔN#ñ®,¼/Ê †6!¾º•x|@XzDÂr}æ ÐšÜWË=p0Ù‡Øk�Ù7ˆ«Ÿ3�Ózù�E–ÀÏíüÖ"!à×”yOx*®qÚs‡¬æuœÎ°*ñÛ†ïZ¤Ê�e»ììŽµÏÇùzn‘ße'dAY²†Ñ0=#¬_9D7$úÁƒ ý›ãü€5XK/Ûb?duÀ6×ŸÒZ3•‹œOíXßLÀD-Œ{A‚û#þ,~Èÿ ‹þîÈrã-b4ÙÅ:Lãõ‰4šM&“I¤Òi4šM&“I¤Òi4šM&“I¤Òi4šM&“I¤Òi4šM&“I¤Òi4šLq�!;æ±°è˜Áæ"M&“I¤÷æ`ÆU„}^†t™Çëi4šM&“I‰Ìåû Tã_qø—Ò&Î@—ñ?¸       K)s¿Î/ó‹üæ�%ðNÄÿ ÞßÿÚ    ’I$’I$’I$’I$’H@                                I$’I$’I$’I$’I.I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$�žßÿ öÉ$’I$’I$’\’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’A!=·ßm’I$’I$’I$¹$€@$’I$’I$’I$’I$’I$’I$’I$	 I$’B}Öÿ $’I$’I$’Ir@ ’	$’	$’I$’I$’I$’I$’I$’H   $I$„À           
ä’I$’I$’I$’I$’I$’I$’I$’I$�I$’A$’I	rI$’I$’I"ÿ ÿ ÿ È$’I$’I$’I$’I$’I$’I$’I$’I ’I$’I$ä	$‚I$’L²C’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$'� ’I$’I$š°»$‡$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’HO’I ’I$’I2@,I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$�™m¶Ûm¶Ûm¶†Ûm°�$’I$’I$’I$’I$’I$’I RI$’I$’I$’I!$’I$’I$’I$’I$¹#~I$’I$’I$’I$’I$’I$’Mä’I$’I$’I$’B`           rI$’I$’I$’I$’I$’I$’I$ãI$’I$’I$’I$…ù$’I$’I$’I ’0ä’I$’I$’I$’I$’I$’I$’I_²I$’I$’I$’Is„$’I$’I$’I$‘É$’I$’I$’I$’I$’I$’9$�ÿ $’I$’I$’I$’ü$’I$’I$’#’I$’I$’I$’I$’I$’I"êI"´I$’I$’I$’I$-Žì’I$’I$’I$þG$’I$’I$’I$’I$’I$nC\’Cj’I$’I$’I$’H\ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ üŽI$’I$’I$’I$’I$’DkTÙ$„›ä�©$’I$’I$�™$’I$’I$’I$’H\’I$’I$’I$’I$’I$�)’öIAIRI$‘Y$’I!nÿ $’I$’I$’H$�9$’I$’I$’I$’I$’I.Ûm’]³ÒYô’I1’I$’BÞÉ €I$’I$’@$rI$’I$’I$’I$’I$’‰$’i$2@Ýr	$’mÌjK$…¸€Eâ’I$’I$‹Èä’I$’I$’I¤’I$’Y ’I’M‰'nI2I$ŒËÔÎId�$A$’I$’A$‘É ’I$’I$�}$’I$&@Ûm·d„¶Ûm·L’I[m¶Ì’-¶Ûm¶Ûm¶Ûm¶Ú’@ä‘	$’I�`9$’LS“¾Û~©$m¿ÿ ü)$“6Ûýé$&           W$É|RI$…Ûh–$‚Ù­¶ÛmÂ{m¶ÛmI%¶ÛmÒH[é$’I$’I$’I$ŽI$�àü’Iz’I"RIž‰$’H°rI ’Iì’I$’	¤�·Ä0	’I$’I$“ù’I$Iy$‚$’I%ì�¤’I$’I-I$’I)$$’JI!nZd‚	$’I$’I$ò9$’@’2I
I$’I	I$’I$’I$’H¤’òH"I$�’BÛ„I$’I$’I$�I$rI$„ L’     ‰,         $àÜ‘P  [$„É$’I$’I$’I$’ä’I·É!Öûo¶ÛW¶Ûm·Ûm¶Ûm¶­m·É!¶ÛiîI	$’I$’I$’I$’I%É$’ÿ nMÿ ÿ áÿ ÿ ÿ ÿ ÿ ÿ ïÿ ÿ ÿ ÿ ÿ þ�ÿ ˜Áÿ ÿ ¶¼’€          £’I$ÿ ÿ ê³ÿ þÿ ÿ ÿ ÿ ÿ þ¹ÿ ÿ ÿ ÿ ÿ þ¶ÿ Û«ÿ ÿ c)$.’I$’I$’I$’I$$’II$œ‰$“Ž$’I$’LÄ’I$’I;m¹$’I$“¶ÒH]&É"BA#žs 8.I$�ÒL0Ê(!/è¤M4x¹¦Š	BK£M4¯$¤�ºMÐ�kñ]‹£LN\’I"Ûm¶Ûm®Ôm¶Ûm¶»E¶Ûm¶Û¶7m¶ÛlŽÛI!t“ÒN*‚Qjº¯P ¹$’O¶Ûm¶Ùt‘Ûm¶Ûlz‹06Ûm±‰$þÛm¶Ú$’’BÐ           #rOüƒ    òI    I4Ñ    ä’*   "’E$†ý¶Ûm¶Ûm¶Ûm¶Û2ä‘¹’Id’DöÛY$–I.Û°òI!km¶âI$’E¶ÊI	$’I$’I$’I$’I%É$’eÛm¶Ûgm´M¶Ûmý¶Ûo›mš>ûm¢m¶ß{m´’I$’I$’I$’I$’K’I$NÏÿ ÿ ÿ ãm·'ÿ ÿ úm¶Ûl.úí¶Ûmµ?ÿ ŠÛm©$$’I$’LA	$’I$—$’Iÿ ÿ þOÿ ÿ ‰ÿ gÏÿ ÿ ÿ ÿ 2oÿ ÿ ÿ ÿ ôú_ÿ ÿ òHI$’I$™	6I$’I.I$‘ùÄEÿ ÿ ÿ œêºÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ úh’?ÿ þ¤�’I$’I'ÿ ù$’I$’\’I'ÿ þÅ£ÿ ÿ ÿ ÿ øÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ú“ÿ ÿ ÿ É!$’I$’I$’I$’I$¹$’FÛm¾Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¿Ûm¶Û’BI$’I$’I$’I$’IrI$Ÿï¶Ûmöûm¶ßm¶ûï¶ß}÷û}öÛ}¶ûm¶Û$„’I$’I$’I$’I$’ä’I                          NI	$’I$’I$’I$’I%É$’t’I$’I$’I$’I$’I$’I$’I$’I$’I$¼’I$’I$’I$’I$’K’I$é$’I$’I$’I$’I$’I$’I$’I$’I$’Iy$$’I$’I$’I$’I$—$’HöÛm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶rHI$’I$’I$’I$’I.H“íÿ Ûm÷ÿ m¶ûï¶Ûmÿ Ûm¶ûm¶ßý¾Ûoößmä�’I$’I$’I$’I$’\’&ÿ ÿ ÿ ßÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ßÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ßÿ ÿ ÿ I!$’I$’I$’I$’I$¹ LÛm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Þ’BI$’I$’I$’I$’IrI$‰$’I$’I$’I$’I$’I$’I$’I$’I$’I%$„’I$’I$’I$’I$’ä’I6Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÚI	$’I$’I$’I$’I%É$’.»o¼×m÷ßoöÛk¯Þmôÿ í¶ßïöÛï¯ßmµÔ’I$’I$’I$’I$’K’I$Ë,²Ë%–Ie–K$²Ë,¶Ie–Y$²Ë,²Ëe–I)$$’I$’I$’I$’I$—$’IÒI$’I$’I$’I$’I$’I$’I$’I$’I$’òHI$’I$’I$’I$’I.I$‘¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ä�’I$’I$’I$’I$’\’I'ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ É!$’I$’I$’I$’I$¹$’Gÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ’BI$’I$’I$’I$’IrI$‚I$’I$’I$’I$’I$’I$’I$’I$’I$’A$„’I$’I$’I$’I$’ä’I%²Ûm¶Ûm¶Ûm¶Ûl¶Ûm¶Û-¶Ûm–Ûm¶Ûm²I	$’I$’I$’I$’I%É$’{      †ëà "ÒB €’I$’I$’I$’I$’K’Gäáe                    E%™À  y$$’I$’I$’I$’I$—$ƒÉ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’HI$’I$’I$’I$’I.I$“¹±$’I$’I |nßýI$’I$’I$’O#·$�’I$’I$’I$’I$’\’I'öÝ~I$’I$’A uó{’I$’I$’I$â8�®I!$’I$’I$’I$’I$¹$’I$’I$’I$’I$’I ’I$’I$’I$’I �I$’BI$’I$’I$’I$’IrI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$„’I$’I$’I$’I$’ä’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I	$’I$’I$’I$’I%É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’{m¶Ûm¶Ûm¶Ûm¶Ûm’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$ÿÚ ?Ý¯©»_Sv¾¦í}MÚú›µõ7kên×ÔÝ¯©»_Sv¾¦í}MÚú›µõ7kên×ÔÝ¯©»_Sv¾¦í}MÚú›µõ7kên×ÔÝ¯©»_Sv¾¦í}MÚú›µõ7kên×ÔÝ¯©»_Sv¾¦í}@Ýë¤<’—RbÊx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvž!Úx‡iâ§ˆvý(¸žïäÿ 4¦\¨”rÀ�@€Ð¸y×�§lXÖr5Ò¥7_‰"$`'@ˆºð€¤ D`.…­@£À…Hl¥ A”ð€€��#`oÙ>23@ì¸AÐVàÄCù"â{¿“@mM8í ?‚téÓ§N�:téÓ§N�:b8ŽÄ@ƒûWqÂ©�P�?Á:téÓ§N�:téÓ§N�#PdpI
ˆ,#T@Mn±RÙédË _¯Ø� ˆä¦!éÀ)
�BÈf7ÜÇušÄ¶òÂØeð
z’„<‘¿ tô©¶€b¦Û'a„‹rÂúŽ$Z—s¼FNC`/%†ÿ $\OwòiXMâ;&ã³�¨…‹È�¡²
8? ÆxË™@1³F€–È(Ã€ÄM„àJŠ�9…|“Tq^)ýÌq0i*©Œ3G2á@ ÊÐ�R²K€®î·í$ I°¬r´2rs­€`‘æ“ñ7¸‰C(N ’ƒ4æ 	jªTAEPªå˜rÁà˜ˆ…K„D¡¦aIPXUI  ˜)D:ª¦M!Îñ €‚'$žŒx  D ãd„A ÁPƒ²
ŒY    g„4®�@ÊU&¦è\ý¢Ás`ÔËçØHn!|g±ØxÖDh$SqBJýìÆ$pQIÆ¦·‚ÎP¼Ò F2SpHùSZ0’.'»ù4¬8)Â€P*µä7¯ýŠ…ßÑ’5Tt©uúÔ„I®á7«CX¸5‡0 °ë`R´Jl
SÂ-^©~MÉ—lëá#¼=q‰ñM�B*Õ­K½b@â¹ Iu	,œ kð5bÅÏÙoÛ†t4�Ï¬!°"`À%‘Ü¯©ˆÒMÀHs7<$=PI¬#&£	ª`(dÒ¦û.±Ç bDà1Þ‘Á©j—K¬ÈÁ£BäƒSHx¡¢0»@A€@šœcÂ’@VÂ7^‚M>,¦å˜bý€F``Øæªi :¢°¬r 8Kk¨0¨(6N¨Z&öÆ¨å<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<‘í<„¨5YAq=ßÉþ9¦ýäÆRòj€ŠmÒ``>CñÊà@„¦H›±ë×¯^½zõ­	z p4‚ €   ‚â{¿“BÍ<wz¥eQü¹råË—.\¹råË—.P`6 ¶Â¸t*Ÿ±�¸áì®\¹råË—.\¹råË”<Dÿ ¢@�Z»ƒdÉ› A4% �ØP„*¨ˆ7'’¹˜C�8Ã\tTQrC*¢84¼Æ6%AËI _C¯)®ÏÞ>zŽÆT,é[ €`A{ä/„Â,GCœh §@hæ!¼EÉJ‘€­^¥QÂâ{¿“üÖàÅ‘65GG bˆT<ÙO8(I©jÀQ´v ·¡…„	Ú^RTã”ƒd;�®DüQ›;Ã°Ã…q…®Ñ$€€ÍU4ÂÙ·51„ÃRÉB€@‚º¨"O‹øBS¥2Ž®Æ’"ûåP{?xùÇWØ p*U<†øm¨F�q€‰ êsáMÌ‡�pu¤ œ§îˆå>„	¤±
ÀÜ}º•G‰îþOó[ƒÀ‚(QÀ�CT¼vàÔÄ@”“ŒIlS¬>‹Gl �l ô‰4G˜ ‘�q@‡ p¸žïäÿ 4šä‡b�ZÖµ­kZÖµ­kZÖµ¨D0;(¢Š(¢ˆ G°†0ŒY�–LÁq=ßÉ¢Š¢ �¡F*8C4¥Ý-Ã‘m8@ch’D º¬Y¶1"$]Q�‹Îu:I7æfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêa*H¦ÏL i"¹©³Ô&YêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêfYêa/Ìþ¤\Owòi1 ˆ’˜€â†‹*<çÁ€  *I¼ ~Ò €,Íû<íI‘'Fr>Çô%§RcGœÜÏi¹žÓs=¦æ{MÌö›™í73Úng´ÜÏi¹žÓs=¦æ{MÌö›™í73Úng´ÜÏi¹žÓs=¦æ{MÌö›™í73Úng´ÜÏi¹žÓs=¦æ{MÌö›™í73Ú‰A’*y�â{¿“öá3`' pÀû™=C2/¬ý ˆ 	q&¤ž˜@dzj	€FƒQt"HK$ÄžX.'»ù?n¶¸W¨S+´0ŒóT>&fƒÍWßôûä¾½à4Ú?™‘˜À©<8ÃS ¶Erx˜@@ 2M µ‰�àUs@ÍáÉ
0` üÒöpgÀYWÄÝh9$ J×
u„&âÌ�&órâ›óÝüŸ°¶‹pÈr ïÑ—%:D�¬ :êrl|þƒaDç³.�GU‰$vjÞ�ÏŽs> õåë7v-I(Rà8ò¢)Î@áºBA[` †åE¾º¢�Ö@lO�ø›£-–àÄ�ÐÜØœ3;+ìõ¸¹¹qMù†‰îþO×€¢{[@˜*ëˆ/`ƒfÎ)¹_ Ö6ÇDd$Ã}†þ€ÆþÂ¥D(A£4‚Hˆ5Â¯dß¸h	‹hGò7fZèI«²°I¼Ž ûPÈOa&åÅ7æ.'»ù?TS�8 +ƒª0@À>4¹jü»Cg5‘aÂ~€8FúÁò~x‚h"j–`¡Æe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_)—ßÊe÷ò™}ü¦_(q‘Ð3$°ž(œÝüŸª;ˆ@ P…!Ë"ÇPŠ…ð"Ê¬fx@j€ËA*¼ê5O—îi€/“Í}¥�ˆzªÛ¨f?�FàüšàNa„úL™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ‘ãŽd Ð.'»ù?UŒÌ¹«ài$õÄ$›9c2Ó�C`1W æ>ãT°ñ\Ó:o¼Ô(yŽ'¨ÔA~‚VFñëíôP¨^�’5Ð5ŒlÛýÂ(b {ÍÊû›µ÷ù$@ñ#ÓSzâ›óÝüŸªã k“®„Îã‹Tðó�ÈV¡ÈG§Ð`±J@¨2�èÑƒ\¼nË ÔEFÀ�&€T˜FÙ�"Æ°äxÀAT®þÂI$Ø*  ‘bC*xa	IH×UÁ�æ$š*“…H6CÄM�o Åh t4`D?ãhÐ¹P—ˆ&â@«–BM+C"#D.`³Ï²èwP„ä" ÇxDVTmgðqlpÀy  ¦­¾èËA]9ÃŒ�!ùÀt‰n\S~a‚â{¿“õ"-nˆ#¶0Þ¢Ô>óö:„€°Œ|Ý¨`$K`	èõ&}¼  %AKÁsÔA²qu…�¸Â¹Ã‡pÌÐ|Ä÷y§ò«`Yý  Hrh!Bw?dÜv&ã±ÝÁ!
Ükïì ~•0ÅgP�”­—Œ„¥Vpœ§ö\â¬ßØ@RÅ�2@¯
˜\¶Õ '  þ5ÅÅH*ÅA�Ö@&Öµ¥Í˜SmCRl)†7iBr¦² 3D�“�ã	AÇ8DÜ#E" EJhàÕ†ßte @#‹0Ê¯W‚Ž5è•ÞžI¹qMù†‰îþOÇ$ I(
’cüØƒ}¯&Ä°†¨ÒQ_"€at°À€×jp3ÚŠcë]Rá‚D
]V m-Q€*|F-NÔ‡¶ÀÓ].M¾!¥¸h
a-–8£€(ƒG<g¬={™qàL�ÐL‡A" PØ}ý„hÓh¨¡–Uk�˜*ÚÔ�~:ˆ`ž !ðÔÈC À“ 	A. R·ÔA¹@ÐV<‚ â À [nª€1é ÖPx¥wó•Ä`¤øo7.)¿0Áq=ßÉ¤Òä2a"ƒ€%Vƒ„/@ÇdŸ�@ˆð øŽì  ¹XXç\
l|0;AƒDTƒ‡sqccÅ¤ð£!ü˜v	ëŒõƒâŽÐ§»M	ty�ûA�ìf6nž¥ì‡i€r:ç˜z |ìlò:ãÄ{<   »víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·n’à!(B@,ë"º ¸žïäÓ@ˆ'‚ÄlàV@�ð@ÏK9Tv+ÃI-@ÌÇ…×ùÃ gù9ÿ #Âëü�¯ò<.¿Èðºÿ #Âëü�¯ò<.¿Èðºÿ #Âëü…!þAfÓãŽÄxXð:Á	•ÜK`�wÁ�Ì ÀûG…×ù_äx]‘áuþG…×ù_äx]‘áuþAPDÖØƒ1@îU'¬F
MØð>†#`˜Â‰6YÄG…×ù @ï£ö�¬xcÀëXð:Ç�Ö<±àu€àu„€ å†ˆÚäcÂëü�¯ò 4 ÝÈKš:Ç�Ö<±àu�¬xcÀëXð:Ç�Ö<°ƒâEN(00Ny®hðºÿ #Âëü�¯ò<.¿Èðºÿ #Âëü†¤(£âÈð:Ç�Ö<±àu�¬xcÀëYLÀp9d 
MP±!þ�ƒ0`Áƒ0`Áƒ0`Áƒ0`Ú² Ä¢*A Áq=ßÉ¤ Aˆ APs�ÀÕPac	}ëB\@	\4ŠýÄ‰ V€Sx³ÏÐRÙ<p”ÝÏ�+� êLŒ /> Ãåª~5\2x¿rô0øˆ)ˆ©r¬�`ÂòéhAb5¸Ê2.T]<5V ãþ! I@T˜DþÊQJfŒH¿¡)Yaî—-ƒªäCjØ:0þÚãä×–Æ³Èëïì#ÀÀ?Y¸ßsq¾à €A`ÔùU°—ÉwÔÜ¸¦üÃÄ÷&Àw J¥0ÓH
âpÊ	×]%%q%`#Ú	Ÿ„1Äì”42xÇYÄ0ËÑ÷:A{>Ç(êÀ@Š”|IÂ“ÐÙ”>`œq€êààGª©Ë6Ôá6c»Ç¨„™Œ£[Á¾�±·Èëïì ²ÐÈRhk€ÅqzTRU uîpdCÄšíD@ JÁX4š½ÂB*ˆ)/byòW°¼DÄLª\˜T9¼á7FZòÆa`	°5!º¤ù¼�XØd\ƒ›—ß˜`¸žïäØ_ä4Ø¸âà>·C¬…@‘À@°Qz›1{C*ÅôL• ë©Á4ÄNsãïø' 
¹y©_dK2.IÚ¡cPhFPÄ•6©D¯hóB„ó«co‘×ßØA!…c \@ãCV„p\”=™�¬+úCcHl¢Æ»”†¹P­CÃû 
c@ '¡GŒ ÂóX…Àð#,q@q„—:O	ä_…º2Ði¨�.<d	ø�Ô0V€xTtSrâ›óÝü›ü†§
�ÔkI†bÐC�@X£†œœ|Ð®’ $Ð×‡'‚J1—å
MÆ’Lög, $g­ÁÁ»¨þµPy¡½àlmr:ûûp	v!0å  ,"Ä‡7ãî M€×ä¥@ žkAÉ@­K�ªÂ–p!�!r$MËŠoÌ0\Owòl/ò²²³8AáSÝ· aKÜ5	 3axDÇÃRMtWEetVWMtR#=ë0¶DÐ0¥A™ äžª!ÐÀB>t°Ê€–¥tVWEtWEtWEetVWMtt(œÐèE2®! ”ST/H}%eahÄn vÅ
A×S ˆ0¶ôWEtWC8¡Ð&A $p�õÀÏÓ�˜\¿AŸ>|ùóçÏŸ>|ùóçÏŸ>|ùóçÏŸ>|ùóçg4nš(`dAq=ßÉ°½ÈjÙ#ÀoÎ¥úñÏ¥ú	b4›brÈ8�	÷œ8lV…ø5s�îùŽŠ�yÔÖ rNíßP¸‘.DCØl±ö q'€Œô·ø:¢x@ @   ú‘q=ßÉ°¹Èj†´#�ŒL=82:V…^8µM ¹€bš EÂ-a|z\ˆü°¾)pÍ„Ä%�ˆˆÁ$Š¡9
˜\Y6?RŠ¨“T‚ìùz[U¤&s°@.Qqƒx”tâŒŸÂ 0Äw#ÏO!®@@$  \“
,´	j">!Á50u�J‡yÂ‘ëú¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ØÅ€l3‰i € APA¨"‰îþM…ÎC[Óò‡ßU(8š„BTØ*“ØJÊq•�Mb,‘«ó)ž±¾ðRo�y@ŽÏÁ%Íxá¹‡¦ÐöoE.œ3…£èð¦ƒÊ§¼'æC?:)Ä0hF#RzW8™¡­òƒÐ¬ƒó*E¹ñØ	€Àk�è†ägA* S‚Â€ØBé¿ñ~ƒÛÄ÷&Âç¦¾¨\ŒJà=EµÓEú
�5.?�åKÅ¯n^« þÕÉ7y�
´oÐ$öÜ›ð=üið 4,(9hQæ%¸¦�‚…±lFNÀ˜`à|^‡£X†ÁMÿ ‹KšÉ È�Œòæ@Ç Á¸Ý­€ÀA£Œ4á«áL<ÌÀjÓ1gÉhb0ž6‚°hHM’‘$@(�8C	ð6•9MÈœðq1Š¢ @ìÉ‰ˆ@×d4Î¢ôÛ àÄLcˆ˜Æ $A‘+€@<X	Æú}±Ñ \Owòl.r~=œ°Zè¢Š�Åã}õ  
±zm‰º0Ù0/¦X–=¨¡àó–7^Ÿ€Kÿ 7ûbŠ(* ’¸�
p±8Ö¼ûe™‡Ûš˜0 ¢ƒ­Mÿ ‹IÛÑš¢t³<UJÉAT9["\.ªZ	àIë
…XlÀQ¹0åAˆ6 ÂÄ)iBˆ(�ª@0‚¾uaP!bk‰xJªP%5A�;F}¼°-VUÉQS¼•iQ�_°Ò	¾ÈT"ý hI´}�OÚ6�¼R�6€¥(:(‰ ñG 	}Z5 0váÃÅª'¦#cAø¢!­‚J<¡é‰M³@¢²Šb IQ A®o¬]SƒiÒJ $H+
€«ƒ.ÌÖ m&0šIôDA ‚*’ˆMê+Í ¬WSîp_iÀ	àQ¸§ UW "vŒšªât„„I ™®RˆKz=±Ñ \Owòl.m…J˜bA–ŸCèá¶ DBíÅAòÛúõ´ ²¹÷ÐÜD¢ïH€ç-–rXùÛŒ)yNŽ¨š¹‹«  ;0v„ 2XR`Ž²�$ël�tßø´ÙòT+ €�WB±ì€H³ —d E˜'4‡f"$ñB(Ê 9X¥ZL„�µF«9h(°X®
¸”éÌ!0`µEt Þ¡÷yGñ oIv!ÄY‰A Æ¶l.É „1¹JÀ%	¨“ÌâpX`€åî€@@d„Œ#sKÅÏ±g‰ózÀfÀ*T+@mIÃŠ¬É%Tš›Êî¢M–’O,ˆÕ›I‰ÄNª<Td �hH ÅØÈM‡O¶:4‰îþM€�K$“ÄºŽ[`˜(8æª¢9ÈþbŠ(JMÃz/FÈ›Rv `íH‹¨Ésì•qŠFPòc¹O®\ßS)±:£cò/5·_Î‹Ê)—ö¡¸ËdPPÉ2™ÇQŽ&�j(¢Š7 ÄÊˆ�^·£´QÐ„\70†Q‡ !Qk‚á’“ ¸–ë2Ýf[¬Ëu™n³-ÖeºÌ·Y–ë2Ýf[¬Ëu™n³-ÖeºÌ·Y–ë2Ýf[¬Ëu™n³-ÖeºÌ·Y–ë2Ýf[¬Ëu™n³-ÖeºÀ	#ÄM  @|Ç® u‚â{¿“J�nŽŒ#Ï:0Ñ(`ŠåýyP;†zUºGˆ…L¦'È€š‚nY•Éu%ÔL—Q2]fK¨™.¢dº‰’ë2]DÉu™.³%ÔA¥Ò†©ýá  G�Ö<±àuŠ W"!š5‘Å¢.³%Ödº‰’ê&K¨™.¢dºÌ—Q2]DÉu™.³%ÖTZ.•‡Ô �¬xcÀëÈN¼p
,€!Àž˜	Ð¸ð:À0{ Ø¦K¬Éu™.¢dº‰’ë2]DÉu™.³%Öé b¥«Ða˜ |<÷�¬xcÀëXð:ÇE«Œ
SÌ€€€ !jÉu%ÔL—Y’ë2]fK¨™.¢dº‰’ë\š É€e^(m
àJ¦<±àu�¬xa\q5ó±DêDÝ_©º¿Su~¦êýMÕú›«õ7Wên¯ÔÝ_©º¿Su~¦êýMÕú›«õ7Wên¯ÔÝ_©º¿Su~¦êýMÕú›«õ7Wên¯ÔÝ_©º¿Su~¦êýMÕú›«õ7Wê,ŽDâ{¿“HÒX�Ê,*ÁTQ>jÀ°kJ‚«Ž¥Eœ« x¨(³káçdXH°°“ t‹ é2XH°“ t™,¤XH@( çœú„ J­¦@éÒ&¤È"Í@0.d^¬ƒPBD�"À:E€E€t‹ éÒ,¤È&@éÒ!©@
“”P8¯Ð2 9�:DÀt‰€éÝ�@‚3eñptd‘0 P¸:õPFÀ¬B�F™,,¤È`&@‰€é¸xV…dJQA XDÂ&¤È"`:L�Òd�Î–.e¡º±ñâE€t™,¤È`&@‹ é2H²åHã|  P d	�:DÀDÀt€‡êAq=ßÉ±ƒ”0{Õ“ÀØÆu}(n
õ6Ž*¸GZŒtm€½¯üßÞlìÉå°jW€s÷i©§®À_£¦«>$`5R@’€©'l@È‘ËÐ�ŒA@:‚¾±7øØ~o0³S}…]D1×¹Š‰O¼1+À”; ¥ã»õ3šj¡S!ö~ºâ{¿“e’@t†xGž@Öf6ofI HzæóÅ Æ§;‚�Ú€ cbÂA`AÔó€Æ »‘øŠøl›á*Å=p# «Â Ž'(œ®Bk–Ô£¨žðÝ€lÁ ±xyDr#²   ³¨ ŽYUî�ñ%¢å4ª/æ—/Ë€ã'"#b¤,‡.‡e@E"%· WS´H!0ˆ˜Œ'° (¤/%1«ZÇB#!!°ÂbF ÀâãXA@VD³vââ{¿“`PPðÄ”ù¿Œà›™-Ä,Aã(rÐV8 …k	{SÔz†(¢Š(¢ÉƒBA„:Q!‘µõ:@��¨ ‹�D`Â
.~@ÃGR(œ¬ÄÁ@å~fEÐwcA…QEQE AD‚"4‚““t”&ï}ÍÞû�ÍÈ,ÔÔÅQEQEQA‹(‘BƒÆM+ êM�Áj#PK@I0Šp@z„±“RÍLQEQ@ü@PÊBjÈ`���ðB£Ä$ª¨aÊÍyÊ’ÃVERh*­f7‡8VÌB60¶ÀZµ T§�…¼‚âÔ¾,D,t6ââ{¿“aí†© ‚ n7@7‰�Z»›8A¯Q–EAi¸,¸ún-f�r0‚ð ðk¦†×xâ}ˆUä È¸ ÀS²nŒ²	LÄ€!†áFÀc›0¾Fë~Ç´$âi(é þˆÌáP`6uÑ_Ã$…d\EP}eŠŸ i:PzËãY@d –Ãß?,TÌ30ÌÃ3Ì0’n^Ü\Owòl¤"Š(¢�l9Á(A�‡|dëj–ÈS$<@Ä µÐÁ†!`s‚À×Nqæ ä!d²YŠ(¢Š(¢Š(¢™Ž°²j\QEQEQEQEQEQEQEQEQET †D‚Áœ+bA�ÿ ‚‡Ö_A¼ŽR·DHãÂ l£©|Ix¢Š(¢Š(gêEÄ÷&Àz(¢Š( b×Œ‚”+…úÂÍLQEQEQEQEQEQEQEQEQEQEQEQEQEQBÈF£Q)›Z(¢Š(¢Š(ú‘q=ßÉ°öƒü]®Gõ"â{¿“`!B(¢ˆEŠ!B!QEB(„Q¢EB(¢D"ˆEŠ!QEŠ!B(„Q¢¢EB(„QEB(¢ SÈþ¤\Owòl/ò´_�o‘ýH¸žïäØ@EQEQEQEQEQEQEQEQEQE¡EQEQEQEQEQEQEQEQEP(äR.'»ù69
-
(¢‹BŠ(´(¢Ð¢Š(¢Ð¢ÕQEQE¡hQEQE…¡EQE•QEQE¥K�êEÄ÷&’gðä“ ¸­†�£@QÃ0–#xó7ùJÐ´¨µV¢Š(µªÒ´¨¢ÒµV……®¢Ð´­UZ-ò?©ÝüšO0€) 	jP€Dyz:À$Ñ[ ÁZAxú´šiNnDÜ‰¹r&äMÈ›‘7 MÈ›‘7"nDÜ‰¹r&ðMÈ›�&ìMÈ›‘7"nDÜ‰¹r&äMÈ›‘7bnDÜ‰¹r&äMÈ›‘7"nDÜ‰¹r&äMÈ›‘7"nDÜ�7"nDÜ‰¹r&äMÈ›‘7"nDÜ7bnDÜ‰¹r&äMÈ›‘7"nDÜ�7"nDÜ‰¹Ql¢_©ÝüšmRp". Ò“C'�S eT ys ~ºF®B(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ÑÈþ¤\Owòl ?!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"„B!ˆ@	Èþ¤\Owòl.òâìò?©Ýü›ü†¢Ðµ–…®´-]hZÍk-B×Z…¯k‘ýH¸žïäØ^‘EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE,r?©Ýü›ÑQj¨´-QEZQhZ…QhZ‹BÐ¢Š-*-BÐµQE¡hZ…¡Eú¬\OwòlTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP?SÝü›…QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÔ…Ä÷&Âè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢�_Ô‹‰îþM�¼QE¡hQj-BÐ´-JÐ´(¢Ð´-+B‹QE¡lV¢Ð´-+BÐ´(/ú‘q=ßÉ±QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ~¨\Owòl‰$°C‹<Dð1ê� 	 
’h! .�å8'Ýxv!í~šL™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dêÉ“&L—Ð?ƒÑxžu¬®‰q“3‰ X_É+Åƒ•tr8ÛÓ³º¦L™2yµ©ž��çÛu~PBÖ„'¨Ô>¨‘ 9˜h>)l`ƒÜb“ËŸ´Ga&L™2dÉHÐ°à$T<?R.'»ù5@T34n±Ë{}`8–¦“Ì€§ØˆZQkY±‚Ï‡…)EÊ^`Œq‚õ>èIsóíMÓú›¡õ7Oên�ÔÝ?©ºSt~¦é}MÑú›§õ7CênŸÔÝ©ºSt>¦éýMÐú›§õ7CênŸÔÝ©ºStþ¦è}MÓú›¡õ7Gên‡ÔÝ?©º?Stþ¦è}MÓú›£õ7OênŸÔÝ©º?St~¦éýMÑú›§õ7CênÔÞ©¼?Sx~¦àýMÐú›£õ7Kên�ÔÝ?¨aïaM¢"¾äi~�ª@8�&“K&³˜ SÖ§¼$¹ùö¦éýMÑú›¡õ7Oên‡ÔÝ©ºPPQ¨Ž¤/Ô‹‰îþMBdEÁàEÄE•Qp'AzWý¸¸žïäØf�k ‹G)mÎR6=Ð9bBÊ+�û¥4¹&Ú3ªªªª®3¦”"#@Ñòr7xDš,@PdAê£«�Ê…ˆ&G „DP=ºˆ\JŠá¾¢¨dZPI@Ð,àMËðÆd0Bƒ‚ ¯+^—$Á¢àœI$¡C\ A 	9ˆÞÍT`’BfM„#a1‰`A\G-òT‚X¦ ®îI @  ¹ÂðÐ2˜äP™:PÆ;)âr­("4‘#›±
‡*Æ$]é›~£òD ÈØ“ÐAâX¢ƒ¶ár~RÈñÚ}Ñ�,è0)ÕC¬éJØYˆ¾jsc,@’h!&¸ùiŠB$Î„Â�M¢C	`	nEC€pEŒB¢€\Ò¬Q��@MÇ	`ÿ T.'»ù6(IGàÖ"00hî`õ"¬8{ˆˆH€Q75¹�¼a#i/e]a1  ’â� ‡ŽZO‘¼ƒ[JnA<5º‰XJ•|*˜�p5¾L`XµaÑ¤/ i0ÜéÐ`!¹ÀRC4 Ô~€$¤’PaéÙ ÊJ†spDÅÙ’…+å$86¢ÖI(°~Ö†Ê †I^£&bÚfœLØ„(@z¬\ÖQÿ @ap¸æô! àÌƒ‹0
‚H‚QÇeipq,,	´!¢qò9’Êðf„‘"ÀŠ�É3G ÔT¡ºÅ}Þ�þ ³Õ£¨§(€JËÖ8M%�Áp¨Ö>ý8šI‚}(Ñz#)x°¤pyI@2£Œµ ‰ÖÅ¨²
x,V":Jf�cq3ðDD©Œ€iú¡q=ßÉµV"3e¿8ù¤4OçŽq², ¨  Èh �Œ�€ úáq=ßÉþð\Owò¼ÝüŸïç½ù?ÌÿÚ ?ý+Ž8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ÿ ûÝDb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ˆÿ �?Ž �Pðô�‡¤|=#áéHøzGÃÒ>�€eƒùÃøû¦ZQ«OsÓú„@ñ—í£ÞŸ¨ÎÇÝ2‚1q
QÄ–‹âMq€=�pÅ‚*À=F$MØÝ‹>*6æ7¦<qÑïOÔ?çã†²¯@n ë�2µ‡üêŠ(¢Š(¢Š(¢Š(¢Š(¢Š)ë=g¬õž³ÖzÏX¡Ö´
¹©WÒñBëÔ}Gøw³.F9Qãƒw2ý
ˆÄb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ˆÄb1ŒF#ýÓ€†7n£&�åAýß þçš‰‘Añ1
Îb³%ƒúx`È…÷< ‹ ä
L  ß˜!ý�0 �Î¹Wý@D©ˆ?$cçôñ�•øÊ8¾�#Õðƒ!=Ûóìhàé%½aD1rï, á/-š±õÕ0_`L:)‡àþ€ÞT{B`jx¶ï9¼
Ò'òœpCúÃƒ 3/@±±06fiþú€h¥î_­cÈžÐOgä~€¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š!úÒ¸Ç¢°´)ºy<˜C± ¹YÌBUãž±ç„´-˜ô4:Å¥ÂS¿A0 õV"©3õ=%�nòTQEQEQEQEQEQEQEQEëMƒ½K¶•ƒ”Qê R÷7'™Ó›å3:ŠRgí=#1ØXP\ßÒÞÚ�5ÆÁ‰XBñK´W“<¶ê6LÀ@gNÎ;cxâDüÑë’ŽTkˆyÁÒ¡ªY™Ž…¨U8y¨ÀA[JüÉÌíÑ ýÒ*�ÀÀ•XNîsè¤[.Q¼GŒjo>è�¬30›0˜!ýXHðÒ›ƒ{¶‡Z>5	•f~º��ò¸	�Élà1QkÊ�‰XDåS©‰_K§Žºƒ`¨¸/zL£p@Ær9è i&2¯ÄßŽÉ¿’¯œ‡¶¹¼FÔ¼´9°,c P»™í˜$�*bì¸j 3 Á8�$]zŠ,l�g•:™GÚ,d÷Õ CXÃp�¡á—E˜±ÔvàŸp{lù þ¡Ð,P,D •r¸ë'š� „#!Â!„¯7‹0Apòrzÿ "¼òœpCùDA8ûÖ}±§è ¹Ínq³Q™<â„šAÃ€F ñÒYû¹}Ž1‘Nb¢gU\øûéç º• øÙ‰Ü~Ž>Ð@±×,ŸÙ|þTB!ˆD"„B!ˆD"„B!ˆD"„B!ˆD"	M© _f~tq‚ÁWž;Ô� eqÏÓÜ¡Ü ,lN2ês( Dp{ñ÷–€	ÅMÐ±õ8zÕñ²mw;=’xîþ¡¾Ì;ëÄ²~–ö×«É_�(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š-ƒÒ&ª›Rä%Ÿä?¨mXÄž!>{p‹ýÈq'  8�úYã9jŒûéçCòOÄ¿ÜÁ	dõž±àÏð{´ö�Îà„ á2ã‘ÉA²½w¬â\`x�—·Ð!µ¥ï¯‘¯è_àÞ
f2§�O€º�Ìì„%0Òp¿¨N~>ú÷pMrÀNE�ÀpâvHŽYË€î¾¶{Cît�Û åPhjf<Z€6�lÊÁÁ;�e;ßxh=w;^8ñé_Ú[@·2ßÀà½ì"a:n�‹‰äž×ùJ(!Ú‚ñ�Ö)21A©î3Ö�ä´bääPêï´P;Áà]ÿ bñÍ½¥]’nIâvÊ+¨>õsÜ>ÑS'½ 7‚LÌEJ¤- ˆ`öeÀ¡)�aÞ{_å¬‚°X;ô,÷ÖGXöÏSµþP›=o¤�6ˆ¨û£/Ê€&VÅoé!~ÍS€‹§Q$~ oTáÞ 9ROÏ{ÊðÑ~`‡lcáæ*#Jê¼Å¾¡1Ë�Ñ·Ú•DˆÌQÍt&9e(ùx!ÔÂM^—ÕÆùH`�æ`«{¼9Ï†ª·0ä¨˜ÈEyŠ}O_��È“	å°ç°¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤§àMÍÍöj—/[ø�`[b&¤Í|gè4#Ê\5š»ƒÔ¾¡%ÀÇÔ—ÖÀ`˜Á{x?p©@´ðzÆ�±ÎÄdt -îC]I�aA“„@D~…Ã2Æñ…H<! #8½aÊWUÄQ—"	F�Ö)jXw 8c¬!r§ êY³˜0ï±(‰›ƒ7nÜ¸3pfàÍÁ›ƒ7nÜ¸3pfàÍÁ›ƒ7nÜ¸3pfàÍÁ›ƒ7nÜ¸3pfàÂ Ðëø0‘øsÀ�ƒâæßbÆÞT€…MDnnÖÖ†Â§Ò°Æ.&\ñs#·à‚á�æbâlhy‘'ð9õ3`éTdäw×±ÜÂöàÀmq�±Ôþ!	›��ƒô{§ÏàÃå‹–d•ÉÛ\9»A@1.Gˆü�ú ™açøX�ýj ’ÖòZ‘¸Û€1V×›e`ÓD.�s…€¤�M@òÌœ 9Vàë„!c¡CâW®‚PpHÙ8ˆzÁ!Xx‹Hžéóù0£8ôÒ—îc £¶PŠahfãCø˜ÛPQ çäï¶¼Ö�ße`ÒvAœA´KE2¹gŸÉü† Ö	ˆX6cFàC¸XèTr'ZÁ|ËÎqÌ�;Üà29®8Œâ¬�r›Ç•Ÿë^$koX`!(ýmÜ
à·˜ÄùF!±â|VVqMñr	<T8‚¢°Tx¨–¡KÇ½@`áî‹í¯à%ÃåÚ T(biŠÄ˜™sSà{ÊwÐu('CQê¿Xk™ª½Ò8ÉbcèÉé‘Q�?aÇHžéóù ä/½t‚AbðB-t¿­²÷úV?Ät©a=PäA¸Û†h?MP9y-	ŽÐ¬ÍÌí³°i¸z Äˆ7Æ 8B¼ hD è ƒp�	RQ¢ah@1D"UQÀ²MÉˆBúê ß"{§ÎÈ áôôÛ-Äc‘Â�5ì[—!n6 ™©¦�@±ÂYì×¾†ÍÊÂ¨—¨‰lª#d¤¤G„;ê��D7…v�lc™à!È•ÎÈÀ Š…QEQEQEQEQEQEQEQKTÂˆÄüêˆµ,,ýHgxm[‘^‘‚q:€‘Q@°W’ûPßi¨ 1s"MÈEÀaöq:ŒßUúl€õªrÇ.'YÙs^GXBÙ€1EœÍüj�pBÆg³8õ™Ç¬Î=fqë3�YœzÌãÖg³8õ™Ç¬Î=fqë3�YœzÌãÖg³8õ™Ç¬Î=fqë3�YœzÌãÖg³8õ™Ç¬Î=fqë3�YœzÂG‰Öê¢Ëòp;^A^ºÂâç¨;íC–ºš�@H¨„%šéÝÔ<Œ1ž-�ûßb4Ö,\¤¸€LÇ..û,zSï“ûŠ¹©P1ÓZÅ–Ðu¼QÄ K×ˆÙ¤xŽB§ÄìG6 þj¨kÃ‰Ús�NÒ�C‰�·žÞ ˜ÑP¾¹˜wØ
€ý×¥yâ]¥t×€-³Z9šë�%º‹ê±<‚œO/\n9l�9%ºÃ‘ F”å™„oÌ8ÆNÐ?A‡<!u€o1™XöýåÖ¾:Cz3C¿F‘�r�â'ŽCrŸ°]ÓQÕµ	ô†T%Õô»Œf
ƒû´væÌ®”Êé@É¡�_`H,^Ð71œ!j”/ s£†O¿ð(6?œ!#C¤‚¼ð«ùkö†Ù¿Ž›H,^ì‡“î`¦y�dæC ›Žu”'ô¤%D¿Ð(DÃ½™È}8n´%–v÷ ¨½Øå\¢•¢ÏS'DÝ²§¤5ŽxÂk��Ñ• p¾Šáÿ ¿p¿ó¡þ,ÿ õ*‹ýØÿ  þdjàf©/`tÐÉ®U•ØÞ�ãxûÆñ÷�ãïÇÞ7�¼oxÞ>ñ¼}ãxûÆñ÷�ãïÇÞ7�¼oxÞ>ñ¼}ãxûÆñ÷�ãïÇÞ7�¼oxÞ>ñ¼}ãxûÆñ÷�ãïÇÞ7�¼oxÞ>ñ¼}ãxûÆñ÷�ãïÇÞ7�¼oxÞ>ñ¼}ãxûÆñ÷�ãï óvž2‹�QƒŠ`‹ÈÆñ÷�ãïÇÞ7�¼oxüfM	léÚ´&ÎU•Øþ‘¼}ãxûÆñ÷�ãïÇÞ7�¼oxu#Ÿë†¡iZ"½"‹Ö6îa–ð¸       ƒ‡„ù
�ýãÿ xÿ Þ>îa‚-ˆ ¯ø‹J„EQCø„B4¨DQE#òˆÒ´(¢‹öcI†“ÿ ˜ƒ Òaü‘“§øïÿÚ ?ý*Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¿ûÝÇqÇqÇqÇqÇqÇqÇqÇqÿ �ŽˆHÌÿ _äÏõþLÿ _äÏõþLÿ _äÏõþLÿ _äÏõþ@e`œ�¿g¢ƒ)	Gk7!g
.÷Ñð>àÿ 8?~Î=%n#¼\(1§õCNnŒDŽB:afºà÷PÓ h,Õpá†��÷ùÁøôšÍ1G�)P¯¸?Î¸ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ã‹(²‹(²‹(²‹(²ŽÝ-$½8Á¿?Ã¨¢ý˜dMÖ
N?cúqÇqÇqÇqÇqÇqÇqÇqÇû eC¨aH)‹ðý·è¹BÎ8Îq!Î?À@-$þ§”1ÀŒÃS€Þ�¥’Ê~aƒöAk�' O´zœ @-š›p…¸5ßfÈ£OìY™íß–Áûg~P-,ÐÖ§+H^�Ð@$.¯xI_Ýe2�„nå(¡ƒõ„ Ì.AßŒ"�(³ŸA 9§ìu©>(i‰ÐãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ?Ö‚#à÷ÑÐVä1[cÂ`-™‡"MÎ�Ö%ß'ià"+Tìd@?’ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ÿ Z¥´‡@ÓVºRœâfz´™ÒÀ8D¢Õj!êå-ÖPr€ÁÇã²¨€`øÃšvÂÐm2ŒÊ?š`ý`äM×aQÝ­!Ôdu~Â´…O�…ØÐúÆx6 ˆÂ÷Š»#1†ØZü¨Ð€+òg€€Ì0~­ ÄÇTé°�Ã«ÁÀ¨	ˆõÄ!JO<¥xZÃ–�gî6	YÆ§8Bbâ xFÌ€³Èø™(¦¸´000c‚QFÈ\^ažÄ$ÛÆ8rÞÿ ,!ƒòT"’Ú™@Ì!#C¥Ã•zBeì3øj0FqÜÍPQb°Íc C|N¡ýŽÂ“Äi9±ê1œoœEƒ’\	1Ç-×†D
KdûÂp$ ãvpAŸ”¢†Èâ":5ñàå ‹gAqŽchi!ú×+1¦Œ’ë±Fc,ÚAÀ™'gQ„"µé?!±·\8Ìf3ŒÆc1˜Ìf3ŒÆc1˜Ìf3ŒÆc1˜Ìf3ŒÆc2»P6g$0‘Ä—}$&/¬c˜„}ŠàmÇ”uŠAÂ£hî-�«ˆPýi¤ŽÌ€‚8D¢ÕkÐ‹cn»Ž8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãØ-$¨íçÕý‰à„sYŒv%xœ{5A ±`æ—é3†$³¨�aÅzAùÁö4yM�	`1@¬rQçŸ±×¤9>»uÅ¡lg:LçOÍ0lˆ­¤¤›Xÿ ¹Ð-Äá,þ{")î»kBætœq+.<ÐäIã³6´EßF@¡	b{P6 Â˜¸kR ØÛ®->¨á:^¹gºü§0l­Ôˆy�cæ­1;5çuŽ9j.Â§Ò:Åø"•Æu‡6vÃAÁî5PŒã	žÆÝqhéoHh@`æíW<N&{¯Ë`Ù[¨=%é¬= s;QNDòá¤+í�ïå°”’gXqÊz®…a,½�ºâÐÃr³g3Qž/Ì0l­ÔWµ@¸
ó;[õÔ<£~�ÀBðY+‹êIgò˜ÅW�Œ�®Ðc:¨Ï<£ÝEå±²@G`Y®yl++++++++++++++++++++++++++++++++³·T”<¸A0Ú£éBã¶þks ûó#Ÿ`NDòàu§pl€€‹[Â{K¿en­zàÜeb§c¤yŸ®ÆÈkÍA¢SðFKàsüed|CÛAÎQ@,uJáê1†§”î�ð|«‚˜
ó:ä©vÈbqí¢ísb$¬Ìè™�3¢ftLÎ‰™Ñ3:&gDÌè™�3¢ftLÎ‰™Ñ3:&gDÌè™�3¢ftLÎ‰™Ñ3:&gDÌè™�3¢ftLÎ‰™Ñ3:!2=#ÙY¬ .ì@¢>áQÃŽB•”µŠesAÌÒAÀGGƒ�ð=ÿ ³³<†â>â£˜™À?•"–G
ŽG±×²:Ig\Ä.]—õh °Ñv½î Ø>6Vk™d M5Ë˜³é +Tp>c�ü p c ²&�{þ¼ >þµÃ{ù¯Þ Û	6K^ñi»^÷=#„H³'Ê0LkmL°2M€ÄÌp±ë˜^#Fy%F©e
S¹ÓXFñ~Áê	í+6äÓ•×I‘‡
naa�± ã\Éí œ(OØ~ä@ý5t0ÆNNkt¶Ú”çä¿h–›µïsÒ7HŽ ÛÃÀÐ[Æ�+F<nXzÀ- Á½Æ,äEÚ¦)c F†œ@ÂT²EÃ…mˆŠJ8púBô1Hr`rÂ<A„ZF+ÁÇ(¬¸J ˜‰9ˆèn¡ˆ8 1aë…K ÐàóºË„`E.`€š1Âh¹<‚UIÒµCÚ˜ð´Rup'�»ºðžöx·±‚¢¹ WÁ9—(òÔ§Ú©èrŒNÍfôOH2Ð
iÔQ"SÕšü`ˆ-T	AáÓHžÑñ²³nmŽûSI „m
g�Ïƒ¥¶ÎÂéu¤ðh\ÇDã·<¨>Úµ�ÏÍ~—€‚Ú¡´ÉÈï©v½îzo‚#ZM$šB„éLa#fð¢Æ X%ÂŒc„�A	&� °k ‹±Ûu€·¼ ÞoŒzÖñèêÐPA ,±–£% e@ �4‰í!‹ˆÛ×lðà"™r]@+rÿ —x Xíko‚ºHŒ¾Üÿ �mEÎÁs(62>¦¶
�Ù„¬ÏŒ{j€„la@;Â�¶‡Cä8˜0a©v¸ „AŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¡	Bà5Lz„��±ë;Gjœêu¤@5t2¨¹ÓšÝ¶§½WQZ`ä<ðNf6HËŸ¡€Ð
ŽO£¸ÙÊæƒ™¤V±¬°§3�¤ì€›ÄÈdþµn× n&P™Be	”&P™Be	”&P™Be	”&P™Be	”&P™Be	”&P™Be	”&P™Be	”&P™BepëRèë7ÍÄ}íyÅºWX”XtCÌÂæ®‚ƒP‡x 4œêÊŽbO°Rù€Š+€7'®  ØÃ6CŸm•e~¾¨Õ»öWJ8 T°2÷JA�ÞÛBß÷SX+VÀ½8›3�`f#ÀlI¿èî©0Š‰àõãé8ó•ðó©�ÎÆ“¿Ž"Ú;U@>ù	O¹5'­wì®Ð«Žß)6â+ìÏÒŽTk�è{„#b9•x'”³s¸ç²|Çšý/ ,,Êà÷ŽBBhD~ãèxÀAkÚ¢r¡ìw×»ñ—å]¦Ë=g
24wŸÌQÂ,qÈXfp‚ðg]{½  †5oD5	ð«ù­Ø!«±U?Í¡àò3ºó;¯PñþvÄ†Q©ØüN_¨ ´~\qÝm…ßˆcÕ‘vµP©Ü|ÇÊ ¶�,ÔÉ˜îx aO½à´+äó;Úîƒ›êp‹y¡ù’È9ê{NÃŸ×Ö°‚Ÿ ÔLCÝÞé ‚0túÜqÝx Ø]û+µˆcî91J_ˆ9—zðçÉólÿ N^4âvôÀÀèG1ö%<C§ô`5�±»öW‹»öW‹»öFÿ âÅÿ dÅ�ÙñcöGüXýs�Iÿ ?dÅ�ÙñcöGüXý‘ÿ ?dÅ�ÙñcöGüXý‘ÿ Ž=Uì‡4 p(Äh÷Ž>áð'’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§’=§–=¥K‘ûŒñÌþœ¯‡�˜’ö4†¯’QöžHöžHöžHöžHöžHöˆlc»1æF>‡#¨%ŒåyEÃÕð'’=§’=§’=§’=§’=§’=§’=¢‡*UøýqÔ-�RF�xÉŸˆ8ù�Ò6Ü Ú€lÀÒ4xÑãh6¨fK"¢kÒFoNózw›Ó¼#öÃo˜€…Çë×þ ãÒàŽ8ãƒñ€ép8àü t½8ãý™Ò4tˆ?C Btˆ?$Ã¤G©Çþ;ÿ ÿÙPK     ’ŠU]¨ó=ïR  R    assets/admin/img/icon-play.pngnu „[µü¤        ‰PNG

   IHDR   €   €   i7©@  IDATxÜZ@ÙºþN<!)4H‚¤¡°t]ð@ ‹`·®ë¾Û®×½rÝoåÉZ½+\]—Ú¥Ýê])RjPÃÞ9û&!¥’2ÀÞs*À™ÿû~ÿÏ`XñÛ¢Àpí?nqpÅtK!ƒ‚(DJ±R¢¢;Œnú¿X)R�AÊîë§ä¿8ØÈ ©š˜p³6E—¢O1Œ7˜FcŒ!šîú•‰þ$Å@¯èÌÚ˜p…F¤‚2H8*¾yúf›®@˜:<)êCZ\Jâ`€‘ˆ�	É¸7âfºo¤_%Ã„zEè�iq·’¢Ôáƒ‚#â›á_{·r¢$�6Ió¸q‰0Á RŸžº¶jÃ’š·>nÛÞ~ í`[}[ÝõméwÛ>®y{Ã’µUOOE*÷ão—¤×h‰†(!‡¢ÑM§w”Ð�±ª˜ˆU’1ÁZºþ;ÛÿqâKo‡·Ëçõù|½ƒ-_/½êõvy;N|¹ýë¿c-Å$«’è'Å�±Ð@	Ä£“‚~“'*I8tÐÃ}CaÎ�ïùlEkK?:¯¯‡nJÀàøØê»¯×Ëý¤µå³?¾§0'ú˜ ‡NNT_»Äh/…EjåzÄÀ<½`ÉÃµkÚNqÀ©Þ»}^ªÞ+YŒˆnoGDÛ©Ú5Kž^ 3bäúH­(òQBçñDŽ°¸¨ñq|ò¢9[ÿÒº¿EÕf0ð+â�~BW¿5ìßú—Es�Œ˜ñqqQ#ýQadÁ‹‰ŒÆyí-	ˆ…ùÏó?8Ó¯÷‹ëÜÇ-oÿî[·ÎÎœjüàÏóaFì-	j-%�ÅJÂH•6R¢D„ÑhLÂ¸…´Ôvwrâ
ÚëíñöôtS÷]à2½Â®3B�’tuw¶Ô.| ãŒIF#"¨Ò(›¸TÑ…›‘2½¬±†!\…�´œko8´mÍŽ-›7mÜ´qËæšÛö7:×x÷à‹=©±fzRÂÍD—"‡WûR(%c¡G¢Åºñ8ý.p�·ãÜ™»v¾]ý“_ÛžÂlL†N¸àîß.8á¡?�m{ê'¿~»z×Î3':ÎõxÿDÎ†6þ�ÅŠDè©$œ�aŠù„ê^#®[õLÛQ*Nw öœ;½Ç�ÔÖ¼òêÌ—0v”À%rG–E¹£\Z—Ö1Ö1ÖN·CëÐº¢\QôŠˆ‘Q;¦Ì|é•WkkŽéô~í?AÕMóÃÑUÏà:©4"Ž¼@ �á©	0Îpx›I5P÷,¬±ÿ[Ž~úî/~›ù\(†]íŒpŒ)QÙ¤ù$�X‘C·…ßì{b%yÒ|•mLI„Cí„Åpe>ò‹ß~únËQþsØåùÀÛ30R‰Â¡€DhÓWÉµYã»âùö†`ÍÐ8×Íþß¹óç¿uÌÃíL›òRE…Í@gÑ�‰ºÓƒwßÏ3Ù=Œi¾¢H^Úg5·;æýü·;wö%jkÁ–ÖÞ°âyÄf�—k¡Î|Â”ºèD¤l¹»38Tyû<së¿gWégÃƒR‰l$»bÝ©—Øìv/£ÂBòD6¡ýìÙU[ÿÝg=Ááµ»sûËH‰NTê£@øjè`º-çàÇƒÅæ½»ŠŸÅdI%q ùÈAö¥¡_‚†lä …Ä!©Ääâg÷î,ßüø¶˜ ƒzè)àšõLyš÷û=[GŸX �¢Bí"6Xô~SO½ŠÍ¹£ÁJlj—¢ž'm¼`^èmÞ÷�&*¥škš†2îË ¹!ñç²¨Ïüœ_,4�<¹n5¦Áå–"·_ïiœÞ¯rsŸÂÙB®¤0Ê¦­[}ò$÷d~yû²ÂÂ¹ˆ§’jGÁ�¿&‹Æýå�ŸmÔ>WðÖnžù"ìanU¬ÈbzèÁ.‘�,XUEanØg¾X»™‹º�Vp¶}ùã0Ri5Cäüba|íéŽ³ì‰�ºïìYº\9vU)òaAF0ô!¦!äÓ§Ù•³–.ïì	´&]ÇÙ×ž†‘JÌQ0ðÕcôHXö8…ôŽµÜY…
8ˆ9Ìçyð’ÀbB}¢wVk	
Š”‚e�#�J­¾Z
¤C4LæRãZŸïÕß‹r1Ó}v°î¶ƒläÓ'—ëïý|o�`ÔÌ…	Ñƒäjª>¥RÓceíÍyöõnÝ„;´•²æ÷¡GûÐ³‹²m%îØºÉd›íÍ�•ÁD¥WBjðSÈ#uæÔœ–ýþ¡Ïçcðß©F¹¡RÄ™~:Óý0o.3äˆl†J”¿Síã$ó‡-ûSstfy$¡C
ŸÈž1>	J|½kV |ŒÌô‡Y÷�vÀ\¡€JR¾fE 0‰>ÁŠ œÈW^õ«iƒ»ýUÆg üµ>˜ÈÃa
&Â�òµpRo±…úJ;ó~Öð®x¡»k`áý¯j_ÐÀB@dü‹:BàêîZñk–û"�èJ
_¹d,Œ3]í�ƒËÖ�}Æ?q4À `"s„­ëöÆ™.)š+˜0ó×@�ëT3ÔþeÏç{0‰�VòúB‡¬<* ’Mú|_qÒ¨ÆõÐCéåÚ€„¨ˆ‰+ŸõÂ§e�þ-‹üáÓ^iÑ"²i+õ÷ô•F^³]ù,‰Ž¨ ¹,ýÂÃÍë€Üïëì™C«>Y1rB¬ø„¯s¨tsªh�ì¬	,Öp3Â)2Ñå?a±±HÙò2ý9F—.C…¸Vd2í�ÂÍê+•°bé2Þ8[è¸„¢
»tQD³¿ZkLšé¡¿�ûwlRÌ„yÈ
	~Ú0Q�…<83wlâ%ç�Ìô“ÔZV\Rÿô”ÇÔX8í;qrÆpÎûÓBRÜ:k°'YX›4ã…''‡�50Qd—°äqQˆ]ðÐÀâgíª¾†7‡ÅþPf:Òl’ÉMˆ†¡0ÊaÍòÚU‹¢!–¢Ü˜þ‰Úss]@×ï;Òˆianä!3$íg©¬¸Mœ'Íƒ…›
l™È£ÒN;Òˆ¢¹fs<Qf„nY¤ÑKæwwLz{çÿNU²C2ÿL%›ï-A)ŠÃ…ï9Ê³©´Îù?eÒûU…�Kæ#š"”1¬žü©¤z$7}è={wÂåFnHÉ/Y‘6dkj9à~ŽÈ2LäŠ(�b.•Ø³wg`$kúÉR=QA|ad’pèÏ=s*°§*~ZQ!±±Ò7$a,Úäk¢sšs~�r™6ä
ÜBÓÒXbST?ØÇž9µx.ô¥äBýŸ:˜·-aŠç³Í2Yí„•é?Dì(ni¢ŸI?íÕ³á"Åýé4M@°ª�drÍ¾"`¨¶-�:(!	N€jèg¶~8ôœQ%© 6&nˆ¢äŒuÂÞ|ˆ#ÓÆ¾�w<—ÒA„í&iè%6IÅŒªÀ¡iëç3
¡Gp d@´·ôf÷|YW§ŸMì!êŸ'ÀÉè;(§?ñëßÁ£p+Š„›&q6@ìúÙuu~=«gÁ8¢v Uú˜›êÖšÌâßÀƒB¾ü	™€ÃþnÕÓûîß1.u)Ë
BØW¡žÅ¿	téºu17©¸@8 ÔD$”ä¶�öo€›�Øç¡ù\þ
øuð@öc(S8�/PkÍê�|”Úç5ñoŽÛN—äF$$`ŒV9þ§÷Ó{ü&@Ÿ¼ƒ
3‡œ ºÎŸæ§˜$rC˜Á*w„RŒŠOÞáŸÉÐýô~åø1œ@e²ÉµküCF‡wÑoP"*`pè	àÞðX±2f6Ü’b®@JWàjP*}É¢ßtxýÃzí$S´Jÿ’XL[ &´¶öú½¡uìðm£”ðð�ÀVOg»s\2»hèÖ¨PéKS>vØ¯°ó¶¶bE±ßù æB“~P[§¢„5@BÀ•ª'O~w1Ê$NqáÐHÜˆ„"pÖÖðOd	fMfD KŽ‚éÍøÏ z¼¯¼Œ"E!²˜@BÀ¥¨ß_ßÂòr)ë²‡Ðh!N½òr�×6ðæ`¢ˆe<Š[Œ0Öþ+ œ�þ"ìš„$€__î�½[q‡rh³uŠÀ>ý…Ž³Qà_0RÄŠ¯	‹T·%Àt¢¾—½Õwæ8&iœÄÊ*@á	`¾yæÜßÃíŸ†€„tbÕ81ùô	Y¯÷D=L·%ˆþ¿+Õ×Ä#Ý{Þ×Ã›åî:Ø#È˜\ìé¯¼.š—¨ÿE‹¡  9…}7_ÒçxÏ#ýšx¥š#€@¬�@ì‹Ó½ô^ÞLÖ¿…Ò1%\ž þ¹;j2�CaGç
W(ŠÒõoñîM	è~q:b)j1H_HÔB¿þ;ìED>6ÿàp)‡‘ þôáhÕB8¢<„sšÏ¯Ž ŠÂõƒ_ðÃ†ó�ï@OQK9d):è6-óÑÅ`{Jä–ND&R‡“ Ž‚óçÿú&*¢*åÜéêì S:Qä¶=åG ]—AGQËú	¸6‘Ûª}œ—ô÷l˜Eu�‡Œá%€ŠûwéîA9u…ü«<ƒÎ yQÌâPõÐ»­‘5G QL0 ºqƒÿõ\;&éÜ$w¤`ëÔÉ{¿Ów]À
¤�sBÉÕ¹1é\»ÿœ»q¢'ˆ¢� ±2Ñ S[­ÿ°¡	ž(Ë#D W õ._N¦Á!å{…�ò EâihòŸ¶ÕÂ”h+A ‘DoÀ5íŸ‚ï…Së„i#g¾¾!Úæ�,�‚¾Rò�å¨ÛöúŸt¶Žkâ%DŒ •Þ€ëÛú°iœô¡–‘³ >ªéÇ(Š´‹¬!Uˆt0B‘87í à ®×$ª>¤ª(nnkð�Ã7Ã5Ö>²À«ã|ÇºÿE¬¢ÐN&,‰kÓfÿB¿­7G¤ý„Epk 6ÀM-{¤	à×®wâ!U‡iÈ¦HÜ6 àÖHƒ4ìCÀÉæ'žB.¡.)£Ø8¯ÝóYÊ](PLD– .0šƒ �]Õkq‡Ä¥.‚E  8ZÓ ƒßÒüÝp«Üb70 ŽÚBÈK[òÙ�Â%*E²¹ð'@!4:Ka&*“MA
aå»AJáÑØ�?óÝ_¢L[ŽþÌ@°fh4µÃœõŸgÏCÕ[>,üpL¸vxÔD¸ñßÿfÐÀWÊMˆ™é=%#1/}ê¹óƒJ8$…¼é=%CQæ¡‡&ÎGJEý¯Ñ?5cqfž(�¡¨D1òøÃáÇâ£ä`¤³ëwKP¡­€¹|Á+üÁÈˆ�qëHÓÜ*¸5nPÓç=_À£±ïóGc#w8ÊÏ|>¾î~ØÕüøSðÃQ›=!‘;½Äñxª ÇãÔïiÔýóùtØUÅüÉðð��Ä\«Ó:÷%Ü‡¸€7ý‘yAbD^‘©Û–x/*À·:#øŠÌð¾$E¿êê~k=n—ý_{gÒ0FáJP—
#âè>h°�– (5œBÅYÜqÍ¤;N‚îûèÐY÷AlZÈ&Nvh³ê*r-MÇÃ#¯äà‘ýßs|ïûºµŽDæ?=<$µdL.ß=jn¸†Á£¬09,(©f äïÔ6”¥*‘xó¬X8PrËJâQÙ†’x2š«zOõ+Qk' ‰Ê^þ•ÅÁÒ±O¾ô­ïŸÛ{¹˜Ùô=<,ýn†¥ñ¸üFG"�Ë�>›×ÒõPP\?˜Gr0þ¼ÈéúùjŒßŒØ&0“™¦×–ÖÃ�„ÛªfÿÀ…ŸÌ GS¡×’ýú¡´ñs{ûÑz67ÍUz6‡N_Õ‡“¸élàÀt–ãiÎçM…Ü	�Bn/P BÃ}‰Ê«Y¢B�EJTiQ¦F�…ŠTjRªJ­.L¬ÁÄÊQ™be€Z;YŠZ;Aªµ)W/A¯ŸÂôú)H¯,d¥2c`!Ü])Z#Llà#+¾_¥ÈŠï£#+Ìì BKÃ·þ4´ÔO‡n…–˜Úbl�¹=™ÜDGWÏ='¢«ÌîÂË;:¼¼çdx™émÆ×�Ëïÿ.l?{ÆËæù    IEND®B`‚PK     ’ŠU]M/ôY�K  �K  '  assets/admin/img/social-placeholder.jpgnu „[µü¤        ÿØÿà JFIF      ÿÛ „ ÿÂ Ù„ ÿÄ           	
ÿÚ     äà                                                                                                                                                                                                                                                                                                                                                                    �þ®"éN"j¦„@x?³tÞ¸ž	Ðˆõ«4tv/Õ8O5ýµ¾Z¯•ôfè7�Þ¯…ñŽÝÔßCš½óç¨í×›‡‹û7ér†€€      áyjÜ›yÄWU^pÑNÇ*ÎRofilWœ9“Ö¯4]Õÿ ·4ùx7{#äS®O:È«8Cº¸‘¾Ü„vë“{_Ía¿Îÿ ±/?„z³Ï‡éö£€yY^€      ôË<êÇŒþ–êî{iœÛžC'®•²Ê²ç¶}u-‘½ežÕç$³8¯×g"]oQkÏnyØ<?ßÞB»uÉ¹+]iNYoœËÏÍ¥ÄýY×noóÂ       wˆŽ�ý-+º�äs‰÷¶{¹7ÉhD9€Ò®íSú› Ð{³õB¡êÆU[üO½²ÆŠGØYíÝM®¿šöú¼ŠŸgévÛãNËz\¹Î�                     Öxƒ=À /e/d'uê…WP‰ÿ ïüûñ5�Ë?Æúz} YJul²°       ¢HjÔÃ>r6ø²³|§î=T]yéÚ÷Unz¶m ûB|¬EfîÆ}ãµfÖ„úÛüuÎÓïæ,m;¹Q­©ÁmÎúZ´f8       ½Ÿ^C¯VÊ˜<…0\*¿'þõŠ©Þ&Õú¿#@RÌ'Ü¨²Z¬Vz¯SK¹hë7ºû‘5…Émù”ûMKÑB3Rî+üÊ             ÜH                                                                                                                                                                                                                                                                                                                                                                                   ÿÄ               ÿÚ    ß                                                                                                                                                                                                                                                                                                                                                                     JJ¥%€	e¢P      TX±b’Á`,,² ²Â€      ° ±` e‹a@      ¢X©eJ’’¥Å”                      ”   €¢        @  T X°,       %€ ²ÂÁb¥‚Å‹
             €                                                                                                                                                                                                                                                                                                                                                                                  ÿÄ               ÿÚ    Ç                                                                                                                                                                                                                                                                                                                                                                                  bË X °T X       XÀX°‚ À                                                 ¥@XP T°
…–       À   X °                                                                                                                                                                                                                                                                                                                                                                                                ÿÄ <      !"24et#$156P ART`u°3@CSpqÿÚ  ÿ Œœ?ù‚"ûm¼£�6Ëáä»}KhÊ_Ý‹J§*ñÜ†1œãpÈî�ðê§gìy6.3ðõ§ôÏ½ó|^D{~nÿ êÓDúÔ{ÙóxðÄøº£Ñä¸KÍÏ3$â(ÜU’�ò¤IrmÄ&2¬±Û8ÖXy)Ë�£ÿ X”1–lD�ý	`°äU™q†%)cOéŸzæø¼ˆöüÝþ1Õ¦‰õ¨2÷³æñá‰ñu§ô·½XÌyÞ/øv4–Ý¿Ç9C¿Oé�z›Íñx�íF‹Í»fŸÊãñÈØü�›¿Æ:w@ºH‰¶7ewâ¥¨Íµ‡�#eIl,¥-AGèŽ y^W0ywuO§ln~°!-Œö“_7“ÛüZ;û}›�9cMõÏ•lç´Yê�G’á,;7<HÌ“ˆ£qVJwÊ‘%É·˜ËZŸ°yd¹8¼‚qò|Ýþ1Ó™Œ3•lByöû¦ÊšÍŠA4?|zWFù51´ö;7+6x4ý½3ò¼^Ä›µœ-�.('ÝŽ^•Ð2Á1ì|b�qœÁ,m”£þçiý0KÑùgÄgÆWôd¢da‘|�˜\ƒ?Uz2ÎÀq9sA>Ù†Iðð¸Žxm9ÿ tlê¨.è¶ïï‘”?ù‚"ûm¼£�6üÝþ1Ö £ôG <¯+˜<»¿®\JPÒÆœ%(K-ÚTÏÚûDp»-s`PÈþ â9Ïn\7,C«¿åCÿ ·­ú>}ÎÃó"êÓNê6l\:Ìm\§œÅz‹ÚÅpgØÌ€RÄSTŽ´º�ÿ ¨Áb8õoh2�ZÁÆ6ò€5ÕvD�úÒW´I-À»‡<£`–¥¥³³ÈK^þA�ÂQÊÎ³ªêÓ:6FUb¿¾çaù‘ui§u6.f6®SÎb�½Eíb¸3ìf@)b½|?þççóÕ§ñ;Ï·×Ãï¹?ù¨uEüíeù›~µãÉ`'0±•3œãAµ`|=”ÆT|\r¯Ä1¯ãí·ióž¾ ýýÉç¤×òÛU\g·’ÀAÞýüiÚaÁDsÎb¢�{k>n`ç6íÛôí�Êr�øD“Žd£]f°¹·�H»ÈžtÔŒ­í¦S«X8ÆÞPfº®Ã(‚Ð?ZJö‰%¦¿ŽÖ~gkÓ+×d% ³“¿UŠÂ±¡“,œëfxò×)	Š¨¿ŽÜª}§Õ_ò�¿Ú�×Ãï¾X~X}Y®½ú5ñÎ9×.Ìu¥iäíÇfœ
¶\¬Ä	™µg¿ˆ¹”e3ÊÆe9—1ŒX,tž›³,Ç:Ô«óOÁõñºa_ZB¼v#Á£¸JŠmÊÒý¤ˆ:Ô‰ Jbæ`ëÛÚ*\µã«;6í™ËMËžÜB1mv ñÔÎÖ
’ø¾Jê¿ó]Z.êŽGÉ’0˜—õÒ4© Ó#‘@×‘òâŒ]ä½sx'nØêîí›ÆbcG±˜€”ô±¡ÊrÊv�‚ïù6ºøŒÅKgÆpÐñœ[Þj€Yº&ÇŒ6'õec¨lWâ±òH¸§ÏÖ‚¬ÞcÚ’?T?³¯Õ½EËa»BCF•o«‰üµâ·‹)'¦vÂÂ¾ˆç_‰î$]Ö“À'‡'÷Ä`¬ókMZ+…ü•Éäƒá÷Üì?2.­ï5@,Ý
“cÆˆz²±Ô6+ñXù$\Sçý˜Œú�ÿ [ÅŽ×ôÏ­jçìÇ ŽÁ˜tesÕ†›�È$É¹°=2h±«›b`ó²4z»½«©0Dú†be$$Þ¼ZÈê‘$'Û;e£	2êRK3!Ù'-x¹ÌòY\aLã9^- ÊÎ‘SÆ*²÷¾CŽ˜sFqœûÁµ3êlù¼^ç6í›4íÉêr‘ù`d–æÚëH+ì,ìµaÚ2`ø[ôu,E†ìM	|QNU¾®'ò×ŠÞ,¥P¡Õ*&_¶»Üyë^„Æ^»œýú©ÓÖM^1Â¾øù×/	z¨¡Œã•²´:«þRûQúø}÷ËË Úúíi`"K²Ï@'VFV…++Â1+åí ç"ÖºBK2™,Í9ËGÖy·$jqîùd½]UV\ä0uò‡ÆßØU*$‚˜¯U¬´(rK­ˆôÞ­*ÆÎÅ™ŒÀk:�˜ì’�8…€SVØJÖ¿8I­£uR’_þÕOÿ ŽôñÙ[OdéæXhh¯�çå°ÿ Ø×V}–dÕŽänéÿ \wYy•S¬õÜ{×9¿@~ p„Bõ;¸‡îùÄüª}Yê¤ü¼9¹5×Î'àýXkŸ=“õ|^Hf.Dµ‡¯ª�r•¼sˆg3Õé(™)¢ f Þ­jvÆ¼YBsFÈ…ñØ�ëëIÿ ŠÛYXYkcIrc1&4þ¦ôA`^•ÎH“wÎ'àýXkŸ=“õ|^Hf.N’ušö Ò„ÈŒ?Ý�üB<aŒ1X2“ûåo¬,-%‡$±;à‘¤µôÏEÞ#°È>=AyïNø¾/x¶õIkéž‹¼Ga�|8Ÿƒõu¬=ÂG×xûæ9rÔj+oª	Ä«g=ä¯Îöÿ 	ŽþßjßQØÜýCÏ[ïRÖ¾ª5ÊVñÎ!œ0ÏT¤¢d¦ˆ|�˜\dzŒl])uþ"/³”_8ŸƒôÇÄgáZà‚}¾Ûm²ñäËf‘Í?µ>•Ö^5LjývýªÍn}?{èŒÁ|_+œqÛG½“ì½ÅÃäOânÖÅñÀN6V<î„h5O£Pªø>W#>úmZ:u&¸êùHB�Å1�6S—;ˆbL¤•5¡)ß£‡&ÜN ¾îW'�â”9*õ��xâb‚±‹ñÙ�ê*Æ9ý=¥ipõÁbWI‰qîÀ†ˆ!½Nî!À{¾q?ëPßûé­?ÅñàHöÿ å³Óõ‹,�ß¾ñ$ú�nvŠ"K6UÏŠÑ!Ï<ÿ ìn+^
r†E”¬+‚Ù¿±¨«Qe$Ö‘f<DïYZÅ«pMm»åŒÊR�9'À-N¤™ýÛU^·u€ì˜ä	Ëû>‚¸¨>ê~g¯a)L	ª7¬-U®\Û¸qeG…ŠnŠÊ¼¤âç¯£òTÍ‹ÎŠ²¿~GµC$K
»Zª¼õUNkLž|£UEa½§1§Urô×!³`P‘$§é„$IÄpŽe9Ë„g§ÐShm/—IÜöÜ¨©¹ß2a}	„ç#ÂÓ‰;¼5—Ëºô#)xµ•G²d‹ÆP^ Ñ£§’o…Mà_lP‘<_ô½%�ªtˆ-ÏR©	çÄž�¥µŒÇm  ®Šê–®ª³5–•­<¨Üi»p�ô—,i¸‹€·ºb…ÉTÒàH�8†$%Dƒ}pFŸUlA*â6Eá«ì&ÆÖ±«g-³­¯AzÍWh¼1û/«9p:�Jëk#1+êÚ4UõÎß±Kbtjº©(yB¹\ÕD ¢¹š·$;ÍFíuÃ`¬ÀU€ÍŒ±›Û?U4ÚªYtÝ´H°Å¦}Õ5=‘ !¾kZc·«áS[éÊ…×ˆã!YÁ\ÚiæDjÂ¸fC^j'k®f¬nìIºÕ,ïté2†�ÖÂæ«~u† «C9ºŒAy­*G+�ÅâÖ]DùRªãLÕ$¾q'Šê–®„Ös^×Qì,Î¬yƒlpK¶rÄe]­ÿ ŽÏòËõGk*gàÞƒCd‚aÆ·M^m[g¬t»³¨—"Ÿ*Ö6;¶ŸTVZ‡2US<pÌ¥.×vžéÚÚ('\n.¼Ö]DùRªãLÕ$¾q'l½$í#ª!2´¥e9mÝ-™Îcß;sAüUþY’I›Fª£ÉLý¹ed��D¸> l±bÖ¡ú)´¼#ôÁ$ûhÞùfÔrúA:v¹±«¢MÅÿ ’æ8g­/™bþ·g~üÙÆz¸Ä#mg�ýŒ>Þ#Õ1¨P%[ñ5?j¯sR¹ŽxS­	
ŸÔZN0– ­Äÿ vóK§ZÓ€} ³ZÕ‘|“yoßÖ
­þNDXÁKf°QÓk{§¾‡ÎB¥5É“Y¶ÄÇŠØ©8ÛÊžTQcI7ƒjahLƒ˜‰1H9Ès�spKHMœ®&	Œøø¦µ>¢4éîp7 ÀM•Ø¤‡¾LÚy¼Ë‘.ì æ¥sð§Z?¨¿®\Y‚ÀâKW×CtKEœ¦O@Ùyö¯h­×¯]x³Sð¾ªnØ3U˜€U*0frpöÔVûr­ˆŸŒ 2°; #f'j‘ÂëŒ>9ƒÚPóƒ_i3Æ\£IAˆÛ?füI9:£ Äk‚v	6\K#]�šx³fX:Ø±,†LhbÊåW-jž�"XÜ8;7'0]ðÅÝ�,½oKµtÉÑ-š*áƒE¥ì$æH{z;~3Ü«`'áŒä=šL¦””QB+,ŽáÁØY¸àq8‰‚ï†¿Æg@tpX� .N˜K´Y>Zë8·?Ö;ËØY’­…`EÎŠðÄúbÓOZÎ-Ú%b¶Çt¡¡m‡ëRŠëbNOi€—.©_c&±.A)¨¬Áoe'‰`<ˆCíTò‰ÌØv¼O®Àð"Ek1^x¼¢—h]æ%yøîD“5º-‚=TÛR'TdÏA4æs†Úh”bˆËO+˜º3Œ‘“šzÖqnÑ+=¶8c¨µK;LÕÅ^!³Å–ÝÒÙßï�¸¬³U·i–%É,„°Áš›z4jÈ©!lÆpãŒü—à'‡ï¼�¿©é+„§]›•ŽuC9FqZ’#F³PË±ãmÚ‹�¤&‘u2µÜcœ ¶¡¨ÞÅ:–0œiJS”§,î”³™K8·
u¯¬ÁÆÓRßdåÅš–ÁQ‰£¶€ðf«%M€´í(	C%°ÒîŸ/6…˜Ú&y°ïPjïÙÛ(Y.F	¨ëº^Å’4Ñ51
Lô…²Uæ±[ºkÄs
ÖZj¬¾ezv¬¹ù_$ŒRŸLÊI’y¯eu´Œ¼µ¼µ�s�˜A¸¥©¥J­„Þ0ä,7‹p§QŠúÌm5-öN\Y©l�Ê;hvêß9¯×rþÇÏäðÿ Ç7ÿÄ I 	    !1A"Qaq#2B�3Rƒ‘ä$br‚¡ 4CPSc„’Ñ%@`°±Ááp“£ÒÔÿÚ  ?ÿ –OÀV—¨jWŒ¥pÙ"ƒüÃ4ämá„7E*ý¨Ú‚´=ô#%µÔ³³©Å7+þÏ«†×ºåºµ×†˜ú?ó¸àôïí*Òþ)í÷»½\6¶¢'dÉ]x©Û¨ùbÛ±¸¨p·57¨çÌay±çÖ€ ËåÛ0ï´¹}þXoÑ¤µEj³ÅßñŒpÚ÷\·VºðÓGþw�ý¥Z_Å=¾÷w«†Ö»Ù£Ýw=üRÛ´¤dºÚšV˜áµîªÝZëÅLh_w!Jék-·Óím�£ÿ ;†ˆå¤nuûI‘›ÌŒu
˜¹¡Œ¼FµñÆŽ�½²”¦¬µåêš«G5@y_Ënò1Ánî¿Š­<mÄhê}Ñ  4L|vî'ÕÃkj"vL•×Š�º�–-°KŠ‡sSzŽ|Æ,Ô³bkeÉw.ü}ùÜKeÁå°u—1ÓÝÑ•…UÔ÷�½\%Þâ³Y©Åvó·÷\ÖÒšÐÓ:6J¿Ñ•Õ—šî7ßW«¤[{ñIVžØò8Ð×Õz\âšÐÛ¦üq§¥R®–_'i6ë×Õ0f™ÔÒŒ°ŠQiöŠâL£D¼ººæ&#ÕÂâ”
VÇð¯#CŽ´½CR¼`­+�£ÿ ;�{e)MYkËúõIVSÈ�Æ²È²F\j,ˆI;9÷sÇ[-©O‚ãÿ cÕ÷XãdJ!;vË�›’Z»+È.Cµ)ÇuÇv?ªƒsá�ˆdà·ˆ“©.E›a~,¬Ç²Þ!%#äÇ°Öb…EyáH'YbŽBMo}¥6ÜboÒ@Væ±æÔ½5jË¦>ël‰D'nÀÙp3rKWeyÈv¥">¯ððcüD˜û¡�ñˆätë?;HÄÌÏdÍuéµy®ätùà}³F_ž©8ûçÇv¬Š•ùWªÅÙf2�vbª½y±Ç-kþjSÃ•1@êP-ÊÌ­ÓâcÁe)¨iÐ ¸øcâ8-â$êK‘AæØ_‹+1ì·ˆIHù1Çî¶#vJö#çiÄ²4ŠéñM’ÈŒ}¨gaO+ÙO«îåÇÞá¿¢Í",°·ìH¯J÷†þÙ¬P·‰•j|ã¦®”r²�Ù�ç�Í™ž€pyI›˜ß3õ¨^ÑòÇÅ¤Èb?=>Ÿipy9�‘#ÃR@~XM¤µË*GóOv¤�ðfwCàñ¹dqæ0‚ØãEøQjh+¿ž/Ó£R#ï�×a�¤%Á•¦ IÌ¡Y¿VOëÕTvalce‘•ç¿Hj;‹¤îÀ|°¦áj\KP^ïMÎÜ° ³©äç<¿ýpv ˆ÷t#èø$[ÚŽr¬[ñÃdc„+ªºÞ^<¼f�\õ¦?½pÎ6æ‘š~ö!Íe4 ’{/†æ'}ðÒG$ºL¥ãU¨^[X�{6{©öjWˆ]Ç=±4'9�·bj9´Wáq‡Š½¡}´•Qx®ë�ºÂú>	Àv£œ«üpÙá
ê®·—�/ W=iêï�Ñc¨ý–�øâ8�ÑÒW2Rä^—PŽx“²É
Æ 4€û„ï±é�Õ–Fqü#ƒ/(	qZ4Ñ‘¾3(£ˆšö„0´—ïâ0y³¿i˜ø’qnàgçh8x¤Aì¥WæP7#¢ËÙe1“ð–Vù0ß<¼ÿ ËJxò¦*…B ±TlÌª¿æ8=$Ì1’CËœQ0_ÞÄ9¬¢Æ€Oeá�ÜÄï¾Hä—I”¢Üb
µËaËj�­qÏg]ñ3Ó±;A¦%�£Xãø¨\¤#�ôÅwX a!sáz�êû¹q÷¸è²iG¡'ÉÍ<›ÛfÝ‡—f§æpy³4ff>$œt9†f_~î!Ìå£=*Ò,±Ho~X–Xfp’²û$A§swuÃræY&ËÔÔòxÂ„ÞBªY’HÓœ‡´A~X0H#Ždvgb¡Tùå0±‰ZêD6�•Ãl{±ôf_ÿ Ç‰!Ð¿M1ET�;(£�þ½âî¦��­>yÙö½|}+b…­83JÓH~KV–•×v?›É>{céÉc�¾ËÅ.³„K©çŽ.¾ÞJÝ˜1ðÂ¦óZ]êÔÒ©ä{ôäÝ7é×n*Ö�Do"b•+ÏfZñì<9ƒüpŒd™ÐÖ¨Ò�¢Â9ÑEqÄè[jÛJhM\}!ù,q·Ùx¥Öp‰u<ýC‘QÔìÈÝØ‹2Ð)ýÆ†süq–U5öo1·±NtQ_-±«¥õ‚•¿N^^XÖÖ»¶^µÒŠœýZº_X)[ôååå�¤?%Ž/Všn–pÑó§~'«ESÍ’„<mäiÞ8ÓmÝöpµ§…Ø†«ÜŒ„’ò·žÝÀc‹¯·’·f|0©¼Ö—zµ4ªA¹ý97MúuÇxÌêßÃ.™´Ó‘å�¤?%‰glÅ<B¬y}Æø Tw½\]¾ú²ß§ÂžWr»úÚ×Vº3WêYDT¥ö¥ÞïvŠ¥µØ
šq:4¬qGm¼<µú¾üå—»û½Ž¨¨€xïy³Äâë5cqB…í{{T<¹Œq:Ú‘¶á
ðñRÆåç‰˜¬è¢�•œV«O´â\ÓL¼¶ì,¿ŽBGj\sí[Ô“Ž>•±BÖœ¥i�¤?%�}{õ
šýL6Òßý.ú/1=TW+|3m-N•Äq>^hR†\¼…™T±§û”¥Y$Db#µ‰ÚëSü‰Ê3ÕÆû¢F´ùaÍ8×Þ‘Îæƒ“š,¹j�EÎ4šO¹Úœñ•S$yœÊ1
*c'IéµlÛ¨þWÑ³åþ²ëù¦ì<�å‹[7š’Æ1±XH{Câ8ÞŽZVÙ`rÅ?J�4“H+U‚*ÒR�øXdËf m²ò}?Ÿ,OõQè?]Úœ°ÙY²S:­+£¬ÍªwòþBîY˜ÑT¤œG•›9£u
¬ÓDÊ±µõÁšÌ°ƒ±söÀfe¿p:õÃe'Ë,–p†y¬¼¶ §\OÙ�/F’3ø‚ya²så¡7a’;,­AÓþÖËÅF0Ä@öÒÆNØII#g¾iJP sN•8ô”Ñ¦nMeWHàÃ2hF­Lz2x¤’|´ÄFxˆ”DY£svÂ”îÀ‚&ÍHbYÌò£×ë<ñ—‹N<Óå´Ö²¨­Ìí-O•1ÂÂa±¡HÍš…‚÷’+�Z¬RŒ»´`óìÔ�á…Ë@ Š9Dµ´õ§ë\hFç4ÊÞÐæ%uÕ=ª�B(¸OtI.f�A°³ñÆ„RIœ”„giÞDg´{ )œb‘�:ÐG ‘8ïÞóNÖ#KuUµ-wQJÛgýiŒÎf��ídÎjå¥!�ÛoËŠ™%ËjÅšƒNj-ÈûÔ|8ÐŠI3’•Fv™äFp£ÝHÛvQš82ÃnZŠ-?ë†Ê@ÙwŠ6*5jš•jt c¬0æ$…w®ñ£blÌ:ï@.ã5rÒ>£Ö†»ãÑÒ¤ù7Îeš44p’™®´�Èë¾8h´ÒÙö.L%T÷MÜñû§¡hž•´ô`Tf£ºÕ­±°$+É§Ã�ÊäPprùgH”›¥–I$�Ø"×F­™ÍHã.ó"¢*,qê5)±ü16fw qš¹iQ�kC]ñèw\ÌçÔaFE�©ð®¡+]‰Ð‘�ÞÍã¢Ž®çáEêp=Ù³œ´ãýH¿ì<p=Ó1ÐÔ?´wgˆ
ü˜àwÐ¨náUL²bpÿ +q÷ï°ð´ÉÃ­Ád�ÿ »k¶ÿ ÀÃ¦Y‡Öæd›9;íúãõÓ-3Çÿ ÈvX\ÈÚ¼>](Ž‘¾Ëq¦ßÑšê+r©R§ßö‹iÍÎ9¤t?�ñÄ¡ÛR,Ñ4HÖ"­¯#¯dôÇ¥Dg,®è÷¸Sr¶Ÿ#%qö]¬6Ûb12ßs˜#3§&ÓZÒ¿1£seeD¸4fAJ/�|6ÀS/„–?Ù5{?ø`TË0úÜÌ€óg'cÝ¿_ëÙB ÒFˆ¤Çk½S³Ö‡¤l8sJå³%¤F°t móÈ4C2‘èYf¤eE)åã¾3R×73Pˆè [k·^î¾Œl½¹«È™�‘©ÝøâYZS›Œýa™�B³íË`G\K.XdQºöÁlÅ�‡Zùb ¦Æ“Mb_i"{(Ò:s®…ÊÆá�¡ŠŠíß‡ p²9apRÂ»÷áÖ1#¬í$šaee ƒµHÄ�C�jŽÐVu®Ýø” ¬±]qK]ê›õ¡ÅEiY@±Äšš€¸øqèÆËÛš(DÌùoã�C4òèJärÌUÇ�Ä�C�jŽÐVu®Ýø™P$’Fˆ’¶G&)ðšE4èùf;¹2ÿ 9PÌ~<±j*&aJ½rôy=’8Ú´Ç£Ÿ/Ãæ™@Ÿ\Þ•¦þ'#>¼…mWk©$”m®zæ$€z:y«{2Ù‡Ta[NÇ„WªöG‘ióÃ1I¢[ƒ_—�{�·žÜÆ3råW+Ÿ	¾*ÌtÏ*×ªÚ“f+K¯‘JÄµéSLdW){Cq²äžJ¬e=îÏ<gx-%	V¹t;z�À§Lz9òü>i” õÍéP:oâqÌÓ5±”ŽFv’>Û5Q‡Ï©Ü…®Õ;TÓ¢˜L÷j–u`=§@q’\¦¡K�°Ã$òVsìƒ\f~�Ð¿ûÍ/io–2Ž£5–-Zª‰H�Ö¬yÿ ¥3íÌ˜±E‚±¨`ÄtÛÇpÙE÷&…¾Ð üv=&Ùk2×Š]eëy§ãƒÌ±5$ùœ8XÙ¬Þ(2Æ9daïØþ;�†Í*l“\$¼MAö<:tªšÐ÷©ëáŒ¬¹~
iy³r³®£s¥1—È±ˆÑj¼!ÑOít¦?ÙtQÑ|(½'dLÝ±ÔÄ÷ÅìÄŠXòÇ¤$Ë&^!–ÿ ÑÉv nµÿ ¾;ÙØ³‹´Ü+eÑÄ�¿Ã,n€ŽþXô“eÿ FGè®_²Çä<úaÂÆÍfñA–1Ë#Ç~ÇñØ$|6iSdšá%âj±áÐÅÖGõöÙ~¥º¾ïJÓþ\çÿÄ ,     ! 1AQaq�‘ðP¡ñ ±Ñá`°@pÁÿÚ  ?2ÿ ¬Ÿò9…(\vÔeÍ“0g³-Ñ²—…*(AÊ5ŸÄõs½ÛF¼ü*½Cà~âŸZfÞ6UÇRhúL‡žEQïÒ\ÒP™B�…ZQ* 	k¼%¹Í5â4‰û ¯â}f”Á[ãøçáUê÷„úÓ6ñÈ§Õ¾ŒH‡[ÏÅÇQÄ±Þ}®Œ~¿˜ˆsó¦õ±?—�šñr*åêìð×�´<3Ÿ¯}Wó'…§ÙAÀƒX7y>…õ³Öm®h	Ië¤šð6UÇRhúL‡žEQïÒ\ÒP™Çÿ Ú?aD<ô)ƒÈ[c¹8ë¾el¼ãè<ëº_Ý5ŸÇ?
�rã´|~BòžN
W�ÚBr=pCYzM¾¦Bbâc9ä«‹­ÏÇ)»š6WMdÚ�‚N’™‰YUJx!œbµÉ;Gœ«í‡ò-’Ô‚â�²ÌüŽaJ�çÂëßUüÉúëó9ñæ±0TzˆKŽ¥M"H-#"®±Kúgã{ðü§lç�uHþÁ�«ªÒb%÷Ì.¦†’§Î>†t!¢G"œÉ¼_"®ˆâV]xÔ]ùMA·4¦‹H~Ef:É”*gv„ýÐ	_”íœó®©Ø2uZLD¾ùýI:~ÛF‚A–2g\3SJ¢°¡ƒ`â(˜'/”Ÿ~4 þv¸x�£VAXv°Íâ²ÿ  ç‰TàˆË€w�:ËR�Œ+"l.'OáêLt!¢G"œÉ¼_"®ˆâW‡†§Vù A’B:†é,&@d¬)�oÓZoP÷çoåû`;ÞçØèøÊø;{FÙ…‰¹Éê}Pæaò8Áj–Ë¹DÐåùUÍÓ¦vš	 0,,ôL(E"JÍ¤Bséƒ/¨÷×;Áé	sÖ°eþÒv2Rý&€åd«Ufûó÷�]bˆ…1ûýu[4œRÅ±‘xæ$Óã¶8¼¹2ª4h¢0ùœøñž=€çA´`)‹’ˆFþÕƒ!LAÚ.Ùöf®Ò¬ƒB(óÂ¦g­pví´¡IDõ¦ÕßÜÞL"Œ9JŠ- rê8p×Ó*j²ì,�ùQrN~S¶˜¹(„oíX2Ä¢íŸg…D�®ÛÜXêãn¾øµ¸„ÄìÍAmW‹a	ÄBU{KÅè§AE`¨)øè;Äjß¾„|=£95F‚†1ÔrIR@±L8!!¹:�—ˆ^#'±OŠJË·$ÆJŽÏ‘¸›R&P&± Ä·Cå…LÏZàíÛh:1B’‰ëM«¿¹¼Ü�h€D†ôã©Ô¾Xâx„”ìñÔÎe¸“‰1Ñb¶ŸÜ½yÛù~Ù¾Bl_~7B<d´XôØ¸œs÷œýÛ�QÀÙÈ2g*u2àÂ0È�Ÿ; jÛŠ¡(û*ÉomðžVÉÍJœŠÁ‡í`¦ï.N!¼›=äØNÛÑ~> E¤\Ô¯õgéÞƒ÷/õßæz¹Þ­'~#˜R…Kàz+.A_SüOù4 â3#Üð0u›QÖnÜà‰Ã?LÖì<€×ÂÌ´).K‘¢WØÐ ¿NF•Eh•�¡ŒþyøU{“ÀþB 8‡„3Jù�›U†œ-�K“;KÝHQ8ƒw6ÇÖ_,klçÂïßEüCãë/–„5·�ÿ :6@zºcÓ‚EkYÌ‡¯Ð¾£ö{Æ©Vä*Â}àÞ™ç�ƒ¬Úˆ&³vçNúf·açG8àÖÔ–ðxˆ�lUPLJ“öaQtôiüÁãê<ëª_Ù7ŸÏ?
�Pgû±°#[LžlìÄ½çúâßÉ^a½` ³P Y‚ÂÔçû¢°BeÍeñà€YS—ð0�]Á*žU† šÖ!*àŒFA`5•…ˆ­dªÞE"Qææ\„µÏÈæ¡Røî»`ïÜÿ «¾X:ÆbÊG´dbi¥â‡™±ˆ×þ	óŠ—qªîþƒ»ziÈaÈ¬²ÛGb3Bª¬Æ-¾†Ä½0¼Ž&°J$¯Cý,Šù0ÇÉÛ1ùñ¥‰˜(nBÐ7ìN	g‡	rì$È\¼•”2F%#(H‰â`·�”•£$½/D(FÈp ·SÄ�ý�ÒïDF¤M‰ß�”éCÄ­81Pi¡f°@X¥æ¯ÄÌ0	‰”'¾PD±²Ad1XÈheÐð
Y7önUA�Jÿ À¸$¡
ÉI0|†”¤¤„Í  �”Eu¿r»£$1ög¢ig:§Ñ†ÆX«MÂ #j)´†2vœêd<‰Å®1År@qä	š`.š èXX­DÛ“çÒåý%°Ÿ@HÍ‚Òó‘00·¢<X�ê£ç›RTœšr„àƒ(šZ ñ
U||èÛ3pW6çÅ¦BùD¦Àlé"w:8Ý„KûB¹
_l6m�ÁC’ŽÅA¾ÄFÁKëÔ�]}OŒ6[ÀVZå–Á ·m)l¹×ˆ�zUcA�¨S(ºè ‘Žg5úy:¶�²(˜…52:"”�&FÜmÍv¼eôZ*á�àiÄE³d°½I×ÔøÃe¼¿5êútS·—3Œ¥sÐ&¼0€2‚‹êOi¬=L™[Wz—Õ2I7vy@Ø)Kâ]ç”%ÉgSWÒç”J__ƒß¼]AwÃGåg5œà@að±Ä
ËÙ ¦CŽ³:á=Am6Ô7È‰'ü™KÞ{Ø'Èn�±	ocRÅˆ0Iæ˜°þ�² ©nDI:-|3QôeÞ•)‘Ðm‘e-T*+S(ÙØ�ÿ ÐUÙ¥™[y'Ü^g
á†$Þ:)èå™×	êi¶¡¿ë¯Î)Z]Î¨G«'Ý_Ð†0¥8€†P\kÜBÍJª6 Ð¯Ìm€xr–`PÑ~ añi€ãv°/#-Œ 1D¤{VFº9´¢ •4àðÙÈ…�”�`ðÙÈ„œ–„b“åa·!Æh‹0†K‚Ïº_ëOº?;XÌZðB·�MÏ” pôxP ¡@`ÒD@Ñ¼Ña—‹$"@aŒ+Ò¿‚Ÿ.DãÁìäòS®^s¡Ôf¹”,–Qóˆv‘D~ÃÓP€y`+@zŒ?�ÁDaÝ½4á2äÖ$hæ1$,
~'dHø¡¢Þ&)4—×&Òr%ÔÊ$[HSyîð£è2ì´™Ís(Y,£çìË·‘�Œ ûS‰˜"zJ"@˜Ç«ÑÎ5îæÈ†ÊsB5LïYþMŒG¨ùd¹¶§÷A('La¶u�)–'ÀÃ	“¶›ì€!V‚lÅd†clKMª.0+q*S•2;9×"@•45|BžÒ°…!´e²ËwDƒC•ãºÊú}Ý~u³�#'æv¬q‹:2ðÞh^zï…ˆ¿¡ ç‰Ÿ`é’8¬>ˆáôá’YG“°‰ÌPê¢§$Ün	l’m'‘ˆìç\‰ 6TÐÕñ
{HZÀV†Ñÿ .¿0Âúìÿ ëœÿÄ +      !1AQaðq‘á P�¡`Ñ@°pÁñÿÚ  ?!ÿ ¬Ÿà�°9ƒÈésð$²MZ{§Ø¿_Á¢F×Üôþ?°—�uŸz…Úœäùô�ÇJ63“®OJ—½ó’ž†j¢d	˜´‘VMÕç4 ÜË¿åRp9Ú„öàì¶„ 2ž¨�s¡ˆÙÇÞ¡Bö§9>}#ñÒ�Œäë“Óò.eþlåŸæq·Jç>O¼%ŽG›Ÿ<|Ic—Ÿ¤H]¯0A‘Æ§jÎa5Í™ùY'Ë}E'~‘QÃŠ…ðæÀsñnûéßC~8<gk@ŽeªÝ¥KÞùÉOC5Q2ÌZH«&‰jóŸ‡ŸˆþÏÒ&…K(šÖ$(,™u³ß_O–?­¨Ñ;&}ú/jw“ã5úÂo’îœm×5¢§@æ2E•öm_»'°W*¦:Ût�Z¹Y5®…~Î(·V³ÔÈD]EIŠO»ÛÎ»$!�K¹S E*ê‚DGà�°9ƒÒ?+$ùo¨¤ï÷ÚèwA:D<Žq€h¦ƒ�†ÝœŸY
<^ÓÃôXÑöSƒ\ÓŒŽm7O•"¶ú¤C–©ËÁ8ÆêiTŠ«�è?´TmZ·çœZ\I�wß®ü5”öú«£âå2"Ïô‚4}”à×ôã#›MÓåH­€ýT"""?L€Rô®æsˆ*,ëÄ\nV¤)¸;Ãí¯¢Uø`àg^ûZÉ¿% $ÒÎ&ödâh“:É€hå¬2E›WÝÖ³qtë/ã©¥R*®7 þÑQµjÜ�• IR¤š	A…Û#m*:¨þîËtwôÈãe´aB¨âj³Ù�0Â5@¾4ƒ·Ã„Õ£ÑÈøÇá!û.®©Ô–( 'Ôè‘óÆe9ƒV@]&„)ñ^Þ‹X—ÌÔ„ÀªæÒ)ÂŒ[<’^ó¹FPqƒÍŽï”UÆßÝ~ñ�õèduu9GU €ßßK�z±
„×œ8Q)ùó  j\Ö?vœfEä±]è/Hƒ€ôÎsÊ™Í¡ŽÇ!wºÆ'rùÈ¬Fõ““¸J	´­¾›ÈMi�ÇÖ}Zî˜8mK–Y¥NÄ;9FMV¤t^EÒÞL“Q0f$¤U5DŒ)Vˆ_@ˆ]î±‡ÉÜ¾r+½däî‚d”,õâ`‰>W>•)Î˜èX6éùõÀjìOX)XÄñû•g”mÈÛ“@ä	á0]§µL°cÝÅøÒd—´w0sÁ6¼E,òçÓõÇ"l
@†4ÇW@š{¦2Å2u¡¨["LÊ¹N-p8¡õŒî>³ê×tÁÀj\²Í*v!Øpqí&…Œµ¯
•*I ÒáÒPd	HƒÀÇd¡WËQÜý²vÎÒR2'cwX§Ê€¥¨ôÄ˜ò×õÕA{¹½/71€¼WJç$rZhƒ’ñì´–¾ÔXƒ€çV&äcš¢ìË¸
�q®¼¤^Û5R®DL¤$e‘V}AÏDR”xeK..Å|ûžŸ×ôò&ý> 9Û�y}#ãÄfŸásÑpŸSÜEåù0fCy~¨�4ðªQUUZ«µW•ÍÌL7{$X/„®[Z‘IP–sTZÞ6lY�Wœ“³j§ ŽF¬ýê/zwƒãÒ>á>§¸‹Ëòz.vp�B«žA Ž*ÐMßÌ8Âú™ãh7FÅX¿×�Ñû‘Ÿ…’|·ÐVõéþ¼~ˆ¿Ü�Hø9kË*v»ã^#
Øé2ÀgâÝ÷×¾†¼òxâ­DHóq»Gd7—ê�øÓO
¥UUª»Uy\ÜÁtÃw²E‚øDõ`FÁXýGNFä%&ÄpØšªˆ8,ª¢^1Þ:ÿ ÁéòÇõµ;/EÏ¿B…ïNp|çÇÁls]óß‘yqUAÅåÏ�Rñãœ×…m™{l¢@­ƒÆöî[´%”ë¬ªŒKF¡áÐJaýÁ-Öá¯�ØJ#NÛ)@Ö¬uPš-à€Hi0,ûŸ`Æå€ íƒÀ¼¾‘òÂp’nëÿ ç:0¤1§Œ‡.`#¸Qyô¿ð““¿dãJÿ Cáè¾žpÑ¿•ÃÍ ¤ ¾D%rY©¨¯d™YÙ!›Ëõ|Ab�Ôw.¡‘fÛÚ`l›N “6�).9FŠÜOg‚H”¸‚\}—æ°x€!Œ¡T;1¡L4
sËL‚F6^1¸ÄLá”�õm[–ª€$«‰*i¥ýc•œŒ–;6'©%¦¡(Ò÷F»M�.ÝýƒF+UÄB¨KÃ=¢¿à?T—�ô§ÜÀE“Ëm¼rQÃ ˜œÞäØžŽÃâqÄyiÅ3AD–E/¾û§Tsš–	!å×±¡T¥”ÂÅýRªÂ›r©“(ô¯2í�Å&
Î(Žx=Uƒ�¦¨'¢Ì9ŠÅá±¼”«ZÄ¼l¥Y[3p•ôÆÖÜ1ôf(ÒYAøÔÚZ>%$÷·`i’¸ÖOâE—ì3YZ€_7ÃMÉº=CC� ò�¡Ã6®ùrté€~¨†2æRë<÷6x­VB£c×@=Ý©SÅåØ š4w™ê‚OwueßyÌ¿Â‹TTr­ùƒë&]¡©%bHnp[Á¥ÉÓ¦ú¢ËJEsdÔ‰QAkÇ@!HZS+è·­xÿ åA6Mhë"Hy—h¬>í
–s�*ó2]ÓôÝg>žç)¥¼-JœÝ€acs•ô¬€RÀ{Ð Ëƒ`Šœ§}hrjb)¼ ßÊŸEê§·øf3rý­\BpXhá@¢�HVL€æNõÅtØsº(íP^ y
@†$µÒb­€|¼gièI(¦µ—V§Z€5/�1©Q_ûÇ—§ñiéË`ŽM@LE ÷„ÿ ¾ÕäïÙ8Äœ|€x-ÑTè9 KB£Ó-FJ3ý‘­eö$ÖL78R9l7F´´e ìk{R]ÉBSÊŒ �ðˆ?‹&6.hÓäÜèº4ò™£O“s¢èSÂá¯Z	|#¼íŽƒ–2žï?¦¢v¾ýË³ƒ«²	kGj
’Â·’…1è7F>D4
a·=r/c¶:XÊxs¼…×âsØ§1Â�HÐêk™D'cÇ†Ò=Üç—XBÃHÄ¡!8	Ûüèê‹$ø0mo‚£è=^ xz/§œ6oä0Y$B°!€RÚÛÀ!iÞ©2Â	_!�Æ0‰ðB]%Ó¡O3fíFã€¦^ºÂF%		ÀTg‡»,ž+°Êdä»Rd¸ ^°dü~,¥½l Õ=”n;º†äŸ�ÞOó�;Ý“0¹$x8³˜I|äµ¹P(äìçx$a¦!jŠ3¼›rq‰%7:+9ÿ ÈJ!_.½22ß�­Ž1<XTis1fP,¨¢“›Ë;`7È‰õ7²—‘EžW€2AƒÉF.>�jw+ƒ–¥n !Çk¾äš@Ñó=ÌÀ9lâ8§1Ð–a_ÿ µEªŸÈAPõ<¾�åK‹ZPñÓ!#-øØãÅ…F—3ùv|%gÿ ´-·ÿ \çÿÄ '       !1ðAQa Pq@`°Ñp‘¡ÿÚ  ?ÿ ?» R¿î.Hw™É÷!Tâ<¡k±¹¡J/…o>µ Ë@öÐ~axŸ_Ð;×o÷)„Ò0¹î�NgØr­RäË† _ h´.½¿¥ ‚Æ²•ñ®§ƒì¯�ô¬!Ë(÷Û@!ù„uâ}@ï]¿Ü¦ö¸8øuZk‹/ÿ ñY¯Na4wÃ8zÞ¶Ø�âAZU2â‘Ép!¢Ðôò„U_Åhz.ÄZ:_£Z=…M™²ÂÎXéæµ‹sp;Ž3Uç€ÃIð&‘…È't
p+>Ã•j—&\1÷Æ„–»zGK!$÷K1­rÊ·ÜEÉA>§!ª3z½F>òê>ê ŠÄ#¼éíï É»Þ	¿Úu‰Áò/RdëÚ4I ô,®#OíÉ‹Úã É\PÃDO¥â*=,%T-ÈM	ˆAð‹%Éc˜BMõ {º+þâä†ŸEØ‹GKôk÷ÎñS‡Ç©‘1L<]‚4’a|”�´…>ôý-÷ôüÿ NüžºÒ4ÙƒtÅL*!ðXÑÐ3†È›öëÄÄºÙÂT Ú^F„]�…�¸¿ÖœæŠ½„HKÀF»€\Â„¥Šë<m÷ôüÿ NüžºÒ4ÙƒtÅL*'éNÍìaû“‘ì� G0¨23†&ÌÒzº^�5ð{uÊøÔÃ7°E’×AOpïöÔ½‘¯2!âŒ‰@àA ¥"#UôLAÅš…(b!ÁaÃ~ÝcØ€¸—[8J€KÈÐ‹°<ra»¢%(-1Öï¤¢]¦ixê$™f&ò�³5ÚÅBBbÝ;-~	 
¤ú @ôóÐU”yT²9 fX0Ý6Ã�CmÑ‚ð#Wpq¬àÜú‰±(à²H ™Á�Æ·ãä­)º\ˆ!18§¤À=«´•
÷­ü�ü·£ý¹´¤2ø‘J ŠW÷ÉVç6KRª0
’+>›�èèž½¶Ô.`=â§�Sj`¾¼åüú	à‘Ó–¼«â/=C	7l©MÌÀ•gMkÐlEa'0ç¯ø„¥°y8NŠw`ÐÕ…[š>©¹FAm–Áƒ2i™Ì2ŽZ7­ÎZð¯ˆ|¼õ$4Ý²¥7<1“P¸‹VG÷<�ãÕ²GŸi‹‡˜X�Ÿ"U¹¶¯¯±^åuiA�9Üò|+ÜgÊ@™ÆGé_míN·œl$Àã/Üœ�d€ ¹I£BPTº:aÎµ¥@HòS�4ª£ÒrRDg‹²y±SÕ×c
È‹@ÞX¡B'0ç¯ø„¥°y8NŠw`ÐÕ�¢/‘9tà•+œ˜nÇèˆ)éþkô9íçÆ<Î.½�÷˜ï)Û~B³kŠ�ÎŒW�ëÊp
O¨^ øø2°©‚ÔÜ¦qEYX$)§µö›PŽ+`–>JÚJèL`¼¦-B(�í«X(�  Zn§¸4<LOZâž+ / &˜eÄÃã¶»‹`#­h2Ð=Ý•ÿ QpWO¡:Ú|û¬Þ4ûÈ¨¥?ù²’ÑÊˆT…Y9è9åÊ¡ªò»‰D(d¥%pD\…(.A@Àü0öD¥ý%?!yfscœÖµ™wí üB»ñ>ò*)OÂþoÚ�GÐ ßÃŸÄˆ@ ðeÎÁDeLŸð
Íû¢F‰Þ^SäÞ‹±Ž×ìÆ÷D�¼¼§Éâ}L§†¿‡Jš¤øéh³ÒÍ+RæäuiÍÜSÚ¿µÔÉRZ9AÑ
�«'=<¹@T5^Wq(…”¤®‹€ëÄÕ“Ñ™@*xÉþþ+é/d{P¿�ÑUNé øõzŒ6}eÜ=Ô˜W[ÜÐhaÓõ2�%eÕ Eòm=ý„Vß„-$Ñ°ˆn‹À è�v“é”Ã>4]oq �²4vÞŒÙ
#Û•±#š¶ €3Ël±?Œç» R¿ê.
éöd‘ý»b?ñoýp{÷�û,An`¦Àéþˆ<pÊþ¶ã$ WË3ù übÀÂ EbÖrTÔ‡q‰ÜKX‘�YýàUÖ“FßÒêo Sÿ [ÄÁýŒ8ãÏáj’?eF¼5Šú
æ¦"uÞ$ùÕlM�ÜçÍÇ€Ý™ÍÇké{†´„iXCögChˆ"GÈ¥Ï</dŒ¸‚¼£MeTy¦ç�ßuP) .}b³&H^©¨ºÊS’sC¶¢k0ÙÍý„ú¼uïúžéH4‚˜ˆÀ¹¶GNÒŒnBäÒ¥ßÛ¸†…j›=‡)ÓF§ºµ(zeBcÎ[T½è÷æ¿|¨<°ÁD�1I,$ßŠ‚B€¶Žè)©²è{@hs¤£ 
j�u�`ñÒÊ2-tFHI<`x.?ß_.3È
4@çAÛ¸›(r@Œ@“œþS@�x¦œ�ÐÈä×¢{ÀR©óhñe–D{ß3öÅÏ#Ÿp¨”ƒÕÁv®cXž¹Ä0î~cyœÆ<ÉûÒr8Ùà“±®¥©ï‰0…›Ÿ¡o2Ç1={Vã
ìv>.6±âË,ˆ÷¾gíÇÉ÷Ùô{óÂ”‹QÀ®¿È§r�,�ñå†BmS_o°†ÖxÆ‡W
‰Ê�ixÐ§õËDXäÚ¶9Or&h:ÁÀ‡Ø'_�á¢>@›b—IRäâ0|‹QÂ¢D“¼Í ùWàÆ
œ”ïÆV1ƒBÑ;§€:3  ^f`s¥cÄÂåD4“¯]¹-i1öŽÚÖ¹•0F:ÒHæ}ràøT�%Q<Ÿqnñ@«-® žÙtˆ8n‚#äX¢ŽÕƒûâ5Ã+úÛœ”… §¹UãDxÆ].çÜüj5Ï,ötZxÎ4Õ—ÌÕªÐàx“ÓR³�™•Ÿ¸5e¤Û@M5\w   ¯—#~xf@\„WË‘¿<(.RIY¦š³Ï|[íË
,Ô?Ó�y
›§Lm)“o(¨uÃëŸ«ÇCQ;¶ ?ëB•ÃâßnXPi`v¡R8«Âã.âÛÍ_Ÿ–ˆ¼�§¢ù~ûÔ£`[•ÁX>d'oG£ß–ZÌúw-³Ò´Q¹·ô“?’Æ-Ìßõ£
†+,ÔŸŸJñŽžÒÙ#öð/û6�Žds¨tÙ”æá$±˜)Ö€%œ·+‚°|ÈNÞ‘MˆŠÁágÌ˜Ej€éb|çX\W(@ø®Ž8¡o»¾‹ÿ §%úâßEŽÇ˜Àt"å£CÔ\V)ç’`ÙŠ#¦Ì?Äƒz¯iêÐœ¯nÑÉˆ3†¡H™	˜b%êN{ýÌI²áÊFO"L˜´#¶FR/�µ!†¯º¾ Ë<‰í§õº¦=¶^M§n24G/}¡xý�ðçŠ×ÚSgPpiŠFY‘|mŸŒÄä˜ƒ8j‰�™†"^¤ç¿ÜÁÿ �$ù»cÿÄ "             A01!�P°`q€ÿÚ ? õÌTºÃÔm-mZWÔKQd¡×ŸúJHáÉ¤áË‡‹’ÜQ-rý:Y¯üR¢^Ã/ÿÄ            01A @°P€ÿÚ ? ç0eL¥3Zc*lÏ¾eL¥3[4ÙŸ¬†¤_ÿÙPK     ’ŠU]èÀstÉ  É    assets/admin/img/logo.svgnu „[µü¤        <?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 630 101.88" xmlns="http://www.w3.org/2000/svg"><g fill="#636eb9"><path d="m235.33 89.2-12.02-17.2a19.23 19.23 0 0 1 -2.27.09h-13.28v17.11h-10.93v-58.84h24.17c15.46 0 25.05 7.9 25.05 20.93 0 8.91-4.54 15.47-12.53 18.58l13.58 19.33zm-14.8-49.59h-12.77v23.45h12.77c9.59 0 14.54-4.37 14.54-11.77s-4.95-11.68-14.54-11.68z"/><path d="m294.41 62.89v26.31h-9.92v-5.46c-2.52 3.87-7.4 6.05-14.12 6.05-10.25 0-16.73-5.63-16.73-13.45 0-7.48 5.05-13.36 18.66-13.36h11.6v-.68c0-6.13-3.7-9.75-11.18-9.75-5 0-10.25 1.68-13.61 4.46l-4.11-7.65c4.79-3.7 11.77-5.55 19-5.55 12.93 0 20.41 6.19 20.41 19.08zm-10.51 12.28v-5.17h-10.84c-7.14 0-9.08 2.69-9.08 6 0 3.78 3.2 6.22 8.58 6.22 5.12-.08 9.58-2.43 11.34-7.05z"/><path d="m352.07 63.48v25.72h-10.51v-24.37c0-8-3.95-11.86-10.68-11.86-7.48 0-12.52 4.54-12.52 13.54v22.69h-10.51v-44.88h10v5.8c3.45-4.12 8.92-6.31 15.47-6.31 10.76 0 18.75 6.19 18.75 19.67z"/><path d="m383.75 70-7.82 7.4v11.8h-10.51v-62.37h10.51v37.66l21.77-20.17h12.61l-18.75 18.83 20.51 26.05h-12.77z"/></g><g fill="#090e11"><path d="m473.93 89.2-.08-39-19.34 32.28h-4.87l-19.33-31.78v38.5h-10.43v-58.84h9l23.36 39 22.95-39h9l.08 58.84z"/><path d="m536.71 62.89v26.31h-9.92v-5.46c-2.52 3.87-7.4 6.05-14.12 6.05-10.25 0-16.73-5.63-16.73-13.45 0-7.48 5.06-13.34 18.66-13.34h11.6v-.7c0-6.13-3.7-9.75-11.18-9.75-5 0-10.25 1.68-13.61 4.46l-4.12-7.65c4.79-3.7 11.77-5.55 19-5.55 12.94 0 20.42 6.19 20.42 19.08zm-10.51 12.28v-5.17h-10.84c-7.15 0-9.08 2.69-9.08 6 0 3.78 3.2 6.22 8.58 6.22 5.14-.08 9.58-2.43 11.34-7.05z"/><path d="m577.13 86.76c-2.52 2-6.3 3-10.08 3-9.84 0-15.47-5.21-15.47-15.13v-21.57h-7.4v-8.41h7.4v-10.25h10.51v10.25h12v8.41h-12v21.35c0 4.37 2.18 6.72 6.22 6.72a9.38 9.38 0 0 0 5.88-1.85z"/><path d="m630 63.48v25.72h-10.51v-24.37c0-8-4-11.86-10.67-11.86-7.48 0-12.53 4.54-12.53 13.54v22.69h-10.5v-62.37h10.5v22.7c3.45-3.7 8.75-5.72 15-5.72 10.71 0 18.71 6.19 18.71 19.67z"/><path d="m165.97 52.31-27.36 1.23 4.82 7.55-45.63 29.16-45.25-19.01-52.55 21.89 3.64 8.75 48.89-20.37 46.18 19.4 49.82-31.84 4.83 7.55z"/></g><path d="m19.43 80.31 33.11-13.8 1.62.68v-19.61h-34.73zm75.76-80.31v84.43l2.61 1.1 32.12-20.53v-65zm-37.88 68.52 34.69 14.58v-59.31h-34.69z" fill="#636eb9"/></svg>PK     ’ŠU]{�oÁ  Á    assets/admin/img/menu-icon.svgnu „[µü¤        <?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20" class="rank-math-icon"><g fill="#fff"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>
PK     ’ŠU]í·½’v
  v
    assets/admin/img/pillar.svgnu „[µü¤        <?xml version="1.0" encoding="utf-8"?>
<svg opacity=".7" style="margin-bottom:-7px;width:24px" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><path d="m17 2a1.0001 1.0001 0 0 0-0.11133 0.0058594c-2.6982 0.060284-4.8887 2.2822-4.8887 4.9941 0 2.6994 1.9427 5 4.375 5 0.60058 0 1.1422-0.094264 1.625-0.26562v26.266h-1a1.0001 1.0001 0 1 0 0 2c0.55454 0 1 0.44546 1 1s-0.44546 1-1 1h-1a1.0001 1.0001 0 0 0-1 1v4a1.0001 1.0001 0 0 0 1 1h18a1.0001 1.0001 0 0 0 1-1v-4a1.0001 1.0001 0 0 0-1-1h-1c-0.55454 0-1-0.44546-1-1s0.44546-1 1-1a1.0001 1.0001 0 0 0 0.099609-0.003906 1.0001 1.0001 0 0 0-0.099609-1.9961h-1v-26.266c0.48282 0.17136 1.0244 0.26562 1.625 0.26562 2.4323 0 4.375-2.3006 4.375-5 0-2.7153-2.1957-4.939-4.8984-4.9941a1.0001 1.0001 0 0 0-0.10156-0.0058594h-16zm0 2c2.7341 0 4.9319 2.1644 4.9941 4.8828a1.0001 1.0001 0 0 0 0.29492 0.83398 1.0001 1.0001 0 0 0 0.00586 0.0058593 1.0001 1.0001 0 0 0 0.013672 0.013672 1.0001 1.0001 0 0 0 0.84961 0.26367h3.6738a1.0001 1.0001 0 0 0 0.88867-0.29297 1.0001 1.0001 0 0 0 0.001953-0.0019531 1.0001 1.0001 0 0 0 0.00586-0.0058593 1.0001 1.0001 0 0 0 0.007812-0.0078126 1.0001 1.0001 0 0 0 0.26953-0.81641c0.066301-2.7147 2.2627-4.875 4.9941-4.875 1.6685 0 3 1.3315 3 3 0 1.7186-1.3073 3-2.375 3-0.74136 0-1.1462-0.18-1.3477-0.34961-0.20142-0.16961-0.27734-0.34314-0.27734-0.65039 0-0.51089 0.11963-0.67733 0.24805-0.79102 0.12842-0.11369 0.36929-0.20898 0.75195-0.20898a1.0001 1.0001 0 1 0 0-2c-0.72233 0-1.4828 0.18583-2.0781 0.71289s-0.92188 1.361-0.92188 2.2871v29h-10v-29c0-0.92646-0.32831-1.762-0.92383-2.2891s-1.3541-0.71094-2.0762-0.71094a1.0001 1.0001 0 1 0 0 2c0.38297 0 0.62372 0.095499 0.75195 0.20898 0.12824 0.11349 0.24805 0.27948 0.24805 0.79102 0 0.30725-0.07592 0.48078-0.27734 0.65039-0.20142 0.16961-0.6063 0.34961-1.3477 0.34961-1.0677 0-2.375-1.2814-2.375-3 0-1.6685 1.3315-3 3-3zm4.8848 0h6.2305c-1.0756 1.0512-1.8102 2.4444-2.0352 4h-2.1602c-0.22495-1.5556-0.95952-2.9488-2.0352-4zm1.0996 7.9863a1.0001 1.0001 0 0 0-0.98438 1.0137v22a1.0001 1.0001 0 1 0 2 0v-22a1.0001 1.0001 0 0 0-1.0156-1.0137zm4 0a1.0001 1.0001 0 0 0-0.98438 1.0137v22a1.0001 1.0001 0 1 0 2 0v-22a1.0001 1.0001 0 0 0-1.0156-1.0137zm-7.1719 28.014h10.375c-0.11353 0.31492-0.1875 0.64805-0.1875 1a1.0001 1.0001 0 0 0 0.29492 0.70898c0.027814 0.099682 0.066038 0.19467 0.10156 0.29102h-10.793c0.035524-0.096344 0.073748-0.19133 0.10156-0.29102a1.0001 1.0001 0 0 0 0.29492-0.70898c0-0.35195-0.07397-0.68508-0.1875-1zm-2.8125 4h16v2h-16v-2z" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none"></path></svg>PK     ’ŠU]Å’æiõB  õB    assets/admin/img/score-100.pngnu „[µü¤        ‰PNG

   IHDR  ½  |   [šeU  B¼IDATxìÝ!ŒäÖÀq'iÒ‚V.EZP•¸áhP¥²ÁEæhÂ‰qÉ &Ð¤|8ˆ|ê)!IeŽ\R©VÚjû«r/ßÜ®w÷=¿ßH?|:²½çï³«ÿÿùùùýçoÕ.fêÐ\q	ÝÜ?¿ÿì‡|ÿ«1Œùöw?„î—Ð\Q‡ÃÌ.TÀºŠù�Â,fÇ+áêÃýšâß\K%˜GqÑCØî¦°�B³rÐÖ�ÞúalÂi
â]¨€íD§¶&´¡[
PÑ[Ò…64N‡äEô¸.±½Û¡{ù‚è!rûp
—Û'z+…ðNaª•�èÁ;§¸q…àˆÞ:ÆwNƒÕ#€èá$·9ÑKÏè$xDÏäŽ¡ÍìºRô–¡GÏ=¬L§¹…0ˆÞ¶\ÂÉªDiD¡ë‹�èÍõiD¡=Dô@èDO =£Ô+>£=.¡6ƒè‘ÚzAû„«¢ÇZkˆ/zª{�ëKÑ£_éô¢‡S�è9ý!zˆ]:¡J4zt¡ˆ�¹Â<eô†Ñc§½úÑ³npÎø
SôÃù}k zb×ŠÑÆ¢G+~ˆb'zâ¢WTì§ˆ]nßþCôp²=œü=ÄNô?DÏêÁrì=Z«ˆ^þ±kn^=@ôC#~¢G~Á«;D�1Ÿ7¼ z&2{AY…èÑ›ô=ÒR¹‰èñ$.‰» zxn'z<ëó¾
Ñãå®2ñ=žÕ°ú•'¢‡ÑÃŠ¢'xÇd®2=Æp¢Çúƒ*�P$IôèÖtAôï”üéÑc§P!z8Ý!zN}ˆÞ¨"zeóFDÏd¦%sÑc.&<—‰ž½;§;Ñc[F{}?%z‚wÑcÓÎ¡Bô«”ò‚hD�>•!DÏ¢9¢‡…vDÏu&¢‡ëNÑÃu&¢‡ëNÑÃt&¢‡éNÑó*±ûë=ð
3Ñó DŸ+Ê‡è	žçwHô >ÑË1x{ÏïHô`ûP=DÏË¢=¼´Zô0°‚èaÀEô0°‚èñDÚP%Nô|DŸ)=š z˜ì=ÁCô@øDÏJ¢VDOð=„Ñ<DáCôÑCø=_9Gôð5vDï_üíë¿ø¼û÷·'ù‡Ñƒ¯Þ¾ê¾|ûêu¨‡¢ÿó¼C¸o~<}þ�ð¥FôàÏ}õÍŸº×oþpùý}8„êá(ö?¡Û‡1Ü_êDÁ›Œa/^'xAøR'zžð­Cð„/q¢‡à	ßzOø&zžð­Kð„ÑËŽà	Ÿè-o7žð!z xóðíMôæÁëç1>Doo®¾Ûžð!z<á›½v/áCô6HðæZa[&xÂ‡èåLð„Oô"N§Y¨„¯¢‡àÍ�îº-¯žJøJ"zÞ\-r?UÀ.žð•Cô<;|Ëìâ	¢·!‚·¼Ã‡Õ„ÌÂ‡è!xVD¯�EHø=ïêD'&5s¢‡à™è½Ù—Ïƒð!zÞ2_^7¸"|ˆ©Ï`‹èÝ>¸"|ˆ‚7Ó‹^~Á;/Gø=oÙYôò	Þ1ùà	¢'xé;Š^úÁ»{Üs<áCô¼ÉîDo£Ïñ„ÑCð<ß+æ9žð!zžç{Åìã	¢‡àÙß³�'|ˆ	Ïþžè]’™ð!z‚—¿‹èmèƒ°Â‡è!x><k=áa„�îŠóß¿ûõ×Ãw¿y3„ø#ùu8‡îŠ{ÏÃœèu/!ác]¸„&œÂaR=…øƒz˜œB.¡£ØÞèDo›Ÿ>ºÐÎÂ¶U*¦ îfAl�ï™œD/ïkMác˜nª\M1ÜÏB8ˆ“à¹æ¼ÍV¯5…�1´¡w¡Úª)‚w¡­kQÁ[I'z^&�vøèC“ÊI.�“`z¼G8Š^zKèÂ't§ùiŽ«§À“ 
^ZKë¢×Š�ð	� &<ZÑónMá{~c8¯~ué
ôüüÏ Ï»9Eo¸Ÿ!|]¨Ÿ<X/¬Cƒè­¼FØ®¾Ö©îÅN­à]A#zëîä!|chÂN€’XŠoÂ(xliwÏ„Oì¸5~‚ÇEôÞËðŠð‰�ø	ž¡Ñëó�ð‰�ø<zÑó�<á»]+v›‰_[lð¨Eo™7¯_g™|³Ëî]¼àM-¢gEAø†pˆÍÇï†¢‚G#zNyÂ7Sìs;ÏûÏiOô¼_³¨ðõÅ/–[pï‹­è-/¢ß³ùð5¡
ˆ_SDðÈjaÝ)Oø6tºÃ©o9x8í9å	ŸÓéŸúÏi/�è9å	ß¡‚Âw£à9íå=¯¾î�“™˜ðìÏëÉ¶½N|Ò_ú×™¸îL<xt[‹žgyÂ7®¼hŽ…öñ9ƒ‡g{žå	_úÓ™˜î\)xx¶ç”'|i<¿Ãs>ÁsÚK zNyÂ×†ê ~íS§=§<áK`.‚ç´—xôÎÙ‡AøêP½ „¯Î>xœÓ�ž/)Ÿà‘pøÏR�Þ)Ûß˜Ø„&&;ÇlƒÇ©”èB’aø¾ø¼<RßWo_uY�aÓÑ›‚WH–Æð:T©�/ß¾z=]—Ýg‡:Åèyå˜àíC•*ˆ¿/û5Â‡W“­¼½€d©U¾ZD²´O)zÅ,£#x–Õ‹YS@ð>¬/”9ÀBªŒ!|�˜d¥ÞZôz!ÉF*Ø@øZ1ÉFŸJôÊ`¡l(|½ |-XÊ
Þ.T°¡èí²	íV¢7
Ê{ØÅ;|Œ)D¯ŒŽ¡‚‡ï(*Y¨s�ÞEPLj‚‰NntI9z>›¿.TAø:aYâ³>!´]c‰ƒ+lYz¾‡OÙÍÛ®C¨
„ð„åçØÙsµYÌs<ð|Wœ®6- ‹ë¸âtµi¯ØßÃ§«Ím9…ê@øNãŠsÎÕ¦õ„b`�Wœ®67Âµæ\s
ÌÄ§«Íb¦5Á4'®8]mæoÕ{�ð"ãŠÓ»6-¡ƒ¥õbxç‡o'0É¹„êf |¡IÎ.ÕèE&9w¡ºˆÞ�È$ç˜jôZ‘1¼†ZXY›jô¡ñð%V6$=«
Nyà´·V¬*ägpÊƒUN{V
\]°ª�Ÿ:TðhÂW‹M2.©Eo‹è`a�'2&½é�Ž÷×á”Gü>
O~1ùtòÙÌ§“OÂÇá£Éýüœö’²O%zžç¥a˜t"7ùdŠØ/ÃÙ;ð¨îåï¿VÁ¥îBÓP÷‹Ã)	ê‚ÔÝË-´ÿÂå–:UªpÑq��6P!	q7âîž�lÖwçýÎ¹‡}–tiØ@XJ~ó<óœÛîn—ó93ó�™að‘/¾øâ%8Žûå—_nœ0aÂÅ8¿Àßßÿ.>>ýôÓWüøã�N8?_þÛs”†Ž1¡äZu=QÏŠMáöGtçÈÀ¹nÝºkq¼èÀ�‚‚‚ÜJJJ>…STTôµR©Œ---ý¥¾¾Þ¿µµõwœo(//ßPPP°&..n	þîÒ/¾øbâÆ��q>>jþüù£åÇ>·OT
bJNQ×õ<Ñ—'Ü>Ø_±bÅ8^œ��ýfNNÎjÀ-P‹6›Í&�FSO0£ÑØK²É¦×ëÛ´Zm#ÁÚÚÚb***¶444øVVVþ0çÎ�Šààà©_}õƒp|´‹‹Ë9’<Ï6áÂl¢oohÕõD=ïïá>Ž‡||ddäÂ¼¼¼Õµµµ~€œk§“4@±@ÙÓÙÙ™QWWÒØØ
zº‡……-@døÐ§Ÿ~z?‡k¯½vì=÷ÜÃ n‰
EzôdÁç1À"êzýCïÙ!1cS �A2ìÍ7ß¼üƒ>¸QÝ‡ T§Z­®%’ÌLƒcÂ>šL&5ƒžÒÑÑ[]]½%11ñåÐÐÐ…iiiO½ÿþû^¸fÍš«†r­pƒPÔ
OÜÄLÎ3ÆŸ=ÍÐó6Å&á2 £=<<îC-îó¦¦¦ßé›V¥­7Ã�­ùõ½Ú=¬»±¥°Ú`ÔåßÑ��†ÇÓË Ô ¥š
ø–«TªBÔÈÊÊZ�ŸŸÿaBBÂSß}÷Ý]\güòË/ùÅŒ��²Ž
m*HÏŒÂ=½,‡ûƒD§x‡q‡zµºÔéè8¦Ó÷èøX×M]š
ŠÏÿ´¡ ÖSSøº	n>�±ª0 vQnbÉMDÂû‡÷&¿—ZÜ`¨kImUkÛu½…€™QMÄ6�(UÃ*áUx¾5eee› ÁÏP+ü>==ýÕÅ‹ß°eË–;·mÛv+¿¶ã+H‡n­PžöOuáY§zbžhFnÕ‚À¸  x ©�)6­­'‡Rò·å¦U|F»2–1›¼boiõˆ»ŒRî0o:tyÇ_O1:¶ÄŒÁù£wÌ�uÞñNZŸÄ‰ÆøâU†Ø¢×)¦è5*k¦æî4jìL –Î\•Ñ¤7q¤h2ëì�ÍV ìaáG†===ù¨†‚‘"Ý”››»bÉ’%¡8�¾k×®)\+„�Q(œ"f]+J
Ò3¢Y]øXGAO! 3ÄÚð†Á/D:s=–MfÁú˜ÞØCM])TÔàEA©÷QH²KÇ#ßÄ‰´ãðÅä�píL¸€»–|�ñõõøzÎo$¯ø«á×HçÛbÇKî“4Qú9?8míÏ{‚"ÒŸn8xäYsaƒ—¡±3‰ªÚ"¨¥;�ØŒ&-©µJµ�Ñ ÙºVï&ƒiÛ¨H@<ã…šåJg\ÑW¨Ø³gÏL†?|ìÊ•+/¶®²‚T´/W8
zët„€e(¥4Ñ<~uqqñl˜²·„Ò+¿ È#Ë¬ig¢yÄ]ÎcÐñ±w–�Nä›4Qáµ(n4·Å^@~I·ùqÿ=Ñãú-{!…eÎ%Ž
³ª¾¡ì2ÿ²²æ]†e‚ù(ˆ5ú6«hÏd´35ªá¨’`¨–@9 fµ´´„C5úúáÃ‡ŸEäû¢��Ï4®ÂÇ­ZµêRîS”k…ç�B©´_çè9¾)]x´ Òi‹òÎ½á†.*,,üžÍú]Uký–5Ÿ£1Dt—2¸ =	t§È�,PD´(?¶UÀð@ò&òŒ¿’6„Á©Ó4{2ÝŒ>IÎ]ø2eUOÙ5?P~ý6jîL7wtÕ5itJ½ZßbBã€D3l½½½•€`Awww¢ÂHˆeÞßÂûµBŸÜ³øóÏ?OäþÅ>µÂsÿnµB|Ñ<go“ºX;Ôçl
à�ãëëë
H-Ù°¼º�…q
“S”ýFsÊÑŸ5ÌNÊ9äÇcgè2 ù{qî Sî•Ò­IwéÃ3Ý5ÙU?é’Ë×Rfõ·Ô®:BÝš*Ô óH­k5 ÆgàÔ­½ ä¿³a§€Y4ƒi8&Íl„pæc€ðC¼—³yÚíï~ç�w®–¤#/¿üòá'0vMÌã^é(è‘C]ø O`._tG¬^½úNˆVJÈ†¥V¬£Í1£d–4äñÜ;áZDfWH`Ú3Nžwü5œ²”è|²Ña€:±Ë ¼L®Þ Í¹œRîâô)€xý‘÷¸”�ÊýgSJù:cSWº^	å(j†–Ô(×™‡íAÄ{XÏ�ö€c/F¯í†`ÆGŸ#GŽ¬€[)�"½oÙ²eWr­°ŸV
	†œÐBuáƒ=!b½yC±Ž‡Y—Wò\Lêc“š2*?§q—õºëÙ	^DÉ·£w…gÍ£¨üç)4}Î]¡ìœø]G[ O@Š#F; gwÊ�Ï ôŒ»R‚¬7`ÍÿmÏø«È?é.ÍÖØqüœQ›\>AP£Ì©ýIR�Uï­¨WÆ™ÔÚf“\/ä!ÐL2õ¨vá}Ž½ÛÛÛÿÀlÒÏ¼½½]÷ïßïŽÖ�wÝu×år+Å(‹hæøQ¡èÙb–»Ø¬0$S›ÂåéhŒ[Ê‘	Y™Él âF@ìN†ÔqAƒ(
�»YJ}¦U|JÉe«©mÕm{Ioè¦UU´ì¡šöýTÞ¼‹öå>‚šà?hÓ¡ó-Q£ý©Ï�×e•(��ˆç}!y%H*S®JÑaxúC¿g?hÜ�ö‹Ô	K¨¨q'^C$"ÂVêQu6kõ]F qZ•�`H�6cÊL2O›�hæ7Ì!ýÑÓÓs7ØcêÌc#FŒ¸„[)Ö¯_5ÃÐîZ¡HqŠ�v@oÃY‘Úµ¼óÝÜÜ®…Z1—úX»*jINWþ%ðŠÜbPÛEcÃÒfo¹AnõSi¨AG¿g/"_ÀÒ)I~pg«ZáõdÍÄ^,E‡|Î-¹2 CÓ§#j]hŠ-X¥,ª÷×æÔþH•­¿‘¯­W×D=šjbã¨Î³„k‚Y¨Vˆ‡¡¦ý³N?ÌÈÈxJÒÇðÿ�Ax�eEÓ Õ
EŠÓá¾átC/ú,‡ŠPmŠZÞè˜˜˜çþÜ‡§2@Úµ¹ãƒ¡À¢Žìz´µv\ÜMrëC1¥”ÿ�q¯yùÊ r´ËÏÃÄ"Å{©^aþ5êÿòó6¥þïÃD¯�R|É{x/þE)¥ß´5øëÔ:¥®[SI�ê2:jF“ÎîˆÐz3Ô£…86ã˜	ÁÌ×½öÄ3ë‘}tíÚµ·a·3j†7­^rÉ%RT8ðÍBÅé`�>ÝÐë„çï
0z”wÞÈ‘#/îêêJ¤>VPÐŠ–�~£¤œšÉhÒ0Åg¤.u¹$’ñO¾•abI£žyîl½ü¹6h¹)àˆpKô(©žéŸxo×Ã3ÝÌñ%ÿD;Å+”T¶FJ�6v¡É¾)±¯Û3ÊuS{Ah²!\‰ša;Z)²1if;†
|�í[±Ûð1´OÜ¶{÷nÆ®Ý%O›=iÒ¤Ñöl¦�Sltv¹X3$Æ��y~§€Ó XF¼úê«·ÚÐ]˜÷d¸iþ*åÈí™h?Ö¦Ê¡ÃÅoKâ´ŽwûÕ£VÓf®e8B¹:–ëœœeA�$š	M›F{3žoˆ<òŒ½…æšöTÛqˆªPÿìT—ÊêOU»Á¤1“}fù}�N×N²a w
	Ç1µÂ_“’’^ýõ×_§£^øÈöíÛï=:mæ¹çž»ÈF­Pá¼€¹wÏßu¶ÁDŒ#ŠÊM1kS¤6Ç`+ÁJêcÕ­1Ý€Ú_^ô£
ž£Se<W“# Èüåä3(ŠNÇ‚©[9UêŽ!OD‡~É·šYIÊcÚxÚ×7#r üß2g–mj¨j‰Ô•6Z@¨Ñ·³‚ÔR/$;£•ÁÈ Ì`áR¤555Ë¼�ÏÁ»±±±�oØ°áNA·|ùòËÜÝÝ/”§Ísr©r¹Ÿ$…ï²81Ùÿ^`
N±CO,‹R.ßÍ_ˆ‹_õ±„’ÕÚ¿¯\C-Ýt*ÍLf4¿o–{ø¤óìsK›†“¬½ÑÒXïwO›aÑŒykìX¤FšBÓ¦Bå:©Ñ)»z±h¦¨.PÕØ‘¡ÄtXÛÄµ×>ÁžýõBMh²¯€p&=†Åè)ôƒ`æ}Ì ]…ÞÂØ¡xÛ^î!¸“«ïýt¿ïšç?WrD� ’k°õ�âA±[OÌÜr­
Bµ9gÎœkPj"˜µÂ*ÅãÖÖ8ÉÉ`X·¦†v¥O·Ìñ:î,7×_oQÄbÚG�–ÞGV¸†¦O¥€ÄÉ�ø`>\´Â˜Qµž’Ê×Paƒ'uõ–‘²·ˆš•JÔåºßÀ�7R0ÑW¨‚æTeg|ûýÿ#}³žóu¥ggÑòÀÙäæ5ƒøL§E~³hžßš0›æ„A}Ax&ÁPÌà37Å€é¡½áß|óÍ$ŽŽOG#Ù„^ÒìOƒe•_"ýwÕƒžmõ(@hq Ð2åæ¿C¸GHQb@ŠÔCI!iSÐ6ò$Ef®¨Ž/~Ï”Só“™S£ˆÈáéd’Gˆju½* iªSÖI�UÙšKáÙ_PLÉ&
Íú’>Ûÿ8ý3l6=0�^ß¥ ù^
šç=‹ÜýRdx¿Ã9ÇÂ0Ô‘)R1ƒs¨µ+ˆzž±Œs'"YYsW*7šÿeŠN¥k¤Á24±óv…?ýw…;ÛÈ-ß 8IJÒÿÎ)R3×y3OÂ9�·Tš6[ô¦Ôd_TQÝ¨LÒ5v&J)e6�¡óØ”§¦3¨HÛ†?«ë8B{ó~¤øRŠ*ÚNï{”VÿîFþ¾˜ž˜IKý&Ñƒ>Séaÿ™ä²s¶CW¤G- >†‚ƒÛ¶ fnŠzÞPƒÞ¨øøø­·°Uµíã†ñã/0å.9jtÓ¸÷O@Î.w’Ý™Ah©z ·Pš}*Gî¼À×/ñ6Cä‘§œÂæ>Ì‚úTÜäO%M~Ô¨LÖõªÛºY(£Õ·T<Šˆ°ÛÒ‹YÓ‘ƒÌ@4.ñ¢CÅôSôsôïwúhßz	�[ì5‰– :\ì;)ÒH‘Î$Wÿ9}k…†z'ï¢ž'šÒ!Vx·¯° ÁƒwÜwÃ+Óºµ5äkµ¡á¤]¸e.*Ÿo�½Hj7aHò<Uö€ä»hOæ\
IVtíÉ¸ß�W»EÏë™rkæEÁ’j´õÖ.u½^®÷‘½ZÝXe!=ÇD†?‘Oêûôé�ÐG{¥E, G¼§ÑÒ -öQÐ\¯Ù´ @tó›-	gæÎ±]+´†z¢]a(öç	èQË®ù‘ávÜ‹g`êàFzÒðyp 'ÜR¯•G®Yz.=¥UQ7™7£VÈ�õ<i&0ånÞP�ZáJ(]EÑy×gV}‡&ûh€Pš©*Áð¨éŒšG‡Õ9 aº¤F�*ô ÏÄ·)$óßôÝ¡çiEØ\z!p*Ò£Óé™ i ¡*ÒÙäê7Ç¶‚4ô¬¬*ÎRè	P:}éMôg=O},¿Î[å Mèp+§7Y*?X†Õ|€rÐüQ†¢<Ô2”›WBq£}`Ê$�oâMRÃýÁügy €T3Ì¬úŠ*ZÃpŒ“¥h]gÐYÖ4<êo�¦ý´õTRb¹?ù$@{rÖÓ–øÿ¡×‚gÑ[Ì¼
À=Œ:á#¾“i‘ïgfYZ* Bxÿ­zCd»‚˜·)¦±lÜ¸qFßš^MSRï¤³Ý+çDÁˆ Zº3i°¬AO€î™á–½‡¬e±GˆÜRÁmü9aÑÃ‘•¥¡i‹i_Þó´7÷aJ.ÿ˜jÛ†{¤mû*m){•¤Òuó0YDc¿õh[ˆM…cZUeÖ„PPÆgä›²šV‡»BAêBoî~€Ü9ƒzC4ã7ƒ\}H�*ha€‚£ÂþÓ£CdÛÂ™Ñ£'|ƒ€ÒikY¶páÂë1Å¿Ž¬L§ï6%ÏP/Åé�Ù’¥MA4X–Pú�¥þ$üL»æl!gŒ¾-Ñ£YDƒï;IµCn¶C­pw†‚öd<NQoQnM²	žTÞÆ+šx# VKFùÞË`2�½¦Ò¶É@lÃÐ·¸—òêÿ _b^¡£Ÿ¡•anH‘Î£WC¦’;ê…�@(ãâ=›\|æÐG…’‚t~ð\†h¥p@¯Þ�Z)$†L‡�§P(®ÄD–„ckjjÃþ¬—Úqa³¹ãŽïöä?Eƒa,˜àHÒçïYÏP„KËzã¥z!¯¤ü.”¾·3Þ™~�ú?ÄéÑÐôÙ…nxæ<J*[MéØÁ]°�J›C œ)F£}ukª-5?3™È3‘Ñ*2lE«F@Cå­i´-qmˆZJ¿~�ÞÙíŠZáZâ7…CDø¨ÿT©•ÂíDk…óCgF�žp… ÒéqØ9¯¿þúU}·¥ë½ºäòµ<‹ïämŒ »ZªépkÃ©¶’FŸ³Â%%®½;óçGN_;áü*žE*Õý’fã÷&B@3‰âŠ? ”Šu’x†û6[‘N/¬KAm¯‘¡‰ôF½Ý[ì�V"åÎÞzêTW‘VßáÖœñýÁÌö„wÐSø$-õ™L/ fø$êƒó½§Ó~Óh¾Ÿ‚'Í8²•"Z@O,�~’
ÎqãÆ�IOO»oÛBKW¶. ùNYÙž’t£Ôã¥TÑ©2Þ9”r�¥†tv»p€�Ý’=à}…B¾ÙÚ~ø@ð&N�Ê;ïEKÅk™ÿ.F“}aC µC9Z¯Œse�uòÁN¸^hA¶«j]6HõÆÌêßè�üÐ`¿}…¯Ð7QKèe¨G_UÐþ˜=ê5Kê)\è'M›!7D‡�ö×
=±GÏÑ®0:íb–aÏ?ÿ¼3ÏV<ö®ØhL*û’úõ’œ�Û³Søu©+éd�7ŽÇ¿ki•.¦Í "äèÐJ=: ¼MÍ\NáY®´/÷ŠÈ~€¢ß£¤ò‘)ˆ¢òæpjîÊ$6®jJMvF‡j½’z4MÄ–W{€üBñeœù9­ùm}±˜^žCÏÎ 'ýþA‹ žY r­�Ç®¹Z�]³]+tè^=Ñ˜.”›C2Å	_WWçùçq`»ù.Ûfû€$`ˆ¿‘Ù}”†z� ¨éŒ]”Uý-dlÖò„úZ@È¸'Xz!–aõ( 8�6:�vgÎ²páÛÌl¡#ð´J_€0õ½Ri[ûŒ]3’=¦5tYÎ+ZSèpÉvŠ/õ§ƒ…[è“}�K \‹ãß© á$zØ—Ó£3h±ßô¾c×ì®ž}Ð¾[€Èa38èõÇÎ�â;äD()·pÍ¥¯z�]®Óp”¯³·¢ÎŽ‹FÚ
�Yý�Eô`ï…Q¸p´PÀ'°39
ä^C©î¼þ_aÔ||Nï¡ý¹ÏPFÕ”[·‘ÛFþü„uh©È'�¾ƒ'Íp–Ãîz¡ÖÐc9/iŠÃã–@4“Ly?"=ú@ø0R¤K1=…;§Ð²ÀY´pçLš·s-òŸ%G…}E36S¤ÿëTºåDžðO§Ý…¯ rHëÂyðíyõíÙãÆâðL7³GÜe6£0éb#JÞC­Åµ‘|I…ùW¦ì-¦#õ›)¦èUÂc‹á§´¥B^Øk!GˆGÞLá�ÒãèQÚLñGîã´7g->¿ŸRfõwÔØ™�h°â™,KD¨ÒªÈD&KšÔ~�V"jÖÕèo-¥�ŒOÉ?õòM[ƒ‘kÒÊ=sh)ëŸÆÌQ/…ÔJ±ÀOai°wœc�á\OÅùFõÃO�‰i,C°]AŒ$yðàÁG±I»ðØ�jSYãnU@òÝ&,7å;h›‚ÞÎi§]é3Qç{)ÏO�“ Ø«k–š”ÕÚ&Ê¯ßJÅ�¾¸èLB
jNSJS¸€á|.¯fºŒ�EÞL!	i å(1bª¨üÐSø<Ú(^¦ìêM”SûU·eð@nRëÚˆMÊjÈ 4@IÊÍú<i¦]U‹ˆðÚ•õ1…eM_ì_N¯Ï@;…-÷ŸIOøM¦‡ÐR!í*üù¾‡x%ü<¹4ñ‚öƒP@O´+ˆhïÜ§Ÿ~úŠòòòïû
Ütz�*«rcWPê=|q8.¤X`°]¾«J¹—ï¢y×‹]¤7{2]p”Ärd'«õn.Üqc×äz¡ôyŒÇçQn²ß3žkÖ\/D¤È{¯�hæYD„OBµ¼µÂÍhÙÙÑL(šìc© ähP«ë<‰UÝlQ§Ì§´ê
ÏY~EÛÞ¢wwÏ¥oÂV}åŽ¯ÁÇ¹»»_ˆãø0+þ?†aÿ ÐÐµ½á/½ôÒ�mmmûvde½ÚCQ£—|1`1Áu}k|6w¼ñõÖèÑ|a‘ÓL×ð¶&-üo²™‚?çNGE3VµÃ‹!¼º7róp|˜~ÏZLÉåë© Þ5½ ªi?ÀÊQ	b­=5GÑd²»V¨²´aÔ´gSmsm!²1ùè­ÝWRR²~ß¾}OÆÆÆ>Ã ¼>~ýúõWã8J†áùðsû¡½€†`�žˆöþ|Txxø"ƒÁ $VÔè�»Ý‡XÕiFƒ1ì„äç¢÷Nøß¹FÈ­;2-m5ÈX „óf
y“ýpÍðØ5"â–^ûó¾ƒ:y3•¡•¢GÝB}õhª­†AhÉCÝÝ@²a„`½R©LÅ±ÇÃ™™™kóòò>,**Z»wïÞù...W�5êÂ6\Ï[UäÔè¹}á'ænŠí
C:Í	¹T­þs¯âZ]DÚó5¸(ðÅ€•Šºœð!½™ÂÇªÉ~GÜ¥ü3À�zá0 ð^¤û§K}‡{s¥”ò� šYIé•Ÿ#z‹¢â†Tˆg
¨KS)Eƒl&YÝ�pÆæ¶{­VÛoÄ¿ß²®®®Ôüüü/~UVVöYPPÐŽáÃä›\==‘æ”kãyRî «l�¯±#K™‚Qe¡®ø$Ü¤ûïH©«û4—;‹£p1mð-iRLœoåi3ˆ�Î¦C« œy‘ájT&@å™AuÑÔÑ[!­hRëÕd0©ÉÚìa+go�=ÒÔÔä»cÇŽ»9êÐs¬g�Q à;Ÿ…-ÙÙÙ+¤i-6Œ{™Ê›#4É¥ë4Rú2á6•¯”ö¹‚ÝVê³�,cÍN`¢¿•;õó;Nv@×ùdŸ›�k×Ïm¾&xÏÍÎ×ïç1úÍö?7_»Ÿ›S?¯Ï©ÿçÖïgÅú¹9ðóh9?þïÂAK½p3Ô£œõqã(•Â³Ü¤i3»2^ ØâwQ+�`f?ÕvDñ$K-‡—wBÅÂÿÏÞUp7®cá.3333ócæ÷Â2Ó¡ežR†¡4¸PffH!I!�ÃXŠcÐ~ŸÆ:ã<f´Ï¹±*é¢d]§ÑÕµ,Kö�D"ÕxÆ_ç9=ï4îáø ¯ü^<¿hŒÀ-¿LÓÜá=mÚ
ü±Ð€0„úá+ô}_,0é(��â·?n`Aî5g—ç;T¾<ù°W;1€¨ão&nPéjdìô}w|ª¾\8èXùöÌ„ÀÝ£îC±â�uìG™˜Ž¼Èƒô%'7á—r°�8Ä¥lÎÂE(;<ÔÛ|ðÉ_ÅˆI�\<È�õ.<ò ìì«dã�tØGÉF¸¬?Êì£d#®Ò™vReÚ—tˆ§v×ª¾Š‡’�²¨2í l¬ú¯ÒÉšÀ6ÚHÙŠ»•�ÉŸqqÔ“ø<xÀ5Ž.ÙÞ|is“kl”�‰çæA<êR>þïS²�²±�ü9®¬ðèKhç¸±¯´›3Žîñ �Êe{Ù\‘sšã}ÕØ�Ë¬'-ŸÃƒxÔƒ6§lJ…çž�ûÛ_N9	ÈFñ<ù³�¯ûCbWKûã¹úº	jD†ŠÄÄN¬ýULNçÖ}FzÃ_BL­ÉókÕ7Bø·ûs„|n7¸¦Ïé¹ÀszÞ¿:‘‰áÍõõõ×áíð¸eY; ýþœ_,7dú#Çôæ¡ßö,ý Ùµ¿%€Sƒ_´›Æ®á�÷Ì¾.ö†¡²>Ü}½ïäÛ­\°Ž~
}®”}Oö=[?üû@Ç+å�SC_à"Äðàp'èG·°sÎªìz½<”˜N—‹C#N|Æ¨ê|³unü6‹oÑÈó¼ëåÛ÷	ò¾n‹tAßj½$[ãØÕÀû´\¨š†oÎ:»Pí³·Èº“ÛàÂCÇ}ªÿª,Â2ìƒ¯gÆo”ü©kãèÕrq<Öûéö—°€3Ú&éGø”YÓõãìØ-ºÚ$Ñ�¨ÿ±þ�Q¶ž„S?te©~øJ›3m<êÙnÉÑíû˜ufìF‹	yŒô�wŠºÁëÓÐßÆ.CÐ½Áfìõä|¼÷ù3£7•]¯…Í¾AÙ¸Ørlx¾¥åë~_vÓ¹…ÿØÀÇÄØeÚöººx°óµàu­U?ò5êJº´)Æ†I†oà‹qü,xßÈqvBX¾&‘wÿÍä!�dÓøÍ˜ŸGhoð€Œ°ó×!Óõt.¸_#õöA§F”�öãôÈs§¤u<8¦t©9=x�pnuC_¦­ØN¹c
n§CÞ—QÕQ÷U=('úÝY>z	oüVž6D<ÒpœÓ•è{�À|ƒÎ7À]AýÙÎ²Qþ4æñÝœŒEåîNÊÆ1‡¾GúÔÝÆ´JsÎyi7ŽyÝÈít’h»}n|.€‡ú¯Ò1Ã¶×8ŽþƒVæ,ËgGîÈ7OKghÐh`O<˜8kö~*Vã½Éb©P*qW"‘8Q�‚çô<§çA¹ã{àüÜÚÚÚäßë€ß,Þ[ÑBÁù9p-ÝbN¯ïµcù~¹	†g!F²]2H}|É·Ï�—¦Â»÷tAÄòbj}7·|£ï9c4´'™ÊÏç£G°sô°ˆç‡„¡KñSb%ÞR˜\Ù»£¥û‹‘l»˜^ßÃßA?ûE(Ú¡ÍEjí`¬©”Úœb�LSÍ÷¡¼O,¬þ7Öìz••,ŒŠ@¼AÒŽæúÄøMŽ‡â¹Qtíp¦EÊ6<ò ž=:Ktîh¥<ñÂ‚ïH9W“­›“«û7WíÙPü‚�md ÞY1þ¥î˜_ó™‹ZÝ†–éÕ�GÛ@¿A1µöO±n_†<Æt¸J�¤{‹�x�˜‹TJÙüZ­˜	5Ã©®í™ð>k%ù=šë“kát³ÌR>òiZf,�rìÅè	ƒ™[ˆÕ‰µTûÎÔêÁüz²?KÏFªíXn@ÒFkñ¾¤?rÈÆÎ´ld«„>E,×/�îJlŒ‹`¼z£ÎR÷íË�±Zh¹nÐjsZµˆd:õž	ïZ¦KŽñròœÀ7ô©áL›ÈoÅRìdo…~=bó‚ò2É,Ç�Yú©?õfyöåhÙ^ÉoxÌ¶Ïñ'^ tåxäG>p:Ÿ$úVá7³:Ø¹zTC–Ði•v‰Ê¹ÙˆCÏk`¿AÈ^gE™`c9WSíb €qJAžzÊ=¦y'ðÅýtèáT§à¼À¸@ÿNÎyÔ šuÐÿ,Â&‰Ãù€úi)Û`ðh7‹™È!à÷�g³£ó¨›ÞÅ#�w¤äÇœ^M6ë‰Â�ð£�í?öH`W"–›ÍsLO®èFÖ6Ì-qW,;R�‚—@ÖszÜw8ÃK ¯­¬¬üš¦iG¸KL<ðUæ-[wÕ™êTÛvþ0¬¡.>¬¬Wøå»ØˆWTß.Ñ·¨Êi¥íK|�Ëx®v½´U$íû9tô‹–’�xnšår|Õ¾MÙt'!¯‰>Æ½h†#[IéO�]ÛØ·‹—yëVy©³©ÒA�Ÿíæ­.¶“¸KÊ#ëÅr¸eÛqÉf(<u¹éQ}¥ÿ{ÙeåGOã�ÛíGÌC<"÷õ]ùü×ÝóÍý\”m8{ Ëï÷ÿº/—žçô<¸oÇ÷\À� ××ñ�jlƒþ'·FóØ¼Ë»¼ë)íÚµëKø xNÏsz<°ó{žãü^NçW[[{b�~ÅàXÉnmm-[–U|œ^¿Ë®§�§¿lOyŸn×£×0	¬L>›ˆÛû=ãqÝ»7ÿh÷à	…o{Nåiëü^ÊÉhß‹�žßšœœüa(úg8æ¿@#€u8Ä1<l[†aäœC­m|C\AY¦^Ç}3Ì,…BÁošf� <>¬hÄÙ—íÀ[%.ñr¹ÜÚb¨·€7ú@õÓlg?8á€SƒG„¼Ñ>…~Y. À›¯mx,±8K
uÄSr¢ßÓ0�Æ$ëØÆzUŸ5ÊLìÇÍ?�ëÙ—/Šî!è¡A“¶¢êD|êäð ž~ö'é‚§F™Yf_Ò�q¥?ñœò2mL�ÙNýyàMS'þM»qÌž>ãå�—CwÁá›l‚Æ*úè ]‰ò_ÐÖšN§ë@oöÿìZ3›]üR§‰ñb4±mÛ¶mgmÛÞæÙ¶í?³3ëv»Å=Ï3ïú*ŠS§OŸ^:|wöEA™5îf.D³W­Z5·±±q9¾/üöíÛ*lïJ¥ÒãÐíN¥RŸ°Ð�ÓjµptøúÝ»wëý~ÿÃ`0ø´®®n7>Ÿ¹Ýî{½½½G`‹£È=ýýý‡ãñø|CÜE|¬½�@à±Ùl¾ú÷ïß�ôµX,×¨O&“ïúúú‘'¿fl·‰ÄçîîîCä okkëâò;xög2™_*•ê"sCÎÏKJJ¶âós+--Ý‰DÞy½ÞÇÄcîà8ªV«Ïã=óÎupÎí‰Ýn¿N\ø¾±Ùl7©Çö �œÈíí‡ã.}šššö�ï%1;::˜Û;�FsžØÈí»D"9e0®°_EEE[�Ïs�Çó ;;{3ë ßæý‹†††]F£ñR4}E>ðß"^MMÍ.æF[KKË^ÖÁzÉ‡Ü¾TVVî@÷§Î¼„y±§˜Á#äòI,Ÿw.üòñ»½¸üû÷ïöÎ@³a ŽÃkÛnÛ¸¶Í²10è #Œ &yˆ½I"°×ö
{–îÂÿl®cËßÇ§?îþI{ç%¹û¶mc]÷TÅ�¼—óLÖ- üÁ¸Ô®da]h/£(ÚÈß¡*ÏsWr¯Žã¬MÃpkrš¦W&»®«Lîë›$ÉÎªS�ríïµ*ŽcÇ´—eymÚ-U§çy[Ér�ãkôÕKûÑ÷ô}c×ì÷ûµU§~0n*‚ÝÀ=¤Ÿ5~ÖX‰Ì×´æK‰›ªªn²,»­ëú¡išGyåØVÖá¹¬É%À8ÌÄ¹åÂäraüeé7\?òo˜�í$ç‹ùZ˜“ô&¼ÒŸ§b——gîM  €Ù—              # Íï´¯ÚwíÁ²‘¶“©‹ˆøòöü¡=|²wÀ®3a ‡_·º·ºÕ-nácq‹[ÜêvÜâV·¸í÷Â¡�Ù6›¯÷Îíä�Çv¦µßlößñÂ%MiM¥rOSŠCšS©liJ×ŸâŸþs¿A+;liHœ˜èM©ì°¥!Å×*œÏÜÓEôþ_ð–T:�)€½%•Nã“àm©tXÓEôø�W9è+p"¢7¦rÐWŠÊ#•–ýDoK¥²VA»5Æ-)> €_ÑÛR©¬UÐn�qËÎO¤S5îÞŽ¨èõoè˜Áµf„— 'ˆÞÐŠOÇŒð’â×Úã®áœb?Ñ›»4£aK¥2¤ 8AôæÆÆ’è˜)Ò%•ZºvlœYSì'z?©T¦kk<À	¢÷ÓúÙ°>{ù›¯g™[ŠýDïÑ±û‰£ˆÞ£3z÷'ãÇÎˆ];"ÙAôÆK*•9ÅI¢7vm˜ŸDï‘¢¡õ/¢wÎ™€™žèYÓ°¦'zvoØ½ÙÁ9½m÷9= çô¶7ŸÓ›Dï-ëzndD¯#>GodÝÈò9wonUÏ ½1•¶7ß½9§ø“¼²`-½£¯,o~e!þïéÝRœ zýïéÝÞüž^ˆÞx9½Ï}9]ô @ô @ô @ô @ô @ô = = = = = = = = = = = D D D D D D D D/}OéžJeKSR¼°¤Rù�½3:’V¢ð¤0)�‚)�‚)�)˜‚)˜)˜‚)L÷ÅªÿÖ–~Õ¦KÖåá<lí
lÓÝ â™Ö½Üð£ŒÈÏ™”¡=ÙØæøïoPïÝF?ŸßŽê�¶¤oüßR_@ÛO”ž)¢Lð÷q¯ëÈ¾Ëþ»·C[ËÁ3é¿d?hëäS,ÍÆ¬´÷+Ùb`›Kz(ìõ­�Ûþõ÷ñl·Ásõ„bº˜G)@Y¹èAb„¤úHè±Vƒ)‰|Nj<*4ïå´=»�b
¤Û˜ËÜ.úYrƒØþÇÐ¡÷\èì ¨‰TÔÔôvEq–÷ />WŒ‰yªhóÐ>ôH1åmã]CE;è-bK‡Þ3¡7@²¶j† Uƒ^gywAoð…ž 2 ¤ƒÿ|v4=P §(zÛx×¦æ‡™žK}¦÷@è±ƒ.� �€džeš�*Nh†(
³<z½¡ïF‡úXö%ËÍ°Ì— Éæƒz°ûû&èÙ—ü`/Ó1¦¼l<X|rÿyºeÀpÒîõ –~îõÍ}Oï™ÐË 0L¶”à„DÙ1›�^1·Çz+õ�'ô@³�hË…Ã@A÷å›¡§ûúË!¦<m<ÂÊ”Kàgè	q²ÐÊ×þû@uC{W‡Þ&$Í%5Ñ"(n€(’´7ôfÞ·¹záÄK?í™ÈîÂ¨~kzìë¬ú˜ò·q„Ó¤X¾ôŠ=VP›ütèyk Ç�y ô
$IH¤nÐËÂžãì¼Ÿg±GfA¿*vŸ¦YF‡ž«�íƒÀ¼ÛÐzà�à›Wá9vèý2èÁ2DMr[¿¸SZ€ÞIÛFðy—ôŒ¢ß-@ftÖ„µVÎJ?Ð_-@/éÀ©�)3hNâ6z@OðÇì0Ÿ@¾C¯yqðmµÏ_
P>“[€ÞIâÛ Á	zß	z¬$žøåƒ.,~þ~è©¾þrˆ)GÃ šµTC�ÁW.žJ�œs°Þ½>ÓcÁ¡˜V Ožýœ´A‡ì•Ñ‘ñ[ ÇÚÄþ}ÊLOóuVuLyÚbuÕÞ%Ô¡Çé‚½ä^O}O¯{z  û¡g}w(8@�–gbíÁQQ{![ßo‚:˜�Þ =yo¨6¦ümÌJ†¥Ïà =º’¬W#¢}0Ø¡×OoÚõ�$p7ô¢e¹Îz+Ùúvè±Š0³ñ<Y8
³Ù¶E‡Þf´8Ä”›�w¥Š+G	z·(ÞHµ>TzI‰é==Væ:ï‡ža¶ ·Pÿ4=ýÐÆæôÙÛ<€àøxÐ;°bÊÓÆ‘îæ5@,9½²0[&œÑuèÑL¢À�,>·€´½H³¼/Co¢ºž=>qñ¶�•gŸXn"ûYÖ&/þ6.''"ƒ ±z¯óXÃIÿ”{-¿Vz@&\fû\èAÒ_†^û�—[uèU^„ RŠ‚½åÝ =ÇÊò¶šƒ,«ª¼š”;ôúWþ
ô¢¡ÞZè•=·/ ð,‡5Ú!jNÂëÐó²ñPé»±zœ'Äåç¡ß½Ù¿§×
=z¬=èéßz›.”»	‡N4èñßæ çiã‘Ëcû:¼œ>é±ó¬™^‡Ce†¢W€vèuèAbÎðõ€š½­É=ñóvèq_øÇÔ6�KÈ¾õÐãW&6úÒ<ØæóÜ=½½ÿØ±‡�(ŽÃY‹½Yr«½NA�”´g)@�ítHQ…yýð dþ? ˆ ˆ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢€è€è€èÀgˆ ˆ ˆ ˆÞy÷7VsµT¥! K5WCÕ½�oùÐÿËþ·¬‡¾Ü�?¥œ:€fÄn­S_bÇbÏÄKô^âG¹5;€Ø±gøF½-ó:õL
@\¬b×Lô¶\�4�L§ÎØ5Û"z
�ID/tˆžè¢‡èˆ¢ zÙˆ€è!z ¢—�èˆ¢ zÙˆ€è!z ¢—�èˆ¢ zÙˆ€è!z ¢—�èˆ¢ zÙˆ€è!z ¢—Œèˆ¢×º{çyä8Dá‰F�(
å ‚2˜æ÷™ñÞû©«õÞ{//š›§«^«Æby]´z]…3+Â<`Ù$€ì¤–gwgóìÝE>ÎRüv™~V®Ñ,[ÓóÙ—Ÿ¾l»’çÝj~´×”Õ7¸Fé´¿ëõXv£©h*PÚ‹1¼ÚPô–¯…Ð#ô½Sv¥1r¿bÙÓy@ä‡²ÒÕ™<¹­;“dÕÝûò"Ñ'€y{¡æM?ÞÉ{ëÔQZß ŒTiSÖy�2ôúlx½‰~±­C xE�_	Z"L„¡GèeûUý)ß?8­Á-Ý™–}ÚfP^dúPFúpNÞ%`Ú›Uä÷vœ}¨%o.Ô6Wôú,lp­‰r­ëPÆ¯,-Ñ%B�Ð#ôÒãZž[6ŽåÓ & ôâ×—ÞhêåZy{¯–÷—x„ž¥áa#[›Zèz„¡—îUÍ€ –œ×áX@/~} °Ë:ç�¼·„²%¡gméE}¡Gèz„·ëý–8»î�Ù¼uXÏ?ü9“w®4Gÿ¯Y÷¢zëó pï²Þî¢ o²¡÷þ²/?þåŸ>ý=#Ñmá:0~ŸÖ«?´Wó—;¨§T-„¡GèE�Ò;î§[8ÜÀ�…™Qô�ÿnÏÿws÷Ís}ÿîÜ7N; ô¢Õ‡¯0³�wtà]–�v$¼	‡ú	uú&”ý=ì‹Ô�1D?~ZªäÉ‡ñý�[ÐZªB�Ð#ô§t«‚›_¿Ñ¯4GÎ71nàlíK‚ÃÀŸžï|ï´ƒB/&}(Ñ…fß—=ùÐSê+A“Dà€¢rÍ’£š©®Óc"ô"ŸÖLîÌvÂRœ ®ëÝœÍ;+üø¯7#Ôçˆ8�Œ-Û7zzÞÞZEÍ;<Å{YB�Ð#ô¦z)œÛ=òèìÕÄÁy9J<Uï´CB/&}é•†åÒBÏ¿Œ›ž—Ð#ô½©�œ¦þÔÈ£÷‹/áq­\zñèëÖr—éK=‹:ˆô=B�Ð#ôöªú´Ï‹qnÅShèE¢»˜¸¬PC¦m±° K°öÑüïÏðŸ†Þ÷;U@¯-Á¡GèzÃ]Ïã‰R¡^Ÿ¿a«1BO"ð=CèÉ‡LÝê a—¥…Ð#ô½€±v~WèÖWÀF¹z3“wÂˆ²°y´<XÿÞ\yZ=B�ÐŸúëgô1ÁÐ¯¯€¥ÎÈ€Ð³¶îVÕ|çB�‰Ð‹8˜â±Ÿž	½ðú
­ëN’Ð³4,?‘©MB�Ð#ô¦zp^ø C³ä6å�Lè…×§¬ÅÃ"wóiNÛ­´°�×ðuùÛ�µæ1fö woóV¢–ð‰Ð#ô¸d¡ïv&Ø”×ÿsþW;8o.èÅ¢O`ÑZ®`»3ÀÏxšÓv+­ÞR�mÈ”…ùvÐCÔß9k¨Øk!ô=B/ª$»U¸¦ ±Î-sƒ¿ã¨9¨N;0ôâÒ‡ú±øÓihÅ»¸º&×éµÞI}ð¸N�Ð#ô¦f2ÜÈx¿ñ3Ë°#ýÕÆ·ùo4ñçãO¨Þ®„^\úÚ»_Ÿ#!’êMsz˜vôžžÅØa¡Gè$Bob£½Î‚L¹™"#€!ôâÒ÷ýû£Ä£Mˆ@Qz>ý;æ„…ãz®Yª¼Ë5ÐBè1z“òA¦ß²�ý!«¦ïdÞ]øŸ_XŸÞi“Á4gÌÐ3ç¢š$š*`é±þnÖ^¡GèE—xˆ,žŽ±¤Pž´õCV‹ €²ü�`x}h
OsNôdœÿ�&´±{\÷XR®B�Ð#ô"Irö""¼)jÈÛÚ¨Â¡£LSgGœøC/¼>½=Å§9§ z2Î…4éÑžò@Q‚B�Ð#ôâÖu®4GÎ×à¸ÛgäE„ðÐ«Oo�ý4'¡§LÛû-!ô=Bo
 §šŠ�°¦¬}XÇ©ápúc£üÖÚ©�`ÐÓÏ›½0úôöØOszÊ´}ÿÑ¼{šs»b …Ðc"ô&>êƒsƒCÆ\k~ü®øMWE=Âd�¯x’¯ ]åµçá´Ãëóo~«»{x0kÓ7hÏø¶ÈÂnw}6ãl¡)Ñµ <™¦.M¡Gèz‘'ùP#Aâ›'$êòvÆ’¿H’úP—^ž\�¾Ä \Àµo®‘þÐÇÀplõ:4á7É«×U®B�Ðû·ûDˆ%ˆÂ0Ú/�aiÃªf82
Gèñã�(‚E‘uqdZöåˆã'þ_W‰€è¥ zd¢‡èˆ¢ zÙˆ€è!z ¢—Œèˆ¢�-zˆ€è!z Ù¢‡èˆ¢�-zˆ€è!z Ù¢‡èˆ¢— zˆ€è!zi ¢‡è�í,”§Ñ”€Ø³ØµªéŽôoðd{®<ü÷gIˆ=‹]«šîHÿÇ+Såro¦<öü´;{»V5t—þŽ–&®�·fâ‡OH½¼ê\iÆ~ÅŽÅžÕ]»©ºûo²­Êxu*®^îÂ/vz#v+ö+Nw¼Ð
˜è}fP€D&z_V �¡x‰ÞO,Vmu[€¹­Ú·'<D D žk:T94    IEND®B`‚PK     ’ŠU]¹ÂœÐI ÐI "  assets/admin/js/generalSettings.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[466],{6116:function(e,t,a){a.d(t,{A:function(){return s}});var n=a(8110);function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}const s=(0,n.map)((0,n.entries)(rankMath.choices.postTypes),function(e){var t=r(e,2);return{id:t[0],label:t[1]}})},7240:function(e,t,a){a.d(t,{A:function(){return n}});const n={"-":"-","&ndash;":"â€“","&mdash;":"â€”","&raquo;":"Â»","|":"|","&bull;":"â€¢"}},1895:function(e,t,a){a.d(t,{A:function(){return r}});var n=a(8809);const r=function(e,t,a){return'<a href="'.concat((0,n.A)(e,t),'" target="_blank" rel="noopener noreferrer">').concat(a,"</a>")};a.dn(r)},2551:function(e,t,a){a.d(t,{A:function(){return l}});var n=a(4011);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function i(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e=e?"rank-math-"+e:"rank-math",t=s(s({},t),{},{page:e}),(0,n.addQueryArgs)(rankMath.adminurl,t)};a.dn(l)},3118:function(e,t,a){a.r(t),a.d(t,{default:function(){return ut}});var n=a(2470),r=a(8809),o=a(8110),s=a(1895),i=a(2551),l={nofollow_external_links:!0,nofollow_image_links:!0};const c=[{id:"strip_category_base",type:"toggle",name:(0,n.__)("Strip Category Base","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Remove /category/ from category archive URLs. %s <br>E.g. <code>example.com/category/my-category/</code> becomes <code>example.com/my-category</code>","seo-by-rank-math"),(0,s.A)("remove-category-base","Options Panel Strip Category",(0,n.__)("Why do this?","seo-by-rank-math"))),classes:"rank-math-advanced-option",default:!1},{id:"attachment_redirect_urls",type:"toggle",name:(0,n.__)("Redirect Attachments","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Redirect all attachment page URLs to the post they appear in. For more advanced redirection control, use the built-in %s.","seo-by-rank-math"),(0,o.includes)(rankMath.modules,"redirections")?'<a href="'.concat((0,i.A)("options-general"),'&view=redirections" target="new">').concat((0,n.__)("Redirection Manager","seo-by-rank-math"),"</a>"):'<span class="rank-math-tooltip">\n\t\t\t'.concat((0,n.__)("Redirections Manager","seo-by-rank-math"),"\n\t\t\t<span>").concat((0,n.__)("Please enable Redirections module","seo-by-rank-math"),"</span>\n\t\t</span>")),classes:"rank-math-advanced-option",default:!0},{id:"attachment_redirect_default",type:"text",name:(0,n.__)("Redirect Orphan Attachments","seo-by-rank-math"),desc:(0,n.__)("Redirect attachments without a parent post to this URL. Leave empty for no redirection.","seo-by-rank-math"),classes:"rank-math-advanced-option",dep:{attachment_redirect_urls:!0}},{id:"nofollow_external_links",type:"toggle",name:(0,n.__)("Nofollow External Links","seo-by-rank-math"),desc:(0,n.__)('Automatically add <code>rel="nofollow"</code> attribute for external links appearing in your posts, pages, and other post types. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.',"seo-by-rank-math"),classes:"rank-math-advanced-option",default:!1},{id:"nofollow_image_links",type:"toggle",name:(0,n.__)("Nofollow Image File Links","seo-by-rank-math"),desc:(0,n.__)('Automatically add <code>rel="nofollow"</code> attribute for links pointing to external image files. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.',"seo-by-rank-math"),classes:"rank-math-advanced-option",default:!1},{id:"nofollow_domains",type:"textarea",name:(0,n.__)("Nofollow Domains","seo-by-rank-math"),desc:(0,n.__)("Only add <code>nofollow</code> attribute for the link if target domain is in this list. Add one per line. Leave empty to apply nofollow for <strong>ALL</strong> external domains.","seo-by-rank-math"),classes:"rank-math-advanced-option",dep:l},{id:"nofollow_exclude_domains",type:"textarea",name:(0,n.__)("Nofollow Exclude Domains","seo-by-rank-math"),desc:(0,n.__)("The <code>nofollow</code> attribute <strong>will not be added</strong> for the link if target domain is in this list. Add one per line.","seo-by-rank-math"),classes:"rank-math-advanced-option",dep:l},{id:"new_window_external_links",type:"toggle",name:(0,n.__)("Open External Links in New Tab/Window","seo-by-rank-math"),desc:(0,n.__)('Automatically add <code>target="_blank"</code> attribute for external links appearing in your posts, pages, and other post types to make them open in a new browser tab or window. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.',"seo-by-rank-math"),default:!0}],m={name:"links",header:{title:(0,n.__)("Links","seo-by-rank-math"),description:(0,n.__)("Change how some of the links open and operate on your website.","seo-by-rank-math"),link:(0,r.A)("link-settings","Options Panel Links Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-link"}),(0,n.__)("Links","seo-by-rank-math")),fields:c};var d=a(7240);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function y(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function _(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?y(Object(a),!0).forEach(function(t){p(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):y(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function p(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var b=rankMath,f=b.hasBreadcrumbSupport,k=b.showBlogPage,g=f?"":{breadcrumbs:!0},w=_(_({},g),{},{breadcrumbs_home:!0,relation:"and"});const v=[{type:"notice",status:"warning",children:wp.element.createElement(React.Fragment,null,(0,n.__)("Use the following code in your theme template files to display breadcrumbs. ","rank-math"),wp.element.createElement("a",{href:(0,r.A)("breadcrumbs-install","Options Panel Breadcrumbs Tab"),target:"_blank",rel:"noreferrer"},(0,n.__)("Learn More ","seo-by-rank-math")),wp.element.createElement("br",null),wp.element.createElement("code",null,'<?php if (function_exists("rank_math_the_breadcrumbs")) rank_math_the_breadcrumbs(); ?>'),(0,n.__)(" OR ","seo-by-rank-math"),wp.element.createElement("code",null,"[rank_math_breadcrumb]"))},_({id:"breadcrumbs",type:"toggle",name:(0,n.__)("Enable breadcrumbs function","seo-by-rank-math"),desc:(0,n.__)("Turning off breadcrumbs will hide breadcrumbs inserted in template files too.","rank-math"),default:!0},f?{force_enable:!0,disabled:!0,desc:(0,n.sprintf)((0,n.__)("This option cannot be changed since your theme has added the support for Rank Math Breadcrumbs using: %s","rank-math"),"<br /><code>add_theme_support( 'rank-math-breadcrumbs' );</code>")}:{}),{id:"breadcrumbs_separator",type:"toggleGroup",name:(0,n.__)("Separator Character","seo-by-rank-math"),desc:(0,n.__)("Separator character or string that appears between breadcrumb items.","rank-math"),options:d.A,dep:g,addCustom:!0,default:"-"},{id:"breadcrumbs_home",type:"toggle",name:(0,n.__)("Show Homepage Link","seo-by-rank-math"),desc:(0,n.__)("Display homepage breadcrumb in trail.","seo-by-rank-math"),dep:g,default:!0},{id:"breadcrumbs_home_label",type:"text",name:(0,n.__)("Homepage label","seo-by-rank-math"),desc:(0,n.__)("Label used for homepage link (first item) in breadcrumbs.","rank-math"),dep:w,default:(0,n.__)("Home","seo-by-rank-math")},{id:"breadcrumbs_home_link",type:"text",name:(0,n.__)("Homepage Link","seo-by-rank-math"),desc:(0,n.__)("Link to use for homepage (first item) in breadcrumbs.","rank-math"),dep:w,default:rankMath.homeUrl},{id:"breadcrumbs_prefix",type:"text",name:(0,n.__)("Prefix Breadcrumb","seo-by-rank-math"),desc:(0,n.__)("Prefix for the breadcrumb path.","seo-by-rank-math"),dep:g},{id:"breadcrumbs_archive_format",type:"text",name:(0,n.__)("Archive Format","seo-by-rank-math"),desc:(0,n.__)("Format the label used for archive pages.","seo-by-rank-math"),dep:g,default:(0,n.__)("Archives for %s","seo-by-rank-math")},{id:"breadcrumbs_search_format",type:"text",name:(0,n.__)("Search Results Format","seo-by-rank-math"),desc:(0,n.__)("Format the label used for search results pages.","seo-by-rank-math"),dep:g,default:(0,n.__)("Results for %s","seo-by-rank-math")},{id:"breadcrumbs_404_label",type:"text",name:(0,n.__)("404 label","seo-by-rank-math"),desc:(0,n.__)("Label used for 404 error item in breadcrumbs.","seo-by-rank-math"),dep:g,default:(0,n.__)("404 Error: page not found","seo-by-rank-math")},{id:"breadcrumbs_remove_post_title",type:"toggle",name:(0,n.__)("Hide Post Title","seo-by-rank-math"),desc:(0,n.__)("Hide Post title from Breadcrumb.","seo-by-rank-math"),dep:g,default:!1},{id:"breadcrumbs_ancestor_categories",type:"toggle",name:(0,n.__)("Show Category(s)","seo-by-rank-math"),desc:(0,n.__)("If category is a child category, show all ancestor categories.","seo-by-rank-math"),dep:g,default:!1},{id:"breadcrumbs_hide_taxonomy_name",type:"toggle",name:(0,n.__)("Hide Taxonomy Name","seo-by-rank-math"),desc:(0,n.__)("Hide Taxonomy Name from Breadcrumb.","seo-by-rank-math"),dep:g,default:!1}].concat(function(e){if(Array.isArray(e))return h(e)}(E=k?[{id:"breadcrumbs_blog_page",type:"toggle",name:(0,n.__)("Show Blog Page","seo-by-rank-math"),desc:(0,n.__)("Show Blog Page in Breadcrumb.","seo-by-rank-math"),dep:g,default:!1}]:[])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(E)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?h(e,t):void 0}}(E)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());var E;const S={name:"breadcrumbs",header:{title:(0,n.__)("Breadcrumbs","seo-by-rank-math"),description:(0,n.__)("Here you can set up the breadcrumbs function.","seo-by-rank-math"),link:(0,r.A)("breadcrumbs","Options Panel Breadcrumbs Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-direction"}),(0,n.__)("Breadcrumbs","seo-by-rank-math")),fields:v},A=[{id:"add_img_alt",type:"toggle",name:(0,n.__)("Add missing ALT attributes","seo-by-rank-math"),desc:(0,n.__)("Add <code>alt</code> attributes for <code>images</code> without <code>alt</code> attributes automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.","seo-by-rank-math"),default:!1},{id:"img_alt_format",type:"selectVariable",name:(0,n.__)("Alt attribute format","seo-by-rank-math"),desc:(0,n.__)("Format used for the new <code>alt</code> attribute values.","seo-by-rank-math"),classes:"large-text rank-math-supports-variables",dep:{add_img_alt:!0},exclude:["seo_title","seo_description"],default:" %filename%"},{id:"add_img_title",type:"toggle",name:(0,n.__)("Add missing TITLE attributes","seo-by-rank-math"),desc:(0,n.__)("Add <code>TITLE</code> attribute for all <code>images</code> without a <code>TITLE</code> attribute automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.","seo-by-rank-math"),default:!1},{id:"img_title_format",type:"selectVariable",name:(0,n.__)("Title attribute format","seo-by-rank-math"),desc:(0,n.__)("Format used for the new <code>title</code> attribute values.","seo-by-rank-math"),classes:"large-text rank-math-supports-variables dropdown-up",dep:{add_img_title:!0},exclude:["seo_title","seo_description"],default:"%title% %count(title)%"}],C={name:"images",header:{title:(0,n.__)("Images","seo-by-rank-math"),description:(0,n.__)("SEO options related to featured images and media appearing in your post content.","seo-by-rank-math"),link:(0,r.A)("image-settings","Options Panel Images Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-images"}),(0,n.__)("Images","seo-by-rank-math")),fields:A},O=[{id:"google_verify",type:"text",name:(0,n.__)("Google Search Console","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Google Search Console verification HTML code or ID. Learn how to get it: %s","seo-by-rank-math"),(0,s.A)("google-verification-kb","Google Verification Tool",(0,n.__)("Search Console Verification Page","seo-by-rank-math")))+'<br><code>&lt;meta name="google-site-verification" content="your-id" /&gt;</code>'},{id:"bing_verify",type:"text",name:(0,n.__)("Bing Webmaster Tools","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Bing Webmaster Tools verification HTML code or ID. Get it here: %s","seo-by-rank-math"),(0,s.A)("bing-verification-kb","Bing Verification Tool",(0,n.__)("Bing Webmaster Verification Page","seo-by-rank-math")))+'<br><code>&lt;meta name="msvalidate.01" content="your-id" /&gt;</code>'},{id:"baidu_verify",type:"text",name:(0,n.__)("Baidu Webmaster Tools","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Baidu Webmaster Tools verification HTML code or ID. Learn how to get it: %s","seo-by-rank-math"),(0,s.A)("baidu-verification-kb","Baidu Verification Tool",(0,n.__)("Baidu Webmaster Tools","seo-by-rank-math")))+'<br><code>&lt;meta name="baidu-site-verification" content="your-id" /&gt;</code>'},{id:"yandex_verify",type:"text",name:(0,n.__)("Yandex Verfication ID","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Yandex verification HTML code or ID. Learn how to get it: %s","seo-by-rank-math"),(0,s.A)("yandex-verification-kb","Yandex Verification Tool",(0,n.__)("Yandex.Webmaster Page","seo-by-rank-math")))+'<br><code>&lt;meta name="yandex-verification" content="your-id" /&gt;</code>',classes:"rank-math-advanced-option"},{id:"pinterest_verify",type:"text",name:(0,n.__)("Pinterest Verification ID","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Pinterest verification HTML code or ID. Learn how to get it: %s","seo-by-rank-math"),(0,s.A)("pinterest-verification-kb","Pinterest Verification Tool",(0,n.__)("Pinterest Account","seo-by-rank-math")))+'<br><code>&lt;meta name="p:domain_verify" content="your-id" /&gt;</code>'},{id:"norton_verify",type:"text",name:(0,n.__)("Norton Safe Web Verification ID","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your Norton Safe Web verification HTML code or ID. Learn how to get it: %s","seo-by-rank-math"),(0,s.A)("norton-verification-kb","Norton Verification Tool",(0,n.__)("Norton Ownership Verification Page","seo-by-rank-math")))+'<br><code>&lt;meta name="norton-safeweb-site-verification" content="your-id" /&gt;</code>',classes:"rank-math-advanced-option"},{id:"custom_webmaster_tags",type:"textarea",name:(0,n.__)("Custom Webmaster Tags","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enter your custom webmaster tags. Only %s tags are allowed.","seo-by-rank-math"),"<code>&lt;meta&gt;</code>"),classes:"rank-math-advanced-option",rows:10}],x={name:"webmaster",header:{title:(0,n.__)("Webmaster Tools","seo-by-rank-math"),description:(0,n.__)("Enter verification codes for third-party webmaster tools.","seo-by-rank-math"),link:(0,r.A)("webmaster-tools","Options Panel Webmaster Tools Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-toolbox"}),(0,n.__)("Webmaster Tools","seo-by-rank-math")),fields:O};var P=a(1386);function T(e){return function(e){if(Array.isArray(e))return N(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?N(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var j=rankMath,D=j.isEditAllowed,R=j.robotsData,I=void 0===R?{}:R;const M=[{type:"raw",content:wp.element.createElement("div",{key:"robots-description",className:"rank-math-desc"},(0,n.__)("Leave the field empty to let WordPress handle the contents dynamically. If an actual robots.txt file is present in the root folder of your site, this option won't take effect and you have to edit the file directly, or delete it and then edit from here.","seo-by-rank-math"))}].concat(T(D?[]:[{id:"edit_disabled",type:"notice",status:"error",children:(0,n.__)("robots.txt file is not writable.","seo-by-rank-math")}]),[{id:"robots_txt_content",type:"textarea",attributes:{"data-gramm":!1,readOnly:I.exists||0===I.public,placeholder:I.exists&&I.writable?void 0:I.default,disabled:!D,variant:"code-box",rows:10},classes:"nob rank-math-code-box"}],T((F="",I.exists&&(F=(0,n.__)("Contents are locked because a robots.txt file is present in the root folder.","seo-by-rank-math")),(0,o.isUndefined)(I.writable)||!1!==I.writable||(F=(0,n.__)("Rank Math could not detect if a robots.txt file exists or not because of a filesystem issue. The file contents entered here may not be applied.","seo-by-rank-math")),F?[{id:"robots_locked",type:"notice",status:"warning",classes:"nob nopt rank-math-notice-field",children:F}]:0===I.public?[{id:"site_not_public",type:"notice",status:"warning",classes:"nob nopt rank-math-notice-field",children:wp.element.createElement(P.RawHTML,null,(0,n.sprintf)((0,n.__)('<strong>Warning:</strong> your site\'s search engine visibility is set to Hidden in <a href="%1$s" target="_blank">Settings &gt; Reading</a>. This means that the changes you make here will not take effect. Set the search engine visibility to Public to be able to change the robots.txt content.',"seo-by-rank-math"),rankMath.adminurl+"options-reading.php"))}]:[])),[{id:"robots_tester",type:"notice",status:"info",classes:"nob nopt rank-math-notice-field",children:wp.element.createElement(P.RawHTML,null,(0,n.sprintf)((0,n.__)("Test and edit your live robots.txt file with our %1$s.","seo-by-rank-math"),'<a href="'+(0,r.A)("robotstxt-tool","Options Panel Robots.txt Tester")+"&url=".concat(window.location.origin)+'">'+(0,n.__)("Robots.txt Tester","seo-by-rank-math")+"</a>"))}]);var F;const L={name:"robots",header:{title:(0,n.__)("Edit robots.txt","seo-by-rank-math"),description:(0,n.__)("Edit your robots.txt file to control what bots see.","seo-by-rank-math"),link:(0,r.A)("edit-robotstxt","Options Panel Robots Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-robots"}),(0,n.__)("Edit robots.txt","seo-by-rank-math")),fields:M};var B=a(6116),U=a(8303);const H=function(){var e=[[(0,n.__)("Variable","seo-by-rank-math"),(0,n.__)("Description","seo-by-rank-math")],[(0,n.__)("%AUTHORLINK%","seo-by-rank-math"),(0,n.__)("A link to the archive for the post author, with the authors name as anchor text.","seo-by-rank-math")],[(0,n.__)("%POSTLINK%","seo-by-rank-math"),(0,n.__)("A link to the post, with the title as anchor text.","seo-by-rank-math")],[(0,n.__)("%BLOGLINK%","seo-by-rank-math"),(0,n.__)("A link to your site, with your site's name as anchor text.","seo-by-rank-math")],[(0,n.__)("%BLOGDESCLINK%","seo-by-rank-math"),(0,n.__)("A link to your site, with your site's name and description as anchor text.","seo-by-rank-math")],[(0,n.__)("%FEATUREDIMAGE%","seo-by-rank-math"),(0,n.__)("Featured image of the article.","seo-by-rank-math")]];return wp.element.createElement("div",{className:"field-row rank-math-rss-variables rank-math-exclude-from-search"},wp.element.createElement("h3",null,(0,n.__)("Available variables","seo-by-rank-math")),wp.element.createElement(U.Table,{fields:e}))};function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.dn(H);var W={frontend_seo_score:!0};const V=[{id:"headless_support",type:"toggle",name:(0,n.__)("Headless CMS Support","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Enable this option to register a REST API endpoint that returns the HTML meta tags for a given URL. %s","seo-by-rank-math"),(0,s.A)("headless-support","Others Tab KB Link",(0,n.__)("Read more","seo-by-rank-math"))),default:!1},{id:"frontend_seo_score",type:"toggle",name:(0,n.__)("Show SEO Score to Visitors","seo-by-rank-math"),desc:(0,n.__)("Proudly display the calculated SEO Score as a badge on the front end. It can be disabled for specific posts in the post editor.","seo-by-rank-math"),default:!1},{id:"frontend_seo_score_post_types",type:"checkboxlist",name:(0,n.__)("SEO Score Post Types","seo-by-rank-math"),options:B.A,dep:W,toggleAll:!0,default:["post"]},{id:"frontend_seo_score_template",type:"toggleGroup",name:(0,n.__)("SEO Score Template","seo-by-rank-math"),desc:(0,n.__)("Change the styling for the front end SEO score badge.","seo-by-rank-math"),options:{circle:(0,n.__)("Circle","seo-by-rank-math"),square:(0,n.__)("Square","seo-by-rank-math")},dep:W,default:"circle"},{id:"frontend_seo_score_position",type:"toggleGroup",name:(0,n.__)("SEO Score Position","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Display the badges automatically, or insert the %1$s shortcode in your posts and the %2$s template tag in your theme template files.","seo-by-rank-math"),"<code>[rank_math_seo_score]</code>","<code>&lt;?php&nbsp;rank_math_the_seo_score();&nbsp;?&gt;</code>"),classes:"nob",options:{bottom:(0,n.__)("Below Content","seo-by-rank-math"),top:(0,n.__)("Above Content","seo-by-rank-math"),both:(0,n.__)("Above & Below Content","seo-by-rank-math"),custom:(0,n.__)("Custom (use shortcode)","seo-by-rank-math")},dep:W,default:"top"},{id:"support_rank_math",type:"toggle",name:(0,n.__)("Support Us with a Link","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("If you are showing the SEO scores on the front end, this option will insert a %1$s backlink to RankMath.com to show your support. You can change the link & the text by using this %2$s.","seo-by-rank-math"),"<code>follow</code>",(0,s.A)("change-seo-score-backlink","Options Panel Support Us",(0,n.__)("filter","seo-by-rank-math"))),dep:W,default:!0}].concat(function(e){return function(e){if(Array.isArray(e))return G(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return G(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?G(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(rankMath.canAddUsageTracking?[{id:"usage_tracking",type:"toggle",name:(0,n.__)("Usage Tracking","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Share anonymous usage data to help us improve Rank Math. No personal info is collected. %s","seo-by-rank-math"),(0,s.A)("usage-policy","Others Tab KB Link",(0,n.__)("Learn more about what data is and isn't tracked.","seo-by-rank-math"))),default:!1}]:[]),[{id:"rss_before_content",type:"textarea",name:(0,n.__)("RSS Before Content","seo-by-rank-math"),desc:(0,n.__)("Add content before each post in your site feeds.","seo-by-rank-math")},{id:"rss_after_content",type:"textarea",name:(0,n.__)("RSS After Content","seo-by-rank-math"),desc:(0,n.__)("Add content after each post in your site feeds.","seo-by-rank-math")},{id:"rank_math_rss_vars",type:"component",Component:H}]),z={name:"others",header:{title:(0,n.__)("Others","seo-by-rank-math"),description:(0,n.__)("Change some uncommon but essential settings here.","seo-by-rank-math"),link:(0,r.A)("other-settings","Options Panel Others Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-misc"}),(0,n.__)("Others","seo-by-rank-math")),fields:V},q=[{id:"toc_block_title",type:"text",name:(0,n.__)("Table of Contents Title","seo-by-rank-math"),desc:(0,n.__)("Enter the default title to use for the Table of Contents block.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:(0,n.__)("Table of Contents","seo-by-rank-math")},{id:"toc_block_list_style",type:"select",name:(0,n.__)("Table of Contents List style","seo-by-rank-math"),desc:(0,n.__)("Select the default list style for the Table of Contents block.","seo-by-rank-math"),options:{div:(0,n.__)("None","seo-by-rank-math"),ol:(0,n.__)("Numbered","seo-by-rank-math"),ul:(0,n.__)("Unordered","seo-by-rank-math")},default:"ul"},{id:"toc_block_exclude_headings",type:"checkboxlist",name:(0,n.__)("Table of Contents Exclude Headings","seo-by-rank-math"),desc:(0,n.__)("Choose the headings to exclude from the Table of Contents block.","seo-by-rank-math"),options:[{id:"h1",label:(0,n.__)("Heading H1","seo-by-rank-math")},{id:"h2",label:(0,n.__)("Heading H2","seo-by-rank-math")},{id:"h3",label:(0,n.__)("Heading H3","seo-by-rank-math")},{id:"h4",label:(0,n.__)("Heading H4","seo-by-rank-math")},{id:"h5",label:(0,n.__)("Heading H5","seo-by-rank-math")},{id:"h6",label:(0,n.__)("Heading H6","seo-by-rank-math")}],toggleAll:!0}],$={name:"blocks",header:{title:(0,n.__)("Blocks","seo-by-rank-math"),description:(0,n.__)("Take control over the default settings available for Rank Math Blocks.","seo-by-rank-math")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-stories"}),(0,n.__)("Blocks","seo-by-rank-math")),fields:q},Y=[{id:"wc_remove_product_base",type:"toggle",name:(0,n.__)("Remove base","seo-by-rank-math"),desc:(0,n.sprintf)((0,n.__)("Remove prefix like %1$s from product URL chosen at %2$s","seo-by-rank-math"),"<code>/shop/*</code>, <code>/product/*</code>","<br /><code>"+(0,n.__)("WordPress Dashboard > Settings > Permalinks > Product permalinks Example: default: /product/accessories/action-figures/acme/ - becomes: /accessories/action-figures/acme/","seo-by-rank-math")+"</code>"),default:!1,classes:"rank-math-advanced-option"},{id:"wc_remove_category_base",type:"toggle",name:(0,n.__)("Remove category base","seo-by-rank-math"),desc:(0,n.__)("Remove prefix from category URL.","seo-by-rank-math")+"<br><code>"+(0,n.__)("default: /product-category/accessories/action-figures/ - changed: /accessories/action-figures/","seo-by-rank-math")+"</code>",default:!1,classes:"rank-math-advanced-option"},{id:"wc_remove_category_parent_slugs",type:"toggle",name:(0,n.__)(" Remove parent slugs","seo-by-rank-math"),desc:(0,n.__)("Remove parent slugs from category URL.","seo-by-rank-math")+"<br><code>"+(0,n.__)("default: /product-category/accessories/action-figures/ - changed: /product-category/action-figures/","seo-by-rank-math")+"</code>",default:!1,classes:"rank-math-advanced-option"},{id:"wc_remove_generator",type:"toggle",name:(0,n.__)("Remove Generator Tag","seo-by-rank-math"),desc:(0,n.__)("Remove WooCommerce generator tag from the source code.","seo-by-rank-math"),default:!0,classes:"rank-math-advanced-option"},{id:"remove_shop_snippet_data",type:"toggle",name:(0,n.__)("Remove Schema Markup on Shop Archives","seo-by-rank-math"),desc:(0,n.__)("Remove Schema Markup Data from WooCommerce Shop archive pages.","seo-by-rank-math"),default:!0,classes:"rank-math-advanced-option"},{id:"product_brand",type:"select",name:(0,n.__)("Select Brand","seo-by-rank-math"),desc:(0,n.__)("Select Product Brand Taxonomy to use in Schema.org & OpenGraph markup.","seo-by-rank-math"),options:rankMath.brandTaxonomies}],K={name:"woocommerce",header:{title:(0,n.__)("WooCommerce","seo-by-rank-math"),description:(0,n.__)("Choose how you want Rank Math to handle your WooCommerce SEO.","seo-by-rank-math"),link:(0,r.A)("woocommerce-settings","Options Panel WooCommerce Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-cart"}),(0,n.__)("WooCommerce","seo-by-rank-math")),fields:Y};var J=a(8894),Q=a(7562);function X(e){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X(e)}function Z(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function ee(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=X(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=X(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==X(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var te=function(e){return wp.element.createElement(U.Notice,{status:"error"},e)};const ae=(0,J.compose)((0,Q.withSelect)(function(e){var t=rankMath.htaccessData,a=e("rank-math-settings").getData();return(0,o.isUndefined)(a.htaccess_allow_editing)&&!(0,o.isEmpty)(t)&&(a.htaccess_allow_editing=!1,a.htaccess_content=t.content),{settings:a}}),(0,Q.withDispatch)(function(e,t){var a=t.settings;return{updateSettings:function(t,n){a[t]=n,e("rank-math-settings").updateData(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(a),!0).forEach(function(t){ee(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Z(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}({},a))}}}))(function(e){var t=e.settings,a=e.updateSettings,r=rankMath,s=r.isEditAllowed,i=r.htaccessData;if((0,o.isEmpty)(i))return te((0,n.__)(".htaccess file not found.","seo-by-rank-math"));var l=i.writable&&s;return wp.element.createElement(React.Fragment,null,!l&&te((0,n.__)(".htaccess file is not writable.","seo-by-rank-math")),l&&te(wp.element.createElement(React.Fragment,null,wp.element.createElement(P.RawHTML,null,(0,n.__)("Be careful when editing the htaccess file, it is easy to make mistakes and break your site. If that happens, you can restore the file to its state <strong>before the last edit</strong> by replacing the htaccess file with the backup copy created by Rank Math in the same directory (<em>.htaccess_back_xxxxxx</em>) using an FTP client.","seo-by-rank-math")),wp.element.createElement("br",null),wp.element.createElement(U.CheckboxControl,{label:wp.element.createElement("strong",null,(0,n.__)("I understand the risks and I want to edit the file","seo-by-rank-math")),checked:t.htaccess_allow_editing,onChange:function(e){return a("htaccess_allow_editing",e)}}))),wp.element.createElement("br",null),wp.element.createElement("br",null),wp.element.createElement(U.TextareaControl,{id:"htaccess_content",name:"htaccess_content",className:"rank-math-code-box",variant:"code-box",value:t.htaccess_content,readOnly:!l||!t.htaccess_allow_editing,"data-gramm":!1,rows:10,onChange:function(e){return a("htaccess_content",e)}}))}),ne={name:"htaccess",header:{title:(0,n.__)("Edit .htaccess","seo-by-rank-math"),description:(0,n.__)("Edit the contents of your .htaccess file easily.","seo-by-rank-math"),link:(0,r.A)("edit-htaccess","Options Panel htaccess Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-htaccess"}),(0,n.__)("Edit .htaccess","seo-by-rank-math")),fields:[{id:"htaccess_accept_changes",type:"component",Component:ae,classes:"field-type-notice"}]},re=[{id:"redirections_debug",type:"toggle",name:(0,n.__)("Debug Redirections","seo-by-rank-math"),desc:(0,n.__)("Display the Debug Console instead of being redirected. Administrators only.","seo-by-rank-math"),default:!1},{id:"redirections_fallback",type:"toggleGroup",name:(0,n.__)("Fallback Behavior","seo-by-rank-math"),desc:(0,n.__)("If nothing similar is found, this behavior will be applied. <strong>Note</strong>: If the requested URL ends with <code>/login</code>, <code>/admin</code>, or <code>/dashboard</code>, WordPress will automatically redirect to respective locations within the WordPress admin area.","seo-by-rank-math"),options:{default:(0,n.__)("Default 404","seo-by-rank-math"),homepage:(0,n.__)("Redirect to Homepage","seo-by-rank-math"),custom:(0,n.__)("Custom Redirection","seo-by-rank-math")},default:"default"},{id:"redirections_custom_url",type:"text",name:(0,n.__)("Custom Url","seo-by-rank-math"),dep:{redirections_fallback:"custom"}},{id:"redirections_header_code",type:"select",name:(0,n.__)("Redirection Type","seo-by-rank-math"),options:rankMath.redirectionTypes,default:"301"},{id:"redirections_post_redirect",type:"toggle",name:(0,n.__)("Auto Post Redirect","seo-by-rank-math"),desc:(0,n.__)("Extend the functionality of WordPress by creating redirects in our plugin when you change the slug of a post, page, category or a CPT. You can modify the redirection further according to your needs.","seo-by-rank-math"),default:!1}],oe={name:"redirections",header:{title:(0,n.__)("Redirections","seo-by-rank-math"),description:(0,n.__)("Easily create redirects without fiddling with tedious code.","seo-by-rank-math"),link:(0,r.A)("redirections-settings","Options Panel Redirections Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-redirection"}),(0,n.__)("Redirections","seo-by-rank-math")),fields:re},se=function(){var e=rankMath.refreshDate,t=rankMath.adminurl+"?page=rank-math-content-ai-page#usage",a=(0,r.A)("content-ai-pricing-tables","Buy CAI Credits Options Panel");if(!e)return wp.element.createElement("div",{className:"field-row buy-more-credits rank-math-exclude-from-search"},(0,n.__)("Get more credits ","seo-by-rank-math"),wp.element.createElement("a",{href:a,target:"_blank",rel:"noreferrer"},(0,n.__)("here","seo-by-rank-math")));var o=new Date(1e3*e),s=o.toLocaleDateString("en-CA")+" "+o.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!0}).toLowerCase();return wp.element.createElement("div",{className:"field-row buy-more-credits rank-math-exclude-from-search"},(0,n.__)("Credits will renew on","seo-by-rank-math")," ",s," ",wp.element.createElement("a",{href:t},(0,n.__)("check usage","seo-by-rank-math"))," ",(0,n.__)("or you can upgrade to get more credits","seo-by-rank-math")," ",wp.element.createElement("a",{href:a,target:"_blank",rel:"noreferrer"},(0,n.__)("here","seo-by-rank-math")),".")};a.dn(se);const ie=function(){return wp.element.createElement("div",{id:"setting-panel-content-ai",className:"rank-math-tab rank-math-options-panel-content exclude"},wp.element.createElement("div",{className:"wp-core-ui rank-math-ui connect-wrap"},wp.element.createElement(U.Button,{href:rankMath.activateUrl,variant:"animate"},(0,n.__)("Connect Your Rank Math Account","seo-by-rank-math"))),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"content-ai-settings"},wp.element.createElement("div",{className:"rank-math-cta-box width-100 no-shadow no-padding no-border"},wp.element.createElement("h3",null,(0,n.__)("Benefits of Connecting Rank Math Account","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,n.__)("Gain Access to 40+ Advanced AI Tools.","seo-by-rank-math")),wp.element.createElement("li",null,(0,n.__)("Experience the Revolutionary AI-Powered Content Editor.","seo-by-rank-math")),wp.element.createElement("li",null,(0,n.__)("Engage with RankBot, Our AI Chatbot, For SEO Advice.","seo-by-rank-math")),wp.element.createElement("li",null,(0,n.__)("Escape the Writer's Block Using AI to Write Inside WordPress.","seo-by-rank-math"))))))};function le(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.dn(ie);var ce=rankMath,me=ce.credits,de=ce.countries,ue=ce.isSiteConnected,he=ce.defaultLanguage,ye=(0,o.reject)(B.A,{id:"attachment"}),_e=[{id:"content_ai_country",type:"select",name:(0,n.__)("Default Country","seo-by-rank-math"),desc:(0,n.__)("Content AI tailors keyword research to the target country for highly relevant suggestions. You can override this in individual posts/pages/CPTs.","seo-by-rank-math"),options:de,default:"all"},{id:"content_ai_tone",type:"selectSearch",name:(0,n.__)("Default Tone","seo-by-rank-math"),desc:(0,n.__)("This feature enables the default primary tone or writing style that characterizes your content. You can override this in individual tools.","seo-by-rank-math"),options:{Analytical:(0,n.__)("Analytical","seo-by-rank-math"),Argumentative:(0,n.__)("Argumentative","seo-by-rank-math"),Casual:(0,n.__)("Casual","seo-by-rank-math"),Conversational:(0,n.__)("Conversational","seo-by-rank-math"),Creative:(0,n.__)("Creative","seo-by-rank-math"),Descriptive:(0,n.__)("Descriptive","seo-by-rank-math"),Emotional:(0,n.__)("Emotional","seo-by-rank-math"),Empathetic:(0,n.__)("Empathetic","seo-by-rank-math"),Expository:(0,n.__)("Expository","seo-by-rank-math"),Factual:(0,n.__)("Factual","seo-by-rank-math"),Formal:(0,n.__)("Formal","seo-by-rank-math"),Friendly:(0,n.__)("Friendly","seo-by-rank-math"),Humorous:(0,n.__)("Humorous","seo-by-rank-math"),Informal:(0,n.__)("Informal","seo-by-rank-math"),Journalese:(0,n.__)("Journalese","seo-by-rank-math"),Narrative:(0,n.__)("Narrative","seo-by-rank-math"),Objective:(0,n.__)("Objective","seo-by-rank-math"),Opinionated:(0,n.__)("Opinionated","seo-by-rank-math"),Persuasive:(0,n.__)("Persuasive","seo-by-rank-math"),Poetic:(0,n.__)("Poetic","seo-by-rank-math"),Satirical:(0,n.__)("Satirical","seo-by-rank-math"),"Story-telling":(0,n.__)("Story-telling","seo-by-rank-math"),Subjective:(0,n.__)("Subjective","seo-by-rank-math"),Technical:(0,n.__)("Technical","seo-by-rank-math")},default:"Formal"},{id:"content_ai_audience",type:"selectSearch",name:(0,n.__)("Default Audience","seo-by-rank-math"),desc:(0,n.__)("This option lets you set the default audience that usually reads your content. You can override this in individual tools.","seo-by-rank-math"),options:{Activists:(0,n.__)("Activists","seo-by-rank-math"),Artists:(0,n.__)("Artists","seo-by-rank-math"),Authors:(0,n.__)("Authors","seo-by-rank-math"),"Bargain Hunters":(0,n.__)("Bargain Hunters","seo-by-rank-math"),Bloggers:(0,n.__)("Bloggers","seo-by-rank-math"),"Business Owners":(0,n.__)("Business Owners","seo-by-rank-math"),Collectors:(0,n.__)("Collectors","seo-by-rank-math"),Cooks:(0,n.__)("Cooks","seo-by-rank-math"),Crafters:(0,n.__)("Crafters","seo-by-rank-math"),Dancers:(0,n.__)("Dancers","seo-by-rank-math"),DIYers:(0,n.__)("DIYers","seo-by-rank-math"),Designers:(0,n.__)("Designers","seo-by-rank-math"),Educators:(0,n.__)("Educators","seo-by-rank-math"),Engineers:(0,n.__)("Engineers","seo-by-rank-math"),Entrepreneurs:(0,n.__)("Entrepreneurs","seo-by-rank-math"),Environmentalists:(0,n.__)("Environmentalists","seo-by-rank-math"),Fashionistas:(0,n.__)("Fashionistas","seo-by-rank-math"),"Fitness Enthusiasts":(0,n.__)("Fitness Enthusiasts","seo-by-rank-math"),Foodies:(0,n.__)("Foodies","seo-by-rank-math"),"Gaming Enthusiasts":(0,n.__)("Gaming Enthusiasts","seo-by-rank-math"),Gardeners:(0,n.__)("Gardeners","seo-by-rank-math"),"General Audience":(0,n.__)("General Audience","seo-by-rank-math"),"Health Enthusiasts":(0,n.__)("Health Enthusiasts","seo-by-rank-math"),"Healthcare Professionals":(0,n.__)("Healthcare Professionals","seo-by-rank-math"),"Indoor Hobbyists":(0,n.__)("Indoor Hobbyists","seo-by-rank-math"),Investors:(0,n.__)("Investors","seo-by-rank-math"),"Job Seekers":(0,n.__)("Job Seekers","seo-by-rank-math"),"Movie Buffs":(0,n.__)("Movie Buffs","seo-by-rank-math"),Musicians:(0,n.__)("Musicians","seo-by-rank-math"),"Outdoor Enthusiasts":(0,n.__)("Outdoor Enthusiasts","seo-by-rank-math"),Parents:(0,n.__)("Parents","seo-by-rank-math"),"Pet Owners":(0,n.__)("Pet Owners","seo-by-rank-math"),Photographers:(0,n.__)("Photographers","seo-by-rank-math"),"Podcast Listeners":(0,n.__)("Podcast Listeners","seo-by-rank-math"),Professionals:(0,n.__)("Professionals","seo-by-rank-math"),Retirees:(0,n.__)("Retirees","seo-by-rank-math"),Russian:(0,n.__)("Russian","seo-by-rank-math"),Seniors:(0,n.__)("Seniors","seo-by-rank-math"),"Social Media Users":(0,n.__)("Social Media Users","seo-by-rank-math"),"Sports Fans":(0,n.__)("Sports Fans","seo-by-rank-math"),Students:(0,n.__)("Students","seo-by-rank-math"),"Tech Enthusiasts":(0,n.__)("Tech Enthusiasts","seo-by-rank-math"),Travelers:(0,n.__)("Travelers","seo-by-rank-math"),"TV Enthusiasts":(0,n.__)("TV Enthusiasts","seo-by-rank-math"),"Video Creators":(0,n.__)("Video Creators","seo-by-rank-math"),Writers:(0,n.__)("Writers","seo-by-rank-math")},default:"General Audience"},{id:"content_ai_language",type:"selectSearch",name:(0,n.__)("Default Language","seo-by-rank-math"),desc:(0,n.__)("This option lets you set the default language for content generated using Content AI. You can override this in individual tools.","seo-by-rank-math"),options:{"US English":(0,n.__)("US English","seo-by-rank-math"),"UK English":(0,n.__)("UK English","seo-by-rank-math"),Arabic:(0,n.__)("Arabic","seo-by-rank-math"),Bulgarian:(0,n.__)("Bulgarian","seo-by-rank-math"),Chinese:(0,n.__)("Chinese","seo-by-rank-math"),Czech:(0,n.__)("Czech","seo-by-rank-math"),Danish:(0,n.__)("Danish","seo-by-rank-math"),Dutch:(0,n.__)("Dutch","seo-by-rank-math"),Estonian:(0,n.__)("Estonian","seo-by-rank-math"),Finnish:(0,n.__)("Finnish","seo-by-rank-math"),French:(0,n.__)("French","seo-by-rank-math"),German:(0,n.__)("German","seo-by-rank-math"),Greek:(0,n.__)("Greek","seo-by-rank-math"),Hebrew:(0,n.__)("Hebrew","seo-by-rank-math"),Hungarian:(0,n.__)("Hungarian","seo-by-rank-math"),Indonesian:(0,n.__)("Indonesian","seo-by-rank-math"),Italian:(0,n.__)("Italian","seo-by-rank-math"),Japanese:(0,n.__)("Japanese","seo-by-rank-math"),Korean:(0,n.__)("Korean","seo-by-rank-math"),Latvian:(0,n.__)("Latvian","seo-by-rank-math"),Lithuanian:(0,n.__)("Lithuanian","seo-by-rank-math"),Norwegian:(0,n.__)("Norwegian","seo-by-rank-math"),Polish:(0,n.__)("Polish","seo-by-rank-math"),Portuguese:(0,n.__)("Portuguese","seo-by-rank-math"),Romanian:(0,n.__)("Romanian","seo-by-rank-math"),Russian:(0,n.__)("Russian","seo-by-rank-math"),Slovak:(0,n.__)("Slovak","seo-by-rank-math"),Slovenian:(0,n.__)("Slovenian","seo-by-rank-math"),Spanish:(0,n.__)("Spanish","seo-by-rank-math"),Swedish:(0,n.__)("Swedish","seo-by-rank-math"),Turkish:(0,n.__)("Turkish","seo-by-rank-math")},default:he},{id:"content_ai_post_types",type:"checkboxlist",name:(0,n.__)("Select Post Type","seo-by-rank-math"),desc:(0,n.__)("Choose the type of posts/pages/CPTs where you want to use Content AI.","seo-by-rank-math"),options:ye,toggleAll:!0,default:(0,o.mapValues)(ye,function(e){return e.id})}].concat(function(e){return function(e){if(Array.isArray(e))return le(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return le(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?le(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(!1!==me?[{id:"content_ai_credits",type:"component",Component:se}]:[]));const pe=ue?_e:[{id:"rank_math_content_ai_settings",type:"component",Component:ie}],be={name:"content-ai",header:{title:(0,n.__)("Content AI","seo-by-rank-math"),description:(0,n.__)("Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area.","seo-by-rank-math"),link:(0,r.A)("content-ai-settings","Options Panel Content AI Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,n.__)("Content AI","seo-by-rank-math")),fields:pe},fe=[{id:"404_advanced_monitor",type:"notice",status:"error",children:(0,n.__)("If you have hundreds of 404 errors, your error log might increase quickly. Only choose this option if you have a very few 404s and are unable to replicate the 404 error on a particular URL from your end.","seo-by-rank-math"),dep:{"404_monitor_mode":"advanced"}},{id:"404_monitor_mode",type:"toggleGroup",name:(0,n.__)("Mode","seo-by-rank-math"),desc:(0,n.__)("The Simple mode only logs URI and access time, while the Advanced mode creates detailed logs including additional information such as the Referer URL.","seo-by-rank-math"),options:{simple:(0,n.__)("Simple","seo-by-rank-math"),advanced:(0,n.__)("Advanced","seo-by-rank-math")},default:"simple"},{id:"404_monitor_limit",type:"text",name:(0,n.__)("Log Limit","seo-by-rank-math"),desc:(0,n.__)("Sets the max number of rows in a log. Set to 0 to disable the limit.","seo-by-rank-math"),attributes:{type:"number"},default:"100"},{id:"404_monitor_exclude",type:"repeatableGroup",exclude:!0,name:(0,n.__)("Exclude Paths","seo-by-rank-math"),desc:(0,n.__)("Enter URIs or keywords you wish to prevent from getting logged by the 404 monitor.","seo-by-rank-math"),options:{addButton:{children:(0,n.__)("Add another","seo-by-rank-math")},removeButton:{children:(0,n.__)("Remove","seo-by-rank-math")}},default:[],fields:[{id:"exclude",type:"text"},{id:"comparison",type:"select",options:rankMath.choicesComparisonTypes}]},{id:"404_monitor_ignore_query_parameters",type:"toggle",name:(0,n.__)("Ignore Query Parameters","seo-by-rank-math"),desc:(0,n.__)("Turn ON to ignore all query parameters (the part after a question mark in a URL) when logging 404 errors.","seo-by-rank-math"),default:!1}],ke={name:"404-monitor",header:{title:(0,n.__)("404 Monitor","seo-by-rank-math"),description:(0,n.__)("Monitor broken pages that ruin user-experience and affect SEO.","seo-by-rank-math"),link:(0,r.A)("404-monitor-settings","Options Panel 404 Monitor Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-404"}),(0,n.__)("404 Monitor","seo-by-rank-math")),fields:fe};var ge=a(8566);const we=function(e){var t=e.authUrl,a=e.isAuthorized,s=[(0,n.__)("Verify site ownership on Google Search Console in a single click","seo-by-rank-math"),(0,n.__)("Track page and keyword rankings with the Advanced Analytics module","seo-by-rank-math"),(0,n.__)("Easily set up Google Analytics without using another 3rd party plugin","seo-by-rank-math"),(0,n.__)("Automatically submit sitemaps to the Google Search Console","seo-by-rank-math"),wp.element.createElement("a",{key:"help-analytics",target:"_blank",rel:"noreferrer",href:(0,r.A)("help-analytics","SW Analytics Step Benefits")},(0,n.__)("Learn more about the benefits of connecting your account here.","seo-by-rank-math"))];return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"connect-wrap"},a?wp.element.createElement(U.Button,{variant:"primary"},(0,n.__)("Disconnect Account","seo-by-rank-math")):wp.element.createElement(U.Button,{href:t,variant:"animate",className:"rank-math-authorize-account"},(0,n.__)("Connect Google Services","seo-by-rank-math"))),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"analytics"},wp.element.createElement("div",{className:"rank-math-cta-box width-100 no-shadow no-padding no-border"},wp.element.createElement("h3",null,(0,n.__)("Benefits of Connecting Google Account","seo-by-rank-math")),wp.element.createElement("ul",null,(0,o.map)(s,function(e,t){return wp.element.createElement("li",{key:t},e)})))),wp.element.createElement(U.PrivacyBox,{className:rankMath.isSettingsPage?"width-100":""}))};a.dn(we);const ve=function(e){var t=e.isSiteUrlValid,a=e.activateUrl,s=[(0,n.__)("Verify site ownership on Google Search Console in a single click","seo-by-rank-math"),(0,n.__)("Track page and keyword rankings with the Advanced Analytics module","seo-by-rank-math"),(0,n.__)("Easily set up Google Analytics without using another 3rd party plugin","seo-by-rank-math"),(0,n.__)("Automatically submit sitemaps to the Google Search Console","seo-by-rank-math"),(0,n.__)("Free keyword suggestions when entering a focus keyword","seo-by-rank-math"),(0,n.__)("Use our revolutionary SEO Analyzer to scan your website for SEO errors","seo-by-rank-math"),wp.element.createElement("a",{key:"learn-more",target:"_blank",rel:"noreferrer",href:(0,r.A)("free-account-benefits","SW Analytics Step")},(0,n.__)("Learn more about the benefits of connecting your account here.","seo-by-rank-math"))];return wp.element.createElement(React.Fragment,null,wp.element.createElement(U.InvalidSiteUrlNotice,{isSiteUrlValid:t}),wp.element.createElement("div",{className:"wp-core-ui rank-math-ui connect-wrap"},wp.element.createElement(U.Button,{href:a,variant:"animate",disabled:!t},(0,n.__)("Connect Your Rank Math Account","seo-by-rank-math"))),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"analytics"},wp.element.createElement("div",{className:"rank-math-cta-box width-100 no-shadow no-padding no-border"},wp.element.createElement("h3",null,(0,n.__)("Benefits of Connecting Rank Math Account","seo-by-rank-math")),wp.element.createElement("ul",null,(0,o.map)(s,function(e,t){return wp.element.createElement("li",{key:t},e)})))),wp.element.createElement(U.PrivacyBox,null))};a.dn(ve);var Ee=a(6942),Se=a.n(Ee);const Ae=function(e){var t,a=e.data,o=e.updateData,s=a.searchConsole;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(U.SelectWithSearch,{value:s.profile,width:268,options:null!==(t=s.sites)&&void 0!==t?t:{},onChange:function(e){s.profile=e,o("searchConsole",s)},label:(0,n.__)("Site","seo-by-rank-math"),className:"site-console-profile notrack",disabled:rankMath.isConsoleConnected})),(0,ge.applyFilters)("rank_math_analytics_options_console","",a,o)),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{checked:s.enable_index_status,disabled:!s.profile,onChange:function(e){s.enable_index_status=e,o("searchConsole",s)},className:"regular-text notrack",label:(0,n.__)("Enable the Index Status tab","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description"},(0,n.__)("Enable this option to show the Index Status tab in the Analytics module. ","seo-by-rank-math"),wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:(0,r.A)("url-inspection-api","SW Analytics Index Status Option")},(0,n.__)("Learn more.","seo-by-rank-math"))))))};a.dn(Ae);var Ce=a(1669),Oe=a.n(Ce);function xe(e,t,a){return Oe().ajax({url:rankMath.ajaxurl,type:a||"POST",dataType:"json",data:Oe().extend(!0,{action:"rank_math_"+e,security:rankMath.security},t)})}function Pe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Te(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?Te(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.dn(xe);var Ne=function(e,t){xe("get_ga4_data_streams",{propertyID:e},"post").done(function(e){e.error?console.error(e.error):t(e.streams)})};const je=function(e){var t,a,s,i=e.data,l=e.updateData,c=i.analyticsData,m=i.allServices,d=c.account_id,u=null!==(t=c.property_id)&&void 0!==t?t:"",h=null!==(a=c.view_id)&&void 0!==a?a:"",y=null!==(s=c.stream_name)&&void 0!==s?s:"",_=rankMath.isPro,p={},b=new Map;b.set("",(0,n.__)("Select Property","seo-by-rank-math"));var f={},k=Pe((0,P.useState)({}),2),g=k[0],w=k[1];return(0,o.isEmpty)(m.accounts)||(0,o.forEach)(m.accounts,function(e,t){p[t]=e.name+" ("+t+")",d===t&&(b.set("create-ga4-property",(0,n.__)("Create new GA4 Property","seo-by-rank-math")),(0,o.forEach)(e.properties,function(e,t){b.set(t,e.name)})),d||(c.account_id=t,l("analyticsData",c))}),(0,P.useEffect)(function(){if(!(0,o.isEmpty)(g)){var e=g[0];c.view_id=e.id,c.stream_name=e.name,c.measurement_id=e.measurementId,l("analyticsData",c)}},[g]),(0,o.isEmpty)(g)||(0,o.forEach)(g,function(e){f[e.id]=e.name}),h&&y&&!f[h]&&(f[h]=y),f[h]||(f[h]=(0,n.__)("Select","seo-by-rank-math")),wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(U.SelectWithSearch,{value:d,options:p,onChange:function(e){c.account_id=e,l("analyticsData",c)},label:(0,n.__)("Account","seo-by-rank-math"),className:"site-analytics-account notrack",disabled:rankMath.isAnalyticsConnected})),wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(U.SelectControl,{value:u,options:b,onChange:function(e){"create-ga4-property"!==e?(c.property_id=e,l("analyticsData",c),e&&Ne(e,w)):confirm((0,n.__)("Are you sure, you want to create a new GA4 Property?","seo-by-rank-math"))&&xe("create_ga4_property",{accountID:d},"post").done(function(e){e.error?alert(e.error):(b.set(e.id,e.name),c.property_id=e.id,l("analyticsData",c),m.accounts[d].properties[e.id]={name:e.name,id:e.id,account_id:d,type:"GA4"},l("allServices",m),Ne(e.id,w))})},label:(0,n.__)("Property","seo-by-rank-math"),className:"site-analytics-property notrack",disabled:rankMath.isAnalyticsConnected})),wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(U.SelectControl,{value:h,options:f,onChange:function(e){c.view_id=e;var t=(0,o.find)(g,{id:e});c.stream_name=t.name,c.measurement_id=t.measurementId,l("analyticsData",c)},label:(0,n.__)("Data Stream","seo-by-rank-math"),className:"site-analytics-view notrack",disabled:rankMath.isAnalyticsConnected})),(0,ge.applyFilters)("rank_math_analytics_options_analytics","",i,l)),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{checked:c.install_code,onChange:function(e){c.install_code=e,l("analyticsData",c)},className:"regular-text notrack",label:(0,n.__)("Install analytics code","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description"},(0,n.__)("Enable this option only if you are not using any other plugin/theme to install Google Analytics code.","seo-by-rank-math")))),c.install_code&&wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{"data-url":_?void 0:(0,r.A)("free-vs-pro","Anonymize IP"),className:"field-row field-type-toggle ".concat(_?"":"field-redirector-element")},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{disabled:!_,checked:c.anonymize_ip,onChange:function(e){c.anonymize_ip=e,l("analyticsData",c)},className:"regular-text notrack",label:wp.element.createElement(React.Fragment,null,(0,n.__)("Anonymize IP addresses","seo-by-rank-math"),!_&&wp.element.createElement(U.ProBadge,{href:(0,r.A)("pro","Anonymize IP")}))}))),wp.element.createElement("div",{"data-url":_?void 0:(0,r.A)("pro","Localjs IP"),className:"field-row field-type-toggle ".concat(_?"":"field-redirector-element")},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{disabled:!_,checked:c.local_ga_js,onChange:function(e){c.local_ga_js=e,l("analyticsData",c)},className:"regular-text notrack",label:wp.element.createElement(React.Fragment,null,(0,n.__)("Self-Hosted Analytics JS File","seo-by-rank-math"),!_&&wp.element.createElement(U.ProBadge,{href:(0,r.A)("pro","Localjs IP")}))}))),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{checked:c.exclude_loggedin,onChange:function(e){c.exclude_loggedin=e,l("analyticsData",c)},className:"regular-text notrack",label:(0,n.__)("Exclude Logged-in users","seo-by-rank-math")})))))};a.dn(je);const De=function(e){var t=e.data,a=e.updateData,o=rankMath.isPro;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},(0,ge.applyFilters)("rank_math_analytics_adsense",wp.element.createElement(U.SelectControl,{value:"",options:{"":(0,n.__)("Select Account","seo-by-rank-math")},label:(0,n.__)("Account","seo-by-rank-math"),className:"site-adsense-account notrack",disabled:!0}),t,a))),!o&&wp.element.createElement("div",{id:"rank-math-pro-cta",className:"no-margin"},wp.element.createElement("div",{className:"rank-math-cta-text"},wp.element.createElement(U.ProBadge,{href:(0,r.A)("pro","AdSense Toggle")}),(0,n.__)("Google AdSense support is only available in Rank Math Pro's Advanced Analytics module.","seo-by-rank-math"))))};a.dn(De),a.dn(Ie);var Re=document.createElement("div");function Ie(e){return e&&"string"==typeof e&&(e=e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),Re.innerHTML=e,e=Re.textContent,Re.textContent=""),e}function Me(e){return Me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Me(e)}function Fe(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function Le(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(a),!0).forEach(function(t){Be(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Fe(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function Be(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=Me(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=Me(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Me(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Ue=function(e){var t=e.data,a=e.testData,r=e.setTestConnection;return wp.element.createElement("div",{className:"connect-actions"},(0,o.map)(function(e){var t=e.reconnectGoogleUrl,a=e.isConsoleConnected,r=e.isAdsenseConnected,o=e.isAnalyticsConnected,s=(null==e?void 0:e.setup_mode)||"advanced",i=[{id:"reconnect",link:Ie(t),classes:"rank-math-reconnect-google",text:(0,n.__)("Reconnect","seo-by-rank-math")},{id:"disconnect",link:"#",classes:"rank-math-disconnect-google",text:(0,n.__)("Disconnect","seo-by-rank-math")}];return"advanced"===s&&(a||r||o)&&i.push({id:"test_connections",link:"#",classes:"rank-math-test-connection-google",text:(0,n.__)("Test Connections","seo-by-rank-math")}),(0,ge.applyFilters)("rank_math/analytics/connect_actions",i)}(t),function(e){var s=e.id,i=e.link,l=e.text,c=e.classes;return wp.element.createElement("a",{key:l,href:i,className:"button button-link ".concat(c),onClick:function(e){return"disconnect"===s?(e.preventDefault(),confirm((0,n.__)("Are you sure you want to disconnect Google services from your site?","seo-by-rank-math"))&&xe("disconnect_google").done(function(){window.location.reload()}),!1):"test_connections"===s?(e.preventDefault(),function(e,t,a){var n=(0,ge.applyFilters)("rank_math_test_connections",(0,o.compact)([e.isConsoleConnected&&{id:"search-console",action:"check_console_request"},e.isAnalyticsConnected&&{id:"analytics",action:"check_analytics_request"}]));(0,o.forEach)(n,function(e){t[e.id]="loading",a(Le({},t)),xe(e.action,{},"post").done(function(n){if(n.success)return t[e.id]="success",void a(Le({},t));t[e.id]="failed",a(Le({},t))})})}(t,a,r),!1):void 0}},l)}))};a.dn(Ue);const He=function(e){var t=e.reconnectUrl;return wp.element.createElement("p",{className:"warning"},wp.element.createElement("strong",{className:"warning"},(0,n.__)("Warning: ","seo-by-rank-math")),wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:(0,n.sprintf)((0,n.__)('You have not given the permission to fetch this data. Please <a href="%s">reconnect</a> with all required permissions.',"seo-by-rank-math"),t)}}))};function Ge(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return We(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?We(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function We(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.dn(He);const Ve=function(e){var t=e.data,a=e.updateData,r=Ge((0,P.useState)({}),2),s=r[0],i=r[1];t.isConsoleConnected=!(0,o.isEmpty)(t.searchConsole.profile),t.isAnalyticsConnected=!(0,o.isEmpty)(t.analyticsData.view_id),t.isAdsenseConnected=!(0,o.isEmpty)(t.analyticsData.adsense_id);var l=t.hasConsolePermission,c=t.hasAnalyticsPermission,m=t.hasAdsensePermission,d=[{id:"search-console",connected:rankMath.isConsoleConnected,disabled:!l,title:(0,n.__)("Search Console","seo-by-rank-math"),view:Ae},{id:"analytics",connected:rankMath.isAnalyticsConnected,disabled:!c,title:(0,n.__)("Analytics","seo-by-rank-math"),view:je},{id:"adsense",connected:rankMath.isAdsenseConnected,disabled:rankMath.isPro&&!m,title:(0,n.__)("AdSense","seo-by-rank-math"),view:De}];return wp.element.createElement(React.Fragment,null,rankMath.nextFetch&&wp.element.createElement("span",{className:"next-fetch"},rankMath.nextFetch),wp.element.createElement(Ue,{data:t,testData:s,setTestConnection:i}),(0,o.map)(d,function(e){var r=e.id,i=e.connected,l=e.disabled,c=e.title,m=e.view,d=!(0,o.isEmpty)(s[r])&&"loading"===s[r],u=!(0,o.isEmpty)(s[r])&&"failed"===s[r],h=Se()("rank-math-box no-padding rank-math-accordion rank-math-connect-".concat(r),{connected:i,disconnected:!i,disabled:l}),y=Se()("rank-math-connection-status",{"rank-math-connection-status-success":i&&!u,"rank-math-connection-status-error":!i||u}),_=i?(0,n.__)("Connected","seo-by-rank-math"):(0,n.__)("Not Connected","seo-by-rank-math");return wp.element.createElement("div",{key:r,className:h,tabIndex:0},wp.element.createElement("header",null,wp.element.createElement("h3",null,wp.element.createElement("span",{className:"rank-math-connection-status-wrap"},d?wp.element.createElement("svg",{className:"rank-math-spinner",viewBox:"0 0 100 100",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",role:"presentation",focusable:"false"},wp.element.createElement("circle",{cx:"50",cy:"50",r:"50","vector-effect":"non-scaling-stroke"}),wp.element.createElement("path",{d:"m 50 0 a 50 50 0 0 1 50 50","vector-effect":"non-scaling-stroke"})):wp.element.createElement("span",{className:y,title:u?(0,n.__)("Some permissions are missing, please reconnect","seo-by-rank-math"):_})),c)),wp.element.createElement("div",{className:"rank-math-accordion-content rank-math-".concat(r,"-content")},l&&wp.element.createElement(He,{reconnectUrl:t.reconnectGoogleUrl}),wp.element.createElement(m,{data:t,updateData:a})))}))};a.dn(Ve);const ze=function(e){var t=e.data,a=e.updateData;if(t.showEmailReports){var o=rankMath.isSettingsPage?"h3":"h1";return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row email-reports-header ".concat(rankMath.isSettingsPage?"":"text-center")},(0,P.createElement)(o,null,(0,n.__)("Email Reports","seo-by-rank-math")),rankMath.isSettingsPage?wp.element.createElement("div",null,(0,n.__)("Receive periodic SEO Performance reports via email. Once enabled and options are saved, you can see","seo-by-rank-math")," ",wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:"".concat(rankMath.homeUrl,"/?rank_math_analytics_report_preview=1")},(0,n.__)("the preview here","seo-by-rank-math"))):wp.element.createElement("div",null,(0,n.__)("Receive Analytics reports periodically in email.","seo-by-rank-math")," ",wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:(0,r.A)("seo-email-reporting","SW Analytics Step")},(0,n.__)("Learn more about Email Reports.","seo-by-rank-math")))),wp.element.createElement("div",{className:"field-row field-type-toggle field-id-console-email-reports"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_email_reports"},(0,n.__)("Email Reports","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{id:"console_email_reports",checked:t.console_email_reports,onChange:function(e){a("console_email_reports",e)}}),rankMath.isSettingsPage&&wp.element.createElement("div",{className:"field-description"},(0,n.__)("Turn on email reports.","seo-by-rank-math")))),rankMath.isSettingsPage&&t.console_email_reports&&wp.element.createElement("div",{className:"field-row field-type-text field-id-console_email_frequency"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_email_frequency"},(0,n.__)("Email Frequency","seo-by-rank-math"),!rankMath.isPro&&wp.element.createElement("span",{className:"rank-math-pro-badge"},wp.element.createElement("a",{href:(0,r.A)("seo-email-reporting","Email Frequency Toggle"),target:"_blank",rel:"noopener noreferrer"},(0,n.__)("PRO","seo-by-rank-math"))))),wp.element.createElement("div",{className:"field-td"},!rankMath.isPro&&wp.element.createElement(U.SelectControl,{value:"",options:{monthly:(0,n.__)("Every 30 days","seo-by-rank-math")},label:"",disabled:!0}),(0,ge.applyFilters)("rank_math_analytics_console_email_frequency","",t,a),wp.element.createElement("div",{className:"field-description"},(0,n.__)("Email report frequency.","seo-by-rank-math")))),(0,ge.applyFilters)("rank_math_analytics_options_email_report","",t,a))}};function qe(e){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(e)}function $e(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function Ye(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(a),!0).forEach(function(t){Ke(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):$e(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function Ke(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=qe(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=qe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==qe(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Je(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Qe(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?Qe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qe(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}a.dn(ze);const Xe=function(e){var t,a,r,s=e.data,i=e.updateData,l=Je((0,P.useState)({days:null===(t=rankMath)||void 0===t||null===(t=t.dbInfo)||void 0===t?void 0:t.days,rows:null===(a=rankMath)||void 0===a||null===(a=a.dbInfo)||void 0===a?void 0:a.rows,size:null===(r=rankMath)||void 0===r||null===(r=r.dbInfo)||void 0===r?void 0:r.size,isDeleting:!1,isUpdating:!1,isCanceling:!1,updateBtnText:rankMath.isFetching?(0,n.__)("Fetching in Progress","seo-by-rank-math"):(0,n.__)("Update data manually","seo-by-rank-math"),isFetching:rankMath.isFetching||!1}),2),c=l[0],m=l[1],d=c.isDeleting,u=c.days,h=c.rows,y=c.size,_=c.isUpdating,p=c.isCanceling,b=c.updateBtnText,f=c.isFetching,k=s.isSiteConnected,g=s.isAuthorized,w=s.searchConsole,v=s.allServices,E=s.console_caching_control,S=s.analytics_stats;if(!k)return wp.element.createElement(ve,s);if(!g)return wp.element.createElement(we,s);var A=(null==v?void 0:v.accounts)||[];(0,P.useEffect)(function(){(0,o.isEmpty)(A)&&xe("google_check_all_services").done(function(e){w.sites=e.sites,e.inSearchConsole?e.isVerified||xe("verify_site_console"):xe("add_site_console").done(function(e){w.sites=e.sites}),w.profile=e.sites[e.homeUrl],i("searchConsole",w),(0,o.isEmpty)(e.adsenseAccounts)||(v.adsenseAccounts=e.adsenseAccounts||{},i("allServices",v)),(0,o.isEmpty)(e.accounts)||(v.accounts=e.accounts,i("allServices",v))})},[]);return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-wizard",className:"field-metabox field-list"},wp.element.createElement(Ve,{data:s,updateData:i}),wp.element.createElement(U.PrivacyBox,{className:"width-100"}),rankMath.isSettingsPage&&wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row rank-math-advanced-option field-id-console_caching_control field-type-text"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_caching_control"},(0,n.__)("Analytics Database","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.TextControl,{type:"number",autoCorrect:"off",autoComplete:"off",autoCapitalize:"none",variant:"regular-text",spellCheck:!1,value:E,onBlur:function(e){var t,a=(null==e||null===(t=e.target)||void 0===t||null===(t=t.value)||void 0===t?void 0:t.trim())||"",n=parseInt(a);isNaN(n)||i("console_caching_control",n)},onChange:function(e){i("console_caching_control",e)},placeholder:(0,n.__)("Enter number of days. E.g. 90","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description",dangerouslySetInnerHTML:{__html:rankMath.fields.console_caching_control.description}}),wp.element.createElement("br",null),wp.element.createElement(U.Button,{className:"button-small",onClick:function(){var e=E||90,t=-1===e?rankMath.confirmClearImportedData:rankMath.confirmClear90DaysCache;window.confirm(t+" "+rankMath.confirmAction)&&(d||(m(function(e){return Ye(Ye({},e),{},{isDeleting:!0})}),xe("analytics_delete_cache",{days:e},"GET").done(function(e){e&&e.success&&m(function(t){return Ye(Ye({},t),{},{isDeleting:!1,days:null==e?void 0:e.days,rows:null==e?void 0:e.rows,size:null==e?void 0:e.size})})})))},disabled:d},d?(0,n.__)("Deleting dataâ€¦","seo-by-rank-math"):(0,n.__)("Delete data","seo-by-rank-math")),"Â Â ",wp.element.createElement(U.Button,{className:"button-small",onClick:function(){if(!_){var e=E||90;m(function(e){return Ye(Ye({},e),{},{isUpdating:!0,updateBtnText:(0,n.__)("Starting updateâ€¦","seo-by-rank-math")})}),xe("analytic_start_fetching",{days:e},"GET").done(function(e){e&&e.success?m(function(e){return Ye(Ye({},e),{},{isUpdating:!1,updateBtnText:(0,n.__)("Fetching in Progress","seo-by-rank-math"),isFetching:!0})}):setTimeout(function(){m(function(e){return Ye(Ye({},e),{},{updateBtnText:(0,n.__)("Update data manually","seo-by-rank-math")})})},2e3)})}},disabled:_||f},b),"Â Â ",wp.element.createElement(U.Button,{className:"button-small is-destructive",onClick:function(){p||(m(function(e){return Ye(Ye({},e),{},{isCanceling:!0})}),xe("analytic_cancel_fetching",{},"GET").done(function(e){m(function(e){return Ye(Ye({},e),{},{isCanceling:!1})}),e&&e.success&&window.location.reload()}))},disabled:!f||p},(0,n.__)("Cancel Fetch","seo-by-rank-math")),wp.element.createElement("br",null),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-calendar-alt"})," Cached Days: ",wp.element.createElement("strong",null,u)),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-editor-ul"})," Data Rows: ",wp.element.createElement("strong",null,h)),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-editor-code"})," Size: ",wp.element.createElement("strong",null,y)))),(0,ge.applyFilters)("rank_math_settings_general_analytics_stats","",s,i),wp.element.createElement("div",{className:"field-row field-type-toggle field-id-analytics_stats"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"analytics_stats"},(0,n.__)("Frontend Stats Bar","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(U.ToggleControl,{id:"analytics_stats",checked:S,onChange:function(e){i("analytics_stats",e)}}),wp.element.createElement("div",{className:"field-description"},(0,n.__)("Enable this option to show Analytics Stats on the front just after the admin bar.","seo-by-rank-math"))))),wp.element.createElement(ze,{data:s,updateData:i})))};function Ze(e){return Ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ze(e)}function et(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function tt(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?et(Object(a),!0).forEach(function(t){at(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):et(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function at(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=Ze(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=Ze(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ze(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}a.dn(Xe);const nt=[{id:"analytics",type:"component",Component:(0,J.compose)((0,Q.withSelect)(function(e,t){var a=e("rank-math-settings").getAnalytics();return tt(tt({},t),{},{data:a})}),(0,Q.withDispatch)(function(e,t){var a=t.data;return{updateData:function(t,n){var r={searchConsole:(null==a?void 0:a.searchConsole)||{},analyticsData:(null==a?void 0:a.analyticsData)||{}};e("rank-math-settings").updateAnalytics(tt(tt({},a),{},at({},t,n),r))}}}))(Xe)},{id:"searchConsole",type:"hidden"},{id:"analyticsData",type:"hidden"},{id:"console_caching_control",type:"hidden"},{id:"analytics_stats",type:"hidden"},{id:"console_email_reports",type:"hidden"}],rt={id:"analytics",type:"component",name:"analytics",header:{title:(0,n.__)("Analytics","seo-by-rank-math"),description:(0,n.__)("See your Google Search Console, Analytics and AdSense data without leaving your WP dashboard.","seo-by-rank-math"),link:(0,r.A)("analytics-settings","Options Panel Analytics Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-search-console"}),(0,n.__)("Analytics","seo-by-rank-math")),fields:nt};function ot(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,c=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return st(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?st(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function st(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}const it=(0,o.map)((0,o.entries)(rankMath.choices.accessibleTaxonomies),function(e){var t=ot(e,2);return{id:t[0],label:t[1].label}});var lt=rankMath.llmsUrl,ct=(0,o.reject)(B.A,{id:"attachment"}),mt=(0,o.reject)(it,{id:"post_format"});const dt=[{type:"notice",status:"info",children:wp.element.createElement(React.Fragment,null,(0,n.__)("Your llms.txt file is available at: ","seo-by-rank-math"),wp.element.createElement("a",{href:lt,target:"_blank",rel:"noreferrer"},lt))},{id:"llms_post_types",type:"checkboxlist",name:(0,n.__)("Select Post Types","seo-by-rank-math"),desc:(0,n.__)("Select the post types to be included in the llms.txt file.","seo-by-rank-math"),options:ct,toggleAll:!0,classes:"rank-math-advanced-option"},{id:"llms_taxonomies",type:"checkboxlist",name:(0,n.__)("Select Taxonomies","seo-by-rank-math"),desc:(0,n.__)("Select the taxonomies to be included in the llms.txt file.","seo-by-rank-math"),options:mt,toggleAll:!0,classes:"rank-math-advanced-option"},{id:"llms_limit",type:"text",name:(0,n.__)("Posts/Terms Limit","seo-by-rank-math"),desc:(0,n.__)("Maximum number of links to include for each post type.","seo-by-rank-math"),attributes:{type:"number",min:1},default:50,classes:"rank-math-advanced-option"},{id:"llms_extra_content",type:"textarea",name:(0,n.__)("Additional Content","seo-by-rank-math"),desc:(0,n.__)("Add any extra text or links you'd like to include in your llms.txt file manually.","seo-by-rank-math"),classes:"rank-math-advanced-option"}],ut={links:m,breadcrumbs:S,images:C,webmaster:x,robots:L,llms:{name:"llms",header:{title:(0,n.__)("Edit llms.txt","seo-by-rank-math"),description:(0,n.__)("Configure your llms.txt file for custom crawling/indexing rules.","seo-by-rank-math"),link:(0,r.A)("llms","Options Panel LLMS Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-bot"}),(0,n.__)("Edit llms.txt","seo-by-rank-math")),fields:dt},others:z,blocks:$,woocommerce:K,htaccess:ne,"content-ai":be,redirections:oe,"404-monitor":ke,analytics:rt}}}]);PK     ’ŠU]'=É�   �     assets/admin/js/blocks.jsnu „[µü¤        !function(){var e={6942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";var e=lodash,t=wp.blocks,r=wp.element.createElement("svg",{viewBox:"0 0 462.03 462.03",xmlns:"http://www.w3.org/2000/svg",width:"20"},wp.element.createElement("g",null,wp.element.createElement("path",{d:"m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"}),wp.element.createElement("path",{d:"m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"}))),o=wp.i18n,a={attributes:{questions:[{visible:!0,titleWrapper:"div",title:"Question",content:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."}]}},i=wp.element,l=wp.components,s=wp.blockEditor;function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=rankMath.links[e]||"";if(!n)return"#";if(!t)return n;var r={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"};return n+"?"+Object.keys(r).map((function(e){return"".concat(e,"=").concat(r[e])})).join("&")}var c=wp.data;function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m(Object(n),!0).forEach((function(t){h(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function h(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=(0,c.withSelect)((function(e,t){var n=(0,e("core/block-editor").getSettings)().imageSizes;return f(f({},t),{},{imageSizes:n})}))((function(t){var n=t.imageSizes,r=t.attributes,a=t.setAttributes,i=function(t){return(0,e.map)(t,(function(e){var t=e.name;return{value:e.slug,label:t}}))}(n);return wp.element.createElement(s.InspectorControls,{key:"inspector"},wp.element.createElement(l.PanelBody,{title:(0,o.__)("FAQ Options","rank-math")},wp.element.createElement(l.SelectControl,{label:(0,o.__)("List Style","rank-math"),value:r.listStyle,options:[{value:"",label:(0,o.__)("None","rank-math")},{value:"numbered",label:(0,o.__)("Numbered","rank-math")},{value:"unordered",label:(0,o.__)("Unordered","rank-math")}],onChange:function(e){a({listStyle:e})}}),wp.element.createElement(l.SelectControl,{label:(0,o.__)("Title Wrapper","rank-math"),value:r.titleWrapper,options:[{value:"h2",label:(0,o.__)("H2","rank-math")},{value:"h3",label:(0,o.__)("H3","rank-math")},{value:"h4",label:(0,o.__)("H4","rank-math")},{value:"h5",label:(0,o.__)("H5","rank-math")},{value:"h6",label:(0,o.__)("H6","rank-math")},{value:"p",label:(0,o.__)("P","rank-math")},{value:"div",label:(0,o.__)("DIV","rank-math")}],onChange:function(e){a({titleWrapper:e})}}),wp.element.createElement(l.SelectControl,{label:(0,o.__)("Image Size","rank-math"),value:r.sizeSlug,options:i,onChange:function(e){a({sizeSlug:e})}})),wp.element.createElement(l.PanelBody,{title:(0,o.__)("Styling Options","rank-math")},wp.element.createElement(l.TextControl,{label:(0,o.__)("Title Wrapper CSS Class(es)","rank-math"),value:r.titleCssClasses,onChange:function(e){a({titleCssClasses:e})}}),wp.element.createElement(l.TextControl,{label:(0,o.__)("Content Wrapper CSS Class(es)","rank-math"),value:r.contentCssClasses,onChange:function(e){a({contentCssClasses:e})}}),wp.element.createElement(l.TextControl,{label:(0,o.__)("List CSS Class(es)","rank-math"),value:r.listCssClasses,onChange:function(e){a({listCssClasses:e})}})))})),y=n(6942),d=n.n(y);function v(t,n){var r=(0,c.select)("core").getMedia,o=t?r(t):null;return null===o?null:n?function(t,n){var r=(0,e.get)(t,["media_details","sizes",n,"source_url"]);return r||(0,e.get)(t,["media_details","sizes","full","source_url"])}(o,n):o}var g=(0,c.withSelect)((function(e,t){var n=t.imageID,r=t.sizeSlug;return{imageUrl:n?v(n,r):null}}))((function(e){var t=e.imageUrl;return t?wp.element.createElement("img",{src:t,alt:""}):null})),w=function(e){var t=e.imageID,n=e.sizeSlug,r=e.open,a=e.removeImage,i=e.addButtonLabel,s=void 0===i?(0,o.__)("Add Image","rank-math"):i;return wp.element.createElement("div",{className:"rank-math-media-placeholder"},t>0&&wp.element.createElement(g,{imageID:t,sizeSlug:n}),t>0?wp.element.createElement(l.Button,{icon:"edit",className:"rank-math-replace-image",onClick:r}):wp.element.createElement(l.Button,{onClick:r,className:"rank-math-add-image",isPrimary:!0},s),t>0&&wp.element.createElement(l.Button,{icon:"no-alt",className:"rank-math-delete-image",onClick:a}))},k=wp.hooks;function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function S(e){return function(e){if(Array.isArray(e))return E(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function C(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,T(r.key),r)}}function O(e,t,n){return t=P(t),function(e,t){if(t&&("object"==_(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,j()?Reflect.construct(t,n||[],P(e).constructor):t.apply(e,n))}function j(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(j=function(){return!!e})()}function P(e){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},P(e)}function A(e,t){return A=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},A(e,t)}function N(e,t,n){return(t=T(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e){var t=function(e,t){if("object"!=_(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_(t)?t:t+""}var x=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return N(e=O(this,t,[].concat(r)),"toggleVisibility",(function(){var t=e.props,n=t.setAttributes,r=t.index,o=S(e.props.questions);o[r].visible=!e.props.visible,n({questions:o})})),N(e,"deleteQuestion",(function(){var t=e.props,n=t.setAttributes,r=t.index,o=S(e.props.questions);o.splice(r,1),n({questions:o})})),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&A(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){var e=this,t=this.props,n=t.title,r=t.content,a=t.visible,i=t.imageID,u=t.sizeSlug,c=t.titleWrapper,p=t.titleCssClasses,m=t.contentCssClasses,f=d()("rank-math-question-wrapper",{"question-not-visible":!a});return wp.element.createElement("div",{className:f},wp.element.createElement("div",{className:"rank-math-item-header"},wp.element.createElement(s.RichText,{tagName:c,className:"rank-math-faq-question rank-math-block-title"+p,value:n,onChange:function(t){e.setQuestionProp("title",t)},placeholder:(0,o.__)("Questionâ€¦","rank-math")}),wp.element.createElement("div",{className:"rank-math-block-actions"},(0,k.applyFilters)("rank_math_block_faq_actions","",this.props,this),wp.element.createElement(l.Button,{className:"rank-math-item-visbility",icon:a?"visibility":"hidden",onClick:this.toggleVisibility,label:(0,o.__)("Hide Question","rank-math"),showTooltip:!0}),wp.element.createElement(l.Button,{icon:"trash",className:"rank-math-item-delete",onClick:this.deleteQuestion,label:(0,o.__)("Delete Question","rank-math"),showTooltip:!0}))),wp.element.createElement("div",{className:"rank-math-item-content"},wp.element.createElement(s.RichText,{tagName:"div",className:"rank-math-faq-answer "+m,value:r,onChange:function(t){e.setQuestionProp("content",t)},placeholder:(0,o.__)("Enter the answer to the question","rank-math")}),wp.element.createElement(s.MediaUpload,{allowedTypes:["image"],multiple:!1,value:i,render:function(t){var n=t.open;return wp.element.createElement(w,{imageID:i,sizeSlug:u,open:n,removeImage:function(){e.setQuestionProp("imageID",0)}})},onSelect:function(t){e.setQuestionProp("imageID",t.id)}})))}},{key:"setQuestionProp",value:function(e,t){var n=this.props,r=n.setAttributes,o=n.index,a=S(this.props.questions);a[o][e]=t,r({questions:a})}}])&&C(n.prototype,r),a&&C(n,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,a}(i.Component),D=x,I=function(e){return"".concat(e,"-").concat((new Date).getTime())};function R(e){return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},R(e)}function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},q.apply(null,arguments)}function z(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return B(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function M(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,$(r.key),r)}}function Q(e,t,n){return t=H(t),function(e,t){if(t&&("object"==R(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,W()?Reflect.construct(t,n||[],H(e).constructor):t.apply(e,n))}function W(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(W=function(){return!!e})()}function H(e){return H=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},H(e)}function L(e,t){return L=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},L(e,t)}function $(e){var t=function(e,t){if("object"!=R(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=R(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==R(t)?t:t+""}var F=function(t){function n(){var e,t,r,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);for(var a=arguments.length,i=new Array(a),l=0;l<a;l++)i[l]=arguments[l];return e=Q(this,n,[].concat(i)),t=e,o=function(){var t=z(e.props.attributes.questions);t.push({id:I("faq-question"),title:"",content:"",visible:!0}),e.props.setAttributes({questions:t})},(r=$(r="addNew"))in t?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&L(e,t)}(n,t),r=n,(a=[{key:"render",value:function(){var e=this,t=this.props,n=t.className,r=t.isSelected,a=this.props.attributes.textAlign;return wp.element.createElement("div",{id:"rank-math-faq",className:"rank-math-block "+n},r&&wp.element.createElement(b,this.props),r&&wp.element.createElement(i.Fragment,null,wp.element.createElement(s.BlockControls,null,wp.element.createElement(s.AlignmentToolbar,{value:a,onChange:function(t){return e.props.setAttributes({textAlign:t})}}))),wp.element.createElement("ul",{style:{textAlign:a}},this.renderQuestions()),wp.element.createElement(l.Button,{isPrimary:!0,onClick:this.addNew},(0,o.__)("Add New FAQ","rank-math")),wp.element.createElement("a",{href:u("faq-schema-block","Add New FAQ"),rel:"noopener noreferrer",target:"_blank",title:(0,o.__)("More Info","rank-math"),className:"rank-math-block-info"},wp.element.createElement(l.Dashicon,{icon:"info"})))}},{key:"renderQuestions",value:function(){var t=this,n=this.props.attributes,r=n.sizeSlug,o=n.titleWrapper,a=n.titleCssClasses,i=n.contentCssClasses,l=this.props.attributes.questions;return(0,e.isEmpty)(l)&&(l=[{id:I("faq-question"),title:"",content:"",visible:!0}]),l.map((function(e,n){return wp.element.createElement("li",{key:e.id},wp.element.createElement(D,q({},e,{index:n,key:e.id+"-question",questions:l,setAttributes:t.props.setAttributes,sizeSlug:r,titleWrapper:o,titleCssClasses:a,contentCssClasses:i})))}))}}])&&M(r.prototype,a),c&&M(r,c),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,a,c}(i.Component),U=F,V={from:[{type:"block",blocks:["yoast/faq-block"],transform:function(e){var n={titleWrapper:"h3",questions:e.questions.map((function(e){return{title:e.jsonQuestion,content:e.jsonAnswer,visible:!0}})),className:e.className};return(0,t.createBlock)("rank-math/faq-block",n)}}]},Y=function(t){var n=t.attributes,r=n.questions,o=n.titleWrapper;return(0,e.isEmpty)(r)?null:wp.element.createElement("div",null,r.map((function(t,n){return(0,e.isEmpty)(t.title)||(0,e.isEmpty)(t.content)||!1===t.visible?null:wp.element.createElement("div",{className:"rank-math-faq-item",key:n},wp.element.createElement(s.RichText.Content,{tagName:o,value:t.title,className:"rank-math-question"}),wp.element.createElement(s.RichText.Content,{tagName:"div",value:t.content,className:"rank-math-answer"}))})))},G={attributes:{steps:[{visible:!0,titleWrapper:"div",title:"Step # 1",content:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."}]}};function J(e){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},J(e)}function K(e){return function(e){if(Array.isArray(e))return X(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return X(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?X(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Z(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ae(r.key),r)}}function ee(e,t,n){return t=ne(t),function(e,t){if(t&&("object"==J(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,te()?Reflect.construct(t,n||[],ne(e).constructor):t.apply(e,n))}function te(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(te=function(){return!!e})()}function ne(e){return ne=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ne(e)}function re(e,t){return re=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},re(e,t)}function oe(e,t,n){return(t=ae(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ae(e){var t=function(e,t){if("object"!=J(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=J(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==J(t)?t:t+""}var ie=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return oe(e=ee(this,t,[].concat(r)),"toggleVisibility",(function(){var t=e.props,n=t.setAttributes,r=t.index,o=K(e.props.steps);o[r].visible=!e.props.visible,n({steps:o})})),oe(e,"deleteStep",(function(){var t=e.props,n=t.setAttributes,r=t.index,o=K(e.props.steps);o.splice(r,1),n({steps:o})})),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&re(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){var e=this,t=this.props,n=t.title,r=t.content,a=t.visible,i=t.imageID,u=t.sizeSlug,c=t.titleWrapper,p=t.titleCssClasses,m=t.contentCssClasses,f=d()("rank-math-step-wrapper",{"step-not-visible":!a});return wp.element.createElement("div",{className:f},wp.element.createElement("div",{className:"rank-math-item-header"},wp.element.createElement(s.RichText,{tagName:c,className:"rank-math-howto-step-title rank-math-block-title"+p,value:n,onChange:function(t){e.setStepProp("title",t)},placeholder:(0,o.__)("Enter a step title","rank-math")}),wp.element.createElement("div",{className:"rank-math-block-actions"},(0,k.applyFilters)("rank_math_block_howto_actions","",this.props),wp.element.createElement(l.Button,{className:"rank-math-item-visbility",icon:a?"visibility":"hidden",onClick:this.toggleVisibility,title:(0,o.__)("Hide Step","rank-math")}),wp.element.createElement(l.Button,{icon:"trash",className:"rank-math-item-delete",onClick:this.deleteStep,title:(0,o.__)("Delete Step","rank-math")}))),wp.element.createElement(s.MediaUpload,{allowedTypes:["image"],multiple:!1,value:i,render:function(t){var n=t.open;return wp.element.createElement(w,{imageID:i,sizeSlug:u,open:n,addButtonLabel:(0,o.__)("Add Step Image","rank-math"),removeImage:function(){e.setStepProp("imageID",0)}})},onSelect:function(t){e.setStepProp("imageID",t.id)}}),wp.element.createElement(s.RichText,{tagName:"div",className:"rank-math-howto-step-content"+m,value:r,onChange:function(t){e.setStepProp("content",t)},placeholder:(0,o.__)("Enter a step description","rank-math")}))}},{key:"setStepProp",value:function(e,t){var n=this.props,r=n.setAttributes,o=n.index,a=K(this.props.steps);a[o][e]=t,r({steps:a})}}])&&Z(n.prototype,r),a&&Z(n,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,a}(i.Component),le=ie;function se(e){return se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},se(e)}function ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ue(Object(n),!0).forEach((function(t){pe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function pe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=se(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=se(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==se(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var me=(0,c.withSelect)((function(e,t){var n=(0,e("core/block-editor").getSettings)().imageSizes;return ce(ce({},t),{},{imageSizes:n})}))((function(t){var n=t.imageSizes,r=t.attributes,a=t.setAttributes,i=function(t){return(0,e.map)(t,(function(e){var t=e.name;return{value:e.slug,label:t}}))}(n);return wp.element.createElement(s.InspectorControls,{key:"inspector"},wp.element.createElement(l.PanelBody,{title:(0,o.__)("HowTo Options","rank-math")},wp.element.createElement(l.SelectControl,{label:(0,o.__)("List Style","rank-math"),value:r.listStyle,options:[{value:"",label:(0,o.__)("None","rank-math")},{value:"numbered",label:(0,o.__)("Numbered","rank-math")},{value:"unordered",label:(0,o.__)("Unordered","rank-math")}],onChange:function(e){a({listStyle:e})}}),wp.element.createElement(l.SelectControl,{label:(0,o.__)("Title Wrapper","rank-math"),value:r.titleWrapper,options:[{value:"h2",label:(0,o.__)("H2","rank-math")},{value:"h3",label:(0,o.__)("H3","rank-math")},{value:"h4",label:(0,o.__)("H4","rank-math")},{value:"h5",label:(0,o.__)("H5","rank-math")},{value:"h6",label:(0,o.__)("H6","rank-math")},{value:"p",label:(0,o.__)("P","rank-math")},{value:"div",label:(0,o.__)("DIV","rank-math")}],onChange:function(e){a({titleWrapper:e})}}),wp.element.createElement(l.SelectControl,{label:(0,o.__)("Main Image Size","rank-math"),value:r.mainSizeSlug,options:i,onChange:function(e){a({mainSizeSlug:e})}}),wp.element.createElement(l.SelectControl,{label:(0,o.__)("Image Size","rank-math"),value:r.sizeSlug,options:i,onChange:function(e){a({sizeSlug:e})}})),wp.element.createElement(l.PanelBody,{title:(0,o.__)("Styling Options","rank-math")},wp.element.createElement(l.TextControl,{label:(0,o.__)("Step Title Wrapper CSS Class(es)","rank-math"),value:r.titleCssClasses,onChange:function(e){a({titleCssClasses:e})}}),wp.element.createElement(l.TextControl,{label:(0,o.__)("Step Content Wrapper CSS Class(es)","rank-math"),value:r.contentCssClasses,onChange:function(e){a({contentCssClasses:e})}}),wp.element.createElement(l.TextControl,{label:(0,o.__)("Step List CSS Class(es)","rank-math"),value:r.listCssClasses,onChange:function(e){a({listCssClasses:e})}})))}));function fe(e){return fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fe(e)}function he(){return he=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},he.apply(null,arguments)}function be(e){return function(e){if(Array.isArray(e))return ye(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ye(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ye(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ye(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function de(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Se(r.key),r)}}function ve(e,t,n){return t=we(t),function(e,t){if(t&&("object"==fe(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ge()?Reflect.construct(t,n||[],we(e).constructor):t.apply(e,n))}function ge(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(ge=function(){return!!e})()}function we(e){return we=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},we(e)}function ke(e,t){return ke=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ke(e,t)}function _e(e,t,n){return(t=Se(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Se(e){var t=function(e,t){if("object"!=fe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==fe(t)?t:t+""}var Ee=function(t){function n(){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),_e(t=ve(this,n,arguments),"addNew",(function(){var n=t.props.attributes.steps,r=(0,e.isEmpty)(n)?[]:be(n);r.push({id:I("howto-step"),title:"",content:"",visible:!0}),t.props.setAttributes({steps:r})})),_e(t,"toggleDuration",(function(){t.props.setAttributes({hasDuration:!t.props.attributes.hasDuration})})),_e(t,"onSelectImage",(function(e){(0,t.props.setAttributes)({imageID:e.id})})),_e(t,"removeImage",(function(){(0,t.props.setAttributes)({imageID:0})}));var r=t.props.attributes.steps;return(0,e.isEmpty)(r)&&t.addNew(),t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ke(e,t)}(n,t),r=n,(a=[{key:"render",value:function(){var e=this,t=this.props,n=t.className,r=t.isSelected,a=t.attributes,u=t.setAttributes,c=a.imageID,p=a.mainSizeSlug,m=a.textAlign;return wp.element.createElement("div",{id:"rank-math-howto",className:"rank-math-block "+n},r&&wp.element.createElement(me,this.props),r&&wp.element.createElement(i.Fragment,null,wp.element.createElement(s.BlockControls,null,wp.element.createElement(s.AlignmentToolbar,{value:m,onChange:function(t){return e.props.setAttributes({textAlign:t})}}))),wp.element.createElement(s.MediaUpload,{allowedTypes:["image"],multiple:!1,value:c,render:function(t){var n=t.open;return wp.element.createElement("div",{className:"rank-math-howto-final-image"},wp.element.createElement(w,{imageID:c,sizeSlug:p,open:n,addButtonLabel:(0,o.__)("Add Final Image","rank-math"),removeImage:e.removeImage}))},onSelect:this.onSelectImage}),wp.element.createElement(s.RichText,{style:{textAlign:m},tagName:"div",className:"rank-math-howto-description",value:a.description,onChange:function(e){u({description:e})},placeholder:(0,o.__)("Enter a main description","rank-math")}),wp.element.createElement("div",{className:"rank-math-howto-duration"},wp.element.createElement("div",{className:"components-base-control rank-math-howto-duration-label"},wp.element.createElement("span",null,(0,o.__)("Duration","rank-math")),wp.element.createElement(l.ToggleControl,{checked:a.hasDuration,onChange:this.toggleDuration})),wp.element.createElement("div",{className:"rank-math-howto-duration-fields"+(a.hasDuration?"":" hidden")},wp.element.createElement(l.TextControl,{value:a.timeLabel,placeholder:(0,o.__)("Total time:","rank-math"),onChange:function(e){u({timeLabel:e})}}),wp.element.createElement(l.TextControl,{type:"number",value:a.days,placeholder:(0,o.__)("DD","rank-math"),onChange:function(e){u({days:e})}}),wp.element.createElement(l.TextControl,{type:"number",value:a.hours,placeholder:(0,o.__)("HH","rank-math"),onChange:function(e){u({hours:e})}}),wp.element.createElement(l.TextControl,{type:"number",value:a.minutes,placeholder:(0,o.__)("MM","rank-math"),onChange:function(e){u({minutes:e})}})),wp.element.createElement("div",{className:"rank-math-howto-duration-instructions"+(a.hasDuration?"":" hidden")},(0,o.__)("Optional, use first field to describe the duration.","rank-math"))),(0,k.applyFilters)("rank_math_block_howto_data","",this.props),wp.element.createElement("ul",{style:{textAlign:m}},this.renderSteps()),wp.element.createElement(l.Button,{isPrimary:!0,onClick:this.addNew},(0,o.__)("Add New Step","rank-math")),wp.element.createElement("a",{href:"http://rankmath.com/blog/howto-schema/",title:(0,o.__)("More Info","rank-math"),target:"_blank",rel:"noopener noreferrer",className:"rank-math-block-info"},wp.element.createElement(l.Dashicon,{icon:"info"})))}},{key:"renderSteps",value:function(){var t=this,n=this.props.attributes,r=n.steps,o=n.sizeSlug,a=n.titleWrapper,i=n.titleCssClasses,l=n.contentCssClasses;return(0,e.isEmpty)(r)?null:r.map((function(e,n){return wp.element.createElement("li",{key:e.id},wp.element.createElement(le,he({},e,{index:n,key:e.id+"-step",steps:r,setAttributes:t.props.setAttributes,sizeSlug:o,titleWrapper:a,titleCssClasses:i,contentCssClasses:l})))}))}}])&&de(r.prototype,a),u&&de(r,u),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,a,u}(i.Component),Ce=Ee,Oe=function(t){var n=t.attributes,r=n.steps,o=n.titleWrapper;return(0,e.isEmpty)(r)?null:wp.element.createElement("div",null,r.map((function(e,t){return!1===e.visible?null:wp.element.createElement("div",{className:"rank-math-howto-step",key:t},e.title&&wp.element.createElement(s.RichText.Content,{tagName:o,value:e.title,className:"rank-math-howto-title"}),e.content&&wp.element.createElement(s.RichText.Content,{tagName:"div",value:e.content,className:"rank-math-howto-content"}))})))},je={from:[{type:"block",blocks:["yoast/how-to-block"],transform:function(e){var n={steps:e.steps.map((function(e){return{visible:!0,id:I("howto-step"),title:e.jsonName,content:e.jsonText}})),titleWrapper:"h3",hasDuration:e.hasDuration,days:e.days,hours:e.hours,minutes:e.minutes,description:e.jsonDescription,className:e.className,listStyle:e.unorderedList?"unordered":""};return(0,t.createBlock)("rank-math/howto-block",n)}}]};function Pe(){return Pe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Pe.apply(null,arguments)}const Ae=Object.create(null);var Ne=wp.compose,Te=wp.apiFetch,xe=n.n(Te),De=wp.url;const Ie={};function Re(e){let{className:t}=e;return(0,i.createElement)(l.Placeholder,{className:t},(0,o.__)("Block rendered as empty."))}function qe(e){let{response:t,className:n}=e;const r=(0,o.sprintf)((0,o.__)("Error loading block: %s"),t.errorMsg);return(0,i.createElement)(l.Placeholder,{className:n},r)}function ze(e){let{children:t,showLoader:n}=e;return(0,i.createElement)("div",{style:{position:"relative"}},n&&(0,i.createElement)("div",{style:{position:"absolute",top:"50%",left:"50%",marginTop:"-9px",marginLeft:"-9px"}},(0,i.createElement)(l.Spinner,null)),(0,i.createElement)("div",{style:{opacity:n?"0.3":1}},t))}function Be(n){const{attributes:r,block:o,className:a,httpMethod:l="GET",urlQueryArgs:s,skipBlockSupportAttributes:u=!1,EmptyResponsePlaceholder:c=Re,ErrorResponsePlaceholder:p=qe,LoadingResponsePlaceholder:m=ze}=n,f=(0,i.useRef)(!0),[h,b]=(0,i.useState)(!1),y=(0,i.useRef)(),[d,v]=(0,i.useState)(null),g=(0,Ne.usePrevious)(n),[w,k]=(0,i.useState)(!1);function _(){var e,n;if(!f.current)return;k(!0);let a=r&&(0,t.__experimentalSanitizeBlockAttributes)(o,r);u&&(a=function(e){const{backgroundColor:t,borderColor:n,fontFamily:r,fontSize:o,gradient:a,textColor:i,className:l,...s}=e,{border:u,color:c,elements:p,spacing:m,typography:f,...h}=(null==e?void 0:e.style)||Ie;return{...s,style:h}}(a));const i="POST"===l,c=i?null:null!==(e=a)&&void 0!==e?e:null,p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return(0,De.addQueryArgs)(`/wp/v2/block-renderer/${e}`,{context:"edit",...null!==t?{attributes:t}:{},...n})}(o,c,s),m=i?{attributes:null!==(n=a)&&void 0!==n?n:null}:null,h=y.current=xe()({path:p,data:m,method:i?"POST":"GET"}).then((e=>{f.current&&h===y.current&&e&&v(e.rendered)})).catch((e=>{f.current&&h===y.current&&v({error:!0,errorMsg:e.message})})).finally((()=>{f.current&&h===y.current&&k(!1)}));return h}const S=(0,Ne.useDebounce)(_,500);(0,i.useEffect)((()=>()=>{f.current=!1}),[]),(0,i.useEffect)((()=>{void 0===g?_():(0,e.isEqual)(g,n)||S()})),(0,i.useEffect)((()=>{if(!w)return;const e=setTimeout((()=>{b(!0)}),1e3);return()=>clearTimeout(e)}),[w]);const E=!!d,C=""===d,O=null==d?void 0:d.error;return w?(0,i.createElement)(m,Pe({},n,{showLoader:h}),E&&(0,i.createElement)(i.RawHTML,{className:a},d)):C||!E?(0,i.createElement)(c,n):O?(0,i.createElement)(p,Pe({response:d},n)):(0,i.createElement)(i.RawHTML,{className:a},d)}const Me={},Qe=(0,c.withSelect)((e=>{const t=e("core/editor");if(t){const e=t.getCurrentPostId();if(e&&"number"==typeof e)return{currentPostId:e}}return Me}))((e=>{let{urlQueryArgs:t=Me,currentPostId:n,...r}=e;const o=(0,i.useMemo)((()=>n?{post_id:n,...t}:t),[n,t]);return(0,i.createElement)(Be,Pe({urlQueryArgs:o},r))}));window&&window.wp&&window.wp.components&&(window.wp.components.ServerSideRender=(0,i.forwardRef)(((e,t)=>(function(e,t={}){const{since:n,version:r,alternative:o,plugin:a,link:i,hint:l}=t,s=`${e} is deprecated${n?` since version ${n}`:""}${r?` and will be removed${a?` from ${a}`:""} in version ${r}`:""}.${o?` Please use ${o} instead.`:""}${i?` See: ${i}`:""}${l?` Note: ${l}`:""}`;s in Ae||((0,k.doAction)("deprecated",e,t,s),console.warn(s),Ae[s]=!0)}("wp.components.ServerSideRender",{version:"6.2",since:"5.3",alternative:"wp.serverSideRender"}),(0,i.createElement)(Qe,Pe({},e,{ref:t}))))));var We,He=Qe;(0,t.updateCategory)("rank-math-blocks",{icon:r}),We=[(0,o.__)("FAQ","rank-math"),(0,o.__)("Frequently Asked Questions","rank-math"),(0,o.__)("Schema","rank-math"),(0,o.__)("SEO","rank-math"),(0,o.__)("Structured Data","rank-math"),(0,o.__)("Yoast","rank-math"),(0,o.__)("Rank Math","rank-math"),(0,o.__)("Block","rank-math"),(0,o.__)("Markup","rank-math"),(0,o.__)("Rich Snippet","rank-math")],(0,t.registerBlockType)("rank-math/faq-block",{title:(0,o.__)("FAQ by Rank Math","rank-math"),description:(0,o.__)("Easily add Schema-ready, SEO-friendly, Frequently Asked Questions to your content.","rank-math"),category:"rank-math-blocks",icon:"editor-ul",keywords:We,attributes:{listStyle:{type:"string"},sizeSlug:{type:"string",default:"thumbnail"},titleWrapper:{type:"string",default:"h3"},questions:{type:"array"},textAlign:{type:"string",default:""},listCssClasses:{type:"string",default:""},titleCssClasses:{type:"string",default:""},contentCssClasses:{type:"string",default:""}},example:a,edit:U,save:Y,transforms:V}),function(){var e=[(0,o.__)("HowTo","rank-math"),(0,o.__)("Schema","rank-math"),(0,o.__)("SEO","rank-math"),(0,o.__)("Structured Data","rank-math"),(0,o.__)("Yoast","rank-math"),(0,o.__)("Rank Math","rank-math"),(0,o.__)("Block","rank-math"),(0,o.__)("Markup","rank-math"),(0,o.__)("Rich Snippet","rank-math")],n=(0,k.applyFilters)("rank_math_block_howto_attributes",{hasDuration:{type:"boolean"},days:{type:"string"},hours:{type:"string"},minutes:{type:"string"},description:{type:"string"},steps:{type:"array"},sizeSlug:{type:"string",default:"full"},imageID:{type:"integer"},mainSizeSlug:{type:"string",default:"full"},titleWrapper:{type:"string",default:"h3"},textAlign:{type:"string",default:""},timeLabel:{type:"string"},listStyle:{type:"string"},listCssClasses:{type:"string",default:""},titleCssClasses:{type:"string",default:""},contentCssClasses:{type:"string",default:""}});(0,t.registerBlockType)("rank-math/howto-block",{title:(0,o.__)("HowTo by Rank Math","rank-math"),description:(0,o.__)("Easily add Schema-ready, SEO-friendly, HowTo block to your content.","rank-math"),category:"rank-math-blocks",icon:"editor-ol",supports:{multiple:!1},keywords:e,attributes:n,example:G,edit:Ce,save:Oe,transforms:je})}(),"undefined"==typeof rankMath||(0,e.isUndefined)(rankMath.canUser)||!rankMath.canUser.snippet||(0,e.isUndefined)(rankMath.schemas)||function(){var n=[(0,o.__)("Schema","rank-math"),(0,o.__)("Markup","rank-math"),(0,o.__)("Structured Data","rank-math"),(0,o.__)("Rich Snippet","rank-math"),(0,o.__)("SEO","rank-math"),(0,o.__)("Rank Math","rank-math"),(0,o.__)("Yoast","rank-math")];(0,t.registerBlockType)("rank-math/rich-snippet",{title:(0,o.__)("Schema by Rank Math","rank-math"),description:(0,o.__)("Add the Schema generated by Rank Math anywhere on your page using this Block.","rank-math"),category:"rank-math-blocks",icon:r,keywords:n,attributes:(0,k.applyFilters)("rank_math_block_schema_attributes",{post_id:{default:rankMath.objectID}}),edit:function(t){var n=t.setAttributes,r=t.attributes,a=[];return(0,e.forEach)(r,(function(t,i){"post_id"!==i?"className"!==i&&a.push(wp.element.createElement(l.TextControl,{key:i,label:(0,o.__)((0,e.startCase)(i),"rank-math"),value:r[i],type:"string",onChange:function(e){var t={};t[i]=e,n(t)}})):a.push(wp.element.createElement(l.TextControl,{key:i,label:(0,o.__)((0,e.startCase)(i),"rank-math"),value:r[i],type:"number",min:1,step:1,onChange:function(e){var t={};t[i]=e||rankMath.objectID,n(t)}}))})),wp.element.createElement("div",null,wp.element.createElement(s.InspectorControls,{key:"inspector"},a),wp.element.createElement(He,{block:"rank-math/rich-snippet",attributes:r}))}})}()}()}();PK     ’ŠU]�&´fúÂ  úÂ    assets/admin/js/settings.jsnu „[µü¤        !function(){var t,e,n={7142:function(t,e,n){"use strict";n.d(e,{A:function(){return i}}),n.dn(i);var r=n(1669),o=n.n(r);function i(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];e=e||"error",r=r||!1;var u=o()('<div class="notice notice-'+e+" "+i+' is-dismissible"><p>'+t+"</p></div>").hide();a||n.siblings(".notice").remove(),n.after(u),u.slideDown(),o()(document).trigger("wp-updates-notice-added"),o()("html,body").animate({scrollTop:u.offset().top-50},"slow"),r&&setTimeout(function(){u.fadeOut(function(){u.remove()})},r)}},8809:function(t,e,n){"use strict";function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[t]||"";if(!r)return"#";if(!e)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(e),utm_campaign:"WP"},i=r,a="",u=r.indexOf("#");-1!==u&&(i=r.substring(0,u),a=r.substring(u));var c=Object.keys(o).map(function(t){return"".concat(t,"=").concat(o[t])}).join("&"),l=i.includes("?")&&!i.endsWith("?")?"&":"?";return i+l+c+a+n}n.d(e,{A:function(){return r}}),n.dn(r)},8332:function(){},3423:function(){},1669:function(t){"use strict";t.exports=jQuery},8110:function(t){"use strict";t.exports=lodash},8303:function(t){"use strict";t.exports=window.rankMathComponents},2842:function(t){"use strict";t.exports=wp.apiFetch},8894:function(t){"use strict";t.exports=wp.compose},7562:function(t){"use strict";t.exports=wp.data},1386:function(t){"use strict";t.exports=wp.element},8566:function(t){"use strict";t.exports=wp.hooks},2470:function(t){"use strict";t.exports=wp.i18n},4011:function(t){"use strict";t.exports=wp.url},6942:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];n&&(t=a(t,i(n)))}return t}function i(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return o.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var n in t)r.call(t,n)&&t[n]&&(e=a(e,n));return e}function a(t,e){return e?t?t+" "+e:t+e:t}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={exports:{}};return n[t](i,i.exports,o),i.exports}o.m=n,o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce(function(e,n){return o.f[n](t,e),e},[]))},o.u=function(t){return{445:"instantIndexingSettings",466:"generalSettings",612:"titleSettings",919:"sitemapSettings"}[t]+".js"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},t={},e="rank-math:",o.l=function(n,r,i,a){if(t[n])t[n].push(r);else{var u,c;if(void 0!==i)for(var l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var f=l[s];if(f.getAttribute("src")==n||f.getAttribute("data-webpack")==e+i){u=f;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",o.nc&&u.setAttribute("nonce",o.nc),u.setAttribute("data-webpack",e+i),u.src=n),t[n]=[r];var p=function(e,r){u.onerror=u.onload=null,clearTimeout(d);var o=t[n];if(delete t[n],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach(function(t){return t(r)}),e)return e(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=p.bind(null,u.onerror),u.onload=p.bind(null,u.onload),c&&document.head.appendChild(u)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){var t={472:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var i=new Promise(function(n,o){r=t[e]=[n,o]});n.push(r[2]=i);var a=o.p+o.u(e),u=new Error;o.l(a,function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var i=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;u.message="Loading chunk "+e+" failed.\n("+i+": "+a+")",u.name="ChunkLoadError",u.type=i,u.request=a,r[1](u)}},"chunk-"+e,e)}};var e=function(e,n){var r,i,a=n[0],u=n[1],c=n[2],l=0;if(a.some(function(e){return 0!==t[e]})){for(r in u)o.o(u,r)&&(o.m[r]=u[r]);if(c)c(o)}for(e&&e(n);l<a.length;l++)i=a[l],o.o(t,i)&&t[i]&&t[i][0](),t[i]=0},n=self.webpackChunkrank_math=self.webpackChunkrank_math||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),function(){"use strict";var t={};o.r(t),o.d(t,{resetStore:function(){return st},resetdirtySettings:function(){return lt},updateAnalytics:function(){return ut},updateData:function(){return at},updateModules:function(){return ct}});var e={};o.r(e),o.d(e,{appData:function(){return bt},appUi:function(){return Ot}});var n={};o.r(n),o.d(n,{getAnalytics:function(){return Et},getAppData:function(){return jt},getData:function(){return kt},getModules:function(){return _t},getdirtySettings:function(){return Pt}});var r={};o.r(r),o.d(r,{setStep:function(){return Rt},updateStepData:function(){return Dt}});var i={};o.r(i),o.d(i,{appUi:function(){return Ft}});var a={};o.r(a),o.d(a,{getStepData:function(){return Bt}});var u=o(8110);const c=React,l=ReactDOM;function s(){return s=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},s.apply(null,arguments)}var f;!function(t){t.Pop="POP",t.Push="PUSH",t.Replace="REPLACE"}(f||(f={}));const p="popstate";function d(t,e){if(!1===t||null==t)throw new Error(e)}function m(t,e){if(!t){"undefined"!=typeof console&&console.warn(e);try{throw new Error(e)}catch(t){}}}function y(t,e){return{usr:t.state,key:t.key,idx:e}}function h(t,e,n,r){return void 0===n&&(n=null),s({pathname:"string"==typeof t?t:t.pathname,search:"",hash:""},"string"==typeof e?v(e):e,{state:n,key:e&&e.key||r||Math.random().toString(36).substr(2,8)})}function b(t){let{pathname:e="/",search:n="",hash:r=""}=t;return n&&"?"!==n&&(e+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(e+="#"===r.charAt(0)?r:"#"+r),e}function v(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substr(n),t=t.substr(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substr(r),t=t.substr(0,r)),t&&(e.pathname=t)}return e}function g(t,e,n,r){void 0===r&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,a=o.history,u=f.Pop,c=null,l=m();function m(){return(a.state||{idx:null}).idx}function v(){u=f.Pop;let t=m(),e=null==t?null:t-l;l=t,c&&c({action:u,location:w.location,delta:e})}function g(t){let e="null"!==o.location.origin?o.location.origin:o.location.href,n="string"==typeof t?t:b(t);return n=n.replace(/ $/,"%20"),d(e,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,e)}null==l&&(l=0,a.replaceState(s({},a.state,{idx:l}),""));let w={get action(){return u},get location(){return t(o,a)},listen(t){if(c)throw new Error("A history only accepts one active listener");return o.addEventListener(p,v),c=t,()=>{o.removeEventListener(p,v),c=null}},createHref:t=>e(o,t),createURL:g,encodeLocation(t){let e=g(t);return{pathname:e.pathname,search:e.search,hash:e.hash}},push:function(t,e){u=f.Push;let r=h(w.location,t,e);n&&n(r,t),l=m()+1;let s=y(r,l),p=w.createHref(r);try{a.pushState(s,"",p)}catch(t){if(t instanceof DOMException&&"DataCloneError"===t.name)throw t;o.location.assign(p)}i&&c&&c({action:u,location:w.location,delta:1})},replace:function(t,e){u=f.Replace;let r=h(w.location,t,e);n&&n(r,t),l=m();let o=y(r,l),s=w.createHref(r);a.replaceState(o,"",s),i&&c&&c({action:u,location:w.location,delta:0})},go:t=>a.go(t)};return w}var w;!function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"}(w||(w={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function S(t,e){if("/"===e)return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&"/"!==r?null:t.slice(n)||"/"}const O=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function j(t,e){void 0===e&&(e="/");let n,{pathname:r,search:o="",hash:i=""}="string"==typeof t?v(t):t;if(r)if(a=r,O.test(a))n=r;else{if(r.includes("//")){let t=r;r=x(r),m(!1,"Pathnames cannot have embedded double slashes - normalizing "+t+" -> "+r)}n=r.startsWith("/")?P(r.substring(1),"/"):P(r,e)}else n=e;var a;return{pathname:n,search:T(o),hash:D(i)}}function P(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(t=>{".."===t?n.length>1&&n.pop():"."!==t&&n.push(t)}),n.length>1?n.join("/"):"/"}function k(t,e,n,r){return"Cannot include a '"+t+"' character in a manually specified `to."+e+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function E(t){return t.filter((t,e)=>0===e||t.route.path&&t.route.path.length>0)}function _(t,e){let n=E(t);return e?n.map((t,e)=>e===n.length-1?t.pathname:t.pathnameBase):n.map(t=>t.pathnameBase)}function A(t,e,n,r){let o;void 0===r&&(r=!1),"string"==typeof t?o=v(t):(o=s({},t),d(!o.pathname||!o.pathname.includes("?"),k("?","pathname","search",o)),d(!o.pathname||!o.pathname.includes("#"),k("#","pathname","hash",o)),d(!o.search||!o.search.includes("#"),k("#","search","hash",o)));let i,a=""===t||""===o.pathname,u=a?"/":o.pathname;if(null==u)i=n;else{let t=e.length-1;if(!r&&u.startsWith("..")){let e=u.split("/");for(;".."===e[0];)e.shift(),t-=1;o.pathname=e.join("/")}i=t>=0?e[t]:"/"}let c=j(o,i),l=u&&"/"!==u&&u.endsWith("/"),f=(a||"."===u)&&n.endsWith("/");return c.pathname.endsWith("/")||!l&&!f||(c.pathname+="/"),c}const x=t=>t.replace(/\/\/+/g,"/"),C=t=>x(t.join("/")),T=t=>t&&"?"!==t?t.startsWith("?")?t:"?"+t:"",D=t=>t&&"#"!==t?t.startsWith("#")?t:"#"+t:"";Error;const R=["post","put","patch","delete"],M=(new Set(R),["get",...R]);new Set(M),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function U(){return U=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},U.apply(null,arguments)}const N=c.createContext(null);const I=c.createContext(null);const L=c.createContext(null);const F=c.createContext({outlet:null,matches:[],isDataRoute:!1});function B(){return null!=c.useContext(L)}function G(){return B()||d(!1),c.useContext(L).location}function W(t){c.useContext(I).static||c.useLayoutEffect(t)}function H(){let{isDataRoute:t}=c.useContext(F);return t?function(){let{router:t}=V($.UseNavigateStable),e=K(z.UseNavigateStable),n=c.useRef(!1);return W(()=>{n.current=!0}),c.useCallback(function(r,o){void 0===o&&(o={}),n.current&&("number"==typeof r?t.navigate(r):t.navigate(r,U({fromRouteId:e},o)))},[t,e])}():function(){B()||d(!1);let t=c.useContext(N),{basename:e,future:n,navigator:r}=c.useContext(I),{matches:o}=c.useContext(F),{pathname:i}=G(),a=JSON.stringify(_(o,n.v7_relativeSplatPath)),u=c.useRef(!1);return W(()=>{u.current=!0}),c.useCallback(function(n,o){if(void 0===o&&(o={}),!u.current)return;if("number"==typeof n)return void r.go(n);let c=A(n,JSON.parse(a),i,"path"===o.relative);null==t&&"/"!==e&&(c.pathname="/"===c.pathname?e:C([e,c.pathname])),(o.replace?r.replace:r.push)(c,o.state,o)},[e,r,a,i,t])}()}c.Component;var $=function(t){return t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t}($||{}),z=function(t){return t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId",t}(z||{});function V(t){let e=c.useContext(N);return e||d(!1),e}function K(t){let e=function(){let t=c.useContext(F);return t||d(!1),t}(),n=e.matches[e.matches.length-1];return n.route.id||d(!1),n.route.id}function q(t,e){null==t||t.v7_startTransition,void 0===(null==t?void 0:t.v7_relativeSplatPath)&&(!e||e.v7_relativeSplatPath),e&&(e.v7_fetcherPersist,e.v7_normalizeFormMethod,e.v7_partialHydration,e.v7_skipActionErrorRevalidation)}c.startTransition;function J(t){let{basename:e="/",children:n=null,location:r,navigationType:o=f.Pop,navigator:i,static:a=!1,future:u}=t;B()&&d(!1);let l=e.replace(/^\/*/,"/"),s=c.useMemo(()=>({basename:l,navigator:i,static:a,future:U({v7_relativeSplatPath:!1},u)}),[l,u,i,a]);"string"==typeof r&&(r=v(r));let{pathname:p="/",search:m="",hash:y="",state:h=null,key:b="default"}=r,g=c.useMemo(()=>{let t=S(p,l);return null==t?null:{location:{pathname:t,search:m,hash:y,state:h,key:b},navigationType:o}},[l,p,m,y,h,b,o]);return null==g?null:c.createElement(I.Provider,{value:s},c.createElement(L.Provider,{children:n,value:g}))}new Promise(()=>{});c.Component;function Q(t){return void 0===t&&(t=""),new URLSearchParams("string"==typeof t||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let r=t[n];return e.concat(Array.isArray(r)?r.map(t=>[n,t]):[[n,r]])},[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(t){}new Map;const Y=c.startTransition;l.flushSync,c.useId;function X(t){let{basename:e,children:n,future:r,window:o}=t,i=c.useRef();var a;null==i.current&&(i.current=(void 0===(a={window:o,v5Compat:!0})&&(a={}),g(function(t,e){let{pathname:n,search:r,hash:o}=t.location;return h("",{pathname:n,search:r,hash:o},e.state&&e.state.usr||null,e.state&&e.state.key||"default")},function(t,e){return"string"==typeof e?e:b(e)},null,a)));let u=i.current,[l,s]=c.useState({action:u.action,location:u.location}),{v7_startTransition:f}=r||{},p=c.useCallback(t=>{f&&Y?Y(()=>s(t)):s(t)},[s,f]);return c.useLayoutEffect(()=>u.listen(p),[u,p]),c.useEffect(()=>q(r),[r]),c.createElement(J,{basename:e,children:n,location:l.location,navigationType:l.action,navigator:u,future:r})}"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement;var Z,tt;function et(t){let e=c.useRef(Q(t)),n=c.useRef(!1),r=G(),o=c.useMemo(()=>function(t,e){let n=Q(t);return e&&e.forEach((t,r)=>{n.has(r)||e.getAll(r).forEach(t=>{n.append(r,t)})}),n}(r.search,n.current?null:e.current),[r.search]),i=H(),a=c.useCallback((t,e)=>{const r=Q("function"==typeof t?t(o):t);n.current=!0,i("?"+r,e)},[i,o]);return[o,a]}(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmit="useSubmit",t.UseSubmitFetcher="useSubmitFetcher",t.UseFetcher="useFetcher",t.useViewTransitionState="useViewTransitionState"})(Z||(Z={})),function(t){t.UseFetcher="useFetcher",t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"}(tt||(tt={}));var nt=o(1386),rt=o(7562),ot=o(8566);function it(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,ot.applyFilters)("rank_math_sanitize_settings",e,t,n),null!==r&&(r=(0,ot.applyFilters)("rank_math_sanitize_settings_value",r,t,n)),r=null===r?e:r,(0,ot.doAction)("rank_math_settings_changed",t,e,n),{type:"RANK_MATH_SETTINGS_DATA",key:t,value:e,settingsKey:n,settingsValue:r}}function at(t){return it("data",t,"data")}function ut(t){return it("analytics",t,"analytics")}function ct(t,e){var n=wp.data.select("rank-math-settings").getData();return n[t].isActive=e,(0,u.forEach)(n,function(e,r){if((0,u.includes)(e.dep_modules,t)){var o=!1;(0,u.forEach)(e.dep_modules,function(t){n[t].isActive||(o=!0)}),n[r].isDisabled=o,n[r].disabled=o}}),at(n)}function lt(){return it("dirtySettings",{})}function st(){return{type:"RESET_STORE"}}o(8332);function ft(t){return ft="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ft(t)}function pt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function dt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?pt(Object(n),!0).forEach(function(e){mt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function mt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=ft(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=ft(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ft(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var yt={data:(0,u.get)(rankMath,"data",{}),analytics:dt(dt(dt({},rankMath),(0,u.get)(rankMath,"data",{})),(0,u.get)(rankMath,"analytics",{})),dirtySettings:{}},ht=dt({},yt);function bt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:yt,e=arguments.length>1?arguments[1]:void 0,n=dt({},t.dirtySettings);return!1!==e.settingsKey&&(n=e.settingsValue),"RANK_MATH_SETTINGS_DATA"===e.type?"dirtySettings"===e.key?dt(dt({},t),{},{dirtySettings:e.value}):dt(dt({},t),{},mt(mt({},e.key,e.value),"dirtySettings",n)):"RESET_STORE"===e.type?ht:t}function vt(t){return vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vt(t)}function gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function wt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?gt(Object(n),!0).forEach(function(e){St(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):gt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function St(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=vt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=vt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==vt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ot(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?wt(wt({},t),{},St({},e.key,e.value)):t}function jt(t){return t.appData}function Pt(t){return t.appData.dirtySettings}function kt(t){return t.appData.data}function Et(t){return t.appData.analytics}function _t(t){return t.appData.modules}o(3423),(0,rt.register)((0,rt.createReduxStore)("rank-math-settings",{reducer:(0,rt.combineReducers)(e),selectors:n,actions:t}));function At(t,e){return{type:"RANK_MATH_APP_UI",key:t,value:e}}function xt(t){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xt(t)}function Ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Tt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=xt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=xt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==xt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t,e){return At(t,function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ct(Object(n),!0).forEach(function(e){Tt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ct(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({},e))}function Rt(t){return At("currentStep",t)}function Mt(t){return Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mt(t)}function Ut(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Nt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ut(Object(n),!0).forEach(function(e){It(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ut(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function It(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Mt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Mt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Mt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Lt={currentStep:"getting-started"};function Ft(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Lt,e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?Nt(Nt({},t),{},It({},e.key,e.value)):t}function Bt(t,e){return t.appUi[e]}(0,rt.register)((0,rt.createReduxStore)("rank-math-setup-wizard",{reducer:(0,rt.combineReducers)(i),selectors:a,actions:r}));var Gt=o(8303),Wt=o(2470),Ht=o(8809);const $t=function(){if(!rankMath.isPro)return wp.element.createElement("div",{className:"rank-math-unlock-pro-notice",id:"rank-math-unlock-pro-notice"},wp.element.createElement("a",{href:(0,Ht.A)("pro","Unlock PRO Options Panel Notice"),target:"_blank",className:"pro-link",rel:"noreferrer"},wp.element.createElement("p",null,(0,Wt.__)("Take your SEO to the Next Level! ","seo-by-rank-math"),wp.element.createElement("strong",null,(0,Wt.__)("Get Rank Math PRO! ","seo-by-rank-math")),wp.element.createElement("span",null,(0,Wt.__)("Click here to see all the exciting features.","seo-by-rank-math"))),wp.element.createElement("div",{className:"close-notice"},wp.element.createElement("span",{className:"dashicons dashicons-dismiss"}))))};o.dn($t);var zt=o(8894);const Vt=function(t){var e=t.title,n=t.description,r=t.link,o=t.linkText,i=void 0===o?(0,Wt.__)("Learn more","seo-by-rank-math"):o;return wp.element.createElement("header",{className:"rank-math-tab-header"},wp.element.createElement("h2",null,e),wp.element.createElement("p",null,n,r&&wp.element.createElement(React.Fragment,null," ",wp.element.createElement("a",{href:r,target:"_blank",rel:"noreferrer"},i),".")))};o.dn(Vt);var Kt=o(1669),qt=o.n(Kt),Jt=o(2842),Qt=o.n(Jt),Yt=o(7142);function Xt(t){return Xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xt(t)}var Zt=["validate","afterSave"];function te(){return te=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},te.apply(null,arguments)}function ee(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function ne(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ee(Object(n),!0).forEach(function(e){re(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ee(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function re(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Xt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Xt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Xt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function oe(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,u=[],c=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ie(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ie(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ie(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var ae=function(t,e){return"resetting"===e?(0,Wt.__)("Resettingâ€¦","seo-by-rank-math"):"resetted"===e?(0,Wt.__)("Resetted","seo-by-rank-math"):t.children},ue=function(t,e){return"updating"===e?(0,Wt.__)("Updatingâ€¦","seo-by-rank-math"):"updated"===e?(0,Wt.__)("Updated","seo-by-rank-math"):t.children},ce=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if((0,u.includes)(["roleCapabilities","redirections"],t))return{data:e,fields:{},updated:[]};var i={},a=[];return{data:(0,u.isUndefined)(n)?{}:(0,u.reduce)(n,function(t,n){return(0,u.isArray)(n.fields)&&0!==n.fields.length?"htaccess"===n.name?(t.htaccess_allow_editing=e.htaccess_allow_editing,t.htaccess_content=e.htaccess_content,(0,u.isEqual)(e.htaccess_content,o.htaccess_content)||a.push("htaccess_content"),t):((0,u.forEach)(n.fields,function(n){var c=n.id;if(r)(0,u.has)(n,"default")&&(t[c]=n.default,i[c]=n.type);else{var l=(""===e[c]||(0,u.isUndefined)(e[c]))&&(0,u.has)(n,"default")?n.default:e[c];t[c]=l,i[c]=n.type,"file"!==n.type||(0,u.isUndefined)(e[c+"_id"])||(t[c+"_id"]=e[c+"_id"],i[c]="text"),(0,u.isEqual)(l,o[c])||a.push(c)}}),t):t},{}),fields:i,updated:a}};const le=(0,zt.compose)((0,rt.withSelect)(function(t){return{settings:t("rank-math-settings").getdirtySettings(),data:t("rank-math-settings").getData()}}),(0,rt.withDispatch)(function(t,e){var n=e.type,r=e.settings,o=e.tabs,i=e.footer.applyButton;return{saveSettings:function(e,a){var c=ce(n,r,o,!1,a);e("updating"),Qt()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:c.data,fieldTypes:c.fields,updated:c.updated}}).then(function(n){return e("updated"),n?!(0,u.isUndefined)(n.notifications)&&n.notifications.length?((0,u.forEach)(n.notifications,function(t){var e=!(0,u.isEmpty)(t.error),n=e?t.error:t.success;(0,Yt.A)(n,e?"error":"success",qt()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice",!0)}),void qt()("html, body").animate({scrollTop:0},"fast")):n.error?((0,Yt.A)(n.error,"error",qt()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void qt()("html, body").animate({scrollTop:0},"fast")):(t("rank-math-settings").updateData(n.settings?n.settings:ne({},c.data)),n.success?((0,Yt.A)(n.success,"success",qt()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void qt()("html, body").animate({scrollTop:0},"fast")):(n&&!n.error&&i.afterSave&&i.afterSave(),e("updated"),void t("rank-math-settings").resetdirtySettings())):(e(""),void window.alert((0,Wt.__)("Something went wrong! Please try again.","seo-by-rank-math")))})},resetSettings:function(e){var i=ce(n,r,o,!0);e("resetting"),Qt()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:i.data,fieldTypes:i.fields,isReset:!0}}).then(function(n){if(!n)return e(""),void window.alert((0,Wt.__)("Something went wrong! Please try again.","seo-by-rank-math"));e("resetted"),t("rank-math-settings").updateData(n.settings?n.settings:ne({},i.data)),t("rank-math-settings").resetdirtySettings()})}}}))(function(t){var e=oe((0,nt.useState)(""),2),n=e[0],r=e[1],o=t.settings,i=t.data,a=t.resetSettings,c=t.saveSettings,l=t.footer,s=l.applyButton,f=s.validate,p=(s.afterSave,function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(s,Zt)),d=(0,nt.useRef)(null);return null===d.current&&(d.current=ne({},i)),(0,nt.useEffect)(function(){(0,u.includes)(["updated","resetted"],n)&&setTimeout(function(){return r("")},1e3)},[n]),wp.element.createElement("footer",{className:"form-footer rank-math-ui"},wp.element.createElement(Gt.Button,te({onClick:function(){window.confirm((0,Wt.__)("Are you sure? You want to reset settings.","seo-by-rank-math"))&&a(r)}},l.discardButton,{children:ae(l.discardButton,n)})),wp.element.createElement(Gt.Button,te({variant:"primary",onClick:function(){(!f||f())&&c(r,d.current)},disabled:(0,u.isEmpty)(o)},p,{children:ue(p,n)})))});var se=o(6942),fe=o.n(se);function pe(t){return pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pe(t)}var de=["id","type","content","Component","isDisabled","default"];function me(){return me=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},me.apply(null,arguments)}function ye(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function he(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ye(Object(n),!0).forEach(function(e){be(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ye(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function be(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=pe(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==pe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ve(t){return function(t){if(Array.isArray(t))return ge(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return ge(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ge(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ge(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const we=(0,zt.compose)((0,rt.withDispatch)(function(t,e){var n=e.settings;return{updateSetting:function(e,r){n[e]=r,t("rank-math-settings").updateData(he({},n))}}}))(function(t){var e=t.field,n=t.settingType,r=t.settings,o=t.value,i=e.id,a=e.type,c=e.content,l=e.Component,s=e.isDisabled,f=e.default,p=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(e,de);(0,u.isUndefined)(o)&&(o=(0,u.isUndefined)(r)||(0,u.isUndefined)(r[i])?f:r[i]),(0,u.includes)(["disable_author_archives","opening_hours_format"],i)&&(0,u.isBoolean)(o)&&t.updateSetting(i,!1===o?"off":"on"),(0,u.includes)(["disable_author_archives"],i)&&""===o&&t.updateSetting(i,f),(0,u.endsWith)(i,"_bulk_editing")&&!(0,u.isString)(o)&&(o=String(o)),!(0,u.endsWith)(i,"_default_rich_snippet")||""!==o&&!1!==o||(o="off");var d=function(e){if(((0,u.endsWith)(i,"_robots")||"robots_global"===i)&&(0,u.isArray)(e)&&((0,u.includes)(e,"index")||(0,u.includes)(e,"noindex")||(0,u.includes)(o||[],"index")||(0,u.includes)(o||[],"noindex"))){var n=o||[],r=(0,u.includes)(e,"index"),c=(0,u.includes)(e,"noindex"),l=(0,u.includes)(n,"index"),s=(0,u.includes)(n,"noindex");if(l&&!r)e=[].concat(ve(e),["noindex"]);else if(s&&!c)e=[].concat(ve(e),["index"]);else if(r&&c){var f=(0,u.last)(e);e=(0,u.filter)(e,function(t){return"index"===f?"noindex"!==t:"index"!==t})}}"file"===a?((0,u.isEmpty)(e)&&(e={url:"",id:""}),t.updateSetting(i,e.url),t.updateSetting(i+"_id",e.id)):t.updateSetting(i,e)},m=function(){var t={toggle:"checked",checkbox:"checked"}[a]||"value",e=(0,u.includes)(["component","group"],a);return he(he(he({},p),{},be(be({id:i},t,p.value||o),"onChange",p.onChange||!s&&d),e&&{settingType:n}),p.attributes)},y={file:window.rankMathComponents.UploadFile,text:window.rankMathComponents.TextControl,select:window.rankMathComponents.SelectControl,toggle:window.rankMathComponents.ToggleControl,select_search:window.rankMathComponents.SelectWithSearch,multicheck:window.rankMathComponents.CheckboxList,multicheck_inline:window.rankMathComponents.CheckboxList,radio_inline:window.rankMathComponents.ToggleGroupControl,repeatable_group:window.rankMathComponents.RepeatableGroup,selectSearch:window.rankMathComponents.SelectWithSearch,searchPage:window.rankMathComponents.SearchPage,checkboxlist:window.rankMathComponents.CheckboxList,toggleGroup:window.rankMathComponents.ToggleGroupControl,repeatableGroup:window.rankMathComponents.RepeatableGroup,group:window.rankMathComponents.Group,checkbox:window.rankMathComponents.CheckboxControl,textarea:window.rankMathComponents.TextareaControl,notice:window.rankMathComponents.Notice,selectVariable:window.rankMathComponents.SelectVariable,button:window.rankMathComponents.Button}[a],h="group"===a?{onChange:t.updateSetting}:{};return y?wp.element.createElement(y,me({},m(),{settings:r},h)):"component"===a?wp.element.createElement(l,m()):"raw"===a?wp.element.createElement(nt.RawHTML,null,c):null});var Se=["relation","compare"];function Oe(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,u=[],c=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return je(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?je(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function je(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Pe=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t.relation,r=void 0===n?"or":n,o=t.compare,i=void 0===o?"":o,a=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Se),c=function(t){var n=Oe(t,2),r=n[0],o=n[1],a=e[r];return"!="===i?(0,u.isArray)(o)?!(0,u.includes)(o,a):o!==a:(0,u.isArray)(o)?(0,u.includes)(o,a):o===a};return"and"===r?(0,u.every)((0,u.entries)(a),c):(0,u.some)((0,u.entries)(a),c)};function ke(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,u=[],c=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Ee(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ee(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ee(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Pe);const _e=function(t,e){return(0,u.some)(t,function(t){var n=ke(t,1)[0];return e[n]})};function Ae(t){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ae(t)}function xe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Ce(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?xe(Object(n),!0).forEach(function(e){Te(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):xe(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Te(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Ae(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ae(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ae(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}o.dn(_e);const De=function(t){var e=t.settingType,n=t.fields,r=t.settings,o=void 0===r?null:r;return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-".concat(e),className:"field-metabox field-list"},(0,u.map)(n,function(t,n){var r=t.id,i=t.type,a=t.name,u=t.desc,c=t.classes,l=t.content,s=t.dep,f=t.disableDep,p=t.afterfield,d=_e(f,o);if((!s||Pe(s,o))&&"hidden"!==i){if("raw"===i)return l;var m=fe()("field-row",c,Te(Te({"field-disabled":d},"field-id-"+r,r),"field-type-"+i,i));return wp.element.createElement("div",{key:r||n,className:m},a&&wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:r},a)),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(we,{settingType:e,field:Ce(Ce({},t),{},{isDisabled:d}),settings:o}),u&&wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:u}}),p))}})))};o.dn(De);const Re=function(t){var e=t.type,n=t.header,r=t.footer,o=t.fields,i=void 0===o?[]:o,a=t.settings,c=void 0===a?null:a,l=t.tabs;return(0,u.isEmpty)(c)?null:wp.element.createElement(React.Fragment,null,n&&wp.element.createElement(Vt,n),wp.element.createElement(De,{settingType:e,fields:i,settings:c}),r&&wp.element.createElement(le,{type:e,footer:r,tabs:l}))};function Me(t){return Me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Me(t)}function Ue(){var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function i(n,r,o,i){var c=r&&r.prototype instanceof u?r:u,l=Object.create(c.prototype);return Ne(l,"_invoke",function(n,r,o){var i,u,c,l=0,s=o||[],f=!1,p={p:0,n:0,v:t,a:d,f:d.bind(t,4),d:function(e,n){return i=e,u=0,c=t,p.n=n,a}};function d(n,r){for(u=n,c=r,e=0;!f&&l&&!o&&e<s.length;e++){var o,i=s[e],d=p.p,m=i[2];n>3?(o=m===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=d&&((o=n<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<m&&(o=n<3||i[0]>r||r>m)&&(i[4]=n,i[5]=r,p.n=m,u=0))}if(o||n>1)return a;throw f=!0,r}return function(o,s,m){if(l>1)throw TypeError("Generator is already running");for(f&&1===s&&d(s,m),u=s,c=m;(e=u<2?t:c)||!f;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(l=2,i){if(u||(o="next"),e=i[o]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=t}else if((e=(f=p.n<0)?c:n.call(r,p))!==a)break}catch(e){i=t,u=1,c=e}finally{l=1}}return{value:e,done:f}}}(n,o,i),!0),l}var a={};function u(){}function c(){}function l(){}e=Object.getPrototypeOf;var s=[][r]?e(e([][r]())):(Ne(e={},r,function(){return this}),e),f=l.prototype=u.prototype=Object.create(s);function p(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,l):(t.__proto__=l,Ne(t,o,"GeneratorFunction")),t.prototype=Object.create(f),t}return c.prototype=l,Ne(f,"constructor",l),Ne(l,"constructor",c),c.displayName="GeneratorFunction",Ne(l,o,"GeneratorFunction"),Ne(f),Ne(f,o,"Generator"),Ne(f,r,function(){return this}),Ne(f,"toString",function(){return"[object Generator]"}),(Ue=function(){return{w:i,m:p}})()}function Ne(t,e,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}Ne=function(t,e,n,r){function i(e,n){Ne(t,e,function(t){return this._invoke(e,n,t)})}e?o?o(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(i("next",0),i("throw",1),i("return",2))},Ne(t,e,n,r)}function Ie(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Le(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ie(Object(n),!0).forEach(function(e){Fe(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ie(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Fe(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Me(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Me(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Me(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Be(t,e,n,r,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void n(t)}u.done?e(c):Promise.resolve(c).then(r,o)}o.dn(Re);var Ge={general:function(){return o.e(466).then(o.bind(o,3118))},titles:function(){return o.e(612).then(o.bind(o,1401))},sitemap:function(){return o.e(919).then(o.bind(o,4430))},"instant-indexing":function(){return o.e(445).then(o.bind(o,3289))}};const We=function(){var t,e=(t=Ue().m(function t(e){var n,r,o,i,a=arguments;return Ue().w(function(t){for(;;)switch(t.n){case 0:if(n=a.length>1&&void 0!==a[1]?a[1]:[],r=Ge[e]){t.n=1;break}return t.a(2,null);case 1:return t.n=2,r();case 2:return o=t.v,i=(0,ot.applyFilters)("rank_math_".concat(e,"_options__tabs"),o.default),i=(0,u.isEmpty)(n)?i:(0,u.pick)(i,n),t.a(2,(0,u.map)(i,function(t,n){return t.fields=(0,ot.applyFilters)("rank_math_".concat(e,"_options__fields"),t.fields,n),t.fields=(0,ot.applyFilters)("rank_math_".concat(e,"_options__").concat(n),t.fields),Le({},t)}))}},t)}),function(){var e=this,n=arguments;return new Promise(function(r,o){var i=t.apply(e,n);function a(t){Be(i,r,o,a,u,"next",t)}function u(t){Be(i,r,o,a,u,"throw",t)}a(void 0)})});return function(t){return e.apply(this,arguments)}}();function He(t){return function(t){if(Array.isArray(t))return Ve(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||ze(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $e(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,u=[],c=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||ze(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(t,e){if(t){if("string"==typeof t)return Ve(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ve(t,e):void 0}}function Ve(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Ke=(0,zt.compose)((0,rt.withSelect)(function(t){return{currentPage:rankMath.optionPage,data:t("rank-math-settings").getData()}}))(function(t){var e=t.currentPage,n=t.data,r=$e((0,nt.useState)(null),2),o=r[0],i=r[1],a=$e(et({view:""}),2),c=a[0],l=a[1];if((0,nt.useEffect)(function(){We(e,rankMath.tabs).then(function(t){i(t)})},[e]),!(0,u.isEmpty)(o)){var s=c.get("view");return wp.element.createElement("div",{className:"wrap rank-math-wrap rank-math-wrap-settings"},wp.element.createElement(Gt.TabPanel,{orientation:"vertical",tabs:o,initialTabName:s,onSelect:function(t){t!==s&&l(function(e){return(0,u.fromPairs)([].concat(He(e),[["view",t]]))})}},function(t){var r=t.fields,i=t.header;return wp.element.createElement(React.Fragment,null,wp.element.createElement(Re,{header:i,settings:n,fields:r,type:e,tabs:o,footer:{discardButton:{children:(0,Wt.__)("Reset Options","seo-by-rank-math")},applyButton:{children:(0,Wt.__)("Save Changes","seo-by-rank-math")}}}))}))}}),qe=function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement(Gt.DashboardHeader,{page:rankMath.optionPage}),wp.element.createElement($t,null),wp.element.createElement(Ke,null))};var Je;o.dn(qe),Je=function(){var t=document.querySelector("#rank-math-options");(0,u.isNull)(t)||(0,nt.createRoot)(t).render(wp.element.createElement(X,null,wp.element.createElement(qe,null)))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",Je):Je())}()}();PK     ’ŠU]•6�ÆI$  I$    assets/admin/js/registration.jsnu „[µü¤        !function(){var e={6942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=wp.element;function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},a=r,i="",c=r.indexOf("#");-1!==c&&(a=r.substring(0,c),i=r.substring(c));var u=Object.keys(o).map(function(e){return"".concat(e,"=").concat(o[e])}).join("&"),l=a.includes("?")&&!a.endsWith("?")?"&":"?";return a+l+u+i+n}n.dn(t);const r=function(){return wp.element.createElement("div",{className:"header"},wp.element.createElement("div",{className:"logo text-center"},wp.element.createElement("a",{href:t("seo-suite","SW Logo"),target:"_blank",rel:"noreferrer"},wp.element.createElement("img",{src:rankMath.logo,alt:"Rank Math SEO",width:"245"}))))};n.dn(r);var o=n(6942),a=n.n(o);const i=wp.i18n,c=wp.apiFetch;var u=n.n(c);const l=window.rankMathComponents,s=function(e){var t=e.link,n=e.heading,r=e.description,o=e.linkText,a=void 0===o?(0,i.__)("Learn more.","seo-by-rank-math"):o,c=e.className,u=void 0===c?"":c;return wp.element.createElement("header",null,wp.element.createElement("h1",{dangerouslySetInnerHTML:{__html:n}}),wp.element.createElement("p",{className:u},r,t&&wp.element.createElement("a",{href:t,target:"_blank",rel:"noreferrer"},a)))};function m(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var u=r&&r.prototype instanceof c?r:c,l=Object.create(u.prototype);return p(l,"_invoke",function(n,r,o){var a,c,u,l=0,s=o||[],m=!1,p={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return a=t,c=0,u=e,p.n=n,i}};function f(n,r){for(c=n,u=r,t=0;!m&&l&&!o&&t<s.length;t++){var o,a=s[t],f=p.p,d=a[2];n>3?(o=d===r)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=f&&((o=n<2&&f<a[1])?(c=0,p.v=r,p.n=a[1]):f<d&&(o=n<3||a[0]>r||r>d)&&(a[4]=n,a[5]=r,p.n=d,c=0))}if(o||n>1)return i;throw m=!0,r}return function(o,s,d){if(l>1)throw TypeError("Generator is already running");for(m&&1===s&&f(s,d),c=s,u=d;(t=c<2?e:u)||!m;){a||(c?c<3?(c>1&&(p.n=-1),f(c,u)):p.n=u:p.v=u);try{if(l=2,a){if(c||(o="next"),t=a[o]){if(!(t=t.call(a,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=a.return)&&t.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((t=(m=p.n<0)?u:n.call(r,p))!==i)break}catch(t){a=e,c=1,u=t}finally{l=1}}return{value:t,done:m}}}(n,o,a),!0),l}var i={};function c(){}function u(){}function l(){}t=Object.getPrototypeOf;var s=[][r]?t(t([][r]())):(p(t={},r,function(){return this}),t),f=l.prototype=c.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,p(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=l,p(f,"constructor",l),p(l,"constructor",u),u.displayName="GeneratorFunction",p(l,o,"GeneratorFunction"),p(f),p(f,o,"Generator"),p(f,r,function(){return this}),p(f,"toString",function(){return"[object Generator]"}),(m=function(){return{w:a,m:d}})()}function p(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,n,r){function a(t,n){p(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},p(e,t,n,r)}function f(e,t,n,r,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,o)}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,c=[],u=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(s);const h=function(){var n=rankMath,r=n.adminUrl,o=n.registerNonce,c=n.isSiteUrlValid,p=d((0,e.useState)("rank_math_save_registration"),2),y=p[0],h=p[1],v=d((0,e.useState)(!1),2),g=v[0],b=v[1],w=d((0,e.useState)(!1),2),k=w[0],_=w[1],E=a()("button button-primary button-connect",{"button-animated":c,disabled:!c}),S=function(){var e,t=(e=m().m(function e(t){var n;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return b(t),_(!0),e.p=1,e.n=2,u()({method:"POST",path:"/rankmath/v1/setupWizard/updateTrackingOptin",data:{enable_tracking:t?"on":"off"}});case 2:e.n=4;break;case 3:e.p=3,n=e.v,console.error("Failed to update tracking opt-in:",n);case 4:return e.p=4,_(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}),function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){f(a,r,o,i,c,"next",e)}function c(e){f(a,r,o,i,c,"throw",e)}i(void 0)})});return function(e){return t.apply(this,arguments)}}();return wp.element.createElement("div",{className:"wrapper"},wp.element.createElement("form",{method:"post",action:r},wp.element.createElement(l.TextControl,{type:"hidden",name:"action",value:y}),wp.element.createElement(l.TextControl,{type:"hidden",name:"step",value:"register"}),wp.element.createElement(l.TextControl,{type:"hidden",name:"security",value:o}),wp.element.createElement("div",{className:"main-content wizard-content--register"},wp.element.createElement(s,{heading:(0,i.__)("Connect FREE Account","seo-by-rank-math"),description:(0,i.__)("By connecting your free account, you get keyword suggestions directly from Google when entering the focus keywords. Not only that, get access to our revolutionary Content AI, SEO Analyzer inside WordPress that scans your website for SEO errors and suggest improvements.","seo-by-rank-math"),link:t("free-account-benefits","SW Connect Free Account"),linkText:(0,i.__)("Read more by following this link.","seo-by-rank-math"),className:"rank-math-gray-box"}),wp.element.createElement(l.InvalidSiteUrlNotice,{isSiteUrlValid:c}),wp.element.createElement("div",{className:"rank-math-tracking-optin"},wp.element.createElement(l.ToggleControl,{label:wp.element.createElement(e.RawHTML,null,(0,i.sprintf)((0,i.__)("Enable Usage Tracking. %1$s Share anonymous usage data to help us improve Rank Math. No personal info is collected. %2$s","seo-by-rank-math"),"<br />",'<a href="'+t("usage-policy","SW Connect Free Account")+'" target="_blank">'+(0,i.__)("Learn more about what data is and isn't tracked.","seo-by-rank-math")+"</a>")),checked:g,onChange:S,disabled:k})),wp.element.createElement("div",{className:"text-center wp-core-ui rank-math-ui",style:{marginTop:"30px"}},wp.element.createElement("button",{type:"submit",className:E,name:"rank_math_activate"},(0,i.__)("Connect Your Account","seo-by-rank-math")))),wp.element.createElement("footer",{className:"form-footer wp-core-ui rank-math-ui"},wp.element.createElement(l.Button,{variant:"secondary",className:"button-skip",type:"submit",onClick:function(){h("rank_math_skip_wizard")}},(0,i.__)("Skip Step","seo-by-rank-math")))))};var v;n.dn(h),v=function(){(0,e.createRoot)(document.getElementById("rank-math-wizard-wrapper")).render(wp.element.createElement(React.Fragment,null,wp.element.createElement(r,null),wp.element.createElement(h,null)))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",v):v())}()}();PK     ’ŠU]–é;Š  Š    assets/admin/js/dashboard.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}};const t=jQuery;var n=e.n(t);const r=wp.i18n;function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var u=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.deactivatePlugins(),this.initializeClipBoard(),this.modeSelector(),this.dashboardWidget()},t=[{key:"deactivatePlugins",value:function(){n()(".dashboard-deactivate-plugin").on("click",function(e){e.preventDefault();var t=n()(this);return n().ajax({url:window.ajaxurl,type:"POST",data:{action:"rank_math_deactivate_plugins",security:rankMath.security,plugin:"all"}}).always(function(e){"1"===e&&t.parents(".rank-math-notice").remove()}),!1})}},{key:"initializeClipBoard",value:function(){"undefined"!=typeof ClipboardJS&&(n()(".get-debug-report").on("click",function(){return n()("#debug-report").slideDown(),n()("#debug-report textarea").trigger("focus").trigger("select"),n()(this).parent().fadeOut(),!1}),new ClipboardJS("#copy-for-support"))}},{key:"modeSelector",value:function(){n()(".rank-math-mode-selector a").on("click",function(e){e.preventDefault();var t=n()(this).data("mode");return n().ajax({url:rankMath.api.root+"rankmath/v1/updateMode",method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.api.nonce)},data:{mode:t}}).done(function(e){e?window.location.reload():window.alert((0,r.__)("Something went wrong! Please try again.","seo-by-rank-math"))}),!1})}},{key:"dashboardWidget",value:function(){var e=n()("#rank-math-dashboard-widget");e.length&&n().ajax({url:rankMath.api.root+"rankmath/v1/dashboardWidget",method:"GET",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.api.nonce)}}).done(function(t){t?e.removeClass("rank-math-loading").html(t):e.removeClass("rank-math-loading").html((0,r.__)("Something went wrong! Please try again.","seo-by-rank-math"))})}}],t&&a(e.prototype,t),o&&a(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,o}();n()(function(){new u})}();PK     ’ŠU]õÛœ†ûÕ  ûÕ     assets/admin/js/titleSettings.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[612],{5124:function(e,t,a){a.d(t,{A:function(){return n}});var o=a(7562);const n=(0,o.select)("rank-math-settings").getData()},7240:function(e,t,a){a.d(t,{A:function(){return o}});const o={"-":"-","&ndash;":"â€“","&mdash;":"â€”","&raquo;":"Â»","|":"|","&bull;":"â€¢"}},1895:function(e,t,a){a.d(t,{A:function(){return n}});var o=a(8809);const n=function(e,t,a){return'<a href="'.concat((0,o.A)(e,t),'" target="_blank" rel="noopener noreferrer">').concat(a,"</a>")};a.dn(n)},2551:function(e,t,a){a.d(t,{A:function(){return l}});var o=a(4011);function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,o)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function i(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var o=a.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e=e?"rank-math-"+e:"rank-math",t=s(s({},t),{},{page:e}),(0,o.addQueryArgs)(rankMath.adminurl,t)};a.dn(l)},1401:function(e,t,a){a.r(t),a.d(t,{default:function(){return Oe}});var o=a(2470),n=a(8809),r=a(8110);function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o,n,r,s,i=[],l=!0,c=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(o=r.call(a)).done)&&(i.push(o.value),i.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?i(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,o=Array(t);a<t;a++)o[a]=e[a];return o}const l=(0,r.map)((0,r.entries)(rankMath.choicesRobots),function(e){var t=s(e,2);return{id:t[0],label:t[1]}});var c=a(7240),d=a(7562),m=a(1386),p=a(8303);function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o,n,r,s,i=[],l=!0,c=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(o=r.call(a)).done)&&(i.push(o.value),i.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,o=Array(t);a<t;a++)o[a]=e[a];return o}var _=[{key:"max-snippet",label:(0,o.__)("Snippet","seo-by-rank-math"),type:"number",default:"-1",tooltip:(0,o.__)("Specify a maximum text-length, in characters, of a snippet for your page.","seo-by-rank-math")},{key:"max-video-preview",label:(0,o.__)("Video Preview","seo-by-rank-math"),type:"number",default:"-1",tooltip:(0,o.__)("Specify a maximum duration in seconds of an animated video preview.","seo-by-rank-math")},{key:"max-image-preview",label:(0,o.__)("Image Preview","seo-by-rank-math"),type:"select",default:"large",options:{standard:(0,o.__)("Standard","seo-by-rank-math"),large:(0,o.__)("Large","seo-by-rank-math"),none:(0,o.__)("None","seo-by-rank-math")},tooltip:(0,o.__)("Specify a maximum size of image preview to be shown for images on this page.","seo-by-rank-math")}];const b=function(e){var t=e.id,a=(0,d.useSelect)(function(e){return e("rank-math-settings").getData()},[]),o=(0,d.useDispatch)("rank-math-settings").updateData,n=h((0,m.useState)({}),2),s=n[0],i=n[1],l=(0,m.useRef)(!1);(0,m.useEffect)(function(){l.current=!1},[t]),(0,m.useEffect)(function(){if(!l.current&&t){var e=(0,r.get)(a,t,{}),o={};(0,r.map)(_,function(t){var a=t.key,n=t.default,s=(0,r.get)(e,a);o[a]=null==s?{enabled:!0,value:n}:!1===s?{enabled:!1,value:n}:{enabled:!0,value:s}}),i(o),l.current=!0}},[t,a]);var c=function(e,n){var i=(0,r.cloneDeep)(s);(0,r.set)(i,[e,"value"],n),!1===n?(0,r.set)(i,[e,"enabled"],!1):(0,r.set)(i,[e,"enabled"],!0);var l={};(0,r.map)(_,function(e){var t=e.key,a=i[t]||{};l[t]=!!a.enabled&&a.value});var c=(0,r.cloneDeep)(a);(0,r.set)(c,t,l),o(c)},u=function(e,t){return function(a){var o=(0,r.cloneDeep)(s);(0,r.set)(o,[e,"enabled"],a),a&&(0,r.set)(o,[e,"value"],t),i(o),c(e,!!a&&t)}},b=function(e){return function(t){var a=(0,r.cloneDeep)(s);(0,r.set)(a,[e,"value"],t),i(a),a[e].enabled&&c(e,t)}};return wp.element.createElement(React.Fragment,null,(0,r.map)(_,function(e){var t=e.key,a=e.label,o=e.tooltip,n=e.type,i=e.options,l=e.default,c=(0,r.get)(s,[t,"enabled"],!1),d=(0,r.get)(s,[t,"value"],l);return wp.element.createElement("div",{className:"rank-math-group-field",key:t},wp.element.createElement(p.CheckboxControl,{label:wp.element.createElement("span",null,a,wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,o))),checked:c,onChange:u(t,l)}),"select"===n?wp.element.createElement(p.SelectControl,{options:i,value:d,disabled:!c,onChange:b(t)}):wp.element.createElement(p.TextControl,{type:"number",min:-1,value:d,disabled:!c,onChange:b(t)}))}))};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,o=Array(t);a<t;a++)o[a]=e[a];return o}a.dn(b);const f=[{id:"robots_global",type:"checkboxlist",name:(0,o.__)("Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Default values for robots meta tag. These can be changed for individual posts, taxonomies, etc.","seo-by-rank-math"),classes:"rank-math-robots-data",options:l,default:["index"]},{id:"advanced_robots_global",type:"component",Component:b,name:(0,o.__)("Advanced Robots Meta","seo-by-rank-math"),classes:"rank-math-advanced-option rank-math-advanced-robots-field",default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}},{id:"noindex_empty_taxonomies",type:"toggle",name:(0,o.__)("Noindex Empty Category and Tag Archives","seo-by-rank-math"),desc:(0,o.__)("Setting empty archives to <code>noindex</code> is useful for avoiding indexation of thin content pages and dilution of page rank. As soon as a post is added, the page is updated to <code>index</code>.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0},{id:"title_separator",type:"toggleGroup",addCustom:!0,name:(0,o.__)("Separator Character","seo-by-rank-math"),desc:(0,o.__)("You can use the separator character in titles by inserting <code>%separator%</code> or <code>%sep%</code> in the title fields.","seo-by-rank-math"),options:c.A,default:"-"}].concat(function(e){if(Array.isArray(e))return y(e)}(g=rankMath.supportsTitleTag?[]:[{id:"rewrite_title",type:"toggle",name:(0,o.__)("Rewrite Titles","seo-by-rank-math"),desc:(0,o.__)("Your current theme doesn't support title-tag. Enable this option to rewrite page, post, category, search and archive page titles.","seo-by-rank-math"),default:!1}])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(g)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?y(e,t):void 0}}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{id:"capitalize_titles",type:"toggle",name:(0,o.__)("Capitalize Titles","seo-by-rank-math"),desc:(0,o.__)("Automatically capitalize the first character of each word in the titles.","seo-by-rank-math"),default:!1},{id:"open_graph_image",type:"file",name:(0,o.__)("OpenGraph Thumbnail","seo-by-rank-math"),desc:(0,o.__)("When a featured image or an OpenGraph Image is not set for individual posts/pages/CPTs, this image will be used as a fallback thumbnail when your post is shared on Facebook. The recommended image size is 1200 x 630 pixels.","seo-by-rank-math")},{id:"twitter_card_type",type:"select",name:(0,o.__)("Twitter Card Type","seo-by-rank-math"),desc:(0,o.__)("Card type selected when creating a new post. This will also be applied for posts without a card type selected.","seo-by-rank-math"),options:{summary_large_image:(0,o.__)("Summary Card with Large Image","seo-by-rank-math"),summary_card:(0,o.__)("Summary Card","seo-by-rank-math")},default:"summary_large_image",classes:"rank-math-advanced-option"}]);var g;const k={name:"global",header:{title:(0,o.__)("Global Meta","seo-by-rank-math"),description:(0,o.__)("Change Global meta settings that take effect across your website.","seo-by-rank-math"),link:(0,n.A)("titles-meta","Options Panel Meta Global Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-settings"}),(0,o.__)("Global Meta","seo-by-rank-math")),fields:f},v=function(){return[{id:"streetAddress",type:"text",placeholder:(0,o.__)("Street Address","seo-by-rank-math")},{id:"addressLocality",type:"text",placeholder:(0,o.__)("Locality","seo-by-rank-math")},{id:"addressRegion",type:"text",placeholder:(0,o.__)("Region","seo-by-rank-math")},{id:"postalCode",type:"text",placeholder:(0,o.__)("Postal Code","seo-by-rank-math")},{id:"addressCountry",type:"text",placeholder:(0,o.__)("2-letter Country Code (ISO 3166-1)","seo-by-rank-math")}]};a.dn(v);const w=function(){return[{id:"day",type:"select",options:{Monday:(0,o.__)("Monday","rank-math-pro"),Tuesday:(0,o.__)("Tuesday","rank-math-pro"),Wednesday:(0,o.__)("Wednesday","rank-math-pro"),Thursday:(0,o.__)("Thursday","rank-math-pro"),Friday:(0,o.__)("Friday","rank-math-pro"),Saturday:(0,o.__)("Saturday","rank-math-pro"),Sunday:(0,o.__)("Sunday","rank-math-pro")}},{id:"time",type:"text",placeholder:(0,o.__)("e.g. 09:00-17:00","rank-math-pro")}]};a.dn(w);const x=function(){return[{id:"type",type:"select",options:rankMath.phoneTypes,default:"customer support"},{id:"number",type:"text",placeholder:(0,o.__)("Format: +1-401-555-1212","rank-math-pro")}]};a.dn(x);const S=function(){return[{id:"type",type:"select",options:rankMath.organizationInfo,default:""},{id:"value",type:"text"}]};function A(e){return function(e){if(Array.isArray(e))return O(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?O(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,o=Array(t);a<t;a++)o[a]=e[a];return o}a.dn(S);var P=(0,r.includes)(rankMath.modules,"local-seo"),T={knowledgegraph_type:"company"},E={knowledgegraph_type:"person"},M=function(e){return{addButton:{children:e},removeButton:{children:(0,o.__)("Remove","seo-by-rank-math")}}};const j=function(){var e=[{type:"notice",status:"info",children:wp.element.createElement(m.RawHTML,null,(0,o.__)("Use the <code>[rank_math_contact_info]</code> shortcode to display contact information in a nicely formatted way. You should also claim your business on Google if you have not already.","seo-by-rank-math"))},{id:"knowledgegraph_type",type:"toggleGroup",name:(0,o.__)("Person or Company","seo-by-rank-math"),desc:(0,o.__)("Choose whether the site represents a person or an organization.","seo-by-rank-math"),options:{person:(0,o.__)("Person","seo-by-rank-math"),company:(0,o.__)("Organization","seo-by-rank-math")},default:"person"},{id:"website_name",type:"text",name:(0,o.__)("Website Name","seo-by-rank-math"),desc:(0,o.__)("Enter the name of your site to appear in search results.","seo-by-rank-math"),default:rankMath.blogName},{id:"website_alternate_name",type:"text",name:(0,o.__)("Website Alternate Name","seo-by-rank-math"),desc:(0,o.__)("An alternate version of your site name (for example, an acronym or shorter name).","seo-by-rank-math")},{id:"knowledgegraph_name",type:"text",name:(0,o.__)("Person/Organization Name","seo-by-rank-math"),desc:(0,o.__)("Your name or company name intended to feature in Google's Knowledge Panel.","seo-by-rank-math"),default:rankMath.blogName}].concat(A(P?[{id:"organization_description",type:"textarea",name:(0,o.__)("Description","seo-by-rank-math"),desc:(0,o.__)("Provide a detailed description of your organization.","seo-by-rank-math"),dep:T}]:[]),[{id:"knowledgegraph_logo",type:"file",name:(0,o.__)("Logo","seo-by-rank-math"),desc:(0,o.__)("<strong>Min Size: 112Î§112px</strong>.<br /> A squared image is preferred by the search engines.","seo-by-rank-math")},{id:"url",type:"text",name:(0,o.__)("URL","seo-by-rank-math"),desc:(0,o.__)("URL of the item.","seo-by-rank-math"),default:rankMath.homeUrl}]);if(!P)return e;var t=rankMath.businessTypes;t[""]=(0,o.__)("None","seo-by-rank-math");var a=[{id:"email",type:"text",name:(0,o.__)("Email","seo-by-rank-math"),desc:(0,o.__)("Enter the contact email address that could be displayed on search engines.","seo-by-rank-math")},{id:"phone",type:"text",name:(0,o.__)("Phone","seo-by-rank-math"),desc:(0,o.__)("Search engines may prominently display your contact phone number for mobile users.","seo-by-rank-math"),dep:E},{id:"local_address",type:"group",fields:v(),name:(0,o.__)("Address","seo-by-rank-math")},{id:"local_address_format",type:"textarea",name:(0,o.__)("Address Format","seo-by-rank-math"),desc:(0,o.__)("Format used when the address is displayed using the <code>[rank_math_contact_info]</code> shortcode.<br><strong>Available Tags: {address}, {locality}, {region}, {postalcode}, {country}, {gps}</strong>","seo-by-rank-math"),classes:"rank-math-address-format",default:"{address} {locality}, {region} {postalcode}",placeholder:"{address} {locality}, {region} {country}. {postalcode}.",dep:T},{id:"local_business_type",type:"selectSearch",name:(0,o.__)("Business Type","seo-by-rank-math"),options:t,dep:T,default:""},{id:"opening_hours",type:"repeatableGroup",name:(0,o.__)("Opening Hours","seo-by-rank-math"),desc:(0,o.__)("Select opening hours. You can add multiple sets if you have different opening or closing hours on some days or if you have a mid-day break. Times are specified using 24:00 time.","seo-by-rank-math"),options:M((0,o.__)("Add time","seo-by-rank-math")),fields:w(),classes:"field-group-text-only",dep:T,default:[{day:"Monday",time:""}]},{id:"opening_hours_format",type:"toggleGroup",name:(0,o.__)("Opening Hours Format","seo-by-rank-math"),desc:(0,o.__)("Time format used in the contact shortcode.","seo-by-rank-math"),options:{off:"24:00",on:"12:00"},default:"off",dep:T},{id:"phone_numbers",type:"repeatableGroup",name:(0,o.__)("Phone Number","seo-by-rank-math"),desc:(0,o.__)("Search engines may prominently display your contact phone number for mobile users.","seo-by-rank-math"),options:M((0,o.__)("Add Number","seo-by-rank-math")),fields:x(),classes:"field-group-text-only",dep:T,default:[{type:"customer support",number:""}]},{id:"price_range",type:"text",name:(0,o.__)("Price Range","seo-by-rank-math"),desc:(0,o.__)("The price range of the business, for example $$$.","seo-by-rank-math"),dep:T},{id:"additional_info",type:"repeatableGroup",name:(0,o.__)("Additional Info","seo-by-rank-math"),desc:(0,o.__)("Provide relevant details of your company to include in the Organization Schema.","seo-by-rank-math"),options:M((0,o.__)("Add","seo-by-rank-math")),fields:S(),classes:"field-group-text-only",dep:T,default:[{type:"legalName",value:""}]},{id:"maps_api_key",type:"text",name:(0,o.__)("Google Maps API Key","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("An API Key is required to display embedded Google Maps on your site. Get it here: %s","seo-by-rank-math"),'<a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_blank">'+(0,o.__)("Google Maps Embed API","seo-by-rank-math")+"</a>"),dep:T,attributes:{type:"password"}},{id:"geo",type:"text",name:(0,o.__)("Geo Coordinates","seo-by-rank-math"),desc:(0,o.__)("Latitude and longitude values separated by comma.","seo-by-rank-math"),dep:T},{id:"local_seo_about_page",type:"searchPage",selectedPage:rankMath.aboutPage,name:(0,o.__)("About Page","seo-by-rank-math"),desc:(0,o.__)("Select a page on your site where you want to show the LocalBusiness meta data.","seo-by-rank-math")},{id:"local_seo_contact_page",type:"searchPage",selectedPage:rankMath.contactPage,name:(0,o.__)("Contact Page","seo-by-rank-math"),desc:(0,o.__)("Select a page on your site where you want to show the LocalBusiness meta data.","seo-by-rank-math")}].concat(A(rankMath.isPro?[]:[{type:"notice",status:"message",children:wp.element.createElement(m.RawHTML,null,'<strong style="margin-top:20px; display:block; text-align:right;">'+(0,o.sprintf)((0,o.__)("Multiple Locations are available in the %s.","seo-by-rank-math"),'<a href="'+(0,n.A)("pro","Multiple Location Notice")+'" target="_blank">PRO Version</a>')+"</strong>")}]));return e.push.apply(e,A(a)),e}(),C={name:"local",header:{title:(0,o.__)("Local SEO","seo-by-rank-math"),description:(0,o.__)("Optimize for local searches and Knowledge Graph using these settings.","seo-by-rank-math"),link:(0,n.A)("local-seo-settings","Options Panel Meta Local Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-local-seo"}),(0,o.__)("Local SEO","seo-by-rank-math")),fields:j};var D=a(1895);const R=[{id:"social_url_facebook",type:"text",name:(0,o.__)("Facebook Page URL","seo-by-rank-math"),desc:(0,o.__)("Enter your complete Facebook page URL here. eg:","seo-by-rank-math")+"<br><code>https://www.facebook.com/RankMath/</code>"},{id:"facebook_author_urls",type:"text",name:(0,o.__)("Facebook Authorship","seo-by-rank-math"),desc:(0,o.__)("Insert personal Facebook profile URL to show Facebook Authorship when your articles are being shared on Facebook. eg:","seo-by-rank-math")+"<br><code>https://www.facebook.com/zuck</code>"},{id:"facebook_admin_id",type:"text",name:(0,o.__)("Facebook Admin","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Enter %s. Use a comma to separate multiple IDs. Alternatively, you can enter an app ID below.","seo-by-rank-math"),'<a href="https://lookup-id.com/?utm_campaign=Rank+Math" target="_blank">numeric user ID</a>')},{id:"facebook_app_id",type:"text",name:(0,o.__)("Facebook App","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Enter %s. Alternatively, you can enter a user ID above.","seo-by-rank-math"),'<a href="https://developers.facebook.com/apps?utm_campaign=Rank+Math" target="_blank">numeric app ID</a>')},{id:"facebook_secret",type:"text",name:(0,o.__)("Facebook Secret","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Enter alphanumeric secret ID. %s.","seo-by-rank-math"),(0,D.A)("create-facebook-app","",(0,o.__)("Learn more","seo-by-rank-math"))),attributes:{type:"password"}},{id:"twitter_author_names",type:"text",name:(0,o.__)("Twitter Username","seo-by-rank-math"),desc:(0,o.__)("Enter the Twitter username of the author to add <code>twitter:creator</code> tag to posts. eg: <code>RankMathSEO</code>","seo-by-rank-math")},{id:"social_additional_profiles",type:"textarea",name:(0,o.__)("Additional Profiles","seo-by-rank-math"),desc:(0,o.__)("Additional Profiles to add in the <code>sameAs</code> Schema property.","seo-by-rank-math")}],G={name:"social",header:{title:(0,o.__)("Social Meta","seo-by-rank-math"),description:(0,o.__)("Add social account information to your website's Schema and Open Graph.","seo-by-rank-math"),link:(0,n.A)("social-meta-settings","Options Panel Meta Social Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-social"}),(0,o.__)("Social Meta","seo-by-rank-math")),fields:R};var N=[{id:"static_homepage_notice",type:"notice",status:"warning",children:wp.element.createElement(m.RawHTML,null,(0,o.__)("Static page is set as the front page (WP Dashboard > Settings > Reading). To add SEO title, description, and meta for the homepage, please click here: ","seo-by-rank-math"),rankMath.staticHomePageNotice)}],F=[{id:"homepage_title",type:"selectVariable",name:(0,o.__)("Homepage Title","seo-by-rank-math"),desc:(0,o.__)("Homepage title tag.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-title",exclude:["seo_title","seo_description"],default:"%sitename% %page% %sep% %sitedesc%"},{id:"homepage_description",type:"selectVariable",as:"textarea",name:(0,o.__)("Homepage Meta Description","seo-by-rank-math"),desc:(0,o.__)("Homepage meta description.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-description",exclude:["seo_title","seo_description"]},{id:"homepage_custom_robots",type:"toggle",name:(0,o.__)("Homepage Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Select custom robots meta for homepage, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab.","seo-by-rank-math"),default:!1,classes:"rank-math-advanced-option"},{id:"homepage_robots",type:"checkboxlist",name:(0,o.__)("Homepage Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Custom values for robots meta tag on homepage.","seo-by-rank-math"),options:l,dep:{homepage_custom_robots:!0},default:["index"],classes:"rank-math-advanced-option rank-math-robots-data"},{id:"homepage_advanced_robots",type:"component",Component:b,name:(0,o.__)("Homepage Advanced Robots","seo-by-rank-math"),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:{homepage_custom_robots:!0},default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}},{id:"homepage_facebook_title",type:"text",name:(0,o.__)("Homepage Title for Facebook","seo-by-rank-math"),desc:(0,o.__)("Title of your site when shared on Facebook, Twitter and other social networks.","seo-by-rank-math"),classes:"rank-math-advanced-option"},{id:"homepage_facebook_description",type:"textarea",name:(0,o.__)("Homepage Description for Facebook","seo-by-rank-math"),desc:(0,o.__)("Description of your site when shared on Facebook, Twitter and other social networks.","seo-by-rank-math"),classes:"rank-math-advanced-option"},{id:"homepage_facebook_image",type:"file",name:(0,o.__)("Homepage Thumbnail for Facebook","seo-by-rank-math"),desc:(0,o.__)("Image displayed when your homepage is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices.","seo-by-rank-math")}];const I=rankMath.staticHomePageNotice?N:F,L={name:"homepage",header:{title:(0,o.__)("Homepage","seo-by-rank-math"),description:(0,o.__)("Add SEO meta and OpenGraph details to your homepage.","seo-by-rank-math"),link:(0,n.A)("homepage-settings","Options Panel Meta Home Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-home"}),(0,o.__)("Homepage","seo-by-rank-math")),fields:I};function H(e){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(e)}function z(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,o)}return a}function V(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?z(Object(a),!0).forEach(function(t){U(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):z(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function U(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=H(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var o=a.call(e,t||"default");if("object"!=H(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==H(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var B={disable_author_archives:"off"};const W=[{id:"disable_author_archives",type:"toggleGroup",name:(0,o.__)("Author Archives","seo-by-rank-math"),desc:(0,o.__)("Enables or disables Author Archives. If disabled, the Author Archives are redirected to your homepage. To avoid duplicate content issues, noindex author archives if you keep them enabled.","seo-by-rank-math"),options:{on:(0,o.__)("Disabled","seo-by-rank-math"),off:(0,o.__)("Enabled","seo-by-rank-math")},default:rankMath.disableAutorArchive},{id:"url_author_base",type:"text",name:(0,o.__)("Author Base","seo-by-rank-math"),desc:(0,o.__)("Change the <code>/author/</code> part in author archive URLs.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:"author",dep:B},{id:"author_custom_robots",type:"toggle",name:(0,o.__)("Author Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Select custom robots meta for author page, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0,dep:B},{id:"author_robots",type:"checkboxlist",name:(0,o.__)("Author Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Custom values for robots meta tag on author page.","seo-by-rank-math"),options:l,classes:"rank-math-advanced-option rank-math-robots-data",dep:V(V({},B),{},{author_custom_robots:!0,relation:"and"})},{id:"author_advanced_robots",type:"component",Component:b,name:(0,o.__)("Author Advanced Robots","seo-by-rank-math"),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:V(V({},B),{},{author_custom_robots:!0,relation:"and"}),default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}},{id:"author_archive_title",type:"selectVariable",name:(0,o.__)("Author Archive Title","seo-by-rank-math"),desc:(0,o.__)("Title tag on author archives. SEO options for specific authors can be set with the meta box available in the user profiles.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-title rank-math-advanced-option",exclude:["seo_title","seo_description"],default:"%name% %sep% %sitename% %page%",dep:B},{id:"author_archive_description",type:"selectVariable",as:"textarea",name:(0,o.__)("Author Archive Description","seo-by-rank-math"),desc:(0,o.__)("Author archive meta description. SEO options for specific author archives can be set with the meta box in the user profiles.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-description rank-math-advanced-option",exclude:["seo_title","seo_description"],dep:B},{id:"author_slack_enhanced_sharing",type:"toggle",name:(0,o.__)("Slack Enhanced Sharing","seo-by-rank-math"),desc:(0,o.__)("When the option is enabled and an author archive is shared on Slack, additional information will be shown (name & total number of posts).","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0,dep:B},{id:"author_add_meta_box",type:"toggle",name:(0,o.__)("Add SEO Controls","seo-by-rank-math"),desc:(0,o.__)("Add SEO Controls for user profile pages. Access to the Meta Box can be fine tuned with code, using a special filter hook.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0,dep:B}],$={name:"author",header:{title:(0,o.__)("Authors","seo-by-rank-math"),description:(0,o.__)("Change SEO options related to the author archives.","seo-by-rank-math"),link:(0,n.A)("author-settings","Options Panel Meta Author Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-users"}),(0,o.__)("Authors","seo-by-rank-math")),fields:W};var K={disable_date_archives:!1};const Y=[{id:"disable_date_archives",type:"toggle",name:(0,o.__)("Disable Date Archives","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Enable or disable the date archives (e.g: %s). If this option is disabled, the date archives will be redirected to the homepage.","seo-by-rank-math"),"<code>domain.com/2019/06/</code>"),default:!0},{id:"date_archive_title",type:"selectVariable",name:(0,o.__)("Date Archive Title","seo-by-rank-math"),desc:(0,o.__)("Title tag on day/month/year based archives.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-title rank-math-advanced-option",default:"%date% %page% %sep% %sitename%",exclude:["seo_title","seo_description"],dep:K},{id:"date_archive_description",type:"selectVariable",as:"textarea",name:(0,o.__)("Date Archive Description","seo-by-rank-math"),desc:(0,o.__)("Date archive description.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-description rank-math-advanced-option",exclude:["seo_title","seo_description"],dep:K},{id:"date_archive_robots",type:"checkboxlist",name:(0,o.__)("Date Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Custom values for robots meta tag on date page.","seo-by-rank-math"),options:l,classes:"rank-math-advanced-option rank-math-robots-data",dep:K},{id:"date_advanced_robots",type:"component",Component:b,name:(0,o.__)("Date Advanced Robots","seo-by-rank-math"),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:K,default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}},{id:"404_title",type:"selectVariable",name:(0,o.__)("404 Title","seo-by-rank-math"),desc:(0,o.__)("Title tag on 404 Not Found error page.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-title rank-math-advanced-option",default:"Page Not Found %sep% %sitename%",exclude:["seo_title","seo_description"]},{id:"search_title",type:"selectVariable",name:(0,o.__)("Search Results Title","seo-by-rank-math"),desc:(0,o.__)("Title tag on search results page.","seo-by-rank-math"),classes:"rank-math-supports-variables rank-math-title rank-math-advanced-option",default:"%search_query% %page% %sep% %sitename%",exclude:["seo_title","seo_description"]},{id:"noindex_search",type:"toggle",name:(0,o.__)("Noindex Search Results","seo-by-rank-math"),desc:(0,o.__)("Prevent search results pages from getting indexed by search engines. Search results could be considered to be thin content and prone to duplicate content issues.","seo-by-rank-math"),default:!0,classes:"rank-math-advanced-option"},{id:"noindex_archive_subpages",type:"toggle",name:(0,o.__)("Noindex Subpages","seo-by-rank-math"),desc:(0,o.__)("Prevent all paginated pages from getting indexed by search engines.","seo-by-rank-math"),default:!1,classes:"rank-math-advanced-option"},{id:"noindex_paginated_pages",type:"toggle",name:(0,o.__)("Noindex Paginated Single Pages","seo-by-rank-math"),desc:(0,o.__)("Prevent paginated pages of single pages and posts to show up in the search results. This also applies for the Blog page.","seo-by-rank-math"),default:!1,classes:"rank-math-advanced-option"},{id:"noindex_password_protected",type:"toggle",name:(0,o.__)("Noindex Password Protected Pages","seo-by-rank-math"),desc:(0,o.__)("Prevent password protected pages & posts from getting indexed by search engines.","seo-by-rank-math"),default:!1,classes:"rank-math-advanced-option"}],q={name:"misc",header:{title:(0,o.__)("Misc Pages","seo-by-rank-math"),description:(0,o.__)("Customize SEO meta settings of pages like search results, 404s, etc.","seo-by-rank-math"),link:(0,n.A)("misc-settings","Options Panel Meta Misc Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-misc"}),(0,o.__)("Misc Pages","seo-by-rank-math")),fields:Y};var Q=a(2551),J=a(5124);function X(e){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X(e)}function Z(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=X(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var o=a.call(e,t||"default");if("object"!=X(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==X(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var ee=rankMath,te=ee.isWebStoriesActive,ae=ee.isWooCommerceActive,oe=ee.isEddActive,ne=function(e,t){return"page"===e?(0,o.__)("When the option is enabled and a page is shared on Slack, additional information will be shown (estimated time to read).","seo-by-rank-math"):"product"===e?(0,o.__)("When the option is enabled and a product is shared on Slack, additional information will be shown (price & availability).","seo-by-rank-math"):"download"===e?(0,o.__)("When the option is enabled and a product is shared on Slack, additional information will be shown (price).","seo-by-rank-math"):(0,o.sprintf)((0,o.__)("When the option is enabled and a %s is shared on Slack, additional information will be shown (estimated time to read and author).","seo-by-rank-math"),t)};const re=function(e){var t=[],a="pt_".concat(e,"_"),s=rankMath[e];if((0,r.isUndefined)(s))return t;var i=s.schemaTypes,c=s.taxonomies;if("attachment"===e&&rankMath.isRedirectAttachments)return t.push({id:"redirect_attachment_notice",type:"notice",status:"warning",children:wp.element.createElement("p",{dangerouslySetInnerHTML:{__html:(0,o.sprintf)((0,o.__)("To configure meta tags for your media attachment pages, you need to first %s to parent.","seo-by-rank-math"),'<a href="'.concat((0,Q.A)("options-general"),'">').concat((0,o.__)("disable redirect attachments","seo-by-rank-math"),"</a>"))}})}),t;var d=s.name,m=te&&"web-story"===e;if(t.push({id:a+"title",type:"selectVariable",name:(0,o.sprintf)((0,o.__)("Single %s Title","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Default title tag for single %s pages. This can be changed on a per-post basis on the post editor screen.","seo-by-rank-math"),d),classes:"rank-math-supports-variables rank-math-title",default:"%title% %page% %sep% %sitename%",exclude:["seo_title","seo_description"]}),t.push({id:a+"description",type:"selectVariable",as:"textarea",name:(0,o.sprintf)((0,o.__)("Single %s Description","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Default description for single %s pages. This can be changed on a per-post basis on the post editor screen.","seo-by-rank-math"),d),classes:"rank-math-supports-variables rank-math-description",default:"%excerpt%",exclude:["seo_title","seo_description"]}),t.push({id:a+"archive_title",type:"selectVariable",name:(0,o.sprintf)((0,o.__)("%s Archive Title","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Title for %s archive pages.","seo-by-rank-math"),d),classes:"rank-math-supports-variables rank-math-title",default:"%title% %page% %sep% %sitename%",exclude:["seo_title","seo_description"]}),t.push({id:a+"archive_description",type:"selectVariable",as:"textarea",name:(0,o.sprintf)((0,o.__)("%s Archive Description","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Description for %s archive pages.","seo-by-rank-math"),d),classes:"rank-math-supports-variables rank-math-description",exclude:["seo_title","seo_description"]}),ae&&"product"===e||oe&&"download"===e)t.push({id:a+"default_rich_snippet",type:"toggleGroup",name:(0,o.__)("Schema Type","seo-by-rank-math"),desc:(0,o.__)("Default rich snippet selected when creating a new product.","seo-by-rank-math"),options:{off:(0,o.__)("None","seo-by-rank-math"),product:"download"===e?(0,o.__)("EDD Product","seo-by-rank-math"):(0,o.__)("WooCommerce Product","seo-by-rank-math")},default:s.schemaDefault});else{var p=m?"select":"selectSearch",h={off:(0,o.__)("None","seo-by-rank-math"),article:(0,o.__)("Article","seo-by-rank-math")};2===i.length&&(p="toggleGroup"),t.push({type:p,id:a+"default_rich_snippet",name:(0,o.__)("Schema Type","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Default rich snippet selected when creating a new post of this type. If %s is selected, it will be applied for all existing posts with no Schema selected.","seo-by-rank-math"),"<code>".concat((0,o._x)("Article","Schema type name in a field description","seo-by-rank-math"),"</code>")),options:m?h:i,default:s.schemaDefault}),t.push({id:a+"default_snippet_name",type:"selectVariable",name:(0,o.__)("Headline","seo-by-rank-math"),dep:Z(Z({},a+"default_rich_snippet",["off","",!1,void 0]),"compare","!="),default:"%seo_title%",classes:"rank-math-supports-variables rank-math-advanced-option"}),t.push({id:a+"default_snippet_desc",type:"selectVariable",as:"textarea",name:(0,o.__)("Description","seo-by-rank-math"),default:"%seo_description%",classes:"rank-math-supports-variables rank-math-advanced-option",dep:Z(Z({},a+"default_rich_snippet",["off","book","local","",void 0,!1]),"compare","!=")})}t.push({id:a+"default_article_type",type:"toggleGroup",name:(0,o.__)("Article Type","seo-by-rank-math"),desc:"person"===J.A.knowledgegraph_type?'<div class="notice notice-warning inline rank-math-notice"><p> '.concat((0,o.sprintf)((0,o.__)('Google does not allow Person as the Publisher for articles. Organization will be used instead. You can read more about this <a href="%s" target="_blank">here</a>.',"seo-by-rank-math"),(0,n.A)("google-article-schema")),"</p></div>"):"",options:{Article:(0,o.__)("Article","seo-by-rank-math"),BlogPosting:(0,o.__)("Blog Post","seo-by-rank-math"),NewsArticle:(0,o.__)("News Article","seo-by-rank-math")},dep:Z({},a+"default_rich_snippet","article"),default:s.articleType}),t.push({id:a+"custom_robots",type:"toggle",name:(0,o.sprintf)((0,o.__)("%s Robots Meta","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for single %s pages. Otherwise the default meta will be used, as set in the Global Meta tab.","seo-by-rank-math"),d),classes:"rank-math-advanced-option",default:s.customRobots}),t.push({id:a+"robots",type:"checkboxlist",name:(0,o.sprintf)((0,o.__)("%s Robots Meta","seo-by-rank-math"),d),desc:(0,o.sprintf)((0,o.__)("Custom values for robots meta tag on %s.","seo-by-rank-math"),d),options:l,dep:Z({},a+"custom_robots",!0),classes:"rank-math-advanced-option rank-math-robots-data",default:["index"]});var u=a+"advanced_robots";return t.push({id:u,type:"component",Component:b,name:(0,o.sprintf)((0,o.__)("%s Advanced Robots Meta","seo-by-rank-math"),d),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:Z({},a+"custom_robots",!0),default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}}),t.push({id:a+"link_suggestions",type:"toggle",name:(0,o.__)("Link Suggestions","seo-by-rank-math"),desc:(0,o.__)("Enable Link Suggestions meta box for this post type, along with the Pillar Content feature.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:s.enableLinkSuggestion}),t.push({id:a+"ls_use_fk",type:"toggleGroup",name:(0,o.__)("Link Suggestion Titles","seo-by-rank-math"),desc:(0,o.__)("Use the Focus Keyword as the default text for the links instead of the post titles.","seo-by-rank-math"),options:{titles:(0,o.__)("Titles","seo-by-rank-math"),focus_keywords:(0,o.__)("Focus Keywords","seo-by-rank-math")},dep:Z({},a+"link_suggestions",!0),classes:"rank-math-advanced-option",default:"titles"}),c&&t.push({id:a+"primary_taxonomy",type:"select",name:(0,o.__)("Primary Taxonomy","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Choose which taxonomy you want to use with the Primary Term feature. This will also be the taxonomy shown in the Breadcrumbs when a single %1$s is being viewed.","seo-by-rank-math"),d),options:c,classes:"rank-math-advanced-option",default:s.primaryTaxonomy}),t.push({id:a+"facebook_image",type:"file",name:(0,o.__)("Thumbnail for Facebook","seo-by-rank-math"),desc:(0,o.__)("Image displayed when your page is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices.","seo-by-rank-math")}),"attachment"===e?t.push({id:a+"bulk_editing",type:"toggleGroup",name:(0,o.__)("Bulk Editing","seo-by-rank-math"),desc:(0,o.__)("Add bulk editing columns to the post listing screen.","seo-by-rank-math"),options:{0:(0,o.__)("Disabled","seo-by-rank-math"),editing:(0,o.__)("Enabled","seo-by-rank-math"),readonly:(0,o.__)("Read Only","seo-by-rank-math")},classes:"rank-math-advanced-option",default:"editing"}):(t.push({id:a+"slack_enhanced_sharing",type:"toggle",name:(0,o.__)("Slack Enhanced Sharing","seo-by-rank-math"),desc:ne(e,d),classes:"rank-math-advanced-option",default:(0,r.includes)(["post","page","product","download"],e)}),t.push({id:a+"add_meta_box",type:"toggle",name:(0,o.__)("Add SEO Controls","seo-by-rank-math"),desc:(0,o.__)("Add SEO controls for the editor screen to customize SEO options for posts in this post type.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0}),t.push({id:a+"bulk_editing",type:"toggleGroup",name:(0,o.__)("Bulk Editing","seo-by-rank-math"),desc:(0,o.__)("Add bulk editing columns to the post listing screen.","seo-by-rank-math"),options:{0:(0,o.__)("Disabled","seo-by-rank-math"),editing:(0,o.__)("Enabled","seo-by-rank-math"),readonly:(0,o.__)("Read Only","seo-by-rank-math")},dep:Z({},a+"add_meta_box",!0),classes:"rank-math-advanced-option",default:"editing"}),t.push({id:a+"analyze_fields",type:"textarea",name:(0,o.__)("Custom Fields","seo-by-rank-math"),desc:(0,o.__)("List of custom fields name to include in the Page analysis. Add one per line.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:""})),s.hasArchive||(t=(0,r.filter)(t,function(e){return e.id!==a+"archive_title"&&e.id!==a+"archive_description"&&e.id!==a+"facebook_image"})),"attachment"===e&&(t=(0,r.filter)(t,function(e){return e.id!==a+"link_suggestions"&&e.id!==a+"ls_use_fk"})),m&&(t=(0,r.filter)(t,function(e){return e.id!==a+"default_snippet_desc"&&e.id!==a+"description"&&e.id!==a+"link_suggestions"&&e.id!==a+"ls_use_fk"&&e.id!==a+"analyze_fields"&&e.id!==a+"bulk_editing"&&e.id!==a+"add_meta_box"})),t};a.dn(re);var se=rankMath.choices,ie=se.accessiblePostTypes,le=se.postTypes;const ce=(de=rankMath.choices.choicesPostTypeIcons,me={post:(0,n.A)("post-settings","Options Panel Meta Posts Tab"),page:(0,n.A)("page-settings","Options Panel Meta Pages Tab"),product:(0,n.A)("product-settings","Options Panel Meta Products Tab"),attachment:(0,n.A)("media-settings","Options Panel Meta Attachments Tab")},pe={},he={p_types:{name:"p_types",title:(0,o.__)("Post Types:","seo-by-rank-math"),className:"separator",disabled:!0}},(0,r.forEach)((0,r.values)(ie),function(e){var t=re(e);pe[e]=t;var a,n=me[e]||"",r=(a=e,{post:"single "+a,page:"single "+a,product:"product pages",attachment:"media "+a})[e]||e,s=de[e]||de.default,i="attachment"===e?(0,o.__)("Attachments","seo-by-rank-math"):le[e];he["post-type-"+e]={fields:t,name:"post-type-"+e,title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:s}),i),header:{title:i,description:(0,o.sprintf)((0,o.__)("Change Global SEO, Schema, and other settings for %s.","seo-by-rank-math"),r),link:n}}}),he);var de,me,pe,he;function ue(e){return ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ue(e)}function _e(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=ue(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var o=a.call(e,t||"default");if("object"!=ue(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ue(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const be=function(e,t){var a="tax_".concat(e,"_"),n=t.singular_name,s=[{id:a+"title",type:"selectVariable",name:(0,o.sprintf)((0,o.__)("%s Archive Titles","seo-by-rank-math"),n),desc:(0,o.sprintf)((0,o.__)("Title tag for %s archives","seo-by-rank-math"),n),exclude:["seo_title","seo_description"],classes:"rank-math-supports-variables rank-math-title",default:"%term% Archives %page% %sep% %sitename%"},{id:a+"description",type:"selectVariable",as:"textarea",name:(0,o.sprintf)((0,o.__)("%s Archive Descriptions","seo-by-rank-math"),n),desc:(0,o.sprintf)((0,o.__)("Description for %s archives","seo-by-rank-math"),n),exclude:["seo_title","seo_description"],classes:"rank-math-supports-variables rank-math-description",default:"%term_description%"},{id:a+"custom_robots",type:"toggle",name:(0,o.sprintf)((0,o.__)("%s Archives Robots Meta","seo-by-rank-math"),n),desc:(0,o.sprintf)((0,o.__)("Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for %s archive pages. Otherwise the default meta will be used, as set in the Global Meta tab.","seo-by-rank-math"),(0,r.lowerCase)(n)),classes:"rank-math-advanced-option",default:(0,r.includes)(["post_tag","post_format"],e)},{id:a+"robots",type:"checkboxlist",name:(0,o.sprintf)((0,o.__)("%s Archives Robots Meta","seo-by-rank-math"),n),desc:(0,o.sprintf)((0,o.__)("Custom values for robots meta tag on %s archives.","seo-by-rank-math"),n),options:l,dep:_e({},a+"custom_robots",!0),classes:"rank-math-advanced-option rank-math-robots-data",default:["index"]},{id:a+"advanced_robots",type:"component",Component:b,name:(0,o.sprintf)((0,o.__)("%s Archives Advanced Robots Meta","seo-by-rank-math"),n),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:_e({},a+"custom_robots",!0),default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}},{id:a+"slack_enhanced_sharing",type:"toggle",name:(0,o.__)("Slack Enhanced Sharing","seo-by-rank-math"),desc:(0,o.__)("When the option is enabled and a term from this taxonomy is shared on Slack, additional information will be shown (the total number of items with this term).","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!0},{id:a+"add_meta_box",type:"toggle",name:(0,o.__)("Add SEO Controls","seo-by-rank-math"),desc:(0,o.__)("Add the SEO Controls for the term editor screen to customize SEO options for individual terms in this taxonomy.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:"category"===e},{id:a+"bulk_editing",type:"toggleGroup",name:(0,o.__)("Bulk Editing","seo-by-rank-math"),desc:(0,o.__)("Add bulk editing columns to the terms listing screen.","seo-by-rank-math"),options:{0:(0,o.__)("Disabled","seo-by-rank-math"),editing:(0,o.__)("Enabled","seo-by-rank-math"),readonly:(0,o.__)("Read Only","seo-by-rank-math")},dep:_e({},a+"add_meta_box",!0),classes:"rank-math-advanced-option",default:"0"},{id:"remove_"+e+"_snippet_data",type:"toggle",name:(0,o.__)("Remove Snippet Data","seo-by-rank-math"),desc:(0,o.sprintf)((0,o.__)("Remove schema data from %s.","seo-by-rank-math"),n),classes:"rank-math-advanced-option",default:(0,r.includes)(["product_cat","product_tag"],e)||"pa_"===e.substring(0,3)}];return"post_format"===e&&(0,r.filter)(s,function(t){return t.id!==a+"add_meta_box"&&t.id!=="remove_"+e+"_snippet_data"}),s};function ye(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o,n,r,s,i=[],l=!0,c=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(o=r.call(a)).done)&&(i.push(o.value),i.length!==t);l=!0);}catch(e){c=!0,n=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(c)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return fe(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?fe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,o=Array(t);a<t;a++)o[a]=e[a];return o}a.dn(be);const ge=function(){var e=rankMath.choices.choicesTaxonomyIcons,t={category:"category archive pages",product_cat:"Product category pages",product_tag:"Product tag pages"},a={category:(0,n.A)("category-settings","Options Panel Meta Categories Tab"),post_tag:(0,n.A)("tag-settings","Options Panel Meta Tags Tab"),product_cat:(0,n.A)("product-categories-settings","Options Panel Meta Product Categories Tab"),product_tag:(0,n.A)("product-tags-settings","Options Panel Meta Product Tags Tab")},s={};(0,r.forEach)((0,r.values)(rankMath.choices.accessibleTaxonomies),function(e){var t=(0,r.join)((0,r.values)(e.object_type)," + ");s[t]||(s[t]={}),s[t][e.name]=e});var i={},l={};return(0,r.forEach)((0,r.entries)(s),function(n){var s=ye(n,2),c=s[0],d=s[1];i[c]={name:"".concat(c,"_taxonomies"),title:c+":",className:"separator",disabled:!0},(0,r.forEach)((0,r.values)(d),function(n){var r=n.name,s=n.label,c=n.labels;if("post_format"!==r){var d=be(r,c);l[r]=d;var m=a[r]||"",p=t[r]||s,h=e[r]||e.default;i["taxonomy-"+r]={fields:d,name:"taxonomy-"+r,title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:h}),s),header:{title:s,description:(0,o.sprintf)((0,o.__)("Change Global SEO, Schema, and other settings for %s.","seo-by-rank-math"),p),link:m}}}})}),i}(),ke=[{id:"bp_group_title",type:"selectVariable",name:(0,o.__)("Group Title","seo-by-rank-math"),desc:(0,o.__)("Title tag for groups","seo-by-rank-math"),exclude:["seo_title","seo_description"],default:""},{id:"bp_group_description",type:"selectVariable",as:"textarea",name:(0,o.__)("Group Description","seo-by-rank-math"),desc:(0,o.__)("BuddyPress group description","seo-by-rank-math"),exclude:["seo_title","seo_description"]},{id:"bp_group_custom_robots",type:"toggle",name:(0,o.__)("Group Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Select custom robots meta for Group archive pages. Otherwise the default meta will be used, as set in the Global Meta tab.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!1},{id:"bp_group_robots",type:"checkboxlist",name:(0,o.__)("Group Robots Meta","seo-by-rank-math"),desc:(0,o.__)("Custom values for robots meta tag on groups page.","seo-by-rank-math"),options:l,classes:"rank-math-advanced-option rank-math-robots-data",dep:{bp_group_custom_robots:!0}},{id:"bp_group_advanced_robots",type:"component",Component:b,name:(0,o.__)("Group Advanced Robots Meta","seo-by-rank-math"),classes:"rank-math-advanced-option rank-math-advanced-robots-field",dep:{bp_group_custom_robots:!0},default:{"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"}}];const ve={buddypress:{name:"buddypress",title:(0,o.__)("BuddyPress:","seo-by-rank-math"),className:"separator",disabled:!0},"buddypress-groups":{fields:ke,name:"buddypress-groups",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-users"}),(0,o.__)("Groups","seo-by-rank-math")),header:{title:(0,o.__)("Groups","seo-by-rank-math"),description:(0,o.__)("This tab contains SEO options for BuddyPress Group pages.","seo-by-rank-math")}}};function we(e){return we="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},we(e)}function xe(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,o)}return a}function Se(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?xe(Object(a),!0).forEach(function(t){Ae(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):xe(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function Ae(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=we(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var o=a.call(e,t||"default");if("object"!=we(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==we(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Oe=Se(Se(Se({global:k,local:C,social:G,homepage:L,author:$,misc:q},ce),ge),ve)}}]);PK     ’ŠU]O,¼Zö5 ö5   assets/admin/js/gutenberg.jsnu „[µü¤        !function(){var t={6942:function(t,e){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=a(t,i(r)))}return t}function i(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return o.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var r in t)n.call(t,r)&&t[r]&&(e=a(e,r));return e}function a(t,e){return e?t?t+" "+e:t+e:t}t.exports?(o.default=o,t.exports=o):void 0===(r=function(){return o}.apply(e,[]))||(t.exports=r)}()}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},function(){"use strict";var t={};r.r(t),r.d(t,{deleteSchema:function(){return fe},lockModifiedDate:function(){return E},refreshResults:function(){return Vt},resetDirtyMetadata:function(){return I},resetRedirection:function(){return V},resetStore:function(){return j},saveSchema:function(){return pe},saveTemplate:function(){return de},schemaUpdated:function(){return oe},setEditingSchemaId:function(){return ie},setEditorTab:function(){return ae},setTemplateTab:function(){return ue},setVersion:function(){return Wt},toggleFrontendScore:function(){return S},toggleIsDiviPageSettingsBarActive:function(){return qt},toggleIsDiviRankMathModalActive:function(){return $t},toggleLoaded:function(){return Bt},toggleSchemaEditor:function(){return re},toggleSchemaTemplates:function(){return ne},toggleSnippetEditor:function(){return yt},updateAIScore:function(){return me},updateAdvancedRobots:function(){return T},updateAnalysisScore:function(){return _},updateAppData:function(){return b},updateAppUi:function(){return v},updateBreadcrumbTitle:function(){return D},updateCanonicalUrl:function(){return P},updateDescription:function(){return K},updateEditSchema:function(){return le},updateEditSchemas:function(){return ce},updateFacebookDescription:function(){return M},updateFacebookHasOverlay:function(){return U},updateFacebookImage:function(){return C},updateFacebookImageID:function(){return R},updateFacebookImageOverlay:function(){return N},updateFacebookTitle:function(){return A},updateFeaturedImage:function(){return H},updateHasRedirect:function(){return W},updateHighlightedParagraphs:function(){return Jt},updateKeywords:function(){return w},updatePermalink:function(){return x},updatePillarContent:function(){return k},updatePostID:function(){return F},updatePrimaryTermID:function(){return B},updateRedirection:function(){return z},updateRedirectionItem:function(){return G},updateRobots:function(){return O},updateSchemas:function(){return se},updateSelectedKeyword:function(){return zt},updateSerpDescription:function(){return ht},updateSerpSlug:function(){return mt},updateSerpTitle:function(){return dt},updateSnippetPreviewType:function(){return gt},updateSocialTab:function(){return Gt},updateTitle:function(){return L},updateTwitterAppCountry:function(){return Ht},updateTwitterAppDescription:function(){return At},updateTwitterAppGoogleplayID:function(){return xt},updateTwitterAppGoogleplayName:function(){return Lt},updateTwitterAppGoogleplayUrl:function(){return Kt},updateTwitterAppIpadID:function(){return Ut},updateTwitterAppIpadName:function(){return Nt},updateTwitterAppIpadUrl:function(){return Ft},updateTwitterAppIphoneID:function(){return Mt},updateTwitterAppIphoneName:function(){return Ct},updateTwitterAppIphoneUrl:function(){return Rt},updateTwitterAuthor:function(){return St},updateTwitterCardType:function(){return vt},updateTwitterDescription:function(){return kt},updateTwitterHasOverlay:function(){return Tt},updateTwitterImage:function(){return Pt},updateTwitterImageID:function(){return _t},updateTwitterImageOverlay:function(){return Ot},updateTwitterPlayerSize:function(){return Et},updateTwitterPlayerStreamCtype:function(){return jt},updateTwitterPlayerStreamUrl:function(){return It},updateTwitterPlayerUrl:function(){return Dt},updateTwitterTitle:function(){return wt},updateTwitterUseFacebook:function(){return bt}});var e={};r.r(e),r.d(e,{appData:function(){return we},appUi:function(){return Oe}});var n={};r.r(n),r.d(n,{getAdvancedRobots:function(){return Ce},getAnalysisScore:function(){return Ie},getAppData:function(){return De},getBreadcrumbTitle:function(){return Ue},getCanonicalUrl:function(){return Re},getDescription:function(){return nr},getDirtyMetadata:function(){return Ee},getEditSchemas:function(){return Sr},getEditingSchema:function(){return _r},getEditorTab:function(){return Tr},getFacebookAuthor:function(){return Je},getFacebookDescription:function(){return $e},getFacebookHasOverlay:function(){return Ye},getFacebookImage:function(){return Ze},getFacebookImageID:function(){return Qe},getFacebookImageOverlay:function(){return Xe},getFacebookTitle:function(){return qe},getFeaturedImage:function(){return or},getFeaturedImageHtml:function(){return ir},getHighlightedParagraphs:function(){return We},getKeywords:function(){return je},getPermalink:function(){return rr},getPillarContent:function(){return Ae},getPostID:function(){return tr},getPreviewSchema:function(){return Pr},getPrimaryTermID:function(){return ar},getRedirectionID:function(){return ur},getRedirectionItem:function(){return lr},getRedirectionType:function(){return cr},getRedirectionUrl:function(){return sr},getRichSnippets:function(){return Ne},getRobots:function(){return Me},getSchemas:function(){return kr},getSelectedKeyword:function(){return Ke},getSerpDescription:function(){return hr},getSerpSlug:function(){return mr},getSerpTitle:function(){return dr},getShowScoreFrontend:function(){return Fe},getSnippetPreviewType:function(){return gr},getSocialTab:function(){return He},getTemplateTab:function(){return Or},getTitle:function(){return er},getTwitterAppCountry:function(){return Wr},getTwitterAppDescription:function(){return Nr},getTwitterAppGoogleplayID:function(){return zr},getTwitterAppGoogleplayName:function(){return Gr},getTwitterAppGoogleplayUrl:function(){return Vr},getTwitterAppIpadID:function(){return Kr},getTwitterAppIpadName:function(){return Hr},getTwitterAppIpadUrl:function(){return Br},getTwitterAppIphoneID:function(){return Fr},getTwitterAppIphoneName:function(){return xr},getTwitterAppIphoneUrl:function(){return Lr},getTwitterAuthor:function(){return Ar},getTwitterCardType:function(){return Er},getTwitterDescription:function(){return jr},getTwitterHasOverlay:function(){return Rr},getTwitterImage:function(){return Cr},getTwitterImageID:function(){return Mr},getTwitterImageOverlay:function(){return Ur},getTwitterPlayerSize:function(){return $r},getTwitterPlayerStream:function(){return Jr},getTwitterPlayerStreamCtype:function(){return Qr},getTwitterPlayerUrl:function(){return qr},getTwitterTitle:function(){return Ir},getTwitterUseFacebook:function(){return Dr},hasRedirect:function(){return pr},hasSchemaUpdated:function(){return wr},isDiviPageSettingsBarActive:function(){return Ge},isDiviRankMathModalActive:function(){return Ve},isLoaded:function(){return Le},isModifiedDateLocked:function(){return xe},isPro:function(){return ze},isRefreshing:function(){return Be},isSchemaEditorOpen:function(){return br},isSchemaTemplatesOpen:function(){return vr},isSnippetEditorOpen:function(){return yr}});const o=jQuery;var i=r.n(o);const a=lodash,u=wp.i18n,c=wp.data,s=wp.element,l=wp.plugins,p=wp.hooks,f=wp.editor;function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}function m(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,h(n.key),n)}}function h(t){var e=function(t,e){if("object"!=d(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=d(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==d(e)?e:e+""}var y=function(){return function(t,e,r){return e&&m(t.prototype,e),r&&m(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),function(t,e,r){(e=h(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r}(this,"map",null)},[{key:"swap",value:function(t,e){var r=this;if(!(t=t||""))return"";var n=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return t.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(n,function(t){return r.replace(e,t)}).trim()}},{key:"replace",value:function(t,e){var r=e.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(r)){var n="term_description"===r?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():i()(n).val()}return r.includes("customfield(")?(r=r.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[r]:"":(t=t||this.getMap(),(r="seo_description"===(r="seo_title"===(r=r.includes("(")?r.split("(")[0]:r)?"title":r)?"excerpt":r)in t?t[r]:"")}},{key:"getMap",value:function(){var t=this;return null!==this.map||(this.map={},i().each(rankMath.variables,function(e,r){e=e.toLowerCase().replace(/%+/g,"").split("(")[0],t.map[e]=r.example})),this.map}},{key:"setVariable",value:function(t,e){null!==this.map?this.map[t]=e:void 0!==rankMath.variables[t]&&(rankMath.variables[t].example=e)}}])}(),g=new y;function b(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,p.applyFilters)("rank_math_sanitize_data",e,t,r),null!==n&&(n=(0,p.applyFilters)("rank_math_sanitize_meta_value",n,t,r)),n=null===n?e:n,(0,p.doAction)("rank_math_data_changed",t,e,r),{type:"RANK_MATH_APP_DATA",key:t,value:e,metaKey:r,metaValue:n}}function v(t,e){return(0,p.doAction)("rank_math_update_app_ui",t,e),{type:"RANK_MATH_APP_UI",key:t,value:e}}function w(t){return g.setVariable("focuskw",t.split(",")[0]),rankMathEditor.refresh("keyword"),b("keywords",t,"rank_math_focus_keyword")}function k(t){return b("pillarContent",t,"rank_math_pillar_content",!0===t?"on":"off")}function S(t){return b("showScoreFrontend",t,"rank_math_dont_show_seo_score",!0===t?"off":"on")}function _(t){return b("score",t,"rank_math_seo_score")}function P(t){return b("canonicalUrl",t,"rank_math_canonical_url")}function T(t){return b("advancedRobots",t,"rank_math_advanced_robots")}function O(t){return b("robots",t,"rank_math_robots",Object.keys(t))}function D(t){return b("breadcrumbTitle",t,"rank_math_breadcrumb_title")}function E(t){return b("lockModifiedDate",t,"rank_math_lock_modified_date")}function I(){return b("dirtyMetadata",{})}function j(t){return{type:"RESET_STORE",value:t}}function A(t){return b("facebookTitle",t,"rank_math_facebook_title")}function M(t){return b("facebookDescription",t,"rank_math_facebook_description")}function C(t){return b("facebookImage",t,"rank_math_facebook_image")}function R(t){return b("facebookImageID",t,"rank_math_facebook_image_id")}function U(t){return b("facebookHasOverlay",t,"rank_math_facebook_enable_image_overlay",!0===t?"on":"off")}function N(t){return b("facebookImageOverlay",t,"rank_math_facebook_image_overlay")}function F(t){return rankMath.objectID=t,b("postID",t)}function x(t){return b("permalink",t,"permalink")}function L(t){return b("title",t,"rank_math_title")}function K(t){return b("description",t,"rank_math_description")}function H(t){return b("featuredImage",t)}function B(t,e){return b("primaryTerm",parseInt(t),"rank_math_primary_"+e)}function z(t,e){return b(t,e)}function G(t){return v("redirectionItem",t)}function V(){return v("redirectionItem",{})}function W(t){return v("hasRedirect",t)}const q=function(t){return t.replace(/<\/?[a-z][^>]*?>/gi,"")};r.dn(q);const $=function(t){return t.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};r.dn($);const J=function(t){return t.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};r.dn(J);const Q=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,e)};r.dn(Q);const Z=function(t){return t.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};r.dn(Z);const Y=function(t){return t.replace(/<!--[\s\S]*?-->/g,"")};r.dn(Y);const X=function(t){return t.replace(/&\S+?;/g,"")};function tt(t){return(0,a.isUndefined)(t)||!t?"":(0,a.flow)([$,Q,q,Y,X,J,Z])(t)}r.dn(X);const et=wp.autop;var rt="[^<>&/\\[\\]\0- =]+?",nt=new RegExp("\\["+rt+"( [^\\]]+?)?\\]","g"),ot=new RegExp("\\[/"+rt+"\\]","g");const it=function(t){return t.replace(nt,"").replace(ot,"")};r.dn(it);const at=function(t,e){var r=function(t,e){for(var r,n=/<p(?:[^>]+)?>(.*?)<\/p>/gi,o=[];null!==(r=n.exec(t));)o.push(r);return(0,a.map)(o,function(t){return e?tt(t[1]):t[1]})}(t=(0,a.flow)([it,Y,et.autop])(t),e=e||!1);return 0<r.length?r:[e?tt(t):t]};r.dn(at),r.dn(ct);var ut=document.createElement("div");function ct(t){return t&&"string"==typeof t&&(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),ut.innerHTML=t,t=ut.textContent,ut.textContent=""),t}r.dn(ft);var st=function(t,e){return t=(t=tt(t)).replace(/\r?\n|\r/g," "),e?(0,a.truncate)(t,{length:e,separator:" "}):t},lt=function(t){if((0,a.isEmpty)(t))return"";t=Q(t),t=$(t),t=(0,a.unescape)(t).replace(/\[caption[^\]]*\](.*)\[\/caption\]/g,"");var e=(0,a.filter)(at(t,!0),function(t){return""!==t.trim()});if(!e.length)return"";var r=rankMathEditor.getPrimaryKeyword();if(""!==r){var n=(0,a.filter)(e,function(t){return(0,a.includes)(t.toLowerCase(),r.toLowerCase())});if(0<n.length)return st(n[0],160)}return st(e[0],160)},pt=function(t){return!(0,a.isUndefined)(t)&&!(0,a.isEmpty)(t)&&tt(t)};function ft(t){var e=rankMathEditor.assessor.dataCollector.getData(),r=e.excerpt,n=lt(e.content),o=(0,a.isUndefined)(r)||(0,a.isEmpty)(r)?n:(0,a.unescape)(r);if(g.setVariable("excerpt",o),g.setVariable("seo_description",o),""!==(t=ct((0,p.applyFilters)("rankMath/description",t))))return tt(t);var i=(0,a.unescape)(rankMath.assessor.serpData.descriptionTemplate);return"term"===rankMath.objectType?pt(i)||pt(r)||n:pt(r)||pt(i)||n}function dt(t){return t=g.swap(""!==t?t:rankMath.assessor.serpData.titleTemplate),rankMathEditor.refresh("title"),v("serpTitle",ct(t))}function mt(t){return t=""!==t?t:rankMathEditor.assessor.dataCollector.getSlug(),rankMathEditor.refresh("permalink"),v("serpSlug",t)}function ht(t){return t=g.swap(ft(t)),rankMathEditor.refresh("description"),v("serpDescription",t)}function yt(t){return v("isSnippetEditorOpen",t)}function gt(t){return v("snippetPreviewType",t)}function bt(t){return b("twitterUseFacebook",t,"rank_math_twitter_use_facebook",!0===t?"on":"off")}function vt(t){return b("twitterCardType",t,"rank_math_twitter_card_type")}function wt(t){return b("twitterTitle",t,"rank_math_twitter_title")}function kt(t){return b("twitterDescription",t,"rank_math_twitter_description")}function St(t){return b("twitterAuthor",t,"rank_math_twitter_author")}function _t(t){return b("twitterImageID",t,"rank_math_twitter_image_id")}function Pt(t){return b("twitterImage",t,"rank_math_twitter_image")}function Tt(t){return b("twitterHasOverlay",t,"rank_math_twitter_enable_image_overlay",!0===t?"on":"off")}function Ot(t){return b("twitterImageOverlay",t,"rank_math_twitter_image_overlay")}function Dt(t){return b("twitterPlayerUrl",t,"rank_math_twitter_player_url")}function Et(t){return b("twitterPlayerSize",t,"rank_math_twitter_player_size")}function It(t){return b("twitterPlayerStream",t,"rank_math_twitter_player_stream")}function jt(t){return b("twitterPlayerStreamCtype",t,"rank_math_twitter_player_stream_ctype")}function At(t){return b("twitterAppDescription",t,"rank_math_twitter_app_description")}function Mt(t){return b("twitterAppIphoneID",t,"rank_math_twitter_app_iphone_id")}function Ct(t){return b("twitterAppIphoneName",t,"rank_math_twitter_app_iphone_name")}function Rt(t){return b("twitterAppIphoneUrl",t,"rank_math_twitter_app_iphone_url")}function Ut(t){return b("twitterAppIpadID",t,"rank_math_twitter_app_ipad_id")}function Nt(t){return b("twitterAppIpadName",t,"rank_math_twitter_app_ipad_name")}function Ft(t){return b("twitterAppIpadUrl",t,"rank_math_twitter_app_ipad_url")}function xt(t){return b("twitterAppGoogleplayID",t,"rank_math_twitter_app_googleplay_id")}function Lt(t){return b("twitterAppGoogleplayName",t,"rank_math_twitter_app_googleplay_name")}function Kt(t){return b("twitterAppGoogleplayUrl",t,"rank_math_twitter_app_googleplay_url")}function Ht(t){return b("twitterAppCountry",t,"rank_math_twitter_app_country")}function Bt(t){return v("isLoaded",t)}function zt(t){return v("selectedKeyword",t)}function Gt(t){return v("socialTab",t)}function Vt(){return v("refreshResults",Date.now())}function Wt(){return v("isPro",!0)}function qt(t){return v("isDiviPageSettingsBarActive",t)}function $t(t){return v("isDiviRankMathModalActive",t)}function Jt(t){return v("highlightedParagraphs",t)}const Qt=wp.apiFetch;var Zt=r.n(Qt);function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}function Xt(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function te(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Xt(Object(r),!0).forEach(function(e){ee(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Xt(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function ee(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Yt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Yt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Yt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function re(t){return v("isSchemaEditorOpen",t)}function ne(t){return v("isSchemaTemplatesOpen",t)}function oe(t){return v("schemaUpdated",t)}function ie(t){return v("editingSchemaId",t)}function ae(t){return v("editorTab",t)}function ue(t){return v("templateTab",t)}function ce(t){return v("editSchemas",t)}function se(t){return b("schemas",t)}function le(t,e){var r=te({},(0,c.select)("rank-math").getEditSchemas());return r[t]=e,v("editSchemas",r)}function pe(t,e){var r=te({},(0,c.select)("rank-math").getSchemas());return r[t]=e,b("schemas",r)}function fe(t){var e=te({},(0,c.select)("rank-math").getSchemas());return delete e[t],(0,p.doAction)("rank_math_schema_trash",t),b("schemas",e,"rank_math_delete_"+t,"")}function de(t,e,r){return Zt()({method:"POST",path:"rankmath/v1/saveTemplate",data:{schema:t,postId:r}}).then(function(r){e({loading:!1,showNotice:!0,postId:r.id}),setTimeout(function(){e({showNotice:!1}),(0,a.get)(rankMath,"isTemplateScreen",!1)&&(document.title=(0,u.__)("Edit Schema","seo-by-rank-math"),window.history.pushState(null,"",r.link.replace(/&amp;/g,"&")))},2e3),rankMath.schemaTemplates.push({schema:t,title:t.metadata.title,type:t["@type"]})}),e({loading:!0}),{type:"DONT_WANT_TO_DO_SOMETHING"}}function me(t){return b("contentAIScore",t,"rank_math_contentai_score",t)}function he(t){return he="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},he(t)}function ye(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function ge(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?ye(Object(r),!0).forEach(function(e){be(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ye(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function be(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=he(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=he(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==he(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var ve=function(t){var e=t.assessor.serpData,r=t.assessor.hasRedirection;return{postID:null,title:e.title?e.title:e.titleTemplate,description:e.description,keywords:e.focusKeywords?e.focusKeywords:"",pillarContent:e.pillarContent,featuredImage:"",permalink:!1,primaryTerm:e.primaryTerm,robots:e.robots,advancedRobots:e.advancedRobots,canonicalUrl:e.canonicalUrl,breadcrumbTitle:e.breadcrumbTitle,showScoreFrontend:e.showScoreFrontend,lockModifiedDate:e.lockModifiedDate,redirectionID:r?(0,a.get)(t.assessor,"redirection.id",""):"",redirectionType:r?(0,a.get)(t.assessor,"redirection.header_code",""):"",redirectionUrl:r?(0,a.get)(t.assessor,"redirection.url_to",""):"",facebookTitle:e.facebookTitle,facebookImage:e.facebookImage,facebookImageID:e.facebookImageID,facebookAuthor:e.facebookAuthor,facebookDescription:e.facebookDescription,facebookHasOverlay:e.facebookHasOverlay,facebookImageOverlay:e.facebookImageOverlay,twitterTitle:e.twitterTitle,twitterImage:e.twitterImage,twitterAuthor:e.twitterAuthor,twitterImageID:e.twitterImageID,twitterCardType:e.twitterCardType,twitterUseFacebook:e.twitterUseFacebook,twitterDescription:e.twitterDescription,twitterHasOverlay:e.twitterHasOverlay,twitterImageOverlay:e.twitterImageOverlay,twitterPlayerUrl:e.twitterPlayerUrl,twitterPlayerSize:e.twitterPlayerSize,twitterPlayerStream:e.twitterPlayerStream,twitterPlayerStreamCtype:e.twitterPlayerStreamCtype,twitterAppDescription:e.twitterAppDescription,twitterAppIphoneName:e.twitterAppIphoneName,twitterAppIphoneID:e.twitterAppIphoneID,twitterAppIphoneUrl:e.twitterAppIphoneUrl,twitterAppIpadName:e.twitterAppIpadName,twitterAppIpadID:e.twitterAppIpadID,twitterAppIpadUrl:e.twitterAppIpadUrl,twitterAppGoogleplayName:e.twitterAppGoogleplayName,twitterAppGoogleplayID:e.twitterAppGoogleplayID,twitterAppGoogleplayUrl:e.twitterAppGoogleplayUrl,twitterAppCountry:e.twitterAppCountry,schemas:(0,a.get)(t,"schemas",{}),score:0,dirtyMetadata:{}}};function we(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ve(rankMath),e=arguments.length>1?arguments[1]:void 0,r=ge({},t.dirtyMetadata);return!1!==e.metaKey&&(r[e.metaKey]=e.metaValue),"RESET_STORE"===e.type?ge({},ve(e.value)):"RANK_MATH_APP_DATA"===e.type?"dirtyMetadata"===e.key?ge(ge({},t),{},{dirtyMetadata:e.value}):ge(ge({},t),{},be(be({},e.key,e.value),"dirtyMetadata",r)):t}function ke(t){return ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ke(t)}function Se(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function _e(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Se(Object(r),!0).forEach(function(e){Pe(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Se(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Pe(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=ke(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=ke(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ke(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Te={isLoaded:!1,isPro:!1,selectedKeyword:{tag:"",index:0,data:{value:""}},hasRedirect:rankMath.assessor.hasRedirection&&!(0,a.isEmpty)((0,a.get)(rankMath.assessor,"redirection.id",""))&&!(0,a.isEmpty)((0,a.get)(rankMath.assessor,"redirection.url_to","")),serpTitle:"",serpSlug:"",serpDescription:(0,a.get)(rankMath.assessor,"serpData.description",""),isSnippetEditorOpen:!1,snippetPreviewType:"",refreshResults:"",redirectionItem:{},socialTab:"facebook",highlightedParagraphs:[],editorTab:"",templateTab:"",editSchemas:{},editingSchemaId:"",isSchemaEditorOpen:!1,isSchemaTemplatesOpen:!1,schemaUpdated:!1,isDiviRankMathModalActive:!1,isDiviPageSettingsBarActive:!1};function Oe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Te,e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?_e(_e({},t),{},Pe({},e.key,e.value)):t}function De(t){return t.appData}function Ee(t){return t.appData.dirtyMetadata}function Ie(t){return t.appData.score}function je(t){return t.appData.keywords}function Ae(t){return t.appData.pillarContent}function Me(t){return t.appData.robots}function Ce(t){return t.appData.advancedRobots}function Re(t){return t.appData.canonicalUrl}function Ue(t){return t.appData.breadcrumbTitle}function Ne(t){return"todo"}function Fe(t){return t.appData.showScoreFrontend}function xe(t){return t.appData.lockModifiedDate}function Le(t){return t.appUi.isLoaded}function Ke(t){return t.appUi.selectedKeyword}function He(t){return t.appUi.socialTab}function Be(t){return t.appUi.refreshResults}function ze(t){return t.appUi.isPro}function Ge(t){return t.appUi.isDiviPageSettingsBarActive}function Ve(t){return t.appUi.isDiviRankMathModalActive}function We(t){return t.appUi.highlightedParagraphs}function qe(t){return t.appData.facebookTitle}function $e(t){return t.appData.facebookDescription}function Je(t){return t.appData.facebookAuthor}function Qe(t){return t.appData.facebookImageID}function Ze(t){return t.appData.facebookImage}function Ye(t){return t.appData.facebookHasOverlay}function Xe(t){return""!==t.appData.facebookImageOverlay?t.appData.facebookImageOverlay:"play"}function tr(t){return t.appData.postID}function er(t){return t.appData.title}function rr(t){return t.appData.permalink}function nr(t){return t.appData.description}function or(t){return t.appData.featuredImage}function ir(t){var e=t.appData.featuredImage;return'<img src="'.concat(e.source_url,'" alt="').concat(e.alt_text,'" >')}function ar(t){return t.appData.primaryTerm}function ur(t){return String(t.appData.redirectionID)}function cr(t){return t.appData.redirectionType}function sr(t){return t.appData.redirectionUrl}function lr(t){return t.appUi.redirectionItem}function pr(t){return t.appUi.hasRedirect}const fr=wp.url;function dr(t){return ct(t.appUi.serpTitle)}function mr(t){return(0,fr.safeDecodeURIComponent)(t.appUi.serpSlug)}function hr(t){return t.appUi.serpDescription}function yr(t){return t.appUi.isSnippetEditorOpen}function gr(t){return t.appUi.snippetPreviewType}function br(t){return t.appUi.isSchemaEditorOpen}function vr(t){return t.appUi.isSchemaTemplatesOpen}function wr(t){return t.appUi.schemaUpdated}function kr(t){return t.appData.schemas}function Sr(t){return t.appUi.editSchemas}function _r(t){return{id:t.appUi.editingSchemaId,data:t.appUi.editSchemas[t.appUi.editingSchemaId]}}function Pr(t){return t.appData.schemas[t.appUi.editingSchemaId]}function Tr(t){return t.appUi.editorTab}function Or(t){return t.appUi.templateTab}function Dr(t){return t.appData.twitterUseFacebook}function Er(t){return t.appData.twitterCardType}function Ir(t){return t.appData.twitterTitle}function jr(t){return t.appData.twitterDescription}function Ar(t){return t.appData.twitterAuthor}function Mr(t){return t.appData.twitterImageID}function Cr(t){return t.appData.twitterImage}function Rr(t){return t.appData.twitterHasOverlay}function Ur(t){return""!==t.appData.twitterImageOverlay?t.appData.twitterImageOverlay:"play"}function Nr(t){return t.appData.twitterAppDescription}function Fr(t){return t.appData.twitterAppIphoneID}function xr(t){return t.appData.twitterAppIphoneName}function Lr(t){return t.appData.twitterAppIphoneUrl}function Kr(t){return t.appData.twitterAppIpadID}function Hr(t){return t.appData.twitterAppIpadName}function Br(t){return t.appData.twitterAppIpadUrl}function zr(t){return t.appData.twitterAppGoogleplayID}function Gr(t){return t.appData.twitterAppGoogleplayName}function Vr(t){return t.appData.twitterAppGoogleplayUrl}function Wr(t){return t.appData.twitterAppCountry}function qr(t){return t.appData.twitterPlayerUrl}function $r(t){return t.appData.twitterPlayerSize}function Jr(t){return t.appData.twitterPlayerStream}function Qr(t){return t.appData.twitterPlayerStreamCtype}var Zr=(0,c.registerStore)("rank-math",{reducer:(0,c.combineReducers)(e),selectors:n,actions:t});function Yr(){return Zr}var Xr=r(6942),tn=r.n(Xr);function en(t){return 100<t?"bad-fk dark":80<t?"good-fk":50<t?"ok-fk":"bad-fk"}r.dn(en);const rn=(0,c.withSelect)(function(t){var e=t("rank-math");return{score:e.getAnalysisScore(),isRefreshing:e.isRefreshing()}})(function(t){var e=t.score;return wp.element.createElement("div",{className:"seo-score "+en(e)},wp.element.createElement("div",{className:"score-text"},e," / 100"))});function nn(t){return nn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nn(t)}function on(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=nn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=nn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==nn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}const an=(0,c.withSelect)(function(t){var e=t("rank-math");return{isLoaded:e.isLoaded(),score:e.getAnalysisScore()}})(function(t){var e=t.isLoaded,r=t.score,n=tn()("rank-math-toolbar-score",on(on({},en(r),!0),"loading",!e));return wp.element.createElement("div",{className:n},wp.element.createElement("i",{className:"rm-icon rm-icon-rank-math"}),wp.element.createElement(rn,null))}),un=wp.components;function cn(t){return cn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cn(t)}function sn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ln(n.key),n)}}function ln(t){var e=function(t,e){if("object"!=cn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=cn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==cn(e)?e:e+""}function pn(t,e,r){return e=dn(e),function(t,e){if(e&&("object"==cn(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,fn()?Reflect.construct(e,r||[],dn(t).constructor):e.apply(t,r))}function fn(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(fn=function(){return!!t})()}function dn(t){return dn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},dn(t)}function mn(t,e){return mn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},mn(t,e)}var hn=function(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(t=pn(this,e,arguments)).onChange=t.onChange.bind(t),t.state={loading:!0,availableTerms:[],selectedTerms:[]},t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&mn(t,e)}(e,t),function(t,e,r){return e&&sn(t.prototype,e),r&&sn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(e,[{key:"componentDidMount",value:function(){this.fetchTerms()}},{key:"componentWillUnmount",value:function(){(0,a.invoke)(this.fetchRequest,["abort"])}},{key:"componentDidUpdate",value:function(t,e){if(t.selectedTermIds.length<this.props.selectedTermIds.length){var r=(0,a.difference)(this.props.selectedTermIds,t.selectedTermIds)[0];if(!this.termIsAvailable(r))return void this.fetchTerms()}t.selectedTermIds!==this.props.selectedTermIds&&this.updateSelectedTerms(this.state.availableTerms,this.props.selectedTermIds),e.selectedTerms!==this.state.selectedTerms&&this.handleSelectedTermsChange()}},{key:"termIsAvailable",value:function(t){return!!this.state.availableTerms.find(function(e){return e.id===t})}},{key:"updateSelectedTerms",value:function(t,e){this.setState({selectedTerms:this.filterSelectedTerms(t,e)})}},{key:"handleSelectedTermsChange",value:function(){var t=this.state.selectedTerms,e=this.props.primaryTermID;t.find(function(t){return t.id===e})||this.onChange(t.length?t[0].id:"")}},{key:"fetchTerms",value:function(){var t=this,e=this.props.taxonomy;e&&(this.fetchRequest=Zt()({path:(0,fr.addQueryArgs)("/wp/v2/".concat(e.rest_base),{per_page:-1,orderby:"count",order:"desc",_fields:"id,name"})}),this.fetchRequest.then(function(e){t.fetchRequest=null,t.setState({loading:!1,availableTerms:e,selectedTerms:t.filterSelectedTerms(e,t.props.selectedTermIds)})},function(e){"abort"!==e.statusText&&(t.fetchRequest=null,t.setState({loading:!1}))}))}},{key:"filterSelectedTerms",value:function(t,e){return t.filter(function(t){return e.includes(t.id)})}},{key:"onChange",value:function(t){(0,c.dispatch)("rank-math").updatePrimaryTermID(t,this.props.taxonomy.slug)}},{key:"shouldComponentUpdate",value:function(t,e){return this.props.selectedTermIds!==t.selectedTermIds||this.props.primaryTermID!==t.primaryTermID||this.state.selectedTerms!==e.selectedTerms}},{key:"render",value:function(){return this.state.selectedTerms.length<2?null:this.state.loading?[wp.element.createElement(un.Spinner,{key:"spinner"}),wp.element.createElement("p",{key:"spinner-text"},(0,u.__)("Loading","seo-by-rank-math"))]:wp.element.createElement(un.SelectControl,{label:(0,u.__)("Select Primary Term","seo-by-rank-math"),value:this.props.primaryTermID,options:this.state.selectedTerms.map(function(t){return{value:t.id,label:(0,a.unescape)(t.name)}}),onChange:this.onChange,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})}}])}(s.Component);function yn(t){return yn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yn(t)}function gn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,bn(n.key),n)}}function bn(t){var e=function(t,e){if("object"!=yn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=yn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==yn(e)?e:e+""}function vn(t,e,r){return e=kn(e),function(t,e){if(e&&("object"==yn(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,wn()?Reflect.construct(e,r||[],kn(t).constructor):e.apply(t,r))}function wn(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(wn=function(){return!!t})()}function kn(t){return kn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},kn(t)}function Sn(t,e){return Sn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Sn(t,e)}var _n=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),vn(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Sn(t,e)}(e,t),function(t,e,r){return e&&gn(t.prototype,e),r&&gn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(e)}(hn);const Pn=(0,c.withSelect)(function(t,e){var r=e.slug,n=t("core").getTaxonomy(r),o=t("core/editor").getEditedPostAttribute;return{taxonomy:n,selectedTermIds:n?o(n.rest_base):[],primaryTermID:t("rank-math").getPrimaryTermID()}})(_n);const Tn=function(t){var e=t.TermComponent;return function(t){return!1!==rankMath.assessor.primaryTaxonomy&&t.slug===rankMath.assessor.primaryTaxonomy.name}(t)?wp.element.createElement(s.Fragment,null,wp.element.createElement(e,t),wp.element.createElement(un.PanelRow,{className:"rank-math-primary-term-picker"},wp.element.createElement(Pn,t))):wp.element.createElement(e,t)};const On=function(){return!((0,a.isNil)(window.wp)||(0,a.isNil)(wp.data)||(0,a.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,a.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))};function Dn(t){return Dn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Dn(t)}function En(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function In(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?En(Object(r),!0).forEach(function(e){jn(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):En(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function jn(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Dn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Dn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Dn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function An(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Mn(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Mn(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Mn(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}const Cn=function(t){var e=t.suggestions,r=t.useFocusKeyword,n=t.onCopy,o=t.onInsert,i=An((0,s.useState)({}),2),a=i[0],c=i[1],l=function(t){c(function(e){return In(In({},e),{},jn({},t,!0))}),setTimeout(function(){c(function(e){var r=In({},e);return delete r[t],r})},1500)};return 0===e.length?wp.element.createElement("em",null,wp.element.createElement("small",null,(0,u.__)("We can't show any link suggestions for this post. Try selecting categories and tags for this post, and mark other posts as Pillar Content to make them show up here.","seo-by-rank-math"))):wp.element.createElement("div",{className:"rank-math-link-suggestions-content","data-count":e.length},e.map(function(t){var e=r&&t.focus_keywords&&t.focus_keywords.length?t.focus_keywords[0]:t.title,i=t.post_id+"_copy",c=t.post_id+"_insert",s=null;return a[i]?s=(0,u.__)("Link Copied","seo-by-rank-math"):a[c]&&(s=(0,u.__)("Link Inserted","seo-by-rank-math")),wp.element.createElement("div",{key:t.post_id,className:"suggestion-item"},wp.element.createElement("button",{type:"button",className:"suggestion-title"},s||wp.element.createElement("a",{href:t.url,target:"_blank",rel:"noreferrer",title:t.title},e)),wp.element.createElement("div",{className:"suggestion-actions"},wp.element.createElement(un.Button,{icon:"clipboard",className:"suggestion-copy",label:(0,u.__)("Copy Link URL to Clipboard","seo-by-rank-math"),showTooltip:!0,onClick:function(){n(t.url),l(i)}}),wp.element.createElement(un.Button,{icon:"admin-links",className:"suggestion-insert",label:(0,u.__)("Insert Link in Content","seo-by-rank-math"),showTooltip:!0,onClick:function(){o(t.url,e),l(c)}})))}))};function Rn(t){return Rn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rn(t)}function Un(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Nn(n.key),n)}}function Nn(t){var e=function(t,e){if("object"!=Rn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Rn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Rn(e)?e:e+""}var Fn=function(t,e){for(var r=0,n=0;n<t.length&&r<e;)if("<"===t[n]){for(;n<t.length&&">"!==t[n];)n++;n++}else r++,n++;for(;n<t.length&&"<"===t[n];){for(;n<t.length&&">"!==t[n];)n++;n++}return n},xn=function(t){if("function"==typeof window.ClipboardJS){var e=document.createElement("button");document.body.appendChild(e);var r=new window.ClipboardJS(e,{text:function(){return t}});return e.click(),r.destroy(),void document.body.removeChild(e)}var n=document.createElement("textarea");n.value=t,document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)},Ln=function(t,e){var r=(0,c.select)("core/block-editor"),n='<a href="'+t+'">'+e+"</a>",o=r.getSelectedBlock();if(o&&o.attributes&&"content"in o.attributes){var i=r.getSelectionStart(),a=r.getSelectionEnd(),u=function(e,r,o){if(null!==r&&null!==o&&r!==o){var i=Fn(e,r),a=Fn(e,o),u=e.substring(i,a);return e.substring(0,i)+'<a href="'+t+'">'+u+"</a>"+e.substring(a)}if(null!==r){var c=Fn(e,r);return e.substring(0,c)+n+e.substring(c)}return e+n}(o.attributes.content||"",i?i.offset:null,a?a.offset:null);(0,c.dispatch)("core/block-editor").updateBlock(o.clientId,{attributes:{content:u}})}else for(var s=r.getBlocks(),l=s.length-1;l>=0;l--)if("content"in(s[l].attributes||{})){(0,c.dispatch)("core/block-editor").updateBlock(s[l].clientId,{attributes:{content:(s[l].attributes.content||"")+n}});break}},Kn=function(){return function(t,e,r){return e&&Un(t.prototype,e),r&&Un(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),"post"===rankMath.objectType&&rankMath.postSettings.linkSuggestions&&(this.renderToWrapper(),i().fn.extend({insertLink:function(t,e){var r=this[0],n="";if(r.selectionStart||"0"===r.selectionStart){var o=r.selectionStart,i=r.selectionEnd,a=r.scrollTop;n='<a href="'+t+'">'+r.value.substring(o,i)+"</a>",o===i&&(n='<a href="'+t+'">'+e+"</a>"),r.value=r.value.substring(0,o)+n+r.value.substring(i,r.value.length),r.focus(),r.selectionStart=o+n.length,r.selectionEnd=o+n.length,r.scrollTop=a}else n='<a href="'+t+'">'+e+"</a>",r.value+=n,r.focus()}}))},[{key:"renderToWrapper",value:function(){var t=document.getElementById("rank-math-link-suggestions-wrapper");if(t){var e=rankMath.postSettings,r=e.linkSuggestionsData,n=e.useFocusKeyword;if(!1!==r){this._root||(this._root=(0,s.createRoot)(t)),this._root.render(wp.element.createElement(Cn,{suggestions:r||[],useFocusKeyword:n,onCopy:xn,onInsert:function(t,e){if("object"===("undefined"==typeof tinymce?"undefined":Rn(tinymce))&&null!==tinymce.activeEditor&&!0!==tinymce.activeEditor.isHidden()&&"content"===tinymce.activeEditor.id){var r=tinymce.activeEditor,n=i()(r.getBody()),o=r.selection.getContent()||"";if(n.find("a[data-mce-selected]").length){var a=r.selection.getStart(),u=r.dom.getParent(a,"a[href]");if(!u){var c=r.selection.getContent({format:"raw"});if(c&&-1!==c.indexOf("</a>")){var s=c.match(/href="([^">]+)"/);s&&s[1]&&(u=r.$('a[href="'+s[1]+'"]',a)[0])&&r.selection.select(u)}}u&&(r.dom.setAttribs(u,{href:t}),i()(u).text()!==o&&r.insertContent(o))}else o.length?r.insertContent('<a href="'+t+'">'+o+"</a>"):r.insertContent('<a href="'+t+'">'+e+"</a>")}else On()&&Ln(t,e)}}))}}}}])}();const Hn=Kn,Bn=function(){return!(0,a.isNull)(document.getElementById("site-editor"))};r.dn(Bn);const zn=function(){if(!Bn())return!1;var t=wp.data.select("core/editor"),e=t.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===e)return!0;var r=t.getCurrentTemplateId()||e;return!(!(0,a.endsWith)(r,"//home")&&!(0,a.endsWith)(r,"//front-page"))||!(!(0,a.endsWith)(r,"//page")&&!(0,a.endsWith)(r,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};r.dn(zn);const Gn=rankMathAnalyzer;var Vn={};(0,a.isUndefined)(rankMath.assessor)||(0,a.forEach)(rankMath.assessor.diacritics,function(t,e){return Vn[e]=new RegExp(t,"g")});const Wn=function(t){if((0,a.isUndefined)(t))return t;for(var e in Vn)t=t.replace(Vn[e],e);return t};r.dn(Wn);var qn={"&amp;":"&","&quot;":'"',"&#39;":"'"},$n=/&(?:amp|quot|#(0+)?39);/g,Jn=RegExp($n.source);const Qn=function(t){return t&&Jn.test(t)?t.replace($n,function(t){return qn[t]||"'"}):t||""};function Zn(t){return Zn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zn(t)}function Yn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Xn(n.key),n)}}function Xn(t){var e=function(t,e){if("object"!=Zn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Zn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Zn(e)?e:e+""}var to=function(){return function(t,e,r){return e&&Yn(t.prototype,e),r&&Yn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.analyzer=new Gn.Analyzer({i18n:u,analyses:rankMath.assessor.researchesTests}),this.dataCollector=e,this.registerRefresh(),this.updateKeywordResult=this.updateKeywordResult.bind(this),this.sanitizeData=this.sanitizeData.bind(this),(0,p.addAction)("rankMath_analysis_keywordUsage_updated","rank-math",this.updateKeywordResult),(0,p.addFilter)("rank_math_sanitize_meta_value","rank-math",this.sanitizeData),(0,p.addFilter)("rank_math_sanitize_data","rank-math",this.sanitizeData)},[{key:"updateKeywordResult",value:function(t,e){rankMathEditor.resultManager.update(t,{keywordNotUsed:e}),t===this.getSelectedKeyword().toLowerCase()&&(0,c.dispatch)("rank-math").refreshResults()}},{key:"sanitizeData",value:function(t,e){return"schemas"===e||(0,a.isObject)(t)||(0,a.isEmpty)(t)?t:(r=t,(0,a.isUndefined)(r)?"":(0,a.flow)([$,Q,q,Y])(r));var r}},{key:"getPaper",value:function(t,e){var r=Yr().getState(),n=this.dataCollector.getData(),o=new Gn.Paper("",{locale:rankMath.localeFull});o.setTitle(r.appUi.serpTitle),o.setPermalink(n.slug),o.setDescription(r.appUi.serpDescription),o.setUrl(n.permalink),o.setText(Qn((0,p.applyFilters)("rank_math_content",n.content))),o.setKeyword(t),o.setKeywords(e),o.setSchema(r.appData.schemas),(0,a.isUndefined)(n.featuredImage)||(o.setThumbnail(n.featuredImage.source_url),o.setThumbnailAltText(Wn(n.featuredImage.alt_text)));var i=(0,c.select)("rank-math-content-ai");if(!(0,a.isEmpty)(i)){var u=i.getData(),s=i.getScore();o.setContentAI(s||!(0,a.isEmpty)(u.keyword))}return o}},{key:"registerRefresh",value:function(){var t=this;this.refresh=(0,a.debounce)(function(e){var r=Yr().getState();if(!1!==r.appUi.isLoaded){var n=r.appData.keywords.split(","),o=[];(0,p.doAction)("rank_math_"+e+"_refresh"),n.map(function(e,r){var i=t.getPaper(Wn(e),n),a=0===r?rankMath.assessor.researchesTests:t.filterTests(t.getSecondaryKeywordTests());o.push(t.analyzer.analyzeSome(a,i).then(function(t){rankMathEditor.resultManager.update(i.getKeyword(),t,0===r),0===r&&(0,c.dispatch)("rank-math").updateAnalysisScore(rankMathEditor.resultManager.getScore(i.getKeyword()))})),Promise.all(o).then(function(){(0,c.dispatch)("rank-math").refreshResults()})})}},500)}},{key:"getSecondaryKeywordTests",value:function(){return["keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","lengthPermalink","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasPowerWords","titleHasNumber","contentHasTOC","contentHasShortParagraphs","contentHasAssets"]}},{key:"getPrimaryKeyword",value:function(){var t=Yr().getState().appData.keywords;return t?Wn(t.split(",")[0]):""}},{key:"getSelectedKeyword",value:function(){var t=Yr().getState(),e=""!==t.appUi.selectedKeyword.data.value?t.appUi.selectedKeyword.data.value:t.appData.keywords.split(",")[0];return Wn(e)}},{key:"getResearch",value:function(t){return this.analyzer.researcher.getResearch(t)}},{key:"filterTests",value:function(t){return(0,a.intersection)(t,rankMath.assessor.researchesTests)}}])}();const eo=to;function ro(t){return ro="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ro(t)}function no(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,oo(n.key),n)}}function oo(t){var e=function(t,e){if("object"!=ro(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=ro(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ro(e)?e:e+""}var io=function(){return function(t,e,r){return e&&no(t.prototype,e),r&&no(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),(rankMath.is_front_page||zn())&&((0,p.addFilter)("rankMath_analysis_contentLength","rank-math",this.contentLength),(0,p.addFilter)("rankMath_analysis_contentLength_boundaries","rank-math",this.contentLengthBoundary))},[{key:"contentLength",value:function(t){return{hasScore:t.hasScore,failed:(0,u.__)("Content is %1$d words long. Consider using at least 300 words.","seo-by-rank-math"),tooltipText:(0,u.__)("Minimum recommended content length should be 300 words.","seo-by-rank-math"),emptyContent:(0,u.sprintf)((0,u.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/?utm_source=Plugin&utm_campaign=WP#overall-content-length" target="_blank">'+(0,u.__)("300 words","seo-by-rank-math")+"</a>")}}},{key:"contentLengthBoundary",value:function(){return{recommended:{boundary:299,score:8},belowRecommended:{boundary:200,score:5},low:{boundary:50,score:2}}}}])}();const ao=io;function uo(t){return uo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uo(t)}function co(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,so(n.key),n)}}function so(t){var e=function(t,e){if("object"!=uo(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=uo(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==uo(e)?e:e+""}var lo=function(){return function(t,e,r){return e&&co(t.prototype,e),r&&co(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},[{key:"setup",value:function(t){Yr(),this.resultManager=new Gn.ResultManager,this.assessor=new eo(t),new ao,(0,p.doAction)("rank_math_loaded")}},{key:"refresh",value:function(t){this.assessor.refresh(t)}},{key:"getPrimaryKeyword",value:function(){return this.assessor.getPrimaryKeyword()}},{key:"getSelectedKeyword",value:function(){return this.assessor.getSelectedKeyword()}},{key:"updatePermalink",value:function(t){throw"Implement the function"}},{key:"updatePermalinkSanitize",value:function(t){throw"Implement the function"}}])}();const po=lo;function fo(t){return fo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fo(t)}function mo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function ho(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?mo(Object(r),!0).forEach(function(e){yo(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):mo(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function yo(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=fo(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=fo(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==fo(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}const go=(0,wp.compose.compose)((0,c.withSelect)(function(t){return{lock:t("rank-math").isModifiedDateLocked()}}),(0,c.withDispatch)(function(t){return{onChange:function(e){t("rank-math").lockModifiedDate(e);var r=wp.data.select("core/editor");if(!(0,a.isUndefined)(r)&&!(0,a.isUndefined)(r.getEditedPostAttribute("meta"))){var n=ho(ho({},r.getEditedPostAttribute("meta")),{},{rank_math_lock_modified_date:e});t("core/editor").editPost({meta:n})}}}}))(function(t){var e=t.lock,r=t.onChange;return wp.element.createElement("div",null,wp.element.createElement(un.ToggleControl,{label:(0,u.__)("Lock Modified Date","seo-by-rank-math"),checked:e,onChange:function(t){return r(t)},__nextHasNoMarginBottom:!0}))});function bo(t){return bo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},bo(t)}function vo(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function wo(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?vo(Object(r),!0).forEach(function(e){So(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):vo(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function ko(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,_o(n.key),n)}}function So(t,e,r){return(e=_o(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _o(t){var e=function(t,e){if("object"!=bo(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=bo(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==bo(e)?e:e+""}var Po=function(){return function(t,e,r){return e&&ko(t.prototype,e),r&&ko(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),So(this,"initialize",!1),So(this,"isSavingRedirection",!1),So(this,"isSavingSchemas",!1),So(this,"oldSlug",!1),this._data={id:!1,slug:!1,permalink:!1,content:!1,title:!1,excerpt:!1,featuredImage:!1},this.refresh=this.refresh.bind(this),this.isSavingPost=this.isSavingPost.bind(this),this.getPostAttribute=this.getPostAttribute.bind(this),this.subscribeToGutenberg(),this.lockModifiedDate()},[{key:"lockModifiedDate",value:function(){rankMath.showLockModifiedDate&&(0,l.registerPlugin)("rank-math-lock-last-modified",{render:function(){return wp.element.createElement(f.PluginPostStatusInfo,null,wp.element.createElement(go,null))}})}},{key:"collectGutenbergData",value:function(){return On()?(this._coreEditorSelect||(this._coreEditorSelect=(0,c.select)("core/editor")),!1===this.oldSlug&&""!==this.getSlug()&&(this.oldSlug=this.getSlug()),{id:this.getPostID(),slug:this.getSlug(),permalink:this.getPermalink(),content:this.getPostAttribute("content"),title:this.getPostAttribute("title"),excerpt:this.getPostAttribute("excerpt"),featuredImage:this.getFeaturedImage()}):{}}},{key:"getPostID",value:function(){return this._coreEditorSelect.getCurrentPostId()}},{key:"getPermalink",value:function(){if(zn())return rankMath.homeUrl;if("auto-draft"===this.getPostAttribute("status"))return"";var t=this.getPostAttribute("generated_slug");return"auto-draft"!==t&&"en"===rankMath.locale||(t=""),(0,fr.safeDecodeURIComponent)(this._coreEditorSelect.getPermalink())}},{key:"getSlug",value:function(){var t=this.getPostAttribute("generated_slug");return"auto-draft"===t&&(t=""),(0,fr.safeDecodeURIComponent)(this.getPostAttribute("slug")||t)}},{key:"getFeaturedImage",value:function(){var t=this.getPostAttribute("featured_media");if(this.isValidMediaId(t)){var e=(0,c.select)("core").getEntityRecord("postType","attachment",t);if(!(0,a.isUndefined)(e))return e}}},{key:"isValidMediaId",value:function(t){return"number"==typeof t&&0<t}},{key:"getPostAttribute",value:function(t){return On()?(this._coreEditorSelect||(this._coreEditorSelect=(0,c.select)("core/editor")),this._coreEditorSelect.getEditedPostAttribute(t)):""}},{key:"subscribeToGutenberg",value:function(){this.subscriber=(0,a.debounce)(this.refresh,500),(0,c.subscribe)(this.subscriber),(0,c.subscribe)(this.isSavingPost)}},{key:"refresh",value:function(){var t=wo({},this._data);this._data=this.collectGutenbergData(),this.handleEditorChange(t)}},{key:"isSavingPost",value:function(){var t=(0,c.select)("core/editor");if(t&&!t.isAutosavingPost()&&t.isSavingPost()){var e=(0,c.select)("rank-math").getDirtyMetadata();(0,a.isEmpty)(e)||(Zt()({method:"POST",path:"rankmath/v1/updateMeta",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,meta:e,content:(0,p.applyFilters)("rank_math_content",this.getPostAttribute("content"))}}).then(function(t){(0,p.doAction)("rank_math_metadata_updated",t)}),(0,c.dispatch)("rank-math").resetDirtyMetadata()),"publish"===this.getPostAttribute("status")&&(this.saveRedirection(),this.autoCreateRedirectionNotice()),this.saveSchemas()}}},{key:"saveSchemas",value:function(){var t=this;if(!this.isSavingSchemas){var e=(0,c.select)("rank-math").getSchemas();if(!(0,a.isEmpty)(e)&&(0,c.select)("rank-math").hasSchemaUpdated()){this.isSavingSchemas=!0;var r=(0,c.select)("rank-math").getEditSchemas();Zt()({method:"POST",path:"rankmath/v1/updateSchemas",data:{objectID:this.getPostID(),objectType:rankMath.objectType,schemas:e}}).then(function(n){var o=wo({},e),i=wo({},r);(0,a.isEmpty)(n)||(0,a.map)(n,function(t,e){o["schema-"+t]=wo({},o[e]),i["schema-"+t]=wo({},i[e]),delete o[e],delete i[e]}),(0,c.dispatch)("rank-math").updateSchemas(o),(0,c.dispatch)("rank-math").updateEditSchemas(i),setTimeout(function(){(0,c.dispatch)("rank-math").schemaUpdated(!1),(0,p.doAction)("rank_math_schema_changed"),t.isSavingSchemas=!1},2e3)})}}}},{key:"saveRedirection",value:function(){var t=this;if(!this.isSavingRedirection){var e=(0,c.select)("rank-math").getRedirectionItem();if(!(0,a.isEmpty)(e)){this.isSavingRedirection=!0,e.objectID=this.getPostID(),e.redirectionSources=this.getPermalink();var r=(0,c.dispatch)("rank-math"),n=(0,c.dispatch)("core/notices");r.resetRedirection(),Zt()({method:"POST",path:"rankmath/v1/updateRedirection",data:e}).then(function(e){"delete"===e.action?(n.createInfoNotice(e.message,{id:"redirectionNotice"}),r.updateRedirection("redirectionID",0)):"update"===e.action?n.createInfoNotice(e.message,{id:"redirectionNotice"}):"new"===e.action&&(r.updateRedirection("redirectionID",e.id),n.createSuccessNotice(e.message,{id:"redirectionNotice"})),setTimeout(function(){t.isSavingRedirection=!1,n.removeNotice("redirectionNotice")},2e3)})}}}},{key:"autoCreateRedirectionNotice",value:function(){if(rankMath.assessor.hasRedirection&&(0,a.get)(rankMath,["assessor","autoCreateRedirection"],!1)&&!(0,c.select)("core/editor").isEditedPostNew()&&!1!==this.oldSlug){var t=this.getSlug();if(this.oldSlug!==t){var e=(0,c.dispatch)("core/notices");this.oldSlug=t,e.createSuccessNotice((0,u.__)("Auto redirection created.","seo-by-rank-math"),{id:"redirectionAutoCreationNotice"}),setTimeout(function(){e.removeNotice("redirectionAutoCreationNotice")},2e3)}}}},{key:"handleEditorChange",value:function(t){var e=this,r={id:"handleIDChange",slug:"handleSlugChange",title:"handleTitleChange",excerpt:"handleExcerptChange",content:"handleContentChange",featuredImage:"handleFeaturedImageChange"};if(t.id)return this.initialize?void(0,a.forEach)(r,function(r,n){e._data[n]!==t[n]&&e[r](e._data[n])}):(this.initialize=!0,(0,a.forEach)(r,function(t,r){e[t](e._data[r])}),void rankMathEditor.refresh("init"));(0,c.dispatch)("rank-math").refreshResults()}},{key:"handleIDChange",value:function(t){zn()&&(t=0),(0,c.dispatch)("rank-math").updatePostID(t),(0,c.dispatch)("rank-math").toggleLoaded(!0),(0,p.doAction)("rank_math_id_changed")}},{key:"handleSlugChange",value:function(){""!==this.getSlug()&&!1===this.oldSlug&&(this.oldSlug=this.getSlug()),rankMathEditor.refresh("permalink")}},{key:"handleTitleChange",value:function(t){g.setVariable("title",t),g.setVariable("term",t),g.setVariable("author",t),(0,c.dispatch)("rank-math").updateSerpTitle((0,c.select)("rank-math").getTitle()),rankMathEditor.refresh("title")}},{key:"handleExcerptChange",value:function(t){g.setVariable("excerpt",t),g.setVariable("excerpt_only",t),g.setVariable("wc_shortdesc",t),g.setVariable("seo_description",t),(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription())}},{key:"handleFeaturedImageChange",value:function(t){(0,c.dispatch)("rank-math").updateFeaturedImage(t),rankMathEditor.refresh("featuredImage")}},{key:"handleContentChange",value:function(){(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"getData",value:function(){return(0,p.applyFilters)("rank_math_dataCollector_data",this._data)}}])}();const To=Po,Oo=wp.blocks;var Do=[],Eo=function(t){return(0,a.isEmpty)(Do)||(0,a.forEach)(Do,function(e){(0,a.forEach)(e,function(e){t+=e})}),t};const Io=function(){var t=(0,c.select)("core"),e=(0,c.select)("core/block-editor");(0,p.addFilter)("rank_math_content","rank-math",Eo,11),(0,c.subscribe)((0,a.debounce)(function(){var r=e.getBlocks();if(!(0,a.isEmpty)(r)){var n=!1;(0,a.forEach)(r,function(e){if((0,Oo.isReusableBlock)(e)){var r=e.attributes.ref,o=function(t){return t&&t.content?(0,a.isFunction)(t.content)?t.content(t):t.content:""}(t.getEditedEntityRecord("postType","wp_block",r));if(!Do[r])return Do[r]={id:r,clientId:e.clientId,content:o},void(n=!0);Do[r].content!==o&&(Do[r].content=o,n=!0)}}),n&&rankMathEditor.refresh("content")}},500))};function jo(t){return jo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jo(t)}function Ao(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function Mo(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Ao(Object(r),!0).forEach(function(e){Co(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Ao(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Co(t,e,r){return(e=Uo(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ro(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Uo(n.key),n)}}function Uo(t){var e=function(t,e){if("object"!=jo(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=jo(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==jo(e)?e:e+""}r.dn(Io);var No=function(){return function(t,e,r){return e&&Ro(t.prototype,e),r&&Ro(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),(0,p.addAction)("rank_math_id_changed","rank-math",this.resetStore),(0,p.addAction)("rank_math_data_changed","rank-math",this.activateButton)},[{key:"resetStore",value:function(){var t=(0,c.select)("core/editor").getCurrentPost(),e=(0,a.isEmpty)(t.rankMath)?rankMath:t.rankMath;if(zn()){var r=rankMath.homepageData.assessor.serpData;e.assessor=Mo(Mo({},e.assessor),{},{serpData:Mo(Mo({},e.assessor.serpData),r)})}if((0,c.dispatch)("rank-math").resetStore(e),zn()){var n=rankMath.homepageData.assessor.serpData;(0,c.dispatch)("rank-math").updateSerpTitle(n.title||n.titleTemplate),(0,c.dispatch)("rank-math").updateSerpDescription(n.description),(0,c.dispatch)("rank-math").toggleLoaded(!0)}}},{key:"activateButton",value:function(t,e,r){(0,a.startsWith)(r,"rank_math")&&(0,c.dispatch)("core/editor").editPost(Co({},r,e))}}])}();const Fo=No;var xo=function(){var t=rankMath.postSettings,e=t.linkSuggestions,r=t.useFocusKeyword,n=t.linkSuggestionsData;return e&&!1!==n?wp.element.createElement(f.PluginDocumentSettingPanel,{name:"rank-math-link-suggestions",title:wp.element.createElement(React.Fragment,null,(0,u.__)("Link Suggestions","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,u.__)("Click on the button to copy URL or insert link in content. You can also drag and drop links in the post content.","seo-by-rank-math")))),className:"rank-math-link-suggestions-panel"},wp.element.createElement(Cn,{suggestions:n||[],useFocusKeyword:r,onCopy:xn,onInsert:Ln})):null};function Lo(t){var e,r,n="";if("string"==typeof t||"number"==typeof t)n+=t;else if("object"==typeof t)if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(r=Lo(t[e]))&&(n&&(n+=" "),n+=r)}else for(r in t)t[r]&&(n&&(n+=" "),n+=r);return n}const Ko=function(){for(var t,e,r=0,n="",o=arguments.length;r<o;r++)(t=arguments[r])&&(e=Lo(t))&&(n&&(n+=" "),n+=e);return n};const Ho=t=>(0,s.createElement)("path",t),Bo=t=>(0,s.createElement)("rect",t),zo=(0,s.forwardRef)(({className:t,isPressed:e,...r},n)=>{const o={...r,className:Ko(t,{"is-pressed":e})||void 0,"aria-hidden":!0,focusable:!1};return(0,s.createElement)("svg",{...o,ref:n})});function Go(t){var e=t.height,r=void 0===e?16:e,n=t.width,o=void 0===n?16:n,i=t.style,a=void 0===i?{}:i;return wp.element.createElement(zo,{viewBox:"0 0 32 32",fill:"none",height:r,width:o,style:a},wp.element.createElement(Bo,{width:"32",height:"32",fill:"none"}),wp.element.createElement(Ho,{d:"M17.9686 14.1623L26.7065 4H24.6358L17.0488 12.8238L10.9891 4H4L13.1634 17.3432L4 28H6.07069L14.0827 18.6817L20.4822 28H27.4714L17.9681 14.1623H17.9686ZM15.1326 17.4607L14.2041 16.132L6.81679 5.55961H9.99723L15.9589 14.0919L16.8873 15.4206L24.6368 26.5113H21.4564L15.1326 17.4612V17.4607Z",fill:"currentColor"}))}zo.displayName="SVG",r.dn(Go);const Vo=(0,c.withSelect)(function(t){var e=t("rank-math"),r=e.getTwitterUseFacebook()?e.getFacebookTitle():e.getTwitterTitle();return(0,a.isEmpty)(r)&&(r=e.getSerpTitle()),{title:r,permalink:t("core/editor").getPermalink()}})(function(t){var e=t.title,r=t.permalink,n=encodeURI(r),o=encodeURI(e);return wp.element.createElement(s.Fragment,null,wp.element.createElement("p",null,(0,u.__)("Notify your readers by sharing!","seo-by-rank-math")),wp.element.createElement("div",{className:"rank-math-social-share-buttons"},wp.element.createElement("div",{className:"rank-math-share-button rm-facebook"},wp.element.createElement("a",{href:"https://www.facebook.com/sharer/sharer.php?u="+n,target:"_blank",rel:"noopener noreferrer"},wp.element.createElement(un.Dashicon,{icon:"facebook-alt"}))),wp.element.createElement("div",{className:"rank-math-share-button rm-twitter"},wp.element.createElement("a",{href:"https://twitter.com/share?url="+n+"&text="+o,target:"_blank",rel:"noopener noreferrer"},wp.element.createElement(Go,null))),wp.element.createElement("div",{className:"rank-math-share-button rm-email"},wp.element.createElement("a",{href:"mailto:?subject="+o+"&body="+n,target:"_blank",rel:"noopener noreferrer"},wp.element.createElement(un.Dashicon,{icon:"email"})))),wp.element.createElement("div",{style:{marginTop:"1rem"}},wp.element.createElement("a",{href:"https://www.socialpilot.co/social-media-seo",target:"_blank",rel:"noopener noreferrer",onClick:function(){if(!(0,a.isEmpty)(rankMath.tracking)){var t=rankMath.tracking,e=t.plugin,r=t.email,n=t.language,o=t.path;mixpanel.identify(r),mixpanel.track("Button Clicked",{button:"Schedule this Post Using SocialPilot",context:"wp_plugin",brand:"rankmath",application:"rankmath",plugin:e,path:o,language:n})}}},(0,u.__)("Schedule this Post Using SocialPilot","seo-by-rank-math"))))});var Wo=(0,un.createSlotFill)("RankMathAfterEditor"),qo=Wo.Fill,$o=Wo.Slot,Jo=function(t){var e=t.children,r=t.className;return wp.element.createElement(qo,null,wp.element.createElement(un.PanelRow,{className:r},e))};Jo.Slot=$o;const Qo=Jo;var Zo=(0,un.createSlotFill)("RankMathAdvancedTab"),Yo=Zo.Fill,Xo=Zo.Slot,ti=function(t){var e=t.children,r=t.className;return wp.element.createElement(Yo,null,wp.element.createElement(un.PanelRow,{className:r},e))};ti.Slot=Xo;const ei=ti;var ri=(0,un.createSlotFill)("RankMathAfterFocusKeyword"),ni=ri.Fill,oi=ri.Slot,ii=function(t){var e=t.children,r=t.className;return wp.element.createElement(ni,null,wp.element.createElement("div",{className:r},e))};ii.Slot=oi;const ai=ii;function ui(t){return ui="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ui(t)}function ci(){return ci=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},ci.apply(null,arguments)}function si(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,li(n.key),n)}}function li(t){var e=function(t,e){if("object"!=ui(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=ui(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ui(e)?e:e+""}function pi(t,e,r){return e=mi(e),function(t,e){if(e&&("object"==ui(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,fi()?Reflect.construct(e,r||[],mi(t).constructor):e.apply(t,r))}function fi(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(fi=function(){return!!t})()}function di(){return di="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=mi(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},di.apply(null,arguments)}function mi(t){return mi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},mi(t)}function hi(t,e){return hi=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},hi(t,e)}var yi=function(){var t=(0,c.useSelect)(function(t){return zn()||!(0,a.isUndefined)(t("core/editor"))&&(0,a.endsWith)(t("core/editor").getCurrentTemplateId(),"//page")});return Bn()&&t&&zn()&&(0,p.doAction)("rank_math_id_changed"),wp.element.createElement(s.Fragment,null,wp.element.createElement(f.PluginSidebarMoreMenuItem,{target:"seo-by-rank-math-sidebar",icon:wp.element.createElement(an,null)},(0,u.__)("Rank Math","seo-by-rank-math")),wp.element.createElement(f.PluginSidebar,{name:"seo-by-rank-math-sidebar",title:(0,u.__)("Rank Math","seo-by-rank-math"),className:"rank-math-sidebar-panel"},(0,p.applyFilters)("rank_math_app",{})()))},gi=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),pi(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&hi(t,e)}(e,t),function(t,e,r){return e&&si(t.prototype,e),r&&si(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}(e,[{key:"setup",value:function(t){Yr(),this.registerSlots=this.registerSlots.bind(this),(0,p.addAction)("rank_math_loaded","rank-math",this.registerSlots,0),function(t,e,r,n){var o=di(mi(1&n?t.prototype:t),e,r);return 2&n&&"function"==typeof o?function(t){return o.apply(r,t)}:o}(e,"setup",this,3)([t]),this.registerPostPublish(),this.registerPrimaryTermSelector(),(0,l.registerPlugin)("rank-math-link-suggestions",{render:xo}),new Hn,new Io,Bn()&&new Fo,(0,p.addAction)("rank_math_data_changed","rank-math",this.toggleSettings)}},{key:"toggleSettings",value:function(t,e,r){r&&"rank_math_seo_score"!==r&&((0,c.select)("core/editor").isSavingPost()||(0,c.dispatch)("core/editor").editPost({refreshMe:"refreshUI"}))}},{key:"registerSlots",value:function(){this.registerSidebar(),this.RankMathAfterEditor=Qo,this.RankMathAfterFocusKeyword=ai,this.RankMathAdvancedTab=ei,this.slots={AfterEditor:Qo,AfterFocusKeyword:ai,AdvancedTab:ei}}},{key:"registerSidebar",value:function(){(0,l.registerPlugin)("rank-math",{icon:wp.element.createElement(an,null),render:yi})}},{key:"registerPostPublish",value:function(){(0,l.registerPlugin)("rank-math-post-publish",{render:function(){return wp.element.createElement(f.PluginPostPublishPanel,{initialOpen:!0,title:(0,u.__)("Rank Math","seo-by-rank-math"),className:"rank-math-post-publish",icon:wp.element.createElement(s.Fragment,null)},wp.element.createElement(Vo,null))}})}},{key:"registerPrimaryTermSelector",value:function(){(0,p.addFilter)("editor.PostTaxonomyType","rank-math",function(t){return function(e){return wp.element.createElement(Tn,ci({TermComponent:t},e))}})}},{key:"updatePermalink",value:function(t){(0,c.dispatch)("core/editor").editPost({slug:t})}},{key:"updatePermalinkSanitize",value:function(t){t=this.assessor.getResearch("slugify")(t),(0,c.dispatch)("core/editor").editPost({slug:t})}}])}(po);i()(document).ready(function(){window.rankMathEditor=new gi,window.rankMathGutenberg=window.rankMathEditor,window.rankMathEditor.setup(new To)})}()}();PK     ’ŠU]Ú» m3  m3  $  assets/admin/js/gutenberg-formats.jsnu „[µü¤        !function(){"use strict";const t=wp.richText,e=wp.i18n,r=wp.url,n=wp.htmlEntities,o=wp.element,i=React;function a(t){var e,r,n="";if("string"==typeof t||"number"==typeof t)n+=t;else if("object"==typeof t)if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(r=a(t[e]))&&(n&&(n+=" "),n+=r)}else for(r in t)t[r]&&(n&&(n+=" "),n+=r);return n}const l=function(){for(var t,e,r=0,n="",o=arguments.length;r<o;r++)(t=arguments[r])&&(e=a(t))&&(n&&(n+=" "),n+=e);return n};const u=t=>(0,o.createElement)("path",t),s=(0,o.forwardRef)(({className:t,isPressed:e,...r},n)=>{const i={...r,className:l(t,{"is-pressed":e})||void 0,"aria-hidden":!0,focusable:!1};return(0,o.createElement)("svg",{...i,ref:n})});s.displayName="SVG";const c=(0,i.createElement)(s,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,i.createElement)(u,{d:"M17.031 4.703 15.576 4l-1.56 3H14v.03l-2.324 4.47H9.5V13h1.396l-1.502 2.889h-.95a3.694 3.694 0 0 1 0-7.389H10V7H8.444a5.194 5.194 0 1 0 0 10.389h.17L7.5 19.53l1.416.719L15.049 8.5h.507a3.694 3.694 0 0 1 0 7.39H14v1.5h1.556a5.194 5.194 0 0 0 .273-10.383l1.202-2.304Z"})),f=(0,i.createElement)(s,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,i.createElement)(u,{d:"M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z"})),p=wp.blockEditor,y=wp.components,m=lodash;function d(t,e,r,n,o){for(var i=e,a={forwards:1,backwards:-1}[o]||1,l=-1*a;t[i]&&t[i][n]===r;)i+=a;return i+=l}function v(t,e){var r,n,o,i,a,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.start,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.end,s={start:null,end:null},c=t.formats;if(null==c||!c.length)return s;var f=c.slice(),p=null===(r=f[l])||void 0===r?void 0:r.find(function(t){return t.type===e.type}),y=null===(n=f[u])||void 0===n?void 0:n.find(function(t){return t.type===e.type}),m=null===(o=f[u-1])||void 0===o?void 0:o.find(function(t){return t.type===e.type});if(p)i=p,a=l;else if(y)i=y,a=u;else{if(!m)return s;i=m,a=u-1}var d=f[a].indexOf(i),v=[f,a,i,d];return{start:l=(l=h.apply(void 0,v))<0?0:l,end:u=g.apply(void 0,v)}}var b=function(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n<e;n++)r[n-1]=arguments[n];return function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];return t.apply(void 0,n.concat(r))}},h=b(d,"backwards"),g=b(d,"forwards");const w=wp.data;function S(t){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},S(t)}function O(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,l=[],u=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(l.push(n.value),l.length!==e);u=!0);}catch(t){s=!0,o=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return l}}(t,e)||E(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function j(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?k(Object(r),!0).forEach(function(e){P(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function P(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=S(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==S(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function E(t,e){if(t){if("string"==typeof t)return A(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(t,e):void 0}}function A(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var _=[].concat(function(t){return function(t){if(Array.isArray(t))return A(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||E(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(p.LinkControl.DEFAULT_LINK_SETTINGS),[{id:"nofollow",title:(0,e.__)("Set to nofollow")},{id:"sponsored",title:(0,e.__)("Set to sponsored")}]);const T=(0,y.withSpokenMessages)(function(n){var i=n.isActive,a=n.activeAttributes,l=n.addingLink,u=n.value,s=n.onChange,c=n.speak,f=n.stopAddingLink,d=n.contentRef,b=function(e,r){var n=e.start,o=e.end;if(r){var i=v(e,{type:"core/link"});n=i.start,o=i.end+1}return(0,t.slice)(e,n,o)}(u,i).text,h=(0,o.useMemo)(function(){var t,e;return{url:a.url,type:a.type,id:a.id,opensInNewTab:"_blank"===a.target,nofollow:null===(t=a.rel)||void 0===t?void 0:t.includes("nofollow"),sponsored:null===(e=a.rel)||void 0===e?void 0:e.includes("sponsored"),title:b}},[a.id,a.rel,a.target,a.type,a.url,b]),g=(0,w.useDispatch)(p.store).selectionChange,S=(0,w.useSelect)(function(t){var e=t(p.store),r=e.getSettings,n=e.getSelectionStart,o=r();return{createPageEntity:o.__experimentalCreatePageEntity,userCanCreatePages:o.__experimentalUserCanCreatePages,selectionStart:n()}},[]).selectionStart,k=(0,o.useRef)(!!l&&"firstElement"),P=(0,t.useAnchor)({editableContentElement:d.current,settings:j(j({},H),{},{isActive:i})});return wp.element.createElement(y.Popover,{anchor:P,focusOnMount:k.current,onClose:f,position:"bottom",offset:8,shift:!0},wp.element.createElement(p.LinkControl,{value:h,onChange:function(n){var o=!(null==h?void 0:h.url);n=j(j({},h),n);var a,l=(0,r.prependHTTP)(n.url),p=function(t){var r=t.url,n=t.opensInNewWindow,o=t.nofollow,i=t.sponsored,a=t.text,l=t.type,u=t.id,s={type:"core/link",attributes:{url:r}},c=[];if(n){if(s.attributes.target="_blank",!(0,m.isUndefined)(a)){var f=(0,e.sprintf)((0,e.__)("%s (opens in a new tab)","seo-by-rank-math"),a);s.attributes["aria-label"]=f}c.push("noreferrer noopener")}return l&&(s.attributes.type=l),u&&(s.attributes.id=u),o&&c.push("nofollow"),i&&c.push("sponsored"),c.length>0&&(s.attributes.rel=c.join(" ")),s}({url:l,type:n.type,id:void 0!==n.id&&null!==n.id?String(n.id):void 0,opensInNewWindow:n.opensInNewTab,nofollow:n.nofollow,sponsored:n.sponsored}),y=n.title||l;if((0,t.isCollapsed)(u)&&!i){var d=(0,t.insert)(u,y);return a=(0,t.applyFormat)(d,p,u.start,u.start+y.length),s(a),f(),void g({clientId:S.clientId,identifier:S.attributeKey,start:u.start+y.length+1})}if(y===b)a=(0,t.applyFormat)(u,p);else{a=(0,t.create)({text:y}),a=(0,t.applyFormat)(a,p,0,y.length);var w=v(u,{type:"core/link"}),k=O((0,t.split)(u,w.start,w.start),2),P=k[0],E=k[1],A=(0,t.replace)(E,b,a);a=(0,t.concat)(P,A)}s(a),o||f(),!function(t){if(!t)return!1;var e=t.trim();if(!e)return!1;if(/^\S+:/.test(e)){var n=(0,r.getProtocol)(e);if(!(0,r.isValidProtocol)(n))return!1;if((0,m.startsWith)(n,"http")&&!/^https?:\/\/[^\/\s]/i.test(e))return!1;var o=(0,r.getAuthority)(e);if(!(0,r.isValidAuthority)(o))return!1;var i=(0,r.getPath)(e);if(i&&!(0,r.isValidPath)(i))return!1;var a=(0,r.getQueryString)(e);if(a&&!(0,r.isValidQueryString)(a))return!1;var l=(0,r.getFragment)(e);if(l&&!(0,r.isValidFragment)(l))return!1}return!((0,m.startsWith)(e,"#")&&!(0,r.isValidFragment)(e))}(l)?c((0,e.__)("Warning: the link has been inserted but may have errors. Please test it."),"assertive"):c(i?(0,e.__)("Link edited."):(0,e.__)("Link inserted."),"assertive")},forceIsEditingLink:l,onRemove:function(){var r=(0,t.removeFormat)(u,"core/link");s(r),f(),c((0,e.__)("Link removed."),"assertive")},settings:_,hasTextControl:!0,showInitialSuggestions:!0,suggestionsQuery:{initialSuggestionsSearchOptions:{type:"post",subtype:"page",perPage:20}}}))});function C(t){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},C(t)}function x(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function I(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=C(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==C(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function L(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,l=[],u=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(l.push(n.value),l.length!==e);u=!0);}catch(t){s=!0,o=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return F(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?F(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var R="core/link";const N=function(n){var i=n.isActive,a=n.activeAttributes,l=n.value,u=n.onChange,s=n.onFocus,y=n.contentRef,m=L((0,o.useState)(!1),2),d=m[0],v=m[1];function b(){var e=(0,t.getTextContent)((0,t.slice)(l));e&&(0,r.isURL)(e)?u((0,t.applyFormat)(l,{type:R,attributes:{url:e}})):e&&(0,r.isEmail)(e)?u((0,t.applyFormat)(l,{type:R,attributes:{url:"mailto:".concat(e)}})):v(!0)}function h(){var e=l;e=(0,t.removeFormat)(e,"core/link"),u(function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?x(Object(r),!0).forEach(function(e){I(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):x(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}({},e))}return wp.element.createElement(React.Fragment,null,wp.element.createElement(p.RichTextShortcut,{type:"primary",character:"k",onUse:b}),wp.element.createElement(p.RichTextShortcut,{type:"primaryShift",character:"k",onUse:h}),i&&wp.element.createElement(p.RichTextToolbarButton,{name:"link",className:"rank-math-link-control",icon:c,title:(0,e.__)("Unlink","seo-by-rank-math"),onClick:h,isActive:i,shortcutType:"primaryShift",shortcutCharacter:"k"}),!i&&wp.element.createElement(p.RichTextToolbarButton,{name:"link",icon:f,className:"rank-math-link-control",title:(0,e.__)("Link","seo-by-rank-math"),onClick:b,isActive:i,shortcutType:"primary",shortcutCharacter:"k"}),(d||i)&&wp.element.createElement(T,{addingLink:d,stopAddingLink:function(){v(!1),s()},isActive:i,activeAttributes:a,value:l,onChange:u,contentRef:y}))};var H={name:"core/link",title:(0,e.__)("Link","seo-by-rank-math"),tagName:"a",className:null,attributes:{url:"href",type:"data-type",id:"data-id",target:"target",rel:"rel"},__unstablePasteRule:function(e,o){var i=o.html,a=o.plainText;if((0,t.isCollapsed)(e))return e;var l=(i||a).replace(/<[^>]+>/g,"").trim();return(0,r.isURL)(l)?(window.console.log("Created link:\n\n",l),(0,t.applyFormat)(e,{type:"core/link",attributes:{url:(0,n.decodeEntities)(l)}})):e},edit:N},V=["name","replaces"];wp.domReady(function(){[H].forEach(function(e){var r=e.name,n=(e.replaces,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)r=i[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,V));r&&((0,t.unregisterFormatType)("core/link"),(0,t.registerFormatType)(r,n))})})}();PK     ’ŠU]Ur“†2  †2    assets/admin/js/wplink.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}};const t=jQuery;!function(e,t,n){var i,l,r,a,s,o=/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$/i,c=/^(https?|ftp):\/\/[A-Z0-9.-]+\.[A-Z]{2,63}[^ "]*$/i,p={},u={},d="ontouchend"in document;function h(){return i?i.$('a[data-wplink-edit="true"]'):null}window.wpLink={timeToTriggerRiver:150,minRiverAJAXDuration:200,riverBottomThreshold:5,keySensitivity:100,lastSearch:"",textarea:"",modalOpen:!1,init:function(){p.wrap=e("#wp-link-wrap"),p.dialog=e("#wp-link"),p.backdrop=e("#wp-link-backdrop"),p.submit=e("#wp-link-submit"),p.close=e("#wp-link-close");var n=e('<div class="link-nofollow"><label><span> </span> <input type="checkbox" id="wp-link-nofollow"> '+t.relCheckbox+'</label></div><div class="link-sponsored"><label><span> </span> <input type="checkbox" id="wp-link-sponsored"> '+t.sponsoredCheckbox+"</label></div>"),i=e('<div class="wp-link-title-field"> <label><span>'+t.linkTitle+'</span> <input id="wp-link-title" type="text"></label></div>');n.insertAfter("#wp-link .link-target"),i.insertAfter("#wp-link .wp-link-text-field"),e("#wp-link .query-results").css("top","290px"),p.text=e("#wp-link-text"),p.url=e("#wp-link-url"),p.nonce=e("#_ajax_linking_nonce"),p.openInNewTab=e("#wp-link-target"),p.search=e("#wp-link-search"),p.nofollow=e("#wp-link-nofollow"),p.sponsored=e("#wp-link-sponsored"),p.title=e("#wp-link-title"),u.search=new s(e("#search-results")),u.recent=new s(e("#most-recent-results")),u.elements=p.dialog.find(".query-results"),p.queryNotice=e("#query-notice-message"),p.queryNoticeTextDefault=p.queryNotice.find(".query-notice-default"),p.queryNoticeTextHint=p.queryNotice.find(".query-notice-hint"),p.dialog.on("keydown",function(e){return wpLink.keydown(e)}),p.dialog.on("keyup",function(e){return wpLink.keyup(e)}),p.submit.on("click",function(e){e.preventDefault(),wpLink.update()}),p.close.add(p.backdrop).add("#wp-link-cancel button").on("click",function(e){e.preventDefault(),wpLink.close()}),u.elements.on("river-select",wpLink.updateFields),p.search.on("focus.wplink",function(){p.queryNoticeTextDefault.hide(),p.queryNoticeTextHint.removeClass("screen-reader-text").show()}).on("blur.wplink",function(){p.queryNoticeTextDefault.show(),p.queryNoticeTextHint.addClass("screen-reader-text").hide()}),p.search.on("keyup input",function(){window.clearTimeout(l),l=window.setTimeout(function(){wpLink.searchInternalLinks()},500)}),p.url.on("paste",function(){setTimeout(wpLink.correctURL,0)}),p.url.on("blur",wpLink.correctURL)},correctURL:function(){var t=e.trim(p.url.val());t&&r!==t&&!/^(?:[a-z]+:|#|\?|\.|\/)/.test(t)&&(p.url.val("http://"+t),r=t)},open:function(t,n,l){var r;"acf-link-textarea"===t?e(".wp-link-title-field").hide():e(".wp-link-title-field").show();var a=e(document.body);a.addClass("modal-open"),wpLink.modalOpen=!0,wpLink.range=null,t&&(window.wpActiveEditor=t),window.wpActiveEditor&&(this.textarea=e("#"+window.wpActiveEditor).get(0),void 0!==window.tinymce&&(a.append(p.backdrop,p.wrap),r=window.tinymce.get(window.wpActiveEditor),i=r&&!r.isHidden()?r:null),!wpLink.isMCE()&&document.selection&&(this.textarea.focus(),this.range=document.selection.createRange()),p.wrap.show(),p.backdrop.show(),wpLink.refresh(n,l),e(document).trigger("wplink-open",p.wrap))},isMCE:function(){return i&&!i.isHidden()},refresh:function(e,t){u.search.refresh(),u.recent.refresh(),wpLink.isMCE()?wpLink.mceRefresh(e,t):(p.wrap.hasClass("has-text-field")||p.wrap.addClass("has-text-field"),document.selection?document.selection.createRange().text||t||"":void 0!==this.textarea.selectionStart&&this.textarea.selectionStart!==this.textarea.selectionEnd&&(t=this.textarea.value.substring(this.textarea.selectionStart,this.textarea.selectionEnd)||t||""),p.text.val(t),wpLink.setDefaultValues()),d?p.url.focus().blur():window.setTimeout(function(){p.url[0].select(),p.url.focus()}),u.recent.ul.children().length||u.recent.ajax(),r=p.url.val().replace(/^http:\/\//,"")},hasSelectedText:function(e){var t,n,l,r=i.selection.getContent();if(/</.test(r)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(r.trim())||-1===r.indexOf("href=")))return!1;if(e.length){if(!(n=e[0].childNodes)||!n.length)return!1;for(l=n.length-1;0<=l;l--)if(3!==(t=n[l]).nodeType&&!window.tinymce.dom.BookmarkManager.isBookmarkNode(t))return!1}return!0},mceRefresh:function(n,l){var r,a,s=h(),u=this.hasSelectedText(s);s.length?(r=s.text(),a=s.attr("href"),e.trim(r)||(r=l||""),n&&(c.test(n)||o.test(n))&&(a=n),"_wp_link_placeholder"!==a?(p.url.val(a),p.openInNewTab.prop("checked","_blank"===i.dom.getAttrib(s,"target")),p.nofollow.prop("checked",i.dom.getAttrib(s,"rel").includes("nofollow")),p.sponsored.prop("checked",i.dom.getAttrib(s,"rel").includes("sponsored")),p.title.val(i.dom.getAttrib(s,"title")),p.submit.val(t.update)):this.setDefaultValues(r),n&&n!==a?p.search.val(n):p.search.val(""),window.setTimeout(function(){wpLink.searchInternalLinks()})):(r=i.selection.getContent({format:"text"})||l||"",this.setDefaultValues(r)),u?(p.text.val(r),p.wrap.addClass("has-text-field")):(p.text.val(""),p.wrap.removeClass("has-text-field"))},close:function(t){e(document.body).removeClass("modal-open"),wpLink.modalOpen=!1,"noReset"!==t&&(wpLink.isMCE()?(i.plugins.wplink&&i.plugins.wplink.close(),i.focus()):(wpLink.textarea.focus(),wpLink.range&&(wpLink.range.moveToBookmark(wpLink.range.getBookmark()),wpLink.range.select()))),p.backdrop.hide(),p.wrap.hide(),r=!1,e(document).trigger("wplink-close",p.wrap)},getAttrs:function(){wpLink.correctURL();var t=p.nofollow.prop("checked")?"nofollow":"";p.sponsored.prop("checked")&&(t=t?t+" sponsored":"sponsored");var n={href:e.trim(p.url.val()),target:p.openInNewTab.prop("checked")?"_blank":null,rel:t};return e.trim(p.title.val())&&(n.title=e.trim(p.title.val())),n},buildHtml:function(e){var t='<a href="'+e.href+'"';return e.target&&(t+=' target="'+e.target+'"'),e.rel&&(t+=' rel="'+e.rel+'"'),e.title&&(t+=' title="'+e.title+'"'),t+">"},update:function(){wpLink.isMCE()?wpLink.mceUpdate():wpLink.htmlUpdate()},htmlUpdate:function(){var i=wpLink.textarea;if(i){var l,r,a,s,o,c=wpLink.getAttrs(),u=document.createElement("a");if(u.href=c.href,"javascript:"!==u.protocol&&"data:"!==u.protocol||(c.href=""),c.href){l=wpLink.buildHtml(c);var d=p.text.val();document.selection&&wpLink.range?(i.focus(),wpLink.range.text=l+(d||wpLink.range.text)+"</a>",wpLink.range.moveToBookmark(wpLink.range.getBookmark()),wpLink.range.select(),wpLink.range=null):void 0!==i.selectionStart&&(r=i.selectionStart,a=i.selectionEnd,s=r+(l=l+(o=d||i.value.substring(r,a))+"</a>").length,r!==a||o||(s-=4),i.value=i.value.substring(0,r)+l+i.value.substring(a,i.value.length),i.selectionStart=i.selectionEnd=s),wpLink.close(),i.focus(),e(i).trigger("change"),n.a11y.speak(t.linkInserted)}}},mceUpdate:function(){var l,r,a,s,o=wpLink.getAttrs(),c=document.createElement("a");if(c.href=o.href,"javascript:"!==c.protocol&&"data:"!==c.protocol||(o.href=""),!o.href)return i.execCommand("unlink"),void wpLink.close();l=i.$(h()),i.undoManager.transact(function(){l.length||(i.execCommand("mceInsertLink",!1,{href:"_wp_link_placeholder","data-wp-temp-link":1}),l=i.$('a[data-wp-temp-link="1"]').removeAttr("data-wp-temp-link"),a=e.trim(l.text())),l.length?(p.wrap.hasClass("has-text-field")&&((r=p.text.val())?l.text(r):a||l.text(o.href)),o["data-wplink-edit"]=null,o["data-mce-href"]=null,o.hasOwnProperty("rel")&&!o.rel&&(o.rel=null),l.attr(o)):i.execCommand("unlink")}),wpLink.close("noReset"),i.focus(),l.length&&((s=l.parent("#_mce_caret")).length&&s.before(l.removeAttr("data-mce-bogus")),i.selection.select(l[0]),i.selection.collapse(),i.plugins.wplink&&i.plugins.wplink.checkLink(l[0])),i.nodeChanged(),p.title.val(""),n.a11y.speak(t.linkInserted)},updateFields:function(e,t){p.url.val(t.children(".item-permalink").val()),p.wrap.hasClass("has-text-field")&&!p.text.val()&&p.text.val(t.children(".item-title").text())},getUrlFromSelection:function(t){return t||(this.isMCE()?t=i.selection.getContent({format:"text"}):document.selection&&wpLink.range?t=wpLink.range.text:void 0!==this.textarea.selectionStart&&(t=this.textarea.value.substring(this.textarea.selectionStart,this.textarea.selectionEnd))),(t=e.trim(t))&&o.test(t)?"mailto:"+t:t&&c.test(t)?t.replace(/&amp;|&#0?38;/gi,"&"):""},setDefaultValues:function(e){p.url.val(this.getUrlFromSelection(e)),p.search.val(""),wpLink.searchInternalLinks(),p.submit.val(t.save)},searchInternalLinks:function(){var e,t=p.search.val()||"";if(2<t.length){if(u.recent.hide(),u.search.show(),wpLink.lastSearch===t)return;wpLink.lastSearch=t,e=p.search.parent().find(".spinner").addClass("is-active"),u.search.change(t),u.search.ajax(function(){e.removeClass("is-active")})}else u.search.hide(),u.recent.show()},next:function(){u.search.next(),u.recent.next()},prev:function(){u.search.prev(),u.recent.prev()},keydown:function(e){var t;if(27===e.keyCode?(wpLink.close(),e.stopImmediatePropagation()):9===e.keyCode&&("wp-link-submit"!==(t=e.target.id)||e.shiftKey?"wp-link-close"===t&&e.shiftKey&&(p.submit.focus(),e.preventDefault()):(p.close.focus(),e.preventDefault())),!(e.shiftKey||38!==e.keyCode&&40!==e.keyCode||document.activeElement&&("link-title-field"===document.activeElement.id||"url-field"===document.activeElement.id))){var n=38===e.keyCode?"prev":"next";clearInterval(wpLink.keyInterval),wpLink[n](),wpLink.keyInterval=setInterval(wpLink[n],wpLink.keySensitivity),e.preventDefault()}},keyup:function(e){38!==e.keyCode&&40!==e.keyCode||(clearInterval(wpLink.keyInterval),e.preventDefault())},delayedCallback:function(e,t){var n,i,l,r;return t?(setTimeout(function(){if(i)return e.apply(r,l);n=!0},t),function(){if(n)return e.apply(this,arguments);l=arguments,r=this,i=!0}):e}},s=function(t,n){var i=this;this.element=t,this.ul=t.children("ul"),this.contentHeight=t.children("#link-selector-height"),this.waiting=t.find(".river-waiting"),this.change(n),this.refresh(),e("#wp-link .query-results, #wp-link #link-selector").on("scroll",function(){i.maybeLoad()}),t.on("click","li",function(t){i.select(e(this),t)})},e.extend(s.prototype,{refresh:function(){this.deselect(),this.visible=this.element.is(":visible")},show:function(){this.visible||(this.deselect(),this.element.show(),this.visible=!0)},hide:function(){this.element.hide(),this.visible=!1},select:function(e,t){if(!e.hasClass("unselectable")&&e!==this.selected){this.deselect(),this.selected=e.addClass("selected");var n=e.outerHeight(),i=this.element.height(),l=e.position().top,r=this.element.scrollTop();0>l?this.element.scrollTop(r+l):l+n>i&&this.element.scrollTop(r+l-i+n),this.element.trigger("river-select",[e,t,this])}},deselect:function(){this.selected&&this.selected.removeClass("selected"),this.selected=!1},prev:function(){var e;this.visible&&(this.selected&&(e=this.selected.prev("li")).length&&this.select(e))},next:function(){if(this.visible){var t=this.selected?this.selected.next("li"):e("li:not(.unselectable):first",this.element);t.length&&this.select(t)}},ajax:function(e){var t=this,n=1===this.query.page?0:wpLink.minRiverAJAXDuration,i=wpLink.delayedCallback(function(n,i){t.process(n,i),e&&e(n,i)},n);this.query.ajax(i)},change:function(e){this.query&&this._search===e||(this._search=e,this.query=new a(e),this.element.scrollTop(0))},process:function(n,i){var l="",r=!0,a="",s=1===i.page;n?e.each(n,function(){a=r?"alternate":"",a+=this.title?"":" no-title",l+=a?'<li class="'+a+'">':"<li>",l+='<input type="hidden" class="item-permalink" value="'+this.permalink+'" />',l+='<span class="item-title">',l+=this.title?this.title:t.noTitle,l+='</span><span class="item-info">'+this.info+"</span></li>",r=!r}):s&&(l+='<li class="unselectable no-matches-found"><span class="item-title"><em>'+t.noMatchesFound+"</em></span></li>"),this.ul[s?"html":"append"](l)},maybeLoad:function(){var e=this,t=this.element,n=t.scrollTop()+t.height();!this.query.ready()||n<this.contentHeight.height()-wpLink.riverBottomThreshold||setTimeout(function(){var n=t.scrollTop(),i=n+t.height();!e.query.ready()||i<e.contentHeight.height()-wpLink.riverBottomThreshold||(e.waiting.addClass("is-active"),t.scrollTop(n+e.waiting.outerHeight()),e.ajax(function(){e.waiting.removeClass("is-active")}))},wpLink.timeToTriggerRiver)}}),a=function(e){this.page=1,this.allLoaded=!1,this.querying=!1,this.search=e},e.extend(a.prototype,{ready:function(){return!(this.querying||this.allLoaded)},ajax:function(t){var n=this,i={action:"wp-link-ajax",page:this.page,_ajax_linking_nonce:p.nonce.val()};this.search&&(i.search=this.search),this.querying=!0,e.post(window.ajaxurl,i,function(e){n.page++,n.querying=!1,n.allLoaded=!e,t(e,i)},"json")}}),e(document).ready(wpLink.init)}(e.n(t)(),window.wpLinkL10n,window.wp)}();PK     ’ŠU]Gá†y¾  ¾    assets/admin/js/modules.jsnu „[µü¤        !function(){var e={8332:function(){},3423:function(){},6942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=l(e,o(n)))}return e}function o(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return a.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=l(t,n));return t}function l(e,t){return t?e?e+" "+t:e+t:e}e.exports?(a.default=a,e.exports=a):void 0===(n=function(){return a}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{resetStore:function(){return Le},resetdirtySettings:function(){return Fe},updateAnalytics:function(){return Ie},updateData:function(){return Ue},updateModules:function(){return Ve}});var t={};n.r(t),n.d(t,{appData:function(){return Ge},appUi:function(){return Xe}});var r={};n.r(r),n.d(r,{getAnalytics:function(){return nt},getAppData:function(){return Ze},getData:function(){return tt},getModules:function(){return rt},getdirtySettings:function(){return et}});var a={};n.r(a),n.d(a,{updateViewData:function(){return ct}});var o={};n.r(o),n.d(o,{appUi:function(){return ft}});var l={};n.r(l),n.d(l,{getViewData:function(){return dt}});const i=lodash;const c=wp.element,u=React,s=ReactDOM;function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},m.apply(null,arguments)}var p;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(p||(p={}));const f="popstate";function d(e,t){if(!1===e||null==e)throw new Error(t)}function h(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function b(e,t){return{usr:e.state,key:e.key,idx:t}}function y(e,t,n,r){return void 0===n&&(n=null),m({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?v(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function w(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function v(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function g(e,t,n,r){void 0===r&&(r={});let{window:a=document.defaultView,v5Compat:o=!1}=r,l=a.history,i=p.Pop,c=null,u=s();function s(){return(l.state||{idx:null}).idx}function h(){i=p.Pop;let e=s(),t=null==e?null:e-u;u=e,c&&c({action:i,location:g.location,delta:t})}function v(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"==typeof e?e:w(e);return n=n.replace(/ $/,"%20"),d(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,l.replaceState(m({},l.state,{idx:u}),""));let g={get action(){return i},get location(){return e(a,l)},listen(e){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(f,h),c=e,()=>{a.removeEventListener(f,h),c=null}},createHref:e=>t(a,e),createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){i=p.Push;let r=y(g.location,e,t);n&&n(r,e),u=s()+1;let m=b(r,u),f=g.createHref(r);try{l.pushState(m,"",f)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;a.location.assign(f)}o&&c&&c({action:i,location:g.location,delta:1})},replace:function(e,t){i=p.Replace;let r=y(g.location,e,t);n&&n(r,e),u=s();let a=b(r,u),m=g.createHref(r);l.replaceState(a,"",m),o&&c&&c({action:i,location:g.location,delta:0})},go:e=>l.go(e)};return g}var k;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(k||(k={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function _(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}const E=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function S(e,t){void 0===t&&(t="/");let n,{pathname:r,search:a="",hash:o=""}="string"==typeof e?v(e):e;if(r)if(l=r,E.test(l))n=r;else{if(r.includes("//")){let e=r;r=R(r),h(!1,"Pathnames cannot have embedded double slashes - normalizing "+e+" -> "+r)}n=r.startsWith("/")?O(r.substring(1),"/"):O(r,t)}else n=t;var l;return{pathname:n,search:x(a),hash:D(o)}}function O(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)}),n.length>1?n.join("/"):"/"}function P(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function j(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.length>0)}function N(e,t){let n=j(e);return t?n.map((e,t)=>t===n.length-1?e.pathname:e.pathnameBase):n.map(e=>e.pathnameBase)}function A(e,t,n,r){let a;void 0===r&&(r=!1),"string"==typeof e?a=v(e):(a=m({},e),d(!a.pathname||!a.pathname.includes("?"),P("?","pathname","search",a)),d(!a.pathname||!a.pathname.includes("#"),P("#","pathname","hash",a)),d(!a.search||!a.search.includes("#"),P("#","search","hash",a)));let o,l=""===e||""===a.pathname,i=l?"/":a.pathname;if(null==i)o=n;else{let e=t.length-1;if(!r&&i.startsWith("..")){let t=i.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let c=S(a,o),u=i&&"/"!==i&&i.endsWith("/"),s=(l||"."===i)&&n.endsWith("/");return c.pathname.endsWith("/")||!u&&!s||(c.pathname+="/"),c}const R=e=>e.replace(/\/\/+/g,"/"),T=e=>R(e.join("/")),x=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",D=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;const C=["post","put","patch","delete"],M=(new Set(C),["get",...C]);new Set(M),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function U(){return U=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},U.apply(null,arguments)}const I=u.createContext(null);const V=u.createContext(null);const F=u.createContext(null);const L=u.createContext({outlet:null,matches:[],isDataRoute:!1});function B(){return null!=u.useContext(F)}function H(){return B()||d(!1),u.useContext(F).location}function W(e){u.useContext(V).static||u.useLayoutEffect(e)}function z(){let{isDataRoute:e}=u.useContext(L);return e?function(){let{router:e}=G(K.UseNavigateStable),t=$(Y.UseNavigateStable),n=u.useRef(!1);return W(()=>{n.current=!0}),u.useCallback(function(r,a){void 0===a&&(a={}),n.current&&("number"==typeof r?e.navigate(r):e.navigate(r,U({fromRouteId:t},a)))},[e,t])}():function(){B()||d(!1);let e=u.useContext(I),{basename:t,future:n,navigator:r}=u.useContext(V),{matches:a}=u.useContext(L),{pathname:o}=H(),l=JSON.stringify(N(a,n.v7_relativeSplatPath)),i=u.useRef(!1);return W(()=>{i.current=!0}),u.useCallback(function(n,a){if(void 0===a&&(a={}),!i.current)return;if("number"==typeof n)return void r.go(n);let c=A(n,JSON.parse(l),o,"path"===a.relative);null==e&&"/"!==t&&(c.pathname="/"===c.pathname?t:T([t,c.pathname])),(a.replace?r.replace:r.push)(c,a.state,a)},[t,r,l,o,e])}()}u.Component;var K=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(K||{}),Y=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Y||{});function G(e){let t=u.useContext(I);return t||d(!1),t}function $(e){let t=function(){let e=u.useContext(L);return e||d(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||d(!1),n.route.id}function J(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}u.startTransition;function q(e){let{basename:t="/",children:n=null,location:r,navigationType:a=p.Pop,navigator:o,static:l=!1,future:i}=e;B()&&d(!1);let c=t.replace(/^\/*/,"/"),s=u.useMemo(()=>({basename:c,navigator:o,static:l,future:U({v7_relativeSplatPath:!1},i)}),[c,i,o,l]);"string"==typeof r&&(r=v(r));let{pathname:m="/",search:f="",hash:h="",state:b=null,key:y="default"}=r,w=u.useMemo(()=>{let e=_(m,c);return null==e?null:{location:{pathname:e,search:f,hash:h,state:b,key:y},navigationType:a}},[c,m,f,h,b,y,a]);return null==w?null:u.createElement(V.Provider,{value:s},u.createElement(F.Provider,{children:n,value:w}))}new Promise(()=>{});u.Component;function Q(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const X=u.startTransition;s.flushSync,u.useId;function Z(e){let{basename:t,children:n,future:r,window:a}=e,o=u.useRef();var l;null==o.current&&(o.current=(void 0===(l={window:a,v5Compat:!0})&&(l={}),g(function(e,t){let{pathname:n,search:r,hash:a}=e.location;return y("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:w(t)},null,l)));let i=o.current,[c,s]=u.useState({action:i.action,location:i.location}),{v7_startTransition:m}=r||{},p=u.useCallback(e=>{m&&X?X(()=>s(e)):s(e)},[s,m]);return u.useLayoutEffect(()=>i.listen(p),[i,p]),u.useEffect(()=>J(r),[r]),u.createElement(q,{basename:t,children:n,location:c.location,navigationType:c.action,navigator:i,future:r})}"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement;var ee,te;function ne(e){let t=u.useRef(Q(e)),n=u.useRef(!1),r=H(),a=u.useMemo(()=>function(e,t){let n=Q(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}(r.search,n.current?null:t.current),[r.search]),o=z(),l=u.useCallback((e,t)=>{const r=Q("function"==typeof e?e(a):e);n.current=!0,o("?"+r,t)},[o,a]);return[a,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(ee||(ee={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(te||(te={}));const re=wp.i18n;function ae(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,l="",i=r.indexOf("#");-1!==i&&(o=r.substring(0,i),l=r.substring(i));var c=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),u=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+u+c+l+n}n.dn(ae);var oe=rankMath.isPro,le=[{heading:(0,re.__)("Next stepsâ€¦","seo-by-rank-math"),items:[{id:oe?"how-to-setup":"upgrade-to-pro",icon:oe?"settings":"star-filled",title:oe?(0,re.__)("Setup Rank Math","seo-by-rank-math"):(0,re.__)("Upgrade to PRO","seo-by-rank-math"),description:oe?(0,re.__)("How to Properly Setup Rank Math","seo-by-rank-math"):(0,re.__)("Advanced Schema, Analytics and much moreâ€¦","seo-by-rank-math")},{id:"seo-import",icon:"import",title:(0,re.__)("Import Data","seo-by-rank-math"),description:(0,re.__)("How to Import Data from Your Previous SEO Plugin","seo-by-rank-math")},{id:"kb-seo-suite",icon:"help",title:(0,re.__)("Online Documentation","seo-by-rank-math"),description:(0,re.__)("Understand all the capabilities of Rank Math","seo-by-rank-math")}]},{heading:(0,re.__)("Product Support","seo-by-rank-math"),items:[{id:"support",icon:"support",title:(0,re.__)("Ticket Support","seo-by-rank-math"),description:(0,re.__)("Direct help from our qualified support team","seo-by-rank-math")},{id:"help-affiliate",icon:"sitemap",title:(0,re.__)("Affiliate Program","seo-by-rank-math"),description:(0,re.__)("Earn flat 30% on every sale!","seo-by-rank-math")},{id:"seo-care",icon:"service",title:(0,re.__)("SEO Care","seo-by-rank-math"),description:(0,re.__)("Get expert help to grow your site's SEO","seo-by-rank-math")}]}],ie={"how-to-setup":ae("how-to-setup","Help Tab Setup KB"),"upgrade-to-pro":ae("pro","Help Tab PRO Link"),"seo-import":ae("seo-import","Help Tab Import Data"),"kb-seo-suite":ae("kb-seo-suite","Help Tab KB Link"),support:ae("support","Help Tab Ticket"),"help-affiliate":ae("help-affiliate","Help Tab Aff Link"),"seo-care":ae("seo-care","Help Tab SEO Care")};const ce=function(){return wp.element.createElement("div",{className:"two-col rank-math-box-help"},(0,i.map)(le,function(e,t){var n=e.heading,r=e.items;return wp.element.createElement("div",{key:t,className:"col rank-math-box"},wp.element.createElement("header",null,wp.element.createElement("h3",null,n)),wp.element.createElement("div",{className:"rank-math-box-content"},wp.element.createElement("ul",{className:"rank-math-list-icon"},(0,i.map)(r,function(e){var t,n=e.id,r=e.icon,a=e.title,o=e.description;return wp.element.createElement("li",{key:n},wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:null!==(t=ie[n])&&void 0!==t?t:""},wp.element.createElement("i",{className:"rm-icon rm-icon-".concat(r)}),wp.element.createElement("div",null,wp.element.createElement("strong",null,a),wp.element.createElement("p",null,o))))}))))}))};n.dn(ce);const ue=window.rankMathComponents,se=function(){var e=rankMath,t=e.activateUrl,n=e.isSiteUrlValid;return wp.element.createElement(React.Fragment,null,wp.element.createElement("p",null,(0,re.__)("The plugin is currently not connected with your Rank Math account. Click on the button below to login or register for FREE using your ","seo-by-rank-math"),wp.element.createElement("strong",null,(0,re.__)("Google account, Facebook account","seo-by-rank-math")),(0,re.__)(" or ","seo-by-rank-math"),wp.element.createElement("strong",null,(0,re.__)("your email account.","seo-by-rank-math"))),wp.element.createElement(ue.InvalidSiteUrlNotice,{isSiteUrlValid:n}),wp.element.createElement("div",{className:"center"},wp.element.createElement(ue.Button,{variant:"animate",href:t,className:"button-connect",disabled:!n},(0,re.__)("Connect Now","seo-by-rank-math"))))};n.dn(se);const me=function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement("p",null,(0,re.__)("You have successfully activated Rank Math. If you find the plugin useful, ","seo-by-rank-math"),wp.element.createElement("strong",null,(0,re.__)("feel free to recommend it to your friends or colleagues.","seo-by-rank-math")),wp.element.createElement(ue.SocialShare,null)),wp.element.createElement("div",{className:"frm-submit"},wp.element.createElement(ue.StatusButton,{type:"submit",status:"disconnect",className:"button-xlarge",name:"button"},(0,re.__)("Disconnect Account","seo-by-rank-math"))))};n.dn(me);const pe=function(){var e=rankMath,t=e.isSiteConnected,n=e.registerProductNonce,r=t?"connected":"disconnected",a=t?(0,re.__)("Connected","seo-by-rank-math"):(0,re.__)("Not Connected","seo-by-rank-math");return wp.element.createElement("div",{className:"rank-math-box ".concat(t?"status-green":"status-red")},wp.element.createElement("header",null,wp.element.createElement("h3",null,(0,re.__)("Account","seo-by-rank-math")),wp.element.createElement(ue.StatusButton,{status:r},a)),wp.element.createElement("div",{className:"rank-math-box-content rank-math-ui"},wp.element.createElement("form",{method:"post"},wp.element.createElement(ue.TextControl,{type:"hidden",name:"registration-action",value:t?"deregister":"register"}),wp.element.createElement(ue.TextControl,{type:"hidden",name:"_wpnonce",value:n}),t?wp.element.createElement(me,null):wp.element.createElement(se,null))))};n.dn(pe);const fe=function(){return rankMath.canUser.manageOptions?wp.element.createElement("div",{className:"rank-math-ui container help"},wp.element.createElement(pe,null),wp.element.createElement(ce,null)):""};n.dn(fe);const de=wp.data,he=wp.compose;var be=n(6942),ye=n.n(be);const we=function(e){var t=e.betabadge,n=e.probadge;return t?wp.element.createElement("span",{className:"rank-math-pro-badge beta"},(0,re.__)("NEW!","seo-by-rank-math")):n&&!rankMath.isPro?wp.element.createElement("span",{className:"rank-math-pro-badge"},(0,re.__)("PRO","seo-by-rank-math")):null};n.dn(we);const ve=function(e){var t=e.upgradeable,n=e.probadge,r=rankMath.isPro;return t&&!r?wp.element.createElement(ue.Tooltip,{text:(0,re.__)("More powerful options are available in the PRO version.","seo-by-rank-math")},wp.element.createElement("span",{className:"is-upgradeable"},wp.element.createElement("a",{href:ae("pro","Content AI Module Upgradable Icon"),target:"_blank",rel:"noreferrer"},wp.element.createElement("div",null,"Â«")))):t||n&&r?wp.element.createElement(ue.Tooltip,{text:(0,re.__)("PRO options are enabled.","seo-by-rank-math")},wp.element.createElement("span",{className:"is-upgradeable"},wp.element.createElement("div",{className:"upgraded"},"Â«"))):null};n.dn(ve);const ge=wp.apiFetch;var ke=n.n(ge);const _e=jQuery;var Ee=n.n(_e);const Se=function(){Ee().ajax({url:window.location.pathname+window.location.search,method:"GET"}).done(function(e){if(e){var t=Ee()(e).find("#toplevel_page_rank-math"),n=Ee()("#toplevel_page_rank-math > .wp-submenu");t.length&&t.find("> .wp-submenu > li").length!==n.children("li").length&&n.fadeOut(200,function(){n.html(t.find("> .wp-submenu").hide().children()).fadeIn(400)})}})};function Oe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,l,i=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Pe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Pe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Se);var je=function(e,t){return wp.element.createElement(ue.ToggleControl,{checked:e.isActive,disabled:e.disabled,onChange:function(n){t(e.id),ke()({method:"POST",path:"/rankmath/v1/saveModule",data:{module:e.id,state:n?"on":"off"}}).then(function(r){t(""),r?(wp.data.dispatch("rank-math-settings").updateModules(e.id,n),Se()):window.alert((0,re.__)("Something went wrong! Please try again.","seo-by-rank-math"))}).catch(function(e){t(""),window.alert(e.message)})}})};const Ne=function(e){var t=e.module,n=Oe((0,c.useState)(),2),r=n[0],a=n[1];return wp.element.createElement("div",{className:"status wp-clearfix"},function(e){return e.settings&&e.isActive&&!e.isDisabled?wp.element.createElement("a",{href:e.settings,className:"module-settings button button-secondary"},(0,re.__)("Settings","seo-by-rank-math")):null}(t),wp.element.createElement("div",{className:"toggle-container"},function(e,t,n){return t===e.id?wp.element.createElement("span",{className:"input-loading"}):e.disabled&&e.disabled_text?wp.element.createElement(ue.Tooltip,{text:e.disabled_text,placement:"left"},je(e,n)):je(e,n)}(t,r,a)))};function Ae(){return Ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ae.apply(null,arguments)}n.dn(Ne);var Re=function(){window.open(ae("pro","Unlock Pro Module Box"))};const Te=function(e){var t=e.id,n=e.module,r=n.isHidden,a=n.isPro,o=n.icon,l=n.title,i=n.desc,c=ye()("rank-math-box",{hidden:r,"is-pro":a});return wp.element.createElement("div",Ae({key:t,className:c},a&&!rankMath.isPro?{onClick:Re,"aria-hidden":!0}:{}),wp.element.createElement("i",{className:"rm-icon rm-icon-"+o}),"content-ai"===t&&"free"===rankMath.contentAiPlan&&wp.element.createElement("div",{className:"rank-math-free-badge"},(0,re.__)("Free","seo-by-rank-math")),wp.element.createElement("header",null,wp.element.createElement("h3",null,l,wp.element.createElement(we,n),wp.element.createElement(ve,n)),wp.element.createElement("p",{dangerouslySetInnerHTML:{__html:i}})),wp.element.createElement(Ne,{module:n}))};n.dn(Te);const xe=(0,he.compose)((0,de.withSelect)(function(e){return{modules:e("rank-math-settings").getData()}}))(function(e){var t=e.modules;return(0,i.map)(t,function(e,t){if("internal"!==e.only)return wp.element.createElement(Te,{key:t,id:t,module:e})})}),De=function(){return rankMath.isPro?null:wp.element.createElement("div",{className:"rank-math-box rank-math-unlock-pro-box"},wp.element.createElement("i",{className:"rm-icon rm-icon-software"}),wp.element.createElement("div",{className:"pro-link",onClick:function(){window.open(ae("pro","Unlock PRO Module Box"),"_blank")},"aria-hidden":"true"},wp.element.createElement("header",null,wp.element.createElement("h3",null,(0,re.__)("Take SEO to the Next Level!","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,re.__)("Unlimited personal websites","seo-by-rank-math")),wp.element.createElement("li",null,(0,re.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,re.__)("Track 500 Keywords","seo-by-rank-math")),wp.element.createElement("li",null,(0,re.__)("Powerful Schema Generator","seo-by-rank-math")),wp.element.createElement("li",null,(0,re.__)("24/7 Support","seo-by-rank-math")))),wp.element.createElement("div",{className:"status wp-clearfix"},wp.element.createElement(ue.Button,{variant:"secondary",className:"button button-sedondary"},(0,re.__)("Buy","seo-by-rank-math")))))};n.dn(De);const Ce=wp.hooks;function Me(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return t=(0,Ce.applyFilters)("rank_math_sanitize_settings",t,e,n),null!==r&&(r=(0,Ce.applyFilters)("rank_math_sanitize_settings_value",r,e,n)),r=null===r?t:r,(0,Ce.doAction)("rank_math_settings_changed",e,t,n),{type:"RANK_MATH_SETTINGS_DATA",key:e,value:t,settingsKey:n,settingsValue:r}}function Ue(e){return Me("data",e,"data")}function Ie(e){return Me("analytics",e,"analytics")}function Ve(e,t){var n=wp.data.select("rank-math-settings").getData();return n[e].isActive=t,(0,i.forEach)(n,function(t,r){if((0,i.includes)(t.dep_modules,e)){var a=!1;(0,i.forEach)(t.dep_modules,function(e){n[e].isActive||(a=!0)}),n[r].isDisabled=a,n[r].disabled=a}}),Ue(n)}function Fe(){return Me("dirtySettings",{})}function Le(){return{type:"RESET_STORE"}}n(8332);function Be(e){return Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Be(e)}function He(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function We(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?He(Object(n),!0).forEach(function(t){ze(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):He(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ze(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Be(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Be(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Be(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ke={data:(0,i.get)(rankMath,"data",{}),analytics:We(We(We({},rankMath),(0,i.get)(rankMath,"data",{})),(0,i.get)(rankMath,"analytics",{})),dirtySettings:{}},Ye=We({},Ke);function Ge(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ke,t=arguments.length>1?arguments[1]:void 0,n=We({},e.dirtySettings);return!1!==t.settingsKey&&(n=t.settingsValue),"RANK_MATH_SETTINGS_DATA"===t.type?"dirtySettings"===t.key?We(We({},e),{},{dirtySettings:t.value}):We(We({},e),{},ze(ze({},t.key,t.value),"dirtySettings",n)):"RESET_STORE"===t.type?Ye:e}function $e(e){return $e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$e(e)}function Je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function qe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Je(Object(n),!0).forEach(function(t){Qe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Je(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Qe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=$e(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=$e(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$e(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?qe(qe({},e),{},Qe({},t.key,t.value)):e}function Ze(e){return e.appData}function et(e){return e.appData.dirtySettings}function tt(e){return e.appData.data}function nt(e){return e.appData.analytics}function rt(e){return e.appData.modules}n(3423),(0,de.register)((0,de.createReduxStore)("rank-math-settings",{reducer:(0,de.combineReducers)(t),selectors:r,actions:e}));const at=function(){var e=rankMath,t=e.isPro;return e.canUser.manageOptions?wp.element.createElement("div",{className:"rank-math-ui module-listing"},wp.element.createElement("div",{className:"grid ".concat(t?"pro-active":"")},wp.element.createElement(De,null),wp.element.createElement(xe,null))):wp.element.createElement("div",null,(0,re.__)("You can't access this page.","seo-by-rank-math"))};function ot(e){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ot(e)}function lt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function it(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ot(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ot(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ot(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ct(e,t){return n=e,r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?lt(Object(n),!0).forEach(function(t){it(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):lt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},t),{type:"RANK_MATH_APP_UI",key:n,value:r};var n,r}function ut(e){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ut(e)}function st(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?st(Object(n),!0).forEach(function(t){pt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):st(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function pt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ut(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ut(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ft(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?mt(mt({},e),{},pt({},t.key,t.value)):e}function dt(e,t){return e.appUi[t]}n.dn(at);(0,de.register)((0,de.createReduxStore)("rank-math-status",{reducer:(0,de.combineReducers)(o),selectors:l,actions:a}));const ht=function(e){var t=e.title;return wp.element.createElement("div",{className:"rank-math-skeleton rank-math-system-status rank-math-ui container"},wp.element.createElement("div",{className:"rank-math-box"},wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("div",{className:"copy-button-wrapper"}),wp.element.createElement("div",{className:"rank-math-panel components-panel"},(0,i.map)(Array.from({length:8}),function(e,t){return wp.element.createElement("div",{key:t,className:"components-panel__body"})}))))};function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}function yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?yt(Object(n),!0).forEach(function(t){vt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function vt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=bt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=bt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==bt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,l,i=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return kt(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?kt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function kt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(ht);const _t=function(e){var t=gt((0,c.useState)((0,re.__)("Save Changes","seo-by-rank-math")),2),n=t[0],r=t[1],a=gt((0,c.useState)(!1),2),o=a[0],l=a[1];return wp.element.createElement("footer",null,wp.element.createElement(ue.Button,{type:"submit",variant:"primary",size:"xlarge",disabled:o,onClick:function(){r((0,re.__)("Savingâ€¦","seo-by-rank-math")),l(!0),ke()({method:"POST",path:"/rankmath/v1/status/updateViewData",data:wt({},e)}).catch(function(e){console.error(e.message),r((0,re.__)("Failed! Try again","seo-by-rank-math"))}).then(function(e){r(e?(0,re.__)("Saved","seo-by-rank-math"):(0,re.__)("Failed! Try again","seo-by-rank-math"))}).finally(function(){setTimeout(function(){l(!1),r((0,re.__)("Save Changes","seo-by-rank-math"))},1e3)})}},n))};n.dn(_t);const Et=function(e){var t=e.title,n=e.description,r=e.warning,a=void 0===r?"":r;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("p",null,n),a&&wp.element.createElement("p",{className:"description warning"},wp.element.createElement("strong",null,wp.element.createElement("span",{className:"warning"},(0,re.__)("Warning: ","seo-by-rank-math")),a)))};function St(){return St=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},St.apply(null,arguments)}n.dn(Et);const Ot=function(e){var t=e.data,n=e.updateViewData,r=t.autoUpdate,a=t.updateNotificationEmail,o=t.isPluginUpdateDisabled,l=t.rollbackVersion;return wp.element.createElement("div",{className:"rank-math-auto-update-form field-form rank-math-box"},wp.element.createElement(Et,{title:(0,re.__)("Auto Update","seo-by-rank-math"),description:o?(0,re.__)("You cannot turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released, because site wide plugins auto-update option is disabled on your site.","seo-by-rank-math"):(0,re.__)("Turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released. The beta versions of Rank Math as soon as they are released. The beta versions will never install automatically.","seo-by-rank-math")}),!o&&wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_auto_update"},(0,re.__)("Auto Update Plugin","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(ue.ToggleControl,{id:"enable_auto_update",checked:r,onChange:function(e){t.autoUpdate=e,n(t)}}))))),wp.element.createElement("div",{id:"control_update_notification_email"},wp.element.createElement("p",null,(0,re.__)("When auto-updates are turned off, you can enable update notifications, to send an email to the site administrator when an update is available for Rank Math.","seo-by-rank-math")),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_update_notification_email"},(0,re.__)("Update Notification Email","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(ue.ToggleControl,{id:"enable_update_notification_email",checked:a,onChange:function(e){t.updateNotificationEmail=e,n(t)}})))))),!o&&l&&wp.element.createElement(ue.Notice,{variant:"alt",status:"warning"},wp.element.createElement("p",null,(0,re.__)("Rank Math will not auto-update because you have rolled back to a previous version. Update to the latest version manually to make this option work again.","seo-by-rank-math"))),wp.element.createElement(_t,St({panel:"auto_update"},t)))};function Pt(){return Pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Pt.apply(null,arguments)}n.dn(Ot);const jt=function(e){var t=e.data,n=e.updateViewData,r=t.betaOptin,a=t.isPluginUpdateDisabled;return wp.element.createElement("div",{className:"rank-math-beta-optin-form field-form rank-math-box"},wp.element.createElement(Et,{title:(0,re.__)("Beta Opt-in","seo-by-rank-math"),description:a?(0,re.__)("You cannot turn on the Beta Tester feature because site wide plugins auto-update option is disabled on your site.","seo-by-rank-math"):(0,re.__)("You can take part in shaping Rank Math by test-driving the newest features and letting us know what you think. Turn on the Beta Tester feature to get notified about new beta releases. The beta version will not install automatically and you always have the option to ignore it.","seo-by-rank-math"),warning:a?"":(0,re.__)("It is not recommended to use the beta version on live production sites.","seo-by-rank-math")}),!a&&wp.element.createElement(React.Fragment,null,wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"beta_tester"},(0,re.__)("Beta Tester","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(ue.ToggleControl,{id:"beta_tester",checked:r,onChange:function(e){t.betaOptin=e,n(t)}}))))),wp.element.createElement(_t,Pt({panel:"beta_optin"},t))))};function Nt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,l,i=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return At(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?At(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function At(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(jt);const Rt=function(e){var t=e.data,n=t.latestVersion,r=t.isRollbackVersion,a=t.isPluginUpdateDisabled,o=t.availableVersions,l=t.updateCoreUrl,u=t.rollbackNonce;if((0,i.isEmpty)(o))return"";var s=rankMath.version,m=Nt((0,c.useState)(o[1]),2),p=m[0],f=m[1],d=Nt((0,c.useState)(!1),2),h=d[0],b=d[1],y=(0,i.reduce)(o,function(e,t){return e[t]=t,e},{});return wp.element.createElement("form",{className:"rank-math-rollback-form field-form rank-math-box",method:"post",action:""},wp.element.createElement(Et,{title:(0,re.__)("Rollback to Previous Version","seo-by-rank-math"),description:(0,re.__)("If you are facing issues after an update, you can reinstall a previous version with this tool.","seo-by-rank-math"),warning:(0,re.__)("Previous versions may not be secure or stable. Proceed with caution and always create a backup.","seo-by-rank-math")}),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"your-verions"},(0,re.__)("Your Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,s),r&&wp.element.createElement(React.Fragment,null,wp.element.createElement("br",null),wp.element.createElement("span",{className:"rollback-version-label"},(0,re.__)("Rolled Back Version: ","seo-by-rank-math")),(0,re.__)("Auto updates will not work, please update the plugin manually.","seo-by-rank-math")),s===n?wp.element.createElement("p",{className:"description"},(0,re.__)("You are using the latest version of the plugin.","seo-by-rank-math")):wp.element.createElement("p",{className:"description"},(0,re.__)("This is the version you are using on this site.","seo-by-rank-math")))),s!==n&&wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"latest-stable"},(0,re.__)("Latest Stable Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,n),a&&s<n&&wp.element.createElement("a",{href:l,className:"update-link"},(0,re.__)("Update Now","seo-by-rank-math")),wp.element.createElement("p",{className:"description"},(0,re.__)("This is the latest version of the plugin.","seo-by-rank-math")))),wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"rollback_version"},(0,re.__)("Rollback Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(ue.SelectControl,{variant:"default",id:"rm_rollback_version",name:"rm_rollback_version",value:p,options:y,disabledOptions:[s],onChange:function(e){return f(e)}}),wp.element.createElement("p",{className:"description"},(0,re.__)("Roll back to this version.","seo-by-rank-math")))))),wp.element.createElement("footer",null,wp.element.createElement(ue.TextControl,{type:"hidden",name:"_wpnonce",value:u}),wp.element.createElement(ue.Button,{type:"submit",variant:"primary",size:"xlarge",id:"rm-rollback-button",onClick:function(){return b(!0)}},(0,re.__)("Install Version ","seo-by-rank-math"),p),h&&wp.element.createElement("div",{className:"alignright rollback-loading-indicator"},wp.element.createElement("span",{className:"loading-indicator-text"},(0,re.__)("Reinstalling, please waitâ€¦","seo-by-rank-math")),wp.element.createElement("span",{className:"spinner is-active"}))))};n.dn(Rt);const Tt=function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(Rt,e),wp.element.createElement(jt,e),wp.element.createElement(Ot,e))};n.dn(Tt);const xt=(0,he.compose)((0,de.withSelect)(function(e){return{data:e("rank-math-status").getViewData("version_control")}}),(0,de.withDispatch)(function(e){var t="version_control";return{getViewData:function(){ke()({method:"POST",path:"/rankmath/v1/status/getViewData",data:{activeTab:t}}).catch(function(e){alert(e.message)}).then(function(n){e("rank-math-status").updateViewData(t,n)})},updateViewData:function(n){e("rank-math-status").updateViewData(t,n)}}}))(function(e){var t=e.data,n=e.getViewData,r=e.updateViewData;return(0,c.useEffect)(function(){(0,i.isEmpty)(t)&&n()},[]),(0,i.isUndefined)(t)?wp.element.createElement(ht,{title:"Version Control"}):wp.element.createElement("div",{className:"rank-math-ui container version-control"},wp.element.createElement(Tt,{data:t,updateViewData:r}))});var Dt=rankMath,Ct=Dt.isAdvancedMode,Mt=Dt.isPluginActiveForNetwork,Ut=Dt.isNetworkAdmin,It=Dt.canUser,Vt=It.manageOptions&&Ut?[{name:"help",title:(0,re.__)("Dashboard","seo-by-rank-math"),view:fe},{name:"version_control",title:(0,re.__)("Version Control","seo-by-rank-math"),view:xt}]:(0,i.filter)([It.manageOptions&&{name:"modules",title:(0,re.__)("Modules","seo-by-rank-math"),view:at},It.manageOptions&&!Mt&&{name:"help",title:(0,re.__)("Help","seo-by-rank-math"),view:fe},It.manageOptions&&{name:"setup-wizard",className:"is-external",title:wp.element.createElement("a",{href:rankMath.adminurl+"?page=rank-math-wizard",onClick:function(e){return e.stopPropagation()}},(0,re.__)("Setup Wizard","seo-by-rank-math"))},Ct&&It.installPlugins&&{name:"import-export",className:"is-external",title:wp.element.createElement("a",{href:rankMath.adminurl+"?page=rank-math-status&view=import_export",onClick:function(e){return e.stopPropagation()}},(0,re.__)("Import & Export","seo-by-rank-math"))}],Boolean);function Ft(e){return function(e){if(Array.isArray(e))return Ht(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Bt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Lt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,l,i=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw a}}return i}}(e,t)||Bt(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Bt(e,t){if(e){if("string"==typeof e)return Ht(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ht(e,t):void 0}}function Ht(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Wt=function(){var e=Lt(ne({view:Vt[0].name}),2),t=e[0],n=e[1],r=t.get("view");return wp.element.createElement(React.Fragment,null,wp.element.createElement(ue.DashboardHeader,{page:r}),wp.element.createElement("div",{className:"wrap rank-math-wrap dashboard"},wp.element.createElement(ue.TabPanel,{tabs:Vt,key:r,initialTabName:r,onSelect:function(e){e===r||(0,i.includes)(["setup-wizard","import-export"],e)||n(function(t){return(0,i.fromPairs)([].concat(Ft(t),[["view",e]]))})}},function(e){var t=e.view;return t?wp.element.createElement(t,null):null})))};n.dn(Wt);const zt=function(){return wp.element.createElement(Z,null,wp.element.createElement(Wt,null))};var Kt;n.dn(zt),Kt=function(){var e=document.getElementById("rank-math-dashboard-page");(0,i.isNull)(e)||(0,c.createRoot)(e).render(wp.element.createElement(zt,null))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",Kt):Kt())}()}();PK     ’ŠU]ôñ\%  %  )  assets/admin/js/gutenberg-primary-term.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,{a:r}),r},d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}};const t=jQuery;var r=e.n(t);const n=wp.hooks,o=wp.element,i=wp.components,a=wp.data,u=lodash,c=wp.i18n,s=wp.apiFetch;var l=e.n(s);const f=wp.url;function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,y(n.key),n)}}function y(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=p(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,h()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function h(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(h=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function v(e,t){return v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},v(e,t)}var T=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=d(this,t,arguments)).onChange=e.onChange.bind(e),e.state={loading:!0,availableTerms:[],selectedTerms:[]},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&v(e,t)}(t,e),r=t,(n=[{key:"componentDidMount",value:function(){this.fetchTerms()}},{key:"componentWillUnmount",value:function(){(0,u.invoke)(this.fetchRequest,["abort"])}},{key:"componentDidUpdate",value:function(e,t){if(e.selectedTermIds.length<this.props.selectedTermIds.length){var r=(0,u.difference)(this.props.selectedTermIds,e.selectedTermIds)[0];if(!this.termIsAvailable(r))return void this.fetchTerms()}e.selectedTermIds!==this.props.selectedTermIds&&this.updateSelectedTerms(this.state.availableTerms,this.props.selectedTermIds),t.selectedTerms!==this.state.selectedTerms&&this.handleSelectedTermsChange()}},{key:"termIsAvailable",value:function(e){return!!this.state.availableTerms.find(function(t){return t.id===e})}},{key:"updateSelectedTerms",value:function(e,t){this.setState({selectedTerms:this.filterSelectedTerms(e,t)})}},{key:"handleSelectedTermsChange",value:function(){var e=this.state.selectedTerms,t=this.props.primaryTermID;e.find(function(e){return e.id===t})||this.onChange(e.length?e[0].id:"")}},{key:"fetchTerms",value:function(){var e=this,t=this.props.taxonomy;t&&(this.fetchRequest=l()({path:(0,f.addQueryArgs)("/wp/v2/".concat(t.rest_base),{per_page:-1,orderby:"count",order:"desc",_fields:"id,name"})}),this.fetchRequest.then(function(t){e.fetchRequest=null,e.setState({loading:!1,availableTerms:t,selectedTerms:e.filterSelectedTerms(t,e.props.selectedTermIds)})},function(t){"abort"!==t.statusText&&(e.fetchRequest=null,e.setState({loading:!1}))}))}},{key:"filterSelectedTerms",value:function(e,t){return e.filter(function(e){return t.includes(e.id)})}},{key:"onChange",value:function(e){(0,a.dispatch)("rank-math").updatePrimaryTermID(e,this.props.taxonomy.slug)}},{key:"shouldComponentUpdate",value:function(e,t){return this.props.selectedTermIds!==e.selectedTermIds||this.props.primaryTermID!==e.primaryTermID||this.state.selectedTerms!==t.selectedTerms}},{key:"render",value:function(){return this.state.selectedTerms.length<2?null:this.state.loading?[wp.element.createElement(i.Spinner,{key:"spinner"}),wp.element.createElement("p",{key:"spinner-text"},(0,c.__)("Loading","seo-by-rank-math"))]:wp.element.createElement(i.SelectControl,{label:(0,c.__)("Select Primary Term","seo-by-rank-math"),value:this.props.primaryTermID,options:this.state.selectedTerms.map(function(e){return{value:e.id,label:(0,u.unescape)(e.name)}}),onChange:this.onChange,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})}}])&&m(r.prototype,n),o&&m(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(o.Component);function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function w(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,S(n.key),n)}}function S(e){var t=function(e,t){if("object"!=g(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=g(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==g(t)?t:t+""}function O(e,t,r){return t=j(t),function(e,t){if(t&&("object"==g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,_()?Reflect.construct(t,r||[],j(e).constructor):t.apply(e,r))}function _(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_=function(){return!!e})()}function j(e){return j=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},j(e)}function P(e,t){return P=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},P(e,t)}var k=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),O(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&P(e,t)}(t,e),n=t,(o=[{key:"handleSelectedTermsChange",value:function(){var e=this.state.selectedTerms,t=parseInt(this.props.primaryTermID);e.find(function(e){return e.id===t})||this.onChange(e.length?e[0].id:"")}},{key:"onChange",value:function(e){e=parseInt(e),rankMath.assessor.serpData.primaryTerm=e,r()("#rank_math_primary_"+this.props.taxonomy.slug).val(e),(0,a.dispatch)("core/editor").editPost({meta:{refreshMe:"refreshUI"}})}}])&&w(n.prototype,o),i&&w(n,i),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o,i}(T);const I=(0,a.withSelect)(function(e,t){var n=t.slug,o=e("core/editor").getEditedPostAttribute,i=o("meta"),a=e("core").getTaxonomy(n);return{taxonomy:a,meta:i,selectedTermIds:a?o(a.rest_base):[],primaryTermID:r()("#rank_math_primary_"+a.slug).val()}})(k);const E=function(e){var t=e.TermComponent;return function(e){return!1!==rankMath.assessor.primaryTaxonomy&&e.slug===rankMath.assessor.primaryTaxonomy.name}(e)?wp.element.createElement(o.Fragment,null,wp.element.createElement(t,e),wp.element.createElement(i.PanelRow,{className:"rank-math-primary-term-picker"},wp.element.createElement(I,e))):wp.element.createElement(t,e)};function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function x(){return x=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},x.apply(null,arguments)}function D(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,M(n.key),n)}}function R(e,t,r){return t&&D(e.prototype,t),r&&D(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function M(e){var t=function(e,t){if("object"!=C(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==C(t)?t:t+""}var q=R(function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),(0,n.addFilter)("editor.PostTaxonomyType","rank-math",function(e){return function(t){return wp.element.createElement(E,x({TermComponent:e},t))}})});r()(document).ready(function(){new q})}();PK     ’ŠU]�ˆ©ˆU U   assets/admin/js/classic.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,{a:r}),r},d:function(e,r){for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},dn:function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})}},e={};t.r(e),t.d(e,{deleteSchema:function(){return Ve},lockModifiedDate:function(){return gt},refreshResults:function(){return De},resetDirtyMetadata:function(){return bt},resetRedirection:function(){return Rt},resetStore:function(){return vt},saveSchema:function(){return Ge},saveTemplate:function(){return We},schemaUpdated:function(){return xe},setEditingSchemaId:function(){return Fe},setEditorTab:function(){return Ke},setTemplateTab:function(){return Le},setVersion:function(){return Oe},toggleFrontendScore:function(){return pt},toggleIsDiviPageSettingsBarActive:function(){return Ie},toggleIsDiviRankMathModalActive:function(){return Ee},toggleLoaded:function(){return Se},toggleSchemaEditor:function(){return Ue},toggleSchemaTemplates:function(){return Ne},toggleSnippetEditor:function(){return Xt},updateAIScore:function(){return $e},updateAdvancedRobots:function(){return mt},updateAnalysisScore:function(){return ft},updateAppData:function(){return ut},updateAppUi:function(){return ct},updateBreadcrumbTitle:function(){return yt},updateCanonicalUrl:function(){return dt},updateDescription:function(){return Et},updateEditSchema:function(){return He},updateEditSchemas:function(){return Be},updateFacebookDescription:function(){return wt},updateFacebookHasOverlay:function(){return Pt},updateFacebookImage:function(){return _t},updateFacebookImageID:function(){return St},updateFacebookImageOverlay:function(){return Tt},updateFacebookTitle:function(){return kt},updateFeaturedImage:function(){return jt},updateHasRedirect:function(){return Ut},updateHighlightedParagraphs:function(){return je},updateKeywords:function(){return st},updatePermalink:function(){return Ot},updatePillarContent:function(){return lt},updatePostID:function(){return Dt},updatePrimaryTermID:function(){return At},updateRedirection:function(){return Ct},updateRedirectionItem:function(){return Mt},updateRobots:function(){return ht},updateSchemas:function(){return ze},updateSelectedKeyword:function(){return Pe},updateSerpDescription:function(){return Qt},updateSerpSlug:function(){return Jt},updateSerpTitle:function(){return qt},updateSnippetPreviewType:function(){return Yt},updateSocialTab:function(){return Te},updateTitle:function(){return It},updateTwitterAppCountry:function(){return _e},updateTwitterAppDescription:function(){return fe},updateTwitterAppGoogleplayID:function(){return ve},updateTwitterAppGoogleplayName:function(){return ke},updateTwitterAppGoogleplayUrl:function(){return we},updateTwitterAppIpadID:function(){return ye},updateTwitterAppIpadName:function(){return ge},updateTwitterAppIpadUrl:function(){return be},updateTwitterAppIphoneID:function(){return de},updateTwitterAppIphoneName:function(){return me},updateTwitterAppIphoneUrl:function(){return he},updateTwitterAuthor:function(){return ne},updateTwitterCardType:function(){return te},updateTwitterDescription:function(){return re},updateTwitterHasOverlay:function(){return oe},updateTwitterImage:function(){return ie},updateTwitterImageID:function(){return ae},updateTwitterImageOverlay:function(){return ue},updateTwitterPlayerSize:function(){return se},updateTwitterPlayerStreamCtype:function(){return pe},updateTwitterPlayerStreamUrl:function(){return le},updateTwitterPlayerUrl:function(){return ce},updateTwitterTitle:function(){return ee},updateTwitterUseFacebook:function(){return Zt}});var r={};t.r(r),t.d(r,{appData:function(){return Ze},appUi:function(){return ir}});var n={};t.r(n),t.d(n,{getAdvancedRobots:function(){return fr},getAnalysisScore:function(){return cr},getAppData:function(){return or},getBreadcrumbTitle:function(){return mr},getCanonicalUrl:function(){return dr},getDescription:function(){return Nr},getDirtyMetadata:function(){return ur},getEditSchemas:function(){return en},getEditingSchema:function(){return rn},getEditorTab:function(){return an},getFacebookAuthor:function(){return Ir},getFacebookDescription:function(){return Or},getFacebookHasOverlay:function(){return Ar},getFacebookImage:function(){return jr},getFacebookImageID:function(){return Er},getFacebookImageOverlay:function(){return Cr},getFacebookTitle:function(){return Dr},getFeaturedImage:function(){return xr},getFeaturedImageHtml:function(){return Fr},getHighlightedParagraphs:function(){return Tr},getKeywords:function(){return sr},getPermalink:function(){return Ur},getPillarContent:function(){return lr},getPostID:function(){return Mr},getPreviewSchema:function(){return nn},getPrimaryTermID:function(){return Kr},getRedirectionID:function(){return Lr},getRedirectionItem:function(){return Hr},getRedirectionType:function(){return Br},getRedirectionUrl:function(){return zr},getRichSnippets:function(){return hr},getRobots:function(){return pr},getSchemas:function(){return tn},getSelectedKeyword:function(){return vr},getSerpDescription:function(){return qr},getSerpSlug:function(){return $r},getSerpTitle:function(){return Wr},getShowScoreFrontend:function(){return yr},getSnippetPreviewType:function(){return Qr},getSocialTab:function(){return kr},getTemplateTab:function(){return on},getTitle:function(){return Rr},getTwitterAppCountry:function(){return Dn},getTwitterAppDescription:function(){return yn},getTwitterAppGoogleplayID:function(){return Sn},getTwitterAppGoogleplayName:function(){return Pn},getTwitterAppGoogleplayUrl:function(){return Tn},getTwitterAppIpadID:function(){return kn},getTwitterAppIpadName:function(){return wn},getTwitterAppIpadUrl:function(){return _n},getTwitterAppIphoneID:function(){return gn},getTwitterAppIphoneName:function(){return bn},getTwitterAppIphoneUrl:function(){return vn},getTwitterAuthor:function(){return pn},getTwitterCardType:function(){return cn},getTwitterDescription:function(){return ln},getTwitterHasOverlay:function(){return mn},getTwitterImage:function(){return dn},getTwitterImageID:function(){return fn},getTwitterImageOverlay:function(){return hn},getTwitterPlayerSize:function(){return In},getTwitterPlayerStream:function(){return En},getTwitterPlayerStreamCtype:function(){return jn},getTwitterPlayerUrl:function(){return On},getTwitterTitle:function(){return sn},getTwitterUseFacebook:function(){return un},hasRedirect:function(){return Gr},hasSchemaUpdated:function(){return Zr},isDiviPageSettingsBarActive:function(){return Sr},isDiviRankMathModalActive:function(){return Pr},isLoaded:function(){return br},isModifiedDateLocked:function(){return gr},isPro:function(){return _r},isRefreshing:function(){return wr},isSchemaEditorOpen:function(){return Xr},isSchemaTemplatesOpen:function(){return Yr},isSnippetEditorOpen:function(){return Jr}});const a=jQuery;var i=t.n(a);const o=lodash,u=wp.hooks,c=wp.data,s=wp.element,l=rankMathAnalyzer,p=wp.i18n;function f(t){return 100<t?"bad-fk dark":80<t?"good-fk":50<t?"ok-fk":"bad-fk"}t.dn(f);const d=wp.apiFetch;var m=t.n(d),h={"&amp;":"&","&quot;":'"',"&#39;":"'"},y=/&(?:amp|quot|#(0+)?39);/g,g=RegExp(y.source);const b=function(t){return t&&g.test(t)?t.replace(y,function(t){return h[t]||"'"}):t||""},v=function(t){return t.replace(/<\/?[a-z][^>]*?>/gi,"")};t.dn(v);const k=function(t){return t.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};t.dn(k);const w=function(t){return t.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};t.dn(w);const _=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,e)};t.dn(_);const S=function(t){return t.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};t.dn(S);const P=function(t){return t.replace(/<!--[\s\S]*?-->/g,"")};t.dn(P);const T=function(t){return t.replace(/&\S+?;/g,"")};function D(t){return(0,o.isUndefined)(t)||!t?"":(0,o.flow)([k,_,v,P,T,w,S])(t)}t.dn(T);var O={};(0,o.isUndefined)(rankMath.assessor)||(0,o.forEach)(rankMath.assessor.diacritics,function(t,e){return O[e]=new RegExp(t,"g")});const I=function(t){if((0,o.isUndefined)(t))return t;for(var e in O)t=t.replace(O[e],e);return t};t.dn(I);const E=wp.compose,j=wp.components;function A(t){return A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},A(t)}function C(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function M(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?C(Object(r),!0).forEach(function(e){R(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):C(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function R(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=A(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=A(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==A(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}const U=(0,E.compose)((0,c.withSelect)(function(t){return{lock:t("rank-math").isModifiedDateLocked()}}),(0,c.withDispatch)(function(t){return{onChange:function(e){t("rank-math").lockModifiedDate(e);var r=wp.data.select("core/editor");if(!(0,o.isUndefined)(r)&&!(0,o.isUndefined)(r.getEditedPostAttribute("meta"))){var n=M(M({},r.getEditedPostAttribute("meta")),{},{rank_math_lock_modified_date:e});t("core/editor").editPost({meta:n})}}}}))(function(t){var e=t.lock,r=t.onChange;return wp.element.createElement("div",null,wp.element.createElement(j.ToggleControl,{label:(0,p.__)("Lock Modified Date","seo-by-rank-math"),checked:e,onChange:function(t){return r(t)},__nextHasNoMarginBottom:!0}))});function N(t){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},N(t)}function x(){var t,e,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function i(r,n,a,i){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return F(s,"_invoke",function(r,n,a){var i,u,c,s=0,l=a||[],p=!1,f={p:0,n:0,v:t,a:d,f:d.bind(t,4),d:function(e,r){return i=e,u=0,c=t,f.n=r,o}};function d(r,n){for(u=r,c=n,e=0;!p&&s&&!a&&e<l.length;e++){var a,i=l[e],d=f.p,m=i[2];r>3?(a=m===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=d&&((a=r<2&&d<i[1])?(u=0,f.v=n,f.n=i[1]):d<m&&(a=r<3||i[0]>n||n>m)&&(i[4]=r,i[5]=n,f.n=m,u=0))}if(a||r>1)return o;throw p=!0,n}return function(a,l,m){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&d(l,m),u=l,c=m;(e=u<2?t:c)||!p;){i||(u?u<3?(u>1&&(f.n=-1),d(u,c)):f.n=c:f.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=t}else if((e=(p=f.n<0)?c:r.call(n,f))!==o)break}catch(e){i=t,u=1,c=e}finally{s=1}}return{value:e,done:p}}}(r,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][n]?e(e([][n]())):(F(e={},n,function(){return this}),e),p=s.prototype=u.prototype=Object.create(l);function f(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,F(t,a,"GeneratorFunction")),t.prototype=Object.create(p),t}return c.prototype=s,F(p,"constructor",s),F(s,"constructor",c),c.displayName="GeneratorFunction",F(s,a,"GeneratorFunction"),F(p),F(p,a,"Generator"),F(p,n,function(){return this}),F(p,"toString",function(){return"[object Generator]"}),(x=function(){return{w:i,m:f}})()}function F(t,e,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}F=function(t,e,r,n){function i(e,r){F(t,e,function(t){return this._invoke(e,r,t)})}e?a?a(t,e,{value:r,enumerable:!n,configurable:!n,writable:!n}):t[e]=r:(i("next",0),i("throw",1),i("return",2))},F(t,e,r,n)}function K(t,e,r,n,a,i,o){try{var u=t[i](o),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,a)}function L(t){return function(){var e=this,r=arguments;return new Promise(function(n,a){var i=t.apply(e,r);function o(t){K(i,n,a,o,u,"next",t)}function u(t){K(i,n,a,o,u,"throw",t)}o(void 0)})}}function B(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,z(n.key),n)}}function z(t){var e=function(t,e){if("object"!=N(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=N(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==N(e)?e:e+""}var H=function(){return t=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.analyzer=new l.Analyzer({i18n:p,analyses:rankMath.assessor.researchesTests}),this.dataCollector=e,this.promises=[],this.hooks(),this.registerRefresh(),this.saveEvent()},e=[{key:"hooks",value:function(){this.updateKeywordResult=this.updateKeywordResult.bind(this),this.sanitizeData=this.sanitizeData.bind(this),this.addScoreElem=this.addScoreElem.bind(this),this.addLockModifiedDate=this.addLockModifiedDate.bind(this),(0,u.addAction)("rankMath_analysis_keywordUsage_updated","rank-math",this.updateKeywordResult),(0,u.addFilter)("rank_math_sanitize_meta_value","rank-math",this.sanitizeData),(0,u.addFilter)("rank_math_sanitize_data","rank-math",this.sanitizeData),(0,u.addAction)("rank_math_loaded","rank-math",this.addLockModifiedDate,11),(0,u.addAction)("rank_math_loaded","rank-math",this.addScoreElem,11)}},{key:"addScoreElem",value:function(){var t=this;rankMath.showScore&&rankMath.canUser.analysis&&rankMath.canUser.general&&(this.scoreElem=i()('<div class="misc-pub-section rank-math-seo-score"></div>'),i()("#misc-publishing-actions").append(this.scoreElem),setTimeout(function(){t.scoreText='<span class="score-text"><span class="score-icon"><i class="rm-icon-rank-math"></i></span> SEO: <strong>'+p.__("Not available","seo-by-rank-math")+"</strong></span>",t.scoreElem.html(t.scoreText),t.scoreText=t.scoreElem.find("strong"),t.fkScoreText='<span class="score-text">'+p.__("Not available","seo-by-rank-math")+"</span>",t.fkScoreElem=i()('<div class="rank-math-seo-score below-focus-keyword">'+t.fkScoreText+"</div>"),t.fkScoreText=t.fkScoreElem.find("span"),i()("#rank-math-metabox-wrapper .rank-math-focus-keyword").find("tags").parent("div").append(t.fkScoreElem),t.updateScore=t.updateScore.bind(t),t.updateScore(),(0,u.addAction)("rank_math_refresh_results","rank-math",t.updateScore)},2e3))}},{key:"addLockModifiedDate",value:function(){var t=i()("#misc-publishing-actions");t.length&&rankMath.showLockModifiedDate&&(t.append('<div class="misc-pub-section rank-math-lock-modified-date" id="rank-math-lock-modified-date"></div>'),(0,s.createRoot)(document.getElementById("rank-math-lock-modified-date")).render(wp.element.createElement(U,null)))}},{key:"updateScore",value:function(){var t=rankMathEditor.resultManager.getScore(rankMathEditor.getPrimaryKeyword()),e=f(t);this.scoreElem.removeClass("loading bad-fk ok-fk good-fk"),this.fkScoreElem.removeClass("loading bad-fk ok-fk good-fk"),this.scoreElem.addClass(e),this.fkScoreElem.addClass(e),this.scoreText.html(t+" / 100"),this.fkScoreText.html(t+" / 100")}},{key:"sanitizeData",value:function(t,e){return"schemas"===e||(0,o.isObject)(t)||(0,o.isEmpty)(t)?t:(r=t,(0,o.isUndefined)(r)?"":(0,o.flow)([k,_,v,P])(r));var r}},{key:"getPaper",value:function(t,e){var r=this.dataCollector.getData(),n=new l.Paper("",{locale:rankMath.localeFull});n.setTitle((0,c.select)("rank-math").getSerpTitle()),n.setPermalink(r.slug),n.setDescription((0,c.select)("rank-math").getSerpDescription()),n.setUrl(r.permalink),n.setText(b((0,u.applyFilters)("rank_math_content",r.content))),n.setKeyword(t),n.setKeywords(e),n.setSchema((0,c.select)("rank-math").getSchemas()),(0,o.isUndefined)(r.featuredImage)||(n.setThumbnail(r.featuredImage.source_url),n.setThumbnailAltText(I(r.featuredImage.alt_text)));var a=(0,c.select)("rank-math-content-ai");if(!(0,o.isEmpty)(a)){var i=a.getData(),s=a.getScore();n.setContentAI(s||!(0,o.isEmpty)(i.keyword))}return n}},{key:"registerRefresh",value:function(){var t=this;this.refresh=(0,o.debounce)(function(e){if(!1!==(0,c.select)("rank-math").isLoaded()){var r=(0,c.select)("rank-math").getKeywords().split(","),n=[];(0,u.doAction)("rank_math_"+e+"_refresh"),r.map(function(e,a){var i=t.getPaper(I(e),r),o=0===a?rankMath.assessor.researchesTests:t.filterTests(t.getSecondaryKeywordTests());n.push(t.analyzer.analyzeSome(o,i).then(function(t){rankMathEditor.resultManager.update(i.getKeyword(),t,0===a),0===a&&(0,c.dispatch)("rank-math").updateAnalysisScore(rankMathEditor.resultManager.getScore(i.getKeyword()))})),Promise.all(n).then(function(){(0,c.dispatch)("rank-math").refreshResults(),t.refreshResults()})})}},500)}},{key:"updateKeywordResult",value:function(t,e){rankMathEditor.resultManager.update(t,{keywordNotUsed:e}),t===rankMathEditor.getSelectedKeyword().toLowerCase()&&(0,c.dispatch)("rank-math").refreshResults()}},{key:"getSecondaryKeywordTests",value:function(){return["keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","lengthPermalink","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasPowerWords","titleHasNumber","contentHasTOC","contentHasShortParagraphs","contentHasAssets"]}},{key:"getPrimaryKeyword",value:function(){var t=(0,c.select)("rank-math").getKeywords();return I(t.split(",")[0])}},{key:"getSelectedKeyword",value:function(){var t=(0,c.select)("rank-math").getKeywords(),e=(0,c.select)("rank-math").getSelectedKeyword(),r=""!==e.data.value?e.data.value:t.split(",")[0];return I(r)}},{key:"getResearch",value:function(t){return this.analyzer.researcher.getResearch(t)}},{key:"refreshResults",value:function(){(0,u.doAction)("rank_math_refresh_results")}},{key:"filterTests",value:function(t){return(0,o.intersection)(t,rankMath.assessor.researchesTests)}},{key:"saveEvent",value:function(){var t=this;if(!(0,o.isUndefined)(this.dataCollector.form)&&!(0,o.isUndefined)(this.dataCollector.updateBtn)){var e=!0;this.dataCollector.form.on("submit",function(r){if(e&&!(0,o.isUndefined)(r.originalEvent)){r.preventDefault();var n=t.dataCollector.updateBtn.data("disable")&&t.dataCollector.saveDraft.length?t.dataCollector.saveDraft:t.dataCollector.updateBtn;n.addClass("disabled").parent().find(".spinner").addClass("is-active"),e=!1;var a=r.originalEvent.submitter||null,u=t.saveMeta(),c=t.saveSchemas(u),s=t.saveRedirection(c),l=function(){if(n.removeClass("disabled"),a){var e=i()(a).attr("name"),r=i()(a).attr("value");e&&t.dataCollector.form.append(i()("<input>",{type:"hidden",name:e,value:r}))}t.dataCollector.form[0].requestSubmit()};return Promise.all([u,c,s]).then(l).catch(l),!1}})}}},{key:"saveMeta",value:function(){return new Promise(function(t){var e=(0,c.select)("rank-math").getDirtyMetadata();(0,o.isEmpty)(e)?t(!0):(m()({method:"POST",path:"rankmath/v1/updateMeta",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,meta:e,content:rankMathEditor.assessor.dataCollector.getContent()}}).then(function(){t(!0)}).catch(function(){t(!0)}),(0,c.dispatch)("rank-math").resetDirtyMetadata())})}},{key:"saveRedirection",value:function(t){return new Promise(function(){var e=L(x().m(function e(r){var n,a,i;return x().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,t;case 1:if(n=(0,c.select)("rank-math").getRedirectionItem(),!(0,o.isEmpty)(n)){e.n=2;break}return r(!0),e.a(2);case 2:n.objectID=window.rankMath.objectID,n.objectType=window.rankMath.objectType,n.redirectionSources=rankMathEditor.assessor.dataCollector.getData("permalink"),a=(0,c.dispatch)("rank-math"),i=(0,c.dispatch)("core/notices"),a.resetRedirection(),m()({method:"POST",path:"rankmath/v1/updateRedirection",data:n}).then(function(t){"delete"===t.action?(i.createInfoNotice(t.message,{id:"redirectionNotice"}),a.updateRedirection("redirectionID",0)):"update"===t.action?i.createInfoNotice(t.message,{id:"redirectionNotice"}):"new"===t.action&&(a.updateRedirection("redirectionID",t.id),i.createSuccessNotice(t.message,{id:"redirectionNotice"})),setTimeout(function(){i.removeNotice("redirectionNotice")},2e3),r(!0)}).catch(function(){r(!0)});case 3:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}())}},{key:"saveSchemas",value:function(t){return new Promise(function(){var e=L(x().m(function e(r){var n;return x().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,t;case 1:if(n=(0,c.select)("rank-math").getSchemas(),!(0,o.isEmpty)(n)&&(0,c.select)("rank-math").hasSchemaUpdated()){e.n=2;break}return r(!0),e.a(2);case 2:m()({method:"POST",path:"rankmath/v1/updateSchemas",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,schemas:n}}).then(function(){r(!0)}).catch(function(){r(!0)});case 3:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}())}}],e&&B(t.prototype,e),r&&B(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();const G=H;const V=function(){return!((0,o.isNil)(window.wp)||(0,o.isNil)(wp.data)||(0,o.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,o.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))},W=function(){return!(0,o.isNull)(document.getElementById("site-editor"))};t.dn(W);const $=function(){if(!W())return!1;var t=wp.data.select("core/editor"),e=t.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===e)return!0;var r=t.getCurrentTemplateId()||e;return!(!(0,o.endsWith)(r,"//home")&&!(0,o.endsWith)(r,"//front-page"))||!(!(0,o.endsWith)(r,"//page")&&!(0,o.endsWith)(r,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};function q(t){return q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},q(t)}function J(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Q(n.key),n)}}function Q(t){var e=function(t,e){if("object"!=q(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==q(e)?e:e+""}t.dn($);const X=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),(rankMath.is_front_page||$())&&((0,u.addFilter)("rankMath_analysis_contentLength","rank-math",this.contentLength),(0,u.addFilter)("rankMath_analysis_contentLength_boundaries","rank-math",this.contentLengthBoundary))},(e=[{key:"contentLength",value:function(t){return{hasScore:t.hasScore,failed:(0,p.__)("Content is %1$d words long. Consider using at least 300 words.","seo-by-rank-math"),tooltipText:(0,p.__)("Minimum recommended content length should be 300 words.","seo-by-rank-math"),emptyContent:(0,p.sprintf)((0,p.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/?utm_source=Plugin&utm_campaign=WP#overall-content-length" target="_blank">'+(0,p.__)("300 words","seo-by-rank-math")+"</a>")}}},{key:"contentLengthBoundary",value:function(){return{recommended:{boundary:299,score:8},belowRecommended:{boundary:200,score:5},low:{boundary:50,score:2}}}}])&&J(t.prototype,e),r&&J(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function Y(t){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y(t)}function Z(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,tt(n.key),n)}}function tt(t){var e=function(t,e){if("object"!=Y(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Y(e)?e:e+""}var et=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.methods=[],this.init=this.init.bind(this),this.refresh=this.refresh.bind(this),(0,u.addAction)("rank_math_loaded","rank-math",this.init)},e=[{key:"init",value:function(){this.methods.length&&rankMathEditor.refresh("content")}},{key:"registerPlugin",value:function(){console.warn("RankMathApp.registerPlugin is deprecated.")}},{key:"refresh",value:function(t){console.warn("RankMathApp.refresh is deprecated, use rankMathEditor.refresh()"),this.methods.push(t)}},{key:"reloadPlugin",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"content";console.warn("RankMathApp.reloadPlugin is deprecated, use rankMathEditor.refresh()"),this.refresh(e)}}],e&&Z(t.prototype,e),r&&Z(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();const rt=et;function nt(t){return nt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nt(t)}function at(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,it(n.key),n)}}function it(t){var e=function(t,e){if("object"!=nt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=nt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==nt(e)?e:e+""}var ot=new(function(){return t=function t(){var e,r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,n=null,(r=it(r="map"))in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n},(e=[{key:"swap",value:function(t,e){var r=this;if(!(t=t||""))return"";var n=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return t.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(n,function(t){return r.replace(e,t)}).trim()}},{key:"replace",value:function(t,e){var r=e.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(r)){var n="term_description"===r?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():i()(n).val()}return r.includes("customfield(")?(r=r.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[r]:"":(t=t||this.getMap(),(r="seo_description"===(r="seo_title"===(r=r.includes("(")?r.split("(")[0]:r)?"title":r)?"excerpt":r)in t?t[r]:"")}},{key:"getMap",value:function(){var t=this;return null!==this.map||(this.map={},i().each(rankMath.variables,function(e,r){e=e.toLowerCase().replace(/%+/g,"").split("(")[0],t.map[e]=r.example})),this.map}},{key:"setVariable",value:function(t,e){null!==this.map?this.map[t]=e:void 0!==rankMath.variables[t]&&(rankMath.variables[t].example=e)}}])&&at(t.prototype,e),r&&at(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}());function ut(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,u.applyFilters)("rank_math_sanitize_data",e,t,r),null!==n&&(n=(0,u.applyFilters)("rank_math_sanitize_meta_value",n,t,r)),n=null===n?e:n,(0,u.doAction)("rank_math_data_changed",t,e,r),{type:"RANK_MATH_APP_DATA",key:t,value:e,metaKey:r,metaValue:n}}function ct(t,e){return(0,u.doAction)("rank_math_update_app_ui",t,e),{type:"RANK_MATH_APP_UI",key:t,value:e}}function st(t){return ot.setVariable("focuskw",t.split(",")[0]),rankMathEditor.refresh("keyword"),ut("keywords",t,"rank_math_focus_keyword")}function lt(t){return ut("pillarContent",t,"rank_math_pillar_content",!0===t?"on":"off")}function pt(t){return ut("showScoreFrontend",t,"rank_math_dont_show_seo_score",!0===t?"off":"on")}function ft(t){return ut("score",t,"rank_math_seo_score")}function dt(t){return ut("canonicalUrl",t,"rank_math_canonical_url")}function mt(t){return ut("advancedRobots",t,"rank_math_advanced_robots")}function ht(t){return ut("robots",t,"rank_math_robots",Object.keys(t))}function yt(t){return ut("breadcrumbTitle",t,"rank_math_breadcrumb_title")}function gt(t){return ut("lockModifiedDate",t,"rank_math_lock_modified_date")}function bt(){return ut("dirtyMetadata",{})}function vt(t){return{type:"RESET_STORE",value:t}}function kt(t){return ut("facebookTitle",t,"rank_math_facebook_title")}function wt(t){return ut("facebookDescription",t,"rank_math_facebook_description")}function _t(t){return ut("facebookImage",t,"rank_math_facebook_image")}function St(t){return ut("facebookImageID",t,"rank_math_facebook_image_id")}function Pt(t){return ut("facebookHasOverlay",t,"rank_math_facebook_enable_image_overlay",!0===t?"on":"off")}function Tt(t){return ut("facebookImageOverlay",t,"rank_math_facebook_image_overlay")}function Dt(t){return rankMath.objectID=t,ut("postID",t)}function Ot(t){return ut("permalink",t,"permalink")}function It(t){return ut("title",t,"rank_math_title")}function Et(t){return ut("description",t,"rank_math_description")}function jt(t){return ut("featuredImage",t)}function At(t,e){return ut("primaryTerm",parseInt(t),"rank_math_primary_"+e)}function Ct(t,e){return ut(t,e)}function Mt(t){return ct("redirectionItem",t)}function Rt(){return ct("redirectionItem",{})}function Ut(t){return ct("hasRedirect",t)}const Nt=wp.autop;var xt="[^<>&/\\[\\]\0- =]+?",Ft=new RegExp("\\["+xt+"( [^\\]]+?)?\\]","g"),Kt=new RegExp("\\[/"+xt+"\\]","g");const Lt=function(t){return t.replace(Ft,"").replace(Kt,"")};t.dn(Lt);const Bt=function(t,e){var r=function(t,e){for(var r,n=/<p(?:[^>]+)?>(.*?)<\/p>/gi,a=[];null!==(r=n.exec(t));)a.push(r);return(0,o.map)(a,function(t){return e?D(t[1]):t[1]})}(t=(0,o.flow)([Lt,P,Nt.autop])(t),e=e||!1);return 0<r.length?r:[e?D(t):t]};t.dn(Bt),t.dn(Ht);var zt=document.createElement("div");function Ht(t){return t&&"string"==typeof t&&(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),zt.innerHTML=t,t=zt.textContent,zt.textContent=""),t}t.dn($t);var Gt=function(t,e){return t=(t=D(t)).replace(/\r?\n|\r/g," "),e?(0,o.truncate)(t,{length:e,separator:" "}):t},Vt=function(t){if((0,o.isEmpty)(t))return"";t=_(t),t=k(t),t=(0,o.unescape)(t).replace(/\[caption[^\]]*\](.*)\[\/caption\]/g,"");var e=(0,o.filter)(Bt(t,!0),function(t){return""!==t.trim()});if(!e.length)return"";var r=rankMathEditor.getPrimaryKeyword();if(""!==r){var n=(0,o.filter)(e,function(t){return(0,o.includes)(t.toLowerCase(),r.toLowerCase())});if(0<n.length)return Gt(n[0],160)}return Gt(e[0],160)},Wt=function(t){return!(0,o.isUndefined)(t)&&!(0,o.isEmpty)(t)&&D(t)};function $t(t){var e=rankMathEditor.assessor.dataCollector.getData(),r=e.excerpt,n=Vt(e.content),a=(0,o.isUndefined)(r)||(0,o.isEmpty)(r)?n:(0,o.unescape)(r);if(ot.setVariable("excerpt",a),ot.setVariable("seo_description",a),""!==(t=Ht((0,u.applyFilters)("rankMath/description",t))))return D(t);var i=(0,o.unescape)(rankMath.assessor.serpData.descriptionTemplate);return"term"===rankMath.objectType?Wt(i)||Wt(r)||n:Wt(r)||Wt(i)||n}function qt(t){return t=ot.swap(""!==t?t:rankMath.assessor.serpData.titleTemplate),rankMathEditor.refresh("title"),ct("serpTitle",Ht(t))}function Jt(t){return t=""!==t?t:rankMathEditor.assessor.dataCollector.getSlug(),rankMathEditor.refresh("permalink"),ct("serpSlug",t)}function Qt(t){return t=ot.swap($t(t)),rankMathEditor.refresh("description"),ct("serpDescription",t)}function Xt(t){return ct("isSnippetEditorOpen",t)}function Yt(t){return ct("snippetPreviewType",t)}function Zt(t){return ut("twitterUseFacebook",t,"rank_math_twitter_use_facebook",!0===t?"on":"off")}function te(t){return ut("twitterCardType",t,"rank_math_twitter_card_type")}function ee(t){return ut("twitterTitle",t,"rank_math_twitter_title")}function re(t){return ut("twitterDescription",t,"rank_math_twitter_description")}function ne(t){return ut("twitterAuthor",t,"rank_math_twitter_author")}function ae(t){return ut("twitterImageID",t,"rank_math_twitter_image_id")}function ie(t){return ut("twitterImage",t,"rank_math_twitter_image")}function oe(t){return ut("twitterHasOverlay",t,"rank_math_twitter_enable_image_overlay",!0===t?"on":"off")}function ue(t){return ut("twitterImageOverlay",t,"rank_math_twitter_image_overlay")}function ce(t){return ut("twitterPlayerUrl",t,"rank_math_twitter_player_url")}function se(t){return ut("twitterPlayerSize",t,"rank_math_twitter_player_size")}function le(t){return ut("twitterPlayerStream",t,"rank_math_twitter_player_stream")}function pe(t){return ut("twitterPlayerStreamCtype",t,"rank_math_twitter_player_stream_ctype")}function fe(t){return ut("twitterAppDescription",t,"rank_math_twitter_app_description")}function de(t){return ut("twitterAppIphoneID",t,"rank_math_twitter_app_iphone_id")}function me(t){return ut("twitterAppIphoneName",t,"rank_math_twitter_app_iphone_name")}function he(t){return ut("twitterAppIphoneUrl",t,"rank_math_twitter_app_iphone_url")}function ye(t){return ut("twitterAppIpadID",t,"rank_math_twitter_app_ipad_id")}function ge(t){return ut("twitterAppIpadName",t,"rank_math_twitter_app_ipad_name")}function be(t){return ut("twitterAppIpadUrl",t,"rank_math_twitter_app_ipad_url")}function ve(t){return ut("twitterAppGoogleplayID",t,"rank_math_twitter_app_googleplay_id")}function ke(t){return ut("twitterAppGoogleplayName",t,"rank_math_twitter_app_googleplay_name")}function we(t){return ut("twitterAppGoogleplayUrl",t,"rank_math_twitter_app_googleplay_url")}function _e(t){return ut("twitterAppCountry",t,"rank_math_twitter_app_country")}function Se(t){return ct("isLoaded",t)}function Pe(t){return ct("selectedKeyword",t)}function Te(t){return ct("socialTab",t)}function De(){return ct("refreshResults",Date.now())}function Oe(){return ct("isPro",!0)}function Ie(t){return ct("isDiviPageSettingsBarActive",t)}function Ee(t){return ct("isDiviRankMathModalActive",t)}function je(t){return ct("highlightedParagraphs",t)}function Ae(t){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ae(t)}function Ce(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function Me(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Ce(Object(r),!0).forEach(function(e){Re(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Ce(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Re(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Ae(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Ae(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ae(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ue(t){return ct("isSchemaEditorOpen",t)}function Ne(t){return ct("isSchemaTemplatesOpen",t)}function xe(t){return ct("schemaUpdated",t)}function Fe(t){return ct("editingSchemaId",t)}function Ke(t){return ct("editorTab",t)}function Le(t){return ct("templateTab",t)}function Be(t){return ct("editSchemas",t)}function ze(t){return ut("schemas",t)}function He(t,e){var r=Me({},(0,c.select)("rank-math").getEditSchemas());return r[t]=e,ct("editSchemas",r)}function Ge(t,e){var r=Me({},(0,c.select)("rank-math").getSchemas());return r[t]=e,ut("schemas",r)}function Ve(t){var e=Me({},(0,c.select)("rank-math").getSchemas());return delete e[t],(0,u.doAction)("rank_math_schema_trash",t),ut("schemas",e,"rank_math_delete_"+t,"")}function We(t,e,r){return m()({method:"POST",path:"rankmath/v1/saveTemplate",data:{schema:t,postId:r}}).then(function(r){e({loading:!1,showNotice:!0,postId:r.id}),setTimeout(function(){e({showNotice:!1}),(0,o.get)(rankMath,"isTemplateScreen",!1)&&(document.title=(0,p.__)("Edit Schema","seo-by-rank-math"),window.history.pushState(null,"",r.link.replace(/&amp;/g,"&")))},2e3),rankMath.schemaTemplates.push({schema:t,title:t.metadata.title,type:t["@type"]})}),e({loading:!0}),{type:"DONT_WANT_TO_DO_SOMETHING"}}function $e(t){return ut("contentAIScore",t,"rank_math_contentai_score",t)}function qe(t){return qe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qe(t)}function Je(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function Qe(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Je(Object(r),!0).forEach(function(e){Xe(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Je(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Xe(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=qe(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=qe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==qe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Ye=function(t){var e=t.assessor.serpData,r=t.assessor.hasRedirection;return{postID:null,title:e.title?e.title:e.titleTemplate,description:e.description,keywords:e.focusKeywords?e.focusKeywords:"",pillarContent:e.pillarContent,featuredImage:"",permalink:!1,primaryTerm:e.primaryTerm,robots:e.robots,advancedRobots:e.advancedRobots,canonicalUrl:e.canonicalUrl,breadcrumbTitle:e.breadcrumbTitle,showScoreFrontend:e.showScoreFrontend,lockModifiedDate:e.lockModifiedDate,redirectionID:r?(0,o.get)(t.assessor,"redirection.id",""):"",redirectionType:r?(0,o.get)(t.assessor,"redirection.header_code",""):"",redirectionUrl:r?(0,o.get)(t.assessor,"redirection.url_to",""):"",facebookTitle:e.facebookTitle,facebookImage:e.facebookImage,facebookImageID:e.facebookImageID,facebookAuthor:e.facebookAuthor,facebookDescription:e.facebookDescription,facebookHasOverlay:e.facebookHasOverlay,facebookImageOverlay:e.facebookImageOverlay,twitterTitle:e.twitterTitle,twitterImage:e.twitterImage,twitterAuthor:e.twitterAuthor,twitterImageID:e.twitterImageID,twitterCardType:e.twitterCardType,twitterUseFacebook:e.twitterUseFacebook,twitterDescription:e.twitterDescription,twitterHasOverlay:e.twitterHasOverlay,twitterImageOverlay:e.twitterImageOverlay,twitterPlayerUrl:e.twitterPlayerUrl,twitterPlayerSize:e.twitterPlayerSize,twitterPlayerStream:e.twitterPlayerStream,twitterPlayerStreamCtype:e.twitterPlayerStreamCtype,twitterAppDescription:e.twitterAppDescription,twitterAppIphoneName:e.twitterAppIphoneName,twitterAppIphoneID:e.twitterAppIphoneID,twitterAppIphoneUrl:e.twitterAppIphoneUrl,twitterAppIpadName:e.twitterAppIpadName,twitterAppIpadID:e.twitterAppIpadID,twitterAppIpadUrl:e.twitterAppIpadUrl,twitterAppGoogleplayName:e.twitterAppGoogleplayName,twitterAppGoogleplayID:e.twitterAppGoogleplayID,twitterAppGoogleplayUrl:e.twitterAppGoogleplayUrl,twitterAppCountry:e.twitterAppCountry,schemas:(0,o.get)(t,"schemas",{}),score:0,dirtyMetadata:{}}};function Ze(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ye(rankMath),e=arguments.length>1?arguments[1]:void 0,r=Qe({},t.dirtyMetadata);return!1!==e.metaKey&&(r[e.metaKey]=e.metaValue),"RESET_STORE"===e.type?Qe({},Ye(e.value)):"RANK_MATH_APP_DATA"===e.type?"dirtyMetadata"===e.key?Qe(Qe({},t),{},{dirtyMetadata:e.value}):Qe(Qe({},t),{},Xe(Xe({},e.key,e.value),"dirtyMetadata",r)):t}function tr(t){return tr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tr(t)}function er(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function rr(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?er(Object(r),!0).forEach(function(e){nr(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):er(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function nr(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=tr(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=tr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==tr(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var ar={isLoaded:!1,isPro:!1,selectedKeyword:{tag:"",index:0,data:{value:""}},hasRedirect:rankMath.assessor.hasRedirection&&!(0,o.isEmpty)((0,o.get)(rankMath.assessor,"redirection.id",""))&&!(0,o.isEmpty)((0,o.get)(rankMath.assessor,"redirection.url_to","")),serpTitle:"",serpSlug:"",serpDescription:(0,o.get)(rankMath.assessor,"serpData.description",""),isSnippetEditorOpen:!1,snippetPreviewType:"",refreshResults:"",redirectionItem:{},socialTab:"facebook",highlightedParagraphs:[],editorTab:"",templateTab:"",editSchemas:{},editingSchemaId:"",isSchemaEditorOpen:!1,isSchemaTemplatesOpen:!1,schemaUpdated:!1,isDiviRankMathModalActive:!1,isDiviPageSettingsBarActive:!1};function ir(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ar,e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?rr(rr({},t),{},nr({},e.key,e.value)):t}function or(t){return t.appData}function ur(t){return t.appData.dirtyMetadata}function cr(t){return t.appData.score}function sr(t){return t.appData.keywords}function lr(t){return t.appData.pillarContent}function pr(t){return t.appData.robots}function fr(t){return t.appData.advancedRobots}function dr(t){return t.appData.canonicalUrl}function mr(t){return t.appData.breadcrumbTitle}function hr(t){return"todo"}function yr(t){return t.appData.showScoreFrontend}function gr(t){return t.appData.lockModifiedDate}function br(t){return t.appUi.isLoaded}function vr(t){return t.appUi.selectedKeyword}function kr(t){return t.appUi.socialTab}function wr(t){return t.appUi.refreshResults}function _r(t){return t.appUi.isPro}function Sr(t){return t.appUi.isDiviPageSettingsBarActive}function Pr(t){return t.appUi.isDiviRankMathModalActive}function Tr(t){return t.appUi.highlightedParagraphs}function Dr(t){return t.appData.facebookTitle}function Or(t){return t.appData.facebookDescription}function Ir(t){return t.appData.facebookAuthor}function Er(t){return t.appData.facebookImageID}function jr(t){return t.appData.facebookImage}function Ar(t){return t.appData.facebookHasOverlay}function Cr(t){return""!==t.appData.facebookImageOverlay?t.appData.facebookImageOverlay:"play"}function Mr(t){return t.appData.postID}function Rr(t){return t.appData.title}function Ur(t){return t.appData.permalink}function Nr(t){return t.appData.description}function xr(t){return t.appData.featuredImage}function Fr(t){var e=t.appData.featuredImage;return'<img src="'.concat(e.source_url,'" alt="').concat(e.alt_text,'" >')}function Kr(t){return t.appData.primaryTerm}function Lr(t){return String(t.appData.redirectionID)}function Br(t){return t.appData.redirectionType}function zr(t){return t.appData.redirectionUrl}function Hr(t){return t.appUi.redirectionItem}function Gr(t){return t.appUi.hasRedirect}const Vr=wp.url;function Wr(t){return Ht(t.appUi.serpTitle)}function $r(t){return(0,Vr.safeDecodeURIComponent)(t.appUi.serpSlug)}function qr(t){return t.appUi.serpDescription}function Jr(t){return t.appUi.isSnippetEditorOpen}function Qr(t){return t.appUi.snippetPreviewType}function Xr(t){return t.appUi.isSchemaEditorOpen}function Yr(t){return t.appUi.isSchemaTemplatesOpen}function Zr(t){return t.appUi.schemaUpdated}function tn(t){return t.appData.schemas}function en(t){return t.appUi.editSchemas}function rn(t){return{id:t.appUi.editingSchemaId,data:t.appUi.editSchemas[t.appUi.editingSchemaId]}}function nn(t){return t.appData.schemas[t.appUi.editingSchemaId]}function an(t){return t.appUi.editorTab}function on(t){return t.appUi.templateTab}function un(t){return t.appData.twitterUseFacebook}function cn(t){return t.appData.twitterCardType}function sn(t){return t.appData.twitterTitle}function ln(t){return t.appData.twitterDescription}function pn(t){return t.appData.twitterAuthor}function fn(t){return t.appData.twitterImageID}function dn(t){return t.appData.twitterImage}function mn(t){return t.appData.twitterHasOverlay}function hn(t){return""!==t.appData.twitterImageOverlay?t.appData.twitterImageOverlay:"play"}function yn(t){return t.appData.twitterAppDescription}function gn(t){return t.appData.twitterAppIphoneID}function bn(t){return t.appData.twitterAppIphoneName}function vn(t){return t.appData.twitterAppIphoneUrl}function kn(t){return t.appData.twitterAppIpadID}function wn(t){return t.appData.twitterAppIpadName}function _n(t){return t.appData.twitterAppIpadUrl}function Sn(t){return t.appData.twitterAppGoogleplayID}function Pn(t){return t.appData.twitterAppGoogleplayName}function Tn(t){return t.appData.twitterAppGoogleplayUrl}function Dn(t){return t.appData.twitterAppCountry}function On(t){return t.appData.twitterPlayerUrl}function In(t){return t.appData.twitterPlayerSize}function En(t){return t.appData.twitterPlayerStream}function jn(t){return t.appData.twitterPlayerStreamCtype}(0,c.registerStore)("rank-math",{reducer:(0,c.combineReducers)(r),selectors:n,actions:e});function An(t){return An="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},An(t)}function Cn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Mn(n.key),n)}}function Mn(t){var e=function(t,e){if("object"!=An(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=An(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==An(e)?e:e+""}var Rn=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.updateBtn=i()("#publish"),this.form=i()("#post"),this._data={id:!1,slug:!1,permalink:!1,content:!1,title:!1,excerpt:!1,featuredImage:!1,description:""},this.refresh=this.refresh.bind(this),(0,u.addAction)("rank_math_loaded","rank-math",this.refresh),this.setup(),this.init()},e=[{key:"init",value:function(){var t=this;this.elemTitle.on("input",(0,o.debounce)(function(){t.handleTitleChange(t.elemTitle.val())},500)).trigger("input"),this.elemDescription.on("input",(0,o.debounce)(function(){t.handleExcerptChange(t.elemDescription.val())},500)).trigger("input"),this.elemSlug.on("input",(0,o.debounce)(function(){rankMathEditor.updatePermalink(t.elemSlug.val())},500))}},{key:"collectData",value:function(){this._data={id:this.getPostID(),slug:this.getSlug(),permalink:this.getPermalink(),content:this.getContent(),title:this.getTitle(),excerpt:this.getExcerpt(),featuredImage:this.getFeaturedImage()}}},{key:"getPostID",value:function(){return rankMath.objectID}},{key:"getTitle",value:function(){return this.elemTitle.val()}},{key:"getExcerpt",value:function(){var t=this.elemDescription.val();return ot.setVariable("excerpt",t),ot.setVariable("excerpt_only",t),ot.setVariable("wc_shortdesc",t),ot.setVariable("seo_description",t),t}},{key:"getPermalink",value:function(){return this.getSlug()?rankMath.permalinkFormat.replace(/%(postname|pagename|term|author)%/,this.getSlug()):""}},{key:"getSlug",value:function(){return this.elemSlug.val()}},{key:"getFeaturedImage",value:function(){return this.featuredImage}},{key:"refresh",value:function(){this.collectData(),(0,c.dispatch)("rank-math").toggleLoaded(!0),rankMathEditor.refresh("init")}},{key:"handleSlugChange",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];("auto-draft"!==this.getStatus()||e)&&this.elemSlug.val(t),i()("#editable-post-name").text(t),i()("#editable-post-name-full").text(t),this._data.slug=this.getSlug(),this._data.permalink=this.getPermalink(),(0,c.dispatch)("rank-math").updateSerpSlug(t),rankMathEditor.refresh("permalink")}},{key:"handleTitleChange",value:function(t){ot.setVariable("title",t),ot.setVariable("term",t),ot.setVariable("author",t),(0,c.dispatch)("rank-math").updateSerpTitle((0,c.select)("rank-math").getTitle()),rankMathEditor.refresh("title")}},{key:"handleExcerptChange",value:function(){this._data.excerpt=this.getExcerpt(),(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"handleFeaturedImageChange",value:function(){this._data.featuredImage=this.getFeaturedImage(),(0,c.dispatch)("rank-math").updateFeaturedImage(this.getFeaturedImage()),rankMathEditor.refresh("featuredImage")}},{key:"handleContentChange",value:function(){this._data.excerpt=this.getExcerpt(),this._data.content=this.getContent(),(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"getData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=t?this._data[t]:this._data;return(0,u.applyFilters)("rank_math_dataCollector_data",e)}},{key:"updateData",value:function(t,e){this._data[t]=e}},{key:"isTinymce",value:function(){return"undefined"!=typeof tinymce}},{key:"getStatus",value:function(){var t=!(0,o.isUndefined)(this.postStatus)&&this.postStatus.length?this.postStatus.val():"";return(0,o.isUndefined)(t)?"":t}}],e&&Cn(t.prototype,e),r&&Cn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();const Un=Rn;function Nn(t){return Nn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Nn(t)}function xn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Fn(n.key),n)}}function Fn(t){var e=function(t,e){if("object"!=Nn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Nn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Nn(e)?e:e+""}function Kn(t,e,r){return e=Bn(e),function(t,e){if(e&&("object"==Nn(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,Ln()?Reflect.construct(e,r||[],Bn(t).constructor):e.apply(t,r))}function Ln(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(Ln=function(){return!!t})()}function Bn(t){return Bn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Bn(t)}function zn(t,e){return zn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},zn(t,e)}var Hn=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Kn(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&zn(t,e)}(e,t),r=e,(n=[{key:"setup",value:function(){this.elemSlug=i()("#post_name"),this.elemTitle=i()("#title"),this.elemDescription=i()("#excerpt"),this.elemContent=i()("#content"),this.saveDraft=i()("#save-post"),this.postStatus=i()("#original_post_status"),this.assessThumbnail=this.assessThumbnail.bind(this),(0,u.addAction)("rank_math_updated_featured_image","rank-math",this.assessThumbnail),this.events()}},{key:"getContent",value:function(){if(null!==this.elemContent&&0!==this.elemContent.length)return this.isTinymce()&&tinymce.activeEditor&&!(0,o.isNull)(tinymce.get("content"))?tinymce.get("content").getContent():this.elemContent.val()}},{key:"getSlug",value:function(){var t=""===this.elemSlug.val()&&i()("#editable-post-name-full").length?i()("#editable-post-name-full").text():this.elemSlug.val();return(0,o.isUndefined)(t)?"":t}},{key:"events",value:function(){var t=this;this.elemContent.on("input change",(0,o.debounce)(function(){t.handleContentChange()},500)).trigger("change");var e=function(){t.isTinymce()&&(tinymce.activeEditor&&!(0,o.isUndefined)(tinymce.editors.content)&&tinymce.editors.content.on("keyup change",(0,o.debounce)(function(){t.handleContentChange()},500)),tinymce.editors&&!(0,o.isUndefined)(tinymce.editors.excerpt)&&tinymce.editors.excerpt.on("keyup change",(0,o.debounce)(function(){tinymce.editors.excerpt.save(),t.handleExcerptChange()},500)))};"undefined"!=typeof tinymce&&tinymce.on("AddEditor",e),i()(window).on("load",e),i()(document).on("ajaxComplete",function(e,r,n){var a="/admin-ajax.php";if(a===n.url.substr(-15)){var o="";"string"==typeof n.data&&-1!==n.data.indexOf("action=sample-permalink")&&(o=""===r.responseText?t.elemTitle.val():i()("<div>"+r.responseText+"</div>").find("#editable-post-name-full").text(),rankMathEditor.updatePermalink(o))}}),this.saveDraft.on("click",function(){t.updateBtn.attr("data-disable","true")})}},{key:"assessThumbnail",value:function(t){this.featuredImage={source_url:t.src,alt_text:t.alt},this.handleFeaturedImageChange(t)}}])&&xn(r.prototype,n),a&&xn(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(Un);const Gn=Hn;function Vn(t){return Vn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vn(t)}function Wn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,$n(n.key),n)}}function $n(t){var e=function(t,e){if("object"!=Vn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Vn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Vn(e)?e:e+""}function qn(t,e,r){return e=Qn(e),function(t,e){if(e&&("object"==Vn(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,Jn()?Reflect.construct(e,r||[],Qn(t).constructor):e.apply(t,r))}function Jn(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(Jn=function(){return!!t})()}function Qn(t){return Qn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Qn(t)}function Xn(t,e){return Xn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Xn(t,e)}var Yn=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),qn(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Xn(t,e)}(e,t),r=e,(n=[{key:"setup",value:function(){this.updateBtn=i()('.edit-tag-actions input[type="submit"]'),this.form=i()("#edittag"),this.elemSlug=i()("#slug"),this.elemTitle=i()("#name"),this.elemDescription=i()("#rank_math_description_editor"),this.events()}},{key:"getContent",value:function(){return null===this.elemDescription||0===this.elemDescription.length?"":this.isTinymce()&&tinymce.activeEditor&&"rank_math_description_editor"===tinymce.activeEditor.id?tinymce.activeEditor.getContent():this.elemDescription.val()}},{key:"events",value:function(){var t=this;i()(window).on("load",function(){t.isTinymce()&&tinymce.activeEditor&&!(0,o.isUndefined)(tinymce.editors.rank_math_description_editor)&&tinymce.editors.rank_math_description_editor.on("keyup change",(0,o.debounce)(function(){t.handleContentChange()},500))})}}])&&Wn(r.prototype,n),a&&Wn(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(Un);const Zn=Yn;function ta(t){return ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ta(t)}function ea(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ra(n.key),n)}}function ra(t){var e=function(t,e){if("object"!=ta(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=ta(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ta(e)?e:e+""}function na(t,e,r){return e=ia(e),function(t,e){if(e&&("object"==ta(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,aa()?Reflect.construct(e,r||[],ia(t).constructor):e.apply(t,r))}function aa(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(aa=function(){return!!t})()}function ia(t){return ia=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},ia(t)}function oa(t,e){return oa=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},oa(t,e)}var ua=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),na(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&oa(t,e)}(e,t),r=e,(n=[{key:"setup",value:function(){this.updateBtn=i()("#submit"),this.form=i()("#your-profile"),this.elemSlug=i()("#user_login"),this.elemTitle=i()("#display_name"),this.elemDescription=i()("#description")}},{key:"getContent",value:function(){return this.elemDescription.val()}}])&&ea(r.prototype,n),a&&ea(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(Un);const ca=ua,sa=wp.plugins,la=wp.editor;function pa(t){return pa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pa(t)}function fa(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function da(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?fa(Object(r),!0).forEach(function(e){ha(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):fa(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function ma(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ya(n.key),n)}}function ha(t,e,r){return(e=ya(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ya(t){var e=function(t,e){if("object"!=pa(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=pa(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==pa(e)?e:e+""}var ga=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),ha(this,"initialize",!1),ha(this,"isSavingRedirection",!1),ha(this,"isSavingSchemas",!1),ha(this,"oldSlug",!1),this._data={id:!1,slug:!1,permalink:!1,content:!1,title:!1,excerpt:!1,featuredImage:!1},this.refresh=this.refresh.bind(this),this.isSavingPost=this.isSavingPost.bind(this),this.getPostAttribute=this.getPostAttribute.bind(this),this.subscribeToGutenberg(),this.lockModifiedDate()},(e=[{key:"lockModifiedDate",value:function(){rankMath.showLockModifiedDate&&(0,sa.registerPlugin)("rank-math-lock-last-modified",{render:function(){return wp.element.createElement(la.PluginPostStatusInfo,null,wp.element.createElement(U,null))}})}},{key:"collectGutenbergData",value:function(){return V()?(this._coreEditorSelect||(this._coreEditorSelect=(0,c.select)("core/editor")),!1===this.oldSlug&&""!==this.getSlug()&&(this.oldSlug=this.getSlug()),{id:this.getPostID(),slug:this.getSlug(),permalink:this.getPermalink(),content:this.getPostAttribute("content"),title:this.getPostAttribute("title"),excerpt:this.getPostAttribute("excerpt"),featuredImage:this.getFeaturedImage()}):{}}},{key:"getPostID",value:function(){return this._coreEditorSelect.getCurrentPostId()}},{key:"getPermalink",value:function(){if($())return rankMath.homeUrl;if("auto-draft"===this.getPostAttribute("status"))return"";var t=this.getPostAttribute("generated_slug");return"auto-draft"!==t&&"en"===rankMath.locale||(t=""),(0,Vr.safeDecodeURIComponent)(this._coreEditorSelect.getPermalink())}},{key:"getSlug",value:function(){var t=this.getPostAttribute("generated_slug");return"auto-draft"===t&&(t=""),(0,Vr.safeDecodeURIComponent)(this.getPostAttribute("slug")||t)}},{key:"getFeaturedImage",value:function(){var t=this.getPostAttribute("featured_media");if(this.isValidMediaId(t)){var e=(0,c.select)("core").getEntityRecord("postType","attachment",t);if(!(0,o.isUndefined)(e))return e}}},{key:"isValidMediaId",value:function(t){return"number"==typeof t&&0<t}},{key:"getPostAttribute",value:function(t){return V()?(this._coreEditorSelect||(this._coreEditorSelect=(0,c.select)("core/editor")),this._coreEditorSelect.getEditedPostAttribute(t)):""}},{key:"subscribeToGutenberg",value:function(){this.subscriber=(0,o.debounce)(this.refresh,500),(0,c.subscribe)(this.subscriber),(0,c.subscribe)(this.isSavingPost)}},{key:"refresh",value:function(){var t=da({},this._data);this._data=this.collectGutenbergData(),this.handleEditorChange(t)}},{key:"isSavingPost",value:function(){var t=(0,c.select)("core/editor");if(t&&!t.isAutosavingPost()&&t.isSavingPost()){var e=(0,c.select)("rank-math").getDirtyMetadata();(0,o.isEmpty)(e)||(m()({method:"POST",path:"rankmath/v1/updateMeta",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,meta:e,content:(0,u.applyFilters)("rank_math_content",this.getPostAttribute("content"))}}).then(function(t){(0,u.doAction)("rank_math_metadata_updated",t)}),(0,c.dispatch)("rank-math").resetDirtyMetadata()),"publish"===this.getPostAttribute("status")&&(this.saveRedirection(),this.autoCreateRedirectionNotice()),this.saveSchemas()}}},{key:"saveSchemas",value:function(){var t=this;if(!this.isSavingSchemas){var e=(0,c.select)("rank-math").getSchemas();if(!(0,o.isEmpty)(e)&&(0,c.select)("rank-math").hasSchemaUpdated()){this.isSavingSchemas=!0;var r=(0,c.select)("rank-math").getEditSchemas();m()({method:"POST",path:"rankmath/v1/updateSchemas",data:{objectID:this.getPostID(),objectType:rankMath.objectType,schemas:e}}).then(function(n){var a=da({},e),i=da({},r);(0,o.isEmpty)(n)||(0,o.map)(n,function(t,e){a["schema-"+t]=da({},a[e]),i["schema-"+t]=da({},i[e]),delete a[e],delete i[e]}),(0,c.dispatch)("rank-math").updateSchemas(a),(0,c.dispatch)("rank-math").updateEditSchemas(i),setTimeout(function(){(0,c.dispatch)("rank-math").schemaUpdated(!1),(0,u.doAction)("rank_math_schema_changed"),t.isSavingSchemas=!1},2e3)})}}}},{key:"saveRedirection",value:function(){var t=this;if(!this.isSavingRedirection){var e=(0,c.select)("rank-math").getRedirectionItem();if(!(0,o.isEmpty)(e)){this.isSavingRedirection=!0,e.objectID=this.getPostID(),e.redirectionSources=this.getPermalink();var r=(0,c.dispatch)("rank-math"),n=(0,c.dispatch)("core/notices");r.resetRedirection(),m()({method:"POST",path:"rankmath/v1/updateRedirection",data:e}).then(function(e){"delete"===e.action?(n.createInfoNotice(e.message,{id:"redirectionNotice"}),r.updateRedirection("redirectionID",0)):"update"===e.action?n.createInfoNotice(e.message,{id:"redirectionNotice"}):"new"===e.action&&(r.updateRedirection("redirectionID",e.id),n.createSuccessNotice(e.message,{id:"redirectionNotice"})),setTimeout(function(){t.isSavingRedirection=!1,n.removeNotice("redirectionNotice")},2e3)})}}}},{key:"autoCreateRedirectionNotice",value:function(){if(rankMath.assessor.hasRedirection&&(0,o.get)(rankMath,["assessor","autoCreateRedirection"],!1)&&!(0,c.select)("core/editor").isEditedPostNew()&&!1!==this.oldSlug){var t=this.getSlug();if(this.oldSlug!==t){var e=(0,c.dispatch)("core/notices");this.oldSlug=t,e.createSuccessNotice((0,p.__)("Auto redirection created.","seo-by-rank-math"),{id:"redirectionAutoCreationNotice"}),setTimeout(function(){e.removeNotice("redirectionAutoCreationNotice")},2e3)}}}},{key:"handleEditorChange",value:function(t){var e=this,r={id:"handleIDChange",slug:"handleSlugChange",title:"handleTitleChange",excerpt:"handleExcerptChange",content:"handleContentChange",featuredImage:"handleFeaturedImageChange"};if(t.id)return this.initialize?void(0,o.forEach)(r,function(r,n){e._data[n]!==t[n]&&e[r](e._data[n])}):(this.initialize=!0,(0,o.forEach)(r,function(t,r){e[t](e._data[r])}),void rankMathEditor.refresh("init"));(0,c.dispatch)("rank-math").refreshResults()}},{key:"handleIDChange",value:function(t){$()&&(t=0),(0,c.dispatch)("rank-math").updatePostID(t),(0,c.dispatch)("rank-math").toggleLoaded(!0),(0,u.doAction)("rank_math_id_changed")}},{key:"handleSlugChange",value:function(){""!==this.getSlug()&&!1===this.oldSlug&&(this.oldSlug=this.getSlug()),rankMathEditor.refresh("permalink")}},{key:"handleTitleChange",value:function(t){ot.setVariable("title",t),ot.setVariable("term",t),ot.setVariable("author",t),(0,c.dispatch)("rank-math").updateSerpTitle((0,c.select)("rank-math").getTitle()),rankMathEditor.refresh("title")}},{key:"handleExcerptChange",value:function(t){ot.setVariable("excerpt",t),ot.setVariable("excerpt_only",t),ot.setVariable("wc_shortdesc",t),ot.setVariable("seo_description",t),(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription())}},{key:"handleFeaturedImageChange",value:function(t){(0,c.dispatch)("rank-math").updateFeaturedImage(t),rankMathEditor.refresh("featuredImage")}},{key:"handleContentChange",value:function(){(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"getData",value:function(){return(0,u.applyFilters)("rank_math_dataCollector_data",this._data)}}])&&ma(t.prototype,e),r&&ma(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();const ba=ga;function va(t){return va="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},va(t)}function ka(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function wa(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?ka(Object(r),!0).forEach(function(e){_a(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ka(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function _a(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=va(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=va(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==va(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Sa(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){s=!0,a=t}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Pa(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Pa(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pa(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}const Ta=function(t){var e=t.suggestions,r=t.useFocusKeyword,n=t.onCopy,a=t.onInsert,i=Sa((0,s.useState)({}),2),o=i[0],u=i[1],c=function(t){u(function(e){return wa(wa({},e),{},_a({},t,!0))}),setTimeout(function(){u(function(e){var r=wa({},e);return delete r[t],r})},1500)};return 0===e.length?wp.element.createElement("em",null,wp.element.createElement("small",null,(0,p.__)("We can't show any link suggestions for this post. Try selecting categories and tags for this post, and mark other posts as Pillar Content to make them show up here.","seo-by-rank-math"))):wp.element.createElement("div",{className:"rank-math-link-suggestions-content","data-count":e.length},e.map(function(t){var e=r&&t.focus_keywords&&t.focus_keywords.length?t.focus_keywords[0]:t.title,i=t.post_id+"_copy",u=t.post_id+"_insert",s=null;return o[i]?s=(0,p.__)("Link Copied","seo-by-rank-math"):o[u]&&(s=(0,p.__)("Link Inserted","seo-by-rank-math")),wp.element.createElement("div",{key:t.post_id,className:"suggestion-item"},wp.element.createElement("button",{type:"button",className:"suggestion-title"},s||wp.element.createElement("a",{href:t.url,target:"_blank",rel:"noreferrer",title:t.title},e)),wp.element.createElement("div",{className:"suggestion-actions"},wp.element.createElement(j.Button,{icon:"clipboard",className:"suggestion-copy",label:(0,p.__)("Copy Link URL to Clipboard","seo-by-rank-math"),showTooltip:!0,onClick:function(){n(t.url),c(i)}}),wp.element.createElement(j.Button,{icon:"admin-links",className:"suggestion-insert",label:(0,p.__)("Insert Link in Content","seo-by-rank-math"),showTooltip:!0,onClick:function(){a(t.url,e),c(u)}})))}))};function Da(t){return Da="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Da(t)}function Oa(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ia(n.key),n)}}function Ia(t){var e=function(t,e){if("object"!=Da(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Da(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Da(e)?e:e+""}var Ea=function(t,e){for(var r=0,n=0;n<t.length&&r<e;)if("<"===t[n]){for(;n<t.length&&">"!==t[n];)n++;n++}else r++,n++;for(;n<t.length&&"<"===t[n];){for(;n<t.length&&">"!==t[n];)n++;n++}return n},ja=function(t){if("function"==typeof window.ClipboardJS){var e=document.createElement("button");document.body.appendChild(e);var r=new window.ClipboardJS(e,{text:function(){return t}});return e.click(),r.destroy(),void document.body.removeChild(e)}var n=document.createElement("textarea");n.value=t,document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)};const Aa=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),"post"===rankMath.objectType&&rankMath.postSettings.linkSuggestions&&(this.renderToWrapper(),i().fn.extend({insertLink:function(t,e){var r=this[0],n="";if(r.selectionStart||"0"===r.selectionStart){var a=r.selectionStart,i=r.selectionEnd,o=r.scrollTop;n='<a href="'+t+'">'+r.value.substring(a,i)+"</a>",a===i&&(n='<a href="'+t+'">'+e+"</a>"),r.value=r.value.substring(0,a)+n+r.value.substring(i,r.value.length),r.focus(),r.selectionStart=a+n.length,r.selectionEnd=a+n.length,r.scrollTop=o}else n='<a href="'+t+'">'+e+"</a>",r.value+=n,r.focus()}}))},(e=[{key:"renderToWrapper",value:function(){var t=document.getElementById("rank-math-link-suggestions-wrapper");if(t){var e=rankMath.postSettings,r=e.linkSuggestionsData,n=e.useFocusKeyword;!1!==r&&(this._root||(this._root=(0,s.createRoot)(t)),this._root.render(wp.element.createElement(Ta,{suggestions:r||[],useFocusKeyword:n,onCopy:ja,onInsert:function(t,e){if("object"===("undefined"==typeof tinymce?"undefined":Da(tinymce))&&null!==tinymce.activeEditor&&!0!==tinymce.activeEditor.isHidden()&&"content"===tinymce.activeEditor.id){var r=tinymce.activeEditor,n=i()(r.getBody()),a=r.selection.getContent()||"";if(n.find("a[data-mce-selected]").length){var o=r.selection.getStart(),u=r.dom.getParent(o,"a[href]");if(!u){var s=r.selection.getContent({format:"raw"});if(s&&-1!==s.indexOf("</a>")){var l=s.match(/href="([^">]+)"/);l&&l[1]&&(u=r.$('a[href="'+l[1]+'"]',o)[0])&&r.selection.select(u)}}u&&(r.dom.setAttribs(u,{href:t}),i()(u).text()!==a&&r.insertContent(a))}else a.length?r.insertContent('<a href="'+t+'">'+a+"</a>"):r.insertContent('<a href="'+t+'">'+e+"</a>")}else V()&&function(t,e){var r=(0,c.select)("core/block-editor"),n='<a href="'+t+'">'+e+"</a>",a=r.getSelectedBlock();if(a&&a.attributes&&"content"in a.attributes){var i=r.getSelectionStart(),o=r.getSelectionEnd(),u=function(e,r,a){if(null!==r&&null!==a&&r!==a){var i=Ea(e,r),o=Ea(e,a),u=e.substring(i,o);return e.substring(0,i)+'<a href="'+t+'">'+u+"</a>"+e.substring(o)}if(null!==r){var c=Ea(e,r);return e.substring(0,c)+n+e.substring(c)}return e+n}(a.attributes.content||"",i?i.offset:null,o?o.offset:null);(0,c.dispatch)("core/block-editor").updateBlock(a.clientId,{attributes:{content:u}})}else for(var s=r.getBlocks(),l=s.length-1;l>=0;l--)if("content"in(s[l].attributes||{})){(0,c.dispatch)("core/block-editor").updateBlock(s[l].clientId,{attributes:{content:(s[l].attributes.content||"")+n}});break}}(t,e)}})))}}}])&&Oa(t.prototype,e),r&&Oa(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function Ca(t){return Ca="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ca(t)}function Ma(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ua(n.key),n)}}function Ra(t,e,r){return e&&Ma(t.prototype,e),r&&Ma(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function Ua(t){var e=function(t,e){if("object"!=Ca(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Ca(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ca(e)?e:e+""}const Na=Ra(function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),"post"===rankMath.objectType&&!1!==rankMath.assessor.primaryTaxonomy&&i()("[data-primary-term]").each(function(){var t=i()(this),e=t.val(),r=t.data("primary-term"),n=i()("#"+r+"div"),a=i()("#"+r+"checklist"),o=a.find("li"),u=a.find('input[type="checkbox"]:checked');o.addClass("rank-math-primary-term-li"),o.find("input").each(function(){var t=i()(this);t.parent().append('<span class="rank-math-tooltip"><input class="rank-math-make-primary" value="'+t.val()+'" type="radio" name="rank_math_primary_'+r+'"><span>'+(0,p.__)("Make Term Primary","seo-by-rank-math")+"</span></span>")}),u.each(function(){var t=i()(this),r=t.closest("li");r.addClass("term-checked"),e===t.attr("value")&&(r.addClass("term-marked-primary"),r.find(">label .rank-math-make-primary").prop("checked",!0))}),n.on("click",'input[type="checkbox"]',function(){var e=i()(this).closest("li");if(e.toggleClass("term-checked"),1===a.find("li.term-checked").length||e.hasClass("term-marked-primary")&&!e.hasClass("term-checked")){var r=a.find("li.term-checked:first > label .rank-math-make-primary");0<r.length?r.trigger("click"):(o.removeClass("term-marked-primary"),o.find('input[type="radio"]').prop("checked",!1),t.val(""))}}),n.on("click",".rank-math-make-primary",function(){var e=i()(this),n=e.closest("li");o.removeClass("term-marked-primary"),n.addClass("term-marked-primary"),t.val(e.val()),wp.data.dispatch("rank-math").updatePrimaryTermID(e.val(),r)}),a.on("wpListAddEnd",function(){a.find("li:not(.rank-math-primary-term-li)").addClass("rank-math-primary-term-li term-checked").find("input").each(function(){var t=i()(this);t.parent().append('<span class="rank-math-tooltip"><input class="rank-math-make-primary" value="'+t.val()+'" type="radio" name="rank_math_primary_'+r+'"><span>'+(0,p.__)("Make Term Primary","seo-by-rank-math")+"</span></span>")})})})});function xa(t){return xa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xa(t)}function Fa(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ka(n.key),n)}}function Ka(t){var e=function(t,e){if("object"!=xa(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=xa(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==xa(e)?e:e+""}const La=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.image_src="",this.image_alt="",this.getFeaturedImage(),this.setImage(),this.removeImage(),V()&&this.gutenbergImage()},(e=[{key:"setImage",value:function(){var t=this;if(!(0,o.isUndefined)(wp.media)){var e=wp.media.featuredImage.frame();e.on("select",function(){var r=i()("#rank_math_post_thumbnail"),n=e.state().get("selection").first().toJSON();t.sizeWarning(n),1>r.length&&(r=i()('<img id="rank_math_post_thumbnail" />'),i()(".facebook-thumbnail",".rank-math-social-preview-image").before(r)),"large"in n.sizes?r.attr("src",n.sizes.large.url):r.attr("src",n.sizes.full.url),t.setFeaturedImage(n)})}}},{key:"removeImage",value:function(){var t=this;i()("#postimagediv").on("click","#remove-post-thumbnail",function(){i()("#rank_math_image_warning").remove(),i()("#rank_math_post_thumbnail").remove(),t.setFeaturedImage("")})}},{key:"gutenbergImage",value:function(){var t,e,r=this;wp.data.subscribe(function(){var n=wp.data.select("core/editor").getEditedPostAttribute("featured_media");r.isValidMediaId(n)&&(t=wp.data.select("core").getMedia(n),(0,o.isUndefined)(t)||t!==e&&(e=t,r.setFeaturedImage({url:t.guid.rendered,alt:t.alt_text})))})}},{key:"setFeaturedImage",value:function(t){var e={src:(0,o.get)(t,"url",""),alt:(0,o.get)(t,"alt","")};(0,u.doAction)("rank_math_updated_featured_image",e)}},{key:"sizeWarning",value:function(t){if(i()("#rank_math_image_warning").remove(),!(200<t.width&&200<t.height)){var e=i()("#postimagediv").find(".hndle");i()('<div id="rank_math_image_warning" class="notice notice-error notice-alt"><p>'+rankMath.featuredImageNotice+"</p></div>").insertAfter(e)}}},{key:"getFeaturedImage",value:function(){var t=i()("#postimagediv img");if(!t||t.length){var e={url:t[0].src,alt:t[0].alt};this.setFeaturedImage(e)}}},{key:"isValidMediaId",value:function(t){return"number"==typeof t&&0<t}}])&&Fa(t.prototype,e),r&&Fa(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();var Ba=(0,j.createSlotFill)("RankMathAfterEditor"),za=Ba.Fill,Ha=Ba.Slot,Ga=function(t){var e=t.children,r=t.className;return wp.element.createElement(za,null,wp.element.createElement(j.PanelRow,{className:r},e))};Ga.Slot=Ha;const Va=Ga;var Wa=(0,j.createSlotFill)("RankMathAdvancedTab"),$a=Wa.Fill,qa=Wa.Slot,Ja=function(t){var e=t.children,r=t.className;return wp.element.createElement($a,null,wp.element.createElement(j.PanelRow,{className:r},e))};Ja.Slot=qa;const Qa=Ja;var Xa=(0,j.createSlotFill)("RankMathAfterFocusKeyword"),Ya=Xa.Fill,Za=Xa.Slot,ti=function(t){var e=t.children,r=t.className;return wp.element.createElement(Ya,null,wp.element.createElement("div",{className:r},e))};ti.Slot=Za;const ei=ti;function ri(t){return ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ri(t)}function ni(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ai(n.key),n)}}function ai(t){var e=function(t,e){if("object"!=ri(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=ri(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ri(e)?e:e+""}var ii=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},e=[{key:"setup",value:function(){this.registerSlots=this.registerSlots.bind(this),(0,u.addAction)("rank_math_loaded","rank-math",this.registerSlots,0),this.resultManager=new l.ResultManager,this.assessor=new G(this.getCollector()),new X,this.registerComponents=this.registerComponents.bind(this),(0,u.addAction)("rank_math_loaded","rank-math",this.registerComponents,11)}},{key:"registerSlots",value:function(){this.RankMathAfterEditor=Va,this.RankMathAfterFocusKeyword=ei,this.RankMathAdvancedTab=Qa,this.slots={AfterEditor:Va,AfterFocusKeyword:ei,AdvancedTab:Qa}}},{key:"registerComponents",value:function(){this.components={},this.components.linkSuggestions=new Aa,this.components.primaryTerm=new Na,this.components.featuredImage=new La,rankMathAdmin.variableInserter(!1),setTimeout(function(){(0,s.createRoot)(document.getElementById("rank-math-metabox-wrapper")).render((0,s.createElement)((0,u.applyFilters)("rank_math_app",{})))},1e3)}},{key:"refresh",value:function(t){this.assessor.refresh(t)}},{key:"updatePermalink",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.assessor.dataCollector.handleSlugChange(t,e),(0,c.dispatch)("rank-math").updatePermalink(t)}},{key:"updatePermalinkSanitize",value:function(t){t=this.assessor.getResearch("slugify")(t),(0,c.dispatch)("rank-math").updatePermalink(t)}},{key:"getPrimaryKeyword",value:function(){return I(this.assessor.getPrimaryKeyword())}},{key:"getSelectedKeyword",value:function(){var t=this.assessor.getSelectedKeyword();return(0,o.isUndefined)(t)?"":I(t)}},{key:"getCollector",value:function(){return"post"===rankMath.objectType?V()?new ba:new Gn(this):"term"===rankMath.objectType?new Zn:"user"===rankMath.objectType?new ca:void 0}}],e&&ni(t.prototype,e),r&&ni(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();i()(function(){window.rankMathEditor=new ii,window.rankMathEditor.setup(),window.RankMathApp=new rt}),i()(window).on("load",function(){i().when(i().ready).then(function(){(0,u.doAction)("rank_math_loaded")})})}();PK     ’ŠU]ß®ÍÉ‚X  ‚X    assets/admin/js/common.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},dn:function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})}};const t=jQuery;var n=e.n(t);const a=wp.i18n;function r(e,t,a){return n().ajax({url:rankMath.ajaxurl,type:a||"POST",dataType:"json",data:n().extend(!0,{action:"rank_math_"+e,security:rankMath.security},t)})}function o(e,t,a,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var c=n()('<div class="notice notice-'+t+" "+o+' is-dismissible"><p>'+e+"</p></div>").hide();i||a.siblings(".notice").remove(),a.after(c),c.slideDown(),n()(document).trigger("wp-updates-notice-added"),n()("html,body").animate({scrollTop:c.offset().top-50},"slow"),r&&setTimeout(function(){c.fadeOut(function(){c.remove()})},r)}e.dn(r),e.dn(o);const i=lodash,c=wp.hooks;function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var s=a&&a.prototype instanceof c?a:c,l=Object.create(s.prototype);return p(l,"_invoke",function(n,a,r){var o,c,s,l=0,p=r||[],u=!1,d={p:0,n:0,v:e,a:h,f:h.bind(e,4),d:function(t,n){return o=t,c=0,s=e,d.n=n,i}};function h(n,a){for(c=n,s=a,t=0;!u&&l&&!r&&t<p.length;t++){var r,o=p[t],h=d.p,v=o[2];n>3?(r=v===a)&&(s=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=h&&((r=n<2&&h<o[1])?(c=0,d.v=a,d.n=o[1]):h<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,c=0))}if(r||n>1)return i;throw u=!0,a}return function(r,p,v){if(l>1)throw TypeError("Generator is already running");for(u&&1===p&&h(p,v),c=p,s=v;(t=c<2?e:s)||!u;){o||(c?c<3?(c>1&&(d.n=-1),h(c,s)):d.n=s:d.v=s);try{if(l=2,o){if(c||(r="next"),t=o[r]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(s=TypeError("The iterator does not provide a '"+r+"' method"),c=1);o=e}else if((t=(u=d.n<0)?s:n.call(a,d))!==i)break}catch(t){o=e,c=1,s=t}finally{l=1}}return{value:t,done:u}}}(n,r,o),!0),l}var i={};function c(){}function s(){}function u(){}t=Object.getPrototypeOf;var d=[][a]?t(t([][a]())):(p(t={},a,function(){return this}),t),h=u.prototype=c.prototype=Object.create(d);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,p(e,r,"GeneratorFunction")),e.prototype=Object.create(h),e}return s.prototype=u,p(h,"constructor",u),p(u,"constructor",s),s.displayName="GeneratorFunction",p(u,r,"GeneratorFunction"),p(h),p(h,r,"Generator"),p(h,a,function(){return this}),p(h,"toString",function(){return"[object Generator]"}),(l=function(){return{w:o,m:v}})()}function p(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}p=function(e,t,n,a){function o(t,n){p(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},p(e,t,n,a)}function u(e,t,n,a,r,o,i){try{var c=e[o](i),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(a,r)}function d(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,h(a.key),a)}}function h(e){var t=function(e,t){if("object"!=s(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=s(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==s(t)?t:t+""}var v,f=function(){return e=function e(){var t,n,a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,a="",(n=h(n="response"))in t?Object.defineProperty(t,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[n]=a},t=[{key:"checkAll",value:function(){var e=this,t=n()("#setting-panel-analytics .cmb2-id-check-all-services:not(.done), #cmb2-metabox-rank-math-wizard .cmb2-id-check-all-services:not(.done)");t.length>0&&"0"===t.val()&&(t.addClass("done"),r("google_check_all_services").done(function(t){e.response=t,e.fillSelect(),e.accordions.removeClass("locked")}))}},{key:"events",value:function(){var e=this;this.saveChanges=!1,this.accountSelect=n()(".site-analytics-account"),this.profileSelect=n()(".site-console-profile"),this.propertySelect=n()(".site-analytics-property"),this.viewSelect=n()(".site-analytics-view"),this.adsenseSelect=n()(".site-adsense-account"),this.accordions=n()(".rank-math-accordion"),this.countryConsole=n()("#site-console-country"),this.countryAnalytics=n()("#site-analytics-country"),this.testConnectionButton=n()(".rank-math-test-connection-google"),n()(".cmb2_select").on("select2:open",function(){document.querySelector(".select2-search__field").focus()}),this.accountSelect.on("change",function(){var t=parseInt(e.accountSelect.val());0!==t?e.fillPropertySelect(t):e.propertySelect.html('<option value="0">'+(0,a.__)("Select Property","seo-by-rank-math")+"</option>")}),this.profileSelect.on("change",function(){0!==parseInt(e.profileSelect.val())&&document.getElementById("enable-index-status").removeAttribute("disabled")}),n()([".rank-math-wizard-body--analytics .form-footer.rank-math-ui .button-primary",".rank-math_page_rank-math-options-general .form-footer.rank-math-ui .button-primary"].join(", ")).on("click",function(t){e.submitButtonHandler(t)}),this.testConnectionButton.on("click",function(t){t.preventDefault(),e.testConnections(t)}),this.propertySelect.on("change",function(){"create-ga4-property"!==e.propertySelect.val()?(e.response.type=(0,i.get)(e.response.accounts,[e.accountSelect.val(),"properties",e.propertySelect.val(),"type"],{}),"GA4"!==e.response.type&&(e.response.type="GA3",e.response.views=(0,i.get)(e.response.accounts,[e.accountSelect.val(),"properties",e.propertySelect.val(),"profiles"],{})),"GA4"===e.response.type?e.createNewDataStream():e.fillViewSelect()):e.createNewProperty()}),this.viewSelect.on("change",function(e){var t=n()(e.target).find(":selected");t.data("measurement-id")&&(n()("#rank-math-analytics-measurement-id").val(t.data("measurement-id")),n()("#rank-math-analytics-stream-name").val(t.text()))}),n()(".rank-math-disconnect-google").on("click",function(e){e.preventDefault(),confirm(rankMath.confirmDisconnect)&&r("disconnect_google").done(function(){window.location.reload()})})}},{key:"createNewProperty",value:function(){var e=this;confirm((0,a.__)("Are you sure, you want to create a new GA4 Property?","seo-by-rank-math"))?r("create_ga4_property",{accountID:this.accountSelect.val()},"post").done(function(t){if(t.error)return e.propertySelect.val(e.propertySelect.find("option:first").val()),void alert(t.error);e.propertySelect.append('<option value="'+t.id+'">'+t.name+"</option>"),e.propertySelect.val(t.id),e.createNewDataStream(),e.response.type="GA4"}):this.propertySelect.val(this.propertySelect.find("option:first").val())}},{key:"createNewDataStream",value:function(){var e=this;this.viewSelect.html(""),this.viewSelect.prop("disabled",!0),r("get_ga4_data_streams",{propertyID:this.propertySelect.val()},"post").done(function(t){t.error?console.error(t.error):(e.response.views=t.streams,e.fillViewSelect(),e.viewSelect.trigger("change"))})}},{key:"submitButtonHandler",value:(s=l().m(function e(t){var r,o,i,c,s,p;return l().w(function(e){for(;;)switch(e.n){case 0:if(r=n()(t.target),t.preventDefault(),!r.hasClass("disabled")){e.n=1;break}return e.a(2);case 1:if(n()("#setting-panel-analytics:visible").length&&!n()("#setting-panel-analytics .connect-wrap").length){e.n=2;break}return r.off("click").trigger("click"),e.a(2);case 2:return r.addClass("disabled").val((0,a.__)("Savingâ€¦","seo-by-rank-math")),e.n=3,this.saveConsole();case 3:return o=e.v,e.n=4,this.saveAnalytics();case 4:return i=e.v,e.n=5,this.saveAdsense();case 5:c=e.v,n()(".rank-math-accordion").find(".rank-math-notice").remove(),s="",p="",o.success?i.success?c.success||(s=n()(".rank-math-connect-adsense .rank-math-accordion-content"),p=c.error):(s=n()(".rank-math-connect-analytics .rank-math-accordion-content"),p=i.error):(s=n()(".rank-math-connect-search-console .rank-math-accordion-content"),p=o.error),o.success&&i.success&&c.success?r.off("click").trigger("click"):(s.append('<div class="rank-math-notice notice notice-error"><p>'+p+"</p></div>"),n()("html, body").animate({scrollTop:s.offset().top},2e3),r.removeClass("disabled").val((0,a.__)("Save Changes","seo-by-rank-math")));case 6:return e.a(2)}},e,this)}),p=function(){var e=this,t=arguments;return new Promise(function(n,a){var r=s.apply(e,t);function o(e){u(r,n,a,o,i,"next",e)}function i(e){u(r,n,a,o,i,"throw",e)}o(void 0)})},function(e){return p.apply(this,arguments)})},{key:"testConnections",value:function(e){e.preventDefault(),(0,c.applyFilters)("rank_math_test_connections",[{class:".rank-math-connect-search-console",canTest:rankMath.isConsoleConnected,action:"check_console_request"},{class:".rank-math-connect-analytics",canTest:rankMath.isAnalyticsConnected,action:"check_analytics_request"}],this).forEach(function(e){if(e.canTest){var t=n()(e.class),o=t.find(".rank-math-accordion-content"),i=t.find(".rank-math-connection-status-wrap");o.find(".rank-math-notice").remove(),i.html('<svg class="rank-math-spinner" viewBox="0 0 100 100" width="16" height="16" xmlns="http://www.w3.org/2000/svg" role="presentation" focusable="false"><circle cx="50" cy="50" r="50" vector-effect="non-scaling-stroke"></circle><path d="m 50 0 a 50 50 0 0 1 50 50" vector-effect="non-scaling-stroke"></path></svg>'),r(e.action,{},"post").done(function(e){e.success?i.html('<span class="rank-math-connection-status rank-math-connection-status-success" title="'+(0,a.__)("Connected","seo-by-rank-math")+'"></span>'):(i.html('<span class="rank-math-connection-status rank-math-connection-status-error" title="'+(0,a.__)("Some permissions are missing, please reconnect","seo-by-rank-math")+'"></span>'),o.append('<div class="rank-math-notice rank-math-notice--error"><p>'+e.error+"</p></div>"))})}})}},{key:"saveConsole",value:function(){if(0===parseInt(this.profileSelect.val()))return{success:!0};var e={profile:this.profileSelect.val(),country:this.countryConsole.val(),enableIndexStatus:n()("#enable-index-status").is(":checked")},t=n()("#console_caching_control");return t.length>0&&(e.days=t.val()),r("save_analytic_profile",e,"post").done(function(e){return e})}},{key:"saveAnalytics",value:function(){var e={accountID:this.accountSelect.val(),propertyID:this.propertySelect.val(),viewID:this.viewSelect.val(),country:this.countryAnalytics.val(),installCode:n()("#install-code").is(":checked"),anonymizeIP:n()("#anonymize-ip").is(":checked"),localGAJS:n()("#local-ga-js").is(":checked"),excludeLoggedin:n()("#exclude-loggedin").is(":checked"),measurementID:n()("#rank-math-analytics-measurement-id").val(),streamName:n()("#rank-math-analytics-stream-name").val()};if(0===parseInt(e.accountID)||0===parseInt(e.propertyID))return{success:!0};var t=n()("#console_caching_control");return t.length>0&&(e.days=t.val()),r("save_analytic_options",e,"post").done(function(e){return e})}},{key:"saveAdsense",value:function(){var e={accountID:this.adsenseSelect.val()};return e.accountID?(0,c.applyFilters)("rank_math_save_adsense_account",e):{success:!0}}},{key:"fillSelect",value:function(){var e=this,t=this.response,n=t.inSearchConsole,a=t.isVerified;this.fillProfileSelect(),this.fillAccountSelect(),(0,c.doAction)("rank_math_fill_select",this),n||r("add_site_console").done(function(t){e.response.sites=t.sites,e.fillProfileSelect()}),n&&!a&&r("verify_site_console"),this.saveChanges=!1}},{key:"fillAccountSelect",value:function(){var e=this,t=this.response.accounts;(0,i.map)(t,function(t,n){e.accountSelect.append('<option value="'+n+'">'+t.name+" ("+n+")</option>")}),this.accountSelect.data("selected")?this.accountSelect.val(this.accountSelect.data("selected")):(this.accountSelect.prop("disabled",!1),this.countryAnalytics.prop("disabled",!1),this.accountSelect.select2(),this.countryAnalytics.select2()),this.accountSelect.trigger("change")}},{key:"fillPropertySelect",value:function(e){var t=this,n=this.response,r=n.accounts,o=n.homeUrl,c=((null==r?void 0:r[e])||{}).properties;this.propertySelect.html('<option value="0">'+(0,a.__)("Select Property","seo-by-rank-math")+"</option>"),this.propertySelect.append('<option value="create-ga4-property">'+(0,a.__)("Create new GA4 Property","seo-by-rank-math")+"</option>"),(0,i.map)(c,function(e){var n=e.url===o?' selected="selected"':"";"GA4"===e.type&&t.propertySelect.append("<option ".concat(n,' value="').concat(e.id,'">').concat(e.name," (").concat(e.id,")</option>"))}),this.propertySelect.data("selected")?this.propertySelect.val(this.propertySelect.data("selected")):(this.propertySelect.prop("disabled",!1),this.propertySelect.select2()),this.propertySelect.trigger("change")}},{key:"fillProfileSelect",value:function(){var e=this,t=this.response,n=t.sites,a=t.homeUrl,r=!1;(0,i.map)(n,function(t,n){r=n===a?' selected="selected"':"",e.profileSelect.append("<option"+r+' value="'+n+'">'+t+"</option>")}),this.profileSelect.data("selected")&&this.profileSelect.closest(".rank-math-accordion").addClass("connected"),this.profileSelect.prop("disabled",!1),this.countryConsole.prop("disabled",!1),this.profileSelect.select2(),this.countryConsole.select2()}},{key:"fillViewSelect",value:function(){var e=this,t=this.response,n=t.views,r="GA4"===t.type?(0,a.__)("Data Stream","seo-by-rank-math"):(0,a.__)("View","seo-by-rank-math");this.viewSelect.prev("label").text(r),(0,i.map)(n,function(t){var n=(0,i.isUndefined)(t.measurementId)?"":t.measurementId;e.viewSelect.append('<option value="'+t.id+'" data-measurement-id="'+n+'">'+t.name+"</option>")}),this.viewSelect.data("selected")&&this.viewSelect.val(this.viewSelect.data("selected")),this.viewSelect.prop("disabled",!1),this.viewSelect.select2()}}],t&&d(e.prototype,t),o&&d(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,o,s,p}(),m=new f;function y(e){var t=e||".rank-math-box-tabs";n()(t).children().on("click",function(e){e.preventDefault();var t=n()(this),a=t.attr("href").substr(1);t.addClass("active-tab").siblings().removeClass("active-tab"),n()("#"+a).addClass("active-tab").siblings().removeClass("active-tab")})}e.dn(y),v=n(),String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,n){return void 0!==e[n]?e[n]:t})}),String.prototype.trimRight=function(e){return void 0===e&&(e="s"),this.replace(new RegExp("["+e+"]+$"),"")},v(function(){window.rankMathAdmin={init:function(){this.misc(),this.tabs(),this.dependencyManager(),-1!==Object.values(window.rankMath.modules).indexOf("analytics")&&(m.events(),m.checkAll())},misc:function(){void 0!==n().fn.select2&&v("[data-s2]").select2(),v(".cmb-group-text-only,.cmb-group-fix-me").each(function(){var e=v(this),t=e.find(".cmb-repeatable-group"),n=t.find("> .cmb-row:eq(0) > .cmb-th");e.prepend('<div class="cmb-th"><label>'+n.find("h2").text()+"</label></div>"),t.find(".cmb-add-row").append('<span class="cmb2-metabox-description">'+n.find("p").text()+"</span>"),n.parent().remove()}),v(".rank-math-collapsible-trigger").on("click",function(e){e.preventDefault();var t=v(this),n=v("#"+t.data("target"));t.toggleClass("open"),n.toggleClass("open")});var e=v("#rank_math_rich_snippet"),t=e.find("option[value=review]"),a=e.val();t&&(t.prop("disabled",!0),"review"===a&&v(".cmb2-id-rank-math-review-schema-notice").removeClass("hidden"),e.on("change",function(){null!==e.val()&&"review"!==e.val()&&v(".cmb2-id-rank-math-review-schema-notice").addClass("hidden")}))},searchConsole1:function(){var e=v(".cmb2-id-console-authorization-code"),t=v("#console_authorization_code"),n=v("#gsc-dp-info"),i=v("#console_profile"),c=i.parent().find(".rank-math-refresh"),s=t.parent(),l=v("body").hasClass("rank-math-wizard-body--analytics")?v("> p:first-of-type",".cmb-form"):v("h1",".rank-math-wrap-settings");s.on("click",".rank-math-deauthorize-account",function(n){n.preventDefault();var s=v(this);if(s.prop("disabled",!0),t.data("authorized"))return r("search_console_deauthentication").always(function(){s.prop("disabled",!1)}).done(function(){t.val(""),t.show(),t.data("authorized",!1),e.removeClass("authorized").addClass("unauthorized"),s.html((0,a.__)("Authorize","seo-by-rank-math")),i.prop("disabled",!0),c.prop("disabled",!0)}),!1;t.addClass("input-loading"),r("search_console_authentication",{code:t.val()}).always(function(){s.prop("disabled",!1),t.removeClass("input-loading")}).done(function(n){n&&!n.success&&o(n.error,"error",l),n&&n.success&&(t.hide(),t.data("authorized",!0),s.html("De-authorize Account"),c.trigger("click"),i.removeAttr("disabled"),e.removeClass("unauthorized authorizing").addClass("authorized"))})}),i.on("change",function(){null!==i.val()&&0===i.val().indexOf("sc-domain:")?n.removeClass("hidden"):n.addClass("hidden")}).change(),c.on("click",function(e){e.preventDefault(),c.prop("disabled",!0),i.addClass("input-loading"),r("search_console_get_profiles").always(function(){c.prop("disabled",!1),v(".console-cache-update-manually").prop("disabled",!1),i.removeClass("input-loading")}).done(function(e){if(e&&!e.success&&o(e.error,"error",l),e&&e.success){var t=e.selected||i.val();i.html(""),v.each(e.profiles,function(e,t){i.append('<option value="'+e+'">'+t+"</option>")}),i.val(t||Object.keys(e.profiles)[0]),c.removeClass("hidden")}})})},dependencyManager:function(){var e=this,t=v(".cmb-form, .rank-math-metabox-wrap");v(".cmb-repeat-group-wrap",t).each(function(){var e=v(this),t=e.next(".rank-math-cmb-dependency.hidden");t.length&&e.find("> .cmb-td").append(t)}),v(".rank-math-cmb-dependency",t).each(function(){e.loopDependencies(v(this))}),v("input, select",t).on("change",function(){var t=v(this).attr("name");v('span[data-field="'+t+'"]').each(function(){e.loopDependencies(v(this).closest(".rank-math-cmb-dependency"))})})},checkDependency:function(e,t,n){return"string"==typeof t&&t.includes(",")&&"="===n?t.includes(e):"string"==typeof t&&t.includes(",")&&"!="===n?!t.includes(e):"="===n&&e===t||"=="===n&&e===t||">="===n&&e>=t||"<="===n&&e<=t||">"===n&&e>t||"<"===n&&e<t||"!="===n&&e!==t},loopDependencies:function(e){var t=this,n=e.data("relation"),a=null;e.find("span").each(function(){var e=v(this),r=v("[name='"+e.data("field")+"']"),o=r.val();r.is(":radio")&&(o=r.filter(":checked").val()),r.is(":checkbox")&&(o=r.filter(":checked").val());var i=t.checkDependency(o,e.data("value"),e.data("comparison"));if("or"===n&&i)return a=!0,!1;"and"===n&&(a=(null===a||a)&&i)});var r=e.closest(".rank-math-cmb-group");r.length||(r=e.closest(".cmb-row")),a?r.slideDown(300):r.hide()},tabs:function(){y();var e=v(".rank-math-tabs-navigation");e.length&&e.each(function(){var t=v(this),n=t.closest(".rank-math-tabs"),a=v(">a",t),r=v(">.rank-math-tabs-content>.rank-math-tab",n),o=t.data("active-class")||"active",i=t.hasClass("before-header");a.on("click",function(){var e=v(this),t=v(e.attr("href"));if(a.removeClass(o),r.hide(),i){var c=t.find(".cmb-type-title.tab-header").clone();c.addClass("before-header-title"),v(".before-header-title").remove(),n.prepend(c)}return e.addClass(o),t.show(),!1});var c=window.location.hash||window.localStorage.getItem(n.attr("id"));null===c?a.eq(0).trigger("click"):(c=v('a[href="'+c+'"]',t)).length?c.trigger("click"):a.eq(0).trigger("click"),e.next().css("min-height",t.outerHeight())})},variableInserter:function(e){var t=v("input[type=text], textarea",".rank-math-supports-variables");if(e=void 0===e||e,t.length){var n,r=this,o=v("body");if(t.attr("autocomplete","off"),t.wrap('<div class="rank-math-variables-wrap"/>'),v(".rank-math-variables-wrap").append('<a href="#" class="rank-math-variables-button button button-secondary"><span class="dashicons dashicons-arrow-down-alt2"></span></a>'),e){var i=rankMath.capitalizeTitle?"capitalize":"";v(".rank-math-variables-wrap").after('<div class="rank-math-variables-preview '+i+'" data-title="'+(0,a.__)("Example","seo-by-rank-math")+'"/>'),t.on("rank_math_variable_change input",function(e){var t=v(e.currentTarget),n=r.replaceVariables(t.val());60<n.length&&0<=t.attr("name").indexOf("title")?n=n.substring(0,60)+"...":160<n.length&&0<=t.attr("name").indexOf("description")&&(n=n.substring(0,160)+"...");var a=v("<textarea/>").html(n).val();t.parent().next(".rank-math-variables-preview").text(a)}),t.trigger("rank_math_variable_change")}var c=v("<ul/>"),s=v('<div class="rank-math-variables-dropdown"><input type="text" placeholder="'+(0,a.__)("Search &hellip;","seo-by-rank-math")+'"></div>');v.each(rankMath.variables,function(){c.append('<li data-var="%'+this.variable+'%" data-example="'+this.example+'"><strong>'+this.name+"</strong><span>"+this.description+"</span></li>")}),s.append(c),v(".rank-math-variables-wrap:eq(0)").append(s);var l=v(".rank-math-variables-button, .rank-math-variables-button *, .rank-math-variables-dropdown, .rank-math-variables-dropdown *");o.on("click",function(e){v(e.target).is(l)||h()});var p=s.find("input"),u=s.find("li");o.on("click",".rank-math-variables-button",function(e){e.preventDefault();var t=v(this);t.after(s),u.show(),void 0!==(n=t.prev().data("exclude-variables"))&&(n=n.split(","),d()),s.show(),p.val("").focus()}),s.on("click","li",function(e){e.preventDefault();var t=v(this),n=t.closest(".rank-math-variables-wrap").find("input,textarea");n.val(v.trim(n.val())+" "+t.data("var")),n.trigger("rank_math_variable_change").trigger("input"),h()}),s.on("keyup","input",function(e){e.preventDefault();var t=v(this).val().toLowerCase();if(2>t.length)return u.show(),void d();u.hide().each(function(){var e=v(this);-1!==e.text().toLowerCase().indexOf(t)&&e.show()}),d()})}function d(){void 0!==n&&n.forEach(function(e){s.find('[data-var="%'+e+'%"]').hide()})}function h(){n=void 0,s.hide()}},replaceVariables:function(e){return v.each(rankMath.variables,function(t){if(!this.example)return!0;var n=new RegExp("\\([a-z]+\\)","g");t=t.replace(n,"\\(.*?\\)"),e=e.replace(new RegExp("%+"+t+"%+","g"),this.example)}),e}},window.rankMathAdmin.init()})}();PK     ’ŠU]ú´e¨Ca Ca   assets/admin/js/components.jsnu „[µü¤        !function(){var t,e,n={8809:function(t,e,n){"use strict";function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[t]||"";if(!r)return"#";if(!e)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(e),utm_campaign:"WP"},a=r,i="",l=r.indexOf("#");-1!==l&&(a=r.substring(0,l),i=r.substring(l));var c=Object.keys(o).map(function(t){return"".concat(t,"=").concat(o[t])}).join("&"),s=a.includes("?")&&!a.endsWith("?")?"&":"?";return a+s+c+i+n}n.d(e,{A:function(){return r}}),n.dn(r)},5979:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-button.components-button{display:inline-flex !important;height:auto;min-height:30px;padding:0 20px;border:1px solid #7f868d;border-radius:3px;color:#6b7278;background:#f8f9fa;font-size:14px;line-height:38px;vertical-align:top;transition:.05s ease-in-out}.rank-math-button.components-button:active:not(:disabled),.rank-math-button.components-button.button-secondary:active:not(:disabled),.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled){border-color:#8c8f94;box-shadow:none;background:#f6f7f7}.rank-math-button.components-button:focus:not(:disabled),.rank-math-button.components-button:hover:not(:disabled),.rank-math-button.components-button.button-secondary:hover:not(:disabled),.rank-math-button.components-button.button-secondary:focus:not(:disabled),.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled),.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus:not(:disabled){border-color:#069de3;color:#069de3;background:#f8f9fa}.rank-math-button.components-button:focus:not(:disabled){box-shadow:0 0 0 1px #069de3;outline-width:2px;outline-offset:0}.rank-math-button.components-button:disabled{opacity:1;pointer-events:none}.rank-math-button.components-button.has-icon i,.rank-math-button.components-button.has-icon svg,.rank-math-button.components-button.has-icon .dashicons{margin:0 !important}.rank-math-button.components-button.has-icon i,.rank-math-button.components-button.has-icon .dashicons{font-size:20px !important}.rank-math-button.components-button.has-icon .dashicons{display:inline-flex;justify-content:center;align-items:center;width:20px !important;height:20px !important}.rank-math-button.components-button.has-icon svg{width:20px;height:20px}.rank-math-button.components-button.has-icon svg path{fill:currentColor;fill-opacity:1}.rank-math-button.components-button.has-icon.has-text{gap:5px}.rank-math-button.components-button.is-small{min-height:26px;padding:0 8px;font-size:11px;line-height:2.18}.rank-math-button.components-button.is-small.has-icon.has-text{gap:5px}.rank-math-button.components-button.is-small.has-icon.has-text i,.rank-math-button.components-button.is-small.has-icon.has-text svg,.rank-math-button.components-button.is-small.has-icon.has-text .dashicons{margin:0 !important}.rank-math-button.components-button.is-small.has-icon.has-text i,.rank-math-button.components-button.is-small.has-icon.has-text .dashicons{font-size:13px !important}.rank-math-button.components-button.is-small.has-icon.has-text .dashicons{display:inline-flex;justify-content:center;align-items:center;width:13px !important;height:13px !important}.rank-math-button.components-button.is-small.has-icon.has-text svg{width:13px;height:13px}.rank-math-button.components-button.is-small.has-icon.has-text svg path{fill:currentColor;fill-opacity:1}.rank-math-button.components-button.is-large{min-height:32px;padding:0 12px;line-height:2.30769231}.rank-math-button.components-button.is-xlarge{height:46px;font-size:16px;line-height:44px}.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){border-color:#ee6a5e;box-shadow:none;color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled),.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus:not(:disabled){box-shadow:0 0 0 1px #ee6a5e}.rank-math-button.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:focus):not(:disabled){color:#ee6a5e}.rank-math-button.components-button.button-animate,.rank-math-button.components-button.button-primary{border-color:#069de3;color:#fff;background:#069de3}.rank-math-button.components-button.button-animate:hover:not(:disabled),.rank-math-button.components-button.button-primary:hover:not(:disabled){color:#fff}.rank-math-button.components-button.button-animate:active:not(:disabled),.rank-math-button.components-button.button-primary:active:not(:disabled){border-color:#135e96;background:#135e96}.rank-math-button.components-button.button-animate:hover:not(:disabled),.rank-math-button.components-button.button-animate:focus:not(:disabled),.rank-math-button.components-button.button-primary:hover:not(:disabled),.rank-math-button.components-button.button-primary:focus:not(:disabled){border-color:#08a7f1;background:#08a7f1}.rank-math-button.components-button.button-animate:focus:not(:disabled),.rank-math-button.components-button.button-primary:focus:not(:disabled){color:#fff;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-button.components-button.button-animate:disabled,.rank-math-button.components-button.button-primary:disabled{border-color:#069de3 !important;color:#9fdffc !important;background:#069de3 !important}.rank-math-button.components-button.button-primary-outline{border-color:#2271b1;color:#2271b1;background:#f6f7f7}.rank-math-button.components-button.button-primary-outline:hover:not(:disabled){border-color:#0a4b78;background:#f0f0f1}.rank-math-button.components-button.button-primary-outline:active:not(:disabled){border-color:#8c8f94}.rank-math-button.components-button.button-primary-outline:disabled{border-color:#2271b1 !important;color:#2271b1 !important;background:#f6f7f7 !important}.rank-math-button.components-button.button-primary-outline:hover:not(:disabled),.rank-math-button.components-button.button-primary-outline:focus:not(:disabled){color:#0a4b78}.rank-math-button.components-button.button-primary-outline:focus:not(:disabled){border-color:#3582c4;box-shadow:0 0 0 1px #3582c4;color:#0a4b78;background:#f6f7f7}.rank-math-button.components-button.button-primary-outline.is-destructive{color:#d63638}.rank-math-button.components-button.button-primary-outline.is-destructive:hover:not(:focus){box-shadow:none}.rank-math-button.components-button.button-primary-outline.is-destructive:focus:not(:disabled){background:#f6f7f7}.rank-math-button.components-button.button-animate:disabled,.rank-math-button.components-button.button-secondary:disabled{color:#a7aaad !important;background-color:#f6f7f7 !important;border-color:#dcdcde !important}.rank-math-button.components-button.button-secondary,.rank-math-button.components-button.button-secondary:active:not(:focus):not(:disabled){color:#6b7278}.rank-math-button.components-button.button-secondary{border-color:#7f868d;box-shadow:none;background:#f8f9fa}.rank-math-button.components-button.button-secondary:hover:not(:disabled),.rank-math-button.components-button.button-secondary:active:not(:disabled){box-shadow:none}.rank-math-button.components-button.button-secondary:focus:not(:disabled){box-shadow:0 0 0 1px #069de3}.rank-math-button.components-button.button-link{height:auto;min-height:0;padding:0;border:0;border-radius:0;color:#2271b1;background:none;line-height:1.3;transition:.05s ease-in-out}.rank-math-button.components-button.button-link:hover:not(:disabled),.rank-math-button.components-button.button-link:active:not(:disabled){color:#135e96;background:none}.rank-math-button.components-button.button-link:focus:not(:disabled){box-shadow:0 0 0 1px #4f94d4,0 0 2px 1px rgba(79,148,212,.8);outline-width:1px;color:#043959}.rank-math-button.components-button.button-green,.rank-math-button.components-button.button-green:focus:not(:disabled){color:#fff}.rank-math-button.components-button.button-green{display:inline-block;width:auto;max-width:100%;padding:0 2rem;margin:0 auto;border-color:#10ac84;background:#10ac84;font-weight:500}.rank-math-button.components-button.button-green:active:not(:disabled){color:#1e1e1e}.rank-math-button.components-button.button-green:hover:not(:disabled),.rank-math-button.components-button.button-green:focus:not(:disabled){border-color:#0f9e79;color:#fff;background:#0f9e79}.rank-math-button.components-button.button-green:focus:not(:disabled){box-shadow:0 0 0 1px #fff,0 0 0 3px #0f9e79}.rank-math-button.components-button.button-remove-group,.rank-math-button.components-button.button-remove-group:active{color:#a00}.rank-math-button.components-button.button-remove-group{padding:0 10px;border:0;box-shadow:none;background:rgba(0,0,0,0)}.rank-math-button.components-button.button-remove-group:focus:not(:disabled),.rank-math-button.components-button.button-remove-group:hover:not(:disabled){box-shadow:0 0 0 1px #dc3232}.rank-math-button.components-button.button-animate{gap:8px;position:relative;transform:perspective(1px) translateZ(0);height:auto;min-height:30px;padding:0 40px;border-radius:82px;font-size:24px;line-height:82px;text-align:center}.rank-math-button.components-button.button-animate:disabled{opacity:1}.rank-math-button.components-button.button-animate:not(:disabled)::before{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;content:"";border:#bcdbea solid 6px;border-radius:55px;animation:ripple-out 1s linear infinite}.rank-math-button.components-button.button-start-new-chat{width:16.5rem;height:42px;line-height:15px;font-weight:500}.rank-math-button.components-button.button-start-new-chat.has-icon.has-text{justify-content:center;gap:12px;padding-left:16px;padding-right:16px}.rank-math-button.components-button.button-start-new-chat.has-icon.has-text i{font-size:14px}@media screen and (max-width: 782px){.rank-math-button.components-button.is-small,.rank-math-button.components-button.is-large{min-height:40px;padding:0 14px;margin-bottom:4px;font-size:14px;line-height:2.71428571;vertical-align:middle}.rank-math-button.components-button.button-animate{font-size:15px;padding:0 20px}}@keyframes ripple-out{100%{top:-20px;right:-20px;bottom:-20px;left:-20px;opacity:0}}',""]);const l=i},5942:function(t,e,n){"use strict";n.d(e,{A:function(){return p}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a),l=n(4417),c=n.n(l),s=new URL(n(2907),n.b),u=i()(o()),m=c()(s);u.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-checkbox-control .components-base-control__field{margin:0}.rank-math-checkbox-control .components-base-control__field .components-flex{align-items:center}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container{width:auto;height:auto;margin-right:4px;aspect-ratio:auto}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__indeterminate{display:none}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__checked{display:none}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input{display:inline-block;width:1rem;min-width:1rem;height:1rem;padding:0 !important;margin:0 5px 0 0;border:1px solid #8c8f94;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);outline:0;color:#50575e;background:#fff;line-height:0;text-align:center;vertical-align:-3px;clear:none;transition:.05s border-color ease-in-out}@media screen and (max-width: 782px){.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input{width:1.5625rem;height:1.5625rem;max-width:1.5625rem}}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);opacity:.7;background:hsla(0,0%,100%,.5);pointer-events:none}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:disabled+label{pointer-events:none}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:focus,.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:hover:not(:disabled){box-shadow:0 0 0 1px #2271b1}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:focus{border-color:#2271b1;outline:2px solid rgba(0,0,0,0)}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:checked::before{float:left;content:url("+m+');width:1.3125rem;height:1.3125rem;margin:-0.1875rem 0 0 -0.25rem}@media screen and (max-width: 782px){.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container .components-checkbox-control__input:checked::before{width:1.875rem;height:1.875rem;margin-left:-0.3125rem;margin-right:-0.3125rem}}.rank-math-checkbox-control .components-base-control__field .components-checkbox-control__label{color:#242628;font-size:14px;line-height:16px;vertical-align:middle;cursor:pointer}.rank-math-checkbox-control.is-disabled .components-base-control__field label{pointer-events:none}.rank-math-checkbox-control.metabox.is-indeterminate{display:inline-block;width:49%;margin:1px 0 5px 0}.rank-math-checkbox-control.metabox .components-base-control__field .components-checkbox-control__input:hover:not(:focus){box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.rank-math-checkbox-control.metabox .components-base-control__field .components-checkbox-control__input:checked{border-color:#069de3;box-shadow:none;background:#069de3}.rank-math-checkbox-control.metabox .components-base-control__field .components-checkbox-control__input:checked:hover{box-shadow:none}.rank-math-checkbox-control.metabox .components-base-control__field .components-checkbox-control__input:checked::before{content:"ï…‡";color:#fff;font-family:"dashicons";font-size:20px;line-height:20px}@media screen and (max-width: 782px){.rank-math-checkbox-control.metabox .components-base-control__field .components-checkbox-control__input:checked::before{width:1.875rem;height:1.875rem;margin:2px -0.3125rem;font-size:30px}}',""]);const p=u},4977:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.field-big-labels .rank-math-checkbox-list{padding:0;margin:0}.field-big-labels .rank-math-checkbox-list::before{display:table;content:""}.field-big-labels .rank-math-checkbox-list li{float:left;padding:0 8px;margin:0 0 15px;width:50%;box-sizing:border-box}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control{width:100% !important;margin:0 !important}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control .components-base-control__field{position:relative}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control .components-base-control__field .components-checkbox-control__label{display:block;width:100%;padding:10px 12px 10px 38px;border:1px solid #c3c4c7;border-radius:3px;background:#f8f9fa;cursor:pointer}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control .components-base-control__field .components-checkbox-control__label:hover{border-color:#7f868d}@media screen and (max-width: 782px){.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control .components-base-control__field .components-checkbox-control__label{padding-left:50px}}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control .components-base-control__field .components-checkbox-control__input-container{position:absolute;top:50%;left:13px;transform:translateY(-50%);width:fit-content;height:fit-content}.field-big-labels .rank-math-checkbox-list li .rank-math-checkbox-control.is-disabled .components-checkbox-control__label{opacity:.7}',""]);const l=i},1412:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-radio-control .components-radio-control__input[type=radio]{display:inline-block;width:1rem;min-width:1rem;height:1rem;padding:0 !important;margin:0 5px 0 0;border:1px solid #8c8f94;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);outline:0;color:#50575e;background:#fff;line-height:0;text-align:center;vertical-align:-3px;clear:none;transition:.05s border-color ease-in-out}@media screen and (max-width: 782px){.rank-math-radio-control .components-radio-control__input[type=radio]{width:1.5625rem;height:1.5625rem;max-width:1.5625rem}}.rank-math-radio-control .components-radio-control__input[type=radio]{margin-right:9px;border-radius:50%;line-height:.71428571}.rank-math-radio-control .components-radio-control__input[type=radio]:checked::before{position:unset;transform:none;width:.5rem;height:.5rem;margin:.1875rem;border:none;background-color:#3582c4}.rank-math-radio-control .components-radio-control__input[type=radio]:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);opacity:.7;background:hsla(0,0%,100%,.5);pointer-events:none}.rank-math-radio-control .components-radio-control__input[type=radio]:disabled+label{pointer-events:none}.rank-math-radio-control label{color:#242628;font-size:14px;line-height:16px;vertical-align:middle;cursor:pointer}.rank-math-radio-control.metabox .components-radio-control__input[type=radio],.rank-math-radio-control.metabox .components-radio-control__input[type=radio]:disabled{border-color:#7f868d;box-shadow:0 0 0 1px #7f868d}.rank-math-radio-control.metabox .components-radio-control__input[type=radio]:checked{border-color:#069de3;box-shadow:0 0 0 1px #069de3}.rank-math-radio-control.metabox .components-radio-control__input[type=radio]:checked::before{background:#069de3}@media screen and (max-width: 782px){.rank-math-radio-control .components-radio-control__input[type=radio]:checked::before{transform:translate(5px, 5px)}}",""]);const l=i},3401:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-toggle-control .components-base-control__field .components-flex{gap:8px}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle{height:unset;margin-right:0}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:none;outline:none}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__input:focus+.components-form-toggle__track:hover:not(:disabled),.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__input:focus+.components-form-toggle__track:focus:not(:disabled),.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__input:focus+.components-form-toggle__track:active:not(:disabled){box-shadow:none;outline:none}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__track{width:50px;height:24px;border:2px solid #6c7781;border-radius:34px}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__thumb{top:50%;left:5px;transform:translateY(-50%);width:14px;height:14px;border:none;background-color:#6c7781}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle::after{content:"";position:absolute;top:50%;right:6px;transform:translateY(-50%);width:8px;height:8px;border:3px solid #6c7781;border-radius:50%;box-sizing:border-box}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-checked .components-form-toggle__track{border-color:#069de3;background-color:#069de3}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-checked .components-form-toggle__thumb{right:5px;left:auto;background-color:#fff}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-checked::after{right:auto;left:11px;width:3px;height:8px;border:none;border-radius:1px;background:#fff}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled{opacity:1;pointer-events:none}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled.is-checked::after{background:#b5bfc9}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled .components-form-toggle__track{border-color:#b5bfc9;background:rgba(0,0,0,0)}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled .components-form-toggle__thumb{background:#b5bfc9}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled::after{border-color:#b5bfc9}.rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle.is-disabled+label{pointer-events:none}.rank-math-toggle-control .components-base-control__field .components-flex .components-toggle-control__label{color:#242628;font-size:14px;line-height:16px;vertical-align:middle;cursor:pointer}.rank-math-toggle-control.hide-label .components-toggle-control__label{display:none}body.rtl .rank-math-toggle-control .components-base-control__field .components-flex .components-form-toggle__thumb{right:auto}',""]);const l=i},2265:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.field-repeatable-grouping{display:flex;flex-flow:row wrap;margin-bottom:10px;line-height:1.3}.field-repeatable-grouping>.group-item{flex:0 0 41%;display:inline-block;width:calc(43% - 10px)}.field-repeatable-grouping>.group-item~.group-item:not(.group-item-checkbox){margin-left:10px}.field-repeatable-grouping>.group-item.group-item-checkbox{margin-left:0;margin-top:10px;order:4;-webkit-box-ordinal-group:5}.field-repeatable-grouping>.group-item.group-item-checkbox .components-checkbox-control__label{color:#7f868d;letter-spacing:.01em;line-height:1.3}.field-repeatable-grouping .button-remove-group{height:fit-content;margin-left:10px}.field-repeatable-grouping.three-columns{display:block;padding-bottom:3.2rem;border-bottom:1px solid #dadfe4}.field-repeatable-grouping.three-columns>.group-item:nth-child(3){flex:1;clear:both;margin:10px 0;width:100%}.field-repeatable-grouping.three-columns .button-remove-group{float:right}.field-repeatable-grouping.image-overlay{display:block;padding:20px;border:1px solid #dadfe4}.field-repeatable-grouping.image-overlay>.group-item{width:calc(43% - 12px)}.rank-math-group-field{margin-bottom:5px}",""]);const l=i},9917:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-date-picker{display:inline-block;position:relative}.rank-math-date-picker .rank-math-text-control.components-base-control.regular-text{position:relative;width:120px}.rank-math-date-picker .components-datetime__date{position:absolute;left:2px;border:1px solid #dfdfdf;box-shadow:0 3px 6px rgba(0,0,0,.075);background:#fff;opacity:0;z-index:-1;transition:all .2s ease-in-out}.rank-math-date-picker .components-datetime__date:focus-within{opacity:1;z-index:1}.rank-math-date-picker .components-datetime__date>.components-flex{margin-bottom:0;background:#00a0d2}.rank-math-date-picker .components-datetime__date>.components-flex h3,.rank-math-date-picker .components-datetime__date>.components-flex button{color:#fff}.rank-math-date-picker .components-datetime__date>.components-flex h3{font-size:14px}.rank-math-date-picker .components-datetime__date>.components-flex button{box-shadow:none;outline:none}.rank-math-date-picker .components-datetime__date>.components-flex button:hover{opacity:.7}.rank-math-date-picker .components-datetime__date>.css-1srrseb{justify-items:inherit;gap:0;position:relative}.rank-math-date-picker .components-datetime__date>.css-1srrseb>div{padding:10px;color:#fff;background:#32373c;line-height:1.4em;z-index:20}.rank-math-date-picker .components-datetime__date>.css-1srrseb button{width:100%;height:100%;border-radius:0;box-shadow:none;padding:5px 10px;border-top:1px solid #f4f4f4;border-right:1px solid #f4f4f4;color:#444;line-height:1.4em;z-index:20}.rank-math-date-picker .components-datetime__date>.css-1srrseb button:hover:not(:disabled),.rank-math-date-picker .components-datetime__date>.css-1srrseb button:focus:not(:disabled),.rank-math-date-picker .components-datetime__date>.css-1srrseb button[aria-label*=Selected]:not(:disabled){color:#fff;background:#0073aa}.rank-math-date-picker .components-datetime__date>.css-1srrseb button:disabled,.rank-math-date-picker .components-datetime__date>.css-1srrseb button[aria-label*=Selected]:disabled{color:rgba(68,68,68,.5);opacity:1}.rank-math-date-picker .components-datetime__date>.css-1srrseb button[aria-label*=Selected]:disabled{background:#f0f0c0}.rank-math-date-picker .components-datetime__date>.css-1srrseb button:first-of-type{border-left:1px solid #f4f4f4}.rank-math-date-picker .components-datetime__date>.css-1srrseb::after,.rank-math-date-picker .components-datetime__date>.css-1srrseb::before{content:"";display:block;position:absolute;top:38px;bottom:0;background:#f4f4f4;z-index:10}.rank-math-date-picker .components-datetime__date>.css-1srrseb::after{left:0;width:42px}.rank-math-date-picker .components-datetime__date>.css-1srrseb::before{right:0;width:42px}.rank-math-date-picker .components-datetime__date::after{content:"";display:block;position:absolute;bottom:28px;left:0;right:0;height:1px;background:#f4f4f4}.rank-math-date-picker.hide-date-picker .components-datetime__date{opacity:0;z-index:-1}.rank-math-date-picker.show-date-picker .components-datetime__date{opacity:1;z-index:1}.rank-math-date-picker+.field-description{display:inline-block;margin-left:6px}',""]);const l=i},6189:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-text-control.components-base-control .components-base-control__field{margin-bottom:0}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input{min-height:30px;padding:0 8px;margin:0 1px;font-size:14px;line-height:2}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input:read-only{background-color:#f0f0f1}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input:focus{background:#fff}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input{border-radius:4px;border:1px solid #8c8f94;box-shadow:0 0 0 rgba(0,0,0,0);color:#2c3338;background-color:#fff}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid rgba(0,0,0,0)}.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);background:hsla(0,0%,100%,.5)}.rank-math-text-control.components-base-control.regular-text{width:100%}.rank-math-text-control.components-base-control.regular-text .components-base-control__field .components-text-control__input{width:100%;height:40px;padding:.75em .6em;border-color:#7f868d;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.rank-math-text-control.components-base-control.regular-text .components-base-control__field .components-text-control__input:hover:not(:disabled){border-color:#069de3;outline:none}.rank-math-text-control.components-base-control.regular-text .components-base-control__field .components-text-control__input:focus:not(:disabled){box-shadow:0 0 0 1px #069de3;border-color:#069de3;outline:none;background-color:#fff}.rank-math-text-control.components-base-control.no-value .invalid{background:pink}.rank-math-text-control.components-base-control:not(.no-value) .invalid{background-color:#fff;border-color:#8c8f94 !important}.rank-math-text-control.components-base-control:not(.no-value) .invalid:focus{border-color:#2271b1 !important}.rank-math-text-control.components-base-control:not(.no-value) .invalid+span{display:none}@media screen and (max-width: 782px){.rank-math-text-control.components-base-control .components-base-control__field .components-text-control__input{min-height:40px;padding:3px 10px;font-size:16px}}",""]);const l=i},1530:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-textarea-control.components-base-control .components-base-control__field{margin:0}.rank-math-textarea-control.components-base-control .components-textarea-control__input{padding:2px 6px;font-size:14px;line-height:1.42857143;overflow:auto;resize:vertical}.rank-math-textarea-control.components-base-control .components-textarea-control__input:read-only{background-color:#f0f0f1}.rank-math-textarea-control.components-base-control .components-textarea-control__input{border-radius:4px;border:1px solid #8c8f94;box-shadow:0 0 0 rgba(0,0,0,0);color:#2c3338;background-color:#fff}.rank-math-textarea-control.components-base-control .components-textarea-control__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid rgba(0,0,0,0)}.rank-math-textarea-control.components-base-control .components-textarea-control__input:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);background:hsla(0,0%,100%,.5)}.rank-math-textarea-control.components-base-control.metabox .components-textarea-control__input,.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input{display:block;width:100%;height:40px;padding:.75em .6em;border-color:#7f868d;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.rank-math-textarea-control.components-base-control.metabox .components-textarea-control__input:hover:not(:disabled),.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input:hover:not(:disabled){border-color:#069de3;outline:none}.rank-math-textarea-control.components-base-control.metabox .components-textarea-control__input:focus:not(:disabled),.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input:focus:not(:disabled){box-shadow:0 0 0 1px #069de3;border-color:#069de3;outline:none;background-color:#fff}.rank-math-textarea-control.components-base-control.metabox .components-textarea-control__input,.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input{height:auto;resize:none}.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input,.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input:focus:not(:disabled){display:block;width:100%;border-color:#32344b;color:#bbbec5;background:#32344b;resize:none}.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input::placeholder,.rank-math-textarea-control.components-base-control.code-box .components-textarea-control__input:focus:not(:disabled)::placeholder{color:#63686f}.rank-math-textarea-control.components-base-control.code .components-textarea-control__input{font-family:"Consolas","Monaco",monospace}',""]);const l=i},3523:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-table{width:100%;border:1px solid #c3c4c7;border-collapse:collapse;box-shadow:0 1px 1px rgba(0,0,0,.04);font-size:14px}.rank-math-table *{word-wrap:break-word}.rank-math-table thead{border-bottom:1px solid #c3c4c7;background:#fff}.rank-math-table tbody tr:nth-child(2n+1){background:#f6f7f7}.rank-math-table td,.rank-math-table th{padding:15px 10px;text-align:left;vertical-align:top}.rank-math-table th{color:#2c3338;line-height:1.4em;font-weight:600;vertical-align:top;text-transform:capitalize}.rank-math-table td{color:#50575e;line-height:1.3;vertical-align:middle}.rank-math-table.small td,.rank-math-table.small th{padding:8px 10px;font-size:13px;line-height:1.5em}@media screen and (max-width: 782px){.rank-math-table th,.rank-math-table td{display:block;width:auto}}",""]);const l=i},2027:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,'@keyframes lt-skeleton-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-bulk-actions-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 24px;background-color:#e0e5f0;border-bottom:1px solid #e0e0e0;flex-wrap:wrap}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info{display:flex;align-items:center;justify-content:flex-start;gap:16px;flex-wrap:wrap;flex:1}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .rank-math-bulk-selection-count{font-size:14px;font-weight:500;color:#1e1e1e;white-space:nowrap}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .components-button{font-size:13px;min-width:auto;height:auto;padding:0;background:rgba(0,0,0,0);border:none;white-space:nowrap}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .components-button.is-link{color:#2271b1;text-decoration:none;transition:color .15s ease}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .components-button.is-link:hover:not(:disabled){color:#135e96;text-decoration:underline;background:rgba(0,0,0,0)}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .components-button.is-link:focus{box-shadow:none;outline:2px solid #2271b1;outline-offset:2px;border-radius:3px}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info .components-button.is-link:disabled{opacity:.5;cursor:not-allowed}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls{display:flex;align-items:center;justify-content:flex-start;gap:12px;align-items:center}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select{margin-bottom:0;min-width:160px}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select .components-base-control__field{margin-bottom:0}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select select{font-size:14px;height:36px;border:1px solid #8c8f94;border-radius:4px;padding:6px 12px;padding-right:32px;background-color:#fff;color:#50575e;cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select select:hover:not(:disabled){border-color:#757575}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select select:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select select:disabled{opacity:.5;cursor:not-allowed;background-color:#f0f0f1}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-processing{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:#50575e;font-weight:500;white-space:nowrap}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-processing::before{content:"";display:inline-block;width:16px;height:16px;border:2px solid #e0e0e0;border-top-color:#2271b1;border-radius:50%;animation:lt-bulk-spinner .6s linear infinite}@media screen and (max-width: 782px){.rank-math-bulk-actions-bar{flex-direction:column;align-items:stretch;gap:12px}.rank-math-bulk-actions-bar .rank-math-bulk-actions-info{flex-direction:column;align-items:stretch;gap:8px}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls{flex-direction:column;align-items:stretch}.rank-math-bulk-actions-bar .rank-math-bulk-actions-controls .rank-math-bulk-actions-select{width:100%}}@keyframes lt-bulk-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}',""]);const l=i},1406:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,"@keyframes lt-skeleton-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-filter-staging{display:flex;align-items:center;justify-content:flex-start;gap:8px;flex-wrap:wrap}.rank-math-filter-staging .rank-math-table-filter-inline{margin-bottom:0;min-width:140px}.rank-math-filter-staging .rank-math-table-filter-inline .components-base-control__field{margin-bottom:0}.rank-math-filter-staging .rank-math-table-filter-inline label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.rank-math-filter-staging .rank-math-table-filter-inline select.components-select-control__input{font-size:13px;height:38px;min-height:38px;border:1px solid #8c8f94;border-radius:4px;padding:6px 12px;padding-right:32px;background-color:#fff;color:#50575e;cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease}.rank-math-filter-staging .rank-math-table-filter-inline select.components-select-control__input:hover{border-color:#757575}.rank-math-filter-staging .rank-math-table-filter-inline select.components-select-control__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-filter-staging .rank-math-multi-select-wrapper{display:flex;flex-direction:column}.rank-math-filter-staging .rank-math-multi-select-dropdown{min-width:270px}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button{background:none;border:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;display:flex;align-items:center;justify-content:space-between;width:100%;height:38px;padding:6px 12px;padding-right:32px;font-size:13px;color:#50575e;background-color:#fff;border:1px solid #8c8f94;border-radius:2px;cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease;text-align:left;position:relative}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button:hover{border-color:#757575}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button.has-value{color:#1e1e1e}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button.is-open{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button .rank-math-multi-select-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button .rank-math-multi-select-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:10px;color:#757575;pointer-events:none;transition:transform .15s ease}.rank-math-filter-staging .rank-math-multi-select-dropdown .rank-math-multi-select-button.is-open .rank-math-multi-select-arrow{transform:translateY(-50%) rotate(180deg)}.rank-math-filter-staging .rank-math-apply-filters-btn{padding:8px 16px;border-radius:4px;font-size:14px;font-weight:400;cursor:pointer;transition:all .2s ease;border:1px solid rgba(0,0,0,0);line-height:1.4;background:#2271b1;color:#fff;border-color:#2271b1}.rank-math-filter-staging .rank-math-apply-filters-btn:hover:not(:disabled){background:#135e96;border-color:#135e96}.rank-math-filter-staging .rank-math-apply-filters-btn:disabled{opacity:.6;cursor:not-allowed}.rank-math-filter-staging .rank-math-apply-filters-btn:focus{outline:2px solid rgba(0,0,0,0);box-shadow:0 0 0 1px #2271b1}.rank-math-filter-staging .rank-math-apply-filters-btn{height:30px;padding:0 12px;font-size:12px;font-weight:500;white-space:nowrap}.rank-math-filter-staging .rank-math-apply-filters-btn.components-button.is-primary{min-width:auto;background:#2271b1;border-color:#2271b1;color:#fff}.rank-math-filter-staging .rank-math-apply-filters-btn.components-button.is-primary:hover:not(:disabled){background:#135e96;border-color:#135e96}.rank-math-filter-staging .rank-math-apply-filters-btn.components-button.is-primary:focus:not(:disabled){box-shadow:0 0 0 1px #2271b1}.rank-math-filter-staging .rank-math-clear-filters-btn{background:none;border:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;height:38px;padding:0 12px;color:#2271b1;font-size:13px;font-weight:400;white-space:nowrap;transition:color .15s ease}.rank-math-filter-staging .rank-math-clear-filters-btn:hover:not(:disabled){color:#135e96;text-decoration:underline}.rank-math-filter-staging .rank-math-clear-filters-btn:focus{outline:2px solid #2271b1;outline-offset:2px;border-radius:3px}.rank-math-filter-staging .rank-math-clear-filters-btn.components-button{min-width:auto;background:rgba(0,0,0,0);border:none}.rank-math-filter-staging .rank-math-clear-filters-btn.components-button.is-link{text-decoration:none}@media screen and (max-width: 782px){.rank-math-filter-staging{flex-direction:column;align-items:stretch;width:100%}.rank-math-filter-staging .rank-math-table-filter-inline{width:100%;min-width:auto}.rank-math-filter-staging .rank-math-apply-filters-btn,.rank-math-filter-staging .rank-math-clear-filters-btn{width:100%;justify-content:center}}.rank-math-multi-select-popover{padding:8px 0;margin-top:-15px}.rank-math-multi-select-popover .components-popover__content{padding-left:0;padding-right:0}.rank-math-multi-select-popover .rank-math-multi-select-dropdown-content{max-height:300px;overflow-y:auto}.rank-math-multi-select-popover .rank-math-multi-select-option{position:relative;cursor:pointer}.rank-math-multi-select-popover .rank-math-multi-select-option:hover{background-color:#f6f7f7}.rank-math-multi-select-popover .rank-math-multi-select-option .components-base-control{margin-bottom:0}.rank-math-multi-select-popover .rank-math-multi-select-option .components-base-control__field{display:flex;align-items:center;margin-bottom:0;padding:10px 16px}.rank-math-multi-select-popover .rank-math-multi-select-option .components-checkbox-control__input-container{margin-right:10px;flex-shrink:0}.rank-math-multi-select-popover .rank-math-multi-select-option label{position:absolute;inset:0;padding:10px 16px 10px 42px;font-size:13px;color:#50575e;cursor:pointer;display:flex;align-items:center}.rank-math-multi-select-popover .rank-math-multi-select-option.is-selected label{color:#1e1e1e;font-weight:500}",""]);const l=i},6724:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,"@keyframes lt-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-table-skeleton{display:flex;flex-direction:column;gap:8px}.rank-math-table-skeleton-item{background:linear-gradient(90deg, #f2f3f5 0, #e9eaed 40%, #f2f3f5 80%);background-size:200px 100%;border-radius:6px}.rank-math-table-skeleton-item.shimmer{animation:lt-shimmer 1.2s ease-in-out infinite}.rank-math-table-skeleton-item.rank-math-table-skeleton-circle{border-radius:50%}.rank-math-table-skeleton-list{display:flex;flex-direction:column;gap:12px}.rank-math-table-skeleton-list-item{display:flex;flex-direction:column;gap:4px;padding:8px;border:1px solid rgba(36,38,40,.08);border-radius:6px;background:#fff}",""]);const l=i},8453:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,"@keyframes lt-skeleton-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-table-card{background:#fff;overflow:hidden}.rank-math-table-header{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid #e0e0e0;gap:20px;flex-wrap:wrap}.rank-math-table-header .rank-math-table-title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e;flex-shrink:0}.rank-math-table-header .rank-math-table-header-controls{display:flex;align-items:center;gap:12px;flex:1;flex-wrap:wrap;padding:20px;justify-content:flex-end}.has-toggle-filters .rank-math-table-header .rank-math-table-header-controls{justify-content:flex-start}.rank-math-table-header .rank-math-table-header-actions{display:flex;gap:8px;align-items:center;margin-left:auto}.rank-math-table-header .rank-math-table-header-actions .is-secondary{display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0 8px;border:1px solid #b5bfc9;background-color:#fff;box-shadow:none}.rank-math-table-header .rank-math-table-header-actions .is-secondary:hover{background-color:#fff}.rank-math-table-header .rank-math-table-header-actions .is-secondary span{margin:0}.rank-math-table-column-toggle{position:relative}.rank-math-table-column-toggle .rank-math-table-dropdown{position:absolute;top:calc(100% + 4px);right:0;background:#fff;border:1px solid #dcdcde;border-radius:2px;box-shadow:0 2px 6px rgba(0,0,0,.1);min-width:200px;z-index:100}.rank-math-table-column-toggle .rank-math-table-dropdown .rank-math-table-dropdown-content{padding:8px 0}.rank-math-table-column-toggle .rank-math-table-dropdown .rank-math-table-dropdown-item{display:flex;align-items:center;padding:8px 16px;cursor:pointer;transition:background-color .15s ease;margin:0}.rank-math-table-column-toggle .rank-math-table-dropdown .rank-math-table-dropdown-item:hover{background-color:#f6f7f7}.rank-math-table-column-toggle .rank-math-table-dropdown .rank-math-table-dropdown-item input[type=checkbox]{margin:0 8px 0 0}.rank-math-table-column-toggle .rank-math-table-dropdown .rank-math-table-dropdown-item span{font-size:13px;color:#1e1e1e}.rank-math-table-export{position:relative}.rank-math-table-export .rank-math-table-export-dropdown{position:absolute;top:calc(100% + 4px);right:0;background:#fff;border:1px solid #dcdcde;border-radius:2px;box-shadow:0 2px 6px rgba(0,0,0,.1);min-width:280px;z-index:100}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-dropdown-content{padding:8px 0}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option{display:flex;align-items:center;gap:12px;width:100%;padding:12px 16px;background:none;border:none;cursor:pointer;transition:background-color .15s ease;text-align:left}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option:hover{background-color:#f6f7f7}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option .dashicons{font-size:24px;width:24px;height:24px;color:#2271b1}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option .rank-math-table-export-option-text{display:flex;flex-direction:column;gap:2px}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option .rank-math-table-export-option-text strong{font-size:13px;font-weight:600;color:#1e1e1e}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-option .rank-math-table-export-option-text span{font-size:12px;color:#757575}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-footer{padding:8px 16px;border-top:1px solid #dcdcde;background-color:#f6f7f7}.rank-math-table-export .rank-math-table-export-dropdown .rank-math-table-export-footer small{font-size:11px;color:#757575}.rank-math-table-filter-inline{margin-bottom:0;min-width:140px}.rank-math-table-filter-inline .components-base-control__field{margin-bottom:0}.rank-math-table-filter-inline label{display:none}.rank-math-table-filter-inline select{font-size:13px;height:38px;border:1px solid #ddd;border-radius:4px;padding:6px 32px 6px 12px;background-color:#fff;color:#50575e}.rank-math-table-filter-inline select:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-table-search-inline{margin-bottom:0;min-width:220px}.rank-math-table-search-inline .components-input-base{max-height:38px}.rank-math-table-search-inline .components-search-control__input-wrapper{margin-bottom:0}.rank-math-table-search-inline input[type=search]{font-size:13px;height:38px;padding:6px 40px 6px 12px;border:1px solid #ddd;border-radius:4px}.rank-math-table-search-inline input[type=search]:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-table-search-inline input[type=search]::placeholder{color:#a0a5aa}.rank-math-table-search-inline .components-button{height:38px;min-width:auto;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;background:rgba(0,0,0,0)}.rank-math-table-search-inline .components-button:hover{background:rgba(0,0,0,0);color:#2271b1}.rank-math-table-search-inline .components-button:focus{box-shadow:none;outline:none}.rank-math-table-search-inline .components-button svg{fill:currentColor}.rank-math-table-wrapper{overflow-x:auto}.rank-math-table{width:100%;border:none;font-size:14px}.rank-math-table thead{background-color:#f8f9fa;border-bottom:1px solid #e0e0e0}.rank-math-table thead th{padding:14px 20px;text-align:left;font-weight:500;color:#6b7280;font-size:13px;white-space:nowrap}.rank-math-table thead th:first-child{padding-left:24px}.rank-math-table thead th:last-child{padding-right:24px}.rank-math-table thead th.sortable{cursor:pointer;user-select:none}.rank-math-table thead th.sortable:hover{background-color:#f0f1f2}.rank-math-table thead th .rank-math-table-header-cell{display:flex;align-items:center;gap:6px}.rank-math-table thead th .rank-math-table-header-cell .rank-math-table-sort-icon{display:inline-flex;align-items:center}.rank-math-table thead th .rank-math-table-header-cell .rank-math-table-sort-icon .dashicons{color:#8c8f94;font-size:16px;width:16px;height:16px;line-height:1}.rank-math-table tbody tr{border-bottom:1px solid #f0f0f0;transition:background-color .15s ease;background-color:#fff}.rank-math-table tbody tr:hover{background-color:#f5f5f5}.rank-math-table tbody tr:last-child{border-bottom:none}.rank-math-table tbody tr td{padding:18px 20px;color:#2c3338;vertical-align:middle}.rank-math-table tbody tr td:first-child{padding-left:24px;max-width:250px}.rank-math-table tbody tr td:last-child{padding-right:24px}.rank-math-table tbody tr td a{color:#2271b1;text-decoration:none}.rank-math-table tbody tr td a:hover{text-decoration:underline}.rank-math-table-empty{padding:40px 20px;text-align:center}.rank-math-table-empty p{margin:0;color:#757575;font-size:14px}.rank-math-table-footer{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-top:1px solid #e0e0e0;background-color:#fff;flex-wrap:wrap;gap:12px;font-size:13px;color:#50575e}.rank-math-table-footer-nav{display:flex;align-items:center;gap:8px}.rank-math-pagination-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid #dcdcde;border-radius:3px;background:#fff;color:#1d2327;font-size:18px;line-height:1;cursor:pointer;transition:background .15s ease,border-color .15s ease}.rank-math-pagination-btn:hover:not(:disabled){background:#f0f0f1;border-color:#8c8f94}.rank-math-pagination-btn:disabled{opacity:.4;cursor:default}.rank-math-pagination-btn:focus-visible{outline:2px solid #2271b1;outline-offset:1px}.rank-math-pagination-page-info{font-size:13px;color:#50575e;white-space:nowrap}.rank-math-pagination-separator{color:#dcdcde;font-size:16px;line-height:1}.rank-math-pagination-jump{display:flex;align-items:center;gap:6px}.rank-math-pagination-jump span{color:#50575e;white-space:nowrap}.rank-math-pagination-input{width:48px;height:28px;padding:3px 6px;border:1px solid #dcdcde;border-radius:3px;font-size:13px;text-align:center;color:#1d2327;background:#fff;appearance:textfield;-moz-appearance:textfield}.rank-math-pagination-input::-webkit-outer-spin-button,.rank-math-pagination-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.rank-math-pagination-input:focus{border-color:#2271b1;outline:none;box-shadow:0 0 0 1px #2271b1}.rank-math-pagination-input:disabled{opacity:.5;cursor:default}.rank-math-table-footer-stats{display:flex;align-items:center;flex-wrap:wrap;gap:0;font-size:13px;color:#50575e}.rank-math-footer-stat{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.rank-math-footer-stat strong{font-weight:600;color:#1d2327}.rank-math-footer-stat .rank-math-footer-stat-dot{margin:0 8px;color:#dcdcde;font-size:16px;line-height:1}.rank-math-count-badge{display:inline-flex;align-items:center;padding:4px 10px;background-color:#f0f0f1;border-radius:12px;font-size:12px;font-weight:500;color:#2c3338;min-width:30px;text-align:center;box-sizing:border-box}.rank-math-count-badge.rank-math-count-badge-link{cursor:pointer;border:1px solid rgba(0,0,0,0);background-color:#e0e5f0;color:#2271b1;line-height:1;transition:all .2s ease}.rank-math-count-badge.rank-math-count-badge-link:hover{background-color:#2271b1;color:#fff;border-color:#2271b1;transform:translateY(-1px);box-shadow:0 2px 4px rgba(34,113,177,.2)}.rank-math-count-badge.rank-math-count-badge-link:active{transform:translateY(0);box-shadow:none}.rank-math-seo-score{display:inline-flex;margin-bottom:0}.rank-math-seo-score strong{display:inline-block;padding:5px 10px;border-radius:4px;font-size:13px;font-weight:500}.rank-math-seo-score.na strong{color:#616161;background:#dedede}.rank-math-seo-score.bad strong{color:#e12925;background:#fce5e2}.rank-math-seo-score.good strong{color:#bf890d;background:#fdf0c4}.rank-math-seo-score.great strong{color:#e3f4e3;background:#4ab147}.rank-math-orphan-warning{color:#f0b849;font-size:20px;cursor:help}.rank-math-orphan-warning:hover{color:#e09f2f}.rank-math-post-url{margin-top:4px;font-size:12px;color:#757575;font-weight:400;line-height:1.4}.rank-math-badge{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-align:center}.rank-math-badge.rank-math-badge-success{background-color:#d4edda;color:#155724}.rank-math-badge.rank-math-badge-info{background-color:#d1ecf1;color:#0c5460}.rank-math-badge.rank-math-badge-warning{background-color:#fff3cd;color:#856404}.rank-math-badge.rank-math-badge-danger{background-color:#f8d7da;color:#721c24}",""]);const l=i},5703:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,'@keyframes lt-skeleton-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-table thead .rank-math-table-checkbox-column{width:48px;padding:12px !important;text-align:center;vertical-align:middle}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control{margin-bottom:0;display:flex;align-items:center;justify-content:center}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control .components-h-stack{width:20px;margin:0}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control .components-checkbox-control__input-container{margin:0}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]{margin:0;width:16px;height:16px;cursor:pointer;border-radius:3px;border:1px solid #8c8f94}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]:checked{background-color:#2271b1;border-color:#2271b1}.rank-math-table thead .rank-math-table-checkbox-column .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]:focus{box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-table tbody .rank-math-table-row{position:relative;border-bottom:1px solid #f0f0f0;background-color:#fff;transition:background-color .15s ease}.rank-math-table tbody .rank-math-table-row:nth-child(odd){background-color:#fafafa}.rank-math-table tbody .rank-math-table-row:hover{background-color:#f5f5f5}.rank-math-table tbody .rank-math-table-row:hover .rank-math-row-actions{opacity:1;visibility:visible}.rank-math-table tbody .rank-math-table-row.is-expanded{border-bottom:none;background-color:#fff}.rank-math-table tbody .rank-math-table-row:focus{outline:2px solid #2271b1;outline-offset:-2px;position:relative;z-index:1}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell{width:48px;padding:12px !important;vertical-align:middle;text-align:center}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control{margin-bottom:0;display:flex;align-items:center;justify-content:center}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control .components-h-stack{width:20px;margin:0}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control .components-checkbox-control__input-container{margin:0}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]{margin:0;width:16px;height:16px;cursor:pointer;border-radius:3px;border:1px solid #8c8f94}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]:checked{background-color:#2271b1;border-color:#2271b1}.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell .components-checkbox-control .components-checkbox-control__input-container input[type=checkbox]:focus{box-shadow:0 0 0 1px #2271b1;outline:none}.rank-math-table tbody .rank-math-table-row .rank-math-table-primary-column{position:relative;font-weight:500;color:#1e1e1e}.rank-math-table tbody .rank-math-table-row .rank-math-table-primary-column .rank-math-table-cell-content{position:relative}.rank-math-table tbody .rank-math-table-row .rank-math-table-primary-column a{color:#2271b1;text-decoration:none;font-weight:600;transition:color .15s ease}.rank-math-table tbody .rank-math-table-row .rank-math-table-primary-column a:hover{color:#135e96;text-decoration:underline}.rank-math-table tbody .rank-math-table-row .rank-math-table-primary-column a:focus{outline:2px solid #2271b1;outline-offset:1px;border-radius:3px}.rank-math-table tbody .rank-math-row-actions{display:flex;align-items:center;justify-content:flex-start;gap:6px;min-height:calc(13px*1.4);margin-top:4px;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action{background:none;border:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;font-size:13px;color:#2271b1;line-height:1.4;padding:0;transition:color .15s ease;white-space:nowrap}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action:hover:not(:disabled){color:#135e96;text-decoration:underline}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action:focus{outline:2px solid #2271b1;outline-offset:1px;border-radius:3px}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action:disabled{opacity:.6;cursor:not-allowed}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action:not(:first-child):before{content:"|";display:inline-block;margin-right:6px;color:#dcdcde;font-weight:400}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action.rank-math-delete-action{color:#d63638}.rank-math-table tbody .rank-math-row-actions .rank-math-row-action.rank-math-delete-action:hover:not(:disabled){color:#b32d2e}@media screen and (max-width: 782px){.rank-math-table tbody .rank-math-table-row .rank-math-table-checkbox-cell{width:40px;padding:12px 8px !important}.rank-math-table tbody .rank-math-table-row .rank-math-row-actions{opacity:1;visibility:visible;flex-wrap:wrap}.rank-math-table thead .rank-math-table-checkbox-column{width:40px;padding:8px !important}}',""]);const l=i},1018:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,"@keyframes lt-skeleton-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}.rank-math-toggle-button-group{display:inline-flex;align-items:center;background-color:#f0f0f1;border-radius:4px;padding:3px;gap:2px}.rank-math-toggle-button-group .rank-math-toggle-button{background:none;border:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;padding:6px 14px;font-size:13px;font-weight:500;color:#50575e;background-color:rgba(0,0,0,0);border-radius:3px;transition:all .15s ease;white-space:nowrap;line-height:1.4}.rank-math-toggle-button-group .rank-math-toggle-button:hover:not(.is-active){color:#1e1e1e;background-color:rgba(0,0,0,.05)}.rank-math-toggle-button-group .rank-math-toggle-button:focus{outline:2px solid #2271b1;outline-offset:-2px}.rank-math-toggle-button-group .rank-math-toggle-button.is-active{background-color:#fff;color:#1e1e1e;box-shadow:0 1px 3px rgba(0,0,0,.1)}.rank-math-toggle-button-group.is-tab-style{background-color:rgba(0,0,0,0);border:none;padding:0;gap:0}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button{padding:0 20px;border-radius:0;background-color:rgba(0,0,0,0);color:#50575e;font-size:13px;font-weight:500;border-bottom:2px solid rgba(0,0,0,0);transition:color .15s ease,border-color .15s ease}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.is-active{color:#2271b1;border-bottom-color:#2271b1;background-color:rgba(0,0,0,0);box-shadow:none;font-weight:600}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-error:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-error.is-active,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-bad:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-bad.is-active{color:#ed5e5e;border-bottom-color:#ed5e5e}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-warning:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-warning.is-active,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-good:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-good.is-active{color:#ff9f43;border-bottom-color:#ff9f43}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-unchecked:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-unchecked.is-active,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-no-score:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-no-score.is-active{color:#6c757d;border-bottom-color:#6c757d}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-success:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-success.is-active,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-great:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-great.is-active{color:#10ac84;border-bottom-color:#10ac84}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-markedSafe:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-markedSafe.is-active{color:#17a2b8;border-bottom-color:#17a2b8}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-blocked:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-blocked.is-active{color:#5a1a7a;border-bottom-color:#5a1a7a}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-internal:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-internal.is-active{color:#155724;border-bottom-color:#155724}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-external:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-external.is-active{color:#0c5460;border-bottom-color:#0c5460}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-orphan:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-orphan.is-active{color:#856404;border-bottom-color:#856404}.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-linked:hover,.rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button.status-linked.is-active{color:#0c5460;border-bottom-color:#0c5460}.rank-math-toggle-button-group.is-colored{background-color:rgba(0,0,0,0);border:none;padding:0;gap:6px}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button{padding:5px 12px;border-radius:2px;border-bottom:2px solid rgba(0,0,0,0);background-color:rgba(0,0,0,.05);color:#50575e;font-size:13px;font-weight:500;transition:color .15s ease,border-color .15s ease;outline:none}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.is-active{box-shadow:none;color:#2271b1;border-color:#2271b1;font-weight:600}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-success:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-success.is-active,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-great:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-great.is-active{color:#10ac84;border-color:#10ac84}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-error:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-error.is-active,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-bad:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-bad.is-active{color:#ed5e5e;border-color:#ed5e5e}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-warning:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-warning.is-active,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-good:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-good.is-active{color:#ff9f43;border-color:#ff9f43}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-unchecked:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-unchecked.is-active,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-no-score:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-no-score.is-active{color:#6c757d;border-color:#6c757d}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-markedSafe:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-markedSafe.is-active{color:#17a2b8;border-color:#17a2b8}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-blocked:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-blocked.is-active{color:#5a1a7a;border-color:#5a1a7a}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-internal:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-internal.is-active{color:#155724;border-color:#155724}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-external:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-external.is-active{color:#0c5460;border-color:#0c5460}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-orphan:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-orphan.is-active{color:#856404;border-color:#856404}.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-linked:hover,.rank-math-toggle-button-group.is-colored .rank-math-toggle-button.status-linked.is-active{color:#0c5460;border-color:#0c5460}",""]);const l=i},1266:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-tab-panel .rank-math-notice{width:fit-content;padding:3px 14px;margin:5px 15px 2px;border:1px solid #c3c4c7;border-left-width:4px;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;line-height:1.5}.rank-math-tab-panel .rank-math-notice.is-error,.rank-math-tab-panel .rank-math-notice.notice-error{border-left-color:#d63638;background-color:#fcf0f1}.rank-math-tab-panel .rank-math-notice.is-error .rank-math-notice__icon,.rank-math-tab-panel .rank-math-notice.notice-error .rank-math-notice__icon{color:#d63638}.rank-math-tab-panel .rank-math-notice.is-warning,.rank-math-tab-panel .rank-math-notice.notice-warning{border-left-color:#dba617;background-color:#fcf9e8}.rank-math-tab-panel .rank-math-notice.is-warning .rank-math-notice__icon,.rank-math-tab-panel .rank-math-notice.notice-warning .rank-math-notice__icon{color:#dba617}.rank-math-tab-panel .rank-math-notice.is-success,.rank-math-tab-panel .rank-math-notice.notice-success{border-left-color:#00a32a;background-color:#fff}.rank-math-tab-panel .rank-math-notice.is-success .rank-math-notice__icon,.rank-math-tab-panel .rank-math-notice.notice-success .rank-math-notice__icon{color:#00a32a}.rank-math-tab-panel .rank-math-notice.is-success,.rank-math-tab-panel .rank-math-notice.notice-success{width:100%}.rank-math-tab-panel .rank-math-notice.is-info,.rank-math-tab-panel .rank-math-notice.notice-info{border-left-color:#72aee6;background-color:#f0f6fc}.rank-math-tab-panel .rank-math-notice.is-info .rank-math-notice__icon,.rank-math-tab-panel .rank-math-notice.notice-info .rank-math-notice__icon{color:#72aee6}.rank-math-tab-panel .rank-math-notice__icon{position:absolute;top:50%;left:0;transform:translateY(-50%);color:#c3c4c7}.rank-math-tab-panel .rank-math-notice__icon i,.rank-math-tab-panel .rank-math-notice__icon svg,.rank-math-tab-panel .rank-math-notice__icon .dashicons{margin:0 !important}.rank-math-tab-panel .rank-math-notice__icon i,.rank-math-tab-panel .rank-math-notice__icon .dashicons{font-size:27px !important}.rank-math-tab-panel .rank-math-notice__icon .dashicons{display:inline-flex;justify-content:center;align-items:center;width:27px !important;height:27px !important}.rank-math-tab-panel .rank-math-notice__icon svg{width:27px;height:27px}.rank-math-tab-panel .rank-math-notice__icon svg path{fill:currentColor;fill-opacity:1}.rank-math-tab-panel .rank-math-notice .components-notice__content{position:relative;margin:.5em 0;margin-right:3px}.rank-math-tab-panel .rank-math-notice.has-icon .components-notice__content{padding-left:40px}.rank-math-tab-panel .rank-math-notice .components-button{height:fit-content;padding:0;margin-top:2px;box-shadow:none;outline:none}.rank-math-tab-panel .rank-math-notice .components-button:hover:not(:disabled),.rank-math-tab-panel .rank-math-notice .components-button:focus:not(:disabled),.rank-math-tab-panel .rank-math-notice .components-button:active:not(:disabled){box-shadow:none;outline:none}.rank-math-tab-panel .rank-math-notice .components-button.components-notice__dismiss{color:rgba(0,0,0,.5)}.rank-math-tab-panel .rank-math-notice .components-button.components-notice__dismiss:hover{color:rgba(0,0,0,.88)}.rank-math-tab-panel .rank-math-notice .components-button.components-notice__dismiss svg{width:1rem;height:1rem;padding:4px;border-radius:2px}.rank-math-tab-panel .rank-math-notice .components-button.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover svg{background-color:rgba(0,0,0,.05)}.rank-math-tab-panel .rank-math-notice.is-alt{box-shadow:none}.rank-math-tab-panel .rank-math-notice p{margin:0}",""]);const l=i},4800:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-rating{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:316px;height:60px;border:1px solid #e2e4e7;border-radius:6px;background:#fff}.rank-math-rating__stars{margin:auto}.rank-math-rating__stars .components-button{height:fit-content;box-shadow:none;outline:none}.rank-math-rating__stars .components-button:hover:not(:disabled),.rank-math-rating__stars .components-button:focus:not(:disabled),.rank-math-rating__stars .components-button:active:not(:disabled){box-shadow:none;outline:none}.rank-math-rating__stars .components-button{color:#aaa}.rank-math-rating__stars .components-button.has-icon{min-width:fit-content;padding:0}.rank-math-rating__stars .components-button .dashicons{width:40px !important;height:40px !important;margin:0;font-size:40px !important}.rank-math-rating__stars .components-button:hover,.rank-math-rating__stars .components-button.highlighted{color:#f9cb12}.rank-math-rating__face{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;width:70px;height:100%;border-left:1px solid #e2e4e7;background:#f0f2f4}.rank-math-rating__face .smiley{position:relative;width:40px;height:40px;padding:5px;border-radius:100%;box-sizing:border-box;background:linear-gradient(135deg, #ffe919 0%, #fbc000 100%)}.rank-math-rating__face .smiley .eyes{width:100%;padding:0 5px;margin-top:15%;box-sizing:border-box;transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.rank-math-rating__face .smiley .eyes .eye{position:relative;float:left;width:8px;height:8px;border-radius:100%;background:#b57700}.rank-math-rating__face .smiley .eyes .eye:nth-of-type(2){float:right}.rank-math-rating__face .smiley .eyes .eye::after{display:block;content:"";position:absolute;top:-15px;left:5px;transform:rotate(0deg);height:0;width:0;background:#fed800;transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.rank-math-rating__face .smiley .eyes .eye:first-of-type::after{right:5px;left:auto;transform:rotate(0deg)}.rank-math-rating__face .smiley .mouth{position:absolute;bottom:18%;left:50%;width:60%;height:30%;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;box-sizing:border-box;background:#b57700;transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.rank-math-rating__face .smiley.angry .eyes{margin-top:35%}.rank-math-rating__face .smiley.angry .eye::after{top:-3px;left:-5px;transform:rotate(-35deg);width:120%;height:50%;border-radius:0}.rank-math-rating__face .smiley.angry .eye:first-of-type::after{right:-5px;left:auto;transform:rotate(35deg)}.rank-math-rating__face .smiley.angry .mouth{bottom:18%;left:50%;width:40%;height:20%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.rank-math-rating__face .smiley.angry .eyes,.rank-math-rating__face .smiley.angry .mouth{animation:move-angry-head .6s}.rank-math-rating__face .smiley.normal .eyes{margin-top:30%}.rank-math-rating__face .smiley.normal .eye{height:8px;margin-top:0;animation:blink .6s}.rank-math-rating__face .smiley.normal .mouth{bottom:25%;width:40%;height:10%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px}.rank-math-rating__face .smiley.happy .eyes{animation:move-eyes-down .8s}.rank-math-rating__face .smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;animation:wink .8s}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-angry-head{0%{transform:translateX(0%)}20%{transform:translateX(-20%)}40%{transform:translateX(15%)}60%{transform:translateX(-10%)}80%{transform:translateX(5%)}100%{transform:translateX(0%)}}',""]);const l=i},776:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-tooltip-container{display:inline;vertical-align:middle}.rank-math-tooltip-container.is-block{display:block}.rank-math-tooltip-container .dashicons-editor-help{color:#b5bfc9;height:20px;line-height:18px}.rank-math-tooltip-container:hover .dashicons-editor-help{color:#069de3}.rank-math-tooltip-popover{transition:all .3s ease-in-out;z-index:-1;opacity:0 !important;pointer-events:none}.rank-math-tooltip-popover.is-visible{margin:0 !important;z-index:1000000;opacity:1 !important}.rank-math-tooltip-popover.top,.rank-math-tooltip-popover.top-end,.rank-math-tooltip-popover.top-start,.rank-math-tooltip-popover.bottom,.rank-math-tooltip-popover.bottom-end .rank-math-tooltip-popover.bottom-start{margin-top:10px}.rank-math-tooltip-popover.left,.rank-math-tooltip-popover.left-end,.rank-math-tooltip-popover.left-start,.rank-math-tooltip-popover.right,.rank-math-tooltip-popover.right-end,.rank-math-tooltip-popover.right-start{margin-left:10px}.rank-math-tooltip-popover .components-popover__content{width:fit-content;max-width:220px;padding:4px 8px;border-radius:4px;box-shadow:none;outline:none;color:#fff;background:#1e1e1e;font-size:12px;font-weight:400;line-height:1.5;text-align:center;white-space:nowrap;text-wrap:auto}.rank-math-tooltip-popover .components-popover__arrow .components-popover__triangle-bg{fill:#1e1e1e}.rank-math-tooltip-popover .components-popover__arrow .components-popover__triangle-border{stroke:rgba(0,0,0,0)}.rank-math-tooltip-popover .components-popover__arrow::before{background:#1e1e1e}",""]);const l=i},8474:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.media-status .img-status{display:inline-block;position:relative;width:auto;margin-right:10px;vertical-align:middle;clear:none}.media-status .img-status:hover img{border-color:#fc948b;box-shadow:0 0 0 1px #fc948b}.media-status .img-status:hover .remove-file-button{opacity:1}.media-status .img-status img{max-width:350px;height:auto;margin:15px 0 0 0;border:5px solid #fff;border-radius:2px;box-shadow:inset 0 0 15px rgba(0,0,0,.3),inset 0 0 0 1px rgba(0,0,0,.05);outline:1px solid #e9e9e9;background:#eee;background-image:linear-gradient(45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0),linear-gradient(45deg, #d0d0d0 25%, transparent 25%, transparent 75%, #d0d0d0 75%, #d0d0d0);background-position:0 0,10px 10px;background-size:20px 20px;cursor:pointer}.media-status .img-status .remove-file-button,.media-status .img-status .remove-file-button:hover:not(:disabled){background-color:#fc948b}.media-status .img-status .remove-file-button{display:flex;align-items:center;justify-content:center;position:absolute;top:16px;right:1px;left:auto;width:38px;height:38px;border:0;border-radius:0;opacity:0;line-height:38px}.media-status .img-status .remove-file-button:hover:not(:disabled){border:0}.media-status .img-status .remove-file-button:focus{box-shadow:none;outline:none}.media-status .img-status .remove-file-button::before{display:inline-block;content:"ïŒµ";color:#fff;font-family:"dashicons";font-size:20px;font-weight:400;font-style:normal;text-align:center;vertical-align:top;text-decoration:none}',""]);const l=i},8683:function(t,e,n){"use strict";n.d(e,{A:function(){return d}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a),l=n(4417),c=n.n(l),s=new URL(n(4254),n.b),u=new URL(n(976),n.b),m=i()(o()),p=c()(s),b=c()(u);m.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.components-base-control__field.css-1t5ousf{margin-bottom:0}.rank-math-select-control.rank-math-select-control.rank-math-select-control{width:fit-content;max-width:25rem;border-radius:3px;gap:0}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-input-control-suffix-wrapper{display:none}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-input-control__label{color:#242628;font-size:14px;line-height:16px;vertical-align:middle;cursor:pointer;font-weight:400;line-height:1.4em;text-transform:inherit}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-select-control__input{min-height:30px;padding:0 24px 0 8px;border-color:#8c8f94;border-radius:3px;color:#2c3338;background:#fff url("+p+") no-repeat right 5px top 55%;background-size:16px 16px;font-size:14px;line-height:2;vertical-align:middle}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-select-control__input:hover{color:#2271b1}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-select-control__input:focus{border-color:#2271b1;color:#0a4b78}.rank-math-select-control.rank-math-select-control.rank-math-select-control:focus-within .components-select-control__input,.rank-math-select-control.rank-math-select-control.rank-math-select-control:focus-within .components-input-control__backdrop{border-color:#2271b1 !important}.rank-math-select-control.rank-math-select-control.rank-math-select-control:focus-within .components-input-control__backdrop{box-shadow:0 0 0 1px #2271b1 !important}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-disabled .components-input-control__container{opacity:.7}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-disabled .components-select-control__input{color:#a7aaad;border-color:#dcdcde;background-color:#f6f7f7;background-image:url("+b+");text-shadow:0 1px 0 #fff;cursor:default}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox{width:100%}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox .components-select-control__input{min-height:40px;padding:0px 22px 0px .6em}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox:hover .components-select-control__input,.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox:focus-within .components-select-control__input{color:#2271b1}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox:hover .components-input-control__backdrop,.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox:focus-within .components-input-control__backdrop{border-color:#069de3 !important}.rank-math-select-control.rank-math-select-control.rank-math-select-control.is-metabox:focus-within .components-input-control__backdrop{box-shadow:0 0 0 1px #069de3 !important}@media screen and (max-width: 782px){.rank-math-select-control.rank-math-select-control.rank-math-select-control{width:100%;max-width:100%}.rank-math-select-control.rank-math-select-control.rank-math-select-control .components-select-control__input{min-height:40px;padding:5px 24px 5px 8px;font-size:16px;line-height:1.625}}",""]);const d=m},4310:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-select-variable{position:relative;background-color:#fff}.rank-math-select-variable[aria-disabled=true]{pointer-events:none}.rank-math-select-variable .select-input{position:relative}.rank-math-select-variable .select-input .components-text-control__input{padding-right:50px}.rank-math-select-variable .select-input .rank-math-text-control+.rank-math-button{top:1px;right:0;bottom:1px;border-width:0 0 0 1px;border-radius:0 3px 3px 0}.rank-math-select-variable .select-input .rank-math-textarea-control+.rank-math-button{top:auto;right:1px;bottom:1px;min-height:40px;border-width:1px 0 0 1px;border-radius:3px 0 3px 0}.rank-math-select-variable .select-input .rank-math-button{position:absolute;height:auto;padding:0 10px;box-shadow:none;color:#858b90;line-height:40px}.rank-math-select-variable .select-menu{position:absolute;top:48px;right:0;z-index:999;overflow:auto;width:80%;max-width:450px;height:220px;border:1px solid #b5bfc9;border-radius:6px;background:#fff}.rank-math-select-variable .select-menu.is-textarea-menu{top:70px}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field{margin-bottom:0}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container{background-color:rgba(0,0,0,0)}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input{border-radius:4px;border:1px solid #8c8f94;box-shadow:0 0 0 rgba(0,0,0,0);color:#2c3338;background-color:#fff}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid rgba(0,0,0,0)}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);background:hsla(0,0%,100%,.5)}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input{width:calc(100% - 20px);max-width:100%;height:34px;min-height:30px;padding:0 8px;margin:10px;border-color:#b5bfc9;background:#fff;font-size:14px;line-height:2}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:focus{border-color:#069de3;box-shadow:0 0 0 1px #069de3 !important;outline:2px solid rgba(0,0,0,0);background-color:#fff}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__suffix,.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__prefix{display:none}.rank-math-select-variable .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__backdrop{border:0;box-shadow:none;outline:none}.rank-math-select-variable .select-menu ul{margin:0}.rank-math-select-variable .select-menu ul li{position:relative;margin:0;padding:10px;cursor:pointer}.rank-math-select-variable .select-menu ul li:not(:last-child){border-bottom:1px solid #b5bfc9}.rank-math-select-variable .select-menu ul li div:first-of-type{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.rank-math-select-variable .select-menu ul li div:first-of-type p,.rank-math-select-variable .select-menu ul li div:first-of-type strong{margin:0}.rank-math-select-variable .select-menu ul li div:first-of-type p,.rank-math-select-variable .select-menu ul li div:first-of-type strong{font-size:12px;line-height:16px}.rank-math-select-variable .select-menu ul li div:first-of-type p{display:inline-block;padding:0;margin:0;border-radius:.25rem;background-color:#f0f2f4;font-size:12px;line-height:16px}.rank-math-select-variable .select-menu ul li .description{display:block;color:#7f868d;font-style:italic}.rank-math-select-variable .select-menu ul li:hover{background:#f8f9fa}body.rtl .rank-math-select-variable .select-input .rank-math-textarea-control+.rank-math-button{left:1px;right:auto;border-width:1px 1px 0 0;border-radius:0 3px 0 3px}",""]);const l=i},6066:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-select-with-searchbox{position:relative;max-width:25rem;background-color:#fff}.rank-math-select-with-searchbox label{color:#242628;font-size:14px;line-height:16px;vertical-align:middle;cursor:pointer;line-height:1.4em}.rank-math-select-with-searchbox .components-button.is-secondary{display:flex;justify-content:space-between;width:100%;height:40px;padding:.75em .6em;border-color:#7f868d;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.rank-math-select-with-searchbox .components-button.is-secondary:hover:not(:disabled){border-color:#069de3;outline:none}.rank-math-select-with-searchbox .components-button.is-secondary:focus:not(:disabled){box-shadow:0 0 0 1px #069de3;border-color:#069de3;outline:none;background-color:#fff}.rank-math-select-with-searchbox .components-button.is-secondary{border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;box-shadow:none;color:#444;background-color:#fff;line-height:18px}.rank-math-select-with-searchbox .components-button.is-secondary::after{content:"ï…€";margin-left:auto;color:#888;font-size:18px;font-family:"dashicons"}.rank-math-select-with-searchbox .components-button.is-secondary .select-label{flex:1;margin-right:6px;text-align:left}.rank-math-select-with-searchbox .components-button.is-secondary .clear-selection-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;color:#444;background-color:rgba(0,0,0,0);cursor:pointer}.rank-math-select-with-searchbox .components-button.is-secondary .clear-selection-icon:hover{color:#cc1818}.rank-math-select-with-searchbox .components-button.is-secondary .clear-selection-icon svg{display:block}.rank-math-select-with-searchbox .components-button.is-secondary:hover:not(:focus):not(:disabled),.rank-math-select-with-searchbox .components-button.is-secondary:active:not(:focus):not(:disabled){box-shadow:none;color:currentColor;background-color:#fff}.rank-math-select-with-searchbox .components-button.is-secondary:focus:not(:disabled){color:#444;background-color:#fff}.rank-math-select-with-searchbox .components-button.is-secondary:disabled{color:rgba(44,51,56,.5);pointer-events:none}.rank-math-select-with-searchbox .components-button.is-secondary:disabled::after{color:currentColor}.rank-math-select-with-searchbox .components-button.is-secondary[aria-expanded=true]{border-bottom-right-radius:0;border-bottom-left-radius:0}.rank-math-select-with-searchbox .components-button.is-secondary[aria-expanded=true]::after{transform:rotate(180deg)}.rank-math-select-with-searchbox .select-menu{display:block;position:absolute;left:0;z-index:1051;width:100%;border:1px solid #7f868d;border-top:none;border-radius:4px;border-top-left-radius:0;border-top-right-radius:0;box-sizing:border-box;background-color:#fff}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field{margin-bottom:0}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container{background-color:rgba(0,0,0,0)}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input{border-radius:4px;border:1px solid #8c8f94;box-shadow:0 0 0 rgba(0,0,0,0);color:#2c3338;background-color:#fff}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid rgba(0,0,0,0)}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:disabled{border-color:hsla(0,0%,100%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(44,51,56,.5);background:hsla(0,0%,100%,.5)}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input{width:calc(100% - 8px);max-width:100%;height:34px;min-height:30px;padding:0 8px;margin:4px;border-color:#b5bfc9;background:#fff;font-size:14px;line-height:2}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__input:focus{border-color:#069de3;box-shadow:0 0 0 1px #069de3 !important;outline:2px solid rgba(0,0,0,0);background-color:#fff}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__suffix,.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__prefix{display:none}.rank-math-select-with-searchbox .select-menu .components-search-control .components-base-control__field .components-input-control__container .components-input-control__backdrop{border:0;box-shadow:none;outline:none}.rank-math-select-with-searchbox .select-menu ul{margin:0;max-height:200px;overflow-y:auto}.rank-math-select-with-searchbox .select-menu ul li{padding:6px;margin-bottom:6px;font-size:13px;cursor:pointer}.rank-math-select-with-searchbox .select-menu ul li:hover{color:#fff;background-color:#5897fb}.rank-math-select-with-searchbox .select-menu .no-results{display:block;margin:6px;font-size:13px}body.rtl .rank-math-select-variable .select-input .rank-math-text-control+.rank-math-button{right:auto;left:0;border-width:0 1px 0 0;border-radius:3px 0 0 3px}body.rtl .rank-math-select-with-searchbox .components-button.is-secondary::after{margin-right:auto;margin-left:0}',""]);const l=i},486:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control{display:inline-block;width:fit-content;padding:5px 0 0 5px;margin:0;border:1px solid #b5bfc9;border-radius:4px;background:#fff}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control:before{display:none}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control:focus-within{box-shadow:none;outline:none}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base{min-height:36px;margin-right:5px;margin-bottom:5px;padding:0 15px;border:1px solid #dadfe4;border-radius:4px;box-sizing:border-box;color:#666d73;white-space:wrap;transition:none}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base:hover{border-color:#069de3;color:#069de3}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base[aria-checked=true],.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base[aria-checked=true]:hover{border-color:#069de3;color:#fff;background-color:#069de3}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base>div{font-size:14px;font-weight:500}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .components-toggle-group-control-option-base+div{display:none}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .rank-math-custom-toggle-group-control-option{padding-left:9px;padding-right:9px}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control .rank-math-custom-toggle-group-control-option .components-text-control__input{width:40px;height:24px;min-height:24px;padding:0 8px;border:0;box-sizing:border-box;color:#32373c;box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}.components-base-control .components-base-control__field .rank-math-toggle-group-control.components-toggle-group-control[aria-disabled=true]{opacity:.4}.components-base-control .components-base-control__field .css-zjik7{display:none}",""]);const l=i},8381:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-status-anchor-tag.components-button.is-secondary{height:22px;padding:4px 6px;border-radius:2px;box-shadow:none;outline:none}.rank-math-status-anchor-tag.components-button.is-secondary:hover:not(:disabled),.rank-math-status-anchor-tag.components-button.is-secondary:focus:not(:disabled),.rank-math-status-anchor-tag.components-button.is-secondary:active:not(:disabled){box-shadow:none;outline:none}.rank-math-status-anchor-tag.components-button.is-secondary{font-size:11px;line-height:13px}.rank-math-status-anchor-tag.components-button.is-secondary.is-good{color:#55a853;background-color:rgba(85,168,83,.1)}.rank-math-status-anchor-tag.components-button.is-secondary.is-good:active{color:#fff;background-color:#7ac979}.rank-math-status-anchor-tag.components-button.is-secondary.is-good:hover,.rank-math-status-anchor-tag.components-button.is-secondary.is-good:focus{color:#3d993a;background-color:rgba(85,168,83,.15)}.rank-math-status-anchor-tag.components-button.is-secondary.is-neutral{color:#df962c;background-color:rgba(223,150,44,.1)}.rank-math-status-anchor-tag.components-button.is-secondary.is-neutral:active{color:#fff;background-color:#ffbe5f}.rank-math-status-anchor-tag.components-button.is-secondary.is-neutral:hover,.rank-math-status-anchor-tag.components-button.is-secondary.is-neutral:focus{color:#d68915;background-color:rgba(223,150,44,.15)}.rank-math-status-anchor-tag.components-button.is-secondary.is-bad{color:#e37a73;background-color:rgba(227,122,115,.1)}.rank-math-status-anchor-tag.components-button.is-secondary.is-bad:active{color:#fff;background-color:#f29c96}.rank-math-status-anchor-tag.components-button.is-secondary.is-bad:hover,.rank-math-status-anchor-tag.components-button.is-secondary.is-bad:focus{color:#d9655d;background-color:rgba(227,122,115,.15)}.rank-math-status-anchor-tag.components-button.is-secondary.is-default{color:#757575;background-color:rgba(0,0,0,.05)}.rank-math-status-anchor-tag.components-button.is-secondary.is-default:active{color:#fff;background-color:#383838}.rank-math-status-anchor-tag.components-button.is-secondary.is-default:hover,.rank-math-status-anchor-tag.components-button.is-secondary.is-default:focus{color:#383838;background-color:rgba(0,0,0,.1)}",""]);const l=i},1502:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-status-button.components-button{min-height:32px;padding:0 12px;border-radius:4px;font-size:14px;font-weight:500;line-height:2.30769231}.rank-math-status-button.components-button.has-icon.has-text svg{width:14px;height:14px;margin-right:5px}.rank-math-status-button.components-button.is-connected{border:1px solid #58bb58;color:#fff;background-color:#58bb58}.rank-math-status-button.components-button.is-connected svg path{fill:#fff}.rank-math-status-button.components-button.is-disconnected{border:1px solid #ee6a5e;color:#fff;background-color:#ee6a5e}.rank-math-status-button.components-button.is-disconnected svg path{fill:#fff}.rank-math-status-button.components-button.is-disconnect:hover{border-color:#ee6a5e;box-shadow:none;color:#fff;background:#ee6a5e}.rank-math-status-button.components-button.is-connected,.rank-math-status-button.components-button.is-disconnected{pointer-events:none}",""]);const l=i},8778:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,":root{--rankmath-wp-adminbar-height: 0}.rank-math-status-list{display:flex;flex-direction:column;gap:8px;width:16.5rem}.rank-math-status-list:active .rank-math-status-list__description-icon{color:#fff;background-color:#383838}.rank-math-status-list__icon{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;width:14px;height:14px;border-radius:8px;transform:translateY(5px)}.rank-math-status-list__description{flex:1 1 0;color:#2f2f2f;font-size:13px;font-weight:400;line-height:20px}.rank-math-status-list__description a{display:inline-block;visibility:hidden;transform:translateY(1px)}.rank-math-status-list__description a:hover svg{border-radius:6px;background-color:#383838}.rank-math-status-list__description a:hover svg path:not(:last-of-type){fill:#fff}.rank-math-status-list:hover .rank-math-status-list__description a{visibility:visible}.rank-math-status-list.is-good .rank-math-status-list__icon{color:#3d993a;background-color:rgba(85,168,83,.15)}.rank-math-status-list.is-good .rank-math-status-list__icon svg path{fill:#3d993a}.rank-math-status-list.is-good:hover .rank-math-status-list__icon{color:#fff;background-color:#7ac979}.rank-math-status-list.is-good:hover .rank-math-status-list__icon svg path{fill:#fff}.rank-math-status-list.is-neutral .rank-math-status-list__icon{color:#d18e08;background-color:rgba(223,150,44,.15)}.rank-math-status-list.is-neutral .rank-math-status-list__icon svg path{fill:#d18e08}.rank-math-status-list.is-neutral:hover .rank-math-status-list__icon{color:#fff;background-color:#ffbe5f}.rank-math-status-list.is-neutral:hover .rank-math-status-list__icon svg path{fill:#fff}.rank-math-status-list.is-bad .rank-math-status-list__icon{color:#d9655d;background-color:rgba(227,122,115,.15)}.rank-math-status-list.is-bad .rank-math-status-list__icon svg path{fill:#d9655d}.rank-math-status-list.is-bad:hover .rank-math-status-list__icon{color:#fff;background-color:#f29c96}.rank-math-status-list.is-bad:hover .rank-math-status-list__icon svg path{fill:#fff}",""]);const l=i},2181:function(t,e,n){"use strict";n.d(e,{A:function(){return l}});var r=n(1601),o=n.n(r),a=n(6314),i=n.n(a)()(o());i.push([t.id,':root{--rankmath-wp-adminbar-height: 0}.rank-math-tab-panel{margin-top:20px}.rank-math-tab-panel>.components-tab-panel__tabs,.rank-math-tab-panel>.components-tab-panel__tab-content{position:relative}.rank-math-tab-panel>.components-tab-panel__tabs{z-index:10;flex-wrap:wrap}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item{height:auto;padding:0 15px;border:1px solid #b5bfc9;border-right:0;color:#5b646c;background:#f0f2f4;font-size:15px;font-weight:500;line-height:39px}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item>a{color:inherit;text-decoration:none}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item::before,.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item::after{display:none}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item i{margin-right:9px}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item:hover,.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active{color:#1a1e22;background:#f8f9fa}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active{border-bottom-color:rgba(0,0,0,0)}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-external a{margin:0 -15px;padding:0 15px;box-shadow:none}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=horizontal] .components-tab-panel__tabs-item:first-child{border-radius:4px 0 0 0}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=horizontal] .components-tab-panel__tabs-item:last-child{border-right:1px solid #b5bfc9;border-radius:0 4px 0 0}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=horizontal]+.components-tab-panel__tab-content{padding:30px 20px 5.5rem 20px;margin-left:-20px;margin-top:-1px;border-top:1px solid #b5bfc9;border-bottom:1px solid #b5bfc9;background:#f8f9fa}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical]{display:flex;flex-direction:column}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs{min-width:200px}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item{color:#5b6065;background:#f8f9fa;font-weight:400;line-height:1;text-align:left;padding:11px 15px;cursor:pointer;transition:.2s all linear}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:hover,.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.is-active{color:#069de3;background:#fff}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:hover:not(.is-active):not(.separator){border-left:3px solid}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item .rm-icon{font-size:20px;margin-right:10px}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:first-child{border-radius:0}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:not(:last-child){border-bottom:0}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:last-child{border-right:0;border-radius:0 0 0 4px;border-bottom:1px solid #b5bfc9}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.is-active{border-left:3px solid}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.is-active::after{content:"";display:block;width:1px;height:100%;position:absolute;top:0;right:-1px;background:#fff;outline:none;outline-offset:unset;left:unset}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.separator{font-size:14px;font-weight:600;text-transform:capitalize;color:#5b6065;background:#e9ecef}@media screen and (max-width: 768px){.rank-math-tab-panel>.components-tab-panel__tabs{flex-direction:column;border:1px solid #b5bfc9;border-bottom:0;border-radius:4px 4px 0 0}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item{border:0;border-bottom:1px solid #b5bfc9 !important}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item:last-child{border-right:0}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active{border-bottom-color:#b5bfc9}}@media screen and (max-width: 368px){.rank-math-tab-panel>.components-tab-panel__tabs{margin-left:-20px;border-radius:0}.rank-math-tab-panel>.components-tab-panel__tabs .components-tab-panel__tabs-item{flex:auto;border-radius:0;border-right:0}}',""]);const l=i},6314:function(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n="",r=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),r&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),r&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n}).join("")},e.i=function(t,n,r,o,a){"string"==typeof t&&(t=[[null,t,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var c=this[l][0];null!=c&&(i[c]=!0)}for(var s=0;s<t.length;s++){var u=[].concat(t[s]);r&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]="@layer".concat(u[5].length>0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=a),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),e.push(u))}},e}},4417:function(t){"use strict";t.exports=function(t,e){return e||(e={}),t?(t=String(t.__esModule?t.default:t),/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),e.hash&&(t+=e.hash),/["'() \t\n]|(%20)/.test(t)||e.needQuotes?'"'.concat(t.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):t):t}},1601:function(t){"use strict";t.exports=function(t){return t[1]}},5072:function(t){"use strict";var e=[];function n(t){for(var n=-1,r=0;r<e.length;r++)if(e[r].identifier===t){n=r;break}return n}function r(t,r){for(var a={},i=[],l=0;l<t.length;l++){var c=t[l],s=r.base?c[0]+r.base:c[0],u=a[s]||0,m="".concat(s," ").concat(u);a[s]=u+1;var p=n(m),b={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==p)e[p].references++,e[p].updater(b);else{var d=o(b,r);r.byIndex=l,e.splice(l,0,{identifier:m,updater:d,references:1})}i.push(m)}return i}function o(t,e){var n=e.domAPI(e);n.update(t);return function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,o){var a=r(t=t||[],o=o||{});return function(t){t=t||[];for(var i=0;i<a.length;i++){var l=n(a[i]);e[l].references--}for(var c=r(t,o),s=0;s<a.length;s++){var u=n(a[s]);0===e[u].references&&(e[u].updater(),e.splice(u,1))}a=c}}},7659:function(t){"use strict";var e={};t.exports=function(t,n){var r=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540:function(t){"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056:function(t,e,n){"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7825:function(t){"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var a=n.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleTagTransform(r,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113:function(t){"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},4254:function(t){"use strict";t.exports="data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E"},976:function(t){"use strict";t.exports="data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23a0a5aa%22%2F%3E%3C%2Fsvg%3E"},2907:function(t){"use strict";t.exports="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.83%204.89l1.34.94-5.81%208.38H9.02L5.78%209.67l1.34-1.25%202.57%202.4z%27%20fill%3D%27%233582c4%27%2F%3E%3C%2Fsvg%3E"},1669:function(t){"use strict";t.exports=jQuery},8110:function(t){"use strict";t.exports=lodash},8303:function(t){"use strict";t.exports=window.rankMathComponents},2842:function(t){"use strict";t.exports=wp.apiFetch},8894:function(t){"use strict";t.exports=wp.compose},7562:function(t){"use strict";t.exports=wp.data},1386:function(t){"use strict";t.exports=wp.element},8566:function(t){"use strict";t.exports=wp.hooks},2470:function(t){"use strict";t.exports=wp.i18n},4011:function(t){"use strict";t.exports=wp.url},6942:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];n&&(t=i(t,a(n)))}return t}function a(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return o.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var n in t)r.call(t,n)&&t[n]&&(e=i(e,n));return e}function i(t,e){return e?t?t+" "+e:t+e:t}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var a=r[t]={id:t,exports:{}};return n[t](a,a.exports,o),a.exports}o.m=n,o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce(function(e,n){return o.f[n](t,e),e},[]))},o.u=function(t){return{445:"instantIndexingSettings",466:"generalSettings",612:"titleSettings",919:"sitemapSettings"}[t]+".js"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},t={},e="rank-math:",o.l=function(n,r,a,i){if(t[n])t[n].push(r);else{var l,c;if(void 0!==a)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var m=s[u];if(m.getAttribute("src")==n||m.getAttribute("data-webpack")==e+a){l=m;break}}l||(c=!0,(l=document.createElement("script")).charset="utf-8",o.nc&&l.setAttribute("nonce",o.nc),l.setAttribute("data-webpack",e+a),l.src=n),t[n]=[r];var p=function(e,r){l.onerror=l.onload=null,clearTimeout(b);var o=t[n];if(delete t[n],l.parentNode&&l.parentNode.removeChild(l),o&&o.forEach(function(t){return t(r)}),e)return e(r)},b=setTimeout(p.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=p.bind(null,l.onerror),l.onload=p.bind(null,l.onload),c&&document.head.appendChild(l)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b="undefined"!=typeof document&&document.baseURI||self.location.href;var t={179:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var a=new Promise(function(n,o){r=t[e]=[n,o]});n.push(r[2]=a);var i=o.p+o.u(e),l=new Error;o.l(i,function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var a=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;l.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",l.name="ChunkLoadError",l.type=a,l.request=i,r[1](l)}},"chunk-"+e,e)}};var e=function(e,n){var r,a,i=n[0],l=n[1],c=n[2],s=0;if(i.some(function(e){return 0!==t[e]})){for(r in l)o.o(l,r)&&(o.m[r]=l[r]);if(c)c(o)}for(e&&e(n);s<i.length;s++)a=i[s],o.o(t,a)&&t[a]&&t[a][0](),t[a]=0},n=self.webpackChunkrank_math=self.webpackChunkrank_math||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),o.nc=void 0,function(){"use strict";var t=o(1669),e=o.n(t),n=o(8110),r=o(6942),a=o.n(r);const i=wp.components;var l=o(1386),c=o(5072),s=o.n(c),u=o(7825),m=o.n(u),p=o(7659),b=o.n(p),d=o(5056),h=o.n(d),f=o(540),g=o.n(f),k=o(1113),y=o.n(k),v=o(5979),x={};x.styleTagTransform=y(),x.setAttributes=h(),x.insert=b().bind(null,"head"),x.domAPI=m(),x.insertStyleElement=g();s()(v.A,x);v.A&&v.A.locals&&v.A.locals;function w(t){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},w(t)}var _=["icon","variant","onClick","children","disabled","className","size"];function O(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function E(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?O(Object(n),!0).forEach(function(e){S(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function S(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=w(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=w(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==w(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const j=(0,l.forwardRef)(function(t,e){var n=t.icon,r=t.variant,o=t.onClick,l=t.children,c=t.disabled,s=t.className,u=t.size,m=void 0===u?"default":u,p=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,_);s=a()("button",s,"rank-math-button",r?"button-".concat(r):"",{"is-xlarge":"xlarge"===m,"is-large":"large"===m,"button-secondary":"remove-group"===r,"button-primary":"start-new-chat"===r});var b=E(E({},p),{},{ref:e,size:m,icon:n,variant:r,onClick:o,children:l,disabled:c,className:s,"aria-disabled":c});return wp.element.createElement(i.Button,b)});var A=o(5942),P={};P.styleTagTransform=y(),P.setAttributes=h(),P.insert=b().bind(null,"head"),P.domAPI=m(),P.insertStyleElement=g();s()(A.A,P);A.A&&A.A.locals&&A.A.locals;function C(t){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},C(t)}var N=["label","checked","variant","disabled","onChange","className","indeterminate"];function I(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function T(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?I(Object(n),!0).forEach(function(e){M(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function M(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=C(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=C(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==C(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const D=function(t){var e=t.label,n=t.checked,r=t.variant,o=t.disabled,l=t.onChange,c=t.className,s=t.indeterminate,u=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,N);c=a()(r,c,"rank-math-checkbox-control",{"is-indeterminate":s,"is-disabled":o});var m=T(T({},u),{},{label:e,checked:n,disabled:o,onChange:l,className:c,indeterminate:s,__nextHasNoMarginBottom:!0});return wp.element.createElement(i.CheckboxControl,m)};o.dn(D);var z=o(2470),L=o(4977),R={};R.styleTagTransform=y(),R.setAttributes=h(),R.insert=b().bind(null,"head"),R.domAPI=m(),R.insertStyleElement=g();s()(L.A,R);L.A&&L.A.locals&&L.A.locals;var B=["id","label"];function F(){return F=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},F.apply(null,arguments)}function U(t){return function(t){if(Array.isArray(t))return H(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return H(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const $=function(t){var e=t.value,r=void 0===e?[]:e,o=t.options,a=t.onChange,i=t.toggleAll,c=t.variant,s=void 0===c?"metabox":c,u=function(t){if(!(0,n.find)(o,function(e){return e.id===t}).disabled){var e=(0,n.includes)(r,t)?(0,n.filter)(r,function(e){return e!==t}):[].concat(U(r),[t]);a(e)}};return wp.element.createElement(React.Fragment,null,i&&wp.element.createElement(j,F({onClick:function(){var t=(0,n.filter)(o,function(t){return!t.disabled}),e=(0,n.map)(t,function(t){return t.id}),i=(0,n.map)((0,n.filter)(o,function(t){return t.disabled}),function(t){return t.id}),l=(0,n.every)(e,function(t){return(0,n.includes)(r,t)})?(0,n.filter)(r,function(t){return(0,n.includes)(i,t)}):[].concat(U(r),U((0,n.filter)(e,function(t){return!(0,n.includes)(r,t)})));a(l)},className:"field-multicheck-toggle",children:(0,z.__)("Select / Deselect All","seo-by-rank-math")},i)),wp.element.createElement("ul",{className:"rank-math-checkbox-list"},(0,n.map)(o,function(t){var e=t.id,o=t.label,a=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,B);return wp.element.createElement("li",{key:e},wp.element.createElement(D,F({},a,{variant:s,checked:(0,n.includes)(r,e),onChange:function(){return u(e)},label:wp.element.createElement(l.RawHTML,null,o)})))})))};o.dn($);var W=o(1412),G={};G.styleTagTransform=y(),G.setAttributes=h(),G.insert=b().bind(null,"head"),G.domAPI=m(),G.insertStyleElement=g();s()(W.A,G);W.A&&W.A.locals&&W.A.locals;function V(t){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},V(t)}var K=["label","variant","options","selected","disabled","onChange","className"];function Y(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Z(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Y(Object(n),!0).forEach(function(e){q(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function q(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=V(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=V(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==V(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const J=function(t){var e=t.label,n=t.variant,r=t.options,o=t.selected,l=t.disabled,c=t.onChange,s=t.className,u=void 0===s?"":s,m=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,K);u=a()(u,n,"rank-math-radio-control");var p=Z(Z({},m),{},{label:e,options:r,selected:o,onChange:c,disabled:l,className:u,__nextHasNoMarginBottom:!0});return wp.element.createElement(i.RadioControl,p)};o.dn(J);var X=o(3401),Q={};Q.styleTagTransform=y(),Q.setAttributes=h(),Q.insert=b().bind(null,"head"),Q.domAPI=m(),Q.insertStyleElement=g();s()(X.A,Q);X.A&&X.A.locals&&X.A.locals;function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}var et=["label","onChange","disabled","checked","className"];function nt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function rt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?nt(Object(n),!0).forEach(function(e){ot(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):nt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function ot(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=tt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=tt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==tt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const at=function(t){var e=t.label,n=t.onChange,r=t.disabled,o=t.checked,a=t.className,l=void 0===a?"":a,c=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,et),s=rt(rt({},c),{},{label:e,onChange:n,disabled:r,checked:o,className:"rank-math-toggle-control ".concat(l," ").concat(e?"":"hide-label"),__nextHasNoMarginBottom:!0});return wp.element.createElement(i.ToggleControl,s)};o.dn(at);var it=o(8894),lt=o(7562);function ct(t){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ct(t)}var st=["id","type","content","Component","isDisabled","default"];function ut(){return ut=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},ut.apply(null,arguments)}function mt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function pt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mt(Object(n),!0).forEach(function(e){bt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function bt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=ct(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ct(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function dt(t){return function(t){if(Array.isArray(t))return ht(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return ht(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ht(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ht(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const ft=(0,it.compose)((0,lt.withDispatch)(function(t,e){var n=e.settings;return{updateSetting:function(e,r){n[e]=r,t("rank-math-settings").updateData(pt({},n))}}}))(function(t){var e=t.field,r=t.settingType,o=t.settings,a=t.value,i=e.id,c=e.type,s=e.content,u=e.Component,m=e.isDisabled,p=e.default,b=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(e,st);(0,n.isUndefined)(a)&&(a=(0,n.isUndefined)(o)||(0,n.isUndefined)(o[i])?p:o[i]),(0,n.includes)(["disable_author_archives","opening_hours_format"],i)&&(0,n.isBoolean)(a)&&t.updateSetting(i,!1===a?"off":"on"),(0,n.includes)(["disable_author_archives"],i)&&""===a&&t.updateSetting(i,p),(0,n.endsWith)(i,"_bulk_editing")&&!(0,n.isString)(a)&&(a=String(a)),!(0,n.endsWith)(i,"_default_rich_snippet")||""!==a&&!1!==a||(a="off");var d=function(e){if(((0,n.endsWith)(i,"_robots")||"robots_global"===i)&&(0,n.isArray)(e)&&((0,n.includes)(e,"index")||(0,n.includes)(e,"noindex")||(0,n.includes)(a||[],"index")||(0,n.includes)(a||[],"noindex"))){var r=a||[],o=(0,n.includes)(e,"index"),l=(0,n.includes)(e,"noindex"),s=(0,n.includes)(r,"index"),u=(0,n.includes)(r,"noindex");if(s&&!o)e=[].concat(dt(e),["noindex"]);else if(u&&!l)e=[].concat(dt(e),["index"]);else if(o&&l){var m=(0,n.last)(e);e=(0,n.filter)(e,function(t){return"index"===m?"noindex"!==t:"index"!==t})}}"file"===c?((0,n.isEmpty)(e)&&(e={url:"",id:""}),t.updateSetting(i,e.url),t.updateSetting(i+"_id",e.id)):t.updateSetting(i,e)},h=function(){var t={toggle:"checked",checkbox:"checked"}[c]||"value",e=(0,n.includes)(["component","group"],c);return pt(pt(pt({},b),{},bt(bt({id:i},t,b.value||a),"onChange",b.onChange||!m&&d),e&&{settingType:r}),b.attributes)},f={file:window.rankMathComponents.UploadFile,text:window.rankMathComponents.TextControl,select:window.rankMathComponents.SelectControl,toggle:window.rankMathComponents.ToggleControl,select_search:window.rankMathComponents.SelectWithSearch,multicheck:window.rankMathComponents.CheckboxList,multicheck_inline:window.rankMathComponents.CheckboxList,radio_inline:window.rankMathComponents.ToggleGroupControl,repeatable_group:window.rankMathComponents.RepeatableGroup,selectSearch:window.rankMathComponents.SelectWithSearch,searchPage:window.rankMathComponents.SearchPage,checkboxlist:window.rankMathComponents.CheckboxList,toggleGroup:window.rankMathComponents.ToggleGroupControl,repeatableGroup:window.rankMathComponents.RepeatableGroup,group:window.rankMathComponents.Group,checkbox:window.rankMathComponents.CheckboxControl,textarea:window.rankMathComponents.TextareaControl,notice:window.rankMathComponents.Notice,selectVariable:window.rankMathComponents.SelectVariable,button:window.rankMathComponents.Button}[c],g="group"===c?{onChange:t.updateSetting}:{};return f?wp.element.createElement(f,ut({},h(),{settings:o},g)):"component"===c?wp.element.createElement(u,h()):"raw"===c?wp.element.createElement(l.RawHTML,null,s):null}),gt=function(t){var e,r=t.id,o=t.fields,a=t.settings,i=t.settingType,l=t.onChange,c=null!==(e=a[r])&&void 0!==e?e:{};return(0,n.map)(o,function(t,e){var o=t.id,s=(0,n.isUndefined)(c)||(0,n.isUndefined)(c[o])?void 0:c[o];return t.onChange=function(t){c[o]=t,l(r,c)},wp.element.createElement("div",{key:e,className:"rank-math-group-field"},wp.element.createElement(ft,{settingType:i,field:t,settings:a,value:s}))})};o.dn(gt);var kt=o(2265),yt={};yt.styleTagTransform=y(),yt.setAttributes=h(),yt.insert=b().bind(null,"head"),yt.domAPI=m(),yt.insertStyleElement=g();s()(kt.A,yt);kt.A&&kt.A.locals&&kt.A.locals;function vt(t){return vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vt(t)}function xt(){return xt=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},xt.apply(null,arguments)}function wt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function _t(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?wt(Object(n),!0).forEach(function(e){Ot(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):wt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Ot(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=vt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=vt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==vt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Et(t){return function(t){if(Array.isArray(t))return St(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return St(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?St(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function St(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const jt=function(t){var e=t.id,r=t.value,o=t.onChange,a=t.options,i=t.fields,c=t.className,s=void 0===c?"":c,u=t.default,m=void 0===u?{}:u;s="field-repeatable-grouping ".concat(s);var p=a.addButton,b=a.removeButton,d=function(){var t=[].concat(Et(r),[m]);o(t)},h=function(t,e,a){var i=(0,n.map)(r,function(r,o){var i=a.id;return e===o?"file"===a.type?((r=(0,n.isEmpty)(r)?{}:r)[i]=t.url,r[i+"_id"]=t.id,r):_t(_t({},r),{},Ot({},i,t)):r});o(i)};return(0,l.useEffect)(function(){(0,n.isUndefined)(r)||0!==r.length||d()},[r]),wp.element.createElement(React.Fragment,null,(0,n.map)(r,function(t,a){return wp.element.createElement("div",{key:a,className:s},(0,n.map)(i,function(i){var l="".concat(e,"_").concat(a,"_").concat(i.id),c=_t(_t({},i),{},{id:l,value:t[i.id]||"",onChange:function(t){return h(t,a,i)},onPaste:function(t){return function(t,e,a){if(!r[e][a]){t.preventDefault();var i=t.clipboardData.getData("text"),l=(0,n.filter)((0,n.split)(i,"\n"),Boolean);if(!(l.length<1)){var c=Et(r);c[e]=_t(_t({},c[e]),{},Ot({},a,l[0]));var s=(0,n.map)((0,n.slice)(l,1),function(t){return _t(_t({},c[e]),{},Ot({},a,t))}),u=e+1;o([].concat(Et((0,n.slice)(c,0,u)),Et(s),Et((0,n.slice)(c,u))))}}}(t,a,i.id)}});return wp.element.createElement("div",{key:l,className:"group-item group-item-".concat(i.type)},wp.element.createElement(ft,{field:c}))}),b&&wp.element.createElement(j,xt({},b,{variant:"remove-group",onClick:function(){return t=a,e=(0,n.filter)(r,function(e,n){return n!==t}),void o(e);var t,e}})))}),p&&wp.element.createElement(j,xt({onClick:d},p)))};o.dn(jt);var At=o(6189),Pt={};Pt.styleTagTransform=y(),Pt.setAttributes=h(),Pt.insert=b().bind(null,"head"),Pt.domAPI=m(),Pt.insertStyleElement=g();s()(At.A,Pt);At.A&&At.A.locals&&At.A.locals;function Ct(t){return Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ct(t)}var Nt=["value","onChange","className","type","variant"];function It(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Tt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?It(Object(n),!0).forEach(function(e){Mt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):It(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Mt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Ct(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ct(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Dt=function(t){var e,n=t.value,r=t.onChange,o=t.className,l=t.type,c=void 0===l?"text":l,s=t.variant,u=void 0===s?"regular-text":s,m=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Nt);o=a()(u,o,"rank-math-text-control",{"no-value":!(null!=n&&null!==(e=n.toString())&&void 0!==e&&e.trim())});var p=Tt(Tt({},m),{},{type:c,value:n,onChange:r,className:o,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0});return wp.element.createElement(i.TextControl,p)};function zt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Lt(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Lt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Lt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Dt);const Rt=function(){var t=zt((0,l.useState)(!1),2),e=t[0],n=t[1],r=(0,l.useRef)(null);return(0,l.useEffect)(function(){var t=function(t){var e=t.target;e&&r.current&&!r.current.contains(e)&&n(!1)};return document.addEventListener("mousedown",t),function(){document.removeEventListener("mousedown",t)}},[]),[e,n,r]};o.dn(Rt);var Bt=o(9917),Ft={};Ft.styleTagTransform=y(),Ft.setAttributes=h(),Ft.insert=b().bind(null,"head"),Ft.domAPI=m(),Ft.insertStyleElement=g();s()(Bt.A,Ft);Bt.A&&Bt.A.locals&&Bt.A.locals;var Ut=["value","onChange","inputProps"];function Ht(){return Ht=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Ht.apply(null,arguments)}function $t(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Wt(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Gt=function(t){var e=t.value,r=t.onChange,o=t.inputProps,a=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Ut),l=$t(Rt(),3),c=l[0],s=l[1],u=l[2];return wp.element.createElement("div",{ref:u,className:"rank-math-date-picker ".concat(c?"show-date-picker":"hide-date-picker")},wp.element.createElement(Dt,Ht({},o,{value:e,onChange:r,onClick:function(){return s(!0)},onKeyDown:function(t){(0,n.includes)(["0","1","2","3","4","5","6","7","8","9","-","Backspace","ArrowLeft","ArrowRight"],t.key)||t.preventDefault()},onBlur:function(t){var e=t.target.value;if(/^\d{4}-\d{2}-\d{2}$/.test(e)){var a=$t((0,n.map)((0,n.split)(e,"-"),Number),3),i=a[0],l=a[1],c=a[2],s=new Date(i,l-1,c);s.getFullYear()===i&&s.getMonth()===l-1&&s.getDate()===c?o.onBlur(t):r("")}else r("")}})),wp.element.createElement(i.DatePicker,Ht({},a,{onChange:function(t){var e=t.split("T")[0];s(!1),r(e)}})))};o.dn(Gt);var Vt=o(1530),Kt={};Kt.styleTagTransform=y(),Kt.setAttributes=h(),Kt.insert=b().bind(null,"head"),Kt.domAPI=m(),Kt.insertStyleElement=g();s()(Vt.A,Kt);Vt.A&&Vt.A.locals&&Vt.A.locals;function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}var Zt=["help","value","label","disabled","placeholder","className","onChange","variant","rows","cols"];function qt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?qt(Object(n),!0).forEach(function(e){Xt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):qt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Xt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Yt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Yt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Qt=function(t){var e=t.help,n=t.value,r=t.label,o=t.disabled,l=t.placeholder,c=t.className,s=t.onChange,u=t.variant,m=void 0===u?"metabox":u,p=t.rows,b=void 0===p?4:p,d=t.cols,h=void 0===d?30:d,f=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Zt);c=a()(m,c,"rank-math-textarea-control");var g=Jt(Jt({},f),{},{rows:b,cols:h,help:e,value:n,label:r,onChange:s,disabled:o,placeholder:l,className:c,__nextHasNoMarginBottom:!0});return wp.element.createElement(i.TextareaControl,g)};o.dn(Qt);var te=o(3523),ee={};ee.styleTagTransform=y(),ee.setAttributes=h(),ee.insert=b().bind(null,"head"),ee.domAPI=m(),ee.insertStyleElement=g();s()(te.A,ee);te.A&&te.A.locals&&te.A.locals;var ne=["fields","size","type","className","addHeader","useThOnly"];function re(){return re=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},re.apply(null,arguments)}function oe(t){return function(t){if(Array.isArray(t))return ae(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return ae(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ae(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ae(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const ie=function(t){var e=t.fields,r=t.size,o=t.type,i=void 0===o?"striped":o,c=t.className,s=t.addHeader,u=void 0===s||s,m=t.useThOnly,p=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,ne);c=a()("rank-math-table wp-list-table widefat",c,r,{striped:"striped"===i});var b=u?e[0]:null,d=u?(0,n.slice)(e,1):e,h=m?"th":"td",f=u?b.length:Math.max.apply(Math,oe(e.map(function(t){return t.length})));return wp.element.createElement("table",re({className:c},p),wp.element.createElement("thead",null,wp.element.createElement("tr",{className:"bg-gray-100"},(0,n.map)(b,function(t,e){return wp.element.createElement("th",{key:e},t)}))),wp.element.createElement("tbody",null,(0,n.map)(d,function(t,e){var r=t.length,o=r-1,a=r<f;return wp.element.createElement("tr",{key:e},(0,n.map)(t,function(t,e){var n=e===o&&a;return wp.element.createElement(h,{key:e,colSpan:n?f-e:void 0},(0,l.isValidElement)(t)?t:wp.element.createElement(l.RawHTML,null,t))}))})))};o.dn(ie);var le=o(1266),ce={};ce.styleTagTransform=y(),ce.setAttributes=h(),ce.insert=b().bind(null,"head"),ce.domAPI=m(),ce.insertStyleElement=g();s()(le.A,ce);le.A&&le.A.locals&&le.A.locals;function se(t){return se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},se(t)}var ue=["icon","children","onRemove","className","actions","status","variant","politeness","isDismissible"];function me(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function pe(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?me(Object(n),!0).forEach(function(e){be(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):me(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function be(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=se(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=se(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==se(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const de=function(t){var e=t.icon,n=t.children,r=t.onRemove,o=t.className,l=t.actions,c=void 0===l?[]:l,s=t.status,u=void 0===s?"info":s,m=t.variant,p=void 0===m?"default":m,b=t.politeness,d=void 0===b?"polite":b,h=t.isDismissible,f=void 0!==h&&h,g=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,ue);o=a()(o,"rank-math-notice",{"has-icon":e,"is-alt":"alt"===p});var k=pe(pe({},g),{},{status:u,actions:c,onRemove:r,className:o,politeness:d,isDismissible:f});return"message"===u?n:wp.element.createElement(i.Notice,k,e&&wp.element.createElement("span",{className:"rank-math-notice__icon"},e),n)};o.dn(de);const he=function(t){if(!t.isSiteUrlValid)return wp.element.createElement(de,{status:"warning",className:"notice-connect-disabled"},wp.element.createElement(l.RawHTML,null,(0,z.sprintf)((0,z.__)("Rank Math cannot be connected because your site URL doesn't appear to be a valid URL. If the domain name contains special characters, please make sure to use the encoded version in the %1$s &amp; %2$s fields on the %3$s page.","seo-by-rank-math"),"<strong>".concat((0,z.__)("WordPress Address (URL)","seo-by-rank-math"),"</strong>"),"<strong>".concat((0,z.__)("Site Address (URL)","seo-by-rank-math"),"</strong>"),'<a href="'.concat(window.location.origin,'/wp-admin/options-general.php" target="_blank">').concat((0,z.__)("WordPress General Settings","seo-by-rank-math"),"</a>"))))};o.dn(he);var fe=o(776),ge={};ge.styleTagTransform=y(),ge.setAttributes=h(),ge.insert=b().bind(null,"head"),ge.domAPI=m(),ge.insertStyleElement=g();s()(fe.A,ge);fe.A&&fe.A.locals&&fe.A.locals;function ke(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ye(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ye(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ye(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const ve=function(t){var e=t.text,n=t.children,r=t.className,o=t.isBlock,c=void 0!==o&&o,s=t.placement,u=void 0===s?"top":s,m=ke((0,l.useState)(!1),2),p=m[0],b=m[1];r=a()(r,"rank-math-tooltip-container",{"is-inline":c});var d=a()(u,"rank-math-tooltip-popover",{"is-visible":p}),h=function(){b(function(t){return!t})};return wp.element.createElement("div",{className:r,onMouseEnter:h,onMouseLeave:h},n,e&&wp.element.createElement(i.Popover,{offset:8,shift:!0,noArrow:!1,placement:u,className:d},e))};o.dn(ve);const xe=function(t){var e=t.text;return wp.element.createElement(ve,{text:e},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}))};o.dn(xe);var we=o(8809),_e=["className"];function Oe(){return Oe=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Oe.apply(null,arguments)}const Ee=function(t){var e=t.className,n=void 0===e?"":e,r=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,_e);return wp.element.createElement("div",Oe({},r,{id:"rank-math-pro-cta",className:"rank-math-privacy-box ".concat(n)}),wp.element.createElement("div",{className:"rank-math-cta-table"},wp.element.createElement("div",{className:"rank-math-cta-body less-padding"},wp.element.createElement("i",{className:"dashicons dashicons-lock"}),wp.element.createElement("p",{dangerouslySetInnerHTML:{__html:(0,z.sprintf)((0,z.__)("We do not store any of the data from your Google account on our servers, everything is processed & stored on your server. We take your privacy extremely seriously and ensure it is never misused. %s","seo-by-rank-math"),'<a href="'.concat((0,we.A)("usage-policy","Analytics Privacy Notice"),'" target="_blank" rel="noopener noreferrer">').concat((0,z.__)("Learn more.","seo-by-rank-math"),"</a>"))}}))))};o.dn(Ee);const Se=function(t){var e=t.href;return wp.element.createElement("span",{className:"rank-math-pro-badge"},wp.element.createElement("a",{href:e,target:"_blank",rel:"noopener noreferrer"},(0,z.__)("PRO","seo-by-rank-math")))};o.dn(Se);var je=o(4800),Ae={};Ae.styleTagTransform=y(),Ae.setAttributes=h(),Ae.insert=b().bind(null,"head"),Ae.domAPI=m(),Ae.insertStyleElement=g();s()(je.A,Ae);je.A&&je.A.locals&&je.A.locals;var Pe=["value","onChange","className"];function Ce(){return Ce=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Ce.apply(null,arguments)}function Ne(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Ie(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ie(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ie(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Te=function(t){t.value;var e=t.onChange,n=t.className,r=void 0===n?"":n,o=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Pe),a=Ne((0,l.useState)({face:"",num:""}),2),c=a[0],s=a[1],u=function(){s({face:"",num:""})};return wp.element.createElement("div",Ce({},o,{className:"rank-math-rating ".concat(r)}),wp.element.createElement("div",{className:"rank-math-rating__stars"},Array.from({length:5},function(t,n){return wp.element.createElement(i.Button,{key:n,onMouseOut:u,onMouseOver:function(){return function(t){var e=t+1;s(t<2?{face:"angry",num:e}:t>=2&&t<4?{face:"normal",num:e}:{face:"happy",num:e})}(n)},onClick:function(){return e(n+1)},icon:wp.element.createElement(i.Icon,{icon:"star-filled"}),className:n<c.num&&"highlighted"})})),wp.element.createElement("div",{className:"rank-math-rating__face"},wp.element.createElement("div",{className:"smiley ".concat(c.face)},wp.element.createElement("div",{className:"eyes"},wp.element.createElement("span",{className:"eye"}),wp.element.createElement("span",{className:"eye"})),wp.element.createElement("div",{className:"mouth"}))))};o.dn(Te);var Me=o(4011);function De(t){var e,n,r="";if("string"==typeof t||"number"==typeof t)r+=t;else if("object"==typeof t)if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(n=De(t[e]))&&(r&&(r+=" "),r+=n)}else for(n in t)t[n]&&(r&&(r+=" "),r+=n);return r}const ze=function(){for(var t,e,n=0,r="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=De(t))&&(r&&(r+=" "),r+=e);return r};const Le=t=>(0,l.createElement)("path",t),Re=t=>(0,l.createElement)("rect",t),Be=(0,l.forwardRef)(({className:t,isPressed:e,...n},r)=>{const o={...n,className:ze(t,{"is-pressed":e})||void 0,"aria-hidden":!0,focusable:!1};return(0,l.createElement)("svg",{...o,ref:r})});function Fe(t){var e=t.height,n=void 0===e?16:e,r=t.width,o=void 0===r?16:r,a=t.style,i=void 0===a?{}:a;return wp.element.createElement(Be,{viewBox:"0 0 32 32",fill:"none",height:n,width:o,style:i},wp.element.createElement(Re,{width:"32",height:"32",fill:"none"}),wp.element.createElement(Le,{d:"M17.9686 14.1623L26.7065 4H24.6358L17.0488 12.8238L10.9891 4H4L13.1634 17.3432L4 28H6.07069L14.0827 18.6817L20.4822 28H27.4714L17.9681 14.1623H17.9686ZM15.1326 17.4607L14.2041 16.132L6.81679 5.55961H9.99723L15.9589 14.0919L16.8873 15.4206L24.6368 26.5113H21.4564L15.1326 17.4612V17.4607Z",fill:"currentColor"}))}Be.displayName="SVG",o.dn(Fe);const Ue=function(t){if(!t.isWhitelabel){var e=(0,we.A)("logo","Setup Wizard Tweet Button"),n=(0,we.A)("logo","Facebook"),r=(0,z.sprintf)((0,z.__)("I just installed @RankMathSEO #WordPress Plugin. It looks great! %s","seo-by-rank-math"),e),o=(0,z.__)("I just installed Rank Math SEO WordPress Plugin. It looks promising!","seo-by-rank-math"),a=(0,Me.addQueryArgs)("https://www.facebook.com/sharer/sharer.php",{u:n,quote:o,caption:(0,z.__)("SEO by Rank Math","seo-by-rank-math")}),i=(0,Me.addQueryArgs)("https://twitter.com/intent/tweet",{text:r,hashtags:"SEO"}),l=function(t,e){t.preventDefault(),window.open(e,"sharewindow","resizable,width=600,height=300")};return wp.element.createElement("span",{className:"wizard-share"},wp.element.createElement("a",{href:"##",onClick:function(t){return l(t,i)},className:"share-twitter"},wp.element.createElement(Fe,{height:12,width:12})," ",(0,z.__)("Tweet","seo-by-rank-math")),wp.element.createElement("a",{href:"##",onClick:function(t){return l(t,a)},className:"share-facebook"},wp.element.createElement("span",{className:"dashicons dashicons-facebook-alt"})," ",(0,z.__)("Share","seo-by-rank-math")))}};o.dn(Ue);var He=o(8474),$e={};$e.styleTagTransform=y(),$e.setAttributes=h(),$e.insert=b().bind(null,"head"),$e.domAPI=m(),$e.insertStyleElement=g();s()(He.A,$e);He.A&&He.A.locals&&He.A.locals;const We=function(t){var e=t.value,r=t.onChange,o=t.name,a=t.description,i=t.buttonText,l=wp.media({title:o,multiple:!1,library:{type:"image"},button:{text:(0,z.__)("Use this file","seo-by-rank-math")}});return l.on("select",function(){var t=l.state().get("selection").first().toJSON();r(t)}),wp.element.createElement(React.Fragment,null,wp.element.createElement(j,{variant:"secondary",onClick:function(){return l.open()}},null!=i?i:(0,z.__)("Add or Upload File","seo-by-rank-math")),a&&wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:a}}),!(0,n.isEmpty)(e)&&wp.element.createElement("div",{className:"media-status"},wp.element.createElement("div",{className:"img-status media-item"},wp.element.createElement("img",{width:350,height:196,src:e,alt:""}),wp.element.createElement(j,{className:"remove-file-button",onClick:function(){return r({})}}))))};o.dn(We);var Ge=o(8683),Ve={};Ve.styleTagTransform=y(),Ve.setAttributes=h(),Ve.insert=b().bind(null,"head"),Ve.domAPI=m(),Ve.insertStyleElement=g();s()(Ge.A,Ve);Ge.A&&Ge.A.locals&&Ge.A.locals;function Ke(t){return Ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ke(t)}var Ye=["value","options","onChange","className","disabled","variant","disabledOptions"];function Ze(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function qe(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ze(Object(n),!0).forEach(function(e){Je(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Je(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Ke(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ke(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ke(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Xe(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Qe(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qe(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const tn=function(t){var e=t.value,r=t.options,o=t.onChange,l=t.className,c=t.disabled,s=void 0!==c&&c,u=t.variant,m=void 0===u?"metabox":u,p=t.disabledOptions,b=void 0===p?[]:p,d=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Ye);l=a()(l,"rank-math-select-control",{"is-disabled":s,"is-metabox":"metabox"===m});var h=(0,n.map)((0,n.entries)(r),function(t){var e=Xe(t,2),r=e[0];return{value:r,label:e[1],disabled:(0,n.includes)(b,r)}}),f=qe(qe({},d),{},{value:e,onChange:o,disabled:s,className:l,options:h,__nextUnconstrainedWidth:!0,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0});return wp.element.createElement(i.SelectControl,f)};o.dn(tn);var en=o(4310),nn={};nn.styleTagTransform=y(),nn.setAttributes=h(),nn.insert=b().bind(null,"head"),nn.domAPI=m(),nn.insertStyleElement=g();s()(en.A,nn);en.A&&en.A.locals&&en.A.locals;function rn(t){return rn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rn(t)}var on=["as","value","label","style","options","onChange","inputProps","className","disabled","showPreview"];function an(){return an=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},an.apply(null,arguments)}function ln(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function cn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ln(Object(n),!0).forEach(function(e){sn(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ln(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function sn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=rn(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=rn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==rn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function un(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return mn(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mn(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var pn=function(t,e){var r;if(t)return r=t,(0,n.forEach)(rankMath.variables,function(t,e){if(t.example){var n=new RegExp("\\([a-z]+\\)","g");e=e.replace(n,"\\(.*?\\)"),r=r.replace(new RegExp("%+"+e+"%+","g"),t.example)}}),60<(t=r).length&&(0<=e.indexOf("title")||0<=e.indexOf("_name"))?t=t.substring(0,60)+"...":160<t.length&&(0<=e.indexOf("description")||0<=e.indexOf("_desc"))&&(t=t.substring(0,160)+"..."),wp.element.createElement("div",{className:"rank-math-variables-preview","data-title":"Example"},t)};const bn=(0,l.forwardRef)(function(t,e){var r,o=t.as,c=t.value,s=void 0===c?"":c,u=(t.label,t.style,t.options,t.onChange),m=t.inputProps,p=t.className,b=void 0===p?"":p,d=t.disabled,h=void 0!==d&&d,f=t.showPreview,g=void 0===f||f,k=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,on),y=un((0,l.useState)(""),2),v=y[0],x=y[1],w=un(Rt(),3),_=w[0],O=w[1],E=w[2],S=null!=e?e:E,A=null!==(r=k.exclude)&&void 0!==r?r:[],P=(0,l.useMemo)(function(){var t=(0,n.lowerCase)(v);return(0,n.filter)(rankMath.variables,function(e){var r=e.name,o=e.variable,a=e.description;return!(0,n.includes)(A,o)&&((0,n.includes)((0,n.lowerCase)(r),t)||(0,n.includes)((0,n.lowerCase)(o),t)||(0,n.includes)((0,n.lowerCase)(a),t))})},[v,A]),C=cn(cn({value:s,onChange:u,disabled:h},m),{},{__next40pxDefaultSize:!0}),N=cn(cn({},k),{},{ref:S,"aria-disabled":h,className:"rank-math-select-variable ".concat(b)});return wp.element.createElement("div",N,wp.element.createElement("div",{className:"select-input","aria-expanded":_},"textarea"===o?wp.element.createElement(Qt,an({rows:2,variant:"metabox"},C)):wp.element.createElement(Dt,an({variant:"regular-text"},C)),wp.element.createElement(j,{variant:"secondary",disabled:h,icon:wp.element.createElement(i.Icon,{icon:"arrow-down-alt2"}),onClick:function(){return O(function(t){return!t})}})),_&&wp.element.createElement("div",{className:a()("select-menu",{"is-textarea-menu":"textarea"===o})},wp.element.createElement(i.SearchControl,{__nextHasNoMarginBottom:!0,value:v,onChange:x,placeholder:(0,z.__)("Search â€¦","seo-by-rank-math")}),P.length>0?wp.element.createElement("ul",{tabIndex:"-1",role:"listbox","aria-hidden":"false","aria-expanded":_},(0,n.map)(P,function(t){var e=t.name,n=t.variable,r=t.description;return wp.element.createElement("li",{role:"option",key:n,"data-value":n,tabIndex:0,onClick:function(){return t="%".concat(n,"%"),u("".concat(s," ").concat(t)),O(!1),void x("");var t},onKeyDown:void 0},wp.element.createElement("div",null,wp.element.createElement("strong",null,e),wp.element.createElement("p",null,"%",n,"%")),wp.element.createElement(l.RawHTML,{className:"description"},r))})):wp.element.createElement("span",{className:"no-results"})),g&&pn(s,k.id))});var dn=o(6066),hn={};hn.styleTagTransform=y(),hn.setAttributes=h(),hn.insert=b().bind(null,"head"),hn.domAPI=m(),hn.insertStyleElement=g();s()(dn.A,hn);dn.A&&dn.A.locals&&dn.A.locals;function fn(t){return fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fn(t)}var gn=["value","style","label","options","onChange","width","className","disabled"];function kn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function yn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?kn(Object(n),!0).forEach(function(e){vn(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):kn(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function vn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=fn(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=fn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==fn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function xn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return wn(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?wn(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function wn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const _n=(0,l.forwardRef)(function(t,e){var r=t.value,o=t.style,a=t.label,c=t.options,s=t.onChange,u=t.width,m=void 0===u?"100%":u,p=t.className,b=void 0===p?"":p,d=t.disabled,h=void 0!==d&&d,f=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,gn),g=xn((0,l.useState)(""),2),k=g[0],y=g[1],v=xn(Rt(),3),x=v[0],w=v[1],_=v[2],O=null!=e?e:_,E=c[r],S=(0,n.map)((0,n.entries)(c),function(t){var e=xn(t,2);return{key:e[0],name:e[1]}}),j=(0,n.filter)(S,function(t){var e=t.name;return(0,n.includes)((0,n.lowerCase)(e),(0,n.lowerCase)(k))}),A=yn(yn({},f),{},{ref:O,style:yn({width:m},o),className:"rank-math-select-with-searchbox ".concat(b)});return(0,l.useEffect)(function(){if(x&&O.current){var t=O.current.querySelector('.select-menu ul li[aria-selected="true"]');t&&t.scrollIntoView({behavior:"auto",block:"nearest"})}},[x]),wp.element.createElement("div",A,a&&wp.element.createElement("label",{htmlFor:"select-menu"},a),wp.element.createElement(i.Button,{variant:"secondary",disabled:h,"aria-expanded":x,onClick:function(){return w(function(t){return!t})}},wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:E}})),x&&wp.element.createElement("div",{className:"select-menu"},wp.element.createElement(i.SearchControl,{__nextHasNoMarginBottom:!0,value:k,onChange:y,placeholder:null,autoFocus:!0}),j.length>0?wp.element.createElement("ul",{tabIndex:"-1",role:"listbox","aria-hidden":"false","aria-expanded":x},(0,n.map)(j,function(t){var e=t.key,n=t.name;return wp.element.createElement("li",{key:e,role:"option","aria-hidden":"true","aria-selected":e===r,onClick:function(){return s(e),w(!1),void y("")}},wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:n}}))})):wp.element.createElement("span",{className:"no-results"},(0,z.__)("No results found","seo-by-rank-math"))))});var On=o(2842),En=o.n(On);const Sn=React,jn=(0,Sn.createElement)(Be,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,Sn.createElement)(Le,{d:"M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"}));function An(t){return An="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},An(t)}var Pn=["value","style","label","onChange","width","className","disabled","selectedPage"];function Cn(){return Cn=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Cn.apply(null,arguments)}function Nn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function In(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Nn(Object(n),!0).forEach(function(e){Tn(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Nn(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Tn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=An(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=An(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==An(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Mn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Dn(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dn(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const zn=(0,l.forwardRef)(function(t,e){var r=t.value,o=t.style,a=t.label,c=t.onChange,s=t.width,u=void 0===s?"100%":s,m=t.className,p=void 0===m?"":m,b=t.disabled,d=void 0!==b&&b,h=t.selectedPage,f=void 0===h?null:h,g=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Pn),k=Mn((0,l.useState)(""),2),y=k[0],v=k[1],x=Mn((0,l.useState)([]),2),w=x[0],_=x[1],O=Mn((0,l.useState)(f),2),E=O[0],S=O[1],j=Mn(Rt(),3),A=j[0],P=j[1],C=j[2],N=null!=e?e:C;(0,l.useEffect)(function(){if(!(y.length<2)){var t=(0,n.debounce)(function(t){En()({path:"/rankmath/v1/searchPage?searchedTerm=".concat(encodeURIComponent(t))}).then(function(t){if(null!=t&&t.results){var e=(0,n.map)(t.results,function(t){var e=t.id,n=t.text,r=t.url;return{id:String(e),name:n,url:r}});_(e)}else _([])}).catch(function(t){"AbortError"!==t.name&&console.error((0,z.__)("Search fetch failed:","seo-by-rank-math"),t)})},300);return t(y),function(){t.cancel()}}_([])},[y]);var I=function(){c(""),S(null),P(!1),v(""),_([])},T=(0,n.filter)(w,function(t){var e=t.name;return(0,n.includes)((0,n.lowerCase)(e),(0,n.lowerCase)(y))});return wp.element.createElement("div",Cn({},g,{ref:N,style:In({width:u},o),className:"rank-math-select-with-searchbox ".concat(p)}),a&&wp.element.createElement("label",{htmlFor:"select-menu"},a),wp.element.createElement(i.Button,{className:"select-toggle",variant:"secondary",disabled:d,"aria-expanded":A,onClick:function(){return P(function(t){return!t})}},wp.element.createElement("span",{className:"select-label",dangerouslySetInnerHTML:{__html:(null==E?void 0:E.name)||(0,z.__)("Select Page","seo-by-rank-math")}}),!!E&&wp.element.createElement("span",{className:"clear-selection-icon",role:"button","aria-label":(0,z.__)("Clear selection","seo-by-rank-math"),tabIndex:0,onMouseDown:function(t){return t.preventDefault()},onClick:function(t){t.stopPropagation(),I()},onKeyDown:function(t){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),t.stopPropagation(),I())}},wp.element.createElement(i.Icon,{icon:jn,size:4}))),A&&wp.element.createElement("div",{className:"select-menu"},wp.element.createElement(i.SearchControl,{__nextHasNoMarginBottom:!0,value:y,onChange:v,placeholder:(0,z.__)("Select New Pageâ€¦","seo-by-rank-math"),autoFocus:!0}),y.length<2?wp.element.createElement("span",{className:"no-results"},(0,z.__)("Please enter 2 or more characters","seo-by-rank-math")):(0,n.isEmpty)(T)?wp.element.createElement("span",{className:"no-results"},(0,z.__)("No results found","seo-by-rank-math")):wp.element.createElement("ul",{tabIndex:"-1",role:"listbox","aria-hidden":"false","aria-expanded":A},(0,n.map)(T,function(t){var e=t.id,o=t.name;return wp.element.createElement("li",{key:e,role:"option","aria-selected":e===r,onClick:function(){return function(t){var e=(0,n.find)(w,{id:t});e&&(c(t),S(e)),P(!1),v(""),_([])}(e)},onKeyDown:void 0},wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:o}}))}))),(null==E?void 0:E.url)&&wp.element.createElement("div",{className:"selected-page-link"},wp.element.createElement("br",null),(0,z.__)("Selected Page:","seo-by-rank-math")," ",wp.element.createElement("a",{href:E.url,target:"_blank",rel:"noopener noreferrer"},E.url)))}),Ln=function(t){var e=t.value,n=t.onChange;return wp.element.createElement(i.__experimentalToggleGroupControlOption,{value:e,label:wp.element.createElement(i.TextControl,{value:e,onChange:n,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),className:"rank-math-custom-toggle-group-control-option"})};o.dn(Ln);var Rn=o(486),Bn={};Bn.styleTagTransform=y(),Bn.setAttributes=h(),Bn.insert=b().bind(null,"head"),Bn.domAPI=m(),Bn.insertStyleElement=g();s()(Rn.A,Bn);Rn.A&&Rn.A.locals&&Rn.A.locals;function Fn(t){return Fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fn(t)}var Un=["value","options","onChange","children","className","width","disabled","addCustom"];function Hn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return $n(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$n(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function Wn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Gn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Wn(Object(n),!0).forEach(function(e){Vn(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Wn(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Vn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Fn(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Fn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Fn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Kn=function(t){var e=t.value,r=t.options,o=t.onChange,a=t.children,l=t.className,c=void 0===l?"":l,s=t.width,u=void 0===s?"100%":s,m=t.disabled,p=void 0!==m&&m,b=t.addCustom,d=void 0!==b&&b,h=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Un),f=Gn(Gn({},h),{},{value:e,onChange:o,"aria-disabled":p,className:"rank-math-toggle-group-control ".concat(c),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),g=d&&!(0,n.includes)((0,n.keys)(r),e)?e:"";return wp.element.createElement(i.Disabled,{isDisabled:p,style:{width:u}},wp.element.createElement(i.__experimentalToggleGroupControl,f,(0,n.map)((0,n.entries)(r),function(t){var e=Hn(t,2),n=e[0],r=e[1];return wp.element.createElement(i.__experimentalToggleGroupControlOption,{label:r,value:n,key:n})}),d&&wp.element.createElement(Ln,{key:"custom",value:g,onChange:o}),a))};o.dn(Kn);var Yn=o(8381),Zn={};Zn.styleTagTransform=y(),Zn.setAttributes=h(),Zn.insert=b().bind(null,"head"),Zn.domAPI=m(),Zn.insertStyleElement=g();s()(Yn.A,Zn);Yn.A&&Yn.A.locals&&Yn.A.locals;function qn(t){return qn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qn(t)}var Jn=["className","children","href","severity"];function Xn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Qn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Xn(Object(n),!0).forEach(function(e){tr(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function tr(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=qn(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=qn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==qn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const er=function(t){var e=t.className,n=t.children,r=t.href,o=void 0===r?"":r,l=t.severity,c=void 0===l?"default":l,s=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,Jn);e=a()(e,"is-".concat(c),"rank-math-status-anchor-tag");var u=Qn(Qn({},s),{},{href:o,children:n,className:e,target:"_blank",variant:"secondary",rel:"noopener noreferrer"});return wp.element.createElement(i.Button,u)};o.dn(er);const nr={status:{good:wp.element.createElement("svg",{width:"9",height:"8",viewBox:"0 0 9 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}," ",wp.element.createElement("path",{d:"M2.43293 6.20687L7.72329 0.916504L8.6001 1.79331L3.30974 7.08367L2.43293 6.20687Z",fill:"white"})," ",wp.element.createElement("path",{d:"M3.30974 7.08367L0.600098 4.37403L1.4769 3.49723L4.18653 6.20686L3.30974 7.08367Z",fill:"white"})),neutral:wp.element.createElement("svg",{width:"3",height:"8",viewBox:"0 0 3 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"}," ",wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0.935694 0L1.05966 4.56408H2.53953L2.66349 0H0.935694Z",fill:"white"})," ",wp.element.createElement("path",{d:"M1.79575 8C1.23014 8 0.780762 7.55837 0.780762 6.99276C0.780762 6.42716 1.23014 5.99328 1.79575 5.99328C2.37684 5.99328 2.81848 6.42716 2.81848 6.99276C2.81848 7.55837 2.37684 8 1.79575 8Z",fill:"white"})," "),bad:wp.element.createElement("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M4 3.22222L1.27778 0.5L0.5 1.27778L3.22222 4L0.5 6.72222L1.27778 7.5L4 4.77778L6.72222 7.5L7.5 6.72222L4.77778 4L7.5 1.27778L6.72222 0.5L4 3.22222Z",fill:"white"}))},statusIcons:{connected:wp.element.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"}," ",wp.element.createElement("path",{d:"M13.2561 2.93135C13.0592 2.73447 12.753 2.73447 12.5561 2.93135L5.11858 10.1501L1.44358 6.54072C1.2467 6.34385 0.940452 6.36572 0.743577 6.54072C0.546702 6.7376 0.568577 7.04385 0.743577 7.24072L4.61545 11.0032C4.7467 11.1345 4.9217 11.2001 5.11858 11.2001C5.31545 11.2001 5.46858 11.1345 5.6217 11.0032L13.2561 3.5876C13.453 3.43447 13.453 3.12822 13.2561 2.93135Z",fill:"white"})," "),disconnected:wp.element.createElement("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"}," ",wp.element.createElement("path",{d:"M6.5499 5.9999L10.7437 1.80615C10.8983 1.65146 10.8983 1.41084 10.7437 1.25615C10.589 1.10146 10.3483 1.10146 10.1937 1.25615L5.9999 5.4499L1.80615 1.25615C1.65146 1.10146 1.41084 1.10146 1.25615 1.25615C1.10146 1.41084 1.10146 1.65146 1.25615 1.80615L5.4499 5.9999L1.25615 10.1937C1.10146 10.3483 1.10146 10.589 1.25615 10.7437C1.3249 10.8124 1.42803 10.864 1.53115 10.864C1.63428 10.864 1.7374 10.8296 1.80615 10.7437L5.9999 6.5499L10.1937 10.7437C10.2624 10.8124 10.3655 10.864 10.4687 10.864C10.5718 10.864 10.6749 10.8296 10.7437 10.7437C10.8983 10.589 10.8983 10.3483 10.7437 10.1937L6.5499 5.9999Z",fill:"#868686"})," ")}};var rr=o(1502),or={};or.styleTagTransform=y(),or.setAttributes=h(),or.insert=b().bind(null,"head"),or.domAPI=m(),or.insertStyleElement=g();s()(rr.A,or);rr.A&&rr.A.locals&&rr.A.locals;function ar(t){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ar(t)}var ir=["children","className","onClick","status"];function lr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function cr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?lr(Object(n),!0).forEach(function(e){sr(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):lr(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function sr(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=ar(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ar(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const ur=function(t){var e=t.children,n=t.className,r=t.onClick,o=t.status,i=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,ir);n=a()(n,"is-".concat(o),"rank-math-status-button");var l=cr(cr({},i),{},{onClick:r,children:e,className:n,icon:nr.statusIcons[o],isDestructive:"disconnect"===o,size:"disconnect"===o?"xlarge":"large"});return wp.element.createElement(j,l)};o.dn(ur);var mr=o(8778),pr={};pr.styleTagTransform=y(),pr.setAttributes=h(),pr.insert=b().bind(null,"head"),pr.domAPI=m(),pr.insertStyleElement=g();s()(mr.A,pr);mr.A&&mr.A.locals&&mr.A.locals;var br=["status","href","className","description"];function dr(){return dr=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},dr.apply(null,arguments)}const hr=function(t){var e=t.status,n=void 0===e?"good":e,r=t.href,o=t.className,i=t.description,l=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,br);return o=a()(o,"is-".concat(n),"rank-math-status-list"),wp.element.createElement("div",dr({},l,{className:o}),wp.element.createElement("span",{className:"rank-math-status-list__icon"},nr.status[n]),wp.element.createElement("div",{className:"rank-math-status-list__description"},i," ",wp.element.createElement("a",{href:r,target:"_blank",rel:"noopener noreferrer"},nr.help)))};o.dn(hr);var fr=o(2181),gr={};gr.styleTagTransform=y(),gr.setAttributes=h(),gr.insert=b().bind(null,"head"),gr.domAPI=m(),gr.insertStyleElement=g();s()(fr.A,gr);fr.A&&fr.A.locals&&fr.A.locals;function kr(t){return kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kr(t)}var yr=["className"];function vr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function xr(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=kr(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=kr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==kr(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const wr=function(t){var e=t.className,n=void 0===e?"":e,r=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,yr);return n="rank-math-tab-panel ".concat(n),wp.element.createElement(i.TabPanel,function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?vr(Object(n),!0).forEach(function(e){xr(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):vr(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({className:n},r))};o.dn(wr);const _r=function(t){return wp.element.createElement("div",{className:"serp-preview"},wp.element.createElement("div",{className:"serp-preview-body"},wp.element.createElement("div",{className:"serp-url-wrapper"},t.favicon&&wp.element.createElement("img",{src:t.favicon,width:16,height:16,className:"serp-favicon",alt:"favicon"}),wp.element.createElement("span",{className:"serp-url"},t.url)),wp.element.createElement("h5",{className:"serp-title"},t.title),wp.element.createElement("p",{className:"serp-description"},t.description)))};o.dn(_r);const Or=function(t){var e=t.size,n=t.strokeWidth,r=t.value,o=t.max,a=(e-n)/2,i="0 0 ".concat(e," ").concat(e),l=a*Math.PI*2,c=l-l*r/o;return wp.element.createElement("svg",{width:e,height:e,viewBox:i},wp.element.createElement("circle",{fill:"none",stroke:"#e9e9ea",cx:e/2,cy:e/2,r:a,strokeWidth:"".concat(n,"px")}),wp.element.createElement("circle",{className:"circle-progress",fill:"none",stroke:r>70?"#10ac84":r>50?"#ff9f43":"#ed5e5e",strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:l,strokeDashoffset:c,cx:e/2,cy:e/2,r:a,strokeWidth:"".concat(n,"px"),transform:"rotate(-90 ".concat(e/2," ").concat(e/2,")"),style:{animation:"dashAnimation 1s ease-in-out forwards"}}),wp.element.createElement("style",null,"\n\t\t\t\t\t@keyframes dashAnimation {\n\t\t\t\t\t\tfrom {\n\t\t\t\t\t\t\tstroke-dashoffset: ".concat(l,";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tto {\n\t\t\t\t\t\t\tstroke-dashoffset: ").concat(c,";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t")))};o.dn(Or);const Er=function(t){var e=t.metrices,r=t.date,o=t.serpData,a=e.percent,i=e.statuses,l=e.total-i.info,c=[{status:"good",value:i.ok,label:(0,z.__)("Passed Tests","seo-by-rank-math")},{status:"average",value:i.warning,label:(0,z.__)("Warnings","seo-by-rank-math")},{status:"bad",value:i.fail,label:(0,z.__)("Failed Tests","seo-by-rank-math")}];return wp.element.createElement("div",{className:"rank-math-result-graphs rank-math-box"},r&&wp.element.createElement("div",{className:"rank-math-analysis-date"},wp.element.createElement("span",null,(0,z.__)("Last checked: ","seo-by-rank-math")),r.date," ",(0,z.__)(" at ","seo-by-rank-math")," ",r.time),wp.element.createElement("div",{className:"three-col"},wp.element.createElement("div",{className:"graphs-main"},wp.element.createElement("div",{id:"rank-math-circle-progress"},wp.element.createElement(Or,{max:100,size:207,value:Math.abs(a),strokeWidth:15}),wp.element.createElement("div",{className:"result-main-score"},wp.element.createElement("strong",null,Math.abs(a),"/100"),wp.element.createElement("div",null,(0,z.__)("SEO Score","seo-by-rank-math"))))),wp.element.createElement("div",{className:"graphs-side"},wp.element.createElement("ul",{className:"chart"},(0,n.map)(c,function(t){var e=t.status,r=t.value,o=t.label;return wp.element.createElement("li",{key:e,className:"chart-bar-".concat(e)},wp.element.createElement("div",{className:"result-score"},wp.element.createElement("div",null,o),wp.element.createElement("strong",null,Math.abs(r),"/",Math.abs(l))),wp.element.createElement("div",{className:"chart-bar"},wp.element.createElement("span",{style:{width:Math.abs((0,n.round)(r/l*100))+"%"}})))}))),o&&wp.element.createElement(_r,o)))};o.dn(Er);var Sr=o(8566);const jr=function(t){return{ok:"dashicons dashicons-yes status-ok",fail:"dashicons dashicons-no-alt status-fail",warning:"dashicons dashicons-warning status-warning",info:"dashicons dashicons-info status-info"}[t]||""};o.dn(jr);const Ar=function(t){return{ok:(0,z.__)("Passed","seo-by-rank-math"),fail:(0,z.__)("Failed","seo-by-rank-math"),warning:(0,z.__)("Warning","seo-by-rank-math"),info:(0,z.__)("Info","seo-by-rank-math")}[t]||""};o.dn(Ar);const Pr=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"info";return wp.element.createElement("div",{className:"status-icon ".concat(jr(t)),title:Ar(t)})};function Cr(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Nr(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Nr(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Nr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Pr);var Ir=function(t){return(0,n.includes)(["links_ratio","keywords_meta","page_objects"],t)};const Tr=function(t){var e=t.data,r=t.test_id;if("common_keywords"===r)return function(t){var e=(0,n.max)((0,n.values)(t));return wp.element.createElement("div",{className:"wp-tag-cloud"},(0,n.map)((0,n.entries)(t),function(t,r){var o=Cr(t,2),a=o[0],i=o[1]/e*12+10;return i=(0,n.round)(i,2),wp.element.createElement("span",{key:r,className:"keyword-cloud-item",style:{fontSize:"".concat(i,"px")}},a)}))}(e);if(function(t){return(0,n.includes)(["img_alt","minify_css","minify_js","active_plugins","h1_heading","h2_headings"],t)}(r)||Ir(r))return function(t,e){return wp.element.createElement("ul",{className:"info-list"},(0,n.map)((0,n.entries)(e),function(e,r){var o=Cr(e,2),a=o[0],i=o[1];return i=(0,n.isArray)(i)?(0,n.join)(i,", "):i,Ir(t)?wp.element.createElement("li",{key:r},wp.element.createElement("strong",null,a,": "),i):wp.element.createElement("li",{key:r},(0,n.isString)(a)&&!(0,n.isNumber)(Number(a))?wp.element.createElement(React.Fragment,null,a," (",i,")"):i)}))}(r,e);if((0,n.includes)(["title_length","description_length","canonical"],r)){var o=(0,n.isArray)(e)?(0,n.join)(e,", "):e;return wp.element.createElement("code",{className:"full-width"},o)}};function Mr(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Dr(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dr(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Tr);const zr=function(t){var e=t.result,r=Mr((0,l.useState)(!1),2),o=r[0],a=r[1],i=e.status,c=e.title,s=e.tooltip,u=e.kb_link,m=e.fix,p=e.message,b=e.data,d=u||"https://rankmath.com/kb/seo-analysis",h=(0,n.includes)(["fail","warning"],i)&&m;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"row-title"},e&&Pr(i),wp.element.createElement("h3",null,wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:c}}),s&&wp.element.createElement(ve,{text:s},wp.element.createElement("a",{href:u,target:"_blank",rel:"noreferrer"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}))))),wp.element.createElement("div",{className:"row-description"},wp.element.createElement("div",{className:"row-content"},h&&wp.element.createElement(j,{variant:"secondary",size:"small",className:"result-action",onClick:function(){return a(!o)}},(0,z.__)("How to fix","seo-by-rank-math")),wp.element.createElement(l.RawHTML,null,p),o&&wp.element.createElement("div",{className:"how-to-fix-wrapper"},wp.element.createElement("div",{className:"analysis-test-how-to-fix"},wp.element.createElement(l.RawHTML,null,m),!/<\/a><\/p>$/i.test(m.trim())&&wp.element.createElement("p",null,wp.element.createElement(j,{variant:"link",href:d,target:"_blank",className:"analysis-read-more",rel:"noreferrer"},(0,z.__)("Read more","seo-by-rank-math"))))),wp.element.createElement("div",{className:"clear"}),b&&!(0,n.isEmpty)(b)&&Tr(e))))};function Lr(t){return function(t){if(Array.isArray(t))return Rr(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Rr(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Rr(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(zr);const Br=function(t){var e=t.statuses,n=e.ok,r=e.info,o=e.warning,a=e.fail;return[{name:"all",title:wp.element.createElement(React.Fragment,null,(0,z.__)("All","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-result-filter-count"},t.total-r)),className:"rank-math-result-filter rank-math-result-filter-all",results:t}].concat(Lr(n>0?[{name:"ok",title:wp.element.createElement(React.Fragment,null,(0,z.__)("Passed Tests","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-result-filter-count"},n)),className:"rank-math-result-filter rank-math-result-filter-passed",results:t}]:[]),Lr(o>0?[{name:"warning",title:wp.element.createElement(React.Fragment,null,(0,z.__)("Warnings","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-result-filter-count"},o)),className:"rank-math-result-filter rank-math-result-filter-warnings",results:t}]:[]),Lr(a>0?[{name:"fail",title:wp.element.createElement(React.Fragment,null,(0,z.__)("Failed Tests","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-result-filter-count"},a)),className:"rank-math-result-filter rank-math-result-filter-failed",results:t}]:[]))};o.dn(Br);const Fr=function(t){return{priority:(0,z.__)("Priority","seo-by-rank-math"),advanced:(0,z.__)("Advanced SEO","seo-by-rank-math"),basic:(0,z.__)("Basic SEO","seo-by-rank-math"),performance:(0,z.__)("Performance","seo-by-rank-math"),security:(0,z.__)("Security","seo-by-rank-math")}[t]||""};function Ur(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Hr(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Hr(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Hr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Fr);const $r=function(t){var e=Ur((0,l.useState)("all"),2),r=e[0],o=e[1];return wp.element.createElement(i.TabPanel,{className:"seo-analysis-results",tabs:Br(t.metrices),initialTabName:"all",onSelect:function(t){return o(t)}},function(){return(0,n.map)((0,n.entries)(t.results),function(t,e){var o=Ur(t,2),a=o[0],i=o[1],l=function(t,e){return(0,n.map)(e,function(e,n){return"all"!==t&&t!==e.status?null:wp.element.createElement("div",{key:n,className:"table-row rank-math-result-status-".concat(e.status," rank-math-result-test-id-").concat(e.test_id),"data-status":e.status},wp.element.createElement(zr,{result:e}))})}(r,i);if(!(0,n.isEmpty)((0,n.compact)(l)))return wp.element.createElement("div",{key:e,className:"rank-math-result-table rank-math-result-category-".concat(a)},wp.element.createElement("div",{className:"category-title"},Fr(a)),(0,Sr.applyFilters)("rank_math_analysis_category_notice","",a),l)})})};o.dn($r);const Wr=function(t){var e=t.results;if(!(0,n.isEmpty)(e))return wp.element.createElement("div",{className:"rank-math-results-wrapper"},wp.element.createElement(Er,e),wp.element.createElement("div",{id:"analysis-result"},wp.element.createElement($r,e)))};function Gr(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Vr(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Vr(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vr(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Wr);const Kr=function(){var t=Gr((0,l.useState)(0),2),e=t[0],n=t[1];return(0,l.useEffect)(function(){var t=setInterval(function(){n(function(e){return e>=100?(clearInterval(t),e):e+1})},30);return function(){return clearInterval(t)}},[]),wp.element.createElement("div",{className:"progress-bar"},wp.element.createElement("div",{className:"progress",style:{width:e+"%"}}),wp.element.createElement("div",{className:"progress-text"},wp.element.createElement("span",null,e,"% "),(0,z.__)("Complete","seo-by-rank-math")))};o.dn(Kr);const Yr=function(t){var e=t.page,r={modules:(0,z.__)("Modules","seo-by-rank-math"),help:(0,z.__)("Help","seo-by-rank-math"),version_control:(0,z.__)("Version Control","seo-by-rank-math"),general:(0,z.__)("SEO Settings","seo-by-rank-math"),titles:(0,z.__)("SEO Titles & Meta","seo-by-rank-math"),sitemap:(0,z.__)("Sitemap Settings","seo-by-rank-math"),instantIndexing:(0,z.__)("Instant Indexing","seo-by-rank-math"),tools:(0,z.__)("Tools","seo-by-rank-math"),status:(0,z.__)("Status","seo-by-rank-math"),import_export:(0,z.__)("Import & Export","seo-by-rank-math"),role_manager:(0,z.__)("Role Manager","seo-by-rank-math"),analytics:(0,z.__)("Analytics","seo-by-rank-math"),content_ai:(0,z.__)("Content AI","seo-by-rank-math"),seo_analyzer:(0,z.__)("SEO Analyzer","seo-by-rank-math"),competitor_analyzer:(0,z.__)("Competitor Analyzer","seo-by-rank-math"),side_by_side:(0,z.__)("Competitor Analyzer","seo-by-rank-math"),"instant-indexing":(0,z.__)("Instant Indexing","seo-by-rank-math")},o=(0,n.isUndefined)(r[e])?e:r[e];return wp.element.createElement("div",{className:"rank-math-breadcrumbs-wrap"},wp.element.createElement("div",{className:"rank-math-breadcrumbs"},wp.element.createElement("span",null,(0,z.__)("Dashboard","seo-by-rank-math")),wp.element.createElement("span",{className:"divider"},"/"),wp.element.createElement("span",{className:"active"},o)))};o.dn(Yr);const Zr=function(){return wp.element.createElement("div",{className:"rank-math-logo"},wp.element.createElement("a",{href:rankMath.dashboardHeader.dashboardUrl},wp.element.createElement("i",{className:"rm-icon rm-icon-rank-math"})))};o.dn(Zr);const qr=function(){return wp.element.createElement("h1",{className:"rank-math-logo-text"},"Rank Math SEO",wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:rankMath.dashboardHeader.proBadge}}))};o.dn(qr);var Jr=function(t){En()({method:"POST",path:"/rankmath/v1/updateMode",data:{mode:t}}).then(function(t){t?window.location.reload():window.alert((0,z.__)("Something went wrong! Please try again.","seo-by-rank-math"))})};const Xr=function(t){var e=t.page;if(!(0,n.includes)(["status","version_control","tools","import_export","modules","help"],e))return!1;var r=rankMath.isAdvancedMode;return wp.element.createElement("div",{className:"rank-math-mode-selector"},wp.element.createElement(j,{variant:"link",className:r?"":"is-active",onClick:function(){return Jr("easy")}},(0,z.__)("Easy Mode","seo-by-rank-math")),"Â ",wp.element.createElement(j,{variant:"link",className:r?"is-active":"",onClick:function(){return Jr("advanced")}},(0,z.__)("Advanced Mode","seo-by-rank-math")))};o.dn(Xr);const Qr=function(t){var e=t.page,r={version_control:"version-control",import_export:"import-export-settings",content_ai:"content-ai-restore-credits",seo_analyzer:"seo-analysis",competitor_analyzer:"competitor-analyzer",role_manager:"role-manager",general:"general-settings",titles:"titles-meta",sitemap:"sitemap-general","instant-indexing":"instant-indexing",analytics:"help-analytics",tools:"tools",status:"status",ai_visibility:"ai-visibility",link_genius:"link-genius",ai_link_genius:"link-genius"},o=(0,n.isUndefined)(r[e])?(0,we.A)("knowledgebase","RM Header KB Icon"):(0,we.A)(r[e],"Admin Bar "+(0,n.startCase)(r[e]));return wp.element.createElement("a",{href:o,title:"Rank Math Knowledge Base",target:"_blank",className:"button rank-math-help",rel:"noreferrer"},wp.element.createElement("i",{className:"dashicons dashicons-editor-help"}))};function to(t){return to="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},to(t)}function eo(){var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var c=r&&r.prototype instanceof l?r:l,s=Object.create(c.prototype);return no(s,"_invoke",function(n,r,o){var a,l,c,s=0,u=o||[],m=!1,p={p:0,n:0,v:t,a:b,f:b.bind(t,4),d:function(e,n){return a=e,l=0,c=t,p.n=n,i}};function b(n,r){for(l=n,c=r,e=0;!m&&s&&!o&&e<u.length;e++){var o,a=u[e],b=p.p,d=a[2];n>3?(o=d===r)&&(c=a[(l=a[4])?5:(l=3,3)],a[4]=a[5]=t):a[0]<=b&&((o=n<2&&b<a[1])?(l=0,p.v=r,p.n=a[1]):b<d&&(o=n<3||a[0]>r||r>d)&&(a[4]=n,a[5]=r,p.n=d,l=0))}if(o||n>1)return i;throw m=!0,r}return function(o,u,d){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&b(u,d),l=u,c=d;(e=l<2?t:c)||!m;){a||(l?l<3?(l>1&&(p.n=-1),b(l,c)):p.n=c:p.v=c);try{if(s=2,a){if(l||(o="next"),e=a[o]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,l<2&&(l=0)}else 1===l&&(e=a.return)&&e.call(a),l<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),l=1);a=t}else if((e=(m=p.n<0)?c:n.call(r,p))!==i)break}catch(e){a=t,l=1,c=e}finally{s=1}}return{value:e,done:m}}}(n,o,a),!0),s}var i={};function l(){}function c(){}function s(){}e=Object.getPrototypeOf;var u=[][r]?e(e([][r]())):(no(e={},r,function(){return this}),e),m=s.prototype=l.prototype=Object.create(u);function p(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,no(t,o,"GeneratorFunction")),t.prototype=Object.create(m),t}return c.prototype=s,no(m,"constructor",s),no(s,"constructor",c),c.displayName="GeneratorFunction",no(s,o,"GeneratorFunction"),no(m),no(m,o,"Generator"),no(m,r,function(){return this}),no(m,"toString",function(){return"[object Generator]"}),(eo=function(){return{w:a,m:p}})()}function no(t,e,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}no=function(t,e,n,r){function a(e,n){no(t,e,function(t){return this._invoke(e,n,t)})}e?o?o(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(a("next",0),a("throw",1),a("return",2))},no(t,e,n,r)}function ro(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function oo(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ro(Object(n),!0).forEach(function(e){ao(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ro(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function ao(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=to(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=to(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==to(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function io(t,e,n,r,o,a,i){try{var l=t[a](i),c=l.value}catch(t){return void n(t)}l.done?e(c):Promise.resolve(c).then(r,o)}o.dn(Qr);var lo={general:function(){return o.e(466).then(o.bind(o,3118))},titles:function(){return o.e(612).then(o.bind(o,1401))},sitemap:function(){return o.e(919).then(o.bind(o,4430))},"instant-indexing":function(){return o.e(445).then(o.bind(o,3289))}};const co=function(){var t,e=(t=eo().m(function t(e){var r,o,a,i,l=arguments;return eo().w(function(t){for(;;)switch(t.n){case 0:if(r=l.length>1&&void 0!==l[1]?l[1]:[],o=lo[e]){t.n=1;break}return t.a(2,null);case 1:return t.n=2,o();case 2:return a=t.v,i=(0,Sr.applyFilters)("rank_math_".concat(e,"_options__tabs"),a.default),i=(0,n.isEmpty)(r)?i:(0,n.pick)(i,r),t.a(2,(0,n.map)(i,function(t,n){return t.fields=(0,Sr.applyFilters)("rank_math_".concat(e,"_options__fields"),t.fields,n),t.fields=(0,Sr.applyFilters)("rank_math_".concat(e,"_options__").concat(n),t.fields),oo({},t)}))}},t)}),function(){var e=this,n=arguments;return new Promise(function(r,o){var a=t.apply(e,n);function i(t){io(a,r,o,i,l,"next",t)}function l(t){io(a,r,o,i,l,"throw",t)}i(void 0)})});return function(t){return e.apply(this,arguments)}}();function so(t){return so="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},so(t)}function uo(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}throw new TypeError(so(t)+" is not iterable")}function mo(){var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var c=r&&r.prototype instanceof l?r:l,s=Object.create(c.prototype);return po(s,"_invoke",function(n,r,o){var a,l,c,s=0,u=o||[],m=!1,p={p:0,n:0,v:t,a:b,f:b.bind(t,4),d:function(e,n){return a=e,l=0,c=t,p.n=n,i}};function b(n,r){for(l=n,c=r,e=0;!m&&s&&!o&&e<u.length;e++){var o,a=u[e],b=p.p,d=a[2];n>3?(o=d===r)&&(c=a[(l=a[4])?5:(l=3,3)],a[4]=a[5]=t):a[0]<=b&&((o=n<2&&b<a[1])?(l=0,p.v=r,p.n=a[1]):b<d&&(o=n<3||a[0]>r||r>d)&&(a[4]=n,a[5]=r,p.n=d,l=0))}if(o||n>1)return i;throw m=!0,r}return function(o,u,d){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&b(u,d),l=u,c=d;(e=l<2?t:c)||!m;){a||(l?l<3?(l>1&&(p.n=-1),b(l,c)):p.n=c:p.v=c);try{if(s=2,a){if(l||(o="next"),e=a[o]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,l<2&&(l=0)}else 1===l&&(e=a.return)&&e.call(a),l<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),l=1);a=t}else if((e=(m=p.n<0)?c:n.call(r,p))!==i)break}catch(e){a=t,l=1,c=e}finally{s=1}}return{value:e,done:m}}}(n,o,a),!0),s}var i={};function l(){}function c(){}function s(){}e=Object.getPrototypeOf;var u=[][r]?e(e([][r]())):(po(e={},r,function(){return this}),e),m=s.prototype=l.prototype=Object.create(u);function p(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,po(t,o,"GeneratorFunction")),t.prototype=Object.create(m),t}return c.prototype=s,po(m,"constructor",s),po(s,"constructor",c),c.displayName="GeneratorFunction",po(s,o,"GeneratorFunction"),po(m),po(m,o,"Generator"),po(m,r,function(){return this}),po(m,"toString",function(){return"[object Generator]"}),(mo=function(){return{w:a,m:p}})()}function po(t,e,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}po=function(t,e,n,r){function a(e,n){po(t,e,function(t){return this._invoke(e,n,t)})}e?o?o(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(a("next",0),a("throw",1),a("return",2))},po(t,e,n,r)}function bo(t,e,n,r,o,a,i){try{var l=t[a](i),c=l.value}catch(t){return void n(t)}l.done?e(c):Promise.resolve(c).then(r,o)}function ho(t){return function(){var e=this,n=arguments;return new Promise(function(r,o){var a=t.apply(e,n);function i(t){bo(a,r,o,i,l,"next",t)}function l(t){bo(a,r,o,i,l,"throw",t)}i(void 0)})}}const fo=ho(mo().m(function t(){var e,r,o,a;return mo().w(function(t){for(;;)switch(t.n){case 0:e={},r=mo().m(function t(){var r,i;return mo().w(function(t){for(;;)switch(t.p=t.n){case 0:return r=a[o],e[r]={},t.p=1,t.n=2,co(r);case 2:i=t.v,(0,n.forEach)(i,function(t){(0,n.isEmpty)(t.fields)||(e[r][t.name]=[],(0,n.forEach)(t.fields,function(o){(0,n.includes)(["notice","raw"],o.type)||e[r][t.name].push(o)}))}),t.n=4;break;case 3:t.p=3,t.v,e[r]={};case 4:return t.a(2)}},t,null,[[1,3]])}),o=0,a=["general","titles","sitemap"];case 1:if(!(o<a.length)){t.n=3;break}return t.d(uo(r()),2);case 2:o++,t.n=1;break;case 3:return t.a(2,e)}},t)}));function go(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function ko(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?go(Object(n),!0).forEach(function(e){yo(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):go(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function yo(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=wo(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=wo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==wo(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function vo(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return xo(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?xo(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xo(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function wo(t){return wo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},wo(t)}const _o=function(t,e){if(!e||!t||"object"!==wo(t))return[];var r=e.toLowerCase();return(0,n.flatMap)((0,n.entries)(t),function(t){var e=vo(t,2),o=e[0],a=e[1];return(0,n.flatMap)((0,n.entries)(a),function(t){var e=vo(t,2),a=e[0],i=e[1];return(0,n.map)((0,n.filter)(i,function(t){return(0,n.includes)((0,n.toLower)(t.name),r)||(0,n.includes)((0,n.toLower)(t.desc),r)}),function(t){return ko(ko({},t),{},{setting:o,tab:a})})})})};o.dn(_o);const Oo=function(t){var e=t.setting,r=t.tab;if(e===rankMath.optionPage){var o=document.getElementById("tab-panel-0-".concat(r));(0,n.isNull)(o)||o.click()}else window.location.href="".concat(window.location.origin,"/wp-admin/admin.php?page=rank-math-options-").concat(e,"&tab=").concat(r)};function Eo(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return So(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?So(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function So(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Oo);const jo=function(t){var e=t.page;if(!(0,n.includes)(["general","titles","sitemap"],e))return null;var r=Eo((0,l.useState)(""),2),o=r[0],a=r[1],c=Eo((0,l.useState)({}),2),s=c[0],u=c[1],m=Eo(Rt(),3),p=m[0],b=m[1],d=m[2];(0,l.useEffect)(function(){fo().then(u)},[]);var h=_o(s,o);return wp.element.createElement("div",{ref:d,className:"rank-math-search-options"},wp.element.createElement(i.SearchControl,{__nextHasNoMarginBottom:!0,value:o,onChange:a,onClick:function(){return b(!0)},placeholder:(0,z.__)("Search Options","seo-by-rank-math")}),o&&p&&wp.element.createElement("div",{className:"rank-math-search-dropdown"},0===h.length?wp.element.createElement("span",{className:"empty"},(0,z.__)("Nothing found.","seo-by-rank-math")):wp.element.createElement(React.Fragment,null,h.map(function(t,e){return wp.element.createElement(j,{variant:"secondary",key:"".concat(t.id,"-").concat(e),onClick:function(){return Oo(t)}},wp.element.createElement("h1",null,t.name),wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:t.desc}}))}))))};o.dn(jo);const Ao=function(t){var e=t.onTabChange,r=t.page,o=void 0===r?"":r;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-header"},wp.element.createElement(Zr,null),wp.element.createElement(qr,null),wp.element.createElement(jo,{page:o,onTabChange:e}),wp.element.createElement(Xr,{page:o}),(0,Sr.applyFilters)("rank_math_before_help_link",""),wp.element.createElement(Qr,{page:(0,n.snakeCase)(o)})),wp.element.createElement(Yr,{page:o}))};function Po(t){return function(t){if(Array.isArray(t))return Io(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||No(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Co(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||No(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function No(t,e){if(t){if("string"==typeof t)return Io(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Io(t,e):void 0}}function Io(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(Ao);const To=function(t){var e=t.options,n=void 0===e?[]:e,r=t.value,o=void 0===r?[]:r,a=t.onChange,c=t.placeholder,s=void 0===c?(0,z.__)("Select options","seo-by-rank-math"):c,u=t.ariaLabel,m=void 0===u?"":u,p=t.label,b=void 0===p?"":p,d=(0,l.useRef)(null),h=Co((0,l.useState)(0),2),f=h[0],g=h[1];(0,l.useEffect)(function(){d.current&&g(d.current.offsetWidth)},[]);var k=function(t){var e=o.includes(t)?o.filter(function(e){return e!==t}):[].concat(Po(o),[t]);a(e)},y=wp.element.createElement(i.Dropdown,{className:"rank-math-multi-select-dropdown",contentClassName:"rank-math-multi-select-popover",popoverProps:{placement:"bottom-left"},renderToggle:function(t){var e=t.isOpen,r=t.onToggle;return wp.element.createElement("button",{ref:d,type:"button",className:"rank-math-multi-select-button ".concat(o.length>0?"has-value":""," ").concat(e?"is-open":""),onClick:r,"aria-expanded":e,"aria-label":m},wp.element.createElement("span",{className:"rank-math-multi-select-text"},function(){if(0===o.length)return s;var t=n.find(function(t){return t.value===o[0]}),e=t?t.label:o[0];if(1===o.length)return e;var r=o.length-1;return"".concat(e," + ").concat(r," ").concat(1===r?(0,z.__)("other","seo-by-rank-math"):(0,z.__)("others","seo-by-rank-math"))}()),wp.element.createElement("span",{className:"rank-math-multi-select-arrow","aria-hidden":"true"},"â–¼"))},renderContent:function(){return wp.element.createElement("div",{className:"rank-math-multi-select-dropdown-content",style:f>0?{width:"".concat(f,"px")}:{}},n.map(function(t){var e=o.includes(t.value);return wp.element.createElement("div",{key:t.value,className:"rank-math-multi-select-option ".concat(e?"is-selected":"")},wp.element.createElement(i.CheckboxControl,{__nextHasNoMarginBottom:!0,label:t.label,checked:e,onChange:function(){return k(t.value)}}))}))}});return b?wp.element.createElement("div",{className:"rank-math-multi-select-wrapper"},wp.element.createElement(i.BaseControl.VisualLabel,null,b),y):y};var Mo=o(1406),Do={};Do.styleTagTransform=y(),Do.setAttributes=h(),Do.insert=b().bind(null,"head"),Do.domAPI=m(),Do.insertStyleElement=g();s()(Mo.A,Do);Mo.A&&Mo.A.locals&&Mo.A.locals;function zo(t){return zo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zo(t)}function Lo(t){return function(t){if(Array.isArray(t))return $o(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ho(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ro(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Bo(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ro(Object(n),!0).forEach(function(e){Fo(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ro(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Fo(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=zo(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=zo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==zo(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Uo(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||Ho(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ho(t,e){if(t){if("string"==typeof t)return $o(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$o(t,e):void 0}}function $o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Wo=function(t){var e=t.filters,n=void 0===e?[]:e,r=t.appliedFilters,o=void 0===r?{}:r,a=t.onApply,c=t.onClear,s=Uo((0,l.useState)(o),2),u=s[0],m=s[1];(0,l.useEffect)(function(){m(o)},[o]);var p=n.map(function(t){return t.key}),b=p.some(function(t){return u[t]!==o[t]}),d=p.some(function(t){var e=u[t];return Array.isArray(e)?e.length>0:e&&""!==e&&"all"!==e}),h=function(t,e){var n=Array.isArray(e)?e:"all"===e?"":e;m(function(e){return Bo(Bo({},e),{},Fo({},t,n))})};return wp.element.createElement("div",{className:"rank-math-filter-staging",role:"group","aria-label":(0,z.__)("Table filters","seo-by-rank-math")},n.map(function(t){if(t.multiSelect){var e=u[t.key]||[];return wp.element.createElement(To,{key:t.key,options:t.options,value:e,onChange:function(e){return h(t.key,e)},placeholder:t.allLabel||(0,z.__)("All","seo-by-rank-math"),ariaLabel:t.label})}return wp.element.createElement(i.SelectControl,{key:t.key,value:u[t.key]||"all",options:[{label:t.allLabel||(0,z.__)("All","seo-by-rank-math"),value:"all"}].concat(Lo(t.options)),onChange:function(e){return h(t.key,e)},className:"rank-math-table-filter-inline","aria-label":t.label,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})}),b&&wp.element.createElement(i.Button,{variant:"primary",onClick:function(){a(u)},className:"rank-math-apply-filters-btn","aria-label":(0,z.__)("Apply selected filters","seo-by-rank-math")},(0,z.__)("Apply Filters","seo-by-rank-math")),d&&wp.element.createElement(i.Button,{variant:"link",onClick:function(){var t=Bo({},u);n.forEach(function(e){t[e.key]=e.multiSelect?[]:""}),m(t),c(t)},className:"rank-math-clear-filters-btn","aria-label":(0,z.__)("Clear all filters","seo-by-rank-math")},(0,z.__)("Clear All","seo-by-rank-math")))};var Go=o(1018),Vo={};Vo.styleTagTransform=y(),Vo.setAttributes=h(),Vo.insert=b().bind(null,"head"),Vo.domAPI=m(),Vo.insertStyleElement=g();s()(Go.A,Vo);Go.A&&Go.A.locals&&Go.A.locals;const Ko=(0,l.memo)(function(t){var e=t.options,n=void 0===e?[]:e,r=t.value,o=t.onChange,a=t.className,i=void 0===a?"":a,l=t.colored,c=void 0!==l&&l,s=t.tabStyle,u=void 0!==s&&s,m=["rank-math-toggle-button-group",c?"is-colored":"",u?"is-tab-style":"",i].filter(Boolean).join(" ");return wp.element.createElement("div",{className:m,role:"group"},n.map(function(t){var e=(c||u)&&t.statusType?"status-".concat(t.statusType):"",n=r===t.value;return wp.element.createElement("button",{key:t.value,type:"button",className:"rank-math-toggle-button ".concat(n?"is-active":""," ").concat(e).trim(),onClick:function(){return o(t.value)},"aria-pressed":n},t.label)}))});function Yo(t){return function(t){if(Array.isArray(t))return Jo(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||qo(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zo(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||qo(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qo(t,e){if(t){if("string"==typeof t)return Jo(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jo(t,e):void 0}}function Jo(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const Xo=function(t){var e=t.title,n=t.headers,r=t.visibleColumns,o=t.onToggleColumn,a=t.exportButton,c=t.filters,s=void 0===c?[]:c,u=t.activeFilters,m=t.onFilterChange,p=t.searchTerm,b=t.onSearchChange,d=t.appliedFilters,h=t.onApplyFilters,f=t.onClearFilters,g=t.hideControls,k=void 0!==g&&g,y=t.primaryToggle,v=t.secondaryToggle,x=Zo((0,l.useState)(!1),2),w=x[0],_=x[1],O=(0,l.useRef)(null),E=void 0!==d&&void 0!==h&&void 0!==f,S=y||v,j=(0,l.useCallback)(function(t,e){m(t,e)},[m]);if((0,l.useEffect)(function(){var t=function(t){O.current&&!O.current.contains(t.target)&&_(!1)};return w&&document.addEventListener("mousedown",t),function(){document.removeEventListener("mousedown",t)}},[w]),!e&&k)return null;var A=n.filter(function(t){return!1!==t.isHideable});return wp.element.createElement("div",{className:"rank-math-table-header ".concat(S?"has-toggle-filters":"").trim()},e&&wp.element.createElement("h2",{className:"rank-math-table-title"},e),!k&&wp.element.createElement(React.Fragment,null,S&&wp.element.createElement("div",{className:"rank-math-table-toggle-row"},wp.element.createElement("div",{className:"rank-math-table-toggle-left"},y&&wp.element.createElement(Ko,{options:y.options,value:y.value,onChange:y.onChange||function(t){return j(y.filterKey,t)},tabStyle:!0})),wp.element.createElement("div",{className:"rank-math-table-toggle-right"},v&&wp.element.createElement(Ko,{options:v.options,value:v.value,onChange:v.onChange||function(t){return j(v.filterKey,t)},colored:!0}))),wp.element.createElement("div",{className:"rank-math-table-header-controls"},wp.element.createElement(i.SearchControl,{value:p,onChange:b,placeholder:(0,z.__)("Search","seo-by-rank-math"),className:"rank-math-table-search-inline",__nextHasNoMarginBottom:!0}),E?wp.element.createElement(Wo,{filters:s,appliedFilters:d,onApply:h,onClear:f}):s.map(function(t){return wp.element.createElement(i.SelectControl,{key:t.key,value:u[t.key]||"all",options:[{label:t.allLabel||(0,z.__)("All","seo-by-rank-math"),value:"all"}].concat(Yo(t.options)),onChange:function(e){return m(t.key,e)},className:"rank-math-table-filter-inline",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})}),wp.element.createElement("div",{className:"rank-math-table-header-actions"},a,A.length>0&&wp.element.createElement("div",{className:"rank-math-table-column-toggle",ref:O},wp.element.createElement(i.Button,{variant:"secondary",onClick:function(){return _(!w)},icon:"ellipsis"}),w&&wp.element.createElement("div",{className:"rank-math-table-dropdown"},wp.element.createElement("div",{className:"rank-math-table-dropdown-content"},A.map(function(t){return wp.element.createElement(i.CheckboxControl,{__nextHasNoMarginBottom:!0,className:"rank-math-table-dropdown-item",key:t.key,label:t.label,checked:r[t.key],onChange:function(){return o(t.key)}})}))))))))};var Qo=o(5703),ta={};ta.styleTagTransform=y(),ta.setAttributes=h(),ta.insert=b().bind(null,"head"),ta.domAPI=m(),ta.insertStyleElement=g();s()(Qo.A,ta);Qo.A&&Qo.A.locals&&Qo.A.locals;function ea(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return na(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?na(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function na(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const ra=function(t){var e=t.row,r=t.rowIndex,o=t.headers,a=t.bulkSelection,c=t.rowIdKey,s=void 0===c?"id":c,u=t.rowActions,m=void 0===u?[]:u,p=t.enableExpansion,b=void 0!==p&&p,d=t.renderExpandedView,h=t.onExpand,f=t.getRowClass,g=ea((0,l.useState)(!1),2),k=g[0],y=g[1],v=(0,n.get)(e,s),x=void 0!==a,w=m.length>0,_=o.length+(x?1:0),O=(0,l.useCallback)(function(){y(function(t){var n=!t;return n&&h&&h(e),n})},[e,h]),E=(0,l.useCallback)(function(t){!b||"Enter"!==t.key&&" "!==t.key||"TR"===t.target.tagName&&(t.preventDefault(),O())},[b,O]);return wp.element.createElement(React.Fragment,null,wp.element.createElement("tr",{className:["rank-math-table-row",k?"is-expanded":"",f?f(e):""].filter(Boolean).join(" "),onKeyDown:E,tabIndex:b?0:-1,role:b?"button":void 0,"aria-expanded":b?k:void 0},x&&wp.element.createElement("td",{className:"rank-math-table-checkbox-cell"},wp.element.createElement(i.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:a.isSelected(v),onChange:function(){return a.toggleItem(v)},"aria-label":"".concat((0,z.__)("Select row","seo-by-rank-math")," ").concat(r+1)})),o.map(function(t,o){var a=0===o,i=t.render?t.render(e[t.key],e):e[t.key];return wp.element.createElement("td",{key:t.key,className:a?"rank-math-table-primary-column":""},wp.element.createElement("div",{className:"rank-math-table-cell-content"},i,a&&w&&wp.element.createElement("div",{className:"rank-math-row-actions"},b&&wp.element.createElement("button",{type:"button",className:"rank-math-row-action",onClick:O,"aria-expanded":k,"aria-label":k?(0,z.__)("Hide row details","seo-by-rank-math"):(0,z.__)("View row details","seo-by-rank-math")},k?(0,z.__)("Hide Details","seo-by-rank-math"):(0,z.__)("View Details","seo-by-rank-math")),m.map(function(t,o){if(t.condition&&!t.condition(e))return null;var a=!!t.isLoading&&t.isLoading(e);return wp.element.createElement("button",{key:o,type:"button",className:"rank-math-row-action"+((0,n.isUndefined)(t.className)?"":" "+t.className),onClick:function(){return t.onClick(e)},disabled:a,"aria-busy":a,"aria-label":"".concat(t.label," ").concat((0,z.__)("for row","seo-by-rank-math")," ").concat(r+1)},a?(0,z.__)("Processingâ€¦","seo-by-rank-math"):t.label)}))))})),k&&b&&d&&d(e,_))};const oa=function(t){var e=t.data,n=t.headers,r=t.bulkSelection,o=t.rowIdKey,a=void 0===o?"id":o,i=t.rowActions,l=void 0===i?[]:i,c=t.enableExpansion,s=void 0!==c&&c,u=t.renderExpandedView,m=t.onExpand,p=t.getRowClass;return 0===e.length?wp.element.createElement("tbody",null):wp.element.createElement("tbody",null,e.map(function(t,e){return wp.element.createElement(ra,{key:e,row:t,rowIndex:e,headers:n,bulkSelection:r,rowIdKey:a,rowActions:l,enableExpansion:s,renderExpandedView:u,onExpand:m,getRowClass:p})}))};function aa(t){return aa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},aa(t)}function ia(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function la(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ia(Object(n),!0).forEach(function(e){ca(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ia(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function ca(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=aa(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=aa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==aa(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var sa=function(t){return(0,n.isNil)(t)||!(0,n.isNumber)(t)?"0":t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":t.toString()};function ua(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ma(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ma(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ma(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const pa=function(t){var e=t.currentPage,n=t.totalPages,r=t.onPageChange,o=t.stats,a=void 0===o?[]:o,i=ua((0,l.useState)(String(e)),2),c=i[0],s=i[1];if((0,l.useEffect)(function(){s(String(e))},[e]),0===n)return null;var u=function(t){t.preventDefault();var o=parseInt(c,10);o>=1&&o<=n?r(o):s(String(e))},m=1===e,p=e===n;return wp.element.createElement("div",{className:"rank-math-table-footer"},wp.element.createElement("div",{className:"rank-math-table-footer-nav"},wp.element.createElement("div",{className:"rank-math-table-pagination-buttons"},wp.element.createElement("button",{type:"button",className:"rank-math-pagination-btn",onClick:function(){return r(Math.max(1,e-1))},disabled:m,"aria-label":(0,z.__)("Previous page","seo-by-rank-math")},"â€¹"),wp.element.createElement("button",{type:"button",className:"rank-math-pagination-btn",onClick:function(){return r(Math.min(n,e+1))},disabled:p,"aria-label":(0,z.__)("Next page","seo-by-rank-math")},"â€º")),wp.element.createElement("span",{className:"rank-math-pagination-page-info"},(0,z.__)("Page","seo-by-rank-math")," ",wp.element.createElement("strong",null,e)," ",(0,z.__)("of","seo-by-rank-math")," ",wp.element.createElement("strong",null,n)),wp.element.createElement("span",{className:"rank-math-pagination-separator"},"Â·"),wp.element.createElement("form",{onSubmit:u,className:"rank-math-pagination-jump"},wp.element.createElement("span",null,(0,z.__)("Go to Page","seo-by-rank-math")),wp.element.createElement("input",{type:"number",min:"1",max:n,value:c,onChange:function(t){return s(t.target.value)},onBlur:u,className:"rank-math-pagination-input",disabled:1===n,"aria-label":(0,z.__)("Page number","seo-by-rank-math")}))),a.length>0&&wp.element.createElement("div",{className:"rank-math-table-footer-stats"},a.map(function(t,e){return wp.element.createElement("span",{key:e,className:"rank-math-footer-stat"},e>0&&wp.element.createElement("span",{className:"rank-math-footer-stat-dot"},"Â·"),wp.element.createElement("strong",null,sa(t.value))," ",t.label)})))};function ba(t){return t.startsWith("{{/")?{type:"componentClose",value:t.replace(/\W/g,"")}:t.endsWith("/}}")?{type:"componentSelfClosing",value:t.replace(/\W/g,"")}:t.startsWith("{{")?{type:"componentOpen",value:t.replace(/\W/g,"")}:{type:"string",value:t}}function da(t,e){let n,r,o=[];for(let a=0;a<t.length;a++){const i=t[a];if("string"!==i.type){if(void 0===e[i.value])throw new Error(`Invalid interpolation, missing component node: \`${i.value}\``);if("object"!=typeof e[i.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${i.value}\``);if("componentClose"===i.type)throw new Error(`Missing opening component token: \`${i.value}\``);if("componentOpen"===i.type){n=e[i.value],r=a;break}o.push(e[i.value])}else o.push(i.value)}if(n){const a=function(t,e){const n=e[t];let r=0;for(let o=t+1;o<e.length;o++){const t=e[o];if(t.value===n.value){if("componentOpen"===t.type){r++;continue}if("componentClose"===t.type){if(0===r)return o;r--}}}throw new Error("Missing closing component token `"+n.value+"`")}(r,t),i=da(t.slice(r+1,a),e),l=(0,Sn.cloneElement)(n,{},i);if(o.push(l),a<t.length-1){const n=da(t.slice(a+1),e);o=o.concat(n)}}return o=o.filter(Boolean),0===o.length?null:1===o.length?o[0]:(0,Sn.createElement)(Sn.Fragment,null,...o)}function ha(t){const{mixedString:e,components:n,throwErrors:r}=t;if(!n)return e;if("object"!=typeof n){if(r)throw new Error(`Interpolation Error: unable to process \`${e}\` because components is not an object`);return e}const o=function(t){return t.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(ba)}(e);try{return da(o,n)}catch(t){if(r)throw new Error(`Interpolation Error: unable to process \`${e}\` because of error \`${t.message}\``);return e}}const fa=function(t){var e=t.tags,r=t.components,o=t.children;return r=r||{},!1===(0,n.isUndefined)(e)&&(e=e.split(",")).forEach(function(t){var e=t;r[t]=wp.element.createElement(e,null)}),ha({mixedString:o,components:r})};var ga=function(t,e){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(e+="+Free+Plan");var r=new URLSearchParams({utm_source:"Plugin",utm_medium:e,utm_campaign:"WP"});return(0,n.includes)(t,"?")||(t+="?"),t+r.toString()};const ka=function(t){var e=t.width,r=void 0===e?40:e,o=t.showProNotice,a=void 0!==o&&o,l=t.isBulkEdit,c=void 0!==l&&l,s=t.isResearch,u=void 0!==s&&s,m=t.creditsRequired,p=void 0===m?0:m,b=t.isKeywordIntent,d=void 0!==b&&b,h=t.medium,f=void 0===h?"":h;if(a)return function(t,e){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+t},wp.element.createElement("h3",null,(0,z.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,z.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,z.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(i.Button,{href:(0,we.A)("pro",e),target:"_blank",className:"button button-primary is-green"},(0,z.__)("Get PRO Now â†’","seo-by-rank-math"))))}(r,f);if(d)return function(t,e){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+t},wp.element.createElement("h3",null,(0,z.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,z.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(i.Button,{href:(0,we.A)("pro",e),target:"_blank",className:"button button-primary is-green"},(0,z.__)("Update Now","seo-by-rank-math"))))}(r,f);var g=(0,n.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),k=g.isUserRegistered,y=g.plan,v="free"===y,x=g.credits>p,w=g.isMigrating;if(x&&u&&!v&&g.credits<500&&(x=!1),k&&y&&x&&!w&&!v)return null;var _,O="width-"+r;return!k||!y||x&&v?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+O},wp.element.createElement("h3",null,(0,z.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!k&&!c&&(0,z.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),k&&!y&&!c&&!v&&(0,z.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),k&&!c&&v&&(0,z.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),c&&(0,z.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(t,e,n){return e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,z.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,z.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,z.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,z.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,z.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(r,c,v),!k&&wp.element.createElement(i.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,z.__)("Connect Now","seo-by-rank-math")),k&&(!y||v)&&wp.element.createElement(i.Button,{href:ga(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",v),className:"button button-primary is-green",target:"_blank"},(0,z.__)("Learn More","seo-by-rank-math")))):w?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+O},wp.element.createElement("h3",null,(0,z.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,z.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,z.__)("reach out to the support team.","seo-by-rank-math")),(0,z.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+O},wp.element.createElement("h3",null,(0,z.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(_=g.resetDate)?wp.element.createElement(fa,{components:{strong:wp.element.createElement("strong",null)}},(0,z.sprintf)((0,z.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+_+"{{/strong}}")):(0,z.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(i.Button,{href:ga(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",v),className:"button button-primary is-green",target:"_blank"},(0,z.__)("Learn More","seo-by-rank-math")),wp.element.createElement(i.Button,{variant:"link",href:ga(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",v),className:"button button-secondary",target:"_blank"},(0,z.__)("Missing Credits?","seo-by-rank-math"))))};function ya(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return va(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?va(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function va(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}o.dn(ka);var xa=function(t){var e=t.onClose;return wp.element.createElement(i.Modal,{onRequestClose:e,className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!0},wp.element.createElement(ka,{showProNotice:!0,medium:"Table+Export"}))};const wa=function(t){var e=t.data,n=ya((0,l.useState)(!1),2),r=n[0],o=n[1];return e&&0!==e.length?wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-table-export"},wp.element.createElement(i.Button,{variant:"secondary",onClick:function(){return o(!0)},icon:"download",title:(0,z.__)("Export table data","seo-by-rank-math")})),r&&wp.element.createElement(xa,{onClose:function(){return o(!1)}})):null};var _a=o(2027),Oa={};Oa.styleTagTransform=y(),Oa.setAttributes=h(),Oa.insert=b().bind(null,"head"),Oa.domAPI=m(),Oa.insertStyleElement=g();s()(_a.A,Oa);_a.A&&_a.A.locals&&_a.A.locals;const Ea=function(t){var e=t.selectedCount,n=void 0===e?0:e,r=t.isSelectAllMatching,o=void 0!==r&&r,a=t.totalMatchingCount,l=void 0===a?0:a,c=t.onSelectAllMatching,s=void 0===c?function(){}:c,u=t.onClearSelection,m=void 0===u?function(){}:u,p=t.onBulkAction,b=void 0===p?function(){}:p,d=t.isProcessing,h=void 0!==d&&d,f=t.bulkActions;if(0===n)return null;var g=o?"".concat(l," ").concat(1===l?(0,z.__)("item","seo-by-rank-math"):(0,z.__)("items","seo-by-rank-math")," ").concat((0,z.__)("selected","seo-by-rank-math")):"".concat(n," ").concat(1===n?(0,z.__)("item","seo-by-rank-math"):(0,z.__)("items","seo-by-rank-math")," ").concat((0,z.__)("selected","seo-by-rank-math")),k=!o&&n<l,y=[{label:(0,z.__)("Bulk Actions","seo-by-rank-math"),value:""},{label:(0,z.__)("Remove","seo-by-rank-math"),value:"delete"},{label:(0,z.__)("Recheck","seo-by-rank-math"),value:"recheck"},{label:(0,z.__)("Mark as Not Broken","seo-by-rank-math"),value:"mark_safe"}],v=f||y;return wp.element.createElement("div",{className:"rank-math-bulk-actions-bar",role:"region","aria-label":(0,z.__)("Bulk actions","seo-by-rank-math")},wp.element.createElement("div",{className:"rank-math-bulk-actions-info"},wp.element.createElement("span",{className:"rank-math-bulk-selection-count",role:"status","aria-live":"polite"},g),k&&wp.element.createElement(i.Button,{variant:"link",onClick:s,disabled:h,"aria-label":(0,z.sprintf)((0,z.__)("Select all %d matching items","seo-by-rank-math"),l)},"".concat((0,z.__)("Select all","seo-by-rank-math")," ").concat(l," ").concat((0,z.__)("matching items","seo-by-rank-math"))),wp.element.createElement(i.Button,{variant:"link",onClick:m,disabled:h,"aria-label":(0,z.__)("Clear selection","seo-by-rank-math")},(0,z.__)("Clear selection","seo-by-rank-math"))),wp.element.createElement("div",{className:"rank-math-bulk-actions-controls"},wp.element.createElement(i.SelectControl,{value:"",options:v,onChange:function(t){t&&""!==t&&b(t)},disabled:h,className:"rank-math-bulk-actions-select","aria-label":(0,z.__)("Select bulk action","seo-by-rank-math"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),h&&wp.element.createElement("span",{className:"rank-math-bulk-actions-processing",role:"status","aria-live":"polite"},(0,z.__)("Processingâ€¦","seo-by-rank-math"))))};var Sa=10,ja=o(8453),Aa={};Aa.styleTagTransform=y(),Aa.setAttributes=h(),Aa.insert=b().bind(null,"head"),Aa.domAPI=m(),Aa.insertStyleElement=g();s()(ja.A,Aa);ja.A&&ja.A.locals&&ja.A.locals;function Pa(t){return Pa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pa(t)}function Ca(t){return function(t){if(Array.isArray(t))return za(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Da(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Na(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Ia(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Na(Object(n),!0).forEach(function(e){Ta(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Na(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Ta(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Pa(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Pa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Pa(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ma(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||Da(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Da(t,e){if(t){if("string"==typeof t)return za(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?za(t,e):void 0}}function za(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const La=(0,l.memo)(function(t){var e=t.title,r=t.headers,o=void 0===r?[]:r,a=t.rows,c=void 0===a?[]:a,s=t.defaultRowsPerPage,u=void 0===s?Sa:s,m=t.filters,p=void 0===m?[]:m,b=t.exportFilename,d=void 0===b?"table-export":b,h=t.stats,f=void 0===h?[]:h,g=t.currentPage,k=t.rowsPerPage,y=t.totalItems,v=t.totalPages,x=t.onPageChange,w=t.onRowsPerPageChange,_=t.sortConfig,O=t.onSortChange,E=t.activeFilters,S=t.onFilterChange,j=t.onClientFilterChange,A=t.appliedFilters,P=t.onApplyFilters,C=t.onClearFilters,N=t.bulkSelection,I=t.onBulkAction,T=t.isBulkProcessing,M=void 0!==T&&T,D=t.bulkActions,L=t.rowIdKey,R=void 0===L?"id":L,B=t.rowActions,F=void 0===B?[]:B,U=t.enableExpansion,H=void 0!==U&&U,$=t.renderExpandedView,W=t.onExpand,G=t.getRowClass,V=t.hideHeaderControls,K=void 0!==V&&V,Y=t.hidePagination,Z=void 0!==Y&&Y,q=t.primaryToggle,J=t.secondaryToggle,X=t.storageKey,Q=t.exportButtonComponent,tt=t.exportType,et=t.exportFilters,nt=void 0!==g&&"function"==typeof x,rt=void 0!==_&&"function"==typeof O,ot="function"==typeof S,at=Ma((0,l.useState)(function(){if(X)try{var t=localStorage.getItem("rm_table_columns_".concat(X));if(t){var e=JSON.parse(t);return(0,n.reduce)(o,function(t,n){return t[n.key]=!e.hasOwnProperty(n.key)||e[n.key],t},{})}}catch(t){}return(0,n.reduce)(o,function(t,e){return t[e.key]=!0,t},{})}),2),it=at[0],lt=at[1];(0,l.useEffect)(function(){if(X)try{localStorage.setItem("rm_table_columns_".concat(X),JSON.stringify(it))}catch(t){}},[X,it]);var ct=Ma((0,l.useState)({key:null,direction:"asc"}),2),st=ct[0],ut=ct[1],mt=Ma((0,l.useState)(function(){return(0,n.get)(E,"search","")}),2),pt=mt[0],bt=mt[1],dt=Ma((0,l.useState)({}),2),ht=dt[0],ft=dt[1],gt=Ma((0,l.useState)(1),2),kt=gt[0],yt=gt[1],vt=Ma((0,l.useState)(u),2),xt=vt[0],wt=vt[1],_t=nt?g:kt,Ot=nt?k:xt,Et=rt?_:st,St=ot?E||{}:ht;(0,l.useEffect)(function(){if(ot){var t=(0,n.get)(E,"search","");bt(t)}},[ot,E]);var jt=(0,l.useCallback)(function(t){lt(function(e){return Ia(Ia({},e),{},Ta({},t,!e[t]))})},[]),At=(0,l.useCallback)(function(t){var e=(0,n.find)(o,{key:t});e&&(0,n.get)(e,"isSortable",!1)&&(rt?O(t):ut(function(e){return{key:t,direction:e.key===t&&"asc"===e.direction?"desc":"asc"}}))},[o,rt,O]),Pt=(0,l.useCallback)(function(t){nt?x(t):yt(t)},[nt,x]),Ct=(0,l.useCallback)(function(t){nt?w(t):(wt(t),yt(1))},[nt,w]),Nt=(0,l.useCallback)(function(t,e){var n="all"===e?"":e;ot?S(Ta({},t,n)):(ft(function(e){return Ia(Ia({},e),{},Ta({},t,n))}),j&&j(Ta({},t,n))),Pt(1)},[ot,S,j,Pt]),It=(0,l.useMemo)(function(){return(0,n.debounce)(function(t,e,n){e({search:t}),n(1)},500)},[]);(0,l.useEffect)(function(){return function(){It.cancel()}},[It]);var Tt=(0,l.useCallback)(function(t){bt(t),ot&&It(t,S,Pt)},[ot,It,S,Pt]),Mt=(0,l.useMemo)(function(){var t=Ca(c);if(ot||(0,n.isEmpty)(St)||Object.keys(St).forEach(function(e){var r=St[e];if(r&&"all"!==r&&""!==r){var o=(0,n.find)(p,{key:e}),a=(0,n.get)(o,"filterFn");o&&a&&(t=(0,n.filter)(t,function(t){return a(t,r)}))}}),!ot&&!(0,n.isEmpty)(pt)){var e=pt.toLowerCase();t=(0,n.filter)(t,function(t){return(0,n.some)(o,function(r){var o=(0,n.get)(t,r.key);return o&&o.toString().toLowerCase().includes(e)})})}var r=(0,n.get)(Et,"key");return!rt&&r&&t.sort(function(t,e){var o=(0,n.get)(t,r),a=(0,n.get)(e,r);if(o===a)return 0;var i=o<a?-1:1;return"asc"===Et.direction?i:-i}),t},[c,St,pt,Et,o,p,rt,ot]),Dt=(0,l.useMemo)(function(){return nt?v:Math.ceil(Mt.length/Ot)},[nt,v,Mt.length,Ot]),zt=(0,l.useMemo)(function(){if(nt)return Mt;var t=(_t-1)*Ot;return Mt.slice(t,t+Ot)},[nt,Mt,_t,Ot]),Lt=(0,l.useMemo)(function(){return(0,n.filter)(o,function(t){return(0,n.get)(it,t.key,!1)})},[o,it]),Rt=void 0!==N&&void 0!==I;return wp.element.createElement("div",{className:"rank-math-table-card"},wp.element.createElement(Xo,{title:e,headers:o,visibleColumns:it,onToggleColumn:jt,filters:p,activeFilters:St,onFilterChange:Nt,searchTerm:pt,onSearchChange:Tt,appliedFilters:A,onApplyFilters:P,onClearFilters:C,hideControls:K,primaryToggle:q,secondaryToggle:J,exportButton:Q?wp.element.createElement(Q,{headers:Lt,data:zt,filename:d,totalRecords:nt?y:Mt.length,exportType:tt,filters:et,sortConfig:Et}):wp.element.createElement(wa,{headers:Lt,data:zt,filename:d,totalRecords:nt?y:Mt.length})}),Rt&&wp.element.createElement(Ea,{selectedCount:N.selectedCount,isSelectAllMatching:N.isSelectAllMatching,totalMatchingCount:nt?y:Mt.length,onSelectAllMatching:N.selectAllMatching,onClearSelection:N.clearSelection,onBulkAction:I,isProcessing:M,bulkActions:D}),wp.element.createElement("div",{className:"rank-math-table-wrapper"},wp.element.createElement("table",{className:"rank-math-table"},wp.element.createElement("thead",null,wp.element.createElement("tr",null,Rt&&wp.element.createElement("th",{className:"rank-math-table-checkbox-column"},wp.element.createElement(i.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:N.isCurrentPageSelected,indeterminate:N.isIndeterminate,onChange:N.toggleCurrentPage,"aria-label":(0,z.__)("Select all on page","seo-by-rank-math")})),Lt.map(function(t){return wp.element.createElement("th",{key:t.key,className:t.isSortable?"sortable":"",onClick:function(){return At(t.key)}},wp.element.createElement("div",{className:"rank-math-table-header-cell"},wp.element.createElement("span",null,t.label),t.isSortable&&wp.element.createElement("span",{className:"rank-math-table-sort-icon"},Et.key===t.key?"asc"===Et.direction?"â†‘":"â†“":"â†•")))}))),wp.element.createElement(oa,{data:zt,headers:Lt,bulkSelection:N,rowIdKey:R,rowActions:F,enableExpansion:H,renderExpandedView:$,onExpand:W,getRowClass:G})),0===Mt.length&&wp.element.createElement("div",{className:"rank-math-table-empty"},wp.element.createElement("p",null,(0,z.__)("No data available","seo-by-rank-math")))),!Z&&wp.element.createElement(pa,{currentPage:_t,totalPages:Dt,totalItems:nt?y:Mt.length,rowsPerPage:Ot,onPageChange:Pt,onRowsPerPageChange:Ct,stats:f}))});var Ra=o(6724),Ba={};Ba.styleTagTransform=y(),Ba.setAttributes=h(),Ba.insert=b().bind(null,"head"),Ba.domAPI=m(),Ba.insertStyleElement=g();s()(Ra.A,Ba);Ra.A&&Ra.A.locals&&Ra.A.locals;function Fa(t){return Fa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fa(t)}function Ua(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Ha(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Fa(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Fa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Fa(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const $a=function(t){var e=t.type,r=void 0===e?"line":e,o=t.count,a=void 0===o?1:o,i=t.width,l=void 0===i?"100%":i,c=t.height,s=void 0===c?null:c,u=t.variant,m=void 0===u?"default":u,p=t.className,b=void 0===p?"":p,d=t.style,h=void 0===d?{}:d,f=function(){if(s)return s;switch(r){case"circle":return"40px";case"rect":return"100px";default:return"12px"}}(),g=function(t){var e=t.index,n=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ua(Object(n),!0).forEach(function(e){Ha(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ua(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({width:l,height:f},h),o=["rank-math-table-skeleton-item","rank-math-table-skeleton-".concat(r),"default"!==m&&"rank-math-table-skeleton-variant-".concat(m),"shimmer",b].filter(Boolean).join(" ");return wp.element.createElement("div",{key:e,className:o,style:n})};return"list"===r?wp.element.createElement("div",{className:"rank-math-table-skeleton rank-math-table-skeleton-list"},(0,n.times)(a,function(t){return wp.element.createElement("div",{key:t,className:"rank-math-table-skeleton-list-item"},wp.element.createElement("div",{className:"rank-math-table-skeleton-item shimmer",style:{width:"60%",height:"14px"}}),wp.element.createElement("div",{className:"rank-math-table-skeleton-item shimmer",style:{width:"40%",height:"12px",marginTop:"8px"}}))})):wp.element.createElement("div",{className:"rank-math-table-skeleton"},(0,n.times)(a,function(t){return wp.element.createElement(g,{key:t,index:t})}))};const Wa=function(t){var e=t.columns,r=void 0===e?5:e,o=t.rows,a=void 0===o?10:o;return wp.element.createElement("div",{className:"rank-math-table-card rank-math-table-skeleton"},wp.element.createElement("div",{className:"rank-math-table-header"},wp.element.createElement($a,{width:"200px",height:"28px"}),wp.element.createElement("div",{className:"rank-math-table-header-controls"},wp.element.createElement($a,{width:"200px",height:"36px"}),wp.element.createElement($a,{width:"150px",height:"36px"}),wp.element.createElement($a,{width:"100px",height:"36px"}),wp.element.createElement($a,{width:"100px",height:"36px"}))),wp.element.createElement("div",{className:"rank-math-table-wrapper"},wp.element.createElement("table",{className:"rank-math-table"},wp.element.createElement("thead",null,wp.element.createElement("tr",null,(0,n.times)(r,function(t){return wp.element.createElement("th",{key:t},wp.element.createElement($a,{height:"20px"}))}))),wp.element.createElement("tbody",null,(0,n.times)(a,function(t){return wp.element.createElement("tr",{key:t},(0,n.times)(r,function(t){return wp.element.createElement("td",{key:t},wp.element.createElement($a,{height:"16px"}))}))})))),wp.element.createElement("div",{className:"rank-math-table-footer"},wp.element.createElement("div",{className:"rank-math-table-footer-nav"},wp.element.createElement($a,{width:"80px",height:"32px"})),wp.element.createElement("div",{style:{display:"flex",gap:"8px"}},wp.element.createElement($a,{width:"100px",height:"32px"}),wp.element.createElement($a,{width:"60px",height:"32px"}),wp.element.createElement($a,{width:"100px",height:"32px"}))))};function Ga(t){return function(t){if(Array.isArray(t))return Va(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Va(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Va(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Va(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var Ka=function(t,e,n){var r=new Blob([t],{type:n});Ya(r,e)},Ya=function(t,e){var n=window.URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=e,r.style.display="none",document.body.appendChild(r),r.click(),setTimeout(function(){document.body.removeChild(r),window.URL.revokeObjectURL(n)},100)};function Za(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){s=!0,o=t}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return qa(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qa(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qa(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var Ja="post_type",Xa="is_orphan",Qa="seo_score_range";function ti(){var t=window.location.hash;if(!t||"#"===t)return new URLSearchParams;var e=Za(t.replace("#","").split("?"),2)[1];return new URLSearchParams(e||"")}window.rankMathComponents={DashboardHeader:Ao,ListTable:La,TableBody:oa,TableHeader:Xo,TablePagination:pa,TableRow:ra,TableSkeleton:Wa,TableExportButton:wa,BulkActionsBar:Ea,FilterStaging:Wo,MultiSelectDropdown:To,DataTableToggleButtonGroup:Ko,Skeleton:$a,formatDate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return"â€”";try{return new Date(t).toLocaleDateString("en-US",la(la({},{year:"numeric",month:"short",day:"numeric"}),e))}catch(t){return"â€”"}},formatNumber:sa,truncateText:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"...";return!t||t.length<=e?t:t.substring(0,e)+n},getTimestamp:function(){var t=new Date,e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),o=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),i=String(t.getSeconds()).padStart(2,"0");return"".concat(e).concat(n).concat(r,"_").concat(o).concat(a).concat(i)},exportToCSV:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"export.csv",o=(0,n.map)(t,"label").join(","),a=(0,n.map)(e,function(e){return(0,n.map)(t,function(t){return function(t){if((0,n.isNil)(t))return"";var e=String(t);return e.includes(",")||e.includes('"')||e.includes("\n")?'"'.concat(e.replace(/"/g,'""'),'"'):e}(t.exportValue?t.exportValue(e):e[t.key])}).join(",")}),i=[o].concat(Ga(a)).join("\n");Ka(i,r,"text/csv")},exportToJSON:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"export.json",o=(0,n.map)(e,function(e){var n={};return t.forEach(function(t){n[t.key]=t.exportValue?t.exportValue(e):e[t.key]}),n}),a=JSON.stringify(o,null,2);Ka(a,r,"application/json")},exportToExcel:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"export.xls",o="<table>";o+="<thead><tr>",t.forEach(function(t){o+="<th>".concat((0,n.escape)(t.label),"</th>")}),o+="</tr></thead>",o+="<tbody>",e.forEach(function(e){o+="<tr>",t.forEach(function(t){var r,a=t.exportValue?t.exportValue(e):null!==(r=e[t.key])&&void 0!==r?r:"";o+="<td>".concat((0,n.escape)(String(a)),"</td>")}),o+="</tr>"}),o+="</tbody></table>";var a=new Blob([o],{type:"application/vnd.ms-excel"});Ya(a,r)},getPostsFiltersFromURL:function(t){var e=t.get(Ja)||"",n=e?e.split(",").filter(Boolean):[];return{post_type:n.length>0?n:[],is_orphan:t.get(Xa)||"",seo_score_range:t.get(Qa)||""}},setPostsFiltersInHash:function(t,e){var n=ti();n.delete(Ja),n.delete(Xa),n.delete(Qa),e.post_type&&e.post_type.length>0&&n.set(Ja,e.post_type.join(",")),e.is_orphan&&n.set(Xa,e.is_orphan),e.seo_score_range&&n.set(Qa,e.seo_score_range),n.set("page","1");var r=n.toString();window.location.hash=r?"".concat(t,"?").concat(r):t},clearPostsFiltersFromHash:function(t){var e=ti();e.delete(Ja),e.delete(Xa),e.delete(Qa),e.set("page","1");var n=e.toString();window.location.hash=n?"".concat(t,"?").concat(n):t},Button:j,CheckboxControl:D,CheckboxList:$,RadioControl:J,ToggleControl:at,Group:gt,RepeatableGroup:jt,DatePicker:Gt,TextareaControl:Qt,TextControl:Dt,Table:ie,Notice:de,InvalidSiteUrlNotice:he,HelpTooltip:xe,PrivacyBox:Ee,ProBadge:Se,Rating:Te,SocialShare:Ue,Tooltip:ve,UploadFile:We,SelectControl:tn,SelectVariable:bn,SelectWithSearch:_n,SearchPage:zn,ToggleGroupControl:Kn,StatusAnchorTag:er,StatusButton:ur,StatusList:hr,useClickOutside:Rt,TabPanel:wr,AnalyzerResult:Wr,ProgressBar:Kr,Graphs:Er,getCategoryLabel:Fr,getStatusIcons:jr,getStatusLabels:Ar},e()(function(){var t=e()("body");if((0,n.some)(["rank-math_page_rank-math-role-manager","rank-math_page_rank-math-seo-analysis","rank-math_page_rank-math-status","toplevel_page_rank-math","rank-math_page_rank-math-options-general","rank-math_page_rank-math-options-titles","rank-math_page_rank-math-options-sitemap","rank-math_page_rank-math-options-instant-indexing","rank-math_page_rank-math-links-page","rank-math_page_rank-math-ai-visibility"],function(e){return t.hasClass(e)})){setTimeout(function(){var t,e;t=document.querySelectorAll("#wpbody-content > .rank-math-notice"),e=document.querySelector(".rank-math-wrap"),!(0,n.isEmpty)(t)&&e&&(0,n.forEach)(t,function(t){e.insertAdjacentElement("afterbegin",t)})},50)}})}()}();PK     ’ŠU]¤ê{(Þ4 Þ4    assets/admin/js/rank-math-app.jsnu „[µü¤        !function(){var e={1873:function(e,t,n){var a=n(9325).Symbol;e.exports=a},2552:function(e,t,n){var a=n(1873),r=n(659),i=n(9350),o=a?a.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?r(e):i(e)}},4128:function(e,t,n){var a=n(1800),r=/^\s+/;e.exports=function(e){return e?e.slice(0,a(e)+1).replace(r,""):e}},4840:function(e,t,n){var a="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=a},659:function(e,t,n){var a=n(1873),r=Object.prototype,i=r.hasOwnProperty,o=r.toString,s=a?a.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var a=!0}catch(e){}var r=o.call(e);return a&&(t?e[s]=n:delete e[s]),r}},9350:function(e){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},9325:function(e,t,n){var a=n(4840),r="object"==typeof self&&self&&self.Object===Object&&self,i=a||r||Function("return this")();e.exports=i},1800:function(e){var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},8221:function(e,t,n){var a=n(3805),r=n(124),i=n(9374),o=Math.max,s=Math.min;e.exports=function(e,t,n){var l,c,u,p,d,m,h=0,g=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=l,a=c;return l=c=void 0,h=t,p=e.apply(a,n)}function w(e){var n=e-m;return void 0===m||n>=t||n<0||f&&e-h>=u}function b(){var e=r();if(w(e))return k(e);d=setTimeout(b,function(e){var n=t-(e-m);return f?s(n,u-(e-h)):n}(e))}function k(e){return d=void 0,v&&l?y(e):(l=c=void 0,p)}function _(){var e=r(),n=w(e);if(l=arguments,c=this,m=e,n){if(void 0===d)return function(e){return h=e,d=setTimeout(b,t),g?y(e):p}(m);if(f)return clearTimeout(d),d=setTimeout(b,t),y(m)}return void 0===d&&(d=setTimeout(b,t)),p}return t=i(t)||0,a(n)&&(g=!!n.leading,u=(f="maxWait"in n)?o(i(n.maxWait)||0,t):u,v="trailing"in n?!!n.trailing:v),_.cancel=function(){void 0!==d&&clearTimeout(d),h=0,l=m=c=d=void 0},_.flush=function(){return void 0===d?p:k(r())},_}},3805:function(e){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},346:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},4394:function(e,t,n){var a=n(2552),r=n(346);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==a(e)}},124:function(e,t,n){var a=n(9325);e.exports=function(){return a.Date.now()}},9374:function(e,t,n){var a=n(4128),r=n(3805),i=n(4394),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=a(e);var n=s.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):o.test(e)?NaN:+e}},6942:function(e,t){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=o(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)a.call(e,n)&&e[n]&&(t=o(t,n));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(n=function(){return r}.apply(t,[]))||(e.exports=n)}()}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{__experimentalGetAllAnnotationsForBlock:function(){return ft},__experimentalGetAnnotations:function(){return yt},__experimentalGetAnnotationsForBlock:function(){return gt},__experimentalGetAnnotationsForRichText:function(){return vt}});var t={};n.r(t),n.d(t,{__experimentalAddAnnotation:function(){return Et},__experimentalRemoveAnnotation:function(){return Tt},__experimentalRemoveAnnotationsBySource:function(){return Ot},__experimentalUpdateAnnotationRange:function(){return xt}});const a=wp.hooks,r=wp.i18n,i=wp.data,o=wp.element;var s=n(6942),l=n.n(s);const c=lodash,u=wp.compose,p=wp.components;function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}var m=["tabId","onClick","children","selected"];function h(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,b(a.key),a)}}function g(e,t,n){return t=v(t),function(e,t){if(t&&("object"==d(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,n||[],v(e).constructor):t.apply(e,n))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function v(e){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},v(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}function w(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e){var t=function(e,t){if("object"!=d(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=d(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==d(t)?t:t+""}function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},k.apply(null,arguments)}var _=function(e){var t=e.tabId,n=e.onClick,a=e.children,r=e.selected,i=function(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(-1!==t.indexOf(a))continue;n[a]=e[a]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}(e,m);return wp.element.createElement(p.Button,k({role:"tab",tabIndex:r?null:-1,"aria-selected":r,id:t,onClick:n},i),a)},E=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),w(e=g(this,t,arguments),"handleClick",function(t){var n=e.props.onSelect,a=void 0===n?c.noop:n;e.setState({selected:t}),a(t)}),w(e,"onNavigate",function(e,t){t.click()});var n=e.props,a=n.tabs,r=n.initialTabName;return e.state={selected:r||(a.length>0?a[0].name:null)},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),function(e,t,n){return t&&h(e.prototype,t),n&&h(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"render",value:function(){var e=this,t=this.state.selected,n=this.props,a=n.activeClass,r=void 0===a?"is-active":a,i=n.className,o=n.instanceId,s=n.orientation,u=void 0===s?"horizontal":s,d=n.tabs,m=(0,c.find)(d,{name:t}),h=o+"-"+m.name,g=d.slice(4);return wp.element.createElement("div",{className:i},wp.element.createElement(p.NavigableMenu,{role:"tablist",orientation:u,onNavigate:this.onNavigate,className:"components-tab-panel__tabs "+t},d.slice(0,4).map(function(n){return wp.element.createElement(_,{className:l()("components-tab-panel__tabs-item",n.className,w({},r,n.name===t)),tabId:o+"-"+n.name,"aria-controls":o+"-"+n.name+"-view",selected:n.name===t,key:n.name,onClick:(0,c.partial)(e.handleClick,n.name)},n.title)}),g.map(function(n){return wp.element.createElement(_,{className:l()("components-tab-panel__tabs-item",n.className,w({},r,n.name===t)),tabId:o+"-"+n.name,"aria-controls":o+"-"+n.name+"-view",selected:n.name===t,key:n.name,onClick:(0,c.partial)(e.handleClick,n.name)},n.title)})),m&&wp.element.createElement("div",{"aria-labelledby":h,role:"tabpanel",id:h+"-view",className:"components-tab-panel__tab-content"},this.props.children(m)))}}])}(o.Component);const T=(0,u.withInstanceId)(E);n.dn(O);var x=document.createElement("div");function O(e){return e&&"string"==typeof e&&(e=e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),x.innerHTML=e,e=x.textContent,x.textContent=""),e}function S(e,t,n){var a=0;return!1!==(0,c.get)(n,"pixelWidth",!1)&&(a=Math.min(100,Math.floor(t/n.pixelWidth*100))),Math.max(Math.min(100,Math.floor(e/n.max*100)),a)+"%"}function N(e,t){return e<=t.min||e>t.max}function C(e,t){return e<=t.minWidth||e>t.pixelWidth}function I(e,t){var n=O(e).length,a=0,r=!1;if(!1!==(0,c.get)(t,"pixelWidth",!1)){r=!0;var i=document.createTextNode(e),o=document.createElement("span");o.appendChild(i),o.id="rank-math-width-tester",o.className=t.widthCheckerClass;var s=document.body.appendChild(o);a=document.getElementById("rank-math-width-tester").offsetWidth,s.outerHTML=""}return{left:S(n,a,t),isInvalid:N(n,t),isInvalidWidth:!!r&&C(a,t),count:n+" / "+t.max,pixelWidth:r?a+"px / "+t.pixelWidth+"px":""}}n.dn(I);const M=function(e){var t=I(e.source,e),n=t.pixelWidth?" (".concat(t.pixelWidth,")"):"";return wp.element.createElement("span",{className:l()("length-indicator-wrapper",{invalid:t.isInvalid||t.isInvalidWidth})},wp.element.createElement("span",{className:"length-count"},t.count,n),wp.element.createElement("span",{className:"length-indicator"},wp.element.createElement("span",{style:{left:t.left}})))},D=wp.htmlEntities,A=React;function P(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function j(e,t){let n,a,r=[];for(let i=0;i<e.length;i++){const o=e[i];if("string"!==o.type){if(void 0===t[o.value])throw new Error(`Invalid interpolation, missing component node: \`${o.value}\``);if("object"!=typeof t[o.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${o.value}\``);if("componentClose"===o.type)throw new Error(`Missing opening component token: \`${o.value}\``);if("componentOpen"===o.type){n=t[o.value],a=i;break}r.push(t[o.value])}else r.push(o.value)}if(n){const i=function(e,t){const n=t[e];let a=0;for(let r=e+1;r<t.length;r++){const e=t[r];if(e.value===n.value){if("componentOpen"===e.type){a++;continue}if("componentClose"===e.type){if(0===a)return r;a--}}}throw new Error("Missing closing component token `"+n.value+"`")}(a,e),o=j(e.slice(a+1,i),t),s=(0,A.cloneElement)(n,{},o);if(r.push(s),i<e.length-1){const n=j(e.slice(i+1),t);r=r.concat(n)}}return r=r.filter(Boolean),0===r.length?null:1===r.length?r[0]:(0,A.createElement)(A.Fragment,null,...r)}function R(e){const{mixedString:t,components:n,throwErrors:a}=e;if(!n)return t;if("object"!=typeof n){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const r=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(P)}(t);try{return j(r,n)}catch(e){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}const L=function(e){var t=e.tags,n=e.components,a=e.children;return n=n||{},!1===(0,c.isUndefined)(t)&&(t=t.split(",")).forEach(function(e){var t=e;n[e]=wp.element.createElement(t,null)}),R({mixedString:a,components:n})};function B(e){return B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},B(e)}function F(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,W(a.key),a)}}function H(e,t,n){return t=V(t),function(e,t){if(t&&("object"==B(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,U()?Reflect.construct(t,n||[],V(e).constructor):t.apply(e,n))}function U(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(U=function(){return!!e})()}function V(e){return V=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},V(e)}function z(e,t){return z=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},z(e,t)}function W(e){var t=function(e,t){if("object"!=B(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=B(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==B(t)?t:t+""}var G=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){(t=W(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(n=H(this,t,[e]),"state",{}),n.state.variables=n.getFiltered(),n.state.filtered=n.state.variables,n.state.display="none",n.state.isOpen=!1,n.handleOutsideClick=n.handleOutsideClick.bind(n),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&z(e,t)}(t,e),function(e,t,n){return t&&F(e.prototype,t),n&&F(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"getFiltered",value:function(){var e=this.props.exclude,t=Object.values(rankMath.variables);return(0,c.isUndefined)(e)?t:t.filter(function(t){return!e.includes(t.variable)})}},{key:"render",value:function(){var e=this;return wp.element.createElement(o.Fragment,null,wp.element.createElement("div",{className:"rank-math-variables-dropdown",style:{display:this.state.display},ref:function(t){e.node=t}},wp.element.createElement(p.TextControl,{autoComplete:"off",placeholder:(0,D.decodeEntities)((0,r.__)("Search &hellip;","seo-by-rank-math")),onChange:function(t){e.handleSearch(t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement("ul",null,this.state.filtered.map(function(t,n){return wp.element.createElement("li",{key:n,"data-var":t.variable,role:"presentation",onClick:function(){e.props.onClick(t)}},wp.element.createElement("strong",null,t.name),wp.element.createElement("span",null,wp.element.createElement(L,{tags:"strong"},t.description.replace("<strong>","{{strong}}").replace("</strong>","{{/strong}}"))))},this))),wp.element.createElement(p.Button,{icon:"arrow-down-alt2",onClick:function(){e.toggle()}}))}},{key:"toggle",value:function(){this.state.isOpen?document.removeEventListener("click",this.handleOutsideClick,!0):document.addEventListener("click",this.handleOutsideClick,!0),this.setState({display:this.state.isOpen?"none":"block",isOpen:!this.state.isOpen})}},{key:"handleOutsideClick",value:function(e){this.node.contains(e.target)||this.toggle()}},{key:"handleSearch",value:function(e){var t=e.toLowerCase();2>t.length?this.setState({filtered:this.state.variables}):this.setState({filtered:this.state.variables.filter(function(e){return-1!==Object.values(e).join(" ").toLowerCase().indexOf(t)})})}}])}(o.Component);const K=G;const q=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{title:t.getTitle(),serpTitle:t.getSerpTitle()}}),(0,i.withDispatch)(function(e){return{updateTitle:function(t){e("rank-math").updateSerpTitle(t),e("rank-math").updateTitle(t)}}}))(function(e){var t=e.title,n=e.serpTitle,a=e.updateTitle;return wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-editor-title"},(0,r.__)("Title","seo-by-rank-math")),wp.element.createElement(M,{source:n,min:15,max:60,pixelWidth:580,widthCheckerClass:"title"}),wp.element.createElement("div",{className:"variable-group"},wp.element.createElement(p.TextControl,{id:"rank-math-editor-title",value:t,placeholder:rankMath.assessor.serpData.titleTemplate,help:(0,r.__)("This is what will appear in the first line when this post shows up in the search results.","seo-by-rank-math"),onChange:a,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{exclude:["seo_title","seo_description"],onClick:function(e){return a(t+" %"+e.variable+"%")}})))}),Y=wp.url,$=function(e){return e.replace(/<\/?[a-z][^>]*?>/gi,"")};n.dn($);const J=function(e){return e.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};n.dn(J);const X=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,t)};n.dn(X);const Z=function(e){return e.replace(/<!--[\s\S]*?-->/g,"")};function Q(e){return e.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/(\r\n|\n|\r)/gm,"")}function ee(e){return(0,c.isUndefined)(e)?"":(0,c.flow)([J,X,$,Z,Q])(e)}n.dn(Z);var te={};(0,c.isUndefined)(rankMath.assessor)||(0,c.forEach)(rankMath.assessor.diacritics,function(e,t){return te[t]=new RegExp(e,"g")});const ne=function(e){if((0,c.isUndefined)(e))return e;for(var t in te)e=e.replace(te[t],t);return e};n.dn(ne);const ae=function(){return!(0,c.isNull)(document.getElementById("site-editor"))};n.dn(ae);const re=function(){if(!ae())return!1;var e=wp.data.select("core/editor"),t=e.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===t)return!0;var n=e.getCurrentTemplateId()||t;return!(!(0,c.endsWith)(n,"//home")&&!(0,c.endsWith)(n,"//front-page"))||!(!(0,c.endsWith)(n,"//page")&&!(0,c.endsWith)(n,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};n.dn(re);const ie=(0,u.compose)((0,i.withSelect)(function(e){var t=rankMathEditor.assessor.dataCollector,n=e("rank-math").getSerpSlug();return{permalink:n||t.getSlug(),serpPermalink:t.getPermalink()}}),(0,i.withDispatch)(function(){return{updatePermalink:function(e){rankMathEditor.updatePermalink(ee(e),!0)},updatePermalinkSanitize:function(e){rankMathEditor.updatePermalinkSanitize(function(e){return e=e.replace(/,/g,""),ee(e=ne(e))}(e))}}}))(function(e){var t=e.permalink,n=e.serpPermalink,a=e.updatePermalink,i=e.updatePermalinkSanitize;return wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-editor-permalink"},(0,r.__)("Permalink","seo-by-rank-math")),wp.element.createElement(M,{source:(0,Y.safeDecodeURIComponent)(n),min:5,max:75}),wp.element.createElement(p.TextControl,{id:"rank-math-editor-permalink",value:rankMath.is_front_page||re()?"/":(0,Y.safeDecodeURIComponent)(t),onChange:a,help:rankMath.is_front_page||re()?(0,r.__)("Editing Homepage permalink is not possible.","seo-by-rank-math"):(0,r.__)("This is the unique URL of this page, displayed below the post title in the search results.","seo-by-rank-math"),disabled:rankMath.is_front_page||re()?"disabled":"",onBlur:function(e){i(e.target.value)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});const oe=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{description:t.getDescription(),serpDescription:t.getSerpDescription()}}),(0,i.withDispatch)(function(e){return{updateDescription:function(t){e("rank-math").updateSerpDescription(t),e("rank-math").updateDescription(t)}}}))(function(e){var t=e.description,n=e.serpDescription,a=e.updateDescription;return wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-editor-description"},(0,r.__)("Description","seo-by-rank-math")),wp.element.createElement(M,{source:n,min:80,max:160,pixelWidth:920,widthCheckerClass:"description"}),wp.element.createElement("div",{className:"variable-group rank-math-description-variables"},wp.element.createElement(p.TextareaControl,{id:"rank-math-editor-description",value:O(t),placeholder:n||(0,c.unescape)(rankMath.assessor.serpData.descriptionTemplate),help:(0,r.__)("This is what will appear as the description when this post shows up in the search results.","seo-by-rank-math"),onChange:a,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{exclude:["seo_title","seo_description"],onClick:function(e){return a(t+" %"+e.variable+"%")}})))});const se=(0,u.compose)((0,i.withSelect)(function(e){return{type:e("rank-math").getSnippetPreviewType()}}),(0,i.withDispatch)(function(e,t){return{updatePreviewType:function(n){e("rank-math").updateSnippetPreviewType(n===t.type?"":n)}}}))(function(e){var t=e.type,n=e.updatePreviewType,r=l()("button button-secondary button-small",{active:"desktop"===t}),i=l()("button button-secondary button-small",{active:"mobile"===t});return wp.element.createElement("div",{className:"rank-math-button-devices alignright"},(0,a.applyFilters)("rank_math_before_serp_devices",""),wp.element.createElement("div",{onClick:function(){return n("desktop")},className:r},wp.element.createElement("i",{className:"rm-icon rm-icon-desktop"})),wp.element.createElement("div",{onClick:function(){return n("mobile")},className:i},wp.element.createElement("i",{className:"rm-icon rm-icon-mobile"})))});function le(e){return 100<e?"bad-fk dark":80<e?"good-fk":50<e?"ok-fk":"bad-fk"}n.dn(le);const ce=(0,i.withSelect)(function(e){var t=e("rank-math");return{score:t.getAnalysisScore(),isRefreshing:t.isRefreshing()}})(function(e){var t=e.score;return wp.element.createElement("div",{className:"seo-score "+le(t)},wp.element.createElement("div",{className:"score-text"},t," / 100"))}),ue=function(e){return e.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&")};function pe(e,t,n,a){return(0,c.isUndefined)(t)?t:(t=(0,c.truncate)(t,{length:n,separator:a||" "}),""===e?t:t.replace(new RegExp(ue(e),"gi"),function(e){return'<mark className="highlight">'+e+"</mark>"}))}function de(e){return e.replace(/(^\w{1})|(\s+\w{1})/g,function(e){return e.toUpperCase()})}n.dn(ue),n.dn(pe);var me=function(e,t){for(var n=[],a=1;a<=e;a++)n.push(wp.element.createElement(p.Dashicon,{key:Math.random(),size:"13",icon:"star-"+t}));return n};const he=(0,i.withSelect)(function(e){var t=e("rank-math").getSchemas();return{schema:(0,c.find)(t,function(e){return!(0,c.isEmpty)(e.metadata.isPrimary)})}})(function(e){var t=e.schema;if((0,c.isEmpty)(t))return null;var n=(0,c.get)(t,"review.reviewRating",{}),a=n.ratingValue;if((0,c.isEmpty)(a))return null;(0,c.get)(n,"worstRating",1);var i=(0,c.get)(n,"bestRating",5);return wp.element.createElement("div",{className:"rank-math-rating-preview"},wp.element.createElement("div",{className:"serp-ratings"},me(i,"filled"),function(e,t,n){return e*=100/n,wp.element.createElement("div",{className:"serp-result",style:{width:e+"%"}},me(n,"filled"))}(a,0,i)),wp.element.createElement("span",{className:"serp-rating-label"},(0,r.__)("Rating: ","seo-by-rank-math")),wp.element.createElement("span",{className:"serp-rating-value"},a))});function ge(e){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ge(e)}function fe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ge(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=ge(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ge(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const ve=(0,i.withSelect)(function(e){var t=e("rank-math"),n=t.getRobots();return{title:t.getSerpTitle(),permalink:rankMathEditor.assessor.dataCollector.getPermalink(),description:t.getSerpDescription(),previewType:t.getSnippetPreviewType(),isNoIndex:"noindex"in n,keyword:t.getSelectedKeyword().data.value}})(function(e){var t=e.title,n=e.permalink,a=e.description,i=e.previewType,o=void 0===i?"desktop":i,s=e.isNoIndex,c=e.keyword,u=e.onClick,p=e.showScore,d=void 0===p||p,m=e.showDevices,h=void 0!==m&&m,g=l()("serp-preview",fe(fe({"expanded-preview":""!==o},"".concat(o,"-preview"),""!==o&&h),"noindex-preview",s)),f=rankMath.capitalizeTitle?de(t):t,v=rankMathEditor.assessor.getResearch("slugify")(c);return wp.element.createElement("div",{className:g},wp.element.createElement("div",{className:"serp-preview-title","data-title":(0,r.__)("Preview","seo-by-rank-math"),"data-desktop":(0,r.__)("Desktop Preview","seo-by-rank-math"),"data-mobile":(0,r.__)("Mobile Preview","seo-by-rank-math")},d&&wp.element.createElement(ce,null)," ",h&&wp.element.createElement(se,null)),wp.element.createElement("div",{className:"serp-preview-wrapper"},wp.element.createElement("div",{className:"serp-preview-bg"},wp.element.createElement("div",{className:"serp-preview-input"},wp.element.createElement("input",{type:"text",value:c||(0,r.__)("Rank Math","seo-by-rank-math"),disabled:!0}),wp.element.createElement("span",{className:"serp-icon-search"},wp.element.createElement("svg",{focusable:"false",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))),wp.element.createElement("span",{className:"serp-icon-mic"})),wp.element.createElement("div",{className:"serp-preview-menus"},wp.element.createElement("ul",null,wp.element.createElement("li",{className:"current"},wp.element.createElement("img",{src:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Ik0xMCAydjJhNiA2IDAgMCAxIDYgNmgyYTggOCAwIDAgMC04LTh6Ii8+PHBhdGggZmlsbD0iI0VBNDMzNSIgZD0iTTEwIDRWMmE4IDggMCAwIDAtOCA4aDJjMC0zLjMgMi43LTYgNi02eiIvPjxwYXRoIGZpbGw9IiNGQkJDMDQiIGQ9Ik00IDEwSDJhOCA4IDAgMCAwIDggOHYtMmMtMy4zIDAtNi0yLjY5LTYtNnoiLz48cGF0aCBmaWxsPSIjNDI4NUY0IiBkPSJNMjIgMjAuNTlsLTUuNjktNS42OUE3Ljk2IDcuOTYgMCAwIDAgMTggMTBoLTJhNiA2IDAgMCAxLTYgNnYyYzEuODUgMCAzLjUyLS42NCA0Ljg4LTEuNjhsNS42OSA1LjY5TDIyIDIwLjU5eiIvPjwvc3ZnPgo=",alt:"","data-atf":"1"}),(0,r.__)("All","seo-by-rank-math")),wp.element.createElement("li",null,wp.element.createElement("svg",{focusable:"false",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),wp.element.createElement("path",{d:"M14 13l4 5H6l4-4 1.79 1.78L14 13zm-6.01-2.99A2 2 0 0 0 8 6a2 2 0 0 0-.01 4.01zM22 5v14a3 3 0 0 1-3 2.99H5c-1.64 0-3-1.36-3-3V5c0-1.64 1.36-3 3-3h14c1.65 0 3 1.36 3 3zm-2.01 0a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h7v-.01h7a1 1 0 0 0 1-1V5z"}))," ",(0,r.__)("Images","seo-by-rank-math")),wp.element.createElement("li",null,wp.element.createElement("svg",{focusable:"false",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{clipRule:"evenodd",d:"M0 0h24v24H0z",fill:"none"}),wp.element.createElement("path",{clipRule:"evenodd",d:"M10 16.5l6-4.5-6-4.5v9zM5 20h14a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1zm14.5 2H5a3 3 0 0 1-3-3V4.4A2.4 2.4 0 0 1 4.4 2h15.2A2.4 2.4 0 0 1 22 4.4v15.1a2.5 2.5 0 0 1-2.5 2.5z",fillRule:"evenodd"}))," ",(0,r.__)("Videos","seo-by-rank-math")),wp.element.createElement("li",null,wp.element.createElement("svg",{focusable:"false",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),wp.element.createElement("path",{d:"M12 11h6v2h-6v-2zm-6 6h12v-2H6v2zm0-4h4V7H6v6zm16-7.22v12.44c0 1.54-1.34 2.78-3 2.78H5c-1.64 0-3-1.25-3-2.78V5.78C2 4.26 3.36 3 5 3h14c1.64 0 3 1.25 3 2.78zM19.99 12V5.78c0-.42-.46-.78-1-.78H5c-.54 0-1 .36-1 .78v12.44c0 .42.46.78 1 .78h14c.54 0 1-.36 1-.78V12zM12 9h6V7h-6v2z"}))," ",(0,r.__)("News","seo-by-rank-math")),wp.element.createElement("li",null,wp.element.createElement("svg",{focusable:"false",viewBox:"0 0 16 16"},wp.element.createElement("path",{d:"M7.503 0c3.09 0 5.502 2.487 5.502 5.427 0 2.337-1.13 3.694-2.26 5.05-.454.528-.906 1.13-1.358 1.734-.452.603-.754 1.508-.98 1.96-.226.452-.377.829-.904.829-.528 0-.678-.377-.905-.83-.226-.451-.527-1.356-.98-1.959-.452-.603-.904-1.206-1.356-1.734C3.132 9.121 2 7.764 2 5.427 2 2.487 4.412 0 7.503 0zm0 1.364c-2.283 0-4.14 1.822-4.14 4.063 0 1.843.86 2.873 1.946 4.177.468.547.942 1.178 1.4 1.79.34.452.596.99.794 1.444.198-.455.453-.992.793-1.445.459-.61.931-1.242 1.413-1.803 1.074-1.29 1.933-2.32 1.933-4.163 0-2.24-1.858-4.063-4.139-4.063zm0 2.734a1.33 1.33 0 11-.001 2.658 1.33 1.33 0 010-2.658"}))," ",(0,r.__)("Maps","seo-by-rank-math")),wp.element.createElement("li",null,wp.element.createElement("svg",{focusable:"false",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},wp.element.createElement("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}))," ",(0,r.__)("More","seo-by-rank-math"))),wp.element.createElement("ul",{className:"menus-right"},wp.element.createElement("li",null,(0,r.__)("Settings","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Tools","seo-by-rank-math")))),wp.element.createElement("div",{className:"serp-preview-result-stats"},(0,r.__)("About 43,700,000 results (0.32 seconds) ","seo-by-rank-math"))),wp.element.createElement("div",{className:"serp-preview-body",role:"button",tabIndex:0,onClick:function(){u&&u()}},wp.element.createElement("div",{className:"group"},wp.element.createElement("img",{src:rankMath.siteFavIcon,width:"16",height:"16",className:"serp-preview-favicon",alt:""}),wp.element.createElement("div",{className:"serp-url",dangerouslySetInnerHTML:{__html:pe(v,ee((0,Y.safeDecodeURIComponent)(n)),75,/-? +/)}})),wp.element.createElement("div",{className:"group"},wp.element.createElement("h5",{className:"serp-title",dangerouslySetInnerHTML:{__html:pe(c,ee(f),60)}})),wp.element.createElement(he,null),wp.element.createElement("div",{className:"group"},wp.element.createElement("div",{className:"serp-description",dangerouslySetInnerHTML:{__html:pe(c,ee(a),160)}}))),wp.element.createElement("div",{className:"serp-preview-noindex"},wp.element.createElement("h3",null,(0,r.__)("Noindex robots meta is enabled","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("This page will not appear in search results. You can disable noindex in the Advanced tab.","seo-by-rank-math")))))});const ye=(0,i.withSelect)(function(e){return{isNoIndex:"noindex"in e("rank-math").getRobots()}})(function(){return wp.element.createElement("div",{className:"rank-math-editor-general"},wp.element.createElement(ve,{showScore:!1,showDevices:!0}),wp.element.createElement(q,null),wp.element.createElement(ie,null),wp.element.createElement(oe,null))});function we(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var r=e.length;for(t=0;t<r;t++)e[t]&&(n=we(e[t]))&&(a&&(a+=" "),a+=n)}else for(n in e)e[n]&&(a&&(a+=" "),a+=n);return a}const be=function(){for(var e,t,n=0,a="",r=arguments.length;n<r;n++)(e=arguments[n])&&(t=we(e))&&(a&&(a+=" "),a+=t);return a};const ke=e=>(0,o.createElement)("path",e),_e=e=>(0,o.createElement)("rect",e),Ee=(0,o.forwardRef)(({className:e,isPressed:t,...n},a)=>{const r={...n,className:be(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,o.createElement)("svg",{...r,ref:a})});function Te(e){var t=e.height,n=void 0===t?16:t,a=e.width,r=void 0===a?16:a,i=e.style,o=void 0===i?{}:i;return wp.element.createElement(Ee,{viewBox:"0 0 32 32",fill:"none",height:n,width:r,style:o},wp.element.createElement(_e,{width:"32",height:"32",fill:"none"}),wp.element.createElement(ke,{d:"M17.9686 14.1623L26.7065 4H24.6358L17.0488 12.8238L10.9891 4H4L13.1634 17.3432L4 28H6.07069L14.0827 18.6817L20.4822 28H27.4714L17.9681 14.1623H17.9686ZM15.1326 17.4607L14.2041 16.132L6.81679 5.55961H9.99723L15.9589 14.0919L16.8873 15.4206L24.6368 26.5113H21.4564L15.1326 17.4612V17.4607Z",fill:"currentColor"}))}function xe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var r={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},i=a,o="",s=a.indexOf("#");-1!==s&&(i=a.substring(0,s),o=a.substring(s));var l=Object.keys(r).map(function(e){return"".concat(e,"=").concat(r[e])}).join("&"),c=i.includes("?")&&!i.endsWith("?")?"&":"?";return i+c+l+o+n}Ee.displayName="SVG",n.dn(Te),n.dn(xe);const Oe=jQuery;var Se=n.n(Oe);function Ne(e){return Ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ne(e)}function Ce(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,Ie(a.key),a)}}function Ie(e){var t=function(e,t){if("object"!=Ne(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Ne(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ne(t)?t:t+""}var Me=function(){return function(e,t,n){return t&&Ce(e.prototype,t),n&&Ce(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),function(e,t,n){(t=Ie(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"map",null)},[{key:"swap",value:function(e,t){var n=this;if(!(e=e||""))return"";var a=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return e.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(a,function(e){return n.replace(t,e)}).trim()}},{key:"replace",value:function(e,t){var n=t.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(n)){var a="term_description"===n?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():Se()(a).val()}return n.includes("customfield(")?(n=n.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[n]:"":(e=e||this.getMap(),(n="seo_description"===(n="seo_title"===(n=n.includes("(")?n.split("(")[0]:n)?"title":n)?"excerpt":n)in e?e[n]:"")}},{key:"getMap",value:function(){var e=this;return null!==this.map||(this.map={},Se().each(rankMath.variables,function(t,n){t=t.toLowerCase().replace(/%+/g,"").split("(")[0],e.map[t]=n.example})),this.map}},{key:"setVariable",value:function(e,t){null!==this.map?this.map[e]=t:void 0!==rankMath.variables[e]&&(rankMath.variables[e].example=t)}}])}(),De=new Me;function Ae(e){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ae(e)}const Pe=function(e){var t=l()("rank-math-social-preview","rank-math-social-preview-"+e.network,e.cardType),n=e.title?De.swap(e.title):e.serpTitle,a=rankMath.capitalizeTitle?de(n):n;return wp.element.createElement("div",{className:t},wp.element.createElement("div",{className:"rank-math-social-preview-item"},wp.element.createElement("div",{className:"rank-math-social-preview-meta"},wp.element.createElement("div",{className:"social-profile-image"}),e.children),wp.element.createElement("div",{className:"rank-math-social-preview-item-wrapper"},wp.element.createElement("div",{className:"rank-math-social-preview-image"},wp.element.createElement("img",{className:"rank-math-social-image-thumbnail",src:e.image,alt:""}),e.hasOverlay&&e.imageOverlay&&"object"===Ae(rankMath.overlayImages[e.imageOverlay])&&wp.element.createElement("img",{src:rankMath.overlayImages[e.imageOverlay].url,className:"rank-math-social-preview-image-overlay overlay-position-"+rankMath.overlayImages[e.imageOverlay].position,alt:""})),wp.element.createElement("div",{className:"rank-math-social-preview-caption"},"facebook"===e.network&&wp.element.createElement("h4",{className:"rank-math-social-preview-publisher"},e.siteurl),wp.element.createElement("h3",{className:"rank-math-social-preview-title"},a),wp.element.createElement("p",{className:"rank-math-social-preview-description"},e.description?De.swap(e.description):e.serpDescription),"twitter"===e.network&&wp.element.createElement(o.Fragment,null,wp.element.createElement("h4",{className:"rank-math-social-preview-publisher"},wp.element.createElement(p.Dashicon,{icon:"admin-links"}),e.siteurl))))))},je=wp.mediaUtils;const Re=function(e){return wp.element.createElement("div",{className:"components-base-control field-group"},wp.element.createElement(je.MediaUpload,{allowedTypes:["image"],multiple:!1,value:e.imageID,render:function(t){var n=t.open;return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.Button,{onClick:n,className:"button",isPrimary:!0},e.imageID>0?(0,r.__)("Replace Image","seo-by-rank-math"):(0,r.__)("Add Image","seo-by-rank-math")),e.imageID>0&&wp.element.createElement(p.Button,{className:"button",isDestructive:!0,isLink:!0,onClick:e.removeImage},(0,r.__)("Remove Image","seo-by-rank-math")))},onSelect:e.updateImage}),wp.element.createElement("p",{className:"components-base-control__help"},(0,r.__)("Upload at least 600x315px image. Recommended size is 1200x630px.","seo-by-rank-math")),wp.element.createElement("div",{className:"notice notice-warning inline hidden"},wp.element.createElement("p",null,(0,r.__)("Image is smaller than the minimum size, please select a different image.","seo-by-rank-math"))))};function Le(){var e=rankMath.overlayImages,t=[];return Object.keys(e).forEach(function(n){t.push({label:e[n].name,value:n})}),t}function Be(){return Be=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Be.apply(null,arguments)}const Fe=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math"),n=function(){if(t.getFacebookImage())return t.getFacebookImage();var e=t.getFeaturedImage();return(0,c.isUndefined)(e)||""===e?rankMath.defaultOgImage:t.getFeaturedImage().source_url}();return{title:t.getFacebookTitle(),description:t.getFacebookDescription(),serpTitle:t.getSerpTitle(),serpDescription:t.getSerpDescription(),author:t.getFacebookAuthor(),image:n,imageID:t.getFacebookImageID(),hasOverlay:t.getFacebookHasOverlay(),imageOverlay:t.getFacebookImageOverlay()}}),(0,i.withDispatch)(function(e){return{removeImage:function(){e("rank-math").updateFacebookImage(""),e("rank-math").updateFacebookImageID(0),e("rank-math").updateFacebookHasOverlay(!1)},updateImage:function(t){e("rank-math").updateFacebookImage(t.url),e("rank-math").updateFacebookImageID(t.id)},updateTitle:function(t){e("rank-math").updateFacebookTitle(t)},updateDescription:function(t){e("rank-math").updateFacebookDescription(t)},updateImageOverlay:function(t){e("rank-math").updateFacebookImageOverlay(t)},toggleOverlay:function(t){e("rank-math").updateFacebookHasOverlay(t)}}}))(function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(Pe,Be({},e,{network:"facebook",siteurl:rankMath.parentDomain}),wp.element.createElement("div",{className:"social-name"},rankMath.assessor.serpData.authorName),wp.element.createElement("div",{className:"social-time"},wp.element.createElement("span",null,(0,r.__)("2 hrs","seo-by-rank-math")),wp.element.createElement("span",null,wp.element.createElement(p.Dashicon,{icon:"admin-site",size:"12"})))),wp.element.createElement("div",{className:"notice notice-alt notice-info components-base-control"},wp.element.createElement("p",null,(0,r.__)("Customize the title, description and images of your post used while sharing on Facebook and Twitter.","seo-by-rank-math")," ",wp.element.createElement("a",{href:xe("meta-box-social-tab","Gutenberg Social Tab"),target:"_blank",rel:"noreferrer noopener"},(0,r.__)("Read more","seo-by-rank-math")))),wp.element.createElement(Re,e),(0,a.applyFilters)("rank_math_before_serp_devices","","opengraph"),wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-facebook-title"},(0,r.__)("Title","seo-by-rank-math")),wp.element.createElement("div",{className:"variable-group"},wp.element.createElement(p.TextControl,{id:"rank-math-facebook-title",value:e.title,placeholder:e.serpTitle,onChange:e.updateTitle,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{onClick:function(t){return e.updateTitle(e.title+" %"+t.variable+"%")}}))),wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-facebook-description"},(0,r.__)("Description","seo-by-rank-math")),wp.element.createElement("div",{className:"variable-group"},wp.element.createElement(p.TextareaControl,{id:"rank-math-facebook-description",value:e.description,placeholder:e.serpDescription,onChange:e.updateDescription,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{onClick:function(t){return e.updateDescription(e.description+" %"+t.variable+"%")}}))),!re()&&wp.element.createElement("div",{className:"field-group"},wp.element.createElement(p.ToggleControl,{label:(0,r.__)("Add icon overlay to thumbnail","seo-by-rank-math"),checked:e.hasOverlay,onChange:e.toggleOverlay,__nextHasNoMarginBottom:!0}),wp.element.createElement("div",{className:e.hasOverlay?"components-base-control":"hidden"},wp.element.createElement(p.SelectControl,{value:e.imageOverlay,label:(0,r.__)("Icon overlay","seo-by-rank-math"),options:Le(),onChange:e.updateImageOverlay,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),!rankMath.isPro&&wp.element.createElement("div",{className:"notice notice-alt notice-warning"},wp.element.createElement("p",null,wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:xe("pro","Gutenberg Social Tab"),target:"_blank",rel:"noopener noreferrer"})}},(0,r.__)("You can add custom thumbnail overlays with {{link}}Rank Math Pro{{/link}}.","seo-by-rank-math")))))))});const He=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{country:t.getTwitterAppCountry(),description:t.getTwitterAppDescription(),iphoneName:t.getTwitterAppIphoneName(),iphoneID:t.getTwitterAppIphoneID(),iphoneUrl:t.getTwitterAppIphoneUrl(),ipadName:t.getTwitterAppIpadName(),ipadID:t.getTwitterAppIpadID(),ipadUrl:t.getTwitterAppIpadUrl(),googleplayName:t.getTwitterAppGoogleplayName(),googleplayID:t.getTwitterAppGoogleplayID(),googleplayUrl:t.getTwitterAppGoogleplayUrl()}}),(0,i.withDispatch)(function(e){return{updateAppIphoneName:function(t){e("rank-math").updateTwitterAppIphoneName(t)},updateAppIphoneID:function(t){e("rank-math").updateTwitterAppIphoneID(t)},updateAppIphoneUrl:function(t){e("rank-math").updateTwitterAppIphoneUrl(t)},updateAppIpadName:function(t){e("rank-math").updateTwitterAppIpadName(t)},updateAppIpadID:function(t){e("rank-math").updateTwitterAppIpadID(t)},updateAppIpadUrl:function(t){e("rank-math").updateTwitterAppIpadUrl(t)},updateAppGoogleplayName:function(t){e("rank-math").updateTwitterAppGoogleplayName(t)},updateAppGoogleplayID:function(t){e("rank-math").updateTwitterAppGoogleplayID(t)},updateAppGoogleplayUrl:function(t){e("rank-math").updateTwitterAppGoogleplayUrl(t)},updateAppDescription:function(t){e("rank-math").updateTwitterAppDescription(t)},updateAppCountry:function(t){e("rank-math").updateTwitterAppCountry(t)}}}))(function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TextControl,{value:e.description,label:(0,r.__)("App Description","seo-by-rank-math"),help:(0,r.__)("You can use this as a more concise description than what you may have on the app store. This field has a maximum of 200 characters. (optional)","seo-by-rank-math"),onChange:e.updateAppDescription,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TextControl,{value:e.iphoneName,label:(0,r.__)("iPhone App Name","seo-by-rank-math"),help:(0,r.__)("The name of your app to show.","seo-by-rank-math"),onChange:e.updateAppIphoneName,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.iphoneID,label:(0,r.__)("iPhone App ID","seo-by-rank-math"),help:(0,r.__)("The numeric representation of your app ID in the App Store.","seo-by-rank-math"),onChange:e.updateAppIphoneID,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.iphoneUrl,label:(0,r.__)("iPhone App URL","seo-by-rank-math"),help:(0,r.__)("Your app's custom URL scheme (must include ://).","seo-by-rank-math"),onChange:e.updateAppIphoneUrl,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))}(e),function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TextControl,{value:e.ipadName,label:(0,r.__)("iPad App Name","seo-by-rank-math"),help:(0,r.__)("The name of your app to show.","seo-by-rank-math"),onChange:e.updateAppIpadName,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.ipadID,label:(0,r.__)("iPad App ID","seo-by-rank-math"),help:(0,r.__)("The numeric representation of your app ID in the App Store.","seo-by-rank-math"),onChange:e.updateAppIpadID,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.ipadUrl,label:(0,r.__)("iPad App URL","seo-by-rank-math"),help:(0,r.__)("Your app's custom URL scheme (must include ://).","seo-by-rank-math"),onChange:e.updateAppIpadUrl,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))}(e),function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TextControl,{value:e.googleplayName,label:(0,r.__)("Google Play App Name","seo-by-rank-math"),help:(0,r.__)("The name of your app to show.","seo-by-rank-math"),onChange:e.updateAppGoogleplayName,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.googleplayID,label:(0,r.__)("Google Play App ID","seo-by-rank-math"),help:(0,r.__)("Your app ID in the Google Play (.i.e. com.android.app)","seo-by-rank-math"),onChange:e.updateAppGoogleplayID,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.googleplayUrl,label:(0,r.__)("Google Play App URL","seo-by-rank-math"),help:(0,r.__)("Your app's custom URL scheme (must include ://).","seo-by-rank-math"),onChange:e.updateAppGoogleplayUrl,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))}(e),wp.element.createElement(p.TextControl,{value:e.country,label:(0,r.__)("App Country","seo-by-rank-math"),help:(0,r.__)("If your application is not available in the US App Store, you must set this value to the two-letter country code for the App Store that contains your application.","seo-by-rank-math"),onChange:e.updateAppCountry,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});const Ue=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{url:t.getTwitterPlayerUrl(),size:t.getTwitterPlayerSize(),stream:t.getTwitterPlayerStream(),ctype:t.getTwitterPlayerStreamCtype()}}),(0,i.withDispatch)(function(e){return{updatePlayerUrl:function(t){e("rank-math").updateTwitterPlayerUrl(t)},updatePlayerSize:function(t){e("rank-math").updateTwitterPlayerSize(t)},updatePlayerStreamUrl:function(t){e("rank-math").updateTwitterPlayerStreamUrl(t)},updatePlayerStreamCtype:function(t){e("rank-math").updateTwitterPlayerStreamCtype(t)}}}))(function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TextControl,{value:e.url,label:(0,r.__)("Player URL","seo-by-rank-math"),help:(0,r.__)("HTTPS URL to iFrame player. This must be a HTTPS URL which does not generate active mixed content warnings in a web browser. The audio or video player must not require plugins such as Adobe Flash.","seo-by-rank-math"),onChange:e.updatePlayerUrl,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.size,label:(0,r.__)("Player Size","seo-by-rank-math"),help:(0,r.__)("iFrame width and height, specified in pixels in the following format: 600x400.","seo-by-rank-math"),onChange:e.updatePlayerSize,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.stream,label:(0,r.__)("Stream URL","seo-by-rank-math"),help:(0,r.__)("Optional URL to raw stream that will be rendered in Twitterâ€™s mobile applications directly. If provided, the stream must be delivered in the MPEG-4 container format (the .mp4 extension). The container can store a mix of audio and video with the following codecs: Video: H.264, Baseline Profile (BP), Level 3.0, up to 640 x 480 at 30 fps. Audio: AAC, Low Complexity Profile (LC).","seo-by-rank-math"),onChange:e.updatePlayerStreamUrl,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{value:e.ctype,label:(0,r.__)("Stream Content Type","seo-by-rank-math"),help:(0,r.__)("The MIME type/subtype combination that describes the content contained in twitter:player:stream. Takes the form specified in RFC 6381. Currently supported content_type values are those defined in RFC 4337 (MIME Type Registration for MP4).","seo-by-rank-math"),onChange:e.updatePlayerStreamCtype,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});function Ve(){return Ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Ve.apply(null,arguments)}const ze=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math"),n=!!re()||t.getTwitterUseFacebook(),a=function(){if(n&&t.getFacebookImage())return t.getFacebookImage();if(t.getTwitterImage())return t.getTwitterImage();var e=t.getFeaturedImage();return(0,c.isUndefined)(e)||""===e?rankMath.defaultOgImage:t.getFeaturedImage().source_url}();return{useFacebook:n,cardType:t.getTwitterCardType(),title:n?t.getFacebookTitle():t.getTwitterTitle(),description:n?t.getFacebookDescription():t.getTwitterDescription(),serpTitle:t.getSerpTitle(),serpDescription:t.getSerpDescription(),author:t.getTwitterAuthor(),image:a,imageID:n?t.getFacebookImageID():t.getTwitterImageID(),hasOverlay:n?t.getFacebookHasOverlay():t.getTwitterHasOverlay(),imageOverlay:n?t.getFacebookImageOverlay():t.getTwitterImageOverlay()}}),(0,i.withDispatch)(function(e){return{removeImage:function(){e("rank-math").updateTwitterImage(""),e("rank-math").updateTwitterImageID(0),e("rank-math").updateTwitterHasOverlay(!1)},updateImage:function(t){e("rank-math").updateTwitterImage(t.url),e("rank-math").updateTwitterImageID(t.id)},updateTitle:function(t){e("rank-math").updateTwitterTitle(t)},updateDescription:function(t){e("rank-math").updateTwitterDescription(t)},updateImageOverlay:function(t){e("rank-math").updateTwitterImageOverlay(t)},toggleUseFacebook:function(t){e("rank-math").updateTwitterUseFacebook(t)},updateCardType:function(t){e("rank-math").updateTwitterCardType(t)},toggleOverlay:function(t){e("rank-math").updateTwitterHasOverlay(t)}}}))(function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(Pe,Ve({},e,{network:"twitter",siteurl:rankMath.parentDomain,classes:e.cardType,description:(0,c.truncate)(e.description?e.description:e.serpDescription,{length:240,separator:" "})}),wp.element.createElement("div",{className:"social-name"},rankMath.assessor.serpData.authorName,wp.element.createElement("span",{className:"social-username"},"@",e.author),wp.element.createElement("span",{className:"social-time"},(0,r.__)("2h","seo-by-rank-math"))),wp.element.createElement("div",{className:"social-text"},(0,r.__)("The card for your website will look little something like this!","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-group"},wp.element.createElement(p.ToggleControl,{label:(0,r.__)("Use Data from Facebook Tab","seo-by-rank-math"),checked:e.useFacebook,onChange:e.toggleUseFacebook,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"field-group"},wp.element.createElement(p.SelectControl,{value:e.cardType,label:(0,r.__)("Card Type","seo-by-rank-math"),options:[{value:"summary_large_image",label:(0,r.__)("Summary Card with Large Image","seo-by-rank-math")},{value:"summary_card",label:(0,r.__)("Summary Card","seo-by-rank-math")},{value:"app",label:(0,r.__)("App Card","seo-by-rank-math")},{value:"player",label:(0,r.__)("Player Card","seo-by-rank-math")}],onChange:e.updateCardType,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),"player"===e.cardType&&wp.element.createElement("div",{className:"notice notice-alt notice-info"},wp.element.createElement("p",null,(0,r.__)("Video clips and audio streams have a special place on the Twitter platform thanks to the Player Card. Player Cards must be submitted for approval before they can be used. More information: ","seo-by-rank-math"),wp.element.createElement("a",{href:"https://dev.twitter.com/cards/types/player",target:"blank"},"https://dev.twitter.com/cards/types/player"))),"app"===e.cardType&&wp.element.createElement("div",{className:"notice notice-alt notice-info"},wp.element.createElement("p",null,(0,r.__)("The App Card is a great way to represent mobile applications on Twitter and to drive installs. More information: ","seo-by-rank-math"),wp.element.createElement("a",{href:"https://dev.twitter.com/cards/types/app",target:"blank"}," https://dev.twitter.com/cards/types/app"))),!e.useFacebook&&"app"!==e.cardType&&wp.element.createElement(Re,e),!e.useFacebook&&(0,a.applyFilters)("rank_math_before_serp_devices","","opengraph"),!e.useFacebook&&"app"!==e.cardType&&wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-twitter-title"},(0,r.__)("Title","seo-by-rank-math")),wp.element.createElement("div",{className:"variable-group"},wp.element.createElement(p.TextControl,{id:"rank-math-twitter-title",value:e.title,placeholder:e.serpTitle,onChange:e.updateTitle,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{onClick:function(t){return e.updateTitle(e.title+" %"+t.variable+"%")}}))),!e.useFacebook&&"app"!==e.cardType&&wp.element.createElement("div",{className:"field-group"},wp.element.createElement("label",{htmlFor:"rank-math-twitter-description"},(0,r.__)("Description","seo-by-rank-math")),wp.element.createElement("div",{className:"variable-group"},wp.element.createElement(p.TextareaControl,{id:"rank-math-twitter-description",value:e.description,placeholder:e.serpDescription,onChange:e.updateDescription,__nextHasNoMarginBottom:!0}),wp.element.createElement(K,{onClick:function(t){return e.updateDescription(e.description+" %"+t.variable+"%")}}))),!e.useFacebook&&"app"!==e.cardType&&!re()&&wp.element.createElement("div",{className:"field-group"},wp.element.createElement(p.ToggleControl,{label:(0,r.__)("Add icon overlay to thumbnail","seo-by-rank-math"),checked:e.hasOverlay,onChange:e.toggleOverlay,__nextHasNoMarginBottom:!0}),wp.element.createElement("div",{className:e.hasOverlay?"components-base-control":"hidden"},wp.element.createElement(p.SelectControl,{value:e.imageOverlay,label:(0,r.__)("Icon overlay","seo-by-rank-math"),options:Le(),onChange:e.updateImageOverlay,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),!rankMath.isPro&&wp.element.createElement("div",{className:"notice notice-alt notice-warning"},wp.element.createElement("p",null,wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:xe("pro","Gutenberg Social Tab"),target:"_blank",rel:"noopener noreferrer"})}},(0,r.__)("You can add custom thumbnail overlays with {{link}}Rank Math Pro{{/link}}.","seo-by-rank-math")))))),"player"===e.cardType&&wp.element.createElement(Ue,null),"app"===e.cardType&&wp.element.createElement(He,null))});const We=function(){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.TabPanel,{className:"rank-math-editor-social",activeClass:"is-active",tabs:[{name:"facebook",title:wp.element.createElement(o.Fragment,null,wp.element.createElement(p.Dashicon,{icon:"facebook-alt"}),(0,r.__)("Facebook","seo-by-rank-math")),view:Fe,className:"button-facebook"},{name:"twitter",title:wp.element.createElement(o.Fragment,null,wp.element.createElement(Te,{style:{margin:"0 5px 0 0"}}),(0,r.__)("Twitter","seo-by-rank-math")),view:ze,className:"button-twitter"}],onSelect:function(e){wp.data.dispatch("rank-math").updateSocialTab(e)}},function(e){return(0,o.createElement)(e.view)}))};function Ge(e){return Ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ge(e)}function Ke(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,qe(a.key),a)}}function qe(e){var t=function(e,t){if("object"!=Ge(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Ge(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ge(t)?t:t+""}function Ye(e,t,n){return t=Je(t),function(e,t){if(t&&("object"==Ge(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,$e()?Reflect.construct(t,n||[],Je(e).constructor):t.apply(e,n))}function $e(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return($e=function(){return!!e})()}function Je(e){return Je=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Je(e)}function Xe(e,t){return Xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Xe(e,t)}var Ze=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=Ye(this,t))._handleRef=e._handleRef.bind(e),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Xe(e,t)}(t,e),function(e,t,n){return t&&Ke(e.prototype,t),n&&Ke(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"componentDidMount",value:function(){var e=Se()(this.component),t=e.find(".stars a"),n=e.find(".smiley");t.on("mouseenter",function(){var e=Se()(this).index();t.removeClass("highlighted"),t.slice(0,e+1).addClass("highlighted"),e<2?n.removeClass("normal happy").addClass("angry"):e>3?n.removeClass("normal angry").addClass("happy"):n.removeClass("happy angry").addClass("normal")})}},{key:"shouldComponentUpdate",value:function(){return!1}},{key:"_handleRef",value:function(e){this.component=e}},{key:"render",value:function(){for(var e=this,t=[],n=1;n<=5;n++)t.push(wp.element.createElement("a",{key:n,href:"https://wordpress.org/support/plugin/seo-by-rank-math/reviews/?filter=5#new-post",target:"_blank",rel:"noopener noreferrer"},wp.element.createElement("span",{className:"dashicons dashicons-star-filled"})));return wp.element.createElement("div",{className:"ask-review",ref:this._handleRef},wp.element.createElement("h3",null,(0,r.__)("Rate Rank Math SEO","seo-by-rank-math")),wp.element.createElement("p",null,wp.element.createElement(L,{tags:"em"},(0,r.__)("Hey, we noticed you are using Rank Math SEO plugin for more than a week now â€“{{em}}that's awesome!{{/em}} Could you please do us a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?","seo-by-rank-math"))),wp.element.createElement("div",{className:"stars-wrapper"},wp.element.createElement("div",{className:"face"},wp.element.createElement("div",{className:"smiley happy"},wp.element.createElement("div",{className:"eyes"},wp.element.createElement("div",{className:"eye"}),wp.element.createElement("div",{className:"eye"})),wp.element.createElement("div",{className:"mouth"}))),wp.element.createElement("div",{className:"stars"},t)),wp.element.createElement(p.CheckboxControl,{label:wp.element.createElement(o.Fragment,null,wp.element.createElement("span",null,(0,r.__)("I already did. Please don't show this message again.","seo-by-rank-math"))),onChange:function(){return e.alreadyReviewed()},__nextHasNoMarginBottom:!0}))}},{key:"alreadyReviewed",value:function(){Se().ajax({url:rankMath.ajaxurl,data:{action:"rank_math_already_reviewed",security:rankMath.security}}),rankMath.pluginReviewed=!0,Se()(this.component).animate({opacity:.01},1500,function(){var e=Se()(".rank-math-editor > .components-tab-panel__tabs > button");e.first().click(),e.last().remove()})}}])}(o.Component);const Qe=Ze;const et=(0,p.withFilters)("rankMath.analytics.reportButton")(function(){return null});const tt=(0,u.compose)((0,i.withSelect)(function(e){return{isOpen:e("rank-math").isSnippetEditorOpen()}}),(0,i.withDispatch)(function(e,t){return{toggleEditor:function(){e("rank-math").toggleSnippetEditor(!t.isOpen)}}}))(function(e){var t=e.isOpen,n=e.initialTab,a=void 0===n?"":n,i=e.toggleEditor,s=[{name:"general",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-settings"}),wp.element.createElement("span",null,(0,r.__)("General","seo-by-rank-math"))),view:ye}];return rankMath.canUser.social&&s.push({name:"social",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-social"}),wp.element.createElement("span",null,(0,r.__)("Social","seo-by-rank-math"))),view:We}),rankMath.showReviewTab&&!1===rankMath.pluginReviewed&&s.push({name:"review",className:"review-tab",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-heart-filled"})),view:Qe}),wp.element.createElement(o.Fragment,null,wp.element.createElement(p.Button,{isPrimary:!0,className:"rank-math-edit-snippet",onClick:i},(0,r.__)("Edit Snippet","seo-by-rank-math")),""===a&&wp.element.createElement(et,null),t&&wp.element.createElement(p.Modal,{title:(0,r.__)("Preview Snippet Editor","seo-by-rank-math"),closeButtonLabel:(0,r.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,onRequestClose:function(e){void 0!==e&&(document.body.classList.remove("modal-open"),i())},className:"rank-math-modal",overlayClassName:"rank-math-modal-overlay"},wp.element.createElement(p.TabPanel,{className:"rank-math-tabs rank-math-editor",activeClass:"is-active",initialTabName:a,tabs:s},function(e){return(0,o.createElement)(e.view)})))});const nt=function(){return wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(p.BaseControl,{className:"rank-math-social",__nextHasNoMarginBottom:!0},wp.element.createElement("span",{className:"components-base-control__label"},(0,r.__)("Social Media Preview","seo-by-rank-math")),wp.element.createElement("p",{className:"cmb2-metabox-description"},(0,r.__)("Here you can view and edit the thumbnail, title and description that will be displayed when your site is shared on social media.","seo-by-rank-math")),wp.element.createElement("p",{className:"cmb2-metabox-description"},(0,r.__)("Click on the button below to view and edit the preview.","seo-by-rank-math")),wp.element.createElement(tt,{buttonLabel:(0,r.__)("Preview & Edit Social Media","seo-by-rank-math"),initialTab:"social"})))},at=wp.wordcount,rt=wp.richText;var it="core/annotations",ot="core/annotation",st="annotation-text-";var lt={name:ot,title:(0,r.__)("Annotation"),tagName:"mark",className:"annotation-text",attributes:{className:"class",id:"id"},interactive:!1,object:!1,edit:()=>null,__experimentalGetPropsForEditableTreePreparation:(e,{richTextIdentifier:t,blockClientId:n})=>({annotations:e(it).__experimentalGetAnnotationsForRichText(n,t)}),__experimentalCreatePrepareEditableTree:({annotations:e})=>(t,n)=>{if(0===e.length)return t;let a={formats:t,text:n,replacements:[],start:0,end:0};return a=function(e,t=[]){return t.forEach(t=>{let{start:n,end:a}=t;if("number"!=typeof n||"number"!=typeof a)return;n>e.text.length&&(n=e.text.length),a>e.text.length&&(a=e.text.length);const r=st+t.source,i=st+t.id;e=(0,rt.applyFormat)(e,{type:ot,attributes:{className:r,id:i}},n,a)}),e}(a,e),a.formats},__experimentalGetPropsForEditableTreeChangeHandler:e=>({removeAnnotation:e(it).__experimentalRemoveAnnotation,updateAnnotationRange:e(it).__experimentalUpdateAnnotationRange}),__experimentalCreateOnChangeEditableValue:e=>t=>{const n=function(e){const t={};return e.forEach((e,n)=>{(e=(e=e||[]).filter(e=>e.type===ot)).forEach(e=>{let{id:a}=e.attributes;a=a.replace(st,""),t.hasOwnProperty(a)||(t[a]={start:n}),t[a].end=n+1})}),t}(t),{removeAnnotation:a,updateAnnotationRange:r,annotations:i}=e;!function(e,t,{removeAnnotation:n,updateAnnotationRange:a}){e.forEach(e=>{const r=t[e.id];if(!r)return void n(e.id);const{start:i,end:o}=e;"number"!=typeof i||"number"!=typeof o||i===r.start&&o===(r.end??r.start)||a(e.id,r.start,r.end??r.start)})}(i,n,{removeAnnotation:a,updateAnnotationRange:r})}},{name:ct,...ut}=lt;function pt(e,t){const n=e.filter(t);return e.length===n.length?e:n}(0,rt.registerFormatType)(ct,ut);var dt=(e,t)=>Object.entries(e).reduce((e,[n,a])=>void 0===a?e:{...e,[n]:t(a)},{});var mt=function(e={},t){switch(t.type){case"ANNOTATION_ADD":const n=t.blockClientId,a={id:t.id,blockClientId:n,richTextIdentifier:t.richTextIdentifier,source:t.source,selector:t.selector,range:t.range};if("range"===a.selector&&!function(e){return Boolean(e.range&&"number"==typeof e.range.start&&"number"==typeof e.range.end&&e.range.start<=e.range.end)}(a))return e;const r=e?.[n]??[];return{...e,[n]:[...r,a]};case"ANNOTATION_REMOVE":return dt(e,e=>pt(e,e=>e.id!==t.annotationId));case"ANNOTATION_UPDATE_RANGE":return dt(e,e=>{let n=!1;const a=e.map(e=>e.id===t.annotationId?(n=!0,{...e,range:{start:t.start,end:t.end}}):e);return n?a:e});case"ANNOTATION_REMOVE_SOURCE":return dt(e,e=>pt(e,e=>e.source!==t.source))}return e},ht=[],gt=(0,i.createSelector)((e,t)=>(e?.[t]??[]).filter(e=>"block"===e.selector),(e,t)=>[e?.[t]??ht]);function ft(e,t){return e?.[t]??ht}var vt=(0,i.createSelector)((e,t,n)=>(e?.[t]??[]).filter(e=>"range"===e.selector&&n===e.richTextIdentifier).map(e=>{const{range:t,...n}=e;return{...t,...n}}),(e,t)=>[e?.[t]??ht]);function yt(e){return Object.values(e).filter(e=>Boolean(e)).flat()}const wt=new Uint8Array(16);const bt=[];for(let e=0;e<256;++e)bt.push((e+256).toString(16).slice(1));function kt(e,t=0){return(bt[e[t+0]]+bt[e[t+1]]+bt[e[t+2]]+bt[e[t+3]]+"-"+bt[e[t+4]]+bt[e[t+5]]+"-"+bt[e[t+6]]+bt[e[t+7]]+"-"+bt[e[t+8]]+bt[e[t+9]]+"-"+bt[e[t+10]]+bt[e[t+11]]+bt[e[t+12]]+bt[e[t+13]]+bt[e[t+14]]+bt[e[t+15]]).toLowerCase()}const _t=function(e,t,n){return t||e||!crypto.randomUUID?function(e,t,n){e=e||{};const a=e.random??e.rng?.()??crypto.getRandomValues(wt);if(a.length<16)throw new Error("Random bytes length must be >= 16");if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){if((n=n||0)<0||n+16>t.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[n+e]=a[e];return t}return kt(a)}(e,t,n):crypto.randomUUID()};function Et({blockClientId:e,richTextIdentifier:t=null,range:n=null,selector:a="range",source:r="default",id:i=_t()}){const o={type:"ANNOTATION_ADD",id:i,blockClientId:e,richTextIdentifier:t,source:r,selector:a};return"range"===a&&null!==n&&(o.range=n),o}function Tt(e){return{type:"ANNOTATION_REMOVE",annotationId:e}}function xt(e,t,n){return{type:"ANNOTATION_UPDATE_RANGE",annotationId:e,start:t,end:n}}function Ot(e){return{type:"ANNOTATION_REMOVE_SOURCE",source:e}}var St=(0,i.createReduxStore)(it,{reducer:mt,selectors:e,actions:t});(0,i.register)(St);function Nt(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Ct(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ct(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function Ct(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}(0,a.addFilter)("editor.BlockListBlock","core/annotations",e=>(0,i.withSelect)((e,t)=>{const{clientId:n,className:a}=t;return{className:e(St).__experimentalGetAnnotationsForBlock(n).map(e=>"is-annotated-by-"+e.source).concat(a||"").filter(Boolean).join(" ")}})(e));var It="core/annotations",Mt="rank-math-annotations",Dt=function(e,t){var n,a=Nt(e);try{for(a.s();!(n=a.n()).done;){var r=n.value;if("div"===r.localName&&r.children&&Dt(r.children,t),"p"===r.localName)if((0,at.count)(r.innerText,"words")<120)t.annotator.remove(Mt),r.getElementsByClassName("rank-math-content-ai-tooltip").length&&r.getElementsByClassName("rank-math-content-ai-tooltip")[0].remove();else{var i=t.selection.win.getSelection();i.selectAllChildren(r),t.annotator.annotate(Mt,{uid:"rank-math-annotation"}),i.empty()}}}catch(e){a.e(e)}finally{a.f()}};const At=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;if("classic"!==rankMath.currentEditor){if(!e)return(0,i.dispatch)(It).__experimentalRemoveAnnotationsBySource(Mt),void n([]);var r=(0,i.select)("core/block-editor").getBlocks();(0,c.forEach)(r,function(e){if("core/paragraph"===e.name){var a=e.clientId;(0,at.count)(e.attributes.content,"words")<120?(0,c.includes)(t,a)&&((0,i.dispatch)(It).__experimentalRemoveAnnotation(a),t=(0,c.remove)(t,a),n(t)):(t.push(a),n(t),(0,i.dispatch)(It).__experimentalAddAnnotation({id:a,blockClientId:a,source:Mt,richTextIdentifier:"content",range:{start:0,end:e.attributes.content.length}}))}})}else!function(e){var t=window.tinymce.get(window.wpActiveEditor);if(!t)return!1;if(!e)return t.focus(),t.annotator.remove(Mt),void(0,a.doAction)("rank_math_annotations_removed");var n=t.getBody().children||[];Dt(n,t)}(e)};n.dn(At);const Pt=(0,p.withFilters)("rankMath.checklists.FixWithAI")(function(){return null}),jt=function(e,t){var n=(0,c.round)(e/t*100);if(!(100<=n))return 49<n?"test-check-good":30<n?"test-check-ok":"test-check-bad"};function Rt(e){return Rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rt(e)}function Lt(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,Bt(a.key),a)}}function Bt(e){var t=function(e,t){if("object"!=Rt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Rt(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Rt(t)?t:t+""}function Ft(e,t,n){return t=Ut(t),function(e,t){if(t&&("object"==Rt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ht()?Reflect.construct(t,n||[],Ut(e).constructor):t.apply(e,n))}function Ht(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Ht=function(){return!!e})()}function Ut(e){return Ut=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ut(e)}function Vt(e,t){return Vt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Vt(e,t)}n.dn(jt);var zt=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=Ft(this,t)).state={highlightText:!0},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Vt(e,t)}(t,e),function(e,t,n){return t&&Lt(e.prototype,t),n&&Lt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"componentDidMount",value:function(){if("classic"!==rankMath.currentEditor||(0,c.isUndefined)(window.tinymce))return!1;var e=window.tinymce.get(window.wpActiveEditor);if(!e)return!1;e.annotator.register("rank-math-annotations",{persistent:!1,decorate:function(){return{classes:["rank-math-annotations"]}}}),e.dom.addStyle('\n\t\t.rank-math-annotations.mce-annotation {\n\t\t\tbackground-color: mark !important;\n\t\t\tposition: relative;\n\t\t}\n\t\t.rank-math-annotations.mce-annotation .rank-math-content-ai-tooltip {\n\t\t\tdisplay: none;\n\t\t\tbackground-color: #2271b1;\n\t\t\tborder-color: #2271b1;\n\t\t\tcolor: #fff;\n\t\t\tcursor: pointer;\n\t\t\tposition: absolute;\n\t\t\ttop: -30px;\n\t\t\tleft: 0px;\n\t\t}\n\t\t.rank-math-annotations.mce-annotation[data-mce-selected="inline-boundary"] .rank-math-content-ai-tooltip {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t\t')}},{key:"shouldComponentUpdate",value:function(e,t){return e.isLoaded!==this.props.isLoaded||(e.selectedKeyword.index!==this.props.selectedKeyword.index||(e.isRefreshing!==this.props.isRefreshing||t.highlightText!==this.state.highlightText))}},{key:"render",value:function(){var e=this,t=rankMathEditor.getSelectedKeyword();return this.results=rankMathEditor.resultManager.getResult(t),this.isPrimary=0===this.props.selectedKeyword.index,(0,c.isUndefined)(this.results)?null:Object.keys(this.getGroups()).map(function(t){return e.renderGroup(t)})}},{key:"renderGroup",value:function(e){this.errors=0;var t=this.renderGroupItems(e);return wp.element.createElement(p.PanelBody,{key:"panel-"+e,title:wp.element.createElement(o.Fragment,null,this.getGroupTitle(e),0===this.errors?wp.element.createElement("span",{className:"rank-math-group-score test-ok"},(0,r.__)("All Good","seo-by-rank-math")):wp.element.createElement("span",{className:"rank-math-group-score test-fail"},this.errors," ",(0,r.__)("Errors","seo-by-rank-math"))),initialOpen:"basic"===e,className:"rank-math-checklist"},wp.element.createElement("ul",null,t))}},{key:"renderGroupItems",value:function(e){var t=this,n=this.results.results,a=this.getGroupItems(e);return Object.keys(a).map(function(e){if((0,c.isUndefined)(n[e])||!t.isPrimary&&a[e])return!1;var r=n[e],i=l()("seo-check-"+e,{"test-ok":r.hasScore(),"test-fail":!r.hasScore()});r.hasScore()&&["contentHasAssets","lengthContent","keywordDensity"].includes(e)&&(i+=" "+jt(r.getScore(),r.getMaxScore())),!1===r.hasScore()&&(t.errors+=1);var o=t.getLink(e);return"contentHasShortParagraphs"===e&&(0,c.includes)(["classic","gutenberg"],rankMath.currentEditor)&&!t.state.highlightText&&At(!0,t.props.highlightedParagraphs,t.props.updateHighlightedParagraphs),wp.element.createElement("li",{key:e,className:i},wp.element.createElement("span",null,wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:r.getText()}}),!r.hasScore()&&"contentHasShortParagraphs"===e&&!(0,c.isEmpty)(r.text)&&(0,c.includes)(["classic","gutenberg"],rankMath.currentEditor)&&wp.element.createElement(p.Button,{className:"rank-math-highlight-button",onClick:function(){At(t.state.highlightText,t.props.highlightedParagraphs,t.props.updateHighlightedParagraphs),t.setState({highlightText:!t.state.highlightText})}},t.state.highlightText&&wp.element.createElement("i",{className:"dashicons dashicons-visibility"}),!t.state.highlightText&&wp.element.createElement("i",{className:"dashicons dashicons-hidden"})),wp.element.createElement(Pt,{id:e,result:r})),o&&wp.element.createElement("a",{href:xe("score-100","Content Analysis Single Test KB")+o,rel:"noreferrer",target:"_blank",className:"dashicons-before dashicons-editor-help rank-math-help-icon"}))})}},{key:"getGroupItems",value:function(e){return("post"===rankMath.objectType?{basic:{keywordInTitle:!0,keywordInMetaDescription:!0,keywordInPermalink:!0,keywordIn10Percent:!0,keywordInContent:!1,lengthContent:!1,hasProductSchema:!0},advanced:{keywordInSubheadings:!1,keywordInImageAlt:!0,keywordDensity:!1,lengthPermalink:!1,linksHasExternals:!1,linksNotAllExternals:!1,linksHasInternal:!1,keywordNotUsed:!0,hasContentAI:!0,isReviewEnabled:!0},"title-readability":{titleStartWithKeyword:!0,titleSentiment:!1,titleHasPowerWords:!1,titleHasNumber:!1},"content-readability":{contentHasTOC:!1,contentHasShortParagraphs:!1,contentHasAssets:!1}}:{basic:{keywordInTitle:!0,keywordInMetaDescription:!0,keywordInPermalink:!0},advanced:{titleStartWithKeyword:!0,keywordNotUsed:!0}})[e]}},{key:"getGroupTitle",value:function(e){return this.getGroups()[e]}},{key:"getGroups",value:function(){return"post"===rankMath.objectType?{basic:(0,r.__)("Basic SEO","seo-by-rank-math"),advanced:(0,r.__)("Additional","seo-by-rank-math"),"title-readability":(0,r.__)("Title Readability","seo-by-rank-math"),"content-readability":(0,r.__)("Content Readability","seo-by-rank-math")}:{basic:(0,r.__)("Basic SEO","seo-by-rank-math"),advanced:(0,r.__)("Additional","seo-by-rank-math")}}},{key:"getLink",value:function(e){var t={keywordInTitle:"#focus-keyword-in-the-seo-title-primary-focus-keyword-only",keywordInMetaDescription:"#focus-keyword-in-the-meta-description-primary-focus-keyword-only",keywordInPermalink:"#focus-keyword-in-the-url-primary-focus-keyword-only",keywordIn10Percent:"#focus-keyword-at-the-beginning-of-the-content",keywordInContent:"#focus-keyword-in-the-content-runs-of-all-focus-keywords",lengthContent:"#overall-content-length",keywordInSubheadings:"#focus-keyword-in-subheading-primary-and-secondary-focus-keywords",keywordInImageAlt:"#focus-keyword-in-image-alt-attributes-primary-focus-keyword-only",keywordDensity:"#keyword-density-primary-and-secondary-focus-keywords",lengthPermalink:"#url-length",linksHasExternals:"#linking-to-external-sources",linksNotAllExternals:"#linking-to-external-content-with-a-followed-link",linksHasInternal:"#linking-to-internal-resources",keywordNotUsed:"#focus-keyword-uniqueness-primary-focus-keyword-only",titleStartWithKeyword:"#focus-keyword-at-the-beginning-of-the-seo-title-only-for-primary-keyword",titleSentiment:"#sentiment-in-a-title",titleHasPowerWords:"#use-of-power-word-in-title",titleHasNumber:"#number-in-title",contentHasTOC:"#table-of-contents",contentHasShortParagraphs:"#use-of-short-paragraphs",contentHasAssets:"#use-of-media-in-your-posts",hasContentAI:"#used-content-ai",hasProductSchema:"#has-product-schema",isReviewEnabled:"#is-review-enabled"};return(0,c.has)(t,e)?t[e]:""}}])}(o.Component);const Wt=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{isLoaded:t.isLoaded(),isRefreshing:t.isRefreshing(),selectedKeyword:t.getSelectedKeyword(),highlightedParagraphs:t.getHighlightedParagraphs()}}),(0,i.withDispatch)(function(e){return{updateHighlightedParagraphs:function(t){e("rank-math").updateHighlightedParagraphs(t)}}}))(zt);var Gt=(0,p.createSlotFill)("RankMathAfterFocusKeyword"),Kt=Gt.Fill,qt=Gt.Slot,Yt=function(e){var t=e.children,n=e.className;return wp.element.createElement(Kt,null,wp.element.createElement("div",{className:n},t))};Yt.Slot=qt;const $t=Yt;const Jt=(0,i.withSelect)(function(e){return{isPro:e("rank-math").isPro()}})(function(e){return e.isPro?rankMath.isUserRegistered?wp.element.createElement(p.Notice,{status:"warning",isDismissible:!1},wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:xe("score-100","General Tab Score Notice"),target:"_blank",rel:"noopener noreferrer"})}},(0,r.__)("Read here to {{link}}Score 100/100{{/link}} ","seo-by-rank-math"))):wp.element.createElement(p.Notice,{status:"warning",isDismissible:!1},wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:rankMath.adminurl+"?page=rank-math&view=help",target:"_blank",rel:"noopener noreferrer"})}},(0,r.__)("Activate your account by {{link}}connecting to Rank Math!{{/link}} ","seo-by-rank-math"))):wp.element.createElement(p.Notice,{status:"warning",isDismissible:!1},wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:xe("pro","Gutenberg General Tab Notice"),target:"_blank",rel:"noopener noreferrer"}),strong:wp.element.createElement("strong",null)}},(0,r.__)("Want more? {{link}}{{strong}}Upgrade today to the PRO{{/strong}}{{/link}} version.","seo-by-rank-math")))});const Xt=(0,u.withInstanceId)(function(e){var t=e.className,n=e.instanceId,a=e.children,r="rank-math-tooltip-"+n,i=l()("rank-math-tooltip",t);return wp.element.createElement("span",{className:i},wp.element.createElement("input",{id:r,type:"checkbox"}),wp.element.createElement("label",{htmlFor:r,className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("div",{className:"rank-math-tooltip-content"},a))});var Zt="&#8203;";function Qt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function en(e){return function(e){if(Array.isArray(e))return Qt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Qt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var tn={isEnabled:function(){var e;return null===(e=window.TAGIFY_DEBUG)||void 0===e||e},log:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a;this.isEnabled()&&(a=console).log.apply(a,["[Tagify]:"].concat(en(t)))},warn:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a;this.isEnabled()&&(a=console).warn.apply(a,["[Tagify]:"].concat(en(t)))}},nn=function(e,t,n,a){return e=""+e,t=""+t,a&&(e=e.trim(),t=t.trim()),n?e==t:e.toLowerCase()==t.toLowerCase()},an=function(e,t){return e&&Array.isArray(e)&&e.map(function(e){return rn(e,t)})};function rn(e,t){var n,a={};for(n in e)t.indexOf(n)<0&&(a[n]=e[n]);return a}function on(e){return(new DOMParser).parseFromString(e.trim(),"text/html").body.firstElementChild}function sn(e,t){for(t=t||"previous";e=e[t+"Sibling"];)if(3==e.nodeType)return e}function ln(e){return"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/`|'/g,"&#039;"):e}function cn(e){var t=Object.prototype.toString.call(e).split(" ")[1].slice(0,-1);return e===Object(e)&&"Array"!=t&&"Function"!=t&&"RegExp"!=t&&"HTMLUnknownElement"!=t}function un(e,t,n){var a,r;function i(e,t){for(var n in t)if(t.hasOwnProperty(n)){if(cn(t[n])){cn(e[n])?i(e[n],t[n]):e[n]=Object.assign({},t[n]);continue}if(Array.isArray(t[n])){e[n]=Object.assign([],t[n]);continue}e[n]=t[n]}}return a=e,(null!=(r=Object)&&"undefined"!=typeof Symbol&&r[Symbol.hasInstance]?r[Symbol.hasInstance](a):a instanceof r)||(e={}),i(e,t),n&&i(e,n),e}function pn(){var e=[],t={},n=!0,a=!1,r=void 0;try{for(var i,o=arguments[Symbol.iterator]();!(n=(i=o.next()).done);n=!0){var s=i.value,l=!0,c=!1,u=void 0;try{for(var p,d=s[Symbol.iterator]();!(l=(p=d.next()).done);l=!0){var m=p.value;cn(m)?t[m.value]||(e.push(m),t[m.value]=1):e.includes(m)||e.push(m)}}catch(e){c=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(c)throw u}}}}catch(e){a=!0,r=e}finally{try{n||null==o.return||o.return()}finally{if(a)throw r}}return e}function dn(e){return String.prototype.normalize?"string"==typeof e?e.normalize("NFD").replace(/[\u0300-\u036f]/g,""):void 0:e}var mn=function(){return/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent)};function hn(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)})}function gn(e){var t,n=vn.call(this,e),a=null==e||null===(t=e.classList)||void 0===t?void 0:t.contains(this.settings.classNames.tag);return n&&a}function fn(e){return vn.call(this,e)&&(null==e?void 0:e.closest(this.settings.classNames.tagSelector))}function vn(e){var t;return(null==e||null===(t=e.closest)||void 0===t?void 0:t.call(e,this.settings.classNames.namespaceSelector))===this.DOM.scope}function yn(e,t){var n=window.getSelection();return t=t||n.getRangeAt(0),"string"==typeof e&&(e=document.createTextNode(e)),t&&(t.deleteContents(),t.insertNode(e)),e}function wn(e,t,n){return e?(t&&(e.__tagifyTagData=n?t:un({},e.__tagifyTagData||{},t)),e.__tagifyTagData):(tn.warn("tag element doesn't exist",{tagElm:e,data:t}),t)}function bn(e){if(e&&e.parentNode){var t=e,n=window.getSelection(),a=n.getRangeAt(0);n.rangeCount&&(a.setStartAfter(t),a.collapse(!0),n.removeAllRanges(),n.addRange(a))}}function kn(e,t){e.forEach(function(e){if(wn(e.previousSibling)||!e.previousSibling){var n=document.createTextNode("â€‹");e.before(n),t&&bn(n)}})}var _n={delimiters:",",pattern:null,tagTextProp:"value",maxTags:1/0,callbacks:{},addTagOnBlur:!0,addTagOn:["blur","tab","enter"],onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,focusable:!0,focusInputOnRemove:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\.|\:|\s/,mixTagsInterpolator:["[[","]]"],backspace:!0,allowCaretBetweenTags:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:function(){},trim:!0,a11y:{focusableTags:!1,inputAriaLabel:"Tags input field"},mixMode:{insertAfterTag:"Â "},autoComplete:{enabled:!0,rightKey:!1,tabKey:!1},classNames:{namespace:"tagify",mixMode:"tagify--mix",selectMode:"tagify--select",input:"tagify__input",focus:"tagify--focus",tagNoAnimation:"tagify--noAnim",tagInvalid:"tagify--invalid",tagNotAllowed:"tagify--notAllowed",scopeLoading:"tagify--loading",hasMaxTags:"tagify--hasMaxTags",hasNoTags:"tagify--noTags",empty:"tagify--empty",inputInvalid:"tagify__input--invalid",dropdown:"tagify__dropdown",dropdownWrapper:"tagify__dropdown__wrapper",dropdownHeader:"tagify__dropdown__header",dropdownFooter:"tagify__dropdown__footer",dropdownItem:"tagify__dropdown__item",dropdownItemActive:"tagify__dropdown__item--active",dropdownItemHidden:"tagify__dropdown__item--hidden",dropdownItemSelected:"tagify__dropdown__item--selected",dropdownInital:"tagify__dropdown--initial",tag:"tagify__tag",tagText:"tagify__tag-text",tagX:"tagify__tag__removeBtn",tagLoading:"tagify__tag--loading",tagEditing:"tagify__tag--editable",tagFlash:"tagify__tag--flash",tagHide:"tagify__tag--hide"},dropdown:{classname:"",enabled:2,maxItems:10,searchKeys:["value","searchBy"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,escapeHTML:!0,highlightFirst:!0,closeOnSelect:!0,clearOnSelect:!0,position:"all",appendTarget:null},hooks:{beforeRemoveTag:function(){return Promise.resolve()},beforePaste:function(){return Promise.resolve()},suggestionClick:function(){return Promise.resolve()},beforeKeyDown:function(){return Promise.resolve()}}};function En(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Tn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.forEach(function(t){En(e,t,n[t])})}return e}function xn(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function On(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Sn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nn(){for(var e in this.dropdown={},this._dropdown)this.dropdown[e]="function"==typeof this._dropdown[e]?this._dropdown[e].bind(this):this._dropdown[e];this.dropdown.refs(),this.DOM.dropdown.__tagify=this}var Cn,In,Mn=(Cn=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.forEach(function(t){Sn(e,t,n[t])})}return e}({},{events:{binding:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.dropdown.events.callbacks,n=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:t.onKeyDown.bind(this),onMouseOver:t.onMouseOver.bind(this),onMouseLeave:t.onMouseLeave.bind(this),onClick:t.onClick.bind(this),onScroll:t.onScroll.bind(this)},a=e?"addEventListener":"removeEventListener";"manual"!=this.settings.dropdown.position&&(document[a]("scroll",n.position,!0),window[a]("resize",n.position),window[a]("keydown",n.onKeyDown)),this.DOM.dropdown[a]("mouseover",n.onMouseOver),this.DOM.dropdown[a]("mouseleave",n.onMouseLeave),this.DOM.dropdown[a]("mousedown",n.onClick),this.DOM.dropdown.content[a]("scroll",n.onScroll)},callbacks:{onKeyDown:function(e){var t=this;if(this.state.hasFocus&&!this.state.composing){var n=this.settings,a=n.dropdown.includeSelectedTags,r=this.DOM.dropdown.querySelector(n.classNames.dropdownItemActiveSelector),i=this.dropdown.getSuggestionDataByNode(r),o="mix"==n.mode,s="select"==n.mode;n.hooks.beforeKeyDown(e,{tagify:this}).then(function(l){switch(e.key){case"ArrowDown":case"ArrowUp":case"Down":case"Up":e.preventDefault();var c=t.dropdown.getAllSuggestionsRefs(),u="ArrowUp"==e.key||"Up"==e.key;r&&(r=t.dropdown.getNextOrPrevOption(r,!u)),r&&r.matches(n.classNames.dropdownItemSelector)||(r=c[u?c.length-1:0]),t.dropdown.highlightOption(r,!0);break;case"PageUp":case"PageDown":var p;e.preventDefault();var d=t.dropdown.getAllSuggestionsRefs(),m=Math.floor(t.DOM.dropdown.content.clientHeight/(null===(p=d[0])||void 0===p?void 0:p.offsetHeight))||1,h="PageUp"===e.key;if(r){var g=d.indexOf(r),f=h?Math.max(0,g-m):Math.min(d.length-1,g+m);r=d[f]}else r=d[0];t.dropdown.highlightOption(r,!0);break;case"Home":case"End":e.preventDefault();var v=t.dropdown.getAllSuggestionsRefs();r=v["Home"===e.key?0:v.length-1],t.dropdown.highlightOption(r,!0);break;case"Escape":case"Esc":t.dropdown.hide();break;case"ArrowRight":if(t.state.actions.ArrowLeft||n.autoComplete.rightKey||n.allowCaretBetweenTags)return;case"Tab":var y=!n.autoComplete.rightKey||!n.autoComplete.tabKey;if(!o&&!s&&r&&y&&!t.state.editing&&i){e.preventDefault();var w=t.dropdown.getMappedValue(i);return t.state.autoCompleteData=i,t.input.autocomplete.set.call(t,w),!1}return!0;case"Enter":e.preventDefault(),t.state.actions.selectOption=!0,setTimeout(function(){return t.state.actions.selectOption=!1},100),n.hooks.suggestionClick(e,{tagify:t,tagData:i,suggestionElm:r}).then(function(){if(r){var n=a?r:t.dropdown.getNextOrPrevOption(r,!u);t.dropdown.selectOption(r,e,function(){if(n){var e=n.getAttribute("value");n=t.dropdown.getSuggestionNodeByValue(e),t.dropdown.highlightOption(n)}})}else t.dropdown.hide(),o||t.addTags(t.state.inputText.trim(),!0)}).catch(function(e){return tn.warn(e)});break;case"Backspace":if(o||t.state.editing.scope)return;var b=t.input.raw.call(t);""!=b&&8203!=b.charCodeAt(0)||(!0===n.backspace?t.removeTags():"edit"==n.backspace&&setTimeout(t.editTag.bind(t),0))}})}},onMouseOver:function(e){var t=e.target.closest(this.settings.classNames.dropdownItemSelector);this.dropdown.highlightOption(t)},onMouseLeave:function(e){this.dropdown.highlightOption()},onClick:function(e){var t=this;if(0==e.button&&e.target!=this.DOM.dropdown&&e.target!=this.DOM.dropdown.content){var n=e.target.closest(this.settings.classNames.dropdownItemSelector),a=this.dropdown.getSuggestionDataByNode(n);this.state.actions.selectOption=!0,setTimeout(function(){return t.state.actions.selectOption=!1},100),this.settings.hooks.suggestionClick(e,{tagify:this,tagData:a,suggestionElm:n}).then(function(){n?t.dropdown.selectOption(n,e):t.dropdown.hide()}).catch(function(e){return tn.warn(e)})}},onScroll:function(e){var t=e.target,n=t.scrollTop/(t.scrollHeight-t.parentNode.clientHeight)*100;this.trigger("dropdown:scroll",{percentage:Math.round(n)})}}},refilter:function(e){e=e||this.state.dropdown.query||"",this.suggestedListItems=this.dropdown.filterListItems(e),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger("dropdown:updated",this.DOM.dropdown)},getSuggestionDataByNode:function(e){for(var t,n=e&&e.getAttribute("value"),a=this.suggestedListItems.length;a--;){if(cn(t=this.suggestedListItems[a])&&t.value==n)return t;if(t==n)return{value:t}}},getSuggestionNodeByValue:function(e){return this.dropdown.getAllSuggestionsRefs().find(function(t){return t.getAttribute("value")===e})},getNextOrPrevOption:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.dropdown.getAllSuggestionsRefs(),a=n.findIndex(function(t){return t===e});return t?n[a+1]:n[a-1]},highlightOption:function(e,t){var n,a=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(a),this.state.ddItemElm.removeAttribute("aria-selected")),!e)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);n=this.dropdown.getSuggestionDataByNode(e),this.state.ddItemData=n,this.state.ddItemElm=e,e.classList.add(a),e.setAttribute("aria-selected",!0),t&&(e.parentNode.scrollTop=e.clientHeight+e.offsetTop-e.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,n),this.dropdown.position())},selectOption:function(e,t,n){var a=this,r=this.settings,i=r.dropdown.includeSelectedTags,o=r.dropdown,s=o.clearOnSelect,l=o.closeOnSelect;if(!e)return this.addTags(this.state.inputText,!0),void(l&&this.dropdown.hide());t=t||{};var c=e.getAttribute("value"),u="noMatch"==c,p="mix"==r.mode,d=this.suggestedListItems.find(function(e){var t;return(null!==(t=e.value)&&void 0!==t?t:e)==c});if(this.trigger("dropdown:select",{data:d,elm:e,event:t}),d||u){if(this.state.editing){var m=this.normalizeTags([d])[0];d=r.transformTag.call(this,m)||m,this.onEditTagDone(null,un({__isValid:!0},d))}else this[p?"addMixTags":"addTags"]([d||this.input.raw.call(this)],s);(p||this.DOM.input.parentNode)&&(setTimeout(function(){a.DOM.input.focus(),a.toggleFocusClass(!0)}),l&&setTimeout(this.dropdown.hide.bind(this)),i?n&&n():(e.addEventListener("transitionend",function(){a.dropdown.fillHeaderFooter(),setTimeout(function(){e.remove(),a.dropdown.refilter(),n&&n()},100)},{once:!0}),e.classList.add(this.settings.classNames.dropdownItemHidden)))}else l&&setTimeout(this.dropdown.hide.bind(this))},selectAll:function(e){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems("");var t=this.dropdown.filterListItems("");return e||(t=this.state.dropdown.suggestions),this.addTags(t,!0),this},filterListItems:function(e,t){var n,a,r,i,o,s,l=function(){var e,l,c=void 0,u=void 0;e=h[w],a=(null!=(l=Object)&&"undefined"!=typeof Symbol&&l[Symbol.hasInstance]?l[Symbol.hasInstance](e):e instanceof l)?h[w]:{value:h[w]};var g,f=Object.keys(a).some(function(e){return y.includes(e)})?y:["value"];p.fuzzySearch&&!t.exact?(i=f.reduce(function(e,t){return e+" "+(a[t]||"")},"").toLowerCase().trim(),p.accentedSearch&&(i=dn(i),s=dn(s)),c=0==i.indexOf(s),u=i===s,g=i,r=s.toLowerCase().split(" ").every(function(e){return g.includes(e.toLowerCase())})):(c=!0,r=f.some(function(e){var n=""+(a[e]||"");return p.accentedSearch&&(n=dn(n),s=dn(s)),p.caseSensitive||(n=n.toLowerCase()),u=n===s,t.exact?n===s:0==n.indexOf(s)})),o=!p.includeSelectedTags&&n.isTagDuplicate(cn(a)?a.value:a),r&&!o&&(u&&c?m.push(a):"startsWith"==p.sortby&&c?d.unshift(a):d.push(a))},c=this,u=this.settings,p=u.dropdown,d=(t=t||{},[]),m=[],h=u.whitelist,g=p.maxItems>=0?p.maxItems:1/0,f=p.includeSelectedTags,v="function"==typeof p.sortby,y=p.searchKeys,w=0;if(!(e="select"==u.mode&&this.value.length&&this.value[0][u.tagTextProp]==e?"":e)||!y.length){d=f?h:h.filter(function(e){return!c.isTagDuplicate(cn(e)?e.value:e)});var b=v?p.sortby(d,s):d.slice(0,g);return this.state.dropdown.suggestions=b,b}for(s=p.caseSensitive?""+e:(""+e).toLowerCase();w<h.length;w++)n=this,l();return this.state.dropdown.suggestions=m.concat(d),b=v?p.sortby(m.concat(d),s):m.concat(d).slice(0,g),this.state.dropdown.suggestions=b,b},getMappedValue:function(e){var t=this.settings.dropdown.mapValueTo;return t?"function"==typeof t?t(e):e[t]||e.value:e.value},createListHTML:function(e){var t=this;return un([],e).map(function(e,n){"string"!=typeof e&&"number"!=typeof e||(e={value:e});var a=t.dropdown.getMappedValue(e);return a="string"==typeof a&&t.settings.dropdown.escapeHTML?ln(a):a,t.settings.templates.dropdownItem.apply(t,[xn(Tn({},e),{mappedValue:a}),t])}).join("")}}),In=null!=(In={refs:function(){this.DOM.dropdown=this.parseTemplate("dropdown",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-wrapper']")},getHeaderRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-header']")},getFooterRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-footer']")},getAllSuggestionsRefs:function(){return function(e){return function(e){if(Array.isArray(e))return On(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return On(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?On(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector))},show:function(e){var t,n,a,r=this,i=this.settings,o="mix"==i.mode&&!i.enforceWhitelist,s=!i.whitelist||!i.whitelist.length,l="manual"==i.dropdown.position;if(e=void 0===e?this.state.inputText:e,!(s&&!o&&!i.templates.dropdownItemNoMatch||!1===i.dropdown.enabled||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(e),e&&!this.suggestedListItems.length&&(this.trigger("dropdown:noMatch",e),i.templates.dropdownItemNoMatch&&(a=i.templates.dropdownItemNoMatch.call(this,{value:e}))),!a){if(this.suggestedListItems.length)e&&o&&!this.state.editing.scope&&!nn(this.suggestedListItems[0].value,e)&&this.suggestedListItems.unshift({value:e});else{if(!e||!o||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:e}]}n=""+(cn(t=this.suggestedListItems[0])?t.value:t),i.autoComplete&&n&&0==n.indexOf(e)&&this.input.autocomplete.suggest.call(this,t)}this.dropdown.fill(a),i.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(i.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=e||!0,this.state.dropdown.query=e,this.setStateSelection(),l||setTimeout(function(){r.dropdown.position(),r.dropdown.render()}),setTimeout(function(){r.trigger("dropdown:show",r.DOM.dropdown)})}},hide:function(e){var t=this,n=this.DOM,a=n.scope,r=n.dropdown,i="manual"==this.settings.dropdown.position&&!e;if(r&&document.body.contains(r)&&!i)return window.removeEventListener("resize",this.dropdown.position),this.dropdown.events.binding.call(this,!1),a.setAttribute("aria-expanded",!1),r.parentNode.removeChild(r),setTimeout(function(){t.state.dropdown.visible=!1},100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger("dropdown:hide",r),this},toggle:function(e){this.dropdown[this.state.dropdown.visible&&!e?"hide":"show"]()},getAppendTarget:function(){var e=this.settings.dropdown;return"function"==typeof e.appendTarget?e.appendTarget():e.appendTarget},render:function(){var e,t,n=this,a=((t=this.DOM.dropdown.cloneNode(!0)).style.cssText="position:fixed; top:-9999px; opacity:0",document.body.appendChild(t),e=t.clientHeight,t.parentNode.removeChild(t),e),r=this.settings,i=this.dropdown.getAppendTarget();return!1===r.dropdown.enabled||(this.DOM.scope.setAttribute("aria-expanded",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(r.classNames.dropdownInital),this.dropdown.position(a),i.appendChild(this.DOM.dropdown),setTimeout(function(){return n.DOM.dropdown.classList.remove(r.classNames.dropdownInital)}))),this},fill:function(e){e="string"==typeof e?e:this.dropdown.createListHTML(e||this.suggestedListItems);var t,n=this.settings.templates.dropdownContent.call(this,e);this.DOM.dropdown.content.innerHTML=(t=n)?t.replace(/\>[\r\n ]+\</g,"><").split(/>\s+</).join("><").trim():""},fillHeaderFooter:function(){var e=this.dropdown.filterListItems(this.state.dropdown.query),t=this.parseTemplate("dropdownHeader",[e]),n=this.parseTemplate("dropdownFooter",[e]),a=this.dropdown.getHeaderRef(),r=this.dropdown.getFooterRef();t&&(null==a||a.parentNode.replaceChild(t,a)),n&&(null==r||r.parentNode.replaceChild(n,r))},position:function(e){var t,n=this.settings.dropdown,a=this.dropdown.getAppendTarget();if("manual"!=n.position&&a){var r,i,o,s,l,c,u,p,d,m,h=this.DOM.dropdown,g=n.RTL,f=a===document.body,v=a===this.DOM.scope,y=f?window.pageYOffset:a.scrollTop,w=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,b=w.clientHeight,k=Math.max(w.clientWidth||0,window.innerWidth||0),_=k>480?n.position:"all",E=this.DOM["input"==_?"input":"scope"];if(e=e||h.clientHeight,this.state.dropdown.visible){if("text"==_?(o=(r=function(){var e=document.getSelection();if(e.rangeCount){var t,n,a=e.getRangeAt(0),r=a.startContainer,i=a.startOffset;if(i>0)return(n=document.createRange()).setStart(r,i-1),n.setEnd(r,i),{left:(t=n.getBoundingClientRect()).right,top:t.top,bottom:t.bottom};if(r.getBoundingClientRect)return r.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,i=r.top,s=r.left,l="auto"):(c=function(e){var t=0,n=0;for(e=e.parentNode;e&&e!=w;)t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.parentNode;return{top:t,left:n}}(a),r=E.getBoundingClientRect(),i=v?-1:r.top-c.top,o=(v?r.height:r.bottom-c.top)-1,s=v?-1:r.left-c.left,l=r.width+"px"),!f){var T=function(){for(var e=0,t=n.appendTarget.parentNode;t;)e+=t.scrollTop||0,t=t.parentNode;return e}();i+=T,o+=T}i=Math.floor(i),o=Math.ceil(o),p=k-s<120,d=((u=null!==(t=n.placeAbove)&&void 0!==t?t:b-r.bottom<e)?i:o)+y,m=s+(g&&r.width||0)+window.pageXOffset,m="text"==_&&p?"right: 0;":"left: ".concat(m,"px;"),h.style.cssText="".concat(m," top: ").concat(d,"px; min-width: ").concat(l,"; max-width: ").concat(l),h.setAttribute("placement",u?"top":"bottom"),h.setAttribute("position",_)}}}})?In:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Cn,Object.getOwnPropertyDescriptors(In)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(In)).forEach(function(e){Object.defineProperty(Cn,e,Object.getOwnPropertyDescriptor(In,e))}),Cn),Dn="@yaireo/tagify/",An={empty:"empty",exceed:"number of tags exceeded",pattern:"pattern mismatch",duplicate:"already exists",notAllowed:"not allowed"},Pn={wrapper:function(e,t){return'<tags class="'.concat(t.classNames.namespace," ").concat(t.mode?"".concat(t.classNames[t.mode+"Mode"]):""," ").concat(e.className,'"\n                    ').concat(t.readonly?"readonly":"","\n                    ").concat(t.disabled?"disabled":"","\n                    ").concat(t.required?"required":"","\n                    ").concat("select"===t.mode?"spellcheck='false'":"",'\n                    tabIndex="-1">\n                    ').concat(this.settings.templates.input.call(this),"\n                ").concat(Zt,"\n        </tags>")},input:function(){var e=this.settings,t=e.placeholder||Zt;return"<span ".concat(!e.readonly&&e.userInput?"contenteditable":"",' data-can-editable tabIndex="0" data-placeholder="').concat(t,'" aria-placeholder="').concat(e.placeholder||"",'"\n                    class="').concat(e.classNames.input,'"\n                    role="textbox"\n                    autocapitalize="false"\n                    autocorrect="off"\n                    aria-label="').concat(e.a11y.inputAriaLabel,'"\n                    aria-autocomplete="both"\n                    aria-multiline="').concat("mix"==e.mode,'"></span>')},tag:function(e,t){var n=t.settings;return'<tag title="'.concat(e.title||e.value,"\"\n                    contenteditable='false'\n                    tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'"\n                    class="').concat(n.classNames.tag," ").concat(e.class||"",'"\n                    ').concat(this.getAttributes(e),">\n            <x title='' tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'" class="').concat(n.classNames.tagX,"\" role='button' aria-label='remove tag'></x>\n            <div>\n                <span ").concat("select"===n.mode&&n.userInput?"contenteditable='true'":"",' autocapitalize="false" autocorrect="off" spellcheck=\'false\' class="').concat(n.classNames.tagText,'">').concat(e[n.tagTextProp]||e.value,"</span>\n            </div>\n        </tag>")},dropdown:function(e){var t=e.dropdown,n="manual"==t.position;return'<div class="'.concat(n?"":e.classNames.dropdown," ").concat(t.classname,'" role="listbox" aria-labelledby="dropdown" dir="').concat(t.RTL?"rtl":"","\">\n                    <div data-selector='tagify-suggestions-wrapper' class=\"").concat(e.classNames.dropdownWrapper,'"></div>\n                </div>')},dropdownContent:function(e){var t=this.settings.templates,n=this.state.dropdown.suggestions;return"\n            ".concat(t.dropdownHeader.call(this,n),"\n            ").concat(e,"\n            ").concat(t.dropdownFooter.call(this,n),"\n        ")},dropdownItem:function(e){return"<div ".concat(this.getAttributes(e),"\n                    class='").concat(this.settings.classNames.dropdownItem," ").concat(this.isTagDuplicate(e.value)?this.settings.classNames.dropdownItemSelected:""," ").concat(e.class||"",'\'\n                    tabindex="0"\n                    role="option">').concat(e.mappedValue||e.value,"</div>")},dropdownHeader:function(e){return"<header data-selector='tagify-suggestions-header' class=\"".concat(this.settings.classNames.dropdownHeader,'"></header>')},dropdownFooter:function(e){var t=e.length-this.settings.dropdown.maxItems;return t>0?"<footer data-selector='tagify-suggestions-footer' class=\"".concat(this.settings.classNames.dropdownFooter,'">\n                ').concat(t," more items. Refine your search.\n            </footer>"):""},dropdownItemNoMatch:null};function jn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Rn(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Ln(e){var t=document.createTextNode(""),n={};function a(e,n,a){a&&n.split(/\s+/g).forEach(function(n){return t[e+"EventListener"].call(t,n,a)})}return{removeAllCustomListeners:function(){Object.entries(n).forEach(function(e){var t=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(a=n.next()).done)&&(i.push(a.value),!t||i.length!==t);o=!0);}catch(e){s=!0,r=e}finally{try{o||null==n.return||n.return()}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return jn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e,2),n=t[0];t[1].forEach(function(e){return a("remove",n,e)})}),n={}},off:function(e,t){return e&&(t?a("remove",e,t):e.split(/\s+/g).forEach(function(e){var t;null===(t=n[e])||void 0===t||t.forEach(function(t){return a("remove",e,t)}),delete n[e]})),this},on:function(e,t){return t&&"function"==typeof t&&(e.split(/\s+/g).forEach(function(e){Array.isArray(n[e])?n[e].push(t):n[e]=[t]}),a("add",e,t)),this},trigger:function(n,a,r){var i,o;if(r=r||{cloneData:!0},n)if(e.settings.isJQueryPlugin)"remove"==n&&(n="removeTag"),jQuery(e.DOM.originalInput).triggerHandler(n,[a]);else{try{var s="object"==(void 0===a?"undefined":(o=a)&&"undefined"!=typeof Symbol&&o.constructor===Symbol?"symbol":typeof o)?a:{value:a};if((s=r.cloneData?un({},s):s).tagify=this,a.event&&(s.event=this.cloneEvent(a.event)),Rn(a,Object))for(var l in a)Rn(a[l],HTMLElement)&&(s[l]=a[l]);i=new CustomEvent(n,{detail:s})}catch(e){tn.warn(e)}t.dispatchEvent(i)}}}}function Bn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Fn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Hn(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Un(e){return function(e){if(Array.isArray(e))return Bn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Bn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bn(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var Vn={customBinding:function(){var e=this;this.customEventsList.forEach(function(t){e.on(t,e.settings.callbacks[t])})},binding:function(){var e,t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=this.settings,a=this.events.callbacks,r=t?"addEventListener":"removeEventListener";if(!(this.state.mainEvents&&t||n.disabled||n.readonly)){for(var i in this.state.mainEvents=t,t&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on("tagify.removeAllTags",this.removeAllTags.bind(this))),e=this.listeners.main=this.listeners.main||{keydown:["input",a.onKeydown.bind(this)],click:["scope",a.onClickScope.bind(this)],dblclick:"select"!=n.mode&&["scope",a.onDoubleClickScope.bind(this)],paste:["input",a.onPaste.bind(this)],drop:["input",a.onDrop.bind(this)],compositionstart:["input",a.onCompositionStart.bind(this)],compositionend:["input",a.onCompositionEnd.bind(this)]})e[i]&&this.DOM[e[i][0]][r](i,e[i][1]);var o=this.listeners.main.inputMutationObserver||new MutationObserver(a.onInputDOMChange.bind(this));o.disconnect(),"mix"==n.mode&&o.observe(this.DOM.input,{childList:!0}),this.events.bindOriginaInputListener.call(this),t&&(this.listeners.main=void 0)}},bindOriginaInputListener:function(e){var t=(e||0)+500;this.listeners.main&&(clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(this.events.callbacks.observeOriginalInputValue.bind(this),t))},bindGlobal:function(e){var t,n=this.events.callbacks,a=e?"removeEventListener":"addEventListener";if(this.listeners&&(e||!this.listeners.global)){this.listeners.global=this.listeners.global||[{type:this.isIE?"keydown":"input",target:this.DOM.input,cb:n[this.isIE?"onInputIE":"onInput"].bind(this)},{type:"keydown",target:window,cb:n.onWindowKeyDown.bind(this)},{type:"focusin",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"focusout",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"click",target:document,cb:n.onClickAnywhere.bind(this),useCapture:!0}];var r=!0,i=!1,o=void 0;try{for(var s,l=this.listeners.global[Symbol.iterator]();!(r=(s=l.next()).done);r=!0)(t=s.value).target[a](t.type,t.cb,!!t.useCapture)}catch(e){i=!0,o=e}finally{try{r||null==l.return||l.return()}finally{if(i)throw o}}e&&(this.listeners.global=void 0)}},unbindGlobal:function(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur:function(e){var t,n,a=this.settings,r=fn.call(this,e.relatedTarget),i=gn.call(this,e.target),o=e.target.classList.contains(a.classNames.tagX),s="focusin"==e.type,l="focusout"==e.type;o&&"mix"!=a.mode&&a.focusInputOnRemove&&this.DOM.input.focus(),r&&s&&!i&&!o&&this.toggleFocusClass(this.state.hasFocus=+new Date);var c=e.target?this.trim(this.DOM.input.textContent):"",u=null===(n=this.value)||void 0===n||null===(t=n[0])||void 0===t?void 0:t[a.tagTextProp],p=a.dropdown.enabled>=0,d={relatedTarget:e.relatedTarget},m=this.state.actions.selectOption&&(p||!a.dropdown.closeOnSelect),h=this.state.actions.addNew&&p;if(l){var g;if("mix"!=a.mode&&(e.relatedTarget&&(null===(g=this.DOM.dropdown)||void 0===g?void 0:g.contains(e.relatedTarget))||this.repositionScopeInput("reset",{focus:!1})),e.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),a.onChangeAfterBlur&&this.triggerChangeEvent()}if(!(m||h||o))if(this.state.hasFocus=!(!s&&!r)&&+new Date,this.toggleFocusClass(this.state.hasFocus),"mix"!=a.mode){if(s){if(!a.focusable)return;var f=0===a.dropdown.enabled&&!this.state.dropdown.visible,v=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector);return this.trigger("focus",d),void(f&&!i&&(this.dropdown.show(this.value.length?"":void 0),"select"===a.mode&&this.setRangeAtStartEnd(!1,v)))}if(l){if(this.trigger("blur",d),this.loading(!1),"select"==a.mode){if(this.value.length){var y=this.getTagElms()[0];c=this.trim(y.textContent)}u===c&&(c="")}c&&!this.state.actions.selectOption&&a.addTagOnBlur&&a.addTagOn.includes("blur")&&this.addTags(c,!0)}r||(this.DOM.input.removeAttribute("style"),this.dropdown.hide())}else s?this.trigger("focus",d):l&&(this.trigger("blur",d),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart:function(e){this.state.composing=!0},onCompositionEnd:function(e){this.state.composing=!1},onWindowKeyDown:function(e){var t,n=this.settings,a=document.activeElement,r=fn.call(this,a)&&this.DOM.scope.contains(a),i=a===this.DOM.input,o=r&&a.hasAttribute("readonly"),s=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector),l=this.state.dropdown.visible;if(("Tab"===e.key&&l||this.state.hasFocus||r&&!o)&&!i){t=a.nextElementSibling;var c=e.target.classList.contains(n.classNames.tagX);switch(e.key){case"Backspace":n.readonly||this.state.editing||(this.removeTags(a),(t||this.DOM.input).focus());break;case"Enter":if(c)return void this.removeTags(e.target.parentNode);n.a11y.focusableTags&&gn.call(this,a)&&setTimeout(this.editTag.bind(this),0,a);break;case"ArrowDown":this.state.dropdown.visible||"mix"==n.mode||this.dropdown.show();break;case"Tab":null==s||s.focus()}}},onKeydown:function(e){var t=this,n=this.settings;if(!this.state.composing&&n.userInput){"select"==n.mode&&n.enforceWhitelist&&this.value.length&&"Tab"!=e.key&&e.preventDefault();var a=this.trim(e.target.textContent);this.trigger("keydown",{event:e}),n.hooks.beforeKeyDown(e,{tagify:this}).then(function(r){if("mix"==n.mode){switch(e.key){case"Left":case"ArrowLeft":t.state.actions.ArrowLeft=!0;break;case"Delete":case"Backspace":if(t.state.editing)return;var i=document.getSelection(),o="Delete"==e.key&&i.anchorOffset==(i.anchorNode.length||0),s=i.anchorNode.previousSibling,l=1==i.anchorNode.nodeType||!i.anchorOffset&&s&&1==s.nodeType&&i.anchorNode.previousSibling;!function(e){var t=document.createElement("div");e.replace(/\&#?[0-9a-z]+;/gi,function(e){return t.innerHTML=e,t.innerText})}(t.DOM.input.innerHTML);var c,u,p,d=t.getTagElms(),m=1===i.anchorNode.length&&i.anchorNode.nodeValue==String.fromCharCode(8203);if("edit"==n.backspace&&l)return c=1==i.anchorNode.nodeType?null:i.anchorNode.previousElementSibling,setTimeout(t.editTag.bind(t),0,c),void e.preventDefault();if(mn()&&Hn(l,Element))return p=sn(l),l.hasAttribute("readonly")||l.remove(),t.DOM.input.focus(),void setTimeout(function(){bn(p),t.DOM.input.click()});if("BR"==i.anchorNode.nodeName)return;if((o||l)&&1==i.anchorNode.nodeType?u=0==i.anchorOffset?o?d[0]:null:d[Math.min(d.length,i.anchorOffset)-1]:o?u=i.anchorNode.nextElementSibling:Hn(l,Element)&&(u=l),3==i.anchorNode.nodeType&&!i.anchorNode.nodeValue&&i.anchorNode.previousElementSibling&&e.preventDefault(),(l||o)&&!n.backspace)return void e.preventDefault();if("Range"!=i.type&&!i.anchorOffset&&i.anchorNode==t.DOM.input&&"Delete"!=e.key)return void e.preventDefault();if("Range"!=i.type&&u&&u.hasAttribute("readonly"))return void bn(sn(u));"Delete"==e.key&&m&&wn(i.anchorNode.nextSibling)&&t.removeTags(i.anchorNode.nextSibling);break;case"Enter":if(e.preventDefault(),t.state.tag)return;var h=window.getSelection();h.getRangeAt(0).insertNode(document.createElement("br")),h.collapseToEnd()}return!0}var g="manual"==n.dropdown.position;switch(e.key){case"Backspace":var f=t.getTagElmBeforeInput();"select"==n.mode&&n.enforceWhitelist&&t.value.length?f&&t.removeTags(f):t.state.dropdown.visible&&"manual"!=n.dropdown.position||""!=e.target.textContent&&8203!=a.charCodeAt(0)||(!0===n.backspace?f&&t.removeTags(f):"edit"==n.backspace&&f&&setTimeout(function(){return t.editTag(f)},0));break;case"Esc":case"Escape":if(t.state.dropdown.visible)return;e.target.blur();break;case"Down":case"ArrowDown":t.state.dropdown.visible||t.dropdown.show();break;case"ArrowLeft":t.repositionScopeInput("left")&&e.preventDefault();break;case"ArrowRight":if(t.repositionScopeInput("right")){e.preventDefault();break}var v=t.state.inputSuggestion||t.state.ddItemData;if(v&&n.autoComplete.rightKey)return void t.addTags([v],!0);break;case"Tab":if(!n.addTagOn.includes(e.key.toLowerCase()))break;case"Enter":if(t.state.dropdown.visible&&!g)return;var y=t.state.autoCompleteData||a;if(!y&&"Tab"===e.key)return!0;e.preventDefault(),setTimeout(function(){t.state.dropdown.visible&&!g||t.state.actions.selectOption||!n.addTagOn.includes(e.key.toLowerCase())||(t.addTags([y],!0),t.state.autoCompleteData=null)})}}).catch(function(e){return e})}},onInput:function(e){this.postUpdate();var t=this.settings;if("mix"==t.mode)return this.events.callbacks.onMixTagsInput.call(this,e);var n=this.input.normalize.call(this,void 0,{trim:!1}),a=n.length>=t.dropdown.enabled,r={value:n,inputElm:this.DOM.input},i=this.validateTag({value:n});"select"==t.mode&&this.toggleScopeValidation(i),r.isValid=i,this.state.inputText!=n&&(this.input.set.call(this,n,!1),-1!=n.search(t.delimiters)?this.addTags(n)&&this.input.set.call(this):t.dropdown.enabled>=0&&this.dropdown[a?"show":"hide"](n),this.trigger("input",r))},onMixTagsInput:function(e){var t,n,a,r,i,o,s,l,c=this,u=this.settings,p=this.value.length,d=this.getTagElms(),m=document.createDocumentFragment(),h=window.getSelection().getRangeAt(0),g=[].map.call(d,function(e){return wn(e).value});if("deleteContentBackward"==e.inputType&&mn()&&this.events.callbacks.onKeydown.call(this,{target:e.target,key:"Backspace"}),kn(this.getTagElms()),this.value.slice().forEach(function(e){e.readonly&&!g.includes(e.value)&&m.appendChild(c.createTagElem(e))}),m.childNodes.length&&(h.insertNode(m),this.setRangeAtStartEnd(!1,m.lastChild)),d.length!=p)return this.value=[].map.call(this.getTagElms(),function(e){return wn(e)}),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(o=window.getSelection()).rangeCount>0&&3==o.anchorNode.nodeType){if((h=o.getRangeAt(0).cloneRange()).collapse(!0),h.setStart(o.focusNode,0),a=(t=h.toString().slice(0,h.endOffset)).split(u.pattern).length-1,(n=t.match(u.pattern))&&(r=t.slice(t.lastIndexOf(n[n.length-1]))),r){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:r.match(u.pattern)[0],value:r.replace(u.pattern,"")},this.state.tag.baseOffset=o.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(u.delimiters))return this.state.tag.value=this.state.tag.value.replace(u.delimiters,""),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,u.dropdown.clearOnSelect),void this.dropdown.hide();i=this.state.tag.value.length>=u.dropdown.enabled;try{s=(s=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&s.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(e){}(s||a<this.state.mixMode.matchedPatternCount)&&(i=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=a}setTimeout(function(){c.update({withoutChangeEvent:!0}),c.trigger("input",un({},c.state.tag,{textContent:c.DOM.input.textContent})),c.state.tag&&c.dropdown[i?"show":"hide"](c.state.tag.value)},10)},onInputIE:function(e){var t=this;setTimeout(function(){t.events.callbacks.onInput.call(t,e)})},observeOriginalInputValue:function(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere:function(e){if(e.target!=this.DOM.scope&&!this.DOM.scope.contains(e.target)){this.toggleFocusClass(!1),this.state.hasFocus=!1;var t=e.target.closest(this.settings.classNames.dropdownSelector);(null==t?void 0:t.__tagify)!=this&&this.dropdown.hide()}},onClickScope:function(e){var t=this.settings,n=e.target.closest("."+t.classNames.tag);e.target,this.DOM.scope;var a=+new Date-this.state.hasFocus;if(!e.target.classList.contains(t.classNames.tagX))return n&&!this.state.editing?(this.trigger("click",{tag:n,index:this.getNodeIndex(n),data:wn(n),event:e}),void(1!==t.editTags&&1!==t.editTags.clicks&&"select"!=t.mode||this.events.callbacks.onDoubleClickScope.call(this,e))):void(e.target==this.DOM.input&&("mix"==t.mode&&this.fixFirefoxLastTagNoCaret(),a>500||!t.focusable)?this.state.dropdown.visible?this.dropdown.hide():0===t.dropdown.enabled&&"mix"!=t.mode&&this.dropdown.show(this.value.length?"":void 0):"select"!=t.mode||0!==t.dropdown.enabled||this.state.dropdown.visible||(this.events.callbacks.onDoubleClickScope.call(this,function(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.forEach(function(t){Fn(e,t,n[t])})}return e}({},e),{target:this.getTagElms()[0]})),!t.userInput&&this.dropdown.show()));this.removeTags(e.target.parentNode)},onPaste:function(e){var t=this;e.preventDefault();var n,a,r,i=this.settings;if(!i.userInput)return!1;i.readonly||(a=e.clipboardData||window.clipboardData,r=a.getData("Text"),i.hooks.beforePaste(e,{tagify:this,pastedText:r,clipboardData:a}).then(function(i){if(void 0===i&&(i=r),i)if("mix"==t.settings.mode){if(t.settings.pasteAsTags){var o=t.convertPastedTextToMixTags(i),s=t.parseMixTags(o,{skipDOM:!0}),l=s.__tagifyTagsData||[];t.injectAtCaret(s,window.getSelection().getRangeAt(0)),l.forEach(function(e){return t.value.push(e)});var c=t.getTagElms().slice(-l.length);c.forEach(function(e,t){return wn(e,l[t])}),t.update(),kn(c)}else t.injectAtCaret(i,window.getSelection().getRangeAt(0));t.events.callbacks.onMixTagsInput.call(t,e)}else t.injectAtCaret(i,window.getSelection().getRangeAt(0)),t.settings.pasteAsTags?n=t.addTags(t.state.inputText+i,!0):(t.state.inputText=i,t.dropdown.show(i));t.trigger("paste",{event:e,pastedText:r,clipboardData:a,tagsElems:n})}).catch(function(e){return e}))},onDrop:function(e){e.preventDefault()},onEditTagInput:function(e,t){var n,a=e.closest("."+this.settings.classNames.tag),r=this.getNodeIndex(a),i=wn(a),o=this.input.normalize.call(this,e),s=(Fn(n={},this.settings.tagTextProp,o),Fn(n,"__tagId",i.__tagId),n),l=this.validateTag(s);this.editTagChangeDetected(un(i,s))||!0!==e.originalIsValid||(l=!0),a.classList.toggle(this.settings.classNames.tagInvalid,!0!==l),i.__isValid=l,a.title=!0===l?i.title||i.value:l,o.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=o),this.dropdown.show(o)),this.trigger("edit:input",{tag:a,index:r,data:un({},this.value[r],{newValue:o}),event:t})},onEditTagPaste:function(e,t){var n=(t.clipboardData||window.clipboardData).getData("Text");t.preventDefault();var a=yn(n);this.setRangeAtStartEnd(!1,a)},onEditTagClick:function(e,t){this.events.callbacks.onClickScope.call(this,t)},onEditTagFocus:function(e){this.state.editing={scope:e,input:e.querySelector("[contenteditable]")}},onEditTagBlur:function(e,t){var n=gn.call(this,t.relatedTarget);if("select"==this.settings.mode&&n&&t.relatedTarget.contains(t.target))this.dropdown.hide();else if(this.state.editing&&(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(document.activeElement)||this.trigger("blur",{}),this.DOM.scope.contains(e))){var a,r,i,o=this.settings,s=e.closest("."+o.classNames.tag),l=wn(s),c=this.input.normalize.call(this,e),u=(Fn(a={},o.tagTextProp,c),Fn(a,"__tagId",l.__tagId),a),p=l.__originalData,d=this.editTagChangeDetected(un(l,u)),m=this.validateTag(u);if(c)if(d){var h;if(r=this.hasMaxTags(),i=un({},p,(Fn(h={},o.tagTextProp,this.trim(c)),Fn(h,"__isValid",m),h)),o.transformTag.call(this,i,p),!0!==(m=(!r||!0===p.__isValid)&&this.validateTag(i))){if(this.trigger("invalid",{data:i,tag:s,message:m}),o.editTags.keepInvalid)return;o.keepInvalidTags?i.__isValid=m:i=p}else o.keepInvalidTags&&(delete i.title,delete i["aria-invalid"],delete i.class);this.onEditTagDone(s,i)}else this.onEditTagDone(s,p);else this.onEditTagDone(s)}},onEditTagkeydown:function(e,t){if(!this.state.composing)switch(this.trigger("edit:keydown",{event:e}),e.key){case"Esc":case"Escape":this.state.editing=!1,t.__tagifyTagData.__originalData.value?t.parentNode.replaceChild(t.__tagifyTagData.__originalHTML,t):t.remove();break;case"Enter":case"Tab":e.preventDefault(),setTimeout(function(){return e.target.blur()},0)}},onDoubleClickScope:function(e){var t=e.target.closest("."+this.settings.classNames.tag);if(t){var n,a,r=wn(t),i=this.settings;!1!==(null==r?void 0:r.editable)&&(n=t.classList.contains(this.settings.classNames.tagEditing),a=t.hasAttribute("readonly"),i.readonly||n||a||!this.settings.editTags||!i.userInput||(this.events.callbacks.onEditTagFocus.call(this,t),this.editTag(t)),this.toggleFocusClass(!0),"select"!=i.mode&&this.trigger("dblclick",{tag:t,index:this.getNodeIndex(t),data:wn(t)}))}},onInputDOMChange:function(e){var t=this,n=this.DOM.input.lastChild;e.forEach(function(e){e.addedNodes.forEach(function(e){if("<div><br></div>"==e.outerHTML)e.replaceWith(document.createElement("br"));else if(1==e.nodeType&&e.querySelector(t.settings.classNames.tagSelector)){var n,a=document.createTextNode("");3==e.childNodes[0].nodeType&&"BR"!=e.previousSibling.nodeName&&(a=document.createTextNode("\n")),(n=e).replaceWith.apply(n,Un([a].concat(Un(Un(e.childNodes).slice(0,-1))))),bn(a)}else if(gn.call(t,e)){var r;if(3!=(null===(r=e.previousSibling)||void 0===r?void 0:r.nodeType)||e.previousSibling.textContent||e.previousSibling.remove(),e.previousSibling&&"BR"==e.previousSibling.nodeName){e.previousSibling.replaceWith("\nâ€‹");for(var i=e.nextSibling,o="";i;)o+=i.textContent,i=i.nextSibling;o.trim()&&bn(e.previousSibling)}else e.previousSibling&&!wn(e.previousSibling)||e.before("â€‹")}}),e.removedNodes.forEach(function(e){e&&"BR"==e.nodeName&&gn.call(t,n)&&(t.removeTags(n),t.fixFirefoxLastTagNoCaret())})}),n&&""==n.nodeValue&&n.remove(),n&&"BR"==n.nodeName||this.DOM.input.appendChild(document.createElement("br"))}}};function zn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function Wn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gn(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.forEach(function(t){Wn(e,t,n[t])})}return e}function qn(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function Yn(e){return function(e){if(Array.isArray(e))return zn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return zn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?zn(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $n(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function Jn(e,t){if(!e){tn.warn("input element not found",e);var n=new Proxy(this,{get:function(){return function(){return n}}});return n}if(e.__tagify)return tn.warn("input element is already Tagified - Same instance is returned.",e),e.__tagify;var a;un(this,Ln(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,t=t||{},this.getPersistedData=(a=t.id,function(e){var t;if(a){var n,r="/"+e;if(1===(null===(t=localStorage)||void 0===t?void 0:t.getItem(Dn+a+"/v")))try{n=JSON.parse(localStorage[Dn+a+r])}catch(e){}return n}}),this.setPersistedData=function(e){var t;return e?(null===(t=localStorage)||void 0===t||t.setItem(Dn+e+"/v",1),function(t,n){var a,r="/"+n,i=JSON.stringify(t);t&&n&&(null===(a=localStorage)||void 0===a||a.setItem(Dn+e+r,i),dispatchEvent(new Event("storage")))}):function(){}}(t.id),this.clearPersistedData=function(e){return function(t){var n=Dn+"/"+e+"/";if(t)localStorage.removeItem(n+t);else for(var a in localStorage)a.includes(n)&&localStorage.removeItem(a)}}(t.id),this.applySettings(e,t),this.state={inputText:"",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(e),Nn.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),e.autofocus&&this.DOM.input.focus(),e.__tagify=this}function Xn(e){return Xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xn(e)}function Zn(){return Zn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Zn.apply(null,arguments)}function Qn(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,ea(a.key),a)}}function ea(e){var t=function(e,t){if("object"!=Xn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Xn(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Xn(t)?t:t+""}function ta(e,t,n){return t=aa(t),function(e,t){if(t&&("object"==Xn(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,na()?Reflect.construct(t,n||[],aa(e).constructor):t.apply(e,n))}function na(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(na=function(){return!!e})()}function aa(e){return aa=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},aa(e)}function ra(e,t){return ra=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ra(e,t)}Jn.prototype={_dropdown:Mn,placeCaretAfterNode:bn,getSetTagData:wn,helpers:{sameStr:nn,removeCollectionProp:an,omit:rn,isObject:cn,parseHTML:on,escapeHTML:ln,extend:un,concatWithoutDups:pn,getUID:hn,isNodeTag:gn},customEventsList:["change","add","remove","invalid","input","paste","click","keydown","focus","blur","edit:input","edit:beforeUpdate","edit:updated","edit:start","edit:keydown","dropdown:show","dropdown:hide","dropdown:select","dropdown:updated","dropdown:noMatch","dropdown:scroll"],dataProps:["__isValid","__removed","__originalData","__originalHTML","__tagId"],trim:function(e){return this.settings.trim&&e&&"string"==typeof e?e.trim():e},parseHTML:on,templates:Pn,parseTemplate:function(e,t){return on((e=this.settings.templates[e]||e).apply(this,t))},set whitelist(e){var t=e&&Array.isArray(e);this.settings.whitelist=t?e:[],this.setPersistedData(t?e:[],"whitelist")},get whitelist(){return this.settings.whitelist},set userInput(e){this.settings.userInput=!!e,this.setContentEditable(!!e)},get userInput(){return this.settings.userInput},generateClassSelectors:function(e){var t=function(t){var n=t;Object.defineProperty(e,n+"Selector",{get:function(){return"."+this[n].split(" ")[0]}})};for(var n in e)t(n)},applySettings:function(e,t){var n,a;_n.templates=this.templates;var r=un({},_n,"mix"==t.mode?{pasteAsTags:!1,dropdown:{position:"text"}}:{});this.origSettings=un({},t);var i=this.settings=un({},r,t);if(i.disabled=e.hasAttribute("disabled"),i.readonly=i.readonly||e.hasAttribute("readonly"),i.placeholder=ln(e.getAttribute("placeholder")||i.placeholder||""),i.required=e.hasAttribute("required"),this.generateClassSelectors(i.classNames),this.isIE&&(i.autoComplete=!1),["whitelist","blacklist"].forEach(function(t){var n=e.getAttribute("data-"+t);n&&Gn(n=n.split(i.delimiters),Array)&&(i[t]=n)}),"autoComplete"in t&&!cn(t.autoComplete)&&(i.autoComplete=_n.autoComplete,i.autoComplete.enabled=t.autoComplete),"mix"==i.mode&&(i.pattern=i.pattern||/@/,i.autoComplete.rightKey=!0,i.delimiters=t.delimiters||null,i.tagTextProp&&!i.dropdown.searchKeys.includes(i.tagTextProp)&&i.dropdown.searchKeys.push(i.tagTextProp)),e.pattern)try{i.pattern=new RegExp(e.pattern)}catch(e){}if(i.delimiters){i._delimiters=i.delimiters;try{i.delimiters=new RegExp(this.settings.delimiters,"g")}catch(e){}}(i.disabled||i.readonly)&&(i.userInput=!1),this.TEXTS=Kn({},An,i.texts||{}),"select"==i.mode&&(i.dropdown.includeSelectedTags=!0),("select"!=i.mode||(null===(n=t.dropdown)||void 0===n?void 0:n.enabled))&&i.userInput||(i.dropdown.enabled=0),i.disabled&&(i.dropdown.enabled=!1),i.dropdown.appendTarget=(null===(a=t.dropdown)||void 0===a?void 0:a.appendTarget)||document.body,void 0===i.dropdown.includeSelectedTags&&(i.dropdown.includeSelectedTags=i.duplicates);var o=this.getPersistedData("whitelist");Array.isArray(o)&&(this.whitelist=Array.isArray(i.whitelist)?pn(i.whitelist,o):o)},getAttributes:function(e){var t,n=this.getCustomAttributes(e),a="";for(t in n)a+=" "+t+(void 0!==e[t]?'="'.concat(n[t],'"'):"");return a},getCustomAttributes:function(e){if(!cn(e))return"";var t,n={};for(t in e)"__"!=t.slice(0,2)&&"class"!=t&&e.hasOwnProperty(t)&&void 0!==e[t]&&(n[t]=ln(e[t]));return n},setStateSelection:function(){var e=window.getSelection(),t={anchorOffset:e.anchorOffset,anchorNode:e.anchorNode,range:e.getRangeAt&&e.rangeCount&&e.getRangeAt(0)};return this.state.selection=t,t},getCSSVars:function(){var e,t,n=getComputedStyle(this.DOM.scope,null);this.CSSVars={tagHideTransition:(e=function(e){if(!e)return{};var t=(e=e.trim().split(" ")[0]).split(/\d+/g).filter(function(e){return e}).pop().trim();return{value:+e.split(t).filter(function(e){return e})[0].trim(),unit:t}}(n.getPropertyValue("--tag-hide-transition")),t=e.value,"s"==e.unit?1e3*t:t)}},build:function(e){var t=this.DOM,n=e.closest("label");this.settings.mixMode.integrated?(t.originalInput=null,t.scope=e,t.input=e):(t.originalInput=e,t.originalInput_tabIndex=e.tabIndex,t.scope=this.parseTemplate("wrapper",[e,this.settings]),t.input=t.scope.querySelector(this.settings.classNames.inputSelector),e.parentNode.insertBefore(t.scope,e),e.tabIndex=-1),n&&n.setAttribute("for","")},destroy:function(){var e,t,n;this.events.unbindGlobal.call(this),null===(e=this.DOM.scope.parentNode)||void 0===e||e.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),this.removeAllCustomListeners(),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(null===(n=this.listeners)||void 0===n||null===(t=n.main)||void 0===t?void 0:t.originalInputValueObserverInterval)},loadOriginalValues:function(e){var t,n=this.settings;if(this.state.blockChangeEvent=!0,void 0===e){var a=this.getPersistedData("value");e=a&&!this.DOM.originalInput.value?a:n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),e)if("mix"==n.mode)this.parseMixTags(e),(t=this.DOM.input.lastChild)&&"BR"==t.tagName||this.DOM.input.insertAdjacentHTML("beforeend","<br>");else{try{Gn(JSON.parse(e),Array)&&(e=JSON.parse(e))}catch(e){}this.addTags(e,!0).forEach(function(e){return e&&e.classList.add(n.classNames.tagNoAnimation)})}else this.postUpdate();this.state.lastOriginalValueReported=n.mixMode.integrated?"":this.DOM.originalInput.value},cloneEvent:function(e){var t={};for(var n in e)"path"!=n&&(t[n]=e[n]);return t},loading:function(e){return this.state.isLoading=e,this.DOM.scope.classList[e?"add":"remove"](this.settings.classNames.scopeLoading),this},tagLoading:function(e,t){return e&&e.classList[t?"add":"remove"](this.settings.classNames.tagLoading),this},toggleClass:function(e,t){"string"==typeof e&&this.DOM.scope.classList.toggle(e,t)},toggleScopeValidation:function(e){var t=!0===e||void 0===e;!this.settings.required&&e&&e===this.TEXTS.empty&&(t=!0),this.toggleClass(this.settings.classNames.tagInvalid,!t),this.DOM.scope.title=t?"":e},toggleFocusClass:function(e){this.toggleClass(this.settings.classNames.focus,!!e)},setPlaceholder:function(e){var t=this;["data","aria"].forEach(function(n){return t.DOM.input.setAttribute("".concat(n,"-placeholder"),e)})},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var e=this.DOM.originalInput,t=this.state.lastOriginalValueReported!==e.value,n=new CustomEvent("change",{bubbles:!0});t&&(this.state.lastOriginalValueReported=e.value,n.simulated=!0,e._valueTracker&&e._valueTracker.setValue(Math.random()),e.dispatchEvent(n),this.trigger("change",this.state.lastOriginalValueReported),e.value=this.state.lastOriginalValueReported)}},events:Vn,fixFirefoxLastTagNoCaret:function(){},setRangeAtStartEnd:function(e,t){if(t){e="number"==typeof e?e:!!e,t=t.lastChild||t;var n=document.getSelection();if(Gn(n.focusNode,Element)&&!this.DOM.input.contains(n.focusNode))return!0;try{n.rangeCount>=1&&["Start","End"].forEach(function(a){return n.getRangeAt(0)["set"+a](t,e||t.length)})}catch(e){console.warn(e)}}},insertAfterTag:function(e,t){if(t=t||this.settings.mixMode.insertAfterTag,e&&e.parentNode&&t)return t="string"==typeof t?document.createTextNode(t):t,e.parentNode.insertBefore(t,e.nextSibling),t},editTagChangeDetected:function(e){var t=e.__originalData;for(var n in t)if(!this.dataProps.includes(n)&&e[n]!=t[n])return!0;return!1},getTagTextNode:function(e){return e.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode:function(e,t){this.getTagTextNode(e).innerHTML=ln(t)},editTag:function(e,t){var n=this;e=e||this.getLastTag(),t=t||{};var a=this.settings,r=this.getTagTextNode(e),i=this.getNodeIndex(e),o=wn(e),s=this.events.callbacks,l=!0,c="select"==a.mode;if(!c&&this.dropdown.hide(),r){if(!Gn(o,Object)||!("editable"in o)||o.editable)return o=wn(e,{__originalData:un({},o),__originalHTML:e.cloneNode(!0)}),wn(o.__originalHTML,o.__originalData),r.setAttribute("contenteditable",!0),e.classList.add(a.classNames.tagEditing),this.events.callbacks.onEditTagFocus.call(this,e),r.addEventListener("click",s.onEditTagClick.bind(this,e)),r.addEventListener("blur",s.onEditTagBlur.bind(this,this.getTagTextNode(e))),r.addEventListener("input",s.onEditTagInput.bind(this,r)),r.addEventListener("paste",s.onEditTagPaste.bind(this,r)),r.addEventListener("keydown",function(t){return s.onEditTagkeydown.call(n,t,e)}),r.addEventListener("compositionstart",s.onCompositionStart.bind(this)),r.addEventListener("compositionend",s.onCompositionEnd.bind(this)),t.skipValidation||(l=this.editTagToggleValidity(e)),r.originalIsValid=l,this.trigger("edit:start",{tag:e,index:i,data:o,isValid:l}),r.focus(),!c&&this.setRangeAtStartEnd(!1,r),0===a.dropdown.enabled&&!c&&this.dropdown.show(),this.state.hasFocus=!0,this}else tn.warn("Cannot find element in Tag template: .",a.classNames.tagTextSelector)},editTagToggleValidity:function(e,t){var n;if(t=t||wn(e))return(n=!("__isValid"in t)||!0===t.__isValid)||this.removeTagsFromValue(e),this.update(),e.classList.toggle(this.settings.classNames.tagNotAllowed,!n),t.__isValid=n,t.__isValid;tn.warn("tag has no data: ",e,t)},onEditTagDone:function(e,t){e=e||this.state.editing.scope,t=t||{};var n,a,r=this.settings,i={tag:e,index:this.getNodeIndex(e),previousData:wn(e),data:t};this.trigger("edit:beforeUpdate",i,{cloneData:!1}),this.state.editing=!1,delete t.__originalData,delete t.__originalHTML,e&&e.parentNode&&((void 0!==(a=t[r.tagTextProp])?null===(n=(a+="").trim)||void 0===n?void 0:n.call(a):r.tagTextProp in t?void 0:t.value)?(e=this.replaceTag(e,t),this.editTagToggleValidity(e,t),r.a11y.focusableTags?e.focus():"select"!=r.mode&&bn(e)):this.removeTags(e)),this.trigger("edit:updated",i),r.dropdown.closeOnSelect&&this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag:function(e,t){t&&""!==t.value&&void 0!==t.value||(t=e.__tagifyTagData),t.__isValid&&1!=t.__isValid&&un(t,this.getInvalidTagAttrs(t,t.__isValid));var n=this.createTagElem(t);return e.parentNode.replaceChild(n,e),this.updateValueByDOMTags(),n},updateValueByDOMTags:function(){var e=this;this.value.length=0;var t=this.settings.classNames,n=[t.tagNotAllowed.split(" ")[0],t.tagHide];[].forEach.call(this.getTagElms(),function(t){Yn(t.classList).some(function(e){return n.includes(e)})||e.value.push(wn(t))}),this.update(),this.dropdown.refilter()},injectAtCaret:function(e,t){var n;if(t=t||(null===(n=this.state.selection)||void 0===n?void 0:n.range),"string"==typeof e&&(e=document.createTextNode(e)),!e)return this;var a=11===e.nodeType?Array.prototype.slice.call(e.childNodes):[e];if(!a.length)return this;if(!t)return this.appendMixTags(e),this;if(!this.DOM.scope.contains(null==t?void 0:t.startContainer))return this;yn(e,t);var r=a[a.length-1]||e;return(null==r?void 0:r.parentNode)&&bn(r),this.setStateSelection(),this.updateValueByDOMTags(),this.update(),this},input:{set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.settings,a=n.dropdown.closeOnSelect;this.state.inputText=e,t&&(this.DOM.input.innerHTML=ln(""+e),e&&this.toggleClass(n.classNames.empty,!this.DOM.input.innerHTML)),!e&&a&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw:function(){return this.DOM.input.textContent},validate:function(){var e=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!e),e},normalize:function(e,t){var n=e||this.DOM.input,a=[];n.childNodes.forEach(function(e){return 3==e.nodeType&&a.push(e.nodeValue)}),a=a.join("\n");try{a=a.replace(/(?:\r\n|\r|\n)/g,this.settings.delimiters.source.charAt(0))}catch(e){}return a=a.replace(/\s/g," "),(null==t?void 0:t.trim)?this.trim(a):a},autocomplete:{suggest:function(e){if(this.settings.autoComplete.enabled){"object"!==(void 0===(e=e||{value:""})?"undefined":$n(e))&&(e={value:e});var t=this.dropdown.getMappedValue(e);if("number"!=typeof t){var n=this.state.inputText.toLowerCase(),a=t.substr(0,this.state.inputText.length).toLowerCase(),r=t.substring(this.state.inputText.length);t&&this.state.inputText&&a==n?(this.DOM.input.setAttribute("data-suggest",r),this.state.inputSuggestion=e):(this.DOM.input.removeAttribute("data-suggest"),delete this.state.inputSuggestion)}}},set:function(e){var t=this.DOM.input.getAttribute("data-suggest"),n=e||(t?this.state.inputText+t:null);return!!n&&("mix"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+n)):(this.input.set.call(this,n),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx:function(e){return this.value.findIndex(function(t){return t.__tagId==(e||{}).__tagId})},getNodeIndex:function(e){var t=0;if(e)for(;e=e.previousElementSibling;)t++;return t},getTagElms:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a="."+Yn(this.settings.classNames.tag.split(" ")).concat(Yn(t)).join(".");return[].slice.call(this.DOM.scope.querySelectorAll(a))},getLastTag:function(){var e=this.settings.classNames,t=this.DOM.scope.querySelectorAll("".concat(e.tagSelector,":not(.").concat(e.tagHide,"):not([readonly])"));return t[t.length-1]},getTagElmBeforeInput:function(){var e=this.DOM.input&&this.DOM.input.previousElementSibling;return gn.call(this,e)?e:void 0},isTagDuplicate:function(e,t,n){var a=0,r=!0,i=!1,o=void 0;try{for(var s,l=this.value[Symbol.iterator]();!(r=(s=l.next()).done);r=!0){var c=s.value;nn(this.trim(""+e),c.value,t)&&n!=c.__tagId&&a++}}catch(e){i=!0,o=e}finally{try{r||null==l.return||l.return()}finally{if(i)throw o}}return a},getTagIndexByValue:function(e){var t=this,n=[],a=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach(function(r,i){r.__tagifyTagData&&nn(t.trim(r.__tagifyTagData.value),e,a)&&n.push(i)}),n},getTagElmByValue:function(e){var t=this.getTagIndexByValue(e)[0];return this.getTagElms()[t]},flashTag:function(e){var t=this;e&&(e.classList.add(this.settings.classNames.tagFlash),setTimeout(function(){e.classList.remove(t.settings.classNames.tagFlash)},100))},isTagBlacklisted:function(e){return e=this.trim(e.toLowerCase()),this.settings.blacklist.filter(function(t){return(""+t).toLowerCase()==e}).length},isTagWhitelisted:function(e){return!!this.getWhitelistItem(e)},getWhitelistItem:function(e,t,n){t=t||"value";var a,r=this.settings;return(n=n||r.whitelist).some(function(n){var i="object"==(void 0===n?"undefined":$n(n))?n[t]||n.value:n;if(nn(i,e,r.dropdown.caseSensitive,r.trim))return a="object"==(void 0===n?"undefined":$n(n))?n:{value:n},!0}),a||"value"!=t||"value"==r.tagTextProp||(a=this.getWhitelistItem(e,r.tagTextProp,n)),a},validateTag:function(e){var t=this.settings,n="value"in e?"value":t.tagTextProp,a=this.trim(e[n]+"");return(e[n]+"").trim()?"mix"!=t.mode&&t.pattern&&Gn(t.pattern,RegExp)&&!t.pattern.test(a)?this.TEXTS.pattern:!t.duplicates&&this.isTagDuplicate(a,t.dropdown.caseSensitive,e.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(a)||t.enforceWhitelist&&!this.isTagWhitelisted(a)?this.TEXTS.notAllowed:!t.validate||t.validate(e):this.TEXTS.empty},getInvalidTagAttrs:function(e,t){return{"aria-invalid":!0,class:"".concat(e.class||""," ").concat(this.settings.classNames.tagNotAllowed).trim(),title:t}},hasMaxTags:function(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly:function(e,t){var n=this.settings;this.DOM.scope.contains(document.activeElement)&&document.activeElement.blur(),n[t||"readonly"]=e,this.DOM.scope[(e?"set":"remove")+"Attribute"](t||"readonly",!0),this.settings.userInput=!0,this.setContentEditable(!e),e||(this.events.binding.call(this,!0),this.events.binding.call(this),n.dropdown.enabled=this.origSettings.dropdown.enabled)},setContentEditable:function(e){this.DOM.scope.querySelectorAll("[data-can-editable]").forEach(function(t){t.contentEditable=e,t.tabIndex=e?0:-1})},setDisabled:function(e){this.setReadonly(e,"disabled")},normalizeTags:function(e){var t=this,n=this.settings,a=n.whitelist,r=n.delimiters,i=n.mode,o=n.tagTextProp,s=[],l=!!a&&Gn(a[0],Object),c=Array.isArray(e),u=c&&e[0].value,p=function(e){return(e+"").split(r).reduce(function(e,n){var a,r=t.trim(n);return r&&e.push((Wn(a={},o,r),Wn(a,"value",r),a)),e},[])};if("number"==typeof e&&(e=e.toString()),"string"==typeof e){if(!e.trim())return[];e=p(e)}else c&&(e=e.reduce(function(e,n){if(cn(n)){var a=un({},n);o in a||(o="value"),a[o]=t.trim(a[o]),(a[o]||0===a[o])&&e.push(a)}else if(null!=n&&""!==n&&void 0!==n){var r;(r=e).push.apply(r,Yn(p(n)))}return e},[]));return l&&!u&&(e.forEach(function(e){var n=s.map(function(e){return e.value}),a=t.dropdown.filterListItems.call(t,e[o],{exact:!0});t.settings.duplicates||(a=a.filter(function(e){return!n.includes(e.value)}));var r=a.length>1?t.getWhitelistItem(e[o],o,a):a[0];r&&Gn(r,Object)?s.push(r):"mix"!=i&&(null==e.value&&(e.value=e[o]),s.push(e))}),s.length&&(e=s)),e},parseMixTags:function(e,t){var n=this,a=this.settings,r=a.mixTagsInterpolator,i=a.duplicates,o=a.transformTag,s=a.enforceWhitelist,l=a.maxTags,c=a.tagTextProp,u=null==t?void 0:t.skipDOM,p=u?document.createDocumentFragment():null,d=[];if(e=e.split(r[0]).map(function(e,t){var a,m,h,g=e.split(r[1]),f=g[0],v=d.length==l;if(u&&0==t&&e)return p.appendChild(document.createTextNode(e)),"";try{if(f==+f)throw Error;m=JSON.parse(f)}catch(e){m=n.normalizeTags(f)[0]||{value:f}}if(o.call(n,m),v||!(g.length>1)||s&&!n.isTagWhitelisted(m.value)||!i&&n.isTagDuplicate(m.value)){if(e)return u?(p.appendChild(document.createTextNode(r[0]+e)),""):t?r[0]+e:e}else{if(m[a=m[c]?c:"value"]=n.trim(m[a]),h=n.createTagElem(m),d.push(m),h.classList.add(n.settings.classNames.tagNoAnimation),u)return p.appendChild(h),g[1]&&p.appendChild(document.createTextNode(g[1])),"";g[0]=h.outerHTML,n.value.push(m)}return g.join("")}).join(""),u)return p.__tagifyTagsData=d,p;this.DOM.input.innerHTML=e,this.DOM.input.appendChild(document.createTextNode("")),this.DOM.input.normalize();var m=this.getTagElms();return m.forEach(function(e,t){return wn(e,d[t])}),this.update({withoutChangeEvent:!0}),kn(m,this.state.hasFocus),e},convertPastedTextToMixTags:function(e){var t=this.settings,n=t.pattern,a=t.whitelist,r=t.mixTagsInterpolator,i=t.mixTagsAllowedAfter,o=t.tagTextProp;if(!n||!(null==a?void 0:a.length))return e;var s=n.source?n.source.split("|"):[n],l={};s.forEach(function(e){var t=e.replace(/\\/g,"");l[t]=a.map(function(e){var t;return t="string"==typeof e?e:e[o]||e.value,{originalItem:e,value:t=String(t),searchValue:t.toLowerCase()}}).sort(function(e,t){return t.value.length-e.value.length})});for(var c,u=new RegExp(n.source,"g"),p=[];null!==(c=u.exec(e));){var d=c[0],m=c.index,h=m+d.length,g=e.slice(h),f=l[d];if(f){var v=null,y=0,w=!0,b=!1,k=void 0;try{for(var _,E=f[Symbol.iterator]();!(w=(_=E.next()).done);w=!0){var T=_.value,x=T.value.length;if(g.slice(0,x).toLowerCase()===T.searchValue){var O=g[x];if(!O||i.test(O)){v=T,y=x;break}}}}catch(e){b=!0,k=e}finally{try{w||null==E.return||E.return()}finally{if(b)throw k}}if(v){var S="string"==typeof v.originalItem?{value:v.value,prefix:d}:qn(Kn({},v.originalItem),{prefix:d});if(!0===this.validateTag(S)){var N="".concat(r[0]).concat(JSON.stringify(S)).concat(r[1]);p.push({start:m,end:h+y,replacement:N}),u.lastIndex=h+y}}}}var C=e;return p.reverse().forEach(function(e){var t=e.start,n=e.end,a=e.replacement;C=C.slice(0,t)+a+C.slice(n)}),C},replaceTextWithNode:function(e,t){if(this.state.tag||t){t=t||this.state.tag.prefix+this.state.tag.value;var n,a,r=this.state.selection||window.getSelection(),i=r.anchorNode,o=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return i.splitText(r.anchorOffset-o),-1==(n=i.nodeValue.lastIndexOf(t))||(a=i.splitText(n),e&&i.parentNode.replaceChild(e,a)),!0}},prepareNewTagNode:function(e,t){t=t||{};var n=this.settings,a=[],r={},i=Object.assign({},e,{value:e.value+""});if(e=Object.assign({},i),n.transformTag.call(this,e),e.__isValid=this.hasMaxTags()||this.validateTag(e),!0!==e.__isValid){if(t.skipInvalid)return;if(un(r,this.getInvalidTagAttrs(e,e.__isValid),{__preInvalidData:i}),e.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(e.value)),!n.createInvalidTags)return void a.push(e.value)}return"readonly"in e&&(e.readonly?r["aria-readonly"]=!0:delete e.readonly),{tagElm:this.createTagElem(e,r),tagData:e,aggregatedInvalidInput:a}},postProcessNewTagNode:function(e,t){var n=this,a=this.settings,r=t.__isValid;r&&!0===r?this.value.push(t):(this.trigger("invalid",{data:t,index:this.value.length,tag:e,message:r}),a.keepInvalidTags||setTimeout(function(){return n.removeTags(e,!0)},1e3)),this.dropdown.position()},selectTag:function(e,t){var n=this;if(!this.settings.enforceWhitelist||this.isTagWhitelisted(t.value)){this.state.actions.selectOption&&setTimeout(function(){return n.setRangeAtStartEnd(!1,n.DOM.input)});var a=this.getLastTag();return a?this.replaceTag(a,t):this.appendTag(e),this.value[0]=t,this.update(),this.trigger("add",{tag:e,data:t}),[e]}},addEmptyTag:function(e){var t=un({value:""},e||{}),n=this.createTagElem(t);wn(n,t),this.appendTag(n),this.editTag(n,{skipValidation:!0}),this.toggleFocusClass(!0)},addTags:function(e,t,n){var a=this,r=[],i=this.settings,o=[],s=document.createDocumentFragment(),l=[];if(!e||0==e.length)return r;switch(e=this.normalizeTags(e),i.mode){case"mix":return this.addMixTags(e);case"select":t=!1,this.removeAllTags()}return this.DOM.input.removeAttribute("style"),e.forEach(function(e){var t=a.prepareNewTagNode(e,{skipInvalid:n||i.skipInvalid});if(t){var c=t.tagElm;if(e=t.tagData,o=t.aggregatedInvalidInput,r.push(c),"select"==i.mode)return a.selectTag(c,e);s.appendChild(c),a.postProcessNewTagNode(c,e),l.push({tagElm:c,tagData:e})}}),this.appendTag(s),l.forEach(function(e){var t=e.tagElm,n=e.tagData;return a.trigger("add",{tag:t,index:a.getTagIdx(n),data:n})}),this.update(),e.length&&t&&(this.input.set.call(this,i.createInvalidTags?"":o.join(i._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),this.dropdown.refilter(),r},addMixTags:function(e){var t=this;if((e=this.normalizeTags(e))[0].prefix||this.state.tag)return this.prefixedTextToTag(e[0]);var n=document.createDocumentFragment(),a=[];return e.forEach(function(e){var r=t.prepareNewTagNode(e);n.appendChild(r.tagElm),t.insertAfterTag(r.tagElm),t.postProcessNewTagNode(r.tagElm,r.tagData),a.push({tagElm:r.tagElm,tagData:r.tagData})}),this.appendMixTags(n,a),n.children},appendMixTags:function(e,t){var n,a=null===(n=this.state.selection)||void 0===n?void 0:n.range,r=!!a&&this.DOM.scope.contains(a.startContainer),i=e?11===e.nodeType?Array.prototype.slice.call(e.childNodes):[e]:[];if(r)this.injectAtCaret(e);else{this.DOM.input.focus();var o=this.setStateSelection();(null==o?void 0:o.range)&&(o.range.setStart(this.DOM.input,o.range.endOffset),o.range.setEnd(this.DOM.input,o.range.endOffset)),this.DOM.input.appendChild(e),this.updateValueByDOMTags(),this.update();var s=i[i.length-1];(null==s?void 0:s.parentNode)&&bn(s),this.setStateSelection()}var l=(null==t?void 0:t.length)?t:i.filter(function(e){return 1===e.nodeType});(null==l?void 0:l.length)&&this.trigger("add",{tags:l})},prefixedTextToTag:function(e){var t,n,a,r=this,i=this.settings,o=null===(t=this.state.tag)||void 0===t?void 0:t.delimiters;if(e.prefix=e.prefix||this.state.tag?this.state.tag.prefix:(i.pattern.source||i.pattern)[0],a=this.prepareNewTagNode(e),n=a.tagElm,this.replaceTextWithNode(n)||this.DOM.input.appendChild(n),setTimeout(function(){return n.classList.add(r.settings.classNames.tagNoAnimation)},300),this.update(),!o){var s=this.insertAfterTag(n)||n;setTimeout(bn,0,s)}return this.state.tag=null,this.postProcessNewTagNode(n,a.tagData),this.trigger("add",{tag:a,data:e}),n},appendTag:function(e){var t=this.DOM,n=t.input;t.scope.insertBefore(e,n)},repositionScopeInput:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.DOM.input,a=this.DOM.scope,r=this.settings,i=n&&n.parentNode,o="reset"===e,s=void 0!==t.focus?t.focus:!o;if("mix"==r.mode||this.state.dropdown.visible)return!1;if(!n||!a||i!=a)return!1;if(o){var l=this.getTagElms(),c=l[l.length-1];return!!c&&c.nextElementSibling!==n&&(c.after(n),s&&n.focus(),!0)}if(!r.allowCaretBetweenTags)return!1;if("left"===e||"ArrowLeft"===e){var u=this.getTagElmBeforeInput();return!!u&&(a.insertBefore(n,u),s&&n.focus(),!0)}if("right"===e||"ArrowRight"===e){var p=n.nextElementSibling;return!!gn.call(this,p)&&(p.after(n),s&&n.focus(),!0)}return!1},createTagElem:function(e,t){var n;e.__tagId=hn();var a,r=un({},e,Kn((Wn(n={},this.settings.tagTextProp,ln((e[this.settings.tagTextProp]||e.value)+"")),Wn(n,"title",ln((e.title||e.value)+"")),Wn(n,"value",ln(e.value+"")),n),t));return function(e){for(var t,n=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,null,!1);t=n.nextNode();)t.textContent.trim()||t.parentNode.removeChild(t)}(a=this.parseTemplate("tag",[r,this])),wn(a,e),a},reCheckInvalidTags:function(){var e=this,t=this.settings;this.getTagElms(t.classNames.tagNotAllowed).forEach(function(n,a){var r=wn(n),i=e.hasMaxTags(),o=e.validateTag(r),s=!0===o&&!i;if("select"==t.mode&&e.toggleScopeValidation(o),s)return r=r.__preInvalidData?r.__preInvalidData:{value:r.value},e.replaceTag(n,r);n.title=i||o})},removeTags:function(e,t,n){var a,r=this,i=this.settings;if(e=e&&Gn(e,HTMLElement)?[e]:Gn(e,Array)?e:e?[e]:[this.getLastTag()].filter(function(e){return e}),a=e.reduce(function(e,t){t&&"string"==typeof t&&(t=r.getTagElmByValue(t));var n=wn(t);return t&&n&&!n.readonly&&e.push({node:t,idx:r.getTagIdx(n),data:wn(t,{__removed:!0})}),e},[]),n="number"==typeof n?n:this.CSSVars.tagHideTransition,"select"==i.mode&&(n=0,this.input.set.call(this)),1==a.length&&"select"!=i.mode&&a[0].node.classList.contains(i.classNames.tagNotAllowed)&&(t=!0),a.length)return i.hooks.beforeRemoveTag(a,{tagify:this}).then(function(){var e=function(e){e.node.parentNode&&(e.node.parentNode.removeChild(e.node),t?i.keepInvalidTags&&this.trigger("remove",{tag:e.node,index:e.idx}):(this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),i.keepInvalidTags&&this.reCheckInvalidTags(),this.trigger("remove",{tag:e.node,index:e.idx,data:e.data})))};t||(r.removeTagsFromValue(a.map(function(e){return e.node})),r.update(),"select"==i.mode&&i.userInput&&r.setContentEditable(!0)),n&&n>10&&1==a.length?function(t){t.node.style.width=parseFloat(window.getComputedStyle(t.node).width)+"px",document.body.clientTop,t.node.classList.add(i.classNames.tagHide),setTimeout(e.bind(this),n,t)}.call(r,a[0]):a.forEach(e.bind(r))}).catch(function(e){})},removeTagsFromDOM:function(){this.getTagElms().forEach(function(e){return e.remove()})},removeTagsFromValue:function(e){var t=this;(e=Array.isArray(e)?e:[e]).forEach(function(e){var n=wn(e),a=t.getTagIdx(n);a>-1&&t.value.splice(a,1)})},removeAllTags:function(e){var t=this;e=e||{},this.value=[],"mix"==this.settings.mode?this.DOM.input.innerHTML="":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout(function(){t.DOM.input.focus()}),"select"==this.settings.mode&&(this.input.set.call(this),this.settings.userInput&&this.setContentEditable(!0));var n=this.state.blockChangeEvent?void 0:function(){!t.state.blockChangeEvent&&t.trigger("remove",{})};this.update(e,n)},postUpdate:function(){this.state.blockChangeEvent=!1;var e,t,n=this.settings,a=n.classNames,r="mix"==n.mode?n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(a.hasMaxTags,this.value.length>=n.maxTags),this.toggleClass(a.hasNoTags,!this.value.length),this.toggleClass(a.empty,!r),"select"==n.mode&&this.toggleScopeValidation(null===(t=this.value)||void 0===t||null===(e=t[0])||void 0===e?void 0:e.__isValid)},setOriginalInputValue:function(e){var t=this.DOM.originalInput;this.settings.mixMode.integrated||(t.value=e,t.tagifyValue=t.value)},update:function(e,t){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){this.setPersistedData(n,"value"),this.settings.onChangeAfterBlur&&(e||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent(),this.postUpdate(),null==t||t()}.bind(this),100),this.events.bindOriginaInputListener.call(this,100);var n=this.getInputValue();this.setOriginalInputValue(n)},getInputValue:function(){var e=this.getCleanValue();return"mix"==this.settings.mode?this.getMixedTagsAsString(e):e.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(e):JSON.stringify(e):""},getCleanValue:function(e){return an(e||this.value,this.dataProps)},getMixedTagsAsString:function(){var e="",t=this,n=this.settings,a=n.originalInputValueFormat||JSON.stringify,r=n.mixTagsInterpolator;return function n(i){i.childNodes.forEach(function(i){if(1==i.nodeType){var o=wn(i);if("BR"==i.tagName&&(e+="\r\n"),o&&gn.call(t,i)){if(o.__removed)return;e+=r[0]+a(rn(o,t.dataProps))+r[1]}else i.getAttribute("style")||["B","I","U"].includes(i.tagName)?e+=i.textContent:"DIV"!=i.tagName&&"P"!=i.tagName||(e+="\r\n",n(i))}else e+=i.textContent})}(this.DOM.input),e}},Jn.prototype.removeTag=Jn.prototype.removeTags;var ia=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=ta(this,t,[e]))._handleRef=n._handleRef.bind(n),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ra(e,t)}(t,e),function(e,t,n){return t&&Qn(e.prototype,t),n&&Qn(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"componentDidMount",value:function(){var e=this;this.tagify||(this.tagify=new Jn(this.component,this.props.settings||{})),this.props.settings.callbacks.setup&&setTimeout(function(){e.props.settings.callbacks.setup.call(e.tagify),e.tagify.DOM.input.setAttribute("contenteditable",!0),e.tagify.DOM.input.addEventListener("blur",e.props.settings.callbacks.blur)},100),this.props.settings.callbacks.dragEnd&&this.tagify.DOM.scope.addEventListener("dragend",this.props.settings.callbacks.dragEnd),(0,a.doAction)("rank_math_tagify_init",this)}},{key:"shouldComponentUpdate",value:function(e){return this.tagify.settings.whitelist=e.settings.whitelist,e.showDropdown&&this.tagify.dropdown.show.call(this.tagify,e.showDropdown),!1===e.showDropdown&&this.tagify.dropdown.hide.call(this.tagify,!0),!1}},{key:"_handleRef",value:function(e){this.component=e}},{key:"render",value:function(){var e={ref:this._handleRef,id:this.props.id,name:this.props.name,className:this.props.className,placeholder:this.props.placeholder};return"textarea"===this.props.mode?wp.element.createElement("textarea",Zn({},e,{defaultValue:this.props.initialValue})):wp.element.createElement("input",Zn({},e,{defaultValue:this.props.initialValue}))}},{key:"toArray",value:function(){return this.tagify.value.map(function(e){return e.value})}},{key:"toString",value:function(){return this.toArray().join(",")}},{key:"queryTags",value:function(){return this.tagify.DOM.scope.querySelectorAll("tag")}}])}(o.Component);const oa=ia,sa=function(e){return e=Se()("<textarea />").html(e).text(),((new DOMParser).parseFromString(e,"text/html").body.textContent||"").replace(/["<>]/g,"")||""};n.dn(sa);const la=function(e){if("[object Object]"!==Object.prototype.toString.call(e))return"";var t,n,a="",r=Object.keys(e);for(n=r.length;n--;)"class"!==(t=r[n])&&e.hasOwnProperty(t)&&e[t]&&(a+=""+t+(e[t]?'="'.concat(sa(e[t]),'"'):""));return a};n.dn(la);var ca=function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,c.includes)(e,"?")||(e+="?"),e+n.toString()};const ua=function(e){var t=e.width,n=void 0===t?40:t,a=e.showProNotice,i=void 0!==a&&a,o=e.isBulkEdit,s=void 0!==o&&o,l=e.isResearch,u=void 0!==l&&l,d=e.creditsRequired,m=void 0===d?0:d,h=e.isKeywordIntent,g=void 0!==h&&h,f=e.medium,v=void 0===f?"":f;if(i)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(p.Button,{href:xe("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Get PRO Now â†’","seo-by-rank-math"))))}(n,v);if(g)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(p.Button,{href:xe("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Update Now","seo-by-rank-math"))))}(n,v);var y=(0,c.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),w=y.isUserRegistered,b=y.plan,k="free"===b,_=y.credits>m,E=y.isMigrating;if(_&&u&&!k&&y.credits<500&&(_=!1),w&&b&&_&&!E&&!k)return null;var T,x="width-"+n;return!w||!b||_&&k?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+x},wp.element.createElement("h3",null,(0,r.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!w&&!s&&(0,r.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),w&&!b&&!s&&!k&&(0,r.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),w&&!s&&k&&(0,r.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),s&&(0,r.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n,s,k),!w&&wp.element.createElement(p.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,r.__)("Connect Now","seo-by-rank-math")),w&&(!b||k)&&wp.element.createElement(p.Button,{href:ca(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",k),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")))):E?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+x},wp.element.createElement("h3",null,(0,r.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,r.__)("reach out to the support team.","seo-by-rank-math")),(0,r.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+x},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(T=y.resetDate)?wp.element.createElement(L,{components:{strong:wp.element.createElement("strong",null)}},(0,r.sprintf)((0,r.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+T+"{{/strong}}")):(0,r.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(p.Button,{href:ca(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",k),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")),wp.element.createElement(p.Button,{variant:"link",href:ca(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",k),className:"button button-secondary",target:"_blank"},(0,r.__)("Missing Credits?","seo-by-rank-math"))))};n.dn(ua);const pa=function(e){var t,n=e.showProNotice,a=void 0!==n&&n,r=e.isBulkEdit,i=void 0!==r&&r,s=e.creditsRequired,l=void 0===s?0:s,u=e.isKeywordIntent,d=void 0!==u&&u;(0,c.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&(t="elementor"===rankMath.currentEditor?"#elementor-editor-wrapper":"#wpwrap",Se()(t).append('<div id="rank-math-content-ai-modal-wrapper"></div>'));setTimeout(function(){(0,o.render)(wp.element.createElement(p.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!1,onRequestClose:function(e){(0,c.isUndefined)(e)||(Se()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.body.classList.remove("modal-open"))}},wp.element.createElement(ua,{width:100,showProNotice:a,isBulkEdit:i,creditsRequired:l,isKeywordIntent:d})),document.getElementById("rank-math-content-ai-modal-wrapper"))},100)};n.dn(pa);const da=function(e){var t=e.onClick;return wp.element.createElement(p.Modal,{title:(0,r.__)("Upgrade to re-order Focus Keywords","seo-by-rank-math"),closeButtonLabel:(0,r.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!0,onRequestClose:function(){return t()},className:"rank-math-modal rank-math-focus-keywords-cta-modal",overlayClassName:"rank-math-modal-overlay"},wp.element.createElement("div",{className:"components-panel__body rank-math-focus-keywords-cta-wrapper"},wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks"},wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Improve the SEO workflow","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Set different Primary Focus Keyword","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("and many other premium SEO features","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:rankMath.trendsUpgradeLink,rel:"noreferrer noopener",target:"_blank"},rankMath.trendsUpgradeLabel)))))};function ma(e){return ma="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ma(e)}function ha(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,ba(a.key),a)}}function ga(e,t,n){return t=va(t),function(e,t){if(t&&("object"==ma(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,fa()?Reflect.construct(t,n||[],va(e).constructor):t.apply(e,n))}function fa(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(fa=function(){return!!e})()}function va(e){return va=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},va(e)}function ya(e,t){return ya=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ya(e,t)}function wa(e,t,n){return(t=ba(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ba(e){var t=function(e,t){if("object"!=ma(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=ma(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ma(t)?t:t+""}var ka=function(e){function t(e){var n,a=e.keywords;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),wa(n=ga(this,t),"state",{}),wa(n,"request",null),wa(n,"hasAdded",!1),wa(n,"clickCount",0),wa(n,"singleClickTimer",null),n.state={showCTA:!1},n.tagifyField=(0,o.createRef)(),n.showKeywordIntent=rankMath.showKeywordIntent,n.keywords=a,n.hideDropdown=n.hideDropdown.bind(n),n.callbacks={add:n.onAdd.bind(n),remove:(0,c.debounce)(n.onRemove.bind(n),300),"edit:updated":n.onEditUpdated.bind(n),click:n.onClick.bind(n),dragEnd:n.onDragEnd.bind(n),setup:n.onSetup.bind(n),blur:n.hideDropdown},rankMath.autoSuggestKeywords&&(n.callbacks.input=(0,c.debounce)(n.onInput.bind(n),300)),window.rankMathEditor.focusKeywordField=n,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ya(e,t)}(t,e),function(e,t,n){return t&&ha(e.prototype,t),n&&ha(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"render",value:function(){var e=this,t=(0,a.applyFilters)("rank_math_focus_keyword_settings",{addTagOnBlur:!0,maxTags:rankMath.maxTags,whitelist:this.state.whitelist||[],focusableTags:!0,transformTag:function(e){e.value=sa(e.value.replaceAll(",",""))},templates:{tag:function(t){var n=t.title||t.value,r="tagify__tag ".concat(e.maybeAddIntentClass(n)," ");if(!t.class){var i=rankMathEditor.resultManager.getScore(ne(n));r+=e.getScoreClass(i)}return n=sa(n),'\n\t\t\t\t\t\t\t<tag\n\t\t\t\t\t\t\t\tdraggable="true"\n\t\t\t\t\t\t\t\ttabIndex="0"\n\t\t\t\t\t\t\t\tcontenteditable="false"\n\t\t\t\t\t\t\t\tspellcheck="false"\n\t\t\t\t\t\t\t\tclass="'.concat(r,'"\n\t\t\t\t\t\t\t\ttitle="').concat(n,'"\n\t\t\t\t\t\t\t\tdata-value="').concat((0,c.toLower)(ne(n)),'"\n\t\t\t\t\t\t\t\t').concat(la(t),"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<x title='' class='tagify__tag__removeBtn' role='button' aria-label='remove tag'></x>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<span class=\"tagify__tag-text\">").concat(n,"</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t").concat((0,a.applyFilters)("rank_math_after_focus_keyword",e.addKeywordIntent(ne(n)),ne(n)),"\n\t\t\t\t\t\t\t</tag>\n\t\t\t\t\t\t")}},callbacks:this.callbacks},this);return this.setKeywordsClasses(),wp.element.createElement(React.Fragment,null,wp.element.createElement(oa,{ref:this.tagifyField,mode:"input",settings:t,showDropdown:this.state.showDropdown,initialValue:this.keywords,placeholder:(0,r.__)("Example: Rank Math SEO","seo-by-rank-math")}),this.state.showCTA&&wp.element.createElement(da,{onClick:function(){return e.setState({showCTA:!1})}}))}},{key:"shouldComponentUpdate",value:function(e,t){return this.state.showCTA!==t.showCTA||this.state.showDropdown!==t.showDropdown||e.isRefreshing!==this.props.isRefreshing||e.keywords!==this.props.keywords}},{key:"getScoreClass",value:function(e){return 80<e?"good-fk":50<e?"ok-fk":"bad-fk"}},{key:"setKeywordsClasses",value:function(){var e=this;if(null!==this.tagifyField.current){var t=this.tagifyField.current,n=t.tagify.value;if(n.length>0){var a=t.queryTags();n.map(function(t,n){if(!(0,c.isUndefined)(a[n])){var r=rankMathEditor.resultManager.getScore(ne(t.value));a[n].classList.remove("ok-fk","good-fk","bad-fk"),a[n].classList.add(e.getScoreClass(r))}})}}}},{key:"maybeAddIntentClass",value:function(e){if(!this.showKeywordIntent)return"";var t="has-keyword-intent";return e.length>10&&(t+=" float-keyword-intent"),t}},{key:"addKeywordIntent",value:function(e){return!this.showKeywordIntent||rankMathEditor.getPrimaryKeyword()&&e!==rankMathEditor.getPrimaryKeyword()?"":(Se()(document).on("click","#rank-math-get-keyword-intent",function(e){var t=rankMath,n=t.isPro,a=t.searchIntents;if(!n||(0,c.isUndefined)(a))return e.preventDefault(),pa({showProNotice:!n,isKeywordIntent:(0,c.isUndefined)(a)}),!1}),'\n\t\t\t<span class="rank-math-keyword-intent-container">\n\t\t\t\t<button id="rank-math-get-keyword-intent" class="rank-math-keyword-intent-wrapper is-show-intent">\n\t\t\t\t\t<span class=\'icon rm-icon-bulb-1\'></span>\n\t\t\t\t\t<span class="intent">'.concat((0,r.__)("Show Intent","seo-by-rank-math"),"</span>\n\t\t\t\t</button>\n\t\t\t</span>\n\t\t"))}},{key:"onSetup",value:function(){this.selectFirstKeyword(),this.setKeywordsClasses()}},{key:"onInput",value:function(e){var t=this;(e=(0,c.has)(e.detail,"value")?e.detail.value:e.detail.data.value).length<2||(this.hideDropdown(),this.hasAdded?this.hasAdded=!1:this.request=Se().ajax({url:rankMath.keywordsApi.url,data:{keyword:e,locale:rankMath.locale},success:function(n){if(t.hasAdded)t.hasAdded=!1;else{var a=Se().map(n,function(e){return e});t.setState({whitelist:a,showDropdown:e})}}}))}},{key:"onAdd",value:function(e){this.hasAdded=!0,0===e.detail.index&&this.props.updateSelectedKeyword(e.detail,this.tagifyField.current),this.updateKeywords()}},{key:"onRemove",value:function(e){var t;this.hideDropdown(),0===e.detail.index&&this.onSetup(),rankMathEditor.resultManager.deleteResult(null==e||null===(t=e.detail)||void 0===t||null===(t=t.data)||void 0===t?void 0:t.value),this.selectFirstKeyword(),this.updateKeywords()}},{key:"onClick",value:function(e){var t=this;this.clickCount++,1===this.clickCount?this.singleClickTimer=setTimeout(function(){t.clickCount=0,t.props.updateSelectedKeyword(e.detail,t.tagifyField.current)},400):2===this.clickCount&&(clearTimeout(this.singleClickTimer),this.clickCount=0)}},{key:"onEditUpdated",value:function(e){this.hasAdded=!0,0===e.detail.index&&this.props.updateSelectedKeyword(e.detail,this.tagifyField.current),this.updateKeywords()}},{key:"selectFirstKeyword",value:function(){var e=this.tagifyField.current,t=e.tagify.value,n={tag:"",index:0,data:{value:""}};t.length>0&&(n={tag:e.queryTags()[0],index:0,data:{value:t[0].value}});this.props.updateSelectedKeyword(n,e)}},{key:"updateKeywords",value:function(){var e=this.tagifyField.current,t=sa(e.toString());this.props.updateKeywords(t)}},{key:"onDragEnd",value:function(){1!==this.tagifyField.current.queryTags().length&&this.setState({showCTA:!0})}},{key:"hideDropdown",value:function(){null!==this.request&&(this.request.abort(),this.request=null),this.setState({whitelist:[],showDropdown:!1})}}])}(o.Component);const _a=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{keywords:t.getKeywords(),isRefreshing:t.isRefreshing()}}),(0,i.withDispatch)(function(e){return{updateKeywords:function(t){e("rank-math").updateKeywords(t)},updateSelectedKeyword:function(t,n){n.queryTags().forEach(function(e){e.classList.remove("selected")}),(0,c.isUndefined)(t.tag)||""===t.tag||t.tag.classList.add("selected"),e("rank-math").updateSelectedKeyword(t)}}}))(ka);function Ea(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ta(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ta(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ta(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const xa=(0,p.withFilters)("rankMath.focusKeywords.Trends")(function(){var e=Ea((0,o.useState)(!1),2),t=e[0],n=e[1];return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.Button,{title:(0,r.__)("Trends","seo-by-rank-math"),rel:"noreferrer noopener",id:"rank-math-compare-keywords-trigger",className:"button button-icon rank-math-compare-keywords-trigger",onClick:function(){n(!0)}},wp.element.createElement("span",{className:"button-icon",dangerouslySetInnerHTML:{__html:rankMath.trendsIcon}})),t&&wp.element.createElement(p.Modal,{title:(0,r.__)("Google Trends","seo-by-rank-math"),closeButtonLabel:(0,r.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!0,onRequestClose:function(){n(!1)},className:"rank-math-modal rank-math-trends-cta-modal",overlayClassName:"rank-math-modal-overlay"},wp.element.createElement("div",{className:"components-panel__body rank-math-trends-cta-wrapper"},wp.element.createElement("img",{src:rankMath.trendsPreviewImage,alt:"",className:"trends-cta blurred"}),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-50"},wp.element.createElement("h3",null,(0,r.__)("Track Keyword Trends","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Data fetched directly from Google","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Analyze search trends and compare keywords","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("See data from a particular Country or timeframe","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:rankMath.trendsUpgradeLink,rel:"noreferrer noopener",target:"_blank"},rankMath.trendsUpgradeLabel))))))});const Oa=function(){return!((0,c.isNil)(window.wp)||(0,c.isNil)(wp.data)||(0,c.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,c.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))};const Sa=(0,p.withFilters)("rankMath.analytics.contentAI")(function(){return!1});const Na=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{isLoaded:t.isLoaded(),isPillarContent:t.getPillarContent()}}),(0,i.withDispatch)(function(e){return{togglePillarContent:function(t){e("rank-math").updatePillarContent(t)}}}))(function(e){var t=e.isLoaded,n=e.isPillarContent,a=e.togglePillarContent;return t?wp.element.createElement(p.PanelBody,{initialOpen:!0,className:"rank-math-focus-keyword"},wp.element.createElement("h2",{className:"components-panel__body-title"},(0,r.__)("Focus Keyword","seo-by-rank-math"),wp.element.createElement(Xt,null,wp.element.createElement(L,{components:{link:wp.element.createElement("a",{href:xe("score-100","General Focus Keyword"),target:"_blank",rel:"noopener noreferrer"})}},(0,r.__)("Insert keywords you want to rank for. Try to {{link}}attain 100/100 points{{/link}} for better chances of ranking.","seo-by-rank-math")))),wp.element.createElement(xa,null),rankMath.currentEditor&&("classic"!==rankMath.currentEditor||Oa())&&wp.element.createElement(Sa,null),wp.element.createElement($t.Slot,null,function(e){return e.length>0?e:[]}),wp.element.createElement("div",null,wp.element.createElement(_a,null)),wp.element.createElement(Jt,null),"post"===rankMath.objectType&&wp.element.createElement(p.CheckboxControl,{className:"pillar-content",label:wp.element.createElement(o.Fragment,null,wp.element.createElement("strong",null,(0,r.__)("This post is Pillar Content","seo-by-rank-math")),wp.element.createElement("a",{href:xe("pillar-content-internal-linking","Pillar Content"),rel:"noreferrer",target:"_blank",className:"dashicons-before dashicons-editor-help rank-math-help-icon"})),checked:n,onChange:a,__nextHasNoMarginBottom:!0})):null});var Ca=(0,p.createSlotFill)("RankMathAfterEditor"),Ia=Ca.Fill,Ma=Ca.Slot,Da=function(e){var t=e.children,n=e.className;return wp.element.createElement(Ia,null,wp.element.createElement(p.PanelRow,{className:n},t))};Da.Slot=Ma;const Aa=Da;const Pa=(0,i.withDispatch)(function(e){return{toggleEditor:function(){e("rank-math").toggleSnippetEditor(!0)}}})(function(e){var t=e.toggleEditor;return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(ve,{onClick:t}),wp.element.createElement(tt,null),wp.element.createElement(Aa.Slot,null,function(e){return e.length>0?e:[]})),wp.element.createElement(Na,null),rankMath.canUser.analysis&&wp.element.createElement(Wt,null),(0,a.applyFilters)("rank_math_after_checklists",null))});var ja=function(e,t,n){return!1===n?delete e[t]:e[t]=!0,e};const Ra=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math").getRobots();return{robots:t,isRobotIndex:"index"in t,isRobotNoIndex:"noindex"in t,isRobotNoFollow:"nofollow"in t,isRobotNoArchive:"noarchive"in t,isRobotNoImageIndex:"noimageindex"in t,isRobotNoSnippet:"nosnippet"in t}}),(0,i.withDispatch)(function(e,t){var n=t.robots;return{updateRobots:function(t,a){n=ja(n,t,a),"index"===t&&(n=ja(n,"noindex",!a)),"noindex"===t&&(n=ja(n,"index",!a)),e("rank-math").updateRobots(n)}}}))(function(e){return wp.element.createElement(p.BaseControl,{className:"rank-math-robots",id:"rank-math-robots",label:(0,r.__)("Robots Meta","seo-by-rank-math"),__nextHasNoMarginBottom:!0},wp.element.createElement("div",{className:"rank-math-robots-list"},wp.element.createElement(p.CheckboxControl,{className:"robot-choice-index",label:wp.element.createElement(o.Fragment,null,(0,r.__)("Index","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Instructs search engines to index and show these pages in the search results","seo-by-rank-math"))),checked:e.isRobotIndex,onChange:function(t){return e.updateRobots("index",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{className:"robot-choice-noindex",label:wp.element.createElement(o.Fragment,null,(0,r.__)("No Index","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Prevents pages from being indexed and displayed in search engine result pages","seo-by-rank-math"))),checked:e.isRobotNoIndex,onChange:function(t){return e.updateRobots("noindex",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{className:"robot-choice-nofollow",label:wp.element.createElement(o.Fragment,null,(0,r.__)("Nofollow","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Prevents search engines from following links on the pages","seo-by-rank-math"))),checked:e.isRobotNoFollow,onChange:function(t){return e.updateRobots("nofollow",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{className:"robot-choice-noarchive",label:wp.element.createElement(o.Fragment,null,(0,r.__)("No Archive","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Prevents search engines from showing Cached links for pages","seo-by-rank-math"))),checked:e.isRobotNoArchive,onChange:function(t){return e.updateRobots("noarchive",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{className:"robot-choice-noimageindex",label:wp.element.createElement(o.Fragment,null,(0,r.__)("No Image Index","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("This option prevents images on a page from being indexed by Google and other search engines","seo-by-rank-math"))),checked:e.isRobotNoImageIndex,onChange:function(t){return e.updateRobots("noimageindex",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{className:"robot-choice-nosnippet",label:wp.element.createElement(o.Fragment,null,(0,r.__)("No Snippet","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Prevents a snippet from being shown in the search results","seo-by-rank-math"))),checked:e.isRobotNoSnippet,onChange:function(t){return e.updateRobots("nosnippet",t)},__nextHasNoMarginBottom:!0})))});function La(e){return La="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},La(e)}function Ba(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Fa(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ba(Object(n),!0).forEach(function(t){Ha(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ba(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ha(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=La(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=La(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==La(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Ua=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math");return{redirectionID:t.getRedirectionID(),redirectionUrl:t.getRedirectionUrl(),redirectionType:t.getRedirectionType(),hasRedirect:t.hasRedirect()}}),(0,i.withDispatch)(function(e,t){return{toggle:function(){e("rank-math").updateHasRedirect(!t.hasRedirect),e("rank-math").updateRedirectionItem(Fa(Fa({},t),{},{hasRedirect:!t.hasRedirect}))},updateRedirection:function(n,a){e("rank-math").updateRedirection(n,a),e("rank-math").updateRedirectionItem(Fa(Fa({},t),{},Ha({},n,a)))}}}))(function(e){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.ToggleControl,{className:e.hasRedirect?"is-open":"is-close",label:(0,r.__)("Redirect","seo-by-rank-math"),checked:e.hasRedirect,onChange:function(){return e.toggle()},__nextHasNoMarginBottom:!0}),e.hasRedirect&&wp.element.createElement(p.SelectControl,{label:(0,r.__)("Redirection Type","seo-by-rank-math"),className:e.hasRedirect?"":"hidden",value:e.redirectionType,onChange:function(t){return e.updateRedirection("redirectionType",t)},options:[{value:"301",label:(0,r.__)("301 Permanent Move","seo-by-rank-math")},{value:"302",label:(0,r.__)("302 Temporary Move","seo-by-rank-math")},{value:"307",label:(0,r.__)("307 Temporary Redirect","seo-by-rank-math")},{value:"410",label:(0,r.__)("410 Content Deleted","seo-by-rank-math")},{value:"451",label:(0,r.__)("451 Content Unavailable for Legal Reasons","seo-by-rank-math")}],__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),!1===["410","451"].includes(e.redirectionType)&&wp.element.createElement(p.TextControl,{type:"url",autoComplete:"off",label:(0,r.__)("Destination URL","seo-by-rank-math"),value:e.redirectionUrl,placeholder:"https://rankmath.com/",className:e.hasRedirect?"":"hidden",onChange:function(t){return e.updateRedirection("redirectionUrl",t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{type:"hidden",value:e.redirectionID,className:"hidden",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});const Va=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math"),n=rankMathEditor.assessor.dataCollector;return{placeholder:t.getCanonicalUrl()?t.getCanonicalUrl():n.getPermalink()?n.getPermalink():"https://rankmath.com/",canonicalUrl:t.getCanonicalUrl()}}),(0,i.withDispatch)(function(e){return{onUrlChange:function(t){e("rank-math").updateCanonicalUrl(t)}}}))(function(e){var t=e.canonicalUrl,n=e.placeholder,a=e.onUrlChange;return wp.element.createElement(p.BaseControl,{className:"rank-math-canonical",__nextHasNoMarginBottom:!0},wp.element.createElement("span",{className:"components-base-control__label"},(0,r.__)("Canonical URL","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("The canonical URL informs search crawlers which page is the main page if you have double content","seo-by-rank-math"))),wp.element.createElement(p.TextControl,{type:"url",autoComplete:"off",value:t,placeholder:n,onChange:function(e){return a(e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});const za=(0,u.compose)((0,i.withSelect)(function(e){return{title:e("rank-math").getBreadcrumbTitle()}}),(0,i.withDispatch)(function(e){return{onTitleChange:function(t){e("rank-math").updateBreadcrumbTitle(t)}}}))(function(e){var t=e.title,n=e.onTitleChange;return wp.element.createElement(p.BaseControl,{className:"rank-math-breadcrumb-title",__nextHasNoMarginBottom:!0},wp.element.createElement("span",{className:"components-base-control__label"},(0,r.__)("Breadcrumb Title","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Breadcrumb Title to use for this post","seo-by-rank-math"))),wp.element.createElement(p.TextControl,{value:t,onChange:function(e){return n(e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});function Wa(e){return Wa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wa(e)}function Ga(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Ka(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ga(Object(n),!0).forEach(function(t){qa(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ga(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function qa(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Wa(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Wa(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Wa(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ya={"max-snippet":-1,"max-video-preview":-1,"max-image-preview":"large"};const $a=(0,u.compose)((0,i.withSelect)(function(e){var t=e("rank-math").getAdvancedRobots(),n=Ka({},t);(0,c.defaults)(n,Ya);var a=null,r=null,i=null;return"max-snippet"in t&&(a=n["max-snippet"]),"max-image-preview"in t&&(r=n["max-image-preview"]),"max-video-preview"in t&&(i=n["max-video-preview"]),{meta:t,isSnippet:a,isImage:r,isVideo:i,maxSnippet:a?n["max-snippet"]:-1,maxImage:n["max-image-preview"],maxVideo:i?n["max-video-preview"]:-1}}),(0,i.withDispatch)(function(e,t){var n=Ka({},t.meta);return{updateRobots:function(t,a){(0,c.isBoolean)(a)?!1===a?delete n[t]:n[t]=Ya[t]:n[t]=a,e("rank-math").updateAdvancedRobots(n)}}}))(function(e){return wp.element.createElement(p.BaseControl,{className:"rank-math-robots",id:"rank-math-robots",label:(0,r.__)("Advanced Robots Meta","seo-by-rank-math"),__nextHasNoMarginBottom:!0},wp.element.createElement("div",{className:"rank-math-robots-list advanced-robots"},wp.element.createElement(p.CheckboxControl,{label:wp.element.createElement(o.Fragment,null,(0,r.__)("Max Snippet","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Specify a maximum text-length, in characters, of a snippet for your page","seo-by-rank-math"))),checked:e.isSnippet,onChange:function(t){return e.updateRobots("max-snippet",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{type:"number",value:e.maxSnippet,onChange:function(t){return e.updateRobots("max-snippet",t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{label:wp.element.createElement(o.Fragment,null,(0,r.__)("Max Video Preview","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Specify a maximum duration in seconds of an animated video preview","seo-by-rank-math"))),checked:e.isVideo,onChange:function(t){return e.updateRobots("max-video-preview",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.TextControl,{type:"number",value:e.maxVideo,onChange:function(t){return e.updateRobots("max-video-preview",t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(p.CheckboxControl,{label:wp.element.createElement(o.Fragment,null,(0,r.__)("Max Image Preview","seo-by-rank-math"),wp.element.createElement(Xt,null,(0,r.__)("Specify a maximum size of image preview to be shown for images on this page","seo-by-rank-math"))),checked:e.isImage,onChange:function(t){return e.updateRobots("max-image-preview",t)},__nextHasNoMarginBottom:!0}),wp.element.createElement(p.SelectControl,{value:e.maxImage,onChange:function(t){return e.updateRobots("max-image-preview",t)},options:[{value:"large",label:(0,r.__)("Large","seo-by-rank-math")},{value:"standard",label:(0,r.__)("Standard","seo-by-rank-math")},{value:"none",label:(0,r.__)("None","seo-by-rank-math")}],__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})))});const Ja=(0,u.compose)((0,i.withSelect)(function(e){return{showScore:e("rank-math").getShowScoreFrontend()}}),(0,i.withDispatch)(function(e){return{toggleScore:function(t){e("rank-math").toggleFrontendScore(t)}}}))(function(e){var t=e.showScore,n=e.toggleScore;return wp.element.createElement(p.BaseControl,{className:"rank-math-frontend-score",__nextHasNoMarginBottom:!0},wp.element.createElement(p.ToggleControl,{label:(0,r.__)("Show SEO Score on Front-end","seo-by-rank-math"),checked:t,onChange:n,__nextHasNoMarginBottom:!0}))});var Xa=(0,p.createSlotFill)("RankMathAdvancedTab"),Za=Xa.Fill,Qa=Xa.Slot,er=function(e){var t=e.children,n=e.className;return wp.element.createElement(Za,null,wp.element.createElement(p.PanelRow,{className:n},t))};er.Slot=Qa;const tr=er;var nr=(0,p.withFilters)("rankMath.advanced.newsSitemap")(function(){return null}),ar=(0,p.withFilters)("rankMath.advanced.linkGenius")(function(){return null});const rr=function(){return wp.element.createElement(o.Fragment,null,wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(Ra,null)),wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement($a,null)),wp.element.createElement(nr,null),wp.element.createElement(ar,null),wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(Va,null)),rankMath.assessor.hasBreadcrumb&&wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(za,null)),rankMath.assessor.hasRedirection&&wp.element.createElement(p.PanelBody,{initialOpen:!0,className:"rank-math-redirect"},wp.element.createElement(Ua,null)),rankMath.frontEndScore&&wp.element.createElement(p.PanelBody,{initialOpen:!0},wp.element.createElement(Ja,null)),wp.element.createElement(tr.Slot,null,function(e){return e.length>0?e:[]}))};var ir=n(8221),or=n.n(ir),sr={init:function(){this.cacheProps(),this.initVars(),this.bindEvents()},cacheProps:function(){this.root=document.documentElement,this.$wpAdminbar=Se()("#wpadminbar")},initVars:function(){this.$wpAdminbar.length&&this.setWpAdminbarHeight.call(this)},bindEvents:function(){window.addEventListener("resize",or()(this.onWindowResize.bind(this)))},onWindowResize:function(){this.$wpAdminbar.length&&this.setWpAdminbarHeight.call(this)},setWpAdminbarHeight:function(){this.root.style.setProperty("--rankmath-wp-adminbar-height",this.$wpAdminbar.outerHeight()+"px")}};Se()(function(){sr.init()});var lr=function(e){"social"===e&&(0,i.dispatch)("rank-math").toggleSnippetEditor(!0)};const cr=function(){return wp.element.createElement(T,{className:"rank-math-tabs",activeClass:"is-active",tabs:(e=[],rankMath.canUser.general&&e.push({name:"general",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-settings",title:(0,r.__)("General","seo-by-rank-math")}),wp.element.createElement("span",null,(0,r.__)("General","seo-by-rank-math"))),view:Pa,className:"rank-math-general-tab"}),rankMath.canUser.advanced&&e.push({name:"advanced",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-toolbox",title:(0,r.__)("Advanced","seo-by-rank-math")}),wp.element.createElement("span",null,(0,r.__)("Advanced","seo-by-rank-math"))),view:rr,className:"rank-math-advanced-tab"}),rankMath.canUser.social&&e.push({name:"social",title:wp.element.createElement(o.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-social",title:(0,r.__)("Social","seo-by-rank-math")}),wp.element.createElement("span",null,(0,r.__)("Social","seo-by-rank-math"))),view:nt,className:"rank-math-social-tab"}),(0,a.applyFilters)("rank_math_sidebar_tabs",e)),onSelect:lr},function(e){return wp.element.createElement("div",{className:"rank-math-tab-content-"+e.name},(0,o.createElement)(e.view))});var e};(0,a.addAction)("rank_math_loaded","rank-math",function(){(0,a.addFilter)("rank_math_app","rank-math",function(){return cr})})}()}();PK     ’ŠU]ªÃB¤d  ¤d    assets/admin/js/validate.jsnu „[µü¤        !function(){var t={587:function(t,e,i){var s,n,r;n=[i(311)],s=function(t){t.extend(t.fn,{validate:function(e){if(this.length){var i=t.data(this[0],"validator");return i||(this.attr("novalidate","novalidate"),i=new t.validator(e,this[0]),t.data(this[0],"validator",i),i.settings.onsubmit&&(this.on("click.validate",":submit",(function(e){i.submitButton=e.currentTarget,t(this).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==t(this).attr("formnovalidate")&&(i.cancelSubmit=!0)})),this.on("submit.validate",(function(e){function s(){var s,n;return i.submitButton&&(i.settings.submitHandler||i.formSubmitted)&&(s=t("<input type='hidden'/>").attr("name",i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),!(i.settings.submitHandler&&!i.settings.debug)||(n=i.settings.submitHandler.call(i,i.currentForm,e),s&&s.remove(),void 0!==n&&n)}return i.settings.debug&&e.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,s()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):s():(i.focusInvalid(),!1)}))),i)}e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var e,i,s;return t(this[0]).is("form")?e=this.validate().form():(s=[],e=!0,i=t(this[0].form).validate(),this.each((function(){(e=i.element(this)&&e)||(s=s.concat(i.errorList))})),i.errorList=s),e},rules:function(e,i){var s,n,r,a,o,l,h=this[0],d=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=h&&(!h.form&&d&&(h.form=this.closest("form")[0],h.name=this.attr("name")),null!=h.form)){if(e)switch(n=(s=t.data(h.form,"validator").settings).rules,r=t.validator.staticRules(h),e){case"add":t.extend(r,t.validator.normalizeRule(i)),delete r.messages,n[h.name]=r,i.messages&&(s.messages[h.name]=t.extend(s.messages[h.name],i.messages));break;case"remove":return i?(l={},t.each(i.split(/\s/),(function(t,e){l[e]=r[e],delete r[e]})),l):(delete n[h.name],r)}return(a=t.validator.normalizeRules(t.extend({},t.validator.classRules(h),t.validator.attributeRules(h),t.validator.dataRules(h),t.validator.staticRules(h)),h)).required&&(o=a.required,delete a.required,a=t.extend({required:o},a)),a.remote&&(o=a.remote,delete a.remote,a=t.extend(a,{remote:o})),a}}});var e,i=function(t){return t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};t.extend(t.expr.pseudos||t.expr[":"],{blank:function(e){return!i(""+t(e).val())},filled:function(e){var s=t(e).val();return null!==s&&!!i(""+s)},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,i){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=i,this.init()},t.validator.format=function(e,i){return 1===arguments.length?function(){var i=t.makeArray(arguments);return i.unshift(e),t.validator.format.apply(this,i)}:(void 0===i||(arguments.length>2&&i.constructor!==Array&&(i=t.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),t.each(i,(function(t,i){e=e.replace(new RegExp("\\{"+t+"\\}","g"),(function(){return i}))}))),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(t)))},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(e,i){var s=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===i.which&&""===this.elementValue(e)||-1!==t.inArray(i.keyCode,s)||(e.name in this.submitted||e.name in this.invalid)&&this.element(e)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).addClass(i).removeClass(s):t(e).addClass(i).removeClass(s)},unhighlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).removeClass(i).addClass(s):t(e).removeClass(i).addClass(s)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}."),step:t.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var e,i=this.currentForm,s=this.groups={};function n(e){var s=void 0!==t(this).attr("contenteditable")&&"false"!==t(this).attr("contenteditable");if(!this.form&&s&&(this.form=t(this).closest("form")[0],this.name=t(this).attr("name")),i===this.form){var n=t.data(this.form,"validator"),r="on"+e.type.replace(/^validate/,""),a=n.settings;a[r]&&!t(this).is(a.ignore)&&a[r].call(n,this,e)}}t.each(this.settings.groups,(function(e,i){"string"==typeof i&&(i=i.split(/\s/)),t.each(i,(function(t,i){s[i]=e}))})),e=this.settings.rules,t.each(e,(function(i,s){e[i]=t.validator.normalizeRule(s)})),t(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",n).on("click.validate","select, option, [type='radio'], [type='checkbox']",n),this.settings.invalidHandler&&t(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){var i,s,n=this.clean(e),r=this.validationTargetFor(n),a=this,o=!0;return void 0===r?delete this.invalid[n.name]:(this.prepareElement(r),this.currentElements=t(r),(s=this.groups[r.name])&&t.each(this.groups,(function(t,e){e===s&&t!==r.name&&(n=a.validationTargetFor(a.clean(a.findByName(t))))&&n.name in a.invalid&&(a.currentElements.push(n),o=a.check(n)&&o)})),i=!1!==this.check(r),o=o&&i,this.invalid[r.name]=!i,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),t(e).attr("aria-invalid",!i)),o},showErrors:function(e){if(e){var i=this;t.extend(this.errorMap,e),this.errorList=t.map(this.errorMap,(function(t,e){return{message:t,element:i.findByName(e)[0]}})),this.successList=t.grep(this.successList,(function(t){return!(t.name in e)}))}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var e=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(e)},resetElements:function(t){var e;if(this.settings.unhighlight)for(e=0;t[e];e++)this.settings.unhighlight.call(this,t[e],this.settings.errorClass,""),this.findByName(t[e].name).removeClass(this.settings.validClass);else t.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e,i=0;for(e in t)void 0!==t[e]&&null!==t[e]&&!1!==t[e]&&i++;return i},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(t){t.not(this.containers).text(""),this.addWrapper(t).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").trigger("focus").trigger("focusin")}catch(t){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,(function(t){return t.element.name===e.name})).length&&e},elements:function(){var e=this,i={};return t(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter((function(){var s=this.name||t(this).attr("name"),n=void 0!==t(this).attr("contenteditable")&&"false"!==t(this).attr("contenteditable");return!s&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),n&&(this.form=t(this).closest("form")[0],this.name=s),!(this.form!==e.currentForm||s in i||!e.objectLength(t(this).rules())||(i[s]=!0,0))}))},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.split(" ").join(".");return t(this.settings.errorElement+"."+e,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([])},reset:function(){this.resetInternals(),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var i,s,n=t(e),r=e.type,a=void 0!==n.attr("contenteditable")&&"false"!==n.attr("contenteditable");return"radio"===r||"checkbox"===r?this.findByName(e.name).filter(":checked").val():"number"===r&&void 0!==e.validity?e.validity.badInput?"NaN":n.val():(i=a?n.text():n.val(),"file"===r?"C:\\fakepath\\"===i.substr(0,12)?i.substr(12):(s=i.lastIndexOf("/"))>=0||(s=i.lastIndexOf("\\"))>=0?i.substr(s+1):i:"string"==typeof i?i.replace(/\r/g,""):i)},check:function(e){e=this.validationTargetFor(this.clean(e));var i,s,n,r,a=t(e).rules(),o=t.map(a,(function(t,e){return e})).length,l=!1,h=this.elementValue(e);for(s in"function"==typeof a.normalizer?r=a.normalizer:"function"==typeof this.settings.normalizer&&(r=this.settings.normalizer),r&&(h=r.call(e,h),delete a.normalizer),a){n={method:s,parameters:a[s]};try{if("dependency-mismatch"===(i=t.validator.methods[s].call(this,h,e,n.parameters))&&1===o){l=!0;continue}if(l=!1,"pending"===i)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!i)return this.formatAndAdd(e,n),!1}catch(t){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+n.method+"' method.",t),t instanceof TypeError&&(t.message+=".  Exception occurred when checking element "+e.id+", check the '"+n.method+"' method."),t}}if(!l)return this.objectLength(a)&&this.successList.push(e),!0},customDataMessage:function(e,i){return t(e).data("msg"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase())||t(e).data("msg")},customMessage:function(t,e){var i=this.settings.messages[t];return i&&(i.constructor===String?i:i[e])},findDefined:function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]},defaultMessage:function(e,i){"string"==typeof i&&(i={method:i});var s=this.findDefined(this.customMessage(e.name,i.method),this.customDataMessage(e,i.method),!this.settings.ignoreTitle&&e.title||void 0,t.validator.messages[i.method],"<strong>Warning: No message defined for "+e.name+"</strong>"),n=/\$?\{(\d+)\}/g;return"function"==typeof s?s=s.call(this,i.parameters,e):n.test(s)&&(s=t.validator.format(s.replace(n,"{$1}"),i.parameters)),s},formatAndAdd:function(t,e){var i=this.defaultMessage(t,e);this.errorList.push({message:i,element:t,method:e.method}),this.errorMap[t.name]=i,this.submitted[t.name]=i},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,i;for(t=0;this.errorList[t];t++)i=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map((function(){return this.element}))},showLabel:function(e,i){var s,n,r,a,o=this.errorsFor(e),l=this.idOrName(e),h=t(e).attr("aria-describedby");o.length?(o.removeClass(this.settings.validClass).addClass(this.settings.errorClass),o.html(i)):(s=o=t("<"+this.settings.errorElement+">").attr("id",l+"-error").addClass(this.settings.errorClass).html(i||""),this.settings.wrapper&&(s=o.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(s):this.settings.errorPlacement?this.settings.errorPlacement.call(this,s,t(e)):s.insertAfter(e),o.is("label")?o.attr("for",l):0===o.parents("label[for='"+this.escapeCssMeta(l)+"']").length&&(r=o.attr("id"),h?h.match(new RegExp("\\b"+this.escapeCssMeta(r)+"\\b"))||(h+=" "+r):h=r,t(e).attr("aria-describedby",h),(n=this.groups[e.name])&&(a=this,t.each(a.groups,(function(e,i){i===n&&t("[name='"+a.escapeCssMeta(e)+"']",a.currentForm).attr("aria-describedby",o.attr("id"))}))))),!i&&this.settings.success&&(o.text(""),"string"==typeof this.settings.success?o.addClass(this.settings.success):this.settings.success(o,e)),this.toShow=this.toShow.add(o)},errorsFor:function(e){var i=this.escapeCssMeta(this.idOrName(e)),s=t(e).attr("aria-describedby"),n="label[for='"+i+"'], label[for='"+i+"'] *";return s&&(n=n+", #"+this.escapeCssMeta(s).replace(/\s+/g,", #")),this.errors().filter(n)},escapeCssMeta:function(t){return void 0===t?"":t.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),t(e).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+this.escapeCssMeta(e)+"']")},getLength:function(e,i){switch(i.nodeName.toLowerCase()){case"select":return t("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return e.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{boolean:function(t){return t},string:function(e,i){return!!t(e,i.form).length},function:function(t,e){return t(e)}},optional:function(e){var i=this.elementValue(e);return!t.validator.methods.required.call(this,i,e)&&"dependency-mismatch"},startRequest:function(e){this.pending[e.name]||(this.pendingRequest++,t(e).addClass(this.settings.pendingClass),this.pending[e.name]=!0)},stopRequest:function(e,i){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],t(e).removeClass(this.settings.pendingClass),i&&0===this.pendingRequest&&this.formSubmitted&&this.form()&&0===this.pendingRequest?(t(this.currentForm).trigger("submit"),this.submitButton&&t("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!i&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e,i){return i="string"==typeof i&&i||"remote",t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,{method:i})})},destroy:function(){this.resetForm(),t(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,i){e.constructor===String?this.classRuleSettings[e]=i:t.extend(this.classRuleSettings,e)},classRules:function(e){var i={},s=t(e).attr("class");return s&&t.each(s.split(" "),(function(){this in t.validator.classRuleSettings&&t.extend(i,t.validator.classRuleSettings[this])})),i},normalizeAttributeRule:function(t,e,i,s){/min|max|step/.test(i)&&(null===e||/number|range|text/.test(e))&&(s=Number(s),isNaN(s)&&(s=void 0)),s||0===s?t[i]=s:e===i&&"range"!==e&&(t["date"===e?"dateISO":i]=!0)},attributeRules:function(e){var i,s,n={},r=t(e),a=e.getAttribute("type");for(i in t.validator.methods)"required"===i?(""===(s=e.getAttribute(i))&&(s=!0),s=!!s):s=r.attr(i),this.normalizeAttributeRule(n,a,i,s);return n.maxlength&&/-1|2147483647|524288/.test(n.maxlength)&&delete n.maxlength,n},dataRules:function(e){var i,s,n={},r=t(e),a=e.getAttribute("type");for(i in t.validator.methods)""===(s=r.data("rule"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase()))&&(s=!0),this.normalizeAttributeRule(n,a,i,s);return n},staticRules:function(e){var i={},s=t.data(e.form,"validator");return s.settings.rules&&(i=t.validator.normalizeRule(s.settings.rules[e.name])||{}),i},normalizeRules:function(e,i){return t.each(e,(function(s,n){if(!1!==n){if(n.param||n.depends){var r=!0;switch(typeof n.depends){case"string":r=!!t(n.depends,i.form).length;break;case"function":r=n.depends.call(i,i)}r?e[s]=void 0===n.param||n.param:(t.data(i.form,"validator").resetElements(t(i)),delete e[s])}}else delete e[s]})),t.each(e,(function(t,s){e[t]="function"==typeof s&&"normalizer"!==t?s(i):s})),t.each(["minlength","maxlength"],(function(){e[this]&&(e[this]=Number(e[this]))})),t.each(["rangelength","range"],(function(){var t;e[this]&&(Array.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(t=e[this].replace(/[\[\]]/g,"").split(/[\s,]+/),e[this]=[Number(t[0]),Number(t[1])]))})),t.validator.autoCreateRanges&&(null!=e.min&&null!=e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),null!=e.minlength&&null!=e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var i={};t.each(e.split(/\s/),(function(){i[this]=!0})),e=i}return e},addMethod:function(e,i,s){t.validator.methods[e]=i,t.validator.messages[e]=void 0!==s?s:t.validator.messages[e],i.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,i,s){if(!this.depend(s,i))return"dependency-mismatch";if("select"===i.nodeName.toLowerCase()){var n=t(i).val();return n&&n.length>0}return this.checkable(i)?this.getLength(e,i)>0:null!=e&&e.length>0},email:function(t,e){return this.optional(e)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(t)},url:function(t,e){return this.optional(e)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(t)},date:(e=!1,function(t,i){return e||(e=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(i)||!/Invalid|NaN/.test(new Date(t).toString())}),dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(t)},number:function(t,e){return this.optional(e)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},minlength:function(t,e,i){var s=Array.isArray(t)?t.length:this.getLength(t,e);return this.optional(e)||s>=i},maxlength:function(t,e,i){var s=Array.isArray(t)?t.length:this.getLength(t,e);return this.optional(e)||s<=i},rangelength:function(t,e,i){var s=Array.isArray(t)?t.length:this.getLength(t,e);return this.optional(e)||s>=i[0]&&s<=i[1]},min:function(t,e,i){return this.optional(e)||t>=i},max:function(t,e,i){return this.optional(e)||t<=i},range:function(t,e,i){return this.optional(e)||t>=i[0]&&t<=i[1]},step:function(e,i,s){var n,r=t(i).attr("type"),a="Step attribute on input type "+r+" is not supported.",o=["text","number","range"],l=new RegExp("\\b"+r+"\\b"),h=function(t){var e=(""+t).match(/(?:\.(\d+))?$/);return e&&e[1]?e[1].length:0},d=function(t){return Math.round(t*Math.pow(10,n))},u=!0;if(r&&!l.test(o.join()))throw new Error(a);return n=h(s),(h(e)>n||d(e)%d(s)!=0)&&(u=!1),this.optional(i)||u},equalTo:function(e,i,s){var n=t(s);return this.settings.onfocusout&&n.not(".validate-equalTo-blur").length&&n.addClass("validate-equalTo-blur").on("blur.validate-equalTo",(function(){t(i).valid()})),e===n.val()},remote:function(e,i,s,n){if(this.optional(i))return"dependency-mismatch";n="string"==typeof n&&n||"remote";var r,a,o,l=this.previousValue(i,n);return this.settings.messages[i.name]||(this.settings.messages[i.name]={}),l.originalMessage=l.originalMessage||this.settings.messages[i.name][n],this.settings.messages[i.name][n]=l.message,s="string"==typeof s&&{url:s}||s,o=t.param(t.extend({data:e},s.data)),l.old===o?l.valid:(l.old=o,r=this,this.startRequest(i),(a={})[i.name]=e,t.ajax(t.extend(!0,{mode:"abort",port:"validate"+i.name,dataType:"json",data:a,context:r.currentForm,success:function(t){var s,a,o,h=!0===t||"true"===t;r.settings.messages[i.name][n]=l.originalMessage,h?(o=r.formSubmitted,r.resetInternals(),r.toHide=r.errorsFor(i),r.formSubmitted=o,r.successList.push(i),r.invalid[i.name]=!1,r.showErrors()):(s={},a=t||r.defaultMessage(i,{method:n,parameters:e}),s[i.name]=l.message=a,r.invalid[i.name]=!0,r.showErrors(s)),l.valid=h,r.stopRequest(i,h)}},s)),"pending")}}});var s,n={};return t.ajaxPrefilter?t.ajaxPrefilter((function(t,e,i){var s=t.port;"abort"===t.mode&&(n[s]&&n[s].abort(),n[s]=i)})):(s=t.ajax,t.ajax=function(e){var i=("mode"in e?e:t.ajaxSettings).mode,r=("port"in e?e:t.ajaxSettings).port;return"abort"===i?(n[r]&&n[r].abort(),n[r]=s.apply(this,arguments),n[r]):s.apply(this,arguments)}),t},void 0===(r="function"==typeof s?s.apply(e,n):s)||(t.exports=r)},311:function(t){"use strict";t.exports=jQuery}},e={};function i(s){var n=e[s];if(void 0!==n)return n.exports;var r=e[s]={exports:{}};return t[s](r,r.exports,i),r.exports}i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},function(){"use strict";var t,e=i(311),s=i.n(e);i(587);(t=s())((function(){window.rankMathValidate={init:function(){this.extendLibrary(),this.watchFields()},extendLibrary:function(){t.validator.addMethod("regex",(function(e,i,s){var n=new RegExp("string"==typeof s?s:t(i).data("validate-pattern"));return this.optional(i)||n.test(e)}),rankMath.validationl10n.regexErrorDefault),t.extend(t.validator.messages,{required:rankMath.validationl10n.requiredErrorDefault,email:rankMath.validationl10n.emailErrorDefault,url:rankMath.validationl10n.urlErrorDefault}),t.extend(t.validator.defaults,{errorClass:"invalid"})},watchFields:function(){var e=this;t(".rank-math-validate-field").on("focus","input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea",(function(){e.fieldValidation(t(this).closest("form"))}))},fieldValidation:function(t){return"1"!==t.data("validated")&&(t.data("validated","1").validate(),!0)}},window.rankMathValidate.init()}))}()}();PK     ’ŠU]¡­µM‰  ‰     assets/admin/js/custom-fields.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}};const e=jQuery;var n=t.n(e);const r=lodash;function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,u(r.key),r)}}function u(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}var a=function(){return t=function t(){var e,r,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,o=function(t){return n()(this.fields).each(function(e,r){t+=n()(r).val()}),t},(r=u(r="getContent"))in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,this.init(),this.hooks(),this.events()},e=[{key:"init",value:function(){this.fields=this.getFields(),this.getContent=this.getContent.bind(this)}},{key:"hooks",value:function(){wp.hooks.addFilter("rank_math_content","rank-math",this.getContent,11)}},{key:"events",value:function(){n()(this.fields).each(function(t,e){n()(e).on("keyup change",(0,r.debounce)(function(){rankMathEditor.refresh("content")},500))})}},{key:"getFields",value:function(){var t=[];return n()("#the-list > tr:visible").each(function(e,r){var o=n()("#"+r.id+"-key").val();-1!==n().inArray(o,rankMath.analyzeFields)&&t.push("#"+r.id+"-value")}),t}}],e&&i(t.prototype,e),o&&i(t,o),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,o}();n()(function(){setTimeout(function(){new a},500)})}();PK     ’ŠU]rÃûIR  R  %  assets/admin/js/glue-custom-fields.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}};const e=jQuery;var n=t.n(e);const r=lodash,i=wp.hooks;function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,u(r.key),r)}}function u(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}new(function(){return t=function t(){var e,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,r=[],(n=u(n="fields"))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,(0,i.addAction)("rank_math_loaded","rank-math",this.init.bind(this))},e=[{key:"init",value:function(){this.getFields(),this.events()}},{key:"getFields",value:function(){var t=this;n()("#the-list > tr:visible").each(function(e,r){var i=n()("#"+r.id+"-key").val();-1!==n().inArray(i,rankMath.analyzeFields)&&t.fields.push("#"+r.id+"-value")})}},{key:"events",value:function(){(0,i.addFilter)("rank_math_content","rank-math",this.getContent.bind(this)),n()(this.fields).each(function(t,e){n()(e).on("keyup change",(0,r.debounce)(function(){rankMathEditor.refresh("content")},500))})}},{key:"getContent",value:function(t){return n()(this.fields).each(function(e,r){t+=n()(r).val()}),t}}],e&&a(t.prototype,e),o&&a(t,o),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,o}())}();PK     ’ŠU]¶ŠØ¼"y "y   assets/admin/js/analyzer.jsnu „[µü¤        !function(){var e={3144:function(e,t,r){"use strict";var n=r(6743),i=r(1002),o=r(76),a=r(7119);e.exports=a||n.call(o,i)},1002:function(e){"use strict";e.exports=Function.prototype.apply},76:function(e){"use strict";e.exports=Function.prototype.call},3126:function(e,t,r){"use strict";var n=r(6743),i=r(9675),o=r(76),a=r(3144);e.exports=function(e){if(e.length<1||"function"!=typeof e[0])throw new i("a function is required");return a(n,o,e)}},7119:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect&&Reflect.apply},6556:function(e,t,r){"use strict";var n=r(453),i=r(3126),o=i([n("%String.prototype.indexOf%")]);e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&o(e,".prototype.")>-1?i([r]):r}},7176:function(e,t,r){"use strict";var n,i=r(3126),o=r(5795);try{n=[].__proto__===Array.prototype}catch(e){if(!e||"object"!=typeof e||!("code"in e)||"ERR_PROTO_ACCESS"!==e.code)throw e}var a=!!n&&o&&o(Object.prototype,"__proto__"),u=Object,s=u.getPrototypeOf;e.exports=a&&"function"==typeof a.get?i([a.get]):"function"==typeof s&&function(e){return s(null==e?e:u(e))}},655:function(e){"use strict";var t=Object.defineProperty||!1;if(t)try{t({},"a",{value:1})}catch(e){t=!1}e.exports=t},1237:function(e){"use strict";e.exports=EvalError},9383:function(e){"use strict";e.exports=Error},9290:function(e){"use strict";e.exports=RangeError},9538:function(e){"use strict";e.exports=ReferenceError},8068:function(e){"use strict";e.exports=SyntaxError},9675:function(e){"use strict";e.exports=TypeError},5345:function(e){"use strict";e.exports=URIError},9612:function(e){"use strict";e.exports=Object},9353:function(e){"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n<e.length;n+=1)r[n]=e[n];for(var i=0;i<t.length;i+=1)r[i+e.length]=t[i];return r};e.exports=function(e){var i=this;if("function"!=typeof i||"[object Function]"!==t.apply(i))throw new TypeError("Function.prototype.bind called on incompatible "+i);for(var o,a=function(e,t){for(var r=[],n=t||0,i=0;n<e.length;n+=1,i+=1)r[i]=e[n];return r}(arguments,1),u=r(0,i.length-a.length),s=[],l=0;l<u;l++)s[l]="$"+l;if(o=Function("binder","return function ("+function(e,t){for(var r="",n=0;n<e.length;n+=1)r+=e[n],n+1<e.length&&(r+=t);return r}(s,",")+"){ return binder.apply(this,arguments); }")(function(){if(this instanceof o){var t=i.apply(this,n(a,arguments));return Object(t)===t?t:this}return i.apply(e,n(a,arguments))}),i.prototype){var c=function(){};c.prototype=i.prototype,o.prototype=new c,c.prototype=null}return o}},6743:function(e,t,r){"use strict";var n=r(9353);e.exports=Function.prototype.bind||n},453:function(e,t,r){"use strict";var n,i=r(9612),o=r(9383),a=r(1237),u=r(9290),s=r(9538),l=r(8068),c=r(9675),d=r(5345),p=r(1514),f=r(8968),y=r(6188),h=r(8002),g=r(5880),m=r(414),b=r(3093),v=Function,D=function(e){try{return v('"use strict"; return ('+e+").constructor;")()}catch(e){}},w=r(5795),k=r(655),F=function(){throw new c},E=w?function(){try{return F}catch(e){try{return w(arguments,"callee").get}catch(e){return F}}}():F,A=r(4039)(),C=r(3628),S=r(1064),j=r(8648),x=r(1002),O=r(76),B={},_="undefined"!=typeof Uint8Array&&C?C(Uint8Array):n,P={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":A&&C?C([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":B,"%AsyncGenerator%":B,"%AsyncGeneratorFunction%":B,"%AsyncIteratorPrototype%":B,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":a,"%Float16Array%":"undefined"==typeof Float16Array?n:Float16Array,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":v,"%GeneratorFunction%":B,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":A&&C?C(C([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&A&&C?C((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":i,"%Object.getOwnPropertyDescriptor%":w,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":u,"%ReferenceError%":s,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&A&&C?C((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":A&&C?C(""[Symbol.iterator]()):n,"%Symbol%":A?Symbol:n,"%SyntaxError%":l,"%ThrowTypeError%":E,"%TypedArray%":_,"%TypeError%":c,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":d,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet,"%Function.prototype.call%":O,"%Function.prototype.apply%":x,"%Object.defineProperty%":k,"%Object.getPrototypeOf%":S,"%Math.abs%":p,"%Math.floor%":f,"%Math.max%":y,"%Math.min%":h,"%Math.pow%":g,"%Math.round%":m,"%Math.sign%":b,"%Reflect.getPrototypeOf%":j};if(C)try{null.error}catch(e){var T=C(C(e));P["%Error.prototype%"]=T}var z=function e(t){var r;if("%AsyncFunction%"===t)r=D("async function () {}");else if("%GeneratorFunction%"===t)r=D("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=D("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var i=e("%AsyncGenerator%");i&&C&&(r=C(i.prototype))}return P[t]=r,r},R={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},N=r(6743),M=r(9957),q=N.call(O,Array.prototype.concat),I=N.call(x,Array.prototype.splice),L=N.call(O,String.prototype.replace),$=N.call(O,String.prototype.slice),W=N.call(O,RegExp.prototype.exec),U=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,K=/\\(\\)?/g,H=function(e,t){var r,n=e;if(M(R,n)&&(n="%"+(r=R[n])[0]+"%"),M(P,n)){var i=P[n];if(i===B&&(i=z(n)),void 0===i&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new l("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===W(/^%?[^%]*%?$/,e))throw new l("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=$(e,0,1),r=$(e,-1);if("%"===t&&"%"!==r)throw new l("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new l("invalid intrinsic syntax, expected opening `%`");var n=[];return L(e,U,function(e,t,r,i){n[n.length]=r?L(i,K,"$1"):t||e}),n}(e),n=r.length>0?r[0]:"",i=H("%"+n+"%",t),o=i.name,a=i.value,u=!1,s=i.alias;s&&(n=s[0],I(r,q([0,1],s)));for(var d=1,p=!0;d<r.length;d+=1){var f=r[d],y=$(f,0,1),h=$(f,-1);if(('"'===y||"'"===y||"`"===y||'"'===h||"'"===h||"`"===h)&&y!==h)throw new l("property names with quotes must have matching quotes");if("constructor"!==f&&p||(u=!0),M(P,o="%"+(n+="."+f)+"%"))a=P[o];else if(null!=a){if(!(f in a)){if(!t)throw new c("base intrinsic for "+e+" exists, but the property is not available.");return}if(w&&d+1>=r.length){var g=w(a,f);a=(p=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:a[f]}else p=M(a,f),a=a[f];p&&!u&&(P[o]=a)}}return a}},1064:function(e,t,r){"use strict";var n=r(9612);e.exports=n.getPrototypeOf||null},8648:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect.getPrototypeOf||null},3628:function(e,t,r){"use strict";var n=r(8648),i=r(1064),o=r(7176);e.exports=n?function(e){return n(e)}:i?function(e){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new TypeError("getProto: not an object");return i(e)}:o?function(e){return o(e)}:null},6549:function(e){"use strict";e.exports=Object.getOwnPropertyDescriptor},5795:function(e,t,r){"use strict";var n=r(6549);if(n)try{n([],"length")}catch(e){n=null}e.exports=n},4039:function(e,t,r){"use strict";var n="undefined"!=typeof Symbol&&Symbol,i=r(1333);e.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&i())))}},1333:function(e){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(var n in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var i=Object.getOwnPropertySymbols(e);if(1!==i.length||i[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},9957:function(e,t,r){"use strict";var n=Function.prototype.call,i=Object.prototype.hasOwnProperty,o=r(6743);e.exports=o.call(n,i)},1514:function(e){"use strict";e.exports=Math.abs},8968:function(e){"use strict";e.exports=Math.floor},4459:function(e){"use strict";e.exports=Number.isNaN||function(e){return e!=e}},6188:function(e){"use strict";e.exports=Math.max},8002:function(e){"use strict";e.exports=Math.min},5880:function(e){"use strict";e.exports=Math.pow},414:function(e){"use strict";e.exports=Math.round},3093:function(e,t,r){"use strict";var n=r(4459);e.exports=function(e){return n(e)||0===e?e:e<0?-1:1}},8859:function(e,t,r){var n="function"==typeof Map&&Map.prototype,i=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,o=n&&i&&"function"==typeof i.get?i.get:null,a=n&&Map.prototype.forEach,u="function"==typeof Set&&Set.prototype,s=Object.getOwnPropertyDescriptor&&u?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,l=u&&s&&"function"==typeof s.get?s.get:null,c=u&&Set.prototype.forEach,d="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,f="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,y=Boolean.prototype.valueOf,h=Object.prototype.toString,g=Function.prototype.toString,m=String.prototype.match,b=String.prototype.slice,v=String.prototype.replace,D=String.prototype.toUpperCase,w=String.prototype.toLowerCase,k=RegExp.prototype.test,F=Array.prototype.concat,E=Array.prototype.join,A=Array.prototype.slice,C=Math.floor,S="function"==typeof BigInt?BigInt.prototype.valueOf:null,j=Object.getOwnPropertySymbols,x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,O="function"==typeof Symbol&&"object"==typeof Symbol.iterator,B="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===O||"symbol")?Symbol.toStringTag:null,_=Object.prototype.propertyIsEnumerable,P=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function T(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||k.call(/e/,t))return t;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var n=e<0?-C(-e):C(e);if(n!==e){var i=String(n),o=b.call(t,i.length+1);return v.call(i,r,"$&_")+"."+v.call(v.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return v.call(t,r,"$&_")}var z=r(2634),R=z.custom,N=K(R)?R:null,M={__proto__:null,double:'"',single:"'"},q={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};function I(e,t,r){var n=r.quoteStyle||t,i=M[n];return i+e+i}function L(e){return v.call(String(e),/"/g,"&quot;")}function $(e){return!B||!("object"==typeof e&&(B in e||void 0!==e[B]))}function W(e){return"[object Array]"===Y(e)&&$(e)}function U(e){return"[object RegExp]"===Y(e)&&$(e)}function K(e){if(O)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!x)return!1;try{return x.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,i,u){var s=n||{};if(V(s,"quoteStyle")&&!V(M,s.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var h=!V(s,"customInspect")||s.customInspect;if("boolean"!=typeof h&&"symbol"!==h)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var D=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Q(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var k=String(t);return D?T(t,k):k}if("bigint"==typeof t){var C=String(t)+"n";return D?T(t,C):C}var j=void 0===s.depth?5:s.depth;if(void 0===i&&(i=0),i>=j&&j>0&&"object"==typeof t)return W(t)?"[Array]":"[Object]";var R=function(e,t){var r;if("\t"===e.indent)r="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;r=E.call(Array(e.indent+1)," ")}return{base:r,prev:E.call(Array(t+1),r)}}(s,i);if(void 0===u)u=[];else if(G(u,t)>=0)return"[Circular]";function q(t,r,n){if(r&&(u=A.call(u)).push(r),n){var o={depth:s.depth};return V(s,"quoteStyle")&&(o.quoteStyle=s.quoteStyle),e(t,o,i+1,u)}return e(t,s,i+1,u)}if("function"==typeof t&&!U(t)){var H=function(e){if(e.name)return e.name;var t=m.call(g.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),J=re(t,q);return"[Function"+(H?": "+H:" (anonymous)")+"]"+(J.length>0?" { "+E.call(J,", ")+" }":"")}if(K(t)){var ne=O?v.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):x.call(t);return"object"!=typeof t||O?ne:Z(ne)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var ie="<"+w.call(String(t.nodeName)),oe=t.attributes||[],ae=0;ae<oe.length;ae++)ie+=" "+oe[ae].name+"="+I(L(oe[ae].value),"double",s);return ie+=">",t.childNodes&&t.childNodes.length&&(ie+="..."),ie+="</"+w.call(String(t.nodeName))+">"}if(W(t)){if(0===t.length)return"[]";var ue=re(t,q);return R&&!function(e){for(var t=0;t<e.length;t++)if(G(e[t],"\n")>=0)return!1;return!0}(ue)?"["+te(ue,R)+"]":"[ "+E.call(ue,", ")+" ]"}if(function(e){return"[object Error]"===Y(e)&&$(e)}(t)){var se=re(t,q);return"cause"in Error.prototype||!("cause"in t)||_.call(t,"cause")?0===se.length?"["+String(t)+"]":"{ ["+String(t)+"] "+E.call(se,", ")+" }":"{ ["+String(t)+"] "+E.call(F.call("[cause]: "+q(t.cause),se),", ")+" }"}if("object"==typeof t&&h){if(N&&"function"==typeof t[N]&&z)return z(t,{depth:j-i});if("symbol"!==h&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!o||!e||"object"!=typeof e)return!1;try{o.call(e);try{l.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var le=[];return a&&a.call(t,function(e,r){le.push(q(r,t,!0)+" => "+q(e,t))}),ee("Map",o.call(t),le,R)}if(function(e){if(!l||!e||"object"!=typeof e)return!1;try{l.call(e);try{o.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var ce=[];return c&&c.call(t,function(e){ce.push(q(e,t))}),ee("Set",l.call(t),ce,R)}if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{d.call(e,d);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return X("WeakMap");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{d.call(e,d)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return X("WeakSet");if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{return f.call(e),!0}catch(e){}return!1}(t))return X("WeakRef");if(function(e){return"[object Number]"===Y(e)&&$(e)}(t))return Z(q(Number(t)));if(function(e){if(!e||"object"!=typeof e||!S)return!1;try{return S.call(e),!0}catch(e){}return!1}(t))return Z(q(S.call(t)));if(function(e){return"[object Boolean]"===Y(e)&&$(e)}(t))return Z(y.call(t));if(function(e){return"[object String]"===Y(e)&&$(e)}(t))return Z(q(String(t)));if("undefined"!=typeof window&&t===window)return"{ [object Window] }";if("undefined"!=typeof globalThis&&t===globalThis||void 0!==r.g&&t===r.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===Y(e)&&$(e)}(t)&&!U(t)){var de=re(t,q),pe=P?P(t)===Object.prototype:t instanceof Object||t.constructor===Object,fe=t instanceof Object?"":"null prototype",ye=!pe&&B&&Object(t)===t&&B in t?b.call(Y(t),8,-1):fe?"Object":"",he=(pe||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(ye||fe?"["+E.call(F.call([],ye||[],fe||[]),": ")+"] ":"");return 0===de.length?he+"{}":R?he+"{"+te(de,R)+"}":he+"{ "+E.call(de,", ")+" }"}return String(t)};var H=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return H.call(e,t)}function Y(e){return h.call(e)}function G(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function Q(e,t){if(e.length>t.maxStringLength){var r=e.length-t.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return Q(b.call(e,0,t.maxStringLength),t)+n}var i=q[t.quoteStyle||"single"];return i.lastIndex=0,I(v.call(v.call(e,i,"\\$1"),/[\x00-\x1f]/g,J),"single",t)}function J(e){var t=e.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return r?"\\"+r:"\\x"+(t<16?"0":"")+D.call(t.toString(16))}function Z(e){return"Object("+e+")"}function X(e){return e+" { ? }"}function ee(e,t,r,n){return e+" ("+t+") {"+(n?te(r,n):E.call(r,", "))+"}"}function te(e,t){if(0===e.length)return"";var r="\n"+t.prev+t.base;return r+E.call(e,","+r)+"\n"+t.prev}function re(e,t){var r=W(e),n=[];if(r){n.length=e.length;for(var i=0;i<e.length;i++)n[i]=V(e,i)?t(e[i],e):""}var o,a="function"==typeof j?j(e):[];if(O){o={};for(var u=0;u<a.length;u++)o["$"+a[u]]=a[u]}for(var s in e)V(e,s)&&(r&&String(Number(s))===s&&s<e.length||O&&o["$"+s]instanceof Symbol||(k.call(/[^\w$]/,s)?n.push(t(s,e)+": "+t(e[s],e)):n.push(s+": "+t(e[s],e))));if("function"==typeof j)for(var l=0;l<a.length;l++)_.call(e,a[l])&&n.push("["+t(a[l])+"]: "+t(e[a[l]],e));return n}},9655:function(e,t,r){var n;e=r.nmd(e),function(){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof r.g&&r.g;i.global!==i&&i.window!==i&&i.self;var o,a=2147483647,u=36,s=/^xn--/,l=/[^\x20-\x7E]/,c=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},p=Math.floor,f=String.fromCharCode;function y(e){throw new RangeError(d[e])}function h(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function g(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+h((e=e.replace(c,".")).split("."),t).join(".")}function m(e){for(var t,r,n=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(r=e.charCodeAt(i++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),i--):n.push(t);return n}function b(e){return h(e,function(e){var t="";return e>65535&&(t+=f((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=f(e)}).join("")}function v(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:u}function D(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,r){var n=0;for(e=r?p(e/700):e>>1,e+=p(e/t);e>455;n+=u)e=p(e/35);return p(n+36*e/(e+38))}function k(e){var t,r,n,i,o,s,l,c,d,f,h=[],g=e.length,m=0,D=128,k=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n<r;++n)e.charCodeAt(n)>=128&&y("not-basic"),h.push(e.charCodeAt(n));for(i=r>0?r+1:0;i<g;){for(o=m,s=1,l=u;i>=g&&y("invalid-input"),((c=v(e.charCodeAt(i++)))>=u||c>p((a-m)/s))&&y("overflow"),m+=c*s,!(c<(d=l<=k?1:l>=k+26?26:l-k));l+=u)s>p(a/(f=u-d))&&y("overflow"),s*=f;k=w(m-o,t=h.length+1,0==o),p(m/t)>a-D&&y("overflow"),D+=p(m/t),m%=t,h.splice(m++,0,D)}return b(h)}function F(e){var t,r,n,i,o,s,l,c,d,h,g,b,v,k,F,E=[];for(b=(e=m(e)).length,t=128,r=0,o=72,s=0;s<b;++s)(g=e[s])<128&&E.push(f(g));for(n=i=E.length,i&&E.push("-");n<b;){for(l=a,s=0;s<b;++s)(g=e[s])>=t&&g<l&&(l=g);for(l-t>p((a-r)/(v=n+1))&&y("overflow"),r+=(l-t)*v,t=l,s=0;s<b;++s)if((g=e[s])<t&&++r>a&&y("overflow"),g==t){for(c=r,d=u;!(c<(h=d<=o?1:d>=o+26?26:d-o));d+=u)F=c-h,k=u-h,E.push(f(D(h+F%k,0))),c=p(F/k);E.push(f(D(c,0))),o=w(r,v,n==i),r=0,++n}++r,++t}return E.join("")}o={version:"1.4.1",ucs2:{decode:m,encode:b},decode:k,encode:F,toASCII:function(e){return g(e,function(e){return l.test(e)?"xn--"+F(e):e})},toUnicode:function(e){return g(e,function(e){return s.test(e)?k(e.slice(4).toLowerCase()):e})}},void 0===(n=function(){return o}.call(t,r,t,e))||(e.exports=n)}()},4765:function(e){"use strict";var t=String.prototype.replace,r=/%20/g,n="RFC1738",i="RFC3986";e.exports={default:i,formatters:{RFC1738:function(e){return t.call(e,r,"+")},RFC3986:function(e){return String(e)}},RFC1738:n,RFC3986:i}},5373:function(e,t,r){"use strict";var n=r(8636),i=r(2642),o=r(4765);e.exports={formats:o,parse:i,stringify:n}},2642:function(e,t,r){"use strict";var n=r(7720),i=Object.prototype.hasOwnProperty,o=Array.isArray,a={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:n.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictMerge:!0,strictNullHandling:!1,throwOnLimitExceeded:!1},u=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},s=function(e,t,r){if(e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1)return e.split(",");if(t.throwOnLimitExceeded&&r>=t.arrayLimit)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(1===t.arrayLimit?"":"s")+" allowed in an array.");return e},l=function(e,t,r,o){if(e){var a=function(e,t){var r=t.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e;if(t.depth<=0){if(!t.plainObjects&&i.call(Object.prototype,r)&&!t.allowPrototypes)return;return[r]}var n=[],o=r.indexOf("["),a=o>=0?r.slice(0,o):r;if(a){if(!t.plainObjects&&i.call(Object.prototype,a)&&!t.allowPrototypes)return;n[n.length]=a}for(var u=r.length,s=o,l=0;s>=0&&l<t.depth;){for(var c=1,d=s+1,p=-1;d<u&&p<0;){var f=r.charCodeAt(d);91===f?c+=1:93===f&&0==(c-=1)&&(p=d),d+=1}if(p<0)return n[n.length]="["+r.slice(s)+"]",n;var y=r.slice(s,p+1),h=y.slice(1,-1);if(!t.plainObjects&&i.call(Object.prototype,h)&&!t.allowPrototypes)return;n[n.length]=y,l+=1,s=r.indexOf("[",p+1)}if(s>=0){if(!0===t.strictDepth)throw new RangeError("Input depth exceeded depth option of "+t.depth+" and strictDepth is true");n[n.length]="["+r.slice(s)+"]"}return n}(e,r);if(a)return function(e,t,r,i){var o=0;if(e.length>0&&"[]"===e[e.length-1]){var a=e.slice(0,-1).join("");o=Array.isArray(t)&&t[a]?t[a].length:0}for(var u=i?t:s(t,r,o),l=e.length-1;l>=0;--l){var c,d=e[l];if("[]"===d&&r.parseArrays)c=n.isOverflow(u)?u:r.allowEmptyArrays&&(""===u||r.strictNullHandling&&null===u)?[]:n.combine([],u,r.arrayLimit,r.plainObjects);else{c=r.plainObjects?{__proto__:null}:{};var p="["===d.charAt(0)&&"]"===d.charAt(d.length-1)?d.slice(1,-1):d,f=r.decodeDotInKeys?p.replace(/%2E/g,"."):p,y=parseInt(f,10),h=!isNaN(y)&&d!==f&&String(y)===f&&y>=0&&r.parseArrays;if(r.parseArrays||""!==f)if(h&&y<r.arrayLimit)(c=[])[y]=u;else{if(h&&r.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+r.arrayLimit+" element"+(1===r.arrayLimit?"":"s")+" allowed in an array.");h?(c[y]=u,n.markOverflow(c,y)):"__proto__"!==f&&(c[f]=u)}else c={0:u}}u=c}return u}(a,t,r,o)}};e.exports=function(e,t){var r=function(e){if(!e)return a;if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.decodeDotInKeys&&"boolean"!=typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");if(void 0!==e.throwOnLimitExceeded&&"boolean"!=typeof e.throwOnLimitExceeded)throw new TypeError("`throwOnLimitExceeded` option must be a boolean");var t=void 0===e.charset?a.charset:e.charset,r=void 0===e.duplicates?a.duplicates:e.duplicates;if("combine"!==r&&"first"!==r&&"last"!==r)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:void 0===e.allowDots?!0===e.decodeDotInKeys||a.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:a.allowEmptyArrays,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decodeDotInKeys:"boolean"==typeof e.decodeDotInKeys?e.decodeDotInKeys:a.decodeDotInKeys,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||n.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,duplicates:r,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictDepth:"boolean"==typeof e.strictDepth?!!e.strictDepth:a.strictDepth,strictMerge:"boolean"==typeof e.strictMerge?!!e.strictMerge:a.strictMerge,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling,throwOnLimitExceeded:"boolean"==typeof e.throwOnLimitExceeded&&e.throwOnLimitExceeded}}(t);if(""===e||null==e)return r.plainObjects?{__proto__:null}:{};for(var c="string"==typeof e?function(e,t){var r={__proto__:null},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;l=l.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var c=t.parameterLimit===1/0?void 0:t.parameterLimit,d=l.split(t.delimiter,t.throwOnLimitExceeded&&void 0!==c?c+1:c);if(t.throwOnLimitExceeded&&void 0!==c&&d.length>c)throw new RangeError("Parameter limit exceeded. Only "+c+" parameter"+(1===c?"":"s")+" allowed.");var p,f=-1,y=t.charset;if(t.charsetSentinel)for(p=0;p<d.length;++p)0===d[p].indexOf("utf8=")&&("utf8=%E2%9C%93"===d[p]?y="utf-8":"utf8=%26%2310003%3B"===d[p]&&(y="iso-8859-1"),f=p,p=d.length);for(p=0;p<d.length;++p)if(p!==f){var h,g,m=d[p],b=m.indexOf("]="),v=-1===b?m.indexOf("="):b+1;if(-1===v?(h=t.decoder(m,a.decoder,y,"key"),g=t.strictNullHandling?null:""):null!==(h=t.decoder(m.slice(0,v),a.decoder,y,"key"))&&(g=n.maybeMap(s(m.slice(v+1),t,o(r[h])?r[h].length:0),function(e){return t.decoder(e,a.decoder,y,"value")})),g&&t.interpretNumericEntities&&"iso-8859-1"===y&&(g=u(String(g))),m.indexOf("[]=")>-1&&(g=o(g)?[g]:g),t.comma&&o(g)&&g.length>t.arrayLimit){if(t.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(1===t.arrayLimit?"":"s")+" allowed in an array.");g=n.combine([],g,t.arrayLimit,t.plainObjects)}if(null!==h){var D=i.call(r,h);D&&("combine"===t.duplicates||m.indexOf("[]=")>-1)?r[h]=n.combine(r[h],g,t.arrayLimit,t.plainObjects):D&&"last"!==t.duplicates||(r[h]=g)}}return r}(e,r):e,d=r.plainObjects?{__proto__:null}:{},p=Object.keys(c),f=0;f<p.length;++f){var y=p[f],h=l(y,c[y],r,"string"==typeof e);d=n.merge(d,h,r)}return!0===r.allowSparse?d:n.compact(d)}},8636:function(e,t,r){"use strict";var n=r(920),i=r(7720),o=r(4765),a=Object.prototype.hasOwnProperty,u={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},s=Array.isArray,l=Array.prototype.push,c=function(e,t){l.apply(e,s(t)?t:[t])},d=Date.prototype.toISOString,p=o.default,f={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:i.encode,encodeValuesOnly:!1,filter:void 0,format:p,formatter:o.formatters[p],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},y={},h=function e(t,r,o,a,u,l,d,p,h,g,m,b,v,D,w,k,F,E){for(var A,C=t,S=E,j=0,x=!1;void 0!==(S=S.get(y))&&!x;){var O=S.get(t);if(j+=1,void 0!==O){if(O===j)throw new RangeError("Cyclic object value");x=!0}void 0===S.get(y)&&(j=0)}if("function"==typeof g?C=g(r,C):C instanceof Date?C=v(C):"comma"===o&&s(C)&&(C=i.maybeMap(C,function(e){return e instanceof Date?v(e):e})),null===C){if(l)return w(h&&!k?h(r,f.encoder,F,"key",D):r);C=""}if("string"==typeof(A=C)||"number"==typeof A||"boolean"==typeof A||"symbol"==typeof A||"bigint"==typeof A||i.isBuffer(C))return h?[w(k?r:h(r,f.encoder,F,"key",D))+"="+w(h(C,f.encoder,F,"value",D))]:[w(r)+"="+w(String(C))];var B,_=[];if(void 0===C)return _;if("comma"===o&&s(C))k&&h&&(C=i.maybeMap(C,function(e){return null==e?e:h(e)})),B=[{value:C.length>0?C.join(",")||null:void 0}];else if(s(g))B=g;else{var P=Object.keys(C);B=m?P.sort(m):P}var T=p?String(r).replace(/\./g,"%2E"):String(r),z=a&&s(C)&&1===C.length?T+"[]":T;if(u&&s(C)&&0===C.length)return z+"[]";for(var R=0;R<B.length;++R){var N=B[R],M="object"==typeof N&&N&&void 0!==N.value?N.value:C[N];if(!d||null!==M){var q=b&&p?String(N).replace(/\./g,"%2E"):String(N),I=s(C)?"function"==typeof o?o(z,q):z:z+(b?"."+q:"["+q+"]");E.set(t,j);var L=n();L.set(y,E),c(_,e(M,I,o,a,u,l,d,p,"comma"===o&&k&&s(C)?null:h,g,m,b,v,D,w,k,F,L))}}return _};e.exports=function(e,t){var r,i=e,l=function(e){if(!e)return f;if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||f.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var r=o.default;if(void 0!==e.format){if(!a.call(o.formatters,e.format))throw new TypeError("Unknown format option provided.");r=e.format}var n,i=o.formatters[r],l=f.filter;if(("function"==typeof e.filter||s(e.filter))&&(l=e.filter),n=e.arrayFormat in u?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":f.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var c=void 0===e.allowDots?!0===e.encodeDotInKeys||f.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:f.addQueryPrefix,allowDots:c,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:f.allowEmptyArrays,arrayFormat:n,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:f.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?f.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:f.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:f.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:f.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:f.encodeValuesOnly,filter:l,format:r,formatter:i,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:f.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:f.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:f.strictNullHandling}}(t);"function"==typeof l.filter?i=(0,l.filter)("",i):s(l.filter)&&(r=l.filter);var d=[];if("object"!=typeof i||null===i)return"";var p=u[l.arrayFormat],y="comma"===p&&l.commaRoundTrip;r||(r=Object.keys(i)),l.sort&&r.sort(l.sort);for(var g=n(),m=0;m<r.length;++m){var b=r[m];if(null!=b){var v=i[b];l.skipNulls&&null===v||c(d,h(v,b,p,y,l.allowEmptyArrays,l.strictNullHandling,l.skipNulls,l.encodeDotInKeys,l.encode?l.encoder:null,l.filter,l.sort,l.allowDots,l.serializeDate,l.format,l.formatter,l.encodeValuesOnly,l.charset,g))}}var D=d.join(l.delimiter),w=!0===l.addQueryPrefix?"?":"";return l.charsetSentinel&&("iso-8859-1"===l.charset?w+="utf8=%26%2310003%3B"+l.delimiter:w+="utf8=%E2%9C%93"+l.delimiter),D.length>0?w+D:""}},7720:function(e,t,r){"use strict";var n=r(4765),i=r(920),o=Object.prototype.hasOwnProperty,a=Array.isArray,u=i(),s=function(e,t){return u.set(e,t),e},l=function(e){return u.has(e)},c=function(e){return u.get(e)},d=function(e,t){u.set(e,t)},p=function(){for(var e=[],t=0;t<256;++t)e[e.length]="%"+((t<16?"0":"")+t.toString(16)).toUpperCase();return e}(),f=function(e,t){for(var r=t&&t.plainObjects?{__proto__:null}:{},n=0;n<e.length;++n)void 0!==e[n]&&(r[n]=e[n]);return r},y=1024;e.exports={arrayToObject:f,assign:function(e,t){return Object.keys(t).reduce(function(e,r){return e[r]=t[r],e},e)},combine:function(e,t,r,n){if(l(e)){var i=c(e)+1;return e[i]=t,d(e,i),e}var o=[].concat(e,t);return o.length>r?s(f(o,{plainObjects:n}),o.length-1):o},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],n=0;n<t.length;++n)for(var i=t[n],o=i.obj[i.prop],u=Object.keys(o),s=0;s<u.length;++s){var l=u[s],c=o[l];"object"==typeof c&&null!==c&&-1===r.indexOf(c)&&(t[t.length]={obj:o,prop:l},r[r.length]=c)}return function(e){for(;e.length>1;){var t=e.pop(),r=t.obj[t.prop];if(a(r)){for(var n=[],i=0;i<r.length;++i)void 0!==r[i]&&(n[n.length]=r[i]);t.obj[t.prop]=n}}}(t),e},decode:function(e,t,r){var n=e.replace(/\+/g," ");if("iso-8859-1"===r)return n.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(n)}catch(e){return n}},encode:function(e,t,r,i,o){if(0===e.length)return e;var a=e;if("symbol"==typeof e?a=Symbol.prototype.toString.call(e):"string"!=typeof e&&(a=String(e)),"iso-8859-1"===r)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"});for(var u="",s=0;s<a.length;s+=y){for(var l=a.length>=y?a.slice(s,s+y):a,c=[],d=0;d<l.length;++d){var f=l.charCodeAt(d);45===f||46===f||95===f||126===f||f>=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||o===n.RFC1738&&(40===f||41===f)?c[c.length]=l.charAt(d):f<128?c[c.length]=p[f]:f<2048?c[c.length]=p[192|f>>6]+p[128|63&f]:f<55296||f>=57344?c[c.length]=p[224|f>>12]+p[128|f>>6&63]+p[128|63&f]:(d+=1,f=65536+((1023&f)<<10|1023&l.charCodeAt(d)),c[c.length]=p[240|f>>18]+p[128|f>>12&63]+p[128|f>>6&63]+p[128|63&f])}u+=c.join("")}return u},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isOverflow:l,isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},markOverflow:s,maybeMap:function(e,t){if(a(e)){for(var r=[],n=0;n<e.length;n+=1)r[r.length]=t(e[n]);return r}return t(e)},merge:function e(t,r,n){if(!r)return t;if("object"!=typeof r&&"function"!=typeof r){if(a(t)){var i=t.length;if(n&&"number"==typeof n.arrayLimit&&i>n.arrayLimit)return s(f(t.concat(r),n),i);t[i]=r}else{if(!t||"object"!=typeof t)return[t,r];if(l(t)){var u=c(t)+1;t[u]=r,d(t,u)}else{if(n&&n.strictMerge)return[t,r];(n&&(n.plainObjects||n.allowPrototypes)||!o.call(Object.prototype,r))&&(t[r]=!0)}}return t}if(!t||"object"!=typeof t){if(l(r)){for(var p=Object.keys(r),y=n&&n.plainObjects?{__proto__:null,0:t}:{0:t},h=0;h<p.length;h++){y[parseInt(p[h],10)+1]=r[p[h]]}return s(y,c(r)+1)}var g=[t].concat(r);return n&&"number"==typeof n.arrayLimit&&g.length>n.arrayLimit?s(f(g,n),g.length-1):g}var m=t;return a(t)&&!a(r)&&(m=f(t,n)),a(t)&&a(r)?(r.forEach(function(r,i){if(o.call(t,i)){var a=t[i];a&&"object"==typeof a&&r&&"object"==typeof r?t[i]=e(a,r,n):t[t.length]=r}else t[i]=r}),t):Object.keys(r).reduce(function(t,i){var a=r[i];if(o.call(t,i)?t[i]=e(t[i],a,n):t[i]=a,l(r)&&!l(t)&&s(t,c(r)),l(t)){var u=parseInt(i,10);String(u)===i&&u>=0&&u>c(t)&&d(t,u)}return t},m)}}},7172:function(e,t,r){e.exports={labels:r(7674),scoringStrategy:r(4283)}},4283:function(e,t,r){var n=r(3502);e.exports={apply:function(e,t,r){if(t>0){var i=e[t-1];n[i]&&(r=-r)}return r}}},3335:function(e,t,r){var n={"./en/index":7172};function i(e){var t=o(e);return r(t)}function o(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}i.keys=function(){return Object.keys(n)},i.resolve=o,e.exports=i,i.id=3335},362:function(e,t,r){var n=r(8325),i=r(787),o=function(e){this.options=e};o.prototype.registerLanguage=function(e,t){i.addLanguage(e,t)},o.prototype.analyze=function(e,t,r){void 0===e&&(e=""),"function"==typeof t&&(r=t,t={});var o=(t=t||{}).language||"en",a=i.getLabels(o);"object"==typeof t.extras&&(a=Object.assign(a,t.extras));for(var u=n(e),s=0,l=[],c=[],d=[],p=[],f=u.length;f--;){var y=u[f];if(a.hasOwnProperty(y)){l.push(y);var h=a[y];(h=i.applyScoringStrategy(o,u,f,h))>0&&c.push(y),h<0&&d.push(y),s+=h;var g={};g[y]=h,p.push(g)}}var m={score:s,comparative:u.length>0?s/u.length:0,calculation:p,tokens:u,words:l,positive:c,negative:d};if("function"!=typeof r)return m;process.nextTick(function(){r(null,m)})},e.exports=o},787:function(e,t,r){var n=r(8864),i=r(7172);Object.assign(i.labels,n);var o={en:i};e.exports={addLanguage:function(e,t){if(!t.labels)throw new Error("language.labels must be defined!");Object.assign(t.labels,n),o[e]=t},getLanguage:function(e){if(!e)return o.en;if(!o[e])try{var t=r(3335)("./"+e+"/index");this.addLanguage(e,t)}catch(t){throw new Error("No language found: "+e)}return o[e]},getLabels:function(e){return this.getLanguage(e).labels},applyScoringStrategy:function(e,t,r,n){return(this.getLanguage(e).scoringStrategy||a).apply(t,r,n)}};var a={apply:function(e,t,r){return r}}},8325:function(e){e.exports=function(e){return e.toLowerCase().replace(/\n/g," ").replace(/[.,\/#!?$%\^&\*;:{}=_`\"~()]/g," ").replace(/\s\s+/g," ").trim().split(" ")}},4803:function(e,t,r){"use strict";var n=r(8859),i=r(9675),o=function(e,t,r){for(var n,i=e;null!=(n=i.next);i=n)if(n.key===t)return i.next=n.next,r||(n.next=e.next,e.next=n),n};e.exports=function(){var e,t={assert:function(e){if(!t.has(e))throw new i("Side channel does not contain "+n(e))},delete:function(t){var r=function(e,t){if(e)return o(e,t,!0)}(e,t);return r&&e&&!e.next&&(e=void 0),!!r},get:function(t){return function(e,t){if(e){var r=o(e,t);return r&&r.value}}(e,t)},has:function(t){return function(e,t){return!!e&&!!o(e,t)}(e,t)},set:function(t,r){e||(e={next:void 0}),function(e,t,r){var n=o(e,t);n?n.value=r:e.next={key:t,next:e.next,value:r}}(e,t,r)}};return t}},507:function(e,t,r){"use strict";var n=r(453),i=r(6556),o=r(8859),a=r(9675),u=n("%Map%",!0),s=i("Map.prototype.get",!0),l=i("Map.prototype.set",!0),c=i("Map.prototype.has",!0),d=i("Map.prototype.delete",!0),p=i("Map.prototype.size",!0);e.exports=!!u&&function(){var e,t={assert:function(e){if(!t.has(e))throw new a("Side channel does not contain "+o(e))},delete:function(t){if(e){var r=d(e,t);return 0===p(e)&&(e=void 0),r}return!1},get:function(t){if(e)return s(e,t)},has:function(t){return!!e&&c(e,t)},set:function(t,r){e||(e=new u),l(e,t,r)}};return t}},2271:function(e,t,r){"use strict";var n=r(453),i=r(6556),o=r(8859),a=r(507),u=r(9675),s=n("%WeakMap%",!0),l=i("WeakMap.prototype.get",!0),c=i("WeakMap.prototype.set",!0),d=i("WeakMap.prototype.has",!0),p=i("WeakMap.prototype.delete",!0);e.exports=s?function(){var e,t,r={assert:function(e){if(!r.has(e))throw new u("Side channel does not contain "+o(e))},delete:function(r){if(s&&r&&("object"==typeof r||"function"==typeof r)){if(e)return p(e,r)}else if(a&&t)return t.delete(r);return!1},get:function(r){return s&&r&&("object"==typeof r||"function"==typeof r)&&e?l(e,r):t&&t.get(r)},has:function(r){return s&&r&&("object"==typeof r||"function"==typeof r)&&e?d(e,r):!!t&&t.has(r)},set:function(r,n){s&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new s),c(e,r,n)):a&&(t||(t=a()),t.set(r,n))}};return r}:a},920:function(e,t,r){"use strict";var n=r(9675),i=r(8859),o=r(4803),a=r(507),u=r(2271)||a||o;e.exports=function(){var e,t={assert:function(e){if(!t.has(e)){var r=e&&Object(e)===e?"the given object key":i(e);throw new n("Side channel does not contain "+r)}},delete:function(t){return!!e&&e.delete(t)},get:function(t){return e&&e.get(t)},has:function(t){return!!e&&e.has(t)},set:function(t,r){e||(e=u()),e.set(t,r)}};return t}},8835:function(e,t,r){"use strict";var n=r(9655);function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var o=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,u=/^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/,s=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(s),c=["%","/","?",";","#"].concat(l),d=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,f=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,y={javascript:!0,"javascript:":!0},h={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},m=r(5373);function b(e,t,r){if(e&&"object"==typeof e&&e instanceof i)return e;var n=new i;return n.parse(e,t,r),n}i.prototype.parse=function(e,t,r){if("string"!=typeof e)throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),a=-1!==i&&i<e.indexOf("#")?"?":"#",s=e.split(a);s[0]=s[0].replace(/\\/g,"/");var b=e=s.join(a);if(b=b.trim(),!r&&1===e.split("#").length){var v=u.exec(b);if(v)return this.path=b,this.href=b,this.pathname=v[1],v[2]?(this.search=v[2],this.query=t?m.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var D=o.exec(b);if(D){var w=(D=D[0]).toLowerCase();this.protocol=w,b=b.substr(D.length)}if(r||D||b.match(/^\/\/[^@/]+@[^@/]+/)){var k="//"===b.substr(0,2);!k||D&&h[D]||(b=b.substr(2),this.slashes=!0)}if(!h[D]&&(k||D&&!g[D])){for(var F,E,A=-1,C=0;C<d.length;C++){-1!==(S=b.indexOf(d[C]))&&(-1===A||S<A)&&(A=S)}-1!==(E=-1===A?b.lastIndexOf("@"):b.lastIndexOf("@",A))&&(F=b.slice(0,E),b=b.slice(E+1),this.auth=decodeURIComponent(F)),A=-1;for(C=0;C<c.length;C++){var S;-1!==(S=b.indexOf(c[C]))&&(-1===A||S<A)&&(A=S)}-1===A&&(A=b.length),this.host=b.slice(0,A),b=b.slice(A),this.parseHost(),this.hostname=this.hostname||"";var j="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!j)for(var x=this.hostname.split(/\./),O=(C=0,x.length);C<O;C++){var B=x[C];if(B&&!B.match(p)){for(var _="",P=0,T=B.length;P<T;P++)B.charCodeAt(P)>127?_+="x":_+=B[P];if(!_.match(p)){var z=x.slice(0,C),R=x.slice(C+1),N=B.match(f);N&&(z.push(N[1]),R.unshift(N[2])),R.length&&(b="/"+R.join(".")+b),this.hostname=z.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),j||(this.hostname=n.toASCII(this.hostname));var M=this.port?":"+this.port:"",q=this.hostname||"";this.host=q+M,this.href+=this.host,j&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!y[w])for(C=0,O=l.length;C<O;C++){var I=l[C];if(-1!==b.indexOf(I)){var L=encodeURIComponent(I);L===I&&(L=escape(I)),b=b.split(I).join(L)}}var $=b.indexOf("#");-1!==$&&(this.hash=b.substr($),b=b.slice(0,$));var W=b.indexOf("?");if(-1!==W?(this.search=b.substr(W),this.query=b.substr(W+1),t&&(this.query=m.parse(this.query)),b=b.slice(0,W)):t&&(this.search="",this.query={}),b&&(this.pathname=b),g[w]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){M=this.pathname||"";var U=this.search||"";this.path=M+U}return this.href=this.format(),this},i.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",i=!1,o="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&"object"==typeof this.query&&Object.keys(this.query).length&&(o=m.stringify(this.query,{arrayFormat:"repeat",addQueryPrefix:!1}));var a=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==i?(i="//"+(i||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):i||(i=""),n&&"#"!==n.charAt(0)&&(n="#"+n),a&&"?"!==a.charAt(0)&&(a="?"+a),t+i+(r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(a=a.replace("#","%23"))+n},i.prototype.resolve=function(e){return this.resolveObject(b(e,!1,!0)).format()},i.prototype.resolveObject=function(e){if("string"==typeof e){var t=new i;t.parse(e,!1,!0),e=t}for(var r=new i,n=Object.keys(this),o=0;o<n.length;o++){var a=n[o];r[a]=this[a]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var u=Object.keys(e),s=0;s<u.length;s++){var l=u[s];"protocol"!==l&&(r[l]=e[l])}return g[r.protocol]&&r.hostname&&!r.pathname&&(r.pathname="/",r.path=r.pathname),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!g[e.protocol]){for(var c=Object.keys(e),d=0;d<c.length;d++){var p=c[d];r[p]=e[p]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||h[e.protocol])r.pathname=e.pathname;else{for(var f=(e.pathname||"").split("/");f.length&&!(e.host=f.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==f[0]&&f.unshift(""),f.length<2&&f.unshift(""),r.pathname=f.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var y=r.pathname||"",m=r.search||"";r.path=y+m}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var b=r.pathname&&"/"===r.pathname.charAt(0),v=e.host||e.pathname&&"/"===e.pathname.charAt(0),D=v||b||r.host&&e.pathname,w=D,k=r.pathname&&r.pathname.split("/")||[],F=(f=e.pathname&&e.pathname.split("/")||[],r.protocol&&!g[r.protocol]);if(F&&(r.hostname="",r.port=null,r.host&&(""===k[0]?k[0]=r.host:k.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===f[0]?f[0]=e.host:f.unshift(e.host)),e.host=null),D=D&&(""===f[0]||""===k[0])),v)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,k=f;else if(f.length)k||(k=[]),k.pop(),k=k.concat(f),r.search=e.search,r.query=e.query;else if(null!=e.search){if(F)r.host=k.shift(),r.hostname=r.host,(j=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=j.shift(),r.hostname=j.shift(),r.host=r.hostname);return r.search=e.search,r.query=e.query,null===r.pathname&&null===r.search||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!k.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var E=k.slice(-1)[0],A=(r.host||e.host||k.length>1)&&("."===E||".."===E)||""===E,C=0,S=k.length;S>=0;S--)"."===(E=k[S])?k.splice(S,1):".."===E?(k.splice(S,1),C++):C&&(k.splice(S,1),C--);if(!D&&!w)for(;C--;C)k.unshift("..");!D||""===k[0]||k[0]&&"/"===k[0].charAt(0)||k.unshift(""),A&&"/"!==k.join("/").substr(-1)&&k.push("");var j,x=""===k[0]||k[0]&&"/"===k[0].charAt(0);F&&(r.hostname=x?"":k.length?k.shift():"",r.host=r.hostname,(j=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=j.shift(),r.hostname=j.shift(),r.host=r.hostname));return(D=D||r.host&&k.length)&&!x&&k.unshift(""),k.length>0?r.pathname=k.join("/"):(r.pathname=null,r.path=null),null===r.pathname&&null===r.search||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var e=this.host,t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){return"string"==typeof e&&(e=b(e)),e instanceof i?e.format():i.prototype.format.call(e)},t.Url=i},2634:function(){},8864:function(e){"use strict";e.exports=JSON.parse('{"ðŸ˜‚":1,"â�¤":3,"â™¥":3,"ðŸ˜�":3,"ðŸ˜­":-1,"ðŸ˜˜":3,"ðŸ˜Š":3,"ðŸ‘Œ":2,"ðŸ’•":3,"ðŸ‘�":2,"ðŸ˜�":2,"â˜º":3,"â™¡":3,"ðŸ‘�":2,"ðŸ˜©":-2,"ðŸ™�":2,"âœŒ":2,"ðŸ˜�":1,"ðŸ˜‰":2,"ðŸ™Œ":2,"ðŸ™ˆ":2,"ðŸ’ª":2,"ðŸ˜„":2,"ðŸ˜’":-2,"ðŸ’ƒ":3,"ðŸ’–":3,"ðŸ˜ƒ":2,"ðŸ˜”":-1,"ðŸŽ‰":3,"ðŸ˜œ":2,"ðŸŒ¸":3,"ðŸ’œ":3,"ðŸ’™":3,"âœ¨":1,"ðŸ’—":3,"â˜…":1,"â–ˆ":-1,"â˜€":2,"ðŸ˜¡":-1,"ðŸ˜Ž":2,"ðŸ’‹":3,"ðŸ˜‹":3,"ðŸ™Š":2,"ðŸ˜´":-1,"ðŸŽ¶":2,"ðŸ’ž":3,"ðŸ˜Œ":2,"ðŸ”«":-1,"ðŸ’›":3,"ðŸ’�":1,"ðŸ’š":3,"â™«":1,"ðŸ˜ž":-1,"ðŸ˜†":2,"ðŸ˜�":2,"ðŸ˜ª":-1,"ðŸ˜«":-1,"ðŸ‘Š":1,"ðŸ’€":-2,"ðŸ˜€":2,"ðŸ˜š":3,"ðŸ˜»":3,"ðŸ’˜":3,"â˜•":1,"ðŸ‘‹":2,"ðŸŽŠ":3,"ðŸ�•":2,"â�„":2,"ðŸ˜•":-2,"ðŸ’”":-1,"ðŸ˜¤":-2,"ðŸ˜ˆ":1,"âœˆ":2,"ðŸ”�":2,"ðŸ˜°":-1,"âš½":3,"ðŸ˜‘":-2,"ðŸ‘‘":3,"ðŸ‘‰":1,"ðŸ�ƒ":1,"ðŸŽ�":3,"ðŸ˜ ":-2,"ðŸ�§":2,"â˜†":2,"ðŸ�€":1,"ðŸŽˆ":3,"ðŸŽ…":1,"ðŸ˜“":-1,"ðŸ˜£":-2,"ðŸ˜�":-2,"âœŠ":2,"ðŸ˜¨":-1,"ðŸ˜–":-1,"ðŸ’¤":1,"ðŸ’“":3,"ðŸ‘Ž":-1,"ðŸ’¦":2,"âœ”":1,"ðŸ˜·":-1,"ðŸ™‹":2,"ðŸŽ„":2,"ðŸ’©":-1,"ðŸŽµ":2,"ðŸ˜›":3,"ðŸ‘¯":2,"ðŸ’Ž":2,"ðŸŒ¿":1,"ðŸŽ‚":3,"ðŸŒŸ":1,"ðŸ”®":1,"ðŸ‘«":1,"ðŸ�†":3,"âœ–":1,"â˜�":1,"ðŸ˜™":3,"â›„":2,"ðŸ‘…":2,"â™ª":2,"ðŸ�‚":2,"ðŸ’�":1,"ðŸŒ´":2,"ðŸ‘ˆ":2,"ðŸŒ¹":3,"ðŸ™†":2,"ðŸ‘»":1,"ðŸ’°":1,"ðŸ�»":2,"ðŸ™…":-2,"ðŸŒž":2,"ðŸ��":2,"â­�":2,"â–ª":1,"ðŸŽ€":3,"ðŸ�·":1,"ðŸ™‰":1,"ðŸŒº":2,"ðŸ’…":1,"ðŸ�¶":2,"ðŸŒš":2,"ðŸ‘½":1,"ðŸŽ¤":2,"ðŸ‘­":2,"ðŸŽ§":2,"ðŸ‘†":1,"ðŸ�¸":2,"ðŸ�·":2,"Â®":1,"ðŸ�‰":3,"ðŸ˜‡":3,"ðŸ�ƒ":2,"ðŸ˜¿":-2,"â”‚":1,"ðŸ�º":2,"â–¶":1,"ðŸ˜²":-1,"ðŸŽ¸":2,"ðŸ�¹":3,"ðŸ’«":2,"ðŸ“š":1,"ðŸ˜¶":-1,"ðŸŒ·":2,"ðŸ’�":3,"ðŸ’¨":1,"ðŸ�ˆ":2,"ðŸ’�":2,"â˜”":1,"ðŸ‘¸":3,"ðŸ‡ª":3,"â–‘":-1,"ðŸ�©":1,"ðŸ‘¾":1,"â˜�":1,"ðŸŒ»":2,"â†¿":3,"ðŸ�¯":2,"ðŸ‘¼":1,"ðŸ�”":1,"ðŸ˜¸":2,"ðŸ‘¶":2,"â†¾":3,"ðŸ’�":3,"ðŸŒŠ":2,"ðŸ�¦":2,"ðŸ�“":3,"ðŸ‘‡":1,"ðŸ’†":1,"ðŸ�´":2,"ðŸ˜§":-1,"ðŸ‡¸":2,"ðŸ˜®":1,"ðŸš«":-3,"ðŸ˜½":2,"ðŸŒˆ":2,"ðŸ™€":1,"âš ":-1,"ðŸŽ®":2,"â•¯":-1,"ðŸ�†":2,"ðŸ�°":2,"âœ“":1,"ðŸ‘�":-1,"ðŸ�Ÿ":1,"ðŸ�Œ":2,"ðŸ’‘":3,"ðŸ‘¬":-1,"ðŸ�£":2,"ðŸŽƒ":3,"â–¬":2,"ï¿¼":-3,"ðŸ�¾":3,"ðŸŽ“":2,"ðŸ�Š":2,"ðŸ“·":2,"ðŸ‘„":2,"ðŸŒ¼":4,"ðŸš¶":-1,"ðŸ�±":2,"ðŸ�¸":-1,"ðŸ‡º":2,"ðŸ‘¿":-3,"ðŸš¬":2,"âœ¿":1,"ðŸ�’":2,"ðŸŒ�":3,"â”Š":5,"ðŸ�¥":3,"ðŸ�¼":1,"ðŸŽ¥":1,"ðŸ’„":2,"â›”":2,"ðŸ�€":1,"ðŸ’‰":1,"ðŸ’Ÿ":3,"ðŸš—":1,"ðŸ“�":1,"â™¦":2,"ðŸ’­":1,"ðŸŒ™":3,"ðŸ�Ÿ":3,"ðŸ‘£":1,"âœ‚":-3,"ðŸ—¿":2,"ðŸ‘ª":-1,"ðŸ�­":1,"ðŸŒƒ":2,"â�Œ":1,"ðŸ�°":3,"ðŸ’Š":2,"ðŸš¨":3,"ðŸ˜¦":-2,"ðŸ�ª":1,"ðŸ�£":-2,"âœ§":1,"ðŸŽ†":3,"ðŸŽŽ":4,"ðŸ‡©":3,"âœ…":2,"ðŸ“±":1,"ðŸ™�":-2,"ðŸ�‘":1,"ðŸŽ¼":1,"ðŸ”Š":2,"ðŸŒŒ":2,"ðŸ�Ž":1,"ðŸ�»":2,"â•°":-1,"ðŸ’‡":1,"â™¬":1,"ðŸ”´":2,"ðŸ�±":-2,"ðŸ�Š":2,"ðŸ�’":1,"ðŸ�­":3,"ðŸ‘Ÿ":2,"ðŸŒŽ":1,"ðŸ��":2,"ðŸ�®":3,"ðŸ“²":1,"â˜¼":1,"ðŸŒ…":1,"ðŸ‡·":3,"ðŸ‘ ":1,"ðŸŒ½":2,"ðŸ’§":-1,"ðŸ�¬":1,"ðŸ˜º":2,"ðŸš€":2,"Â¦":3,"ðŸ’¢":1,"ðŸŽ¬":1,"ðŸ�§":1,"ðŸ�œ":2,"ðŸ��":3,"ðŸ�„":2,"âž¤":1,"â¬†":1,"ðŸ�‹":1,"ðŸ†—":2,"âšª":2,"ðŸ“º":2,"ðŸ�…":1,"â›…":2,"ðŸ�¢":1,"ðŸ‘™":2,"ðŸ�¡":2,"ðŸŒ¾":2,"â—‰":1,"âœ�":1,"ðŸ�¬":2,"ðŸ‡¹":3,"â™£":1,"ðŸ��":1,"ðŸŒ�":1,"ðŸ‡®":3,"ðŸ”‹":-3,"ðŸ��":1,"â™”":2,"ðŸ”µ":1,"ðŸ˜¾":-2,"ðŸŒ•":3,"ðŸ�¨":2,"ðŸ”�":1,"ðŸ’¿":3,"ðŸŒ³":2,"ðŸ‘°":2,"â�€":2,"âš“":3,"ðŸš´":3,"â–€":-1,"ðŸ‘—":1,"âž•":2,"ðŸ’¬":2,"â–’":-1,"ðŸ”œ":1,"ðŸ�¨":1,"ðŸ’²":1,"ðŸ�™":1,"ðŸ�¥":-4,"â–¸":1,"â™›":1,"ðŸ˜¼":1,"ðŸ�™":2,"ðŸ‘¨":2,"ðŸ�š":2,"â™¨":4,"ðŸŽ¹":1,"â™•":2,"â–ƒ":5,"ðŸ‡¬":1,"ðŸ‡§":1,"â˜ ":-1,"ðŸ� ":2,"ðŸš¹":3,"ðŸ’µ":2,"âœ°":4,"â• ":1,"ðŸ‘›":2,"ðŸŒ±":3,"ðŸ’»":1,"ðŸŒ�":1,"â–„":-1,"ðŸ‘“":1,"â—„":1,"âš¾":-1,"ðŸŒ²":2,"ðŸ‘´":1,"ðŸ� ":2,"ðŸ�‡":1,"ðŸ�˜":2,"ðŸ�‡":1,"ðŸ”ž":-1,"ðŸ‘µ":2,"â—€":1,"ðŸ”™":1,"ðŸŒµ":1,"ðŸ�®":-1,"ðŸŽ‡":3,"ðŸ�Ž":2,"âž”":-1,"ðŸ�¤":2,"â•©":1,"ðŸŒ‘":2,"ðŸš²":2,"ðŸ�‘":-1,"ðŸ��":2,"ðŸŽ¾":3,"â•š":1,"ðŸˆ¹":1,"ðŸ‘®":-2,"â˜¹":-3,"ðŸ�µ":2,"âœª":1,"â—•":2,"ðŸ—¼":3,"â–�":-1,"â™ ":1,"â”³":-2,"ðŸ‘º":-2,"ðŸ�š":1,"ðŸ‘‚":-1,"ðŸ—½":1,"ðŸ�µ":2,"ðŸ†’":2,"ðŸ�º":1,"â‡¨":2,"ðŸŒ“":3,"ðŸ”’":1,"â•¬":-1,"ðŸ‘³":3,"ðŸŒ‚":1,"ðŸšŒ":1,"â™©":3,"ðŸ�¡":-1,"â�¥":1,"ðŸŽ¡":1,"ðŸ’Œ":2,"ðŸ�©":2,"ðŸŒœ":2,"âŒš":1,"ðŸš¿":3,"ðŸ”†":3,"ðŸŒ›":3,"ðŸ’‚":-1,"ðŸ�”":1,"ðŸ™Ž":-1,"ðŸ�©":2,"ðŸ‡«":2,"ðŸ”¨":-1,"ðŸ“¢":2,"ðŸ�¦":2,"ðŸ�²":-1,"â™»":2,"ðŸŒ˜":3,"ðŸŒ”":3,"ðŸ‘–":2,"ðŸ˜—":3,"ðŸ�„":1,"â—Ÿ":-1,"ðŸ�¢":-1,"ðŸŽ¨":1,"â¬‡":2,"ðŸš¼":3,"ðŸ‡´":2,"ðŸŒ—":3,"ðŸŒ–":3,"ðŸ”…":5,"ðŸ‘œ":1,"ðŸ�Œ":3,"ðŸ’¼":3,"ðŸ�¹":1,"ðŸŒ ":3,"ðŸ�ˆ":1,"ðŸŒ�":1,"âš«":1,"â™§":2,"ðŸ�°":1,"ðŸšµ":2,"ðŸŽ¢":2,"ðŸŽ·":3,"ðŸŽ�":1,"â”ˆ":-4,"â•—":2,"ðŸŒ‡":3,"â�°":2,"ðŸš‚":1,"â— ":2,"ðŸŽ¿":2,"ðŸ†”":4,"ðŸŒ’":3,"ðŸ�ª":3,"â•”":1,"â•�":2,"ðŸ‘”":2,"ðŸ†“":1,"ðŸ�‹":1,"â–½":2,"ðŸ�›":1,"ðŸ‘•":2,"ðŸ’³":2,"ðŸ�§":5,"ðŸ’¡":3,"â¬…":2,"ðŸ�«":2,"ðŸ‡±":2,"ðŸ“¹":2,"ðŸ‘ž":2,"ðŸ‘š":3,"â–¡":-2,"ðŸš£":3,"ðŸ�‰":3,"ðŸ—»":3,"â•¦":2,"â›º":3,"ðŸ�•":1,"ðŸ�‚":2,"ðŸ‘¡":2,"ðŸ“»":2,"âœ’":1,"ðŸŒ°":3,"ðŸ�¢":1,"ðŸŽ’":3,"âŒ’":3,"ðŸ�«":-2,"ðŸ“´":4,"ðŸš¢":1,"ðŸšš":-1,"ðŸ�‰":1,"â�’":1,"ðŸ””":5,"â—¢":4,"ðŸ�¥":1,"ðŸš–":-1,"â–Œ":-2,"â˜›":2,"ðŸ’’":3,"ðŸš¤":2,"ðŸ��":2,"â– ":-2,"ðŸ”š":2,"ðŸŽ»":2,"ðŸ”·":1,"ðŸŽ½":2,"ðŸ“…":1,"ðŸŽº":3,"ðŸ�ˆ":-3,"âœ‰":1,"â—¤":5,"â—‹":3,"ðŸ�¼":3,"ðŸš›":-2,"ðŸ““":1,"â˜‰":1,"ðŸ’´":-2,"âž°":-1,"ðŸ”Œ":-1,"ðŸ“•":1,"ðŸ“£":2,"ðŸš“":1,"ðŸ�—":3,"â›³":4,"â”»":-3,"â”›":3,"â”ƒ":2,"ðŸ’º":1,"ðŸ�‡":-1,"â˜»":1,"ðŸ“ž":2,"â’¶":-1,"ðŸŒ‰":3,"ðŸš©":-2,"âœŽ":3,"ðŸ“ƒ":2,"ðŸ�¨":1,"ðŸ“Œ":-3,"â™Ž":-1,"ðŸ’·":2,"ðŸš„":3,"â–²":3,"â›µ":3,"ðŸ”¸":1,"ðŸšœ":5,"ðŸ�†":2,"ðŸ‘’":1,"â�•":1,"ðŸ”›":2,"â™¢":2,"ðŸ‡²":2,"â�…":4,"ðŸ‘�":2,"âœž":2,"â—¡":1,"ðŸŽ‹":3,"ðŸ‘¥":1,"ðŸ�¡":1,"â—†":4,"ðŸ”­":2,"ðŸŽª":1,"ðŸ�œ":3,"â™Œ":4,"â˜�":-5,"ðŸ‘·":1,"ðŸ”ˆ":1,"ðŸ“„":5,"ðŸš�":4,"ðŸŒ‹":3,"ðŸ“¡":1,"ðŸš³":5,"âœ˜":4,"ðŸ…°":1,"ðŸ‡¼":2,"â”“":3,"â”£":3,"â“�":2,"â’º":2,"ðŸ‘¤":4,"ðŸš�":1,"ðŸŽ ":3,"ðŸ��":-2,"ðŸ“—":1,"â”�":-1,"â™‚":1,"ðŸ“¯":-1,"ðŸ”©":1,"ðŸ‘¢":4,"â—‚":2,"ðŸ“°":1,"ðŸ“¶":2,"ðŸŒ„":1,"ðŸ—¾":2,"ðŸ”¶":2,"ðŸ�¤":2,"ðŸŽ©":2,"â“‚":1,"ðŸ”§":-4,"ðŸ�…":1,"â™®":1,"ðŸ…¾":-1,"ðŸ“¦":1,"ðŸšŠ":1,"ðŸ”²":3,"â–³":1,"ðŸ“†":5,"â�›":2,"ðŸ“‰":2,"â–µ":2,"ðŸ”Ž":3,"â˜œ":1,"ðŸ‡¯":2,"ðŸ‡µ":2,"ðŸ“˜":1,"â“”":3,"ðŸ”‘":1,"â­•":2,"ðŸ”˜":1,"ðŸš­":5,"ðŸš‰":3,"ðŸšª":3,"âž³":2,"ðŸšƒ":3,"â”¯":-3,"ðŸ†™":2,"ðŸ†–":1,"â”—":5,"â“„":2,"â�‡":3,"âœ´":3,"â˜Š":5,"ðŸ”•":-2,"â¬›":-2,"ðŸšž":3,"ðŸ�¶":3,"ðŸŒ�":3,"â™€":1,"ðŸš…":3,"ðŸš’":-2,"â™‹":1,"â™�":3,"ðŸ•�":-2,"â“�":5,"ðŸ“™":1,"â“ˆ":1,"ðŸ“‹":3,"ðŸŽ±":1,"ðŸ�ž":1,"ðŸ”º":1,"â“¡":5,"â™¤":3,"ðŸŽ¯":3,"ðŸ”‰":3,"â†©":5,"ðŸš¾":1,"ðŸŽ£":-4,"ðŸ”£":1,"â�Ž":-5,"âž¥":1,"ðŸŽŒ":5,"â—£":1,"â�¬":5,"â™­":1,"â“ž":5,"ðŸ”³":2,"ðŸ�­":2,"ðŸŽ³":-3,"â˜š":5,"âž½":2,"âž«":2,"âž–":-5,"ê’°":2,"ê’±":2,"â—�":-3,"ðŸ“‘":5,"â“§":5,"ðŸ”Ÿ":5,"ã€“":5,"â“œ":2,"âž ":5,"ðŸš†":2,"â„…":-5,"â˜ƒ":2,"ðŸš½":5,"â“�":5,"â‡¦":5,"ðŸ‘²":2,"ðŸš¡":-3,"ðŸ”¬":5,"âž—":-3,"ðŸ“ˆ":2,"â�ª":2,"â—Ž":5,"ê’¦":-5,"ðŸ“Ž":5,"â‘…":5,"âœ­":5,"â™“":2,"â”�":5,"â˜‡":5,"à¿Ž":-5,"ðŸ‘˜":5,"â†™":5,"â’»":2,"â“Œ":2,"â“…":2,"ðŸ•‘":2,"ðŸ•›":5,"â™ˆ":-5,"â†¬":5,"âœ�":5,"ðŸ�¦":5,"ðŸ”»":5,"â“Ÿ":5,"â“•":5,"â“˜":5,"â™¿":5,"â‡—":5,"â‡˜":5,"â“¨":5,"â“™":5,"â–«":5,"ðŸ”‡":5,"âŒƒ":-5,"ðŸ”–":5,"ðŸ“œ":5,"ðŸš�":5,"â”˜":-5,"âœ�":-5,"â�£":-5,"ðŸ“®":-5,"ðŸ••":-5,"ðŸ”¯":5,"âž¸":5,"ê’µ":5,"ðŸ•¥":-5,"âœ½":5,"ðŸ“¼":5,"ðŸ•�":-5,"ðŸ€„":5,"âœ¬":5,"âœ«":5,"ðŸ•”":-5,"â�£":5,"ðŸ“«":5,"ðŸ‰�":5,"ðŸˆ‚":-5,"ðŸŽ°":-5,"Ò‚":-5,"â•¤":-5,"ðŸ“”":5}')},7674:function(e){"use strict";e.exports=JSON.parse('{"abandon":-2,"abandoned":-2,"abandons":-2,"abducted":-2,"abduction":-2,"abductions":-2,"abhor":-3,"abhorred":-3,"abhorrent":-3,"abhors":-3,"abilities":2,"ability":2,"aboard":1,"aborted":-1,"aborts":-1,"absentee":-1,"absentees":-1,"absolve":2,"absolved":2,"absolves":2,"absolving":2,"absorbed":1,"abuse":-3,"abused":-3,"abuses":-3,"abusing":-3,"abusive":-3,"accept":1,"acceptable":1,"acceptance":1,"accepted":1,"accepting":1,"accepts":1,"accessible":1,"accident":-2,"accidental":-2,"accidentally":-2,"accidents":-2,"acclaim":2,"acclaimed":2,"accolade":2,"accomplish":2,"accomplished":2,"accomplishes":2,"accomplishment":2,"accomplishments":2,"accusation":-2,"accusations":-2,"accuse":-2,"accused":-2,"accuses":-2,"accusing":-2,"ache":-2,"achievable":1,"aching":-2,"acquit":2,"acquits":2,"acquitted":2,"acquitting":2,"acrimonious":-3,"active":1,"adequate":1,"admire":3,"admired":3,"admires":3,"admiring":3,"admit":-1,"admits":-1,"admitted":-1,"admonish":-2,"admonished":-2,"adopt":1,"adopts":1,"adorable":3,"adoration":3,"adore":3,"adored":3,"adores":3,"adoring":3,"adoringly":3,"advanced":1,"advantage":2,"advantageous":2,"advantageously":2,"advantages":2,"adventure":2,"adventures":2,"adventurous":2,"adversary":-1,"advisable":1,"affected":-1,"affection":3,"affectionate":3,"affectionateness":3,"afflicted":-1,"affordable":2,"affronted":-1,"aficionados":2,"afraid":-2,"aggravate":-2,"aggravated":-2,"aggravates":-2,"aggravating":-2,"aggression":-2,"aggressions":-2,"aggressive":-2,"aggressiveness":-2,"aghast":-2,"agog":2,"agonise":-3,"agonised":-3,"agonises":-3,"agonising":-3,"agonize":-3,"agonized":-3,"agonizes":-3,"agonizing":-3,"agree":1,"agreeable":2,"agreed":1,"agreement":1,"agrees":1,"alarm":-2,"alarmed":-2,"alarmist":-2,"alarmists":-2,"alas":-1,"alert":-1,"alienation":-2,"alive":1,"allegation":-2,"allegations":-2,"allergic":-2,"allow":1,"ally":2,"alone":-2,"altruistic":2,"amaze":2,"amazed":2,"amazes":2,"amazing":4,"ambitious":2,"ambivalent":-1,"amicable":2,"amuse":3,"amused":3,"amusement":3,"amusements":3,"anger":-3,"angered":-3,"angers":-3,"angry":-3,"anguish":-3,"anguished":-3,"animosity":-2,"annoy":-2,"annoyance":-2,"annoyed":-2,"annoying":-2,"annoys":-2,"antagonistic":-2,"anti":-1,"anticipation":1,"anxiety":-2,"anxious":-2,"apathetic":-3,"apathy":-3,"apeshit":-3,"apocalyptic":-2,"apologise":-1,"apologised":-1,"apologises":-1,"apologising":-1,"apologize":-1,"apologized":-1,"apologizes":-1,"apologizing":-1,"apology":-1,"appalled":-2,"appalling":-2,"appealing":2,"appease":2,"appeased":2,"appeases":2,"appeasing":2,"applaud":2,"applauded":2,"applauding":2,"applauds":2,"applause":2,"appreciate":2,"appreciated":2,"appreciates":2,"appreciating":2,"appreciation":2,"apprehensive":-2,"appropriate":2,"appropriately":2,"approval":2,"approved":2,"approves":2,"ardent":1,"arrest":-2,"arrested":-3,"arrests":-2,"arrogant":-2,"arsehole":-4,"ashame":-2,"ashamed":-2,"ass":-4,"assassination":-3,"assassinations":-3,"assault":-2,"assaults":-2,"asset":2,"assets":2,"assfucking":-4,"asshole":-4,"astonished":2,"astound":3,"astounded":3,"astounding":3,"astoundingly":3,"astounds":3,"atrocious":-3,"atrocity":-3,"attack":-1,"attacked":-1,"attacking":-1,"attacks":-1,"attract":1,"attracted":1,"attracting":2,"attraction":2,"attractions":2,"attractive":2,"attractively":2,"attractiveness":2,"attracts":1,"audacious":3,"aura":1,"authority":1,"avenge":-2,"avenged":-2,"avenger":-2,"avengers":-2,"avenges":-2,"avenging":-2,"avert":-1,"averted":-1,"averts":-1,"avid":2,"avoid":-1,"avoided":-1,"avoids":-1,"await":-1,"awaited":-1,"awaits":-1,"award":3,"awarded":3,"awards":3,"awesome":4,"awful":-3,"awkward":-2,"axe":-1,"axed":-1,"backed":1,"backing":2,"backs":1,"bad":-3,"bad luck":-2,"badass":-3,"badly":-3,"badness":-3,"bailout":-2,"balanced":1,"bamboozle":-2,"bamboozled":-2,"bamboozles":-2,"ban":-2,"banish":-1,"bankrupt":-3,"bankruptcy":-3,"bankster":-3,"banned":-2,"barbarian":-2,"barbaric":-2,"barbarous":-2,"bargain":2,"barrier":-2,"bastard":-5,"bastards":-5,"battle":-1,"battled":-1,"battles":-1,"battling":-2,"beaten":-2,"beatific":3,"beating":-1,"beauties":3,"beautiful":3,"beautifully":3,"beautify":3,"beauty":3,"befit":2,"befitting":2,"belittle":-2,"belittled":-2,"beloved":3,"benefactor":2,"benefactors":2,"benefit":2,"benefits":2,"benefitted":2,"benefitting":2,"benevolent":3,"bereave":-2,"bereaved":-2,"bereaves":-2,"bereaving":-2,"best":3,"best damn":4,"betray":-3,"betrayal":-3,"betrayed":-3,"betraying":-3,"betrays":-3,"better":2,"bias":-1,"biased":-2,"big":1,"bitch":-5,"bitches":-5,"bitter":-2,"bitterest":-2,"bitterly":-2,"bizarre":-2,"blackmail":-3,"blackmailed":-3,"blackmailing":-3,"blackmails":-3,"blah":-2,"blame":-2,"blamed":-2,"blames":-2,"blaming":-2,"bless":2,"blesses":2,"blessing":3,"blessings":3,"blind":-1,"bliss":3,"blissful":3,"blithe":2,"bloated":-1,"block":-1,"blockade":-2,"blockbuster":3,"blocked":-1,"blocking":-1,"blocks":-1,"bloody":-3,"blurry":-2,"boastful":-2,"bold":2,"boldly":2,"bomb":-1,"boost":1,"boosted":1,"boosting":1,"boosts":1,"bore":-2,"bored":-2,"boring":-3,"bother":-2,"bothered":-2,"bothers":-2,"bothersome":-2,"boycott":-2,"boycotted":-2,"boycotting":-2,"boycotts":-2,"brainwashing":-3,"brave":2,"braveness":2,"bravery":2,"bravura":3,"breach":-2,"breached":-2,"breaches":-2,"breaching":-2,"breakthrough":3,"breathtaking":5,"bribe":-3,"bribed":-3,"bribes":-3,"bribing":-3,"bright":1,"brightest":2,"brightness":1,"brilliant":4,"brilliance":3,"brilliances":3,"brisk":2,"broke":-1,"broken":-1,"brooding":-2,"brutal":-3,"brutally":-3,"bullied":-2,"bullshit":-4,"bully":-2,"bullying":-2,"bummer":-2,"buoyant":2,"burden":-2,"burdened":-2,"burdening":-2,"burdens":-2,"burglar":-2,"burglary":-2,"calm":2,"calmed":2,"calming":2,"calms":2,"can\'t stand":-3,"cancel":-1,"cancelled":-1,"cancelling":-1,"cancels":-1,"cancer":-1,"capabilities":1,"capability":1,"capable":1,"captivated":3,"care":2,"carefree":1,"careful":2,"carefully":2,"carefulness":2,"careless":-2,"cares":2,"caring":2,"cashing in":-2,"casualty":-2,"catastrophe":-3,"catastrophic":-4,"cautious":-1,"celebrate":3,"celebrated":3,"celebrates":3,"celebrating":3,"celebration":3,"celebrations":3,"censor":-2,"censored":-2,"censors":-2,"certain":1,"chagrin":-2,"chagrined":-2,"challenge":-1,"champion":2,"championed":2,"champions":2,"chance":2,"chances":2,"chaos":-2,"chaotic":-2,"charged":-3,"charges":-2,"charisma":2,"charitable":2,"charm":3,"charming":3,"charmingly":3,"charmless":-3,"chastise":-3,"chastised":-3,"chastises":-3,"chastising":-3,"cheat":-3,"cheated":-3,"cheater":-3,"cheaters":-3,"cheating":-3,"cheats":-3,"cheer":2,"cheered":2,"cheerful":2,"cheerfully":2,"cheering":2,"cheerless":-2,"cheers":2,"cheery":3,"cherish":2,"cherished":2,"cherishes":2,"cherishing":2,"chic":2,"chide":-3,"chided":-3,"chides":-3,"chiding":-3,"childish":-2,"chilling":-1,"choke":-2,"choked":-2,"chokes":-2,"choking":-2,"clarifies":2,"clarity":2,"clash":-2,"classy":3,"clean":2,"cleaner":2,"clear":1,"cleared":1,"clearly":1,"clears":1,"clever":2,"clouded":-1,"clueless":-2,"cock":-5,"cocksucker":-5,"cocksuckers":-5,"cocky":-2,"coerced":-2,"coercion":-2,"collapse":-2,"collapsed":-2,"collapses":-2,"collapsing":-2,"collide":-1,"collides":-1,"colliding":-1,"collision":-2,"collisions":-2,"colluding":-3,"combat":-1,"combats":-1,"comedy":1,"comfort":2,"comfortable":2,"comfortably":2,"comforting":2,"comforts":2,"comic":1,"commend":2,"commended":2,"commit":1,"commitment":2,"commits":1,"committed":1,"committing":1,"compassion":2,"compassionate":2,"compelled":1,"competencies":1,"competent":2,"competitive":2,"complacent":-2,"complain":-2,"complained":-2,"complaining":-2,"complains":-2,"complaint":-2,"complaints":-2,"complicating":-2,"compliment":2,"complimented":2,"compliments":2,"comprehensive":2,"concerned":-2,"conciliate":2,"conciliated":2,"conciliates":2,"conciliating":2,"condemn":-2,"condemnation":-2,"condemned":-2,"condemns":-2,"confidence":2,"confident":2,"confidently":2,"conflict":-2,"conflicting":-2,"conflictive":-2,"conflicts":-2,"confuse":-2,"confused":-2,"confusing":-2,"congrats":2,"congratulate":2,"congratulation":2,"congratulations":2,"consent":2,"consents":2,"consolable":2,"conspiracy":-3,"constipation":-2,"constrained":-2,"contagion":-2,"contagions":-2,"contagious":-1,"contaminant":-2,"contaminants":-2,"contaminate":-2,"contaminated":-2,"contaminates":-2,"contaminating":-2,"contamination":-2,"contaminations":-2,"contempt":-2,"contemptible":-2,"contemptuous":-2,"contemptuously":-2,"contend":-1,"contender":-1,"contending":-1,"contentious":-2,"contestable":-2,"controversial":-2,"controversially":-2,"controversies":-2,"controversy":-2,"convicted":-2,"convince":1,"convinced":1,"convinces":1,"convivial":2,"cool":1,"cool stuff":3,"cornered":-2,"corpse":-1,"corrupt":-3,"corrupted":-3,"corrupting":-3,"corruption":-3,"corrupts":-3,"costly":-2,"courage":2,"courageous":2,"courageously":2,"courageousness":2,"courteous":2,"courtesy":2,"cover-up":-3,"coward":-2,"cowardly":-2,"coziness":2,"cramp":-1,"crap":-3,"crappy":-3,"crash":-2,"crazier":-2,"craziest":-2,"crazy":-2,"creative":2,"crestfallen":-2,"cried":-2,"cries":-2,"crime":-3,"crimes":-3,"criminal":-3,"criminals":-3,"criminate":-3,"criminated":-3,"criminates":-3,"crisis":-3,"critic":-2,"criticise":-2,"criticised":-2,"criticises":-2,"criticising":-2,"criticism":-2,"criticize":-2,"criticized":-2,"criticizes":-2,"criticizing":-2,"critics":-2,"critique":-2,"crowding":-1,"crude":-1,"cruel":-3,"cruelty":-3,"crush":-1,"crushed":-2,"crushes":-1,"crushing":-1,"cry":-1,"crying":-2,"cunning":2,"cunt":-5,"curious":1,"curse":-1,"cut":-1,"cutback":-2,"cutbacks":-2,"cute":2,"cuts":-1,"cutting":-1,"cynic":-2,"cynical":-2,"cynicism":-2,"damage":-3,"damaged":-3,"damages":-3,"damaging":-3,"damn":-2,"damn cute":3,"damn good":4,"damned":-4,"damnit":-4,"danger":-2,"dangerous":-2,"dangerously":-2,"daredevil":2,"daring":2,"darkest":-2,"darkness":-1,"dauntless":2,"dazzling":3,"dead":-3,"deadening":-2,"deadlock":-2,"deadly":-3,"deafening":-1,"dear":2,"dearly":3,"death":-2,"deaths":-2,"debonair":2,"debt":-2,"deceit":-3,"deceitful":-3,"deceive":-3,"deceived":-3,"deceives":-3,"deceiving":-3,"deception":-3,"deceptive":-3,"decisive":1,"dedicated":2,"dedication":2,"defeat":-2,"defeated":-2,"defect":-3,"defective":-3,"defects":-3,"defender":2,"defenders":2,"defenseless":-2,"defer":-1,"deferring":-1,"defiant":-1,"deficient":-2,"deficiency":-2,"deficiencies":-2,"deficit":-2,"deformed":-2,"deformities":-2,"deformity":-2,"defraud":-3,"defrauds":-3,"deft":2,"defunct":-2,"degrade":-2,"degraded":-2,"degrades":-2,"dehumanize":-2,"dehumanized":-2,"dehumanizes":-2,"dehumanizing":-2,"deject":-2,"dejected":-2,"dejecting":-2,"dejects":-2,"delay":-1,"delayed":-1,"delectable":3,"delicious":3,"delight":3,"delighted":3,"delightful":3,"delightfully":3,"delighting":3,"delights":3,"demand":-1,"demanded":-1,"demanding":-1,"demands":-1,"demonstration":-1,"demoralize":-2,"demoralized":-2,"demoralizes":-2,"demoralizing":-2,"denial":-2,"denials":-2,"denied":-2,"denier":-2,"deniers":-2,"denies":-2,"denounce":-2,"denounces":-2,"dent":-2,"deny":-2,"denying":-2,"deplore":-3,"deplored":-3,"deplores":-3,"deploring":-3,"deport":-2,"deported":-2,"deporting":-2,"deports":-2,"deportation":-2,"deportations":-2,"depressed":-2,"depressing":-2,"deprivation":-3,"derail":-2,"derailed":-2,"derails":-2,"derelict":-2,"deride":-2,"derided":-2,"derides":-2,"deriding":-2,"derision":-2,"desirable":2,"desire":1,"desired":2,"desirous":2,"despair":-3,"despairing":-3,"despairs":-3,"desperate":-3,"desperately":-3,"despondent":-3,"destroy":-3,"destroyed":-3,"destroying":-3,"destroys":-3,"destruction":-3,"destructive":-3,"detached":-1,"detain":-2,"detained":-2,"detention":-2,"deteriorate":-2,"deteriorated":-2,"deteriorates":-2,"deteriorating":-2,"determined":2,"deterrent":-2,"detract":-1,"detracted":-1,"detracts":-1,"devastate":-2,"devastated":-2,"devastating":-2,"devastation":-2,"devastations":-2,"devoted":3,"devotion":2,"devotional":2,"diamond":1,"dick":-4,"dickhead":-4,"die":-3,"died":-3,"difficult":-1,"diffident":-2,"dignity":2,"dilemma":-1,"dilligence":2,"dipshit":-3,"dire":-3,"direful":-3,"dirt":-2,"dirtier":-2,"dirtiest":-2,"dirty":-2,"disabilities":-2,"disability":-2,"disabling":-1,"disadvantage":-2,"disadvantaged":-2,"disagree":-2,"disagreeable":-2,"disagreement":-2,"disappear":-1,"disappeared":-1,"disappears":-1,"disappoint":-2,"disappointed":-2,"disappointing":-2,"disappointment":-2,"disappointments":-2,"disappoints":-2,"disapproval":-2,"disapprovals":-2,"disapprove":-2,"disapproved":-2,"disapproves":-2,"disapproving":-2,"disaster":-2,"disasters":-2,"disastrous":-3,"disbelieve":-2,"discard":-1,"discarded":-1,"discarding":-1,"discards":-1,"discernment":2,"discomfort":-2,"disconsolate":-2,"disconsolation":-2,"discontented":-2,"discord":-2,"discounted":-1,"discouraged":-2,"discredited":-2,"discriminate":-2,"discriminated":-2,"discriminates":-2,"discriminating":-2,"discriminatory":-2,"disdain":-2,"disease":-1,"diseases":-1,"disgrace":-2,"disgraced":-2,"disguise":-1,"disguised":-1,"disguises":-1,"disguising":-1,"disgust":-3,"disgusted":-3,"disgustful":-3,"disgusting":-3,"disheartened":-2,"dishonest":-2,"disillusioned":-2,"disinclined":-2,"disjointed":-2,"dislike":-2,"disliked":-2,"dislikes":-2,"dismal":-2,"dismayed":-2,"dismissed":-2,"disorder":-2,"disorders":-2,"disorganized":-2,"disoriented":-2,"disparage":-2,"disparaged":-2,"disparages":-2,"disparaging":-2,"displeased":-2,"displeasure":-2,"disproportionate":-2,"dispute":-2,"disputed":-2,"disputes":-2,"disputing":-2,"disqualified":-2,"disquiet":-2,"disregard":-2,"disregarded":-2,"disregarding":-2,"disregards":-2,"disrespect":-2,"disrespected":-2,"disrupt":-2,"disrupted":-2,"disrupting":-2,"disruption":-2,"disruptions":-2,"disruptive":-2,"disrupts":-2,"dissatisfied":-2,"distasteful":-2,"distinguished":2,"distort":-2,"distorted":-2,"distorting":-2,"distorts":-2,"distract":-2,"distracted":-2,"distraction":-2,"distracts":-2,"distress":-2,"distressed":-2,"distresses":-2,"distressing":-2,"distrust":-3,"distrustful":-3,"disturb":-2,"disturbed":-2,"disturbing":-2,"disturbs":-2,"dithering":-2,"diverting":-1,"dizzy":-1,"dodging":-2,"dodgy":-2,"does not work":-3,"dolorous":-2,"donate":2,"donated":2,"donates":2,"donating":2,"donation":2,"dont like":-2,"doom":-2,"doomed":-2,"doubt":-1,"doubted":-1,"doubtful":-1,"doubting":-1,"doubts":-1,"douche":-3,"douchebag":-3,"dour":-2,"downcast":-2,"downer":-2,"downhearted":-2,"downside":-2,"drag":-1,"dragged":-1,"drags":-1,"drained":-2,"dread":-2,"dreaded":-2,"dreadful":-3,"dreading":-2,"dream":1,"dreams":1,"dreary":-2,"droopy":-2,"drop":-1,"dropped":-1,"drown":-2,"drowned":-2,"drowns":-2,"drudgery":-2,"drunk":-2,"dubious":-2,"dud":-2,"dull":-2,"dumb":-3,"dumbass":-3,"dump":-1,"dumped":-2,"dumps":-1,"dupe":-2,"duped":-2,"dupery":-2,"durable":2,"dying":-3,"dysfunction":-2,"eager":2,"earnest":2,"ease":2,"easy":1,"ecstatic":4,"eerie":-2,"eery":-2,"effective":2,"effectively":2,"effectiveness":2,"effortlessly":2,"elated":3,"elation":3,"elegant":2,"elegantly":2,"embarrass":-2,"embarrassed":-2,"embarrasses":-2,"embarrassing":-2,"embarrassment":-2,"embezzlement":-3,"embittered":-2,"embrace":1,"emergency":-2,"empathetic":2,"empower":2,"empowerment":2,"emptiness":-1,"empty":-1,"enchanted":2,"encourage":2,"encouraged":2,"encouragement":2,"encourages":2,"encouraging":2,"endorse":2,"endorsed":2,"endorsement":2,"endorses":2,"enemies":-2,"enemy":-2,"energetic":2,"engage":1,"engages":1,"engrossed":1,"engrossing":3,"enjoy":2,"enjoyable":2,"enjoyed":2,"enjoying":2,"enjoys":2,"enlighten":2,"enlightened":2,"enlightening":2,"enlightens":2,"ennui":-2,"enrage":-2,"enraged":-2,"enrages":-2,"enraging":-2,"enrapture":3,"enslave":-2,"enslaved":-2,"enslaves":-2,"ensure":1,"ensuring":1,"enterprising":1,"entertaining":2,"enthral":3,"enthusiastic":3,"entitled":1,"entrusted":2,"envies":-1,"envious":-2,"environment-friendly":2,"envy":-1,"envying":-1,"erroneous":-2,"error":-2,"errors":-2,"escape":-1,"escapes":-1,"escaping":-1,"esteem":2,"esteemed":2,"ethical":2,"euphoria":3,"euphoric":4,"evacuate":-1,"evacuated":-1,"evacuates":-1,"evacuating":-1,"evacuation":-1,"evergreen":2,"evergreens":2,"evergreening":-3,"eviction":-1,"evil":-3,"exacerbate":-2,"exacerbated":-2,"exacerbates":-2,"exacerbating":-2,"exaggerate":-2,"exaggerated":-2,"exaggerates":-2,"exaggerating":-2,"exasparate":-2,"exasperated":-2,"exasperates":-2,"exasperating":-2,"excellence":3,"excellent":3,"excite":3,"excited":3,"excitement":3,"exciting":3,"exclude":-1,"excluded":-2,"exclusion":-1,"exclusive":2,"excruciatingly":-1,"excuse":-1,"exempt":-1,"exhausted":-2,"exhilarated":3,"exhilarates":3,"exhilarating":3,"exonerate":2,"exonerated":2,"exonerates":2,"exonerating":2,"expand":1,"expands":1,"expel":-2,"expelled":-2,"expelling":-2,"expels":-2,"expertly":2,"exploit":-2,"exploited":-2,"exploiting":-2,"exploits":-2,"exploration":1,"explorations":1,"expose":-1,"exposed":-1,"exposes":-1,"exposing":-1,"exquisite":3,"extend":1,"extends":1,"extremist":-2,"extremists":-2,"exuberant":4,"exultant":3,"exultantly":3,"fabulous":4,"fabulously":4,"fad":-2,"fag":-3,"faggot":-3,"faggots":-3,"fail":-2,"failed":-2,"failing":-2,"fails":-2,"failure":-2,"failures":-2,"fainthearted":-2,"fair":2,"fairness":2,"faith":1,"faithful":3,"fake":-3,"faker":-3,"fakes":-3,"faking":-3,"fallen":-2,"falling":-1,"false":-1,"falsely":-2,"falsified":-3,"falsify":-3,"fame":1,"famine":-2,"famous":2,"fan":3,"fantastic":4,"farce":-1,"fascinate":3,"fascinated":3,"fascinates":3,"fascinating":3,"fascination":3,"fascist":-2,"fascists":-2,"fatal":-3,"fatalities":-3,"fatality":-3,"fatigue":-2,"fatigued":-2,"fatigues":-2,"fatiguing":-2,"favor":2,"favorable":2,"favorably":2,"favored":2,"favorite":2,"favorited":2,"favorites":2,"favors":2,"favour":2,"favourable":2,"favourably":2,"favoured":2,"favourite":2,"favourited":2,"favourites":2,"favours":2,"fear":-2,"fearful":-2,"fearfully":-2,"fearing":-2,"fearless":2,"fearlessness":2,"fearsome":-2,"fed up":-3,"feeble":-2,"feeling":1,"felonies":-3,"felony":-3,"fertile":2,"fervent":2,"fervid":2,"festive":2,"fever":-2,"fiasco":-3,"fidgety":-2,"fight":-1,"fighting":-2,"fine":2,"fines":-2,"finest":3,"fire":-2,"fired":-2,"firing":-2,"fit":1,"fitness":1,"filth":-2,"filthy":-2,"flagship":2,"flaw":-2,"flawed":-3,"flawless":2,"flawlessly":2,"flaws":-2,"flees":-1,"flop":-2,"flops":-2,"flu":-2,"flustered":-2,"focused":2,"fond":2,"fondness":2,"fool":-2,"foolish":-2,"fools":-2,"forbid":-1,"forbidden":-2,"forbidding":-2,"forced":-1,"foreclosure":-2,"foreclosures":-2,"forefront":1,"forget":-1,"forgetful":-2,"forgettable":-1,"forgive":1,"forgiving":1,"forgot":-1,"forgotten":-1,"fortune":2,"fortunate":2,"fortunately":2,"foul":-3,"frantic":-1,"fraud":-4,"frauds":-4,"fraudster":-4,"fraudsters":-4,"fraudulence":-4,"fraudulent":-4,"freak":-2,"free":1,"freedom":2,"freedoms":2,"frenzy":-3,"fresh":1,"friend":1,"friendliness":2,"friendly":2,"friendship":2,"fright":-2,"frightened":-2,"frightening":-3,"frikin":-2,"frisky":2,"frowning":-1,"fruitless":-2,"frustrate":-2,"frustrated":-2,"frustrates":-2,"frustrating":-2,"frustration":-2,"ftw":3,"fuck":-4,"fucked":-4,"fucker":-4,"fuckers":-4,"fuckface":-4,"fuckhead":-4,"fuckin":-4,"fucking":-4,"fucking amazing":4,"fucking beautiful":4,"fucking cute":4,"fucking fantastic":4,"fucking good":4,"fucking great":4,"fucking hot":2,"fucking love":4,"fucking loves":4,"fucking perfect":4,"fucktard":-4,"fud":-3,"fuked":-4,"fuking":-4,"fulfill":2,"fulfilled":2,"fulfillment":2,"fulfills":2,"fuming":-2,"fun":4,"funeral":-1,"funerals":-1,"funky":2,"funnier":4,"funny":4,"furious":-3,"futile":-2,"gag":-2,"gagged":-2,"gain":2,"gained":2,"gaining":2,"gains":2,"gallant":3,"gallantly":3,"gallantry":3,"game-changing":3,"garbage":-1,"gem":3,"generous":2,"generously":2,"genial":3,"ghastly":-2,"ghost":-1,"giddy":-2,"gift":2,"glad":3,"glamorous":3,"glamourous":3,"glee":3,"gleeful":3,"gloom":-1,"gloomy":-2,"glorious":2,"glory":2,"glum":-2,"god":1,"goddamn":-3,"godsend":4,"gold":2,"good":3,"goodlooking":3,"goodmorning":1,"goodness":3,"goodwill":3,"goofiness":-2,"goofy":-2,"grace":1,"graceful":2,"gracious":3,"grand":3,"grant":1,"granted":1,"granting":1,"grants":1,"grateful":3,"gratification":2,"grave":-2,"gray":-1,"grisly":-2,"gr8":3,"great":3,"greater":3,"greatest":3,"greed":-3,"greedy":-2,"green wash":-3,"green washing":-3,"greenwash":-3,"greenwasher":-3,"greenwashers":-3,"greenwashing":-3,"greet":1,"greeted":1,"greeting":1,"greetings":2,"greets":1,"grey":-1,"grief":-2,"grieved":-2,"grim":-2,"gripping":2,"groan":-2,"groaned":-2,"groaning":-2,"groans":-2,"gross":-2,"growing":1,"growth":2,"growths":2,"gruesome":-3,"guarantee":1,"guilt":-3,"guilty":-3,"gullibility":-2,"gullible":-2,"gun":-1,"ha":2,"hacked":-1,"haha":3,"hahaha":3,"hahahah":3,"hail":2,"hailed":2,"hallelujah":3,"handpicked":1,"handsome":3,"hapless":-2,"haplessness":-2,"happiest":3,"happiness":3,"happy":3,"harass":-3,"harassed":-3,"harasses":-3,"harassing":-3,"harassment":-3,"hard":-1,"hardier":2,"hardship":-2,"hardy":2,"harm":-2,"harmed":-2,"harmful":-2,"harming":-2,"harmony":2,"harmonious":2,"harmoniously":2,"harms":-2,"harried":-2,"harsh":-2,"harsher":-2,"harshest":-2,"harshly":-2,"hate":-3,"hated":-3,"hater":-3,"haters":-3,"hates":-3,"hating":-3,"hatred":-3,"haunt":-1,"haunted":-2,"haunting":1,"haunts":-1,"havoc":-2,"hazardous":-3,"headache":-2,"healthy":2,"heartbreaking":-3,"heartbroken":-3,"heartfelt":3,"heartless":-2,"heartwarming":3,"heaven":2,"heavenly":4,"heavyhearted":-2,"hehe":2,"hell":-4,"hellish":-2,"help":2,"helpful":2,"helping":2,"helpless":-2,"helps":2,"hero":2,"heroes":2,"heroic":3,"hesitant":-2,"hesitate":-2,"hid":-1,"hide":-1,"hideous":-3,"hides":-1,"hiding":-1,"highlight":2,"hilarious":2,"hinder":-2,"hindrance":-2,"hoax":-2,"hollow":-1,"homeless":-2,"homesick":-2,"homicide":-2,"homicides":-2,"honest":2,"honor":2,"honored":2,"honoring":2,"honour":2,"honoured":2,"honouring":2,"hooligan":-2,"hooliganism":-2,"hooligans":-2,"hope":2,"hopeful":2,"hopefully":2,"hopeless":-2,"hopelessness":-2,"hopes":2,"hoping":2,"horrendous":-3,"horrid":-3,"horrible":-3,"horrific":-3,"horrified":-3,"hospitalized":-2,"hostile":-2,"huckster":-2,"hug":2,"huge":1,"hugs":2,"humane":2,"humble":1,"humbug":-2,"humerous":3,"humiliated":-3,"humiliation":-3,"humor":2,"humorous":2,"humour":2,"humourous":2,"hunger":-2,"hurrah":5,"hurt":-2,"hurting":-2,"hurts":-2,"hypocritical":-2,"hysteria":-3,"hysterical":-3,"hysterics":-3,"icky":-3,"idiocy":-3,"idiot":-3,"idiotic":-3,"ignorance":-2,"ignorant":-2,"ignore":-1,"ignored":-2,"ignores":-1,"ill":-2,"ill-fated":-2,"illegal":-3,"illegally":-3,"illegitimate":-3,"illiteracy":-2,"illness":-2,"illnesses":-2,"illogical":-2,"imaginative":2,"imbecile":-3,"immobilized":-1,"immortal":2,"immune":1,"impair":-2,"impaired":-2,"impairing":-2,"impairment":-2,"impairs":-2,"impatient":-2,"impeachment":-3,"impeachments":-3,"impede":-2,"impeded":-2,"impedes":-2,"impeding":-2,"impedingly":-2,"imperfect":-2,"importance":2,"important":2,"impose":-1,"imposed":-1,"imposes":-1,"imposing":-1,"imposter":-2,"impotent":-2,"impress":3,"impressed":3,"impresses":3,"impressive":3,"imprisoned":-2,"imprisonment":-2,"improper":-2,"improperly":-2,"improve":2,"improved":2,"improvement":2,"improves":2,"improving":2,"inability":-2,"inaction":-2,"inadequate":-2,"inadvertently":-2,"inappropriate":-2,"incapable":-2,"incapacitated":-2,"incapacitates":-2,"incapacitating":-2,"incense":-2,"incensed":-2,"incenses":-2,"incensing":-2,"incoherent":-2,"incompetence":-2,"incompetent":-2,"incomplete":-1,"incomprehensible":-2,"inconsiderate":-2,"inconvenience":-2,"inconvenient":-2,"increase":1,"increased":1,"indecisive":-2,"indestructible":2,"indicted":-2,"indifference":-2,"indifferent":-2,"indignant":-2,"indignation":-2,"indoctrinate":-2,"indoctrinated":-2,"indoctrinates":-2,"indoctrinating":-2,"inediable":-2,"inexorable":-3,"inexcusable":-3,"ineffective":-2,"ineffectively":-2,"ineffectual":-2,"inefficiency":-2,"inefficient":-2,"inefficiently":-2,"inept":-2,"ineptitude":-2,"infantile":-2,"infantilized":-2,"infatuated":2,"infatuation":2,"infect":-2,"infected":-2,"infecting":-2,"infection":-2,"infections":-2,"infectious":-2,"infects":-2,"inferior":-2,"infest":-2,"infested":-2,"infesting":-2,"infests":-2,"inflamed":-2,"inflict":-2,"inflicted":-2,"inflicting":-2,"inflicts":-2,"influential":2,"infract":-2,"infracted":-2,"infracting":-2,"infracts":-2,"infringement":-2,"infuriate":-2,"infuriated":-2,"infuriates":-2,"infuriating":-2,"inhibit":-1,"inhuman":-2,"injured":-2,"injuries":-2,"injury":-2,"injustice":-2,"innovate":1,"innovates":1,"innovation":1,"innovative":2,"inoperative":-2,"inquisition":-2,"inquisitive":2,"insane":-2,"insanity":-2,"insecure":-2,"insensitive":-2,"insensitivity":-2,"insignificant":-2,"insipid":-2,"insolvent":-2,"insomnia":-2,"inspiration":2,"inspirational":2,"inspire":2,"inspired":2,"inspires":2,"inspiring":3,"insufficiency":-2,"insufficient":-2,"insufficiently":-2,"insult":-2,"insulted":-2,"insulting":-2,"insults":-2,"intact":2,"integrity":2,"intelligent":2,"intense":1,"interest":1,"interested":2,"interesting":2,"interests":1,"interrogated":-2,"interrupt":-2,"interrupted":-2,"interrupting":-2,"interruption":-2,"interrupts":-2,"intimacy":2,"intimidate":-2,"intimidated":-2,"intimidates":-2,"intimidating":-2,"intimidation":-2,"intransigence":-2,"intransigency":-2,"intricate":2,"intrigues":1,"invasion":-1,"invincible":2,"invite":1,"inviting":1,"invulnerable":2,"irate":-3,"ironic":-1,"irony":-1,"irrational":-1,"irreparable":-2,"irreproducible":-2,"irresistible":2,"irresistibly":2,"irresolute":-2,"irresponsible":-2,"irresponsibly":-2,"irreversible":-1,"irreversibly":-1,"irritate":-3,"irritated":-3,"irritates":-3,"irritating":-3,"isolated":-1,"itchy":-2,"jackass":-4,"jackasses":-4,"jailed":-2,"jaunty":2,"jealous":-2,"jealousy":-2,"jeopardy":-2,"jerk":-3,"jesus":1,"jewel":1,"jewels":1,"jocular":2,"join":1,"joke":2,"jokes":2,"jolly":2,"jovial":2,"joy":3,"joyful":3,"joyfully":3,"joyless":-2,"joyous":3,"jubilant":3,"jumpy":-1,"justice":2,"justifiably":2,"justified":2,"keen":1,"kickback":-3,"kickbacks":-3,"kidnap":-2,"kidnapped":-2,"kidnapping":-2,"kidnappings":-2,"kidnaps":-2,"kill":-3,"killed":-3,"killing":-3,"kills":-3,"kind":2,"kind of":0,"kinder":2,"kindness":2,"kiss":2,"kudos":3,"lack":-2,"lackadaisical":-2,"lag":-1,"lagged":-2,"lagging":-2,"lags":-2,"lame":-2,"landmark":2,"lapse":-1,"lapsed":-1,"laugh":1,"laughed":1,"laughing":1,"laughs":1,"laughting":1,"launched":1,"lawl":3,"lawsuit":-2,"lawsuits":-2,"lazy":-1,"leadership":1,"leading":2,"leak":-1,"leaked":-1,"leave":-1,"legal":1,"legally":1,"lenient":1,"lethal":-2,"lethality":-2,"lethargic":-2,"lethargy":-2,"liar":-3,"liars":-3,"libelous":-2,"lied":-2,"lifeless":-1,"lifesaver":4,"lighthearted":1,"likable":2,"like":2,"likeable":2,"liked":2,"likers":2,"likes":2,"liking":2,"limitation":-1,"limited":-1,"limits":-1,"litigation":-1,"litigious":-2,"lively":2,"livid":-2,"lmao":4,"lmfao":4,"loathe":-3,"loathed":-3,"loathes":-3,"loathing":-3,"loathsome":-3,"lobbied":-2,"lobby":-2,"lobbying":-2,"lobbyist":-2,"lobbyists":-2,"lol":3,"lolol":4,"lololol":4,"lolololol":4,"lonely":-2,"lonesome":-2,"longing":-1,"lool":3,"loom":-1,"loomed":-1,"looming":-1,"looms":-1,"loool":3,"looool":3,"loose":-3,"looses":-3,"loser":-3,"losing":-3,"loss":-3,"losses":-3,"lost":-3,"lousy":-2,"lovable":3,"love":3,"loved":3,"lovelies":3,"lovely":3,"loves":3,"loving":2,"loving-kindness":3,"lowest":-1,"loyal":3,"loyalty":3,"luck":3,"luckily":3,"lucky":3,"lucrative":3,"ludicrous":-3,"lugubrious":-2,"lunatic":-3,"lunatics":-3,"lurk":-1,"lurking":-1,"lurks":-1,"luxury":2,"macabre":-2,"mad":-3,"maddening":-3,"made-up":-1,"madly":-3,"madness":-3,"magnificent":3,"maladaption":-2,"maldevelopment":-2,"maltreatment":-2,"mandatory":-1,"manipulated":-1,"manipulating":-1,"manipulation":-1,"manslaughter":-3,"marvel":3,"marvelous":3,"marvels":3,"masterpiece":4,"masterpieces":4,"matter":1,"matters":1,"mature":2,"meaningful":2,"meaningless":-2,"medal":3,"mediocrity":-3,"meditative":1,"melancholy":-2,"memorable":1,"memoriam":-2,"menace":-2,"menaced":-2,"menaces":-2,"mercy":2,"merry":3,"mesmerizing":3,"mess":-2,"messed":-2,"messing up":-2,"methodical":2,"methodically":2,"mindless":-2,"miracle":4,"mirth":3,"mirthful":3,"mirthfully":3,"misbehave":-2,"misbehaved":-2,"misbehaves":-2,"misbehaving":-2,"misbranding":-3,"miscast":-2,"mischief":-1,"mischiefs":-1,"misclassified":-2,"misclassifies":-2,"misclassify":-2,"misconduct":-2,"misconducted":-2,"misconducting":-2,"misconducts":-2,"miserable":-3,"miserably":-3,"misery":-2,"misfire":-2,"misfortune":-2,"misgiving":-2,"misinformation":-2,"misinformed":-2,"misinterpreted":-2,"mislead":-3,"misleaded":-3,"misleading":-3,"misleads":-3,"misplace":-2,"misplaced":-2,"misplaces":-2,"misplacing":-2,"mispricing":-3,"misread":-1,"misreport":-2,"misreported":-2,"misreporting":-2,"misreports":-2,"misrepresent":-2,"misrepresentation":-2,"misrepresentations":-2,"misrepresented":-2,"misrepresenting":-2,"misrepresents":-2,"miss":-2,"missed":-2,"missing":-2,"mistake":-2,"mistaken":-2,"mistakes":-2,"mistaking":-2,"misunderstand":-2,"misunderstanding":-2,"misunderstands":-2,"misunderstood":-2,"misuse":-2,"misused":-2,"misuses":-2,"misusing":-2,"moan":-2,"moaned":-2,"moaning":-2,"moans":-2,"mock":-2,"mocked":-2,"mocking":-2,"mocks":-2,"modernize":2,"modernized":2,"modernizes":2,"modernizing":2,"mongering":-2,"monopolize":-2,"monopolized":-2,"monopolizes":-2,"monopolizing":-2,"monotone":-1,"moody":-1,"mope":-1,"moping":-1,"moron":-3,"motherfucker":-5,"motherfucking":-5,"motivate":1,"motivated":2,"motivating":2,"motivation":1,"mourn":-2,"mourned":-2,"mournful":-2,"mourning":-2,"mourns":-2,"muddy":-2,"mumpish":-2,"murder":-2,"murderer":-2,"murdering":-3,"murderous":-3,"murders":-2,"murky":-2,"myth":-1,"n00b":-2,"naive":-2,"narcissism":-2,"nasty":-3,"natural":1,"naÃ¯ve":-2,"needy":-2,"negative":-2,"negativity":-2,"neglect":-2,"neglected":-2,"neglecting":-2,"neglects":-2,"nerves":-1,"nervous":-2,"nervously":-2,"nice":3,"nifty":2,"niggas":-5,"nigger":-5,"no":-1,"no fun":-3,"noble":2,"noblest":2,"noisy":-1,"non-approved":-2,"nonsense":-2,"noob":-2,"nosey":-2,"not good":-2,"not working":-3,"notable":2,"noticeable":2,"notorious":-2,"novel":2,"numb":-1,"nurturing":2,"nuts":-3,"obliterate":-2,"obliterated":-2,"obnoxious":-3,"obscene":-2,"obscenity":-2,"obsessed":2,"obsolete":-2,"obstacle":-2,"obstacles":-2,"obstinate":-2,"obstruct":-2,"obstructed":-2,"obstructing":-2,"obstruction":-2,"obstructs":-2,"odd":-2,"offence":-2,"offences":-2,"offend":-2,"offended":-2,"offender":-2,"offending":-2,"offends":-2,"offense":-2,"offenses":-2,"offensive":-2,"offensively":-2,"offline":-1,"oks":2,"ominous":3,"once-in-a-lifetime":3,"oops":-2,"opportunities":2,"opportunity":2,"oppressed":-2,"oppression":-2,"oppressions":-2,"oppressive":-2,"optimism":2,"optimistic":2,"optionless":-2,"ostracize":-2,"ostracized":-2,"ostracizes":-2,"ouch":-2,"outage":-2,"outages":-2,"outbreak":-2,"outbreaks":-2,"outcry":-2,"outmaneuvered":-2,"outnumbered":-2,"outrage":-3,"outraged":-3,"outrageous":-3,"outreach":2,"outstanding":5,"overjoyed":4,"overload":-1,"overlooked":-1,"overprotective":-2,"overran":-2,"overreact":-2,"overreacted":-2,"overreacting":-2,"overreaction":-2,"overreacts":-2,"oversell":-2,"overselling":-2,"oversells":-2,"oversight":-1,"oversimplification":-2,"oversimplified":-2,"oversimplifies":-2,"oversimplify":-2,"oversold":-2,"overstatement":-2,"overstatements":-2,"overweight":-1,"overwrought":-3,"oxymoron":-1,"pain":-2,"pained":-2,"painful":-2,"panic":-3,"panicked":-3,"panics":-3,"paradise":3,"paradox":-1,"pardon":2,"pardoned":2,"pardoning":2,"pardons":2,"parley":-1,"passion":1,"passionate":2,"passive":-1,"passively":-1,"pathetic":-2,"pay":-1,"peace":2,"peaceful":2,"peacefully":2,"penalize":-2,"penalized":-2,"penalizes":-2,"penalizing":-2,"penalty":-2,"pensive":-1,"perfect":3,"perfected":2,"perfection":3,"perfectly":3,"perfects":2,"peril":-2,"perjury":-3,"perpetrated":-2,"perpetrator":-2,"perpetrators":-2,"perplexed":-2,"persecute":-2,"persecuted":-2,"persecutes":-2,"persecuting":-2,"perturbed":-2,"pervert":-3,"pesky":-2,"pessimism":-2,"pessimistic":-2,"petrified":-2,"philanthropy":2,"phobic":-2,"picturesque":2,"pileup":-1,"pillage":-2,"pique":-2,"piqued":-2,"piss":-4,"pissed":-4,"pissing":-3,"piteous":-2,"pitied":-1,"pity":-2,"plague":-3,"plagued":-3,"plagues":-3,"plaguing":-3,"playful":2,"pleasant":3,"please":1,"pleased":3,"pleasurable":3,"pleasure":3,"plodding":-2,"poignant":2,"pointless":-2,"poised":-2,"poison":-2,"poisoned":-2,"poisons":-2,"polished":2,"polite":2,"politeness":2,"pollutant":-2,"pollute":-2,"polluted":-2,"polluter":-2,"polluters":-2,"pollutes":-2,"pollution":-2,"poor":-2,"poorer":-2,"poorest":-2,"poorly":-2,"popular":3,"popularity":3,"positive":2,"positively":2,"possessive":-2,"post-traumatic":-2,"postpone":-1,"postponed":-1,"postpones":-1,"postponing":-1,"poverty":-1,"powerful":2,"powerless":-2,"praise":3,"praised":3,"praises":3,"praising":3,"pray":1,"praying":1,"prays":1,"prblm":-2,"prblms":-2,"predatory":-2,"prepared":1,"pressure":-1,"pressured":-2,"pretend":-1,"pretending":-1,"pretends":-1,"pretty":1,"prevent":-1,"prevented":-1,"preventing":-1,"prevents":-1,"prick":-5,"prison":-2,"prisoner":-2,"prisoners":-2,"privileged":2,"proactive":2,"problem":-2,"problems":-2,"profit":2,"profitable":2,"profiteer":-2,"profits":2,"progress":2,"prohibit":-1,"prohibits":-1,"prominent":2,"promise":1,"promised":1,"promises":1,"promote":1,"promoted":1,"promotes":1,"promoting":1,"promptly":1,"propaganda":-2,"prosecute":-1,"prosecuted":-2,"prosecutes":-1,"prosecution":-1,"prospect":1,"prospects":1,"prosperity":3,"prosperous":3,"protect":1,"protected":1,"protects":1,"protest":-2,"protesters":-2,"protesting":-2,"protests":-2,"proud":2,"proudly":2,"provoke":-1,"provoked":-1,"provokes":-1,"provoking":-1,"prudence":2,"pseudoscience":-3,"psychopathic":-2,"punish":-2,"punished":-2,"punishes":-2,"punishing":-2,"punitive":-2,"pure":1,"purest":1,"purposeful":2,"pushy":-1,"puzzled":-2,"quaking":-2,"qualities":2,"quality":2,"questionable":-2,"questioned":-1,"questioning":-1,"racism":-3,"racist":-3,"racists":-3,"rage":-2,"rageful":-2,"rainy":-1,"rant":-3,"ranter":-3,"ranters":-3,"rants":-3,"rape":-4,"raped":-4,"rapist":-4,"rapture":2,"raptured":2,"raptures":2,"rapturous":4,"rash":-2,"ratified":2,"reach":1,"reached":1,"reaches":1,"reaching":1,"reassure":1,"reassured":1,"reassures":1,"reassuring":2,"rebel":-2,"rebellion":-2,"rebels":-2,"recession":-2,"reckless":-2,"recognition":2,"recommend":2,"recommended":2,"recommends":2,"redeemed":2,"refine":1,"refined":1,"refines":1,"refreshingly":2,"refuse":-2,"refused":-2,"refuses":-2,"refusing":-2,"regret":-2,"regretful":-2,"regrets":-2,"regretted":-2,"regretting":-2,"reigning":1,"reject":-1,"rejected":-1,"rejecting":-1,"rejection":-2,"rejects":-1,"rejoice":4,"rejoiced":4,"rejoices":4,"rejoicing":4,"relaxed":2,"relentless":-1,"reliability":2,"reliable":2,"reliably":2,"reliant":2,"relieve":1,"relieved":2,"relieves":1,"relieving":2,"relishing":2,"remarkable":2,"remorse":-2,"repellent":-2,"repercussion":-2,"repercussions":-2,"reprimand":-2,"reprimanded":-2,"reprimanding":-2,"reprimands":-2,"repulse":-1,"repulsed":-2,"repulsive":-2,"rescue":2,"rescued":2,"rescues":2,"resentful":-2,"resign":-1,"resigned":-1,"resigning":-1,"resigns":-1,"resolute":2,"resolution":2,"resolve":2,"resolved":2,"resolves":2,"resolving":2,"respect":2,"respected":2,"respects":2,"responsibility":1,"responsible":2,"responsive":2,"restful":2,"restless":-2,"restore":1,"restored":1,"restores":1,"restoring":1,"restrict":-2,"restricted":-2,"restricting":-2,"restriction":-2,"restrictive":-1,"restricts":-2,"retained":-1,"retard":-2,"retarded":-2,"retreat":-1,"revenge":-2,"revengeful":-2,"revered":2,"revive":2,"revives":2,"revolting":-2,"reward":2,"rewarded":2,"rewarding":2,"rewards":2,"rich":2,"richly":2,"ridiculous":-3,"rig":-1,"rigged":-1,"right direction":3,"righteousness":2,"rightful":2,"rightfully":2,"rigorous":3,"rigorously":3,"riot":-2,"riots":-2,"rise":1,"rises":1,"risk":-2,"risks":-2,"risky":-2,"riveting":3,"rob":-2,"robber":-2,"robed":-2,"robing":-2,"robs":-2,"robust":2,"rofl":4,"roflcopter":4,"roflmao":4,"romance":2,"romantical":2,"romantically":2,"rose":1,"rotfl":4,"rotflmfao":4,"rotflol":4,"rotten":-3,"rude":-2,"ruin":-2,"ruined":-2,"ruining":-2,"ruins":-2,"sabotage":-2,"sad":-2,"sadden":-2,"saddened":-2,"sadly":-2,"safe":1,"safely":1,"safer":2,"safety":1,"salient":1,"salute":2,"saluted":2,"salutes":2,"saluting":2,"salvation":2,"sappy":-1,"sarcastic":-2,"satisfied":2,"savange":-2,"savanges":-2,"save":2,"saved":2,"savings":1,"scam":-2,"scams":-2,"scandal":-3,"scandalous":-3,"scandals":-3,"scapegoat":-2,"scapegoats":-2,"scare":-2,"scared":-2,"scar":-2,"scars":-2,"scary":-2,"sceptical":-2,"scold":-2,"scoop":3,"scorn":-2,"scornful":-2,"scream":-2,"screamed":-2,"screaming":-2,"screams":-2,"screwed":-2,"screwed up":-3,"scum":-3,"scumbag":-4,"seamless":2,"seamlessly":2,"secure":2,"secured":2,"secures":2,"sedition":-2,"seditious":-2,"seduced":-1,"self-abuse":-2,"self-confident":2,"self-contradictory":-2,"self-deluded":-2,"selfish":-3,"selfishness":-3,"sentence":-2,"sentenced":-2,"sentences":-2,"sentencing":-2,"serene":2,"settlement":1,"settlements":1,"severe":-2,"severely":-2,"sexist":-2,"sexistic":-2,"sexy":3,"shaky":-2,"shame":-2,"shamed":-2,"shameful":-2,"share":1,"shared":1,"shares":1,"shattered":-2,"shit":-4,"shithead":-4,"shitty":-3,"shock":-2,"shocked":-2,"shocking":-2,"shocks":-2,"shoody":-2,"shoot":-1,"short-sighted":-2,"short-sightedness":-2,"shortage":-2,"shortages":-2,"shrew":-4,"shy":-1,"sick":-2,"sickness":-2,"side-effect":-2,"side-effects":-2,"sigh":-2,"significance":1,"significant":1,"silencing":-1,"silly":-1,"simplicity":1,"sin":-2,"sincere":2,"sincerely":2,"sincerest":2,"sincerity":2,"sinful":-3,"singleminded":-2,"sinister":-2,"sins":-2,"skeptic":-2,"skeptical":-2,"skepticism":-2,"skeptics":-2,"slam":-2,"slash":-2,"slashed":-2,"slashes":-2,"slashing":-2,"slave":-3,"slavery":-3,"slaves":-3,"sleeplessness":-2,"slick":2,"slicker":2,"slickest":2,"slip":-1,"sloppy":-2,"sluggish":-2,"slumping":-1,"slut":-5,"smart":1,"smarter":2,"smartest":2,"smear":-2,"smile":2,"smiled":2,"smiles":2,"smiling":2,"smog":-2,"smuggle":-2,"smuggled":-2,"smuggling":-2,"smuggles":-2,"sneaky":-1,"sneeze":-2,"sneezed":-2,"sneezes":-2,"sneezing":-2,"snub":-2,"snubbed":-2,"snubbing":-2,"snubs":-2,"sobering":1,"solemn":-1,"solid":2,"solidarity":2,"solidified":2,"solidifies":2,"solidify":2,"solidifying":2,"solution":1,"solutions":1,"solve":1,"solved":1,"solves":1,"solving":1,"somber":-2,"some kind":0,"son-of-a-bitch":-5,"soothe":3,"soothed":3,"soothing":3,"sophisticated":2,"sore":-1,"sorrow":-2,"sorrowful":-2,"sorry":-1,"spacious":1,"spam":-2,"spammer":-3,"spammers":-3,"spamming":-2,"spark":1,"sparkle":3,"sparkles":3,"sparkling":3,"spearhead":2,"speculative":-2,"spirit":1,"spirited":2,"spiritless":-2,"spiteful":-2,"splendid":3,"spoiled":-2,"spoilt":-2,"spotless":2,"sprightly":2,"squander":-2,"squandered":-2,"squandering":-2,"squanders":-2,"squelched":-1,"stab":-2,"stabbed":-2,"stable":2,"stabs":-2,"stall":-2,"stalled":-2,"stalling":-2,"stamina":2,"stampede":-2,"stank":-2,"startled":-2,"startling":3,"starve":-2,"starved":-2,"starves":-2,"starving":-2,"steadfast":2,"steal":-2,"stealing":-2,"steals":-2,"stereotype":-2,"stereotyped":-2,"stifled":-1,"stimulate":1,"stimulated":1,"stimulates":1,"stimulating":2,"stingy":-2,"stink":-2,"stinked":-2,"stinker":-2,"stinking":-2,"stinks":-2,"stinky":-2,"stole":-2,"stolen":-2,"stop":-1,"stopped":-1,"stopping":-1,"stops":-1,"stout":2,"straight":1,"strange":-1,"strangely":-1,"strangled":-2,"strength":2,"strengthen":2,"strengthened":2,"strengthening":2,"strengthens":2,"strengths":2,"stress":-1,"stressed":-2,"stressor":-2,"stressors":-2,"stricken":-2,"strike":-1,"strikers":-2,"strikes":-1,"strong":2,"stronger":2,"strongest":2,"struck":-1,"struggle":-2,"struggled":-2,"struggles":-2,"struggling":-2,"stubborn":-2,"stuck":-2,"stunned":-2,"stunning":4,"stupid":-2,"stupidity":-3,"stupidly":-2,"suave":2,"subpoena":-2,"substantial":1,"substantially":1,"subversive":-2,"succeed":3,"succeeded":3,"succeeding":3,"succeeds":3,"success":2,"successful":3,"successfully":3,"suck":-3,"sucks":-3,"sue":-2,"sued":-2,"sueing":-2,"sues":-2,"suffer":-2,"suffered":-2,"sufferer":-2,"sufferers":-2,"suffering":-2,"suffers":-2,"suicidal":-2,"suicide":-2,"suicides":-2,"suing":-2,"suitable":2,"suited":2,"sulking":-2,"sulky":-2,"sullen":-2,"sunshine":2,"super":3,"superb":5,"superior":2,"support":2,"supported":2,"supporter":1,"supporters":1,"supporting":1,"supportive":2,"supports":2,"supreme":4,"survived":2,"surviving":2,"survivor":2,"suspect":-1,"suspected":-1,"suspecting":-1,"suspects":-1,"suspend":-1,"suspended":-1,"suspicious":-2,"sustainability":1,"sustainable":2,"sustainably":2,"swear":-2,"swearing":-2,"swears":-2,"sweet":2,"sweeter":3,"sweetest":3,"swift":2,"swiftly":2,"swindle":-3,"swindles":-3,"swindling":-3,"sympathetic":2,"sympathy":2,"taint":-2,"tainted":-2,"talent":2,"tard":-2,"tarnish":-2,"tarnished":-2,"tarnishes":-2,"tears":-2,"tender":2,"tenderness":2,"tense":-2,"tension":-1,"terrible":-3,"terribly":-3,"terrific":4,"terrifically":4,"terrified":-3,"terror":-3,"terrorist":-2,"terrorists":-2,"terrorize":-3,"terrorized":-3,"terrorizes":-3,"thank":2,"thankful":2,"thanks":2,"thorny":-2,"thoughtful":2,"thoughtless":-2,"threat":-2,"threaten":-2,"threatened":-2,"threatening":-2,"threatens":-2,"threats":-2,"thrilled":5,"thwart":-2,"thwarted":-2,"thwarting":-2,"thwarts":-2,"timid":-2,"timorous":-2,"tired":-2,"tits":-2,"tolerance":2,"tolerant":2,"toothless":-2,"top":2,"tops":2,"torn":-2,"torture":-4,"tortured":-4,"tortures":-4,"torturing":-4,"totalitarian":-2,"totalitarianism":-2,"tout":-2,"touted":-2,"touting":-2,"touts":-2,"toxic":-3,"tragedies":-2,"tragedy":-2,"tragic":-2,"tranquil":2,"transgress":-2,"transgressed":-2,"transgresses":-2,"transgressing":-2,"trap":-1,"trapped":-2,"traps":-1,"trauma":-3,"traumatic":-3,"travesty":-2,"treason":-3,"treasonous":-3,"treasure":2,"treasures":2,"trembling":-2,"tremor":-2,"tremors":-2,"tremulous":-2,"tribulation":-2,"tribute":2,"tricked":-2,"trickery":-2,"triumph":4,"triumphant":4,"troll":-2,"trouble":-2,"troubled":-2,"troubles":-2,"troubling":-2,"true":2,"trust":1,"trusted":2,"trusts":1,"tumor":-2,"twat":-5,"tyran":-3,"tyrannic":-3,"tyrannical":-3,"tyrannically":-3,"tyrans":-3,"ubiquitous":2,"ugh":-2,"ugliness":-3,"ugly":-3,"unable":-2,"unacceptable":-2,"unappeasable":-2,"unappreciated":-2,"unapproved":-2,"unattractive":-2,"unavailable":-1,"unavailing":-2,"unaware":-2,"unbearable":-2,"unbelievable":-1,"unbelieving":-1,"unbiased":2,"uncertain":-1,"unclear":-1,"uncomfortable":-2,"unconcerned":-2,"unconfirmed":-1,"unconvinced":-1,"uncredited":-1,"undecided":-1,"undercooked":-2,"underestimate":-1,"underestimated":-1,"underestimates":-1,"underestimating":-1,"undermine":-2,"undermined":-2,"undermines":-2,"undermining":-2,"underperform":-2,"underperformed":-2,"underperforming":-2,"underperforms":-2,"undeserving":-2,"undesirable":-2,"uneasy":-2,"unemployed":-1,"unemployment":-2,"unequal":-1,"unequaled":2,"unethical":-2,"uneventful":-2,"unfair":-2,"unfavorable":-2,"unfit":-2,"unfitted":-2,"unfocused":-2,"unforgivable":-3,"unforgiving":-2,"unfulfilled":-2,"unfunny":-2,"ungenerous":-2,"ungrateful":-3,"unhappy":-2,"unhappiness":-2,"unhealthy":-2,"unhygienic":-2,"unified":1,"unimaginative":-2,"unimpressed":-2,"uninspired":-2,"unintelligent":-2,"unintentional":-2,"uninvolving":-2,"united":1,"unjust":-2,"unlikely":-1,"unlovable":-2,"unloved":-2,"unmatched":1,"unmotivated":-2,"unoriginal":-2,"unparliamentary":-2,"unpleasant":-2,"unpleasantness":-2,"unprofessional":-2,"unravel":1,"unreleting":-2,"unresearched":-2,"unsafe":-2,"unsatisfied":-2,"unscientific":-2,"unsecured":-2,"unselfish":2,"unsettled":-1,"unsold":-1,"unsophisticated":-2,"unsound":-2,"unstable":-2,"unstoppable":2,"unsuccessful":-2,"unsuccessfully":-2,"unsupported":-2,"unsure":-1,"untarnished":2,"untrue":-2,"unwanted":-2,"unworthy":-2,"uplifting":2,"uproar":-3,"upset":-2,"upsets":-2,"upsetting":-2,"uptight":-2,"urgent":-1,"useful":2,"usefulness":2,"useless":-2,"uselessness":-2,"vague":-2,"validate":1,"validated":1,"validates":1,"validating":1,"vapid":-2,"verdict":-1,"verdicts":-1,"vested":1,"vexation":-2,"vexing":-2,"vibrant":3,"vicious":-2,"victim":-3,"victimization":-3,"victimize":-3,"victimized":-3,"victimizes":-3,"victimizing":-3,"victims":-3,"victor":3,"victors":3,"victory":3,"victories":3,"vigilant":3,"vigor":3,"vile":-3,"vindicate":2,"vindicated":2,"vindicates":2,"vindicating":2,"violate":-2,"violated":-2,"violates":-2,"violating":-2,"violation":-2,"violations":-2,"violence":-3,"violence-related":-3,"violent":-3,"violently":-3,"virtuous":2,"virulent":-2,"vision":1,"visionary":3,"visioning":1,"visions":1,"vitality":3,"vitamin":1,"vitriolic":-3,"vivacious":3,"vividly":2,"vociferous":-1,"vomit":-3,"vomited":-3,"vomiting":-3,"vomits":-3,"vulnerability":-2,"vulnerable":-2,"walkout":-2,"walkouts":-2,"wanker":-3,"want":1,"war":-2,"warfare":-2,"warm":1,"warmhearted":2,"warmness":2,"warmth":2,"warn":-2,"warned":-2,"warning":-3,"warnings":-3,"warns":-2,"waste":-1,"wasted":-2,"wasting":-2,"wavering":-1,"weak":-2,"weakened":-2,"weakness":-2,"weaknesses":-2,"wealth":3,"wealthier":2,"wealthy":2,"weary":-2,"weep":-2,"weeping":-2,"weird":-2,"welcome":2,"welcomed":2,"welcomes":2,"well-being":2,"well-championed":3,"well-developed":2,"well-established":2,"well-focused":2,"well-groomed":2,"well-proportioned":2,"whimsical":1,"whitewash":-3,"whore":-4,"wicked":-2,"widowed":-1,"willingness":2,"win":4,"winner":4,"winning":4,"wins":4,"winwin":3,"wisdom":1,"wish":1,"wishes":1,"wishing":1,"withdrawal":-3,"wits":2,"woebegone":-2,"woeful":-3,"won":3,"wonderful":4,"wonderfully":4,"woo":3,"woohoo":3,"wooo":4,"woow":4,"worn":-1,"worried":-3,"worries":-3,"worry":-3,"worrying":-3,"worse":-3,"worsen":-3,"worsened":-3,"worsening":-3,"worsens":-3,"worshiped":3,"worst":-3,"worth":2,"worthless":-2,"worthy":2,"wow":4,"wowow":4,"wowww":4,"wrathful":-3,"wreck":-2,"wrenching":-2,"wrong":-2,"wrongdoing":-2,"wrongdoings":-2,"wronged":-2,"wrongful":-2,"wrongfully":-2,"wrongly":-2,"wtf":-4,"wtff":-4,"wtfff":-4,"xo":3,"xoxo":3,"xoxoxo":4,"xoxoxoxo":4,"yeah":1,"yearning":1,"yeees":2,"yes":1,"youthful":2,"yucky":-2,"yummy":3,"zealot":-2,"zealots":-2,"zealous":2}')},3502:function(e){"use strict";e.exports=JSON.parse('{"cant":1,"can\'t":1,"dont":1,"don\'t":1,"doesnt":1,"doesn\'t":1,"not":1,"non":1,"wont":1,"won\'t":1,"isnt":1,"isn\'t":1}')}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,n(i.key),i)}}function n(t){var r=function(t,r){if("object"!=e(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,r||"default");if("object"!=e(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==e(r)?r:r+""}const i=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)},(r=[{key:"getResult",value:function(e,t){throw new Error("The method getResult is not implemented")}},{key:"getScore",value:function(){return 0}},{key:"isApplicable",value:function(e){return!0}}])&&t(e.prototype,r),n&&t(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,n}(),o=lodash;function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,s(n.key),n)}}function s(e){var t=function(e,t){if("object"!=a(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==a(t)?t:t+""}const l=function(){return e=function e(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.has=!1,this.score=0,this.maxScore=0,this.text="",this.empty="",this.tooltip="",this},(t=[{key:"hasScore",value:function(){return this.has}},{key:"getScore",value:function(){return this.score}},{key:"setScore",value:function(e){return(0,o.isNumber)(e)&&(this.score=e,this.has=0<e),this}},{key:"setMaxScore",value:function(e){return(0,o.isNumber)(e)&&(this.maxScore=e),this}},{key:"getMaxScore",value:function(){return this.maxScore}},{key:"hasText",value:function(){return""!==this.text}},{key:"getText",value:function(){return this.hasText()?this.text:this.empty}},{key:"setText",value:function(e){return this.text=(0,o.isUndefined)(e)?"":e,this}},{key:"setEmpty",value:function(e){return this.empty=(0,o.isUndefined)(e)?"":e,this}},{key:"hasTooltip",value:function(){return""!==this.tooltip}},{key:"getTooltip",value:function(){return this.tooltip}},{key:"setTooltip",value:function(e){return this.tooltip=(0,o.isUndefined)(e)?"":e,this}}])&&u(e.prototype,t),r&&u(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}(),c=function(e){return e?(0,o.toLower)((0,o.deburr)((0,o.trim)(e.replace(/[\s\./_]+/g,"-"),"-"))):""};r.dn(c);const d=function(e){return e.replace(/<\/?[a-z][^>]*?>/gi,"")};r.dn(d);const p=function(e){return e.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};r.dn(p);var f="[^<>&/\\[\\]\0- =]+?",y=new RegExp("\\["+f+"( [^\\]]+?)?\\]","g"),h=new RegExp("\\[/"+f+"\\]","g");const g=function(e){return e.replace(y,"").replace(h,"")};r.dn(g);const m=function(e){return e.replace(/--|\u2014/g," ")};r.dn(m);var b=new RegExp(["[","Â€-Â¿Ã—Ã·","â€€-â¯¿","â¸€-â¹¿","]"].join(""),"g");const v=function(e){return e.replace(b,"")};r.dn(v);const D=function(e){return e.replace(/<!--[\s\S]*?-->/g,"")};r.dn(D);const w=function(e){return e.replace(/&\S+?;/g,"")};r.dn(w);var k="[\\â€“\\-\\(\\)_\\[\\]â€™â€œâ€�\"'.?!:;,Â¿Â¡Â«Â»â€¹â€ºâ€”Ã—+&<>]+",F=new RegExp("^"+k),E=new RegExp(k+"$");const A=function(e){return e.replace(F,"").replace(E,"")};r.dn(A);const C=function(e,t){var r=function(e){if(""===(e=(0,o.flow)([d,D,g,p,w,m,v])(e)))return[];var t=e.split(/\s/g);return t=(0,o.map)(t,function(e){return A(e)}),(0,o.filter)(t,function(e){return""!==e.trim()})}(e);return t=t||!1,0!==r.length&&(!1===t?r:r.slice(0,t))};r.dn(C);var S={adulthood:!0,advice:!0,agenda:!0,aid:!0,alcohol:!0,ammo:!0,anime:!0,athletics:!0,audio:!0,bison:!0,blood:!0,bream:!0,buffalo:!0,butter:!0,carp:!0,cash:!0,chassis:!0,chess:!0,clothing:!0,cod:!0,commerce:!0,cooperation:!0,corps:!0,debris:!0,diabetes:!0,digestion:!0,elk:!0,energy:!0,equipment:!0,excretion:!0,expertise:!0,flounder:!0,fun:!0,gallows:!0,garbage:!0,graffiti:!0,headquarters:!0,health:!0,herpes:!0,highjinks:!0,homework:!0,housework:!0,information:!0,jeans:!0,justice:!0,kudos:!0,labour:!0,literature:!0,machinery:!0,mackerel:!0,mail:!0,media:!0,mews:!0,moose:!0,music:!0,mud:!0,manga:!0,news:!0,pike:!0,plankton:!0,pliers:!0,police:!0,pollution:!0,premises:!0,rain:!0,research:!0,rice:!0,salmon:!0,scissors:!0,seo:!0,series:!0,sewage:!0,shambles:!0,shrimp:!0,species:!0,staff:!0,swine:!0,tennis:!0,traffic:!0,transportation:!0,trout:!0,tuna:!0,wealth:!0,welfare:!0,whiting:!0,wildebeest:!0,wildlife:!0,wordpress:!0,you:!0},j=[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["whiskey","whiskies"],["thou","you"]],x=[[/[^aeiou]ese$/i,"$0"],[/deer$/i,"$0"],[/fish$/i,"$0"],[/measles$/i,"$0"],[/o[iu]s$/i,"$0"],[/pox$/i,"$0"],[/sheep$/i,"$0"],[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"]];function O(e){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},O(e)}function B(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,_(n.key),n)}}function _(e){var t=function(e,t){if("object"!=O(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==O(t)?t:t+""}var P=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.irregularSingles={},this.irregularPlurals={},this.uncountables=S,this.pluralizationRules=x,j.forEach(function(e){var t=e[0],r=e[1];this.irregularSingles[t]=r,this.irregularPlurals[r]=t},this)},t=[{key:"get",value:function(e){if(!e.length)return e;var t=e.toLowerCase();if(this.irregularPlurals.hasOwnProperty(t)&&this.restoreCase(e,t),this.irregularSingles.hasOwnProperty(t)&&this.restoreCase(e,this.irregularSingles[t]),this.uncountables.hasOwnProperty(t))return e;for(var r=this.pluralizationRules.length;r--;){var n=this.pluralizationRules[r];if(n[0].test(e))return this.replace(e,n)}return e}},{key:"restoreCase",value:function(e,t){return e===t?t:e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}},{key:"replace",value:function(e,t){var r=arguments,n=this;return e.replace(t[0],function(i,o){var a=n.interpolate(t[1],r);return""===i?n.restoreCase(e[o-1],a):n.restoreCase(i,a)})}},{key:"interpolate",value:function(e,t){return e.replace(/\$(\d{1,2})/g,function(e,r){return t[r]||""})}}],t&&B(e.prototype,t),r&&B(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();const T=P,z=wp.wordcount,R=function(e){return(0,z.count)(e,"words")};r.dn(R);const N=function(e){var t=[],r=[];e.forEach(function(e){t.push(e.word),r.push(e.plural)});var n=t.length,i=[];function a(t){e.forEach(function(e){e.plural===e.word||(0,o.includes)(t,e.plural)||i.push(t.join(" ").replace(e.word,e.plural))})}i.push(t.join(" "));for(var u=0;u<n*n;u++)(0,o.isUndefined)(i[u])||a(i[u].split(" "));return i.push(r.join(" ")),(0,o.uniq)(i)};r.dn(N);var M=r(8835);const q=wp.hooks;var I=/href=(["'])([^"']+)\1/i;function L(e){return"#"===e[0]}function $(e){var t=I.exec(e);return null===t?"":t[2]}function W(e,t){var r,n=$(e);return r=function(e){return M.parse(e).protocol}(n),r&&"http:"!==r&&"https:"!==r||L(n)?"other":function(e,t){var r=(0,q.applyFilters)("rankMath_analysis_isInternalLink",null,e,t);if(null!==r)return r;if(!(0,o.includes)(e,"//")&&"/"===e[0])return!0;if(L(e))return!1;var n=M.parse(e,!1,!0);return!n.host||(0,o.includes)(n.host,t)}(n,t)?"internal":"external"}function U(e,t){return e=e.toLowerCase(),(0,o.includes)(e,"dofollow")?"Dofollow":"internal"!==t&&rankMath.noFollowExternalLinks&&!(0,o.includes)(e,"nofollow")?(r=$(e),n=!0,i=M.parse(r,!1,!0),(rankMath.noFollowDomains.length?(rankMath.noFollowDomains.forEach(function(e){(0,o.includes)(i.host,e)&&(n=!1)}),n):rankMath.noFollowExcludeDomains.length&&(n=!1,rankMath.noFollowExcludeDomains.forEach(function(e){(0,o.includes)(i.host,e)&&(n=!0)}),n))?"Dofollow":"Nofollow"):(0,o.includes)(e,"<a")&&(0,o.includes)(e,"rel=")&&(0,o.includes)(e,"nofollow")?"Nofollow":"Dofollow";var r,n,i}const K=function(e){var t=function(e){return e.match(/<a [^>]*href=([\"'])[a-z/]([^\"']+)[^>]*>/gi)||[]}(e),r={total:0,internalTotal:0,internalDofollow:0,internalNofollow:0,externalTotal:0,externalDofollow:0,externalNofollow:0,otherTotal:0,otherDofollow:0,otherNofollow:0,anchors:t};return null===t||(r.total=t.length,t.forEach(function(e){var t=W(e,rankMath.parentDomain),n=U(e,t);r[t+"Total"]++,r[t+n]++})),r};r.dn(K);const H=[];function V(e){let t=-1;if(!e||!Array.isArray(e)&&!e.type)throw new Error("Expected node, not `"+e+"`");if("value"in e)return e.value;const r=(Array.isArray(e)?e:e.children)||H,n=[];for(;++t<r.length;)n[t]=V(r[t]);return n.join("")}const Y={}.hasOwnProperty;function G(e){return function(e){if(!e||!e.children)throw new Error("Missing children in `parent` for `modifier`");!function(e,t,r){let n=-1;if(!e)throw new Error("Iterate requires that |this| not be "+e);if(!Y.call(e,"length"))throw new Error("Iterate requires that |this| has a `length`");if("function"!=typeof t)throw new TypeError("`callback` must be a function");for(;++n<e.length;){if(!(n in e))continue;const i=t.call(r,e[n],n,e);"number"==typeof i&&(i<0&&(n=0),n=i-1)}}(e.children,t,e)};function t(t,r){return e(t,r,this)}}const Q=G(function(e,t,r){const n=r.children[t-1];if(n&&"children"in n&&"children"in e&&e.children.length>0){let i=-1;for(;e.children[++i];){const o=e.children[i];if("WordNode"===o.type)return;if("SymbolNode"===o.type||"PunctuationNode"===o.type){const i=V(o);if(","!==i&&";"!==i)return;return n.children.push(...e.children),n.position&&e.position&&(n.position.end=e.position.end),r.children.splice(t,1),t}}}}),J=/^([!"').?\u0F3B\u0F3D\u169C\u2019\u201D\u2026\u203A\u203D\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21\u2E23\u2E25\u2E27\u2E29\u2E56\u2E58\u2E5A\u2E5C\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63\u00BB\]}])\1*$/,Z=/^[ \t]*((\r?\n|\r)[\t ]*)+$/,X=/^([!.?\u2026\u203D]+)$/,ee=/^([&'\-.:=?@\u00AD\u00B7\u2010\u2011\u2019\u2027]|_+)$/,te=/^(?:[\d\u00B2\u00B3\u00B9\u00BC-\u00BE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]|\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDF50-\uDF59\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDEC0-\uDEC9\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD839[\uDCF0-\uDCF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9])+$/,re=/^\d/,ne=/^(?:[a-z\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5F\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C1\uA7C3\uA7C8\uA7CA\uA7D1\uA7D3\uA7D5\uA7D7\uA7D9\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]|\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E\uDF25-\uDF2A]|\uD83A[\uDD22-\uDD43])/,ie=/[\uD800-\uDFFF]/,oe=/[!"'-),-/:;?[-\]_{}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u201F\u2022-\u2027\u2032-\u203A\u203C-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,ae=/[\dA-Za-z\u00AA\u00B2\u00B3\u00B5\u00B9\u00BA\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088E\u0898-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09F4-\u09F9\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71-\u0B77\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BF2\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7E\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1-\u0CF3\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D63\u0D66-\u0D78\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECE\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u17F0-\u17F9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ACE\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u20D0-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA827\uA82C\uA830-\uA835\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE6\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD27\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDEFD-\uDF27\uDF30-\uDF54\uDF70-\uDF85\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC52-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE37\uDE3E-\uDE41\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDF00-\uDF10\uDF12-\uDF3A\uDF3E-\uDF42\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC40-\uDC55]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDC30-\uDC6D\uDC8F\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAE\uDEC0-\uDEF9]|\uD839[\uDCD0-\uDCF9\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF]|\uDB40[\uDD00-\uDDEF]/,ue=/[\t-\r \u0085\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,se=G(function(e,t,r){if("children"in e&&e.children.length>0&&t>0){const n=r.children[t-1],i=e.children[0],o=e.children[1];if(n&&"SentenceNode"===n.type&&("SymbolNode"===i.type||"PunctuationNode"===i.type)&&J.test(V(i)))return e.children.shift(),n.children.push(i),i.position&&n.position&&(n.position.end=i.position.end),o&&o.position&&e.position&&(e.position.start=o.position.start),t-1}}),le=G(function(e,t,r){if("SentenceNode"!==e.type)return;const n=e.children;let i=0;for(;++i<n.length-1;){const o=n[i];if("WhiteSpaceNode"!==o.type||V(o).split(/\r\n|\r|\n/).length<3)continue;e.children=n.slice(0,i);const a={type:"SentenceNode",children:n.slice(i+1)},u=n[i-1],s=n[i+1];if(r.children.splice(t+1,0,o,a),e.position&&u.position&&s.position){const t=e.position.end;e.position.end=u.position.end,a.position={start:s.position.start,end:t}}return t+1}}),ce=G(function(e,t,r){if("children"in e){const n=e.children[e.children.length-1];if(n&&"WhiteSpaceNode"===n.type){e.children.pop(),r.children.splice(t+1,0,n);const i=e.children[e.children.length-1];return i&&i.position&&e.position&&(e.position.end=i.position.end),t}}});function de(e){return function(t){const r=t&&t.children;let n=-1;if(!r)throw new Error("Missing children in `parent` for `visit`");for(;++n in r;)e(r[n],n,t)}}const pe=de(function(e,t,r){if("children"in e&&e.children){const n=e.children[0];if(n&&"WhiteSpaceNode"===n.type){e.children.shift(),r.children.splice(t,0,n);const i=e.children[0];i&&i.position&&e.position&&(e.position.start=i.position.start)}}}),fe=G(function(e,t,r){if(t>0&&("SymbolNode"===e.type||"PunctuationNode"===e.type)&&"-"===V(e)){const n=r.children,i=n[t-1],o=n[t+1];if((!o||"WordNode"!==o.type)&&i&&"WordNode"===i.type)return n.splice(t,1),i.children.push(e),i.position&&e.position&&(i.position.end=e.position.end),t}}),ye=G(function(e,t,r){const n=r.children[t-1];if(n&&"SentenceNode"===n.type&&"SentenceNode"===e.type){const i=e.children[0];if(i&&"WordNode"===i.type&&re.test(V(i)))return n.children.push(...e.children),r.children.splice(t,1),n.position&&e.position&&(n.position.end=e.position.end),t}}),he=G(function(e,t,r){if("SentenceNode"===e.type&&t>0){const n=r.children[t-1],i=e.children;if(i.length>0&&"SentenceNode"===n.type){let o=-1;for(;i[++o];){const a=i[o];if("WordNode"===a.type){if(!ne.test(V(a)))return;return n.children.push(...i),r.children.splice(t,1),n.position&&e.position&&(n.position.end=e.position.end),t}if("SymbolNode"===a.type||"PunctuationNode"===a.type)return}}}}),ge=G(function(e,t,r){if("SymbolNode"!==e.type&&"PunctuationNode"!==e.type||"&"!==V(e))return;const n=r.children,i=n[t+1];return t>0&&"WordNode"===n[t-1].type||!i||"WordNode"!==i.type?void 0:(n.splice(t,1),i.children.unshift(e),i.position&&e.position&&(i.position.start=e.position.start),t-1)}),me=G(function(e,t,r){if(t>0&&"PunctuationNode"===e.type&&"."===V(e)){const n=r.children[t-1];if("WordNode"===n.type&&n.children&&1!==n.children.length&&n.children.length%2!=0){let i=n.children.length,o=!0;for(;n.children[--i];){const e=V(n.children[i]);if(i%2==0){if(e.length>1)return;te.test(e)||(o=!1)}else if("."!==e){if(i<n.children.length-2)break;return}}if(!o)return r.children.splice(t,1),n.children.push(e),n.position&&e.position&&(n.position.end=e.position.end),t}}}),be=G(function(e,t,r){if(t>0&&("SymbolNode"===e.type||"PunctuationNode"===e.type)){const e=r.children,n=e[t-1];if(n&&"WordNode"===n.type){let r=t-1;const i=[];let o=[];for(;e[++r];){const t=e[r];if("WordNode"===t.type)i.push(...o,...t.children),o=[];else{if("SymbolNode"!==t.type&&"PunctuationNode"!==t.type||!ee.test(V(t)))break;o.push(t)}}if(i.length>0){o.length>0&&(r-=o.length),e.splice(t,r-t),n.children.push(...i);const a=i[i.length-1];return n.position&&a.position&&(n.position.end=a.position.end),t}}}}),ve=G(function(e,t,r){const n=r.children,i=n[t-1];if(i&&"WordNode"===i.type&&("SymbolNode"===e.type||"PunctuationNode"===e.type)&&"/"===V(e)){const r=V(i);let o=e;const a=[e];let u=1,s="";const l=n[t+1];if(l&&"WordNode"===l.type&&(s=V(l),o=l,a.push(...l.children),u++),r.length<3&&(!s||s.length<3))return i.children.push(...a),n.splice(t,u),i.position&&o.position&&(i.position.end=o.position.end),t}}),De=G(function(e,t,r){if("children"in e){let n=-1;for(;e.children[++n];)if("WordNode"===e.children[n].type)return;const i=r.children[t-1];if(i&&"children"in i)return i.children.push(...e.children),r.children.splice(t,1),i.position&&e.position&&(i.position.end=e.position.end),t;const o=r.children[t+1];o&&"children"in o&&(o.children.unshift(...e.children),o.position&&e.position&&(o.position.start=e.position.start),r.children.splice(t,1))}}),we=new RegExp("^([0-9]{1,3}|[a-z]|al|ca|cap|cca|cent|cf|cit|con|cp|cwt|ead|etc|ff|fl|ibid|id|nem|op|pro|seq|sic|stat|tem|viz)$"),ke=G(function(e,t,r){if("children"in e&&e.children.length>1){const n=e.children[e.children.length-1];if(n&&("PunctuationNode"===n.type||"SymbolNode"===n.type)&&"."===V(n)){const i=e.children[e.children.length-2];if(i&&"WordNode"===i.type&&we.test(V(i).toLowerCase())){i.children.push(n),e.children.pop(),n.position&&i.position&&(i.position.end=n.position.end);const o=r.children[t+1];if(o&&"SentenceNode"===o.type)return e.children.push(...o.children),r.children.splice(t+1,1),o.position&&e.position&&(e.position.end=o.position.end),t-1}}}}),Fe=de(function(e,t,r){if("children"in e){let t=e.children.length,r=!1;for(;e.children[--t];){const n=e.children[t];if("SymbolNode"!==n.type&&"PunctuationNode"!==n.type){"WordNode"===n.type&&(r=!0);continue}if(!X.test(V(n)))continue;if(!r){r=!0;continue}if("."!==V(n))continue;const i=e.children[t-1],o=e.children[t+1];if(i&&"WordNode"===i.type){const r=e.children[t+2];if(o&&r&&"WhiteSpaceNode"===o.type&&"."===V(r))continue;e.children.splice(t,1),i.children.push(n),n.position&&i.position&&(i.position.end=n.position.end),t--}else o&&"WordNode"===o.type&&(e.children.splice(t,1),o.children.unshift(n),n.position&&o.position&&(o.position.start=n.position.start))}}}),Ee=G(function(e,t,r){if("children"in e&&0===e.children.length)return r.children.splice(t,1),t}),Ae=de(function(e,t,r){const n=r.children;!(e.position&&t<1)||r.position&&r.position.start||(Ce(r),r.position.start=e.position.start),!e.position||t!==n.length-1||r.position&&r.position.end||(Ce(r),r.position.end=e.position.end)});function Ce(e){e.position||(e.position={})}class Se{constructor(e,t){const r=t||e;this.doc=r?String(r):void 0,this.tokenizeRootPlugins=[...this.tokenizeRootPlugins],this.tokenizeParagraphPlugins=[...this.tokenizeParagraphPlugins],this.tokenizeSentencePlugins=[...this.tokenizeSentencePlugins]}parse(e){return this.tokenizeRoot(e||this.doc)}tokenizeRoot(e){const t={type:"RootNode",children:je(this.tokenizeParagraph(e),"WhiteSpaceNode",Z)};let r=-1;for(;this.tokenizeRootPlugins[++r];)this.tokenizeRootPlugins[r](t);return t}tokenizeParagraph(e){const t={type:"ParagraphNode",children:je(this.tokenizeSentence(e),"PunctuationNode",X)};let r=-1;for(;this.tokenizeParagraphPlugins[++r];)this.tokenizeParagraphPlugins[r](t);return t}tokenizeSentence(e){const t={type:"SentenceNode",children:this.tokenize(e)};let r=-1;for(;this.tokenizeSentencePlugins[++r];)this.tokenizeSentencePlugins[r](t);return t}tokenize(e){const t=[];if(!e)return t;const r={line:1,column:1,offset:0};let n,i,o=0,a=0,u={...r};for(;a<e.length;){const l=e.charAt(a),c=ue.test(l)?"WhiteSpaceNode":oe.test(l)?"PunctuationNode":ae.test(l)?"WordNode":"SymbolNode";o<a&&n&&c&&(n!==c||"WordNode"!==n&&"WhiteSpaceNode"!==n&&l!==i&&!ie.test(l))&&(t.push(s(n,e.slice(o,a))),o=a,u={...r}),"\r"===l||"\n"===l&&"\r"!==i?(r.line++,r.column=1):"\n"!==l&&r.column++,r.offset++,n=c,i=l,a++}return n&&o<a&&t.push(s(n,e.slice(o,a))),t;function s(e,t){return"WordNode"===e?{type:"WordNode",children:[{type:"TextNode",value:t,position:{start:u,end:{...r}}}],position:{start:u,end:{...r}}}:{type:e,value:t,position:{start:u,end:{...r}}}}}}function je(e,t,r){const n=[];let i=-1,o=0;for(;++i<e.children.length;){const a=e.children[i];if(i===e.children.length-1||a.type===t&&r.test(V(a))){const t={type:e.type,children:e.children.slice(o,i+1)},r=e.children[o],u=a;r.position&&u.position&&(t.position={start:r.position.start,end:u.position.end}),n.push(t),o=i+1}}return n}Se.prototype.tokenizeSentencePlugins=[ge,fe,be,ve,me,Ae],Se.prototype.tokenizeParagraphPlugins=[De,se,he,ye,ke,Q,Fe,pe,ce,le,Ee,Ae],Se.prototype.tokenizeRootPlugins=[pe,ce,Ee,Ae];const xe=/^(t(?:hurs|bsp|sp)|s(?:e(?:pt|c)|q)|(?:tue|bbl|yd)s|thu|sep|tue|bbl|nov|aug|ju[ln]|(?:ap|h)r|(?:ja|su)n|m(?:ar|on|in)|(?:sa|oc|[kpq])t|g(?:ro|al)|f(?:eb|ri|[lt])|d(?:ec|oz)|wed|l(?:bs|td)|inc?|mi|gr|yd|lb|oz|cu)$/,Oe=/^((?:Northant|Derby|S(?:hrop|taff)|W(?:ark|orc)|L(?:in|ei|an)c|C(?:amb|he)|Trea|York|B(?:uck|e(?:rk|d))|(?:Not|Wil)t|H(?:er|[au]n)t|Glo|Pre)s|Northumb|N(?:or(?:thd|f)|e(?:br|v)|atl)|M(?:(?:essr|as|se)s|i(?:ddx|nn|ch|ss)|ont|lle|s(?:gr|s)|ddx|(?:me|r)s?|a[jn]|ex|gr|o|d|e|s|[tx])?|Heref|P(?:enna|[ahot])|D(?:e(?:rbs|[lv])|r)|Westm|(?:Cali|Pro)f|S(?:a(?:lop|sk)|uff|om|e[cn]|[qrxy])|(?:Bldg|Kan)s?|Here|P(?:enn?|k)|St(?:af)?|W(?:isc|arw|yo)|C(?:umb|olo)|B(?:lvd|rig)|(?:Ok|F)la|(?:Pk|[FH])wy|A(?:r(?:iz|k)|lt?a|tty|m[bd])|(?:Cap|S(?:up|g)|On|Ru|U)t|(?:Ter|Cd|D[ou]|Sn|J)r|(?:Oxo|Co[nr]|Ten|Ke|Ge|Ho)n|Wash|N(?:eb|at)|W(?:is|ar|o)|C(?:al|ol?)|Qu[e\u00E9]|I(?:ll|a)|Tex|G(?:ov|a)|Ind|R(?:te|e[pv]|d)|Ida|(?:Yu|Da)k|(?:Or|Av)e|Ssx|Ok|La|Br|Rt|Id|V[at]|Ky|Lt|F[rt])$/,Be=/^(ol?)$/,_e=/^(t(?:were|(?:wa|i)s)|cause|e[mr]|im|\d\ds?)$/,Pe=/^['â€™]$/;class Te extends Se{}Te.prototype.tokenizeSentencePlugins=[de(function(e,t,r){if("PunctuationNode"===e.type||"SymbolNode"===e.type){const n=r.children,i=n.length,o=V(e);if("/"===o){const r=n[t-1];r&&"WordNode"===r.type&&"w"===V(r).toLowerCase()&&(n.splice(t,1),r.children.push(e),r.position&&e.position&&(r.position.end=e.position.end))}else if(Pe.test(o)){const r=n[t-1];if(t>2&&t<i-1&&"WordNode"===r.type&&"WhiteSpaceNode"===n[t-2].type&&"WhiteSpaceNode"===n[t+1].type&&Be.test(V(r).toLowerCase()))return n.splice(t,1),r.children.push(e),void(r.position&&e.position&&(r.position.end=e.position.end));if(t!==i-1&&"WordNode"===n[t+1].type&&(0===t||"WordNode"!==n[t-1].type)){const r=n[t+1],i=V(r).toLowerCase(),o=n[t+2];"WordNode"===r.type&&_e.test(i)?(n.splice(t,1),r.children.unshift(e),r.position&&e.position&&(r.position.start=e.position.start)):"WordNode"===r.type&&"n"===i&&o&&"PunctuationNode"===o.type&&Pe.test(V(o))&&(n.splice(t,1),n.splice(t+1,1),r.children.unshift(e),r.children.push(o),r.position&&(e.position&&(r.position.start=e.position.start),o.position&&(r.position.end=o.position.end)))}}}}),...Se.prototype.tokenizeSentencePlugins],Te.prototype.tokenizeParagraphPlugins=[G(function(e,t,r){if("children"in e&&e.children){const n=e.children[e.children.length-1],i=e.children[e.children.length-2];if(n&&"PunctuationNode"===n.type&&"."===V(n)&&i&&"WordNode"===i.type){const o=V(i);if(xe.test(o.toLowerCase())||Oe.test(o)){i.children.push(n),e.children.pop(),n.position&&i.position&&(i.position.end=n.position.end);const o=r.children[t+1];if(o&&"SentenceNode"===o.type)return e.children.push(...o.children),r.children.splice(t+1,1),o.position&&e.position&&(e.position.end=o.position.end),t-1}}}}),...Se.prototype.tokenizeParagraphPlugins];const ze=function(e){if(""===(e=(0,o.flow)([d,D,g,p,w,m])(e)))return 0;var t=(new Te).tokenizeParagraph(e).children;return(0,o.filter)(t,{type:"SentenceNode"}).length};r.dn(ze);const Re=function(e){var t=(0,o.map)(e,function(e){return function(e){return 3>=(e=e.toLowerCase()).length?1:null===(e=e.replace(/(?:[^laeiouy]es|ed|lle|[^laeiouy]e)$/,"").replace(/^y/,"").match(/[aeiouy]{1,2}/g))?0:e.length}(e)});return(0,o.sum)(t)};r.dn(Re);const Ne=function(e){return"."===(e=e.replace(/\b[0-9]+\b/g,""))?"":e};r.dn(Ne);const Me=function(e){if(""===e)return!1;e=Ne(e);var t=C(e),r=ze(e),n=t.length;return 0!==r&&0!==n&&function(e,t,r){return 206.835-t/e*1.015-r/t*84.6}(r,n,Re(t)).toFixed(2)};r.dn(Me);const qe=wp.autop,Ie=function(e){return e.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};r.dn(Ie);const Le=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,t)};r.dn(Le);const $e=function(e){return e.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};r.dn($e);const We=function(e){return e.replace(/&nbsp;/g," ").replace(/\s+/g," ")};function Ue(e){return(0,o.isUndefined)(e)||!e?"":(0,o.flow)([Ie,Le,d,D,w,p,$e])(e)}function Ke(e){return(0,o.isUndefined)(e)?"":(0,o.flow)([d,p])(e)}r.dn(We);const He=function(e,t){var r=function(e,t){for(var r,n=/<p(?:[^>]+)?>(.*?)<\/p>/gi,i=[];null!==(r=n.exec(e));)i.push(r);return(0,o.map)(i,function(e){return t?Ue(e[1]):e[1]})}(e=(0,o.flow)([g,D,qe.autop])(e),t=t||!1);return 0<r.length?r:[t?Ue(e):e]};r.dn(He);const Ve=function(e){var t=[];return He(e).map(function(e){return t.push({wordCount:R(e),text:e})}),(0,o.filter)(t,function(e){return 0<e.wordCount})};function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function Ge(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Qe(n.key),n)}}function Qe(e){var t=function(e,t){if("object"!=Ye(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ye(t)?t:t+""}r.dn(Ve);const Je=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.setPaper(t),this.researches={combinations:N,fleschReading:Me,getLinkStats:K,getParagraphs:Ve,getWords:C,pluralize:new T,removePunctuation:A,slugify:c,stripTags:d,wordCount:R}},(t=[{key:"setPaper",value:function(e){this.paper=e}},{key:"getResearches",value:function(){return this.researches}},{key:"getResearch",value:function(e){return!(0,o.isUndefined)(e)&&!(0,o.isEmpty)(e)&&!!this.hasResearch(e)&&this.getResearches()[e]}},{key:"hasResearch",value:function(e){return(0,o.has)(this.getResearches(),e)}}])&&Ge(e.prototype,t),r&&Ge(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}(),Ze=wp.i18n;function Xe(e){return Xe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xe(e)}function et(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,tt(n.key),n)}}function tt(e){var t=function(e,t){if("object"!=Xe(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Xe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Xe(t)?t:t+""}function rt(e,t,r){return t=it(t),function(e,t){if(t&&("object"==Xe(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,nt()?Reflect.construct(t,r||[],it(e).constructor):t.apply(e,r))}function nt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(nt=function(){return!!e})()}function it(e){return it=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},it(e)}function ot(e,t){return ot=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ot(e,t)}var at=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),rt(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ot(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add a few images and/or videos to make your content appealing.","seo-by-rank-math")).setTooltip((0,Ze.__)("Content with images and/or video feels more inviting to users. It also helps supplement your textual content.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult();return e.hasText()?(r.setScore(this.calculateScore(e)).setText(this.translateScore(r)),r):(e.hasThumbnail()&&r.setScore(1).setText(this.translateScore(r)),r)}},{key:"isApplicable",value:function(e){return e.hasText()||e.hasThumbnail()}},{key:"calculateScore",value:function(e){var t=0;return t+=this.calculateImagesScore(this.getImages(e)),t+=this.calculateVideosScore(this.getVideos(e.getText())),Math.min(this.getScore(),t)}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_contentHasAssets_score",6)}},{key:"calculateImagesScore",value:function(e){var t={0:0,1:1,2:2,3:4};return(0,o.has)(t,e)?t[e]:6}},{key:"calculateVideosScore",value:function(e){var t={0:0,1:1};return(0,o.has)(t,e)?t[e]:2}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Your content contains images and/or video(s).","seo-by-rank-math"):(0,Ze.__)("You are not using rich media like images or videos.","seo-by-rank-math")}},{key:"getImages",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t=(0,o.isNull)(t)?e.getText():t;var r=[].concat(this.match(t,"<img(?:[^>]+)?>"),this.match(t,"\\[gallery( [^\\]]+?)?\\]"));return e.hasThumbnail()&&r.push(e.getThumbnail()),r.length}},{key:"hasVideoUrl",value:function(e){return this.match(e,/(http:\/\/|https:\/\/|)(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/)}},{key:"getVideosFromIframe",value:function(e){var t=this;return{count:this.match(e,"<iframe(?:[^>]+)?>").filter(function(r){return!!t.hasVideoUrl(r)&&(e=e.replace(r,""),!0)}).length,text:e}}},{key:"getVideosFromVideoTag",value:function(e){var t=this;return{count:this.match(e,"<video(?:[^>]+)?>").filter(function(r){return!!t.hasVideoUrl(r)&&(e=e.replace(r,""),!0)}).length,text:e}}},{key:"getVideosFromShortcodes",value:function(e){var t=this;return{count:this.match(e,"\\[video( [^\\]]+?)?\\]").filter(function(r){return!!t.hasVideoUrl(r)&&(e=e.replace(r,""),!0)}).length,text:e}}},{key:"getVideosByURL",value:function(e){return{count:this.hasVideoUrl(e).length,text:e}}},{key:"getVideos",value:function(e){var t=0,r=this.getVideosFromIframe(e);t+=parseInt(r.count),e=r.text;var n=this.getVideosFromVideoTag(e);t+=parseInt(n.count),e=n.text;var i=this.getVideosFromShortcodes(e);t+=parseInt(i.count),e=i.text;var o=this.getVideosByURL(e);return t+=parseInt(o.count),e=o.text,t}},{key:"match",value:function(e,t){var r=new RegExp(t,"ig"),n=e.match(r);return null===n?[]:n}}],n&&et(r.prototype,n),i&&et(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const ut=at;function st(e){return st="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},st(e)}function lt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ct(n.key),n)}}function ct(e){var t=function(e,t){if("object"!=st(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=st(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==st(t)?t:t+""}function dt(e,t,r){return t=ft(t),function(e,t){if(t&&("object"==st(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,pt()?Reflect.construct(t,r||[],ft(e).constructor):t.apply(e,r))}function pt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(pt=function(){return!!e})()}function ft(e){return ft=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ft(e)}function yt(e,t){return yt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},yt(e,t)}var ht=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),dt(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yt(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add short and concise paragraphs for better readability and UX.","seo-by-rank-math")).setTooltip((0,Ze.__)("Short paragraphs are easier to read and more pleasing to the eye. Long paragraphs scare the visitor, and they might result to SERPs looking for better readable content.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getParagraphs")(e.getText()).some(function(e){return 120<e.wordCount});return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e){return e?null:this.getScore()}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_contentHasShortParagraphs_score",3)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("You are using short paragraphs.","seo-by-rank-math"):(0,Ze.__)("At least one paragraph is long. Consider using short paragraphs.","seo-by-rank-math")}}])&&lt(r.prototype,n),i&&lt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const gt=ht;function mt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=rankMath.links[e]||"";if(!n)return"#";if(!t)return n;var i={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=n,a="",u=n.indexOf("#");-1!==u&&(o=n.substring(0,u),a=n.substring(u));var s=Object.keys(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join("&"),l=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+l+s+a+r}function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}function vt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Dt(n.key),n)}}function Dt(e){var t=function(e,t){if("object"!=bt(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=bt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==bt(t)?t:t+""}function wt(e,t,r){return t=Ft(t),function(e,t){if(t&&("object"==bt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,kt()?Reflect.construct(t,r||[],Ft(e).constructor):t.apply(e,r))}function kt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(kt=function(){return!!e})()}function Ft(e){return Ft=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ft(e)}function Et(e,t){return Et=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Et(e,t)}r.dn(mt);var At=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),wt(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Et(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use Table of Content to break-down your text.","seo-by-rank-math")).setTooltip((0,Ze.__)("Table of Contents help break down content into smaller, digestible chunks. It makes reading easier which in turn results in better rankings.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=rankMath.assessor.hasTOCPlugin||(0,o.includes)(e.getTextLower(),"wp-block-rank-math-toc-block");return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_contentHasTOC_score",2)}},{key:"translateScore",value:function(e){var t=mt("toc","Content Analysis");return e.hasScore()?(0,Ze.sprintf)((0,Ze.__)("You seem to be using a %1$s to break-down your text.","seo-by-rank-math"),'<a href="'+t+'" target="_blank">Table of Contents plugin</a>'):(0,Ze.sprintf)((0,Ze.__)("You don't seem to be using a %1$s.","seo-by-rank-math"),'<a href="'+t+'" target="_blank">Table of Contents plugin</a>')}}])&&vt(r.prototype,n),i&&vt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Ct=At,St=function(e){return e.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&")};function jt(e){return jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jt(e)}function xt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Ot(n.key),n)}}function Ot(e){var t=function(e,t){if("object"!=jt(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=jt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==jt(t)?t:t+""}function Bt(e,t,r){return t=Pt(t),function(e,t){if(t&&("object"==jt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,_t()?Reflect.construct(t,r||[],Pt(e).constructor):t.apply(e,r))}function _t(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_t=function(){return!!e})()}function Pt(e){return Pt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Pt(e)}function Tt(e,t){return Tt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Tt(e,t)}r.dn(St);var zt=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Bt(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tt(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Keyword Density is 0. Aim for around 1% Keyword Density.","seo-by-rank-math")).setTooltip((0,Ze.__)("There is no ideal keyword density percentage, but it should not be too high. The most important thing is to keep the copy natural.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("wordCount")(e.getTextLower()),i=e.get("keywords").map(function(e){return C($e(e)).join(" ")});if(!1===n||0===n||(0,o.isEmpty)(i))return r;var a=C(Ke(e.getText()));if(!a)return r;a=a.join(" ");var u=new RegExp((0,o.map)(i,St).join("|"),"gi"),s=(a.match(u)||[]).length,l=(0,q.applyFilters)("rankMath_analysis_keywordDensity",(s/n*100).toFixed(2),s),c=this.calculateScore(l);return r.setScore(c.score).setText((0,Ze.sprintf)(this.translateScore(c.type),l,s)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"translateScore",value:function(e){return"low"===e?(0,Ze.__)("Keyword Density is %1$s which is low, the Focus Keyword and combination appears %2$s times.","seo-by-rank-math"):"high"===e?(0,Ze.__)("Keyword Density is %1$s which is high, the Focus Keyword and combination appears %2$s times.","seo-by-rank-math"):(0,Ze.__)("Keyword Density is %1$s, the Focus Keyword and combination appears %2$s times.","seo-by-rank-math")}},{key:"calculateScore",value:function(e){var t=this.getBoundaries();return.5>e?{type:"low",score:t.fail}:2.5<e?{type:"high",score:t.fail}:(0,o.inRange)(e,.5,.75)?{type:"fair",score:t.fair}:(0,o.inRange)(e,.76,1)?{type:"good",score:t.good}:{type:"best",score:t.best}}},{key:"getScore",value:function(){return this.getBoundaries().best}},{key:"getBoundaries",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordDensity_score",{fail:0,fair:2,good:3,best:6})}}],n&&xt(r.prototype,n),i&&xt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Rt=zt;function Nt(e){return Nt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Nt(e)}function Mt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,qt(n.key),n)}}function qt(e){var t=function(e,t){if("object"!=Nt(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Nt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Nt(t)?t:t+""}function It(e,t,r){return t=$t(t),function(e,t){if(t&&("object"==Nt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Lt()?Reflect.construct(t,r||[],$t(e).constructor):t.apply(e,r))}function Lt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Lt=function(){return!!e})()}function $t(e){return $t=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},$t(e)}function Wt(e,t){return Wt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Wt(e,t)}var Ut=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),It(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Wt(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use Focus Keyword at the beginning of your content.","seo-by-rank-math")).setTooltip((0,Ze.__)("The first 10% of the content should contain the Focus Keyword preferably at the beginning.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getWords"),i=n(e.getTextLower());if(!1===i)return r;400<i.length&&(i=i.slice(0,Math.floor(.1*i.length))),i=i.join(" ");var a=n($e(e.getLower("keyword"))).join(" "),u=(0,o.includes)(i,a);return r.setScore(this.calculateScore(u)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordIn10Percent_score",3)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword appears in the first 10% of the content.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword doesn't appear at the beginning of your content.","seo-by-rank-math")}}],n&&Mt(r.prototype,n),i&&Mt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Kt=Ut,Ht=function(e,t){if(!(t=C(t)))return!1;t=t.join(" ");var r=C($e(e.getLower("keyword"))).join(" ");return(0,o.includes)(t,r)};function Vt(e){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(e)}function Yt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Gt(n.key),n)}}function Gt(e){var t=function(e,t){if("object"!=Vt(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Vt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Vt(t)?t:t+""}function Qt(e,t,r){return t=Zt(t),function(e,t){if(t&&("object"==Vt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Jt()?Reflect.construct(t,r||[],Zt(e).constructor):t.apply(e,r))}function Jt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Jt=function(){return!!e})()}function Zt(e){return Zt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Zt(e)}function Xt(e,t){return Xt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Xt(e,t)}r.dn(Ht);var er=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Qt(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Xt(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use Focus Keyword in the content.","seo-by-rank-math")).setTooltip((0,Ze.__)("It is recommended to make the focus keyword appear in the post content too.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=Ht(e,Ke(e.getTextLower()));return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordInContent_score",3)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword found in the content.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword doesn't appear in the content.","seo-by-rank-math")}}])&&Yt(r.prototype,n),i&&Yt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const tr=er;function rr(e){return rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},rr(e)}function nr(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ir(n.key),n)}}function ir(e){var t=function(e,t){if("object"!=rr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=rr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==rr(t)?t:t+""}function or(e,t,r){return t=ur(t),function(e,t){if(t&&("object"==rr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ar()?Reflect.construct(t,r||[],ur(e).constructor):t.apply(e,r))}function ar(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ar=function(){return!!e})()}function ur(e){return ur=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ur(e)}function sr(e,t){return sr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},sr(e,t)}var lr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),or(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sr(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add an image with your Focus Keyword as alt text.","seo-by-rank-math")).setTooltip((0,Ze.__)("It is recommended to add the focus keyword in the alt attribute of one or more images.","seo-by-rank-math"))}},{key:"getResult",value:function(e){var t=this.newResult(),r=e.getLower("thumbnailAlt"),n=e.getLower("keyword");if(n===r||(0,o.includes)(r,n))return t.setScore(this.calculateScore(!0)).setText(this.translateScore(t)),t;n=$e((0,o.uniq)(n.split(" ")).join(" "));for(var i,a=/<img[^>]*\salt=(["'])(.*?)\1/gi,u=[],s=e.getTextLower();!(0,o.isNull)(i=a.exec(s));)u.push(i[2]);var l=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/ /g,".*");if(null!==u)for(var c=0;c<u.length;c++)if(null!==u[c].match(new RegExp(l,"gi")))return t.setScore(this.calculateScore(!0)).setText(this.translateScore(t)),t;return a=new RegExp("\\[gallery( [^\\]]+?)?\\]","ig"),null!==s.match(a)&&t.setScore(this.calculateScore(!0)).setText((0,Ze.__)("We detected a gallery in your content & assuming that you added Focus Keyword in alt in at least one of the gallery images.","seo-by-rank-math")),t}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&(e.hasText()||e.hasThumbnailAltText())}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordInImageAlt_score",2)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword found in image alt attribute(s).","seo-by-rank-math"):(0,Ze.__)("Focus Keyword not found in image alt attribute(s).","seo-by-rank-math")}}])&&nr(r.prototype,n),i&&nr(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const cr=lr;function dr(e){return dr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},dr(e)}function pr(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,fr(n.key),n)}}function fr(e){var t=function(e,t){if("object"!=dr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=dr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==dr(t)?t:t+""}function yr(e,t,r){return t=gr(t),function(e,t){if(t&&("object"==dr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,hr()?Reflect.construct(t,r||[],gr(e).constructor):t.apply(e,r))}function hr(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(hr=function(){return!!e})()}function gr(e){return gr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},gr(e)}function mr(e,t){return mr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},mr(e,t)}var br=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),yr(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mr(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add Focus Keyword to your SEO Meta Description.","seo-by-rank-math")).setTooltip((0,Ze.__)("Make sure the focus keyword appears in the SEO description too.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=Ht(e,e.getLower("description"));return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasDescription()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordInMetaDescription_score",2)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword used inside SEO Meta Description.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword not found in your SEO Meta Description.","seo-by-rank-math")}}])&&pr(r.prototype,n),i&&pr(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const vr=br,Dr=wp.url;function wr(e){return wr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wr(e)}function kr(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Fr(n.key),n)}}function Fr(e){var t=function(e,t){if("object"!=wr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=wr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==wr(t)?t:t+""}function Er(e,t,r){return t=Cr(t),function(e,t){if(t&&("object"==wr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ar()?Reflect.construct(t,r||[],Cr(e).constructor):t.apply(e,r))}function Ar(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Ar=function(){return!!e})()}function Cr(e){return Cr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Cr(e)}function Sr(e,t){return Sr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Sr(e,t)}var jr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Er(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Sr(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use Focus Keyword in the URL.","seo-by-rank-math")).setTooltip((0,Ze.__)("Include the focus keyword in the slug (permalink) of this post.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=e.getUrl().replace(/[-_]/gi,"-"),i=(0,Dr.cleanForSlug)(n),a=(0,o.includes)(i,(0,Dr.cleanForSlug)(e.getKeywordPermalink(t)))||(0,o.includes)(i,(0,Dr.cleanForSlug)(e.getPermalinkWithStopwords(t)));return r.setScore(this.calculateScore(a)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasPermalink()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordInPermalink_score",5)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword used in the URL.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword not found in the URL.","seo-by-rank-math")}}])&&kr(r.prototype,n),i&&kr(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const xr=jr;function Or(e){return Or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Or(e)}function Br(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,_r(n.key),n)}}function _r(e){var t=function(e,t){if("object"!=Or(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Or(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Or(t)?t:t+""}function Pr(e,t,r){return t=zr(t),function(e,t){if(t&&("object"==Or(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Tr()?Reflect.construct(t,r||[],zr(e).constructor):t.apply(e,r))}function Tr(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Tr=function(){return!!e})()}function zr(e){return zr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},zr(e)}function Rr(e,t){return Rr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Rr(e,t)}var Nr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Pr(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Rr(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use Focus Keyword in subheading(s) like H2, H3, H4, etc..","seo-by-rank-math")).setTooltip((0,Ze.__)("It is recommended to add the focus keyword as part of one or more subheadings in the content.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getWords")(e.getLower("keyword")).map(function(e){return St($e(e))}).join("[\\s\\W]+"),i=new RegExp("<h[2-6][^>]*>[\\s\\S]*?"+n+"[\\s\\S]*?</h[2-6]>","gi"),o=null!==e.getTextLower().match(i);return r.setScore(this.calculateScore(o)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_keywordInSubheadings_score",3)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword found in the subheading(s).","seo-by-rank-math"):(0,Ze.__)("Focus Keyword not found in subheading(s) like H2, H3, H4, etc..","seo-by-rank-math")}}],n&&Br(r.prototype,n),i&&Br(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Mr=Nr;function qr(e){return qr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qr(e)}function Ir(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Lr(n.key),n)}}function Lr(e){var t=function(e,t){if("object"!=qr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=qr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==qr(t)?t:t+""}function $r(e,t,r){return t=Ur(t),function(e,t){if(t&&("object"==qr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Wr()?Reflect.construct(t,r||[],Ur(e).constructor):t.apply(e,r))}function Wr(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Wr=function(){return!!e})()}function Ur(e){return Ur=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ur(e)}function Kr(e,t){return Kr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Kr(e,t)}var Hr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),$r(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Kr(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(e){return(new l).setMaxScore(this.getScore(e.getShortLocale())).setEmpty((0,Ze.__)("Add Focus Keyword to the SEO title.","seo-by-rank-math")).setTooltip((0,Ze.__)("Make sure the focus keyword appears in the SEO post title too.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(e),n=Ht(e,e.getLower("title"));return r.setScore(this.calculateScore(n,e)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasTitle()}},{key:"calculateScore",value:function(e,t){return e?this.getScore(t.getShortLocale()):null}},{key:"getScore",value:function(e){var t="en"===e?36:38;return(0,q.applyFilters)("rankMath_analysis_keywordInTitle_score",t)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Hurray! You're using Focus Keyword in the SEO Title.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword does not appear in the SEO title.","seo-by-rank-math")}}])&&Ir(r.prototype,n),i&&Ir(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Vr=Hr,Yr=jQuery;var Gr=r.n(Yr);function Qr(e){return Qr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qr(e)}function Jr(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,rn(n.key),n)}}function Zr(e,t,r){return t=en(t),function(e,t){if(t&&("object"==Qr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Xr()?Reflect.construct(t,r||[],en(e).constructor):t.apply(e,r))}function Xr(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Xr=function(){return!!e})()}function en(e){return en=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},en(e)}function tn(e,t){return tn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},tn(e,t)}function rn(e){var t=function(e,t){if("object"!=Qr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Qr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Qr(t)?t:t+""}var nn=function(e){function t(){var e,r,n,i;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,a=new Array(o),u=0;u<o;u++)a[u]=arguments[u];return e=Zr(this,t,[].concat(a)),r=e,i={},(n=rn(n="keywordsChecked"))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&tn(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Set a Focus Keyword for this content.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this,n=this.newResult(),i=e.getLower("keyword").trim();return(0,o.isUndefined)(this.keywordsChecked[i])?(this.keywordsChecked[i]=!0,Gr().ajax({url:rankMath.ajaxurl,type:"GET",data:{keyword:i,action:"rank_math_is_keyword_new",security:rankMath.security,objectID:rankMath.objectID,objectType:rankMath.objectType}}).done(function(e){r.keywordsChecked[i]=e.isNew,n.setText(r.translateScore(i,e.isNew)),n.has=e.isNew,(0,q.doAction)("rankMath_analysis_keywordUsage_updated",i,n)}),n.setText((0,Ze.__)("We are searching in database.","seo-by-rank-math")),n):(n.has=this.keywordsChecked[i],n.setText(this.translateScore(i,this.keywordsChecked[i])),(0,q.doAction)("rankMath_analysis_keywordUsage_updated",i,n),n)}},{key:"isApplicable",value:function(e){return e.hasKeyword()}},{key:"translateScore",value:function(e,t){return t?(0,Ze.__)("You haven't used this Focus Keyword before.","seo-by-rank-math"):(0,Ze.sprintf)((0,Ze.__)("You have %1$s this Focus Keyword.","seo-by-rank-math"),'<a target="_blank" href="'+this.changeKeywordInLink(e)+'">'+(0,Ze.__)("already used","seo-by-rank-math")+"</a>")}},{key:"changeKeywordInLink",value:function(e){return rankMath.assessor.focusKeywordLink.replace("%focus_keyword%",e).replace("%post_type%",rankMath.objectType).replace("%yaxonomy%",rankMath.objectType)}}])&&Jr(r.prototype,n),i&&Jr(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const on=nn;function an(e){return an="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},an(e)}function un(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,sn(n.key),n)}}function sn(e){var t=function(e,t){if("object"!=an(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=an(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==an(t)?t:t+""}function ln(e,t,r){return t=dn(t),function(e,t){if(t&&("object"==an(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,cn()?Reflect.construct(t,r||[],dn(e).constructor):t.apply(e,r))}function cn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(cn=function(){return!!e})()}function dn(e){return dn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},dn(e)}function pn(e,t){return pn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},pn(e,t)}var fn=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),ln(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pn(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty(this.getFilteredText("emptyContent")).setTooltip(this.getFilteredText("tooltipText"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("wordCount")(e.getTextLower());return!1===n||0===n||r.setScore(this.calculateScore(n,e)).setText((0,Ze.sprintf)(this.translateScore(r),n)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e,t){var r=this.getBoundaries(t),n=1e5,i=!1;return(0,o.forEach)(r,function(t){(0,o.inRange)(e,t.boundary,n)&&(i=t),n=t.boundary+1}),!1!==i?i.score:0}},{key:"translateScore",value:function(e){return e.hasScore()?this.getFilteredText("hasScore"):this.getFilteredText("failed")}},{key:"getScore",value:function(){return this.getBoundaries().recommended.score}},{key:"getBoundaries",value:function(e){return(0,q.applyFilters)("rankMath_analysis_contentLength_boundaries",{recommended:{boundary:2500,score:8},belowRecommended:{boundary:2e3,score:5},medium:{boundary:1500,score:4},belowMedium:{boundary:1e3,score:3},low:{boundary:600,score:2}},e)}},{key:"getFilteredText",value:function(e){return(0,q.applyFilters)("rankMath_analysis_contentLength",{hasScore:(0,Ze.__)("Content is %1$d words long. Good job!","seo-by-rank-math"),failed:(0,Ze.__)("Content is %1$d words long. Consider using at least 600 words.","seo-by-rank-math"),emptyContent:(0,Ze.sprintf)((0,Ze.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="'+mt("content-length","Content Analysis")+'" target="_blank">600-2500 words</a>'),tooltipText:(0,Ze.__)("Minimum recommended content length should be 600 words.","seo-by-rank-math")})[e]}}],n&&un(r.prototype,n),i&&un(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const yn=fn;function hn(e){return hn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hn(e)}function gn(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,mn(n.key),n)}}function mn(e){var t=function(e,t){if("object"!=hn(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=hn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==hn(t)?t:t+""}function bn(e,t,r){return t=Dn(t),function(e,t){if(t&&("object"==hn(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,vn()?Reflect.construct(t,r||[],Dn(e).constructor):t.apply(e,r))}function vn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(vn=function(){return!!e})()}function Dn(e){return Dn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Dn(e)}function wn(e,t){return wn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},wn(e,t)}var kn=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),bn(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wn(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("URL unavailable. Add a short URL.","seo-by-rank-math")).setTooltip((0,Ze.__)("Permalink should be at most 75 characters long.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=e.getUrl().length;return r.setScore(this.calculateScore(n)).setText((0,Ze.sprintf)(this.translateScore(r),n)),r}},{key:"isApplicable",value:function(e){return e.hasUrl()}},{key:"calculateScore",value:function(e){return 75<e?null:this.getScore()}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_permalinkLength_score",4)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("URL is %1$d characters long. Kudos!","seo-by-rank-math"):(0,Ze.__)("URL is %1$d characters long. Consider shortening it.","seo-by-rank-math")}}])&&gn(r.prototype,n),i&&gn(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Fn=kn;function En(e){return En="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},En(e)}function An(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Cn(n.key),n)}}function Cn(e){var t=function(e,t){if("object"!=En(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=En(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==En(t)?t:t+""}function Sn(e,t,r){return t=xn(t),function(e,t){if(t&&("object"==En(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,jn()?Reflect.construct(t,r||[],xn(e).constructor):t.apply(e,r))}function jn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(jn=function(){return!!e})()}function xn(e){return xn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},xn(e)}function On(e,t){return On=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},On(e,t)}var Bn=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Sn(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&On(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Link out to external resources.","seo-by-rank-math")).setTooltip((0,Ze.__)("It helps visitors read more about a topic and prevents pogosticking.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getLinkStats")(e.getText());return 0===n.total||r.setScore(this.calculateScore(0<n.externalTotal)).setText((0,Ze.sprintf)(this.translateScore(r),n.externalTotal)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_linksHasExternals_score",4)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Great! You are linking to external resources.","seo-by-rank-math"):(0,Ze.__)("No outbound links were found. Link out to external resources.","seo-by-rank-math")}}])&&An(r.prototype,n),i&&An(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const _n=Bn;function Pn(e){return Pn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pn(e)}function Tn(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,zn(n.key),n)}}function zn(e){var t=function(e,t){if("object"!=Pn(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Pn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Pn(t)?t:t+""}function Rn(e,t,r){return t=Mn(t),function(e,t){if(t&&("object"==Pn(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Nn()?Reflect.construct(t,r||[],Mn(e).constructor):t.apply(e,r))}function Nn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Nn=function(){return!!e})()}function Mn(e){return Mn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Mn(e)}function qn(e,t){return qn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},qn(e,t)}var In=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Rn(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&qn(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add internal links in your content.","seo-by-rank-math")).setTooltip((0,Ze.__)("Internal links decrease your bounce rate and improve SEO.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getLinkStats")(e.getText());return 0===n.total||r.setScore(this.calculateScore(0<n.internalTotal)).setText((0,Ze.sprintf)(this.translateScore(r),n.internalTotal)),r}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_linksHasInternal_score",5)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("You are linking to other resources on your website which is great.","seo-by-rank-math"):(0,Ze.__)("We couldn't find any internal links in your content.","seo-by-rank-math")}}])&&Tn(r.prototype,n),i&&Tn(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Ln=In;function $n(e){return $n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$n(e)}function Wn(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Un(n.key),n)}}function Un(e){var t=function(e,t){if("object"!=$n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=$n(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$n(t)?t:t+""}function Kn(e,t,r){return t=Vn(t),function(e,t){if(t&&("object"==$n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Hn()?Reflect.construct(t,r||[],Vn(e).constructor):t.apply(e,r))}function Hn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Hn=function(){return!!e})()}function Vn(e){return Vn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Vn(e)}function Yn(e,t){return Yn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Yn(e,t)}var Gn=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Kn(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Yn(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add DoFollow links pointing to external resources.","seo-by-rank-math")).setTooltip((0,Ze.__)("PageRank Sculpting no longer works. Your posts should have a mix of nofollow and DoFollow links.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getLinkStats")(e.getText());return 0===n.total?(r.setText((0,Ze.__)("Add DoFollow links pointing to external resources.","seo-by-rank-math")),r):(r.setScore(this.calculateScore(0<n.externalDofollow)).setText((0,Ze.sprintf)(this.translateScore(r),n.externalTotal)),r)}},{key:"isApplicable",value:function(e){return e.hasText()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_linksNotAllExternals_score",2)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("At least one external link with DoFollow found in your content.","seo-by-rank-math"):(0,Ze.__)("We found %1$d outbound links in your content and all of them are nofollow.","seo-by-rank-math")}}])&&Wn(r.prototype,n),i&&Wn(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Qn=Gn;function Jn(e){return Jn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jn(e)}function Zn(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Xn(n.key),n)}}function Xn(e){var t=function(e,t){if("object"!=Jn(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Jn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Jn(t)?t:t+""}function ei(e,t,r){return t=ri(t),function(e,t){if(t&&("object"==Jn(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ti()?Reflect.construct(t,r||[],ri(e).constructor):t.apply(e,r))}function ti(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ti=function(){return!!e})()}function ri(e){return ri=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ri(e)}function ni(e,t){return ni=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ni(e,t)}var ii=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),ei(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ni(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Add a number to your title to improve CTR.","seo-by-rank-math")).setTooltip((0,Ze.__)("Headlines with numbers are 36% more likely to generate clicks, according to research by Conductor.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=/\d+/.test(e.getTitle());return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasTitle()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_titleHasNumber_score",1)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("You are using a number in your SEO title.","seo-by-rank-math"):(0,Ze.__)("Your SEO title doesn't contain a number.","seo-by-rank-math")}}])&&Zn(r.prototype,n),i&&Zn(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const oi=ii;var ai={};(0,o.isUndefined)(rankMath.assessor)||(0,o.forEach)(rankMath.assessor.diacritics,function(e,t){return ai[t]=new RegExp(e,"g")});const ui=function(e){if((0,o.isUndefined)(e))return e;for(var t in ai)e=e.replace(ai[t],t);return e};function si(e){return si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},si(e)}function li(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ci(n.key),n)}}function ci(e){var t=function(e,t){if("object"!=si(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=si(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==si(t)?t:t+""}function di(e,t,r){return t=fi(t),function(e,t){if(t&&("object"==si(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,pi()?Reflect.construct(t,r||[],fi(e).constructor):t.apply(e,r))}function pi(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(pi=function(){return!!e})()}function fi(e){return fi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},fi(e)}function yi(e,t){return yi=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},yi(e,t)}r.dn(ui);var hi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),di(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yi(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return this.hasPowerWords()?(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.sprintf)((0,Ze.__)("Add %s to your title to increase CTR.","seo-by-rank-math"),'<a href="https://rankmath.com/blog/power-words/" target="_blank">power words</a>')).setTooltip((0,Ze.__)("Power Words are tried-and-true words that copywriters use to attract more clicks.","seo-by-rank-math")):null}},{key:"getResult",value:function(e){var t=this.newResult(),r=(0,o.map)(e.getLower("title").split(" "),ui),n=(0,o.map)(rankMath.assessor.powerWords,ui),i=(0,o.filter)(r,function(e){return(0,o.some)(n,function(t){return e===t||(0,o.startsWith)(e,t)&&e.length-t.length<=4})}).length,a=i>0;return t.setScore(this.calculateScore(a)).setText((0,Ze.sprintf)(this.translateScore(t),i)),t}},{key:"isApplicable",value:function(e){return this.hasPowerWords()&&e.hasTitle()}},{key:"hasPowerWords",value:function(){return!(0,o.isEmpty)(rankMath.assessor.powerWords)}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_titleHasPowerWords_score",1)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Your title contains %1$d power word(s). Booyah!","seo-by-rank-math"):(0,Ze.sprintf)((0,Ze.__)("Your title doesn't contain a %1$s. Add at least one.","seo-by-rank-math"),'<a href="https://rankmath.com/blog/power-words/" target="_blank">power word</a>')}}])&&li(r.prototype,n),i&&li(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const gi=hi;var mi,bi=r(362),vi=r.n(bi);function Di(e){return Di="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Di(e)}function wi(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Di(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Di(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Di(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ki={extras:(mi={"a+":5,abound:2,abounds:2,abundance:4,abundant:4,accessable:3,accessible:3,acclaim:2,acclaimed:2,acclamation:2,accolade:3,accolades:3,accommodative:2,accomodative:2,accomplish:5,accomplished:5,accomplishment:5,accomplishments:5,accurate:3,accurately:3,achievable:3,achievement:3,achievements:3,achievible:3,acumen:1,adaptable:1,adaptive:1,adequate:1,adjustable:2,admirable:2,admirably:2,admiration:2,admire:2,admirer:2,admiring:2,admiringly:2,adorable:3,adore:3,adored:3,adorer:3,adoring:3,adoringly:3,adroit:2,adroitly:2,adulate:2,adulation:1,adulatory:1,advanced:3,advantage:3,advantageous:2,advantageously:2,advantages:2,adventuresome:2,adventurous:2,advocate:2,advocated:2,advocates:2,affability:2,affable:2,affably:2,affectation:3,affection:3,affectionate:3,affinity:3,affirm:2,affirmation:2,affirmative:2,affluence:2,affluent:3,afford:2,affordable:2,affordably:2,afordable:2,agile:3,agilely:2,agility:2,agreeable:3,agreeableness:3,agreeably:2,"all-around":2,alluring:3,alluringly:3,altruistic:3,altruistically:3,amaze:4,amazed:4,amazement:4,amazes:4,amazing:4,amazingly:4,ambitious:4,ambitiously:4,ameliorate:4,amenable:3,amenity:3,amiability:3,amiabily:3,amiable:3,amicability:3,amicable:3,amicably:3,amity:2,ample:2,amply:2,amuse:2,amusing:2,amusingly:2,angel:5,angelic:5,apotheosis:1,appeal:4,appealing:4,applaud:4,appreciable:4,appreciate:4,appreciated:4,appreciates:4,appreciative:4,appreciatively:4,appropriate:4,approval:4,approve:4,ardent:1,ardently:1,ardor:1,articulate:1,aspiration:3,aspirations:3,aspire:3,assurance:3,assurances:3,assure:3,assuredly:3,assuring:3,astonish:4,astonished:4,astonishing:4,astonishingly:4,astonishment:4,astound:4,astounded:4,astounding:4,astoundingly:4,astutely:1,attentive:1,attraction:1,attractive:1,attractively:1,attune:1,audible:1,audibly:1,auspicious:1,authentic:1,authoritative:1,autonomous:1,available:1,aver:1,avid:1,avidly:1,award:1,awarded:1,awards:1,awe:5,awed:1,awesome:5,awesomely:4,awesomeness:4,awestruck:4,awsome:4,backbone:3,balanced:3,bargain:3,beauteous:3,beautiful:3,beautifullly:3,beautifully:3,beautify:3,beauty:3,beckon:2,beckoned:1,beckoning:1,beckons:1,believable:3,believeable:3,beloved:3,benefactor:2,beneficent:2,beneficial:2,beneficially:2,beneficiary:2,benefit:3,benefits:3,benevolence:1,benevolent:1,benifits:2,best:5,"best-known":5,"best-performing":5,"best-selling":5,better:5,"better-known":5,"better-than-expected":4,beutifully:5,blameless:4,bless:3,blessing:3,bliss:4,blissful:4,blissfully:4,blithe:1,blockbuster:5,bloom:3,blossom:4,bolster:1,bonny:1,bonus:4,bonuses:4,boom:2,booming:3,boost:4,boundless:4,bountiful:3,brainiest:3,brainy:3,"brand-new":5,brave:3,bravery:3,bravo:2,breakthrough:5,breakthroughs:5,breathlessness:5,breathtaking:5,breathtakingly:5,breeze:4,bright:4,brighten:4,brighter:4,brightest:4,brilliance:4,brilliances:4,brilliant:4,brilliantly:4,brisk:3,brotherly:4,bullish:1,buoyant:1,cajole:1,calm:3,calming:3,calmness:3,capability:4,capable:4,capably:4,captivate:4,captivating:4,carefree:1,cashback:1,cashbacks:1,catchy:1,celebrate:4,celebrated:4,celebration:4,celebratory:4,champ:3,champion:3,charisma:4,charismatic:4,charitable:3,charm:5,charming:5,charmingly:5,chaste:1,cheaper:1,cheapest:1,cheer:4,cheerful:4,cheery:4,cherish:4,cherished:4,cherub:1,chic:1,chivalrous:2,chivalry:2,civility:2,civilize:2,clarity:4,classic:1,classy:1,clean:3,cleaner:3,cleanest:3,cleanliness:3,cleanly:3,clear:3,"clear-cut":3,cleared:3,clearer:3,clearly:3,clears:3,clever:3,cleverly:2,cohere:2,coherence:2,coherent:2,cohesive:2,colorful:3,comely:1,comfort:4,comfortable:4,comfortably:4,comforting:4,comfy:4,commend:1,commendable:1,commendably:1,commitment:3,commodious:1,compact:3,compactly:2,compassion:3,compassionate:4,compatible:3,competitive:3,complement:3,complementary:3,complemented:3,complements:3,compliant:2,compliment:5,complimentary:5,comprehensive:5,conciliate:1,conciliatory:1,concise:2,confidence:3,confident:4,congenial:1,congratulate:5,congratulation:5,congratulations:5,congratulatory:5,conscientious:2,considerate:4,consistent:4,consistently:4,constructive:4,consummate:1,contentment:1,continuity:4,contrasty:1,contribution:2,convenience:3,convenient:3,conveniently:3,convience:3,convienient:3,convient:3,convincing:3,convincingly:3,cool:5,coolest:5,cooperative:3,cooperatively:3,cornerstone:3,correct:5,correctly:5,"cost-effective":3,"cost-saving":3,"counter-attack":2,"counter-attacks":2,courage:3,courageous:3,courageously:3,courageousness:3,courteous:3,courtly:2,covenant:2,cozy:2,creative:2,credence:2,credible:2,crisp:1,crisper:1,cure:4,"cure-all":1,cushy:1,cute:5,cuteness:5,danke:1,danken:1,daring:5,daringly:5,darling:5,dashing:5,dauntless:1,dawn:1,dazzle:5,dazzled:5,dazzling:5,"dead-cheap":1,"dead-on":1,decency:5,decent:5,decisive:5,decisiveness:5,dedicated:5,defeat:1,defeated:1,defeating:1,defeats:1,defender:1,deference:1,deft:1,deginified:1,delectable:1,delicacy:4,delicate:4,delicious:4,delight:4,delighted:4,delightful:4,delightfully:4,delightfulness:4,dependable:2,dependably:2,deservedly:5,deserving:5,desirable:5,desiring:5,desirous:5,destiny:5,detachable:5,devout:5,dexterous:5,dexterously:5,dextrous:5,dignified:5,dignify:5,dignity:5,diligence:3,diligent:3,diligently:3,diplomatic:3,"dirt-cheap":3,distinction:3,distinctive:3,distinguished:3,diversified:3,divine:5,divinely:5,dominate:5,dominated:5,dominates:5,dote:1,dotingly:1,doubtless:1,dreamland:1,dumbfounded:1,dumbfounding:1,"dummy-proof":1,durable:3,dynamic:3,eager:5,eagerly:5,eagerness:5,earnest:5,earnestly:5,earnestness:5,ease:4,eased:4,eases:4,easier:4,easiest:4,easiness:4,easing:4,easy:4,"easy-to-use":5,easygoing:5,ebullience:1,ebullient:1,ebulliently:1,ecenomical:1,economical:5,ecstasies:5,ecstasy:5,ecstatic:5,ecstatically:5,edify:1,educated:5,effective:5,effectively:5,effectiveness:5,effectual:5,efficacious:5,efficient:5,efficiently:5,effortless:5,effortlessly:5,effusion:5,effusive:5,effusively:5,effusiveness:5,elan:2,elate:2,elated:2,elatedly:2,elation:3,electrify:5,elegance:5,elegant:5,elegantly:5,elevate:5,elite:5,eloquence:3,eloquent:3,eloquently:3,embolden:3,eminence:3,eminent:3,empathize:5,empathy:5,empower:5,empowerment:5,enchant:5,enchanted:5,enchanting:5,enchantingly:5,encourage:5,encouragement:5,encouraging:5,encouragingly:5,endear:3,endearing:3,endorse:3,endorsed:3,endorsement:3,endorses:3,endorsing:2,energetic:5,energize:5,"energy-efficient":5,"energy-saving":5,engaging:2,engrossing:2,enhance:5,enhanced:5,enhancement:5,enhances:5,enjoy:5,enjoyable:5,enjoyably:5,enjoyed:5,enjoying:5,enjoyment:5,enjoys:5,enlighten:5,enlightenment:5,enliven:1,ennoble:2,enough:3,enrapt:2,enrapture:1,enraptured:1,enrich:5,enrichment:3,enterprising:3,entertain:3,entertaining:5,entertains:5,enthral:2,enthrall:1,enthralled:1,enthuse:1,enthusiasm:4,enthusiast:4,enthusiastic:4,enthusiastically:3,entice:3,enticed:4,enticing:3,enticingly:4,entranced:3,entrancing:3,entrust:4,enviable:3,enviably:3,envious:3,enviously:3,enviousness:1,envy:1,equitable:1,ergonomical:5,"err-free":1,erudite:1,ethical:4,eulogize:2,euphoria:3,euphoric:3,euphorically:3,evaluative:4,evenly:5,eventful:4,everlasting:5,evocative:2,exalt:1,exaltation:2,exalted:3,exaltedly:3,exalting:3,exaltingly:3,examplar:1,examplary:1,excallent:1,exceed:5,exceeded:5,exceeding:5,exceedingly:5,exceeds:5,excel:5,exceled:5,excelent:5,excellant:5,excelled:5,excellence:5,excellency:5,excellent:5,excellently:5,excels:5,exceptional:5,exceptionally:5,excite:5,excited:5,excitedly:5,excitedness:5,excitement:5,excites:5,exciting:5,excitingly:5,exellent:5,exemplar:3,exemplary:3,exhilarate:3,exhilarating:3,exhilaratingly:3,exhilaration:3,exonerate:3,expansive:3,expeditiously:3,expertly:4,exquisite:1,exquisitely:1,extol:1,extoll:1,extraordinarily:5,extraordinary:5,exuberance:3,exuberant:3,exuberantly:3,exult:1,exultant:1,exultation:1,exultingly:1,"eye-catch":5,"eye-catching":5,eyecatch:5,eyecatching:5,fabulous:1,fabulously:4,facilitate:4,fair:5,fairly:5,fairness:5,faith:4,faithful:4,faithfully:4,faithfulness:4,fame:4,famed:4,famous:4,famously:4,fancier:5,fancinating:5,fancy:5,fanfare:3,fans:3,fantastic:3,fantastically:3,fascinate:5,fascinating:5,fascinatingly:5,fascination:5,fashionable:5,fashionably:5,fast:2,"fast-growing":2,"fast-paced":2,faster:5,fastest:5,"fastest-growing":5,faultless:3,fav:4,fave:4,favor:4,favorable:4,favored:4,favorite:4,favorited:4,favour:4,fearless:5,fearlessly:5,feasible:3,feasibly:3,feat:2,"feature-rich":2,fecilitous:2,feisty:2,felicitate:2,felicitous:2,felicity:3,fertile:3,fervent:3,fervently:3,fervid:3,fervidly:3,fervor:3,festive:3,fidelity:1,fiery:1,fine:5,"fine-looking":5,finely:5,finer:5,finest:5,firmer:4,"first-class":4,"first-in-class":4,"first-rate":5,flashy:5,flatter:4,flattering:4,flatteringly:4,flawless:5,flawlessly:5,flexibility:3,flexible:3,flourish:1,flourishing:1,fluent:2,flutter:2,fond:4,fondly:4,fondness:4,foolproof:4,foremost:3,foresight:5,formidable:4,fortitude:5,fortuitous:5,fortuitously:3,fortunate:5,fortunately:5,fortune:5,fragrant:4,free:5,freed:5,freedom:5,freedoms:5,fresh:5,fresher:5,freshest:5,friendliness:4,friendly:4,frolic:3,frugal:3,fruitful:4,ftw:4,fulfillment:4,fun:5,futurestic:4,futuristic:4,gaiety:1,gaily:1,gain:4,gained:4,gainful:4,gainfully:4,gaining:4,gains:4,gallant:2,gallantly:2,galore:4,geekier:4,geeky:3,gem:4,gems:4,generosity:4,generous:5,generously:5,genial:1,genius:4,gentle:4,gentlest:4,genuine:5,gifted:5,glad:4,gladden:1,gladly:4,gladness:4,glamorous:5,glee:1,gleeful:1,gleefully:1,glimmer:1,glimmering:1,glisten:1,glistening:1,glitter:1,glitz:1,glorify:5,glorious:5,gloriously:5,glory:5,glow:4,glowing:4,glowingly:4,"god-given":3,"god-send":3,godlike:4,godsend:4,gold:3,golden:3,good:5,goodly:5,goodness:4,goodwill:3,goood:5,gooood:5,gorgeous:4,gorgeously:4,grace:4,graceful:4,gracefully:4,gracious:4,graciously:4,graciousness:4,grand:5,grandeur:3,grateful:3,gratefully:3,gratification:3,gratified:3,gratifies:3,gratify:3,gratifying:3,gratifyingly:3,gratitude:5,great:5,greatest:5,greatness:5,grin:3,groundbreaking:3,guarantee:3,guidance:3,guiltless:3,gumption:1,gush:1,gusto:1,gutsy:1,hail:1,halcyon:1,hale:1,hallmark:1,hallmarks:1,hallowed:1,handier:1,handily:1,"hands-down":4,handsome:5,handsomely:5,handy:5,happier:5,happily:5,happiness:5,happy:5,"hard-working":4,hardier:4,hardy:4,harmless:3,harmonious:1,harmoniously:1,harmonize:1,harmony:4,headway:1,heal:5,healthful:5,healthy:4,hearten:2,heartening:2,heartfelt:3,heartily:3,heartwarming:4,heaven:5,heavenly:5,helped:4,helpful:4,helping:4,hero:4,heroic:4,heroically:4,heroine:2,heroize:2,heros:4,"high-quality":5,"high-spirited":3,hilarious:3,holy:3,homage:2,honest:3,honesty:4,honor:3,honorable:3,honored:3,honoring:3,hooray:4,hopeful:4,hospitable:4,hot:2,hotcake:2,hotcakes:3,hottest:4,hug:3,humane:4,humble:3,humility:4,humor:3,humorous:3,humorously:3,humour:3,humourous:3,ideal:4,idealize:3,ideally:3,idol:2,idolize:2,idolized:2,idyllic:1,illuminate:5,illuminati:1,illuminating:4,illumine:2,illustrious:3,ilu:1,imaculate:5,imaginative:5,immaculate:5,immaculately:5,immense:3,impartial:3,impartiality:3,impartially:3,impassioned:3,impeccable:3,impeccably:3,important:4,impress:4,impressed:4,impresses:4,impressive:4,impressively:4,impressiveness:4,improve:4,improved:3,improvement:4,improvements:5,improves:5,improving:3,incredible:4,incredibly:5,indebted:4,individualized:1,indulgence:1,indulgent:1,industrious:1,inestimable:1,inestimably:1,inexpensive:4,infallibility:1,infallible:1,infallibly:1,influential:1,ingenious:2,ingeniously:3,ingenuity:3,ingenuous:3,ingenuously:2,innocuous:3,innovation:4,innovative:4,inpressed:2,insightful:4,insightfully:3,inspiration:4,inspirational:5,inspire:5,inspiring:5,instantly:3,instructive:3,instrumental:3,integral:3,integrated:3,intelligence:3,intelligent:3,intelligible:2,interesting:4,interests:3,intimacy:2,intimate:2,intricate:3,intrigue:2,intriguing:2,intriguingly:2,intuitive:3,invaluable:5,invaluablely:5,inventive:3,invigorate:3,invigorating:2,invincibility:3,invincible:5,inviolable:3,inviolate:3,invulnerable:4,irreplaceable:3,irreproachable:3,irresistible:3,irresistibly:3,"issue-free":3,"jaw-droping":5,"jaw-dropping":5,jollify:3,jolly:3,jovial:2,joy:4,joyful:5,joyfully:5,joyous:4,joyously:4,jubilant:4,jubilantly:3,jubilate:3,jubilation:3,jubiliant:3,judicious:3,justly:3,keen:3,keenly:4,keenness:4,"kid-friendly":3,kindliness:5,kindly:5,kindness:5,knowledgeable:4,kudos:3,"large-capacity":3,laud:3,laudable:4,laudably:4,lavish:5,lavishly:5,"law-abiding":4,lawful:4,lawfully:4,lead:3,leading:3,leads:1,lean:1,led:1,legendary:5,leverage:3,levity:2,liberate:4,liberation:4,liberty:4,lifesaver:5,"light-hearted":3,lighter:3,likable:4,like:5,liked:4,likes:4,liking:5,lionhearted:4,lively:5,logical:4,"long-lasting":5,lovable:4,lovably:5,love:5,loved:5,loveliness:4,lovely:5,lover:4,loves:4,loving:5,"low-cost":2,"low-price":2,"low-priced":2,"low-risk":3,"lower-priced":3,loyal:4,loyalty:4,lucid:2,lucidly:2,luck:4,luckier:4,luckiest:4,luckiness:4,lucky:5,lucrative:3,luminous:3,lush:2,luster:2,lustrous:3,luxuriant:3,luxuriate:3,luxurious:3,luxuriously:4,luxury:5,lyrical:2,magic:3,magical:4,magnanimous:3,magnanimously:3,magnificence:2,magnificent:3,magnificently:3,majestic:3,majesty:3,manageable:2,maneuverable:2,marvel:4,marveled:4,marvelled:4,marvellous:4,marvelous:4,marvelously:5,marvelousness:3,marvels:3,master:5,masterful:5,masterfully:5,masterpiece:5,masterpieces:5,masters:5,mastery:4,matchless:4,mature:3,maturely:2,maturity:3,meaningful:4,memorable:5,merciful:5,mercifully:5,mercy:5,merit:4,meritorious:4,merrily:3,merriment:2,merriness:2,merry:4,mesmerize:3,mesmerized:3,mesmerizes:3,mesmerizing:3,mesmerizingly:3,meticulous:3,meticulously:3,mightily:4,mighty:2,"mind-blowing":5,miracle:5,miracles:5,miraculous:5,miraculously:5,miraculousness:1,modern:3,modest:3,modesty:3,momentous:3,monumental:3,monumentally:3,morality:3,motivated:3,"multi-purpose":3,navigable:3,neat:5,neatest:5,neatly:5,nice:5,nicely:5,nicer:5,nicest:5,nifty:4,nimble:4,noble:4,nobly:4,noiseless:4,"non-violence":2,"non-violent":2,notably:4,noteworthy:4,nourish:4,nourishing:4,nourishment:4,novelty:3,nurturing:3,oasis:3,obsession:3,obsessions:3,obtainable:3,openly:1,openness:1,optimal:3,optimism:3,optimistic:3,opulent:1,orderly:4,originality:4,outdo:4,outdone:4,outperform:4,outperformed:4,outperforming:4,outperforms:4,outshine:5,outshone:5,outsmart:5,outstanding:3,outstandingly:3,outstrip:4,outwit:4,ovation:2,overjoyed:2,overtake:3,overtaken:3,overtakes:4,overtaking:4,overtook:3,overture:3,"pain-free":4,painless:4,painlessly:5,palatial:2,pamper:3,pampered:3,pamperedly:3,pamperedness:2,pampers:2,panoramic:3,paradise:4,paramount:2,pardon:2,passion:2,passionate:2,passionately:2,patience:3,patient:3,patiently:2,patriot:2,patriotic:2,peace:5,peaceable:5,peaceful:5,peacefully:5,peacekeepers:5,peach:3,peerless:3,pep:2,pepped:2,pepping:2,peppy:2,peps:2,perfect:5,perfection:5,perfectly:5,permissible:2,perseverance:2,persevere:1,personages:1,personalized:3,phenomenal:4,phenomenally:4,picturesque:4,piety:3,pinnacle:4,playful:4,playfully:4,pleasant:4,pleasantly:3,pleased:4,pleases:4,pleasing:3,pleasingly:4,pleasurable:4,pleasurably:3,pleasure:3,plentiful:4,pluses:2,plush:1,plusses:1,poetic:1,poeticize:1,poignant:1,poise:1,poised:2,polished:2,polite:4,politeness:4,popular:5,portable:4,posh:3,positive:4,positively:5,positives:5,powerful:5,powerfully:5,praise:5,praiseworthy:5,praising:4,"pre-eminent":2,precious:2,precise:2,precisely:2,preeminent:2,prefer:2,preferable:2,preferably:2,prefered:2,preferes:2,preferring:2,prefers:2,premier:2,prestige:4,prestigious:2,prettily:2,pretty:5,priceless:5,pride:4,principled:2,privilege:2,privileged:2,prize:2,proactive:2,"problem-free":2,"problem-solver":2,prodigious:2,prodigiously:2,prodigy:2,productive:2,productively:2,proficient:2,proficiently:2,profound:3,profoundly:3,profuse:2,profusion:2,progress:2,progressive:2,prolific:2,prominence:2,prominent:2,promise:2,promised:2,promises:2,promising:2,promoter:2,prompt:2,promptly:2,proper:2,properly:2,propitious:2,propitiously:2,pros:2,prosper:2,prosperity:3,prosperous:3,prospros:3,protect:3,protection:4,protective:4,proud:2,proven:2,proves:2,providence:2,proving:2,prowess:2,prudence:2,prudent:2,prudently:2,punctual:2,pure:5,purify:5,purposeful:2,quaint:2,qualified:2,qualify:4,quicker:5,quiet:5,quieter:2,radiance:2,radiant:2,rapid:2,rapport:2,rapt:1,rapture:1,raptureous:1,raptureously:1,rapturous:1,rapturously:1,rational:1,"razor-sharp":2,reachable:1,readable:2,readily:2,ready:5,reaffirm:1,reaffirmation:2,realistic:2,realizable:2,reasonable:2,reasonably:2,reasoned:2,reassurance:2,reassure:2,receptive:2,reclaim:2,recomend:4,recommend:4,recommendation:4,recommendations:4,recommended:5,reconcile:3,reconciliation:3,"record-setting":4,recover:4,recovery:4,rectification:4,rectify:3,rectifying:3,redeem:3,redeeming:3,redemption:1,refine:1,refined:3,refinement:3,reform:4,reformed:4,reforming:3,reforms:3,refresh:3,refreshed:3,refreshing:3,refund:3,refunded:2,regal:2,regally:2,regard:2,rejoice:2,rejoicing:3,rejoicingly:3,rejuvenate:3,rejuvenated:3,rejuvenating:3,relaxed:4,relent:4,reliable:4,reliably:4,relief:4,relish:4,remarkable:3,remarkably:3,remedy:3,remission:3,remunerate:3,renaissance:3,renewed:2,renown:2,renowned:2,replaceable:3,reputable:3,reputation:4,resilient:4,resolute:4,resound:4,resounding:2,resourceful:2,resourcefulness:3,respect:3,respectable:3,respectful:2,respectfully:2,respite:2,resplendent:2,responsibly:2,responsive:4,restful:4,restored:2,restructure:2,restructured:2,restructuring:2,retractable:2,revel:2,revelation:2,revere:2,reverence:2,reverent:2,reverently:2,revitalize:2,revival:2,revive:4,revives:2,revolutionary:2,revolutionize:2,revolutionized:2,revolutionizes:2,reward:5,rewarding:5,rewardingly:5,rich:4,richer:4,richly:4,richness:4,right:4,righten:3,righteous:3,righteously:2,righteousness:2,rightful:2,rightfully:2,rightly:2,rightness:2,"risk-free":2,robust:2,"rock-star":4,"rock-stars":4,rockstar:2,rockstars:2,romantic:2,romantically:2,romanticize:2,roomier:2,roomy:2,rosy:2,safe:4,safely:4,sagacity:2,sagely:2,saint:2,saintliness:2,saintly:2,salutary:2,salute:2,sane:3,satisfactorily:3,satisfactory:3,satisfied:3,satisfies:3,satisfy:3,satisfying:3,satisified:3,saver:4,savings:4,savior:4,savvy:4,scenic:4,seamless:4,seasoned:2,secure:5,securely:2,selective:3,"self-determination":3,"self-respect":5,"self-satisfaction":5,"self-sufficiency":5,"self-sufficient":5,sensation:5,sensational:4,sensationally:4,sensations:4,sensible:4,sensibly:4,sensitive:2,serene:2,serenity:2,sexy:4,sharp:2,sharper:2,sharpest:2,shimmering:2,shimmeringly:2,shine:2,shiny:2,significant:2,silent:3,simpler:3,simplest:2,simplified:2,simplifies:2,simplify:2,simplifying:2,sincere:5,sincerely:2,sincerity:2,skill:4,skilled:2,skillful:2,skillfully:2,slammin:2,sleek:2,slick:2,smart:3,smarter:3,smartest:2,smartly:2,smile:2,smiles:2,smiling:2,smilingly:2,smitten:2,smooth:2,smoother:2,smoothes:2,smoothest:2,smoothly:2,snappy:2,snazzy:2,sociable:2,soft:4,softer:4,solace:2,solicitous:2,solicitously:2,solid:2,solidarity:2,soothe:2,soothingly:2,sophisticated:2,soulful:3,soundly:3,soundness:2,spacious:2,sparkle:2,sparkling:2,spectacular:5,spectacularly:5,speedily:2,speedy:2,spellbind:2,spellbinding:2,spellbindingly:2,spellbound:2,spirited:2,spiritual:2,splendid:2,splendidly:2,splendor:2,spontaneous:2,sporty:1,spotless:2,sprightly:1,stability:2,stabilize:2,stable:4,stainless:2,standout:2,"state-of-the-art":2,stately:2,statuesque:2,staunch:2,staunchly:2,staunchness:2,steadfast:2,steadfastly:2,steadfastness:2,steadiest:3,steadiness:3,steady:5,stellar:5,stellarly:2,stimulate:2,stimulates:2,stimulating:2,stimulative:2,stirringly:1,straighten:1,straightforward:3,streamlined:3,striking:2,strikingly:2,striving:2,strong:4,stronger:4,strongest:4,stunned:4,stunning:5,stunningly:5,stupendous:1,stupendously:1,sturdier:1,sturdy:1,stylish:4,stylishly:4,stylized:4,suave:2,suavely:1,sublime:2,subsidize:1,subsidized:1,subsidizes:1,subsidizing:1,substantive:1,succeed:3,succeeded:4,succeeding:3,succeeds:3,succes:1,success:4,successes:2,successful:2,successfully:4,suffice:2,sufficed:3,suffices:2,sufficient:3,sufficiently:3,suitable:4,sumptuous:1,sumptuously:1,sumptuousness:1,super:5,superb:5,superbly:5,superior:2,superiority:4,supple:2,support:3,supported:3,supporter:3,supporting:3,supportive:3,supports:3,supremacy:4,supreme:4,supremely:4,supurb:4,supurbly:3,surmount:2,surpass:3,surreal:4,survival:2,survivor:2,sustainability:2,sustainable:2,swank:1,swankier:1,swankiest:1,swanky:1,sweeping:2,sweet:4,sweeten:3,sweetheart:5,sweetly:4,sweetness:5,swift:3,swiftness:3,talent:2,talented:2,talents:2,tantalize:1,tantalizing:1,tantalizingly:1,tempt:1,tempting:3,temptingly:3,tenacious:2,tenaciously:2,tenacity:2,tender:4,tenderly:4,terrific:4,terrifically:4,thank:4,thankful:4,thinner:3,thoughtful:2,thoughtfully:2,thoughtfulness:2,thrift:2,thrifty:2,thrill:2,thrilled:2,thrilling:2,thrillingly:2,thrills:2,thrive:2,thriving:2,"thumb-up":2,"thumbs-up":2,tickle:2,tidy:2,"time-honored":1,timely:2,tingle:2,titillate:1,titillating:1,titillatingly:1,togetherness:2,tolerable:3,"toll-free":1,top:4,"top-notch":5,"top-quality":5,topnotch:5,tops:5,tough:2,tougher:3,toughest:4,traction:1,tranquil:1,tranquility:1,transparent:2,treasure:4,tremendously:5,trendy:5,triumph:5,triumphal:5,triumphant:1,triumphantly:1,trivially:1,trophy:1,"trouble-free":2,trump:5,trumpet:1,trust:5,trusted:2,trusting:3,trustingly:2,trustworthiness:2,trustworthy:2,trusty:4,truthful:2,truthfully:2,truthfulness:2,twinkly:2,"ultra-crisp":5,unabashed:2,unabashedly:2,unaffected:1,unassailable:2,unbeatable:2,unbiased:2,unbound:2,uncomplicated:3,unconditional:2,undamaged:3,undaunted:2,understandable:2,undisputable:2,undisputably:2,undisputed:3,unencumbered:1,unequivocal:1,unequivocally:1,unfazed:2,unfettered:1,unforgettable:3,unity:2,unlimited:3,unmatched:2,unparalleled:1,unquestionable:1,unquestionably:1,unreal:3,unrestricted:2,unrivaled:2,unselfish:2,unwavering:3,upbeat:2,upgradable:2,upgradeable:2,upgraded:2,upheld:2,uphold:2,uplift:2,uplifting:2,upliftingly:2,upliftment:2,upscale:2,usable:4,useable:2,useful:5,"user-friendly":2,"user-replaceable":2,valiant:1,valiantly:2,valor:2,valuable:5,variety:2,venerate:2,verifiable:1,veritable:1,versatile:2,versatility:1,vibrant:4,vibrantly:4,victorious:5,victory:5,viewable:2,vigilance:2,vigilant:3,virtue:2,virtuous:2,virtuously:2,visionary:2,vivacious:2,vivid:2,vouch:3,vouchsafe:2,warm:4,warmer:2,warmhearted:2,warmly:4,warmth:5,wealthy:5,welcome:2,well:5,"well-backlit":2,"well-balanced":2,"well-behaved":5,"well-being":2,"well-bred":2,"well-connected":2,"well-educated":2,"well-established":1,"well-informed":1,"well-intentioned":2,"well-known":3,"well-made":5,"well-managed":2,"well-mannered":2,"well-positioned":2,"well-received":2,"well-regarded":2,"well-rounded":2,"well-run":2,"well-wishers":2,wellbeing:2,whoa:2,wholeheartedly:2,wholesome:2,whooa:2,whoooa:2,wieldy:1,willing:2,willingly:2,willingness:3,win:5,windfall:2,winnable:2,winner:2,winners:2,winning:2,wins:2,wisdom:2,wise:2,wisely:2,witty:4,won:5,wonder:2,wonderful:2,wonderfully:2,wonderous:2,wonderously:2,wonders:2,wondrous:2,woo:3,work:2,workable:2,worked:3,works:4,"world-famous":2,worth:2,"worth-while":2,worthiness:2,worthwhile:2,worthy:4,wow:5,wowed:2,wowing:2,wows:2,yay:4,youthful:5,zeal:2,zenith:2,zest:4,zippy:2,"2-faced":-1,"2-faces":-1,abnormal:-5,abolish:-4,abominable:-3,abominably:-3,abominate:-2,abomination:-3,abort:-2,aborted:-3,aborts:-3,abrade:-2,abrasive:-4,abrupt:-2,abruptly:-2,abscond:-4},wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"aborted",-5),"absence",-5),"absent-minded",-5),"absentee",-5),"absurd",-4),"absurdity",-3),"absurdly",-3),"absurdness",-3),"abuse",-4),"abused",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"abuses",-4),"abusive",-3),"abysmal",-2),"abysmally",-1),"abyss",-1),"accidental",-3),"accost",-1),"accursed",-1),"accusation",-5),"accusations",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"accuse",-3),"accuses",-3),"accusing",-2),"accusingly",-4),"acerbate",-1),"acerbic",-1),"acerbically",-1),"ache",-5),"ached",-1),"aches",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"achey",-1),"aching",-5),"acrid",-1),"acridly",-1),"acridness",-1),"acrimonious",-1),"acrimoniously",-1),"acrimony",-1),"adamant",-4),"adamantly",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"addict",-5),"addicted",-2),"addicting",-2),"addicts",-3),"admonish",-4),"admonisher",-2),"admonishingly",-3),"admonishment",-4),"admonition",-3),"adulterate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"adulterated",-3),"adulteration",-5),"adulterier",-2),"adversarial",-1),"adversary",-1),"adverse",-4),"adversity",-5),"afflict",-1),"affliction",-1),"afflictive",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"affront",-1),"afraid",-5),"aggravate",-4),"aggravating",-4),"aggravation",-5),"aggression",-5),"aggressive",-5),"aggressiveness",-4),"aggressor",-4),"aggrieve",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"aggrieved",-4),"aggrivation",-5),"aghast",-2),"agonies",-4),"agonize",-5),"agonizing",-5),"agonizingly",-4),"agony",-5),"aground",-2),"ail",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ailing",-1),"ailment",-2),"aimless",-2),"alarm",-1),"alarmed",-1),"alarming",-1),"alarmingly",-1),"alienate",-2),"alienated",-1),"alienation",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"allegation",-2),"allegations",-3),"allege",-1),"allergic",-1),"allergies",-1),"allergy",-1),"aloof",-1),"altercation",-1),"ambiguity",-2),"ambiguous",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ambivalence",-1),"ambivalent",-1),"ambush",-1),"amiss",-1),"amputate",-3),"anarchism",-1),"anarchist",-4),"anarchistic",-1),"anarchy",-1),"anemic",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"anger",-4),"angrily",-5),"angriness",-5),"angry",-5),"anguish",-3),"animosity",-1),"annihilate",-1),"annihilation",-1),"annoy",-3),"annoyance",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"annoyances",-4),"annoyed",-2),"annoying",-2),"annoyingly",-3),"annoys",-1),"anomalous",-1),"anomaly",-3),"antagonism",-1),"antagonist",-1),"antagonistic",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"antagonize",-1),"anti-",-1),"anti-american",-1),"anti-israeli",-1),"anti-occupation",-1),"anti-proliferation",-1),"anti-semites",-1),"anti-social",-1),"anti-us",-1),"anti-white",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"antipathy",-1),"antiquated",-1),"antithetical",-1),"anxieties",-1),"anxiety",-2),"anxious",-3),"anxiously",-3),"anxiousness",-1),"apathetic",-4),"apathetically",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"apathy",-5),"apocalypse",-5),"apocalyptic",-4),"apologist",-3),"apologists",-2),"appal",-1),"appall",-1),"appalled",-1),"appalling",-1),"appallingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"apprehension",-1),"apprehensions",-1),"apprehensive",-1),"apprehensively",-1),"arbitrary",-1),"arcane",-1),"archaic",-1),"arduous",-1),"arduously",-1),"argumentative",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"arrogance",-3),"arrogant",-4),"arrogantly",-5),"ashamed",-4),"asinine",-1),"asininely",-1),"asinininity",-1),"askance",-1),"asperse",-1),"aspersion",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"aspersions",-1),"assail",-1),"assassin",-2),"assassinate",-2),"assault",-1),"assult",-1),"astray",-1),"asunder",-1),"atrocious",-1),"atrocities",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"atrocity",-1),"atrophy",-1),"attack",-3),"attacks",-3),"audacious",-3),"audaciously",-2),"audaciousness",-2),"audacity",-2),"audiciously",-1),"austere",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"authoritarian",-1),"autocrat",-1),"autocratic",-1),"avalanche",-2),"avarice",-1),"avaricious",-1),"avariciously",-1),"avenge",-4),"averse",-1),"aversion",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"aweful",-4),"awful",-5),"awfully",-1),"awfulness",-1),"awkward",-3),"awkwardness",-2),"ax",-1),"babble",-1),"back-logged",-1),"back-wood",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"back-woods",-1),"backache",-1),"backaches",-1),"backaching",-1),"backbite",-1),"backbiting",-1),"backward",-1),"backwardness",-1),"backwood",-1),"backwoods",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bad",-4),"badly",-2),"baffle",-5),"baffled",-4),"bafflement",-1),"baffling",-1),"bait",-1),"balk",-1),"banal",-1),"banalize",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bane",-1),"banish",-5),"banishment",-4),"bankrupt",-2),"barbarian",-5),"barbaric",-4),"barbarically",-3),"barbarity",-2),"barbarous",-3),"barbarously",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"barren",-3),"baseless",-2),"bash",-1),"bashed",-1),"bashful",-1),"bashing",-1),"bastard",-2),"bastards",-2),"battered",-1),"battering",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"batty",-1),"bearish",-1),"beastly",-1),"bedlam",-1),"bedlamite",-1),"befoul",-1),"beg",-1),"beggar",-1),"beggarly",-1),"begging",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"beguile",-1),"belabor",-1),"belated",-1),"beleaguer",-1),"belie",-2),"belittle",-2),"belittled",-2),"belittling",-2),"bellicose",-2),"belligerence",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"belligerent",-2),"belligerently",-2),"bemoan",-2),"bemoaning",-2),"bemused",-2),"bent",-2),"berate",-2),"bereave",-2),"bereavement",-2),"bereft",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"berserk",-2),"beseech",-1),"beset",-1),"besiege",-1),"besmirch",-1),"bestial",-1),"betray",-1),"betrayal",-1),"betrayals",-1),"betrayer",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"betraying",-1),"betrays",-1),"bewail",-1),"beware",-2),"bewilder",-1),"bewildered",-1),"bewildering",-1),"bewilderingly",-1),"bewilderment",-1),"bewitch",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bias",-3),"biased",-1),"biases",-1),"bicker",-1),"bickering",-1),"bid-rigging",-1),"bigotries",-1),"bigotry",-4),"bitch",-5),"bitchy",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"biting",-5),"bitingly",-5),"bitter",-5),"bitterly",-5),"bitterness",-5),"bizarre",-1),"blab",-1),"blabber",-1),"blackmail",-1),"blah",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"blame",-3),"blameworthy",-1),"bland",-1),"blandish",-1),"blaspheme",-1),"blasphemous",-1),"blasphemy",-1),"blasted",-1),"blatant",-1),"blatantly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"blather",-1),"bleak",-1),"bleakly",-1),"bleakness",-1),"bleed",-2),"bleeding",-3),"bleeds",-3),"blemish",-1),"blind",-2),"blinding",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"blindingly",-1),"blindside",-1),"blister",-1),"blistering",-1),"bloated",-1),"blockage",-1),"blockhead",-1),"bloodshed",-1),"bloodthirsty",-1),"bloody",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"blotchy",-1),"blow",-3),"blunder",-1),"blundering",-1),"blunders",-1),"blunt",-1),"blur",-1),"bluring",-1),"blurred",-1),"blurring",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"blurry",-1),"blurs",-1),"blurt",-1),"boastful",-1),"boggle",-3),"bogus",-2),"boil",-2),"boiling",-3),"boisterous",-2),"bomb",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bombard",-2),"bombardment",-1),"bombastic",-1),"bondage",-1),"bonkers",-4),"bore",-1),"bored",-1),"boredom",-2),"bores",-2),"boring",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"botch",-1),"bother",-1),"bothered",-1),"bothering",-1),"bothers",-1),"bothersome",-1),"bowdlerize",-1),"boycott",-3),"braggart",-3),"bragger",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"brainless",-3),"brainwash",-1),"brash",-1),"brashly",-1),"brashness",-1),"brat",-1),"bravado",-1),"brazen",-1),"brazenly",-2),"brazenness",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"breach",-3),"break",-2),"break-up",-2),"break-ups",-1),"breakdown",-4),"breaking",-1),"breaks",-2),"breakup",-2),"breakups",-2),"bribery",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"brimstone",-2),"bristle",-2),"brittle",-3),"broke",-3),"broken",-3),"broken-hearted",-3),"brood",-3),"browbeat",-3),"bruise",-3),"bruised",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bruises",-2),"bruising",-2),"brusque",-3),"brutal",-3),"brutalising",-3),"brutalities",-2),"brutality",-2),"brutalize",-2),"brutalizing",-2),"brutally",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"brute",-2),"brutish",-1),"bs",-3),"buckle",-1),"bug",-2),"bugging",-5),"buggy",-3),"bugs",-2),"bulkier",-2),"bulkiness",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bulky",-3),"bulkyness",-1),"bull****",-3),"bull----",-3),"bullies",-2),"bullshit",-5),"bullshyt",-1),"bully",-2),"bullying",-1),"bullyingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bum",-1),"bump",-1),"bumped",-3),"bumping",-1),"bumpping",-1),"bumps",-1),"bumpy",-1),"bungle",-1),"bungler",-1),"bungling",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"bunk",-1),"burden",-4),"burdensome",-1),"burdensomely",-1),"burn",-5),"burned",-4),"burning",-1),"burns",-1),"bust",-1),"busts",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"busybody",-1),"butcher",-1),"butchery",-1),"buzzing",-1),"byzantine",-1),"cackle",-1),"calamities",-3),"calamitous",-3),"calamitously",-3),"calamity",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"callous",-2),"calumniate",-1),"calumniation",-1),"calumnies",-1),"calumnious",-1),"calumniously",-1),"calumny",-1),"cancer",-5),"cancerous",-1),"cannibal",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"cannibalize",-5),"capitulate",-1),"capricious",-1),"capriciously",-1),"capriciousness",-1),"capsize",-1),"careless",-4),"carelessness",-5),"caricature",-1),"carnage",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"carp",-1),"cartoonish",-1),"cash-strapped",-1),"castigate",-1),"castrated",-1),"casualty",-3),"cataclysm",-2),"cataclysmal",-2),"cataclysmic",-2),"cataclysmically",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"catastrophe",-4),"catastrophes",-4),"catastrophic",-4),"catastrophically",-1),"catastrophies",-1),"caustic",-1),"caustically",-1),"cautionary",-3),"cave",-1),"censure",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"chafe",-1),"chaff",-1),"chagrin",-1),"challenging",-3),"chaos",-5),"chaotic",-1),"chasten",-1),"chastise",-1),"chastisement",-1),"chatter",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"chatterbox",-1),"cheap",-3),"cheapen",-1),"cheaply",-1),"cheat",-2),"cheated",-3),"cheater",-2),"cheating",-1),"cheats",-1),"checkered",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"cheerless",-1),"cheesy",-1),"chide",-1),"childish",-1),"chill",-1),"chilly",-1),"chintzy",-1),"choke",-1),"choleric",-1),"choppy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"chore",-1),"chronic",-1),"chunky",-1),"clamor",-1),"clamorous",-1),"clash",-1),"cliche",-1),"cliched",-1),"clique",-1),"clog",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"clogged",-1),"clogs",-1),"cloud",-1),"clouding",-1),"cloudy",-1),"clueless",-1),"clumsy",-3),"clunky",-3),"coarse",-3),"cocky",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"coerce",-2),"coercion",-2),"coercive",-2),"cold",-3),"coldly",-1),"collapse",-1),"collude",-1),"collusion",-1),"combative",-1),"combust",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"comical",-2),"commiserate",-2),"commonplace",-2),"commotion",-3),"commotions",-3),"complacent",-3),"complain",-3),"complained",-4),"complaining",-4),"complains",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"complaint",-4),"complaints",-2),"complex",-2),"complicated",-4),"complication",-4),"complicit",-4),"compulsion",-4),"compulsive",-1),"concede",-1),"conceded",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"conceit",-1),"conceited",-1),"concen",-1),"concens",-2),"concern",-1),"concerned",-1),"concerns",-1),"concession",-1),"concessions",-1),"condemn",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"condemnable",-1),"condemnation",-1),"condemned",-1),"condemns",-1),"condescend",-1),"condescending",-1),"condescendingly",-1),"condescension",-1),"confess",-1),"confession",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"confessions",-2),"confined",-2),"conflict",-2),"conflicted",-2),"conflicting",-2),"conflicts",-2),"confound",-2),"confounded",-2),"confounding",-2),"confront",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"confrontation",-3),"confrontational",-3),"confuse",-5),"confused",-4),"confuses",-4),"confusing",-4),"confusion",-4),"confusions",-4),"congested",-4),"congestion",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"cons",-5),"conscons",-2),"conservative",-1),"conspicuous",-1),"conspicuously",-1),"conspiracies",-1),"conspiracy",-4),"conspirator",-1),"conspiratorial",-1),"conspire",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"consternation",-1),"contagious",-3),"contaminate",-3),"contaminated",-3),"contaminates",-2),"contaminating",-2),"contamination",-1),"contempt",-1),"contemptible",-1),"contemptuous",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"contemptuously",-2),"contend",-2),"contention",-2),"contentious",-2),"contort",-3),"contortions",-3),"contradict",-3),"contradiction",-3),"contradictory",-3),"contrariness",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"contravene",-3),"contrive",-3),"contrived",-3),"controversial",-3),"controversy",-2),"convoluted",-2),"corrode",-2),"corrosion",-3),"corrosions",-3),"corrosive",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"corrupt",-4),"corrupted",-4),"corrupting",-4),"corruption",-4),"corrupts",-4),"corruptted",-4),"costlier",-3),"costly",-3),"counter-productive",-3),"counterproductive",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"coupists",-1),"covetous",-2),"coward",-4),"cowardly",-5),"crabby",-2),"crack",-2),"cracked",-2),"cracks",-1),"craftily",-1),"craftly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"crafty",-1),"cramp",-1),"cramped",-1),"cramping",-1),"cranky",-1),"crap",-4),"crappy",-5),"craps",-3),"crash",-3),"crashed",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"crashes",-2),"crashing",-1),"crass",-1),"craven",-1),"cravenly",-1),"craze",-1),"crazily",-1),"craziness",-1),"crazy",-2),"creak",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"creaking",-3),"creaks",-1),"credulous",-1),"creep",-1),"creeping",-1),"creeps",-1),"creepy",-1),"crept",-1),"crime",-4),"criminal",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"cringe",-2),"cringed",-2),"cringes",-2),"cripple",-2),"crippled",-3),"cripples",-3),"crippling",-4),"crisis",-4),"critic",-4),"critical",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"criticism",-1),"criticisms",-1),"criticize",-1),"criticized",-1),"criticizing",-1),"critics",-3),"cronyism",-3),"crook",-3),"crooked",-3),"crooks",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"crowded",-1),"crowdedness",-1),"crude",-1),"cruel",-5),"crueler",-5),"cruelest",-5),"cruelly",-5),"cruelness",-4),"cruelties",-4),"cruelty",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"crumble",-3),"crumbling",-3),"crummy",-2),"crumple",-2),"crumpled",-2),"crumples",-1),"crush",-3),"crushed",-1),"crushing",-1),"cry",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"culpable",-1),"culprit",-3),"cumbersome",-1),"cunt",-5),"cunts",-5),"cuplrit",-1),"curse",-3),"cursed",-3),"curses",-4),"curt",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"cuss",-3),"cussed",-3),"cutthroat",-2),"cynical",-3),"cynicism",-3),"d*mn",-3),"damage",-3),"damaged",-3),"damages",-3),"damaging",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"damn",-4),"damnable",-5),"damnably",-5),"damnation",-5),"damned",-5),"damning",-5),"damper",-2),"danger",-2),"dangerous",-2),"dangerousness",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dark",-3),"darken",-2),"darkened",-2),"darker",-2),"darkness",-2),"dastard",-1),"dastardly",-1),"daunt",-1),"daunting",-2),"dauntingly",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dawdle",-1),"daze",-1),"dazed",-1),"dead",-5),"deadbeat",-5),"deadlock",-3),"deadly",-4),"deadweight",-3),"deaf",-3),"dearth",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"death",-4),"debacle",-1),"debase",-1),"debasement",-1),"debaser",-1),"debatable",-1),"debauch",-1),"debaucher",-1),"debauchery",-1),"debilitate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"debilitating",-1),"debility",-1),"debt",-2),"debts",-2),"decadence",-1),"decadent",-1),"decay",-4),"decayed",-4),"deceit",-3),"deceitful",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"deceitfully",-3),"deceitfulness",-3),"deceive",-3),"deceiver",-3),"deceivers",-3),"deceiving",-3),"deception",-4),"deceptive",-4),"deceptively",-5),"declaim",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"decline",-2),"declines",-2),"declining",-2),"decrement",-2),"decrepit",-2),"decrepitude",-1),"decry",-1),"defamation",-3),"defamations",-3),"defamatory",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"defame",-3),"defect",-4),"defective",-4),"defects",-4),"defensive",-3),"defiance",-3),"defiant",-3),"defiantly",-3),"deficiencies",-3),"deficiency",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"deficient",-3),"defile",-3),"defiler",-3),"deform",-3),"deformed",-3),"defrauding",-4),"defunct",-2),"defy",-1),"degenerate",-2),"degenerately",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"degeneration",-2),"degradation",-3),"degrade",-3),"degrading",-3),"degradingly",-3),"dehumanization",-2),"dehumanize",-2),"deign",-1),"deject",-1),"dejected",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dejectedly",-1),"dejection",-1),"delay",-1),"delayed",-1),"delaying",-1),"delays",-1),"delinquency",-1),"delinquent",-1),"delirious",-1),"delirium",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"delude",-1),"deluded",-1),"deluge",-1),"delusion",-1),"delusional",-1),"delusions",-1),"demean",-2),"demeaning",-1),"demise",-3),"demolish",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"demolisher",-3),"demon",-4),"demonic",-4),"demonize",-4),"demonized",-4),"demonizes",-4),"demonizing",-4),"demoralize",-1),"demoralizing",-1),"demoralizingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"denial",-2),"denied",-2),"denies",-1),"denigrate",-1),"denounce",-1),"dense",-1),"dent",-1),"dented",-1),"dents",-1),"denunciate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"denunciation",-1),"denunciations",-1),"deny",-2),"denying",-2),"deplete",-1),"deplorable",-1),"deplorably",-1),"deplore",-1),"deploring",-1),"deploringly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"deprave",-1),"depraved",-1),"depravedly",-1),"deprecate",-1),"depress",-4),"depressed",-3),"depressing",-4),"depressingly",-3),"depression",-4),"depressions",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"deprive",-3),"deprived",-3),"deride",-1),"derision",-1),"derisive",-1),"derisively",-1),"derisiveness",-1),"derogatory",-3),"desecrate",-1),"desert",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"desertion",-1),"desiccate",-1),"desiccated",-1),"desititute",-1),"desolate",-1),"desolately",-1),"desolation",-1),"despair",-1),"despairing",-1),"despairingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"desperate",-2),"desperately",-2),"desperation",-1),"despicable",-2),"despicably",-1),"despise",-1),"despised",-1),"despoil",-1),"despoiler",-1),"despondence",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"despondency",-1),"despondent",-1),"despondently",-1),"despot",-1),"despotic",-1),"despotism",-1),"destabilisation",-1),"destains",-1),"destitute",-1),"destitution",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"destroy",-5),"destroyer",-5),"destruction",-5),"destructive",-5),"desultory",-1),"deter",-2),"deteriorate",-5),"deteriorating",-5),"deterioration",-5),"deterrent",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"detest",-3),"detestable",-3),"detestably",-3),"detested",-3),"detesting",-3),"detests",-3),"detract",-3),"detracted",-2),"detracting",-2),"detraction",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"detracts",-2),"detriment",-2),"detrimental",-2),"devastate",-5),"devastated",-5),"devastates",-5),"devastating",-5),"devastatingly",-5),"devastation",-5),"deviate",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"deviation",-2),"devil",-2),"devilish",-2),"devilishly",-2),"devilment",-2),"devilry",-2),"devious",-3),"deviously",-3),"deviousness",-3),"devoid",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"diabolic",-2),"diabolical",-2),"diabolically",-2),"diametrically",-1),"diappointed",-5),"diatribe",-1),"diatribes",-1),"dick",-5),"dictator",-4),"dictatorial",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"die",-5),"die-hard",-2),"died",-4),"dies",-3),"difficult",-2),"difficulties",-2),"difficulty",-2),"diffidence",-1),"dilapidated",-1),"dilemma",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dilly-dally",-1),"dim",-1),"dimmer",-1),"din",-1),"ding",-1),"dings",-1),"dinky",-1),"dire",-1),"direly",-1),"direness",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dirt",-2),"dirtbag",-1),"dirtbags",-1),"dirts",-2),"dirty",-2),"disable",-1),"disabled",-1),"disaccord",-1),"disadvantage",-1),"disadvantaged",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disadvantageous",-1),"disadvantages",-1),"disaffect",-1),"disaffected",-1),"disaffirm",-1),"disagree",-2),"disagreeable",-1),"disagreeably",-1),"disagreed",-2),"disagreeing",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disagreement",-1),"disagrees",-1),"disallow",-4),"disapointed",-5),"disapointing",-5),"disapointment",-5),"disappoint",-5),"disappointed",-4),"disappointing",-4),"disappointingly",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disappointment",-4),"disappointments",-4),"disappoints",-3),"disapprobation",-1),"disapproval",-2),"disapprove",-2),"disapproving",-2),"disarm",-2),"disarray",-1),"disaster",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disasterous",-2),"disastrous",-2),"disastrously",-1),"disavow",-3),"disavowal",-3),"disbelief",-2),"disbelieve",-2),"disbeliever",-2),"disclaim",-1),"discombobulate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"discomfit",-3),"discomfititure",-1),"discomfort",-1),"discompose",-1),"disconcert",-1),"disconcerted",-1),"disconcerting",-1),"disconcertingly",-1),"disconsolate",-1),"disconsolately",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disconsolation",-1),"discontent",-2),"discontented",-2),"discontentedly",-2),"discontinued",-2),"discontinuity",-1),"discontinuous",-1),"discord",-1),"discordance",-1),"discordant",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"discountenance",-1),"discourage",-1),"discouragement",-1),"discouraging",-1),"discouragingly",-1),"discourteous",-1),"discourteously",-1),"discoutinous",-1),"discredit",-1),"discrepant",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"discriminate",-2),"discrimination",-2),"discriminatory",-2),"disdain",-1),"disdained",-1),"disdainful",-1),"disdainfully",-1),"disfavor",-1),"disgrace",-5),"disgraced",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disgraceful",-5),"disgracefully",-5),"disgruntle",-3),"disgruntled",-3),"disgust",-5),"disgusted",-5),"disgustedly",-5),"disgustful",-5),"disgustfully",-5),"disgusting",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disgustingly",-5),"dishearten",-4),"disheartening",-4),"dishearteningly",-4),"dishonest",-3),"dishonestly",-3),"dishonesty",-3),"dishonor",-3),"dishonorable",-3),"dishonorablely",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disillusion",-2),"disillusioned",-2),"disillusionment",-2),"disillusions",-2),"disinclination",-2),"disinclined",-2),"disingenuous",-2),"disingenuously",-2),"disintegrate",-2),"disintegrated",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disintegrates",-2),"disintegration",-2),"disinterest",-2),"disinterested",-2),"dislike",-3),"disliked",-3),"dislikes",-3),"disliking",-3),"dislocated",-3),"disloyal",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disloyalty",-3),"dismal",-1),"dismally",-1),"dismalness",-1),"dismay",-3),"dismayed",-3),"dismaying",-3),"dismayingly",-3),"dismissive",-2),"dismissively",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disobedience",-2),"disobedient",-2),"disobey",-1),"disoobedient",-1),"disorder",-1),"disordered",-1),"disorderly",-1),"disorganized",-1),"disorient",-1),"disoriented",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disown",-1),"disparage",-1),"disparaging",-1),"disparagingly",-1),"dispensable",-1),"dispirit",-1),"dispirited",-1),"dispiritedly",-1),"dispiriting",-1),"displace",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"displaced",-1),"displease",-1),"displeased",-1),"displeasing",-1),"displeasure",-1),"disproportionate",-1),"disprove",-2),"disputable",-1),"dispute",-3),"disputed",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disquiet",-1),"disquieting",-1),"disquietingly",-1),"disquietude",-1),"disregard",-3),"disregardful",-1),"disreputable",-1),"disrepute",-2),"disrespect",-1),"disrespectable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disrespectablity",-1),"disrespectful",-1),"disrespectfully",-1),"disrespectfulness",-1),"disrespecting",-1),"disrupt",-4),"disruption",-4),"disruptive",-4),"diss",-1),"dissapointed",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dissappointed",-5),"dissappointing",-5),"dissatisfaction",-4),"dissatisfactory",-4),"dissatisfied",-4),"dissatisfies",-4),"dissatisfy",-4),"dissatisfying",-4),"dissed",-1),"dissemble",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dissembler",-1),"dissension",-1),"dissent",-1),"dissenter",-1),"dissention",-1),"disservice",-1),"disses",-1),"dissidence",-1),"dissident",-1),"dissidents",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dissing",-1),"dissocial",-1),"dissolute",-1),"dissolution",-1),"dissonance",-1),"dissonant",-1),"dissonantly",-1),"dissuade",-1),"dissuasive",-1),"distains",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"distaste",-1),"distasteful",-1),"distastefully",-1),"distort",-1),"distorted",-1),"distortion",-1),"distorts",-1),"distract",-1),"distracting",-1),"distraction",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"distraught",-1),"distraughtly",-1),"distraughtness",-1),"distress",-2),"distressed",-2),"distressing",-2),"distressingly",-1),"distrust",-3),"distrustful",-3),"distrusting",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"disturb",-3),"disturbance",-3),"disturbed",-3),"disturbing",-3),"disturbingly",-3),"disunity",-2),"disvalue",-2),"divergent",-2),"divisive",-2),"divisively",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"divisiveness",-2),"dizzing",-2),"dizzingly",-2),"dizzy",-2),"doddering",-2),"dodgey",-2),"dogged",-2),"doggedly",-2),"dogmatic",-2),"doldrums",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"domineer",-2),"domineering",-2),"donside",-2),"doom",-4),"doomed",-4),"doomsday",-3),"dope",-1),"doubt",-2),"doubtful",-1),"doubtfully",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"doubts",-2),"douchbag",-5),"douchebag",-5),"douchebags",-5),"downbeat",-3),"downcast",-1),"downer",-1),"downfall",-1),"downfallen",-1),"downgrade",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"downhearted",-1),"downheartedly",-1),"downhill",-1),"downside",-3),"downsides",-1),"downturn",-1),"downturns",-1),"drab",-1),"draconian",-1),"draconic",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"drag",-2),"dragged",-1),"dragging",-1),"dragoon",-1),"drags",-1),"drain",-3),"drained",-3),"draining",-3),"drains",-1),"drastic",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"drastically",-1),"drawback",-1),"drawbacks",-1),"dread",-4),"dreadful",-4),"dreadfully",-4),"dreadfulness",-4),"dreary",-2),"dripped",-2),"dripping",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"drippy",-2),"drips",-2),"drones",-2),"droop",-2),"droops",-2),"drop-out",-3),"drop-outs",-3),"dropout",-3),"dropouts",-2),"drought",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"drowning",-3),"drunk",-3),"drunkard",-1),"drunken",-1),"dubious",-1),"dubiously",-1),"dubitable",-1),"dud",-1),"dull",-1),"dullard",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dumb",-2),"dumbfound",-2),"dump",-2),"dumped",-3),"dumping",-3),"dumps",-3),"dunce",-1),"dungeon",-1),"dungeons",-1),"dupe",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"dust",-2),"dusty",-2),"dwindling",-1),"dying",-1),"earsplitting",-1),"eccentric",-1),"eccentricity",-1),"effigy",-1),"effrontery",-1),"egocentric",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"egomania",-3),"egotism",-1),"egotistical",-1),"egotistically",-1),"egregious",-1),"egregiously",-1),"election-rigger",-1),"elimination",-1),"emaciated",-1),"emasculate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"embarrass",-1),"embarrassing",-1),"embarrassingly",-1),"embarrassment",-1),"embattled",-1),"embroil",-1),"embroiled",-1),"embroilment",-1),"emergency",-1),"emphatic",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"emphatically",-1),"emptiness",-1),"encroach",-1),"encroachment",-1),"endanger",-3),"enemies",-2),"enemy",-2),"enervate",-1),"enfeeble",-1),"enflame",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"engulf",-1),"enjoin",-1),"enmity",-1),"enrage",-1),"enraged",-1),"enraging",-1),"enslave",-3),"entangle",-1),"entanglement",-1),"entrap",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"entrapment",-1),"envious",-1),"enviously",-1),"enviousness",-1),"epidemic",-4),"equivocal",-1),"erase",-3),"erode",-5),"erodes",-5),"erosion",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"err",-1),"errant",-1),"erratic",-1),"erratically",-1),"erroneous",-1),"erroneously",-1),"error",-3),"errors",-3),"eruptions",-1),"escapade",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"eschew",-1),"estranged",-1),"evade",-1),"evasion",-1),"evasive",-1),"evil",-1),"evildoer",-1),"evils",-1),"eviscerate",-1),"exacerbate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"exagerate",-3),"exagerated",-3),"exagerates",-3),"exaggerate",-3),"exaggeration",-3),"exasperate",-3),"exasperated",-3),"exasperating",-3),"exasperatingly",-3),"exasperation",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"excessive",-3),"excessively",-2),"exclusion",-2),"excoriate",-2),"excruciating",-2),"excruciatingly",-1),"excuse",-2),"excuses",-2),"execrate",-3),"exhaust",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"exhausted",-3),"exhaustion",-3),"exhausts",-3),"exhorbitant",-2),"exhort",-2),"exile",-2),"exorbitant",-2),"exorbitantance",-2),"exorbitantly",-2),"expel",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"expensive",-4),"expire",-4),"expired",-4),"explode",-4),"exploit",-4),"exploitation",-3),"explosive",-3),"expropriate",-3),"expropriation",-3),"expulse",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"expunge",-1),"exterminate",-3),"extermination",-3),"extinguish",-1),"extort",-5),"extortion",-5),"extraneous",-1),"extravagance",-2),"extravagant",-1),"extravagantly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"extremism",-3),"extremist",-5),"extremists",-5),"eyesore",-3),"f**k",-5),"fabricate",-3),"fabrication",-1),"facetious",-1),"facetiously",-1),"fail",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"failed",-4),"failing",-4),"fails",-4),"failure",-4),"failures",-4),"faint",-2),"fainthearted",-2),"faithless",-2),"fake",-2),"fall",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fallacies",-2),"fallacious",-1),"fallaciously",-1),"fallaciousness",-1),"fallacy",-3),"fallen",-3),"falling",-3),"fallout",-4),"falls",-3),"false",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"falsehood",-5),"falsely",-4),"falsify",-4),"falter",-1),"faltered",-1),"famine",-5),"famished",-1),"fanatic",-3),"fanatical",-3),"fanatically",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fanaticism",-2),"fanatics",-2),"fanciful",-2),"far-fetched",-1),"farce",-1),"farcical",-1),"farcical-yet-provocative",-1),"farcically",-1),"farfetched",-1),"fascism",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fascist",-5),"fastidious",-1),"fastidiously",-1),"fastuous",-1),"fat",-1),"fat-cat",-1),"fat-cats",-1),"fatal",-4),"fatalistic",-4),"fatalistically",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fatally",-4),"fatcat",-1),"fatcats",-1),"fateful",-3),"fatefully",-3),"fathomless",-1),"fatigue",-4),"fatigued",-4),"fatique",-4),"fatty",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fatuity",-2),"fatuous",-2),"fatuously",-2),"fault",-4),"faults",-4),"faulty",-4),"fawningly",-1),"faze",-1),"fear",-5),"fearful",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fearfully",-5),"fears",-5),"fearsome",-5),"feckless",-1),"feeble",-1),"feeblely",-1),"feebleminded",-1),"feign",-1),"feint",-1),"fell",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"felon",-1),"felonious",-1),"ferociously",-1),"ferocity",-1),"fetid",-1),"fever",-3),"feverish",-1),"fevers",-1),"fiasco",-1),"fib",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fibber",-1),"fickle",-1),"fiction",-3),"fictional",-3),"fictitious",-3),"fidget",-1),"fidgety",-1),"fiend",-1),"fiendish",-1),"fierce",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"figurehead",-1),"filth",-2),"filthy",-2),"finagle",-2),"finicky",-2),"fissures",-2),"fist",-1),"flabbergast",-1),"flabbergasted",-1),"flagging",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"flagrant",-1),"flagrantly",-1),"flair",-1),"flairs",-1),"flak",-1),"flake",-1),"flakey",-1),"flakieness",-1),"flaking",-1),"flaky",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"flare",-1),"flares",-1),"flareup",-1),"flareups",-1),"flat-out",-1),"flaunt",-1),"flaw",-5),"flawed",-5),"flaws",-5),"flee",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fleed",-2),"fleeing",-2),"fleer",-2),"flees",-2),"fleeting",-3),"flicering",-3),"flicker",-3),"flickering",-3),"flickers",-2),"flighty",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"flimflam",-2),"flimsy",-3),"flirt",-3),"flirty",-3),"floored",-3),"flounder",-3),"floundering",-3),"flout",-3),"fluster",-2),"foe",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fool",-3),"fooled",-3),"foolhardy",-3),"foolish",-3),"foolishly",-3),"foolishness",-3),"forbid",-3),"forbidden",-2),"forbidding",-2),"forceful",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"foreboding",-1),"forebodingly",-1),"forfeit",-1),"forged",-1),"forgetful",-1),"forgetfully",-1),"forgetfulness",-1),"forlorn",-1),"forlornly",-1),"forsake",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"forsaken",-2),"forswear",-2),"foul",-5),"foully",-5),"foulness",-5),"fractious",-3),"fractiously",-3),"fracture",-3),"fragile",-3),"fragmented",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"frail",-3),"frantic",-3),"frantically",-3),"franticly",-3),"fraud",-3),"fraudulent",-3),"fraught",-3),"frazzle",-2),"frazzled",-2),"freak",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"freaking",-3),"freakish",-3),"freakishly",-3),"freaks",-2),"freeze",-2),"freezes",-2),"freezing",-2),"frenetic",-2),"frenetically",-3),"frenzied",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"frenzy",-3),"fret",-3),"fretful",-3),"frets",-3),"friction",-3),"frictions",-3),"fried",-3),"friggin",-3),"frigging",-3),"fright",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"frighten",-2),"frightening",-2),"frighteningly",-2),"frightful",-2),"frightfully",-2),"frigid",-3),"frost",-3),"frown",-3),"froze",-3),"frozen",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fruitless",-2),"fruitlessly",-2),"frustrate",-2),"frustrated",-5),"frustrates",-5),"frustrating",-5),"frustratingly",-5),"frustration",-5),"frustrations",-5),"fuck",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"fucking",-5),"fudge",-2),"fugitive",-2),"full-blown",-3),"fulminate",-3),"fumble",-3),"fume",-3),"fumes",-3),"fundamentalism",-2),"funky",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"funnily",-2),"funny",-1),"furious",-2),"furiously",-2),"furor",-2),"fury",-3),"fuss",-3),"fussy",-3),"fustigate",-3),"fusty",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"futile",-3),"futilely",-3),"futility",-3),"fuzzy",-3),"gabble",-2),"gaff",-2),"gaffe",-2),"gainsay",-2),"gainsayer",-2),"gall",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"galling",-2),"gallingly",-2),"galls",-2),"gangster",-5),"gape",-5),"garbage",-5),"garish",-1),"gasp",-1),"gauche",-1),"gaudy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"gawk",-1),"gawky",-3),"geezer",-1),"genocide",-3),"get-rich",-1),"ghastly",-1),"ghetto",-1),"ghosting",-1),"gibber",-1),"gibberish",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"gibe",-1),"giddy",-1),"gimmick",-3),"gimmicked",-3),"gimmicking",-3),"gimmicks",-3),"gimmicky",-3),"glare",-1),"glaringly",-1),"glib",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"glibly",-1),"glitch",-1),"glitches",-1),"gloatingly",-1),"gloom",-1),"gloomy",-1),"glower",-1),"glum",-1),"glut",-1),"gnawing",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"goad",-1),"goading",-1),"god-awful",-1),"goof",-1),"goofy",-1),"goon",-1),"gossip",-1),"graceless",-1),"gracelessly",-1),"graft",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"grainy",-1),"grapple",-1),"grate",-1),"grating",-1),"gravely",-1),"greasy",-1),"greed",-4),"greedy",-4),"grief",-5),"grievance",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"grievances",-5),"grieve",-5),"grieving",-5),"grievous",-5),"grievously",-5),"grim",-2),"grimace",-2),"grind",-1),"gripe",-1),"gripes",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"grisly",-1),"gritty",-1),"gross",-2),"grossly",-2),"grotesque",-1),"grouch",-1),"grouchy",-1),"groundless",-1),"grouse",-1),"growl",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"grudge",-4),"grudges",-4),"grudging",-4),"grudgingly",-4),"gruesome",-5),"gruesomely",-5),"gruff",-1),"grumble",-1),"grumpier",-1),"grumpiest",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"grumpily",-1),"grumpish",-1),"grumpy",-1),"guile",-1),"guilt",-3),"guiltily",-3),"guilty",-3),"gullible",-3),"gutless",-1),"gutter",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hack",-2),"hacks",-2),"haggard",-2),"haggle",-2),"hairloss",-1),"halfhearted",-1),"halfheartedly",-1),"hallucinate",-1),"hallucination",-1),"hamper",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hampered",-1),"handicapped",-1),"hang",-1),"hangs",-1),"haphazard",-1),"hapless",-1),"harangue",-1),"harass",-3),"harassed",-3),"harasses",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"harassment",-3),"harboring",-1),"harbors",-1),"hard",-4),"hard-hit",-3),"hard-line",-3),"hard-liner",-3),"hardball",-3),"harden",-3),"hardened",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hardheaded",-3),"hardhearted",-3),"hardliner",-3),"hardliners",-3),"hardship",-5),"hardships",-5),"harm",-5),"harmed",-5),"harmful",-5),"harms",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"harpy",-1),"harridan",-1),"harried",-1),"harrow",-1),"harsh",-1),"harshly",-1),"hasseling",-1),"hassle",-3),"hassled",-3),"hassles",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"haste",-5),"hastily",-1),"hasty",-1),"hate",-5),"hated",-5),"hateful",-5),"hatefully",-5),"hatefulness",-5),"hater",-5),"haters",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hates",-5),"hating",-5),"hatred",-5),"haughtily",-1),"haughty",-1),"haunt",-3),"haunting",-3),"havoc",-1),"hawkish",-1),"haywire",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hazard",-3),"hazardous",-3),"haze",-1),"hazy",-1),"head-aches",-1),"headache",-2),"headaches",-2),"heartbreaker",-4),"heartbreaking",-4),"heartbreakingly",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"heartless",-4),"heathen",-1),"heavy-handed",-2),"heavyhearted",-2),"heck",-1),"heckle",-1),"heckled",-1),"heckles",-1),"hectic",-1),"hedge",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hedonistic",-1),"heedless",-1),"hefty",-1),"hegemonism",-1),"hegemonistic",-1),"hegemony",-1),"heinous",-1),"hell",-2),"hell-bent",-2),"hellion",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hells",-1),"helpless",-3),"helplessly",-3),"helplessness",-1),"heresy",-1),"heretic",-1),"heretical",-1),"hesitant",-1),"hestitant",-1),"hideous",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hideously",-1),"hideousness",-1),"high-priced",-1),"hiliarious",-1),"hinder",-1),"hindrance",-1),"hiss",-1),"hissed",-1),"hissing",-1),"ho-hum",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hoard",-1),"hoax",-5),"hobble",-5),"hogs",-1),"hollow",-1),"hoodium",-1),"hoodwink",-1),"hooligan",-1),"hopeless",-2),"hopelessly",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hopelessness",-2),"horde",-2),"horrendous",-1),"horrendously",-1),"horrible",-1),"horrid",-1),"horrific",-1),"horrified",-1),"horrifies",-1),"horrify",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"horrifying",-1),"horrifys",-1),"hostage",-1),"hostile",-1),"hostilities",-1),"hostility",-1),"hotbeds",-1),"hothead",-1),"hotheaded",-1),"hothouse",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hubris",-1),"huckster",-1),"hum",-1),"humid",-1),"humiliate",-3),"humiliating",-3),"humiliation",-3),"humming",-1),"hung",-3),"hurt",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hurted",-5),"hurtful",-5),"hurting",-5),"hurts",-4),"hustler",-1),"hype",-1),"hypocricy",-3),"hypocrisy",-3),"hypocrite",-3),"hypocrites",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"hypocritical",-3),"hypocritically",-3),"hysteria",-2),"hysteric",-2),"hysterical",-2),"hysterically",-2),"hysterics",-2),"idiocies",-1),"idiocy",-1),"idiot",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"idiotic",-3),"idiotically",-3),"idiots",-3),"idle",-1),"ignoble",-1),"ignominious",-3),"ignominiously",-3),"ignominy",-3),"ignorance",-5),"ignorant",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ignore",-5),"ill-advised",-2),"ill-conceived",-2),"ill-defined",-2),"ill-designed",-2),"ill-fated",-2),"ill-favored",-2),"ill-formed",-2),"ill-mannered",-2),"ill-natured",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ill-sorted",-2),"ill-tempered",-2),"ill-treated",-2),"ill-treatment",-2),"ill-usage",-2),"ill-used",-2),"illegal",-4),"illegally",-4),"illegitimate",-1),"illicit",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"illiterate",-1),"illness",-1),"illogic",-1),"illogical",-1),"illogically",-1),"illusion",-1),"illusions",-1),"illusory",-1),"imaginary",-1),"imbalance",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"imbecile",-1),"imbroglio",-1),"immaterial",-1),"immature",-1),"imminence",-1),"imminently",-1),"immobilized",-1),"immoderate",-1),"immoderately",-1),"immodest",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"immoral",-1),"immorality",-1),"immorally",-1),"immovable",-1),"impair",-3),"impaired",-1),"impasse",-1),"impatience",-2),"impatient",-1),"impatiently",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"impeach",-1),"impedance",-1),"impede",-1),"impediment",-1),"impending",-1),"impenitent",-1),"imperfect",-1),"imperfection",-1),"imperfections",-1),"imperfectly",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"imperialist",-2),"imperil",-2),"imperious",-1),"imperiously",-1),"impermissible",-1),"impersonal",-1),"impertinent",-1),"impetuous",-1),"impetuously",-1),"impiety",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"impinge",-1),"impious",-1),"implacable",-1),"implausible",-1),"implausibly",-1),"implicate",-1),"implication",-1),"implode",-2),"impolite",-1),"impolitely",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"impolitic",-1),"importunate",-1),"importune",-1),"impose",-1),"imposers",-1),"imposing",-1),"imposition",-1),"impossible",-3),"impossiblity",-3),"impossibly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"impotent",-2),"impoverish",-1),"impoverished",-1),"impractical",-1),"imprecate",-1),"imprecise",-2),"imprecisely",-1),"imprecision",-1),"imprison",-1),"imprisonment",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"improbability",-1),"improbable",-1),"improbably",-1),"improper",-1),"improperly",-1),"impropriety",-1),"imprudence",-1),"imprudent",-1),"impudence",-1),"impudent",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"impudently",-1),"impugn",-1),"impulsive",-3),"impulsively",-3),"impunity",-1),"impure",-1),"impurity",-1),"inability",-1),"inaccuracies",-1),"inaccuracy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inaccurate",-1),"inaccurately",-1),"inaction",-1),"inactive",-1),"inadequacy",-1),"inadequate",-1),"inadequately",-1),"inadverent",-1),"inadverently",-1),"inadvisable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inadvisably",-1),"inane",-1),"inanely",-1),"inappropriate",-1),"inappropriately",-1),"inapt",-1),"inaptitude",-1),"inarticulate",-1),"inattentive",-1),"inaudible",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"incapable",-1),"incapably",-1),"incautious",-1),"incendiary",-1),"incense",-2),"incessant",-1),"incessantly",-1),"incite",-1),"incitement",-1),"incivility",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inclement",-1),"incognizant",-1),"incoherence",-1),"incoherent",-1),"incoherently",-1),"incommensurate",-1),"incomparable",-1),"incomparably",-1),"incompatability",-2),"incompatibility",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"incompatible",-2),"incompetence",-2),"incompetent",-2),"incompetently",-2),"incomplete",-3),"incompliant",-3),"incomprehensible",-3),"incomprehension",-3),"inconceivable",-3),"inconceivably",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"incongruous",-3),"incongruously",-3),"inconsequent",-3),"inconsequential",-1),"inconsequentially",-1),"inconsequently",-1),"inconsiderate",-1),"inconsiderately",-1),"inconsistence",-4),"inconsistencies",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inconsistency",-1),"inconsistent",-4),"inconsolable",-1),"inconsolably",-1),"inconstant",-1),"inconvenience",-1),"inconveniently",-1),"incorrect",-5),"incorrectly",-1),"incorrigible",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"incorrigibly",-1),"incredulous",-1),"incredulously",-1),"inculcate",-1),"indecency",-5),"indecent",-5),"indecently",-5),"indecision",-2),"indecisive",-2),"indecisively",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"indecorum",-1),"indefensible",-1),"indelicate",-1),"indeterminable",-1),"indeterminably",-1),"indeterminate",-1),"indifference",-1),"indifferent",-1),"indigent",-1),"indignant",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"indignantly",-1),"indignation",-1),"indignity",-1),"indiscernible",-1),"indiscreet",-1),"indiscreetly",-1),"indiscretion",-1),"indiscriminate",-2),"indiscriminately",-2),"indiscriminating",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"indistinguishable",-2),"indoctrinate",-1),"indoctrination",-1),"indolent",-1),"indulge",-1),"ineffective",-1),"ineffectively",-1),"ineffectiveness",-1),"ineffectual",-1),"ineffectually",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ineffectualness",-1),"inefficacious",-1),"inefficacy",-1),"inefficiency",-1),"inefficient",-1),"inefficiently",-1),"inelegance",-1),"inelegant",-1),"ineligible",-1),"ineloquent",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ineloquently",-1),"inept",-1),"ineptitude",-1),"ineptly",-1),"inequalities",-1),"inequality",-1),"inequitable",-1),"inequitably",-1),"inequities",-1),"inescapable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inescapably",-1),"inessential",-1),"inevitable",-1),"inevitably",-1),"inexcusable",-1),"inexcusably",-1),"inexorable",-1),"inexorably",-1),"inexperience",-1),"inexperienced",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inexpert",-1),"inexpertly",-1),"inexpiable",-1),"inexplainable",-1),"inextricable",-1),"inextricably",-1),"infamous",-1),"infamously",-1),"infamy",-1),"infected",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"infection",-1),"infections",-1),"inferior",-1),"inferiority",-1),"infernal",-1),"infest",-1),"infested",-1),"infidel",-1),"infidels",-1),"infiltrator",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"infiltrators",-1),"infirm",-1),"inflame",-1),"inflammation",-1),"inflammatory",-1),"inflammed",-1),"inflated",-1),"inflationary",-1),"inflexible",-1),"inflict",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"infraction",-1),"infringe",-1),"infringement",-1),"infringements",-1),"infuriate",-2),"infuriated",-2),"infuriating",-2),"infuriatingly",-2),"inglorious",-2),"ingrate",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ingratitude",-2),"inhibit",-2),"inhibition",-2),"inhospitable",-2),"inhospitality",-2),"inhuman",-1),"inhumane",-3),"inhumanity",-3),"inimical",-1),"inimically",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"iniquitous",-1),"iniquity",-1),"injudicious",-1),"injure",-3),"injurious",-3),"injury",-3),"injustice",-3),"injustices",-1),"innuendo",-1),"inoperable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"inopportune",-1),"inordinate",-1),"inordinately",-1),"insane",-3),"insanely",-3),"insanity",-3),"insatiable",-1),"insecure",-1),"insecurity",-1),"insensible",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"insensitive",-2),"insensitively",-3),"insensitivity",-3),"insidious",-3),"insidiously",-2),"insignificance",-3),"insignificant",-3),"insignificantly",-3),"insincere",-4),"insincerely",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"insincerity",-4),"insinuate",-2),"insinuating",-1),"insinuation",-1),"insociable",-1),"insolence",-1),"insolent",-1),"insolently",-1),"insolvent",-1),"insouciance",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"instability",-1),"instable",-2),"instigate",-2),"instigator",-2),"instigators",-2),"insubordinate",-4),"insubstantial",-4),"insubstantially",-4),"insufferable",-2),"insufferably",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"insufficiency",-2),"insufficient",-2),"insufficiently",-2),"insular",-1),"insult",-5),"insulted",-1),"insulting",-1),"insultingly",-1),"insults",-1),"insupportable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"insupportably",-1),"insurmountable",-1),"insurmountably",-1),"insurrection",-1),"intefere",-1),"inteferes",-1),"intense",-1),"interfere",-1),"interference",-1),"interferes",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"intermittent",-1),"interrupt",-1),"interruption",-1),"interruptions",-1),"intimidate",-1),"intimidating",-1),"intimidatingly",-1),"intimidation",-1),"intolerable",-1),"intolerablely",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"intolerance",-1),"intoxicate",-1),"intractable",-1),"intransigence",-1),"intransigent",-1),"intrude",-4),"intrusion",-4),"intrusive",-1),"inundate",-1),"inundated",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"invader",-1),"invalid",-5),"invalidate",-1),"invalidity",-1),"invasive",-1),"invective",-1),"inveigle",-1),"invidious",-1),"invidiously",-1),"invidiousness",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"invisible",-4),"involuntarily",-1),"involuntary",-1),"irascible",-1),"irate",-1),"irately",-1),"ire",-1),"irk",-1),"irked",-1),"irking",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"irks",-1),"irksome",-1),"irksomely",-1),"irksomeness",-1),"irksomenesses",-1),"ironic",-3),"ironical",-3),"ironically",-3),"ironies",-3),"irony",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"irragularity",-1),"irrational",-1),"irrationalities",-1),"irrationality",-1),"irrationally",-1),"irrationals",-1),"irreconcilable",-1),"irrecoverable",-1),"irrecoverableness",-1),"irrecoverablenesses",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"irrecoverably",-1),"irredeemable",-1),"irredeemably",-1),"irreformable",-1),"irregular",-2),"irregularity",-2),"irrelevance",-2),"irrelevant",-2),"irreparable",-2),"irreplacible",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"irrepressible",-2),"irresolute",-2),"irresolvable",-2),"irresponsible",-2),"irresponsibly",-1),"irretating",-1),"irretrievable",-1),"irreversible",-1),"irritable",-1),"irritably",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"irritant",-1),"irritate",-1),"irritated",-1),"irritating",-1),"irritation",-1),"irritations",-1),"isolate",-2),"isolated",-2),"isolation",-2),"issue",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"issues",-1),"itch",-1),"itching",-3),"itchy",-1),"jabber",-1),"jaded",-1),"jagged",-1),"jam",-1),"jarring",-1),"jaundiced",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"jealous",-2),"jealously",-2),"jealousness",-2),"jealousy",-2),"jeer",-1),"jeering",-1),"jeeringly",-1),"jeers",-1),"jeopardize",-1),"jeopardy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"jerk",-1),"jerky",-1),"jitter",-1),"jitters",-1),"jittery",-1),"job-killing",-1),"jobless",-3),"joke",-1),"joker",-1),"jolt",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"judder",-1),"juddering",-1),"judders",-1),"jumpy",-1),"junk",-3),"junky",-1),"junkyard",-1),"jutter",-1),"jutters",-1),"kaput",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"kill",-5),"killed",-5),"killer",-4),"killing",-4),"killjoy",-4),"kills",-4),"knave",-1),"knife",-1),"knock",-2),"knotted",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"kook",-1),"kooky",-1),"lack",-3),"lackadaisical",-1),"lacked",-1),"lackey",-1),"lackeys",-1),"lacking",-1),"lackluster",-1),"lacks",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"laconic",-1),"lag",-1),"lagged",-1),"lagging",-1),"laggy",-1),"lags",-1),"laid-off",-1),"lambast",-1),"lambaste",-1),"lame",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lame-duck",-1),"lament",-1),"lamentable",-1),"lamentably",-1),"languid",-1),"languish",-1),"languor",-1),"languorous",-1),"languorously",-1),"lanky",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lapse",-1),"lapsed",-1),"lapses",-1),"lascivious",-1),"last-ditch",-1),"latency",-1),"laughable",-1),"laughably",-1),"laughingstock",-1),"lawbreaker",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lawbreaking",-1),"lawless",-1),"lawlessness",-1),"layoff",-1),"layoff-happy",-1),"lazy",-3),"leak",-1),"leakage",-1),"leakages",-1),"leaking",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"leaks",-1),"leaky",-1),"lech",-1),"lecher",-1),"lecherous",-1),"lechery",-1),"leech",-1),"leer",-1),"leery",-1),"left-leaning",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lemon",-1),"lengthy",-1),"less-developed",-1),"lesser-known",-1),"letch",-1),"lethal",-1),"lethargic",-1),"lethargy",-1),"lewd",-1),"lewdly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lewdness",-1),"liability",-1),"liable",-2),"liar",-3),"liars",-4),"licentious",-1),"licentiously",-1),"licentiousness",-1),"lie",-3),"lied",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lier",-3),"lies",-3),"life-threatening",-4),"lifeless",-4),"limit",-3),"limitation",-3),"limitations",-3),"limited",-3),"limits",-3),"limp",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"listless",-1),"litigious",-1),"little-known",-1),"livid",-1),"lividly",-1),"loath",-1),"loathe",-1),"loathing",-4),"loathly",-4),"loathsome",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"loathsomely",-1),"lone",-1),"loneliness",-1),"lonely",-1),"loner",-1),"lonesome",-1),"long-time",-1),"long-winded",-1),"longing",-3),"longingly",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"loophole",-2),"loopholes",-2),"loose",-3),"loot",-1),"lorn",-1),"lose",-5),"loser",-5),"losers",-5),"loses",-5),"losing",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"loss",-5),"losses",-5),"lost",-5),"loud",-2),"louder",-2),"lousy",-2),"loveless",-2),"lovelorn",-2),"low-rated",-2),"lowly",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ludicrous",-2),"ludicrously",-2),"lugubrious",-2),"lukewarm",-2),"lull",-2),"lumpy",-2),"lunatic",-2),"lunaticism",-2),"lurch",-2),"lure",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"lurid",-1),"lurk",-1),"lurking",-1),"lying",-1),"macabre",-1),"mad",-1),"madden",-1),"maddening",-1),"maddeningly",-1),"madder",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"madly",-3),"madman",-3),"madness",-3),"maladjusted",-3),"maladjustment",-3),"malady",-3),"malaise",-3),"malcontent",-3),"malcontented",-1),"maledict",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"malevolence",-1),"malevolent",-1),"malevolently",-1),"malice",-1),"malicious",-1),"maliciously",-1),"maliciousness",-1),"malign",-2),"malignant",-2),"malodorous",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"maltreatment",-2),"mangle",-2),"mangled",-2),"mangles",-2),"mangling",-2),"mania",-3),"maniac",-3),"maniacal",-3),"manic",-3),"manipulate",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"manipulation",-3),"manipulative",-3),"manipulators",-3),"mar",-1),"marginal",-1),"marginally",-1),"martyrdom",-1),"martyrdom-seeking",-1),"mashed",-1),"massacre",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"massacres",-1),"matte",-1),"mawkish",-1),"mawkishly",-1),"mawkishness",-1),"meager",-1),"meaningless",-4),"meanness",-2),"measly",-2),"meddle",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"meddlesome",-2),"mediocre",-2),"mediocrity",-2),"melancholy",-2),"melodramatic",-2),"melodramatically",-1),"meltdown",-2),"menace",-2),"menacing",-2),"menacingly",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"mendacious",-2),"mendacity",-2),"menial",-2),"merciless",-2),"mercilessly",-1),"mess",-1),"messed",-1),"messes",-1),"messing",-1),"messy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"midget",-1),"miff",-1),"militancy",-1),"mindless",-1),"mindlessly",-1),"mirage",-1),"mire",-1),"misalign",-1),"misaligned",-1),"misaligns",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"misapprehend",-1),"misbecome",-1),"misbecoming",-1),"misbegotten",-1),"misbehave",-1),"misbehavior",-1),"miscalculate",-1),"miscalculation",-1),"miscellaneous",-1),"mischief",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"mischievous",-1),"mischievously",-1),"misconception",-1),"misconceptions",-3),"miscreant",-3),"miscreants",-3),"misdirection",-3),"miser",-3),"miserable",-3),"miserableness",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"miserably",-3),"miseries",-2),"miserly",-2),"misery",-2),"misfit",-1),"misfortune",-5),"misgiving",-3),"misgivings",-3),"misguidance",-3),"misguide",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"misguided",-3),"mishandle",-3),"mishap",-4),"misinform",-2),"misinformed",-2),"misinterpret",-2),"misjudge",-2),"misjudgment",-3),"mislead",-3),"misleading",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"misleadingly",-3),"mislike",-4),"mismanage",-2),"mispronounce",-2),"mispronounced",-2),"mispronounces",-2),"misread",-3),"misreading",-3),"misrepresent",-2),"misrepresentation",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"miss",-1),"missed",-1),"misses",-1),"misstatement",-1),"mist",-1),"mistake",-3),"mistaken",-3),"mistakenly",-3),"mistakes",-3),"mistified",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"mistress",-1),"mistrust",-1),"mistrustful",-1),"mistrustfully",-1),"mists",-1),"misunderstand",-2),"misunderstanding",-2),"misunderstandings",-2),"misunderstood",-2),"misuse",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"moan",-1),"mobster",-1),"mock",-3),"mocked",-3),"mockeries",-1),"mockery",-1),"mocking",-1),"mockingly",-1),"mocks",-1),"molest",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"molestation",-5),"monotonous",-2),"monotony",-2),"monster",-5),"monstrosities",-2),"monstrosity",-2),"monstrous",-3),"monstrously",-3),"moody",-4),"moot",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"mope",-1),"morbid",-3),"morbidly",-3),"mordant",-2),"mordantly",-1),"moribund",-1),"moron",-4),"moronic",-4),"morons",-4),"mortification",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"mortified",-1),"mortify",-3),"mortifying",-1),"motionless",-1),"motley",-1),"mourn",-4),"mourner",-3),"mournful",-3),"mournfully",-3),"muddle",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"muddy",-1),"mudslinger",-1),"mudslinging",-1),"mulish",-1),"multi-polarization",-1),"mundane",-1),"murder",-3),"murderer",-1),"murderous",-1),"murderously",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"murky",-1),"muscle-flexing",-1),"mushy",-1),"musty",-1),"mysterious",-3),"mysteriously",-3),"mystery",-3),"mystify",-3),"myth",-2),"nag",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"nagging",-2),"naive",-5),"naively",-5),"narrower",-1),"nastily",-1),"nastiness",-1),"nasty",-3),"naughty",-4),"nauseate",-1),"nauseates",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"nauseating",-1),"nauseatingly",-1),"naÃ¯ve",-3),"nebulous",-1),"nebulously",-1),"needless",-1),"needlessly",-1),"needy",-3),"nefarious",-1),"nefariously",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"negate",-1),"negation",-1),"negative",-5),"negatives",-4),"negativity",-4),"neglect",-4),"neglected",-3),"negligence",-3),"negligent",-3),"nemesis",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"nepotism",-1),"nervous",-4),"nervously",-4),"nervousness",-4),"nettle",-1),"nettlesome",-1),"neurotic",-1),"neurotically",-1),"niggle",-1),"niggles",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"nightmare",-4),"nightmarish",-4),"nightmarishly",-3),"nitpick",-1),"nitpicking",-1),"noise",-3),"noises",-3),"noisier",-1),"noisy",-2),"non-confidence",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"nonexistent",-1),"nonresponsive",-1),"nonsense",-4),"nosey",-3),"notoriety",-1),"notorious",-1),"notoriously",-1),"noxious",-1),"nuisance",-1),"numb",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"obese",-1),"object",-1),"objection",-1),"objectionable",-1),"objections",-1),"oblique",-1),"obliterate",-1),"obliterated",-1),"oblivious",-1),"obnoxious",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"obnoxiously",-1),"obscene",-5),"obscenely",-5),"obscenity",-5),"obscure",-1),"obscured",-1),"obscures",-1),"obscurity",-1),"obsess",-4),"obsessive",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"obsessively",-1),"obsessiveness",-1),"obsolete",-1),"obstacle",-1),"obstinate",-1),"obstinately",-1),"obstruct",-1),"obstructed",-1),"obstructing",-1),"obstruction",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"obstructs",-1),"obtrusive",-1),"obtuse",-1),"occlude",-1),"occluded",-1),"occludes",-1),"occluding",-1),"odd",-3),"odder",-3),"oddest",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"oddities",-1),"oddity",-1),"oddly",-2),"odor",-1),"offence",-3),"offend",-3),"offender",-3),"offending",-3),"offenses",-3),"offensive",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"offensively",-3),"offensiveness",-1),"officious",-1),"ominous",-1),"ominously",-1),"omission",-1),"omit",-1),"one-sided",-1),"onerous",-1),"onerously",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"onslaught",-1),"opinionated",-1),"opponent",-1),"opportunistic",-1),"oppose",-1),"opposition",-1),"oppositions",-1),"oppress",-1),"oppression",-5),"oppressive",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"oppressively",-5),"oppressiveness",-5),"oppressors",-5),"ordeal",-3),"orphan",-2),"ostracize",-1),"outbreak",-1),"outburst",-3),"outbursts",-3),"outcast",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"outcry",-3),"outlaw",-4),"outmoded",-2),"outrage",-5),"outraged",-5),"outrageous",-5),"outrageously",-5),"outrageousness",-5),"outrages",-1),"outsider",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"over-acted",-1),"over-awe",-1),"over-balanced",-1),"over-hyped",-1),"over-priced",-1),"over-valuation",-1),"overact",-2),"overacted",-2),"overawe",-1),"overbalance",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"overbalanced",-1),"overbearing",-1),"overbearingly",-1),"overblown",-1),"overdo",-1),"overdone",-1),"overdue",-1),"overemphasize",-1),"overheat",-1),"overkill",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"overloaded",-1),"overlook",-1),"overpaid",-1),"overpayed",-1),"overplay",-1),"overpower",-1),"overpriced",-1),"overrated",-1),"overreach",-1),"overrun",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"overshadow",-3),"oversight",-1),"oversights",-1),"oversimplification",-1),"oversimplified",-1),"oversimplify",-1),"oversize",-3),"overstate",-1),"overstated",-1),"overstatement",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"overstatements",-1),"overstates",-1),"overtaxed",-1),"overthrow",-1),"overthrows",-1),"overturn",-2),"overweight",-1),"overwhelm",-1),"overwhelmed",-1),"overwhelming",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"overwhelmingly",-1),"overwhelms",-1),"overzealous",-1),"overzealously",-1),"overzelous",-1),"pain",-4),"painful",-4),"painfull",-4),"painfully",-4),"pains",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pale",-2),"pales",-2),"paltry",-1),"pan",-1),"pandemonium",-1),"pander",-1),"pandering",-1),"panders",-1),"panic",-1),"panick",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"panicked",-3),"panicking",-3),"panicky",-1),"paradoxical",-1),"paradoxically",-1),"paralize",-2),"paralyzed",-2),"paranoia",-3),"paranoid",-3),"parasite",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pariah",-1),"parody",-4),"partiality",-1),"partisan",-1),"partisans",-1),"passe",-1),"passive",-1),"passiveness",-1),"pathetic",-1),"pathetically",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"patronize",-1),"paucity",-1),"pauper",-1),"paupers",-1),"payback",-1),"peculiar",-1),"peculiarly",-1),"pedantic",-1),"peeled",-1),"peeve",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"peeved",-1),"peevish",-1),"peevishly",-1),"penalize",-3),"penalty",-3),"perfidious",-1),"perfidity",-1),"perfunctory",-1),"peril",-1),"perilous",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"perilously",-1),"perish",-1),"pernicious",-1),"perplex",-1),"perplexed",-1),"perplexing",-1),"perplexity",-1),"persecute",-1),"persecution",-1),"pertinacious",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pertinaciously",-1),"pertinacity",-1),"perturb",-1),"perturbed",-1),"pervasive",-2),"perverse",-2),"perversely",-1),"perversion",-1),"perversity",-1),"pervert",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"perverted",-1),"perverts",-1),"pessimism",-3),"pessimistic",-3),"pessimistically",-3),"pest",-1),"pestilent",-1),"petrified",-1),"petrify",-1),"pettifog",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"petty",-1),"phobia",-2),"phobic",-1),"phony",-1),"picket",-1),"picketed",-1),"picketing",-1),"pickets",-1),"picky",-1),"pig",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pigs",-3),"pillage",-1),"pillory",-1),"pimple",-2),"pinch",-1),"pique",-1),"pitiable",-1),"pitiful",-1),"pitifully",-1),"pitiless",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pitilessly",-1),"pittance",-1),"pity",-3),"plagiarize",-1),"plague",-1),"plasticky",-1),"plaything",-1),"plea",-1),"pleas",-1),"plebeian",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"plight",-1),"plot",-1),"plotters",-1),"ploy",-1),"plunder",-1),"plunderer",-1),"pointless",-1),"pointlessly",-1),"poison",-2),"poisonous",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"poisonously",-2),"pokey",-1),"poky",-1),"polarisation",-3),"polemize",-1),"pollute",-2),"polluter",-2),"polluters",-2),"polution",-2),"pompous",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"poor",-2),"poorer",-2),"poorest",-2),"poorly",-2),"posturing",-1),"pout",-1),"poverty",-4),"powerless",-4),"prate",-1),"pratfall",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"prattle",-1),"precarious",-1),"precariously",-1),"precipitate",-1),"precipitous",-1),"predatory",-1),"predicament",-1),"prejudge",-2),"prejudice",-2),"prejudices",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"prejudicial",-2),"premeditated",-1),"preoccupy",-1),"preposterous",-1),"preposterously",-1),"presumptuous",-1),"presumptuously",-1),"pretence",-1),"pretend",-1),"pretense",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"pretentious",-1),"pretentiously",-1),"prevaricate",-1),"pricey",-1),"pricier",-1),"prick",-1),"prickle",-1),"prickles",-1),"prideful",-1),"prik",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"primitive",-1),"prison",-1),"prisoner",-1),"problem",-3),"problematic",-3),"problems",-3),"procrastinate",-2),"procrastinates",-2),"procrastination",-2),"profane",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"profanity",-1),"prohibit",-3),"prohibitive",-3),"prohibitively",-3),"propaganda",-1),"propagandize",-1),"proprietary",-1),"prosecute",-1),"protest",-3),"protested",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"protesting",-1),"protests",-1),"protracted",-1),"provocation",-1),"provocative",-1),"provoke",-1),"pry",-1),"pugnacious",-1),"pugnaciously",-1),"pugnacity",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"punch",-1),"punish",-3),"punishable",-3),"punitive",-3),"punk",-2),"puny",-2),"puppet",-1),"puppets",-1),"puzzled",-1),"puzzlement",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"puzzling",-1),"quack",-1),"qualm",-1),"qualms",-1),"quandary",-1),"quarrel",-3),"quarrellous",-1),"quarrellously",-1),"quarrels",-1),"quarrelsome",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"quash",-1),"queer",-1),"questionable",-1),"quibble",-1),"quibbles",-1),"quitter",-1),"rabid",-1),"racism",-1),"racist",-5),"racists",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"racy",-2),"radical",-4),"radicalization",-5),"radically",-5),"radicals",-5),"rage",-4),"ragged",-3),"raging",-3),"rail",-1),"raked",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rampage",-3),"rampant",-3),"ramshackle",-1),"rancor",-1),"randomly",-2),"rankle",-1),"rant",-1),"ranted",-1),"ranting",-1),"rantingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rants",-1),"rape",-5),"raped",-5),"raping",-5),"rascal",-4),"rascals",-4),"rash",-3),"rattle",-2),"rattled",-2),"rattles",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ravage",-3),"raving",-2),"reactionary",-1),"rebellious",-3),"rebuff",-1),"rebuke",-1),"recalcitrant",-1),"recant",-1),"recession",-1),"recessionary",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"reckless",-4),"recklessly",-4),"recklessness",-4),"recoil",-1),"recourses",-1),"redundancy",-1),"redundant",-1),"refusal",-1),"refuse",-4),"refused",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"refuses",-2),"refusing",-2),"refutation",-1),"refute",-1),"refuted",-1),"refutes",-1),"refuting",-1),"regress",-1),"regression",-1),"regressive",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"regret",-4),"regreted",-4),"regretful",-4),"regretfully",-4),"regrets",-4),"regrettable",-4),"regrettably",-4),"regretted",-4),"reject",-5),"rejected",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rejecting",-5),"rejection",-5),"rejects",-5),"relapse",-5),"relentless",-3),"relentlessly",-3),"relentlessness",-3),"reluctance",-2),"reluctant",-2),"reluctantly",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"remorse",-4),"remorseful",-4),"remorsefully",-4),"remorseless",-4),"remorselessly",-4),"remorselessness",-4),"renounce",-1),"renunciation",-1),"repel",-1),"repetitive",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"reprehensible",-1),"reprehensibly",-1),"reprehension",-1),"reprehensive",-1),"repress",-1),"repression",-1),"repressive",-1),"reprimand",-1),"reproach",-1),"reproachful",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"reprove",-1),"reprovingly",-1),"repudiate",-1),"repudiation",-1),"repugn",-1),"repugnance",-1),"repugnant",-1),"repugnantly",-1),"repulse",-3),"repulsed",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"repulsing",-2),"repulsive",-3),"repulsively",-1),"repulsiveness",-1),"resent",-1),"resentful",-1),"resentment",-1),"resignation",-1),"resigned",-1),"resistance",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"restless",-3),"restlessness",-3),"restrict",-3),"restricted",-3),"restriction",-3),"restrictive",-3),"resurgent",-1),"retaliate",-2),"retaliatory",-2),"retard",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"retarded",-3),"retardedness",-3),"retards",-3),"reticent",-2),"retract",-2),"retreat",-2),"retreated",-2),"revenge",-5),"revengeful",-5),"revengefully",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"revert",-4),"revile",-3),"reviled",-3),"revoke",-3),"revolt",-4),"revolting",-4),"revoltingly",-4),"revulsion",-3),"revulsive",-3),"rhapsodize",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rhetoric",-3),"rhetorical",-3),"ricer",-2),"ridicule",-2),"ridicules",-2),"ridiculous",-3),"ridiculously",-2),"rife",-1),"rift",-5),"rifts",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rigid",-3),"rigidity",-2),"rigidness",-2),"rile",-1),"riled",-1),"rip",-4),"rip-off",-3),"ripoff",-3),"ripped",-3),"risk",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"risks",-4),"risky",-4),"rival",-5),"rivalry",-5),"roadblocks",-3),"rocky",-1),"rogue",-3),"rollercoaster",-2),"rot",-2),"rotten",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rough",-2),"rremediable",-1),"rubbish",-2),"rude",-4),"rue",-1),"ruffian",-1),"ruffle",-1),"ruin",-3),"ruined",-3),"ruining",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ruinous",-3),"ruins",-3),"rumbling",-2),"rumor",-2),"rumors",-2),"rumours",-2),"rumple",-1),"run-down",-2),"runaway",-2),"rupture",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"rust",-3),"rusts",-3),"rusty",-3),"rut",-2),"ruthless",-2),"ruthlessly",-1),"ruthlessness",-1),"ruts",-1),"sabotage",-3),"sack",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sacrificed",-3),"sad",-4),"sadden",-4),"sadly",-4),"sadness",-4),"sag",-1),"sagged",-1),"sagging",-1),"saggy",-1),"sags",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"salacious",-1),"sanctimonious",-1),"sap",-1),"sarcasm",-2),"sarcastic",-2),"sarcastically",-2),"sardonic",-4),"sardonically",-4),"sass",-1),"satirical",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"satirize",-1),"savage",-3),"savaged",-3),"savagery",-4),"savages",-4),"scaly",-1),"scam",-5),"scams",-5),"scandal",-5),"scandalize",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"scandalized",-5),"scandalous",-5),"scandalously",-5),"scandals",-5),"scandel",-1),"scandels",-1),"scant",-1),"scapegoat",-1),"scar",-1),"scarce",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"scarcely",-4),"scarcity",-4),"scare",-5),"scared",-5),"scarier",-4),"scariest",-5),"scarily",-4),"scarred",-1),"scars",-1),"scary",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"scathing",-1),"scathingly",-1),"sceptical",-1),"scoff",-1),"scoffingly",-1),"scold",-2),"scolded",-1),"scolding",-1),"scoldingly",-1),"scorching",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"scorchingly",-1),"scorn",-1),"scornful",-1),"scornfully",-1),"scoundrel",-1),"scourge",-1),"scowl",-1),"scramble",-1),"scrambled",-1),"scrambles",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"scrambling",-1),"scrap",-3),"scratch",-3),"scratched",-1),"scratches",-1),"scratchy",-1),"scream",-1),"screech",-1),"screw-up",-1),"screwed",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"screwed-up",-1),"screwy",-1),"scuff",-1),"scuffs",-1),"scum",-2),"scummy",-1),"second-class",-1),"second-tier",-1),"secretive",-1),"sedentary",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"seedy",-1),"seethe",-1),"seething",-1),"self-coup",-1),"self-criticism",-1),"self-defeating",-1),"self-destructive",-1),"self-humiliation",-1),"self-interest",-1),"self-interested",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"self-serving",-1),"selfinterested",-1),"selfish",-4),"selfishly",-4),"selfishness",-4),"semi-retarded",-1),"senile",-5),"sensationalize",-1),"senseless",-3),"senselessly",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"seriousness",-1),"sermonize",-1),"servitude",-1),"set-up",-1),"setback",-3),"setbacks",-3),"sever",-2),"severe",-2),"severity",-2),"sh*t",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"shabby",-1),"shadowy",-1),"shady",-2),"shake",-2),"shaky",-2),"shallow",-2),"sham",-3),"shambles",-3),"shame",-3),"shameful",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"shamefully",-1),"shamefulness",-1),"shameless",-3),"shamelessly",-3),"shamelessness",-3),"shark",-2),"sharply",-2),"shatter",-1),"shemale",-1),"shimmer",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"shimmy",-1),"shipwreck",-2),"shirk",-2),"shirker",-1),"shit",-5),"shiver",-1),"shock",-3),"shocked",-3),"shocking",-3),"shockingly",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"shoddy",-1),"short-lived",-1),"shortage",-3),"shortchange",-1),"shortcoming",-1),"shortcomings",-1),"shortness",-2),"shortsighted",-4),"shortsightedness",-2),"showdown",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"shrew",-1),"shriek",-1),"shrill",-1),"shrilly",-1),"shrivel",-1),"shroud",-1),"shrouded",-1),"shrug",-1),"shun",-1),"shunned",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sick",-3),"sicken",-3),"sickening",-3),"sickeningly",-1),"sickly",-1),"sickness",-1),"sidetrack",-1),"sidetracked",-1),"siege",-1),"sillily",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"silly",-1),"simplistic",-3),"simplistically",-1),"sin",-3),"sinful",-3),"sinfully",-3),"sinister",-3),"sinisterly",-1),"sink",-2),"sinking",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"skeletons",-2),"skeptic",-3),"skeptical",-3),"skeptically",-3),"skepticism",-3),"sketchy",-4),"skimpy",-2),"skinny",-2),"skittish",-1),"skittishly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"skulk",-1),"slack",-1),"slander",-3),"slanderer",-3),"slanderous",-3),"slanderously",-3),"slanders",-1),"slap",-2),"slashing",-1),"slaughter",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"slaughtered",-5),"slave",-4),"slaves",-4),"sleazy",-3),"slime",-1),"slog",-1),"slogged",-1),"slogging",-1),"slogs",-1),"sloooooooooooooow",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sloooow",-1),"slooow",-1),"sloow",-1),"sloppily",-1),"sloppy",-1),"sloth",-1),"slothful",-1),"slow",-1),"slow-moving",-1),"slowed",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"slower",-1),"slowest",-1),"slowly",-1),"sloww",-1),"slowww",-1),"slowwww",-1),"slug",-1),"sluggish",-1),"slump",-1),"slumping",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"slumpping",-1),"slur",-1),"slut",-5),"sluts",-5),"sly",-1),"smack",-2),"smallish",-2),"smash",-2),"smear",-1),"smell",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"smelled",-1),"smelling",-1),"smells",-1),"smelly",-1),"smelt",-1),"smoke",-2),"smokescreen",-1),"smolder",-1),"smoldering",-1),"smother",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"smoulder",-1),"smouldering",-1),"smudge",-1),"smudged",-1),"smudges",-1),"smudging",-1),"smug",-1),"smugly",-1),"smut",-1),"smuttier",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"smuttiest",-1),"smutty",-1),"snag",-1),"snagged",-1),"snagging",-1),"snags",-1),"snappish",-1),"snappishly",-1),"snare",-1),"snarky",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"snarl",-1),"sneak",-2),"sneakily",-2),"sneaky",-2),"sneer",-1),"sneering",-1),"sneeringly",-1),"snob",-1),"snobbish",-1),"snobby",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"snobish",-1),"snobs",-1),"snub",-1),"so-cal",-1),"soapy",-1),"sob",-1),"sober",-1),"sobering",-1),"solemn",-1),"solicitude",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"somber",-1),"sore",-1),"sorely",-1),"soreness",-1),"sorrow",-1),"sorrowful",-1),"sorrowfully",-1),"sorry",-1),"sour",-2),"sourly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"spade",-1),"spank",-3),"spendy",-1),"spew",-1),"spewed",-1),"spewing",-1),"spews",-1),"spilling",-1),"spinster",-1),"spiritless",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"spite",-1),"spiteful",-1),"spitefully",-1),"spitefulness",-1),"splatter",-1),"split",-2),"splitting",-1),"spoil",-2),"spoilage",-1),"spoilages",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"spoiled",-1),"spoilled",-1),"spoils",-2),"spook",-1),"spookier",-1),"spookiest",-1),"spookily",-1),"spooky",-1),"spoon-fed",-1),"spoon-feed",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"spoonfed",-2),"sporadic",-1),"spotty",-1),"spurious",-1),"spurn",-1),"sputter",-1),"squabble",-1),"squabbling",-1),"squander",-1),"squash",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"squeak",-1),"squeaks",-1),"squeaky",-1),"squeal",-1),"squealing",-1),"squeals",-1),"squirm",-1),"stab",-2),"stagnant",-1),"stagnate",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stagnation",-1),"staid",-1),"stain",-1),"stains",-1),"stale",-1),"stalemate",-1),"stall",-1),"stalls",-1),"stammer",-1),"stampede",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"standstill",-1),"stark",-2),"starkly",-2),"startle",-1),"startling",-1),"startlingly",-1),"starvation",-1),"starve",-2),"static",-1),"steal",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stealing",-3),"steals",-3),"steep",-1),"steeply",-1),"stench",-1),"stereotype",-1),"stereotypical",-1),"stereotypically",-1),"stern",-1),"stew",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sticky",-2),"stiff",-1),"stiffness",-1),"stifle",-1),"stifling",-1),"stiflingly",-1),"stigma",-1),"stigmatize",-1),"sting",-1),"stinging",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stingingly",-1),"stingy",-1),"stink",-2),"stinks",-2),"stodgy",-2),"stole",-2),"stolen",-2),"stooge",-2),"stooges",-2),"stormy",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"straggle",-2),"straggler",-2),"strain",-2),"strained",-1),"straining",-1),"strange",-3),"strangely",-3),"stranger",-1),"strangest",-1),"strangle",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"streaky",-1),"strenuous",-1),"stress",-3),"stresses",-1),"stressful",-1),"stressfully",-1),"stricken",-1),"strict",-3),"strictly",-3),"strident",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stridently",-1),"strife",-1),"strike",-1),"stringent",-1),"stringently",-1),"struck",-3),"struggle",-1),"struggled",-1),"struggles",-1),"struggling",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"strut",-1),"stubborn",-4),"stubbornly",-4),"stubbornness",-4),"stuck",-3),"stuffy",-1),"stumble",-1),"stumbled",-1),"stumbles",-1),"stump",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stumped",-1),"stumps",-1),"stun",-2),"stunt",-3),"stunted",-3),"stupid",-1),"stupidest",-1),"stupidity",-1),"stupidly",-1),"stupified",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"stupify",-1),"stupor",-1),"stutter",-1),"stuttered",-1),"stuttering",-1),"stutters",-1),"sty",-1),"stymied",-1),"sub-par",-3),"subdued",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"subjected",-1),"subjection",-1),"subjugate",-1),"subjugation",-1),"submissive",-3),"subordinate",-1),"subpoena",-1),"subpoenas",-1),"subservience",-1),"subservient",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"substandard",-1),"subtract",-3),"subversion",-1),"subversive",-1),"subversively",-1),"subvert",-1),"succumb",-2),"suck",-4),"sucked",-3),"sucker",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sucks",-3),"sucky",-2),"sue",-3),"sued",-3),"sueing",-3),"sues",-1),"suffer",-1),"suffered",-1),"sufferer",-1),"sufferers",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"suffering",-1),"suffers",-1),"suffocate",-1),"sugar-coat",-1),"sugar-coated",-1),"sugarcoated",-1),"suicidal",-5),"suicide",-5),"sulk",-4),"sullen",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"sully",-1),"sunder",-1),"sunk",-3),"sunken",-3),"superficial",-1),"superficiality",-1),"superficially",-1),"superfluous",-1),"superstition",-3),"superstitious",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"suppress",-1),"suppression",-1),"surrender",-1),"susceptible",-1),"suspect",-2),"suspicion",-2),"suspicions",-2),"suspicious",-1),"suspiciously",-1),"swagger",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"swamped",-1),"sweaty",-2),"swelled",-1),"swelling",-1),"swindle",-1),"swipe",-3),"swollen",-1),"symptom",-1),"symptoms",-1),"syndrome",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"taboo",-1),"tacky",-1),"taint",-1),"tainted",-1),"tamper",-1),"tangle",-1),"tangled",-1),"tangles",-1),"tank",-1),"tanked",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tanks",-1),"tantrum",-1),"tardy",-1),"tarnish",-2),"tarnished",-1),"tarnishes",-1),"tarnishing",-1),"tattered",-1),"taunt",-1),"taunting",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tauntingly",-1),"taunts",-3),"taut",-1),"tawdry",-1),"taxing",-1),"tease",-1),"teasingly",-1),"tedious",-1),"tediously",-1),"temerity",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"temper",-3),"tempest",-2),"temptation",-1),"tenderness",-1),"tense",-1),"tension",-1),"tentative",-1),"tentatively",-1),"tenuous",-1),"tenuously",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tepid",-1),"terrible",-5),"terribleness",-5),"terribly",-4),"terror",-4),"terror-genic",-1),"terrorism",-5),"terrorize",-5),"testily",-1),"testy",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tetchily",-1),"tetchy",-1),"thankless",-2),"thicker",-1),"thirst",-1),"thorny",-4),"thoughtless",-3),"thoughtlessly",-3),"thoughtlessness",-3),"thrash",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"threat",-4),"threaten",-4),"threatening",-4),"threats",-4),"threesome",-3),"throb",-2),"throbbed",-2),"throbbing",-2),"throbs",-2),"throttle",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"thug",-4),"thumb-down",-3),"thumbs-down",-3),"thwart",-2),"time-consuming",-1),"timid",-3),"timidity",-3),"timidly",-3),"timidness",-3),"tin-y",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tingled",-1),"tingling",-1),"tired",-2),"tiresome",-2),"tiring",-1),"tiringly",-1),"toil",-1),"toll",-1),"top-heavy",-2),"topple",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"torment",-5),"tormented",-5),"torrent",-2),"tortuous",-1),"torture",-4),"tortured",-4),"tortures",-4),"torturing",-4),"torturous",-4),"torturously",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"totalitarian",-2),"touchy",-1),"toughness",-1),"tout",-1),"touted",-1),"touts",-1),"toxic",-4),"traduce",-1),"tragedy",-5),"tragic",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"tragically",-5),"traitor",-4),"traitorous",-1),"traitorously",-1),"tramp",-1),"trample",-1),"transgress",-2),"transgression",-2),"trap",-4),"traped",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"trapped",-4),"trash",-1),"trashed",-1),"trashy",-1),"trauma",-2),"traumatic",-2),"traumatically",-1),"traumatize",-1),"traumatized",-1),"travesties",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"travesty",-1),"treacherous",-1),"treacherously",-1),"treachery",-1),"treason",-1),"treasonous",-1),"trick",-1),"tricked",-1),"trickery",-1),"tricky",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"trivial",-1),"trivialize",-1),"trouble",-2),"troubled",-2),"troublemaker",-1),"troubles",-1),"troublesome",-1),"troublesomely",-1),"troubling",-1),"troublingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"truant",-1),"tumble",-1),"tumbled",-1),"tumbles",-1),"tumultuous",-1),"turbulent",-1),"turmoil",-1),"twist",-1),"twisted",-1),"twists",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"two-faced",-1),"two-faces",-1),"tyrannical",-4),"tyrannically",-4),"tyranny",-4),"tyrant",-4),"ugh",-1),"uglier",-4),"ugliest",-5),"ugliness",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"ugly",-3),"ulterior",-3),"ultimatum",-3),"ultimatums",-3),"ultra-hardline",-1),"un-viewable",-1),"unable",-1),"unacceptable",-2),"unacceptablely",-2),"unacceptably",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unaccessible",-2),"unaccustomed",-2),"unachievable",-2),"unaffordable",-2),"unappealing",-4),"unattractive",-3),"unauthentic",-3),"unavailable",-3),"unavoidably",-3),"unbearable",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unbearablely",-3),"unbelievable",-3),"unbelievably",-3),"uncaring",-3),"uncertain",-1),"uncivil",-1),"uncivilized",-1),"unclean",-2),"unclear",-2),"uncollectible",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"uncomfortable",-2),"uncomfortably",-2),"uncomfy",-2),"uncompetitive",-2),"uncompromising",-1),"uncompromisingly",-1),"unconfirmed",-1),"unconstitutional",-1),"uncontrolled",-2),"unconvincing",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unconvincingly",-2),"uncooperative",-2),"uncouth",-1),"uncreative",-1),"undecided",-1),"undefined",-3),"undependability",-1),"undependable",-1),"undercut",-2),"undercuts",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"undercutting",-1),"underdog",-1),"underestimate",-1),"underlings",-1),"undermine",-3),"undermined",-3),"undermines",-3),"undermining",-3),"underpaid",-3),"underpowered",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"undersized",-2),"undesirable",-3),"undetermined",-1),"undid",-1),"undignified",-1),"undissolved",-1),"undocumented",-1),"undone",-1),"undue",-1),"unease",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"uneasily",-1),"uneasiness",-1),"uneasy",-1),"uneconomical",-2),"unemployed",-3),"unequal",-1),"unethical",-3),"uneven",-1),"uneventful",-1),"unexpected",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unexpectedly",-1),"unexplained",-1),"unfairly",-1),"unfaithful",-1),"unfaithfully",-1),"unfamiliar",-1),"unfavorable",-1),"unfeeling",-1),"unfinished",-1),"unfit",-2),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unforeseen",-3),"unforgiving",-1),"unfortunate",-5),"unfortunately",-5),"unfounded",-1),"unfriendly",-2),"unfulfilled",-1),"unfunded",-1),"ungovernable",-1),"ungrateful",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unhappily",-4),"unhappiness",-4),"unhappy",-4),"unhealthy",-4),"unhelpful",-3),"unilateralism",-1),"unimaginable",-1),"unimaginably",-1),"unimportant",-1),"uninformed",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"uninsured",-1),"unintelligible",-1),"unintelligile",-1),"unipolar",-1),"unjust",-1),"unjustifiable",-1),"unjustifiably",-1),"unjustified",-1),"unjustly",-1),"unkind",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unkindly",-1),"unknown",-1),"unlamentable",-1),"unlamentably",-1),"unlawful",-2),"unlawfully",-2),"unlawfulness",-2),"unleash",-1),"unlicensed",-1),"unlikely",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unlucky",-1),"unmoved",-3),"unnatural",-2),"unnaturally",-2),"unnecessary",-4),"unneeded",-1),"unnerve",-1),"unnerved",-1),"unnerving",-1),"unnervingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unnoticed",-2),"unobserved",-3),"unorthodox",-3),"unorthodoxy",-3),"unpleasant",-1),"unpleasantries",-2),"unpopular",-2),"unpredictable",-1),"unprepared",-1),"unproductive",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unprofitable",-1),"unprove",-1),"unproved",-1),"unproven",-1),"unproves",-1),"unproving",-1),"unqualified",-1),"unravel",-1),"unraveled",-1),"unreachable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unreadable",-1),"unrealistic",-1),"unreasonable",-1),"unreasonably",-1),"unrelenting",-2),"unrelentingly",-2),"unreliability",-2),"unreliable",-2),"unresolved",-2),"unresponsive",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unrest",-3),"unruly",-1),"unsafe",-1),"unsatisfactory",-1),"unsavory",-1),"unscrupulous",-1),"unscrupulously",-1),"unsecure",-2),"unseemly",-1),"unsettle",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unsettled",-3),"unsettling",-3),"unsettlingly",-1),"unskilled",-4),"unsophisticated",-1),"unsound",-1),"unspeakable",-1),"unspeakablely",-1),"unspecified",-1),"unstable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unsteadily",-1),"unsteadiness",-1),"unsteady",-1),"unsuccessful",-1),"unsuccessfully",-1),"unsupported",-1),"unsupportive",-1),"unsure",-1),"unsuspecting",-1),"unsustainable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"untenable",-1),"untested",-1),"unthinkable",-1),"unthinkably",-1),"untimely",-1),"untouched",-1),"untrue",-1),"untrustworthy",-1),"untruthful",-1),"unusable",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unusably",-1),"unuseable",-1),"unuseably",-1),"unusual",-1),"unusually",-1),"unviewable",-1),"unwanted",-1),"unwarranted",-1),"unwatchable",-1),"unwelcome",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"unwell",-1),"unwieldy",-1),"unwilling",-1),"unwillingly",-1),"unwillingness",-1),"unwise",-1),"unwisely",-1),"unworkable",-1),"unworthy",-1),"unyielding",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"upbraid",-1),"upheaval",-1),"uprising",-1),"uproar",-3),"uproarious",-1),"uproariously",-1),"uproarous",-1),"uproarously",-1),"uproot",-2),"upset",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"upseting",-1),"upsets",-1),"upsetting",-1),"upsettingly",-1),"urgent",-1),"useless",-2),"usurp",-1),"usurper",-1),"utterly",-1),"vagrant",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vague",-2),"vagueness",-1),"vain",-1),"vainly",-1),"vanity",-1),"vehement",-1),"vehemently",-1),"vengeance",-4),"vengeful",-4),"vengefully",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vengefulness",-4),"venom",-3),"venomous",-3),"venomously",-3),"vent",-3),"vestiges",-1),"vex",-1),"vexation",-1),"vexing",-1),"vexingly",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vibrate",-1),"vibrated",-1),"vibrates",-1),"vibrating",-1),"vibration",-1),"vice",-1),"vicious",-1),"viciously",-1),"viciousness",-1),"victimize",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vile",-1),"vileness",-1),"vilify",-1),"villainous",-1),"villainously",-1),"villains",-1),"villian",-1),"villianous",-1),"villianously",-1),"villify",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vindictive",-1),"vindictively",-1),"vindictiveness",-1),"violate",-1),"violation",-1),"violator",-1),"violators",-1),"violent",-1),"violently",-1),"viper",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"virulence",-1),"virulent",-1),"virulently",-1),"virus",-3),"vociferous",-1),"vociferously",-1),"volatile",-1),"volatility",-1),"vomit",-1),"vomited",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"vomiting",-1),"vomits",-1),"vulgar",-1),"vulnerable",-1),"wack",-1),"wail",-1),"wallow",-1),"wane",-1),"waning",-1),"wanton",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"war-like",-3),"warily",-3),"wariness",-3),"warlike",-3),"warned",-2),"warning",-2),"warp",-1),"warped",-1),"wary",-1),"washed-out",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"waste",-1),"wasted",-1),"wasteful",-1),"wastefulness",-1),"wasting",-1),"water-down",-1),"watered-down",-1),"wayward",-1),"weak",-4),"weaken",-4),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"weakening",-3),"weaker",-3),"weakness",-3),"weaknesses",-3),"weariness",-1),"wearisome",-1),"weary",-1),"wedge",-1),"weed",-1),"weep",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"weird",-1),"weirdly",-1),"wheedle",-1),"whimper",-1),"whine",-3),"whining",-1),"whiny",-1),"whips",-1),"whore",-1),"whores",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"wicked",-1),"wickedly",-1),"wickedness",-1),"wild",-1),"wildly",-1),"wiles",-1),"wilt",-1),"wily",-1),"wimpy",-1),"wince",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"wobble",-1),"wobbled",-1),"wobbles",-1),"woe",-1),"woebegone",-1),"woeful",-1),"woefully",-1),"womanizer",-1),"womanizing",-1),"worn",-1),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"worried",-1),"worriedly",-1),"worrier",-1),"worries",-1),"worrisome",-1),"worry",-1),"worrying",-1),"worryingly",-1),"worse",-5),"worsen",-5),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"worsening",-5),"worst",-5),"worthless",-3),"worthlessly",-3),"worthlessness",-3),"wound",-3),"wounds",-3),"wrangle",-2),"wrath",-3),"wreak",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"wreaked",-3),"wreaks",-3),"wreck",-3),"wrest",-2),"wrestle",-2),"wretch",-3),"wretched",-3),"wretchedly",-2),"wretchedness",-2),"wrinkle",-3),wi(wi(wi(wi(wi(wi(wi(wi(wi(wi(mi,"wrinkled",-3),"wrinkles",-3),"wrip",-1),"wripped",-1),"wripping",-1),"writhe",-1),"wrong",-3),"wrongful",-3),"wrongly",-3),"wrought",-3),wi(wi(wi(wi(wi(wi(wi(wi(mi,"yawn",-2),"zap",-2),"zapped",-2),"zaps",-1),"zealot",-3),"zealous",-3),"zealously",-3),"zombie",-4))};function Fi(e){return Fi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fi(e)}function Ei(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Ai(n.key),n)}}function Ai(e){var t=function(e,t){if("object"!=Fi(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Fi(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Fi(t)?t:t+""}function Ci(e,t,r){return t=ji(t),function(e,t){if(t&&("object"==Fi(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Si()?Reflect.construct(t,r||[],ji(e).constructor):t.apply(e,r))}function Si(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Si=function(){return!!e})()}function ji(e){return ji=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ji(e)}function xi(e,t){return xi=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},xi(e,t)}var Oi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Ci(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&xi(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(e){return"en"!==e.getShortLocale()?null:(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Titles with positive or negative sentiment work best for higher CTR.","seo-by-rank-math")).setTooltip((0,Ze.__)("Headlines with a strong emotional sentiment (positive or negative) tend to receive more clicks.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(e),n=new(vi()),i=t.getResearch("getWords")(e.getLower("title")).join(" "),o=n.analyze(i,ki).score;return r.setScore(this.calculateScore(o)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return"en"===e.getShortLocale()&&e.hasTitle()}},{key:"calculateScore",value:function(e){return 0!==e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_titleSentiment_score",1)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Your title has a positive or a negative sentiment.","seo-by-rank-math"):(0,Ze.sprintf)((0,Ze.__)("Your title doesn't contain a %1$s word.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/#sentiment-in-a-title" target="_blank">positive or a negative sentiment</a>')}}])&&Ei(r.prototype,n),i&&Ei(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Bi=Oi;function _i(e){return _i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_i(e)}function Pi(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Ti(n.key),n)}}function Ti(e){var t=function(e,t){if("object"!=_i(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=_i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_i(t)?t:t+""}function zi(e,t,r){return t=Ni(t),function(e,t){if(t&&("object"==_i(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ri()?Reflect.construct(t,r||[],Ni(e).constructor):t.apply(e,r))}function Ri(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Ri=function(){return!!e})()}function Ni(e){return Ni=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ni(e)}function Mi(e,t){return Mi=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Mi(e,t)}var qi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),zi(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Mi(e,t)}(t,e),r=t,n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Use the Focus Keyword near the beginning of SEO title.","seo-by-rank-math")).setTooltip((0,Ze.__)("The SEO page title should contain the Focus Keyword preferably at the beginning.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=t.getResearch("getWords"),i=n($e(e.getLower("keyword"))).join(" "),o=n(e.getLower("title")).join(" "),a=o.indexOf(i),u=Math.floor(o.length/2),s=0<=a&&a<u;return r.setScore(this.calculateScore(s)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return e.hasKeyword()&&e.hasTitle()}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_titleStartWithKeyword_score",3)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Focus Keyword used at the beginning of SEO title.","seo-by-rank-math"):(0,Ze.__)("Focus Keyword doesn't appear at the beginning of SEO title.","seo-by-rank-math")}}],n&&Pi(r.prototype,n),i&&Pi(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Ii=qi;function Li(e){return Li="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Li(e)}function $i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Wi(n.key),n)}}function Wi(e){var t=function(e,t){if("object"!=Li(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Li(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Li(t)?t:t+""}function Ui(e,t,r){return t=Hi(t),function(e,t){if(t&&("object"==Li(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ki()?Reflect.construct(t,r||[],Hi(e).constructor):t.apply(e,r))}function Ki(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Ki=function(){return!!e})()}function Hi(e){return Hi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Hi(e)}function Vi(e,t){return Vi=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Vi(e,t)}var Yi=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Ui(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Vi(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){var e=(0,o.isUndefined)(rankMath.postType)?"Post":(0,o.startCase)(rankMath.postType);return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.sprintf)((0,Ze.__)("Use %1$s to optimise the  %2$s.","seo-by-rank-math"),'<a class="rank-math-open-contentai" href="'+mt("content-ai-settings","Content Analysis")+'" target="_blank">Content AI</a>',e))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=!1!==e.get("contentAI");return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(e){return!1!==e.get("contentAI")}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_contentAI",5)}},{key:"translateScore",value:function(e){var t=mt("content-ai-settings","Content Analysis"),r=(0,o.isUndefined)(rankMath.postType)?"Post":(0,o.startCase)(rankMath.postType);return e.hasScore()?(0,Ze.sprintf)((0,Ze.__)("You are using %1$s to optimise this %2$s.","seo-by-rank-math"),'<a href="'+t+'" target="_blank">Content AI</a>',r):(0,Ze.sprintf)((0,Ze.__)("You are not using %1$s to optimise this %2$s.","seo-by-rank-math"),'<a class="rank-math-open-contentai" href="'+t+'" target="_blank">Content AI</a>',r)}}])&&$i(r.prototype,n),i&&$i(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const Gi=Yi;function Qi(e){return Qi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qi(e)}function Ji(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Zi(n.key),n)}}function Zi(e){var t=function(e,t){if("object"!=Qi(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Qi(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Qi(t)?t:t+""}function Xi(e,t,r){return t=to(t),function(e,t){if(t&&("object"==Qi(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,eo()?Reflect.construct(t,r||[],to(e).constructor):t.apply(e,r))}function eo(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(eo=function(){return!!e})()}function to(e){return to=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},to(e)}function ro(e,t){return ro=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ro(e,t)}var no=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Xi(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ro(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("Reviews are disabled on this Product.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=this.newResult(),n=rankMath.assessor.isReviewEnabled;return r.setScore(this.calculateScore(n)).setText(this.translateScore(r)),r}},{key:"isApplicable",value:function(){return rankMath.assessor.isReviewEnabled}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_isReviewEnabled_score",2)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("Reviews are enabled for this Product. Good Job!","seo-by-rank-math"):(0,Ze.__)("Reviews are disabled on this Product.","seo-by-rank-math")}}])&&Ji(r.prototype,n),i&&Ji(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const io=no;function oo(e){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo(e)}function ao(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,uo(n.key),n)}}function uo(e){var t=function(e,t){if("object"!=oo(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=oo(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==oo(t)?t:t+""}function so(e,t,r){return t=co(t),function(e,t){if(t&&("object"==oo(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,lo()?Reflect.construct(t,r||[],co(e).constructor):t.apply(e,r))}function lo(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(lo=function(){return!!e})()}function co(e){return co=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},co(e)}function po(e,t){return po=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},po(e,t)}var fo=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),so(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&po(e,t)}(t,e),r=t,(n=[{key:"newResult",value:function(){return(new l).setMaxScore(this.getScore()).setEmpty((0,Ze.__)("You are not using the Product Schema for this Product.","seo-by-rank-math"))}},{key:"getResult",value:function(e,t){var r=e.get("schemas"),n=!1;(0,o.isEmpty)(r)||(0,o.forEach)(r,function(e){(0,o.includes)(["WooCommerceProduct","EDDProduct","Product"],e["@type"])&&(n=!0)});var i=this.newResult();return i.setScore(this.calculateScore(n)).setText(this.translateScore(i)),i}},{key:"isApplicable",value:function(e){return!(0,o.isEmpty)(e.get("schemas"))}},{key:"calculateScore",value:function(e){return e?this.getScore():null}},{key:"getScore",value:function(){return(0,q.applyFilters)("rankMath_analysis_hasProductSchema_score",2)}},{key:"translateScore",value:function(e){return e.hasScore()?(0,Ze.__)("You are using the Product Schema for this Product","seo-by-rank-math"):(0,Ze.__)("You are not using the Product Schema for this Product.","seo-by-rank-math")}}])&&ao(r.prototype,n),i&&ao(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(i);const yo=fo;function ho(e){return ho="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ho(e)}function go(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,mo(n.key),n)}}function mo(e){var t=function(e,t){if("object"!=ho(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=ho(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ho(t)?t:t+""}const bo=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=t,this.researcher=(0,o.has)(t,"researcher")?t.researcher:new Je,this.setAnalyses()},(t=[{key:"analyze",value:function(e){return this.generateResults(this.analyses,e)}},{key:"analyzeSome",value:function(e,t){return this.generateResults((0,o.pick)(this.defaultAnalyses,e),t)}},{key:"generateResults",value:function(e,t){var r=this;return new Promise(function(n){r.results={},r.researcher.setPaper(t),(0,o.forEach)(e,function(e,n){var i=e.isApplicable(t,r.researcher)?e.getResult(t,r.researcher):e.newResult(t);null!==i&&(r.results[n]=i)}),n(r.results)})}},{key:"setAnalyses",value:function(){this.defaultAnalyses={contentHasAssets:new ut,contentHasShortParagraphs:new gt,contentHasTOC:new Ct,keywordDensity:new Rt,keywordIn10Percent:new Kt,keywordInContent:new tr,keywordInImageAlt:new cr,keywordInMetaDescription:new vr,keywordInPermalink:new xr,keywordInSubheadings:new Mr,keywordInTitle:new Vr,keywordNotUsed:new on,lengthContent:new yn,lengthPermalink:new Fn,linksHasExternals:new _n,linksHasInternal:new Ln,linksNotAllExternals:new Qn,titleHasNumber:new oi,titleHasPowerWords:new gi,titleSentiment:new Bi,titleStartWithKeyword:new Ii,hasContentAI:new Gi,isReviewEnabled:new io,hasProductSchema:new yo},this.analyses=this.defaultAnalyses,(0,o.has)(this.options,"analyses")&&!(0,o.isUndefined)(this.options.analyses)&&(this.analyses=(0,o.pick)(this.defaultAnalyses,this.options.analyses))}}])&&go(e.prototype,t),r&&go(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}(),vo=function(e){return(0,o.isUndefined)(e)?e:e.replace(/\xA0/g," ")};function Do(e){return Do="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Do(e)}function wo(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ko(n.key),n)}}function ko(e){var t=function(e,t){if("object"!=Do(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Do(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Do(t)?t:t+""}r.dn(vo);var Fo=function(){return e=function e(t,r){var n,i,a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),n=this,a={},(i=ko(i="args"))in n?Object.defineProperty(n,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[i]=a,r=r||{},this.args=(0,o.defaults)(r,{title:"",keyword:"",keywords:[],titleWidth:0,url:"",permalink:"",description:"",thumbnail:"",thumbnailAlt:"",locale:"en_US",contentAI:!1,schemas:{}}),this.setText((0,o.isUndefined)(t)?"":t),this.args.shortLocale=this.args.locale.split("_")[0]},t=[{key:"get",value:function(e){return(0,o.has)(this.args,e)?this.args[e]:""}},{key:"getLower",value:function(e){return this.get(e+"Lower")}},{key:"hasKeyword",value:function(){return""!==this.args.keyword}},{key:"getKeyword",value:function(){return this.args.keyword}},{key:"setKeyword",value:function(e){this.args.keyword=vo(ui(e)),this.args.keywordLower=this.args.keyword.toLowerCase(),this.keywordPlurals=!1,this.keywordPermalink=!1,this.keywordPermalinkRaw=!1,this.keywordCombinations=!1}},{key:"setKeywords",value:function(e){this.args.keywords=(0,o.filter)((0,o.map)(e,function(e){return vo(ui(e)).toLowerCase()}))}},{key:"hasTitle",value:function(){return""!==this.args.title}},{key:"getTitle",value:function(){return this.args.title}},{key:"setTitle",value:function(e){this.args.title=vo(ui($e(e))),this.args.titleLower=this.args.title.toLowerCase()}},{key:"hasTitleWidth",value:function(){return 0!==this.args.titleWidth}},{key:"getTitleWidth",value:function(){return this.args.titleWidth}},{key:"hasPermalink",value:function(){return""!==this.args.permalink}},{key:"getPermalink",value:function(){return this.args.permalink}},{key:"setPermalink",value:function(e){this.args.permalink=e||"",this.args.permalinkLower=this.args.permalink.toLowerCase()}},{key:"hasDescription",value:function(){return""!==this.args.description}},{key:"getDescription",value:function(){return this.args.description}},{key:"setDescription",value:function(e){this.args.description=vo(ui(Ue(e))),this.args.descriptionLower=this.args.description.toLowerCase()}},{key:"setPostType",value:function(e){this.args.postType=e}},{key:"getPostType",value:function(){return this.args.postType}},{key:"hasText",value:function(){return""!==this.text}},{key:"getText",value:function(){return this.text}},{key:"getTextLower",value:function(){return this.textLower}},{key:"setText",value:function(e){this.text=e||"",this.textLower="",""!==e&&(this.text=vo(ui(function(e){return(0,o.isUndefined)(e)?"":(0,o.flow)([We,Ie,Le,D,w,p,$e])(e)}(e))),this.textLower=this.text.toLowerCase())}},{key:"hasUrl",value:function(){return""!==this.args.url}},{key:"getUrl",value:function(){return this.args.url}},{key:"setUrl",value:function(e){this.args.url=e}},{key:"hasLocale",value:function(){return""!==this.args.locale}},{key:"getLocale",value:function(){return this.args.locale}},{key:"getShortLocale",value:function(){return this.args.shortLocale}},{key:"hasThumbnail",value:function(){return""!==this.args.thumbnail}},{key:"getThumbnail",value:function(){return this.args.thumbnail}},{key:"setThumbnail",value:function(e){this.args.thumbnail=e}},{key:"hasThumbnailAltText",value:function(){return""!==this.args.thumbnailAlt}},{key:"getThumbnailAltText",value:function(){return this.args.thumbnailAlt}},{key:"setThumbnailAltText",value:function(e){this.args.thumbnailAlt=ui(e||""),this.args.thumbnailAltLower=this.args.thumbnailAlt.toLowerCase()}},{key:"getKeywordPermalink",value:function(e){if(!1===this.keywordPermalink){var t=e.getResearch("slugify"),r=e.getResearch("removePunctuation"),n=this.getLower("keyword").replace(/\'/g,"").replace(/[-_.]+/g,"-");this.keywordPermalink=t(r(n)),this.keywordPermalinkRaw=this.keywordPermalink}return this.keywordPermalink}},{key:"getPermalinkWithStopwords",value:function(e){return!1===this.keywordPermalink&&this.getKeywordPermalink(e),this.keywordPermalinkRaw}},{key:"getKeywordCombination",value:function(e){return this.hasKeyword()?(!1===this.keywordCombinations&&this.generateCombinations(e),this.keywordCombinations):[]}},{key:"generateCombinations",value:function(e){var t=this.getLower("keyword"),r=e.getResearch("getWords"),n=e.getResearch("pluralize"),i=e.getResearch("combinations");this.keywordPlurals=new Map,r(t).forEach(function(e,t){this.keywordPlurals.set(t,{word:e,plural:n.get(e)})},this),this.keywordPermalink=this.getKeywordPermalink(e),this.keywordCombinations=i(this.keywordPlurals)}},{key:"setContentAI",value:function(e){this.args.contentAI=e}},{key:"setSchema",value:function(e){this.args.schemas=e}}],t&&wo(e.prototype,t),r&&wo(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();const Eo=Fo;function Ao(e){return Ao="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ao(e)}function Co(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function So(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Co(Object(r),!0).forEach(function(t){jo(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Co(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function jo(e,t,r){return(t=Oo(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xo(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Oo(n.key),n)}}function Oo(e){var t=function(e,t){if("object"!=Ao(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Ao(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ao(t)?t:t+""}var Bo=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.results=new Map},t=[{key:"getResults",value:function(){return Object.fromEntries(this.results)}},{key:"getResult",value:function(e){return this.results.get(this.cleanText(e))}},{key:"getScore",value:function(e){var t=this.cleanText(e);return this.results.has(t)?this.results.get(t).score:0}},{key:"update",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.cleanText(e);if(this.results.has(n)){var i=this.results.get(n);t=So(So({},i.results),t),r=i.isPrimary}this.results.set(n,{results:t,isPrimary:r,score:this.refreshScore(t)})}},{key:"refreshScore",value:function(e){var t=0,r=0,n=rankMath.localeFull.split("_")[0];return(0,o.forEach)(e,function(e){t+=e.getScore(),r+=e.getMaxScore(n)}),(0,o.round)(t/r*100)}},{key:"deleteResult",value:function(e){this.results.delete(this.cleanText(e))}},{key:"isPrimary",value:function(e){var t=this.cleanText(e);return!!this.results.has(this.cleanText(t))&&this.results.get(this.cleanText(t)).isPrimary}},{key:"cleanText",value:function(e){return vo(e)}}],t&&xo(e.prototype,t),r&&xo(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}();const _o=Bo;window.rankMathAnalyzer={Analysis:i,AnalysisResult:l,Analyzer:bo,Paper:Eo,Researcher:Je,ResultManager:_o},window.rankMathAnalyzerHelpers={cleanText:Ue,escapeRegex:St}}()}();PK     ’ŠU]pë‘:“I  “I    assets/admin/js/post-list.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},dn:function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})}};const t=jQuery;var n=e.n(t);const a=lodash,r=wp.i18n,o=wp.element,l=wp.components,i=React;function s(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function c(e,t){let n,a,r=[];for(let o=0;o<e.length;o++){const l=e[o];if("string"!==l.type){if(void 0===t[l.value])throw new Error(`Invalid interpolation, missing component node: \`${l.value}\``);if("object"!=typeof t[l.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${l.value}\``);if("componentClose"===l.type)throw new Error(`Missing opening component token: \`${l.value}\``);if("componentOpen"===l.type){n=t[l.value],a=o;break}r.push(t[l.value])}else r.push(l.value)}if(n){const o=function(e,t){const n=t[e];let a=0;for(let r=e+1;r<t.length;r++){const e=t[r];if(e.value===n.value){if("componentOpen"===e.type){a++;continue}if("componentClose"===e.type){if(0===a)return r;a--}}}throw new Error("Missing closing component token `"+n.value+"`")}(a,e),l=c(e.slice(a+1,o),t),s=(0,i.cloneElement)(n,{},l);if(r.push(s),o<e.length-1){const n=c(e.slice(o+1),t);r=r.concat(n)}}return r=r.filter(Boolean),0===r.length?null:1===r.length?r[0]:(0,i.createElement)(i.Fragment,null,...r)}function m(e){const{mixedString:t,components:n,throwErrors:a}=e;if(!n)return t;if("object"!=typeof n){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const r=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(s)}(t);try{return c(r,n)}catch(e){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}const u=function(e){var t=e.tags,n=e.components,r=e.children;return n=n||{},!1===(0,a.isUndefined)(t)&&(t=t.split(",")).forEach(function(e){var t=e;n[e]=wp.element.createElement(t,null)}),m({mixedString:r,components:n})};function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var r={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=a,l="",i=a.indexOf("#");-1!==i&&(o=a.substring(0,i),l=a.substring(i));var s=Object.keys(r).map(function(e){return"".concat(e,"=").concat(r[e])}).join("&"),c=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+c+s+l+n}e.dn(p);var d=function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,a.includes)(e,"?")||(e+="?"),e+n.toString()};const h=function(e){var t=e.width,n=void 0===t?40:t,o=e.showProNotice,i=void 0!==o&&o,s=e.isBulkEdit,c=void 0!==s&&s,m=e.isResearch,h=void 0!==m&&m,k=e.creditsRequired,f=void 0===k?0:k,y=e.isKeywordIntent,v=void 0!==y&&y,_=e.medium,b=void 0===_?"":_;if(i)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(l.Button,{href:p("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Get PRO Now â†’","seo-by-rank-math"))))}(n,b);if(v)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(l.Button,{href:p("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Update Now","seo-by-rank-math"))))}(n,b);var g=(0,a.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),w=g.isUserRegistered,E=g.plan,C="free"===E,I=g.credits>f,A=g.isMigrating;if(I&&h&&!C&&g.credits<500&&(I=!1),w&&E&&I&&!A&&!C)return null;var P,S="width-"+n;return!w||!E||I&&C?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+S},wp.element.createElement("h3",null,(0,r.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!w&&!c&&(0,r.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),w&&!E&&!c&&!C&&(0,r.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),w&&!c&&C&&(0,r.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),c&&(0,r.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n,c,C),!w&&wp.element.createElement(l.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,r.__)("Connect Now","seo-by-rank-math")),w&&(!E||C)&&wp.element.createElement(l.Button,{href:d(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",C),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")))):A?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+S},wp.element.createElement("h3",null,(0,r.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,r.__)("reach out to the support team.","seo-by-rank-math")),(0,r.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+S},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(P=g.resetDate)?wp.element.createElement(u,{components:{strong:wp.element.createElement("strong",null)}},(0,r.sprintf)((0,r.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+P+"{{/strong}}")):(0,r.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(l.Button,{href:d(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",C),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")),wp.element.createElement(l.Button,{variant:"link",href:d(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",C),className:"button button-secondary",target:"_blank"},(0,r.__)("Missing Credits?","seo-by-rank-math"))))};e.dn(h);const k=function(e){var t,r=e.showProNotice,i=void 0!==r&&r,s=e.isBulkEdit,c=void 0!==s&&s,m=e.creditsRequired,u=void 0===m?0:m,p=e.isKeywordIntent,d=void 0!==p&&p;(0,a.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&(t="elementor"===rankMath.currentEditor?"#elementor-editor-wrapper":"#wpwrap",n()(t).append('<div id="rank-math-content-ai-modal-wrapper"></div>'));setTimeout(function(){(0,o.render)(wp.element.createElement(l.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!1,onRequestClose:function(e){(0,a.isUndefined)(e)||(n()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.body.classList.remove("modal-open"))}},wp.element.createElement(h,{width:100,showProNotice:i,isBulkEdit:c,creditsRequired:u,isKeywordIntent:d})),document.getElementById("rank-math-content-ai-modal-wrapper"))},100)};function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return v(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){i=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(i)throw o}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function _(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,b(a.key),a)}}function b(e){var t=function(e,t){if("object"!=f(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=f(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==f(t)?t:t+""}e.dn(k);var g=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.addButtons(),this.bulkEvents(),this.editingEvents(),this.saveEvents()},(t=[{key:"addButtons",value:function(){n()(".tablenav .bulkactions select").find('option[value="rank_math_ai_options"]').attr("disabled","disabled");var e=n()("#rank_math_seo_details, #rank_math_title, #rank_math_description, #rank_math_image_alt, #rank_math_image_title");e.each(function(){var e=n()(this);e.append(' <a href=#" class="dashicons dashicons-edit" title="'+(0,r.__)("Bulk Edit This Field","seo-by-rank-math")+'"></a>'),e.wrapInner("<span/>"),e.append(' <span><a href="#" class="button button-primary button-small rank-math-column-save-all">'+(0,r.__)("Save All Edits","seo-by-rank-math")+'</a> <a href="#" class="button-link button-link-delete rank-math-column-cancel-all">'+(0,r.__)("Cancel","seo-by-rank-math")+"</a></span>")}),e.on("click",".dashicons-edit, .rank-math-column-cancel-all",function(t){t.preventDefault();var a=n()(this).closest("th");n()(this).hasClass("rank-math-column-cancel-all")?(e.removeClass("bulk-editing"),n()(".rank-math-column-cancel","td.bulk-editing.dirty").trigger("click"),n()("td.bulk-editing").removeClass("bulk-editing")):(a.toggleClass("bulk-editing"),n()("td.column-"+a.attr("id")).toggleClass("bulk-editing"))})}},{key:"bulkEvents",value:function(){var e=n()(".tablenav .bulkactions select");e.find('option[value="rank_math_ai_options"]').attr("disabled","disabled"),e.find('option[value="rank_math_options"]').attr("disabled","disabled");var t=["rank_math_content_ai_fetch_seo_title","rank_math_content_ai_fetch_seo_description","rank_math_content_ai_fetch_seo_title_description"];e.on("change",function(){var n=e.val(),r=rankMath.contentAI;if("rank_math_content_ai_fetch_image_alt"===n&&(r.credits<50||!r.isUserRegistered))return e.val("-1").change(),void k({isBulkEdit:!0,creditsRequired:50});!(0,a.includes)(t,n)||r.isUserRegistered&&r.credits&&r.plan&&"free"!==r.plan||(e.val("-1").change(),k({isBulkEdit:!0})),"rank_math_bulk_detect_keyword_intent"!==n||r.isUserRegistered||(e.val("-1").change(),k({isBulkEdit:!0})),(0,a.startsWith)(n,"rank_math_bulk")&&!rankMath.isProActive&&(e.val("-1").change(),k({showProNotice:!0,isBulkEdit:!0}))})}},{key:"editingEvents",value:function(){n()(".rank-math-column-value").on("input",function(){var e=n()(this),t=e.closest("td");e.val()!==e.prev().text()?t.addClass("dirty"):t.removeClass("dirty")}).on("keypress",function(e){if(13===e.keyCode)return n()(this).parent().find(".rank-math-column-save").trigger("click"),!1}),n()(".rank-math-column-cancel").on("click",function(e){e.preventDefault();var t=n()(this).closest("td");t.removeClass("dirty");var a=t.find(".rank-math-column-value").prev(".rank-math-column-display");a.find("span").length&&(a=a.find("span"));var r=a.html(),o=r.match(/<img\s+[^>]*?src=("|')([^"']+)">/gm);if(o){var l,i=y(o);try{for(i.s();!(l=i.n()).done;){var s=l.value,c=s.match(/alt=("|')([^"']+)/gm)[0];c=c.replace('alt="',""),r=r.replaceAll(s,c)}}catch(e){i.e(e)}finally{i.f()}}t.find(".rank-math-column-value").val(r)})}},{key:"saveEvents",value:function(){var e=this;n()(".rank-math-column-save-all").on("click",function(t){t.preventDefault();var a=n()(this),r={},o=[];if(n()(".dirty.bulk-editing").each(function(){var e=n()(this),t=parseInt(e.closest("tr").attr("id").replace(/post-|tag-/,"")),a=e.find(".rank-math-column-value");o.push(e),r[t]=r[t]||{},r[t][a.data("field")]=a.val()}),n().isEmptyObject(r))return n()(a.next()).trigger("click"),!0;e.save(r).done(function(t){t.success&&(o.forEach(function(t){e.setColumn(t)}),n()(a.next()).trigger("click"))})}),n()(".rank-math-column-save").on("click",function(t){t.preventDefault();var a=n()(this).closest(".dirty"),r=parseInt(a.closest("tr").attr("id").replace(/post-|tag-/,"")),o=a.find(".rank-math-column-value"),l={};l[r]={},l[r][o.data("field")]=o.val(),e.save(l).done(function(t){t.success&&e.setColumn(a)})})}},{key:"setColumn",value:function(e){e.removeClass("dirty bulk-editing");var t=e.find(".rank-math-column-value").prev(".rank-math-column-display");t.find("span").length&&(t=t.find("span"));var n=e.find(".rank-math-column-value").val();t.text(n)}},{key:"save",value:function(e){return n().ajax({url:rankMath.endpoint+"/updateMetaBulk",method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.restNonce)},data:{rows:e,objectType:"edit-tags-php"===window.adminpage?"term":"post"}})}}])&&_(e.prototype,t),o&&_(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,o}();n()(function(){new g})}();PK     ’ŠU]+j@h,  h,    assets/admin/js/option-panel.jsnu „[µü¤        !function(){"use strict";var t={n:function(a){var e=a&&a.__esModule?function(){return a.default}:function(){return a};return t.d(e,{a:e}),e},d:function(a,e){for(var n in e)t.o(e,n)&&!t.o(a,n)&&Object.defineProperty(a,n,{enumerable:!0,get:e[n]})},o:function(t,a){return Object.prototype.hasOwnProperty.call(t,a)},dn:function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})}};const a=jQuery;var e=t.n(a);const n=lodash,i=wp.apiFetch;var r=t.n(i);const o=wp.i18n;function s(t,a,n){return e().ajax({url:rankMath.ajaxurl,type:n||"POST",dataType:"json",data:e().extend(!0,{action:"rank_math_"+t,security:rankMath.security},a)})}function c(t,a,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];a=a||"error",i=i||!1;var s=e()('<div class="notice notice-'+a+" "+r+' is-dismissible"><p>'+t+"</p></div>").hide();o||n.siblings(".notice").remove(),n.after(s),s.slideDown(),e()(document).trigger("wp-updates-notice-added"),e()("html,body").animate({scrollTop:s.offset().top-50},"slow"),i&&setTimeout(function(){s.fadeOut(function(){s.remove()})},i)}var d;t.dn(s),t.dn(c),(d=e())(function(){window.rankMathOptions={init:function(){this.preview(),this.misc(),this.scCache(),rankMathAdmin.variableInserter(),this.searchEngine.init(),this.addressFormat(),this.siteMap(),this.robotsEvents(),this.proRedirect(),this.contentAI(),this.localSEO(),this.htmlSitemap()},searchEngine:{init:function(){d("#setting-panel-analytics").addClass("exclude"),this.form=d(".rank-math-search-options"),this.wrap=this.form.closest(".rank-math-wrap-settings"),this.input=this.form.find("input"),this.tabs=this.wrap.find(".rank-math-tabs"),this.panels=this.wrap.find(".rank-math-tab:not(.exclude)"),this.ids=["general","titles","sitemap"],this.indexes={},this.buildIndex(),this.events()},events:function(){var t=this,a=t.tabs.find(">.rank-math-tabs-navigation"),e=d('<div class="rank-math-search-dropdown"></div>');t.tabs.find(">.rank-math-tabs-content").prepend('<div class="rank-math-setting-search-empty hidden">No results found.</div>'),t.form.append(e),e.hide().empty();var i=(0,n.debounce)(function(a){t.wrap.addClass("searching"),t.searchIndexes(a,e)},300);t.form.on("click",".clear-search",function(e){e.preventDefault(),t.input.val(""),t.clearSearch(a)}),this.ids.forEach(function(a){e.append(t.indexes[a])}),t.input.on("input",function(){if(""===t.input.val())return t.clearSearch(a,e),!1;i(t.input.val().toLowerCase())}),e.on("click",".cmb-row",function(){var t=d(this),a=window.location.origin+window.location.pathname+"?page=rank-math-options-"+t.data("settings-id")+"#"+t.closest(".dropdown-tab").data("id");a===window.location.href?window.location.reload():window.location=a});var r=d(".rank-math-search-options, .rank-math-search-options *, .rank-math-search-dropdown, .rank-math-search-dropdown *");d("body").on("click",function(t){d(t.target).is(r)||e.hide()})},searchIndexes:function(t,a){if(!(1>t.trim().length)){a.find(".dropdown-tab").each(function(){var t=d(this);"setting-panel-analytics"===t.attr("data-id")&&t.css("display","none")});var e=a.find(".cmb-row"),n=0;e.hide().each(function(){var a=d(this);a.text().trim().toLowerCase().includes(t)&&(a.show(),++n)}),a.show(),a.toggleClass("empty",0===n)}},clearSearch:function(t,a){a=a||!1,this.wrap.removeClass("searching search-no-results"),d(">a.active",t).trigger("click"),a?a.hide():(d(".cmb-row").show(),d(".rank-math-cmb-dependency",".cmb-form, .rank-math-metabox-wrap").each(function(){rankMathAdmin.loopDependencies(d(this))}))},buildIndex:function(){var t=window.localStorage.getItem("rank-math-option-search-index"),a=void 0===t||t!==rankMath.version;this.ids.forEach(function(t){this.getIndex(t,a),this.indexes[t]=d(window.localStorage.getItem("rank-math-option-"+t+"-index"))},this),a&&window.localStorage.setItem("rank-math-option-search-index",rankMath.version)},getIndex:function(t,a){a&&d("<div/>").load(rankMath.adminurl+"?page=rank-math-options-"+t,function(a,e){if("error"!==e){var n=d(a).find(".rank-math-tabs-content");n.find(".rank-math-tab").each(function(){var t=d(this);t.removeClass().addClass("dropdown-tab"),t.attr("data-id",t.attr("id")),t.removeAttr("id"),t.find(".rank-math-notice").remove(),t.find(".rank-math-desc").remove(),t.find("input, select, textarea").remove()}),n.find(".rank-math-tab").removeClass().addClass("dropdown-tab").removeAttr("id"),n.find(".cmb-row").each(function(){var a=d(this);a.attr("data-settings-id",t),(a.hasClass("cmb-type-title")||a.hasClass("cmb-type-notice")||a.hasClass("rank-math-notice")||a.hasClass("rank-math-desc")||a.hasClass("rank-math-exclude-from-search"))&&a.remove(),a.find(".cmb-td").children(":not(.cmb2-metabox-description)").remove(),a.find("label,.cmb2-metabox-description").unwrap(),a.removeAttr("data-fieldtype")}),n=n.html().replace(/(\r\n\t|\n|\r\t)/gm,""),window.localStorage.setItem("rank-math-option-"+t+"-index",n)}})}},scCache:function(){d(".console-cache-delete").on("click",function(t){t.preventDefault();var a=d(this),e=a.data("days"),n=-1===e?rankMath.confirmClearImportedData:rankMath.confirmClear90DaysCache;window.confirm(n+" "+rankMath.confirmAction)&&(a.prop("disabled",!0),s("analytics_delete_cache",{days:e},"GET").always(function(){a.prop("disabled",!1)}).done(function(t){t&&t.success&&(c(rankMath.feedbackCacheDeleted,"success",d("h1",".rank-math-wrap-settings")),d(".rank-math-console-db-info").remove(),a.closest(".cmb-td").append(t.message))}))});var t=d("#console_caching_control");d(".console-cache-update-manually").on("click",function(a){a.preventDefault();var e=d(this),n=t.val();e.prop("disabled",!0),s("analytic_start_fetching",{days:n},"GET").done(function(t){t&&t.success?(c(t.message,"success",d("h1.page-title")),e.text("Fetching in Progress"),d(".cancel-fetch").prop("disabled",!1)):c("Unable to update cache due to: "+t.error,"error",d("h1.page-title"))})}),d(".cancel-fetch").on("click",function(t){t.preventDefault(),d(this).prop("disabled",!0),s("analytic_cancel_fetching",{},"GET").done(function(t){t&&t.success&&window.location.reload()})})},addressFormat:function(){var t=d("input[type=text], textarea",".rank-math-address-format");if(t.length){t.attr("autocomplete","off"),t.wrap('<div class="rank-math-variables-wrap"/>');var a=d("body"),e=t.parent(".rank-math-variables-wrap");e.append('<a href="#" class="rank-math-variables-button button button-secondary button-address"><span class="dashicons dashicons-arrow-down-alt2"></span></a>');var n=d("<ul/>"),i=d('<div class="rank-math-variables-dropdown"></div>');d.each({"{address} {locality}, {region} {postalcode}":"(New York, NY 12345)","{address} {postalcode}, {locality} {region}":"(New York 12345, NY)","{address} {locality} {postalcode}":"(New York NY 12345)","{postalcode} {region} {locality} {address}":"(12345 NY New York)","{address} {locality}":"(New York NY)"},function(t,a){n.append('<li data-var="'+a+'"><strong>'+t+"</strong></li>")}),i.append(n),d("rank-math-variables-wrap:eq(0)").append(i);var r=d(".rank-math-variables-button, .rank-math-variables-button *, .rank-math-variables-dropdown, .rank-math-variables-dropdown *");a.on("click",function(t){d(t.target).is(r)||i.hide()});var o=i.find("input"),s=i.find("li");d(e).on("click",".rank-math-variables-button",function(t){t.preventDefault(),d(this).after(i),s.show(),i.show(),o.val("").focus()}),i.on("click","li",function(t){t.preventDefault();var a=d(this);a.closest(".rank-math-variables-wrap").find("textarea").val(a.find("strong").text())})}},misc:function(){void 0!==e().fn.select2&&d("[data-s2-pages]").select2({allowClear:!0,placeholder:(0,o.__)("Select Page","seo-by-rank-math"),ajax:{url:rankMath.ajaxurl+"?action=rank_math_search_pages",data:function(t){return{term:t.term,security:rankMath.security}},dataType:"json",delay:250},width:"100%",minimumInputLength:2}).on("select2:select",function(t){var a=t.params.data;d(this).closest(".cmb-td").find(".rank-math-selected-page").prop("href",a.url).text(a.url)}),d("#htaccess_accept_changes").on("change",function(){d("#htaccess_content").prop("readonly",!this.checked)}),d(".reset-options").on("click",function(){return!!window.confirm((0,o.__)("Are you sure? You want to reset settings.","seo-by-rank-math"))&&(d(window).off("beforeunload"),!0)});var t=d(".rank-math-tabs");setTimeout(function(){window.localStorage.removeItem(t.attr("id"))},1e3),d(".save-options").on("click",function(){var a=d("> .rank-math-tabs-navigation > a.active",t);return window.localStorage.setItem(t.attr("id"),a.attr("href")),d(window).off("beforeunload"),!0});var a=!1;d(".cmb-form").on("change","input:not(.notrack), textarea:not(.notrack), select:not(.notrack)",function(){a=!0}),d(window).on("beforeunload",function(){if(a)return"Are you sure? You didn't finish the form!"}),d(".custom-sep").on("keyup",function(){var t=d(this);t.closest("li").find("input.cmb2-option").val(t.text()).trigger("change")}),d(".cmb-form").on("keydown","input, textarea",function(t){"Enter"===t.key&&((t.ctrlKey||t.metaKey)&&d("#submit-cmb").trigger("click"),"TEXTAREA"!==this.tagName&&t.preventDefault())})},preview:function(){d("[data-preview]").on("change",function(){var t=d(this),a=null,e="";if(t.is(":radio")&&(a=t.closest(".cmb-td")),null!==a)if(a.hasClass("done"))t.is(":checked")&&(e=a.find("h5")).text(e.data("title").format(t.val()));else if(a.addClass("done"),"title"===t.data("preview")){var n="";n+='<div class="rank-math-preview-title" data-title="Preview"><div>',n+='<h5 data-title="'+rankMath.postTitle+" {0} "+rankMath.blogName+'"></h5>',n+="<span>"+rankMath.postUri+"</span>",n+="</div></div>",a.append(n),(e=a.find("h5")).text(e.data("title").format(t.val()))}}).trigger("change")},siteMap:function(){var t=d(".sitemap-nginx-notice");t.length&&(t.on("click","a span",function(a){return a.preventDefault(),t.toggleClass("active"),!1}),t.on("click","a.sitemap-close-notice",function(a){return a.preventDefault(),s("remove_nginx_notice",{},"GET").done(function(){t.remove()}),!1}))},robotsEvents:function(){d(".rank-math-robots-data").each(function(){var t=d(this).find("ul li:first-child input"),a=d(this).find("ul li:nth-child(2) input");t.on("change",function(){t.is(":checked")&&a.prop("checked",!1).trigger("change")}),a.on("change",function(){a.is(":checked")&&t.prop("checked",!1)})})},proRedirect:function(){d(".cmb-redirector-element").on("click",function(t){var a=d(t.target);if(a.is("a")||a.closest("a").length)return!0;var e=d(this),n=e.data("url");if(!n)return!0;t.preventDefault(),e.css("cursor","pointer"),window.open(n)})},contentAI:function(){var t=d(".buy-more-credits .update-credit");t.length&&t.on("click",function(a){return a.preventDefault(),t.addClass("loading"),r()({method:"POST",path:"/rankmath/v1/ca/getCredits"}).catch(function(t){alert(t.message)}).then(function(a){if(a.error)return alert(a.error),void t.removeClass("loading").next("strong").text(a.credits);t.removeClass("loading").next("strong").text(a)}),!1})},localSEO:function(){var t=e()("#website_name"),a=e()("#knowledgegraph_name");t.val()===a.val()&&t.on("keyup",function(){a.val(t.val())})},htmlSitemap:function(){var t=e()("#html_sitemap"),a=e()(".rank-math-html-sitemap");t.on("change",function(){t.is(":checked")?a.removeClass("hidden"):a.addClass("hidden")})}},window.rankMathOptions.init()})}();PK     ’ŠU]Äu­Õî Õî   assets/admin/js/wizard.jsnu „[µü¤        !function(){var e={6942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,o(n)))}return e}function o(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return a.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(a.default=a,e.exports=a):void 0===(n=function(){return a}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{setStep:function(){return kr},updateStepData:function(){return _r}});var t={};n.r(t),n.d(t,{appUi:function(){return Cr}});var r={};n.r(r),n.d(r,{getStepData:function(){return Ar}});const a=React,o=ReactDOM;function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(null,arguments)}var l;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(l||(l={}));const s="popstate";function c(e,t){if(!1===e||null==e)throw new Error(t)}function u(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function m(e,t){return{usr:e.state,key:e.key,idx:t}}function p(e,t,n,r){return void 0===n&&(n=null),i({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?f(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function d(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function f(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function y(e,t,n,r){void 0===r&&(r={});let{window:a=document.defaultView,v5Compat:o=!1}=r,u=a.history,f=l.Pop,y=null,h=b();function b(){return(u.state||{idx:null}).idx}function g(){f=l.Pop;let e=b(),t=null==e?null:e-h;h=e,y&&y({action:f,location:w.location,delta:t})}function v(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"==typeof e?e:d(e);return n=n.replace(/ $/,"%20"),c(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==h&&(h=0,u.replaceState(i({},u.state,{idx:h}),""));let w={get action(){return f},get location(){return e(a,u)},listen(e){if(y)throw new Error("A history only accepts one active listener");return a.addEventListener(s,g),y=e,()=>{a.removeEventListener(s,g),y=null}},createHref:e=>t(a,e),createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){f=l.Push;let r=p(w.location,e,t);n&&n(r,e),h=b()+1;let i=m(r,h),s=w.createHref(r);try{u.pushState(i,"",s)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;a.location.assign(s)}o&&y&&y({action:f,location:w.location,delta:1})},replace:function(e,t){f=l.Replace;let r=p(w.location,e,t);n&&n(r,e),h=b();let a=m(r,h),i=w.createHref(r);u.replaceState(a,"",i),o&&y&&y({action:f,location:w.location,delta:0})},go:e=>u.go(e)};return w}var h;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(h||(h={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function b(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}const g=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function v(e,t){void 0===t&&(t="/");let n,{pathname:r,search:a="",hash:o=""}="string"==typeof e?f(e):e;if(r)if(i=r,g.test(i))n=r;else{if(r.includes("//")){let e=r;r=O(r),u(!1,"Pathnames cannot have embedded double slashes - normalizing "+e+" -> "+r)}n=r.startsWith("/")?w(r.substring(1),"/"):w(r,t)}else n=t;var i;return{pathname:n,search:j(a),hash:C(o)}}function w(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)}),n.length>1?n.join("/"):"/"}function _(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function k(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.length>0)}function S(e,t){let n=k(e);return t?n.map((e,t)=>t===n.length-1?e.pathname:e.pathnameBase):n.map(e=>e.pathnameBase)}function E(e,t,n,r){let a;void 0===r&&(r=!1),"string"==typeof e?a=f(e):(a=i({},e),c(!a.pathname||!a.pathname.includes("?"),_("?","pathname","search",a)),c(!a.pathname||!a.pathname.includes("#"),_("#","pathname","hash",a)),c(!a.search||!a.search.includes("#"),_("#","search","hash",a)));let o,l=""===e||""===a.pathname,s=l?"/":a.pathname;if(null==s)o=n;else{let e=t.length-1;if(!r&&s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let u=v(a,o),m=s&&"/"!==s&&s.endsWith("/"),p=(l||"."===s)&&n.endsWith("/");return u.pathname.endsWith("/")||!m&&!p||(u.pathname+="/"),u}const O=e=>e.replace(/\/\/+/g,"/"),P=e=>O(e.join("/")),j=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",C=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;const A=["post","put","patch","delete"],N=(new Set(A),["get",...A]);new Set(N),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function x(){return x=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},x.apply(null,arguments)}const D=a.createContext(null);const T=a.createContext(null);const M=a.createContext(null);const I=a.createContext({outlet:null,matches:[],isDataRoute:!1});function R(){return null!=a.useContext(M)}function U(){return R()||c(!1),a.useContext(M).location}function F(e){a.useContext(T).static||a.useLayoutEffect(e)}function B(){let{isDataRoute:e}=a.useContext(I);return e?function(){let{router:e}=L(W.UseNavigateStable),t=G(z.UseNavigateStable),n=a.useRef(!1);return F(()=>{n.current=!0}),a.useCallback(function(r,a){void 0===a&&(a={}),n.current&&("number"==typeof r?e.navigate(r):e.navigate(r,x({fromRouteId:t},a)))},[e,t])}():function(){R()||c(!1);let e=a.useContext(D),{basename:t,future:n,navigator:r}=a.useContext(T),{matches:o}=a.useContext(I),{pathname:i}=U(),l=JSON.stringify(S(o,n.v7_relativeSplatPath)),s=a.useRef(!1);return F(()=>{s.current=!0}),a.useCallback(function(n,a){if(void 0===a&&(a={}),!s.current)return;if("number"==typeof n)return void r.go(n);let o=E(n,JSON.parse(l),i,"path"===a.relative);null==e&&"/"!==t&&(o.pathname="/"===o.pathname?t:P([t,o.pathname])),(a.replace?r.replace:r.push)(o,a.state,a)},[t,r,l,i,e])}()}a.Component;var W=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(W||{}),z=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(z||{});function L(e){let t=a.useContext(D);return t||c(!1),t}function G(e){let t=function(){let e=a.useContext(I);return e||c(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||c(!1),n.route.id}function H(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}a.startTransition;function $(e){let{basename:t="/",children:n=null,location:r,navigationType:o=l.Pop,navigator:i,static:s=!1,future:u}=e;R()&&c(!1);let m=t.replace(/^\/*/,"/"),p=a.useMemo(()=>({basename:m,navigator:i,static:s,future:x({v7_relativeSplatPath:!1},u)}),[m,u,i,s]);"string"==typeof r&&(r=f(r));let{pathname:d="/",search:y="",hash:h="",state:g=null,key:v="default"}=r,w=a.useMemo(()=>{let e=b(d,m);return null==e?null:{location:{pathname:e,search:y,hash:h,state:g,key:v},navigationType:o}},[m,d,y,h,g,v,o]);return null==w?null:a.createElement(T.Provider,{value:p},a.createElement(M.Provider,{children:n,value:w}))}new Promise(()=>{});a.Component;function V(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const Y=a.startTransition;o.flushSync,a.useId;function q(e){let{basename:t,children:n,future:r,window:o}=e,i=a.useRef();var l;null==i.current&&(i.current=(void 0===(l={window:o,v5Compat:!0})&&(l={}),y(function(e,t){let{pathname:n,search:r,hash:a}=e.location;return p("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:d(t)},null,l)));let s=i.current,[c,u]=a.useState({action:s.action,location:s.location}),{v7_startTransition:m}=r||{},f=a.useCallback(e=>{m&&Y?Y(()=>u(e)):u(e)},[u,m]);return a.useLayoutEffect(()=>s.listen(f),[s,f]),a.useEffect(()=>H(r),[r]),a.createElement($,{basename:t,children:n,location:c.location,navigationType:c.action,navigator:s,future:r})}"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement;var K,J;function X(e){let t=a.useRef(V(e)),n=a.useRef(!1),r=U(),o=a.useMemo(()=>function(e,t){let n=V(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}(r.search,n.current?null:t.current),[r.search]),i=B(),l=a.useCallback((e,t)=>{const r=V("function"==typeof e?e(o):e);n.current=!0,i("?"+r,t)},[i,o]);return[o,l]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(K||(K={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(J||(J={}));const Q=wp.element;function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,i="",l=r.indexOf("#");-1!==l&&(o=r.substring(0,l),i=r.substring(l));var s=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),c=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+c+s+i+n}n.dn(Z);const ee=function(){return wp.element.createElement("div",{className:"header"},wp.element.createElement("div",{className:"logo text-center"},wp.element.createElement("a",{href:Z("seo-suite","SW Logo"),target:"_blank",rel:"noreferrer"},wp.element.createElement("img",{src:rankMath.logo,alt:"Rank Math SEO",width:"245"}))))};n.dn(ee);const te=wp.data,ne=lodash,re=wp.compose,ae=wp.apiFetch;var oe=n.n(ae);const ie=wp.components,le=wp.i18n,se=window.rankMathComponents,ce=function(e){var t=e.saveData,n=e.skipStep,r=e.currentStep;return wp.element.createElement("footer",{className:"form-footer wp-core-ui rank-math-ui"},"schema-markup"!==r&&wp.element.createElement(se.Button,{variant:"secondary",className:"button-skip",onClick:n},(0,le.__)("Skip Step","seo-by-rank-math")),wp.element.createElement(se.Button,{variant:"primary",onClick:function(){t()}},(0,le.__)("Save and Continue","seo-by-rank-math")))};n.dn(ce);const ue=function(e){var t=e.link,n=e.heading,r=e.description,a=e.linkText,o=void 0===a?(0,le.__)("Learn more.","seo-by-rank-math"):a,i=e.className,l=void 0===i?"":i;return wp.element.createElement("header",null,wp.element.createElement("h1",{dangerouslySetInnerHTML:{__html:n}}),wp.element.createElement("p",{className:l},r,t&&wp.element.createElement("a",{href:t,target:"_blank",rel:"noreferrer"},o)))};n.dn(ue);const me=function(){return wp.element.createElement("div",{className:"wrapper"},wp.element.createElement("div",{className:"main-content steps-progress-skeleton"},wp.element.createElement("header",null,wp.element.createElement("span",{className:"title"}),wp.element.createElement("span",{className:"sub-title"})),wp.element.createElement("div",{id:"field-metabox-rank-math"},(0,ne.map)(Array.from({length:5}),function(e,t){return wp.element.createElement("div",{key:t,className:"field-row"},wp.element.createElement("span",{className:"top"}),wp.element.createElement("span",{className:"bottom"}))}))))};function pe(e){return pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pe(e)}function de(e){return function(e){if(Array.isArray(e))return fe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return fe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?fe(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function he(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ye(Object(n),!0).forEach(function(t){be(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ye(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function be(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=pe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==pe(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(me);const ge=(0,re.compose)((0,te.withSelect)(function(e,t){var n=t.searchParams.get("step")||"compatibility",r=e("rank-math-setup-wizard").getStepData(n);return he(he({},t),{},{data:r,currentStep:n})}),(0,te.withDispatch)(function(e,t){var n=t.steps,r=t.data,a=t.currentStep,o=t.navigate,i=t.searchParams,l=t.setSearchParams;return{onStepChange:function(e){(e="ready1"===e?"ready":e)!==a&&l(function(t){return(0,ne.fromPairs)([].concat(de(t),[["step",e]]))})},getStepData:function(t){t=t||a,oe()({method:"POST",path:"/rankmath/v1/setupWizard/getStepData",data:{step:t}}).catch(function(e){alert(e.message)}).then(function(n){e("rank-math-setup-wizard").updateStepData(t,n)})},getNextStep:function(){var e="role";if("ready"!==a){var t=(0,ne.map)(n,function(e){return e.name});e=t[(0,ne.findIndex)(t,function(e){return e===a})+1]}if(e)return e},skipStep:function(){var e=this.getNextStep(),t=i.get("page"),n=rankMath.adminurl.replace(window.location.origin,"");o("".concat(n,"?page=").concat(t,"&step=").concat(e)),window.scrollTo({top:0,behavior:"auto"})},updateData:function(t,n){(0,ne.isUndefined)(r)||(r[t]=n,e("rank-math-setup-wizard").updateStepData(a,r))},saveData:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,ne.isEmpty)(n)||e("rank-math-setup-wizard").updateStepData(a,n),oe()({method:"POST",path:"/rankmath/v1/setupWizard/updateStepData",data:{step:a,value:r}}).catch(function(e){alert(e.message)}).then(function(e){"ready"!==a&&((0,ne.isBoolean)(e)?t.skipStep():window.location=e)})}}}))(function(e){var t=e.currentStep,n=e.data,r=e.steps,a=e.getStepData,o=e.onStepChange,i=e.saveData,l=e.updateData,s=e.skipStep,c=e.getNextStep;return(0,Q.useEffect)(function(){(0,ne.isEmpty)(n)&&a();var e=c();a(e||t)},[t]),wp.element.createElement("div",{className:"rank-math-steps-progress-wrapper"},wp.element.createElement(ie.TabPanel,{tabs:r,key:t,initialTabName:t,className:"rank-math-steps-progress header",onSelect:o},function(e){var r=e.name,a=e.slug,o=e.heading,c=e.view;return(0,ne.isEmpty)(n)?wp.element.createElement(me,null):wp.element.createElement("div",{className:"wrapper"},wp.element.createElement("div",{className:"main-content wizard-content--".concat(a||r)},o&&wp.element.createElement(ue,e),wp.element.createElement(c,{data:n,saveData:i,updateData:l,skipStep:s})),!(0,ne.includes)(["ready","compatibility","import"],t)&&wp.element.createElement(ce,{data:n,saveData:i,skipStep:s,currentStep:t}))}))}),ve=function(e){if("ready"!==e.searchParams.get("step"))return wp.element.createElement("div",{className:"return-to-dashboard"},wp.element.createElement("a",{href:rankMath.adminurl+"?page=rank-math&view=modules"},(0,le.__)("Return to dashboard","seo-by-rank-math")))};n.dn(ve);const we=wp.hooks;function _e(){return _e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_e.apply(null,arguments)}const ke=function(e){var t=e.value,n=e.onChange,r=(0,we.applyFilters)("rank_math_wizard_modes",[{mode:"easy",title:(0,le.__)("Easy","seo-by-rank-math"),desc:(0,le.__)("For websites where you only want to change the basics and let Rank Math do most of the heavy lifting. Most settings are set to default as per industry best practices. One just has to set it and forget it.","seo-by-rank-math")},{mode:"advanced",title:(0,le.__)("Advanced","seo-by-rank-math"),desc:(0,le.__)("For the advanced users who want to control every SEO aspect of the website. You are offered options to change everything and have full control over the websiteâ€™s SEO.","seo-by-rank-math")},{mode:"custom",title:(0,le.__)("Custom Mode","seo-by-rank-math"),desc:(0,le.__)("Select this if you have a custom Rank Math settings file you want to use.","seo-by-rank-math"),isFree:!0}]),a=function(e){e.preventDefault(),window.open(Z("pro","Setup Wizard Custom Mode"))};return wp.element.createElement(React.Fragment,null,wp.element.createElement("ul",null,(0,ne.map)(r,function(e){var r=e.mode,o=e.title,i=e.desc,l=e.children,s=e.isFree,c=r===t,u="custom"===r&&s&&{onClick:a,"aria-hidden":!0};return wp.element.createElement("li",_e({key:r},u),wp.element.createElement("div",{className:"metabox rank-math-radio-control components-radio-control"},wp.element.createElement("input",{type:"radio",name:"setup_mode",id:r,value:r,checked:c,onChange:function(){return n(r)},className:"components-radio-control__input"})),wp.element.createElement("label",{htmlFor:r,className:c?"is-checked":""},wp.element.createElement("div",{className:"rank-math-mode-title"},o),l?(0,Q.createElement)(l,{checked:c,desc:i}):wp.element.createElement("p",null,i)))})),wp.element.createElement("p",null,wp.element.createElement("strong",{className:"note"},(0,le.__)("Note","seo-by-rank-math")),(0,le.__)("You can easily switch between modes at any point.","seo-by-rank-math")))};n.dn(ke);const Se=function(e){var t=e.allGood,n=e.isWhitelabel;return t?wp.element.createElement("p",{className:"description checklist-ok"},n?(0,le.__)("Your server is correctly configured to use Rank Math.","seo-by-rank-math"):(0,le.__)("Your server is correctly configured to use this plugin.","seo-by-rank-math")):wp.element.createElement("p",{className:"description checklist-not-ok"},n?(0,le.__)("Please resolve the issues above to be able to use all features of Rank Math plugin. If you are not sure how to do it, please contact your hosting provider.","seo-by-rank-math"):(0,le.__)("Please resolve the issues above to be able to use all SEO features. If you are not sure how to do it, please contact your hosting provider.","seo-by-rank-math"))};n.dn(Se);const Ee=jQuery;var Oe=n.n(Ee);function Pe(e,t,n){return Oe().ajax({url:rankMath.ajaxurl,type:n||"POST",dataType:"json",data:Oe().extend(!0,{action:"rank_math_"+e,security:rankMath.security},t)})}n.dn(Pe);const je=function(e){return(0,ne.map)(e,function(e,t){var n=(0,ne.includes)(["all-in-one-schemaorg-rich-snippets/index.php","wordpress-seo/wp-seo.php","wordpress-seo-premium/wp-seo-premium.php","all-in-one-seo-pack/all_in_one_seo_pack.php"],t)?"<span class='import-info'>".concat((0,le.__)("You can import settings in the next step.","seo-by-rank-math"),"</span>"):"";return['<span class="dashicons dashicons-warning"></span> '.concat(e," ").concat(n),wp.element.createElement(se.Button,{key:t,size:"small",variant:"secondary",className:"wizard-deactivate-plugin",onClick:function(e){return function(e,t){var n=Oe()(e.target);Pe("deactivate_plugins",{plugin:t}).always(function(e){1===e&&(n.parents("tr").find(".dashicons-warning").removeClass("dashicons-warning").addClass("dashicons-yes"),n.text((0,le.__)("Deactivated","seo-by-rank-math")).attr("disabled","disabled"))})}(e,t)}},(0,le.__)("Deactivate Plugin","seo-by-rank-math"))]})};n.dn(je);const Ce=function(e){var t=e.isWhitelabel,n=e.conflictingPlugins;return(0,ne.isEmpty)(n)?wp.element.createElement("p",{className:"conflict-text noconflict"},(0,le.__)("No known conflicting plugins found.","seo-by-rank-math")):wp.element.createElement(React.Fragment,null,wp.element.createElement("p",{className:"conflict-text"},t?(0,le.__)("The following active plugins on your site may cause conflict issues when used alongside Rank Math: ","seo-by-rank-math"):(0,le.__)("The following active plugins on your site may cause conflict issues when used alongside this plugin: ","seo-by-rank-math")),wp.element.createElement(se.Table,{className:"wizard-conflicts",fields:je(n),addHeader:!1}))};n.dn(Ce);const Ae=function(e){var t=e.phpVersion,n=e.phpVersionOk,r=e.phpVersionRecommend,a=e.isWhitelabel;if(!n)return(0,le.sprintf)((0,le.__)("Your PHP Version: %s | Recommended version: 7.4 | Minimal required: 7.2","seo-by-rank-math"),t);var o=(0,le.sprintf)((0,le.__)("Your PHP Version: %s","seo-by-rank-math"),t),i="".concat((0,le.__)("Rank Math is compatible with your PHP version but we recommend updating to PHP 7.4 for increased speed and security. ","seo-by-rank-math")," <a href='").concat(Z("requirements","Setup wizard compatibility step"),"'>").concat((0,le.__)("More information","seo-by-rank-math"),"</a>"),l=(0,le.__)("This plugin is compatible with your PHP version but we recommend updating to PHP 7.4 for increased speed and security.","seo-by-rank-math"),s=r?"".concat((0,le.__)(" | Recommended: PHP 7.4 or later","seo-by-rank-math")," <p class='description'>").concat(a?i:l,"</p>"):"";return"".concat(o," ").concat(s)};n.dn(Ae);const Ne=function(e){var t=e.feature,n=e.passed,r=e.showStatus,a=void 0===r||r,o=e.isBase64,i=void 0!==o&&o?(0,le.__)("available","seo-by-rank-math"):(0,le.__)("installed","seo-by-rank-math"),l=n?i:(0,le.__)("missing","seo-by-rank-math"),s=a?l:"";return"".concat(t," ").concat(s)};n.dn(Ne);var xe=function(e){return wp.element.createElement("span",{className:"dashicons dashicons-".concat(e?"yes":"no")})};const De=function(e){var t=e.phpVersion,n=e.phpVersionOk,r=e.phpVersionRecommended,a=e.extensions,o=e.isWhitelabel,i=a.dom,l=a.simpleXml,s=a.image,c=a.mbString,u=a.openSsl,m=a.base64Func,p=[{feature:(0,le.__)("You are using the recommended WordPress version.","seo-by-rank-math"),passed:!0,showStatus:!1},{feature:(0,le.__)("PHP DOM Extension","seo-by-rank-math"),passed:i},{feature:(0,le.__)("PHP SimpleXML Extension","seo-by-rank-math"),passed:l},{feature:(0,le.__)("PHP GD or Imagick Extension","seo-by-rank-math"),passed:s},{feature:(0,le.__)("PHP MBstring Extension","seo-by-rank-math"),passed:c},{feature:(0,le.__)("PHP OpenSSL Extension","seo-by-rank-math"),passed:u,showStatus:c},{feature:(0,le.__)("Base64 encode & decode functions","seo-by-rank-math"),passed:m,isBase64:!0}],d=(0,ne.map)(p,function(e){var t;return[Ne(e),xe(null!==(t=e.status)&&void 0!==t?t:e.passed)]}),f=Ae({phpVersion:t,phpVersionOk:n,phpVersionRecommended:r,isWhitelabel:o});return d=(0,ne.concat)([[f,xe(t)]],d)};function Te(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Me(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Me(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(De);const Ie=function(e){var t=e.allGood,n=e.phpVersionRecommended,r=Te((0,Q.useState)(!t),2),a=r[0],o=r[1];return wp.element.createElement(React.Fragment,null,t&&wp.element.createElement(React.Fragment,null,wp.element.createElement("br",null),wp.element.createElement("h2",{className:"text-center compatibility-check"},wp.element.createElement(ie.Icon,{icon:n?"warning":"yes"}),(0,le.__)("Your website is compatible to run Rank Math SEO","seo-by-rank-math"),wp.element.createElement(se.Button,{size:"small",variant:"link",className:"rank-math-collapsible-trigger",onClick:function(){return o(function(e){return!e})}},wp.element.createElement(ie.Icon,{icon:a?"arrow-up-alt2":"arrow-down-alt2"},wp.element.createElement("span",null,a?(0,le.__)("Less","seo-by-rank-math"):(0,le.__)("More","seo-by-rank-math")))))),a&&wp.element.createElement("div",{id:"rank-math-compatibility-collapsible"},wp.element.createElement(se.Table,{fields:De(e),addHeader:!1,useThOnly:!0}),wp.element.createElement(Se,e),wp.element.createElement(Ce,e)))};function Re(){return Re=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Re.apply(null,arguments)}function Ue(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Fe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Fe(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Ie);const Be=function(e){var t=e.data,n=e.saveData,r=(e.skipStep,Ue((0,Q.useState)(t.setup_mode),2)),a=r[0],o=r[1],i=t.phpVersionOk,l=t.extensions,s=(0,ne.some)(l,function(e){return!1===e}),c=i&&!s;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-metabox rank-math-setup-mode ".concat(rankMath.isPro?"":"is-free")},wp.element.createElement(ke,{value:a,onChange:o})),wp.element.createElement(Ie,Re({},t,{allGood:c})),wp.element.createElement("footer",{className:"form-footer rank-math-custom wp-core-ui rank-math-ui text-center"},c&&wp.element.createElement(se.Button,{variant:"animate",onClick:function(){t.setup_mode=a,n(t)}},(0,le.__)("Start Wizard","seo-by-rank-math"),wp.element.createElement(ie.Icon,{icon:"arrow-right-alt2"}))))};function We(e){return We="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},We(e)}function ze(e){return function(e){if(Array.isArray(e))return Ve(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||$e(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ge(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=We(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=We(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==We(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function He(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||$e(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $e(e,t){if(e){if("string"==typeof e)return Ve(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ve(e,t):void 0}}function Ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Be);const Ye=function(e){var t=e.options,n=e.setSelectedPlugins,r=e.selectedPlugins,a=He((0,Q.useState)(!1),2),o=a[0],i=a[1],l=t.name,s=t.plugin,c=t.metaOptions,u=t.metaDescription,m="recalculate",p=r[s],d=["yoast","seopress","aioseo","all-in-one-seo-pack-pro","yoast-premium","aio-rich-snippet","wp-schema-pro"],f=function(e){var t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Le(Object(n),!0).forEach(function(t){Ge(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Le(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},r);(0,ne.includes)(d,s)&&function(e){(0,ne.forEach)((0,ne.keys)(e),function(t){(0,ne.includes)(d,t)&&delete e[t]})}(t),e.length>0?t[s]=e:delete t[s],n(t)};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"plugin-title ".concat(o?"is-open":"")},wp.element.createElement(se.CheckboxControl,{variant:"metabox",checked:Boolean(p),onChange:function(e){var t=(0,ne.map)(c,function(e){return e.id}),n=e?[].concat(ze(t),[m]):[];return f(n)}}),wp.element.createElement(ie.Button,{onClick:function(){return i(function(e){return!e})}},wp.element.createElement("h3",null,l),wp.element.createElement(ie.Icon,{icon:o?"arrow-up-alt2":"arrow-down-alt2"}))),o&&wp.element.createElement("div",{className:"inside"},wp.element.createElement(se.CheckboxList,{toggleAll:!0,variant:"metabox",value:p,onChange:function(e){var t=p,n=[].concat(ze(e),ze((0,ne.includes)(t,m)?[m]:[]));return f(n)},options:c}),wp.element.createElement("p",{className:"description",dangerouslySetInnerHTML:{__html:u}}),wp.element.createElement(se.CheckboxControl,{variant:"metabox",label:(0,le.__)("Recalculate SEO Scores","seo-by-rank-math"),checked:(0,ne.includes)(p,m),onChange:function(e){var t=p,n=[].concat(ze((0,ne.filter)(t,function(e){return e!==m})),ze(e?[m]:[]));return f(n)}})))};n.dn(Ye);const qe=rankMathAnalyzer,Ke=function(e){var t=rankMath.assessor.researchesTests;return t=(0,ne.difference)(t,["keywordNotUsed"]),e.isProduct?t=(0,ne.difference)(t,["keywordInSubheadings","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasNumber","contentHasTOC"]):t};function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function Xe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Qe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Je(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Je(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return et(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?et(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function et(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Ke);const tt=function(e){var t=e.selectedPlugins,n=e.setImportComplete,r=Ze((0,Q.useState)(""),2),a=r[0],o=r[1],i=Ze((0,Q.useState)(1),2),l=i[0],s=i[1],c=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xe(Object(n),!0).forEach(function(t){Qe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xe(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},t),u=(0,ne.entries)(t),m=(0,ne.map)(u,function(e){return e[0]}),p=(0,ne.flatMap)((0,ne.map)(u,function(e){return e[1]})).length,d=[],f=function(e){var t=new Date,n="["+(10>t.getHours()?"0":"")+t.getHours()+":"+(10>t.getMinutes()?"0":"")+t.getMinutes()+":"+(10>t.getSeconds()?"0":"")+t.getSeconds()+"] "+e+"\n";o(function(e){return e+n})},y=function(e,t,n,r,a){if(0!==t.length){n=n||1;var o=t.shift(),i="deactivate"===o?(0,le.sprintf)((0,le.__)("Deactivating %1$s","seo-by-rank-math"),a):(0,le.sprintf)((0,le.__)("Importing %1$s from %2$s","seo-by-rank-math"),o,a),l=(0,ne.floor)(100/p);"recalculate"===o&&(i=(0,le.__)("Starting SEO score recalculation","seo-by-rank-math")),f(i),fetch(rankMath.ajaxurl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({perform:o,pluginSlug:e,paged:n,action:"rank_math_import_plugin",security:rankMath.security})}).then(function(e){if(!e.ok)throw new Error(e.statusText);return e.json()}).then(function(i){var c=1;i&&i.page&&i.page<i.total_pages&&(c=i.page+1,t.unshift(o)),i&&i.total_pages&&(l=Math.ceil(l/i.total_pages)),s(function(e){return e+l}),"recalculate"===o&&i.total_items>0?function(e,t,n,r,a){var o={};if("complete"!==e)return new Promise(function(t){(0,ne.forEach)((0,ne.entries)(e),function(e){var t=Ze(e,2),n=t[0],r=t[1];if(!d.includes(n)){d.push(n);var a=new qe.ResultManager,i=wp.i18n,l=new qe.Paper;l.setTitle(r.title),l.setDescription(r.description),l.setText(r.content),l.setKeyword(r.keyword),l.setKeywords(r.keywords),l.setPermalink(r.url),l.setUrl(r.url),r.thumbnail&&l.setThumbnail(r.thumbnail),l.setContentAI(r.hasContentAi);var s=Ke(r);new qe.Analyzer({i18n:i,analysis:s}).analyzeSome(s,l).then(function(e){a.update(l.getKeyword(),e,!0);var t=a.getScore(r.keyword);r.isProduct&&(t+=r.isReviewEnabled?1:0,t+=r.hasProductSchema?1:0),o[n]=t})}}),t()}).then(function(){fetch(rankMath.api.root+"rankmath/v1/updateSeoScore",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":rankMath.restNonce},body:JSON.stringify({action:"rank_math_update_seo_score",postScores:o})}).then(function(e){if(!e.ok)throw new Error(e.statusText);return e.json()}).then(function(){f((0,le.__)("SEO Scores updated","seo-by-rank-math")),y(t,n,r,a)}).catch(function(e){f(e.message)})});y(t,n,r,a)}(i.data,a,t,n,r):("recalculate"===o&&0===i.total_items&&(i.message=(0,le.__)("No posts found without SEO score.","seo-by-rank-math")),f(i.success?i.message:i.error),y(e,t,c,r,a))}).catch(function(n){f(n.message),y(e,t,null,r,a)})}else r()},h=function(e){var t=(0,ne.keys)(c),n=t[0],r=c[n],a=(0,ne.keys)(c)[0];if(delete c[a],0===t.length)return f((0,le.__)("Import finished. Click on the button below to continue the Setup Wizard.","seo-by-rank-math")),void e();y(a,r,null,function(){h(e)},n)};return(0,Q.useEffect)(function(){f((0,le.__)("Import startedâ€¦","seo-by-rank-math")),h(function(){s(100)}),n(!0)},[]),(0,Q.useEffect)(function(){var e=document.querySelector("#import-progress-textarea");e.scrollTop=e.scrollHeight-e.clientHeight-20},[f]),wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{id:"import-progress-bar"},wp.element.createElement("div",{id:"importProgress"},wp.element.createElement("div",{id:"importBar",style:{width:l+"%"}})),wp.element.createElement("span",{className:"left"},wp.element.createElement("strong",null,(0,le.__)("Importing: ","seo-by-rank-math")),wp.element.createElement("span",{className:"plugin-from"},(0,ne.map)(m,function(e,t){return wp.element.createElement(Q.Fragment,{key:t},e,t<u.length-1&&", ")}))),wp.element.createElement("span",{className:"right"},wp.element.createElement("span",{className:"number"},l),(0,le.__)("% Completed","seo-by-rank-math"))),wp.element.createElement(se.TextareaControl,{disabled:!0,rows:8,value:a,id:"import-progress-textarea"}))};function nt(e){return nt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nt(e)}function rt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function at(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rt(Object(n),!0).forEach(function(t){ot(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ot(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=nt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=nt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==nt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function it(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return lt(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function lt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(tt);const st=function(e){var t=(0,ne.map)((0,ne.entries)(e.importablePlugins),function(e){var t=it(e,2),n=t[0],r=t[1],a=r.name,o=r.choices,i=r.isActive,l=(r.checked,(0,ne.map)((0,ne.entries)(o),function(e){var t=it(e,2);return{id:t[0],label:t[1]}})),s=function(e,t,n){var r;return r="aio-rich-snippet"===e?(0,le.sprintf)((0,le.__)("Import meta data from the %s plugin.","seo-by-rank-math"),t):(0,le.sprintf)((0,le.__)("Import settings and meta data from the %s plugin.","seo-by-rank-math"),t),r+=" "+(0,le.sprintf)((0,le.__)('The process may take a few minutes if you have a large number of posts or pages <a href="%1$s">Learn more about the import process here.</a>',"seo-by-rank-math"),Z("seo-import","SW Import Step")),n&&(r+="<br>"+(0,le.sprintf)((0,le.__)("%s plugin will be disabled automatically moving forward to avoid conflicts. <strong>It is thus recommended to import the data you need now.</strong>","seo-by-rank-math"),t)),r}(n,a,i);return at(at({},r),{},{plugin:n,metaOptions:l,metaDescription:s})});return(0,ne.filter)(t,Boolean)};function ct(e){return function(e){if(Array.isArray(e))return pt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||mt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ut(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||mt(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mt(e,t){if(e){if("string"==typeof e)return pt(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pt(e,t):void 0}}function pt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(st);const dt=function(e){var t=e.data,n=e.skipStep,r=(0,ne.reduce)((0,ne.entries)(t.importablePlugins),function(e,t){var n=ut(t,2),r=n[0],a=n[1];return a.checked?(e[r]=[].concat(ct((0,ne.keys)(null==a?void 0:a.choices)||[]),["recalculate"]),e):e},{}),a=ut((0,Q.useState)(r),2),o=a[0],i=a[1],l=ut((0,Q.useState)(!1),2),s=l[0],c=l[1],u=ut((0,Q.useState)(!1),2),m=u[0],p=u[1];return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"import-plugin"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("h3",null,(0,le.__)("Input Data From:","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},(0,ne.map)(st(t),function(e,t){return wp.element.createElement(Ye,{key:t,options:e,selectedPlugins:o,setSelectedPlugins:i})}),s&&wp.element.createElement(tt,{selectedPlugins:o,setImportComplete:p}))),wp.element.createElement("footer",{className:"form-footer wp-core-ui rank-math-ui"},!m&&wp.element.createElement(se.Button,{variant:"secondary",className:"button-deactivate-plugins","data-deactivate-message":(0,le.__)("Deactivating Pluginsâ€¦","seo-by-rank-math"),onClick:n},(0,le.__)("Skip, Don't Import Now","seo-by-rank-math")),wp.element.createElement(se.Button,{variant:"primary",className:"button-import",onClick:function(){if(!m)return!(rankMath.isConfigured&&!window.confirm(rankMath.confirm))&&((0,ne.isEmpty)(o)?(window.alert((0,le.__)("Please select plugin to import data.","seo-by-rank-math")),!1):void c(!0));n()},disabled:s&&!m},m?(0,le.__)("Continue","seo-by-rank-math"):(0,le.__)("Start Import","seo-by-rank-math"))))};n.dn(dt);const ft=function(e){var t=e.title,n=e.description,r=e.link,a=e.linkText,o=void 0===a?(0,le.__)("Learn more","seo-by-rank-math"):a;return wp.element.createElement("header",{className:"rank-math-tab-header"},wp.element.createElement("h2",null,t),wp.element.createElement("p",null,n,r&&wp.element.createElement(React.Fragment,null," ",wp.element.createElement("a",{href:r,target:"_blank",rel:"noreferrer"},o),".")))};function yt(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var i=Oe()('<div class="notice notice-'+t+" "+a+' is-dismissible"><p>'+e+"</p></div>").hide();o||n.siblings(".notice").remove(),n.after(i),i.slideDown(),Oe()(document).trigger("wp-updates-notice-added"),Oe()("html,body").animate({scrollTop:i.offset().top-50},"slow"),r&&setTimeout(function(){i.fadeOut(function(){i.remove()})},r)}function ht(e){return ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ht(e)}n.dn(ft),n.dn(yt);var bt=["validate","afterSave"];function gt(){return gt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gt.apply(null,arguments)}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vt(Object(n),!0).forEach(function(t){_t(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ht(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ht(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ht(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return St(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?St(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function St(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Et=function(e,t){return"resetting"===t?(0,le.__)("Resettingâ€¦","seo-by-rank-math"):"resetted"===t?(0,le.__)("Resetted","seo-by-rank-math"):e.children},Ot=function(e,t){return"updating"===t?(0,le.__)("Updatingâ€¦","seo-by-rank-math"):"updated"===t?(0,le.__)("Updated","seo-by-rank-math"):e.children},Pt=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if((0,ne.includes)(["roleCapabilities","redirections"],e))return{data:t,fields:{},updated:[]};var o={},i=[];return{data:(0,ne.isUndefined)(n)?{}:(0,ne.reduce)(n,function(e,n){return(0,ne.isArray)(n.fields)&&0!==n.fields.length?"htaccess"===n.name?(e.htaccess_allow_editing=t.htaccess_allow_editing,e.htaccess_content=t.htaccess_content,(0,ne.isEqual)(t.htaccess_content,a.htaccess_content)||i.push("htaccess_content"),e):((0,ne.forEach)(n.fields,function(n){var l=n.id;if(r)(0,ne.has)(n,"default")&&(e[l]=n.default,o[l]=n.type);else{var s=(""===t[l]||(0,ne.isUndefined)(t[l]))&&(0,ne.has)(n,"default")?n.default:t[l];e[l]=s,o[l]=n.type,"file"!==n.type||(0,ne.isUndefined)(t[l+"_id"])||(e[l+"_id"]=t[l+"_id"],o[l]="text"),(0,ne.isEqual)(s,a[l])||i.push(l)}}),e):e},{}),fields:o,updated:i}};const jt=(0,re.compose)((0,te.withSelect)(function(e){return{settings:e("rank-math-settings").getdirtySettings(),data:e("rank-math-settings").getData()}}),(0,te.withDispatch)(function(e,t){var n=t.type,r=t.settings,a=t.tabs,o=t.footer.applyButton;return{saveSettings:function(t,i){var l=Pt(n,r,a,!1,i);t("updating"),oe()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:l.data,fieldTypes:l.fields,updated:l.updated}}).then(function(n){return t("updated"),n?!(0,ne.isUndefined)(n.notifications)&&n.notifications.length?((0,ne.forEach)(n.notifications,function(e){var t=!(0,ne.isEmpty)(e.error);yt(t?e.error:e.success,t?"error":"success",Oe()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice",!0)}),void Oe()("html, body").animate({scrollTop:0},"fast")):n.error?(yt(n.error,"error",Oe()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void Oe()("html, body").animate({scrollTop:0},"fast")):(e("rank-math-settings").updateData(n.settings?n.settings:wt({},l.data)),n.success?(yt(n.success,"success",Oe()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void Oe()("html, body").animate({scrollTop:0},"fast")):(n&&!n.error&&o.afterSave&&o.afterSave(),t("updated"),void e("rank-math-settings").resetdirtySettings())):(t(""),void window.alert((0,le.__)("Something went wrong! Please try again.","seo-by-rank-math")))})},resetSettings:function(t){var o=Pt(n,r,a,!0);t("resetting"),oe()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:o.data,fieldTypes:o.fields,isReset:!0}}).then(function(n){if(!n)return t(""),void window.alert((0,le.__)("Something went wrong! Please try again.","seo-by-rank-math"));t("resetted"),e("rank-math-settings").updateData(n.settings?n.settings:wt({},o.data)),e("rank-math-settings").resetdirtySettings()})}}}))(function(e){var t=kt((0,Q.useState)(""),2),n=t[0],r=t[1],a=e.settings,o=e.data,i=e.resetSettings,l=e.saveSettings,s=e.footer,c=s.applyButton,u=c.validate,m=(c.afterSave,function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(c,bt)),p=(0,Q.useRef)(null);return null===p.current&&(p.current=wt({},o)),(0,Q.useEffect)(function(){(0,ne.includes)(["updated","resetted"],n)&&setTimeout(function(){return r("")},1e3)},[n]),wp.element.createElement("footer",{className:"form-footer rank-math-ui"},wp.element.createElement(se.Button,gt({onClick:function(){window.confirm((0,le.__)("Are you sure? You want to reset settings.","seo-by-rank-math"))&&i(r)}},s.discardButton,{children:Et(s.discardButton,n)})),wp.element.createElement(se.Button,gt({variant:"primary",onClick:function(){(!u||u())&&l(r,p.current)},disabled:(0,ne.isEmpty)(a)},m,{children:Ot(m,n)})))});var Ct=n(6942),At=n.n(Ct);function Nt(e){return Nt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Nt(e)}var xt=["id","type","content","Component","isDisabled","default"];function Dt(){return Dt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Dt.apply(null,arguments)}function Tt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tt(Object(n),!0).forEach(function(t){It(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function It(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Nt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Nt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Nt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Rt(e){return function(e){if(Array.isArray(e))return Ut(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ut(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ut(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ut(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Ft=(0,re.compose)((0,te.withDispatch)(function(e,t){var n=t.settings;return{updateSetting:function(t,r){n[t]=r,e("rank-math-settings").updateData(Mt({},n))}}}))(function(e){var t=e.field,n=e.settingType,r=e.settings,a=e.value,o=t.id,i=t.type,l=t.content,s=t.Component,c=t.isDisabled,u=t.default,m=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(t,xt);(0,ne.isUndefined)(a)&&(a=(0,ne.isUndefined)(r)||(0,ne.isUndefined)(r[o])?u:r[o]),(0,ne.includes)(["disable_author_archives","opening_hours_format"],o)&&(0,ne.isBoolean)(a)&&e.updateSetting(o,!1===a?"off":"on"),(0,ne.includes)(["disable_author_archives"],o)&&""===a&&e.updateSetting(o,u),(0,ne.endsWith)(o,"_bulk_editing")&&!(0,ne.isString)(a)&&(a=String(a)),!(0,ne.endsWith)(o,"_default_rich_snippet")||""!==a&&!1!==a||(a="off");var p=function(t){if(((0,ne.endsWith)(o,"_robots")||"robots_global"===o)&&(0,ne.isArray)(t)&&((0,ne.includes)(t,"index")||(0,ne.includes)(t,"noindex")||(0,ne.includes)(a||[],"index")||(0,ne.includes)(a||[],"noindex"))){var n=a||[],r=(0,ne.includes)(t,"index"),l=(0,ne.includes)(t,"noindex"),s=(0,ne.includes)(n,"index"),c=(0,ne.includes)(n,"noindex");if(s&&!r)t=[].concat(Rt(t),["noindex"]);else if(c&&!l)t=[].concat(Rt(t),["index"]);else if(r&&l){var u=(0,ne.last)(t);t=(0,ne.filter)(t,function(e){return"index"===u?"noindex"!==e:"index"!==e})}}"file"===i?((0,ne.isEmpty)(t)&&(t={url:"",id:""}),e.updateSetting(o,t.url),e.updateSetting(o+"_id",t.id)):e.updateSetting(o,t)},d=function(){var e={toggle:"checked",checkbox:"checked"}[i]||"value",t=(0,ne.includes)(["component","group"],i);return Mt(Mt(Mt({},m),{},It(It({id:o},e,m.value||a),"onChange",m.onChange||!c&&p),t&&{settingType:n}),m.attributes)},f={file:window.rankMathComponents.UploadFile,text:window.rankMathComponents.TextControl,select:window.rankMathComponents.SelectControl,toggle:window.rankMathComponents.ToggleControl,select_search:window.rankMathComponents.SelectWithSearch,multicheck:window.rankMathComponents.CheckboxList,multicheck_inline:window.rankMathComponents.CheckboxList,radio_inline:window.rankMathComponents.ToggleGroupControl,repeatable_group:window.rankMathComponents.RepeatableGroup,selectSearch:window.rankMathComponents.SelectWithSearch,searchPage:window.rankMathComponents.SearchPage,checkboxlist:window.rankMathComponents.CheckboxList,toggleGroup:window.rankMathComponents.ToggleGroupControl,repeatableGroup:window.rankMathComponents.RepeatableGroup,group:window.rankMathComponents.Group,checkbox:window.rankMathComponents.CheckboxControl,textarea:window.rankMathComponents.TextareaControl,notice:window.rankMathComponents.Notice,selectVariable:window.rankMathComponents.SelectVariable,button:window.rankMathComponents.Button}[i],y="group"===i?{onChange:e.updateSetting}:{};return f?wp.element.createElement(f,Dt({},d(),{settings:r},y)):"component"===i?wp.element.createElement(s,d()):"raw"===i?wp.element.createElement(Q.RawHTML,null,l):null});var Bt=["relation","compare"];function Wt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return zt(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?zt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function zt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Lt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=e.relation,r=void 0===n?"or":n,a=e.compare,o=void 0===a?"":a,i=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,Bt),l=function(e){var n=Wt(e,2),r=n[0],a=n[1],i=t[r];return"!="===o?(0,ne.isArray)(a)?!(0,ne.includes)(a,i):a!==i:(0,ne.isArray)(a)?(0,ne.includes)(a,i):a===i};return"and"===r?(0,ne.every)((0,ne.entries)(i),l):(0,ne.some)((0,ne.entries)(i),l)};function Gt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ht(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ht(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ht(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Lt);const $t=function(e,t){return(0,ne.some)(e,function(e){var n=Gt(e,1)[0];return t[n]})};function Vt(e){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(e)}function Yt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function qt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yt(Object(n),!0).forEach(function(t){Kt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Kt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Vt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Vt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Vt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn($t);const Jt=function(e){var t=e.settingType,n=e.fields,r=e.settings,a=void 0===r?null:r;return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-".concat(t),className:"field-metabox field-list"},(0,ne.map)(n,function(e,n){var r=e.id,o=e.type,i=e.name,l=e.desc,s=e.classes,c=e.content,u=e.dep,m=e.disableDep,p=e.afterfield,d=$t(m,a);if((!u||Lt(u,a))&&"hidden"!==o){if("raw"===o)return c;var f=At()("field-row",s,Kt(Kt({"field-disabled":d},"field-id-"+r,r),"field-type-"+o,o));return wp.element.createElement("div",{key:r||n,className:f},i&&wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:r},i)),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(Ft,{settingType:t,field:qt(qt({},e),{},{isDisabled:d}),settings:a}),l&&wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:l}}),p))}})))};n.dn(Jt);const Xt=function(e){var t=e.type,n=e.header,r=e.footer,a=e.fields,o=void 0===a?[]:a,i=e.settings,l=void 0===i?null:i,s=e.tabs;return(0,ne.isEmpty)(l)?null:wp.element.createElement(React.Fragment,null,n&&wp.element.createElement(ft,n),wp.element.createElement(Jt,{settingType:t,fields:o,settings:l}),r&&wp.element.createElement(jt,{type:t,footer:r,tabs:s}))};function Qt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Zt(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Zt(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Xt);var en=function(){return wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:Z("how-to-setup-your-site","SW Your Site Setup KB")},(0,le.__)("Click here to learn how to setup Rank Math properly","seo-by-rank-math"))},tn=function(){var e=Qt((0,Q.useState)(""),2),t=e[0],n=e[1];return wp.element.createElement("form",{onSubmit:function(e){e.preventDefault(),window.open("".concat(Z("kb-search","SW Your Site Search"),"&q=").concat(t),"_blank","noreferrer")},className:"search-form wp-core-ui rank-math-ui"},wp.element.createElement("label",{htmlFor:"rank-math-search-input"},(0,le.__)("Search the Knowledge Base for answers to your questions:","seo-by-rank-math")),wp.element.createElement(se.TextControl,{autoCorrect:"off",autoComplete:"off",autoCapitalize:"none",variant:"regular-text",spellCheck:!1,value:t,onChange:n,placeholder:(0,le.__)("Type here to searchâ€¦","seo-by-rank-math")}),wp.element.createElement(se.Button,{type:"submit",variant:"primary",disabled:!t},(0,le.__)("Search","seo-by-rank-math")))};const nn=function(){var e=function(e,t){return wp.element.createElement(React.Fragment,null,wp.element.createElement("span",{className:"rm-icon rm-icon-".concat(e)}),t)},t=[{name:"help-panel-video",title:e("video",(0,le.__)("Setup Tutorial","seo-by-rank-math")),view:en},{name:"help-panel-knowledge",title:e("post",(0,le.__)("Knowledge Base","seo-by-rank-math")),view:tn}];return wp.element.createElement(ie.TabPanel,{tabs:t},function(e){var t=e.name,n=e.view;return wp.element.createElement("div",{className:"rank-math-tabs-content rank-math-custom"},wp.element.createElement("div",{id:t,className:"rank-math-tab"},wp.element.createElement(n,null)))})};n.dn(nn);const rn=function(e){return[{id:"site_type",type:"select",name:(0,le.sprintf)((0,le.__)("%1$s is aâ€¦","seo-by-rank-math"),rankMath.blogName),options:{blog:(0,le.__)("Personal Blog","seo-by-rank-math"),news:(0,le.__)("Community Blog/News Site","seo-by-rank-math"),portfolio:(0,le.__)("Personal Portfolio","seo-by-rank-math"),business:(0,le.__)("Small Business Site","seo-by-rank-math"),webshop:(0,le.__)("Webshop","seo-by-rank-math"),otherpersonal:(0,le.__)("Other Personal Website","seo-by-rank-math"),otherbusiness:(0,le.__)("Other Business Website","seo-by-rank-math")}},{id:"business_type",type:"select_search",name:(0,le.__)("Business Type","seo-by-rank-math"),desc:(0,le.__)('Select the type that best describes your business. If you can\'t find one that applies exactly, use the generic "Organization" or "Local Business" types.',"seo-by-rank-math"),options:e.businessTypesChoices,dep:{site_type:["news","business","webshop","otherbusiness"]}},{id:"website_name",type:"text",name:(0,le.__)("Website Name","seo-by-rank-math"),desc:(0,le.__)("Enter the name of your site to appear in search results.","seo-by-rank-math")},{id:"website_alternate_name",type:"text",name:(0,le.__)("Website Alternate Name","seo-by-rank-math"),desc:(0,le.__)("An alternate version of your site name (for example, an acronym or shorter name).","seo-by-rank-math")},{id:"company_name",type:"text",name:(0,le.__)("Person/Organization Name","seo-by-rank-math"),desc:(0,le.__)("Your name or company name intended to feature in Google's Knowledge Panel.","seo-by-rank-math")},{id:"company_logo",type:"file",name:(0,le.__)("Logo for Google","seo-by-rank-math"),description:(0,le.__)("<strong>Min Size: 112Î§112px</strong>.<br />A squared image is preferred by the search engines.","seo-by-rank-math")},{id:"open_graph_image",type:"file",name:(0,le.__)("Default Social Share Image","seo-by-rank-math"),description:(0,le.__)("When a featured image or an OpenGraph Image is not set for individual posts/pages/CPTs, this image will be used as a fallback thumbnail when your post is shared on Facebook. <strong>The recommended image size is 1200 x 630 pixels.</strong>","seo-by-rank-math")}]};function an(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return on(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?on(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function on(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(rn);const ln=function(e){var t=e.data,n=e.updateData,r=an((0,Q.useState)(!1),2),a=r[0],o=r[1],i=(0,ne.map)(rn(t),function(e){return e.value=t[e.id],"file"===e.type?e.onChange=function(t){return n(e.id,t.url),n(e.id+"_id",t.id),!0}:e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(React.Fragment,null,!t.isWhitelabel&&wp.element.createElement("div",{className:"rank-math-wizard-tutorial"},wp.element.createElement("header",null,(0,le.__)("If you are new to Rank Math,","seo-by-rank-math"),"Â ",wp.element.createElement(se.Button,{variant:"link",onClick:function(){return o(function(e){return!e})}},(0,le.__)("click here","seo-by-rank-math")),"Â ",(0,le.__)("to learn more.","seo-by-rank-math")),a&&wp.element.createElement(nn,null)),wp.element.createElement(Xt,{fields:i,settings:t}))};n.dn(ln);const sn=function(e){var t=e.authUrl,n=e.isAuthorized,r=[(0,le.__)("Verify site ownership on Google Search Console in a single click","seo-by-rank-math"),(0,le.__)("Track page and keyword rankings with the Advanced Analytics module","seo-by-rank-math"),(0,le.__)("Easily set up Google Analytics without using another 3rd party plugin","seo-by-rank-math"),(0,le.__)("Automatically submit sitemaps to the Google Search Console","seo-by-rank-math"),wp.element.createElement("a",{key:"help-analytics",target:"_blank",rel:"noreferrer",href:Z("help-analytics","SW Analytics Step Benefits")},(0,le.__)("Learn more about the benefits of connecting your account here.","seo-by-rank-math"))];return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"connect-wrap"},n?wp.element.createElement(se.Button,{variant:"primary"},(0,le.__)("Disconnect Account","seo-by-rank-math")):wp.element.createElement(se.Button,{href:t,variant:"animate",className:"rank-math-authorize-account"},(0,le.__)("Connect Google Services","seo-by-rank-math"))),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"analytics"},wp.element.createElement("div",{className:"rank-math-cta-box width-100 no-shadow no-padding no-border"},wp.element.createElement("h3",null,(0,le.__)("Benefits of Connecting Google Account","seo-by-rank-math")),wp.element.createElement("ul",null,(0,ne.map)(r,function(e,t){return wp.element.createElement("li",{key:t},e)})))),wp.element.createElement(se.PrivacyBox,{className:rankMath.isSettingsPage?"width-100":""}))};n.dn(sn);const cn=function(e){var t=e.isSiteUrlValid,n=e.activateUrl,r=[(0,le.__)("Verify site ownership on Google Search Console in a single click","seo-by-rank-math"),(0,le.__)("Track page and keyword rankings with the Advanced Analytics module","seo-by-rank-math"),(0,le.__)("Easily set up Google Analytics without using another 3rd party plugin","seo-by-rank-math"),(0,le.__)("Automatically submit sitemaps to the Google Search Console","seo-by-rank-math"),(0,le.__)("Free keyword suggestions when entering a focus keyword","seo-by-rank-math"),(0,le.__)("Use our revolutionary SEO Analyzer to scan your website for SEO errors","seo-by-rank-math"),wp.element.createElement("a",{key:"learn-more",target:"_blank",rel:"noreferrer",href:Z("free-account-benefits","SW Analytics Step")},(0,le.__)("Learn more about the benefits of connecting your account here.","seo-by-rank-math"))];return wp.element.createElement(React.Fragment,null,wp.element.createElement(se.InvalidSiteUrlNotice,{isSiteUrlValid:t}),wp.element.createElement("div",{className:"wp-core-ui rank-math-ui connect-wrap"},wp.element.createElement(se.Button,{href:n,variant:"animate",disabled:!t},(0,le.__)("Connect Your Rank Math Account","seo-by-rank-math"))),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"analytics"},wp.element.createElement("div",{className:"rank-math-cta-box width-100 no-shadow no-padding no-border"},wp.element.createElement("h3",null,(0,le.__)("Benefits of Connecting Rank Math Account","seo-by-rank-math")),wp.element.createElement("ul",null,(0,ne.map)(r,function(e,t){return wp.element.createElement("li",{key:t},e)})))),wp.element.createElement(se.PrivacyBox,null))};n.dn(cn);const un=function(e){var t,n=e.data,r=e.updateData,a=n.searchConsole;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(se.SelectWithSearch,{value:a.profile,width:268,options:null!==(t=a.sites)&&void 0!==t?t:{},onChange:function(e){a.profile=e,r("searchConsole",a)},label:(0,le.__)("Site","seo-by-rank-math"),className:"site-console-profile notrack",disabled:rankMath.isConsoleConnected})),(0,we.applyFilters)("rank_math_analytics_options_console","",n,r)),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{checked:a.enable_index_status,disabled:!a.profile,onChange:function(e){a.enable_index_status=e,r("searchConsole",a)},className:"regular-text notrack",label:(0,le.__)("Enable the Index Status tab","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description"},(0,le.__)("Enable this option to show the Index Status tab in the Analytics module. ","seo-by-rank-math"),wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:Z("url-inspection-api","SW Analytics Index Status Option")},(0,le.__)("Learn more.","seo-by-rank-math"))))))};function mn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return pn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(un);var dn=function(e,t){Pe("get_ga4_data_streams",{propertyID:e},"post").done(function(e){e.error?console.error(e.error):t(e.streams)})};const fn=function(e){var t,n,r,a=e.data,o=e.updateData,i=a.analyticsData,l=a.allServices,s=i.account_id,c=null!==(t=i.property_id)&&void 0!==t?t:"",u=null!==(n=i.view_id)&&void 0!==n?n:"",m=null!==(r=i.stream_name)&&void 0!==r?r:"",p=rankMath.isPro,d={},f=new Map;f.set("",(0,le.__)("Select Property","seo-by-rank-math"));var y={},h=mn((0,Q.useState)({}),2),b=h[0],g=h[1];return(0,ne.isEmpty)(l.accounts)||(0,ne.forEach)(l.accounts,function(e,t){d[t]=e.name+" ("+t+")",s===t&&(f.set("create-ga4-property",(0,le.__)("Create new GA4 Property","seo-by-rank-math")),(0,ne.forEach)(e.properties,function(e,t){f.set(t,e.name)})),s||(i.account_id=t,o("analyticsData",i))}),(0,Q.useEffect)(function(){if(!(0,ne.isEmpty)(b)){var e=b[0];i.view_id=e.id,i.stream_name=e.name,i.measurement_id=e.measurementId,o("analyticsData",i)}},[b]),(0,ne.isEmpty)(b)||(0,ne.forEach)(b,function(e){y[e.id]=e.name}),u&&m&&!y[u]&&(y[u]=m),y[u]||(y[u]=(0,le.__)("Select","seo-by-rank-math")),wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(se.SelectWithSearch,{value:s,options:d,onChange:function(e){i.account_id=e,o("analyticsData",i)},label:(0,le.__)("Account","seo-by-rank-math"),className:"site-analytics-account notrack",disabled:rankMath.isAnalyticsConnected})),wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(se.SelectControl,{value:c,options:f,onChange:function(e){"create-ga4-property"!==e?(i.property_id=e,o("analyticsData",i),e&&dn(e,g)):confirm((0,le.__)("Are you sure, you want to create a new GA4 Property?","seo-by-rank-math"))&&Pe("create_ga4_property",{accountID:s},"post").done(function(e){e.error?alert(e.error):(f.set(e.id,e.name),i.property_id=e.id,o("analyticsData",i),l.accounts[s].properties[e.id]={name:e.name,id:e.id,account_id:s,type:"GA4"},o("allServices",l),dn(e.id,g))})},label:(0,le.__)("Property","seo-by-rank-math"),className:"site-analytics-property notrack",disabled:rankMath.isAnalyticsConnected})),wp.element.createElement("div",{className:"field-row-col"},wp.element.createElement(se.SelectControl,{value:u,options:y,onChange:function(e){i.view_id=e;var t=(0,ne.find)(b,{id:e});i.stream_name=t.name,i.measurement_id=t.measurementId,o("analyticsData",i)},label:(0,le.__)("Data Stream","seo-by-rank-math"),className:"site-analytics-view notrack",disabled:rankMath.isAnalyticsConnected})),(0,we.applyFilters)("rank_math_analytics_options_analytics","",a,o)),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{checked:i.install_code,onChange:function(e){i.install_code=e,o("analyticsData",i)},className:"regular-text notrack",label:(0,le.__)("Install analytics code","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description"},(0,le.__)("Enable this option only if you are not using any other plugin/theme to install Google Analytics code.","seo-by-rank-math")))),i.install_code&&wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{"data-url":p?void 0:Z("free-vs-pro","Anonymize IP"),className:"field-row field-type-toggle ".concat(p?"":"field-redirector-element")},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{disabled:!p,checked:i.anonymize_ip,onChange:function(e){i.anonymize_ip=e,o("analyticsData",i)},className:"regular-text notrack",label:wp.element.createElement(React.Fragment,null,(0,le.__)("Anonymize IP addresses","seo-by-rank-math"),!p&&wp.element.createElement(se.ProBadge,{href:Z("pro","Anonymize IP")}))}))),wp.element.createElement("div",{"data-url":p?void 0:Z("pro","Localjs IP"),className:"field-row field-type-toggle ".concat(p?"":"field-redirector-element")},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{disabled:!p,checked:i.local_ga_js,onChange:function(e){i.local_ga_js=e,o("analyticsData",i)},className:"regular-text notrack",label:wp.element.createElement(React.Fragment,null,(0,le.__)("Self-Hosted Analytics JS File","seo-by-rank-math"),!p&&wp.element.createElement(se.ProBadge,{href:Z("pro","Localjs IP")}))}))),wp.element.createElement("div",{className:"field-row field-type-toggle"},wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{checked:i.exclude_loggedin,onChange:function(e){i.exclude_loggedin=e,o("analyticsData",i)},className:"regular-text notrack",label:(0,le.__)("Exclude Logged-in users","seo-by-rank-math")})))))};n.dn(fn);const yn=function(e){var t=e.data,n=e.updateData,r=rankMath.isPro;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-type-select"},wp.element.createElement("div",{className:"field-row-col"},(0,we.applyFilters)("rank_math_analytics_adsense",wp.element.createElement(se.SelectControl,{value:"",options:{"":(0,le.__)("Select Account","seo-by-rank-math")},label:(0,le.__)("Account","seo-by-rank-math"),className:"site-adsense-account notrack",disabled:!0}),t,n))),!r&&wp.element.createElement("div",{id:"rank-math-pro-cta",className:"no-margin"},wp.element.createElement("div",{className:"rank-math-cta-text"},wp.element.createElement(se.ProBadge,{href:Z("pro","AdSense Toggle")}),(0,le.__)("Google AdSense support is only available in Rank Math Pro's Advanced Analytics module.","seo-by-rank-math"))))};n.dn(yn),n.dn(bn);var hn=document.createElement("div");function bn(e){return e&&"string"==typeof e&&(e=e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),hn.innerHTML=e,e=hn.textContent,hn.textContent=""),e}function gn(e){return gn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gn(e)}function vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vn(Object(n),!0).forEach(function(t){_n(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function _n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=gn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=gn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==gn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const kn=function(e){var t=e.data,n=e.testData,r=e.setTestConnection;return wp.element.createElement("div",{className:"connect-actions"},(0,ne.map)(function(e){var t=e.reconnectGoogleUrl,n=e.isConsoleConnected,r=e.isAdsenseConnected,a=e.isAnalyticsConnected,o=(null==e?void 0:e.setup_mode)||"advanced",i=[{id:"reconnect",link:bn(t),classes:"rank-math-reconnect-google",text:(0,le.__)("Reconnect","seo-by-rank-math")},{id:"disconnect",link:"#",classes:"rank-math-disconnect-google",text:(0,le.__)("Disconnect","seo-by-rank-math")}];return"advanced"===o&&(n||r||a)&&i.push({id:"test_connections",link:"#",classes:"rank-math-test-connection-google",text:(0,le.__)("Test Connections","seo-by-rank-math")}),(0,we.applyFilters)("rank_math/analytics/connect_actions",i)}(t),function(e){var a=e.id,o=e.link,i=e.text,l=e.classes;return wp.element.createElement("a",{key:i,href:o,className:"button button-link ".concat(l),onClick:function(e){return"disconnect"===a?(e.preventDefault(),confirm((0,le.__)("Are you sure you want to disconnect Google services from your site?","seo-by-rank-math"))&&Pe("disconnect_google").done(function(){window.location.reload()}),!1):"test_connections"===a?(e.preventDefault(),function(e,t,n){var r=(0,we.applyFilters)("rank_math_test_connections",(0,ne.compact)([e.isConsoleConnected&&{id:"search-console",action:"check_console_request"},e.isAnalyticsConnected&&{id:"analytics",action:"check_analytics_request"}]));(0,ne.forEach)(r,function(e){t[e.id]="loading",n(wn({},t)),Pe(e.action,{},"post").done(function(r){if(r.success)return t[e.id]="success",void n(wn({},t));t[e.id]="failed",n(wn({},t))})})}(t,n,r),!1):void 0}},i)}))};n.dn(kn);const Sn=function(e){var t=e.reconnectUrl;return wp.element.createElement("p",{className:"warning"},wp.element.createElement("strong",{className:"warning"},(0,le.__)("Warning: ","seo-by-rank-math")),wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:(0,le.sprintf)((0,le.__)('You have not given the permission to fetch this data. Please <a href="%s">reconnect</a> with all required permissions.',"seo-by-rank-math"),t)}}))};function En(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return On(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?On(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function On(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Sn);const Pn=function(e){var t=e.data,n=e.updateData,r=En((0,Q.useState)({}),2),a=r[0],o=r[1];t.isConsoleConnected=!(0,ne.isEmpty)(t.searchConsole.profile),t.isAnalyticsConnected=!(0,ne.isEmpty)(t.analyticsData.view_id),t.isAdsenseConnected=!(0,ne.isEmpty)(t.analyticsData.adsense_id);var i=t.hasConsolePermission,l=t.hasAnalyticsPermission,s=t.hasAdsensePermission,c=[{id:"search-console",connected:rankMath.isConsoleConnected,disabled:!i,title:(0,le.__)("Search Console","seo-by-rank-math"),view:un},{id:"analytics",connected:rankMath.isAnalyticsConnected,disabled:!l,title:(0,le.__)("Analytics","seo-by-rank-math"),view:fn},{id:"adsense",connected:rankMath.isAdsenseConnected,disabled:rankMath.isPro&&!s,title:(0,le.__)("AdSense","seo-by-rank-math"),view:yn}];return wp.element.createElement(React.Fragment,null,rankMath.nextFetch&&wp.element.createElement("span",{className:"next-fetch"},rankMath.nextFetch),wp.element.createElement(kn,{data:t,testData:a,setTestConnection:o}),(0,ne.map)(c,function(e){var r=e.id,o=e.connected,i=e.disabled,l=e.title,s=e.view,c=!(0,ne.isEmpty)(a[r])&&"loading"===a[r],u=!(0,ne.isEmpty)(a[r])&&"failed"===a[r],m=At()("rank-math-box no-padding rank-math-accordion rank-math-connect-".concat(r),{connected:o,disconnected:!o,disabled:i}),p=At()("rank-math-connection-status",{"rank-math-connection-status-success":o&&!u,"rank-math-connection-status-error":!o||u}),d=o?(0,le.__)("Connected","seo-by-rank-math"):(0,le.__)("Not Connected","seo-by-rank-math");return wp.element.createElement("div",{key:r,className:m,tabIndex:0},wp.element.createElement("header",null,wp.element.createElement("h3",null,wp.element.createElement("span",{className:"rank-math-connection-status-wrap"},c?wp.element.createElement("svg",{className:"rank-math-spinner",viewBox:"0 0 100 100",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",role:"presentation",focusable:"false"},wp.element.createElement("circle",{cx:"50",cy:"50",r:"50","vector-effect":"non-scaling-stroke"}),wp.element.createElement("path",{d:"m 50 0 a 50 50 0 0 1 50 50","vector-effect":"non-scaling-stroke"})):wp.element.createElement("span",{className:p,title:u?(0,le.__)("Some permissions are missing, please reconnect","seo-by-rank-math"):d})),l)),wp.element.createElement("div",{className:"rank-math-accordion-content rank-math-".concat(r,"-content")},i&&wp.element.createElement(Sn,{reconnectUrl:t.reconnectGoogleUrl}),wp.element.createElement(s,{data:t,updateData:n})))}))};n.dn(Pn);const jn=function(e){var t=e.data,n=e.updateData;if(t.showEmailReports){var r=rankMath.isSettingsPage?"h3":"h1";return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row email-reports-header ".concat(rankMath.isSettingsPage?"":"text-center")},(0,Q.createElement)(r,null,(0,le.__)("Email Reports","seo-by-rank-math")),rankMath.isSettingsPage?wp.element.createElement("div",null,(0,le.__)("Receive periodic SEO Performance reports via email. Once enabled and options are saved, you can see","seo-by-rank-math")," ",wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:"".concat(rankMath.homeUrl,"/?rank_math_analytics_report_preview=1")},(0,le.__)("the preview here","seo-by-rank-math"))):wp.element.createElement("div",null,(0,le.__)("Receive Analytics reports periodically in email.","seo-by-rank-math")," ",wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:Z("seo-email-reporting","SW Analytics Step")},(0,le.__)("Learn more about Email Reports.","seo-by-rank-math")))),wp.element.createElement("div",{className:"field-row field-type-toggle field-id-console-email-reports"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_email_reports"},(0,le.__)("Email Reports","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{id:"console_email_reports",checked:t.console_email_reports,onChange:function(e){n("console_email_reports",e)}}),rankMath.isSettingsPage&&wp.element.createElement("div",{className:"field-description"},(0,le.__)("Turn on email reports.","seo-by-rank-math")))),rankMath.isSettingsPage&&t.console_email_reports&&wp.element.createElement("div",{className:"field-row field-type-text field-id-console_email_frequency"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_email_frequency"},(0,le.__)("Email Frequency","seo-by-rank-math"),!rankMath.isPro&&wp.element.createElement("span",{className:"rank-math-pro-badge"},wp.element.createElement("a",{href:Z("seo-email-reporting","Email Frequency Toggle"),target:"_blank",rel:"noopener noreferrer"},(0,le.__)("PRO","seo-by-rank-math"))))),wp.element.createElement("div",{className:"field-td"},!rankMath.isPro&&wp.element.createElement(se.SelectControl,{value:"",options:{monthly:(0,le.__)("Every 30 days","seo-by-rank-math")},label:"",disabled:!0}),(0,we.applyFilters)("rank_math_analytics_console_email_frequency","",t,n),wp.element.createElement("div",{className:"field-description"},(0,le.__)("Email report frequency.","seo-by-rank-math")))),(0,we.applyFilters)("rank_math_analytics_options_email_report","",t,n))}};function Cn(e){return Cn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cn(e)}function An(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Nn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?An(Object(n),!0).forEach(function(t){xn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):An(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function xn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Cn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Cn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Cn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Dn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Tn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Tn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Tn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(jn);const Mn=function(e){var t,n,r,a=e.data,o=e.updateData,i=Dn((0,Q.useState)({days:null===(t=rankMath)||void 0===t||null===(t=t.dbInfo)||void 0===t?void 0:t.days,rows:null===(n=rankMath)||void 0===n||null===(n=n.dbInfo)||void 0===n?void 0:n.rows,size:null===(r=rankMath)||void 0===r||null===(r=r.dbInfo)||void 0===r?void 0:r.size,isDeleting:!1,isUpdating:!1,isCanceling:!1,updateBtnText:rankMath.isFetching?(0,le.__)("Fetching in Progress","seo-by-rank-math"):(0,le.__)("Update data manually","seo-by-rank-math"),isFetching:rankMath.isFetching||!1}),2),l=i[0],s=i[1],c=l.isDeleting,u=l.days,m=l.rows,p=l.size,d=l.isUpdating,f=l.isCanceling,y=l.updateBtnText,h=l.isFetching,b=a.isSiteConnected,g=a.isAuthorized,v=a.searchConsole,w=a.allServices,_=a.console_caching_control,k=a.analytics_stats;if(!b)return wp.element.createElement(cn,a);if(!g)return wp.element.createElement(sn,a);var S=(null==w?void 0:w.accounts)||[];(0,Q.useEffect)(function(){(0,ne.isEmpty)(S)&&Pe("google_check_all_services").done(function(e){v.sites=e.sites,e.inSearchConsole?e.isVerified||Pe("verify_site_console"):Pe("add_site_console").done(function(e){v.sites=e.sites}),v.profile=e.sites[e.homeUrl],o("searchConsole",v),(0,ne.isEmpty)(e.adsenseAccounts)||(w.adsenseAccounts=e.adsenseAccounts||{},o("allServices",w)),(0,ne.isEmpty)(e.accounts)||(w.accounts=e.accounts,o("allServices",w))})},[]);return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-wizard",className:"field-metabox field-list"},wp.element.createElement(Pn,{data:a,updateData:o}),wp.element.createElement(se.PrivacyBox,{className:"width-100"}),rankMath.isSettingsPage&&wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row rank-math-advanced-option field-id-console_caching_control field-type-text"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"console_caching_control"},(0,le.__)("Analytics Database","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.TextControl,{type:"number",autoCorrect:"off",autoComplete:"off",autoCapitalize:"none",variant:"regular-text",spellCheck:!1,value:_,onBlur:function(e){var t,n=(null==e||null===(t=e.target)||void 0===t||null===(t=t.value)||void 0===t?void 0:t.trim())||"",r=parseInt(n);isNaN(r)||o("console_caching_control",r)},onChange:function(e){o("console_caching_control",e)},placeholder:(0,le.__)("Enter number of days. E.g. 90","seo-by-rank-math")}),wp.element.createElement("div",{className:"field-description",dangerouslySetInnerHTML:{__html:rankMath.fields.console_caching_control.description}}),wp.element.createElement("br",null),wp.element.createElement(se.Button,{className:"button-small",onClick:function(){var e=_||90,t=-1===e?rankMath.confirmClearImportedData:rankMath.confirmClear90DaysCache;window.confirm(t+" "+rankMath.confirmAction)&&(c||(s(function(e){return Nn(Nn({},e),{},{isDeleting:!0})}),Pe("analytics_delete_cache",{days:e},"GET").done(function(e){e&&e.success&&s(function(t){return Nn(Nn({},t),{},{isDeleting:!1,days:null==e?void 0:e.days,rows:null==e?void 0:e.rows,size:null==e?void 0:e.size})})})))},disabled:c},c?(0,le.__)("Deleting dataâ€¦","seo-by-rank-math"):(0,le.__)("Delete data","seo-by-rank-math")),"Â Â ",wp.element.createElement(se.Button,{className:"button-small",onClick:function(){if(!d){var e=_||90;s(function(e){return Nn(Nn({},e),{},{isUpdating:!0,updateBtnText:(0,le.__)("Starting updateâ€¦","seo-by-rank-math")})}),Pe("analytic_start_fetching",{days:e},"GET").done(function(e){e&&e.success?s(function(e){return Nn(Nn({},e),{},{isUpdating:!1,updateBtnText:(0,le.__)("Fetching in Progress","seo-by-rank-math"),isFetching:!0})}):setTimeout(function(){s(function(e){return Nn(Nn({},e),{},{updateBtnText:(0,le.__)("Update data manually","seo-by-rank-math")})})},2e3)})}},disabled:d||h},y),"Â Â ",wp.element.createElement(se.Button,{className:"button-small is-destructive",onClick:function(){f||(s(function(e){return Nn(Nn({},e),{},{isCanceling:!0})}),Pe("analytic_cancel_fetching",{},"GET").done(function(e){s(function(e){return Nn(Nn({},e),{},{isCanceling:!1})}),e&&e.success&&window.location.reload()}))},disabled:!h||f},(0,le.__)("Cancel Fetch","seo-by-rank-math")),wp.element.createElement("br",null),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-calendar-alt"})," Cached Days: ",wp.element.createElement("strong",null,u)),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-editor-ul"})," Data Rows: ",wp.element.createElement("strong",null,m)),wp.element.createElement("div",{className:"rank-math-console-db-info"},wp.element.createElement("span",{className:"dashicons dashicons-editor-code"})," Size: ",wp.element.createElement("strong",null,p)))),(0,we.applyFilters)("rank_math_settings_general_analytics_stats","",a,o),wp.element.createElement("div",{className:"field-row field-type-toggle field-id-analytics_stats"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"analytics_stats"},(0,le.__)("Frontend Stats Bar","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(se.ToggleControl,{id:"analytics_stats",checked:k,onChange:function(e){o("analytics_stats",e)}}),wp.element.createElement("div",{className:"field-description"},(0,le.__)("Enable this option to show Analytics Stats on the front just after the admin bar.","seo-by-rank-math"))))),wp.element.createElement(jn,{data:a,updateData:o})))};function In(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Rn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Rn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Mn);const Un=function(e){var t=(0,ne.map)((0,ne.entries)(e.postTypes),function(e){var t=In(e,2);return{id:t[0],label:t[1]}}),n=(0,ne.map)((0,ne.entries)(e.taxonomies),function(e){var t=In(e,2);return{id:t[0],label:t[1]}});return(0,we.applyFilters)("rank_math_setup_wizard_sitemap_fields",[{id:"sitemap",type:"toggle",name:(0,le.__)("Sitemaps","seo-by-rank-math"),desc:(0,le.__)("XML Sitemaps help search engines index your website&#039;s content more effectively.","seo-by-rank-math")},{id:"include_images",type:"toggle",name:(0,le.__)("Include Images","seo-by-rank-math"),desc:(0,le.__)("Include reference to images from the post content in sitemaps. This helps search engines index your images better.","seo-by-rank-math"),classes:"features-child",dep:{sitemap:!0}},{id:"sitemap_post_types",type:"multicheck",name:(0,le.__)("Public Post Types","seo-by-rank-math"),desc:(0,le.__)("Select post types to enable SEO options for them and include them in the sitemap.","seo-by-rank-math"),options:t,classes:"features-child field-multicheck-inline multicheck-checked",dep:{sitemap:!0},toggleAll:!0},{id:"sitemap_taxonomies",type:"multicheck",name:(0,le.__)("Public Taxonomies","seo-by-rank-math"),desc:(0,le.__)("Select taxonomies to enable SEO options for them and include them in the sitemap.","seo-by-rank-math"),options:n,classes:"features-child field-multicheck-inline multicheck-checked",dep:{sitemap:!0},toggleAll:!0}],t)};n.dn(Un);const Fn=function(e){var t=e.data,n=e.updateData,r=(0,ne.map)(Un(t),function(e){return e.value=t[e.id],e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(Xt,{fields:r,settings:t})};n.dn(Fn);const Bn=function(){return[{id:"noindex_empty_taxonomies",type:"toggle",name:(0,le.__)("Noindex Empty Category and Tag Archives","seo-by-rank-math"),desc:(0,le.__)("Setting empty archives to <code>noindex</code> is useful for avoiding indexation of thin content pages and dilution of page rank. As soon as a post is added, the page is updated to <code>index</code>.","seo-by-rank-math"),classes:"rank-math-advanced-option"},{id:"nofollow_external_links",type:"toggle",name:(0,le.__)("Nofollow External Links","seo-by-rank-math"),desc:(0,le.__)('Automatically add <code>rel="nofollow"</code> attribute for external links appearing in your posts, pages, and other post types. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.',"seo-by-rank-math"),classes:"rank-math-advanced-option"},{id:"new_window_external_links",type:"toggle",name:(0,le.__)("Open External Links in New Tab/Window","seo-by-rank-math"),desc:(0,le.__)('Automatically add a <code>target="_blank"</code> attribute to external links appearing in your posts, pages, and other post types. The attributes are applied when the content is displayed, which does not change the stored content.',"seo-by-rank-math")}]};n.dn(Bn);const Wn=function(e){var t=e.data,n=e.updateData,r=(0,ne.map)(Bn(),function(e){return e.value=t[e.id],e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(Xt,{fields:r,settings:t})};n.dn(Wn);const zn=wp.url;function Ln(e){return Ln="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ln(e)}function Gn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Hn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Gn(Object(n),!0).forEach(function(t){$n(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function $n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Ln(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ln(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ln(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Vn=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e=e?"rank-math-"+e:"rank-math",t=Hn(Hn({},t),{},{page:e}),(0,zn.addQueryArgs)(rankMath.adminurl,t)};n.dn(Vn);var Yn=[rankMath.isPro?{icon:"video-alt3",href:Z("yt-link","SW Ready Step Upgrade"),text:(0,le.__)("Subscribe to Our YouTube Channel","seo-by-rank-math")}:{icon:"star-filled pro",href:Z("pro","SW Ready Step Upgrade"),text:wp.element.createElement("strong",{className:"pro-label"},(0,le.__)("Know more about the PRO version","seo-by-rank-math"))},{icon:"facebook",href:Z("fb-group","SW Ready Step Upgrade"),text:(0,le.__)("Join FREE Facebook Group","seo-by-rank-math")},{icon:"welcome-learn-more",href:Z("kb-seo-suite","SW Ready Step KB"),text:(0,le.__)("Rank Math Knowledge Base","seo-by-rank-math")},{icon:"sos",href:Z("support","SW Ready Step Support"),text:(0,le.__)("Get 24x7 Support","seo-by-rank-math")}];const qn=function(e){var t=e.data,n=e.skipStep,r=t.scoreImg,a=t.dashboardUrl,o=t.isWhitelabel,i="advanced"===t.setup_mode;return o?wp.element.createElement(React.Fragment,null,wp.element.createElement("p",null,(0,le.__)("Your site is now optimized","seo-by-rank-math")),wp.element.createElement("footer",{className:"form-footer wp-core-ui rank-math-ui"},wp.element.createElement(se.Button,{href:Vn("options-general"),variant:"primary"},(0,le.__)("Proceed to Settings","seo-by-rank-math")))):wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"wizard-next-steps wp-clearfix"},wp.element.createElement("div",{className:"score-100"},wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:Z("score-100","SW Ready Score Image")},wp.element.createElement("img",{src:r,alt:(0,le.__)("Score 100","seo-by-rank-math")}))),wp.element.createElement("div",{className:"learn-more"},wp.element.createElement("h2",null,(0,le.__)("Learn more","seo-by-rank-math")),wp.element.createElement("ul",null,(0,ne.map)(Yn,function(e){var t=e.icon,n=e.href,r=e.text;return wp.element.createElement("li",{key:r},wp.element.createElement("span",{className:"dashicons dashicons-".concat(t)}),wp.element.createElement("a",{href:n,target:"_blank",rel:"noreferrer"},r))})))),wp.element.createElement("footer",{className:"form-footer wp-core-ui rank-math-ui"},wp.element.createElement(se.Button,{variant:i?"secondary":"primary",className:i?"rank-math-return-dashboard":"rank-math-advanced-option",href:a},(0,le.__)("Return to dashboard","seo-by-rank-math")),wp.element.createElement(se.Button,{variant:"secondary",href:Vn("",{view:"help"})},(0,le.__)("Proceed to Help Page","seo-by-rank-math")),i&&wp.element.createElement(se.Button,{variant:"primary",className:"rank-math-advanced-option",onClick:n},(0,le.__)("Setup Advanced Options","seo-by-rank-math"))))};n.dn(qn);const Kn=function(e){var t=e.data,n=e.updateData,r=e.saveData,a=e.skipStep,o=t.isWhitelabel;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",null,wp.element.createElement("h1",null,wp.element.createElement("i",{className:"dashicons dashicons-yes"})," ",(0,le.__)("Your site is ready! ","seo-by-rank-math"),wp.element.createElement(se.SocialShare,{isWhitelabel:o}))),wp.element.createElement("div",{className:"rank-math-additional-options"},wp.element.createElement("div",{className:"rank-math-auto-update-wrapper"},wp.element.createElement("h3",null,(0,le.__)("Enable auto update of the plugin","seo-by-rank-math")),wp.element.createElement(se.ToggleControl,{checked:t.enable_auto_update,onChange:function(e){n("enable_auto_update",e),r()}}))),wp.element.createElement("br",{className:"clear"}),wp.element.createElement(qn,{data:t,skipStep:a}))};n.dn(Kn);const Jn=function(e){var t=e.roles,n=e.capabilities,r=(0,ne.map)((0,ne.keys)(n),function(e){return{id:e,label:n[e]}}),a=[{id:"role_manager",type:"toggle",name:(0,le.__)("Role Manager","seo-by-rank-math"),desc:(0,le.__)("The Role Manager allows you to use WordPress roles to control which of your site users can have edit or view access to Rank Math's settings.","seo-by-rank-math")}];return(0,ne.forEach)((0,ne.keys)(t),function(o){var i,l=(null===(i=e[o])||void 0===i?void 0:i.length)===(0,ne.keys)(n).length;a.push({options:r,id:o,name:t[o],type:"multicheck_inline",toggleAll:!0,dep:{role_manager:!0},classes:"field-big-labels ".concat(l?"multicheck-checked":"")})}),a};n.dn(Jn);const Xn=function(e){var t=e.data,n=e.updateData,r=(0,ne.map)(Jn(t),function(e){return e.value=t[e.id],e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(Xt,{fields:r,settings:t})};n.dn(Xn);const Qn=function(){return[{id:"404_monitor_title",type:"raw",content:wp.element.createElement("div",{key:"monitor-header",className:"field-row monitor-header text-center"},wp.element.createElement("h1",null,(0,le.__)("404 Monitor","seo-by-rank-math")),wp.element.createElement("div",{className:"monitor-desc text-center"},(0,le.__)("Set default values for the 404 error monitor here.","seo-by-rank-math")))},{id:"404-monitor",type:"toggle",name:(0,le.__)("404 Monitor","seo-by-rank-math"),desc:(0,le.__)("The 404 monitor will let you see if visitors or search engines bump into any <code>404 Not Found</code> error while browsing your site.","seo-by-rank-math")},{id:"redirection_title",type:"raw",content:wp.element.createElement("div",{key:"redirections-header",className:"field-row redirections-header text-center",style:{borderTop:0}},wp.element.createElement("br",null),wp.element.createElement("h1",null,(0,le.__)("Redirections","seo-by-rank-math")),wp.element.createElement("div",{className:"redirections-desc text-center"},(0,le.__)("Set default values for the redirection module from here. ","seo-by-rank-math"),wp.element.createElement("a",{target:"_blank",rel:"noreferrer",href:Z("redirections","SW Redirection Step")},(0,le.__)("Learn more about Redirections.","seo-by-rank-math"))))},{id:"redirections",type:"toggle",name:(0,le.__)("Redirections","seo-by-rank-math"),desc:(0,le.__)("Set up temporary or permanent redirections. Combined with the 404 monitor, you can easily redirect faulty URLs on your site, or add custom redirections.","seo-by-rank-math")}]};n.dn(Qn);const Zn=function(e){var t=e.data,n=e.updateData,r=(0,ne.map)(Qn(),function(e){return e.value=t[e.id],e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(Xt,{fields:r,settings:t})};n.dn(Zn);const er=function(e,t){var n="pt_".concat(e,"_default_rich_snippet"),r=(0,le.sprintf)((0,le.__)("Schema Type for %s","seo-by-rank-math"),(0,ne.capitalize)(e)+"s");return"product"===e?{id:n,type:"radio_inline",name:r,desc:(0,le.__)("Default rich snippet selected when creating a new product.","seo-by-rank-math"),options:{off:(0,le.__)("None","seo-by-rank-math"),product:(0,le.__)("Product","seo-by-rank-math")}}:{id:n,type:2===(0,ne.values)(t).length?"radio_inline":"select_search",name:r,desc:(0,le.__)("Default rich snippet selected when creating a new post of this type.","seo-by-rank-math"),options:t,dep:{rich_snippet:!0}}};function tr(e){return tr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tr(e)}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=tr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=tr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==tr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(er);const rr=function(e){var t=[{id:"rich_snippet",type:"toggle",name:(0,le.__)("Schema Type","seo-by-rank-math"),desc:(0,le.__)("Use automatic structured data to mark up content, to help Google better understand your content's context for display in Search. You can set different defaults for your posts here.","seo-by-rank-math")}];return(0,ne.forEach)((0,ne.values)(e.accessiblePostTypes),function(n){if("attachment"!==n){t.push(er(n,e.schemaTypes));var r=nr({relation:"and",rich_snippet:!0},"pt_".concat(n,"_default_rich_snippet"),"article"),a="person"===e.knowledgegraph_type?'<div class="notice notice-warning inline rank-math-notice" style="margin-left:0;color:#242628;"><p>'.concat((0,le.sprintf)((0,le.__)('Google does not allow Person as the Publisher for articles. Organization will be used instead. You can read more about this <a href="%s" target="_blank">here</a>.',"seo-by-rank-math"),Z("google-article-schema")),"</p></div>"):void 0;t.push({id:"pt_".concat(n,"_default_article_type"),type:"radio_inline",name:(0,le.__)("Article Type","seo-by-rank-math"),options:{Article:(0,le.__)("Article","seo-by-rank-math"),BlogPosting:(0,le.__)("Blog Post","seo-by-rank-math"),NewsArticle:(0,le.__)("News Article","seo-by-rank-math")},dep:r,desc:a})}}),t};n.dn(rr);const ar=function(e){var t=e.data,n=e.updateData,r=(0,ne.map)(rr(t),function(e){return e.value=t[e.id],e.onChange=function(t){return n(e.id,t)},e});return wp.element.createElement(Xt,{fields:r,settings:t})};function or(e){return or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},or(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach(function(t){sr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=or(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=or(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==or(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(ar);const cr=function(e,t){var n=null==t?void 0:t.isConfigured,r=(0,ne.isUndefined)(t)||"advanced"===(null==t?void 0:t.setup_mode),a=!(0,ne.isUndefined)(t)&&(null==t?void 0:t.addImport),o=[{name:"compatibility",slug:"requirements",title:(0,le.__)("Getting Started","seo-by-rank-math"),view:Be},{name:"import",title:(0,le.__)("Import","seo-by-rank-math"),heading:(0,le.__)("Import SEO Settings","seo-by-rank-math"),description:(0,le.__)("You can import SEO settings from the following plugins:","seo-by-rank-math"),view:dt,isDisabled:!a},{name:"yoursite",title:(0,le.__)("Your Site","seo-by-rank-math"),heading:(0,le.sprintf)((0,le.__)("Your Website: %s","seo-by-rank-math"),rankMath.blogName),description:(0,le.__)("Let us know a few things about your siteâ€¦","seo-by-rank-math"),view:ln},{name:"analytics",title:(0,le.__)("Analytics","seo-by-rank-math"),heading:(0,le.__)("Connect Google&trade; Services","seo-by-rank-math"),description:(0,le.__)("Rank Math automates everything, use below button to connect your site with Google Search Console and Google Analytics. It will verify your site and submit sitemaps automatically. ","seo-by-rank-math"),link:Z("help-analytics","SW Analytics Step Description"),linkText:(0,le.__)("Read more about it here.","seo-by-rank-math"),view:Mn},{name:"sitemaps",title:(0,le.__)("Sitemaps","seo-by-rank-math"),heading:(0,le.__)("Sitemap","seo-by-rank-math"),description:(0,le.__)("Choose your Sitemap configuration and select which type of posts or pages you want to include in your Sitemaps.","seo-by-rank-math"),link:Z("configure-sitemaps","SW Sitemap Step"),view:Fn,isDisabled:!r},{name:"optimization",title:(0,le.__)("Optimization","seo-by-rank-math"),heading:(0,le.__)("SEO Tweaks","seo-by-rank-math"),description:(0,le.__)("Automate some of your SEO tasks like making external links nofollow, redirecting attachment pages, etc.","seo-by-rank-math"),link:Z("seo-tweaks","SW Optimization Step"),view:Wn,isDisabled:!r},{name:"ready",title:(0,le.__)("Ready","seo-by-rank-math"),view:Kn},{name:"ready1",title:(0,le.__)("Advanced Options","seo-by-rank-math")},{name:"role",slug:"rolemanager",title:(0,le.__)("Role Manager","seo-by-rank-math"),heading:(0,le.__)("Role Manager","seo-by-rank-math"),description:(0,le.__)("Set capabilities here.","seo-by-rank-math"),view:Xn},{name:"redirection",slug:"404redirection",title:(0,le.__)("404 + Redirection","seo-by-rank-math"),view:Zn},{name:"schema-markup",title:(0,le.__)("Schema Markup","seo-by-rank-math"),heading:(0,le.__)("Schema Markup","seo-by-rank-math"),description:(0,le.__)("Schema adds metadata to your website, resulting in rich search results and more traffic.","seo-by-rank-math"),view:ar}],i=["ready1","role","redirection","schema-markup"],l=(0,ne.findIndex)(o,function(t){return t.name===e}),s=(0,ne.includes)(i,e);return(0,ne.compact)((0,ne.map)(o,function(e,t){return e.isDisabled||!s&&(0,ne.includes)(i,e.name)||s&&!(0,ne.includes)(i,e.name)?null:(e.disabled=!n,t<l?lr(lr({},e),{},{className:"is-done"}):e)}))};function ur(e){return ur="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ur(e)}function mr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function pr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mr(Object(n),!0).forEach(function(t){dr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function dr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ur(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ur(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ur(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return yr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?yr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(cr);const hr=function(){var e=fr(X({step:"compatibility"}),2),t=e[0],n=e[1],r=B(),a=t.get("step"),o=(0,te.useSelect)(function(e){return e("rank-math-setup-wizard").getStepData(a)}),i=(0,te.useSelect)(function(e){return e("rank-math-setup-wizard").getStepData("compatibility")}),l=(null==i?void 0:i.setup_mode)||(null==o?void 0:o.setup_mode),s=l?pr(pr({},o),{},{setup_mode:l}):o,c={steps:cr(a,s),searchParams:t,setSearchParams:n,navigate:r};return wp.element.createElement(React.Fragment,null,wp.element.createElement(ge,c),wp.element.createElement(ve,{searchParams:t}))};function br(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}function gr(e){return gr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gr(e)}function vr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=gr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=gr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==gr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _r(e,t){return br(e,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vr(Object(n),!0).forEach(function(t){wr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},t))}function kr(e){return br("currentStep",e)}function Sr(e){return Sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sr(e)}function Er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Or(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Er(Object(n),!0).forEach(function(t){Pr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Er(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Pr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Sr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Sr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Sr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(hr);var jr={currentStep:"getting-started"};function Cr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:jr,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?Or(Or({},e),{},Pr({},t.key,t.value)):e}function Ar(e,t){return e.appUi[t]}var Nr;(0,te.register)((0,te.createReduxStore)("rank-math-setup-wizard",{reducer:(0,te.combineReducers)(t),selectors:r,actions:e}));Nr=function(){(0,Q.createRoot)(document.getElementById("rank-math-wizard-wrapper")).render(wp.element.createElement(React.Fragment,null,wp.element.createElement(ee,null),wp.element.createElement(q,null,wp.element.createElement(hr,null))))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",Nr):Nr())}()}();PK     ’ŠU]¨`ÐAM  AM  "  assets/admin/js/sitemapSettings.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[919],{5124:function(e,t,a){a.d(t,{A:function(){return r}});var n=a(7562);const r=(0,n.select)("rank-math-settings").getData()},2551:function(e,t,a){a.d(t,{A:function(){return l}});var n=a(4011);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function i(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==r(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e=e?"rank-math-"+e:"rank-math",t=s(s({},t),{},{page:e}),(0,n.addQueryArgs)(rankMath.adminurl,t)};a.dn(l)},4430:function(e,t,a){a.r(t),a.d(t,{default:function(){return se}});var n=a(2470),r=a(8809);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var s=rankMath,i=s.sitemapUrl,l=s.isWPMLActive;const m=[{type:"notice",status:"info",children:wp.element.createElement(React.Fragment,null,(0,n.__)("Your sitemap index can be found here: ","seo-by-rank-math"),wp.element.createElement("a",{href:i,target:"_blank",rel:"noreferrer"},i))}].concat(function(e){if(Array.isArray(e))return o(e)}(c=l?[{id:"multilingual_sitemap_notice",type:"notice",status:"warning",children:wp.element.createElement(React.Fragment,null,(0,n.__)("Rank Math generates the default Sitemaps only and WPML takes care of the rest. When a search engine bot visits any post/page, it is shown hreflang tag that helps it crawl the translated pages. This is one of the recommended methods by Google. Please ","seo-by-rank-math"),wp.element.createElement("a",{href:"https://support.google.com/webmasters/answer/189077?hl=en",target:"blank"},(0,n.__)("read here","seo-by-rank-math")))}]:[])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{id:"items_per_page",type:"text",name:(0,n.__)("Links Per Sitemap","seo-by-rank-math"),desc:(0,n.__)("Max number of links on each sitemap page.","seo-by-rank-math"),attributes:{type:"number"},default:"200",classes:"rank-math-advanced-option"},{id:"include_images",type:"toggle",name:(0,n.__)("Images in Sitemaps","seo-by-rank-math"),desc:(0,n.__)("Include reference to images from the post content in sitemaps. This helps search engines index the important images on your pages.","seo-by-rank-math"),default:!0},{id:"include_featured_image",type:"toggle",name:(0,n.__)("Include Featured Images","seo-by-rank-math"),desc:(0,n.__)("Include the Featured Image too, even if it does not appear directly in the post content.","seo-by-rank-math"),default:!1,dep:{include_images:!0}},{id:"exclude_posts",type:"text",name:(0,n.__)("Exclude Posts","seo-by-rank-math"),desc:(0,n.__)("Enter post IDs of posts you want to exclude from the sitemap, separated by commas. This option **applies** to all posts types including posts, pages, and custom post types.","seo-by-rank-math"),classes:"rank-math-advanced-option"},{id:"exclude_terms",type:"text",name:(0,n.__)("Exclude Terms","seo-by-rank-math"),desc:(0,n.__)("Add term IDs, separated by comma. This option is applied for all taxonomies.","seo-by-rank-math"),classes:"rank-math-advanced-option"}]);var c;const p={name:"general",header:{title:(0,n.__)("General","seo-by-rank-math"),description:(0,n.__)("This tab contains General settings related to the XML sitemaps.","seo-by-rank-math"),link:(0,r.A)("configure-sitemaps","Options Panel Sitemap General")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-settings"}),(0,n.__)("General","seo-by-rank-math")),fields:m};function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function h(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function d(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?h(Object(a),!0).forEach(function(t){y(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):h(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function y(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var b={html_sitemap:!0};const f=[{id:"html_sitemap",type:"toggle",name:(0,n.__)("HTML Sitemap","seo-by-rank-math"),desc:(0,n.__)("Enable the HTML sitemap.","seo-by-rank-math"),default:!1},{id:"html_sitemap_display",type:"toggleGroup",name:(0,n.__)("Display Format","seo-by-rank-math"),desc:(0,n.__)("Choose how you want to display the HTML sitemap.","seo-by-rank-math"),options:{shortcode:(0,n.__)("Shortcode","seo-by-rank-math"),page:(0,n.__)("Page","seo-by-rank-math")},default:"shortcode",dep:b},{id:"html_sitemap_shortcode",type:"text",name:(0,n.__)("Shortcode","seo-by-rank-math"),desc:(0,n.__)("Use this shortcode to display the HTML sitemap.","seo-by-rank-math"),default:"[rank_math_html_sitemap]",classes:"rank-math-code",dep:d(d({},b),{},{html_sitemap_display:"shortcode",relation:"and"}),disabled:!0},{id:"html_sitemap_page",type:"searchPage",name:(0,n.__)("Page","seo-by-rank-math"),desc:(0,n.__)("Select the page to display the HTML sitemap. Once the settings are saved, the sitemap will be displayed below the content of the selected page.","seo-by-rank-math"),selectedPage:rankMath.htmlSitemapPage,dep:d(d({},b),{},{html_sitemap_display:"page",relation:"and"})},{id:"html_sitemap_sort",type:"select",name:(0,n.__)("Sort By","seo-by-rank-math"),desc:(0,n.__)("Choose how you want to sort the items in the HTML sitemap.","seo-by-rank-math"),options:{published:(0,n.__)("Published Date","seo-by-rank-math"),modified:(0,n.__)("Modified Date","seo-by-rank-math"),alphabetical:(0,n.__)("Alphabetical","seo-by-rank-math"),post_id:(0,n.__)("Post ID","seo-by-rank-math")},default:"published",dep:b},{id:"html_sitemap_show_dates",type:"toggle",name:(0,n.__)("Show Dates","seo-by-rank-math"),desc:(0,n.__)("Show published dates for each post & page.","seo-by-rank-math"),default:!0,dep:b},{id:"html_sitemap_seo_titles",type:"toggleGroup",name:(0,n.__)("Item Titles","seo-by-rank-math"),desc:(0,n.__)("Show the post/term titles, or the SEO titles in the HTML sitemap.","seo-by-rank-math"),options:{titles:(0,n.__)("Item Titles","seo-by-rank-math"),seo_titles:(0,n.__)("SEO Titles","seo-by-rank-math")},default:"titles",dep:b}],_={name:"html_sitemap",header:{title:(0,n.__)("HTML Sitemap","seo-by-rank-math"),description:(0,n.__)("This tab contains settings related to the HTML sitemap.","seo-by-rank-math"),link:(0,r.A)("sitemap-general","Options Panel Sitemap HTML Tab")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-sitemap"}),(0,n.__)("HTML Sitemap","seo-by-rank-math")),fields:f};var g=a(8110);function k(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,o,s,i=[],l=!0,m=!1;try{if(o=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=o.call(a)).done)&&(i.push(n.value),i.length!==t);l=!0);}catch(e){m=!0,r=e}finally{try{if(!l&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(m)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?v(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var S=rankMath,w=S.roles,O=S.defaultRoles,P=S.data,T={authors_sitemap:!0,authors_html_sitemap:!0},j=(0,g.map)((0,g.entries)(w),function(e){var t=k(e,2);return{id:t[0],label:t[1]}});const E=[{id:"authors_sitemap",type:"toggle",name:(0,n.__)("Include in Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include author archives in the XML sitemap.","seo-by-rank-math"),default:!0},{id:"authors_html_sitemap",type:"toggle",name:(0,n.__)("Include in HTML Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include author archives in the HTML sitemap if it's enabled.","seo-by-rank-math"),classes:"rank-math-html-sitemap ".concat(P.html_sitemap?"":"hidden"),default:!0},{id:"include_authors_without_posts",type:"toggle",name:(0,n.__)("Include Authors Without Posts","seo-by-rank-math"),desc:(0,n.__)("Enable this option to include authors in the sitemap even if they have not created any posts. This ensures all author archives are listed, regardless of content availability.","seo-by-rank-math"),classes:"rank-math-advanced-option",default:!1,dep:T},{id:"exclude_roles",type:"checkboxlist",name:(0,n.__)("Exclude User Roles","seo-by-rank-math"),desc:(0,n.__)("Selected roles will be excluded from the XML &amp; HTML sitemaps.","seo-by-rank-math"),options:j,default:O,dep:T},{id:"exclude_users",type:"text",name:(0,n.__)("Exclude Users","seo-by-rank-math"),desc:(0,n.__)("Add user IDs, separated by commas, to exclude them from the sitemap.","seo-by-rank-math"),dep:T}],M={name:"authors",header:{title:(0,n.__)("Authors","seo-by-rank-math"),description:(0,n.__)("Set the sitemap options for author archive pages.","seo-by-rank-math"),link:(0,r.A)("configure-sitemaps","Options Panel Sitemap Authors Tab","#authors")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-users"}),(0,n.__)("Authors","seo-by-rank-math")),fields:E};var A=a(1386),I=a(2551),L=a(5124);function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function D(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=x(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=x(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==x(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const H=function(e){var t=[],a="pt_".concat(e,"_"),r=rankMath[e].sitemapUrl,o=!1,s="attachment"===e;return t.push({type:"notice",status:"info",children:wp.element.createElement(A.RawHTML,null,s?(0,n.__)("Please note that this will add the attachment page URLs to the sitemap, not direct image URLs.","seo-by-rank-math"):(0,n.sprintf)((0,n.__)("Sitemap URL: %s","seo-by-rank-math"),'<a href="'.concat(r,'" target="_blank">').concat(r,"</a>")))}),s&&rankMath.isRedirectAttachment&&(o=!0,t.push({id:"attachment_redirect_urls_notice",type:"notice",status:"warning",children:wp.element.createElement(A.RawHTML,null,(0,n.sprintf)((0,n.__)("To configure meta tags for your media attachment pages, you need to first %s to parent.","seo-by-rank-math"),'<a href="'.concat((0,I.A)("options-general"),'">').concat((0,n.__)("disable redirect attachments","seo-by-rank-math"),"</a>")))})),t.push({id:a+"sitemap",type:"toggle",name:(0,n.__)("Include in Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include this post type in the XML sitemap.","seo-by-rank-math"),default:!s,disabled:o}),t.push({id:a+"html_sitemap",type:"toggle",name:(0,n.__)("Include in HTML Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include this post type in the HTML sitemap if it's enabled.","seo-by-rank-math"),classes:"rank-math-html-sitemap ".concat(L.A.html_sitemap?"":"hidden"),default:!s,disabled:o}),s||t.push({id:a+"image_customfields",type:"textarea",name:(0,n.__)("Image Custom Fields","seo-by-rank-math"),desc:(0,n.__)("Insert custom field (post meta) names which contain image URLs to include them in the sitemaps. Add one per line.","seo-by-rank-math"),dep:D({},a+"sitemap",!0),classes:"rank-math-advanced-option"}),t};a.dn(H);var R=rankMath.choices,N=R.accessiblePostTypes,C=R.postTypes,U=R.choicesPostTypeIcons;const F=(G=U,X={attachment:(0,n.__)("attachments","seo-by-rank-math"),product:(0,n.__)("your product pages","seo-by-rank-math")},W={post:(0,r.A)("sitemap-post","Options Panel Sitemap Posts Tab"),page:(0,r.A)("sitemap-page","Options Panel Sitemap Page Tab"),attachment:(0,r.A)("sitemap-media","Options Panel Sitemap Attachments Tab"),product:(0,r.A)("sitemap-product","Options Panel Sitemap Product Tab")},$={},B={p_types:{name:"p_types",title:(0,n.__)("Post Types:","seo-by-rank-math"),className:"separator",disabled:!0}},(0,g.forEach)((0,g.values)(N),function(e){var t=C[e],a=H(e);$[e]=a;var o=G[e]||G.default,s="attachment"===e?(0,n.__)("Attachments","seo-by-rank-math"):t,i=W[e]||(0,r.A)("configure-sitemaps"),l=X[e]||(0,n.sprintf)((0,n.__)("single %s","seo-by-rank-math"),(0,g.lowerCase)(t));B["sitemap-post-type-"+e]={fields:a,name:"post-type-"+e,title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:o}),s),header:{title:s,description:(0,n.sprintf)((0,n.__)("Change Sitemap settings of %s.","seo-by-rank-math"),l),link:i},className:"rank-math-sitemap-post-type-".concat(e,"-tab rank-math-tab")}}),B);var G,X,W,$,B;function Q(e){return Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Q(e)}function Y(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=Q(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=Q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Q(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const q=function(e){var t="tax_".concat(e,"_"),a=rankMath[e].sitemapUrl,r="category"===e;return[{type:"notice",status:"info",children:wp.element.createElement(A.RawHTML,null,(0,n.sprintf)((0,n.__)("Sitemap URL: %s","seo-by-rank-math"),'<a href="'.concat(a,'" target="_blank">').concat(a,"</a>")))},{id:t+"sitemap",type:"toggle",name:(0,n.__)("Include in Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include archive pages for terms of this taxonomy in the XML sitemap.","seo-by-rank-math"),default:!!r},{id:t+"html_sitemap",type:"toggle",name:(0,n.__)("Include in HTML Sitemap","seo-by-rank-math"),desc:(0,n.__)("Include archive pages for terms of this taxonomy in the HTML sitemap.","seo-by-rank-math"),classes:"rank-math-html-sitemap ".concat(L.A.html_sitemap?"":"hidden"),default:!!r},{id:t+"include_empty",type:"toggle",name:(0,n.__)("Include Empty Terms","seo-by-rank-math"),desc:(0,n.__)("Include archive pages of terms that have no posts associated.","seo-by-rank-math"),dep:Y({},t+"sitemap",!0),default:!1,classes:"rank-math-advanced-option"}]};a.dn(q);var z=rankMath.choices,J=z.accessibleTaxonomies,K=z.choicesTaxonomyIcons;const V=(Z={category:"#categories",post_tag:"#tag",product_cat:"#product-categories",product_tag:"#product-tags"},ee={},te={t_types:{name:"t_types",title:(0,n.__)("Taxonomies:","seo-by-rank-math"),className:"separator",disabled:!0}},(0,g.forEach)((0,g.values)(J),function(e){var t=e.name,a=e.label,o=e.labels;if("post_format"!==t){var s=q(t);ee[t]=s;var i=(0,g.lowerCase)(t),l=K[t]||K.default,m=Z[t]?(0,r.A)("configure-sitemaps","Options Panel Sitemap ".concat(null==o?void 0:o.name," Tab"))+Z[i]:(0,r.A)("configure-sitemaps"),c=(0,g.includes)(["product_cat","product_tag"],t)?(0,n.sprintf)((0,n.__)("your product %s pages","seo-by-rank-math"),(0,g.lowerCase)(null==o?void 0:o.singular_name)):(0,n.sprintf)((0,n.__)("%s archives","seo-by-rank-math"),(0,g.lowerCase)(null==o?void 0:o.singular_name));te["sitemap-taxonomy-"+t]={fields:s,name:"sitemap-taxonomy-"+t,title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:l}),a),header:{title:a,description:(0,n.sprintf)((0,n.__)("Change Sitemap settings of %s.","seo-by-rank-math"),c),link:m},className:"rank-math-sitemap-taxonomy-".concat(t,"-tab rank-math-tab")}}}),te);var Z,ee,te;function ae(e){return ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(e)}function ne(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function re(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ne(Object(a),!0).forEach(function(t){oe(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ne(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function oe(e,t,a){return(t=function(e){var t=function(e,t){if("object"!=ae(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=ae(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ae(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const se=re(re({general:p,html_sitemap:_,authors:M},F),V)}}]);PK     ’ŠU]˜@8ËÉ3  É3  *  assets/admin/js/instantIndexingSettings.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[445],{7142:function(e,t,n){n.d(t,{A:function(){return o}}),n.dn(o);var r=n(1669),a=n.n(r);function o(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var l=a()('<div class="notice notice-'+t+" "+o+' is-dismissible"><p>'+e+"</p></div>").hide();i||n.siblings(".notice").remove(),n.after(l),l.slideDown(),a()(document).trigger("wp-updates-notice-added"),a()("html,body").animate({scrollTop:l.offset().top-50},"slow"),r&&setTimeout(function(){l.fadeOut(function(){l.remove()})},r)}},6116:function(e,t,n){n.d(t,{A:function(){return i}});var r=n(8110);function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const i=(0,r.map)((0,r.entries)(rankMath.choices.postTypes),function(e){var t=a(e,2);return{id:t[0],label:t[1]}})},3289:function(e,t,n){n.r(t),n.d(t,{default:function(){return x}});var r=n(2470),a=n(8809),o=n(1669),i=n.n(o),l=n(1386),s=n(2842),c=n.n(s),m=n(8303),u=n(7142);function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const y=[{id:"console",type:"component",Component:function(){var e=d((0,l.useState)(""),2),t=e[0],n=e[1],a=d((0,l.useState)(!1),2),o=a[0],s=a[1],h=i()(".instant-indexing-notice");return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"bing-api-description description"},wp.element.createElement("p",null,(0,r.__)("Insert URLs to send to the IndexNow API (one per line, up to 10,000):","seo-by-rank-math"))),wp.element.createElement(m.TextareaControl,{value:t,onChange:n,id:"indexnow_urls",className:"instant-indexing-urls",placeholder:window.location.origin+"/"+(0,r._x)("hello-world","URL slug placeholder","seo-by-rank-math")}),o&&wp.element.createElement("span",{className:"spinner is-active",id:"indexnow_spinner"}),wp.element.createElement(m.Button,{variant:"primary",id:"indexnow_sumit",disabled:o,onClick:function(){s(!0),c()({method:"POST",path:"/rankmath/v1/in/submitUrls",data:{urls:t}}).catch(function(e){var t=void 0!==e.responseJSON.message?e.responseJSON.message:(0,r.__)("An error occurred while submitting the URL.","seo-by-rank-math");(0,u.A)(t,"error",h,5e3),n(""),s(!1)}).then(function(e){e.success?((0,u.A)(e.message,"success",h,5e3),n("")):(0,u.A)(e.message,"error",h,5e3),s(!1)})}},(0,r.__)("Submit URLs","seo-by-rank-math")),wp.element.createElement("div",{className:"instant-indexing-notice"}))}}],f={name:"url-submission",header:{title:(0,r.__)("Submit URLs","seo-by-rank-math"),description:(0,r.__)("Send URLs directly to the IndexNow API.","seo-by-rank-math"),link:(0,a.A)("instant-indexing","Indexing Submit URLs")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-instant-indexing"}),(0,r.__)("Submit URLs","seo-by-rank-math")),fields:y};var p=n(6116);function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const w=function(){var e=b((0,l.useState)(rankMath.data.indexnow_api_key),2),t=e[0],n=e[1],a=window.location.origin+"/"+t+".txt";return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"field-row field-id-indexnow_api_key_location"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"indexnow_api_key_location"},(0,r.__)("API Key","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(m.TextControl,{value:t,onChange:n,readOnly:!0}),wp.element.createElement(l.RawHTML,{className:"field-description"},(0,r.__)("The IndexNow API key proves the ownership of the site. It is generated automatically. You can change the key if it becomes known to third parties.","seo-by-rank-math")),wp.element.createElement(m.Button,{onClick:function(){c()({method:"POST",path:"/rankmath/v1/in/resetKey"}).then(function(e){n(e.key)})},id:"indexnow_reset_key",className:"button button-secondary large-button"},wp.element.createElement("span",{className:"dashicons dashicons-update"}),(0,r.__)("Change Key","seo-by-rank-math")))),wp.element.createElement("div",{className:"field-row field-id-indexnow-api-key-location rank-math-advanced-option"},wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:"indexnow_api_key_location"},(0,r.__)("API Key Location","seo-by-rank-math"))),wp.element.createElement("div",{className:"field-td"},wp.element.createElement("code",{id:"indexnow_api_key_location"},a),wp.element.createElement(l.RawHTML,{className:"field-description"},(0,r.sprintf)((0,r.__)("Use the %1$s button to verify that the key is accessible for search engines. Clicking on it should open the key file in your browser and show the API key.","seo-by-rank-math"),"<strong>"+(0,r.__)("Check Key","seo-by-rank-math")+"</strong>")),wp.element.createElement(m.Button,{href:a,id:"indexnow_check_key",className:"button button-secondary large-button",target:"_blank",rel:"noreferrer"},wp.element.createElement("span",{className:"dashicons dashicons-search"}),(0,r.__)("Check Key","seo-by-rank-math")))))};n.dn(w);const k=[{id:"bing_post_types",type:"checkboxlist",name:(0,r.__)("Auto-Submit Post Types","seo-by-rank-math"),desc:(0,r.__)("Submit posts from these post types automatically to the IndexNow API when a post is published, updated, or trashed.","seo-by-rank-math"),options:p.A,toggleAll:!0,default:[]},{id:"indexnow_api_key_location",type:"component",Component:w}],g={name:"settings",header:{title:(0,r.__)("Settings","seo-by-rank-math"),description:(0,r.__)("Instant Indexing module settings.","seo-by-rank-math"),link:(0,a.A)("instant-indexing","Indexing Settings")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-settings"}),(0,r.__)("Settings","seo-by-rank-math")),fields:k};var v=n(8110);function A(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const S=[{id:"indexnow_history",type:"component",Component:function(){var e=A((0,l.useState)(!1),2),t=e[0],n=e[1],a=A((0,l.useState)([]),2),o=a[0],s=a[1],d=A((0,l.useState)("all"),2),h=d[0],y=d[1];(0,l.useEffect)(function(){c()({method:"POST",path:"/rankmath/v1/in/getLog",data:{filter:"all"}}).catch(function(e){alert(e.message)}).then(function(e){s(e.data)})},[]);var f=[[(0,r.__)("Time","seo-by-rank-math"),(0,r.__)("URL","seo-by-rank-math"),(0,r.__)("Response","seo-by-rank-math")]];(0,v.isEmpty)(o)||(0,v.forEach)(o,function(e){"all"!==h&&("manual"===h&&!e.manual_submission||"auto"===h&&e.manual_submission)||f.push([e.timeHumanReadable,e.url,e.status.toString()])}),f.length<2&&f.push([(0,r.__)("No submissions yet.","seo-by-rank-math")]);var p={all:(0,r.__)("All","seo-by-rank-math"),manual:(0,r.__)("Manual","seo-by-rank-math"),auto:(0,r.__)("Auto","seo-by-rank-math")};return wp.element.createElement(React.Fragment,null,!(0,v.isEmpty)(o)&&wp.element.createElement("div",{className:"indexnow-history-filter-wrapper"},wp.element.createElement("div",{className:"history-filter-links",id:"indexnow_history_filters"},(0,v.map)(p,function(e,t){var n=t===h?"button current":"button";return wp.element.createElement(m.Button,{variant:"link",className:n,onClick:function(){return y(t)},key:t},e)})),wp.element.createElement(m.Button,{variant:"tertiary",className:"{ classes }",onClick:function(){c()({method:"POST",path:"/rankmath/v1/in/clearLog",data:{filter:"all"}}).catch(function(){(0,u.A)((0,r.__)("Error: could not clear history.","seo-by-rank-math"),"error",i()(".rank-math-header"))}).then(function(){s([])})}},(0,r.__)("Clear History","seo-by-rank-math"))),wp.element.createElement(m.Table,{id:"indexnow_history",fields:f}),wp.element.createElement(m.Button,{variant:"link",iconPosition:"right",icon:t?"dashicons dashicons-arrow-down":"dashicons dashicons-arrow-up",onClick:function(){return n(!t)}},(0,r.__)("Response Code Help","seo-by-rank-math")),t&&wp.element.createElement(m.Table,{id:"indexnow_response_codes",fields:[[(0,r.__)("Response Code","seo-by-rank-math"),(0,r.__)("Response Message","seo-by-rank-math"),(0,r.__)("Reasons","seo-by-rank-math")],["200",(0,r.__)("OK","seo-by-rank-math"),(0,r.__)("The URL was successfully submitted to the IndexNow API.","seo-by-rank-math")],["202",(0,r.__)("Accepted","seo-by-rank-math"),(0,r.__)("The URL was successfully submitted to the IndexNow API, but the API key will be checked later.","seo-by-rank-math")],["400",(0,r.__)("Bad Request","seo-by-rank-math"),(0,r.__)("The request was invalid.","seo-by-rank-math")],["403",(0,r.__)("Forbidden","seo-by-rank-math"),(0,r.__)("The key was invalid (e.g. key not found, file found but key not in the file).","seo-by-rank-math")],["422",(0,r.__)("Unprocessable Entity","seo-by-rank-math"),(0,r.__)("The URLs don't belong to the host or the key is not matching the schema in the protocol.","seo-by-rank-math")],["429",(0,r.__)("Too Many Requests","seo-by-rank-math"),(0,r.__)("Too Many Requests (potential Spam).","seo-by-rank-math")]]}))}}],x={"url-submission":f,settings:g,history:{name:"history",header:{title:(0,r.__)("History","seo-by-rank-math"),description:(0,r.__)("The last 100 IndexNow API requests.","seo-by-rank-math"),link:(0,a.A)("instant-indexing","Indexing Settings")},title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-htaccess"}),(0,r.__)("History","seo-by-rank-math")),fields:S}}}}]);PK     ’ŠU]ìæ,#FÓ FÓ   assets/admin/css/gutenberg.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type=text],.rank-math-tabs input[type=number],.rank-math-tabs input[type=url],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px;width:100%}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=text]:hover,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=number]:hover,.rank-math-tabs input[type=url]:focus,.rank-math-tabs input[type=url]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=url]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type=radio]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227%}.block-editor .rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{max-width:268px}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 65%;flex:0 0 65%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-sidebar-panel .rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{width:182%}.block-editor .rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{max-width:268px}.rank-math-primary-term-picker{margin:20px 0 0;padding:16px 0;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker .components-base-control{width:100%}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media(min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media(min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:hsl(210,5.7851239669%,37.5490196078%);border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:"";background:#069de3;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.rank-math-sidebar-panel .components-panel__body,.rank-math-sidebar-panel .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.rank-math-sidebar-panel .components-panel__body .button,.rank-math-sidebar-panel .components-panel__body .button-secondary,.rank-math-sidebar-panel .components-panel__body .is-secondary,.rank-math-sidebar-panel .components-modal__content .button,.rank-math-sidebar-panel .components-modal__content .button-secondary,.rank-math-sidebar-panel .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button.active,.rank-math-sidebar-panel .components-panel__body .button-secondary.active,.rank-math-sidebar-panel .components-panel__body .is-secondary.active,.rank-math-sidebar-panel .components-modal__content .button.active,.rank-math-sidebar-panel .components-modal__content .button-secondary.active,.rank-math-sidebar-panel .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:hsl(210,5.7851239669%,40.5490196078%);border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.rank-math-sidebar-panel .components-panel__body .button:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .button:focus:not(:disabled),.rank-math-modal .components-panel__body .button:hover:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .button:focus:not(:disabled),.rank-math-modal .components-modal__content .button:hover:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:hover:not(:disabled){color:#069de3;border-color:#069de3;background:#f8f9fa}.rank-math-sidebar-panel .components-panel__body .button:focus,.rank-math-sidebar-panel .components-panel__body .button-secondary:focus,.rank-math-sidebar-panel .components-panel__body .is-secondary:focus,.rank-math-sidebar-panel .components-modal__content .button:focus,.rank-math-sidebar-panel .components-modal__content .button-secondary:focus,.rank-math-sidebar-panel .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-sidebar-panel .components-panel__body .button .dashicons,.rank-math-sidebar-panel .components-panel__body .button-secondary .dashicons,.rank-math-sidebar-panel .components-panel__body .is-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .button .dashicons,.rank-math-sidebar-panel .components-modal__content .button-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.rank-math-sidebar-panel .components-panel__body .button.disabled,.rank-math-sidebar-panel .components-panel__body .button-secondary.disabled,.rank-math-sidebar-panel .components-panel__body .is-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .button.disabled,.rank-math-sidebar-panel .components-modal__content .button-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.rank-math-sidebar-panel .components-panel__body .button-primary,.rank-math-sidebar-panel .components-panel__body .is-primary,.rank-math-sidebar-panel .components-modal__content .button-primary,.rank-math-sidebar-panel .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none;border-radius:3px}.rank-math-sidebar-panel .components-panel__body .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .button-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .button-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-primary:hover:not(:disabled){color:#fff;border-color:#08a7f1;background:#08a7f1}.rank-math-sidebar-panel .components-panel__body .button-primary:focus,.rank-math-sidebar-panel .components-panel__body .is-primary:focus,.rank-math-sidebar-panel .components-modal__content .button-primary:focus,.rank-math-sidebar-panel .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-sidebar-panel .components-panel__body .button-primary[disabled],.rank-math-sidebar-panel .components-panel__body .is-primary[disabled],.rank-math-sidebar-panel .components-modal__content .button-primary[disabled],.rank-math-sidebar-panel .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important;color:rgb(159.0364806867,222.8712446352,252.4635193133) !important}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default),.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:rgb(56.5071428571,126.0357142857,217.9928571429);background:rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default),.rank-math-sidebar-panel .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10ac84;background:#10ac84}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:rgb(14.6978723404,158.0021276596,121.2574468085);background:rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default),.rank-math-sidebar-panel .components-modal__content .is-red:not(.default),.rank-math-modal .components-panel__body .is-red:not(.default),.rank-math-modal .components-modal__content .is-red:not(.default){border-color:#ed5e5e;background:#ed5e5e}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):hover,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):hover,.rank-math-modal .components-modal__content .is-red:not(.default):focus{border-color:hsl(0,79.8882681564%,61.9019607843%);background:hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%);box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .button-link-delete,.rank-math-sidebar-panel .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .button-link-delete:hover,.rank-math-sidebar-panel .components-panel__body .button-link-delete:focus,.rank-math-sidebar-panel .components-modal__content .button-link-delete:hover,.rank-math-sidebar-panel .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.rank-math-sidebar-panel .components-panel__body .button-link,.rank-math-sidebar-panel .components-panel__body .is-link,.rank-math-sidebar-panel .components-modal__content .button-link,.rank-math-sidebar-panel .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button-small,.rank-math-sidebar-panel .components-panel__body .is-small,.rank-math-sidebar-panel .components-modal__content .button-small,.rank-math-sidebar-panel .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.rank-math-sidebar-panel .components-panel__body .button-xlarge,.rank-math-sidebar-panel .components-panel__body .is-large,.rank-math-sidebar-panel .components-modal__content .button-xlarge,.rank-math-sidebar-panel .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.rank-math-sidebar-panel .components-panel__body .button-animated,.rank-math-sidebar-panel .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.rank-math-sidebar-panel .components-panel__body .button-animated i,.rank-math-sidebar-panel .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.rank-math-sidebar-panel .components-panel__body .button-animated:before,.rank-math-sidebar-panel .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:"";-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon:hover,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}.rank-math-sidebar-panel .components-panel__body .rank-math-highlight-button,.rank-math-sidebar-panel .components-modal__content .rank-math-highlight-button,.rank-math-modal .components-panel__body .rank-math-highlight-button,.rank-math-modal .components-modal__content .rank-math-highlight-button{padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-sidebar-panel .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.rank-math-sidebar-panel .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media(min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:14px;height:14px;margin-right:5px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id="1-review"]{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:"";-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked~.rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type=text].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items{gap:4px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]{padding:0;background:rgba(0,0,0,0);width:auto;min-width:80px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover{background:rgba(0,0,0,0)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled){-webkit-box-shadow:none;box-shadow:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score{font-size:12px;font-weight:600;position:relative}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk{color:rgb(227.9533898305,36.5466101695,103.1228813559);border-color:rgb(227.9533898305,36.5466101695,103.1228813559);background:rgb(252.113559322,231.686440678,238.7915254237)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk{color:rgb(179.1666666667,110.5714285714,14.3333333333);border-color:rgb(179.1666666667,110.5714285714,14.3333333333);background:hsl(35.0310559006,85.1851851852%,92.9411764706%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk{color:hsl(163.3846153846,61.320754717%,36.568627451%);border-color:hsl(163.3846153846,61.320754717%,36.568627451%);background:hsl(163.3846153846,61.320754717%,91.568627451%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score{padding:10px 5px 8px 3px;color:#212f3e;border:1px solid hsl(210,15.625%,69.9019607843%);border-radius:2px;background:#dadfe4;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon{font-size:15px;float:left;height:15px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target{font-size:15px;font-weight:600}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score{font-size:12px;font-weight:600;display:inline-block}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading{pointer-events:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk{color:#e12925;border-color:#e12925;background:#fce5e2}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk{color:#b36f0e;border-color:#b36f0e;background:rgb(255,233.4,193.8)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk{color:#439f40;border-color:#439f40;background:#e3f4e3}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score{color:#fff;background:#b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk{background:hsl(1.2765957447,75.8064516129%,71.3725490196%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk{background:orange}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk{border-color:rgb(66.3911290323,158.8004032258,63.6995967742);background:rgb(106.9596774194,194.5927419355,104.4072580645)}.components-menu-group .rank-math-toolbar-score .seo-score,.components-menu-group .rank-math-toolbar-score .content-ai-score{display:none}.components-menu-group .rank-math-toolbar-score i{font-size:1.25rem}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:"dashicons";font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:"ï…•";text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:hsl(3.9130434783,77.9661016949%,71.862745098%);background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#f29c96 !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,65.9661016949%,68.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,62.9661016949%,64.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,69.9661016949%,88.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,72.9661016949%,84.862745098%)}.rank-math-focus-keyword .tagify__tag.ok-fk{color:rgb(255,158.921875,18.5);background:rgb(255,235.58125,207.2)}.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:rgb(255,235.58125,207.2) !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#ffbe5f !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:rgb(242.952,171.166,66.248)}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:rgb(238.41,162.026875,50.39)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:rgb(251.048,214.1215,160.152)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:hsl(35.625,95%,75.6274509804%)}.rank-math-focus-keyword .tagify__tag.good-fk{color:hsl(120,42.5531914894%,58.137254902%);background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(120,42.5531914894%,91.137254902%) !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#79c979 !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(120,30.5531914894%,55.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:hsl(120,27.5531914894%,51.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:hsl(120,37.5531914894%,78.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:hsl(120,37.5531914894%,71.137254902%)}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"ïŒµ"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{content:attr(data-placeholder);-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:1;-webkit-transform:none;transform:none;color:rgba(0,0,0,.25);color:var(--placeholder-color-focus);height:1em;line-height:1em;margin:auto 0;white-space:nowrap;pointer-events:none}.rank-math-focus-keyword .tagify__input:after{content:attr(data-suggest);display:inline-block;vertical-align:middle;position:absolute;min-width:calc(100% - 1.5em);text-overflow:ellipsis;overflow:hidden;white-space:pre;color:var(--tag-text-color);opacity:.3;pointer-events:none;max-width:100px}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px);transition:.2s ease-out;opacity:0;-webkit-transform:translateX(6px);transform:translateX(6px);min-width:0px;display:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.rank-math-focus-keyword .tagify.tagify--noTags.tagify--empty span{width:100%}.tagify__dropdown{position:absolute;z-index:99999999;background:#fff;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,.18);box-shadow:0 9px 18px 0 rgba(25,30,35,.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent{-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:6px 8px 6px 12px;margin-left:8px;margin-right:2px;border-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:-2px;left:-8px;width:16px;height:16px;color:rgba(0,0,0,.4) !important;background:#fff !important;-webkit-box-shadow:0px 1px 3px rgba(0,0,0,.15);box-shadow:0px 1px 3px rgba(0,0,0,.15);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn:hover{color:#d9655d !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type{padding-right:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type>div{margin-right:6px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container{display:-webkit-box;display:-ms-flexbox;display:flex;border-top-right-radius:20px;border-bottom-right-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:3px;width:22px;padding-left:3px;border:0;border-radius:16px;color:#fff;font-size:12px;font-weight:500;line-height:14px;z-index:10;overflow:hidden;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover{width:-webkit-max-content;width:-moz-max-content;width:max-content;padding-right:7px;padding-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover .intent{visibility:visible}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .icon::before{font-size:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .intent{font-size:11px;font-weight:400;visibility:hidden}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{height:18px;color:rgba(0,0,0,.4);background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent:hover{color:rgba(0,0,0,.7)}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent{padding-right:27px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container{position:absolute;right:4px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after,.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{content:"";display:block}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{width:30px;-webkit-mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));-webkit-mask-image:linear-gradient(to right, transparent, #000);mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));mask-image:linear-gradient(to right, transparent, #000);z-index:5}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after{position:absolute;inset:0;left:30px;z-index:1;border-top-right-radius:16px;border-bottom-right-radius:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{height:100%}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:"ïŒµ";text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:"ï…‡";background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:rgb(255,163.3333333333,95);-webkit-box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95);box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95)}.rank-math-checklist li .rank-math-help-icon{margin:0 !important}.rank-math-checklist li .rank-math-ai-button.is-link{gap:3px;padding:4px 5px;margin-left:4px;border-radius:3px;color:#b34a91;background:rgba(179,74,145,.1);font-size:12px;-webkit-transition:.2s all ease-in-out;transition:.2s all ease-in-out}.rank-math-checklist li .rank-math-ai-button.is-link:hover{background:rgba(179,74,145,.17)}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:5px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:"ïŒµ";margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:"ï…‡"}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:"!";text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{margin-left:5px}.suggestion-item button.suggestion-title{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:left;background:none;border:0;padding:0;cursor:default;vertical-align:sub}.suggestion-item button.suggestion-title a{vertical-align:sub}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:"ï…€" !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease,padding .2s ease,margin .2s ease;transition:width .2s ease,padding .2s ease,margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial,sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:rgba(0,0,0,0)}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid rgba(0,0,0,0);border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,.16);box-shadow:0 2px 5px 1px rgba(64,60,67,.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:gray;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media(min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:"Â·"}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:"Â·"}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px #fff}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:rgba(0,0,0,0) !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial,sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id="1-review"]{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#f44336;-webkit-transition:.25s all linear;transition:.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type=text],.rank-math-editor .field-group input[type=url],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type=text]:hover,.rank-math-editor .field-group input[type=url]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type=text]:focus,.rank-math-editor .field-group input[type=url]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:rgba(0,0,0,0);-webkit-box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1);box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .components-tab-panel__tabs>button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, rgb(255, 233, 25) 0%, rgb(251, 192, 0) 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:"";background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink .6s;animation:blink .6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink .8s;animation:wink .8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-post-publish .rank-math-social-share-buttons,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu,.rank-math-post-publish .rank-math-social-share-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}PK     ’ŠU]ùq*‰“Ñ  “Ñ  !  assets/admin/css/setup-wizard.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	setup-wizard.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.wizard-content--ready>header .dashicons-yes,.wizard-content--requirements h2>.dashicons{margin-right:5px;padding:4px;vertical-align:-3px;color:#fff;border-radius:50%;background:#58bb58}.rank-math-wizard{color:#242628;background:#f0f2f4}.rank-math-wizard *:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard a{text-decoration:none}.rank-math-wizard .notice-error{position:relative;margin-right:auto;margin-left:auto;background:#ffebee}.rank-math-wizard .text-center{color:#7f868d;font-size:1rem;font-weight:normal;text-align:center}.rank-math-wizard .rank-math-gray-box{padding:25px 35px;margin-top:2rem !important;border-radius:5px;background:#f5f5f5}.rank-math-wizard .header{max-width:970px;margin:75px auto 0}.rank-math-wizard .wrapper{max-width:970px;padding:42px 40px 50px;margin:35px auto 45px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:5px;-webkit-box-shadow:0 2px 6px rgba(50,50,93,.05),0 1px 3px rgba(0,0,0,.05);box-shadow:0 2px 6px rgba(50,50,93,.05),0 1px 3px rgba(0,0,0,.05);background:#fff}.rank-math-wizard .main-content>header,.rank-math-wizard .main-content header.sitemap-title,.rank-math-wizard .main-content header.redirections-header{margin-bottom:40px;text-align:center}.rank-math-wizard .main-content>header h1,.rank-math-wizard .main-content header.sitemap-title h1,.rank-math-wizard .main-content header.redirections-header h1{font-size:30px;font-weight:700;margin:0 0 14px}.rank-math-wizard .main-content>header p,.rank-math-wizard .main-content header.sitemap-title p,.rank-math-wizard .main-content header.redirections-header p{font-size:15px;max-width:600px;margin:10px auto;color:#7f868d}.rank-math-wizard .main-content>.notice{display:none}.rank-math-wizard .main-content header.redirections-header{margin-bottom:0}.rank-math-wizard .main-content header.redirections-header h1{margin-top:.67em}.rank-math-wizard .main-content header.sitemap-title{padding-top:45px;margin-top:38px;border-top:1px solid #dadfe4}.rank-math-wizard .rank-math-steps-progress{display:block;margin-top:50px}@media screen and (max-width: 782px)and (max-width: 595px){.rank-math-wizard .main-content>header h1,.rank-math-wizard .main-content header.sitemap-title h1,.rank-math-wizard .main-content header.redirections-header h1{font-size:24px}.rank-math-wizard .main-content>header p,.rank-math-wizard .main-content header.sitemap-title p,.rank-math-wizard .main-content header.redirections-header p{margin-top:10px}.rank-math-wizard .rank-math-steps-progress{margin-top:25px}}.rank-math-collapsible-trigger{letter-spacing:.5px}.rank-math-collapsible-trigger .dashicons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:47px;font-size:16px}.rank-math-collapsible-trigger .dashicons span{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;color:rgba(36,41,46,.65)}.return-to-dashboard{padding-bottom:50px;text-align:center}.return-to-dashboard a{display:inline-block;border-bottom:1px dotted;color:#7f868d;font-size:14px;text-align:center;text-decoration:none}.return-to-dashboard a:hover,.return-to-dashboard a:focus{border-color:#069de3;color:#069de3}@media screen and (prefers-reduced-motion: reduce){.return-to-dashboard{opacity:1 !important}}.field-wrap .field-row.features-child{margin-top:-5px;padding:25px 20px !important;border-bottom-color:#f8f9fa;background:#f8f9fa}.responsive-video{position:relative;overflow:hidden;padding-top:56.25%}.responsive-video iframe{border:0;height:100%;width:100%;position:absolute;top:0;right:0;bottom:0;left:0}.field-row.field-multicheck-inline.with-description .field-description,.field-row.field-multicheck-inline .rank-math-multicheck,.field-row.field-multicheck-inline .rank-math-multicheck li{display:inline-block;width:48%;vertical-align:top}.field-row.field-multicheck-inline .rank-math-multicheck{width:420px;max-width:100%;margin:0}.field-row.field-multicheck-inline .rank-math-multicheck .rank-math-checkbox-control{margin:0}.field-row.field-multicheck-inline .rank-math-multicheck .components-checkbox-control__label{line-height:20px}.field-row.field-multicheck-inline.with-description .field-td{width:100%}.field-row.field-multicheck-inline.with-description .rank-math-multicheck{padding-top:20px}.field-row.field-multicheck-inline.with-description .field-description{padding:0;color:#21262c;font-size:15px;line-height:1.5}[id^=field-metabox-rank] select{padding-top:0;padding-bottom:0}@media screen and (max-width: 782px){.rank-math-wizard .rank-math-ui .button{padding:0 20px;font-size:15px}}.rank-math-wizard .rank-math-ui .field-type-multicheck .field-td button:first-of-type{margin:-1em 0 0}.rank-math-wizard .rank-math-ui .field-multicheck-toggle{display:block;padding:0;margin-bottom:1em;border:0;-webkit-box-shadow:none !important;box-shadow:none !important;color:#069de3;background:rgba(0,0,0,0);cursor:pointer}.rank-math-wizard .rank-math-ui .field-multicheck-toggle:focus,.rank-math-wizard .rank-math-ui .field-multicheck-toggle:active{-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none;outline:none;color:#069de3}.form-footer:not(.rank-math-custom){width:calc(100% + 80px);margin:75px -40px -50px;border:0;border-top:1px solid #dadfe4;border-radius:0 0 5px 5px;overflow:hidden}.form-footer:not(.rank-math-custom) .button{height:48px;padding:0 30px;font-size:16px;line-height:48px}.form-footer:not(.rank-math-custom) .button-secondary{margin-right:10px}@media screen and (max-width: 375px){.form-footer:not(.rank-math-custom) .button.button-primary{float:none}}.wizard-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;text-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:50px auto 0}.wizard-navigation a{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;position:relative;color:#5b6065;font-size:13px;letter-spacing:.5px;text-transform:uppercase}.wizard-navigation a:before{display:block;content:attr(title);padding-bottom:10px;color:#5b6065;font-weight:600}.wizard-navigation a:after{content:"";-webkit-transform:translate(-50%, 23px);transform:translate(-50%, 23px);background-color:#cbd2d9;height:3px;width:100%;position:absolute;top:15px;left:0;pointer-events:none}.wizard-navigation span{display:inline-block;position:relative;z-index:10;border:2px solid #cbd2d9;border-radius:50%;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;background:#cbd2d9;line-height:20px;height:18px;width:18px}.wizard-navigation .step-label:before{color:#069de3}.wizard-navigation .step-label:after{display:none}.wizard-navigation .step-label+a:after{-webkit-transform:translate(-60%, 23px);transform:translate(-60%, 23px);width:162%}.wizard-navigation a.active span{border:2px solid #069de3;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;color:#fff;background:#069de3}.wizard-navigation a.active:after{background:-webkit-gradient(linear, left top, right top, from(#58bb58), to(#069de3));background:linear-gradient(to right, #58bb58 0%, #069de3 100%)}.wizard-navigation a.active:before{color:#069de3}.wizard-navigation a.done span{border-color:#58bb58;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;color:#fff;background-color:#58bb58}.wizard-navigation a.done:after{background-color:#58bb58}.wizard-content--requirements h2>.dashicons{font-size:16px;line-height:18px;width:18px;height:18px;padding:0;vertical-align:-2px;opacity:.5}.wizard-content--requirements h2>.dashicons-warning{background:#e8cb57}.wizard-content--requirements #rank-math-compatibility-collapsible{width:770px;max-width:100%;margin:0 auto}.wizard-content--requirements .rank-math-table{margin-top:50px;border-width:1px 1px 0 1px;border-style:solid;border-color:#b5bfc9}.wizard-content--requirements .rank-math-table tr{position:relative}.wizard-content--requirements .rank-math-table tr:nth-child(odd){background:#f8f9fa}.wizard-content--requirements .rank-math-table td,.wizard-content--requirements .rank-math-table th{padding:10px 20px;border-bottom:1px solid #b5bfc9}.wizard-content--requirements .rank-math-table th{width:auto;color:#242628;text-transform:inherit}.wizard-content--requirements .rank-math-table th .description{font-size:12px;font-weight:normal;font-style:normal;color:#939596}.wizard-content--requirements .rank-math-table td{vertical-align:top}.wizard-content--requirements .rank-math-table td:last-child{text-align:right}.wizard-content--requirements .rank-math-table td:last-child .dashicons{font-size:24px}.wizard-content--requirements .rank-math-table .dashicons-no{color:#ee6a5e}.wizard-content--requirements .rank-math-table .dashicons-no::after{content:"";display:block;position:absolute;left:0;top:0;bottom:0;width:3px;background:#ee6a5e}.wizard-content--requirements .checklist-ok,.wizard-content--requirements .checklist-not-ok{margin-top:10px;color:#969696}.wizard-content--requirements .checklist-not-ok{color:#ee6a5e}.wizard-content--requirements .conflict-text{font-size:15px;font-weight:500;margin-top:20px;margin-bottom:0;color:#ee6a5e}.wizard-content--requirements .noconflict{color:#58bb58}.wizard-content--requirements .wizard-conflicts{margin-top:10px}.wizard-content--requirements .wizard-conflicts .import-info{font-size:12px;font-weight:normal;color:#777}.wizard-content--requirements .wizard-conflicts .import-info:before{content:" - "}.wizard-content--requirements .wizard-conflicts td{padding:8px 10px;color:#242628;vertical-align:middle}.wizard-content--requirements .wizard-conflicts td .dashicons-warning{margin-right:5px;color:#ee6a5e;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.wizard-content--requirements .wizard-conflicts td .dashicons-yes{color:#58bb58}.wizard-content--requirements .wizard-conflicts td a.disabled{cursor:not-allowed}.wizard-content--requirements .form-footer{margin:60px 0 25px}.wizard-content--requirements .rank-math-collapsible-trigger.rank-math-button.components-button.button-link{margin-left:10px;color:rgba(36,41,46,.65);text-decoration:none}.wizard-content--requirements .rank-math-collapsible-trigger.rank-math-button.components-button.button-link:hover{color:currentColor;background:#f8f9fa}.wizard-content--requirements .rank-math-collapsible-trigger.rank-math-button.components-button.button-link:focus{-webkit-box-shadow:none;box-shadow:none;outline:none;color:currentColor;background:rgba(0,0,0,0)}.wizard-content--requirements .rank-math-collapsible-trigger.rank-math-button.components-button.button-link:focus:hover{background:#f8f9fa}.wizard-content--requirements .rank-math-setup-mode{width:770px;max-width:100%;margin:0 auto;margin-top:3rem}.wizard-content--requirements .rank-math-setup-mode ul{display:block;width:100%;padding:0;margin:0;border:none}.wizard-content--requirements .rank-math-setup-mode ul li{position:relative;margin:0}.wizard-content--requirements .rank-math-setup-mode ul li input[type=radio]{position:absolute;top:20px;left:20px;margin-top:3px}.wizard-content--requirements .rank-math-setup-mode ul li label{display:block;width:100%;height:auto;padding:20px 20px 20px 50px;margin:0 0 16px 0;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #dadfe4;border-radius:6px;background:#f8f9fa;white-space:normal;-webkit-transition:.25s all linear;transition:.25s all linear;cursor:pointer}.wizard-content--requirements .rank-math-setup-mode ul li label:hover{border-color:#7f868d}.wizard-content--requirements .rank-math-setup-mode ul li label .rank-math-mode-title{color:#242628;font-size:17px;font-weight:600;line-height:1;white-space:normal}.wizard-content--requirements .rank-math-setup-mode ul li label p{display:block;clear:both;padding:0;padding-top:10px;margin:0;color:#7f868d;font-size:14px;font-weight:400;font-style:normal;line-height:1.5}.wizard-content--requirements .rank-math-setup-mode ul li label p strong{font-weight:500}.wizard-content--requirements .rank-math-setup-mode ul li label .children{padding-top:8px;padding-bottom:8px}.wizard-content--requirements .rank-math-setup-mode ul li label.is-checked{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.wizard-content--requirements .rank-math-setup-mode ul li label.is-disabled .rank-math-mode-title{color:rgba(36,38,40,.5)}.wizard-content--requirements .rank-math-setup-mode ul li:last-child label{margin-bottom:0}.wizard-content--requirements .rank-math-setup-mode p{padding-top:10px;color:#7f868d;font-size:14px;font-style:normal;margin:0}.wizard-content--requirements .rank-math-setup-mode.is-free ul li:last-child input{opacity:.5}.wizard-content--requirements .rank-math-setup-mode.is-free ul li:last-child .rank-math-mode-title{color:rgba(36,38,40,.5)}.wizard-content--requirements .rank-math-setup-mode.is-free ul li:last-child .rank-math-mode-title::after{content:"Pro";margin-left:10px;margin-left:5px;padding:5px 10px;border-radius:3px;color:#fff;background:#00af80;background:linear-gradient(335deg, #00af80, #1cb076, #2db06c, #3cb061, #49b156, #56b04a, #63b03d, #6faf2e);font-size:11px;font-weight:normal;vertical-align:2px;text-transform:uppercase;opacity:1}@media screen and (max-width: 782px){.wizard-content--requirements .rank-math-setup-mode ul li label{padding-left:55px}}.wizard-content--import .import-plugin{display:-webkit-box;display:-ms-flexbox;display:flex}.wizard-content--import .import-plugin .field-th{width:20%;padding:0}.wizard-content--import .import-plugin .field-th h3{padding:0;margin:1em 0;color:#1d2327;font-size:18px}.wizard-content--import .import-plugin .field-td{width:80%;padding:0}.wizard-content--import .import-plugin .field-td .plugin-title{position:relative;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.wizard-content--import .import-plugin .field-td .plugin-title:not(:first-of-type){margin-top:8px}.wizard-content--import .import-plugin .field-td .plugin-title .rank-math-checkbox-control{position:absolute;top:50%;left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.wizard-content--import .import-plugin .field-td .plugin-title .components-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%;height:auto;padding:13px 20px 13px 50px;margin:0;border-radius:4px;-webkit-box-shadow:none;box-shadow:none;outline:none;background-color:#f1f2f4}.wizard-content--import .import-plugin .field-td .plugin-title .components-button h3{margin:0;font-size:18px}.wizard-content--import .import-plugin .field-td .plugin-title .components-button .dashicons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:30px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:30px;padding:0;margin-left:auto;border-radius:50%;-webkit-box-shadow:1px -1px 62px -13px rgba(0,0,0,.14);box-shadow:1px -1px 62px -13px rgba(0,0,0,.14);outline:none;color:#a4a4a4;background-color:#fff}.wizard-content--import .import-plugin .field-td .plugin-title.is-open .components-button{border-radius:4px 4px 0 0}.wizard-content--import .import-plugin .field-td .plugin-title.is-open .components-button .dashicons{color:#fff;background-color:#059de2}.wizard-content--import .import-plugin .field-td .inside{padding:30px 20px;margin:0;border:4px;background-color:#f8f9fa}.wizard-content--import .import-plugin .field-td .inside .rank-math-button{padding:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;margin-bottom:25px !important;border:0;-webkit-box-shadow:none;box-shadow:none;outline:none;color:#0474ab !important;background:0;font-size:15px;line-height:1.5}.wizard-content--import .import-plugin .field-td .inside ul{margin-top:0}.wizard-content--import .import-plugin .field-td .inside ul li{display:inline-block;width:48%;margin-bottom:9px;vertical-align:top}.wizard-content--import .import-plugin .field-td .inside ul li .rank-math-checkbox-control{width:100% !important}.wizard-content--import .import-plugin .field-td .inside ul li .rank-math-checkbox-control .components-checkbox-control__label{color:#24292e;font-size:16px}.wizard-content--import .import-plugin .field-td .inside ul li .rank-math-checkbox-control .components-checkbox-control__label .rank-math-tooltip{margin-left:4px}.wizard-content--import .import-plugin .field-td .inside .description{width:100%;margin-top:20px;color:#888;font-size:13px;font-style:italic}.wizard-content--import .import-plugin .field-td .inside .description+.rank-math-checkbox-control label{color:#888;font-size:13px;font-style:italic;letter-spacing:.01em;line-height:1.3}.wizard-content--import .rank-math-textarea-control{float:right;width:100%;margin:20px 0}.wizard-content--import .rank-math-textarea-control.components-base-control .components-textarea-control__input:disabled{background:#eee}@media screen and (max-width: 782px){.wizard-content--import .import-plugin{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.wizard-content--import .import-plugin .field-td,.wizard-content--import .import-plugin .field-th{width:100%}}#import-progress-bar{color:#959798;font-size:15px}#import-progress-bar #importProgress{margin-top:40px;margin-bottom:10px;border-radius:50px;background-color:#dddfe0}#import-progress-bar #importProgress #importBar{width:1%;height:8px;border-radius:50px;background-color:#069de3;-webkit-transition:width 1s;transition:width 1s}#import-progress-bar .left{float:left}#import-progress-bar .left strong{color:#65676a}#import-progress-bar .right{float:right}.wizard-content--yoursite .rank-math-wizard-tutorial{margin-bottom:30px}.wizard-content--yoursite .rank-math-wizard-tutorial header{font-size:14px;padding:12px 16px;border-radius:3px;background:#f0f2f4}.wizard-content--yoursite .rank-math-wizard-tutorial header .rank-math-button.is-link{color:#069de3;text-decoration:none}.wizard-content--yoursite .rank-math-wizard-tutorial header .rank-math-button.is-link:active:not(:disabled),.wizard-content--yoursite .rank-math-wizard-tutorial header .rank-math-button.is-link:hover:not(:disabled),.wizard-content--yoursite .rank-math-wizard-tutorial header .rank-math-button.is-link:focus:not(:disabled){color:#069de3;background-color:rgba(0,0,0,0)}.wizard-content--yoursite .rank-math-wizard-tutorial header .rank-math-button.is-link:focus:not(:disabled){-webkit-box-shadow:none;box-shadow:none;outline:none}.wizard-content--yoursite .components-tab-panel__tabs{padding:0 16px;border-bottom:1px solid #dadfe4;background:#e9ecef}.wizard-content--yoursite .components-tab-panel__tabs .components-button{display:inline-block;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;padding:22px 16px 16px;-webkit-box-shadow:none;box-shadow:none;outline:none;color:#7f868d;font-size:16px;font-weight:600}.wizard-content--yoursite .components-tab-panel__tabs .components-button:focus{-webkit-box-shadow:none;box-shadow:none;outline:none}.wizard-content--yoursite .components-tab-panel__tabs .components-button:active{color:#7f868d}.wizard-content--yoursite .components-tab-panel__tabs .components-button::after,.wizard-content--yoursite .components-tab-panel__tabs .components-button::before{display:none}.wizard-content--yoursite .components-tab-panel__tabs .components-button.is-active{border-bottom:2px solid #069de3;color:#069de3}.wizard-content--yoursite .components-tab-panel__tabs .components-button .rm-icon{margin-right:10px;font-size:18px;vertical-align:-3px}.wizard-content--yoursite .rank-math-tabs-content{padding:16px;background:#f4f5f6}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge,.wizard-content--yoursite .rank-math-tabs-content #help-panel-video{border:0;background:rgba(0,0,0,0)}.wizard-content--yoursite .rank-math-tabs-content #help-panel-video a{border-bottom:1px dashed}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge:hover .rank-math-text-control input{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge label{display:block;font-size:14px;opacity:.8}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge .rank-math-text-control{float:left;margin-right:15px;margin-bottom:5px;height:40px;width:77%}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge .rank-math-text-control input{padding:0 2% 0 15px;border-color:#b5bfc9;font-size:1.5em}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge .rank-math-text-control input:hover,.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge .rank-math-text-control input:focus{border-color:#069de3}.wizard-content--yoursite .rank-math-tabs-content #help-panel-knowledge .rank-math-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:20%;letter-spacing:.05em}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex),.rank-math-accordion-content .field-type-select:not(.no-flex),.rank-math-accordion header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.wizard-content--analytics .connect-wrap{display:grid;margin-bottom:4rem;margin-top:30px;place-items:center}.wizard-content--analytics .field-description{text-align:center}#setting-panel-analyitcs .connect-wrap{margin-bottom:1rem}#setting-panel-analyitcs .connect-wrap .button{font-size:16px;line-height:40px;padding:0 20px}#setting-panel-analyitcs .connect-wrap .button:before{display:none}.connect-actions{margin-bottom:.5rem;text-align:right}.connect-actions .button-link{margin:0 0 0 25px;text-decoration:none;line-height:normal;position:relative;color:#ff9f43;border-bottom:1px dotted #fff;padding:0;line-height:29px}.connect-actions .button-link:after{content:"|";color:#b5bfc9;position:absolute;right:-15px}.connect-actions .button-link:last-child:after{content:"";display:none}.connect-actions .button-link:focus,.connect-actions .button-link:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(0,0,0,0);color:#ff9f43;border-bottom-color:#ff9f43}.connect-actions .button-link.rank-math-disconnect-google{color:#ee6a5e}.connect-actions .button-link.rank-math-disconnect-google:hover,.connect-actions .button-link.rank-math-disconnect-google:focus{color:#ee6a5e;border-bottom-color:#ee6a5e}.rank-math-spinner{margin:0;height:14px;width:14px;display:inline-block;position:relative;color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #007cba));overflow:visible}.rank-math-spinner circle{fill:rgba(0,0,0,0);stroke-width:1.5px;stroke:#ddd}.rank-math-spinner path{fill:rgba(0,0,0,0);stroke-width:1.5px;stroke:currentcolor;stroke-linecap:round;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.rank-math-accordion{margin-bottom:1rem;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;border:1px solid #dadfe4;border-radius:6px;background:#fff}.rank-math-accordion:hover,.rank-math-accordion:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-accordion .cmb-row,.rank-math-accordion .field-row,.rank-math-accordion .rank-math-analytics-content .field-row,.rank-math-accordion .rank-math-adsense-content .field-row{padding:1rem 0 !important;border-top:0 !important}.rank-math-accordion .cmb-row .cmb-td,.rank-math-accordion .cmb-row .field-td,.rank-math-accordion .field-row .cmb-td,.rank-math-accordion .field-row .field-td,.rank-math-accordion .rank-math-analytics-content .field-row .cmb-td,.rank-math-accordion .rank-math-analytics-content .field-row .field-td,.rank-math-accordion .rank-math-adsense-content .field-row .cmb-td,.rank-math-accordion .rank-math-adsense-content .field-row .field-td{width:100%}.rank-math-accordion .cmb2-toggle,.rank-math-accordion .field-toggle{margin-right:5px}.rank-math-accordion header{line-height:1;padding:1rem;cursor:pointer;border-bottom:1px solid #dadfe4;border-radius:6px 6px 0 0;background:#f8f9fa;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-accordion header h3{font-size:1.25rem;line-height:1;margin:0}.rank-math-accordion header h3 .rank-math-connection-status{display:inline-block;width:14px;height:14px;content:"";border-radius:50%;background:#dadfe4}.rank-math-accordion header h3 .rank-math-connection-status-wrap{margin-right:.825rem}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-error{background:#ee6a5e}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-success{background:#79c979}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-warning{background:#ff9f43}.rank-math-accordion.connected h3:before{background:#79c979}.rank-math-accordion-content{padding:1rem}.rank-math-accordion-content .cmb-type-select label,.rank-math-accordion-content .field-type-select label{display:block;margin-bottom:.5rem}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col{margin-right:3%;-webkit-box-flex:0;-ms-flex:0 0 31.3333333%;flex:0 0 31.3333333%;max-width:31.3333333%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col:nth-of-type(3),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col:last-of-type,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col:nth-of-type(3),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col:last-of-type,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col:nth-of-type(3),.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col:last-of-type,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col:nth-of-type(3),.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col:last-of-type{margin-right:0}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view{margin-top:1rem;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view>*,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view>*,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view>*,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view>*{margin-right:.5rem}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view label,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view label,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view label,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view label{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view input,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view input,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view input,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view input{width:auto}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view input:not(:hover):not(:focus){border-color:#b5bfc9}.rank-math-accordion-content .field-type-select:not(.no-flex){-webkit-column-gap:3%;-moz-column-gap:3%;column-gap:3%;row-gap:15px;padding-bottom:0 !important}.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col{-webkit-box-flex:1;-ms-flex:auto;flex:auto;width:268px;max-width:268px;margin:0}.rank-math-accordion-content .warning{font-size:14px;margin:0 0 1rem}.rank-math-accordion-content .cmb-td,.rank-math-accordion-content .field-td{width:100%}.rank-math-accordion-content .field-description,.rank-math-accordion-content .cmb2-metabox-description{text-align:left}#rank-math-pro-cta.analytics{margin-left:0}#rank-math-pro-cta.analytics .rank-math-cta-box{background:rgba(0,0,0,0)}#rank-math-pro-cta.rank-math-privacy-box{width:630px;max-width:100%;margin-top:3rem}#rank-math-pro-cta.rank-math-privacy-box.width-100{width:100%}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-table{border-width:2px;border-color:#10ac84}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body{background:rgba(16,172,132,.06)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body i{font-size:2rem;line-height:50px;width:50px;height:50px;margin-right:1.25rem;color:#10ac84;border-radius:50px;background:rgba(16,172,132,.1)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body p{font-size:.9375rem;margin:0;color:#5f8c80}#rank-math-pro-cta.rank-math-privacy-box{width:630px;max-width:100%;margin:3rem auto 0}.rank-math-tabs-content #rank-math-pro-cta.rank-math-privacy-box{width:100%}.next-fetch{float:left;margin-top:4px;color:#7f868d}.cancel-fetch{-webkit-transition:.25s linear all;transition:.25s linear all}.cancel-fetch:disabled{opacity:0}.rank-math-console-db-info{display:inline-block;margin:8px 8px 0 0;padding:5px 8px;border-radius:4px;background:#f6f6f6}.rank-math-console-db-info i{font-size:12px;margin-right:3px;vertical-align:-1px}#console_caching_control{margin-bottom:10px}#console-updating-manually-progress{position:relative;display:none;overflow:hidden;margin:10px 0;padding:8px;border-radius:4px;background:#f6f6f6}#console-updating-manually-progress .progress{overflow:hidden;height:100%;padding:8px;-webkit-transition:width 2s ease-in-out;transition:width 2s ease-in-out;white-space:nowrap;color:#fff;border-radius:3px;background:#008ec2;position:absolute;top:0;left:0}#setting-panel-analytics .select2-container{width:100% !important}.cmb2-id-console-authorization-code.unauthorized~div{display:none}.cmb2-id-console-authorization-code.unauthorized input,.cmb2-id-console-authorization-code.unauthorized button{display:none !important}.cmb2-id-console-authorization-code.authorizing input,.cmb2-id-console-authorization-code.authorizing button{display:inline-block !important}.cmb2-id-console-authorization-code.authorizing .rank-math-get-authorization-code{margin-top:10px}.cmb2-id-console-authorization-code.authorized #console_authorization_code{display:none}.cmb2-id-console-profile .rank-math-refresh{margin-right:10px}.wizard-content--optimization .field-wrap:first-of-type{margin-bottom:25px;padding-bottom:25px;border-bottom:1px solid #dadfe4}.wizard-content--ready>header h1{font-size:20px !important}.wizard-content--ready .wizard-next-steps{margin-top:60px}.wizard-content--ready .wizard-next-steps>div{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box}.wizard-content--ready .wizard-next-steps .learn-more{padding-left:35px}.wizard-content--ready .wizard-next-steps .learn-more h2{margin-top:0}.wizard-content--ready .wizard-next-steps .learn-more li{margin-bottom:12px;font-size:18px;line-height:1.5}.wizard-content--ready .wizard-next-steps .learn-more a{color:#089ce6}.wizard-content--ready .wizard-next-steps .learn-more .dashicons{font-size:24px;margin-top:2px;margin-right:13px;color:#bcbdbf}.wizard-content--ready .wizard-next-steps .learn-more .dashicons.pro{font-size:19px;padding:2px;border-radius:3px;color:#f7d070;background:#253142}.wizard-content--ready .wizard-next-steps .learn-more .pro-label{border-bottom:1px dotted}.wizard-content--ready .score-100{margin-top:-20px;text-align:right}.wizard-content--ready .score-100 img{max-width:250px}.wizard-content--ready .rank-math-additional-options{margin-top:60px;text-align:center}.wizard-content--ready .rank-math-additional-options>div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.wizard-content--ready .rank-math-additional-options>div h3{font-size:17px;font-weight:500;display:inline-block;margin:0;color:#434343}.wizard-content--ready .rank-math-additional-options>div .rank-math-toggle-control{margin-left:10px}.wizard-content--ready .rank-math-additional-options>div.rank-math-auto-update-email-wrapper{margin-top:30px}.rank-math-mode-basic .rank-math-return-dashboard{float:right;margin-right:0 !important;color:#fff !important;border-color:#069de3 !important;background:#069de3 !important}.rank-math-mode-basic .rank-math-return-dashboard:hover,.rank-math-mode-basic .rank-math-return-dashboard:focus{border-color:#08a7f1 !important;background:#08a7f1 !important}@media screen and (max-width: 775px){.wizard-content--ready .wizard-next-steps>div{float:none;width:100%}.wizard-content--ready .wizard-next-steps .score-100{text-align:center}.wizard-content--ready .wizard-next-steps .learn-more{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:25px}.wizard-content--ready .form-footer:not(.rank-math-custom) .rank-math-button.button-primary{float:none;margin-top:15px}}.rank-math-tracking-optin{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-width:680px;margin:10px auto 45px}.rank-math-tracking-optin label{font-size:17px;font-weight:500;display:inline-block;margin:0;color:#434343}.rank-math-tracking-optin .rank-math-toggle-control .components-base-control__field .components-flex{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}@media screen and (max-width: 905px){.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-authorization-code .button-primary,.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-profile .button-primary{display:block;margin-top:10px;margin-left:0}.rank-math-wizard .cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{width:100%;margin-top:20px}}@media screen and (max-width: 782px){.rank-math-wizard .wizard-navigation a:before{font-size:12px}.rank-math-wizard .cmb2-wrap .cmb-row input[type=checkbox]:checked:before{font-size:30px}.rank-math-wizard #rank-math-compatibility-collapsible .form-table th,.rank-math-wizard #rank-math-compatibility-collapsible .form-table td{display:table-cell}}@media screen and (max-width: 782px)and (max-width: 640px){.rank-math-wizard .logo img{width:190px}.rank-math-wizard .wrapper{padding:30px 15px 35px}.rank-math-wizard .form-footer{margin-top:15px}.rank-math-wizard .cmb2-wrap .cmb-row .regular-text,.rank-math-wizard #cmb2-metabox-rank-math-wizard select{width:100%;max-width:100%}.rank-math-wizard .wizard-content--ready .form-footer:not(.rank-math-custom){text-align:center}}@media screen and (max-width: 782px)and (max-width: 595px){.rank-math-wizard .wizard-navigation{margin:25px auto 50px}.rank-math-wizard .wizard-navigation a:before{display:none}.rank-math-wizard .wizard-navigation a:first-child:before{position:relative;z-index:1;display:block;margin-top:-7px;background:#fff}.rank-math-wizard .wizard-navigation a:after{top:-12px}.rank-math-wizard.rank-math-wizard .cmb-form>header h1{font-size:24px}.rank-math-wizard.rank-math-wizard .cmb-form>header p{margin-top:10px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-share{margin-top:25px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps{margin:25px 0 0}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps>div{width:100%;padding:0 0 25px}}body.rtl.rank-math-wizard-body--requirements .rank-math-collapsible-trigger{display:inline-block;margin-right:10px;margin-left:0;padding:0 5px 0 12px}body.rtl.rank-math-wizard-body--requirements h2>.dashicons{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--requirements .form-table td:last-child{text-align:left}body.rtl.rank-math-wizard-body--requirements .form-footer .button .dashicons-arrow-right-alt2:before{content:"ï��"}body.rtl .wizard-navigation .step-label+a:after{-webkit-transform:translate(20%, 23px);transform:translate(20%, 23px)}body.rtl .wizard-navigation a:after{-webkit-transform:translate(50%, 23px);transform:translate(50%, 23px)}body.rtl .return-to-dashboard a .dashicons-arrow-left-alt2:before{content:"ï�…"}body.rtl.rank-math-wizard .form-footer:not(.rank-math-custom) .button-secondary{margin-right:0;margin-left:10px}body.rtl.rank-math-wizard-body--ready .cmb-form>header .dashicons-yes{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--ready .wizard-share{margin-right:10px;margin-left:0}body.rtl.rank-math-wizard-body--ready .wizard-share a{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:5px;margin-left:0;padding-right:15px;padding-left:20px}body.rtl.rank-math-wizard-body--ready .wizard-share .dashicons{margin-right:0 !important;margin-left:5px !important}body.rtl.rank-math-wizard-body--ready .wizard-next-steps>div{float:right}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more{padding-right:35px;padding-left:0}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more .dashicons{margin-right:0;margin-left:13px}body.rtl.rank-math-wizard-body--ready .rank-math-score-wrapper .switch{margin-left:0;margin-right:15px}.rank-math-steps-progress{display:grid;gap:13px}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-box-flex:1;-ms-flex:1;flex:1;position:relative;padding:0;color:#5b6065;font-weight:600;line-height:1.4em;letter-spacing:.5px;text-transform:uppercase;text-align:center}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:focus,.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-active,.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-active:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:first-of-type{display:-webkit-box;display:-ms-flexbox;display:flex;color:#069de3 !important}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:first-of-type+.components-tab-panel__tabs-item::after{width:150%}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:first-of-type::after{display:none}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type){-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type)::after{content:"";position:relative;-webkit-transform:translate(-50%, 21px);transform:translate(-50%, 21px);height:3px;width:100%;outline:none;background:#cbd2d9;-webkit-transition:none;transition:none}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type)::before{content:"";display:inline-block;top:30px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);position:absolute;z-index:10;width:18px;height:18px;border:2px solid #cbd2d9;border-radius:50%;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;background:#cbd2d9;line-height:20px}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-active::after{background:-webkit-gradient(linear, left top, right top, from(#58bb58), to(#069de3));background:linear-gradient(to right, #58bb58 0%, #069de3 100%)}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-active.components-tab-panel__tabs-item{color:#069de3}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-active.components-tab-panel__tabs-item:not(:first-of-type)::before{border-color:#069de3;background-color:#069de3}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-done::after{background:#58bb58}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-done.components-tab-panel__tabs-item{color:#5b6065}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item.is-done.components-tab-panel__tabs-item:not(:first-of-type)::before{border-color:#58bb58;background-color:#58bb58}@media screen and (max-width: 782px)and (max-width: 595px){.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:first-of-type{z-index:1;padding-top:5px;padding-bottom:10px;background-color:#fff}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type){font-size:0;line-height:1}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type)::before{top:10px}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type)::after{-webkit-transform:translate(-50%, 20px) !important;transform:translate(-50%, 20px) !important}}@media screen and (max-width: 782px){.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item{font-size:12px}.rank-math-steps-progress>.components-tab-panel__tabs[role=tablist] .components-tab-panel__tabs-item:not(:first-of-type)::after{-webkit-transform:translate(-50%, 23px);transform:translate(-50%, 23px)}}.steps-progress-skeleton header .title,.steps-progress-skeleton header .sub-title{display:block;margin:0 auto;border-radius:16px}.steps-progress-skeleton header .title{height:30px;width:200px;margin-bottom:14px}.steps-progress-skeleton header .sub-title{height:14px;width:160px}.steps-progress-skeleton .field-row .top{display:-webkit-box;display:-ms-flexbox;display:flex}.steps-progress-skeleton .field-row .top::after,.steps-progress-skeleton .field-row .top::before{content:"";display:block;border-radius:4px}.steps-progress-skeleton .field-row .top::before{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;height:14px;margin-right:90px}.steps-progress-skeleton .field-row .top::after{-webkit-box-flex:1;-ms-flex:1;flex:1;height:40px;border:1px solid rgba(0,0,0,.11)}.steps-progress-skeleton .field-row .bottom::after,.steps-progress-skeleton .field-row .bottom::before{content:"";display:block;width:70%;height:14px;margin-top:10px;margin-left:auto;border-radius:4px}.steps-progress-skeleton .field-row:first-of-type .top::after{-webkit-box-flex:0;-ms-flex:0 0 40%;flex:0 0 40%}.steps-progress-skeleton .field-row:first-of-type .bottom{display:none}.steps-progress-skeleton .field-row:nth-of-type(2) .top::after{-webkit-box-flex:0;-ms-flex:none;flex:none;width:160px}.steps-progress-skeleton .field-row:nth-of-type(2) .bottom::after,.steps-progress-skeleton .field-row:nth-of-type(2) .bottom::before{margin-left:30%}.steps-progress-skeleton .field-row:nth-of-type(2) .bottom::before{width:120px}.steps-progress-skeleton .field-row:nth-of-type(2) .bottom::after{width:400px}.steps-progress-skeleton header .title,.steps-progress-skeleton header .sub-title,.steps-progress-skeleton .field-row .top::before,.steps-progress-skeleton .field-row .bottom::after,.steps-progress-skeleton .field-row .bottom::before,.steps-progress-skeleton .field-row:nth-of-type(2) .top::after{background:rgba(0,0,0,.11);-webkit-animation:pulse 2s ease-in-out .5s infinite;animation:pulse 2s ease-in-out .5s infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-accordion header,.rank-math-accordion-content .cmb-type-select:not(.no-flex),.rank-math-accordion-content .field-type-select:not(.no-flex),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}PK     ’ŠU]Q®éþ³  þ³    assets/admin/css/common.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	common.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@font-face{font-family:"Rank-Math";font-weight:normal;font-style:normal;font-display:block;src:url("../fonts/Rank-Math.ttf?v1.0.95") format("truetype"),url("../fonts/Rank-Math.woff?v1.0.95") format("woff"),url("../fonts/Rank-Math.svg?v1.0.95#Rank-Math") format("svg")}[class^=rm-icon-],[class*=" rm-icon-"]{font-family:"Rank-Math" !important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.rm-icon-content-ai:before{content:"î¤‰"}.rm-icon-bot:before{content:"î¨ "}.rm-icon-enter-key:before{content:"î¤ˆ"}.rm-icon-send:before{content:"î¤‡"}.rm-icon-seo-description:before{content:"î¨µ"}.rm-icon-search-console:before{content:"îµ±"}.rm-icon-adsense:before{content:"î®™"}.rm-icon-role-manager:before{content:"î¨º"}.rm-icon-software:before{content:"îªš"}.rm-icon-calendar:before{content:"î©ƒ"}.rm-icon-cart:before{content:"îµ³"}.rm-icon-post-format:before{content:"î±¤"}.rm-icon-fact-check:before{content:"î¯·"}.rm-icon-tick:before{content:"î®�"}.rm-icon-recipe:before{content:"î°»"}.rm-icon-circle-plus:before{content:"î®Ÿ"}.rm-icon-service:before{content:"î±¦"}.rm-icon-cross:before{content:"î¯ª"}.rm-icon-code:before{content:"î±§"}.rm-icon-settings:before{content:"î© "}.rm-icon-comments-reply:before{content:"î±¿"}.rm-icon-comments:before{content:"î´µ"}.rm-icon-dataset:before{content:"î³¸"}.rm-icon-schema:before{content:"î®—"}.rm-icon-direction:before{content:"î³‰"}.rm-icon-desktop:before{content:"î©§"}.rm-icon-mail:before{content:"î¶Ž"}.rm-icon-import:before{content:"î©š"}.rm-icon-export:before{content:"î©�"}.rm-icon-eye:before{content:"î®¤"}.rm-icon-facebook:before{content:"î¶¥"}.rm-icon-htaccess:before{content:"î©¯"}.rm-icon-robots:before{content:"î©°"}.rm-icon-movie:before{content:"î·�"}.rm-icon-category:before{content:"î©¶"}.rm-icon-images:before{content:"î­ª"}.rm-icon-google:before{content:"î¤…"}.rm-icon-course:before{content:"î±°"}.rm-icon-heart-filled:before{content:"î®¬"}.rm-icon-home:before{content:"î´�"}.rm-icon-image:before{content:"îª "}.rm-icon-info:before{content:"î®´"}.rm-icon-instagram:before{content:"î»º"}.rm-icon-stories:before{content:"î³§"}.rm-icon-acf:before{content:"î³«"}.rm-icon-book:before{content:"î±³"}.rm-icon-light-bulb:before{content:"î½ "}.rm-icon-howto:before{content:"î®¼"}.rm-icon-faq:before{content:"î®½"}.rm-icon-local-seo:before{content:"îª‡"}.rm-icon-job:before{content:"î´º"}.rm-icon-misc:before{content:"îª�"}.rm-icon-mail-reply:before{content:"î¿ž"}.rm-icon-podcast:before{content:"î¿®"}.rm-icon-copy:before{content:"î¤†"}.rm-icon-mobile:before{content:"î¨®"}.rm-icon-social:before{content:"î±¶"}.rm-icon-music:before{content:"î¯ˆ"}.rm-icon-sitemap:before{content:"î©�"}.rm-icon-post:before{content:"îµ�"}.rm-icon-attachment:before{content:"î¶ƒ"}.rm-icon-edit:before{content:"î±¸"}.rm-icon-pencil:before{content:"ï‚¨"}.rm-icon-plus:before{content:"î¯Ž"}.rm-icon-help:before{content:"î¯’"}.rm-icon-restaurant:before{content:"î±–"}.rm-icon-analyzer:before{content:"îª©"}.rm-icon-search:before{content:"îª«"}.rm-icon-star-filled:before{content:"îª³"}.rm-icon-star:before{content:"îªµ"}.rm-icon-support:before{content:"îµ¤"}.rm-icon-tag:before{content:"î¶‘"}.rm-icon-target:before{content:"î¶•"}.rm-icon-text-align-left:before{content:"ïŒµ"}.rm-icon-text:before{content:"ïŒ¸"}.rm-icon-heading:before{content:"ïŒ»"}.rm-icon-thumbs-up:before{content:"ï�…"}.rm-icon-instant-indexing:before{content:"î¯¡"}.rm-icon-toolbox:before{content:"î´Ÿ"}.rm-icon-trash:before{content:"îªº"}.rm-icon-redirection:before{content:"î­°"}.rm-icon-twitter:before{content:"ï��"}.rm-icon-link:before{content:"îªƒ"}.rm-icon-seo-title:before{content:"ï��"}.rm-icon-user:before{content:"ï�˜"}.rm-icon-users:before{content:"î«„"}.rm-icon-video:before{content:"î­³"}.rm-icon-404:before{content:"î¯¨"}.rm-icon-seo:before{content:"ï�»"}.rm-icon-page:before{content:"î²†"}.rm-icon-youtube:before{content:"ï’…"}.rm-icon-rank-math:before{content:"î¤„"}.rm-icon-bank-3:before{content:"î¤€"}.rm-icon-map-marker-11:before{content:"î¤�"}.rm-icon-wallet-1-dollar:before{content:"î¤‚"}.rm-icon-info-circle:before{content:"î¤ƒ"}.rm-icon-bulb-1:before{content:"î¤Š"}.rm-icon-off:before{content:"ï’†"}.rm-icon-ai-visibility:before{content:"ï’‡"}.rank-math-header{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:20px;margin-left:-20px;padding:13px 15px;border-bottom:1px solid #b5bfc9;background:#fff;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-header .rank-math-logo{position:relative;margin-right:15px;padding-right:15px}.rank-math-header .rank-math-logo:after{position:absolute;top:0;right:0;width:1px;height:66px;margin:-12px 0;content:"";background:#b5bfc9}.rank-math-header .rank-math-logo a{text-decoration:none}.rank-math-header .rank-math-logo a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-header .rank-math-logo i{font-size:28px;line-height:40px;position:relative;display:block;width:40px;height:40px;text-align:center;color:#fff;border-radius:5px;background:linear-gradient(-135deg, #f080f3, #202687);text-shadow:0 1px 3px rgba(0,0,0,.1)}@supports(-moz-appearance: none){.rank-math-header .rank-math-logo i{line-height:40px}}.rank-math-header .rank-math-logo-text{font-size:22px;font-weight:500;margin:11px auto 0 0}.rank-math-header .rank-math-logo-text a{text-decoration:none}.rank-math-header .rank-math-logo-text a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-header .rank-math-logo-text span.rank-math-pro-badge{vertical-align:4px}.rank-math-header .rank-math-logo-text .emoji{-webkit-animation:beat .25s infinite alternate;animation:beat .25s infinite alternate;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes beat{to{-webkit-transform:scale(0.9);transform:scale(0.9)}}@keyframes beat{to{-webkit-transform:scale(0.9);transform:scale(0.9)}}.rank-math-header .rank-math-logo-text .rank-math-tooltip span{width:100px}.rank-math-header a.rank-math-help{font-size:24px;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:5px;padding:0 3px;color:#858b90;border:0;background:rgba(0,0,0,0);-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap;-ms-flex-pack:distribute;justify-content:space-around}.rank-math-header a.rank-math-help:focus,.rank-math-header a.rank-math-help:hover{background:rgba(0,0,0,0)}.rank-math-header a.rank-math-help i{font-size:2rem;width:auto;height:auto;margin:0 !important;line-height:1 !important}@supports(-moz-appearance: none){.rank-math-header a.rank-math-help i:before{vertical-align:initial}}.rank-math-page{overflow-x:hidden;background:#e1e1e1}.rank-math-page div.notice:not(.rank-math-notice):not(.settings-error):not(.cmb-type-notice),.rank-math-page .update-nag{display:none}.rank-math-page .rank-math-breadcrumbs{font-size:13px;font-weight:500;line-height:1;text-transform:uppercase;color:#7f868d}.rank-math-page .rank-math-breadcrumbs-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;width:1020px;max-width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-page .rank-math-breadcrumbs .active{color:#242628}.rank-math-page .rank-math-breadcrumbs .divider{margin:0 5px}.rank-math-page .rank-math-mode-selector{font-size:14px;margin:5px 10px 0 0}.rank-math-page .rank-math-mode-selector a,.rank-math-page .rank-math-mode-selector button.is-link{display:inline-block;padding:5px 0 1px;text-decoration:none;color:#7f868d !important}.rank-math-page .rank-math-mode-selector a:hover,.rank-math-page .rank-math-mode-selector a.active,.rank-math-page .rank-math-mode-selector a.is-active,.rank-math-page .rank-math-mode-selector button.is-link:hover,.rank-math-page .rank-math-mode-selector button.is-link.active,.rank-math-page .rank-math-mode-selector button.is-link.is-active{color:#242628 !important;border-bottom:1px solid !important}.rank-math-page .rank-math-mode-selector a:first-child,.rank-math-page .rank-math-mode-selector button.is-link:first-child{margin-right:7px !important}.rank-math-page div.rank-math-tab-nav{position:relative;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:auto;margin-bottom:-1px;white-space:nowrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row}@media screen and (min-width: 64rem){.rank-math-page div.rank-math-tab-nav{overflow-x:visible}}.rank-math-page .rank-math-tools-wrap div.rank-math-tab-nav{width:1020px}.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content){font-size:15px;font-weight:500;line-height:39px;position:relative;margin:0;padding:0 15px;text-decoration:none;color:#5b646c;border:1px solid #b5bfc9;border-right:0;border-bottom:0;border-bottom:1px solid #b5bfc9;background:#f0f2f4}.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content):hover,.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content):focus,.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content).is-active{color:#1a1e22;outline:none;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content).is-active{border-bottom:1px solid #f8f9fa}.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content):first-child{border-radius:4px 0 0 0}.rank-math-page .rank-math-tab:not(.rank-math-options-panel-content):last-of-type{border-right:1px solid #b5bfc9;border-radius:0 4px 0 0}.rank-math-page #wpwrap{overflow:hidden;background:#f0f2f4}.rank-math-page .dashboard-wrapper{position:relative;margin-bottom:.5rem;padding:30px 0;border-radius:0 6px 6px 6px;background:#f8f9fa}.rank-math-page .dashboard-wrapper:before{position:absolute;top:0;left:-180px;overflow:hidden;width:200vw;height:100%;padding-bottom:50px;content:"";border-top:1px solid #b5bfc9;border-bottom:1px solid #b5bfc9;background:#f8f9fa}.rank-math-page .dashboard-wrapper>div{position:relative}.rank-math-page .dashboard-wrapper>div>h2{margin-top:0;color:#242628}.rank-math-page .dashboard-wrapper>div>.description{font-size:1rem;margin-bottom:1.5rem}.rank-math-page.folded .dashboard-wrapper:before{left:-56px}.rank-math-page #wpfooter{padding:15px 20px;border-top:1px solid #b5bfc9;background:#fff}.rank-math-wrap{font-size:15px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin:20px 10px 0 0;color:#242628}@media screen and (min-width: 48rem){.rank-math-wrap{margin:20px 40px 0 0}}.rank-math-wrap .container{width:1020px;max-width:100%}.rank-math-wrap p,.rank-math-wrap .description{font-size:14px;font-style:normal;line-height:1.5}.rank-math-wrap h1,.rank-math-wrap h2,.rank-math-wrap h3,.rank-math-wrap h4,.rank-math-wrap h5,.rank-math-wrap h6{color:#242628}.rank-math-wrap .page-title,.rank-math-wrap h1{font-size:2.8em;font-weight:400;line-height:1.2em;margin:.2em 200px 0 0;padding:0;color:#242628}.rank-math-wrap>h2{font-size:2.7em;font-weight:300;line-height:1.3;margin:40px 0 .6em;text-align:center}.rank-math-wrap .page-title{font-size:2em;font-weight:400;line-height:1;margin:35px 0 20px}.rank-math-wrap h3{font-size:1.375rem;line-height:1.5;margin:1.25em 0 .6em}.rank-math-wrap h3.health-check-accordion-heading{font-size:inherit;line-height:inherit;margin:0;background:#f8f9fa}.rank-math-wrap h3.health-check-accordion-heading>button{background:rgba(0,0,0,0)}.rank-math-wrap ol li p{font-size:14px;font-weight:400}.rank-math-wrap .rank-math-text{font-size:19px;font-weight:400;line-height:1.6em;min-height:40px;margin:1.4em 200px 1em 0;color:#555d66}@media only screen and (max-width: 500px){.rank-math-wrap .rank-math-text,.rank-math-wrap h1{margin-right:0}.rank-math-wrap .rank-math-text{margin-bottom:.25em}}.wrap .rank-math-notice{margin:5px 0 15px}.wrap .rank-math-accordion-content .rank-math-notice{background:#fff;border:1px solid #b5bfc9;border-left-width:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);padding:1px 12px}.wrap .rank-math-accordion-content .rank-math-notice p{margin:.5em 0;padding:2px}.wrap .rank-math-accordion-content .rank-math-notice--error{border-left-color:#ee6a5e}.two-col{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between}.two-col .col{max-width:100%;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}#error-log-wrapper .rank-math-code-box,#error-log-wrapper .rank-math-textarea-control .components-textarea-control__input{color:#fff}@media screen and (min-width: 48rem){.two-col .col{-webkit-box-sizing:border-box;box-sizing:border-box;width:495px;max-width:48.53%}}.rank-math-box{position:relative;margin-bottom:1rem;background:#fff;border:1px solid #b5bfc9;border-radius:6px;padding:1.875rem}.rank-math-box.no-borders{border:0;padding:0;background:rgba(0,0,0,0)}.rank-math-box.no-padding{padding:0}.rank-math-box.no-padding footer{margin:1.875rem 0 0}.rank-math-box.switch-at-top .rank-math-switch{position:absolute;top:-12px;right:0}.rank-math-box.switch-at-top header{padding:0 20px}.rank-math-box.switch-at-top header h3{padding-top:14px}.rank-math-box header{line-height:55px}.rank-math-box header h3{color:#242628;position:relative;z-index:1;margin:0 0 20px}.rank-math-box header p{color:#7f868d;margin-top:0;padding:0 10px}.rank-math-box-content form .frm-submit p{display:inline-block;margin-left:10px}.rank-math-box footer{background:#f8f9fa;padding:1.25rem 1.875rem;margin:1.875rem -1.875rem -1.875rem;border:0;border-top:1px solid #b5bfc9;border-radius:0 0 6px 6px}.rank-math-page .button,.rank-math-page .button-secondary,.rank-math-page .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-page .button.active,.rank-math-page .button-secondary.active,.rank-math-page .is-secondary.active{color:hsl(210,5.7851239669%,40.5490196078%);border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.rank-math-page .button:focus:not(:disabled),.rank-math-page .button:hover:not(:disabled),.rank-math-page .button-secondary:focus:not(:disabled),.rank-math-page .button-secondary:hover:not(:disabled),.rank-math-page .is-secondary:focus:not(:disabled),.rank-math-page .is-secondary:hover:not(:disabled){color:#069de3;border-color:#069de3;background:#f8f9fa}.rank-math-page .button:focus,.rank-math-page .button-secondary:focus,.rank-math-page .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-page .button .dashicons,.rank-math-page .button-secondary .dashicons,.rank-math-page .is-secondary .dashicons{margin:0 3px 0 0}.rank-math-page .button.disabled,.rank-math-page .button-secondary.disabled,.rank-math-page .is-secondary.disabled{pointer-events:none}.rank-math-page .button-primary,.rank-math-page .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none;border-radius:3px}.rank-math-page .button-primary:focus:not(:disabled),.rank-math-page .button-primary:hover:not(:disabled),.rank-math-page .is-primary:focus:not(:disabled),.rank-math-page .is-primary:hover:not(:disabled){color:#fff;border-color:#08a7f1;background:#08a7f1}.rank-math-page .button-primary:focus,.rank-math-page .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-page .button-primary[disabled],.rank-math-page .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important;color:rgb(159.0364806867,222.8712446352,252.4635193133) !important}.rank-math-page .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.rank-math-page .is-blue:not(.default):hover,.rank-math-page .is-blue:not(.default):focus{border-color:rgb(56.5071428571,126.0357142857,217.9928571429);background:rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-page .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-page .is-green:not(.default){border-color:#10ac84;background:#10ac84}.rank-math-page .is-green:not(.default):hover,.rank-math-page .is-green:not(.default):focus{border-color:rgb(14.6978723404,158.0021276596,121.2574468085);background:rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-page .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-page .is-red:not(.default){border-color:#ed5e5e;background:#ed5e5e}.rank-math-page .is-red:not(.default):hover,.rank-math-page .is-red:not(.default):focus{border-color:hsl(0,79.8882681564%,61.9019607843%);background:hsl(0,79.8882681564%,61.9019607843%)}.rank-math-page .is-red:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%);box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%)}.rank-math-page .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-page .button-link-delete:hover,.rank-math-page .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.rank-math-page .button-link,.rank-math-page .is-link{border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-page .button-small,.rank-math-page .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.rank-math-page .button-xlarge,.rank-math-page .is-large{font-size:16px;line-height:44px;height:46px}.rank-math-page .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.rank-math-page .button-animated i{line-height:85px}.rank-math-page .button-animated:before{content:"";-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-page .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.rank-math-page .rank-math-help-icon:hover{color:#069de3}.rank-math-page .rank-math-highlight-button{padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.consent-box{background:#f6f7f9;padding:20px;border-radius:6px;margin-top:1rem}.consent-box input[type=checkbox]{float:left;margin-top:5px;margin-right:10px}.consent-box p{font-size:14px !important;line-height:1.7;margin:0;opacity:.8;overflow:hidden}.rank-math-pro-badge{vertical-align:middle;color:#fff;background:#00af80;background:linear-gradient(335deg, #00af80, #1cb076, #2db06c, #3cb061, #49b156, #56b04a, #63b03d, #6faf2e);font-size:11px;font-weight:normal;text-transform:uppercase;padding:4px 10px;border-radius:3px;margin-left:5px}.rank-math-pro-badge.pro{background:linear-gradient(335deg, #008360, #108a5d, #209158, #2f9752, #3f9e4c, #4ea443, #5eaa3a, #6faf2e);color:#fff}.rank-math-pro-badge.business{background:linear-gradient(335deg, #854cff, #765fff, #696eff, #5f7cff, #5887ff, #5892ff, #5c9cff, #66a5fa);color:#fff}.rank-math-pro-badge.agency{background:linear-gradient(335deg, #253142, #26364c, #263a56, #263f61, #27446b, #274976, #274d81, #28528c);color:#f7d070}.rank-math-pro-badge a{color:inherit;text-decoration:none}.rank-math-free-badge{padding:0 5px;line-height:14px;font-size:10px;color:#fff;background:#d63638;position:absolute;top:-5px;right:-5px;border-radius:10px}.rank-math-tabs>.cmb-row.tab-header{background:#f8f9fa;padding:30px;text-align:center;border:1px solid #b5bfc9;border-bottom:0;border-radius:6px 6px 0 0;display:block !important}.rank-math-tabs>.cmb-row.tab-header .rank-math-notice{margin:1rem 0 0}.rank-math-tabs-navigation:not(.rank-math-custom){float:left;width:200px;border-top:1px solid #b5bfc9}.rank-math-tabs-navigation:not(.rank-math-custom) a{font-size:15px;position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding:11px 15px;text-decoration:none;color:#5b6065;outline:none;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:.2s all linear;transition:.2s all linear}.rank-math-tabs-navigation:not(.rank-math-custom) a .rm-icon,.rank-math-tabs-navigation:not(.rank-math-custom) a .dashicons{font-size:20px;min-width:20px;margin-right:10px;vertical-align:-4px;text-align:center}.rank-math-tabs-navigation:not(.rank-math-custom) a.active,.rank-math-tabs-navigation:not(.rank-math-custom) a:focus,.rank-math-tabs-navigation:not(.rank-math-custom) a:hover{color:#069de3;background:#fff;border-left:3px solid}.rank-math-tabs-navigation:not(.rank-math-custom) a.active:after{position:absolute;top:0;right:-1px;width:1px;height:100%;content:"";background:#fff}.rank-math-tabs-navigation:not(.rank-math-custom) a:first-child,.rank-math-tabs-navigation:not(.rank-math-custom) a+a{border:solid #b5bfc9;border-width:0 0 1px 1px}.rank-math-tabs-navigation:not(.rank-math-custom) a:last-child{border-radius:0 0 0 6px}.rank-math-tabs-navigation:not(.rank-math-custom) .separator{font-weight:600;color:#5b6065;background:hsl(210,15.625%,92.4509803922%);display:block;padding:12px 15px 10px;border-left:1px solid #b5bfc9;border-bottom:1px solid #b5bfc9}.rank-math-tabs-navigation:not(.rank-math-custom) .separator+a{border-left:1px solid #b5bfc9;border-bottom:1px solid #b5bfc9}.rank-math-tabs-content:not(.rank-math-custom){overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:400px;margin-bottom:20px;padding:30px;border:1px solid #b5bfc9;border-radius:0;background:#fff}.rank-math-tabs-content:not(.rank-math-custom) .tab-header{display:none !important}.rank-math-tab h3:first-of-type{margin-top:0}.rank-math-tab .cmb-type-title:first-of-type{padding-top:0;text-align:center;border-top:0}.rank-math-tab .cmb2-checkbox-list li{display:inline-block;width:49%}.rank-math-tab .cmb2-checkbox-list li{display:inline-block;width:49%}.rank-math-tab .cmb-advanced-robots-list li{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33%;padding:0 1% 0 0}.rank-math-tab .cmb-advanced-robots-list li:last-child{padding-right:0}.rank-math-tab .cmb-advanced-robots-list li label{display:inline-block;margin-bottom:5px}.rank-math-tab .cmb-advanced-robots-list li label input[type=checkbox]{margin-right:2px}.rank-math-tab .cmb-advanced-robots-list li .rank-math-tooltip{margin-left:3px}.form-footer:not(.rank-math-custom){border:1px solid #b5bfc9;border-top:0;border-radius:0 0 6px 6px}.rank-math-tooltip{position:relative;cursor:pointer;color:#b5bfc9;display:inline-block;line-height:20px;height:20px;z-index:1}.rank-math-tooltip em{line-height:20px}.rank-math-tooltip>span{font-size:11px;font-weight:400;line-height:1.5;white-space:normal;width:200px;padding:8px 10px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);text-align:center;pointer-events:none;opacity:0;color:#fff;border-radius:3px;background:#555d66;position:absolute;bottom:100%;left:50%}.rank-math-tooltip>span:after{content:"";-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);position:absolute;top:100%;left:50%;border-style:solid;height:0;width:0;border-color:#555d66 rgba(0,0,0,0) rgba(0,0,0,0);border-width:8px 7px 0}.rank-math-tooltip.bottom span{top:130%;bottom:auto;display:table}.rank-math-tooltip.bottom span:after{position:absolute;top:auto;bottom:100%;left:50%;-webkit-transform:rotate(180deg) translate3d(50%, 0, 0);transform:rotate(180deg) translate3d(50%, 0, 0)}.rank-math-tooltip.left span{right:0%;-webkit-transform:translate3d(-90%, 0, 0);transform:translate3d(-90%, 0, 0)}.rank-math-tooltip.left span:after{left:90%}.rank-math-tooltip:hover{color:#069de3}.rank-math-tooltip:hover span{bottom:130%;opacity:1;z-index:1}.import_export .no-borders{margin-top:2rem}.rank-math-import-export>div{margin-bottom:3rem}.rank-math-import-export>div>h2{font-size:1.375rem;margin-top:0;margin-bottom:.825rem}.rank-math-import-export>div>p.description{font-size:1rem;margin-bottom:1.5rem}.rank-math-import-export .rank-math-box-content{padding:.875rem}.rank-math-import-export .rank-math-box-content p:first-child{margin-top:0}.rank-math-import-export .rank-math-box-content input[type=checkbox]{margin-top:-1px}.rank-math-import-export .rank-math-box-content footer{margin:.875rem -0.875rem -0.875rem;padding:.875rem}.rank-math-import-export .rank-math-export-form .form-table{margin-top:0}.rank-math-import-export .rank-math-export-form .form-table ul{margin:0}.rank-math-import-export .rank-math-export-form ul{margin-top:0}.rank-math-import-export .rank-math-export-form th,.rank-math-import-export .rank-math-export-form td{padding:0}.rank-math-import-export .rank-math-export-form .empty-notice{padding:0 1rem}.rank-math-import-export .rank-math-settings-backup-form .list-table.with-action{background:#fff}.rank-math-import-export .rank-math-settings-backup-form .list-table.with-action td,.rank-math-import-export .rank-math-settings-backup-form .list-table.with-action th{border:0}.rank-math-import-export .rank-math-settings-backup-form .list-table.with-action tr:not(:last-child){border-bottom:1px solid #b5bfc9}@media screen and (max-width: 782px){.rank-math-import-export .rank-math-settings-backup-form .list-table.with-action td{text-align:left}}.rank-math-box-inner>*{display:none}.rank-math-box-inner>.active-tab{display:block}.rank-math-box-tabs{border-bottom:1px solid #b5bfc9;background:#f8f9fa;border-radius:6px 6px 0 0}.rank-math-box-tabs>a{color:#5b6065;font-size:.825rem;font-weight:500;line-height:46px;position:relative;float:left;padding:0 15px;text-decoration:none;-webkit-box-shadow:none;box-shadow:none;border-right:1px solid #b5bfc9}.rank-math-box-tabs>a:first-child{border-radius:6px 0 0 0}.rank-math-box-tabs>a:hover{color:#069de3}.rank-math-box-tabs>a.active-tab{color:#069de3;background:#fff}.rank-math-box-tabs>a.active-tab:after{position:absolute;bottom:-1px;left:0;width:100%;height:1px;content:"";background:#fff}.rank-math-box-tabs>a .rm-icon{vertical-align:-4px;margin-right:3px;font-size:18px;font-weight:600}.invalid,.widefat.invalid,.wp-admin .invalid,.wp-admin .widefat.invalid{border-color:#dd2c00 !important;background:pink}.invalid~.validation-message,.widefat.invalid~.validation-message,.wp-admin .invalid~.validation-message,.wp-admin .widefat.invalid~.validation-message{display:inline-block}.validation-message{font-size:12px;font-style:italic;display:none;overflow:hidden;margin-top:5px;margin-left:2px;padding:4px 8px;-webkit-transition:.28s;transition:.28s;vertical-align:middle;color:#fff;border-radius:3px;background:#dd2c00}span.input-loading{display:inline-block;margin:0 0 0 16px;background:url("../img/loader.svg") no-repeat center 4px;background-size:contain;height:24px;width:16px}body .cmb2-wrap .cmb2-id-console-profile .regular-text,body .cmb2-wrap .cmb2-id-console-profile select,body .cmb2-wrap .cmb2-id-console-authorization-code .regular-text,body .cmb2-wrap .cmb2-id-console-authorization-code select{display:inline-block;max-width:60%;margin-right:10px}body .cmb2-wrap .cmb2-id-console-authorization-code .button-secondary{margin-top:5px}.wizard-share{vertical-align:3px}.wizard-share a{font-size:12px;font-weight:700;line-height:24px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-left:5px;padding:0 15px 0 10px;text-decoration:none;color:#fff;border-radius:3px;background:#3b5998}.wizard-share a.share-twitter{background:#55acee}.wizard-share .dashicons{font-size:14px;line-height:24px;height:auto;margin-right:-2px}#gsc-dp-info{font-weight:bold}textarea.rank-math-code-box,textarea.rank-math-code-box:focus,div.rank-math-code-box textarea,div.rank-math-code-box textarea:focus{width:100%;color:#bbbec5;border-color:#32344b;background:#32344b}textarea.rank-math-code-box:disabled,textarea.rank-math-code-box:focus:disabled,div.rank-math-code-box textarea:disabled,div.rank-math-code-box textarea:focus:disabled{color:hsl(222,7.9365079365%,72.2941176471%)}.rank-math-code-box div.cmb-td{width:100% !important}#new_post_type{-webkit-box-sizing:border-box;box-sizing:border-box;width:1020px;max-width:100%}.rank-math-notice{border-radius:4px}.rank-math-notice .rm-icon{font-size:18px;display:inline-block;height:16px;margin-right:8px;vertical-align:-6px;opacity:.8}.rank-math-notice .notice-info,.rank-math-notice .notice-warning,.rank-math-notice .notice-error{border-radius:4px}.update-message p.rank-math-beta-update-notice{font-weight:bold}.update-message p.rank-math-beta-update-notice:before{content:"ï”´"}.updating-message p.rank-math-beta-update-notice,.updated-message p.rank-math-beta-update-notice{display:none}.rank-math-mode-basic .rank-math-advanced-option{display:none !important}#footer-thankyou{font-style:normal}.text-center{text-align:center}.rank-math-gray-box{margin-top:2rem !important;padding:25px 35px;border-radius:5px;background:#f5f5f5}.notice-connect-disabled{font-size:14px !important;display:block !important;margin-top:1em !important;padding:.8em 1.2em}#html_sitemap_sort option[disabled]{display:none}body.rtl .rank-math-header{margin-right:-20px;margin-left:0}body.rtl .rank-math-header .rank-math-logo{margin-right:0;padding-right:0;margin-left:15px;padding-left:15px}body.rtl .rank-math-header .rank-math-logo:after{right:auto;left:0}body.rtl .rank-math-header .rank-math-logo-text{margin-right:0;margin-left:auto}body.rtl .rank-math-search-options{float:left}body.rtl .rank-math-search-options .search-field{float:right}body.rtl .rank-math-search-options .search-field input{margin:0 0 0 5px}body.rtl .rank-math-wrap{margin-right:0;margin-left:40px}body.rtl .rank-math-wrap h1,body.rtl .rank-math-wrap .page-title{margin-right:0;margin-left:200px}body.rtl .rank-math-wrap .rank-math-text{margin-right:0;margin-left:200px}body.rtl.rank-math-page .dashboard-wrapper:before{right:-180px;left:auto}body.rtl.rank-math-page .nav-tab{border-right:1px solid #b5bfc9;border-left:0;margin-right:0}body.rtl.rank-math-page .nav-tab:first-child{border-radius:0 4px 0 0}body.rtl.rank-math-page .nav-tab:last-child{border-radius:4px 0 0 0;border-left:1px solid #b5bfc9}body.rtl.rank-math-page .rank-math-mode-selector a{margin-right:0;margin-left:7px}body.rtl .rank-math-tab .cmb-advanced-robots-list li{padding:0 0 0 1%}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom){float:right;margin-right:0}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a .rm-icon{margin-right:0;margin-left:10px}body.rtl .cmb2-wrap .cmb-type-textarea .button,body.rtl .cmb2-wrap .cmb-type-textarea-small .button{border-width:1px 1px 0 0}body.rtl .rank-math-ui .button .dashicons{margin:0 0 0 3px}body.rtl .components-modal__header-heading-container{-webkit-box-pack:right;-ms-flex-pack:right;justify-content:right}body.rtl #rank-math-pro-cta ul li:before{margin-right:0;margin-left:8px}.rank-math-preview-title,.rank-math-variables-preview{font-family:arial,sans-serif;max-width:600px;margin-top:15px;color:#1a0dab;border-radius:4px}.rank-math-preview-title:empty,.rank-math-variables-preview:empty{display:none}.rank-math-preview-title:before,.rank-math-variables-preview:before{font-size:10px;font-weight:600;display:block;margin:0 0 8px;content:attr(data-title);letter-spacing:.15em;text-transform:uppercase;color:#aaa}.rank-math-variables-wrap{position:relative}.rank-math-variables-wrap input,.rank-math-variables-wrap textarea{padding-right:50px !important}.cmb2-wrap .cmb-type-textarea .button.button-secondary,.cmb2-wrap .cmb-type-textarea-small .button.button-secondary{top:auto;right:1px;bottom:1px;border-width:1px 0 0 1px;border-radius:3px 0 3px 0}.cmb2-wrap .cmb-type-textarea .button.button-secondary+.rank-math-variables-dropdown,.cmb2-wrap .cmb-type-textarea-small .button.button-secondary+.rank-math-variables-dropdown{top:70px;right:0}.cmb2-wrap .cmb-type-textarea textarea,.cmb2-wrap .cmb-type-textarea-small textarea{display:block;resize:none}a.rank-math-variables-button.button-secondary{line-height:40px;height:auto;padding:0 10px;color:#858b90;border-width:0 0 0 1px;border-radius:0 3px 3px 0;-webkit-box-shadow:none;box-shadow:none;position:absolute;top:1px;right:0;bottom:1px}a.rank-math-variables-button.button-secondary .dashicons{font-size:20px;line-height:40px;height:auto;margin-right:0}a.rank-math-variables-button.button-secondary:hover{border-color:#b5bfc9;background:#f8f9fa}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;max-width:450px;border:1px solid #b5bfc9;border-radius:6px;background:#fff;position:absolute;top:48px;right:0;height:220px;width:80%}.rank-math-variables-dropdown input[type=text]{margin:10px;border-color:#b5bfc9;background:#fff;height:34px;width:calc(100% - 20px)}.rank-math-variables-dropdown input[type=text]:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li:last-of-type{border-bottom:0}.rank-math-variables-dropdown li span{font-style:italic;display:block;padding-top:.2em;color:#7f868d}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:3px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4;position:absolute;top:4px;right:10px}.dropdown-up .rank-math-variables-dropdown{top:auto;bottom:100%}.rank-math-preview-title>div{display:inline-block;min-width:400px}.rank-math-preview-title h5{font-size:18px;font-weight:normal;line-height:22px;margin:0;color:#1a0dab}.rank-math-preview-title span{line-height:16px;height:17px;color:#006621}.list-table{border:1px solid #b5bfc9;border-radius:6px}.list-table+.notice{margin-top:10px}.list-table .empty-notice{font-weight:600;padding-left:15px}.list-table table{margin:0}.list-table th,.list-table td{padding:12px 15px;border-bottom:1px solid #b5bfc9}.list-table tr:last-child th,.list-table tr:last-child td{border:0}.list-table th strong{font-size:16px;display:block}.list-table .cmb2-checkbox-list li{display:inline-block;width:48%;margin:10px 0 0}.list-table .cmb2-checkbox-list label{font-weight:400}.list-table.with-action th{width:auto;vertical-align:middle}.list-table.with-action td:last-child{text-align:right}.list-table.with-action td:last-child .button+.button{margin-left:5px}.list-table.with-action.at-top td:last-child{vertical-align:top}.list-table.with-action .choices td{padding-top:0;text-align:left}.list-table.with-action .importer-header th,.list-table.with-action .importer-header td{border-bottom:none}@media screen and (max-width: 1020px){body .rank-math-wrap h1,body .rank-math-wrap .page-title{margin-right:0}}@media screen and (max-width: 782px){.form-table input.regular-text{height:36px}body .cmb2-wrap select{padding:0}body .rank-math-wrap .cmb-row.cmb-type-file .regular-text:not([type=hidden])+.cmb2-upload-button{line-height:35px}body .rank-math-wrap .rank-math-search-options .search-field input{width:200px}body .rank-math-wrap .cmb2-id-console-profile select{max-width:100%}body .rank-math-wrap .cmb2-id-console-profile button{margin-top:5px}body .rank-math-wrap .rank-math-rss-variables thead th,body .rank-math-wrap .rank-math-rss-variables tbody td{margin-bottom:0}body .rank-math-wrap input[type=checkbox]:checked:before,body .rank-math-wrap .cmb2-wrap input[type=checkbox]:checked:before{font-size:30px}body #rank-math-redirection-popup .media-modal{left:0;height:100%}body .rank-math-wrap .module-listing .two-col .col{width:100%;min-width:100%;max-width:100%}body .rank-math-wrap .rank-math-systm-status td,body .rank-math-wrap .rank-math-systm-status th{border:0;border-bottom:1px solid #ededed}}@media only screen and (max-width: 768px){body .rank-math-wrap .rank-math-tabs-navigation:not(.rank-math-custom),body .rank-math-wrap.rank-math-wrap-settings .form-footer{width:100%;margin:0}}@media only screen and (max-width: 640px){body .rank-math-wrap .rank-math-tabs-content:not(.rank-math-custom){padding:15px}body .rank-math-wrap .rank-math-search-options{width:100%;margin-bottom:15px}body .cmb2-wrap .cmb-row{padding:15px 0}body .rank-math-wrap .cmb-row .cmb-th{max-width:100%;margin-bottom:5px}body .rank-math-wrap .rank-math-ui.settings-footer input{padding:0 25px}body .rank-math-wrap .rank-math-box-help.two-col .col{width:100%;min-width:100%;max-width:100%}body .rank-math-social-preview-item{padding:10px}}@media only screen and (max-width: 595px){body .rank-math-wrap h1,body .rank-math-wrap .page-title{font-size:30px}body .rank-math-wrap .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-remove-field-row{padding-top:0}body .rank-math-wrap .cmb2-wrap .cmb-row.cmb-type-file .regular-text{width:100%;margin-top:5px;border-radius:3px}body .rank-math-metabox-wrap .rank-math-tab{padding:15px}body .rank-math-redirections-wrap .wp-heading-inline a{display:inline-block}body .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .dashicons{font-size:18px;margin-right:0;padding-bottom:2px;padding-left:2px}body .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .rank-math-tab-text{display:none}body .cmb2-wrap .cmb-row.cmb-row-33,body .cmb2-wrap .cmb-row.cmb-row-50{width:100%}body .cmb2-wrap .cmb-row.cmb-row-33 .cmb-th,body .cmb2-wrap .cmb-row.cmb-row-33 .cmb-td,body .cmb2-wrap .cmb-row.cmb-row-50 .cmb-th,body .cmb2-wrap .cmb-row.cmb-row-50 .cmb-td{padding:0}}@-webkit-keyframes pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}@keyframes pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}p.field-description{padding-top:.5em;margin:0;color:#666;letter-spacing:.01em}.form-table{width:100%;margin-top:.5em;border-collapse:collapse;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.field-metabox{margin:0;clear:both}.field-metabox>.field-row:first-of-type>.field-td,.field-metabox>.field-row:first-of-type>.field-th,.field-metabox.field-list>.field-row:first-of-type>.field-td,.field-metabox.field-list>.field-row:first-of-type>.field-th{border:0}.field-metabox .note{margin-right:5px;padding:2px 6px;border-radius:3px;color:#794800;background:rgba(255,190,95,.5)}.field-th{float:left;width:200px;padding:20px 10px 20px 0;color:#222;font-weight:600;vertical-align:top}.field-th label{display:block;padding:5px 0}.field-th+.field-td{float:left}.field-td{max-width:100%;padding:15px 10px;line-height:1.3;vertical-align:middle}[id^=field-metabox-rank] .field-row{margin:0;padding:25px 0}[id^=field-metabox-rank] .field-row:not(.field-type-title):last-of-type{padding-bottom:0}[id^=field-metabox-rank] .field-row.rank-math-advanced-option~.rank-math-advanced-option,[id^=field-metabox-rank] .field-row:not(.rank-math-advanced-option):not(.tab-header):not(.field-type-notice)~.field-row:not(.rank-math-advanced-option):not(.rank-math-notice-field){border-top:1px solid #dadfe4;border-bottom:0}[id^=field-metabox-rank] .field-row .field-td,[id^=field-metabox-rank] .field-row .field-th{padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}[id^=field-metabox-rank] .field-row .field-th{width:25%;max-width:200px;color:#242628}[id^=field-metabox-rank] .field-row .field-th label{padding:0 15px 0 0}[id^=field-metabox-rank] .field-row .field-th+.field-td{float:left;width:75%}[id^=field-metabox-rank] .field-row.field-type-notice{padding:5px 0 15px}[id^=field-metabox-rank] .field-row.field-type-notice .rank-math-notice{width:auto;margin:0;font-size:14px;font-style:normal;line-height:1.5}[id^=field-metabox-rank] .field-row.field-type-checkboxlist .rank-math-button.field-multicheck-toggle,[id^=field-metabox-rank] .field-row.field-type-repeatableGroup .rank-math-button.field-multicheck-toggle{margin-bottom:1rem}[id^=field-metabox-rank] .field-row.field-type-checkboxlist:not(.field-big-labels) .rank-math-checkbox-list li,[id^=field-metabox-rank] .field-row.field-type-repeatableGroup:not(.field-big-labels) .rank-math-checkbox-list li{display:inline-block;width:49%;margin:1px 0 5px 0}[id^=field-metabox-rank] .field-row.rank-math-advanced-robots-field .field-td{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:5px}[id^=field-metabox-rank] .field-row.rank-math-advanced-robots-field .field-td .components-checkbox-control{margin-bottom:5px}[id^=field-metabox-rank] .field-row.field-id-console{width:75%;padding-top:0}[id^=field-metabox-rank] .field-row.field-id-console .rank-math-button{margin-top:20px}[id^=field-metabox-rank] .field-row.field-id-indexnow_api_key #indexnow_api_key__help{margin-bottom:0}[id^=field-metabox-rank] .field-row.field-id-indexnow_history .rank-math-button{gap:0;margin:20px 0;text-decoration:none}[id^=field-metabox-rank] .field-row.field-id-indexnow_history .rank-math-button .dashicons{width:auto !important;height:auto !important;padding:0}[id^=field-metabox-rank] .field-row.field-id-analytics{padding-top:0}[id^=field-metabox-rank] .field-row.field-id-analytics .notice-connect-disabled{margin-top:0 !important}[id^=field-metabox-rank] .field-row.field-id-analytics .field-wrap{padding:0;border:0}[id^=field-metabox-rank] .field-row.field-id-content_ai_credits .rank-math-button.update-credits{min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;margin:2px 0 20px;padding:0;border:0;color:#b5bfc9;background:none}[id^=field-metabox-rank] .field-row.field-id-content_ai_credits .rank-math-button.update-credits:hover{color:#069de3}[id^=field-metabox-rank] .field-description{padding-top:10px;color:#7f868d;font-size:14px;font-style:normal}[id^=field-metabox-rank] .field-description code{background:rgba(0,0,0,.05)}[id^=field-metabox-rank] .rank-math-desc{color:#7e8993;margin-top:0}[id^=field-metabox-rank] .media-status .img-status img{-webkit-box-shadow:0 0 0 1px #e9e9e9;box-shadow:0 0 0 1px #e9e9e9;outline:none}.field-list>.field-row{vertical-align:top}.field-wrap{margin:0}.field-wrap .field-row{position:relative;margin:0}.field-wrap .field-row::after{content:"";display:block;width:100%;clear:both}.field-wrap .field-row .buy-more-credits{color:#7f868d;padding-top:0}.field-wrap .field-row .buy-more-credits strong{color:#242628;opacity:.8}.field-wrap+footer.form-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:20px;margin:30px -1.875rem -1.875rem;border:0;border-top:1px solid #c3c4c7;border-radius:0 0 6px 6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:auto;text-align:center;overflow:hidden}.field-wrap+footer.form-footer .rank-math-button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.field-wrap ul{margin:0}.field-wrap li{margin:1px 0 5px 0;font-size:14px;line-height:16px}.field-disabled{opacity:.4;pointer-events:none}@media screen and (max-width: 782px){.form-table label{font-size:14px}}@media screen and (max-width: 640px){.field-td .rank-math-button.toggle-all-capabilities{margin:1em 0 1.7em}[id^=field-metabox-rank] .field-row .field-td,[id^=field-metabox-rank] .field-row .field-th label{padding:0 0 15px 2px}[id^=field-metabox-rank] .field-row .field-td,[id^=field-metabox-rank] .field-row .field-th{width:100%;padding:0}.field-wrap .field-row{padding:15px 0}}@media screen and (max-width: 450px){.field-th{display:block;float:none;width:100%;padding-bottom:1em;font-size:1.2em;text-align:left}.field-th label{display:block;margin-top:0;margin-bottom:.5em}.field-td,.field-th+.field-td{display:block;float:none;width:100%}}.field-disabled{opacity:.4;pointer-events:none}PK     ’ŠU]`Á�šu  u  !  assets/admin/css/option-panel.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	option-panel.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.rank-math-wrap-settings{width:978px;max-width:100%}.rank-math-wrap-settings .rank-math-tabs-content{margin-bottom:0}.rank-math-wrap-settings .form-footer{width:calc(100% - 200px);margin-left:200px;padding:20px}.rank-math-wrap-settings .rank-math-address-format .rank-math-variables-dropdown{top:70px;height:185px}.rank-math-settings-notice{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:978px;max-width:100%;margin-top:15px;margin-left:0}.rank-math-tab-panel{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:141.5px !important;padding-bottom:10rem}.rank-math-tab-panel .components-tab-panel__tabs{min-width:200px}.rank-math-tab-panel .components-tab-panel__tabs .components-tab-panel__tabs-item:first-child{border-top:0}.rank-math-tab-panel .components-tab-panel__tab-content{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.rank-math-tab-panel .components-tab-panel__tab-content .field-wrap{padding:30px;border:1px solid #b5bfc9;border-top:0;border-bottom:0;background:#fff}.rank-math-tab-panel .components-tab-panel__tab-content .form-footer{position:absolute;top:calc(100% - 1px);margin:0;width:100%;border:1px solid #b5bfc9}@media screen and (max-width: 768px){.rank-math-tab-panel{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical]{border-top:0;border-radius:0;overflow:hidden}.rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:last-child{border-radius:0 !important}.rank-math-tab-panel .components-tab-panel__tab-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:unset !important}.rank-math-tab-panel .components-tab-panel__tab-content .rank-math-tab-header{width:100%;height:120px;padding:0;margin-left:0}.rank-math-tab-panel .components-tab-panel__tab-content .rank-math-tab-header h2{font-size:22px}.rank-math-tab-panel .components-tab-panel__tab-content .rank-math-tab-header p{margin:0 8px}.rank-math-tab-panel .components-tab-panel__tab-content .form-footer{position:unset}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex),.rank-math-accordion-content .field-type-select:not(.no-flex),.rank-math-accordion header,#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex),.rank-math-accordion-content .field-type-select:not(.no-flex),.rank-math-accordion header,#rank-math-pro-cta .rank-math-cta-header,#rank-math-pro-cta .rank-math-cta-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.wizard-content--analytics .connect-wrap{display:grid;margin-bottom:4rem;margin-top:30px;place-items:center}.wizard-content--analytics .field-description{text-align:center}#setting-panel-analyitcs .connect-wrap{margin-bottom:1rem}#setting-panel-analyitcs .connect-wrap .button{font-size:16px;line-height:40px;padding:0 20px}#setting-panel-analyitcs .connect-wrap .button:before{display:none}.connect-actions{margin-bottom:.5rem;text-align:right}.connect-actions .button-link{margin:0 0 0 25px;text-decoration:none;line-height:normal;position:relative;color:#ff9f43;border-bottom:1px dotted #fff;padding:0;line-height:29px}.connect-actions .button-link:after{content:"|";color:#b5bfc9;position:absolute;right:-15px}.connect-actions .button-link:last-child:after{content:"";display:none}.connect-actions .button-link:focus,.connect-actions .button-link:hover{-webkit-box-shadow:none;box-shadow:none;background:rgba(0,0,0,0);color:#ff9f43;border-bottom-color:#ff9f43}.connect-actions .button-link.rank-math-disconnect-google{color:#ee6a5e}.connect-actions .button-link.rank-math-disconnect-google:hover,.connect-actions .button-link.rank-math-disconnect-google:focus{color:#ee6a5e;border-bottom-color:#ee6a5e}.rank-math-spinner{margin:0;height:14px;width:14px;display:inline-block;position:relative;color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #007cba));overflow:visible}.rank-math-spinner circle{fill:rgba(0,0,0,0);stroke-width:1.5px;stroke:#ddd}.rank-math-spinner path{fill:rgba(0,0,0,0);stroke-width:1.5px;stroke:currentcolor;stroke-linecap:round;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.rank-math-accordion{margin-bottom:1rem;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;border:1px solid #dadfe4;border-radius:6px;background:#fff}.rank-math-accordion:hover,.rank-math-accordion:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-accordion .cmb-row,.rank-math-accordion .field-row,.rank-math-accordion .rank-math-analytics-content .field-row,.rank-math-accordion .rank-math-adsense-content .field-row{padding:1rem 0 !important;border-top:0 !important}.rank-math-accordion .cmb-row .cmb-td,.rank-math-accordion .cmb-row .field-td,.rank-math-accordion .field-row .cmb-td,.rank-math-accordion .field-row .field-td,.rank-math-accordion .rank-math-analytics-content .field-row .cmb-td,.rank-math-accordion .rank-math-analytics-content .field-row .field-td,.rank-math-accordion .rank-math-adsense-content .field-row .cmb-td,.rank-math-accordion .rank-math-adsense-content .field-row .field-td{width:100%}.rank-math-accordion .cmb2-toggle,.rank-math-accordion .field-toggle{margin-right:5px}.rank-math-accordion header{line-height:1;padding:1rem;cursor:pointer;border-bottom:1px solid #dadfe4;border-radius:6px 6px 0 0;background:#f8f9fa;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-accordion header h3{font-size:1.25rem;line-height:1;margin:0}.rank-math-accordion header h3 .rank-math-connection-status{display:inline-block;width:14px;height:14px;content:"";border-radius:50%;background:#dadfe4}.rank-math-accordion header h3 .rank-math-connection-status-wrap{margin-right:.825rem}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-error{background:#ee6a5e}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-success{background:#79c979}.rank-math-accordion header h3 .rank-math-connection-status.rank-math-connection-status-warning{background:#ff9f43}.rank-math-accordion.connected h3:before{background:#79c979}.rank-math-accordion-content{padding:1rem}.rank-math-accordion-content .cmb-type-select label,.rank-math-accordion-content .field-type-select label{display:block;margin-bottom:.5rem}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col{margin-right:3%;-webkit-box-flex:0;-ms-flex:0 0 31.3333333%;flex:0 0 31.3333333%;max-width:31.3333333%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col:nth-of-type(3),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col:last-of-type,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col:nth-of-type(3),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col:last-of-type,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col:nth-of-type(3),.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col:last-of-type,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col:nth-of-type(3),.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col:last-of-type{margin-right:0}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view{margin-top:1rem;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view>*,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view>*,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view>*,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view>*{margin-right:.5rem}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view label,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view label,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view label,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view label{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view input,.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view input,.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view input,.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view input{width:auto}.rank-math-accordion-content .cmb-type-select:not(.no-flex) .cmb-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .cmb-type-select:not(.no-flex) .field-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .field-type-select:not(.no-flex) .cmb-row-col.create-new-view input:not(:hover):not(:focus),.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col.create-new-view input:not(:hover):not(:focus){border-color:#b5bfc9}.rank-math-accordion-content .field-type-select:not(.no-flex){-webkit-column-gap:3%;-moz-column-gap:3%;column-gap:3%;row-gap:15px;padding-bottom:0 !important}.rank-math-accordion-content .field-type-select:not(.no-flex) .field-row-col{-webkit-box-flex:1;-ms-flex:auto;flex:auto;width:268px;max-width:268px;margin:0}.rank-math-accordion-content .warning{font-size:14px;margin:0 0 1rem}.rank-math-accordion-content .cmb-td,.rank-math-accordion-content .field-td{width:100%}.rank-math-accordion-content .field-description,.rank-math-accordion-content .cmb2-metabox-description{text-align:left}#rank-math-pro-cta.analytics{margin-left:0}#rank-math-pro-cta.analytics .rank-math-cta-box{background:rgba(0,0,0,0)}#rank-math-pro-cta.rank-math-privacy-box{width:630px;max-width:100%;margin-top:3rem}#rank-math-pro-cta.rank-math-privacy-box.width-100{width:100%}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-table{border-width:2px;border-color:#10ac84}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body{background:rgba(16,172,132,.06)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body i{font-size:2rem;line-height:50px;width:50px;height:50px;margin-right:1.25rem;color:#10ac84;border-radius:50px;background:rgba(16,172,132,.1)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body p{font-size:.9375rem;margin:0;color:#5f8c80}#rank-math-pro-cta.rank-math-privacy-box{width:630px;max-width:100%;margin:3rem auto 0}.rank-math-tabs-content #rank-math-pro-cta.rank-math-privacy-box{width:100%}.next-fetch{float:left;margin-top:4px;color:#7f868d}.cancel-fetch{-webkit-transition:.25s linear all;transition:.25s linear all}.cancel-fetch:disabled{opacity:0}.rank-math-console-db-info{display:inline-block;margin:8px 8px 0 0;padding:5px 8px;border-radius:4px;background:#f6f6f6}.rank-math-console-db-info i{font-size:12px;margin-right:3px;vertical-align:-1px}#console_caching_control{margin-bottom:10px}#console-updating-manually-progress{position:relative;display:none;overflow:hidden;margin:10px 0;padding:8px;border-radius:4px;background:#f6f6f6}#console-updating-manually-progress .progress{overflow:hidden;height:100%;padding:8px;-webkit-transition:width 2s ease-in-out;transition:width 2s ease-in-out;white-space:nowrap;color:#fff;border-radius:3px;background:#008ec2;position:absolute;top:0;left:0}#setting-panel-analytics .select2-container{width:100% !important}.cmb2-id-console-authorization-code.unauthorized~div{display:none}.cmb2-id-console-authorization-code.unauthorized input,.cmb2-id-console-authorization-code.unauthorized button{display:none !important}.cmb2-id-console-authorization-code.authorizing input,.cmb2-id-console-authorization-code.authorizing button{display:inline-block !important}.cmb2-id-console-authorization-code.authorizing .rank-math-get-authorization-code{margin-top:10px}.cmb2-id-console-authorization-code.authorized #console_authorization_code{display:none}.cmb2-id-console-profile .rank-math-refresh{margin-right:10px}.cmb2-id-breadcrumbs-separator .cmb2-radio-list li label,.cmb2-id-title-separator .cmb2-radio-list li label{margin:0 5px 5px 0;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}.cmb2-id-breadcrumbs-separator .cmb2-radio-list li label span.custom-sep,.cmb2-id-title-separator .cmb2-radio-list li label span.custom-sep{line-height:24px;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:40px;min-height:24px;margin-top:5px;margin-right:-6px;margin-left:-6px;padding:0 8px;cursor:text;-webkit-transition:50ms border-color ease-in-out;transition:50ms border-color ease-in-out;text-align:center;color:#32373c;outline:0;background-color:#fff;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}.rank-math-rss-variables h3{font-size:1.2em}.rank-math-rss-variables thead th,.rank-math-rss-variables tbody td{line-height:1;margin-bottom:9px;padding:15px 10px;vertical-align:middle}.rank-math-rss-variables tr td:first-child{font-weight:600}.rank-math-title .rank-math-variables-preview{font-size:18px;font-weight:normal}.rank-math-title .rank-math-variables-preview.capitalize{text-transform:capitalize}.rank-math-description .rank-math-variables-preview,.cmb2-id-pt-post-default-snippet-desc .rank-math-variables-preview{font-size:13px;line-height:1.4;word-wrap:break-word;color:#545454}.sitemap-nginx-notice pre,.sitemap-nginx-notice .hide{display:none}.sitemap-nginx-notice pre{overflow:scroll;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin:5px 0 10px 0;padding:10px;color:#c9c9c9;background:#222}.sitemap-nginx-notice a{display:inline-block;-webkit-box-shadow:none;box-shadow:none}.sitemap-nginx-notice a.sitemap-close-notice{float:right;margin-top:5px}.sitemap-nginx-notice.active pre,.sitemap-nginx-notice.active .hide{display:block}.sitemap-nginx-notice.active .show{display:none}p.rank-math-selected-page-message{margin-bottom:0}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a{border-right-width:1px;border-left-width:0}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a .rm-icon{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a.active{border-right:3px solid;border-left:0}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a.active:after{right:auto;left:-1px}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) a:last-child{border-radius:0 0 6px 0}body.rtl .rank-math-tabs-navigation:not(.rank-math-custom) .separator{border-right:1px solid #b5bfc9;border-left:0}body.rtl .rank-math-tab-header{margin-left:auto;margin-right:-200px}body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item{border-left:0;border-right:1px solid}body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.is-active,body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:hover:not(.is-active):not(.separator){border-right:3px solid;border-left:0}body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item.is-active:after,body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item:hover:not(.is-active):not(.separator):after{right:unset;left:-1px}body.rtl .rank-math-tab-panel>.components-tab-panel__tabs[aria-orientation=vertical] .components-tab-panel__tabs-item i{margin-right:0;margin-left:9px}body.rtl .field-th{float:right}body.rtl .field-th label{padding-right:0;padding-left:15px}#rank-math-unlock-pro-notice{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:978px;max-width:100%;margin-top:15px;border:3px solid #161e28;border-radius:4px;background:#253142}#rank-math-unlock-pro-notice a{display:block;padding:10px 14px;text-decoration:none;color:#e4e5e7}#rank-math-unlock-pro-notice a:focus{-webkit-box-shadow:none;box-shadow:none}#rank-math-unlock-pro-notice p{font-size:1rem;margin:0}#rank-math-unlock-pro-notice p span{text-decoration:underline;color:#f7d070}#rank-math-unlock-pro-notice .close-notice{display:none}#indexnow_show_response_codes .dashicons{text-decoration:none}#indexnow_show_response_codes.active .dashicons:before{content:"ï…‚"}#indexnow_show_response_codes{margin:20px 0;display:inline-block}#indexnow_response_codes th,#indexnow_history th{padding:15px 10px}.indexnow-history-filter-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.indexnow-history-filter-wrapper #indexnow_history_filters{float:left}.indexnow-history-filter-wrapper #indexnow_history_filters button:not(:last-child):after{content:"|";font-weight:normal;margin-left:3px;margin-right:3px}.indexnow-history-filter-wrapper #indexnow_history_filters button.current{font-weight:bold}#setting-panel-url-submission .cmb2-id-indexnow-urls{padding-top:0}#indexnow_clear_history.hidden,#indexnow_history_filters.hidden{display:none}#indexnow_reset_key,#indexnow_check_key{padding-left:15px;margin-top:20px}.rank-math-options-panel-content .cmb-type-select .select2-selection__clear{font-size:1.3rem;font-weight:500;line-height:.7;color:#a00;background:rgba(0,0,0,0);border:none;-webkit-box-shadow:none;box-shadow:none;padding:0 12px}.rank-math-tab-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;bottom:100%;width:calc(100% + 138px);height:90px;margin-left:-200px;border:1px solid #b5bfc9;padding:1.875rem 1.875rem 0;border-radius:6px 6px 0 0;text-align:center;background-color:#f8f9fa}.rank-math-tab-header h2{font-size:25px;line-height:1.5;font-weight:600;margin:0}.rank-math-tab-header p{font-size:14px;margin:0 auto 2rem;padding-top:2px;color:#7f868d;line-height:1.5;letter-spacing:.01em}.rank-math-mode-selector .rank-math-button.components-button,.rank-math-mode-selector .rank-math-button.components-button:active:not(:disabled),.rank-math-mode-selector .rank-math-button.components-button:focus:not(:disabled){color:#7f868d}.rank-math-mode-selector .rank-math-button.components-button{text-decoration:none;padding:5px 0 1px;line-height:1.4em}.rank-math-mode-selector .rank-math-button.components-button:first-child{margin-right:7px}.rank-math-mode-selector .rank-math-button.components-button.is-active,.rank-math-mode-selector .rank-math-button.components-button:hover:not(:disabled){border-bottom:1px solid;color:#242628}.rank-math-mode-selector .rank-math-button.components-button:focus:not(:disabled){-webkit-box-shadow:0 0 0 2px #2271b1;box-shadow:0 0 0 2px #2271b1;outline-width:2px;outline-color:rgba(0,0,0,0);border:0;background:0}.rank-math-search-options{position:relative;margin-right:5px}.rank-math-search-options .components-input-control .components-input-control__container{width:275px}.rank-math-search-options .components-input-control .components-input-control__container .components-input-control__input{height:40px;min-height:30px;line-height:2;padding:10px 15px;color:#858b90;font-size:14px}@media screen and (max-width: 782px){.rank-math-search-options .components-input-control .components-input-control__container .components-input-control__input{font-size:16px}}.rank-math-search-options .components-input-control .components-input-control__container:hover .components-input-control__backdrop{border-color:#069de3}.rank-math-search-options .components-input-control .components-input-control__container:focus-within .components-input-control__backdrop{-webkit-box-shadow:0 0 0 .5px #069de3 !important;box-shadow:0 0 0 .5px #069de3 !important;border-color:#069de3 !important}.rank-math-search-dropdown{overflow:auto;max-width:450px;border:1px solid #b5bfc9;border-radius:3px;background:#fff;height:260px;width:100%;position:absolute;top:48px;right:0}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary{display:block !important;width:100%;padding:10px;border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#fff;text-align:left;white-space:unset;cursor:pointer;text-decoration:none}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary:hover{background:#f6f6f6}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary:focus{-webkit-box-shadow:none;box-shadow:none;outline:none}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary:not(:last-of-type){border-bottom:1px solid #b5bfc9}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary h1{font-size:13px;color:#3c434a;line-height:1.4em;font-weight:400;margin:0}.rank-math-search-dropdown>.rank-math-button.components-button.button-secondary p{font-size:12px}.rank-math-search-dropdown .empty{font-size:1.2em;font-style:italic;display:block;padding:20px}PK     ’ŠU]cñ~õ_“ _“   assets/admin/css/divi.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type="text"],.rank-math-tabs input[type="number"],.rank-math-tabs input[type="url"],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px}.rank-math-tabs input[type="text"]:focus,.rank-math-tabs input[type="text"]:hover,.rank-math-tabs input[type="number"]:focus,.rank-math-tabs input[type="number"]:hover,.rank-math-tabs input[type="url"]:focus,.rank-math-tabs input[type="url"]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type="text"]:focus,.rank-math-tabs input[type="number"]:focus,.rank-math-tabs input[type="url"]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type="radio"]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border:1px solid #ccd0d4;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227% !important}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 62%;flex:0 0 62%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-robots-list .rank-math-tooltip-content{width:182% !important}.rank-math-primary-term-picker{margin:20px -16px -17px;padding:16px;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media (min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media (min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}@font-face{font-family:'Rank-Math';font-weight:normal;font-style:normal;font-display:block;src:url("../fonts/Rank-Math.ttf?v1.0.94") format("truetype"),url("../fonts/Rank-Math.woff?v1.0.94") format("woff"),url("../fonts/Rank-Math.svg?v1.0.94#Rank-Math") format("svg")}[class^='rm-icon-'],[class*=' rm-icon-']{font-family:'Rank-Math' !important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.rm-icon-rank-math:before{content:"\e900"}.rm-icon-search-console:before{content:"\ed71"}.rm-icon-adsense:before{content:"\eb99"}.rm-icon-role-manager:before{content:"\ea3a"}.rm-icon-software:before{content:"\ea9a"}.rm-icon-calendar:before{content:"\ea43"}.rm-icon-cart:before{content:"\ed73"}.rm-icon-post-format:before{content:"\ec64"}.rm-icon-fact-check:before{content:"\ebf7"}.rm-icon-tick:before{content:"\eb9d"}.rm-icon-recipe:before{content:"\ec3b"}.rm-icon-circle-plus:before{content:"\eb9f"}.rm-icon-service:before{content:"\ec66"}.rm-icon-cross:before{content:"\ebea"}.rm-icon-settings:before{content:"\ea60"}.rm-icon-comments:before{content:"\ed35"}.rm-icon-dataset:before{content:"\ecf8"}.rm-icon-schema:before{content:"\eb97"}.rm-icon-direction:before{content:"\ecc9"}.rm-icon-desktop:before{content:"\ea67"}.rm-icon-import:before{content:"\ea5a"}.rm-icon-export:before{content:"\ea5d"}.rm-icon-eye:before{content:"\eba4"}.rm-icon-htaccess:before{content:"\ea6f"}.rm-icon-robots:before{content:"\ea70"}.rm-icon-movie:before{content:"\edc1"}.rm-icon-category:before{content:"\ea76"}.rm-icon-images:before{content:"\eb6a"}.rm-icon-google:before{content:"\e901"}.rm-icon-course:before{content:"\ec70"}.rm-icon-heart-filled:before{content:"\ebac"}.rm-icon-home:before{content:"\ed0d"}.rm-icon-image:before{content:"\eaa0"}.rm-icon-info:before{content:"\ebb4"}.rm-icon-stories:before{content:"\ece7"}.rm-icon-acf:before{content:"\eceb"}.rm-icon-book:before{content:"\ec73"}.rm-icon-howto:before{content:"\ebbc"}.rm-icon-faq:before{content:"\ebbd"}.rm-icon-local-seo:before{content:"\ea87"}.rm-icon-job:before{content:"\ed3a"}.rm-icon-misc:before{content:"\ea8f"}.rm-icon-podcast:before{content:"\efee"}.rm-icon-copy:before{content:"\e902"}.rm-icon-mobile:before{content:"\ea2e"}.rm-icon-social:before{content:"\ec76"}.rm-icon-music:before{content:"\ebc8"}.rm-icon-sitemap:before{content:"\ea4f"}.rm-icon-post:before{content:"\ed4d"}.rm-icon-attachment:before{content:"\ed83"}.rm-icon-edit:before{content:"\ec78"}.rm-icon-plus:before{content:"\ebce"}.rm-icon-help:before{content:"\ebd2"}.rm-icon-restaurant:before{content:"\ec56"}.rm-icon-analyzer:before{content:"\eaa9"}.rm-icon-search:before{content:"\eaab"}.rm-icon-star-filled:before{content:"\eab3"}.rm-icon-star:before{content:"\eab5"}.rm-icon-support:before{content:"\ed64"}.rm-icon-tag:before{content:"\ed91"}.rm-icon-target:before{content:"\ed95"}.rm-icon-instant-indexing:before{content:"\ebe1"}.rm-icon-toolbox:before{content:"\ed1f"}.rm-icon-trash:before{content:"\eaba"}.rm-icon-redirection:before{content:"\eb70"}.rm-icon-link:before{content:"\ea83"}.rm-icon-users:before{content:"\eac4"}.rm-icon-video:before{content:"\eb73"}.rm-icon-404:before{content:"\ebe8"}.rm-icon-page:before{content:"\ec86"}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:#5a6065;border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:'';background:#00a0d2;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.components-tab-panel__tab-content .components-panel__body,.components-tab-panel__tab-content .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.components-tab-panel__tab-content .components-panel__body .button,.components-tab-panel__tab-content .components-panel__body .button-secondary,.components-tab-panel__tab-content .components-panel__body .is-secondary,.components-tab-panel__tab-content .components-modal__content .button,.components-tab-panel__tab-content .components-modal__content .button-secondary,.components-tab-panel__tab-content .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:#6b7278;border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .button.active,.components-tab-panel__tab-content .components-panel__body .button-secondary.active,.components-tab-panel__tab-content .components-panel__body .is-secondary.active,.components-tab-panel__tab-content .components-modal__content .button.active,.components-tab-panel__tab-content .components-modal__content .button-secondary.active,.components-tab-panel__tab-content .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:#61676d;border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.components-tab-panel__tab-content .components-panel__body .button:focus,.components-tab-panel__tab-content .components-panel__body .button:hover,.components-tab-panel__tab-content .components-panel__body .button-secondary:focus,.components-tab-panel__tab-content .components-panel__body .button-secondary:hover,.components-tab-panel__tab-content .components-panel__body .is-secondary:focus,.components-tab-panel__tab-content .components-panel__body .is-secondary:hover,.components-tab-panel__tab-content .components-modal__content .button:focus,.components-tab-panel__tab-content .components-modal__content .button:hover,.components-tab-panel__tab-content .components-modal__content .button-secondary:focus,.components-tab-panel__tab-content .components-modal__content .button-secondary:hover,.components-tab-panel__tab-content .components-modal__content .is-secondary:focus,.components-tab-panel__tab-content .components-modal__content .is-secondary:hover,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button:hover,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .button-secondary:hover,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:hover,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button:hover,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .button-secondary:hover,.rank-math-modal .components-modal__content .is-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:hover{color:#069de3;border-color:#069de3;background:#f8f9fa}.components-tab-panel__tab-content .components-panel__body .button:focus,.components-tab-panel__tab-content .components-panel__body .button-secondary:focus,.components-tab-panel__tab-content .components-panel__body .is-secondary:focus,.components-tab-panel__tab-content .components-modal__content .button:focus,.components-tab-panel__tab-content .components-modal__content .button-secondary:focus,.components-tab-panel__tab-content .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.components-tab-panel__tab-content .components-panel__body .button .dashicons,.components-tab-panel__tab-content .components-panel__body .button-secondary .dashicons,.components-tab-panel__tab-content .components-panel__body .is-secondary .dashicons,.components-tab-panel__tab-content .components-modal__content .button .dashicons,.components-tab-panel__tab-content .components-modal__content .button-secondary .dashicons,.components-tab-panel__tab-content .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.components-tab-panel__tab-content .components-panel__body .button.disabled,.components-tab-panel__tab-content .components-panel__body .button-secondary.disabled,.components-tab-panel__tab-content .components-panel__body .is-secondary.disabled,.components-tab-panel__tab-content .components-modal__content .button.disabled,.components-tab-panel__tab-content .components-modal__content .button-secondary.disabled,.components-tab-panel__tab-content .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.components-tab-panel__tab-content .components-panel__body .button-primary,.components-tab-panel__tab-content .components-panel__body .is-primary,.components-tab-panel__tab-content .components-modal__content .button-primary,.components-tab-panel__tab-content .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none}.components-tab-panel__tab-content .components-panel__body .button-primary:focus,.components-tab-panel__tab-content .components-panel__body .button-primary:hover,.components-tab-panel__tab-content .components-panel__body .is-primary:focus,.components-tab-panel__tab-content .components-panel__body .is-primary:hover,.components-tab-panel__tab-content .components-modal__content .button-primary:focus,.components-tab-panel__tab-content .components-modal__content .button-primary:hover,.components-tab-panel__tab-content .components-modal__content .is-primary:focus,.components-tab-panel__tab-content .components-modal__content .is-primary:hover,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .button-primary:hover,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-panel__body .is-primary:hover,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .button-primary:hover,.rank-math-modal .components-modal__content .is-primary:focus,.rank-math-modal .components-modal__content .is-primary:hover{color:#fff;border-color:#08a7f1;background:#08a7f1}.components-tab-panel__tab-content .components-panel__body .button-primary:focus,.components-tab-panel__tab-content .components-panel__body .is-primary:focus,.components-tab-panel__tab-content .components-modal__content .button-primary:focus,.components-tab-panel__tab-content .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.components-tab-panel__tab-content .components-panel__body .button-primary[disabled],.components-tab-panel__tab-content .components-panel__body .is-primary[disabled],.components-tab-panel__tab-content .components-modal__content .button-primary[disabled],.components-tab-panel__tab-content .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default),.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):hover,.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):hover,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:#397eda;background:#397eda}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda;box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default),.components-tab-panel__tab-content .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10AC84;background:#10AC84}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):hover,.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):hover,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:#0f9e79;background:#0f9e79}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #0f9e79;box-shadow:0 0 0 1px #fff,0 0 0 3px #0f9e79}.components-tab-panel__tab-content .components-panel__body .button-link-delete,.components-tab-panel__tab-content .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:transparent}.components-tab-panel__tab-content .components-panel__body .button-link-delete:hover,.components-tab-panel__tab-content .components-panel__body .button-link-delete:focus,.components-tab-panel__tab-content .components-modal__content .button-link-delete:hover,.components-tab-panel__tab-content .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.components-tab-panel__tab-content .components-panel__body .button-link,.components-tab-panel__tab-content .components-panel__body .is-link,.components-tab-panel__tab-content .components-modal__content .button-link,.components-tab-panel__tab-content .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .button-small,.components-tab-panel__tab-content .components-panel__body .is-small,.components-tab-panel__tab-content .components-modal__content .button-small,.components-tab-panel__tab-content .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.components-tab-panel__tab-content .components-panel__body .button-xlarge,.components-tab-panel__tab-content .components-panel__body .is-large,.components-tab-panel__tab-content .components-modal__content .button-xlarge,.components-tab-panel__tab-content .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.components-tab-panel__tab-content .components-panel__body .button-animated,.components-tab-panel__tab-content .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.components-tab-panel__tab-content .components-panel__body .button-animated i,.components-tab-panel__tab-content .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.components-tab-panel__tab-content .components-panel__body .button-animated:before,.components-tab-panel__tab-content .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:'';-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.components-tab-panel__tab-content .components-panel__body .rank-math-help-icon,.components-tab-panel__tab-content .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .rank-math-help-icon:hover,.components-tab-panel__tab-content .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.components-tab-panel__tab-content .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.components-tab-panel__tab-content .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media (min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:16px;height:16px;margin-right:8px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id='1-review']{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:'';-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:transparent transparent #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#00a0d2}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked ~ .rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,0.2);box-shadow:0 5px 30px 0 rgba(0,0,0,0.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 17px;border-bottom:1px solid #dadfe4}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media (max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:transparent;-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type='text'].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math']{padding:0;background:transparent}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math']:hover{background:transparent}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score{padding:8.5px 9px;color:#212F3E;border-radius:2px;background:#dadfe4;border:1px solid #a6b2be}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon{float:left;height:17px;margin-right:4px}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon *,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon:hover *{fill:inherit !important;stroke:inherit !important}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .seo-score{font-weight:600;display:inline-block}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.loading{pointer-events:none}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.bad-fk{color:#ef877f;background:#fce9e8;fill:#ef877f;border-color:#ef877f}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.ok-fk{color:#ff9f13;background:#ffeccf;fill:#ff9f13;border-color:#ffb446}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.good-fk{color:#67c267;background:#dff2df;fill:#67c267;border-color:#67c267}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score{background:#b5bfc9}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.bad-fk{color:#fff;background:#f29c96;fill:#fff}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.ok-fk{color:#fff;background:#ffbe5f;fill:#fff}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.good-fk{color:#fff;background:#79c979;fill:#fff}.components-menu-group .rank-math-toolbar-score .seo-score{display:none}.components-menu-group .rank-math-toolbar-score .rank-math-icon g{fill:inherit !important}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:'dashicons';font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:'\f155';text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:#ef877f;background:#fce9e8}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:#e4827b}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:#de746d}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:#f6d1cf}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:#f5c0bc}.rank-math-focus-keyword .tagify__tag.ok-fk{color:#ff9f13;background:#ffeccf}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:#f3ab42}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:#eea232}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:#fbd6a0}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:#fccc86}.rank-math-focus-keyword .tagify__tag.good-fk{color:#67c267;background:#dff2df}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:#6ab06a}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:#60a560}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:#b2dcb2}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:#9ad19a}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,0.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"\f335"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,0.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{display:none}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px)}@supports (-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports (-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.tagify__dropdown{position:absolute;z-index:9999;background:white;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,0.18);box-shadow:0 9px 18px 0 rgba(25,30,35,0.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:transparent !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:'\f335';text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:'\f147';background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:#ffa35f;-webkit-box-shadow:inset 0 0 0 2px #ffa35f;box-shadow:inset 0 0 0 2px #ffa35f}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 10px 0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:10px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:'\f335';margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:'\f147'}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:'!';text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:0.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{float:right;margin-left:5px}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:'\f140' !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease, padding .2s ease, margin .2s ease;transition:width .2s ease, padding .2s ease, margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial, sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:transparent}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-title.capitalize{text-transform:capitalize}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid transparent;border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,0.16);box-shadow:0 2px 5px 1px rgba(64,60,67,0.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:#808080;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,0.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media (min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview .rank-math-social-preview-title.capitalize{text-transform:capitalize}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:'\00B7'}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:'\00B7'}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px white}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:transparent !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial, sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id='1-review']{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#F44336;-webkit-transition:0.25s all linear;transition:0.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type="text"],.rank-math-editor .field-group input[type="url"],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type="text"]:hover,.rank-math-editor .field-group input[type="url"]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type="text"]:focus,.rank-math-editor .field-group input[type="url"]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:transparent;-webkit-box-shadow:0 0px 6px rgba(50,50,93,0.1),0 0px 3px rgba(0,0,0,0.1);box-shadow:0 0px 6px rgba(50,50,93,0.1),0 0px 3px rgba(0,0,0,0.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, #ffe919 0%, #fbc000 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:'';background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink 0.6s;animation:blink 0.6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head 0.6s;animation:move-angry-head 0.6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down 0.8s;animation:move-mouth-down 0.8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down 0.8s;animation:move-eyes-down 0.8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink 0.8s;animation:wink 0.8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu,.rank-math-post-publish .rank-math-social-share-buttons,#rank-math-pro-cta .rank-math-cta-header,#rank-math-pro-cta .rank-math-cta-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}:root{--rankmath-wp-adminbar-height: 0}:root{--rankmath-et-seetings-bar-height: 90px;--rankmath-rm-modal-header-height: 58px;--rankmath-rm-modal-spacing: 30px;--rankmath-rm-modal-width: 400px}#rank-math-rm-app-root{position:absolute;z-index:1;top:0;left:0;height:0;width:0;overflow:visible}.rank-math-rm-app{position:absolute;top:0;left:0;height:0;width:0;overflow:visible}#rank-math-rm-settings-bar-root{position:absolute}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root *{pointer-events:auto}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top-left,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom-left{left:calc(50% + 45px)}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top-right,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom-right{right:calc(50% + 45px)}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-left,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-right{top:calc(50% + 45px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-top-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-top-right{top:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-bottom-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-bottom-right{bottom:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-right{top:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom-left{left:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top-right,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom-right{right:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-right{top:calc(100% + 24px)}.rank-math-rm-modal-toggle-button{background-image:linear-gradient(45deg, #724BB7 0%, #4098D7 100%) !important}.rank-math-rm-modal-button{display:block;height:auto;max-width:100%;margin:0;text-align:center;text-decoration:none;line-height:1;color:inherit;background-color:transparent;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;white-space:nowrap;cursor:pointer}.rank-math-rm-modal-button::-moz-focus-inner{border-style:none;padding:0}body.rank-math-et-settings-bar-is-top .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-right .rank-math-rm-modal{top:calc( var(--rankmath-wp-adminbar-height) + var(--rankmath-et-seetings-bar-height))}body.rank-math-et-settings-bar-is-top .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom .rank-math-rm-modal{left:var(--rankmath-rm-modal-spacing)}body.rank-math-et-settings-bar-is-top-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom-left .rank-math-rm-modal{left:calc( 100vw - var(--rankmath-rm-modal-width) - var(--rankmath-rm-modal-spacing))}.rank-math-rm-modal{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;font-weight:normal;position:relative;top:calc( var(--rankmath-rm-modal-spacing) + var(--rankmath-wp-adminbar-height));display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:var(--rankmath-rm-modal-width);padding-top:var(--rankmath-rm-modal-header-height);background:#fff;-webkit-box-shadow:0 5px 30px rgba(44,135,218,0.2);box-shadow:0 5px 30px rgba(44,135,218,0.2);-webkit-font-smoothing:subpixel-antialiased}.rank-math-rm-modal-is-hidden{display:none}.rank-math-rm-modal-content{position:relative;z-index:0;overflow:hidden;overflow-y:auto;max-height:calc( 100vh - var(--rankmath-wp-adminbar-height) - var(--rankmath-et-seetings-bar-height) - var(--rankmath-rm-modal-spacing) - var(--rankmath-rm-modal-header-height))}body.rank-math-et-settings-bar-is-left .rank-math-rm-modal-content,body.rank-math-et-settings-bar-is-right .rank-math-rm-modal-content{max-height:calc( 100vh - var(--rankmath-wp-adminbar-height) - (var(--rankmath-rm-modal-spacing) * 2) - var(--rankmath-rm-modal-header-height))}.rank-math-rm-modal-content h1,.rank-math-rm-modal-content h2,.rank-math-rm-modal-content h3,.rank-math-rm-modal-content h4,.rank-math-rm-modal-content h5,.rank-math-rm-modal-content h6{padding-bottom:0}.rank-math-rm-modal-header{position:absolute;z-index:1;top:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:var(--rankmath-rm-modal-header-height);padding-right:21px;padding-left:26px;color:#fff;background-color:#6c2eb9;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-rm-modal-header-title{font-family:'Open Sans', Helvetica, Roboto, Arial, sans-serif;font-size:18px;font-weight:600;font-style:normal;line-height:16px;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;letter-spacing:0;text-transform:none;color:#fff}.rank-math-rm-modal-header-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-rm-modal-header-option{display:block}.rank-math-rm-modal-header-discard-button{width:100%;height:100%;padding:4px}.rank-math-rm-modal-header-discard-button svg{position:relative;top:2px;width:26px;height:26px;fill:#fff}#rank-math-primary-term-input .rank-math-primary-term-select{margin-bottom:20px}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__label{display:inline-block;font-family:"Open Sans", Helvetica, Roboto, Arial, sans-serif;color:#32373c;font-weight:600;line-height:20px;margin:0;padding:0;border:0;font-size:14px;white-space:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#rank-math-primary-term-input .rank-math-primary-term-select .components-select-control__input{background-color:#f1f5f9;border-radius:3px;font-family:"Open Sans", Helvetica, Roboto, Arial, sans-serif;padding-left:10px;outline:0;color:#4c5866;font-size:13px;font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__suffix svg path{fill:#4c5866}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__backdrop{border:0;-webkit-box-shadow:none;box-shadow:none}body.rtl #rank-math-rm-app-root{left:auto;right:0}body.rtl #rank-math-rm-app-root .rank-math-rm-modal{left:auto;right:var(--rankmath-rm-modal-spacing)}body.rtl #rank-math-rm-app-root .rank-math-rm-modal .serp-preview-title .seo-score{float:left}body.rtl #rank-math-rm-app-root .rank-math-rm-modal #rank-math-compare-keywords-trigger{left:16px;right:auto}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title .seo-score{display:block}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title::before{font-weight:500;letter-spacing:0}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-result{position:absolute;top:-1px;left:0}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs{background:#7e3bd0;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:100%;line-height:1;display:block;width:auto;padding:13px 20px;-webkit-transition:background .5s ease-in-out;transition:background .5s ease-in-out;vertical-align:baseline;text-decoration:none;color:#fff;background:transparent}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link) i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{background:#7435c1}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not([id]){margin-left:auto}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active){padding:13px 19px 13px 26px}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{margin-bottom:0}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:hover{background:#8f42eb}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link)::before,.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link)::after{display:none}.rank-math-modal .components-modal__header-heading{padding-bottom:0}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active::after{background:#2c87da !important}.rank-math-tabs>.components-tab-panel__tab-content>div>div:first-child{margin-top:10px;border-top:0;border-bottom:0}.rank-math-tabs>.components-tab-panel__tab-content select,.rank-math-tabs>.components-tab-panel__tab-content input[type=text]{min-height:30px}.rank-math-tabs>.components-tab-panel__tab-content textarea{font-family:inherit;line-height:1.42857143}.rank-math-tabs .cmb2-metabox-description{font-weight:400}.rank-math-tabs .rank-math-datepicker>button{color:inherit}.rank-math-tooltip label{cursor:pointer}.rank-math-tooltip label:before{height:21px;vertical-align:middle}.rank-math-tooltip label:hover{color:#d30c5c}.rank-math-tooltip input:checked+label{color:#d30c5c}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:13px;height:44px;text-transform:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{display:block;background:#d30c5c}.rank-math-modal .rank-math-button-devices .components-button.active,.rank-math-modal .rank-math-button-devices .components-button:hover{background:#f6e7ee !important}.rank-math-modal.rank-math-modal-trends-tool{width:930px;max-height:580px}.blurred{-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:'';background:rgba(248,249,250,0.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,0.28);box-shadow:0 4px 14px 0 rgba(34,36,55,0.28);-ms-flex-item-align:center;align-self:center;justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{margin-top:10%;-ms-flex-item-align:start;align-self:flex-start}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{padding:1.25rem .825rem;border-bottom:1px solid #dadfe4;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{padding:1.25rem 1.5rem 1.25rem .825rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta ul{font-size:15px;margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;margin-bottom:1rem;padding:0;color:#7f868d;border:0}#rank-math-pro-cta ul li:before{font-family:'dashicons';font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:'\f15e';text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10AC84}#rank-math-pro-cta .button{font-weight:500;display:inline-block;width:auto;max-width:100%;margin:0 auto;padding:0 3rem;text-align:center}
PK     ’ŠU]$bÕX÷L  ÷L    assets/admin/css/cmb2.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	cmb2.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}[id^=cmb2-metabox-rank] .cmb-row{margin:0;padding:25px 0}[id^=cmb2-metabox-rank] .cmb-row:not(.rank-math-advanced-option):not(.tab-header):not(.cmb-type-notice)~.cmb-row:not(.rank-math-advanced-option):not(.rank-math-notice),[id^=cmb2-metabox-rank] .cmb-row.rank-math-advanced-option~.rank-math-advanced-option,[id^=cmb2-metabox-rank] .cmb-row.cmb2-top-border{border-top:1px solid #dadfe4;border-bottom:0}[id^=cmb2-metabox-rank] .cmb-row.nob{border:0 !important}[id^=cmb2-metabox-rank] .cmb-row.nop{padding:0 !important}[id^=cmb2-metabox-rank] .cmb-row.nopt{padding-top:0 !important}[id^=cmb2-metabox-rank] .cmb-row.nopb{padding-bottom:0 !important}[id^=cmb2-metabox-rank] .cmb-row:not(.cmb-type-title):first-of-type{padding-top:0}[id^=cmb2-metabox-rank] .cmb-row:not(.cmb-type-title):last-of-type{padding-bottom:0}[id^=cmb2-metabox-rank] .cmb-row .cmb-td,[id^=cmb2-metabox-rank] .cmb-row .cmb-th{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[id^=cmb2-metabox-rank] .cmb-row .cmb-th{color:#242628;width:25%;max-width:200px}[id^=cmb2-metabox-rank] .cmb-row .cmb-th label{padding:0 15px 0 0}[id^=cmb2-metabox-rank] .cmb-row .cmb-td{float:left;width:75%}@media screen and (max-width: 640px){[id^=cmb2-metabox-rank] .cmb-row .cmb-td,[id^=cmb2-metabox-rank] .cmb-row .cmb-th{width:100%;padding:0}[id^=cmb2-metabox-rank] .cmb-row .cmb-th label{padding:0 0 5px 2px}}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50{display:inline-block}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25 .cmb-td,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25 .cmb-th,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33 .cmb-td,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33 .cmb-th,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50 .cmb-td,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50 .cmb-th{float:none;width:100%;max-width:100%;padding:0 10px}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25 .cmb-th,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33 .cmb-th,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50 .cmb-th{margin-bottom:8px}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25 .cmb-th label,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33 .cmb-th label,[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50 .cmb-th label{padding:0}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-25{width:25%}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-33{width:33.33%}[id^=cmb2-metabox-rank] .cmb-row.cmb-row-50{width:50%}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits{margin-top:20px;color:#7f868d;padding-left:20px;position:relative}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit{text-decoration:none;position:absolute;left:0;margin-top:2px;-webkit-box-shadow:none;box-shadow:none;outline:none;color:#b5bfc9}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit i{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:12px;margin-top:1px;-webkit-transform:scaleX(-1);transform:scaleX(-1);height:12px}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit.loading i:before{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit span{margin-left:80px}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit span:after{left:13%}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits .update-credit:hover{color:#069de3}[id^=cmb2-metabox-rank] .cmb-row.buy-more-credits strong{color:#242628;opacity:.8}[id^=cmb2-metabox-rank] .cmb2-metabox-description{font-size:14px;font-style:normal;padding-top:10px;color:#7f868d}[id^=cmb2-metabox-rank] .cmb2-metabox-description code{background:rgba(0,0,0,.05)}[id^=cmb2-metabox-rank] .cmb2-timepicker.text-time+.cmb2-metabox-description{display:block}.form-footer:not(.rank-math-custom){-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:20px 40px;background:#fbfbfb;margin-bottom:2rem}.form-footer:not(.rank-math-custom) .button-primary{float:right}.cmb-field-list>.cmb-row{vertical-align:top}[id^=cmb2-metabox-rank] .rank-math-desc{color:#7e8993;margin-top:0}[id^=cmb2-metabox-rank] .rank-math-desc pre{background:#222;color:#c9c9c9;overflow:scroll;width:100%;padding:10px;margin:5px 0 10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}[id^=cmb2-metabox-rank] .tab-header+.cmb-type-notice{padding-top:0}[id^=cmb2-metabox-rank] .cmb-type-notice{padding-bottom:0;border:0}[id^=cmb2-metabox-rank] .cmb-type-notice .cmb-td{width:100%}.cmb2-metabox .note{padding:2px 6px;color:rgb(120.5,71.546875,0);background:rgba(255,190,95,.5);border-radius:3px;margin-right:5px}[id^=cmb2-metabox-rank] .cmb2-text-small,[id^=cmb2-metabox-rank] .regular-text,[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single,[id^=cmb2-metabox-rank] input.cmb2-timepicker,[id^=cmb2-metabox-rank] select,[id^=cmb2-metabox-rank] textarea{padding:.75em .6em;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;border-color:#7f868d;height:40px;width:100%}[id^=cmb2-metabox-rank] .cmb2-text-small:focus,[id^=cmb2-metabox-rank] .cmb2-text-small:hover,[id^=cmb2-metabox-rank] .regular-text:focus,[id^=cmb2-metabox-rank] .regular-text:hover,[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single:focus,[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single:hover,[id^=cmb2-metabox-rank] input.cmb2-timepicker:focus,[id^=cmb2-metabox-rank] input.cmb2-timepicker:hover,[id^=cmb2-metabox-rank] select:focus,[id^=cmb2-metabox-rank] select:hover,[id^=cmb2-metabox-rank] textarea:focus,[id^=cmb2-metabox-rank] textarea:hover{border-color:#069de3;outline:none}[id^=cmb2-metabox-rank] .cmb2-text-small:focus,[id^=cmb2-metabox-rank] .regular-text:focus,[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single:focus,[id^=cmb2-metabox-rank] input.cmb2-timepicker:focus,[id^=cmb2-metabox-rank] select:focus,[id^=cmb2-metabox-rank] textarea:focus{background-color:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}[id^=cmb2-metabox-rank] .cmb2-text-url{width:100% !important}[id^=cmb2-metabox-rank] select{margin-top:0;padding-top:0;padding-bottom:0;vertical-align:baseline}[id^=cmb2-metabox-rank] textarea{height:auto}[id^=cmb2-metabox-rank] textarea[data-autoresize]{overflow:hidden;resize:none}[id^=cmb2-metabox-rank] input[type=radio]{border-color:#7f868d;-webkit-box-shadow:0 0 0 1px #7f868d;box-shadow:0 0 0 1px #7f868d}[id^=cmb2-metabox-rank] input[type=radio]:checked{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}[id^=cmb2-metabox-rank] input[type=radio]:checked:before{background:#069de3}[id^=cmb2-metabox-rank] input:not([type=hidden])+.button-secondary,[id^=cmb2-metabox-rank] input:not([type=hidden])+input,[id^=cmb2-metabox-rank] input:not([type=hidden])+select{margin-left:0}[id^=cmb2-metabox-rank] input.cmb2-upload-button{cursor:pointer}[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:18px;padding:0}[id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single .select2-selection__arrow{top:0;height:40px}.select2-container--default.select2-container--open .select2-dropdown,.select2-container--default.select2-container--open .select2-search__field{border-color:#7f868d}.select2-container--default.select2-container--open .select2-search__field:focus,.select2-container--default.select2-container--open .select2-search__field:hover{border-color:#069de3}.select2-container--default.select2-container--open .select2-search__field:focus{-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}[id^=cmb2-metabox-rank] .cmb-td .rank-math-tooltip{margin-left:4px}[id^=cmb2-metabox-rank] .cmb2-radio-list{position:relative;display:inline-block;padding:5px 5px 0;color:hsl(210,5.7851239669%,42.5490196078%);border:1px solid #b5bfc9;border-radius:4px;background:#fff}[id^=cmb2-metabox-rank] .cmb2-radio-list li{float:left;margin:0;padding:0}[id^=cmb2-metabox-rank] .cmb2-radio-list li:last-of-type label{margin-right:0}[id^=cmb2-metabox-rank] .cmb2-radio-list input{display:none}[id^=cmb2-metabox-rank] .cmb2-radio-list label{font-weight:500;line-height:34px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:36px;margin-right:5px;margin-bottom:5px;padding:0 15px;white-space:nowrap;border:1px solid #dadfe4;border-radius:4px}[id^=cmb2-metabox-rank] .cmb2-radio-list label:hover,[id^=cmb2-metabox-rank] .cmb2-radio-list label:focus{cursor:pointer;color:#069de3;border-color:#069de3}[id^=cmb2-metabox-rank] .cmb2-radio-list input:checked+label{color:#fff;border-color:#069de3 !important;background:#069de3}[id^=cmb2-metabox-rank] .cmb2-timepicker.text-time{width:100px}[id^=cmb2-metabox-rank] .cmb-row.cmb-type-file .regular-text{display:inline-block;margin-right:0;border-radius:3px 0 0 3px}[id^=cmb2-metabox-rank] .cmb-row.cmb-type-file .regular-text:not([type=hidden])+.cmb2-upload-button{line-height:38px;margin:0 0 0 -1px;border-top-left-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:none;box-shadow:none}[id^=cmb2-metabox-rank] .cmb2-media-status .img-status img{outline:none;-webkit-box-shadow:0 0 0 1px #e9e9e9;box-shadow:0 0 0 1px #e9e9e9}[id^=cmb2-metabox-rank] .cmb2-media-status .img-status .cmb2-remove-file-button{font-size:0;line-height:38px;top:16px;right:1px;left:auto;text-align:center;text-indent:0;color:#fff;border:0;background:none;height:38px;width:38px}[id^=cmb2-metabox-rank] .cmb2-media-status:hover .img-status img{border-color:#fc948b;-webkit-box-shadow:0 0 0 1px #fc948b;box-shadow:0 0 0 1px #fc948b}[id^=cmb2-metabox-rank] .cmb2-media-status:hover .cmb2-remove-file-button{font-size:0;background:#fc948b}[id^=cmb2-metabox-rank] .cmb2-media-status:hover .cmb2-remove-file-button:before{font-family:dashicons;font-size:20px;font-weight:normal;font-style:normal;display:inline-block;content:"ïŒµ";-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center;vertical-align:top;text-decoration:none;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[id^=cmb2-metabox-rank] .cmb-group-text-only>button,[id^=cmb2-metabox-rank] .cmb-group-text-only .cmbhandle,[id^=cmb2-metabox-rank] .cmb-group-text-only .cmbhandle-title{display:none}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list,[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-row,[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-td{margin:0;padding:0;border:0;-webkit-box-shadow:none;box-shadow:none}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-th+.cmb-td{float:left}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list{width:100%}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-repeatable-grouping>.cmb-remove-group-row{display:none}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-row{display:inline-block;width:43%;width:calc(43% - 10px)}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-row+.cmb-row{margin-left:10px}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-row .cmb-td{width:100%}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-remove-field-row{position:relative;width:auto;vertical-align:top}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-row{border-top:0 !important}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-repeatable-grouping{width:100%;margin-bottom:10px}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-add-row{margin-top:0}[id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-add-row .cmb2-metabox-description{display:block;margin:4px 0 0;padding:0}[id^=cmb2-metabox-rank] .cmb-type-title .cmb-td{width:100%}[id^=cmb2-metabox-rank] .cmb-type-title .cmb2-metabox-title{font-size:25px;margin:0;padding:0}[id^=cmb2-metabox-rank] .cmb-type-title .cmb2-metabox-description{padding-top:2px}[id^=cmb2-metabox-rank] .cmb-remove-group-row-button{padding:0 10px;color:#a00;border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}[id^=cmb2-metabox-rank] .cmb-remove-group-row-button:hover,[id^=cmb2-metabox-rank] .cmb-remove-group-row-button:focus{color:#dc3232;background:0 0;-webkit-box-shadow:0 0 0 1px #dc3232;box-shadow:0 0 0 1px #dc3232}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-repeatable-grouping{margin-bottom:15px}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-repeatable-grouping+.cmb-row{padding:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-repeatable-grouping+.cmb-row .cmb-add-row{margin:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-group-title{margin:0 !important;padding-left:1.1em !important;cursor:pointer}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmbhandle{right:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me button.dashicons-before.dashicons-no-alt.cmb-remove-group-row{right:1.8em;left:auto}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-repeatable-group.cmb-field-list{border:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .inside.cmb-field-list{width:100%;padding:25px !important}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .inside.cmb-field-list>.cmb-remove-field-row{display:none}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .inside.cmb-field-list>.cmb-row:nth-last-child(2){border:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .inside.cmb-field-list .cmb2-metabox-description{padding-bottom:0}[id^=cmb2-metabox-rank] .cmb-type-group.cmb-group-fix-me .cmb-add-row span{display:block;margin:4px 0 0;padding:0}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list{padding:0}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list:before,[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list:after{display:table;content:""}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list:after{clear:both}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li{position:relative;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0 0 15px;padding:0 8px}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li label{display:block;padding:10px 12px 10px 40px;border:1px solid #b5bfc9;border-radius:3px;background:#f8f9fa}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li label:hover{border-color:#7f868d}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li input{-webkit-transform:translateY(-50%);transform:translateY(-50%);position:absolute;top:50%;left:21px}[id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li input:checked+label{padding-left:38px;background:#f8f9fa}[id^=cmb2-metabox-rank] .cmb-type-address .cmb-address-field{margin-bottom:5px}[id^=cmb2-metabox-rank] .cmb2-id-htaccess-content .cmb-td{width:100%}body.rtl .cmb2-media-status .img-status .cmb2-remove-file-button{right:auto;left:1px}body.rtl [id^=cmb2-metabox-rank] .cmb-row .cmb-th label{padding-right:0;padding-left:15px}body.rtl [id^=cmb2-metabox-rank] .cmb-row .cmb-td{float:right}body.rtl [id^=cmb2-metabox-rank] .cmb-row .cmb-td .rank-math-tooltip{margin-right:6px;margin-left:0}body.rtl [id^=cmb2-metabox-rank] .cmb-group-text-only .cmb-field-list .cmb-field-list>.cmb-row+.cmb-row{margin-right:10px;margin-left:0}body.rtl [id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li label{padding-right:40px;padding-left:12px}body.rtl [id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li input{right:21px;left:auto}body.rtl [id^=cmb2-metabox-rank] .cmb-big-labels .cmb2-checkbox-list li input[type=checkbox]:checked:before{margin-right:-2px}body.rtl [id^=cmb2-metabox-rank] .select2-container--default .select2-selection--single .select2-selection__arrow b{margin-left:10px}body.rtl .form-footer:not(.rank-math-custom) .button-primary{float:left}.cmb2-toggle{position:relative;display:inline-block;width:50px;height:24px}.cmb2-toggle input{display:none}.cmb2-toggle input:checked+.cmb2-slider{border-color:#069de3;background-color:#069de3}.cmb2-toggle input:checked+.cmb2-slider:before{-webkit-transform:translateX(24px);transform:translateX(24px);background:#fff}.cmb2-toggle input:checked+.cmb2-slider .toggle_off{display:none}.cmb2-toggle input:checked+.cmb2-slider .toggle_on{display:block}.cmb2-toggle input+.cmb2-slider:focus{-webkit-box-shadow:0 0 0 2px #fff,0 0 0 3px #555d66;box-shadow:0 0 0 2px #fff,0 0 0 3px #555d66}.cmb2-toggle input:disabled+.cmb2-slider{border-color:#b5bfc9;background:rgba(0,0,0,0)}.cmb2-toggle input:disabled+.cmb2-slider:before{background:#b5bfc9}.cmb2-toggle input:disabled+.cmb2-slider .toggle_on{border-color:#b5bfc9;background:#b5bfc9;fill:#b5bfc9}.cmb2-toggle input:disabled+.cmb2-slider .toggle_off{color:#b5bfc9}.cmb2-slider{position:absolute;top:0;right:0;bottom:0;left:0;cursor:pointer;border:2px solid #6c7781;border-radius:34px}.cmb2-slider:before{position:absolute;bottom:3px;left:4px;width:14px;height:14px;content:"";border-radius:50%;background-color:#6c7781}.cmb2-slider.disabled{opacity:.6}.toggle_on,.toggle_off{position:absolute;top:6px;left:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.toggle_on{display:none;border:1px solid #fff;border-radius:2px;outline:1px solid rgba(0,0,0,0);outline-offset:-1px;background:#fff;fill:#fff}.toggle_off{right:6px;left:auto;color:#6c7781;fill:currentColor}#side-sortables .cmb-row .cmb2-toggle+.cmb2-metabox-description{padding-bottom:0}[id^=cmb2-metabox-rank] input[type=checkbox]{margin:0 5px 0 0}[id^=cmb2-metabox-rank] input[type=checkbox]:checked,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3;-webkit-box-shadow:none !important;box-shadow:none !important}[id^=cmb2-metabox-rank] input[type=checkbox]:checked:before,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus:before{font-family:"dashicons";font-size:20px;line-height:20px;content:"ï…‡";color:#fff}@media screen and (max-width: 782px){[id^=cmb2-metabox-rank] input[type=checkbox]:checked:before,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus:before{width:1.875rem;height:1.875rem;margin:-0.1875rem -0.3125rem}}PK     ’ŠU]/ÀºÒ°4  °4    assets/admin/css/metabox.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	metabox.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-metabox-wrapper{background-color:#fff}#rank_math_metabox .inside{margin:0;padding:0}#rank_math_metabox .inside .rank-math-tabs-content{width:100%}#rank_math_metabox .inside .components-toggle-control .components-h-stack{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#rank-math-metabox-wrapper .rank-math-tabs .components-tab-panel__tabs{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}#rank-math-metabox-wrapper .rank-math-tabs .components-tab-panel__tabs button{padding:0 15px;height:47px;width:auto}#rank-math-metabox-wrapper .rank-math-tabs .components-tab-panel__tabs button:hover i.rm-icon{-webkit-box-shadow:none;box-shadow:none;background:none}#rank-math-metabox-wrapper .rank-math-tabs .components-tab-panel__tabs button span{display:inline-block}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body h2{font-weight:600;padding-left:0}#side-sortables #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body h2{display:-webkit-box;display:-ms-flexbox;display:flex}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body>.components-base-control>.components-base-control__field{display:-webkit-box;display:-ms-flexbox;display:flex}#side-sortables #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body>.components-base-control>.components-base-control__field{-ms-flex-wrap:wrap;flex-wrap:wrap}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body>.components-base-control>.components-base-control__field>.components-base-control__label{color:#242628;width:25%;max-width:200px;min-width:200px}#side-sortables #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body>.components-base-control>.components-base-control__field>.components-base-control__label{display:-webkit-box;display:-ms-flexbox;display:flex}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body>.components-base-control>.components-base-control__field>.components-base-control{width:100%}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-focus-keyword .components-checkbox-control__input-container{margin-top:3px}#postbox-container-2 #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-toggle-control .components-base-control__field{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}#postbox-container-2 #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-toggle-control .components-base-control__field label{width:25%;min-width:200px;max-width:200px}#postbox-container-2 #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-toggle-control .components-base-control__field .components-form-toggle{width:100%}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-redirect label{font-weight:600;color:#242628}#postbox-container-2 #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-redirect .components-select-control{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}#postbox-container-2 #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-redirect .components-select-control .components-flex-item{width:25%;max-width:200px;min-width:200px}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-checklist .components-panel__body-title{padding:0 !important}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body.rank-math-checklist.is-opened .components-panel__body-title{margin:-16px -16px 5px !important}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control{-ms-flex-preferred-size:65%;flex-basis:65%}#side-sortables #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control{-ms-flex-preferred-size:100%;flex-basis:100%}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control input:not([type=checkbox]),#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control .components-input-control__container{width:165px}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control.components-checkbox-control{-ms-flex-preferred-size:32%;flex-basis:32%}#side-sortables #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .advanced-robots .components-base-control.components-checkbox-control{-ms-flex-preferred-size:100%;flex-basis:100%}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-checkbox-control input[type=checkbox]:checked:before,#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-checkbox-control input[type=checkbox]:checked:focus:before{display:none}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .components-radio-control__option{margin-right:10px}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .rank-math-social .components-base-control__field{display:block}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .rank-math-social .components-base-control__label{width:100%;max-width:100%;margin-bottom:0}#rank-math-metabox-wrapper .rank-math-tabs .components-panel__body .rank-math-social .rank-math-edit-snippet{margin-bottom:0}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip input:checked~.rank-math-tooltip-content{opacity:0}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip input:checked+label{color:#b5bfc9}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip input:checked+label:after{display:none}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip .rank-math-tooltip-content{display:block;font-size:11px;font-weight:400;line-height:1.5;white-space:normal;width:200px;padding:8px 10px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);text-align:center;pointer-events:none;opacity:0;color:#fff;border-radius:3px;background:#555d66;position:absolute;bottom:100%;left:50%}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip:hover label{color:#069de3 !important}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip:hover .rank-math-tooltip-content{bottom:130%;opacity:1 !important;z-index:1}#rank-math-metabox-wrapper .rank-math-tabs .rank-math-tooltip:hover .rank-math-tooltip-content:after{content:"";-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);position:absolute;top:100%;left:50%;border-style:solid;height:0;width:0;border-color:#555d66 rgba(0,0,0,0) rgba(0,0,0,0);border-width:8px 7px 0}.rank-math-seo-score{font-weight:600;position:absolute;top:1px;right:1px;-webkit-box-sizing:border-box;box-sizing:border-box;width:105px;padding:13.5px 15px;text-align:center;border-radius:0 3px 3px 0;background:#f1f1f1;height:47px}#side-sortables .rank-math-tab-content-general .rank-math-seo-score{display:none}.rank-math-seo-score .score-text{vertical-align:middle}.rank-math-seo-score.misc-pub-section{position:relative;top:auto;right:auto;width:100%;padding:13.5px 12px;text-align:left;border-radius:0}.rank-math-seo-score.misc-pub-section i{font-size:18px;line-height:22px;float:left;margin-right:4px}.rank-math-seo-score.good-fk{color:#58bb58;background:hsl(120,42.1276595745%,93.9215686275%)}.rank-math-seo-score.ok-fk{color:#bf890d;background:#fdf0c4}.rank-math-seo-score.bad-fk{color:#e93f30;background:rgb(252.5982532751,234.03930131,232.4017467249)}.rank-math-seo-score.loading{display:none}.rank-math-focus-keyword .components-panel__body-title{padding-bottom:12px !important}.rank-math-focus-keyword>div{position:relative}.rank-math-focus-keyword>div .rank-math-seo-score{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;top:1px;right:1px;width:95px;height:37px;padding-top:0;padding-bottom:0}.rank-math-metabox-frame{margin-bottom:25px}.rank-math-metabox-frame .rank-math-tabs-content{width:100%}.rank-math-metabox-frame #rank-math-metabox-wrapper .rank-math-tabs .components-panel__body h2{margin-left:0}.rank-math-metabox-frame-title{font-size:14px;line-height:1.4;margin:0;padding:8px 12px;border-bottom:1px solid #b5bfc9}.rank-math-primary-term-li{position:relative;display:block}.rank-math-primary-term-li .rank-math-tooltip{position:absolute;right:0;display:none}.rank-math-primary-term-li .rank-math-tooltip>span{top:50%;right:32px;bottom:auto;left:auto;width:110px;-webkit-transform:translate3d(-70%, -50%, 0);transform:translate3d(-70%, -50%, 0)}.rank-math-primary-term-li .rank-math-tooltip>span:after{content:"";-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);top:50%;right:-8px;left:auto;border-style:solid;height:0;width:0;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #555d66;border-width:7px 0 7px 8px}.rank-math-primary-term-li .rank-math-tooltip:hover span{bottom:auto;-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);opacity:1}.rank-math-primary-term-li.term-checked>label>.rank-math-tooltip{display:inline-block}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{float:right}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .rm-icon{float:right;margin-right:0;margin-left:6px}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a[href="#setting-panel-askreview"]{float:left}body.rtl .serp-preview .group .serp-close{left:10px;right:auto}body.rtl .serp-preview .rank-math-variables-wrap input,body.rtl .serp-preview .rank-math-variables-wrap textarea{padding-right:.6em !important;padding-left:50px}body.rtl .tag-editor{padding:7px 10px 7px 80px}body.rtl .tag-editor>li{float:right;margin-right:0;margin-left:10px}body.rtl .tag-editor>li:nth-child(2):before{right:-6px;left:auto}body.rtl .tag-editor div{float:right}body.rtl .tag-editor-hidden-src{right:-99999px}body.rtl .rank-math-tab .tagify{padding:5px 5px 5px 105px}body.rtl .rank-math-tab .tagify__tag{padding:4px 10px 4px 6px}body.rtl .rank-math-tab .tagify__tag:first-child .tagify__tag-text:before{margin:0 0 0 5px}body.rtl .rank-math-tab .tagify__tag__removeBtn{margin:0 4px 0 0}body.rtl .rank-math-seo-score{right:auto;left:1px;border-radius:3px 0 0 3px}body.rtl .rank-math-serp-checklist .group-handlediv{right:auto;left:10px}body.rtl .rank-math-rank-math-checklist.state-closed .group-status{float:right}body.rtl .rank-math-rank-math-checklist.state-closed .group-status:before{margin:0 0 0 10px}body.rtl .rank-math-rank-math-checklist .rank-math-group-score{margin:0 5px 0 0}body.rtl .rank-math-rank-math-checklist li{padding-left:0;padding-right:30px}body.rtl .rank-math-rank-math-checklist li:before{float:right;margin:4px -30px 0 10px}body.rtl .rank-math-primary-term-li .rank-math-make-primary,body.rtl .rank-math-primary-term-li .text-primary{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span{right:auto;left:32px;-webkit-transform:translate3d(70%, -50%, 0);transform:translate3d(70%, -50%, 0)}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span:after{left:-8px;right:auto;top:30%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}body.rtl .rank-math-primary-term-li .rank-math-tooltip:hover>span{-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0)}body.rtl .suggestion-item .suggestion-actions{float:left;margin-right:5px}body.rtl input[type=checkbox]:checked:before{margin:-3px}body.rtl .postbox-container #side-sortables{overflow:hidden}PK     ’ŠU]›b€{€M  €M  #  assets/admin/css/elementor-dark.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}:root{--rankmath-wp-adminbar-height: 0}@use 'sidebar';.rank-math-tabs>.components-tab-panel__tabs{background-color:#26292c}.rank-math-tabs>.components-tab-panel__tabs button{color:inherit}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{color:#70d5f5}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{color:#fff;background:#70d5f5;-webkit-box-shadow:0 0 0 4px #70d5f5;box-shadow:0 0 0 4px #70d5f5}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{font-weight:normal}.rank-math-tabs>.components-tab-panel__tab-content .serp-preview-title{color:#6d7882}.rank-math-tabs>.components-tab-panel__tab-content select{background:#34383c}.rank-math-tabs>.components-tab-panel__tab-content input[type=checkbox]{cursor:pointer;border-color:#64666a;background:#34383c}.rank-math-tabs>.components-tab-panel__tab-content input[type=checkbox]:checked{border-color:#11a0d2;background:#11a0d2}.rank-math-tabs>.components-tab-panel__tab-content .components-form-toggle__track{border-color:#e0e1e3;background:transparent}.rank-math-tabs>.components-tab-panel__tab-content .components-form-toggle__thumb{border-color:#e0e1e3;background:#e0e1e3}.rank-math-tabs>.components-tab-panel__tab-content .is-checked span.components-form-toggle__track{border-color:#11a0d2;background:#11a0d2}.rank-math-tabs>.components-tab-panel__tab-content .is-checked span.components-form-toggle__thumb{border-color:#fff;background:#fff}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body{border-color:#34383c;background:#404349 !important}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){color:#e0e1e3}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{background:transparent}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button{opacity:.6}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button:not(.is-default):hover,.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button:focus:not(:disabled){opacity:.9;color:#fff;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button{opacity:.6}.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button:not(.is-default):hover,.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button:focus:not(:disabled){opacity:.9;color:#fff;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-advanced>.components-panel__body,.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-schema>.components-panel__body{background:#404349}.rank-math-tabs .components-panel__body-toggle.components-button{color:#e0e1e3}.rank-math-tabs .components-panel__body-toggle.components-button:focus:not(:disabled),.rank-math-tabs .components-panel__body-toggle.components-button:focus:not(:disabled){color:#e0e1e3;background:transparent}.rank-math-tabs .components-panel__body-toggle.components-button .components-panel__arrow{color:inherit}.rank-math-tabs input[type='text'],.rank-math-tabs input[type='number'],.rank-math-tabs input[type='url'],.rank-math-tabs textarea,.rank-math-tabs select{color:#e0e1e3;border-color:#64666a;background:#34383c}.rank-math-tabs input[type='text']:focus,.rank-math-tabs input[type='number']:focus,.rank-math-tabs input[type='url']:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{color:#e0e1e3;background:#34383c}.rank-math-tabs ::-webkit-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::-moz-placeholder{color:#a4afb7 !important}.rank-math-tabs :-ms-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::-ms-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::placeholder{color:#a4afb7 !important}.rank-math-schema-in-use{color:#e0e1e3}.rank-math-schema-section-title{font-weight:600 !important;color:#e0e1e3}.rank-math-schema-tabs .components-panel__body{background:transparent !important}.rank-math-schema-tabs .schema-group--children>.schema-group-or-property-container>.schema-group-or-property{border-color:#404349;background:#404349}.rank-math-tooltip label{color:#a4afb7}.rank-math-tooltip label:hover{color:#70d5f5}.rank-math-tooltip label:after{border-color:transparent transparent #5c5f64}.rank-math-tooltip input:checked+label{color:#70d5f5}.rank-math-tooltip-content{color:#cacdd1;background:#5c5f64}.rank-math-checklist .rank-math-group-score.test-ok{color:#fafdfa;background:#52a652}.rank-math-checklist .rank-math-group-score.test-warning{color:#fff;background:#e59901}.rank-math-checklist .rank-math-group-score.test-fail{color:#fff;background:#f0776f}.rank-math-checklist li:before{color:#fff;background:#f0776f;position:absolute;top:0;left:-1px}.rank-math-checklist li.test-ok:before{color:#fafdfa;background:#52a652}.rank-math-checklist li.test-warning:before{color:#fff;background:#e59901}.rank-math-checklist li.test-check-bad:before{color:#e58601;background:transparent;-webkit-box-shadow:inset 0 0 0 2px #e58601;box-shadow:inset 0 0 0 2px #e58601}.rank-math-checklist li.test-check-ok:before{color:#e59901;background:transparent;-webkit-box-shadow:inset 0 0 0 2px #e59901;box-shadow:inset 0 0 0 2px #e59901}.rank-math-checklist li.test-check-good:before{color:#52a652;background:transparent;-webkit-box-shadow:inset 0 0 0 2px #52a652;box-shadow:inset 0 0 0 2px #52a652}.rank-math-modal,.rank-math-modal.rank-math-modal-trends-tool{background:#26292c}.rank-math-modal .trends-tool-frame-sidebar,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar{background-color:transparent;border-color:#404349}.rank-math-modal .trends-tool-frame-sidebar .remove-keyword,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .remove-keyword{border-color:#7f868d}.rank-math-modal .trends-tool-frame-sidebar .keyword-field input,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .keyword-field input{color:white}.rank-math-modal .components-text-control__input::-webkit-input-placeholder,.rank-math-modal.rank-math-modal-trends-tool .components-text-control__input::-webkit-input-placeholder{color:white}.rank-math-modal .trends-tool-frame-sidebar .compare-keyword-bar,.rank-math-modal .components-text-control__input,.rank-math-modal .components-select-control__input,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .compare-keyword-bar,.rank-math-modal.rank-math-modal-trends-tool .components-text-control__input,.rank-math-modal.rank-math-modal-trends-tool .components-select-control__input{background:#404349;border:none;color:white}.rank-math-modal .rank-math-trends-cta-wrapper:before,.rank-math-modal.rank-math-modal-trends-tool .rank-math-trends-cta-wrapper:before{content:'';position:absolute;left:0;right:0;top:0;bottom:0;background:#26292c66;z-index:1}.rank-math-modal .components-modal__content .components-modal__header,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header{background-color:#26292C;color:#E0E1E3;-webkit-box-shadow:0 0 8px #0000004d;box-shadow:0 0 8px #0000004d;border:none}.rank-math-modal .components-modal__content .components-modal__header-heading,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header-heading{color:#e0e1e3}.rank-math-modal .components-modal__content .components-modal__header button,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header button{color:#fff}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box{background-color:#404349;z-index:1}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box h3,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box h3{color:#e0e1e3}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box ul li,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box ul li{color:#fff}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs{border-bottom:0;background:#404349}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link),.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-weight:500;color:#e0e1e3}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{color:#70d5f5}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active i,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active i{color:inherit}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{background:#70d5f5}.rank-math-modal .field-group,.rank-math-modal.rank-math-modal-trends-tool .field-group{background:#404349}.rank-math-modal .field-group .components-base-control__help,.rank-math-modal.rank-math-modal-trends-tool .field-group .components-base-control__help{color:inherit}.rank-math-modal .field-group .length-indicator-wrapper .length-indicator,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #34383c), color-stop(19%, #34383c), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #34383c), color-stop(39%, #34383c), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #34383c), color-stop(59%, #34383c), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #34383c), color-stop(79%, #34383c), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #34383c 19%, #34383c 19%, #f16b17 20%, #f1a104 38%, #34383c 39%, #34383c 39%, #f1a404 40%, #d9b507 58%, #34383c 59%, #34383c 59%, #d4b509 60%, #7bb02c 78%, #34383c 79%, #34383c 79%, #76ae2e 80%, #2da24c 100%)}.rank-math-modal .field-group .length-indicator-wrapper .length-indicator span,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper .length-indicator span{background:#34383c}.rank-math-modal .field-group .length-indicator-wrapper.invalid .length-indicator,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #34383c), color-stop(19%, #34383c), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #34383c), color-stop(39%, #34383c), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #34383c), color-stop(59%, #34383c), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #34383c), color-stop(79%, #34383c), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #34383c 19%, #34383c 19%, #e33d2a 20%, #e33d2a 38%, #34383c 39%, #34383c 39%, #e33d2a 40%, #e33d2a 58%, #34383c 59%, #34383c 59%, #e33d2a 60%, #e33d2a 78%, #34383c 79%, #34383c 79%, #e33d2a 80%, #e33d2a 100%)}.rank-math-modal .field-group input[type='text'],.rank-math-modal .field-group input[type='url'],.rank-math-modal .field-group textarea,.rank-math-modal .field-group select,.rank-math-modal.rank-math-modal-trends-tool .field-group input[type='text'],.rank-math-modal.rank-math-modal-trends-tool .field-group input[type='url'],.rank-math-modal.rank-math-modal-trends-tool .field-group textarea,.rank-math-modal.rank-math-modal-trends-tool .field-group select{background:#34383c}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-name,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-name,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{color:#fff}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time{color:#6e767d}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper{border-color:#2f3336;background:#1d2022}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#1a1c1e}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-caption,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-caption{color:#6e767d;background:#1d2022}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-caption .rank-math-social-preview-title{color:#d9d9d9}.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta{border-color:#2f3336;background:#1d2022}.rank-math-modal .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link),.rank-math-modal.rank-math-modal-trends-tool .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){background:#404349}.rank-math-modal .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal.rank-math-modal-trends-tool .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{color:inherit}.rank-math-variables-dropdown{border-color:#34383c;background:#404349;-webkit-box-shadow:0 2px 6px rgba(0,0,0,0.2);box-shadow:0 2px 6px rgba(0,0,0,0.2)}.rank-math-variables-dropdown li{border-color:#34383c}.rank-math-variables-dropdown li:hover{background:#34383c}.rank-math-variables-dropdown li:after{background:#34383c}.tagify{border-color:#64666a;background:#26292c}.tagify__input::before{color:#a4afb7}.tagify__tag.bad-fk{color:#b31d13;background:#f9c6c2}.tagify__tag.bad-fk.selected{color:#fff;background:#f0776f}.tagify__tag.bad-fk.selected .tagify__tag__removebtn{color:#fff;background:#da645c}.tagify__tag.bad-fk.selected .tagify__tag__removebtn:hover{background:#cf5b53}.tagify__tag.bad-fk .tagify__tag__removebtn{color:#fff;background:#f2afaa}.tagify__tag.bad-fk .tagify__tag__removebtn:hover{background:#f19c97}.tagify__tag.ok-fk{color:#996601;background:#ffdd9a}.tagify__tag.ok-fk.selected{color:#fff;background:#e59901}.tagify__tag.ok-fk.selected .tagify__tag__removebtn{color:#fff7e6;background:#bf840d}.tagify__tag.ok-fk.selected .tagify__tag__removebtn:hover{background:#ae790f}.tagify__tag.ok-fk .tagify__tag__removebtn{color:#fff7e6;background:#f5b32e}.tagify__tag.ok-fk .tagify__tag__removebtn:hover{background:#f8ab12}.tagify__tag.good-fk{color:#4a954a;background:#afd8af}.tagify__tag.good-fk.selected{color:#fafdfa;background:#52a652}.tagify__tag.good-fk.selected .tagify__tag__removebtn{color:#fafdfa;background:#478947}.tagify__tag.good-fk.selected .tagify__tag__removebtn:hover{background:#4c6f4c}.tagify__tag.good-fk .tagify__tag__removebtn{color:#fafdfa;background:#87bd87}.tagify__tag.good-fk .tagify__tag__removebtn:hover{background:#70b070}#rank-math-compare-keywords-trigger{border-color:#64666a;background:#26292c}
PK     ’ŠU]üæ\á  á    assets/admin/css/blocks.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	blocks.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-faq ul,#rank-math-howto ul{margin:0 0 15px;padding:0;list-style-type:none}#rank-math-faq ul li,#rank-math-howto ul li{overflow:hidden;margin-bottom:15px;padding:15px 15px 20px;border-radius:5px;background:#fff;-webkit-box-shadow:0 0 10px #d9d9d9,0 0 40px #fff;box-shadow:0 0 10px #d9d9d9,0 0 40px #fff}#rank-math-faq ul li .question-not-visible,#rank-math-faq ul li .step-not-visible,#rank-math-howto ul li .question-not-visible,#rank-math-howto ul li .step-not-visible{opacity:.5}.rank-math-item-header,.rank-math-item-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media screen and (max-width: 782px){.rank-math-item-header{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.rank-math-block{padding:30px 15px;border-radius:5px;background:#f3f4f5;color:#000}.rank-math-block-actions{position:relative;z-index:1;margin-left:1rem}.rank-math-block-actions .components-button.has-icon{line-height:40px;display:inline-block;width:30px;min-width:30px;height:30px;margin-right:5px;padding:0;opacity:.7;border-radius:2px}.rank-math-block-actions .components-button.has-icon:last-child{margin-right:0}.rank-math-block-actions .components-button.has-icon span.dashicon{margin:0;vertical-align:0}.rank-math-block-actions .components-button.has-icon.rank-math-item-move{color:#333;background:hsl(210,9.0909090909%,90.6862745098%)}.rank-math-block-actions .components-button.has-icon.rank-math-item-move>span{margin-left:-2px}.rank-math-block-actions .components-button.has-icon.rank-math-item-move:hover{color:hsl(0,0%,15%);background:hsl(210,9.0909090909%,85.6862745098%)}.rank-math-block-actions .components-button.has-icon.rank-math-item-move.move-up{margin-right:1px;border-radius:2px 0 0 2px}.rank-math-block-actions .components-button.has-icon.rank-math-item-move.move-down{border-radius:0 2px 2px 0}.rank-math-block-actions .components-button.has-icon.rank-math-item-move.rank-math-item-disabled{color:#999}.rank-math-block-actions .components-button.has-icon.rank-math-item-move.rank-math-item-disabled:hover{color:#999}.rank-math-block-actions .components-button.has-icon.rank-math-item-visbility{color:#2f7a36;background:#d0ecd3}.rank-math-block-actions .components-button.has-icon.rank-math-item-visbility:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):active,.rank-math-block-actions .components-button.has-icon.rank-math-item-visbility:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus,.rank-math-block-actions .components-button.has-icon.rank-math-item-visbility:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{opacity:1;color:hsl(125.6,44.3786982249%,28.137254902%);background:#d0ecd3;-webkit-box-shadow:none;box-shadow:none}.rank-math-block-actions .components-button.has-icon.rank-math-item-delete{color:#6a1b1a;background:#f1dada}.rank-math-block-actions .components-button.has-icon.rank-math-item-delete:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):active,.rank-math-block-actions .components-button.has-icon.rank-math-item-delete:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus,.rank-math-block-actions .components-button.has-icon.rank-math-item-delete:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{opacity:1;color:hsl(.75,60.6060606061%,20.8823529412%);background:#f1dada;-webkit-box-shadow:none;box-shadow:none}.rank-math-block-actions .components-button.has-icon.rank-math-item-disabled{cursor:no-drop;opacity:.5;color:#333;background:#eee}.rank-math-block-actions .components-button.has-icon.rank-math-item-disabled:hover,.rank-math-block-actions .components-button.has-icon.rank-math-item-disabled:focus,.rank-math-block-actions .components-button.has-icon.rank-math-item-disabled:active{opacity:.5;color:#333;background:#eee}@media screen and (max-width: 782px){.rank-math-block-actions{margin-left:auto}}.rank-math-block button.is-primary{height:30px;border-color:#069de3;background:#069de3;border-radius:2px}.rank-math-block button.is-primary:hover:not(:disabled){border-color:#08a7f1;background:#08a7f1}.rank-math-block .rank-math-block-title{font-weight:600;line-height:1.4;margin:0 0 .5em;-webkit-box-flex:1;-ms-flex:1;flex:1}.rank-math-block a.rank-math-block-info{font-size:14px;line-height:30px;float:right;padding:0 5px;text-decoration:none;color:inherit;border-radius:16px;background:#e3e3e3;-webkit-box-shadow:none;box-shadow:none}.rank-math-block a.rank-math-block-info:hover span{opacity:1}.rank-math-block a.rank-math-block-info span{vertical-align:-5px;opacity:.7}.rank-math-media-placeholder{position:relative;z-index:1;margin-left:20px}.rank-math-media-placeholder img{display:block;max-width:100%}.rank-math-media-placeholder .rank-math-add-image{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 0 5px}.rank-math-media-placeholder .rank-math-delete-image,.rank-math-media-placeholder .rank-math-replace-image{position:absolute;z-index:1;top:5px;right:5px;-webkit-box-sizing:border-box;box-sizing:border-box;width:20px;min-width:20px;height:20px;padding:0;color:#fff;background:rgba(0,0,0,.8)}.rank-math-media-placeholder .rank-math-delete-image span.dashicon,.rank-math-media-placeholder .rank-math-replace-image span.dashicon{margin:0}.rank-math-media-placeholder .rank-math-replace-image{right:30px}.rank-math-howto-description,.rank-math-howto-duration,.rank-math-howto-estimated-cost,.rank-math-block-textarea{margin-bottom:15px;padding:15px;border-radius:5px;background:#fff;-webkit-box-shadow:0 0 10px #d9d9d9,0 0 40px #fff;box-shadow:0 0 10px #d9d9d9,0 0 40px #fff}#rank-math-faq .rank-math-faq-answer{-webkit-box-flex:1;-ms-flex:1;flex:1}PK     ’ŠU]Ï/2U  2U    assets/admin/css/schema.cssnu „[µü¤        #rank-math-schema-item,#rank-math-schema-item .rank-math-schema-item-actions,.rank-math-pretty-json form,.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header,.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header,.schema-builder .schema-property--body,.schema-builder-save-as{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-schema-tabs{overflow:visible}.rank-math-modal.rank-math-schema-modal.rank-math-schema-modal-no-map{width:80vw}.rank-math-schema-info{font-size:14px;line-height:30px;position:absolute;top:62px;right:20px;padding:0 5px;text-decoration:none;color:inherit;color:#78797a;border-radius:16px;background:#ebeced;-webkit-box-shadow:none;box-shadow:none}.rank-math-schema-info svg{vertical-align:-5px}.rank-math-schema-info:hover{color:#242628;background:#dfe0e1}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-name{font-size:13px;font-weight:normal}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-name i.rm-icon{font-weight:normal}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-item-actions button.button i{margin-right:0}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-item-actions button.button span{display:none}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-item-actions .rank-math-inline-confirmation button span{display:inline}.rank-math-tab-content-richsnippet #rank-math-schema-item .rank-math-schema-item-actions .rank-math-inline-confirmation .rank-math-delete-schema span{display:none}.rank-math-schema-section-title{font-size:14px;font-weight:600;margin:0 0 .825rem;color:#242628}.rank-math-schema-in-use{margin-bottom:1rem;color:#4c6875}.rank-math-schema-in-use #rank-math-schema-item{border-color:#069de3;background:#f4fbff}.rank-math-schema-in-use #rank-math-schema-item .button{color:#4c6875}.rank-math-schema-in-use #rank-math-schema-item .rank-math-schema-name i{font-weight:600}.rank-math-schema-in-use>*{margin-bottom:1rem !important}.rank-math-schema-in-use>*:last-child{margin-bottom:0 !important}.rank-math-schema-in-use .rank-math-notice{margin:0 0 1rem}.rank-math-schema-in-use .rank-math-notice strong{color:#10AC84}.rank-math-schema-filter{display:none}.rank-math-schema-catalog #rank-math-schema-item:hover{color:#4c6875}#rank-math-schema-list-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;margin-bottom:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#rank-math-schema-item{font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-bottom:10px;padding:10px 12px;text-decoration:none;color:#6b7278;border:1px solid #b5bfc9;border-radius:4px;background:#fbfbfb;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-schema-item:hover,#rank-math-schema-item:focus{border-color:#069de3;background:#f4fbff}#rank-math-schema-item input[type='radio']{margin-top:0;margin-right:8px}#rank-math-schema-item .rank-math-schema-name{line-height:1.4;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-schema-item .rank-math-schema-name i{font-size:12px;margin-right:8px;vertical-align:-1px}#rank-math-schema-item .rm-icon-circle-plus:before{vertical-align:-2.4px}#rank-math-schema-item:last-of-type{margin-bottom:0}#rank-math-schema-item .button,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button{font-size:14px;line-height:1.4;min-height:auto;padding:0 12px;text-decoration:none;border:0;border-right:1px solid #dadfe4;background:transparent}#rank-math-schema-item .button:hover,#rank-math-schema-item .button:focus:not(:disabled),#rank-math-schema-item .button:active,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:focus:not(:disabled),.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:active{color:#069de3;border-color:#dadfe4;outline:none;background:none;-webkit-box-shadow:none;box-shadow:none}#rank-math-schema-item .button:last-child,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:last-child{padding-right:0;border-right:0 !important}#rank-math-schema-item .button.rank-math-edit-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-edit-schema i{vertical-align:0}#rank-math-schema-item .button.rank-math-delete-schema i,#rank-math-schema-item .button.rank-math-delete-group i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-group i{vertical-align:-1px}#rank-math-schema-item .button.rank-math-delete-schema:hover,#rank-math-schema-item .button.rank-math-delete-group:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-schema:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-group:hover{color:#ee6a5e}#rank-math-schema-item .button.rank-math-use-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-use-schema i{font-size:11px;vertical-align:-1px}#rank-math-schema-item .button i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button i{font-size:12px;line-height:1.3;margin-right:5px;vertical-align:middle}.show-add-property-group>.schema-group>.schema-group-header .rank-math-add-property-group,.show-add-property>.schema-group>.schema-group-header>.schema-group--actions{display:block !important}#rank-math-schema-item .rank-math-confirm-delete,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete{position:absolute;top:6px;right:10px;width:158px;margin-left:-1px;padding:4px 10px;border-radius:3px;background:#fff;-webkit-box-shadow:0 1px 6px 0 rgba(0,0,0,0.15);box-shadow:0 1px 6px 0 rgba(0,0,0,0.15)}#rank-math-schema-item .rank-math-confirm-delete .is-link,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link{line-height:1.4;padding:0 12px;text-decoration:none;border-right:1px solid #dadfe4}#rank-math-schema-item .rank-math-confirm-delete .is-link:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:hover{text-decoration:underline}#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type{color:#ee6a5e}#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type:hover,#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type:focus,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type:focus{color:#e93f30}#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type{padding-right:0;color:#069de3;border-right:0}#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type:hover,#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type:focus,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type:focus{color:#08a7f1}#rank-math-schema-item .rank-math-confirm-delete>span,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete>span{font-weight:600;line-height:1.4;margin-right:8px}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation{height:22px}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation .rank-math-confirm-delete,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation .rank-math-confirm-delete{top:-3px}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation>button,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation>button{margin-top:2px}.rank-math-pretty-json *,.rank-math-pretty-json *:before,.rank-math-pretty-json *:after{-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-pretty-json *:focus{outline:none}.rank-math-pretty-json textarea{display:none}.rank-math-pretty-json form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-filter:blur(2px);filter:blur(2px)}.rank-math-pretty-json form h4{margin-right:auto;margin-bottom:0}.rank-math-pretty-json form button.is-small i{font-size:13px;display:inline-block;vertical-align:-3.5px}.rank-math-pretty-json form button.is-small:first-of-type i{margin-right:3px}.rank-math-pretty-json form .structured-data-copy{margin-right:5px}.rank-math-pretty-json form .structured-data-copy .success{display:none}.rank-math-pretty-json form .structured-data-copy.copied.is-small{color:#52a652;border-color:#52a652}.rank-math-pretty-json form .structured-data-copy.copied.is-small .original-text{display:none}.rank-math-pretty-json form .structured-data-copy.copied.is-small .success{display:inline-block}.rank-math-pretty-json .code-output{line-height:1.5em;-webkit-filter:blur(2px);filter:blur(2px);overflow-y:auto;margin:1rem 0 0;border-radius:4px;background:#283142}.rank-math-pretty-json .code-output code{font-family:'Roboto Mono', monospace;font-size:14px;line-height:20px;display:block;overflow:scroll;max-height:540px;padding:1rem;color:#eceff1}.rank-math-pretty-json .string{color:#4dd0e1}.rank-math-pretty-json .number{color:#ffab70}.rank-math-pretty-json .boolean{color:#ffab70}.rank-math-pretty-json .null{color:#fafbfc}.rank-math-pretty-json .key{color:#9ccc65}.schema-builder{font-size:14px;line-height:1.25}.schema-builder.schema-template-pre-defined .schema-group--actions{display:none}.schema-builder.schema-template-pre-defined .schema-group-or-property-container>.schema-group-or-property:before{top:-21px;border-width:0 0 2px 2px}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property{padding:0;border:0;background:transparent}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property:before,.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property:after{left:-13px;width:16px}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header>.schema-group--actions button.rank-math-add-property{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-right:0;border-right:0 !important}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property .schema-property--body .schema-property--field{display:none}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property .schema-group--children{padding-top:8px}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group{padding:0;border:0;background:transparent}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group:before{display:none}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group:after{left:-13px}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group>.schema-group-header{display:none}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group>.schema-group--children>.schema-group-or-property-container>.schema-group-or-property{margin-left:0}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions{display:-webkit-box;display:-ms-flexbox;display:flex}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions button.rank-math-add-property-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-right:0;border-right:0 !important}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions{margin-bottom:0}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions button.rank-math-delete-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group--children:empty{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group--children:empty:before{display:none}.schema-builder.schema-template-pre-defined button.is-destructive{display:none}.schema-builder.schema-template-pre-defined .hide-property,.schema-builder.schema-template-pre-defined .hide-group{display:none}.schema-builder.schema-template-pre-defined .show-property{display:block}.schema-builder.schema-template-pre-defined:not(.local-person) .article-notice{display:none}.schema-builder .schema-group--children{margin:0 0 5px;padding-top:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property{margin-bottom:10px;margin-left:1rem;padding:10px;border:1px solid #dadfe4;border-radius:4px;background:#f8f9fa}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property:before{top:-11px;border-width:0 0 2px 2px}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::after{top:50%;border-width:0 0 0 2px}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::before,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::after{position:absolute;left:-14px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:calc(50% + 14px);content:'';border-style:solid;border-color:#dadfe4}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type='text']:hover,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type='number']:hover,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:hover{border-color:#069de3}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type='text']:focus,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type='number']:focus,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property .components-notice{margin-top:1rem;margin-left:0}.schema-builder .schema-group--children>.schema-group-or-property-container:first-child>.schema-group-or-property::before{top:-13px;height:calc(50% + 13px)}.schema-builder .schema-group--children>.schema-group-or-property-container:last-child>.schema-group-or-property::before{border-radius:0 0 0 4px}.schema-builder .schema-group--children>.schema-group-or-property-container:last-child>.schema-group-or-property::after{display:none}.schema-builder .schema-group-or-property{position:relative;border-radius:5px}.schema-builder .schema-group--actions{display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-group--actions button.button{height:22px}.schema-builder .schema-group--actions--tr{margin-bottom:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.schema-builder .schema-group .components-base-control .components-base-control__field{margin-bottom:0}.schema-builder .schema-group .components-base-control.components-toggle-control .components-base-control__field{margin-bottom:5px}.schema-builder .schema-group .components-base-control.components-toggle-control .components-base-control__field label{margin-bottom:0}.schema-builder .schema-property{margin-bottom:15px}.schema-builder .schema-property--label{font-weight:600;position:relative;z-index:1}.schema-builder .schema-property--field{font-weight:600;display:inline-block;margin-right:10px}.schema-builder .schema-property--value{-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-property--value label span{color:#e93f30}.schema-builder .schema-property--value div:not(.components-radio-control__option)>label{font-weight:600;margin-bottom:6px}.schema-builder .schema-property--value .components-select-control__input{display:block}.schema-builder .schema-property--value .components-base-control__help{font-size:14px;font-style:normal;margin-bottom:0;padding-top:10px;color:#7f868d}.schema-builder .schema-property input[type='text']{width:100%}.schema-builder .schema-property textarea{line-height:1.42857143;min-height:30px;padding:4px 8px}.schema-builder .schema-property textarea:disabled{color:inherit;background:#dadfe4}.schema-builder .schema-property--header{display:none;margin-left:10px}.schema-builder .schema-property--header>div{display:inline-block}.schema-builder .schema-property--header button.button.is-secondary{line-height:30px;width:32px;height:30px;padding:0 6px;text-align:center;text-decoration:none;border-color:#7e8993;border-radius:3px;background:#fff}.schema-builder .schema-property--header button.button.is-secondary:hover,.schema-builder .schema-property--header button.button.is-secondary:focus{color:#ee6a5e;border-color:#ee6a5e;background:#fff;-webkit-box-shadow:none;box-shadow:none}.schema-builder .schema-property--header>button:first-child{display:inline-block;margin-right:10px}.schema-builder .schema-property--header>button:first-child i{font-size:16px;vertical-align:middle}.schema-builder .schema-property--header>button:first-child:hover,.schema-builder .schema-property--header>button:first-child:focus{color:#069de3;border-color:#069de3}.schema-builder .schema-property .rank-math-datepicker button.components-button{line-height:26px;height:26px;margin:-7px 0 0 0;padding:0 8px;border:0;background:transparent}.schema-builder .schema-property .rank-math-datepicker button.components-button:focus{-webkit-box-shadow:none;box-shadow:none}.schema-builder-save-as{margin-top:1.5rem}.rank-math-tabs .components-tab-panel__tab-content .components-panel__body .rank-math-pro-cta .button-primary:not(.default){background:#4e8cde;pointer-events:none}.rank-math-tabs .components-tab-panel__tab-content .components-panel__body .rank-math-pro-cta .button-primary:not(.default):hover,.rank-math-tabs .components-tab-panel__tab-content .components-panel__body .rank-math-pro-cta .button-primary:not(.default):focus{background:#397eda;border-color:#397eda}.rank-math-tabs .components-tab-panel__tab-content .components-panel__body .rank-math-pro-cta .button-primary:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda;box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda}.rank-math-pro-cta h3{font-size:1.25rem;margin-bottom:1.5rem}.rank-math-pro-cta.center{position:absolute;left:0;top:0;right:0;bottom:0;display:grid}.rank-math-pro-cta.center .rank-math-cta-box{padding:1.5rem;background:#fff;width:420px;max-width:90%;-ms-flex-item-align:center;align-self:center;justify-self:center;border-radius:4px;-webkit-box-shadow:0px 4px 14px 0px rgba(34,36,55,0.28);box-shadow:0px 4px 14px 0px rgba(34,36,55,0.28)}.rank-math-pro-cta ul{font-size:15px;margin-bottom:1.5rem}.rank-math-pro-cta ul li{margin-bottom:1rem}.rank-math-pro-cta ul li:before{display:inline-block;font-size:16px;font-family:'dashicons';content:"\f15e";width:18px;line-height:18px;color:#fff;background:#10AC84;text-align:center;border-radius:50%;margin-right:5px;vertical-align:-2px}
PK     ’ŠU]^´hÖ  Ö  %  assets/admin/css/dashboard-widget.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	dashboard-widget.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank_math_dashboard_widget .rank-math-dashboard-block,#rank_math_dashboard_widget h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}#screen-options-wrap .rank-math-icon{display:none}#rank_math_dashboard_widget .rank-math-tooltip{position:relative;cursor:pointer;color:#b5bfc9;display:inline-block;line-height:20px;height:20px;z-index:1}#rank_math_dashboard_widget .rank-math-tooltip em{line-height:20px}#rank_math_dashboard_widget .rank-math-tooltip>span{font-size:11px;font-weight:400;line-height:1.5;white-space:normal;width:200px;padding:8px 10px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);text-align:center;pointer-events:none;opacity:0;color:#fff;border-radius:3px;background:#555d66;position:absolute;bottom:100%;left:50%}#rank_math_dashboard_widget .rank-math-tooltip>span:after{content:"";-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);position:absolute;top:100%;left:50%;border-style:solid;height:0;width:0;border-color:#555d66 rgba(0,0,0,0) rgba(0,0,0,0);border-width:8px 7px 0}#rank_math_dashboard_widget .rank-math-tooltip.bottom span{top:130%;bottom:auto;display:table}#rank_math_dashboard_widget .rank-math-tooltip.bottom span:after{position:absolute;top:auto;bottom:100%;left:50%;-webkit-transform:rotate(180deg) translate3d(50%, 0, 0);transform:rotate(180deg) translate3d(50%, 0, 0)}#rank_math_dashboard_widget .rank-math-tooltip.left span{right:0%;-webkit-transform:translate3d(-90%, 0, 0);transform:translate3d(-90%, 0, 0)}#rank_math_dashboard_widget .rank-math-tooltip.left span:after{left:90%}#rank_math_dashboard_widget .rank-math-tooltip:hover{color:#069de3}#rank_math_dashboard_widget .rank-math-tooltip:hover span{bottom:130%;opacity:1;z-index:1}#rank_math_dashboard_widget .hndle{display:inline}#rank_math_dashboard_widget .hndle .rank-math-icon{display:inline-block;height:20px;margin-right:5px;vertical-align:-5px}#rank_math_dashboard_widget .text-large{font-size:1.25rem;font-weight:700;line-height:1;margin-right:5px;color:#242628}#rank_math_dashboard_widget .rank-math-item-difference{color:#7f868d}#rank_math_dashboard_widget .up,#rank_math_dashboard_widget .down{font-weight:500}#rank_math_dashboard_widget .up:before,#rank_math_dashboard_widget .down:before{font-family:"dashicons";font-size:18px;font-weight:900;margin-right:2px;vertical-align:-3px}#rank_math_dashboard_widget .up{color:#10ac84}#rank_math_dashboard_widget .up:before{content:"ï…‚"}#rank_math_dashboard_widget .down{color:#ed5e5e}#rank_math_dashboard_widget .down:before{content:"ï…€"}#rank_math_dashboard_widget h3{font-size:.9375rem;font-weight:500;margin-top:1rem;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank_math_dashboard_widget h3:first-of-type{margin-top:0}#rank_math_dashboard_widget h3 a{line-height:18px;margin-top:3px;text-decoration:none}#rank_math_dashboard_widget h3 a i{font-size:18px;line-height:18px;width:auto;height:18px;padding:0 3px;-webkit-transition:.25s all linear;transition:.25s all linear;color:#b5bfc9;border-radius:2px}#rank_math_dashboard_widget h3 a:hover i,#rank_math_dashboard_widget h3 a:focus i{color:#069de3}#rank_math_dashboard_widget h3 span{font-size:.825rem;font-weight:normal;float:right;margin:2px auto 0 10px;opacity:.5}@media only screen and (max-width: 782px){#rank_math_dashboard_widget .rank-math-dashboard-block{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}#rank_math_dashboard_widget .rank-math-dashboard-block>div{-webkit-box-sizing:border-box;box-sizing:border-box;padding:.825rem 1rem;border:1px solid #dadfe4;-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;-ms-hyphens:auto;hyphens:auto}#rank_math_dashboard_widget .rank-math-dashboard-block>div:first-of-type{border-width:1px 0 1px 1px;border-radius:6px 0 0 6px}#rank_math_dashboard_widget .rank-math-dashboard-block>div:last-of-type{border-radius:0 6px 6px 0}#rank_math_dashboard_widget .rank-math-dashboard-block>div h4{font-size:1rem;font-weight:500;color:#5a5d70}#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:first-of-type{border-width:1px 1px 0 1px;border-radius:6px 0 0 0}#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:nth-of-type(2){border-width:1px 1px 0 0;border-radius:0 6px 0 0}#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:nth-of-type(3){border-radius:0 0 0 6px}#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:last-of-type{border-width:1px 1px 1px 0;border-radius:0 0 6px 0}@media only screen and (max-width: 782px){#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:nth-of-type(n){border-width:1px 1px 0 1px;border-radius:0}#rank_math_dashboard_widget .rank-math-dashboard-block.items-4>div:nth-of-type(n):last-of-type{border-bottom-width:1px}}#rank_math_dashboard_widget .rank-math-blog-list{margin-bottom:1.5rem;margin-left:17px;list-style-type:square}#rank_math_dashboard_widget .rank-math-blog-list li{margin-bottom:.5rem}#rank_math_dashboard_widget .rank-math-blog-list li .rank-math-new-badge{font-size:10px;line-height:16px;display:inline-block;padding:0 5px;vertical-align:1px;color:#fff;border-radius:2px;background:#724bb7}#rank_math_dashboard_widget .rank-math-blog-title{margin:1.5rem 0 1rem}#rank_math_dashboard_widget .rank-math-blog-post h4{font-weight:500;margin-bottom:5px}#rank_math_dashboard_widget .rank-math-blog-post a{-webkit-transition:.25s all linear;transition:.25s all linear;text-decoration:none}#rank_math_dashboard_widget .rank-math-blog-post a:hover,#rank_math_dashboard_widget .rank-math-blog-post a:focus{color:#069de3;border-bottom:1px dotted}#rank_math_dashboard_widget .rank-math-blog-post p{margin:0 0 .825rem}#rank_math_dashboard_widget .rank-math-widget-footer{margin:10px -12px -10px;padding:10px 12px;border-top:1px solid #dadfe4}#rank_math_dashboard_widget .rank-math-widget-footer a{padding:0 10px;text-decoration:none;border-right:1px solid #dadfe4}#rank_math_dashboard_widget .rank-math-widget-footer a:first-child{padding-left:0}#rank_math_dashboard_widget .rank-math-widget-footer a span{font-size:17px;vertical-align:-4px}#rank_math_dashboard_widget .rank-math-widget-go-pro{font-weight:500;color:#10ac84}PK     ’ŠU]Yš�ß4o 4o   assets/admin/css/elementor.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type="text"],.rank-math-tabs input[type="number"],.rank-math-tabs input[type="url"],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px}.rank-math-tabs input[type="text"]:focus,.rank-math-tabs input[type="text"]:hover,.rank-math-tabs input[type="number"]:focus,.rank-math-tabs input[type="number"]:hover,.rank-math-tabs input[type="url"]:focus,.rank-math-tabs input[type="url"]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type="text"]:focus,.rank-math-tabs input[type="number"]:focus,.rank-math-tabs input[type="url"]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type="radio"]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border:1px solid #ccd0d4;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227% !important}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 62%;flex:0 0 62%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-robots-list .rank-math-tooltip-content{width:182% !important}.rank-math-primary-term-picker{margin:20px -16px -17px;padding:16px;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media (min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media (min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}@font-face{font-family:'Rank-Math';font-weight:normal;font-style:normal;font-display:block;src:url("../fonts/Rank-Math.ttf?v1.0.94") format("truetype"),url("../fonts/Rank-Math.woff?v1.0.94") format("woff"),url("../fonts/Rank-Math.svg?v1.0.94#Rank-Math") format("svg")}[class^='rm-icon-'],[class*=' rm-icon-']{font-family:'Rank-Math' !important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.rm-icon-rank-math:before{content:"\e900"}.rm-icon-search-console:before{content:"\ed71"}.rm-icon-adsense:before{content:"\eb99"}.rm-icon-role-manager:before{content:"\ea3a"}.rm-icon-software:before{content:"\ea9a"}.rm-icon-calendar:before{content:"\ea43"}.rm-icon-cart:before{content:"\ed73"}.rm-icon-post-format:before{content:"\ec64"}.rm-icon-fact-check:before{content:"\ebf7"}.rm-icon-tick:before{content:"\eb9d"}.rm-icon-recipe:before{content:"\ec3b"}.rm-icon-circle-plus:before{content:"\eb9f"}.rm-icon-service:before{content:"\ec66"}.rm-icon-cross:before{content:"\ebea"}.rm-icon-settings:before{content:"\ea60"}.rm-icon-comments:before{content:"\ed35"}.rm-icon-dataset:before{content:"\ecf8"}.rm-icon-schema:before{content:"\eb97"}.rm-icon-direction:before{content:"\ecc9"}.rm-icon-desktop:before{content:"\ea67"}.rm-icon-import:before{content:"\ea5a"}.rm-icon-export:before{content:"\ea5d"}.rm-icon-eye:before{content:"\eba4"}.rm-icon-htaccess:before{content:"\ea6f"}.rm-icon-robots:before{content:"\ea70"}.rm-icon-movie:before{content:"\edc1"}.rm-icon-category:before{content:"\ea76"}.rm-icon-images:before{content:"\eb6a"}.rm-icon-google:before{content:"\e901"}.rm-icon-course:before{content:"\ec70"}.rm-icon-heart-filled:before{content:"\ebac"}.rm-icon-home:before{content:"\ed0d"}.rm-icon-image:before{content:"\eaa0"}.rm-icon-info:before{content:"\ebb4"}.rm-icon-stories:before{content:"\ece7"}.rm-icon-acf:before{content:"\eceb"}.rm-icon-book:before{content:"\ec73"}.rm-icon-howto:before{content:"\ebbc"}.rm-icon-faq:before{content:"\ebbd"}.rm-icon-local-seo:before{content:"\ea87"}.rm-icon-job:before{content:"\ed3a"}.rm-icon-misc:before{content:"\ea8f"}.rm-icon-podcast:before{content:"\efee"}.rm-icon-copy:before{content:"\e902"}.rm-icon-mobile:before{content:"\ea2e"}.rm-icon-social:before{content:"\ec76"}.rm-icon-music:before{content:"\ebc8"}.rm-icon-sitemap:before{content:"\ea4f"}.rm-icon-post:before{content:"\ed4d"}.rm-icon-attachment:before{content:"\ed83"}.rm-icon-edit:before{content:"\ec78"}.rm-icon-plus:before{content:"\ebce"}.rm-icon-help:before{content:"\ebd2"}.rm-icon-restaurant:before{content:"\ec56"}.rm-icon-analyzer:before{content:"\eaa9"}.rm-icon-search:before{content:"\eaab"}.rm-icon-star-filled:before{content:"\eab3"}.rm-icon-star:before{content:"\eab5"}.rm-icon-support:before{content:"\ed64"}.rm-icon-tag:before{content:"\ed91"}.rm-icon-target:before{content:"\ed95"}.rm-icon-instant-indexing:before{content:"\ebe1"}.rm-icon-toolbox:before{content:"\ed1f"}.rm-icon-trash:before{content:"\eaba"}.rm-icon-redirection:before{content:"\eb70"}.rm-icon-link:before{content:"\ea83"}.rm-icon-users:before{content:"\eac4"}.rm-icon-video:before{content:"\eb73"}.rm-icon-404:before{content:"\ebe8"}.rm-icon-page:before{content:"\ec86"}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:#5a6065;border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:'';background:#00a0d2;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.components-tab-panel__tab-content .components-panel__body,.components-tab-panel__tab-content .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.components-tab-panel__tab-content .components-panel__body .button,.components-tab-panel__tab-content .components-panel__body .button-secondary,.components-tab-panel__tab-content .components-panel__body .is-secondary,.components-tab-panel__tab-content .components-modal__content .button,.components-tab-panel__tab-content .components-modal__content .button-secondary,.components-tab-panel__tab-content .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:#6b7278;border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .button.active,.components-tab-panel__tab-content .components-panel__body .button-secondary.active,.components-tab-panel__tab-content .components-panel__body .is-secondary.active,.components-tab-panel__tab-content .components-modal__content .button.active,.components-tab-panel__tab-content .components-modal__content .button-secondary.active,.components-tab-panel__tab-content .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:#61676d;border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.components-tab-panel__tab-content .components-panel__body .button:focus,.components-tab-panel__tab-content .components-panel__body .button:hover,.components-tab-panel__tab-content .components-panel__body .button-secondary:focus,.components-tab-panel__tab-content .components-panel__body .button-secondary:hover,.components-tab-panel__tab-content .components-panel__body .is-secondary:focus,.components-tab-panel__tab-content .components-panel__body .is-secondary:hover,.components-tab-panel__tab-content .components-modal__content .button:focus,.components-tab-panel__tab-content .components-modal__content .button:hover,.components-tab-panel__tab-content .components-modal__content .button-secondary:focus,.components-tab-panel__tab-content .components-modal__content .button-secondary:hover,.components-tab-panel__tab-content .components-modal__content .is-secondary:focus,.components-tab-panel__tab-content .components-modal__content .is-secondary:hover,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button:hover,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .button-secondary:hover,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:hover,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button:hover,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .button-secondary:hover,.rank-math-modal .components-modal__content .is-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:hover{color:#069de3;border-color:#069de3;background:#f8f9fa}.components-tab-panel__tab-content .components-panel__body .button:focus,.components-tab-panel__tab-content .components-panel__body .button-secondary:focus,.components-tab-panel__tab-content .components-panel__body .is-secondary:focus,.components-tab-panel__tab-content .components-modal__content .button:focus,.components-tab-panel__tab-content .components-modal__content .button-secondary:focus,.components-tab-panel__tab-content .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.components-tab-panel__tab-content .components-panel__body .button .dashicons,.components-tab-panel__tab-content .components-panel__body .button-secondary .dashicons,.components-tab-panel__tab-content .components-panel__body .is-secondary .dashicons,.components-tab-panel__tab-content .components-modal__content .button .dashicons,.components-tab-panel__tab-content .components-modal__content .button-secondary .dashicons,.components-tab-panel__tab-content .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.components-tab-panel__tab-content .components-panel__body .button.disabled,.components-tab-panel__tab-content .components-panel__body .button-secondary.disabled,.components-tab-panel__tab-content .components-panel__body .is-secondary.disabled,.components-tab-panel__tab-content .components-modal__content .button.disabled,.components-tab-panel__tab-content .components-modal__content .button-secondary.disabled,.components-tab-panel__tab-content .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.components-tab-panel__tab-content .components-panel__body .button-primary,.components-tab-panel__tab-content .components-panel__body .is-primary,.components-tab-panel__tab-content .components-modal__content .button-primary,.components-tab-panel__tab-content .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none}.components-tab-panel__tab-content .components-panel__body .button-primary:focus,.components-tab-panel__tab-content .components-panel__body .button-primary:hover,.components-tab-panel__tab-content .components-panel__body .is-primary:focus,.components-tab-panel__tab-content .components-panel__body .is-primary:hover,.components-tab-panel__tab-content .components-modal__content .button-primary:focus,.components-tab-panel__tab-content .components-modal__content .button-primary:hover,.components-tab-panel__tab-content .components-modal__content .is-primary:focus,.components-tab-panel__tab-content .components-modal__content .is-primary:hover,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .button-primary:hover,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-panel__body .is-primary:hover,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .button-primary:hover,.rank-math-modal .components-modal__content .is-primary:focus,.rank-math-modal .components-modal__content .is-primary:hover{color:#fff;border-color:#08a7f1;background:#08a7f1}.components-tab-panel__tab-content .components-panel__body .button-primary:focus,.components-tab-panel__tab-content .components-panel__body .is-primary:focus,.components-tab-panel__tab-content .components-modal__content .button-primary:focus,.components-tab-panel__tab-content .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.components-tab-panel__tab-content .components-panel__body .button-primary[disabled],.components-tab-panel__tab-content .components-panel__body .is-primary[disabled],.components-tab-panel__tab-content .components-modal__content .button-primary[disabled],.components-tab-panel__tab-content .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default),.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):hover,.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):hover,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:#397eda;background:#397eda}.components-tab-panel__tab-content .components-panel__body .is-blue:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda;box-shadow:0 0 0 1px #fff,0 0 0 3px #397eda}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default),.components-tab-panel__tab-content .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10AC84;background:#10AC84}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):hover,.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):hover,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:#0f9e79;background:#0f9e79}.components-tab-panel__tab-content .components-panel__body .is-green:not(.default):focus,.components-tab-panel__tab-content .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #0f9e79;box-shadow:0 0 0 1px #fff,0 0 0 3px #0f9e79}.components-tab-panel__tab-content .components-panel__body .button-link-delete,.components-tab-panel__tab-content .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:transparent}.components-tab-panel__tab-content .components-panel__body .button-link-delete:hover,.components-tab-panel__tab-content .components-panel__body .button-link-delete:focus,.components-tab-panel__tab-content .components-modal__content .button-link-delete:hover,.components-tab-panel__tab-content .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.components-tab-panel__tab-content .components-panel__body .button-link,.components-tab-panel__tab-content .components-panel__body .is-link,.components-tab-panel__tab-content .components-modal__content .button-link,.components-tab-panel__tab-content .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .button-small,.components-tab-panel__tab-content .components-panel__body .is-small,.components-tab-panel__tab-content .components-modal__content .button-small,.components-tab-panel__tab-content .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.components-tab-panel__tab-content .components-panel__body .button-xlarge,.components-tab-panel__tab-content .components-panel__body .is-large,.components-tab-panel__tab-content .components-modal__content .button-xlarge,.components-tab-panel__tab-content .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.components-tab-panel__tab-content .components-panel__body .button-animated,.components-tab-panel__tab-content .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.components-tab-panel__tab-content .components-panel__body .button-animated i,.components-tab-panel__tab-content .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.components-tab-panel__tab-content .components-panel__body .button-animated:before,.components-tab-panel__tab-content .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:'';-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.components-tab-panel__tab-content .components-panel__body .rank-math-help-icon,.components-tab-panel__tab-content .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.components-tab-panel__tab-content .components-panel__body .rank-math-help-icon:hover,.components-tab-panel__tab-content .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.components-tab-panel__tab-content .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.components-tab-panel__tab-content .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media (min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:16px;height:16px;margin-right:8px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id='1-review']{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:'';-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:transparent transparent #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#00a0d2}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked ~ .rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,0.2);box-shadow:0 5px 30px 0 rgba(0,0,0,0.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 17px;border-bottom:1px solid #dadfe4}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media (max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:transparent;-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type='text'].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math']{padding:0;background:transparent}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math']:hover{background:transparent}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score{padding:8.5px 9px;color:#212F3E;border-radius:2px;background:#dadfe4;border:1px solid #a6b2be}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon{float:left;height:17px;margin-right:4px}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon *,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .rank-math-icon:hover *{fill:inherit !important;stroke:inherit !important}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score .seo-score{font-weight:600;display:inline-block}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.loading{pointer-events:none}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.bad-fk{color:#ef877f;background:#fce9e8;fill:#ef877f;border-color:#ef877f}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.ok-fk{color:#ff9f13;background:#ffeccf;fill:#ff9f13;border-color:#ffb446}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'] .rank-math-toolbar-score.good-fk{color:#67c267;background:#dff2df;fill:#67c267;border-color:#67c267}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score{background:#b5bfc9}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.bad-fk{color:#fff;background:#f29c96;fill:#fff}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.ok-fk{color:#fff;background:#ffbe5f;fill:#fff}.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label='Rank Math'].is-pressed .rank-math-toolbar-score.good-fk{color:#fff;background:#79c979;fill:#fff}.components-menu-group .rank-math-toolbar-score .seo-score{display:none}.components-menu-group .rank-math-toolbar-score .rank-math-icon g{fill:inherit !important}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:'dashicons';font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:'\f155';text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:#ef877f;background:#fce9e8}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:#e4827b}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:#de746d}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:#f6d1cf}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:#f5c0bc}.rank-math-focus-keyword .tagify__tag.ok-fk{color:#ff9f13;background:#ffeccf}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:#f3ab42}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:#eea232}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:#fbd6a0}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:#fccc86}.rank-math-focus-keyword .tagify__tag.good-fk{color:#67c267;background:#dff2df}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:#6ab06a}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:#60a560}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:#b2dcb2}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:#9ad19a}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,0.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"\f335"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,0.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{display:none}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px)}@supports (-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports (-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.tagify__dropdown{position:absolute;z-index:9999;background:white;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,0.18);box-shadow:0 9px 18px 0 rgba(25,30,35,0.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:transparent !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:'\f335';text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:'\f147';background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:#ffa35f;-webkit-box-shadow:inset 0 0 0 2px #ffa35f;box-shadow:inset 0 0 0 2px #ffa35f}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 10px 0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:10px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:'\f335';margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:'\f147'}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:'!';text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:0.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{float:right;margin-left:5px}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:'\f140' !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease, padding .2s ease, margin .2s ease;transition:width .2s ease, padding .2s ease, margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial, sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:transparent}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-title.capitalize{text-transform:capitalize}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid transparent;border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,0.16);box-shadow:0 2px 5px 1px rgba(64,60,67,0.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:#808080;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,0.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media (min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview .rank-math-social-preview-title.capitalize{text-transform:capitalize}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:'\00B7'}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:'\00B7'}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px white}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:transparent !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial, sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id='1-review']{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#F44336;-webkit-transition:0.25s all linear;transition:0.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type="text"],.rank-math-editor .field-group input[type="url"],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type="text"]:hover,.rank-math-editor .field-group input[type="url"]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type="text"]:focus,.rank-math-editor .field-group input[type="url"]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:transparent;-webkit-box-shadow:0 0px 6px rgba(50,50,93,0.1),0 0px 3px rgba(0,0,0,0.1);box-shadow:0 0px 6px rgba(50,50,93,0.1),0 0px 3px rgba(0,0,0,0.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, #ffe919 0%, #fbc000 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:'';background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink 0.6s;animation:blink 0.6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head 0.6s;animation:move-angry-head 0.6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down 0.8s;animation:move-mouth-down 0.8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down 0.8s;animation:move-eyes-down 0.8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink 0.8s;animation:wink 0.8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu,.rank-math-post-publish .rank-math-social-share-buttons,#rank-math-pro-cta .rank-math-cta-header,#rank-math-pro-cta .rank-math-cta-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}.blurred{-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:'';background:rgba(248,249,250,0.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,0.28);box-shadow:0 4px 14px 0 rgba(34,36,55,0.28);-ms-flex-item-align:center;align-self:center;justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{margin-top:10%;-ms-flex-item-align:start;align-self:flex-start}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{padding:1.25rem .825rem;border-bottom:1px solid #dadfe4;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{padding:1.25rem 1.5rem 1.25rem .825rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta ul{font-size:15px;margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;margin-bottom:1rem;padding:0;color:#7f868d;border:0}#rank-math-pro-cta ul li:before{font-family:'dashicons';font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:'\f15e';text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10AC84}#rank-math-pro-cta .button{font-weight:500;display:inline-block;width:auto;max-width:100%;margin:0 auto;padding:0 3rem;text-align:center}.rank-math-tabs>.components-tab-panel__tabs{background:#f8f9fa;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1),inset 0px 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1),inset 0px 1px 1px rgba(0,0,0,0.1)}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){height:34px;font-size:11px;line-height:17px;text-transform:uppercase;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:#f6e7ee;-webkit-box-shadow:0 0 0 4px #f6e7ee;box-shadow:0 0 0 4px #f6e7ee}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{color:#d30c5c;font-weight:normal}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after,.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover:after{display:none}.rank-math-tabs>.components-tab-panel__tab-content>div>div:first-child{border-top:0;margin-top:10px;border-bottom:0}.rank-math-tabs>.components-tab-panel__tab-content select,.rank-math-tabs>.components-tab-panel__tab-content input[type=text]{min-height:30px}.rank-math-tabs>.components-tab-panel__tab-content textarea{line-height:1.42857143;font-family:inherit}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-focus-keyword{background:#fff}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-advanced>.components-panel__body,.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-schema>.components-panel__body{background:#fff}.rank-math-tabs .components-panel__body{padding:15px 10px;margin-bottom:10px}.rank-math-tabs .components-panel__body-title{margin:-16px}.rank-math-tabs .components-panel__body-title button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){color:#6d7882}.rank-math-tabs .components-panel__body-title:hover{background:transparent !important}.rank-math-tabs .components-panel__body-toggle.components-button{color:#6d7882;padding:10px 15px}.rank-math-tabs .rank-math-datepicker>button{color:inherit}.serp-preview{padding:10px;border-radius:5px}.components-tab-panel__tab-content .rank-math-tab-content-general>div:first-child{background:transparent;padding:0 10px 5px}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title .seo-score{display:block}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title:before{font-weight:500}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-result{position:absolute;top:-1px;left:0}.rank-math-tooltip label{cursor:pointer}.rank-math-tooltip label:before{height:21px;vertical-align:middle}.rank-math-tooltip label:hover{color:#d30c5c}.rank-math-tooltip input:checked+label{color:#d30c5c}.rank-math-modal{max-height:763px;border-radius:3px}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:13px;text-transform:none;height:44px}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{display:block;background:#d30c5c}.rank-math-modal .serp-preview-title:before{font-weight:500}.rank-math-modal .rank-math-button-devices .components-button.active,.rank-math-modal .rank-math-button-devices .components-button:hover{background:#f6e7ee !important}
PK     ’ŠU]e¤xÒ2  2    assets/admin/css/post-list.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	post-list.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}.wp-list-table th#rank_math_seo_details span:nth-child(2),.wp-list-table th#rank_math_title span:nth-child(2),.wp-list-table th#rank_math_description span:nth-child(2),.wp-list-table th#rank_math_image_title span:nth-child(2),.wp-list-table th#rank_math_image_alt span:nth-child(2){display:none}.wp-list-table th.bulk-editing span:nth-child(1){display:none}.wp-list-table th.bulk-editing span:nth-child(2){display:inline-block !important}.wp-list-table th.bulk-editing span:nth-child(2) a{display:inline-block}.wp-list-table th.sorted a{display:inline-block}.wp-list-table th#rank_math_seo_details span:first-child a{display:inline-block;padding-right:0}.wp-list-table th#rank_math_seo_details span:first-child a.dashicons{padding-left:0}.wp-list-table td.rank_math_seo_details label{display:none}.wp-list-table td .rank-math-column-display{display:block;margin-bottom:5px}.wp-list-table td .rank-math-column-display.rank-math-link-count>span{opacity:.7}.wp-list-table td .rank-math-column-display.rank-math-link-count .dashicons{margin:0 0 0 -2px;font-size:17px}.wp-list-table td .rank-math-column-display.rank-math-link-count .dashicons.internal{-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-2px}.wp-list-table td .rank-math-column-display.rank-math-link-count .divider{height:10px;width:1px;background:rgba(0,0,0,.35);position:relative;display:inline-block;margin-left:5px;margin-right:5px}.wp-list-table td .rank-math-column-display.rank-math-link-count .rank-math-link-count-clickable{text-decoration:none;color:inherit;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px;padding:2px 4px;border-radius:3px;-webkit-transition:background-color .2s ease,color .2s ease;transition:background-color .2s ease,color .2s ease}.wp-list-table td .rank-math-column-display.rank-math-link-count .rank-math-link-count-clickable:hover{background-color:#2271b1;color:#fff;text-decoration:none}.wp-list-table td .rank-math-column-display.rank-math-link-count .rank-math-link-count-clickable:hover .dashicons{color:#fff}.wp-list-table td .rank-math-column-display.rank-math-link-count .rank-math-link-count-clickable:focus{outline:2px solid #2271b1;outline-offset:1px;-webkit-box-shadow:none;box-shadow:none}.wp-list-table td .rank-math-column-display.rank-math-link-count .rank-math-link-count-item:not(.rank-math-link-count-clickable){display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px;padding:2px 4px;opacity:.6}.wp-list-table td .rank-math-column-display.seo-score{margin-bottom:8px}.wp-list-table td .rank-math-column-display.seo-score strong{display:inline-block;padding:5px 10px;border-radius:4px}.wp-list-table td .rank-math-column-display.seo-score.no-score strong{color:#616161;background:#dedede}.wp-list-table td .rank-math-column-display.seo-score.bad strong{color:#e12925;background:#fce5e2}.wp-list-table td .rank-math-column-display.seo-score.good strong{color:#bf890d;background:#fdf0c4}.wp-list-table td .rank-math-column-display.seo-score.great strong{color:#e3f4e3;background:#4ab147}.wp-list-table td .rank-math-column-display.seo-score.disabled strong{width:20px;height:20px;padding:0;border-radius:50%}.wp-list-table td .rank-math-column-display .is-pillar{vertical-align:top;margin-left:3px;margin-top:2px}.wp-list-table td .rank-math-column-value{display:none;padding:3px;border:1px solid #b5bfc9;background-color:#fff;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}.wp-list-table td .rank-math-column-edit{display:none}.wp-list-table td.bulk-editing .rank-math-column-value,.wp-list-table td.bulk-editing label{display:block}.wp-list-table td.bulk-editing .rank-math-column-display{display:none}.wp-list-table td.dirty .rank-math-column-edit{display:block}PK     ’ŠU]\ª=ÀH  ÀH    assets/admin/css/dashboard.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	dashboard.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-dashboard-page .rank-math-tab-panel{margin-top:0}.components-tab-panel__tab-content{margin-bottom:-1rem}.rank-math-wrap{margin-right:0}.rank-math-breadcrumbs-wrap+.rank-math-notice{max-width:994px;margin-right:20px}.center{text-align:center}.rank-math-list-icon{margin:0 0 1.5rem}.rank-math-list-icon li{margin-bottom:18px;overflow:hidden}.rank-math-list-icon li a{text-decoration:none;color:#7f868d}.rank-math-list-icon li a:hover strong{color:#069de3}.rank-math-list-icon li a:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-list-icon li strong{font-weight:600;display:block;margin:3px 0;color:#242628;-webkit-transition:.25s linear all;transition:.25s linear all}.rank-math-list-icon li p{margin:0}.rank-math-list-icon li i{float:left;margin-right:15px;text-align:center}.rank-math-list-icon li i.rm-icon-star-filled{color:#f7d070;background:#253142}.rank-math-list-icon li i.rm-icon-settings{color:#b8423f;background:rgba(184,66,63,.1)}.rank-math-list-icon li i.rm-icon-import{color:#3494be;background:rgba(52,148,190,.1)}.rank-math-list-icon li i.rm-icon-post{color:#e3765c;background:rgba(227,118,92,.1)}.rank-math-list-icon li i.rm-icon-help{color:#87a627;background:rgba(135,166,39,.1)}.rank-math-list-icon li i.rm-icon-sitemap{color:#dba240;background:rgba(219,162,64,.1)}.rank-math-list-icon li i.rm-icon-support{color:#2940c9;background:rgba(41,64,201,.1)}.rank-math-list-icon li i.rm-icon-service{color:#00a0d2;background:rgba(0,160,210,.1)}.rank-math-list-icon li>div{overflow:hidden}.rank-math-switch input[type=checkbox]{visibility:hidden;height:0;width:0}.rank-math-switch label{position:relative;display:block;cursor:pointer;text-indent:-9999px;border-radius:100px;background:#ddd;height:24px;width:44px}.rank-math-switch label:after{position:absolute;top:2px;left:2px;content:"";-webkit-transition:.4s;transition:.4s;border-radius:90px;background:#fff;height:20px;width:20px}.rank-math-switch input:checked+label{background:#528fcc}.rank-math-switch input:checked+label:after{-webkit-transform:translateX(100%);transform:translateX(100%)}.module-listing .grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.module-listing .rank-math-box i,.rank-math-list-icon li i{font-size:28px;line-height:50px;display:inline-block;color:#ccc;border-radius:6px;background:#eee;height:50px;width:50px}.module-listing .grid{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;gap:.9375rem}.module-listing .grid.pro-active .rank-math-pro-badge{color:#10ac84;background:rgba(16,172,132,.1)}.module-listing .rank-math-box{-webkit-box-flex:0;-ms-flex:0 0 288px;flex:0 0 288px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:1.875rem 1.25rem 80px;text-align:center;flex:0 0 288px}.module-listing .rank-math-box.is-pro{cursor:pointer}.module-listing .rank-math-box.is-pro:hover{border-color:#069de3;-webkit-box-shadow:0 0 0 3px rgba(6,157,227,.15);box-shadow:0 0 0 3px rgba(6,157,227,.15)}.module-listing .rank-math-box.rank-math-unlock-pro-box{border-color:#161e28;background:#253142}.module-listing .rank-math-box.rank-math-unlock-pro-box i{background:#161e28}.module-listing .rank-math-box.rank-math-unlock-pro-box a{text-decoration:none}.module-listing .rank-math-box.rank-math-unlock-pro-box a:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.module-listing .rank-math-box.rank-math-unlock-pro-box header h3{color:#f7d070}.module-listing .rank-math-box.rank-math-unlock-pro-box ul{line-height:1;margin-bottom:0;text-align:left;color:#a2aab5}.module-listing .rank-math-box.rank-math-unlock-pro-box ul li:before{font-family:dashicons;font-size:20px;width:20px;height:20px;margin-right:10px;content:"ï…‡";text-align:center;vertical-align:middle;color:#161e28;border-radius:10px;background:#9ce2b6}.module-listing .rank-math-box.rank-math-unlock-pro-box ul li:last-child{margin-bottom:0}.module-listing .rank-math-box.rank-math-unlock-pro-box .status{text-align:center;border-color:#161e28;background:#161e28}.module-listing .rank-math-box.rank-math-unlock-pro-box .status .button{font-weight:600;line-height:30px;float:none;padding:0 24px;text-transform:uppercase;color:#5a4000;border-color:#f7d070;background:#f7d070}.module-listing .rank-math-box i.rm-icon-404{color:#ff6f6f;background:rgba(255,111,111,.15)}.module-listing .rank-math-box i.rm-icon-mobile{color:#448aff;background:rgba(68,138,255,.15)}.module-listing .rank-math-box i.rm-icon-acf{color:#4caf50;background:rgba(76,175,80,.15)}.module-listing .rank-math-box i.rm-icon-users{color:#ff4081;background:rgba(255,64,129,.15)}.module-listing .rank-math-box i.rm-icon-comments{color:#b8423f;background:rgba(184,66,63,.15)}.module-listing .rank-math-box i.rm-icon-images{color:#00bcd4;background:rgba(0,188,212,.15)}.module-listing .rank-math-box i.rm-icon-link{color:#dba240;background:rgba(219,162,64,.15)}.module-listing .rank-math-box i.rm-icon-local-seo{color:#ff9f43;background:rgba(255,159,67,.15)}.module-listing .rank-math-box i.rm-icon-post{color:#679cf7;background:rgba(103,156,247,.15)}.module-listing .rank-math-box i.rm-icon-podcast{color:#a95be7;background:rgba(169,91,231,.15)}.module-listing .rank-math-box i.rm-icon-redirection{color:#f7b267;background:rgba(247,178,103,.15)}.module-listing .rank-math-box i.rm-icon-schema{color:#843224;background:rgba(132,50,36,.15)}.module-listing .rank-math-box i.rm-icon-role-manager{color:#87a627;background:rgba(135,166,39,.15)}.module-listing .rank-math-box i.rm-icon-search-console{color:#3c88d8;background:rgba(60,136,216,.15)}.module-listing .rank-math-box i.rm-icon-analyzer{color:#e3765c;background:rgba(227,118,92,.15)}.module-listing .rank-math-box i.rm-icon-sitemap{color:#049404;background:rgba(4,148,4,.15)}.module-listing .rank-math-box i.rm-icon-cart{color:#a13cf7;background:rgba(161,60,247,.15)}.module-listing .rank-math-box i.rm-icon-video{color:#c4302b;background:rgba(196,48,43,.15)}.module-listing .rank-math-box i.rm-icon-stories{color:#180ca4;background:rgba(24,12,164,.15)}.module-listing .rank-math-box i.rm-icon-instant-indexing{color:#a40fa4;background:rgba(164,15,164,.15)}.module-listing .rank-math-box i.rm-icon-content-ai{color:#e91e63;background:rgba(233,30,99,.07)}.module-listing .rank-math-box i.rm-icon-content-ai:before{background:linear-gradient(-135deg, #ff4081, #3f51b5);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}.module-listing .rank-math-box i.rm-icon-edit{color:#673ab7;background:rgba(103,58,183,.15)}.module-listing .rank-math-box i.rm-icon-faq{color:#ff5722;background:rgba(255,87,34,.15)}.module-listing .rank-math-box i.rm-icon-support{color:#009688;background:rgba(0,150,136,.15)}.module-listing .rank-math-box i.rm-icon-job{color:#ff4081;background:rgba(255,64,129,.15)}.module-listing .rank-math-box i.rm-icon-post-format{color:#607d8b;background:rgba(96,125,139,.15)}.module-listing .rank-math-box i.rm-icon-book{color:#ff6f00;background:rgba(255,111,0,.15)}.module-listing .rank-math-box i.rm-icon-misc{color:#c51162;background:rgba(197,17,98,.15)}.module-listing .rank-math-box i.rm-icon-page{color:#9c27b0;background:rgba(156,39,176,.15)}.module-listing .rank-math-box i.rm-icon-help{color:#1a237e;background:rgba(26,35,126,.15)}.module-listing .rank-math-box i.rm-icon-thumbs-up{color:#00bfa5;background:rgba(0,191,165,.15)}.module-listing .rank-math-box i.rm-icon-star{color:#e3aa0b;background:rgba(227,170,11,.15)}.module-listing .rank-math-box i.rm-icon-user{color:#006064;background:rgba(0,96,100,.15)}.module-listing .rank-math-box i.rm-icon-restaurant{color:#272649;background:rgba(26,24,78,.15)}.module-listing .rank-math-box i.rm-icon-facebook{color:#3b5998;background:rgba(59,89,152,.15)}.module-listing .rank-math-box i.rm-icon-comments-reply{color:#3b5998;background:rgba(59,89,152,.15)}.module-listing .rank-math-box i.rm-icon-twitter{color:#03a9f4;background:rgba(3,169,244,.15)}.module-listing .rank-math-box i.rm-icon-comments-reply.Tweet_Reply{color:#03a9f4;background:rgba(3,169,244,.15)}.module-listing .rank-math-box i.rm-icon-instagram{color:#ff4081;background:rgba(255,64,129,.15)}.module-listing .rank-math-box i.rm-icon-mail{color:#d93025;background:rgba(217,48,37,.15)}.module-listing .rank-math-box i.rm-icon-mail-reply{color:#d93025;background:rgba(217,48,37,.15)}.module-listing .rank-math-box i.rm-icon-light-bulb{color:#dca720;background:rgba(251,192,45,.15)}.module-listing .rank-math-box i.rm-icon-tick{color:#4caf50;background:rgba(76,175,80,.15)}.module-listing .rank-math-box i.rm-icon-text{color:#009688;background:rgba(0,150,136,.15)}.module-listing .rank-math-box i.rm-icon-social{color:#ff5722;background:rgba(255,87,34,.15)}.module-listing .rank-math-box i.rm-icon-dataset{color:#587c22;background:rgba(88,124,34,.15)}.module-listing .rank-math-box i.rm-icon-youtube{color:#c4302b;background:rgba(196,48,43,.15)}.module-listing .rank-math-box i.rm-icon-recipe{color:#4caf50;background:rgba(76,175,80,.15)}.module-listing .rank-math-box i.rm-icon-code{color:#222;background:rgba(34,34,34,.15)}.module-listing .rank-math-box i.rm-icon-seo{color:#6d4c41;background:rgba(109,76,65,.15)}.module-listing .rank-math-box i.rm-icon-pencil{color:#1e88e5;background:rgba(30,136,229,.15)}.module-listing .rank-math-box i.rm-icon-howto{color:#b71c1c;background:rgba(183,28,28,.15)}.module-listing .rank-math-box i.rm-icon-heading{color:#0d47a1;background:rgba(13,71,161,.15)}.module-listing .rank-math-box i.rm-icon-seo-title{color:#d50000;background:rgba(213,0,0,.15)}.module-listing .rank-math-box i.rm-icon-seo-description{color:#f57f17;background:rgba(245,127,23,.15)}.module-listing .rank-math-box i.rm-icon-text-align-left{color:#388e3c;background:rgba(56,142,60,.15)}.module-listing .rank-math-box i.rm-icon-bot{color:#2196f3;background:rgba(33,150,243,.15)}.module-listing .rank-math-box i.rm-icon-ai-visibility{color:#8a00e4;background:rgba(88,215,255,.15)}.module-listing .rank-math-box i.rm-icon-ai-visibility:before{background:linear-gradient(135deg, #58d7ff, #8a00e4);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}.module-listing .rank-math-box header h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:4px;font-size:1.0625rem;margin:1.5rem 0 .75rem}.module-listing .rank-math-box header h3 .rank-math-pro-badge{font-weight:500}.module-listing .rank-math-box header h3 .rank-math-pro-badge.beta{color:#e91e63;background:rgba(233,30,99,.1)}.module-listing .rank-math-box header .is-upgradeable div{font-size:20px;line-height:0;display:inline-block;height:10px;-webkit-transform:rotate(90deg);transform:rotate(90deg);vertical-align:3px;color:#b5bfc9}.module-listing .rank-math-box header .is-upgradeable div:hover,.module-listing .rank-math-box header .is-upgradeable div:focus{color:#10ac84}.module-listing .rank-math-box header .is-upgradeable div.upgraded{cursor:default;color:#10ac84}.module-listing .rank-math-box header p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;margin-bottom:0;-webkit-line-clamp:5}.module-listing .rank-math-box .module-settings{font-size:14px;line-height:30px;float:left;height:32px;padding:0 12px}.module-listing .rank-math-box .status{position:absolute;bottom:0;left:0;clear:both;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:60px;margin:0;padding:15px 20px;border-top:1px solid #b5bfc9;border-radius:0 0 6px 6px;background:#f8f9fa}.module-listing .rank-math-box .status .toggle-container{position:absolute;top:50%;right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.module-listing .rank-math-box .status::after{display:none}.module-listing .rank-math-box.saving .cmb2-toggle label{display:none}.module-listing .rank-math-box.saving .cmb2-toggle .input-loading{display:block;margin-top:0}.module-listing .rank-math-box input:disabled+label.cmb2-slider.rank-math-tooltip>span:first-child{visibility:visible}.cmb2-toggle{position:relative;display:inline-block;width:50px;height:24px}.cmb2-toggle input{display:none}.cmb2-toggle input:checked+.cmb2-slider{border-color:#069de3;background-color:#069de3}.cmb2-toggle input:checked+.cmb2-slider:before{-webkit-transform:translateX(24px);transform:translateX(24px);background:#fff}.cmb2-toggle input:checked+.cmb2-slider .toggle_off{display:none}.cmb2-toggle input:checked+.cmb2-slider .toggle_on{display:block}.cmb2-toggle input+.cmb2-slider:focus{-webkit-box-shadow:0 0 0 2px #fff,0 0 0 3px #555d66;box-shadow:0 0 0 2px #fff,0 0 0 3px #555d66}.cmb2-toggle input:disabled+.cmb2-slider{border-color:#b5bfc9;background:rgba(0,0,0,0)}.cmb2-toggle input:disabled+.cmb2-slider:before{background:#b5bfc9}.cmb2-toggle input:disabled+.cmb2-slider .toggle_on{border-color:#b5bfc9;background:#b5bfc9;fill:#b5bfc9}.cmb2-toggle input:disabled+.cmb2-slider .toggle_off{color:#b5bfc9}.cmb2-slider{position:absolute;top:0;right:0;bottom:0;left:0;cursor:pointer;border:2px solid #6c7781;border-radius:34px}.cmb2-slider:before{position:absolute;bottom:3px;left:4px;width:14px;height:14px;content:"";border-radius:50%;background-color:#6c7781}.cmb2-slider.disabled{opacity:.6}.toggle_on,.toggle_off{position:absolute;top:6px;left:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.toggle_on{display:none;border:1px solid #fff;border-radius:2px;outline:1px solid rgba(0,0,0,0);outline-offset:-1px;background:#fff;fill:#fff}.toggle_off{right:6px;left:auto;color:#6c7781;fill:currentColor}#side-sortables .cmb-row .cmb2-toggle+.cmb2-metabox-description{padding-bottom:0}.rank-math-onsite-checkout-modal{width:100%;height:100%;max-width:85%;max-height:85%}.rank-math-onsite-checkout-modal .components-modal__content{padding:0;margin-top:0}.rank-math-onsite-checkout-modal .components-modal__content .components-modal__header{padding:0;height:auto;width:auto;left:auto;right:10px;top:10px}.rank-math-onsite-checkout-modal .components-modal__content .components-modal__header button{padding:0;height:auto}.rank-math-onsite-checkout-modal .components-modal__content>div{height:100%}.rank-math-welcome-text{padding:10px 30px;border:1px solid #d8d8d8;border-radius:3px;-webkit-box-shadow:4px 4px 20px rgba(0,0,0,.12);box-shadow:4px 4px 20px rgba(0,0,0,.12)}.rank-math-box{margin-bottom:1.875rem}.rank-math-box header .button{font-weight:500;line-height:32px;color:#fff;border:0;border-radius:4px;-webkit-box-shadow:none;box-shadow:none;position:absolute;top:1.875rem;right:1.875rem}.rank-math-box header .button i{font-size:14px;font-weight:600;display:inline-block;margin-top:-4px;margin-right:5px;vertical-align:middle}.rank-math-box.status-green header h3{color:#58bb58}.rank-math-box.status-green header .button{background:#58bb58}.rank-math-box.status-red header h3{color:#ee6a5e}.rank-math-box.status-red header .button{background:#ee6a5e}.rank-math-box .regular-text.fullwidth{width:100%;margin-top:5px;padding:12px;vertical-align:top;color:#777;border-color:#ddd;background:#e5e5e5;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-box .regular-text.fullwidth:focus{background:#f5f5f5}.rank-math-box form p{font-size:1.125rem;margin-bottom:0}.rank-math-box form .button-xlarge{margin-top:25px}.rank-math-box form .button-connect{font-size:24px;line-height:82px;display:table;height:auto;min-height:30px;margin:25px auto 0;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}[id^=cmb2-metabox-rank] input[type=checkbox]{margin:0 5px 0 0}[id^=cmb2-metabox-rank] input[type=checkbox]:checked,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3;-webkit-box-shadow:none !important;box-shadow:none !important}[id^=cmb2-metabox-rank] input[type=checkbox]:checked:before,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus:before{font-family:"dashicons";font-size:20px;line-height:20px;content:"ï…‡";color:#fff}@media screen and (max-width: 782px){[id^=cmb2-metabox-rank] input[type=checkbox]:checked:before,[id^=cmb2-metabox-rank] input[type=checkbox]:checked:focus:before{width:1.875rem;height:1.875rem;margin:-0.1875rem -0.3125rem}}.rank-math-systm-status{border-collapse:collapse}.rank-math-systm-status td,.rank-math-systm-status th{border:1px solid #b5bfc9}.rank-math-systm-status td:first-child{width:33%}.rank-math-systm-status thead th{font-weight:700}.rank-math-systm-status .rank-math-tooltip{float:right}.rank-math-systm-status+.rank-math-systm-status{margin-top:40px}#debug-report{display:none}#debug-report textarea{font-family:monospace;font-size:12px;line-height:20px;margin:0;padding:20px;resize:none;border-radius:0;outline:0;height:300px;width:100%}body.rtl .module-listing .rank-math-box>.dashicons{float:right}body.rtl .module-listing .rank-math-box header{padding-right:20px;padding-left:0}body.rtl .module-listing .status .rank-math-switch{float:left}body.rtl .module-listing .status .rank-math-switch label{float:left}body.rtl .module-listing .status .rank-math-switch strong{float:right;margin-left:12px}body.rtl .rank-math-box header .button{right:auto;left:20px}body.rtl .rank-math-systm-status .rank-math-tooltip{float:left}PK     ’ŠU]hR;H?  ?    assets/front/js/rank-math.jsnu „[µü¤        !function(){"use strict";var n={n:function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(a,{a}),a},d:function(t,a){for(var e in a)n.o(a,e)&&!n.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:a[e]})},o:function(n,t){return Object.prototype.hasOwnProperty.call(n,t)}};const t=jQuery;var a;(a=n.n(t)())(function(){window.rankMathFront={init:function(){this.adminMenu()},adminMenu:function(){var n=a("#wp-admin-bar-rank-math-mark-me"),t=this;n.on("click",".mark-page-as a",function(n){n.preventDefault(),t.ajax("mark_page_as",{objectID:rankMath.objectID,objectType:rankMath.objectType,what:a(this).attr("href").replace("#","")}),a(this).find(".dashicons").length?a(this).find(".dashicons").remove():a(this).prepend('<span class="dashicons dashicons-yes" style="font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px;"></span>')})},ajax:function(n,t,e){return a.ajax({url:rankMath.ajaxurl,type:e||"POST",dataType:"json",data:a.extend(!0,{action:"rank_math_"+n,security:rankMath.security},t)})}},window.rankMathFront.init()})}();PK     ’ŠU]Á¤¶2m  m  (  assets/front/css/rank-math-seo-score.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:	https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	rank-math-seo-score.css
 */:root{--rankmath-wp-adminbar-height: 0}.rank-math-seo-score{font-family:sans-serif;position:relative;display:inline-block;height:96px;width:96px;margin:20px 20px 30px;text-align:center;color:#fff;border:none;border-radius:50%;background:#eee;-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.before-content{margin:0 0 30px 20px;float:right}.rank-math-seo-score.after-content{margin:20px 0 30px 20px}.rank-math-seo-score.as-shortcode{display:inline-block}.rank-math-seo-score .label{font-size:12px;position:absolute;top:100px;left:0;display:block;width:100%;color:#979ea5}.rank-math-seo-score .score{font-size:42px;font-weight:bold;line-height:42px;display:block}.rank-math-seo-score .outof{font-size:12px;font-weight:normal;line-height:12px;display:block;color:hsla(0,0%,100%,.7)}.rank-math-seo-score .backlink{font-size:12px;position:absolute;top:-94px;left:-12px;display:block;visibility:hidden;width:120px;padding:8px 10px;-webkit-transition:.25s all ease;transition:.25s all ease;-webkit-transition-delay:.25s;transition-delay:.25s;opacity:0;color:#a8a8a8;border:none;border-radius:8px;background:#fff;-webkit-box-shadow:0 4px 12px rgba(60,60,90,.15);box-shadow:0 4px 12px rgba(60,60,90,.15)}.rank-math-seo-score .backlink:after{position:absolute;bottom:-8px;left:calc(50% - 7px);width:0;height:0;content:"";border-width:8px 7.5px 0 7.5px;border-style:solid;border-color:#fff rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.rank-math-seo-score:hover .backlink{top:-74px;visibility:visible;opacity:1}.rank-math-seo-score .poweredby{font-size:13px;color:#a8a8a8}.rank-math-seo-score .poweredby a{display:block;font-weight:normal;text-decoration:none;color:#6372b6;border:none}.rank-math-seo-score.unknown-seo{background:#eee;background:linear-gradient(135deg, #b9b9b9 0%, #989898 100%);-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.bad-seo{background:#f8b0a2;background:linear-gradient(135deg, #f8b0a2 0%, #f1938c 100%);-webkit-box-shadow:1px 1px 1px #e48982;box-shadow:1px 1px 1px #e48982;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8b0a2', endColorstr='#f1938c',GradientType=1 )}.rank-math-seo-score.good-seo{background:#fdd07a;background:linear-gradient(135deg, #fdd07a 0%, #fcbe6c 100%);-webkit-box-shadow:1px 1px 1px #efb463;box-shadow:1px 1px 1px #efb463;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdd07a', endColorstr='#fcbe6c',GradientType=1 )}.rank-math-seo-score.great-seo{background:#99d484;background:linear-gradient(135deg, #99d484 0%, #83c97f 100%);-webkit-box-shadow:1px 1px 1px #5ba857;box-shadow:1px 1px 1px #5ba857;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#99d484', endColorstr='#83c97f',GradientType=1 )}.rank-math-seo-score.template-circle .score{margin-top:22px !important}.rank-math-seo-score.template-square{height:80px;width:110px;border-radius:12px}.rank-math-seo-score.template-square .score{margin:10px 12px;text-align:left}.rank-math-seo-score.template-square .outof{display:inline-block;margin-left:-8px}.rank-math-seo-score.template-square .label{font-size:13px;top:52px;left:14px;text-align:left;color:hsla(0,0%,100%,.8)}.rank-math-seo-score.template-square .backlink{left:-5px}.rank-math-seo-score.template-square.before-content{margin-bottom:20px}.rank-math-seo-score.template-square.after-content{margin-bottom:0}.theme-twentytwenty .rank-math-seo-score{width:96px !important}.theme-twentytwenty .rank-math-seo-score.template-square{width:110px !important}.theme-twentytwenty .rank-math-seo-score.before-content{margin:0 auto 30px auto;display:inherit;float:none}.theme-twentytwenty .rank-math-seo-score.template-circle .score,.theme-twentytwenty .rank-math-seo-score.template-square .score{-webkit-transform:translateY(22px);transform:translateY(22px)}PK     ’ŠU]#F  F  "  assets/front/css/rank-math.min.cssnu „[µü¤        /*!
  * Plugin:	Rank Math
  * URL:	https://rankmath.com/wordpress/plugin/seo-suite/
  * Name:	rank-math.css
  */:root{--rankmath-wp-adminbar-height:0}#wp-admin-bar-rank-math .rank-math-icon{display:inline-block;top:6px;position:relative;padding-right:10px;line-height:1}#wp-admin-bar-rank-math .rank-math-icon svg{fill-rule:evenodd;fill:#dedede;height:21px;vertical-align:inherit}#wp-admin-bar-rank-math:hover .rank-math-icon svg{fill-rule:evenodd;fill:#00b9eb}#wp-admin-bar-rank-math span.rm-mark-page-icon{font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px}PK     ’ŠU]Ü½œŸ�  �  +  assets/front/css/rank-math-contact-info.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:	https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	rank-math-contact-info.css
 */:root{--rankmath-wp-adminbar-height: 0}.rank-math-contact-section{clear:left;margin:1rem 0}.rank-math-contact-section label{font-weight:bold}.rank-math-contact-hours-details .rank-math-opening-hours{margin-bottom:6px}.rank-math-contact-hours-details .rank-math-opening-hours:last-child{margin-bottom:0}.rank-math-contact-hours .rank-math-opening-days,.rank-math-contact-hours .rank-math-opening-time{display:block}.rank-math-phone-number{margin:6px 0}.rank-math-contact-map iframe{width:100%;height:300px;border:0}.clear{clear:both}PK     ’ŠU]·G  G    assets/front/css/rank-math.cssnu „[µü¤        /*!
  * Plugin:	Rank Math
  * URL:	https://rankmath.com/wordpress/plugin/seo-suite/
  * Name:	rank-math.css
  */:root{--rankmath-wp-adminbar-height: 0}#wp-admin-bar-rank-math .rank-math-icon{display:inline-block;top:6px;position:relative;padding-right:10px;line-height:1}#wp-admin-bar-rank-math .rank-math-icon svg{fill-rule:evenodd;fill:#dedede;height:21px;vertical-align:inherit}#wp-admin-bar-rank-math:hover .rank-math-icon svg{fill-rule:evenodd;fill:#00b9eb}#wp-admin-bar-rank-math span.rm-mark-page-icon{font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px}PK     ’ŠU]êFl"–9  –9    rank-math.phpnu „[µü¤        <?php // @codingStandardsIgnoreLine
/**
 * Rank Math SEO Plugin.
 *
 * @package      RANK_MATH
 * @copyright    Copyright (C) 2019-2023, Rank Math - support@rankmath.com
 * @link         https://rankmath.com
 * @since        0.9.0
 *
 * @wordpress-plugin
 * Plugin Name:       Rank Math SEO
 * Version:           1.0.274.1
 * Plugin URI:        https://rankmath.com/
 * Description:       Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.
 * Author:            Rank Math SEO
 * Author URI:        https://rankmath.com/?utm_source=Plugin&utm_medium=Readme%20Author%20URI&utm_campaign=WP
 * License:           GPL-3.0+
 * License URI:       https://www.gnu.org/licenses/gpl-3.0.txt
 * Text Domain:       seo-by-rank-math
 * Domain Path:       /languages
 */

defined( 'ABSPATH' ) || exit;

/**
 * RankMath class.
 *
 * @class Main class of the plugin.
 */
final class RankMath {

	/**
	 * Plugin version.
	 *
	 * @var string
	 */
	public $version = '1.0.274.1';

	/**
	 * Rank Math database version.
	 *
	 * @var string
	 */
	public $db_version = '1';

	/**
	 * Minimum version of WordPress required to run Rank Math.
	 *
	 * @var string
	 */
	private $wordpress_version = '6.7';

	/**
	 * Minimum version of PHP required to run Rank Math.
	 *
	 * @var string
	 */
	private $php_version = '7.4';

	/**
	 * Holds various class instances.
	 *
	 * @var array
	 */
	private $container = [];

	/**
	 * Hold install error messages.
	 *
	 * @var array
	 */
	private $messages = [];

	/**
	 * The single instance of the class.
	 *
	 * @var RankMath
	 */
	protected static $instance = null;

	/**
	 * Magic isset to bypass referencing plugin.
	 *
	 * @param  string $prop Property to check.
	 * @return bool
	 */
	public function __isset( $prop ) {
		return isset( $this->{$prop} ) || isset( $this->container[ $prop ] );
	}

	/**
	 * Magic getter method.
	 *
	 * @param  string $prop Property to get.
	 * @return mixed Property value or NULL if it does not exists.
	 */
	public function __get( $prop ) {
		if ( array_key_exists( $prop, $this->container ) ) {
			return $this->container[ $prop ];
		}

		if ( isset( $this->{$prop} ) ) {
			return $this->{$prop};
		}

		return null;
	}

	/**
	 * Magic setter method.
	 *
	 * @param mixed $prop  Property to set.
	 * @param mixed $value Value to set.
	 */
	public function __set( $prop, $value ) {
		if ( property_exists( $this, $prop ) ) {
			$this->$prop = $value;
			return;
		}

		$this->container[ $prop ] = $value;
	}

	/**
	 * Magic call method.
	 *
	 * @param  string $name      Method to call.
	 * @param  array  $arguments Arguments to pass when calling.
	 * @return mixed Return value of the callback.
	 */
	public function __call( $name, $arguments ) {
		$hash = [
			'plugin_dir'   => RANK_MATH_PATH,
			'plugin_url'   => RANK_MATH_URL,
			'includes_dir' => RANK_MATH_PATH . 'includes/',
			'assets'       => RANK_MATH_URL . 'assets/front/',
			'admin_dir'    => RANK_MATH_PATH . 'includes/admin/',
		];

		if ( isset( $hash[ $name ] ) ) {
			return $hash[ $name ];
		}

		return call_user_func_array( $name, $arguments );
	}

	/**
	 * Initialize.
	 */
	public function init() {
	}

	/**
	 * Retrieve main RankMath instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @see rank_math()
	 * @return RankMath
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof RankMath ) ) {
			self::$instance = new RankMath();
			self::$instance->setup();
		}

		return self::$instance;
	}

	/**
	 * Instantiate the plugin.
	 */
	private function setup() {
		// Define plugin constants.
		$this->define_constants();

		if ( ! $this->is_requirements_meet() ) {
			return;
		}

		// Include required files.
		$this->includes();

		// Instantiate classes.
		$this->instantiate();

		// Loaded action.
		do_action( 'rank_math/loaded' );
	}

	/**
	 * Check that the WordPress and PHP setup meets the plugin requirements.
	 *
	 * @return bool
	 */
	private function is_requirements_meet() {

		// Check WordPress version.
		if ( version_compare( get_bloginfo( 'version' ), $this->wordpress_version, '<' ) ) {
			/* translators: WordPress Version */
			$this->messages[] = sprintf( esc_html__( 'You are using the outdated WordPress, please update it to version %s or higher.', 'seo-by-rank-math' ), $this->wordpress_version );
		}

		// Check PHP version.
		if ( version_compare( phpversion(), $this->php_version, '<' ) ) {
			/* translators: PHP Version */
			$this->messages[] = sprintf( esc_html__( 'Rank Math requires PHP version %s or above. Please update PHP to run this plugin.', 'seo-by-rank-math' ), $this->php_version );
		}

		if ( empty( $this->messages ) ) {
			return true;
		}

		// Auto-deactivate plugin.
		add_action( 'admin_init', [ $this, 'auto_deactivate' ] );
		add_action( 'admin_notices', [ $this, 'activation_error' ] );

		return false;
	}

	/**
	 * Auto-deactivate plugin if requirements are not met, and display a notice.
	 */
	public function auto_deactivate() {
		deactivate_plugins( plugin_basename( RANK_MATH_FILE ) );
		if ( isset( $_GET['activate'] ) ) { // phpcs:ignore
			unset( $_GET['activate'] ); // phpcs:ignore
		}
	}

	/**
	 * Error notice on plugin activation.
	 */
	public function activation_error() {
		?>
		<div class="notice rank-math-notice notice-error">
			<p>
				<?php echo join( '<br>', $this->messages ); // phpcs:ignore ?>
			</p>
		</div>
		<?php
	}

	/**
	 * Define the plugin constants.
	 */
	private function define_constants() {
		define( 'RANK_MATH_VERSION', $this->version );
		define( 'RANK_MATH_FILE', __FILE__ );
		define( 'RANK_MATH_PATH', dirname( RANK_MATH_FILE ) . '/' );
		define( 'RANK_MATH_URL', plugins_url( '', RANK_MATH_FILE ) . '/' );
		define( 'RANK_MATH_SITE_URL', 'https://rankmath.com' );
		if ( ! defined( 'CONTENT_AI_URL' ) ) {
			define( 'CONTENT_AI_URL', 'https://cai.rankmath.com' );
		}
	}

	/**
	 * Include the required files.
	 */
	private function includes() {
		include __DIR__ . '/vendor/autoload.php';

		if ( class_exists( 'WP\MCP\Core\McpAdapter' ) && function_exists( 'wp_get_abilities' ) ) {
			\WP\MCP\Core\McpAdapter::instance();
		}

		// For Theme Developers:
		// theme-folder/rankmath.php will be loaded automatically.
		$file = get_stylesheet_directory() . '/rank-math.php';
		if ( file_exists( $file ) ) {
			require_once $file;
		}
	}

	/**
	 * Instantiate classes.
	 */
	private function instantiate() {
		new \RankMath\Installer();

		// Setting Manager.
		$this->container['settings'] = new \RankMath\Settings();

		// JSON Manager.
		$this->container['json'] = new \RankMath\Json_Manager();

		// Notification Manager.
		$this->container['notification'] = new \RankMath\Admin\Notifications\Notification_Center( 'rank_math_notifications' );

		// Product Registration.
		$this->container['registration'] = new \RankMath\Admin\Registration();
		if ( $this->container['registration']->invalid ) {
			return;
		}

		$this->container['manager']   = new \RankMath\Module\Manager();
		$this->container['variables'] = new \RankMath\Replace_Variables\Manager();

		// Just init without storing it in the container.
		new \RankMath\Common();
		$this->container['rewrite'] = new \RankMath\Rewrite();
		new \RankMath\Compatibility();
		$this->container['tracking'] = new \RankMath\Tracking();

		// Frontend SEO Score.
		$this->container['frontend_seo_score'] = new \RankMath\Frontend_SEO_Score();
		$this->load_3rd_party();

		// Initialize the action and filter hooks.
		$this->init_actions();
	}

	/**
	 * Initialize WordPress action and filter hooks.
	 */
	private function init_actions() {
		add_action( 'init', [ $this, 'pass_admin_content' ] );

		// Add plugin action links.
		add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 2 );
		add_filter( 'plugin_action_links_' . plugin_basename( RANK_MATH_FILE ), [ $this, 'plugin_action_links' ] );
		add_action( 'after_plugin_row_' . plugin_basename( RANK_MATH_FILE ), [ $this, 'plugin_row_deactivate_notice' ] );

		// Booting.
		add_action( 'plugins_loaded', [ $this, 'init' ], 14 );
		add_action( 'rest_api_init', [ $this, 'init_rest_api' ] );

		// WordPress Abilities API integration (priority 0 = before wp_abilities_api_init fires).
		add_action( 'init', [ $this, 'init_abilities' ], 0 );

		// Load admin-related functionality.
		if ( is_admin() ) {
			add_action( 'plugins_loaded', [ $this, 'init_admin' ], 15 );
		}

		// Frontend-only functionality.
		if ( ! is_admin() || in_array( \RankMath\Helpers\Param::request( 'action' ), [ 'elementor', 'elementor_ajax' ], true ) ) {
			add_action( 'plugins_loaded', [ $this, 'init_frontend' ], 15 );
		}

		// WP_CLI.
		if ( defined( 'WP_CLI' ) && WP_CLI ) {
			add_action( 'plugins_loaded', [ $this, 'init_wp_cli' ], 20 );
		}
	}

	/**
	 * Bootstrap the WordPress Abilities API integration.
	 */
	public function init_abilities() {
		\RankMath\Abilities\Abilities::get();
	}

	/**
	 * Load the REST API endpoints.
	 */
	public function init_rest_api() {
		$controllers = [
			new \RankMath\Rest\Admin(),
			new \RankMath\Rest\Front(),
			new \RankMath\Rest\Shared(),
			new \RankMath\Rest\Post(),
			new \RankMath\Rest\Headless(),
			new \RankMath\Rest\Setup_Wizard(),
		];

		foreach ( $controllers as $controller ) {
			$controller->register_routes();
		}
	}

	/**
	 * Initialize the admin-related functionality.
	 * Runs on 'plugins_loaded'.
	 */
	public function init_admin() {
		if ( $this->container['registration']->invalid ) {
			return;
		}
		new \RankMath\Admin\Admin_Init();
	}

	/**
	 * Initialize the frontend functionality.
	 * Runs on 'plugins_loaded'.
	 */
	public function init_frontend() {
		if ( $this->container['registration']->invalid ) {
			return;
		}
		$this->container['frontend'] = new \RankMath\Frontend\Frontend();
	}

	/**
	 * Load 3rd party modules.
	 */
	private function load_3rd_party() {
		if ( ! function_exists( 'is_plugin_active' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php'; // @phpstan-ignore-line
		}

		// Elementor.
		if ( is_plugin_active( 'elementor/elementor.php' ) ) {
			new \RankMath\Elementor\Elementor();
		}

		// Loco Translate: initialize inline i18n injector for settings React UI.
		if ( is_plugin_active( 'loco-translate/loco.php' ) ) {
			new \RankMath\ThirdParty\Loco\Loco_I18n_Inline();
		}

		// WPML.
		if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
			new \RankMath\ThirdParty\WPML();
		}

		// Divi theme.
		add_action(
			'after_setup_theme',
			function () {
				if ( defined( 'ET_CORE' ) ) {
					new \RankMath\Divi\Divi();
				}
			},
			11
		);
		add_action(
			'current_screen',
			function () {
				if ( defined( 'ET_CORE' ) ) {
					new \RankMath\Divi\Divi_Admin();
				}
			}
		);
	}

	/**
	 * Add our custom WP-CLI commands.
	 */
	public function init_wp_cli() {
		WP_CLI::add_command( 'rankmath sitemap generate', [ '\RankMath\CLI\Commands', 'sitemap_generate' ] );
	}

	/**
	 * Show action links on the plugin screen.
	 *
	 * @param  mixed $links Plugin Action links.
	 * @return array
	 */
	public function plugin_action_links( $links ) {
		$options = [
			'options-general' => __( 'Settings', 'seo-by-rank-math' ),
			'wizard'          => __( 'Setup Wizard', 'seo-by-rank-math' ),
		];

		if ( $this->container['registration']->invalid ) {
			$options = [
				'registration' => __( 'Setup Wizard', 'seo-by-rank-math' ),
			];
		}

		foreach ( $options as $link => $label ) {
			$plugin_links[] = '<a href="' . \RankMath\Helper::get_admin_url( $link ) . '">' . esc_html( $label ) . '</a>';
		}

		return array_merge( $links, $plugin_links );
	}

	/**
	 * Add a notice when rank_math_clear_data_on_uninstall filter is present in the theme.
	 *
	 * @param string $file Plugin file.
	 *
	 * @return void
	 */
	public function plugin_row_deactivate_notice( $file ) {
		if ( false === apply_filters( 'rank_math_clear_data_on_uninstall', false ) ) {
			return;
		}

		if ( is_multisite() && ! is_network_admin() && is_plugin_active_for_network( $file ) ) {
			return;
		}

		$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
		echo '<tr class="plugin-update-tr active rank-math-deactivate-notice-row" data-slug="" data-plugin="' . esc_attr( $file ) . '" style="position: relative; top: -1px;"><td colspan="' . esc_attr( $wp_list_table->get_column_count() ) . '" class="plugin-update colspanchange"><div class="notice inline notice-error notice-alt"><p>';
		printf(
		/* translators: 1. Bold text 2. Bold text */
			esc_html__( '%1$s A filter to remove the Rank Math data from the database is present. Deactivating & Deleting this plugin will remove everything related to the Rank Math plugin. %2$s', 'seo-by-rank-math' ),
			'<strong>' . esc_html__( 'CAUTION:', 'seo-by-rank-math' ) . '</strong>',
			'<br /><strong>' . esc_html__( 'This action is IRREVERSIBLE.', 'seo-by-rank-math' ) . '</strong>'
		);
		echo '</p></div></td></tr>';
	}

	/**
	 * Add extra links as row meta on the plugin screen.
	 *
	 * @param  mixed $links Plugin Row Meta.
	 * @param  mixed $file  Plugin Base file.
	 * @return array
	 */
	public function plugin_row_meta( $links, $file ) {
		if ( plugin_basename( RANK_MATH_FILE ) !== $file ) {
			return $links;
		}

		$more = [
			'<a href="' . admin_url( '?page=rank-math&view=help' ) . '">' . esc_html__( 'Getting Started', 'seo-by-rank-math' ) . '</a>',
			'<a href="' . \RankMath\KB::get( 'knowledgebase', 'Plugin Page KB Link' ) . '" target="_blank">' . esc_html__( 'Documentation', 'seo-by-rank-math' ) . '</a>',
		];

		return array_merge( $links, $more );
	}

	/**
	 * Localize admin content to JS
	 */
	public function pass_admin_content() {
		if ( is_user_logged_in() && is_admin_bar_showing() ) {
			$this->container['json']->add( 'version', $this->version, 'rankMath' );
			$this->container['json']->add( 'ajaxurl', admin_url( 'admin-ajax.php' ), 'rankMath' );
			$this->container['json']->add( 'adminurl', admin_url( 'admin.php' ), 'rankMath' );
			$this->container['json']->add( 'endpoint', esc_url_raw( rest_url( 'rankmath/v1' ) ), 'rankMath' );
			$this->container['json']->add( 'security', wp_create_nonce( 'rank-math-ajax-nonce' ), 'rankMath' );
			$this->container['json']->add( 'restNonce', ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ), 'rankMath' );
			$this->container['json']->add( 'modules', \RankMath\Helper::get_active_modules(), 'rankMath' );
		}
	}
}

/**
 * Returns the main instance of RankMath to prevent the need to use globals.
 *
 * @return RankMath
 */
function rank_math() { // phpcs:ignore -- This is a main function used to initialize the plugin.
	return RankMath::get();
}

// Start it.
rank_math();
PK     ’ŠU]€2ÉÃ>  >    composer.jsonnu „[µü¤        {
	"name": "rankmath/seo-by-rank-math",
	"description": "Rank Math is the most powerful way to get BEST WordPress SEO tools added to your website.",
	"keywords": [ "wordpress", "plugin" ],
	"homepage": "https://rankmath.com",
	"type": "wordpress-plugin",
	"license": "GPL-3.0",
	"authors": [
		{
			"name": "Rank Math",
			"email": "support@rankmath.com"
		}
	],
	"config": {
		"allow-plugins": {
			"phpstan/extension-installer": true,
			"composer/installers": true,
			"dealerdirect/phpcodesniffer-composer-installer": true
		}
	},
	"repositories":[
        {
            "type":"composer",
            "url":"https://wpackagist.org",
            "only": [
                "wpackagist-plugin/*",
                "wpackagist-theme/*"
            ]
        }
    ],
	"require": {
		"cmb2/cmb2": "^2.7",
		"donatj/phpuseragentparser": "^1.6.1",
		"woocommerce/action-scheduler": "^3.4.2",
		"a5hleyrich/wp-background-processing": "^1.0.2",
		"wp-media/wp-mixpanel": "^1.0",
		"wordpress/mcp-adapter": "^0.4.1"
	},
	"require-dev": {
		"micheh/phpcs-gitlab": "^2.0",
		"phpcompatibility/phpcompatibility-wp": "*",
		"php-stubs/wordpress-tests-stubs": "^6.5",
		"phpstan/extension-installer": "^1.3",
		"phpstan/phpstan-mockery": "^1.1",
		"phpstan/phpstan-phpunit": "^1.4",
		"szepeviktor/phpstan-wordpress": "^1.3",
		"wp-coding-standards/wpcs": "^3.0",
		"wp-media/phpunit": "^3.0",
		"wpackagist-plugin/amp":"^2",
		"wpackagist-plugin/buddypress":"^14",
		"wpackagist-plugin/easy-digital-downloads":"^3",
		"wpackagist-plugin/elementor":"^3",
		"wpackagist-plugin/web-stories":"^1",
		"wpackagist-plugin/woocommerce": "^9",
		"php-stubs/wp-cli-stubs": "^2.11"
	},
	"extra": {
        "installer-paths": {
            "vendor/cmb2/cmb2": ["cmb2/cmb2"],
			"vendor/{$vendor}/{$name}/": ["type:wordpress-plugin"]
        }
    },
	"autoload" : {
		"classmap" : [ "includes/" ],
		"files": [
			"vendor/cmb2/cmb2/init.php",
			"includes/template-tags.php",
			"vendor/woocommerce/action-scheduler/action-scheduler.php"
		]
	},
	"autoload-dev": {
		"psr-4": {
			"RankMath\\Tests\\": "tests/"
		}
	},
	"scripts": {
		"install-codestandards": [
            "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run"
        ],
		"phpcs": "vendor/bin/phpcs",
		"phpstan": "vendor/bin/phpstan analyze --memory-limit=4G --no-progress",
		"test-unit": "php -d memory_limit=1G \"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist",
		"test-integration": "php -d memory_limit=1G \"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist",
		"test-unit-cover": "php -d memory_limit=1G \"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist --coverage-html coverage-report --coverage-clover tests/Unit/coverage-unit.xml"
	}
}
PK     ’ŠU]õ"|Íêj êj   languages/rank-math.potnu „[µü¤        # Copyright (C) 2026 Rank Math SEO
# This file is distributed under the GPL-3.0+.
msgid ""
msgstr ""
"Project-Id-Version: Rank Math SEO 1.0.274.1\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/seo-by-rank-math\n"
"Last-Translator: Rank Math <support@rankmath.com>\n"
"Language-Team: Rank Math <support@rankmath.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-07-15T06:44:26+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: seo-by-rank-math\n"

#. Plugin Name of the plugin
#. Author of the plugin
msgid "Rank Math SEO"
msgstr ""

#. Plugin URI of the plugin
msgid "https://rankmath.com/"
msgstr ""

#. Description of the plugin
msgid "Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic."
msgstr ""

#. Author URI of the plugin
msgid "https://rankmath.com/?utm_source=Plugin&utm_medium=Readme%20Author%20URI&utm_campaign=WP"
msgstr ""

msgid "Please use the correct format."
msgstr ""

msgid "This field is required."
msgstr ""

msgid "Please enter a valid email address."
msgstr ""

msgid "Please enter a valid URL."
msgstr ""

msgid "Create AI Visibility brand"
msgstr ""

msgid "Creates a new brand for AI Visibility monitoring, triggering an initial analysis automatically."
msgstr ""

msgid "Brand name."
msgstr ""

msgid "Brand website URL."
msgstr ""

msgid "Short description of the brand or product."
msgstr ""

msgid "ISO 3166-1 alpha-2 country code (e.g. \"US\", \"HU\"). Defaults to no country filter."
msgstr ""

msgid "Get AI Visibility brand insights"
msgstr ""

msgid "Returns the full analysis results for a single brand â€” AI Visibility score, rank, sentiment, mention and citation counts, per-competitor breakdown, and per-query results including the raw AI model responses."
msgstr ""

msgid "Brand UUID. Obtain from get-ai-visibility-overview."
msgstr ""

msgid "Get AI Visibility brand queries"
msgstr ""

msgid "Returns the list of search queries being monitored for a brand, including which are currently enabled and which were auto-generated as baselines."
msgstr ""

msgid "Brand UUID. Obtain from get-ai-visibility-overview or get-ai-visibility-brand-insights."
msgstr ""

msgid "Get AI Visibility overview"
msgstr ""

msgid "Returns the site-level AI Visibility summary and the full list of tracked brands with their current scores, ranks, sentiment, and analysis status."
msgstr ""

msgid "Pass true to bypass the 12-hour dashboard cache and return a stale-flagged response. Use the REST endpoint to trigger a fresh upstream fetch."
msgstr ""

msgid "Filter brands by name or URL (case-insensitive substring match)."
msgstr ""

msgid "AI Visibility"
msgstr ""

msgid "Abilities to retrieve AI brand visibility data tracked by Rank Math."
msgstr ""

msgid "Get top keywords"
msgstr ""

msgid "Returns the top-performing keywords by clicks from Google Search Console, with impressions, CTR, and average position for the selected date range."
msgstr ""

msgid "Date range for which to fetch keyword data."
msgstr ""

msgid "Maximum number of keywords to return."
msgstr ""

msgid "The search query keyword."
msgstr ""

msgid "Total clicks from Google Search Console."
msgstr ""

msgid "Total impressions from Google Search Console."
msgstr ""

msgid "Click-through rate as a percentage (0â€“100)."
msgstr ""

msgid "Average position in Google Search results."
msgstr ""

msgid "Position trend vs. the previous period. Provided by Rank Math PRO for tracked keywords."
msgstr ""

msgid "Whether this keyword is tracked in Rank Math PRO Rank Tracker."
msgstr ""

msgid "Pages on your site that rank for this keyword. Provided by Rank Math PRO."
msgstr ""

msgid "WordPress post ID."
msgstr ""

msgid "Post title."
msgstr ""

msgid "Relative URL path of the page."
msgstr ""

msgid "Whether Google Search Console is connected."
msgstr ""

msgid "Analytics"
msgstr ""

msgid "Abilities to query Google Search Console and analytics data."
msgstr ""

msgid "Analyze post content"
msgstr ""

msgid "Gathers the raw content, metadata, and list of on-page SEO tests for a saved post so an AI agent can run Rank Math's full on-page analysis itself, since the scoring engine only runs client-side. Use tests_to_run and content together with kb_link (the scoring rubric for all 24 tests) to evaluate each test and produce a per-test score, status, and fix message."
msgstr ""

msgid "ID of the post to analyze."
msgstr ""

msgid "Optional focus keyword to analyze against, overriding the post's saved focus keyword."
msgstr ""

msgid "No post found with the given ID, or the post status is not supported."
msgstr ""

msgid "Evaluate each test ID in tests_to_run against the fields in content, using kb_link as the scoring rubric for how each test is scored. Return a per-test breakdown with score, max_score, status (pass/fail), and a message with a specific fix. For the contentHasTOC test, when suggesting a fix or drafting content, tell the user to insert the Rank Math Table of Contents block (block name rank-math/toc-block, available in the block inserter as \"Table of Contents\") right after the intro, instead of a manual list of links â€” it auto-generates from the post headings."
msgstr ""

msgid "Get SEO scores"
msgstr ""

msgid "Returns SEO scores and grades for posts. Before running, ask the user which posts they want to review: posts needing improvement (bad score), posts with no focus keyword, unscored posts, or simply the most recently modified posts. Use this to surface which posts need SEO attention without needing to know post IDs in advance."
msgstr ""

msgid "Number of recently modified posts to retrieve. Defaults to 10, maximum 100."
msgstr ""

msgid "Post type to filter by (e.g. \"post\", \"page\"). Defaults to all public post types."
msgstr ""

msgid "Ask the user which posts they want to review before running this ability. Available options: \"bad\" (score â‰¤ 50, needs improvement), \"good\" (score 51â€“80, ok), \"great\" (score > 80), \"empty-fk\" (no focus keyword set), \"unscored\" (never analyzed). If the user does not specify, omit this parameter to return the most recently modified posts."
msgstr ""

msgid "Not available"
msgstr ""

msgid "Good"
msgstr ""

msgid "OK"
msgstr ""

msgid "Needs improvement"
msgstr ""

msgid "Content Analysis"
msgstr ""

msgid "Abilities to retrieve on-page SEO analysis scores for posts."
msgstr ""

msgid "Get link report"
msgstr ""

msgid "Returns a site-wide link health report: total internal and external links, post counts with no internal or external links, and â€” on Rank Math PRO â€” broken links, redirects, nofollow counts, and HTTP status distribution from the Link Genius audit."
msgstr ""

msgid "Get post links"
msgstr ""

msgid "Returns a paginated list of internal and external links stored for a given post, including the URL, link type, and target post details for internal links."
msgstr ""

msgid "ID of the post whose links to retrieve."
msgstr ""

msgid "Upgrade to Rank Math PRO to unlock broken link detection, redirect chain analysis, and HTTP status distribution from the Link Genius audit."
msgstr ""

msgid "Link Genius"
msgstr ""

msgid "Abilities to retrieve and analyse internal and external link data for posts."
msgstr ""

msgid "Get post SEO metadata"
msgstr ""

msgid "Returns the full SEO metadata for a post: title, description, focus keyword, robots settings, canonical URL, Open Graph and Twitter overrides, and the current SEO score."
msgstr ""

msgid "The ID of the post to retrieve SEO metadata for."
msgstr ""

msgid "Post SEO"
msgstr ""

msgid "Abilities to read and manage per-post SEO metadata."
msgstr ""

msgid "Get post schema"
msgstr ""

msgid "Returns the schema markup attached to a post and the schema types available on this install. Use this after rank-math/get-post-seo-meta to check what schema is already set and what types are supported before making a recommendation. If the schema type you want to recommend is not in available_types.types and upgrade_message is present, show upgrade_message verbatim to the user and do not suggest adding the schema type directly."
msgstr ""

msgid "The ID of the post to retrieve schema markup for."
msgstr ""

msgid "When true (default), includes the schema types available on this install. Always pass true when evaluating which schema to add."
msgstr ""

msgid "Invalid post ID."
msgstr ""

msgid "This schema type requires Rank Math PRO. Upgrade at rankmath.com/pro to unlock Movie, Dataset, Fact Check, and custom schema types."
msgstr ""

msgid "Schema"
msgstr ""

msgid "Abilities to read and manage schema markup attached to posts."
msgstr ""

msgid "The provided URL is not valid."
msgstr ""

#. translators: %s: URL to the Rank Math PRO upgrade page
msgid "Competitor URL analysis requires Rank Math PRO. Upgrade at %s"
msgstr ""

msgid "Audit site SEO"
msgstr ""

msgid "Runs Rank Math's site-wide SEO audit and returns a structured score plus per-test findings with fix hints. Combines local checks with the remote rankmath.com API tests."
msgstr ""

msgid "Re-run the audit. Defaults to true (always fresh when called by an AI host)."
msgstr ""

msgid "Optional URL to audit. Defaults to this site's home URL. When provided, only remote API tests run (local checks are site-wide)."
msgstr ""

#. translators: %s: test ID
msgid "No automatic fix is available for test \"%s\". Use the fix_text guidance to resolve it manually."
msgstr ""

msgid "Site visibility set to public. Search engines can now index your site."
msgstr ""

msgid "Permalink structure is already set to /%postname%/."
msgstr ""

msgid "Permalink structure set to /%postname%/ and rewrite rules flushed."
msgstr ""

msgid "A \"value\" input is required to set the site tagline. Provide a short, unique description of your site."
msgstr ""

msgid "The provided tagline is the default WordPress value. Please supply a unique tagline."
msgstr ""

#. translators: %s: tagline value
msgid "Site tagline updated to: \"%s\"."
msgstr ""

msgid "Sitemap module enabled. Your XML sitemap is now active."
msgstr ""

msgid "Schema / rich snippet module enabled."
msgstr ""

msgid "Global robots setting updated to allow indexing. Run a fresh audit to confirm the remote API test passes."
msgstr ""

msgid "OpenGraph output is always enabled in Rank Math. If this test is failing, the remote audit API may need a fallback Open Graph image. Set one at Rank Math â†’ Titles & Meta â†’ Global Meta â†’ Open Graph Thumbnail."
msgstr ""

msgid "Robots.txt content is already configured in Rank Math settings."
msgstr ""

msgid "Default robots.txt content written to Rank Math settings."
msgstr ""

msgid "No indexable post types are configured in Rank Math."
msgstr ""

msgid "All published posts already have a focus keyword set."
msgstr ""

#. translators: 1: count updated, 2: total found
msgid "Set focus keywords on %1$d posts (derived from post titles)."
msgstr ""

#. translators: %d: post_limit
msgid "Results were limited to %d posts â€” run again to continue."
msgstr ""

msgid "All posts with focus keywords already include them in their titles."
msgstr ""

#. translators: %d: count updated
msgid "Updated focus keywords on %d posts to match their titles."
msgstr ""

msgid "Fix site SEO"
msgstr ""

msgid "Applies an automatic fix for a single failing Rank Math SEO test. Pass the test_id from an audit-site-seo finding. Some fixes require additional input (e.g. value for site_description). Bulk fixes accept an optional post_limit."
msgstr ""

msgid "The SEO test identifier to fix (from audit-site-seo findings)."
msgstr ""

msgid "Required for site_description: the new tagline to set."
msgstr ""

msgid "For bulk post fixes (focus_keywords, post_titles): max posts to update in one call. Default 100."
msgstr ""

msgid "SEO Analysis"
msgstr ""

msgid "Abilities to audit and fix site-wide SEO issues."
msgstr ""

msgid "Rank Math Dashboard"
msgstr ""

msgid "Dashboard"
msgstr ""

msgid "Homepage SEO"
msgstr ""

msgid "Edit Homepage SEO Settings"
msgstr ""

msgid "Pages"
msgstr ""

#. translators: Post Type Singular Name
#. translators: Taxonomy Singular Name
msgid "SEO Settings for %s"
msgstr ""

msgid "Edit default SEO settings for this post type"
msgstr ""

msgid "Edit SEO settings for this archive page"
msgstr ""

msgid "SEO Settings for Date Archives"
msgstr ""

msgid "SEO Settings for Search Page"
msgstr ""

msgid "Edit SEO settings for the search results page"
msgstr ""

msgid "Mark this page"
msgstr ""

msgid "As Pillar Content"
msgstr ""

msgid "As NoIndex"
msgstr ""

msgid "As NoFollow"
msgstr ""

msgid "External Tools"
msgstr ""

msgid "Google PageSpeed"
msgstr ""

msgid "Google PageSpeed Insights"
msgstr ""

msgid "Google Rich Results (Mobile)"
msgstr ""

msgid "Google Rich Results Test - Googlebot Smartphone"
msgstr ""

msgid "Google Rich Results (Desktop)"
msgstr ""

msgid "Google Rich Results Test - Googlebot Desktop"
msgstr ""

msgid "Facebook Debugger"
msgstr ""

msgid "Facebook Sharing Debugger"
msgstr ""

msgid "Modules"
msgstr ""

msgid "Help"
msgstr ""

msgid "Setup Wizard"
msgstr ""

msgid "Import &amp; Export"
msgstr ""

msgid "Rank Math Knowledge Base"
msgstr ""

msgid "Search Options"
msgstr ""

msgid "Easy Mode"
msgstr ""

msgid "Advanced Mode"
msgstr ""

msgid "None"
msgstr ""

msgid "Unable to validate Rank Math SEO registration data."
msgstr ""

msgid "Please try reconnecting."
msgstr ""

#. translators: KB Link
msgid "If the issue persists, please try the solution described in our Knowledge Base article: %s"
msgstr ""

msgid "[3. Unable to Encrypt]"
msgstr ""

msgid "Seems like your site URL has changed since you connected to Rank Math."
msgstr ""

msgid "Click here to reconnect."
msgstr ""

#. Translators: 1 is "WordPress Address (URL)", 2 is "Site Address (URL)", 3 is a link to the General Settings, with "WordPress General Settings" as anchor text.
msgid "Rank Math cannot be connected because your site URL doesn't appear to be a valid URL. If the domain name contains special characters, please make sure to use the encoded version in the %1$s &amp; %2$s fields on the %3$s page."
msgstr ""

msgid "WordPress Address (URL)"
msgstr ""

msgid "Site Address (URL)"
msgstr ""

msgid "WordPress General Settings"
msgstr ""

msgid "Rank Math"
msgstr ""

msgid "Help &amp; Support"
msgstr ""

msgid "Halloween Sale"
msgstr ""

msgid "Anniversary Sale"
msgstr ""

msgid "Black Friday Sale"
msgstr ""

msgid "Cyber Monday Sale"
msgstr ""

msgid "Christmas Sale"
msgstr ""

msgid "New Year Sale"
msgstr ""

msgid "Twitter username (without @)"
msgstr ""

msgid "Facebook profile URL"
msgstr ""

msgid "Additional profile URLs"
msgstr ""

msgid "The canonical URL you entered does not seem to be a valid URL. Please double check it in the SEO meta box &raquo; Advanced tab."
msgstr ""

msgid "You are not authorized to perform this action."
msgstr ""

msgid "Exclusive Offer!"
msgstr ""

msgid "Additional Profiles to add in the <code>sameAs</code> Schema property."
msgstr ""

#. Translators: placeholder is the plugin name.
msgid "Hey, we noticed you've been using %s for more than a week now â€“ that's awesome!"
msgstr ""

#. Translators: placeholder is the plugin name.
msgctxt "plugin name inside the review notice"
msgid "Rank Math SEO"
msgstr ""

msgid "We would love to get your feedback! It's essential for our continued development. Please consider taking a moment to leave us a review."
msgstr ""

msgid "We would love to get your feedback! It's essential for our continued development. Please consider taking a moment to leave a review of your experience on Trustpilot."
msgstr ""

msgid "Co-founder of Rank Math"
msgstr ""

msgid "Yes, you deserve it"
msgstr ""

msgid "No, maybe later"
msgstr ""

msgid "I already did"
msgstr ""

#. translators: plugin url
msgid "Thank you for using <a href=\"%s\" target=\"_blank\">Rank Math</a>"
msgstr ""

msgid "Insert/edit link"
msgstr ""

msgid "Update"
msgstr ""

msgid "Add Link"
msgstr ""

msgid "(no title)"
msgstr ""

msgid "No matches found."
msgstr ""

msgid "Link selected."
msgstr ""

msgid "Link inserted."
msgstr ""

msgid "Add <code>rel=\"nofollow\"</code>"
msgstr ""

msgid "Add <code>rel=\"sponsored\"</code>"
msgstr ""

msgid "Link Title"
msgstr ""

msgid "&#8595; Rank Math"
msgstr ""

msgid "Set to noindex"
msgstr ""

msgid "Set to index"
msgstr ""

msgid "Set to nofollow"
msgstr ""

msgid "Set to follow"
msgstr ""

msgid "Remove custom canonical URL"
msgstr ""

msgid "Redirect"
msgstr ""

msgid "Remove redirection"
msgstr ""

msgid "Set Schema: None"
msgstr ""

msgid "EDD Product"
msgstr ""

msgid "WC Product"
msgstr ""

#. Translators: placeholder is the default Schema type setting.
msgid "Set Schema: Default (%s)"
msgstr ""

msgid "Determine Search Intent"
msgstr ""

msgid "Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality."
msgstr ""

msgid "Off"
msgstr ""

msgid "On"
msgstr ""

msgid "Snippet"
msgstr ""

msgid "Specify a maximum text-length, in characters, of a snippet for your page."
msgstr ""

msgid "Video Preview"
msgstr ""

msgid "Specify a maximum duration in seconds of an animated video preview."
msgstr ""

msgid "Image Preview"
msgstr ""

msgid "Specify a maximum size of image preview to be shown for images on this page."
msgstr ""

msgid "Large"
msgstr ""

msgid "Standard"
msgstr ""

msgid "Panel"
msgstr ""

msgid "Take your SEO to the Next Level!"
msgstr ""

msgid "Get Rank Math PRO!"
msgstr ""

msgid "Click here to see all the exciting features."
msgstr ""

msgid "Ctrl/Cmd + Enter"
msgstr ""

msgid "Save Changes"
msgstr ""

msgid "Reset Options"
msgstr ""

msgid "You do not have permission to edit the .htaccess file."
msgstr ""

msgid "Failed to backup .htaccess file. Please check file permissions."
msgstr ""

msgid "Failed to update .htaccess file. Please check file permissions."
msgstr ""

msgid ".htaccess file updated successfully."
msgstr ""

msgid "Rank Math Overview"
msgstr ""

msgid "Latest Blog Posts from Rank Math"
msgstr ""

msgid "Error: the Rank Math blog feed could not be downloaded."
msgstr ""

msgid "NEW"
msgstr ""

msgid "Blog"
msgstr ""

msgid "(opens in a new window)"
msgstr ""

msgid "Go Pro"
msgstr ""

#. translators: Plugin name
msgid "Cleanup of %s data successfully done."
msgstr ""

#. translators: Plugin name
msgid "Cleanup of %s data failed."
msgstr ""

msgid "Action not allowed."
msgstr ""

msgid "No items found."
msgstr ""

#. Translators: 1: opening anchor tag, 2: closing anchor tag.
msgid "The React Settings UI is currently disabled, and the classic settings interface is active. Note: The PHP-based settings interface will be removed in an upcoming release. %1$sEnable the React Settings UI%2$s to switch back."
msgstr ""

#. Translators: placeholder is the post type name.
msgid "Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href=\"%2$s\">Titles &amp; Meta page</a>."
msgstr ""

#. Translators: placeholder is the post type names separated with commas.
msgid "Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href=\"%2$s\">Titles &amp; Meta page</a>."
msgstr ""

msgid "Please activate the WPML String Translation plugin to convert Rank Math Setting values in different languages."
msgstr ""

msgid "<b>Rank Math Warning:</b> Changing the permalinks on a live, indexed site may result in serious loss of traffic if done incorrectly. Consider adding a new redirection from the old URL format to the new one."
msgstr ""

msgid "Links"
msgstr ""

#. translators: Link to kb article
msgid "Change how some of the links open and operate on your website. %s."
msgstr ""

#. translators: Link to kb article
#. translators: Link to social setting KB article
msgid "Learn More"
msgstr ""

msgid "Breadcrumbs"
msgstr ""

#. translators: Link to kb article
msgid "Here you can set up the breadcrumbs function. %s"
msgstr ""

#. translators: Link to kb article
#. translators: Link to KB article
#. translators: Redirection page url
#. translators: 1. Link to KB article 2. Link to redirection setting scree
#. translators: Learn more link.
#. translators: %1$s: thing, %2$s: Learn more link.
msgid "Learn more"
msgstr ""

msgid "Use the following code in your theme template files to display breadcrumbs."
msgstr ""

msgid "Webmaster Tools"
msgstr ""

#. translators: Link to kb article
msgid "Enter verification codes for third-party webmaster tools. %s"
msgstr ""

msgid "Others"
msgstr ""

#. translators: Link to kb article
msgid "Change some uncommon but essential settings here. %s."
msgstr ""

msgid "Edit .htaccess"
msgstr ""

#. translators: Link to kb article
msgid "Edit the contents of your .htaccess file easily. %s."
msgstr ""

msgid "SEO Settings"
msgstr ""

msgid "General Settings"
msgstr ""

msgid "Edit Page: "
msgstr ""

msgid "Global Meta"
msgstr ""

#. translators: Link to KB article
msgid "Change Global meta settings that take effect across your website. %s."
msgstr ""

msgid "Local SEO"
msgstr ""

#. translators: Redirection page url
msgid "Optimize for local searches and Knowledge Graph using these settings. %s."
msgstr ""

msgid "Use the <code>[rank_math_contact_info]</code> shortcode to display contact information in a nicely formatted way. You should also claim your business on Google if you have not already."
msgstr ""

msgid "Social Meta"
msgstr ""

#. translators: Link to social setting KB article
msgid "Add social account information to your website's Schema and Open Graph. %s."
msgstr ""

msgid "Homepage"
msgstr ""

#. translators: Link to KB article
msgid "Add SEO meta and OpenGraph details to your homepage. %s."
msgstr ""

msgid "Authors"
msgstr ""

#. translators: Link to KB article
msgid "Change SEO options related to the author archives. %s."
msgstr ""

msgid "Misc Pages"
msgstr ""

#. translators: Link to KB article
msgid "Customize SEO meta settings of pages like search results, 404s, etc. %s."
msgstr ""

msgid "SEO Titles &amp; Meta"
msgstr ""

msgid "Titles &amp; Meta"
msgstr ""

msgid "Post Types:"
msgstr ""

msgid "Attachments"
msgstr ""

#. translators: 1. post type name 2. link
#. translators: 1. taxonomy name 2. link
msgid "Change Global SEO, Schema, and other settings for %1$s. %2$s"
msgstr ""

msgid "Media"
msgstr ""

msgid "None (Click here to set one)"
msgstr ""

msgid "Post Formats"
msgstr ""

msgid "Post Formats Archive"
msgstr ""

msgid "$id variable required"
msgstr ""

msgid "Variable Required"
msgstr ""

msgid "$title variable required"
msgstr ""

msgid "SEO Details"
msgstr ""

msgid "SEO Title"
msgstr ""

msgid "SEO Desc"
msgstr ""

msgid "Title"
msgstr ""

msgid "Alternative Text"
msgstr ""

msgid "Save"
msgstr ""

msgid "Cancel"
msgstr ""

msgid "No Index"
msgstr ""

msgid "Is Pillar"
msgstr ""

msgid "Focus Keyword"
msgstr ""

msgid "Keyword"
msgstr ""

msgid "Not Set"
msgstr ""

msgid "SEO Score: Good"
msgstr ""

msgid "SEO Score: Ok"
msgstr ""

msgid "SEO Score: Bad"
msgstr ""

msgid "Focus Keyword Not Set"
msgstr ""

msgid "Articles noindexed"
msgstr ""

msgid "Pillar Content"
msgstr ""

msgid "Rank Your Content With the Power of PRO & A.I."
msgstr ""

msgid "Unlimited Websites"
msgstr ""

msgid "Content A.I. (Artificial Intelligence)"
msgstr ""

msgid "Keyword Rank Tracker"
msgstr ""

msgid "Powerful Schema Generator"
msgstr ""

msgid "24x7 Premium Support"
msgstr ""

msgid "SEO Email Reports"
msgstr ""

msgid "and Many Moreâ€¦"
msgstr ""

msgid "Yes, I want to learn more"
msgstr ""

msgid "No, I don't want it"
msgstr ""

msgid "I already upgraded"
msgstr ""

msgid "Yes, I want better SEO"
msgstr ""

msgid "I already purchased"
msgstr ""

msgid "Rank Math plugin could not be connected."
msgstr ""

msgid "Unable to connect Rank Math."
msgstr ""

msgid "A Custom Watermark item could not be saved because the name field is empty."
msgstr ""

msgid "Import Schemas"
msgstr ""

msgid "Import all Schema data for Posts, Pages, and custom post types."
msgstr ""

msgid "Import Settings"
msgstr ""

msgid "Import AIO SEO plugin settings, global meta, sitemap settings, etc."
msgstr ""

msgid "Import Post Meta"
msgstr ""

msgid "Import meta information of your posts/pages like the titles, descriptions, robots meta, OpenGraph info, etc."
msgstr ""

msgid "Import Author Meta"
msgstr ""

msgid "Import Social URLs of your author archive pages."
msgstr ""

msgid "Import Term Meta"
msgstr ""

msgid "Import meta information of your terms like the titles, descriptions, robots meta, OpenGraph info, etc."
msgstr ""

msgid "Import Redirections"
msgstr ""

msgid "Import all the redirections you have already set up in AIO SEO Premium."
msgstr ""

msgid "Import Locations"
msgstr ""

msgid "Import Locations Settings."
msgstr ""

msgid "HTML Sitemap"
msgstr ""

msgid "Import plugin settings, global meta, sitemap settings, etc."
msgstr ""

msgid "Import meta information of your posts/pages like the focus keyword, titles, descriptions, robots meta, OpenGraph info, etc."
msgstr ""

msgid "Import data like category, tag, and CPT meta data from SEO."
msgstr ""

msgid "Import meta information like titles, descriptions, focus keyword, robots meta, etc., of your author archive pages."
msgstr ""

msgid "Import all the redirections you have already set up in Yoast Premium."
msgstr ""

msgid "Import Blocks"
msgstr ""

msgid "Import and convert all compatible blocks in post contents."
msgstr ""

msgid "Import Locations Settings from Yoast plugin."
msgstr ""

msgid "Import News Settings"
msgstr ""

msgid "Import News Settings from Yoast News Add-on."
msgstr ""

msgid "Import Video Sitemap Settings"
msgstr ""

msgid "Import Video Sitemap Settings from Yoast Video Add-on."
msgstr ""

msgid "Unable to perform action this time."
msgstr ""

msgid "Settings imported successfully."
msgstr ""

msgid "News Settings imported successfully."
msgstr ""

msgid "Video Settings imported successfully."
msgstr ""

msgid "Plugin deactivated successfully."
msgstr ""

#. translators: start, end, total
msgid "Imported post meta for posts %1$s - %2$s out of %3$s "
msgstr ""

#. translators: total
msgid "Imported term meta for %s terms."
msgstr ""

#. translators: start, end, total
msgid "Imported user meta for users %1$s - %2$s out of %3$s "
msgstr ""

#. translators: total
msgid "Imported %s redirections."
msgstr ""

#. translators: start, end, total
msgid "Imported blocks from posts %1$s - %2$s out of %3$s "
msgstr ""

#. translators: start, end, total
msgid "Recalculating scores for posts %1$s - %2$s... "
msgstr ""

msgid "Settings import failed."
msgstr ""

msgid "Posts meta import failed."
msgstr ""

msgid "Term meta import failed."
msgstr ""

msgid "User meta import failed."
msgstr ""

msgid "There are no redirection to import."
msgstr ""

msgid "Blocks import failed."
msgstr ""

msgid "Plugin settings and site-wide meta data."
msgstr ""

msgid "No post found."
msgstr ""

msgid "Link Suggestions"
msgstr ""

msgid "The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites."
msgstr ""

msgid "Upgrade"
msgstr ""

msgid "username"
msgstr ""

msgid "Description"
msgstr ""

msgid "Sorry, you are not allowed to deactivate plugins for this site."
msgstr ""

#. translators: plugin name
msgid "You are not allowed to deactivate this plugin: %s."
msgstr ""

msgid "Please keep only one SEO plugin active, otherwise, you might lose your rankings and traffic."
msgstr ""

msgid "Please keep only one Sitemap plugin active, otherwise, you might lose your rankings and traffic."
msgstr ""

msgid "Please keep only one Redirection plugin active to avoid redirect conflicts or unexpected behavior."
msgstr ""

msgid "Click here to Deactivate"
msgstr ""

#. translators: %1$s: general reading settings URL.
msgid "<strong>SEO Notice</strong>: Your site is set to No Index and will not appear in search engines. You can change the Search engine visibility <a href=\"%1$s\">from here</a>."
msgstr ""

#. translators: 1 is plugin name
msgid "Import meta data from the %1$s plugin."
msgstr ""

#. translators: 1 is plugin name
msgid "Import settings and meta data from the %1$s plugin."
msgstr ""

#. translators: 2 is link to Knowledge Base article
msgid "The process may take a few minutes if you have a large number of posts or pages <a href=\"%2$s\" target=\"_blank\">Learn more about the import process here.</a>"
msgstr ""

#. translators: 1 is plugin name
msgid " %1$s plugin will be disabled automatically moving forward to avoid conflicts. <strong>It is thus recommended to import the data you need now.</strong>"
msgstr ""

msgid "Personal Blog"
msgstr ""

msgid "Community Blog/News Site"
msgstr ""

msgid "Personal Portfolio"
msgstr ""

msgid "Small Business Site"
msgstr ""

msgid "Webshop"
msgstr ""

msgid "Other Personal Website"
msgstr ""

msgid "Other Business Website"
msgstr ""

msgid "Setup Wizard - Rank Math"
msgstr ""

msgid "Connect Google Services"
msgstr ""

msgid "Disconnect Account"
msgstr ""

msgid "Benefits of Connecting Google Account"
msgstr ""

msgid "Verify site ownership on Google Search Console in a single click"
msgstr ""

msgid "Track page and keyword rankings with the Advanced Analytics module"
msgstr ""

msgid "Easily set up Google Analytics without using another 3rd party plugin"
msgstr ""

msgid "Automatically submit sitemaps to the Google Search Console"
msgstr ""

msgid "Learn more about the benefits of connecting your account here."
msgstr ""

#. Translators: placeholder is the KB link.
#. translators: %s: Link to KB article
msgid "We do not store any of the data from your Google account on our servers, everything is processed & stored on your server. We take your privacy extremely seriously and ensure it is never misused. %s"
msgstr ""

#. Translators: placeholder is the KB link.
#. translators: %s: Link to KB article
msgid "Learn more."
msgstr ""

msgid "Connect Your Rank Math Account"
msgstr ""

msgid "Benefits of Connecting Rank Math Account"
msgstr ""

msgid "Free keyword suggestions when entering a focus keyword"
msgstr ""

msgid "Use our revolutionary SEO Analyzer to scan your website for SEO errors"
msgstr ""

msgid "Reconnect"
msgstr ""

msgid "Disconnect"
msgstr ""

msgid "Test Connections"
msgstr ""

msgid "Search Console"
msgstr ""

msgid "Site"
msgstr ""

msgid "Enable the Index Status tab"
msgstr ""

msgid "Enable this option to show the Index Status tab in the Analytics module."
msgstr ""

msgid "Data import will not work for this service as sufficient permissions are not given."
msgstr ""

msgid "Note"
msgstr ""

#. translators: %s: Link to KB article
msgid "Ready to switch to Google Analytics 4? %s"
msgstr ""

msgid "Click here to know how"
msgstr ""

msgid "Account"
msgstr ""

msgid "Property"
msgstr ""

msgid "Data Stream"
msgstr ""

msgid "Install analytics code"
msgstr ""

msgid "Enable this option only if you are not using any other plugin/theme to install Google Analytics code."
msgstr ""

msgid "Anonymize IP addresses"
msgstr ""

msgid "PRO"
msgstr ""

msgid "Self-Hosted Analytics JS File"
msgstr ""

msgid "Exclude Logged-in users"
msgstr ""

msgid "AdSense"
msgstr ""

msgid "Select Account"
msgstr ""

msgid "Google AdSense support is only available in Rank Math Pro's Advanced Analytics module."
msgstr ""

msgid "Email Reports"
msgstr ""

msgid "Receive Analytics reports periodically in email."
msgstr ""

msgid "Learn more about Email Reports."
msgstr ""

#. translators: %s is a Rank Math link.
msgid "Powered by %s"
msgstr ""

msgid "SEO Score"
msgstr ""

msgid "The format of the tables array has changed. Please update your code accordingly."
msgstr ""

msgid "Home"
msgstr ""

#. translators: Archive title
#. translators: placeholder
msgid "Archives for %s"
msgstr ""

#. translators: Search query term
#. translators: placeholder
msgid "Results for %s"
msgstr ""

msgid "404 Error: page not found"
msgstr ""

#. Translators: placeholder is the site title.
msgid "[%s] An update is available for Rank Math"
msgstr ""

msgid "Hello,"
msgstr ""

#. Translators: placeholder is the site URL.
msgid "This is an automated email to let you know that there is an update available for the Rank Math SEO plugin installed on: %s"
msgstr ""

#. Translators: placeholder is the new admin page URL.
msgid "To ensure your site is always on the latest, most up-to-date version of Rank Math - we recommend logging into the admin area to update the plugin as soon as possible: %s"
msgstr ""

msgid "If you have any questions or experience any issues â€“ our support team is at your disposal:"
msgstr ""

msgid "https://support.rankmath.com/"
msgstr ""

msgid "Rank Math Team"
msgstr ""

msgid "Rank Math Free"
msgstr ""

#. Translators: placeholders are the old and new version numbers.
msgid "%1$s: Old %2$s -> New %3$s | Changelog: %4$s"
msgstr ""

#. translators: %s: product tag
msgid "Products tagged &ldquo;%s&rdquo;"
msgstr ""

#. translators: %s expands to the current page number
msgid "Page %s"
msgstr ""

msgid "Search Engine Optimization by Rank Math - https://rankmath.com/"
msgstr ""

msgid "Search Engine Optimization by Rank Math PRO - https://rankmath.com/"
msgstr ""

msgid "Rank Math WordPress SEO plugin"
msgstr ""

msgid "Address:"
msgstr ""

msgid "Hours:"
msgstr ""

msgid "Telephone"
msgstr ""

msgid "Email:"
msgstr ""

msgid "Description:"
msgstr ""

msgid "Page not found"
msgstr ""

msgid "Post not found."
msgstr ""

msgid "Play icon"
msgstr ""

msgid "GIF icon"
msgstr ""

msgid "Index"
msgstr ""

msgid "Instructs search engines to index and show these pages in the search results."
msgstr ""

msgid "Prevents pages from being indexed and displayed in search engine result pages"
msgstr ""

msgid "No Follow"
msgstr ""

msgid "Prevents search engines from following links on the pages"
msgstr ""

msgid "No Archive"
msgstr ""

msgid "Prevents search engines from showing Cached links for pages"
msgstr ""

msgid "No Image Index"
msgstr ""

msgid "Prevents images on a page from being indexed by Google and other search engines"
msgstr ""

msgid "No Snippet"
msgstr ""

msgid "Prevents a snippet from being shown in the search results"
msgstr ""

msgid "Any"
msgstr ""

msgid "Article"
msgstr ""

msgid "Book"
msgstr ""

msgid "Course"
msgstr ""

msgid "Event"
msgstr ""

msgid "Job Posting"
msgstr ""

msgid "Music"
msgstr ""

msgid "Product"
msgstr ""

msgid "Recipe"
msgstr ""

msgid "Restaurant"
msgstr ""

msgid "Video"
msgstr ""

msgid "Person"
msgstr ""

msgid "Service"
msgstr ""

msgid "Software Application"
msgstr ""

msgid "Review (Unsupported)"
msgstr ""

msgid "301 Permanent Move"
msgstr ""

msgid "302 Temporary Move"
msgstr ""

msgid "307 Temporary Redirect"
msgstr ""

msgid "410 Content Deleted"
msgstr ""

msgid "451 Content Unavailable for Legal Reasons"
msgstr ""

msgid "Exact"
msgstr ""

msgid "Contains"
msgstr ""

msgid "Starts With"
msgstr ""

msgid "End With"
msgstr ""

msgid "Regex"
msgstr ""

msgid "Customer Service"
msgstr ""

msgid "Technical Support"
msgstr ""

msgid "Billing Support"
msgstr ""

msgid "Bill Payment"
msgstr ""

msgid "Sales"
msgstr ""

msgid "Reservations"
msgstr ""

msgid "Credit Card Support"
msgstr ""

msgid "Emergency"
msgstr ""

msgid "Baggage Tracking"
msgstr ""

msgid "Roadside Assistance"
msgstr ""

msgid "Package Tracking"
msgstr ""

msgid "Legal Name"
msgstr ""

msgid "Founding Date"
msgstr ""

msgid "ISO 6523 Code"
msgstr ""

msgid "DUNS"
msgstr ""

msgid "LEI Code"
msgstr ""

msgid "NAICS Code"
msgstr ""

msgid "Global Location Number"
msgstr ""

msgid "VAT ID"
msgstr ""

msgid "Tax ID"
msgstr ""

msgid "Number of Employees"
msgstr ""

msgid "Worldwide"
msgstr ""

msgid "Algeria"
msgstr ""

msgid "Argentina"
msgstr ""

msgid "Armenia"
msgstr ""

msgid "Australia"
msgstr ""

msgid "Austria"
msgstr ""

msgid "Azerbaijan"
msgstr ""

msgid "Bahrain"
msgstr ""

msgid "Bangladesh"
msgstr ""

msgid "Belarus"
msgstr ""

msgid "Belgium"
msgstr ""

msgid "Bolivia, Plurinational State Of"
msgstr ""

msgid "Brazil"
msgstr ""

msgid "Bulgaria"
msgstr ""

msgid "Cambodia"
msgstr ""

msgid "Canada"
msgstr ""

msgid "Chile"
msgstr ""

msgid "Colombia"
msgstr ""

msgid "Costa Rica"
msgstr ""

msgid "Croatia"
msgstr ""

msgid "Cyprus"
msgstr ""

msgid "Czechia"
msgstr ""

msgid "Denmark"
msgstr ""

msgid "Ecuador"
msgstr ""

msgid "Egypt"
msgstr ""

msgid "El Salvador"
msgstr ""

msgid "Estonia"
msgstr ""

msgid "Finland"
msgstr ""

msgid "France"
msgstr ""

msgid "Germany"
msgstr ""

msgid "Ghana"
msgstr ""

msgid "Greece"
msgstr ""

msgid "Guatemala"
msgstr ""

msgid "Hong Kong"
msgstr ""

msgid "Hungary"
msgstr ""

msgid "India"
msgstr ""

msgid "Indonesia"
msgstr ""

msgid "Ireland"
msgstr ""

msgid "Israel"
msgstr ""

msgid "Italy"
msgstr ""

msgid "Japan"
msgstr ""

msgid "Jordan"
msgstr ""

msgid "Kazakhstan"
msgstr ""

msgid "Kenya"
msgstr ""

msgid "Korea, Republic Of"
msgstr ""

msgid "Latvia"
msgstr ""

msgid "Lithuania"
msgstr ""

msgid "Macedonia, The Former Yugoslav Republic Of"
msgstr ""

msgid "Malaysia"
msgstr ""

msgid "Malta"
msgstr ""

msgid "Mexico"
msgstr ""

msgid "Morocco"
msgstr ""

msgid "Myanmar"
msgstr ""

msgid "Netherlands"
msgstr ""

msgid "New Zealand"
msgstr ""

msgid "Nicaragua"
msgstr ""

msgid "Nigeria"
msgstr ""

msgid "Norway"
msgstr ""

msgid "Pakistan"
msgstr ""

msgid "Paraguay"
msgstr ""

msgid "Peru"
msgstr ""

msgid "Philippines"
msgstr ""

msgid "Poland"
msgstr ""

msgid "Portugal"
msgstr ""

msgid "Romania"
msgstr ""

msgid "Russian Federation"
msgstr ""

msgid "Saudi Arabia"
msgstr ""

msgid "Senegal"
msgstr ""

msgid "Serbia"
msgstr ""

msgid "Singapore"
msgstr ""

msgid "Slovakia"
msgstr ""

msgid "Slovenia"
msgstr ""

msgid "South Africa"
msgstr ""

msgid "Spain"
msgstr ""

msgid "Sri Lanka"
msgstr ""

msgid "Sweden"
msgstr ""

msgid "Switzerland"
msgstr ""

msgid "Taiwan"
msgstr ""

msgid "Thailand"
msgstr ""

msgid "Tunisia"
msgstr ""

msgid "Turkey"
msgstr ""

msgid "Ukraine"
msgstr ""

msgid "United Arab Emirates"
msgstr ""

msgid "United Kingdom"
msgstr ""

msgid "United States Of America"
msgstr ""

msgid "Uruguay"
msgstr ""

msgid "Venezuela, Bolivarian Republic Of"
msgstr ""

msgid "Viet Nam"
msgstr ""

msgid "Please connect your account to use the Content AI."
msgstr ""

msgid "Please update the Rank Math SEO plugin to the latest version to use this feature."
msgstr ""

msgid "This feature is only available for Content AI subscribers."
msgstr ""

msgid "Oops! Too many requests in a short time. Please try again after some time."
msgstr ""

msgid "You've reached the monthly usage limit for this feature on your domain."
msgstr ""

msgid "You've reached the monthly usage limit for this feature."
msgstr ""

msgid "Please revise the entered values in the fields as they are not secure. Make the required adjustments and try again."
msgstr ""

msgid "The output was stopped as it was identified as potentially unsafe by the content filter."
msgstr ""

msgid "Could not generate. Please try again later."
msgstr ""

msgid "Invalid API key. Please check your API key or reconnect the site and try again."
msgstr ""

msgid "The input provided is invalid. Please check the format and try again."
msgstr ""

msgid "The service is temporarily unavailable. Please try again later."
msgstr ""

msgid "Unauthorized request. The client credentials are invalid."
msgstr ""

msgid "No results found for the given query. Please modify your request and try again"
msgstr ""

msgid "Insufficient results to complete the request. Please refine your query or reduce the requirements."
msgstr ""

msgid "User wallet not found."
msgstr ""

#. translators: %1$s is the error message, %2$s is the table name.
msgid "Rank Math SEO: Getting error \"%1$s\" while creating table <code>%2$s</code>. Please contact your server administrator to fix this issue."
msgstr ""

msgid "There was an issue scheduling the async action required for Analytics; if the problem persists, please contact our support team."
msgstr ""

msgid "There was an issue scheduling a single action required for Analytics; if the problem persists, please contact our support team."
msgstr ""

msgid "There was an issue scheduling the recurring action required for Analytics; if the problem persists, please contact our support team."
msgstr ""

msgid "There was an issue unscheduling a background action related to Analytics; if the problem persists, please contact our support team."
msgstr ""

msgid "WooCommerce Product"
msgstr ""

msgid "No file selected for upload."
msgstr ""

msgid "Items per page"
msgstr ""

msgid "404 Monitor"
msgstr ""

msgid "Records the URLs on which visitors & search engines run into 404 Errors. You can also turn on Redirections to redirect the error causing URLs to other URLs."
msgstr ""

msgid "Dominate the search results for the local audiences by optimizing your website for Local SEO and it also helps you to acquire the Knowledge Graph."
msgstr ""

msgid "Redirections"
msgstr ""

msgid "Redirect non-existent content easily with 301 and 302 status code. This can help improve your site ranking. Also supports many other response codes."
msgstr ""

msgid "Schema (Structured Data)"
msgstr ""

msgid "Enable support for the structured data, which adds Schema code in your website, resulting in rich search results, better CTR and more traffic."
msgstr ""

msgid "Sitemap"
msgstr ""

msgid "Enable Rank Math's sitemap feature, which helps search engines intelligently crawl your website's content. It also supports hreflang tag."
msgstr ""

msgid "Link Counter"
msgstr ""

msgid "Counts the total number of internal, external links, to and from links inside your posts. You can also see the same count in the Posts List Page."
msgstr ""

msgid "An advanced internal linking tool that analyzes your posts, tracks link data, highlights opportunities, and offers detailed report."
msgstr ""

msgid "This module is available in the PRO version."
msgstr ""

msgid "Image SEO"
msgstr ""

msgid "Advanced Image SEO options to supercharge your website. Automate the task of adding the ALT and Title tags to your images on the fly."
msgstr ""

msgid "Instant Indexing"
msgstr ""

#. Translators: placeholder is "IndexNow API".
msgid "Directly notify search engines like Bing & Yandex using the %s when pages are added, updated and removed, or submit URLs manually."
msgstr ""

#. Translators: placeholder is "IndexNow API".
msgid "IndexNow API"
msgstr ""

msgid "Content AI"
msgstr ""

msgid "Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area. Supports 80+ Countries."
msgstr ""

msgid "LLMS Txt"
msgstr ""

msgid "Serve a custom llms.txt file to guide AI models with posts, terms, and most important content on your website."
msgstr ""

msgid "News Sitemap"
msgstr ""

msgid "Create a News Sitemap for your news-related content. You only need a News sitemap if you plan on posting news-related content on your website."
msgstr ""

msgid "Video Sitemap"
msgstr ""

msgid "For your video content, a Video Sitemap is a recommended step for better rankings and inclusion in the Video search."
msgstr ""

msgid "Podcast"
msgstr ""

msgid "Make your podcasts discoverable via Google Podcasts, Apple Podcasts, and similar services with Podcast RSS feed and Schema Markup generated by Rank Math."
msgstr ""

msgid "Track your brand's AI search visibility. Monitor brand mentions, citations, & sentiment, and discover opportunities to grow your AI visibility."
msgstr ""

msgid "Role Manager"
msgstr ""

msgid "The Role Manager allows you to use WordPress roles to control which of your site users can have edit or view access to Rank Math's settings."
msgstr ""

msgid "Connect Rank Math with Google Search Console to see the most important information from Google directly in your WordPress dashboard."
msgstr ""

#. Translators: placeholder is the new Rank Math label.
msgid "SEO Analyzer"
msgstr ""

msgid "Let Rank Math analyze your website and your website's content using 28+ different tests to provide tailor-made SEO Analysis to you."
msgstr ""

msgid "Robots Txt"
msgstr ""

msgid "Version Control"
msgstr ""

msgid "Database Tools"
msgstr ""

msgid "Status"
msgstr ""

msgid "AMP"
msgstr ""

#. translators: Link to AMP plugin
msgid "Install %s to make Rank Math work with Accelerated Mobile Pages. Rank Math automatically adds required meta tags in all the AMP pages."
msgstr ""

msgid "AMP plugin"
msgstr ""

msgid "bbPress"
msgstr ""

msgid "Add proper Meta tags to your bbPress forum posts, categories, profiles, etc. Get more options to take control of what search engines see and how they see it."
msgstr ""

msgid "Please activate bbPress plugin to use this module."
msgstr ""

msgid "BuddyPress"
msgstr ""

msgid "Enable the BuddyPress module for Rank Math SEO to make your BuddyPress forum SEO friendly by adding proper meta tags to all forum pages."
msgstr ""

msgid "Please activate BuddyPress plugin to use this module."
msgstr ""

msgid "WooCommerce"
msgstr ""

msgid "Optimize WooCommerce Pages for Search Engines by adding required metadata and Product Schema which will make your site stand out in the SERPs."
msgstr ""

msgid "Please activate WooCommerce plugin to use this module."
msgstr ""

msgid "ACF"
msgstr ""

msgid "ACF support helps Rank Math SEO read and analyze content written in the Advanced Custom Fields. If your theme uses ACF, you should enable this option."
msgstr ""

msgid "Please activate ACF plugin to use this module."
msgstr ""

msgid "Google Web Stories"
msgstr ""

msgid "Make any Story created with the Web Stories WordPress plugin SEO-Ready with automatic support for Schema and Meta tags."
msgstr ""

msgid "Please activate Web Stories plugin to use this module."
msgstr ""

msgid "You cant access this page."
msgstr ""

msgid "Free"
msgstr ""

msgid "NEW!"
msgstr ""

msgid "More powerful options are available in the PRO version."
msgstr ""

msgid "PRO options are enabled."
msgstr ""

msgid "Take SEO to the Next Level!"
msgstr ""

msgid "Unlimited personal websites"
msgstr ""

msgid "Free 15-Day Content AI Trial"
msgstr ""

msgid "Track 500 Keywords"
msgstr ""

msgid "24/7 Support"
msgstr ""

msgid "Buy"
msgstr ""

msgid "Settings"
msgstr ""

#. translators: delete counter
msgid "%d log(s) deleted."
msgstr ""

#. translators: delete counter
msgid "Log cleared - %d items deleted."
msgstr ""

msgid "Overview"
msgstr ""

msgid "Screen Content"
msgstr ""

msgid "Available Actions"
msgstr ""

msgid "Bulk Actions"
msgstr ""

msgid "Are you sure you wish to delete all 404 error logs?"
msgstr ""

#. translators: 1. Link to KB article 2. Link to redirection setting scree
msgid "Monitor broken pages that ruin user-experience and affect SEO. %s."
msgstr ""

msgid "View Report"
msgstr ""

msgid "Log Count"
msgstr ""

msgid "Total number of 404 pages opened by the users."
msgstr ""

msgid "URL Hits"
msgstr ""

msgid "Total number visits received on all the 404 pages."
msgstr ""

msgid "Review 404 errors on your site"
msgstr ""

msgid "No valid id found."
msgstr ""

msgid "Log item successfully deleted."
msgstr ""

msgid "The 404 error log is empty."
msgstr ""

msgid "Clear Log"
msgstr ""

msgid "View"
msgstr ""

msgid "Delete"
msgstr ""

msgid "View Redirection"
msgstr ""

msgid "URI"
msgstr ""

msgid "Referer"
msgstr ""

msgid "User-Agent"
msgstr ""

msgid "Hits"
msgstr ""

msgid "Access Time"
msgstr ""

msgid "Hovering over a row in the list will display action links that allow you to manage the item. You can perform the following actions:"
msgstr ""

msgid "<strong>View Details</strong> shows details about the 404 requests."
msgstr ""

msgid "<strong>Redirect</strong> takes you to the Redirections manager to redirect the 404 URL."
msgstr ""

msgid "<strong>Delete</strong> permanently removes the item from the list."
msgstr ""

msgid "You can also redirect or delete multiple items at once. Selecting multiple items to redirect allows you to redirect them to a single URL."
msgstr ""

msgid "With the 404 monitor you can see where users and search engines are unable to find your content."
msgstr ""

msgid "Knowledge Base Articles:"
msgstr ""

msgid "404 Monitor Settings"
msgstr ""

msgid "Fix 404 Errors"
msgstr ""

msgid "You can customize the display of this screen's contents in a number of ways:"
msgstr ""

msgid "You can hide/display columns based on your needs."
msgstr ""

msgid "You can decide how many items to list per screen using the Screen Options tab."
msgstr ""

msgid "You can search items using the search form at the top."
msgstr ""

msgid "You can reorder the list by clicking on the column headings. "
msgstr ""

msgid "Search"
msgstr ""

msgid "If you have hundreds of 404 errors, your error log might increase quickly. Only choose this option if you have a very few 404s and are unable to replicate the 404 error on a particular URL from your end."
msgstr ""

msgid "Mode"
msgstr ""

msgid "The Simple mode only logs URI and access time, while the Advanced mode creates detailed logs including additional information such as the Referer URL."
msgstr ""

msgid "Simple"
msgstr ""

msgid "Advanced"
msgstr ""

msgid "Log Limit"
msgstr ""

msgid "Sets the max number of rows in a log. Set to 0 to disable the limit."
msgstr ""

msgid "Exclude Paths"
msgstr ""

msgid "Enter URIs or keywords you wish to prevent from getting logged by the 404 monitor."
msgstr ""

msgid "Add another"
msgstr ""

msgid "Remove"
msgstr ""

msgid "Ignore Query Parameters"
msgstr ""

msgid "Turn ON to ignore all query parameters (the part after a question mark in a URL) when logging 404 errors."
msgstr ""

msgid "New!"
msgstr ""

#. Translators: placeholder is the new label.
msgid "AI Visibility %s"
msgstr ""

msgid "Rank Math account not connected. Please connect your account and try again."
msgstr ""

#. translators: %d: HTTP status code returned by the backend.
msgid "AI Visibility API returned an unexpected status: %d"
msgstr ""

msgid "AI Visibility API returned an invalid response."
msgstr ""

msgid "Brand UUID."
msgstr ""

msgid "Force a refresh from the AI Visibility API."
msgstr ""

msgid "Filter brands by name or URL."
msgstr ""

msgid "Brand website URL or domain."
msgstr ""

msgid "ISO 3166-1 alpha-2 country code (e.g. \"US\", \"HU\")."
msgstr ""

msgid "Query UUID."
msgstr ""

msgid "Whether the query is enabled for analysis."
msgstr ""

msgid "No fields to update."
msgstr ""

msgid "Could not start the checkout session. Please try again."
msgstr ""

msgid "Your AI Visibility trial has been activated."
msgstr ""

msgid "We could not activate your trial. Please try again."
msgstr ""

msgid "Data fetching cancelled."
msgstr ""

msgid "Google oAuth is not authorized."
msgstr ""

msgid "Data fetching started in the background."
msgstr ""

msgid "Not a valid settings founds to delete cache."
msgstr ""

msgid "Last 30 Days"
msgstr ""

msgid "Review analytics and sitemaps"
msgstr ""

msgid "Analytics cache cleared."
msgstr ""

msgid "Post re-index in progress."
msgstr ""

#. translators: %1$d: number of changes, %2$s: new collation.
msgid "%1$d collation changed to %2$s."
msgid_plural "%1$d collations changed to %2$s."
msgstr[0] ""
msgstr[1] ""

msgid "No collation mismatch to fix."
msgstr ""

msgid "Search Traffic"
msgstr ""

msgid "This is the number of pageviews carried out by visitors from Search Engines."
msgstr ""

msgid "Total Impressions"
msgstr ""

msgid "How many times your site showed up in the search results."
msgstr ""

msgid "Total Clicks"
msgstr ""

msgid "How many times your site was clicked on in the search results."
msgstr ""

msgid "Total Keywords"
msgstr ""

msgid "Total number of keywords your site ranks for within top 100 positions."
msgstr ""

msgid "Average Position"
msgstr ""

msgid "Average position of all the keywords ranking within top 100 positions."
msgstr ""

#. translators: Auth URL
msgid "It seems like the connection with your Google account & Rank Math needs to be made again. <a href=\"%s\" class=\"rank-math-reconnect-google\">Please click here.</a>"
msgstr ""

msgid "Rank Math is importing latest data from connected Google Services, %1$s remaining."
msgstr ""

msgid "Cancel Fetch"
msgstr ""

#. translators: constant value
msgid "Loopback requests to %s are blocked. This may prevent scheduled tasks from running. Please check your server configuration."
msgstr ""

#. translators: constant value
msgid "WordPress's internal cron system is disabled via %s. Please ensure a real cron job is set up, otherwise scheduled features like Analytics may not work correctly."
msgstr ""

#. translators: %s: amount of time
msgid "%s year"
msgid_plural "%s years"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s month"
msgid_plural "%s months"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s week"
msgid_plural "%s weeks"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s day"
msgid_plural "%s days"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s hour"
msgid_plural "%s hours"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] ""
msgstr[1] ""

#. translators: %s: amount of time
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] ""
msgstr[1] ""

msgid "Now!"
msgstr ""

msgid "Are you sure you want to do this?"
msgstr ""

msgid "You are about to delete all the previously imported data."
msgstr ""

msgid "You are about to delete your 90 days cache."
msgstr ""

msgid "Are you sure you want to disconnect Google services from your site?"
msgstr ""

msgid "Cache deleted."
msgstr ""

msgid "Next update on %s (in %s)"
msgstr ""

#. translators: Link to kb article
msgid "See your Google Search Console, Analytics and AdSense data without leaving your WP dashboard. %s."
msgstr ""

#. Translators: placeholder is a link to rankmath.com, with "free version" as the anchor text.
msgid "Enter the number of days to keep Analytics data in your database. The maximum allowed days are 90 in the %s. Though, 2x data will be stored in the DB for calculating the difference properly."
msgstr ""

#. Translators: placeholder is a link to rankmath.com, with "free version" as the anchor text.
msgid "free version"
msgstr ""

#. Translators: placeholder is "rankmath.com" as a link.
msgid "This email was sent to you as a registered member of %s."
msgstr ""

#. Translators: placeholder is "click here" as a link.
msgid "To update your email preferences, %s."
msgstr ""

#. Translators: placeholder is "click here" as a link.
msgid "click here"
msgstr ""

#. Translators: placeholder is the site URL.
msgid "Rank Math [SEO Report] - %s"
msgstr ""

msgid "Sorry, no post found for given id."
msgstr ""

msgid "The Google Analytics Console request failed."
msgstr ""

msgid "The Google Search Console request failed."
msgstr ""

msgid "Given"
msgstr ""

msgid "Not Given"
msgstr ""

msgid "Warning:"
msgstr ""

#. translators: %s is the reconnect link.
msgid "You have not given the permission to fetch this data. Please <a href=\"%s\">reconnect</a> with all required permissions."
msgstr ""

#. translators: reconnect link
msgid "There is a problem with the Google auth token. Please <a href=\"%1$s\" class=\"button button-link rank-math-reconnect-google\">reconnect your app</a>"
msgstr ""

msgid "Bad request. Please check the code."
msgstr ""

msgid "Unknown error, call get_response() to find out what happened."
msgstr ""

msgid "Post ID."
msgstr ""

msgid "Post Type."
msgstr ""

msgid "Page number."
msgstr ""

msgid "Results per page."
msgstr ""

msgid "Order by."
msgstr ""

msgid "Order."
msgstr ""

msgid "Search."
msgstr ""

msgid "User preferences."
msgstr ""

msgid "Filter."
msgstr ""

msgid "Filter type."
msgstr ""

msgid "Toggle bar."
msgstr ""

msgid "Hide."
msgstr ""

msgid "Sorry, no preference found."
msgstr ""

msgid "Sorry, no post id found."
msgstr ""

msgid "Rank Math PRO"
msgstr ""

msgid "SEO Report of Your Website"
msgstr ""

msgid "FULL REPORT"
msgstr ""

msgid "External Link Icon"
msgstr ""

msgid "Uh-oh"
msgstr ""

msgid "It seems that there are no stats to show right now."
msgstr ""

#. Translators: placeholders are anchor opening and closing tags.
msgid "If you can see the site data in your Search Console and Analytics accounts, but not here, then %1$s try reconnecting your account %2$s and make sure that the correct properties are selected in the %1$s Analytics Settings%2$s."
msgstr ""

#. Translators: don't translate the variable names between the #hashes#.
msgid "Last ###PERIOD_DAYS### Days"
msgstr ""

msgid "Top 3 Positions"
msgstr ""

msgid "4-10 Positions"
msgstr ""

msgid "11-50 Positions"
msgstr ""

msgid "Data Chart"
msgstr ""

#. translators: number of days
msgid "Storage Days: %s"
msgstr ""

#. translators: number of rows
msgid "Data Rows: %s"
msgstr ""

#. translators: database size
msgid "Size: %s"
msgstr ""

msgid "Next data fetch on %s"
msgstr ""

msgid "Delete data"
msgstr ""

msgid "Update data manually"
msgstr ""

msgid "Fetching in Progress"
msgstr ""

msgid "Cancel Fetching"
msgstr ""

msgid "Analytics Database"
msgstr ""

msgid "Frontend Stats Bar"
msgstr ""

msgid "Enable this option to show Analytics Stats on the front just after the admin bar."
msgstr ""

#. Translators: Placeholders are the opening and closing tag for the link.
msgid "Receive periodic SEO Performance reports via email. Once enabled and options are saved, you can see %1$s the preview here%2$s."
msgstr ""

msgid "Turn on email reports."
msgstr ""

msgid "Email Frequency"
msgstr ""

msgid "Email report frequency."
msgstr ""

msgid "Every 30 days"
msgstr ""

msgid "BuddyPress:"
msgstr ""

msgid "Groups"
msgstr ""

msgid "This tab contains SEO options for BuddyPress Group pages."
msgstr ""

msgid "Group name."
msgstr ""

msgid "Group name of the current group"
msgstr ""

msgid "Group Description."
msgstr ""

msgid "Group description of the current group"
msgstr ""

msgid "Group Title"
msgstr ""

msgid "Title tag for groups"
msgstr ""

msgid "Group Description"
msgstr ""

msgid "BuddyPress group description"
msgstr ""

msgid "Group Robots Meta"
msgstr ""

msgid "Select custom robots meta for Group archive pages. Otherwise the default meta will be used, as set in the Global Meta tab."
msgstr ""

msgid "Default"
msgstr ""

msgid "Custom"
msgstr ""

msgid "Custom values for robots meta tag on groups page."
msgstr ""

msgid "Group Advanced Robots Meta"
msgstr ""

#. translators: Link to kb article
msgid "Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area. %s."
msgstr ""

msgid "Content AI Plan"
msgstr ""

msgid "Content AI Credits"
msgstr ""

msgid "Content AI Refresh Date"
msgstr ""

msgid "&#8595; Rank Math Content AI"
msgstr ""

msgid "Write SEO Title with AI"
msgstr ""

msgid "Write SEO Description with AI"
msgstr ""

msgid "Write SEO Title & Description with AI"
msgstr ""

msgid "Write Image Alt Text with AI"
msgstr ""

msgid "Another bulk editing process is already running. Please try again later after the existing process is complete."
msgstr ""

msgid "Cancel Content AI Bulk Editing Process"
msgstr ""

#. Translators: placeholders are the number of posts that were processed.
msgid "Terminate the ongoing Content AI Bulk Editing Process to halt any pending modifications and revert to the previous state. The bulk metadata has been generated for %1$d out of %1$d posts so far."
msgstr ""

msgid "Terminate"
msgstr ""

msgid "Bulk Editing Process Successfully Cancelled"
msgstr ""

msgid "Bulk editing SEO meta started. It might take few minutes to complete the process."
msgstr ""

#. Translators: placeholder is the number of modified items.
msgid "SEO meta successfully updated in %d item."
msgid_plural "SEO meta successfully updated in %d items."
msgstr[0] ""
msgstr[1] ""

#. Translators: placeholder is the number of modified posts.
msgid "SEO meta successfully updated in %d posts. The process was stopped as you have reached the monthly limit for this feature."
msgstr ""

msgid "Bulk image alt generation started. It might take few minutes to complete the process."
msgstr ""

#. Translators: placeholder is the number of modified posts.
msgid "Image alt attributes successfully updated in %d post."
msgid_plural "Image alt attributes successfully updated in %d posts."
msgstr[0] ""
msgstr[1] ""

msgid "Bulk image alt generation failed."
msgstr ""

#. Translators: placeholder is the number of modified posts.
msgid "Image alt attributes successfully updated in %d posts. The process was stopped as you have reached the monthly limit for this feature."
msgstr ""

msgid "AI Tools"
msgstr ""

msgid "Content AI Tools"
msgstr ""

msgid "Content Editor"
msgstr ""

msgid "Content AI Editor"
msgstr ""

msgid "Chat"
msgstr ""

msgid "Content AI Chat"
msgstr ""

msgid "History"
msgstr ""

msgid "Content AI History"
msgstr ""

msgid "The content of the new post."
msgstr ""

msgid "The title of the new post."
msgstr ""

msgid "An array of AI-generated and existing outputs to be saved."
msgstr ""

msgid "The API endpoint for which the output was generated."
msgstr ""

msgid "Indicates if the request was for the Chat endpoint."
msgstr ""

msgid "The parameters used to generate the AI output."
msgstr ""

msgid "Credit usage details returned by the API."
msgstr ""

msgid "Per-tool usage data returned by the API."
msgstr ""

msgid "Indicates if the request to delete the output was for the Chat endpoint."
msgstr ""

msgid "The output index to delete, applicable only to the Chat endpoint."
msgstr ""

msgid "The selected prompt to be updated in the recent prompts."
msgstr ""

msgid "The prompt data to be saved in the database."
msgstr ""

msgid "A list of prompts received from the API to be saved in the database."
msgstr ""

msgid "Content AI plan to update in the Database."
msgstr ""

msgid "Content AI reset date to update in the Database"
msgstr ""

msgid "List of attachment IDs for which to generate alt text."
msgstr ""

msgid "Sorry, only authenticated users can research the keyword."
msgstr ""

msgid "Content AI is not enabled on this Post type."
msgstr ""

msgid "The keyword to be researched."
msgstr ""

msgid "The country for which the keyword should be researched."
msgstr ""

msgid "The ID of the post initiating the keyword research request."
msgstr ""

msgid "If true, forces a fresh research request."
msgstr ""

msgid "No data found for the researched keyword."
msgstr ""

#. Translators: link to the update page.
msgid "There is a new version of Content AI available! %s the Rank Math SEO plugin to use this feature."
msgstr ""

msgid "Please update"
msgstr ""

msgid "This feature is not available on the localhost."
msgstr ""

msgid "You have used all the free credits which are allowed to this domain."
msgstr ""

msgid "Gain Access to 40+ Advanced AI Tools."
msgstr ""

msgid "Experience the Revolutionary AI-Powered Content Editor."
msgstr ""

msgid "Engage with RankBot, Our AI Chatbot, For SEO Advice."
msgstr ""

msgid "Escape the Writer's Block Using AI to Write Inside WordPress."
msgstr ""

msgid "Default Country"
msgstr ""

msgid "Content AI tailors keyword research to the target country for highly relevant suggestions. You can override this in individual posts/pages/CPTs."
msgstr ""

msgid "Default Tone"
msgstr ""

msgid "This feature enables the default primary tone or writing style that characterizes your content. You can override this in individual tools."
msgstr ""

msgid "Analytical"
msgstr ""

msgid "Argumentative"
msgstr ""

msgid "Casual"
msgstr ""

msgid "Conversational"
msgstr ""

msgid "Creative"
msgstr ""

msgid "Descriptive"
msgstr ""

msgid "Emotional"
msgstr ""

msgid "Empathetic"
msgstr ""

msgid "Expository"
msgstr ""

msgid "Factual"
msgstr ""

msgid "Formal"
msgstr ""

msgid "Friendly"
msgstr ""

msgid "Humorous"
msgstr ""

msgid "Informal"
msgstr ""

msgid "Journalese"
msgstr ""

msgid "Narrative"
msgstr ""

msgid "Objective"
msgstr ""

msgid "Opinionated"
msgstr ""

msgid "Persuasive"
msgstr ""

msgid "Poetic"
msgstr ""

msgid "Satirical"
msgstr ""

msgid "Story-telling"
msgstr ""

msgid "Subjective"
msgstr ""

msgid "Technical"
msgstr ""

msgid "Default Audience"
msgstr ""

msgid "This option lets you set the default audience that usually reads your content. You can override this in individual tools."
msgstr ""

msgid "Activists"
msgstr ""

msgid "Artists"
msgstr ""

msgid "Bargain Hunters"
msgstr ""

msgid "Bloggers"
msgstr ""

msgid "Business Owners"
msgstr ""

msgid "Collectors"
msgstr ""

msgid "Cooks"
msgstr ""

msgid "Crafters"
msgstr ""

msgid "Dancers"
msgstr ""

msgid "DIYers"
msgstr ""

msgid "Designers"
msgstr ""

msgid "Educators"
msgstr ""

msgid "Engineers"
msgstr ""

msgid "Entrepreneurs"
msgstr ""

msgid "Environmentalists"
msgstr ""

msgid "Fashionistas"
msgstr ""

msgid "Fitness Enthusiasts"
msgstr ""

msgid "Foodies"
msgstr ""

msgid "Gaming Enthusiasts"
msgstr ""

msgid "Gardeners"
msgstr ""

msgid "General Audience"
msgstr ""

msgid "Health Enthusiasts"
msgstr ""

msgid "Healthcare Professionals"
msgstr ""

msgid "Indoor Hobbyists"
msgstr ""

msgid "Investors"
msgstr ""

msgid "Job Seekers"
msgstr ""

msgid "Movie Buffs"
msgstr ""

msgid "Musicians"
msgstr ""

msgid "Outdoor Enthusiasts"
msgstr ""

msgid "Parents"
msgstr ""

msgid "Pet Owners"
msgstr ""

msgid "Photographers"
msgstr ""

msgid "Podcast Listeners"
msgstr ""

msgid "Professionals"
msgstr ""

msgid "Retirees"
msgstr ""

msgid "Russian"
msgstr ""

msgid "Seniors"
msgstr ""

msgid "Social Media Users"
msgstr ""

msgid "Sports Fans"
msgstr ""

msgid "Students"
msgstr ""

msgid "Tech Enthusiasts"
msgstr ""

msgid "Travelers"
msgstr ""

msgid "TV Enthusiasts"
msgstr ""

msgid "Video Creators"
msgstr ""

msgid "Writers"
msgstr ""

msgid "Default Language"
msgstr ""

msgid "This option lets you set the default language for content generated using Content AI. You can override this in individual tools."
msgstr ""

msgid "US English"
msgstr ""

msgid "UK English"
msgstr ""

msgid "Arabic"
msgstr ""

msgid "Bulgarian"
msgstr ""

msgid "Chinese"
msgstr ""

msgid "Czech"
msgstr ""

msgid "Danish"
msgstr ""

msgid "Dutch"
msgstr ""

msgid "Estonian"
msgstr ""

msgid "Finnish"
msgstr ""

msgid "French"
msgstr ""

msgid "German"
msgstr ""

msgid "Greek"
msgstr ""

msgid "Hebrew"
msgstr ""

msgid "Hungarian"
msgstr ""

msgid "Indonesian"
msgstr ""

msgid "Italian"
msgstr ""

msgid "Japanese"
msgstr ""

msgid "Korean"
msgstr ""

msgid "Latvian"
msgstr ""

msgid "Lithuanian"
msgstr ""

msgid "Norwegian"
msgstr ""

msgid "Polish"
msgstr ""

msgid "Portuguese"
msgstr ""

msgid "Romanian"
msgstr ""

msgid "Slovak"
msgstr ""

msgid "Slovenian"
msgstr ""

msgid "Spanish"
msgstr ""

msgid "Swedish"
msgstr ""

msgid "Turkish"
msgstr ""

msgid "Select Post Type"
msgstr ""

msgid "Choose the type of posts/pages/CPTs where you want to use Content AI."
msgstr ""

msgid "Click to refresh the available credits."
msgstr ""

#. translators: 1. Credits left 2. Buy more credits link
msgid "%1$s credits left this month. Credits will renew on %2$s or you can upgrade to get more credits %3$s."
msgstr ""

#. translators: 1. Credits left 2. Buy more credits link
msgid "here"
msgstr ""

#. Translators: placeholder is the number of modified posts.
msgid "Blocks successfully converted in %d post."
msgid_plural "Blocks successfully converted in %d posts."
msgstr[0] ""
msgstr[1] ""

msgid "No Rank Math transients found."
msgstr ""

#. Translators: placeholder is the number of transients deleted.
msgid "%d Rank Math transient cleared."
msgid_plural "%d Rank Math transients cleared."
msgstr[0] ""
msgstr[1] ""

msgid "SEO Analyzer data has already been cleared."
msgstr ""

msgid "SEO Analyzer data successfully deleted."
msgstr ""

msgid "No Internal Links data found."
msgstr ""

msgid "Internal Links successfully deleted."
msgstr ""

msgid "No 404 log data found."
msgstr ""

msgid "404 Log successfully deleted."
msgstr ""

msgid "No Redirections found."
msgstr ""

msgid "Redirection rules successfully deleted."
msgstr ""

msgid "Table re-creation started. It might take a couple of minutes."
msgstr ""

msgid "No posts found to convert."
msgstr ""

msgid "Conversion started. A success message will be shown here once the process completes. You can close this page."
msgstr ""

msgid "Flush SEO Analyzer Data"
msgstr ""

msgid "Need a clean slate or not able to run the SEO Analyzer tool? Flushing the analysis data might fix the issue. Flushing SEO Analyzer data is entirely safe and doesn't remove any critical data from your website."
msgstr ""

msgid "Clear SEO Analyzer"
msgstr ""

msgid "Remove Rank Math Transients"
msgstr ""

msgid "If you see any issue while using Rank Math or one of its options - clearing the Rank Math transients fixes the problem in most cases. Deleting transients does not delete ANY data added using Rank Math."
msgstr ""

msgid "Remove transients"
msgstr ""

msgid "Clear 404 Log"
msgstr ""

msgid "Is the 404 error log getting out of hand? Use this option to clear ALL 404 logs generated by your website in the Rank Math 404 Monitor."
msgstr ""

msgid "Are you sure you want to delete the 404 log? This action is irreversible."
msgstr ""

msgid "Re-create Missing Database Tables"
msgstr ""

msgid "Check if required tables exist and create them if not."
msgstr ""

msgid "Re-create Tables"
msgstr ""

msgid "Fix Analytics table collations"
msgstr ""

msgid "In some cases, the Analytics database tables or columns don't match with each other, which can cause database errors. This tool can fix that issue."
msgstr ""

msgid "Fix Collations"
msgstr ""

msgid "Yoast Block Converter"
msgstr ""

msgid "Convert FAQ, HowTo, & Table of Contents Blocks created using Yoast. Use this option to easily move your previous blocks into Rank Math."
msgstr ""

msgid "Are you sure you want to convert Yoast blocks into Rank Math blocks? This action is irreversible."
msgstr ""

msgid "Convert Blocks"
msgstr ""

msgid "AIOSEO Block Converter"
msgstr ""

msgid "Convert TOC block created using AIOSEO. Use this option to easily move your previous blocks into Rank Math."
msgstr ""

msgid "Are you sure you want to convert AIOSEO blocks into Rank Math blocks? This action is irreversible."
msgstr ""

msgid "Delete Internal Links Data"
msgstr ""

msgid "In some instances, the internal links data might show an inflated number or no number at all. Deleting the internal links data might fix the issue."
msgstr ""

msgid "Are you sure you want to delete Internal Links Data? This action is irreversible."
msgstr ""

msgid "Delete Internal Links"
msgstr ""

msgid "Delete Redirections Rules"
msgstr ""

msgid "Getting a redirection loop or need a fresh start? Delete all the redirections using this tool. Note: This process is irreversible and will delete ALL your redirection rules."
msgstr ""

msgid "Are you sure you want to delete all the Redirection Rules? This action is irreversible."
msgstr ""

msgid "Delete Redirections"
msgstr ""

msgid "Update SEO Scores"
msgstr ""

msgid "This tool will calculate the SEO score for the posts/pages that have a Focus Keyword set. Note: This process may take some time and the browser tab must be kept open while it is running."
msgstr ""

msgid "Recalculate Scores"
msgstr ""

msgid "Purge Analytics Cache"
msgstr ""

msgid "Clear analytics cache to re-calculate all the stats again."
msgstr ""

msgid "Clear Cache"
msgstr ""

msgid "Missing some posts/pages in the Analytics data? Clear the index and build a new one for more accurate stats."
msgstr ""

#. translators: 1: settings URL, 2: settings text
msgid "To properly rebuild Analytics posts in secondary languages, please disable the %1$s when using a different domain per language."
msgstr ""

msgid "Make themes work multilingual option in WPML settings"
msgstr ""

msgid "Rebuild Index for Analytics"
msgstr ""

msgid "Rebuild Index"
msgstr ""

msgid "Images"
msgstr ""

#. translators: Link to kb article
msgid "SEO options related to featured images and media appearing in your post content. %s."
msgstr ""

msgid "Add missing ALT attributes"
msgstr ""

msgid "Add <code>alt</code> attributes for <code>images</code> without <code>alt</code> attributes automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed."
msgstr ""

msgid "Alt attribute format"
msgstr ""

msgid "Format used for the new <code>alt</code> attribute values."
msgstr ""

msgid "Add missing TITLE attributes"
msgstr ""

msgid "Add <code>TITLE</code> attribute for all <code>images</code> without a <code>TITLE</code> attribute automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed."
msgstr ""

msgid "Title attribute format"
msgstr ""

msgid "Format used for the new <code>title</code> attribute values."
msgstr ""

msgid "Unknown error."
msgstr ""

msgid "Invalid request."
msgstr ""

msgid "Invalid API key."
msgstr ""

msgid "Invalid URL."
msgstr ""

msgid "Too many requests."
msgstr ""

msgid "Internal server error."
msgstr ""

msgid "Instant Indexing: Submit Pages"
msgstr ""

msgid "Instant Indexing: Submit Page"
msgstr ""

msgid "Submit URLs"
msgstr ""

msgid "Send URLs directly to the IndexNow API."
msgstr ""

#. translators: Link to kb article
msgid "Instant Indexing module settings. %s."
msgstr ""

msgid "The last 100 IndexNow API requests."
msgstr ""

msgid "Error submitting page to IndexNow."
msgstr ""

#. translators: %s: Number of pages submitted.
msgid "%s page submitted to IndexNow."
msgid_plural "%s pages submitted to IndexNow."
msgstr[0] ""
msgstr[1] ""

msgid "The list of urls to submit to the Instant Indexing API."
msgstr ""

msgid "Filter log by type."
msgstr ""

msgid "Clear log by type."
msgstr ""

msgid "No URLs provided."
msgstr ""

msgid "Invalid URLs provided."
msgstr ""

msgid "Failed to submit URLs. See details in the History tab."
msgstr ""

#. Translators: %s is the number of URLs submitted.
msgid "Successfully submitted %s URL."
msgid_plural "Successfully submitted %s URLs."
msgstr[0] ""
msgstr[1] ""

#. Translators: placeholder is human-readable time, e.g. "1 hour".
msgid "%s ago"
msgstr ""

msgid "Insert URLs to send to the IndexNow API (one per line, up to 10,000):"
msgstr ""

msgctxt "URL slug placeholder"
msgid "hello-world"
msgstr ""

#. translators: Note text
msgid "%s The URLs will be submitted to Bing and Yandex only, and not to Google."
msgstr ""

msgid "Note:"
msgstr ""

msgid "Clear History"
msgstr ""

msgid "All"
msgstr ""

msgid "Manual"
msgstr ""

msgid "Auto"
msgstr ""

msgid "Time"
msgstr ""

msgid "URL"
msgstr ""

msgid "Response"
msgstr ""

msgid "Response Code Help"
msgstr ""

msgid "Response Code"
msgstr ""

msgid "Response Message"
msgstr ""

msgid "Reasons"
msgstr ""

msgid "The URL was successfully submitted to the IndexNow API."
msgstr ""

msgid "Accepted"
msgstr ""

msgid "The URL was successfully submitted to the IndexNow API, but the API key will be checked later."
msgstr ""

msgid "Bad Request"
msgstr ""

msgid "The request was invalid."
msgstr ""

msgid "Forbidden"
msgstr ""

msgid "The key was invalid (e.g. key not found, file found but key not in the file)."
msgstr ""

msgid "Unprocessable Entity"
msgstr ""

msgid "The URLs don't belong to the host or the key is not matching the schema in the protocol."
msgstr ""

msgid "Too Many Requests"
msgstr ""

msgid "Too Many Requests (potential Spam)."
msgstr ""

msgid "Auto-Submit Post Types"
msgstr ""

msgid "Submit posts from these post types automatically to the IndexNow API when a post is published, updated, or trashed."
msgstr ""

msgid "API Key"
msgstr ""

msgid "The IndexNow API key proves the ownership of the site. It is generated automatically. You can change the key if it becomes known to third parties."
msgstr ""

msgid "Change Key"
msgstr ""

msgid "API Key Location"
msgstr ""

msgid "Check Key"
msgstr ""

#. Translators: %s is the words "Check Key".
msgid "Use the %1$s button to verify that the key is accessible for search engines. Clicking on it should open the key file in your browser and show the API key."
msgstr ""

msgid "You do not have permission to access this resource."
msgstr ""

msgid "Items per page."
msgstr ""

msgid "Search in post title."
msgstr ""

msgid "Filter by post type. Supports multiple values."
msgstr ""

msgid "Filter by orphan status (orphan, linked)."
msgstr ""

msgid "Filter by SEO score range (great, good, bad, no-score)."
msgstr ""

msgid "Filter by post ID."
msgstr ""

msgid "Order by field."
msgstr ""

msgid "Order direction (ASC, DESC)."
msgstr ""

msgid "Search in URL."
msgstr ""

msgid "Filter by source post ID."
msgstr ""

msgid "Filter by target post ID."
msgstr ""

msgid "Filter by link type (1 = internal, 0 = external)."
msgstr ""

msgid "Links: "
msgstr ""

msgid "Internal Links"
msgstr ""

msgid "External Links"
msgstr ""

msgid "Incoming Links"
msgstr ""

msgid "Edit llms.txt"
msgstr ""

msgid "Configure your llms.txt file for custom crawling/indexing rules."
msgstr ""

#. Translators: placeholder is the llms.txt file URL.
msgid "Your <code>llms.txt</code> file is available at <a href=\"%1$s\" target=\"_blank\">%2$s</a>."
msgstr ""

msgid "Select Post Types"
msgstr ""

msgid "Select the post types to be included in the llms.txt file."
msgstr ""

msgid "Select Taxonomies"
msgstr ""

msgid "Select the taxonomies to be included in the llms.txt file."
msgstr ""

msgid "Posts/Terms Limit"
msgstr ""

msgid "Maximum number of links to include for each post type."
msgstr ""

msgid "Additional Content"
msgstr ""

msgid "Add any extra text or links you'd like to include in your llms.txt file manually."
msgstr ""

msgid "Person or Company"
msgstr ""

msgid "Organization"
msgstr ""

msgid "Choose whether the site represents a person or an organization."
msgstr ""

msgid "Website Name"
msgstr ""

msgid "Enter the name of your site to appear in search results."
msgstr ""

msgid "Website Alternate Name"
msgstr ""

msgid "An alternate version of your site name (for example, an acronym or shorter name)."
msgstr ""

msgid "Person/Organization Name"
msgstr ""

msgid "Your name or company name intended to feature in Google's Knowledge Panel."
msgstr ""

msgid "Provide a detailed description of your organization."
msgstr ""

msgid "Logo"
msgstr ""

msgid "<strong>Min Size: 112Î§112px</strong>.<br /> A squared image is preferred by the search engines."
msgstr ""

msgid "URL of your website or your companyâ€™s website."
msgstr ""

msgid "Email"
msgstr ""

msgid "Enter the contact email address that could be displayed on search engines."
msgstr ""

msgid "Phone"
msgstr ""

msgid "Search engines may prominently display your contact phone number for mobile users."
msgstr ""

msgid "Address"
msgstr ""

msgid "Address Format"
msgstr ""

msgid "Format used when the address is displayed using the <code>[rank_math_contact_info]</code> shortcode.<br><strong>Available Tags: {address}, {locality}, {region}, {postalcode}, {country}, {gps}</strong>"
msgstr ""

msgid "Business Type"
msgstr ""

msgid "Opening Hours Format"
msgstr ""

msgid "Time format used in the contact shortcode."
msgstr ""

msgid "Opening Hours"
msgstr ""

msgid "Select opening hours. You can add multiple sets if you have different opening or closing hours on some days or if you have a mid-day break. Times are specified using 24:00 time."
msgstr ""

msgid "Add time"
msgstr ""

msgid "Monday"
msgstr ""

msgid "Tuesday"
msgstr ""

msgid "Wednesday"
msgstr ""

msgid "Thursday"
msgstr ""

msgid "Friday"
msgstr ""

msgid "Saturday"
msgstr ""

msgid "Sunday"
msgstr ""

msgid "e.g. 09:00-17:00"
msgstr ""

msgid "Phone Number"
msgstr ""

msgid "Add number"
msgstr ""

msgid "Format: +1-401-555-1212"
msgstr ""

msgid "Price Range"
msgstr ""

msgid "The price range of the business, for example $$$."
msgstr ""

msgid "Additional Info"
msgstr ""

msgid "Provide relevant details of your company to include in the Organization Schema."
msgstr ""

msgid "Add"
msgstr ""

msgid "Select Page"
msgstr ""

msgid "About Page"
msgstr ""

msgid "Select a page on your site where you want to show the LocalBusiness meta data."
msgstr ""

msgid "Contact Page"
msgstr ""

msgid "Google Maps API Key"
msgstr ""

#. translators: %s expands to "Google Maps Embed API" https://developers.google.com/maps/documentation/embed
msgid "An API Key is required to display embedded Google Maps on your site. Get it here: %s"
msgstr ""

#. translators: %s expands to "Google Maps Embed API" https://developers.google.com/maps/documentation/embed
msgid "Google Maps Embed API"
msgstr ""

msgid "Geo Coordinates"
msgstr ""

msgid "Latitude and longitude values separated by comma."
msgstr ""

#. Translators: placeholder is a link to the Pro version
msgid "Multiple Locations are available in the %s."
msgstr ""

#. translators: Link to kb article
msgid "Easily create redirects without fiddling with tedious code. %s."
msgstr ""

msgid "No valid ID found."
msgstr ""

msgid "No valid action found."
msgstr ""

msgid "Add New"
msgstr ""

msgid "Export Options"
msgstr ""

msgid "Redirection successfully activated."
msgstr ""

msgid "Redirection successfully deactivated."
msgstr ""

msgid "Redirection successfully moved to Trash."
msgstr ""

msgid "Redirection successfully restored."
msgstr ""

#. translators: delete counter
msgid "%d redirection(s) successfully deleted."
msgstr ""

#. Translators: Placeholder expands to number of redirections.
msgid "Warning: you have more than %d active redirections. Exporting them to your .htaccess file may cause performance issues."
msgstr ""

msgid "Export to .htaccess"
msgstr ""

msgid "Export to Nginx config file"
msgstr ""

msgid "Export"
msgstr ""

msgid "Redirection successfully deleted."
msgstr ""

msgid "Can't update redirection."
msgstr ""

msgid "Redirection updated successfully."
msgstr ""

msgid "New redirection created."
msgstr ""

#. translators: source pattern
msgid "Invalid regex pattern: %s"
msgstr ""

msgid "Redirection Count"
msgstr ""

msgid "Total number of Redirections created in the Rank Math."
msgstr ""

msgid "Redirection Hits"
msgstr ""

msgid "Total number of hits received by all the Redirections."
msgstr ""

msgid "Create and edit redirections"
msgstr ""

msgid "Manage Redirections"
msgstr ""

msgid "Redirection Settings"
msgstr ""

msgid "&raquo; Redirect this page"
msgstr ""

msgid "Redirect the current URL"
msgstr ""

msgid "No redirections found in Trash."
msgstr ""

msgid "No redirections added yet. <a href=\"#\" class=\"rank-math-add-new-redirection\">Add New Redirection</a>"
msgstr ""

msgid "Show more"
msgstr ""

msgid "Hide details"
msgstr ""

msgid "Hide"
msgstr ""

msgid "Restore"
msgstr ""

msgid "Delete Permanently"
msgstr ""

msgid "Edit"
msgstr ""

msgid "Deactivate"
msgstr ""

msgid "Activate"
msgstr ""

msgid "Trash"
msgstr ""

msgid "From"
msgstr ""

msgid "To"
msgstr ""

msgid "Type"
msgstr ""

msgid "Created"
msgstr ""

msgid "Last Accessed"
msgstr ""

msgid "Move to Trash"
msgstr ""

msgid "Active"
msgstr ""

msgid "Inactive"
msgstr ""

msgid "Empty Trash"
msgstr ""

#. translators: %1$s: post type label, %2$s: edit redirection URL.
#. translators: %1$s: term name, %2$s: edit redirection URL.
msgid "SEO Notice: you just changed the slug of a %1$s and Rank Math has automatically created a redirection. You can edit the redirection by <a href=\"%2$s\">clicking here</a>."
msgstr ""

#. translators: 1. url to new screen, 2. old trashed post permalink
msgid "<strong>SEO Notice:</strong> A previously published %1$s has been moved to trash. You may redirect <code>%2$s</code> to <a href=\"%3$s\">a new url</a>."
msgstr ""

msgid "Rank Math SEO Redirection Debugger"
msgstr ""

msgid "Redirection Debugger"
msgstr ""

msgid "Redirecting from "
msgstr ""

msgid " To "
msgstr ""

#. translators: countdown seconds
msgid "Redirecting in %s seconds..."
msgstr ""

msgid "Stop Redirection"
msgstr ""

msgid "Continue redirecting"
msgstr ""

msgid "Manage This Redirection"
msgstr ""

msgid "or"
msgstr ""

msgid "Manage All Redirections"
msgstr ""

msgid "<strong>Note:</strong> This interstitial page is displayed only to administrators. Site visitors are redirected without delay."
msgstr ""

msgid "Served from cache"
msgstr ""

msgid "<strong>Edit</strong> redirection details: from/to URLs and the redirection type."
msgstr ""

msgid "<strong>Activate/Deactivate</strong> redirections. Deactivated redirections do not take effect on your site."
msgstr ""

msgid "<strong>Delete</strong> permanently removes the redirection."
msgstr ""

msgid "You can also activate, deactivate, or delete multiple items at once using the Bulk Actions dropdown."
msgstr ""

msgid "Here you can set up custom redirections. It is important to choose the right type of redirection."
msgstr ""

msgid "301 redirections are <em>permanent</em>. The old URL will be removed in search engines and replaced by the new one, passing on SearchRank and other SEO scores. Browsers may also store the new URL in cache and redirect to it even after the redirection is deleted from the list here."
msgstr ""

msgid "Using a 302 <em>temporary</em> redirection is useful when you want to test a new page for client feedback temporarily without affecting the SEO scores of the original page."
msgstr ""

msgid "Redirections can be exported to your .htaccess file for faster redirections, in SEO > Settings > Import/Export."
msgstr ""

msgid "Debug Redirections"
msgstr ""

msgid "Display the Debug Console instead of being redirected. Administrators only."
msgstr ""

msgid "Fallback Behavior"
msgstr ""

msgid "If nothing similar is found, this behavior will be applied. <strong>Note</strong>: If the requested URL ends with <code>/login</code>, <code>/admin</code>, or <code>/dashboard</code>, WordPress will automatically redirect to respective locations within the WordPress admin area."
msgstr ""

msgid "Default 404"
msgstr ""

msgid "Redirect to Homepage"
msgstr ""

msgid "Custom Redirection"
msgstr ""

msgid "Custom Url "
msgstr ""

msgid "Redirection Type"
msgstr ""

msgid "Auto Post Redirect"
msgstr ""

msgid "Extend the functionality of WordPress by creating redirects in our plugin when you change the slug of a post, page, category or a CPT. You can modify the redirection further according to your needs."
msgstr ""

msgid "Edit robots.txt"
msgstr ""

#. translators: Link to kb article
msgid "Edit your robots.txt file to control what bots see. %s."
msgstr ""

msgid "Leave the field empty to let WordPress handle the contents dynamically. If an actual robots.txt file is present in the root folder of your site, this option won't take effect and you have to edit the file directly, or delete it and then edit from here."
msgstr ""

msgid "Contents are locked because a robots.txt file is present in the root folder."
msgstr ""

msgid "Rank Math could not detect if a robots.txt file exists or not because of a filesystem issue. The file contents entered here may not be applied."
msgstr ""

msgid "robots.txt file is not writable."
msgstr ""

#. Translators: placeholder is the Settings page URL.
msgid "<strong>Warning:</strong> your site's search engine visibility is set to Hidden in <a href=\"%1$s\" target=\"_blank\">Settings &gt; Reading</a>. This means that the changes you make here will not take effect. Set the search engine visibility to Public to be able to change the robots.txt content."
msgstr ""

#. Translators: placeholder is the URL to the robots.txt tester tool.
msgid "Test and edit your live robots.txt file with our <a href=\"%1$s\" target=\"_blank\">Robots.txt Tester</a>."
msgstr ""

msgid "Titles & Meta Settings"
msgstr ""

msgid "Sitemap Settings"
msgstr ""

msgid "404 Monitor Log"
msgstr ""

msgid "Link Builder"
msgstr ""

msgid "Site-Wide Analysis"
msgstr ""

msgid "On-Page Analysis"
msgstr ""

msgid "On-Page General Settings"
msgstr ""

msgid "On-Page Advanced Settings"
msgstr ""

msgid "On-Page Schema Settings"
msgstr ""

msgid "On-Page Social Settings"
msgstr ""

msgid "Top Admin Bar"
msgstr ""

msgid "Blocks"
msgstr ""

msgid "Take control over the default settings available for Rank Math Blocks."
msgstr ""

#. translators: %d is the number of days.
msgid "%d day"
msgid_plural "%d days"
msgstr[0] ""
msgstr[1] ""

#. translators: %d is the number of hours.
msgid "%d hour"
msgid_plural "%d hours"
msgstr[0] ""
msgstr[1] ""

#. translators: %d is the number of minutes.
#. translators: %d: minutes
msgid "%d minute"
msgid_plural "%d minutes"
msgstr[0] ""
msgstr[1] ""

#. translators: placeholders are units of time, e.g. '1 hour and 30 minutes'
msgid "%1$s and %2$s"
msgstr ""

#. translators: placeholders are units of time, e.g. '1 day, 8 hours and 30 minutes'
msgid "%1$s, %2$s and %3$s"
msgstr ""

msgid "Total Time:"
msgstr ""

msgid "Table of Contents Title"
msgstr ""

msgid "Enter the default title to use for the Table of Contents block."
msgstr ""

msgid "Table of Contents"
msgstr ""

msgid "Table of Contents List style"
msgstr ""

msgid "Select the default list style for the Table of Contents block."
msgstr ""

msgid "Numbered"
msgstr ""

msgid "Unordered"
msgstr ""

msgid "Table of Contents Exclude Headings"
msgstr ""

msgid "Choose the headings to exclude from the Table of Contents block."
msgstr ""

msgid "Heading H1"
msgstr ""

msgid "Heading H2"
msgstr ""

msgid "Heading H3"
msgstr ""

msgid "Heading H4"
msgstr ""

msgid "Heading H5"
msgstr ""

msgid "Heading H6"
msgstr ""

msgid "No schema found."
msgstr ""

msgid "Days"
msgstr ""

msgid "Opening Time"
msgstr ""

msgid "Closing Time"
msgstr ""

msgid "Editor's Rating:"
msgstr ""

msgid "Author"
msgstr ""

msgid "Edition"
msgstr ""

msgid "Name"
msgstr ""

msgid "Url"
msgstr ""

msgid "ISBN"
msgstr ""

msgid "Date Published"
msgstr ""

msgid "Format"
msgstr ""

msgid "Course Provider"
msgstr ""

msgid "Course Provider Name"
msgstr ""

msgid "Course Provider URL"
msgstr ""

msgid "Course Mode"
msgstr ""

msgid "Course Workload"
msgstr ""

msgid "Start Date"
msgstr ""

msgid "End Date"
msgstr ""

msgid "Duration"
msgstr ""

msgid "Repeat Count"
msgstr ""

msgid "Repeat Frequency"
msgstr ""

msgid "Course Type"
msgstr ""

msgid "Course Currency"
msgstr ""

msgid "Course Price"
msgstr ""

msgid "Online + Offline"
msgstr ""

msgid "Event Type"
msgstr ""

msgid "Event Attendance Mode"
msgstr ""

msgid "Event Status"
msgstr ""

msgid "Venue Name"
msgstr ""

msgid "Venue URL"
msgstr ""

msgid "Online Event URL"
msgstr ""

msgid "Performer"
msgstr ""

msgid "Performer Name"
msgstr ""

msgid "Performer URL"
msgstr ""

msgid "Ticket URL"
msgstr ""

msgid "Entry Price"
msgstr ""

msgid "Currency"
msgstr ""

msgid "Availability"
msgstr ""

msgid "Availability Starts"
msgstr ""

msgid "Stock Inventory"
msgstr ""

msgid "Salary"
msgstr ""

msgid "Salary Currency"
msgstr ""

msgid "Payroll"
msgstr ""

msgid "Date Posted"
msgstr ""

msgid "Expiry Posted"
msgstr ""

msgid "Unpublish when expired"
msgstr ""

msgid "Employment Type "
msgstr ""

msgid "Hiring Organization "
msgstr ""

msgid "Organization URL"
msgstr ""

msgid "Organization Logo"
msgstr ""

msgid "Location"
msgstr ""

msgid "Gender"
msgstr ""

msgid "Job Title"
msgstr ""

msgid "Product SKU"
msgstr ""

msgid "Product Brand"
msgstr ""

msgid "Product Currency"
msgstr ""

msgid "Product Price"
msgstr ""

msgid "Price Valid Until"
msgstr ""

msgid "Product In-Stock"
msgstr ""

msgid "Cuisine"
msgstr ""

msgid "Keywords"
msgstr ""

msgid "Recipe Yield"
msgstr ""

msgid "Calories"
msgstr ""

msgid "Preparation Time"
msgstr ""

msgid "Cooking Time"
msgstr ""

msgid "Total Time"
msgstr ""

msgid "Recipe Video Name"
msgstr ""

msgid "Recipe Video Description"
msgstr ""

msgid "Recipe Video Thumbnail"
msgstr ""

msgid "Recipe Ingredients"
msgstr ""

msgid "Recipe Instructions"
msgstr ""

msgid "Serves Cuisine"
msgstr ""

msgid "Menu URL"
msgstr ""

msgid "Service Type"
msgstr ""

msgid "Price"
msgstr ""

msgid "Price Currency"
msgstr ""

msgid "Operating System"
msgstr ""

msgid "Application Category"
msgstr ""

msgid "Site-wide analysis"
msgstr ""

msgid "Analyze this Page"
msgstr ""

msgid "SEO Analysis for this page"
msgstr ""

msgid "Rank Math auto-update option is enabled on your site."
msgstr ""

#. Translators: placeholder is a HTTP error code.
msgid "HTTP %d error."
msgstr ""

msgid "Unexpected API response."
msgstr ""

msgid "(No Title)"
msgstr ""

msgid "(No Description)"
msgstr ""

msgid "Site Tagline"
msgstr ""

#. translators: link to general setting screen
msgid "Your theme may display the Site Tagline, and it can also be used in SEO titles &amp; descriptions. Set it to something unique. You can change it by navigating to <a href=\"%s\">Settings &gt; General</a>."
msgstr ""

msgid "Most WordPress themes place your site's tagline in a prominent position (inside header tags near the top of the page).  Using the right tagline can give your site an SEO boost."
msgstr ""

msgid "Unfortunately, the standard WordPress tagline is \"Just Another WordPress site.\"  That's pretty sloppy looking, and it does nothing for your SEO.  In fact, it's actually a security risk - it makes it easy for hackers with a WordPress exploit to locate your site with an automated search."
msgstr ""

#. translators: link to general setting screen
msgid "Changing your tagline is very easy.  Just head on over to <a target=\"_blank\" href=\"%1$s\">Settings - General</a> in WordPress's admin menu (on the left), or click on the link in this sentence."
msgstr ""

msgid "The tagline is the second option.  Choose a tagline that summarizes your site in a few words.  The tagline is also a good place to use your main keyword."
msgstr ""

msgid "Confirm custom tagline is set for your site"
msgstr ""

msgid "Blog Public"
msgstr ""

#. translators: link to general setting screen
msgid "Your site may not be visible to search engine."
msgstr ""

#. translators: %1$s link to the reading settings, %2$s closing tag for the link
msgid "You must %1$sgo to your Reading Settings%2$s and uncheck the box for Search Engine Visibility."
msgstr ""

msgid "Check your site's visibility to search engines"
msgstr ""

msgid "Permalink Structure"
msgstr ""

#. translators: link to permalink setting screen
msgid "For the best SEO results, use a custom permalink structure, preferably one that includes the post title (<code>%%postname%%</code>). You can change it by navigating to <a href=\"%s\">Settings &gt; Permalinks</a>"
msgstr ""

msgid "The standard permalink structure is pretty ugly - WordPress generates offputting URLs like: http://www.yoursite.com/?p=99"
msgstr ""

msgid "It's not very kind on the eyes, and it does nothing for your site's SEO.  In fact, it can hurt it - Google's bot is quite cautious about crawling pages that look auto-generated."
msgstr ""

#. translators: link to permalink setting screen
msgid "Fortunately, it's very easy to fix.  Just hop on over to <a target=\"_blank\" href=\"%1$s\">Settings - Permalinks</a>.  Then chose the \"Post Name\" option."
msgstr ""

msgid "This option will replace the \"?p=99\" part of the URL with the post's title, like this: http://www.yoursite.com/my-amazing-post-title/"
msgstr ""

msgid "This looks nice for readers - and it gets your keywords into the URL (keywords in the URL is a ranking factor)."
msgstr ""

msgid "Check your site for SEO-friendly permalink structure"
msgstr ""

msgid "Focus Keywords"
msgstr ""

msgid "Setting focus keywords for your posts allows Rank Math to analyse the content."
msgstr ""

msgid "Rank Math allows you to set a focus keyword for every post and page you write - the option is in the \"Meta Box\", which appears under the text editor in the screen where you write and edit content."
msgstr ""

msgid "Rank Math uses these focus keywords to analyze your on-page content.  It can tell if you've done a good job of optimizing your text to rank for these keywords."
msgstr ""

msgid "Of course, if you don't give Rank Math a focus keyword to work with, it can't give you any useful feedback."
msgstr ""

msgid "Fixing this issue is easy - just edit the post, and set a Focus Keyword.  Then follow Rank Math's analysis to improve your rankings."
msgstr ""

msgid "Confirm focus keywords are set for all your posts"
msgstr ""

msgid "Post Titles Missing Focus Keywords"
msgstr ""

msgid "Make sure the focus keywords you set for the posts appear in their titles."
msgstr ""

msgid "HTML Page Titles play a large role in Google's ranking algorithm.  When you add a Focus Keyword to a post or page, Rank Math will check to see that you used the keyword in the title.  If it finds any posts or pages that are missing the keyword in the title, it will tell you here."
msgstr ""

msgid "Fixing the issue is simple - just edit the post/page and add the focus keyword(s) to the title."
msgstr ""

msgid "Verify the presence of focus keywords in your post titles"
msgstr ""

#. translators: link to plugin setting screen
msgid "Register at Google Search Console and verificate your site by adding the code to <a href=\"%1$s\">Settings &gt; Verificate Tools</a>, then navigate to <a href=\"%2$s\">Settings &gt; Search Console</a> to authenticate and link your site."
msgstr ""

msgid "Google's Search Console is a vital source of information concerning your rankings and click-through rates.  Rank Math can import this data, so you don't have to log into your Google account to get the data you need."
msgstr ""

#. translators: link to plugin search console setting screen
msgid "You can integrate the Google Search Console with Rank math in the <a href=\"%1$s\" target=\"_blank\">Search Console tab</a>. of Rank Math's General Settings menu."
msgstr ""

#. translators: Link to Search Console KB article
msgid "Read <a href=\"%1$s\" target=\"_blank\">this article</a> for detailed instructions on setting up your Google Webmaster account and getting Rank Math to work with the Google Search Console."
msgstr ""

msgid "Confirm if Rank Math is connected to Search Console"
msgstr ""

msgid "Sitemaps"
msgstr ""

msgid "XML sitemaps are a special type of text file that tells search engines about the structure of your site. They're a list of all the resources (pages and files) you would like the search engine to index. You can assign different priorities, so certain pages will be crawled first. Before XML sitemaps, search engines were limited to indexing the content they could find by following links. That's still an important feature for search engine spiders, but XML sitemaps have made it easier for content creators and search engines to collaborate."
msgstr ""

msgid "If you don't have an XML sitemap, the best option is to install a plugin that creates sitemaps for you. That way you'll know the sitemap will always be up-to-date. Plugins can also automatically ping the search engines when the XML file is updated. The Rank Math WordPress plugin gives you complete control over your site's XML sitemaps. You can control the settings for each page as you write or edit it, and Rank Math will ping Google as soon as you submit your edits. This results in fast crawls and indexing."
msgstr ""

msgid "Check the presence of sitemaps on your website"
msgstr ""

msgid "Automatic Updates"
msgstr ""

msgid "Enable automatic updates to ensure you are always using the latest version of Rank Math."
msgstr ""

msgid "Verify auto-updates are enabled for Rank Math"
msgstr ""

msgid "Site wide plugins auto-update option is disabled on your site."
msgstr ""

#. Translators: placeholder is an activate button.
msgid "Automatic updates are not enabled on your site. %s"
msgstr ""

msgid "Enable Auto Updates"
msgstr ""

#. translators: %1$s link to the customize settings, %2$s closing tag for the link
msgid "You have not entered a tagline yet. It is a good idea to choose one. %1$sYou can fix this in the customizer%2$s."
msgstr ""

msgid "Your Site Tagline is set to the default value <em>Just another WordPress site</em>."
msgstr ""

msgid "Your Site Tagline is set to a custom value."
msgstr ""

msgid "Permalinks are set to the default value. <em>Pretty permalinks</em> are disabled. "
msgstr ""

msgid "Permalinks are set to a custom structure but the post titles do not appear in the permalinks."
msgstr ""

#. translators: permalink structure
msgid "Post permalink structure is set to %s."
msgstr ""

msgid "Google Search Console has been linked."
msgstr ""

msgid "You have not linked Google Search Console yet."
msgstr ""

msgid "Could not check Focus Keywords in posts - the post meta table exceeds the size limit."
msgstr ""

msgid "All published posts have focus keywords set."
msgstr ""

#. translators: post type links
msgid "There are %s with no focus keyword set."
msgstr ""

msgid "Focus keywords appear in the titles of published posts where it is set."
msgstr ""

#. translators: post ID count
msgid "+%d More..."
msgstr ""

#. translators: post type links
msgid "There are %s published posts where the primary focus keyword does not appear in the post title."
msgstr ""

msgid "Your site has one or more sitemaps."
msgstr ""

msgid "No sitemaps found."
msgstr ""

msgid "Attention: Search Engines can't see your website."
msgstr ""

#. translators: %1$s: opening tag of the link, %2$s: the closing tag
msgid "Navigate to %1$sSettings > Reading%2$s and turn off this option: \"Discourage search engines from indexing this site\"."
msgstr ""

msgid "Your site is accessible by search engine."
msgstr ""

msgid "General"
msgstr ""

msgid "This tab contains General settings related to the XML sitemaps."
msgstr ""

#. translators: sitemap url
msgid "Your sitemap index can be found here: %s"
msgstr ""

msgid "This tab contains settings related to the HTML sitemap."
msgstr ""

#. translators: Learn more link.
msgid "Set the sitemap options for author archive pages. %s."
msgstr ""

msgid "attachments"
msgstr ""

msgid "your product pages"
msgstr ""

#. translators: Post Type label
msgid "single %s"
msgstr ""

#. translators: %1$s: thing, %2$s: Learn more link.
msgid "Change Sitemap settings of %1$s. %2$s."
msgstr ""

#. translators: Post Type Sitemap Url
#. translators: Taxonomy Sitemap Url
msgid "Sitemap URL: %s"
msgstr ""

msgid "Please note that this will add the attachment page URLs to the sitemap, not direct image URLs."
msgstr ""

msgid "Taxonomies:"
msgstr ""

#. translators: Taxonomy singular label
msgid "your product %s pages"
msgstr ""

#. translators: Taxonomy singular label
msgid "%s archives"
msgstr ""

msgid "Exclude this attachment from sitemap"
msgstr ""

#. Translators: the placeholder is for the sitemap base url.
msgid "Since you are using an NGINX server, you may need to add the following code to your %s <strong>if your Sitemap pages are not loading</strong>. If you are unsure how to do it, please contact your hosting provider."
msgstr ""

msgid "configuration file"
msgstr ""

msgid "Click here to see the code."
msgstr ""

msgid "I already added"
msgstr ""

#. Translators: placeholder is the post type name.
msgid "Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href=\"%2$s\">Titles &amp; Meta page</a> and <a href=\"%3$s\">the Sitemap</a>."
msgstr ""

#. Translators: placeholder is the post type names separated with commas.
msgid "Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href=\"%2$s\">Titles &amp; Meta page</a> and <a href=\"%3$s\">the Sitemap</a>."
msgstr ""

#. translators: 1. separator, 2. blogname
msgid "XML Sitemap %1$s %2$s"
msgstr ""

#. translators: 1. separator, 2. blogname
msgid "Locations Sitemap %1$s %2$s"
msgstr ""

msgid "Include in Sitemap"
msgstr ""

msgid "Include author archives in the XML sitemap."
msgstr ""

msgid "Include in HTML Sitemap"
msgstr ""

msgid "Include author archives in the HTML sitemap if it's enabled."
msgstr ""

msgid "Include Authors Without Posts"
msgstr ""

msgid "Enable this option to include authors in the sitemap even if they have not created any posts. This ensures all author archives are listed, regardless of content availability."
msgstr ""

msgid "Exclude User Roles"
msgstr ""

msgid "Selected roles will be excluded from the XML &amp; HTML sitemaps."
msgstr ""

msgid "Exclude Users"
msgstr ""

msgid "Add user IDs, separated by commas, to exclude them from the sitemap."
msgstr ""

#. translators: hreflang tags documentation link
msgid "Rank Math generates the default Sitemaps only and WPML takes care of the rest. When a search engine bot visits any post/page, it is shown hreflang tag that helps it crawl the translated pages. This is one of the recommended methods by Google. Please %s"
msgstr ""

msgid "read here"
msgstr ""

msgid "Links Per Sitemap"
msgstr ""

msgid "Max number of links on each sitemap page."
msgstr ""

msgid "Images in Sitemaps"
msgstr ""

msgid "Include reference to images from the post content in sitemaps. This helps search engines index the important images on your pages."
msgstr ""

msgid "Include Featured Images"
msgstr ""

msgid "Include the Featured Image too, even if it does not appear directly in the post content."
msgstr ""

msgid "Exclude Posts"
msgstr ""

msgid "Enter post IDs of posts you want to exclude from the sitemap, separated by commas. This option **applies** to all posts types including posts, pages, and custom post types."
msgstr ""

msgid "Exclude Terms"
msgstr ""

msgid "Add term IDs, separated by comma. This option is applied for all taxonomies."
msgstr ""

msgid "Enable the HTML sitemap."
msgstr ""

msgid "Display Format"
msgstr ""

msgid "Choose how you want to display the HTML sitemap."
msgstr ""

msgid "Shortcode"
msgstr ""

msgid "Page"
msgstr ""

msgid "Use this shortcode to display the HTML sitemap."
msgstr ""

msgid "Selected page: "
msgstr ""

#. translators: link to the selected page
msgid "Selected page: <a href=\"%s\" target=\"_blank\" class=\"rank-math-selected-page\">%s</a>"
msgstr ""

msgid "Select the page to display the HTML sitemap. Once the settings are saved, the sitemap will be displayed below the content of the selected page."
msgstr ""

msgid "Select a page"
msgstr ""

msgid "Sort By"
msgstr ""

msgid "Choose how you want to sort the items in the HTML sitemap."
msgstr ""

msgid "Published Date"
msgstr ""

msgid "Modified Date"
msgstr ""

msgid "Alphabetical"
msgstr ""

msgid "Post ID"
msgstr ""

msgid "Show Dates"
msgstr ""

msgid "Show published dates for each post & page."
msgstr ""

msgid "Item Titles"
msgstr ""

msgid "Show the post/term titles, or the SEO titles in the HTML sitemap."
msgstr ""

msgid "SEO Titles"
msgstr ""

#. translators: The settings page link
msgid "To configure meta tags for your media attachment pages, you need to first %s to parent."
msgstr ""

#. translators: The settings page link
msgid "disable redirect attachments"
msgstr ""

msgid "Include this post type in the XML sitemap."
msgstr ""

msgid "Include this post type in the HTML sitemap if it's enabled."
msgstr ""

msgid "Image Custom Fields"
msgstr ""

msgid "Insert custom field (post meta) names which contain image URLs to include them in the sitemaps. Add one per line."
msgstr ""

msgid "Include archive pages for terms of this taxonomy in the XML sitemap."
msgstr ""

msgid "Include archive pages for terms of this taxonomy in the HTML sitemap."
msgstr ""

msgid "Include Empty Terms"
msgstr ""

msgid "Include archive pages of terms that have no posts associated."
msgstr ""

msgid "KML File"
msgstr ""

#. translators: link to rankmath.com
msgid "This KML File is generated by <a href=\"%s\" target=\"_blank\">Rank Math WordPress SEO Plugin</a>. It is used to provide location information to Google."
msgstr ""

#. translators: link to rankmath.com
msgid "Learn more about <a href=\"%s\" target=\"_blank\">KML File</a>."
msgstr ""

#. translators: xsl value count
msgid "<a href=\"%s\">&#8592; Sitemap Index</a>"
msgstr ""

msgid "Phone number"
msgstr ""

msgid "Latitude"
msgstr ""

msgid "Longitude"
msgstr ""

msgid "XML Sitemap"
msgstr ""

#. translators: link to rankmath.com
msgid "This XML Sitemap is generated by <a href=\"%s\" target=\"_blank\">Rank Math WordPress SEO Plugin</a>. It is what search engines like Google use to crawl and re-crawl posts/pages/products/images/archives on your website."
msgstr ""

#. translators: link to rankmath.com
msgid "Learn more about <a href=\"%s\" target=\"_blank\">XML Sitemaps</a>."
msgstr ""

#. translators: xsl value count
msgid "This XML Sitemap Index file contains <strong>%s</strong> sitemaps."
msgstr ""

msgid "Last Modified"
msgstr ""

#. translators: xsl value count
msgid "This XML Sitemap contains <strong>%s</strong> URLs."
msgstr ""

msgid "Last Mod."
msgstr ""

msgid "Unable to create backup this time."
msgstr ""

msgid "Backup created successfully."
msgstr ""

msgid "Backup does not exist."
msgstr ""

msgid "Backup restored successfully."
msgstr ""

msgid "No backup key found to delete."
msgstr ""

msgid "Backup successfully deleted."
msgstr ""

msgid "The error log cannot be retrieved."
msgstr ""

msgid "The error log cannot be retrieved: Error log file is too large."
msgstr ""

msgid "Settings could not be imported:"
msgstr ""

msgid "Settings could not be imported: Upload failed."
msgstr ""

msgid "Uploaded file could not be read."
msgstr ""

msgid "Settings successfully imported. Your old configuration has been saved as a backup."
msgstr ""

msgid "No settings found to be imported."
msgstr ""

msgid "Sorry, you are not authorized to Import/Export the settings."
msgstr ""

msgid "Invalid action selected."
msgstr ""

msgid "Status & Tools"
msgstr ""

msgid "Version"
msgstr ""

msgid "Database version"
msgstr ""

msgid "Plugin subscription plan"
msgstr ""

msgid "Active modules"
msgstr ""

msgid "(none)"
msgstr ""

msgid "Google Refresh token"
msgstr ""

msgid "No token"
msgstr ""

msgid "Token exists"
msgstr ""

msgid "Google Permission"
msgstr ""

msgid "Database Table: 404 Log"
msgstr ""

msgid "Database Table: Redirection"
msgstr ""

msgid "Database Table: Redirection Cache"
msgstr ""

msgid "Database Table: Internal Link"
msgstr ""

msgid "Database Table: Internal Link Meta"
msgstr ""

msgid "Database Table: Google Search Console"
msgstr ""

msgid "Database Table: Flat Posts"
msgstr ""

msgid "Database Table: Google Analytics"
msgstr ""

msgid "Database Table: Google AdSense"
msgstr ""

msgid "Database Table: Keyword Manager"
msgstr ""

msgid "Database Table: Inspections"
msgstr ""

msgid "Not found"
msgstr ""

msgid "This update will install a beta version of Rank Math."
msgstr ""

msgid "Rollback Plugin"
msgstr ""

msgid "Plugin rollback successful."
msgstr ""

msgid "Installing the rollback version&#8230;"
msgstr ""

#. translators: Link to kb article
msgid "Choose how you want Rank Math to handle your WooCommerce SEO. %s."
msgstr ""

msgid "Product's price."
msgstr ""

msgid "Product's price of the current product"
msgstr ""

msgid "Product's SKU."
msgstr ""

msgid "Product's SKU of the current product"
msgstr ""

msgid "Product's short description."
msgstr ""

msgid "Product's short description of the current product"
msgstr ""

msgid "Product's brand."
msgstr ""

msgid "Product's brand of the current product"
msgstr ""

msgid "Remove base"
msgstr ""

#. translators: 1. Example text 2. Example text
msgid "Remove prefix like %1$s from product URL chosen at %2$s"
msgstr ""

msgid "WordPress Dashboard > Settings > Permalinks > Product permalinks Example: default: /product/accessories/action-figures/acme/ - becomes: /accessories/action-figures/acme/"
msgstr ""

msgid "Remove category base"
msgstr ""

msgid "Remove prefix from category URL."
msgstr ""

msgid "default: /product-category/accessories/action-figures/ - changed: /accessories/action-figures/"
msgstr ""

msgid " Remove parent slugs"
msgstr ""

msgid "Remove parent slugs from category URL."
msgstr ""

msgid "default: /product-category/accessories/action-figures/ - changed: /product-category/action-figures/"
msgstr ""

msgid "Remove Generator Tag"
msgstr ""

msgid "Remove WooCommerce generator tag from the source code."
msgstr ""

msgid "Remove Schema Markup on Shop Archives"
msgstr ""

msgid "Remove Schema Markup Data from WooCommerce Shop archive pages."
msgstr ""

msgid "Brand"
msgstr ""

msgid "Select Product Brand Taxonomy to use in Schema.org & OpenGraph markup."
msgstr ""

msgid "In stock"
msgstr ""

msgid "Written by"
msgstr ""

msgid "Time to read"
msgstr ""

msgid "Less than a minute"
msgstr ""

msgid "Items"
msgstr ""

msgid "Posts"
msgstr ""

msgid "ID of the current post/page"
msgstr ""

msgid "Focus Keyword of the current post"
msgstr ""

msgid "Focus Keywords of the current post"
msgstr ""

msgid "Custom Field (advanced)"
msgstr ""

msgid "Custom field value."
msgstr ""

msgid "Custom field value"
msgstr ""

msgid "Page number with context (i.e. page 2 of 4). Only displayed on page 2 and above."
msgstr ""

msgid "Page Number"
msgstr ""

msgid "Current page number"
msgstr ""

msgid "Max Pages"
msgstr ""

msgid "Max pages number"
msgstr ""

msgid "Post Type Name Singular"
msgstr ""

msgid "Name of current post type (singular)"
msgstr ""

msgid "Post Type Name Plural"
msgstr ""

msgid "Name of current post type (plural)"
msgstr ""

msgid "Products"
msgstr ""

#. translators: %1$d: current page number, %2$d: max pages.
msgid "Page %1$d of %2$d"
msgstr ""

msgid "Author ID"
msgstr ""

msgid "Author's user ID of the current post, page or author archive."
msgstr ""

msgid "Post Author"
msgstr ""

msgid "Display author's nicename of the current post, page or author archive."
msgstr ""

msgid "Author Description"
msgstr ""

msgid "Author's biographical info of the current post, page or author archive."
msgstr ""

msgid "Example Post title"
msgstr ""

msgid "Variable names can only contain alphanumeric characters, underscores and dashes."
msgstr ""

msgid "The variable has already been registered."
msgstr ""

msgid "Separator Character"
msgstr ""

msgid "Separator character, as set in the Title Settings"
msgstr ""

msgid "Search Query"
msgstr ""

msgid "Search query (only available on search results page)"
msgstr ""

msgid "example search"
msgstr ""

msgid "Counter"
msgstr ""

msgid "Starts at 1 and increments by 1."
msgstr ""

msgid "File Name"
msgstr ""

msgid "File Name of the attachment"
msgstr ""

msgid "Site Title"
msgstr ""

msgid "Title of the site"
msgstr ""

msgid "Site Description"
msgstr ""

msgid "Description of the site"
msgstr ""

msgid "Current Date"
msgstr ""

msgid "Current server date"
msgstr ""

msgid "Current Day"
msgstr ""

msgid "Current server day"
msgstr ""

msgid "Current Month"
msgstr ""

msgid "Current server month"
msgstr ""

msgid "Current Year"
msgstr ""

msgid "Current server year"
msgstr ""

msgid "Current Time"
msgstr ""

msgid "Current server time"
msgstr ""

msgid "Current Time (advanced)"
msgstr ""

msgid "Current server time with custom formatting pattern."
msgstr ""

msgid "Organization Name"
msgstr ""

msgid "The Organization Name added in Local SEO Settings."
msgstr ""

msgid "Organization Logo added in Local SEO Settings."
msgstr ""

msgid "Organization URL added in Local SEO Settings."
msgstr ""

#. translators: Taxonomy name.
msgid "%s Title"
msgstr ""

#. translators: Taxonomy name.
msgid "%s Description"
msgstr ""

msgid "Custom Term title."
msgstr ""

msgid "Custom Term description."
msgstr ""

msgid "Post Title"
msgstr ""

msgid "Title of the current post/page"
msgstr ""

msgid "Post Title of parent page"
msgstr ""

msgid "Title of the parent page of the current post/page"
msgstr ""

msgid "Post Excerpt"
msgstr ""

msgid "Excerpt of the current post (or auto-generated if it does not exist)"
msgstr ""

msgid "Excerpt of the current post (without auto-generation)"
msgstr ""

msgid "Post Excerpt Only"
msgstr ""

msgid "Custom or Generated SEO Title of the current post/page"
msgstr ""

msgid "SEO Description"
msgstr ""

msgid "Custom or Generated SEO Description of the current post/page"
msgstr ""

msgid "Post URL"
msgstr ""

msgid "URL of the current post/page"
msgstr ""

msgid "Post Thumbnail"
msgstr ""

msgid "Current Post Thumbnail"
msgstr ""

msgid "Publication date of the current post/page <strong>OR</strong> specified date on date archives"
msgstr ""

msgid "Date Modified"
msgstr ""

msgid "Last modification date of the current post/page"
msgstr ""

msgid "Date Published (advanced)"
msgstr ""

msgid "Publish date with custom formatting pattern."
msgstr ""

msgid "Date Modified (advanced)"
msgstr ""

msgid "Modified date with custom formatting pattern."
msgstr ""

msgid "Post Category"
msgstr ""

msgid "First category (alphabetically) associated to the current post <strong>OR</strong> current category on category archives"
msgstr ""

msgid "Example Category"
msgstr ""

msgid "Post Categories"
msgstr ""

msgid "Comma-separated list of categories associated to the current post"
msgstr ""

msgid "Example Category 1, Example Category 2"
msgstr ""

msgid "Categories (advanced)"
msgstr ""

msgid "Output list of categories associated to the current post, with customization options."
msgstr ""

msgid "Primary Terms"
msgstr ""

msgid "Output list of terms from the primary taxonomy associated to the current post."
msgstr ""

msgid "Post Tag"
msgstr ""

msgid "First tag (alphabetically) associated to the current post <strong>OR</strong> current tag on tag archives"
msgstr ""

msgid "Example Tag"
msgstr ""

msgid "Post Tags"
msgstr ""

msgid "Comma-separated list of tags associated to the current post"
msgstr ""

msgid "Example Tag 1, Example Tag 2"
msgstr ""

msgid "Tags (advanced)"
msgstr ""

msgid "Output list of tags associated to the current post, with customization options."
msgstr ""

msgid "Example Tag 1 | Example Tag 2"
msgstr ""

msgid "Current Term"
msgstr ""

msgid "Current term name"
msgstr ""

msgid "Example Term"
msgstr ""

msgid "Term Description"
msgstr ""

msgid "Current term description"
msgstr ""

msgid "Example Term Description"
msgstr ""

msgid "Custom Term (advanced)"
msgstr ""

msgid "Custom term value."
msgstr ""

msgid "Custom term value"
msgstr ""

msgid "Custom Term description"
msgstr ""

msgid "The $id variable is required."
msgstr ""

msgid "Example"
msgstr ""

#. translators: variable name
msgid "The $%1$s is required for variable %2$s."
msgstr ""

msgid "The redirection you are trying to create may cause an infinite loop. Please check the source and destination URLs. The redirection has been deactivated."
msgstr ""

msgid "The redirection you are trying to update may cause an infinite loop. Please check the source and destination URLs."
msgstr ""

msgid "Please add at least one valid source URL."
msgstr ""

msgid "Invalid type."
msgstr ""

msgid "Module slug"
msgstr ""

msgid "Invalid module"
msgstr ""

msgid "Module state either on or off"
msgstr ""

msgid "Post scores"
msgstr ""

msgid "Action to perform"
msgstr ""

msgid "Mode to set"
msgstr ""

msgid "Site disconnected successfully."
msgstr ""

msgid "The current theme does not have \"post-thumbnails\" support."
msgstr ""

msgid "Sorry, you don't have the required permissions to access this page."
msgstr ""

msgid "The post could not be found."
msgstr ""

msgid "Site token"
msgstr ""

msgid "URL to get HTML tags for."
msgstr ""

msgid "Selected posts to update the data for."
msgstr ""

msgid "Sorry, you are not allowed to create/update redirection."
msgstr ""

msgid "Sorry, you are not allowed to create/update schema."
msgstr ""

msgid "Sorry, you are not allowed to edit homepage SEO settings."
msgstr ""

msgid "Sorry, you are not allowed to edit this post type."
msgstr ""

msgid "Sorry, you are not allowed to edit this post."
msgstr ""

msgid "Sorry, you are not allowed to edit this term."
msgstr ""

msgid "Invalid term ID."
msgstr ""

msgid "Sorry, field is empty which is not allowed."
msgstr ""

msgid "Sorry, the field contains invalid characters."
msgstr ""

msgid "Current Step"
msgstr ""

msgid "Current Step Data"
msgstr ""

msgid "Enable Tracking"
msgstr ""

msgid "Object unique id"
msgstr ""

msgid "Object Type i.e. post, term, user"
msgstr ""

msgid "Whether the object has a redirect or not"
msgstr ""

msgid "Redirection ID"
msgstr ""

msgid "Redirection URL"
msgstr ""

msgid "Meta to add or update data."
msgstr ""

msgid "schemas to add or update data."
msgstr ""

msgid "Enable breadcrumbs function"
msgstr ""

msgid "Turning off breadcrumbs will hide breadcrumbs inserted in template files too."
msgstr ""

#. Translators: Code to add support for Rank Math Breadcrumbs.
msgid "This option cannot be changed since your theme has added the support for Rank Math Breadcrumbs using: %s"
msgstr ""

msgid "Separator character or string that appears between breadcrumb items."
msgstr ""

msgid "Show Homepage Link"
msgstr ""

msgid "Display homepage breadcrumb in trail."
msgstr ""

msgid "Homepage label"
msgstr ""

msgid "Label used for homepage link (first item) in breadcrumbs."
msgstr ""

msgid "Homepage Link"
msgstr ""

msgid "Link to use for homepage (first item) in breadcrumbs."
msgstr ""

msgid "Prefix Breadcrumb"
msgstr ""

msgid "Prefix for the breadcrumb path."
msgstr ""

msgid "Archive Format"
msgstr ""

msgid "Format the label used for archive pages."
msgstr ""

msgid "Search Results Format"
msgstr ""

msgid "Format the label used for search results pages."
msgstr ""

msgid "404 label"
msgstr ""

msgid "Label used for 404 error item in breadcrumbs."
msgstr ""

msgid "Hide Post Title"
msgstr ""

msgid "Hide Post title from Breadcrumb."
msgstr ""

msgid "Show Category(s)"
msgstr ""

msgid "If category is a child category, show all ancestor categories."
msgstr ""

msgid "Hide Taxonomy Name"
msgstr ""

msgid "Hide Taxonomy Name from Breadcrumb."
msgstr ""

msgid "Show Blog Page"
msgstr ""

msgid "Show Blog Page in Breadcrumb."
msgstr ""

msgid ".htaccess file not found."
msgstr ""

msgid ".htaccess file is not writable."
msgstr ""

msgid "I understand the risks and I want to edit the file"
msgstr ""

msgid "Be careful when editing the htaccess file, it is easy to make mistakes and break your site. If that happens, you can restore the file to its state <strong>before the last edit</strong> by replacing the htaccess file with the backup copy created by Rank Math in the same directory (<em>.htaccess_back_xxxxxx</em>) using an FTP client."
msgstr ""

msgid "Strip Category Base"
msgstr ""

#. translators: Link to kb article
msgid "Remove /category/ from category archive URLs. %s <br>E.g. <code>example.com/category/my-category/</code> becomes <code>example.com/my-category</code>"
msgstr ""

#. translators: Link to kb article
msgid "Why do this?"
msgstr ""

#. translators: Redirection page url
msgid "Redirection Manager"
msgstr ""

msgid "Redirections Manager"
msgstr ""

msgid "Please enable Redirections module."
msgstr ""

msgid "Redirect Attachments"
msgstr ""

#. translators: Link to kb article
msgid "Redirect all attachment page URLs to the post they appear in. For more advanced redirection control, use the built-in %s."
msgstr ""

msgid "Redirect Orphan Attachments"
msgstr ""

msgid "Redirect attachments without a parent post to this URL. Leave empty for no redirection."
msgstr ""

msgid "Nofollow External Links"
msgstr ""

msgid "Automatically add <code>rel=\"nofollow\"</code> attribute for external links appearing in your posts, pages, and other post types. The attribute is dynamically applied when the content is displayed, and the stored content is not changed."
msgstr ""

msgid "Nofollow Image File Links"
msgstr ""

msgid "Automatically add <code>rel=\"nofollow\"</code> attribute for links pointing to external image files. The attribute is dynamically applied when the content is displayed, and the stored content is not changed."
msgstr ""

msgid "Nofollow Domains"
msgstr ""

msgid "Only add <code>nofollow</code> attribute for the link if target domain is in this list. Add one per line. Leave empty to apply nofollow for <strong>ALL</strong> external domains."
msgstr ""

msgid "Nofollow Exclude Domains"
msgstr ""

msgid "The <code>nofollow</code> attribute <strong>will not be added</strong> for the link if target domain is in this list. Add one per line."
msgstr ""

msgid "Open External Links in New Tab/Window"
msgstr ""

msgid "Automatically add <code>target=\"_blank\"</code> attribute for external links appearing in your posts, pages, and other post types to make them open in a new browser tab or window. The attribute is dynamically applied when the content is displayed, and the stored content is not changed."
msgstr ""

msgid "Headless CMS Support"
msgstr ""

#. Translators: placeholder is a link to "Read more".
msgid "Enable this option to register a REST API endpoint that returns the HTML meta tags for a given URL. %s"
msgstr ""

#. Translators: placeholder is a link to "Read more".
msgid "Read more"
msgstr ""

msgid "Show SEO Score to Visitors"
msgstr ""

msgid "Proudly display the calculated SEO Score as a badge on the front end. It can be disabled for specific posts in the post editor."
msgstr ""

msgid "SEO Score Post Types"
msgstr ""

msgid "SEO Score Template"
msgstr ""

msgid "Change the styling for the front end SEO score badge."
msgstr ""

msgid "Circle"
msgstr ""

msgid "Square"
msgstr ""

msgid "SEO Score Position"
msgstr ""

#. translators: 1.SEO Score Shortcode 2. SEO Score function
msgid "Display the badges automatically, or insert the %1$s shortcode in your posts and the %2$s template tag in your theme template files."
msgstr ""

msgid "Below Content"
msgstr ""

msgid "Above Content"
msgstr ""

msgid "Above & Below Content"
msgstr ""

msgid "Custom (use shortcode)"
msgstr ""

msgid "Support Us with a Link"
msgstr ""

#. Translators: %s is the word "nofollow" code tag and second one for the filter link
msgid "If you are showing the SEO scores on the front end, this option will insert a %1$s backlink to RankMath.com to show your support. You can change the link & the text by using this %2$s."
msgstr ""

#. Translators: %s is the word "nofollow" code tag and second one for the filter link
msgid "filter"
msgstr ""

msgid "Usage Tracking"
msgstr ""

msgid "Share anonymous usage data to help us improve Rank Math. No personal info is collected."
msgstr ""

msgid "Learn more about what data is and isn't tracked."
msgstr ""

msgid "RSS Before Content"
msgstr ""

msgid "Add content before each post in your site feeds."
msgstr ""

msgid "RSS After Content"
msgstr ""

msgid "Add content after each post in your site feeds."
msgstr ""

msgid "Available variables"
msgstr ""

msgid "Variable"
msgstr ""

msgid "A link to the archive for the post author, with the authors name as anchor text."
msgstr ""

msgid "A link to the post, with the title as anchor text."
msgstr ""

msgid "A link to your site, with your site's name as anchor text."
msgstr ""

msgid "A link to your site, with your site's name and description as anchor text."
msgstr ""

msgid "Featured image of the article."
msgstr ""

msgid "Google Search Console"
msgstr ""

#. translators: Google Search Console Link
msgid "Enter your Google Search Console verification HTML code or ID. Learn how to get it: %s"
msgstr ""

#. translators: Google Search Console Link
msgid "Search Console Verification Page"
msgstr ""

msgid "Bing Webmaster Tools"
msgstr ""

#. translators: Bing webmaster link
msgid "Enter your Bing Webmaster Tools verification HTML code or ID. Get it here: %s"
msgstr ""

#. translators: Bing webmaster link
msgid "Bing Webmaster Verification Page"
msgstr ""

#. translators: Baidu webmaster link
msgid "Baidu Webmaster Tools"
msgstr ""

#. translators: Baidu webmaster link
msgid "Enter your Baidu Webmaster Tools verification HTML code or ID. Learn how to get it: %s"
msgstr ""

msgid "Yandex Verification ID"
msgstr ""

#. translators: Yandex webmaster link
msgid "Enter your Yandex verification HTML code or ID. Learn how to get it: %s"
msgstr ""

#. translators: Yandex webmaster link
msgid "Yandex.Webmaster Page"
msgstr ""

msgid "Pinterest Verification ID"
msgstr ""

#. translators: Pinterest webmaster link
msgid "Enter your Pinterest verification HTML code or ID. Learn how to get it: %s"
msgstr ""

#. translators: Pinterest webmaster link
msgid "Pinterest Account"
msgstr ""

msgid "Norton Safe Web Verification ID"
msgstr ""

#. translators: Norton webmaster link
msgid "Enter your Norton Safe Web verification HTML code or ID. Learn how to get it: %s"
msgstr ""

#. translators: Norton webmaster link
msgid "Norton Ownership Verification Page"
msgstr ""

msgid "Custom Webmaster Tags"
msgstr ""

#. translators: %s: Allowed tags
msgid "Enter your custom webmaster tags. Only %s tags are allowed."
msgstr ""

msgid "Author Archives"
msgstr ""

msgid "Enables or disables Author Archives. If disabled, the Author Archives are redirected to your homepage. To avoid duplicate content issues, noindex author archives if you keep them enabled."
msgstr ""

msgid "Disabled"
msgstr ""

msgid "Enabled"
msgstr ""

msgid "Author Base"
msgstr ""

msgid "Change the <code>/author/</code> part in author archive URLs."
msgstr ""

#. translators: post type name
msgid "Author Robots Meta"
msgstr ""

msgid "Select custom robots meta for author page, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab."
msgstr ""

msgid "Custom values for robots meta tag on author page."
msgstr ""

msgid "Author Advanced Robots"
msgstr ""

msgid "Author Archive Title"
msgstr ""

msgid "Title tag on author archives. SEO options for specific authors can be set with the meta box available in the user profiles."
msgstr ""

msgid "Author Archive Description"
msgstr ""

msgid "Author archive meta description. SEO options for specific author archives can be set with the meta box in the user profiles."
msgstr ""

msgid "Slack Enhanced Sharing"
msgstr ""

msgid "When the option is enabled and an author archive is shared on Slack, additional information will be shown (name & total number of posts)."
msgstr ""

msgid "Add SEO Controls"
msgstr ""

msgid "Add SEO Controls for user profile pages. Access to the Meta Box can be fine tuned with code, using a special filter hook."
msgstr ""

msgid "Robots Meta"
msgstr ""

msgid "Default values for robots meta tag. These can be changed for individual posts, taxonomies, etc."
msgstr ""

msgid "Advanced Robots Meta"
msgstr ""

msgid "Noindex Empty Category and Tag Archives"
msgstr ""

msgid "Setting empty archives to <code>noindex</code> is useful for avoiding indexation of thin content pages and dilution of page rank. As soon as a post is added, the page is updated to <code>index</code>."
msgstr ""

msgid "You can use the separator character in titles by inserting <code>%separator%</code> or <code>%sep%</code> in the title fields."
msgstr ""

msgid "Rewrite Titles"
msgstr ""

msgid "Your current theme doesn't support title-tag. Enable this option to rewrite page, post, category, search and archive page titles."
msgstr ""

msgid "Capitalize Titles"
msgstr ""

msgid "Automatically capitalize the first character of each word in the titles."
msgstr ""

msgid "OpenGraph Thumbnail"
msgstr ""

msgid "When a featured image or an OpenGraph Image is not set for individual posts/pages/CPTs, this image will be used as a fallback thumbnail when your post is shared on Facebook. The recommended image size is 1200 x 630 pixels."
msgstr ""

msgid "Twitter Card Type"
msgstr ""

msgid "Card type selected when creating a new post. This will also be applied for posts without a card type selected."
msgstr ""

msgid "Summary Card with Large Image"
msgstr ""

msgid "Summary Card"
msgstr ""

#. translators: something
msgid "Static page is set as the front page (WP Dashboard > Settings > Reading). To add SEO title, description, and meta for the homepage, please click here: %s"
msgstr ""

msgid "Homepage Title"
msgstr ""

msgid "Homepage title tag."
msgstr ""

msgid "Homepage Meta Description"
msgstr ""

msgid "Homepage meta description."
msgstr ""

msgid "Homepage Robots Meta"
msgstr ""

msgid "Select custom robots meta for homepage, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab."
msgstr ""

msgid "Custom values for robots meta tag on homepage."
msgstr ""

msgid "Homepage Advanced Robots"
msgstr ""

msgid "Homepage Title for Facebook"
msgstr ""

msgid "Title of your site when shared on Facebook, Twitter and other social networks."
msgstr ""

msgid "Homepage Description for Facebook"
msgstr ""

msgid "Description of your site when shared on Facebook, Twitter and other social networks."
msgstr ""

msgid "Homepage Thumbnail for Facebook"
msgstr ""

msgid "Image displayed when your homepage is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices."
msgstr ""

msgid "URL of the item."
msgstr ""

msgid "Date Archives"
msgstr ""

#. Translators: placeholder is an example URL.
msgid "Enable or disable the date archives (e.g: %s). If this option is disabled, the date archives will be redirected to the homepage."
msgstr ""

msgid "Date Archive Title"
msgstr ""

msgid "Title tag on day/month/year based archives."
msgstr ""

msgid "Date Archive Description"
msgstr ""

msgid "Date archive description."
msgstr ""

#. translators: post type name
msgid "Date Robots Meta"
msgstr ""

msgid "Custom values for robots meta tag on date page."
msgstr ""

msgid "Date Advanced Robots"
msgstr ""

msgid "404 Title"
msgstr ""

msgid "Title tag on 404 Not Found error page."
msgstr ""

msgid "Search Results Title"
msgstr ""

msgid "Title tag on search results page."
msgstr ""

msgid "Noindex Search Results"
msgstr ""

msgid "Prevent search results pages from getting indexed by search engines. Search results could be considered to be thin content and prone to duplicate content issues."
msgstr ""

msgid "Noindex Subpages"
msgstr ""

msgid "Prevent all paginated pages from getting indexed by search engines."
msgstr ""

msgid "Noindex Paginated Single Pages"
msgstr ""

msgid "Prevent paginated pages of single pages and posts to show up in the search results. This also applies for the Blog page."
msgstr ""

msgid "Noindex Password Protected Pages"
msgstr ""

msgid "Prevent password protected pages & posts from getting indexed by search engines."
msgstr ""

#. Translators: Post type name.
msgid "When the option is enabled and a %s is shared on Slack, additional information will be shown (estimated time to read and author)."
msgstr ""

msgid "When the option is enabled and a page is shared on Slack, additional information will be shown (estimated time to read)."
msgstr ""

msgid "When the option is enabled and a product is shared on Slack, additional information will be shown (price & availability)."
msgstr ""

msgid "When the option is enabled and a product is shared on Slack, additional information will be shown (price)."
msgstr ""

#. translators: post type name
msgid "Single %s Title"
msgstr ""

#. translators: post type name
msgid "Default title tag for single %s pages. This can be changed on a per-post basis on the post editor screen."
msgstr ""

#. translators: post type name
msgid "Single %s Description"
msgstr ""

#. translators: post type name
msgid "Default description for single %s pages. This can be changed on a per-post basis on the post editor screen."
msgstr ""

#. translators: post type name
msgid "%s Archive Title"
msgstr ""

#. translators: post type name
msgid "Title for %s archive pages."
msgstr ""

#. translators: post type name
msgid "%s Archive Description"
msgstr ""

#. translators: post type name
msgid "Description for %s archive pages."
msgstr ""

msgid "Schema Type"
msgstr ""

#. translators: link to title setting screen
msgid "Default rich snippet selected when creating a new product."
msgstr ""

#. Translators: %s is "Article" inside a <code> tag.
msgid "Default rich snippet selected when creating a new post of this type. If %s is selected, it will be applied for all existing posts with no Schema selected."
msgstr ""

msgctxt "Schema type name in a field description"
msgid "Article"
msgstr ""

msgid "Headline"
msgstr ""

#. translators: Google article snippet doc link
msgid "Google does not allow Person as the Publisher for articles. Organization will be used instead. You can read more about this <a href=\"%s\" target=\"_blank\">here</a>."
msgstr ""

msgid "Article Type"
msgstr ""

msgid "Blog Post"
msgstr ""

msgid "News Article"
msgstr ""

#. translators: post type name
msgid "%s Robots Meta"
msgstr ""

#. translators: post type name
msgid "Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for single %s pages. Otherwise the default meta will be used, as set in the Global Meta tab."
msgstr ""

#. translators: post type name
msgid "Custom values for robots meta tag on %s."
msgstr ""

#. translators: post type name
msgid "%s Advanced Robots Meta"
msgstr ""

msgid "Enable Link Suggestions meta box for this post type, along with the Pillar Content feature."
msgstr ""

msgid "Link Suggestion Titles"
msgstr ""

msgid "Use the Focus Keyword as the default text for the links instead of the post titles."
msgstr ""

msgid "Titles"
msgstr ""

msgid "Primary Taxonomy"
msgstr ""

#. translators: post type name
msgid "Choose which taxonomy you want to use with the Primary Term feature. This will also be the taxonomy shown in the Breadcrumbs when a single %1$s is being viewed."
msgstr ""

msgid "Thumbnail for Facebook"
msgstr ""

msgid "Image displayed when your page is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices."
msgstr ""

msgid "Bulk Editing"
msgstr ""

msgid "Add bulk editing columns to the post listing screen."
msgstr ""

msgid "Read Only"
msgstr ""

msgid "Add SEO controls for the editor screen to customize SEO options for posts in this post type."
msgstr ""

msgid "Custom Fields"
msgstr ""

msgid "List of custom fields name to include in the Page analysis. Add one per line."
msgstr ""

msgid "Facebook Page URL"
msgstr ""

msgid "Enter your complete Facebook page URL here. eg:"
msgstr ""

msgid "Facebook Authorship"
msgstr ""

msgid "Insert personal Facebook profile URL to show Facebook Authorship when your articles are being shared on Facebook. eg:"
msgstr ""

msgid "Facebook Admin"
msgstr ""

#. translators: numeric user ID link
msgid "Enter %s. Use a comma to separate multiple IDs. Alternatively, you can enter an app ID below."
msgstr ""

msgid "Facebook App"
msgstr ""

#. translators: numeric app ID link
msgid "Enter %s. Alternatively, you can enter a user ID above."
msgstr ""

msgid "Facebook Secret"
msgstr ""

#. translators: Learn more link
msgid "Enter alphanumeric secret ID. %s."
msgstr ""

msgid "Twitter Username"
msgstr ""

msgid "Enter the Twitter username of the author to add <code>twitter:creator</code> tag to posts. eg: <code>RankMathSEO</code>"
msgstr ""

msgid "Additional Profiles"
msgstr ""

#. translators: taxonomy name
msgid "%s Archive Titles"
msgstr ""

#. translators: taxonomy name
msgid "Title tag for %s archives"
msgstr ""

#. translators: taxonomy name
msgid "%s Archive Descriptions"
msgstr ""

#. translators: taxonomy name
msgid "Description for %s archives"
msgstr ""

#. translators: taxonomy name
msgid "%s Archives Robots Meta"
msgstr ""

#. translators: taxonomy name
msgid "Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for %s archive pages. Otherwise the default meta will be used, as set in the Global Meta tab."
msgstr ""

#. translators: taxonomy name
msgid "Custom values for robots meta tag on %s archives."
msgstr ""

#. translators: taxonomy name
msgid "%s Archives Advanced Robots Meta"
msgstr ""

msgid "When the option is enabled and a term from this taxonomy is shared on Slack, additional information will be shown (the total number of items with this term)."
msgstr ""

msgid "Add the SEO Controls for the term editor screen to customize SEO options for individual terms in this taxonomy."
msgstr ""

msgid "Remove Snippet Data"
msgstr ""

#. translators: taxonomy name
msgid "Remove schema data from %s."
msgstr ""

msgid "Error: Nonce verification failed"
msgstr ""

#. Translators: placeholders are opening and closing tags for connect analytics setting and using ga4 property doc.
msgid "Universal Analytics (UA) is no longer supported. Please connect your Google Analytics GA4 account by navigating to %1$sGeneral Settings â†’ Analytics%2$s. For more details, refer to this guide: %3$sHow to Use Google Analytics 4 (GA4) Property with Rank Math%4$s."
msgstr ""

#. translators: WordPress Version
msgid "You are using the outdated WordPress, please update it to version %s or higher."
msgstr ""

#. translators: PHP Version
msgid "Rank Math requires PHP version %s or above. Please update PHP to run this plugin."
msgstr ""

#. translators: 1. Bold text 2. Bold text
msgid "%1$s A filter to remove the Rank Math data from the database is present. Deactivating & Deleting this plugin will remove everything related to the Rank Math plugin. %2$s"
msgstr ""

msgid "CAUTION:"
msgstr ""

msgid "This action is IRREVERSIBLE."
msgstr ""

msgid "Getting Started"
msgstr ""

msgid "Documentation"
msgstr ""

msgid "Add a few images and/or videos to make your content appealing."
msgstr ""

msgid "Content with images and/or video feels more inviting to users. It also helps supplement your textual content."
msgstr ""

msgid "Your content contains images and/or video(s)."
msgstr ""

msgid "You are not using rich media like images or videos."
msgstr ""

msgid "Add short and concise paragraphs for better readability and UX."
msgstr ""

msgid "Short paragraphs are easier to read and more pleasing to the eye. Long paragraphs scare the visitor, and they might result to SERPs looking for better readable content."
msgstr ""

msgid "You are using short paragraphs."
msgstr ""

msgid "At least one paragraph is long. Consider using short paragraphs."
msgstr ""

msgid "Use Table of Content to break-down your text."
msgstr ""

msgid "Table of Contents help break down content into smaller, digestible chunks. It makes reading easier which in turn results in better rankings."
msgstr ""

msgid "You seem to be using a %1$s to break-down your text."
msgstr ""

msgid "You don't seem to be using a %1$s."
msgstr ""

msgid "Keyword Density is 0. Aim for around 1% Keyword Density."
msgstr ""

msgid "There is no ideal keyword density percentage, but it should not be too high. The most important thing is to keep the copy natural."
msgstr ""

msgid "Keyword Density is %1$s which is low, the Focus Keyword and combination appears %2$s times."
msgstr ""

msgid "Keyword Density is %1$s which is high, the Focus Keyword and combination appears %2$s times."
msgstr ""

msgid "Keyword Density is %1$s, the Focus Keyword and combination appears %2$s times."
msgstr ""

msgid "Use Focus Keyword at the beginning of your content."
msgstr ""

msgid "The first 10% of the content should contain the Focus Keyword preferably at the beginning."
msgstr ""

msgid "Focus Keyword appears in the first 10% of the content."
msgstr ""

msgid "Focus Keyword doesn't appear at the beginning of your content."
msgstr ""

msgid "Use Focus Keyword in the content."
msgstr ""

msgid "It is recommended to make the focus keyword appear in the post content too."
msgstr ""

msgid "Focus Keyword found in the content."
msgstr ""

msgid "Focus Keyword doesn't appear in the content."
msgstr ""

msgid "Add an image with your Focus Keyword as alt text."
msgstr ""

msgid "It is recommended to add the focus keyword in the alt attribute of one or more images."
msgstr ""

msgid "We detected a gallery in your content & assuming that you added Focus Keyword in alt in at least one of the gallery images."
msgstr ""

msgid "Focus Keyword found in image alt attribute(s)."
msgstr ""

msgid "Focus Keyword not found in image alt attribute(s)."
msgstr ""

msgid "Add Focus Keyword to your SEO Meta Description."
msgstr ""

msgid "Make sure the focus keyword appears in the SEO description too."
msgstr ""

msgid "Focus Keyword used inside SEO Meta Description."
msgstr ""

msgid "Focus Keyword not found in your SEO Meta Description."
msgstr ""

msgid "Use Focus Keyword in the URL."
msgstr ""

msgid "Include the focus keyword in the slug (permalink) of this post."
msgstr ""

msgid "Focus Keyword used in the URL."
msgstr ""

msgid "Focus Keyword not found in the URL."
msgstr ""

msgid "Use Focus Keyword in subheading(s) like H2, H3, H4, etc.."
msgstr ""

msgid "It is recommended to add the focus keyword as part of one or more subheadings in the content."
msgstr ""

msgid "Focus Keyword found in the subheading(s)."
msgstr ""

msgid "Focus Keyword not found in subheading(s) like H2, H3, H4, etc.."
msgstr ""

msgid "Add Focus Keyword to the SEO title."
msgstr ""

msgid "Make sure the focus keyword appears in the SEO post title too."
msgstr ""

msgid "Hurray! You're using Focus Keyword in the SEO Title."
msgstr ""

msgid "Focus Keyword does not appear in the SEO title."
msgstr ""

msgid "Set a Focus Keyword for this content."
msgstr ""

msgid "We are searching in database."
msgstr ""

msgid "You haven't used this Focus Keyword before."
msgstr ""

msgid "You have %1$s this Focus Keyword."
msgstr ""

msgid "already used"
msgstr ""

msgid "Content is %1$d words long. Good job!"
msgstr ""

msgid "Content is %1$d words long. Consider using at least 600 words."
msgstr ""

msgid "Content should be %1$s long."
msgstr ""

msgid "Minimum recommended content length should be 600 words."
msgstr ""

msgid "URL unavailable. Add a short URL."
msgstr ""

msgid "Permalink should be at most 75 characters long."
msgstr ""

msgid "URL is %1$d characters long. Kudos!"
msgstr ""

msgid "URL is %1$d characters long. Consider shortening it."
msgstr ""

msgid "Link out to external resources."
msgstr ""

msgid "It helps visitors read more about a topic and prevents pogosticking."
msgstr ""

msgid "Great! You are linking to external resources."
msgstr ""

msgid "No outbound links were found. Link out to external resources."
msgstr ""

msgid "Add internal links in your content."
msgstr ""

msgid "Internal links decrease your bounce rate and improve SEO."
msgstr ""

msgid "You are linking to other resources on your website which is great."
msgstr ""

msgid "We couldn't find any internal links in your content."
msgstr ""

msgid "Add DoFollow links pointing to external resources."
msgstr ""

msgid "PageRank Sculpting no longer works. Your posts should have a mix of nofollow and DoFollow links."
msgstr ""

msgid "At least one external link with DoFollow found in your content."
msgstr ""

msgid "We found %1$d outbound links in your content and all of them are nofollow."
msgstr ""

msgid "Add a number to your title to improve CTR."
msgstr ""

msgid "Headlines with numbers are 36% more likely to generate clicks, according to research by Conductor."
msgstr ""

msgid "You are using a number in your SEO title."
msgstr ""

msgid "Your SEO title doesn't contain a number."
msgstr ""

msgid "Add %s to your title to increase CTR."
msgstr ""

msgid "Power Words are tried-and-true words that copywriters use to attract more clicks."
msgstr ""

msgid "Your title contains %1$d power word(s). Booyah!"
msgstr ""

msgid "Your title doesn't contain a %1$s. Add at least one."
msgstr ""

msgid "Titles with positive or negative sentiment work best for higher CTR."
msgstr ""

msgid "Headlines with a strong emotional sentiment (positive or negative) tend to receive more clicks."
msgstr ""

msgid "Your title has a positive or a negative sentiment."
msgstr ""

msgid "Your title doesn't contain a %1$s word."
msgstr ""

msgid "Use the Focus Keyword near the beginning of SEO title."
msgstr ""

msgid "The SEO page title should contain the Focus Keyword preferably at the beginning."
msgstr ""

msgid "Focus Keyword used at the beginning of SEO title."
msgstr ""

msgid "Focus Keyword doesn't appear at the beginning of SEO title."
msgstr ""

msgid "Use %1$s to optimise the  %2$s."
msgstr ""

msgid "You are using %1$s to optimise this %2$s."
msgstr ""

msgid "You are not using %1$s to optimise this %2$s."
msgstr ""

msgid "Reviews are disabled on this Product."
msgstr ""

msgid "Reviews are enabled for this Product. Good Job!"
msgstr ""

msgid "You are not using the Product Schema for this Product."
msgstr ""

msgid "You are using the Product Schema for this Product"
msgstr ""

msgid "Lock Modified Date"
msgstr ""

msgid "Content is %1$d words long. Consider using at least 300 words."
msgstr ""

msgid "Minimum recommended content length should be 300 words."
msgstr ""

msgid "300 words"
msgstr ""

msgid "Edit Schema"
msgstr ""

msgid "Auto redirection created."
msgstr ""

msgid "We can't show any link suggestions for this post. Try selecting categories and tags for this post, and mark other posts as Pillar Content to make them show up here."
msgstr ""

msgid "Link Copied"
msgstr ""

msgid "Link Inserted"
msgstr ""

msgid "Copy Link URL to Clipboard"
msgstr ""

msgid "Insert Link in Content"
msgstr ""

msgid "Make Term Primary"
msgstr ""

msgid "Select Property"
msgstr ""

msgid "Are you sure, you want to create a new GA4 Property?"
msgstr ""

msgid "Savingâ€¦"
msgstr ""

msgid "Connected"
msgstr ""

msgid "Some permissions are missing, please reconnect"
msgstr ""

msgid "Create new GA4 Property"
msgstr ""

msgid "Authorize"
msgstr ""

msgid "Search &hellip;"
msgstr ""

msgid "Select / Deselect All"
msgstr ""

msgid "I just installed @RankMathSEO #WordPress Plugin. It looks great! %s"
msgstr ""

msgid "I just installed Rank Math SEO WordPress Plugin. It looks promising!"
msgstr ""

msgid "SEO by Rank Math"
msgstr ""

msgid "Tweet"
msgstr ""

msgid "Share"
msgstr ""

msgid "Use this file"
msgstr ""

msgid "Add or Upload File"
msgstr ""

msgid "Search â€¦"
msgstr ""

msgid "No results found"
msgstr ""

msgid "Search fetch failed:"
msgstr ""

msgid "Clear selection"
msgstr ""

msgid "Select New Pageâ€¦"
msgstr ""

msgid "Please enter 2 or more characters"
msgstr ""

msgid "Selected Page:"
msgstr ""

msgid "Passed Tests"
msgstr ""

msgid "Warnings"
msgstr ""

msgid "Failed Tests"
msgstr ""

msgid "Last checked: "
msgstr ""

msgid " at "
msgstr ""

msgid "Passed"
msgstr ""

msgid "Failed"
msgstr ""

msgid "Warning"
msgstr ""

msgid "Info"
msgstr ""

msgid "How to fix"
msgstr ""

msgid "Priority"
msgstr ""

msgid "Advanced SEO"
msgstr ""

msgid "Basic SEO"
msgstr ""

msgid "Performance"
msgstr ""

msgid "Security"
msgstr ""

msgid "Complete"
msgstr ""

msgid "SEO Titles & Meta"
msgstr ""

msgid "Tools"
msgstr ""

msgid "Import & Export"
msgstr ""

msgid "Competitor Analyzer"
msgstr ""

msgid "Something went wrong! Please try again."
msgstr ""

msgid "Nothing found."
msgstr ""

msgid "Select options"
msgstr ""

msgid "other"
msgstr ""

msgid "others"
msgstr ""

msgid "Table filters"
msgstr ""

msgid "Apply selected filters"
msgstr ""

msgid "Apply Filters"
msgstr ""

msgid "Clear all filters"
msgstr ""

msgid "Clear All"
msgstr ""

msgid "Select row"
msgstr ""

msgid "Hide row details"
msgstr ""

msgid "View row details"
msgstr ""

msgid "Hide Details"
msgstr ""

msgid "View Details"
msgstr ""

msgid "for row"
msgstr ""

msgid "Processingâ€¦"
msgstr ""

msgid "Previous page"
msgstr ""

msgid "Next page"
msgstr ""

msgid "of"
msgstr ""

msgid "Go to Page"
msgstr ""

msgid "Page number"
msgstr ""

msgid "ðŸ”’ This is a PRO-Only Feature"
msgstr ""

msgid "We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:"
msgstr ""

msgid "Automatic Link Audit to Identify SEO Issues"
msgstr ""

msgid "AI-Powered Keyword Mapping"
msgstr ""

msgid "Built-in Keyword Rank Tracker"
msgstr ""

msgid "SEO Performance Email Reports"
msgstr ""

msgid "Get PRO Now â†’"
msgstr ""

msgid "â›”ï¸� Update Required"
msgstr ""

msgid "Update Now"
msgstr ""

msgid "ðŸš€ Supercharge Your Content With AI"
msgstr ""

msgid "Start using Content AI by connecting your RankMath.com Account"
msgstr ""

msgid "To access this Content AI feature, you need to have an active subscription plan."
msgstr ""

msgid "To access this Content AI feature, you have to purchase a Content AI Subscription."
msgstr ""

msgid "You are one step away from unlocking this premium feature along with many more."
msgstr ""

msgid "1-Click Article Generation"
msgstr ""

msgid "Bulk Update Your SEO Meta using AI"
msgstr ""

msgid "Get Access to 40+ AI SEO Tools"
msgstr ""

msgid "125+ Expert-Written Prompts"
msgstr ""

msgid "1-Click Competitor Content Research"
msgstr ""

msgid "1-Click WooCommerce Product Descriptions"
msgstr ""

msgid "1-Click Competitor Research"
msgstr ""

msgid "On-Page SEO Suggestions"
msgstr ""

msgid "1-Click Bulk SEO Meta"
msgstr ""

msgid "125+ Pre-Built Prompts"
msgstr ""

msgid "Multiple RankBot Sessions"
msgstr ""

msgid "1-Click SEO Content"
msgstr ""

msgid "1-Click SEO Meta"
msgstr ""

msgid "40+ Specialized AI Tools"
msgstr ""

msgid "Gain access to 40+ advanced AI tools, empowering your content strategy."
msgstr ""

msgid "Experience the revolutionary AI-powered Content Editor for unparalleled efficiency."
msgstr ""

msgid "Engage with RankBot, your personal AI Chat Assistant, for real-time assistance."
msgstr ""

msgid "Connect Now"
msgstr ""

msgid "Server Maintenance Underway"
msgstr ""

msgid "We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please "
msgstr ""

msgid "reach out to the support team."
msgstr ""

msgid " We are sorry for the inconvenience."
msgstr ""

msgid "â›”ï¸� Content AI Credit Alert!"
msgstr ""

msgid "Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation"
msgstr ""

msgid "Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits."
msgstr ""

msgid "Missing Credits?"
msgstr ""

msgid "Export table data"
msgstr ""

msgid "item"
msgstr ""

msgid "items"
msgstr ""

msgid "selected"
msgstr ""

msgid "Recheck"
msgstr ""

msgid "Mark as Not Broken"
msgstr ""

msgid "Bulk actions"
msgstr ""

msgid "Select all %d matching items"
msgstr ""

msgid "Select all"
msgstr ""

msgid "matching items"
msgstr ""

msgid "Select bulk action"
msgstr ""

msgid "Select all on page"
msgstr ""

msgid "No data available"
msgstr ""

msgid "Please enable Redirections module"
msgstr ""

msgid "Change how some of the links open and operate on your website."
msgstr ""

msgid "Learn More "
msgstr ""

msgid " OR "
msgstr ""

msgid "Here you can set up the breadcrumbs function."
msgstr ""

msgid "SEO options related to featured images and media appearing in your post content."
msgstr ""

msgid "Yandex Verfication ID"
msgstr ""

msgid "Enter verification codes for third-party webmaster tools."
msgstr ""

msgid "Test and edit your live robots.txt file with our %1$s."
msgstr ""

msgid "Robots.txt Tester"
msgstr ""

msgid "Edit your robots.txt file to control what bots see."
msgstr ""

msgid "%AUTHORLINK%"
msgstr ""

msgid "%POSTLINK%"
msgstr ""

msgid "%BLOGLINK%"
msgstr ""

msgid "%BLOGDESCLINK%"
msgstr ""

msgid "%FEATUREDIMAGE%"
msgstr ""

msgid "Share anonymous usage data to help us improve Rank Math. No personal info is collected. %s"
msgstr ""

msgid "Change some uncommon but essential settings here."
msgstr ""

msgid "Select Brand"
msgstr ""

msgid "Choose how you want Rank Math to handle your WooCommerce SEO."
msgstr ""

msgid "Edit the contents of your .htaccess file easily."
msgstr ""

msgid "Custom Url"
msgstr ""

msgid "Easily create redirects without fiddling with tedious code."
msgstr ""

msgid "Get more credits "
msgstr ""

msgid "Credits will renew on"
msgstr ""

msgid "check usage"
msgstr ""

msgid "or you can upgrade to get more credits"
msgstr ""

msgid "Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area."
msgstr ""

msgid "Monitor broken pages that ruin user-experience and affect SEO."
msgstr ""

msgid "Enable this option to show the Index Status tab in the Analytics module. "
msgstr ""

msgid "Select"
msgstr ""

msgid "Warning: "
msgstr ""

msgid "Not Connected"
msgstr ""

msgid "Receive periodic SEO Performance reports via email. Once enabled and options are saved, you can see"
msgstr ""

msgid "the preview here"
msgstr ""

msgid "Enter number of days. E.g. 90"
msgstr ""

msgid "Deleting dataâ€¦"
msgstr ""

msgid "Starting updateâ€¦"
msgstr ""

msgid "See your Google Search Console, Analytics and AdSense data without leaving your WP dashboard."
msgstr ""

msgid "Your llms.txt file is available at: "
msgstr ""

msgid "%s (opens in a new tab)"
msgstr ""

msgid "Unlink"
msgstr ""

msgid "Link"
msgstr ""

msgid "Loading"
msgstr ""

msgid "Select Primary Term"
msgstr ""

msgid "Click on the button to copy URL or insert link in content. You can also drag and drop links in the post content."
msgstr ""

msgid "Notify your readers by sharing!"
msgstr ""

msgid "Schedule this Post Using SocialPilot"
msgstr ""

msgid "An error occurred while submitting the URL."
msgstr ""

msgid "Instant Indexing module settings."
msgstr ""

msgid "No submissions yet."
msgstr ""

msgid "Error: could not clear history."
msgstr ""

msgid "Next stepsâ€¦"
msgstr ""

msgid "Setup Rank Math"
msgstr ""

msgid "Upgrade to PRO"
msgstr ""

msgid "How to Properly Setup Rank Math"
msgstr ""

msgid "Advanced Schema, Analytics and much moreâ€¦"
msgstr ""

msgid "Import Data"
msgstr ""

msgid "How to Import Data from Your Previous SEO Plugin"
msgstr ""

msgid "Online Documentation"
msgstr ""

msgid "Understand all the capabilities of Rank Math"
msgstr ""

msgid "Product Support"
msgstr ""

msgid "Ticket Support"
msgstr ""

msgid "Direct help from our qualified support team"
msgstr ""

msgid "Affiliate Program"
msgstr ""

msgid "Earn flat 30% on every sale!"
msgstr ""

msgid "SEO Care"
msgstr ""

msgid "Get expert help to grow your site's SEO"
msgstr ""

msgid "The plugin is currently not connected with your Rank Math account. Click on the button below to login or register for FREE using your "
msgstr ""

msgid "Google account, Facebook account"
msgstr ""

msgid " or "
msgstr ""

msgid "your email account."
msgstr ""

msgid "You have successfully activated Rank Math. If you find the plugin useful, "
msgstr ""

msgid "feel free to recommend it to your friends or colleagues."
msgstr ""

msgid "You can't access this page."
msgstr ""

msgid "Failed! Try again"
msgstr ""

msgid "Saved"
msgstr ""

msgid "Auto Update"
msgstr ""

msgid "You cannot turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released, because site wide plugins auto-update option is disabled on your site."
msgstr ""

msgid "Turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released. The beta versions of Rank Math as soon as they are released. The beta versions will never install automatically."
msgstr ""

msgid "Auto Update Plugin"
msgstr ""

msgid "When auto-updates are turned off, you can enable update notifications, to send an email to the site administrator when an update is available for Rank Math."
msgstr ""

msgid "Update Notification Email"
msgstr ""

msgid "Rank Math will not auto-update because you have rolled back to a previous version. Update to the latest version manually to make this option work again."
msgstr ""

msgid "Beta Opt-in"
msgstr ""

msgid "You cannot turn on the Beta Tester feature because site wide plugins auto-update option is disabled on your site."
msgstr ""

msgid "You can take part in shaping Rank Math by test-driving the newest features and letting us know what you think. Turn on the Beta Tester feature to get notified about new beta releases. The beta version will not install automatically and you always have the option to ignore it."
msgstr ""

msgid "It is not recommended to use the beta version on live production sites."
msgstr ""

msgid "Beta Tester"
msgstr ""

msgid "Rollback to Previous Version"
msgstr ""

msgid "If you are facing issues after an update, you can reinstall a previous version with this tool."
msgstr ""

msgid "Previous versions may not be secure or stable. Proceed with caution and always create a backup."
msgstr ""

msgid "Your Version"
msgstr ""

msgid "Rolled Back Version: "
msgstr ""

msgid "Auto updates will not work, please update the plugin manually."
msgstr ""

msgid "You are using the latest version of the plugin."
msgstr ""

msgid "This is the version you are using on this site."
msgstr ""

msgid "Latest Stable Version"
msgstr ""

msgid "This is the latest version of the plugin."
msgstr ""

msgid "Rollback Version"
msgstr ""

msgid "Roll back to this version."
msgstr ""

msgid "Install Version "
msgstr ""

msgid "Reinstalling, please waitâ€¦"
msgstr ""

msgid "Are you sure? You want to reset settings."
msgstr ""

msgid "Bulk Edit This Field"
msgstr ""

msgid "Save All Edits"
msgstr ""

msgid "This is what will appear in the first line when this post shows up in the search results."
msgstr ""

msgid "Permalink"
msgstr ""

msgid "Editing Homepage permalink is not possible."
msgstr ""

msgid "This is the unique URL of this page, displayed below the post title in the search results."
msgstr ""

msgid "This is what will appear as the description when this post shows up in the search results."
msgstr ""

msgid "Rating: "
msgstr ""

msgid "Preview"
msgstr ""

msgid "Desktop Preview"
msgstr ""

msgid "Mobile Preview"
msgstr ""

msgid "Videos"
msgstr ""

msgid "News"
msgstr ""

msgid "Maps"
msgstr ""

msgid "More"
msgstr ""

msgid "About 43,700,000 results (0.32 seconds) "
msgstr ""

msgid "Noindex robots meta is enabled"
msgstr ""

msgid "This page will not appear in search results. You can disable noindex in the Advanced tab."
msgstr ""

msgid "Replace Image"
msgstr ""

msgid "Add Image"
msgstr ""

msgid "Remove Image"
msgstr ""

msgid "Upload at least 600x315px image. Recommended size is 1200x630px."
msgstr ""

msgid "Image is smaller than the minimum size, please select a different image."
msgstr ""

msgid "2 hrs"
msgstr ""

msgid "Customize the title, description and images of your post used while sharing on Facebook and Twitter."
msgstr ""

msgid "Add icon overlay to thumbnail"
msgstr ""

msgid "Icon overlay"
msgstr ""

msgid "You can add custom thumbnail overlays with {{link}}Rank Math Pro{{/link}}."
msgstr ""

msgid "App Description"
msgstr ""

msgid "You can use this as a more concise description than what you may have on the app store. This field has a maximum of 200 characters. (optional)"
msgstr ""

msgid "iPhone App Name"
msgstr ""

msgid "The name of your app to show."
msgstr ""

msgid "iPhone App ID"
msgstr ""

msgid "The numeric representation of your app ID in the App Store."
msgstr ""

msgid "iPhone App URL"
msgstr ""

msgid "Your app's custom URL scheme (must include ://)."
msgstr ""

msgid "iPad App Name"
msgstr ""

msgid "iPad App ID"
msgstr ""

msgid "iPad App URL"
msgstr ""

msgid "Google Play App Name"
msgstr ""

msgid "Google Play App ID"
msgstr ""

msgid "Your app ID in the Google Play (.i.e. com.android.app)"
msgstr ""

msgid "Google Play App URL"
msgstr ""

msgid "App Country"
msgstr ""

msgid "If your application is not available in the US App Store, you must set this value to the two-letter country code for the App Store that contains your application."
msgstr ""

msgid "Player URL"
msgstr ""

msgid "HTTPS URL to iFrame player. This must be a HTTPS URL which does not generate active mixed content warnings in a web browser. The audio or video player must not require plugins such as Adobe Flash."
msgstr ""

msgid "Player Size"
msgstr ""

msgid "iFrame width and height, specified in pixels in the following format: 600x400."
msgstr ""

msgid "Stream URL"
msgstr ""

msgid "Optional URL to raw stream that will be rendered in Twitterâ€™s mobile applications directly. If provided, the stream must be delivered in the MPEG-4 container format (the .mp4 extension). The container can store a mix of audio and video with the following codecs: Video: H.264, Baseline Profile (BP), Level 3.0, up to 640 x 480 at 30 fps. Audio: AAC, Low Complexity Profile (LC)."
msgstr ""

msgid "Stream Content Type"
msgstr ""

msgid "The MIME type/subtype combination that describes the content contained in twitter:player:stream. Takes the form specified in RFC 6381. Currently supported content_type values are those defined in RFC 4337 (MIME Type Registration for MP4)."
msgstr ""

msgid "2h"
msgstr ""

msgid "The card for your website will look little something like this!"
msgstr ""

msgid "Use Data from Facebook Tab"
msgstr ""

msgid "Card Type"
msgstr ""

msgid "App Card"
msgstr ""

msgid "Player Card"
msgstr ""

msgid "Video clips and audio streams have a special place on the Twitter platform thanks to the Player Card. Player Cards must be submitted for approval before they can be used. More information: "
msgstr ""

msgid "The App Card is a great way to represent mobile applications on Twitter and to drive installs. More information: "
msgstr ""

msgid "Facebook"
msgstr ""

msgid "Twitter"
msgstr ""

msgid "Rate Rank Math SEO"
msgstr ""

msgid "Hey, we noticed you are using Rank Math SEO plugin for more than a week now â€“{{em}}that's awesome!{{/em}} Could you please do us a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?"
msgstr ""

msgid "I already did. Please don't show this message again."
msgstr ""

msgid "Social"
msgstr ""

msgid "Edit Snippet"
msgstr ""

msgid "Preview Snippet Editor"
msgstr ""

msgid "Close"
msgstr ""

msgid "Social Media Preview"
msgstr ""

msgid "Here you can view and edit the thumbnail, title and description that will be displayed when your site is shared on social media."
msgstr ""

msgid "Click on the button below to view and edit the preview."
msgstr ""

msgid "Preview & Edit Social Media"
msgstr ""

msgid "All Good"
msgstr ""

msgid "Errors"
msgstr ""

msgid "Additional"
msgstr ""

msgid "Title Readability"
msgstr ""

msgid "Content Readability"
msgstr ""

msgid "Read here to {{link}}Score 100/100{{/link}} "
msgstr ""

msgid "Activate your account by {{link}}connecting to Rank Math!{{/link}} "
msgstr ""

msgid "Want more? {{link}}{{strong}}Upgrade today to the PRO{{/strong}}{{/link}} version."
msgstr ""

msgid "Upgrade to re-order Focus Keywords"
msgstr ""

msgid "Improve the SEO workflow"
msgstr ""

msgid "Set different Primary Focus Keyword"
msgstr ""

msgid "and many other premium SEO features"
msgstr ""

msgid "Example: Rank Math SEO"
msgstr ""

msgid "Show Intent"
msgstr ""

msgid "Trends"
msgstr ""

msgid "Google Trends"
msgstr ""

msgid "Track Keyword Trends"
msgstr ""

msgid "Data fetched directly from Google"
msgstr ""

msgid "Analyze search trends and compare keywords"
msgstr ""

msgid "See data from a particular Country or timeframe"
msgstr ""

msgid "Insert keywords you want to rank for. Try to {{link}}attain 100/100 points{{/link}} for better chances of ranking."
msgstr ""

msgid "This post is Pillar Content"
msgstr ""

msgid "Instructs search engines to index and show these pages in the search results"
msgstr ""

msgid "Nofollow"
msgstr ""

msgid "This option prevents images on a page from being indexed by Google and other search engines"
msgstr ""

msgid "Destination URL"
msgstr ""

msgid "Canonical URL"
msgstr ""

msgid "The canonical URL informs search crawlers which page is the main page if you have double content"
msgstr ""

msgid "Breadcrumb Title"
msgstr ""

msgid "Breadcrumb Title to use for this post"
msgstr ""

msgid "Max Snippet"
msgstr ""

msgid "Specify a maximum text-length, in characters, of a snippet for your page"
msgstr ""

msgid "Max Video Preview"
msgstr ""

msgid "Specify a maximum duration in seconds of an animated video preview"
msgstr ""

msgid "Max Image Preview"
msgstr ""

msgid "Specify a maximum size of image preview to be shown for images on this page"
msgstr ""

msgid "Show SEO Score on Front-end"
msgstr ""

msgid "Connect FREE Account"
msgstr ""

msgid "By connecting your free account, you get keyword suggestions directly from Google when entering the focus keywords. Not only that, get access to our revolutionary Content AI, SEO Analyzer inside WordPress that scans your website for SEO errors and suggest improvements."
msgstr ""

msgid "Read more by following this link."
msgstr ""

msgid "Enable Usage Tracking. %1$s Share anonymous usage data to help us improve Rank Math. No personal info is collected. %2$s"
msgstr ""

msgid "Connect Your Account"
msgstr ""

msgid "Skip Step"
msgstr ""

msgid "Take your SEO to the Next Level! "
msgstr ""

msgid "Get Rank Math PRO! "
msgstr ""

msgid "Resettingâ€¦"
msgstr ""

msgid "Resetted"
msgstr ""

msgid "Updatingâ€¦"
msgstr ""

msgid "Updated"
msgstr ""

msgid "Your sitemap index can be found here: "
msgstr ""

msgid "Rank Math generates the default Sitemaps only and WPML takes care of the rest. When a search engine bot visits any post/page, it is shown hreflang tag that helps it crawl the translated pages. This is one of the recommended methods by Google. Please "
msgstr ""

msgid "Set the sitemap options for author archive pages."
msgstr ""

msgid "Change Sitemap settings of %s."
msgstr ""

msgid "Change Global meta settings that take effect across your website."
msgstr ""

msgid "Street Address"
msgstr ""

msgid "Locality"
msgstr ""

msgid "Region"
msgstr ""

msgid "Postal Code"
msgstr ""

msgid "2-letter Country Code (ISO 3166-1)"
msgstr ""

msgid "Add Number"
msgstr ""

msgid "Optimize for local searches and Knowledge Graph using these settings."
msgstr ""

msgid "Add social account information to your website's Schema and Open Graph."
msgstr ""

msgid "Static page is set as the front page (WP Dashboard > Settings > Reading). To add SEO title, description, and meta for the homepage, please click here: "
msgstr ""

msgid "Add SEO meta and OpenGraph details to your homepage."
msgstr ""

msgid "Change SEO options related to the author archives."
msgstr ""

msgid "Disable Date Archives"
msgstr ""

msgid "Customize SEO meta settings of pages like search results, 404s, etc."
msgstr ""

msgid "Change Global SEO, Schema, and other settings for %s."
msgstr ""

msgid "Add bulk editing columns to the terms listing screen."
msgstr ""

msgid "Save and Continue"
msgstr ""

msgid "Return to dashboard"
msgstr ""

msgid "Easy"
msgstr ""

msgid "For websites where you only want to change the basics and let Rank Math do most of the heavy lifting. Most settings are set to default as per industry best practices. One just has to set it and forget it."
msgstr ""

msgid "For the advanced users who want to control every SEO aspect of the website. You are offered options to change everything and have full control over the websiteâ€™s SEO."
msgstr ""

msgid "Custom Mode"
msgstr ""

msgid "Select this if you have a custom Rank Math settings file you want to use."
msgstr ""

msgid "You can easily switch between modes at any point."
msgstr ""

msgid "Your server is correctly configured to use Rank Math."
msgstr ""

msgid "Your server is correctly configured to use this plugin."
msgstr ""

msgid "Please resolve the issues above to be able to use all features of Rank Math plugin. If you are not sure how to do it, please contact your hosting provider."
msgstr ""

msgid "Please resolve the issues above to be able to use all SEO features. If you are not sure how to do it, please contact your hosting provider."
msgstr ""

msgid "You can import settings in the next step."
msgstr ""

msgid "Deactivated"
msgstr ""

msgid "Deactivate Plugin"
msgstr ""

msgid "No known conflicting plugins found."
msgstr ""

msgid "The following active plugins on your site may cause conflict issues when used alongside Rank Math: "
msgstr ""

msgid "The following active plugins on your site may cause conflict issues when used alongside this plugin: "
msgstr ""

msgid "Your PHP Version: %s | Recommended version: 7.4 | Minimal required: 7.2"
msgstr ""

msgid "Your PHP Version: %s"
msgstr ""

msgid "Rank Math is compatible with your PHP version but we recommend updating to PHP 7.4 for increased speed and security. "
msgstr ""

msgid "More information"
msgstr ""

msgid "This plugin is compatible with your PHP version but we recommend updating to PHP 7.4 for increased speed and security."
msgstr ""

msgid " | Recommended: PHP 7.4 or later"
msgstr ""

msgid "available"
msgstr ""

msgid "installed"
msgstr ""

msgid "missing"
msgstr ""

msgid "You are using the recommended WordPress version."
msgstr ""

msgid "PHP DOM Extension"
msgstr ""

msgid "PHP SimpleXML Extension"
msgstr ""

msgid "PHP GD or Imagick Extension"
msgstr ""

msgid "PHP MBstring Extension"
msgstr ""

msgid "PHP OpenSSL Extension"
msgstr ""

msgid "Base64 encode & decode functions"
msgstr ""

msgid "Your website is compatible to run Rank Math SEO"
msgstr ""

msgid "Less"
msgstr ""

msgid "Start Wizard"
msgstr ""

msgid "Recalculate SEO Scores"
msgstr ""

msgid "Deactivating %1$s"
msgstr ""

msgid "Importing %1$s from %2$s"
msgstr ""

msgid "Starting SEO score recalculation"
msgstr ""

msgid "SEO Scores updated"
msgstr ""

msgid "No posts found without SEO score."
msgstr ""

msgid "Import finished. Click on the button below to continue the Setup Wizard."
msgstr ""

msgid "Import startedâ€¦"
msgstr ""

msgid "Importing: "
msgstr ""

msgid "% Completed"
msgstr ""

msgid "Import meta data from the %s plugin."
msgstr ""

msgid "Import settings and meta data from the %s plugin."
msgstr ""

msgid "The process may take a few minutes if you have a large number of posts or pages <a href=\"%1$s\">Learn more about the import process here.</a>"
msgstr ""

msgid "%s plugin will be disabled automatically moving forward to avoid conflicts. <strong>It is thus recommended to import the data you need now.</strong>"
msgstr ""

msgid "Input Data From:"
msgstr ""

msgid "Deactivating Pluginsâ€¦"
msgstr ""

msgid "Skip, Don't Import Now"
msgstr ""

msgid "Please select plugin to import data."
msgstr ""

msgid "Continue"
msgstr ""

msgid "Start Import"
msgstr ""

msgid "Click here to learn how to setup Rank Math properly"
msgstr ""

msgid "Search the Knowledge Base for answers to your questions:"
msgstr ""

msgid "Type here to searchâ€¦"
msgstr ""

msgid "Setup Tutorial"
msgstr ""

msgid "Knowledge Base"
msgstr ""

msgid "%1$s is aâ€¦"
msgstr ""

msgid "Select the type that best describes your business. If you can't find one that applies exactly, use the generic \"Organization\" or \"Local Business\" types."
msgstr ""

msgid "Logo for Google"
msgstr ""

msgid "<strong>Min Size: 112Î§112px</strong>.<br />A squared image is preferred by the search engines."
msgstr ""

msgid "Default Social Share Image"
msgstr ""

msgid "When a featured image or an OpenGraph Image is not set for individual posts/pages/CPTs, this image will be used as a fallback thumbnail when your post is shared on Facebook. <strong>The recommended image size is 1200 x 630 pixels.</strong>"
msgstr ""

msgid "If you are new to Rank Math,"
msgstr ""

msgid "to learn more."
msgstr ""

msgid "XML Sitemaps help search engines index your website&#039;s content more effectively."
msgstr ""

msgid "Include Images"
msgstr ""

msgid "Include reference to images from the post content in sitemaps. This helps search engines index your images better."
msgstr ""

msgid "Public Post Types"
msgstr ""

msgid "Select post types to enable SEO options for them and include them in the sitemap."
msgstr ""

msgid "Public Taxonomies"
msgstr ""

msgid "Select taxonomies to enable SEO options for them and include them in the sitemap."
msgstr ""

msgid "Automatically add a <code>target=\"_blank\"</code> attribute to external links appearing in your posts, pages, and other post types. The attributes are applied when the content is displayed, which does not change the stored content."
msgstr ""

msgid "Subscribe to Our YouTube Channel"
msgstr ""

msgid "Know more about the PRO version"
msgstr ""

msgid "Join FREE Facebook Group"
msgstr ""

msgid "Get 24x7 Support"
msgstr ""

msgid "Your site is now optimized"
msgstr ""

msgid "Proceed to Settings"
msgstr ""

msgid "Score 100"
msgstr ""

msgid "Proceed to Help Page"
msgstr ""

msgid "Setup Advanced Options"
msgstr ""

msgid "Your site is ready! "
msgstr ""

msgid "Enable auto update of the plugin"
msgstr ""

msgid "Set default values for the 404 error monitor here."
msgstr ""

msgid "The 404 monitor will let you see if visitors or search engines bump into any <code>404 Not Found</code> error while browsing your site."
msgstr ""

msgid "Set default values for the redirection module from here. "
msgstr ""

msgid "Learn more about Redirections."
msgstr ""

msgid "Set up temporary or permanent redirections. Combined with the 404 monitor, you can easily redirect faulty URLs on your site, or add custom redirections."
msgstr ""

msgid "Schema Type for %s"
msgstr ""

msgid "Default rich snippet selected when creating a new post of this type."
msgstr ""

msgid "Use automatic structured data to mark up content, to help Google better understand your content's context for display in Search. You can set different defaults for your posts here."
msgstr ""

msgid "Import"
msgstr ""

msgid "Import SEO Settings"
msgstr ""

msgid "You can import SEO settings from the following plugins:"
msgstr ""

msgid "Your Site"
msgstr ""

msgid "Your Website: %s"
msgstr ""

msgid "Let us know a few things about your siteâ€¦"
msgstr ""

msgid "Connect Google&trade; Services"
msgstr ""

msgid "Rank Math automates everything, use below button to connect your site with Google Search Console and Google Analytics. It will verify your site and submit sitemaps automatically. "
msgstr ""

msgid "Read more about it here."
msgstr ""

msgid "Choose your Sitemap configuration and select which type of posts or pages you want to include in your Sitemaps."
msgstr ""

msgid "Optimization"
msgstr ""

msgid "SEO Tweaks"
msgstr ""

msgid "Automate some of your SEO tasks like making external links nofollow, redirecting attachment pages, etc."
msgstr ""

msgid "Ready"
msgstr ""

msgid "Advanced Options"
msgstr ""

msgid "Set capabilities here."
msgstr ""

msgid "404 + Redirection"
msgstr ""

msgid "Schema Markup"
msgstr ""

msgid "Schema adds metadata to your website, resulting in rich search results and more traffic."
msgstr ""

msgid "The below options are handled via the Rank Math SEO <settings_page_link/>."
msgstr ""

msgid "settings page"
msgstr ""

msgid "Save (Lock Modified Date)"
msgstr ""

msgid "Update (Lock Modified Date)"
msgstr ""

msgid "Failed to load dashboard data."
msgstr ""

msgid "Failed to create brand."
msgstr ""

msgid "Failed to update brand."
msgstr ""

msgid "Failed to disable brand."
msgstr ""

msgid "Failed to enable brand."
msgstr ""

msgid "Confirm"
msgstr ""

msgid "Enablingâ€¦"
msgstr ""

msgid "Disablingâ€¦"
msgstr ""

msgid "Transcript"
msgstr ""

msgid "Query:"
msgstr ""

msgid "Response:"
msgstr ""

msgid "Copied!"
msgstr ""

msgid "Copy Raw Text"
msgstr ""

msgid "Original Query"
msgstr ""

msgid "Model Response"
msgstr ""

msgid "Extracted Signals"
msgstr ""

msgid "Copy JSON"
msgstr ""

msgid "Success"
msgstr ""

msgid "Partial"
msgstr ""

msgid "Transcript preview"
msgstr ""

msgid "Select a query to preview its transcript."
msgstr ""

msgid "All queries"
msgstr ""

msgid "Filter by date"
msgstr ""

msgid "No entries match the current filters."
msgstr ""

msgid "â†� Back"
msgstr ""

msgid "Error"
msgstr ""

msgid "Last analysis failed. It will be retried automatically."
msgstr ""

msgid "Running"
msgstr ""

msgid "Analysis in progress â€” data will appear in approximately 10 minutes."
msgstr ""

msgid "Pending"
msgstr ""

msgid "Weekly"
msgstr ""

msgid "Monthly (Coming Soon)"
msgstr ""

msgid "Daily (Coming Soon)"
msgstr ""

msgid "Coming Soon"
msgstr ""

msgid "Select country (optional)"
msgstr ""

msgid "Edit Brand or Product"
msgstr ""

msgid "Add Brand or Product"
msgstr ""

msgid "Share the basics so we can start tracking this brand or a product."
msgstr ""

msgid "Brand / Product Name"
msgstr ""

msgid "Enter your brand or product name"
msgstr ""

msgid "Brand / Product URL"
msgstr ""

msgid "How would you describe your brand/product?"
msgstr ""

msgid "Describe what your brand/product does, who it's for, and what makes it unique. This helps AI models identify and accurately represent you."
msgstr ""

msgid "Target Country (Optional)"
msgstr ""

msgid "Frequency of analyses"
msgstr ""

msgid "AI Platforms"
msgstr ""

msgid "Brand name is required."
msgstr ""

msgid "Please enter a valid URL (must start with https://)."
msgstr ""

msgid "Website URL is required."
msgstr ""

msgid "Description is required."
msgstr ""

msgid "Addingâ€¦"
msgstr ""

msgid "Track how often AI mentions your brand"
msgstr ""

msgid "Monitor sentiment across AI search results"
msgstr ""

msgid "See which pages AI models cite as sources"
msgstr ""

msgid "Benchmark your AI visibility against competitors"
msgstr ""

msgid "Spot opportunities to grow your AI-driven traffic"
msgstr ""

msgid "Upgrade to Unlock AI Visibility"
msgstr ""

msgid "Your competitors are already tracking their AI presence. You should be too."
msgstr ""

msgid "Upgrade to unlock AI Visibility module and see where your brand appears across ChatGPT, and other AI platforms, and take action before you fall further behind."
msgstr ""

msgid "Start 15-Day Free Trial"
msgstr ""

msgid "30-Day Money-Back Guarantee"
msgstr ""

msgid "Something went wrong while activating your trial. Please try again."
msgstr ""

msgid "Authenticating credentialsâ€¦"
msgstr ""

msgid "Provisioning AI tracking workspaceâ€¦"
msgstr ""

msgid "Connecting to AI search modelsâ€¦"
msgstr ""

msgid "Activate Your AI Visibility Trial"
msgstr ""

msgid "Start your free trial and see exactly where AI mentions your brand. Your %d-day trial gives you full access to track, analyze, and grow your presence, before your competitors do."
msgstr ""

msgid "Your trial begins immediately. Auto-renews on %s unless cancelled."
msgstr ""

msgid "Retry Activation"
msgstr ""

msgid "Activating Your AI Visibility Trialâ€¦"
msgstr ""

msgid "We're setting up your workspace and connecting AI models. This will take just a moment."
msgstr ""

msgid "Welcome to AI Visibility"
msgstr ""

msgid "Your 15-day free trial is now active. We've sent a confirmation email with your trial details and next steps."
msgstr ""

msgid "Quick Start Guide"
msgstr ""

msgid "Play Quick Start Guide"
msgstr ""

msgid "Contact Support"
msgstr ""

msgid "Go to Dashboard"
msgstr ""

msgid "Try Again"
msgstr ""

msgid "Upgrade your Content AI plan"
msgstr ""

msgid "You've reached the maximum number of brands available on your plan. Contact support if you need a higher limit."
msgstr ""

msgid "You've reached the brand limit for your current %s plan."
msgstr ""

msgid "Upgrade Your Plan"
msgstr ""

msgid "All plans include a 30-day money-back guarantee."
msgstr ""

msgid "I'll do this later"
msgstr ""

msgid "+ Add Brand / Product"
msgstr ""

msgid "Search name or URL"
msgstr ""

msgid "AI Visibility Score"
msgstr ""

msgid "Avg Rank"
msgstr ""

msgid "Avg sentiment"
msgstr ""

msgid "Mentions"
msgstr ""

msgid "Citations"
msgstr ""

msgid "Last analyzed"
msgstr ""

msgid "Actions"
msgstr ""

msgid "Brand detail"
msgstr ""

msgid "Export Report"
msgstr ""

msgid "Edit Brand"
msgstr ""

msgid "Open brand URL"
msgstr ""

msgid "Last analysis:"
msgstr ""

msgid "AI Visibility Score for this brand across AI platforms."
msgstr ""

msgid "Recent Mentions"
msgstr ""

msgid "Total brand mentions across AI-generated content."
msgstr ""

msgid "Avg Sentiments"
msgstr ""

msgid "Average sentiment score across all AI mentions of this brand."
msgstr ""

msgid "Top Competitor"
msgstr ""

msgid "The competitor brand with the highest share of voice in AI mentions."
msgstr ""

msgid "Regeneratingâ€¦"
msgstr ""

msgid "Regenerate baseline queries"
msgstr ""

msgid "No queries yet"
msgstr ""

msgid "Regenerate baseline queries to start tracking how AI answers questions about this brand."
msgstr ""

msgid "Query text"
msgstr ""

msgid "Last updated"
msgstr ""

msgid "Regenerate queries?"
msgstr ""

msgid "This will replace all existing baseline queries with new AI-generated ones. Continue?"
msgstr ""

msgid "Regenerate"
msgstr ""

msgid "No competitors detected yet"
msgstr ""

msgid "Competitors are automatically identified during analysis runs."
msgstr ""

msgid "Competitor"
msgstr ""

msgid "No transcripts found"
msgstr ""

msgid "Transcripts will appear here once the first analysis completes."
msgstr ""

msgid "Queries"
msgstr ""

msgid "Competitors"
msgstr ""

msgid "Raw data / Transcripts"
msgstr ""

msgid "Failed to load brand."
msgstr ""

msgid "Failed to load insights."
msgstr ""

msgid "Failed to save brand."
msgstr ""

msgid "Brand not found."
msgstr ""

msgid "â†� Back to Dashboard"
msgstr ""

msgid "Activate brand?"
msgstr ""

msgid "Deactivate brand?"
msgstr ""

msgid "Resume tracking \"%s\"? Analysis will run on the next scheduled cycle."
msgstr ""

msgid "Stop tracking \"%s\"? You can re-enable it later."
msgstr ""

msgid "Brand added! The first analysis is running â€” data will appear in approximately 10 minutes."
msgstr ""

msgid "Something went wrong. Please try again."
msgstr ""

msgid "Action failed. Please try again."
msgstr ""

msgid "Global AI Visibility Score"
msgstr ""

msgid "Average rank score across all tracked brands."
msgstr ""

msgid "Analyses in last 24h"
msgstr ""

msgid "Total analysis runs completed in the past 24 hours."
msgstr ""

msgid "Avg mentions per brand"
msgstr ""

msgid "Average number of AI-generated mentions across all tracked brands."
msgstr ""

msgid "No brands or products tracked yet"
msgstr ""

msgid "Add a brand or a specific product to see how you rank against competitors. Monitor your AI visibility, discover where you stand, and uncover opportunities to grow."
msgstr ""

msgid "+ Add Your First Brand"
msgstr ""

msgid "All Statuses"
msgstr ""

msgid "Done"
msgstr ""

msgid "All Brands"
msgstr ""

msgid "Search runs"
msgstr ""

msgid "Clear filters"
msgstr ""

msgid "From date"
msgstr ""

msgid "To date"
msgstr ""

msgid "Action"
msgstr ""

msgid "View Run Detail"
msgstr ""

msgid "Failed to load run detail."
msgstr ""

msgid "Analysis Run Detail"
msgstr ""

msgid "Target Brand"
msgstr ""

msgid "The brand this analysis run is for."
msgstr ""

msgid "Duration & Timing"
msgstr ""

msgid "Total duration of all queries in this run, and the date it was started."
msgstr ""

msgid "Sentiment"
msgstr ""

msgid "No queries found"
msgstr ""

msgid "No queries were recorded for this analysis run."
msgstr ""

msgid "Sentiment unavailable - this brand was not detected in the AI response for this query."
msgstr ""

msgid "Sentiment data is not available for this query."
msgstr ""

msgid "View Transcript"
msgstr ""

msgid "Analyses & Transcripts"
msgstr ""

msgid "Global view of all runs with per-query detail."
msgstr ""

msgid "Failed to generate report."
msgstr ""

msgid "Reports & Export"
msgstr ""

msgid "Export daily aggregates for a brand."
msgstr ""

msgid "Filters"
msgstr ""

msgid "Select brand and format."
msgstr ""

msgid "BRAND"
msgstr ""

msgid "Generatingâ€¦"
msgstr ""

msgid "Generate preview"
msgstr ""

msgid "Select a brand, then click \"Generate preview\"."
msgstr ""

msgid "Download JSON"
msgstr ""

msgid "The overall AI Visibility Score for the selected brand and date range, calculated based on the volume of mentions, sentiment, and other factors."
msgstr ""

msgid "Avg Sentiment"
msgstr ""

msgid "The average sentiment score across all AI mentions for the selected brand and date range. Calculated by analyzing the sentiment of each mention and averaging the scores."
msgstr ""

msgid "Total Mentions"
msgstr ""

msgid "The total number of AI-generated mentions of the selected brand within the specified date range."
msgstr ""

msgid "Total Citations"
msgstr ""

msgid "The total number of AI-generated mentions that include a link to the selected brandâ€™s website within the specified date range."
msgstr ""

msgid "Top competitors"
msgstr ""

msgid "Date"
msgstr ""

msgid "Connect your account to start tracking your brand's AI visibility."
msgstr ""

msgid "Need help? View tutorial â†’"
msgstr ""

msgid "Takes less than 30 seconds to get started"
msgstr ""

msgid "Account Connection Required"
msgstr ""

msgid "Content AI score"
msgstr ""

msgid "Content AI Score."
msgstr ""

msgid "Rank Math's SEO Score"
msgstr ""

msgid "This is how many times your site showed up in the search results."
msgstr ""

msgid "This is the average position of your site in the search results."
msgstr ""

msgid "Index Status"
msgstr ""

msgid "URL Inspection Status"
msgstr ""

msgid "PageSpeed"
msgstr ""

msgid "Pro Feature"
msgstr ""

msgid "Delete from Keyword Manager"
msgstr ""

msgid "Google: "
msgstr ""

msgid "Available in the PRO version"
msgstr ""

msgid "Last Crawl: "
msgstr ""

msgid "PRO Feature"
msgstr ""

msgid "PRO Version offers Advanced Indexing Stats"
msgstr ""

msgid "Monitor metrics like Index Status, Last Crawl date, etc"
msgstr ""

msgid "All the Indexing statistics about your content in one place"
msgstr ""

msgid "Use data provided by Google instead of 3rd party tools"
msgstr ""

msgid "Unknown fetch state"
msgstr ""

msgid "Successful fetch"
msgstr ""

msgid "Soft 404"
msgstr ""

msgid "Blocked by robots.txt"
msgstr ""

msgid "Not found (404)"
msgstr ""

msgid "Blocked due to unauthorized request (401)"
msgstr ""

msgid "Server error (5xx)"
msgstr ""

msgid "Redirection error"
msgstr ""

msgid "Blocked due to access forbidden (403)"
msgstr ""

msgid "Blocked due to other 4xx issue (not 403, 404)"
msgstr ""

msgid "Internal error"
msgstr ""

msgid "Invalid URL"
msgstr ""

msgid "Unspecified"
msgstr ""

msgid "Excluded"
msgstr ""

msgid "No data to display. Check back later or try to update data manually from %s"
msgstr ""

msgid "Rank Math > General Settings > Analytics > Click 'Update data manually' button."
msgstr ""

msgid "Close Permanently"
msgstr ""

msgid "Hide Analytics Stats"
msgstr ""

msgid "Show Analytics Stats"
msgstr ""

msgid "Advanced Stats are available in the PRO version, %1$s."
msgstr ""

msgid "learn More"
msgstr ""

msgid "Are you sure you want to do this? This action will close the Stats bar permanently. Instead, you can use the toggle icon to minimize it."
msgstr ""

msgid "Suggested Actions"
msgstr ""

msgid "[Edit]"
msgstr ""

msgid "Timeframe"
msgstr ""

msgid "#"
msgstr ""

msgid "Traffic"
msgstr ""

msgid "Prioritize Your Content Efforts With Detailed Insights"
msgstr ""

msgid "All the statistics about your content all in one place"
msgstr ""

msgid "Monitor key metrics like traffic and search performance"
msgstr ""

msgid "Content"
msgstr ""

msgid "Good Score"
msgstr ""

msgid "SEO score between 80 and 100. These posts are well optimized and usually do not require further actions."
msgstr ""

msgid "Fair Score"
msgstr ""

msgid "SEO score between 50 and 80. You may want to revisit these posts for further optimization."
msgstr ""

msgid "Poor Score"
msgstr ""

msgid "SEO score below 50. These posts are not well optimized and require further optimization."
msgstr ""

msgid "No Data"
msgstr ""

msgid "These posts have not been analyzed by Rank Math yet."
msgstr ""

msgid "Site Analytics"
msgstr ""

msgid "Fair"
msgstr ""

msgid "Poor"
msgstr ""

msgid "Overall Optimization"
msgstr ""

msgid "is the average Rank Mathâ€™s SEO score. This chart shows how well your posts are optimized based on Rank Mathâ€™s scoring system."
msgstr ""

msgid "Open Report"
msgstr ""

msgid "CTR"
msgstr ""

msgid "Average click-through rate. Total clicks divided by total impressions."
msgstr ""

msgid "Top Winning Keywords"
msgstr ""

msgid "Top Losing Keywords"
msgstr ""

msgid "Track Keyword Performance"
msgstr ""

msgid "Find winning keywords"
msgstr ""

msgid "Keep an eye on losing keywords"
msgstr ""

msgid "All Keywords"
msgstr ""

msgid "Tracked Keywords"
msgstr ""

msgid "10-50 Positions"
msgstr ""

msgid "Keyword Positions"
msgstr ""

msgid "Take full control of whatâ€™s important to the success of your website â€“ see content thatâ€™s performing well and content thatâ€™s dropped in rankings so you can take action."
msgstr ""

msgid "Impressions"
msgstr ""

msgid "Clicks"
msgstr ""

msgid "Position"
msgstr ""

msgid "Adsense"
msgstr ""

msgid "Pageviews"
msgstr ""

msgid "SEO Performance"
msgstr ""

msgid "Indexing Allowed"
msgstr ""

msgid "Rich Results"
msgstr ""

msgid "Page Fetch"
msgstr ""

msgid "Crawled As [PRO]"
msgstr ""

msgid "Robots state [PRO]"
msgstr ""

msgid "Pass"
msgstr ""

msgid "Get Advanced Index Stats Directly from Google database."
msgstr ""

msgid "Upgrade to Rank Math PRO!"
msgstr ""

msgid "Your site appears in the best position for these keywords."
msgstr ""

msgid "Your site appears on the first page for these keywords, but not in the top 3 positions."
msgstr ""

msgid "Your site appears somewhere on pages 2-5 of the search results for these keywords."
msgstr ""

msgid "51-100 Positions"
msgstr ""

msgid "Your site appears in the search results for these keywords, but not on the first couple of pages."
msgstr ""

msgid "Rest of the Keywords"
msgstr ""

msgid "Prioritize whatâ€™s most important so you can take action before its too late by seeing keywords youâ€™re ranking well for and keywords where your siteâ€™s position has dropped."
msgstr ""

msgid "Ready for more than just an overview? We have fully-fledged reports!"
msgstr ""

msgid "Track more than 20 metrics for all of your posts"
msgstr ""

msgid "Monitor Google trends for your selected focus keyword"
msgstr ""

msgid "Keep an eye on the data that matters all in one place"
msgstr ""

msgid "Single Post/Page Reports"
msgstr ""

msgid "Position History"
msgstr ""

msgid "Used"
msgstr ""

msgid "Remaining"
msgstr ""

msgid "Allowed"
msgstr ""

msgid "Your Own Keyword Manager"
msgstr ""

msgid "Track your performance for your target keywords"
msgstr ""

msgid "Monitor impressions, clicks, and position history"
msgstr ""

msgid "No additional monthly subscriptions for third-party tools"
msgstr ""

msgid "Keyword Manager"
msgstr ""

msgid "Rank Tracker"
msgstr ""

msgid "The statistics that appear in the Rank Math Analytics module wonâ€™t match with the data from the Google Search Console as we only track posts and keywords that rank in the top 100 positions in the selected timeframe. We do this to help make decision-making easier and for faster data processing since this is the data you really need to prioritize your SEO efforts on."
msgstr ""

msgid "Failed to generate alt text."
msgstr ""

msgid "Generate Alt"
msgstr ""

msgid "Generate Alt with AI"
msgstr ""

msgid "1 request will be used (%d remaining)"
msgstr ""

msgid "1 request will be used"
msgstr ""

msgid "Back"
msgstr ""

msgid "Not available in your plan. "
msgstr ""

msgid "You've used %1$d of %2$d research requests this month."
msgstr ""

msgid "Upgrade to buy more credits from "
msgstr ""

msgid "Content AI Pricing."
msgstr ""

msgid "here."
msgstr ""

msgid "Suggested length 2-3 Words"
msgstr ""

msgid "To learn how to use it"
msgstr ""

msgid "Click here"
msgstr ""

msgid "Research"
msgstr ""

msgid "Score:"
msgstr ""

msgid "100"
msgstr ""

msgid "Use"
msgstr ""

msgid "to"
msgstr ""

msgid "Copied"
msgstr ""

msgid "Ad Competition:"
msgstr ""

msgid "CPC:"
msgstr ""

msgid "Volume:"
msgstr ""

msgid "Click to copy keyword"
msgstr ""

msgid "Use Keyword in"
msgstr ""

msgid "Headings"
msgstr ""

msgid "Know more about Keywords."
msgstr ""

msgid "Click on any keyword to copy it."
msgstr ""

msgid "Please use only one or two keywords from here."
msgstr ""

msgid "There are no recommended Keywords for this researched keyword."
msgstr ""

msgid "Related Keywords"
msgstr ""

msgid "There are no recommended Questions for this researched keyword."
msgstr ""

msgid "Related Questions"
msgstr ""

msgid "Know more about Questions."
msgstr ""

msgid "Copy this data as a FAQ Block."
msgstr ""

msgid "Click on any question to copy it."
msgstr ""

msgid "There are no recommended Links for this researched keyword."
msgstr ""

msgid "Related External Links"
msgstr ""

msgid "Know more about Links."
msgstr ""

msgid "Use some of these external links in the content area. It is recommended to add"
msgstr ""

msgid "about or mention Schema."
msgstr ""

msgid "Questions"
msgstr ""

msgid "Fetching Search Results"
msgstr ""

msgid "Analysing Your Competitors"
msgstr ""

msgid "Crunching the Numbers"
msgstr ""

msgid "Cooking a Personalized SEO Plan"
msgstr ""

msgid "Final Touches to the SEO Recommendations"
msgstr ""

msgid "Content AI Knowledge Base."
msgstr ""

msgid "Sorry, the request has failed. If the issue persists, please contact our Support for assistance."
msgstr ""

msgid "AI Fix was applied only considering the beginning of the content, as the full content is too large to be processed by the AI."
msgstr ""

msgid "Error: The request payload is too large!"
msgstr ""

msgid "Topic Brief"
msgstr ""

msgid "Enter a short summary of your topic"
msgstr ""

msgid "Audience"
msgstr ""

msgid "The target audience for the content."
msgstr ""

msgid "Select or Write Custom"
msgstr ""

msgid "Tone"
msgstr ""

msgid "The tone of the content."
msgstr ""

msgid "Style"
msgstr ""

msgid "The style of the content."
msgstr ""

msgid "Output Language"
msgstr ""

msgid "Topic"
msgstr ""

msgid "Main points &amp; ideas"
msgstr ""

msgid "Enter the main points you want to cover, separated by comma"
msgstr ""

msgid "Enter the main keywords to focus on"
msgstr ""

msgid "Post title"
msgstr ""

msgid "Enter your post title"
msgstr ""

msgid "Main Argument"
msgstr ""

msgid "Enter the main point you want to make"
msgstr ""

msgid "Call to Action"
msgstr ""

msgid "Post Brief"
msgstr ""

msgid "Enter a short summary of your post"
msgstr ""

msgid "Length"
msgstr ""

msgid "Relevance"
msgstr ""

msgid "Select or Write desired output format"
msgstr ""

msgid "Enter your SEO title"
msgstr ""

msgid "Supporting Points"
msgstr ""

msgid "The supporting points you want to include in the paragraph"
msgstr ""

msgid "Original Paragraph"
msgstr ""

msgid "Enter the paragraph you want to rephrase"
msgstr ""

msgid "Sentence"
msgstr ""

msgid "Enter a short or incomplete sentence"
msgstr ""

msgid "Original Text"
msgstr ""

msgid "Enter the text to summarize"
msgstr ""

msgid "Product Name"
msgstr ""

msgid "Enter the name of the product"
msgstr ""

msgid "Features and Benefits"
msgstr ""

msgid "Enter a list of features and benefits, separated by commas"
msgstr ""

msgid "Limitations and Drawbacks"
msgstr ""

msgid "Reply Brief"
msgstr ""

msgid "Enter a short summary of the required response"
msgstr ""

msgid "Original Comment"
msgstr ""

msgid "The original comment that requires a response"
msgstr ""

msgid "Personal Information"
msgstr ""

msgid "Enter personal details, such as your name, age, occupation, etc."
msgstr ""

msgid "Purpose"
msgstr ""

msgid "What is the purpose of this bio?"
msgstr ""

msgid "Personal Achievements"
msgstr ""

msgid "Enter a list of your personal achievements, separated by commas"
msgstr ""

msgid "Company Name"
msgstr ""

msgid "Enter the name of your company"
msgstr ""

msgid "Company Information"
msgstr ""

msgid "Enter company details, such as the company name, location, and industry"
msgstr ""

msgid "Company History"
msgstr ""

msgid "Enter a brief history of the company"
msgstr ""

msgid "Team"
msgstr ""

msgid "Enter a brief description of the team"
msgstr ""

msgid "Enter the job title."
msgstr ""

msgid "Requirements"
msgstr ""

msgid "Enter the key requirements for the position, separated by commas"
msgstr ""

msgid "Responsibilities"
msgstr ""

msgid "Enter a list of responsibilities, separated by commas"
msgstr ""

msgid "Comment"
msgstr ""

msgid "The comment you want to reply to."
msgstr ""

msgid "Hashtags"
msgstr ""

msgid "Enter one or more hashtags, separated by commas"
msgstr ""

msgid "Enter the original tweet to reply to."
msgstr ""

msgid "Email Brief"
msgstr ""

msgid "Enter a brief description of the email"
msgstr ""

msgid "Enter the original email"
msgstr ""

msgid "Product Description"
msgstr ""

msgid "Introduce your product here. Provide a detailed description of its features and benefits, highlighting what sets it apart from competitors and why it's the perfect solution for your target audience."
msgstr ""

msgid "Visual Elements"
msgstr ""

msgid "Enter the visual elements you want to include in the video"
msgstr ""

msgid "Key Points"
msgstr ""

msgid "Enter the main points you want to cover, separated by commas."
msgstr ""

msgid "Host"
msgstr ""

msgid "Enter the name of the host of the podcast"
msgstr ""

msgid "Guest(s) or co-host"
msgstr ""

msgid "Enter the name(s) separated by comma"
msgstr ""

msgid "e.g. Italian, Chinese, Mexican"
msgstr ""

msgid "Type of Dish"
msgstr ""

msgid "e.g. soup, salad, casserole"
msgstr ""

msgid "Ingredients"
msgstr ""

msgid "Enter the ingredients needed for the recipe, separated by commas (e.g. flour, sugar, eggs, milk)"
msgstr ""

msgid "Dietary restrictions"
msgstr ""

msgid "List any dietary restrictions that the recipe should adhere to (e.g. gluten-free, vegan, low-carb)"
msgstr ""

msgid "Command"
msgstr ""

msgid "Enter your command"
msgstr ""

msgid "Instructions"
msgstr ""

msgid "Enter instructions"
msgstr ""

msgid "Document Title"
msgstr ""

msgid "Enter the document title"
msgstr ""

msgid "Generate with AI"
msgstr ""

msgid "%1$sNote:%2$s Your input is processed using AI. Please review and edit before publishing."
msgstr ""

msgid "Not available in your plan."
msgstr ""

msgid "uses"
msgstr ""

msgid "You've sent %d messages this month. Your plan includes Unlimited usage."
msgstr ""

msgid "You've used %d requests this month. Your plan includes Unlimited usage."
msgstr ""

msgid "You've used %1$d of %2$d %3$s this month."
msgstr ""

msgid "{{link}}Click here{{/link}} to learn how to use it."
msgstr ""

msgid "Generate"
msgstr ""

msgid "write requests"
msgstr ""

msgid "Blog Post Wizard"
msgstr ""

msgid "Create a complete blog post in one go. Just fill in some details and Content AI will create a complete blog post for you."
msgstr ""

msgid "Blog Post Idea"
msgstr ""

msgid "Get fresh ideas for engaging blog posts that resonate with your niche and audience, ensuring captivating content."
msgstr ""

msgid "Describe Your Industry/Niche"
msgstr ""

msgid "e.g. Technology blog that covers latest gadgets, tech news, and reviews"
msgstr ""

msgid "Blog Post Outline"
msgstr ""

msgid "Structure blog posts with a clear flow, guiding readers effortlessly for better understanding and engagement."
msgstr ""

msgid "Blog Post Introduction"
msgstr ""

msgid "Craft attractive intros that captivate readers' interest, compelling them to explore further into your blog."
msgstr ""

msgid "Blog Post Conclusion"
msgstr ""

msgid "End your blog posts with impactful summaries, reinforcing key takeaways and leaving a lasting impression."
msgstr ""

msgid "Create eye-catching headlines for articles and blogs, grabbing readers' attention and boosting engagement."
msgstr ""

msgid "Topic Research"
msgstr ""

msgid "Dive deep into comprehensive reports on specific topics, uncovering trends, history, and industry players."
msgstr ""

msgid "Optimize headlines for enhanced visibility, organic traffic, and a stronger online presence."
msgstr ""

msgid "Craft concise and persuasive summaries that captivate readers and search engines, improving click-through rates."
msgstr ""

msgid "Paragraph"
msgstr ""

msgid "Generate well-structured and informative paragraphs, seamlessly blending into your content for better readability."
msgstr ""

msgid "Paragraph Rewriter"
msgstr ""

msgid "Refine paragraphs while preserving meaning, ensuring originality, and enhancing clarity."
msgstr ""

msgid "Sentence Expander"
msgstr ""

msgid "Transform incomplete sentences into polished expressions, adding depth and clarity to your writing."
msgstr ""

msgid "Text Summarizer"
msgstr ""

msgid "Condense complex texts into concise summaries, highlighting crucial points and essential information."
msgstr ""

msgid "Fix Grammar"
msgstr ""

msgid "Utilize AI-powered grammar correction to polish your written content, eliminating errors and improving clarity."
msgstr ""

msgid "Text"
msgstr ""

msgid "Enter the text to fix grammar"
msgstr ""

msgid "Analogy"
msgstr ""

msgid "Enhance clarity by rephrasing text using alternative words, providing a fresh perspective without altering meaning."
msgstr ""

msgid "Craft compelling descriptions that effectively showcase the unique benefits and features of your product."
msgstr ""

msgid "Product Pros & Cons"
msgstr ""

msgid "Present balanced overviews outlining the advantages and limitations, aiding informed decisions."
msgstr ""

msgid "Product Review"
msgstr ""

msgid "Provide detailed evaluations covering strengths, weaknesses, and practical recommendations."
msgstr ""

msgid "Frequently Asked Questions"
msgstr ""

msgid "Address common queries with comprehensive answers, offering valuable information and guidance."
msgstr ""

msgid "Comment Reply"
msgstr ""

msgid "Engage your audience with thoughtful and engaging responses, fostering meaningful interactions."
msgstr ""

msgid "Personal Bio"
msgstr ""

msgid "Create professional and captivating biographies highlighting accomplishments, expertise, and personality."
msgstr ""

msgid "Company Bio"
msgstr ""

msgid "Craft informative overviews of your company's history, values, mission, and team, building credibility."
msgstr ""

msgid "Job Description"
msgstr ""

msgid "Create enticing and comprehensive descriptions outlining requirements, responsibilities, and opportunities."
msgstr ""

msgid "Testimonial"
msgstr ""

msgid "Develop persuasive testimonials sharing positive experiences, endorsing your product, service, or brand."
msgstr ""

msgid "Product or Service"
msgstr ""

msgid "Facebook Post"
msgstr ""

msgid "Create intriguing and shareable content for Facebook, captivating your audience and boosting engagement."
msgstr ""

msgid "Facebook Comment Reply"
msgstr ""

msgid "Generate relevant responses to Facebook comments, build relationships & encourage interaction."
msgstr ""

msgid "Reply brief"
msgstr ""

msgid "Post brief"
msgstr ""

msgid "Create engaging tweets, boost interaction, and foster connections with your followers."
msgstr ""

msgid "Tweet Reply"
msgstr ""

msgid "Generate optimized replies for tweets to promote engagement and strengthen connections."
msgstr ""

msgid "Instagram Caption"
msgstr ""

msgid "Craft catchy captions for Instagram posts to increase engagement and grab attention."
msgstr ""

msgid "Create effective emails for promotions, announcements, and follow-ups to achieve marketing goals."
msgstr ""

msgid "Email Reply"
msgstr ""

msgid "Craft courteous email replies to promote interaction and strengthen relationships."
msgstr ""

msgid "AIDA"
msgstr ""

msgid "Write persuasive text using the Attention-Interest-Desire-Action formula to drive action."
msgstr ""

msgid "IDCA"
msgstr ""

msgid "Create compelling messages using the Identify-Develop-Communicate-Ask strategy to resonate."
msgstr ""

msgid "PAS"
msgstr ""

msgid "Address customer problems with the Problem-Agitate-Solution technique to fulfill needs."
msgstr ""

msgid "HERO"
msgstr ""

msgid "Craft captivating headlines using the HERO formula to engage, reveal, and offer value."
msgstr ""

msgid "SPIN"
msgstr ""

msgid "Describe customer problems, highlight implications, and offer solutions using the SPIN method."
msgstr ""

msgid "BAB"
msgstr ""

msgid "Create a compelling Before-After-Bridge narrative to demonstrate product or service value."
msgstr ""

msgid "YouTube Video Script"
msgstr ""

msgid "Develop engaging video scripts for YouTube to inform, entertain, and align."
msgstr ""

msgid "YouTube Video Description"
msgstr ""

msgid "Generate informative and engaging video descriptions for YouTube."
msgstr ""

msgid "Podcast Episode Outline"
msgstr ""

msgid "Create detailed outlines for podcast episodes, including topics and takeaways."
msgstr ""

msgid "Create detailed and easy-to-follow recipes with ingredients, instructions, and nutrition."
msgstr ""

msgid "Freeform Writing"
msgstr ""

msgid "Generate text based on prompts or topics, allowing for imaginative or technical writing."
msgstr ""

msgid "What do you want to write?"
msgstr ""

msgid "AI Command"
msgstr ""

msgid "Ask AI anything and receive relevant and informative responses for questions or requests."
msgstr ""

msgid "SEO Meta"
msgstr ""

msgid "Optimize headlines and descriptions to improve visibility on search engines."
msgstr ""

msgid "Open Graph"
msgstr ""

msgid "Boost content visibility on social media with topic-specific meta tags for easy discovery."
msgstr ""

msgid "Words: %d"
msgstr ""

msgid "Copy"
msgstr ""

msgid "Insert"
msgstr ""

msgid "Learn how to use this %s Tool effectively."
msgstr ""

msgid "Click Here"
msgstr ""

msgid "Outputs"
msgstr ""

msgid "Generate More"
msgstr ""

msgid "Skip"
msgstr ""

msgid "Write Post"
msgstr ""

msgid "Next Step"
msgstr ""

msgid "Create New Post"
msgstr ""

msgid "Post Outline"
msgstr ""

msgid "Steps"
msgstr ""

msgid "Required fields."
msgstr ""

msgid "%s requests"
msgstr ""

msgid "Output"
msgstr ""

msgid "Suggestions will appear here."
msgstr ""

msgid "%s to access all the Content AI tools"
msgstr ""

msgid "SEO"
msgstr ""

msgid "Marketing & Sales"
msgstr ""

msgid "eCommerce"
msgstr ""

msgid "Misc"
msgstr ""

msgid "Multistep Wizard"
msgstr ""

msgid "Recent"
msgstr ""

msgid "Custom +"
msgstr ""

msgid "Prompts Library"
msgstr ""

msgid "Update Library"
msgstr ""

msgid "Prompt List"
msgstr ""

msgid "Add Custom Prompt +"
msgstr ""

msgid "Prompt Name"
msgstr ""

msgid "Prompt Text"
msgstr ""

msgid "Use [brackets] to insert placeholders."
msgstr ""

msgid "Prompt with this name already exists"
msgstr ""

msgid "Save Prompt"
msgstr ""

msgid "Use Prompt"
msgstr ""

msgid "Your Personal Assistant"
msgstr ""

msgid "Know more about RankBot"
msgstr ""

msgid "Delete Session"
msgstr ""

msgid "New Chat"
msgstr ""

msgid "Buy PRO plan for Multiple Sessions"
msgstr ""

msgid "Examples"
msgstr ""

msgid "Here are some examples of questions you can ask RankBot"
msgstr ""

msgid "You:"
msgstr ""

msgid "RankBot:"
msgstr ""

msgid "Type your message hereâ€¦"
msgstr ""

msgid "Regenerate Response"
msgstr ""

msgid "2000"
msgstr ""

msgid "Send"
msgstr ""

msgid "messages"
msgstr ""

msgid "Write"
msgstr ""

msgid "Copy as Text"
msgstr ""

msgid "Copy as Blocks"
msgstr ""

msgid "Expand Sidebar"
msgstr ""

msgid "Collapse Sidebar"
msgstr ""

msgid "AI History"
msgstr ""

msgid "Words:"
msgstr ""

msgid "No AI History found."
msgstr ""

msgid "Keyword Research"
msgstr ""

msgid "Image Alt Text"
msgstr ""

msgid "Chat (RankBot)"
msgstr ""

msgid "Bulk SEO Meta"
msgstr ""

msgid "Fix with AI"
msgstr ""

msgid "Write More"
msgstr ""

msgid "Could not fetch usage data. Please try again."
msgstr ""

msgid "AI Usage"
msgstr ""

msgid "Refreshingâ€¦"
msgstr ""

msgid "Refresh"
msgstr ""

msgid "If you don't see the latest usage data, click Refresh to sync it from your account."
msgstr ""

msgid "Features"
msgstr ""

msgid "Usage this Month"
msgstr ""

msgid "Unlimited"
msgstr ""

msgid "Usage"
msgstr ""

msgid "Content is %1$s words long. Consider using at least %2$s words."
msgstr ""

msgid "Minimum recommended content length should be %1$d words."
msgstr ""

msgid " words"
msgstr ""

msgid "Snippet Editor"
msgstr ""

msgid "Post Editor"
msgstr ""

msgid "Generated Content"
msgstr ""

msgid "Previous"
msgstr ""

msgid "Next"
msgstr ""

msgid "The highlighted content has been generated by AI for your review. Carefully evaluate the suggested changes and use the options below to accept or reject them."
msgstr ""

msgid "No valid content blocks found. Please add some content blocks to the post."
msgstr ""

msgid "Approve"
msgstr ""

msgid "Reject"
msgstr ""

msgid "Undo"
msgstr ""

msgid "Shorten with AI"
msgstr ""

msgid "â›”ï¸� Monthly Limit Reached!"
msgstr ""

msgid "You've reached the monthly limit for this feature. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and get more usage."
msgstr ""

msgid "Run as Command"
msgstr ""

msgid "Improve"
msgstr ""

msgid "Summarize"
msgstr ""

msgid "Write Analogy"
msgstr ""

msgid "Content AI Commands"
msgstr ""

msgid "Image URL is missing."
msgstr ""

msgid "50 Content AI credits will be used to generate the Alt"
msgstr ""

msgid "Generate With AI"
msgstr ""

msgid "Generate Answer with Content AI"
msgstr ""

msgid "Type / to choose a block or // to use Content AI"
msgstr ""

msgid "Improve your content with a personal Content AI."
msgstr ""

msgid "Improve Now"
msgstr ""

msgid "You have exhausted your Content AI Credits."
msgstr ""

msgid "Get more"
msgstr ""

msgid "You do not have a Content AI plan."
msgstr ""

msgid "Choose your plan"
msgstr ""

msgid "Start using Content AI by connecting your RankMath account."
msgstr ""

msgid "Dismiss"
msgstr ""

msgid "Click or Press Enter"
msgstr ""

msgid "View internal links from this post"
msgstr ""

msgid "View external links from this post"
msgstr ""

msgid "Orphan post â€” no incoming links"
msgstr ""

msgid "This post has no internal links. We recommend that you add links to this URL in other posts of your website."
msgstr ""

msgid "View incoming links to this post"
msgstr ""

msgid "All Posts"
msgstr ""

msgid "Orphan Posts"
msgstr ""

msgid "With Incoming Links"
msgstr ""

msgid "All Scores"
msgstr ""

msgid "Great"
msgstr ""

msgid "Bad"
msgstr ""

msgid "Post Type"
msgstr ""

msgid "All Types"
msgstr ""

msgid "Total Posts"
msgstr ""

msgid "Internal"
msgstr ""

msgid "External"
msgstr ""

msgid "Source Post"
msgstr ""

msgid "Destination"
msgstr ""

msgid "Link Type"
msgstr ""

msgid "Broken"
msgstr ""

msgid "Redirects"
msgstr ""

msgid "Robots Blocked"
msgstr ""

msgid "Marked Safe"
msgstr ""

msgid "Unchecked"
msgstr ""

msgid "Total Links"
msgstr ""

msgid "Bulk Update"
msgstr ""

msgid "Keyword Maps"
msgstr ""

msgid "Source URLs"
msgstr ""

msgid "Ignore Case"
msgstr ""

msgid "This field must not be empty."
msgstr ""

msgid "Maintenance Code"
msgstr ""

msgid "Update Redirection"
msgstr ""

msgid "Add Redirection"
msgstr ""

msgid "Toggle All"
msgstr ""

msgid "Control which user has access to which options of Rank Math."
msgstr ""

msgid "Reset"
msgstr ""

msgid "Update Capabilities"
msgstr ""

msgid "Select Repeat Frequency"
msgstr ""

msgid "Daily"
msgstr ""

msgid "Monthly"
msgstr ""

msgid "Yearly"
msgstr ""

msgid "Podcast Episode"
msgstr ""

msgid "Dataset"
msgstr ""

msgid "Fact Check"
msgstr ""

msgid "Movie"
msgstr ""

msgid "FAQ"
msgstr ""

msgid "HowTo"
msgstr ""

msgid "Delete?"
msgstr ""

msgid "Yes"
msgstr ""

msgid "No"
msgstr ""

msgid "Schema in Use"
msgstr ""

msgid "Multiple Schemas are allowed in the"
msgstr ""

msgid "PRO Version"
msgstr ""

msgid "Add Property"
msgstr ""

msgid "Add Property Group"
msgstr ""

msgid "Duplicate Group"
msgstr ""

msgid "Advanced Editor"
msgstr ""

msgid "Each save will create a new template."
msgstr ""

msgid "Template saved."
msgstr ""

msgid "Save as Template"
msgstr ""

msgid "Saving"
msgstr ""

msgid "Save for this Term"
msgstr ""

msgid "Save for this Post"
msgstr ""

msgid "Are you sure you want to convert? You can't use simple mode for this edited Schema."
msgstr ""

msgid "JSON-LD Code"
msgstr ""

msgid "Test with Google"
msgstr ""

msgid "Preview & Validate Your Schema Markup"
msgstr ""

msgid "Advanced Schema markup viewer"
msgstr ""

msgid "Live testing with Google"
msgstr ""

msgid "No other SEO plugin offers this feature"
msgstr ""

msgid "Code Validation"
msgstr ""

msgid "Schema Builder"
msgstr ""

msgid "More Info"
msgstr ""

msgid "Pro"
msgstr ""

msgid "Available Schema Types"
msgstr ""

msgid "Schema Catalog"
msgstr ""

msgid "Searchâ€¦"
msgstr ""

msgid "Advanced Schema Builder"
msgstr ""

msgid "Possibility to create 700+ Schema Types"
msgstr ""

msgid "Import Schema from ANY website"
msgstr ""

msgid "Create Advanced templates"
msgstr ""

msgid "Schema Templates"
msgstr ""

msgid "Custom Schema"
msgstr ""

msgid "Schema Generator"
msgstr ""

msgid "Configure Schema Markup for your pages. Search engines, use structured data to display rich results in SERPs."
msgstr ""

msgid "Select Schema"
msgstr ""

msgid "FAQ Options"
msgstr ""

msgid "List Style"
msgstr ""

msgid "Title Wrapper"
msgstr ""

msgid "H2"
msgstr ""

msgid "H3"
msgstr ""

msgid "H4"
msgstr ""

msgid "H5"
msgstr ""

msgid "H6"
msgstr ""

msgid "P"
msgstr ""

msgid "DIV"
msgstr ""

msgid "Image Size"
msgstr ""

msgid "Styling Options"
msgstr ""

msgid "Title Wrapper CSS Class(es)"
msgstr ""

msgid "Content Wrapper CSS Class(es)"
msgstr ""

msgid "List CSS Class(es)"
msgstr ""

msgid "Questionâ€¦"
msgstr ""

msgid "Hide Question"
msgstr ""

msgid "Delete Question"
msgstr ""

msgid "Enter the answer to the question"
msgstr ""

msgid "Add New FAQ"
msgstr ""

msgid "Enter a step title"
msgstr ""

msgid "Hide Step"
msgstr ""

msgid "Delete Step"
msgstr ""

msgid "Add Step Image"
msgstr ""

msgid "Enter a step description"
msgstr ""

msgid "HowTo Options"
msgstr ""

msgid "Main Image Size"
msgstr ""

msgid "Step Title Wrapper CSS Class(es)"
msgstr ""

msgid "Step Content Wrapper CSS Class(es)"
msgstr ""

msgid "Step List CSS Class(es)"
msgstr ""

msgid "Add Final Image"
msgstr ""

msgid "Enter a main description"
msgstr ""

msgid "Total time:"
msgstr ""

msgid "DD"
msgstr ""

msgid "HH"
msgstr ""

msgid "MM"
msgstr ""

msgid "Optional, use first field to describe the duration."
msgstr ""

msgid "Add New Step"
msgstr ""

msgid "Heading text"
msgstr ""

msgid "Heading Link"
msgstr ""

msgid "Edit Link"
msgstr ""

msgid "Exclude Headings"
msgstr ""

msgid "Heading "
msgstr ""

msgid "Table of Content Options"
msgstr ""

msgid "Unordered List"
msgstr ""

msgid "Ordered List"
msgstr ""

msgid "Add Heading blocks to this page to generate the Table of Contents."
msgstr ""

msgid "Enter a title"
msgstr ""

msgid "Change URL"
msgstr ""

msgid "Analysing Pageâ€¦"
msgstr ""

msgid "Analysing Websiteâ€¦"
msgstr ""

msgid "Start Page Analysis"
msgstr ""

msgid "Start SEO Analyzer"
msgstr ""

msgid "Restart SEO Analyzer"
msgstr ""

msgid "Print"
msgstr ""

msgid "View Issues"
msgstr ""

msgid "SEO Analysis for"
msgstr ""

msgid "Analyze your site by "
msgstr ""

msgid "linking your Rank Math account"
msgstr ""

msgid "Enter a site URL to see how it ranks for the same SEO criteria as site."
msgstr ""

msgid "Analyze competitor websites to gain an edge"
msgstr ""

msgid "Evaluate strengths and weaknesses"
msgstr ""

msgid "Explore new keywords and opportunities"
msgstr ""

msgid "Make more informed decisions & strategy"
msgstr ""

msgid "The SEO Scores have been recalculated successfully!"
msgstr ""

msgid "Something went wrong. Please try again later."
msgstr ""

msgid "Include posts/pages where the score is already set"
msgstr ""

msgid "Calculating SEO score for posts %1$s - %2$s out of %3$s"
msgstr ""

msgid "Settings File"
msgstr ""

msgid "Choose File"
msgstr ""

msgid "Please select a file to import."
msgstr ""

msgid "Import settings by locating settings file and clicking \"Import settings\"."
msgstr ""

msgid "Are you sure you want to import settings into Rank Math? Don't worry, your current configuration will be saved as a backup."
msgstr ""

msgid "Titles & Metas"
msgstr ""

msgid "Role Manager Settings"
msgstr ""

msgid "Choose the panels to export."
msgstr ""

msgid "Export Settings"
msgstr ""

msgid "Plugin Settings"
msgstr ""

msgid "Import or export your Rank Math settings. This option is useful for replicating Rank Math settings across multiple websites. "
msgstr ""

msgid "Learn more about the Import/Export options."
msgstr ""

msgid "Import finished."
msgstr ""

msgid "No posts found with SEO score."
msgstr ""

msgid "Calculate SEO Scores"
msgstr ""

msgid "Are you sure you want to import data from %s?"
msgstr ""

msgid "Select data to import."
msgstr ""

msgid "Are you sure you want erase all traces of %s?"
msgstr ""

msgid "Clean"
msgstr ""

msgid "Other Plugins"
msgstr ""

msgid "If you were using another plugin to add important SEO information to your website before switching to Rank Math SEO, you can import the settings and data here. "
msgstr ""

msgid "No plugin detected with importable data."
msgstr ""

msgid "Create Backup"
msgstr ""

msgid "Settings Backup"
msgstr ""

msgid "Take a backup of your plugin settings in case you wish to restore them in future. Use it as backup before making substantial changes to Rank Math settings. For taking a backup of the SEO data of your content, use the XML Export option."
msgstr ""

msgid "Backup: %s"
msgstr ""

msgid "Are you sure you want to restore this backup? Your current configuration will be overwritten."
msgstr ""

msgid "Are you sure you want to delete this backup?"
msgstr ""

msgid "There is no backup."
msgstr ""

msgid "System Status"
msgstr ""

msgid "Error Log"
msgstr ""

msgid "If you have %s enabled, errors will be stored in a log file. Here you can find the last 100 lines in reversed order so that you or the Rank Math support team can view it easily. The file cannot be edited here."
msgstr ""

msgid "Copy Log to Clipboard"
msgstr ""

msgid "System Info"
msgstr ""

msgid "Copy System Info to Clipboard"
msgstr ""

msgctxt "block title"
msgid "FAQ by Rank Math"
msgstr ""

msgctxt "block description"
msgid "Easily add Schema-ready, SEO-friendly, Frequently Asked Questions to your content."
msgstr ""

msgctxt "block keyword"
msgid "FAQ"
msgstr ""

msgctxt "block keyword"
msgid "Frequently Asked Questions"
msgstr ""

msgctxt "block keyword"
msgid "Schema"
msgstr ""

msgctxt "block keyword"
msgid "SEO"
msgstr ""

msgctxt "block keyword"
msgid "Structured Data"
msgstr ""

msgctxt "block keyword"
msgid "Yoast"
msgstr ""

msgctxt "block keyword"
msgid "Rank Math"
msgstr ""

msgctxt "block keyword"
msgid "Block"
msgstr ""

msgctxt "block keyword"
msgid "Markup"
msgstr ""

msgctxt "block keyword"
msgid "Rich Snippet"
msgstr ""

msgctxt "block title"
msgid "HowTo by Rank Math"
msgstr ""

msgctxt "block description"
msgid "Easily add Schema-ready, SEO-friendly, HowTo block to your content."
msgstr ""

msgctxt "block keyword"
msgid "HowTo"
msgstr ""

msgctxt "block title"
msgid "Schema by Rank Math"
msgstr ""

msgctxt "block description"
msgid "Add the Schema generated by Rank Math anywhere on your page using this Block."
msgstr ""

msgctxt "block title"
msgid "Table of Contents by Rank Math"
msgstr ""

msgctxt "block description"
msgid "Automatically generate the Table of Contents from the Headings added to this page."
msgstr ""
PK     ’ŠU]Neœo  œo  
  readme.txtnu „[µü¤        === Rank Math SEO â€“ AI SEO Tools to Dominate SEO Rankings ===
Contributors: rankmath
Plugin link: https://rankmath.com/?utm_source=LP&utm_campaign=WP
Tags: seo, google search console, schema, redirection, xml sitemap
Tested up to: 7.0
Requires at least: 6.7
Requires PHP: 7.4
Stable tag: 1.0.274.1
License: GPLv3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.txt

Grow your organic traffic and AI visibility with powerful SEO tools, XML sitemaps, Schema automation, and built-in AI SEO, all in one place.

== Description ==

### Rank Math SEO â€“ WordPress AI SEO Plugin to Rank Higher ðŸ“ˆ ###
â˜…â˜…â˜…â˜…â˜…<br>

**Rank Math SEO**Â helps you stayÂ aheadÂ of competitorsÂ withÂ **AI-powered SEO tools**Â built for modern search engines, AI assistants, and evolving search experiences.Â 

The pluginÂ bringsÂ **advancedÂ AI SEOÂ tools directlyÂ into WordPress**Â andÂ assistsÂ you withÂ optimizingÂ content, generating Schema Markup, intelligent internal linking, keyword optimization, SEO analysis, and so much more.Â 

Trusted by 4+ million WordPress websites, Rank Math is already helping website owners grow their organic traffic faster.Â **If you always feel you can do more on the SEO**Â front for your website butÂ don'tÂ have the time, thenÂ **<a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP" target="_blank">Rank Math SEO</a> is whatÂ you'reÂ looking for.**

## <a href="https://demo.rankmath.com/wp-admin/admin.php?page=rank-math-wizard" target="_blank">Try The FREE Demo of Rank Math</a> ##

[youtube https://www.youtube.com/watch?v=NgeaqIy2OB0]

<a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP#features" target="_blank">Features</a> | <a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP#reasons" target="_blank">Why Choose Rank Math?</a> | <a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP#comparison" target="_blank">Compare</a> | <a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP#screenshots" target="_blank">Screenshots</a> | <a href="https://rankmath.com/wordpress/plugin/seo-suite/?utm_source=LP&utm_campaign=WP#benefits" target="_blank">Benefits</a>


### Exclusive Content AI. Write Highly Optimized SEO Content ###

[youtube https://www.youtube.com/watch?v=tm_dhgbIWow]

Get Started with Content AI for FREE and enjoy: 
âžœ 40+ AI Tools Built for SEO  
âžœ Use AI SEO to write high-quality content 
âžœ Fix SEO Issues in One Click  
âžœ Generate AI Image Alt Text Instantly  
âžœ Get Instant SEO Help with RankBot 
âžœ Full Control via Role Manager

### Rank Math Includes Every SEO Tool You Need to Rank Higher ###

Check out the features exclusive to Rank Math and understand why it is the **right choice for your SEO needs**.

* **Setup Wizard (Easy to follow)**
Rank Math practically configures itself with aÂ [step-by-step installation and configuration wizard](https://rankmath.com/kb/how-to-setup/?utm_source=LP&utm_campaign=WP)Â thatÂ sets upÂ SEO forÂ yourÂ WordPressÂ siteÂ perfectly.
* **Google Schema Markup Integrated**
With support forÂ [16+ types of Schema Markups,](https://rankmath.com/kb/rich-snippets/?utm_source=LP&utm_campaign=WP#schema-types-offers-by-rank-math)Â you'llÂ be able toÂ optimizeÂ your posts for rich snippets in just a few clicks.
* **Optimize Unlimited Keywords**
Unlike other plugins, Rank Math lets youÂ optimizeÂ your posts forÂ **unlimited focus keywords**Â per post. 5 by default. Increase by adding thisÂ [filter](https://rankmath.com/kb/filters-hooks-api-developer/?utm_source=LP&utm_campaign=WP#unlimited-keywords).
* **Content AI:Â Your Personal AI SEO Assistant**
Rank MathÂ includes built-in AIÂ for creating SEO-friendly content.Â Our [Content AI](https://rankmath.com/kb/how-to-use-content-ai/?utm_source=LP&utm_campaign=WP)Â ensures that the content you write is great not only for your visitors but for search engines as well.
* **Google Search Console Integration**
Rank Math integrates with Google Search Console and displays important website insights directly inside WordPress.
* **Google Analytics Integration**
Rank Math offers a one-click solution to install Google Analytics script without pasting anything manually anywhere.
* **LSI Keyword Tool Integrated**
Rank Math's integrated LSI keyword tool gives you multiple keyword variations of your focus keyword, which helps you attract more traffic to your posts.
*   **XML Sitemap**Â The Rank Math plugin comes with a fast-loading Sitemap feature that works with different post types, including custom ones, and provides deep control.Â Â  
*   **Deep Content Analysis Tests**Â On-page SEO is no longer a mystery with Rank Math's deep content analysis and precise recommendations.Â 
*   **30 Detailed SEO Tests**Â Rank Math is designed toÂ ultimately superchargeÂ your website's SEO with its 30 detailed SEO testsÂ on your website with a single click. A free account is needed.Â 
*   **Module Based System**Â Rank Math is designed to give you all the control with its module-based system, which you can customize according to your needs.Â 
*   **SEO Optimized Breadcrumbs**Â Rank Math can display SEO-optimized Breadcrumbs on all websites, even if the themeÂ doesn'tÂ supportÂ [Schema.org](http://schema.org/)Â coding.Â 
*   **Smart Redirection Manager**Â Rank Math's built-in smart redirection manager will help you create, manage,Â delete, enable, or disable redirects at scale.Â 
*   **404 Monitor**Â Rank Math has a built-in 404 error monitor that helps you find and resolve 404 errors for a better user experience.Â 
*   **Internal Linking Suggestions**Â Rank Math intelligently suggests other posts from your website for internal linking from your current posts, improving the chances of ranking higher in the SERPs.Â  
*   **Role Manager**Â Even if you have multiple employees managing your website, you can precisely control what each of them has access to in Rank Math with its role manager.Â  
*   **Multisite Ready**Â Whether you run a single WordPress website or an entire network of sites â€“ we are ready for you. Rank Math fully supports the WordPress Multiuser project (WPMU).

### Why is Rank Math such a game-changer? ###

*   **Auto Configuration**Â â€” All youÂ have toÂ do isÂ setÂ a few options, and Rank Math will configure itself ideally for your website.
*   **Super FastÂ SEO Plugin**Â â€” Even after packing so many features, Rank Math hasÂ a negligible load on your server, thus making it one of the fastest SEO plugins for WordPress.
*   [**Elementor SEO**](https://rankmath.com/blog/elementor-seo/?utm_source=LP&utm_campaign=WP)Â â€“Â Deep integration with Elementor lets youÂ configure SEO directly inside the visual editor without switching tabs.
*   [**Divi SEO**](https://rankmath.com/blog/divi-seo/?utm_source=LP&utm_campaign=WP)Â â€“Â Seamless integration with Divi allows you toÂ optimizeÂ SEO in real-time directly from the page builder.
*   **Page Builder SEO**Â â€“ Rank Mathâ€™sÂ content analysis works perfectly with popular page builders and themes like Oxygen Builder,Â WPBakery, Avada, Astra, Kadence,Â Themify, Beaver Builder, Page Builder Framework, Schema theme,Â Flothemes,Â OceanWP, etc.
*   **Image SEO**Â â€“Â AutomaticallyÂ add ALT & Title tags on the fly, toÂ optimizeÂ images, showing inside the content, and that too for FREE.
*   [**WooCommerce SEO**](https://rankmath.com/blog/woocommerce-seo/?utm_source=LP&utm_campaign=WP)Â â€“ Optimizing your store products is easier with Rank Math. SEO Meta tags and Schema are automatically added but can be customized with total control. Rank Math has the most advanced SEO for WooCommerce.
*   **Local Business SEO**Â â€“Â Rank Math is designed to be used by global and local websites alike. With its local SEO features, local sites can stand out in search engine results like Google's and attract more traffic.
*   **GoogleÂ AMP SEO**Â â€“Â Rank Math uses your SEO data automatically toÂ optimizeÂ your Accelerated Mobile Pages for search engines.Â 
*   **bbPressÂ &Â BuddyPressÂ SEO**Â â€“ User-generated content inÂ bbPress/BuddyPressÂ isÂ optimizedÂ correctly, and Rank Math handles all the necessary SEO aspects. Q&A Schema is added toÂ bbPressÂ topics along with other essential meta tags.
*   **Translation PluginsÂ Support**Â â€” Rank Math works flawlessly with the top translation plugins like WPML, TranslatePress,Â Weglot,Â PolylangÂ (not entirely compatible yet), etc., making it a perfect companion.
*   **1-Click ImportÂ FromÂ Yoast**Â â€” With a single click, Rank Math can import all your settings from Yoast SEO & Yoast SEO Premium to itselfÂ without any drop in rankings.
*   **1-Click ImportÂ FromÂ AIO SEO**Â â€” Rank Math can also import all your settings from AIO SEO & All in One SEO Pack Pro in a single clickÂ without losing rankings.
*   **1-Click Import From All in One Schema,Â SEOPress, and Redirection**Â â€”Rank Math allows seamless migration of settings from plugins like All In One Schema Rich Snippets,Â SEOPressÂ (including Pro), and Redirection with just a single click, ensuring no loss of rankings or data during the transfer.

### Who Can Benefit From Rank Math? ###

#### Rank Math Plugin is perfect for: ####
âœ” Bloggers
âœ” eCommerce Store Owners
âœ” Niche Sites
âœ” Businesses
âœ” Agencies
âœ” Local Businesses
âœ” Startups
âœ” The Real Estate
âœ” Artists & Photographers
âœ” The Solution Offerer
âœ” Directories
âœ” Vloggers (Video Bloggers)
âœ” Or any WordPress Website

### Take a sneak peek into Rank Mathâ€™s features ###

#### Detailed Setup Tutorial ####
[youtube https://www.youtube.com/watch?v=cQLvCBVev3I]

### BIG Publications are Raving About Rank Math ###
**<a href="https://rankmath.com/reviews/?utm_source=LP&utm_campaign=WP" target="_blank">Rank Math Reviews</a>**

[youtube https://www.youtube.com/watch?v=cFI_jRVOQZk]

[youtube https://www.youtube.com/watch?v=rkZRtRizyUw]

<a href="https://www.matthewwoodward.co.uk/seo/reviews/rank-math/?utm_campaign=Rank+Math" target="_blank">Rank Math Review â€“ Why I Ditched Yoast For Rank Math</a>

<a href="https://www.producthunt.com/posts/rank-math-seo/?utm_campaign=Rank+Math" target="_blank">Rank Math on Product Hunt</a>

<a href="https://www.suganthan.com/blog/rank-math-seo-plugin-review-from-an-seo-guy/?utm_campaign=Rank+Math" target="_blank">Rank Math Plugin Review from an SEO Consultant</a>

and many more


## Check RANK MATH PRO WHICH MAKES SEO EASIER & FASTER  ##
[youtube https://www.youtube.com/watch?v=fq8Dnl09W5g]

## <a href="https://rankmath.com/free-vs-pro/?utm_source=LP&utm_campaign=WP" target="_blank">Rank Math FREE VS PRO COMPARISON</a> ##

## UNIQUE FEATURES OF Rank Math PRO ##

**AI Link Genius**Â 
âœ” AI-Powered Internal Link Suggestions 
âœ” Auto-Link Keyword Variations 
âœ” Automatic Link Audits & Monitor Link Health 
âœ” Bulk Link Update Tool

**Google Analytics & Search Console Integration**Â 
âœ” Integrated Google Analytics, AdSense & Search Console Data 
âœ” Analyze the SEO Performance of Each Post & Page 
âœ” See Top Winning/Losing Posts & Keywords 
âœ” Keep Track of Position History 
âœ” Rank Tracker for Important Keywords 

**Schema aka Structured Data aka Rich Snippets**Â 
âœ” 20+ Pre-defined Schema types 
âœ” Import Schema from Other Websites 
âœ” Advanced Schema Builder to create any complex Schema Markup 
âœ” Schema Templates for Automation 
âœ” Conditional Schema Markup 
âœ” Multiple Location Schema On Any Page (using the Shortcode)

**SEO Automation**Â 
âœ”Â Automated Image SEOÂ 
âœ” Advanced Filtering for Images [https://i.rankmath.com/zAUHHP]
âœ” Watermark Your imagesÂ 
âœ” Advanced Post filteringÂ 
âœ” Bulk Actions [index,Â noindex, redirect, etc.]Â 
âœ” Quick Edit SEO DetailsÂ 
âœ”Â [Bulk Import SEO Meta Details Using CSV file](https://www.youtube.com/watch?v=qW_h4cVE1O8)Â 
âœ” Auto Detect Videos and Generate Schema Markup for ThemÂ 
âœ” Auto Fetch Thumbnail, Duration of YouTube & Vimeo VideosÂ 
âœ” Automatically Flush Facebook ThumbnailsÂ 
âœ” Open External Links in New TabsÂ 
âœ” Nofollow External LinksÂ 
âœ”Â NoindexÂ Paginated, Archive, Search Result PagesÂ 
âœ” Instant Indexing for Bing & Yandex [Also Google using ourÂ [Instant Indexing Plugin](https://rankmath.com/blog/google-indexing-api/?utm_source=LP&utm_campaign=WP)]Â 

**WooCommerce SEO**Â 
âœ” Automatic Schema for WooCommerce Products 
âœ” Advanced Open Graph Tags for WooCommerce Products 
âœ” Automatic NoIndex Hidden Products 
âœ” Remove WooCommerce Product and Category Base 
âœ” Add Custom Brands to Products 
âœ” Add Global Identifier Schema Like GTIN/MPN â€“ Even to Variations 

**MANY MORE FEATURES**
âœ” PREMIUM 24x7x365 Dedicated Support Managers 
âœ” MOST COMPETITIVE PRICING EVER! 

**<a href="https://rankmath.com/pricing/?utm_source=LP&utm_campaign=WP" target="_blank">CHECK ALL THE PREMIUM FEATURES AND PRICING HERE</a>**


## CONNECT WITH THE TEAM AND SEO EXPERTS ##

**<a href="https://www.facebook.com/groups/rankmathseopluginwordpress/?utm_campaign=Rank+Math" target="_blank">JOIN FACEBOOK GROUP COMMUNITY</a>**: The purpose of this Facebook group is to have a collective place where the community can help each other, and we can get some feedback to improve Rank Math as well. Joining the group is also a great way to connect with like-minded people and share your SEO experience.

= Branding Guideline =
Rank MathÂ® SEO is a registered trademark. Please use the following format when mentioning the Rank Math plugin anywhere.
* Rank Math [correct]
* RankMath [incorrect]
* Rankmath [incorrect]
* rankmath [incorrect]
* rankMath [incorrect]


== Installation ==

1. Visit `Plugins > Add New`
2. Search for `Rank Math`
3. Install Rank Math once it appears
4. Activate Rank Math from your Plugins page.
5. Go to "after activation" below.

= Manually =

1. Upload the `seo-by-rank-math` folder to the `/wp-content/plugins/` directory
2. Activate the Rank Math plugin through the 'Plugins' menu in WordPress
3. Go to "after activation" below.

= After Activation =

1. You should see the Rank Math setup wizard. 
2. Go through the setup wizard and set up the plugin for your site. 
3. Youâ€™re done! 

= Getting Started: =
**<a href="https://rankmath.com/kb/how-to-setup/?utm_source=LP&utm_campaign=WP" target="_blank">1. How to Setup Rank Math:</a>** Once you install Rank Math for the first time, you will be greeted with the Setup Wizard, which is discussed in detail here.

**<a href="https://rankmath.com/kb/wordpress/seo-suite/?utm_source=LP&utm_campaign=WP" target="_blank">2. User Documentation:</a>** Although Rank Math is already easy to set up, we've put together tutorials, guides, and some knowledge bases to help you set up and get started with Rank Math.

**<a href="https://translate.wordpress.org/projects/wp-plugins/seo-by-rank-math/?utm_campaign=Rank+Math" target="_blank">3. Contribute (Sharing is caring):</a>** If you are one of those caring hearts that want to help, please check the following resources:
* [Rank Math's GitHub repository](https://github.com/RankMath/seo-by-rank-math/) â€“ Includes all the uncompressed files.
* [Content Analyzer Code Files](https://github.com/rankmath/content-analyzer) â€“ Includes all supplementary uncompressed files.
* [Translation](https://translate.wordpress.org/projects/wp-plugins/seo-by-rank-math/) â€“ If you want to translate the plugin into your local language.

**<a href="https://rankmath.com/support/?utm_source=LP&utm_campaign=WP" target="_blank">4. Plugin Support:</a>** We offer support through email for any issues you face with Rank Math. User experience is important to us, and we aim to provide prompt and helpful support whenever you need it. 

**[5. Frequently Asked Questions:](#faq-header)** Here, weâ€™ve answered the most commonly asked questions about Rank Math around its features, pricing, and others. 

== Frequently Asked Questions ==

= Can I transfer my SEO & Redirection settings from another plugin to Rank Math? =
Absolutely. Rank Math has a built-in feature to import SEO settings from popular SEO plugins like Yoast SEO, Yoast SEO Premium, AIO SEO Pack, All In One Schema Rich Snippets, and Redirection. Once you install Rank Math and run the setup wizard, you'll see a dedicated step where you'll get to import all your SEO settings to Rank Math.

= What themes does Rank Math support? =
Rank Math has been tested with many WordPress themes and supports all major WordPress themes. Since we follow WordPress plugin development guidelines, you can rest assured that Rank Math will work perfectly, no matter your theme. If you've installed Rank Math and are facing issues, it might not be because of theme incompatibility. Please contact the support team by opening a support ticket in our support forum, and we will fix it for you.

= What plugins is Rank Math compatible with? =
Rank Math has been designed using WordPress' strict plugin development guidelines and, therefore, is compatible with most plugins. However, you might get unexpected results if you use another SEO plugin that performs any of the functions that Rank Math does. We recommend that you disable or delete other SEO plugins for best results.

= Will my website slow down if I Install Rank Math? =
No. Rank Math's code has been created and optimized for maximum performance. That is why using Rank Math on your website will not slow down your website. On the contrary, your website will perform better than ever with Rank Math, as it does the job of multiple plugins. Once you remove the unnecessary plugins from your website, your website's performance is sure to get better.

= Is creating a Rank Math account needed to use the plugin? =
Not at all. Creating a FREE Rank Math account is needed only to utilize our API, which allows you get automatic keyword suggestions from Google and run SEO Site Analysis inside WordPress. <a href="https://rankmath.com/kb/free-account-benefits/?utm_source=LP&utm_campaign=WP" target="_blank">You can read more about that here.</a>

= Will you set up Rank Math on my website? =
Rank Math is pretty easy to set up on your website. Apart from detailed instructions on installing Rank Math on our website, we've built a user-friendly setup wizard that will help you set up and configure Rank Math ideally for your website. If you face any issues even after using the setup wizard, please get in touch with the support team by sending an email to support@rankmath.com

= Do I have to remove other SEO plugins if I install Rank Math? =
That is recommended. Rank Math is designed to be an all-in-one SEO plugin that handles everything SEO-related. If you use other SEO plugins with Rank Math on your website, not only will the performance of your website be negatively affected, but both plugins working together can produce unexpected SEO results.

= I already use an SEO plugin. Can I use Rank Math on top of that plugin? =
You can, but we do not recommend it. Rank Math has all the functionalities you need in an SEO plugin. You can do that if you still prefer using another plugin for a specific feature. However, we recommend that you turn off that functionality of Rank Math to avoid potential conflicts/issues.

= Will I lose my rankings if I switch to Rank Math? =
No, you won't. When you install Rank Math, it will seamlessly import your settings from your current SEO plugin. Once the process is complete, the search engines won't notice a change on your website.

If you set up Rank Math from scratch, your search engine rankings will depend on how you configure it. But please be advised that Google and other search engines prefer good, helpful content over anything else.

= Where do I report security bugs found in this plugin? =

Please report security bugs found in the source code of the Rank Math SEO plugin through the [Patchstack Vulnerability Disclosure  Program](https://patchstack.com/database/vdp/9e5fb4c0-23d7-4a55-9a5c-256a4c6daf1e). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.

= Can I use Rank Math on a WordPress.com website? =
Yes, as the plugin is provided through WordPress.org, it is available on WordPress.com as well. However, you might be required to opt for the business plan on WordPress.com.

= I have further questions; how do I contact you? =
Please drop us an email at support@rankmath.com, and we will be more than happy to assist you.

== External Services ==

Rank Math SEO connects to several external services to provide its features. Below is a full disclosure of each service, what data is sent, and when.

= Rank Math Keyword Suggestions API (api.rankmath.com) =

Used to provide live keyword suggestions as you type in the Focus Keyword field in the post editor.

* **Keyword suggestions:** Each time you type in the Focus Keyword field, the keyword and your site's locale are sent to api.rankmath.com to retrieve related keyword suggestions. This call is made directly from your browser. No account or login is required for this feature.

Service provider: Rank Math (ONE.COM INDIA PRIVATE LIMITED)
Privacy policy: https://rankmath.com/privacy-policy/
Terms of service: https://rankmath.com/terms-of-service/

= Rank Math API (rankmath.com) =

Used for site registration, license verification, and the SEO Analysis feature.

* **Site registration / account connection:** Sends your site URL, Rank Math username, and API key when you connect your Rank Math account. This is required to activate API-based features.
* **Site disconnection:** Sends your site URL, username, and API key when you disconnect your account to remove the registration from Rank Math's servers.
* **SEO Analysis:** Sends your site URL, target keyword, and language when you run an SEO site analysis. Results are returned as a scored report.
* **Dashboard widget:** Fetches the latest Rank Math blog posts to display in the WordPress admin dashboard widget. No personal data is sent. Results are cached for 12 hours.

Service provider: Rank Math (ONE.COM INDIA PRIVATE LIMITED)
Privacy policy: https://rankmath.com/privacy-policy/
Terms of service: https://rankmath.com/terms-of-service/

= Rank Math OAuth Connector (oauth.rankmath.com) =

Used to connect your site to Google services (Search Console, Google Analytics) via OAuth.

* **OAuth token exchange:** When you authorize Google services, your browser is redirected through oauth.rankmath.com to exchange the authorization code for access and refresh tokens. The authorization code is sent to this service; it returns OAuth tokens for use on your site.
* **Token refresh:** Sends your Google refresh token to obtain a new access token when the current one expires.

Service provider: Rank Math (ONE.COM INDIA PRIVATE LIMITED)
Privacy policy: https://rankmath.com/privacy-policy/
Terms of service: https://rankmath.com/terms-of-service/

= Rank Math Content AI (cai.rankmath.com) =

Used to power AI-based content features. Only active when the Content AI module is enabled and you have a connected Rank Math account.

* **Keyword research:** Sends the target keyword, language, and country to fetch keyword suggestions and metrics.
* **Bulk SEO meta generation:** Sends post title and content to generate SEO titles and descriptions in bulk.
* **Bulk image alt text generation:** Sends image data (base64-encoded) to generate descriptive alt text for images.
* **Default prompts sync:** Sends your site URL, username, API key, and plugin version daily to keep AI prompt templates up to date.
* **Credits/wallet check:** Sends your username, API key, and site URL to check remaining Content AI usage credits.

Service provider: Rank Math (ONE.COM INDIA PRIVATE LIMITED)
Privacy policy: https://rankmath.com/privacy-policy/
Terms of service: https://rankmath.com/terms-of-service/

= Google APIs (googleapis.com, google.com) =

Used by the Analytics module to retrieve website performance data. Only active when you have connected Google Analytics via the Rank Math Analytics module.

* **Google Analytics data:** Sends your OAuth access token to fetch data like traffic, keyword, impressions, etc for your site from the Google Analytics API.
* **Token verification:** Sends your OAuth access token to verify its validity and authorized scopes.
* **Google Tag Manager script (googletagmanager.com):** When a Google Analytics / Google Tag property ID is configured, the Google Tag (gtag.js) script is loaded from googletagmanager.com on your site's front end.
* **AMP analytics (cdn.ampproject.org):** When AMP is active and a Google Analytics property is configured, the AMP analytics component script is loaded from cdn.ampproject.org.

Service provider: Google LLC
Privacy policy: https://policies.google.com/privacy
Terms of service: https://policies.google.com/terms

= IndexNow API (api.indexnow.org) =

Used by the Instant Indexing module to notify search engines of new or updated content. Only active when the Instant Indexing module is enabled.

* Sends a list of URLs, your site URL, and your IndexNow API key to api.indexnow.org each time content is published or updated (or manually triggered).

Service provider: Microsoft (Bing)
Privacy policy: https://privacy.microsoft.com/en-us/privacystatement
Terms of service: https://www.indexnow.org/faq

= Facebook Graph API (graph.facebook.com) =

Used to refresh Facebook's cached preview when a post is updated. Only active when a Facebook App ID and App Secret are configured in Rank Math's Social settings.

* Sends the post's public URL and your Facebook App credentials to trigger a re-scrape of the page by Facebook.

Service provider: Meta Platforms, Inc.
Privacy policy: https://www.facebook.com/privacy/policy/
Terms of service: https://developers.facebook.com/terms/

== Screenshots ==

1. Exclusive AI Assistant for creating content that ranks.
2. Fully integrated with the Gutenberg, aka Block Editor.
3. Optimize Content without any hassle and work with the Classic Editor.
4. Analyze your website's SEO with one click and fix the issues.
5. Simple Setup Wizard with 1-Click Importer.
6. Support for 15+ Rich Snippet types.
7. No need to pay for any service when you can track keyword ranking changes from our own Search Console.
8. Comes with in-built options for social media optimization.
9. Rank Math Comes with a 404 monitor and an easy-to-use Redirection Manager.
10. Ground-breaking Integration with Elementor Page Builder.
11. Powerful XML Sitemap.
12. Role Manager gives you full control. Useful for multi-author sites.
13. Rank Math Comes with 15+ FREE modules.

== Changelog ==

= 1.0.274 [Jul 14, 2026] =
- Added `rank-math/get-top-keywords` [MCP Tool](https://rankmath.com/kb/mcp-tools) to let AI assistants retrieve top-performing keywords from Google Search Console with impressions, CTR, and average position.
- Added `rank-math/analyze-post-content` [MCP Tool](https://rankmath.com/kb/mcp-tools) to let AI assistants run Rank Math's full on-page SEO analysis for a post and see which tests passed or failed.
- Added `rank-math/get-seo-scores` [MCP Tool](https://rankmath.com/kb/mcp-tools) to let AI assistants retrieve SEO scores and grades for posts, with filtering by score range or missing focus keyword.
- Fixed [AI Visibility](https://rankmath.com/ai-visibility/) "Add Your First Brand" modal that was not displaying on WordPress 6.7.5â€“6.8.5.
- Fixed an issue with MixPanel usage events
- Fixed fatal error on [Status & Tools â†’ System Status](https://rankmath.com/kb/rank-math-status-and-tools/) caused by an undefined function on some hosts.
- Fixed the [Setup Wizard](https://rankmath.com/kb/how-to-access-setup-wizard/) help search that was linking to the general KB page instead of the searched query.
- Fixed PHP warning that was logged when creating a new taxonomy term with SEO controls enabled for tags.
- Fixed Classic revisions editor that was appearing inside the Block Editor when Rank Math was active.
- Fixed [Content AI](https://rankmath.com/kb/how-to-use-content-ai/) media file suggestions that were incorrect on top-level pages.
- Fixed [Redirections](https://rankmath.com/kb/setting-up-redirections/) query parameters that were not merging correctly when appended to the destination URL.

= 1.0.274.1 [Jul 15, 2026] =
- Fixed a fatal error that occurred when editing a post using [Divi's Front-end/Visual Builder](https://rankmath.com/blog/divi-seo/).


Full changelog can be found here - **[Rank Math changelog](https://rankmath.com/changelog/?utm_source=Plugin&utm_medium=Changelog&utm_campaign=WP)**PK     ’ŠU]ßNÏZÉ  É    wpml-config.xmlnu „[µü¤        <wpml-config>
	<custom-fields>
		<custom-field action="translate">rank_math_title</custom-field>
		<custom-field action="translate">rank_math_description</custom-field>
		<custom-field action="translate">rank_math_facebook_title</custom-field>
		<custom-field action="translate">rank_math_facebook_description</custom-field>
		<custom-field action="translate">rank_math_twitter_title</custom-field>
		<custom-field action="translate">rank_math_twitter_description</custom-field>
		<custom-field action="translate">rank_math_focus_keyword</custom-field>
		<custom-field action="ignore">rank_math_canonical_url</custom-field>
		<custom-field action="copy-once">rank_math_robots</custom-field>
		<custom-field action="copy-once">rank_math_pillar_content</custom-field>
		<custom-field action="copy">rank_math_facebook_enable_image_overlay</custom-field>
		<custom-field action="copy">rank_math_facebook_image_overlay</custom-field>
		<custom-field action="copy">rank_math_twitter_use_facebook</custom-field>
		<custom-field action="copy">rank_math_twitter_card_type</custom-field>
		<custom-field action="copy">rank_math_twitter_enable_image_overlay</custom-field>
		<custom-field action="copy">rank_math_twitter_image_overlay</custom-field>
	</custom-fields>
	<admin-texts>
		<key name="rank-math-options-titles">
			<key name="title_separator"/>
			<key name="homepage_title"/>
			<key name="homepage_description"/>
			<key name="homepage_facebook_title"/>
			<key name="homepage_facebook_description"/>
			<key name="url_author_base"/>
			<key name="author_archive_title"/>
			<key name="author_archive_description"/>
			<key name="date_archive_title"/>
			<key name="date_archive_description"/>
			<key name="search_title"/>
			<key name="404_title"/>
			<key name="pt_*_title"/>
			<key name="pt_*_description"/>
			<key name="pt_*_archive_title"/>
			<key name="pt_*_archive_description"/>
			<key name="pt_*_default_snippet_name"/>
			<key name="pt_*_default_snippet_desc"/>
			<key name="tax_*_title"/>
			<key name="tax_*_description"/>
		</key>
		<key name="rank-math-options-general">
			<key name="img_alt_format"/>
			<key name="img_title_format"/>
			<key name="breadcrumbs_separator"/>
			<key name="breadcrumbs_prefix"/>
			<key name="breadcrumbs_home_link"/>
			<key name="breadcrumbs_home_label"/>
			<key name="breadcrumbs_archive_format"/>
			<key name="breadcrumbs_search_format"/>
			<key name="breadcrumbs_404_label"/>
			<key name="rss_before_content"/>
			<key name="rss_after_content"/>
		</key>
	</admin-texts>
	<gutenberg-blocks>
		<gutenberg-block type="rank-math/faq-block" translate="1">
			<key name="questions">
				<key name="*">
					<key name="title"/>
					<key name="content"/>
				</key>
			</key>
		</gutenberg-block>
		<gutenberg-block type="rank-math/howto-block" translate="1">
			<key name="description"/>
			<key name="steps">
				<key name="*">
					<key name="title"/>
					<key name="content"/>
				</key>
			</key>
		</gutenberg-block>
	</gutenberg-blocks>
</wpml-config>PK     “ŠU]QƒqÃ†  †    includes/class-defaults.phpnu „[µü¤        <?php
/**
 * Defaults by plugins.
 *
 * @since      1.0.40
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Defaults class.
 */
class Defaults {

	use Hooker;

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->filter( 'rank_math/excluded_taxonomies', 'exclude_taxonomies' );
		$this->filter( 'rank_math/excluded_post_types', 'excluded_post_types' );
	}

	/**
	 * Exclude taxonomies.
	 *
	 * @param array $taxonomies Excluded taxonomies.
	 *
	 * @return array
	 */
	public function exclude_taxonomies( $taxonomies ) {
		if ( ! current_theme_supports( 'post-formats' ) ) {
			unset( $taxonomies['post_format'] );
		}
		unset( $taxonomies['product_shipping_class'] );

		return $taxonomies;
	}

	/**
	 * Exclude post_types.
	 *
	 * @param array $post_types Excluded post_types.
	 *
	 * @return array
	 */
	public function excluded_post_types( $post_types ) {
		if ( isset( $post_types['elementor_library'] ) ) {
			unset( $post_types['elementor_library'] );
		}

		return $post_types;
	}
}
PK     “ŠU]Ý¸Ÿ‹‡  ‡  $  includes/helpers/class-post-type.phpnu „[µü¤        <?php
/**
 * The Post_Type helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Post Type class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
trait Post_Type {

	/**
	 * Check if post is indexable.
	 *
	 * @param int  $post_id                    Post ID to check.
	 * @param bool $should_check_excluded_list Whether to check if the post is excluded from the sitemap.
	 *
	 * @return boolean
	 */
	public static function is_post_indexable( $post_id, $should_check_excluded_list = true ) {
		if ( $should_check_excluded_list && true === self::is_post_excluded( $post_id ) ) {
			return false;
		}

		$robots = self::is_post_meta_indexable( $post_id );
		if ( is_bool( $robots ) ) {
			return $robots;
		}

		$post_type = get_post_type( $post_id );
		$robots    = Helper::get_settings( 'titles.pt_' . $post_type . '_custom_robots' );
		$robots    = false === $robots ? Helper::get_settings( 'titles.robots_global' ) : Helper::get_settings( 'titles.pt_' . $post_type . '_robots' );

		return in_array( 'noindex', (array) $robots, true ) ? false : true;
	}

	/**
	 * Check if post is indexable by meta.
	 *
	 * @param int $post_id Post ID to check.
	 *
	 * @return boolean
	 */
	private static function is_post_meta_indexable( $post_id ) {
		$robots = Helper::get_post_meta( 'robots', $post_id );
		if ( empty( $robots ) || ! is_array( $robots ) ) {
			return '';
		}

		if ( in_array( 'index', $robots, true ) ) {
			return true;
		}

		return in_array( 'noindex', $robots, true ) ? false : '';
	}

	/**
	 * Check if post is explicitly excluded.
	 *
	 * @param  int $post_id Post ID to check.
	 * @return bool
	 */
	public static function is_post_excluded( $post_id ) {
		static $posts_to_exclude;

		if ( ! isset( $posts_to_exclude ) ) {
			$posts_to_exclude = wp_parse_id_list( Helper::get_settings( 'sitemap.exclude_posts' ) );
			$posts_to_exclude = apply_filters( 'rank_math/sitemap/posts_to_exclude', $posts_to_exclude );
		}

		return in_array( $post_id, $posts_to_exclude, true );
	}

	/**
	 * Check if post type is indexable.
	 *
	 * @param  string $post_type Post type to check.
	 * @return bool
	 */
	public static function is_post_type_indexable( $post_type ) {
		if ( Helper::get_settings( 'titles.pt_' . $post_type . '_custom_robots' ) ) {
			if ( in_array( 'noindex', (array) Helper::get_settings( 'titles.pt_' . $post_type . '_robots' ), true ) ) {
				return false;
			}
		}

		return Helper::get_settings( 'sitemap.pt_' . $post_type . '_sitemap' );
	}

	/**
	 * Check if post type is accessible.
	 *
	 * @param  string $post_type Post type to check.
	 * @return bool
	 */
	public static function is_post_type_accessible( $post_type ) {
		return in_array( $post_type, self::get_allowed_post_types(), true );
	}

	/**
	 * Get the post type label.
	 *
	 * @param  string $post_type Post type name.
	 * @param  bool   $singular  Get singular label.
	 * @return string|false
	 */
	public static function get_post_type_label( $post_type, $singular = false ) {
		$object = get_post_type_object( $post_type );
		if ( ! $object ) {
			return false;
		}
		return ! $singular ? $object->labels->name : $object->labels->singular_name;
	}

	/**
	 * Get post types that are public and not set to noindex.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array All the accessible post types.
	 */
	public static function get_accessible_post_types() {
		static $accessible_post_types;

		if ( isset( $accessible_post_types ) && did_action( 'wp_loaded' ) ) {
			return $accessible_post_types;
		}

		$accessible_post_types = get_post_types( [ 'public' => true ] );
		$accessible_post_types = array_filter( $accessible_post_types, 'is_post_type_viewable' );

		/**
		 * Changing the list of accessible post types.
		 *
		 * @api array $accessible_post_types The post types.
		 */
		$accessible_post_types = apply_filters( 'rank_math/excluded_post_types', $accessible_post_types );

		if ( ! is_array( $accessible_post_types ) ) {
			$accessible_post_types = [];
		}

		return $accessible_post_types;
	}

	/**
	 * Get accessible post types.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function get_allowed_post_types() {
		static $rank_math_allowed_post_types;

		if ( isset( $rank_math_allowed_post_types ) ) {
			return $rank_math_allowed_post_types;
		}

		$rank_math_allowed_post_types = [];
		foreach ( self::get_accessible_post_types() as $post_type ) {
			if ( false === apply_filters( 'rank_math/metabox/add_seo_metabox', Helper::get_settings( 'titles.pt_' . $post_type . '_add_meta_box', 'web-story' !== $post_type ) ) ) {
				continue;
			}

			$rank_math_allowed_post_types[] = $post_type;
		}

		return $rank_math_allowed_post_types;
	}
}
PK     “ŠU]—§ÁÀŠ  Š  %  includes/helpers/class-attachment.phpnu „[µü¤        <?php
/**
 * The Attachment helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Attachment trait.
 */
class Attachment {

	/**
	 * Check if a post can be included in sitemap.
	 *
	 * @param  int $attachment_id Attachment ID to check.
	 * @return bool
	 */
	public static function attachment_in_sitemap( $attachment_id ) {
		if ( empty( $attachment_id ) ) {
			return false;
		}

		$exclude_sitemap = get_post_meta( $attachment_id, 'rank_math_exclude_sitemap', true );

		return empty( $exclude_sitemap );
	}

	/**
	 * Generate local path for an attachment image.
	 * Credit: https://wordpress.stackexchange.com/a/182519
	 *
	 * @param int    $attachment_id  Attachment ID.
	 * @param string $size Size.
	 */
	public static function get_scaled_image_path( $attachment_id, $size = 'thumbnail' ) {
		$file = get_attached_file( $attachment_id, true );
		if ( empty( $size ) || $size === 'full' ) {
			// For the original size get_attached_file is fine.
			return realpath( $file );
		}

		if ( ! wp_attachment_is_image( $attachment_id ) ) {
			return false; // the ID is not referring to a media.
		}

		$info = image_get_intermediate_size( $attachment_id, $size );
		if ( ! is_array( $info ) || ! isset( $info['file'] ) ) {
			return false; // Probably a bad size argument.
		}

		return realpath( str_replace( wp_basename( $file ), $info['file'], $file ) );
	}

	/**
	 * Grabs an image alt text.
	 *
	 * @param int $attachment_id The attachment ID.
	 *
	 * @return string The image alt text.
	 */
	public static function get_alt_tag( $attachment_id ) {
		return (string) get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );
	}

	/**
	 * Get the relative path of the image.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $img Image URL.
	 *
	 * @return string The expanded image URL.
	 */
	public static function get_relative_path( $img ) {
		if ( '/' !== $img[0] ) {
			return $img;
		}

		// If it's a relative URL, it's relative to the domain, not necessarily to the WordPress install, we
		// want to preserve domain name and URL scheme (http / https) though.
		$parsed_url = wp_parse_url( home_url() );

		return $parsed_url['scheme'] . '://' . $parsed_url['host'] . $img;
	}

	/**
	 * Find an attachment ID for a given URL.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $url The URL to find the attachment for.
	 *
	 * @return int The found attachment ID, or 0 if none was found.
	 */
	public static function get_by_url( $url ) {
		// Because get_by_url won't work on resized versions of images, we strip out the size part of an image URL.
		$url = preg_replace( '/(.*)-\d+x\d+\.(jpg|png|gif)$/', '$1.$2', $url );

		$id = function_exists( 'wpcom_vip_attachment_url_to_postid' ) ? wpcom_vip_attachment_url_to_postid( $url ) : self::url_to_postid( $url );

		return absint( $id );
	}

	/**
	 * Implements the attachment_url_to_postid with use of WP Cache.
	 *
	 * @codeCoverageIgnore
	 *
	 * @link https://dotlayer.com/20-wordpress-core-functions-that-dont-scale-and-how-to-work-around-it/
	 *
	 * @param string $url The attachment URL for which we want to know the Post ID.
	 *
	 * @return int The Post ID belonging to the attachment, 0 if not found.
	 */
	private static function url_to_postid( $url ) {
		$cache_key = sprintf( 'rank_math_attachment_url_post_id_%s', md5( $url ) );

		// Set the ID based on the hashed url in the cache.
		$id = wp_cache_get( $cache_key );

		if ( 'not_found' === $id ) {
			return 0;
		}

		// ID is found in cache, return.
		if ( false !== $id ) {
			return $id;
		}

		// phpcs:ignore WordPress.VIP.RestrictedFunctions -- We use the WP COM version if we can, see above.
		$id = attachment_url_to_postid( $url );

		if ( empty( $id ) ) {
			wp_cache_set( $cache_key, 'not_found', 'default', ( 12 * HOUR_IN_SECONDS + wp_rand( 0, ( 4 * HOUR_IN_SECONDS ) ) ) );
			return 0;
		}

		// We have the Post ID, but it's not in the cache yet. We do that here and return.
		wp_cache_set( $cache_key, $id, 'default', ( 24 * HOUR_IN_SECONDS + wp_rand( 0, ( 12 * HOUR_IN_SECONDS ) ) ) );

		return $id;
	}
}
PK     “ŠU]¨Ÿ  Ÿ    includes/helpers/class-db.phpnu „[µü¤        <?php
/**
 * DB helpers.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * DB class.
 */
class DB {

	/**
	 * Check and fix collation of table and columns.
	 *
	 * @param string $table         Table name (without prefix).
	 * @param array  $columns       Columns.
	 * @param string $set_collation Collation.
	 */
	public static function check_collation( $table, $columns = 'all', $set_collation = null ) {
		global $wpdb;
		$changed_collations = 0;

		$prefixed = $wpdb->prefix . $table;

		$sql = "SHOW TABLES LIKE '{$wpdb->prefix}%'";
		$res = self::get_col( $sql );
		if ( ! in_array( $prefixed, $res, true ) ) {
			return $changed_collations;
		}

		// Collation to set.
		$collate = $set_collation ? $set_collation : self::get_default_collation();

		$sql = "SHOW CREATE TABLE `{$prefixed}`";
		$res = self::get_row( $sql );

		$table_collate = $res->{'Create Table'};

		// Determine current collation value.
		$current_collate = '';
		if ( preg_match( '/COLLATE=([a-zA-Z0-9_-]+)/', $table_collate, $matches ) ) {
			$current_collate = $matches[1];
		}

		// If collation is not set or is incorrect, fix it.
		if ( ! $current_collate || $current_collate !== $collate ) {
			$sql = "ALTER TABLE `{$prefixed}` COLLATE={$collate}";
			error_log( sprintf( 'Rank Math: Changing collation of `%1$s` table from %2$s to %3$s. SQL: "%4$s"', $prefixed, $current_collate, $collate, $sql ) ); // phpcs:ignore
			self::query( $sql );
			++$changed_collations;
		}

		// Now handle columns if needed.
		if ( ! $columns ) {
			return $changed_collations;
		}

		$sql = "SHOW FULL COLUMNS FROM {$prefixed}";
		$res = self::get_results( $sql, ARRAY_A );
		if ( ! $res ) {
			return $changed_collations;
		}

		$columns = 'all' === $columns ? wp_list_pluck( $res, 'Field' ) : $columns;

		foreach ( $res as $col ) {
			if ( ! in_array( $col['Field'], $columns, true ) ) {
				continue;
			}

			$current_collate = $col['Collation'];
			if ( ! $current_collate || $current_collate === $collate ) {
				continue;
			}

			$null    = 'NO' === $col['Null'] ? 'NOT NULL' : 'NULL';
			$default = ! empty( $col['Default'] ) ? "DEFAULT '{$col['Default']}'" : '';

			$sql = "ALTER TABLE `{$prefixed}` MODIFY `{$col['Field']}` {$col['Type']} COLLATE {$collate} {$null} {$default}";
			error_log( sprintf( 'Rank Math: Changing collation of `%1$s`.`%2$s` column from %3$s to %4$s. SQL: "%5$s"', $prefixed, $col['Field'], $current_collate, $collate, $sql ) ); // phpcs:ignore
			self::query( $sql );
			++$changed_collations;
		}

		return $changed_collations;
	}

	/**
	 * Get collation of a specific table.
	 *
	 * @param string $table Table name.
	 * @return string
	 */
	public static function get_table_collation( $table ) {
		global $wpdb;

		$sql = "SHOW CREATE TABLE `{$wpdb->prefix}{$table}`";
		$res = self::get_row( $sql );

		if ( ! $res ) {
			return '';
		}

		$table_collate = $res->{'Create Table'};

		// Determine current collation value.
		$current_collate = '';
		if ( preg_match( '/COLLATE=([a-zA-Z0-9_-]+)/', $table_collate, $matches ) ) {
			$current_collate = $matches[1];
		}

		return $current_collate;
	}

	/**
	 * Get default collation.
	 *
	 * @return string
	 */
	public static function get_default_collation() {
		if ( defined( 'DB_COLLATE' ) && DB_COLLATE ) {
			return DB_COLLATE;
		}

		$posts_table_collation = self::get_table_collation( 'posts' );
		if ( $posts_table_collation ) {
			return $posts_table_collation;
		}

		return 'utf8mb4_unicode_ci';
	}

	/**
	 * Retrieve a Database instance by table name.
	 *
	 * @param string $table_name A Database instance id.
	 *
	 * @return Database Database object instance.
	 */
	public static function query_builder( $table_name = '' ) {
		return Database::table( $table_name );
	}

	/**
	 * Check if table exists in db or not.
	 *
	 * @param string $table_name Table name to check for existence.
	 *
	 * @return bool
	 */
	public static function check_table_exists( $table_name ) {
		global $wpdb;

		if ( self::get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $wpdb->prefix . $table_name ) ) ) === $wpdb->prefix . $table_name ) {
			return true;
		}

		return false;
	}

	/**
	 * Check if table has more rows than X.
	 *
	 * @since      1.1.16
	 *
	 * @param string $table_name Table name to check.
	 * @param int    $limit      Number of rows to check against.
	 *
	 * @return bool
	 */
	public static function table_size_exceeds( $table_name, $limit ) {
		global $wpdb;

		$check_table = self::query( "SELECT 1 FROM {$table_name} LIMIT {$limit}, 1" );

		return ! empty( $check_table );
	}

	/**
	 * Create table.
	 *
	 * @param string $table Table name.
	 * @param string $schema Table schema.
	 */
	public static function create_table( $table = '', $schema = '' ) {
		if ( ! $table || ! $schema ) {
			return;
		}

		// Early Bail!!
		if ( self::check_table_exists( $table ) ) {
			return;
		}

		global $wpdb;
		$collate = $wpdb->get_charset_collate();

		$schema = "CREATE TABLE {$wpdb->prefix}{$table} ( $schema ) $collate;";

		$upgrade_file = ABSPATH . 'wp-admin/includes/upgrade.php';
		if ( file_exists( $upgrade_file ) ) {
			require_once $upgrade_file; // @phpstan-ignore-line
		}

		$results = null;

		$results = dbDelta( $schema );

		if ( ! empty( $wpdb->last_error ) ) {
			Helper::add_notification(
				sprintf(
					// translators: %1$s is the error message, %2$s is the table name.
					__( 'Rank Math SEO: Getting error "%1$s" while creating table <code>%2$s</code>. Please contact your server administrator to fix this issue.', 'seo-by-rank-math' ),
					$wpdb->last_error,
					$table
				),
				[
					'type' => 'error',
					'id'   => 'rank_math_db_error_' . $table,
				]
			);
		}

		return $results;
	}

	/**
	 * Create index on a column.
	 *
	 * @param string $index_name Index name.
	 * @param string $table_name Table name.
	 * @param array  $columns    Columns to create index on.
	 *
	 * @return void
	 */
	public static function create_index( $index_name, $table_name, $columns ) {
		if ( ! $index_name || ! $table_name || ! $columns ) {
			return;
		}
		global $wpdb;

		// Bail early if index already exists.
		if ( self::get_var( "SHOW INDEX FROM {$wpdb->prefix}{$table_name} WHERE Key_name = '{$index_name}'" ) ) {
			return;
		}

		self::query( "CREATE INDEX {$index_name} ON {$wpdb->prefix}{$table_name} (" . implode( ',', $columns ) . ')' );
	}

	/**
	 * Get a single column from the database.
	 *
	 * @param string $query  The SQL query to run.
	 * @param int    $index  The column index.
	 */
	public static function get_col( $query = '', $index = 0 ) {
		return self::query_builder()->get_col( $query, $index );
	}

	/**
	 * Get a single row from the database.
	 *
	 * @param string $query  The SQL query to run.
	 * @param string $output The output to retrieve.
	 * @param int    $index The row index to retrieve.
	 */
	public static function get_row( $query = '', $output = OBJECT, $index = 0 ) {
		return self::query_builder()->get_row( $query, $output, $index );
	}

	/**
	 * Get SQL query results.
	 *
	 * @param string $query SQL query to run.
	 */
	public static function query( $query = '' ) {
		return self::query_builder()->query( $query );
	}

	/**
	 * Get var query results.
	 *
	 * @param string $query SQL query to run.
	 */
	public static function get_var( $query = '' ) {
		return self::query_builder()->get_var( $query );
	}

	/**
	 * Get SQL query results.
	 *
	 * @param string $query  SQL query to run.
	 * @param string $output Output format.
	 */
	public static function get_results( $query = '', $output = OBJECT ) {
		return self::query_builder()->get_results( $query, $output );
	}
}
PK     “ŠU]M}UE¯  ¯  #  includes/helpers/class-schedule.phpnu „[µü¤        <?php
/**
 * Schedule helpers.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Schedule class.
 */
class Schedule {

	/**
	 * Schedule a recurring action
	 *
	 * @param int    $timestamp When the first instance of the job will run.
	 * @param int    $interval_in_seconds How long to wait between runs.
	 * @param string $hook The hook to trigger.
	 * @param array  $args Arguments to pass when the hook triggers.
	 * @param string $group The group to assign this job to.
	 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
	 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
	 *
	 * @return int The action ID. Zero if there was an error scheduling the action.
	 */
	public static function recurring_action( $timestamp, $interval_in_seconds, $hook, $args = [], $group = '', $unique = false, $priority = 10 ) {
		$id = as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args, $group, $unique, $priority );

		if ( ! $id ) {
			self::notify(
				esc_html__( 'There was an issue scheduling the async action required for Analytics; if the problem persists, please contact our support team.', 'seo-by-rank-math' ),
				'recurring'
			);
		}

		return $id;
	}

	/**
	 * Schedule an action to run one time
	 *
	 * @param int    $timestamp When the job will run.
	 * @param string $hook The hook to trigger.
	 * @param array  $args Arguments to pass when the hook triggers.
	 * @param string $group The group to assign this job to.
	 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
	 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
	 *
	 * @return int The action ID. Zero if there was an error scheduling the action.
	 */
	public static function single_action( $timestamp, $hook, $args = [], $group = '', $unique = false, $priority = 10 ) {
		$id = as_schedule_single_action( $timestamp, $hook, $args, $group, $unique, $priority );

		if ( ! $id ) {
			self::notify(
				esc_html__( 'There was an issue scheduling a single action required for Analytics; if the problem persists, please contact our support team.', 'seo-by-rank-math' ),
				'schedule'
			);
		}

		return $id;
	}

	/**
	 * Cancel the next occurrence of a scheduled action.
	 *
	 * While only the next instance of a recurring or cron action is unscheduled by this method, that will also prevent
	 * all future instances of that recurring or cron action from being run. Recurring and cron actions are scheduled in
	 * a sequence instead of all being scheduled at once. Each successive occurrence of a recurring action is scheduled
	 * only after the former action is run. If the next instance is never run, because it's unscheduled by this function,
	 * then the following instance will never be scheduled (or exist), which is effectively the same as being unscheduled
	 * by this method also.
	 *
	 * @param string $hook The hook that the job will trigger.
	 * @param array  $args Args that would have been passed to the job.
	 * @param string $group The group the job is assigned to.
	 *
	 * @return int|null The scheduled action ID if a scheduled action was found, or null if no matching action found.
	 */
	public static function unschedule_action( $hook, $args = [], $group = '' ) {
		$id = as_unschedule_action( $hook, $args, $group );

		if ( ! $id ) {
			self::notify(
				esc_html__( 'There was an issue scheduling the recurring action required for Analytics; if the problem persists, please contact our support team.', 'seo-by-rank-math' ),
				'unschedule'
			);
		}

		return $id;
	}

	/**
	 * Enqueue an action to run one time, as soon as possible
	 *
	 * @param string $hook The hook to trigger.
	 * @param array  $args Arguments to pass when the hook triggers.
	 * @param string $group The group to assign this job to.
	 * @param bool   $unique Whether the action should be unique. It will not be scheduled if another pending or running action has the same hook and group parameters.
	 * @param int    $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
	 *
	 * @return int The action ID. Zero if there was an error scheduling the action.
	 */
	public static function async_action( $hook, $args = [], $group = '', $unique = false, $priority = 10 ) {
		$id = as_enqueue_async_action( $hook, $args, $group, $unique, $priority );

		if ( ! $id ) {
			self::notify(
				esc_html__( 'There was an issue unscheduling a background action related to Analytics; if the problem persists, please contact our support team.', 'seo-by-rank-math' ),
				'async'
			);
		}

		return $id;
	}

	/**
	 * Notify
	 *
	 * @param string $message Message to display.
	 * @param string $type Type of notification.
	 */
	public static function notify( $message = '', $type = '' ) {
		Helper::add_notification(
			$message,
			[
				'type'   => 'error',
				'id'     => 'rank_math_action_scheduler_' . $type,
				'screen' => 'rank-math_page_rank-math-analytics',
			]
		);
		rank_math()->notification->update_storage();
	}
}
PK     “ŠU]ô»{†e  †e  "  includes/helpers/class-choices.phpnu „[µü¤        <?php
/**
 * The Choices helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Choices class.
 */
trait Choices {

	/**
	 * Gets list of overlay images for the social thumbnail.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  string $output Output type.
	 * @return array
	 */
	public static function choices_overlay_images( $output = 'object' ) {
		$uri = rank_math()->plugin_url() . 'assets/admin/img/';
		$dir = rank_math()->plugin_dir() . 'assets/admin/img/';

		/**
		 * Allow developers to add/remove overlay images.
		 *
		 * @param array $images Image data as array of arrays.
		 */
		$list = apply_filters(
			'rank_math/social/overlay_images',
			[
				'play' => [
					'name' => esc_html__( 'Play icon', 'seo-by-rank-math' ),
					'url'  => $uri . 'icon-play.png',
					'path' => $dir . 'icon-play.png',
				],
				'gif'  => [
					'name' => esc_html__( 'GIF icon', 'seo-by-rank-math' ),
					'url'  => $uri . 'icon-gif.png',
					'path' => $dir . 'icon-gif.png',
				],
			]
		);

		// Allow custom positions.
		foreach ( $list as $name => $data ) {
			$list[ $name ]['position'] = apply_filters( 'rank_math/social/overlay_image_position', 'middle_center', $name );
		}

		return 'names' === $output ? wp_list_pluck( $list, 'name' ) : $list;
	}

	/**
	 * Get robot choices.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_robots() {
		return [
			'index'        => esc_html__( 'Index', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Instructs search engines to index and show these pages in the search results.', 'seo-by-rank-math' ) ),
			'noindex'      => esc_html__( 'No Index', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Prevents pages from being indexed and displayed in search engine result pages', 'seo-by-rank-math' ) ),
			'nofollow'     => esc_html__( 'No Follow', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Prevents search engines from following links on the pages', 'seo-by-rank-math' ) ),
			'noarchive'    => esc_html__( 'No Archive', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Prevents search engines from showing Cached links for pages', 'seo-by-rank-math' ) ),
			'noimageindex' => esc_html__( 'No Image Index', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Prevents images on a page from being indexed by Google and other search engines', 'seo-by-rank-math' ) ),
			'nosnippet'    => esc_html__( 'No Snippet', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Prevents a snippet from being shown in the search results', 'seo-by-rank-math' ) ),
		];
	}

	/**
	 * Get separator choices.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_separator() {
		return [
			'-'       => '-',
			'&ndash;' => 'â€“',
			'&mdash;' => 'â€”',
			'&raquo;' => 'Â»',
			'|'       => '|',
			'&bull;'  => 'â€¢',
		];
	}

	/**
	 * Get all accessible post types as choices.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param boolean $force_refresh Whether to force a fresh call to get_post_types() even if the value is cached. Default false.
	 *
	 * @return array
	 */
	public static function choices_post_types( $force_refresh = false ) {
		static $choices_post_types;

		if ( ! isset( $choices_post_types ) || $force_refresh ) {
			$choices_post_types = Helper::get_accessible_post_types();
			$choices_post_types = \array_map(
				function ( $post_type ) {
					$object = get_post_type_object( $post_type );
					return $object->label;
				},
				$choices_post_types
			);
		}

		return $choices_post_types;
	}

	/**
	 * Get all post types.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_any_post_types() {

		$post_types = self::choices_post_types();
		unset( $post_types['attachment'] );

		return [ 'any' => esc_html__( 'Any', 'seo-by-rank-math' ) ] + $post_types + [ 'comments' => esc_html( translate( 'Comments' ) ) ]; // phpcs:ignore
	}

	/**
	 * Get business types as choices.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  bool $none Add none option to list.
	 * @return array
	 */
	public static function choices_business_types( $none = false ) {
		$data = apply_filters(
			'rank_math/json_ld/business_types',
			[
				[
					'label' => 'Organization',
					'child' => [
						[ 'label' => 'Airline' ],
						[ 'label' => 'Consortium' ],
						[ 'label' => 'Corporation' ],
						[
							'label' => 'Educational Organization',
							'child' => [
								[ 'label' => 'College Or University' ],
								[ 'label' => 'Elementary School' ],
								[ 'label' => 'High School' ],
								[ 'label' => 'Middle School' ],
								[ 'label' => 'Preschool' ],
								[ 'label' => 'School' ],
							],
						],
						[ 'label' => 'Funding Scheme' ],
						[ 'label' => 'Government Organization' ],
						[ 'label' => 'Library System' ],
						[
							'label' => 'Local Business',
							'child' => [
								[ 'label' => 'Animal Shelter' ],
								[ 'label' => 'Archive Organization' ],
								[
									'label' => 'Automotive Business',
									'child' => [
										[ 'label' => 'Auto Body Shop' ],
										[ 'label' => 'Auto Dealer' ],
										[ 'label' => 'Auto Parts Store' ],
										[ 'label' => 'Auto Rental' ],
										[ 'label' => 'Auto Repair' ],
										[ 'label' => 'Auto Wash' ],
										[ 'label' => 'Gas Station' ],
										[ 'label' => 'Motorcycle Dealer' ],
										[ 'label' => 'Motorcycle Repair' ],
									],
								],
								[ 'label' => 'Child Care' ],
								[ 'label' => 'Dry Cleaning Or Laundry' ],
								[
									'label' => 'Emergency Service',
									'child' => [
										[ 'label' => 'Fire Station' ],
										[ 'label' => 'Hospital' ],
										[ 'label' => 'Police Station' ],
									],
								],
								[ 'label' => 'Employment Agency' ],
								[
									'label' => 'Entertainment Business',
									'child' => [
										[ 'label' => 'Adult Entertainment' ],
										[ 'label' => 'Amusement Park' ],
										[ 'label' => 'Art Gallery' ],
										[ 'label' => 'Casino' ],
										[ 'label' => 'Comedy Club' ],
										[ 'label' => 'Movie Theater' ],
										[ 'label' => 'Night Club' ],
									],
								],
								[
									'label' => 'Financial Service',
									'child' => [
										[ 'label' => 'Accounting Service' ],
										[ 'label' => 'Automated Teller' ],
										[ 'label' => 'Bank Or CreditUnion' ],
										[ 'label' => 'Insurance Agency' ],
									],
								],
								[
									'label' => 'Food Establishment',
									'child' => [
										[ 'label' => 'Bakery' ],
										[ 'label' => 'Bar Or Pub' ],
										[ 'label' => 'Brewery' ],
										[ 'label' => 'Cafe Or CoffeeShop' ],
										[ 'label' => 'Distillery' ],
										[ 'label' => 'Fast Food Restaurant' ],
										[ 'label' => 'IceCream Shop' ],
										[ 'label' => 'Restaurant' ],
										[ 'label' => 'Winery' ],
									],
								],
								[
									'label' => 'Government Office',
									'child' => [
										[ 'label' => 'Post Office' ],
									],
								],
								[
									'label' => 'Health And Beauty Business',
									'child' => [
										[ 'label' => 'Beauty Salon' ],
										[ 'label' => 'Day Spa' ],
										[ 'label' => 'Hair Salon' ],
										[ 'label' => 'Health Club' ],
										[ 'label' => 'Nail Salon' ],
										[ 'label' => 'Tattoo Parlor' ],
									],
								],
								[
									'label' => 'Home And Construction Business',
									'child' => [
										[ 'label' => 'Electrician' ],
										[ 'label' => 'General Contractor' ],
										[ 'label' => 'HVAC Business' ],
										[ 'label' => 'House Painter' ],
										[ 'label' => 'Locksmith' ],
										[ 'label' => 'Moving Company' ],
										[ 'label' => 'Plumber' ],
										[ 'label' => 'Roofing Contractor' ],
									],
								],
								[ 'label' => 'Internet Cafe' ],
								[
									'label' => 'Legal Service',
									'child' => [
										[ 'label' => 'Notary' ],
									],
								],
								[ 'label' => 'Library' ],
								[
									'label' => 'Lodging Business',
									'child' => [
										[ 'label' => 'Bed And Breakfast' ],
										[ 'label' => 'Campground' ],
										[ 'label' => 'Hostel' ],
										[ 'label' => 'Hotel' ],
										[ 'label' => 'Motel' ],
										[
											'label' => 'Resort',
											'child' => [
												[ 'label' => 'Ski Resort' ],
											],
										],
									],
								],
								[
									'label' => 'Medical Business',
									'child' => [
										[ 'label' => 'Community Health' ],
										[ 'label' => 'Dentist' ],
										[ 'label' => 'Dermatology' ],
										[ 'label' => 'Diet Nutrition' ],
										[ 'label' => 'Emergency' ],
										[ 'label' => 'Geriatric' ],
										[ 'label' => 'Gynecologic' ],
										[ 'label' => 'Medical Clinic' ],
										[ 'label' => 'Optician' ],
										[ 'label' => 'Pharmacy' ],
										[ 'label' => 'Physician' ],
									],
								],
								[ 'label' => 'Professional Service' ],
								[ 'label' => 'Radio Station' ],
								[ 'label' => 'Real Estate Agent' ],
								[ 'label' => 'Recycling Center' ],
								[ 'label' => 'Self Storage' ],
								[ 'label' => 'Shopping Center' ],
								[
									'label' => 'Sports Activity Location',
									'child' => [
										[ 'label' => 'Bowling Alley' ],
										[ 'label' => 'Exercise Gym' ],
										[ 'label' => 'Golf Course' ],
										[ 'label' => 'Health Club' ],
										[ 'label' => 'Public Swimming Pool' ],
										[ 'label' => 'Ski Resort' ],
										[ 'label' => 'Sports Club' ],
										[ 'label' => 'Stadium Or Arena' ],
										[ 'label' => 'Tennis Complex' ],
									],
								],
								[
									'label' => 'Store',
									'child' => [
										[ 'label' => 'Auto Parts Store' ],
										[ 'label' => 'Bike Store' ],
										[ 'label' => 'Book Store' ],
										[ 'label' => 'Clothing Store' ],
										[ 'label' => 'Computer Store' ],
										[ 'label' => 'Convenience Store' ],
										[ 'label' => 'Department Store' ],
										[ 'label' => 'Electronics Store' ],
										[ 'label' => 'Florist' ],
										[ 'label' => 'Furniture Store' ],
										[ 'label' => 'Garden Store' ],
										[ 'label' => 'Grocery Store' ],
										[ 'label' => 'Hardware Store' ],
										[ 'label' => 'Hobby Shop' ],
										[ 'label' => 'Home Goods Store' ],
										[ 'label' => 'Jewelry Store' ],
										[ 'label' => 'Liquor Store' ],
										[ 'label' => 'Mens Clothing Store' ],
										[ 'label' => 'Mobile Phone Store' ],
										[ 'label' => 'Movie Rental Store' ],
										[ 'label' => 'Music Store' ],
										[ 'label' => 'Office Equipment Store' ],
										[ 'label' => 'Outlet Store' ],
										[ 'label' => 'Pawn Shop' ],
										[ 'label' => 'Pet Store' ],
										[ 'label' => 'Shoe Store' ],
										[ 'label' => 'Sporting GoodsStore' ],
										[ 'label' => 'Tire Shop' ],
										[ 'label' => 'Toy Store' ],
										[ 'label' => 'Wholesale Store' ],
									],
								],
								[ 'label' => 'Television Station' ],
								[ 'label' => 'Tourist Information Center' ],
								[ 'label' => 'Travel Agency' ],
							],
						],
						[
							'label' => 'Medical Organization',
							'child' => [
								[ 'label' => 'Diagnostic Lab' ],
								[ 'label' => 'Veterinary Care' ],
							],
						],
						[ 'label' => 'NGO' ],
						[
							'label' => 'Online Business',
							'child' => [
								[ 'label' => 'Online Store' ],
							],
						],
						[ 'label' => 'News Media Organization' ],
						[
							'label' => 'Performing Group',
							'child' => [
								[ 'label' => 'Dance Group' ],
								[ 'label' => 'Music Group' ],
								[ 'label' => 'Theater Group' ],
							],
						],
						[
							'label' => 'Project',
							'child' => [
								[ 'label' => 'Funding Agency' ],
								[ 'label' => 'Research Project' ],
							],
						],
						[
							'label' => 'Sports Organization',
							'child' => [
								[ 'label' => 'Sports Team' ],
							],
						],
						[ 'label' => 'Workers Union' ],
					],
				],
			]
		);

		$business = [];
		if ( $none ) {
			$business['off'] = 'None';
		}

		foreach ( $data as $item ) {
			$business[ str_replace( ' ', '', $item['label'] ) ] = $item['label'];

			if ( isset( $item['child'] ) ) {
				self::indent_child_elements( $business, $item['child'] );
			}
		}

		return $business;
	}

	/**
	 * Get Schema types as choices.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  bool   $none      Add none option to the list.
	 * @param  string $post_type Post type.
	 * @return array
	 */
	public static function choices_rich_snippet_types( $none = false, $post_type = '' ) {
		$types = [
			'article'    => esc_html__( 'Article', 'seo-by-rank-math' ),
			'book'       => esc_html__( 'Book', 'seo-by-rank-math' ),
			'course'     => esc_html__( 'Course', 'seo-by-rank-math' ),
			'event'      => esc_html__( 'Event', 'seo-by-rank-math' ),
			'jobposting' => esc_html__( 'Job Posting', 'seo-by-rank-math' ),
			'music'      => esc_html__( 'Music', 'seo-by-rank-math' ),
			'product'    => esc_html__( 'Product', 'seo-by-rank-math' ),
			'recipe'     => esc_html__( 'Recipe', 'seo-by-rank-math' ),
			'restaurant' => esc_html__( 'Restaurant', 'seo-by-rank-math' ),
			'video'      => esc_html__( 'Video', 'seo-by-rank-math' ),
			'person'     => esc_html__( 'Person', 'seo-by-rank-math' ),
			'service'    => esc_html__( 'Service', 'seo-by-rank-math' ),
			'software'   => esc_html__( 'Software Application', 'seo-by-rank-math' ),
		];

		if ( ! empty( self::get_review_posts() ) ) {
			$types['review'] = esc_html__( 'Review (Unsupported)', 'seo-by-rank-math' );
		}

		if ( $none ) {
			$label = is_string( $none ) ? $none : esc_html__( 'None', 'seo-by-rank-math' );
			$types = [ 'off' => $label ] + $types;
		}

		/**
		 * Allow developers to add/remove Schema type choices.
		 *
		 * @param array  $types     Schema types.
		 * @param string $post_type Post type.
		 */
		return apply_filters( 'rank_math/settings/snippet/types', $types, $post_type );
	}

	/**
	 * Get the redirection types.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_redirection_types() {
		return [
			'301' => esc_html__( '301 Permanent Move', 'seo-by-rank-math' ),
			'302' => esc_html__( '302 Temporary Move', 'seo-by-rank-math' ),
			'307' => esc_html__( '307 Temporary Redirect', 'seo-by-rank-math' ),
			'410' => esc_html__( '410 Content Deleted', 'seo-by-rank-math' ),
			'451' => esc_html__( '451 Content Unavailable for Legal Reasons', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Get comparison types.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_comparison_types() {
		return [
			'exact'    => esc_html__( 'Exact', 'seo-by-rank-math' ),
			'contains' => esc_html__( 'Contains', 'seo-by-rank-math' ),
			'start'    => esc_html__( 'Starts With', 'seo-by-rank-math' ),
			'end'      => esc_html__( 'End With', 'seo-by-rank-math' ),
			'regex'    => esc_html__( 'Regex', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Get Post type icons.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_post_type_icons() {
		/**
		 * Allow developer to change post types icons.
		 *
		 * @param array $icons Array of available icons.
		 */
		return apply_filters(
			'rank_math/post_type_icons',
			[
				'default'    => 'rm-icon rm-icon-post',
				'post'       => 'rm-icon rm-icon-post',
				'page'       => 'rm-icon rm-icon-page',
				'attachment' => 'rm-icon rm-icon-attachment',
				'product'    => 'rm-icon rm-icon-cart',
				'web-story'  => 'rm-icon rm-icon-stories',
			]
		);
	}

	/**
	 * Get Taxonomy icons.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function choices_taxonomy_icons() {
		/**
		 * Allow developer to change taxonomies icons.
		 *
		 * @param array $icons Array of available icons.
		 */
		return apply_filters(
			'rank_math/taxonomy_icons',
			[
				'default'     => 'rm-icon rm-icon-category',
				'category'    => 'rm-icon rm-icon-category',
				'post_tag'    => 'rm-icon rm-icon-tag',
				'product_cat' => 'rm-icon rm-icon-category',
				'product_tag' => 'rm-icon rm-icon-tag',
				'post_format' => 'rm-icon rm-icon-post-format',
			]
		);
	}

	/**
	 * Function to get posts having review schema type selected.
	 */
	public static function get_review_posts() {
		global $wpdb;

		static $posts = null;

		if ( true === boolval( get_option( 'rank_math_review_posts_converted' ) ) ) {
			return false;
		}

		if ( ! is_null( $posts ) ) {
			return $posts;
		}

		$posts = get_transient( 'rank_math_any_review_posts' );
		if ( false !== $posts ) {
			return $posts;
		}

		$meta_query = new \WP_Meta_Query(
			[
				'relation' => 'AND',
				[
					'key'   => 'rank_math_rich_snippet',
					'value' => 'review',
				],
			]
		);

		$meta_query = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
		$posts      = DB_Helper::get_col( "SELECT {$wpdb->posts}.ID FROM $wpdb->posts {$meta_query['join']} WHERE 1=1 {$meta_query['where']} AND ({$wpdb->posts}.post_status = 'publish')" );

		if ( 0 === count( $posts ) ) {
			update_option( 'rank_math_review_posts_converted', true );
			return false;
		}

		set_transient( 'rank_math_any_review_posts', $posts, DAY_IN_SECONDS );

		return $posts;
	}

	/**
	 * Phones types for schema.
	 *
	 * @return array
	 */
	public static function choices_phone_types() {
		return [
			'customer support'    => esc_html__( 'Customer Service', 'seo-by-rank-math' ),
			'technical support'   => esc_html__( 'Technical Support', 'seo-by-rank-math' ),
			'billing support'     => esc_html__( 'Billing Support', 'seo-by-rank-math' ),
			'bill payment'        => esc_html__( 'Bill Payment', 'seo-by-rank-math' ),
			'sales'               => esc_html__( 'Sales', 'seo-by-rank-math' ),
			'reservations'        => esc_html__( 'Reservations', 'seo-by-rank-math' ),
			'credit card support' => esc_html__( 'Credit Card Support', 'seo-by-rank-math' ),
			'emergency'           => esc_html__( 'Emergency', 'seo-by-rank-math' ),
			'baggage tracking'    => esc_html__( 'Baggage Tracking', 'seo-by-rank-math' ),
			'roadside assistance' => esc_html__( 'Roadside Assistance', 'seo-by-rank-math' ),
			'package tracking'    => esc_html__( 'Package Tracking', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Additional Organization details for schema.
	 *
	 * @return array
	 */
	public static function choices_additional_organization_info() {
		return [
			'legalName'            => esc_html__( 'Legal Name', 'seo-by-rank-math' ),
			'foundingDate'         => esc_html__( 'Founding Date', 'seo-by-rank-math' ),
			'iso6523Code'          => esc_html__( 'ISO 6523 Code', 'seo-by-rank-math' ),
			'duns'                 => esc_html__( 'DUNS', 'seo-by-rank-math' ),
			'leiCode'              => esc_html__( 'LEI Code', 'seo-by-rank-math' ),
			'naics'                => esc_html__( 'NAICS Code', 'seo-by-rank-math' ),
			'globalLocationNumber' => esc_html__( 'Global Location Number', 'seo-by-rank-math' ),
			'vatID'                => esc_html__( 'VAT ID', 'seo-by-rank-math' ),
			'taxID'                => esc_html__( 'Tax ID', 'seo-by-rank-math' ),
			'numberOfEmployees'    => esc_html__( 'Number of Employees', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Function to indent child business types..
	 *
	 * @param array $business Business types array.
	 * @param array $item     Array of child data.
	 * @param int   $level    Nesting level of the current iteration.
	 */
	private static function indent_child_elements( &$business, $item, $level = 1 ) {
		foreach ( $item as $child ) {
			$business[ str_replace( ' ', '', $child['label'] ) ] = str_repeat( '&mdash; ', $level ) . $child['label'];

			if ( isset( $child['child'] ) ) {
				self::indent_child_elements( $business, $child['child'], ( $level + 1 ) );
			}
		}
	}

	/**
	 * Country.
	 *
	 * @return array
	 */
	public static function choices_contentai_countries() {
		return [
			'all'      => esc_html__( 'Worldwide', 'seo-by-rank-math' ),
			'ar_DZ'    => esc_html__( 'Algeria', 'seo-by-rank-math' ),
			'es_AR'    => esc_html__( 'Argentina', 'seo-by-rank-math' ),
			'hy_AM'    => esc_html__( 'Armenia', 'seo-by-rank-math' ),
			'en_AU'    => esc_html__( 'Australia', 'seo-by-rank-math' ),
			'de_AT'    => esc_html__( 'Austria', 'seo-by-rank-math' ),
			'tr_AZ'    => esc_html__( 'Azerbaijan', 'seo-by-rank-math' ),
			'ar_BH'    => esc_html__( 'Bahrain', 'seo-by-rank-math' ),
			'en_BD'    => esc_html__( 'Bangladesh', 'seo-by-rank-math' ),
			'ru_BY'    => esc_html__( 'Belarus', 'seo-by-rank-math' ),
			'de_BE'    => esc_html__( 'Belgium', 'seo-by-rank-math' ),
			'es_BO'    => esc_html__( 'Bolivia, Plurinational State Of', 'seo-by-rank-math' ),
			'pt_BR'    => esc_html__( 'Brazil', 'seo-by-rank-math' ),
			'bg_BG'    => esc_html__( 'Bulgaria', 'seo-by-rank-math' ),
			'vi_KH'    => esc_html__( 'Cambodia', 'seo-by-rank-math' ),
			'en_CA'    => esc_html__( 'Canada', 'seo-by-rank-math' ),
			'es_CL'    => esc_html__( 'Chile', 'seo-by-rank-math' ),
			'es_CO'    => esc_html__( 'Colombia', 'seo-by-rank-math' ),
			'es_CR'    => esc_html__( 'Costa Rica', 'seo-by-rank-math' ),
			'hr_HR'    => esc_html__( 'Croatia', 'seo-by-rank-math' ),
			'el_CY'    => esc_html__( 'Cyprus', 'seo-by-rank-math' ),
			'cs_CZ'    => esc_html__( 'Czechia', 'seo-by-rank-math' ),
			'da_DK'    => esc_html__( 'Denmark', 'seo-by-rank-math' ),
			'es_EC'    => esc_html__( 'Ecuador', 'seo-by-rank-math' ),
			'ar_EG'    => esc_html__( 'Egypt', 'seo-by-rank-math' ),
			'es_SV'    => esc_html__( 'El Salvador', 'seo-by-rank-math' ),
			'et_EE'    => esc_html__( 'Estonia', 'seo-by-rank-math' ),
			'fi_FI'    => esc_html__( 'Finland', 'seo-by-rank-math' ),
			'fr_FR'    => esc_html__( 'France', 'seo-by-rank-math' ),
			'de_DE'    => esc_html__( 'Germany', 'seo-by-rank-math' ),
			'en_GH'    => esc_html__( 'Ghana', 'seo-by-rank-math' ),
			'el_GR'    => esc_html__( 'Greece', 'seo-by-rank-math' ),
			'es_GT'    => esc_html__( 'Guatemala', 'seo-by-rank-math' ),
			'en_HK'    => esc_html__( 'Hong Kong', 'seo-by-rank-math' ),
			'hu_HU'    => esc_html__( 'Hungary', 'seo-by-rank-math' ),
			'hi_IN'    => esc_html__( 'India', 'seo-by-rank-math' ),
			'id_ID'    => esc_html__( 'Indonesia', 'seo-by-rank-math' ),
			'en_IE'    => esc_html__( 'Ireland', 'seo-by-rank-math' ),
			'iw_IL'    => esc_html__( 'Israel', 'seo-by-rank-math' ),
			'it_IT'    => esc_html__( 'Italy', 'seo-by-rank-math' ),
			'ja_JP'    => esc_html__( 'Japan', 'seo-by-rank-math' ),
			'ar_JO'    => esc_html__( 'Jordan', 'seo-by-rank-math' ),
			'ru_KZ'    => esc_html__( 'Kazakhstan', 'seo-by-rank-math' ),
			'en_KE'    => esc_html__( 'Kenya', 'seo-by-rank-math' ),
			'ko_KR'    => esc_html__( 'Korea, Republic Of', 'seo-by-rank-math' ),
			'lv_LV'    => esc_html__( 'Latvia', 'seo-by-rank-math' ),
			'lt_LT'    => esc_html__( 'Lithuania', 'seo-by-rank-math' ),
			'tr_MK'    => esc_html__( 'Macedonia, The Former Yugoslav Republic Of', 'seo-by-rank-math' ),
			'en_MY'    => esc_html__( 'Malaysia', 'seo-by-rank-math' ),
			'en_MT'    => esc_html__( 'Malta', 'seo-by-rank-math' ),
			'es_MX'    => esc_html__( 'Mexico', 'seo-by-rank-math' ),
			'ar_MA'    => esc_html__( 'Morocco', 'seo-by-rank-math' ),
			'mnw_MM'   => esc_html__( 'Myanmar', 'seo-by-rank-math' ),
			'nl_NL'    => esc_html__( 'Netherlands', 'seo-by-rank-math' ),
			'en_NZ'    => esc_html__( 'New Zealand', 'seo-by-rank-math' ),
			'es_NI'    => esc_html__( 'Nicaragua', 'seo-by-rank-math' ),
			'en_NG'    => esc_html__( 'Nigeria', 'seo-by-rank-math' ),
			'no_NO'    => esc_html__( 'Norway', 'seo-by-rank-math' ),
			'en_PK'    => esc_html__( 'Pakistan', 'seo-by-rank-math' ),
			'es_PY'    => esc_html__( 'Paraguay', 'seo-by-rank-math' ),
			'es_PE'    => esc_html__( 'Peru', 'seo-by-rank-math' ),
			'en_PH'    => esc_html__( 'Philippines', 'seo-by-rank-math' ),
			'pl_PL'    => esc_html__( 'Poland', 'seo-by-rank-math' ),
			'pt_PT'    => esc_html__( 'Portugal', 'seo-by-rank-math' ),
			'ro_RO'    => esc_html__( 'Romania', 'seo-by-rank-math' ),
			'ru_RU'    => esc_html__( 'Russian Federation', 'seo-by-rank-math' ),
			'ar_SA'    => esc_html__( 'Saudi Arabia', 'seo-by-rank-math' ),
			'fr_SN'    => esc_html__( 'Senegal', 'seo-by-rank-math' ),
			'hr_RS'    => esc_html__( 'Serbia', 'seo-by-rank-math' ),
			'en_SG'    => esc_html__( 'Singapore', 'seo-by-rank-math' ),
			'sk_SK'    => esc_html__( 'Slovakia', 'seo-by-rank-math' ),
			'sl_SI'    => esc_html__( 'Slovenia', 'seo-by-rank-math' ),
			'en_ZA'    => esc_html__( 'South Africa', 'seo-by-rank-math' ),
			'es_ES'    => esc_html__( 'Spain', 'seo-by-rank-math' ),
			'en_LK'    => esc_html__( 'Sri Lanka', 'seo-by-rank-math' ),
			'sv_SE'    => esc_html__( 'Sweden', 'seo-by-rank-math' ),
			'de_CH'    => esc_html__( 'Switzerland', 'seo-by-rank-math' ),
			'zh-TW_TW' => esc_html__( 'Taiwan', 'seo-by-rank-math' ),
			'th_TH'    => esc_html__( 'Thailand', 'seo-by-rank-math' ),
			'ar_TN'    => esc_html__( 'Tunisia', 'seo-by-rank-math' ),
			'tr_TR'    => esc_html__( 'Turkey', 'seo-by-rank-math' ),
			'ru_UA'    => esc_html__( 'Ukraine', 'seo-by-rank-math' ),
			'ar_AE'    => esc_html__( 'United Arab Emirates', 'seo-by-rank-math' ),
			'en_GB'    => esc_html__( 'United Kingdom', 'seo-by-rank-math' ),
			'en_US'    => esc_html__( 'United States Of America', 'seo-by-rank-math' ),
			'es_UY'    => esc_html__( 'Uruguay', 'seo-by-rank-math' ),
			'es_VE'    => esc_html__( 'Venezuela, Bolivarian Republic Of', 'seo-by-rank-math' ),
			'vi_VN'    => esc_html__( 'Viet Nam', 'seo-by-rank-math' ),
		];
	}
}
PK     “ŠU]…©E»¿  ¿    includes/helpers/class-str.phpnu „[µü¤        <?php
/**
 * The String helpers.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Helpers;

/**
 * Str class.
 */
class Str {

	/**
	 * Validates whether the passed variable is a empty string.
	 *
	 * @param mixed $variable The variable to validate.
	 *
	 * @return bool Whether or not the passed value is a non-empty string.
	 */
	public static function is_empty( $variable ) {
		return empty( $variable ) || ! is_string( $variable );
	}

	/**
	 * Validates whether the passed variable is a non-empty string.
	 *
	 * @param mixed $variable The variable to validate.
	 *
	 * @return bool Whether or not the passed value is a non-empty string.
	 */
	public static function is_non_empty( $variable ) {
		return is_string( $variable ) && '' !== $variable;
	}

	/**
	 * Check if the string contains the given value.
	 *
	 * @param string $needle   The sub-string to search for.
	 * @param string $haystack The string to search.
	 *
	 * @return bool
	 */
	public static function contains( $needle, $haystack ) {
		return self::is_non_empty( $needle ) ? strpos( $haystack, $needle ) !== false : false;
	}

	/**
	 * Check if the string begins with the given value.
	 *
	 * @param string $needle   The sub-string to search for.
	 * @param string $haystack The string to search.
	 *
	 * @return bool
	 */
	public static function starts_with( $needle, $haystack ) {
		return '' === $needle || substr( $haystack, 0, strlen( $needle ) ) === (string) $needle;
	}

	/**
	 * Check if the string end with the given value.
	 *
	 * @param string $needle   The sub-string to search for.
	 * @param string $haystack The string to search.
	 *
	 * @return bool
	 */
	public static function ends_with( $needle, $haystack ) {
		return '' === $needle || substr( $haystack, -strlen( $needle ) ) === (string) $needle;
	}

	/**
	 * Check the string for desired comparison.
	 *
	 * @param string $needle     The sub-string to search for.
	 * @param string $haystack   The string to search.
	 * @param string $comparison The type of comparison.
	 *
	 * @return bool
	 */
	public static function comparison( $needle, $haystack, $comparison = '' ) {

		$hash = [
			'regex'    => 'preg_match',
			'end'      => [ __CLASS__, 'ends_with' ],
			'start'    => [ __CLASS__, 'starts_with' ],
			'contains' => [ __CLASS__, 'contains' ],
		];

		if ( $comparison && isset( $hash[ $comparison ] ) ) {
			return call_user_func( $hash[ $comparison ], $needle, $haystack );
		}

		// Exact.
		return $needle === $haystack;
	}

	/**
	 * Convert string to array with defined separator.
	 *
	 * @param string $str String to convert.
	 * @param string $sep Separator.
	 *
	 * @return bool|array
	 */
	public static function to_arr( $str, $sep = ',' ) {
		$parts = explode( $sep, trim( $str ) );

		return empty( $parts ) ? false : $parts;
	}

	/**
	 * Convert string to array, weed out empty elements and whitespaces.
	 *
	 * @param string $str         User-defined list.
	 * @param string $sep_pattern Separator pattern for regex.
	 *
	 * @return array
	 */
	public static function to_arr_no_empty( $str, $sep_pattern = '\r\n|[\r\n]' ) {
		$array = empty( $str ) ? [] : preg_split( '/' . $sep_pattern . '/', $str, -1, PREG_SPLIT_NO_EMPTY );
		$array = array_filter( array_map( 'trim', $array ) );

		return $array;
	}

	/**
	 * This function transforms the php.ini notation for numbers (like '2M') to an integer.
	 *
	 * @param string $size The size.
	 *
	 * @return int
	 */
	public static function let_to_num( $size ) {
		$char = substr( $size, -1 );
		$ret  = substr( $size, 0, -1 );

		// @codingStandardsIgnoreStart
		switch ( strtoupper( $char ) ) {
			case 'P':
				$ret *= 1024;
			case 'T':
				$ret *= 1024;
			case 'G':
				$ret *= 1024;
			case 'M':
				$ret *= 1024;
			case 'K':
				$ret *= 1024;
		}
		// @codingStandardsIgnoreEnd

		return $ret;
	}

	/**
	 * Convert a number to K, M, B, etc.
	 *
	 * @param int|double $number    Number which to convert to pretty string.
	 * @param int        $precision Decimal places in the human-readable format.
	 *
	 * @return string
	 */
	public static function human_number( $number, $precision = 1 ) {
		if ( ! is_numeric( $number ) ) {
			return 0;
		}

		$negative = '';
		if ( abs( $number ) != $number ) { //phpcs:ignore -- Loose comparison is needed here due to the negative value.
			$negative = '-';
			$number   = abs( $number );
		}

		if ( $number < 1000 ) {
			return $negative ? -1 * $number : $number;
		}

		$unit  = intval( log( $number, 1000 ) );
		$units = [ '', 'K', 'M', 'B', 'T', 'Q' ];

		if ( array_key_exists( $unit, $units ) ) {
			return sprintf( '%s%s%s', $negative, rtrim( number_format( $number / pow( 1000, $unit ), $precision ), '.0' ), $units[ $unit ] );
		}

		return $number;
	}

	/**
	 * Truncate text for given length.
	 *
	 * @param {string} $str    Text to truncate.
	 * @param {number} $length Length to truncate for.
	 * @param {string} $append Append to the end if string is truncated.
	 *
	 * @return {string} Truncated text.
	 */
	public static function truncate( $str, $length = 110, $append = '' ) {
		$str     = wp_strip_all_tags( $str, true );
		$strlen  = mb_strlen( $str );
		$excerpt = mb_substr( $str, 0, $length );

		// Remove part of an entity at the end.
		$excerpt = preg_replace( '/&[^;\s]{0,6}$/', '', $excerpt );
		if ( $str !== $excerpt ) {
			$strrpos = function_exists( 'mb_strrpos' ) ? 'mb_strrpos' : 'strrpos';
			$excerpt = mb_substr( $str, 0, $strrpos( trim( $excerpt ), ' ' ) );
		}

		if ( $strlen > $length ) {
			$excerpt .= $append;
		}

		return $excerpt;
	}

	/**
	 * Returns the portion of string specified by the offset and length parameters.
	 *
	 * @param string   $str    The input string.
	 * @param int      $start  The offset position.
	 * @param int|null $length The length of the substring returned.
	 *
	 * @return string
	 */
	public static function substr( $str, $start, $length = null ) {
		if ( function_exists( 'mb_substr' ) ) {
			return mb_substr( $str, $start, $length );
		}

		return substr( $str, $start, $length );
	}

	/**
	 * Multibyte ucwords.
	 *
	 * @param string $value String to convert.
	 */
	public static function mb_ucwords( $value ) {
		if ( ! function_exists( 'mb_convert_case' ) || ! function_exists( 'mb_detect_encoding' ) || mb_detect_encoding( $value ) !== 'UTF-8' ) {
			return ucwords( $value );
		}

		$words   = preg_split( '/([\s]+)/u', $value, -1, PREG_SPLIT_DELIM_CAPTURE );
		$ucwords = '';
		foreach ( $words as $word ) {
			if ( is_numeric( $word ) ) {
				$ucwords .= $word;
				continue;
			}

			if ( isset( $word[0] ) ) {
				$ucwords .= preg_match( '/[\p{L}]/u', $word[0] ) ? mb_strtoupper( $word[0], 'UTF-8' ) . mb_substr( $word, 1, mb_strlen( $word ), 'UTF-8' ) : $word;
			}
		}

		return $ucwords;
	}
}
PK     “ŠU]õf©‹[)  [)  &  includes/helpers/class-conditional.phpnu „[µü¤        <?php
/**
 * The Conditional helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Conditional class.
 */
trait Conditional {

	/**
	 * Check if whitelabel filter is active.
	 *
	 * @return boolean
	 */
	public static function is_whitelabel() {
		/**
		 * Enable whitelabel.
		 *
		 * @param bool $whitelabel Enable whitelabel.
		 */
		return apply_filters( 'rank_math/whitelabel', false );
	}

	/**
	 * Check if module is active.
	 *
	 * @param  string  $id               Module ID.
	 * @param  boolean $check_registered Whether to check if module is among registered modules or not.
	 * @return boolean
	 */
	public static function is_module_active( $id, $check_registered = true ) {
		$active_modules = get_option( 'rank_math_modules', [] );
		if ( ! is_array( $active_modules ) || ( $check_registered && ! self::is_plugin_ready() ) ) {
			return false;
		}

		return in_array( $id, $active_modules, true ) && ( ! $check_registered || array_key_exists( $id, rank_math()->manager->modules ) );
	}

	/**
	 * Check if Rank Math manager is ready.
	 *
	 * @return boolean
	 */
	public static function is_plugin_ready() {
		return ( isset( rank_math()->manager ) && ! is_null( rank_math()->manager ) );
	}

	/**
	 * Checks if the plugin is configured.
	 *
	 * @param bool $value If this param is set, the option will be updated.
	 * @return bool Return the option value if param is not set.
	 */
	public static function is_configured( $value = null ) {
		$key = 'rank_math_is_configured';
		if ( is_null( $value ) ) {
			$value = get_option( $key );
			return ! empty( $value );
		}
		Helper::schedule_flush_rewrite();
		update_option( $key, $value, false );

		return $value;
	}

	/**
	 * Check if the site is connected to the Rank Math API.
	 *
	 * @return bool
	 */
	public static function is_site_connected() {
		$registered = Admin_Helper::get_registration_data();

		return false !== $registered && ! empty( $registered['connected'] ) && ! empty( $registered['api_key'] );
	}

	/**
	 * Check that the plugin is licensed properly.
	 *
	 * @return bool
	 */
	public static function is_invalid_registration() {
		if ( defined( 'RANK_MATH_REGISTRATION_SKIP' ) && RANK_MATH_REGISTRATION_SKIP ) {
			return false;
		}

		$is_skipped = Helper::is_plugin_active_for_network() ? get_blog_option( get_main_site_id(), 'rank_math_registration_skip' ) : get_option( 'rank_math_registration_skip' );
		if ( true === boolval( $is_skipped ) ) {
			return false;
		}

		return ! self::is_site_connected();
	}

	/**
	 * Check if author archives are indexable.
	 *
	 * @return bool
	 */
	public static function is_author_archive_indexable() {
		if ( true === Helper::get_settings( 'titles.disable_author_archives' ) ) {
			return false;
		}

		if ( Helper::get_settings( 'titles.author_custom_robots' ) && in_array( 'noindex', (array) Helper::get_settings( 'titles.author_robots' ), true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Check if the AMP module is active.
	 *
	 * @since 1.0.24
	 *
	 * @return bool
	 */
	public static function is_amp_active() {
		if ( ! self::is_module_active( 'amp' ) ) {
			return false;
		}

		if ( function_exists( 'ampforwp_get_setting' ) && 'rank_math' === ampforwp_get_setting( 'ampforwp-seo-selection' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Check if editing the file is allowed.
	 *
	 * @since 1.0.32
	 *
	 * @return bool
	 */
	public static function is_edit_allowed() {
		/**
		 * Allow editing the robots.txt & htaccess data.
		 *
		 * @param bool $can_edit Can edit the robots & htacess data.
		 */
		return apply_filters(
			'rank_math/can_edit_file',
			( ! defined( 'DISALLOW_FILE_EDIT' ) || ! DISALLOW_FILE_EDIT ) &&
			( ! defined( 'DISALLOW_FILE_MODS' ) || ! DISALLOW_FILE_MODS )
		);
	}

	/**
	 * Check whether to show SEO score.
	 *
	 * @since 1.0.32
	 *
	 * @return boolean
	 */
	public static function is_score_enabled() {
		/**
		 * Enable SEO Score.
		 *
		 * @param bool $score_enabled Enable SEO Score.
		 */
		return apply_filters( 'rank_math/show_score', true );
	}

	/**
	 * Is on elementor editor.
	 *
	 * @since 1.0.37
	 *
	 * @return boolean
	 */
	public static function is_elementor_editor() {
		return 'elementor' === Param::get( 'action' );
	}

	/**
	 * Is UX Builder (used in Flatsome theme).
	 *
	 * @since 1.0.60
	 *
	 * @return boolean
	 */
	public static function is_ux_builder() {
		return 'uxbuilder' === Param::get( 'app' ) && ! empty( Param::get( 'type' ) );
	}

	/**
	 * Is on Divi frontend editor.
	 *
	 * @since 1.0.63
	 *
	 * @return boolean
	 */
	public static function is_divi_frontend_editor() {
		return function_exists( 'et_core_is_fb_enabled' ) && et_core_is_fb_enabled();
	}

	/**
	 * Get current editor, or false if we're not editing.
	 *
	 * @since 1.0.67
	 *
	 * @return mixed
	 */
	public static function get_current_editor() {
		if ( self::is_elementor_editor() ) {
			return 'elementor';
		}

		if ( self::is_divi_frontend_editor() ) {
			return 'divi';
		}

		if ( self::is_block_editor() && \rank_math_is_gutenberg() ) {
			return 'gutenberg';
		}

		if ( self::is_ux_builder() ) {
			return 'uxbuilder';
		}

		if ( Admin_Helper::is_post_edit() ) {
			return 'classic';
		}

		return false;
	}

	/**
	 * Is Advanced Mode.
	 *
	 * @since 1.0.43
	 *
	 * @return boolean
	 */
	public static function is_advanced_mode() {
		return 'advanced' === apply_filters( 'rank_math/setup_mode', Helper::get_settings( 'general.setup_mode', 'advanced' ) );
	}

	/**
	 * Is React Mode.
	 *
	 * @since 1.0.250
	 *
	 * @return boolean
	 */
	public static function is_react_enabled() {
		return apply_filters( 'rank_math/is_react_enabled', true );
	}

	/**
	 * Is Breadcrumbs Enabled.
	 *
	 * @since 1.0.64
	 *
	 * @return boolean
	 */
	public static function is_breadcrumbs_enabled() {
		return \current_theme_supports( 'rank-math-breadcrumbs' ) || Helper::get_settings( 'general.breadcrumbs' );
	}

	/**
	 * Is Wizard page.
	 *
	 * @since 1.0.64
	 *
	 * @return boolean
	 */
	public static function is_wizard() {
		return ( filter_input( INPUT_GET, 'page' ) === 'rank-math-wizard' || filter_input( INPUT_POST, 'action' ) === 'rank_math_save_wizard' );
	}

	/**
	 * Is filesystem method direct.
	 *
	 * @since 1.0.71.1
	 *
	 * @return boolean
	 */
	public static function is_filesystem_direct() {
		if ( ! function_exists( 'get_filesystem_method' ) ) {
			require_once ABSPATH . '/wp-admin/includes/file.php'; // @phpstan-ignore-line
		}

		return 'direct' === get_filesystem_method();
	}

	/**
	 * Is AJAX request
	 *
	 * @return bool Returns true when the page is loaded via ajax.
	 */
	public static function is_ajax() {
		return function_exists( 'wp_doing_ajax' ) ? wp_doing_ajax() : defined( 'DOING_AJAX' ) && DOING_AJAX;
	}

	/**
	 * Is CRON request
	 *
	 * @return bool Returns true when the page is loaded via cron.
	 */
	public static function is_cron() {
		return function_exists( 'wp_doing_cron' ) ? wp_doing_cron() : defined( 'DOING_CRON' ) && DOING_CRON;
	}

	/**
	 * Checks if WP-Cron is enabled and functional.
	 *
	 * @return bool True if WP-Cron is usable; false otherwise.
	 */
	public static function is_cron_enabled() {
		// Check if WP-Cron is disabled in the wp-config.php file.
		if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
			return false;
		}

		// Early bail if usable cron transient is set to true.
		if ( get_transient( 'rank_math_wp_cron_usable' ) ) {
			return true;
		}

		// Attempt a loopback request to wp-cron.php to check if it is blocked by the server.
		$response = wp_remote_post(
			site_url( 'wp-cron.php' ),
			[
				'timeout'   => 5,
				'blocking'  => true,
				'sslverify' => apply_filters( 'https_local_ssl_verify', true ),
			]
		);

		if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
			return false;
		}

		set_transient( 'rank_math_wp_cron_usable', 1, HOUR_IN_SECONDS );

		return true;
	}

	/**
	 * Is auto-saving
	 *
	 * @return bool Returns true when the page is loaded for auto-saving.
	 */
	public static function is_autosave() {
		return defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE;
	}

	/**
	 * Is REST request
	 *
	 * @link https://wordpress.stackexchange.com/questions/221202/does-something-like-is-rest-exist/221289
	 *
	 * Case #1: After WP_REST_Request initialisation
	 * Case #2: Support "plain" permalink settings
	 * Case #3: It can happen that WP_Rewrite is not yet initialized,
	 *          so do this (wp-settings.php)
	 * Case #4: URL Path begins with wp-json/ (your REST prefix)
	 *          Also supports WP installations in subfolders
	 *
	 * @return bool
	 */
	public static function is_rest() {
		global $wp_rewrite;

		$prefix = rest_get_url_prefix();
		if (
			( defined( 'REST_REQUEST' ) && REST_REQUEST ) || // (#1)
			// phpcs:ignore= WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification -- Nonce verification is not needed here as this is only used to verify the imported file.
			( isset( $_GET['rest_route'] ) && 0 === strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 ) ) // (#2)
		) {
			return true;
		}

		// (#3)
		if ( null === $wp_rewrite ) {
			$wp_rewrite = new \WP_Rewrite();  //phpcs:ignore
		}

		// (#4)
		$rest_url    = wp_parse_url( trailingslashit( rest_url() ) );
		$current_url = wp_parse_url( add_query_arg( [] ) );

		if ( ! isset( $current_url['path'] ) || ! isset( $rest_url['path'] ) ) {
			return false;
		}

		return 0 === strpos( $current_url['path'], $rest_url['path'], 0 );
	}

	/**
	 * Check if the request is heartbeat.
	 *
	 * @return bool
	 */
	public static function is_heartbeat() {
		return 'heartbeat' === Param::post( 'action' );
	}

	/**
	 * Check if the request is from frontend.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return bool
	 */
	public function is_frontend() {
		return ! is_admin();
	}

	/**
	 * Is WooCommerce Installed
	 *
	 * @return bool
	 */
	public static function is_woocommerce_active() {
		// @codeCoverageIgnoreStart
		if ( ! function_exists( 'is_plugin_active' ) ) {
			include_once ABSPATH . 'wp-admin/includes/plugin.php'; // @phpstan-ignore-line
		}
		// @codeCoverageIgnoreEnd
		return is_plugin_active( 'woocommerce/woocommerce.php' ) && function_exists( 'is_woocommerce' );
	}

	/**
	 * Is EDD Installed
	 *
	 * @return bool
	 */
	public static function is_edd_active() {
		return class_exists( 'Easy_Digital_Downloads' );
	}
}
PK     “ŠU]ê.ð+  +  "  includes/helpers/class-options.phpnu „[µü¤        <?php
/**
 * The Options helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

defined( 'ABSPATH' ) || exit;

/**
 * Options class.
 */
trait Options {

	/**
	 * Option handler.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  string $key   Option to perform action.
	 * @param  mixed  $value Pass null to get option,
	 *                       Pass false to delete option,
	 *                       Pass value to update option.
	 * @return mixed
	 */
	public static function option( $key, $value = null ) {
		$key = 'rank_math_' . $key;

		if ( false === $value ) {
			return delete_option( $key );
		}

		if ( is_null( $value ) ) {
			return get_option( $key, [] );
		}

		return update_option( $key, $value );
	}

	/**
	 * Normalize option value.
	 *
	 * @param mixed $value Value to normalize.
	 * @return mixed
	 */
	public static function normalize_data( $value ) {

		if ( 'true' === $value || 'on' === $value ) {
			$value = true;
		} elseif ( 'false' === $value || 'off' === $value ) {
			$value = false;
		} elseif ( '0' === $value || '1' === $value ) {
			$value = intval( $value );
		}

		return $value;
	}

	/**
	 * Update settings.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param array|null $general Array to update settings.
	 * @param array|null $titles  Array to update settings.
	 * @param array|null $sitemap Array to update settings.
	 */
	public static function update_all_settings( $general, $titles, $sitemap ) {

		if ( ! is_null( $general ) ) {
			update_option( 'rank-math-options-general', $general );
		}

		if ( ! is_null( $titles ) ) {
			update_option( 'rank-math-options-titles', $titles );
		}

		if ( ! is_null( $sitemap ) ) {
			update_option( 'rank-math-options-sitemap', $sitemap );
		}
	}
}
PK     “ŠU]Fîæ±  ±  !  includes/helpers/class-locale.phpnu „[µü¤        <?php
/**
 * The Locale helpers.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

defined( 'ABSPATH' ) || exit;

/**
 * Locale class.
 */
class Locale {

	/**
	 * Get site language.
	 *
	 * @return string
	 */
	public static function get_site_language() {
		return self::get_language( get_locale() );
	}

	/**
	 * Get the language part of a given locale, defaults to english when the $locale is empty.
	 *
	 * @param string $locale The locale to get the language of.
	 *
	 * @return string The language part of the locale.
	 */
	public static function get_language( $locale = null ) {
		$language = 'en';

		if ( empty( $locale ) || ! is_string( $locale ) ) {
			return $language;
		}

		$locale_parts = explode( '_', $locale );

		if ( ! empty( $locale_parts[0] ) ) {
			$language = $locale_parts[0];
		}

		return $language;
	}
}
PK     “ŠU]`¨¢Â  Â    includes/helpers/class-arr.phpnu „[µü¤        <?php
/**
 * The Array helpers.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Helpers;

use ArrayAccess;

/**
 * Arr class.
 */
class Arr {

	/**
	 * Determine whether the given value is array accessible.
	 *
	 * @param mixed $value Value to check.
	 *
	 * @return bool
	 */
	public static function accessible( $value ) {
		return is_array( $value ) || $value instanceof ArrayAccess;
	}

	/**
	 * Determine if the given key exists in the provided array.
	 *
	 * @param ArrayAccess|array $arr Array to check key in.
	 * @param string|int        $key   Key to check for.
	 *
	 * @return bool
	 */
	public static function exists( $arr, $key ) {
		if ( $arr instanceof ArrayAccess ) {
			// @codeCoverageIgnoreStart
			return $arr->offsetExists( $key );
			// @codeCoverageIgnoreEnd
		}

		return array_key_exists( $key, $arr );
	}

	/**
	 * Check whether an array or [[\Traversable]] contains an element.
	 *
	 * This method does the same as the PHP function [in_array()](https://secure.php.net/manual/en/function.in-array.php)
	 * but additionally works for objects that implement the [[\Traversable]] interface.
	 *
	 * @throws \InvalidArgumentException If `$arr` is neither traversable nor an array.
	 *
	 * @param array|\Traversable $arr  The set of values to search.
	 * @param mixed              $search The value to look for.
	 * @param bool               $strict Whether to enable strict (`===`) comparison.
	 *
	 * @return bool `true` if `$search` was found in `$arr`, `false` otherwise.
	 */
	public static function includes( $arr, $search, $strict = true ) {
		if ( $arr instanceof \Traversable ) {
			return self::includes_traversable( $arr, $search, $strict );
		}

		$is_array = is_array( $arr );
		if ( ! $is_array ) {
			throw new \InvalidArgumentException( 'Argument $arr must be an array or implement Traversable' );
		}

		return $is_array ? in_array( $search, $arr, $strict ) : false; // phpcs:ignore
	}

	/**
	 * Check Traversable contains an element.
	 *
	 * @param \Traversable $arr  The set of values to search.
	 * @param mixed        $search The value to look for.
	 * @param bool         $strict Whether to enable strict (`===`) comparison.
	 *
	 * @return bool `true` if `$search` was found in `$arr`, `false` otherwise.
	 */
	private static function includes_traversable( $arr, $search, $strict = true ) {
		foreach ( $arr as $value ) {
			if ( ( $strict && $search === $value ) || $search == $value ) { // phpcs:ignore
				return true;
			}
		}

		return false;
	}

	/**
	 * Insert a single array item inside another array at a set position
	 *
	 * @param array $arr      Array to modify. Is passed by reference, and no return is needed.
	 * @param array $new_arr  New array to insert.
	 * @param int   $position Position in the main array to insert the new array.
	 */
	public static function insert( &$arr, $new_arr, $position ) {
		$before = array_slice( $arr, 0, $position - 1 );
		$after  = array_diff_key( $arr, $before );
		$arr    = array_merge( $before, $new_arr, $after );
	}

	/**
	 * Push an item onto the beginning of an array.
	 *
	 * @param array $arr Array to add.
	 * @param mixed $value Value to add.
	 * @param mixed $key   Add with this key.
	 */
	public static function prepend( &$arr, $value, $key = null ) {
		if ( is_null( $key ) ) {
			array_unshift( $arr, $value );
			return;
		}

		$arr = [ $key => $value ] + $arr;
	}

	/**
	 * Update array add or delete value
	 *
	 * @param array $arr Array to modify. Is passed by reference, and no return is needed.
	 * @param array $value Value to add or delete.
	 */
	public static function add_delete_value( &$arr, $value ) {
		if ( ( $key = array_search( $value, $arr ) ) !== false ) { // @codingStandardsIgnoreLine
			unset( $arr[ $key ] );
			return;
		}

		$arr[] = $value;
	}

	/**
	 * Create an array from string.
	 *
	 * @param string $value     The string to split.
	 * @param string $separator Specifies where to break the string.
	 *
	 * @return array Returns an array after applying the function to each one.
	 */
	public static function from_string( $value, $separator = ',' ) {
		return array_values( array_filter( array_map( 'trim', explode( $separator, $value ) ) ) );
	}
}
PK     “ŠU]\H8â®  ®  $  includes/helpers/class-sitepress.phpnu „[µü¤        <?php
/**
 * The Sitepress helpers.
 *
 * @since      1.0.40
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

defined( 'ABSPATH' ) || exit;

/**
 * Sitepress class.
 */
class Sitepress {

	/**
	 * Has filter removed.
	 *
	 * @var boolean
	 */
	private $has_get_category = false;

	/**
	 * Has filter removed.
	 *
	 * @var boolean
	 */
	private $has_get_term = false;

	/**
	 * Has filter removed.
	 *
	 * @var boolean
	 */
	private $has_terms_clauses = false;

	/**
	 * Has filter removed.
	 *
	 * @var boolean
	 */
	private $has_get_terms_args = false;

	/**
	 * Has home_url filter removed.
	 *
	 * @var boolean
	 */
	private $has_home_url = false;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Sitepress
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Sitepress ) ) {
			$instance = new Sitepress();
		}

		return $instance;
	}

	/**
	 * Remove term filters.
	 */
	public function remove_term_filters() {
		if ( ! $this->is_active() ) {
			return;
		}

		$sitepress = $this->get_var();

		$this->has_get_category   = remove_filter( 'category_link', [ $sitepress, 'category_link_adjust_id' ], 1 );
		$this->has_get_term       = remove_filter( 'get_term', [ $sitepress, 'get_term_adjust_id' ], 1 );
		$this->has_terms_clauses  = remove_filter( 'terms_clauses', [ $sitepress, 'terms_clauses' ] );
		$this->has_get_terms_args = remove_filter( 'get_terms_args', [ $sitepress, 'get_terms_args_filter' ] );
	}

	/**
	 * Restore term filters.
	 */
	public function restore_term_filters() {
		if ( ! $this->is_active() ) {
			return;
		}

		$sitepress = $this->get_var();

		if ( $this->has_get_category ) {
			$this->has_get_category = false;
			add_filter( 'category_link', [ $sitepress, 'category_link_adjust_id' ], 1, 1 );
		}

		if ( $this->has_get_term ) {
			$this->has_get_term = false;
			add_filter( 'get_term', [ $sitepress, 'get_term_adjust_id' ], 1, 1 );
		}

		if ( $this->has_terms_clauses ) {
			$this->has_terms_clauses = false;
			add_filter( 'terms_clauses', [ $sitepress, 'terms_clauses' ], 10, 3 );
		}

		if ( $this->has_get_terms_args ) {
			$this->has_get_terms_args = false;
			add_filter( 'get_terms_args', [ $sitepress, 'get_terms_args_filter' ], 10, 2 );
		}
	}

	/**
	 * Remove home_url filter.
	 */
	public function remove_home_url_filter() {
		if ( ! $this->is_active() ) {
			return;
		}

		global $wpml_url_filters;
		$this->has_home_url = remove_filter( 'home_url', [ $wpml_url_filters, 'home_url_filter' ], -10 );
	}

	/**
	 * Restore home_url filter.
	 */
	public function restore_home_url_filter() {
		if ( ! $this->is_active() ) {
			return;
		}

		if ( $this->has_home_url ) {
			global $wpml_url_filters;
			$this->has_home_url = false;
			add_filter( 'home_url', [ $wpml_url_filters, 'home_url_filter' ], -10, 4 );
		}
	}

	/**
	 * Is plugin active.
	 *
	 * @return boolean
	 */
	public function is_active() {
		return isset( $GLOBALS['sitepress'] );
	}

	/**
	 * Get sitepress global variable.
	 *
	 * @return object|null
	 */
	public function get_var() {
		return ! empty( $GLOBALS['sitepress'] ) ? $GLOBALS['sitepress'] : null;
	}

	/**
	 * Delete cached tax permalink.
	 *
	 * @param int    $term_id The term ID.
	 * @param string $taxonomy The taxonomy name.
	 * @return void
	 */
	public function delete_cached_tax_permalink( $term_id, $taxonomy ) {
		if ( ! $this->is_active() ) {
			return;
		}

		wp_cache_delete(
			md5( wp_json_encode( [ $term_id, $taxonomy, false ] ) ),
			'icl_tax_permalink_filter'
		);
	}

	/**
	 * Is per domain negotiation type.
	 *
	 * @return string
	 */
	public function is_per_domain() {
		if ( ! $this->is_active() ) {
			return false;
		}

		$sitepress = $this->get_var();
		$type      = (int) $sitepress->get_setting( 'language_negotiation_type', 0 );

		if ( absint( $type ) === 2 ) {
			return true;
		}

		return false;
	}
}
PK     “ŠU]ÁÙw3Œ	  Œ	     includes/helpers/class-param.phpnu „[µü¤        <?php
/**
 * The Helper class that provides easy access to accessing params from $_GET, $_POST and $_REQUEST.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Helpers;

/**
 * Param class.
 */
class Param {

	/**
	 * Get field from query string.
	 *
	 * @param string $id            Field id to get.
	 * @param mixed  $default_value Default value to return if field is not found.
	 * @param int    $filter        The ID of the filter to apply.
	 * @param int    $flag          The ID of the flag to apply.
	 *
	 * @return mixed
	 */
	public static function get( $id, $default_value = false, $filter = FILTER_DEFAULT, $flag = [] ) {
		return filter_has_var( INPUT_GET, $id ) ? filter_input( INPUT_GET, $id, $filter, $flag ) : $default_value;
	}

	/**
	 * Get field from FORM post.
	 *
	 * @param string $id            Field id to get.
	 * @param mixed  $default_value Default value to return if field is not found.
	 * @param int    $filter        The ID of the filter to apply.
	 * @param int    $flag          The ID of the flag to apply.
	 *
	 * @return mixed
	 */
	public static function post( $id, $default_value = false, $filter = FILTER_DEFAULT, $flag = [] ) {
		return filter_has_var( INPUT_POST, $id ) ? filter_input( INPUT_POST, $id, $filter, $flag ) : $default_value;
	}

	/**
	 * Get field from request.
	 *
	 * @param string $id            Field id to get.
	 * @param mixed  $default_value Default value to return if field is not found.
	 * @param int    $filter        The ID of the filter to apply.
	 * @param int    $flag          The ID of the flag to apply.
	 *
	 * @return mixed
	 */
	public static function request( $id, $default_value = false, $filter = FILTER_DEFAULT, $flag = [] ) {
		return isset( $_REQUEST[ $id ] ) ? filter_var( $_REQUEST[ $id ], $filter, $flag ) : $default_value;
	}

	/**
	 * Get field from FORM server.
	 *
	 * @param string $id            Field id to get.
	 * @param mixed  $default_value Default value to return if field is not found.
	 * @param int    $filter        The ID of the filter to apply.
	 * @param int    $flag          The ID of the flag to apply.
	 *
	 * @return mixed
	 */
	public static function server( $id, $default_value = false, $filter = FILTER_DEFAULT, $flag = [] ) {
		return isset( $_SERVER[ $id ] ) ? filter_var( $_SERVER[ $id ], $filter, $flag ) : $default_value;
	}
}
PK     “ŠU]PÒ$›  ›  $  includes/helpers/class-analytics.phpnu „[µü¤        <?php
/**
 * The Analytics helpers.
 *
 * @since      1.0.86.2
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;
use RankMath\Google\Authentication;
use RankMath\Google\Console;
use RankMath\Helpers\Schedule;

defined( 'ABSPATH' ) || exit;

/**
 * Analytics class.
 */
trait Analytics {

	/**
	 * Can add Analytics Frontend stats.
	 *
	 * @return bool
	 */
	public static function can_add_frontend_stats() {
		return Authentication::is_authorized() &&
			Console::is_console_connected() &&
			Helper::has_cap( 'analytics' ) &&
			apply_filters( 'rank_math/analytics/frontend_stats', Helper::get_settings( 'general.analytics_stats' ) );
	}

	/**
	 * Can add Index Status tab on Analytics page.
	 *
	 * @return bool
	 */
	public static function can_add_index_status() {
		$profile = get_option( 'rank_math_google_analytic_profile', [] );
		if ( is_array( $profile ) && isset( $profile['enable_index_status'] ) ) {
			return $profile['enable_index_status'];
		}

		return true;
	}

	/**
	 * Schedule data fetch.
	 *
	 * @param int $fetch_gap The gap in days to fetch data.
	 */
	public static function schedule_data_fetch( $fetch_gap = 3 ) {
		$task_name = 'rank_math/analytics/data_fetch';

		$action_id = Schedule::unschedule_action( $task_name );

		// Delete cancel ID.
		if ( $action_id ) {
			global $wpdb;

			$wpdb->delete(
				$wpdb->actionscheduler_actions,
				[
					'action_id' => $action_id,
				]
			);

			$wpdb->delete(
				$wpdb->actionscheduler_logs,
				[
					'action_id' => $action_id,
				]
			);
		}

		$schedule_in_minute = wp_rand( 3, defined( 'RANK_MATH_PRO_FILE' ) ? 1380 : 4320 );
		$time_to_schedule   = ( strtotime( 'tomorrow' ) + ( $schedule_in_minute * MINUTE_IN_SECONDS ) );

		Schedule::recurring_action(
			$time_to_schedule,
			DAY_IN_SECONDS * $fetch_gap,
			$task_name,
			[],
			'rank-math'
		);
	}
}
PK     “ŠU]ŒÛ        includes/helpers/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]ÃÆ=åyX  yX  $  includes/helpers/class-wordpress.phpnu „[µü¤        <?php
/**
 * The WordPress helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Post;
use RankMath\Term;
use RankMath\User;
use RankMath\Helper;
use RankMath\Role_Manager\Capability_Manager;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Helpers\Security;
use stdClass;
use WP_Screen;
use WP_Error;

defined( 'ABSPATH' ) || exit;

/**
 * WordPress class.
 */
trait WordPress {

	/**
	 * Wraps wp_safe_redirect to add header.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $location The path to redirect to.
	 * @param int    $status   Status code to use.
	 */
	public static function redirect( $location, $status = 302 ) {
		wp_safe_redirect( $location, $status, 'Rank Math' );
		exit;
	}

	/**
	 * Whether the current user has a specific capability.
	 *
	 * @codeCoverageIgnore
	 * @see current_user_can()
	 *
	 * @param  string $capability Capability name.
	 * @return boolean Whether the current user has the given capability.
	 */
	public static function has_cap( $capability ) {
		return current_user_can( 'rank_math_' . str_replace( '-', '_', $capability ) );
	}

	/**
	 * Get post meta value.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  string  $key           Internal key of the value to get (without prefix).
	 * @param  integer $post_id       Post ID of the post to get the value for.
	 * @param  string  $default_value Default value to use.
	 * @return mixed
	 */
	public static function get_post_meta( $key, $post_id = 0, $default_value = '' ) {
		return Post::get_meta( $key, $post_id, $default_value );
	}

	/**
	 * Get term meta value.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  string $key           Internal key of the value to get (without prefix).
	 * @param  mixed  $term          Term to get the meta value for either (string) term name, (int) term ID or (object) term.
	 * @param  string $taxonomy      Name of the taxonomy to which the term is attached.
	 * @param  string $default_value Default value to use.
	 * @return mixed
	 */
	public static function get_term_meta( $key, $term = 0, $taxonomy = '', $default_value = '' ) {
		return Term::get_meta( $key, $term, $taxonomy, $default_value );
	}

	/**
	 * Get user meta value.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  string $key           Internal key of the value to get (without prefix).
	 * @param  mixed  $user          User to get the meta value for either (int) user ID or (object) user.
	 * @param  string $default_value Default value to use.
	 * @return mixed
	 */
	public static function get_user_meta( $key, $user = 0, $default_value = '' ) {
		return User::get_meta( $key, $user, $default_value );
	}

	/**
	 * Get admin url.
	 *
	 * @param  string $page Page id.
	 * @param  array  $args Pass arguments to query string.
	 * @return string
	 */
	public static function get_admin_url( $page = '', $args = [] ) {
		$page = $page ? 'rank-math-' . $page : 'rank-math';
		$args = wp_parse_args( $args, [ 'page' => $page ] );

		return Security::add_query_arg_raw( $args, admin_url( 'admin.php' ) );
	}

	/**
	 * Get settings url.
	 *
	 * @param string $type Setting type.
	 * @param string $page Page id.
	 * @return string
	 */
	public static function get_settings_url( $type, $page ) {
		$type = "options-{$type}";
		$page = Helper::is_react_enabled() ? "&view=$page" : "#setting-panel-{$page}";

		return self::get_admin_url( $type . $page );
	}

	/**
	 * Get Rank Math Connect URL.
	 *
	 * @since 1.0.19
	 * @return string
	 */
	public static function get_connect_url() {
		$args = [
			'page' => 'rank-math',
			'view' => 'help',
		];
		if ( ! is_multisite() ) {
			return Security::add_query_arg_raw( $args, admin_url( 'admin.php' ) );
		}

		// Makes sure the plugin functions are defined before trying to use them.
		if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
			require_once ABSPATH . '/wp-admin/includes/plugin.php'; // @phpstan-ignore-line
		}

		return is_plugin_active_for_network( plugin_basename( RANK_MATH_FILE ) ) ?
			Security::add_query_arg_raw( $args, network_admin_url( 'admin.php' ) ) :
			Security::add_query_arg_raw( $args, admin_url( 'admin.php' ) );
	}

	/**
	 * Get Rank Math Dashboard url.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return string
	 */
	public static function get_dashboard_url() {
		$site_type     = get_transient( '_rank_math_site_type' );
		$business_type = [ 'news', 'business', 'webshop', 'otherbusiness' ];

		if ( in_array( $site_type, $business_type, true ) ) {
			return self::get_settings_url( 'titles', 'local' );
		}
		return admin_url( 'admin.php?page=rank-math&view=modules' );
	}

	/**
	 * Get active capabilities.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function get_roles_capabilities() {
		$data = [];
		$caps = Capability_Manager::get()->get_capabilities( true );

		foreach ( self::get_roles() as $slug => $role ) {
			self::get_role_capabilities( $slug, $caps, $data );
		}

		return $data;
	}

	/**
	 * Get active capabilities for role.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $slug Role slug.
	 * @param array  $caps Array of capabilities.
	 * @param array  $data Data instance.
	 */
	private static function get_role_capabilities( $slug, $caps, &$data ) {
		$role = get_role( $slug );
		if ( ! $role ) {
			return;
		}

		$slug = esc_attr( $slug );
		foreach ( $caps as $cap ) {
			if ( $role->has_cap( $cap ) ) {
				$data[ $slug ][] = $cap;
			}
		}
	}

	/**
	 * Set capabilities to role.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param array $roles Data.
	 */
	public static function set_capabilities( $roles ) {
		$caps = Capability_Manager::get()->get_capabilities( true );
		foreach ( self::get_roles() as $slug => $role ) {
			self::set_role_capabilities( $slug, $caps, $roles );
		}
	}

	/**
	 * Set capabilities for role.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $slug  Role slug.
	 * @param array  $caps  Array of capabilities.
	 * @param array  $roles Data.
	 */
	private static function set_role_capabilities( $slug, $caps, $roles ) {
		$role = get_role( $slug );
		if ( ! $role ) {
			return;
		}

		$roles[ $slug ] = isset( $roles[ $slug ] ) && is_array( $roles[ $slug ] ) ? array_flip( $roles[ $slug ] ) : [];
		foreach ( $caps as $cap ) {
			$func = isset( $roles[ $slug ], $roles[ $slug ][ $cap ] ) ? 'add_cap' : 'remove_cap';
			$role->$func( $cap );
		}
	}

	/**
	 * Schedules a rewrite flush to happen.
	 *
	 * @codeCoverageIgnore
	 */
	public static function schedule_flush_rewrite() {
		update_option( 'rank_math_flush_rewrite', 1 );
	}

	/**
	 * Get post thumbnail with fallback as
	 *     1. Post thumbnail.
	 *     2. First image in content.
	 *     3. Facebook image if any
	 *     4. Twitter image if any.
	 *     5. Default open graph image set in option panel.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  int|WP_Post  $post_id Post ID or WP_Post object.
	 * @param  string|array $size    Image size. Accepts any valid image size, or an array of width and height values in pixels.
	 * @return false|array Returns an array (url, width, height, is_intermediate), or false, if no image is available.
	 */
	public static function get_thumbnail_with_fallback( $post_id, $size = 'thumbnail' ) {
		if ( has_post_thumbnail( $post_id ) ) {
			$thumbnail_id = get_post_thumbnail_id( $post_id );
			$image        = (array) wp_get_attachment_image_src( $thumbnail_id, $size );
			if ( ! empty( array_filter( $image ) ) ) {
				$image['caption'] = $image ? get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true ) : '';
			}

			return self::validate_image_data( $image );
		}

		preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', get_the_content(), $matches );
		$matches = array_filter( $matches );
		if ( ! empty( $matches ) ) {
			return [ $matches[1][0], 200, 200 ];
		}

		$fb_image = Helper::get_post_meta( 'facebook_image_id', $post_id );
		$tw_image = Helper::get_post_meta( 'twitter_image_id', $post_id, Helper::get_settings( 'titles.open_graph_image_id' ) );
		$og_image = $fb_image ? $fb_image : $tw_image;
		if ( ! $og_image ) {
			return false;
		}

		$image = wp_get_attachment_image_src( $og_image, $size );
		if ( empty( $image ) ) {
			return false;
		}

		$image['caption'] = get_post_meta( $og_image, '_wp_attachment_image_alt', true );
		return self::validate_image_data( $image );
	}

	/**
	 * Check if plugin is network active
	 *
	 * @codeCoverageIgnore
	 *
	 * @return boolean
	 */
	public static function is_plugin_active_for_network() {
		if ( ! is_multisite() ) {
			return false;
		}

		// Makes sure the plugin is defined before trying to use it.
		if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
			require_once ABSPATH . '/wp-admin/includes/plugin.php'; // @phpstan-ignore-line
		}

		if ( ! is_plugin_active_for_network( plugin_basename( RANK_MATH_FILE ) ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Helper function to validate & format ISO 8601 duration.
	 *
	 * @param  string $iso8601 Duration which need to be converted to seconds.
	 * @return string
	 *
	 * @since 1.0.21
	 */
	public static function get_formatted_duration( $iso8601 ) {
		$end = substr( $iso8601, -1 );
		if ( ! in_array( $end, [ 'D', 'H', 'M', 'S' ], true ) ) {
			return '';
		}

		// The format starts with the letter P, for "period".
		return ( ! Str::starts_with( 'P', $iso8601 ) ) ? 'PT' . $iso8601 : $iso8601;
	}

	/**
	 * Get robots default.
	 *
	 * @return array
	 */
	public static function get_robots_defaults() {
		$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : new stdClass();
		$robots = Helper::get_settings( 'titles.robots_global', [] );

		if ( $screen instanceof WP_Screen ) {
			if ( in_array( $screen->base, [ 'post', 'edit' ], true ) && isset( $screen->post_type ) && Helper::get_settings( "titles.pt_{$screen->post_type}_custom_robots" ) ) {
				$robots = Helper::get_settings( "titles.pt_{$screen->post_type}_robots", [] );
			}

			if ( in_array( $screen->base, [ 'term', 'edit-tags' ], true ) && isset( $screen->taxonomy ) && Helper::get_settings( "titles.tax_{$screen->taxonomy}_custom_robots" ) ) {
				$robots = Helper::get_settings( "titles.tax_{$screen->taxonomy}_robots", [] );
			}

			if ( in_array( $screen->base, [ 'profile', 'user-edit' ], true ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
				$robots = Helper::get_settings( 'titles.author_robots', [] );
			}
		}

		if ( is_array( $robots ) && ! in_array( 'noindex', $robots, true ) ) {
			$robots[] = 'index';
		}

		return $robots;
	}

	/**
	 * Get advanced robots default.
	 *
	 * @return array
	 */
	public static function get_advanced_robots_defaults() {
		$screen          = function_exists( 'get_current_screen' ) ? get_current_screen() : new stdClass();
		$advanced_robots = Helper::get_settings( 'titles.advanced_robots_global', [] );

		if ( $screen instanceof WP_Screen ) {

			if ( 'post' === $screen->base && Helper::get_settings( "titles.pt_{$screen->post_type}_custom_robots" ) ) {
				$advanced_robots = Helper::get_settings( "titles.pt_{$screen->post_type}_advanced_robots", [] );
			}

			if ( 'term' === $screen->base && Helper::get_settings( "titles.tax_{$screen->taxonomy}_custom_robots" ) ) {
				$advanced_robots = Helper::get_settings( "titles.tax_{$screen->taxonomy}_advanced_robots", [] );
			}

			if ( in_array( $screen->base, [ 'profile', 'user-edit' ], true ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
				$advanced_robots = Helper::get_settings( 'titles.author_advanced_robots', [] );
			}
		}

		return $advanced_robots;
	}

	/**
	 * Convert timestamp and ISO to date.
	 *
	 * @param string  $value            Value to convert.
	 * @param boolean $include_timezone Whether to include timezone.
	 *
	 * @return string
	 */
	public static function convert_date( $value, $include_timezone = false ) {
		if ( Str::contains( 'T', $value ) ) {
			$value = \strtotime( $value );
		}

		return $include_timezone ? date_i18n( 'Y-m-d H:i-T', $value ) : date_i18n( 'Y-m-d H:i', $value );
	}

	/**
	 * Helper function to convert ISO 8601 duration to seconds.
	 * For example "PT1H12M24S" becomes 5064.
	 *
	 * @param string $iso8601 Duration which need to be converted to seconds.
	 * @return int
	 */
	public static function duration_to_seconds( $iso8601 ) {
		$end = substr( $iso8601, -1 );
		if ( ! in_array( $end, [ 'D', 'H', 'M', 'S' ], true ) ) {
			$iso8601 = $iso8601 . 'S';
		}
		$iso8601 = ! Str::starts_with( 'P', $iso8601 ) ? 'PT' . $iso8601 : $iso8601;

		preg_match( '/^P([0-9]+D|)?T?([0-9]+H|)?([0-9]+M|)?([0-9]+S|)?$/', $iso8601, $matches );
		if ( empty( $matches ) ) {
			return false;
		}

		return array_sum(
			[
				absint( $matches[1] ) * DAY_IN_SECONDS,
				absint( $matches[2] ) * HOUR_IN_SECONDS,
				absint( $matches[3] ) * MINUTE_IN_SECONDS,
				absint( $matches[4] ),
			]
		);
	}

	/**
	 * Id block editor enabled.
	 *
	 * @return bool
	 */
	public static function is_block_editor() {
		$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;

		if ( ! $screen instanceof WP_Screen ) {
			return false;
		}

		if ( method_exists( $screen, 'is_block_editor' ) ) {
			return $screen->is_block_editor();
		}

		if ( 'post' === $screen->base ) {
			return self::use_block_editor_for_post_type( $screen->post_type );
		}

		return false;
	}

	/**
	 * Is site editor enabled.
	 *
	 * @return bool
	 */
	public static function is_site_editor() {
		global $pagenow;

		return $pagenow === 'site-editor.php';
	}

	/**
	 * Validate Image data. Remove empty values and add default height and width to image
	 *
	 * @param  array $image The Image data.
	 * @return array Array of image data
	 *
	 * @since 1.0.64
	 */
	private static function validate_image_data( $image ) {
		$image = array_filter( $image );
		if ( empty( $image ) ) {
			return [];
		}

		$image[1] = isset( $image[1] ) ? $image[1] : 200;
		$image[2] = isset( $image[2] ) ? $image[2] : 200;

		return $image;
	}

	/**
	 * Return whether a post type is compatible with the block editor.
	 *
	 * @param string $post_type The post type.
	 *
	 * @return bool Whether the post type can be edited with the block editor.
	 */
	private static function use_block_editor_for_post_type( $post_type ) {
		if ( ! post_type_exists( $post_type ) ) {
			return false;
		}

		if ( ! post_type_supports( $post_type, 'editor' ) ) {
			return false;
		}

		$post_type_object = get_post_type_object( $post_type );
		if ( $post_type_object && ! $post_type_object->show_in_rest ) {
			return false;
		}

		/**
		 * Filter whether a post is able to be edited in the block editor.
		 *
		 * @since 5.0.0
		 *
		 * @param bool   $use_block_editor  Whether the post type can be edited or not. Default true.
		 * @param string $post_type         The post type being checked.
		 */
		return apply_filters( 'use_block_editor_for_post_type', true, $post_type );
	}

	/**
	 * Generate classes.
	 *
	 * @return string
	 */
	public static function classnames() {
		$args = func_get_args();

		$data = array_reduce(
			$args,
			function ( $carry, $arg ) {
				if ( is_array( $arg ) ) {
					return array_merge( $carry, $arg );
				}

				$carry[] = $arg;
				return $carry;
			},
			[]
		);

		$classes = array_map(
			function ( $key, $value ) {
				$condition = $value;
				$return    = $key;

				if ( is_int( $key ) ) {
					$condition = null;
					$return    = $value;
				}

				$is_array             = is_array( $return );
				$is_object            = is_object( $return );
				$is_stringable_type   = ! $is_array && ! $is_object;
				$is_stringable_object = $is_object && method_exists( $return, '__toString' );

				if ( ! $is_stringable_type && ! $is_stringable_object ) {
					return null;
				}

				if ( is_null( $condition ) ) {
					return $return;
				}

				return $condition ? $return : null;
			},
			array_keys( $data ),
			array_values( $data )
		);

		$classes = array_filter( $classes );

		return implode( ' ', $classes );
	}

	/**
	 * An helper function get the home_url without the WPML language parameter.
	 *
	 * @param string $path   Path relative to the home URL.
	 * @param string $scheme Scheme to give the home URL context.
	 *
	 * @return string
	 */
	public static function get_home_url( $path = '', $scheme = null ) {
		Sitepress::get()->remove_home_url_filter();
		$home_url = home_url( $path, $scheme );
		Sitepress::get()->restore_home_url_filter();

		return $home_url;
	}

	/**
	 * Get roles.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $output How to return roles.
	 *
	 * @return array
	 */
	public static function get_roles( $output = 'names' ) {
		$wp_roles = wp_roles();

		if ( 'names' !== $output ) {
			return $wp_roles->roles;
		}

		return $wp_roles->get_names();
	}

	/**
	 * Retrieves the sitename.
	 *
	 * @return string
	 */
	public static function get_site_name() {
		return wp_strip_all_tags( get_bloginfo( 'name' ), true );
	}

	/**
	 * Get action from request.
	 *
	 * @return bool|string
	 */
	public static function get_request_action() {
		if ( empty( $_REQUEST['action'] ) ) {
			return false;
		}

		if ( '-1' === $_REQUEST['action'] && ! empty( $_REQUEST['action2'] ) ) {
			$_REQUEST['action'] = sanitize_key( $_REQUEST['action2'] );
		}

		return sanitize_key( $_REQUEST['action'] );
	}

	/**
	 * Instantiates the WordPress filesystem for use.
	 *
	 * @return object
	 */
	public static function get_filesystem() {
		global $wp_filesystem;

		if ( empty( $wp_filesystem ) ) {
			global $wp_file_descriptions;
			require_once ABSPATH . '/wp-admin/includes/file.php'; // @phpstan-ignore-line
			WP_Filesystem();
		}

		return $wp_filesystem;
	}

	/**
	 * Get current post type.
	 *
	 * This function has some fallback strategies to get the current screen post type.
	 *
	 * @return string|bool
	 */
	public static function get_post_type() {
		global $pagenow;

		if ( Helper::is_site_editor() ) {
			return 'page';
		}

		$post_type = self::post_type_from_globals();
		if ( false !== $post_type ) {
			return $post_type;
		}

		$post_type = self::post_type_from_request();
		if ( false !== $post_type ) {
			return $post_type;
		}

		return 'post-new.php' === $pagenow ? 'post' : false;
	}

	/**
	 * Get post type from global variables
	 *
	 * @return string|bool
	 */
	private static function post_type_from_globals() {
		global $post, $typenow, $current_screen;

		if ( $post && $post->post_type ) {
			return $post->post_type;
		}

		if ( $typenow ) {
			return $typenow;
		}

		if ( $current_screen && $current_screen->post_type ) {
			return $current_screen->post_type;
		}

		return false;
	}

	/**
	 * Get post type from request variables
	 *
	 * @return string|bool
	 */
	private static function post_type_from_request() {

		if ( $post_type = Param::request( 'post_type' ) ) { // phpcs:ignore
			return sanitize_key( $post_type );
		}

		if ( $post_id = Param::request( 'post_ID', 0, FILTER_VALIDATE_INT ) ) { // phpcs:ignore
			return get_post_type( $post_id );
		}

		// @codeCoverageIgnoreStart
		if ( $post = Param::get( 'post' ) ) { // phpcs:ignore
			return get_post_type( $post );
		}
		// @codeCoverageIgnoreEnd

		return false;
	}

	/**
	 * Strip all shortcodes active or orphan.
	 *
	 * @param string $content Content to remove shortcodes from.
	 *
	 * @return string
	 */
	public static function strip_shortcodes( $content ) {
		if ( ! Str::contains( '[', $content ) ) {
			return $content;
		}

		// Remove Caption shortcode.
		$content = \preg_replace( '#\s*\[caption[^]]*\].*?\[/caption\]\s*#is', '', $content );

		return preg_replace( '~\[\/?.*?\]~s', '', $content );
	}

	/**
	 * Get the current time as a Unix timestamp (seconds since epoch).
	 *
	 * @return int The current Unix timestamp.
	 */
	public static function get_current_time() {
		return strtotime( current_time( 'mysql' ) );
	}

	/**
	 * Handles the upload process to allow .txt and .json file types in WordPress.
	 *
	 * This function hooks into 'upload_mimes' and 'wp_check_filetype_and_ext'
	 * to permit the upload of plain text (.txt) and JSON (.json) files via the media uploader.
	 * It ensures the correct MIME types and file extensions are accepted.
	 *
	 * @return array|WP_Error Array of upload results, including file URL, path, and type, or error information.
	 */
	public static function handle_file_upload() {
		// Add upload hooks.
		add_filter( 'upload_mimes', [ __CLASS__, 'allow_txt_upload' ] );
		add_filter( 'wp_check_filetype_and_ext', [ __CLASS__, 'filetype_and_ext' ], 10, 3 );

		if ( isset( $_FILES['import-me'] ) ) {
			// Do the upload.
			if ( ! function_exists( 'wp_handle_upload' ) ) {
				$required_file = ABSPATH . 'wp-admin/includes/file.php';
				if ( file_exists( $required_file ) ) {
					require_once $required_file; // @phpstan-ignore-line
				}
			}
			$file = wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] );
		} else {
			$file = new WP_Error( 'missing_file', __( 'No file selected for upload.', 'seo-by-rank-math' ) );
		}

		// Remove upload hooks.
		remove_filter( 'upload_mimes', [ __CLASS__, 'allow_txt_upload' ] );
		remove_filter( 'wp_check_filetype_and_ext', [ __CLASS__, 'filetype_and_ext' ], 10 );

		return $file;
	}

	/**
	 * Allow txt & json file upload.
	 *
	 * @param array $types Mime types keyed by the file extension regex corresponding to those types.
	 *
	 * @return array
	 */
	public static function allow_txt_upload( $types ) {
		$types['json'] = 'application/json';
		$types['txt']  = 'text/plain';

		return $types;
	}

	/**
	 * Filters the "real" file type of the given file.
	 *
	 * @param array  $types {
	 *     Values for the extension, mime type, and corrected filename.
	 *
	 *     @type string|false $ext             File extension, or false if the file doesn't match a mime type.
	 *     @type string|false $type            File mime type, or false if the file doesn't match a mime type.
	 *     @type string|false $proper_filename File name with its correct extension, or false if it cannot be determined.
	 * }
	 * @param string $file                      Full path to the file.
	 * @param string $filename                  The name of the file (may differ from $file due to
	 *                                                $file being in a tmp directory).
	 *
	 * @return array
	 */
	public static function filetype_and_ext( $types, $file, $filename ) {
		if ( false !== strpos( $filename, '.json' ) ) {
			$types['ext']  = 'json';
			$types['type'] = 'application/json';
		} elseif ( false !== strpos( $filename, '.txt' ) ) {
			$types['ext']  = 'txt';
			$types['type'] = 'text/plain';
		}

		return $types;
	}
}
PK     “ŠU]0-Þ³3?  3?  %  includes/helpers/class-content-ai.phpnu „[µü¤        <?php
/**
 * The Content_AI helpers.
 *
 * @since      1.0.112
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Str;
use WP_Error;

defined( 'ABSPATH' ) || exit;

/**
 * Content_AI class.
 */
trait Content_AI {
	/**
	 * Content AI Outputs key.
	 *
	 * @var boolean
	 */
	private static $output_key = 'rank_math_content_ai_outputs';

	/**
	 * Content AI Chats key.
	 *
	 * @var boolean
	 */
	private static $chat_key = 'rank_math_content_ai_chats';

	/**
	 * Content AI Recent Prompts key.
	 *
	 * @var boolean
	 */
	private static $recent_prompt_key = 'rank_math_content_ai_recent_prompts';

	/**
	 * Content AI Prompts key.
	 *
	 * @var boolean
	 */
	private static $prompt_key = 'rank_math_content_ai_prompts';

	/**
	 * Content AI Prompts key.
	 *
	 * @var boolean
	 */
	private static $credits_key = 'rank_math_ca_credits';

	/**
	 * Get the Content AI Credits.
	 *
	 * @param bool $force_update Whether to send a request to API to get the new Credits value.
	 * @param bool $return_error Whether to return error when request fails.
	 */
	public static function get_content_ai_credits( $force_update = false, $return_error = false ) {
		$registered = Admin_Helper::get_registration_data();
		if ( empty( $registered ) ) {
			return 0;
		}

		$transient = 'rank_math_content_ai_requested';
		$credits   = self::get_credits();
		if ( ! $force_update || ( get_site_transient( $transient ) ) ) {
			return $credits;
		}

		set_site_transient( $transient, true, 20 ); // Set transient for 20 seconds.

		$args = [
			'username'       => rawurlencode( $registered['username'] ),
			'api_key'        => rawurlencode( $registered['api_key'] ),
			'site_url'       => rawurlencode( self::get_home_url() ),
			'embedWallet'    => 'false',
			'plugin_version' => rank_math()->version,
		];

		$url = add_query_arg(
			$args,
			CONTENT_AI_URL . '/sites/wallet'
		);

		$response = wp_remote_get(
			$url,
			[
				'timeout' => 60,
			]
		);

		$response_code = wp_remote_retrieve_response_code( $response );

		$is_error = self::is_content_ai_error( $response, $response_code );
		if ( $is_error ) {

			if ( in_array( $is_error, [ 'domain_limit_reached', 'account_limit_reached' ], true ) ) {
				$credits = 0;
				self::update_credits( 0 );
			}

			return ! $return_error ? $credits : [
				'credits' => $credits,
				'error'   => $is_error,
			];
		}

		$data = wp_remote_retrieve_body( $response );
		if ( empty( $data ) ) {
			return 0;
		}

		$data = json_decode( $data, true );
		$data = [
			'credits'       => intval( $data['availableCredits'] ?? 0 ),
			'plan'          => $data['plan'] ?? '',
			'refresh_date'  => $data['nextResetDate'] ?? '',
			'usage_details' => $data['usageDetails'] ?? null,
		];

		self::update_credits( $data );

		return $return_error ? $data : $data['credits'];
	}

	/**
	 * Function to get Content AI Credits.
	 *
	 * @return int Credits data.
	 */
	public static function get_credits() {
		$credits_data = get_option( self::$credits_key, [] );
		return ! empty( $credits_data['credits'] ) ? $credits_data['credits'] : 0;
	}

	/**
	 * Function to get Content AI Plan.
	 *
	 * @return string Content AI Plan.
	 */
	public static function get_content_ai_plan() {
		$credits_data = get_option( self::$credits_key, [] );
		return ! empty( $credits_data['plan'] ) ? strtolower( $credits_data['plan'] ) : '';
	}

	/**
	 * Function to get Content AI usage details.
	 *
	 * @return array|null Per-feature usage details, or null if not available.
	 */
	public static function get_usage_details() {
		$credits_data = get_option( self::$credits_key, [] );
		return $credits_data['usage_details'] ?? null;
	}

	/**
	 * Check if a feature's quota is exhausted.
	 *
	 * Returns false (allow) when usage_details is absent or the feature key is missing,
	 * matching the JS isFeatureQuotaExhausted fallback-allow behaviour.
	 *
	 * @param string $feature Feature key (e.g. 'generate_image_alt_v2').
	 *
	 * @return bool True when remaining quota is zero or less.
	 */
	public static function is_feature_quota_exhausted( $feature ) {
		$usage_details = self::get_usage_details();
		if ( empty( $usage_details ) || ! isset( $usage_details[ $feature ] ) ) {
			return false;
		}

		$detail = $usage_details[ $feature ];

		if ( ! isset( $detail['remaining'] ) ) {
			return false;
		}

		return (int) $detail['remaining'] <= 0;
	}

	/**
	 * Merge a single per-tool usage entry into the stored usage_details.
	 *
	 * @param string   $feature   Sanitized feature key (e.g. 'blog_post_idea').
	 * @param int      $used      Number of uses recorded by the API.
	 * @param int|null $remaining Remaining uses as reported by the API, or null if not provided.
	 */
	public static function update_feature_usage( $feature, $used, $remaining = null ) {
		$credits_data  = get_option( self::$credits_key, [] );
		$usage_details = isset( $credits_data['usage_details'] ) ? (array) $credits_data['usage_details'] : [];
		$existing      = isset( $usage_details[ $feature ] ) ? $usage_details[ $feature ] : [];

		$usage_details[ $feature ] = [
			'used'      => absint( $used ),
			'remaining' => ! is_null( $remaining ) ? (int) $remaining : ( $existing['remaining'] ?? null ),
		];

		$credits_data['usage_details'] = $usage_details;
		update_option( self::$credits_key, $credits_data );
	}

	/**
	 * Function to get Content AI Refresh date.
	 *
	 * @return int Content AI Refresh date.
	 */
	public static function get_content_ai_refresh_date() {
		$credits_data = get_option( self::$credits_key, [] );
		return ! empty( $credits_data['refresh_date'] ) ? $credits_data['refresh_date'] : '';
	}

	/**
	 * Function to update Content AI Credits.
	 *
	 * @param int|array $credits Credits data.
	 */
	public static function update_credits( $credits ) {
		if ( is_array( $credits ) ) {
			$credits['refresh_date'] = ! empty( $credits['refresh_date'] ) && ! is_int( $credits['refresh_date'] ) ? strtotime( $credits['refresh_date'] ) : $credits['refresh_date'];
			update_option( self::$credits_key, $credits );
			return;
		}

		$credits_data = get_option( self::$credits_key, [] );
		if ( ! is_array( $credits_data ) ) {
			$credits_data = [ 'credits' => $credits_data ];
		}

		$credits_data['credits'] = max( 0, $credits );
		update_option( self::$credits_key, $credits_data );
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @return string Default Schema Type.
	 */
	public static function get_outputs() {
		return get_option( self::$output_key, [] );
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @return array Default Schema Type.
	 */
	public static function get_chats() {
		return array_values( get_option( self::$chat_key, [] ) );
	}

	/**
	 * Function to get Recent prompts used in Content AI.
	 */
	public static function get_recent_prompts() {
		return get_option( self::$recent_prompt_key, [] );
	}

	/**
	 * Function to get prompts used in Content AI.
	 */
	public static function get_prompts() {
		return get_option( self::$prompt_key, [] );
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @return string Default Schema Type.
	 */
	public static function delete_outputs() {
		return delete_option( self::$output_key );
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @param string $endpoint API endpoint.
	 * @param array  $output   API output.
	 *
	 * @return array
	 */
	public static function update_outputs( $endpoint, $output ) {
		$outputs = self::get_outputs();

		$output = array_map(
			function ( $item ) use ( $endpoint ) {
				return [
					'key'    => $endpoint,
					'output' => $item,
				];
			},
			$output
		);

		$output  = isset( $output['faqs'] ) ? [ current( $output ) ] : $output;
		$outputs = array_merge( $output, $outputs );
		$outputs = array_slice( $outputs, 0, 50 );
		update_option( self::$output_key, $outputs, false );

		return self::get_outputs();
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @param array   $answer          API endpoint.
	 * @param array   $question        API output.
	 * @param int     $session         Chat session.
	 * @param boolean $is_new          Whether its a new chat.
	 * @param boolean $is_regenerating Is regenerating the Chat message.
	 *
	 * @return void
	 */
	public static function update_chats( $answer, $question, $session = 0, $is_new = false, $is_regenerating = false ) {
		$chats = self::get_chats();

		$data = [
			[
				'role'    => 'assistant',
				'content' => $answer,
			],
			[
				'role'    => 'user',
				'content' => $question['content'],
			],
		];

		if ( $is_new ) {
			array_unshift( $chats, $data );
		} else {
			if ( ! isset( $chats[ $session ] ) ) {
				$chats[ $session ] = [];
			}

			if ( $is_regenerating ) {
				unset( $chats[ $session ][0], $chats[ $session ][1] );
			}

			$chats[ $session ] = array_merge(
				$data,
				$chats[ $session ]
			);
		}

		$chats = array_slice( $chats, 0, 50 );

		update_option( self::$chat_key, array_values( $chats ), false );
	}

	/**
	 * Function to update the Recent prompts data.
	 *
	 * @param string $prompt Prompt name.
	 *
	 * @return boolean
	 */
	public static function update_recent_prompts( $prompt ) {
		$prompts = self::get_recent_prompts();
		array_unshift( $prompts, $prompt );
		$prompts = array_slice( array_filter( array_unique( $prompts ) ), 0, 10 );
		return update_option( self::$recent_prompt_key, $prompts, false );
	}

	/**
	 * Function to save the default prompts data.
	 *
	 * @param array $prompts Prompt data.
	 *
	 * @return array
	 */
	public static function save_default_prompts( $prompts ) {
		$saved_prompts  = self::get_prompts();
		$custom_prompts = ! is_array( $saved_prompts ) || ! empty( $saved_prompts['error'] ) ? [] : array_map(
			function ( $prompt ) {
				return $prompt['PromptCategory'] === 'custom' ? $prompt : false;
			},
			$saved_prompts
		);

		if ( ! empty( $custom_prompts ) ) {
			$custom_prompts = array_values( array_filter( $custom_prompts ) );
		}

		$prompts = array_merge( $prompts, $custom_prompts );
		update_option( self::$prompt_key, $prompts );

		return $prompts;
	}

	/**
	 * Function to update the prompts data.
	 *
	 * @param string $prompt Prompt name.
	 *
	 * @return boolean
	 */
	public static function update_prompts( $prompt ) {
		$prompts = self::get_prompts();

		$prompts[] = $prompt;
		update_option( self::$prompt_key, $prompts, false );

		return self::get_prompts();
	}

	/**
	 * Function to delete the prompts.
	 *
	 * @param string $prompt_name Prompt name.
	 *
	 * @return array
	 */
	public static function delete_prompt( $prompt_name ) {
		$prompts = self::get_prompts();
		$prompts = array_map(
			function ( $elem ) use ( $prompt_name ) {
				return $elem['PromptName'] !== $prompt_name ? $elem : false;
			},
			$prompts
		);

		update_option( self::$prompt_key, array_filter( $prompts ), false );

		return self::get_prompts();
	}

	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @param string $index Group index key.
	 *
	 * @return string Default Schema Type.
	 */
	public static function delete_chats( $index ) {
		$chats = self::get_chats();
		unset( $chats[ $index ] );

		return update_option( self::$chat_key, $chats, false );
	}

	/**
	 * Function to get default language based on the site language.
	 *
	 * @return string Default language.
	 */
	public static function content_ai_default_language() {
		$locale    = get_locale();
		$languages = array_filter(
			[
				'Spanish'    => Str::starts_with( 'es_', $locale ),
				'French'     => Str::starts_with( 'fr_', $locale ),
				'German'     => 'de_DE_formal' === $locale,
				'Italian'    => Str::starts_with( 'it_', $locale ),
				'Dutch'      => Str::starts_with( 'de_', $locale ),
				'Portuguese' => Str::starts_with( 'pt_', $locale ),
				'Russian'    => Str::starts_with( 'ru_', $locale ),
				'Chinese'    => Str::starts_with( 'zh_', $locale ),
				'Korean'     => Str::starts_with( 'ko_', $locale ),
				'UK English' => 'en_GB' === $locale,
				'Japanese'   => 'ja' === $locale,
				'Bulgarian'  => 'bg_BG' === $locale,
				'Czech'      => 'cs_CZ' === $locale,
				'Danish'     => 'da_DK' === $locale,
				'Estonian'   => 'et' === $locale,
				'Finnish'    => 'fi' === $locale,
				'Greek'      => 'el' === $locale,
				'Hebrew'     => 'he_IL' === $locale,
				'Hungarian'  => 'hu_HU' === $locale,
				'Indonesian' => 'id_ID' === $locale,
				'Latvian'    => 'lv' === $locale,
				'Lithuanian' => 'lt_LT' === $locale,
				'Norwegian'  => in_array( $locale, [ 'nb_NO', 'nn_NO' ], true ),
				'Polish'     => 'pl_PL' === $locale,
				'Romanian'   => 'ro_RO' === $locale,
				'Slovak'     => 'sk_SK' === $locale,
				'Slovenian'  => 'sl_SI' === $locale,
				'Swedish'    => 'sv_SE' === $locale,
			]
		);

		return ! empty( $languages ) ? current( array_keys( $languages ) ) : 'US English';
	}

	/**
	 * Function to get different error codes we get from the API
	 *
	 * @return array Array of error codes with messages.
	 */
	public static function get_content_ai_errors() {
		return [
			'not_connected'           => esc_html__( 'Please connect your account to use the Content AI.', 'seo-by-rank-math' ),
			'plugin_update_required'  => esc_html__( 'Please update the Rank Math SEO plugin to the latest version to use this feature.', 'seo-by-rank-math' ),
			'upgrade_required'        => esc_html__( 'This feature is only available for Content AI subscribers.', 'seo-by-rank-math' ),
			'rate_limit_exceeded'     => esc_html__( 'Oops! Too many requests in a short time. Please try again after some time.', 'seo-by-rank-math' ),
			'domain_limit_reached'    => esc_html__( 'You\'ve reached the monthly usage limit for this feature on your domain.', 'seo-by-rank-math' ),
			'account_limit_reached'   => esc_html__( 'You\'ve reached the monthly usage limit for this feature.', 'seo-by-rank-math' ),
			'content_filter'          => esc_html__( 'Please revise the entered values in the fields as they are not secure. Make the required adjustments and try again.', 'seo-by-rank-math' ),
			'api_content_filter'      => esc_html__( 'The output was stopped as it was identified as potentially unsafe by the content filter.', 'seo-by-rank-math' ),
			'could_not_generate'      => esc_html__( 'Could not generate. Please try again later.', 'seo-by-rank-math' ),
			'invalid_key'             => esc_html__( 'Invalid API key. Please check your API key or reconnect the site and try again.', 'seo-by-rank-math' ),
			'invalid_input'           => esc_html__( 'The input provided is invalid. Please check the format and try again.', 'seo-by-rank-math' ),
			'temporarily_unavailable' => esc_html__( 'The service is temporarily unavailable. Please try again later.', 'seo-by-rank-math' ),
			'invalid_client'          => esc_html__( 'Unauthorized request. The client credentials are invalid.', 'seo-by-rank-math' ),
			'no_results'              => esc_html__( 'No results found for the given query. Please modify your request and try again', 'seo-by-rank-math' ),
			'not_enough_results'      => esc_html__( 'Insufficient results to complete the request. Please refine your query or reduce the requirements.', 'seo-by-rank-math' ),
			'not_found'               => esc_html__( 'User wallet not found.', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Function to return the error message.
	 *
	 * @param array|WP_Error $response      API response.
	 * @param int            $response_code API response code.
	 */
	public static function is_content_ai_error( $response, $response_code ) {
		$data = wp_remote_retrieve_body( $response );
		$data = ! empty( $data ) ? json_decode( $data, true ) : [];
		if ( is_wp_error( $response ) || 200 !== $response_code || empty( $data ) ) {
			return ! empty( $data['err_key'] ) ? $data['err_key'] : 'could_not_generate';
		}

		return ! empty( $data['error'] ) ? $data['error']['code'] : false;
	}

	/**
	 * Whether to add Keyword Intent.
	 */
	public static function should_determine_search_intent() {
		return apply_filters( 'rank_math/determine_search_intent', true );
	}
}
PK     “ŠU]Y¼xÔ  Ô  !  includes/helpers/class-schema.phpnu „[µü¤        <?php
/**
 * The Schema helpers.
 *
 * @since      1.0.62
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Schema class.
 */
trait Schema {
	/**
	 * Function to get Default Schema type by post_type.
	 *
	 * @param int     $post_id      Post ID.
	 * @param boolean $return_valid Whether to return valid schema type which can be used on the frontend.
	 * @param boolean $sanitize     Return sanitized Schema type.
	 *
	 * @return string Default Schema Type.
	 */
	public static function get_default_schema_type( $post_id, $return_valid = false, $sanitize = false ) {
		if ( metadata_exists( 'post', $post_id, 'rank_math_rich_snippet' ) || ! self::can_use_default_schema( $post_id ) ) {
			return false;
		}

		$post_type = get_post_type( $post_id );
		if ( ! in_array( $post_type, Helper::get_accessible_post_types(), true ) ) {
			return false;
		}

		$schema = Helper::get_settings( "titles.pt_{$post_type}_default_rich_snippet" );
		if ( ! $schema ) {
			return false;
		}

		if ( 'article' === $schema ) {
			/**
			 * Filter: Allow changing the default schema type.
			 *
			 * @param string $schema    Schema type.
			 * @param string $post_type Post type.
			 * @param int    $post_id   Post ID.
			 */
			$schema = apply_filters(
				'rank_math/schema/default_type',
				Helper::get_settings( "titles.pt_{$post_type}_default_article_type" ),
				$post_type,
				$post_id
			);
		}

		if ( class_exists( 'WooCommerce' ) && 'product' === $post_type ) {
			$schema = 'WooCommerceProduct';
		}

		if ( class_exists( 'Easy_Digital_Downloads' ) && 'download' === $post_type ) {
			$schema = 'EDDProduct';
		}

		if ( $return_valid && ! in_array( $schema, [ 'Article', 'NewsArticle', 'BlogPosting', 'WooCommerceProduct', 'EDDProduct' ], true ) ) {
			return false;
		}

		return $sanitize ? self::sanitize_schema_title( $schema ) : $schema;
	}

	/**
	 * Sanitize schema title.
	 *
	 * @param  string  $schema    Schema.
	 * @param  boolean $translate Whether to return the translated string.
	 * @return string
	 */
	public static function sanitize_schema_title( $schema, $translate = true ) {
		if ( in_array( $schema, [ 'BlogPosting', 'NewsArticle' ], true ) ) {
			return $translate ? esc_html__( 'Article', 'seo-by-rank-math' ) : esc_html( 'Article' );
		}

		if ( 'WooCommerceProduct' === $schema ) {
			return $translate ? esc_html__( 'WooCommerce Product', 'seo-by-rank-math' ) : esc_html( 'WooCommerce Product' );
		}

		if ( 'EDDProduct' === $schema ) {
			return $translate ? esc_html__( 'EDD Product', 'seo-by-rank-math' ) : esc_html( 'EDD Product' );
		}

		if ( 'VideoObject' === $schema ) {
			return $translate ? esc_html__( 'Video', 'seo-by-rank-math' ) : esc_html( 'Video' );
		}

		if ( 'JobPosting' === $schema ) {
			return $translate ? esc_html__( 'Job Posting', 'seo-by-rank-math' ) : esc_html( 'Job Posting' );
		}

		if ( 'SoftwareApplication' === $schema ) {
			return $translate ? esc_html__( 'Software Application', 'seo-by-rank-math' ) : esc_html( 'Software Application' );
		}

		if ( 'MusicGroup' === $schema || 'MusicAlbum' === $schema ) {
			return $translate ? esc_html__( 'Music', 'seo-by-rank-math' ) : esc_html( 'Music' );
		}

		return $schema;
	}



	/**
	 * Whether to use default schema.
	 *
	 * @param  int $post_id Post ID.
	 * @return bool
	 */
	public static function can_use_default_schema( $post_id ) {
		$pages = array_map(
			'absint',
			array_filter(
				[
					Helper::get_settings( 'titles.local_seo_about_page' ),
					Helper::get_settings( 'titles.local_seo_contact_page' ),
					get_option( 'page_for_posts' ),
				]
			)
		);

		return ! in_array( (int) $post_id, $pages, true );
	}

	/**
	 * Whether to use default Product schema on WooCommerce pages.
	 *
	 * @return bool
	 */
	public static function can_use_default_product_schema() {
		return apply_filters( 'rank_math/schema/use_default_product', true );
	}
}
PK     “ŠU]ñö©    #  includes/helpers/class-taxonomy.phpnu „[µü¤        <?php
/**
 * The Taxonomy helpers.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Taxonomy class.
 */
trait Taxonomy {

	/**
	 * Is term indexable.
	 *
	 * @param WP_Term $term Term to check.
	 *
	 * @return boolean
	 */
	public static function is_term_indexable( $term ) {
		$robots = self::is_term_meta_indexable( $term );
		if ( is_bool( $robots ) ) {
			return $robots;
		}

		$robots = Helper::get_settings( 'titles.tax_' . $term->taxonomy . '_custom_robots' );
		$robots = false === $robots ? Helper::get_settings( 'titles.robots_global' ) : Helper::get_settings( 'titles.tax_' . $term->taxonomy . '_robots' );

		return in_array( 'noindex', (array) $robots, true ) ? false : true;
	}

	/**
	 * Is term indexable by meta.
	 *
	 * @param WP_Term $term Term to check.
	 *
	 * @return boolean
	 */
	private static function is_term_meta_indexable( $term ) {
		$robots = Helper::get_term_meta( 'robots', $term, $term->taxonomy );
		if ( empty( $robots ) || ! is_array( $robots ) ) {
			return '';
		}

		if ( in_array( 'index', $robots, true ) ) {
			return true;
		}

		return in_array( 'noindex', $robots, true ) ? false : '';
	}

	/**
	 * Check if taxonomy is indexable.
	 *
	 * @param string $taxonomy Taxonomy to check.
	 *
	 * @return bool
	 */
	public static function is_taxonomy_indexable( $taxonomy ) {
		if ( Helper::get_settings( 'titles.tax_' . $taxonomy . '_custom_robots' ) ) {
			if ( in_array( 'noindex', (array) Helper::get_settings( 'titles.tax_' . $taxonomy . '_robots' ), true ) ) {
				return false;
			}
		}

		return Helper::get_settings( 'sitemap.tax_' . $taxonomy . '_sitemap' );
	}

	/**
	 * Get the taxonomies that are public and not set to noindex.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array All the accessible taxonomies.
	 */
	public static function get_accessible_taxonomies() {
		static $accessible_taxonomies;

		if ( isset( $accessible_taxonomies ) && did_action( 'wp_loaded' ) ) {
			return $accessible_taxonomies;
		}

		$accessible_taxonomies = get_taxonomies( [ 'public' => true ], 'objects' );
		$accessible_taxonomies = self::filter_exclude_taxonomies( $accessible_taxonomies );

		if ( ! is_array( $accessible_taxonomies ) ) {
			$accessible_taxonomies = [];
		}

		return $accessible_taxonomies;
	}

	/**
	 * Get accessible taxonomies.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public static function get_allowed_taxonomies() {
		static $rank_math_allowed_taxonomies;

		if ( isset( $rank_math_allowed_taxonomies ) ) {
			return $rank_math_allowed_taxonomies;
		}

		$rank_math_allowed_taxonomies = [];
		foreach ( self::get_accessible_taxonomies() as $taxonomy => $object ) {
			if ( false === Helper::get_settings( 'titles.tax_' . $taxonomy . '_add_meta_box' ) ) {
				continue;
			}

			$rank_math_allowed_taxonomies[] = $taxonomy;
		}

		return $rank_math_allowed_taxonomies;
	}

	/**
	 * Get taxonomies attached to a post type.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string  $post_type Post type to get taxonomy data for.
	 * @param string  $output    (Optional) Output type can be `names`, `objects`, `choices`.
	 * @param boolean $filter    (Optional) Whether to filter taxonomies.
	 *
	 * @return boolean|array
	 */
	public static function get_object_taxonomies( $post_type, $output = 'choices', $filter = true ) {
		if ( 'names' === $output ) {
			return get_object_taxonomies( $post_type );
		}

		$taxonomies = get_object_taxonomies( $post_type, 'objects' );
		$taxonomies = self::filter_exclude_taxonomies( $taxonomies, $filter );

		if ( 'objects' === $output ) {
			return $taxonomies;
		}

		return empty( $taxonomies ) ? false : [ 'off' => esc_html__( 'None', 'seo-by-rank-math' ) ] + wp_list_pluck( $taxonomies, 'label', 'name' );
	}

	/**
	 * Filter taxonomies using
	 *        `is_taxonomy_viewable` function
	 *        'rank_math_excluded_taxonomies' filter
	 *
	 * @codeCoverageIgnore
	 *
	 * @param array|object $taxonomies Collection of taxonomies to filter.
	 * @param boolean      $filter     (Optional) Whether to filter taxonomies.
	 *
	 * @return array|object
	 */
	public static function filter_exclude_taxonomies( $taxonomies, $filter = true ) {
		$taxonomies = $filter ? array_filter( $taxonomies, [ __CLASS__, 'is_taxonomy_viewable' ] ) : $taxonomies;

		/**
		 * Filter: 'rank_math_excluded_taxonomies' - Allow changing the accessible taxonomies.
		 *
		 * @api array $taxonomies The public taxonomies.
		 */
		$taxonomies = apply_filters( 'rank_math/excluded_taxonomies', $taxonomies );

		return $taxonomies;
	}

	/**
	 * Determine whether a taxonomy is viewable.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string|WP_Taxonomy $taxonomy Taxonomy name or object.
	 *
	 * @return bool
	 */
	public static function is_taxonomy_viewable( $taxonomy ) {
		if ( is_scalar( $taxonomy ) ) {
			$taxonomy = get_taxonomy( $taxonomy );
			if ( ! $taxonomy ) {
				return false;
			}
		}

		if ( isset( $taxonomy->name ) && 'wp_pattern_category' === $taxonomy->name ) {
			return false;
		}

		/*
		 * For categories and tags, we check for the 'public' parameter.
		 * For others, we use the 'publicly_queryable' parameter.
		 */
		return $taxonomy->publicly_queryable || ( $taxonomy->_builtin && $taxonomy->public );
	}
}
PK     “ŠU]Šfðƒý  ý  !  includes/helpers/class-editor.phpnu „[µü¤        <?php
/**
 * The Editor helpers.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Editor class.
 */
class Editor {
	/**
	 * Can add editor.
	 *
	 * @return bool
	 */
	public static function can_add_editor() {
		return Helper::has_cap( 'onpage_general' ) ||
			Helper::has_cap( 'onpage_advanced' ) ||
			Helper::has_cap( 'onpage_snippet' ) ||
			Helper::has_cap( 'onpage_social' );
	}

	/**
	 * Add option to Lock Modified date in the editor.
	 *
	 * @return bool
	 */
	public static function can_add_lock_modified_date() {
		return apply_filters( 'rank_math/lock_modified_date', true );
	}
}
PK     “ŠU]/ÃÂ¸  ¸    includes/helpers/class-api.phpnu „[µü¤        <?php
/**
 * The API helpers.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * API class.
 */
trait Api {

	/**
	 * Add notification.
	 *
	 * @param string $message Message string.
	 * @param array  $options Set of options.
	 */
	public static function add_notification( $message, $options = [] ) {
		$options['classes'] = ! empty( $options['classes'] ) ? $options['classes'] . ' rank-math-notice' : 'rank-math-notice';
		$notification       = compact( 'message', 'options' );

		/**
		 * Filter notification message & arguments before adding.
		 * Pass a falsy value to stop the notification from getting added.
		 */
		apply_filters( 'rank_math/admin/add_notification', $notification );

		if ( empty( $notification ) || ! is_array( $notification ) ) {
			return;
		}

		rank_math()->notification->add( $notification['message'], $notification['options'] );
	}

	/**
	 * Remove notification.
	 *
	 * @param string $notification_id Notification id.
	 */
	public static function remove_notification( $notification_id ) {
		rank_math()->notification->remove_by_id( $notification_id );
	}

	/**
	 * Check if notification exists.
	 *
	 * @param string $notification_id Notification id.
	 */
	public static function has_notification( $notification_id ) {
		return rank_math()->notification->has_notification( $notification_id );
	}

	/**
	 * Get Setting.
	 *
	 * @param  string $field_id      The field id to get value for.
	 * @param  mixed  $default_value The default value if no field found.
	 * @return mixed
	 */
	public static function get_settings( $field_id = '', $default_value = false ) {
		return rank_math()->settings->get( $field_id, $default_value );
	}

	/**
	 * Get Auto update setting status.
	 *
	 * @return bool
	 */
	public static function get_auto_update_setting() {
		return in_array( 'seo-by-rank-math/rank-math.php', (array) get_site_option( 'auto_update_plugins', [] ), true );
	}

	/**
	 * Toggle auto updates option.
	 *
	 * @param string $toggle       New status.
	 * @return void
	 */
	public static function toggle_auto_update_setting( $toggle ) {
		do_action( 'rank_math/settings/toggle_auto_update', $toggle );

		$auto_updates = (array) get_site_option( 'auto_update_plugins', [] );
		if ( ! empty( $toggle ) && 'off' !== $toggle ) {
			$auto_updates[] = 'seo-by-rank-math/rank-math.php';
			update_site_option( 'auto_update_plugins', array_unique( $auto_updates ) );
			return;
		}

		update_site_option( 'auto_update_plugins', array_diff( $auto_updates, [ 'seo-by-rank-math/rank-math.php' ] ) );
	}

	/**
	 * Add something to the JSON object.
	 *
	 * @param string $key         Unique identifier.
	 * @param mixed  $value       The data itself can be either a single or an array.
	 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable.
	 */
	public static function add_json( $key, $value, $object_name = 'rankMath' ) {
		rank_math()->json->add( $key, $value, $object_name );
	}

	/**
	 * Remove something from the JSON object.
	 *
	 * @param string $key         Unique identifier.
	 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable.
	 */
	public static function remove_json( $key, $object_name = 'rankMath' ) {
		rank_math()->json->remove( $key, $object_name );
	}
}
PK     “ŠU]Æ#n&€  €  #  includes/helpers/class-security.phpnu „[µü¤        <?php
/**
 * The Security wrappers.
 *
 * @since      1.0.41.3
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Helpers;

defined( 'ABSPATH' ) || exit;

/**
 * Security class.
 */
class Security {

	/**
	 * Add query arg
	 *
	 * @param mixed ...$args Array of arguments.
	 *
	 * @return string
	 */
	public static function add_query_arg( ...$args ) {
		return esc_url( add_query_arg( ...$args ) );
	}

	/**
	 * Add query arg
	 *
	 * @param mixed ...$args Array of arguments.
	 *
	 * @return string
	 */
	public static function add_query_arg_raw( ...$args ) {
		return esc_url_raw( add_query_arg( ...$args ) );
	}

	/**
	 * Removes an item or items from a query string.
	 *
	 * @param string|array   $key    (Required) Query key or keys to remove.
	 * @param string|boolean $query  When false uses the current URL.
	 *
	 * @return string
	 */
	public static function remove_query_arg( $key, $query = false ) {
		return esc_url( remove_query_arg( $key, $query ) );
	}

	/**
	 * Removes an item or items from a query string.
	 *
	 * @param string|array   $key    (Required) Query key or keys to remove.
	 * @param string|boolean $query  When false uses the current URL.
	 *
	 * @return string
	 */
	public static function remove_query_arg_raw( $key, $query = false ) {
		return esc_url_raw( remove_query_arg( $key, $query ) );
	}
}
PK     “ŠU]5¿â›7  7    includes/helpers/class-html.phpnu „[µü¤        <?php
/**
 * The HTML helpers.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Helpers;

/**
 * HTML class.
 */
class HTML {

	/**
	 * Extract attributes from a html tag.
	 *
	 * @param string $elem Extract attributes from tag.
	 *
	 * @return array
	 */
	public static function extract_attributes( $elem ) {
		$regex = '#([^\s=]+)\s*=\s*(\'[^<\']*\'|"[^<"]*")#';
		preg_match_all( $regex, $elem, $attributes, PREG_SET_ORDER );

		$new       = [];
		$remaining = $elem;
		foreach ( $attributes as $attribute ) {
			$val                  = substr( $attribute[2], 1, -1 );
			$new[ $attribute[1] ] = $val;
			$remaining            = str_replace( $attribute[0], '', $remaining );
		}

		// Chop off tag name.
		$remaining = preg_replace( '/<[^\s]+/', '', $remaining, 1 );
		// Check for empty attributes without values.
		$regex = '/([^<][\w\d:_-]+)[\s>]/i';
		preg_match_all( $regex, $remaining, $attributes, PREG_SET_ORDER );
		foreach ( $attributes as $attribute ) {
			$new[ trim( $attribute[1] ) ] = null;
		}

		return $new;
	}

	/**
	 * Generate html attribute string for array.
	 *
	 * @param array  $attributes Contains key/value pair to generate a string.
	 * @param string $prefix     If you want to append a prefic before every key.
	 *
	 * @return string
	 */
	public static function attributes_to_string( $attributes = [], $prefix = '' ) {

		// Early Bail!
		if ( empty( $attributes ) ) {
			return false;
		}

		$out = '';
		foreach ( $attributes as $key => $value ) {
			if ( true === $value || false === $value ) {
				$value = $value ? 'true' : 'false';
			}

			$out .= ' ' . esc_html( $prefix . $key );
			if ( null === $value ) {
				continue;
			}
			$out .= sprintf( '="%s"', esc_attr( $value ) );
		}

		return $out;
	}
}
PK     “ŠU]ˆcE¨  ¨    includes/helpers/class-url.phpnu „[µü¤        <?php
/**
 * The URL helpers.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Helpers
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Helpers;

use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

/**
 * Url class.
 */
class Url {

	/**
	 * Simple check for validating a URL, it must start with http:// or https://.
	 * and pass FILTER_VALIDATE_URL validation.
	 *
	 * @param string $url to check.
	 *
	 * @return bool
	 */
	public static function is_url( $url ) {
		if ( ! is_string( $url ) ) {
			return false;
		}

		// Must start with http:// or https://.
		if ( 0 !== strpos( $url, 'http://' ) && 0 !== strpos( $url, 'https://' ) && 0 !== strpos( $url, '//' ) ) {
			return false;
		}

		// Check for scheme first, if it's missing then add it.
		if ( 0 === strpos( $url, '//' ) ) {
			$url = 'http:' . $url;
		}

		// Must pass validation.
		return false !== filter_var( trailingslashit( $url ), FILTER_VALIDATE_URL ) ? true : false;
	}

	/**
	 * Check whether a url is relative.
	 *
	 * @param string $url URL string to check.
	 *
	 * @return bool
	 */
	public static function is_relative( $url ) {
		return ( 0 !== strpos( $url, 'http' ) && 0 !== strpos( $url, '//' ) );
	}

	/**
	 * Checks whether a url is external.
	 *
	 * @param string $url    URL string to check. This should be a absolute URL.
	 * @param string $domain If wants to use some other domain not home_url().
	 *
	 * @return bool
	 */
	public static function is_external( $url, $domain = false ) {
		if ( empty( $url ) || '#' === $url[0] ) { // Link to current page.
			return false;
		}

		if ( self::is_affiliate( $url ) ) {
			return true;
		}

		if ( '/' === $url[0] ) { // Link to current page or relative link.
			return false;
		}

		$domain = self::get_domain( $domain ? $domain : home_url() );
		if ( Str::contains( $domain, $url ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Checks whether a link is an affiliate link.
	 *
	 * @param string $url URL string to check. This should be a absolute URL.
	 *
	 * @return bool
	 */
	public static function is_affiliate( $url ) {
		if ( empty( $url ) ) {
			return false;
		}

		/**
		 * Filter: 'wp_helpers_is_affiliate_link' - Allows developer to consider a link as affiliate.
		 *
		 * @param bool   $value Default false.
		 * @param string $url URL.
		 */
		return apply_filters( 'wp_helpers_is_affiliate_link', false, $url );
	}

	/**
	 * Get current url.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return string
	 */
	public static function get_current_url() {
		return self::get_scheme() . '://' . self::get_host() . self::get_port() . Param::server( 'REQUEST_URI' );
	}

	/**
	 * Get url scheme.
	 *
	 * @return string
	 */
	public static function get_scheme() {
		return is_ssl() ? 'https' : 'http';
	}

	/**
	 * Some setups like HTTP_HOST, some like SERVER_NAME, it's complicated.
	 *
	 * @link http://stackoverflow.com/questions/2297403/http-host-vs-server-name
	 *
	 * @codeCoverageIgnore
	 *
	 * @return string the HTTP_HOST or SERVER_NAME
	 */
	public static function get_host() {
		$host = Param::server( 'HTTP_HOST' );
		if ( false !== $host ) {
			return $host;
		}

		$name = Param::server( 'SERVER_NAME' );
		if ( false !== $name ) {
			return $name;
		}

		return '';
	}

	/**
	 * Get current request port.
	 *
	 * @return string
	 */
	public static function get_port() {
		$port     = Param::server( 'SERVER_PORT' );
		$has_port = $port && ! in_array( $port, [ '80', '443' ], true );
		return $has_port ? ':' . $port : '';
	}

	/**
	 * Get parent domain
	 *
	 * @param string $url Url to parse.
	 *
	 * @return string
	 */
	public static function get_domain( $url ) {
		$pieces = wp_parse_url( $url );
		$domain = isset( $pieces['host'] ) ? $pieces['host'] : '';

		if ( Str::contains( 'localhost', $domain ) ) {
			return 'localhost';
		}

		if ( preg_match( '/(?P<domain>[a-zÃ€-Å¾0-9][a-zÃ€-Å¾0-9\-]{1,63}\.[a-zÃ€-Å¾\.]{2,15})$/ui', $domain, $regs ) ) {
			return $regs['domain'];
		}

		return false;
	}
}
PK     “ŠU]c"ý      includes/template-tags.phpnu „[µü¤        <?php
/**
 * The public-facing template tags.
 *
 * @package    RankMath
 * @subpackage RankMath\Frontend
 */

use RankMath\Sitemap\Router;
use RankMath\Frontend\Breadcrumbs;
use RankMath\Sitemap\Sitemap;

/**
 * Is Gutenberg enabled.
 *
 * @return bool
 */
function rank_math_is_gutenberg() {
	return apply_filters( 'rank_math/gutenberg/enabled', true );
}

/**
 * Get breadcrumbs.
 *
 * @param array $args Array of arguments.
 * @return string Breadcrumbs HTML output
 */
function rank_math_get_breadcrumbs( $args = [] ) {
	return Breadcrumbs::get() ? Breadcrumbs::get()->get_breadcrumb( $args ) : '';
}

/**
 * Output breadcrumbs.
 *
 * @param array $args Array of arguments.
 */
function rank_math_the_breadcrumbs( $args = [] ) {
	echo wp_kses_post( rank_math_get_breadcrumbs( $args ) );
}

/**
 * Get sitemap url.
 *
 * @return string
 */
function rank_math_get_sitemap_url() {
	return Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' );
}

/**
 * Get SEO score for a post.
 *
 * @param array $args Array of arguments.
 * @return string Breadcrumbs HTML output
 */
function rank_math_get_seo_score( $args = [] ) {
	return rank_math()->frontend_seo_score->get_output( $args );
}

/**
 * Output SEO score for a post.
 *
 * @param array $args Array of arguments.
 */
function rank_math_the_seo_score( $args = [] ) {
	echo wp_kses_post( rank_math_get_seo_score( $args ) );
}

/**
 * Register extra %variables%. For developers.
 * See rank_math_register_var_replacement().
 *
 * @codeCoverageIgnore
 *
 * @param  string $variable_name Variable name, for example %custom%. The '%' signs are optional.
 * @param  array  $args          Array with additional title, description and example values for the variable.
 * @param  mixed  $callback      Replacement callback. Should return value and not output it.
 *
 * @return bool Replacement was registered successfully or not.
 */
function rank_math_register_var_replacement( $variable_name, $args = [], $callback = false ) {
	return rank_math()->variables->register_replacement( $variable_name, $args, $callback );
}
PK     “ŠU]GY‚õ  õ    includes/class-metadata.phpnu „[µü¤        <?php
/**
 * The Metadata Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

defined( 'ABSPATH' ) || exit;

/**
 * Metadata class.
 */
abstract class Metadata {

	/**
	 * Type of object the metadata is for.
	 *
	 * @var string
	 */
	protected $meta_type = 'post';

	/**
	 * Holds the object.
	 *
	 * @var WP_Post|WP_Term|WP_User
	 */
	protected $object = null;

	/**
	 * Holds the object ID.
	 *
	 * @var int
	 */
	protected $object_id = null;

	/**
	 * Holds multiple objects.
	 *
	 * @var array
	 */
	protected static $objects = [];

	/**
	 * Holds the properties.
	 *
	 * @var array
	 */
	protected $properties = [];

	/**
	 * Getter.
	 *
	 * @param string $property Key to get.
	 * @return mixed
	 */
	public function __get( $property ) {

		if ( \property_exists( $this, $property ) ) {
			return $this->$property;
		}

		if ( isset( $this->properties[ $property ] ) ) {
			return $this->properties[ $property ];
		}

		if ( isset( $this->object->$property ) ) {
			return $this->object->$property;
		}

		return get_metadata( $this->meta_type, $this->object_id, $property, true );
	}

	/**
	 * Setter.
	 * This prevents the Dynamic Properties deprecation notice in PHP 8.2.
	 *
	 * @param string $property Key to set.
	 * @param mixed  $value    Value to set.
	 * @return void
	 */
	public function __set( $property, $value ) {
		$this->properties[ $property ] = $value;
	}

	/**
	 * Constructor.
	 *
	 * @param WP_Post|WP_Term|WP_User $object_data Current object.
	 */
	public function __construct( $object_data ) {
		$this->object = $object_data;
	}

	/**
	 * If object found.
	 *
	 * @return bool
	 */
	public function is_found() {
		return ! is_null( $this->object );
	}

	/**
	 * Get attached object.
	 *
	 * @return object
	 */
	public function get_object() {
		return $this->object;
	}

	/**
	 * Get metadata for the object.
	 *
	 * @param  string $key           Value to get, without prefix.
	 * @param  string $default_value Default value to use when metadata does not exists.
	 * @return mixed
	 */
	public function get_metadata( $key, $default_value = '' ) {
		$meta_key = 'rank_math_' . $key;
		if ( isset( $this->$meta_key ) ) {
			return $this->$meta_key;
		}

		$value    = $this->$meta_key;
		$replaced = $this->maybe_replace_vars( $key, $value, $this->object );
		if ( false !== $replaced ) {
			$this->$meta_key = $replaced;
			return $this->$meta_key;
		}

		if ( ! $value || ( $key === 'focus_keyword' && ! is_string( $value ) ) ) {
			return $default_value;
		}

		$this->$meta_key = Helper::normalize_data( $value );
		return $this->$meta_key;
	}

	/**
	 * Maybe replace variables in meta data.
	 *
	 * @param  string $key         Key to check whether it contains variables.
	 * @param  mixed  $value       Value used to replace variables in.
	 * @param  object $object_data Object used for replacements.
	 * @return string|bool False if replacement not needed. Replaced variable string.
	 */
	public function maybe_replace_vars( $key, $value, $object_data ) {
		$need_replacements = [ 'title', 'description', 'facebook_title', 'twitter_title', 'facebook_description', 'twitter_description', 'snippet_name', 'snippet_desc' ];

		// Early bail.
		if ( ! in_array( $key, $need_replacements, true ) || ! is_string( $value ) || '' === $value ) {
			return false;
		}

		$value = \str_replace(
			[ '%seo_title%', '%seo_description%' ],
			[ '%title%', '%excerpt%' ],
			$value
		);

		return Helper::replace_vars( $value, $object_data );
	}
}
PK     “ŠU]l2Ì"  Ì"  "  includes/opengraph/class-slack.phpnu „[µü¤        <?php
/**
 * This class handles the Slack sharing functionality.
 *
 * @since      1.0.76
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\OpenGraph;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Slack class.
 */
class Slack extends OpenGraph {

	/**
	 * Network slug.
	 *
	 * @var string
	 */
	public $network = 'slack';

	/**
	 * Enhanced data tag counter.
	 *
	 * @var int
	 */
	private static $data_tag_count = 0;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/opengraph/slack', 'enhanced_data', 20 );

		parent::__construct();
	}

	/**
	 * Outputs the Slack enhanced data.
	 */
	public function enhanced_data() {
		$data = $this->get_enhanced_data();

		foreach ( $data as $key => $value ) {
			if ( empty( $value ) ) {
				continue;
			}

			$this->enhanced_data_tag( $key, $value );
		}
	}

	/**
	 * Get Slack enhanced data tags for a key/value pair.
	 *
	 * @param string $key   The key.
	 * @param string $value The value.
	 *
	 * @return void
	 */
	public function enhanced_data_tag( $key, $value ) {
		++self::$data_tag_count;

		$this->tag( sprintf( 'twitter:label%d', self::$data_tag_count ), $key );
		$this->tag( sprintf( 'twitter:data%d', self::$data_tag_count ), $value );
	}

	/**
	 * Get Slack data for the current page.
	 *
	 * @return array
	 */
	private function get_enhanced_data() {
		$data = [];

		if ( $this->is_product() ) {
			$data = $this->get_product_data();
		} elseif ( $this->is_page() ) {
			$data = $this->get_page_data();
		} elseif ( $this->is_singular() ) {
			$data = $this->get_post_data();
		} elseif ( $this->is_term() ) {
			$data = $this->get_term_data();
		} elseif ( $this->is_author() ) {
			$data = $this->get_author_data();
		}

		$data = $this->do_filter( 'opengraph/slack_enhanced_data', $data );
		return $data;
	}

	/**
	 * Check if current page is a product.
	 *
	 * @return bool
	 */
	private function is_product() {
		return $this->is_woo_product() || $this->is_edd_product();
	}

	/**
	 * Get product data.
	 *
	 * @return array
	 */
	private function get_product_data() {
		if ( $this->is_woo_product() ) {
			return $this->get_woo_product_data();
		}

		return $this->get_edd_product_data();
	}

	/**
	 * Check if current page is a WooCommerce product.
	 *
	 * @return bool
	 */
	private function is_woo_product() {
		return Helper::get_settings( 'titles.pt_product_slack_enhanced_sharing' ) && is_singular( 'product' ) && function_exists( 'wc_get_product' );
	}

	/**
	 * Check if current page is a EDD download.
	 *
	 * @return bool
	 */
	private function is_edd_product() {
		return Helper::get_settings( 'titles.pt_download_slack_enhanced_sharing' ) && is_singular( 'download' ) && class_exists( 'Easy_Digital_Downloads' );
	}

	/**
	 * Check if current page is a post or a CPT.
	 *
	 * @return bool
	 */
	private function is_singular() {
		return is_singular() && Helper::get_settings( sprintf( 'titles.pt_%s_slack_enhanced_sharing', get_post_type() ) );
	}

	/**
	 * Check if current page is a page.
	 *
	 * @return bool
	 */
	private function is_page() {
		return Helper::get_settings( 'titles.pt_page_slack_enhanced_sharing' ) && is_singular( 'page' ) && ! is_front_page();
	}

	/**
	 * Check if current page is a term archive.
	 *
	 * @return bool
	 */
	private function is_term() {
		if ( is_category() || is_tag() || is_tax() ) {
			$object = get_queried_object();
			return $object && Helper::get_settings( sprintf( 'titles.tax_%s_slack_enhanced_sharing', $object->taxonomy ) );
		}

		return false;
	}

	/**
	 * Check if current page is an author archive.
	 *
	 * @return bool
	 */
	private function is_author() {
		return Helper::get_settings( 'titles.author_slack_enhanced_sharing' ) && is_author();
	}

	/**
	 * Get Slack data for WooCommerce product.
	 *
	 * @return array
	 */
	private function get_woo_product_data() {
		global $post;

		$data    = [];
		$product = \wc_get_product( $post );

		$data[ __( 'Price', 'seo-by-rank-math' ) ]        = $this->get_product_price( $product );
		$data[ __( 'Availability', 'seo-by-rank-math' ) ] = $this->get_product_availability( $product );

		return $data;
	}

	/**
	 * Get Slack data for EDD download.
	 *
	 * @return array
	 */
	private function get_edd_product_data() {
		global $post;

		$data                                      = [];
		$data[ __( 'Price', 'seo-by-rank-math' ) ] = wp_strip_all_tags( \edd_price( $post->ID, false ) );

		return $data;
	}

	/**
	 * Get availability of product.
	 *
	 * @param object $product Product object.
	 *
	 * @return string
	 */
	private function get_product_availability( $product ) {
		$product_availability = $product->get_availability();

		$availability_text = isset( $product_availability['availability'] ) ? $product_availability['availability'] : '';

		if ( ! $availability_text ) {
			return __( 'In stock', 'seo-by-rank-math' );
		}

		return $availability_text;
	}

	/**
	 * Get price of WooCommerce product.
	 * Gets price range for variable products.
	 *
	 * @param object $product Product object.
	 *
	 * @return string
	 */
	private function get_product_price( $product ) {
		$price = wp_strip_all_tags( \wc_price( $product->get_price() ) );
		if ( $product->is_type( 'variable' ) ) {
			$lowest  = \wc_format_decimal( $product->get_variation_price( 'min', false ), \wc_get_price_decimals() );
			$highest = \wc_format_decimal( $product->get_variation_price( 'max', false ), \wc_get_price_decimals() );

			$price = wp_strip_all_tags( \wc_price( $lowest ) . ' - ' . \wc_price( $highest ) );
			if ( $lowest === $highest ) {
				$price = wp_strip_all_tags( \wc_price( $lowest ) );
			}
		}

		return $price;
	}

	/**
	 * Get Slack data for post.
	 *
	 * @return array
	 */
	private function get_post_data() {
		global $post;

		$data = [];

		$data[ __( 'Written by', 'seo-by-rank-math' ) ]   = get_the_author();
		$data[ __( 'Time to read', 'seo-by-rank-math' ) ] = $this->calculate_time_to_read( $post );

		return $data;
	}

	/**
	 * Get Slack data for page.
	 *
	 * @return array
	 */
	private function get_page_data() {
		global $post;

		$data = [];
		$data[ __( 'Time to read', 'seo-by-rank-math' ) ] = $this->calculate_time_to_read( $post );

		return $data;
	}

	/**
	 * Calculate the time to read for the post.
	 *
	 * @param object $post Post object.
	 *
	 * @return string
	 */
	private function calculate_time_to_read( $post ) {

		/**
		 * Filter: 'rank_math/frontend/time_to_read_content' - Change the text to calculate the time to read.
		 *
		 * Note: Avoid using `do_shortcode()` or `the_content` here, as running complex
		 * shortcodes (PHP logic, scripts, styles) can break the site. If shortcode
		 * parsing is needed, handle it via a filter instead.
		 */
		$content = $this->do_filter( 'frontend/time_to_read_content', wp_strip_all_tags( $post->post_content ) );

		/**
		 * Filter: 'rank_math/frontend/time_to_read_wpm' - Change the words per minute to calculate the time to read.
		 */
		$words_per_minute = absint( $this->do_filter( 'frontend/time_to_read_wpm', 200 ) );

		$words   = preg_match_all( '/\p{L}+/u', $content );
		$minutes = floor( $words / $words_per_minute );

		if ( $minutes > 0 ) {
			return sprintf(
				/* translators: %d: minutes */
				_n( '%d minute', '%d minutes', $minutes, 'seo-by-rank-math' ),
				$minutes
			);
		}

		return __( 'Less than a minute', 'seo-by-rank-math' );
	}

	/**
	 * Get Slack data for term.
	 *
	 * @return array
	 */
	private function get_term_data() {
		global $wp_query;

		$data = [];

		$term = $wp_query->get_queried_object();
		if ( ! $term ) {
			return $data;
		}

		$label            = __( 'Items', 'seo-by-rank-math' );
		$post_type_object = get_post_type_object( get_post_type() );
		if ( is_object( $post_type_object ) && isset( $post_type_object->labels->name ) ) {
			$label = $post_type_object->labels->name;
		}

		$data[ $label ] = ( ! empty( $term->category_count ) ? $term->category_count : $term->count );

		return $data;
	}

	/**
	 * Get Slack data for author.
	 *
	 * @return array
	 */
	private function get_author_data() {
		global $wp_query;

		$data = [];

		$author = $wp_query->get_queried_object();
		if ( ! $author || ! is_object( $author ) || ! isset( $author->ID ) ) {
			return $data;
		}

		// Check with get_userdata() to avoid issues with guest authors.
		$userdata = get_userdata( $author->ID );
		if ( ! $userdata || ! is_object( $userdata ) || ! isset( $userdata->ID ) ) {
			return $data;
		}

		$data[ __( 'Name', 'seo-by-rank-math' ) ]  = $author->display_name;
		$data[ __( 'Posts', 'seo-by-rank-math' ) ] = count_user_posts( $author->ID );

		return $data;
	}
}
PK     “ŠU]¦>-ÿi  i  &  includes/opengraph/class-opengraph.phpnu „[µü¤        <?php
/**
 * Add the OpenGraph tags to the header.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\OpenGraph;

use RankMath\Post;
use RankMath\Term;
use RankMath\User;
use RankMath\Helper;
use RankMath\Paper\Paper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * OpenGraph class.
 */
class OpenGraph {

	use Hooker;

	/**
	 * Holds network slug.
	 *
	 * @var string
	 */
	public $network = '';

	/**
	 * Hold meta_key prefix.
	 *
	 * @var string
	 */
	public $prefix = '';

	/**
	 * Schema type.
	 *
	 * @var bool|string
	 */
	protected $schema = false;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/head', 'output_tags', 30 );
	}

	/**
	 * Main OpenGraph output.
	 */
	public function output_tags() {
		wp_reset_query(); //phpcs:ignore

		/**
		 * Hook to add all OpenGraph metadata
		 *
		 * The dynamic part of the hook name. $this->network, is the network slug.
		 *
		 * @param OpenGraph $this The current opengraph network object.
		 */
		$this->do_action( "opengraph/{$this->network}", $this );
	}

	/**
	 * Get title
	 *
	 * @since 1.0.272 Added `$post_id` parameter.
	 *
	 * @param int $post_id Optional post ID. When provided, reads meta for that post directly.
	 * @return bool|string
	 */
	public function get_title( int $post_id = 0 ) {
		$title = $this->title( $post_id );
		if ( $title && Helper::get_settings( 'titles.capitalize_titles' ) ) {
			$title = Str::mb_ucwords( $title );
		}

		return $title ? $title : Paper::get()->get_title();
	}

	/**
	 * Get title.
	 *
	 * @since 1.0.272 Added `$post_id` parameter.
	 *
	 * @param int $post_id Optional post ID. When provided, reads meta for that post directly.
	 * @return string
	 */
	private function title( int $post_id = 0 ) {
		$key = $this->prefix . '_title';

		if ( $post_id || Post::is_simple_page() ) {
			return Post::get_meta( $key, $post_id ? $post_id : Post::get_page_id() );
		}

		if ( is_front_page() ) {
			return Helper::replace_vars( Helper::get_settings( 'titles.homepage_facebook_title' ) );
		}

		if ( is_category() || is_tax() || is_tag() ) {
			return Term::get_meta( $key );
		}

		return is_author() ? User::get_meta( $key ) : false;
	}

	/**
	 * Get description.
	 *
	 * @since 1.0.272 Added `$post_id` parameter.
	 *
	 * @param int $post_id Optional post ID. When provided, reads meta for that post directly.
	 * @return bool|string
	 */
	public function get_description( int $post_id = 0 ) {
		$desc = false;
		$key  = $this->prefix . '_description';

		if ( $post_id || Post::is_simple_page() ) {
			$desc = Post::get_meta( $key, $post_id ? $post_id : Post::get_page_id() );
			$desc = '' !== $desc ? $desc : $this->fallback_description( 'get_the_excerpt' );
		} elseif ( is_front_page() ) {
			$desc = Helper::replace_vars( Helper::get_settings( 'titles.homepage_facebook_description' ) );
		} elseif ( is_category() || is_tag() || is_tax() ) {
			$desc = Term::get_meta( $key );
			$desc = '' !== $desc ? $desc : $this->fallback_description( 'term_description' );
		} elseif ( is_author() ) {
			$desc = User::get_meta( $key );
		}

		return $desc ? $desc : $this->fallback_description();
	}

	/**
	 * Get a fallback description.
	 *
	 * @param string $callback Function name to call.
	 *
	 * @return string
	 */
	protected function fallback_description( $callback = false ) {
		$desc = Paper::get()->get_description();
		if ( '' === $desc && $callback ) {
			$desc = $callback();
		}

		return $desc;
	}

	/**
	 * Internal function to output social meta tags.
	 *
	 * @param string $property Property attribute value.
	 * @param string $content  Content attribute value.
	 *
	 * @return bool
	 */
	public function tag( $property, $content ) {
		$og_property = str_replace( ':', '_', $property );
		/**
		 * Allow developers to change the content of specific social meta tags.
		 *
		 * The dynamic part of the hook name. $this->network, is the network slug
		 * and $og_property, is the property which we are outputting.
		 *
		 * @param string $content The content of the property.
		 */
		$content = $this->do_filter( "opengraph/{$this->network}/$og_property", $content );
		if ( empty( $content ) || ! is_scalar( $content ) ) {
			return false;
		}

		$tag           = 'facebook' === $this->network ? 'property' : 'name';
		$escaped_value = esc_attr( $content );
		if ( false !== filter_var( $content, FILTER_VALIDATE_URL ) ) {
			$escaped_value = esc_url_raw( $content );
		}
		printf( '<meta %1$s="%2$s" content="%3$s" />' . "\n", esc_attr( $tag ), esc_attr( $property ), $escaped_value ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $escaped_value is escaped above.

		return true;
	}

	/**
	 * Get Overlay Image URL
	 *
	 * @param string $network The social network.
	 *
	 * @return string
	 */
	public function get_overlay_image( $network = 'facebook' ) {
		if ( is_singular() ) {
			return Helper::get_post_meta( "{$network}_enable_image_overlay" ) ? Helper::get_post_meta( "{$network}_image_overlay", '', 'play' ) : '';
		}
		if ( is_category() || is_tag() || is_tax() ) {
			return Helper::get_term_meta( "{$network}_enable_image_overlay" ) ? Helper::get_term_meta( "{$network}_image_overlay", 0, '', 'play' ) : '';
		}

		if ( is_author() ) {
			return Helper::get_user_meta( "{$network}_enable_image_overlay" ) ? Helper::get_user_meta( "{$network}_image_overlay", 0, 'play' ) : '';
		}

		return '';
	}
}
PK     “ŠU]Ï%ºXÂK  ÂK  "  includes/opengraph/class-image.phpnu „[µü¤        <?php
/**
 * This code adds the OpenGraph Image parser.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\OpenGraph;

use RankMath\Helper;
use RankMath\Post;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Helpers\Attachment;

defined( 'ABSPATH' ) || exit;

/**
 * Image class.
 */
class Image {

	use Hooker;

	/**
	 * Holds network slug.
	 *
	 * @var array
	 */
	private $network;

	/**
	 * Holds the images that have been put out as OG image.
	 *
	 * @var array
	 */
	private $images = [];

	/**
	 * Holds the OpenGraph instance.
	 *
	 * @var OpenGraph
	 */
	private $opengraph;

	/**
	 * The parameters we have for Facebook images.
	 *
	 * @var array
	 */
	private $usable_dimensions = [
		'min_width'  => 200,
		'max_width'  => 2000,
		'min_height' => 200,
		'max_height' => 2000,
	];

	/**
	 * The Constructor.
	 *
	 * @param string    $image     (Optional) The image URL.
	 * @param OpenGraph $opengraph (Optional) The OpenGraph object..
	 */
	public function __construct( $image = false, $opengraph = null ) {
		$this->opengraph = $opengraph;
		$this->network   = $opengraph->network;

		// If an image was not supplied or could not be added.
		if ( Str::is_non_empty( $image ) ) {
			$this->add_image_by_url( $image );
		}

		if ( ! post_password_required() ) {
			$this->set_images();
		}
	}

	/**
	 * Outputs the images.
	 */
	public function show() {
		foreach ( $this->get_images() as $image => $image_meta ) {
			$this->image_tag( $image_meta );
			$this->image_meta( $image_meta );
		}
	}

	/**
	 * Return the images array.
	 *
	 * @return array
	 */
	public function get_images() {
		return $this->images;
	}

	/**
	 * Check whether we have images or not.
	 *
	 * @return bool
	 */
	public function has_images() {
		return ! empty( $this->images );
	}

	/**
	 * Generate secret key for safer image URLs.
	 *
	 * @param int    $id   The attachment ID.
	 * @param string $type Overlay type.
	 */
	public function generate_secret( $id, $type ) {
		return md5( $id . $type . wp_salt( 'nonce' ) );
	}

	/**
	 * Outputs an image tag based on whether it's https or not.
	 *
	 * @param array $image_meta Image metadata.
	 */
	private function image_tag( $image_meta ) {
		$overlay  = $this->opengraph->get_overlay_image();
		$og_image = $image_meta['url'];
		if ( $overlay && ! empty( $image_meta['id'] ) ) {
			$secret   = $this->generate_secret( $image_meta['id'], $overlay );
			$og_image = admin_url( "admin-ajax.php?action=rank_math_overlay_thumb&id={$image_meta['id']}&type={$overlay}&hash={$secret}" );
		}
		$this->opengraph->tag( 'og:image', esc_url_raw( $og_image ) );

		// Add secure URL if detected. Not all services implement this, so the regular one also needs to be rendered.
		if ( Str::starts_with( 'https://', $og_image ) ) {
			$this->opengraph->tag( 'og:image:secure_url', esc_url_raw( $og_image ) );
		}
	}

	/**
	 * Output the image metadata.
	 *
	 * @param array $image_meta Image meta data to output.
	 */
	private function image_meta( $image_meta ) {
		$image_tags = [ 'width', 'height', 'alt', 'type' ];
		foreach ( $image_tags as $key ) {
			if ( ! empty( $image_meta[ $key ] ) ) {
				$this->opengraph->tag( 'og:image:' . $key, $image_meta[ $key ] );
			}
		}
	}

	/**
	 * Adds an image based on a given URL, and attempts to be smart about it.
	 *
	 * @param string $url The given URL.
	 */
	public function add_image_by_url( $url ) {
		if ( empty( $url ) ) {
			return;
		}

		$attachment_id = Attachment::get_by_url( $url );

		if ( $attachment_id > 0 ) {
			$this->add_image_by_id( $attachment_id );
			return;
		}

		$this->add_image( [ 'url' => $url ] );
	}

	/**
	 * Adds an image to the list by attachment ID.
	 *
	 * @param int $attachment_id The attachment ID to add.
	 */
	public function add_image_by_id( $attachment_id ) {
		$variations = $this->get_image_variations( $attachment_id );

		// If we are left without variations, there is no valid variation for this attachment.
		if ( empty( $variations ) ) {
			return;
		}

		// The variations are ordered so the first variations is by definition the best one.
		$attachment = $variations[0];

		if ( $attachment ) {
			// In the past `add_image` accepted an image url, so leave this for backwards compatibility.
			if ( Str::is_non_empty( $attachment ) ) {
				$attachment = [ 'url' => $attachment ];
			}
			$attachment['alt'] = Attachment::get_alt_tag( $attachment_id );

			$this->add_image( $attachment );
		}
	}

	/**
	 * Display an OpenGraph image tag.
	 *
	 * @param string $attachment Source URL to the image.
	 */
	public function add_image( $attachment = '' ) {
		// In the past `add_image` accepted an image url, so leave this for backwards compatibility.
		if ( Str::is_non_empty( $attachment ) ) {
			$attachment = [ 'url' => $attachment ];
		}

		$validate_image = true;
		/**
		 * Allow changing the OpenGraph image.
		 * The dynamic part of the hook name, $this->network, is the network slug (facebook, twitter).
		 *
		 * @param string $img The image we are about to add.
		 */
		$filter_image_url = trim( $this->do_filter( "opengraph/{$this->network}/image", isset( $attachment['url'] ) ? $attachment['url'] : '' ) );
		if ( ! empty( $filter_image_url ) && ( empty( $attachment['url'] ) || $filter_image_url !== $attachment['url'] ) ) {
			$attachment     = [ 'url' => $filter_image_url ];
			$validate_image = false;
		}

		/**
		 * Secondary filter to allow changing the whole array.
		 * The dynamic part of the hook name, $this->network, is the network slug (facebook, twitter).
		 * This makes it possible to change the image ID too, to allow for image overlays.
		 *
		 * @param array $attachment The image we are about to add.
		 */
		$attachment = $this->do_filter( "opengraph/{$this->network}/image_array", $attachment );

		if ( ! is_array( $attachment ) || empty( $attachment['url'] ) ) {
			return;
		}

		// Validate image only when it is not added using the opengraph filter.
		if ( $validate_image ) {
			$attachment_url = explode( '?', $attachment['url'] );
			if ( ! empty( $attachment_url ) ) {
				$attachment['url'] = $attachment_url[0];
			}

			// If the URL ends in `.svg`, we need to return.
			if ( ! $this->is_valid_image_url( $attachment['url'] ) ) {
				return;
			}
		}

		$image_url = $attachment['url'];
		if ( empty( $image_url ) ) {
			return;
		}

		if ( Url::is_relative( $image_url ) ) {
			$image_url = Attachment::get_relative_path( $image_url );
		}

		if ( array_key_exists( $image_url, $this->images ) ) {
			return;
		}

		$attachment['url'] = $image_url;

		if ( empty( $attachment['alt'] ) && is_singular() ) {
			$attachment['alt'] = $this->get_attachment_alt();
		}

		$this->images[ $image_url ] = $attachment;
	}

	/**
	 * Get attachment alt with fallback
	 *
	 * @return string
	 */
	private function get_attachment_alt() {
		global $post;

		$focus_keywords = Helper::get_post_meta( 'focus_keyword', $post->ID );
		if ( ! empty( $focus_keywords ) ) {
			$focus_keywords = explode( ',', $focus_keywords );
			return $focus_keywords[0];
		}

		return get_the_title();
	}

	/**
	 * Check if page is front page or singular and call the corresponding functions.
	 */
	private function set_images() {
		/**
		 * Allow developers to add images to the OpenGraph tags.
		 *
		 * The dynamic part of the hook name. $this->network, is the network slug.
		 *
		 * @param Image The current object.
		 */
		$this->do_action( "opengraph/{$this->network}/add_images", $this );

		switch ( true ) {
			case is_front_page():
				$this->set_front_page_image();
				break;
			case is_home():
				$this->set_posts_page_image();
				break;
			case is_attachment():
				$this->set_attachment_page_image();
				break;
			case is_singular() || Post::is_shop_page():
				$this->set_singular_image();
				break;
			case is_post_type_archive():
				$this->set_archive_image();
				break;
			case is_category():
			case is_tag():
			case is_tax():
				$this->set_taxonomy_image();
				break;
			case is_author():
				$this->set_author_image();
				break;
		}

		/**
		 * Allow developers to add images to the OpenGraph tags.
		 *
		 * The dynamic part of the hook name. $this->network, is the network slug.
		 *
		 * @param Image The current object.
		 */
		$this->do_action( "opengraph/{$this->network}/add_additional_images", $this );

		/**
		 * Passing a truthy value to the filter will effectively short-circuit the
		 * set default image process.
		 *
		 * @param bool $return Short-circuit return value. Either false or true.
		 */
		if ( false !== $this->do_filter( 'opengraph/pre_set_default_image', false ) ) {
			return;
		}

		// If not, get default image.
		$image_id = Helper::get_settings( 'titles.open_graph_image_id' );
		if ( ! $this->has_images() ) {
			if ( $image_id > 0 ) {
				$this->add_image_by_id( $image_id );
				return;
			}

			$this->add_image(); // This allows "opengraph/{$this->network}/image" filter to be used even if no image is set.
		}
	}

	/**
	 * If the frontpage image exists, call `add_image`.
	 *
	 * @return void
	 */
	private function set_front_page_image() {
		$this->set_user_defined_image();

		if ( $this->has_images() ) {
			return;
		}

		// If no frontpage image is found, don't add anything.
		if ( $image_id = Helper::get_settings( 'titles.homepage_facebook_image_id' ) ) { // phpcs:ignore
			$this->add_image_by_id( $image_id );
		}
	}

	/**
	 * Gets the user-defined image of the post.
	 *
	 * @param null|int $post_id The post ID to get the images for.
	 */
	private function set_user_defined_image( $post_id = null ) {
		if ( null === $post_id ) {
			$post_id = get_queried_object_id();
		}

		$this->set_image_post_meta( $post_id );

		if ( $this->has_images() ) {
			return;
		}

		$this->set_featured_image( $post_id );
	}

	/**
	 * If opengraph-image is set, call `add_image` and return true.
	 *
	 * @param int $post_id Optional post ID to use.
	 */
	private function set_image_post_meta( $post_id = 0 ) {
		if ( empty( $post_id ) ) {
			return;
		}
		$image_id = Helper::get_post_meta( "{$this->opengraph->prefix}_image_id", $post_id );
		$this->add_image_by_id( $image_id );
	}

	/**
	 * Retrieve the featured image.
	 *
	 * @param int $post_id The post ID.
	 */
	private function set_featured_image( $post_id = null ) {
		/**
		 * Passing a truthy value to the filter will effectively short-circuit the
		 * set featured image process.
		 *
		 * @param bool $return  Short-circuit return value. Either false or true.
		 * @param int  $post_id Post ID for the current post.
		 */
		if ( false !== $this->do_filter( 'opengraph/pre_set_featured_image', false, $post_id ) ) {
			return;
		}

		if ( $post_id && has_post_thumbnail( $post_id ) ) {
			$attachment_id = get_post_thumbnail_id( $post_id );
			$this->add_image_by_id( $attachment_id );
		}
	}

	/**
	 * Get the images of the posts page.
	 */
	private function set_posts_page_image() {
		$post_id = get_option( 'page_for_posts' );

		$this->set_image_post_meta( $post_id );

		if ( $this->has_images() ) {
			return;
		}

		$this->set_featured_image( $post_id );
	}

	/**
	 * If this is an attachment page, call `add_image` with the attachment.
	 */
	private function set_attachment_page_image() {
		$post_id = get_queried_object_id();
		if ( wp_attachment_is_image( $post_id ) ) {
			$this->add_image_by_id( $post_id );
		}
	}

	/**
	 * Get the images of the singular post.
	 *
	 * @param null|int $post_id The post ID to get the images for.
	 */
	private function set_singular_image( $post_id = null ) {
		$is_shop_page = Post::is_shop_page();
		if ( $is_shop_page ) {
			$post_id = Post::get_shop_page_id();
		}

		$post_id = is_null( $post_id ) ? get_queried_object_id() : $post_id;
		$this->set_user_defined_image( $post_id );

		if ( $this->has_images() ) {
			return;
		}

		/**
		 * Passing a truthy value to the filter will effectively short-circuit the
		 * set content image process.
		 *
		 * @param bool $return  Short-circuit return value. Either false or true.
		 * @param int  $post_id Post ID for the current post.
		 */
		if ( false !== $this->do_filter( 'opengraph/pre_set_content_image', false, $post_id ) ) {
			if ( $is_shop_page ) {
				$this->set_archive_image();
			}

			return;
		}
		$this->set_content_image( get_post( $post_id ) );

		if ( ! $this->has_images() && $is_shop_page ) {
			$this->set_archive_image();
		}
	}

	/**
	 * Adds the first usable attachment image from the post content.
	 *
	 * @param object $post The post object.
	 */
	private function set_content_image( $post ) {
		if ( empty( $post ) || ! $post instanceof \WP_Post ) {
			return;
		}

		$content = sanitize_post_field( 'post_content', $post->post_content, $post->ID );

		// Early bail!
		if ( '' === $content || false === Str::contains( '<img', $content ) ) {
			return;
		}

		$do_og_content_image_cache = $this->do_filter( 'opengraph/content_image_cache', true );
		if ( $do_og_content_image_cache ) {
			$cache_key = 'rank_math_og_content_image';
			$cache     = get_post_meta( $post->ID, $cache_key, true );
			$check     = md5( $post->post_content );
			if ( ! empty( $cache ) && isset( $cache['check'] ) && $check === $cache['check'] ) {
				foreach ( $cache['images'] as $image ) {
					if ( is_int( $image ) ) {
						$this->add_image_by_id( $image );
					} else {
						$this->add_image( $image );
					}
				}
				return;
			}

			$cache = [
				'check'  => $check,
				'images' => [],
			];
		}

		$images = [];
		if ( preg_match_all( '`<img [^>]+>`', $content, $matches ) ) {
			foreach ( $matches[0] as $img ) {
				if ( preg_match( '`src=(["\'])(.*?)\1`', $img, $match ) ) {
					if ( isset( $match[2] ) ) {
						$images[] = $match[2];
					}
				}
			}
		}

		$images = array_unique( $images );
		if ( empty( $images ) ) {
			return;
		}

		foreach ( $images as $image ) {

			// If an image has been added, we're done.
			if ( $this->has_images() ) {
				break;
			}

			if ( Url::is_external( $image ) ) {
				$this->add_image( $image );
			} else {
				$attachment_id = Attachment::get_by_url( $image );
				if ( 0 === $attachment_id ) {
					$this->add_image( $image );
					if ( $do_og_content_image_cache ) {
						$cache['images'][] = $image;
					}
				} else {
					$this->add_image_by_id( $attachment_id );
					if ( $do_og_content_image_cache ) {
						$cache['images'][] = $attachment_id;
					}
				}
			}
		}

		if ( $do_og_content_image_cache ) {
			update_post_meta( $post->ID, $cache_key, $cache );
		}
	}

	/**
	 * Check if Author has an image and add this image.
	 */
	private function set_author_image() {
		$image_id = Helper::get_user_meta( "{$this->opengraph->prefix}_image_id" );
		$this->add_image_by_id( $image_id );
	}

	/**
	 * Check if taxonomy has an image and add this image.
	 */
	private function set_taxonomy_image() {
		$image_id = Helper::get_term_meta( "{$this->opengraph->prefix}_image_id" );
		$this->add_image_by_id( $image_id );
	}

	/**
	 * Check if archive has an image and add this image.
	 */
	private function set_archive_image() {
		$post_type = get_query_var( 'post_type' );
		$post_type = is_array( $post_type ) ? reset( $post_type ) : $post_type;
		$image_id  = Helper::get_settings( "titles.pt_{$post_type}_facebook_image_id" );
		$this->add_image_by_id( $image_id );
	}

	/**
	 * Determines whether the passed URL is considered valid.
	 *
	 * @param string $url The URL to check.
	 *
	 * @return bool Whether or not the URL is a valid image.
	 */
	protected function is_valid_image_url( $url ) {
		if ( ! is_string( $url ) ) {
			return false;
		}

		$check = wp_check_filetype( $url );
		if ( empty( $check['ext'] ) ) {
			return false;
		}

		$extensions = [ 'jpeg', 'jpg', 'gif', 'png', 'webp', 'avif' ];

		return in_array( $check['ext'], $extensions, true );
	}

	/**
	 * Returns the different image variations for consideration.
	 *
	 * @param int $attachment_id The attachment to return the variations for.
	 *
	 * @return array The different variations possible for this attachment ID.
	 */
	public function get_variations( $attachment_id ) {
		$variations = [];

		/**
		 * Determines which image sizes we'll loop through to get an appropriate image.
		 *
		 * @param unsigned array - The array of image sizes to loop through.
		 */
		$sizes = $this->do_filter( 'opengraph/image_sizes', [ 'full', 'large', 'medium_large' ] );

		foreach ( $sizes as $size ) {
			if ( $variation = $this->get_attachment_image( $attachment_id, $size ) ) { // phpcs:ignore
				if ( $this->has_usable_dimensions( $variation ) ) {
					$variations[] = $variation;
				}
			}
		}

		return $variations;
	}

	/**
	 * Validate Attachment image and return its variations.
	 *
	 * @param int $attachment_id The attachment to return the variations for.
	 *
	 * @return array The different variations possible for this attachment ID.
	 */
	private function get_image_variations( $attachment_id ) {
		/**
		 * Allow plugins to change the blog in a multisite environment. This hook can be used by plugins that uses a global media library from the main site.
		 */
		$this->do_action( 'opengraph/pre_attachment_image_check', $attachment_id );

		/**
		 * Filter to change the attachment ID.
		 *
		 * @param int $attachment_id Attachment ID.
		 */
		$attachment_id = $this->do_filter( 'opengraph/attachment_id', $attachment_id );
		if ( ! wp_attachment_is_image( $attachment_id ) ) {
			return;
		}

		$variations = $this->get_variations( $attachment_id );

		/**
		 * Allow plugins to reset the blog in a multisite environment. This hook can be used by plugins that utilize a global media library from the main site.
		 */
		$this->do_action( 'opengraph/post_attachment_image_check', $attachment_id );

		return $variations;
	}

	/**
	 * Retrieve an image to represent an attachment.
	 *
	 * @param int          $attachment_id Image attachment ID.
	 * @param string|array $size          Optional. Image size. Accepts any valid image size, or an array of width
	 *                                    and height values in pixels (in that order). Default 'thumbnail'.
	 * @return false|array
	 */
	private function get_attachment_image( $attachment_id, $size = 'thumbnail' ) {
		$image = wp_get_attachment_image_src( $attachment_id, $size );

		// Early Bail!
		if ( ! $image ) {
			return false;
		}

		list( $src, $width, $height ) = $image;

		return [
			'id'     => $attachment_id,
			'url'    => $src,
			'width'  => $width,
			'height' => $height,
			'type'   => get_post_mime_type( $attachment_id ),
			'alt'    => Attachment::get_alt_tag( $attachment_id ),
		];
	}

	/**
	 * Checks whether an img sizes up to the parameters.
	 *
	 * @param  array $dimensions The image values.
	 * @return bool True if the image has usable measurements, false if not.
	 */
	private function has_usable_dimensions( $dimensions ) {
		foreach ( [ 'width', 'height' ] as $param ) {
			$minimum = $this->usable_dimensions[ 'min_' . $param ];
			$maximum = $this->usable_dimensions[ 'max_' . $param ];

			$current = $dimensions[ $param ];
			if ( ( $current < $minimum ) || ( $current > $maximum ) ) {
				return false;
			}
		}

		return true;
	}
}
PK     “ŠU]Ö ~ã“"  “"  %  includes/opengraph/class-facebook.phpnu „[µü¤        <?php
/**
 * This code adds the Facebook metadata.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\OpenGraph;

use RankMath\Helper;
use RankMath\Paper\Paper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Facebook class.
 */
class Facebook extends OpenGraph {

	/**
	 * Network slug.
	 *
	 * @var string
	 */
	public $network = 'facebook';

	/**
	 * Metakey prefix.
	 *
	 * @var string
	 */
	public $prefix = 'facebook';

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->hooks();
		add_filter( 'jetpack_enable_open_graph', '__return_false' );
		parent::__construct();
	}

	/**
	 * Hooks.
	 */
	private function hooks() {
		if ( isset( $GLOBALS['fb_ver'] ) || class_exists( 'Facebook_Loader', false ) ) {
			$this->filter( 'fb_meta_tags', 'facebook_filter', 10, 1 );
			return;
		}

		$this->filter( 'language_attributes', 'add_namespace', 15 );
		$this->action( 'rank_math/opengraph/facebook', 'locale', 1 );
		$this->action( 'rank_math/opengraph/facebook', 'type', 5 );
		$this->action( 'rank_math/opengraph/facebook', 'title', 10 );
		$this->action( 'rank_math/opengraph/facebook', 'description', 11 );
		$this->action( 'rank_math/opengraph/facebook', 'url', 12 );
		$this->action( 'rank_math/opengraph/facebook', 'site_name', 13 );
		$this->action( 'rank_math/opengraph/facebook', 'website', 14 );
		$this->action( 'rank_math/opengraph/facebook', 'site_owner', 20 );
		$this->action( 'rank_math/opengraph/facebook', 'image', 30 );
	}

	/**
	 * Filter the Facebook plugins metadata.
	 *
	 * @param  array $meta_tags The array to fix.
	 * @return array
	 */
	public function facebook_filter( $meta_tags ) {
		$meta_tags['http://ogp.me/ns#type']  = $this->type( false );
		$meta_tags['http://ogp.me/ns#title'] = $this->title( false );

		// Filter the locale too because the Facebook plugin locale code is not as good as ours.
		$meta_tags['http://ogp.me/ns#locale'] = $this->locale( false );

		$desc = $this->description( false );
		if ( ! empty( $desc ) ) {
			$meta_tags['http://ogp.me/ns#description'] = $desc;
		}

		return $meta_tags;
	}

	/**
	 * Adds prefix attributes to the <html> tag.
	 *
	 * @param  string $input The input namespace string.
	 * @return string
	 */
	public function add_namespace( $input ) {
		return $input . ' prefix="og: https://ogp.me/ns#"';
	}

	/**
	 * Output the locale, doing some conversions to make sure the proper Facebook locale is outputted.
	 *
	 * @see  http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 *
	 * @param bool $display Whether to echo or return the locale.
	 * @return string
	 */
	public function locale( $display = true ) {
		$locale = get_locale();
		$locale = Facebook_Locale::sanitize( $locale );
		$locale = Facebook_Locale::validate( $locale );

		if ( $display ) {
			$this->tag( 'og:locale', $locale );
		}

		return $locale;
	}

	/**
	 * Output the OpenGraph type.
	 *
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/object/
	 *
	 * @param bool $display Whether to echo or return the type.
	 * @return string
	 */
	public function type( $display = true ) {
		$type = $this->get_type();

		if ( is_singular() ) {
			if ( 'article' === $type && ! is_front_page() ) {
				$this->action( 'rank_math/opengraph/facebook', 'article_author', 15 );
				$this->action( 'rank_math/opengraph/facebook', 'tags', 16 );
				$this->action( 'rank_math/opengraph/facebook', 'category', 17 );
			}
			$this->action( 'rank_math/opengraph/facebook', 'publish_date', 19 );
		}

		/**
		 * Allow changing the OpenGraph type of the page.
		 *
		 * @param string $type The OpenGraph type string.
		 */
		$type = $this->do_filter( 'opengraph/type', $type );

		if ( Str::is_non_empty( $type ) && $display ) {
			$this->tag( 'og:type', $type );
		}

		return $type;
	}

	/**
	 * Get type.
	 *
	 * @return string
	 */
	private function get_type() {
		if ( is_front_page() || is_home() ) {
			return 'website';
		}

		if ( is_author() ) {
			return 'profile';
		}

		return $this->is_product() ? 'product' : 'article';
	}

	/**
	 * Outputs the SEO title as OpenGraph title.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 *
	 * @param bool $display Whether or not to echo the output.
	 *
	 * @return string
	 */
	public function title( $display = true ) {
		$title = trim( $this->get_title() );
		if ( $display ) {
			$this->tag( 'og:title', $title );
		}

		return $title;
	}

	/**
	 * Output the OpenGraph description, specific OG description first, if not, grab the meta description.
	 *
	 * @param bool $display Whether to echo or return the description.
	 * @return string
	 */
	public function description( $display = true ) {
		$desc = trim( $this->get_description() );
		if ( $display ) {
			$this->tag( 'og:description', $desc );
		}

		return $desc;
	}

	/**
	 * Output the canonical URL for the OpenGraph URL.
	 *
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 */
	public function url() {
		/**
		 * Filter the OpenGraph URL.
		 */
		$url = $this->do_filter( 'opengraph/url', esc_url( Paper::get()->get_canonical() ) );
		$this->tag( 'og:url', $url );
	}

	/**
	 * Output the site name straight from the blog info.
	 */
	public function site_name() {
		$this->tag( 'og:site_name', Helper::get_settings( 'titles.website_name', get_bloginfo( 'name' ) ) );
	}

	/**
	 * Outputs the websites FB page.
	 *
	 * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 */
	public function website() {
		$site = Helper::get_settings( 'titles.social_url_facebook' );
		if ( 'article' === $this->type( false ) && '' !== $site ) {
			$this->tag( 'article:publisher', $site );
		}
	}

	/**
	 * Outputs the site owner.
	 *
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 */
	public function site_owner() {
		$app_id = Helper::get_settings( 'titles.facebook_app_id' );
		if ( 0 !== absint( $app_id ) ) {
			$this->tag( 'fb:app_id', $app_id );
			return;
		}

		$admins = Helper::get_settings( 'titles.facebook_admin_id' );
		if ( '' !== trim( $admins ) ) {
			$this->tag( 'fb:admins', $admins );
			return;
		}
	}

	/**
	 * Create new Image class and get the images to set the `og:image`.
	 *
	 * @param string|bool $image Optional. Image URL.
	 */
	public function image( $image = false ) {
		$images = new Image( $image, $this );
		$images->show();
	}

	/**
	 * Outputs the authors FB page.
	 *
	 * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
	 * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
	 */
	public function article_author() {
		$this->tag( 'article:author', $this->get_author() );
	}

	/**
	 * Output the article tags as `article:tag` tags.
	 */
	public function tags() {
		$tags = get_the_tags();
		if ( is_wp_error( $tags ) || empty( $tags ) ) {
			return;
		}

		foreach ( $tags as $tag ) {
			$this->tag( 'article:tag', $tag->name );
		}
	}

	/**
	 * Output the article category as an `article:section` tag.
	 */
	public function category() {
		$terms = get_the_category();
		if ( empty( $terms ) ) {
			return;
		}

		// We can only show one section here, so we take the first one.
		$this->tag( 'article:section', $terms[0]->name );
	}

	/**
	 * Output the article publish and last modification date.
	 */
	public function publish_date() {
		$post = get_post();
		$pub  = mysql2date( DATE_W3C, $post->post_date, false );
		$mod  = mysql2date( DATE_W3C, $post->post_modified, false );

		if ( strtotime( $mod ) > strtotime( $pub ) ) {
			$this->tag( 'og:updated_time', $mod );
		}
	}

	/**
	 * Get author.
	 *
	 * @return string
	 */
	private function get_author() {
		$author = Helper::get_user_meta( 'facebook_author', $GLOBALS['post']->post_author );
		if ( $author ) {
			return $author;
		}

		$author = get_user_meta( $GLOBALS['post']->post_author, 'facebook', true );
		if ( $author ) {
			return $author;
		}

		return Helper::get_settings( 'titles.facebook_author_urls' );
	}

	/**
	 * Is WooCommerce product
	 *
	 * @return bool
	 */
	private function is_product() {
		return function_exists( 'is_woocommerce' ) && function_exists( 'is_product' ) && is_product();
	}
}
PK     “ŠU]ŒÛ        includes/opengraph/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]=u?k   k   $  includes/opengraph/class-twitter.phpnu „[µü¤        <?php
/**
 * Twitter cards functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\OpenGraph;

use RankMath\Helper;
use RankMath\Post;
use RankMath\Helpers\Str;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Twitter class.
 */
class Twitter extends OpenGraph {

	/**
	 * Network slug.
	 *
	 * @var string
	 */
	public $network = 'twitter';

	/**
	 * Metakey prefix.
	 *
	 * @var string
	 */
	public $prefix = 'twitter';

	/**
	 * Hold site info for twitter card.
	 *
	 * @var string
	 */
	private $site = null;

	/**
	 * Will hold the Twitter card type being created
	 *
	 * @var string
	 */
	private $type;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		/**
		 * Allow changing the Twitter Card type as output in the Twitter card.
		 *
		 * @param string $type
		 */
		if ( false === $this->do_filter( 'opengraph/twitter_card', true ) ) {
			return;
		}

		$this->action( 'rank_math/opengraph/twitter', 'use_facebook', 1 );
		$this->action( 'rank_math/opengraph/twitter', 'type', 5 );
		$this->action( 'rank_math/opengraph/twitter', 'title', 10 );
		$this->action( 'rank_math/opengraph/twitter', 'description', 11 );
		$this->action( 'rank_math/opengraph/twitter', 'website', 14 );

		if ( ! post_password_required() ) {
			$this->action( 'rank_math/opengraph/twitter', 'image', 30 );
		}

		if ( is_singular() ) {
			$this->action( 'rank_math/opengraph/twitter', 'article_author', 15 );
		}

		parent::__construct();
	}

	/**
	 * Set `use_facebook` variable.
	 *
	 * @since 1.0.272 Added `$post_id` parameter.
	 *
	 * @param int $post_id Optional post ID. When provided, reads meta for that post directly.
	 */
	public function use_facebook( $post_id = 0 ) {
		$post_id = is_int( $post_id ) ? $post_id : 0;

		if ( $post_id ) {
			$use_facebook = Helper::get_post_meta( 'twitter_use_facebook', $post_id, true );
		} else {
			$use_facebook = ( is_category() || is_tag() || is_tax() ) ? Helper::get_term_meta( 'twitter_use_facebook', 0, null, true ) :
				Helper::get_post_meta( 'twitter_use_facebook', Post::is_shop_page() ? Post::get_shop_page_id() : 0, true );
		}

		if ( $use_facebook ) {
			$this->prefix = 'facebook';
		}
	}

	/**
	 * Display the Twitter card type.
	 *
	 * This defaults to summary but can be filtered using the <code>rank_math_twitter_card_type</code> filter.
	 */
	public function type() {
		$this->determine_card_type();
		$this->sanitize_card_type();

		$this->tag( 'twitter:card', $this->type );

		$remove_tags = false;
		if ( is_singular() && ! is_front_page() && in_array( $this->type, [ 'app', 'player' ], true ) ) {
			$remove_tags = 'app' === $this->type;
			$this->action( 'rank_math/opengraph/twitter', $this->type, 15 );
		}

		$remove_tags = is_date() && in_array( $this->type, [ 'summary', 'summary_large_image' ], true );
		if ( $remove_tags ) {
			$this->remove_tags();
		}
	}

	/**
	 * Output App card.
	 */
	public function app() {

		$this->tag( 'twitter:description', Helper::get_post_meta( 'twitter_app_description' ) );
		$this->tag( 'twitter:app:country', Helper::get_post_meta( 'twitter_app_country' ) );

		// iPhone.
		$this->tag( 'twitter:app:name:iphone', Helper::get_post_meta( 'twitter_app_iphone_name' ) );
		$this->tag( 'twitter:app:id:iphone', Helper::get_post_meta( 'twitter_app_iphone_id' ) );
		$this->tag( 'twitter:app:url:iphone', Helper::get_post_meta( 'twitter_app_iphone_url' ) );

		// iPad.
		$this->tag( 'twitter:app:name:ipad', Helper::get_post_meta( 'twitter_app_ipad_name' ) );
		$this->tag( 'twitter:app:id:ipad', Helper::get_post_meta( 'twitter_app_ipad_id' ) );
		$this->tag( 'twitter:app:url:ipad', Helper::get_post_meta( 'twitter_app_ipad_url' ) );

		// Google Play.
		$this->tag( 'twitter:app:name:googleplay', Helper::get_post_meta( 'twitter_app_googleplay_name' ) );
		$this->tag( 'twitter:app:id:googleplay', Helper::get_post_meta( 'twitter_app_googleplay_id' ) );
		$this->tag( 'twitter:app:url:googleplay', Helper::get_post_meta( 'twitter_app_googleplay_url' ) );
	}

	/**
	 * Output player card.
	 */
	public function player() {
		$this->tag( 'twitter:player', Helper::get_post_meta( 'twitter_player_url' ) );

		$size = Helper::get_post_meta( 'twitter_player_size' );
		if ( $size ) {
			$size = Arr::from_string( $size, 'x' );
			if ( isset( $size[1] ) ) {
				$twitter_meta['twitter:player:width']  = (int) $size[0];
				$twitter_meta['twitter:player:height'] = (int) $size[1];
			}
		}
		$this->tag( 'twitter:player:stream', Helper::get_post_meta( 'twitter_player_stream' ) );
		$this->tag( 'twitter:player:stream:content_type', Helper::get_post_meta( 'twitter_player_stream_ctype' ) );
	}

	/**
	 * Output the title.
	 */
	public function title() {
		$this->tag( 'twitter:title', trim( $this->get_title() ) );
	}

	/**
	 * Output the description.
	 */
	public function description() {
		$this->tag( 'twitter:description', trim( $this->get_description() ) );
	}

	/**
	 * Output the Twitter account for the site.
	 */
	public function website() {
		$this->site = Helper::get_settings( 'titles.twitter_author_names' );
		if ( Str::is_non_empty( $this->site ) ) {
			$this->tag( 'twitter:site', '@' . $this->site );
		}
	}

	/**
	 * Output the image for Twitter.
	 *
	 * Only used when OpenGraph is inactive or Summary Large Image card is chosen.
	 */
	public function image() {
		$images = new Image( false, $this );
		foreach ( $images->get_images() as $image_url => $image_meta ) {
			$overlay = $this->get_overlay_image( $this->prefix );
			if ( $overlay && ! empty( $image_meta['id'] ) ) {
				$secret    = $images->generate_secret( $image_meta['id'], $overlay );
				$image_url = admin_url( "admin-ajax.php?action=rank_math_overlay_thumb&id={$image_meta['id']}&type={$overlay}&hash={$secret}" );
			}

			$this->tag( 'twitter:image', esc_url_raw( $image_url ) );
		}
	}

	/**
	 * Outputs the authors twitter handle.
	 */
	public function article_author() {
		$author = Helper::get_user_meta( 'twitter_author', $GLOBALS['post']->post_author );
		$author = $author ? $author : get_user_meta( $GLOBALS['post']->post_author, 'twitter', true );
		$author = $this->get_twitter_id( ltrim( trim( $author ), '@' ) );

		if ( Str::is_non_empty( $author ) ) {
			$this->tag( 'twitter:creator', '@' . $author );
		} elseif ( Str::is_non_empty( $this->site ) ) {
			$this->tag( 'twitter:creator', '@' . $this->site );
		}
	}

	/**
	 * Determines the twitter card type for the current page
	 */
	private function determine_card_type() {
		$this->type = Helper::get_post_meta( 'twitter_card_type' );
		$this->type = $this->type ? $this->type : Helper::get_settings( 'titles.twitter_card_type' );

		/**
		 * Allow changing the Twitter Card type as output in the Twitter card.
		 *
		 * @param string $this->type
		 */
		$this->type = $this->do_filter( 'opengraph/twitter/card_type', $this->type );
	}

	/**
	 * Determines whether the card type is of a type currently allowed by Twitter
	 *
	 * @link https://dev.twitter.com/cards/types
	 */
	private function sanitize_card_type() {
		if ( ! in_array( $this->type, [ 'summary', 'summary_large_image', 'app', 'player' ], true ) ) {
			$this->type = 'summary';
		}
	}

	/**
	 * Checks if the given ID is actually an ID or a URL and if URL, distills the ID from it.
	 *
	 * Solves issues with filters returning URLs and theme's/other plugins also adding a user meta
	 * twitter field which expects URL rather than an ID (which is what we expect).
	 *
	 * @param string $id Twitter ID or URL.
	 *
	 * @return string|bool Twitter ID or false if it failed to get a valid Twitter ID.
	 */
	private function get_twitter_id( $id ) {
		if ( preg_match( '`([A-Za-z0-9_]{1,25})$`', $id, $match ) ) {
			return $match[1];
		}

		return false;
	}

	/**
	 * Remove archive tags.
	 */
	private function remove_tags() {
		$this->remove_action( 'rank_math/opengraph/twitter', 'title', 10 );
		$this->remove_action( 'rank_math/opengraph/twitter', 'description', 11 );
		$this->remove_action( 'rank_math/opengraph/twitter', 'image', 30 );
	}
}
PK     “ŠU]$äL€ú  ú  ,  includes/opengraph/class-facebook-locale.phpnu „[µü¤        <?php
/**
 * Facebook locale data.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\OpenGraph
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\OpenGraph;

defined( 'ABSPATH' ) || exit;

/**
 * Facebook class.
 */
class Facebook_Locale {

	/**
	 * Supported locales
	 *
	 * @link https://developers.facebook.com/docs/messenger-platform/messenger-profile/supported-locales/
	 *
	 * @var array
	 */
	const FACEBOOK_LOCALES = [
		'af_ZA', // Afrikaans.
		'ak_GH', // Akan.
		'am_ET', // Amharic.
		'ar_AR', // Arabic.
		'as_IN', // Assamese.
		'ay_BO', // Aymara.
		'az_AZ', // Azerbaijani.
		'be_BY', // Belarusian.
		'bg_BG', // Bulgarian.
		'bp_IN', // Bhojpuri.
		'bn_IN', // Bengali.
		'br_FR', // Breton.
		'bs_BA', // Bosnian.
		'ca_ES', // Catalan.
		'cb_IQ', // Sorani Kurdish.
		'ck_US', // Cherokee.
		'co_FR', // Corsican.
		'cs_CZ', // Czech.
		'cx_PH', // Cebuano.
		'cy_GB', // Welsh.
		'da_DK', // Danish.
		'de_DE', // German.
		'el_GR', // Greek.
		'en_GB', // English (UK).
		'en_PI', // English (Pirate).
		'en_UD', // English (Upside Down).
		'en_US', // English (US).
		'em_ZM',
		'eo_EO', // Esperanto.
		'es_ES', // Spanish (Spain).
		'es_LA', // Spanish.
		'es_MX', // Spanish (Mexico).
		'et_EE', // Estonian.
		'eu_ES', // Basque.
		'fa_IR', // Persian.
		'fb_LT', // Leet Speak.
		'ff_NG', // Fulah.
		'fi_FI', // Finnish.
		'fo_FO', // Faroese.
		'fr_CA', // French (Canada).
		'fr_FR', // French (France).
		'fy_NL', // Frisian.
		'ga_IE', // Irish.
		'gl_ES', // Galician.
		'gn_PY', // Guarani.
		'gu_IN', // Gujarati.
		'gx_GR', // Classical Greek.
		'ha_NG', // Hausa.
		'he_IL', // Hebrew.
		'hi_IN', // Hindi.
		'hr_HR', // Croatian.
		'hu_HU', // Hungarian.
		'ht_HT', // Haitian Creole.
		'hy_AM', // Armenian.
		'id_ID', // Indonesian.
		'ig_NG', // Igbo.
		'is_IS', // Icelandic.
		'it_IT', // Italian.
		'ik_US',
		'iu_CA',
		'ja_JP', // Japanese.
		'ja_KS', // Japanese (Kansai).
		'jv_ID', // Javanese.
		'ka_GE', // Georgian.
		'kk_KZ', // Kazakh.
		'km_KH', // Khmer.
		'kn_IN', // Kannada.
		'ko_KR', // Korean.
		'ks_IN', // Kashmiri.
		'ku_TR', // Kurdish (Kurmanji).
		'ky_KG', // Kyrgyz.
		'la_VA', // Latin.
		'lg_UG', // Ganda.
		'li_NL', // Limburgish.
		'ln_CD', // Lingala.
		'lo_LA', // Lao.
		'lt_LT', // Lithuanian.
		'lv_LV', // Latvian.
		'mg_MG', // Malagasy.
		'mi_NZ', // Maori.
		'mk_MK', // Macedonian.
		'ml_IN', // Malayalam.
		'mn_MN', // Mongolian.
		'mr_IN', // Marathi.
		'ms_MY', // Malay.
		'mt_MT', // Maltese.
		'my_MM', // Burmese.
		'nb_NO', // Norwegian (bokmal).
		'nd_ZW', // Ndebele.
		'ne_NP', // Nepali.
		'nl_BE', // Dutch (Belgie).
		'nl_NL', // Dutch.
		'nn_NO', // Norwegian (nynorsk).
		'nr_ZA', // Southern Ndebele.
		'ns_ZA', // Northern Sotho.
		'ny_MW', // Chewa.
		'om_ET', // Oromo.
		'or_IN', // Oriya.
		'pa_IN', // Punjabi.
		'pl_PL', // Polish.
		'ps_AF', // Pashto.
		'pt_BR', // Portuguese (Brazil).
		'pt_PT', // Portuguese (Portugal).
		'qc_GT', // QuichÃ©.
		'qu_PE', // Quechua.
		'qr_GR',
		'qz_MM', // Burmese (Zawgyi).
		'rm_CH', // Romansh.
		'ro_RO', // Romanian.
		'ru_RU', // Russian.
		'rw_RW', // Kinyarwanda.
		'sa_IN', // Sanskrit.
		'sc_IT', // Sardinian.
		'se_NO', // Northern Sami.
		'si_LK', // Sinhala.
		'su_ID', // Sundanese.
		'sk_SK', // Slovak.
		'sl_SI', // Slovenian.
		'sn_ZW', // Shona.
		'so_SO', // Somali.
		'sq_AL', // Albanian.
		'sr_RS', // Serbian.
		'ss_SZ', // Swazi.
		'st_ZA', // Southern Sotho.
		'sv_SE', // Swedish.
		'sw_KE', // Swahili.
		'sy_SY', // Syriac.
		'sz_PL', // Silesian.
		'ta_IN', // Tamil.
		'te_IN', // Telugu.
		'tg_TJ', // Tajik.
		'th_TH', // Thai.
		'tk_TM', // Turkmen.
		'tl_PH', // Filipino.
		'tl_ST', // Klingon.
		'tn_BW', // Tswana.
		'tr_TR', // Turkish.
		'ts_ZA', // Tsonga.
		'tt_RU', // Tatar.
		'tz_MA', // Tamazight.
		'uk_UA', // Ukrainian.
		'ur_PK', // Urdu.
		'uz_UZ', // Uzbek.
		've_ZA', // Venda.
		'vi_VN', // Vietnamese.
		'wo_SN', // Wolof.
		'xh_ZA', // Xhosa.
		'yi_DE', // Yiddish.
		'yo_NG', // Yoruba.
		'zh_CN', // Simplified Chinese (China).
		'zh_HK', // Traditional Chinese (Hong Kong).
		'zh_TW', // Traditional Chinese (Taiwan).
		'zu_ZA', // Zulu.
		'zz_TR', // Zazaki.
	];

	/**
	 * Catch some weird locales served out by WP that are not easily doubled up.
	 *
	 * @param string $locale Current site locale.
	 *
	 * @return string
	 */
	public static function sanitize( $locale ) {
		$fix_locales = [
			'ca' => 'ca_ES',
			'en' => 'en_US',
			'el' => 'el_GR',
			'et' => 'et_EE',
			'ja' => 'ja_JP',
			'sq' => 'sq_AL',
			'uk' => 'uk_UA',
			'vi' => 'vi_VN',
			'zh' => 'zh_CN',
			'te' => 'te_IN',
			'ur' => 'ur_PK',
			'cy' => 'cy_GB',
			'eu' => 'eu_ES',
			'th' => 'th_TH',
			'af' => 'af_ZA',
			'hy' => 'hy_AM',
			'gu' => 'gu_IN',
			'kn' => 'kn_IN',
			'mr' => 'mr_IN',
			'kk' => 'kk_KZ',
			'lv' => 'lv_LV',
			'sw' => 'sw_KE',
			'tl' => 'tl_PH',
			'ps' => 'ps_AF',
			'as' => 'as_IN',
		];

		if ( isset( $fix_locales[ $locale ] ) ) {
			$locale = $fix_locales[ $locale ];
		}

		// Convert locales like "es" to "es_ES", in case that works for the given locale (sometimes it does).
		if ( 2 === strlen( $locale ) ) {
			$locale = self::join( $locale );
		}

		return $locale;
	}

	/**
	 * Validate with locales FB supports.
	 *
	 * Check to see if the locale is a valid FB one, if not, use en_US as a fallback.
	 *
	 * @param string $locale Current site locale.
	 *
	 * @return string
	 */
	public static function validate( $locale ) {
		if ( in_array( $locale, self::FACEBOOK_LOCALES, true ) ) {
			return $locale;
		}

		$locale = self::join( substr( $locale, 0, 2 ) );

		return in_array( $locale, self::FACEBOOK_LOCALES, true ) ? $locale : 'en_US';
	}

	/**
	 * Join locale to make full locale.
	 *
	 * @param string $locale Locale to join.
	 *
	 * @return string
	 */
	private static function join( $locale ) {
		return strtolower( $locale ) . '_' . strtoupper( $locale );
	}
}
PK     “ŠU]�á¼Ì‡-  ‡-    includes/class-cmb2.phpnu „[µü¤        <?php
/**
 * The CMB2 functionality of the plugin.
 *
 * This class defines all code necessary to have setting pages and manager.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * CMB2 class.
 */
class CMB2 {

	/**
	 * Set field arguments based on type.
	 *
	 * @param CMB2 $cmb CMB2 metabox object.
	 */
	public static function pre_init( $cmb ) {
		foreach ( $cmb->prop( 'fields' ) as $id => $field_args ) {
			$type  = $field_args['type'];
			$field = $cmb->get_field( $id );

			if ( in_array( $type, [ 'meta_tab_container_open', 'tab_container_open', 'tab_container_close', 'tab', 'raw' ], true ) ) {
				$field->args['save_field']    = false;
				$field->args['render_row_cb'] = [ '\RankMath\CMB2', "render_{$type}" ];
			}
			if ( 'notice' === $type ) {
				$field->args['save_field'] = false;
			}

			if ( ! empty( $field_args['dep'] ) ) {
				self::set_dependencies( $field, $field_args );
			}
		}
	}

	/**
	 * Generate the dependency html for JavaScript.
	 *
	 * @param CMB2_Field $field CMB2 field object.
	 * @param array      $args  Dependency array.
	 */
	private static function set_dependencies( $field, $args ) {
		if ( ! isset( $args['dep'] ) || empty( $args['dep'] ) ) {
			return;
		}

		$dependency = '';
		$relation   = 'OR';

		if ( 'relation' === key( $args['dep'] ) ) {
			$relation = current( $args['dep'] );
			unset( $args['dep']['relation'] );
		}

		foreach ( $args['dep'] as $dependence ) {
			$compasrison = isset( $dependence[2] ) ? $dependence[2] : '=';
			$dependency .= '<span class="hidden" data-field="' . $dependence[0] . '" data-comparison="' . $compasrison . '" data-value="' . $dependence[1] . '"></span>';
		}

		$where                 = 'group' === $args['type'] ? 'after_group' : 'after_field';
		$field->args[ $where ] = '<div class="rank-math-cmb-dependency hidden" data-relation="' . strtolower( $relation ) . '">' . $dependency . '</div>';
	}

	/**
	 * Get the object type for the current page, based on the $pagenow global.
	 *
	 * @see CMB2->current_object_type()
	 *
	 * @return string Page object type name.
	 */
	public static function current_object_type() {
		global $pagenow;
		$type = 'post';

		if ( in_array( $pagenow, [ 'user-edit.php', 'profile.php', 'user-new.php' ], true ) ) {
			$type = 'user';
		}

		if ( in_array( $pagenow, [ 'edit-comments.php', 'comment.php' ], true ) ) {
			$type = 'comment';
		}

		if ( in_array( $pagenow, [ 'edit-tags.php', 'term.php' ], true ) ) {
			$type = 'term';
		}

		if ( Helper::is_ajax() && 'add-tag' === Param::post( 'action' ) ) {
			$type = 'term';
		}

		return $type;
	}

	/**
	 * Render raw field.
	 *
	 * @param array      $field_args Array of field arguments.
	 * @param CMB2_Field $field      The field object.
	 *
	 * @return CMB2_Field
	 */
	public static function render_raw( $field_args, $field ) {
		if ( $field->args( 'file' ) ) {
			include $field->args( 'file' );
		} elseif ( $field->args( 'content' ) ) {
			echo wp_kses_post( $field->args( 'content' ) );
		}

		return $field;
	}

	/**
	 * Render tab container opening <div> for option panel.
	 *
	 * @param array      $field_args Array of field arguments.
	 * @param CMB2_Field $field      The field object.
	 *
	 * @return CMB2_Field
	 */
	public static function render_tab_container_open( $field_args, $field ) {
		$active = Param::get( 'rank-math-tab', 'general' );
		echo '<div id="' . esc_attr( $field->prop( 'id' ) ) . '" class="rank-math-tabs">';
		?>
		<div class="rank-math-tabs-navigation <?php echo esc_attr( $field->prop( 'classes' ) ); ?>">

			<?php
			foreach ( $field->args( 'tabs' ) as $id => $tab ) :
				if ( empty( $tab ) ) {
					continue;
				}

				if ( isset( $tab['type'] ) && 'separator' === $tab['type'] ) {
					printf( '<span class="separator">%s</span>', esc_html( $tab['title'] ) );
					continue;
				}

				$class  = isset( $tab['classes'] ) ? $tab['classes'] : '';
				$class .= $id === $active ? ' active' : '';
				?>
				<a href="#setting-panel-<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>"><span class="<?php echo esc_attr( $tab['icon'] ); ?>"></span><?php echo esc_html( $tab['title'] ); ?></a>
			<?php endforeach; ?>

		</div>

		<div class="rank-math-tabs-content">
		<?php
		return $field;
	}

	/**
	 * Render tab container opening <div> for metabox.
	 *
	 * @param array      $field_args Array of field arguments.
	 * @param CMB2_Field $field      The field object.
	 *
	 * @return CMB2_Field
	 */
	public static function render_meta_tab_container_open( $field_args, $field ) {
		echo '<div id="' . esc_attr( $field->prop( 'id' ) ) . '" class="rank-math-sidebar-panel rank-math-tabs">';
		if ( Admin_Helper::is_term_profile_page() ) :
			?>
			<h2 class="rank-math-metabox-frame-title"><?php esc_html_e( 'Rank Math', 'seo-by-rank-math' ); ?></h2>
		<?php endif; ?>
		<div class="rank-math-tabs-navigation rank-math-custom wp-clearfix">

			<?php
			foreach ( $field->args( 'tabs' ) as $id => $tab ) :
				if ( empty( $tab ) || ! Helper::has_cap( $tab['capability'] ) ) {
					continue;
				}
				?>
				<a href="#setting-panel-<?php echo esc_attr( $id ); ?>">
					<span class="<?php echo esc_attr( $tab['icon'] ); ?>"></span>
					<span class="rank-math-tab-text"><?php echo esc_html( $tab['title'] ); ?></span>
				</a>
			<?php endforeach; ?>
		</div>

		<div class="rank-math-tabs-content rank-math-custom components-tab-panel__tab-content interface-complementary-area">
		<?php
		return $field;
	}

	/**
	 * Render tab container closing <div>.
	 *
	 * @param array      $field_args Array of field arguments.
	 * @param CMB2_Field $field      The field object.
	 *
	 * @return CMB2_Field
	 */
	public static function render_tab_container_close( $field_args, $field ) {
		echo '</div><!-- /.rank-math-tabs-content -->';
		echo '</div><!-- /#' . esc_html( $field->prop( 'id' ) ) . ' -->';

		return $field;
	}

	/**
	 * Render tab content opening <div> and closing </div>.
	 *
	 * @param array      $field_args Array of field arguments.
	 * @param CMB2_Field $field      The field object.
	 *
	 * @return CMB2_Field
	 */
	public static function render_tab( $field_args, $field ) {
		printf(
			true === $field->prop( 'open' ) ? '<div id="%1$s" class="rank-math-tab rank-math-options-panel-content ' . esc_attr( $field->prop( 'classes' ) ) . '">' : '</div><!-- /#%1$s -->',
			esc_attr( $field->prop( 'id' ) )
		);

		return $field;
	}

	/**
	 * Handles sanitization for HTML entities.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 *
	 * @return mixed Sanitized value to be stored.
	 */
	public static function sanitize_htmlentities( $value ) {
		return htmlentities( $value, ENT_COMPAT, get_option( 'blog_charset' ) );
	}

	/**
	 * Handles sanitization for Separator Character option.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 *
	 * @return mixed Sanitized value to be stored.
	 */
	public static function sanitize_separator( $value ) {
		return htmlentities( wp_strip_all_tags( $value, true ) );
	}

	/**
	 * Handles sanitization for text fields.
	 *
	 * @param string $value The unsanitized value from the form.
	 *
	 * @return string Sanitized value to be stored.
	 */
	public static function sanitize_textfield( $value ) {
		if ( is_object( $value ) || is_array( $value ) ) {
			return '';
		}

		$value    = (string) $value;
		$filtered = wp_check_invalid_utf8( $value );

		if ( strpos( $filtered, '<' ) !== false ) {
			$filtered = wp_pre_kses_less_than( $filtered );

			// Strip extra whitespace.
			$filtered = wp_strip_all_tags( $filtered, false );

			// Use html entities in a special case to make sure no later
			// newline stripping stage could lead to a functional tag!
			$filtered = str_replace( "<\n", "&lt;\n", $filtered );
		}
		$filtered = preg_replace( '/[\r\n\t ]+/', ' ', $filtered );
		$filtered = trim( $filtered );

		$found = false;
		while ( preg_match( '/%[0-9]{2}/i', $filtered, $match ) ) {
			$filtered = str_replace( $match[0], '', $filtered );
			$found    = true;
		}

		if ( $found ) {
			// Strip out the whitespace that may now exist after removing the octets.
			$filtered = trim( preg_replace( '/ +/', ' ', $filtered ) );
		}

		return apply_filters( 'sanitize_text_field', $filtered, $value );
	}

	/**
	 * Handles sanitization of rank_math_permalink.
	 *
	 * @param string $value The unsanitized value from the form.
	 *
	 * @return string Sanitized value to be stored.
	 */
	public static function sanitize_permalink( $value ) {
		if ( empty( $value ) ) {
			return '';
		}

		return sanitize_title( $value );
	}

	/**
	 * Handles escaping of rank_math_permalink.
	 *
	 * @param string $value The value from the DB.
	 *
	 * @return string Escaped value.
	 */
	public static function escape_permalink( $value ) {
		if ( empty( $value ) ) {
			return '';
		}

		return esc_attr( urldecode( $value ) );
	}

	/**
	 * Handles sanitization of floating point values.
	 *
	 * @param string $value The unsanitized value from the form.
	 *
	 * @return string Sanitized value to be stored.
	 */
	public static function sanitize_float( $value ) {
		if ( empty( $value ) ) {
			return 0;
		}

		return filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
	}

	/**
	 * Handles sanitization for webmaster tag and remove <meta> tag.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 *
	 * @return mixed Sanitized value to be stored.
	 */
	public static function sanitize_webmaster_tags( $value ) {
		$value = trim( $value );

		if ( ! empty( $value ) && Str::starts_with( '<meta', trim( $value ) ) ) {
			preg_match( '/content="([^"]+)"/i', stripslashes( $value ), $matches );
			$value = $matches[1];
		}

		return htmlentities( wp_strip_all_tags( $value ) );
	}

	/**
	 * Handles sanitization for custom webmaster tags.
	 * Only <meta> tags are allowed.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 */
	public static function sanitize_custom_webmaster_tags( $value ) {
		$sanitized = wp_kses(
			$value,
			[
				'meta' => [
					'name'    => [],
					'content' => [],
				],
			]
		);

		return $sanitized;
	}

	/**
	 * Handles sanitization of advanced robots data.
	 *
	 * @param array $robots The unsanitized value from the form.
	 *
	 * @return array Sanitized value to be stored.
	 */
	public static function sanitize_advanced_robots( $robots ) {
		if ( empty( $robots ) ) {
			return [];
		}

		$advanced_robots = [];
		foreach ( $robots as $key => $robot ) {
			$advanced_robots[ $key ] = ! empty( $robot['enable'] ) ? $robot['length'] : false;
		}

		return $advanced_robots;
	}

	/**
	 * Handles sanitization of Focus Keywords.
	 *
	 * @param mixed $value The unsanitized focus keywords.
	 *
	 * @return string Sanitized focus keywords to be stored.
	 */
	public static function sanitize_focus_keywords( $value ) {
		$values = json_decode( stripslashes( $value ), true );
		if ( empty( $values ) ) {
			return '';
		}

		return implode(
			',',
			array_map(
				function ( $entry ) {
					return sanitize_text_field( $entry['value'] );
				},
				$values
			)
		);
	}

	/**
	 * Handles sanitization of Robots text.
	 *
	 * @since 1.0.45
	 *
	 * @param mixed $value The unsanitized Robots text.
	 *
	 * @return string Sanitized Robots text to be stored.
	 */
	public static function sanitize_robots_text( $value ) {
		if ( empty( $value ) ) {
			return '';
		}

		return wp_strip_all_tags( $value );
	}
}
PK     “ŠU]?P°¸q
  q
    includes/module/class-base.phpnu „[µü¤        <?php
/**
 * The Module Base Class
 *
 * ALl the classes inherit from this class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Module
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Module;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Base class.
 */
class Base {

	use Hooker;

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * Module help.
	 *
	 * @var array
	 */
	public $help = [];

	/**
	 * Page object.
	 *
	 * @var object
	 */
	public $page;

	/**
	 * List table object.
	 *
	 * @var object
	 */
	public $table;

	/**
	 * Screen.
	 *
	 * @var string
	 */
	public static $screen = '';

	/**
	 * Screen options.
	 *
	 * @var array
	 */
	public $screen_options = [];

	/**
	 * Admin object.
	 *
	 * @var Admin
	 */
	public $admin;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->register_admin_page();

		if ( ! empty( $this->page ) && $this->page->is_current_page() ) {

			// Store the current screen ID.
			self::$screen = $this->page->parent . '_page_' . $this->page->id;

			// Register screen options.
			$this->register_screen_options();

			// Register the table if it exists.
			if ( isset( $this->table ) ) {
				$this->action( 'admin_init', 'admin_init' );
			}
		}
	}

	/**
	 * Get the current screen.
	 */
	public static function get_screen() {
		return self::$screen;
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {}

	/**
	 * Admin initialize.
	 */
	public function admin_init() {
		$this->table = new $this->table();
	}

	/**
	 * Register screen options.
	 */
	private function register_screen_options() {
		if ( ! isset( $this->screen_options ) ) {
			return;
		}

		$this->action( 'current_screen', 'add_screen_options' );
		$this->filter( 'set-screen-option', 'set_screen_options', 10, 3 );
	}

	/**
	 * Add screen options.
	 */
	public function add_screen_options() {
		if ( ! isset( $this->screen_options['id'] ) ) {
			return;
		}

		add_screen_option(
			'per_page',
			[
				'option'  => $this->screen_options['id'],
				'default' => $this->screen_options['default'],
				'label'   => esc_html__( 'Items per page', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Set screen options.
	 *
	 * @param bool|int $status Screen option value. Default false to skip.
	 * @param string   $option The option name.
	 * @param int      $value  The number of rows to use.
	 */
	public function set_screen_options( $status, $option, $value ) {
		return $this->screen_options['id'] === $option ? min( $value, 999 ) : $status;
	}
}
PK     “ŠU]WÎe— X   X  !  includes/module/class-manager.phpnu „[µü¤        <?php
/**
 * The Module
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\Module
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Module;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Manager class.
 */
class Manager {

	use Hooker;

	/**
	 * Holds modules.
	 *
	 * @var array
	 */
	public $modules = [];

	/**
	 * Holds module objects.
	 *
	 * @var array
	 */
	private $controls = [];

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() ) {
			return;
		}

		$this->action( 'after_setup_theme', 'setup_modules', 2 );
		$this->filter( 'rank_math/modules', 'setup_core', 1 );
		$this->filter( 'rank_math/modules', 'setup_admin_only', 1 );
		$this->filter( 'rank_math/modules', 'setup_internals', 1 );
		$this->filter( 'rank_math/modules', 'setup_3rd_party', 1 );

		$this->action( 'after_setup_theme', 'load_modules', 2 );
		add_action( 'rank_math/module_changed', [ '\RankMath\Admin\Watcher', 'module_changed' ], 10, 2 );
		$this->action( 'rank_math/module_changed', 'watch_for_analytics', 10, 2 );
	}

	/**
	 * Watch if analytics enabled first time.
	 *
	 * @param  string $module Module name.
	 * @param  string $state  Module state.
	 */
	public function watch_for_analytics( $module, $state ) {
		if ( 'analytics' !== $module ) {
			return;
		}

		if ( 'on' !== $state ) {
			// Kill all workflows.
			as_unschedule_all_actions( 'rank_math/analytics/data_fetch' );
			\RankMath\Analytics\Workflow\Workflow::kill_workflows();
			return;
		}

		( new \RankMath\Analytics\Workflow\Objects() )->create_data_job();
	}

	/**
	 * Include default modules support.
	 */
	public function setup_modules() {
		/**
		 * Filters the array of modules available to be activated.
		 *
		 * @param array $modules Array of available modules.
		 */
		$modules = $this->do_filter( 'modules', [] );

		ksort( $modules );
		// Move AI Visibility to first position, followed by Content AI.
		$modules = array_merge(
			[
				'ai-visibility' => $modules['ai-visibility'],
				'content-ai'    => $modules['content-ai'],
			],
			$modules
		);
		foreach ( $modules as $id => $module ) {
			$this->add_module( $id, $module );
		}
	}

	/**
	 * Setup core modules.
	 *
	 * @param array $modules Array of modules.
	 *
	 * @return array
	 */
	public function setup_core( $modules ) {
		$modules['404-monitor'] = [
			'title'       => esc_html__( '404 Monitor', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Records the URLs on which visitors & search engines run into 404 Errors. You can also turn on Redirections to redirect the error causing URLs to other URLs.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Monitor\Monitor',
			'icon'        => '404',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'general', '404-monitor' ),
		];

		$modules['local-seo'] = [
			'title'       => esc_html__( 'Local SEO', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Dominate the search results for the local audiences by optimizing your website for Local SEO and it also helps you to acquire the Knowledge Graph.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Local_Seo\Local_Seo',
			'icon'        => 'local-seo',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'titles', 'local' ),
		];

		$modules['redirections'] = [
			'title'       => esc_html__( 'Redirections', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Redirect non-existent content easily with 301 and 302 status code. This can help improve your site ranking. Also supports many other response codes.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Redirections\Redirections',
			'icon'        => 'redirection',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'general', 'redirections' ),
		];

		$modules['rich-snippet'] = [
			'title'       => esc_html__( 'Schema (Structured Data)', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Enable support for the structured data, which adds Schema code in your website, resulting in rich search results, better CTR and more traffic.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Schema\Schema',
			'icon'        => 'schema',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'titles', 'post-type-post' ),
		];

		$modules['sitemap'] = [
			'title'    => esc_html__( 'Sitemap', 'seo-by-rank-math' ),
			'desc'     => esc_html__( 'Enable Rank Math\'s sitemap feature, which helps search engines intelligently crawl your website\'s content. It also supports hreflang tag.', 'seo-by-rank-math' ),
			'class'    => 'RankMath\Sitemap\Sitemap',
			'icon'     => 'sitemap',
			'settings' => Helper::get_admin_url( 'options-sitemap' ),
		];

		$modules['link-counter'] = [
			'title' => esc_html__( 'Link Counter', 'seo-by-rank-math' ),
			'desc'  => esc_html__( 'Counts the total number of internal, external links, to and from links inside your posts. You can also see the same count in the Posts List Page.', 'seo-by-rank-math' ),
			'class' => 'RankMath\Links\Links',
			'icon'  => 'link',
		];

		$modules['link-genius'] = [
			'title'         => esc_html__( 'Link Genius', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'An advanced internal linking tool that analyzes your posts, tracks link data, highlights opportunities, and offers detailed report.', 'seo-by-rank-math' ),
			'icon'          => 'link',
			'probadge'      => true,
			'disabled'      => true,
			'disabled_text' => esc_html__( 'This module is available in the PRO version.', 'seo-by-rank-math' ),
		];

		$modules['image-seo'] = [
			'title'       => esc_html__( 'Image SEO', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Advanced Image SEO options to supercharge your website. Automate the task of adding the ALT and Title tags to your images on the fly.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Image_Seo\Image_Seo',
			'icon'        => 'images',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'general', 'images' ),
		];

		$modules['instant-indexing'] = [
			'title'    => esc_html__( 'Instant Indexing', 'seo-by-rank-math' ),
			// Translators: placeholder is "IndexNow API".
			'desc'     => sprintf( esc_html__( 'Directly notify search engines like Bing & Yandex using the %s when pages are added, updated and removed, or submit URLs manually.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'instant-indexing', 'Instant Indexing Module Description' ) . '" target="_blank">' . __( 'IndexNow API', 'seo-by-rank-math' ) . '</a>' ),
			'class'    => 'RankMath\Instant_Indexing\Instant_Indexing',
			'icon'     => 'instant-indexing',
			'settings' => Helper::get_admin_url( 'options-instant-indexing' ),
		];

		$modules['content-ai'] = [
			'title'       => esc_html__( 'Content AI', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area. Supports 80+ Countries.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\ContentAI\Content_AI',
			'icon'        => 'content-ai',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'general', 'content-ai' ),
		];

		$modules['llms-txt'] = [
			'title'    => esc_html__( 'LLMS Txt', 'seo-by-rank-math' ),
			'desc'     => esc_html__( 'Serve a custom llms.txt file to guide AI models with posts, terms, and most important content on your website.', 'seo-by-rank-math' ),
			'class'    => 'RankMath\\LLMS\\LLMS_Txt',
			'icon'     => 'bot',
			'settings' => Helper::get_settings_url( 'general', 'llms' ),
		];

		$modules['news-sitemap'] = [
			'title'         => esc_html__( 'News Sitemap', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Create a News Sitemap for your news-related content. You only need a News sitemap if you plan on posting news-related content on your website.', 'seo-by-rank-math' ),
			'icon'          => 'post',
			'probadge'      => true,
			'disabled'      => true,
			'disabled_text' => esc_html__( 'This module is available in the PRO version.', 'seo-by-rank-math' ),
		];

		$modules['video-sitemap'] = [
			'title'         => esc_html__( 'Video Sitemap', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'For your video content, a Video Sitemap is a recommended step for better rankings and inclusion in the Video search.', 'seo-by-rank-math' ),
			'icon'          => 'video',
			'probadge'      => true,
			'disabled'      => true,
			'disabled_text' => esc_html__( 'This module is available in the PRO version.', 'seo-by-rank-math' ),
		];

		$modules['podcast'] = [
			'title'         => esc_html__( 'Podcast', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Make your podcasts discoverable via Google Podcasts, Apple Podcasts, and similar services with Podcast RSS feed and Schema Markup generated by Rank Math.', 'seo-by-rank-math' ),
			'icon'          => 'podcast',
			'probadge'      => true,
			'disabled'      => true,
			'disabled_text' => esc_html__( 'This module is available in the PRO version.', 'seo-by-rank-math' ),
		];

		$modules['ai-visibility'] = [
			'title'     => esc_html__( 'AI Visibility', 'seo-by-rank-math' ),
			'desc'      => esc_html__( 'Track your brand\'s AI search visibility. Monitor brand mentions, citations, & sentiment, and discover opportunities to grow your AI visibility.', 'seo-by-rank-math' ),
			'icon'      => 'ai-visibility',
			'class'     => 'RankMath\AI_Visibility\AI_Visibility',
			'settings'  => Helper::get_admin_url( 'ai-visibility' ),
			'betabadge' => true,
		];

		return $modules;
	}

	/**
	 * Setup admin only modules.
	 *
	 * @param array $modules Array of modules.
	 *
	 * @return array
	 */
	public function setup_admin_only( $modules ) {

		$modules['role-manager'] = [
			'title'    => esc_html__( 'Role Manager', 'seo-by-rank-math' ),
			'desc'     => esc_html__( 'The Role Manager allows you to use WordPress roles to control which of your site users can have edit or view access to Rank Math\'s settings.', 'seo-by-rank-math' ),
			'class'    => 'RankMath\Role_Manager\Role_Manager',
			'icon'     => 'role-manager',
			'only'     => 'admin',
			'settings' => Helper::get_admin_url( 'role-manager' ),
		];

		$modules['analytics'] = [
			'title'       => esc_html__( 'Analytics', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Connect Rank Math with Google Search Console to see the most important information from Google directly in your WordPress dashboard.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\Analytics\Analytics',
			'icon'        => 'search-console',
			'only'        => 'admin',
			'upgradeable' => true,
			'settings'    => Helper::get_settings_url( 'general', 'analytics' ),
		];

		$modules['seo-analysis'] = [
			'title'       => esc_html__( 'SEO Analyzer', 'seo-by-rank-math' ),
			'desc'        => esc_html__( 'Let Rank Math analyze your website and your website\'s content using 28+ different tests to provide tailor-made SEO Analysis to you.', 'seo-by-rank-math' ),
			'class'       => 'RankMath\SEO_Analysis\SEO_Analysis',
			'icon'        => 'analyzer',
			'only'        => 'admin',
			'upgradeable' => true,
			'settings'    => Helper::get_admin_url( 'seo-analysis' ),
		];

		return $modules;
	}

	/**
	 * Setup internal modules.
	 *
	 * @param array $modules Array of modules.
	 *
	 * @return array
	 */
	public function setup_internals( $modules ) {

		$modules['robots-txt'] = [
			'title' => esc_html__( 'Robots Txt', 'seo-by-rank-math' ),
			'only'  => 'internal',
			'class' => 'RankMath\Robots_Txt',
		];

		$modules['version-control'] = [
			'title' => esc_html__( 'Version Control', 'seo-by-rank-math' ),
			'only'  => 'internal',
			'class' => 'RankMath\Version_Control',
		];

		$modules['database-tools'] = [
			'title' => esc_html__( 'Database Tools', 'seo-by-rank-math' ),
			'only'  => 'internal',
			'class' => 'RankMath\Tools\Database_Tools',
		];

		$modules['status'] = [
			'title' => esc_html__( 'Status', 'seo-by-rank-math' ),
			'only'  => 'internal',
			'class' => 'RankMath\Status\Status',
		];

		return $modules;
	}

	/**
	 * Setup 3rd party modules.
	 *
	 * @param array $modules Array of modules.
	 *
	 * @return array
	 */
	public function setup_3rd_party( $modules ) {

		$modules['amp'] = [
			'title' => esc_html__( 'AMP', 'seo-by-rank-math' ),
			'desc'  => sprintf(
				/* translators: Link to AMP plugin */
				esc_html__( 'Install %s to make Rank Math work with Accelerated Mobile Pages. Rank Math automatically adds required meta tags in all the AMP pages.', 'seo-by-rank-math' ),
				'<a href="https://wordpress.org/plugins/amp/" target="_blank">' . esc_html__( 'AMP plugin', 'seo-by-rank-math' ) . '</a>'
			),
			'icon'  => 'mobile',
			'only'  => 'skip',
		];

		$modules['bbpress'] = [
			'title'         => esc_html__( 'bbPress', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Add proper Meta tags to your bbPress forum posts, categories, profiles, etc. Get more options to take control of what search engines see and how they see it.', 'seo-by-rank-math' ),
			'icon'          => 'users',
			'probadge'      => defined( 'RANK_MATH_PRO_FILE' ),
			'disabled'      => ( ! function_exists( 'is_bbpress' ) ),
			'disabled_text' => esc_html__( 'Please activate bbPress plugin to use this module.', 'seo-by-rank-math' ),
			'only'          => 'skip',
		];

		$modules['buddypress'] = [
			'title'         => esc_html__( 'BuddyPress', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Enable the BuddyPress module for Rank Math SEO to make your BuddyPress forum SEO friendly by adding proper meta tags to all forum pages.', 'seo-by-rank-math' ),
			'icon'          => 'comments',
			'class'         => 'RankMath\BuddyPress\BuddyPress',
			'disabled'      => ! class_exists( 'BuddyPress' ),
			'disabled_text' => esc_html__( 'Please activate BuddyPress plugin to use this module.', 'seo-by-rank-math' ),
		];

		$modules['woocommerce'] = [
			'title'         => esc_html__( 'WooCommerce', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Optimize WooCommerce Pages for Search Engines by adding required metadata and Product Schema which will make your site stand out in the SERPs.', 'seo-by-rank-math' ),
			'class'         => 'RankMath\WooCommerce\WooCommerce',
			'icon'          => 'cart',
			'upgradeable'   => true,
			'disabled'      => ( ! Helper::is_woocommerce_active() ),
			'disabled_text' => esc_html__( 'Please activate WooCommerce plugin to use this module.', 'seo-by-rank-math' ),
			'settings'      => Helper::get_settings_url( 'general', 'woocommerce' ),
		];

		$modules['acf'] = [
			'title'         => esc_html__( 'ACF', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'ACF support helps Rank Math SEO read and analyze content written in the Advanced Custom Fields. If your theme uses ACF, you should enable this option.', 'seo-by-rank-math' ),
			'class'         => 'RankMath\ACF\ACF',
			'icon'          => 'acf',
			'disabled'      => ( ! function_exists( 'acf' ) ),
			'disabled_text' => esc_html__( 'Please activate ACF plugin to use this module.', 'seo-by-rank-math' ),
		];

		$modules['web-stories'] = [
			'title'         => esc_html__( 'Google Web Stories', 'seo-by-rank-math' ),
			'desc'          => esc_html__( 'Make any Story created with the Web Stories WordPress plugin SEO-Ready with automatic support for Schema and Meta tags.', 'seo-by-rank-math' ),
			'class'         => 'RankMath\Web_Stories\Web_Stories',
			'icon'          => 'stories',
			'disabled'      => ( ! defined( 'WEBSTORIES_VERSION' ) ),
			'disabled_text' => esc_html__( 'Please activate Web Stories plugin to use this module.', 'seo-by-rank-math' ),
		];

		return $modules;
	}

	/**
	 * Add module.
	 *
	 * @param string $id   Module unique id.
	 * @param array  $args Module configuration.
	 */
	public function add_module( $id, $args = [] ) {
		$this->modules[ $id ] = new Module( $id, $args );
	}

	/**
	 * Display module form to enable/disable them.
	 *
	 * @codeCoverageIgnore
	 */
	public function display_form() {
		if ( ! current_user_can( 'manage_options' ) ) {
			echo esc_html__( 'You cant access this page.', 'seo-by-rank-math' );
			return;
		}

		$pro_active = '';
		if ( defined( 'RANK_MATH_PRO_FILE' ) ) {
			$pro_active = ' pro-active';
		}
		?>
		<div class="rank-math-ui module-listing dashboard-wrapper">
			<div class="grid<?php echo esc_html( $pro_active ); ?>">
				<?php $this->cta(); ?>

				<?php
				foreach ( $this->modules as $key => $module ) :
					if ( ! $module->can_display() ) {
						continue;
					}

					$is_active      = $module->is_active();
					$is_disabled    = $module->is_disabled();
					$is_hidden      = $module->is_hidden();
					$is_betabadge   = $module->is_betabadge();
					$is_probadge    = $module->is_probadge();
					$is_upgradeable = $module->is_upgradeable();
					$is_pro         = $module->is_pro_module();
					$dep_modules    = $module->get_dependencies();
					$is_pro_active  = defined( 'RANK_MATH_PRO_FILE' );
					?>
					<div class="rank-math-box <?php echo $is_active ? 'active' : ''; ?> <?php echo $is_hidden ? 'hidden' : ''; ?> <?php echo $is_pro ? 'is-pro' : ''; ?>">
						<i class="rm-icon rm-icon-<?php echo esc_attr( $module->get_icon() ); ?>"></i>
						<?php if ( 'content-ai' === $key && 'free' === Helper::get_content_ai_plan() ) { ?>
							<div class="rank-math-free-badge"><?php echo esc_html__( 'Free', 'seo-by-rank-math' ); ?></div>
						<?php } ?>
						<header>
							<h3>
								<?php echo esc_html( $module->get( 'title' ) ); ?>
								<?php if ( $is_betabadge ) { ?>
									<span class="rank-math-pro-badge beta"><?php echo esc_html__( 'NEW!', 'seo-by-rank-math' ); ?></span>
								<?php } elseif ( $is_probadge && ! $is_pro_active ) { ?>
									<span class="rank-math-pro-badge"><?php echo esc_html__( 'PRO', 'seo-by-rank-math' ); ?></span>
								<?php } ?>
								<?php if ( $is_upgradeable && ! $is_pro_active ) { ?>
									<span class="is-upgradeable rank-math-tooltip">
										<a href="<?php KB::the( 'pro', esc_html( $module->get( 'title' ) ) . ' Module Upgradable Icon' ); ?>">
											<div>&#171;</div>
										</a>
										<span><?php echo esc_html__( 'More powerful options are available in the PRO version.', 'seo-by-rank-math' ); ?></span>
									</span>
								<?php } elseif ( $is_upgradeable || ( $is_probadge && $is_pro_active ) ) { ?>
									<span class="is-upgradeable rank-math-tooltip">
										<div class="upgraded">&#171;</div>
										<span><?php echo esc_html__( 'PRO options are enabled.', 'seo-by-rank-math' ); ?></span>
									</span>
								<?php } ?>
							</h3>
							<p><?php echo $module->get( 'desc' ); // phpcs:ignore ?></p>
						</header>

						<div class="status wp-clearfix">
							<?php $module->the_link(); ?>
							<span class="cmb2-toggle">
								<input type="checkbox" class="rank-math-modules" id="module-<?php echo esc_attr( $module->get_id() ); ?>" name="modules[]" value="<?php echo esc_attr( $module->get_id() ); ?>"<?php checked( $is_active ); ?> <?php disabled( $is_disabled, true ); ?> data-depmodules="<?php echo esc_attr( wp_json_encode( $dep_modules ) ); ?>">
								<label for="module-<?php echo esc_attr( $module->get_id() ); ?>" class="cmb2-slider <?php echo $is_disabled ? 'rank-math-tooltip' : ''; ?>">
									<?php echo $module->has( 'disabled_text' ) ? '<span>' . esc_html( $module->get( 'disabled_text' ) ) . '</span>' : ''; ?>
									<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
									<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
								</label>
								<span class="input-loading"></span>
							</span>
						</div>
					</div>
				<?php endforeach; ?>
			</div>
		</div>
		<?php
	}

	/**
	 * Load active modules.
	 */
	public function load_modules() {
		foreach ( $this->modules as $id => $module ) {
			if ( false === $module->can_load_module() ) {
				continue;
			}

			$this->load_module( $id, $module );
		}
	}

	/**
	 * Load single module.
	 *
	 * @param string $id ID of module.
	 * @param Module $module Module instance.
	 */
	private function load_module( $id, $module ) {
		$object_class = $module->get( 'class' );
		if ( $module->is_admin() ) {
			$this->load_module_common( $module );
			if ( ! is_admin() ) {
				return;
			}
		}

		if ( class_exists( $object_class ) ) {
			$this->controls[ $id ] = new $object_class();
		}
	}

	/**
	 * Load module common file.
	 *
	 * @param Module $module Module instance.
	 */
	public function load_module_common( $module ) {
		$object_class = $module->get( 'class' );
		if ( class_exists( $object_class . '_Common' ) ) {
			$module_common_class                             = $object_class . '_Common';
			$this->controls[ $module->get_id() . '_common' ] = new $module_common_class();
		}
	}

	/**
	 * Get module by ID.
	 *
	 * @param string $id ID to get module.
	 *
	 * @return object Module class object.
	 */
	public function get_module( $id ) {
		return isset( $this->controls[ $id ] ) ? $this->controls[ $id ] : false;
	}

	/**
	 * Show CTA if Rank Math Pro is not active.
	 *
	 * @return void
	 */
	private function cta() {
		if ( defined( 'RANK_MATH_PRO_FILE' ) ) {
			return;
		}

		?>
			<div class="rank-math-box rank-math-unlock-pro-box">
				<i class="rm-icon rm-icon-software"></i>
				<a href="<?php KB::the( 'pro', 'Unlock PRO Module Box' ); ?>" target="_blank" class="pro-link" data-url="<?php KB::the( 'site-checkout', 'Unlock PRO Module Box' ); ?>">
					<header>
						<h3><?php esc_html_e( 'Take SEO to the Next Level!', 'seo-by-rank-math' ); ?></h3>
						<ul>
							<li><?php esc_html_e( 'Unlimited personal websites', 'seo-by-rank-math' ); ?></li>
							<li><?php esc_html_e( 'Free 15-Day Content AI Trial', 'seo-by-rank-math' ); ?></li>
							<li><?php esc_html_e( 'Track 500 Keywords', 'seo-by-rank-math' ); ?></li>
							<li><?php esc_html_e( 'Powerful Schema Generator', 'seo-by-rank-math' ); ?></li>
							<li><?php esc_html_e( '24/7 Support', 'seo-by-rank-math' ); ?></li>
						</ul>
					</header>
					<div class="status wp-clearfix">
						<button class="button button-secondary"><?php esc_html_e( 'Buy', 'seo-by-rank-math' ); ?></button>
					</div>
				</a>
			</div>
		<?php
	}
}
PK     “ŠU]FY«p  p     includes/module/class-module.phpnu „[µü¤        <?php
/**
 * The Module
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\Module
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Module;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Module class.
 */
class Module {

	/**
	 * Module id.
	 *
	 * @var string
	 */
	private $id = '';

	/**
	 * Module arguments.
	 *
	 * @var string
	 */
	private $args = '';

	/**
	 * The Constructor.
	 *
	 * @param string $id   Module unique id.
	 * @param array  $args Module configuration.
	 */
	public function __construct( $id, $args ) {
		$this->id   = $id;
		$this->args = $args;
	}

	/**
	 * Getter.
	 *
	 * @param string $key           Key to get data for.
	 * @param mixed  $default_value Default value if not found.
	 *
	 * @return mixed
	 */
	public function get( $key, $default_value = '' ) {
		return isset( $this->args[ $key ] ) ? $this->args[ $key ] : $default_value;
	}

	/**
	 * Has.
	 *
	 * @param string $key Key to check data.
	 *
	 * @return bool
	 */
	public function has( $key ) {
		return isset( $this->args[ $key ] );
	}

	/**
	 * Get module id.
	 *
	 * @return string
	 */
	public function get_id() {
		return $this->id;
	}

	/**
	 * Get module id.
	 *
	 * @return string
	 */
	public function get_args() {
		return $this->args;
	}

	/**
	 * Get module icon.
	 *
	 * @return string
	 */
	public function get_icon() {
		return isset( $this->args['icon'] ) ? $this->args['icon'] : 'dashicons-category';
	}

	/**
	 * Echo the setting link.
	 */
	public function the_link() {
		if ( empty( $this->args['settings'] ) ) {
			return;
		}
		?>
		<a href="<?php echo esc_url( $this->args['settings'] ); ?>" class="module-settings button button-secondary"><?php esc_html_e( 'Settings', 'seo-by-rank-math' ); ?></a>
		<?php
	}

	/**
	 * Is module disabled.
	 *
	 * @return bool
	 */
	public function is_disabled() {
		return isset( $this->args['disabled'] ) && $this->args['disabled'];
	}

	/**
	 * Does module has BETA version?
	 *
	 * @return bool
	 */
	public function is_betabadge() {
		return isset( $this->args['betabadge'] ) && $this->args['betabadge'];
	}

	/**
	 * Does module has PRO version?
	 *
	 * @return bool
	 */
	public function is_probadge() {
		return isset( $this->args['probadge'] ) && $this->args['probadge'];
	}

	/**
	 * Is module upgradeable?
	 *
	 * @return bool
	 */
	public function is_upgradeable() {
		return isset( $this->args['upgradeable'] ) && $this->args['upgradeable'];
	}

	/**
	 * Is PRO module.
	 *
	 * @return bool
	 */
	public function is_pro_module() {
		return isset( $this->args['probadge'] ) && $this->args['probadge'] && ! defined( 'RANK_MATH_PRO_FILE' );
	}

	/**
	 * Get the module dependencies.
	 *
	 * @return array
	 */
	public function get_dependencies() {
		return isset( $this->args['dep_modules'] ) ? $this->args['dep_modules'] : [];
	}

	/**
	 * Is module disabled.
	 *
	 * @return bool
	 */
	public function is_hidden() {
		if ( Helper::is_advanced_mode() ) {
			return false;
		}

		return in_array( $this->get_id(), [ '404-monitor', 'acf', 'bbpress', 'buddypress', 'redirections', 'role-manager', 'image-seo' ], true );
	}

	/**
	 * Is module admin only.
	 *
	 * @return bool
	 */
	public function is_admin() {
		return $this->only( 'admin' );
	}

	/**
	 * Is module internal.
	 *
	 * @return bool
	 */
	public function is_internal() {
		return $this->only( 'internal' );
	}

	/**
	 * Is module skip.
	 *
	 * @return bool
	 */
	public function is_skip() {
		return $this->only( 'skip' );
	}

	/**
	 * Is module active.
	 *
	 * @return bool
	 */
	public function is_active() {
		if ( $this->is_disabled() ) {
			return false;
		}

		$active_modules = get_option( 'rank_math_modules', [] );
		return is_array( $active_modules ) && in_array( $this->get_id(), $active_modules, true );
	}

	/**
	 * Can display module on form.
	 *
	 * @return bool
	 */
	public function can_display() {
		return ! $this->is_internal();
	}

	/**
	 * Check if we can load the module.
	 *
	 * @return bool
	 */
	public function can_load_module() {
		// If its an internal module should be loaded all the time.
		if ( $this->is_internal() ) {
			return true;
		}

		if ( ! $this->is_active() || $this->is_skip() ) {
			return false;
		}

		return true;
	}

	/**
	 * Check module only for.
	 *
	 * @param string $check Check against.
	 *
	 * @return bool
	 */
	private function only( $check ) {
		return isset( $this->args['only'] ) && $check === $this->args['only'];
	}
}
PK     “ŠU]yŠrà2  à2    includes/class-kb.phpnu „[µü¤        <?php
/**
 * Knowledgebase links.
 *
 * This class defines all code necessary to run during the plugin's activation.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

defined( 'ABSPATH' ) || exit;

/**
 * KB class.
 */
class KB {

	/**
	 * Hold links.
	 *
	 * @var array
	 */
	private static $links = [
		// General.
		'seo-suite'                       => 'https://rankmath.com/',
		'blog'                            => 'https://rankmath.com/blog/',
		'free-account'                    => 'https://rankmath.com/my-account/',
		'support'                         => 'https://rankmath.com/support/',
		'pro'                             => 'https://rankmath.com/pricing/',
		'site-checkout'                   => 'https://rankmath.com/site-checkout/',
		'changelog'                       => 'https://rankmath.com/changelog/',
		'changelog-free'                  => 'https://rankmath.com/changelog/free/',
		'help-affiliate'                  => 'https://rankmath.com/affiliates/',
		'seo-care'                        => 'https://rankmath.com/services/',
		'content-ai'                      => 'https://rankmath.com/content-ai/',
		'content-ai-pricing-tables'       => 'https://rankmath.com/content-ai/?#pricing-tables',
		'content-ai-restore-credits'      => 'https://rankmath.com/kb/how-to-restore-missing-content-ai-credits/',
		'free-vs-pro'                     => 'https://rankmath.com/free-vs-pro/',
		'google-updates'                  => 'https://rankmath.com/google-updates/',
		'usage-policy'                    => 'https://rankmath.com/usage-tracking/',
		'logo'                            => 'https://rankmath.com/wordpress/plugin/seo-suite/',
		'offer'                           => 'https://rankmath.com/offer/',

		// Knowledgebase.
		'knowledgebase'                   => 'https://rankmath.com/kb/',
		'how-to-setup'                    => 'https://rankmath.com/kb/how-to-setup/',
		'how-to-setup-your-site'          => 'https://rankmath.com/kb/how-to-setup/?#your-site',
		'seo-import'                      => 'https://rankmath.com/kb/how-to-setup/?#import-data',
		'seo-tweaks'                      => 'https://rankmath.com/kb/how-to-setup/?#optimization',
		'local-seo'                       => 'https://rankmath.com/kb/how-to-setup/?#easy-and-advanced-mode',
		'general-settings'                => 'https://rankmath.com/kb/general-settings/',
		'remove-category-base'            => 'https://rankmath.com/kb/general-settings/?#strip-category-base',
		'link-settings'                   => 'https://rankmath.com/kb/general-settings/?#links',
		'image-settings'                  => 'https://rankmath.com/kb/general-settings/?#images',
		'breadcrumbs'                     => 'https://rankmath.com/kb/general-settings/?#breadcrumbs',
		'webmaster-tools'                 => 'https://rankmath.com/kb/general-settings/?#webmaster-tools',
		'edit-robotstxt'                  => 'https://rankmath.com/kb/general-settings/?#edit-robotstxt',
		'robotstxt-tool'                  => 'https://rankmath.com/tools/robots-txt/',
		'edit-htaccess'                   => 'https://rankmath.com/kb/general-settings/?#edit-htaccess',
		'woocommerce-settings'            => 'https://rankmath.com/kb/general-settings/?#woo-commerce',
		'404-monitor-settings'            => 'https://rankmath.com/kb/general-settings/?#404-monitor',
		'redirections-settings'           => 'https://rankmath.com/kb/general-settings/?#redirections',
		'analytics-settings'              => 'https://rankmath.com/kb/general-settings/?#search-console',
		'other-settings'                  => 'https://rankmath.com/kb/general-settings/?#others',
		'score-100'                       => 'https://rankmath.com/kb/score-100-in-tests/',
		'content-length'                  => 'https://rankmath.com/kb/score-100-in-tests/?#content-length',
		'toc'                             => 'https://rankmath.com/kb/score-100-in-tests/?#content-length',
		'configure-sitemaps'              => 'https://rankmath.com/kb/configure-sitemaps/',
		'sitemap-general'                 => 'https://rankmath.com/kb/configure-sitemaps/?#general',
		'sitemap-post'                    => 'https://rankmath.com/kb/configure-sitemaps/?#posts',
		'sitemap-page'                    => 'https://rankmath.com/kb/configure-sitemaps/?#pages',
		'sitemap-media'                   => 'https://rankmath.com/kb/configure-sitemaps/?#media',
		'sitemap-product'                 => 'https://rankmath.com/kb/configure-sitemaps/?#products',
		'social-meta-settings'            => 'https://rankmath.com/kb/titles-and-meta/?#social-meta',
		'homepage-settings'               => 'https://rankmath.com/kb/titles-and-meta/?#homepage',
		'author-settings'                 => 'https://rankmath.com/kb/titles-and-meta/?#authors',
		'misc-settings'                   => 'https://rankmath.com/kb/titles-and-meta/?#misc-pages',
		'post-settings'                   => 'https://rankmath.com/kb/titles-and-meta/?#Posts',
		'page-settings'                   => 'https://rankmath.com/kb/titles-and-meta/?#pages',
		'media-settings'                  => 'https://rankmath.com/kb/titles-and-meta/?#media',
		'product-settings'                => 'https://rankmath.com/kb/titles-and-meta/?#products',
		'category-settings'               => 'https://rankmath.com/kb/titles-and-meta/?#categories',
		'tag-settings'                    => 'https://rankmath.com/kb/titles-and-meta/?#tags',
		'product-categories-settings'     => 'https://rankmath.com/kb/titles-and-meta/?#product-categories',
		'product-tags-settings'           => 'https://rankmath.com/kb/titles-and-meta/?#product-tags',
		'seo-email-reporting'             => 'https://rankmath.com/kb/seo-email-reporting/',
		'email-reports-logo'              => 'https://rankmath.com/kb/seo-email-reporting/#report-logo',
		'kb-seo-suite'                    => 'https://rankmath.com/kb/wordpress/seo-suite/',
		'kb-search'                       => 'https://rankmath.com/kb/?ht-kb-search=1',
		'help-analytics'                  => 'https://rankmath.com/kb/analytics/',
		'monitor-seo-performance'         => 'https://rankmath.com/kb/client-management/#num-3-1-monitor-seo-performance-business',
		'top-5-winning-and-losing'        => 'https://rankmath.com/kb/analytics/?#top-5-winning-and-losing-posts-pro',
		'using-ga4'                       => 'https://rankmath.com/kb/using-ga4/',
		'local-seo-settings'              => 'https://rankmath.com/kb/local-seo/',
		'kml-sitemap'                     => 'https://rankmath.com/kb/kml-sitemap/',
		'news-sitemap'                    => 'https://rankmath.com/kb/news-sitemap/',
		'role-manager'                    => 'https://rankmath.com/kb/role-manager/',
		'seo-analysis'                    => 'https://rankmath.com/kb/seo-analysis/',
		'competitor-analyzer'             => 'https://rankmath.com/kb/analyzing-competitors-seo-strategy/',
		'requirements'                    => 'https://rankmath.com/kb/requirements/',
		'video-sitemap'                   => 'https://rankmath.com/kb/video-sitemap/',
		'rich-snippets'                   => 'https://rankmath.com/kb/rich-snippets/',
		'podcast-settings'                => 'https://rankmath.com/kb/podcast-schema/',
		'fix-404'                         => 'https://rankmath.com/kb/fix-404-errors/',
		'titles-meta'                     => 'https://rankmath.com/kb/titles-and-meta/',
		'version-control'                 => 'https://rankmath.com/kb/version-control/',
		'tools'                           => 'https://rankmath.com/kb/rank-math-status-and-tools/#database-tools',
		'status'                          => 'https://rankmath.com/kb/rank-math-status-and-tools/#system-status',
		'headless-support'                => 'https://rankmath.com/kb/headless-support/',
		'faq-schema-block'                => 'https://rankmath.com/kb/faq-schema-block/',
		'404-monitor'                     => 'https://rankmath.com/kb/monitor-404-errors/',
		'meta-box-social-tab'             => 'https://rankmath.com/kb/meta-box-social-tab/',
		'instant-indexing'                => 'https://rankmath.com/kb/how-to-use-indexnow/',
		'analytics-stats-bar'             => 'https://rankmath.com/kb/analytics-stats-bar/',
		'content-ai-settings'             => 'https://rankmath.com/kb/how-to-use-content-ai/',
		'content-ai-links'                => 'https://rankmath.com/kb/how-to-use-content-ai/?#links',
		'content-ai-keywords'             => 'https://rankmath.com/kb/how-to-use-content-ai/?#keywords',
		'content-ai-credits-usage'        => 'https://rankmath.com/kb/content-ai-plans-and-credits/',
		'free-account-benefits'           => 'https://rankmath.com/kb/free-account-benefits/',
		'import-export-settings'          => 'https://rankmath.com/kb/import-export-settings/',
		'location-data-shortcode'         => 'https://rankmath.com/kb/location-data-shortcode/',
		'redirections'                    => 'https://rankmath.com/kb/setting-up-redirections/',
		'about-and-mentions-schema'       => 'https://rankmath.com/kb/about-and-mentions-schema/',
		'url-inspection-api'              => 'https://rankmath.com/kb/url-inspection-api-integration/',
		'pillar-content-internal-linking' => 'https://rankmath.com/kb/pillar-content-internal-linking/',
		'breadcrumbs-install'             => 'https://rankmath.com/kb/breadcrumbs/?#add-breadcrumbs-theme',
		'change-seo-score-backlink'       => 'https://rankmath.com/kb/filters-hooks-api-developer/?#change-seo-score-backlink',
		'unable-to-encrypt'               => 'https://rankmath.com/kb/fix-automatic-update-unavailable-for-this-plugin/?#unable-to-encrypt',
		'google-verification-kb'          => 'https://rankmath.com/kb/google-site-verification/',
		'bing-verification-kb'            => 'https://rankmath.com/kb/verify-your-site-with-bing-webmaster-tools/',
		'baidu-verification-kb'           => 'https://rankmath.com/kb/baidu-webmaster-tools-verification/',
		'yandex-verification-kb'          => 'https://rankmath.com/kb/verifying-your-domain-with-yandex/',
		'norton-verification-kb'          => 'https://rankmath.com/kb/verify-site-with-norton-safe-web/',
		'pinterest-verification-kb'       => 'https://rankmath.com/kb/pinterest-site-verification/',

		// SEO Analysis.
		'analysis-site-tagline'           => 'https://rankmath.com/kb/seo-analysis/?#site-tagline-test',
		'analysis-blog-public'            => 'https://rankmath.com/kb/seo-analysis/?#blog-public-test',
		'analysis-permalink-structure'    => 'https://rankmath.com/kb/seo-analysis/?#permalink-structure-test',
		'analysis-focus-keywords'         => 'https://rankmath.com/kb/seo-analysis/?#focus-keywords-test',
		'analysis-post-titles'            => 'https://rankmath.com/kb/seo-analysis/?#post-titles-missing-focus-keywords-test',
		'analysis-search-console'         => 'https://rankmath.com/kb/seo-analysis/?#search-console-test',
		'analysis-sitemaps'               => 'https://rankmath.com/kb/seo-analysis/?#sitemaps-test',
		'analysis-auto-update'            => 'https://rankmath.com/kb/seo-analysis/?#priority',

		// Link Genius.
		'link-genius'                     => 'https://rankmath.com/kb/wordpress/ai-link-genius/',

		// AI Visibility.
		'ai-visibility'                   => 'https://rankmath.com/kb/track-ai-visibility/',
		'ai-visibility-connect'           => 'https://rankmath.com/kb/how-to-connect-or-disconnect-rank-math/',

		// Social Media.
		'yt-link'                         => 'http://youtube.com/rankmath',
		'fb-group'                        => 'https://www.facebook.com/groups/rankmathseopluginwordpress/',

		// Other.
		'google-article-schema'           => 'https://developers.google.com/search/docs/data-types/article/?utm_campaign=Rank+Math',
		'create-facebook-app'             => 'https://www.youtube.com/watch?utm_source=Plugin&utm_campaign=WP&v=-XME8Q25omQ&feature=youtu.be',
	];

	/**
	 * Echo the link.
	 *
	 * @param string $id Id of the link to get.
	 * @param  string $medium Medium of the link to get.
	 */
	public static function the( $id, $medium = '' ) {
		echo self::get( $id, $medium ); // phpcs:ignore
	}

	/**
	 * Return the link.
	 *
	 * @param  string $id Id of the link to get.
	 * @param  string $medium Medium of the link to get.
	 * @return string
	 */
	public static function get( $id, $medium = '' ) {
		$links = self::get_links();
		$url   = isset( $links[ $id ] ) ? $links[ $id ] : '#';

		if ( empty( $medium ) ) {
			return $url;
		}

		return add_query_arg(
			[
				'utm_source'   => 'Plugin',
				'utm_medium'   => rawurlencode( $medium ),
				'utm_campaign' => 'WP',
			],
			$url
		);
	}

	/**
	 * Get links.
	 *
	 * @return array
	 */
	public static function get_links() {
		$processed = [];
		foreach ( self::$links as $key => $base_url ) {
			// Allow third-parties to append query parameters based on the base URL.
			$params            = (array) apply_filters( 'rank_math/link', [], $key, $base_url );
			$processed[ $key ] = ! empty( $params ) ? add_query_arg( $params, $base_url ) : $base_url;
		}

		return $processed;
	}
}
PK     “ŠU]Ìø
  
     includes/class-compatibility.phpnu „[µü¤        <?php
/**
 * The compatibility functionality for 3rd party plugins.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Compatibility class.
 */
class Compatibility {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		if ( is_admin() ) {

			if ( \defined( 'PIRATE_FORMS_VERSION' ) ) {
				$this->action( 'admin_enqueue_scripts', 'pirate_forms_dequeue_scripts' );
			}
		}

		$this->filter( 'rank_math/pre_simple_page_id', 'subscribe_to_comments_reloaded' );
		$this->filter( 'genesis_detect_seo_plugins', 'disable_genesis_seo' );
	}

	/**
	 * Subscribe to comments reloaded page ID.
	 *
	 * @param  int $page_id Change page id to real page.
	 * @return int
	 */
	public function subscribe_to_comments_reloaded( $page_id ) {
		if ( is_plugin_active( 'subscribe-to-comments-reloaded/subscribe-to-comments-reloaded.php' ) ) {
			$page_permalink = get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
			if ( function_exists( 'qtrans_convertURL' ) ) {
				$page_permalink = qtrans_convertURL( $page_permalink );
			}
			if ( isset( $_SERVER['REQUEST_URI'] ) && ( strpos( sanitize_text_field( $_SERVER['REQUEST_URI'] ), $page_permalink ) !== false ) ) {
				$this->action( 'rank_math/head', 'subscribe_to_comments_reloaded_remove_robots', 1 );
				return get_queried_object_id();
			}
		}

		return $page_id;
	}

	/**
	 * Remove robots for this plugin.
	 */
	public function subscribe_to_comments_reloaded_remove_robots() {
		remove_action( 'rank_math/frontend/robots', '__return_empty_array' );
	}

	/**
	 * Remove Pirate forms plugin scripts and styles from setting panels.
	 */
	public function pirate_forms_dequeue_scripts() {

		if ( ! wp_script_is( 'pirate_forms_pro_admin_scripts' ) ) {
			return;
		}

		$screen = get_current_screen();
		if (
			( ! Str::contains( 'rank-math', $screen->id ) && ! in_array( $screen->base, [ 'post', 'term', 'profile', 'user-edit' ], true ) ) ||
			'pf_form' === $screen->id
		) {
			return;
		}

		wp_dequeue_script( 'pirate_forms_pro_admin_scripts' );
		wp_dequeue_style( 'pirate_forms_pro_admin_styles' );
	}

	/**
	 * Disable Genesis SEO functionality.
	 *
	 * @param array $value Array hold disable info.
	 *
	 * @return array
	 */
	public function disable_genesis_seo( $value ) {
		$value['classes'][]   = '\RankMath\RankMath';
		$value['functions'][] = 'rank_math';

		return $value;
	}
}
PK     “ŠU]Ê³�)|  |    includes/interface-runner.phpnu „[µü¤        <?php
/**
 * An interface for registering hooks with WordPress.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

defined( 'ABSPATH' ) || exit;

/**
 * Runner.
 */
interface Runner {

	/**
	 * Register all hooks to WordPress
	 *
	 * @return void
	 */
	public function hooks();
}
PK     “ŠU]pÐ@=Ó  Ó  +  includes/abilities/interface-subscriber.phpnu „[µü¤        <?php
/**
 * Interface for Rank Math ability subscribers.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities;

defined( 'ABSPATH' ) || exit;

/**
 * Subscriber interface.
 */
interface Subscriber_Interface {

	/**
	 * Register the subscriber's category and abilities with WordPress hooks.
	 *
	 * @return void
	 */
	public function register(): void;
}
PK     “ŠU]Jû        includes/abilities/index.phpnu „[µü¤        <?php
// Silence is golden.
PK     “ŠU]lŸîƒe  e  7  includes/abilities/analytics/class-get-top-keywords.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-top-keywords
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Analytics;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-top-keywords ability.
 */
class Get_Top_Keywords implements Ability_Interface {

	/**
	 * Maps date_range enum values to Stats::set_date_range() arguments.
	 */
	const DATE_RANGE_MAP = [
		'last_7_days'    => '-7 days',
		'last_30_days'   => '-30 days',
		'last_3_months'  => '-3 months',
		'last_6_months'  => '-6 months',
		'last_12_months' => '-1 year',
	];

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Runner instance.
	 *
	 * @var Top_Keywords_Runner
	 */
	private $runner;

	/**
	 * Constructor.
	 *
	 * @param string                   $category    Ability category slug.
	 * @param array                    $shared_meta Shared meta args.
	 * @param Top_Keywords_Runner|null $runner      Runner instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Top_Keywords_Runner $runner = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->runner      = $runner ?? new Top_Keywords_Runner();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-top-keywords',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get top keywords', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns the top-performing keywords by clicks from Google Search Console, with impressions, CTR, and average position for the selected date range.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'properties'           => [
						'date_range' => [
							'type'        => 'string',
							'enum'        => array_keys( self::DATE_RANGE_MAP ),
							'default'     => 'last_30_days',
							'description' => esc_html__( 'Date range for which to fetch keyword data.', 'seo-by-rank-math' ),
						],
						'limit'      => [
							'type'        => 'integer',
							'default'     => 25,
							'minimum'     => 1,
							'maximum'     => 100,
							'description' => esc_html__( 'Maximum number of keywords to return.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_analytics' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$date_range = isset( $input['date_range'] ) && in_array( $input['date_range'], array_keys( self::DATE_RANGE_MAP ), true )
			? (string) $input['date_range']
			: 'last_30_days';

		$limit = isset( $input['limit'] ) ? max( 1, min( 100, absint( $input['limit'] ) ) ) : 25;

		$result = $this->runner->run( $date_range, $limit );

		rank_math()->tracking->track_ability_executed(
			'Top Keywords Fetched',
			[
				'limit'      => $limit,
				'date_range' => $date_range,
			],
			'rank_math_analytics'
		);

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'keywords'   => [
					'type'  => 'array',
					'items' => [
						'type'       => 'object',
						'properties' => [
							'keyword'       => [
								'type'        => 'string',
								'description' => esc_html__( 'The search query keyword.', 'seo-by-rank-math' ),
							],
							'clicks'        => [
								'type'        => 'integer',
								'description' => esc_html__( 'Total clicks from Google Search Console.', 'seo-by-rank-math' ),
							],
							'impressions'   => [
								'type'        => 'integer',
								'description' => esc_html__( 'Total impressions from Google Search Console.', 'seo-by-rank-math' ),
							],
							'ctr'           => [
								'type'        => 'number',
								'description' => esc_html__( 'Click-through rate as a percentage (0â€“100).', 'seo-by-rank-math' ),
							],
							'position'      => [
								'type'        => 'number',
								'description' => esc_html__( 'Average position in Google Search results.', 'seo-by-rank-math' ),
							],
							'trend'         => [
								'type'        => 'string',
								'enum'        => [ 'winning', 'losing', 'stable' ],
								'description' => esc_html__( 'Position trend vs. the previous period. Provided by Rank Math PRO for tracked keywords.', 'seo-by-rank-math' ),
							],
							'is_tracked'    => [
								'type'        => 'boolean',
								'description' => esc_html__( 'Whether this keyword is tracked in Rank Math PRO Rank Tracker.', 'seo-by-rank-math' ),
							],
							'ranking_posts' => [
								'type'        => 'array',
								'description' => esc_html__( 'Pages on your site that rank for this keyword. Provided by Rank Math PRO.', 'seo-by-rank-math' ),
								'items'       => [
									'type'       => 'object',
									'properties' => [
										'post_id' => [
											'type'        => 'integer',
											'description' => esc_html__( 'WordPress post ID.', 'seo-by-rank-math' ),
										],
										'title'   => [
											'type'        => 'string',
											'description' => esc_html__( 'Post title.', 'seo-by-rank-math' ),
										],
										'slug'    => [
											'type'        => 'string',
											'description' => esc_html__( 'Relative URL path of the page.', 'seo-by-rank-math' ),
										],
									],
								],
							],
						],
					],
				],
				'date_range' => [
					'type' => 'string',
					'enum' => array_keys( self::DATE_RANGE_MAP ),
				],
				'connected'  => [
					'type'        => 'boolean',
					'description' => esc_html__( 'Whether Google Search Console is connected.', 'seo-by-rank-math' ),
				],
			],
		];
	}
}
PK     “ŠU]ŒÛ      &  includes/abilities/analytics/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]t#D¡
  ¡
  :  includes/abilities/analytics/class-top-keywords-runner.phpnu „[µü¤        <?php
/**
 * Top-keywords runner for the rank-math/get-top-keywords ability.
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Analytics;

use RankMath\Analytics\Stats;
use RankMath\Google\Console;

defined( 'ABSPATH' ) || exit;

/**
 * Fetches top-performing keywords from Google Search Console and shapes the
 * result for ability/MCP consumers.
 */
class Top_Keywords_Runner {

	/**
	 * Stats service instance.
	 *
	 * @var Stats
	 */
	private $stats;

	/**
	 * Constructor.
	 *
	 * @param Stats|null $stats Stats instance; defaults to the singleton.
	 */
	public function __construct( ?Stats $stats = null ) {
		$this->stats = $stats ?? Stats::get();
	}

	/**
	 * Fetch and return the top keywords for the given date range.
	 *
	 * The keywords array is passed through the rank_math/analytics/ability/top_keywords
	 * filter so that the PRO plugin can annotate entries with position-trend data.
	 *
	 * @param string $date_range One of the Get_Top_Keywords::DATE_RANGE_MAP keys.
	 * @param int    $limit      Maximum number of keywords to return.
	 * @return array {
	 *     @type array  $keywords   Flat list of keyword objects.
	 *     @type string $date_range The date_range value that was used.
	 *     @type bool   $connected  Whether Google Search Console is connected.
	 * }
	 */
	public function run( string $date_range, int $limit ): array {
		if ( ! Console::is_console_connected() ) {
			return [
				'keywords'   => [],
				'date_range' => $date_range,
				'connected'  => false,
			];
		}

		$range = isset( Get_Top_Keywords::DATE_RANGE_MAP[ $date_range ] )
			? Get_Top_Keywords::DATE_RANGE_MAP[ $date_range ]
			: Get_Top_Keywords::DATE_RANGE_MAP['last_30_days'];

		$this->stats->set_date_range( $range );

		$rows = $this->stats->get_analytics_data(
			[
				'dimension' => 'query',
				'orderBy'   => 'clicks',
				'order'     => 'DESC',
				'offset'    => 0,
				'perpage'   => $limit,
				'objects'   => true,
				'pageview'  => false,
			]
		);

		$keywords = [];
		foreach ( $rows as $query => $row ) {
			$keywords[] = [
				'keyword'     => (string) $query,
				'clicks'      => (int) $row['clicks']['total'],
				'impressions' => (int) $row['impressions']['total'],
				'ctr'         => (float) $row['ctr']['total'],
				'position'    => (float) $row['position']['total'],
			];
		}

		// PRO plugin hooks here to annotate keywords with position trend data.
		$keywords = apply_filters( 'rank_math/analytics/ability/top_keywords', $keywords, $date_range );

		return [
			'keywords'   => $keywords,
			'date_range' => $date_range,
			'connected'  => true,
		];
	}
}
PK     “ŠU] ÐBV³  ³  1  includes/abilities/analytics/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for Analytics abilities.
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Analytics;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the Analytics ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for Analytics abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-analytics';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_top_keywords' );
	}

	/**
	 * Register the Analytics ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'Analytics', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to query Google Search Console and analytics data.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-top-keywords ability.
	 *
	 * @return void
	 */
	public function register_get_top_keywords(): void {
		( new Get_Top_Keywords( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]È{·­ú  ú  6  includes/abilities/seo-analysis/class-fix-site-seo.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/fix-site-seo
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/fix-site-seo ability.
 */
class Fix_Site_SEO implements Ability_Interface {

	/**
	 * Fixable test IDs â€” kept in sync with Fix_Runner handler methods.
	 */
	const FIXABLE_TEST_IDS = [
		'blog_public',
		'permalink_structure',
		'site_description',
		'sitemaps',
		'schema',
		'noindex',
		'opengraph',
		'robots_txt',
		'focus_keywords',
		'post_titles',
	];

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Fix runner instance.
	 *
	 * @var Fix_Runner
	 */
	private $runner;

	/**
	 * Constructor.
	 *
	 * @param string          $category    Ability category slug.
	 * @param array           $shared_meta Shared meta args.
	 * @param Fix_Runner|null $runner      Fix runner instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Fix_Runner $runner = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->runner      = $runner ?? new Fix_Runner();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/fix-site-seo',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Fix site SEO', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Applies an automatic fix for a single failing Rank Math SEO test. Pass the test_id from an audit-site-seo finding. Some fixes require additional input (e.g. value for site_description). Bulk fixes accept an optional post_limit.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'test_id' ],
					'properties'           => [
						'test_id'    => [
							'type'        => 'string',
							'enum'        => self::FIXABLE_TEST_IDS,
							'description' => esc_html__( 'The SEO test identifier to fix (from audit-site-seo findings).', 'seo-by-rank-math' ),
						],
						'value'      => [
							'type'        => 'string',
							'description' => esc_html__( 'Required for site_description: the new tagline to set.', 'seo-by-rank-math' ),
						],
						'post_limit' => [
							'type'        => 'integer',
							'minimum'     => 1,
							'maximum'     => 500,
							'description' => esc_html__( 'For bulk post fixes (focus_keywords, post_titles): max posts to update in one call. Default 100.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => false,
							'destructive' => false,
							'idempotent'  => false,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_site_analysis' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$test_id = (string) $input['test_id'];
		$result  = $this->runner->fix( $test_id, (array) $input );

		rank_math()->tracking->track_ability_executed(
			'SEO Audit Test Fixed',
			[
				'test_id' => $test_id,
				'fixed'   => ! empty( $result['fixed'] ),
			],
			'rank_math_site_analysis'
		);

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'fixed'   => [ 'type' => 'boolean' ],
				'summary' => [ 'type' => 'string' ],
				'details' => [ 'type' => 'object' ],
			],
		];
	}
}
PK     “ŠU]Hƒ„ž    6  includes/abilities/seo-analysis/class-audit-result.phpnu „[µü¤        <?php
/**
 * Audit result value object for the rank-math/audit-site-seo ability.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

defined( 'ABSPATH' ) || exit;

/**
 * Site SEO audit result, agent-consumable shape.
 */
class Audit_Result {

	/**
	 * Analyzed URL.
	 *
	 * @var string
	 */
	public $url;

	/**
	 * Score 0â€“100.
	 *
	 * @var int
	 */
	public $score;

	/**
	 * Grade: good|average|bad.
	 *
	 * @var string
	 */
	public $grade;

	/**
	 * Outcome counts: ok, fail, warning, info.
	 *
	 * @var array
	 */
	public $statuses;

	/**
	 * Total tests counted.
	 *
	 * @var int
	 */
	public $total_tests;

	/**
	 * Unix timestamp of last run, 0 if never.
	 *
	 * @var int
	 */
	public $last_run_at;

	/**
	 * Remote API status: ok|unavailable|skipped.
	 *
	 * @var string
	 */
	public $remote_api_status;

	/**
	 * Per-test findings.
	 *
	 * @var Finding[]
	 */
	public $findings;

	/**
	 * Error details when the audit could not run, or null on success.
	 * Shape: { code: string, message: string }
	 *
	 * @var array|null
	 */
	public $error;

	/**
	 * Constructor.
	 *
	 * @param array $args See properties.
	 */
	public function __construct( array $args ) {
		foreach ( $args as $key => $value ) {
			if ( property_exists( $this, $key ) ) {
				$this->{$key} = $value;
			}
		}
	}

	/**
	 * Serialize to array.
	 *
	 * @return array
	 */
	public function to_array() {
		return [
			'url'               => $this->url,
			'score'             => (int) $this->score,
			'grade'             => $this->grade,
			'statuses'          => (array) $this->statuses,
			'total_tests'       => (int) $this->total_tests,
			'last_run_at'       => (int) $this->last_run_at,
			'remote_api_status' => $this->remote_api_status,
			'findings'          => array_map(
				function ( Finding $f ) {
					return $f->to_array();
				},
				(array) $this->findings
			),
			'error'             => $this->error,
		];
	}
}
PK     “ŠU]àÿü$
  $
  6  includes/abilities/seo-analysis/class-fix-hint-map.phpnu „[µü¤        <?php
/**
 * Fix hint map for the rank-math/audit-site-seo ability.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

defined( 'ABSPATH' ) || exit;

/**
 * Maps SEO-audit test IDs to structured fix hints an agent can act on.
 *
 * Kind:
 *   - 'wp_admin'  â†’ user/agent should open this WP admin page
 *   - 'setting'   â†’ fix is a Rank Math setting (`rank-math-options-{section}`)
 *   - 'ability'   â†’ another Rank Math ability can fix it (only entries for shipped abilities)
 *   - 'manual'    â†’ content edit per post; no single setting flip will resolve it
 *
 * Tests not in this map return null for fix_hint; the agent falls back to the
 * `fix_html` text. Entries are added here as new abilities ship.
 */
class Fix_Hint_Map {

	/**
	 * Retrieves the fix hint for a given test ID.
	 *
	 * @param string $test_id The ID of the test for which to retrieve a fix hint.
	 * @return array|null The fix hint array or null if not found.
	 */
	public static function get( $test_id ) {
		$map = [
			// Single WP setting fix.
			'site_description'    => [
				'kind'   => 'wp_admin',
				'target' => 'options-general.php',
			],
			'permalink_structure' => [
				'kind'   => 'wp_admin',
				'target' => 'options-permalink.php',
			],
			'blog_public'         => [
				'kind'   => 'wp_admin',
				'target' => 'options-reading.php',
			],

			// Rank Math settings panels.
			'sitemaps'            => [
				'kind'   => 'setting',
				'target' => 'rank-math-options-sitemap',
			],
			'noindex'             => [
				'kind'   => 'setting',
				'target' => 'rank-math-options-titles',
			],
			'opengraph'           => [
				'kind'   => 'setting',
				'target' => 'rank-math-options-titles',
			],
			'schema'              => [
				'kind'   => 'setting',
				'target' => 'rank-math-options-titles',
			],
			'robots_txt'          => [
				'kind'   => 'setting',
				'target' => 'rank-math-options-general',
			],

			// Per-post content edits â€” no single flip; agent must walk posts.
			'h1_heading'          => [
				'kind'   => 'manual',
				'target' => 'edit_post_content',
			],
			'h2_headings'         => [
				'kind'   => 'manual',
				'target' => 'edit_post_content',
			],
			'keywords_meta'       => [
				'kind'   => 'manual',
				'target' => 'edit_post_keywords',
			],
			'title_length'        => [
				'kind'   => 'manual',
				'target' => 'edit_post_titles',
			],
		];

		return isset( $map[ $test_id ] ) ? $map[ $test_id ] : null;
	}
}
PK     “ŠU]ãÙûº  º  6  includes/abilities/seo-analysis/class-audit-runner.phpnu „[µü¤        <?php
/**
 * Audit runner service for the rank-math/audit-site-seo ability.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

use RankMath\KB;
use RankMath\Helpers\Url;
use RankMath\SEO_Analysis\SEO_Analyzer;

defined( 'ABSPATH' ) || exit;

/**
 * Runs the Rank Math site SEO audit and shapes the result for ability/MCP consumers.
 */
class Audit_Runner {

	/**
	 * SEO Analyzer instance.
	 *
	 * @var SEO_Analyzer
	 */
	private $analyzer;

	/**
	 * Constructor.
	 *
	 * @param SEO_Analyzer|null $analyzer SEO Analyzer instance.
	 */
	public function __construct( ?SEO_Analyzer $analyzer = null ) {
		$this->analyzer = $analyzer ?? new SEO_Analyzer();
	}

	/**
	 * Run the audit and return a structured result.
	 *
	 * External URL auditing requires Rank Math PRO. FREE installs receive
	 * an Audit_Result with error.code 'pro_required' instead of findings.
	 *
	 * @param bool        $refresh Re-run tests instead of returning cached results.
	 * @param string|null $url     Optional URL to audit. Defaults to this site's home URL.
	 * @return Audit_Result
	 */
	public function run( $refresh = true, $url = null ) {
		if ( ! empty( $url ) ) {
			$clean = wp_http_validate_url( $url );
			if ( false === $clean ) {
				return $this->error_result(
					'invalid_url',
					__( 'The provided URL is not valid.', 'seo-by-rank-math' )
				);
			}

			if ( Url::is_external( $clean ) && ! apply_filters( 'rank_math/analysis/is_allowed_url', false, $clean ) ) {
				return $this->error_result(
					'pro_required',
					sprintf(
						/* translators: %s: URL to the Rank Math PRO upgrade page */
						__( 'Competitor URL analysis requires Rank Math PRO. Upgrade at %s', 'seo-by-rank-math' ),
						KB::get( 'pro', 'Audit Site SEO Ability' )
					)
				);
			}
		}

		// The tests file is normally loaded only in the admin context. Include it here
		// so local tests are available when the ability is invoked via REST/MCP.
		$tests_file = RANK_MATH_PATH . 'includes/modules/seo-analysis/seo-analysis-tests.php';
		if ( file_exists( $tests_file ) ) {
			include_once $tests_file;
		}

		if ( ! empty( $url ) ) {
			$this->analyzer->analyse_url     = esc_url_raw( $url );
			$this->analyzer->analyse_subpage = true;
		}

		$this->analyzer->set_url();

		if ( $refresh || ! $this->has_cached_results() ) {
			$this->analyzer->run_tests( $refresh );
		} else {
			$this->analyzer->get_results_from_storage();
		}

		return $this->shape( $this->analyzer );
	}

	/**
	 * Build a minimal Audit_Result carrying only an error (no findings).
	 *
	 * @param string $code    Machine-readable error code.
	 * @param string $message Human-readable message for the AI/user.
	 * @return Audit_Result
	 */
	private function error_result( $code, $message ) {
		return new Audit_Result(
			[
				'url'               => '',
				'score'             => 0,
				'grade'             => 'bad',
				'statuses'          => [
					'ok'      => 0,
					'fail'    => 0,
					'warning' => 0,
					'info'    => 0,
				],
				'total_tests'       => 0,
				'last_run_at'       => 0,
				'remote_api_status' => 'skipped',
				'findings'          => [],
				'error'             => [
					'code'    => $code,
					'message' => $message,
				],
			]
		);
	}

	/**
	 * Whether a cached audit result exists.
	 *
	 * @return bool
	 */
	private function has_cached_results() {
		return (bool) get_option( 'rank_math_seo_analysis_results' );
	}

	/**
	 * Build an Audit_Result from a populated SEO_Analyzer.
	 *
	 * @param SEO_Analyzer $analyzer Populated analyzer instance.
	 * @return Audit_Result
	 */
	private function shape( SEO_Analyzer $analyzer ) {
		$findings   = [];
		$statuses   = [
			'ok'      => 0,
			'fail'    => 0,
			'warning' => 0,
			'info'    => 0,
		];
		$total      = 0;
		$score_sum  = 0;
		$score_pass = 0;

		if ( is_array( $analyzer->results ) ) {
			foreach ( $analyzer->results as $id => $result ) {
				if ( ! is_object( $result ) || $result->is_hidden() || $result->is_excluded() ) {
					continue;
				}

				$data   = $result->get_result();
				$status = $result->get_status();
				$score  = (int) $result->get_score();

				$statuses[ $status ] = isset( $statuses[ $status ] ) ? $statuses[ $status ] + 1 : 1;
				++$total;
				$score_sum += $score;
				if ( 'ok' === $status ) {
					$score_pass += $score;
				}

				// Prefer the per-run `message` (contains actual counts/links) over the
				// static `description` (generic text defined in the test registration).
				$description = isset( $data['message'] ) ? $data['message'] : ( isset( $data['description'] ) ? $data['description'] : '' );

				$fix_html = isset( $data['fix'] ) ? $data['fix'] : '';

				$findings[] = new Finding(
					[
						'test_id'     => $id,
						'category'    => $result->get_category(),
						'status'      => $status,
						'score'       => $score,
						'title'       => isset( $data['title'] ) ? $data['title'] : '',
						'description' => wp_strip_all_tags( $description ),
						'fix_text'    => html_entity_decode( wp_strip_all_tags( $fix_html ), ENT_QUOTES | ENT_HTML5, 'UTF-8' ),
						'fix_html'    => $fix_html,
						'fix_hint'    => Fix_Hint_Map::get( $id ),
						'kb_link'     => isset( $data['kb_link'] ) ? $data['kb_link'] : '',
						'data'        => isset( $data['data'] ) ? $data['data'] : null,
					]
				);
			}
		}

		$percent = $score_sum > 0 ? (int) round( ( $score_pass / $score_sum ) * 100 ) : 0;

		return new Audit_Result(
			[
				'url'               => $analyzer->analyse_url,
				'score'             => $percent,
				'grade'             => $this->grade_for( $percent ),
				'statuses'          => $statuses,
				'total_tests'       => $total,
				'last_run_at'       => (int) get_option( 'rank_math_seo_analysis_date', 0 ),
				'remote_api_status' => $analyzer->remote_api_succeeded() ? 'ok' : 'unavailable',
				'findings'          => $findings,
				'error'             => null,
			]
		);
	}

	/**
	 * Score â†’ grade bucket.
	 *
	 * @param int $percent Score percentage 0â€“100.
	 * @return string good|average|bad
	 */
	private function grade_for( $percent ) {
		if ( $percent < 50 ) {
			return 'bad';
		}
		if ( $percent < 70 ) {
			return 'average';
		}
		return 'good';
	}
}
PK     “ŠU]ŒÛ      )  includes/abilities/seo-analysis/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]@¾©‘Ì  Ì  1  includes/abilities/seo-analysis/class-finding.phpnu „[µü¤        <?php
/**
 * Finding value object for the rank-math/audit-site-seo ability.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

defined( 'ABSPATH' ) || exit;

/**
 * One SEO-audit test result, agent-consumable shape.
 */
class Finding {

	/**
	 * Test identifier.
	 *
	 * @var string
	 */
	public $test_id;

	/**
	 * Test category: priority|basic|advanced|performance|security.
	 *
	 * @var string
	 */
	public $category;

	/**
	 * Test outcome: ok|fail|warning|info.
	 *
	 * @var string
	 */
	public $status;

	/**
	 * Score contribution for this test.
	 *
	 * @var int
	 */
	public $score;

	/**
	 * Human-readable test title.
	 *
	 * @var string
	 */
	public $title;

	/**
	 * Plain-text description of the current result (actual counts/state, not static guidance).
	 *
	 * @var string
	 */
	public $description;

	/**
	 * Plain-text how-to-fix â€” HTML tags and entities stripped, ready for AI consumption.
	 *
	 * @var string
	 */
	public $fix_text;

	/**
	 * Original how-to-fix HTML, preserved for admin-UI consumers.
	 *
	 * @var string
	 */
	public $fix_html;

	/**
	 * Structured fix hint an agent can act on, or null if none mapped.
	 *
	 * @var array|null
	 */
	public $fix_hint;

	/**
	 * Knowledge-base article URL.
	 *
	 * @var string
	 */
	public $kb_link;

	/**
	 * Free-form per-test supplemental data.
	 *
	 * @var mixed
	 */
	public $data;

	/**
	 * Constructor.
	 *
	 * @param array $args See properties.
	 */
	public function __construct( array $args ) {
		foreach ( $args as $key => $value ) {
			if ( property_exists( $this, $key ) ) {
				$this->{$key} = $value;
			}
		}
	}

	/**
	 * Serialize to array.
	 *
	 * @return array
	 */
	public function to_array() {
		return [
			'test_id'     => $this->test_id,
			'category'    => $this->category,
			'status'      => $this->status,
			'score'       => (int) $this->score,
			'title'       => $this->title,
			'description' => $this->description,
			'fix_text'    => $this->fix_text,
			'fix_html'    => $this->fix_html,
			'fix_hint'    => $this->fix_hint,
			'kb_link'     => $this->kb_link,
			'data'        => $this->data,
		];
	}
}
PK     “ŠU]±ñìf3  f3  4  includes/abilities/seo-analysis/class-fix-runner.phpnu „[µü¤        <?php
/**
 * Fix runner service for the rank-math/fix-site-seo ability.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Applies automatic fixes for failing SEO analysis tests.
 */
class Fix_Runner {

	/**
	 * Maximum posts to process in a single synchronous fix call.
	 */
	const POST_LIMIT = 100;

	/**
	 * Apply the fix for a given test and return a result summary.
	 *
	 * @param string $test_id    SEO analysis test identifier.
	 * @param array  $input      Raw ability input (may include 'value', 'post_limit').
	 * @return array { fixed: bool, summary: string, details: array }
	 */
	public function fix( $test_id, array $input = [] ) {
		$handler = 'fix_' . $test_id;
		if ( ! method_exists( $this, $handler ) ) {
			return $this->cannot_fix(
				sprintf(
					/* translators: %s: test ID */
					__( 'No automatic fix is available for test "%s". Use the fix_text guidance to resolve it manually.', 'seo-by-rank-math' ),
					$test_id
				)
			);
		}

		return $this->{$handler}( $input );
	}

	/**
	 * Fix: make the site visible to search engines.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_blog_public( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		update_option( 'blog_public', 1 );
		return $this->ok( __( 'Site visibility set to public. Search engines can now index your site.', 'seo-by-rank-math' ) );
	}

	/**
	 * Fix: set permalink structure to /%postname%/.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_permalink_structure( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		global $wp_rewrite;

		if ( '/%postname%/' === get_option( 'permalink_structure' ) ) {
			return $this->ok( __( 'Permalink structure is already set to /%postname%/.', 'seo-by-rank-math' ) );
		}

		update_option( 'permalink_structure', '/%postname%/' );
		$wp_rewrite->set_permalink_structure( '/%postname%/' );
		$wp_rewrite->flush_rules( true );

		return $this->ok( __( 'Permalink structure set to /%postname%/ and rewrite rules flushed.', 'seo-by-rank-math' ) );
	}

	/**
	 * Fix: set the site tagline to a custom value.
	 *
	 * Requires `value` in input â€” refuses if missing or looks like the default.
	 *
	 * @param array $input Must contain 'value'.
	 * @return array
	 */
	protected function fix_site_description( array $input ) {
		$value = isset( $input['value'] ) ? sanitize_text_field( $input['value'] ) : '';

		if ( empty( $value ) ) {
			return $this->cannot_fix(
				__( 'A "value" input is required to set the site tagline. Provide a short, unique description of your site.', 'seo-by-rank-math' )
			);
		}

		if ( 'just another wordpress site' === strtolower( $value ) ) { // phpcs:ignore WordPress.WP.CapitalPDangit.MisspelledInText
			return $this->cannot_fix(
				__( 'The provided tagline is the default WordPress value. Please supply a unique tagline.', 'seo-by-rank-math' )
			);
		}

		update_option( 'blogdescription', $value );
		return $this->ok(
			sprintf(
				/* translators: %s: tagline value */
				__( 'Site tagline updated to: "%s".', 'seo-by-rank-math' ),
				$value
			)
		);
	}

	// -------------------------------------------------------------------------
	// Rank Math module fixes
	// -------------------------------------------------------------------------

	/**
	 * Fix: enable the Rank Math sitemap module.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_sitemaps( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		Helper::update_modules( [ 'sitemap' => 'on' ] );
		return $this->ok( __( 'Sitemap module enabled. Your XML sitemap is now active.', 'seo-by-rank-math' ) );
	}

	/**
	 * Fix: enable the Rank Math schema (rich snippet) module.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_schema( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		Helper::update_modules( [ 'rich-snippet' => 'on' ] );
		return $this->ok( __( 'Schema / rich snippet module enabled.', 'seo-by-rank-math' ) );
	}

	// -------------------------------------------------------------------------
	// Rank Math settings fixes
	// -------------------------------------------------------------------------

	/**
	 * Fix: ensure the global robots setting does not include noindex.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_noindex( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		$titles = (array) get_option( 'rank-math-options-titles', [] );

		$robots = isset( $titles['robots_global'] ) ? (array) $titles['robots_global'] : [ 'index', 'follow' ];
		$robots = array_diff( $robots, [ 'noindex' ] );
		if ( ! in_array( 'index', $robots, true ) ) {
			$robots[] = 'index';
		}
		$titles['robots_global'] = array_values( $robots );

		update_option( 'rank-math-options-titles', $titles );
		return $this->ok( __( 'Global robots setting updated to allow indexing. Run a fresh audit to confirm the remote API test passes.', 'seo-by-rank-math' ) );
	}

	/**
	 * Fix: OpenGraph is always enabled in Rank Math â€” explain to the AI.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_opengraph( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		return $this->cannot_fix(
			__( 'OpenGraph output is always enabled in Rank Math. If this test is failing, the remote audit API may need a fallback Open Graph image. Set one at Rank Math â†’ Titles & Meta â†’ Global Meta â†’ Open Graph Thumbnail.', 'seo-by-rank-math' )
		);
	}

	/**
	 * Fix: write a safe default robots.txt content into Rank Math settings.
	 *
	 * @param array $input Unused.
	 * @return array
	 */
	protected function fix_robots_txt( array $input ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found
		$general = (array) get_option( 'rank-math-options-general', [] );

		if ( isset( $general['robots_txt_content'] ) && '' !== trim( $general['robots_txt_content'] ) ) {
			return $this->ok( __( 'Robots.txt content is already configured in Rank Math settings.', 'seo-by-rank-math' ) );
		}

		$general['robots_txt_content'] = "User-agent: *\nDisallow: /wp-admin/\nAllow: /wp-admin/admin-ajax.php";
		update_option( 'rank-math-options-general', $general );

		return $this->ok( __( 'Default robots.txt content written to Rank Math settings.', 'seo-by-rank-math' ) );
	}

	// -------------------------------------------------------------------------
	// Per-post bulk fixes
	// -------------------------------------------------------------------------

	/**
	 * Fix: set a focus keyword on every published post that is missing one.
	 *
	 * The keyword is derived from the first 3 significant words of the post title.
	 * Accepts optional 'post_limit' input (default: POST_LIMIT).
	 *
	 * @param array $input Optional: post_limit (int).
	 * @return array
	 */
	protected function fix_focus_keywords( array $input ) {
		$limit = isset( $input['post_limit'] ) ? absint( $input['post_limit'] ) : self::POST_LIMIT;
		$limit = max( 1, min( $limit, 500 ) );
		$types = Helper::get_allowed_post_types();

		if ( empty( $types ) ) {
			return $this->cannot_fix( __( 'No indexable post types are configured in Rank Math.', 'seo-by-rank-math' ) );
		}

		$posts = get_posts(
			[
				'post_type'      => $types,
				'post_status'    => 'publish',
				'posts_per_page' => $limit,
				'meta_query'     => [ // phpcs:ignore WordPress.DB.SlowDBQuery
					[
						'key'     => 'rank_math_focus_keyword',
						'compare' => 'NOT EXISTS',
					],
				],
				'fields'         => 'ids',
			]
		);

		if ( empty( $posts ) ) {
			return $this->ok( __( 'All published posts already have a focus keyword set.', 'seo-by-rank-math' ) );
		}

		$updated   = 0;
		$truncated = count( $posts ) >= $limit;

		foreach ( $posts as $post_id ) {
			$title   = get_the_title( $post_id );
			$keyword = $this->keyword_from_title( $title );
			if ( empty( $keyword ) ) {
				continue;
			}
			update_post_meta( $post_id, 'rank_math_focus_keyword', $keyword );
			++$updated;
		}

		$summary = sprintf(
			/* translators: 1: count updated, 2: total found */
			__( 'Set focus keywords on %1$d posts (derived from post titles).', 'seo-by-rank-math' ),
			$updated
		);

		if ( $truncated ) {
			$summary .= ' ' . sprintf(
				/* translators: %d: post_limit */
				__( 'Results were limited to %d posts â€” run again to continue.', 'seo-by-rank-math' ),
				$limit
			);
		}

		return $this->ok(
			$summary,
			[
				'updated'   => $updated,
				'truncated' => $truncated,
			]
		);
	}

	/**
	 * Fix: update the focus keyword to match the existing post title for posts where it doesn't.
	 *
	 * Changing the focus keyword (not the title) is safe: it doesn't affect URLs or published content.
	 * Accepts optional 'post_limit' input (default: POST_LIMIT).
	 *
	 * @param array $input Optional: post_limit (int).
	 * @return array
	 */
	protected function fix_post_titles( array $input ) {
		global $wpdb;

		$limit = isset( $input['post_limit'] ) ? absint( $input['post_limit'] ) : self::POST_LIMIT;
		$limit = max( 1, min( $limit, 500 ) );
		$types = Helper::get_allowed_post_types();

		if ( empty( $types ) ) {
			return $this->cannot_fix( __( 'No indexable post types are configured in Rank Math.', 'seo-by-rank-math' ) );
		}

		$in_post_types = "'" . implode( "','", array_map( 'esc_sql', $types ) ) . "'";

		// Reuse the same query as the test â€” posts with focus keyword set but keyword not in title.
		$meta_query = new \WP_Meta_Query(
			[
				'relation' => 'AND',
				[
					'key'     => 'rank_math_focus_keyword',
					'compare' => 'EXISTS',
				],
				[
					'relation' => 'OR',
					[
						'key'     => 'rank_math_robots',
						'value'   => 'noindex',
						'compare' => 'NOT LIKE',
					],
					[
						'key'     => 'rank_math_robots',
						'compare' => 'NOT EXISTS',
					],
				],
			]
		);

		$mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
		// phpcs:disable WordPress.DB.DirectDatabaseQuery
		$rows = $wpdb->get_results(
			$wpdb->prepare(
				// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder
				"SELECT {$wpdb->posts}.ID, {$wpdb->posts}.post_title
				FROM {$wpdb->posts} {$mq_sql['join']}
				WHERE 1=1 {$mq_sql['where']}
				AND {$wpdb->posts}.post_type IN ({$in_post_types})
				AND {$wpdb->posts}.post_status = 'publish'
				AND REPLACE( {$wpdb->posts}.post_title, %s, %s ) NOT LIKE
					CONCAT( %s, SUBSTRING_INDEX( {$wpdb->postmeta}.meta_value, %s, 1 ), %s )
				GROUP BY {$wpdb->posts}.ID
				LIMIT %d",
				'&amp;',
				'&',
				'%',
				',',
				'%',
				$limit
			)
		);
		// phpcs:enable WordPress.DB.DirectDatabaseQuery

		if ( empty( $rows ) ) {
			return $this->ok( __( 'All posts with focus keywords already include them in their titles.', 'seo-by-rank-math' ) );
		}

		$updated   = 0;
		$truncated = count( $rows ) >= $limit;

		foreach ( $rows as $row ) {
			$keyword = $this->keyword_from_title( $row->post_title );
			if ( empty( $keyword ) ) {
				continue;
			}
			update_post_meta( (int) $row->ID, 'rank_math_focus_keyword', $keyword );
			++$updated;
		}

		$summary = sprintf(
			/* translators: %d: count updated */
			__( 'Updated focus keywords on %d posts to match their titles.', 'seo-by-rank-math' ),
			$updated
		);

		if ( $truncated ) {
			$summary .= ' ' . sprintf(
				/* translators: %d: post_limit */
				__( 'Results were limited to %d posts â€” run again to continue.', 'seo-by-rank-math' ),
				$limit
			);
		}

		return $this->ok(
			$summary,
			[
				'updated'   => $updated,
				'truncated' => $truncated,
			]
		);
	}

	/**
	 * Derive a focus keyword from a post title.
	 *
	 * Returns the first 3 words, lower-cased, with punctuation stripped.
	 * Returns empty string if nothing usable remains.
	 *
	 * @param string $title Post title.
	 * @return string
	 */
	private function keyword_from_title( $title ) {
		$words = preg_split( '/\s+/', strtolower( html_entity_decode( $title, ENT_QUOTES | ENT_HTML5, 'UTF-8' ) ) );
		$words = array_values(
			array_filter(
				$words,
				function ( $w ) {
					return ! empty( preg_replace( '/[^a-z0-9]/i', '', $w ) );
				}
			)
		);

		return implode( ' ', array_slice( $words, 0, 3 ) );
	}

	/**
	 * Return a successful fix result.
	 *
	 * @param string $summary Human-readable summary.
	 * @param array  $details Optional extra data.
	 * @return array
	 */
	private function ok( $summary, array $details = [] ) {
		return [
			'fixed'   => true,
			'summary' => $summary,
			'details' => $details,
		];
	}

	/**
	 * Return a result indicating the fix could not be applied.
	 *
	 * @param string $summary Reason why the fix could not be applied.
	 * @return array
	 */
	private function cannot_fix( $summary ) {
		return [
			'fixed'   => false,
			'summary' => $summary,
			'details' => [],
		];
	}
}
PK     “ŠU]Vcqço  o  8  includes/abilities/seo-analysis/class-audit-site-seo.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/audit-site-seo
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/audit-site-seo ability.
 */
class Audit_Site_SEO implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Audit runner instance.
	 *
	 * @var Audit_Runner
	 */
	private $runner;

	/**
	 * Constructor.
	 *
	 * @param string            $category    Ability category slug.
	 * @param array             $shared_meta Shared meta args.
	 * @param Audit_Runner|null $runner      Audit runner instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Audit_Runner $runner = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->runner      = $runner ?? new Audit_Runner();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/audit-site-seo',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Audit site SEO', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					"Runs Rank Math's site-wide SEO audit and returns a structured score plus per-test findings with fix hints. Combines local checks with the remote rankmath.com API tests.",
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'properties'           => [
						'refresh' => [
							'type'        => 'boolean',
							'description' => esc_html__( 'Re-run the audit. Defaults to true (always fresh when called by an AI host).', 'seo-by-rank-math' ),
							'default'     => true,
						],
						'url'     => [
							'type'        => 'string',
							'format'      => 'uri',
							'description' => esc_html__( "Optional URL to audit. Defaults to this site's home URL. When provided, only remote API tests run (local checks are site-wide).", 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_site_analysis' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$refresh = isset( $input['refresh'] ) ? (bool) $input['refresh'] : true;
		$url     = isset( $input['url'] ) ? $input['url'] : null;
		$result  = $this->runner->run( $refresh, $url )->to_array();

		rank_math()->tracking->track_ability_executed(
			'SEO Audit Run',
			[
				'score'     => isset( $result['score'] ) ? $result['score'] : 0,
				'grade'     => isset( $result['grade'] ) ? $result['grade'] : '',
				'has_url'   => ! empty( $url ),
				'has_error' => ! empty( $result['error'] ),
			],
			'rank_math_site_analysis'
		);

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'url'               => [ 'type' => 'string' ],
				'score'             => [
					'type'    => 'integer',
					'minimum' => 0,
					'maximum' => 100,
				],
				'grade'             => [
					'type' => 'string',
					'enum' => [ 'good', 'average', 'bad' ],
				],
				'statuses'          => [
					'type'       => 'object',
					'properties' => [
						'ok'      => [ 'type' => 'integer' ],
						'fail'    => [ 'type' => 'integer' ],
						'warning' => [ 'type' => 'integer' ],
						'info'    => [ 'type' => 'integer' ],
					],
				],
				'total_tests'       => [ 'type' => 'integer' ],
				'last_run_at'       => [ 'type' => 'integer' ],
				'remote_api_status' => [
					'type' => 'string',
					'enum' => [ 'ok', 'unavailable', 'skipped' ],
				],
				'findings'          => [
					'type'  => 'array',
					'items' => [
						'type'       => 'object',
						'properties' => [
							'test_id'     => [ 'type' => 'string' ],
							'category'    => [
								'type' => 'string',
								'enum' => [ 'priority', 'basic', 'advanced', 'performance', 'security' ],
							],
							'status'      => [
								'type' => 'string',
								'enum' => [ 'ok', 'fail', 'warning', 'info' ],
							],
							'score'       => [ 'type' => 'integer' ],
							'title'       => [ 'type' => 'string' ],
							'description' => [ 'type' => 'string' ],
							'fix_text'    => [ 'type' => 'string' ],
							'fix_html'    => [ 'type' => 'string' ],
							'fix_hint'    => [ 'type' => [ 'object', 'null' ] ],
							'kb_link'     => [ 'type' => 'string' ],
							'data'        => [ 'type' => [ 'object', 'array', 'null' ] ],
						],
					],
				],
				'error'             => [
					'type'       => [ 'object', 'null' ],
					'properties' => [
						'code'    => [ 'type' => 'string' ],
						'message' => [ 'type' => 'string' ],
					],
				],
			],
		];
	}
}
PK     “ŠU]ÔZü�Ð  Ð  4  includes/abilities/seo-analysis/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for SEO Analysis abilities.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\SEO_Analysis;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the SEO Analysis ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for SEO Analysis abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-seo-analysis';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_audit_site_seo' );
		$this->action( 'wp_abilities_api_init', 'register_fix_site_seo' );
	}

	/**
	 * Register the SEO Analysis ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'SEO Analysis', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to audit and fix site-wide SEO issues.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/audit-site-seo ability.
	 *
	 * @return void
	 */
	public function register_audit_site_seo(): void {
		( new Audit_Site_SEO( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/fix-site-seo ability.
	 *
	 * @return void
	 */
	public function register_fix_site_seo(): void {
		( new Fix_Site_SEO( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]ŒÛ      #  includes/abilities/schema/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]hå']å  å  3  includes/abilities/schema/class-get-post-schema.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-post-schema
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Schema;

use RankMath\Abilities\Ability_Interface;
use RankMath\Helper;
use RankMath\Schema\DB;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-post-schema ability.
 */
class Get_Post_Schema implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-post-schema',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get post schema', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns the schema markup attached to a post and the schema types available on this install. Use this after rank-math/get-post-seo-meta to check what schema is already set and what types are supported before making a recommendation. If the schema type you want to recommend is not in available_types.types and upgrade_message is present, show upgrade_message verbatim to the user and do not suggest adding the schema type directly.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'post_id' ],
					'properties'           => [
						'post_id'                 => [
							'type'        => 'integer',
							'description' => esc_html__( 'The ID of the post to retrieve schema markup for.', 'seo-by-rank-math' ),
						],
						'include_available_types' => [
							'type'        => 'boolean',
							'description' => esc_html__( 'When true (default), includes the schema types available on this install. Always pass true when evaluating which schema to add.', 'seo-by-rank-math' ),
							'default'     => true,
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_onpage_snippet' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$post_id = absint( $input['post_id'] );
		$include = (bool) ( $input['include_available_types'] ?? true );

		if ( 0 === $post_id ) {
			return [ 'error' => esc_html__( 'Invalid post ID.', 'seo-by-rank-math' ) ];
		}

		$schemas      = DB::get_schemas( $post_id );
		$types_raw    = DB::get_schema_types( $post_id );
		$schema_types = $types_raw
			? array_values( array_filter( array_map( 'trim', explode( ',', $types_raw ) ) ) )
			: [];

		$result = [
			'post_id'      => $post_id,
			'schema_types' => $schema_types,
			'schemas'      => array_values( $schemas ),
		];

		if ( $include ) {
			$result['available_types'] = $this->build_available_types();
		}

		rank_math()->tracking->track_ability_executed(
			'Post Schema Fetched',
			[
				'post_id'                 => $post_id,
				'schema_count'            => count( $schemas ),
				'include_available_types' => $include,
			],
			'rank_math_onpage_snippet'
		);

		return $result;
	}

	/**
	 * Build the available_types catalog.
	 *
	 * `types` lists what is installable right now: FREE types always present, PRO named
	 * types added automatically when PRO is active via rank_math/settings/snippet/types filter.
	 * `upgrade_message` is only present when PRO is not active; it is a ready-made sentence
	 * the agent should surface verbatim when a needed schema type is not in `types`.
	 *
	 * @return array
	 */
	private function build_available_types(): array {
		$available = [
			'types' => array_keys( Helper::choices_rich_snippet_types() ),
		];

		if ( ! defined( 'RANK_MATH_PRO_VERSION' ) ) {
			$available['upgrade_message'] = esc_html__(
				'This schema type requires Rank Math PRO. Upgrade at rankmath.com/pro to unlock Movie, Dataset, Fact Check, and custom schema types.',
				'seo-by-rank-math'
			);
		}

		return $available;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'post_id'         => [
					'type' => 'integer',
				],
				'schema_types'    => [
					'type'  => 'array',
					'items' => [ 'type' => 'string' ],
				],
				'schemas'         => [
					'type'  => 'array',
					'items' => [ 'type' => 'object' ],
				],
				'available_types' => [
					'type'       => 'object',
					'properties' => [
						'types'           => [
							'type'        => 'array',
							'items'       => [ 'type' => 'string' ],
							'description' => 'Schema type keys available on this install. FREE types always present; PRO named types added when PRO is active.',
						],
						'upgrade_message' => [
							'type'        => 'string',
							'description' => 'Only present when PRO is not active. Show this verbatim to the user when the recommended schema type is not in types.',
						],
					],
				],
				'error'           => [
					'type' => 'string',
				],
			],
		];
	}
}
PK     “ŠU] %¿R˜  ˜  .  includes/abilities/schema/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for Schema abilities.
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Schema;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the Schema ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for Schema abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-schema';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_post_schema' );
	}

	/**
	 * Register the Schema ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'Schema', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to read and manage schema markup attached to posts.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-post-schema ability.
	 *
	 * @return void
	 */
	public function register_get_post_schema(): void {
		( new Get_Post_Schema( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]àUÕš1   1   K  includes/abilities/ai-visibility/class-get-ai-visibility-brand-insights.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-ai-visibility-brand-insights
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\AI_Visibility;

use RankMath\Abilities\Ability_Interface;
use RankMath\AI_Visibility\Cache;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-ai-visibility-brand-insights ability.
 */
class Get_AI_Visibility_Brand_Insights implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-ai-visibility-brand-insights',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get AI Visibility brand insights', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns the full analysis results for a single brand â€” AI Visibility score, rank, sentiment, mention and citation counts, per-competitor breakdown, and per-query results including the raw AI model responses.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'brand_id' ],
					'properties'           => [
						'brand_id' => [
							'type'        => 'string',
							'description' => esc_html__( 'Brand UUID. Obtain from get-ai-visibility-overview.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$brand_id = sanitize_text_field( (string) ( $input['brand_id'] ?? '' ) );

		$cached = Cache::get_analysis( $brand_id );

		// Cache miss or stale â€” signal the caller to trigger a fetch via the REST endpoint.
		if ( false === $cached || Cache::is_brand_stale( $brand_id ) ) {
			rank_math()->tracking->track_ability_executed(
				'AI Visibility Brand Insights Fetched',
				[
					'brand_id'         => $brand_id,
					'pending'          => true,
					'query_count'      => 0,
					'competitor_count' => 0,
				],
				'manage_options'
			);

			return [ 'pending' => true ];
		}

		$query_count      = count( $cached['query_results'] ?? [] );
		$competitor_count = count( $cached['competitors'] ?? [] );

		rank_math()->tracking->track_ability_executed(
			'AI Visibility Brand Insights Fetched',
			[
				'brand_id'         => $brand_id,
				'pending'          => false,
				'query_count'      => $query_count,
				'competitor_count' => $competitor_count,
			],
			'manage_options'
		);

		return array_merge( $cached, [ 'pending' => false ] );
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'pending'       => [
					'type'        => 'boolean',
					'description' => 'True when no completed analysis exists yet (e.g. brand was just added). All other fields are absent in this case.',
				],
				'score'         => [
					'type'        => [ 'number', 'null' ],
					'description' => 'AI Visibility score for this brand.',
				],
				'rank'          => [
					'type'        => [ 'number', 'null' ],
					'description' => 'Brand ranking position among competitors.',
				],
				'avg_sentiment' => [
					'type'        => [ 'number', 'null' ],
					'description' => 'Average sentiment score across all mentions.',
				],
				'mentions'      => [
					'type'        => [ 'number', 'null' ],
					'description' => 'Total number of AI mentions.',
				],
				'citations'     => [
					'type'        => [ 'number', 'null' ],
					'description' => 'Total number of AI citations.',
				],
				'analysis'      => [
					'type'        => [ 'object', 'null' ],
					'description' => 'Metadata about the latest analysis run.',
					'properties'  => [
						'id'               => [
							'type'        => [ 'string', 'null' ],
							'description' => 'Analysis UUID.',
						],
						'status'           => [
							'type'        => [ 'string', 'null' ],
							'description' => 'Analysis status (e.g. done, processing, error).',
						],
						'started_at'       => [
							'type'        => [ 'string', 'null' ],
							'format'      => 'date-time',
							'description' => 'ISO 8601 datetime when the analysis started.',
						],
						'finished_at'      => [
							'type'        => [ 'string', 'null' ],
							'format'      => 'date-time',
							'description' => 'ISO 8601 datetime when the analysis completed.',
						],
						'duration_seconds' => [
							'type'        => [ 'number', 'null' ],
							'description' => 'How long the analysis took in seconds.',
						],
					],
				],
				'competitors'   => [
					'type'        => 'array',
					'description' => 'Per-competitor breakdown for this brand.',
					'items'       => [
						'type'       => 'object',
						'properties' => [
							'name'          => [
								'type'        => 'string',
								'description' => 'Competitor brand name.',
							],
							'url'           => [
								'type'        => [ 'string', 'null' ],
								'format'      => 'uri',
								'description' => 'Competitor website URL.',
							],
							'mentions'      => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Number of AI mentions for this competitor.',
							],
							'avg_sentiment' => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Average sentiment score for this competitor.',
							],
						],
					],
				],
				'query_results' => [
					'type'        => 'array',
					'description' => 'Per-query analysis results including raw AI model responses.',
					'items'       => [
						'type'       => 'object',
						'properties' => [
							'query_id'        => [
								'type'        => [ 'string', 'null' ],
								'description' => 'Query UUID.',
							],
							'query_text'      => [
								'type'        => 'string',
								'description' => 'The query that was submitted to the AI model.',
							],
							'found'           => [
								'type'        => 'boolean',
								'description' => 'Whether the brand was mentioned in the AI response.',
							],
							'rank'            => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Brand rank among competitors for this query.',
							],
							'sentiment'       => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Sentiment score for the brand mention in this query.',
							],
							'citations'       => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Number of citations in the AI response for this query.',
							],
							'response'        => [
								'type'        => 'string',
								'description' => 'Raw text response returned by the AI model for this query.',
							],
							'extraction_data' => [
								'type'        => 'string',
								'description' => 'Raw extraction data used to derive the structured results.',
							],
						],
					],
				],
			],
		];
	}
}
PK     “ŠU]™ ñÜ    E  includes/abilities/ai-visibility/class-create-ai-visibility-brand.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/create-ai-visibility-brand
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\AI_Visibility;

use WP_REST_Request;
use RankMath\Abilities\Ability_Interface;
use RankMath\AI_Visibility\Api\Brands_Controller;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/create-ai-visibility-brand ability.
 */
class Create_AI_Visibility_Brand implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Brands REST controller instance.
	 *
	 * @var Brands_Controller
	 */
	private $controller;

	/**
	 * Constructor.
	 *
	 * @param string                 $category    Ability category slug.
	 * @param array                  $shared_meta Shared meta args.
	 * @param Brands_Controller|null $controller  Controller instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Brands_Controller $controller = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->controller  = $controller ?? new Brands_Controller();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/create-ai-visibility-brand',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Create AI Visibility brand', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Creates a new brand for AI Visibility monitoring, triggering an initial analysis automatically.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'name', 'url' ],
					'properties'           => [
						'name'        => [
							'type'        => 'string',
							'description' => esc_html__( 'Brand name.', 'seo-by-rank-math' ),
						],
						'url'         => [
							'type'        => 'string',
							'format'      => 'uri',
							'description' => esc_html__( 'Brand website URL.', 'seo-by-rank-math' ),
						],
						'description' => [
							'type'        => 'string',
							'description' => esc_html__( 'Short description of the brand or product.', 'seo-by-rank-math' ),
							'default'     => '',
						],
						'locale'      => [
							'type'        => 'string',
							'description' => esc_html__( 'ISO 3166-1 alpha-2 country code (e.g. "US", "HU"). Defaults to no country filter.', 'seo-by-rank-math' ),
							'default'     => '',
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => false,
							'destructive' => false,
							'idempotent'  => false,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$request = new WP_REST_Request( 'POST' );
		$request->set_param( 'name', sanitize_text_field( (string) ( $input['name'] ?? '' ) ) );
		$request->set_param( 'url', esc_url_raw( (string) ( $input['url'] ?? '' ) ) );
		$request->set_param( 'description', sanitize_textarea_field( (string) ( $input['description'] ?? '' ) ) );
		$request->set_param( 'locale', sanitize_text_field( (string) ( $input['locale'] ?? '' ) ) );

		$response = $this->controller->create_brand( $request );

		if ( is_wp_error( $response ) ) {
			return [ 'error' => $response->get_error_message() ];
		}

		$data  = $response->get_data();
		$brand = $data['data']['brand'] ?? [];

		return [
			'id'              => $brand['id'] ?? '',
			'name'            => $brand['name'] ?? '',
			'url'             => $brand['url'] ?? '',
			'analysis_status' => 'pending',
			'created_at'      => $brand['created_at'] ?? null,
		];
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'id'              => [
					'type'        => 'string',
					'description' => 'UUID of the newly created brand. Use this as brand_id in subsequent ability calls.',
				],
				'name'            => [
					'type'        => 'string',
					'description' => 'Brand name.',
				],
				'url'             => [
					'type'        => 'string',
					'format'      => 'uri',
					'description' => 'Brand website URL.',
				],
				'analysis_status' => [
					'type'        => 'string',
					'enum'        => [ 'pending' ],
					'description' => 'Always "pending" on creation â€” the initial analysis is seeded automatically and will complete asynchronously.',
				],
				'created_at'      => [
					'type'        => [ 'string', 'null' ],
					'format'      => 'date-time',
					'description' => 'ISO 8601 datetime when the brand was created.',
				],
				'error'           => [
					'type'        => 'string',
					'description' => 'Present only on failure â€” human-readable error from the upstream API.',
				],
			],
		];
	}
}
PK     “ŠU]ŒÛ      *  includes/abilities/ai-visibility/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]s”.  .  E  includes/abilities/ai-visibility/class-get-ai-visibility-overview.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-ai-visibility-overview
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\AI_Visibility;

use RankMath\Abilities\Ability_Interface;
use RankMath\AI_Visibility\Cache;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-ai-visibility-overview ability.
 */
class Get_AI_Visibility_Overview implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-ai-visibility-overview',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get AI Visibility overview', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns the site-level AI Visibility summary and the full list of tracked brands with their current scores, ranks, sentiment, and analysis status.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'properties'           => [
						'refresh' => [
							'type'        => 'boolean',
							'description' => esc_html__( 'Pass true to bypass the 12-hour dashboard cache and return a stale-flagged response. Use the REST endpoint to trigger a fresh upstream fetch.', 'seo-by-rank-math' ),
							'default'     => false,
						],
						'search'  => [
							'type'        => 'string',
							'description' => esc_html__( 'Filter brands by name or URL (case-insensitive substring match).', 'seo-by-rank-math' ),
							'default'     => '',
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$refresh = (bool) ( $input['refresh'] ?? false );
		$search  = sanitize_text_field( (string) ( $input['search'] ?? '' ) );

		$data = Cache::get_dashboard();

		$summary = isset( $data['summary'] ) ? (array) $data['summary'] : [];
		$brands  = isset( $data['brands'] ) ? (array) $data['brands'] : [];

		if ( '' !== $search ) {
			$brands = array_values(
				array_filter(
					$brands,
					function ( $row ) use ( $search ) {
						return false !== stripos( $row['name'] ?? '', $search )
							|| false !== stripos( $row['url'] ?? '', $search );
					}
				)
			);
		}

		// Strip internal cache fields not relevant to MCP consumers.
		$brands = array_map(
			function ( $row ) {
				unset( $row['stale'], $row['next_scheduled'], $row['created_at'] );
				return $row;
			},
			$brands
		);

		rank_math()->tracking->track_ability_executed(
			'AI Visibility Overview Fetched',
			[
				'brand_count' => count( $brands ),
				'refresh'     => $refresh,
			],
			'manage_options'
		);

		return [
			'summary' => $summary,
			'brands'  => $brands,
		];
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'summary' => [
					'type'        => 'object',
					'description' => 'Site-level AI Visibility summary metrics.',
				],
				'brands'  => [
					'type'        => 'array',
					'description' => 'List of tracked brands with their current AI Visibility data.',
					'items'       => [
						'type'       => 'object',
						'properties' => [
							'id'              => [
								'type'        => 'string',
								'description' => 'Brand UUID.',
							],
							'name'            => [
								'type'        => 'string',
								'description' => 'Brand name.',
							],
							'url'             => [
								'type'        => 'string',
								'format'      => 'uri',
								'description' => 'Brand website URL.',
							],
							'locale'          => [
								'type'        => [ 'string', 'null' ],
								'description' => 'ISO 3166-1 alpha-2 country code (e.g. "US").',
							],
							'status'          => [
								'type'        => 'string',
								'enum'        => [ 'active', 'inactive' ],
								'description' => 'Whether the brand is actively tracked.',
							],
							'score'           => [
								'type'        => [ 'number', 'null' ],
								'description' => 'AI Visibility score for this brand.',
							],
							'rank'            => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Brand ranking position.',
							],
							'avg_sentiment'   => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Average sentiment score across mentions.',
							],
							'mentions'        => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Total number of AI mentions.',
							],
							'citations'       => [
								'type'        => [ 'number', 'null' ],
								'description' => 'Total number of AI citations.',
							],
							'analysis_status' => [
								'type'        => [ 'string', 'null' ],
								'description' => 'Current analysis status (e.g. pending, processing, success, error).',
							],
							'last_analyzed'   => [
								'type'        => [ 'string', 'null' ],
								'format'      => 'date-time',
								'description' => 'ISO 8601 datetime of the last completed analysis.',
							],
						],
					],
				],
			],
		];
	}
}
PK     “ŠU]3š;¾  ¾  J  includes/abilities/ai-visibility/class-get-ai-visibility-brand-queries.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-ai-visibility-brand-queries
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\AI_Visibility;

use RankMath\Abilities\Ability_Interface;
use RankMath\AI_Visibility\Cache;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-ai-visibility-brand-queries ability.
 */
class Get_AI_Visibility_Brand_Queries implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-ai-visibility-brand-queries',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get AI Visibility brand queries', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns the list of search queries being monitored for a brand, including which are currently enabled and which were auto-generated as baselines.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'brand_id' ],
					'properties'           => [
						'brand_id' => [
							'type'        => 'string',
							'description' => esc_html__( 'Brand UUID. Obtain from get-ai-visibility-overview or get-ai-visibility-brand-insights.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$brand_id = sanitize_text_field( (string) ( $input['brand_id'] ?? '' ) );

		$cached  = Cache::get_queries( $brand_id );
		$queries = null !== $cached ? (array) ( $cached['queries'] ?? [] ) : [];
		$total   = count( $queries );

		$enabled_count = count(
			array_filter(
				$queries,
				function ( $q ) {
					return ! empty( $q['enabled'] );
				}
			)
		);

		rank_math()->tracking->track_ability_executed(
			'AI Visibility Brand Queries Fetched',
			[
				'brand_id'      => $brand_id,
				'total'         => $total,
				'enabled_count' => $enabled_count,
			],
			'manage_options'
		);

		return [
			'brand_id' => $brand_id,
			'queries'  => $queries,
			'total'    => $total,
		];
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'brand_id' => [
					'type'        => 'string',
					'description' => 'The brand UUID the queries belong to.',
				],
				'queries'  => [
					'type'        => 'array',
					'description' => 'List of monitored queries for this brand.',
					'items'       => [
						'type'       => 'object',
						'properties' => [
							'id'          => [
								'type'        => 'string',
								'description' => 'Query UUID.',
							],
							'text'        => [
								'type'        => 'string',
								'description' => 'The query text submitted to AI models.',
							],
							'enabled'     => [
								'type'        => 'boolean',
								'description' => 'Whether this query is currently active for analysis.',
							],
							'is_baseline' => [
								'type'        => 'boolean',
								'description' => 'True when this query was auto-generated as a baseline by Rank Math.',
							],
							'created_at'  => [
								'type'        => [ 'string', 'null' ],
								'format'      => 'date-time',
								'description' => 'ISO 8601 datetime when the query was created.',
							],
							'updated_at'  => [
								'type'        => [ 'string', 'null' ],
								'format'      => 'date-time',
								'description' => 'ISO 8601 datetime when the query was last updated.',
							],
						],
					],
				],
				'total'    => [
					'type'        => 'integer',
					'description' => 'Total number of queries returned.',
				],
			],
		];
	}
}
PK     “ŠU]X¨ÿ"  "  5  includes/abilities/ai-visibility/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for AI Visibility abilities.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\AI_Visibility;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the AI Visibility ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for AI Visibility abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-ai-visibility';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_ai_visibility_overview' );
		$this->action( 'wp_abilities_api_init', 'register_get_ai_visibility_brand_insights' );
		$this->action( 'wp_abilities_api_init', 'register_get_ai_visibility_brand_queries' );
		$this->action( 'wp_abilities_api_init', 'register_create_ai_visibility_brand' );
	}

	/**
	 * Register the AI Visibility ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'AI Visibility', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to retrieve AI brand visibility data tracked by Rank Math.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-ai-visibility-overview ability.
	 *
	 * @return void
	 */
	public function register_get_ai_visibility_overview(): void {
		( new Get_AI_Visibility_Overview( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/get-ai-visibility-brand-insights ability.
	 *
	 * @return void
	 */
	public function register_get_ai_visibility_brand_insights(): void {
		( new Get_AI_Visibility_Brand_Insights( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/get-ai-visibility-brand-queries ability.
	 *
	 * @return void
	 */
	public function register_get_ai_visibility_brand_queries(): void {
		( new Get_AI_Visibility_Brand_Queries( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/create-ai-visibility-brand ability.
	 *
	 * @return void
	 */
	public function register_create_ai_visibility_brand(): void {
		( new Create_AI_Visibility_Brand( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]iûF? '   '  <  includes/abilities/content-analysis/class-get-seo-scores.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-seo-scores
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Content_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Content_Analysis;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-seo-scores ability.
 */
class Get_SEO_Scores implements Ability_Interface {

	/**
	 * Default number of posts to return.
	 */
	const DEFAULT_NUMBER_OF_POSTS = 10;

	/**
	 * Maximum number of posts to return.
	 */
	const MAX_NUMBER_OF_POSTS = 100;

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-seo-scores',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get SEO scores', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns SEO scores and grades for posts. Before running, ask the user which posts they want to review: posts needing improvement (bad score), posts with no focus keyword, unscored posts, or simply the most recently modified posts. Use this to surface which posts need SEO attention without needing to know post IDs in advance.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'properties'           => [
						'number_of_posts' => [
							'type'        => 'integer',
							'description' => esc_html__( 'Number of recently modified posts to retrieve. Defaults to 10, maximum 100.', 'seo-by-rank-math' ),
							'minimum'     => 1,
							'maximum'     => self::MAX_NUMBER_OF_POSTS,
							'default'     => self::DEFAULT_NUMBER_OF_POSTS,
						],
						'post_type'       => [
							'type'        => 'string',
							'description' => esc_html__( 'Post type to filter by (e.g. "post", "page"). Defaults to all public post types.', 'seo-by-rank-math' ),
						],
						'seo_filter'      => [
							'type'        => 'string',
							'description' => esc_html__( 'Ask the user which posts they want to review before running this ability. Available options: "bad" (score â‰¤ 50, needs improvement), "good" (score 51â€“80, ok), "great" (score > 80), "empty-fk" (no focus keyword set), "unscored" (never analyzed). If the user does not specify, omit this parameter to return the most recently modified posts.', 'seo-by-rank-math' ),
							'enum'        => [ 'bad', 'good', 'great', 'empty-fk', 'unscored' ],
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_onpage_analysis' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$limit     = min( self::MAX_NUMBER_OF_POSTS, max( 1, absint( $input['number_of_posts'] ?? self::DEFAULT_NUMBER_OF_POSTS ) ) );
		$post_type = isset( $input['post_type'] ) ? sanitize_key( $input['post_type'] ) : '';

		$seo_filter = isset( $input['seo_filter'] ) ? sanitize_key( $input['seo_filter'] ) : '';
		$meta_query = $this->build_meta_query( $seo_filter );

		$query_args = [
			'post_status'    => 'publish',
			'posts_per_page' => $limit,
			'orderby'        => 'modified',
			'order'          => 'DESC',
			'fields'         => 'ids',
		];

		if ( ! empty( $meta_query ) ) {
			$query_args['meta_query'] = $meta_query;
			// Order by score ascending for score-based filters so worst offenders surface first.
			if ( in_array( $seo_filter, [ 'bad', 'good', 'great' ], true ) ) {
				$query_args['orderby']  = 'meta_value_num';
				$query_args['meta_key'] = 'rank_math_seo_score';
				$query_args['order']    = 'ASC';
			}
		}

		if ( ! empty( $post_type ) ) {
			$query_args['post_type'] = $post_type;
		} else {
			$post_types = get_post_types( [ 'public' => true ] );
			unset( $post_types['attachment'] );
			$query_args['post_type'] = array_values( $post_types );
		}

		$post_ids = get_posts( $query_args );
		$results  = [];

		foreach ( $post_ids as $post_id ) {
			$results[] = $this->build_score_result( $post_id );
		}

		rank_math()->tracking->track_ability_executed(
			'SEO Scores Retrieved',
			[
				'count'      => count( $results ),
				'post_type'  => ! empty( $post_type ) ? $post_type : 'all',
				'seo_filter' => ! empty( $seo_filter ) ? $seo_filter : 'none',
			],
			'rank_math_onpage_analysis'
		);

		return $results;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'  => 'array',
			'items' => [
				'type'       => 'object',
				'properties' => [
					'post_id'      => [ 'type' => 'integer' ],
					'title'        => [ 'type' => 'string' ],
					'keyword'      => [
						'type'        => [ 'string', 'null' ],
						'description' => 'Primary focus keyword, or null if not set.',
					],
					'score'        => [
						'type'    => [ 'integer', 'null' ],
						'minimum' => 0,
						'maximum' => 100,
					],
					'grade'        => [
						'type' => 'string',
						'enum' => [ 'good', 'ok', 'bad', 'na' ],
					],
					'label'        => [
						'type'        => 'string',
						'description' => 'Human-readable grade label.',
					],
					'last_updated' => [ 'type' => 'integer' ],
				],
			],
		];
	}

	/**
	 * Build the meta query for a given SEO filter.
	 *
	 * Mirrors the filter conditions defined in Post_Filters::set_seo_filters().
	 *
	 * @param string $filter SEO filter slug.
	 * @return array
	 */
	private function build_meta_query( string $filter ): array {
		$hash = [
			'empty-fk' => [
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'NOT EXISTS',
			],
			'unscored' => [
				'key'     => 'rank_math_seo_score',
				'compare' => 'NOT EXISTS',
			],
			'bad'      => [
				'key'     => 'rank_math_seo_score',
				'value'   => 50,
				'compare' => '<=',
				'type'    => 'numeric',
			],
			'good'     => [
				'key'     => 'rank_math_seo_score',
				'value'   => [ 51, 80 ],
				'compare' => 'BETWEEN',
				'type'    => 'numeric',
			],
			'great'    => [
				'key'     => 'rank_math_seo_score',
				'value'   => 80,
				'compare' => '>',
				'type'    => 'numeric',
			],
		];

		if ( ! isset( $hash[ $filter ] ) ) {
			return [];
		}

		$meta_query = [];

		// Score-based filters exclude noindexed posts and require a focus keyword, matching Post_Filters behaviour.
		if ( in_array( $filter, [ 'bad', 'good', 'great' ], true ) ) {
			$meta_query['relation'] = 'AND';
			$meta_query[]           = [
				'relation' => 'OR',
				[
					'key'     => 'rank_math_robots',
					'value'   => 'noindex',
					'compare' => 'NOT LIKE',
				],
				[
					'key'     => 'rank_math_robots',
					'compare' => 'NOT EXISTS',
				],
			];
			$meta_query[]           = [
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'EXISTS',
			];
			$meta_query[]           = [
				'key'     => 'rank_math_focus_keyword',
				'value'   => '',
				'compare' => '!=',
			];
		}

		$meta_query[] = $hash[ $filter ];

		return $meta_query;
	}

	/**
	 * Build the score result array for a single post.
	 *
	 * @param int $post_id Post ID.
	 * @return array
	 */
	private function build_score_result( int $post_id ): array {
		$raw_score = get_post_meta( $post_id, 'rank_math_seo_score', true );
		$keyword   = $this->get_primary_keyword( $post_id );

		if ( '' === $raw_score || false === $raw_score ) {
			return [
				'post_id'      => $post_id,
				'title'        => get_the_title( $post_id ),
				'keyword'      => ! empty( $keyword ) ? $keyword : null,
				'score'        => null,
				'grade'        => 'na',
				'label'        => esc_html__( 'Not available', 'seo-by-rank-math' ),
				'last_updated' => (int) get_post_modified_time( 'U', true, $post_id ),
			];
		}

		$score = absint( $raw_score );
		$grade = $score >= 80 ? 'good' : ( $score >= 50 ? 'ok' : 'bad' );
		$label = $this->grade_to_label( $grade );

		return [
			'post_id'      => $post_id,
			'title'        => get_the_title( $post_id ),
			'keyword'      => ! empty( $keyword ) ? $keyword : null,
			'score'        => $score,
			'grade'        => $grade,
			'label'        => $label,
			'last_updated' => (int) get_post_modified_time( 'U', true, $post_id ),
		];
	}

	/**
	 * Convert a grade slug to a human-readable label.
	 *
	 * @param string $grade Grade slug.
	 * @return string
	 */
	private function grade_to_label( string $grade ): string {
		$labels = [
			'good' => esc_html__( 'Good', 'seo-by-rank-math' ),
			'ok'   => esc_html__( 'OK', 'seo-by-rank-math' ),
			'bad'  => esc_html__( 'Needs improvement', 'seo-by-rank-math' ),
		];

		return $labels[ $grade ] ?? esc_html__( 'Not available', 'seo-by-rank-math' );
	}

	/**
	 * Get the primary focus keyword for a post.
	 *
	 * @param int $post_id Post ID.
	 * @return string
	 */
	private function get_primary_keyword( int $post_id ): string {
		$keywords = get_post_meta( $post_id, 'rank_math_focus_keyword', true );
		if ( empty( $keywords ) ) {
			return '';
		}

		$parts = explode( ',', $keywords );
		return trim( $parts[0] );
	}
}
PK     “ŠU]++®ŽU  U  B  includes/abilities/content-analysis/class-analyze-post-content.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/analyze-post-content
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Content_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Content_Analysis;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/analyze-post-content ability.
 */
class Analyze_Post_Content implements Ability_Interface {

	/**
	 * KB article covering all 24 on-page SEO tests, used as the scoring rubric reference.
	 */
	const KB_LINK = 'https://rankmath.com/kb/score-100-in-tests/';

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Content analysis data gatherer.
	 *
	 * @var Content_Analysis_Data
	 */
	private $data;

	/**
	 * Constructor.
	 *
	 * @param string                     $category    Ability category slug.
	 * @param array                      $shared_meta Shared meta args.
	 * @param Content_Analysis_Data|null $data        Content analysis data gatherer (injectable for tests).
	 */
	public function __construct( string $category, array $shared_meta, ?Content_Analysis_Data $data = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->data        = $data ?? new Content_Analysis_Data();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/analyze-post-content',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Analyze post content', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Gathers the raw content, metadata, and list of on-page SEO tests for a saved post so an AI agent can run Rank Math\'s full on-page analysis itself, since the scoring engine only runs client-side. Use tests_to_run and content together with kb_link (the scoring rubric for all 24 tests) to evaluate each test and produce a per-test score, status, and fix message.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'required'             => [ 'post_id' ],
					'properties'           => [
						'post_id' => [
							'type'        => 'integer',
							'description' => esc_html__( 'ID of the post to analyze.', 'seo-by-rank-math' ),
						],
						'keyword' => [
							'type'        => 'string',
							'description' => esc_html__( 'Optional focus keyword to analyze against, overriding the post\'s saved focus keyword.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_onpage_analysis' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$post_id = absint( $input['post_id'] );
		$post    = get_post( $post_id );

		if ( ! $post || ! in_array( get_post_status( $post_id ), [ 'publish', 'draft', 'private', 'pending' ], true ) ) {
			return [
				'error' => [
					'code'    => 'invalid_post',
					'message' => esc_html__( 'No post found with the given ID, or the post status is not supported.', 'seo-by-rank-math' ),
				],
			];
		}

		$keyword = isset( $input['keyword'] ) ? sanitize_text_field( $input['keyword'] ) : '';
		$payload = $this->data->get( $post, $keyword );

		$result = [
			'post_id'      => $post_id,
			'keyword'      => $payload['content']['focus_keyword'],
			'tests_to_run' => $payload['tests_to_run'],
			'content'      => $payload['content'],
			'kb_link'      => self::KB_LINK,
			'instructions' => esc_html__(
				'Evaluate each test ID in tests_to_run against the fields in content, using kb_link as the scoring rubric for how each test is scored. Return a per-test breakdown with score, max_score, status (pass/fail), and a message with a specific fix. For the contentHasTOC test, when suggesting a fix or drafting content, tell the user to insert the Rank Math Table of Contents block (block name rank-math/toc-block, available in the block inserter as "Table of Contents") right after the intro, instead of a manual list of links â€” it auto-generates from the post headings.',
				'seo-by-rank-math'
			),
			'error'        => null,
		];

		rank_math()->tracking->track_ability_executed(
			'Post Content Analyzed',
			[
				'post_id'     => $post_id,
				'tests_count' => count( $payload['tests_to_run'] ),
				'has_keyword' => ! empty( $result['keyword'] ),
			],
			'rank_math_onpage_analysis'
		);

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'post_id'      => [ 'type' => 'integer' ],
				'keyword'      => [
					'type'        => 'string',
					'description' => 'Focus keyword used for analysis (input override, or the post\'s saved keyword).',
				],
				'tests_to_run' => [
					'type'        => 'array',
					'items'       => [ 'type' => 'string' ],
					'description' => 'IDs of the on-page SEO tests registered for this post, to be evaluated by the caller.',
				],
				'content'      => [
					'type'        => 'object',
					'description' => 'Raw content and metadata needed to evaluate each test in tests_to_run.',
					'properties'  => [
						'title'         => [ 'type' => 'string' ],
						'description'   => [ 'type' => 'string' ],
						'permalink'     => [ 'type' => 'string' ],
						'focus_keyword' => [ 'type' => 'string' ],
						'body'          => [ 'type' => 'string' ],
						'word_count'    => [ 'type' => 'integer' ],
						'excerpt_10pct' => [
							'type'        => 'string',
							'description' => 'First 10% of the content body, used by the keywordIn10Percent test.',
						],
						'headings'      => [
							'type'  => 'array',
							'items' => [
								'type'       => 'object',
								'properties' => [
									'level' => [ 'type' => 'string' ],
									'text'  => [ 'type' => 'string' ],
								],
							],
						],
						'images'        => [
							'type'  => 'array',
							'items' => [
								'type'       => 'object',
								'properties' => [
									'alt' => [ 'type' => 'string' ],
								],
							],
						],
						'links'         => [
							'type'  => 'array',
							'items' => [
								'type'       => 'object',
								'properties' => [
									'url'      => [ 'type' => 'string' ],
									'external' => [ 'type' => 'boolean' ],
								],
							],
						],
					],
				],
				'kb_link'      => [
					'type'        => 'string',
					'description' => 'KB article covering all 24 on-page SEO tests and how each is scored.',
				],
				'instructions' => [
					'type'        => 'string',
					'description' => 'Guidance for the calling agent on how to use tests_to_run, content, and kb_link to produce a per-test analysis.',
				],
				'error'        => [
					'type'       => [ 'object', 'null' ],
					'properties' => [
						'code'    => [ 'type' => 'string' ],
						'message' => [ 'type' => 'string' ],
					],
				],
			],
		];
	}
}
PK     “ŠU]TÐæŒŠ  Š  C  includes/abilities/content-analysis/class-content-analysis-data.phpnu „[µü¤        <?php
/**
 * Gathers raw content facts for the rank-math/analyze-post-content ability.
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Content_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Content_Analysis;

use WP_Post;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Builds the raw content payload an AI agent needs to evaluate the on-page SEO tests itself.
 *
 * This class does NOT score or judge anything â€” the actual test logic (Analyzer/Paper/Researcher)
 * only exists client-side in JS and has no PHP port. Instead, it assembles the same facts the JS
 * engine reads off the `Paper` object, so the calling agent can run the per-test evaluation.
 */
class Content_Analysis_Data {

	use Hooker;

	/**
	 * Canonical on-page test IDs for a post, mirroring Post_Screen::get_analysis().
	 *
	 * @var array
	 */
	const DEFAULT_TESTS = [
		'contentHasTOC'             => true,
		'contentHasShortParagraphs' => true,
		'contentHasAssets'          => true,
		'keywordInTitle'            => true,
		'keywordInMetaDescription'  => true,
		'keywordInPermalink'        => true,
		'keywordIn10Percent'        => true,
		'keywordInContent'          => true,
		'keywordInSubheadings'      => true,
		'keywordInImageAlt'         => true,
		'keywordDensity'            => true,
		'keywordNotUsed'            => true,
		'lengthContent'             => true,
		'lengthPermalink'           => true,
		'linksHasInternal'          => true,
		'linksHasExternals'         => true,
		'linksNotAllExternals'      => true,
		'titleStartWithKeyword'     => true,
		'titleSentiment'            => true,
		'titleHasPowerWords'        => true,
		'titleHasNumber'            => true,
		'hasContentAI'              => true,
	];

	/**
	 * Build the content analysis payload for a post.
	 *
	 * @param WP_Post $post    Post to analyze.
	 * @param string  $keyword Optional focus keyword override.
	 * @return array
	 */
	public function get( WP_Post $post, string $keyword = '' ): array {
		$post_id     = $post->ID;
		$body        = $this->get_plain_text( $post->post_content );
		$first_tenth = (int) ceil( mb_strlen( $body ) * 0.1 );
		$title       = Helper::get_post_meta( 'title', $post_id );
		$description = Helper::get_post_meta( 'description', $post_id );

		return [
			'tests_to_run' => array_keys( $this->get_tests( $post->post_type ) ),
			'content'      => [
				'title'         => ! empty( $title ) ? $title : get_the_title( $post_id ),
				'description'   => ! empty( $description ) ? $description : '',
				'permalink'     => str_replace( home_url(), '', (string) get_permalink( $post_id ) ),
				'focus_keyword' => '' !== $keyword ? $keyword : $this->get_primary_keyword( $post_id ),
				'body'          => $body,
				'word_count'    => str_word_count( $body ),
				'excerpt_10pct' => Str::substr( $body, 0, $first_tenth ),
				'headings'      => $this->get_headings( $post->post_content ),
				'images'        => $this->get_images( $post->post_content ),
				'links'         => $this->get_links( $post->post_content ),
			],
		];
	}

	/**
	 * Get the on-page test IDs registered for a post type.
	 *
	 * @param string $post_type Post type slug.
	 * @return array
	 */
	private function get_tests( string $post_type ): array {
		return $this->do_filter( 'researches/tests', self::DEFAULT_TESTS, $post_type );
	}

	/**
	 * Strip a post's content down to plain text.
	 *
	 * @param string $content Raw post content (may contain blocks/shortcodes/HTML).
	 * @return string
	 */
	private function get_plain_text( string $content ): string {
		$content = strip_shortcodes( $content );
		$content = wp_strip_all_tags( $content );

		return trim( preg_replace( '/\s+/', ' ', $content ) );
	}

	/**
	 * Extract heading text grouped by level (H1-H6).
	 *
	 * @param string $content Raw post content.
	 * @return array
	 */
	private function get_headings( string $content ): array {
		$headings = [];
		if ( ! preg_match_all( '/<h([1-6])[^>]*>(.*?)<\/h\1>/is', $content, $matches, PREG_SET_ORDER ) ) {
			return $headings;
		}

		foreach ( $matches as $match ) {
			$headings[] = [
				'level' => 'h' . $match[1],
				'text'  => trim( wp_strip_all_tags( $match[2] ) ),
			];
		}

		return $headings;
	}

	/**
	 * Extract image alt text from post content.
	 *
	 * @param string $content Raw post content.
	 * @return array
	 */
	private function get_images( string $content ): array {
		$images = [];
		if ( ! preg_match_all( '/<img[^>]+>/i', $content, $matches ) ) {
			return $images;
		}

		foreach ( $matches[0] as $tag ) {
			$alt      = preg_match( '/alt=["\']([^"\']*)["\']/i', $tag, $alt_match ) ? $alt_match[1] : '';
			$images[] = [ 'alt' => $alt ];
		}

		return $images;
	}

	/**
	 * Extract links from post content, classified as internal or external.
	 *
	 * @param string $content Raw post content.
	 * @return array
	 */
	private function get_links( string $content ): array {
		$links = [];
		if ( ! preg_match_all( '/<a\s[^>]*href=["\']([^"\']+)["\'][^>]*>/i', $content, $matches ) ) {
			return $links;
		}

		foreach ( $matches[1] as $href ) {
			if ( Str::starts_with( '#', $href ) ) {
				continue;
			}

			$links[] = [
				'url'      => $href,
				'external' => Url::is_external( $href ),
			];
		}

		return $links;
	}

	/**
	 * Get the primary focus keyword for the post.
	 *
	 * @param int $post_id Post ID.
	 * @return string
	 */
	private function get_primary_keyword( int $post_id ): string {
		$keywords = get_post_meta( $post_id, 'rank_math_focus_keyword', true );
		if ( empty( $keywords ) ) {
			return '';
		}

		$parts = explode( ',', $keywords );
		return trim( $parts[0] );
	}
}
PK     “ŠU]Íh+H    8  includes/abilities/content-analysis/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for Content Analysis abilities.
 *
 * @since      1.0.274
 * @package    RankMath
 * @subpackage RankMath\Abilities\Content_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Content_Analysis;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the Content Analysis ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for Content Analysis abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-content-analysis';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_seo_scores' );
		$this->action( 'wp_abilities_api_init', 'register_analyze_post_content' );
	}

	/**
	 * Register the Content Analysis ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'Content Analysis', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to retrieve on-page SEO analysis scores for posts.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-seo-scores ability.
	 *
	 * @return void
	 */
	public function register_get_seo_scores(): void {
		( new Get_SEO_Scores( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/analyze-post-content ability.
	 *
	 * @return void
	 */
	public function register_analyze_post_content(): void {
		( new Analyze_Post_Content( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]ŒÛ      %  includes/abilities/post-seo/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]ìQþVS  S  7  includes/abilities/post-seo/class-get-post-seo-meta.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-post-seo-meta
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Post_SEO
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Post_SEO;

use RankMath\Abilities\Ability_Interface;
use RankMath\Paper\Singular;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-post-seo-meta ability.
 */
class Get_Post_SEO_Meta implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param string $category    Ability category slug.
	 * @param array  $shared_meta Shared meta args.
	 */
	public function __construct( string $category, array $shared_meta ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-post-seo-meta',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get post SEO metadata', 'seo-by-rank-math' ),
				'description'         => esc_html__( 'Returns the full SEO metadata for a post: title, description, focus keyword, robots settings, canonical URL, Open Graph and Twitter overrides, and the current SEO score.', 'seo-by-rank-math' ),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'required'             => [ 'post_id' ],
					'properties'           => [
						'post_id' => [
							'type'        => 'integer',
							'description' => esc_html__( 'The ID of the post to retrieve SEO metadata for.', 'seo-by-rank-math' ),
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_onpage_general' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$post_id = absint( $input['post_id'] );
		$result  = ( new Singular() )->get_seo_meta( $post_id );

		if ( empty( $result['error'] ) ) {
			rank_math()->tracking->track_ability_executed(
				'Post SEO Meta Fetched',
				[ 'post_id' => $post_id ],
				'rank_math_onpage_general'
			);
		}

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		return [
			'type'       => 'object',
			'properties' => [
				'post_id'             => [
					'type' => 'integer',
				],
				'title'               => [
					'type' => 'string',
				],
				'description'         => [
					'type' => 'string',
				],
				'focus_keyword'       => [
					'type' => 'string',
				],
				'robots'              => [
					'type'  => 'array',
					'items' => [ 'type' => 'string' ],
				],
				'canonical'           => [
					'type' => 'string',
				],
				'og_title'            => [
					'type' => 'string',
				],
				'og_description'      => [
					'type' => 'string',
				],
				'twitter_title'       => [
					'type' => 'string',
				],
				'twitter_description' => [
					'type' => 'string',
				],
				'seo_score'           => [
					'type'    => 'integer',
					'minimum' => 0,
					'maximum' => 100,
				],
			],
		];
	}
}
PK     “ŠU]îã²=¦  ¦  0  includes/abilities/post-seo/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for Post SEO abilities.
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Post_SEO
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Post_SEO;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the Post SEO ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for Post SEO abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-post-seo';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_post_seo_meta' );
	}

	/**
	 * Register the Post SEO ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'Post SEO', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to read and manage per-post SEO metadata.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-post-seo-meta ability.
	 *
	 * @return void
	 */
	public function register_get_post_seo_meta(): void {
		( new Get_Post_SEO_Meta( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]ÁB	  	  &  includes/abilities/class-abilities.phpnu „[µü¤        <?php
/**
 * WordPress Abilities API integration for Rank Math SEO.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities;

use RankMath\Abilities\SEO_Analysis\Subscriber as SEO_Analysis_Subscriber;
use RankMath\Abilities\Link_Genius\Subscriber as Link_Genius_Subscriber;
use RankMath\Abilities\Post_SEO\Subscriber as Post_SEO_Subscriber;
use RankMath\Abilities\Schema\Subscriber as Schema_Subscriber;
use RankMath\Abilities\Analytics\Subscriber as Analytics_Subscriber;
use RankMath\Abilities\AI_Visibility\Subscriber as AI_Visibility_Subscriber;
use RankMath\Abilities\Content_Analysis\Subscriber as Content_Analysis_Subscriber;

defined( 'ABSPATH' ) || exit;

/**
 * Bootstraps Rank Math feature subscribers with the WordPress Abilities API.
 */
class Abilities {

	/**
	 * Singleton instance.
	 *
	 * @var Abilities
	 */
	private static $instance;

	/**
	 * Get singleton.
	 *
	 * @return Abilities
	 */
	public static function get() {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 * Constructor â€” registers feature subscribers if the Abilities API is available.
	 */
	public function __construct() {
		if ( ! function_exists( 'wp_register_ability' ) ) {
			return;
		}

		$this->register_subscribers();
	}

	/**
	 * Instantiate and register all feature subscribers.
	 *
	 * @return void
	 */
	private function register_subscribers() {
		$shared_meta = $this->shared_meta();

		$subscribers = [
			new SEO_Analysis_Subscriber( $shared_meta ),
			new Link_Genius_Subscriber( $shared_meta ),
			new Post_SEO_Subscriber( $shared_meta ),
			new Schema_Subscriber( $shared_meta ),
			new Analytics_Subscriber( $shared_meta ),
			new AI_Visibility_Subscriber( $shared_meta ),
			new Content_Analysis_Subscriber( $shared_meta ),
		];

		foreach ( $subscribers as $subscriber ) {
			$subscriber->register();
		}
	}

	/**
	 * Default meta args shared by every ability we register.
	 *
	 * @return array
	 */
	private function shared_meta() {
		return [
			'show_in_rest' => true,
			'annotations'  => [
				'readonly'    => false,
				'destructive' => false,
				'idempotent'  => true,
			],
			'mcp'          => [ 'public' => true ],
		];
	}
}
PK     “ŠU]‡û%üæ  æ  (  includes/abilities/interface-ability.phpnu „[µü¤        <?php
/**
 * Interface for Rank Math abilities.
 *
 * @since      1.0.271
 * @package    RankMath
 * @subpackage RankMath\Abilities
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities;

defined( 'ABSPATH' ) || exit;

/**
 * Ability interface.
 */
interface Ability_Interface {

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void;

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool;

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array;
}
PK     “ŠU]ŒÛ      (  includes/abilities/link-genius/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU][ªmjˆ  ˆ  8  includes/abilities/link-genius/class-get-link-report.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-link-report
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Link_Genius
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Link_Genius;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-link-report ability.
 */
class Get_Link_Report implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Runner instance.
	 *
	 * @var Link_Report_Runner
	 */
	private $runner;

	/**
	 * Constructor.
	 *
	 * @param string                  $category    Ability category slug.
	 * @param array                   $shared_meta Shared meta args.
	 * @param Link_Report_Runner|null $runner      Runner instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Link_Report_Runner $runner = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->runner      = $runner ?? new Link_Report_Runner();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-link-report',
			[
				'category'            => $this->category,
				'label'               => \esc_html__( 'Get link report', 'seo-by-rank-math' ),
				'description'         => \esc_html__(
					'Returns a site-wide link health report: total internal and external links, post counts with no internal or external links, and â€” on Rank Math PRO â€” broken links, redirects, nofollow counts, and HTTP status distribution from the Link Genius audit.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'default'              => [],
					'properties'           => [
						'include_posts' => [
							'type'        => 'boolean',
							'default'     => false,
							'description' => 'Whether to include per-post link counts in the response.',
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return \current_user_can( 'rank_math_link_builder' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$result = $this->runner->run( $input );

		rank_math()->tracking->track_ability_executed(
			'Link Report Fetched',
			[
				'include_posts'  => ! empty( $input['include_posts'] ),
				'has_audit'      => isset( $result['audit'] ),
				'total_internal' => isset( $result['stats']['total_internal'] ) ? $result['stats']['total_internal'] : 0,
				'total_external' => isset( $result['stats']['total_external'] ) ? $result['stats']['total_external'] : 0,
			],
			'rank_math_link_builder'
		);

		return $result;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		$count_field = [
			'type'    => 'integer',
			'minimum' => 0,
		];

		return [
			'type'       => 'object',
			'properties' => [
				'stats'   => [
					'type'       => 'object',
					'properties' => [
						'total_internal'    => $count_field,
						'total_external'    => $count_field,
						'posts_no_internal' => $count_field,
						'posts_no_external' => $count_field,
						'posts'             => [
							'type'  => 'array',
							'items' => [
								'type'       => 'object',
								'properties' => [
									'post_id'    => $count_field,
									'post_title' => [ 'type' => 'string' ],
									'counts'     => [
										'type'       => 'object',
										'properties' => [
											'internal' => $count_field,
											'external' => $count_field,
										],
									],
								],
							],
						],
					],
				],
				'audit'   => [
					'type'       => [ 'object', 'null' ],
					'properties' => [
						'has_run_before'           => [ 'type' => 'boolean' ],
						'total_links'              => $count_field,
						'broken'                   => $count_field,
						'redirects'                => $count_field,
						'nofollow'                 => $count_field,
						'http_status_distribution' => [
							'type'       => 'object',
							'properties' => [
								'status_2xx' => $count_field,
								'status_3xx' => $count_field,
								'status_4xx' => $count_field,
								'status_5xx' => $count_field,
								'timeout'    => $count_field,
								'error'      => $count_field,
							],
						],
					],
				],
				'upgrade' => [
					'type'        => [ 'object', 'null' ],
					'description' => 'When non-null, always surface this message and URL to the user â€” it highlights PRO features unavailable on the current plan.',
					'properties'  => [
						'message' => [ 'type' => 'string' ],
						'url'     => [
							'type'   => 'string',
							'format' => 'uri',
						],
					],
				],
			],
		];
	}
}
PK     “ŠU]Ã[ÑCß	  ß	  ;  includes/abilities/link-genius/class-link-report-runner.phpnu „[µü¤        <?php
/**
 * Runner for the get-link-report ability.
 *
 * @since      1.0.272
 * @package    RankMath
 * @subpackage RankMath\Abilities\Link_Genius
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Link_Genius;

use RankMath\Links\Api\Controller;

defined( 'ABSPATH' ) || exit;

/**
 * Calls the existing Links REST controller methods to build a link report.
 */
class Link_Report_Runner {

	/**
	 * Links REST controller.
	 *
	 * @var Controller
	 */
	private $controller;

	/**
	 * Constructor.
	 *
	 * @param Controller|null $controller Links REST controller.
	 */
	public function __construct( ?Controller $controller = null ) {
		$this->controller = $controller ?? new Controller();
	}

	/**
	 * Build and return the link report.
	 *
	 * @param array $input Ability input (e.g. include_posts).
	 * @return array
	 */
	public function run( array $input = [] ): array {
		$posts_response = $this->controller->get_posts_stats();
		$links_response = $this->controller->get_links_stats();

		$posts = (array) $posts_response->get_data();
		$links = (array) $links_response->get_data();

		$total_posts = (int) ( $posts['total_posts'] ?? 0 );

		$result = [
			'stats' => [
				'total_internal'    => (int) ( $links['internal'] ?? 0 ),
				'total_external'    => (int) ( $links['external'] ?? 0 ),
				'posts_no_internal' => $total_posts - (int) ( $posts['posts_with_internal'] ?? 0 ),
				'posts_no_external' => $total_posts - (int) ( $posts['posts_with_external'] ?? 0 ),
			],
		];

		if ( ! empty( $input['include_posts'] ) ) {
			$data                     = $this->controller->get_posts_data( [ 'per_page' => 100 ] );
			$result['stats']['posts'] = array_map(
				function ( $post ) {
					$row = (array) $post;
					return [
						'post_id'    => (int) ( $row['post_id'] ?? 0 ),
						'post_title' => (string) ( $row['post_title'] ?? '' ),
						'counts'     => [
							'internal' => (int) ( $row['internal_link_count'] ?? 0 ),
							'external' => (int) ( $row['external_link_count'] ?? 0 ),
						],
					];
				},
				$data['posts']
			);
		}

		$result = (array) apply_filters( 'rank_math/abilities/link_report_result', $result, $input );

		if ( ! isset( $result['audit'] ) ) {
			$result['upgrade'] = [
				'message' => \esc_html__( 'Upgrade to Rank Math PRO to unlock broken link detection, redirect chain analysis, and HTTP status distribution from the Link Genius audit.', 'seo-by-rank-math' ),
				'url'     => 'https://rankmath.com/pricing/',
			];
		}

		return $result;
	}
}
PK     “ŠU]}”Ïí  í  :  includes/abilities/link-genius/class-post-links-runner.phpnu „[µü¤        <?php
/**
 * Runner: fetches per-post link data via the existing links REST endpoint.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\Link_Genius
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Link_Genius;

use RankMath\Links\Api\Controller;

defined( 'ABSPATH' ) || exit;

/**
 * Delegates to the Links REST controller to retrieve individual link rows for a post.
 *
 * Calls Controller::get_links() directly instead of going through the REST stack
 * so that the request stays in-process. PRO plugin overrides
 * (rank_math/links/rest_links_response) still apply because they live inside
 * the controller callback itself.
 */
class Post_Links_Runner {

	/**
	 * Links REST controller.
	 *
	 * @var Controller
	 */
	private $controller;

	/**
	 * Constructor.
	 *
	 * @param Controller|null $controller Links REST controller (injectable for tests).
	 */
	public function __construct( ?Controller $controller = null ) {
		$this->controller = $controller ?? new Controller();
	}

	/**
	 * Fetch link rows for a post by calling the links controller directly.
	 *
	 * @param array $args {
	 *     Query arguments.
	 *
	 *     @type int    $post_id     Source post ID. Must be > 0.
	 *     @type int    $page        1-based page number.
	 *     @type int    $per_page    Rows per page (max 100).
	 *     @type string $is_internal Filter value: '1' = internal only, '0' = external only, '' = all.
	 * }
	 * @return array { links: array, total: int, pages: int }
	 */
	public function run( array $args ): array {
		$data  = $this->controller->get_links_data( $args );
		$links = [];

		foreach ( $data['links'] ?? [] as $link ) {
			$links[] = [
				'id'             => (int) $link->id,
				'url'            => $link->url,
				'type'           => $link->type,
				'anchor'         => (string) ( $link->anchor_text ?? '' ),
				'dofollow'       => isset( $link->is_nofollow ) ? ! (bool) $link->is_nofollow : null,
				'target_post_id' => (int) ( $link->target_post_id ?? 0 ),
				'target_title'   => $link->target_title ?? '',
				'target_url'     => $link->target_url ?? '',
			];
		}

		return [
			'links' => $links,
			'total' => (int) ( $data['total'] ?? 0 ),
			'pages' => (int) ( $data['pages'] ?? 0 ),
		];
	}
}
PK     “ŠU][5V³ð  ð  3  includes/abilities/link-genius/class-subscriber.phpnu „[µü¤        <?php
/**
 * Subscriber for Link Genius abilities.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\Link_Genius
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Link_Genius;

use RankMath\Traits\Hooker;
use RankMath\Abilities\Subscriber_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers the Link Genius ability category and its abilities.
 */
class Subscriber implements Subscriber_Interface {

	use Hooker;

	/**
	 * Ability category slug for Link Genius abilities.
	 */
	const CATEGORY_SLUG = 'rank-math-link-genius';

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Constructor.
	 *
	 * @param array $shared_meta Shared meta args from the top-level Abilities class.
	 */
	public function __construct( array $shared_meta ) {
		$this->shared_meta = $shared_meta;
	}

	/**
	 * Wire hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		$this->action( 'wp_abilities_api_categories_init', 'register_category' );
		$this->action( 'wp_abilities_api_init', 'register_get_link_report' );
		$this->action( 'wp_abilities_api_init', 'register_get_post_links' );
	}

	/**
	 * Register the Link Genius ability category.
	 *
	 * @return void
	 */
	public function register_category(): void {
		\wp_register_ability_category(
			self::CATEGORY_SLUG,
			[
				'label'       => esc_html__( 'Link Genius', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Abilities to retrieve and analyse internal and external link data for posts.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Register the rank-math/get-link-report ability.
	 *
	 * @return void
	 */
	public function register_get_link_report(): void {
		( new Get_Link_Report( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}

	/**
	 * Register the rank-math/get-post-links ability.
	 *
	 * @return void
	 */
	public function register_get_post_links(): void {
		( new Get_Post_Links( self::CATEGORY_SLUG, $this->shared_meta ) )->register();
	}
}
PK     “ŠU]Ñ*¯�n  n  7  includes/abilities/link-genius/class-get-post-links.phpnu „[µü¤        <?php
/**
 * Ability: rank-math/get-post-links
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Abilities\Link_Genius
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Abilities\Link_Genius;

use RankMath\Abilities\Ability_Interface;

defined( 'ABSPATH' ) || exit;

/**
 * Registers and executes the rank-math/get-post-links ability.
 *
 * Returns a paginated list of internal and external links stored for a given
 * post, including URL, link type, and target post metadata for internal links.
 */
class Get_Post_Links implements Ability_Interface {

	/**
	 * Ability category slug.
	 *
	 * @var string
	 */
	private $category;

	/**
	 * Shared meta args.
	 *
	 * @var array
	 */
	private $shared_meta;

	/**
	 * Link data runner instance.
	 *
	 * @var Post_Links_Runner
	 */
	private $runner;

	/**
	 * Constructor.
	 *
	 * @param string                 $category    Ability category slug.
	 * @param array                  $shared_meta Shared meta args.
	 * @param Post_Links_Runner|null $runner      Runner instance.
	 */
	public function __construct( string $category, array $shared_meta, ?Post_Links_Runner $runner = null ) {
		$this->category    = $category;
		$this->shared_meta = $shared_meta;
		$this->runner      = $runner ?? new Post_Links_Runner();
	}

	/**
	 * Register the ability with the WordPress Abilities API.
	 *
	 * @return void
	 */
	public function register(): void {
		\wp_register_ability(
			'rank-math/get-post-links',
			[
				'category'            => $this->category,
				'label'               => esc_html__( 'Get post links', 'seo-by-rank-math' ),
				'description'         => esc_html__(
					'Returns a paginated list of internal and external links stored for a given post, including the URL, link type, and target post details for internal links.',
					'seo-by-rank-math'
				),
				'input_schema'        => [
					'type'                 => 'object',
					'required'             => [ 'post_id' ],
					'properties'           => [
						'post_id' => [
							'type'        => 'integer',
							'description' => esc_html__( 'ID of the post whose links to retrieve.', 'seo-by-rank-math' ),
							'minimum'     => 1,
						],
					],
					'additionalProperties' => false,
				],
				'output_schema'       => $this->output_schema(),
				'permission_callback' => [ $this, 'check_permissions' ],
				'execute_callback'    => [ $this, 'execute' ],
				'meta'                => array_merge(
					$this->shared_meta,
					[
						'annotations' => [
							'readonly'    => true,
							'destructive' => false,
							'idempotent'  => true,
						],
					]
				),
			]
		);
	}

	/**
	 * Check if the current user has permission to execute this ability.
	 *
	 * @return bool
	 */
	public function check_permissions(): bool {
		return current_user_can( 'rank_math_link_builder' );
	}

	/**
	 * Execute the ability.
	 *
	 * @param array $input Ability input arguments.
	 * @return array
	 */
	public function execute( array $input = [] ): array {
		$post_id = absint( $input['post_id'] ?? 0 );

		$result = $this->runner->run(
			[
				'source_id' => $post_id,
			]
		);

		$internal = [];
		$external = [];

		foreach ( $result['links'] ?? [] as $link ) {
			$item = [
				'url'      => $link['url'],
				'anchor'   => $link['anchor'],
				'dofollow' => $link['dofollow'],
			];

			if ( 'internal' === $link['type'] ) {
				$item['target_post_id'] = $link['target_post_id'];
				$internal[]             = $item;
			} else {
				$external[] = $item;
			}
		}

		$output = [
			'post_id'  => $post_id,
			'internal' => $internal,
			'external' => $external,
			'counts'   => [
				'internal' => count( $internal ),
				'external' => count( $external ),
			],
		];

		rank_math()->tracking->track_ability_executed(
			'Post Links Fetched',
			[
				'post_id'  => $post_id,
				'internal' => count( $internal ),
				'external' => count( $external ),
			],
			'rank_math_link_builder'
		);

		return $output;
	}

	/**
	 * JSON schema for the ability output.
	 *
	 * @return array
	 */
	private function output_schema(): array {
		$link_item = [
			'type'       => 'object',
			'properties' => [
				'url'      => [
					'type'        => 'string',
					'description' => 'Full URL of the link.',
				],
				'anchor'   => [
					'type'        => [ 'string', 'null' ],
					'description' => 'Anchor text of the link. Null when anchor data is unavailable (FREE plugin).',
				],
				'dofollow' => [
					'type'        => [ 'boolean', 'null' ],
					'description' => 'True when the link is dofollow. Null when rel data is unavailable.',
				],
			],
		];

		$internal_item                                 = $link_item;
		$internal_item['properties']['target_post_id'] = [
			'type'        => 'integer',
			'description' => 'WordPress post ID of the link target.',
		];

		return [
			'type'       => 'object',
			'properties' => [
				'post_id'  => [
					'type'        => 'integer',
					'description' => 'WordPress post ID of the source post.',
				],
				'internal' => [
					'type'        => 'array',
					'description' => 'Internal links found in the post.',
					'items'       => $internal_item,
				],
				'external' => [
					'type'        => 'array',
					'description' => 'External links found in the post.',
					'items'       => $link_item,
				],
				'counts'   => [
					'type'        => 'object',
					'description' => 'Count of links returned per type.',
					'properties'  => [
						'internal' => [
							'type'        => 'integer',
							'description' => 'Number of internal links returned.',
						],
						'external' => [
							'type'        => 'integer',
							'description' => 'Number of external links returned.',
						],
					],
				],
			],
		];
	}
}
PK     “ŠU]ŒÛ        includes/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]ŒÛ        includes/metaboxes/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]}	'  '    includes/class-term.phpnu „[µü¤        <?php
/**
 * The Term Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use WP_Term;

defined( 'ABSPATH' ) || exit;

/**
 * Term class.
 */
class Term extends Metadata {

	/**
	 * Type of object metadata is for
	 *
	 * @var string
	 */
	protected $meta_type = 'term';

	/**
	 * Retrieve Term instance.
	 *
	 * @param mixed  $term     Term to get either (string) term name, (int) term ID or (object) term.
	 * @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
	 *                         disambiguating potentially shared terms.
	 * @return Term|false Term object, false otherwise.
	 */
	public static function get( $term = 0, $taxonomy = null ) {
		$term = self::get_term_id( $term, $taxonomy );
		if ( empty( $term ) ) {
			return null;
		}

		if ( isset( self::$objects[ $term ] ) && 'term' === self::$objects[ $term ]->meta_type ) {
			return self::$objects[ $term ];
		}

		$_term                  = new self( WP_Term::get_instance( $term, $taxonomy ) );
		$_term->object_id       = $term;
		self::$objects[ $term ] = $_term;

		return $_term;
	}

	/**
	 * Get term ID.
	 *
	 * @param mixed  $term     Term to get either (string) term name, (int) term ID or (object) term.
	 * @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
	 *                         disambiguating potentially shared terms.
	 */
	private static function get_term_id( $term = 0, $taxonomy = null ) {
		if ( is_string( $term ) ) {
			$term = get_term_by( 'slug', $term, $taxonomy );
		} elseif ( is_int( $term ) && 0 === absint( $term ) ) {
			$term = $GLOBALS['wp_query']->get_queried_object();
		}

		if ( is_object( $term ) && isset( $term->term_id ) ) {
			return $term->term_id;
		}

		return false;
	}

	/**
	 * Get term meta value.
	 *
	 * @param string $key           Meta key.
	 * @param mixed  $term          Term name, term ID, or term object.
	 * @param string $taxonomy      Optional. Limit matched terms to those matching `$taxonomy`. Only used for
	 *                              disambiguating potentially shared terms.
	 * @param string $default_value Default value to use when metadata does not exists.
	 * @return mixed
	 */
	public static function get_meta( $key, $term = 0, $taxonomy = null, $default_value = '' ) {
		$term = self::get( $term, $taxonomy );

		if ( is_null( $term ) || ! $term->is_found() ) {
			return $default_value;
		}

		return $term->get_metadata( $key, $default_value );
	}

	/**
	 * Check if the current query is for multiple terms (e.g. /term-1,term-2/).
	 *
	 * @return bool
	 */
	public static function is_multiple_terms_query() {
		global $wp_query;

		if ( ! is_tax() && ! is_tag() && ! is_category() ) {
			return false;
		}

		$term          = get_queried_object();
		$queried_terms = $wp_query->tax_query->queried_terms;

		if ( empty( $queried_terms[ $term->taxonomy ]['terms'] ) ) {
			return false;
		}

		return count( $queried_terms[ $term->taxonomy ]['terms'] ) > 1;
	}
}
PK     “ŠU]ÒB’­¥  ¥    includes/class-settings.phpnu „[µü¤        <?php
/**
 * The settings functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Helper;
use RankMath\Helpers\Sitepress;

defined( 'ABSPATH' ) || exit;

/**
 * Settings class.
 */
class Settings {

	/**
	 * Hold option data.
	 *
	 * @var array
	 */
	private $keys = [];

	/**
	 * Options holder.
	 *
	 * @var array
	 */
	private $options = null;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		add_action( 'init', [ $this, 'init' ] );

		$this->add_options( 'titles', 'rank-math-options-titles' );
		$this->add_options( 'general', 'rank-math-options-general' );
		$this->add_options( 'sitemap', 'rank-math-options-sitemap' );
		$this->add_options( 'instant_indexing', 'rank-math-options-instant-indexing' );
	}

	/**
	 * Init.
	 */
	public function init() {
		if ( Sitepress::get()->is_active() ) {
			$this->reset();
		}
	}

	/**
	 * Add new option data.
	 *
	 * @param string $id  Unique id.
	 * @param string $key Option key.
	 */
	public function add_options( $id, $key ) {
		if ( ! empty( $id ) && ! empty( $key ) ) {

			$this->keys[ $id ] = $key;

			// Lazy-Load options.
			if ( ! is_null( $this->options ) ) {
				$options = get_option( $key, [] );
				$options = $this->normalize_it( $options );

				$this->options[ $id ] = $options;
			}
		}
	}

	/**
	 * Get settings keys.
	 *
	 * @return array
	 */
	public function get_keys() {
		return $this->keys;
	}

	/**
	 * Get Setting.
	 *
	 * @param  string $field_id      ID of field to get.
	 * @param  mixed  $default_value (Optional) Default value.
	 * @return mixed
	 */
	public function get( $field_id = '', $default_value = false ) {
		$opts = $this->get_options();
		$ids  = explode( '.', $field_id );

		foreach ( $ids as $id ) {
			if ( is_null( $opts ) ) {
				break;
			}
			$opts = isset( $opts[ $id ] ) ? $opts[ $id ] : null;
		}

		if ( is_null( $opts ) ) {
			return $default_value;
		}

		return $opts;
	}

	/**
	 * Set value.
	 *
	 * @param string $group Setting group.
	 * @param string $id    Setting id.
	 * @param string $value Setting value.
	 */
	public function set( $group, $id, $value ) {
		$this->options[ $group ][ $id ] = $value;
	}

	/**
	 * Get all settings.
	 *
	 * @return array
	 */
	public function all() {
		return $this->get_options();
	}

	/**
	 * Get all settings.
	 *
	 * @return array
	 */
	public function all_raw() {
		$options = [];
		if ( ! empty( $this->keys ) ) {
			foreach ( $this->keys as $id => $key ) {
				$options[ $id ] = get_option( $key, [] );
			}
		}

		return $options;
	}

	/**
	 * Reset options
	 */
	public function reset() {
		$this->options = null;
		$this->get_options();
	}

	/**
	 * Get options once for use throughout the plugin cycle.
	 *
	 * @return array
	 */
	private function get_options() {

		if ( is_null( $this->options ) && ! empty( $this->keys ) ) {

			$options = [];
			foreach ( $this->keys as $id => $key ) {
				$options[ $id ] = get_option( $key, [] );
			}

			$this->options = $this->normalize_it( $options );
		}

		return (array) $this->options;
	}

	/**
	 * Normalize option data
	 *
	 * @param mixed $options Array to normalize.
	 * @return mixed
	 */
	private function normalize_it( $options ) {
		foreach ( (array) $options as $key => $value ) {
			$options[ $key ] = is_array( $value ) ? $this->normalize_it( $value ) : Helper::normalize_data( $value );
		}

		return $options;
	}
}
PK     “ŠU]|W¢è      includes/class-json-manager.phpnu „[µü¤        <?php
/**
 * The JSON manager handles json output to admin and frontend.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath;

/**
 * Json_Manager class.
 */
class Json_Manager {

	/**
	 * Data.
	 *
	 * @var array
	 */
	private $data = [];

	/**
	 * Construct
	 */
	public function __construct() {
		$hook = is_admin() ? 'admin_footer' : 'wp_footer';
		add_action( $hook, [ $this, 'output' ], 0 );
	}

	/**
	 * Add something to JSON object.
	 *
	 * @param string $key         Unique identifier.
	 * @param mixed  $value       The data itself can be either a single or an array.
	 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable.
	 */
	public function add( $key, $value, $object_name ) {

		if ( empty( $key ) ) {
			return;
		}

		// If key doesn't exists.
		if ( ! isset( $this->data[ $object_name ][ $key ] ) ) {
			$this->data[ $object_name ][ $key ] = $value;
			return;
		}

		// If key already exists.
		$old_value = $this->data[ $object_name ][ $key ];

		// If both array merge them.
		if ( is_array( $old_value ) && is_array( $value ) ) {
			$this->data[ $object_name ][ $key ] = array_merge( $old_value, $value );
			return;
		}

		$this->data[ $object_name ][ $key ] = $value;
	}

	/**
	 * Remove something from JSON object.
	 *
	 * @param string $key         Unique identifier.
	 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable.
	 */
	public function remove( $key, $object_name ) {
		if ( isset( $this->data[ $object_name ][ $key ] ) ) {
			unset( $this->data[ $object_name ][ $key ] );
		}
	}

	/**
	 * Print data.
	 */
	public function output() {
		$script = $this->encode();
		if ( ! $script ) {
			return;
		}

		wp_print_inline_script_tag( $script, [ 'id' => 'rank-math-json' ] );
	}

	/**
	 * Get encoded string.
	 *
	 * @return string
	 */
	private function encode() {
		$script = '';
		foreach ( $this->data as $object_name => $object_data ) {
			$script .= $this->single_object( $object_name, $object_data );
		}

		return $script;
	}

	/**
	 * Encode single object.
	 *
	 * @param  string $object_name Object name to use as JS variable.
	 * @param  array  $object_data Object data to json encode.
	 * @return array
	 */
	private function single_object( $object_name, $object_data ) {
		if ( empty( $object_data ) ) {
			return '';
		}

		$object_data = apply_filters( 'rank_math/json_data', $object_data );
		foreach ( (array) $object_data as $key => $value ) {
			if ( ! is_string( $value ) ) {
				continue;
			}

			$object_data[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
		}

		return "var $object_name = " . wp_json_encode( $object_data ) . ';' . PHP_EOL;
	}
}
PK     “ŠU]oÆ¶I  I     includes/traits/class-wizard.phpnu „[µü¤        <?php
/**
 * The Wizard pages helper.
 *
 * @since      1.0.3
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

use RankMath\Helper as GlobalHelper;
use RankMath\Helpers\Security;

defined( 'ABSPATH' ) || exit;

/**
 * Wizard class.
 */
trait Wizard {
	/**
	 * Is the page is current page.
	 *
	 * @return boolean
	 */
	public function is_current_page() {
		$page = isset( $_GET['page'] ) && ! empty( $_GET['page'] ) ? filter_input( INPUT_GET, 'page' ) : false;
		return $page === $this->slug;
	}
}
PK     “ŠU]@tÑÆ¢
  ¢
    includes/traits/class-ajax.phpnu „[µü¤        <?php
/**
 * The AJAX.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Ajax class.
 */
trait Ajax {

	/**
	 * Hooks a function on to a specific ajax action
	 *
	 * @param string   $tag             The name of the action to which the $function_to_add is hooked.
	 * @param callable $function_to_add The name of the function you wish to be called.
	 * @param int      $priority        Optional. Used to specify the order in which the functions
	 *                                  associated with a particular action are executed. Default 10.
	 *                                  Lower numbers correspond with earlier execution,
	 *                                  and functions with the same priority are executed
	 *                                  in the order in which they were added to the action.
	 */
	protected function ajax( $tag, $function_to_add, $priority = 10 ) {
		\add_action( 'wp_ajax_rank_math_' . $tag, [ $this, $function_to_add ], $priority );
	}

	/**
	 * Verify request nonce
	 *
	 * @param string $action The nonce action name.
	 */
	public function verify_nonce( $action ) {
		if ( ! isset( $_REQUEST['security'] ) || ! \wp_verify_nonce( sanitize_key( $_REQUEST['security'] ), $action ) ) {
			$this->error( __( 'Error: Nonce verification failed', 'seo-by-rank-math' ) );
		}
	}

	/**
	 * Whether the current user has a specific capability. If not die with error.
	 *
	 * @see has_cap()
	 *
	 * @param string $capability Capability name.
	 * @return boolean Whether the current user has the given capability.
	 */
	public function has_cap_ajax( $capability ) {

		if ( ! Helper::has_cap( $capability ) ) {
			$this->error( esc_html__( 'You are not authorized to perform this action.', 'seo-by-rank-math' ) );
		}

		return true;
	}

	/**
	 * Wrapper function for sending success response
	 *
	 * @param mixed $data Data to send to response.
	 */
	public function success( $data = null ) {
		$this->send( $data );
	}

	/**
	 * Wrapper function for sending error
	 *
	 * @param mixed $data Data to send to response.
	 */
	public function error( $data = null ) {
		$this->send( $data, false );
	}

	/**
	 * Send AJAX response.
	 *
	 * @param array   $data    Data to send using ajax.
	 * @param boolean $success Optional. If this is an error. Defaults: true.
	 */
	private function send( $data, $success = true ) {

		if ( is_string( $data ) ) {
			$data = $success ? [ 'message' => $data ] : [ 'error' => $data ];
		}
		$data['success'] = isset( $data['success'] ) ? $data['success'] : $success;

		\wp_send_json( $data );
	}
}
PK     “ŠU]ŒÛ        includes/traits/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]«ÇìHI  I     includes/traits/class-hooker.phpnu „[µü¤        <?php
/**
 * The Hooker.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

defined( 'ABSPATH' ) || exit;

/**
 * Hooker class.
 */
trait Hooker {
	/**
	 * Hooks a function on to a specific action
	 *
	 * @param string   $tag             The name of the action to which the $function_to_add is hooked.
	 * @param callable $function_to_add The name of the function you wish to be called.
	 * @param int      $priority        Optional. Used to specify the order in which the functions
	 *                                  associated with a particular action are executed. Default 10.
	 *                                  Lower numbers correspond with earlier execution,
	 *                                  and functions with the same priority are executed
	 *                                  in the order in which they were added to the action.
	 * @param int      $accepted_args   Optional. The number of arguments the function accepts. Default 1.
	 * @return true Will always return true.
	 */
	protected function action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
		return \add_action( $tag, [ $this, $function_to_add ], $priority, $accepted_args );
	}

	/**
	 * Hook a function or method to a specific filter action
	 *
	 * @param string   $tag             The name of the filter to hook the $function_to_add callback to.
	 * @param callable $function_to_add The callback to be run when the filter is applied.
	 * @param int      $priority        Optional. Used to specify the order in which the functions
	 *                                  associated with a particular action are executed. Default 10.
	 *                                  Lower numbers correspond with earlier execution,
	 *                                  and functions with the same priority are executed
	 *                                  in the order in which they were added to the action.
	 * @param int      $accepted_args   Optional. The number of arguments the function accepts. Default 1.
	 * @return true
	 */
	protected function filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
		return \add_filter( $tag, [ $this, $function_to_add ], $priority, $accepted_args );
	}

	/**
	 * Removes a function from a specified action hook
	 *
	 * @param string   $tag                The action hook to which the function to be removed is hooked.
	 * @param callable $function_to_remove The name of the function which should be removed.
	 * @param int      $priority           Optional. The priority of the function. Default 10.
	 * @return bool Whether the function is removed.
	 */
	protected function remove_action( $tag, $function_to_remove, $priority = 10 ) {
		return \remove_action( $tag, [ $this, $function_to_remove ], $priority );
	}

	/**
	 * Removes a function from a specified filter hook
	 *
	 * @param string   $tag                The filter hook to which the function to be removed is hooked.
	 * @param callable $function_to_remove The name of the function which should be removed.
	 * @param int      $priority           Optional. The priority of the function. Default 10.
	 * @return bool    Whether the function existed before it was removed.
	 */
	protected function remove_filter( $tag, $function_to_remove, $priority = 10 ) {
		return \remove_filter( $tag, [ $this, $function_to_remove ], $priority );
	}

	/**
	 * Do action with league as prefix
	 *
	 * @param array ...$args Action args.
	 */
	protected function do_action( ...$args ) {
		if ( empty( $args[0] ) ) {
			return;
		}

		$action = 'rank_math/' . $args[0];
		unset( $args[0] );

		\do_action_ref_array( $action, \array_merge( [], $args ) );
	}

	/**
	 * Do filter with league as prefix
	 *
	 * @param array ...$args Action args.
	 */
	protected function do_filter( ...$args ) {
		if ( empty( $args[0] ) ) {
			return;
		}

		$action = 'rank_math/' . $args[0];
		unset( $args[0] );

		return \apply_filters_ref_array( $action, \array_merge( [], $args ) );
	}

	/**
	 * Inject config into class
	 *
	 * @param array $config Array of configuration.
	 */
	protected function config( $config = [] ) {
		// Bail early if no config.
		if ( empty( $config ) ) {
			return;
		}

		foreach ( $config as $key => $value ) {
			$this->$key = $value;
		}
	}

	/**
	 * Remove 'view_query_monitor' capability for current page.
	 *
	 * @param  bool|array $user_caps Concerned user's capabilities.
	 * @return bool|array Concerned user's capabilities.
	 */
	public function filter_user_has_cap( array $user_caps ) {
		$user_caps['view_query_monitor'] = false;

		return $user_caps;
	}
}
PK     “ŠU]
Š{»í  í  #  includes/traits/class-shortcode.phpnu „[µü¤        <?php
/**
 * The Shortcode trait.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

defined( 'ABSPATH' ) || exit;

/**
 * Trait Shortcode
 */
trait Shortcode {

	/**
	 * Adds a new shortcode
	 *
	 * @param string   $tag  Shortcode tag to be searched in post content.
	 * @param callable $func The callback function to run when the shortcode is found.
	 */
	protected function add_shortcode( $tag, $func ) {
		\add_shortcode( $tag, [ $this, $func ] );
	}

	/**
	 * Removes hook for shortcode.
	 *
	 * @param string $tag Shortcode tag to remove hook for.
	 */
	protected function remove_shortcode( $tag ) {
		\remove_shortcode( $tag );
	}
}
PK     “ŠU]ð²Vü  ü    includes/traits/class-meta.phpnu „[µü¤        <?php
/**
 * The Metadata.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Meta class.
 */
trait Meta {

	/**
	 * Get meta by object type.
	 *
	 * @param string $object_type Object type for destination where to save.
	 * @param int    $object_id   Object id for destination where to save.
	 * @param string $key         The meta key to retrieve. If no key is provided, fetches all metadata.
	 * @param bool   $single      Whether to return a single value.
	 *
	 * @return mixed
	 */
	public function get_meta( $object_type, $object_id, $key = '', $single = true ) {
		$func = "get_{$object_type}_meta";

		$value = $func( $object_id, $key, $single );
		if ( $key === 'rank_math_focus_keyword' && ! is_string( $value ) ) {
			return '';
		}

		return $value;
	}

	/**
	 * Update meta by object type.
	 *
	 * @param string $object_type Object type for destination where to save.
	 * @param int    $object_id   Object id for destination where to save.
	 * @param string $key         Metadata key.
	 * @param mixed  $value       Metadata value.
	 *
	 * @return mixed
	 */
	public function update_meta( $object_type, $object_id, $key, $value ) {
		$func = "update_{$object_type}_meta";

		if ( is_string( $key ) && is_protected_meta( $key ) && ( is_scalar( $value ) || is_array( $value ) ) ) {
			return $func( $object_id, $key, $value );
		}

		return false;
	}
}
PK     “ŠU]Õ6
  6
    includes/traits/class-cache.phpnu „[µü¤        <?php
/**
 * The Cache Trait.
 *
 * @since      1.0.99
 * @package    RankMath
 * @subpackage RankMath\Traits
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Traits;

defined( 'ABSPATH' ) || exit;

/**
 * Cache class.
 */
trait Cache {

	/**
	 * To generate hash of object.
	 *
	 * @param string|array|object $value Object for that hash need to generate.
	 *
	 * @return string Hash value of provided object.
	 */
	public function generate_hash( $value ) {

		if ( empty( $value ) ) {
			return '';
		}

		if ( is_object( $value ) ) {
			$value = (array) $value;
		}

		if ( is_array( $value ) ) {
			ksort( $value );
			$value = wp_json_encode( $value );
		}

		$value = apply_filters( 'rank_math/cache/generate_hash', trim( $value ) );
		$hash  = hash( 'sha256', $value );

		return $hash;
	}

	/**
	 * Sets a value in cache.
	 *
	 * The value is set whether or not this key already exists in Redis.
	 *
	 * @param string $key    The key under which to store the value.
	 * @param mixed  $data   The value to store.
	 * @param string $group  The group value appended to the $key.
	 * @param int    $expire The expiration time, defaults to 0.
	 *
	 * @return bool              Returns TRUE on success or FALSE on failure.
	 */
	public function set_cache( $key, $data, $group = '', $expire = 0 ) {
		if ( ! $this->is_enabled() ) {
			return false;
		}

		return wp_cache_set( $key, $data, $group, $expire );
	}

	/**
	 * Retrieve object from cache.
	 *
	 * Gets an object from cache based on $key and $group.
	 *
	 * @param string $key   The key under which to store the value.
	 * @param string $group The group value appended to the $key.
	 *
	 * @return bool|mixed Cached object value.
	 */
	public function get_cache( $key, $group ) {
		if ( ! $this->is_enabled() ) {
			return false;
		}

		return wp_cache_get( $key, $group );
	}

	/**
	 * Removes all cache items in a group, if the object cache implementation supports it.
	 *
	 * @param string $group Name of group to remove from cache.
	 *
	 * @return bool True if group was flushed, false otherwise.
	 */
	public function cache_flush_group( $group ) {
		if ( ! $this->is_enabled() ) {
			return false;
		}

		global $wp_object_cache;
		if ( ! isset( $wp_object_cache->cache[ $group ] ) ) {
			return;
		}

		$wp_object_cache->delete_multiple( array_keys( $wp_object_cache->cache[ $group ] ), $group );

		return true;
	}

	/**
	 * Check if cache is enabled.
	 */
	public function is_enabled() {
		if ( wp_using_ext_object_cache() === false ) {
			return false;
		}

		return apply_filters( 'rank_math/cache/enabled', true );
	}
}
PK     “ŠU]#—²      includes/class-common.phpnu „[µü¤        <?php
/**
 * Global functionality of the plugin.
 *
 * Defines the functionality loaded both on admin and frontend.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Ajax;
use RankMath\Traits\Meta;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use WP_Error;
use WP_Term;

defined( 'ABSPATH' ) || exit;

/**
 * Common class.
 */
class Common {

	use Hooker;
	use Ajax;
	use Meta;

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->action( 'loginout', 'nofollow_link' );
		$this->filter( 'register', 'nofollow_link' );

		// Change Permalink for primary term.
		$this->filter( 'post_type_link', 'post_type_link', 9, 2 );
		$this->filter( 'post_link_category', 'post_link_category', 10, 3 );
		$this->filter( 'wc_product_post_type_link_product_cat', 'post_link_category', 10, 3 );

		// Reorder categories listing: put primary at the beginning.
		$this->filter( 'get_the_terms', 'reorder_the_terms', 10, 3 );

		$this->filter( 'is_protected_meta', 'hide_rank_math_meta', 10, 2 );
		$this->action( 'rank_math/admin/before_editor_scripts', 'editor_script' );

		new Auto_Updater();
		new Update_Email();
		new Defaults();
		new Admin_Bar_Menu();
		new Dashboard_Widget();
		new Thumbnail_Overlay();
		new Admin\Lock_Modified_Date();
	}

	/**
	 * Enqueue common editor script to use in all editors.
	 */
	public function editor_script() {
		wp_register_script(
			'rank-math-app',
			rank_math()->plugin_url() . 'assets/admin/js/rank-math-app.js',
			[],
			rank_math()->version,
			true
		);
	}

	/**
	 * Add rel="nofollow" to a link.
	 *
	 * @param string $link Link.
	 *
	 * @return string
	 */
	public function nofollow_link( $link ) {
		// Check if link is nofollow already.
		if ( strpos( $link, ' rel="nofollow"' ) || strpos( $link, " rel='nofollow'" ) ) {
			return $link;
		}
		return str_replace( '<a ', '<a rel="nofollow" ', $link );
	}

	/**
	 * Filters the category that gets used in the %category% permalink token.
	 *
	 * @param WP_Term $term  The category to use in the permalink.
	 * @param array   $terms Array of all categories (WP_Term objects) associated with the post.
	 * @param WP_Post $post  The post in question.
	 *
	 * @return WP_Term
	 */
	public function post_link_category( $term, $terms, $post ) {
		$primary_term = $this->get_primary_term( $term->taxonomy, $post->ID );
		if ( false === $primary_term ) {
			return $term;
		}

		$term_ids = array_column( $terms, 'term_id' );
		if ( ! is_object( $primary_term ) || ! in_array( $primary_term->term_id, $term_ids, true ) ) {
			return $term;
		}

		return $primary_term;
	}

	/**
	 * Filters the permalink for a post of a custom post type.
	 *
	 * @param string  $post_link The post's permalink.
	 * @param WP_Post $post      The post in question.
	 *
	 * @return string
	 */
	public function post_type_link( $post_link, $post ) {
		$taxonomies = Helper::get_object_taxonomies( $post->post_type, 'objects' );
		$taxonomies = wp_filter_object_list( $taxonomies, [ 'hierarchical' => true ], 'and', 'name' );

		foreach ( $taxonomies as $taxonomy ) {
			$this->sanitize_post_type_link( $post_link, $post, $taxonomy );
		}

		return $post_link;
	}

	/**
	 * Reorder terms for a post to put primary category to the beginning.
	 *
	 * @param array|WP_Error $terms    List of attached terms, or WP_Error on failure.
	 * @param int            $post_id  Post ID.
	 * @param string         $taxonomy Name of the taxonomy.
	 *
	 * @return array
	 */
	public function reorder_the_terms( $terms, $post_id, $taxonomy ) {
		if ( empty( $terms ) || is_wp_error( $terms ) ) {
			return $terms;
		}

		/**
		 * Filter: Allow disabling the primary term feature.
		 * 'rank_math/primary_term' is deprecated,
		 * use 'rank_math/admin/disable_primary_term' instead.
		 *
		 * @param bool $return True to disable.
		 */
		if ( true === apply_filters_deprecated( 'rank_math/primary_term', [ false ], '1.0.43', 'rank_math/admin/disable_primary_term' )
			|| true === $this->do_filter( 'admin/disable_primary_term', false ) ) {
			return $terms;
		}

		$post_id = empty( $post_id ) ? $GLOBALS['post']->ID : $post_id;

		// Get Primary Term.
		$primary = absint( Helper::get_post_meta( "primary_{$taxonomy}", $post_id ) );
		if ( ! $primary ) {
			return $terms;
		}

		$primary_term = null;
		foreach ( $terms as $index => $term ) {
			if ( $primary === $term->term_id ) {
				$primary_term = $term;
				unset( $terms[ $index ] );
				array_unshift( $terms, $primary_term );
				break;
			}
		}

		return $terms;
	}

	/**
	 * Hide rank math meta keys
	 *
	 * @param bool   $is_protected Whether the key is considered protected.
	 * @param string $meta_key     Meta key.
	 *
	 * @return bool
	 */
	public function hide_rank_math_meta( $is_protected, $meta_key ) {
		return Str::starts_with( 'rank_math_', $meta_key ) ? true : $is_protected;
	}

	/**
	 * Filters the permalink for a post of a custom post type.
	 *
	 * @param string  $post_link The post's permalink.
	 * @param WP_Post $post      The post in question.
	 * @param object  $taxonomy  The post taxonomy.
	 */
	private function sanitize_post_type_link( &$post_link, $post, $taxonomy ) {
		$find = "%{$taxonomy}%";
		if ( ! Str::contains( $find, $post_link ) ) {
			return;
		}

		$primary_term = $this->get_primary_term( $taxonomy, $post->ID );
		if ( false !== $primary_term ) {
			// Get the hierarchical terms.
			$parents = $this->get_hierarchical_link( $primary_term );

			// Replace the placeholder rewrite tag with hierarchical terms.
			$post_link = str_replace( $find, $parents, $post_link );
		}
	}

	/**
	 * Get chain of hierarchical links.
	 *
	 * @param WP_Term|WP_Error $term The term in question.
	 *
	 * @return string
	 */
	private function get_hierarchical_link( $term ) {
		if ( is_wp_error( $term ) ) {
			return $term->slug;
		}

		$chain = [];
		$name  = $term->slug;
		if ( $term->parent && ( $term->parent !== $term->term_id ) ) {
			$chain[] = $this->get_hierarchical_link( get_term( $term->parent, $term->taxonomy ) );
		}

		$chain[] = $name;
		return implode( '/', $chain );
	}

	/**
	 * Get primary term of the post.
	 *
	 * @param string $taxonomy Taxonomy name.
	 * @param int    $post_id  Post ID.
	 *
	 * @return object|false Primary term on success, false if there are no terms, WP_Error on failure.
	 */
	private function get_primary_term( $taxonomy, $post_id ) {
		// Early Bail if Primary taxonomy is not enabled on the site.
		$post_type = get_post_type( $post_id );
		if ( empty( $post_type ) || ! Helper::get_settings( 'titles.pt_' . $post_type . '_primary_taxonomy', false ) ) {
			return false;
		}

		$primary = Helper::get_post_meta( "primary_{$taxonomy}", $post_id );
		if ( ! $primary ) {
			return false;
		}

		// Early Bail if Primary term is not assigned to the post.
		$terms = wp_get_post_terms( $post_id, $taxonomy, [ 'fields' => 'ids' ] );
		if ( empty( $terms ) || ! in_array( absint( $primary ), $terms, true ) ) {
			return false;
		}

		$primary = get_term( $primary, $taxonomy );
		return is_wp_error( $primary ) || empty( $primary ) ? false : $primary;
	}
}
PK     “ŠU]@'  '  %  includes/class-frontend-seo-score.phpnu „[µü¤        <?php
/**
 * Show SEO Score on the front end.
 *
 * @since      0.9.0
 * @package    RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\KB;
use RankMath\Post;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Traits\Shortcode;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Frontend_SEO_Score class.
 */
class Frontend_SEO_Score {

	use Hooker;
	use Shortcode;

	/**
	 * SEO Score.
	 *
	 * @var array
	 */
	private $score = 0;

	/**
	 * Flag to only add CSS once.
	 *
	 * @var array
	 */
	private $css_added = false;

	/**
	 * Convenience method to output as string.
	 *
	 * @return string
	 */
	public function __toString() {
		return $this->get_output();
	}

	/**
	 * The Constructor
	 *
	 * @codeCoverageIgnore
	 */
	public function __construct() {
		$this->filter( 'the_content', 'insert_score' );

		$this->add_shortcode( 'rank_math_seo_score', 'shortcode' );
	}

	/**
	 * Insert score before/after content.
	 *
	 * @param string $content Original post content.
	 * @return string $content New content.
	 */
	public function insert_score( $content ) {

		if ( ! $this->score_enabled() ) {
			return $content;
		}

		$score_location = Helper::get_settings( 'general.frontend_seo_score_position' );
		if ( 'custom' === $score_location ) {
			return $content;
		}

		if ( 'top' === $score_location || 'both' === $score_location ) {
			$content = $this->get_output( [ 'class' => 'before-content' ] ) . $content;
		}

		if ( 'bottom' === $score_location || 'both' === $score_location ) {
			$content = $content . $this->get_output( [ 'class' => 'after-content' ] );
		}

		return $content;
	}

	/**
	 * Check if front end SEO score is enabled for this post.
	 *
	 * @return bool
	 */
	public function score_enabled() {
		/*
		 * The loop_start check ensures this only runs after wp_head.
		 */
		if ( is_front_page() || ! is_singular() || ! did_action( 'loop_start' ) ) {
			return false;
		}

		$post_type     = get_post_type();
		$post_id       = get_the_ID();
		$score_enabled = Helper::get_settings( 'general.frontend_seo_score' )
			&& Helper::is_score_enabled()
			&& in_array( $post_type, (array) Helper::get_settings( 'general.frontend_seo_score_post_types' ), true )
			&& get_post_meta( $post_id, 'rank_math_dont_show_seo_score', true ) !== 'on';

		return $score_enabled;
	}

	/**
	 * Get the SEO score HTML.
	 *
	 * @param array $args Arguments.
	 * @return string
	 */
	public function get_output( $args = [] ) {
		$args = $this->do_filter(
			'frontend/seo_score/args',
			wp_parse_args(
				$args,
				[
					'template' => Helper::get_settings( 'general.frontend_seo_score_template' ),
					'backlink' => Helper::get_settings( 'general.support_rank_math' ),
					'post_id'  => '0',
					'class'    => '',
				]
			)
		);

		$score  = (int) $this->get_score( $args['post_id'] );
		$rating = $this->get_rating( $score );

		if ( ! $score ) {
			return $this->do_filter( 'frontend/seo_score/html', '', $args, $score );
		}

		// If template is empty we output $score value directly.
		$html     = $score;
		$backlink = '<a href="' . KB::get( 'seo-suite', 'Frontend SEO score' ) . '" target="_blank" rel="noopener">Rank Math SEO</a>';
		if ( ! empty( $args['template'] ) ) {
			ob_start();

			?>
			<div class="rank-math-seo-score template-<?php echo sanitize_html_class( $args['template'], 'circle' ); ?> <?php echo sanitize_html_class( $rating, 'unknown' ); ?>-seo <?php echo esc_attr( $args['class'] ); ?>">

				<span class="score">
					<?php echo esc_html( absint( $score ) ); ?>
					<span class="outof">
						/ 100
					</span>
				</span>

				<?php if ( $args['backlink'] ) : ?>
					<div class="backlink">
						<span class="poweredby">
							<?php
							echo wp_kses_post(
								sprintf(
									/* translators: %s is a Rank Math link. */
									__( 'Powered by %s', 'seo-by-rank-math' ),
									$this->do_filter( 'frontend/seo_score/backlink', $backlink )
								)
							);
							?>
						</span>
					</div>
				<?php endif; ?>

				<span class="label">
					<?php echo esc_html__( 'SEO Score', 'seo-by-rank-math' ); ?>
				</span>

			</div>
			<?php
			$this->add_css();

			$html = ob_get_clean();
		}

		return $this->do_filter( 'frontend/seo_score/html', $html, $args, $score );
	}

	/**
	 * Turn numeric score into textual rating.
	 *
	 * @param int $score SEO Score.
	 * @return string
	 */
	public function get_rating( $score ) {
		$hash = [
			'unknown' => 0,
			'bad'     => 50,
			'good'    => 80,
			'great'   => 100,
		];

		foreach ( $hash as $key => $value ) {
			if ( $score <= $value ) {
				return $key;
			}
		}

		return array_keys( $hash )[0];
	}

	/**
	 * Get the SEO score for given post.
	 *
	 * @param int $post_id Post ID.
	 * @return int
	 */
	public function get_score( $post_id = 0 ) {
		global $post;
		if ( empty( $post_id ) ) {
			$post_id = $post->ID;
		}

		return get_post_meta( $post_id, 'rank_math_seo_score', true );
	}

	/**
	 * Show field check callback.
	 *
	 * @return boolean
	 */
	public static function show_on() {
		// Early Bail if is sttic homepage.
		if ( Admin_Helper::is_home_page() ) {
			return false;
		}

		$post_type = get_post_type();
		return Helper::get_settings( 'general.frontend_seo_score' ) &&
			in_array( $post_type, (array) Helper::get_settings( 'general.frontend_seo_score_post_types' ), true );
	}

	/**
	 * Shortcode output.
	 *
	 * @param array $atts Shortcode attributes.
	 */
	public function shortcode( $atts ) {
		if ( ! $this->score_enabled() ) {
			return '';
		}

		$atts = shortcode_atts(
			[
				'class' => 'as-shortcode',
			],
			$atts,
			'rank-math-seo-score'
		);

		return $this->get_output( $atts );
	}

	/**
	 * Add CSS inline, once.
	 */
	public function add_css() {
		if ( $this->css_added ) {
			return;
		}
		?>
		<style type="text/css">
		.rank-math-seo-score{font-family:sans-serif;position:relative;display:inline-block;height:96px;width:96px;margin:20px 20px 30px;text-align:center;color:#fff;border:none;border-radius:50%;background:#eee;-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.before-content{margin:0 0 30px 20px;float:right}.rank-math-seo-score.after-content{margin:20px 0 30px 20px}.rank-math-seo-score.as-shortcode{display:inline-block}.rank-math-seo-score .label{font-size:12px;position:absolute;top:100px;left:0;display:block;width:100%;color:#979ea5}.rank-math-seo-score .score{font-size:42px;font-weight:bold;line-height:42px;display:block}.rank-math-seo-score .outof{font-size:12px;font-weight:normal;line-height:12px;display:block;color:rgba(255,255,255,0.7)}.rank-math-seo-score .backlink{font-size:12px;position:absolute;top:-94px;left:-12px;display:block;visibility:hidden;width:120px;padding:8px 10px;-webkit-transition:.25s all ease;transition:.25s all ease;-webkit-transition-delay:.25s;transition-delay:.25s;opacity:0;color:#a8a8a8;border:none;border-radius:8px;background:#fff;-webkit-box-shadow:0 4px 14px rgba(60,60,90,0.2);box-shadow:0 4px 12px rgba(60,60,90,0.15)}.rank-math-seo-score .backlink:after{position:absolute;bottom:-8px;left:calc(50% - 7px);width:0;height:0;content:'';border-width:8px 7.5px 0 7.5px;border-style:solid;border-color:#fff transparent transparent transparent}.rank-math-seo-score:hover .backlink{top:-74px;visibility:visible;opacity:1}.rank-math-seo-score .poweredby{font-size:13px;color:#a8a8a8}.rank-math-seo-score .poweredby a{display:block;font-weight:normal;text-decoration:none;color:#6372b6;border:none}.rank-math-seo-score.unknown-seo{background:#eee;background:linear-gradient(135deg, #b9b9b9 0%, #989898 100%);-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.bad-seo{background:#f8b0a2;background:linear-gradient(135deg, #f8b0a2 0%, #f1938c 100%);-webkit-box-shadow:1px 1px 1px #e48982;box-shadow:1px 1px 1px #e48982;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8b0a2', endColorstr='#f1938c',GradientType=1 )}.rank-math-seo-score.good-seo{background:#fdd07a;background:linear-gradient(135deg, #fdd07a 0%, #fcbe6c 100%);-webkit-box-shadow:1px 1px 1px #efb463;box-shadow:1px 1px 1px #efb463;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdd07a', endColorstr='#fcbe6c',GradientType=1 )}.rank-math-seo-score.great-seo{background:#99d484;background:linear-gradient(135deg, #99d484 0%, #83c97f 100%);-webkit-box-shadow:1px 1px 1px #5ba857;box-shadow:1px 1px 1px #5ba857;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#99d484', endColorstr='#83c97f',GradientType=1 )}.rank-math-seo-score.template-circle .score{margin-top:22px !important}.rank-math-seo-score.template-square{height:80px;width:110px;border-radius:12px}.rank-math-seo-score.template-square .score{margin:10px 12px;text-align:left}.rank-math-seo-score.template-square .outof{display:inline-block;margin-left:-8px}.rank-math-seo-score.template-square .label{font-size:13px;top:52px;left:14px;text-align:left;color:rgba(255,255,255,0.8)}.rank-math-seo-score.template-square .backlink{left:-5px}.rank-math-seo-score.template-square.before-content{margin-bottom:20px}.rank-math-seo-score.template-square.after-content{margin-bottom:0}.theme-twentytwenty .rank-math-seo-score{width:96px !important}.theme-twentytwenty .rank-math-seo-score.template-square{width:110px !important}.theme-twentytwenty .rank-math-seo-score.before-content{margin:0 auto 30px auto;display:inherit;float:none}.theme-twentytwenty .rank-math-seo-score.template-circle .score,.theme-twentytwenty .rank-math-seo-score.template-square .score{transform:translateY(22px)}
		</style>
		<?php
		$this->css_added = true;
	}

	/**
	 * Settings field default callback.
	 */
	public static function post_types_field_default() {
		$seo_score  = Helper::get_settings( 'general.frontend_seo_score' );
		$post_types = Helper::get_settings( 'general.frontend_seo_score_post_types' );

		if ( 'on' === $seo_score && '' === $post_types ) {
			return [];
		}

		return [ 'post' ];
	}
}
PK     “ŠU]+Žåã‘  ‘  $  includes/class-thumbnail-overlay.phpnu „[µü¤        <?php
/**
 * Thumbnails with overlays.
 *
 * @since      1.0.82
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;
use RankMath\Helpers\Attachment;

defined( 'ABSPATH' ) || exit;

/**
 * Thumbnail_Overlay class.
 */
class Thumbnail_Overlay {

	use Hooker;

	/**
	 * Image module to be used (gd or imagick).
	 *
	 * @var string
	 */
	private $image_module = '';

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->image_module = extension_loaded( 'imagick' ) ? 'imagick' : 'gd';

		$this->action( 'wp_ajax_rank_math_overlay_thumb', 'generate_overlay_thumbnail' );
		$this->action( 'wp_ajax_nopriv_rank_math_overlay_thumb', 'generate_overlay_thumbnail' );
	}

	/**
	 * AJAX function to generate overlay image. Used in social thumbnails.
	 */
	public function generate_overlay_thumbnail() {
		$thumbnail_id = Param::request( 'id', 0, FILTER_VALIDATE_INT );
		$type         = Param::request( 'type', 'play' );
		$secret       = Param::request( 'hash', '' );
		if ( ! $secret ) {
			$secret = Param::request( 'secret', '' );
		}

		$choices = Helper::choices_overlay_images();
		if ( ! isset( $choices[ $type ] ) ) {
			die();
		}
		$overlay_image = $choices[ $type ]['path'];
		$image         = Attachment::get_scaled_image_path( $thumbnail_id, 'large' );

		if ( ! $this->is_secret_valid( $thumbnail_id, $type, $secret ) ) {
			die();
		}

		// If 'large' thumbnail is not found, fall back to full size.
		if ( empty( $image ) ) {
			$image = Attachment::get_scaled_image_path( $thumbnail_id, 'full' );
		}

		$position = $choices[ $type ]['position'];
		$this->create_overlay_image( $image, $overlay_image, $position );

		die();
	}

	/**
	 * Calculate margins for a GD resource based on position string.
	 *
	 * @param string   $position Position string.
	 * @param resource $image    GD image resource identifier.
	 * @param resource $stamp    GD image resource identifier.
	 *
	 * @return array
	 */
	private function get_position_margins_gd( $position, $image, $stamp ) {
		$margins = [
			'middle_center' => [],
		];

		$margins['middle_center']['top']  = round( abs( imagesy( $image ) - imagesy( $stamp ) ) / 2 );
		$margins['middle_center']['left'] = round( abs( imagesx( $image ) - imagesx( $stamp ) ) / 2 );

		$default_margins = $margins['middle_center'];
		$margins         = $this->do_filter( 'social/overlay_image_positions', $margins, $image, $stamp, 'gd' );

		if ( ! isset( $margins[ $position ] ) ) {
			return $default_margins;
		}

		return $margins[ $position ];
	}

	/**
	 * Calculate margins for an Imagick object based on position string.
	 *
	 * @param string $position Position string.
	 * @param object $image    Imagick object.
	 * @param object $stamp    Imagick object.
	 *
	 * @return array
	 */
	private function get_position_margins_imagick( $position, $image, $stamp ) {
		$margins = [
			'middle_center' => [],
		];

		$margins['middle_center']['top']  = round( abs( $image->getImageHeight() - $stamp->getImageHeight() ) / 2 );
		$margins['middle_center']['left'] = round( abs( $image->getImageWidth() - $stamp->getImageWidth() ) / 2 );

		$default_margins = $margins['middle_center'];
		$margins         = $this->do_filter( 'social/overlay_image_positions', $margins, $image, $stamp, 'imagick' );

		if ( ! isset( $margins[ $position ] ) ) {
			return $default_margins;
		}

		return $margins[ $position ];
	}

	/**
	 * Get correct imagecreatef based on image file.
	 *
	 * @param string $image_file Image file.
	 *
	 * @return string New generated image
	 */
	private function get_imagecreatefrom_method( $image_file ) {
		$image_format = pathinfo( $image_file, PATHINFO_EXTENSION );
		if ( ! in_array( $image_format, [ 'jpg', 'jpeg', 'gif', 'png' ], true ) ) {
			return '';
		}
		if ( 'jpg' === $image_format ) {
			$image_format = 'jpeg';
		}

		return 'imagecreatefrom' . $image_format;
	}

	/**
	 * Create Overlay Image.
	 *
	 * @param string $image_file    The permalink generated for this post by WordPress.
	 * @param string $overlay_image The ID of the post.
	 * @param string $position      Image position.
	 */
	private function create_overlay_image( $image_file, $overlay_image, $position ) {
		wp_raise_memory_limit( 'image' );

		/**
		 * Filter: 'rank_math/social/create_overlay_image' - Change the create_overlay_image arguments.
		 */
		$args = $this->do_filter( 'social/create_overlay_image', compact( 'image_file', 'overlay_image', 'position' ) );
		extract( $args ); // phpcs:ignore

		if ( empty( $image_file ) || empty( $overlay_image ) ) {
			return;
		}

		$method = 'generate_image_' . $this->image_module;
		$this->$method( $image_file, $overlay_image, $position );
		die();
	}

	/**
	 * Generate image using the GD module.
	 *
	 * @param string $image_file    The permalink generated for this post by WordPress.
	 * @param string $overlay_image The ID of the post.
	 * @param string $position      Image position.
	 */
	private function generate_image_gd( $image_file, $overlay_image, $position ) {
		$imagecreatefrom         = $this->get_imagecreatefrom_method( $image_file );
		$overlay_imagecreatefrom = $this->get_imagecreatefrom_method( $overlay_image );
		if ( ! $imagecreatefrom || ! $overlay_imagecreatefrom ) {
			return;
		}

		$stamp = $overlay_imagecreatefrom( $overlay_image );
		$image = $imagecreatefrom( $image_file );

		if ( ! $image || ! $stamp ) {
			return;
		}

		$stamp_width  = imagesx( $stamp );
		$stamp_height = imagesy( $stamp );

		$img_width = imagesx( $image );

		if ( $stamp_width > $img_width ) {
			$stamp = imagescale( $stamp, $img_width );
		}

		$margins = $this->get_position_margins_gd( $position, $image, $stamp );

		// Copy the stamp image onto our photo using the margin offsets and the photo width to calculate positioning of the stamp.
		imagecopy( $image, $stamp, $margins['left'], $margins['top'], 0, 0, $stamp_width, $stamp_height );

		// Output and free memory.
		header( 'Content-type: image/png' );
		imagepng( $image );
		imagedestroy( $image );
	}

	/**
	 * Generate image using the Imagick module.
	 *
	 * @param string $image_file    The permalink generated for this post by WordPress.
	 * @param string $overlay_image The ID of the post.
	 * @param string $position      Image position.
	 *
	 * @return void
	 */
	private function generate_image_imagick( $image_file, $overlay_image, $position ) {
		try {
			$stamp = new \Imagick( $overlay_image );
			$image = new \Imagick( $image_file );

			if ( ! $image->valid() || ! $stamp->valid() || ! $image->getImageFormat() || ! $stamp->getImageFormat() ) {
				return;
			}

			// Select the first frame to handle animated images properly.
			if ( is_callable( [ $stamp, 'setIteratorIndex' ] ) ) {
				$stamp->setIteratorIndex( 0 );
			}
			if ( is_callable( [ $image, 'setIteratorIndex' ] ) ) {
				$image->setIteratorIndex( 0 );
			}
		} catch ( \Exception $e ) {
			return;
		}

		$stamp_width = $stamp->getImageWidth();
		$img_width   = $image->getImageWidth();

		if ( $stamp_width > $img_width ) {
			$stamp->resizeImage( $img_width, 0, \Imagick::FILTER_LANCZOS, 1 );
		}

		$margins = $this->get_position_margins_imagick( $position, $image, $stamp );

		// Copy the stamp image onto our photo using the margin offsets and the photo width to calculate positioning of the stamp.
		$image->compositeImage( $stamp, \Imagick::COMPOSITE_OVER, $margins['left'], $margins['top'] );

		// Output.
		header( 'Content-type: image/png' );
		echo $image->getImageBlob(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

		// Free memory.
		$image->clear();
		$image->destroy();

		$stamp->clear();
		$stamp->destroy();
	}

	/**
	 * Check if secret key is valid.
	 *
	 * @param int    $id     The ID of the attachment.
	 * @param string $type   Overlay type.
	 * @param string $secret Secret key.
	 *
	 * @return boolean
	 */
	private function is_secret_valid( $id, $type, $secret ) {
		return md5( $id . $type . wp_salt( 'nonce' ) ) === $secret;
	}
}
PK     “ŠU]bè2d¼  ¼    includes/class-post.phpnu „[µü¤        <?php
/**
 * The Post Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath;

use WP_Post;

defined( 'ABSPATH' ) || exit;

/**
 * Post class.
 */
class Post extends Metadata {

	/**
	 * Type of object metadata is for (e.g., comment, post, or user).
	 *
	 * @var string
	 */
	protected $meta_type = 'post';

	/**
	 * Retrieve Post instance.
	 *
	 * @param  WP_Post|object|int $post Post to get either (int) post ID or (WP_Post|object) post.
	 * @return Post|false Post object, false otherwise.
	 */
	public static function get( $post = 0 ) {
		$post = self::get_post_id( $post );
		if ( false === $post ) {
			return null;
		}

		if ( isset( self::$objects[ $post ] ) && 'post' === self::$objects[ $post ]->meta_type ) {
			return self::$objects[ $post ];
		}

		$_post                  = new self( WP_Post::get_instance( $post ) );
		$_post->object_id       = $post;
		self::$objects[ $post ] = $_post;

		return $_post;
	}

	/**
	 * Get the post ID.
	 *
	 * @param  integer $post Post ID.
	 * @return integer
	 */
	private static function get_post_id( $post = 0 ) {
		if ( is_object( $post ) && isset( $post->ID ) ) {
			return $post->ID;
		}

		$post = absint( $post );
		if ( $post > 0 ) {
			return $post;
		}

		if ( 0 === $post ) {
			$post = get_post();
		}

		return ! is_null( $post ) ? $post->ID : false;
	}

	/**
	 * Get a post meta value.
	 *
	 * @param  string  $key           Value to get, without prefix.
	 * @param  integer $post_id       ID of the post.
	 * @param  string  $default_value Default value to use when metadata does not exists.
	 * @return mixed
	 */
	public static function get_meta( $key, $post_id = 0, $default_value = '' ) {
		$post = self::get( $post_id );

		if ( is_null( $post ) || ! $post->is_found() || 'auto-draft' === $post->post_status ) {
			return '';
		}

		return $post->get_metadata( $key, $default_value );
	}

	/**
	 * Get the ID of the current page.
	 *
	 * @return int The ID of the page.
	 */
	public static function get_page_id() {
		/**
		 * Filter: Allow changing the page ID before we process anything.
		 *
		 * @param bool|int $page_id The default page ID.
		 */
		$page_id = apply_filters( 'rank_math/pre_simple_page_id', false );
		if ( false !== $page_id ) {
			return $page_id;
		}

		if ( \is_singular() ) {
			return get_the_ID();
		}

		if ( self::is_posts_page() ) {
			return get_option( 'page_for_posts' );
		}

		if ( self::is_shop_page() ) {
			return self::get_shop_page_id();
		}

		/**
		 * Filter: Allow changing the page ID.
		 *
		 * @param int $page_id The page ID.
		 */
		return apply_filters( 'rank_math/simple_page_id', 0 );
	}

	/**
	 * Returns the ID of the selected WooCommerce shop page.
	 *
	 * @return int The ID of the Shop page.
	 */
	public static function get_shop_page_id() {
		static $shop_page_id;
		if ( ! $shop_page_id ) {
			$shop_page_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'shop' ) : ( -1 );
		}

		return $shop_page_id;
	}

	/**
	 * Checks if the current page is a simple page.
	 *
	 * @return bool Whether the current page is a simple page.
	 */
	public static function is_simple_page() {
		return self::get_page_id() > 0;
	}

	/**
	 * Checks if the current page is the WooCommerce "Shop" page.
	 *
	 * @return bool Whether the current page is the shop page.
	 */
	public static function is_shop_page() {
		if ( function_exists( 'is_shop' ) && function_exists( 'wc_get_page_id' ) ) {
			return \is_shop() && ! \is_search();
		}

		return false;
	}

	/**
	 * Checks if the current page is one of the WooCommerce pages: Cart/Account/Checkout.
	 *
	 * @return bool Whether the current page is a WooCommerce page.
	 */
	public static function is_woocommerce_page() {
		if ( Helper::is_woocommerce_active() ) {
			return \is_cart() || \is_checkout() || \is_account_page();
		}

		return false;
	}

	/**
	 * Check whether this is the homepage and if it shows the posts.
	 *
	 * @return bool
	 */
	public static function is_home_posts_page() {
		return ( \is_home() && 'posts' === get_option( 'show_on_front' ) );
	}

	/**
	 * Check whether this is the static frontpage.
	 *
	 * @return bool
	 */
	public static function is_home_static_page() {
		return ( \is_front_page() && 'page' === get_option( 'show_on_front' ) && \is_page( get_option( 'page_on_front' ) ) );
	}

	/**
	 * Check if this is the posts page and that it's not the frontpage.
	 *
	 * @return bool
	 */
	public static function is_posts_page() {
		return ( \is_home() && 'page' === get_option( 'show_on_front' ) );
	}
}
PK     “ŠU]Sœ¦C  C  "  includes/class-data-encryption.phpnu „[µü¤        <?php
/**
 * This class handles the encryption/descryption of sensitive user data, like
 * the Rank Math API key.
 *
 * Credits to Felix Arntz @ https://felix-arntz.me/
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

defined( 'ABSPATH' ) || exit;

/**
 * The Data Encryption class.
 */
class Data_Encryption {

	/**
	 * Encryption available or not.
	 *
	 * @var bool
	 */
	private static $encryption_possible = null;

	/**
	 * Get encryption key.
	 *
	 * @return string Key.
	 */
	public static function get_key() {
		if ( defined( 'RANK_MATH_ENCRYPTION_KEY' ) && '' !== RANK_MATH_ENCRYPTION_KEY ) {
			return RANK_MATH_ENCRYPTION_KEY;
		}

		if ( defined( 'LOGGED_IN_KEY' ) && '' !== LOGGED_IN_KEY ) {
			return LOGGED_IN_KEY;
		}

		return '';
	}

	/**
	 * Get salt.
	 *
	 * @return string Salt.
	 */
	public static function get_salt() {
		if ( defined( 'RANK_MATH_ENCRYPTION_SALT' ) && '' !== RANK_MATH_ENCRYPTION_SALT ) {
			return RANK_MATH_ENCRYPTION_SALT;
		}

		if ( defined( 'LOGGED_IN_SALT' ) && '' !== LOGGED_IN_SALT ) {
			return LOGGED_IN_SALT;
		}

		return '';
	}

	/**
	 * Encrypt data.
	 *
	 * @param  mixed $value Original string.
	 * @return string       Encrypted string.
	 */
	public static function encrypt( $value ) {
		if ( ! self::is_available() ) {
			return $value;
		}

		$method  = 'aes-256-ctr';
		$ciphers = openssl_get_cipher_methods();
		if ( ! in_array( $method, $ciphers, true ) ) {
			$method = $ciphers[0];
		}

		$ivlen = openssl_cipher_iv_length( $method );
		$iv    = openssl_random_pseudo_bytes( $ivlen );

		$raw_value = openssl_encrypt( $value . self::get_salt(), $method, self::get_key(), 0, $iv );
		if ( ! $raw_value ) {
			return $value;
		}

		return base64_encode( $iv . $raw_value );  // phpcs:ignore -- Verified as safe usage.
	}

	/**
	 * Decrypt string.
	 *
	 * @param  string $raw_value Encrypted string.
	 * @return string            Decrypted string.
	 */
	public static function decrypt( $raw_value ) {
		if ( ! self::is_available() ) {
			return $raw_value;
		}

		$method  = 'aes-256-ctr';
		$ciphers = openssl_get_cipher_methods();
		if ( ! in_array( $method, $ciphers, true ) ) {
			$method = $ciphers[0];
		}

		$raw_value = base64_decode( $raw_value, true );  // phpcs:ignore -- Verified as safe usage.

		$ivlen = openssl_cipher_iv_length( $method );
		$iv    = substr( $raw_value, 0, $ivlen );

		$raw_value = substr( $raw_value, $ivlen );

		if ( ! $raw_value || strlen( $iv ) !== $ivlen ) {
			return $raw_value;
		}

		$salt = self::get_salt();

		$value = openssl_decrypt( $raw_value, $method, self::get_key(), 0, $iv );
		if ( ! $value || substr( $value, - strlen( $salt ) ) !== $salt ) {
			return $raw_value;
		}

		return substr( $value, 0, - strlen( $salt ) );
	}

	/**
	 * Recursively encrypt array of strings.
	 *
	 * @param  mixed $data Original strings.
	 * @return string       Encrypted strings.
	 */
	public static function deep_encrypt( $data ) {
		if ( is_array( $data ) ) {
			$encrypted = [];
			foreach ( $data as $key => $value ) {
				$encrypted[ self::encrypt( $key ) ] = self::deep_encrypt( $value );
			}

			return $encrypted;
		}

		return self::encrypt( $data );
	}

	/**
	 * Recursively decrypt array of strings.
	 *
	 * @param  string $data Encrypted strings.
	 * @return string       Decrypted strings.
	 */
	public static function deep_decrypt( $data ) {
		if ( is_array( $data ) ) {
			$decrypted = [];
			foreach ( $data as $key => $value ) {
				$decrypted[ self::decrypt( $key ) ] = self::deep_decrypt( $value );
			}

			return $decrypted;
		}

		return self::decrypt( $data );
	}

	/**
	 * Check if OpenSSL is available and encryption is not disabled with filter.
	 *
	 * @return bool Whether encryption is possible or not.
	 */
	public static function is_available() {
		static $encryption_possible;
		if ( null === $encryption_possible ) {
			$encryption_possible = extension_loaded( 'openssl' ) && apply_filters( 'rank_math/admin/sensitive_data_encryption', true ) && self::get_key() && self::get_salt();
		}

		return (bool) $encryption_possible;
	}
}
PK     “ŠU]Ì§·)D  D    includes/cli/class-commands.phpnu „[µü¤        <?php
/**
 * Rank Math core CLI commands.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\WP_CLI
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\CLI;

use WP_CLI;
use WP_CLI_Command;
use RankMath\Helper;
use RankMath\Sitemap\Cache;
use RankMath\Sitemap\Sitemap_XML;

defined( 'ABSPATH' ) || exit;

/**
 * Commands class.
 */
class Commands extends WP_CLI_Command {

	/**
	 * Generate the sitemap.
	 *
	 * @param array $args Arguments passed.
	 */
	public static function sitemap_generate( $args ) {
		$sitemap = Helper::get_module( 'sitemap' );
		if ( false === $sitemap ) {
			WP_CLI::error( 'Sitemap module not active.' );
			return;
		}

		Cache::invalidate_storage();
		$generator = new Sitemap_XML( '1' );
		$generator->get_output();

		WP_CLI::success( 'Sitemap generated.' );
	}
}
PK     “ŠU](Sþ£—]  —]    includes/class-installer.phpnu „[µü¤        <?php
/**
 * Plugin activation and deactivation functionality.
 *
 * This class defines all code necessary to run during the plugin's activation.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Admin\Watcher;
use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Role_Manager\Capability_Manager;

defined( 'ABSPATH' ) || exit;

/**
 * Installer class.
 */
class Installer {

	use Hooker;

	/**
	 * Bind all events.
	 */
	public function __construct() {
		register_activation_hook( RANK_MATH_FILE, [ $this, 'activation' ] );
		register_deactivation_hook( RANK_MATH_FILE, [ $this, 'deactivation' ] );

		$this->action( 'wp', 'create_cron_jobs' );
		$this->action( 'wp_initialize_site', 'initialize_site' );
		$this->filter( 'wpmu_drop_tables', 'on_delete_blog' );
	}

	/**
	 * Do things when activating Rank Math.
	 *
	 * @param bool $network_wide Whether the plugin is being activated network-wide.
	 */
	public function activation( $network_wide = false ) {
		if ( ! is_multisite() || ! $network_wide ) {
			$this->activate();
			return;
		}

		$this->network_activate_deactivate( true );
	}

	/**
	 * Do things when deactivating Rank Math.
	 *
	 * @param bool $network_wide Whether the plugin is being activated network-wide.
	 */
	public function deactivation( $network_wide = false ) {
		if ( ! is_multisite() || ! $network_wide ) {
			$this->deactivate();
			return;
		}

		$this->network_activate_deactivate( false );
	}

	/**
	 * Fired when a new site is activated with a WPMU environment.
	 *
	 * @param WP_Site $site The new site's object.
	 */
	public function initialize_site( $site ) {
		switch_to_blog( $site->blog_id );
		$this->activate();
		restore_current_blog();
	}

	/**
	 * Uninstall tables when MU blog is deleted.
	 *
	 * @param  array $tables List of tables that will be deleted by WP.
	 * @return array
	 */
	public function on_delete_blog( $tables ) {
		global $wpdb;

		$tables[] = $wpdb->prefix . 'rank_math_404_logs';
		$tables[] = $wpdb->prefix . 'rank_math_redirections';
		$tables[] = $wpdb->prefix . 'rank_math_redirections_cache';
		$tables[] = $wpdb->prefix . 'rank_math_internal_links';
		$tables[] = $wpdb->prefix . 'rank_math_internal_meta';
		$tables[] = $wpdb->prefix . 'rank_math_analytics_gsc';
		$tables[] = $wpdb->prefix . 'rank_math_analytics_objects';
		$tables[] = $wpdb->prefix . 'rank_math_analytics_inspections';

		return $tables;
	}

	/**
	 * Run network-wide activation/deactivation of the plugin.
	 *
	 * @param bool $activate True for plugin activation, false for de-activation.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 */
	private function network_activate_deactivate( $activate ) {
		global $wpdb;

		$blog_ids = DB_Helper::get_col( "SELECT blog_id FROM $wpdb->blogs WHERE archived = '0' AND spam = '0' AND deleted = '0'" );
		if ( empty( $blog_ids ) ) {
			return;
		}

		foreach ( $blog_ids as $blog_id ) {
			$func = true === $activate ? 'activate' : 'deactivate';

			switch_to_blog( $blog_id );
			$this->$func();
			restore_current_blog();
		}
	}

	/**
	 * Plugin activation callback.
	 */
	private function activate() {
		// Init to use the common filters.
		new \RankMath\Defaults();

		$current_version    = get_option( 'rank_math_version', null );
		$current_db_version = get_option( 'rank_math_db_version', null );

		$this->create_options();
		$this->set_capabilities();
		$this->create_cron_jobs();

		if ( is_null( $current_version ) && is_null( $current_db_version ) ) {
			set_transient( '_rank_math_activation_redirect', 1, 30 );
		}

		// Update to latest version.
		update_option( 'rank_math_version', rank_math()->version );
		update_option( 'rank_math_db_version', rank_math()->db_version );

		// Clear rollback option if necessary.
		if ( rank_math()->version !== get_option( 'rank_math_rollback_version' ) ) {
			delete_option( 'rank_math_rollback_version' );
		}

		// Save install date.
		if ( false === boolval( get_option( 'rank_math_install_date' ) ) ) {
			update_option( 'rank_math_install_date', Helper::get_current_time() );
		}

		// Activate Watcher.
		$watcher = new Watcher();
		$watcher->check_activated_plugin();
		$watcher->check_search_engine_visibility( ! get_option( 'blog_public' ) );

		$this->clear_rewrite_rules( true );
		Helper::clear_cache( 'activate' );

		$this->do_action( 'activate' );
	}

	/**
	 * Runs on deactivation of the plugin.
	 */
	private function deactivate() {
		$this->clear_rewrite_rules( false );
		$this->remove_cron_jobs();
		Helper::clear_cache( 'deactivate' );
		Admin_Helper::deregister_user();
		$this->do_action( 'deactivate' );
	}

	/**
	 * Set up the database tables.
	 *
	 * @param mixed $modules Modules to create tables for.
	 * @return void
	 */
	public static function create_tables( $modules = [] ) {
		global $wpdb;

		$tables = [];

		if ( in_array( '404-monitor', $modules, true ) ) {
			$tables['404-monitor'] = [
				'rank_math_404_logs' => "id bigint(20) unsigned NOT NULL auto_increment,
					uri varchar(255) NOT NULL,
					accessed datetime NOT NULL default '0000-00-00 00:00:00',
					times_accessed bigint(20) unsigned NOT NULL default 1,
					referer varchar(255) NOT NULL default '',
					user_agent varchar(255) NOT NULL default '',
					PRIMARY KEY  (id),
					KEY uri (uri(191))",
			];
		}

		if ( in_array( 'redirections', $modules, true ) ) {
			$tables['redirections'] = [
				'rank_math_redirections'       => "id bigint(20) unsigned NOT NULL auto_increment,
					sources longtext CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->charset}_bin NOT NULL,
					url_to text NOT NULL,
					header_code smallint(4) unsigned NOT NULL,
					hits bigint(20) unsigned NOT NULL default '0',
					status varchar(25) NOT NULL default 'active',
					created datetime NOT NULL default '0000-00-00 00:00:00',
					updated datetime NOT NULL default '0000-00-00 00:00:00',
					last_accessed datetime NOT NULL default '0000-00-00 00:00:00',
					PRIMARY KEY  (id),
					KEY status (status),
					KEY idx_rm_status_updated (status, updated)",
				'rank_math_redirections_cache' => "id bigint(20) unsigned NOT NULL auto_increment,
					from_url text CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->charset}_bin NOT NULL,
					redirection_id bigint(20) unsigned NOT NULL,
					object_id bigint(20) unsigned NOT NULL default '0',
					object_type varchar(10) NOT NULL default 'post',
					is_redirected tinyint(1) NOT NULL default '0',
					PRIMARY KEY  (id),
					KEY redirection_id (redirection_id)",
			];
		}

		if ( in_array( 'link-counter', $modules, true ) ) {
			$tables['link-counter'] = [
				'rank_math_internal_links' => 'id bigint(20) unsigned NOT NULL auto_increment,
					url varchar(255) NOT NULL,
					post_id bigint(20) unsigned NOT NULL,
					target_post_id bigint(20) unsigned NOT NULL,
					type varchar(8) NOT NULL,
					PRIMARY KEY  (id),
					KEY link_direction (post_id, type),
					KEY target_post_id (target_post_id)',
				'rank_math_internal_meta'  => 'object_id bigint(20) unsigned NOT NULL,
					internal_link_count int(10) unsigned NULL default 0,
					external_link_count int(10) unsigned NULL default 0,
					incoming_link_count int(10) unsigned NULL default 0,
					PRIMARY KEY  (object_id)',
			];
		}

		$tables     = apply_filters( 'rank_math/admin/create_tables', $tables, $modules );
		$old_schema = self::is_old_schema( $tables );

		if ( $old_schema ) {
			_deprecated_hook(
				'rank_math/admin/create_tables',
				'1.0.253',
				'rank_math/admin/create_tables',
				esc_html__( 'The format of the tables array has changed. Please update your code accordingly.', 'seo-by-rank-math' )
			);
			foreach ( $old_schema as $query ) {
				if ( preg_match( '/CREATE TABLE\s+[`"]?([^`"\s]+)[`"]?/i', $query, $match ) ) {
					$table_name = str_replace( $wpdb->prefix, '', $match[1] );
					$schema     = preg_replace( '/^CREATE TABLE\s+[`"]?[^`"\s]+[`"]?\s*\((.*)\)\s*.+$/is', '$1', $query );

					DB_Helper::create_table( $table_name, $schema );
				}
			}
		}

		foreach ( $tables as $module => $table_group ) {
			foreach ( $table_group as $table_name => $schema ) {
				DB_Helper::create_table( $table_name, $schema );
			}
		}

		/**
		 * Fires after database tables have been created.
		 *
		 * Allows extensions to modify or extend the created tables.
		 *
		 * @param array $tables  The tables that were created.
		 * @param array $modules The modules for which tables were created.
		 */
		do_action( 'rank_math/admin/after_create_tables', $tables, $modules );
	}

	/**
	 * Check if the schema is old style.
	 *
	 * @param array $arr Array of tables.
	 */
	public static function is_old_schema( &$arr ) {
		$schema = [];

		foreach ( array_keys( $arr ) as $key ) {
			if ( is_int( $key ) ) {
				$schema[] = $arr[ $key ];

				unset( $arr[ $key ] );
			}
		}

		return $schema;
	}

	/**
	 * Create options.
	 */
	private function create_options() {
		$this->create_misc_options();
		$this->create_general_options();
		$this->create_titles_sitemaps_options();
		$this->create_instant_indexing_options();
	}

	/**
	 * Create misc options.
	 */
	private function create_misc_options() {
		// Update "known CPTs" list, so we can send notice about new ones later.
		add_option( 'rank_math_known_post_types', Helper::get_accessible_post_types() );

		$modules = [
			'link-counter',
			'analytics',
			'seo-analysis',
			'sitemap',
			'rich-snippet',
			'woocommerce',
			'buddypress',
			'bbpress',
			'acf',
			'web-stories',
			'content-ai',
			'instant-indexing',
			'ai-visibility',
		];

		// Role Manager.
		$users = get_users( [ 'role__in' => [ 'administrator', 'editor', 'author', 'contributor' ] ] );
		if ( count( $users ) > 1 ) {
			$modules[] = 'role-manager';
		}

		// If AMP plugin is installed.
		if ( function_exists( 'is_amp_endpoint' ) || class_exists( 'Better_AMP' ) || class_exists( 'Weeblramp_Api' ) || class_exists( 'AMPHTML' ) ) {
			$modules[] = 'amp';
		}

		// If 404-monitor is active as plugin.
		if ( false !== get_option( 'rank_math_monitor_version', false ) ) {
			$modules[] = '404-monitor';
		}

		add_option( 'rank_math_modules', $modules );
		self::create_tables( $modules );
	}

	/**
	 * Add defaults for general options.
	 */
	private function create_general_options() {
		$post_types = Helper::get_accessible_post_types();
		if ( isset( $post_types['attachment'] ) ) {
			unset( $post_types['attachment'] );
		}

		add_option(
			'rank-math-options-general',
			$this->do_filter(
				'settings/defaults/general',
				[
					'strip_category_base'                 => 'off',
					'attachment_redirect_urls'            => 'on',
					'attachment_redirect_default'         => get_home_url(),
					'nofollow_external_links'             => 'off',
					'nofollow_image_links'                => 'off',
					'new_window_external_links'           => 'on',
					'add_img_alt'                         => 'off',
					'img_alt_format'                      => ' %filename%',
					'add_img_title'                       => 'off',
					'img_title_format'                    => '%title% %count(title)%',
					'breadcrumbs'                         => 'off',
					'breadcrumbs_separator'               => '-',
					'breadcrumbs_home'                    => 'on',
					'breadcrumbs_home_label'              => esc_html__( 'Home', 'seo-by-rank-math' ),
					/* translators: Archive title */
					'breadcrumbs_archive_format'          => esc_html__( 'Archives for %s', 'seo-by-rank-math' ),
					/* translators: Search query term */
					'breadcrumbs_search_format'           => esc_html__( 'Results for %s', 'seo-by-rank-math' ),
					'breadcrumbs_404_label'               => esc_html__( '404 Error: page not found', 'seo-by-rank-math' ),
					'breadcrumbs_ancestor_categories'     => 'off',
					'breadcrumbs_blog_page'               => 'off',
					'404_monitor_mode'                    => 'simple',
					'404_monitor_limit'                   => 100,
					'404_monitor_ignore_query_parameters' => 'on',
					'redirections_header_code'            => '301',
					'redirections_debug'                  => 'off',
					'console_caching_control'             => '90',
					'console_email_reports'               => 'on',
					'console_email_frequency'             => 'monthly',
					'wc_remove_product_base'              => 'off',
					'wc_remove_category_base'             => 'off',
					'wc_remove_category_parent_slugs'     => 'off',
					'rss_before_content'                  => '',
					'rss_after_content'                   => '',
					'wc_remove_generator'                 => 'on',
					'remove_shop_snippet_data'            => 'on',
					'frontend_seo_score'                  => 'off',
					'frontend_seo_score_post_types'       => [ 'post' ],
					'frontend_seo_score_position'         => 'top',
					'setup_mode'                          => 'advanced',
					'content_ai_post_types'               => array_keys( $post_types ),
					'content_ai_country'                  => 'all',
					'content_ai_tone'                     => 'Formal',
					'content_ai_audience'                 => 'General Audience',
					'content_ai_language'                 => Helper::content_ai_default_language(),
					'analytics_stats'                     => 'on',
					'toc_block_title'                     => 'Table of Contents',
					'toc_block_list_style'                => 'ul',
					'llms_post_types'                     => array_keys( $post_types ),
				]
			)
		);
	}

	/**
	 * Add default values.
	 */
	private function create_titles_sitemaps_options() {
		$sitemap = [
			'items_per_page'          => 200,
			'include_images'          => 'on',
			'include_featured_image'  => 'off',
			'exclude_roles'           => $this->get_excluded_roles(),
			'html_sitemap'            => 'on',
			'html_sitemap_display'    => 'shortcode',
			'html_sitemap_sort'       => 'published',
			'html_sitemap_seo_titles' => 'titles',
			'authors_sitemap'         => 'on',
		];
		$titles  = [
			'noindex_empty_taxonomies'   => 'on',
			'title_separator'            => '-',
			'capitalize_titles'          => 'off',
			'twitter_card_type'          => 'summary_large_image',
			'knowledgegraph_type'        => class_exists( 'Easy_Digital_Downloads' ) || class_exists( 'WooCommerce' ) ? 'company' : 'person',
			'knowledgegraph_name'        => get_bloginfo( 'name' ),
			'website_name'               => get_bloginfo( 'name' ),
			'local_business_type'        => 'Organization',
			'local_address_format'       => '{address} {locality}, {region} {postalcode}',
			'opening_hours'              => $this->get_opening_hours(),
			'opening_hours_format'       => 'off',
			'homepage_title'             => '%sitename% %page% %sep% %sitedesc%',
			'homepage_description'       => '',
			'homepage_custom_robots'     => 'off',
			'disable_author_archives'    => 'off',
			'url_author_base'            => 'author',
			'author_custom_robots'       => 'on',
			'author_robots'              => [ 'noindex' ],
			'author_archive_title'       => '%name% %sep% %sitename% %page%',
			'author_add_meta_box'        => 'on',
			'disable_date_archives'      => 'on',
			'date_archive_title'         => '%date% %page% %sep% %sitename%',
			'search_title'               => '%search_query% %page% %sep% %sitename%',
			'404_title'                  => 'Page Not Found %sep% %sitename%',
			'date_archive_robots'        => [ 'noindex' ],
			'noindex_search'             => 'on',
			'noindex_archive_subpages'   => 'off',
			'noindex_password_protected' => 'off',
		];

		$this->create_post_type_options( $titles, $sitemap );
		$this->create_taxonomy_options( $titles, $sitemap );

		add_option( 'rank-math-options-titles', $this->do_filter( 'settings/defaults/titles', $titles ) );
		add_option( 'rank-math-options-sitemap', $this->do_filter( 'settings/defaults/sitemap', $sitemap ) );
	}

	/**
	 * Create post type options.
	 *
	 * @param array $titles  Hold title settings.
	 * @param array $sitemap Hold sitemap settings.
	 */
	private function create_post_type_options( &$titles, &$sitemap ) {
		$post_types = Helper::get_accessible_post_types();
		array_push( $post_types, 'product', 'web-story' );

		$titles['pt_download_default_rich_snippet'] = 'product';
		$titles['author_slack_enhanced_sharing']    = 'on';

		foreach ( $post_types as $post_type ) {
			$defaults = $this->get_post_type_defaults( $post_type );

			$titles[ 'pt_' . $post_type . '_title' ]                = '%title% %sep% %sitename%';
			$titles[ 'pt_' . $post_type . '_description' ]          = '%excerpt%';
			$titles[ 'pt_' . $post_type . '_robots' ]               = $defaults['robots'];
			$titles[ 'pt_' . $post_type . '_custom_robots' ]        = $defaults['is_custom'];
			$titles[ 'pt_' . $post_type . '_default_rich_snippet' ] = $defaults['rich_snippet'];
			$titles[ 'pt_' . $post_type . '_default_article_type' ] = $defaults['article_type'];
			$titles[ 'pt_' . $post_type . '_default_snippet_name' ] = '%seo_title%';
			$titles[ 'pt_' . $post_type . '_default_snippet_desc' ] = '%seo_description%';

			if ( $this->has_archive( $post_type ) ) {
				$titles[ 'pt_' . $post_type . '_archive_title' ] = '%title% %page% %sep% %sitename%';
			}

			// Slack enhanced sharing is off by default, except for posts, pages, products, and downloads.
			$titles[ 'pt_' . $post_type . '_slack_enhanced_sharing' ] = 'off';
			if ( in_array( $post_type, [ 'post', 'page', 'product', 'download' ], true ) ) {
				$titles[ 'pt_' . $post_type . '_slack_enhanced_sharing' ] = 'on';
			}

			if ( in_array( $post_type, [ 'attachment', 'web-story' ], true ) ) {
				$sitemap[ 'pt_' . $post_type . '_sitemap' ]     = 'off';
				$titles[ 'pt_' . $post_type . '_add_meta_box' ] = 'off';
				continue;
			}

			$sitemap[ 'pt_' . $post_type . '_sitemap' ]         = 'on';
			$titles[ 'pt_' . $post_type . '_ls_use_fk' ]        = 'titles';
			$titles[ 'pt_' . $post_type . '_add_meta_box' ]     = 'on';
			$titles[ 'pt_' . $post_type . '_bulk_editing' ]     = 'editing';
			$titles[ 'pt_' . $post_type . '_link_suggestions' ] = 'on';

			// Primary Taxonomy.
			$taxonomy_hash = [
				'post'    => 'category',
				'product' => 'product_cat',
			];

			if ( isset( $taxonomy_hash[ $post_type ] ) ) {
				$titles[ 'pt_' . $post_type . '_primary_taxonomy' ] = $taxonomy_hash[ $post_type ];
			}
		}
	}

	/**
	 * Get robots default for post type.
	 *
	 * @param  string $post_type Post type.
	 * @return array
	 */
	private function get_post_type_defaults( $post_type ) {
		$rich_snippets = [
			'post'      => 'article',
			'page'      => 'article',
			'product'   => 'product',
			'download'  => 'product',
			'web-story' => 'article',
		];

		$defaults = [
			'robots'       => [ 'index' ],
			'is_custom'    => 'off',
			'rich_snippet' => isset( $rich_snippets[ $post_type ] ) ? $rich_snippets[ $post_type ] : 'off',
			'article_type' => 'post' === $post_type ? 'BlogPosting' : 'Article',
		];

		if ( 'attachment' === $post_type ) {
			$defaults['is_custom'] = 'on';
			$defaults['robots']    = [ 'noindex' ];
		}

		return $defaults;
	}

	/**
	 * Check post type has archive.
	 *
	 * @param  string $post_type Post type.
	 * @return bool
	 */
	private function has_archive( $post_type ) {
		$post_type_obj = get_post_type_object( $post_type );
		return ! is_null( $post_type_obj ) && $post_type_obj->has_archive;
	}

	/**
	 * Create post type options.
	 *
	 * @param array $titles  Hold title settings.
	 * @param array $sitemap Hold sitemap settings.
	 */
	private function create_taxonomy_options( &$titles, &$sitemap ) {
		$taxonomies = Helper::get_accessible_taxonomies();
		foreach ( $taxonomies as $taxonomy => $object ) {
			$defaults = $this->get_taxonomy_defaults( $taxonomy );

			$titles[ 'tax_' . $taxonomy . '_title' ]                  = '%term% %sep% %sitename%';
			$titles[ 'tax_' . $taxonomy . '_robots' ]                 = $defaults['robots'];
			$titles[ 'tax_' . $taxonomy . '_add_meta_box' ]           = $defaults['metabox'];
			$titles[ 'tax_' . $taxonomy . '_custom_robots' ]          = $defaults['is_custom'];
			$titles[ 'tax_' . $taxonomy . '_description' ]            = '%term_description%';
			$titles[ 'tax_' . $taxonomy . '_slack_enhanced_sharing' ] = 'on';
			$titles[ 'tax_' . $taxonomy . '_bulk_editing' ]           = 0;

			$sitemap[ 'tax_' . $taxonomy . '_sitemap' ] = 'category' === $taxonomy ? 'on' : 'off';

			if ( substr( $taxonomy, 0, 3 ) === 'pa_' ) {
				$titles[ 'remove_' . $taxonomy . '_snippet_data' ] = 'on';
			}
		}

		$titles['remove_product_cat_snippet_data'] = 'on';
		$titles['remove_product_tag_snippet_data'] = 'on';
	}

	/**
	 * Get robots default for post type.
	 *
	 * @param  string $taxonomy Taxonomy.
	 * @return array
	 */
	private function get_taxonomy_defaults( $taxonomy ) {
		$defaults = [
			'robots'    => [ 'index' ],
			'is_custom' => 'off',
			'metabox'   => 'category' === $taxonomy ? 'on' : 'off',
		];

		if ( in_array( $taxonomy, [ 'post_tag', 'post_format', 'product_tag' ], true ) ) {
			$defaults['is_custom'] = 'on';
			$defaults['robots']    = [ 'noindex' ];
		}

		return $defaults;
	}

	/**
	 * Create capabilities.
	 */
	private function set_capabilities() {
		$admin = get_role( 'administrator' );
		if ( ! is_null( $admin ) ) {
			$admin->add_cap( 'rank_math_edit_htaccess', true );
		}

		Capability_Manager::get()->create_capabilities();
	}

	/**
	 * Create cron jobs.
	 */
	public function create_cron_jobs() {
		$midnight = strtotime( 'tomorrow midnight' );
		foreach ( $this->get_cron_jobs() as $job => $recurrence ) {
			if ( ! wp_next_scheduled( "rank_math/{$job}" ) ) {
				$timestamp = 'content-ai/update_prompts' === $job ? $midnight + wp_rand( 60, 86400 ) : $midnight;
				wp_schedule_event( $timestamp, $this->do_filter( "{$job}_recurrence", $recurrence ), "rank_math/{$job}" );
			}
		}
	}

	/**
	 * Remove cron jobs.
	 */
	private function remove_cron_jobs() {
		foreach ( $this->get_cron_jobs() as $job => $recurrence ) {
			wp_clear_scheduled_hook( "rank_math/{$job}" );
		}
	}

	/**
	 * Get cron jobs.
	 *
	 * @return array
	 */
	private function get_cron_jobs() {
		return [
			'redirection/clean_trashed' => 'daily', // Add cron for cleaning trashed redirects.
			'links/internal_links'      => 'daily', // Add cron for counting links.
			'content-ai/update_prompts' => 'daily', // Add cron for updating the prompts data.
		];
	}

	/**
	 * Get opening hours.
	 *
	 * @return array
	 */
	private function get_opening_hours() {
		$hours = [];
		$days  = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ];
		foreach ( $days as $day ) {
			$hours[] = [
				'day'  => $day,
				'time' => '09:00-17:00',
			];
		}

		return $hours;
	}

	/**
	 * Get roles to exclude.
	 *
	 * @return array
	 */
	private function get_excluded_roles() {
		$roles = Helper::get_roles();
		unset( $roles['administrator'], $roles['editor'], $roles['author'] );

		return array_keys( $roles );
	}

	/**
	 * Clear rewrite rules.
	 *
	 * @param bool $activate True for plugin activation, false for de-activation.
	 */
	private function clear_rewrite_rules( $activate ) {
		if ( is_multisite() && ms_is_switched() ) {
			delete_option( 'rewrite_rules' );
			Helper::schedule_flush_rewrite();
			return;
		}

		// On activation.
		if ( $activate ) {
			Helper::schedule_flush_rewrite();
			return;
		}

		// On deactivation.
		add_action( 'shutdown', 'flush_rewrite_rules' );
	}

	/**
	 * Add defaults for the Instant Indexing module options.
	 *
	 * @return void
	 */
	private function create_instant_indexing_options() {
		add_option(
			'rank-math-options-instant-indexing',
			$this->do_filter(
				'settings/defaults/instant-indexing',
				[
					'bing_post_types' => [ 'post', 'page' ],
				]
			)
		);
	}
}
PK     “ŠU]Sšx÷0  0  #  includes/admin/class-list-table.phpnu „[µü¤        <?php
/**
 * The List Table Base CLass.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_List_Table;
use RankMath\Helpers\Param;

/**
 * List_Table class.
 */
class List_Table extends WP_List_Table {
	/**
	 * Message to be displayed when there are no items.
	 */
	public function no_items() {
		echo isset( $this->_args['no_items'] ) ? wp_kses_post( $this->_args['no_items'] ) : esc_html__( 'No items found.', 'seo-by-rank-math' );
	}

	/**
	 * Get order setting.
	 *
	 * @return string
	 */
	protected function get_order() {
		$order = Param::request( 'order', 'desc' );
		return in_array( $order, [ 'desc', 'asc' ], true ) ? strtoupper( $order ) : 'DESC';
	}

	/**
	 * Get orderby setting.
	 *
	 * @param string $default_value (Optional) Extract order by from request.
	 *
	 * @return string
	 */
	protected function get_orderby( $default_value = 'create_date' ) {
		return Param::get( 'orderby', $default_value, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
	}

	/**
	 * Get search query variable.
	 *
	 * @return bool|string
	 */
	protected function get_search() {
		return Param::request( 's', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
	}

	/**
	 * Set column headers.
	 *
	 * @codeCoverageIgnore
	 */
	protected function set_column_headers() {
		$this->_column_headers = [
			$this->get_columns(),
			[],
			$this->get_sortable_columns(),
		];
	}
}
PK     “ŠU]7ÉÑ¥É  É  (  includes/admin/watcher/class-watcher.phpnu „[µü¤        <?php
/**
 * The conflicting plugin watcher.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;
use RankMath\Helper as GlobalHelper;

defined( 'ABSPATH' ) || exit;

/**
 * Watcher class.
 */
class Watcher implements Runner {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'init', 'maybe_deactivate_plugins' );
		$this->action( 'activated_plugin', 'check_activated_plugin' );
		$this->action( 'deactivated_plugin', 'check_deactivated_plugin' );

		$this->filter( 'wp_helpers_notifications_render', 'deactivate_plugins_link', 10, 3 );
		$this->action( 'update_option_blog_public', 'check_search_engine_visibility' );
	}

	/**
	 * Set/Deactivate conflicting SEO or Sitemap plugins.
	 */
	public function maybe_deactivate_plugins() {
		if ( ! Param::get( 'rank_math_deactivate_plugins' ) ) {
			return;
		}

		if ( ! current_user_can( 'deactivate_plugins' ) ) {
			wp_die( esc_html__( 'Sorry, you are not allowed to deactivate plugins for this site.', 'seo-by-rank-math' ) );
		}

		check_admin_referer( 'rank_math_deactivate_plugins' );

		$type    = Param::get( 'plugin_type', 'seo', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		$allowed = [ 'seo', 'sitemap', 'redirections' ];
		if ( ! in_array( $type, $allowed, true ) ) {
			return;
		}

		$this->deactivate_conflicting_plugins( $type );
	}

	/**
	 * Function to run when new plugin is activated.
	 */
	public static function check_activated_plugin() {
		$set     = [];
		$plugins = get_option( 'active_plugins', [] );

		foreach ( self::get_conflicting_plugins() as $plugin => $group ) {
			if ( ! isset( $set[ $group ] ) && in_array( $plugin, $plugins, true ) ) {
				$set[ $group ] = true;
				self::set_notification( $group );
			}
		}

		if ( in_array( 'wpml-string-translation/plugin.php', $plugins, true ) ) {
			GlobalHelper::remove_notification( 'display_wpml_notice' );
		}
	}

	/**
	 * Function to run when plugin is deactivated.
	 *
	 * @param string $plugin Deactivated plugin path.
	 */
	public function check_deactivated_plugin( $plugin ) {
		$plugins = self::get_conflicting_plugins();
		if ( ! isset( $plugins[ $plugin ] ) ) {
			return;
		}
		$this->remove_notification( $plugins[ $plugin ], $plugin );
	}

	/**
	 * Function to run when Module is enabled/disabled.
	 *
	 * @param string $module Module.
	 * @param string $state  Module state.
	 */
	public static function module_changed( $module, $state ) {
		if ( ! in_array( $module, [ 'sitemap', 'redirections', 'rich-snippet' ], true ) ) {
			return;
		}

		if ( 'off' === $state ) {
			$type = 'sitemap' === $module || 'redirections' === $module ? $module : 'seo';
			GlobalHelper::remove_notification( "conflicting_{$type}_plugins" );
		}

		self::check_activated_plugin();
	}

	/**
	 * Deactivate conflicting plugins.
	 *
	 * @param string $type Plugin type.
	 */
	private function deactivate_conflicting_plugins( $type ) {
		foreach ( self::get_conflicting_plugins() as $plugin => $plugin_type ) {
			if ( $type === $plugin_type && is_plugin_active( $plugin ) ) {
				if ( ! current_user_can( 'deactivate_plugin', $plugin ) ) {
					$message = sprintf(
						/* translators: plugin name */
						esc_html__( 'You are not allowed to deactivate this plugin: %s.', 'seo-by-rank-math' ),
						esc_html( $plugin )
					);
					GlobalHelper::add_notification(
						$message,
						[
							'type'    => 'error',
							'classes' => 'is-dismissible',
						]
					);
					continue;
				}
				deactivate_plugins( $plugin );
			}
		}

		GlobalHelper::redirect( Security::remove_query_arg_raw( [ 'rank_math_deactivate_plugins', 'plugin_type', '_wpnonce' ] ) );
	}

	/**
	 * Function to set conflict plugin notification.
	 *
	 * @param string $group Plugin group.
	 */
	private static function set_notification( $group ) {
		$message = esc_html__( 'Please keep only one SEO plugin active, otherwise, you might lose your rankings and traffic.', 'seo-by-rank-math' );

		if ( 'sitemap' === $group ) {
			$message = esc_html__( 'Please keep only one Sitemap plugin active, otherwise, you might lose your rankings and traffic.', 'seo-by-rank-math' );
		}

		if ( 'redirections' === $group ) {
			$message = esc_html__( 'Please keep only one Redirection plugin active to avoid redirect conflicts or unexpected behavior.', 'seo-by-rank-math' );
		}

		$message .= ' <a href="###DEACTIVATE_PLUGINS###">' . __( 'Click here to Deactivate', 'seo-by-rank-math' ) . '</a>';

		GlobalHelper::add_notification(
			$message,
			[
				'id'      => "conflicting_{$group}_plugins",
				'type'    => 'error',
				'classes' => 'is-dismissible',
				'group'   => $group,
			]
		);
	}

	/**
	 * Function to remove conflict plugin notification.
	 *
	 * @param string $type   Plugin type.
	 * @param string $plugin Plugin name.
	 */
	private function remove_notification( $type, $plugin ) {
		foreach ( self::get_conflicting_plugins() as $file => $plugin_type ) {
			if ( $plugin !== $file && $type === $plugin_type && is_plugin_active( $file ) ) {
				return;
			}
		}

		GlobalHelper::remove_notification( "conflicting_{$type}_plugins" );
	}

	/**
	 * Function to get all conflicting plugins.
	 *
	 * @return array
	 */
	private static function get_conflicting_plugins() {
		$plugins = [
			'wordpress-seo/wp-seo.php'                    => 'seo',
			'wordpress-seo-premium/wp-seo-premium.php'    => 'seo',
			'wpseo-local/local-seo.php'                   => 'seo',
			'wpseo-news/wpseo-news.php'                   => 'seo',
			'wpseo-video/video-seo.php'                   => 'seo',
			'all-in-one-seo-pack/all_in_one_seo_pack.php' => 'seo',
			'all-in-one-seo-pack-pro/all_in_one_seo_pack.php' => 'seo',
			'wp-seopress/seopress.php'                    => 'seo',
			'wp-seopress-pro/seopress-pro.php'            => 'seo',
		];

		if ( GlobalHelper::is_module_active( 'redirections' ) ) {
			$plugins['redirection/redirection.php'] = 'redirections';
		}
		if ( GlobalHelper::is_module_active( 'sitemap' ) ) {
			$plugins['google-sitemap-generator/sitemap.php'] = 'sitemap';
			$plugins['xml-sitemap-feed/xml-sitemap.php']     = 'sitemap';
		}
		if ( GlobalHelper::is_module_active( 'rich-snippet' ) ) {
			$plugins['wp-schema-pro/wp-schema-pro.php']              = 'seo';
			$plugins['all-in-one-schemaorg-rich-snippets/index.php'] = 'seo';
		}
		return $plugins;
	}

	/**
	 * Replace link inside notice dynamically to avoid issues with the nonce.
	 *
	 * @param string $output  Notice output.
	 * @param string $message Notice message.
	 * @param array  $options Notice options.
	 *
	 * @return string
	 */
	public function deactivate_plugins_link( $output, $message, $options ) {
		if ( ! isset( $options['id'] ) || ! preg_match( '/conflicting_.*_plugins/', $options['id'] ) ) {
			return $output;
		}

		$deactivate_url = Security::add_query_arg(
			[
				'rank_math_deactivate_plugins' => '1',
				'plugin_type'                  => $options['group'],
				'_wpnonce'                     => wp_create_nonce( 'rank_math_deactivate_plugins' ),
			],
			admin_url( 'plugins.php' )
		);

		$output = str_replace( '###DEACTIVATE_PLUGINS###', $deactivate_url, $output );

		return $output;
	}

	/**
	 * Check search visibility
	 *
	 * @param integer $value Setting value.
	 */
	public function check_search_engine_visibility( $value ) {

		if ( ! $value ) {
			GlobalHelper::remove_notification( 'search_engine_visibility' );
			return;
		}

		GlobalHelper::add_notification(
			sprintf(
				// translators: %1$s: general reading settings URL.
				__( '<strong>SEO Notice</strong>: Your site is set to No Index and will not appear in search engines. You can change the Search engine visibility <a href="%1$s">from here</a>.', 'seo-by-rank-math' ),
				admin_url( 'options-reading.php' )
			),
			[
				'type'    => 'warning',
				'id'      => 'search_engine_visibility',
				'classes' => 'is-dismissible',
			]
		);
	}
}
PK     “ŠU]à%Ñé-  é-  %  includes/admin/class-admin-helper.phpnu „[µü¤        <?php
/**
 * Admin helper Functions.
 *
 * This file contains functions needed on the admin screens.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Data_Encryption;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin_Helper class.
 */
class Admin_Helper {

	/**
	 * Get .htaccess related data.
	 *
	 * @return array
	 */
	public static function get_htaccess_data() {
		if ( ! Helper::is_filesystem_direct() ) {
			return [
				'content'  => '',
				'writable' => false,
			];
		}

		$wp_filesystem = Helper::get_filesystem();
		if ( empty( $wp_filesystem ) ) {
			return;
		}

		$htaccess_file = get_home_path() . '.htaccess';
		return ! $wp_filesystem->exists( $htaccess_file ) ? false : [
			'content'  => $wp_filesystem->get_contents( $htaccess_file ),
			'writable' => $wp_filesystem->is_writable( $htaccess_file ),
		];
	}

	/**
	 * Get tooltip HTML.
	 *
	 * @param string $message Message to show in tooltip.
	 *
	 * @return string
	 */
	public static function get_tooltip( $message ) {
		return '<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span>' . $message . '</span></span>';
	}

	/**
	 * Get admin view file.
	 *
	 * @param string $view View filename.
	 *
	 * @return string Complete path to view
	 */
	public static function get_view( $view ) {
		$view = sanitize_key( $view );
		$view = rank_math()->admin_dir() . "views/{$view}.php";

		if ( ! file_exists( $view ) ) {
			Helper::redirect( Helper::get_admin_url() );
			exit;
		}

		return $view;
	}

	/**
	 * Get taxonomies as choices.
	 *
	 * @param array $args (Optional) Arguments passed to filter list.
	 *
	 * @return array|bool
	 */
	public static function get_taxonomies_options( $args = [] ) {
		global $wp_taxonomies;

		$args       = wp_parse_args( $args, [ 'public' => true ] );
		$taxonomies = wp_filter_object_list( $wp_taxonomies, $args, 'and', 'label' );

		return empty( $taxonomies ) ? false : [ 'off' => esc_html__( 'None', 'seo-by-rank-math' ) ] + $taxonomies;
	}

	/**
	 * Registration data get/update.
	 *
	 * @param array|bool|null $data Array of data to save.
	 *
	 * @return array
	 */
	public static function get_registration_data( $data = null ) {
		$row  = 'rank_math_connect_data';
		$keys = [
			'username',
			'email',
			'api_key',
			'plan',
		];

		// Setter.
		if ( ! is_null( $data ) ) {
			if ( false === $data ) {
				update_option( 'rank_math_registration_skip', 1 );
				return delete_option( $row );
			}

			foreach ( $keys as $key ) {
				if ( isset( $data[ $key ] ) ) {
					$data[ $key ] = Data_Encryption::encrypt( $data[ $key ] );
				}
			}

			Helper::remove_notification( 'rank-math-site-url-mismatch' );
			update_option( 'rank_math_registration_skip', 1 );
			$connected = update_option( $row, $data );

			do_action( 'rank_math/connect/account_connected', $data );
			return $connected;
		}

		// Getter.
		$options = Helper::is_plugin_active_for_network() ? get_blog_option( get_main_site_id(), $row, false ) : get_option( $row, false );
		if ( empty( $options ) ) {
			return false;
		}

		foreach ( $keys as $key ) {
			if ( isset( $options[ $key ] ) ) {
				$options[ $key ] = Data_Encryption::decrypt( $options[ $key ] );
			}
		}

		if ( ! self::is_valid_registration( $options ) ) {
			// Delete invalid registration data.
			delete_option( $row );

			// Ask the user to reconnect.
			Helper::add_notification(
				__( 'Unable to validate Rank Math SEO registration data.', 'seo-by-rank-math' ) .
				' <a href="' . esc_url( self::get_activate_url() ) . '">' . __( 'Please try reconnecting.', 'seo-by-rank-math' ) . '</a> ' .
				sprintf(
					/* translators: KB Link */
					__( 'If the issue persists, please try the solution described in our Knowledge Base article: %s', 'seo-by-rank-math' ),
					'<a href="' . KB::get( 'unable-to-encrypt', 'Registration Data' ) . '" target="_blank">' . __( '[3. Unable to Encrypt]', 'seo-by-rank-math' ) . '</a>'
				),
				[ 'type' => 'error' ]
			);

			return false;
		}

		/**
		 * Filter whether we need to check for URL mismatch or not.
		 */
		$do_url_check = apply_filters( 'rank_math/registration/do_url_check', ! get_option( 'rank_math_siteurl_mismatch_notice_dismissed' ) );
		if ( $do_url_check && isset( $options['site_url'] ) && Helper::get_home_url() !== $options['site_url'] ) {
			$message = esc_html__( 'Seems like your site URL has changed since you connected to Rank Math.', 'seo-by-rank-math' ) . ' <a href="' . self::get_activate_url() . '">' . esc_html__( 'Click here to reconnect.', 'seo-by-rank-math' ) . '</a>';
			Helper::add_notification(
				$message,
				[
					'type' => 'warning',
					'id'   => 'rank-math-site-url-mismatch',
				]
			);
		}

		/**
		 * Ensure the site_url is returned if it is absent, as it is required for the Content AI.
		 */
		if ( empty( $options['site_url'] ) ) {
			$options['site_url'] = Helper::get_home_url();
		}

		return $options;
	}

	/**
	 * Check if registration data is valid.
	 *
	 * @param array $data Registration data.
	 *
	 * @return bool
	 */
	public static function is_valid_registration( $data ) {
		if ( empty( $data['username'] ) || empty( $data['email'] ) || empty( $data['api_key'] ) || empty( $data['plan'] ) ) {
			return false;
		}

		if ( ! filter_var( $data['email'], FILTER_VALIDATE_EMAIL ) ) {
			return false;
		}

		if ( strlen( $data['plan'] ) > 32 ) { // This can happen when the decryption fails for some reason.
			return false;
		}

		return true;
	}

	/**
	 * Get user plan.
	 */
	public static function get_user_plan() {
		$data = self::get_registration_data();

		return $data['plan'];
	}

	/**
	 * Is user plan expired.
	 *
	 * @return boolean
	 */
	public static function is_plan_expired() {
		$data = self::get_registration_data();
		if ( ! isset( $data['plan'] ) ) {
			return true;
		}

		return 'free' === $data['plan'];
	}

	/**
	 * Remove registration data and disconnect from RankMath.com.
	 */
	public static function deregister_user() {
		$registered = self::get_registration_data();
		if ( $registered && isset( $registered['username'] ) && isset( $registered['api_key'] ) ) {
			Api::get()->deactivate_site( $registered['username'], $registered['api_key'] );
			self::get_registration_data( false );

			do_action( 'rank_math/deregister_site' );
		}
	}

	/**
	 * Check if current page is media list page.
	 *
	 * @return bool
	 */
	public static function is_media_library() {
		global $pagenow;

		return 'upload.php' === $pagenow;
	}

	/**
	 * Check if current page is post list page.
	 *
	 * @return bool
	 */
	public static function is_post_list() {
		global $pagenow;

		return 'edit.php' === $pagenow;
	}

	/**
	 * Check if current page is post create/edit screen.
	 *
	 * @return bool
	 */
	public static function is_post_edit() {
		global $pagenow;
		return ! Helper::is_ux_builder() && ( 'post.php' === $pagenow || 'post-new.php' === $pagenow );
	}

	/**
	 * Check if current page is term create/edit screen.
	 *
	 * @return bool
	 */
	public static function is_term_edit() {
		global $pagenow;

		return 'term.php' === $pagenow || 'edit-tags.php' === $pagenow;
	}

	/**
	 * Check if current page is term create/term listing.
	 *
	 * @return bool
	 */
	public static function is_term_listing() {
		global $pagenow;

		return 'edit-tags.php' === $pagenow;
	}

	/**
	 * Check if current page is user create/edit screen.
	 *
	 * @return bool
	 */
	public static function is_user_edit() {
		global $pagenow;

		return 'profile.php' === $pagenow || 'user-edit.php' === $pagenow;
	}

	/**
	 * Check if current page is user or term create/edit screen.
	 *
	 * @return bool
	 */
	public static function is_term_profile_page() {
		global $pagenow;

		return self::is_term_edit() || self::is_user_edit();
	}

	/**
	 * Get product activation URL.
	 *
	 * @param string $redirect_to Redirecto url.
	 *
	 * @return string Activate URL.
	 */
	public static function get_activate_url( $redirect_to = null ) {
		if ( empty( $redirect_to ) ) {
			$redirect_to = Security::add_query_arg_raw(
				[
					'page'  => 'rank-math',
					'view'  => 'help',
					'nonce' => wp_create_nonce( 'rank_math_register_product' ),
				],
				( is_multisite() && is_plugin_active_for_network( plugin_basename( RANK_MATH_FILE ) ) ) ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' )
			);
		} else {
			$redirect_to = Security::add_query_arg_raw(
				[
					'nonce' => wp_create_nonce( 'rank_math_register_product' ),
				],
				$redirect_to
			);
		}

		$args = [
			'site' => rawurlencode( home_url() ),
			'r'    => rawurlencode( $redirect_to ),
		];

		return apply_filters(
			'rank_math/license/activate_url',
			Security::add_query_arg_raw( $args, RANK_MATH_SITE_URL . '/auth' ),
			$args
		);
	}

	/**
	 * Check if page is set as Homepage.
	 *
	 * @since 1.0.42
	 *
	 * @return boolean
	 */
	public static function is_home_page() {
		$front_page = (int) get_option( 'page_on_front' );

		if ( Helper::is_divi_frontend_editor() ) {
			$p = get_post();
			return ! empty( $p->ID ) && $p->ID === $front_page;
		}

		return $front_page && self::is_post_edit() && (int) Param::get( 'post' ) === $front_page;
	}

	/**
	 * Check if page is set as Posts Page.
	 *
	 * @since 1.0.43
	 *
	 * @return boolean
	 */
	public static function is_posts_page() {
		$posts_page = (int) get_option( 'page_for_posts' );

		return $posts_page && self::is_post_edit() && (int) Param::get( 'post' ) === $posts_page;
	}

	/**
	 * Get Trends icon <svg> element.
	 *
	 * @return string
	 */
	public static function get_trends_icon_svg() {
		return '<svg viewBox="0 0 610 610"><path d="M18.85,446,174.32,290.48l58.08,58.08L76.93,504a14.54,14.54,0,0,1-20.55,0L18.83,466.48a14.54,14.54,0,0,1,0-20.55Z" style="fill:#4285f4"/><path d="M242.65,242.66,377.59,377.6l-47.75,47.75a14.54,14.54,0,0,1-20.55,0L174.37,290.43l47.75-47.75A14.52,14.52,0,0,1,242.65,242.66Z" style="fill:#ea4335"/><polygon points="319.53 319.53 479.26 159.8 537.34 217.88 377.61 377.62 319.53 319.53" style="fill:#fabb05"/><path d="M594.26,262.73V118.61h0a16.94,16.94,0,0,0-16.94-16.94H433.2a16.94,16.94,0,0,0-12,28.92L565.34,274.71h0a16.94,16.94,0,0,0,28.92-12Z" style="fill:#34a853"/><rect width="610" height="610" style="fill:none"/></svg>';
	}

	/**
	 * Check if siteurl & home options are both valid URLs.
	 *
	 * @return boolean
	 */
	public static function is_site_url_valid() {
		return (bool) filter_var( get_option( 'siteurl' ), FILTER_VALIDATE_URL ) && (bool) filter_var( get_option( 'home' ), FILTER_VALIDATE_URL );
	}

	/**
	 * Maybe show notice about invalid siteurl.
	 */
	public static function maybe_show_invalid_siteurl_notice() {
		if ( ! self::is_site_url_valid() ) {
			?>
			<p class="notice notice-warning notice-alt notice-connect-disabled">
				<?php
				printf(
					// Translators: 1 is "WordPress Address (URL)", 2 is "Site Address (URL)", 3 is a link to the General Settings, with "WordPress General Settings" as anchor text.
					esc_html__( 'Rank Math cannot be connected because your site URL doesn\'t appear to be a valid URL. If the domain name contains special characters, please make sure to use the encoded version in the %1$s &amp; %2$s fields on the %3$s page.', 'seo-by-rank-math' ),
					'<strong>' . esc_html__( 'WordPress Address (URL)', 'seo-by-rank-math' ) . '</strong>',
					'<strong>' . esc_html__( 'Site Address (URL)', 'seo-by-rank-math' ) . '</strong>',
					'<a href="' . esc_url( admin_url( 'options-general.php' ) ) . '">' . esc_html__( 'WordPress General Settings', 'seo-by-rank-math' ) . '</a>'
				);
				?>
			</p>
			<?php
		}
	}
}
PK     “ŠU]“‘S<ƒ  ƒ  .  includes/admin/class-register-options-page.phpnu „[µü¤        <?php
/**
 * The option page functionality of the plugin.
 *
 * @since      1.0.250
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Register_Options_Page class.
 */
class Register_Options_Page {

	/**
	 * The Constructor
	 *
	 * @param array $config Array of configuration.
	 */
	public function __construct( $config ) {
		if ( ! Helper::is_react_enabled() ) {
			new CMB2_Options( $config );
			return;
		}

		$options_page = new Options( $config );
		$options_page->register_option_page();
	}
}
PK     “ŠU]” ”	       includes/admin/class-options.phpnu „[µü¤        <?php
/**
 * The option page functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_Http;
use RankMath\KB;
use RankMath\CMB2;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Robots_Txt;
use RankMath\Sitemap\Router;
use RankMath\Sitemap\Sitemap;
use RankMath\Admin\Page;

defined( 'ABSPATH' ) || exit;

/**
 * Options class.
 */
class Options {

	use Hooker;

	/**
	 * Page title.
	 *
	 * @var string
	 */
	public $title = 'Settings';

	/**
	 * Menu title.
	 *
	 * @var string
	 */
	public $menu_title = 'Settings';

	/**
	 * Hold tabs for page.
	 *
	 * @var array
	 */
	public $tabs = [];

	/**
	 * Hold folder name for tab files.
	 *
	 * @var string
	 */
	public $folder = '';

	/**
	 * Menu Position.
	 *
	 * @var int
	 */
	public $position = 10;

	/**
	 * The capability required for this menu to be displayed to the user.
	 *
	 * @var string
	 */
	public $capability = 'manage_options';

	/**
	 * CMB2 option page id.
	 *
	 * @var string
	 */
	private $cmb_id = null;

	/**
	 * Options key.
	 *
	 * @var string
	 */
	public $key = '';

	/**
	 * The Constructor
	 *
	 * @param array $config Array of configuration.
	 */
	public function __construct( $config ) {
		$this->config( $config );
		$this->cmb_id = $this->key . '_options';

		$this->action( 'admin_post_' . $this->key, 'reset_options', 2 );
	}

	/**
	 * Create option object and add settings.
	 */
	public function register_option_page() {
		$current_page = str_replace( 'rank-math-options-', '', $this->key );

		new Page(
			$this->key,
			$this->title,
			[
				'position'   => $this->position,
				'priority'   => 9999,
				'parent'     => 'rank-math',
				'capability' => $this->capability,
				'menu_title' => $this->menu_title,
				'render'     => [ $this, 'display' ],
				'classes'    => $this->get_body_class(),
				'assets'     => [
					'styles'  => [
						'select2-rm'        => '',
						'rank-math-common'  => '',
						'rank-math-cmb2'    => '',
						'wp-components'     => '',
						'rank-math-options' => rank_math()->plugin_url() . 'assets/admin/css/option-panel.css',
					],
					'scripts' => [
						'media-editor'         => '',
						'underscore'           => '',
						'select2-rm'           => '',
						'lodash'               => '',
						'rank-math-common'     => '',
						'wp-api-fetch'         => '',
						'wp-data'              => '',
						'rank-math-components' => '',
						'rank-math-options'    => rank_math()->plugin_url() . 'assets/admin/js/settings.js',
					],
					'json'    => $this->get_json_data( $current_page ),
				],
			]
		);
	}

	/**
	 * Set the default values if not set.
	 *
	 * @param CMB2 $cmb The CMB2 object to hookup.
	 */
	public function set_defaults( $cmb ) {
		foreach ( $cmb->prop( 'fields' ) as $id => $field_args ) {
			$field = $cmb->get_field( $id );
			if ( isset( $field_args['default'] ) || isset( $field_args['default_cb'] ) ) {
				$defaults[ $id ] = $field->get_default();
			}
		}

		// Save Defaults if any.
		if ( ! empty( $defaults ) ) {
			add_option( $this->key, $defaults );
		}
	}

	/**
	 * Reset options.
	 */
	public function reset_options() {

		if ( ! check_admin_referer( 'rank-math-reset-options' ) || ! current_user_can( 'manage_options' ) ) {
			return false;
		}

		$url = wp_get_referer();
		if ( ! $url ) {
			$url = admin_url();
		}

		if ( filter_has_var( INPUT_POST, 'reset-cmb' ) && Param::post( 'action' ) === $this->key ) {
			delete_option( $this->key );
			Helper::redirect( esc_url_raw( $url ), WP_Http::SEE_OTHER );
			exit;
		}
	}

	/**
	 * Add classes to <body> of WordPress admin.
	 *
	 * @return string
	 */
	public function get_body_class() {
		$mode = Helper::is_advanced_mode() ? 'advanced' : 'basic';
		return [
			'rank-math-page ',
			'rank-math-mode-' . $mode,
		];
	}

	/**
	 * Display Setting on a page.
	 */
	public function display() {
		?>
			<div id="rank-math-options" class="<?php echo esc_attr( $this->cmb_id ); ?>"></div>
		<?php
	}

	/**
	 * Get setting tabs.
	 *
	 * @return array
	 */
	private function get_tabs() {

		$filter = str_replace( '-', '_', str_replace( 'rank-math-', '', $this->key ) );
		/**
		 * Allow developers to add new tabs into option panel.
		 *
		 * The dynamic part of hook is, page name without 'rank-math-' prefix.
		 *
		 * @param array $tabs
		 */
		return $this->do_filter( "admin/options/{$filter}_tabs", $this->tabs );
	}

	/**
	 * Get localized data for the current settings page.
	 *
	 * @param string $current_page Current Settings page.
	 *
	 * @return array
	 */
	private function get_json_data( $current_page ) {
		if ( Param::get( 'page' ) !== $this->key ) {
			return [];
		}

		if ( is_admin() ) {
			rank_math()->variables->setup();
			rank_math()->variables->setup_json();
		}

		$tabs = $this->get_tabs();
		$data = $this->do_filter(
			"admin/options/{$current_page}_data",
			[
				'isPro'           => defined( 'RANK_MATH_PRO_FILE' ),
				'tabs'            => array_keys( $tabs ),
				'optionPage'      => $current_page,
				'homeUrl'         => get_home_url(),
				'data'            => $current_page === 'instant-indexing' ? get_option( 'rank-math-options-instant-indexing' ) : Helper::get_settings( $current_page ),
				'isSiteConnected' => Helper::is_site_connected(),
				'choices'         => [
					'postTypes'            => Helper::choices_post_types(),
					'accessiblePostTypes'  => Helper::get_accessible_post_types(),
					'accessibleTaxonomies' => Helper::get_accessible_taxonomies(),
					'choicesPostTypeIcons' => Helper::choices_post_type_icons(),
					'choicesTaxonomyIcons' => Helper::choices_taxonomy_icons(),
				],
			]
		);
		foreach ( $tabs as $tab ) {
			if ( empty( $tab['json'] ) ) {
				continue;
			}

			$data = array_merge( $data, $tab['json'] );
		}

		$method = "get_{$current_page}_data";
		if ( ! method_exists( $this, $method ) ) {
			return $data;
		}

		return array_merge( $data, $this->$method() );
	}

	/**
	 * Get General Settings page data.
	 *
	 * @return array
	 */
	private function get_general_data() {
		return [
			'activateUrl'          => Admin_Helper::get_activate_url( admin_url( 'admin.php??page=rank-math-options-general&tab=content-ai' ) ),
			'hasBreadcrumbSupport' => current_theme_supports( 'rank-math-breadcrumbs' ),
			'showBlogPage'         => 'page' === get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) > 0,
			'isEditAllowed'        => Helper::is_edit_allowed(),
			'defaultLanguage'      => Helper::content_ai_default_language(),
		];
	}

	/**
	 * Get General Settings page data.
	 *
	 * @return array
	 */
	private function get_titles_data() {
		$data = [
			'choicesRobots'         => Helper::choices_robots(),
			'supportsTitleTag'      => current_theme_supports( 'title-tag' ) || wp_is_block_theme(),
			'schemaTypes'           => Helper::choices_rich_snippet_types( esc_html__( 'None (Click here to set one)', 'seo-by-rank-math' ) ),
			'isRedirectAttachments' => Helper::get_settings( 'general.attachment_redirect_urls' ),
		];
		return $data;
	}
}
PK     “ŠU]gˆt´z&  z&  #  includes/admin/class-admin-menu.phpnu „[µü¤        <?php
/**
 * The admin pages of the plugin.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Traits\Ajax;
use RankMath\Admin\Page;

defined( 'ABSPATH' ) || exit;

/**
 * Admin_Menu class.
 *
 * @codeCoverageIgnore
 */
class Admin_Menu implements Runner {

	use Hooker;
	use Ajax;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'init', 'register_pages' );
		$this->action( 'admin_menu', 'fix_admin_menu', 999 );
		$this->action( 'admin_head', 'icon_css' );
		$this->ajax( 'remove_offer_page', 'remove_offer_page' );
	}

	/**
	 * Register admin pages for plugin.
	 */
	public function register_pages() {
		$this->maybe_deregister();

		if ( Helper::is_invalid_registration() && ! is_network_admin() ) {
			return;
		}

		$current_user = wp_get_current_user();
		$capabilities = array_keys( Helper::get_roles_capabilities() );

		if ( empty( array_intersect( $current_user->roles, $capabilities ) ) && ! current_user_can( 'setup_network' ) ) {
			return;
		}

		$modules = rank_math()->manager->modules;
		$data    = [];
		foreach ( $modules as $id => $module ) {
			$data[ $id ] = array_merge(
				[
					'id'       => $module->get_id(),
					'isActive' => $module->is_active(),
					'isHidden' => $module->is_hidden(),
					'isPro'    => $module->is_pro_module(),
				],
				$module->get_args()
			);
		}

		// Dashboard / Welcome / About.
		new Page(
			'rank-math',
			esc_html__( 'Rank Math', 'seo-by-rank-math' ),
			[
				'position'   => 50,
				'menu_title' => 'Rank Math',
				'capability' => 'manage_options',
				'icon'       => 'data:image/svg+xml;base64,' . \base64_encode( '<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g fill="#fff"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>' ), // phpcs:ignore -- This should not cause any issue as we only pass a static svg code.
				'render'     => Admin_Helper::get_view( 'dashboard' ),
				'classes'    => [ 'rank-math-page' ],
				'assets'     => [
					'styles'  => [ 'rank-math-dashboard' => '' ],
					'scripts' => [
						'lodash'               => '',
						'rank-math-components' => '',
						'rank-math-dashboard'  => '',
						'rank-math-modules'    => rank_math()->plugin_url() . 'assets/admin/js/modules.js',
					],
					'json'    => [
						'isPro'                    => defined( 'RANK_MATH_PRO_FILE' ),
						'isSiteConnected'          => Helper::is_site_connected(),
						'registerProductNonce'     => wp_create_nonce( 'rank_math_register_product' ),
						'activateUrl'              => Admin_Helper::get_activate_url(),
						'isSiteUrlValid'           => Admin_Helper::is_site_url_valid(),
						'isAdvancedMode'           => Helper::is_advanced_mode(),
						'contentAiPlan'            => Helper::get_content_ai_plan(),
						'data'                     => $data,
						'isPluginActiveForNetwork' => Helper::is_plugin_active_for_network(),
						'isNetworkAdmin'           => is_network_admin(),
						'canUser'                  => [
							'manageOptions'  => current_user_can( 'manage_options' ),
							'setupNetwork'   => current_user_can( 'setup_network' ),
							'installPlugins' => current_user_can( 'install_plugins' ),
						],
					],
				],
				'is_network' => is_network_admin() && Helper::is_plugin_active_for_network(),
			]
		);
	}

	/**
	 * Fix menu names.
	 */
	public function fix_admin_menu() {

		// Replace the main menu name "Rank Math" with "Rank Math SEO".
		global $menu;
		foreach ( $menu as $key => $item ) {
			if ( 'Rank Math' === $item[0] ) {
				$menu[ $key ][0] = esc_html__( 'Rank Math SEO', 'seo-by-rank-math' ); // phpcs:ignore -- This is required to change the menu name without changing its slug `rank-math`
				break;
			}
		}

		// Replace the first submenu name "Rank Math" with "Dashboard".
		global $submenu;
		if ( ! isset( $submenu['rank-math'] ) ) {
			return;
		}

		if ( 'Rank Math' === $submenu['rank-math'][0][0] ) {
			if ( current_user_can( 'manage_options' ) ) {
				$plan         = Helper::get_content_ai_plan();
				$notification = ( empty( $plan ) || 'free' === $plan ) && get_option( 'rank_math_view_modules' ) ? ' <span class="awaiting-mod count-1"><span class="pending-count" aria-hidden="true">1</span></span>' : '';

				$submenu['rank-math'][0][0] = esc_html__( 'Dashboard', 'seo-by-rank-math' ) . $notification; // phpcs:ignore -- This is required to change the menu name when the plugin is not configured.
			} else {
				unset( $submenu['rank-math'][0] );
			}
		}

		if ( empty( $submenu['rank-math'] ) ) {
			return;
		}

		$submenu['rank-math'][] = [ esc_html__( 'Help &amp; Support', 'seo-by-rank-math' ) . '<i class="dashicons dashicons-external" style="font-size:12px;vertical-align:-2px;height:10px;"></i>', 'manage_options', KB::get( 'knowledgebase', 'Sidebar Help Link' ) ]; // phpcs:ignore -- A custom link to our KB article.
		$this->add_offer_link( $submenu );

		// Store ID of first_menu item so we can use it in the Admin menu item.
		set_transient( 'rank_math_first_submenu_id', array_values( $submenu['rank-math'] )[0][2] );
	}

	/**
	 * Print icon CSS for admin menu bar.
	 */
	public function icon_css() {
		?>
		<script type="text/javascript">
			// Open RM KB menu link in the new tab.
			jQuery( document ).ready( function( $ ) {
				$( "ul#adminmenu a[href$='<?php KB::the( 'knowledgebase', 'Sidebar Help Link' ); ?>']" ).attr( 'target', '_blank' );
				$( "ul#adminmenu a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']" ).attr( 'target', '_blank' ).on( 'click', function() {
					$( this ).remove()
					$.ajax( {
						url: window.ajaxurl,
						type: 'POST',
						data: {
							action: 'rank_math_remove_offer_page',
							security: rankMath.security,
						},
					} )
				} );
			} );
		</script>
		<style>
			#wp-admin-bar-rank-math .rank-math-icon {
				display: inline-block;
				top: 6px;
				position: relative;
				padding-right: 10px;
				max-width: 20px;
			}
			#wp-admin-bar-rank-math .rank-math-icon svg {
				fill-rule: evenodd;
				fill: #dedede;
			}
			#wp-admin-bar-rank-math:hover .rank-math-icon svg {
				fill-rule: evenodd;
				fill: #00b9eb;
			}
			#toplevel_page_rank-math:not(.wp-has-submenu) {
				display: none;
			}
			.multisite.network-admin #toplevel_page_rank-math {
				display: block;
			}
			#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>'],
			#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']:hover,
			#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']:focus {
				background-color: #10AC84;
				color: #fff;
			}
		</style>
		<?php
	}

	/**
	 * Check for deactivation.
	 */
	private function maybe_deregister() {
		if ( ! Helper::has_cap( 'general' ) || 'deregister' !== Param::post( 'registration-action' ) ) {
			return;
		}

		$nonce = Param::post( '_wpnonce' );
		if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_register_product' ) ) {
			return;
		}

		Admin_Helper::deregister_user();
	}

	/**
	 * Function to add Offer link based on the date range.
	 *
	 * @param array $submenu Submenu items.
	 */
	private function add_offer_link( &$submenu ) {
		$offer = $this->get_active_offer();
		if ( ! $offer ) {
			return;
		}

		$submenu['rank-math'][] = [ current( $offer ) . '&nbsp;', 'manage_options', KB::get( 'offer', 'Offer Menu Item' ) ];
	}

	/**
	 * Ajax handler callback to store active offer so it doesn't show up again on the site.
	 */
	public function remove_offer_page() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$offer = $this->get_active_offer();
		set_site_transient( 'rank_math_active_offer', key( $offer ) );
	}

	/**
	 * Function to get active offer
	 */
	private function get_active_offer() {
		// Early Bail if PRO plugin is active.
		if ( defined( 'RANK_MATH_PRO_FILE' ) ) {
			return false;
		}

		$timezone     = new \DateTimeZone( 'Asia/Kolkata' );
		$current_date = new \DateTime( 'now', $timezone );
		$dates        = [
			'halloween'    => [
				'start' => '2025-10-29',
				'end'   => '2025-11-05',
				'text'  => esc_html__( 'Halloween Sale', 'seo-by-rank-math' ),
			],
			'anniversary'  => [
				'start' => '2025-11-05',
				'end'   => '2025-11-12',
				'text'  => esc_html__( 'Anniversary Sale', 'seo-by-rank-math' ),
			],
			'black-friday' => [
				'start' => '2025-11-12',
				'end'   => '2025-11-29',
				'text'  => esc_html__( 'Black Friday Sale', 'seo-by-rank-math' ),
			],
			'cyber-monday' => [
				'start' => '2025-11-29',
				'end'   => '2025-12-03',
				'text'  => esc_html__( 'Cyber Monday Sale', 'seo-by-rank-math' ),
			],
			'christmas'    => [
				'start' => '2025-12-24',
				'end'   => '2025-12-31',
				'text'  => esc_html__( 'Christmas Sale', 'seo-by-rank-math' ),
			],
			'new-year'     => [
				'start' => '2025-12-31',
				'end'   => '2026-01-07',
				'text'  => esc_html__( 'New Year Sale', 'seo-by-rank-math' ),
			],
		];

		$stored_offer = get_site_transient( 'rank_math_active_offer' );
		$active_offer = '';
		foreach ( $dates as $key => $date ) {
			$start_date = new \DateTime( $date['start'] . ' 16:00:00', $timezone );
			$end_date   = new \DateTime( $date['end'] . ' 16:00:00', $timezone );

			if ( $stored_offer !== $key && $current_date >= $start_date && $current_date <= $end_date ) {
				$active_offer = [ $key => $date['text'] ];
				break;
			}
		}

		return $active_offer;
	}
}
PK     “ŠU] µˆ0$  0$  #  includes/admin/class-pro-notice.phpnu „[µü¤        <?php
/**
 * Inform the user about Rank Math PRO after 20 days of usage.
 *
 * @since      1.0.69
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Pro_Notice class.
 */
class Pro_Notice {

	use Hooker;
	use Ajax;

	/**
	 * Now.
	 *
	 * @var string
	 */
	public $current_time = '';

	/**
	 * Rank Math plugin install date.
	 *
	 * @var string
	 */
	public $install_date = '';

	/**
	 * Date of release of version 1.0.69. Turned into a timestamp in the constructor.
	 *
	 * @var string
	 */
	public $record_date = '2021-07-30 13:00';

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->current_time = Helper::get_current_time();
		$this->record_date  = strtotime( $this->record_date );
		$this->install_date = get_option( 'rank_math_install_date' );
		if ( false === $this->install_date ) {
			$this->install_date = $this->current_time;
		}
	}

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->ajax( 'dismiss_pro_notice', 'dismiss' );

		// Admin notice.
		$notice_date = $this->get_notice_date();
		if ( $this->current_time > $notice_date ) {
			if ( get_option( 'rank_math_pro_notice_added' ) === false && ! Helper::has_notification( 'rank_math_review_plugin_notice' ) ) {
				$this->add_notice( (int) get_option( 'rank_math_pro_notice_delayed' ) );
			}

			// Make dismiss button work like the "Maybe later" link.
			$this->action( 'wp_helpers_notification_dismissed', 'pro_notice_after_dismiss' );

			$this->action( 'admin_footer', 'pro_notice_js', 15 );
		}
	}

	/**
	 * Add inline JS & CSS related to the Pro notice.
	 *
	 * @return void
	 */
	public function pro_notice_js() {
		if ( ! Helper::has_notification( 'rank_math_pro_notice' ) ) {
			return;
		}
		?>
		<script>
			(function( $ ) {
				$( function() {
					$('.rank-math-dismiss-pro-notice').on( 'click', function(e) {
						var $this = $(this);

						if ( ! $this.hasClass( 'rank-math-upgrade-action' ) ) {
							e.preventDefault();
						}

						if ( $this.hasClass( 'rank-math-maybe-later-action' ) ) {
							$('#rank_math_pro_notice').find( '.notice-dismiss' ).trigger('click');
							return false;
						}

						jQuery.ajax( {
							url: rankMath.ajaxurl,
							data: { action: 'rank_math_already_upgraded', security: rankMath.security,
							},
						} );

						$('#rank_math_pro_notice').find( '.notice-dismiss' ).trigger('click');
					});
				});
			})(jQuery);
		</script>
		<style>
			#rank_math_pro_notice.is-dismissible {
				background: #253142;
				color: #e4e5e7;
				border-width: 3px;
				border-style: solid;
				border-color: #161e28;
				padding: 0.25rem 1rem 1rem;
				border-radius: 5px;
			}
			#rank_math_pro_notice.is-dismissible p {
				font-size: 1.25rem;
				color: #f7d070;
				margin-bottom: 0;
			}
			#rank_math_pro_notice.is-dismissible ul {
				line-height: 1;
				margin-bottom: 0;
				text-align: left;
				opacity: 0.8;
				font-size: 15px;
				max-width: 530px;
			}
			#rank_math_pro_notice.is-dismissible li {
				display: inline-block;
				width: 49%;
				margin-bottom: 0.5rem;
			}
			#rank_math_pro_notice ul li:before {
				font-family: dashicons;
				font-size: 20px;
				width: 20px;
				height: 20px;
				margin-right: 5px;
				content: '\f147';
				text-align: center;
				vertical-align: middle;
				color: #161e28;
				border-radius: 10px;
				background: #9ce2b6;
			}
			#rank_math_pro_notice .button {
				border-color: #f7d070;
				background: #f7d070;
				color: #5a4000;
				font-size: 15px;
				margin-right: 12px;
			}
			div#rank_math_pro_notice .rank-math-maybe-later-action,
			div#rank_math_pro_notice .rank-math-already-upgraded-action {
				color: #f7d070;
				opacity: 0.7;
				margin: 0 12px;
				font-size: 13px;
			}

			.toplevel_page_rank-math #rank_math_pro_notice,
			body[class*="rank-math_page_rank-math-options-"] div#rank_math_pro_notice {
				display: none;
			}
		</style>
		<?php
	}

	/**
	 * Add admin notice.
	 *
	 * @param int $variant Notice variant.
	 * @return void
	 */
	public function add_notice( $variant = 0 ) {
		$message = $this->get_notice_text( $variant );

		Helper::add_notification(
			$message,
			[
				'type'       => 'info',
				'id'         => 'rank_math_pro_notice',
				'capability' => 'install_plugins',
			]
		);

		update_option( 'rank_math_pro_notice_added', '1', false );
	}

	/**
	 * Get notice texts.
	 *
	 * @param integer $variant Message variant.
	 * @return string
	 */
	public function get_notice_text( $variant = 0 ) {
		$message = '';
		switch ( (int) $variant ) {
			case 1:
				$message = '<p><strong>';

				$message .= esc_html__( 'Rank Your Content With the Power of PRO & A.I.', 'seo-by-rank-math' );
				$message .= '</strong></p>';
				$message .= '<ul>
								<li>' . esc_html__( 'Unlimited Websites', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Content A.I. (Artificial Intelligence)', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Keyword Rank Tracker', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Powerful Schema Generator', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( '24x7 Premium Support', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'SEO Email Reports', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'and Many Moreâ€¦', 'seo-by-rank-math' ) . '</li>
							</ul>';
				$message .= '<p>
								<a href="' . KB::get( 'pro', 'Upgrade Notice 2 New Yes' ) . '" class="button rank-math-dismiss-pro-notice rank-math-upgrade-action" target="_blank" rel="noopener noreferrer"><strong>' . esc_html__( 'Yes, I want to learn more', 'seo-by-rank-math' ) . '</strong></a><a href="#" class="rank-math-dismiss-pro-notice rank-math-already-upgraded-action">' . esc_html__( 'No, I don\'t want it', 'seo-by-rank-math' ) . '</a><a href="#" class="rank-math-dismiss-pro-notice rank-math-already-upgraded-action">' . esc_html__( 'I already upgraded', 'seo-by-rank-math' ) . '</a>
							</p>';
				break;

			default:
				$message = '<p><strong>';

				$message .= esc_html__( 'Rank Your Content With the Power of PRO & A.I.', 'seo-by-rank-math' );
				$message .= '</strong></p><p>';
				$message .= '<ul>
								<li>' . esc_html__( 'Unlimited Websites', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Content A.I. (Artificial Intelligence)', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Keyword Rank Tracker', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'Powerful Schema Generator', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( '24x7 Premium Support', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'SEO Email Reports', 'seo-by-rank-math' ) . '</li>
								<li>' . esc_html__( 'and Many Moreâ€¦', 'seo-by-rank-math' ) . '</li>
							</ul>';
				$message .= '<p>
						<a href="' . KB::get( 'pro', 'Upgrade Notice 1 New Yes' ) . '" class="button rank-math-dismiss-pro-notice rank-math-upgrade-action" target="_blank" rel="noopener noreferrer"><strong>' . esc_html__( 'Yes, I want better SEO', 'seo-by-rank-math' ) . '</strong></a><a href="#" class="rank-math-dismiss-pro-notice rank-math-maybe-later-action">' . esc_html__( 'No, maybe later', 'seo-by-rank-math' ) . '</a><a href="#" class="rank-math-dismiss-pro-notice rank-math-already-upgraded-action">' . esc_html__( 'I already purchased', 'seo-by-rank-math' ) . '</a>
					</p>';
				break;
		}

		return $message;
	}

	/**
	 * Set "delayed" flag after the user dismisses the notice.
	 *
	 * @param string $notification_id Dismissed notice ID.
	 * @return void
	 */
	public function pro_notice_after_dismiss( $notification_id ) {
		if ( 'rank_math_pro_notice' !== $notification_id ) {
			return;
		}

		// If it has already been delayed once then dismiss it forever.
		if ( get_option( 'rank_math_pro_notice_delayed' ) ) {
			update_option( 'rank_math_already_upgraded', Helper::get_current_time() );
			return;
		}

		delete_option( 'rank_math_pro_notice_date' );
		delete_option( 'rank_math_pro_notice_added' );
		update_option( 'rank_math_pro_notice_delayed', 1, false );
	}

	/**
	 * Get stored notice start date.
	 *
	 * @return int
	 */
	public function get_notice_date() {
		$notice_date = get_option( 'rank_math_pro_notice_date' );
		if ( false !== $notice_date ) {
			return $notice_date;
		}

		$delay_days = 10;
		if ( $this->install_date < $this->record_date && ! get_option( 'rank_math_pro_notice_delayed' ) ) {
			$delay_days = wp_rand( 7, 30 );
		}

		$notice_date = $this->current_time + ( $delay_days * DAY_IN_SECONDS );
		update_option( 'rank_math_pro_notice_date', $notice_date, false );

		return $notice_date;
	}

	/**
	 * Set the "already upgraded" flag.
	 * This also sets the "already reviewed" flag, so the review notice will not show up anymore either.
	 */
	public function dismiss() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'onpage_general' );

		update_option( 'rank_math_already_upgraded', Helper::get_current_time() );
		update_option( 'rank_math_already_reviewed', Helper::get_current_time() );

		$this->success( 'success' );
	}
}
PK     “ŠU] âÒK¨  ¨  %  includes/admin/class-admin-header.phpnu „[µü¤        <?php
/**
 * Header for the Rank Math pages
 *
 * @since      1.0.44
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\KB;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin Header class.
 *
 * @codeCoverageIgnore
 */
class Admin_Header {

	/**
	 * Hold current screen ID.
	 *
	 * @var Current screen ID.
	 */
	private $screen_id = '';

	/**
	 * Display Header.
	 *
	 * @param bool $show_breadcrumbs Determines whether to show breadcrumbs or not.
	 */
	public function display( $show_breadcrumbs ) {
		$logo_url        = '<a href="' . esc_url( Helper::get_admin_url() ) . '"><i class="rm-icon rm-icon-rank-math"></i></a>';
		$this->screen_id = $this->get_current_screen();
		?>
		<div class="rank-math-header">
			<div class="rank-math-logo">
				<?php echo $logo_url; // phpcs:ignore ?>
			</div>
			<h1 class="rank-math-logo-text">
				Rank Math SEO
				<?php do_action( 'rank_math/pro_badge' ); ?>
			</h1>
			<?php $this->get_search_options(); ?>
			<?php $this->get_mode_selector(); ?>

			<?php do_action( 'rank_math/before_help_link' ); ?>
			<a href="<?php echo esc_url( $this->get_help_link() ); ?>" title="<?php esc_attr_e( 'Rank Math Knowledge Base', 'seo-by-rank-math' ); ?>" target="_blank" class="button rank-math-help"><i class="dashicons dashicons-editor-help"></i></a>
		</div>
		<?php

		// Breadcrumbs.
		if ( $show_breadcrumbs ) {
			rank_math()->admin->display_admin_breadcrumbs();
		}
	}

	/**
	 * Get Search Options.
	 */
	private function get_search_options() {
		if (
			! in_array(
				$this->screen_id,
				[
					'rank-math_page_rank-math-options-general',
					'rank-math_page_rank-math-options-titles',
					'rank-math_page_rank-math-options-sitemap',
				],
				true
			)
		) {
			return;
		}
		?>
		<div class="rank-math-search-options">
			<div class="components-input-control">
				<div class="components-input-control__container">
						<!-- <i class="rm-icon rm-icon-search"></i> -->
						<input type="search" class="components-input-control__input" value="" placeholder="<?php esc_attr_e( 'Search Options', 'seo-by-rank-math' ); ?>" style="width: 100%;">
						<!-- <em class="clear-search dashicons dashicons-no-alt"></em> -->
				</div>
			</div>
		</div>
		<?php
	}

	/**
	 * Get Mode Selector.
	 */
	private function get_mode_selector() {
		if (
			! in_array(
				$this->screen_id,
				[
					'toplevel_page_rank-math',
					'rank-math_page_rank-math-status',
				],
				true
			)
		) {
			return;
		}

		$is_advanced_mode = Helper::is_advanced_mode();
		?>
		<div class="rank-math-mode-selector">
			<a href="#" class="<?php echo ! $is_advanced_mode ? 'active' : ''; ?>" data-mode="easy"><?php esc_attr_e( 'Easy Mode', 'seo-by-rank-math' ); ?></a>
			<a href="#" class="<?php echo $is_advanced_mode ? 'active' : ''; ?>" data-mode="advanced"><?php esc_attr_e( 'Advanced Mode', 'seo-by-rank-math' ); ?></a>
		</div>
		<?php
	}

	/**
	 * Get Current Screen ID.
	 */
	private function get_help_link() {
		$links = [
			'import-export-settings'     => 'import_export' === Param::get( 'view' ),
			'version-control'            => 'version_control' === Param::get( 'view' ) || 'rank-math-status' === Param::get( 'page' ),
			'general-settings'           => 'rank-math-options-general' === Param::get( 'page' ),
			'titles-meta'                => 'rank-math-options-titles' === Param::get( 'page' ),
			'sitemap-general'            => 'rank-math-options-sitemap' === Param::get( 'page' ),
			'role-manager'               => 'rank-math-role-manager' === Param::get( 'page' ),
			'seo-analysis'               => 'rank-math-seo-analysis' === Param::get( 'page' ),
			'content-ai-restore-credits' => 'rank-math-content-ai-page' === Param::get( 'page' ),
		];

		$link = KB::get( 'knowledgebase', 'RM Header KB Icon' );
		foreach ( $links as $key => $value ) {
			if ( $value ) {
				$link = KB::get( $key, 'Admin Bar ' . ucwords( str_replace( '-', ' ', $key ) ) );
				break;
			}
		}

		return $link;
	}

	/**
	 * Get Current Screen ID.
	 */
	private function get_current_screen() {
		$screen = get_current_screen();
		if ( empty( $screen ) ) {
			return '';
		}

		return $screen->id;
	}
}
PK     “ŠU]‚ØúiH  iH    includes/admin/class-admin.phpnu „[µü¤        <?php
/**
 * The admin-specific functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Runner;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 *
 * @codeCoverageIgnore
 */
class Admin implements Runner {

	use Hooker;
	use Ajax;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'init', 'flush', 999 );
		$this->filter( 'user_contactmethods', 'update_user_contactmethods' );
		$this->action( 'profile_update', 'profile_update', 10, 3 );
		$this->action( 'admin_footer', 'convert_additional_profile_url_to_textarea' );
		$this->action( 'save_post', 'canonical_check_notice' );
		$this->action( 'cmb2_save_options-page_fields', 'update_is_configured_value', 10, 2 );
		$this->filter( 'action_scheduler_pastdue_actions_check_pre', 'as_exclude_pastdue_actions' );
		$this->filter( 'rank_math/pro_badge', 'offer_icon' );
		$this->filter( 'load_script_translation_file', 'load_script_translation_file', 10, 3 );

		// Use woocommerce textdomain for the Actiion scheduler strings.
		$this->filter( 'gettext', 'remap_action_scheduler_translation', 10, 3 );
		$this->filter( 'gettext_with_context', 'remap_action_scheduler_translation_with_context', 10, 4 );

		// AJAX.
		$this->ajax( 'search_pages', 'search_pages' );
		$this->ajax( 'is_keyword_new', 'is_keyword_new' );
		$this->ajax( 'save_checklist_layout', 'save_checklist_layout' );
		$this->ajax( 'deactivate_plugins', 'deactivate_plugins' );
	}

	/**
	 * Update user profile.
	 *
	 * @param int   $user_id      The user ID.
	 * @param array $old_user_data Old user data.
	 * @param array $userdata      User data.
	 */
	public function profile_update( $user_id, $old_user_data, $userdata ) {
		if ( ! current_user_can( 'edit_user', $user_id ) ) {
			return false;
		}

		$nonce = Param::post( '_wpnonce', '', FILTER_SANITIZE_SPECIAL_CHARS );
		if ( ! wp_verify_nonce( $nonce, 'update-user_' . $user_id ) ) {
			return false;
		}

		$twitter                 = Param::post( 'twitter', '', FILTER_SANITIZE_URL );
		$facebook                = Param::post( 'facebook', '', FILTER_SANITIZE_URL );
		$additional_profile_urls = Param::post( 'additional_profile_urls', '' );

		if ( $additional_profile_urls ) {
			$additional_profile_urls = array_map( 'sanitize_url', explode( PHP_EOL, $additional_profile_urls ) );
			$additional_profile_urls = implode( ' ', $additional_profile_urls );
		}

		update_user_meta( $user_id, 'twitter', $twitter );
		update_user_meta( $user_id, 'facebook', $facebook );
		update_user_meta( $user_id, 'additional_profile_urls', $additional_profile_urls );
	}

	/**
	 * Flush the rewrite rules once if the rank_math_flush_rewrite option is set.
	 */
	public function flush() {
		if ( get_option( 'rank_math_flush_rewrite' ) ) {
			flush_rewrite_rules();
			delete_option( 'rank_math_flush_rewrite' );
		}

		if ( 'rank-math' === Param::get( 'page' ) && get_option( 'rank_math_view_modules' ) ) {
			delete_option( 'rank_math_view_modules' );
		}
	}

	/**
	 * Add Facebook and Twitter as user contact methods.
	 *
	 * @param array $contactmethods Current contact methods.
	 * @return array New contact methods with extra items.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 */
	public function update_user_contactmethods( $contactmethods ) {
		$contactmethods['twitter']                 = esc_html__( 'Twitter username (without @)', 'seo-by-rank-math' );
		$contactmethods['facebook']                = esc_html__( 'Facebook profile URL', 'seo-by-rank-math' );
		$contactmethods['additional_profile_urls'] = esc_html__( 'Additional profile URLs', 'seo-by-rank-math' );

		return $contactmethods;
	}

	/**
	 * Display admin header.
	 *
	 * @param bool $show_breadcrumbs Determines whether to show breadcrumbs or not.
	 */
	public function display_admin_header( $show_breadcrumbs = true ) {
		$nav_tabs = new Admin_Header();
		$nav_tabs->display( $show_breadcrumbs );
	}

	/**
	 * Display admin breadcrumbs.
	 */
	public function display_admin_breadcrumbs() {
		$nav_tabs = new Admin_Breadcrumbs();
		$nav_tabs->display();
	}

	/**
	 * Display dashboard tabs.
	 */
	public function display_dashboard_nav() {
		$nav_tabs = new Admin_Dashboard_Nav();
		$nav_tabs->display();
	}

	/**
	 * Show notice when canonical URL is not a valid URL.
	 *
	 * @param int $post_id The post ID.
	 */
	public function canonical_check_notice( $post_id ) {
		$post_type  = get_post_type( $post_id );
		$is_allowed = in_array( $post_type, Helper::get_allowed_post_types(), true );

		if ( ! $is_allowed || Helper::is_autosave() || Helper::is_ajax() || isset( $_REQUEST['bulk_edit'] ) ) { // phpcs:ignore
			return $post_id;
		}

		if ( ! empty( $_POST['rank_math_canonical_url'] ) && false === Param::post( 'rank_math_canonical_url', false, FILTER_VALIDATE_URL ) ) { // phpcs:ignore
			$message = esc_html__( 'The canonical URL you entered does not seem to be a valid URL. Please double check it in the SEO meta box &raquo; Advanced tab.', 'seo-by-rank-math' );
			Helper::add_notification( $message, [ 'type' => 'error' ] );
		}
	}

	/**
	 * Save checklist layout.
	 */
	public function save_checklist_layout() {

		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'onpage_general' );

		if ( empty( $_POST['layout'] ) || ! is_array( $_POST['layout'] ) ) {
			return;
		}

		$layout  = Param::post( 'layout', [], FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
		$allowed = [
			'basic'               => 1,
			'advanced'            => 1,
			'title-readability'   => 1,
			'content-readability' => 1,
		];
		$layout  = array_intersect_key( $layout, $allowed );

		update_user_meta( get_current_user_id(), 'rank_math_metabox_checklist_layout', $layout );
		exit;
	}

	/**
	 * Ajax handler to search pages based on the searched string. Used in the Local SEO Settings.
	 */
	public function search_pages() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'general' );

		$term = Param::get( 'term' );
		if ( empty( $term ) ) {
			exit;
		}

		global $wpdb;
		$pages = DB_Helper::get_results(
			$wpdb->prepare(
				"SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_type = 'page' AND post_status = 'publish' AND post_title LIKE %s",
				"%{$wpdb->esc_like( $term )}%"
			),
			ARRAY_A
		);

		$data = [];
		foreach ( $pages as $page ) {
			$data[] = [
				'id'   => $page['ID'],
				'text' => $page['post_title'],
				'url'  => get_permalink( $page['ID'] ),
			];
		}

		wp_send_json( [ 'results' => $data ] );
	}

	/**
	 * Check if the keyword has been used before for another post.
	 */
	public function is_keyword_new() {
		global $wpdb;

		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'onpage_general' );

		$result = [ 'isNew' => true ];
		if ( empty( $_GET['keyword'] ) ) {
			$this->success( $result );
		}

		$keyword     = Param::get( 'keyword', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
		$object_id   = Param::get( 'objectID', 0, FILTER_VALIDATE_INT );
		$object_type = Param::get( 'objectType', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		$column_ids  = [
			'post' => 'ID',
			'term' => 'term_id',
			'user' => 'ID',
		];
		if ( ! in_array( $object_type, [ 'post', 'term', 'user' ], true ) ) {
			$object_type = 'post';
		}

		$main = $wpdb->{$object_type . 's'};
		$meta = $wpdb->{$object_type . 'meta'};

		$query = sprintf( 'select %2$s.%1$s from %2$s inner join %3$s on %2$s.%1$s = %3$s.%4$s_id where ', $column_ids[ $object_type ], $main, $meta, $object_type );
		if ( 'post' === $object_type ) {
			$query .= sprintf( '%s.post_status = \'publish\' and ', $main );
		}
		$query .= sprintf( '%1$s.meta_key = \'rank_math_focus_keyword\' and ( %1$s.meta_value = %2$s OR %1$s.meta_value like %3$s ) and %1$s.%4$s_id != %5$d', $meta, '%s', '%s', $object_type, $object_id );

		$data = DB_Helper::get_row( $wpdb->prepare( $query, $keyword, $wpdb->esc_like( $keyword ) . ',%' ) );

		$result['isNew'] = empty( $data );

		$this->success( $result );
	}

	/**
	 * Get link suggestions for the current post.
	 *
	 * @param  int|WP_Post $post Current post.
	 * @return array
	 */
	public function get_link_suggestions( $post ) {
		global $pagenow;

		if ( 'post-new.php' === $pagenow ) {
			return;
		}

		$output = [];
		$post   = get_post( $post );
		$args   = [
			'post_type'      => $post->post_type,
			'post__not_in'   => [ $post->ID ],
			'posts_per_page' => 5,
			'meta_key'       => 'rank_math_pillar_content',
			'meta_value'     => 'on',
			'tax_query'      => [ 'relation' => 'OR' ],
		];

		$taxonomies = Helper::get_object_taxonomies( $post, 'names' );
		$taxonomies = array_filter( $taxonomies, [ $this, 'is_taxonomy_allowed' ] );

		foreach ( $taxonomies as $taxonomy ) {
			$this->set_term_query( $args, $post->ID, $taxonomy );
		}

		$posts = get_posts( $args );
		foreach ( $posts as $related_post ) {
			$item = [
				'title'          => get_the_title( $related_post->ID ),
				'url'            => get_permalink( $related_post->ID ),
				'post_id'        => $related_post->ID,
				'focus_keywords' => get_post_meta( $related_post->ID, 'rank_math_focus_keyword', true ),
			];

			$item['focus_keywords'] = empty( $item['focus_keywords'] ) ? [] : explode( ',', $item['focus_keywords'] );

			$output[] = $item;
		}

		return $output;
	}

	/**
	 * Is taxonomy allowed
	 *
	 * @param string $taxonomy Taxonomy to check.
	 *
	 * @return bool
	 */
	public function is_taxonomy_allowed( $taxonomy ) {
		$exclude_taxonomies = [ 'post_format', 'product_shipping_class' ];
		if ( Str::starts_with( 'pa_', $taxonomy ) || in_array( $taxonomy, $exclude_taxonomies, true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Remap Action Scheduler translation to use WooCommerce's text domain (no context).
	 *
	 * @param string $translated Translated text.
	 * @param string $text       Original text.
	 * @param string $domain     Text domain.
	 * @return string Modified translated text.
	 */
	public function remap_action_scheduler_translation( $translated, $text, $domain ) {
		if ( ! self::should_remap_action_scheduler_translation( $domain ) ) {
			return $translated;
		}

		return self::get_translated_string( $translated, $text );
	}

	/**
	 * Remap Action Scheduler translation to use WooCommerce's text domain (with context).
	 *
	 * @param string $translated Translated text.
	 * @param string $text       Original text.
	 * @param string $context    Context information for translators.
	 * @param string $domain     Text domain.
	 * @return string Modified translated text.
	 */
	public function remap_action_scheduler_translation_with_context( $translated, $text, $context, $domain ) {
		if ( ! self::should_remap_action_scheduler_translation( $domain ) ) {
			return $translated;
		}

		return self::get_translated_string( $translated, $text, $context );
	}

	/**
	 * Determine whether to remap Action Scheduler translations to WooCommerce's text domain.
	 *
	 * @param string $domain Text domain.
	 * @return bool True if the translation should be remapped, false otherwise.
	 */
	private static function should_remap_action_scheduler_translation( $domain ) {
		return 'action-scheduler' === $domain && Helper::is_woocommerce_active();
	}

	/**
	 * Get the translated string from WooCommerce's text domain if the original string matches an Action Scheduler string.
	 *
	 * @param string      $translated Translated text.
	 * @param string      $text       Original text.
	 * @param string|null $context    Context information for translators.
	 *
	 * @return string Modified translated text.
	 */
	private static function get_translated_string( $translated, $text, $context = null ) {
		$translations = get_translations_for_domain( 'woocommerce' );
		$translation  = $translations->translate( $text, $context );
		return $translation !== $text ? $translation : $translated;
	}

	/**
	 * Set term query.
	 *
	 * @param array  $query    Array of query.
	 * @param int    $post_id  Post ID to get terms from.
	 * @param string $taxonomy Taxonomy to get terms for.
	 */
	private function set_term_query( &$query, $post_id, $taxonomy ) {
		$terms = wp_get_post_terms( $post_id, $taxonomy, [ 'fields' => 'ids' ] );
		if ( empty( $terms ) || is_wp_error( $terms ) ) {
			return;
		}

		$query['tax_query'][] = [
			'taxonomy' => $taxonomy,
			'field'    => 'term_id',
			'terms'    => $terms,
		];
	}

	/**
	 * Output link suggestions.
	 *
	 * @deprecated 1.0.273 Link suggestions are now rendered by the React component.
	 *
	 * @param  array $suggestions Link items.
	 * @return string
	 */
	public function get_link_suggestions_html( $suggestions ) {
		_deprecated_function( __METHOD__, '1.0.273' );
		return '';
	}

	/**
	 * Updates the is_configured value.
	 *
	 * @param int    $object_id The ID of the current object.
	 * @param string $cmb_id    The current box ID.
	 */
	public function update_is_configured_value( $object_id, $cmb_id ) {
		if ( 0 !== strpos( $cmb_id, 'rank_math' ) && 0 !== strpos( $cmb_id, 'rank-math' ) ) {
			return;
		}

		Helper::is_configured( true );
	}

	/**
	 * Deactivate plugin.
	 */
	public function deactivate_plugins() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		if ( ! current_user_can( 'activate_plugins' ) ) {
			$this->error( esc_html__( 'You are not authorized to perform this action.', 'seo-by-rank-math' ) );
		}
		$plugin = Param::post( 'plugin', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		if ( 'all' !== $plugin ) {
			deactivate_plugins( $plugin );
			die( '1' );
		}

		Importers\Detector::deactivate_all();
		die( '1' );
	}

	/**
	 * Action Scheduler: exclude our actions from the past-due checker.
	 * Since this is a *_pre hook, it replaces the original checker.
	 *
	 * We first do the same check as what ActionScheduler_AdminView->check_pastdue_actions() does,
	 * but then we also count how many of those past-due actions are ours.
	 *
	 * @param null $value Null value.
	 */
	public function as_exclude_pastdue_actions( $value ) {
		$query_args = [
			'date'     => as_get_datetime_object( time() - DAY_IN_SECONDS ),
			'status'   => \ActionScheduler_Store::STATUS_PENDING,
			'per_page' => 1,
		];

		$store               = \ActionScheduler_Store::instance();
		$num_pastdue_actions = (int) $store->query_actions( $query_args, 'count' );

		if ( 0 !== $num_pastdue_actions ) {
			$query_args['group']    = 'rank-math';
			$num_pastdue_rm_actions = (int) $store->query_actions( $query_args, 'count' );

			$num_pastdue_actions -= $num_pastdue_rm_actions;
		}

		$threshold_seconds = (int) apply_filters( 'action_scheduler_pastdue_actions_seconds', DAY_IN_SECONDS );
		$threshold_min     = (int) apply_filters( 'action_scheduler_pastdue_actions_min', 1 );

		$check = ( $num_pastdue_actions >= $threshold_min );
		return (bool) apply_filters( 'action_scheduler_pastdue_actions_check', $check, $num_pastdue_actions, $threshold_seconds, $threshold_min );
	}

	/**
	 * Check and print the Anniversary icon in the header of Rank Math's setting pages.
	 */
	public static function offer_icon() {
		if ( ! current_user_can( 'manage_options' ) || defined( 'RANK_MATH_PRO_FILE' ) ) {
			return;
		}

		// Holiday Season related variables.
		$time                   = time();
		$current_year           = 2025;
		$anniversary_start_time = gmmktime( 17, 00, 00, 10, 29, $current_year ); // 29 Oct.
		$anniversary_end_time   = gmmktime( 17, 00, 00, 12, 03, $current_year ); // 30 Nov.
		$holiday_start_time     = gmmktime( 17, 00, 00, 12, 24, $current_year ); // 20 Dec.
		$holiday_end_time       = gmmktime( 17, 00, 00, 01, 07, 2026 ); // 07 Jan.

		ob_start();
		if (
			( $time > $anniversary_start_time && $time < $anniversary_end_time ) ||
			( $time > $holiday_start_time && $time < $holiday_end_time )
		) { ?>
			<a href="<?php echo esc_url( \RankMath\KB::get( 'pro', 'Header Offer Icon' ) ); ?>" target="_blank" class="rank-math-tooltip bottom" style="margin-left:5px;">
				ðŸŽ‰
				<span><?php esc_attr_e( 'Exclusive Offer!', 'seo-by-rank-math' ); ?></span>
			</a>
			<?php
		}

		return ob_get_clean();
	}

	/**
	 * Code to convert Addiontal Profile URLs from input type text to textarea.
	 */
	public function convert_additional_profile_url_to_textarea() {
		if ( ! Admin_Helper::is_user_edit() ) {
			return;
		}

		$field_description = __( 'Additional Profiles to add in the <code>sameAs</code> Schema property.', 'seo-by-rank-math' );
		?>
		<script type="text/javascript">
			( function( $ ) {
				$( function() {
					const twitterWrapper = $( '.user-twitter-wrap' );
					twitterWrapper.before( '<tr><th><h2 style="margin: 0;">Rank Math SEO</h2></th><td></td></tr>' );

					const additionalProfileField = $( '#additional_profile_urls' );
					if ( ! additionalProfileField.length ) {
						return
					}

					var $txtarea = $( '<textarea />' );
					$txtarea.attr( 'id', additionalProfileField[0].id );
					$txtarea.attr( 'name', additionalProfileField[0].name );
					$txtarea.attr( 'rows', 5 );
					$txtarea.val( additionalProfileField[0].value.replaceAll( " ", "\n" ) );
					additionalProfileField.replaceWith( $txtarea );

					$( '<p class="description"><?php echo wp_kses_post( $field_description ); ?></p>' ).insertAfter( $txtarea );
				} );
			})(jQuery);
		</script>
		<?php
	}

	/**
	 * Function to replace domain with seo-by-rank-math in translation file.
	 *
	 * @param string|false $file   Path to the translation file to load. False if there isn't one.
	 * @param string       $handle Name of the script to register a translation domain to.
	 * @param string       $domain The text domain.
	 */
	public function load_script_translation_file( $file, $handle, $domain ) {
		if ( 'rank-math' !== $domain ) {
			return $file;
		}

		$data                       = explode( '/', $file );
		$data[ count( $data ) - 1 ] = preg_replace( '/rank-math/', 'seo-by-rank-math', $data[ count( $data ) - 1 ], 1 );
		return implode( '/', $data );
	}
}
PK     “ŠU]ŒÛ        includes/admin/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]Gf\L„  „  %  includes/admin/class-registration.phpnu „[µü¤        <?php
/**
 * The Setup Wizard - configure the SEO settings in just a few steps.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Param;
use RankMath\Helpers\Security;
use RankMath\Google\Authentication;

defined( 'ABSPATH' ) || exit;

/**
 * Registration class.
 */
class Registration {

	use Hooker;

	/**
	 * Page slug.
	 *
	 * @var string
	 */
	private $slug = 'rank-math-registration';

	/**
	 * Hold current step.
	 *
	 * @var string
	 */
	protected $step = '';

	/**
	 * Current step slug.
	 *
	 * @var string
	 */
	protected $step_slug = '';

	/**
	 * Is registration invalid.
	 *
	 * @var bool
	 */
	public $invalid = false;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->step      = 'register';
		$this->step_slug = 'register';
		$this->invalid   = Helper::is_invalid_registration();

		if ( $this->invalid ) {
			$this->action( 'admin_menu', 'admin_menu' );
			$this->action( 'admin_init', 'redirect_to_welcome' );
			$this->action( 'admin_post_rank_math_save_registration', 'save_registration' );
			$this->action( 'admin_post_rank_math_skip_wizard', 'skip_wizard' );
			$this->action( 'admin_init', 'render_page', 30 );
		}

		$this->action( 'admin_init', 'handle_registration' );
		$this->filter( 'allowed_redirect_hosts', 'allowed_redirect_hosts' );
	}

	/**
	 * Add allowed redirect hosts.
	 *
	 * @param  array $hosts Allowed hosts.
	 * @return array
	 */
	public function allowed_redirect_hosts( $hosts ) {
		$hosts[] = 'rankmath.com';
		return $hosts;
	}

	/**
	 * Check for activation.
	 */
	public function handle_registration() {

		// Bail if already connected.
		if ( Helper::is_site_connected() ) {
			return;
		}

		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}

		$nonce = Param::get( 'nonce' );
		if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_register_product' ) ) {
			return;
		}

		$status = Param::get( 'rankmath_connect' );
		if ( $status && $redirect_to = $this->get_registration_url( $status ) ) { //phpcs:ignore
			Helper::redirect( $redirect_to );
			exit;
		}
	}

	/**
	 * Handle activation.
	 *
	 * @param  string $status Status parameter.
	 */
	private function get_registration_url( $status ) {
		if ( 'cancel' === $status ) {
			// User canceled activation.
			Helper::add_notification( __( 'Rank Math plugin could not be connected.', 'seo-by-rank-math' ), [ 'type' => 'error' ] );
			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth' ] );
		}

		if ( 'banned' === $status ) {
			// User or site banned.
			Helper::add_notification( __( 'Unable to connect Rank Math.', 'seo-by-rank-math' ), [ 'type' => 'error' ] );
			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth' ] );
		}

		if ( 'ok' === $status && $auth_data = $this->get_registration_params() ) { // phpcs:ignore
			Admin_Helper::get_registration_data(
				[
					'username'  => $auth_data['username'],
					'email'     => $auth_data['email'],
					'api_key'   => $auth_data['api_key'],
					'plan'      => $auth_data['plan'],
					'connected' => true,
					'site_url'  => Helper::get_home_url(),
				]
			);

			if ( 1 === absint( Param::get( 'analytics' ) ) ) {
				wp_redirect( Authentication::get_auth_url() ); //phpcs:ignore -- This is used to redirect to the external url.
				exit;
			}

			// Redirect to the wizard is registration successful.
			if ( Param::get( 'page' ) === 'rank-math-registration' ) {
				return Helper::get_admin_url( 'wizard' );
			}

			return Security::remove_query_arg_raw( [ 'rankmath_connect', 'rankmath_auth', 'nonce' ] );
		}

		return false;
	}

	/**
	 * Check if 'rankmath_auth' contains all the data we need, in the
	 * correct format.
	 *
	 * @return bool|array Whether the input is valid.
	 */
	private function get_registration_params() {
		$params = Param::get( 'rankmath_auth' );
		if ( false === $params ) {
			return false;
		}

		$params = json_decode( base64_decode( $params ), true ); // phpcs:ignore -- Verified as safe usage.
		if (
			! is_array( $params ) ||
			! isset( $params['username'] ) ||
			! isset( $params['email'] ) ||
			! isset( $params['api_key'] )
		) {
			return false;
		}

		return $params;
	}

	/**
	 * Redirect to welcome page.
	 *
	 * Redirect the user to the welcome page after plugin activation.
	 */
	public function redirect_to_welcome() {
		if ( ! $this->can_redirect() ) {
			return;
		}

		$url = '';
		if ( $this->invalid ) {
			$url = 'registration';
		} elseif ( ! get_option( 'rank_math_wizard_completed' ) ) {
			$url = 'wizard';
		}

		Helper::redirect( Helper::get_admin_url( $url ) );
		exit;
	}

	/**
	 * Add menu items.
	 */
	public function admin_menu() {
		add_menu_page(
			esc_html__( 'Rank Math', 'seo-by-rank-math' ),
			esc_html__( 'Rank Math SEO', 'seo-by-rank-math' ),
			'manage_options',
			$this->slug,
			[ $this, 'render_page' ]
		);
	}

	/**
	 * Output the admin page.
	 */
	public function render_page() {

		// Early bail if we're not on the right page.
		if ( Param::get( 'page' ) !== $this->slug ) {
			return;
		}

		if ( ob_get_length() ) {
			ob_end_clean();
		}

		$assets = new Assets();
		$assets->register();

		wp_styles()->done  = [];
		wp_scripts()->done = [];

		// Wizard.
		wp_enqueue_media();
		wp_enqueue_style( 'rank-math-wizard', rank_math()->plugin_url() . 'assets/admin/css/setup-wizard.css', [ 'wp-admin', 'buttons', 'wp-components', 'rank-math-common', 'rank-math-cmb2' ], rank_math()->version );
		wp_enqueue_script( 'rank-math-registration', rank_math()->plugin_url() . 'assets/admin/js/registration.js', [ 'lodash', 'react', 'react-dom', 'wp-element', 'wp-data', 'rank-math-components' ], rank_math()->version, true );
		Helper::add_json( 'logo', esc_url( rank_math()->plugin_url() . 'assets/admin/img/logo.svg' ) );
		Helper::add_json( 'registerNonce', wp_create_nonce( 'rank-math-wizard' ) );
		Helper::add_json( 'adminUrl', esc_url( admin_url( 'admin-post.php' ) ) );
		Helper::add_json( 'isSiteUrlValid', Admin_Helper::is_site_url_valid() );
		Helper::add_json( 'optionsPage', esc_url( admin_url( 'options-general.php' ) ) );

		ob_start();

		/**
		 * Start the actual page content.
		 */
		include_once rank_math()->admin_dir() . 'wizard/views/content.php';
		exit;
	}

	/**
	 * Execute save handler for current step.
	 */
	public function save_registration() {
		// If no form submission, bail.
		$referer = Param::post( '_wp_http_referer', get_dashboard_url() );
		if ( Param::post( 'step' ) !== 'register' ) {
			return Helper::redirect( $referer );
		}

		check_admin_referer( 'rank-math-wizard', 'security' );
		if ( ! Helper::has_cap( 'general' ) ) {
			return Helper::redirect( $referer );
		}

		$this->redirect_to_connect( $_POST );
	}

	/**
	 * Skip wizard handler.
	 */
	public function skip_wizard() {
		check_admin_referer( 'rank-math-wizard', 'security' );
		if ( ! Helper::has_cap( 'general' ) ) {
			exit;
		}
		add_option( 'rank_math_registration_skip', true );
		Helper::redirect( Helper::get_admin_url( 'wizard' ) );
		exit;
	}

	/**
	 * Authenticate registration.
	 *
	 * @param array $values Array of values for the step to process.
	 */
	private function redirect_to_connect( $values ) {
		if ( ! isset( $values['rank_math_activate'] ) ) {
			Admin_Helper::deregister_user();
			return;
		}

		$url = Admin_Helper::get_activate_url( Helper::get_admin_url( 'registration' ) );
		wp_safe_redirect( $url );
		die();
	}

	/**
	 * Can redirect to setup/registration page after install.
	 *
	 * @return bool
	 */
	private function can_redirect() {
		if ( ! get_transient( '_rank_math_activation_redirect' ) ) {
			return false;
		}

		delete_transient( '_rank_math_activation_redirect' );

		if ( ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], [ 'rank-math-registration', 'rank-math-wizard' ], true ) ) || ! current_user_can( 'manage_options' ) ) {
			return false;
		}

		return true;
	}
}
PK     “ŠU]SÙq®¯   ¯   "  includes/admin/views/dashboard.phpnu „[µü¤        <?php
/**
 * Dashboard page template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;
?>
<div id="rank-math-dashboard-page"></div>
PK     “ŠU]ŒÛ        includes/admin/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]U¸#  #     includes/admin/class-notices.phpnu „[µü¤        <?php
/**
 * The admin notices.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Runner;
use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Sitepress;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Notices class.
 */
class Notices implements Runner {

	use Hooker;
	use Ajax;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'admin_init', 'notices' );
		$this->action( 'wp_helpers_notification_dismissed', 'notice_dismissible' );
	}

	/**
	 * Run all notices routine.
	 */
	public function notices() {
		$this->is_plugin_configured();
		$this->new_post_type();
		if ( Sitepress::get()->is_active() ) {
			$this->convert_wpml_settings();
			$this->display_wpml_notice();
		}
		$this->permalink_changes_warning();
		$this->react_settings_ui_notice();
	}

	/**
	 * Show a persistent admin notice when the React Settings UI is disabled.
	 *
	 * Adds a dismissible, persistent error when the temporary option to
	 * disable the React-based Settings UI is turned off. The notice is removed
	 * when the React Settings UI is enabled again.
	 *
	 * @since 1.0.255
	 * @return void
	 */
	private function react_settings_ui_notice() {
		// Only relevant for admins in the dashboard context.
		if ( ! current_user_can( 'manage_options' ) ) {
			return;
		}

		$notice_id = 'rank_math_react_settings_ui_disabled';

		if ( ! Helper::is_react_enabled() ) {
			$message = sprintf(
				// Translators: 1: opening anchor tag, 2: closing anchor tag.
				__( 'The React Settings UI is currently disabled, and the classic settings interface is active. Note: The PHP-based settings interface will be removed in an upcoming release. %1$sEnable the React Settings UI%2$s to switch back.', 'seo-by-rank-math' ),
				'<a href="' . esc_url( Helper::get_dashboard_url() ) . '">',
				'</a>'
			);

			Helper::add_notification(
				$message,
				[
					'type' => 'error',
					'id'   => $notice_id,
				]
			);
			return;
		}

		// React UI is enabled; ensure any prior notice is removed.
		Helper::remove_notification( $notice_id );
	}

	/**
	 * Set known post type after notice dismissal.
	 *
	 * @param string $notification_id Notification id.
	 */
	public function notice_dismissible( $notification_id ) {
		if ( 'new_post_type' === $notification_id ) {
			$current = get_post_types( [ 'public' => true ] );
			update_option( 'rank_math_known_post_types', $current );

			if ( Helper::is_module_active( 'sitemap' ) ) {
				\RankMath\Sitemap\Cache::invalidate_storage();
			}
			return;
		}

		if ( 'display_wpml_notice' === $notification_id ) {
			update_option( 'rank_math_wpml_notice_dismissed', true );
		}

		if ( 'rank-math-site-url-mismatch' === $notification_id ) {
			update_option( 'rank_math_siteurl_mismatch_notice_dismissed', true );
		}
	}

	/**
	 * If plugin configuration not done.
	 */
	private function is_plugin_configured() {
		if ( 'mts-install-plugins' === Param::get( 'page' ) ) {
			return;
		}

		if ( rank_math()->notification->get_notification_by_id( 'plugin_not_setup' ) && ! Helper::is_configured() ) {
			$message = sprintf(
				'<b>Warning!</b> You didn\'t set up your Rank Math SEO plugin yet, which means you\'re missing out on essential settings and tweaks! <a href="%s">Complete your setup by clicking here.</a>',
				Helper::get_admin_url( 'wizard' )
			);
			Helper::add_notification(
				$message,
				[
					'type' => 'warning',
					'id'   => 'plugin_not_setup',
				]
			);
		}
	}

	/**
	 * Add notification if a new post type is detected.
	 */
	private function new_post_type() {
		$known   = get_option( 'rank_math_known_post_types', [] );
		$current = Helper::get_accessible_post_types();
		$new     = array_diff( $current, $known );

		if ( empty( $new ) ) {
			return;
		}

		$list = '<code>' . implode( '</code>, <code>', $new ) . '</code>';
		/* Translators: placeholder is the post type name. */
		$message = __( 'Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href="%2$s">Titles &amp; Meta page</a>.', 'seo-by-rank-math' );
		$count   = count( $new );
		if ( $count > 1 ) {
			/* Translators: placeholder is the post type names separated with commas. */
			$message = __( 'Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href="%2$s">Titles &amp; Meta page</a>.', 'seo-by-rank-math' );
		}

		$message = $this->do_filter( 'admin/notice/new_post_type', $message, $count );
		$message = sprintf( wp_kses_post( $message ), $list, Helper::get_settings_url( 'titles', 'post-type-' . key( $new ) ), Helper::get_settings_url( 'sitemap', 'post-type-' . key( $new ) ) );
		Helper::add_notification(
			$message,
			[
				'type' => 'info',
				'id'   => 'new_post_type',
			]
		);
	}

	/**
	 * Function to show Show String Translation plugin notice and convert the settings.
	 */
	private function convert_wpml_settings() {
		if ( ! function_exists( 'icl_get_languages' ) || get_option( 'rank_math_wpml_data_converted' ) ) {
			return;
		}

		$languages = icl_get_languages(); // @phpstan-ignore-line
		foreach ( $languages as $lang_code => $language ) {

			foreach ( [ 'general', 'titles' ] as $option ) {
				$data = get_option( "rank-math-options-{$option}_$lang_code" );
				if ( empty( $data ) ) {
					continue;
				}

				$common_data = array_intersect( array_keys( $data ), $this->get_translatable_options() );
				if ( empty( $common_data ) ) {
					continue;
				}

				foreach ( $common_data as $option_key ) {
					$string_id = icl_get_string_id( Helper::get_settings( "$option.$option_key" ), "admin_texts_rank-math-options-$option" ); // @phpstan-ignore-line
					icl_add_string_translation( $string_id, $lang_code, $data[ $option_key ], 10 ); // @phpstan-ignore-line
				}
			}
		}

		update_option( 'rank_math_wpml_data_converted', true );
	}

	/**
	 * Display WPML notice.
	 *
	 * @return void
	 */
	private function display_wpml_notice() {
		if ( function_exists( 'icl_add_string_translation' ) || get_option( 'rank_math_wpml_notice_dismissed' ) ) {
			return;
		}

		$sitepress      = Sitepress::get()->get_var();
		$setup_complete = $sitepress->get_setting( 'setup_complete', false );

		if ( ! $setup_complete ) {
			return;
		}

		Helper::add_notification(
			__( 'Please activate the WPML String Translation plugin to convert Rank Math Setting values in different languages.', 'seo-by-rank-math' ),
			[
				'type' => 'error',
				'id'   => 'display_wpml_notice',
			]
		);
	}

	/**
	 * Get Translatable option keys.
	 *
	 * @return array
	 */
	private function get_translatable_options() {
		$options = [
			'img_alt_format',
			'img_title_format',
			'breadcrumbs_separator',
			'breadcrumbs_prefix',
			'breadcrumbs_home_link',
			'breadcrumbs_home_label',
			'breadcrumbs_archive_format',
			'breadcrumbs_search_format',
			'breadcrumbs_404_label',
			'rss_before_content',
			'rss_after_content',

			'title_separator',
			'homepage_title',
			'homepage_description',
			'homepage_facebook_title',
			'homepage_facebook_description',
			'author_archive_title',
			'author_archive_description',
			'date_archive_title',
			'date_archive_description',
			'search_title',
			'404_title',
		];

		$post_types = Helper::get_accessible_post_types();
		foreach ( $post_types as $post_type => $data ) {
			$options = array_merge(
				$options,
				[
					"pt_{$post_type}_title",
					"pt_{$post_type}_description",
					"pt_{$post_type}_archive_title",
					"pt_{$post_type}_archive_description",
					"pt_{$post_type}_default_snippet_name",
					"pt_{$post_type}_default_snippet_desc",
				]
			);
		}

		$taxonomies = Helper::get_accessible_taxonomies();
		foreach ( $taxonomies as $taxonomy => $data ) {
			$options = array_merge(
				$options,
				[
					"tax_{$taxonomy}_title",
					"tax_{$taxonomy}_description",
				]
			);
		}

		return $options;
	}

	/**
	 * Maybe add notice on Permalinks page about the risks of changing the permalinks on a live site.
	 *
	 * @return void
	 */
	public function permalink_changes_warning() {
		global $pagenow;
		if ( 'options-permalink.php' !== $pagenow ) {
			return;
		}

		$this->action( 'admin_enqueue_scripts', 'add_permalink_changes_warning', 12 );
	}

	/**
	 * Add the notice for the Permalinks page.
	 *
	 * @return void
	 */
	public function add_permalink_changes_warning() {
		wp_enqueue_script( 'rank-math-core-permalink-settings' );
		$message = __( '<b>Rank Math Warning:</b> Changing the permalinks on a live, indexed site may result in serious loss of traffic if done incorrectly. Consider adding a new redirection from the old URL format to the new one.', 'seo-by-rank-math' );
		Helper::add_notification(
			$message,
			[
				'type'    => 'warning',
				'screen'  => 'options-permalink',
				'classes' => 'hidden rank-math-notice-permalinks-warning is-dismissible',
			]
		);
	}
}
PK     “ŠU]­}z¡»%  »%  *  includes/admin/class-sanitize-settings.phpnu „[µü¤        <?php
/**
 * The option center of the plugin.
 *
 * @since      1.0.250
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Str;

/**
 * Settings Sanitizer for React-based settings.
 */
class Sanitize_Settings {

	/**
	 * Sanitize all settings data using field types.
	 *
	 * @param array $settings_data Array of setting data [field_id => value].
	 * @param array $field_types   Array of field types [field_id => type].
	 *
	 * @return array Sanitized settings data.
	 */
	public static function sanitize( $settings_data, $field_types ) {
		$sanitized = [];

		foreach ( $settings_data as $field_id => $value ) {
			$type                   = $field_types[ $field_id ] ?? 'text';
			$sanitized[ $field_id ] = self::sanitize_field( $value, $type, $field_id );
		}

		return $sanitized;
	}

	/**
	 * Sanitize an individual field based on its type.
	 *
	 * @param mixed  $value    Field value.
	 * @param string $type     Field type.
	 * @param string $field_id Field ID.
	 *
	 * @return mixed Sanitized value.
	 */
	public static function sanitize_field( $value, $type, $field_id ) {
		// First: Check field ID-specific logic.
		$field_specific = apply_filters( 'rank_math/settings/sanitize_fields', self::sanitize_by_field_id( $value, $field_id ), $value, $field_id );
		if ( $field_specific !== null ) {
			return $field_specific;
		}

		switch ( $type ) {
			case 'text':
				return is_array( $value ) ? array_map( [ __CLASS__, 'sanitize_textfield' ], $value ) : self::sanitize_textfield( $value );

			case 'textarea':
				return is_array( $value ) ? array_map( 'wp_kses_post', $value ) : wp_kses_post( $value );

			case 'toggle':
				return $value ? 'on' : 'off';

			case 'checkbox':
			case 'checkboxlist':
				return is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : [];

			case 'select':
			case 'selectSearch':
			case 'selectVariable':
			case 'searchPage':
			case 'toggleGroup':
				return is_array( $value ) ? array_map( [ __CLASS__, 'sanitize_textfield' ], $value ) : self::sanitize_textfield( $value );

			case 'number':
				return is_array( $value ) ? array_map( 'intval', $value ) : intval( $value );

			case 'file':
				return esc_url_raw( $value );

			case 'group':
			case 'repeatableGroup':
				return self::sanitize_group_value( $value );
			default:
				// Fallback.
				return map_deep( $value, [ __CLASS__, 'sanitize_default_value' ] );
		}
	}

	/**
	 * Handles sanitization for default fields. Make sure to not change the boolean to blank text.
	 *
	 * @param string $value The unsanitized value from the form.
	 *
	 * @return string Sanitized value to be stored.
	 */
	public static function sanitize_default_value( $value ) {
		return is_string( $value ) ? sanitize_text_field( $value ) : $value;
	}

	/**
	 * Sanitize an individual field based on its id.
	 *
	 * @param mixed  $value    Field value.
	 * @param string $field_id Field ID.
	 *
	 * @return mixed Sanitized value.
	 */
	private static function sanitize_by_field_id( $value, $field_id ) {
		switch ( $field_id ) {
			case 'robots_txt_content':
				return self::sanitize_robots_text( $value );

			case 'google_verify':
			case 'bing_verify':
			case 'baidu_verify':
			case 'yandex_verify':
			case 'pinterest_verify':
			case 'norton_verify':
				return self::sanitize_webmaster_tags( $value );

			case 'custom_webmaster_tags':
				return self::sanitize_custom_webmaster_tags( $value );

			case 'console_caching_control':
				return self::sanitize_cache_control( $value );
		}

		// Returning null means no special handling; fall back to type-based logic.
		return null;
	}

	/**
	 * Handles sanitization for text fields.
	 *
	 * @param string $value The unsanitized value from the form.
	 *
	 * @return string Sanitized value to be stored.
	 */
	private static function sanitize_textfield( $value ) {
		if ( is_object( $value ) || is_array( $value ) ) {
			return '';
		}

		$value    = (string) $value;
		$filtered = wp_check_invalid_utf8( $value );

		if ( strpos( $filtered, '<' ) !== false ) {
			$filtered = wp_pre_kses_less_than( $filtered );

			// Strip extra whitespace.
			$filtered = wp_strip_all_tags( $filtered, false );

			// Use html entities in a special case to make sure no later
			// newline stripping stage could lead to a functional tag!
			$filtered = str_replace( "<\n", "&lt;\n", $filtered );
		}
		$filtered = preg_replace( '/[\r\n\t ]+/', ' ', $filtered );
		$filtered = trim( $filtered );

		$found = false;
		while ( preg_match( '/%[0-9]{2}/i', $filtered, $match ) ) {
			$filtered = str_replace( $match[0], '', $filtered );
			$found    = true;
		}

		if ( $found ) {
			// Strip out the whitespace that may now exist after removing the octets.
			$filtered = trim( preg_replace( '/ +/', ' ', $filtered ) );
		}

		return apply_filters( 'sanitize_text_field', $filtered, $value );
	}

	/**
	 * Handles sanitization of Robots text.
	 *
	 * @since 1.0.45
	 *
	 * @param mixed $value The unsanitized Robots text.
	 *
	 * @return string Sanitized Robots text to be stored.
	 */
	private static function sanitize_robots_text( $value ) {
		if ( empty( $value ) ) {
			return '';
		}

		return wp_strip_all_tags( $value );
	}

	/**
	 * Handles sanitization for webmaster tag and remove <meta> tag.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 *
	 * @return mixed Sanitized value to be stored.
	 */
	private static function sanitize_webmaster_tags( $value ) {
		$value = trim( $value );

		if ( ! empty( $value ) && Str::starts_with( '<meta', trim( $value ) ) ) {
			preg_match( '/content="([^"]+)"/i', stripslashes( $value ), $matches );
			$value = $matches[1];
		}

		return htmlentities( wp_strip_all_tags( $value ) );
	}

	/**
	 * Handles sanitization for custom webmaster tags.
	 * Only <meta> tags are allowed.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 */
	private static function sanitize_custom_webmaster_tags( $value ) {
		$sanitized = wp_kses(
			$value,
			[
				'meta' => [
					'name'    => [],
					'content' => [],
				],
			]
		);

		return $sanitized;
	}

	/**
	 * Handles sanitization for Analytics cache control option.
	 *
	 * @param mixed $value The unsanitized value from the form.
	 */
	private static function sanitize_cache_control( $value ) {
		$max   = apply_filters( 'rank_math/analytics/max_days_allowed', 90 );
		$value = absint( $value );
		if ( $value > $max ) {
			$value = $max;
		}

		return $value;
	}

	/**
	 * Do not save if name or image is empty.
	 *
	 * @param array $value Field value to save.
	 * @return array
	 */
	private function sanitize_overlays( $value ) {
		if ( ! is_array( $value ) ) {
			return [];
		}

		foreach ( $value as $key => $overlay ) {
			if ( empty( $overlay['image'] ) ) {
				unset( $value[ $key ] );
			} elseif ( empty( $overlay['name'] ) ) {
				Helper::add_notification( esc_html__( 'A Custom Watermark item could not be saved because the name field is empty.', 'seo-by-rank-math' ), [ 'type' => 'error' ] );
				unset( $value[ $key ] );
			}
		}

		return $value;
	}

	/**
	 * Handles sanitization of advanced robots data.
	 *
	 * @param array $robots The unsanitized value from the form.
	 *
	 * @return array Sanitized value to be stored.
	 */
	private static function sanitize_advanced_robots( $robots ) {
		if ( empty( $robots ) ) {
			return [];
		}

		$advanced_robots = [];
		foreach ( $robots as $key => $robot ) {
			$advanced_robots[ $key ] = ! empty( $robot['enable'] ) ? $robot['length'] : false;
		}

		return $advanced_robots;
	}

	/**
	 * Sanitize a group or repeatable group field.
	 *
	 * - For a single group, sanitizes keys and values.
	 * - For repeatable groups (array of group items), recursively sanitizes each item.
	 * - Preserves key casing.
	 *
	 * @param array $group_value The group or repeatable group value.
	 * @return array Sanitized group value.
	 */
	private static function sanitize_group_value( $group_value ) {
		if ( ! is_array( $group_value ) ) {
			return [];
		}

		// Check if this is a repeatable group (array of associative arrays).
		$is_repeatable = array_keys( $group_value ) === range( 0, count( $group_value ) - 1 );

		if ( $is_repeatable ) {
			$sanitized = [];

			foreach ( $group_value as $item ) {
				if ( is_array( $item ) ) {
					$sanitized[] = self::sanitize_array_recursive( $item );
				}
			}

			return $sanitized;
		}

		// Single group.
		return self::sanitize_array_recursive( $group_value );
	}

	/**
	 * Recursively sanitize an array's keys (preserving casing) and values.
	 *
	 * Uses sanitize_text_field() for scalar values. Nested arrays are handled recursively.
	 *
	 * @param array $data The array to recursively sanitize.
	 * @return array The sanitized array.
	 */
	private static function sanitize_array_recursive( $data ) {
		$sanitized = [];

		foreach ( $data as $key => $val ) {
			$clean_key = self::sanitize_key_preserve_case( $key );

			if ( is_array( $val ) ) {
				$sanitized[ $clean_key ] = self::sanitize_array_recursive( $val );
			} else {
				$sanitized[ $clean_key ] = self::sanitize_textfield( $val );
			}
		}

		return $sanitized;
	}

	/**
	 * Sanitize a key while preserving original casing.
	 *
	 * Removes unsafe characters like spaces, HTML, and control characters,
	 * but keeps casing and underscores intact.
	 *
	 * @param string $key The key to sanitize.
	 * @return string The sanitized key.
	 */
	private static function sanitize_key_preserve_case( $key ) {
		$key = wp_strip_all_tags( $key );
		$key = preg_replace( '/[^A-Za-z0-9_\-]/', '', $key );
		return $key;
	}
}
PK     “ŠU]sN.öo©  o©  )  includes/admin/importers/class-aioseo.phpnu „[µü¤        <?php
/**
 * The AIO SEO Import Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Redirections\Redirection;
use RankMath\Helpers\DB;

defined( 'ABSPATH' ) || exit;

/**
 * AIOSEO class.
 */
class AIOSEO extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'All In One SEO Pack';

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key = '_aioseop_';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'aioseo_options' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'settings', 'postmeta', 'termmeta', 'usermeta', 'redirections', 'locations' ];

	/**
	 * AIOSEO settings.
	 *
	 * @var array
	 */
	private $aio_settings = [];

	/**
	 * Get the actions which can be performed for the plugin.
	 *
	 * @return array
	 */
	public function get_choices() {
		$choices = [
			'settings' => esc_html__( 'Import Settings', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import AIO SEO plugin settings, global meta, sitemap settings, etc.', 'seo-by-rank-math' ) ),
			'postmeta' => esc_html__( 'Import Post Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import meta information of your posts/pages like the titles, descriptions, robots meta, OpenGraph info, etc.', 'seo-by-rank-math' ) ),
			'usermeta' => esc_html__( 'Import Author Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import Social URLs of your author archive pages.', 'seo-by-rank-math' ) ),
		];

		if ( DB::check_table_exists( 'aioseo_terms' ) ) {
			$choices['termmeta'] = esc_html__( 'Import Term Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import meta information of your terms like the titles, descriptions, robots meta, OpenGraph info, etc.', 'seo-by-rank-math' ) );
		}

		if ( DB::check_table_exists( 'aioseo_redirects' ) ) {
			$choices['redirections'] = esc_html__( 'Import Redirections', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import all the redirections you have already set up in AIO SEO Premium.', 'seo-by-rank-math' ) );
		}

		if ( ! empty( $this->get_location_ids( true ) ) ) {
			$choices['locations'] = esc_html__( 'Import Locations', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import Locations Settings.', 'seo-by-rank-math' ) );
		}

		return $choices;
	}

	/**
	 * Convert Yoast / AIO SEO variables if needed.
	 *
	 * @param string $value Value to convert.
	 * @return string
	 */
	public function convert_variables( $value ) {
		$value = str_replace( '#site_title', '%sitename%', $value );
		$value = str_replace( '#tagline', '%sitedesc%', $value );
		$value = str_replace( '#separator_sa', '%sep%', $value );
		$value = str_replace( '#post_title', '%title%', $value );
		$value = str_replace( '#post_excerpt', '%excerpt%', $value );
		$value = str_replace( '#post_content', '%excerpt%', $value );
		$value = str_replace( '#taxonomy_description', '%term_description%', $value );
		$value = str_replace( '#category_description', '%term_description%', $value );
		$value = str_replace( '#taxonomy_title', '%term%', $value );
		$value = str_replace( '#category', '%term%', $value );
		$value = str_replace( '#author_first_name #author_last_name', '%name%', $value );
		$value = str_replace( '#current_year', '%currentyear%', $value );
		$value = str_replace( '#current_date', '%currentdate%', $value );
		$value = str_replace( '#current_day', '%currentday%', $value );
		$value = str_replace( '#current_month', '%currentmonth%', $value );
		$value = str_replace( '#post_date', '%date%', $value );
		$value = str_replace( '#search_term', '%search_query%', $value );
		$value = str_replace( '#author_link', '%AUTHORLINK%', $value );
		$value = str_replace( '#post_link', '%POSTLINK%', $value );
		$value = str_replace( '#site_link', '%BLOGLINK%', $value );
		$value = str_replace( '#author_name', '%name%', $value );
		$value = str_replace( '#author_bio', '%user_description%', $value );
		$value = str_replace( '#archive_date', '%date%', $value );
		$value = str_replace( '#breadcrumb_archive_post_type_name', '%s', $value );
		$value = str_replace( '#breadcrumb_search_string', '%s', $value );

		return $value;
	}

	/**
	 * Import settings of plugin.
	 *
	 * @return bool
	 */
	protected function settings() {
		$this->get_settings();
		$this->aio_settings = json_decode( get_option( 'aioseo_options' ), true );

		$this->general_settings();
		$this->sitemap_settings();
		$this->titles_settings();
		$this->pro_settings();
		$this->update_settings();

		return true;
	}

	/**
	 * Imports redirections data.
	 *
	 * @return array
	 */
	protected function redirections() {
		$count        = 0;
		$table        = DB::query_builder( 'aioseo_redirects' );
		$redirections = $table->select( '*' )->get();

		if ( empty( $redirections ) ) {
			return compact( 'count' );
		}

		Helper::update_modules( [ 'redirections' => 'on' ] );
		foreach ( $redirections as $redirection ) {
			if ( false !== $this->save_redirection( (array) $redirection ) ) {
				++$count;
			}
		}

		return compact( 'count' );
	}

	/**
	 * Save redirection.
	 *
	 * @param array $redirection Redirection object.
	 *
	 * @return mixed
	 */
	private function save_redirection( $redirection ) {
		if (
			empty( $redirection['source_url'] ) ||
			empty( $redirection['type'] ) ||
			! in_array( $redirection['type'], [ '301', '302', '307', '410', '451' ], true )
		) {
			return false;
		}

		$item = Redirection::from(
			[
				'sources'     => [
					[
						'ignore'     => ! empty( $redirection['ignore_case'] ) ? 'case' : '',
						'pattern'    => $redirection['source_url'],
						'comparison' => isset( $redirection['source_url_match'] ) && 'regex' === $redirection['source_url_match'] ? 'regex' : 'exact',
					],
				],
				'url_to'      => isset( $redirection['target_url'] ) ? $redirection['target_url'] : '',
				'header_code' => isset( $redirection['type'] ) ? $redirection['type'] : '301',
				'status'      => empty( $redirection['enabled'] ) ? 'inactive' : 'active',
			]
		);

		return $item->save();
	}

	/**
	 * Import General Settings.
	 */
	private function general_settings() {
		if ( ! empty( $this->aio_settings['rssContent'] ) ) {
			$hash = [
				'before' => 'rss_before_content',
				'after'  => 'rss_after_content',
			];
			$this->replace( $hash, $this->aio_settings['rssContent'], $this->settings, 'convert_variables' );
		}

		if ( ! empty( $this->aio_settings['breadcrumbs'] ) ) {
			$hash = [
				'enable'             => 'breadcrumbs',
				'separator'          => 'breadcrumbs_separator',
				'homepageLabel'      => 'breadcrumbs_home_label',
				'breadcrumbPrefix'   => 'breadcrumbs_prefix',
				'archiveFormat'      => 'breadcrumbs_archive_format',
				'searchResultFormat' => 'breadcrumbs_search_format',
				'errorFormat404'     => 'breadcrumbs_404_label',
				'showCurrentItem'    => 'breadcrumbs_remove_post_title',
			];
			$this->replace( $hash, $this->aio_settings['breadcrumbs'], $this->settings, 'convert_variables' );
			$this->replace( [ 'homepageLink' => 'breadcrumbs_home' ], $this->aio_settings['breadcrumbs'], $this->settings, 'convert_bool' );
		}

		if ( ! empty( $this->aio_settings['webmasterTools'] ) ) {
			$hash = [
				'google'    => 'google_verify',
				'bing'      => 'bing_verify',
				'baidu'     => 'baidu_verify',
				'yandex'    => 'yandex_verify',
				'pinterest' => 'pinterest_verify',
			];
			$this->replace( $hash, $this->aio_settings['webmasterTools'], $this->settings );
		}
	}

	/**
	 * Sitemap settings.
	 */
	private function sitemap_settings() {
		if ( empty( $this->aio_settings['sitemap'] ) ) {
			return;
		}

		$sitemap_settings = $this->aio_settings['sitemap'];
		$general          = ! empty( $sitemap_settings['general'] ) ? $sitemap_settings['general'] : [];
		if ( empty( $general ) ) {
			return;
		}

		// Sitemap.
		if ( isset( $general['enable'] ) ) {
			Helper::update_modules( [ 'sitemap' => 'on' ] );
		}

		$this->sitemap['items_per_page'] = $general['linksPerIndex'];

		$all = ! empty( $general['postTypes']['all'] );
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			$this->sitemap[ "pt_{$post_type}_sitemap" ] = $all || in_array( $post_type, $general['postTypes']['included'], true ) ? 'on' : 'off';
		}

		$all = ! empty( $general['taxonomies']['all'] );
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy => $object ) {
			$this->sitemap[ "tax_{$taxonomy}_sitemap" ] = $all || in_array( $taxonomy, $general['taxonomies']['included'], true ) ? 'on' : 'off';
		}

		if ( ! empty( $general['advancedSettings'] ) ) {
			$this->sitemap_advanced_settings( $general['advancedSettings'] );
		}

		// HTML Sitemap.
		if ( isset( $sitemap_settings['html'] ) ) {
			$this->html_sitemap_settings( $sitemap_settings['html'] );
		}
	}

	/**
	 * Import Pro Settings.
	 */
	private function pro_settings() {
		$settings = get_option( 'aioseo_options_pro' );
		if ( empty( $settings ) ) {
			return;
		}

		$settings = json_decode( $settings, true );
		$this->news_sitemap_settings( $settings );
		$this->video_sitemap_settings( $settings );
		$this->image_seo_settings( $settings );
		$this->local_seo_settings( $settings );
	}

	/**
	 * Import Local SEO Settings.
	 *
	 * @param array $settings Pro Settings.
	 */
	private function local_seo_settings( $settings ) {
		if ( empty( $settings['localBusiness'] ) ) {
			return;
		}

		Helper::update_modules( [ 'local-seo' => 'on' ] );
		$local_settings = $settings['localBusiness'];
		$business       = $local_settings['locations']['business'];

		$hash = [
			'name'         => 'knowledgegraph_name',
			'image'        => 'knowledgegraph_logo',
			'businessType' => 'local_business_type',
		];
		$this->replace( $hash, $business, $this->titles );
		$this->titles['url'] = $business['urls']['website'];

		// Street Address.
		$address = [];
		$hash    = [
			'streetLine1' => 'streetAddress',
			'city'        => 'addressLocality',
			'state'       => 'addressRegion',
			'zipCode'     => 'postalCode',
			'country'     => 'addressCountry',
		];
		$this->replace( $hash, $business['address'], $address );
		if ( ! empty( $business['address']['streetLine2'] ) ) {
			$address['streetAddress'] = $address['streetAddress'] . ', ' . $business['address']['streetLine2'];
		}
		$this->titles['local_address'] = $address;

		if ( ! empty( $business['contact'] ) ) {
			$this->titles['email'] = $business['contact']['email'];

			$this->titles['phone_numbers'][] = [
				'type'   => 'customer support',
				'number' => $business['contact']['phone'],
			];
		}

		if ( ! empty( $business['payment'] ) ) {
			$this->titles['price_range'] = $business['payment']['priceRange'];
		}

		if ( ! empty( $local_settings['openingHours'] ) ) {
			$this->add_opening_hours( $local_settings['openingHours'] );
		}
	}

	/**
	 * Import Opening Hours Settings.
	 *
	 * @param array $opening_hours Opening Hours.
	 */
	private function add_opening_hours( $opening_hours ) {
		$data = [];
		foreach ( $opening_hours['days'] as $day => $opening_hour ) {
			if ( ! empty( $opening_hour['closed'] ) ) {
				continue;
			}

			$data[] = [
				'day'  => ucfirst( $day ),
				'time' => $opening_hour['openTime'] . '-' . $opening_hour['closeTime'],
			];
		}

		$this->titles['opening_hours'] = $data;
	}

	/**
	 * Import Image SEO Settings.
	 *
	 * @param array $settings Pro Settings.
	 */
	private function image_seo_settings( $settings ) {
		if ( empty( $settings['image']['format'] ) ) {
			return;
		}

		Helper::update_modules( [ 'image-seo' => 'on' ] );
		$format = $settings['image']['format'];
		if ( ! empty( $format['title'] ) ) {
			$this->settings['add_img_title'] = $this->convert_variables( $format['title'] );
		}

		if ( ! empty( $format['altTag'] ) ) {
			$this->settings['add_img_title'] = $this->convert_variables( $format['altTag'] );
		}
	}

	/**
	 * Import Video Sitemap Settings.
	 *
	 * @param array $settings Pro Settings.
	 */
	private function video_sitemap_settings( $settings ) {
		if ( empty( $settings['sitemap']['video'] ) ) {
			return;
		}
		$video_settings = $settings['sitemap']['video'];
		if ( ! empty( $video_settings['enable'] ) ) {
			Helper::update_modules( [ 'video-sitemap' => 'on' ] );
		}

		$this->sitemap['video_sitemap_post_type'] = $video_settings['postTypes']['all'] ? array_keys( Helper::get_accessible_post_types() ) : $video_settings['postTypes']['included'];
	}

	/**
	 * Import News Sitemap Settings.
	 *
	 * @param array $settings Pro Settings.
	 */
	private function news_sitemap_settings( $settings ) {
		if ( empty( $settings['sitemap']['news'] ) ) {
			return;
		}
		$news_settings = $settings['sitemap']['news'];
		if ( ! empty( $news_settings['enable'] ) ) {
			Helper::update_modules( [ 'news-sitemap' => 'on' ] );
		}

		$this->sitemap['news_sitemap_publication_name'] = ! empty( $news_settings['publicationName'] ) ? $news_settings['publicationName'] : '';
		$this->sitemap['news_sitemap_post_type']        = $news_settings['postTypes']['all'] ? array_keys( Helper::get_accessible_post_types() ) : $news_settings['postTypes']['included'];
	}

	/**
	 * Import Sitemap Advanced Settings.
	 *
	 * @param array $settings Sitemap Settings.
	 */
	private function sitemap_advanced_settings( $settings ) {
		if ( ! empty( $settings['excludePosts'] ) ) {
			$exclude_posts = [];
			foreach ( $settings['excludePosts'] as $exclude_post ) {
				$exclude_post    = json_decode( $exclude_post, true );
				$exclude_posts[] = ! empty( $exclude_post['value'] ) ? $exclude_post['value'] : '';
			}

			$this->sitemap['exclude_posts'] = implode( ', ', $exclude_posts );
		}

		if ( ! empty( $settings['excludeTerms'] ) ) {
			$exclude_terms = [];
			foreach ( $settings['excludeTerms'] as $exclude_term ) {
				$exclude_term    = json_decode( $exclude_term, true );
				$exclude_terms[] = ! empty( $exclude_term['value'] ) ? $exclude_term['value'] : '';
			}

			$this->sitemap['exclude_terms'] = $exclude_terms;
		}

		$this->sitemap['include_images'] = ! empty( $settings['excludeImages'] ) ? 'off' : 'on';
	}

	/**
	 * Import HTML Sitemap Settings.
	 *
	 * @param array $settings HTML Settings.
	 */
	private function html_sitemap_settings( $settings ) {
		if ( empty( $settings ) ) {
			return;
		}

		$this->sitemap['html_sitemap']         = $settings['enable'] ? 'on' : 'off';
		$this->sitemap['html_sitemap_display'] = empty( $settings['pageUrl'] ) ? 'shortcode' : 'page';
		if ( ! empty( $settings['pageUrl'] ) ) {
			$page = get_page_by_path( basename( $settings['pageUrl'] ) );
			if ( ! empty( $page ) ) {
				$this->sitemap['html_sitemap_page'] = $page->ID;
			} else {
				// Create a new page with the sitemap page url.
				$this->sitemap['html_sitemap_page'] = wp_insert_post(
					[
						'post_title'   => __( 'HTML Sitemap', 'seo-by-rank-math' ),
						'post_content' => '',
						'post_status'  => 'publish',
						'post_type'    => 'page',
						'post_name'    => basename( $settings['pageUrl'] ),
					]
				);
			}
		}

		if ( ! empty( $settings['postTypes']['all'] ) ) {
			$post_types = Helper::get_accessible_post_types();
			$post_types = array_keys( $post_types );
			foreach ( $post_types as $post_type ) {
				$this->sitemap[ 'pt_' . $post_type . '_html_sitemap' ] = in_array( $post_type, $settings['postTypes']['included'], true ) ? 'on' : 'off';
			}
		} else {
			foreach ( $settings['postTypes']['included'] as $post_type ) {
				$this->sitemap[ 'pt_' . $post_type . '_html_sitemap' ] = 'on';
			}
		}

		if ( ! empty( $settings['taxonomies']['all'] ) ) {
			$taxonomies = Helper::get_accessible_taxonomies();
			$taxonomies = array_keys( $taxonomies );
			foreach ( $taxonomies as $taxonomy ) {
				$this->sitemap[ 'tax_' . $taxonomy . '_html_sitemap' ] = in_array( $taxonomy, $settings['taxonomies']['included'], true ) ? 'on' : 'off';
			}
		} else {
			foreach ( $settings['taxonomies']['included'] as $taxonomy ) {
				$this->sitemap[ 'tax_' . $taxonomy . '_html_sitemap' ] = 'on';
			}
		}
	}

	/**
	 * Import Titles & Meta Settings.
	 */
	private function titles_settings() {
		$settings = $this->aio_settings['searchAppearance'];
		$hash     = [
			'separator'       => 'title_separator',
			'siteTitle'       => 'homepage_title',
			'metaDescription' => 'homepage_description',
		];

		$this->replace( $hash, $settings['global'], $this->titles, 'convert_variables' );

		$this->titles['noindex_empty_taxonomies'] = $settings['advanced']['noIndexEmptyCat'];
		$this->titles['knowledgegraph_type']      = 'organization' === $settings['global']['schema']['siteRepresents'] ? 'company' : 'person';
		$this->titles['knowledgegraph_name']      = $settings['global']['schema']['organizationName'];
		$this->titles['knowledgegraph_logo']      = $settings['global']['schema']['organizationLogo'];

		$robots = $this->get_robots_data( $settings['advanced']['globalRobotsMeta'] );

		$this->titles['robots_global']          = $robots['robots'];
		$this->titles['advanced_robots_global'] = $robots['advanced_robots'];

		$this->social_settings();
		$this->archive_settings();
		$this->post_types_settings();
		$this->taxonomies_settings();
	}

	/**
	 * Import Social Settings.
	 */
	private function social_settings() {
		if ( empty( $this->aio_settings['social'] ) ) {
			return;
		}

		$hash = [
			'adminId'   => 'facebook_admin_id',
			'appId'     => 'facebook_app_id',
			'authorUrl' => 'facebook_author_urls',
		];
		$this->replace( $hash, $this->aio_settings['social']['facebook']['advanced'], $this->titles );

		$hash = [
			'title'       => 'homepage_facebook_title',
			'description' => 'homepage_facebook_description',
			'image'       => 'homepage_facebook_image',
		];
		$this->replace( $hash, $this->aio_settings['social']['facebook']['homePage'], $this->titles );

		$profiles        = $this->aio_settings['social']['profiles'];
		$profile_urls    = $profiles['urls'];
		$fb_url          = $profile_urls['facebookPageUrl'];
		$tw_url          = $profile_urls['twitterUrl'];
		$additional_urls = $profiles['additionalUrls'];

		$profile_urls = array_map(
			function ( $url ) use ( $fb_url, $tw_url ) {
				return $url !== $fb_url && $url !== $tw_url ? $url : false;
			},
			$profile_urls
		);

		$urls = array_filter( array_values( $profile_urls ) );
		array_merge( $urls, explode( "\n", $additional_urls ) );

		$this->titles['social_additional_profiles'] = implode( PHP_EOL, $urls );
		$this->titles['social_url_facebook']        = $fb_url;
		$this->titles['twitter_author_names']       = str_replace( 'https://twitter.com/', '', $tw_url );
	}

	/**
	 * Archive settings.
	 */
	private function archive_settings() {
		$settings = $this->aio_settings['searchAppearance']['archives'];
		$author   = $settings['author'];
		$hash     = [
			'title'           => 'author_archive_title',
			'metaDescription' => 'author_archive_description',
		];
		$this->replace( $hash, $author, $this->titles, 'convert_variables' );
		$this->titles['disable_author_archives'] = $author['show'] ? 'off' : 'on';
		$this->titles['author_add_meta_box']     = $author['advanced']['showMetaBox'];
		$this->titles['author_custom_robots']    = ! $author['advanced']['robotsMeta']['default'];
		$robots                                  = $this->get_robots_data( $author['advanced']['robotsMeta'] );
		$this->titles['author_robots']           = $robots['robots'];
		$this->titles['author_advanced_robots']  = $robots['advanced_robots'];

		$date = $settings['date'];
		$hash = [
			'title'           => 'date_archive_title',
			'metaDescription' => 'date_archive_description',
		];
		$this->replace( $hash, $date, $this->titles, 'convert_variables' );
		$this->titles['disable_date_archives'] = $date['show'] ? 'off' : 'on';
		$robots                                = $this->get_robots_data( $date['advanced']['robotsMeta'] );
		$this->titles['date_archive_robots']   = $robots['robots'];
		$this->titles['date_advanced_robots']  = $robots['advanced_robots'];

		$this->titles['search_title'] = $this->convert_variables( $settings['search']['title'] );
	}

	/**
	 * Post Types settings.
	 */
	private function post_types_settings() {
		$settings = $this->aio_settings['searchAppearance']['dynamic']['postTypes'];
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			if ( empty( $settings[ $post_type ] ) ) {
				continue;
			}

			$hash = [
				'title'           => "pt_{$post_type}_title",
				'metaDescription' => "pt_{$post_type}_description",
				'customFields'    => "pt_{$post_type}_analyze_fields",
			];
			$this->replace( $hash, $settings[ $post_type ], $this->titles, 'convert_variables' );

			if ( ! empty( $settings[ $post_type ]['schemaType'] ) ) {
				$schema_type = strtolower( $settings[ $post_type ]['schemaType'] );
				if ( in_array( $schema_type, [ 'article', 'book', 'course', 'dataset', 'event', 'jobposting', 'movie', 'music', 'person', 'product', 'recipe', 'restaurant', 'service', 'software', 'video' ], true ) ) {
					$this->titles[ "pt_{$post_type}_default_rich_snippet" ] = $schema_type;
					$this->titles[ "pt_{$post_type}_default_article_type" ] = $settings[ $post_type ]['articleType'];
				}
			}

			$robots = $settings[ $post_type ]['advanced']['robotsMeta'];
			if ( ! empty( $robots['default'] ) ) {
				$this->titles[ "pt_{$post_type}_custom_robots" ] = 'off';
				continue;
			}

			$robots = $this->get_robots_data( $robots );
			$this->titles[ "pt_{$post_type}_custom_robots" ]   = 'on';
			$this->titles[ "pt_{$post_type}_robots" ]          = $robots['robots'];
			$this->titles[ "pt_{$post_type}_advanced_robots" ] = $robots['advanced_robots'];
		}
	}

	/**
	 * Taxonomies settings.
	 */
	private function taxonomies_settings() {
		if ( ! isset( $this->aio_settings['searchAppearance']['dynamic']['taxonomies'] ) ) {
			return;
		}

		$settings = $this->aio_settings['searchAppearance']['dynamic']['taxonomies'];
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy => $tax_obj ) {
			if ( empty( $settings[ $taxonomy ] ) ) {
				continue;
			}

			$hash = [
				'title'           => "tax_{$taxonomy}_title",
				'metaDescription' => "tax_{$taxonomy}_description",
			];
			$this->replace( $hash, $settings[ $taxonomy ], $this->titles, 'convert_variables' );

			$robots                                   = $this->get_robots_data( $settings[ $taxonomy ]['advanced']['robotsMeta'] );
			$this->titles[ "tax_{$taxonomy}_robots" ] = $robots['robots'];
			$this->titles[ "tax_{$taxonomy}_advanced_robots" ] = $robots['advanced_robots'];
			$this->titles[ "tax_{$taxonomy}_add_meta_box" ]    = ! empty( $settings[ $taxonomy ]['show'] ) ? 'on' : '';
		}
	}

	/**
	 * Function to get Robots data.
	 *
	 * @param  array $aioseo_robots AIOSEO robots.
	 * @return array Robots data.
	 */
	private function get_robots_data( $aioseo_robots ) {
		$robots          = [];
		$advanced_robots = [];
		$keys            = [
			'maxSnippet'      => 'max-snippet',
			'maxVideoPreview' => 'max-video-preview',
			'maxImagePreview' => 'max-image-preview',
		];
		foreach ( $aioseo_robots as $key => $value ) {
			if ( in_array( $key, [ 'noindex', 'nofollow', 'noarchive', 'noimageindex', 'nosnippet' ], true ) && $value ) {
				$robots[] = $key;
			}

			if ( in_array( $key, [ 'maxSnippet', 'maxVideoPreview', 'maxImagePreview' ], true ) && $value ) {
				$advanced_robots[ $keys[ $key ] ] = $value;
			}
		}
		$robots[] = ! in_array( 'noindex', $robots, true ) ? 'index' : '';

		return [
			'robots'          => $robots,
			'advanced_robots' => $advanced_robots,
		];
	}

	/**
	 * Import post meta of plugin.
	 *
	 * @return array
	 */
	protected function postmeta() {
		$this->set_pagination( $this->get_posts( true ) );
		$posts = $this->get_posts();

		foreach ( $posts as $post ) {
			$post_id = (int) $post->post_id;
			$post    = (array) $post;
			$hash    = [
				'title'                    => 'rank_math_title',
				'description'              => 'rank_math_description',
				'canonical_url'            => 'rank_math_canonical_url',
				'og_title'                 => 'rank_math_facebook_title',
				'og_description'           => 'rank_math_facebook_description',
				'og_image_custom_url'      => 'rank_math_facebook_image',
				'twitter_title'            => 'rank_math_twitter_title',
				'twitter_description'      => 'rank_math_twitter_description',
				'twitter_image_custom_url' => 'rank_math_twitter_image',
			];
			$this->replace_meta( $hash, $post, $post_id, 'post', 'convert_variables' );
			$this->replace_meta( [ 'twitter_use_og' => 'rank_math_twitter_use_facebook' ], $post, $post_id, 'post', 'convert_bool' );
			$this->set_object_robots( $post_id, $post, 'post' );
			$this->set_keywords( $post_id, $post, 'post' );
			$this->add_schema_data( $post_id, $post );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Import term meta of plugin.
	 *
	 * @return array
	 */
	protected function termmeta() {
		$this->set_pagination( $this->get_terms( true ) );
		$terms = $this->get_terms();

		foreach ( $terms as $term ) {
			$term_id = $term->term_id;
			$term    = (array) $term;
			$hash    = [
				'title'                    => 'rank_math_title',
				'description'              => 'rank_math_description',
				'canonical_url'            => 'rank_math_canonical_url',
				'og_title'                 => 'rank_math_facebook_title',
				'og_description'           => 'rank_math_facebook_description',
				'og_image_custom_url'      => 'rank_math_facebook_image',
				'twitter_title'            => 'rank_math_twitter_title',
				'twitter_description'      => 'rank_math_twitter_description',
				'twitter_image_custom_url' => 'rank_math_twitter_image',
			];
			$this->replace_meta( $hash, $term, $term_id, 'term', 'convert_variables' );
			$this->replace_meta( [ 'twitter_use_og' => 'rank_math_twitter_use_facebook' ], $term, $term_id, 'term', 'convert_bool' );
			$this->set_object_robots( $term_id, $term, 'term' );
			$this->set_keywords( $term_id, $term, 'term' );
		}

		return [ 'count' => count( $terms ) ];
	}

	/**
	 * Import user meta of plugin.
	 *
	 * @return array
	 */
	protected function usermeta() {
		$this->set_pagination( $this->get_user_ids( true ) );
		$user_ids = $this->get_user_ids();

		$hash = [
			'wpseo_title'    => 'rank_math_title',
			'wpseo_desc'     => 'rank_math_description',
			'wpseo_metadesc' => 'rank_math_description',
		];

		foreach ( $user_ids as $user ) {
			$userid = $user->ID;

			$facebook_url = get_user_meta( $userid, 'aioseo_facebook_page_url', true );
			if ( $facebook_url ) {
				update_user_meta( $userid, 'facebook', $facebook_url );
			}

			$twitter_url = get_user_meta( $userid, 'aioseo_twitter_url', true );
			if ( $twitter_url ) {
				update_user_meta( $userid, 'twitter', str_replace( 'https://twitter.com/', '', $twitter_url ) );
			}

			$social_urls = [];
			foreach ( [ 'aioseo_instagram_url', 'aioseo_pinterest_url', 'aioseo_youtube_url', 'aioseo_linkedin_url', 'aioseo_tumblr_url', 'aioseo_yelp_page_url', 'aioseo_sound_cloud_url', 'aioseo_wikipedia_url', 'aioseo_myspace_url' ] as $key ) {
				$social_urls[] = get_user_meta( $userid, $key, true );
			}

			$additional_urls = get_user_meta( 4, 'aioseo_profiles_additional_urls', true );
			if ( $additional_urls ) {
				$social_urls = array_merge( $social_urls, explode( "\n", $additional_urls ) );
			}

			if ( ! empty( $social_urls ) ) {
				update_user_meta( $userid, 'additional_profile_urls', implode( ' ', array_filter( $social_urls ) ) );
			}
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Deactivate plugin action.
	 */
	protected function deactivate() {
		if ( is_plugin_active( $this->get_plugin_file() ) ) {
			deactivate_plugins( $this->get_plugin_file() );
			deactivate_plugins( 'aioseo-image-seo/aioseo-image-seo.php' );
			deactivate_plugins( 'aioseo-local-business/aioseo-local-business.php' );
			deactivate_plugins( 'aioseo-news-sitemap/aioseo-news-sitemap.php' );
			deactivate_plugins( 'aioseo-video-sitemap/aioseo-video-sitemap.php' );
			deactivate_plugins( 'aioseo-local-business/aioseo-local-business.php' );
			deactivate_plugins( 'aioseo-redirects/aioseo-redirects.php' );
		}

		return true;
	}

	/**
	 * Get all post IDs of all allowed post types only.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	private function get_posts( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB::query_builder( 'aioseo_posts' );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select( '*' )->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Get all post IDs of all allowed post types only.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	private function get_terms( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB::query_builder( 'aioseo_terms' );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select( '*' )->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Import Schema Data.
	 *
	 * @param int   $post_id Post ID.
	 * @param array $post    Post data.
	 */
	private function add_schema_data( $post_id, $post ) {
		if ( empty( $post['schema_type'] ) || ! in_array( $post['schema_type'], [ 'SoftwareApplication', 'Product', 'Recipe', 'Course' ], true ) ) {
			return;
		}

		$type   = strtolower( $post['schema_type'] );
		$type   = 'softwareapplication' === $type ? 'software' : $type;
		$schema = json_decode( $post['schema_type_options'], true );
		$data   = $this->$type( $schema[ $type ] );
		$schema = [
			'metadata' => [
				'title'                   => $data['@type'],
				'isPrimary'               => true,
				'type'                    => 'template',
				'reviewLocation'          => 'custom',
				'reviewLocationShortcode' => '[rank_math_rich_snippet]',
			],
		] + $data;

		update_post_meta( $post_id, 'rank_math_schema_' . $schema['@type'], $schema );
	}

	/**
	 * Import Software Schema Data.
	 *
	 * @param array $data Software schema data.
	 */
	private function software( $data ) {
		$schema = [
			'@type'               => 'SoftwareApplication',
			'name'                => ! empty( $data['name'] ) ? $data['name'] : '%seo_title%',
			'applicationCategory' => $data['category'],
			'offers'              => [
				'@type'         => 'Offer',
				'price'         => $data['price'],
				'priceCurrency' => $data['currency'],
			],
		];

		if ( ! empty( $data['operatingSystems'] ) ) {
			$operating_system = array_map(
				function ( $system ) {
					return $system['value'];
				},
				json_decode( $data['operatingSystems'], true )
			);

			$schema['operatingSystem'] = implode( ', ', $operating_system );
		}

		if ( ! empty( $data['reviews'] ) ) {
			$reviews          = json_decode( $data['reviews'][0], true );
			$schema['review'] = [
				'@type'         => 'Review',
				'datePublished' => '%date(Y-m-dTH:i:sP)%',
				'dateModified'  => '%modified(Y-m-dTH:i:sP)%',
				'author'        => [
					'@type' => 'Person',
					'name'  => '%name%',
				],
				'reviewRating'  => [
					'@type'       => 'Rating',
					'ratingValue' => ! empty( $reviews['rating'] ) ? $reviews['rating'] : '',
				],
			];
		}

		return $schema;
	}

	/**
	 * Import Product Schema Data.
	 *
	 * @param array $data Product schema data.
	 */
	private function product( $data ) {
		return [
			'@type'       => 'Product',
			'name'        => ! empty( $data['name'] ) ? $data['name'] : '%seo_title%',
			'description' => ! empty( $data['description'] ) ? $data['description'] : '%seo_description%',
			'gtin8'       => $data['identifier'],
			'brand'       => [
				'@type' => 'Brand',
				'name'  => $data['brand'],
			],
			'offers'      => [
				'@type'           => 'Offer',
				'price'           => $data['price'],
				'priceCurrency'   => $data['currency'],
				'priceValidUntil' => $data['priceValidUntil'],
				'availability'    => str_replace( 'https://schema.org/', '', $data['availability'] ),
			],
		];
	}

	/**
	 * Import Course Schema Data.
	 *
	 * @param array $data Course schema data.
	 */
	private function course( $data ) {
		return [
			'@type'       => 'Course',
			'name'        => $data['name'],
			'description' => $data['description'],
			'provider'    => [
				'@type' => 'Organization',
				'name'  => $data['provider'],
			],
		];
	}

	/**
	 * Import Recipe Schema Data.
	 *
	 * @param array $data Recipe schema data.
	 */
	private function recipe( $data ) {
		$schema = [
			'@type'          => 'Recipe',
			'name'           => $data['name'],
			'recipeCategory' => $data['dishType'],
			'recipeCuisine'  => $data['cuisineType'],
			'prepTime'       => "PT{$data['preparationTime']}M",
			'cookTime'       => "PT{$data['cookingTime']}M",
			'recipeYield'    => "PT{$data['servings']}M",
			'nutrition'      => [
				'@type'    => 'NutritionInformation',
				'calories' => $data['calories'],
			],
		];

		if ( ! empty( $data['keywords'] ) ) {
			$keywords = array_map(
				function ( $keyword ) {
					return $keyword['value'];
				},
				json_decode( $data['keywords'], true )
			);

			$schema['keywords'] = implode( ', ', $keywords );
		}

		if ( ! empty( $data['ingredients'] ) ) {
			$schema['recipeIngredient'] = array_map(
				function ( $ingredient ) {
					return $ingredient['value'];
				},
				json_decode( $data['ingredients'], true )
			);
		}

		if ( ! empty( $data['instructions'] ) ) {
			$schema['recipeInstructions'] = [
				'@type'           => 'HowToSection',
				'itemListElement' => [],
			];

			foreach ( $data['instructions'] as $instruction ) {
				$instruction_data = json_decode( $instruction, true );

				$schema['recipeInstructions']['itemListElement'][] = [
					'@type' => 'HowtoStep',
					'text'  => $instruction_data['content'],
				];
			}
		}

		return $schema;
	}

	/**
	 * Set Keywords.
	 *
	 * @param int    $object_id   Object ID.
	 * @param array  $data        Object data.
	 * @param string $object_type Current Object type.
	 */
	private function set_keywords( $object_id, $data, $object_type ) {
		$keywords   = [];
		$keyphrases = json_decode( $data['keyphrases'], true );

		if ( ! empty( $keyphrases['focus']['keyphrase'] ) ) {
			$keywords[] = $keyphrases['focus']['keyphrase'];
		}

		if ( ! empty( $keyphrases['additional'] ) ) {
			foreach ( $keyphrases['additional'] as $keyword ) {
				$keywords[] = $keyword['keyphrase'];
			}
		}

		if ( empty( $keywords ) ) {
			return;
		}

		$this->update_meta( $object_type, $object_id, 'rank_math_focus_keyword', implode( ',', $keywords ) );
	}

	/**
	 * Set object robots meta.
	 *
	 * @param int    $object_id   Object ID.
	 * @param array  $data        Object data.
	 * @param string $object_type Current Object type.
	 */
	private function set_object_robots( $object_id, $data, $object_type ) {
		// Early bail if robots data is set in Rank Math plugin.
		if ( ! empty( $this->get_meta( $object_type, $object_id, 'rank_math_robots' ) ) || ! empty( $data['robots_default'] ) ) {
			return;
		}

		// ROBOTS.
		$robots = [];
		foreach ( [ 'robots_noindex', 'robots_noarchive', 'robots_nosnippet', 'robots_nofollow', 'robots_noimageindex' ] as $key ) {
			if ( empty( $data[ $key ] ) ) {
				continue;
			}

			$robots[] = str_replace( 'robots_', '', $key );
		}

		if ( ! in_array( 'noindex', $robots, true ) ) {
			$robots[] = 'index';
		}
		$this->update_meta( $object_type, $object_id, 'rank_math_robots', array_unique( $robots ) );

		$advanced_robots = [];
		$keys            = [
			'robots_max_snippet'      => 'max-snippet',
			'robots_max_videopreview' => 'max-video-preview',
			'robots_max_imagepreview' => 'max-image-preview',
		];
		foreach ( [ 'robots_max_snippet', 'robots_max_videopreview', 'robots_max_imagepreview' ] as $key ) {
			if ( empty( $data[ $key ] ) ) {
				continue;
			}

			$advanced_robots[ $keys[ $key ] ] = $data[ $key ];
		}

		$this->update_meta( $object_type, $object_id, 'rank_math_advanced_robots', array_unique( $advanced_robots ) );
	}

	/**
	 * Replace meta based on key/value hash.
	 *
	 * @param array  $hash        Array of hash for search and replace.
	 * @param array  $source      Array for source where to search.
	 * @param int    $object_id   Object id for destination where to save.
	 * @param string $object_type Object type for destination where to save.
	 * @param bool   $convert     (Optional) Conversion type. Default: false.
	 */
	protected function replace_meta( $hash, $source, $object_id, $object_type, $convert = false ) {
		foreach ( $hash as $search => $replace ) {
			$value = isset( $source[ $search ] ) ? $source[ $search ] : $this->get_meta( $object_type, $object_id, $search );
			if ( ! isset( $value ) ) {
				continue;
			}

			$this->update_meta(
				$object_type,
				$object_id,
				$replace,
				false !== $convert ? $this->$convert( $value ) : $value
			);
		}
	}

	/**
	 * Import Locations data from Yoast Local plugin.
	 *
	 * @return array
	 */
	protected function locations() {
		$this->import_locations_terms();
		$this->set_pagination( $this->get_location_ids( true ) );
		$locations = $this->get_location_ids();
		foreach ( $locations as $location ) {
			$args = (array) $location;
			unset( $args['ID'] );
			$args['post_type'] = 'rank_math_locations';

			$post_id = wp_insert_post( $args );
			if ( $post_id === 0 ) {
				continue;
			}

			$post_terms = wp_get_object_terms( $location->ID, 'aioseo-location-category', [ 'fields' => 'slugs' ] );
			if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
				wp_set_object_terms( $post_id, $post_terms, 'rank_math_location_category', false );
			}

			$this->locations_meta( $location->ID, $post_id );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Import Locations terms.
	 */
	private function import_locations_terms() {
		$terms = get_terms( 'aioseo-location-category' );
		if ( empty( $terms ) || is_wp_error( $terms ) ) {
			return;
		}

		foreach ( $terms as $term ) {
			wp_insert_term( $term->name, 'rank_math_location_category', $term );
		}
	}

	/**
	 * Import Locations metadata.
	 *
	 * @param int $old_post_id Yoast's location id.
	 * @param int $new_post_id Newly created location id.
	 */
	private function locations_meta( $old_post_id, $new_post_id ) {
		$metas = DB::query_builder( 'aioseo_posts' )->where( 'post_id', $old_post_id )->select()->one();
		if ( empty( $metas->local_seo ) ) {
			return;
		}

		$locations_data = json_decode( $metas->local_seo, true );
		$locations_meta = ! empty( $locations_data['locations'] ) ? $locations_data['locations']['business'] : [];
		$opening_hours  = ! empty( $locations_data['openingHours'] ) ? $locations_data['openingHours'] : [];

		$schema = [
			'metadata'   => [
				'type'           => 'template',
				'shortcode'      => uniqid( 's-' ),
				'isPrimary'      => true,
				'title'          => 'Local Business',
				'use_24h_format' => ! empty( $opening_hours['use24hFormat'] ),
				'open247'        => ! empty( $opening_hours['alwaysOpen'] ),
				'timeZone'       => ! empty( $opening_hours['timezone'] ),
			],
			'@type'      => $locations_meta['businessType'],
			'name'       => ! empty( $locations_meta['name'] ) ? $locations_meta['name'] : '%seo_title%',
			'url'        => ! empty( $locations_meta['urls'] ) ? $locations_meta['urls']['website'] : '%url%',
			'address'    => ! empty( $locations_meta['address'] ) ? $this->replace_address( $locations_meta['address'] ) : '',
			'areaServed' => ! empty( $locations_meta['areaServed'] ) ? $locations_meta['areaServed'] : '',
		];

		if ( ! empty( $locations_meta['contact'] ) ) {
			$contact             = $locations_meta['contact'];
			$schema['email']     = ! empty( $contact['email'] ) ? $contact['email'] : '';
			$schema['telephone'] = ! empty( $contact['phone'] ) ? $contact['phone'] : '';
			$schema['faxNumber'] = ! empty( $contact['fax'] ) ? $contact['fax'] : '';
		}

		if ( ! empty( $locations_meta['ids'] ) ) {
			$ids             = $locations_meta['ids'];
			$schema['vatID'] = ! empty( $ids['vat'] ) ? $ids['vat'] : '';
			$schema['taxID'] = ! empty( $ids['tax'] ) ? $ids['tax'] : '';
		}

		if ( ! empty( $locations_meta['payment'] ) ) {
			$payment                   = $locations_meta['payment'];
			$schema['priceRange']      = ! empty( $payment['priceRange'] ) ? $payment['priceRange'] : '';
			$schema['paymentAccepted'] = ! empty( $payment['methods'] ) ? $payment['methods'] : '';

			if ( ! empty( $payment['currenciesAccepted'] ) ) {
				$schema['currenciesAccepted'] = implode(
					', ',
					array_map(
						function ( $value ) {
							return $value['value'];
						},
						json_decode( $payment['currenciesAccepted'], true )
					)
				);
			}
		}

		if ( ! empty( $locations_meta['image'] ) ) {
			$schema['logo'] = [
				'@type' => 'ImageObject',
				'url'   => $locations_meta['image'],
			];
		}

		$schema['openingHoursSpecification'] = $this->replace_opening_hours( $opening_hours['days'] );

		update_post_meta( $new_post_id, 'rank_math_schema_' . $schema['@type'], $schema );
	}

	/**
	 * Replace Opening Hours data.
	 *
	 * @param array $opening_hours Opening Hours data.
	 * @return array Processed data.
	 */
	private function replace_opening_hours( $opening_hours ) {
		$data = [];
		$days = [ 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday' ];
		foreach ( $days as $day ) {
			if ( ! empty( $opening_hours[ $day ]['closed'] ) ) {
				continue;
			}

			if ( ! empty( $opening_hours[ $day ]['open24h'] ) ) {
				$opens  = '00:00';
				$closes = '23:59';
			} else {
				$opens  = ! empty( $opening_hours[ $day ]['openTime'] ) ? $opening_hours[ $day ]['openTime'] : '';
				$closes = ! empty( $opening_hours[ $day ]['closeTime'] ) ? $opening_hours[ $day ]['closeTime'] : '';
			}

			if ( ! $opens ) {
				continue;
			}

			$data[ $day ] = [
				'@type'     => 'OpeningHoursSpecification',
				'dayOfWeek' => ucfirst( $day ),
				'opens'     => $opens,
				'closes'    => $closes,
			];
		}

		return array_values( $data );
	}

	/**
	 * Replace Address data.
	 *
	 * @param array $address Address data.
	 * @return array Processed data.
	 */
	private function replace_address( $address ) {
		$data = [
			'@type' => 'PostalAddress',
		];
		$hash = [
			'streetLine1' => 'streetAddress',
			'streetLine2' => 'addressLocality',
			'state'       => 'addressRegion',
			'zipCode'     => 'postalCode',
			'country'     => 'addressCountry',
		];

		foreach ( $hash as $key => $value ) {
			$data[ $value ] = isset( $address[ $key ] ) ? $address[ $key ] : '';
		}

		if ( ! empty( $address['city'] ) ) {
			$data['addressLocality'] = $data['addressLocality'] . ', ' . $address['city'];
		}

		return $data;
	}

	/**
	 * Get all location IDs.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	private function get_location_ids( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB::query_builder( 'posts' )->where( 'post_type', 'aioseo-location' );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select()->page( $paged - 1, $this->items_per_page )->get();
	}
}
PK     “ŠU]ŒÛ      "  includes/admin/importers/index.phpnu „[µü¤        <?php // Silence is golden.
PK     “ŠU]ãlêMÃ   Ã   3  includes/admin/importers/class-aio-rich-snippet.phpnu „[µü¤        <?php
/**
 * The AIO Schema Rich Snippets Import Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\DB;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Import_AIO_Rich_Snippet class.
 */
class AIO_Rich_Snippet extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'AIO Schema Rich Snippet';

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key = '_bsf_post_type';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'bsf_', 'bsf_%' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'postmeta' ];

	/**
	 * Import post meta of plugin.
	 *
	 * @return array
	 */
	protected function postmeta() {
		$this->set_pagination( $this->get_post_ids( true ) );

		// Set Converter.
		foreach ( $this->get_post_ids() as $snippet_post ) {
			$type      = $this->is_allowed_type( $snippet_post->meta_value );
			$meta_keys = $this->get_metakeys( $type );
			if ( false === $type || false === $meta_keys ) {
				continue;
			}

			$this->set_postmeta( $snippet_post->post_id, $type, $meta_keys );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Set snippet meta.
	 *
	 * @param int    $post_id   Post ID.
	 * @param string $type      Type to get keys for.
	 * @param array  $meta_keys Array of meta keys to save.
	 */
	private function set_postmeta( $post_id, $type, $meta_keys ) {
		$data = [];
		foreach ( $meta_keys as $snippet_key => $snippet_value ) {
			$value = get_post_meta( $post_id, '_bsf_' . $snippet_key, true );
			$this->validate_schema_data( $data, $value, $snippet_value );
		}

		if ( empty( $data ) ) {
			return;
		}

		// Convert post now.
		$data['@type']    = $this->validate_type( $type );
		$data['metadata'] = [
			'title'     => Helper::sanitize_schema_title( $data['@type'] ),
			'type'      => 'template',
			'isPrimary' => 1,
			'shortcode' => uniqid( 's-' ),
		];

		update_post_meta( $post_id, 'rank_math_schema_' . $data['@type'], $data );
	}

	/**
	 * Validate schema type.
	 *
	 * @param string $type Schema Type.
	 */
	private function validate_type( $type ) {
		if ( 'software' === $type ) {
			return 'SoftwareApplication';
		}

		if ( 'video' === $type ) {
			return 'VideoObject';
		}

		return ucfirst( $type );
	}

	/**
	 * Validate schema data.
	 *
	 * @param array  $data  Schema entity data.
	 * @param string $value Entity value.
	 * @param string $key   Entity key.
	 */
	private function validate_schema_data( &$data, $value, $key ) {
		if ( ! Str::contains( '.', $key ) ) {
			$data[ $key ] = $value;
			return;
		}

		$element = explode( '.', $key );
		if ( 2 === count( $element ) ) {
			$this->add_type( $data[ $element[0] ], $element[0] );
			$data[ $element[0] ][ $element[1] ] = $value;
			return;
		}

		if ( count( $element ) > 2 ) {
			$this->add_type( $data[ $element[0] ], $element[0] );
			$this->add_type( $data[ $element[0] ][ $element[1] ], $element[1] );
			$data[ $element[0] ][ $element[1] ][ $element[2] ] = $value;
		}
	}

	/**
	 * Add property type.
	 *
	 * @param array  $data Schema entity data.
	 * @param string $key  Entity key.
	 */
	private function add_type( &$data, $key ) {
		if ( 'location' === $key ) {
			$data['@type'] = 'Place';
		}

		if ( 'address' === $key ) {
			$data['@type'] = 'PostalAddress';
		}

		if ( 'offers' === $key ) {
			$data['@type'] = 'Offer';
		}

		if ( 'brand' === $key ) {
			$data['@type'] = 'Brand';
		}

		if ( 'review' === $key ) {
			$data['@type'] = 'Review';
		}

		if ( 'reviewRating' === $key ) {
			$data['@type'] = 'Rating';
		}

		if ( 'nutrition' === $key ) {
			$data['@type'] = 'NutritionInformation';
		}
	}

	/**
	 * Get the actions which can be performed for the plugin.
	 *
	 * @return array
	 */
	public function get_choices() {
		return [
			'postmeta' => esc_html__( 'Import Schemas', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import all Schema data for Posts, Pages, and custom post types.', 'seo-by-rank-math' ) ),
		];
	}

	/**
	 * Get all post IDs of all allowed post types only.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	protected function get_post_ids( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB::query_builder( 'postmeta' )->where( 'meta_key', '_bsf_post_type' );

		return $count ? absint( $table->selectCount( 'meta_id' )->getVar() ) :
			$table->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Get snippet types.
	 *
	 * @return array
	 */
	private function get_types() {
		return [
			'2'  => 'event',
			'5'  => 'person',
			'6'  => 'product',
			'7'  => 'recipe',
			'8'  => 'software',
			'9'  => 'video',
			'10' => 'article',
			'11' => 'service',
		];
	}

	/**
	 * Is snippet type allowed.
	 *
	 * @param string $type Type to check.
	 *
	 * @return bool
	 */
	private function is_allowed_type( $type ) {
		$types = $this->get_types();
		return isset( $types[ $type ] ) ? $types[ $type ] : false;
	}

	/**
	 * Get meta keys hash to import.
	 *
	 * @param string $type Type to get keys for.
	 *
	 * @return array
	 */
	private function get_metakeys( $type ) {
		$hash = [
			'event'    => $this->get_event_fields(),
			'product'  => $this->get_product_fields(),
			'recipe'   => $this->get_recipe_fields(),
			'software' => $this->get_software_fields(),
			'video'    => $this->get_video_fields(),
			'article'  => [
				'article_name' => 'headline',
				'article_desc' => 'description',
			],
			'person'   => [
				'people_fn'        => 'name',
				'people_nickname'  => 'description',
				'people_job_title' => 'jobTitle',
				'people_street'    => 'address.streetAddress',
				'people_local'     => 'address.addressLocality',
				'people_region'    => 'address.addressRegion',
				'people_postal'    => 'address.postalCode',
			],
			'service'  => [
				'service_type' => 'serviceType',
				'service_desc' => 'description',
			],
		];

		return isset( $hash[ $type ] ) ? $hash[ $type ] : false;
	}

	/**
	 * Get event fields.
	 *
	 * @return array
	 */
	private function get_event_fields() {
		return [
			'event_title'        => 'name',
			'event_desc'         => 'description',
			'event_organization' => 'location.name',
			'event_street'       => 'location.address.streetAddress',
			'event_local'        => 'location.address.addressLocality',
			'event_region'       => 'location.address.addressRegion',
			'event_postal_code'  => 'location.address.postalCode',
			'event_start_date'   => 'startDate',
			'event_end_date'     => 'endDate',
			'event_price'        => 'offers.price',
			'event_cur'          => 'offers.priceCurrency',
			'event_ticket_url'   => 'offers.url',
		];
	}

	/**
	 * Get product fields.
	 *
	 * @return array
	 */
	private function get_product_fields() {
		return [
			'product_brand'  => 'brand.name',
			'product_name'   => 'name',
			'product_price'  => 'offers.price',
			'product_cur'    => 'offers.priceCurrency',
			'product_status' => 'offers.availability',
		];
	}

	/**
	 * Get recipe fields.
	 *
	 * @return array
	 */
	private function get_recipe_fields() {
		return [
			'recipes_name'       => 'name',
			'recipes_desc'       => 'description',
			'recipes_preptime'   => 'prepTime',
			'recipes_cooktime'   => 'cookTime',
			'recipes_totaltime'  => 'totalTime',
			'recipes_ingredient' => 'recipeIngredient',
			'recipes_nutrition'  => 'nutrition.calories',
		];
	}

	/**
	 * Get software fields.
	 *
	 * @return array
	 */
	private function get_software_fields() {
		return [
			'software_rating' => 'review.reviewRating.ratingValue',
			'software_price'  => 'offers.price',
			'software_cur'    => 'offers.priceCurrency',
			'software_name'   => 'name',
			'software_os'     => 'operatingSystem',
			'software_cat'    => 'applicationCategory',
		];
	}

	/**
	 * Get video fields.
	 *
	 * @return array
	 */
	private function get_video_fields() {
		return [
			'video_title'    => 'name',
			'video_desc'     => 'description',
			'video_thumb'    => 'thumbnailUrl',
			'video_url'      => 'contentUrl',
			'video_emb_url'  => 'embedUrl',
			'video_duration' => 'duration',
		];
	}
}
PK     “ŠU]Q(vZ  Z  /  includes/admin/importers/class-redirections.phpnu „[µü¤        <?php
/**
 * The Redirections Import Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Redirections\Redirection;

defined( 'ABSPATH' ) || exit;

/**
 * Redirections class.
 */
class Redirections extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'Redirections';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'redirection_options' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'redirections' ];

	/**
	 * Import redirections of plugin.
	 *
	 * @return bool
	 */
	protected function redirections() {
		global $wpdb;

		$count = 0;
		$rows  = DB_Helper::get_results( "SELECT * FROM {$wpdb->prefix}redirection_items" );

		if ( empty( $rows ) ) {
			return false;
		}

		foreach ( (array) $rows as $row ) {
			$item = Redirection::from(
				[
					'sources'     => [
						[
							'pattern'    => $row->url,
							'comparison' => empty( $row->regex ) ? 'exact' : 'regex',
						],
					],
					'url_to'      => $this->get_url_to( $row ),
					'header_code' => $row->action_code,
					'status'      => 'disabled' === $row->status ? 'inactive' : 'active',
				]
			);

			$id = $item->save();
			if ( false !== $id ) {
				do_action( 'rank_math/redirection/after_import', $id, $row );
				++$count;
			}
		}

		Helper::update_modules( [ 'redirections' => 'on' ] );
		return compact( 'count' );
	}

	/**
	 * Get validated url to value
	 *
	 * @param  object $row Current row we are processing.
	 * @return string
	 */
	private function get_url_to( $row ) {
		$data = maybe_unserialize( $row->action_data );
		if ( is_array( $data ) && ( isset( $data['url'] ) || isset( $data['url_from'] ) ) ) {
			return isset( $data['url'] ) ? $data['url'] : $data['url_from'];
		}

		if ( is_string( $row->action_data ) ) {
			return $row->action_data;
		}

		return '/';
	}
}
PK     “ŠU]SK·O<  O<  2  includes/admin/importers/class-plugin-importer.phpnu „[µü¤        <?php
/**
 * The abstract class for plugins import to inherit from
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use Exception;
use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Meta;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Helpers\Param;
use RankMath\Helpers\Attachment;

defined( 'ABSPATH' ) || exit;

/**
 * Plugin_Importer class.
 */
abstract class Plugin_Importer {

	use Hooker;
	use Ajax;
	use Meta;

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name;

	/**
	 * The plugin file.
	 *
	 * @var string
	 */
	protected $plugin_file;

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key;

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys;

	/**
	 * Table names to drop while cleaning.
	 *
	 * @var array
	 */
	protected $table_names;

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices;

	/**
	 * Number of items to parse per page.
	 *
	 * @var int
	 */
	protected $items_per_page = 100;

	/**
	 * Pagination arguments.
	 *
	 * @var array
	 */
	protected $pagination_args = [];

	/**
	 * General settings.
	 *
	 * @var array
	 */
	protected $settings;

	/**
	 * Titles settings.
	 *
	 * @var array
	 */
	protected $titles;

	/**
	 * Sitemap settings.
	 *
	 * @var array
	 */
	protected $sitemap;

	/**
	 * Class constructor.
	 *
	 * @param string $plugin_file Plugins file.
	 */
	public function __construct( $plugin_file ) {
		$this->plugin_file = $plugin_file;
	}

	/**
	 * Get the name of the plugin we're importing from.
	 *
	 * @return string Plugin name.
	 */
	public function get_plugin_name() {
		return $this->plugin_name;
	}

	/**
	 * Get the plugin file of the plugin we're importing from.
	 *
	 * @return string Plugin file
	 */
	public function get_plugin_file() {
		return $this->plugin_file;
	}

	/**
	 * Get the actions which can be performed for the plugin.
	 *
	 * @return array
	 */
	public function get_choices() {
		if ( empty( $this->choices ) ) {
			return [];
		}

		return array_intersect_key(
			[
				'settings'     => esc_html__( 'Import Settings', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import plugin settings, global meta, sitemap settings, etc.', 'seo-by-rank-math' ) ),
				'postmeta'     => esc_html__( 'Import Post Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import meta information of your posts/pages like the focus keyword, titles, descriptions, robots meta, OpenGraph info, etc.', 'seo-by-rank-math' ) ),
				'termmeta'     => esc_html__( 'Import Term Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import data like category, tag, and CPT meta data from SEO.', 'seo-by-rank-math' ) ),
				'usermeta'     => esc_html__( 'Import Author Meta', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import meta information like titles, descriptions, focus keyword, robots meta, etc., of your author archive pages.', 'seo-by-rank-math' ) ),
				'redirections' => esc_html__( 'Import Redirections', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import all the redirections you have already set up in Yoast Premium.', 'seo-by-rank-math' ) ),
				'blocks'       => esc_html__( 'Import Blocks', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import and convert all compatible blocks in post contents.', 'seo-by-rank-math' ) ),
				'locations'    => esc_html__( 'Import Locations', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import Locations Settings from Yoast plugin.', 'seo-by-rank-math' ) ),
				'news'         => esc_html__( 'Import News Settings', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import News Settings from Yoast News Add-on.', 'seo-by-rank-math' ) ),
				'video'        => esc_html__( 'Import Video Sitemap Settings', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import Video Sitemap Settings from Yoast Video Add-on.', 'seo-by-rank-math' ) ),
			],
			array_combine(
				$this->choices,
				$this->choices
			)
		);
	}

	/**
	 * Check if import is needed from this plugin.
	 *
	 * @return bool Whether there is something to import.
	 */
	public function run_detect() {
		return true === $this->has_options() ? true : $this->has_postmeta();
	}

	/**
	 * Delete all plugin data from the database.
	 *
	 * @return bool
	 */
	public function run_cleanup() {
		if ( ! $this->run_detect() ) {
			return false;
		}

		$result = $this->drop_custom_tables();
		$result = $this->clean_meta_table();
		$result = $this->clean_options();

		return $result;
	}

	/**
	 * Run importer.
	 *
	 * @throws Exception Throws error if no perform function founds.
	 *
	 * @param string $perform The action to perform when running import action.
	 */
	public function run_import( $perform ) {
		if ( ! method_exists( $this, $perform ) ) {
			throw new Exception( esc_html__( 'Unable to perform action this time.', 'seo-by-rank-math' ) );
		}

		/**
		 * Number of items to import per run.
		 *
		 * @param int $items_per_page Default 100.
		 */
		$this->items_per_page = absint( $this->do_filter( 'importers/items_per_page', 100 ) );

		$status     = new Status();
		$result     = $this->$perform();
		$is_success = is_array( $result ) || true === $result;

		$status->set_action( $perform );
		$status->set_status( $is_success );
		$message = $this->format_message( $result, $perform, $status->get_message() );
		if ( is_scalar( $result ) ) {
			$result = [];
		}

		if ( $is_success ) {
			$result['message'] = $message;
			$this->success( $result );
		}

		$result['error'] = $message;
		$this->error( $result );
	}

	/**
	 * Get success message.
	 *
	 * @param array  $result  Array of result.
	 * @param string $action  Action performed.
	 * @param string $message Message to format.
	 *
	 * @return mixed
	 */
	private function format_message( $result, $action, $message ) {
		if ( 'blocks' === $action || 'recalculate' === $action ) {
			return is_array( $result ) ? sprintf( $message, $result['start'], $result['end'], $result['total_items'] ) : $result;
		}

		if ( 'postmeta' === $action || 'usermeta' === $action ) {
			return sprintf( $message, $result['start'], $result['end'], $result['total_items'] );
		}

		if ( 'termmeta' === $action || 'redirections' === $action ) {
			return is_array( $result ) ? sprintf( $message, $result['count'] ) : $message;
		}

		return $message;
	}

	/**
	 * Deactivate plugin action.
	 */
	protected function deactivate() {
		if ( is_plugin_active( $this->get_plugin_file() ) ) {
			deactivate_plugins( $this->get_plugin_file() );
		}

		return true;
	}

	/**
	 * Replace settings based on key/value hash.
	 *
	 * @param array $hash        Array of hash for search and replace.
	 * @param array $source      Array for source where to search.
	 * @param array $destination Array for destination where to save.
	 * @param bool  $convert     (Optional) Conversion type. Default: false.
	 */
	protected function replace( $hash, $source, &$destination, $convert = false ) {
		foreach ( $hash as $search => $replace ) {
			if ( ! isset( $source[ $search ] ) ) {
				continue;
			}

			$destination[ $replace ] = false === $convert ? $source[ $search ] : $this->$convert( $source[ $search ] );
		}
	}

	/**
	 * Replace meta based on key/value hash.
	 *
	 * @param array  $hash        Array of hash for search and replace.
	 * @param array  $source      Array for source where to search.
	 * @param int    $object_id   Object id for destination where to save.
	 * @param string $object_type Object type for destination where to save.
	 * @param bool   $convert     (Optional) Conversion type. Default: false.
	 */
	protected function replace_meta( $hash, $source, $object_id, $object_type, $convert = false ) {
		foreach ( $hash as $search => $replace ) {
			$value = ! empty( $source[ $search ] ) ? $source[ $search ] : $this->get_meta( $object_type, $object_id, $search );
			if ( empty( $value ) ) {
				continue;
			}

			$this->update_meta(
				$object_type,
				$object_id,
				$replace,
				false !== $convert ? $this->$convert( $value ) : $value
			);
		}
	}

	/**
	 * Replace an image to its URL and ID.
	 *
	 * @param string         $source      Source image url.
	 * @param array|callable $destination Destination array.
	 * @param string         $image       Image field key to save url.
	 * @param string         $image_id    Image id field key to save id.
	 * @param int            $object_id   Object ID either post ID, term ID or user ID.
	 */
	protected function replace_image( $source, $destination, $image, $image_id, $object_id = null ) {
		if ( empty( $source ) ) {
			return;
		}

		$attachment_id = Attachment::get_by_url( $source );
		if ( 1 > $attachment_id ) {
			return;
		}

		if ( is_null( $object_id ) ) {
			$destination[ $image ]    = $source;
			$destination[ $image_id ] = $attachment_id;
			return;
		}

		$this->update_meta( $destination, $object_id, $image, $source );
		$this->update_meta( $destination, $object_id, $image_id, $attachment_id );
	}

	/**
	 * Convert bool value to switch.
	 *
	 * @param mixed $value Value to convert.
	 * @return string
	 */
	protected function convert_bool( $value ) {
		if ( true === boolval( $value ) ) {
			return 'on';
		}

		if ( false === boolval( $value ) ) {
			return 'off';
		}

		return $value;
	}

	/**
	 * Set variable that twitter is using facebook data or not.
	 *
	 * @param string $object_type Object type for destination where to save.
	 * @param int    $object_id   Object id for destination where to save.
	 */
	protected function is_twitter_using_facebook( $object_type, $object_id ) {
		$keys = [
			'rank_math_twitter_title',
			'rank_math_twitter_description',
			'rank_math_twitter_image',
		];

		foreach ( $keys as $key ) {
			if ( ! empty( $this->get_meta( $object_type, $object_id, $key, true ) ) ) {
				$this->update_meta( $object_type, $object_id, 'rank_math_twitter_use_facebook', 'off' );
				break;
			}
		}
	}

	/**
	 * Convert Yoast / AIO SEO variables if needed.
	 *
	 * @param string $value Value to convert.
	 * @return string
	 */
	protected function convert_variables( $value ) {
		return str_replace( '%%', '%', $value );
	}

	/**
	 * Set pagination arguments.
	 *
	 * @param int $total_items Number of total items to set pagination.
	 */
	protected function set_pagination( $total_items = 0 ) {
		$args = [
			'total_pages' => 0,
			'total_items' => $total_items,
			'per_page'    => $this->items_per_page,
		];

		// Total Pages.
		if ( ! $args['total_pages'] && $args['per_page'] > 0 ) {
			$args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
		}

		// Current Page.
		$pagenum = Param::request( 'paged', 0, FILTER_VALIDATE_INT );
		if ( isset( $args['total_pages'] ) && $pagenum > $args['total_pages'] ) {
			$pagenum = $args['total_pages'];
		}
		$args['page'] = max( 1, $pagenum );

		// Start n End.
		$args['start'] = ( ( $args['page'] - 1 ) * $this->items_per_page ) + 1;
		$args['end']   = min( $args['page'] * $this->items_per_page, $total_items );

		$this->pagination_args = $args;
	}

	/**
	 * Get pagination arguments.
	 *
	 * @param bool $key If any specific data is required from arguments.
	 * @return mixed
	 */
	protected function get_pagination_arg( $key = false ) {
		if ( false === $key ) {
			return $this->pagination_args;
		}

		return isset( $this->pagination_args[ $key ] ) ? $this->pagination_args[ $key ] : false;
	}

	/**
	 * Get all post IDs of all allowed post types only.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	protected function get_post_ids( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB_Helper::query_builder( 'posts' )->whereIn( 'post_type', Helper::get_accessible_post_types() );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select( 'ID' )->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Get all user IDs.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	protected function get_user_ids( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB_Helper::query_builder( 'users' );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select( 'ID' )->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Get system settings.
	 */
	protected function get_settings() {
		$all_opts       = rank_math()->settings->all_raw();
		$this->settings = $all_opts['general'];
		$this->titles   = $all_opts['titles'];
		$this->sitemap  = $all_opts['sitemap'];
	}

	/**
	 * Update system settings.
	 */
	protected function update_settings() {
		Helper::update_all_settings(
			$this->settings,
			$this->titles,
			$this->sitemap
		);
	}

	/**
	 * Clean meta table for post, term and user.
	 *
	 * @return bool
	 */
	private function clean_meta_table() {
		if ( empty( $this->meta_key ) ) {
			return false;
		}

		$result = false;
		$result = DB_Helper::query_builder( 'usermeta' )->whereLike( 'meta_key', $this->meta_key )->delete();
		$result = DB_Helper::query_builder( 'termmeta' )->whereLike( 'meta_key', $this->meta_key )->delete();
		$result = DB_Helper::query_builder( 'postmeta' )->whereLike( 'meta_key', $this->meta_key )->delete();

		return $result;
	}

	/**
	 * Clean options table.
	 *
	 * @return bool
	 */
	private function clean_options() {
		if ( empty( $this->option_keys ) ) {
			return false;
		}

		$table = DB_Helper::query_builder( 'options' );
		foreach ( $this->option_keys as $option_key ) {
			$table->orWhereLike( 'option_name', $option_key );
		}

		return $table->delete();
	}

	/**
	 * Drop custom tables for plugins.
	 *
	 * @return bool
	 */
	private function drop_custom_tables() {
		global $wpdb;
		if ( empty( $this->table_names ) ) {
			return false;
		}

		foreach ( $this->table_names as $table ) {
			DB_Helper::query( "DROP TABLE IF EXISTS {$wpdb->prefix}{$table}" );
		}

		return true;
	}

	/**
	 * Check if plugin has options.
	 *
	 * @return bool
	 */
	private function has_options() {
		if ( empty( $this->option_keys ) ) {
			return false;
		}

		$table = DB_Helper::query_builder( 'options' )->select( 'option_id' );
		foreach ( $this->option_keys as $option_key ) {
			if ( '%' === substr( $option_key, -1 ) ) {
				$table->orWhereLike( 'option_name', substr( $option_key, 0, -1 ), '' );
			} else {
				$table->orWhere( 'option_name', $option_key );
			}
		}

		return absint( $table->getVar() ) > 0 ? true : false;
	}

	/**
	 * Check if plugin has postmeta.
	 *
	 * @return bool
	 */
	private function has_postmeta() {
		if ( empty( $this->meta_key ) ) {
			return false;
		}

		$result = DB_Helper::query_builder( 'postmeta' )->select( 'meta_id' )->whereLike( 'meta_key', $this->meta_key, '' )->getVar();
		return absint( $result ) > 0 ? true : false;
	}

	/**
	 * Recalculate SEO scores.
	 */
	private function recalculate() {
		$this->set_pagination( \RankMath\Tools\Update_Score::get()->find( false ) );

		$return = $this->get_pagination_arg();
		$data   = \RankMath\Tools\Update_Score::get()->update_seo_score();

		$return['data'] = $data;

		return $return;
	}
}
PK     “ŠU]7¬iv  iv  +  includes/admin/importers/class-seopress.phpnu „[µü¤        <?php
/**
 * The SEOPress Import Class
 *
 * @since      1.0.24
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Redirections\Redirection;
use RankMath\Schema\JsonLD;
use RankMath\Schema\Singular;
use RankMath\Helpers\DB;

defined( 'ABSPATH' ) || exit;

/**
 * SEOPress class.
 */
class SEOPress extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'SEOPress';

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key = 'seopress';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'seopress', 'seopress_%' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'settings', 'postmeta', 'termmeta', 'redirections' ];

	/**
	 * JsonLD.
	 *
	 * @var JsonLD
	 */
	private $json_ld;

	/**
	 * Singular.
	 *
	 * @var Singular
	 */
	private $single;

	/**
	 * Convert SEOPress variables if needed.
	 *
	 * @param string $variable Value to convert.
	 *
	 * @return string
	 */
	public function convert_variables( $variable ) {
		$variable = str_replace( '%%sitetitle%%', '%sitename%', $variable );
		$variable = str_replace( '%%tagline%%', '%sitedesc%', $variable );
		$variable = str_replace( '%%post_title%%', '%title%', $variable );
		$variable = str_replace( '%%post_excerpt%%', '%excerpt%', $variable );
		$variable = str_replace( '%%post_date%%', '%date%', $variable );
		$variable = str_replace( '%%post_modified_date%%', '%modified%', $variable );
		$variable = str_replace( '%post_author%%', '%name%', $variable );
		$variable = str_replace( '%%post_category%%', '%category%', $variable );
		$variable = str_replace( '%%post_tag%%', '%tag%', $variable );
		$variable = str_replace( '%%_category_title%%', '%term%', $variable );
		$variable = str_replace( '%%_category_description%%', '%term_description%', $variable );
		$variable = str_replace( '%%tag_title%%', '%term%', $variable );
		$variable = str_replace( '%%tag_description%%', '%term_description%', $variable );
		$variable = str_replace( '%%term_title%%', '%term%', $variable );
		$variable = str_replace( '%%term_description%%', '%term_description%', $variable );
		$variable = str_replace( '%%search_keywords%%', '%search_query%', $variable );
		$variable = str_replace( '%%current_pagination%%', '%page%', $variable );
		$variable = str_replace( '%%cpt_plural%%', '%pt_plural%', $variable );
		$variable = str_replace( '%%archive_title%%', '%title%', $variable );
		$variable = str_replace( '%%archive_date%%', '%currentdate%', $variable );
		$variable = str_replace( '%%archive_date_day%%', '%currentday%', $variable );
		$variable = str_replace( '%%archive_date_month%%', '%currentmonth%', $variable );
		$variable = str_replace( '%%archive_date_year%%', '%year%', $variable );
		$variable = str_replace( '%%currentdate%%', '%currentdate%', $variable );
		$variable = str_replace( '%%currentday%%', '%currentday%', $variable );
		$variable = str_replace( '%%currentmonth%%', '%currentmonth%', $variable );
		$variable = str_replace( '%%currentyear%%', '%currentyear%', $variable );
		$variable = str_replace( '%%currenttime%%', '%time%', $variable );
		$variable = str_replace( '%%author_bio%%', '%user_description%', $variable );
		$variable = str_replace( '%%wc_single_cat%%', '%term%', $variable );
		$variable = str_replace( '%%wc_single_tag%%', '%term%', $variable );
		$variable = str_replace( '%%wc_single_short_desc%%', '%wc_shortdesc%', $variable );
		$variable = str_replace( '%%wc_single_price%%', '%wc_price%', $variable );

		return str_replace( '%%', '%', $variable );
	}

	/**
	 * Deactivate plugin action.
	 */
	protected function deactivate() {
		if ( is_plugin_active( $this->get_plugin_file() ) ) {
			deactivate_plugins( $this->get_plugin_file() );
			deactivate_plugins( 'wp-seopress-pro/seopress-pro.php' );
		}

		return true;
	}

	/**
	 * Import settings of plugin.
	 *
	 * @return bool
	 */
	protected function settings() {
		$this->get_settings();

		$seopress_titles  = get_option( 'seopress_titles_option_name' );
		$seopress_sitemap = get_option( 'seopress_xml_sitemap_option_name' );
		$seopress_local   = get_option( 'seopress_pro_option_name' );

		// Titles & Descriptions.
		$hash = [
			'seopress_titles_archives_author_disable' => 'disable_author_archives',
			'seopress_titles_archives_date_disable'   => 'disable_date_archives',
			'seopress_titles_home_site_title'         => 'homepage_title',
			'seopress_titles_home_site_desc'          => 'homepage_description',
			'seopress_titles_archives_author_title'   => 'author_archive_title',
			'seopress_titles_archives_author_desc'    => 'author_archive_description',
			'seopress_titles_archives_date_title'     => 'date_archive_title',
			'seopress_titles_archives_date_desc'      => 'date_archive_description',
			'seopress_titles_archives_search_title'   => 'search_title',
			'seopress_titles_archives_404_title'      => '404_title',
		];

		$this->replace( $hash, $seopress_titles, $this->titles, 'convert_variables' );
		$this->replace( $hash, $seopress_titles, $this->titles, 'convert_bool' );
		$this->titles['title_separator'] = \RankMath\CMB2::sanitize_htmlentities( $seopress_titles['seopress_titles_sep'] );

		$this->titles['date_archive_robots'] = ! empty( $seopress_titles['seopress_titles_archives_date_noindex'] ) ? [ 'noindex' ] : [];
		$this->set_robots( 'author', ! empty( $seopress_titles['seopress_titles_archives_author_noindex'] ), '' );

		$this->update_modules( $seopress_local, $seopress_sitemap );
		$this->social_settings();
		$this->advanced_settings();
		$this->post_type_settings( $seopress_titles, $seopress_sitemap );
		$this->taxonomies_settings( $seopress_titles, $seopress_sitemap );
		$this->local_seo_settings( $seopress_local );
		$this->update_settings();

		return true;
	}

	/**
	 * Import post meta of plugin.
	 *
	 * @return array
	 */
	protected function postmeta() {
		$this->set_pagination( $this->get_post_ids( true ) );

		$post_ids = $this->get_post_ids();

		$this->set_primary_term( $post_ids );

		$hash = [
			'_seopress_titles_title'         => 'rank_math_title',
			'_seopress_titles_desc'          => 'rank_math_description',
			'_seopress_analysis_target_kw'   => 'rank_math_focus_keyword',
			'_seopress_robots_canonical'     => 'rank_math_canonical_url',
			'_seopress_social_fb_title'      => 'rank_math_facebook_title',
			'_seopress_social_fb_desc'       => 'rank_math_facebook_description',
			'_seopress_social_fb_img'        => 'rank_math_facebook_image',
			'_seopress_social_twitter_title' => 'rank_math_twitter_title',
			'_seopress_social_twitter_desc'  => 'rank_math_twitter_description',
			'_seopress_social_twitter_img'   => 'rank_math_twitter_image',
			'_seopress_robots_breadcrumbs'   => 'rank_math_breadcrumb_title',
		];

		// Set Converter.
		$this->json_ld = new JsonLD();
		$this->single  = new Singular();

		foreach ( $post_ids as $post ) {
			$post_id = $post->ID;
			$this->replace_meta( $hash, null, $post_id, 'post', 'convert_variables' );
			delete_post_meta( $post_id, 'rank_math_permalink' );

			$this->replace_image( get_post_meta( $post_id, '_seopress_social_fb_img', true ), 'post', 'rank_math_facebook_image', 'rank_math_facebook_image_id', $post_id );
			$this->replace_image( get_post_meta( $post_id, '_seopress_social_twitter_img', true ), 'post', 'rank_math_twitter_image', 'rank_math_twitter_image_id', $post_id );

			$this->is_twitter_using_facebook( 'post', $post_id );
			$this->set_object_robots( $post_id, 'post' );
			$this->set_schema_data( $post_id );
			$this->set_object_redirection( $post_id, 'post' );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Import term meta of plugin.
	 *
	 * @return array
	 */
	protected function termmeta() {
		$count = 0;
		$terms = new \WP_Term_Query(
			[
				'meta_key'   => '_seopress_titles_title',
				'fields'     => 'ids',
				'hide_empty' => false,
				'get'        => 'all',
			]
		);

		if ( empty( $terms ) ) {
			return false;
		}

		$hash = [
			'_seopress_titles_title'         => 'rank_math_title',
			'_seopress_titles_desc'          => 'rank_math_description',
			'_seopress_robots_canonical'     => 'rank_math_canonical_url',
			'_seopress_social_fb_title'      => 'rank_math_facebook_title',
			'_seopress_social_fb_desc'       => 'rank_math_facebook_description',
			'_seopress_social_fb_img'        => 'rank_math_facebook_image',
			'_seopress_social_twitter_title' => 'rank_math_twitter_title',
			'_seopress_social_twitter_desc'  => 'rank_math_twitter_description',
			'_seopress_social_twitter_img'   => 'rank_math_twitter_image',
		];

		foreach ( $terms->get_terms() as $term_id ) {
			++$count;

			$this->replace_meta( $hash, [], $term_id, 'term', 'convert_variables' );
			delete_term_meta( $term_id, 'rank_math_permalink' );
			$this->is_twitter_using_facebook( 'term', $term_id );
			$this->set_object_robots( $term_id, 'term' );
			$this->set_object_redirection( $term_id, 'term' );
		}

		return compact( 'count' );
	}

	/**
	 * Imports redirections data.
	 *
	 * @return array
	 */
	protected function redirections() {
		$redirections = get_posts(
			[
				'posts_per_page' => -1,
				'post_type'      => 'seopress_404',
			]
		);

		if ( empty( $redirections ) ) {
			return false;
		}

		$count = 0;
		foreach ( $redirections as $redirection ) {

			$data = [
				'source'      => $redirection->post_title,
				'destination' => get_post_meta( $redirection->ID, '_seopress_redirections_value', true ),
				'code'        => get_post_meta( $redirection->ID, '_seopress_redirections_type', true ),
				'status'      => 'publish' === $redirection->post_status ? true : false,
			];
			if ( false !== $this->save_redirection( $data ) ) {
				++$count;
			}
		}

		return compact( 'count' );
	}

	/**
	 * Update Modules.
	 *
	 * @param array $seopress_local   Local SEO Settings.
	 * @param array $seopress_sitemap Sitemap Settings.
	 */
	private function update_modules( $seopress_local, $seopress_sitemap ) {
		$seopress_toggle = get_option( 'seopress_toggle' );

		// Enable/Disable Modules.
		$modules = [
			'local-seo'    => ! empty( $seopress_toggle['toggle-local-business'] ) ? 'on' : 'off',
			'sitemap'      => ! empty( $seopress_toggle['toggle-xml-sitemap'] ) && ! empty( $seopress_sitemap['seopress_xml_sitemap_general_enable'] ) ? 'on' : 'off',
			'rich-snippet' => ! empty( $seopress_toggle['toggle-rich-snippets'] ) ? 'on' : 'off',
			'404-monitor'  => ! empty( $seopress_toggle['toggle-404'] ) && ! empty( $seopress_local['seopress_404_enable'] ) ? 'on' : 'off',
		];
		foreach ( $modules as $key => $value ) {
			Helper::update_modules( [ $key => $value ] );
		}
	}

	/**
	 * Save redirection.
	 *
	 * @param WP_Post $redirection Redirection object.
	 *
	 * @return mixed
	 */
	private function save_redirection( $redirection ) {
		if ( empty( $redirection['source'] ) || empty( $redirection['destination'] ) ) {
			return false;
		}

		$item = Redirection::from(
			[
				'sources'     => [
					[
						'pattern'    => $redirection['source'],
						'comparison' => 'exact',
					],
				],
				'url_to'      => $redirection['destination'],
				'header_code' => $redirection['code'],
				'status'      => $redirection['status'] ? 'active' : 'inactive',
			]
		);

		return $item->save();
	}

	/**
	 * Social settings.
	 */
	private function social_settings() {
		$social = get_option( 'seopress_social_option_name' );
		$hash   = [
			'seopress_social_accounts_facebook'          => 'social_url_facebook',
			'seopress_social_facebook_link_ownership_id' => 'facebook_author_urls',
			'seopress_social_facebook_img'               => 'open_graph_image',
			'seopress_social_facebook_admin_id'          => 'facebook_admin_id',
			'seopress_social_facebook_app_id'            => 'facebook_app_id',
			'seopress_social_accounts_twitter'           => 'twitter_author_names',
			'seopress_social_knowledge_name'             => 'knowledgegraph_name',
			'seopress_social_knowledge_img'              => 'knowledgegraph_logo',
		];
		$this->replace( $hash, $social, $this->titles );

		$additional_urls = [];
		foreach ( [ 'pinterest', 'instagram', 'youtube', 'linkedin' ] as $service ) {
			if ( ! empty( $social[ "seopress_social_accounts_{$service}" ] ) ) {
				$additional_urls[] = $social[ "seopress_social_accounts_{$service}" ];
			}
		}

		if ( ! empty( $additional_urls ) ) {
			$this->titles['social_additional_profiles'] = implode( PHP_EOL, $additional_urls );
		}

		// OpenGraph.
		if ( isset( $social['og_default_image'] ) ) {
			$this->replace_image( $social['og_default_image'], $this->titles, 'open_graph_image', 'open_graph_image_id' );
		}

		if ( isset( $social['og_frontpage_image'] ) ) {
			$this->replace_image( $social['og_frontpage_image'], $this->titles, 'homepage_facebook_image', 'homepage_facebook_image_id' );
		}

		// Phone Numbers.
		if ( ! empty( $social['seopress_social_knowledge_phone'] ) ) {
			$this->titles['phone_numbers'] = [
				[
					'type'   => $social['seopress_social_knowledge_contact_type'],
					'number' => $social['seopress_social_knowledge_phone'],
				],
			];
		}
		$this->titles['knowledgegraph_type'] = isset( $social['seopress_social_knowledge_type'] ) && 'organization' === strtolower( $social['seopress_social_knowledge_type'] ) ? 'company' : 'person';
	}

	/**
	 * Post type settings.
	 *
	 * @param array $seopress_titles  Titles & Meta Settings.
	 * @param array $seopress_sitemap Sitemap Settings.
	 */
	private function post_type_settings( $seopress_titles, $seopress_sitemap ) {
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			$this->titles[ "pt_{$post_type}_title" ]       = isset( $seopress_titles['seopress_titles_single_titles'][ $post_type ] ) ? $this->convert_variables( $seopress_titles['seopress_titles_single_titles'][ $post_type ]['title'] ) : '';
			$this->titles[ "pt_{$post_type}_description" ] = isset( $seopress_titles['seopress_titles_single_titles'][ $post_type ] ) ? $this->convert_variables( $seopress_titles['seopress_titles_single_titles'][ $post_type ]['description'] ) : '';

			$this->set_robots(
				"pt_{$post_type}",
				! empty( $seopress_titles['seopress_titles_single_titles'][ $post_type ]['noindex'] ),
				! empty( $seopress_titles['seopress_titles_single_titles'][ $post_type ]['nofollow'] )
			);

			$enable_sitemap                             = $this->enable_sitemap( 'post_types', $post_type, $seopress_sitemap );
			$this->sitemap[ "pt_{$post_type}_sitemap" ] = $enable_sitemap ? 'on' : 'off';

			if ( 'attachment' === $post_type && $enable_sitemap ) {
				$this->settings['attachment_redirect_urls'] = 'off';
			}
		}
	}

	/**
	 * Taxonomies settings.
	 *
	 * @param array $seopress_titles Titles & Meta Settings.
	 * @param array $seopress_sitemap Sitemap Settings.
	 */
	private function taxonomies_settings( $seopress_titles, $seopress_sitemap ) {
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy => $object ) {
			$this->titles[ "tax_{$taxonomy}_title" ]       = ! empty( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['title'] ) ? $this->convert_variables( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['title'] ) : '';
			$this->titles[ "tax_{$taxonomy}_description" ] = ! empty( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['description'] ) ? $this->convert_variables( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['description'] ) : '';

			$this->set_robots(
				"tax_{$taxonomy}",
				! empty( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['noindex'] ),
				! empty( $seopress_titles['seopress_titles_tax_titles'][ $taxonomy ]['nofollow'] )
			);

			$this->sitemap[ "tax_{$taxonomy}_sitemap" ] = $this->enable_sitemap( 'taxonomies', $taxonomy, $seopress_sitemap ) ? 'on' : 'off';
		}
	}

	/**
	 * Whether to enable sitemap.
	 *
	 * @param string $object_prefix    post_types/taxonomies.
	 * @param string $object_type      Current object type.
	 * @param string $seopress_sitemap Sitemap settings.
	 *
	 * @return bool
	 */
	private function enable_sitemap( $object_prefix, $object_type, $seopress_sitemap ) {
		return ! empty( $seopress_sitemap[ "seopress_xml_sitemap_{$object_prefix}_list" ][ $object_type ]['include'] );
	}

	/**
	 * Set robots settings.
	 *
	 * @param string $prefix   Setting key prefix.
	 * @param bool   $noindex  Is noindex.
	 * @param bool   $nofollow Is nofollow.
	 */
	private function set_robots( $prefix, $noindex, $nofollow ) {
		if ( $noindex || $nofollow ) {
			$robots = "{$prefix}_robots";
			$custom = "{$prefix}_custom_robots";

			// Settings.
			$this->titles[ $custom ]   = 'on';
			$this->titles[ $robots ][] = $noindex ? 'noindex' : '';
			$this->titles[ $robots ][] = $nofollow ? 'nofollow' : '';
			$this->titles[ $robots ]   = array_unique( $this->titles[ $robots ] );
		}
	}

	/**
	 * Set Advanced settings.
	 */
	private function advanced_settings() {
		$seopress_advanced = get_option( 'seopress_advanced_option_name' );

		$hash = [
			'seopress_advanced_advanced_google'    => 'google_verify',
			'seopress_advanced_advanced_bing'      => 'bing_verify',
			'seopress_advanced_advanced_yandex'    => 'yandex_verify',
			'seopress_advanced_advanced_pinterest' => 'pinterest_verify',
		];
		$this->replace( $hash, $seopress_advanced, $this->settings );
		$this->replace( $hash, $seopress_advanced, $this->settings, 'convert_bool' );

		$this->settings['attachment_redirect_urls'] = ! empty( $seopress_advanced['seopress_advanced_advanced_attachments'] ) ? 'on' : 'off';
		$this->settings['strip_category_base']      = ! empty( $seopress_advanced['seopress_advanced_advanced_category_url'] ) ? 'on' : 'off';

		$set_alt   = ! empty( $seopress_advanced['seopress_advanced_advanced_image_auto_alt_editor'] ) ? 'on' : 'off';
		$set_title = ! empty( $seopress_advanced['seopress_advanced_advanced_image_auto_title_editor'] ) ? 'on' : 'off';

		$this->settings['add_img_alt']      = $set_alt;
		$this->settings['add_img_title']    = $set_title;
		$this->settings['img_alt_format']   = 'on' === $set_alt ? ' %filename%' : '';
		$this->settings['img_title_format'] = 'on' === $set_title ? ' %filename%' : '';
	}

	/**
	 * Local SEO settings.
	 *
	 * @param array $seopress_local Local SEOPress data.
	 */
	private function local_seo_settings( $seopress_local ) {
		if ( empty( $seopress_local ) ) {
			return;
		}

		// Breadcrumbs.
		$hash = [
			'seopress_breadcrumbs_i18n_home'   => 'breadcrumbs_home_label',
			'seopress_breadcrumbs_i18n_search' => 'breadcrumbs_search_format',
			'seopress_breadcrumbs_i18n_404'    => 'breadcrumbs_404_label',
			'seopress_breadcrumbs_enable'      => 'breadcrumbs',
		];
		$this->replace( $hash, $seopress_local, $this->settings );
		$this->replace( $hash, $seopress_local, $this->settings, 'convert_bool' );
		$this->settings['breadcrumbs_separator'] = \RankMath\CMB2::sanitize_htmlentities( $seopress_local['seopress_breadcrumbs_separator'] );

		$hash = [
			'seopress_local_business_type'        => 'local_business_type',
			'seopress_local_business_price_range' => 'price_range',
			'seopress_local_business_url'         => 'url',
		];
		$this->replace( $hash, $seopress_local, $this->titles, 'convert_variables' );

		// Street Address.
		$address = [];
		$hash    = [
			'seopress_local_business_street_address'   => 'streetAddress',
			'seopress_local_business_address_locality' => 'addressLocality',
			'seopress_local_business_address_region'   => 'addressRegion',
			'seopress_local_business_postal_code'      => 'postalCode',
			'seopress_local_business_address_country'  => 'addressCountry',
		];
		$this->replace( $hash, $seopress_local, $address );
		$this->titles['local_address'] = $address;

		// Coordinates.
		if ( ! empty( $seopress_local['seopress_local_business_lat'] ) && ! empty( $seopress_local['seopress_local_business_lon'] ) ) {
			$this->titles['geo'] = $seopress_local['seopress_local_business_lat'] . ', ' . $seopress_local['seopress_local_business_lon'];
		}

		$this->seopress_pro_settings( $seopress_local );
		$this->seopress_set_opening_hours( $seopress_local );
	}

	/**
	 * 404 settings.
	 *
	 * @param array $seopress_local SEOPress Pro Settings.
	 */
	private function seopress_pro_settings( $seopress_local ) {
		Helper::update_modules( [ 'redirections' => 'on' ] );
		$hash = [
			'seopress_rss_before_html'          => 'rss_before_content',
			'seopress_rss_after_html'           => 'rss_after_content',
			'seopress_404_redirect_custom_url'  => 'redirections_custom_url',
			'seopress_404_redirect_status_code' => 'redirections_header_code',
		];
		$this->replace( $hash, $seopress_local, $this->settings );
		if ( isset( $seopress_local['seopress_404_redirect_home'] ) ) {
			$this->settings['redirections_fallback'] = 'none' === $seopress_local['seopress_404_redirect_home'] ? 'default' : ( 'home' === $seopress_local['seopress_404_redirect_home'] ? 'homepage' : 'custom' );
		}
	}

	/**
	 * Set Opening Hours.
	 *
	 * @param array $seopress_local SEOPress Pro Settings.
	 */
	private function seopress_set_opening_hours( $seopress_local ) {
		if ( empty( $seopress_local['seopress_local_business_opening_hours'] ) ) {
			return;
		}

		$hash = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ];
		$data = [];
		foreach ( $seopress_local['seopress_local_business_opening_hours'] as $key => $opening_hour ) {
			if ( isset( $opening_hour['open'] ) ) {
				continue;
			}
			$data[] = [
				'day'  => $hash[ $key ],
				'time' => $opening_hour['start']['hours'] . ':' . $opening_hour['start']['mins'] . '-' . $opening_hour['end']['hours'] . ':' . $opening_hour['end']['mins'],
			];
		}
		$this->titles['opening_hours'] = $data;
	}


	/**
	 * Set schema data.
	 *
	 * @param int $post_id Post ID.
	 */
	private function set_schema_data( $post_id ) {
		if ( ! $type = get_post_meta( $post_id, '_seopress_pro_rich_snippets_type', true ) ) { // phpcs:ignore
			return;
		}

		if ( $meta_keys = $this->get_schema_metakeys( $type ) ) { // phpcs:ignore
			$schema_type = 's' === substr( $type, -1 ) ? substr( $type, 0, -1 ) : $type;
			update_post_meta( $post_id, 'rank_math_rich_snippet', $schema_type );

			foreach ( $meta_keys as $meta_key => $data ) {
				$value = $this->get_snippet_value( $post_id, $meta_key );
				if ( $value && 'events_location_address' === $meta_key ) {
					$value = [ 'streetAddress' => $value ];
				}

				update_post_meta( $post_id, "rank_math_snippet_{$data}", $value );
			}

			// Convert post now.
			$data = $this->json_ld->get_old_schema( $post_id, $this->single );
			if ( isset( $data['richSnippet'] ) ) {
				$data             = $data['richSnippet'];
				$type             = $data['@type'];
				$data['metadata'] = [
					'title' => $type,
					'type'  => 'template',
				];
				update_post_meta( $post_id, 'rank_math_schema_' . $type, $data );
			}
		}
	}

	/**
	 * Set object redirection.
	 *
	 * @param int    $object_id   Object id for destination.
	 * @param string $object_type Object type for destination.
	 */
	private function set_object_redirection( $object_id, $object_type ) {
		$source_url = 'term' === $object_type ? get_term_link( $object_id ) : get_permalink( $object_id );
		if ( is_wp_error( $source_url ) ) { // phpcs:ignore
			return;
		}

		$hash = [
			'_seopress_redirections_type'  => 'redirection_header_code',
			'_seopress_redirections_value' => 'redirection_url_to',
		];
		$this->replace_meta( $hash, null, $object_id, $object_type, 'convert_variables' );

		$redirection = [
			'source'      => trim( wp_parse_url( $source_url, PHP_URL_PATH ), '/' ),
			'destination' => $this->get_meta( $object_type, $object_id, '_seopress_redirections_value' ),
			'code'        => $this->get_meta( $object_type, $object_id, '_seopress_redirections_type' ),
			'status'      => $this->get_meta( $object_type, $object_id, '_seopress_redirections_enabled' ),
		];

		$this->save_redirection( $redirection );
	}

	/**
	 * Get snippet value.
	 *
	 * @param int $post_id  Post ID.
	 * @param int $meta_key Meta key.
	 *
	 * @return string $value Snippet value
	 */
	private function get_snippet_value( $post_id, $meta_key ) {
		$prefix = in_array( $meta_key, [ 'events_offers_valid_from_date', 'events_offers_valid_from_time' ], true ) ? '_seopress_rich_snippets_' : '_seopress_pro_rich_snippets_';
		$value  = get_post_meta( $post_id, $prefix . $meta_key, true );

		if ( in_array( $meta_key, [ 'recipes_prep_time', 'recipes_cook_time', 'videos_duration' ], true ) ) {
			$value .= 'M';
		}

		$hash = [
			'events_start_date'             => 'events_start_time',
			'events_end_date'               => 'events_end_time',
			'events_offers_valid_from_date' => 'events_offers_valid_from_time',
		];

		if ( isset( $hash[ $meta_key ] ) ) {
			$time  = get_post_meta( $post_id, $prefix . $hash[ $meta_key ], true );
			$value = strtotime( $value . ' ' . $time );
		}

		return $value;
	}

	/**
	 * Get schema meta keys.
	 *
	 * @param string $type Type of snippet.
	 *
	 * @return array
	 */
	private function get_schema_metakeys( $type ) {
		$hash = [
			'articles' => [
				'article_type'  => 'article_type',
				'article_title' => 'name',
			],
			'recipes'  => [
				'recipes_name'       => 'name',
				'recipes_desc'       => 'desc',
				'recipes_cat'        => 'recipe_type',
				'recipes_prep_time'  => 'recipe_preptime',
				'recipes_cook_time'  => 'recipe_cooktime',
				'recipes_calories'   => 'recipe_calories',
				'recipes_yield'      => 'recipe_yield',
				'recipes_ingredient' => 'recipe_ingredients',
			],
			'courses'  => [
				'courses_title'   => 'name',
				'courses_desc'    => 'desc',
				'courses_school'  => 'course_provider',
				'courses_website' => 'course_provider_url',
			],
			'videos'   => [
				'videos_name'        => 'name',
				'videos_description' => 'desc',
				'videos_img'         => 'rank_math_twitter_title',
				'videos_url'         => 'video_url',
				'videos_duration'    => 'video_duration',
			],
			'events'   => [
				'events_type'                   => 'event_type',
				'events_name'                   => 'name',
				'events_desc'                   => 'desc',
				'events_location_address'       => 'event_address',
				'events_location_name'          => 'event_venue',
				'events_location_url'           => 'event_venue_url',
				'events_start_date'             => 'event_startdate',
				'events_end_date'               => 'event_enddate',
				'events_offers_price'           => 'event_price',
				'events_offers_price_currency'  => 'event_currency',
				'events_offers_url'             => 'event_ticketurl',
				'events_offers_availability'    => 'event_availability',
				'events_offers_valid_from_date' => 'event_availability_starts',
				'events_performer'              => 'event_performer',
			],
			'products' => [
				'product_description'    => 'desc',
				'product_name'           => 'name',
				'product_price_currency' => 'product_currency',
				'product_price'          => 'product_price',
			],
			'review'   => [
				'review_item'   => 'name',
				'item_name'     => 'desc',
				'review_rating' => 'review_rating_value',
			],
		];

		return isset( $hash[ $type ] ) ? $hash[ $type ] : false;
	}

	/**
	 * Set primary term for post
	 *
	 * @param int[] $post_ids Post IDs.
	 */
	private function set_primary_term( $post_ids ) {
		$post_ids = wp_list_pluck( $post_ids, 'ID' );
		$table    = DB::query_builder( 'postmeta' );
		$results  = $table->whereLike( 'meta_key', '_seopress_robots_primary_cat' )->whereIn( 'post_id', $post_ids )->get();

		foreach ( $results as $result ) {
			if ( 'none' !== $result->meta_value ) {
				update_post_meta( $result->post_id, 'rank_math_primary_category', $result->meta_value );
			}
		}
	}

	/**
	 * Set post/term robots.
	 *
	 * @param int    $object_id   Object id.
	 * @param string $object_type Object type.
	 */
	private function set_object_robots( $object_id, $object_type ) {
		// Early bail if robots data is set in Rank Math plugin.
		if ( ! empty( $this->get_meta( $object_type, $object_id, 'rank_math_robots' ) ) ) {
			return;
		}

		$current     = $this->get_robots_by_hash( $object_id, $object_type );
		$is_noindex  = in_array( 'noindex', $current, true );
		$is_nofollow = in_array( 'nofollow', $current, true );

		if ( ! $is_noindex || ! $is_nofollow ) {
			$robots    = $this->get_default_robots( $object_id, $object_type );
			$current[] = ! $is_nofollow && ! empty( $robots['nofollow'] ) ? 'nofollow' : '';

			// Keep global no index status.
			if ( ! empty( $robots['noindex'] ) ) {
				unset( $current['index'] );
				$current[] = 'noindex';
			}
		}

		$this->update_meta( $object_type, $object_id, 'rank_math_robots', array_unique( $current ) );
	}

	/**
	 * Get by meta hash.
	 *
	 * @param int    $object_id   Object id.
	 * @param string $object_type Object type.
	 *
	 * @return array Array of robots data.
	 */
	private function get_robots_by_hash( $object_id, $object_type ) {
		$current = [];
		$hash    = [
			'_seopress_robots_index'      => 'noindex',
			'_seopress_robots_follow'     => 'nofollow',
			'_seopress_robots_imageindex' => 'noimageindex',
			'_seopress_robots_archive'    => 'noarchive',
			'_seopress_robots_snippet'    => 'nosnippet',
		];

		foreach ( $hash as $source => $value ) {
			if ( ! empty( $this->get_meta( $object_type, $object_id, $source ) ) ) {
				$current[] = $value;
			}
		}

		return $current;
	}

	/**
	 * Get default robots data from settings.
	 *
	 * @param int    $object_id   Object id.
	 * @param string $object_type Object type.
	 *
	 * @return array Array of robots data.
	 */
	private function get_default_robots( $object_id, $object_type ) {
		$seopress_titles = get_option( 'seopress_titles_option_name' );
		if ( 'post' === $object_type ) {
			$post_type = get_post_type( $object_id );
			return isset( $seopress_titles['seopress_titles_single_titles'][ $post_type ] ) ? $seopress_titles['seopress_titles_single_titles'][ $post_type ] : [];
		}

		$term = get_term( $object_id );
		return isset( $seopress_titles['seopress_titles_tax_titles'][ $term->taxonomy ] ) ? $seopress_titles['seopress_titles_tax_titles'][ $term->taxonomy ] : [];
	}
}
PK     “ŠU].ß¦wY  wY  0  includes/admin/importers/class-wp-schema-pro.phpnu „[µü¤        <?php
/**
 * The WP Schema Pro Import Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * WP_Schema_Pro class.
 */
class WP_Schema_Pro extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'WP Schema Pro';

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key = 'bsf-aiosrs';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'wp-schema-pro-general-settings', 'wp-schema-pro-social-profiles', 'wp-schema-pro-global-schemas' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'settings', 'postmeta' ];

	/**
	 * Convert Schema Pro variables if needed.
	 *
	 * @param string $value Value to convert.
	 *
	 * @return string
	 */
	public function convert_variables( $value ) {
		$value = str_replace( 'blogname', '%sitename%', $value );
		$value = str_replace( 'blogdescription', '%sitedesc%', $value );
		$value = str_replace( 'site_url', get_bloginfo( 'url' ), $value );
		$value = str_replace( 'site_logo', get_theme_mod( 'custom_logo' ), $value );
		$value = str_replace( 'featured_image', '', $value );
		$value = str_replace( 'featured_img', '', $value );
		$value = str_replace( 'post_title', '%seo_title%', $value );
		$value = str_replace( 'post_excerpt', '%seo_description%', $value );
		$value = str_replace( 'post_content', '%seo_description%', $value );
		$value = str_replace( 'post_date', '%date%', $value );
		$value = str_replace( 'post_modified', '%modified%', $value );
		$value = str_replace( 'post_permalink', '', $value );
		$value = str_replace( 'author_name', '%name%', $value );
		$value = str_replace( 'author_first_name', '%name%', $value );
		$value = str_replace( 'author_last_name', '%name%', $value );
		$value = str_replace( 'author_image', '', $value );

		return $value;
	}

	/**
	 * Import settings of plugin.
	 *
	 * @return bool
	 */
	protected function settings() {
		$this->get_settings();

		$schema_general = get_option( 'wp-schema-pro-general-settings' );
		$schema_social  = get_option( 'wp-schema-pro-social-profiles' );
		$schema_global  = get_option( 'wp-schema-pro-global-schemas' );

		// Knowledge Graph Logo.
		if ( isset( $schema_general['site-logo-custom'] ) ) {
			$this->replace_image( $schema_general['site-logo-custom'], $this->titles, 'knowledgegraph_logo', 'knowledgegraph_logo_id' );
		}

		// General.
		$hash = [ 'site-represent' => 'knowledgegraph_type' ];

		$has_key          = 'person' === $schema_general['site-represent'] ? 'person-name' : 'site-name';
		$hash[ $has_key ] = 'knowledgegraph_name';
		$this->replace( $hash, $schema_general, $this->titles );

		$this->titles['local_seo'] = isset( $schema_general['site-represent'] ) && ! empty( $yoast_titles['site-represent'] ) ? 'on' : 'off';

		// Social.
		$hash = [
			'facebook' => 'social_url_facebook',
			'twitter'  => 'twitter_author_names',
		];
		$this->replace( $hash, $schema_social, $this->titles );

		// About & Contact Page.
		$hash = [
			'about-page'   => 'local_seo_about_page',
			'contact-page' => 'local_seo_contact_page',
		];
		$this->replace( $hash, $schema_global, $this->titles );

		$this->update_settings();

		return true;
	}

	/**
	 * Import post meta of plugin.
	 *
	 * @return array
	 */
	protected function postmeta() {
		$this->set_pagination( $this->get_post_ids( true ) );

		foreach ( $this->get_post_ids() as $snippet_post ) {
			$post_id = $snippet_post->ID;
			$snippet = $this->get_snippet_details( $post_id );
			if ( ! $snippet ) {
				continue;
			}

			$this->update_postmeta( $post_id, $snippet );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Update post meta.
	 *
	 * @param int   $post_id Post ID.
	 * @param array $snippet Snippet data.
	 */
	private function update_postmeta( $post_id, $snippet ) {
		$type = $snippet['type'];
		$hash = $this->get_schema_types();
		if ( ! isset( $hash[ $type ] ) ) {
			return;
		}

		$details = $snippet['details'];
		$methods = [
			'work-example' => 'get_book_editions',
			'steps'        => 'get_howto_steps',
			'tool'         => 'get_howto_tools',
			'supply'       => 'get_howto_supplies',
			'rating'       => 'get_rating',
		];

		$data = [];
		foreach ( $hash[ $type ] as $snippet_key => $snippet_value ) {
			$method = isset( $methods[ $snippet_key ] ) ? $methods[ $snippet_key ] : 'get_schema_meta';
			$value  = $this->$method( $details, $snippet_key, $post_id, $snippet, $snippet_value );

			$this->validate_schema_data( $data, $value, $snippet_value, $snippet_key );
		}

		if ( ! empty( $data ) ) {
			if ( isset( $data['schema-type'] ) ) {
				$type = $data['schema-type'];
				unset( $data['schema-type'] );
			}

			$type             = $this->sanitize_schema_type( $type );
			$data['@type']    = $type;
			$data['metadata'] = [
				'title'     => Helper::sanitize_schema_title( $type ),
				'type'      => 'template',
				'isPrimary' => 1,
				'shortcode' => uniqid( 's-' ),
			];

			$type = in_array( $type, [ 'BlogPosting', 'NewsArticle' ], true ) ? 'Article' : $type;
			update_post_meta( $post_id, 'rank_math_schema_' . $type, $data );
		}
	}

	/**
	 * Validate schema data.
	 *
	 * @param array  $data        Schema entity data.
	 * @param string $value       Entity value.
	 * @param string $key         Entity key.
	 * @param string $snippet_key Snippet key.
	 */
	private function validate_schema_data( &$data, $value, $key, $snippet_key ) {
		if ( 'question-answer' === $snippet_key && ! empty( $value ) ) {
			foreach ( $value as $question ) {
				$data[ $key ][] = [
					'@type'          => 'Question',
					'name'           => $question['question'],
					'acceptedAnswer' => [
						'@type' => 'Answer',
						'text'  => $question['answer'],
					],
				];
			}

			return;
		}

		if ( ! Str::contains( '.', $key ) ) {
			$data[ $key ] = $value;
			return;
		}

		$element = explode( '.', $key );
		if ( 2 === count( $element ) ) {
			$this->add_type( $data[ $element[0] ], $element[0] );
			$data[ $element[0] ][ $element[1] ] = $value;
			return;
		}

		if ( count( $element ) > 2 ) {
			$this->add_type( $data[ $element[0] ], $element[0] );
			$this->add_type( $data[ $element[0] ][ $element[1] ], $element[1] );
			$data[ $element[0] ][ $element[1] ][ $element[2] ] = $value;
		}
	}

	/**
	 * Add property type.
	 *
	 * @param array  $data Schema entity data.
	 * @param string $key  Entity key.
	 */
	private function add_type( &$data, $key ) {
		if ( 'location' === $key || 'jobLocation' === $key ) {
			$data['@type'] = 'Place';
		}

		if ( 'address' === $key ) {
			$data['@type'] = 'PostalAddress';
		}

		if ( 'offers' === $key ) {
			$data['@type'] = 'Offer';
		}

		if ( 'brand' === $key ) {
			$data['@type'] = 'Brand';
		}

		if ( 'review' === $key ) {
			$data['@type'] = 'Review';
		}

		if ( 'reviewRating' === $key ) {
			$data['@type'] = 'Rating';
		}

		if ( 'nutrition' === $key ) {
			$data['@type'] = 'NutritionInformation';
		}

		if ( 'baseSalary' === $key ) {
			$data['@type'] = 'MonetaryAmount';
		}

		if ( 'value' === $key ) {
			$data['@type'] = 'QuantitativeValue';
		}

		if ( 'performer' === $key ) {
			$data['@type'] = 'Person';
		}

		if ( 'provider' === $key || 'hiringOrganization' === $key ) {
			$data['@type'] = 'Organization';
		}
	}

	/**
	 * Get ratings value.
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_rating( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		return get_post_meta( $post_id, 'bsf-schema-pro-rating-' . $snippet['id'], true );
	}

	/**
	 * Get post meta for schema plugin
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_schema_meta( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		$value = isset( $details[ $snippet_key ] ) ? $details[ $snippet_key ] : '';
		if ( 'custom-text' === $value ) {
			$value = isset( $details[ $snippet_key . '-custom-text' ] ) ? $details[ $snippet_key . '-custom-text' ] : '';
		}

		if ( 'create-field' === $value ) {
			$value = get_post_meta( $post_id, $snippet['type'] . '-' . $snippet['id'] . '-' . $snippet_key, true );
		}

		if ( 'specific-field' === $value ) {
			$key   = isset( $details[ $snippet_key . '-specific-field' ] ) ? $details[ $snippet_key . '-specific-field' ] : '';
			$value = get_post_meta( $post_id, $key, true );
		}

		return $this->convert_variables( $value );
	}

	/**
	 * Get Book Editions.
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_howto_steps( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		$steps = get_post_meta( $post_id, "how-to-{$snippet['id']}-steps", true );
		if ( empty( $steps ) ) {
			return [];
		}

		$data = [];
		foreach ( $steps as $step ) {
			$entity = [
				'@type' => 'HowToStep',
				'name'  => $step['name'],
				'url'   => $step['url'],
			];

			if ( ! empty( $step['description'] ) ) {
				$entity['itemListElement'] = [
					'@type' => 'HowToDirection',
					'text'  => $step['description'],
				];
			}

			if ( ! empty( $step['image'] ) ) {
				$entity['image'] = [
					'@type' => 'ImageObject',
					'text'  => wp_get_attachment_url( $step['image'] ),
				];
			}

			$data[] = $entity;
		}

		return $data;
	}

	/**
	 * Get Book Editions.
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_howto_tools( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		$tools = get_post_meta( $post_id, "how-to-{$snippet['id']}-tool", true );
		if ( empty( $tools ) ) {
			return [];
		}

		$data = [];
		foreach ( $tools as $tool ) {
			$data[] = [
				'@type' => 'HowToTool',
				'name'  => $tool['name'],
			];
		}

		return $data;
	}

	/**
	 * Get Book Editions.
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_howto_supplies( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		$supplies = get_post_meta( $post_id, "how-to-{$snippet['id']}-supply", true );
		if ( empty( $supplies ) ) {
			return [];
		}

		$data = [];
		foreach ( $supplies as $supply ) {
			$data[] = [
				'@type' => 'HowToSupply',
				'name'  => $supply['name'],
			];
		}

		return $data;
	}

	/**
	 * Get Book Editions.
	 *
	 * @param  array  $details       Array of details.
	 * @param  string $snippet_key   Snippet key.
	 * @param  string $post_id       Post ID.
	 * @param  array  $snippet       Snippet data.
	 * @param  string $snippet_value Snippet value.
	 * @return string
	 */
	private function get_book_editions( $details, $snippet_key, $post_id, $snippet, $snippet_value ) {
		if ( empty( $details[ $snippet_key ] ) ) {
			return '';
		}

		$editions = [];
		$data     = [
			'details'       => $details,
			'snippet_key'   => $snippet_key,
			'post_id'       => $post_id,
			'snippet'       => $snippet,
			'snippet_value' => $snippet_value,
		];

		foreach ( $details[ $snippet_key ] as $key => $edition ) {
			$editions[] = [
				'book_edition' => $this->normalize_edition( $key . '-book-edition', $edition['book-edition'], $data ),
				'isbn'         => $this->normalize_edition( $key . '-serial-number', $edition['serial-number'], $data ),
				'url'          => $this->normalize_edition( $key . '-url-template', $edition['url-template'], $data ),
				'book_format'  => $this->normalize_edition( $key . '-book-format', $edition['book-format'], $data ),
			];
		}

		return $editions;
	}

	/**
	 * Normalize Book Edition.
	 *
	 * @param  string $key   Custom field key.
	 * @param  string $value Custom field value.
	 * @param  array  $data  Snippet data.
	 * @return string
	 */
	private function normalize_edition( $key, $value, $data ) {
		if ( ! $value ) {
			return '';
		}

		$hash = [
			'custom-text'    => 'get_custom_text',
			'create-field'   => 'get_created_field',
			'specific-field' => 'get_specific_field',
		];
		if ( isset( $hash[ $value ] ) ) {
			$method = $hash[ $value ];
			$value  = $this->$method( $key, $value, $data );
		}

		return $this->convert_variables( $value );
	}

	/**
	 * Get Custom Text added in the Settings.
	 *
	 * @param  string $key   Custom field key.
	 * @param  string $value Custom field value.
	 * @param  array  $data  Snippet data.
	 * @return string
	 */
	private function get_custom_text( $key, $value, $data ) {
		$key = $data['snippet_key'] . '-custom-text';
		return isset( $data['details'][ $key ] ) ? $data['details'][ $key ] : '';
	}

	/**
	 * Get Created field value added in the post metabox.
	 *
	 * @param  string $key   Custom field key.
	 * @param  string $value Custom field value.
	 * @param  array  $data  Snippet data.
	 * @return string
	 */
	private function get_created_field( $key, $value, $data ) {
		$meta_key = $data['snippet']['type'] . '-' . $data['snippet']['id'] . '-' . $data['snippet_key'] . '-' . $key;
		return get_post_meta( $data['post_id'], $meta_key, true );
	}

	/**
	 * Get Specific Custom field value.
	 *
	 * @param  string $key   Custom field key.
	 * @param  string $value Custom field value.
	 * @param  array  $data  Snippet data.
	 * @return string
	 */
	private function get_specific_field( $key, $value, $data ) {
		$key = isset( $data['details'][ $data[ $key . '-specific-field' ] ] ) ? $data['details'][ $data[ $key . '-specific-field' ] ] : '';
		return get_post_meta( $data['post_id'], $key, true );
	}

	/**
	 * Sanitize schema type before saving
	 *
	 * @param  string $type Schema type to sanitize.
	 * @return string
	 */
	private function sanitize_schema_type( $type ) {
		$hash = [
			'job-posting'          => 'JobPosting',
			'video-object'         => 'VideoObject',
			'software-application' => 'SoftwareApplication',
			'faq'                  => 'FAQPage',
			'how-to'               => 'HowTo',
		];

		$type = in_array( $type, [ 'AdvertiserContentArticle', 'Report', 'SatiricalArticle', 'ScholarlyArticle', 'TechArticle' ], true )
				? 'Article'
				: $type;

		return isset( $hash[ $type ] ) ? $hash[ $type ] : ucfirst( $type );
	}

	/**
	 * Get Snippet Details stored in aiosrs-schema posts
	 *
	 * @param int $post_id Post ID.
	 * @return array
	 */
	private function get_snippet_details( $post_id ) {
		global $wpdb;

		$post_type = addcslashes( get_post_type( $post_id ), '_' );
		$query     = "SELECT p.ID, pm.meta_value FROM {$wpdb->postmeta} as pm
		INNER JOIN {$wpdb->posts} as p ON pm.post_id = p.ID
		WHERE pm.meta_key = 'bsf-aiosrs-schema-location'
		AND p.post_type = 'aiosrs-schema'
		AND p.post_status = 'publish'";

		$orderby    = ' ORDER BY p.post_date DESC LIMIT 1';
		$meta_args  = "pm.meta_value LIKE '%\"basic-global\"%'";
		$meta_args .= " OR pm.meta_value LIKE '%\"basic-singulars\"%'";
		$meta_args .= " OR pm.meta_value LIKE '%\"{$post_type}|all\"%'";
		$meta_args .= " OR pm.meta_value LIKE '%\"post-{$post_id}\"%'";

		$local_posts = DB_Helper::get_col( $query . ' AND (' . $meta_args . ')' . $orderby );
		if ( empty( $local_posts ) ) {
			return false;
		}

		$current_page_data = [];
		foreach ( $local_posts as $local_post ) {
			$snippet_type = get_post_meta( $local_post, 'bsf-aiosrs-schema-type', true );

			return [
				'id'      => $local_post,
				'type'    => $snippet_type,
				'details' => get_post_meta( $local_post, 'bsf-aiosrs-' . $snippet_type, true ),
			];
		}

		return false;
	}

	/**
	 * Get the actions which can be performed for the plugin.
	 *
	 * @return array
	 */
	public function get_choices() {
		return [
			'settings' => esc_html__( 'Import Settings', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Plugin settings and site-wide meta data.', 'seo-by-rank-math' ) ),
			'postmeta' => esc_html__( 'Import Schemas', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Import all Schema data for Posts, Pages, and custom post types.', 'seo-by-rank-math' ) ),
		];
	}

	/**
	 * Get schema types
	 *
	 * @return array
	 */
	private function get_schema_types() {
		return [
			'event'                => $this->get_event_fields(),
			'job-posting'          => $this->get_job_posting_fields(),
			'product'              => $this->get_product_fields(),
			'recipe'               => $this->get_recipe_fields(),
			'software-application' => $this->get_software_fields(),
			'video-object'         => $this->get_video_fields(),
			'article'              => [
				'name'        => 'headline',
				'description' => 'description',
				'schema-type' => 'schema-type',
			],
			'book'                 => [
				'name'         => 'name',
				'url'          => 'url',
				'author'       => 'author.name',
				'work-example' => 'book_editions',
				'rating'       => 'review.reviewRating.ratingValue',
			],
			'course'               => [
				'name'              => 'name',
				'description'       => 'description',
				'organization-name' => 'provider.name',
				'same-as'           => 'provider.sameAs',
				'rating'            => 'review.reviewRating.ratingValue',
			],
			'person'               => [
				'name'      => 'name',
				'email'     => 'email',
				'gender'    => 'gender',
				'job-title' => 'jobTitle',
				'street'    => 'address.streetAddress',
				'locality'  => 'address.addressLocality',
				'region'    => 'address.addressRegion',
				'postal'    => 'address.postalCode',
				'country'   => 'address.addressCountry',
			],
			'service'              => [
				'name'        => 'name',
				'description' => 'description',
				'type'        => 'serviceType',
				'price-range' => 'offers.price',
			],
			'faq'                  => [
				'question-answer' => 'mainEntity',
			],
			'how-to'               => [
				'name'        => 'name',
				'description' => 'description',
				'total-time'  => 'totalTime',
				'steps'       => 'step',
				'supply'      => 'supply',
				'tool'        => 'tool',
			],
		];
	}

	/**
	 * Get event fields.
	 *
	 * @return array
	 */
	private function get_event_fields() {
		return [
			'name'                  => 'name',
			'description'           => 'description',
			'schema-type'           => 'schema-type',
			'event-status'          => 'eventStatus',
			'event-attendance-mode' => 'eventAttendanceMode',
			'start-date'            => 'startDate',
			'end-date'              => 'endDate',
			'location'              => 'location.name',
			'location-street'       => 'location.address.streetAddress',
			'location-locality'     => 'location.address.addressLocality',
			'location-region'       => 'location.address.addressRegion',
			'location-postal'       => 'location.address.postalCode',
			'location-country'      => 'location.address.addressCountry',
			'ticket-buy-url'        => 'offers.url',
			'price'                 => 'offers.price',
			'currency'              => 'offers.priceCurrency',
			'avail'                 => 'offers.availability',
			'performer'             => 'performer.name',
			'rating'                => 'review.reviewRating.ratingValue',
		];
	}

	/**
	 * Get job_posting fields.
	 *
	 * @return array
	 */
	private function get_job_posting_fields() {
		return [
			'title'             => 'title',
			'description'       => 'description',
			'job-type'          => 'employmentType',
			'start-date'        => 'datePosted',
			'expiry-date'       => 'validThrough',
			'organization-name' => 'hiringOrganization.name',
			'same-as'           => 'hiringOrganization.sameAs',
			'organization-logo' => 'hiringOrganization.logo',
			'location-street'   => 'jobLocation.address.streetAddress',
			'location-locality' => 'jobLocation.address.addressLocality',
			'location-region'   => 'jobLocation.address.addressRegion',
			'location-postal'   => 'jobLocation.address.postalCode',
			'location-country'  => 'jobLocation.address.addressCountry',
			'salary'            => 'baseSalary.value.value',
			'salary-currency'   => 'baseSalary.currency',
			'salary-unit'       => 'baseSalary.value.unitText',
		];
	}

	/**
	 * Get product fields.
	 *
	 * @return array
	 */
	private function get_product_fields() {
		return [
			'name'              => 'name',
			'description'       => 'description',
			'sku'               => 'sku',
			'brand-name'        => 'brand.name',
			'price'             => 'offers.price',
			'currency'          => 'offers.priceCurrency',
			'avail'             => 'offers.availability',
			'price-valid-until' => 'offers.priceValidUntil',
			'rating'            => 'review.reviewRating.ratingValue',
		];
	}

	/**
	 * Get recipe fields.
	 *
	 * @return array
	 */
	private function get_recipe_fields() {
		return [
			'name'             => 'name',
			'description'      => 'description',
			'recipe-category'  => 'recipeCategory',
			'recipe-cuisine'   => 'recipeCuisine',
			'recipe-yield'     => 'recipeYield',
			'recipe-keywords'  => 'keywords',
			'nutrition'        => 'nutrition.calories',
			'preparation-time' => 'prepTime',
			'cook-time'        => 'cookTime',
			'ingredients'      => 'recipeIngredient',
			'rating'           => 'review.reviewRating.ratingValue',
		];
	}

	/**
	 * Get software fields.
	 *
	 * @return array
	 */
	private function get_software_fields() {
		return [
			'name'             => 'name',
			'rating'           => 'review.reviewRating.ratingValue',
			'price'            => 'offers.price',
			'currency'         => 'offers.priceCurrency',
			'operating-system' => 'operatingSystem',
			'category'         => 'applicationCategory',
		];
	}

	/**
	 * Get video fields.
	 *
	 * @return array
	 */
	private function get_video_fields() {
		return [
			'name'        => 'name',
			'description' => 'description',
			'content-url' => 'contentUrl',
			'embed-url'   => 'embedUrl',
			'duration'    => 'duration',
			'rating'      => 'review.reviewRating.ratingValue',
		];
	}
}
PK     ”ŠU]À�½%f¢  f¢  (  includes/admin/importers/class-yoast.phpnu „[µü¤        <?php
/**
 * The Yoast SEO Import Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Helper;
use RankMath\Redirections\Redirection;
use RankMath\Tools\Yoast_Blocks;
use RankMath\Helpers\DB;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast class.
 */
class Yoast extends Plugin_Importer {

	/**
	 * The plugin name.
	 *
	 * @var string
	 */
	protected $plugin_name = 'Yoast SEO';

	/**
	 * Plugin options meta key.
	 *
	 * @var string
	 */
	protected $meta_key = '_yoast_wpseo_';

	/**
	 * Option keys to import and clean.
	 *
	 * @var array
	 */
	protected $option_keys = [ 'wpseo', 'wpseo_%' ];

	/**
	 * Choices keys to import.
	 *
	 * @var array
	 */
	protected $choices = [ 'settings', 'locations', 'news', 'video', 'postmeta', 'termmeta', 'usermeta', 'redirections', 'blocks' ];

	/**
	 * Table names to drop while cleaning.
	 *
	 * @var array
	 */
	protected $table_names = [ 'yoast_seo_links', 'yoast_seo_meta' ];

	/**
	 * Convert Yoast / AIO SEO variables if needed.
	 *
	 * @param string $value Value to convert.
	 *
	 * @return string
	 */
	public function convert_variables( $value ) {
		$value = str_replace( '%%term_title%%', '%term%', $value );
		$value = str_replace( '%%category_description%%', '%term_description%', $value );
		$value = str_replace( '%%searchphrase%%', '%search_query%', $value );
		$value = preg_replace( '/%%cf_([^%]+)%%/i', '%customfield($1)%', $value );
		$value = preg_replace( '/%%ct_([^%]+)%%/i', '%customterm($1)%', $value );
		$value = preg_replace( '/%%ct_desc_([^%]+)%%/i', '%customterm($1)%', $value );

		return str_replace( '%%', '%', $value );
	}

	/**
	 * Import settings of plugin.
	 *
	 * @return bool
	 */
	protected function settings() {
		$this->get_settings();

		$yoast_main          = get_option( 'wpseo' );
		$yoast_social        = get_option( 'wpseo_social' );
		$yoast_titles        = get_option( 'wpseo_titles' );
		$yoast_internallinks = get_option( 'wpseo_internallinks' );
		$yoast_sitemap       = get_option( 'wpseo_xml' );

		// Features.
		$modules  = [];
		$features = [
			'keyword_analysis_active' => 'seo-analysis',
			'enable_xml_sitemap'      => 'sitemap',
		];
		foreach ( $features as $feature => $module ) {
			$modules[ $module ] = 1 === intval( $yoast_main[ $feature ] ) ? 'on' : 'off';
		}
		Helper::update_modules( $modules );

		$this->titles['local_seo'] = isset( $yoast_titles['company_or_person'] ) && ! empty( $yoast_titles['company_or_person'] ) ? 'on' : 'off';

		// Titles & Descriptions.
		$hash = [
			'title-home-wpseo'       => 'homepage_title',
			'metadesc-home-wpseo'    => 'homepage_description',
			'title-author-wpseo'     => 'author_archive_title',
			'metadesc-author-wpseo'  => 'author_archive_description',
			'title-archive-wpseo'    => 'date_archive_title',
			'metadesc-archive-wpseo' => 'date_archive_description',
			'title-search-wpseo'     => 'search_title',
			'title-404-wpseo'        => '404_title',
			'org-description'        => 'organization_description',
		];
		$this->replace( $hash, $yoast_titles, $this->titles, 'convert_variables' );

		$this->local_seo_settings();
		$this->set_additional_organization_details( $yoast_titles );
		$this->set_separator( $yoast_titles );
		$this->set_post_types( $yoast_titles );
		$this->set_taxonomies( $yoast_titles, $yoast_sitemap );
		$this->sitemap_settings( $yoast_main, $yoast_sitemap, $yoast_titles );
		$this->social_webmaster_settings( $yoast_main, $yoast_social );
		$this->breadcrumb_settings( $yoast_titles, $yoast_internallinks );
		$this->misc_settings( $yoast_titles, $yoast_social );
		$this->slack_settings( $yoast_main );
		$this->update_settings();

		return true;
	}

	/**
	 * Set post type settings.
	 *
	 * @param array $yoast_titles Settings.
	 */
	private function set_post_types( $yoast_titles ) {
		$hash = [];
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			$this->set_robots( "pt_{$post_type}", $post_type, $yoast_titles );

			$hash[ "title-{$post_type}" ]              = "pt_{$post_type}_title";
			$hash[ "metadesc-{$post_type}" ]           = "pt_{$post_type}_description";
			$hash[ "post_types-{$post_type}-maintax" ] = "pt_{$post_type}_primary_taxonomy";

			// Has Archive.
			$hash[ "title-ptarchive-{$post_type}" ]    = "pt_{$post_type}_archive_title";
			$hash[ "metadesc-ptarchive-{$post_type}" ] = "pt_{$post_type}_archive_description";

			// NOINDEX and Sitemap.
			$this->sitemap[ "pt_{$post_type}_sitemap" ] = isset( $yoast_titles[ "noindex-{$post_type}" ] ) && $yoast_titles[ "noindex-{$post_type}" ] ? 'off' : 'on';

			// Show/Hide Metabox.
			if ( isset( $yoast_titles[ "display-metabox-pt-{$post_type}" ] ) ) {
				$show = $yoast_titles[ "display-metabox-pt-{$post_type}" ]; // phpcs:ignore
				$this->titles[ "pt_{$post_type}_add_meta_box" ] = ( ! $show || 'off' === $show ) ? 'off' : 'on';
			}
		}

		$this->replace( $hash, $yoast_titles, $this->titles, 'convert_variables' );
	}

	/**
	 * Set taxonomies settings.
	 *
	 * @param array $yoast_titles  Titles & Meta Settings.
	 * @param array $yoast_sitemap Sitemap Settings.
	 */
	private function set_taxonomies( $yoast_titles, $yoast_sitemap ) {
		$hash = [];
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy => $object ) {
			$this->set_robots( "tax_{$taxonomy}", "tax-{$taxonomy}", $yoast_titles );

			$hash[ "title-tax-{$taxonomy}" ]    = "tax_{$taxonomy}_title";
			$hash[ "metadesc-tax-{$taxonomy}" ] = "tax_{$taxonomy}_description";

			// Show/Hide Metabox.
			$this->titles[ "tax_{$taxonomy}_add_meta_box" ] = isset( $yoast_titles[ "display-metabox-tax-{$taxonomy}" ] ) && $yoast_titles[ "display-metabox-tax-{$taxonomy}" ] ? 'on' : 'off';

			// Sitemap.
			$key   = "taxonomies-{$taxonomy}-not_in_sitemap";
			$value = isset( $yoast_sitemap[ $key ] ) ? ! $yoast_sitemap[ $key ] : false;

			$this->sitemap[ "tax_{$taxonomy}_sitemap" ] = $value ? 'on' : 'off';
		}
		$this->replace( $hash, $yoast_titles, $this->titles, 'convert_variables' );
	}

	/**
	 * Set robots settings.
	 *
	 * @param string $prefix       Setting prefix.
	 * @param string $yoast_prefix Setting prefix.
	 * @param array  $yoast_titles Settings.
	 */
	private function set_robots( $prefix, $yoast_prefix, $yoast_titles ) {
		if ( isset( $yoast_titles[ "noindex-{$yoast_prefix}" ] ) ) {
			$this->titles[ "{$prefix}_custom_robots" ] = 'on';
			$this->titles[ "{$prefix}_robots" ]        = [];
			if ( $yoast_titles[ "noindex-{$yoast_prefix}" ] ) {
				$this->titles[ "{$prefix}_robots" ][] = 'noindex';
				$this->titles[ "{$prefix}_robots" ]   = array_unique( $this->titles[ "{$prefix}_robots" ] );
			}
		}

		$this->titles[ "{$prefix}_add_meta_box" ] = isset( $yoast_titles[ "hideeditbox-{$yoast_prefix}" ] ) && $yoast_titles[ "hideeditbox-{$yoast_prefix}" ] ? 'off' : 'on';
	}

	/**
	 * Import post meta of plugin.
	 *
	 * @return array
	 */
	protected function postmeta() {
		$this->set_pagination( $this->get_post_ids( true ) );

		$post_ids = $this->get_post_ids();

		$this->set_primary_term( $post_ids );

		$hash = [
			'_yoast_wpseo_title'                 => 'rank_math_title',
			'_yoast_wpseo_metadesc'              => 'rank_math_description',
			'_yoast_wpseo_focuskw'               => 'rank_math_focus_keyword',
			'_yoast_wpseo_canonical'             => 'rank_math_canonical_url',
			'_yoast_wpseo_opengraph-title'       => 'rank_math_facebook_title',
			'_yoast_wpseo_opengraph-description' => 'rank_math_facebook_description',
			'_yoast_wpseo_twitter-title'         => 'rank_math_twitter_title',
			'_yoast_wpseo_twitter-description'   => 'rank_math_twitter_description',
			'_yoast_wpseo_bctitle'               => 'rank_math_breadcrumb_title',
			'_yoast_wpseo_newssitemap-exclude'   => 'rank_math_news_sitemap_exclude',
		];

		foreach ( $post_ids as $post ) {
			$post_id = $post->ID;
			$this->replace_meta( $hash, null, $post_id, 'post', 'convert_variables' );
			delete_post_meta( $post_id, 'rank_math_permalink' );

			// Cornerstone Content.
			$cornerstone = get_post_meta( $post_id, '_yoast_wpseo_is_cornerstone', true );
			if ( ! empty( $cornerstone ) ) {
				update_post_meta( $post_id, 'rank_math_pillar_content', 'on' );
			}

			$news_robots = get_post_meta( $post_id, '_yoast_wpseo_newssitemap-robots-index', true );
			$news_robots = ! empty( $news_robots ) ? 'noindex' : 'index';
			update_post_meta( $post_id, 'rank_math_news_sitemap_robots', $news_robots );

			$this->set_post_robots( $post_id );
			$this->replace_image( get_post_meta( $post_id, '_yoast_wpseo_opengraph-image', true ), 'post', 'rank_math_facebook_image', 'rank_math_facebook_image_id', $post_id );
			$this->replace_image( get_post_meta( $post_id, '_yoast_wpseo_twitter-image', true ), 'post', 'rank_math_twitter_image', 'rank_math_twitter_image_id', $post_id );
			$this->set_post_focus_keyword( $post_id );
			$this->is_twitter_using_facebook( 'post', $post_id );
			$this->add_schema_data( $post_id );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Import Locations data from Yoast Local plugin.
	 *
	 * @return array
	 */
	protected function locations() {
		$this->import_locations_terms();
		$this->set_pagination( $this->get_location_ids( true ) );
		$locations = $this->get_location_ids();

		foreach ( $locations as $location ) {
			$args = (array) $location;
			unset( $args['ID'] );
			$args['post_type'] = 'rank_math_locations';

			$post_id = wp_insert_post( $args );
			if ( $post_id === 0 ) {
				continue;
			}

			$post_terms = wp_get_object_terms( $location->ID, 'wpseo_locations_category', [ 'fields' => 'slugs' ] );
			wp_set_object_terms( $post_id, $post_terms, 'rank_math_location_category', false );

			$this->locations_meta( $location->ID, $post_id );
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Import Schema Data.
	 *
	 * @param int $post_id Post ID.
	 */
	private function add_schema_data( $post_id ) {
		$type = get_post_meta( $post_id, '_yoast_wpseo_schema_article_type', true );
		if ( empty( $type ) || ! in_array( $type, [ 'Article', 'BlogPosting', 'NewsArticle' ], true ) ) {
			return;
		}

		$data['@type']    = $type;
		$data['metadata'] = [
			'title'     => Helper::sanitize_schema_title( $type ),
			'type'      => 'template',
			'isPrimary' => 1,
			'shortcode' => uniqid( 's-' ),
		];

		update_post_meta( $post_id, 'rank_math_schema_' . $type, $data );
	}

	/**
	 * Import Locations terms.
	 */
	private function import_locations_terms() {
		$terms = get_terms( 'wpseo_locations_category' );
		if ( empty( $terms ) || is_wp_error( $terms ) ) {
			return;
		}

		foreach ( $terms as $term ) {
			wp_insert_term( $term->name, 'rank_math_location_category', $term );
		}
	}

	/**
	 * Import Locations metadata.
	 *
	 * @param int $old_post_id Yoast's location id.
	 * @param int $new_post_id Newly created location id.
	 */
	private function locations_meta( $old_post_id, $new_post_id ) {
		$metas = DB::query_builder( 'postmeta' )->where( 'post_id', $old_post_id )->select()->get();
		if ( empty( $metas ) ) {
			return;
		}

		$hash = [
			'_wpseo_business_type'                => '@type',
			'_wpseo_business_email'               => 'email',
			'_wpseo_business_url'                 => 'url',
			'_wpseo_business_address'             => 'address',
			'_wpseo_business_address_2'           => 'address',
			'_wpseo_business_city'                => 'address',
			'_wpseo_business_state'               => 'address',
			'_wpseo_business_zipcode'             => 'address',
			'_wpseo_business_country'             => 'address',
			'_wpseo_business_phone'               => 'telephone',
			'_wpseo_business_fax'                 => 'faxNumber',
			'_wpseo_business_location_logo'       => 'image',
			'_wpseo_business_vat_id'              => 'vatID',
			'_wpseo_business_tax_id'              => 'taxID',
			'_wpseo_business_price_range'         => 'priceRange',
			'_wpseo_business_currencies_accepted' => 'currenciesAccepted',
			'_wpseo_business_payment_accepted'    => 'paymentAccepted',
			'_wpseo_business_area_served'         => 'areaServed',
			'_wpseo_coordinates_lat'              => 'latitude',
			'_wpseo_coordinates_long'             => 'longitude',
			'_wpseo_business_phone_2nd'           => 'secondary_number',
			'_wpseo_business_coc_id'              => 'coc_id',
		];

		$schema        = [
			'name'     => '%seo_title%',
			'metadata' => [
				'type'  => 'template',
				'title' => 'LocalBusiness',
			],
			'geo'      => [
				'@type' => 'GeoCoordinates',
			],
		];
		$address       = [];
		$opening_hours = [];

		foreach ( $metas as $meta ) {
			if ( ! Str::starts_with( '_wpseo_', $meta->meta_key ) ) {
				update_post_meta( $new_post_id, $meta->meta_key, $meta->meta_value );
				continue;
			}

			if ( Str::starts_with( '_wpseo_opening_hours_', $meta->meta_key ) ) {
				$opening_hours[ $meta->meta_key ] = $meta->meta_value;
				continue;
			}

			if ( ! isset( $hash[ $meta->meta_key ] ) ) {
				continue;
			}

			if ( in_array( $hash[ $meta->meta_key ], [ 'secondary_number', 'coc_id' ], true ) ) {
				$schema['metadata'][ $hash[ $meta->meta_key ] ] = $meta->meta_value;
				continue;
			}

			if ( 'address' === $hash[ $meta->meta_key ] ) {
				$address[ $meta->meta_key ] = $meta->meta_value;
				continue;
			}

			if ( in_array( $hash[ $meta->meta_key ], [ 'latitude', 'longitude' ], true ) ) {
				$schema['geo'][ $hash[ $meta->meta_key ] ] = $meta->meta_value;
				continue;
			}

			$schema[ $hash[ $meta->meta_key ] ] = $meta->meta_value;
		}

		if ( ! empty( $address ) ) {
			$schema['address'] = $this->replace_address( $address );
		}

		if ( ! empty( $opening_hours ) ) {
			$schema['openingHoursSpecification'] = $this->replace_opening_hours( $opening_hours );
		}

		$schema['@type'] = 'LocalBusiness';

		if ( ! empty( $schema['image'] ) ) {
			$schema['image'] = [
				'@type' => 'ImageObject',
				'url'   => $schema['image'],
			];
		}

		if ( isset( $schema['geo']['latitude'] ) && isset( $schema['geo']['longitude'] ) ) {
			update_post_meta( $new_post_id, 'rank_math_local_business_latitide', $schema['geo']['latitude'] );
			update_post_meta( $new_post_id, 'rank_math_local_business_longitude', $schema['geo']['longitude'] );
		}

		update_post_meta( $new_post_id, 'rank_math_schema_' . $schema['@type'], $schema );
	}

	/**
	 * Replace Opening Hours data.
	 *
	 * @param array $opening_hours Opening Hours data.
	 * @return array Processed data.
	 */
	private function replace_opening_hours( $opening_hours ) {
		$data = [];
		$days = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ];
		foreach ( $days as $day ) {
			$opens  = ! empty( $opening_hours[ '_wpseo_opening_hours_' . strtolower( $day ) . '_from' ] ) ? $opening_hours[ '_wpseo_opening_hours_' . strtolower( $day ) . '_from' ] : 'closed';
			$closes = ! empty( $opening_hours[ '_wpseo_opening_hours_' . strtolower( $day ) . '_to' ] ) ? $opening_hours[ '_wpseo_opening_hours_' . strtolower( $day ) . '_to' ] : 'closed';

			if ( 'closed' === $opens ) {
				continue;
			}

			$data[ $day ] = [
				'@type'     => 'OpeningHoursSpecification',
				'dayOfWeek' => $day,
				'opens'     => $opens,
				'closes'    => $closes,
			];
		}

		return array_values( $data );
	}

	/**
	 * Replace Address data.
	 *
	 * @param array $address Address data.
	 * @return array Processed data.
	 */
	private function replace_address( $address ) {
		$data = [
			'@type' => 'PostalAddress',
		];
		$hash = [
			'_wpseo_business_address'   => 'streetAddress',
			'_wpseo_business_address_2' => 'addressLocality',
			'_wpseo_business_state'     => 'addressRegion',
			'_wpseo_business_zipcode'   => 'postalCode',
			'_wpseo_business_country'   => 'addressCountry',
		];

		foreach ( $hash as $key => $value ) {
			$data[ $value ] = isset( $address[ $key ] ) ? $address[ $key ] : '';
		}

		if ( ! empty( $address['_wpseo_business_city'] ) ) {
			$data['addressLocality'] = $data['addressLocality'] . ', ' . $address['_wpseo_business_city'];
		}

		return $data;
	}

	/**
	 * Get all location IDs.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	private function get_location_ids( $count = false ) {
		$paged = $this->get_pagination_arg( 'page' );
		$table = DB::query_builder( 'posts' )->where( 'post_type', 'wpseo_locations' );

		return $count ? absint( $table->selectCount( 'ID', 'total' )->getVar() ) :
			$table->select()->page( $paged - 1, $this->items_per_page )->get();
	}

	/**
	 * Get all location IDs.
	 *
	 * @param bool $count If we need count only for pagination purposes.
	 * @return int|array
	 */
	private function get_video_posts( $count = false ) {
		global $wpdb;
		$paged = $this->get_pagination_arg( 'page' );
		$posts = get_posts(
			[
				'numberposts' => -1,
				'post_type'   => 'any',
				'post_status' => 'any',
				'fields'      => 'ids',
				'meta_query'  => [ // phpcs:ignore -- Using meta_query here is acceptable as it is specifically for importing data from Yoast and runs exclusively in the background.
					'relation' => 'AND',
					[
						'key'     => '_yoast_wpseo_video_meta',
						'compare' => 'EXISTS',
					],
					[
						'key'     => '_yoast_wpseo_videositemap-disable',
						'compare' => 'NOT EXISTS',
					],
				],
			]
		);

		return $count ? count( $posts ) : $posts;
	}

	/**
	 * Set post robots.
	 *
	 * @param int $post_id Post ID.
	 */
	private function set_post_robots( $post_id ) {
		// Early bail if robots data is set in Rank Math plugin.
		if ( ! empty( $this->get_meta( 'post', $post_id, 'rank_math_robots' ) ) ) {
			return;
		}

		$robots_nofollow = get_post_meta( $post_id, '_yoast_wpseo_meta-robots-nofollow', true );
		$robots_noindex  = (int) get_post_meta( $post_id, '_yoast_wpseo_meta-robots-noindex', true );
		$robots_advanced = (array) get_post_meta( $post_id, '_yoast_wpseo_meta-robots-adv', true );

		// If all are empty, then keep default robots.
		if ( empty( $robots_nofollow ) && empty( $robots_noindex ) && empty( $robots_advanced ) ) {
			update_post_meta( $post_id, 'rank_math_robots', [] );
			return;
		}

		$robots = [ $this->set_robots_index( $post_id, $robots_noindex ) ];
		if ( $robots_nofollow ) {
			$robots[] = 'nofollow';
		}

		$robots_advanced = explode( ',', $robots_advanced[0] );
		if ( $robots_advanced ) {
			$robots = array_merge( $robots, $robots_advanced );
		}

		update_post_meta( $post_id, 'rank_math_robots', array_filter( array_unique( $robots ) ) );
	}

	/**
	 * Set post robots based on the Settings.
	 *
	 * @param int $post_id        Post ID.
	 * @param int $robots_noindex Whether or not the post is indexed.
	 *
	 * @return string
	 */
	private function set_robots_index( $post_id, $robots_noindex ) {
		if ( 0 === $robots_noindex ) {
			$yoast_titles = get_option( 'wpseo_titles' );
			return empty( $yoast_titles[ 'noindex-' . get_post_type( $post_id ) ] ) ? 'index' : 'noindex';
		}

		return 1 === $robots_noindex ? 'noindex' : 'index';
	}

	/**
	 * Set Focus Keyword.
	 *
	 * @param int $post_id Post ID.
	 */
	private function set_post_focus_keyword( $post_id ) {
		$extra_fks = get_post_meta( $post_id, '_yoast_wpseo_focuskeywords', true );
		$extra_fks = json_decode( $extra_fks, true );
		if ( empty( $extra_fks ) || ! is_array( $extra_fks ) ) {
			return;
		}

		$extra_fks = implode( ', ', array_column( $extra_fks, 'keyword' ) );
		$main_fk   = get_post_meta( $post_id, 'rank_math_focus_keyword', true );
		update_post_meta( $post_id, 'rank_math_focus_keyword', $main_fk . ', ' . $extra_fks );
	}

	/**
	 * Set primary term for the posts.
	 *
	 * @param int[] $post_ids Post IDs.
	 */
	private function set_primary_term( $post_ids ) {
		$post_ids = wp_list_pluck( $post_ids, 'ID' );
		$table    = DB::query_builder( 'postmeta' );
		$results  = $table->whereLike( 'meta_key', 'wpseo_primary' )->whereIn( 'post_id', $post_ids )->get();

		foreach ( $results as $result ) {
			$key = str_replace( '_yoast_wpseo', 'rank_math', $result->meta_key );
			update_post_meta( $result->post_id, $key, $result->meta_value );
		}
	}

	/**
	 * Import term meta of plugin.
	 *
	 * @return array
	 */
	protected function termmeta() {
		$count         = 0;
		$taxonomy_meta = get_option( 'wpseo_taxonomy_meta' );

		if ( empty( $taxonomy_meta ) ) {
			return compact( 'count' );
		}

		$hash = [
			'wpseo_title'                 => 'rank_math_title',
			'wpseo_desc'                  => 'rank_math_description',
			'wpseo_metadesc'              => 'rank_math_description',
			'wpseo_focuskw'               => 'rank_math_focus_keyword',
			'wpseo_canonical'             => 'rank_math_canonical_url',
			'wpseo_opengraph-title'       => 'rank_math_facebook_title',
			'wpseo_opengraph-description' => 'rank_math_facebook_description',
			'wpseo_twitter-title'         => 'rank_math_twitter_title',
			'wpseo_twitter-description'   => 'rank_math_twitter_description',
			'wpseo_bctitle'               => 'rank_math_breadcrumb_title',
		];
		foreach ( $taxonomy_meta as $terms ) {
			foreach ( $terms as $term_id => $data ) {
				++$count;
				delete_term_meta( $term_id, 'rank_math_permalink' );
				$this->replace_meta( $hash, $data, $term_id, 'term', 'convert_variables' );

				$this->set_term_robots( $term_id, $data );
				$this->set_term_social_media( $term_id, $data );
				$this->is_twitter_using_facebook( 'term', $term_id );
			}
		}

		return compact( 'count' );
	}

	/**
	 * Set term robots.
	 *
	 * @param int   $term_id Term ID.
	 * @param array $data    Term data.
	 */
	private function set_term_robots( $term_id, $data ) {
		// Early bail if robots data is set in Rank Math plugin.
		if ( ! empty( $this->get_meta( 'term', $term_id, 'rank_math_robots' ) ) ) {
			return;
		}

		if ( ! empty( $data['wpseo_noindex'] ) && 'default' !== $data['wpseo_noindex'] ) {
			$robots = 'noindex' === $data['wpseo_noindex'] ? 'noindex' : 'index';
			update_term_meta( $term_id, 'rank_math_robots', [ $robots ] );
		}
	}

	/**
	 * Set term social media.
	 *
	 * @param int   $term_id Term ID.
	 * @param array $data    Term data.
	 */
	private function set_term_social_media( $term_id, $data ) {
		if ( ! empty( $data['wpseo_opengraph-image'] ) ) {
			$this->replace_image( $data['wpseo_opengraph-image'], 'term', 'rank_math_facebook_image', 'rank_math_facebook_image_id', $term_id );
		}

		if ( ! empty( $data['wpseo_twitter-image'] ) ) {
			$this->replace_image( $data['wpseo_twitter-image'], 'term', 'rank_math_twitter_image', 'rank_math_twitter_image_id', $term_id );
		}
	}

	/**
	 * Import user meta of plugin.
	 *
	 * @return array
	 */
	protected function usermeta() {
		$this->set_pagination( $this->get_user_ids( true ) );
		$user_ids = $this->get_user_ids();

		$hash = [
			'wpseo_title'    => 'rank_math_title',
			'wpseo_desc'     => 'rank_math_description',
			'wpseo_metadesc' => 'rank_math_description',
		];

		foreach ( $user_ids as $user ) {
			$userid = $user->ID;
			$this->replace_meta( $hash, null, $userid, 'user', 'convert_variables' );

			// Early bail if robots data is set in Rank Math plugin.
			if ( empty( $this->get_meta( 'user', $userid, 'rank_math_robots' ) ) && get_user_meta( $userid, 'wpseo_noindex_author', true ) ) {
				update_user_meta( $userid, 'rank_math_robots', [ 'noindex' ] );
			}

			$social_urls = [];
			foreach ( [ 'linkedin', 'myspace', 'pinterest', 'instagram', 'soundcloud', 'tumblr', 'youtube', 'wikipedia' ] as $key ) {
				$social_urls[] = get_user_meta( $userid, $key, true );
			}

			if ( ! empty( $social_urls ) ) {
				update_user_meta( $userid, 'additional_profile_urls', implode( ' ', array_filter( $social_urls ) ) );
			}
		}

		return $this->get_pagination_arg();
	}

	/**
	 * Imports redirections data.
	 *
	 * @return array
	 */
	protected function redirections() {
		$count        = 0;
		$redirections = get_option( 'wpseo-premium-redirects-base' );

		if ( ! $redirections ) {
			return compact( 'count' );
		}

		Helper::update_modules( [ 'redirections' => 'on' ] );
		foreach ( $redirections as $redirection ) {
			if ( false !== $this->save_redirection( $redirection ) ) {
				++$count;
			}
		}

		return compact( 'count' );
	}

	/**
	 * Save redirection.
	 *
	 * @param array $redirection Redirection object.
	 *
	 * @return mixed
	 */
	private function save_redirection( $redirection ) {
		if ( ! isset( $redirection['origin'] ) || empty( $redirection['origin'] ) ) {
			return false;
		}

		$item = Redirection::from(
			[
				'sources'     => [
					[
						'pattern'    => $redirection['origin'],
						'comparison' => isset( $redirection['format'] ) && 'regex' === $redirection['format'] ? 'regex' : 'exact',
					],
				],
				'url_to'      => isset( $redirection['url'] ) ? $redirection['url'] : '',
				'header_code' => isset( $redirection['type'] ) ? $redirection['type'] : '301',
			]
		);

		return $item->save();
	}

	/**
	 * Set additional Organization details.
	 *
	 * @param array $yoast_titles Settings.
	 */
	private function set_additional_organization_details( $yoast_titles ) {
		$additional_details = [];
		$properties         = [
			'org-legal-name'       => 'legalName',
			'org-founding-date'    => 'foundingDate',
			'org-number-employees' => 'numberOfEmployees',
			'org-vat-id'           => 'vatID',
			'org-tax-id'           => 'taxID',
			'org-iso'              => 'iso6523Code',
			'org-duns'             => 'duns',
			'org-leicode'          => 'leiCode',
			'org-naics'            => 'naics',
		];

		foreach ( $properties as $key => $property ) {
			if ( empty( $yoast_titles[ $key ] ) ) {
				continue;
			}

			$additional_details[] = [
				'type'  => $property,
				'value' => $yoast_titles[ $key ],
			];
		}

		if ( ! empty( $additional_details ) ) {
			$this->titles['additional_info'] = $additional_details;
		}
	}

	/**
	 * Set separator.
	 *
	 * @param array $yoast_titles    Settings.
	 */
	private function set_separator( $yoast_titles ) {
		if ( ! isset( $yoast_titles['separator'] ) ) {
			return;
		}

		$separator_options = [
			'sc-dash'   => '-',
			'sc-ndash'  => '&ndash;',
			'sc-mdash'  => '&mdash;',
			'sc-middot' => '&middot;',
			'sc-bull'   => '&bull;',
			'sc-star'   => '*',
			'sc-smstar' => '&#8902;',
			'sc-pipe'   => '|',
			'sc-tilde'  => '~',
			'sc-laquo'  => '&laquo;',
			'sc-raquo'  => '&raquo;',
			'sc-lt'     => '&lt;',
			'sc-gt'     => '&gt;',
		];

		if ( isset( $separator_options[ $yoast_titles['separator'] ] ) ) {
			$this->titles['title_separator'] = $separator_options[ $yoast_titles['separator'] ];
		}
	}

	/**
	 * Misc settings.
	 *
	 * @param array $yoast_titles Settings.
	 * @param array $yoast_social Settings.
	 */
	private function misc_settings( $yoast_titles, $yoast_social ) {
		$knowledgegraph_type = ! empty( $yoast_titles['company_or_person'] ) ? $yoast_titles['company_or_person'] : '';

		$logo_key = 'company' === $knowledgegraph_type ? 'company_logo' : 'person_logo';
		$logo_id  = 'company' === $knowledgegraph_type ? 'company_logo_id' : 'person_logo_id';

		$hash = [
			'company_name'           => 'knowledgegraph_name',
			'website_name'           => 'website_name',
			'alternate_website_name' => 'website_alternate_name',
			'company_or_person'      => 'knowledgegraph_type',
			$logo_key                => 'knowledgegraph_logo',
			$logo_id                 => 'knowledgegraph_logo_id',
		];
		$this->replace( $hash, $yoast_titles, $this->titles );

		$this->replace( [ 'stripcategorybase' => 'strip_category_base' ], $yoast_titles, $this->settings, 'convert_bool' );
		$this->replace( [ 'disable-attachment' => 'attachment_redirect_urls' ], $yoast_titles, $this->settings, 'convert_bool' );
		$this->replace( [ 'disable-author' => 'disable_author_archives' ], $yoast_titles, $this->titles, 'convert_bool' );
		$this->replace( [ 'disable-date' => 'disable_date_archives' ], $yoast_titles, $this->titles, 'convert_bool' );// Links.

		// NOINDEX.
		$hash = [
			'noindex-subpages-wpseo' => 'noindex_archive_subpages',
		];
		$this->replace( $hash, $yoast_titles, $this->titles, 'convert_bool' );

		// OpenGraph.
		if ( isset( $yoast_social['og_default_image'] ) ) {
			$this->replace_image( $yoast_social['og_default_image'], $this->titles, 'open_graph_image', 'open_graph_image_id' );
		}

		if ( isset( $yoast_social['og_frontpage_image'] ) ) {
			$this->replace_image( $yoast_social['og_frontpage_image'], $this->titles, 'homepage_facebook_image', 'homepage_facebook_image_id' );
		}

		$hash = [
			'og_frontpage_title' => 'homepage_facebook_title',
			'og_frontpage_desc'  => 'homepage_facebook_description',
		];
		$this->replace( $hash, $yoast_social, $this->titles, 'convert_variables' );

		if ( ! empty( $yoast_titles['noindex-author-wpseo'] ) ) {
			$this->titles['author_custom_robots'] = 'on';
			$this->titles['author_robots'][]      = 'noindex';
		}

		if ( ! empty( $yoast_titles['disable-attachment'] ) ) {
			$this->titles['pt_attachment_robots'][] = 'noindex';
		}
	}

	/**
	 * Slack enhanced sharing.
	 *
	 * @param array $yoast_main Settings.
	 */
	private function slack_settings( $yoast_main ) {
		$slack_enhanced_sharing = 'off';
		if ( ! empty( $yoast_main['enable_enhanced_slack_sharing'] ) ) {
			$slack_enhanced_sharing = 'on';
		}
		$this->titles['pt_post_slack_enhanced_sharing']     = $slack_enhanced_sharing;
		$this->titles['pt_page_slack_enhanced_sharing']     = $slack_enhanced_sharing;
		$this->titles['pt_product_slack_enhanced_sharing']  = $slack_enhanced_sharing;
		$this->titles['pt_download_slack_enhanced_sharing'] = $slack_enhanced_sharing;
		$this->titles['author_slack_enhanced_sharing']      = $slack_enhanced_sharing;
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy => $object ) {
			$this->titles[ 'tax_' . $taxonomy . '_slack_enhanced_sharing' ] = $slack_enhanced_sharing;
		}
	}

	/**
	 * Sitemap settings.
	 *
	 * @param array $yoast_main    Settings.
	 * @param array $yoast_sitemap Settings.
	 * @param array $yoast_titles  Settings.
	 */
	private function sitemap_settings( $yoast_main, $yoast_sitemap, $yoast_titles ) {
		if ( ! isset( $yoast_main['enable_xml_sitemap'] ) && isset( $yoast_sitemap['enablexmlsitemap'] ) ) {
			Helper::update_modules( [ 'sitemap' => 'on' ] );
		}

		$hash = [
			'entries-per-page' => 'items_per_page',
			'excluded-posts'   => 'exclude_posts',
		];
		$this->replace( $hash, $yoast_sitemap, $this->sitemap );

		if ( empty( $yoast_sitemap['excluded-posts'] ) ) {
			$this->sitemap['exclude_posts'] = '';
		}

		$this->sitemap['include_authors_without_posts'] = isset( $yoast_titles['noindex-author-noposts-wpseo'] ) && ! $yoast_titles['noindex-author-noposts-wpseo'] ? 'on' : 'off';

		$this->sitemap_exclude_roles( $yoast_sitemap );
	}

	/**
	 * Import News Settings from Yoast News plugin.
	 */
	protected function news() {
		$yoast_news = get_option( 'wpseo_news' );
		if ( empty( $yoast_news ) ) {
			return false;
		}

		Helper::update_modules( [ 'news-sitemap' => 'on' ] );

		$this->get_settings();
		$this->sitemap['news_sitemap_publication_name'] = ! empty( $yoast_news['news_sitemap_name'] ) ? $yoast_news['news_sitemap_name'] : '';
		if ( ! empty( $yoast_news['news_sitemap_include_post_types'] ) ) {
			$this->sitemap['news_sitemap_post_type'] = array_keys( $yoast_news['news_sitemap_include_post_types'] );
			$this->add_excluded_news_terms( $yoast_news );
		}
		$this->update_settings();

		return true;
	}

	/**
	 * Import News Settings from Yoast News plugin.
	 */
	protected function video() {
		$yoast_video = get_option( 'wpseo_video' );
		if ( empty( $yoast_video ) ) {
			return false;
		}

		Helper::update_modules( [ 'video-sitemap' => 'on' ] );

		$this->get_settings();
		$this->sitemap['hide_video_sitemap']          = ! empty( $yoast_video['video_cloak_sitemap'] ) ? 'on' : '';
		$this->sitemap['video_sitemap_post_type']     = ! empty( $yoast_video['videositemap_posttypes'] ) ? array_keys( $yoast_video['videositemap_posttypes'] ) : [];
		$this->sitemap['video_sitemap_taxonomies']    = ! empty( $yoast_video['videositemap_taxonomies'] ) ? array_keys( $yoast_video['videositemap_taxonomies'] ) : [];
		$this->sitemap['video_sitemap_custom_fields'] = ! empty( $yoast_video['video_custom_fields'] ) ? $yoast_video['video_custom_fields'] : '';
		$this->settings['disable_media_rss']          = ! empty( $yoast_video['video_disable_rss'] ) ? $yoast_video['video_disable_rss'] : '';
		$this->update_settings();

		$this->set_pagination( $this->get_video_posts( true ) );
		$videos = $this->get_video_posts();
		$schema = [
			'@type'    => 'VideoObject',
			'metadata' => [
				'type'      => 'template',
				'isPrimary' => false,
				'title'     => 'Video',
				'shortcode' => uniqid( 's-' ),
			],
		];

		$meta = [
			'category' => '_yoast_wpseo_videositemap-category',
			'tags'     => '_yoast_wpseo_videositemap-tags',
			'rating'   => '_yoast_wpseo_videositemap-rating',
		];
		foreach ( $videos as $video ) {
			$yoast_video = get_post_meta( $video, '_yoast_wpseo_video_meta', true );
			$duration    = get_post_meta( $video, '_yoast_wpseo_videositemap-duration', true );
			$thumbnail   = get_post_meta( $video, '_yoast_wpseo_videositemap-thumbnail', true );
			$entity      = [
				'name'             => '%seo_title%',
				'description'      => '%seo_description%',
				'thumbnailUrl'     => $thumbnail ? $thumbnail : '%post_thumbnail%',
				'contentUrl'       => ! empty( $yoast_video['content_loc'] ) ? $yoast_video['content_loc'] : '',
				'embedUrl'         => ! empty( $yoast_video['player_loc'] ) ? $yoast_video['player_loc'] : '',
				'width'            => ! empty( $yoast_video['width'] ) ? $yoast_video['width'] : '',
				'height'           => ! empty( $yoast_video['height'] ) ? $yoast_video['height'] : '',
				'isFamilyFriendly' => ! get_post_meta( $video, '_yoast_wpseo_videositemap-not-family-friendly', true ),
				'duration'         => $duration ? $duration . 'S' : '',
				'uploadDate'       => '%date(Y-m-d\TH:i:sP)%',
			];

			foreach ( $meta as $key => $yoast_key ) {
				$schema['metadata'][ $key ] = get_post_meta( $video, $yoast_key, true );
			}

			$schema = array_merge( $schema, $entity );

			update_post_meta( $video, 'rank_math_schema_VideoObject', array_merge( $schema, $entity ) );
		}

		return true;
	}

	/**
	 * Deactivate plugin action.
	 */
	protected function deactivate() {
		if ( is_plugin_active( $this->get_plugin_file() ) ) {
			deactivate_plugins( $this->get_plugin_file() );
			deactivate_plugins( 'wpseo-news/wpseo-news.php' );
			deactivate_plugins( 'wpseo-video/video-seo.php' );
			deactivate_plugins( 'wpseo-local/local-seo.php' );
		}

		return true;
	}

	/**
	 * Import Excluded News terms.
	 *
	 * @param array $yoast_news News Sitemap Settings.
	 */
	private function add_excluded_news_terms( $yoast_news ) {
		$exclude_terms = $yoast_news['news_sitemap_exclude_terms'];
		if ( empty( $exclude_terms ) ) {
			return;
		}

		$post_types = array_keys( $yoast_news['news_sitemap_include_post_types'] );
		foreach ( $post_types as $post_type ) {
			$taxonomies   = get_object_taxonomies( $post_type, 'objects' );
			$exclude_data = [];
			foreach ( $taxonomies as $taxonomy ) {
				if ( ! $taxonomy->show_ui ) {
					continue;
				}

				$terms = get_terms(
					[
						'taxonomy'   => $taxonomy->name,
						'hide_empty' => false,
						'fields'     => 'id=>slug',
					]
				);

				if ( empty( $terms ) ) {
					continue;
				}

				foreach ( $terms as $term_id => $term ) {
					$field = "{$taxonomy->name}_{$term}_for_{$post_type}";
					$key   = "news_sitemap_exclude_{$post_type}_terms";
					if ( isset( $exclude_terms[ $field ] ) && 'on' === $exclude_terms[ $field ] ) {
						$exclude_data[ $taxonomy->name ][] = $term_id;
					}
				}
			}

			if ( ! empty( $exclude_data ) ) {
				$this->sitemap[ "news_sitemap_exclude_{$post_type}_terms" ] = [ $exclude_data ];
			}
		}
	}

	/**
	 * Sitemap exclude roles.
	 *
	 * @param array $yoast_sitemap Settings.
	 */
	private function sitemap_exclude_roles( $yoast_sitemap ) {
		foreach ( Helper::get_roles() as $role => $label ) {
			$key = "user_role-{$role}-not_in_sitemap";
			if ( isset( $yoast_sitemap[ $key ] ) && $yoast_sitemap[ $key ] ) {
				$this->sitemap['exclude_roles'][] = $role;
			}
		}

		if ( ! empty( $this->sitemap['exclude_roles'] ) ) {
			$this->sitemap['exclude_roles'] = array_unique( $this->sitemap['exclude_roles'] );
		}
	}

	/**
	 * Local SEO settings.
	 */
	private function local_seo_settings() {
		$yoast_local = get_option( 'wpseo_local', false );
		if ( ! is_array( $yoast_local ) ) {
			return;
		}

		$this->titles['local_seo'] = 'on';
		$this->local_address_settings( $yoast_local );
		$this->local_phones_settings( $yoast_local );

		if ( ! empty( $yoast_local['location_address_2'] ) ) {
			$this->titles['local_address']['streetAddress'] .= ' ' . $yoast_local['location_address_2'];
		}

		// Coordinates.
		if ( ! empty( $yoast_local['location_coords_lat'] ) && ! empty( $yoast_local['location_coords_long'] ) ) {
			$this->titles['geo'] = $yoast_local['location_coords_lat'] . ' ' . $yoast_local['location_coords_long'];
		}

		// Opening Hours.
		if ( ! empty( $yoast_local['opening_hours_24h'] ) ) {
			$this->titles['opening_hours_format'] = isset( $yoast_local['opening_hours_24h'] ) && 'on' === $yoast_local['opening_hours_24h'] ? 'off' : 'on';
		}
	}

	/**
	 * Local phones settings.
	 *
	 * @param array $yoast_local Array of yoast local SEO settings.
	 */
	private function local_phones_settings( $yoast_local ) {
		if ( empty( $yoast_local['location_phone'] ) ) {
			return;
		}

		$this->titles['phone_numbers'][] = [
			'type'   => 'customer support',
			'number' => $yoast_local['location_phone'],
		];

		if ( ! empty( $yoast_local['location_phone_2nd'] ) ) {
			$this->titles['phone_numbers'][] = [
				'type'   => 'customer support',
				'number' => $yoast_local['location_phone_2nd'],
			];
		}
	}

	/**
	 * Local address settings.
	 *
	 * @param array $yoast_local Array of yoast local SEO settings.
	 */
	private function local_address_settings( $yoast_local ) {
		// Address Format.
		$address_format_hash = [
			'address-state-postal'       => '{address} {locality}, {region} {postalcode}',
			'address-state-postal-comma' => '{address} {locality}, {region}, {postalcode}',
			'address-postal-city-state'  => '{address} {postalcode} {locality}, {region}',
			'address-postal'             => '{address} {locality} {postalcode}',
			'address-postal-comma'       => '{address} {locality}, {postalcode}',
			'address-city'               => '{address} {locality}',
			'postal-address'             => '{postalcode} {region} {locality} {address}',
		];

		$this->titles['local_address_format'] = $address_format_hash[ $yoast_local['address_format'] ];

		// Street Address.
		$address = [];
		$hash    = [
			'location_address' => 'streetAddress',
			'location_city'    => 'addressLocality',
			'location_state'   => 'addressRegion',
			'location_zipcode' => 'postalCode',
			'location_country' => 'addressCountry',
		];
		$this->replace( $hash, $yoast_local, $address );

		$this->titles['local_address'] = $address;
	}

	/**
	 * Social and Webmaster settings.
	 *
	 * @param array $yoast_main   Settings.
	 * @param array $yoast_social Settings.
	 */
	private function social_webmaster_settings( $yoast_main, $yoast_social ) {
		$hash = [
			'baiduverify'     => 'baidu_verify',
			'googleverify'    => 'google_verify',
			'msverify'        => 'bing_verify',
			'pinterestverify' => 'pinterest_verify',
			'yandexverify'    => 'yandex_verify',
		];
		$this->replace( $hash, $yoast_main, $this->settings );

		$hash = [
			'facebook_site' => 'social_url_facebook',
			'twitter_site'  => 'twitter_author_names',
			'fbadminapp'    => 'facebook_app_id',
		];

		if ( ! empty( $yoast_social['other_social_urls'] ) ) {
			$this->titles['social_additional_profiles'] = implode( PHP_EOL, $yoast_social['other_social_urls'] );
		}
		$this->replace( $hash, $yoast_social, $this->titles );
	}

	/**
	 * Breadcrumb settings.
	 *
	 * @param array $yoast_titles        Settings.
	 * @param array $yoast_internallinks Settings.
	 */
	private function breadcrumb_settings( $yoast_titles, $yoast_internallinks ) {
		$hash = [
			'breadcrumbs-sep'           => 'breadcrumbs_separator',
			'breadcrumbs-home'          => 'breadcrumbs_home_label',
			'breadcrumbs-prefix'        => 'breadcrumbs_prefix',
			'breadcrumbs-archiveprefix' => 'breadcrumbs_archive_format',
			'breadcrumbs-searchprefix'  => 'breadcrumbs_search_format',
			'breadcrumbs-404crumb'      => 'breadcrumbs_404_label',
		];
		$this->replace( $hash, $yoast_titles, $this->settings );
		$this->replace( $hash, $yoast_internallinks, $this->settings );

		$hash = [ 'breadcrumbs-enable' => 'breadcrumbs' ];
		$this->replace( $hash, $yoast_titles, $this->settings, 'convert_bool' );
		$this->replace( $hash, $yoast_internallinks, $this->settings, 'convert_bool' );

		// RSS.
		$hash = [
			'rssbefore' => 'rss_before_content',
			'rssafter'  => 'rss_after_content',
		];
		$this->replace( $hash, $yoast_titles, $this->settings, 'convert_variables' );
	}

	/**
	 * Import/convert blocks of plugin.
	 *
	 * @return array
	 */
	protected function blocks() {
		$posts = Yoast_Blocks::get()->find_posts();
		if ( empty( $posts['posts'] ) ) {
			return __( 'No post found.', 'seo-by-rank-math' );
		}

		$this->set_pagination( $posts['count'] );

		Yoast_Blocks::get()->wizard( array_slice( $posts['posts'], ( $this->items_per_page * ( $this->get_pagination_arg( 'page' ) - 1 ) ), $this->items_per_page ) );

		return $this->get_pagination_arg();
	}
}
PK     ”ŠU]ùéÐ§d  d  +  includes/admin/importers/class-detector.phpnu „[µü¤        <?php
/**
 * The functionality to detect whether we should import from another SEO plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Detector class.
 */
class Detector {

	use Hooker;

	/**
	 * Plugins we can import from.
	 *
	 * @var array
	 */
	public static $plugins = null;

	/**
	 * Detects whether we can import anything or not.
	 *
	 * @return array List of plugins we can import from.
	 */
	public function detect() {
		$this->requirements();
		if ( ! is_null( self::$plugins ) ) {
			return self::$plugins;
		}
		self::$plugins = [];

		$plugins = $this->get();
		foreach ( $plugins as $slug => $plugin ) {
			if ( ! $this->is_detectable( $plugin, $plugins ) ) {
				continue;
			}

			$this->can_import( $slug, $plugin );
		}

		return self::$plugins;
	}

	/**
	 * Run import class.
	 *
	 * @param Plugin_Importer $importer The importer that needs to perform this action.
	 * @param string          $action   The action to perform.
	 * @param string          $perform  The action to perform when running import action.
	 */
	public function run( $importer, $action = 'detect', $perform = '' ) {
		if ( 'cleanup' === $action ) {
			return $importer->run_cleanup();
		} elseif ( 'import' === $action ) {
			return $importer->run_import( $perform );
		}

		return $importer->run_detect();
	}

	/**
	 * Run action by slug.
	 *
	 * @param string $slug    The importer slug that needs to perform this action.
	 * @param string $action  The action to perform.
	 * @param string $perform The action to perform when running import action.
	 */
	public static function run_by_slug( $slug, $action, $perform = '' ) {
		$detector  = new self();
		$importers = $detector->get();
		if ( ! isset( $importers[ $slug ] ) ) {
			return false;
		}

		$importer = $importers[ $slug ];
		$importer = new $importer['class']( $importer['file'] );
		$status   = $detector->run( $importer, $action, $perform );

		return \compact( 'importer', 'status' );
	}

	/**
	 * Deactivate all plugins.
	 */
	public static function deactivate_all() {
		$detector = new Detector();
		$plugins  = $detector->get();
		foreach ( $plugins as $plugin ) {
			deactivate_plugins( $plugin['file'] );
		}
	}

	/**
	 * Get the list of available importers.
	 *
	 * @return array Available importers.
	 */
	public function get() {
		return $this->do_filter(
			'importers/detect_plugins',
			[
				'yoast'                   => [
					'class'   => '\\RankMath\\Admin\\Importers\\Yoast',
					'file'    => 'wordpress-seo/wp-seo.php',
					'premium' => 'yoast-premium',
				],
				'seopress'                => [
					'class' => '\\RankMath\\Admin\\Importers\\SEOPress',
					'file'  => 'wp-seopress/seopress.php',
				],
				'aioseo'                  => [
					'class'   => '\\RankMath\\Admin\\Importers\\AIOSEO',
					'file'    => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
					'premium' => 'all-in-one-seo-pack-pro',
				],
				'all-in-one-seo-pack-pro' => [
					'class'  => '\\RankMath\\Admin\\Importers\\AIOSEO',
					'file'   => 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
					'parent' => 'aioseo',
				],
				'yoast-premium'           => [
					'class'  => '\\RankMath\\Admin\\Importers\\Yoast',
					'file'   => 'wordpress-seo-premium/wp-seo-premium.php',
					'parent' => 'yoast',
				],
				'aio-rich-snippet'        => [
					'class' => '\\RankMath\\Admin\\Importers\\AIO_Rich_Snippet',
					'file'  => 'all-in-one-schemaorg-rich-snippets/index.php',
				],
				'wp-schema-pro'           => [
					'class' => '\\RankMath\\Admin\\Importers\\WP_Schema_Pro',
					'file'  => 'wp-schema-pro/wp-schema-pro.php',
				],
				'redirections'            => [
					'class' => '\\RankMath\\Admin\\Importers\\Redirections',
					'file'  => 'redirection/redirection.php',
				],
			]
		);
	}

	/**
	 * Check requirements.
	 */
	private function requirements() {
		if ( ! function_exists( 'is_plugin_active' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php'; // @phpstan-ignore-line
		}
	}

	/**
	 * Can import plugin data.
	 *
	 * @param string $slug   Plugin slug.
	 * @param array  $plugin Plugin data.
	 */
	private function can_import( $slug, $plugin ) {
		$importer = new $plugin['class']( $plugin['file'] );
		if ( $importer->run_detect() ) {
			self::$plugins[ $slug ] = [
				'name'     => $importer->get_plugin_name(),
				'file'     => $importer->get_plugin_file(),
				'choices'  => $importer->get_choices(),
				'isActive' => is_plugin_active( $importer->get_plugin_file() ),
			];
		}
	}

	/**
	 * Check if plugin is detectable.
	 *
	 * @param array $check   Plugin to check.
	 * @param array $plugins Plugins data.
	 *
	 * @return bool
	 */
	private function is_detectable( $check, $plugins ) {
		// Check if parent is set.
		if ( isset( $check['parent'] ) && isset( self::$plugins[ $check['parent'] ] ) ) {
			return false;
		}

		// Check if plugin has premium and it is active.
		if ( isset( $check['premium'] ) && is_plugin_active( $plugins[ $check['premium'] ]['file'] ) ) {
			return false;
		}

		return true;
	}
}
PK     ”ŠU]ÙÌ�à9  9  )  includes/admin/importers/class-status.phpnu „[µü¤        <?php
/**
 * The Status.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Importers
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Importers;

defined( 'ABSPATH' ) || exit;

/**
 * Status class.
 */
class Status {

	/**
	 * The status.
	 *
	 * @var bool
	 */
	private $status = false;

	/**
	 * The message.
	 *
	 * @var string
	 */
	private $message = '';

	/**
	 * The action being performed.
	 *
	 * @var string
	 */
	private $action;

	/**
	 * Get the status.
	 *
	 * @return bool Status.
	 */
	public function is_success() {
		return $this->status;
	}

	/**
	 * Get the message.
	 *
	 * @return string Status message.
	 */
	public function get_message() {
		if ( '' === $this->message ) {
			return $this->get_default_message();
		}

		return $this->message;
	}

	/**
	 * Get the action.
	 *
	 * @return string Action type.
	 */
	public function get_action() {
		return $this->action;
	}

	/**
	 * Set the status.
	 *
	 * @param string $status Status.
	 */
	public function set_status( $status ) {
		$this->status = $status;
	}

	/**
	 * Set the message.
	 *
	 * @param string $message Status message.
	 */
	public function set_message( $message ) {
		$this->message = $message;
	}

	/**
	 * Set the action.
	 *
	 * @param string $action Action performing.
	 */
	public function set_action( $action ) {
		$this->action = $action;
	}

	/**
	 * Get default message.
	 *
	 * @return string
	 */
	private function get_default_message() {
		$hash = [
			'settings'     => esc_html__( 'Settings imported successfully.', 'seo-by-rank-math' ),
			'news'         => esc_html__( 'News Settings imported successfully.', 'seo-by-rank-math' ),
			'video'        => esc_html__( 'Video Settings imported successfully.', 'seo-by-rank-math' ),
			'deactivate'   => esc_html__( 'Plugin deactivated successfully.', 'seo-by-rank-math' ),
			/* translators: start, end, total */
			'postmeta'     => esc_html__( 'Imported post meta for posts %1$s - %2$s out of %3$s ', 'seo-by-rank-math' ),
			/* translators: total */
			'termmeta'     => esc_html__( 'Imported term meta for %s terms.', 'seo-by-rank-math' ),
			/* translators: start, end, total */
			'usermeta'     => esc_html__( 'Imported user meta for users %1$s - %2$s out of %3$s ', 'seo-by-rank-math' ),
			/* translators: total */
			'redirections' => esc_html__( 'Imported %s redirections.', 'seo-by-rank-math' ),
			/* translators: start, end, total */
			'blocks'       => esc_html__( 'Imported blocks from posts %1$s - %2$s out of %3$s ', 'seo-by-rank-math' ),
			/* translators: start, end, total */
			'recalculate'  => esc_html__( 'Recalculating scores for posts %1$s - %2$s... ', 'seo-by-rank-math' ),
		];

		if ( false === $this->is_success() ) {
			$hash = [
				'settings'     => esc_html__( 'Settings import failed.', 'seo-by-rank-math' ),
				'postmeta'     => esc_html__( 'Posts meta import failed.', 'seo-by-rank-math' ),
				'termmeta'     => esc_html__( 'Term meta import failed.', 'seo-by-rank-math' ),
				'usermeta'     => esc_html__( 'User meta import failed.', 'seo-by-rank-math' ),
				'redirections' => esc_html__( 'There are no redirection to import.', 'seo-by-rank-math' ),
				'blocks'       => esc_html__( 'Blocks import failed.', 'seo-by-rank-math' ),
			];
		}

		return isset( $hash[ $this->get_action() ] ) ? $hash[ $this->get_action() ] : '';
	}
}
PK     ”ŠU]Øõ
¦    -  includes/admin/wizard/class-schema-markup.phpnu „[µü¤        <?php
/**
 * The Schema_Markup wizard step
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Schema_Markup implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		return array_merge(
			self::get_default_values(),
			[
				'rich_snippet'        => Helper::is_module_active( 'rich-snippet' ),
				'accessiblePostTypes' => Helper::get_accessible_post_types(),
				'knowledgegraph_type' => Helper::get_settings( 'titles.knowledgegraph_type' ),
				'schemaTypes'         => Helper::choices_rich_snippet_types( esc_html__( 'None (Click here to set one)', 'seo-by-rank-math' ) ),
				'reviewPosts'         => Helper::get_review_posts(),
			]
		);
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$settings = rank_math()->settings->all_raw();
		Helper::update_modules( [ 'rich-snippet' => $values['rich_snippet'] ? 'on' : 'off' ] );

		// Schema.
		if ( $values['rich_snippet'] ) {
			self::save_rich_snippet( $settings, $values );
		}
		Helper::update_all_settings( $settings['general'], $settings['titles'], null );

		return Helper::get_admin_url();
	}

	/**
	 * Save rich snippet values for post type.
	 *
	 * @param array $settings Array of setting.
	 * @param array $values   Values to save.
	 */
	private static function save_rich_snippet( &$settings, $values ) {
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			if ( 'attachment' === $post_type ) {
				continue;
			}

			$id           = 'pt_' . $post_type . '_default_rich_snippet';
			$article_type = 'pt_' . $post_type . '_default_article_type';

			$settings['titles'][ $id ]           = sanitize_text_field( $values[ $id ] );
			$settings['titles'][ $article_type ] = sanitize_text_field( $values[ $article_type ] );
		}
	}

	/**
	 * Get Default values for the schemas used for Post types.
	 */
	private static function get_default_values() {
		$richsnp_default = [
			'post'    => 'article',
			'product' => 'product',
		];

		$data = [];

		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			if ( 'attachment' === $post_type ) {
				continue;
			}

			$field_id = 'pt_' . $post_type . '_default_rich_snippet';
			$default  = $post_type === 'product' ? 'product' : 'off';
			$value    = Helper::get_settings( 'titles.pt_' . $post_type . '_default_rich_snippet', ( isset( $richsnp_default[ $post_type ] ) ? $richsnp_default[ $post_type ] : $default ) );

			$data[ $field_id ] = $value ? $value : 'off';

			if ( $post_type === 'product' ) {
				continue;
			}

			$data[ 'pt_' . $post_type . '_default_article_type' ] = Helper::get_settings( 'titles.pt_' . $post_type . '_default_article_type', 'post' === $post_type ? 'BlogPosting' : 'Article' );
		}

		return $data;
	}
}
PK     ”ŠU]o[ô“ä   ä   -  includes/admin/wizard/class-compatibility.phpnu „[µü¤        <?php
/**
 * The Compatibility wizard step.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Compatibility implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		$php_version = phpversion();
		return [
			'conflictingPlugins'    => self::get_conflicting_plugins(),
			'phpVersion'            => phpversion(),
			'phpVersionOk'          => version_compare( $php_version, rank_math()->php_version, '>' ),
			'phpVersionRecommended' => version_compare( $php_version, '7.4', '<' ),
			'extensions'            => [
				'dom'        => extension_loaded( 'dom' ),
				'simpleXml'  => extension_loaded( 'SimpleXML' ),
				'image'      => extension_loaded( 'gd' ) || extension_loaded( 'imagick' ),
				'mbString'   => extension_loaded( 'mbstring' ),
				'openSsl'    => extension_loaded( 'openssl' ),
				'base64Func' => function_exists( 'base64_encode' ) && function_exists( 'base64_decode' ) && (bool) base64_decode( base64_encode( '1' ) ),  // phpcs:ignore -- Verified as safe usage.
			],
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$settings = wp_parse_args(
			rank_math()->settings->all_raw(),
			[ 'general' => '' ]
		);

		$settings['general']['setup_mode'] = ! empty( $values['setup_mode'] ) ? sanitize_text_field( $values['setup_mode'] ) : 'easy';

		if ( 'custom' === $settings['general']['setup_mode'] ) {
			// Don't change, use custom imported value.
			return true;
		}

		Helper::update_all_settings( $settings['general'], null, null );

		return true;
	}

	/**
	 * Get conflicting plugins.
	 *
	 * @return array
	 */
	private static function get_conflicting_plugins() {
		$plugins_found       = [];
		$active_plugins      = get_option( 'active_plugins' );
		$conflicting_plugins = self::get_conflicting_plugins_list();
		foreach ( $conflicting_plugins as $plugin_slug => $plugin_name ) {
			if ( in_array( $plugin_slug, $active_plugins, true ) !== false ) {
				$plugins_found[ $plugin_slug ] = $plugin_name;
			}
		}

		return $plugins_found;
	}

	/**
	 * Return list of conflicting plugins.
	 *
	 * @return array List of plugins in path => name format.
	 */
	private static function get_conflicting_plugins_list() {

		$plugins = [
			'2-click-socialmedia-buttons/2-click-socialmedia-buttons.php' => '2 Click Social Media Buttons.',
			'add-link-to-facebook/add-link-to-facebook.php' => 'Add Link to Facebook.',
			'extended-wp-reset/extended-wp-reset.php'      => 'Extended WP Reset.',
			'add-meta-tags/add-meta-tags.php'              => 'Add Meta Tags.',
			'all-in-one-seo-pack/all_in_one_seo_pack.php'  => 'All In One SEO Pack',
			'easy-facebook-share-thumbnails/esft.php'      => 'Easy Facebook Share Thumbnail.',
			'facebook/facebook.php'                        => 'Facebook (official plugin).',
			'facebook-awd/AWD_facebook.php'                => 'Facebook AWD All in one.',
			'facebook-featured-image-and-open-graph-meta-tags/fb-featured-image.php' => 'Facebook Featured Image & OG Meta Tags.',
			'facebook-meta-tags/facebook-metatags.php'     => 'Facebook Meta Tags.',
			'wonderm00ns-simple-facebook-open-graph-tags/wonderm00n-open-graph.php' => 'Facebook Open Graph Meta Tags for WordPress.',
			'facebook-revised-open-graph-meta-tag/index.php' => 'Facebook Revised Open Graph Meta Tag.',
			'facebook-thumb-fixer/_facebook-thumb-fixer.php' => 'Facebook Thumb Fixer.',
			'facebook-and-digg-thumbnail-generator/facebook-and-digg-thumbnail-generator.php' => 'Fedmich\'s Facebook Open Graph Meta.',
			'network-publisher/networkpub.php'             => 'Network Publisher.',
			'nextgen-facebook/nextgen-facebook.php'        => 'NextGEN Facebook OG.',
			'opengraph/opengraph.php'                      => 'Open Graph.',
			'open-graph-protocol-framework/open-graph-protocol-framework.php' => 'Open Graph Protocol Framework.',
			'seo-facebook-comments/seofacebook.php'        => 'SEO Facebook Comments.',
			'seo-ultimate/seo-ultimate.php'                => 'SEO Ultimate.',
			'sexybookmarks/sexy-bookmarks.php'             => 'Shareaholic.',
			'shareaholic/sexy-bookmarks.php'               => 'Shareaholic.',
			'sharepress/sharepress.php'                    => 'SharePress.',
			'simple-facebook-connect/sfc.php'              => 'Simple Facebook Connect.',
			'social-discussions/social-discussions.php'    => 'Social Discussions.',
			'social-sharing-toolkit/social_sharing_toolkit.php' => 'Social Sharing Toolkit.',
			'socialize/socialize.php'                      => 'Socialize.',
			'only-tweet-like-share-and-google-1/tweet-like-plusone.php' => 'Tweet, Like, Google +1 and Share.',
			'wordbooker/wordbooker.php'                    => 'Wordbooker.',
			'wordpress-seo/wp-seo.php'                     => 'Yoast SEO',
			'wordpress-seo-premium/wp-seo-premium.php'     => 'Yoast SEO Premium',
			'wp-seopress/seopress.php'                     => 'SEOPress',
			'wp-seopress-pro/seopress-pro.php'             => 'SEOPress Pro',
			'wpsso/wpsso.php'                              => 'WordPress Social Sharing Optimization.',
			'wp-caregiver/wp-caregiver.php'                => 'WP Caregiver.',
			'wp-facebook-like-send-open-graph-meta/wp-facebook-like-send-open-graph-meta.php' => 'WP Facebook Like Send & Open Graph Meta.',
			'wp-facebook-open-graph-protocol/wp-facebook-ogp.php' => 'WP Facebook Open Graph protocol.',
			'wp-ogp/wp-ogp.php'                            => 'WP-OGP.',
			'zoltonorg-social-plugin/zosp.php'             => 'Zolton.org Social Plugin.',
			'all-in-one-schemaorg-rich-snippets/index.php' => 'All In One Schema Rich Snippets.',
			'wp-schema-pro/wp-schema-pro.php'              => 'Schema Pro',
			'no-category-base-wpml/no-category-base-wpml.php' => 'No Category Base (WPML)',
			'all-404-redirect-to-homepage/all-404-redirect-to-homepage.php' => 'All 404 Redirect to Homepage',
			'remove-category-url/remove-category-url.php'  => 'Remove Category URL',
		];

		$plugins = Helper::is_module_active( 'redirections' ) ? array_merge( $plugins, self::get_redirection_conflicting_plugins() ) : $plugins;
		$plugins = Helper::is_module_active( 'sitemap' ) ? array_merge( $plugins, self::get_sitemap_conflicting_plugins() ) : $plugins;

		return $plugins;
	}

	/**
	 * Redirection: conflicting plugins.
	 *
	 * @return array
	 */
	private static function get_redirection_conflicting_plugins() {
		return [
			'redirection/redirection.php' => 'Redirection',
		];
	}

	/**
	 * Sitemap: conflicting plugins.
	 *
	 * @return array
	 */
	private static function get_sitemap_conflicting_plugins() {
		return [
			'google-sitemap-plugin/google-sitemap-plugin.php' => 'Google Sitemap (BestWebSoft).',
			'xml-sitemaps/xml-sitemaps.php'                => 'XML Sitemaps (Denis de Bernardy and Mike Koepke).',
			'bwp-google-xml-sitemaps/bwp-simple-gxs.php'   => 'Better WordPress Google XML Sitemaps (Khang Minh).',
			'google-sitemap-generator/sitemap.php'         => 'Google XML Sitemaps (Arne Brachhold).',
			'xml-sitemap-feed/xml-sitemap.php'             => 'XML Sitemap & Google News feeds (RavanH).',
			'google-monthly-xml-sitemap/monthly-xml-sitemap.php' => 'Google Monthly XML Sitemap (Andrea Pernici).',
			'simple-google-sitemap-xml/simple-google-sitemap-xml.php' => 'Simple Google Sitemap XML (iTx Technologies).',
			'another-simple-xml-sitemap/another-simple-xml-sitemap.php' => 'Another Simple XML Sitemap.',
			'xml-maps/google-sitemap.php'                  => 'Xml Sitemap (Jason Martens).',
			'google-xml-sitemap-generator-by-anton-dachauer/adachauer-google-xml-sitemap.php' => 'Google XML Sitemap Generator by Anton Dachauer (Anton Dachauer).',
			'wp-xml-sitemap/wp-xml-sitemap.php'            => 'WP XML Sitemap (Team Vivacity).',
			'sitemap-generator-for-webmasters/sitemap.php' => 'Sitemap Generator for Webmasters (iwebslogtech).',
			'xml-sitemap-xml-sitemapcouk/xmls.php'         => 'XML Sitemap - XML-Sitemap.co.uk (Simon Hancox).',
			'sewn-in-xml-sitemap/sewn-xml-sitemap.php'     => 'Sewn In XML Sitemap (jcow).',
			'rps-sitemap-generator/rps-sitemap-generator.php' => 'RPS Sitemap Generator (redpixelstudios).',
		];
	}
}
PK     ”ŠU]Ö^?×f  f  $  includes/admin/wizard/class-role.phpnu „[µü¤        <?php
/**
 * The Role wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;
use RankMath\Role_Manager\Capability_Manager;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Role implements Wizard_Step {
	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		Helper::is_configured( true );

		return array_merge(
			Helper::get_roles_capabilities(),
			[
				'role_manager' => Helper::is_module_active( 'role-manager' ),
				'roles'        => Helper::get_roles(),
				'capabilities' => Capability_Manager::get()->get_capabilities(),
			]
		);
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		if ( empty( $values ) ) {
			return false;
		}

		Helper::update_modules( [ 'role-manager' => $values['role_manager'] ? 'on' : 'off' ] );
		Helper::set_capabilities( $values );
		return true;
	}
}
PK     ”ŠU]ŒÛ      %  includes/admin/wizard/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ”ŠU]T'äÞ§N  §N  1  includes/admin/wizard/views/search-console-ui.phpnu „[µü¤        <?php
/**
 * Search console UI.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin\Wizard
 */

use RankMath\KB;
use RankMath\Helper;
use RankMath\Google\Authentication;
use RankMath\Google\Permissions;
use RankMath\Analytics\Url_Inspection;
use RankMath\Helpers\Str;
use RankMath\Google\Analytics;
use RankMath\Google\Console;

defined( 'ABSPATH' ) || exit;

if ( ! Helper::is_site_connected() ) {
	require_once 'rank-math-connect.php';
	return;
}

$is_authorized = Authentication::is_authorized();
if ( ! $is_authorized ) {
	require_once 'google-connect.php';
	return;
}

$profile   = wp_parse_args(
	get_option( 'rank_math_google_analytic_profile' ),
	[
		'profile' => '',
		'country' => 'all',
	]
);
$analytics = wp_parse_args(
	get_option( 'rank_math_google_analytic_options' ),
	[
		'adsense_id'       => '',
		'account_id'       => '',
		'property_id'      => '',
		'view_id'          => '',
		'measurement_id'   => '',
		'stream_name'      => '',
		'country'          => 'all',
		'install_code'     => false,
		'anonymize_ip'     => false,
		'local_ga_js'      => false,
		'exclude_loggedin' => false,
	]
);

$is_profile_connected    = Console::is_console_connected();
$is_adsense_connected    = ! empty( $analytics['adsense_id'] );
$is_analytics_connected  = Analytics::is_analytics_connected();
$is_index_status_enabled = Url_Inspection::is_enabled() || ! $is_profile_connected;
$all_services            = get_option(
	'rank_math_analytics_all_services',
	[
		'isVerified'           => '',
		'inSearchConsole'      => '',
		'hasSitemap'           => '',
		'hasAnalytics'         => '',
		'hasAnalyticsProperty' => '',
		'homeUrl'              => '',
		'sites'                => '',
		'accounts'             => [],
		'adsenseAccounts'      => [],
	]
);
$is_pro_active           = defined( 'RANK_MATH_PRO_FILE' );
?>
<input type="hidden" class="cmb2-id-check-all-services" value="<?php echo $is_profile_connected && $is_analytics_connected ? '1' : '0'; ?>" />

<?php
$connections = [
	'reconnect'  => [
		'link'  => wp_nonce_url( admin_url( 'admin.php?reconnect=google' ), 'rank_math_reconnect_google' ),
		'class' => 'rank-math-reconnect-google',
		'text'  => esc_html__( 'Reconnect', 'seo-by-rank-math' ),
	],
	'disconnect' => [
		'link'  => '#',
		'class' => 'rank-math-disconnect-google',
		'text'  => esc_html__( 'Disconnect', 'seo-by-rank-math' ),
	],
];

if ( Helper::is_advanced_mode() && ( $is_profile_connected || $is_adsense_connected || $is_analytics_connected ) ) {
	$connections['test-connections'] = [
		'link'  => '#',
		'class' => 'rank-math-test-connection-google',
		'text'  => esc_html__( 'Test Connections', 'seo-by-rank-math' ),
	];
}

$connections = apply_filters( 'rank_math/analytics/connect_actions', $connections );
?>
<div class="connect-actions">
	<?php foreach ( $connections as $connection ) { ?>
		<a href="<?php echo esc_attr( $connection['link'] ); ?>" class="button button-link <?php echo esc_attr( $connection['class'] ); ?>"><?php echo esc_html( $connection['text'] ); ?></a>
	<?php } ?>
</div>

<?php
$console_classes        = Helper::classnames(
	'rank-math-box no-padding rank-math-accordion rank-math-connect-search-console',
	[
		'connected'    => $is_profile_connected,
		'disconnected' => ! $is_profile_connected,
		'disabled'     => ! Permissions::has_console(),
	]
);
$console_status_classes = Helper::classnames(
	'rank-math-connection-status',
	[
		'rank-math-connection-status-success' => Console::is_valid_connection(),
		'rank-math-connection-status-error'   => ! Console::is_valid_connection(),
	]
);

$console_status = $is_profile_connected ? 'Connected' : 'Not Connected';

?>
<div class="<?php echo esc_attr( $console_classes ); ?>" tabindex="0">
	<header>
		<h3><span class="rank-math-connection-status-wrap"><span class="<?php echo esc_attr( $console_status_classes ); ?>" title="<?php echo esc_attr( $console_status ); ?>"></span></span> <?php esc_html_e( 'Search Console', 'seo-by-rank-math' ); ?></h3>
	</header>
	<div class="rank-math-accordion-content">
		<?php
		if ( ! Permissions::has_console() ) {
			Permissions::print_warning();
		}
		?>

		<div class="cmb-row cmb-type-select">
			<div class="cmb-row-col">
				<label for="site-console-profile"><?php esc_html_e( 'Site', 'seo-by-rank-math' ); ?></label>
				<select class="cmb2_select site-console-profile notrack" name="site-console-profile" id="site-console-profile" data-selected="<?php echo esc_attr( $profile['profile'] ); ?>" disabled="disabled">
					<?php if ( $is_profile_connected ) : ?>
					<option value="<?php echo esc_attr( $profile['profile'] ); ?>"><?php echo esc_attr( $profile['profile'] ); ?></option>
					<?php endif; ?>
				</select>
			</div>
			<?php do_action( 'rank_math/analytics/options/console' ); ?>
		</div>

		<div class="cmb-row cmb-type-toggle">
			<div class="cmb-td">
				<label class="cmb2-toggle">
					<input type="checkbox" class="regular-text notrack" name="enable-index-status" id="enable-index-status" value="on" <?php checked( $is_index_status_enabled ); ?> <?php disabled( ! $is_profile_connected ); ?>>
					<span class="cmb2-slider">
						<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
						<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
					</span>
				</label>
				<label for="enable-index-status"><?php esc_html_e( 'Enable the Index Status tab', 'seo-by-rank-math' ); ?></label>
				<div class="cmb2-metabox-description"><?php esc_html_e( 'Enable this option to show the Index Status tab in the Analytics module.', 'seo-by-rank-math' ); ?> <a href="<?php echo KB::get( 'url-inspection-api', 'SW Analytics Index Status Option' ); // phpcs:ignore ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Learn more.', 'seo-by-rank-math' ); ?></a></div>
			</div>
		</div>

		<?php if ( ! Console::is_valid_connection() ) : ?>
			<div class="rank-math-notice rank-math-notice--error">
				<p><?php esc_html_e( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ); ?></p>
			</div>
		<?php endif; ?>
	</div>
</div>

<?php
$analytic_classes        = Helper::classnames(
	'rank-math-box no-padding rank-math-accordion rank-math-connect-analytics',
	[
		'connected'    => $is_analytics_connected,
		'disconnected' => ! $is_analytics_connected,
		'disabled'     => ! Permissions::has_analytics(),
	]
);
$analytic_status_classes = Helper::classnames(
	'rank-math-connection-status',
	[
		'rank-math-connection-status-success' => Analytics::is_valid_connection(),
		'rank-math-connection-status-error'   => ! Analytics::is_valid_connection(),
	]
);
$analytic_status         = $is_analytics_connected ? 'Connected' : 'Not Connected';
?>
<div class="<?php echo esc_attr( $analytic_classes ); ?>" tabindex="0">
	<header>
		<h3><span class="rank-math-connection-status-wrap"><span class="<?php echo esc_attr( $analytic_status_classes ); ?>" title="<?php echo esc_attr( $analytic_status ); ?>"></span></span><?php esc_html_e( 'Analytics', 'seo-by-rank-math' ); ?></h3>
	</header>
	<div class="rank-math-accordion-content rank-math-analytics-content">

		<?php
		if ( ! Permissions::has_analytics() ) {
			Permissions::print_warning();
		}
		?>

		<p class="warning yellow">
			<strong class="note"><?php echo esc_html__( 'Note', 'seo-by-rank-math' ); ?></strong>
			<?php
			printf(
				/* translators: %s: Link to KB article */
				esc_html__( 'Ready to switch to Google Analytics 4? %s', 'seo-by-rank-math' ),
				'<a href="' . KB::get( 'using-ga4', 'Analytics GA4 KB' ) . '" target="_blank">' . esc_html__( 'Click here to know how', 'seo-by-rank-math' ) . '</a>.' // phpcs:ignore
			);
			?>
		</p>

		<div class="cmb-row cmb-type-select">
			<div class="cmb-row-col">
				<label for="site-analytics-account"><?php esc_html_e( 'Account', 'seo-by-rank-math' ); ?></label>
				<select class="cmb2_select site-analytics-account notrack" name="site-analytics-account" id="site-analytics-account" data-selected="<?php echo esc_attr( $analytics['account_id'] ); ?>" disabled="disabled">
					<?php
					if ( $is_analytics_connected ) :
						$analytic_account = $all_services['accounts'][ $analytics['account_id'] ]['name'] ?? '';
						?>
					<option value="<?php echo esc_attr( $analytics['account_id'] ); ?>"><?php echo esc_attr( $analytic_account ); ?></option>
					<?php endif; ?>
				</select>
			</div>
			<div class="cmb-row-col">
				<label for="site-analytics-property"><?php esc_html_e( 'Property', 'seo-by-rank-math' ); ?></label>
				<select class="cmb2_select site-analytics-property notrack" name="site-analytics-property" id="site-analytics-property" data-selected="<?php echo esc_attr( $analytics['property_id'] ); ?>" disabled="disabled">
					<?php
					if ( $is_analytics_connected ) :
						$analytic_property = $all_services['accounts'][ $analytics['account_id'] ]['properties'][ $analytics['property_id'] ]['name'] ?? '';
						?>
					<option value="<?php echo esc_attr( $analytics['property_id'] ); ?>"><?php echo esc_html( $analytic_property ); ?></option>
					<?php endif; ?>
				</select>
			</div>
			<div class="cmb-row-col">
				<label for="site-analytics-view">
				<?php echo esc_html__( 'Data Stream', 'seo-by-rank-math' ); ?>
				</label>
				<select class="cmb2_select site-analytics-view notrack" name="site-analytics-view" id="site-analytics-view" data-selected="<?php echo esc_attr( $analytics['view_id'] ); ?>" disabled="disabled">
					<?php
					if ( $is_analytics_connected ) :
						$analytic_view = $analytics['stream_name'] ? $analytics['stream_name'] : 'Website';
						?>
						<option value="<?php echo esc_attr( $analytics['view_id'] ); ?>"><?php echo esc_attr( $analytic_view ); ?></option>
						<?php
					endif;
					?>
				</select>
			</div>
			<input type="hidden" id="rank-math-analytics-measurement-id" name="measurementID" value="<?php echo esc_attr( $analytics['measurement_id'] ); ?>" />
			<input type="hidden" id="rank-math-analytics-stream-name" name="streamName" value="<?php echo esc_attr( $analytics['stream_name'] ); ?>" />
			<?php do_action( 'rank_math/analytics/options/analytics' ); ?>
		</div>

		<div class="cmb-row cmb-type-toggle">
			<div class="cmb-td">
				<label class="cmb2-toggle">
					<input type="checkbox" class="regular-text notrack" name="install-code" id="install-code" value="on"<?php checked( $analytics['install_code'] ); ?>>
					<span class="cmb2-slider">
						<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
						<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
					</span>
				</label>
				<label for="install-code"><?php esc_html_e( 'Install analytics code', 'seo-by-rank-math' ); ?></label>
				<div class="cmb2-metabox-description"><?php esc_html_e( 'Enable this option only if you are not using any other plugin/theme to install Google Analytics code.', 'seo-by-rank-math' ); ?></div>
			</div>
		</div>

		<div class="cmb-row cmb-type-toggle <?php echo ! $is_pro_active ? 'cmb-redirector-element' : ''; ?>" <?php echo ! $is_pro_active ? 'data-url="' . KB::the( 'free-vs-pro', 'Anonymize IP' ) . '"' : ''; // phpcs:ignore ?>>
			<div class="cmb-td">
				<label class="cmb2-toggle">
					<input type="checkbox" class="regular-text notrack" name="anonymize-ip" id="anonymize-ip" value="on"<?php checked( $analytics['anonymize_ip'] ); ?><?php disabled( ! $is_pro_active ); ?>>
					<span class="cmb2-slider<?php echo ! $is_pro_active ? ' disabled' : ''; ?> ">
						<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
						<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
					</span>
				</label>
				<label for="anonymize-ip">
					<?php esc_html_e( 'Anonymize IP addresses', 'seo-by-rank-math' ); ?>
					<?php if ( ! $is_pro_active ) : ?>
					<span class="rank-math-pro-badge">
						<a href="<?php KB::the( 'pro', 'Anonymize IP' ); ?>" target="_blank" rel="noopener noreferrer">
							<?php esc_html_e( 'PRO', 'seo-by-rank-math' ); ?>
						</a>
					</span>
					<?php endif; ?>
				</label>
				<div class="rank-math-cmb-dependency hidden" data-relation="or">
					<span class="hidden" data-field="install-code" data-comparison="=" data-value="on"></span>
				</div>
			</div>
		</div>

		<div class="cmb-row cmb-type-toggle <?php echo ! $is_pro_active ? 'cmb-redirector-element' : ''; ?>" <?php echo ! $is_pro_active ? 'data-url="' . KB::the( 'pro', 'Localjs IP' ) . '"' : ''; // phpcs:ignore ?>>
			<div class="cmb-td">
				<label class="cmb2-toggle">
					<input type="checkbox" class="regular-text notrack" name="local-ga-js" id="local-ga-js" value="on"<?php checked( $analytics['local_ga_js'] ); ?><?php disabled( ! $is_pro_active ); ?>>
					<span class="cmb2-slider<?php echo ! $is_pro_active ? ' disabled' : ''; ?> ">
						<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
						<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
					</span>
				</label>
				<label for="local-ga-js">
					<?php esc_html_e( 'Self-Hosted Analytics JS File', 'seo-by-rank-math' ); ?>
					<?php if ( ! $is_pro_active ) : ?>
					<span class="rank-math-pro-badge">
						<a href="<?php KB::the( 'pro', 'Localjs IP' ); ?>" target="_blank" rel="noopener noreferrer">
							<?php esc_html_e( 'PRO', 'seo-by-rank-math' ); ?>
						</a>
					</span>
					<?php endif; ?>
				</label>
				<div class="rank-math-cmb-dependency hidden" data-relation="or">
					<span class="hidden" data-field="install-code" data-comparison="=" data-value="on"></span>
				</div>
			</div>
		</div>

		<div class="cmb-row cmb-type-toggle">
			<div class="cmb-td">
				<label class="cmb2-toggle">
					<input type="checkbox" class="regular-text notrack" name="exclude-loggedin" id="exclude-loggedin" value="on"<?php checked( $analytics['exclude_loggedin'] ); ?>>
					<span class="cmb2-slider">
						<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>
						<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>
					</span>
				</label>
				<label for="exclude-loggedin"><?php esc_html_e( 'Exclude Logged-in users', 'seo-by-rank-math' ); ?></label>
				<div class="rank-math-cmb-dependency hidden" data-relation="or">
					<span class="hidden" data-field="install-code" data-comparison="=" data-value="on"></span>
				</div>
			</div>
		</div>

		<?php if ( ! Analytics::is_valid_connection() ) : ?>
			<div class="rank-math-notice rank-math-notice--error">
				<p><?php esc_html_e( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ); ?></p>
			</div>
		<?php endif; ?>
	</div>
</div>

<?php ob_start(); ?>
<div class="rank-math-box no-padding rank-math-accordion rank-math-connect-adsense disconnected" tabindex="0">
	<header>
		<h3>
			<span class="rank-math-connection-status-wrap">
				<span class="rank-math-connection-status rank-math-connection-status-error" title="Not Connected"></span>
			</span><?php esc_html_e( 'AdSense', 'seo-by-rank-math' ); ?>
		</h3>
	</header>
	<div class="rank-math-accordion-content">
		<div class="cmb-row cmb-type-select">
			<div class="cmb-row-col">
				<label for="site-adsense-account"><?php esc_html_e( 'Account', 'seo-by-rank-math' ); ?></label>
				<select class="cmb2_select site-adsense-account notrack" name="site-adsense-account" id="site-adsense-account" data-selected="" disabled="disabled">
					<option value=""><?php esc_html_e( 'Select Account', 'seo-by-rank-math' ); ?></option>
				</select>
			</div>
		</div>
		<div id="rank-math-pro-cta" class="no-margin">
			<div class="rank-math-cta-text">
				<span class="rank-math-pro-badge">
					<a href="<?php KB::the( 'pro', 'AdSense Toggle' ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'PRO', 'seo-by-rank-math' ); ?></a></span> <?php esc_html_e( "Google AdSense support is only available in Rank Math Pro's Advanced Analytics module.", 'seo-by-rank-math' ); ?>
			</div>
		</div>
	</div>
</div>
<?php echo apply_filters( 'rank_math/analytics/adsense', ob_get_clean(), $analytics, $all_services ); // phpcs:ignore ?>

<div id="rank-math-pro-cta" class="rank-math-privacy-box width-100">
	<div class="rank-math-cta-table">
		<div class="rank-math-cta-body less-padding">
			<i class="dashicons dashicons-lock"></i>
			<p>
			<?php
			/* translators: %s: Link to KB article */
			printf( esc_html__( 'We do not store any of the data from your Google account on our servers, everything is processed & stored on your server. We take your privacy extremely seriously and ensure it is never misused. %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'usage-policy', 'Analytics Privacy Notice' ) . '" target="_blank" rel="noopener noreferrer">' . esc_html__( 'Learn more.', 'seo-by-rank-math' ) . '</a>' ); // phpcs:ignore
			?>
			</p>
		</div>
	</div>
</div>
<?php
// phpcs:enable

if ( Helper::is_wizard() && ! RankMath\Analytics\Email_Reports::are_fields_hidden() ) {
	?>
	<div class="cmb-row email-reports-header text-center" style="border-top:0;">
		<h1><?php esc_html_e( 'Email Reports', 'seo-by-rank-math' ); ?></h1>
		<div class="email-reports-desc text-center"><?php esc_html_e( 'Receive Analytics reports periodically in email.', 'seo-by-rank-math' ); ?> <a href="#" target="_blank"><?php esc_html_e( 'Learn more about Email Reports.', 'seo-by-rank-math' ); ?></a></div>
	</div>
	<div class="cmb-row cmb-type-toggle cmb2-id-console-email-reports" data-fieldtype="toggle">
		<div class="cmb-th">
			<label for="console_email_reports"><?php esc_html_e( 'Email Reports', 'seo-by-rank-math' ); ?></label>
		</div>
		<div class="cmb-td">
			<label class="cmb2-toggle"><input type="checkbox" class="regular-text" name="console_email_reports" id="console_email_reports" value="on" <?php checked( Helper::get_settings( 'general.console_email_reports' ) ); ?> data-hash="7e0rimtbvig0"><span class="cmb2-slider"><svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg><svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg></span></label>
		</div>
	</div>
	<?php
	do_action( 'rank_math/analytics/options/wizard_after_email_report' );
}
PK     ”ŠU]¿y:rw	  w	  .  includes/admin/wizard/views/google-connect.phpnu „[µü¤        <?php
/**
 * Search console ui.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin\Wizard
 */

use RankMath\KB;
use RankMath\Google\Authentication;

defined( 'ABSPATH' ) || exit;

// phpcs:disable
$is_authorized = Authentication::is_authorized();
$authorize   = ! $is_authorized ? ( '<div class="connect-wrap" style="margin-top: 30px;"><a href="' . esc_url( Authentication::get_auth_url() ) . '" class="button button-primary button-animated rank-math-authorize-account">' . esc_html__( 'Connect Google Services', 'seo-by-rank-math' ) . '</a></div>' ) : '';
$deauthorize = $is_authorized ? '<button class="button button-primary rank-math-deauthorize-account">' . esc_html__( 'Disconnect Account', 'seo-by-rank-math' ) . '</button>' : '';

echo $authorize . $deauthorize;
?>
<div id="rank-math-pro-cta" class="analytics">
	<div class="rank-math-cta-box width-100 no-shadow no-padding no-border">
		<h3><?php echo esc_attr__( 'Benefits of Connecting Google Account', 'seo-by-rank-math' ); ?></h3>
		<ul>
			<li><?php echo esc_attr__( 'Verify site ownership on Google Search Console in a single click', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Track page and keyword rankings with the Advanced Analytics module', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Easily set up Google Analytics without using another 3rd party plugin', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Automatically submit sitemaps to the Google Search Console', 'seo-by-rank-math' ); ?></li>
			<li><a href="<?php echo KB::get( 'help-analytics', 'SW Analytics Step Benefits' ); ?>" target="_blank"><?php echo esc_html__( 'Learn more about the benefits of connecting your account here.', 'seo-by-rank-math' ); ?></a></li>
		</ul>
	</div>
</div>
<div id="rank-math-pro-cta" class="rank-math-privacy-box">
	<div class="rank-math-cta-table">
		<div class="rank-math-cta-body less-padding">
			<i class="dashicons dashicons-lock"></i>
			<p><?php printf( esc_html__( 'We do not store any of the data from your Google account on our servers, everything is processed & stored on your server. We take your privacy extremely seriously and ensure it is never misused. %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'usage-policy', 'Analytics Privacy Notice' ) . '" target="_blank" rel="noopener noreferrer">' . esc_html__( 'Learn more.', 'seo-by-rank-math' ) . '</a>' ); ?></p>
		</div>
	</div>
</div>
PK     ”ŠU]ff\J  J  '  includes/admin/wizard/views/content.phpnu „[µü¤        <?php
/**
 * Setup wizard content template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin\Wizard
 */

use RankMath\KB;

defined( 'ABSPATH' ) || exit;

?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
	<head>
		<meta name="viewport" content="width=device-width"/>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title><?php esc_html_e( 'Setup Wizard - Rank Math', 'seo-by-rank-math' ); ?></title>
		<?php wp_print_head_scripts(); ?>
		<?php wp_print_styles( 'rank-math-wizard' ); ?>
	</head>
	<body class="rank-math-wizard rank-math-page <?php echo is_rtl() ? ' rtl' : ''; ?>">
		<div id="rank-math-wizard-wrapper"></div>
	</body>
	<?php
	rank_math()->json->output();
	if ( function_exists( 'wp_print_media_templates' ) ) {
		wp_print_media_templates();
	}
	wp_print_footer_scripts();
	?>
</html>
PK     ”ŠU]-QÜÅ3  3  1  includes/admin/wizard/views/rank-math-connect.phpnu „[µü¤        <?php
/**
 * Search console ui.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin\Wizard
 */

use RankMath\KB;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

$sw_page = Param::get( 'page', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
$sw_page = in_array( $sw_page, [ 'rank-math-options-general', 'rank-math-analytics' ], true ) ? 'rank-math-options-general' : 'rank-math-wizard&step=analytics';
$url     = Admin_Helper::get_activate_url( admin_url( 'admin.php?analytics=1&page=' . $sw_page ) );

$site_url_valid = Admin_Helper::is_site_url_valid();
$button_class   = 'button button-primary button-connect' . ( $site_url_valid ? ' button-animated' : ' disabled' );
?>
<?php Admin_Helper::maybe_show_invalid_siteurl_notice(); ?>

<div class="wp-core-ui rank-math-ui connect-wrap" style="margin-top: 30px;">
	<a href="<?php echo esc_url( $url ); ?>" class="<?php echo esc_attr( $button_class ); ?>" name="rank_math_activate"><?php echo esc_attr__( 'Connect Your Rank Math Account', 'seo-by-rank-math' ); ?></a>
</div>
<div id="rank-math-pro-cta" class="analytics">
	<div class="rank-math-cta-box width-100 no-shadow no-padding no-border">
		<h3><?php echo esc_attr__( 'Benefits of Connecting Rank Math Account', 'seo-by-rank-math' ); ?></h3>
		<ul>
			<li><?php echo esc_attr__( 'Verify site ownership on Google Search Console in a single click', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Track page and keyword rankings with the Advanced Analytics module', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Easily set up Google Analytics without using another 3rd party plugin', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Automatically submit sitemaps to the Google Search Console', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Free keyword suggestions when entering a focus keyword', 'seo-by-rank-math' ); ?></li>
			<li><?php echo esc_attr__( 'Use our revolutionary SEO Analyzer to scan your website for SEO errors', 'seo-by-rank-math' ); ?></li>
			<li><a href="<?php echo esc_url( KB::get( 'free-account-benefits', 'SW Analytics Step' ) ); ?>" target="_blank"><?php echo esc_html__( 'Learn more about the benefits of connecting your account here.', 'seo-by-rank-math' ); ?></a></li>
		</ul>
	</div>
</div>
<div id="rank-math-pro-cta" class="rank-math-privacy-box">
	<div class="rank-math-cta-table">
		<div class="rank-math-cta-body less-padding">
			<i class="dashicons dashicons-lock"></i>
			<p>
				<?php
					// Translators: placeholder is the KB link.
					printf( esc_html__( 'We do not store any of the data from your Google account on our servers, everything is processed & stored on your server. We take your privacy extremely seriously and ensure it is never misused. %s', 'seo-by-rank-math' ), '<a href="' . esc_url( KB::get( 'usage-policy', 'Analytics Privacy Notice' ) ) . '" target="_blank" rel="noopener noreferrer">' . esc_html__( 'Learn more.', 'seo-by-rank-math' ) . '</a>' );
				?>
			</p>
		</div>
	</div>
</div>
PK     ”ŠU]à¸ÉI
  
  &  includes/admin/wizard/class-import.phpnu „[µü¤        <?php
/**
 * The Import wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\KB;
use RankMath\Admin\Importers\Detector;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Import implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Analytics step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		$detector = new Detector();
		$plugins  = $detector->detect();
		$plugins  = self::set_priority( $plugins );
		return [
			'importablePlugins' => $plugins,
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		delete_option( 'rank_math_yoast_block_posts' );
		return true;
	}

	/**
	 * Set plugins priority.
	 *
	 * @param array $plugins Array of detected plugins.
	 *
	 * @return array
	 */
	private static function set_priority( $plugins ) {
		$checked  = false;
		$priority = array_intersect( [ 'seopress', 'yoast', 'yoast-premium', 'aioseo' ], array_keys( $plugins ) );

		foreach ( $priority as $slug ) {
			if ( ! $checked ) {
				$checked                     = true;
				$plugins[ $slug ]['checked'] = true;
				continue;
			}

			$plugins[ $slug ]['checked'] = false;
		}

		return $plugins;
	}

	/**
	 * Get description for choice field.
	 *
	 * @param string  $slug      Plugin slug.
	 * @param array   $plugin    Plugin info array.
	 * @param boolean $is_active Is plugin active.
	 *
	 * @return string
	 */
	private function get_choice_description( $slug, $plugin, $is_active ) {
		/* translators: 1 is plugin name */
		$desc = 'aio-rich-snippet' === $slug ? esc_html__( 'Import meta data from the %1$s plugin.', 'seo-by-rank-math' ) : esc_html__( 'Import settings and meta data from the %1$s plugin.', 'seo-by-rank-math' );

		/* translators: 2 is link to Knowledge Base article */
		$desc .= ' ' . __( 'The process may take a few minutes if you have a large number of posts or pages <a href="%2$s" target="_blank">Learn more about the import process here.</a>', 'seo-by-rank-math' );

		if ( $is_active ) {
			/* translators: 1 is plugin name */
			$desc .= '<br>' . __( ' %1$s plugin will be disabled automatically moving forward to avoid conflicts. <strong>It is thus recommended to import the data you need now.</strong>', 'seo-by-rank-math' );
		}

		return sprintf( wp_kses_post( $desc ), $plugin['name'], KB::get( 'seo-import', 'SW Import Step' ) );
	}
}
PK     ”ŠU]Ø†çH¼  ¼  3  includes/admin/wizard/class-monitor-redirection.phpnu „[µü¤        <?php
/**
 * The Monitor Redirection wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Monitor_Redirection implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		return [
			'404-monitor'  => Helper::is_module_active( '404-monitor' ),
			'redirections' => Helper::is_module_active( 'redirections' ),
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		Helper::update_modules(
			[
				'404-monitor'  => $values['404-monitor'] ? 'on' : 'off',
				'redirections' => $values['redirections'] ? 'on' : 'off',
			]
		);

		return true;
	}
}
PK     ”ŠU]4•íþ®  ®  ,  includes/admin/wizard/class-optimization.phpnu „[µü¤        <?php
/**
 * The Optimization wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Optimization implements Wizard_Step {
	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		return [
			'noindex_empty_taxonomies'  => Helper::get_settings( 'titles.noindex_empty_taxonomies' ),
			'nofollow_external_links'   => Helper::get_settings( 'general.nofollow_external_links' ),
			'new_window_external_links' => Helper::get_settings( 'general.new_window_external_links' ),
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$settings = rank_math()->settings->all_raw();

		$settings['titles']['noindex_empty_taxonomies'] = $values['noindex_empty_taxonomies'] ? 'on' : 'off';

		if ( isset( $values['attachment_redirect_urls'] ) && 'on' === $values['attachment_redirect_urls'] ) {
			$settings['general']['attachment_redirect_urls']    = 'on';
			$settings['general']['attachment_redirect_default'] = sanitize_url( $values['attachment_redirect_default'] );
		}

		$settings['general']['nofollow_external_links']   = ! empty( $values['nofollow_external_links'] ) ? 'on' : 'off';
		$settings['general']['new_window_external_links'] = $values['new_window_external_links'] ? 'on' : 'off';

		Helper::update_all_settings( $settings['general'], $settings['titles'], null );
		Helper::schedule_flush_rewrite();

		return true;
	}
}
PK     ”ŠU]±sÐÒ9  9  '  includes/admin/wizard/class-sitemap.phpnu „[µü¤        <?php
/**
 * The Sitemap wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Sitemap implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		$post_types = self::get_post_types();
		$taxonomies = self::get_taxonomies();
		return [
			'sitemap'            => Helper::is_module_active( 'sitemap' ),
			'include_images'     => Helper::get_settings( 'sitemap.include_images' ),
			'postTypes'          => $post_types['post_types'],
			'sitemap_post_types' => $post_types['defaults'],
			'taxonomies'         => $taxonomies['taxonomies'],
			'sitemap_taxonomies' => $taxonomies['defaults'],
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$settings = rank_math()->settings->all_raw();
		Helper::update_modules( [ 'sitemap' => $values['sitemap'] ? 'on' : 'off' ] );

		if ( $values['sitemap'] ) {
			$settings['sitemap']['include_images'] = $values['include_images'] ? 'on' : 'off';

			$settings = self::save_post_types( $settings, $values );
			$settings = self::save_taxonomies( $settings, $values );
			Helper::update_all_settings( null, null, $settings['sitemap'] );
		}

		Helper::schedule_flush_rewrite();
		return true;
	}

	/**
	 * Get post type data.
	 *
	 * @return array
	 */
	private static function get_post_types() {
		$p_defaults = [];
		$post_types = Helper::choices_post_types();
		if ( Helper::get_settings( 'general.attachment_redirect_urls', true ) ) {
			unset( $post_types['attachment'] );
		}

		foreach ( $post_types as $post_type => $object ) {
			if ( true === Helper::get_settings( "sitemap.pt_{$post_type}_sitemap" ) ) {
				$p_defaults[] = $post_type;
			}
		}

		return [
			'defaults'   => $p_defaults,
			'post_types' => $post_types,
		];
	}

	/**
	 * Get taxonomies data.
	 *
	 * @return array
	 */
	private static function get_taxonomies() {
		$t_defaults = [];
		$taxonomies = Helper::get_accessible_taxonomies();
		unset( $taxonomies['post_tag'], $taxonomies['post_format'], $taxonomies['product_tag'] );
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
		foreach ( $taxonomies as $taxonomy => $label ) {
			if ( true === Helper::get_settings( "sitemap.tax_{$taxonomy}_sitemap" ) ) {
				$t_defaults[] = $taxonomy;
			}
		}

		return [
			'defaults'   => $t_defaults,
			'taxonomies' => $taxonomies,
		];
	}

	/**
	 * Save Post Types
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_post_types( $settings, $values ) {
		$post_types = Helper::choices_post_types();
		if ( ! isset( $values['sitemap_post_types'] ) ) {
			$values['sitemap_post_types'] = [];
		}

		foreach ( $post_types as $post_type => $object ) {
			$settings['sitemap'][ "pt_{$post_type}_sitemap" ] = in_array( $post_type, $values['sitemap_post_types'], true ) ? 'on' : 'off';
		}

		return $settings;
	}

	/**
	 * Save Taxonomies
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_taxonomies( $settings, $values ) {
		$taxonomies = Helper::get_accessible_taxonomies();
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
		if ( ! isset( $values['sitemap_taxonomies'] ) ) {
			$values['sitemap_taxonomies'] = [];
		}

		foreach ( $taxonomies as $taxonomy => $label ) {
			$settings['sitemap'][ "tax_{$taxonomy}_sitemap" ] = in_array( $taxonomy, $values['sitemap_taxonomies'], true ) ? 'on' : 'off';
		}

		return $settings;
	}
}
PK     ”ŠU]A0$É+  +  /  includes/admin/wizard/interface-wizard-step.phpnu „[µü¤        <?php
/**
 * The wizard step contract.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

defined( 'ABSPATH' ) || exit;

/**
 * Wizard step contract.
 */
interface Wizard_Step {
	/**
	 * Localized data to be used in the step.
	 *
	 * @return array
	 */
	public static function get_localized_data();

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values );
}
PK     ”ŠU]·¤ó  ó  %  includes/admin/wizard/class-ready.phpnu „[µü¤        <?php
/**
 * The Ready wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Ready implements Wizard_Step {
	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		Helper::is_configured( true );
		return [
			'scoreImg'           => esc_url( rank_math()->plugin_url() . 'assets/admin/img/score-100.png' ),
			'dashboardUrl'       => Helper::get_dashboard_url(),
			'enable_auto_update' => boolval( Helper::get_auto_update_setting() ),
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$value = ! empty( $values['enable_auto_update'] ) ? 'on' : 'off';
		Helper::toggle_auto_update_setting( $value );
		return true;
	}
}
PK     ”ŠU]ûzi¢  ¢  .  includes/admin/wizard/class-search-console.phpnu „[µü¤        <?php
/**
 * The Search Console wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;
use RankMath\Google\Authentication;
use RankMath\Google\Permissions;
use RankMath\Analytics\Email_Reports;
use RankMath\Analytics\Workflow\Objects;
use RankMath\Analytics\Workflow\Console;
use RankMath\Analytics\Workflow\Inspections;


defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Search_Console implements Wizard_Step {

	/**
	 * Get Localized data to be used in the Analytics step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		$all_services = get_option(
			'rank_math_analytics_all_services',
			[
				'isVerified'           => '',
				'inSearchConsole'      => '',
				'hasSitemap'           => '',
				'hasAnalytics'         => '',
				'hasAnalyticsProperty' => '',
				'homeUrl'              => '',
				'sites'                => '',
				'accounts'             => [],
				'adsenseAccounts'      => [],
			]
		);
		$analytics    = wp_parse_args(
			get_option( 'rank_math_google_analytic_options' ),
			[
				'adsense_id'       => '',
				'account_id'       => '',
				'property_id'      => '',
				'view_id'          => '',
				'measurement_id'   => '',
				'stream_name'      => '',
				'country'          => 'all',
				'install_code'     => false,
				'anonymize_ip'     => false,
				'local_ga_js'      => false,
				'exclude_loggedin' => false,
			]
		);

		$page         = Param::get( 'page', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		$page         = in_array( $page, [ 'rank-math-options-general', 'rank-math-analytics' ], true ) ? 'rank-math-options-general' : 'rank-math-wizard&step=analytics';
		$activate_url = Admin_Helper::get_activate_url( admin_url( 'admin.php?analytics=1&page=' . $page ) );

		$profile = wp_parse_args(
			get_option( 'rank_math_google_analytic_profile' ),
			[
				'profile'             => '',
				'country'             => 'all',
				'enable_index_status' => true,
				'sites'               => $all_services['sites'],
			]
		);

		return [
			'isSiteConnected'        => Helper::is_site_connected(),
			'isAuthorized'           => Authentication::is_authorized(),
			'isSiteUrlValid'         => Admin_Helper::is_site_url_valid(),
			'hasConsolePermission'   => Permissions::has_console(),
			'hasAnalyticsPermission' => Permissions::has_analytics(),
			'hasAdsensePermission'   => Permissions::has_adsense(),
			'activateUrl'            => $activate_url,
			'authUrl'                => Authentication::get_auth_url(),
			'reconnectGoogleUrl'     => wp_nonce_url( admin_url( 'admin.php?reconnect=google' ), 'rank_math_reconnect_google' ),
			'showEmailReports'       => ! Email_Reports::are_fields_hidden(),
			'searchConsole'          => $profile,
			'console_email_reports'  => Helper::get_settings( 'general.console_email_reports' ),
			'analyticsData'          => $analytics,
			'allServices'            => $all_services,
		];
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		if ( isset( $values['console_email_reports'] ) ) {
			$settings                                     = rank_math()->settings->all_raw();
			$settings['general']['console_email_reports'] = $values['console_email_reports'] ? 'on' : 'off';
			Helper::update_all_settings( $settings['general'], null, null );
		}

		// For Search console.
		if ( isset( $values['searchConsole'] ) && ! empty( $values['searchConsole'] ) ) {
			$search_console_data = $values['searchConsole'];
			$value               = [
				'country'             => sanitize_text_field( $search_console_data['country'] ),
				'profile'             => sanitize_text_field( $search_console_data['profile'] ?? '' ),
				'enable_index_status' => sanitize_text_field( $search_console_data['enable_index_status'] ),
			];
			update_option( 'rank_math_google_analytic_profile', $value );
		}

		// For Analytics.
		if ( isset( $values['analyticsData'] ) && ! empty( $values['analyticsData'] ) ) {
			$analytics_data = $values['analyticsData'];
			$analytic_value = [
				'adsense_id'       => sanitize_text_field( $analytics_data['adsense_id'] ),
				'account_id'       => sanitize_text_field( $analytics_data['account_id'] ),
				'property_id'      => sanitize_text_field( $analytics_data['property_id'] ),
				'view_id'          => sanitize_text_field( $analytics_data['view_id'] ),
				'measurement_id'   => sanitize_text_field( $analytics_data['measurement_id'] ),
				'stream_name'      => sanitize_text_field( $analytics_data['stream_name'] ),
				'country'          => sanitize_text_field( $analytics_data['country'] ),
				'install_code'     => sanitize_text_field( $analytics_data['install_code'] ),
				'anonymize_ip'     => sanitize_text_field( $analytics_data['anonymize_ip'] ),
				'local_ga_js'      => sanitize_text_field( $analytics_data['local_ga_js'] ),
				'exclude_loggedin' => sanitize_text_field( $analytics_data['exclude_loggedin'] ),
			];
			update_option( 'rank_math_google_analytic_options', $analytic_value );
		}

		$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
		if ( 'rank-math-wizard' === $page ) {
			new Objects();
			new Console();
			new Inspections();
		}

		return true;
	}
}
PK     ”ŠU]ˆ9;,³  ³  )  includes/admin/wizard/class-your-site.phpnu „[µü¤        <?php
/**
 * The Your Site wizard step
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Wizard
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Wizard;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Step class.
 */
class Your_Site implements Wizard_Step {
	/**
	 * Get Localized data to be used in the Compatibility step.
	 *
	 * @return array
	 */
	public static function get_localized_data() {
		$displayname = self::get_site_display_name();
		$data        = [
			'site_type'              => self::get_default_site_type(),
			'businessTypesChoices'   => Helper::choices_business_types(),
			'business_type'          => Helper::get_settings( 'titles.local_business_type' ),
			'website_name'           => Helper::get_settings( 'titles.website_name', $displayname ),
			'website_alternate_name' => Helper::get_settings( 'titles.website_alternate_name', '' ),
			'company_name'           => Helper::get_settings( 'titles.knowledgegraph_name', $displayname ),
			'open_graph_image'       => Helper::get_settings( 'titles.open_graph_image' ),
		];

		$company_logo = self::get_default_logo();
		if ( $company_logo ) {
			$data['company_logo']    = $company_logo;
			$data['company_logo_id'] = attachment_url_to_postid( $company_logo );
		}

		$open_graph_image = Helper::get_settings( 'titles.open_graph_image' );
		if ( $open_graph_image ) {
			$data['open_graph_image']    = $open_graph_image;
			$data['open_graph_image_id'] = attachment_url_to_postid( $open_graph_image );
		}

		return $data;
	}

	/**
	 * Save handler for step.
	 *
	 * @param array $values Values to save.
	 *
	 * @return bool
	 */
	public static function save( $values ) {
		$settings = wp_parse_args(
			rank_math()->settings->all_raw(),
			[
				'titles'  => '',
				'sitemap' => '',
			]
		);
		$values   = wp_parse_args(
			$values,
			[
				'company_name'        => '',
				'company_logo'        => '',
				'company_logo_id'     => '',
				'open_graph_image'    => '',
				'open_graph_image_id' => '',
			]
		);

		// Save these settings.
		$functions = [ 'save_local_seo', 'save_open_graph', 'save_post_types', 'save_taxonomies' ];
		foreach ( $functions as $function ) {
			$settings = self::$function( $settings, $values );
		}

		$business_type = [ 'news', 'business', 'webshop', 'otherbusiness' ];
		$modules       = [ 'local-seo' => in_array( $values['site_type'], $business_type, true ) ? 'on' : 'off' ];
		$users         = get_users( [ 'role__in' => [ 'administrator', 'editor', 'author', 'contributor' ] ] );

		if ( count( $users ) > 1 && ! is_plugin_active( 'members/members.php' ) ) {
			$modules['role-manager'] = 'on';
		}

		set_transient( '_rank_math_site_type', sanitize_text_field( $values['site_type'] ) );
		Helper::update_modules( $modules );
		Helper::update_all_settings( null, $settings['titles'], null );

		return true;
	}

	/**
	 * Save Local Seo
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_local_seo( $settings, $values ) {
		switch ( $values['site_type'] ) {
			case 'blog':
			case 'portfolio':
				$settings['titles']['knowledgegraph_type']    = 'person';
				$settings['titles']['knowledgegraph_name']    = sanitize_text_field( $values['company_name'] );
				$settings['titles']['knowledgegraph_logo']    = sanitize_url( $values['company_logo'] );
				$settings['titles']['knowledgegraph_logo_id'] = absint( $values['company_logo_id'] );
				break;

			case 'news':
			case 'webshop':
			case 'business':
			case 'otherbusiness':
				$settings['titles']['knowledgegraph_type']    = 'company';
				$settings['titles']['knowledgegraph_name']    = sanitize_text_field( $values['company_name'] );
				$settings['titles']['knowledgegraph_logo']    = sanitize_url( $values['company_logo'] );
				$settings['titles']['local_business_type']    = sanitize_text_field( $values['business_type'] );
				$settings['titles']['knowledgegraph_logo_id'] = absint( $values['company_logo_id'] );
				break;

			case 'otherpersonal':
				$settings['titles']['knowledgegraph_type'] = 'person';
				$settings['titles']['knowledgegraph_name'] = sanitize_text_field( $values['company_name'] );
				break;
		}

		foreach ( [ 'website_name', 'website_alternate_name' ] as $key ) {
			if ( empty( $values[ $key ] ) ) {
				continue;
			}

			$settings['titles'][ $key ] = sanitize_text_field( $values[ $key ] );
		}

		return $settings;
	}

	/**
	 * Save Open Graph
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_open_graph( $settings, $values ) {
		if ( ! empty( $values['open_graph_image_id'] ) ) {
			$settings['titles']['open_graph_image']    = sanitize_url( $values['open_graph_image'] );
			$settings['titles']['open_graph_image_id'] = absint( $values['open_graph_image_id'] );
		}

		if ( empty( $values['company_logo_id'] ) ) {
			unset( $settings['titles']['knowledgegraph_logo'] );
			unset( $settings['titles']['knowledgegraph_logo_id'] );
		}

		return $settings;
	}

	/**
	 * Save Post Types
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_post_types( $settings, $values ) {
		foreach ( Helper::get_accessible_post_types() as $post_type => $label ) {
			if ( 'attachment' === $post_type ) {
				continue;
			}

			$settings['titles'][ "pt_{$post_type}_add_meta_box" ] = 'on';
		}

		return $settings;
	}

	/**
	 * Save Taxonomies
	 *
	 * @param array $settings Array of all settings.
	 * @param array $values   Array of posted values.
	 *
	 * @return array
	 */
	private static function save_taxonomies( $settings, $values ) {
		$taxonomies = Admin_Helper::get_taxonomies_options();
		array_shift( $taxonomies );
		foreach ( $taxonomies as $taxonomy => $label ) {
			$settings['titles'][ "tax_{$taxonomy}_add_meta_box" ] = 'on';
		}

		return $settings;
	}

	/**
	 * Get site display name.
	 *
	 * @return string
	 */
	protected static function get_site_display_name() {
		$siteurl  = get_bloginfo( 'url' );
		$sitename = get_bloginfo( 'title' );

		return $sitename ? $sitename : $siteurl;
	}

	/**
	 * Get default logo.
	 *
	 * @return string
	 */
	private static function get_default_logo() {
		if ( defined( 'MTS_THEME_NAME' ) && MTS_THEME_NAME ) {
			$theme_options = get_option( MTS_THEME_NAME );
			if ( isset( $theme_options['mts_logo'] ) ) {
				return wp_get_attachment_url( $theme_options['mts_logo'] );
			}
		}

		if ( current_theme_supports( 'custom-logo' ) && ! empty( get_theme_mod( 'custom_logo' ) ) ) {
			return wp_get_attachment_url( get_theme_mod( 'custom_logo' ) );
		}

		return Helper::get_settings( 'titles.knowledgegraph_logo' );
	}

	/**
	 * Get default site type.
	 *
	 * @return string
	 */
	private static function get_default_site_type() {
		$default_type = get_transient( '_rank_math_site_type' );
		return $default_type ? $default_type : ( class_exists( 'Easy_Digital_Downloads' ) || class_exists( 'WooCommerce' ) ? 'webshop' : 'blog' );
	}

	/**
	 * Get type dependency.
	 *
	 * @return array
	 */
	private function get_type_dependency() {
		return [
			[ 'site_type', 'news' ],
			[ 'site_type', 'business' ],
			[ 'site_type', 'webshop' ],
			[ 'site_type', 'otherbusiness' ],
		];
	}

	/**
	 * Get type choices.
	 *
	 * @return array
	 */
	private function get_type_choices() {
		return [
			'blog'          => esc_html__( 'Personal Blog', 'seo-by-rank-math' ),
			'news'          => esc_html__( 'Community Blog/News Site', 'seo-by-rank-math' ),
			'portfolio'     => esc_html__( 'Personal Portfolio', 'seo-by-rank-math' ),
			'business'      => esc_html__( 'Small Business Site', 'seo-by-rank-math' ),
			'webshop'       => esc_html__( 'Webshop', 'seo-by-rank-math' ),
			'otherpersonal' => esc_html__( 'Other Personal Website', 'seo-by-rank-math' ),
			'otherbusiness' => esc_html__( 'Other Business Website', 'seo-by-rank-math' ),
		];
	}
}
PK     ”ŠU]^z;æ¹  ¹  %  includes/admin/class-bulk-actions.phpnu „[µü¤        <?php
/**
 * The admin post columns functionality.
 *
 * @since      1.0.212
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Helpers\Url;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Post_Columns class.
 */
class Bulk_Actions implements Runner {

	use Hooker;

	/**
	 * SEO data.
	 *
	 * @var array
	 */
	private $data = [];

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'current_screen', 'init' );
	}

	/**
	 * Initialize.
	 */
	public function init() {
		if ( ! Helper::has_cap( 'onpage_general' ) || ! $this->can_add() ) {
			return;
		}

		$this->register_post_columns();
		$this->action( 'admin_enqueue_scripts', 'enqueue' );
	}

	/**
	 * Register post column hooks.
	 */
	private function register_post_columns() {
		$post_types = Helper::get_allowed_post_types();
		foreach ( $post_types as $post_type ) {
			$this->filter( "bulk_actions-edit-{$post_type}", 'post_bulk_actions' );
			$this->filter( "handle_bulk_actions-edit-{$post_type}", 'handle_bulk_actions', 10, 3 );
		}

		$taxonomies = Helper::get_accessible_taxonomies();
		unset( $taxonomies['post_format'] );
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
		foreach ( $taxonomies as $taxonomy => $label ) {
			$this->filter( "bulk_actions-edit-{$taxonomy}", 'post_bulk_actions' );
		}
	}

	/**
	 * Add bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  array $actions Actions.
	 * @return array             New actions.
	 */
	public function post_bulk_actions( $actions ) {
		$new_actions = [ 'rank_math_options' => __( '&#8595; Rank Math', 'seo-by-rank-math' ) ];

		if ( Helper::has_cap( 'onpage_advanced' ) ) {
			$new_actions['rank_math_bulk_robots_noindex']   = __( 'Set to noindex', 'seo-by-rank-math' );
			$new_actions['rank_math_bulk_robots_index']     = __( 'Set to index', 'seo-by-rank-math' );
			$new_actions['rank_math_bulk_robots_nofollow']  = __( 'Set to nofollow', 'seo-by-rank-math' );
			$new_actions['rank_math_bulk_robots_follow']    = __( 'Set to follow', 'seo-by-rank-math' );
			$new_actions['rank_math_bulk_remove_canonical'] = __( 'Remove custom canonical URL', 'seo-by-rank-math' );

			if ( Helper::is_module_active( 'redirections' ) && Helper::has_cap( 'redirections' ) ) {
				$new_actions['rank_math_bulk_redirect']      = __( 'Redirect', 'seo-by-rank-math' );
				$new_actions['rank_math_bulk_stop_redirect'] = __( 'Remove redirection', 'seo-by-rank-math' );
			}
		}

		if ( Helper::is_module_active( 'rich-snippet' ) && Helper::has_cap( 'onpage_snippet' ) ) {
			$new_actions['rank_math_bulk_schema_none'] = __( 'Set Schema: None', 'seo-by-rank-math' );
			$post_type                                 = Param::get( 'post_type', get_post_type() );
			$post_type_default                         = Helper::get_settings( 'titles.pt_' . $post_type . '_default_rich_snippet' );

			if ( ( class_exists( 'WooCommerce' ) && 'product' === $post_type ) || ( class_exists( 'Easy_Digital_Downloads' ) && 'download' === $post_type ) ) {
				$post_type_default = 'download' === $post_type ? esc_html__( 'EDD Product', 'seo-by-rank-math' ) : esc_html__( 'WC Product', 'seo-by-rank-math' );
			}

			if ( $post_type_default ) {
				// Translators: placeholder is the default Schema type setting.
				$new_actions['rank_math_bulk_schema_default'] = sprintf( __( 'Set Schema: Default (%s)', 'seo-by-rank-math' ), $post_type_default );
			}
		}

		if ( Helper::has_cap( 'onpage_general' ) && Helper::should_determine_search_intent() ) {
			$new_actions['rank_math_bulk_determine_search_intent'] = __( 'Determine Search Intent', 'seo-by-rank-math' );
		}

		if ( is_array( $actions ) && count( $new_actions ) > 1 ) {
			return array_merge( $actions, $new_actions );
		}

		return $actions;
	}

	/**
	 * Handle bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  string $redirect   Redirect URL.
	 * @param  string $doaction   Performed action.
	 * @param  array  $object_ids Post IDs.
	 *
	 * @return string New redirect URL.
	 */
	public function handle_bulk_actions( $redirect, $doaction, $object_ids ) {
		if (
			$doaction === 'rank_math_bulk_determine_search_intent' &&
			(
				defined( 'RANK_MATH_PRO_VERSION' ) &&
				version_compare( RANK_MATH_PRO_VERSION, '3.0.83-beta', '<' )
			)
		) {
			Helper::add_notification(
				esc_html__( 'Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.', 'seo-by-rank-math' ),
				[
					'type'    => 'error',
					'id'      => 'rank_math_search_intent_error',
					'classes' => 'rank-math-notice',
				]
			);
		}

		return $redirect;
	}

	/**
	 * Enqueue styles and scripts.
	 */
	public function enqueue() {
		$screen = get_current_screen();
		wp_enqueue_style( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/css/post-list.css', [ 'wp-components' ], rank_math()->version );

		if ( Admin_Helper::is_term_listing() ) {
			$allow_editing = Helper::get_settings( 'titles.tax_' . $screen->taxonomy . '_bulk_editing', false );
		} else {
			$allow_editing = Helper::get_settings( 'titles.pt_' . $screen->post_type . '_bulk_editing', true );
		}

		if ( ! $allow_editing || 'readonly' === $allow_editing ) {
			return;
		}

		wp_enqueue_script( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/js/post-list.js', [ 'lodash', 'wp-element', 'wp-components' ], rank_math()->version, true );
		Helper::add_json(
			'contentAI',
			[
				'isUserRegistered' => Helper::is_site_connected(),
				'credits'          => Helper::get_content_ai_credits(),
				'plan'             => Helper::get_content_ai_plan(),
			]
		);
		Helper::add_json( 'isProActive', defined( 'RANK_MATH_PRO_FILE' ) );
		Helper::add_json( 'connectSiteUrl', Admin_Helper::get_activate_url( Url::get_current_url() ) );
	}

	/**
	 * Whether to add Bulk actions on the page.
	 */
	private function can_add() {
		global $pagenow;
		if ( 'edit-tags.php' === $pagenow ) {
			return Helper::get_settings( 'titles.tax_' . Param::get( 'taxonomy' ) . '_add_meta_box' );
		}

		if ( Admin_Helper::is_post_list() || Admin_Helper::is_media_library() ) {
			$screen = get_current_screen();

			$allowed_post_types   = Helper::get_allowed_post_types();
			$allowed_post_types[] = 'attachment';

			return in_array( $screen->post_type, $allowed_post_types, true );
		}

		return false;
	}
}
PK     ”ŠU]ñ¶Ý+¡  ¡  +  includes/admin/class-lock-modified-date.phpnu „[µü¤        <?php
/**
 * The admin-specific functionality of the plugin.
 *
 * @since      1.0.223
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Editor;
use RankMath\Helpers\Param;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Lock_Modified_Date class.
 *
 * @codeCoverageIgnore
 */
class Lock_Modified_Date {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function __construct() {
		$this->action( 'rest_api_init', 'init_rest_api' );
		$this->action( 'wp_insert_post_data', 'update_modified_date', 999, 3 );
	}

	/**
	 * Add REST filter to modify the post object.
	 */
	public function init_rest_api() {
		$post_types = Helper::get_allowed_post_types();
		foreach ( $post_types as $post_type ) {
			$this->filter( "rest_pre_insert_{$post_type}", 'update_last_modified_parameter', 99, 2 );
		}
	}

	/**
	 * Add last_modified parameter to a post when a post is updated from Block Editor.
	 *
	 * @param WP_POST         $prepared_post Post object.
	 * @param WP_REST_Request $request       Request object.
	 */
	public function update_last_modified_parameter( $prepared_post, $request ) {
		$params = $request->get_params();
		if ( isset( $params['meta']['rank_math_lock_modified_date'] ) ) {
			$prepared_post->lock_modified_date = ! empty( $params['meta']['rank_math_lock_modified_date'] );
		}

		return $prepared_post;
	}

	/**
	 * Lock Modified date by overwriting the old value.
	 *
	 * @param array $data    An array of slashed, sanitized, and processed post data.
	 * @param array $postarr An array of sanitized (and slashed) but otherwise unmodified post data.
	 */
	public function update_modified_date( $data, $postarr ) {
		$post_id = ! empty( $postarr['ID'] ) ? $postarr['ID'] : 0;
		if (
			! $post_id ||
			! isset( $postarr['post_modified'], $postarr['post_modified_gmt'] ) ||
			! $this->lock_modified_date( $postarr, $post_id )
		) {
			return $data;
		}

		$data['post_modified']     = $postarr['post_modified'];
		$data['post_modified_gmt'] = $postarr['post_modified_gmt'];

		return $data;
	}

	/**
	 * Whether to lock modified date.
	 *
	 * @param array $data    An array of sanitized (and slashed) but otherwise unmodified post data.
	 * @param int   $post_id Post ID.
	 */
	private function lock_modified_date( $data, $post_id ) {
		if ( ! Editor::can_add_lock_modified_date() ) {
			return false;
		}

		if ( Param::request( 'action' ) === 'et_fb_ajax_save' ) {
			if (
				empty( $_REQUEST['et_fb_save_nonce'] ) ||
				! wp_verify_nonce( Param::request( 'et_fb_save_nonce' ), 'et_fb_save_nonce' )
			) {
				return false;
			}

			$options = ! empty( $_REQUEST['options'] ) ? $_REQUEST['options'] : []; //phpcs:ignore
			return ! empty( $options['conditional_tags'] ) && ! empty( $options['conditional_tags']['lock_modified_date'] );
		}

		if ( Param::request( 'action' ) === 'elementor_ajax' ) {
			return wp_verify_nonce( Param::request( '_nonce' ), 'elementor_ajax' ) && ! empty( $_REQUEST['lock_modified_date'] );
		}

		return isset( $data['lock_modified_date'] ) ? $data['lock_modified_date'] : Helper::get_post_meta( 'lock_modified_date', $post_id );
	}
}
PK     ”ŠU]gAbíã  ã  3  includes/admin/notifications/class-notification.phpnu „[µü¤        <?php
/**
 * The Notification
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Notifications;

use RankMath\Helpers\Str;
use RankMath\Helpers\HTML;

/**
 * Notification class.
 */
class Notification {

	/**
	 * Notification type.
	 *
	 * @var string
	 */
	const ERROR = 'error';

	/**
	 * Notification type.
	 *
	 * @var string
	 */
	const SUCCESS = 'success';

	/**
	 * Notification type.
	 *
	 * @var string
	 */
	const INFO = 'info';

	/**
	 * Notification type.
	 *
	 * @var string
	 */
	const WARNING = 'warning';

	/**
	 * Screen check.
	 *
	 * @var string
	 */
	const SCREEN_ANY = 'any';

	/**
	 * User capability check.
	 *
	 * @var string
	 */
	const CAPABILITY_ANY = '';

	/**
	 * The notification message.
	 *
	 * @var string
	 */
	public $message = '';

	/**
	 * Contains optional arguments:
	 *
	 * -             type: The notification type, i.e. 'updated' or 'error'
	 * -               id: The ID of the notification
	 * -    dismissal_key: Option name to save dismissal information in, ID will be used if not supplied.
	 * -           screen: Only display on plugin page or on every page.
	 *
	 * @var array Options of this Notification.
	 */
	public $options = [];

	/**
	 * Internal flag for whether notifications has been displayed.
	 *
	 * @var bool
	 */
	private $displayed = false;

	/**
	 * Notification class constructor.
	 *
	 * @param string $message Message string.
	 * @param array  $options Set of options.
	 */
	public function __construct( $message, $options = [] ) {
		$this->message = $message;
		$this->options = wp_parse_args(
			$options,
			[
				'id'         => '',
				'classes'    => '',
				'type'       => self::SUCCESS,
				'screen'     => self::SCREEN_ANY,
				'capability' => self::CAPABILITY_ANY,
			]
		);
	}

	/**
	 * Adds string (view) behaviour to the Notification.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return string
	 */
	public function __toString() {
		return $this->render();
	}

	/**
	 * Return data from options.
	 *
	 * @param  string $id Data to get.
	 * @return mixed
	 */
	public function args( $id ) {
		return $this->options[ $id ];
	}

	/**
	 * Is this Notification persistent.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return bool True if persistent, False if fire and forget.
	 */
	public function is_persistent() {
		return ! empty( $this->args( 'id' ) );
	}

	/**
	 * Is this notification displayed.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return bool
	 */
	public function is_displayed() {
		return $this->displayed;
	}

	/**
	 * Can display on current screen.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return bool
	 */
	public function can_display() {
		// Removed.
		if ( $this->displayed ) {
			return false;
		}

		$screen = get_current_screen();
		if ( self::SCREEN_ANY === $this->args( 'screen' ) || Str::contains( $this->args( 'screen' ), $screen->id ) ) {
			$this->displayed = true;
		}

		if ( self::CAPABILITY_ANY !== $this->args( 'capability' ) && ! current_user_can( $this->args( 'capability' ) ) ) {
			$this->displayed = false;
		}

		return $this->displayed;
	}

	/**
	 * Dismiss persistent notification.
	 *
	 * @codeCoverageIgnore
	 */
	public function dismiss() {
		$this->displayed     = true;
		$this->options['id'] = '';
	}

	/**
	 * Return the object properties as an array.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array
	 */
	public function to_array() {
		return [
			'message' => $this->message,
			'options' => $this->options,
		];
	}

	/**
	 * Renders the notification as a string.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return string The rendered notification.
	 */
	public function render() {
		$attributes = [];

		// Default notification classes.
		$classes = [
			'notice',
			'notice-' . $this->args( 'type' ),
			$this->args( 'classes' ),
		];

		// Maintain WordPress visualisation of alerts when they are not persistent.
		if ( $this->is_persistent() ) {
			$classes[]                   = 'is-dismissible';
			$classes[]                   = 'wp-helpers-notice';
			$attributes['id']            = $this->args( 'id' );
			$attributes['data-security'] = wp_create_nonce( $this->args( 'id' ) );
		}

		if ( ! empty( $classes ) ) {
			$attributes['class'] = implode( ' ', array_filter( $classes ) );
		}

		// Build the output DIV.
		$output = '<div' . HTML::attributes_to_string( $attributes ) . '>' . wpautop( $this->message ) . '</div>' . PHP_EOL;

		/**
		 * Filter: 'wp_helpers_notifications_render' - Allows developer to filter notifications before the output is finalized.
		 *
		 * @param string $output  HTML output.
		 * @param string $message Notice message.
		 * @param array  $options Notice args.
		 */
		$output = apply_filters( 'wp_helpers_notifications_render', $output, $this->message, $this->options );

		return $output;
	}
}
PK     ”ŠU]�‡˜�j   j   :  includes/admin/notifications/class-notification-center.phpnu „[µü¤        <?php
/**
 * The Notification center handles notifications storage and display.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Notifications;

/**
 * Notification_Center class.
 */
class Notification_Center {

	/**
	 * Option name to store notifications in.
	 *
	 * @var string
	 */
	private $storage_key = '';

	/**
	 * Notifications.
	 *
	 * @var array
	 */
	private $notifications = [];

	/**
	 * Stores whether we need to clear storage or not.
	 *
	 * @var array
	 */
	private $should_clear_storage = true;

	/**
	 * Stores already displayed notice texts to avoid duplication.
	 *
	 * @var array
	 */
	private $displayed_notifications = [];

	/**
	 * Internal flag for whether notifications have been retrieved from storage.
	 *
	 * @var bool
	 */
	private $retrieved = false;

	/**
	 * Construct
	 *
	 * @param string $storage_key Option name to store notification in.
	 */
	public function __construct( $storage_key = 'rank_math_notifications' ) {
		$this->storage_key = $storage_key;
		add_action( 'plugins_loaded', [ $this, 'get_from_storage' ], 5 );
		add_action( 'all_admin_notices', [ $this, 'display' ] );
		add_action( 'shutdown', [ $this, 'update_storage' ] );
		add_action( 'admin_footer', [ $this, 'print_javascript' ] );

		add_action( 'wp_ajax_wp_helpers_notice_dismissible', [ $this, 'notice_dismissible' ] );
	}

	/**
	 * Retrieve the notifications from storage
	 *
	 * @codeCoverageIgnore
	 *
	 * @return void
	 */
	public function get_from_storage() {
		if ( $this->retrieved ) {
			return;
		}

		$this->retrieved = true;
		$notifications   = get_option( $this->storage_key );

		// Check if notifications are stored.
		if ( empty( $notifications ) ) {
			$this->should_clear_storage = false;
			return;
		}

		if ( is_array( $notifications ) ) {
			foreach ( $notifications as $notification ) {
				$this->notifications[] = new Notification(
					$notification['message'],
					$notification['options']
				);
			}
		}
	}

	/**
	 * Display the notifications.
	 *
	 * @codeCoverageIgnore
	 */
	public function display() {

		// Never display notifications for network admin.
		if ( $this->is_network_admin() ) {
			return;
		}

		$notifications = $this->get_sorted_notifications();
		if ( empty( $notifications ) ) {
			return;
		}

		foreach ( $notifications as $notification ) {
			if ( $notification->can_display() && ! in_array( (string) $notification, $this->displayed_notifications, true ) ) {
				echo wp_kses_post( $notification );
				$this->displayed_notifications[] = (string) $notification;
			}
		}
	}

	/**
	 * Print JS for dismissile.
	 *
	 * @codeCoverageIgnore
	 */
	public function print_javascript() {
		?>
		<script>
			;(function($) {
				$( '.wp-helpers-notice.is-dismissible' ).on( 'click', '.notice-dismiss', function() {
					var notice = $( this ).parent()

					$.ajax({
						url: ajaxurl,
						type: 'POST',
						dataType: 'json',
						data: {
							action: 'wp_helpers_notice_dismissible',
							security: notice.data( 'security' ),
							notificationId: notice.attr( 'id' )
						}
					});
				});
			})(jQuery);
		</script>
		<?php
	}

	/**
	 * Save persistent or transactional notifications to storage.
	 *
	 * We need to be able to retrieve these so they can be dismissed at any time during the execution.
	 *
	 * @codeCoverageIgnore
	 */
	public function update_storage() {
		$notifications = $this->get_notifications();
		$notifications = array_filter( $notifications, [ $this, 'remove_notification' ] );

		/**
		 * Filter: 'wp_helpers_notifications_before_storage' - Allows developer to filter notifications before saving them.
		 *
		 * @param Notification[] $notifications
		 */
		$notifications = apply_filters( 'wp_helpers_notifications_before_storage', $notifications );

		// No notifications to store, clear storage.
		if ( empty( $notifications ) && $this->should_clear_storage ) {
			delete_option( $this->storage_key );
			return;
		}

		$notifications = array_map( [ $this, 'notification_to_array' ], $notifications );

		// Save the notifications to the storage.
		update_option( $this->storage_key, $notifications );
	}

	/**
	 * Dismiss persistent notice.
	 *
	 * @codeCoverageIgnore
	 */
	public function notice_dismissible() {
		$notification_id = filter_input( INPUT_POST, 'notificationId' );
		check_ajax_referer( $notification_id, 'security' );

		$notification = $this->remove_by_id( $notification_id );

		/**
		 * Filter: 'wp_helpers_notification_dismissed' - Allows developer to perform action after dismissed.
		 *
		 * @param string  $notification_id
		 * @param Notification $notifications
		 */
		do_action( 'wp_helpers_notification_dismissed', $notification_id, $notification );
	}

	/**
	 * Add notification
	 *
	 * @param string $message Message string.
	 * @param array  $options Set of options.
	 */
	public function add( $message, $options = [] ) {
		if ( isset( $options['id'] ) && ! is_null( $this->get_notification_by_id( $options['id'] ) ) ) {
			return;
		}

		$this->notifications[] = new Notification(
			$message,
			$options
		);
	}

	/**
	 * Provide a way to verify present notifications
	 *
	 * @return array|Notification[] Registered notifications.
	 */
	public function get_notifications() {
		return $this->notifications;
	}

	/**
	 * Get the notification by ID
	 *
	 * @param  string $notification_id The ID of the notification to search for.
	 * @return null|Notification
	 */
	public function get_notification_by_id( $notification_id ) {
		foreach ( $this->notifications as $notification ) {
			if ( $notification_id === $notification->args( 'id' ) ) {
				return $notification;
			}
		}
		return null;
	}

	/**
	 * Remove the notification by ID
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $notification_id The ID of the notification to search for.
	 * @return Notification Instance of delete notification.
	 */
	public function remove_by_id( $notification_id ) {
		$notification = $this->get_notification_by_id( $notification_id );
		if ( ! is_null( $notification ) ) {
			$notification->dismiss();
		}

		return $notification;
	}

	/**
	 * Remove notification after it has been displayed.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param Notification $notification Notification to remove.
	 */
	public function remove_notification( Notification $notification ) {
		if ( ! $notification->is_displayed() ) {
			return true;
		}

		if ( $notification->is_persistent() ) {
			return true;
		}

		return false;
	}

	/**
	 * Return the notifications sorted on type and priority
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array|Notification[] Sorted Notifications
	 */
	private function get_sorted_notifications() {
		$notifications = $this->get_notifications();
		if ( empty( $notifications ) ) {
			return [];
		}

		// Sort by severity, error first.
		usort( $notifications, [ $this, 'sort_notifications' ] );

		return $notifications;
	}

	/**
	 * Sort on type then priority
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  Notification $first  Compare with B.
	 * @param  Notification $second Compare with A.
	 * @return int 1, 0 or -1 for sorting offset.
	 */
	private function sort_notifications( Notification $first, Notification $second ) {

		if ( 'error' === $first->args( 'type' ) ) {
			return -1;
		}

		if ( 'error' === $second->args( 'type' ) ) {
			return 1;
		}

		return 0;
	}

	/**
	 * Convert Notification to array representation
	 *
	 * @codeCoverageIgnore
	 *
	 * @param  Notification $notification Notification to convert.
	 * @return array
	 */
	private function notification_to_array( Notification $notification ) {
		return $notification->to_array();
	}

	/**
	 * Check if is network admin.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return bool
	 */
	private function is_network_admin() {
		return function_exists( 'is_network_admin' ) && is_network_admin();
	}

	/**
	 * Check if a notification with the given ID exists.
	 *
	 * @param string $id Notification ID.
	 * @return boolean
	 */
	public function has_notification( $id ) {
		$notifications = $this->get_notifications();
		foreach ( $notifications as $notification ) {
			if ( isset( $notification->options['id'] ) && $notification->options['id'] === $id ) {
				return true;
			}
		}
		return false;
	}
}
PK     ”ŠU]‹•ƒw¨
  ¨
  &  includes/admin/class-import-export.phpnu „[µü¤        <?php
/**
 * The Import Export Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_REST_Response;
use RankMath\Helper;
use RankMath\Runner;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;
use RankMath\Status\Backup;
use RankMath\Admin\Importers\Detector;

defined( 'ABSPATH' ) || exit;

/**
 * Import_Export class.
 */
class Import_Export implements Runner {

	use Hooker;
	use Ajax;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->ajax( 'clean_plugin', 'clean_plugin' );
		$this->ajax( 'import_plugin', 'import_plugin' );
	}

	/**
	 * Get localized JSON data to be used on the Import & Export tab of the Status & Tools page.
	 */
	public static function get_json_data() {
		$detector           = new Detector();
		$importable_plugins = $detector->detect();

		return [
			'backups'           => Backup::get_backups(),
			'importablePlugins' => $importable_plugins,
		];
	}

	/**
	 * Handles AJAX run plugin clean.
	 */
	public function clean_plugin() {
		$this->verify_nonce( 'rank-math-ajax-nonce' );
		$this->has_cap_ajax( 'general' );

		$result = Detector::run_by_slug( Param::post( 'pluginSlug' ), 'cleanup' );

		if ( $result['status'] ) {
			/* translators: Plugin name */
			$this->success( sprintf( esc_html__( 'Cleanup of %s data successfully done.', 'seo-by-rank-math' ), $result['importer']->get_plugin_name() ) );
		}

		/* translators: Plugin name */
		$this->error( sprintf( esc_html__( 'Cleanup of %s data failed.', 'seo-by-rank-math' ), $result['importer']->get_plugin_name() ) );
	}

	/**
	 * Handles AJAX run plugin import.
	 */
	public function import_plugin() {
		$this->verify_nonce( 'rank-math-ajax-nonce' );
		$this->has_cap_ajax( 'general' );

		$perform = Param::post( 'perform', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		if ( ! $this->is_action_allowed( $perform ) ) {
			$this->error( esc_html__( 'Action not allowed.', 'seo-by-rank-math' ) );
		}

		try {
			$result = Detector::run_by_slug( Param::post( 'pluginSlug' ), 'import', $perform );
			$this->success( $result );
		} catch ( \Exception $e ) {
			$this->error( $e->getMessage() );
		}
	}

	/**
	 * Check if given action is in the list of allowed actions.
	 *
	 * @param string $perform Action to check.
	 *
	 * @return bool
	 */
	private function is_action_allowed( $perform ) {
		$allowed = [ 'settings', 'postmeta', 'termmeta', 'usermeta', 'redirections', 'blocks', 'deactivate', 'locations', 'news', 'video', 'recalculate' ];
		return $perform && in_array( $perform, $allowed, true );
	}
}
PK     ”ŠU]q_<lž2  ž2  $  includes/admin/class-cmb2-fields.phpnu „[µü¤        <?php
/**
 * The CMB2 fields for the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Runner;
use RankMath\Helpers\Str;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * CMB2_Fields class.
 *
 * @codeCoverageIgnore
 */
class CMB2_Fields implements Runner {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		if ( ! has_action( 'cmb2_render_switch' ) ) {
			$this->action( 'cmb2_render_switch', 'render_switch', 10, 5 );
		}

		if ( ! has_action( 'cmb2_render_notice' ) ) {
			$this->action( 'cmb2_render_notice', 'render_notice' );
		}

		if ( ! has_action( 'cmb2_render_address' ) ) {
			$this->action( 'cmb2_render_address', 'render_address', 10, 5 );
		}

		if ( ! has_action( 'cmb2_render_advanced_robots' ) ) {
			$this->action( 'cmb2_render_advanced_robots', 'render_advanced_robots', 10, 5 );
		}

		if ( ! has_action( 'cmb2_render_toggle' ) ) {
			$this->action( 'cmb2_render_toggle', 'render_toggle', 10, 5 );
		}

		$this->filter( 'cmb2_sanitize_toggle', 'sanitize_toggle', 10, 2 );
		$this->filter( 'cmb2_field_arguments_raw', 'default_value', 10, 2 );
	}

	/**
	 * Set a default value in default_cb to prevent the callback function from executing on the site.
	 *
	 * @see https://github.com/CMB2/CMB2/issues/750
	 *
	 * @param array  $args The field arguments.
	 * @param object $cmb2 The CMB2 object.
	 */
	public function default_value( $args, $cmb2 ) {
		if (
			! Str::starts_with( 'rank-math', trim( $cmb2->cmb_id ) ) ||
			! isset( $args['default'] ) ||
			! is_callable( $args['default'] )
		) {
			return $args;
		}

		$args['default_cb'] = function () use ( $args ) {
			return $args['default'];
		};

		$args['default'] = null;

		return $args;
	}

	/**
	 * Sanitize toggle field.
	 *
	 * @param string $override_value Sanitization override value to return.
	 * @param string $value          The field value.
	 */
	public function sanitize_toggle( $override_value, $value ) {
		return is_null( $value ) ? 'off' : $value;
	}

	/**
	 * Render toggle field.
	 *
	 * @param array  $field             The passed in `CMB2_Field` object.
	 * @param mixed  $escaped_value     The value of this field escaped
	 *                                  It defaults to `sanitize_text_field`.
	 *                                  If you need the unescaped value, you can access it
	 *                                  via `$field->value()`.
	 * @param int    $object_id         The ID of the current object.
	 * @param string $object_type       The type of object you are working with.
	 *                                  Most commonly, `post` (this applies to all post-types),
	 *                                  but could also be `comment`, `user` or `options-page`.
	 * @param object $field_type_object This `CMB2_Types` object.
	 */
	public function render_toggle( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
		$field_name    = $field->_name();
		$active_value  = ! empty( $field->args( 'active_value' ) ) ? $field->args( 'active_value' ) : 'on';
		$escaped_value = ! empty( $field->args( 'force_enable' ) ) ? 'on' : $escaped_value;

		$args = [
			'type'     => 'checkbox',
			'id'       => $field_name,
			'name'     => $field_name,
			'desc'     => '',
			'value'    => $active_value,
			'disabled' => isset( $field->args['disabled'] ) ? $field->args['disabled'] : false,
		];

		if ( $escaped_value === $active_value ) {
			$args['checked'] = 'checked';
		}

		echo '<label class="cmb2-toggle">';
		echo $field_type_object->input( $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
		echo '<span class="cmb2-slider">';
		echo '<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>';
		echo '<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>';
		echo '</span>';
		echo '</label>';
		$field_type_object->_desc( true, true );
	}

	/**
	 * Render switch field.
	 *
	 * @param array  $field             The passed in `CMB2_Field` object.
	 * @param mixed  $escaped_value     The value of this field escaped
	 *                                  It defaults to `sanitize_text_field`.
	 *                                  If you need the unescaped value, you can access it
	 *                                  via `$field->value()`.
	 * @param int    $object_id         The ID of the current object.
	 * @param string $object_type       The type of object you are working with.
	 *                                  Most commonly, `post` (this applies to all post-types),
	 *                                  but could also be `comment`, `user` or `options-page`.
	 * @param object $field_type_object This `CMB2_Types` object.
	 */
	public function render_switch( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {

		if ( empty( $field->args['options'] ) ) {
			$field->args['options'] = [
				'off' => esc_html( $field->get_string( 'off', __( 'Off', 'seo-by-rank-math' ) ) ),
				'on'  => esc_html( $field->get_string( 'on', __( 'On', 'seo-by-rank-math' ) ) ),
			];
		}
		$field->set_options();

		echo $field_type_object->radio_inline(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
	}

	/**
	 * Render notices
	 *
	 * @param object $field The passed in `CMB2_Field` object.
	 */
	public function render_notice( $field ) {
		$hash = [
			'error'   => 'notice notice-alt notice-error error inline rank-math-notice',
			'info'    => 'notice notice-alt notice-info info inline rank-math-notice',
			'warning' => 'notice notice-alt notice-warning warning inline rank-math-notice',
		];

		echo '<div class="' . esc_attr( $hash[ $field->args( 'what' ) ] ) . '"><p>' . $field->args( 'content' ) . '</p></div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
	}

	/**
	 * Render address field.
	 *
	 * @param object $field             The passed in `CMB2_Field` object.
	 * @param mixed  $escaped_value     The value of this field escaped
	 *                                  It defaults to `sanitize_text_field`.
	 *                                  If you need the unescaped value, you can access it
	 *                                  via `$field->value()`.
	 * @param int    $object_id         The ID of the current object.
	 * @param string $object_type       The type of object you are working with.
	 *                                  Most commonly, `post` (this applies to all post-types),
	 *                                  but could also be `comment`, `user` or `options-page`.
	 * @param object $field_type_object This `CMB2_Types` object.
	 */
	public function render_address( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {

		// Make sure we assign each part of the value we need.
		$value = wp_parse_args(
			$escaped_value,
			[
				'streetAddress'   => '',
				'addressLocality' => '',
				'addressRegion'   => '',
				'postalCode'      => '',
				'addressCountry'  => '',
			]
		);

		$strings = [
			'streetAddress'   => 'Street Address',
			'addressLocality' => 'Locality',
			'addressRegion'   => 'Region',
			'postalCode'      => 'Postal Code',
			'addressCountry'  => '2-letter Country Code (ISO 3166-1)',
		];

		foreach ( array_keys( $value ) as $id ) :
			$field_input = $field_type_object->input(
				[
					'name'        => $field_type_object->_name( '[' . $id . ']' ),
					'id'          => $field_type_object->_id( '_' . $id ),
					'value'       => $value[ $id ],
					'placeholder' => esc_html( $field->get_string( $id . '_text', $strings[ $id ] ) ),
				]
			);
			echo '<div class="cmb-address-field">' . $field_input . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
		endforeach;
	}

	/**
	 * Render Advanced Robots fields.
	 *
	 * @param object $field             The passed in `CMB2_Field` object.
	 * @param mixed  $escaped_value     The value of this field escaped
	 *                                  It defaults to `sanitize_text_field`.
	 *                                  If you need the unescaped value, you can access it
	 *                                  via `$field->value()`.
	 * @param int    $object_id         The ID of the current object.
	 * @param string $object_type       The type of object you are working with.
	 *                                  Most commonly, `post` (this applies to all post-types),
	 *                                  but could also be `comment`, `user` or `options-page`.
	 * @param object $field_type_object This `CMB2_Types` object.
	 */
	public function render_advanced_robots( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
		// Make sure we assign each part of the value we need.
		$values = wp_parse_args(
			$escaped_value,
			[
				'max-snippet'       => -1,
				'max-video-preview' => -1,
				'max-image-preview' => 'large',
			]
		);

		$strings = [
			'max-snippet'       => __( 'Snippet', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum text-length, in characters, of a snippet for your page.', 'seo-by-rank-math' ) ),
			'max-video-preview' => __( 'Video Preview', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum duration in seconds of an animated video preview.', 'seo-by-rank-math' ) ),
			'max-image-preview' => __( 'Image Preview', 'seo-by-rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum size of image preview to be shown for images on this page.', 'seo-by-rank-math' ) ),
		];

		echo '<ul class="cmb-advanced-robots-list no-select-all cmb2-list cmb-rank-math-advanced-robots-field">';
		foreach ( $values as $id => $value ) :
			$value = isset( $escaped_value[ $id ] ) ? $escaped_value[ $id ] : $value;

			echo '<li>';
				echo '<label for="' . esc_attr( $field_type_object->_id( '_' . $id . '_name' ) ) . '">';
					echo $this->get_advanced_robots_field( 'checkbox', $field_type_object, $id, $value, $escaped_value ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
				echo wp_kses_post( $field->get_string( $id . '_text', $strings[ $id ] ) ) . '</label>';

			if ( 'max-image-preview' === $id ) {
				echo $this->get_advanced_robots_field( 'select', $field_type_object, $id, $value, $escaped_value ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
			}

			if ( 'max-image-preview' !== $id ) {
				echo $this->get_advanced_robots_field( 'input', $field_type_object, $id, $value, $escaped_value ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- CMB2 handles escaping.
			}

			echo '</li>';
		endforeach;
		echo '</ul>';
	}

	/**
	 * Get the field markup for the advanced robots field.
	 *
	 * @param string $field_type        The type of field.
	 * @param object $field_type_object The CMB2_Types object.
	 * @param string $id                The field id.
	 * @param string $value             The field value.
	 * @param string $escaped_value     The escaped field value.
	 *
	 * @return string The field markup.
	 */
	private function get_advanced_robots_field( $field_type, $field_type_object, $id, $value, $escaped_value ) {
		$props = [
			'name' => $field_type_object->_name( "[{$id}][length]" ),
			'id'   => $field_type_object->_id( '_' . $id . '_name' ),
		];

		switch ( $field_type ) {
			case 'checkbox':
				$props['name']    = $field_type_object->_name( "[{$id}][enable]" );
				$props['value']   = true;
				$props['checked'] = ! empty( $escaped_value[ $id ] ) || empty( $escaped_value ) ? 'checked' : false;
				break;
			case 'select':
				$props['options'] = $this->get_image_sizes( $value );
				break;
			case 'input':
				$props['value'] = $value ? $value : -1;
				$props['type']  = 'number';
				$props['min']   = -1;
				break;
		}

		return $field_type_object->$field_type( $props );
	}

	/**
	 * Get Image sizes.
	 *
	 * @param  string $size    The selected image size.
	 * @return string $options The image sizes.
	 */
	private function get_image_sizes( $size = 'large' ) {
		$values  = [
			'large'    => __( 'Large', 'seo-by-rank-math' ),
			'standard' => __( 'Standard', 'seo-by-rank-math' ),
			'none'     => __( 'None', 'seo-by-rank-math' ),
		];
		$options = '';
		foreach ( $values as $data => $label ) {
			$options .= '<option value="' . $data . '" ' . selected( $size, $data, false ) . ' >' . $label . '</option>';
		}

		return $options;
	}
}
PK     ”ŠU]�÷…¾­  ­  #  includes/admin/class-admin-init.phpnu „[µü¤        <?php
/**
 * The admin bootstrap of the plugin.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Updates;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Admin_Init class.
 *
 * @codeCoverageIgnore
 */
class Admin_Init {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		rank_math()->admin        = new Admin();
		rank_math()->admin_assets = new Assets();

		$this->load_review_reminders();
		$this->load_pro_notice();
		$this->load_setup_wizard();
		$this->load_post_columns_and_filters();

		$this->run(
			[
				rank_math()->admin,
				rank_math()->admin_assets,
				new Admin_Menu(),
				new Option_Center(),
				new Notices(),
				new CMB2_Fields(),
				new Metabox\Metabox(),
				new Import_Export(),
				new Updates(),
				new Watcher(),
			]
		);

		/**
		 * Fires when admin is loaded.
		 */
		$this->do_action( 'admin/loaded' );
	}

	/**
	 * Load out post list and edit screen class.
	 */
	private function load_post_columns_and_filters() {
		$this->run( [ new Bulk_Actions() ] );

		if ( Admin_Helper::is_post_list() || Admin_Helper::is_media_library() || Admin_Helper::is_term_listing() || wp_doing_ajax() ) {
			$this->run(
				[
					new Post_Columns(),
					new Post_Filters(),
				]
			);
		}
	}

	/**
	 * Load review tab in metabox & footer notice.
	 */
	private function load_review_reminders() {
		if ( get_option( 'rank_math_already_reviewed' ) ) {
			return;
		}

		$this->run( [ new Ask_Review() ] );
	}

	/**
	 * Load Pro reminder notice.
	 */
	private function load_pro_notice() {
		if ( ! is_main_site() ) {
			return;
		}

		if ( defined( 'RANK_MATH_PRO_FILE' ) || get_option( 'rank_math_already_upgraded' ) ) {
			return;
		}

		$this->run( [ new Pro_Notice() ] );
	}

	/**
	 * Run all the runners.
	 *
	 * @param array $runners Instances of runner classes.
	 */
	private function run( $runners ) {
		foreach ( $runners as $runner ) {
			$runner->hooks();
		}
	}

	/**
	 * Load setup wizard.
	 */
	private function load_setup_wizard() {
		if ( Helper::is_wizard() ) {
			new Setup_Wizard();
		}
	}
}
PK     ”ŠU]dH«ü&  &  )  includes/admin/class-dashboard-widget.phpnu „[µü¤        <?php
/**
 * The Dashboard Widget of the plugin.
 *
 * @since      1.0.81
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Dashboard_Widget class.
 *
 * @codeCoverageIgnore
 */
class Dashboard_Widget {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
		$this->action( 'rank_math/dashboard/widget', 'dashboard_widget_feed', 98 );
		$this->action( 'rank_math/dashboard/widget', 'dashboard_widget_footer', 99 );
	}

	/**
	 * Register dashboard widget.
	 */
	public function add_dashboard_widgets() {
		// Early Bail if action is not registered for the dashboard widget hook.
		if (
			( ! Helper::is_module_active( '404-monitor' ) || ! Helper::has_cap( '404_monitor' ) ) &&
			( ! Helper::is_module_active( 'redirections' ) || ! Helper::has_cap( 'redirections' ) ) &&
			( ! Helper::is_module_active( 'analytics' ) || ! Helper::has_cap( 'analytics' ) )
		) {
			return;
		}

		$icon = '<span class="rank-math-icon"><svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg></span>';

		wp_add_dashboard_widget(
			'rank_math_dashboard_widget',
			$icon . esc_html__( 'Rank Math Overview', 'seo-by-rank-math' ),
			[ $this, 'render_dashboard_widget' ],
			null,
			null,
			'normal',
			'high'
		);
	}

	/**
	 * Render dashboard widget.
	 */
	public function render_dashboard_widget() {
		echo '<div id="rank-math-dashboard-widget" class="rank-math-loading"></div>';
	}

	/**
	 * Add Feed data in the admin dashboard widget.
	 */
	public function dashboard_widget_feed() {
		$posts = $this->get_feed();
		?>
		<h3 class="rank-math-blog-title"><?php esc_html_e( 'Latest Blog Posts from Rank Math', 'seo-by-rank-math' ); ?></h3>
		<?php if ( empty( $posts ) ) : ?>
			<p><?php esc_html_e( 'Error: the Rank Math blog feed could not be downloaded.', 'seo-by-rank-math' ); ?></p>
			<?php
			return;
		endif;

		echo '<ul class="rank-math-blog-list">';

		$posts = $this->filter_posts( $posts );
		$label = $this->get_item_label( $posts );

		foreach ( $posts as $index => $post ) :
			$link = $this->add_utm_params( $post['link'], $index );
			?>
			<li class="rank-math-blog-post">
				<h4>
					<?php if ( $label ) : ?>
						<span class="rank-math-new-badge"><?php echo esc_html( $label ); ?></span>
					<?php endif; ?>
					<a target="_blank" href="<?php echo esc_url( $link ); ?>">
						<?php echo esc_html( $post['title']['rendered'] ); ?>
					</a>
				</h4>
			</li>
			<?php
			$label = '';
		endforeach;
		echo '</ul>';
	}

	/**
	 * Get label for first post.
	 *
	 * @param array $posts Posts.
	 */
	private function get_item_label( $posts ) {
		$label = '';
		if ( ! empty( $posts[0]['custom_label'] ) ) {
			$label = $posts[0]['custom_label'];
		}

		$is_new = time() - strtotime( $posts[0]['date'] ) < 15 * DAY_IN_SECONDS;
		if ( $is_new && empty( $label ) ) {
			$label = esc_html__( 'NEW', 'seo-by-rank-math' );
		}

		return $label;
	}

	/**
	 * Filter posts by display condition.
	 *
	 * @param array $posts Posts.
	 */
	private function filter_posts( $posts ) {
		$posts = array_filter(
			$posts,
			function ( $post ) {
				if ( isset( $post['condition'] ) && 'is_free' === $post['condition'] && defined( 'RANK_MATH_PRO_FILE' ) ) {
					return false;
				}

				return true;
			}
		);

		return array_slice( $posts, 0, 3 ); // Max 3 posts.
	}

	/**
	 * Add UTM tags to links. Only add if UTM params are not already present.
	 *
	 * @param string $link  Link.
	 * @param int    $index Array index.
	 */
	private function add_utm_params( $link, $index ) {
		// Skip if link has any UTM tags already set.
		if ( preg_match( '/[?&]utm_[a-z_]+=/', $link ) ) {
			return $link;
		}

		$utm_params = [
			'utm_source'   => 'Plugin',
			'utm_medium'   => 'Dashboard%20Widget%20Post%20' . ( $index + 1 ),
			'utm_campaign' => 'WP',
		];

		return add_query_arg( $utm_params, $link );
	}

	/**
	 * Add footer in the admin dashboard widget.
	 */
	public function dashboard_widget_footer() {
		?>
		<div class="rank-math-widget-footer">
			<a target="_blank" href="<?php KB::the( 'blog', 'Dashboard Widget Blog' ); ?>">
				<?php esc_html_e( 'Blog', 'seo-by-rank-math' ); ?>
				<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'seo-by-rank-math' ); ?></span>
				<span aria-hidden="true" class="dashicons dashicons-external"></span>
			</a>
			<a target="_blank" href="<?php KB::the( 'knowledgebase', 'Dashboard Widget Help' ); ?>">
				<?php esc_html_e( 'Help', 'seo-by-rank-math' ); ?>
				<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'seo-by-rank-math' ); ?></span>
				<span aria-hidden="true" class="dashicons dashicons-external"></span>
			</a>
			<?php if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) { ?>
				<a target="_blank" href="<?php KB::the( 'pro', 'Dashboard Widget PRO' ); ?>" class="rank-math-widget-go-pro">
					<?php esc_html_e( 'Go Pro', 'seo-by-rank-math' ); ?>
					<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'seo-by-rank-math' ); ?></span>
					<span aria-hidden="true" class="dashicons dashicons-external"></span>
				</a>
			<?php } ?>
		</div>
		<?php
	}

	/**
	 * Get posts.
	 */
	private function get_feed() {
		$cache_key = 'rank_math_feed_posts_v2';
		$cache     = get_transient( $cache_key );
		if ( false !== $cache ) {
			return $cache;
		}

		$response = wp_remote_get( 'https://rankmath.com/wp-json/wp/v2/posts?dashboard_widget_feed=1' );

		if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) {
			set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );

			return false;
		}

		$posts = json_decode( wp_remote_retrieve_body( $response ), true );

		if ( empty( $posts ) || ! is_array( $posts ) ) {
			set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );

			return false;
		}

		set_transient( $cache_key, $posts, 12 * HOUR_IN_SECONDS );

		return $posts;
	}
}
PK     ”ŠU]˜(`€  €  ,  includes/admin/class-admin-dashboard-nav.phpnu „[µü¤        <?php
/**
 * The nav tabs on the Dashboard page.
 *
 * @since      1.0.40
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin Dashboard Nav class.
 *
 * @codeCoverageIgnore
 */
class Admin_Dashboard_Nav {

	/**
	 * Display dashboard tabs.
	 */
	public function display() {
		$nav_links = $this->get_nav_links();
		if ( empty( $nav_links ) ) {
			return;
		}
		?>
		<div class="rank-math-tab-nav" role="tablist" aria-orientation="horizontal">
			<?php
			foreach ( $nav_links as $id => $link ) {
				$this->nav_link( $link );
			}
			?>
		</div>
		<?php
	}

	/**
	 * Get URL for dashboard nav links.
	 *
	 * @param  array $link Link data.
	 * @return string      Link URL.
	 */
	public function get_link_url( $link ) {
		return is_network_admin() ?
			Security::add_query_arg(
				[
					'page' => 'rank-math',
					'view' => $link['id'],
				],
				network_admin_url( 'admin.php' )
			) :
			Helper::get_admin_url( $link['url'], $link['args'] );
	}

	/**
	 * Output dashboard nav link.
	 *
	 * @param  array $link Link data.
	 * @return void
	 */
	public function nav_link( $link ) {
		if ( isset( $link['cap'] ) && ! current_user_can( $link['cap'] ) ) {
			return;
		}

		$default_tab = is_network_admin() ? 'help' : 'modules';
		?>
		<a
			class="rank-math-tab<?php echo Param::get( 'view', $default_tab ) === sanitize_html_class( $link['id'] ) ? ' is-active' : ''; ?>"
			href="<?php echo esc_url( $this->get_link_url( $link ) ); ?>"
			title="<?php echo esc_attr( $link['title'] ); ?>">
			<?php echo esc_html( $link['title'] ); ?>
		</a>
		<?php
	}

	/**
	 * Get dashboard navigation links
	 *
	 * @return array
	 */
	private function get_nav_links() {
		$links = [
			'modules' => [
				'id'    => 'modules',
				'url'   => '',
				'args'  => 'view=modules',
				'cap'   => 'manage_options',
				'title' => esc_html__( 'Modules', 'seo-by-rank-math' ),
			],
			'help'    => [
				'id'    => 'help',
				'url'   => '',
				'args'  => 'view=help',
				'cap'   => 'manage_options',
				'title' => esc_html__( 'Help', 'seo-by-rank-math' ),
			],
			'wizard'  => [
				'id'    => 'wizard',
				'url'   => 'wizard',
				'args'  => '',
				'cap'   => 'manage_options',
				'title' => esc_html__( 'Setup Wizard', 'seo-by-rank-math' ),
			],
		];

		if ( Helper::is_advanced_mode() ) {
			$links['import-export'] = [
				'id'    => 'import-export',
				'url'   => 'status',
				'args'  => 'view=import_export',
				'cap'   => 'install_plugins',
				'title' => esc_html__( 'Import &amp; Export', 'seo-by-rank-math' ),
			];
		}

		if ( Helper::is_plugin_active_for_network() ) {
			unset( $links['help'] );
		}

		if ( is_network_admin() ) {
			$links = [];
		}

		return apply_filters( 'rank_math/admin/dashboard_nav_links', $links );
	}
}
PK     ”ŠU]qK"      includes/admin/class-page.phpnu „[µü¤        <?php
/**
 * The admin-page functionality.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helpers\Param;
use RankMath\Helper;

/**
 * Page class.
 */
class Page {

	/**
	 * Unique ID used for menu_slug.
	 *
	 * @var string
	 */
	public $id = null;

	/**
	 * The text to be displayed in the title tags of the page.
	 *
	 * @var string
	 */
	public $title = null;

	/**
	 * The slug name for the parent menu.
	 *
	 * @var string
	 */
	public $parent = null;

	/**
	 * The The on-screen name text for the menu.
	 *
	 * @var string
	 */
	public $menu_title = null;

	/**
	 * The capability required for this menu to be displayed to the user.
	 *
	 * @var string
	 */
	public $capability = 'manage_options';

	/**
	 * The icon for this menu.
	 *
	 * @var string
	 */
	public $icon = 'dashicons-art';

	/**
	 * The position in the menu order this menu should appear.
	 *
	 * @var int
	 */
	public $position = -1;

	/**
	 * The init hook priority.
	 *
	 * @var int
	 */
	public $priority = 25;

	/**
	 * The function/file that displays the page content for the menu page.
	 *
	 * @var string|callable
	 */
	public $render = null;

	/**
	 * The function that run on page POST to save data.
	 *
	 * @var callable
	 */
	public $onsave = null;

	/**
	 * Hold contextual help tabs.
	 *
	 * @var array
	 */
	public $help = null;

	/**
	 * Hold scripts and styles.
	 *
	 * @var array
	 */
	public $assets = null;

	/**
	 * Check if plugin is network active.
	 *
	 * @var array
	 */
	public $is_network = false;

	/**
	 * Hold classes for body tag.
	 *
	 * @var array
	 */
	public $classes = null;

	/**
	 * Hold localized data.
	 *
	 * @var array
	 */
	public $json = null;

	/**
	 * The Constructor.
	 *
	 * @param string $id     Admin page unique id.
	 * @param string $title  Title of the admin page.
	 * @param array  $config Optional. Override page settings.
	 */
	public function __construct( $id, $title, $config = [] ) {

		// Early bail!
		if ( ! $id ) {
			wp_die( esc_html__( '$id variable required', 'seo-by-rank-math' ), esc_html__( 'Variable Required', 'seo-by-rank-math' ) );
		}

		if ( ! $title ) {
			wp_die( esc_html__( '$title variable required', 'seo-by-rank-math' ), esc_html__( 'Variable Required', 'seo-by-rank-math' ) );
		}

		$this->id    = $id;
		$this->title = $title;
		foreach ( $config as $key => $value ) {
			$this->$key = $value;
		}

		if ( ! $this->menu_title ) {
			$this->menu_title = $title;
		}

		add_action( 'init', [ $this, 'init' ], $this->priority ?? 25 );
	}

	/**
	 * Init admin page when WordPress Initialises.
	 *
	 * @codeCoverageIgnore
	 */
	public function init() {
		$priority = $this->parent ? intval( $this->position ) : -1;
		add_action( $this->is_network ? 'network_admin_menu' : 'admin_menu', [ $this, 'register_menu' ], $priority );

		// If not the page is not this page stop here.
		if ( ! $this->is_current_page() ) {
			return;
		}

		$hooks = [
			'admin_init'            => [
				'callback'  => 'save',
				'condition' => ! is_null( $this->onsave ) && is_callable( $this->onsave ),
			],
			'admin_enqueue_scripts' => [
				'callback'  => 'enqueue',
				'condition' => ! empty( $this->assets ),
			],
			'admin_head'            => [
				'callback'  => 'contextual_help',
				'condition' => ! empty( $this->help ),
			],
			'admin_body_class'      => [
				'callback'  => 'body_class',
				'condition' => ! empty( $this->classes ),
			],
		];

		foreach ( $hooks as $hook => $data ) {
			if ( true === $data['condition'] ) {
				add_action( $hook, [ $this, $data['callback'] ] );
			}
		}
	}

	/**
	 * Register Admin Menu.
	 *
	 * @codeCoverageIgnore
	 */
	public function register_menu() {
		if ( ! $this->parent ) {
			add_menu_page( $this->title, $this->menu_title, $this->capability, $this->id, [ $this, 'display' ], $this->icon, $this->position );
			return;
		}

		add_submenu_page( $this->parent, $this->title, $this->menu_title, $this->capability, $this->id, [ $this, 'display' ] );
	}

	/**
	 * Enqueue styles and scripts.
	 *
	 * @codeCoverageIgnore
	 */
	public function enqueue() {
		$this->enqueue_styles();
		$this->enqueue_scripts();
		$this->add_localized_data();
	}

	/**
	 * Add classes to <body> of WordPress admin.
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $classes Space-separated list of CSS classes.
	 *
	 * @return string
	 */
	public function body_class( $classes = '' ) {
		return $classes . ' ' . join( ' ', $this->classes );
	}

	/**
	 * Save anything you want using onsave function.
	 *
	 * @codeCoverageIgnore
	 */
	public function save() {
		call_user_func( $this->onsave, $this );
	}

	/**
	 * Contextual Help.
	 *
	 * @codeCoverageIgnore
	 */
	public function contextual_help() {
		$screen = get_current_screen();

		foreach ( $this->help as $tab_id => $tab ) {
			$tab['id']      = $tab_id;
			$tab['content'] = $this->get_help_content( $tab );
			$screen->add_help_tab( $tab );
		}
	}

	/**
	 * Render admin page content using render function you passed in config.
	 *
	 * @codeCoverageIgnore
	 */
	public function display() {
		if ( is_null( $this->render ) ) {
			return;
		}

		if ( 'settings' === $this->render ) {
			return $this->display_settings();
		}

		if ( is_callable( $this->render ) ) {
			call_user_func( $this->render, $this );
			return;
		}

		if ( is_string( $this->render ) ) {
			include_once $this->render;
		}
	}

	/**
	 * Is the page is current page.
	 *
	 * @return bool
	 */
	public function is_current_page() {
		return Param::get( 'page' ) === $this->id;
	}

	/**
	 * Enqueue styles
	 *
	 * @codeCoverageIgnore
	 */
	private function enqueue_styles() {
		if ( ! isset( $this->assets['styles'] ) || empty( $this->assets['styles'] ) ) {
			return;
		}

		foreach ( $this->assets['styles'] as $handle => $src ) {
			wp_enqueue_style( $handle, $src, null, rank_math()->version );
		}
	}

	/**
	 * Enqueue scripts.
	 *
	 * @codeCoverageIgnore
	 */
	private function enqueue_scripts() {
		if ( ! isset( $this->assets['scripts'] ) || empty( $this->assets['scripts'] ) ) {
			return;
		}

		foreach ( $this->assets['scripts'] as $handle => $src ) {
			if ( $handle === 'media-editor' ) {
				wp_enqueue_media();
			}
			wp_enqueue_script( $handle, $src, null, rank_math()->version, true );
		}

		do_action( 'rank-math/admin_enqueue_scripts' );
	}

	/**
	 * Get tab content
	 *
	 * @codeCoverageIgnore
	 *
	 * @param array $tab Tab to get content for.
	 *
	 * @return string
	 */
	private function get_help_content( $tab ) {
		ob_start();

		// If it is a function.
		if ( isset( $tab['content'] ) && is_callable( $tab['content'] ) ) {
			call_user_func( $tab['content'] );
		}

		// If it is a file.
		if ( isset( $tab['view'] ) && $tab['view'] ) {
			require $tab['view'];
		}

		return ob_get_clean();
	}

	/**
	 * Localized data.
	 */
	private function add_localized_data() {
		if ( empty( $this->assets['json'] ) ) {
			return;
		}

		foreach ( $this->assets['json'] as $key => $value ) {
			Helper::add_json( $key, $value );
		}

		Helper::add_json(
			'settings',
			[
				'general' => Helper::get_settings( 'general' ),
				'titles'  => Helper::get_settings( 'titles' ),
				'sitemap' => Helper::get_settings( 'sitemap' ),
			]
		);
	}

	/**
	 * Display settings.
	 */
	private function display_settings() {
		echo '<div id="rank-math-settings" class="' . esc_attr( $this->id ) . '"></div>';
	}
}
PK     ”ŠU]&Ñ‡ÁE  E  %  includes/admin/class-setup-wizard.phpnu „[µü¤        <?php
/**
 * The Setup Wizard - configure the SEO settings in just a few steps.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Traits\Wizard;
use RankMath\Admin\Importers\Detector;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Setup_Wizard class.
 */
class Setup_Wizard {

	use Hooker;
	use Wizard;

	/**
	 * Top level admin page.
	 *
	 * @var string
	 */
	protected $slug = 'rank-math-wizard';

	/**
	 * Hook suffix.
	 *
	 * @var string
	 */
	public $hook_suffix = '';

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'admin_menu', 'add_admin_menu' );

		// If the page is not this page stop here.
		if ( ! $this->is_current_page() ) {
			return;
		}

		$this->action( 'admin_init', 'admin_page', 30 );
		$this->filter( 'user_has_cap', 'filter_user_has_cap' );
	}

	/**
	 * Add the admin menu item, under Appearance.
	 */
	public function add_admin_menu() {
		if ( Param::get( 'page' ) !== $this->slug ) {
			return;
		}

		$this->hook_suffix = add_submenu_page(
			'',
			esc_html__( 'Setup Wizard', 'seo-by-rank-math' ),
			esc_html__( 'Setup Wizard', 'seo-by-rank-math' ),
			'manage_options',
			$this->slug,
			[ $this, 'admin_page' ]
		);
	}

	/**
	 * Output the admin page.
	 */
	public function admin_page() {

		// Do not proceed if we're not on the right page.
		if ( Param::get( 'page' ) !== $this->slug ) {
			return;
		}

		if ( ob_get_length() ) {
			ob_end_clean();
		}

		// Enqueue styles.
		rank_math()->admin_assets->register();
		wp_enqueue_style( 'rank-math-wizard', rank_math()->plugin_url() . 'assets/admin/css/setup-wizard.css', [ 'wp-admin', 'buttons', 'select2-rm', 'rank-math-common', 'rank-math-cmb2', 'wp-components' ], rank_math()->version );

		// Enqueue scripts for the SEO Score Updater tool.
		\RankMath\Tools\Update_Score::get()->enqueue();

		// Enqueue javascript.
		wp_enqueue_media();
		wp_enqueue_script( 'rank-math-wizard', rank_math()->plugin_url() . 'assets/admin/js/wizard.js', [ 'media-editor', 'select2-rm', 'lodash', 'rank-math-common', 'rank-math-components' ], rank_math()->version, true );
		wp_set_script_translations( 'rank-math-wizard', 'seo-by-rank-math' );

		Helper::add_json( 'logo', esc_url( rank_math()->plugin_url() . 'assets/admin/img/logo.svg' ) );

		ob_start();

		/**
		 * Start the actual page content.
		 */
		include_once $this->get_view( 'content' );
		exit;
	}

	/**
	 * Get view file to display.
	 *
	 * @param string $view View to display.
	 * @return string
	 */
	public function get_view( $view ) {
		return rank_math()->admin_dir() . "wizard/views/{$view}.php";
	}

	/**
	 * Get Localized data for the given step.
	 *
	 * @param string $step Current Setup Wizard step.
	 */
	public static function get_localized_data( $step ) {
		$steps = self::get_steps();
		if ( ! isset( $steps[ $step ] ) ) {
			return '';
		}

		$data = [
			'isWhitelabel' => Helper::is_whitelabel(),
			'isConfigured' => Helper::is_configured(),
			'setup_mode'   => Helper::get_settings( 'general.setup_mode', 'advanced' ),
			'addImport'    => ! self::maybe_remove_import(),
		];

		return apply_filters(
			"rank_math/setup_wizard/$step/localized_data",
			array_merge(
				$data,
				$steps[ $step ]::get_localized_data()
			)
		);
	}

	/**
	 * Get Localized data for the given step.
	 *
	 * @param string $step   Current Setup Wizard step.
	 * @param array  $values Values to update.
	 */
	public static function save_data( $step, $values ) {
		$steps = self::get_steps();
		if ( ! isset( $steps[ $step ] ) ) {
			return '';
		}

		do_action( "rank_math/setup_wizard/$step/save_data", $values );

		return $steps[ $step ]::save( $values );
	}

	/**
	 * Get Setup Wizard step class.
	 */
	private static function get_steps() {
		return [
			'compatibility' => '\\RankMath\\Wizard\\Compatibility',
			'import'        => '\\RankMath\\Wizard\\Import',
			'yoursite'      => '\\RankMath\\Wizard\\Your_Site',
			'analytics'     => '\\RankMath\\Wizard\\Search_Console',
			'sitemaps'      => '\\RankMath\\Wizard\\Sitemap',
			'optimization'  => '\\RankMath\\Wizard\\Optimization',
			'ready'         => '\\RankMath\\Wizard\\Ready',
			'role'          => '\\RankMath\\Wizard\\Role',
			'redirection'   => '\\RankMath\\Wizard\\Monitor_Redirection',
			'schema-markup' => '\\RankMath\\Wizard\\Schema_Markup',
		];
	}

	/**
	 * Maybe remove import step.
	 *
	 * @return bool
	 */
	private static function maybe_remove_import() {
		$pre = apply_filters( 'rank_math/wizard/pre_remove_import_step', null );
		if ( ! is_null( $pre ) ) {
			return $pre;
		}

		if ( false === get_option( 'rank_math_is_configured' ) ) {
			$detector = new Detector();
			$plugins  = $detector->detect();
			if ( ! empty( $plugins ) ) {
				return false;
			}
		}

		return true;
	}
}
PK     ”ŠU]9n�ú~  ~  #  includes/admin/class-ask-review.phpnu „[µü¤        <?php
/**
 * Ask user to review Rank Math on wp.org, in the meta box after 2 weeks.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Ask_Review class.
 */
class Ask_Review {

	use Hooker;
	use Ajax;

	/**
	 * Now.
	 *
	 * @var string
	 */
	public $current_time = '';

	/**
	 * Date of release of version 1.0.57. Turned into a timestamp in the constructor.
	 *
	 * @var string
	 */
	public $record_date = '2021-02-03 13:00';

	/**
	 * Rank Math plugin install date.
	 *
	 * @var string
	 */
	public $install_date = '';

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->current_time = Helper::get_current_time();
		$this->record_date  = strtotime( $this->record_date );
		$this->install_date = get_option( 'rank_math_install_date' );
		if ( false === $this->install_date ) {
			$this->install_date = $this->current_time;
		}
	}

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->ajax( 'already_reviewed', 'already_reviewed' );

		// Post editor tab.
		if ( $this->current_time > $this->install_date + ( 10 * DAY_IN_SECONDS ) ) {
			Helper::add_json( 'showReviewTab', true );
		}

		// Admin notice.
		$review_notice_date = $this->get_review_notice_date();
		if ( $this->current_time > $review_notice_date ) {
			if ( get_option( 'rank_math_review_notice_added' ) === false && ! Helper::has_notification( 'rank_math_pro_notice' ) ) {
				$this->add_notice();
			}

			// Make dismiss button work like the "Maybe later" link.
			$this->action( 'wp_helpers_notification_dismissed', 'review_notice_after_dismiss' );
		}

		$this->action( 'admin_footer', 'review_notice_js', 15 );
	}

	/**
	 * Add inline JS related to the review notice.
	 *
	 * @return void
	 */
	public function review_notice_js() {
		if ( ! Helper::has_notification( 'rank_math_review_plugin_notice' ) ) {
			return;
		}
		?>
		<script>
			(function( $ ) {
				$( function() {
					$('.rank-math-dismiss-review-notice').on( 'click', function(e) {
						var $this = $(this);

						if ( ! $this.hasClass( 'rank-math-review-action' ) ) {
							e.preventDefault();
						}

						if ( $this.hasClass( 'rank-math-maybe-later-action' ) ) {
							$('#rank_math_review_plugin_notice').find( '.notice-dismiss' ).trigger('click');
							return false;
						}

						jQuery.ajax( {
							url: rankMath.ajaxurl,
							data: { action: 'rank_math_already_reviewed', security: rankMath.security,
							},
						} );

						$('#rank_math_review_plugin_notice').find( '.notice-dismiss' ).trigger('click');
					});
				});
			})(jQuery);
		</script>
		<style>
			#rank_math_review_plugin_notice .rank-math-notice.is-dismissible a,
			#rank_math_pro_notice .rank-math-notice.is-dismissible a {
				color: #4f52d4;
			}
			#rank_math_review_plugin_notice.is-dismissible,
			#rank_math_pro_notice.is-dismissible {
				border-width: 0 0 0 4px;
				border-left-color: #6668BD;
				box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
				padding: 5px 10px 5px 65px;
			}
			#rank_math_review_plugin_notice.is-dismissible:before,
			#rank_math_pro_notice.is-dismissible:before {
				content: '';
				width: 50px;
				height: 100%;
				background: rgba(102, 104, 189, 0.09);
				position: absolute;
				left: 0;
				top: 0;
			}
			#rank_math_review_plugin_notice.is-dismissible:after,
			#rank_math_pro_notice.is-dismissible:after {
				content: url('data:image/svg+xml;charset=UTF-8, <svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g fill="white"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg>' );
				padding: 3px;
				border-radius: 3px;
				position: absolute;
				left: 12px;
				top: 18px;
				background: linear-gradient(-135deg, #2488e1, #724bb7);
				width: 23px;
				height: 23px;
				display: flex;
				justify-content: center;
				line-height: 1;
				align-items: center;
			}
		</style>
		<?php
	}

	/**
	 * Add admin notice.
	 *
	 * @return void
	 */
	public function add_notice() {
		// 50-50 split between WordPress.org and Trustpilot.
		$show_wordpress = (bool) wp_rand( 0, 1 );

		if ( $show_wordpress ) {
			$selected_link = 'https://wordpress.org/support/plugin/seo-by-rank-math/reviews/?filter=5#new-post';
		} else {
			// If Trustpilot, pick one of the two links (50-50).
			$review_links  = [
				'https://www.trustpilot.com/review/www.rankmath.com',
				'https://www.trustpilot.com/evaluate/www.rankmath.com',
			];
			$selected_link = $review_links[ array_rand( $review_links ) ];
		}

		$message = '<p>';

		// Translators: placeholder is the plugin name.
		$message .= sprintf( esc_html__( 'Hey, we noticed you\'ve been using %s for more than a week now â€“ that\'s awesome!', 'seo-by-rank-math' ), '<strong>' . _x( 'Rank Math SEO', 'plugin name inside the review notice', 'seo-by-rank-math' ) . '</strong>' );
		$message .= '<br>';

		if ( $show_wordpress ) {
			$message .= esc_html__( 'We would love to get your feedback! It\'s essential for our continued development. Please consider taking a moment to leave us a review.', 'seo-by-rank-math' );
		} else {
			$message .= esc_html__( 'We would love to get your feedback! It\'s essential for our continued development. Please consider taking a moment to leave a review of your experience on Trustpilot.', 'seo-by-rank-math' );
		}

		$message .= '</p>
			<p><strong>Bhanu Ahluwalia</strong><br>' . esc_html__( 'Co-founder of Rank Math', 'seo-by-rank-math' ) . '</p>
			<p>
				<a href="' . esc_url( $selected_link ) . '" class="rank-math-dismiss-review-notice rank-math-review-action rank-math-review-out" target="_blank" rel="noopener noreferrer"><strong>' . esc_html__( 'Yes, you deserve it', 'seo-by-rank-math' ) . '</strong></a><br>
				<a href="#" class="rank-math-dismiss-review-notice rank-math-maybe-later-action">' . esc_html__( 'No, maybe later', 'seo-by-rank-math' ) . '</a><br>
				<a href="#" class="rank-math-dismiss-review-notice rank-math-already-reviewed-action">' . esc_html__( 'I already did', 'seo-by-rank-math' ) . '</a>
			</p>';

		Helper::add_notification(
			$message,
			[
				'type'       => 'info',
				'id'         => 'rank_math_review_plugin_notice',
				'capability' => 'install_plugins',
			]
		);

		update_option( 'rank_math_review_notice_added', '1', false );
	}

	/**
	 * Set "already reviewed" flag after the user dismisses the notice.
	 *
	 * @param string $notification_id Dismissed notice ID.
	 * @return void
	 */
	public function review_notice_after_dismiss( $notification_id ) {
		if ( 'rank_math_review_plugin_notice' !== $notification_id ) {
			return;
		}

		delete_option( 'rank_math_review_notice_date' );
		delete_option( 'rank_math_review_notice_added' );
		update_option( 'rank_math_review_notice_delayed', true, false );
	}

	/**
	 * Get stored notice start date.
	 *
	 * @return int
	 */
	public function get_review_notice_date() {
		$review_notice_date = get_option( 'rank_math_review_notice_date' );
		if ( false !== $review_notice_date ) {
			return $review_notice_date;
		}

		$delay_days = 14;
		if ( $this->install_date < $this->record_date && ! get_option( 'rank_math_review_notice_delayed' ) ) {
			$delay_days = wp_rand( 7, 30 );
		}

		$review_notice_date = $this->current_time + ( $delay_days * DAY_IN_SECONDS );
		update_option( 'rank_math_review_notice_date', $review_notice_date, false );

		return $review_notice_date;
	}

	/**
	 * Set "already reviewed" flag.
	 */
	public function already_reviewed() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'onpage_general' );
		update_option( 'rank_math_already_reviewed', Helper::get_current_time() );
		$this->success( 'success' );
	}
}
PK     ”ŠU]{ä¼;        includes/admin/class-api.phpnu „[µü¤        <?php
/**
 * The RankMath API.
 *
 * @since      1.5.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_Error;

/**
 * Api class.
 */
class Api {

	/**
	 * Rank Math SEO Checkup API.
	 *
	 * @var string
	 */
	protected $api_url = 'https://rankmath.com/wp-json/rankmath/v1/';

	/**
	 * Was the last request successful.
	 *
	 * @var bool
	 */
	protected $is_success = false;

	/**
	 * Last error.
	 *
	 * @var string
	 */
	protected $last_error = '';

	/**
	 * Last response.
	 *
	 * @var array
	 */
	protected $last_response = [];

	/**
	 * Last response header code.
	 *
	 * @var int
	 */
	protected $last_code = 0;

	/**
	 * User agent.
	 *
	 * @var string
	 */
	protected $user_agent = '';

	/**
	 * Is blocking.
	 *
	 * @var bool
	 */
	protected $is_blocking = true;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Api
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Api ) ) {
			$instance              = new Api();
			$instance->is_blocking = true;
			$instance->user_agent  = 'RankMath/' . md5( esc_url( home_url( '/' ) ) );
		}

		return $instance;
	}

	/**
	 * Was the last request successful?
	 *
	 * @return bool  True for success, false for failure
	 */
	public function is_success() {
		return $this->is_success;
	}

	/**
	 * Get the last error returned by either the network transport, or by the API.
	 * If something didn't work, this should contain the string describing the problem.
	 *
	 * @return  array|false  describing the error
	 */
	public function get_error() {
		return $this->last_error ? $this->last_error : false;
	}

	/**
	 * Get an array containing the HTTP headers and the body of the API response.
	 *
	 * @return array  Assoc array with keys 'headers' and 'body'
	 */
	public function get_response() {
		return $this->last_response;
	}

	/**
	 * Remove registration data and disconnect from RankMath.com.
	 *
	 * @param string $username Username.
	 * @param string $api_key  Api key.
	 */
	public function deactivate_site( $username, $api_key ) {
		$this->is_blocking = false;
		$data              = wp_json_encode(
			[
				'username' => $username,
				'api_key'  => $api_key,
				'site_url' => esc_url( home_url() ),
			]
		);

		$response = wp_remote_post(
			RANK_MATH_SITE_URL . '/wp-json/rankmath/v1/deactivateSite',
			[
				'body'    => $data,
				'headers' => [
					'Content-Type' => 'application/json',
				],
			],
		);
	}

	/**
	 * Make an HTTP GET request - for retrieving data.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_get( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'GET', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP POST request - for creating and updating items.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_post( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'POST', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP PUT request - for creating new items.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_put( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'PUT', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP DELETE request - for deleting data.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_delete( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'DELETE', $url, $args, $timeout );
	}

	/**
	 * Performs the underlying HTTP request. Not very exciting.
	 *
	 * @param string $http_verb The HTTP verb to use: get, post, put, patch, delete.
	 * @param string $url       URL to do request.
	 * @param array  $args       Assoc array of parameters to be passed.
	 * @param int    $timeout    Timeout limit for request in seconds.
	 *
	 * @return array|false Assoc array of decoded result.
	 */
	protected function make_request( $http_verb, $url, $args = [], $timeout = 10 ) {
		$params = [
			'timeout'    => $timeout,
			'method'     => $http_verb,
			'user-agent' => $this->user_agent,
			'blocking'   => $this->is_blocking,
		];

		if ( ! empty( $args ) && is_array( $args ) ) {
			$params['body'] = $args;
		}

		$this->reset();
		$response = wp_remote_request( $this->api_url . $url, $params );
		$this->determine_success( $response );

		return $this->format_response( $response );
	}

	/**
	 * Decode the response and format any error messages for debugging
	 *
	 * @param array|WP_Error $response The response from the curl request.
	 *
	 * @return array|false The JSON decoded into an array
	 */
	protected function format_response( $response ) {
		$this->last_response = $response;

		if ( is_wp_error( $response ) ) {
			return false;
		}

		if ( ! empty( $response['body'] ) ) {
			return json_decode( $response['body'], true );
		}

		return false;
	}

	/**
	 * Check if the response was successful or a failure. If it failed, store the error.
	 *
	 * @param array|WP_Error $response The response from the curl request.
	 */
	protected function determine_success( $response ) {
		if ( is_wp_error( $response ) ) {
			$this->last_error = 'WP_Error: ' . $response->get_error_message();
			return;
		}

		$this->last_code = wp_remote_retrieve_response_code( $response );
		if ( in_array( $this->last_code, [ 200, 204 ], true ) ) {
			$this->is_success = true;
			return;
		}

		$this->last_error = 'Unknown error, call getLastResponse() to find out what happened.';
	}

	/**
	 * Reset request.
	 */
	protected function reset() {
		$this->last_code     = 0;
		$this->last_error    = '';
		$this->is_success    = false;
		$this->is_blocking   = true;
		$this->last_response = [
			'body'    => null,
			'headers' => null,
		];
	}
}
PK     ”ŠU]Ô�%ÆN#  N#  %  includes/admin/class-post-filters.phpnu „[µü¤        <?php
/**
 * The admin post filters functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_Meta_Query;
use RankMath\Helper;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Post_Filters class.
 */
class Post_Filters implements Runner {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'admin_init', 'init' );
	}

	/**
	 * Initialize.
	 */
	public function init() {
		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}

		$this->filter( 'pre_get_posts', 'posts_by_seo_filters' );
		$this->filter( 'parse_query', 'posts_by_focus_keywords' );
		$this->filter( 'restrict_manage_posts', 'add_seo_filters', 11 );

		foreach ( Helper::get_allowed_post_types() as $post_type ) {
			$this->filter( "views_edit-$post_type", 'add_pillar_content_filter_link' );
		}
	}

	/**
	 * Filter posts in admin by Rank Math's Filter value.
	 *
	 * @param \WP_Query $query The wp_query instance.
	 */
	public function posts_by_seo_filters( $query ) {
		if ( ! $this->can_seo_filters() ) {
			return;
		}

		if ( 'rank_math_seo_score' === $query->get( 'orderby' ) ) {
			$query->set( 'orderby', 'meta_value' );
			$query->set( 'meta_key', 'rank_math_seo_score' );
			$query->set( 'meta_type', 'numeric' );
		}

		if ( empty( $_GET['pillar_content'] ) && empty( $_GET['seo-filter'] ) ) {
			return;
		}

		$meta_query = [];

		// Check for Pillar Content filter.
		if ( ! empty( $_GET['pillar_content'] ) ) {
			$meta_query[] = [
				'key'   => 'rank_math_pillar_content',
				'value' => 'on',
			];
		}

		$this->set_seo_filters( $meta_query );
		$query->set( 'meta_query', $meta_query );
	}

	/**
	 * Filter post in admin by Pillar Content.
	 *
	 * @param \WP_Query $query The wp_query instance.
	 */
	public function posts_by_focus_keywords( $query ) {
		if ( ! $this->can_fk_filter() ) {
			return;
		}

		if ( $ids = $this->posts_had_reviews() ) { // phpcs:ignore
			$query->set( 'post_type', 'any' );
			$query->set( 'post__in', $ids );
			return;
		}

		$query->set( 'post_status', 'publish' );
		if ( $ids = $this->has_fk_in_title() ) { // phpcs:ignore
			$query->set( 'post__in', $ids );
			return;
		}

		$focus_keyword = Param::get( 'focus_keyword', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
		if ( 1 === absint( $focus_keyword ) ) {
			$query->set(
				'meta_query',
				[
					'relation' => 'AND',
					[
						'key'     => 'rank_math_focus_keyword',
						'compare' => 'NOT EXISTS',
					],
					[
						'relation' => 'OR',
						[
							'key'     => 'rank_math_robots',
							'value'   => 'noindex',
							'compare' => 'NOT LIKE',
						],
						[
							'key'     => 'rank_math_robots',
							'compare' => 'NOT EXISTS',
						],
					],
				]
			);
			return;
		}

		$query->set( 'post_type', 'any' );
		$query->set(
			'meta_query',
			[
				[
					'relation' => 'OR',
					[
						'key'     => 'rank_math_focus_keyword',
						'value'   => $focus_keyword . ',',
						'compare' => 'LIKE',
					],
					[
						'key'     => 'rank_math_focus_keyword',
						'value'   => $focus_keyword,
						'compare' => 'LIKE',
					],
				],
			]
		);
	}

	/**
	 * Add SEO filters.
	 */
	public function add_seo_filters() {
		global $post_type;

		if ( 'attachment' === $post_type || ! in_array( $post_type, Helper::get_allowed_post_types(), true ) ) {
			return;
		}

		$options = [
			''          => esc_html__( 'Rank Math', 'seo-by-rank-math' ),
			'great-seo' => esc_html__( 'SEO Score: Good', 'seo-by-rank-math' ),
			'good-seo'  => esc_html__( 'SEO Score: Ok', 'seo-by-rank-math' ),
			'bad-seo'   => esc_html__( 'SEO Score: Bad', 'seo-by-rank-math' ),
			'empty-fk'  => esc_html__( 'Focus Keyword Not Set', 'seo-by-rank-math' ),
			'noindexed' => esc_html__( 'Articles noindexed', 'seo-by-rank-math' ),
		];

		$options = $this->do_filter( 'manage_posts/seo_filter_options', $options, $post_type );
		if ( empty( $options ) ) {
			return;
		}

		$selected = Param::get( 'seo-filter' );
		?>
		<select name="seo-filter" id="rank-math-seo-filter">
			<?php foreach ( $options as $val => $option ) : ?>
				<option value="<?php echo esc_attr( $val ); ?>" <?php selected( $selected, $val, true ); ?>><?php echo esc_html( $option ); ?></option>
			<?php endforeach; ?>
		</select>
		<?php
	}

	/**
	 * Add view to filter list for Pillar Content.
	 *
	 * @param array $views An array of available list table views.
	 */
	public function add_pillar_content_filter_link( $views ) {
		global $typenow;

		$current = empty( $_GET['pillar_content'] ) ? '' : ' class="current" aria-current="page"';
		$pillars = get_posts(
			[
				'post_type'      => $typenow,
				'fields'         => 'ids',
				'posts_per_page' => -1,
				'meta_key'       => 'rank_math_pillar_content',
				'meta_value'     => 'on',
			]
		);

		$views['pillar_content'] = sprintf(
			'<a href="%1$s"%2$s>%3$s <span class="count">(%4$s)</span></a>',
			Security::add_query_arg(
				[
					'post_type'      => $typenow,
					'pillar_content' => 1,
				]
			),
			$current,
			esc_html__( 'Pillar Content', 'seo-by-rank-math' ),
			number_format_i18n( count( $pillars ) )
		);

		return $views;
	}

	/**
	 * Can apply SEO filters.
	 *
	 * @return bool
	 */
	private function can_seo_filters() {
		$screen = get_current_screen();
		if ( is_null( $screen ) || ! in_array( $screen->post_type, Helper::get_allowed_post_types(), true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Set SEO filters meta query.
	 *
	 * @param array $query Meta query.
	 */
	private function set_seo_filters( &$query ) {
		$filter = Param::get( 'seo-filter' );
		if ( false === $filter ) {
			return;
		}

		$hash = [
			'empty-fk'  => [
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'NOT EXISTS',
			],
			'bad-seo'   => [
				'key'     => 'rank_math_seo_score',
				'value'   => 50,
				'compare' => '<=',
				'type'    => 'numeric',
			],
			'good-seo'  => [
				'key'     => 'rank_math_seo_score',
				'value'   => [ 51, 80 ],
				'compare' => 'BETWEEN',
				'type'    => 'numeric',
			],
			'great-seo' => [
				'key'     => 'rank_math_seo_score',
				'value'   => 80,
				'compare' => '>',
				'type'    => 'numeric',
			],
			'noindexed' => [
				'key'     => 'rank_math_robots',
				'value'   => 'noindex',
				'compare' => 'LIKE',
			],
		];

		// Extra conditions for "SEO Score" filters.
		$seo_score_filters = [ 'bad-seo', 'good-seo', 'great-seo' ];
		if ( in_array( $filter, $seo_score_filters, true ) ) {
			$query['relation'] = 'AND';
			$query[]           = [
				'relation' => 'OR',
				[
					'key'     => 'rank_math_robots',
					'value'   => 'noindex',
					'compare' => 'NOT LIKE',
				],
				[
					'key'     => 'rank_math_robots',
					'compare' => 'NOT EXISTS',
				],
			];
			$query[]           = [
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'EXISTS',
			];
			$query[]           = [
				'key'     => 'rank_math_focus_keyword',
				'value'   => '',
				'compare' => '!=',
			];
		}

		if ( isset( $hash[ $filter ] ) ) {
			$query[] = $hash[ $filter ];
		}
	}

	/**
	 * Can apply Focus Keyword filter.
	 *
	 * @return bool
	 */
	private function can_fk_filter() {
		$screen = get_current_screen();
		if (
			is_null( $screen ) ||
			'edit' !== $screen->base ||
			(
				! isset( $_GET['focus_keyword'] ) &&
				! isset( $_GET['fk_in_title'] ) &&
				! isset( $_GET['review_posts'] )
			)
		) {
			return false;
		}

		return true;
	}

	/**
	 * Check if Focus Keyword appears in the title.
	 *
	 * @return bool|array
	 */
	private function has_fk_in_title() {
		global $wpdb;

		if ( ! Param::get( 'fk_in_title' ) ) {
			return false;
		}

		$screen     = get_current_screen();
		$meta_query = new WP_Meta_Query(
			[
				[
					'key'     => 'rank_math_focus_keyword',
					'compare' => 'EXISTS',
				],
				[
					'relation' => 'OR',
					[
						'key'     => 'rank_math_robots',
						'value'   => 'noindex',
						'compare' => 'NOT LIKE',
					],
					[
						'key'     => 'rank_math_robots',
						'compare' => 'NOT EXISTS',
					],
				],
			]
		);

		$meta_query = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
		return DB_Helper::get_col( "SELECT {$wpdb->posts}.ID FROM $wpdb->posts {$meta_query['join']} WHERE 1=1 {$meta_query['where']} AND {$wpdb->posts}.post_type = '$screen->post_type' AND ({$wpdb->posts}.post_status = 'publish') AND REPLACE({$wpdb->posts}.post_title, '&amp;', '&') NOT LIKE CONCAT( '%', SUBSTRING_INDEX( {$wpdb->postmeta}.meta_value, ',', 1 ), '%' )" );
	}

	/**
	 * Check if any posts had Review schema.
	 *
	 * @return bool|array
	 */
	private function posts_had_reviews() {
		global $wpdb;

		$review_posts = Param::get( 'review_posts' );
		if ( ! $review_posts ) {
			return false;
		}

		return ! get_option( 'rank_math_review_posts_converted', false );
	}
}
PK     ”ŠU]R„ý0  0  0  includes/admin/metabox/class-taxonomy-screen.phpnu „[µü¤        <?php
/**
 * The metabox functionality of the plugin.
 *
 * @since      1.0.25
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Taxonomy metabox class.
 */
class Taxonomy_Screen implements IScreen {

	use Hooker;

	/**
	 * Class construct
	 */
	public function __construct() {
		add_action( 'init', [ $this, 'allow_tags' ], 999 );
	}

	/**
	 * Allow tags in term description.
	 */
	public function allow_tags() {
		$taxonomies = Helper::get_allowed_taxonomies();
		if ( is_array( $taxonomies ) && ! empty( $taxonomies ) ) {
			remove_filter( 'pre_term_description', 'wp_filter_kses' );
			remove_filter( 'term_description', 'wp_kses_data' );
			add_filter( 'pre_term_description', 'wp_kses_post' );
			add_filter( 'term_description', 'wp_kses_post' );
		}
	}

	/**
	 * Get object ID.
	 *
	 * @return int
	 */
	public function get_object_id() {
		return Param::request( 'tag_ID', 0, FILTER_VALIDATE_INT );
	}

	/**
	 * Get object type
	 *
	 * @return string
	 */
	public function get_object_type() {
		return 'term';
	}

	/**
	 * Get object types to register metabox to
	 *
	 * @return array
	 */
	public function get_object_types() {
		$object_types = [];
		$taxonomies   = Helper::get_allowed_taxonomies();

		if ( is_array( $taxonomies ) && ! empty( $taxonomies ) ) {
			$object_types[] = 'term';
			$this->description_field_editor();
		}

		return $object_types;
	}

	/**
	 * Enqueue Styles and Scripts required for screen.
	 */
	public function enqueue() {}

	/**
	 * Get analysis to run.
	 *
	 * @return array
	 */
	public function get_analysis() {
		return [
			'keywordInTitle'           => true,
			'keywordInMetaDescription' => true,
			'keywordInPermalink'       => true,
			'keywordNotUsed'           => true,
			'titleStartWithKeyword'    => true,
		];
	}

	/**
	 * Get values for localize.
	 *
	 * @return array
	 */
	public function get_values() {
		$url = '';
		if ( $this->get_object_id() ) {
			$url  = get_term_link( $this->get_object_id() );
			$data = array_filter( explode( '/', $url ) );
			$url  = ! empty( $data ) ? str_replace( array_pop( $data ), '%term%', $url ) : '';
		}

		return [
			'permalinkFormat' => $url ? $url : home_url(),
		];
	}

	/**
	 * Get object values for localize
	 *
	 * @return array
	 */
	public function get_object_values() {
		$taxonomy = $this->get_taxonomy();
		return [
			'titleTemplate'       => Helper::get_settings( "titles.tax_{$taxonomy}_title", '%term% %sep% %sitename%' ),
			'descriptionTemplate' => Helper::get_settings( "titles.tax_{$taxonomy}_description", '%term_description%' ),
		];
	}

	/**
	 * Output the WordPress editor.
	 *
	 * @param object $term Current taxonomy term object.
	 */
	public function category_description_editor( $term ) {
		?>
		<tr class="form-field term-description-wrap rank-math-term-description-wrap">
			<th scope="row"><label for="description"><?php esc_html_e( 'Description', 'seo-by-rank-math' ); ?></label></th>
			<td>
				<?php
				wp_editor(
					html_entity_decode( $term->description, ENT_QUOTES, 'UTF-8' ),
					'rank_math_description_editor',
					[
						'textarea_name' => 'description',
						'textarea_rows' => 5,
					]
				);
				?>
			</td>
			<script>
				// Remove the non-html field
				jQuery('textarea#description').closest('.form-field').remove();
			</script>
		</tr>
		<?php
	}

	/**
	 * Add the description field to the edit taxonomy screen if the metabox is
	 * enabled for the current taxonomy.
	 *
	 * @return void
	 */
	private function description_field_editor() {
		$taxonomy = $this->get_taxonomy();
		if (
			! Helper::get_settings( 'titles.tax_' . $taxonomy . '_add_meta_box' ) ||
			$this->do_filter( 'admin/disable_rich_editor', false, $taxonomy )
		) {
			return;
		}

		$this->action( "{$taxonomy}_edit_form_fields", 'category_description_editor', 1 );
	}

	/**
	 * Get current taxonomy.
	 *
	 * @return {string} Taxonomy slug.
	 */
	private function get_taxonomy() {
		$taxonomy        = filter_input( INPUT_GET, 'taxonomy', FILTER_DEFAULT, [ 'options' => [ 'default' => '' ] ] );
		$taxonomy_object = get_taxonomy( $taxonomy );
		if ( empty( $taxonomy_object ) || empty( $taxonomy_object->public ) ) {
			return;
		}

		return $taxonomy;
	}
}
PK     ”ŠU]¥íä¿ð7  ð7  '  includes/admin/metabox/class-screen.phpnu „[µü¤        <?php
/**
 * Metabox localization methods.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Meta;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Locale;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Url;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Screen.
 */
class Screen implements IScreen {

	use Meta;
	use Hooker;

	/**
	 * Current screen object.
	 *
	 * @var IScreen
	 */
	private $screen = null;

	/**
	 * Class construct
	 */
	public function __construct() {
		$this->load_screen();
	}

	/**
	 * Is creen loaded.
	 *
	 * @return bool
	 */
	public function is_loaded() {
		return ! is_null( $this->screen );
	}

	/**
	 * Get object id
	 *
	 * @return int
	 */
	public function get_object_id() {
		return $this->screen->get_object_id();
	}

	/**
	 * Get object type
	 *
	 * @return string
	 */
	public function get_object_type() {
		return $this->screen->get_object_type();
	}

	/**
	 * Get object types to register metabox to
	 *
	 * @return array
	 */
	public function get_object_types() {
		return $this->screen->get_object_types();
	}

	/**
	 * Enqueue Styles and Scripts required for screen.
	 */
	public function enqueue() {
		$this->screen->enqueue();
	}

	/**
	 * Get analysis to run.
	 *
	 * @return array
	 */
	public function get_analysis() {
		$analyses = $this->do_filter(
			'researches/tests',
			$this->screen->get_analysis(),
			$this->screen->get_object_type()
		);

		return array_keys( $analyses );
	}

	/**
	 * Get values for localize.
	 */
	public function localize() {
		$values = $this->get_values();
		if ( empty( $values ) ) {
			return;
		}

		foreach ( $values as $key => $value ) {
			Helper::add_json( $key, $value );
		}
	}

	/**
	 * Get common values.
	 *
	 * @return array
	 */
	public function get_values() {
		$editor      = Helper::get_current_editor();
		$trends_link = KB::get( 'pro', 'CE General Tab Trends' );
		if ( 'gutenberg' === $editor ) {
			$trends_link = KB::get( 'pro', 'Gutenberg General Tab Trends' );
		} elseif ( 'elementor' === $editor ) {
			$trends_link = KB::get( 'pro', 'Elementor General Tab Trends' );
		}

		$values = array_merge_recursive(
			$this->screen->get_values(),
			[
				'homeUrl'             => home_url(),
				'objectID'            => $this->get_object_id(),
				'objectType'          => $this->get_object_type(),
				'locale'              => Locale::get_site_language(),
				'localeFull'          => get_locale(),
				'overlayImages'       => Helper::choices_overlay_images(),
				'defaultOgImage'      => Helper::get_settings( 'titles.open_graph_image', rank_math()->plugin_url() . 'assets/admin/img/social-placeholder.jpg' ),
				'customPermalinks'    => (bool) get_option( 'permalink_structure', false ),
				'isUserRegistered'    => Helper::is_site_connected(),
				'autoSuggestKeywords' => Helper::is_site_connected(),
				'connectSiteUrl'      => Admin_Helper::get_activate_url( Url::get_current_url() ),
				'maxTags'             => $this->do_filter( 'focus_keyword/maxtags', 5 ),
				'trendsIcon'          => Admin_Helper::get_trends_icon_svg(),
				'showScore'           => Helper::is_score_enabled(),
				'siteFavIcon'         => $this->get_site_icon(),
				'canUser'             => [
					'general'    => Helper::has_cap( 'onpage_general' ),
					'advanced'   => Helper::has_cap( 'onpage_advanced' ) && Helper::is_advanced_mode(),
					'snippet'    => Helper::has_cap( 'onpage_snippet' ),
					'social'     => Helper::has_cap( 'onpage_social' ),
					'analysis'   => Helper::has_cap( 'onpage_analysis' ),
					'analytics'  => Helper::has_cap( 'analytics' ),
					'content_ai' => Helper::has_cap( 'content_ai' ),
				],
				'showKeywordIntent'   => Helper::should_determine_search_intent(),
				'assessor'            => [
					'serpData'        => $this->get_object_values(),
					'powerWords'      => $this->power_words(),
					'diacritics'      => $this->diacritics(),
					'researchesTests' => $this->get_analysis(),
					'hasRedirection'  => Helper::has_cap( 'redirections' ) && Helper::is_module_active( 'redirections' ),
					'hasBreadcrumb'   => Helper::is_breadcrumbs_enabled(),
				],
				'isPro'               => defined( 'RANK_MATH_PRO_FILE' ),
				'is_front_page'       => Admin_Helper::is_home_page(),
				'frontPageId'         => (int) get_option( 'page_on_front' ),
				'trendsUpgradeLink'   => esc_url_raw( $trends_link ),
				'trendsUpgradeLabel'  => esc_html__( 'Upgrade', 'seo-by-rank-math' ),
				'trendsPreviewImage'  => esc_url( rank_math()->plugin_url() . 'assets/admin/img/trends-preview.jpg' ),
				'currentEditor'       => $editor,
				'homepageData'        => [
					'assessor' => [
						'powerWords'      => $this->power_words(),
						'diacritics'      => $this->diacritics(),
						'researchesTests' => $this->get_analysis(),
						'hasBreadcrumb'   => Helper::is_breadcrumbs_enabled(),
						'serpData'        => $this->get_homepage_serp_data(),
					],
				],
			]
		);

		$values = $this->do_filter( 'metabox/values', $values, $this );
		return $this->do_filter( 'metabox/' . $this->get_object_type() . '/values', $values, $this );
	}

	/**
	 * Get serpData for the homepageData assessor.
	 *
	 * Uses the static front page's post meta when show_on_front = 'page',
	 * otherwise falls back to global homepage settings.
	 *
	 * @return array
	 */
	private function get_homepage_serp_data() {
		$title_tpl = Helper::get_settings( 'titles.pt_page_title', '%title% %sep% %sitename%' );
		$desc_tpl  = Helper::get_settings( 'titles.pt_page_description', '' );
		$robots    = $this->normalize_robots( Helper::get_settings( 'titles.homepage_robots' ) );
		$adv       = $this->normalize_advanced_robots( Helper::get_settings( 'titles.homepage_advanced_robots' ) );

		$id = 'page' === get_option( 'show_on_front' ) ? (int) get_option( 'page_on_front' ) : 0;
		if ( $id ) {
			$robots = $this->normalize_robots( Helper::get_post_meta( 'robots', $id ) );
			$adv    = $this->normalize_advanced_robots( Helper::get_post_meta( 'advanced_robots', $id ) );
		}

		$title      = $id ? Helper::get_post_meta( 'title', $id ) : Helper::get_settings( 'titles.homepage_title' );
		$desc       = $id ? Helper::get_post_meta( 'description', $id ) : Helper::get_settings( 'titles.homepage_description', '' );
		$keywords   = $id ? Helper::get_post_meta( 'focus_keyword', $id ) : '';
		$breadcrumb = $id ? Helper::get_post_meta( 'breadcrumb_title', $id ) : Helper::get_settings( 'general.breadcrumbs_home_label' );
		$fb_title   = $id ? Helper::get_post_meta( 'facebook_title', $id ) : Helper::get_settings( 'titles.homepage_facebook_title', '' );
		$fb_desc    = $id ? Helper::get_post_meta( 'facebook_description', $id ) : Helper::get_settings( 'titles.homepage_facebook_description', '' );
		$fb_image   = $id ? Helper::get_post_meta( 'facebook_image', $id ) : Helper::get_settings( 'titles.homepage_facebook_image', '' );
		$fb_img_id  = $id ? Helper::get_post_meta( 'facebook_image_id', $id ) : Helper::get_settings( 'titles.homepage_facebook_image_id', '' );

		return [
			'title'               => $title,
			'description'         => $desc,
			'titleTemplate'       => $title_tpl,
			'descriptionTemplate' => $desc_tpl,
			'focusKeywords'       => $keywords,
			'breadcrumbTitle'     => $breadcrumb,
			'robots'              => $robots,
			'advancedRobots'      => $adv,
			'facebookTitle'       => $fb_title,
			'facebookDescription' => $fb_desc,
			'facebookImage'       => $fb_image,
			'facebookImageID'     => $fb_img_id,
		];
	}

	/**
	 * Get object values for localize
	 *
	 * @return array
	 */
	public function get_object_values() {
		$keys = $this->do_filter(
			'metabox/' . $this->get_object_type() . '/meta_keys',
			[
				'title'                    => 'title',
				'description'              => 'description',
				'focusKeywords'            => 'focus_keyword',
				'pillarContent'            => 'pillar_content',
				'canonicalUrl'             => 'canonical_url',
				'breadcrumbTitle'          => 'breadcrumb_title',
				'advancedRobots'           => 'advanced_robots',

				// Facebook.
				'facebookTitle'            => 'facebook_title',
				'facebookDescription'      => 'facebook_description',
				'facebookImage'            => 'facebook_image',
				'facebookImageID'          => 'facebook_image_id',
				'facebookHasOverlay'       => 'facebook_enable_image_overlay',
				'facebookImageOverlay'     => 'facebook_image_overlay',
				'facebookAuthor'           => 'facebook_author',

				// Twitter.
				'twitterCardType'          => 'twitter_card_type',
				'twitterUseFacebook'       => 'twitter_use_facebook',
				'twitterTitle'             => 'twitter_title',
				'twitterDescription'       => 'twitter_description',
				'twitterImage'             => 'twitter_image',
				'twitterImageID'           => 'twitter_image_id',
				'twitterHasOverlay'        => 'twitter_enable_image_overlay',
				'twitterImageOverlay'      => 'twitter_image_overlay',

				// Player.
				'twitterPlayerUrl'         => 'twitter_player_url',
				'twitterPlayerSize'        => 'twitter_player_size',
				'twitterPlayerStream'      => 'twitter_player_stream',
				'twitterPlayerStreamCtype' => 'twitter_player_stream_ctype',

				// App.
				'twitterAppDescription'    => 'twitter_app_description',
				'twitterAppIphoneName'     => 'twitter_app_iphone_name',
				'twitterAppIphoneID'       => 'twitter_app_iphone_id',
				'twitterAppIphoneUrl'      => 'twitter_app_iphone_url',
				'twitterAppIpadName'       => 'twitter_app_ipad_name',
				'twitterAppIpadID'         => 'twitter_app_ipad_id',
				'twitterAppIpadUrl'        => 'twitter_app_ipad_url',
				'twitterAppGoogleplayName' => 'twitter_app_googleplay_name',
				'twitterAppGoogleplayID'   => 'twitter_app_googleplay_id',
				'twitterAppGoogleplayUrl'  => 'twitter_app_googleplay_url',
				'twitterAppCountry'        => 'twitter_app_country',
			]
		);

		// Generate data.
		$data        = [];
		$object_id   = $this->get_object_id();
		$object_type = $this->get_object_type();
		foreach ( $keys as $id => $key ) {
			$data[ $id ] = $this->get_meta( $object_type, $object_id, 'rank_math_' . $key );
		}

		// Robots.
		$data['robots'] = $this->normalize_robots( $this->get_meta( $object_type, $object_id, 'rank_math_robots' ) );

		// Advanced Robots.
		$data['advancedRobots'] = $this->normalize_advanced_robots( $this->get_meta( $object_type, $object_id, 'rank_math_advanced_robots' ) );

		$data['pillarContent'] = 'on' === $data['pillarContent'];

		// Username, avatar & Name.
		$twitter_username           = Helper::get_settings( 'titles.twitter_author_names' );
		$data['twitterAuthor']      = $twitter_username ? $twitter_username : esc_html__( 'username', 'seo-by-rank-math' );
		$data['twitterUseFacebook'] = 'off' === $data['twitterUseFacebook'] ? false : true;
		$data['facebookHasOverlay'] = empty( $data['facebookHasOverlay'] ) || 'off' === $data['facebookHasOverlay'] ? false : true;
		$data['twitterHasOverlay']  = empty( $data['twitterHasOverlay'] ) || 'off' === $data['twitterHasOverlay'] ? false : true;

		return wp_parse_args( $this->screen->get_object_values(), $data );
	}

	/**
	 * Get site fav icon.
	 *
	 * @return string
	 */
	private function get_site_icon() {
		$favicon = get_site_icon_url( 16 );

		return ! empty( $favicon ) ? $favicon : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABs0lEQVR4AWL4//8/RRjO8Iucx+noO0MWUDo16FYABMGP6ZfUcRnWtm27jVPbtm3bttuH2t3eFPcY9pLz7NxiLjCyVd87pKnHyqXyxtCs8APd0rnyxiu4qSeA3QEDrAwBDrT1s1Rc/OrjLZwqVmOSu6+Lamcpp2KKMA9PH1BYXMe1mUP5qotvXTywsOEEYHXxrY+3cqk6TMkYpNr2FeoY3KIr0RPtn9wQ2unlA+GMkRw6+9TFw4YTwDUzx/JVvARj9KaedXRO8P5B1Du2S32smzqUrcKGEyA+uAgQjKX7zf0boWHGfn71jIKj2689gxp7OAGShNcBUmLMPVjZuiKcA2vuWHHDCQxMCz629kXAIU4ApY15QwggAFbfOP9DhgBJ+nWVJ1AZAfICAj1pAlY6hCADZnveQf7bQIwzVONGJonhLIlS9gr5mFg44Xd+4S3XHoGNPdJl1INIwKyEgHckEhgTe1bGiFY9GSFBYUwLh1IkiJUbY407E7syBSFxKTszEoiE/YdrgCEayDmtaJwCI9uu8TKMuZSVfSa4BpGgzvomBR/INhLGzrqDotp01ZR8pn/1L0JN9d9XNyx0AAAAAElFTkSuQmCC';
	}

	/**
	 * Normalize robots.
	 *
	 * @param array $robots Array to normalize.
	 *
	 * @return array
	 */
	private function normalize_robots( $robots ) {
		if ( ! is_array( $robots ) || empty( $robots ) ) {
			$robots = Helper::get_robots_defaults();
		}

		return array_fill_keys( $robots, true );
	}

	/**
	 * Normalize advanced robots.
	 *
	 * @param array $advanced_robots Array to normalize.
	 *
	 * @return array
	 */
	private function normalize_advanced_robots( $advanced_robots ) {
		if ( ! empty( $advanced_robots ) ) {
			return $advanced_robots;
		}

		return Helper::get_advanced_robots_defaults();
	}

	/**
	 * Return power words.
	 *
	 * @return array
	 */
	private function power_words() {
		static $words;
		$locale = Locale::get_site_language();
		$file   = rank_math()->plugin_dir() . 'assets/vendor/powerwords/' . $locale . '.php';
		if ( ! file_exists( $file ) ) {
			return $this->do_filter( 'metabox/power_words', [], $locale );
		}

		$words = $words ? $words : include $file;
		return $this->do_filter( 'metabox/power_words', array_map( 'strtolower', $words ), $locale );
	}

	/**
	 * Get diacritics (accents).
	 *
	 * @return array
	 */
	private function diacritics() {
		$locale = Locale::get_site_language();
		$locale = in_array( $locale, [ 'en', 'de', 'ru' ], true ) ? $locale : 'en';
		$file   = rank_math()->plugin_dir() . 'assets/vendor/diacritics/' . $locale . '.php';
		if ( ! file_exists( $file ) ) {
			return false;
		}

		$diacritics = include_once $file;
		return $this->do_filter( 'metabox/diacritics', $diacritics, $locale );
	}

	/**
	 * Load required screen.
	 *
	 * @param string $manual To load any screen manually.
	 */
	public function load_screen( $manual = '' ) {
		if ( Admin_Helper::is_post_edit() || 'post' === $manual || Helper::is_site_editor() ) {
			$this->screen = new Post_Screen();
			return;
		}

		$doing_quick_edit = Param::request( 'action' ) === 'inline-save-tax';
		if ( Admin_Helper::is_term_edit() || 'term' === $manual || $doing_quick_edit ) {
			$this->screen = new Taxonomy_Screen();
			return;
		}

		if ( User_Screen::is_enable() || 'user' === $manual ) {
			$this->screen = new User_Screen();
			return;
		}
	}
}
PK     ”ŠU]Gm„æË  Ë  +  includes/admin/metabox/interface-screen.phpnu „[µü¤        <?php
/**
 * An interface for getting values for screen.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

defined( 'ABSPATH' ) || exit;

/**
 * Screen.
 */
interface IScreen {

	/**
	 * Get object ID.
	 *
	 * @return int
	 */
	public function get_object_id();

	/**
	 * Get object type
	 *
	 * @return string
	 */
	public function get_object_type();

	/**
	 * Get object types to register metabox to
	 *
	 * @return array
	 */
	public function get_object_types();

	/**
	 * Enqueue Styles and Scripts required for screen
	 */
	public function enqueue();

	/**
	 * Get values for localize
	 *
	 * @return array
	 */
	public function get_values();

	/**
	 * Get object values for localize
	 *
	 * @return array
	 */
	public function get_object_values();

	/**
	 * Get analysis to run.
	 *
	 * @return array
	 */
	public function get_analysis();
}
PK     ”ŠU]L Mà0  à0  ,  includes/admin/metabox/class-post-screen.phpnu „[µü¤        <?php
/**
 * The post metabox screen.
 *
 * @since      1.0.25
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Editor;
use RankMath\Frontend_SEO_Score;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Post metabox class.
 */
class Post_Screen implements IScreen {

	use Hooker;

	/**
	 * Hold primary taxonomy
	 *
	 * @var object
	 */
	private $primary_taxonomy = null;

	/**
	 * Class construct
	 */
	public function __construct() {
		$this->filter( 'rank_math/researches/tests', 'remove_tests', 10, 2 );
	}

	/**
	 * Get object id
	 *
	 * @return int
	 */
	public function get_object_id() {
		global $post;

		return ! empty( $post->ID ) ? $post->ID : '';
	}

	/**
	 * Get object type
	 *
	 * @return string
	 */
	public function get_object_type() {
		return 'post';
	}

	/**
	 * Get object types to register metabox to
	 *
	 * @return array
	 */
	public function get_object_types() {
		return Helper::get_allowed_post_types();
	}

	/**
	 * Enqueue Styles and Scripts required for screen.
	 */
	public function enqueue() {
		$is_elementor    = Helper::is_elementor_editor();
		$is_block_editor = Helper::is_block_editor() && \rank_math_is_gutenberg();

		Helper::add_json( 'postType', get_post_type() );

		if ( ! $is_elementor ) {
			$this->enqueue_custom_fields();
		}

		wp_register_script(
			'rank-math-formats',
			rank_math()->plugin_url() . 'assets/admin/js/gutenberg-formats.js',
			[],
			rank_math()->version,
			true
		);

		if ( $is_block_editor || $is_elementor ) {
			$this->enqueue_commons();
		}

		if ( $is_block_editor && ! $is_elementor && Editor::can_add_editor() ) {
			$this->enqueue_for_gutenberg();
			return;
		}

		if ( $is_elementor ) {
			return;
		}

		// Classic.
		if ( Helper::is_block_editor() ) {
			wp_enqueue_script( 'rank-math-formats' );
			wp_enqueue_script( 'rank-math-primary-term', rank_math()->plugin_url() . 'assets/admin/js/gutenberg-primary-term.js', [], rank_math()->version, true );
		}
	}

	/**
	 * Get values for localize.
	 *
	 * @return array
	 */
	public function get_values() {
		$post_type        = $this->get_current_post_type();
		$link_suggestions = Helper::get_settings( 'titles.pt_' . $post_type . '_link_suggestions' );

		return [
			'parentDomain'           => Url::get_domain( home_url() ),
			'noFollowDomains'        => Str::to_arr_no_empty( Helper::get_settings( 'general.nofollow_domains' ) ),
			'noFollowExcludeDomains' => Str::to_arr_no_empty( Helper::get_settings( 'general.nofollow_exclude_domains' ) ),
			'noFollowExternalLinks'  => Helper::get_settings( 'general.nofollow_external_links' ),
			'featuredImageNotice'    => esc_html__( 'The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites.', 'seo-by-rank-math' ),
			'pluginReviewed'         => $this->plugin_reviewed(),
			'postSettings'           => [
				'linkSuggestions'     => $link_suggestions,
				'useFocusKeyword'     => 'focus_keywords' === Helper::get_settings( 'titles.pt_' . $post_type . '_ls_use_fk' ),
				'linkSuggestionsData' => (
					Helper::has_cap( 'link_builder' ) &&
					false !== $link_suggestions &&
					! empty( rank_math()->admin )
				) ? ( rank_math()->admin->get_link_suggestions( get_post() ) ?? [] ) : false,
			],
			'frontEndScore'          => Frontend_SEO_Score::show_on(),
			'postName'               => get_post_field( 'post_name', get_post() ),
			'permalinkFormat'        => $this->get_permalink_format(),
			'showLockModifiedDate'   => Editor::can_add_lock_modified_date(),
			'assessor'               => [
				'focusKeywordLink' => admin_url( 'edit.php?focus_keyword=%focus_keyword%&post_type=%post_type%' ),
				'hasTOCPlugin'     => $this->has_toc_plugin(),
				'primaryTaxonomy'  => $this->get_primary_taxonomy(),
			],
		];
	}

	/**
	 * Get object values for localize
	 *
	 * @return array
	 */
	public function get_object_values() {
		global $post;
		if ( empty( $post ) ) {
			return [];
		}

		return [
			'primaryTerm'         => $this->get_primary_term_id(),
			'authorName'          => get_the_author_meta( 'display_name', $post->post_author ),
			'titleTemplate'       => Helper::get_settings( "titles.pt_{$post->post_type}_title", '%title% %sep% %sitename%' ),
			'descriptionTemplate' => Helper::get_settings( "titles.pt_{$post->post_type}_description", '' ),
			'showScoreFrontend'   => ! Helper::get_post_meta( 'dont_show_seo_score', $this->get_object_id() ),
			'lockModifiedDate'    => ! empty( Helper::get_post_meta( 'lock_modified_date', $this->get_object_id() ) ),
		];
	}

	/**
	 * Get analysis to run.
	 *
	 * @return array
	 */
	public function get_analysis() {
		$tests = [
			'contentHasTOC'             => true,
			'contentHasShortParagraphs' => true,
			'contentHasAssets'          => true,
			'keywordInTitle'            => true,
			'keywordInMetaDescription'  => true,
			'keywordInPermalink'        => true,
			'keywordIn10Percent'        => true,
			'keywordInContent'          => true,
			'keywordInSubheadings'      => true,
			'keywordInImageAlt'         => true,
			'keywordDensity'            => true,
			'keywordNotUsed'            => true,
			'lengthContent'             => true,
			'lengthPermalink'           => true,
			'linksHasInternal'          => true,
			'linksHasExternals'         => true,
			'linksNotAllExternals'      => true,
			'titleStartWithKeyword'     => true,
			'titleSentiment'            => true,
			'titleHasPowerWords'        => true,
			'titleHasNumber'            => true,
			'hasContentAI'              => true,
		];

		return $tests;
	}

	/**
	 * Remove few tests on static Homepage.
	 *
	 * @since 1.0.42
	 *
	 * @param array  $tests Array of tests with score.
	 * @param string $type  Object type. Can be post, user or term.
	 */
	public function remove_tests( $tests, $type ) {
		if ( ! Admin_Helper::is_home_page() && ! Admin_Helper::is_posts_page() ) {
			return $tests;
		}

		return array_diff_assoc( $tests, $this->exclude_tests() );
	}

	/**
	 * Function to get the permalink format.
	 *
	 * @since 1.0.69.2
	 */
	private function get_permalink_format() {
		$post_id = $this->get_object_id();
		$post    = get_post( $post_id );

		if ( empty( $post ) ) {
			return;
		}

		if ( 'attachment' === $post->post_type ) {
			return str_replace( $post->post_name, '%postname%', get_permalink( $post ) );
		}

		if ( ( 'auto-draft' !== $post->post_status || 'post' !== $post->post_type ) && function_exists( 'get_sample_permalink' ) ) {
			$sample_permalink = \get_sample_permalink( $post_id, null, null );
			return isset( $sample_permalink[0] ) ? $sample_permalink[0] : home_url();
		}

		$post_temp              = $post;
		$post_temp->post_status = 'publish';
		return get_permalink( $post_temp, true );
	}

	/**
	 * Tests to exclude on Homepage and Blog page.
	 *
	 * @since 1.0.43
	 *
	 * @return array Array of excluded tests.
	 */
	private function exclude_tests() {
		if ( Admin_Helper::is_home_page() ) {
			return [
				'contentHasTOC'        => true,
				'keywordInPermalink'   => true,
				'lengthPermalink'      => true,
				'linksHasExternals'    => true,
				'linksNotAllExternals' => true,
				'titleSentiment'       => true,
				'titleHasPowerWords'   => true,
				'titleHasNumber'       => true,
			];
		}

		return [
			'contentHasTOC'             => true,
			'contentHasShortParagraphs' => true,
			'keywordIn10Percent'        => true,
			'keywordInContent'          => true,
			'keywordInSubheadings'      => true,
			'keywordDensity'            => true,
			'lengthContent'             => true,
			'linksHasInternal'          => true,
			'linksHasExternals'         => true,
			'linksNotAllExternals'      => true,
		];
	}

	/**
	 * Enqueque scripts common for all builders.
	 */
	private function enqueue_commons() {
		wp_register_style( 'rank-math-editor', rank_math()->plugin_url() . 'assets/admin/css/gutenberg.css', [], rank_math()->version );
	}

	/**
	 * Enqueue script to analyze custom fields data.
	 */
	private function enqueue_custom_fields() {
		global $post;
		if ( empty( $post ) ) {
			return;
		}

		$custom_fields = Str::to_arr_no_empty( Helper::get_settings( 'titles.pt_' . $post->post_type . '_analyze_fields' ) );
		if ( empty( $custom_fields ) ) {
			return;
		}

		$file = Helper::is_block_editor() ? 'glue-custom-fields.js' : 'custom-fields.js';

		wp_enqueue_script( 'rank-math-custom-fields', rank_math()->plugin_url() . 'assets/admin/js/' . $file, [ 'wp-hooks', 'rank-math-analyzer' ], rank_math()->version, true );
		Helper::add_json( 'analyzeFields', $custom_fields );
	}

	/**
	 * Enqueue scripts for gutenberg screen.
	 */
	private function enqueue_for_gutenberg() {
		wp_enqueue_style( 'rank-math-editor' );
		wp_enqueue_script( 'rank-math-formats' );
		wp_enqueue_script(
			'rank-math-editor',
			rank_math()->plugin_url() . 'assets/admin/js/gutenberg.js',
			[
				'clipboard',
				'wp-autop',
				'wp-blocks',
				'wp-components',
				'wp-editor',
				'wp-edit-post',
				'wp-element',
				'wp-i18n',
				'wp-plugins',
				'wp-wordcount',
				'rank-math-analyzer',
				'rank-math-app',
			],
			rank_math()->version,
			true
		);
	}

	/**
	 * Get current post type.
	 *
	 * @return string
	 */
	private function get_current_post_type() {
		$post_type = get_post_type();
		if ( function_exists( 'get_current_screen' ) ) {
			$screen    = get_current_screen();
			$post_type = isset( $screen->post_type ) ? $screen->post_type : $post_type;
		}

		return $post_type;
	}

	/**
	 * Check if any TOC plugin detected
	 *
	 * @return bool
	 */
	private function has_toc_plugin() {
		if ( \defined( 'ELEMENTOR_PRO_VERSION' ) ) {
			return true;
		}

		$plugins_found  = [];
		$active_plugins = get_option( 'active_plugins' );
		$active_plugins = is_multisite() ? array_merge( $active_plugins, array_keys( get_site_option( 'active_sitewide_plugins', [] ) ) ) : $active_plugins;

		/**
		 * Allow developers to add plugins to the TOC list.
		 *
		 * @param array TOC plugins.
		 */
		$toc_plugins = $this->do_filter(
			'researches/toc_plugins',
			[
				'wp-shortcode/wp-shortcode.php'         => 'WP Shortcode by RankMath',
				'wp-shortcode-pro/wp-shortcode-pro.php' => 'WP Shortcode Pro by RankMath',
			]
		);

		foreach ( $toc_plugins as $plugin_slug => $plugin_name ) {
			if ( in_array( $plugin_slug, $active_plugins, true ) !== false ) {
				$plugins_found[ $plugin_slug ] = $plugin_name;
			}
		}

		return empty( $plugins_found ) ? false : $plugins_found;
	}

	/**
	 * Plugin already reviewed.
	 *
	 * @return bool
	 */
	private function plugin_reviewed() {
		return get_option( 'rank_math_already_reviewed' ) || Helper::get_current_time() < get_option( 'rank_math_install_date' ) + ( 2 * WEEK_IN_SECONDS );
	}

	/**
	 * Get primary taxonomy.
	 *
	 * @return bool|array
	 */
	private function get_primary_taxonomy() {
		if ( ! is_null( $this->primary_taxonomy ) ) {
			return $this->primary_taxonomy;
		}

		$taxonomy  = false;
		$post_type = $this->get_current_post_type();

		/**
		 * Filter: Allow disabling the primary term feature.
		 * 'rank_math/primary_term' is deprecated,
		 * use 'rank_math/admin/disable_primary_term' instead.
		 *
		 * @param bool $return True to disable.
		 */
		if ( false === apply_filters_deprecated( 'rank_math/primary_term', [ false ], '1.0.43', 'rank_math/admin/disable_primary_term' )
			&& false === $this->do_filter( 'admin/disable_primary_term', false ) ) {
			$taxonomy = Helper::get_settings( 'titles.pt_' . $post_type . '_primary_taxonomy', false );
		}

		if ( ! $taxonomy ) {
			return false;
		}

		$taxonomy = get_taxonomy( $taxonomy );
		if ( empty( $taxonomy ) ) {
			return false;
		}

		$this->primary_taxonomy = [
			'title'         => $taxonomy->labels->singular_name,
			'name'          => $taxonomy->name,
			'singularLabel' => $taxonomy->labels->singular_name,
			'restBase'      => ( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name,
		];

		return $this->primary_taxonomy;
	}

	/**
	 * Get primary term ID.
	 *
	 * @return int
	 */
	private function get_primary_term_id() {
		$taxonomy = $this->get_primary_taxonomy();
		if ( ! $taxonomy ) {
			return 0;
		}

		$id = Helper::get_post_meta( 'primary_' . $taxonomy['name'], $this->get_object_id() );

		return $id ? absint( $id ) : 0;
	}
}
PK     ”ŠU]¥¯}£&0  &0  (  includes/admin/metabox/class-metabox.phpnu „[µü¤        <?php
/**
 * The metabox functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Metabox class.
 */
class Metabox implements Runner {

	use Hooker;

	/**
	 * Metabox id.
	 *
	 * @var string
	 */
	private $metabox_id = 'rank_math_metabox';

	/**
	 * Screen object.
	 *
	 * @var Screen
	 */
	private $screen;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		if ( $this->dont_load() ) {
			return;
		}

		$this->screen = new Screen();
		if ( $this->screen->is_loaded() ) {
			$this->action( 'add_meta_boxes', 'add_main_metabox', 30 );
			$this->action( 'rank_math/admin/enqueue_scripts', 'enqueue' );

			if ( Helper::is_site_editor() ) {
				$this->action( 'enqueue_block_editor_assets', 'enqueue' );
			}

			if ( Helper::has_cap( 'link_builder' ) ) {
				$this->action( 'add_meta_boxes', 'add_link_suggestion_metabox', 30 );
			}

			// Add taxonomy metabox hooks.
			$this->action( 'init', 'add_taxonomy_metabox_hooks', 9999 );

			// Add user metabox hooks.
			$this->action( 'edit_user_profile', 'add_user_profile_metabox' );
			$this->action( 'show_user_profile', 'add_user_profile_metabox' );
		}

		$this->action( 'save_post', 'save_meta', 10, 2 );
		$this->action( 'edit_term', 'save_term_meta', 10, 3 );
		$this->action( 'save_post', 'invalidate_facebook_object_cache', 10, 2 );
	}

	/**
	 * Enqueue styles and scripts for the metabox.
	 */
	public function enqueue() {
		/**
		 * Allow other plugins to enqueue/dequeue admin styles or scripts before plugin assets.
		 */
		$this->do_action( 'admin/before_editor_scripts' );

		$screen = get_current_screen();
		$js     = rank_math()->plugin_url() . 'assets/admin/js/';

		$this->enqueue_commons();
		$this->screen->enqueue();
		$this->screen->localize();
		$this->enqueue_translation();
		rank_math()->variables->setup();
		rank_math()->variables->setup_json();

		$is_gutenberg = Helper::is_block_editor() && \rank_math_is_gutenberg();
		$is_elementor = 'elementor' === Param::get( 'action' );
		Helper::add_json( 'knowledgegraphType', Helper::get_settings( 'titles.knowledgegraph_type' ) );
		if (
			! $is_gutenberg &&
			! $is_elementor &&
			'rank_math_schema' !== $screen->post_type &&
			'edit-tags' !== $screen->base
		) {
			wp_enqueue_style(
				'rank-math-metabox',
				rank_math()->plugin_url() . 'assets/admin/css/metabox.css',
				[
					'rank-math-common',
					'rank-math-editor',
					'wp-components',
				],
				rank_math()->version
			);

			wp_enqueue_media();
			wp_enqueue_script(
				'rank-math-editor',
				rank_math()->plugin_url() . 'assets/admin/js/classic.js',
				[
					'clipboard',
					'wp-hooks',
					'moment',
					'wp-date',
					'wp-data',
					'wp-api-fetch',
					'wp-components',
					'wp-element',
					'wp-i18n',
					'wp-url',
					'wp-media-utils',
					'rank-math-common',
					'rank-math-analyzer',
					'wp-block-editor',
					'rank-math-app',
				],
				rank_math()->version,
				true
			);
		}

		$this->do_action( 'enqueue_scripts/assessor' );

		/**
		 * Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
		 */
		$this->do_action( 'admin/editor_scripts', $this->screen );
	}

	/**
	 * Add main metabox.
	 */
	public function add_main_metabox() {
		if ( $this->can_add_metabox() ) {
			return;
		}

		$object_types = $this->screen->get_object_types();

		// Add metabox for post types.
		if ( ! empty( $object_types ) ) {
			add_meta_box(
				$this->metabox_id,
				esc_html__( 'Rank Math SEO', 'seo-by-rank-math' ),
				[ $this, 'render_main_metabox' ],
				$object_types,
				'normal',
				$this->get_priority(),
				[ '__back_compat_meta_box' => \rank_math_is_gutenberg() ]
			);
		}
	}

	/**
	 * Render main metabox content.
	 *
	 * @param WP_Post $post Current post object.
	 */
	public function render_main_metabox( $post ) {
		// Add nonce for security.
		wp_nonce_field( 'rank_math_save_meta', 'rank_math_metabox_nonce' );

		echo '<div class="rank-math-metabox-wrap rank-math-sidebar-panel">';
		echo '<div id="rank-math-metabox-wrapper"></div>';

		// Add primary term hidden fields.
		$this->render_primary_term_fields();

		echo '</div>';
	}

	/**
	 * Render taxonomy metabox content.
	 *
	 * @param WP_Term $term     Current term object.
	 * @param string  $taxonomy Current taxonomy slug.
	 */
	public function render_taxonomy_metabox( $term, $taxonomy ) {
		// Add nonce for security.
		wp_nonce_field( 'rank_math_save_term_meta', 'rank_math_term_metabox_nonce' );
		?>
		<div class="form-table rank-math-metabox-wrap rank-math-metabox-frame postbox">
			<div id="setting-panel-container-<?php echo esc_attr( $this->metabox_id ); ?>" class="rank-math-sidebar-panel rank-math-tabs">
				<h2 class="rank-math-metabox-frame-title"><?php esc_html_e( 'Rank Math SEO', 'seo-by-rank-math' ); ?></h2>
				<div id="rank-math-metabox-wrapper"></div>
			</div>
		</div>
		<?php
	}

	/**
	 * Add link suggestion metabox.
	 */
	public function add_link_suggestion_metabox() {
		if ( 'classic' !== Helper::get_current_editor() ) {
			return;
		}

		$allowed_post_types = [];
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			if ( false === Helper::get_settings( 'titles.pt_' . $post_type . '_link_suggestions' ) ) {
				continue;
			}

			$allowed_post_types[] = $post_type;
		}

		// Early bail.
		if ( empty( $allowed_post_types ) ) {
			return;
		}

		add_meta_box(
			$this->metabox_id . '_link_suggestions',
			esc_html__( 'Link Suggestions', 'seo-by-rank-math' ),
			[ $this, 'render_link_suggestion_metabox' ],
			$allowed_post_types,
			'side',
			'default'
		);
	}

	/**
	 * Render link suggestion metabox content.
	 *
	 * @param WP_Post $post Current post object.
	 */
	public function render_link_suggestion_metabox( $post ) {
		echo '<div id="rank-math-link-suggestions-wrapper"></div>';
	}

	/**
	 * Save post meta handler.
	 *
	 * @param int     $post_id Post ID.
	 * @param WP_Post $post    Post object.
	 */
	public function save_meta( $post_id, $post ) {
		// Verify nonce.
		$nonce = isset( $_POST['rank_math_metabox_nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['rank_math_metabox_nonce'] ) ) : '';
		if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_save_meta' ) ) {
			return;
		}

		// Check autosave.
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
			return;
		}

		// Check permissions.
		if ( ! current_user_can( 'edit_post', $post_id ) ) {
			return;
		}

		/**
		 * Hook into save handler for main metabox.
		 *
		 * @param int     $post_id Post ID.
		 * @param WP_Post $post    Post object.
		 */
		$this->do_action( 'metabox/process_fields', $post_id, $post );
	}

	/**
	 * Save term meta handler.
	 *
	 * @param int    $term_id  Term ID.
	 * @param int    $tt_id    Term taxonomy ID.
	 * @param string $taxonomy Taxonomy slug.
	 */
	public function save_term_meta( $term_id, $tt_id, $taxonomy ) {
		// Verify nonce.
		$nonce = isset( $_POST['rank_math_term_metabox_nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['rank_math_term_metabox_nonce'] ) ) : '';
		if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_save_term_meta' ) ) {
			return;
		}

		/**
		 * Hook into save handler for taxonomy metabox.
		 *
		 * @param int    $term_id  Term ID.
		 * @param int    $tt_id    Term taxonomy ID.
		 * @param string $taxonomy Taxonomy slug.
		 */
		$this->do_action( 'metabox/process_term_fields', $term_id, $tt_id, $taxonomy );
	}

	/**
	 * Invalidate facebook object cache for the post.
	 *
	 * @param int     $post_id Post ID.
	 * @param WP_Post $post    Post object.
	 */
	public function invalidate_facebook_object_cache( $post_id, $post ) {
		// Check if any Facebook meta fields were updated.
		$facebook_fields = [ 'rank_math_facebook_title', 'rank_math_facebook_image', 'rank_math_facebook_description' ];
		$has_update      = false;

		foreach ( $facebook_fields as $field ) {
			if ( isset( $_POST[ $field ] ) ) {
				$has_update = true;
				break;
			}
		}

		// Early Bail!
		if ( ! $has_update ) {
			return;
		}

		$app_id = Helper::get_settings( 'titles.facebook_app_id' );
		$secret = Helper::get_settings( 'titles.facebook_secret' );

		// Early bail!
		if ( ! $app_id || ! $secret ) {
			return;
		}

		wp_remote_post(
			'https://graph.facebook.com/',
			[
				'body' => [
					'id'           => get_permalink( $post_id ),
					'scrape'       => true,
					'access_token' => $app_id . '|' . $secret,
				],
			]
		);
	}

	/**
	 * Add taxonomy metabox hooks.
	 */
	public function add_taxonomy_metabox_hooks() {
		if ( $this->can_add_metabox() ) {
			return;
		}

		$taxonomies = Helper::get_allowed_taxonomies();
		if ( empty( $taxonomies ) ) {
			return;
		}

		$this->screen->get_object_types();

		// Add metabox for taxonomies.
		foreach ( $taxonomies as $taxonomy ) {
			// For editing existing terms - renders after the table.
			add_action( "{$taxonomy}_edit_form", [ $this, 'render_taxonomy_metabox' ], 11, 2 );
		}
	}

	/**
	 * Add SEO metabox on the User profile page.
	 */
	public function add_user_profile_metabox() {
		if ( $this->can_add_metabox() ) {
			return;
		}

		?>
		<div class="form-table rank-math-metabox-wrap rank-math-metabox-frame postbox">
			<div id="setting-panel-container-<?php echo esc_attr( $this->metabox_id ); ?>" class="rank-math-sidebar-panel rank-math-tabs">
				<h2 class="rank-math-metabox-frame-title"><?php esc_html_e( 'Rank Math SEO', 'seo-by-rank-math' ); ?></h2>
				<div id="rank-math-metabox-wrapper"></div>
			</div>
		</div>
		<?php
	}

	/**
	 * Get metabox priority
	 *
	 * @return string
	 */
	private function get_priority() {
		$post_type = Param::get( 'post_type' );
		if ( ! $post_type ) {
			$post_type = get_post_type( Param::get( 'post', 0, FILTER_VALIDATE_INT ) );
		}

		$priority = 'product' === $post_type ? 'default' : 'high';

		/**
		 * Filter: Change metabox priority.
		 */
		return $this->do_filter( 'metabox/priority', $priority );
	}

	/**
	 * Can add metabox
	 *
	 * @return bool
	 */
	private function can_add_metabox() {
		return ! Helper::has_cap( 'onpage_general' ) &&
			! Helper::has_cap( 'onpage_advanced' ) &&
			! Helper::has_cap( 'onpage_snippet' ) &&
			! Helper::has_cap( 'onpage_social' );
	}

	/**
	 * Can load metabox.
	 *
	 * @return bool
	 */
	private function dont_load() {
		return Helper::is_heartbeat() || Helper::is_ajax() ||
			( class_exists( 'Vc_Manager' ) && Param::get( 'vc_action' ) ) ||
			is_network_admin();
	}

	/**
	 * Enqueque scripts common for all builders.
	 */
	private function enqueue_commons() {
		wp_register_style( 'rank-math-editor', rank_math()->plugin_url() . 'assets/admin/css/gutenberg.css', [ 'rank-math-common' ], rank_math()->version );
		wp_register_script( 'rank-math-analyzer', rank_math()->plugin_url() . 'assets/admin/js/analyzer.js', [ 'lodash', 'wp-autop', 'wp-wordcount', 'wp-url' ], rank_math()->version, true );
	}

	/**
	 * Enqueue translation.
	 */
	private function enqueue_translation() {
		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( 'rank-math-analyzer', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
			wp_set_script_translations( 'rank-math-app', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		}
	}

	/**
	 * Render primary term hidden fields.
	 */
	private function render_primary_term_fields() {
		/**
		 * Allow disabling the primary term feature.
		 *
		 * @param bool $return True to disable.
		 */
		if ( true === $this->do_filter( 'admin/disable_primary_term', false ) ) {
			return;
		}

		$taxonomies = Helper::get_object_taxonomies( Helper::get_post_type(), 'objects' );
		$taxonomies = wp_filter_object_list( $taxonomies, [ 'hierarchical' => true ], 'and', 'name' );
		foreach ( $taxonomies as $taxonomy ) {
			$value = get_post_meta( get_the_ID(), 'rank_math_primary_' . $taxonomy, true );
			$value = $value ? $value : 0;
			printf(
				'<input type="hidden" id="rank_math_primary_%1$s" name="rank_math_primary_%1$s" value="%2$s" data-primary-term="%1$s" />',
				esc_attr( $taxonomy ),
				esc_attr( $value )
			);
		}
	}
}
PK     ”ŠU]~UÎƒ  ƒ  ,  includes/admin/metabox/class-user-screen.phpnu „[µü¤        <?php
/**
 * The metabox functionality of the plugin.
 *
 * @since      1.0.25
 * @package    RankMath
 * @subpackage RankMath\Admin\Metabox
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin\Metabox;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * User metabox class.
 */
class User_Screen implements IScreen {

	use Hooker;

	/**
	 * Class construct
	 */
	public function __construct() {}

	/**
	 * Get object ID.
	 *
	 * @return int
	 */
	public function get_object_id() {
		global $user_id;

		return $user_id;
	}

	/**
	 * Get object type
	 *
	 * @return string
	 */
	public function get_object_type() {
		return 'user';
	}

	/**
	 * Get object types to register metabox to
	 *
	 * @return array
	 */
	public function get_object_types() {
		return [ 'user' ];
	}

	/**
	 * Enqueue Styles and Scripts required for screen.
	 */
	public function enqueue() {
		wp_enqueue_media();
	}

	/**
	 * Get analysis to run.
	 *
	 * @return array
	 */
	public function get_analysis() {
		return [
			'keywordInTitle'           => true,
			'keywordInMetaDescription' => true,
			'keywordInPermalink'       => true,
			'keywordNotUsed'           => true,
			'titleStartWithKeyword'    => true,
		];
	}

	/**
	 * Get values for localize.
	 *
	 * @return array
	 */
	public function get_values() {
		global $wp_rewrite;
		return [
			'permalinkFormat' => ! empty( $wp_rewrite->author_structure ) ? home_url( $wp_rewrite->author_structure ) : home_url(),
		];
	}

	/**
	 * Get object values for localize
	 *
	 * @return array
	 */
	public function get_object_values() {
		return [
			'titleTemplate'       => Helper::get_settings( 'titles.author_archive_title', '%name% %sep% %sitename% %page%' ),
			'descriptionTemplate' => Helper::get_settings( 'titles.author_archive_description', '%user_description%' ),
		];
	}

	/**
	 * Is user metabox enabled.
	 *
	 * @return bool
	 */
	public static function is_enable() {
		return false === Helper::get_settings( 'titles.disable_author_archives' ) &&
			Helper::get_settings( 'titles.author_add_meta_box' ) &&
			Admin_Helper::is_user_edit();
	}
}
PK     ”ŠU]Ñ0ðö�d  �d  &  includes/admin/class-option-center.phpnu „[µü¤        <?php
/**
 * The option center of the plugin.
 *
 * @since      1.0.9
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\KB;
use RankMath\CMB2;
use RankMath\Helper;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Param;
use RankMath\Wizard\Search_Console;
use RankMath\Admin\Sanitize_Settings;

defined( 'ABSPATH' ) || exit;

/**
 * Option_Center class.
 */
class Option_Center implements Runner {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'init', 'register_general_settings', 125 );
		$this->action( 'init', 'register_title_settings', 125 );
		$this->filter( 'rank_math/settings/title', 'title_post_type_settings', 1 );
		$this->filter( 'rank_math/settings/title', 'title_taxonomy_settings', 1 );
		$this->filter( 'rank_math/settings/general', 'remove_unwanted_general_tabs', 1 );
		$this->action( 'admin_enqueue_scripts', 'enqueue_settings_translations', 11 );
	}

	/**
	 * General Settings.
	 */
	public function register_general_settings() {
		$tabs = [
			'links'       => [
				'icon'  => 'rm-icon rm-icon-link',
				'title' => esc_html__( 'Links', 'seo-by-rank-math' ),
				/* translators: Link to kb article */
				'desc'  => sprintf( esc_html__( 'Change how some of the links open and operate on your website. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'link-settings', 'Options Panel Links Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'seo-by-rank-math' ) . '</a>' ),
			],
			'breadcrumbs' => [
				'icon'      => 'rm-icon rm-icon-direction',
				'title'     => esc_html__( 'Breadcrumbs', 'seo-by-rank-math' ),
				'classes'   => 'rank-math-advanced-option',
				/* translators: Link to kb article */
				'desc'      => sprintf( esc_html__( 'Here you can set up the breadcrumbs function. %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'breadcrumbs', 'Options Panel Breadcrumbs Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>. <br/>' ),
				'after_row' => current_theme_supports( 'rank-math-breadcrumbs' ) ? '' : '<div class="notice notice-alt notice-warning warning inline rank-math-notice"><p>' . esc_html__( 'Use the following code in your theme template files to display breadcrumbs.', 'seo-by-rank-math' ) . ' <a href="' . KB::get( 'breadcrumbs-install', 'Options Panel Breadcrumbs Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'seo-by-rank-math' ) . '</a><br /><code>&lt;?php if (function_exists(\'rank_math_the_breadcrumbs\')) rank_math_the_breadcrumbs(); ?&gt;</code> OR <code>[rank_math_breadcrumb]</code></p></div>',
			],
			'webmaster'   => [
				'icon'  => 'rm-icon rm-icon-toolbox',
				'title' => esc_html__( 'Webmaster Tools', 'seo-by-rank-math' ),
				/* translators: Link to kb article */
				'desc'  => sprintf( esc_html__( 'Enter verification codes for third-party webmaster tools. %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'webmaster-tools', 'Options Panel Webmaster Tools Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.<br />' ),
			],
			'others'      => [
				'icon'    => 'rm-icon rm-icon-misc',
				'title'   => esc_html__( 'Others', 'seo-by-rank-math' ),
				/* translators: Link to kb article */
				'desc'    => sprintf( esc_html__( 'Change some uncommon but essential settings here. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'other-settings', 'Options Panel Others Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'classes' => 'rank-math-advanced-option',
			],
		];

		if ( is_super_admin() && 'rank-math-options-general' === Param::get( 'page' ) ) {
			Arr::insert(
				$tabs,
				[
					'htaccess' => [
						'icon'    => 'rm-icon rm-icon-htaccess',
						'title'   => esc_html__( 'Edit .htaccess', 'seo-by-rank-math' ),
						/* translators: Link to kb article */
						'desc'    => sprintf( esc_html__( 'Edit the contents of your .htaccess file easily. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'edit-htaccess', 'Options Panel htaccess Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
						'classes' => 'rank-math-advanced-option',
						'json'    => [
							'htaccessData' => Admin_Helper::get_htaccess_data(),
						],
					],
				],
				5
			);
		}

		/**
		 * Allow developers to add new sections in the General Settings.
		 *
		 * @param array $tabs
		 */
		$tabs = $this->do_filter( 'settings/general', $tabs );

		new Register_Options_Page(
			[
				'key'        => 'rank-math-options-general',
				'title'      => esc_html__( 'SEO Settings', 'seo-by-rank-math' ),
				'menu_title' => esc_html__( 'General Settings', 'seo-by-rank-math' ),
				'capability' => 'rank_math_general',
				'folder'     => 'general',
				'tabs'       => $tabs,
			]
		);
	}

	/**
	 * Remove unneeded tabs from the General Settings.
	 *
	 * @param  array $tabs Hold tabs for optional panel.
	 * @return array
	 */
	public function remove_unwanted_general_tabs( $tabs ) {
		if ( is_multisite() ) {
			unset( $tabs['robots'] );
		}

		if ( ! Helper::has_cap( 'edit_htaccess' ) && is_multisite() ) {
			unset( $tabs['htaccess'] );
		}

		return $tabs;
	}

	/**
	 * Register SEO Titles & Meta Settings.
	 */
	public function register_title_settings() {
		$homepage_notice = '';
		if ( 'page' === get_option( 'show_on_front' ) ) {
			$home_page_id = get_option( 'page_on_front' );
			if ( ! $home_page_id ) {
				$home_page_id = get_option( 'page_for_posts' );
			}

			$homepage_notice = '<a href="' . admin_url( 'post.php?post=' . $home_page_id . '&action=edit' ) . '">' . esc_html__( 'Edit Page: ', 'seo-by-rank-math' ) . get_the_title( $home_page_id ) . '</a>';
		}
		$tabs = [
			'global'   => [
				'icon'  => 'rm-icon rm-icon-settings',
				'title' => esc_html__( 'Global Meta', 'seo-by-rank-math' ),
				/* translators: Link to KB article */
				'desc'  => sprintf( esc_html__( 'Change Global meta settings that take effect across your website. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'titles-meta', 'Options Panel Meta Global Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'json'  => [
					'overlayImages' => array_merge( [ '' => __( 'Off', 'seo-by-rank-math' ) ], Helper::choices_overlay_images( 'names' ) ),
				],
			],
			'local'    => [
				'icon'      => 'rm-icon rm-icon-local-seo',
				'title'     => esc_html__( 'Local SEO', 'seo-by-rank-math' ),
				/* translators: Redirection page url */
				'desc'      => sprintf( wp_kses_post( __( 'Optimize for local searches and Knowledge Graph using these settings. %s.', 'seo-by-rank-math' ) ), '<a href="' . KB::get( 'local-seo-settings', 'Options Panel Meta Local Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'after_row' => '<div class="notice notice-alt notice-info info inline rank-math-notice"><p>' . __( 'Use the <code>[rank_math_contact_info]</code> shortcode to display contact information in a nicely formatted way. You should also claim your business on Google if you have not already.', 'seo-by-rank-math' ) . '</p></div>',
			],
			'social'   => [
				'icon'  => 'rm-icon rm-icon-social',
				'title' => esc_html__( 'Social Meta', 'seo-by-rank-math' ),
				/* translators: Link to social setting KB article */
				'desc'  => sprintf( esc_html__( "Add social account information to your website's Schema and Open Graph. %s.", 'seo-by-rank-math' ), '<a href="' . KB::get( 'social-meta-settings', 'Options Panel Meta Social Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'seo-by-rank-math' ) . '</a>' ),
			],
			'homepage' => [
				'icon'  => 'rm-icon rm-icon-home',
				'title' => esc_html__( 'Homepage', 'seo-by-rank-math' ),
				'desc'  => sprintf(
					/* translators: Link to KB article */
					esc_html__( 'Add SEO meta and OpenGraph details to your homepage. %s.', 'seo-by-rank-math' ),
					'<a href="' . KB::get( 'homepage-settings', 'Options Panel Meta Home Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>'
				),
				'json'  => [
					'staticHomePageNotice' => $homepage_notice,
				],
			],
			'author'   => [
				'icon'  => 'rm-icon rm-icon-users',
				'title' => esc_html__( 'Authors', 'seo-by-rank-math' ),
				/* translators: Link to KB article */
				'desc'  => sprintf( esc_html__( 'Change SEO options related to the author archives. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'author-settings', 'Options Panel Meta Author Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'json'  => [
					'disableAutorArchive' => $this->do_filter( 'settings/titles/disable_author_archives', 'off' ),
				],
			],
			'misc'     => [
				'icon'  => 'rm-icon rm-icon-misc',
				'title' => esc_html__( 'Misc Pages', 'seo-by-rank-math' ),
				/* translators: Link to KB article */
				'desc'  => sprintf( esc_html__( 'Customize SEO meta settings of pages like search results, 404s, etc. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'misc-settings', 'Options Panel Meta Misc Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
			],
		];

		/**
		 * Allow developers to add new section in the Title Settings.
		 *
		 * @param array $tabs
		 */
		$tabs = $this->do_filter( 'settings/title', $tabs );

		new Register_Options_Page(
			[
				'key'        => 'rank-math-options-titles',
				'title'      => esc_html__( 'SEO Titles &amp; Meta', 'seo-by-rank-math' ),
				'menu_title' => esc_html__( 'Titles &amp; Meta', 'seo-by-rank-math' ),
				'capability' => 'rank_math_titles',
				'folder'     => 'titles',
				'tabs'       => $tabs,
			]
		);

		if ( is_admin() ) {
			Helper::add_json( 'postTitle', 'Post Title' );
			Helper::add_json( 'postUri', home_url( '/post-title' ) );
			Helper::add_json( 'blogName', get_bloginfo( 'name' ) );
		}
	}

	/**
	 * Add post type tabs in the Title Settings panel.
	 *
	 * @param  array $tabs Holds the tabs of the options panel.
	 * @return array
	 */
	public function title_post_type_settings( $tabs ) {
		$icons = Helper::choices_post_type_icons();
		$links = [
			'post'       => '<a href="' . KB::get( 'post-settings', 'Options Panel Meta Posts Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'page'       => '<a href="' . KB::get( 'page-settings', 'Options Panel Meta Pages Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'product'    => '<a href="' . KB::get( 'product-settings', 'Options Panel Meta Products Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'attachment' => '<a href="' . KB::get( 'media-settings', 'Options Panel Meta Attachments Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
		];

		$names = [
			'post'       => 'single %s',
			'page'       => 'single %s',
			'product'    => 'product pages',
			'attachment' => 'media %s',
		];

		$tabs['p_types'] = [
			'title' => esc_html__( 'Post Types:', 'seo-by-rank-math' ),
			'type'  => 'separator',
			'name'  => 'p_types_separator',
		];

		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			$obj             = get_post_type_object( $post_type );
			$link            = isset( $links[ $obj->name ] ) ? $links[ $obj->name ] : '';
			$obj_name        = isset( $names[ $obj->name ] ) ? sprintf( $names[ $obj->name ], $obj->name ) : $obj->name;
			$is_attachment   = $post_type === 'attachment';
			$richsnp_default = 'off';
			if ( ( class_exists( 'WooCommerce' ) && 'product' === $post_type ) || ( class_exists( 'Easy_Digital_Downloads' ) && 'download' === $post_type ) ) {
				$richsnp_default = 'product';
			}
			if ( $post_type === 'post' ) {
				$richsnp_default = 'article';
			}

			$primary_taxonomy_hash = [
				'post'    => 'category',
				'product' => 'product_cat',
			];

			$tabs[ 'post-type-' . $obj->name ] = [
				'title'     => $is_attachment ? esc_html__( 'Attachments', 'seo-by-rank-math' ) : $obj->label,
				'icon'      => isset( $icons[ $obj->name ] ) ? $icons[ $obj->name ] : $icons['default'],
				/* translators: 1. post type name 2. link */
				'desc'      => sprintf( esc_html__( 'Change Global SEO, Schema, and other settings for %1$s. %2$s', 'seo-by-rank-math' ), $obj_name, $link ),
				'post_type' => $obj->name,
				'file'      => rank_math()->includes_dir() . 'settings/titles/post-types.php',
				'classes'   => 'attachment' === $post_type ? 'rank-math-advanced-option' : '',
				'json'      => [
					'isWooCommerceActive' => class_exists( 'WooCommerce' ),
					'isEddActive'         => class_exists( 'Easy_Digital_Downloads' ),
					'isWebStoriesActive'  => defined( 'WEBSTORIES_VERSION' ),
					$post_type            => [
						'title'                => $is_attachment ? esc_html__( 'Attachments', 'seo-by-rank-math' ) : $obj->label,
						'name'                 => $is_attachment ? esc_html__( 'Media', 'seo-by-rank-math' ) : $obj->labels->singular_name,
						'schemaTypes'          => Helper::choices_rich_snippet_types( esc_html__( 'None (Click here to set one)', 'seo-by-rank-math' ), $post_type ),
						'taxonomies'           => Helper::get_object_taxonomies( $post_type ),
						'hasArchive'           => $obj->has_archive,
						'customRobots'         => false,
						'schemaDefault'        => $this->do_filter( 'settings/snippet/type', $richsnp_default, $post_type ),
						'articleType'          => $this->do_filter( 'settings/snippet/article_type', 'post' === $post_type ? 'BlogPosting' : 'Article', $post_type ),
						'enableLinkSuggestion' => $this->do_filter( 'settings/titles/link_suggestions', true, $post_type ),
						'primaryTaxonomy'      => isset( $primary_taxonomy_hash[ $post_type ] ) ? $primary_taxonomy_hash[ $post_type ] : 'off',
					],
				],
			];
		}

		return $tabs;
	}

	/**
	 * Add taxonomy tabs in the Title Settings panel.
	 *
	 * @param  array $tabs Holds the tabs of the options panel.
	 * @return array
	 */
	public function title_taxonomy_settings( $tabs ) {
		$icons = Helper::choices_taxonomy_icons();

		$hash_name = [
			'category'    => 'category archive pages',
			'product_cat' => 'Product category pages',
			'product_tag' => 'Product tag pages',
		];

		$hash_link = [
			'category'    => '<a href="' . KB::get( 'category-settings', 'Options Panel Meta Categories Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'post_tag'    => '<a href="' . KB::get( 'tag-settings', 'Options Panel Meta Tags Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'product_cat' => '<a href="' . KB::get( 'product-categories-settings', 'Options Panel Meta Product Categories Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
			'product_tag' => '<a href="' . KB::get( 'product-tags-settings', 'Options Panel Meta Product Tags Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>.',
		];

		$taxonomies_data = [];
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy ) {
			$attached = implode( ' + ', $taxonomy->object_type );

			$taxonomies_data[ $attached ][ $taxonomy->name ] = $taxonomy;
		}

		foreach ( $taxonomies_data as $attached => $taxonomies ) {
			// Separator.
			$tabs[ $attached ] = [
				'title' => ucwords( $attached ) . ':',
				'type'  => 'separator',
				'name'  => 'taxonomy_separator',
			];

			foreach ( $taxonomies as $taxonomy ) {
				$link          = isset( $hash_link[ $taxonomy->name ] ) ? $hash_link[ $taxonomy->name ] : '';
				$taxonomy_name = isset( $hash_name[ $taxonomy->name ] ) ? $hash_name[ $taxonomy->name ] : $taxonomy->label;

				$tabs[ 'taxonomy-' . $taxonomy->name ] = [
					'icon'     => isset( $icons[ $taxonomy->name ] ) ? $icons[ $taxonomy->name ] : $icons['default'],
					'title'    => $taxonomy->label,
					/* translators: 1. taxonomy name 2. link */
					'desc'     => sprintf( esc_html__( 'Change Global SEO, Schema, and other settings for %1$s. %2$s', 'seo-by-rank-math' ), $taxonomy_name, $link ),
					'taxonomy' => $taxonomy->name,
					'file'     => rank_math()->includes_dir() . 'settings/titles/taxonomies.php',
				];
			}
		}

		if ( isset( $tabs['taxonomy-post_format'] ) ) {
			$tab = $tabs['taxonomy-post_format'];
			unset( $tabs['taxonomy-post_format'] );
			$tab['title']      = esc_html__( 'Post Formats', 'seo-by-rank-math' );
			$tab['page_title'] = esc_html__( 'Post Formats Archive', 'seo-by-rank-math' );
			Arr::insert( $tabs, [ 'taxonomy-post_format' => $tab ], 5 );
		}

		return $tabs;
	}

	/**
	 * Save Settings data. Called from the `updateSettings` endpoint.
	 *
	 * @param string $type        Settings type.
	 * @param array  $settings    Settings data.
	 * @param array  $field_types Field ids with types use to sanitize the value.
	 * @param array  $updated     Array of field ids that were updated.
	 * @param bool   $is_reset    Whether the request is to reset the data.
	 * @return array
	 */
	public static function save_settings( $type, $settings, $field_types, $updated, $is_reset ) {
		$notifications = [];

		$update_htaccess = self::maybe_update_htaccess( $settings );
		if ( ! empty( $update_htaccess ) ) {
			$notifications[] = $update_htaccess;
		}

		$update_analytics = self::maybe_update_analytics( $settings, $updated );
		if ( ! empty( $update_analytics ) ) {
			$notifications[] = $update_analytics;
		}

		do_action( 'rank_math/settings/before_save', $type, $settings );
		foreach (
			[
				'htaccess_allow_editing',
				'htaccess_content',
				'searchConsole',
				'analyticsData',
				'analytics',
				'usage_tracking',
			] as $key
		) {
			if ( isset( $settings[ $key ] ) ) {
				unset( $settings[ $key ] );
			}
		}

		$settings = Sanitize_Settings::sanitize( $settings, $field_types );
		self::check_updated_fields( $updated, $is_reset );

		// Get current settings to compare with new settings.
		$current_settings = Helper::get_settings( $type );

		// Only update fields that have actually changed.
		$changed_settings = self::get_changed_settings( $current_settings, $settings );

		// If no settings have changed, return early.
		if ( empty( $changed_settings ) ) {
			return [
				'notifications' => $notifications,
				'settings'      => $current_settings,
			];
		}

		$map = [
			'general' => [ $changed_settings, null, null ],
			'titles'  => [ null, $changed_settings, null ],
			'sitemap' => [ null, null, $changed_settings ],
		];

		Helper::update_all_settings( ...$map[ $type ] );
		rank_math()->settings->reset();

		do_action( 'rank_math/settings/after_save', $type, $changed_settings );

		return [
			'notifications' => $notifications,
			'settings'      => apply_filters( 'rank_math/settings/saved_data', Helper::get_settings( $type ), $type ),
		];
	}

	/**
	 * Update Analytics data.
	 *
	 * @param array  $settings Settings data.
	 * @param string $updated  View that was updated.
	 */
	public static function maybe_update_analytics( $settings, $updated ) {
		if ( empty( $updated ) || ( ! in_array( 'searchConsole', $updated, true ) && ! in_array( 'analyticsData', $updated, true ) ) ) {
			return;
		}

		Search_Console::save( $settings );

		$days = $settings['console_caching_control'] ?? 90;

		$search_console = $settings['searchConsole'] ?? [];
		if ( in_array( 'searchConsole', $updated, true ) && ! empty( $search_console ) ) {
			$search_console['days'] = $days;

			$response = \RankMath\Analytics\AJAX::get()->do_save_analytic_profile( $search_console );
			if ( is_wp_error( $response ) ) {
				return [
					'error' => $response->get_error_message(),
				];
			}
		}

		$google_analytics = $settings['analyticsData'] ?? [];
		if ( in_array( 'analyticsData', $updated, true ) && ! empty( $google_analytics ) ) {
			$google_analytics['days'] = $days;

			$response = \RankMath\Analytics\AJAX::get()->do_save_analytic_options( $google_analytics );
			if ( is_wp_error( $response ) ) {
				return [
					'error' => $response->get_error_message(),
				];
			}
		}
	}

	/**
	 * Enqueue settings translations when React UI is enabled as the settings pages are loaded in chunks.
	 */
	public function enqueue_settings_translations() {
		if ( ! Helper::is_react_enabled() ) {
			return;
		}

		$page = str_replace( 'rank-math-options-', '', Param::get( 'page', '' ) );
		$hash = [
			'general'          => 'generalSettings',
			'titles'           => 'titleSettings',
			'sitemap'          => 'sitemapSettings',
			'instant-indexing' => 'instantIndexingSettings',
		];

		if ( ! isset( $hash[ $page ] ) ) {
			return;
		}

		$chunk = $hash[ $page ];
		wp_enqueue_script( 'rank-math-settings-chunk', rank_math()->plugin_url() . "assets/admin/js/$chunk.js", [ 'rank-math-options' ], rank_math()->version, true );
		wp_set_script_translations( 'rank-math-settings-chunk', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		wp_set_script_translations( 'rank-math-options', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		wp_set_script_translations( 'rank-math-components', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );

		$this->do_action( 'admin/after_settings_scripts' );
	}

	/**
	 * Check if certain fields got updated.
	 *
	 * @param array $updated  Updated fields id.
	 * @param bool  $is_reset Whether to reset the settings.
	 */
	private static function check_updated_fields( $updated, $is_reset ) {
		if ( $is_reset ) {
			Helper::schedule_flush_rewrite();
			return;
		}

		/**
		 * Filter: Allow developers to add option fields which will flush the rewrite rules when updated.
		 *
		 * @param array $flush_fields Array of field IDs for which we need to flush.
		 */
		$flush_fields = apply_filters(
			'rank_math/flush_fields',
			[
				'strip_category_base',
				'disable_author_archives',
				'url_author_base',
				'attachment_redirect_urls',
				'attachment_redirect_default',
				'nofollow_external_links',
				'nofollow_image_links',
				'nofollow_domains',
				'nofollow_exclude_domains',
				'new_window_external_links',
				'redirections_header_code',
				'redirections_post_redirect',
				'redirections_debug',
			]
		);

		foreach ( $flush_fields as $field_id ) {
			if ( in_array( $field_id, $updated, true ) ) {
				Helper::schedule_flush_rewrite();
				break;
			}
		}
	}

	/**
	 * Get only the settings that have changed.
	 *
	 * @param array $current_settings Current settings from database.
	 * @param array $new_settings     New settings to be saved.
	 * @return array
	 */
	private static function get_changed_settings( $current_settings, $new_settings ) {
		// Filter out invalid keys from both arrays.
		$new_settings     = array_filter( $new_settings, [ __CLASS__, 'is_valid_key' ], ARRAY_FILTER_USE_KEY );
		$current_settings = array_filter( $current_settings, [ __CLASS__, 'is_valid_key' ], ARRAY_FILTER_USE_KEY );

		// Merge current settings with new settings, new settings take precedence.
		return array_merge( $current_settings, $new_settings );
	}

	/**
	 * Check if a key is valid for settings.
	 *
	 * @param mixed $key The key to validate.
	 * @return bool
	 */
	private static function is_valid_key( $key ) {
		return is_string( $key ) && ! empty( $key );
	}

	/**
	 * Update .htaccess.
	 *
	 * @param array { $settings } Settings data.
	 */
	private static function maybe_update_htaccess( $settings ) {
		if ( empty( $settings['htaccess_allow_editing'] ) ) {
			return;
		}

		if ( ! is_super_admin() || ! Helper::has_cap( 'general' ) || ! Helper::has_cap( 'edit_htaccess' ) ) {
			return [
				'error' => esc_html__( 'You do not have permission to edit the .htaccess file.', 'seo-by-rank-math' ),
			];
		}

		if ( ! Helper::is_edit_allowed() ) {
			return [
				'error' => esc_html__( 'You do not have permission to edit the .htaccess file.', 'seo-by-rank-math' ),
			];
		}

		// phpcs:ignore= WordPress.Security.ValidatedSanitizedInput -- Writing to .htaccess file and escaping for HTML will break functionality.
		$content = isset( $settings['htaccess_content'] ) ? $settings['htaccess_content'] : '';
		if ( empty( $content ) ) {
			return;
		}

		if ( ! self::do_htaccess_backup() ) {
			return [
				'error' => esc_html__( 'Failed to backup .htaccess file. Please check file permissions.', 'seo-by-rank-math' ),
			];
		}
		if ( ! self::do_htaccess_update( $content ) ) {
			return [
				'error' => esc_html__( 'Failed to update .htaccess file. Please check file permissions.', 'seo-by-rank-math' ),
			];
		}

		return [
			'success' => esc_html__( '.htaccess file updated successfully.', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Create htaccess backup.
	 *
	 * @return bool
	 */
	private static function do_htaccess_backup() {
		if ( ! Helper::is_filesystem_direct() ) {
			return false;
		}

		$wp_filesystem = Helper::get_filesystem();

		$path = get_home_path();
		$file = $path . '.htaccess';
		if ( ! $wp_filesystem->is_writable( $path ) || ! $wp_filesystem->exists( $file ) ) {
			return false;
		}

		$backup = $path . uniqid( '.htaccess_back_' );
		return $wp_filesystem->copy( $file, $backup, true );
	}

	/**
	 * Update htaccess file.
	 *
	 * @param string $content Htaccess content.
	 * @return string|bool
	 */
	private static function do_htaccess_update( $content ) {
		if ( empty( $content ) || ! Helper::is_filesystem_direct() ) {
			return false;
		}

		$wp_filesystem = Helper::get_filesystem();
		$htaccess_file = get_home_path() . '.htaccess';

		return ! $wp_filesystem->is_writable( $htaccess_file ) ? false : $wp_filesystem->put_contents( $htaccess_file, $content );
	}
}
PK     ”ŠU]yô
ù¡3  ¡3  '  includes/admin/class-admin-bar-menu.phpnu „[µü¤        <?php
/**
 * Admin bar menu.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Paper\Paper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Meta;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Url;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin_Bar_Menu class.
 */
class Admin_Bar_Menu {

	use Hooker;
	use Ajax;
	use Meta;

	/**
	 * The unique identifier used for the menu.
	 *
	 * @var string
	 */
	const MENU_IDENTIFIER = 'rank-math';

	/**
	 * Hold menu items.
	 *
	 * @var array
	 */
	private $items = [];

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->ajax( 'mark_page_as', 'mark_page_as' );
		$this->action( 'admin_bar_menu', 'add_menu', 100 );
	}

	/**
	 * AJAX function to mark page as Pillar Content/Noindex/Nofollow.
	 */
	public function mark_page_as() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'onpage_general' );

		$what        = Param::post( 'what', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		$object_id   = Param::post( 'objectID', 0, FILTER_VALIDATE_INT );
		$object_type = Param::post( 'objectType', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );

		if ( ! $what || ! $object_id || ! $object_type ) {
			return 0;
		}

		if ( 'pillar_content' === $what ) {
			$current = $this->get_meta( $object_type, $object_id, 'rank_math_pillar_content' );
			$updated = 'on' === $current ? 'off' : 'on';
			$this->update_meta( $object_type, $object_id, 'rank_math_pillar_content', $updated );
			die( '1' );
		}

		if ( 'noindex' === $what || 'nofollow' === $what ) {
			$robots = (array) $this->get_meta( $object_type, $object_id, 'rank_math_robots' );
			$robots = array_filter( $robots );

			Arr::add_delete_value( $robots, $what );
			$robots = $this->normalize_robots( $what, array_unique( $robots ) );

			$this->update_meta( $object_type, $object_id, 'rank_math_robots', $robots );

			if ( 'noindex' === $what ) {
				$this->do_action( 'sitemap/invalidate_object_type', $object_type, $object_id );
			}

			die( '1' );
		}

		die();
	}

	/**
	 * Add SEO item to admin bar with context-specific submenu items.
	 *
	 * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to.
	 */
	public function add_menu( $wp_admin_bar ) {
		if ( ! $this->can_add_menu() ) {
			return;
		}

		$this->add_root_menu();

		if ( Helper::has_cap( 'titles' ) ) {
			$this->add_page_menu();
		}

		if ( $this->is_front() ) {
			$this->add_seo_tools();
		}

		if ( $this->can_add_mark_menu() ) {
			$this->add_mark_page_menu();
		}

		/**
		 * Add item to rank math admin bar node.
		 *
		 * @param Admin_Bar_Menu $this Class instance.
		 */
		$this->do_action( 'admin_bar/items', $this );

		$this->add_order();
		uasort( $this->items, [ $this, 'sort_by_priority' ] );
		array_walk( $this->items, [ $wp_admin_bar, 'add_node' ] );
	}

	/**
	 * Normalize robots.
	 *
	 * @param string $what   Current admin menu process.
	 * @param array  $robots Array to normalize.
	 *
	 * @return array
	 */
	private function normalize_robots( $what, $robots ) {
		if ( 'noindex' !== $what ) {
			return $robots;
		}

		if ( ! in_array( 'noindex', $robots, true ) ) {
			$robots[] = ! in_array( 'index', $robots, true ) ? 'index' : '';
			return $robots;
		}

		if ( false !== ( $key = array_search( 'index', $robots ) ) ) { // @codingStandardsIgnoreLine
			unset( $robots[ $key ] );
		}

		return $robots;
	}

	/**
	 * Keep original order when uasort() deals with equal "priority" values.
	 */
	private function add_order() {
		$order = 0;
		foreach ( $this->items as &$item ) {
			$item['order'] = $order++;
		}
	}

	/**
	 * Add root menu.
	 */
	private function add_root_menu() {
		$first_menu = get_transient( 'rank_math_first_submenu_id' );
		$first_menu = $first_menu && 'rank-math' !== $first_menu ? str_replace( 'rank-math-', '', $first_menu ) : '';

		$this->items['main'] = [
			'id'       => self::MENU_IDENTIFIER,
			'title'    => '<span class="rank-math-icon">' . $this->get_icon() . '</span><span class="rank-math-text">' . esc_html__( 'Rank Math SEO', 'seo-by-rank-math' ) . '</span>',
			'href'     => Helper::get_admin_url( $first_menu ),
			'meta'     => [ 'title' => esc_html__( 'Rank Math Dashboard', 'seo-by-rank-math' ) ],
			'priority' => 10,
		];

		if ( current_user_can( 'manage_options' ) ) {
			$this->add_sub_menu(
				'dashboard',
				[
					'title'    => esc_html__( 'Dashboard', 'seo-by-rank-math' ),
					'href'     => $this->items['main']['href'],
					'meta'     => [ 'title' => esc_html__( 'Dashboard', 'seo-by-rank-math' ) ],
					'priority' => 20,
				]
			);
		}
	}

	/**
	 * Add page menu.
	 */
	private function add_page_menu() {
		$hash = [
			'add_home_menu'      => is_front_page(),
			'add_post_type_menu' => is_singular( Helper::get_accessible_post_types() ) || is_home(),
			'add_date_menu'      => is_date(),
			'add_taxonomy_menu'  => is_archive() && ! is_post_type_archive() && ! is_author(),
			'add_search_menu'    => is_search(),
		];

		foreach ( $hash as $func => $can_run ) {
			if ( true === $can_run ) {
				$this->$func();
				break;
			}
		}
	}


	/**
	 * Add homepage menu
	 */
	private function add_home_menu() {
		$this->add_sub_menu(
			'home',
			[
				'title'    => esc_html__( 'Homepage SEO', 'seo-by-rank-math' ),
				'href'     => Helper::get_settings_url( 'titles', 'homepage' ),
				'meta'     => [ 'title' => esc_html__( 'Edit Homepage SEO Settings', 'seo-by-rank-math' ) ],
				'priority' => 35,
			]
		);
	}

	/**
	 * Add post_type menu
	 */
	private function add_post_type_menu() {
		$post_type = get_post_type();
		if ( ! $post_type ) {
			return;
		}

		$name = get_post_type_object( $post_type )->labels->name;

		if ( is_home() ) {
			$post_type = 'page';
			$name      = esc_html__( 'Pages', 'seo-by-rank-math' );
		}

		$this->add_sub_menu(
			'posttype',
			[
				/* translators: Post Type Singular Name */
				'title'    => sprintf( esc_html__( 'SEO Settings for %s', 'seo-by-rank-math' ), $name ),
				'href'     => Helper::get_settings_url( 'titles', 'post-type-' . $post_type ),
				'meta'     => [ 'title' => esc_html__( 'Edit default SEO settings for this post type', 'seo-by-rank-math' ) ],
				'priority' => 35,
			]
		);
	}

	/**
	 * Add taxonomy menu
	 */
	private function add_taxonomy_menu() {
		$term = get_queried_object();

		if ( empty( $term ) || ! ( $term instanceof \WP_Term ) ) {
			return;
		}

		$labels = get_taxonomy_labels( get_taxonomy( $term->taxonomy ) );
		$this->add_sub_menu(
			'tax',
			[
				/* translators: Taxonomy Singular Name */
				'title'    => sprintf( esc_html__( 'SEO Settings for %s', 'seo-by-rank-math' ), $labels->name ),
				'href'     => Helper::get_settings_url( 'titles', 'taxonomy-' . $term->taxonomy ),
				'meta'     => [ 'title' => esc_html__( 'Edit SEO settings for this archive page', 'seo-by-rank-math' ) ],
				'priority' => 35,
			]
		);
	}

	/**
	 * Add date archive menu
	 */
	private function add_date_menu() {
		$this->add_sub_menu(
			'date',
			[
				'title'    => esc_html__( 'SEO Settings for Date Archives', 'seo-by-rank-math' ),
				'href'     => Helper::get_settings_url( 'titles', 'global' ),
				'meta'     => [ 'title' => esc_html__( 'Edit SEO settings for this archive page', 'seo-by-rank-math' ) ],
				'priority' => 35,
			]
		);
	}

	/**
	 * Add search result menu
	 */
	private function add_search_menu() {
		$this->add_sub_menu(
			'search',
			[
				'title'    => esc_html__( 'SEO Settings for Search Page', 'seo-by-rank-math' ),
				'href'     => Helper::get_settings_url( 'titles', 'global' ),
				'meta'     => [ 'title' => esc_html__( 'Edit SEO settings for the search results page', 'seo-by-rank-math' ) ],
				'priority' => 35,
			]
		);
	}

	/**
	 * Add mark page menu.
	 */
	private function add_mark_page_menu() {
		$this->add_sub_menu(
			'mark-me',
			[
				'title'    => esc_html__( 'Mark this page', 'seo-by-rank-math' ),
				'href'     => '#',
				'priority' => 100,
			]
		);

		$is_pillar_content = '';
		$dashicon_format   = '<span class="dashicons dashicons-%s rm-mark-page-icon"></span>';

		if ( is_singular( Helper::get_accessible_post_types() ) ) {
			if ( get_post_meta( get_the_ID(), 'rank_math_pillar_content', true ) === 'on' ) {
				$is_pillar_content = sprintf( $dashicon_format, 'yes' );
			}

			$this->add_sub_menu(
				'pillar-content',
				[
					'title' => $is_pillar_content . esc_html__( 'As Pillar Content', 'seo-by-rank-math' ),
					'href'  => '#pillar_content',
					'meta'  => [ 'class' => 'mark-page-as' ],
				],
				'mark-me'
			);
		}

		if ( Paper::get() ) {
			$robots        = Paper::get()->get_robots();
			$noindex_check = in_array( 'noindex', $robots, true ) ? sprintf( $dashicon_format, 'yes' ) : '';
			$this->add_sub_menu(
				'no-index',
				[
					'title' => $noindex_check . esc_html__( 'As NoIndex', 'seo-by-rank-math' ),
					'href'  => '#noindex',
					'meta'  => [ 'class' => 'mark-page-as' ],
				],
				'mark-me'
			);

			$nofollow_check = in_array( 'nofollow', $robots, true ) ? sprintf( $dashicon_format, 'yes' ) : '';
			$this->add_sub_menu(
				'no-follow',
				[
					'title' => $nofollow_check . esc_html__( 'As NoFollow', 'seo-by-rank-math' ),
					'href'  => '#nofollow',
					'meta'  => [ 'class' => 'mark-page-as' ],
				],
				'mark-me'
			);
		}
	}

	/**
	 * Third party SEO Tools, like the Google Structured Data Testing Tool.
	 */
	private function add_seo_tools() {
		$this->add_sub_menu(
			'third-party',
			[
				'title'    => esc_html__( 'External Tools', 'seo-by-rank-math' ),
				'href'     => '#',
				'priority' => 200,
			]
		);

		$url   = rawurlencode( Url::get_current_url() );
		$items = [
			'google-pagespeed'           => [
				'title' => esc_html__( 'Google PageSpeed', 'seo-by-rank-math' ),
				'href'  => 'https://developers.google.com/speed/pagespeed/insights/?url=' . $url,
				'meta'  => [ 'title' => esc_html__( 'Google PageSpeed Insights', 'seo-by-rank-math' ) ],
			],

			'google-richresults-mobile'  => [
				'title' => esc_html__( 'Google Rich Results (Mobile)', 'seo-by-rank-math' ),
				'href'  => 'https://search.google.com/test/rich-results?url=' . $url . '&user_agent=1',
				'meta'  => [ 'title' => esc_html__( 'Google Rich Results Test - Googlebot Smartphone', 'seo-by-rank-math' ) ],
			],

			'google-richresults-desktop' => [
				'title' => esc_html__( 'Google Rich Results (Desktop)', 'seo-by-rank-math' ),
				'href'  => 'https://search.google.com/test/rich-results?url=' . $url . '&user_agent=2',
				'meta'  => [ 'title' => esc_html__( 'Google Rich Results Test - Googlebot Desktop', 'seo-by-rank-math' ) ],
			],

			'fb-debugger'                => [
				'title' => esc_html__( 'Facebook Debugger', 'seo-by-rank-math' ),
				'href'  => 'https://developers.facebook.com/tools/debug/sharing/?q=' . $url,
				'meta'  => [ 'title' => esc_html__( 'Facebook Sharing Debugger', 'seo-by-rank-math' ) ],
			],
		];

		foreach ( $items as $id => $args ) {
			$args['meta']['target'] = '_blank';
			$this->add_sub_menu( $id, $args, 'third-party' );
		}
	}

	/**
	 * Add sub menu item
	 *
	 * @param string $id          Unique ID for the node.
	 * @param array  $args        Arguments for adding a node.
	 * @param string $parent_node Node parent.
	 */
	public function add_sub_menu( $id, $args, $parent_node = '' ) {
		$args['priority']   = isset( $args['priority'] ) ? $args['priority'] : 999;
		$args['id']         = 'rank-math-' . $id;
		$args['parent']     = '' !== $parent_node ? 'rank-math-' . $parent_node : self::MENU_IDENTIFIER;
		$this->items[ $id ] = $args;
	}

	/**
	 * Can current user has capability for admin menu.
	 *
	 * @return bool
	 */
	private function can_add_menu() {
		return Helper::has_cap( 'admin_bar' );
	}

	/**
	 * Can add mark me menu.
	 *
	 * @return bool
	 */
	private function can_add_mark_menu() {
		return $this->is_front() && Helper::has_cap( 'onpage_general' );
	}

	/**
	 * Is frontend.
	 *
	 * @return bool
	 */
	private function is_front() {
		return ! is_admin() && ! is_preview();
	}

	/**
	 * Sort admin bar items callback.
	 *
	 * @param array $item1 Item A to compare.
	 * @param array $item2 Item B to compare.
	 *
	 * @return integer
	 */
	private function sort_by_priority( $item1, $item2 ) {
		if ( $item1['priority'] === $item2['priority'] ) {
			return $item1['order'] < $item2['order'] ? -1 : 1;
		}

		return $item1['priority'] < $item2['priority'] ? -1 : 1;
	}

	/**
	 * Get Rank Math icon.
	 *
	 * @param integer $width Width of the icon.
	 *
	 * @return string
	 */
	private function get_icon( $width = 20 ) {
		return '<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="' . $width . '"><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>';
	}
}
PK     ”ŠU]~ž5)î"  î"    includes/admin/class-assets.phpnu „[µü¤        <?php
/**
 * Register all the necessary CSS and JS.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Google\Console;
use RankMath\Google\Analytics;
use RankMath\Analytics\Url_Inspection;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Assets class.
 *
 * @codeCoverageIgnore
 */
class Assets implements Runner {

	use Hooker;

	/**
	 *  Prefix for the enqueue handles.
	 */
	const PREFIX = 'rank-math-';

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'admin_enqueue_scripts', 'register' );
		$this->action( 'admin_enqueue_scripts', 'enqueue' );
		$this->action( 'admin_enqueue_scripts', 'overwrite_wplink', 99 );

		if ( 'elementor' === \RankMath\Helpers\Param::get( 'action' ) ) {
			$this->action( 'elementor/editor/before_enqueue_scripts', 'register' );
			$this->action( 'elementor/editor/before_enqueue_scripts', 'enqueue' );
			$this->action( 'elementor/editor/before_enqueue_scripts', 'overwrite_wplink', 99 );
		}
	}

	/**
	 * Register styles and scripts.
	 */
	public function register() {
		$js     = rank_math()->plugin_url() . 'assets/admin/js/';
		$css    = rank_math()->plugin_url() . 'assets/admin/css/';
		$vendor = rank_math()->plugin_url() . 'assets/vendor/';

		// Styles.
		wp_register_style( self::PREFIX . 'common', $css . 'common.css', null, rank_math()->version );
		wp_register_style( self::PREFIX . 'cmb2', $css . 'cmb2.css', null, rank_math()->version );
		wp_register_style( self::PREFIX . 'dashboard', $css . 'dashboard.css', [ 'rank-math-common', 'wp-components' ], rank_math()->version );
		wp_register_style( self::PREFIX . 'dashboard-widget', $css . 'dashboard-widget.css', null, rank_math()->version );

		// Scripts.
		wp_register_script( self::PREFIX . 'common', $js . 'common.js', [ 'jquery', 'wp-i18n', 'lodash' ], rank_math()->version, true );
		wp_register_script( self::PREFIX . 'dashboard', $js . 'dashboard.js', [ 'jquery', 'clipboard', 'lodash', 'wp-components', 'wp-element', 'rank-math-components' ], rank_math()->version, true );
		wp_register_script( self::PREFIX . 'components', $js . 'components.js', [ 'lodash', 'wp-components', 'wp-element', 'wp-api-fetch' ], rank_math()->version, true );

		// Select2.
		wp_register_style( 'select2-rm', $vendor . 'select2/select2.min.css', null, '4.0.6-rc.1' );
		wp_register_script( 'select2-rm', $vendor . 'select2/select2.min.js', null, '4.0.6-rc.1', true );

		// Inline script for core admin page Settings > Permalinks.
		wp_register_script( self::PREFIX . 'core-permalink-settings', '' ); // phpcs:ignore
		wp_add_inline_script( self::PREFIX . 'core-permalink-settings', $this->get_permalinks_inline_script() );

		Helper::add_json(
			'api',
			[
				'root'  => esc_url_raw( get_rest_url() ),
				'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
			]
		);

		Helper::add_json(
			'keywordsApi',
			[
				'url' => 'https://api.rankmath.com/ltkw/v1/',
			]
		);

		Helper::add_json(
			'links',
			KB::get_links()
		);

		Helper::add_json(
			'validationl10n',
			[
				'regexErrorDefault'    => __( 'Please use the correct format.', 'seo-by-rank-math' ),
				'requiredErrorDefault' => __( 'This field is required.', 'seo-by-rank-math' ),
				'emailErrorDefault'    => __( 'Please enter a valid email address.', 'seo-by-rank-math' ),
				'urlErrorDefault'      => __( 'Please enter a valid URL.', 'seo-by-rank-math' ),
			]
		);

		Helper::add_json( 'capitalizeTitle', Helper::get_settings( 'titles.capitalize_titles' ) );

		Helper::add_json( 'isConsoleConnected', Console::is_console_connected() );
		Helper::add_json( 'isAnalyticsConnected', Analytics::is_analytics_connected() );
		Helper::add_json( 'isUrlInspectionEnabled', Url_Inspection::is_enabled() );

		/**
		 * Allow other plugins to register/deregister admin styles or scripts after plugin assets.
		 */
		$this->do_action( 'admin/register_scripts' );
	}

	/**
	 * Enqueue styles and scripts.
	 */
	public function enqueue() {
		$screen = get_current_screen();

		if ( 'dashboard' === $screen->id ) {
			wp_enqueue_style( self::PREFIX . 'dashboard-widget' );
			wp_enqueue_script( self::PREFIX . 'dashboard' );
		}

		$rank_math_pages = $this->do_filter(
			'admin_pages',
			[
				'toplevel_page_rank-math',
				'toplevel_page_rank-math-network',
				'rank-math_page_rank-math-content-ai-page',
				'rank-math_page_rank-math-analytics',
				'rank-math_page_rank-math-role-manager',
				'rank-math_page_rank-math-seo-analysis',
				'rank-math_page_rank-math-status',
			]
		);
		if (
			in_array( $screen->id, $rank_math_pages, true ) ||
			Str::starts_with( 'rank-math_page_rank-math-options-', $screen->id )
		) {
			Helper::add_json(
				'dashboardHeader',
				[
					'dashboardUrl' => esc_url( Helper::get_admin_url() ),
					'proBadge'     => $this->do_filter( 'pro_badge', '' ),
				]
			);
		}

		// Our screens only.
		if ( ! in_array( $screen->taxonomy, Helper::get_allowed_taxonomies(), true ) && ! in_array( $screen->id, $this->get_admin_screen_ids(), true ) ) {
			return;
		}

		// Add thank you.
		$this->filter( 'admin_footer_text', 'admin_footer_text' );

		/**
		 * Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
		 */
		$this->do_action( 'admin/enqueue_scripts' );
	}

	/**
	 * Add footer credit on admin pages.
	 *
	 * @param string $text Default text for admin footer.
	 * @return string
	 */
	public function admin_footer_text( $text ) {
		/* translators: plugin url */
		return Helper::is_whitelabel() ? $text : sprintf( wp_kses_post( __( 'Thank you for using <a href="%s" target="_blank">Rank Math</a>', 'seo-by-rank-math' ) ), KB::get( 'seo-suite', 'Admin Footer Text' ) );
	}

	/**
	 * Overwrite wplink script file.
	 * Rank Math adds new options in the link popup when editing a post.
	 */
	public function overwrite_wplink() {

		wp_deregister_script( 'wplink' );
		wp_register_script( 'wplink', rank_math()->plugin_url() . 'assets/admin/js/wplink.js', [ 'jquery', 'wp-a11y' ], rank_math()->version, true );

		wp_localize_script(
			'wplink',
			'wpLinkL10n',
			[
				'title'             => esc_html__( 'Insert/edit link', 'seo-by-rank-math' ),
				'update'            => esc_html__( 'Update', 'seo-by-rank-math' ),
				'save'              => esc_html__( 'Add Link', 'seo-by-rank-math' ),
				'noTitle'           => esc_html__( '(no title)', 'seo-by-rank-math' ),
				'noMatchesFound'    => esc_html__( 'No matches found.', 'seo-by-rank-math' ),
				'linkSelected'      => esc_html__( 'Link selected.', 'seo-by-rank-math' ),
				'linkInserted'      => esc_html__( 'Link inserted.', 'seo-by-rank-math' ),
				'relCheckbox'       => __( 'Add <code>rel="nofollow"</code>', 'seo-by-rank-math' ),
				'sponsoredCheckbox' => __( 'Add <code>rel="sponsored"</code>', 'seo-by-rank-math' ),
				'linkTitle'         => esc_html__( 'Link Title', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Enqueues styles.
	 *
	 * @param string $style Name of the style.
	 */
	public function enqueue_style( $style ) {
		wp_enqueue_style( self::PREFIX . $style );
	}

	/**
	 * Enqueues scripts.
	 *
	 * @param string $script Name of the script.
	 */
	public function enqueue_script( $script ) {
		wp_enqueue_script( self::PREFIX . $script );
	}

	/**
	 * Get admin screen ids.
	 *
	 * @return array
	 */
	private function get_admin_screen_ids() {
		$pages = [
			'toplevel_page_rank-math',
			'rank-math_page_rank-math-role-manager',
			'rank-math_page_rank-math-seo-analysis',
			'rank-math_page_rank-math-links-page',
			'rank-math_page_rank-math-ai-visibility',
			'rank-math_page_rank-math-404-monitor',
			'rank-math_page_rank-math-redirections',
			'rank-math_page_rank-math-link-builder',
			'rank-math_page_rank-math-analytics',
			'rank-math_page_rank-math-import-export',
			'rank-math_page_rank-math-help',
			'user-edit',
			'profile',
			'rank_math_schema',
		];

		return array_merge( $pages, Helper::get_allowed_post_types() );
	}

	/**
	 * Inline script to warn the user about the risks of changing the permalinks on a live site.
	 *
	 * @return string
	 */
	public function get_permalinks_inline_script() {
		// Don't add the script if site is set to noindex.
		if ( ! get_option( 'blog_public' ) ) {
			return '';
		}

		return "jQuery( window ).load( function() {
			var noticeShown = false;
			var showNotice = function() {
				if ( noticeShown ) {
					return true;
				}
				jQuery( '.rank-math-notice-permalinks-warning' ).removeClass( 'hidden' ).insertBefore( 'p.submit' );
				noticeShown = true;
				return true;
			}

			jQuery( '.available-structure-tags button' ).on( 'click', showNotice );
			jQuery( 'input[type=text], input[type=radio]' ).on( 'focus change', showNotice );
		} );";
	}
}
PK     ”ŠU]ŒÛ      !  includes/admin/database/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ”ŠU]ðº6ß  ß  (  includes/admin/database/class-escape.phpnu „[µü¤        <?php
/**
 * The escape functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Escape class.
 */
trait Escape {

	/**
	 * Escape array values for sql
	 *
	 * @param array $arr Array to escape.
	 *
	 * @return array
	 */
	public function esc_array( $arr ) {
		return array_map( [ $this, 'esc_value' ], $arr );
	}

	/**
	 * Escape value for sql
	 *
	 * @param mixed $value Value to escape.
	 *
	 * @return mixed
	 */
	public function esc_value( $value ) {
		global $wpdb;

		if ( is_int( $value ) ) {
			return $wpdb->prepare( '%d', $value );
		}

		if ( is_float( $value ) ) {
			return $wpdb->prepare( '%f', $value );
		}

		return 'NULL' === $value ? $value : $wpdb->prepare( '%s', $value );
	}

	/**
	 * Escape value for like statement
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $value  Value for like statement.
	 * @param string $start  (Optional) The start of like query.
	 * @param string $end    (Optional) The end of like query.
	 *
	 * @return string
	 */
	public function esc_like( $value, $start = '%', $end = '%' ) {
		global $wpdb;
		return $start . $wpdb->esc_like( $value ) . $end;
	}
}
PK     ”ŠU]iòn8a  a  (  includes/admin/database/class-select.phpnu „[µü¤        <?php
/**
 * The select functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Select class.
 */
trait Select {

	/**
	 * Set the selected fields
	 *
	 * @param array $fields Fields to select.
	 *
	 * @return self The current query builder.
	 */
	public function select( $fields = '' ) {
		if ( empty( $fields ) ) {
			return $this;
		}

		if ( is_string( $fields ) ) {
			$this->add_sql_clause( 'select', $fields );
			return $this;
		}

		foreach ( $fields as $key => $field ) {
			$this->add_sql_clause( 'select', is_string( $key ) ? "$key AS $field" : $field );
		}

		return $this;
	}

	/**
	 * Shortcut to add a count function
	 *
	 *     ->selectCount('id')
	 *     ->selectCount('id', 'count')
	 *
	 * @param string $field Column name.
	 * @param string $alias (Optional) Column alias.
	 *
	 * @return self The current query builder.
	 */
	public function selectCount( $field = '*', $alias = null ) { // @codingStandardsIgnoreLine
		return $this->selectFunc( 'count', $field, $alias );
	}

	/**
	 * Shortcut to add a sum function
	 *
	 *     ->selectSum('id')
	 *     ->selectSum('id', 'total')
	 *
	 * @param string $field Column name.
	 * @param string $alias (Optional) Column alias.
	 *
	 * @return self The current query builder.
	 */
	public function selectSum( $field, $alias = null ) { // @codingStandardsIgnoreLine
		return $this->selectFunc( 'sum', $field, $alias );
	}

	/**
	 * Shortcut to add a avg function
	 *
	 *     ->selectAvg('id')
	 *     ->selectAvg('id', 'average')
	 *
	 * @param string $field Column name.
	 * @param string $alias (Optional) Column alias.
	 *
	 * @return self The current query builder.
	 */
	public function selectAvg( $field, $alias = null ) { // @codingStandardsIgnoreLine
		return $this->selectFunc( 'avg', $field, $alias );
	}

	/**
	 * Shortcut to add a function
	 *
	 * @param string $func  Function name.
	 * @param string $field Column name.
	 * @param string $alias (Optional) Column alias.
	 *
	 * @return self The current query builder.
	 */
	public function selectFunc( $func, $field, $alias = null ) { // @codingStandardsIgnoreLine
		$func  = \strtoupper( $func );
		$field = "$func({$field})";
		if ( ! is_null( $alias ) ) {
			$field .= " AS {$alias}";
		}

		$this->add_sql_clause( 'select', $field );

		return $this;
	}

	/**
	 * Distinct select setter
	 *
	 * @param bool $distinct Is distinct.
	 *
	 * @return self The current query builder.
	 */
	public function distinct( $distinct = true ) {
		$this->distinct = $distinct;
		return $this;
	}

	/**
	 * SQL_CALC_FOUND_ROWS select setter
	 *
	 * @param bool $found_rows Should get found rows.
	 *
	 * @return self The current query builder.
	 */
	public function found_rows( $found_rows = true ) {
		$this->found_rows = $found_rows;
		return $this;
	}
}
PK     ”ŠU]¢=Î¯‘  ‘  )  includes/admin/database/class-groupby.phpnu „[µü¤        <?php
/**
 * The groupby functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * GroupBy class.
 */
trait GroupBy {

	/**
	 * Add an group by statement to the current query
	 *
	 *     ->groupBy('created_at')
	 *
	 * @param array|string $columns Columns.
	 *
	 * @return self The current query builder.
	 */
	public function groupBy( $columns ) { // @codingStandardsIgnoreLine
		if ( is_string( $columns ) ) {
			$columns = $this->argument_to_array( $columns );
		}

		foreach ( $columns as $column ) {
			$this->add_sql_clause( 'group_by', $column );
		}

		return $this;
	}

	/**
	 * Generate Having clause
	 *
	 * @param string $column The SQL column.
	 * @param mixed  $param1 Operator or value depending if $param2 isset.
	 * @param mixed  $param2 The value if $param1 is an operator.
	 *
	 * @return self The current query builder.
	 */
	public function having( $column, $param1 = null, $param2 = null ) {
		$this->add_sql_clause( 'having', $this->generateWhere( $column, $param1, $param2, 'HAVING' ) );

		return $this;
	}
}
PK     ”ŠU]r Ô=  =  /  includes/admin/database/class-query-builder.phpnu „[µü¤        <?php
/**
 * The Query Builder.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Query_Builder class.
 */
class Query_Builder {

	use Escape;
	use Select;
	use Where;
	use Joins;
	use GroupBy;
	use OrderBy;
	use Clauses;
	use Translate;

	/**
	 * Table name.
	 *
	 * @var string
	 */
	public $table = '';

	/**
	 * Save last query.
	 *
	 * @var string
	 */
	public $last_query = '';

	/**
	 * Make a distinct selection
	 *
	 * @var bool
	 */
	protected $distinct = false;

	/**
	 * Make SQL_CALC_FOUND_ROWS in selection
	 *
	 * @var bool
	 */
	protected $found_rows = false;

	/**
	 * Data store context used to pass to filters.
	 *
	 * @var string
	 */
	protected $context;

	/**
	 * Constructor
	 *
	 * @param string $table   The table name.
	 * @param string $context Optional context passed to filters. Default empty string.
	 */
	public function __construct( $table = '', $context = '' ) {
		$this->table   = $table;
		$this->context = $context;
		$this->reset();
	}

	/**
	 * Translate the given query object and return the results
	 *
	 * @param string $output (Optional) Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants.
	 *
	 * @return mixed
	 */
	public function get( $output = \OBJECT ) {
		return $this->get_results( $this->translateSelect(), $output );
	}

	/**
	 * Translate the given query object and return the results
	 *
	 * @param string $output (Optional) Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants.
	 *
	 * @return mixed
	 */
	public function one( $output = \OBJECT ) {
		return $this->get_row( $this->translateSelect(), $output );
	}

	/**
	 * Translate the given query object and return one variable from the database
	 *
	 * @return mixed
	 */
	public function getVar() { // @codingStandardsIgnoreLine
		$row = $this->one( \ARRAY_A );

		return is_null( $row ) ? false : current( $row );
	}

	/**
	 * Insert a row into a table
	 *
	 * @codeCoverageIgnore
	 * @see wpdb::insert()
	 *
	 * @param array $data   Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped).
	 * @param array $format (Optional) An array of formats to be mapped to each of the value in $data.
	 *
	 * @return mixed
	 */
	public function insert( $data, $format = null ) {
		global $wpdb;

		$wpdb->insert( $this->table, $data, $format );

		return $wpdb->insert_id;
	}

	/**
	 * Update a row into a table
	 *
	 * @codeCoverageIgnore
	 *
	 * @return mixed
	 */
	public function update() {

		$query = $this->translateUpdate();
		$this->reset();

		return $this->query( $query );
	}

	/**
	 * Delete data from table
	 *
	 * @codeCoverageIgnore
	 *
	 * @return mixed
	 */
	public function delete() {

		$query = $this->translateDelete();
		$this->reset();

		return $this->query( $query );
	}

	/**
	 * Truncate table.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return mixed
	 */
	public function truncate() {
		return $this->query( "truncate table {$this->table};" );
	}

	/**
	 * Get found rows.
	 *
	 * @return int
	 */
	public function get_found_rows() {
		return $this->get_var( 'SELECT FOUND_ROWS();' );
	}

	/**
	 * Get a single variable from the database.
	 *
	 * @param string $query The SQL query to run.
	 */
	public function get_var( $query ) {
		return $this->run(
			[
				'type'  => 'var',
				'query' => $query,
			]
		);
	}

	/**
	 * Perform a MySQL database query, using current database connection.
	 *
	 * @codeCoverageIgnore
	 *
	 * @see wpdb::query
	 *
	 * @param string $query Database query.
	 *
	 * @return int|false Number of rows affected|selected or false on error.
	 */
	public function query( $query ) {
		return $this->run(
			[
				'type'  => 'query',
				'query' => $query,
			]
		);
	}

	/**
	 * Set the limit clause.
	 *
	 * @param int $limit  Limit size.
	 * @param int $offset Offeset.
	 *
	 * @return self The current query builder.
	 */
	public function limit( $limit, $offset = 0 ) {
		global $wpdb;
		$limit  = \absint( $limit );
		$offset = \absint( $offset );

		$this->clear_sql_clause( 'limit' );
		$this->add_sql_clause( 'limit', $wpdb->prepare( 'LIMIT %d, %d', $offset, $limit ) );

		return $this;
	}

	/**
	 * Create an query limit based on a page and a page size
	 *
	 * @param int $page Page number.
	 * @param int $size Page size.
	 *
	 * @return self The current query builder.
	 */
	public function page( $page, $size = 25 ) {
		$size   = \absint( $size );
		$offset = $size * \absint( $page );

		$this->limit( $size, $offset );

		return $this;
	}

	/**
	 * Set values for insert/update
	 *
	 * @param string|array $name  Key of pair.
	 * @param string|array $value Value of pair.
	 *
	 * @return self The current query builder.
	 */
	public function set( $name, $value = null ) {
		if ( is_array( $name ) ) {
			$this->sql_clauses['values'] = $this->sql_clauses['values'] + $name;

			return $this;
		}

		$this->sql_clauses['values'][ $name ] = $value;

		return $this;
	}

	/**
	 * Reset all variables.
	 *
	 * @return self The current query builder.
	 */
	private function reset() {
		$this->distinct    = false;
		$this->found_rows  = false;
		$this->sql_clauses = [
			'select'     => [],
			'from'       => [],
			'left_join'  => [],
			'join'       => [],
			'right_join' => [],
			'where'      => [],
			'where_time' => [],
			'group_by'   => [],
			'having'     => [],
			'limit'      => [],
			'order_by'   => [],
			'values'     => [],
		];

		return $this;
	}

	/**
	 * Get a single column from the database.
	 *
	 * @param string $query The SQL query to run.
	 * @param int    $index The column index to retrieve.
	 */
	public function get_col( $query = '', $index = 0 ) {
		return $this->run(
			[
				'type'  => 'col',
				'query' => $query,
				'index' => $index,
			]
		);
	}

	/**
	 * Get a single row from the database.
	 *
	 * @param string $query  The SQL query to run.
	 * @param string $output The output to retrieve.
	 * @param int    $index  The row index to retrieve.
	 */
	public function get_row( $query = '', $output = OBJECT, $index = 0 ) {
		return $this->run(
			[
				'type'   => 'row',
				'query'  => $query,
				'index'  => $index,
				'output' => $output,
			]
		);
	}

	/**
	 * Get results from the database.
	 *
	 * @param string $query  The SQL query to run.
	 * @param string $output The output format.
	 */
	public function get_results( $query = '', $output = OBJECT ) {
		return $this->run(
			[
				'query'  => $query,
				'output' => $output,
			]
		);
	}

	/**
	 * Run the query and return the results.
	 *
	 * @param array $args The query arguments.
	 */
	public function run( $args = [] ) {
		global $wpdb;

		$output = isset( $args['output'] ) && $args['output'] ? $args['output'] : OBJECT;
		$type   = $args['type'] ?? '';
		$query  = $args['query'] ?? '';
		$index  = $args['index'] ?? '';

		$start_time = microtime( true );

		$this->last_query = $query;
		$this->reset();

		switch ( $type ) {
			case 'row':
				$results = $wpdb->get_row( $query, $output, $index );
				break;
			case 'col':
				$results = $wpdb->get_col( $query, $index );
				break;
			case 'query':
				$results = $wpdb->query( $query );
				break;
			case 'var':
				$results = $wpdb->get_var( $query );
				break;
			default:
				$results = $wpdb->get_results( $query, $output );
				break;
		}

		return apply_filters( 'rank_math/database/query/results', $results, $args, $start_time );
	}
}
PK     ”ŠU]X†RgA	  A	  '  includes/admin/database/class-joins.phpnu „[µü¤        <?php
/**
 * The joins functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Joins class.
 */
trait Joins {

	/**
	 * Generate left join clause.
	 *
	 * @param string $table    The SQL table.
	 * @param mixed  $column1  The SQL Column.
	 * @param mixed  $column2  The SQL Column.
	 * @param string $operator The Operator.
	 * @param string $alias    The table alias.
	 *
	 * @return self The current query builder.
	 */
	public function leftJoin( $table, $column1, $column2, $operator = '=', $alias = '' ) { // @codingStandardsIgnoreLine
		if ( empty( $table ) || empty( $column1 ) || empty( $column2 ) ) {
			return $this;
		}

		if ( ! empty( $alias ) ) {
			$table = "{$table} AS {$alias}";
		}

		$this->add_sql_clause( 'left_join', "LEFT JOIN {$table} ON {$column1} {$operator} {$column2}" );

		return $this;
	}

	/**
	 * Generate right join clause.
	 *
	 * @param string $table    The SQL table.
	 * @param mixed  $column1  The SQL Column.
	 * @param mixed  $column2  The SQL Column.
	 * @param string $operator The Operator.
	 * @param string $alias    The table alias.
	 *
	 * @return self The current query builder.
	 */
	public function rightJoin( $table, $column1, $column2, $operator = '=', $alias = '' ) { // @codingStandardsIgnoreLine
		if ( empty( $table ) || empty( $column1 ) || empty( $column2 ) ) {
			return $this;
		}

		if ( ! empty( $alias ) ) {
			$table = "{$table} AS {$alias}";
		}

		$this->add_sql_clause( 'right_join', "RIGHT JOIN {$table} ON {$column1} {$operator} {$column2}" );

		return $this;
	}

	/**
	 * Generate left join clause.
	 *
	 * @param string $table    The SQL table.
	 * @param mixed  $column1  The SQL Column.
	 * @param mixed  $column2  The SQL Column.
	 * @param string $operator The Operator.
	 * @param string $alias    The table alias.
	 *
	 * @return self The current query builder.
	 */
	public function join( $table, $column1, $column2, $operator = '=', $alias = '' ) { // @codingStandardsIgnoreLine
		if ( empty( $table ) || empty( $column1 ) || empty( $column2 ) ) {
			return $this;
		}

		if ( ! empty( $alias ) ) {
			$table = "{$table} AS {$alias}";
		}

		$this->add_sql_clause( 'join', "JOIN {$table} ON {$column1} {$operator} {$column2}" );

		return $this;
	}
}
PK     •ŠU]¦q˜b    *  includes/admin/database/class-database.phpnu „[µü¤        <?php
/**
 * The Database.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Database class.
 */
class Database {

	/**
	 * Array of all databases objects.
	 *
	 * @var array
	 */
	protected static $instances = [];

	/**
	 * Retrieve a Database instance by table name.
	 *
	 * @param string $table_name A Database instance id.
	 *
	 * @return Database Database object instance.
	 */
	public static function table( $table_name ) {
		global $wpdb;

		if ( empty( self::$instances ) || empty( self::$instances[ $table_name ] ) ) {
			self::$instances[ $table_name ] = new Query_Builder( $wpdb->prefix . $table_name );
		}

		return self::$instances[ $table_name ];
	}
}
PK     •ŠU]J¥“å(  å(  '  includes/admin/database/class-where.phpnu „[µü¤        <?php
/**
 * The where functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Where class.
 */
trait Where {

	/**
	 * Create a where statement
	 *
	 *     ->where('name', 'ladina')
	 *     ->where('age', '>', 18)
	 *     ->where('name', 'in', ['charles', 'john', 'jeffry'])
	 *
	 * @throws \Exception If $type is not 'AND', 'OR', 'WHERE'.
	 *
	 * @param mixed  $column The SQL column.
	 * @param mixed  $param1 Operator or value depending if $param2 isset.
	 * @param mixed  $param2 The value if $param1 is an operator.
	 * @param string $type the where type ( AND, OR ).
	 *
	 * @return self The current query builder.
	 */
	public function where( $column, $param1 = null, $param2 = null, $type = 'AND' ) {

		$this->is_valid_type( $type );

		$sub_type = is_null( $param1 ) ? $type : $param1;
		if ( ! $this->has_sql_clause( 'where' ) ) {
			$type = 'WHERE';
		}

		// When column is an array we assume to make a bulk and where.
		if ( is_array( $column ) ) {
			$this->bulk_where( $column, $type, $sub_type );
			return $this;
		}

		$this->add_sql_clause( 'where', $this->generateWhere( $column, $param1, $param2, $type ) );

		return $this;
	}

	/**
	 * Create an or where statement
	 *
	 * @param string $column The SQL column.
	 * @param mixed  $param1 Operator or value depending if $param2 isset.
	 * @param mixed  $param2 The value if $param1 is an operator.
	 *
	 * @return self The current query builder.
	 */
	public function orWhere( $column, $param1 = null, $param2 = null ) { // @codingStandardsIgnoreLine
		return $this->where( $column, $param1, $param2, 'OR' );
	}

	/**
	 * Creates a where in statement
	 *
	 *     ->whereIn('id', [42, 38, 12])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function whereIn( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IN', $options );
	}

	/**
	 * Creates a where in statement
	 *
	 *     ->orWhereIn('id', [42, 38, 12])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereIn( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IN', $options, 'OR' );
	}

	/**
	 * Creates a where not in statement
	 *
	 *     ->whereNotIn('id', [42, 38, 12])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function whereNotIn( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT IN', $options );
	}

	/**
	 * Creates a where not in statement
	 *
	 *     ->orWhereNotIn('id', [42, 38, 12])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereNotIn( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT IN', $options, 'OR' );
	}

	/**
	 * Creates a where between statement
	 *
	 *     ->whereBetween('id', [10, 100])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function whereBetween( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'BETWEEN', $options );
	}

	/**
	 * Creates a where between statement
	 *
	 *     ->orWhereBetween('id', [10, 100])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereBetween( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'BETWEEN', $options, 'OR' );
	}

	/**
	 * Creates a where not between statement
	 *
	 *     ->whereNotBetween('id', [10, 100])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function whereNotBetween( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT BETWEEN', $options );
	}

	/**
	 * Creates a where not between statement
	 *
	 *     ->orWhereNotBetween('id', [10, 100])
	 *
	 * @param string $column  The SQL column.
	 * @param array  $options Array of values for in statement.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereNotBetween( $column, $options ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT BETWEEN', $options, 'OR' );
	}

	/**
	 * Creates a where like statement
	 *
	 *     ->whereLike('id', 'value')
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $column The SQL column.
	 * @param string $value  Value for like statement.
	 * @param string $start  (Optional) The start of like query.
	 * @param string $end    (Optional) The end of like query.
	 *
	 * @return self The current query builder.
	 */
	public function whereLike( $column, $value, $start = '%', $end = '%' ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'LIKE', $this->esc_like( $value, $start, $end ) );
	}

	/**
	 * Creates a where like statement
	 *
	 *     ->orWhereLike('id', 'value')
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $column The SQL column.
	 * @param string $value  Value for like statement.
	 * @param string $start  (Optional) The start of like query.
	 * @param string $end    (Optional) The end of like query.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereLike( $column, $value, $start = '%', $end = '%' ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'LIKE', $this->esc_like( $value, $start, $end ), 'OR' );
	}

	/**
	 * Creates a where not like statement
	 *
	 *     ->whereNotLike('id', 'value' )
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $column The SQL column.
	 * @param mixed  $value  Value for like statement.
	 * @param string $start  (Optional) The start of like query.
	 * @param string $end    (Optional) The end of like query.
	 *
	 * @return self The current query builder.
	 */
	public function whereNotLike( $column, $value, $start = '%', $end = '%' ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT LIKE', $this->esc_like( $value, $start, $end ) );
	}

	/**
	 * Creates a where not like statement
	 *
	 *     ->orWhereNotLike('id', 'value' )
	 *
	 * @codeCoverageIgnore
	 *
	 * @param string $column The SQL column.
	 * @param mixed  $value  Value for like statement.
	 * @param string $start  (Optional) The start of like query.
	 * @param string $end    (Optional) The end of like query.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereNotLike( $column, $value, $start = '%', $end = '%' ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'NOT LIKE', $this->esc_like( $value, $start, $end ), 'OR' );
	}

	/**
	 * Creates a where is null statement
	 *
	 *     ->whereNull( 'name' )
	 *
	 * @param string $column The SQL column.
	 *
	 * @return self The current query builder.
	 */
	public function whereNull( $column ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IS', 'NULL' );
	}

	/**
	 * Creates a where is null statement
	 *
	 *     ->orWhereNull( 'name' )
	 *
	 * @param string $column The SQL column.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereNull( $column ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IS', 'NULL', 'OR' );
	}

	/**
	 * Creates a where is not null statement
	 *
	 *     ->whereNotNull( 'name' )
	 *
	 * @param string $column The SQL column.
	 *
	 * @return self The current query builder.
	 */
	public function whereNotNull( $column ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IS NOT', 'NULL' );
	}

	/**
	 * Creates a where is not null statement
	 *
	 *     ->orWhereNotNull( 'name' )
	 *
	 * @param string $column The SQL column.
	 *
	 * @return self The current query builder.
	 */
	public function orWhereNotNull( $column ) { // @codingStandardsIgnoreLine
		return $this->where( $column, 'IS NOT', 'NULL', 'OR' );
	}

	/**
	 * Generate Where clause
	 *
	 * @param string $column The SQL column.
	 * @param mixed  $param1 Operator or value depending if $param2 isset.
	 * @param mixed  $param2 The value if $param1 is an operator.
	 * @param string $type the where type ( AND, or ).
	 *
	 * @return string
	 */
	protected function generateWhere( $column, $param1 = null, $param2 = null, $type = 'AND' ) { // @codingStandardsIgnoreLine

		// when param2 is null we replace param2 with param one as the
		// value holder and make param1 to the = operator.
		if ( is_null( $param2 ) ) {
			$param2 = $param1;
			$param1 = '=';
		}

		// When param2 is an array we probably
		// have an "in" or "between" statement which has no need for duplicates.
		if ( is_array( $param2 ) ) {
			$param2 = $this->esc_array( array_unique( $param2 ) );
			$param2 = in_array( $param1, [ 'BETWEEN', 'NOT BETWEEN' ], true ) ? join( ' AND ', $param2 ) : '(' . join( ', ', $param2 ) . ')';
		} elseif ( is_scalar( $param2 ) ) {
			$param2 = $this->esc_value( $param2 );
		}

		return join( ' ', [ $type, $column, $param1, $param2 ] );
	}

	/**
	 * Check if the where type is valid.
	 *
	 * @param string $type Value to check.
	 *
	 * @throws \Exception If not a valid type.
	 */
	private function is_valid_type( $type ) {
		if ( ! in_array( $type, [ 'AND', 'OR', 'WHERE' ], true ) ) {
			throw new \Exception( 'Invalid where type "' . esc_html( $type ) . '"' );
		}
	}

	/**
	 * Create bulk where statement.
	 *
	 * @param array  $where    Array of statements.
	 * @param string $type     Statement type.
	 * @param string $sub_type Statement sub-type.
	 */
	private function bulk_where( $where, $type, $sub_type ) {
		$subquery = [];
		foreach ( $where as $value ) {
			if ( ! isset( $value[2] ) ) {
				$value[2] = $value[1];
				$value[1] = '=';
			}
			$subquery[] = $this->generateWhere( $value[0], $value[1], $value[2], empty( $subquery ) ? '' : $sub_type );
		}

		$this->add_sql_clause( 'where', $type . ' ( ' . trim( join( ' ', $subquery ) ) . ' )' );
	}
}
PK     •ŠU]iÄc  c  )  includes/admin/database/class-clauses.phpnu „[µü¤        <?php
/**
 * The clauses functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Clauses class.
 */
trait Clauses {

	/**
	 * List of SQL clauses.
	 *
	 * @var array
	 */
	private $sql_clauses = [];

	/**
	 * SQL clause merge filters.
	 *
	 * @var array
	 */
	private $sql_filters = [
		'where' => [
			'where',
			'where_time',
		],
		'join'  => [
			'right_join',
			'join',
			'left_join',
		],
	];

	/**
	 * Check has SQL clause.
	 *
	 * @param string $type   Clause type.
	 *
	 * @return boolean True if set and not empty.
	 */
	public function has_sql_clause( $type ) {
		return isset( $this->sql_clauses[ $type ] ) && ! empty( $this->sql_clauses[ $type ] );
	}

	/**
	 * Add a SQL clause to be included when get_data is called.
	 *
	 * @param string $type   Clause type.
	 * @param string $clause SQL clause.
	 */
	public function add_sql_clause( $type, $clause ) {
		if ( isset( $this->sql_clauses[ $type ] ) && ! empty( $clause ) ) {
			$this->sql_clauses[ $type ][] = $clause;
		}
	}

	/**
	 * Clear SQL clauses by type.
	 *
	 * @param string|array $types Clause type.
	 */
	protected function clear_sql_clause( $types ) {
		foreach ( (array) $types as $type ) {
			if ( isset( $this->sql_clauses[ $type ] ) ) {
				$this->sql_clauses[ $type ] = [];
			}
		}
	}

	/**
	 * Get SQL clause by type.
	 *
	 * @param string $type     Clause type.
	 * @param string $filtered Whether to filter the return value. Default unfiltered.
	 *
	 * @return string SQL clause.
	 */
	protected function get_sql_clause( $type, $filtered = false ) {
		if ( ! isset( $this->sql_clauses[ $type ] ) ) {
			return '';
		}

		$separator = ' ';
		if ( in_array( $type, [ 'select', 'order_by', 'group_by' ], true ) ) {
			$separator = ', ';
		}

		/**
		 * Default to bypassing filters for clause retrieval internal to data stores.
		 * The filters are applied when the full SQL statement is retrieved.
		 */
		if ( false === $filtered ) {
			return implode( $separator, $this->sql_clauses[ $type ] );
		}

		if ( isset( $this->sql_filters[ $type ] ) ) {
			$clauses = [];
			foreach ( $this->sql_filters[ $type ] as $subset ) {
				$clauses = array_merge( $clauses, $this->sql_clauses[ $subset ] );
			}
		} else {
			$clauses = $this->sql_clauses[ $type ];
		}

		/**
		 * Filter SQL clauses by type and context.
		 *
		 * @param array  $clauses The original arguments for the request.
		 * @param string $context The data store context.
		 */
		$clauses = apply_filters( "rank_math_clauses_{$type}", $clauses, $this->context );
		/**
		 * Filter SQL clauses by type and context.
		 *
		 * @param array  $clauses The original arguments for the request.
		 */
		$clauses = apply_filters( "rank_math_clauses_{$type}_{$this->context}", $clauses );

		return implode( $separator, $clauses );
	}
}
PK     •ŠU]õ/b›¢  ¢  )  includes/admin/database/class-orderby.phpnu „[µü¤        <?php
/**
 * The orderby functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

use RankMath\Helpers\Arr;

/**
 * OrderBy class.
 */
trait OrderBy {

	/**
	 * Add an order by statement to the current query
	 *
	 *     ->orderBy('created_at')
	 *     ->orderBy('modified_at', 'desc')
	 *
	 *     // multiple order clauses
	 *     ->orderBy(['firstname', 'lastname'], 'desc')
	 *
	 *     // multiple order clauses with different directions
	 *     ->orderBy(['firstname' => 'asc', 'lastname' => 'desc'])
	 *
	 * @param array|string $columns   Columns.
	 * @param string       $direction Direction.
	 *
	 * @return self The current query builder.
	 */
	public function orderBy( $columns, $direction = 'ASC' ) { // @codingStandardsIgnoreLine
		if ( is_string( $columns ) ) {
			$columns = $this->argument_to_array( $columns );
		}

		$direction = $this->sanitize_direction( $direction );

		foreach ( $columns as $key => $column ) {
			if ( is_numeric( $key ) ) {
				$this->add_sql_clause( 'order_by', "{$column}{$direction}" );
				continue;
			}

			$column = $this->sanitize_direction( $column );
			$this->add_sql_clause( 'order_by', "{$key}{$column}" );
		}

		return $this;
	}

	/**
	 * Sanitize direction
	 *
	 * @param string $direction Value to sanitize.
	 *
	 * @return string Sanitized value
	 */
	protected function sanitize_direction( $direction ) {
		if ( empty( $direction ) || 'ASC' === $direction || 'asc' === $direction ) {
			return '';
		}

		return ' ' . \strtoupper( $direction );
	}

	/**
	 * Returns an string argument as parsed array if possible
	 *
	 * @param string $argument Argument to validate.
	 *
	 * @return array
	 */
	protected function argument_to_array( $argument ) {
		if ( false !== strpos( $argument, ',' ) ) {
			return Arr::from_string( $argument );
		}

		return [ $argument ];
	}
}
PK     •ŠU]©Ì     +  includes/admin/database/class-translate.phpnu „[µü¤        <?php
/**
 * The translate functions.
 *
 * @since      1.0.0
 * @package    RankMath
 * @subpackage RankMath\Admin\Database
 * @author     RankMath <support@rankmath.com>
 */

namespace RankMath\Admin\Database;

/**
 * Translate class.
 */
trait Translate {

	/**
	 * Translate the current query to an SQL select statement
	 *
	 * @return string
	 */
	private function translateSelect() { // @codingStandardsIgnoreLine
		$query = [ 'SELECT' ];

		if ( $this->found_rows ) {
			$query[] = 'SQL_CALC_FOUND_ROWS';
		}

		if ( $this->distinct ) {
			$query[] = 'DISTINCT';
		}

		$query[] = $this->has_sql_clause( 'select' ) ? $this->get_sql_clause( 'select', true ) : '*';
		$query[] = $this->translateFrom();
		$query[] = $this->get_sql_clause( 'join', true );
		$query[] = $this->get_sql_clause( 'where', true );
		$query[] = $this->translateGroupBy();
		$query[] = $this->translateOrderBy();
		$query[] = $this->translateLimit();

		return join( ' ', array_filter( $query ) );
	}

	/**
	 * Translate the current query to an SQL update statement
	 *
	 * @return string
	 */
	private function translateUpdate() { // @codingStandardsIgnoreLine
		$query = [ "UPDATE {$this->table} SET" ];

		// Add the values.
		$values = [];
		foreach ( $this->sql_clauses['values'] as $key => $value ) {
			$values[] = $key . ' = ' . $this->esc_value( $value );
		}

		if ( ! empty( $values ) ) {
			$query[] = join( ', ', $values );
		}

		$query[] = $this->get_sql_clause( 'where', true );
		$query[] = $this->translateLimit();

		return join( ' ', array_filter( $query ) );
	}

	/**
	 * Translate the current query to an SQL delete statement
	 *
	 * @return string
	 */
	private function translateDelete() { // @codingStandardsIgnoreLine
		$query   = [ 'DELETE' ];
		$query[] = $this->translateFrom();
		$query[] = $this->get_sql_clause( 'where', true );
		$query[] = $this->translateLimit();

		return join( ' ', array_filter( $query ) );
	}

	/**
	 * Build the from statement.
	 *
	 * @return string
	 */
	private function translateFrom() { // @codingStandardsIgnoreLine
		if ( ! $this->has_sql_clause( 'from' ) ) {
			$this->add_sql_clause( 'from', $this->table );
		}

		return 'FROM ' . $this->get_sql_clause( 'from', true );
	}

	/**
	 * Build the order by statement
	 *
	 * @return string
	 */
	protected function translateOrderBy() { // @codingStandardsIgnoreLine
		if ( ! $this->has_sql_clause( 'order_by' ) ) {
			return '';
		}

		return 'ORDER BY ' . $this->get_sql_clause( 'order_by', true );
	}

	/**
	 * Build the group by clauses.
	 *
	 * @return string
	 */
	private function translateGroupBy() { // @codingStandardsIgnoreLine
		if ( ! $this->has_sql_clause( 'group_by' ) ) {
			return '';
		}

		$group_by = 'GROUP BY ' . $this->get_sql_clause( 'group_by', true );

		if ( $this->has_sql_clause( 'having' ) ) {
			$group_by .= ' ' . $this->get_sql_clause( 'having', true );
		}

		return $group_by;
	}

	/**
	 * Build offset and limit.
	 *
	 * @return string
	 */
	private function translateLimit() { // @codingStandardsIgnoreLine
		return $this->get_sql_clause( 'limit', true );
	}
}
PK     •ŠU]Ô[q§¥C  ¥C  %  includes/admin/class-post-columns.phpnu „[µü¤        <?php
/**
 * The admin post columns functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * Post_Columns class.
 */
class Post_Columns implements Runner {

	use Hooker;

	/**
	 * SEO data.
	 *
	 * @var array
	 */
	private $data = [];

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'admin_init', 'init' );
	}

	/**
	 * Initialize.
	 */
	public function init() {
		if ( ! Helper::has_cap( 'onpage_general' ) ) {
			return;
		}

		$this->register_post_columns();
		$this->register_media_columns();
		$this->register_taxonomy_columns();

		// Column Content.
		$this->filter( 'rank_math_title', 'get_column_title', 5, 2 );
		$this->filter( 'rank_math_description', 'get_column_description', 5, 2 );
		$this->filter( 'rank_math_seo_details', 'get_column_seo_details', 5 );
	}

	/**
	 * Register post column hooks.
	 */
	private function register_post_columns() {
		$post_types = Helper::get_allowed_post_types();
		foreach ( $post_types as $post_type ) {
			$this->filter( 'edd_download_columns', 'add_columns', 11 );
			$this->filter( "manage_{$post_type}_posts_columns", 'add_columns', 11 );
			$this->action( "manage_{$post_type}_posts_custom_column", 'columns_contents', 11, 2 );
			$this->filter( "manage_edit-{$post_type}_sortable_columns", 'sortable_columns', 11 );

			// Also make them hidden by default.
			$user_id        = get_current_user_id();
			$columns_hidden = (array) get_user_meta( $user_id, "manageedit-{$post_type}columnshidden", true );
			$maybe_hidden   = get_user_meta( $user_id, "manageedit-{$post_type}columnshidden_default", true );

			// Continue if default is already set.
			if ( $maybe_hidden ) {
				continue;
			}

			// Set it to hidden by default.
			$columns_hidden = array_unique( array_merge( $columns_hidden, [ 'rank_math_title', 'rank_math_description' ] ) );
			update_user_meta( $user_id, "manageedit-{$post_type}columnshidden", $columns_hidden );
			update_user_meta( $user_id, "manageedit-{$post_type}columnshidden_default", '1' );
		}
	}

	/**
	 * Register media column hooks.
	 */
	private function register_media_columns() {
		if ( ! Helper::get_settings( 'titles.pt_attachment_bulk_editing' ) ) {
			return;
		}

		$this->filter( 'manage_media_columns', 'add_media_columns', 11 );
		$this->action( 'manage_media_custom_column', 'media_contents', 11, 2 );
	}

	/**
	 * Register taxonomy columns hooks.
	 *
	 * @return void
	 */
	private function register_taxonomy_columns() {
		$taxonomies = Helper::get_allowed_taxonomies();
		foreach ( $taxonomies as $taxonomy ) {
			$this->filter( "manage_edit-{$taxonomy}_columns", 'add_taxonomy_columns', 9 );
			$this->filter( "manage_{$taxonomy}_custom_column", 'taxonomy_columns_contents', 10, 3 );
		}
	}

	/**
	 * Add new columns for SEO title, description and focus keywords.
	 *
	 * @param array $columns Array of column names.
	 *
	 * @return array
	 */
	public function add_columns( $columns ) {
		global $post_type;
		$current_pt = $post_type;
		if ( ! $post_type && 'inline-save' === Param::post( 'action' ) ) {
			$post_id    = Param::post( 'post_ID', 0, FILTER_VALIDATE_INT );
			$current_pt = get_post_type( $post_id );
		}
		$columns['rank_math_seo_details'] = esc_html__( 'SEO Details', 'seo-by-rank-math' );

		if ( Helper::get_settings( 'titles.pt_' . $current_pt . '_bulk_editing', true ) ) {
			$columns['rank_math_title']       = esc_html__( 'SEO Title', 'seo-by-rank-math' );
			$columns['rank_math_description'] = esc_html__( 'SEO Desc', 'seo-by-rank-math' );
		}

		return $columns;
	}

	/**
	 * Make the SEO Score column sortable.
	 *
	 * @param array $columns Array of column names.
	 *
	 * @return array
	 */
	public function sortable_columns( $columns ) {
		$columns['rank_math_seo_details'] = 'rank_math_seo_score';

		return $columns;
	}

	/**
	 * Add new columns for Media Alt & Title.
	 *
	 * @param array $columns Array of column names.
	 *
	 * @return array
	 */
	public function add_media_columns( $columns ) {
		$columns['rank_math_image_title'] = esc_html__( 'Title', 'seo-by-rank-math' );
		$columns['rank_math_image_alt']   = esc_html__( 'Alternative Text', 'seo-by-rank-math' );

		return $columns;
	}

	/**
	 * Adds custom columns to taxonomy list view.
	 *
	 * @param array $columns Columns belonging to current taxonomy.
	 *
	 * @return array
	 */
	public function add_taxonomy_columns( $columns ) {
		$screen = get_current_screen();
		if ( ! $screen || empty( $screen->taxonomy ) ) {
			return $columns;
		}
		if ( Helper::get_settings( 'titles.tax_' . $screen->taxonomy . '_bulk_editing', false ) ) {
			$columns['rank_math_title']       = esc_html__( 'SEO Title', 'seo-by-rank-math' );
			$columns['rank_math_description'] = esc_html__( 'SEO Desc', 'seo-by-rank-math' );
		}

		return $columns;
	}

	/**
	 * Add content for custom column.
	 *
	 * @param string $column_name The name of the column to display.
	 * @param int    $post_id     The current post ID.
	 */
	public function columns_contents( $column_name, $post_id ) {
		if ( Str::starts_with( 'rank_math', $column_name ) ) {
			do_action( $column_name, $post_id );
		}
	}

	/**
	 * Generate content of custom columns.
	 *
	 * @param string $content     The content of the current column.
	 * @param string $column_name The column name.
	 * @param int    $term_id     The unique ID of the current term.
	 *
	 * @return string
	 */
	public function taxonomy_columns_contents( $content, $column_name, $term_id ) {
		if ( Str::starts_with( 'rank_math_', $column_name ) ) {
			do_action( $column_name, $term_id, 'term' );
		}

		return $content;
	}

	/**
	 * Add content for title column.
	 *
	 * @param int    $object_id   The current Object ID.
	 * @param string $object_type The current Object type.
	 */
	public function get_column_title( $object_id, $object_type = 'post' ) {
		if ( empty( $this->data ) ) {
			$method = "get_{$object_type}_seo_data";
			$this->$method( $object_type );
		}

		$title = ! empty( $this->data[ $object_id ]['rank_math_title'] ) ? $this->data[ $object_id ]['rank_math_title'] : '';
		if ( ! $title ) {
			$title = $this->get_default_title( $object_id, $object_type );
		}
		?>
		<span class="rank-math-column-display"><?php echo esc_html( $title ); ?></span>
		<textarea class="rank-math-column-value" data-field="title" tabindex="11"><?php echo esc_attr( $title ); ?></textarea>
		<div class="rank-math-column-edit">
			<a href="#" class="rank-math-column-save"><?php esc_html_e( 'Save', 'seo-by-rank-math' ); ?></a>
			<a href="#" class="button-link-delete rank-math-column-cancel"><?php esc_html_e( 'Cancel', 'seo-by-rank-math' ); ?></a>
		</div>
		<?php
	}

	/**
	 * Add content for description column.
	 *
	 * @param int    $object_id   The current Object ID.
	 * @param string $object_type The current Object type.
	 */
	public function get_column_description( $object_id, $object_type = 'post' ) {
		$description = ! empty( $this->data[ $object_id ]['rank_math_description'] ) ? $this->data[ $object_id ]['rank_math_description'] : '';
		if ( ! $description ) {
			$description = $this->get_default_description( $object_id, $object_type );
		}
		?>
		<span class="rank-math-column-display"><?php echo esc_html( $description ); ?></span>
		<textarea class="rank-math-column-value" data-field="description" tabindex="11"><?php echo esc_attr( $description ); ?></textarea>
		<div class="rank-math-column-edit">
			<a href="#" class="rank-math-column-save"><?php esc_html_e( 'Save', 'seo-by-rank-math' ); ?></a>
			<a href="#" class="button-link-delete rank-math-column-cancel"><?php esc_html_e( 'Cancel', 'seo-by-rank-math' ); ?></a>
		</div>
		<?php
	}

	/**
	 * Add content for title column.
	 *
	 * @param int $post_id The current post ID.
	 */
	public function get_column_seo_details( $post_id ) {
		if ( empty( $this->data ) ) {
			$this->get_post_seo_data();
		}

		$data = isset( $this->data[ $post_id ] ) ? $this->data[ $post_id ] : [];
		if ( ! self::is_post_indexable( $post_id ) ) {
			echo '<span class="rank-math-column-display seo-score no-score "><strong>N/A</strong></span>';
			echo '<strong>' . esc_html__( 'No Index', 'seo-by-rank-math' ) . '</strong>';
			$this->do_action( 'post/column/seo_details', $post_id, $data, $this->data );
			return;
		}

		$keyword   = ! empty( $data['rank_math_focus_keyword'] ) ? $data['rank_math_focus_keyword'] : '';
		$keyword   = explode( ',', $keyword )[0];
		$is_pillar = ! empty( $data['rank_math_pillar_content'] ) && 'on' === $data['rank_math_pillar_content'] ? true : false;

		$score = empty( $keyword ) ? false : $this->get_seo_score( $data );
		$class = ! $score ? 'no-score' : $this->get_seo_score_class( $score );
		$score = $score ? $score . ' / 100' : 'N/A';

		?>
		<span class="rank-math-column-display seo-score <?php echo esc_attr( $class ); ?> <?php echo ! $score ? 'disabled' : ''; ?>">
			<strong><?php echo esc_html( $score ); ?></strong>
			<?php if ( $is_pillar ) { ?>
				<img class="is-pillar" src="<?php echo esc_url( rank_math()->plugin_url() . 'assets/admin/img/pillar.svg' ); ?>" alt="<?php esc_html_e( 'Is Pillar', 'seo-by-rank-math' ); ?>" title="<?php esc_html_e( 'Is Pillar', 'seo-by-rank-math' ); ?>" width="25" />
			<?php } ?>
		</span>

			<label><?php esc_html_e( 'Focus Keyword', 'seo-by-rank-math' ); ?>:</label>
			<span class="rank-math-column-display">
				<strong title="Focus Keyword"><?php esc_html_e( 'Keyword', 'seo-by-rank-math' ); ?>:</strong>
				<span>
					<?php
						echo $keyword ? wp_kses_post( $this->do_filter( 'post/column/seo_details/focus_keyword', $keyword ) ) : esc_html__( 'Not Set', 'seo-by-rank-math' );
					?>
				</span>
			</span>

			<input class="rank-math-column-value" data-field="focus_keyword" tabindex="11" value="<?php echo esc_attr( $keyword ); ?>" />

			<?php $this->do_action( 'post/column/seo_details', $post_id, $data, $this->data ); ?>

			<div class="rank-math-column-edit">
				<a href="#" class="rank-math-column-save"><?php esc_html_e( 'Save', 'seo-by-rank-math' ); ?></a>
				<a href="#" class="button-link-delete rank-math-column-cancel"><?php esc_html_e( 'Cancel', 'seo-by-rank-math' ); ?></a>
			</div>

		<?php
	}

	/**
	 * Add content for custom media column.
	 *
	 * @param string $column_name The name of the column to display.
	 * @param int    $post_id     The current post ID.
	 */
	public function media_contents( $column_name, $post_id ) {
		if ( 'rank_math_image_title' === $column_name ) {
			$title = get_the_title( $post_id );
			?>
			<span class="rank-math-column-display"><?php echo esc_html( $title ); ?></span>
			<input class="rank-math-column-value" data-field="image_title" tabindex="11" value="<?php echo esc_attr( $title ); ?>" />
			<div class="rank-math-column-edit">
				<a href="#" class="rank-math-column-save"><?php esc_html_e( 'Save', 'seo-by-rank-math' ); ?></a>
				<a href="#" class="button-link-delete rank-math-column-cancel"><?php esc_html_e( 'Cancel', 'seo-by-rank-math' ); ?></a>
			</div>
			<?php
			return;
		}

		if ( 'rank_math_image_alt' === $column_name ) {
			$alt = get_post_meta( $post_id, '_wp_attachment_image_alt', true );
			?>
			<span class="rank-math-column-display"><?php echo esc_html( $alt ); ?></span>
			<input class="rank-math-column-value" data-field="image_alt" tabindex="11" value="<?php echo esc_attr( $alt ); ?>" />
			<div class="rank-math-column-edit">
				<a href="#" class="rank-math-column-save"><?php esc_html_e( 'Save', 'seo-by-rank-math' ); ?></a>
				<a href="#" class="button-link-delete rank-math-column-cancel"><?php esc_html_e( 'Cancel', 'seo-by-rank-math' ); ?></a>
			</div>
			<?php
			return;
		}
	}

	/**
	 * Get Default title for the object type.
	 *
	 * @param int    $object_id   The current Object ID.
	 * @param string $object_type The current Object type.
	 */
	private function get_default_title( $object_id, $object_type ) {
		if ( $object_type === 'term' ) {
			$term = get_term( $object_id );
			return Helper::get_settings( "titles.tax_{$term->taxonomy}_title" );
		}

		$post_type = get_post_type( $object_id );
		return Helper::get_settings( "titles.pt_{$post_type}_title" );
	}

	/**
	 * Get Default description for the object type.
	 *
	 * @param int    $object_id   The current Object ID.
	 * @param string $object_type The current Object type.
	 */
	private function get_default_description( $object_id, $object_type ) {
		if ( $object_type === 'term' ) {
			$term = get_term( $object_id );
			return Helper::get_settings( "titles.tax_{$term->taxonomy}_description" );
		}

		$post_type = get_post_type( $object_id );
		return has_excerpt( $object_id ) ? '%excerpt%' : Helper::get_settings( "titles.pt_{$post_type}_description" );
	}

	/**
	 * Get Terms SEO data.
	 */
	private function get_term_seo_data() {
		$wp_list_table = _get_list_table( 'WP_Terms_List_Table' );
		$wp_list_table->prepare_items();
		$items = $wp_list_table->items;
		if ( empty( $items ) ) {
			return false;
		}

		$term_ids = array_filter(
			array_map(
				function ( $item ) {
					return isset( $item->term_id ) ? $item->term_id : '';
				},
				$items
			)
		);

		$results = Database::table( 'termmeta' )->select( [ 'term_id', 'meta_key', 'meta_value' ] )->whereIn( 'term_id', $term_ids )->whereLike( 'meta_key', 'rank_math' )->get( ARRAY_A );
		if ( empty( $results ) ) {
			return false;
		}

		foreach ( $results as $result ) {
			$this->data[ $result['term_id'] ][ $result['meta_key'] ] = $result['meta_value'];
		}
	}

	/**
	 * Get Post SEO data.
	 */
	private function get_post_seo_data() {
		$post_ids = [];

		$post_ids = array_filter( $this->get_post_ids() );
		$post_id  = (int) Param::post( 'post_ID' );
		if ( $post_id ) {
			$post_ids[] = $post_id;
		}

		if ( empty( $post_ids ) ) {
			return false;
		}

		$results = Database::table( 'postmeta' )->select( [ 'post_id', 'meta_key', 'meta_value' ] )->whereIn( 'post_id', $post_ids )->whereLike( 'meta_key', 'rank_math' )->get( ARRAY_A );
		if ( empty( $results ) ) {
			return false;
		}

		foreach ( $results as $result ) {
			$this->data[ $result['post_id'] ][ $result['meta_key'] ] = $result['meta_value'];
		}
	}

	/**
	 * Get Post IDs displayed on the Post lists page.
	 */
	private function get_post_ids() {
		global $wp_query, $per_page;
		if ( empty( $wp_query->posts ) ) {
			return [];
		}

		$pages = $wp_query->posts;
		if (
			! is_post_type_hierarchical( Param::get( 'post_type' ) ) ||
			'menu_order title' !== $wp_query->query['orderby']
		) {
			return array_map(
				function ( $post ) {
					return isset( $post->ID ) ? $post->ID : '';
				},
				$pages
			);
		}

		$children_pages = [];
		if ( empty( Param::request( 's' ) ) ) {
			$top_level_pages = [];

			foreach ( $pages as $page ) {
				if ( $page->post_parent > 0 ) {
					$children_pages[ $page->post_parent ][] = $page;
				} else {
					$top_level_pages[] = $page;
				}
			}

			$pages = &$top_level_pages;
		}

		$pagenum = max( 1, Param::request( 'paged', 0 ) );
		$count   = 0;
		$start   = ( $pagenum - 1 ) * $per_page;
		$end     = $start + $per_page;
		$ids     = [];

		foreach ( $pages as $page ) {
			if ( $count >= $end ) {
				break;
			}

			if ( $count >= $start ) {
				$ids[] = $page->ID;
			}

			++$count;

			$this->add_child_page_ids( $children_pages, $page->ID, $ids, $count );
		}

		return $ids;
	}

	/**
	 * Add the child page IDs to the list of IDs to be processed.
	 *
	 * @param array $children_pages Child Pages.
	 * @param int   $id             Current page ID.
	 * @param array $ids            IDs to be processed.
	 * @param int   $count          Counter.
	 */
	private function add_child_page_ids( $children_pages, $id, &$ids, &$count ) {
		if ( empty( $children_pages ) || empty( $children_pages[ $id ] ) ) {
			return;
		}

		foreach ( $children_pages[ $id ] as $child_page ) {
			$id    = $child_page->ID;
			$ids[] = $child_page->ID;
			++$count;

			$this->add_child_page_ids( $children_pages, $id, $ids, $count );
		}
	}

	/**
	 * Get SEO score.
	 *
	 * @param array $data SEO data of current post.
	 *
	 * @return string
	 */
	private function get_seo_score( $data ) {
		if ( ! isset( $data['rank_math_seo_score'] ) ) {
			return false;
		}

		if ( ! Helper::is_score_enabled() ) {
			return false;
		}

		return $data['rank_math_seo_score'] ? $data['rank_math_seo_score'] : 0;
	}

	/**
	 * Get SEO score rating string: great/good/bad.
	 *
	 * @param int $score Score.
	 *
	 * @return string
	 */
	private function get_seo_score_class( $score ) {
		if ( $score > 80 ) {
			return 'great';
		}

		if ( $score > 50 && $score < 81 ) {
			return 'good';
		}

		return 'bad';
	}

	/**
	 * Check post indexable status.
	 *
	 * @param int $post_id Post ID.
	 */
	public static function is_post_indexable( $post_id ) {
		$robots = Param::post( 'rank_math_robots', false, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );

		$robots = apply_filters( 'rank_math/admin/robots', $robots, $post_id );
		if ( ! empty( $robots ) ) {
			return in_array( 'index', $robots, true ) ? true : false;
		}

		return Helper::is_post_indexable( $post_id, false );
	}
}
PK     •ŠU]è´IßÅ  Å  *  includes/admin/class-admin-breadcrumbs.phpnu „[µü¤        <?php
/**
 * Breadcrumbs for the Rank Math pages.
 *
 * @since      1.0.44
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Google\Console;

defined( 'ABSPATH' ) || exit;

/**
 * Admin Header class.
 *
 * @codeCoverageIgnore
 */
class Admin_Breadcrumbs {

	/**
	 * Display Header.
	 */
	public function display() {
		?>
		<div class="rank-math-breadcrumbs-wrap">
			<div class="rank-math-breadcrumbs">
				<span><?php echo esc_html__( 'Dashboard', 'seo-by-rank-math' ); ?></span>
				<span class="divider">/</span>
				<span class="active"><?php echo esc_html( $this->get_page_title() ); ?></span>
			</div>
		</div>
		<?php
	}

	/**
	 * Get Current Admin Page Title.
	 */
	private function get_page_title() {
		$base = __( 'Modules', 'seo-by-rank-math' );
		if ( is_network_admin() ) {
			$base = __( 'Help', 'seo-by-rank-math' );
		}
		$default = 'rank-math' === Param::get( 'page' ) ? $base : get_admin_page_title();
		return str_replace( '_', ' ', Param::get( 'view', $default, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK ) );
	}
}
PK     •ŠU]ÞÔËoÛ2  Û2  %  includes/admin/class-cmb2-options.phpnu „[µü¤        <?php
/**
 * The option page functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Admin;

use WP_Http;
use RankMath\KB;
use RankMath\CMB2;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * CMB2_Options class.
 */
class CMB2_Options {

	use Hooker;

	/**
	 * Page title.
	 *
	 * @var string
	 */
	public $title = 'Settings';

	/**
	 * Menu title.
	 *
	 * @var string
	 */
	public $menu_title = 'Settings';

	/**
	 * Hold tabs for page.
	 *
	 * @var array
	 */
	public $tabs = [];

	/**
	 * Hold folder name for tab files.
	 *
	 * @var string
	 */
	public $folder = '';

	/**
	 * Menu Position.
	 *
	 * @var int
	 */
	public $position = 10;

	/**
	 * The capability required for this menu to be displayed to the user.
	 *
	 * @var string
	 */
	public $capability = 'manage_options';

	/**
	 * CMB2 option page id.
	 *
	 * @var string
	 */
	private $cmb_id = null;

	/**
	 * Options key.
	 *
	 * @var string
	 */
	public $key = '';

	/**
	 * The Constructor
	 *
	 * @param array $config Array of configuration.
	 */
	public function __construct( $config ) {

		$this->config( $config );
		$this->cmb_id = $this->key . '_options';

		$this->action( 'cmb2_admin_init', 'register_option_page', $this->position );
		$this->action( 'admin_post_' . $this->key, 'reset_options', 2 );

		if ( true === empty( get_option( $this->key ) ) ) {
			$this->action( 'cmb2_init_hookup_' . $this->cmb_id, 'set_defaults', 11 );
		}

		if ( ! $this->is_current_page() ) {
			return;
		}

		$this->action( 'admin_enqueue_scripts', 'enqueue' );
		$this->action( 'admin_body_class', 'body_class' );

		// Check for fields and act accordingly.
		$this->action( 'cmb2_save_options-page_fields_rank-math-options-general_options', 'check_updated_fields', 25, 2 );
		$this->action( 'cmb2_save_options-page_fields_rank-math-options-titles_options', 'check_updated_fields', 25, 2 );
	}

	/**
	 * Create cmb2 box.
	 *
	 * @return CMB2
	 */
	private function create_cmb2() {
		return new_cmb2_box(
			[
				'id'           => $this->cmb_id,
				'title'        => $this->title,
				'menu_title'   => $this->menu_title,
				'capability'   => $this->capability,
				'object_types' => [ 'options-page' ],
				'option_key'   => $this->key,
				'parent_slug'  => 'rank-math',
				'cmb_styles'   => false,
				'display_cb'   => [ $this, 'display' ],
			]
		);
	}

	/**
	 * Create option object and add settings.
	 */
	public function register_option_page() {
		$cmb  = $this->create_cmb2();
		$tabs = $this->get_tabs();

		$cmb->add_field(
			[
				'id'      => 'setting-panel-container-' . $this->cmb_id,
				'type'    => 'tab_container_open',
				'classes' => 'before-header',
				'tabs'    => $tabs,
			]
		);

		foreach ( $tabs as $id => $tab ) {
			$located = $this->locate_file( $id, $tab );
			if ( false === $located ) {
				continue;
			}

			$cmb->add_field(
				[
					'name'    => esc_html__( 'Panel', 'seo-by-rank-math' ),
					'id'      => 'setting-panel-' . $id,
					'type'    => 'tab',
					'open'    => true,
					'classes' => isset( $tab['classes'] ) ? $tab['classes'] : '',
				]
			);

			$cmb->add_field(
				[
					'id'        => $id . '_section_title',
					'type'      => 'title',
					'name'      => isset( $tab['page_title'] ) ? $tab['page_title'] : ( isset( $tab['title'] ) ? $tab['title'] : '' ),
					'desc'      => isset( $tab['desc'] ) ? $tab['desc'] : '',
					'after'     => isset( $tab['after'] ) ? $tab['after'] : '',
					'classes'   => 'tab-header',
					'after_row' => isset( $tab['after_row'] ) ? $tab['after_row'] : '',
				]
			);

			include $located;

			$this->do_action( "admin/settings/{$id}", $cmb, $tab );

			$cmb->add_field(
				[
					'id'   => 'setting-panel-' . $id . '-close',
					'type' => 'tab',
				]
			);
		}

		$cmb->add_field(
			[
				'id'   => 'setting-panel-container-close-' . $this->cmb_id,
				'type' => 'tab_container_close',
			]
		);

		CMB2::pre_init( $cmb );
	}

	/**
	 * Set the default values if not set.
	 *
	 * @param CMB2 $cmb The CMB2 object to hookup.
	 */
	public function set_defaults( $cmb ) {
		foreach ( $cmb->prop( 'fields' ) as $id => $field_args ) {
			$field = $cmb->get_field( $id );
			if ( isset( $field_args['default'] ) || isset( $field_args['default_cb'] ) ) {
				$defaults[ $id ] = $field->get_default();
			}
		}

		// Save Defaults if any.
		if ( ! empty( $defaults ) ) {
			add_option( $this->key, $defaults );
		}
	}

	/**
	 * Reset options.
	 */
	public function reset_options() {

		if ( ! check_admin_referer( 'rank-math-reset-options' ) || ! current_user_can( 'manage_options' ) ) {
			return false;
		}

		$url = wp_get_referer();
		if ( ! $url ) {
			$url = admin_url();
		}

		if ( filter_has_var( INPUT_POST, 'reset-cmb' ) && Param::post( 'action' ) === $this->key ) {
			delete_option( $this->key );
			Helper::redirect( esc_url_raw( $url ), WP_Http::SEE_OTHER );
			exit;
		}
	}

	/**
	 * Enqueue styles and scripts.
	 */
	public function enqueue() {
		$screen = get_current_screen();

		if ( ! Str::contains( $this->key, $screen->id ) ) {
			return;
		}

		\CMB2_Hookup::enqueue_cmb_css();
		rank_math()->variables->setup_json();
		wp_enqueue_style( 'rank-math-options', rank_math()->plugin_url() . 'assets/admin/css/option-panel.css', [ 'select2-rm', 'rank-math-common', 'rank-math-cmb2' ], rank_math()->version );
		wp_enqueue_script( 'rank-math-options', rank_math()->plugin_url() . 'assets/admin/js/option-panel.js', [ 'underscore', 'select2-rm', 'lodash', 'rank-math-common', 'wp-api-fetch' ], rank_math()->version, true );

		// Add thank you.
		Helper::add_json( 'indexUrl', rank_math()->plugin_url() . 'assets/admin/js/search-index/' );
		Helper::add_json( 'optionPage', str_replace( 'rank-math-options-', '', $this->key ) );
	}

	/**
	 * Add classes to <body> of WordPress admin.
	 *
	 * @param string $classes List of CSS classes.
	 * @return string
	 */
	public function body_class( $classes = '' ) {
		$mode = Helper::is_advanced_mode() ? 'advanced' : 'basic';
		return $classes . ' rank-math-page rank-math-mode-' . $mode;
	}

	/**
	 * Display Setting on a page.
	 *
	 * @param CMB2_Options $machine Current CMB2 box object.
	 */
	public function display( $machine ) {
		$cmb = $machine->cmb;

		// Header.
		rank_math()->admin->display_admin_header();
		?>

		<?php if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) : ?>
			<div class="rank-math-unlock-pro-notice" id="rank-math-unlock-pro-notice">
				<a href="<?php KB::the( 'pro', 'Unlock PRO Options Panel Notice' ); ?>" target="_blank" class="pro-link">
					<p>
						<?php esc_html_e( 'Take your SEO to the Next Level!', 'seo-by-rank-math' ); ?>
						<strong><?php esc_html_e( 'Get Rank Math PRO!', 'seo-by-rank-math' ); ?></strong>
						<span><?php esc_html_e( 'Click here to see all the exciting features.', 'seo-by-rank-math' ); ?></span>
					</p>
					<div class="close-notice">
						<span class="dashicons dashicons-dismiss"></span>
					</div>
				</a>
			</div>
		<?php endif; ?>

		<div class="wrap rank-math-wrap rank-math-wrap-settings">

			<span class="wp-header-end"></span>

			<form class="cmb-form" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="POST" id="<?php echo esc_attr( $cmb->cmb_id ); ?>" enctype="multipart/form-data" encoding="multipart/form-data">

				<input type="hidden" name="action" value="<?php echo esc_attr( $machine->option_key ); ?>">
				<?php $machine->options_page_metabox(); ?>

				<footer class="form-footer rank-math-ui settings-footer wp-clearfix">
					<?php wp_nonce_field( 'rank-math-reset-options' ); ?>
					<input type="submit" name="submit-cmb" id="submit-cmb" title="<?php echo esc_html__( 'Ctrl/Cmd + Enter', 'seo-by-rank-math' ); ?>" class="button button-primary save-options" value="<?php esc_attr_e( 'Save Changes', 'seo-by-rank-math' ); ?>">
					<input type="submit" name="reset-cmb" id="rank-math-reset-cmb" value="<?php esc_attr_e( 'Reset Options', 'seo-by-rank-math' ); ?>" class="button button-secondary reset-options alignleft">
				</footer>

			</form>

		</div>

		<?php
	}

	/**
	 * Check if we are on the correct page.
	 *
	 * @return bool
	 */
	public function is_current_page() {
		return Param::request( 'page' ) === $this->key || Param::request( 'action' ) === $this->key;
	}

	/**
	 * Check if certain fields got updated.
	 *
	 * @param int   $object_id The ID of the current object.
	 * @param array $updated   Array of field ids that were updated.
	 *                         Will only include field ids that had values change.
	 */
	public function check_updated_fields( $object_id, $updated ) {

		/**
		 * Filter: Allow developers to add option fields which will flush the rewrite rules when updated.
		 *
		 * @param array $flush_fields Array of field IDs for which we need to flush.
		 */
		$flush_fields = $this->do_filter(
			'flush_fields',
			[
				'strip_category_base',
				'disable_author_archives',
				'url_author_base',
				'attachment_redirect_urls',
				'attachment_redirect_default',
				'nofollow_external_links',
				'nofollow_image_links',
				'nofollow_domains',
				'nofollow_exclude_domains',
				'new_window_external_links',
				'redirections_header_code',
				'redirections_post_redirect',
				'redirections_debug',
			]
		);

		foreach ( $flush_fields as $field_id ) {
			if ( in_array( $field_id, $updated, true ) ) {
				Helper::schedule_flush_rewrite();
				break;
			}
		}

		$this->maybe_update_htaccess();
	}

	/**
	 * Update .htaccess.
	 */
	private function maybe_update_htaccess() {
		if ( empty( Param::post( 'htaccess_accept_changes' ) ) ) {
			return;
		}

		if ( ! is_super_admin() || ! Helper::has_cap( 'general' ) || ! Helper::has_cap( 'edit_htaccess' ) ) {
			Helper::add_notification(
				esc_html__( 'You do not have permission to edit the .htaccess file.', 'seo-by-rank-math' ),
				[ 'type' => 'error' ]
			);
			return;
		}

		if ( ! Helper::is_edit_allowed() ) {
			Helper::add_notification(
				esc_html__( 'You do not have permission to edit the .htaccess file.', 'seo-by-rank-math' ),
				[ 'type' => 'error' ]
			);
			return;
		}

		// phpcs:ignore= WordPress.Security.ValidatedSanitizedInput, WordPress.Security.NonceVerification -- Writing to .htaccess file and escaping for HTML will break functionality & CMB2 package handles the nonce verification
		$content = isset( $_POST['htaccess_content'] ) ? wp_unslash( $_POST['htaccess_content'] ) : '';
		if ( empty( $content ) ) {
			return;
		}

		if ( ! $this->do_htaccess_backup() ) {
			Helper::add_notification(
				esc_html__( 'Failed to backup .htaccess file. Please check file permissions.', 'seo-by-rank-math' ),
				[ 'type' => 'error' ]
			);
			return;
		}
		if ( ! $this->do_htaccess_update( $content ) ) {
			Helper::add_notification(
				esc_html__( 'Failed to update .htaccess file. Please check file permissions.', 'seo-by-rank-math' ),
				[ 'type' => 'error' ]
			);
			return;
		}

		Helper::add_notification( esc_html__( '.htaccess file updated successfully.', 'seo-by-rank-math' ) );
	}

	/**
	 * Create htaccess backup.
	 *
	 * @return bool
	 */
	private function do_htaccess_backup() {
		if ( ! Helper::is_filesystem_direct() ) {
			return false;
		}

		$wp_filesystem = Helper::get_filesystem();

		$path = get_home_path();
		$file = $path . '.htaccess';
		if ( ! $wp_filesystem->is_writable( $path ) || ! $wp_filesystem->exists( $file ) ) {
			return false;
		}

		$backup = $path . uniqid( '.htaccess_back_' );
		return $wp_filesystem->copy( $file, $backup, true );
	}

	/**
	 * Update htaccess file.
	 *
	 * @param string $content Htaccess content.
	 * @return string|bool
	 */
	private function do_htaccess_update( $content ) {
		if ( empty( $content ) || ! Helper::is_filesystem_direct() ) {
			return false;
		}

		$wp_filesystem = Helper::get_filesystem();
		$htaccess_file = get_home_path() . '.htaccess';

		return ! $wp_filesystem->is_writable( $htaccess_file ) ? false : $wp_filesystem->put_contents( $htaccess_file, $content );
	}


	/**
	 * Get setting tabs.
	 *
	 * @return array
	 */
	private function get_tabs() {

		$filter = str_replace( '-', '_', str_replace( 'rank-math-', '', $this->key ) );
		/**
		 * Allow developers to add new tabs into option panel.
		 *
		 * The dynamic part of hook is, page name without 'rank-math-' prefix.
		 *
		 * @param array $tabs
		 */
		return $this->do_filter( "admin/options/{$filter}_tabs", $this->tabs );
	}

	/**
	 * Locate tab options file.
	 *
	 * @param  string $id  Tab id.
	 * @param  array  $tab Tab options.
	 * @return string|boolean
	 */
	private function locate_file( $id, $tab ) {
		if ( isset( $tab['type'] ) && 'separator' === $tab['type'] ) {
			return false;
		}

		$file = isset( $tab['file'] ) && ! empty( $tab['file'] ) ? $tab['file'] : rank_math()->includes_dir() . "settings/{$this->folder}/{$id}.php";

		return file_exists( $file ) ? $file : false;
	}
}
PK     •ŠU][«3¤  ¤  #  includes/updates/update-1.0.232.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.232.
 *
 * @since      1.0.232
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Add indexes to the internal links table (target_post_id column).
 */
function rank_math_1_0_232_internal_links_table_indexes() {
	global $wpdb;

	$wpdb->query( "ALTER TABLE {$wpdb->prefix}rank_math_internal_links ADD INDEX target_post_id (target_post_id)" );
}
rank_math_1_0_232_internal_links_table_indexes();
PK     •ŠU]}¢�)[  [  #  includes/updates/update-1.0.110.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.110
 *
 * @since      1.0.110
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Update the deprecated schema type Attorney and used it as LegalService.
 */
function rank_math_1_0_110_update_local_business_type() {
	$all_opts = rank_math()->settings->all_raw();
	$titles   = $all_opts['titles'];

	if ( 'Attorney' !== $titles['local_business_type'] ) {
		return;
	}

	$titles['local_business_type'] = 'LegalService';

	Helper::update_all_settings( null, $titles, null );
	rank_math()->settings->reset();
}
rank_math_1_0_110_update_local_business_type();
PK     •ŠU]tØßO  O  %  includes/updates/update-1.0.201.1.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.201.1
 *
 * @since      1.0.201.1
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Remove the schedule event used to update the prompts.
 */
function rank_math_1_0_201_1_remove_prompt_event() {
	wp_clear_scheduled_hook( 'rank_math/content-ai/update_prompts' );
}
rank_math_1_0_201_1_remove_prompt_event();
PK     •ŠU]­ýq�  �  #  includes/updates/update-1.0.211.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.211.
 *
 * @since      1.0.211
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Add value in options table to show a notification in Dashboard menu on existing setup.
 */
function rank_math_1_0_211_content_ai_store_notification_option() {
	update_option( 'rank_math_view_modules', true, false );
}
rank_math_1_0_211_content_ai_store_notification_option();
PK     •ŠU].£Da?  ?  %  includes/updates/update-1.0.107.3.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.107.3
 *
 * @since      1.0.107.3
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Replace %searchphrase% variable to %search_query%
 */
function rank_math_1_0_107_3_replace_search_variable() {
	$all_opts = rank_math()->settings->all_raw();
	$titles   = $all_opts['titles'];

	$titles['search_title'] = str_replace( '%searchphrase%', '%search_query%', $titles['search_title'] );

	RankMath\Helper::update_all_settings( null, $titles, null );
	rank_math()->settings->reset();
}
rank_math_1_0_107_3_replace_search_variable();
PK     •ŠU]Ôª    "  includes/updates/update-1.0.86.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.86
 *
 * @since      1.0.86
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Update Analytics Stats on existing sites.
 */
function rank_math_1_0_86_update_analytics_stats() {
	$all_opts                   = rank_math()->settings->all_raw();
	$general                    = $all_opts['general'];
	$general['analytics_stats'] = 'on';

	Helper::update_all_settings( $general, null, null );
	rank_math()->settings->reset();
}
rank_math_1_0_86_update_analytics_stats();
PK     •ŠU]R‘	    #  includes/updates/update-1.0.237.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.237.
 *
 * @since      1.0.237
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Alter the redirections table structure.
 */
function rank_math_1_0_237_update_redirection_structure() {
	// Early Bail if redirections table doesn't exist.
	if ( ! \RankMath\Helpers\DB::check_table_exists( 'rank_math_redirections' ) ) {
		return;
	}

	global $wpdb;
	$wpdb->query( "ALTER TABLE {$wpdb->prefix}rank_math_redirections MODIFY COLUMN sources LONGTEXT NOT NULL" );
}
rank_math_1_0_237_update_redirection_structure();
PK     •ŠU]ùß}Mk  k  #  includes/updates/update-1.0.273.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.273
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

use RankMath\Helper;

/**
 * Enable AI Visibility module by default for existing installs.
 */
function rank_math_1_0_273_enable_ai_visibility_module() {
	Helper::update_modules( [ 'ai-visibility' => 'on' ] );
}

rank_math_1_0_273_enable_ai_visibility_module();
PK     •ŠU]0U(ý      "  includes/updates/update-1.0.89.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.89
 *
 * @since      1.0.89
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Convert keywords used in Content AI to lower case on existing sites.
 */
function rank_math_1_0_89_update_contentai_data() {
	$data = get_option( 'rank_math_ca_data' );
	if ( empty( $data ) ) {
		return;
	}

	foreach ( $data as $country => $keywords ) {
		if ( empty( $keywords ) ) {
			continue;
		}

		$ret = [];
		foreach ( $keywords as $key => $keyword ) {
			$ret[ mb_strtolower( $key ) ] = $keyword;
		}

		if ( ! empty( $ret ) ) {
			$data[ $country ] = $ret;
		}
	}

	update_option( 'rank_math_ca_data', $data );
}

rank_math_1_0_89_update_contentai_data();
PK     •ŠU]‹adü'  '  #  includes/updates/update-1.0.264.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.264
 *
 * @since      1.0.264
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

use RankMath\Helpers\DB;

/**
 * Add composite index on status and updated columns to rank_math_redirections table.
 */
function rank_math_1_0_264_add_redirections_index() {
	$index_name = 'idx_rm_status_updated';
	$table_name = 'rank_math_redirections';
	$columns    = [ 'status', 'updated' ];

	if ( DB::check_table_exists( 'rank_math_redirections' ) ) {
		DB::create_index( $index_name, $table_name, $columns );
	}
}

/**
 * Add composite index to rank_math_redirections table for performance optimization.
 */
function rank_math_1_0_264_create_redirections_index() {
	if ( ! is_multisite() ) {
		rank_math_1_0_264_add_redirections_index();
		return;
	}
}
rank_math_1_0_264_create_redirections_index();
PK     •ŠU]P#¦Ýl  l  #  includes/updates/update-1.0.251.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.251
 *
 * @since      1.0.251
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Update code needed to support React migration.
 */
function rank_math_1_0_251_migrate_react_settings() {
	\RankMath\Status\Backup::create_backup();
	update_option( 'rank_math_react_settings_ui', 'on', false );
}
rank_math_1_0_251_migrate_react_settings();
PK     •ŠU]Ð%3³J  J  #  includes/updates/update-1.0.104.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.104
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Update TOC block settings on existing sites.
 */
function rank_math_1_0_104_toc_block_settings() {
	$all_opts                        = rank_math()->settings->all_raw();
	$general                         = $all_opts['general'];
	$general['toc_block_title']      = 'Table of Contents';
	$general['toc_block_list_style'] = 'ul';

	Helper::update_all_settings( $general, null, null );
	rank_math()->settings->reset();
}
rank_math_1_0_104_toc_block_settings();
PK     •ŠU]$�YÚý  ý  #  includes/updates/update-1.0.201.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.201
 *
 * @since      1.0.201
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Add default values for the new Content AI settings.
 */
function rank_math_1_0_201_content_ai_settings() {
	$all_opts                       = rank_math()->settings->all_raw();
	$general                        = $all_opts['general'];
	$general['content_ai_country']  = 'all';
	$general['content_ai_tone']     = 'Formal';
	$general['content_ai_audience'] = 'General Audience';
	$general['content_ai_language'] = Helper::content_ai_default_language();

	Helper::update_all_settings( $general, null, null );
	rank_math()->settings->reset();

	// Update credits to array format. This is needed in case the call to credits endpoint on server fails for some reason.
	Helper::update_credits( get_option( 'rank_math_ca_credits' ) );

	// Fetch credits, plan & refresh date.
	if ( Helper::is_site_connected() ) {
		Helper::get_content_ai_credits( true );
	}
}
rank_math_1_0_201_content_ai_settings();
PK     •ŠU]aç0:  :  %  includes/updates/update-1.0.103.1.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.103.1
 *
 * @since      1.0.103.1
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Enable author sitemap.
 */
function rank_math_1_0_103_1_update_html_sitemap() {
	$all_opts         = rank_math()->settings->all_raw();
	$sitemap_settings = $all_opts['sitemap'];
	if ( isset( $sitemap_settings['authors_sitemap'] ) ) {
		return;
	}

	$sitemap_settings['authors_sitemap'] = 'on';

	Helper::update_all_settings( null, null, $sitemap_settings );
	rank_math()->settings->reset();
}
rank_math_1_0_103_1_update_html_sitemap();
PK     –ŠU]ylí�  �  #  includes/updates/update-1.0.202.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.202.
 *
 * @since      1.0.202
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Convert English Language stored in Content AI settings to US English.
 */
function rank_math_1_0_202_content_ai_convert_english_language() {
	$all_opts = rank_math()->settings->all_raw();
	$general  = $all_opts['general'];
	if ( ! empty( $general['content_ai_language'] ) && 'English' === $general['content_ai_language'] ) {
		$general['content_ai_language'] = 'US English';
	}

	Helper::update_all_settings( $general, null, null );
	rank_math()->settings->reset();
}
rank_math_1_0_202_content_ai_convert_english_language();
PK     –ŠU]Ìçjo°  °  #  includes/updates/update-1.0.239.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.239.
 *
 * @since      1.0.239
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Google\Analytics;

defined( 'ABSPATH' ) || exit;

/**
 * Displays an admin notice to users with a Universal Analytics (UA) property, informing them to update to Google Analytics 4 (GA4).
 */
function rank_math_1_0_239_force_to_connect_ga4() {
	if ( ! Analytics::is_analytics_connected() ) {
		return;
	}

	$analytics = get_option( 'rank_math_google_analytic_options' );

	if ( ! isset( $analytics['property_id'] ) || ! Str::starts_with( 'UA-', $analytics['property_id'] ) ) {
		return;
	}

	Helper::add_notification(
		sprintf(
			// Translators: placeholders are opening and closing tags for connect analytics setting and using ga4 property doc.
			__( 'Universal Analytics (UA) is no longer supported. Please connect your Google Analytics GA4 account by navigating to %1$sGeneral Settings â†’ Analytics%2$s. For more details, refer to this guide: %3$sHow to Use Google Analytics 4 (GA4) Property with Rank Math%4$s.', 'seo-by-rank-math' ),
			'<a href="' . esc_url( Helper::get_admin_url( 'options-general#setting-panel-analytics' ) ) . '">',
			'</a>',
			'<a href="' . KB::get( 'using-ga4', 'Analytics GA4 KB' ) . '" target="_blank">',
			'</a>'
		),
		[
			'id'      => 'upgrade-ua-to-ga4',
			'type'    => 'error',
			'classes' => 'is-dismissible',
		]
	);
}

rank_math_1_0_239_force_to_connect_ga4();
PK     –ŠU]ƒ§¤»Ô  Ô  #  includes/updates/update-1.0.250.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.250
 *
 * @since      1.0.250
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Update LLMS Post types on existing sites.
 */
function rank_math_1_0_250_update_llms_post_types() {
	$post_types = Helper::get_accessible_post_types();
	if ( isset( $post_types['attachment'] ) ) {
		unset( $post_types['attachment'] );
	}

	if ( empty( $post_types ) ) {
		return;
	}

	$all_opts                   = rank_math()->settings->all_raw();
	$general                    = $all_opts['general'];
	$general['llms_post_types'] = array_keys( $post_types );

	Helper::update_all_settings( $general, null, null );
	rank_math()->settings->reset();
}
rank_math_1_0_250_update_llms_post_types();
PK     –ŠU]¹¦!·ò  ò  #  includes/updates/update-1.0.238.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.238.
 *
 * @since      1.0.238
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;
defined( 'ABSPATH' ) || exit;

/**
 * Flush rewrite rules.
 */
function rank_math_1_0_238_flush_rules() {
	if (
		Helper::is_woocommerce_active() &&
		Helper::is_module_active( 'woocommerce' ) && (
		Helper::get_settings( 'general.wc_remove_category_base' ) ||
		Helper::get_settings( 'general.wc_remove_category_parent_slugs' ) )
	) {
		flush_rewrite_rules( true );
	}
}

rank_math_1_0_238_flush_rules();
PK     –ŠU]º	lû»  »  "  includes/updates/update-1.0.98.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.98
 *
 * @since      1.0.98
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Get a group's ID based on its name/slug.
 *
 * @param string $slug The string name of a group.
 *
 * @return int The group's ID, if it exists or is created, or 0 if it does not exist and is not created.
 */
function rank_math_1_0_98_as_get_group_id( $slug ) {
	if ( empty( $slug ) ) {
		return 0;
	}

	global $wpdb;
	$table    = $wpdb->prefix . 'actionscheduler_groups';
	$group_id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT group_id FROM {$table} WHERE slug=%s", $slug ) );

	return $group_id;
}

/**
 * Fix Action Scheduler groups.
 */
function rank_math_1_0_98_fix_as_groups() {
	$workflow_group_id    = rank_math_1_0_98_as_get_group_id( 'workflow' );
	$inspections_group_id = rank_math_1_0_98_as_get_group_id( 'rank_math/analytics/get_inspections_data' );
	$rank_math_group_id   = rank_math_1_0_98_as_get_group_id( 'rank-math' );

	if ( 0 === $rank_math_group_id ) {
		return;
	}

	// In the actions table, update the group_id for all actions in the 'workflow' & 'rank_math/analytics/get_inspections_data' groups to the 'rank-math' group.
	global $wpdb;
	$actions_table = $wpdb->prefix . 'actionscheduler_actions';
	$wpdb->query( $wpdb->prepare( "UPDATE {$actions_table} SET group_id=%d WHERE group_id=%d OR group_id=%d", $rank_math_group_id, $workflow_group_id, $inspections_group_id ) );

	// Delete the 'workflow' & 'rank_math/analytics/get_inspections_data' groups.
	$groups_table = $wpdb->prefix . 'actionscheduler_groups';
	$wpdb->query( $wpdb->prepare( "DELETE FROM {$groups_table} WHERE group_id=%d OR group_id=%d", $workflow_group_id, $inspections_group_id ) );
}

rank_math_1_0_98_fix_as_groups();
PK     –ŠU]M'–:à  à  "  includes/updates/update-1.0.84.phpnu „[µü¤        <?php //phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is intentionally used to match the plugin version.
/**
 * The Updates routine for version 1.0.84
 *
 * @since      1.0.84
 * @package    RankMath
 * @subpackage RankMath\Updates
 * @author     Rank Math <support@rankmath.com>
 */

defined( 'ABSPATH' ) || exit;

/**
 * Start the scheduled URL Inspections if Analytics module is enabled.
 */
function rank_math_1_0_84_init_url_inspections() {
	$active_modules = get_option( 'rank_math_modules', [] );
	if ( ! is_array( $active_modules ) || ! in_array( 'analytics', $active_modules, true ) ) {
		return;
	}

	// Start first fetch in 15 minutes.
	$start = time() + ( 15 * MINUTE_IN_SECONDS );
	as_schedule_single_action( $start, 'rank_math/analytics/workflow', [ 'inspections', 0, null, null ], 'rank-math' );
}

rank_math_1_0_84_init_url_inspections();

/**
 * Fix collations for the Analytics tables.
 */
function rank_math_1_0_84_check_analytics_collations() {
	$tables = [
		'rank_math_analytics_ga',
		'rank_math_analytics_gsc',
		'rank_math_analytics_keyword_manager',
	];

	$objects_coll = \RankMath\Helpers\DB::get_table_collation( 'rank_math_analytics_objects' );
	foreach ( $tables as $table ) {
		\RankMath\Helpers\DB::check_collation( $table, 'all', $objects_coll );
	}
}

/**
 * Run collation fixer on multisite or simple install.
 *
 * @return void
 */
function rank_math_1_0_84_check_collations() {
	if ( is_multisite() ) {
		foreach ( get_sites() as $site ) {
			switch_to_blog( $site->blog_id );
			rank_math_1_0_84_check_analytics_collations();
			restore_current_blog();
		}

		return;
	}

	rank_math_1_0_84_check_analytics_collations();
}

rank_math_1_0_84_check_collations();

/**
 * Enable the Index Status tab by default.
 */
function rank_math_1_0_84_update_analytics_options() {
	$active_modules = get_option( 'rank_math_modules', [] );
	if ( ! is_array( $active_modules ) || ! in_array( 'analytics', $active_modules, true ) ) {
		return;
	}

	$options = get_option( 'rank_math_google_analytic_profile' );
	if ( ! is_array( $options ) ) {
		return;
	}

	$options['enable_index_status'] = true;
	update_option( 'rank_math_google_analytic_profile', $options );
}

rank_math_1_0_84_update_analytics_options();
PK     –ŠU]&¼Êœ  œ  -  includes/replace-variables/class-variable.phpnu „[µü¤        <?php
/**
 * Variable model.
 *
 * Replace '%variables%' in strings based on context.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

defined( 'ABSPATH' ) || exit;

/**
 * Variable class.
 */
class Variable {

	/**
	 * Required properties.
	 *
	 * @var array
	 */
	private static $required = [ 'name', 'description', 'variable' ];

	/**
	 * The unique id.
	 *
	 * @var string
	 */
	protected $id;

	/**
	 * The name of the variable.
	 *
	 * @var string
	 */
	protected $name;

	/**
	 * The description of the variable.
	 *
	 * @var string
	 */
	protected $description;

	/**
	 * The variable to use.
	 *
	 * @var string
	 */
	protected $variable;

	/**
	 * The example for the variable.
	 *
	 * @var string
	 */
	protected $example;

	/**
	 * The callback to get the replacement value.
	 *
	 * @var mixed
	 */
	protected $callback;

	/**
	 * The variable is cacheable or not.
	 *
	 * @var bool
	 */
	protected $cacheable = true;

	/**
	 * Create variable from array.
	 *
	 * @throws \InvalidArgumentException If `$id` is empty.
	 *
	 * @param string $id   Unique id of variable.
	 * @param array  $args Array of values.
	 *
	 * @return Variable
	 */
	public static function from( $id, $args ) {
		if ( empty( $id ) ) {
			throw new \InvalidArgumentException( esc_html__( 'The $id variable is required.', 'seo-by-rank-math' ) );
		}

		$variable          = new Variable();
		$variable->id      = $id;
		$variable->example = isset( $args['example'] ) ? $args['example'] : esc_html__( 'Example', 'seo-by-rank-math' );

		foreach ( self::$required as $key ) {
			if ( ! isset( $args[ $key ] ) ) {
				/* translators: variable name */
				throw new \InvalidArgumentException( sprintf( esc_html__( 'The $%1$s is required for variable %2$s.', 'seo-by-rank-math' ), esc_html( $key ), esc_html( $id ) ) );
			}

			$variable->$key = $args[ $key ];
		}

		if ( isset( $args['nocache'] ) && $args['nocache'] ) {
			$variable->cacheable = false;
		}

		return $variable;
	}

	/**
	 * Returns the id.
	 *
	 * @return string
	 */
	public function get_id() {
		return $this->id;
	}

	/**
	 * Returns the name.
	 *
	 * @return string
	 */
	public function get_name() {
		return $this->name;
	}

	/**
	 * Returns the description.
	 *
	 * @return string
	 */
	public function get_description() {
		return $this->description;
	}

	/**
	 * Returns the variable.
	 *
	 * @return string
	 */
	public function get_variable() {
		return $this->variable;
	}

	/**
	 * Returns the example.
	 *
	 * @return string
	 */
	public function get_example() {
		return $this->example;
	}

	/**
	 * Set example.
	 *
	 * @param string $example New example.
	 */
	public function set_example( $example ) {
		$this->example = $example;
	}

	/**
	 * Set callback.
	 *
	 * @param mixed $callback New callback.
	 */
	public function set_callback( $callback ) {
		$this->callback = $callback;
	}

	/**
	 * Run callback.
	 *
	 * @param array $var_args Array of arguments passed with variable.
	 * @param array $args     The object some of the replacement values might come from,
	 *                        could be a post, taxonomy or term.
	 *
	 * @return mixed
	 */
	public function run_callback( $var_args, $args = [] ) {
		rank_math()->variables->set_arguments( $args );

		$value = ! empty( $this->callback ) ? call_user_func( $this->callback, $var_args, $args ) :
			apply_filters( 'rank_math/vars/' . $this->get_id(), $var_args, $this );

		rank_math()->variables->reset_arguments();

		return $value;
	}

	/**
	 * Convert object to array.
	 *
	 * @return array Object as array.
	 */
	public function to_array() {
		$arr = [];
		foreach ( [ 'name', 'description', 'variable', 'example' ] as $key ) {
			$arr[ $key ] = $this->$key;
		}

		return $arr;
	}

	/**
	 * Returns the variable is cacheable or not.
	 *
	 * @return bool
	 */
	public function is_cacheable() {
		return $this->cacheable;
	}
}
PK     –ŠU]~cÿo*  *  4  includes/replace-variables/class-basic-variables.phpnu „[µü¤        <?php
/**
 * Basic variable replacer.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Basic_Variables class.
 */
class Basic_Variables extends Cache {

	/**
	 * Hold counter variable data.
	 *
	 * @var array
	 */
	protected $counters = [];

	/**
	 * Is on post edit screen.
	 *
	 * @var bool
	 */
	public $is_post_edit = false;

	/**
	 * Is on term edit screen.
	 *
	 * @var bool
	 */
	public $is_term_edit = false;

	/**
	 * Is on user edit screen.
	 *
	 * @var bool
	 */
	protected $is_user_edit = false;

	/**
	 * Setup basic variables.
	 */
	public function setup_basic_variables() {
		$this->register_replacement(
			'sep',
			[
				'name'        => esc_html__( 'Separator Character', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Separator character, as set in the Title Settings', 'seo-by-rank-math' ),
				'variable'    => 'sep',
				'example'     => $this->get_sep(),
			],
			[ $this, 'get_sep' ]
		);

		$this->register_replacement(
			'search_query',
			[
				'name'        => esc_html__( 'Search Query', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Search query (only available on search results page)', 'seo-by-rank-math' ),
				'variable'    => 'search_query',
				'example'     => esc_html__( 'example search', 'seo-by-rank-math' ),
			],
			[ $this, 'get_search_query' ]
		);

		$this->register_replacement(
			'count',
			[
				'name'        => esc_html__( 'Counter', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Starts at 1 and increments by 1.', 'seo-by-rank-math' ),
				'variable'    => 'count(varname)',
				'example'     => '2',
				'nocache'     => true,
			],
			[ $this, 'get_count' ]
		);

		$this->register_replacement(
			'filename',
			[
				'name'        => esc_html__( 'File Name', 'seo-by-rank-math' ),
				'description' => esc_html__( 'File Name of the attachment', 'seo-by-rank-math' ),
				'variable'    => 'filename',
				'example'     => 'Sunrise at Maldives',
				'nocache'     => true,
			],
			[ $this, 'get_filename' ]
		);

		$this->setup_site_variables();
		$this->setup_date_variables();
		$this->setup_time_variables();
		$this->setup_organization_variables();
	}

	/**
	 * Setup site info variables.
	 */
	private function setup_site_variables() {
		$this->register_replacement(
			'sitename',
			[
				'name'        => esc_html__( 'Site Title', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Title of the site', 'seo-by-rank-math' ),
				'variable'    => 'sitename',
				'example'     => $this->get_sitename(),
			],
			[ $this, 'get_sitename' ]
		);

		$this->register_replacement(
			'sitedesc',
			[
				'name'        => esc_html__( 'Site Description', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Description of the site', 'seo-by-rank-math' ),
				'variable'    => 'sitedesc',
				'example'     => $this->get_sitedesc(),
			],
			[ $this, 'get_sitedesc' ]
		);
	}

	/**
	 * Setup date variables.
	 */
	private function setup_date_variables() {
		$this->register_replacement(
			'currentdate',
			[
				'name'        => esc_html__( 'Current Date', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server date', 'seo-by-rank-math' ),
				'variable'    => 'currentdate',
				'example'     => $this->get_current_date(),
			],
			[ $this, 'get_current_date' ]
		);

		$this->register_replacement(
			'currentday',
			[
				'name'        => esc_html__( 'Current Day', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server day', 'seo-by-rank-math' ),
				'variable'    => 'currentday',
				'example'     => $this->get_current_day(),
			],
			[ $this, 'get_current_day' ]
		);

		$this->register_replacement(
			'currentmonth',
			[
				'name'        => esc_html__( 'Current Month', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server month', 'seo-by-rank-math' ),
				'variable'    => 'currentmonth',
				'example'     => $this->get_current_month(),
			],
			[ $this, 'get_current_month' ]
		);

		$this->register_replacement(
			'currentyear',
			[
				'name'        => esc_html__( 'Current Year', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server year', 'seo-by-rank-math' ),
				'variable'    => 'currentyear',
				'example'     => $this->get_current_year(),
			],
			[ $this, 'get_current_year' ]
		);
	}

	/**
	 * Setup time variables.
	 */
	private function setup_time_variables() {
		$this->register_replacement(
			'currenttime',
			[
				'name'        => esc_html__( 'Current Time', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server time', 'seo-by-rank-math' ),
				'variable'    => 'currenttime',
				'example'     => $this->get_current_time(),
			],
			[ $this, 'get_current_time' ]
		);

		$this->register_replacement(
			'currenttime_args',
			[
				'name'        => esc_html__( 'Current Time (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current server time with custom formatting pattern.', 'seo-by-rank-math' ),
				'variable'    => 'currenttime(F jS, Y)',
				'example'     => $this->get_current_time( 'F jS, Y' ),
			],
			[ $this, 'get_current_time' ]
		);
	}

	/**
	 * Setup site info variables.
	 */
	private function setup_organization_variables() {
		$this->register_replacement(
			'org_name',
			[
				'name'        => esc_html__( 'Organization Name', 'seo-by-rank-math' ),
				'description' => esc_html__( 'The Organization Name added in Local SEO Settings.', 'seo-by-rank-math' ),
				'variable'    => 'org_name',
				'example'     => $this->get_org_name(),
			],
			[ $this, 'get_org_name' ]
		);

		$this->register_replacement(
			'org_logo',
			[
				'name'        => esc_html__( 'Organization Logo', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Organization Logo added in Local SEO Settings.', 'seo-by-rank-math' ),
				'variable'    => 'org_logo',
				'example'     => $this->get_org_logo(),
			],
			[ $this, 'get_org_logo' ]
		);

		$this->register_replacement(
			'org_url',
			[
				'name'        => esc_html__( 'Organization URL', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Organization URL added in Local SEO Settings.', 'seo-by-rank-math' ),
				'variable'    => 'org_url',
				'example'     => $this->get_org_url(),
			],
			[ $this, 'get_org_url' ]
		);
	}

	/**
	 * Get the separator to use as a replacement.
	 *
	 * @return string
	 */
	public function get_sep() {
		$sep = $this->do_filter( 'settings/title_separator', Helper::get_settings( 'titles.title_separator' ) );

		return htmlentities( $sep, ENT_COMPAT, 'UTF-8', false );
	}

	/**
	 * Get the site name to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_sitename() {
		if ( $this->in_cache( 'sitename' ) ) {
			return $this->get_cache( 'sitename' );
		}

		$sitename = wp_strip_all_tags( get_bloginfo( 'name' ), true );
		if ( '' !== $sitename ) {
			$this->set_cache( 'sitename', $sitename );
		}

		return $sitename;
	}

	/**
	 * Get the site tag line to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_sitedesc() {
		if ( $this->in_cache( 'sitedesc' ) ) {
			return $this->get_cache( 'sitedesc' );
		}

		$sitedesc = wp_strip_all_tags( get_bloginfo( 'description' ) );
		if ( '' !== $sitedesc ) {
			$this->set_cache( 'sitedesc', $sitedesc );
		}

		return $sitedesc;
	}

	/**
	 * Get the current search query to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_search_query() {
		if ( $this->in_cache( 'search_query' ) ) {
			return $this->get_cache( 'search_query' );
		}

		$search = get_search_query();
		if ( '' !== $search ) {
			$this->set_cache( 'search_query', $search );
		}

		return $search;
	}

	/**
	 * Get the counter for the given variable.
	 *
	 * @param string $name The name of field.
	 *
	 * @return string|null
	 */
	public function get_count( $name ) {
		if ( ! is_string( $name ) ) {
			return null;
		}

		if ( ! isset( $this->counters[ $name ] ) ) {
			$this->counters[ $name ] = 0;
		}

		return ++$this->counters[ $name ];
	}

	/**
	 * Get the filename of the attachment to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_filename() {
		if ( empty( $this->args->filename ) ) {
			return null;
		}

		$name = \pathinfo( $this->args->filename );

		// Remove size if embedded.
		$name = explode( '-', $name['filename'] );
		if ( Str::contains( 'x', end( $name ) ) ) {
			array_pop( $name );
		}

		// Format filename.
		$name = join( ' ', $name );
		$name = trim( str_replace( '_', ' ', $name ) );

		return '' !== $name ? $name : null;
	}

	/**
	 * Get the current time to use as a replacement.
	 *
	 * @param string $format (Optional) PHP date format.
	 *
	 * @return string
	 */
	public function get_current_time( $format = '' ) {
		$format = $format ? $format : get_option( 'time_format' );
		return $this->date_i18n( $format );
	}

	/**
	 * Get the current date to use as a replacement.
	 *
	 * @param string $format (Optional) PHP date format.
	 *
	 * @return string
	 */
	public function get_current_date( $format = '' ) {
		$format = $format ? $format : get_option( 'date_format' );
		return $this->date_i18n( $format );
	}

	/**
	 * Get the current day to use as a replacement.
	 *
	 * @return string
	 */
	public function get_current_day() {
		return $this->date_i18n( 'j' );
	}

	/**
	 * Get the current month to use as a replacement.
	 *
	 * @return string
	 */
	public function get_current_month() {
		return $this->date_i18n( 'F' );
	}

	/**
	 * Get the current year to use as a replacement.
	 *
	 * @return string
	 */
	public function get_current_year() {
		return $this->date_i18n( 'Y' );
	}

	/**
	 * Get the Organization Name to use as a replacement.
	 *
	 * @return string
	 */
	public function get_org_name() {
		return Helper::get_settings( 'titles.knowledgegraph_name', get_bloginfo( 'name' ) );
	}

	/**
	 * Get the Organization Logo to use as a replacement.
	 *
	 * @return string
	 */
	public function get_org_logo() {
		return Helper::get_settings( 'titles.knowledgegraph_logo', '' );
	}

	/**
	 * Get the Organization URL to use as a replacement.
	 *
	 * @return string
	 */
	public function get_org_url() {
		return Helper::get_settings( 'titles.url', home_url() );
	}

	/**
	 * Return localized date.
	 *
	 * @param string $format (Optional) PHP date format.
	 *
	 * @return string
	 */
	private function date_i18n( $format = '' ) {
		$key = 'date_i18n_' . sanitize_key( $format );
		if ( $this->in_cache( $key ) ) {
			return $this->get_cache( $key );
		}

		$date = date_i18n( $format );
		$this->set_cache( $key, $date );

		return $date;
	}
}
PK     –ŠU]=tŸ    3  includes/replace-variables/class-term-variables.phpnu „[µü¤        <?php
/**
 * Term variable replacer.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Term_Variables class.
 */
class Term_Variables extends Basic_Variables {

	/**
	 * Setup term variables.
	 */
	public function setup_term_variables() {
		if ( $this->is_term_edit ) {
			$tag_id     = Param::request( 'tag_ID', 0, FILTER_VALIDATE_INT );
			$term       = get_term( $tag_id, $GLOBALS['taxnow'], OBJECT );
			$this->args = $term;
		}

		$this->register_replacement(
			'term',
			[
				'name'        => esc_html__( 'Current Term', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current term name', 'seo-by-rank-math' ),
				'variable'    => 'term',
				'example'     => $this->is_term_edit ? $term->name : esc_html__( 'Example Term', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_term' ]
		);

		$this->register_replacement(
			'term_description',
			[
				'name'        => esc_html__( 'Term Description', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current term description', 'seo-by-rank-math' ),
				'variable'    => 'term_description',
				'example'     => $this->is_term_edit ? wp_strip_all_tags( term_description( $term ), true ) : esc_html__( 'Example Term Description', 'seo-by-rank-math' ),
			],
			[ $this, 'get_term_description' ]
		);

		$this->register_replacement(
			'customterm',
			[
				'name'        => esc_html__( 'Custom Term (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Custom term value.', 'seo-by-rank-math' ),
				'variable'    => 'customterm(taxonomy-name)',
				'example'     => esc_html__( 'Custom term value', 'seo-by-rank-math' ),
			],
			[ $this, 'get_custom_term' ]
		);

		$this->register_replacement(
			'customterm_desc',
			[
				'name'        => esc_html__( 'Custom Term description', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Custom Term description.', 'seo-by-rank-math' ),
				'variable'    => 'customterm_desc(taxonomy-name)',
				'example'     => esc_html__( 'Custom Term description.', 'seo-by-rank-math' ),
			],
			[ $this, 'get_custom_term_desc' ]
		);
	}

	/**
	 * Get the term name to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_term() {
		global $wp_query;

		if ( is_category() || is_tag() || is_tax() ) {
			return $wp_query->queried_object->name;
		}

		return ! empty( $this->args->taxonomy ) && ! empty( $this->args->name ) ? $this->args->name : null;
	}

	/**
	 * Get the term description to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_term_description() {
		global $wp_query;

		if ( is_category() || is_tag() || is_tax() ) {
			return $wp_query->queried_object->description;
		}

		if ( ! isset( $this->args->term_id ) || empty( $this->args->taxonomy ) ) {
			return null;
		}

		$term_desc = get_term_field( 'description', $this->args->term_id, $this->args->taxonomy );
		return '' !== $term_desc ? Str::truncate( $term_desc, 160 ) : null;
	}

	/**
	 * Get a custom taxonomy term to use as a replacement.
	 *
	 * @param string $taxonomy The name of the taxonomy.
	 *
	 * @return string|null
	 */
	public function get_custom_term( $taxonomy ) {
		return Str::is_non_empty( $taxonomy ) ? $this->get_terms( $this->args->ID, $taxonomy, true, [], 'name' ) : null;
	}

	/**
	 * Get a custom taxonomy term description to use as a replacement.
	 *
	 * @param string $taxonomy The name of the taxonomy.
	 *
	 * @return string|null
	 */
	public function get_custom_term_desc( $taxonomy ) {
		return Str::is_non_empty( $taxonomy ) ? $this->get_terms( $this->args->ID, $taxonomy, true, [], 'description' ) : null;
	}
}
PK     –ŠU]$Öñ4    7  includes/replace-variables/class-advanced-variables.phpnu „[µü¤        <?php
/**
 * Advanced variable replacer.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Paper\Paper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Advanced_Variables class.
 */
class Advanced_Variables extends Author_Variables {

	/**
	 * Setup advanced variables.
	 */
	public function setup_advanced_variables() {
		$post = $this->get_post();

		$this->register_replacement(
			'id',
			[
				'name'        => esc_html__( 'Post ID', 'seo-by-rank-math' ),
				'description' => esc_html__( 'ID of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'id',
				'example'     => ! empty( $post ) ? $post->ID : __( 'Post ID', 'seo-by-rank-math' ),
			],
			[ $this, 'get_id' ]
		);

		$keyword = $this->get_focus_keyword();
		$this->register_replacement(
			'focuskw',
			[
				'name'        => esc_html__( 'Focus Keyword', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Focus Keyword of the current post', 'seo-by-rank-math' ),
				'variable'    => 'focuskw',
				'example'     => \is_null( $keyword ) ? '' : $keyword,
			],
			[ $this, 'get_focus_keyword' ]
		);

		$this->register_replacement(
			'keywords',
			[
				'name'        => esc_html__( 'Focus Keywords', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Focus Keywords of the current post', 'seo-by-rank-math' ),
				'variable'    => 'keywords',
				'example'     => $this->get_focus_keywords(),
			],
			[ $this, 'get_focus_keywords' ]
		);

		$this->register_replacement(
			'customfield',
			[
				'name'        => esc_html__( 'Custom Field (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Custom field value.', 'seo-by-rank-math' ),
				'variable'    => 'customfield(field-name)',
				'example'     => esc_html__( 'Custom field value', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_customfield' ]
		);

		$this->setup_paging_variables();
		$this->setup_post_types_variables();
	}

	/**
	 * Setup paging variables.
	 */
	private function setup_paging_variables() {
		$this->register_replacement(
			'page',
			[
				'name'        => esc_html__( 'Page', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Page number with context (i.e. page 2 of 4). Only displayed on page 2 and above.', 'seo-by-rank-math' ),
				'variable'    => 'page',
				'example'     => ' page 2 of 4',
			],
			[ $this, 'get_page' ]
		);

		$this->register_replacement(
			'pagenumber',
			[
				'name'        => esc_html__( 'Page Number', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current page number', 'seo-by-rank-math' ),
				'variable'    => 'pagenumber',
				'example'     => '4',
			],
			[ $this, 'get_pagenumber' ]
		);

		$this->register_replacement(
			'pagetotal',
			[
				'name'        => esc_html__( 'Max Pages', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Max pages number', 'seo-by-rank-math' ),
				'variable'    => 'pagetotal',
				'example'     => '4',
			],
			[ $this, 'get_pagetotal' ]
		);
	}

	/**
	 * Setup post types variables.
	 */
	private function setup_post_types_variables() {
		$this->register_replacement(
			'pt_single',
			[
				'name'        => esc_html__( 'Post Type Name Singular', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Name of current post type (singular)', 'seo-by-rank-math' ),
				'variable'    => 'pt_single',
				'example'     => esc_html__( 'Product', 'seo-by-rank-math' ),
			],
			[ $this, 'get_post_type_single' ]
		);

		$this->register_replacement(
			'pt_plural',
			[
				'name'        => esc_html__( 'Post Type Name Plural', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Name of current post type (plural)', 'seo-by-rank-math' ),
				'variable'    => 'pt_plural',
				'example'     => esc_html__( 'Products', 'seo-by-rank-math' ),
			],
			[ $this, 'get_post_type_plural' ]
		);
	}

	/**
	 * Get the numeric post ID.
	 *
	 * @return string|null
	 */
	public function get_id() {
		return ! empty( $this->args->ID ) ? $this->args->ID : null;
	}

	/**
	 * Get the focus keyword.
	 *
	 * @return string|null
	 */
	public function get_focus_keyword() {
		$keywords = '';
		if ( ! empty( $this->args->ID ) ) {
			$keywords = get_post_meta( $this->args->ID, 'rank_math_focus_keyword', true );
		}

		if ( ! empty( $this->args->term_id ) ) {
			$keywords = get_term_meta( $this->args->term_id, 'rank_math_focus_keyword', true );
		}

		if ( ! is_string( $keywords ) ) {
			return null;
		}

		$keywords = explode( ',', $keywords );
		if ( '' !== $keywords[0] ) {
			return $keywords[0];
		}

		return null;
	}

	/**
	 * Get Focus keywords.
	 *
	 * @return string
	 */
	public function get_focus_keywords() {
		if ( is_singular() || is_category() || is_tag() || is_tax() ) {
			return Paper::get()->get_keywords();
		}

		$keywords = '';
		if ( ! empty( $this->args->ID ) ) {
			$keywords = get_post_meta( $this->args->ID, 'rank_math_focus_keyword', true );
		}

		if ( ! empty( $this->args->term_id ) ) {
			$keywords = get_term_meta( $this->args->term_id, 'rank_math_focus_keyword', true );
		}

		return $keywords;
	}

	/**
	 * Get the current page number as a string (i.e. "page 1 of 5").
	 *
	 * @return string
	 */
	public function get_page() {
		$sep  = $this->get_sep();
		$max  = $this->determine_max_pages();
		$page = $this->determine_page_number();

		if ( $max > 1 && $page > 1 ) {
			/* translators: %1$d: current page number, %2$d: max pages. */
			return sprintf( $sep . ' ' . __( 'Page %1$d of %2$d', 'seo-by-rank-math' ), $page, $max );
		}

		return null;
	}

	/**
	 * Get only the page number (without context).
	 *
	 * @return string|null
	 */
	public function get_pagenumber() {
		$page = $this->determine_page_number();

		return $page > 0 ? (string) $page : null;
	}

	/**
	 * Get the max page number.
	 *
	 * @return string|null
	 */
	public function get_pagetotal() {
		$max = $this->determine_max_pages();

		return $max > 0 ? (string) $max : null;
	}

	/**
	 * Get a specific custom field value.
	 *
	 * @param  string $name The name of the custom field to retrieve.
	 * @return string|null
	 */
	public function get_customfield( $name ) {
		if ( Str::is_empty( $name ) ) {
			return null;
		}

		if ( ! empty( get_query_var( 'sitemap' ) ) && 'locations' !== get_query_var( 'sitemap' ) ) {
			return null;
		}

		if ( is_author() ) {
			return get_user_meta( $this->args->ID, $name, true );
		}

		if ( is_category() || is_tag() || is_tax() ) {
			return get_term_meta( $this->args->term_id, $name, true );
		}

		return is_singular() || ! empty( $this->args->post_type ) ? get_post_meta( $this->args->ID, $name, true ) : null;
	}

	/**
	 * Get the post type "single" label.
	 *
	 * @return string|null
	 */
	public function get_post_type_single() {
		$name = $this->determine_post_type_label( 'single' );

		return '' !== $name ? $name : null;
	}

	/**
	 * Get the post type "plural" label.
	 *
	 * @return string|null
	 */
	public function get_post_type_plural() {
		$name = $this->determine_post_type_label( 'plural' );

		return '' !== $name ? $name : null;
	}
}
PK     –ŠU]„m?¨N   N   )  includes/replace-variables/class-base.phpnu „[µü¤        <?php
/**
 * Variable replacement base.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Post;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Base class.
 */
class Base {

	use Hooker;

	/**
	 * Current post.
	 *
	 * @var object
	 */
	public $post;

	/**
	 * Current args.
	 *
	 * @var object
	 */
	public $args;

	/**
	 * Register variable replacements.
	 *
	 * @var array
	 */
	protected $replacements = [];

	/**
	 * Register variables
	 *
	 * For developers see rank_math_register_var_replacement().
	 *
	 * @param string $id        Uniquer ID of variable, for example custom.
	 * @param array  $args      Array with additional name, description, variable and example values for the variable.
	 * @param mixed  $callback  Replacement callback. Should return value, not output it.
	 *
	 * @return bool Replacement was registered successfully or not.
	 */
	public function register_replacement( $id, $args = [], $callback = false ) {
		if ( ! $this->is_unique_id( $id ) ) {
			return false;
		}

		$variable = Variable::from( $id, $args );
		$variable->set_callback( $callback );

		$this->replacements[ $id ] = $variable;

		return true;
	}

	/**
	 * Get a comma separated list of the post's terms.
	 *
	 * @param int    $id            ID of the post.
	 * @param string $taxonomy      The taxonomy to get the terms from.
	 * @param bool   $return_single Return the first term only.
	 * @param array  $args          Array of arguments.
	 * @param string $field         The term field to return.
	 *
	 * @return string Either a single term field or a comma delimited list of terms.
	 */
	protected function get_terms( $id, $taxonomy, $return_single = false, $args = [], $field = 'name' ) {
		$output = $this->get_queried_term_object();
		if ( '' === $output && ! empty( $id ) && ! empty( $taxonomy ) ) {
			$output = $this->get_the_terms( $id, $taxonomy, $return_single, $args, $field );
		}

		/**
		 * Filter: Allows changing the `%category%` and `%tag%` terms lists.
		 *
		 * @param string $output   The terms list, comma separated.
		 * @param string $taxonomy The taxonomy of the terms.
		 */
		return $this->do_filter( 'vars/terms', $output, $taxonomy );
	}

	/**
	 * Filter terms for exclude.
	 *
	 * @param array $terms   Terms to filter.
	 * @param array $exclude Terms to exclude.
	 *
	 * @return array
	 */
	protected function filter_exclude( $terms, $exclude ) {
		if ( empty( $exclude ) ) {
			return $terms;
		}

		return array_filter(
			$terms,
			function ( $term ) use ( $exclude ) {
				return in_array( $term->term_id, $exclude, true ) ? false : true;
			}
		);
	}

	/**
	 * Get the current post type.
	 *
	 * @return string Post type name.
	 */
	protected function get_queried_post_type() {
		$post_type = get_post_type();
		if ( false !== $post_type ) {
			return $post_type;
		}

		$post_type = get_query_var( 'post_type' );

		return is_array( $post_type ) ? reset( $post_type ) : $post_type;
	}

	/**
	 * Get post `object`.
	 *
	 * @return WP_Post
	 */
	protected function get_post() {
		if ( isset( $this->post ) ) {
			return $this->post;
		}

		$this->post = get_post( Post::is_shop_page() ? Post::get_shop_page_id() : null );

		if ( is_null( $this->post ) ) {
			$posts      = get_posts(
				[
					'fields'         => 'id',
					'posts_per_page' => 1,
					'post_type'      => [ 'post', 'page' ],
				]
			);
			$this->post = isset( $posts[0] ) ? $posts[0] : null;
		}

		if ( is_null( $this->post ) ) {
			$this->post = new \WP_Post(
				(object) [
					'ID'         => 0,
					'post_title' => __( 'Example Post title', 'seo-by-rank-math' ),
				]
			);
		}

		return $this->post;
	}

	/**
	 * Determine the page number of the current post/page/CPT.
	 *
	 * @return int|null
	 */
	protected function determine_page_number() {
		$page_number = is_singular() ? get_query_var( 'page' ) : get_query_var( 'paged' );
		if ( 0 === $page_number || '' === $page_number ) {
			return 1;
		}

		return $page_number;
	}

	/**
	 * Determine the max num of pages of the current post/page/CPT.
	 *
	 * @return int|null
	 */
	protected function determine_max_pages() {
		global $wp_query, $post;
		if ( is_singular() && isset( $post->post_content ) ) {
			return ( substr_count( $post->post_content, '<!--nextpage-->' ) + 1 );
		}

		return empty( $wp_query->max_num_pages ) ? 1 : $wp_query->max_num_pages;
	}

	/**
	 * Get the appropriate post type label for the current request.
	 *
	 * @param string $request Requested label type, "singular" or "plural".
	 *
	 * @return string|null
	 */
	protected function determine_post_type_label( $request = 'single' ) {
		$post_type = $this->get_post_type();
		if ( empty( $post_type ) ) {
			return null;
		}

		$object = get_post_type_object( $post_type );

		if ( 'single' === $request && isset( $object->labels->singular_name ) ) {
			return $object->labels->singular_name;
		}

		if ( 'plural' === $request && isset( $object->labels->name ) ) {
			return $object->labels->name;
		}

		return $object->name;
	}

	/**
	 * Get post type for current queried object.
	 *
	 * @return string
	 */
	protected function get_post_type() {
		$post_type = $this->get_post_type_from_query();
		return is_array( $post_type ) ? reset( $post_type ) : $post_type;
	}

	/**
	 * Get post type from query.
	 *
	 * @return string
	 */
	protected function get_post_type_from_query() {
		global $wp_query;

		if ( isset( $wp_query->query_vars['post_type'] ) && ( Str::is_non_empty( $wp_query->query_vars['post_type'] ) || ( is_array( $wp_query->query_vars['post_type'] ) && [] !== $wp_query->query_vars['post_type'] ) ) ) {
			return $wp_query->query_vars['post_type'];
		}

		if ( isset( $this->args->post_type ) && Str::is_non_empty( $this->args->post_type ) ) {
			return $this->args->post_type;
		}

		return $wp_query->get_queried_object()->post_type;
	}

	/**
	 * Get the selected term, if we're on a taxonomy archive.
	 *
	 * @return string
	 */
	private function get_queried_term_object() {
		if ( is_category() || is_tag() || is_tax() ) {
			$term = $GLOBALS['wp_query']->get_queried_object();
			if ( is_object( $term ) && isset( $term->name ) ) {
				return $term->name;
			}
		}

		return '';
	}

	/**
	 * Get the post's terms.
	 *
	 * @param int    $id            ID of the post.
	 * @param string $taxonomy      The taxonomy to get the terms from.
	 * @param bool   $return_single Return the first term only.
	 * @param array  $args          Array of arguments.
	 * @param string $field         The term field to return.
	 *
	 * @return string Either a single term field or a comma delimited list of terms.
	 */
	private function get_the_terms( $id, $taxonomy, $return_single = false, $args = [], $field = 'name' ) {
		$args = wp_parse_args(
			$args,
			[
				'limit'     => 99,
				'separator' => ', ',
				'exclude'   => [],
			]
		);

		if ( ! empty( $args['exclude'] ) ) {
			$args['exclude'] = array_map( 'intval', explode( ',', $args['exclude'] ) );
		}

		$terms = get_the_terms( $id, $taxonomy );
		if ( is_wp_error( $terms ) || empty( $terms ) ) {
			return '';
		}

		array_splice( $terms, $args['limit'] );
		$output = [];
		$terms  = $this->filter_exclude( $terms, $args['exclude'] );

		if ( empty( $terms ) ) {
			return '';
		}

		return $return_single ? $terms[0]->{$field} :
			join( $args['separator'], wp_list_pluck( $terms, $field ) );
	}

	/**
	 * Check if variable ID is valid and unique before further processing.
	 *
	 * @param string $id Variable ID.
	 *
	 * @return bool Whether the variable is valid or not.
	 */
	private function is_unique_id( $id ) {
		if ( false === preg_match( '`^[A-Z0-9_-]+$`i', $id ) ) {
			trigger_error( esc_html__( 'Variable names can only contain alphanumeric characters, underscores and dashes.', 'seo-by-rank-math' ), E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
			return false;
		}

		if ( isset( $this->replacements[ $id ] ) ) {
			trigger_error( esc_html__( 'The variable has already been registered.', 'seo-by-rank-math' ), E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions
			return false;
		}

		return true;
	}
}
PK     –ŠU]CË­û¸"  ¸"  -  includes/replace-variables/class-replacer.phpnu „[µü¤        <?php
/**
 * Variable replacement functionality.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Replace_Variables;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Paper\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Replacer class.
 */
class Replacer {

	/**
	 * Do not process the same string over and over again.
	 *
	 * @var array
	 */
	public static $replacements_cache = [];

	/**
	 * Non-cacheable replacements.
	 *
	 * @var array
	 */
	public static $non_cacheable_replacements;

	/**
	 * Default post data.
	 *
	 * @var array
	 */
	public static $defaults = [
		'ID'            => '',
		'name'          => '',
		'post_author'   => '',
		'post_content'  => '',
		'post_date'     => '',
		'post_excerpt'  => '',
		'post_modified' => '',
		'post_title'    => '',
		'taxonomy'      => '',
		'term_id'       => '',
		'term404'       => '',
		'filename'      => '',
	];

	/**
	 * Arguments.
	 *
	 * @var object
	 */
	public static $args;

	/**
	 * Process post content once.
	 *
	 * @var array
	 */
	public static $content_processed = [];

	/**
	 * Exclude variables.
	 *
	 * @var array
	 */
	public $exclude = [];

	/**
	 *  Replace `%variables%` with context-dependent value.
	 *
	 * @param string $variable The string containing the %variables%.
	 * @param array  $args     Context object, can be post, taxonomy or term.
	 * @param array  $exclude  Excluded variables won't be replaced.
	 *
	 * @return string
	 */
	public function replace( $variable, $args = [], $exclude = [] ) {
		$variable = wp_strip_all_tags( $variable );

		// Bail early.
		if ( ! Str::contains( '%', $variable ) ) {
			return $variable;
		}

		if ( Str::ends_with( ' %sep%', $variable ) ) {
			$variable = substr( $variable, 0, -5 );
		}

		$this->pre_replace( $args, $exclude );
		$replacements = $this->set_up_replacements( $variable );

		/**
		 * Filter: Allow customizing the replacements.
		 *
		 * @param array  $replacements The replacements.
		 * @param object $args The object some of the replacement values might come from,
		 *                    could be a post, taxonomy or term.
		 */
		$replacements = apply_filters( 'rank_math/replacements', $replacements, self::$args );

		// Do the replacements.
		if ( is_array( $replacements ) && [] !== $replacements ) {
			$variable = str_replace( array_keys( $replacements ), array_values( $replacements ), $variable );
		}

		if ( isset( $replacements['%sep%'] ) && Str::is_non_empty( $replacements['%sep%'] ) ) {
			$q_sep    = preg_quote( $replacements['%sep%'], '`' );
			$variable = preg_replace( '`' . $q_sep . '(?:\s*' . $q_sep . ')*`u', $replacements['%sep%'], $variable );
		}

		// Remove excess whitespace.
		return preg_replace( '[\s\s+]', ' ', $variable );
	}

	/**
	 * Run prior to replacement.
	 *
	 * @param array $args    Context object, can be post, taxonomy or term.
	 * @param array $exclude Excluded variables won't be replaced.
	 */
	private function pre_replace( $args, $exclude ) {
		if ( is_array( $exclude ) ) {
			$this->exclude = $exclude;
		}

		self::$args = (object) array_merge( self::$defaults, (array) $args );
		$this->process_content();
	}

	/**
	 * Process content only once, because it's expensive.
	 *
	 * @return void
	 */
	private function process_content() {
		if ( ! isset( self::$content_processed[ self::$args->ID ]['post_content'] ) ) {
			self::$content_processed[ self::$args->ID ]['post_content'] = Paper::should_apply_shortcode() ? do_shortcode( self::$args->post_content ) : Helper::strip_shortcodes( self::$args->post_content );
			self::$content_processed[ self::$args->ID ]['post_excerpt'] = Paper::should_apply_shortcode() ? do_shortcode( self::$args->post_excerpt ) : Helper::strip_shortcodes( self::$args->post_excerpt );
		}

		self::$args->post_content = self::$content_processed[ self::$args->ID ]['post_content'];
		self::$args->post_excerpt = self::$content_processed[ self::$args->ID ]['post_excerpt'];
	}

	/**
	 * Get the replacements for the variables.
	 *
	 * @param string $variable String to parse for variables.
	 *
	 * @return array Retrieved replacements.
	 */
	private function set_up_replacements( $variable ) {
		if ( $this->has_cache( $variable ) ) {
			return $this->get_cache( $variable );
		}

		$replacements = [];
		if ( ! preg_match_all( '/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/iu', $variable, $matches ) ) {
			$this->set_cache( $variable, $replacements );
			return $replacements;
		}

		foreach ( $matches[1] as $index => $variable_id ) {
			$value = $this->get_variable_value( $matches, $index, $variable_id );
			if ( false !== $value ) {
				$replacements[ $matches[0][ $index ] ] = $value;
			}

			unset( $value );
		}

		$this->set_cache( $variable, $replacements );
		return $replacements;
	}

	/**
	 * Get non-cacheable variables.
	 *
	 * @return array
	 */
	private function get_non_cacheable_variables() {
		if ( ! is_null( self::$non_cacheable_replacements ) ) {
			return self::$non_cacheable_replacements;
		}

		$non_cacheable = [];
		foreach ( rank_math()->variables->get_replacements() as $variable ) {
			if ( ! $variable->is_cacheable() ) {
				$non_cacheable[] = $variable->get_id();
			}
		}

		/**
		 * Filter: Allow changing the non-cacheable variables.
		 *
		 * @param array $non_cacheable The non-cacheable variable IDs.
		 */
		self::$non_cacheable_replacements = apply_filters( 'rank_math/replacements/non_cacheable', $non_cacheable );

		return self::$non_cacheable_replacements;
	}

	/**
	 * Check if we have cache for a string.
	 *
	 * @param string $variable String to check.
	 *
	 * @return bool
	 */
	private function has_cache( $variable ) {
		return isset( self::$replacements_cache[ md5( $variable ) ] );
	}

	/**
	 * Get cache for a string. Handles non-cacheable variables.
	 *
	 * @param string $variable String to get cache for.
	 *
	 * @return array
	 */
	private function get_cache( $variable ) {
		$non_cacheable = $this->get_non_cacheable_variables();
		$replacements  = self::$replacements_cache[ md5( $variable ) ];
		if ( empty( $non_cacheable ) ) {
			return $replacements;
		}

		foreach ( $replacements as $key => $value ) {
			$id = explode( '(', trim( $key, '%' ) )[0];
			if ( ! in_array( $id, $non_cacheable, true ) ) {
				continue;
			}

			$var_args = '';
			$parts    = explode( '(', trim( $key, '%)' ) );
			if ( isset( $parts[1] ) ) {
				$var_args = $this->normalize_args( $parts[1] );
			}

			$replacements[ $key ] = $this->get_variable_by_id( $id, $var_args )->run_callback( $var_args, self::$args );
		}

		return $replacements;
	}

	/**
	 * Set cache for a string.
	 *
	 * @param string $variable String to set cache for.
	 *
	 * @param array  $cache  Cache to set.
	 */
	private function set_cache( $variable, $cache ) {
		self::$replacements_cache[ md5( $variable ) ] = $cache;
	}

	/**
	 * Get variable value.
	 *
	 * @param array  $matches Regex matches found in the string.
	 * @param int    $index   Index of the matched.
	 * @param string $id      Variable id.
	 *
	 * @return mixed
	 */
	private function get_variable_value( $matches, $index, $id ) {
		// Don't set up excluded replacements.
		if ( isset( $matches[0][ $index ] ) && in_array( $matches[0][ $index ], $this->exclude, true ) ) {
			return false;
		}

		$has_args = ! empty( $matches[2][ $index ] ) && ! empty( $matches[3][ $index ] );
		$id       = $has_args ? $matches[2][ $index ] : $id;
		$var_args = $has_args ? $this->normalize_args( $matches[3][ $index ] ) : [];
		$variable = $this->get_variable_by_id( $id, $var_args );

		if ( is_null( $variable ) ) {
			return rank_math()->variables->remove_non_replaced ? '' : false;
		}

		return $variable->run_callback( $var_args, self::$args );
	}

	/**
	 * Find variable.
	 *
	 * @param string $id   Variable id.
	 * @param array  $args Array of arguments.
	 *
	 * @return Variable|null
	 */
	private function get_variable_by_id( $id, $args ) {
		if ( ! isset( rank_math()->variables ) ) {
			return null;
		}

		$replacements = rank_math()->variables->get_replacements();
		if ( isset( $replacements[ $id ] ) ) {
			return $replacements[ $id ];
		}

		if ( ! empty( $args ) && isset( $replacements[ $id . '_args' ] ) ) {
			return $replacements[ $id . '_args' ];
		}

		return null;
	}

	/**
	 * Convert arguments string to arguments array.
	 *
	 * @param  string $variable The string that needs to be converted.
	 *
	 * @return array
	 */
	private function normalize_args( $variable ) {
		$variable = wp_specialchars_decode( $variable );
		if ( ! Str::contains( '=', $variable ) ) {
			return $variable;
		}

		return wp_parse_args( $variable, [] );
	}
}
PK     –ŠU]0Ýž�  �  ,  includes/replace-variables/class-manager.phpnu „[µü¤        <?php
/**
 * Variable replacer.
 *
 * Replace '%variables%' in strings based on context.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Manager class.
 */
class Manager extends Post_Variables {

	/**
	 * Removed non replaced variables.
	 *
	 * @var bool
	 */
	public $remove_non_replaced = true;

	/**
	 * Is variable setup.
	 *
	 * @var bool
	 */
	private $is_setup = false;

	/**
	 * Hold arguments.
	 *
	 * @var array
	 */
	public $args = [];

	/**
	 * Hold arguments temporarily.
	 *
	 * @var array
	 */
	protected $tmp_args = [];

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$action   = is_admin() ? 'admin_enqueue_scripts' : 'wp';
		$priority = is_admin() ? 5 : 25;
		$this->action( $action, 'setup', $priority );
	}

	/**
	 * Should we setup variables or not.
	 *
	 * @return bool
	 */
	private function should_we_setup() {
		if ( Helper::is_ux_builder() ) {
			return false;
		}

		global $wp_customize;
		if ( isset( $wp_customize ) || $this->is_setup ) {
			return false;
		}

		$current_screen = \function_exists( 'get_current_screen' ) ? get_current_screen() : false;
		if (
			$current_screen instanceof \WP_Screen &&
			\in_array( $current_screen->base, [ 'themes' ], true )
		) {
			return false;
		}

		return true;
	}

	/**
	 * Set up replacement variables.
	 */
	public function setup() {
		if ( ! $this->should_we_setup() ) {
			return;
		}

		// Variable setuped.
		$this->is_setup = true;

		// Internal variables.
		$current_screen = \function_exists( 'get_current_screen' ) ? get_current_screen() : false;
		if ( $current_screen instanceof \WP_Screen ) {
			$screen_base        = $current_screen->base;
			$this->is_post_edit = is_admin() && 'post' === $screen_base;
			$this->is_term_edit = is_admin() && 'term' === $screen_base;
			$this->is_user_edit = is_admin() && ( 'profile' === $screen_base || 'user-edit' === $screen_base );
		}

		/**
		 * Filter: strip variables which don't have a replacement.
		 *
		 * @param bool $final
		 */
		$this->remove_non_replaced = $this->do_filter( 'vars/remove_nonreplaced', true );

		// Setup internal variables.
		$this->setup_basic_variables();
		$this->setup_post_variables();
		$this->setup_term_variables();
		$this->setup_author_variables();
		$this->setup_advanced_variables();

		// Setup custom fields.
		if ( $this->is_post_edit || $this->is_term_edit || $this->is_user_edit ) {
			Helper::add_json( 'customFields', $this->get_custom_fields() );
			Helper::add_json( 'customTerms', $this->get_custom_taxonomies() );
		}

		/**
		* Action: 'rank_math/vars/register_extra_replacements' - Allows adding extra variables.
		*/
		$this->do_action( 'vars/register_extra_replacements' );
	}

	/**
	 * Setup JSON for use in ui.
	 */
	public function setup_json() {
		$json = [];

		foreach ( $this->replacements as $id => $variable ) {
			$json[ $id ] = $variable->to_array();
		}

		Helper::add_json( 'variables', $this->do_filter( 'vars/replacements', $json ) );
	}

	/**
	 * Get replacements.
	 *
	 * @return array
	 */
	public function get_replacements() {
		return $this->replacements;
	}

	/**
	 * Set arguments.
	 *
	 * @param array $args The object some of the replacement values might come from,
	 *                    could be a post, taxonomy or term.
	 */
	public function set_arguments( $args = [] ) {
		if ( ! empty( $args ) ) {
			$this->tmp_args = $this->args;
			$this->args     = $args;
		}
	}

	/**
	 * Reset arguments.
	 */
	public function reset_arguments() {
		$this->args = $this->tmp_args;
	}

	/**
	 * Get custom fields.
	 *
	 * @return array
	 */
	private function get_custom_fields() {
		$metas = [];

		if ( $this->is_user_edit ) {
			global $user_id;
			$metas = get_metadata( 'user', $user_id );
		} elseif ( $this->is_post_edit ) {
			$metas = get_metadata( 'post', $this->args->ID );
		} elseif ( $this->is_term_edit ) {
			$term_id = Param::request( 'tag_ID', 0, FILTER_VALIDATE_INT );
			$metas   = get_metadata( 'term', $term_id );
		}

		if ( empty( $metas ) ) {
			return [];
		}

		$json = [];
		foreach ( $metas as $meta_key => $meta_value ) {
			if ( Str::starts_with( '_', $meta_key ) || Str::starts_with( 'rank_math_', $meta_key ) ) {
				continue;
			}

			$json[ $meta_key ] = $meta_value[0];
		}

		return $json;
	}

	/**
	 * Get custom taxonomies.
	 *
	 * @return array
	 */
	private function get_custom_taxonomies() {
		$taxonomies = get_post_taxonomies( $this->args->ID );
		if ( empty( $taxonomies ) ) {
			return [];
		}

		$json = [];
		foreach ( $taxonomies as $taxonomy ) {
			if ( in_array( $taxonomy, [ 'category', 'post_tag' ], true ) ) {
				continue;
			}

			$name = ucwords( str_replace( [ '_', '-' ], ' ', $taxonomy ) );
			/* translators: Taxonomy name. */
			$title = sprintf( __( '%s Title', 'seo-by-rank-math' ), $name );
			/* translators: Taxonomy name. */
			$desc = sprintf( __( '%s Description', 'seo-by-rank-math' ), $name );

			$this->register_replacement(
				"term_{$taxonomy}",
				[
					'name'        => $title,
					'description' => esc_html__( 'Custom Term title.', 'seo-by-rank-math' ),
					'variable'    => "customterm({$taxonomy})",
					'example'     => $title,
				],
				[ $this, 'get_custom_term' ]
			);

			$this->register_replacement(
				"term_{$taxonomy}_desc",
				[
					'name'        => $desc,
					'description' => esc_html__( 'Custom Term description.', 'seo-by-rank-math' ),
					'variable'    => "customterm_desc({$taxonomy})",
					'example'     => $desc,
				],
				[ $this, 'get_custom_term_desc' ]
			);

			$term      = $this->get_custom_term( $taxonomy );
			$term_desc = $this->get_custom_term_desc( $taxonomy );

			$json[ $taxonomy ]          = $term ? $term : $title;
			$json[ "{$taxonomy}_desc" ] = $term_desc ? $term_desc : $desc;
		}

		return $json;
	}
}
PK     –ŠU]-œ%  %  5  includes/replace-variables/class-author-variables.phpnu „[µü¤        <?php
/**
 * Author variable replacer.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Author_Variables class.
 */
class Author_Variables extends Term_Variables {

	/**
	 * Hold counter variable data.
	 *
	 * @var array
	 */
	protected $counters = [];

	/**
	 * Setup author variables.
	 */
	public function setup_author_variables() {
		global $user_id;
		if ( ! Admin_Helper::is_user_edit() ) {
			$user_id = get_current_user_id();
		}

		if ( $this->is_post_edit ) {
			$post   = $this->get_post();
			$author = get_userdata( $post->post_author );
		}

		$this->register_replacement(
			'userid',
			[
				'name'        => esc_html__( 'Author ID', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Author\'s user ID of the current post, page or author archive.', 'seo-by-rank-math' ),
				'variable'    => 'userid',
				'example'     => $this->is_post_edit ? $post->post_author : $user_id,
			],
			[ $this, 'get_userid' ]
		);

		$this->register_replacement(
			'name',
			[
				'name'        => esc_html__( 'Post Author', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Display author\'s nicename of the current post, page or author archive.', 'seo-by-rank-math' ),
				'variable'    => 'name',
				'example'     => $this->is_post_edit && $author ? $author->display_name : get_the_author_meta( 'display_name', $user_id ),
			],
			[ $this, 'get_name' ]
		);

		$this->register_replacement(
			'post_author',
			[
				'name'        => esc_html__( 'Post Author', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Display author\'s nicename of the current post, page or author archive.', 'seo-by-rank-math' ),
				'variable'    => 'post_author',
				'example'     => $this->is_post_edit && $author ? $author->display_name : get_the_author_meta( 'display_name', $user_id ),
			],
			[ $this, 'get_name' ]
		);

		$this->register_replacement(
			'user_description',
			[
				'name'        => esc_html__( 'Author Description', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Author\'s biographical info of the current post, page or author archive.', 'seo-by-rank-math' ),
				'variable'    => 'user_description',
				'example'     => get_the_author_meta( 'description', $user_id ),
			],
			[ $this, 'get_user_description' ]
		);
	}

	/**
	 * Get the post author's user ID to use as a replacement.
	 *
	 * @return string
	 */
	public function get_userid() {
		$user_id = ! empty( $this->args->post_author ) ? $this->args->post_author : get_query_var( 'author' );
		if ( $user_id ) {
			return $user_id;
		}

		return get_query_var( 'bbp_user_id' );
	}

	/**
	 * Get the post author's "nice name" to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_name() {
		$user_id = $this->get_userid();
		$name    = get_the_author_meta( 'display_name', $user_id );

		return '' !== $name ? $name : null;
	}

	/**
	 * Get the post author's user description to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_user_description() {
		$user_id     = $this->get_userid();
		$description = get_the_author_meta( 'description', $user_id );

		return '' !== $description ? $description : null;
	}
}
PK     –ŠU]`ã Å  Å  *  includes/replace-variables/class-cache.phpnu „[µü¤        <?php
/**
 * Variable replacement base.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

defined( 'ABSPATH' ) || exit;

/**
 * Cache class.
 */
class Cache extends Base {

	/**
	 * Cache holder.
	 *
	 * @var array
	 */
	private $cache = [];

	/**
	 * Get from cache.
	 *
	 * @param string $id ID to get from cache.
	 *
	 * @return mixed
	 */
	protected function get_cache( $id ) {
		return isset( $this->cache[ $id ] ) ? $this->cache[ $id ] : '';
	}

	/**
	 * In cache.
	 *
	 * @param string $id ID to get from cache.
	 *
	 * @return bool
	 */
	protected function in_cache( $id ) {
		return isset( $this->cache[ $id ] );
	}

	/**
	 * Save into cache.
	 *
	 * @param string $id    ID to get from cache.
	 * @param mixed  $value Value to save.
	 */
	protected function set_cache( $id, $value ) {
		$this->cache[ $id ] = $value;
	}
}
PK     –ŠU]„fšT0D  0D  3  includes/replace-variables/class-post-variables.phpnu „[µü¤        <?php
/**
 * Post variable replacer.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Replace_Variables
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Replace_Variables;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Post;
use RankMath\Paper\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Post_Variables class.
 */
class Post_Variables extends Advanced_Variables {

	/**
	 * Setup post variables.
	 */
	public function setup_post_variables() {
		$this->args = (object) wp_parse_args( array_filter( (array) $this->get_post() ), $this->get_defaults() );

		$this->register_replacement(
			'title',
			[
				'name'        => esc_html__( 'Post Title', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Title of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'title',
				'example'     => $this->get_title(),
				'nocache'     => true,
			],
			[ $this, 'get_title' ]
		);

		$this->register_replacement(
			'parent_title',
			[
				'name'        => esc_html__( 'Post Title of parent page', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Title of the parent page of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'parent_title',
				'example'     => $this->get_parent_title(),
			],
			[ $this, 'get_parent_title' ]
		);

		$this->register_replacement(
			'excerpt',
			[
				'name'        => esc_html__( 'Post Excerpt', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Excerpt of the current post (or auto-generated if it does not exist)', 'seo-by-rank-math' ),
				'variable'    => 'excerpt',
				'example'     => $this->get_excerpt(),
				'nocache'     => true,
			],
			[ $this, 'get_excerpt' ]
		);

		$this->register_replacement(
			'excerpt_only',
			[
				'name'        => esc_html__( 'Post Excerpt', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Excerpt of the current post (without auto-generation)', 'seo-by-rank-math' ),
				'variable'    => 'excerpt_only',
				'example'     => $this->is_post_edit && $this->args->post_excerpt ? $this->args->post_excerpt : esc_html__( 'Post Excerpt Only', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_excerpt_only' ]
		);

		$this->register_replacement(
			'seo_title',
			[
				'name'        => esc_html__( 'SEO Title', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Custom or Generated SEO Title of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'seo_title',
				'example'     => $this->get_title(),
				'nocache'     => true,
			],
			[ $this, 'get_seo_title' ]
		);

		$this->register_replacement(
			'seo_description',
			[
				'name'        => esc_html__( 'SEO Description', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Custom or Generated SEO Description of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'seo_description',
				'example'     => $this->get_excerpt(),
				'nocache'     => true,
			],
			[ $this, 'get_seo_description' ]
		);

		$this->register_replacement(
			'url',
			[
				'name'        => esc_html__( 'Post URL', 'seo-by-rank-math' ),
				'description' => esc_html__( 'URL of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'url',
				'example'     => $this->get_url(),
			],
			[ $this, 'get_url' ]
		);

		$this->register_replacement(
			'post_thumbnail',
			[
				'name'        => esc_html__( 'Post Thumbnail', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Current Post Thumbnail', 'seo-by-rank-math' ),
				'variable'    => 'post_thumbnail',
				'example'     => $this->get_post_thumbnail(),
				'nocache'     => true,
			],
			[ $this, 'get_post_thumbnail' ]
		);

		$this->setup_post_dates_variables();
		$this->setup_post_category_variables();
		$this->setup_post_tags_variables();
	}

	/**
	 * Setup post dates variables.
	 */
	public function setup_post_dates_variables() {
		$this->register_replacement(
			'date',
			[
				'name'        => esc_html__( 'Date Published', 'seo-by-rank-math' ),
				'description' => wp_kses_post( __( 'Publication date of the current post/page <strong>OR</strong> specified date on date archives', 'seo-by-rank-math' ) ),
				'variable'    => 'date',
				'example'     => $this->is_post_edit ? get_the_date() : current_time( get_option( 'date_format' ) ),
				'nocache'     => true,
			],
			[ $this, 'get_date' ]
		);

		$this->register_replacement(
			'modified',
			[
				'name'        => esc_html__( 'Date Modified', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Last modification date of the current post/page', 'seo-by-rank-math' ),
				'variable'    => 'modified',
				'example'     => $this->is_post_edit ? get_the_modified_date() : current_time( get_option( 'date_format' ) ),
				'nocache'     => true,
			],
			[ $this, 'get_modified' ]
		);

		$this->register_replacement(
			'date_args',
			[
				'name'        => esc_html__( 'Date Published (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Publish date with custom formatting pattern.', 'seo-by-rank-math' ),
				'variable'    => 'date(F jS, Y)',
				'example'     => date_i18n( 'F jS, Y' ),
			],
			[ $this, 'get_date' ]
		);

		$this->register_replacement(
			'modified_args',
			[
				'name'        => esc_html__( 'Date Modified (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Modified date with custom formatting pattern.', 'seo-by-rank-math' ),
				'variable'    => 'modified(F jS, Y)',
				'example'     => date_i18n( 'F jS, Y' ),
			],
			[ $this, 'get_modified' ]
		);
	}

	/**
	 * Setup post category variables.
	 */
	public function setup_post_category_variables() {
		$category   = $this->get_category();
		$categories = $this->get_categories();
		$this->register_replacement(
			'category',
			[
				'name'        => esc_html__( 'Post Category', 'seo-by-rank-math' ),
				'description' => wp_kses_post( __( 'First category (alphabetically) associated to the current post <strong>OR</strong> current category on category archives', 'seo-by-rank-math' ) ),
				'variable'    => 'category',
				'example'     => $category ? $category : esc_html__( 'Example Category', 'seo-by-rank-math' ),
			],
			[ $this, 'get_category' ]
		);

		$this->register_replacement(
			'categories',
			[
				'name'        => esc_html__( 'Post Categories', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Comma-separated list of categories associated to the current post', 'seo-by-rank-math' ),
				'variable'    => 'categories',
				'example'     => $categories ? $categories : esc_html__( 'Example Category 1, Example Category 2', 'seo-by-rank-math' ),
			],
			[ $this, 'get_categories' ]
		);

		$this->register_replacement(
			'categories_args',
			[
				'name'        => esc_html__( 'Categories (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Output list of categories associated to the current post, with customization options.', 'seo-by-rank-math' ),
				'variable'    => 'categories(limit=3&separator= | &exclude=12,23)',
				'example'     => $categories ? $categories : esc_html__( 'Example Category 1, Example Category 2', 'seo-by-rank-math' ),
			],
			[ $this, 'get_categories' ]
		);

		$this->register_replacement(
			'primary_taxonomy_terms',
			[
				'name'        => esc_html__( 'Primary Terms', 'seo-by-rank-math' ),
				'variable'    => 'primary_taxonomy_terms',
				'description' => esc_html__( 'Output list of terms from the primary taxonomy associated to the current post.', 'seo-by-rank-math' ),
				'example'     => $this->get_primary_taxonomy_terms(),
			],
			[ $this, 'get_primary_taxonomy_terms' ]
		);
	}

	/**
	 * Setup post tags variables.
	 */
	public function setup_post_tags_variables() {
		$tag  = $this->get_tag();
		$tags = $this->get_tags();
		$this->register_replacement(
			'tag',
			[
				'name'        => esc_html__( 'Post Tag', 'seo-by-rank-math' ),
				'description' => wp_kses_post( __( 'First tag (alphabetically) associated to the current post <strong>OR</strong> current tag on tag archives', 'seo-by-rank-math' ) ),
				'variable'    => 'tag',
				'example'     => $tag ? $tag : esc_html__( 'Example Tag', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_tag' ]
		);

		$this->register_replacement(
			'tags',
			[
				'name'        => esc_html__( 'Post Tags', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Comma-separated list of tags associated to the current post', 'seo-by-rank-math' ),
				'variable'    => 'tags',
				'example'     => $tags ? $tags : esc_html__( 'Example Tag 1, Example Tag 2', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_tags' ]
		);

		$this->register_replacement(
			'tags_args',
			[
				'name'        => esc_html__( 'Tags (advanced)', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Output list of tags associated to the current post, with customization options.', 'seo-by-rank-math' ),
				'variable'    => 'tags(limit=3&separator= | &exclude=12,23)',
				'example'     => $tags ? $tags : esc_html__( 'Example Tag 1 | Example Tag 2', 'seo-by-rank-math' ),
				'nocache'     => true,
			],
			[ $this, 'get_tags' ]
		);
	}

	/**
	 * Get the title of the post to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_title() {
		// Get post type name as Title.
		if ( is_post_type_archive() && ! Post::is_shop_page() ) {
			$post_type = $this->get_queried_post_type();
			return get_post_type_object( $post_type )->labels->name;
		}

		return Str::is_non_empty( $this->args->post_title ) ? stripslashes( $this->args->post_title ) : null;
	}

	/**
	 * Custom or Generated SEO Title
	 *
	 * @return string
	 */
	public function get_seo_title() {
		if ( is_singular() || is_category() || is_tag() || is_tax() ) {
			return Paper::get()->get_title();
		}

		$object = $this->args;

		// Early Bail!
		if ( empty( $object ) || empty( $object->ID ) ) {
			return '';
		}

		$title = Post::get_meta( 'title', $object->ID );
		if ( '' !== $title ) {
			return $title;
		}

		return Paper::get_from_options( "pt_{$object->post_type}_title", $object, '%title% %sep% %sitename%' );
	}

	/**
	 * Custom or Generated SEO Description
	 *
	 * @return string
	 */
	public function get_seo_description() {
		if ( is_singular() || is_category() || is_tag() || is_tax() ) {
			return Paper::get()->get_description();
		}

		$object = $this->args;

		// Early Bail!
		if ( empty( $object ) || empty( $object->ID ) ) {
			return '';
		}

		$description = Post::get_meta( 'description', $object->ID );
		if ( '' !== $description ) {
			return $description;
		}

		return Paper::get_from_options( "pt_{$object->post_type}_description", $object, '%excerpt%' );
	}

	/**
	 * Get the parent page title of the current page/CPT to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_parent_title() {
		$on_screen  = is_singular() || is_admin();
		$has_parent = isset( $this->args->post_parent ) && 0 !== $this->args->post_parent;

		return $on_screen && $has_parent ? get_the_title( $this->args->post_parent ) : null;
	}

	/**
	 * Get the post excerpt to use as a replacement. It will be auto-generated if it does not exist.
	 *
	 * @return string|null
	 */
	public function get_excerpt() {
		$object = $this->args;

		// Early Bail!
		if ( empty( $object ) ) {
			return '';
		}

		return ! empty( $object->post_excerpt ) ? wp_strip_all_tags( $object->post_excerpt ) : $this->get_post_content( $object );
	}

	/**
	 * Get the post excerpt to use as a replacement (without auto-generating).
	 *
	 * @return string|null
	 */
	public function get_excerpt_only() {
		$has = '' !== $this->args->post_excerpt && ! empty( $this->args->ID ) && ! post_password_required( $this->args->ID );

		return $has ? wp_strip_all_tags( $this->args->post_excerpt ) : null;
	}

	/**
	 * Get the date of the post to use as a replacement.
	 *
	 * @param string $format (Optional) PHP date format.
	 * @return string|null
	 */
	public function get_date( $format = '' ) {
		if ( is_array( $format ) && empty( $format ) ) {
			$format = '';
		}

		if ( '' !== $this->args->post_date ) {
			$format = $format ? $format : get_option( 'date_format' );
			return mysql2date( $format, $this->args->post_date, true );
		}

		if ( ! empty( get_query_var( 'day' ) ) ) {
			return get_the_date( $format );
		}

		$replacement = single_month_title( ' ', false );
		if ( Str::is_non_empty( $replacement ) ) {
			return $replacement;
		}

		return ! empty( get_query_var( 'year' ) ) ? get_query_var( 'year' ) : null;
	}

	/**
	 * Get the post modified time to use as a replacement.
	 *
	 * @param string $format (Optional) PHP date format.
	 * @return string|null
	 */
	public function get_modified( $format = '' ) {
		if ( ! empty( $this->args->post_modified ) && ! empty( $this->args->post_date ) ) {
			$modified = strtotime( $this->args->post_date ) > strtotime( $this->args->post_modified ) ? $this->args->post_date : $this->args->post_modified;
			$format   = $format ? $format : get_option( 'date_format' );
			return mysql2date( $format, $modified, true );
		}

		return null;
	}

	/**
	 * Get the post category to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_category() {
		if ( ! empty( $this->args->ID ) ) {
			$cat = $this->get_terms( $this->args->ID, 'category', true );
			if ( '' !== $cat ) {
				return $cat;
			}
		}

		return ! empty( $this->args->cat_name ) ? $this->args->cat_name : null;
	}

	/**
	 * Get the comma-separate post categories to use as a replacement.
	 *
	 * @param array $args Array of arguments.
	 * @return string|null
	 */
	public function get_categories( $args = [] ) {
		if ( ! empty( $this->args->ID ) ) {
			$cat = $this->get_terms( $this->args->ID, 'category', false, $args );
			if ( '' !== $cat ) {
				return $cat;
			}
		}

		return null;
	}

	/**
	 * Get the current tag to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_tag() {
		if ( ! empty( $this->args->ID ) ) {
			$tags = $this->get_terms( $this->args->ID, 'post_tag', true );
			if ( '' !== $tags ) {
				return $tags;
			}
		}

		return null;
	}

	/**
	 * Get the current tags to use as a replacement.
	 *
	 * @param array $args Arguments for get_terms().
	 * @return string|null
	 */
	public function get_tags( $args = [] ) {
		if ( ! empty( $this->args->ID ) ) {
			$tags = $this->get_terms( $this->args->ID, 'post_tag', false, $args );
			if ( '' !== $tags ) {
				return $tags;
			}
		}

		return null;
	}

	/**
	 * Get the comma separated post terms.
	 *
	 * @return string|null
	 */
	public function get_primary_taxonomy_terms() {
		if ( empty( $this->args->ID ) ) {
			return;
		}

		$post_type = get_post_type( $this->args->ID );
		$main_tax  = Helper::get_settings( "titles.pt_{$post_type}_primary_taxonomy" );
		if ( ! $main_tax ) {
			return;
		}

		$terms = wp_get_object_terms(
			$this->args->ID,
			$main_tax,
			[ 'fields' => 'names' ]
		);

		if ( is_wp_error( $terms ) || empty( $terms ) ) {
			return;
		}

		return implode( ', ', $terms );
	}

	/**
	 * Get the auto generated post content.
	 *
	 * @param array $post Post Object.
	 * @return string|null
	 */
	private function get_post_content( $post ) {
		if ( empty( $post->post_content ) ) {
			return '';
		}

		$keywords     = Post::get_meta( 'focus_keyword', $post->ID );
		$post_content = Paper::should_apply_shortcode() ? do_shortcode( $post->post_content ) : $post->post_content;
		$post_content = \preg_replace( '/<!--[\s\S]*?-->/iu', '', $post_content );
		$post_content = wpautop( Helper::strip_shortcodes( $post_content ) );
		$post_content = wp_kses( $post_content, [ 'p' => [] ] );

		// Remove empty paragraph tags.
		$post_content = preg_replace( '/<p[^>]*>(\s|&nbsp;)*<\/p>/', '', $post_content );

		// 4. Paragraph with the focus keyword.
		if ( ! empty( $keywords ) ) {
			$primary_keyword = explode( ',', $keywords );
			$primary_keyword = trim( $primary_keyword[0] );
			$regex           = '/<p>(.*' . str_replace( [ ',', ' ', '/', '(', ')', '[', ']', '{', '}', '?', '*', '+', '^', '$' ], [ '|', '.', '\/', '\(', '\)', '\[', '\]', '\{', '\}', '\?', '\*', '\+', '\^', '\$' ], $primary_keyword ) . '.*)<\/p>/iu';
			\preg_match_all( $regex, $post_content, $matches );
			if ( isset( $matches[1], $matches[1][0] ) ) {
				return $matches[1][0];
			}
		}

		// 5. The First paragraph of the content.
		\preg_match_all( '/<p>(.*)<\/p>/iu', $post_content, $matches );
		return isset( $matches[1], $matches[1][0] ) ? $matches[1][0] : wp_strip_all_tags( $post->post_content );
	}

	/**
	 * Default post data.
	 *
	 * @return array
	 */
	private function get_defaults() {
		$defaults = Replacer::$defaults;

		if ( $this->is_post_edit ) {
			$defaults['post_author']  = 'Author Name';
			$defaults['post_content'] = 'Post content';
			$defaults['post_title']   = 'Post Title';
		}

		return $defaults;
	}

	/**
	 * Get the canonical URL to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_url() {
		return Paper::get()->get_canonical() ? Paper::get()->get_canonical() : get_the_permalink( $this->args->ID );
	}

	/**
	 * Get the the post thumbnail to use as a replacement.
	 *
	 * @return string|null
	 */
	public function get_post_thumbnail() {
		if ( ! has_post_thumbnail( $this->args->ID ) ) {
			return '';
		}

		$image = wp_get_attachment_image_src( get_post_thumbnail_id( $this->args->ID ), 'full' );
		return ! empty( $image ) ? $image[0] : '';
	}
}
PK     –ŠU]ø ˆk/  /     includes/rest/class-sanitize.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use RankMath\CMB2;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Sanitize {

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Sanitize
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Sanitize ) ) {
			$instance = new Sanitize();
		}

		return $instance;
	}

	/**
	 * Sanitize value
	 *
	 * @param string $field_id Field id to sanitize.
	 * @param mixed  $value    Field value.
	 *
	 * @return mixed  Sanitized value.
	 */
	public function sanitize( $field_id, $value ) {
		$sanitized_value = '';
		switch ( $field_id ) {
			case 'rank_math_title':
			case 'rank_math_description':
			case 'rank_math_snippet_name':
			case 'rank_math_snippet_desc':
			case 'rank_math_facebook_title':
			case 'rank_math_facebook_description':
			case 'rank_math_twitter_title':
			case 'rank_math_twitter_description':
				$sanitized_value = wp_filter_nohtml_kses( $value );
				break;
			case 'rank_math_snippet_recipe_ingredients':
			case 'rank_math_snippet_recipe_instructions':
			case 'rank_math_snippet_recipe_single_instructions':
				$sanitized_value = $this->sanitize_textarea( $field_id, $value );
				break;
			case 'rank_math_canonical_url':
				$sanitized_value = esc_url_raw( $value );
				break;
			case 'rank_math_snippet_job_description':
				$sanitized_value = wp_kses(
					$value,
					[
						'br' => [],
						'p'  => [],
						'ul' => [],
						'li' => [],
					]
				);
				break;
			case 'rank_math_snippet_answer':
				$sanitized_value = wp_kses(
					$value,
					[
						'h1'     => [],
						'h2'     => [],
						'h3'     => [],
						'h4'     => [],
						'h5'     => [],
						'h6'     => [],
						'br'     => [],
						'ol'     => [],
						'ul'     => [],
						'li'     => [],
						'a'      => [
							'href'   => [],
							'target' => [],
							'rel'    => [],
						],
						'p'      => [],
						'b'      => [],
						'i'      => [],
						'div'    => [],
						'strong' => [],
						'em'     => [],
					]
				);
				break;
			default:
				$sanitized_value = is_array( $value ) ? $this->loop_sanitize( $value ) : CMB2::sanitize_textfield( $value );
		}

		return $sanitized_value;
	}

	/**
	 * Sanitize Textarea field
	 *
	 * @param string $field_id Field id to sanitize.
	 * @param mixed  $value    Field value.
	 *
	 * @return mixed  Sanitized value.
	 */
	public function sanitize_textarea( $field_id, $value ) {
		return is_array( $value ) ? $this->loop_sanitize( $value, 'sanitize_textarea' ) : sanitize_textarea_field( $value );
	}

	/**
	 * Sanitize array
	 *
	 * @param array $values  Field value.
	 * @param array $method Sanitize Method.
	 *
	 * @return mixed  Sanitized value.
	 */
	public function loop_sanitize( $values, $method = 'sanitize' ) {
		$sanitized_value = [];
		$type            = $values['@type'] ?? '';

		foreach ( $values  as $key => $value ) {
			$field_id = $key;

			if ( 'Answer' === $type && 'text' === $key ) {
				$field_id = 'rank_math_snippet_answer';
			}

			if ( 'JobPosting' === $type && 'description' === $key ) {
				$field_id = 'rank_math_snippet_job_description';
			}

			$sanitized_value[ CMB2::sanitize_textfield( $key ) ] = is_array( $value ) ? $this->loop_sanitize( $value, $method ) : $this->$method( $field_id, $value );
		}

		return $sanitized_value;
	}
}
PK     –ŠU]v¯·Ïó  ó    includes/rest/class-front.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded both on frontend.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Controller;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Front class.
 */
class Front extends WP_REST_Controller {

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE;
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/disconnectSite',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'disconnect_site' ],
				'permission_callback' => [ $this, 'check_api_key' ],
				'args'                => $this->get_disconnect_site_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/getFeaturedImageId',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'get_featured_image_id' ],
				'permission_callback' => function () {
					return \RankMath\Helper::has_cap( 'onpage_general' );
				},
				'args'                => $this->get_featured_image_id_args(),
			]
		);
	}

	/**
	 * Check API key in request.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return bool                     Whether the API key matches or not.
	 */
	public function check_api_key( WP_REST_Request $request ) {
		$token = $request->get_param( 'token' );
		$data  = Admin_Helper::get_registration_data();

		return isset( $data['api_key'] ) && $token === $data['api_key'];
	}

	/**
	 * Disconnect website.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function disconnect_site( WP_REST_Request $request ) {
		Admin_Helper::get_registration_data( false );

		return [
			'code'    => 'site_disconnected',
			'message' => esc_html__( 'Site disconnected successfully.', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Get featured image ID.
	 *
	 * @param WP_REST_Request $request Should include a postId parameter.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_featured_image_id( WP_REST_Request $request ) {

		$resp = new WP_REST_Response();

		if ( ! current_theme_supports( 'post-thumbnails' ) ) {
			$resp->set_status( 200 );
			$resp->set_data(
				[
					'success'   => false,
					'message'   => esc_html__( 'The current theme does not have "post-thumbnails" support.', 'seo-by-rank-math' ),
					'featImgId' => 0,
				]
			);
			return $resp;
		}

		$post_id = $request->get_param( 'postId' );
		// Checks whether the current has permission to edit post.
		$post_type_obj = get_post_type_object( get_post_type( $post_id ) );
		if (
			is_null( $post_type_obj ) ||
			(
				! current_user_can( $post_type_obj->cap->edit_post, $post_id ) &&
				! current_user_can( $post_type_obj->cap->edit_others_posts )
			)
		) {
			$resp->set_status( 401 );
			$resp->set_data(
				[
					'success'   => false,
					'message'   => esc_html__( 'Sorry, you don\'t have the required permissions to access this page.', 'seo-by-rank-math' ),
					'featImgId' => false,
				]
			);
			return $resp->as_error();
		}

		$feat_img_id = get_post_thumbnail_id( $post_id ? $post_id : null );
		if ( false === $feat_img_id ) {
			$resp->set_status( 404 );
			$resp->set_data(
				[
					'success'   => false,
					'message'   => esc_html__( 'The post could not be found.', 'seo-by-rank-math' ),
					'featImgId' => false,
				]
			);
			return $resp->as_error();
		}

		$resp->set_status( 200 );
		$resp->set_data(
			[
				'success'   => true,
				'featImgId' => $feat_img_id,
			]
		);
		return $resp;
	}

	/**
	 * Get featured image ID endpoint arguments.
	 *
	 * @return array
	 */
	private function get_featured_image_id_args() {
		return [
			'postId' => [
				'type'              => 'integer',
				'required'          => true,
				'description'       => esc_html__( 'Post ID', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
		];
	}

	/**
	 * Get disconnect site endpoint arguments.
	 *
	 * @return array
	 */
	private function get_disconnect_site_args() {
		return [
			'token' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Site token', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
		];
	}
}
PK     –ŠU]¤m{±t/  t/    includes/rest/class-admin.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Controller;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Traits\Meta;
use RankMath\Role_Manager\Capability_Manager;
use RankMath\Redirections\Redirection;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends WP_REST_Controller {

	use Meta;
	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE;
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/saveModule',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'save_module' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->get_save_module_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/toolsAction',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'tools_actions' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->get_tools_action_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateMode',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'update_mode' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->get_update_mode_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/dashboardWidget',
			[
				'methods'             => \WP_REST_Server::READABLE,
				'callback'            => [ $this, 'dashboard_widget_items' ],
				'permission_callback' => function () {
					return current_user_can( 'read' );
				},
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateSeoScore',
			[
				'methods'             => \WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'update_seo_score' ],
				'permission_callback' => [ $this, 'can_edit_posts' ],
				'args'                => $this->get_update_seo_score_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateSettings',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'update_settings' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_settings' ],
			]
		);

		register_rest_route(
			$this->namespace,
			'/searchPage',
			[
				'methods'             => WP_REST_Server::ALLMETHODS,
				'callback'            => [ $this, 'search_page' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
			]
		);
	}

	/**
	 * Save module state.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function save_module( WP_REST_Request $request ) {
		$module = $request->get_param( 'module' );
		$state  = $request->get_param( 'state' );

		Helper::update_modules( [ $module => $state ] );
		$this->maybe_delete_rewrite_rules( $module );
		do_action( 'rank_math/module_changed', $module, $state );
		return true;
	}

	/**
	 * Function to get the dashboard widget content.
	 */
	public function dashboard_widget_items() {
		ob_start();
		$this->do_action( 'dashboard/widget' );
		return ob_get_clean();
	}

	/**
	 * Tools actions.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function tools_actions( WP_REST_Request $request ) {
		$action = $request->get_param( 'action' );
		return apply_filters( 'rank_math/tools/' . $action, 'Something went wrong.', $request );
	}

	/**
	 * Rest route to update the seo score.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_seo_score( WP_REST_Request $request ) {
		$post_scores = $request->get_param( 'postScores' );
		if ( empty( $post_scores ) ) {
			return 0;
		}

		foreach ( $post_scores as $post_id => $score ) {
			$post = get_post( $post_id );
			if ( ! $post ) {
				continue;
			}

			$score = (int) $score;
			if ( $score < 0 || $score > 100 ) {
				continue;
			}

			update_post_meta( $post_id, 'rank_math_seo_score', $score );
		}

		return 1;
	}

	/**
	 * Update Setup Mode.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_mode( WP_REST_Request $request ) {
		$settings = wp_parse_args(
			rank_math()->settings->all_raw(),
			[ 'general' => '' ]
		);

		$settings['general']['setup_mode'] = $request->get_param( 'mode' );
		Helper::update_all_settings( $settings['general'], null, null );

		return true;
	}

	/**
	 * Check if user can edit post.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return bool
	 */
	public function can_edit_posts( WP_REST_Request $request ) {
		$post_scores = $request->get_param( 'postScores' );
		if ( empty( $post_scores ) ) {
			return false;
		}

		foreach ( $post_scores as $post_id => $score ) {
			if ( ! current_user_can( 'edit_post', $post_id ) ) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Update Settings.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_settings( WP_REST_Request $request ) {
		$settings = $request->get_param( 'settings' );
		$type     = $request->get_param( 'type' );
		$is_reset = $request->get_param( 'isReset' );

		if ( $type === 'roleCapabilities' ) {
			$is_reset ? Capability_Manager::get()->reset_capabilities() : Helper::set_capabilities( $settings );
			return [
				'settings' => Helper::get_roles_capabilities(),
			];
		}

		if ( $type === 'redirections' ) {
			$redirection = Redirection::from(
				[
					'id'          => isset( $settings['id'] ) ? $settings['id'] : '',
					'sources'     => $settings['sources'],
					'url_to'      => isset( $settings['url_to'] ) ? $settings['url_to'] : '',
					'header_code' => $settings['header_code'],
					'status'      => $settings['status'],
				]
			);
			if ( $redirection->is_infinite_loop() ) {
				if ( ! $redirection->get_id() ) {
					$redirection->set_status( 'inactive' );
					return rest_ensure_response(
						[
							'error' => __( 'The redirection you are trying to create may cause an infinite loop. Please check the source and destination URLs. The redirection has been deactivated.', 'seo-by-rank-math' ),
						]
					);
				}

				return rest_ensure_response(
					[
						'error' => __( 'The redirection you are trying to update may cause an infinite loop. Please check the source and destination URLs.', 'seo-by-rank-math' ),
					]
				);

			}

			if ( false === $redirection->save() ) {
				return __( 'Please add at least one valid source URL.', 'seo-by-rank-math' );
			}

			$this->do_action( 'redirection/saved', $redirection, $settings );
			return true;
		}

		if ( $type === 'instant-indexing' ) {
			$key          = 'rank-math-options-instant-indexing';
			$org_settings = get_option( $key );
			if ( $is_reset ) {
				if ( isset( $org_settings['bing_post_types'] ) ) {
					unset( $org_settings['bing_post_types'] );
				}
			}

			$org_settings['bing_post_types'] = isset( $settings['bing_post_types'] ) ? array_map( 'sanitize_text_field', $settings['bing_post_types'] ) : [];

			update_option( $key, $org_settings, false );
			return [
				'settings' => $org_settings,
			];
		}

		if ( ! in_array( $type, [ 'general', 'titles', 'sitemap' ], true ) ) {
			return __( 'Invalid type.', 'seo-by-rank-math' );
		}

		return \RankMath\Admin\Option_Center::save_settings(
			$type,
			$settings,
			$request->get_param( 'fieldTypes' ),
			$request->get_param( 'updated' ),
			$is_reset
		);
	}

	/**
	 * Update Settings.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function search_page( WP_REST_Request $request ) {
		$term = sanitize_text_field( $request->get_param( 'searchedTerm' ) );

		if ( empty( $term ) ) {
			return rest_ensure_response( [ 'results' => [] ] );
		}

		global $wpdb;
		$pages = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_type = 'page' AND post_status = 'publish' AND post_title LIKE %s",
				'%' . $wpdb->esc_like( $term ) . '%'
			),
			ARRAY_A
		);

		$data = array_map(
			function ( $page ) {
				return [
					'id'   => (int) $page['ID'],
					'text' => $page['post_title'],
					'url'  => get_permalink( $page['ID'] ),
				];
			},
			$pages
		);

		return rest_ensure_response( [ 'results' => $data ] );
	}

	/**
	 * Get save module endpoint arguments.
	 *
	 * @return array
	 */
	private function get_save_module_args() {
		return [
			'module' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Module slug', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => function ( $param, $request, $key ) {
					$modules = array_keys( rank_math()->manager->modules );
					if ( ! in_array( $param, $modules, true ) ) {
						return new WP_Error( 'invalid_module', esc_html__( 'Invalid module', 'seo-by-rank-math' ), [ 'status' => 400 ] );
					}

					return rest_validate_request_arg( $param, $request, $key );
				},
			],
			'state'  => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Module state either on or off', 'seo-by-rank-math' ),
				'enum'              => [ 'on', 'off' ],
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Get update seo score endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_seo_score_args() {
		return [
			'postScores' => [
				'type'              => 'object',
				'required'          => true,
				'description'       => esc_html__( 'Post scores', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Get tools action endpoint arguments.
	 *
	 * @return array
	 */
	private function get_tools_action_args() {
		return [
			'action' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Action to perform', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Get update mode endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_mode_args() {
		return [
			'mode' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Mode to set', 'seo-by-rank-math' ),
				'enum'              => [ 'easy', 'advanced', 'custom' ],
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Maybe update(delete) rewrite rules.
	 *
	 * @param string $module The module name.
	 *
	 * @return void
	 */
	private function maybe_delete_rewrite_rules( $module ) {
		if ( in_array( $module, [ 'sitemap', 'llms-txt' ], true ) ) {
			delete_option( 'rewrite_rules' );
		}
	}
}
PK     –ŠU]ÖÚu4  4    includes/rest/class-post.phpnu „[µü¤        <?php
/**
 * The routes for post related functionality
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Controller;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Post class.
 */
class Post extends WP_REST_Controller {

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE;
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/updateMetaBulk',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'permission_callback' => function () {
					return \RankMath\Helper::has_cap( 'onpage_general' );
				},
				'callback'            => [ $this, 'update_bulk_meta' ],
				'args'                => $this->get_update_bulk_meta_args(),
			]
		);

		if ( Helper::is_site_editor() ) {
			register_rest_field(
				'page',
				'rankMath',
				[
					'get_callback'        => [ $this, 'get_post_screen_meta' ],
					'schema'              => null,
					'permission_callback' => function () {
						return current_user_can( 'read' );
					},
				]
			);
		}
	}

	/**
	 * Update bulk metadata.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_bulk_meta( WP_REST_Request $request ) {
		$rows        = $request->get_param( 'rows' );
		$object_type = $request->get_param( 'objectType' );

		foreach ( $rows as $object_id => $data ) {
			$object_id = absint( $object_id );
			if ( ! $this->can_process( $object_id, $object_type ) ) {
				continue;
			}

			$this->save_row( $object_id, $object_type, $data );
		}

		return [ 'success' => true ];
	}

	/**
	 * Retrieves the Post screen metadata to be utilized when a Page is changed from the Full Site Editor.
	 */
	public function get_post_screen_meta() {
		$screen = new \RankMath\Admin\Metabox\Screen();
		$screen->load_screen( 'post' );
		return $screen->get_values();
	}

	/**
	 * Whether to process current object.
	 *
	 * @param int    $object_id   Object ID.
	 * @param string $object_type Object type.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	private function can_process( $object_id, $object_type ) {
		if ( ! $object_id ) {
			return false;
		}

		if ( $object_type === 'term' ) {
			$taxonomy = get_term( $object_id )->taxonomy;
			return in_array( $taxonomy, Helper::get_allowed_taxonomies(), true );
		}

		$post_type = get_post_type( $object_id );
		if ( ! Helper::is_post_type_accessible( $post_type ) && 'attachment' !== $post_type ) {
			return false;
		}

		// Checks whether the current has permission to edit post.
		$post_type_obj = get_post_type_object( $post_type );
		if (
			is_null( $post_type_obj ) ||
			(
				! current_user_can( $post_type_obj->cap->edit_post, $object_id ) &&
				! current_user_can( $post_type_obj->cap->edit_others_posts )
			)
		) {
			return false;
		}

		return true;
	}

	/**
	 * Save single row.
	 *
	 * @param int    $object_id    Object ID.
	 * @param string $object_type Object type.
	 * @param array  $data         Object data.
	 */
	private function save_row( $object_id, $object_type, $data ) {
		foreach ( $data as $key => $value ) {
			$this->save_column( $object_id, $object_type, $key, $value );
		}
	}

	/**
	 * Save row columns.
	 *
	 * @param int    $object_id   Object ID.
	 * @param string $object_type Object type.
	 * @param string $column      Column name.
	 * @param string $value       Column value.
	 */
	private function save_column( $object_id, $object_type, $column, $value ) {
		if ( ! in_array( $column, [ 'focus_keyword', 'title', 'description', 'image_alt', 'image_title' ], true ) ) {
			return;
		}

		$sanitizer = Sanitize::get();
		if ( 'image_title' === $column ) {
			wp_update_post(
				[
					'ID'         => $object_id,
					'post_title' => $sanitizer->sanitize( 'image_title', $value ),
				]
			);
			return;
		}

		if ( 'focus_keyword' === $column ) {
			$focus_keyword    = get_post_meta( $object_id, 'rank_math_' . $column, true );
			$focus_keyword    = explode( ',', $focus_keyword );
			$focus_keyword[0] = $value;
			$value            = implode( ',', $focus_keyword );
		}

		$column = 'image_alt' === $column ? '_wp_attachment_image_alt' : 'rank_math_' . $column;

		$method = $object_type === 'term' ? 'update_term_meta' : 'update_post_meta';
		$method( $object_id, $column, $sanitizer->sanitize( $column, $value ) );
	}

	/**
	 * Get update metadata endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_bulk_meta_args() {
		return [
			'rows' => [
				'required'          => true,
				'description'       => esc_html__( 'Selected posts to update the data for.', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
		];
	}
}
PK     –ŠU]®:÷� ;   ;    includes/rest/class-shared.phpnu „[µü¤        <?php
/**
 * The shared REST routes for front and backend.
 *
 * Defines the functionality loaded both on front and backend.
 *
 * @since      1.0.60
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Redirections\Metabox;
use RankMath\Rest\Rest_Helper;
use RankMath\Rest\Sanitize;
use RankMath\Traits\Meta;
use RankMath\Schema\DB;
use WP_Error;
use WP_REST_Controller;
use WP_REST_Request;
use WP_REST_Server;

defined( 'ABSPATH' ) || exit;

/**
 * Shared class.
 */
class Shared extends WP_REST_Controller {

	use Meta;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = Rest_Helper::BASE;
	}

	/**
	 * Register shared routes.
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/updateRedirection',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_redirection' ],
				'args'                => $this->get_update_redirection_args(),
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'get_redirection_permissions_check' ],
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateMeta',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_metadata' ],
				'args'                => $this->get_update_metadata_args(),
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'get_object_permissions_check' ],
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateSchemas',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_schemas' ],
				'args'                => $this->get_update_schemas_args(),
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'get_schema_permissions_check' ],
			]
		);
	}

	/**
	 * Update redirection.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_redirection( WP_REST_Request $request ) {
		$cmb     = new \stdClass();
		$metabox = new Metabox();

		$cmb->object_id    = $request->get_param( 'objectID' );
		$cmb->object_type  = null !== $request->get_param( 'objectType' ) ? $request->get_param( 'objectType' ) : 'post';
		$cmb->data_to_save = [
			'has_redirect'                 => $request->get_param( 'hasRedirect' ),
			'redirection_id'               => $request->get_param( 'redirectionID' ),
			'redirection_url_to'           => $request->get_param( 'redirectionUrl' ),
			'redirection_sources'          => \str_replace( home_url( '/' ), '', $request->get_param( 'redirectionSources' ) ),
			'redirection_header_code'      => $request->get_param( 'redirectionType' ) ? $request->get_param( 'redirectionType' ) : 301,
			'rank_math_enable_redirection' => 'on',
		];

		if ( false === $request->get_param( 'hasRedirect' ) ) {
			unset( $cmb->data_to_save['redirection_url_to'] );
		}

		if ( empty( $request->get_param( 'redirectionID' ) ) ) {
			unset( $cmb->data_to_save['redirection_id'] );
		}

		return $metabox->save_advanced_meta( $cmb );
	}

	/**
	 * Update metadata.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_metadata( WP_REST_Request $request ) {
		$object_id   = $request->get_param( 'objectID' );
		$object_type = $request->get_param( 'objectType' );
		$meta        = apply_filters( 'rank_math/filter_metadata', $request->get_param( 'meta' ), $request );
		$content     = $request->get_param( 'content' );

		if ( $object_id === 0 ) {
			$this->update_site_editor_homepage( $meta );
			return [
				'slug'    => '/',
				'schemas' => [],
			];
		}

		do_action( 'rank_math/pre_update_metadata', $object_id, $object_type, $content );
		$new_slug = true;
		if ( isset( $meta['permalink'] ) && ! empty( $meta['permalink'] ) && 'post' === $object_type ) {
			$post     = get_post( $object_id );
			$new_slug = wp_unique_post_slug( $meta['permalink'], $post->ID, $post->post_status, $post->post_type, $post->post_parent );
			if ( $new_slug !== $post->post_name ) {
				wp_update_post(
					[
						'ID'        => $object_id,
						'post_name' => $new_slug,
					]
				);
			}
			unset( $meta['permalink'] );
		}

		// Add protection.
		remove_all_filters( 'is_protected_meta' );
		add_filter( 'is_protected_meta', [ $this, 'only_this_plugin' ], 10, 2 );

		$sanitizer = Sanitize::get();
		foreach ( $meta as $meta_key => $meta_value ) {
			// Delete schema by meta id.
			if ( Str::starts_with( 'rank_math_delete_', $meta_key ) ) {
				$this->maybe_delete_schema( $object_type, $object_id, $meta_key );
				continue;
			}

			if ( empty( $meta_value ) ) {
				delete_metadata( $object_type, $object_id, $meta_key );
				continue;
			}

			$this->update_meta( $object_type, $object_id, $meta_key, $sanitizer->sanitize( $meta_key, $meta_value ) );
		}

		return [
			'slug'    => $new_slug,
			'schemas' => DB::get_schemas( $object_id, "{$object_type}meta", true ),
		];
	}

	/**
	 * Update metadata.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_schemas( WP_REST_Request $request ) {
		$object_id   = $request->get_param( 'objectID' );
		$object_type = $request->get_param( 'objectType' );
		$schemas     = apply_filters( 'rank_math/schema/filter_data', $request->get_param( 'schemas' ), $request );
		$new_ids     = [];

		do_action( 'rank_math/pre_update_schema', $object_id, $object_type );
		$sanitizer = Sanitize::get();
		foreach ( $schemas as $meta_id => $schema ) {
			$schema   = $sanitizer->sanitize( 'rank_math_schema', $schema );
			$schema   = $this->sanitize_schema_type( $schema );
			$type     = is_array( $schema['@type'] ) ? $schema['@type'][0] : $schema['@type'];
			$meta_key = 'rank_math_schema_' . $type;
			$schema   = wp_kses_post_deep( $schema );

			// Add new.
			if ( Str::starts_with( 'new-', $meta_id ) ) {
				$new_ids[ $meta_id ] = add_metadata( $object_type, $object_id, $meta_key, $schema );

				// Add "shortcut" to the new schema: a meta data where the key is $schema['metadata']['shortcode'] and the value is the new meta id.
				if ( isset( $schema['metadata']['shortcode'] ) ) {
					add_metadata( $object_type, $object_id, 'rank_math_shortcode_schema_' . $schema['metadata']['shortcode'], $new_ids[ $meta_id ] );
				}

				continue;
			}

			// Update old.
			$db_id      = absint( str_replace( 'schema-', '', $meta_id ) );
			$prev_value = update_metadata_by_mid( $object_type, $db_id, $schema, $meta_key );

			// Update or delete the "shortcut" to the new schema.
			if ( isset( $schema['metadata']['shortcode'] ) ) {
				update_metadata( $object_type, $object_id, 'rank_math_shortcode_schema_' . $schema['metadata']['shortcode'], $db_id );
			} elseif ( isset( $prev_value['metadata']['shortcode'] ) ) {
				delete_metadata( $object_type, $object_id, 'rank_math_shortcode_schema_' . $prev_value['metadata']['shortcode'] );
			}
		}

		do_action( 'rank_math/schema/update', $object_id, $schemas, $object_type );

		return $new_ids;
	}

	/**
	 * Allow only rank math meta keys
	 *
	 * @param bool   $is_protected Whether the key is considered protected.
	 * @param string $meta_key     Meta key.
	 *
	 * @return bool
	 */
	public function only_this_plugin( $is_protected, $meta_key ) {
		return Str::starts_with( 'rank_math_', $meta_key );
	}

	/**
	 * Get update redirection endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_redirection_args() {
		return [
			'objectID'        => [
				'type'              => 'integer',
				'required'          => true,
				'description'       => esc_html__( 'Object unique id', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
			'objectType'      => [
				'type'              => 'string',
				'default'           => 'post',
				'required'          => true,
				'description'       => esc_html__( 'Object Type i.e. post, term, user', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_valid_string' ],
			],
			'hasRedirect'     => [
				'type'        => 'boolean',
				'required'    => true,
				'description' => esc_html__( 'Whether the object has a redirect or not', 'seo-by-rank-math' ),
			],
			'redirectionID'   => [
				'type'        => 'string',
				'required'    => false,
				'description' => esc_html__( 'Redirection ID', 'seo-by-rank-math' ),
			],
			'redirectionUrl'  => [
				'type'              => 'string',
				'required'          => false,
				'description'       => esc_html__( 'Redirection URL', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => function ( $param, $request ) {
					$redirection_type = $request->get_param( 'redirectionType' );
					if ( in_array( $param, [ '301', '302', '307' ], true ) ) {
						return Url::is_url( $param );
					}

					return true;
				},
			],
			'redirectionType' => [
				'type'              => 'string',
				'default'           => '301',
				'required'          => true,
				'description'       => esc_html__( 'Redirection Type', 'seo-by-rank-math' ),
				'enum'              => [ '301', '302', '307', '410', '451' ],
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_valid_string' ],
			],
		];
	}

	/**
	 * Get update metadata endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_metadata_args() {
		return [
			'objectType' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Object Type i.e. post, term, user', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
			'objectID'   => [
				'type'              => 'integer',
				'required'          => true,
				'description'       => esc_html__( 'Object unique id', 'seo-by-rank-math' ),
				'validate_callback' => function ( $param ) {
					if ( empty( $param ) && 0 !== $param ) {
						return new WP_Error(
							'param_value_empty',
							esc_html__( 'Sorry, field is empty which is not allowed.', 'seo-by-rank-math' )
						);
					}

					return true;
				},
			],
			'meta'       => [
				'required'          => true,
				'description'       => esc_html__( 'Meta to add or update data.', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
		];
	}

	/**
	 * Update site editor homepage metadata.
	 *
	 * @param array $meta Metadata to update.
	 */
	private function update_site_editor_homepage( $meta ) {
		$meta_keys = [
			'homepage_title'                => 'rank_math_title',
			'homepage_description'          => 'rank_math_description',
			'homepage_facebook_title'       => 'rank_math_facebook_title',
			'homepage_facebook_description' => 'rank_math_facebook_description',
			'homepage_facebook_image'       => 'rank_math_facebook_image',
			'homepage_facebook_image_id'    => 'rank_math_facebook_image_id',
			'homepage_robots'               => 'rank_math_robots',
			'homepage_advanced_robots'      => 'rank_math_advanced_robots',
			'breadcrumbs_home_label'        => 'rank_math_breadcrumb_title',
		];

		$settings = rank_math()->settings->all_raw();
		foreach ( $meta_keys as $key => $meta_key ) {
			if ( empty( $meta[ $meta_key ] ) ) {
				continue;
			}
			$prefix = $key === 'breadcrumbs_home_label' ? 'general' : 'titles';

			$settings[ $prefix ][ $key ] = $meta[ $meta_key ];
		}

		Helper::update_all_settings( $settings['general'], $settings['titles'], null );
	}

	/**
	 * Make sure that the Schema @type is alphanumerical.
	 *
	 * @param array $schema Schema to sanitize.
	 * @return array
	 */
	private function sanitize_schema_type( $schema ) {
		if ( ! isset( $schema['@type'] ) ) {
			return $schema;
		}

		if ( ! is_array( $schema['@type'] ) ) {
			// Sanitize single type.
			$schema['@type'] = preg_replace( '/[^a-zA-Z0-9]/', '', $schema['@type'] );
			return $schema;
		}

		// Sanitize each type.
		foreach ( $schema['@type'] as $key => $type ) {
			$schema['@type'][ $key ] = preg_replace( '/[^a-zA-Z0-9]/', '', $type );
		}

		return $schema;
	}

	/**
	 * Get update schemas endpoint arguments.
	 *
	 * @return array
	 */
	private function get_update_schemas_args() {
		return [
			'objectType' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Object Type i.e. post, term, user', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
			'objectID'   => [
				'type'              => 'integer',
				'required'          => true,
				'description'       => esc_html__( 'Object unique id', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
			'schemas'    => [
				'required'          => true,
				'description'       => esc_html__( 'schemas to add or update data.', 'seo-by-rank-math' ),
				'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
			],
		];
	}

	/**
	 * Maybe delete schema.
	 *
	 * This function checks if a schema should be deleted based on the provided object type, object ID, and meta key.
	 *
	 * @param string $object_type The type of the object (e.g., post, term, user).
	 * @param int    $object_id   The ID of the object.
	 * @param string $meta_key    The meta key associated with the schema.
	 */
	private function maybe_delete_schema( $object_type, $object_id, $meta_key ) {
		// Early bail if user doesn't have the capability to edit the schema data.
		if ( ! Helper::has_cap( 'onpage_snippet' ) ) {
			return;
		}

		update_metadata( $object_type, $object_id, 'rank_math_rich_snippet', 'off' );

		$meta_id = absint( \str_replace( 'rank_math_delete_schema-', '', $meta_key ) );
		$schemas = DB::get_schemas( $object_id, "{$object_type}meta" );
		// Early bail if meta_id doesn't match with the schema data of the current post.
		if ( empty( $schemas ) || ! in_array( "schema-{$meta_id}", array_keys( $schemas ), true ) ) {
			return;
		}

		// First, delete the "shortcut" to the new schema.
		$schema = \get_metadata_by_mid( $object_type, $meta_id );
		if ( ! empty( $schema->meta_value ) ) {
			// Maybe unserialize the schema.
			$schema = \maybe_unserialize( $schema->meta_value );
			if ( ! empty( $schema['metadata']['shortcode'] ) ) {
				\delete_metadata( $object_type, $object_id, 'rank_math_shortcode_schema_' . $schema['metadata']['shortcode'] );
			}
		}

		// Now delete the schema.
		\delete_metadata_by_mid( $object_type, $meta_id );
	}
}
PK     –ŠU]ÏLÛ	  	  $  includes/rest/class-setup-wizard.phpnu „[µü¤        <?php
/**
 * The Rest endpoints used in the Setup Wizard page.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.245
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_REST_Request;
use WP_REST_Controller;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Setup_Wizard class.
 */
class Setup_Wizard extends WP_REST_Controller {
	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE . '/setupWizard';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/getStepData',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'get_step_data' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->get_step_args(),
			]
		);
		register_rest_route(
			$this->namespace,
			'/updateStepData',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'update_step_data' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->update_step_args(),
			]
		);
		register_rest_route(
			$this->namespace,
			'/updateTrackingOptin',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'update_tracking_optin' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
				'args'                => $this->tracking_optin_args(),
			]
		);
	}

	/**
	 * Get Current step data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return array View Data.
	 */
	public function get_step_data( WP_REST_Request $request ) {
		$step = $request->get_param( 'step' );

		// Track step change.
		do_action( 'rank_math/setup_wizard/step_viewed', $step );

		return \RankMath\Admin\Setup_Wizard::get_localized_data( $step );
	}

	/**
	 * Update the step data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 */
	public function update_step_data( WP_REST_Request $request ) {
		$step   = $request->get_param( 'step' );
		$values = $request->get_param( 'value' );

		return \RankMath\Admin\Setup_Wizard::save_data( $step, $values );
	}

	/**
	 * Update tracking opt-in status.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return array Response data.
	 */
	public function update_tracking_optin( WP_REST_Request $request ) {
		$enable_tracking = $request->get_param( 'enable_tracking' );
		do_action( 'rank_math/setup_wizard/enable_tracking', $enable_tracking === 'on' );

		return [
			'success' => true,
			'status'  => 200,
		];
	}

	/**
	 * Get step endpoint arguments.
	 *
	 * @return array
	 */
	private function get_step_args() {
		return [
			'step' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Current Step', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Update step data endpoint arguments.
	 *
	 * @return array
	 */
	private function update_step_args() {
		return [
			'step'  => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Current Step', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
			'value' => [
				'type'              => 'object',
				'required'          => true,
				'description'       => esc_html__( 'Current Step Data', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}

	/**
	 * Tracking opt-in endpoint arguments.
	 *
	 * @return array
	 */
	private function tracking_optin_args() {
		return [
			'enable_tracking' => [
				'type'              => 'string',
				'required'          => true,
				'description'       => esc_html__( 'Enable Tracking', 'seo-by-rank-math' ),
				'sanitize_callback' => 'rest_sanitize_request_arg',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];
	}
}
PK     –ŠU]nÄÙùR  R  #  includes/rest/class-rest-helper.phpnu „[µü¤        <?php
/**
 * REST api helper.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_Error;
use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Rest_Helper class.
 */
class Rest_Helper {

	/**
	 * REST namespace.
	 *
	 * @var string
	 */
	const BASE = 'rankmath/v1';

	/**
	 * Determines if the current user can manage options.
	 *
	 * @return true
	 */
	public static function can_manage_options() {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Checks whether a given request has permission to update redirection.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_redirection_permissions_check() {
		if ( ! Helper::is_module_active( 'redirections' ) || ! Helper::has_cap( 'redirections' ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to create/update redirection.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Checks whether a given request has permission to update schema.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_schema_permissions_check( $request ) {
		if ( ! Helper::is_module_active( 'rich-snippet' ) || ! Helper::has_cap( 'onpage_snippet' ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to create/update schema.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return self::get_object_permissions_check( $request );
	}

	/**
	 * Checks whether a given request has permission to read types.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_object_permissions_check( $request ) {
		$object_id   = $request->get_param( 'objectID' );
		$object_type = $request->get_param( 'objectType' );

		if ( in_array( $object_type, [ 'post', 'term', 'user' ], true ) ) {
			$method = "get_{$object_type}_permissions_check";
			return self::$method( $request );
		}

		return false;
	}

	/**
	 * Checks whether a given request has permission to read post.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_post_permissions_check( $request ) {
		$object_id = $request->get_param( 'objectID' );
		if ( $object_id === 0 ) {
			if ( ! Helper::has_cap( 'titles' ) ) {
				return new WP_Error(
					'rest_cannot_edit',
					__( 'Sorry, you are not allowed to edit homepage SEO settings.', 'seo-by-rank-math' ),
					[ 'status' => rest_authorization_required_code() ]
				);
			}
			return true;
		}

		$post = self::get_post( $object_id );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( ! Helper::is_post_type_accessible( $post->post_type ) && 'rank_math_schema' !== $post->post_type ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this post type.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		$post_type = get_post_type_object( $post->post_type );

		if (
			current_user_can( $post_type->cap->edit_post, $post->ID ) ||
			current_user_can( $post_type->cap->edit_others_posts )
		) {
			return true;
		}

		return new WP_Error(
			'rest_cannot_edit',
			__( 'Sorry, you are not allowed to edit this post.', 'seo-by-rank-math' ),
			[ 'status' => rest_authorization_required_code() ]
		);
	}

	/**
	 * Get the post, if the ID is valid.
	 *
	 * @param int $id Supplied ID.
	 *
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	public static function get_post( $id ) {
		$error = new WP_Error(
			'rest_post_invalid_id',
			__( 'Invalid post ID.', 'seo-by-rank-math' ),
			[ 'status' => 404 ]
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$post = get_post( (int) $id );
		if ( empty( $post ) || empty( $post->ID ) ) {
			return $error;
		}

		return $post;
	}

	/**
	 * Checks whether a given request has permission to read term.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_term_permissions_check( $request ) {
		$term_id = $request->get_param( 'objectID' );
		$term    = self::get_term( $term_id );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if (
			! in_array( $term->taxonomy, array_keys( Helper::get_accessible_taxonomies() ), true ) ||
			! current_user_can( get_taxonomy( $term->taxonomy )->cap->edit_terms, $term_id )
		) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this term.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Get the term, if the ID is valid.
	 *
	 * @param int $id Supplied ID.
	 *
	 * @return WP_Term|WP_Error Term object if ID is valid, WP_Error otherwise.
	 */
	public static function get_term( $id ) {
		$error = new WP_Error(
			'rest_term_invalid_id',
			__( 'Invalid term ID.', 'seo-by-rank-math' ),
			[ 'status' => 404 ]
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		global $wpdb;
		$term = DB_Helper::get_row( $wpdb->prepare( "SELECT t.* FROM $wpdb->term_taxonomy AS t WHERE t.term_id = %d LIMIT 1", $id ) );
		if ( empty( $term ) || empty( $term->term_id ) ) {
			return $error;
		}

		return $term;
	}

	/**
	 * Checks whether a given request has permission to read user.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function get_user_permissions_check( $request ) {
		$user_id = $request->get_param( 'objectID' );
		return current_user_can( 'edit_user', $user_id ) && Helper::get_settings( 'titles.author_add_meta_box' );
	}

	/**
	 * Param emptiness validate callback.
	 *
	 * @param mixed $param Param to validate.
	 *
	 * @return boolean
	 */
	public static function is_param_empty( $param ) {
		if ( empty( $param ) ) {
			return new WP_Error(
				'param_value_empty',
				esc_html__( 'Sorry, field is empty which is not allowed.', 'seo-by-rank-math' )
			);
		}
		return true;
	}

	/**
	 * Checks whether a given request has permission to update settings.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public static function can_manage_settings( $request ) {
		$type = $request->get_param( 'type' );
		$type = $type === 'instant-indexing' ? 'general' : $type;
		return $type === 'roleCapabilities' ? current_user_can( 'rank_math_role_manager' ) : current_user_can( "rank_math_$type" );
	}

	/**
	 * Param emptiness validate callback.
	 *
	 * @param mixed $param Param to validate.
	 *
	 * @return boolean
	 */
	public static function is_valid_string( $param ) {
		if ( empty( $param ) ) {
			return new WP_Error(
				'param_value_empty',
				esc_html__( 'Sorry, field is empty which is not allowed.', 'seo-by-rank-math' )
			);
		}

		return self::is_alphanumerical( $param );
	}

	/**
	 * Check the alphanumerical string.
	 *
	 * @param mixed $param Param to validate.
	 *
	 * @return boolean
	 */
	public static function is_alphanumerical( $param ) {
		if ( ! preg_match( '/^[a-zA-Z0-9]+$/', $param ) ) {
			return new WP_Error(
				'param_value_empty',
				esc_html__( 'Sorry, the field contains invalid characters.', 'seo-by-rank-math' )
			);
		}
		return true;
	}
}
PK     –ŠU]À}f       includes/rest/class-headless.phpnu „[µü¤        <?php
/**
 * Add support for headless WP.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Rest;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Controller;
use RankMath\Helpers\Url;
use RankMath\Helper;
use RankMath\Frontend\Frontend;

defined( 'ABSPATH' ) || exit;

/**
 * Front class.
 */
class Headless extends WP_REST_Controller {

	/**
	 * Whether the request is for the homepage.
	 *
	 * @var boolean
	 */
	public $is_home = false;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE;
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		if ( ! Helper::get_settings( 'general.headless_support' ) ) {
			return;
		}

		register_rest_route(
			$this->namespace,
			'/getHead',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_head' ],
				'permission_callback' => '__return_true',
				'args'                => [
					'url' => [
						'type'              => 'string',
						'required'          => true,
						'description'       => esc_html__( 'URL to get HTML tags for.', 'seo-by-rank-math' ),
						'validate_callback' => [ $this, 'is_valid_url' ],
					],
				],
			]
		);
	}

	/**
	 * Get all tags that go in the <head>. Useful for headless WP installations.
	 *
	 * @param WP_REST_Request $request Request object, should include the "url" parameter.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_head( WP_REST_Request $request ) {
		$resp = new WP_REST_Response();
		$url  = $request->get_param( 'url' );

		$html = $this->get_html_head( $url );

		$resp->set_status( 200 );
		$resp->set_data(
			[
				'success' => true,
				'head'    => $html,

			]
		);
		return $resp;
	}

	/**
	 * Return Rank Math head HTML output for the given URL.
	 *
	 * @param  string $url Request URL.
	 *
	 * @return string
	 */
	private function get_html_head( $url ) {
		$this->setup_post_head( $url );

		ob_start();
		do_action( 'wp' );
		do_action( 'rank_math/head' );
		return ob_get_clean();
	}

	/**
	 * Prepare head output for a URL.
	 *
	 * @param string $url Request URL.
	 *
	 * @return void
	 */
	private function setup_post_head( $url ) {
		// Setup WordPress.
		$_SERVER['REQUEST_URI'] = $this->generate_request_uri( $url );
		remove_all_actions( 'wp' );
		remove_all_actions( 'parse_request' );
		wp();

		if ( $this->is_home ) {
			$GLOBALS['wp_query']->is_home = true;
		}

		remove_filter( 'option_rewrite_rules', [ $this, 'fix_query_notice' ] );
		header( 'Content-Type: application/json; charset=UTF-8' );

		// Setup Rank Math.
		rank_math()->variables->setup();
		rank_math()->manager->load_modules();
		new Frontend();
	}

	/**
	 * Generate $_SERVER['REQUEST_URI'] value based on input URL.
	 *
	 * @param string $url Input URL.
	 * @return string
	 */
	public function generate_request_uri( $url ) {
		$quoted      = preg_quote( rtrim( home_url(), '/' ), '/' );
		$request_uri = preg_replace( sprintf( '/^%s/i', $quoted ), '', rtrim( $url, '/' ) );
		if ( empty( $request_uri ) ) {
			$request_uri   = '/';
			$this->is_home = true;
			$front_page_id = get_option( 'page_on_front' );
			if ( 'page' === get_option( 'show_on_front' ) && $front_page_id ) {
				$this->is_home = false;
				$request_uri   = get_post_field( 'post_name', $front_page_id );
			}

			add_filter( 'option_rewrite_rules', [ $this, 'fix_query_notice' ] );
		}

		return $request_uri;
	}

	/**
	 * Filter rewrite_rules to avoid a PHP notice.
	 *
	 * @param array $rules Original rules.
	 * @return array
	 */
	public function fix_query_notice( $rules ) {
		if ( ! is_array( $rules ) || isset( $rules['$'] ) ) {
			return $rules;
		}

		global $wp_rewrite;
		$rules['$'] = $wp_rewrite->index;
		return $rules;
	}

	/**
	 * Check if provided URL is valid and internal.
	 *
	 * @param string $url URL.
	 *
	 * @return boolean
	 */
	public function is_valid_url( $url ) {
		$url = preg_replace_callback(
			'/[^\x20-\x7f]/',
			function ( $matcher ) {
				return rawurlencode( $matcher[0] );
			},
			$url
		);

		return Url::is_url( $url ) && ! Url::is_external( $url );
	}
}
PK     –ŠU]ŒÛ        includes/settings/index.phpnu „[µü¤        <?php // Silence is golden.
PK     –ŠU]-N‹X  X  ,  includes/settings/general/rss-vars-table.phpnu „[µü¤        <?php
/**
 * The webmaster variable template.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

defined( 'ABSPATH' ) || exit;

?>
<div class="cmb-row rank-math-rss-variables rank-math-exclude-from-search">

	<h3><?php esc_html_e( 'Available variables', 'seo-by-rank-math' ); ?> </h3>

	<table class="wp-list-table widefat striped">
	<thead>
		<tr>
			<th scope="col"> <?php esc_html_e( 'Variable', 'seo-by-rank-math' ); ?></th>
			<th scope="col"><?php esc_html_e( 'Description', 'seo-by-rank-math' ); ?></th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>%AUTHORLINK%</td>
			<td><?php esc_html_e( 'A link to the archive for the post author, with the authors name as anchor text.', 'seo-by-rank-math' ); ?></td>
		</tr>
		<tr>
			<td>%POSTLINK%</td>
			<td><?php esc_html_e( 'A link to the post, with the title as anchor text.', 'seo-by-rank-math' ); ?></td>
		</tr>
		<tr>
			<td>%BLOGLINK%</td>
			<td><?php esc_html_e( "A link to your site, with your site's name as anchor text.", 'seo-by-rank-math' ); ?></td>
		</tr>
		<tr>
			<td>%BLOGDESCLINK%</td>
			<td><?php esc_html_e( "A link to your site, with your site's name and description as anchor text.", 'seo-by-rank-math' ); ?></td>
		</tr>
		<tr>
			<td>%FEATUREDIMAGE%</td>
			<td><?php esc_html_e( 'Featured image of the article.', 'seo-by-rank-math' ); ?></td>
		</tr>
	</tbody>
	</table>

</div>
PK     –ŠU]ŒÛ      #  includes/settings/general/index.phpnu „[µü¤        <?php // Silence is golden.
PK     –ŠU]$Adû  û  )  includes/settings/general/breadcrumbs.phpnu „[µü¤        <?php
/**
 * The breadcrumb settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$args = [
	'id'      => 'breadcrumbs',
	'type'    => 'toggle',
	'name'    => esc_html__( 'Enable breadcrumbs function', 'seo-by-rank-math' ),
	'desc'    => esc_html__( 'Turning off breadcrumbs will hide breadcrumbs inserted in template files too.', 'seo-by-rank-math' ),
	'default' => 'on',
];

if ( current_theme_supports( 'rank-math-breadcrumbs' ) ) {
	$args['force_enable'] = true;
	$args['disabled']     = true;
	$args['desc']         = sprintf(
		// Translators: Code to add support for Rank Math Breadcrumbs.
		esc_html__( 'This option cannot be changed since your theme has added the support for Rank Math Breadcrumbs using: %s', 'seo-by-rank-math' ),
		"<br /><code>add_theme_support( 'rank-math-breadcrumbs' );</code>"
	);
}
$cmb->add_field( $args );

$dependency = [ [ 'breadcrumbs', 'on' ] ];
$cmb->add_field(
	[
		'id'              => 'breadcrumbs_separator',
		'type'            => 'radio_inline',
		'name'            => esc_html__( 'Separator Character', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Separator character or string that appears between breadcrumb items.', 'seo-by-rank-math' ),
		'options'         => Helper::choices_separator( Helper::get_settings( 'general.breadcrumbs_separator' ) ),
		'default'         => '-',
		'dep'             => $dependency,
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_htmlentities' ],
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_home',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Show Homepage Link', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Display homepage breadcrumb in trail.', 'seo-by-rank-math' ) ),
		'default' => 'on',
		'dep'     => $dependency,
	]
);

$dependency_home   = [ 'relation' => 'and' ] + $dependency;
$dependency_home[] = [ 'breadcrumbs_home', 'on' ];
$cmb->add_field(
	[
		'id'      => 'breadcrumbs_home_label',
		'type'    => 'text',
		'name'    => esc_html__( 'Homepage label', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Label used for homepage link (first item) in breadcrumbs.', 'seo-by-rank-math' ),
		'default' => esc_html__( 'Home', 'seo-by-rank-math' ),
		'dep'     => $dependency_home,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_home_link',
		'type'    => 'text',
		'name'    => esc_html__( 'Homepage Link', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Link to use for homepage (first item) in breadcrumbs.', 'seo-by-rank-math' ),
		'default' => get_home_url(),
		'dep'     => $dependency_home,
	]
);

$cmb->add_field(
	[
		'id'   => 'breadcrumbs_prefix',
		'type' => 'text',
		'name' => esc_html__( 'Prefix Breadcrumb', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Prefix for the breadcrumb path.', 'seo-by-rank-math' ),
		'dep'  => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_archive_format',
		'type'    => 'text',
		'name'    => esc_html__( 'Archive Format', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Format the label used for archive pages.', 'seo-by-rank-math' ),
		/* translators: placeholder */
		'default' => esc_html__( 'Archives for %s', 'seo-by-rank-math' ),
		'dep'     => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_search_format',
		'type'    => 'text',
		'name'    => esc_html__( 'Search Results Format', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Format the label used for search results pages.', 'seo-by-rank-math' ),
		/* translators: placeholder */
		'default' => esc_html__( 'Results for %s', 'seo-by-rank-math' ),
		'dep'     => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_404_label',
		'type'    => 'text',
		'name'    => esc_html__( '404 label', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Label used for 404 error item in breadcrumbs.', 'seo-by-rank-math' ),
		'default' => esc_html__( '404 Error: page not found', 'seo-by-rank-math' ),
		'dep'     => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_remove_post_title',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Hide Post Title', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Hide Post title from Breadcrumb.', 'seo-by-rank-math' ) ),
		'default' => 'off',
		'dep'     => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_ancestor_categories',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Show Category(s)', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'If category is a child category, show all ancestor categories.', 'seo-by-rank-math' ),
		'default' => 'off',
		'dep'     => $dependency,
	]
);

$cmb->add_field(
	[
		'id'      => 'breadcrumbs_hide_taxonomy_name',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Hide Taxonomy Name', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Hide Taxonomy Name from Breadcrumb.', 'seo-by-rank-math' ) ),
		'default' => 'off',
		'dep'     => $dependency,
	]
);

if ( 'page' === get_option( 'show_on_front' ) && 0 < get_option( 'page_for_posts' ) ) {
	$cmb->add_field(
		[
			'id'      => 'breadcrumbs_blog_page',
			'type'    => 'toggle',
			'name'    => esc_html__( 'Show Blog Page', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Show Blog Page in Breadcrumb.', 'seo-by-rank-math' ),
			'default' => 'off',
			'dep'     => $dependency,
		]
	);
}
PK     –ŠU]fšO�½  ½  $  includes/settings/general/others.phpnu „[µü¤        <?php
/**
 * The misc settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\KB;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'headless_support',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Headless CMS Support', 'seo-by-rank-math' ),
		// Translators: placeholder is a link to "Read more".
		'desc'    => sprintf( esc_html__( 'Enable this option to register a REST API endpoint that returns the HTML meta tags for a given URL. %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'headless-support', 'Others Tab KB Link' ) . '">' . esc_html__( 'Read more', 'seo-by-rank-math' ) . '</a>' ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'      => 'frontend_seo_score',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Show SEO Score to Visitors', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Proudly display the calculated SEO Score as a badge on the front end. It can be disabled for specific posts in the post editor.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'         => 'frontend_seo_score_post_types',
		'type'       => 'multicheck',
		'name'       => esc_html__( 'SEO Score Post Types', 'seo-by-rank-math' ),
		'options'    => Helper::choices_post_types(),
		'default_cb' => '\\RankMath\\Frontend_SEO_Score::post_types_field_default',
		'dep'        => [ [ 'frontend_seo_score', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'frontend_seo_score_template',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'SEO Score Template', 'seo-by-rank-math' ),
		'desc'    => sprintf( esc_html__( 'Change the styling for the front end SEO score badge.', 'seo-by-rank-math' ), '<code>nofollow</code>' ),
		'options' => [
			'circle' => esc_html__( 'Circle', 'seo-by-rank-math' ),
			'square' => esc_html__( 'Square', 'seo-by-rank-math' ),
		],
		'default' => 'circle',
		'dep'     => [ [ 'frontend_seo_score', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'frontend_seo_score_position',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'SEO Score Position', 'seo-by-rank-math' ),
		'desc'    => sprintf(
			/* translators: 1.SEO Score Shortcode 2. SEO Score function */
			esc_html__( 'Display the badges automatically, or insert the %1$s shortcode in your posts and the %2$s template tag in your theme template files.', 'seo-by-rank-math' ),
			'<code>[rank_math_seo_score]</code>',
			'<code>&lt;?php&nbsp;rank_math_the_seo_score();&nbsp;?&gt;</code>'
		),
		'classes' => 'nob',
		'default' => 'top',
		'options' => [
			'bottom' => esc_html__( 'Below Content', 'seo-by-rank-math' ),
			'top'    => esc_html__( 'Above Content', 'seo-by-rank-math' ),
			'both'   => esc_html__( 'Above & Below Content', 'seo-by-rank-math' ),
			'custom' => esc_html__( 'Custom (use shortcode)', 'seo-by-rank-math' ),
		],
		'dep'     => [ [ 'frontend_seo_score', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'support_rank_math',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Support Us with a Link', 'seo-by-rank-math' ),
		/* Translators: %s is the word "nofollow" code tag and second one for the filter link */
		'desc'    => sprintf( esc_html__( 'If you are showing the SEO scores on the front end, this option will insert a %1$s backlink to RankMath.com to show your support. You can change the link & the text by using this %2$s.', 'seo-by-rank-math' ), '<code>follow</code>', '<a href="' . KB::get( 'change-seo-score-backlink', 'Options Panel Support Us' ) . '" target="_blank">' . __( 'filter', 'seo-by-rank-math' ) . '</a>' ),
		'default' => 'on',
		'dep'     => [ [ 'frontend_seo_score', 'on' ] ],
	]
);

if ( current_user_can( 'manage_options' ) ) {
	$cmb->add_field(
		[
			'id'         => 'usage_tracking',
			'type'       => 'toggle',
			'name'       => esc_html__( 'Usage Tracking', 'seo-by-rank-math' ),
			'desc'       => esc_html__( 'Share anonymous usage data to help us improve Rank Math. No personal info is collected.', 'seo-by-rank-math' ) . ' <a href="' . KB::get( 'usage-policy', 'Others Tab KB Link' ) . '" target="_blank">' . esc_html__( 'Learn more about what data is and isn\'t tracked.', 'seo-by-rank-math' ) . '</a>',
			'default'    => 'off',
			'save_field' => false,
			'escape_cb'  => function () {
				return get_option( 'rank_math_mixpanel_optin', false ) ? 'on' : 'off';
			},
		]
	);
}

$cmb->add_field(
	[
		'id'   => 'rss_before_content',
		'type' => 'textarea_small',
		'name' => esc_html__( 'RSS Before Content', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Add content before each post in your site feeds.', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'rss_after_content',
		'type' => 'textarea_small',
		'name' => esc_html__( 'RSS After Content', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Add content after each post in your site feeds.', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'rank_math_rss_vars',
		'type' => 'raw',
		'file' => rank_math()->includes_dir() . 'settings/general/rss-vars-table.php',
	]
);
PK     –ŠU]Ìû~¸    #  includes/settings/general/links.phpnu „[µü¤        <?php
/**
 * The images settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;
use RankMath\KB;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'strip_category_base',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Strip Category Base', 'seo-by-rank-math' ),
		/* translators: Link to kb article */
		'desc'    => sprintf( wp_kses_post( __( 'Remove /category/ from category archive URLs. %s <br>E.g. <code>example.com/category/my-category/</code> becomes <code>example.com/my-category</code>', 'seo-by-rank-math' ) ), '<a href="' . KB::get( 'remove-category-base', 'Options Panel Strip Category Base' ) . '" target="_blank">' . esc_html__( 'Why do this?', 'seo-by-rank-math' ) . '</a>' ),
		'classes' => 'rank-math-advanced-option',
		'default' => 'off',
	]
);

$redirection_message = Helper::is_module_active( 'redirections' ) ?
	/* translators: Redirection page url */
	' <a href="' . Helper::get_admin_url( 'options-general#setting-panel-redirections' ) . '" target="new">' . esc_html__( 'Redirection Manager', 'seo-by-rank-math' ) . '</a>' :
	'<span class="rank-math-tooltip">' . esc_html__( 'Redirections Manager', 'seo-by-rank-math' ) . '<span>' . esc_html__( 'Please enable Redirections module.', 'seo-by-rank-math' ) . '</span></span>';


$cmb->add_field(
	[
		'id'      => 'attachment_redirect_urls',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Redirect Attachments', 'seo-by-rank-math' ),
		/* translators: Link to kb article */
		'desc'    => sprintf( wp_kses_post( __( 'Redirect all attachment page URLs to the post they appear in. For more advanced redirection control, use the built-in %s.', 'seo-by-rank-math' ) ), $redirection_message ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'attachment_redirect_default',
		'type'    => 'text',
		'name'    => esc_html__( 'Redirect Orphan Attachments', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Redirect attachments without a parent post to this URL. Leave empty for no redirection.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
		'dep'     => [ [ 'attachment_redirect_urls', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'nofollow_external_links',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Nofollow External Links', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Automatically add <code>rel="nofollow"</code> attribute for external links appearing in your posts, pages, and other post types. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.', 'seo-by-rank-math' ) ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'nofollow_image_links',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Nofollow Image File Links', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Automatically add <code>rel="nofollow"</code> attribute for links pointing to external image files. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.', 'seo-by-rank-math' ) ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'nofollow_domains',
		'type'    => 'textarea_small',
		'name'    => esc_html__( 'Nofollow Domains', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Only add <code>nofollow</code> attribute for the link if target domain is in this list. Add one per line. Leave empty to apply nofollow for <strong>ALL</strong> external domains.', 'seo-by-rank-math' ) ),
		'classes' => 'rank-math-advanced-option',
		'dep'     => [
			[ 'nofollow_external_links', 'on' ],
			[ 'nofollow_image_links', 'on' ],
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'nofollow_exclude_domains',
		'type'    => 'textarea_small',
		'name'    => esc_html__( 'Nofollow Exclude Domains', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'The <code>nofollow</code> attribute <strong>will not be added</strong> for the link if target domain is in this list. Add one per line.', 'seo-by-rank-math' ) ),
		'classes' => 'rank-math-advanced-option',
		'dep'     => [
			[ 'nofollow_external_links', 'on' ],
			[ 'nofollow_image_links', 'on' ],
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'new_window_external_links',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Open External Links in New Tab/Window', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Automatically add <code>target="_blank"</code> attribute for external links appearing in your posts, pages, and other post types to make them open in a new browser tab or window. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.', 'seo-by-rank-math' ) ),
		'default' => 'on',
	]
);
PK     –ŠU]rP•ÑH  H  &  includes/settings/general/htaccess.phpnu „[µü¤        <?php
/**
 * The htaccess settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Admin\Admin_Helper;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$data = Admin_Helper::get_htaccess_data();

if ( false === $data ) {
	$cmb->add_field(
		[
			'id'      => 'htaccess_not_found',
			'type'    => 'notice',
			'what'    => 'error',
			'content' => esc_html__( '.htaccess file not found.', 'seo-by-rank-math' ),
		]
	);
	return;
}

$attrs = [
	'value'      => $data['content'],
	'readonly'   => 'readonly',
	'data-gramm' => 'false',
];

if ( ! $data['writable'] || ! Helper::is_edit_allowed() ) {
	$cmb->add_field(
		[
			'id'      => 'htaccess_not_writable',
			'type'    => 'notice',
			'what'    => 'error',
			'content' => esc_html__( '.htaccess file is not writable.', 'seo-by-rank-math' ),
		]
	);
} else {

	$consent_checkbox = '<br><br><label><input type="checkbox" name="htaccess_accept_changes" id="htaccess_accept_changes" value="1"> <strong>' . esc_html__( 'I understand the risks and I want to edit the file', 'seo-by-rank-math' ) . '</strong></label>';

	$cmb->add_field(
		[
			'id'      => 'htaccess_accept_changes',
			'type'    => 'notice',
			'what'    => 'error',
			'content' => wp_kses_post( __( 'Be careful when editing the htaccess file, it is easy to make mistakes and break your site. If that happens, you can restore the file to its state <strong>before the last edit</strong> by replacing the htaccess file with the backup copy created by Rank Math in the same directory (<em>.htaccess_back_xxxxxx</em>) using an FTP client.', 'seo-by-rank-math' ) ) . $consent_checkbox,
			'classes' => 'rank-math-notice',
		]
	);
}
$cmb->add_field(
	[
		'id'         => 'htaccess_content',
		'type'       => 'textarea',
		'classes'    => 'rank-math-code-box',
		'save_field' => false,
		'attributes' => $attrs,
	]
);
PK     –ŠU]‹rÌ¼P  P  '  includes/settings/general/webmaster.phpnu „[µü¤        <?php
/**
 * The webmaster settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

defined( 'ABSPATH' ) || exit;

use RankMath\KB;

$cmb->add_field(
	[
		'id'              => 'google_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Google Search Console', 'seo-by-rank-math' ),
		/* translators: Google Search Console Link */
		'desc'            => sprintf( esc_html__( 'Enter your Google Search Console verification HTML code or ID. Learn how to get it: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'google-verification-kb', 'Google Verification Tool' ) . '" target="_blank">' . esc_html__( 'Search Console Verification Page', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name="google-site-verification" content="your-id" />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'bing_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Bing Webmaster Tools', 'seo-by-rank-math' ),
		/* translators: Bing webmaster link */
		'desc'            => sprintf( esc_html__( 'Enter your Bing Webmaster Tools verification HTML code or ID. Get it here: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'bing-verification-kb', 'Bing Verification Tool' ) . '" target="_blank">' . esc_html__( 'Bing Webmaster Verification Page', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name="msvalidate.01" content="your-id" />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'baidu_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Baidu Webmaster Tools', 'seo-by-rank-math' ),
		/* translators: Baidu webmaster link */
		'desc'            => sprintf( esc_html__( 'Enter your Baidu Webmaster Tools verification HTML code or ID. Learn how to get it: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'baidu-verification-kb', 'Baidu Verification Tool' ) . '" target="_blank">' . esc_html__( 'Baidu Webmaster Tools', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name="baidu-site-verification" content="your-id" />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'yandex_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Yandex Verification ID', 'seo-by-rank-math' ),
		/* translators: Yandex webmaster link */
		'desc'            => sprintf( esc_html__( 'Enter your Yandex verification HTML code or ID. Learn how to get it: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'yandex-verification-kb', 'Yandex Verification Tool' ) . '" target="_blank">' . esc_html__( 'Yandex.Webmaster Page', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name=\'yandex-verification\' content=\'your-id\' />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'              => 'pinterest_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Pinterest Verification ID', 'seo-by-rank-math' ),
		/* translators: Pinterest webmaster link */
		'desc'            => sprintf( esc_html__( 'Enter your Pinterest verification HTML code or ID. Learn how to get it: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'pinterest-verification-kb', 'Pinterest Verification Tool' ) . '" target="_blank">' . esc_html__( 'Pinterest Account', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name="p:domain_verify" content="your-id" />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'norton_verify',
		'type'            => 'text',
		'name'            => esc_html__( 'Norton Safe Web Verification ID', 'seo-by-rank-math' ),
		/* translators: Norton webmaster link */
		'desc'            => sprintf( esc_html__( 'Enter your Norton Safe Web verification HTML code or ID. Learn how to get it: %s', 'seo-by-rank-math' ), '<a href="' . KB::get( 'norton-verification-kb', 'Norton Verification Tool' ) . '" target="_blank">' . esc_html__( 'Norton Ownership Verification Page', 'seo-by-rank-math' ) . '</a>' ) .
			'<br><code>' . htmlspecialchars( '<meta name="norton-safeweb-site-verification" content="your-id" />' ) . '</code>',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_webmaster_tags' ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'              => 'custom_webmaster_tags',
		'type'            => 'textarea',
		'name'            => esc_html__( 'Custom Webmaster Tags', 'seo-by-rank-math' ),
		'desc'            => sprintf(
			/* translators: %s: Allowed tags */
			esc_html__( 'Enter your custom webmaster tags. Only %s tags are allowed.', 'seo-by-rank-math' ),
			'<code>&lt;meta&gt;</code>'
		),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_custom_webmaster_tags' ],
		'classes'         => 'rank-math-advanced-option',
	]
);
PK     –ŠU]©ÿ  ÿ  "  includes/settings/titles/local.phpnu „[µü¤        <?php
/**
 * The local SEO settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Local_Seo
 */

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_type',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Person or Company', 'seo-by-rank-math' ),
		'options' => [
			'person'  => esc_html__( 'Person', 'seo-by-rank-math' ),
			'company' => esc_html__( 'Organization', 'seo-by-rank-math' ),
		],
		'desc'    => esc_html__( 'Choose whether the site represents a person or an organization.', 'seo-by-rank-math' ),
		'default' => 'person',
	]
);

$cmb->add_field(
	[
		'id'      => 'website_name',
		'type'    => 'text',
		'name'    => esc_html__( 'Website Name', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enter the name of your site to appear in search results.', 'seo-by-rank-math' ),
		'default' => get_bloginfo( 'name' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'website_alternate_name',
		'type' => 'text',
		'name' => esc_html__( 'Website Alternate Name', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'An alternate version of your site name (for example, an acronym or shorter name).', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_name',
		'type'    => 'text',
		'name'    => esc_html__( 'Person/Organization Name', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Your name or company name intended to feature in Google\'s Knowledge Panel.', 'seo-by-rank-math' ),
		'default' => get_bloginfo( 'name' ),
	]
);

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_logo',
		'type'    => 'file',
		'name'    => esc_html__( 'Logo', 'seo-by-rank-math' ),
		'desc'    => __( '<strong>Min Size: 112Î§112px</strong>.<br /> A squared image is preferred by the search engines.', 'seo-by-rank-math' ),
		'options' => [ 'url' => false ],
	]
);

$cmb->add_field(
	[
		'id'      => 'url',
		'type'    => 'text',
		'name'    => esc_html__( 'URL', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'URL of the item.', 'seo-by-rank-math' ),
		'default' => home_url(),
	]
);
PK     –ŠU]’‰¯T  T  %  includes/settings/titles/homepage.phpnu „[µü¤        <?php
/**
 * The homepage/frontpage settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

if ( 'page' === get_option( 'show_on_front' ) ) {
	$home_page_id = get_option( 'page_on_front' );
	if ( ! $home_page_id ) {
		$home_page_id = get_option( 'page_for_posts' );
	}

	$cmb->add_field(
		[
			'id'      => 'static_homepage_notice',
			'type'    => 'notice',
			'what'    => 'warning',
			'content' => sprintf(
				/* translators: something */
				esc_html__( 'Static page is set as the front page (WP Dashboard > Settings > Reading). To add SEO title, description, and meta for the homepage, please click here: %s', 'seo-by-rank-math' ),
				'<a href="' . admin_url( 'post.php?post=' . $home_page_id . '&action=edit' ) . '">' . esc_html__( 'Edit Page: ', 'seo-by-rank-math' ) . get_the_title( $home_page_id ) . '</a>'
			),
		]
	);
	return;
}

$cmb->add_field(
	[
		'id'              => 'homepage_title',
		'type'            => 'text',
		'name'            => esc_html__( 'Homepage Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Homepage title tag.', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title',
		'default'         => '%sitename% %page% %sep% %sitedesc%',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'homepage_description',
		'type'       => 'textarea_small',
		'name'       => esc_html__( 'Homepage Meta Description', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Homepage meta description.', 'seo-by-rank-math' ),
		'classes'    => 'rank-math-supports-variables rank-math-description',
		'attributes' => [
			'class'                  => 'cmb2_textarea wp-exclude-emoji',
			'data-gramm'             => 'false',
			'rows'                   => 2,
			'data-exclude-variables' => 'seo_title,seo_description',
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'homepage_custom_robots',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Homepage Robots Meta', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Select custom robots meta for homepage, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab.', 'seo-by-rank-math' ) ),
		'options' => [
			'off' => esc_html__( 'Default', 'seo-by-rank-math' ),
			'on'  => esc_html__( 'Custom', 'seo-by-rank-math' ),
		],
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'                => 'homepage_robots',
		'type'              => 'multicheck',
		'name'              => esc_html__( 'Homepage Robots Meta', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Custom values for robots meta tag on homepage.', 'seo-by-rank-math' ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'dep'               => [ [ 'homepage_custom_robots', 'on' ] ],
		'classes'           => 'rank-math-advanced-option rank-math-robots-data',
		'default'           => [ 'index' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'homepage_advanced_robots',
		'type'            => 'advanced_robots',
		'name'            => esc_html__( 'Homepage Advanced Robots', 'seo-by-rank-math' ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'dep'             => [ [ 'homepage_custom_robots', 'on' ] ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'homepage_facebook_title',
		'type'    => 'text',
		'name'    => esc_html__( 'Homepage Title for Facebook', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Title of your site when shared on Facebook, Twitter and other social networks.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'homepage_facebook_description',
		'type'    => 'textarea_small',
		'name'    => esc_html__( 'Homepage Description for Facebook', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Description of your site when shared on Facebook, Twitter and other social networks.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'   => 'homepage_facebook_image',
		'type' => 'file',
		'name' => esc_html__( 'Homepage Thumbnail for Facebook', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Image displayed when your homepage is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices.', 'seo-by-rank-math' ),
	]
);
PK     –ŠU]¦º�ñ1  1  #  includes/settings/titles/social.phpnu „[µü¤        <?php
/**
 * The social settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

defined( 'ABSPATH' ) || exit;

use RankMath\KB;

$cmb->add_field(
	[
		'id'   => 'social_url_facebook',
		'type' => 'text_url',
		'name' => esc_html__( 'Facebook Page URL', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Enter your complete Facebook page URL here. eg:', 'seo-by-rank-math' ) .
			'<br><code>' . htmlspecialchars( 'https://www.facebook.com/RankMath/' ) . '</code>',
	]
);

$cmb->add_field(
	[
		'id'   => 'facebook_author_urls',
		'type' => 'text_url',
		'name' => esc_html__( 'Facebook Authorship', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Insert personal Facebook profile URL to show Facebook Authorship when your articles are being shared on Facebook. eg:', 'seo-by-rank-math' ) .
			'<br><code>' . htmlspecialchars( 'https://www.facebook.com/zuck' ) . '</code>',
	]
);

$cmb->add_field(
	[
		'id'   => 'facebook_admin_id',
		'type' => 'text',
		'name' => esc_html__( 'Facebook Admin', 'seo-by-rank-math' ),
		/* translators: numeric user ID link */
		'desc' => sprintf( esc_html__( 'Enter %s. Use a comma to separate multiple IDs. Alternatively, you can enter an app ID below.', 'seo-by-rank-math' ), '<a href="https://lookup-id.com/?utm_campaign=Rank+Math" target="_blank">numeric user ID</a>' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'facebook_app_id',
		'type' => 'text',
		'name' => esc_html__( 'Facebook App', 'seo-by-rank-math' ),
		/* translators: numeric app ID link */
		'desc' => sprintf( esc_html__( 'Enter %s. Alternatively, you can enter a user ID above.', 'seo-by-rank-math' ), '<a href="https://developers.facebook.com/apps?utm_campaign=Rank+Math" target="_blank">numeric app ID</a>' ),
	]
);

$cmb->add_field(
	[
		'id'         => 'facebook_secret',
		'type'       => 'text',
		'name'       => esc_html__( 'Facebook Secret', 'seo-by-rank-math' ),
		/* translators: Learn more link */
		'desc'       => sprintf( esc_html__( 'Enter alphanumeric secret ID. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'create-facebook-app' ) . '" target="_blank">Learn more</a>' ),
		'attributes' => [ 'type' => 'password' ],
	]
);

$cmb->add_field(
	[
		'id'   => 'social_url_facebook',
		'type' => 'text_url',
		'name' => esc_html__( 'Facebook Page URL', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Enter your complete Facebook page URL here. eg:', 'seo-by-rank-math' ) .
			'<br><code>' . htmlspecialchars( 'https://www.facebook.com/RankMath/' ) . '</code>',
	]
);

$cmb->add_field(
	[
		'id'   => 'twitter_author_names',
		'type' => 'text',
		'name' => esc_html__( 'Twitter Username', 'seo-by-rank-math' ),
		'desc' => wp_kses_post( __( 'Enter the Twitter username of the author to add <code>twitter:creator</code> tag to posts. eg: <code>RankMathSEO</code>', 'seo-by-rank-math' ) ),
	]
);

$cmb->add_field(
	[
		'id'   => 'social_additional_profiles',
		'type' => 'textarea_small',
		'name' => esc_html__( 'Additional Profiles', 'seo-by-rank-math' ),
		'desc' => wp_kses_post( __( 'Additional Profiles to add in the <code>sameAs</code> Schema property.', 'seo-by-rank-math' ) ),
	]
);
PK     –ŠU]ŒÛ      "  includes/settings/titles/index.phpnu „[µü¤        <?php // Silence is golden.
PK     –ŠU]¤…Œ�  �  #  includes/settings/titles/global.phpnu „[µü¤        <?php
/**
 * The general settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'                => 'robots_global',
		'type'              => 'multicheck',
		'name'              => esc_html__( 'Robots Meta', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Default values for robots meta tag. These can be changed for individual posts, taxonomies, etc.', 'seo-by-rank-math' ),
		'options'           => Helper::choices_robots(),
		'default'           => [ 'index' ],
		'classes'           => 'rank-math-robots-data',
		'select_all_button' => false,
	]
);

$cmb->add_field(
	[
		'id'              => 'advanced_robots_global',
		'type'            => 'advanced_robots',
		'name'            => esc_html__( 'Advanced Robots Meta', 'seo-by-rank-math' ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'noindex_empty_taxonomies',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Noindex Empty Category and Tag Archives', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Setting empty archives to <code>noindex</code> is useful for avoiding indexation of thin content pages and dilution of page rank. As soon as a post is added, the page is updated to <code>index</code>.', 'seo-by-rank-math' ) ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'              => 'title_separator',
		'type'            => 'radio_inline',
		'name'            => esc_html__( 'Separator Character', 'seo-by-rank-math' ),
		'desc'            => wp_kses_post( __( 'You can use the separator character in titles by inserting <code>%separator%</code> or <code>%sep%</code> in the title fields.', 'seo-by-rank-math' ) ), // phpcs:ignore
		'options'         => Helper::choices_separator( Helper::get_settings( 'titles.title_separator' ) ),
		'default'         => '-',
		'attributes'      => [ 'data-preview' => 'title' ],
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_separator' ],
	]
);

if ( ! current_theme_supports( 'title-tag' ) ) {
	$cmb->add_field(
		[
			'id'      => 'rewrite_title',
			'type'    => 'toggle',
			'name'    => esc_html__( 'Rewrite Titles', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Your current theme doesn\'t support title-tag. Enable this option to rewrite page, post, category, search and archive page titles.', 'seo-by-rank-math' ),
			'default' => 'off',
		]
	);
}

$cmb->add_field(
	[
		'id'      => 'capitalize_titles',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Capitalize Titles', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Automatically capitalize the first character of each word in the titles.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'      => 'open_graph_image',
		'type'    => 'file',
		'name'    => esc_html__( 'OpenGraph Thumbnail', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'When a featured image or an OpenGraph Image is not set for individual posts/pages/CPTs, this image will be used as a fallback thumbnail when your post is shared on Facebook. The recommended image size is 1200 x 630 pixels.', 'seo-by-rank-math' ),
		'options' => [ 'url' => false ],
		'class'   => 'button-primary',
	]
);

$cmb->add_field(
	[
		'id'      => 'twitter_card_type',
		'type'    => 'select',
		'name'    => esc_html__( 'Twitter Card Type', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Card type selected when creating a new post. This will also be applied for posts without a card type selected.', 'seo-by-rank-math' ),
		'options' => [
			'summary_large_image' => esc_html__( 'Summary Card with Large Image', 'seo-by-rank-math' ),
			'summary_card'        => esc_html__( 'Summary Card', 'seo-by-rank-math' ),
		],
		'default' => 'summary_large_image',
		'classes' => 'rank-math-advanced-option',
	]
);
PK     –ŠU]9–k¯G  G  #  includes/settings/titles/author.phpnu „[µü¤        <?php
/**
 * The authors settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$dep = [ [ 'disable_author_archives', 'off' ] ];

$cmb->add_field(
	[
		'id'      => 'disable_author_archives',
		'type'    => 'switch',
		'name'    => esc_html__( 'Author Archives', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enables or disables Author Archives. If disabled, the Author Archives are redirected to your homepage. To avoid duplicate content issues, noindex author archives if you keep them enabled.', 'seo-by-rank-math' ),
		'options' => [
			'on'  => esc_html__( 'Disabled', 'seo-by-rank-math' ),
			'off' => esc_html__( 'Enabled', 'seo-by-rank-math' ),
		],
		'default' => $this->do_filter( 'settings/titles/disable_author_archives', 'off' ),
	]
);

$cmb->add_field(
	[
		'id'      => 'url_author_base',
		'type'    => 'text',
		'name'    => esc_html__( 'Author Base', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Change the <code>/author/</code> part in author archive URLs.', 'seo-by-rank-math' ) ),
		'default' => 'author',
		'dep'     => $dep,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'author_custom_robots',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Author Robots Meta', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Select custom robots meta for author page, such as <code>nofollow</code>, <code>noarchive</code>, etc. Otherwise the default meta will be used, as set in the Global Meta tab.', 'seo-by-rank-math' ) ),
		'options' => [
			'off' => esc_html__( 'Default', 'seo-by-rank-math' ),
			'on'  => esc_html__( 'Custom', 'seo-by-rank-math' ),
		],
		'default' => 'on',
		'dep'     => $dep,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'                => 'author_robots',
		'type'              => 'multicheck',
		/* translators: post type name */
		'name'              => esc_html__( 'Author Robots Meta', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Custom values for robots meta tag on author page.', 'seo-by-rank-math' ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'classes'           => 'rank-math-advanced-option rank-math-robots-data',
		'dep'               => [
			'relation' => 'and',
			[ 'author_custom_robots', 'on' ],
			[ 'disable_author_archives', 'off' ],
		],
	]
);

$cmb->add_field(
	[
		'id'              => 'author_advanced_robots',
		'type'            => 'advanced_robots',
		'name'            => esc_html__( 'Author Advanced Robots', 'seo-by-rank-math' ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'classes'         => 'rank-math-advanced-option',
		'dep'             => [
			'relation' => 'and',
			[ 'author_custom_robots', 'on' ],
			[ 'disable_author_archives', 'off' ],
		],
	]
);

$cmb->add_field(
	[
		'id'              => 'author_archive_title',
		'type'            => 'text',
		'name'            => esc_html__( 'Author Archive Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Title tag on author archives. SEO options for specific authors can be set with the meta box available in the user profiles.', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title rank-math-advanced-option',
		'default'         => '%name% %sep% %sitename% %page%',
		'dep'             => $dep,
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'author_archive_description',
		'type'       => 'textarea_small',
		'name'       => esc_html__( 'Author Archive Description', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Author archive meta description. SEO options for specific author archives can be set with the meta box in the user profiles.', 'seo-by-rank-math' ),
		'classes'    => 'rank-math-supports-variables rank-math-description rank-math-advanced-option',
		'dep'        => $dep,
		'attributes' => [
			'class'                  => 'cmb2-textarea-small wp-exclude-emoji',
			'data-gramm'             => 'false',
			'rows'                   => 2,
			'data-exclude-variables' => 'seo_title,seo_description',
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'author_slack_enhanced_sharing',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Slack Enhanced Sharing', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'When the option is enabled and an author archive is shared on Slack, additional information will be shown (name & total number of posts).', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
		'dep'     => $dep,
	]
);

$cmb->add_field(
	[
		'id'      => 'author_add_meta_box',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Add SEO Controls', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Add SEO Controls for user profile pages. Access to the Meta Box can be fine tuned with code, using a special filter hook.', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
		'dep'     => $dep,
	]
);
PK     –ŠU]ßö  ö  '  includes/settings/titles/taxonomies.phpnu „[µü¤        <?php
/**
 * The taxonomies settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$taxonomy_name = $tab['taxonomy'];
$taxonomy_obj  = get_taxonomy( $taxonomy_name );
$name          = $taxonomy_obj->labels->singular_name;

$metabox_default        = 'off';
$custom_default         = 'off';
$remove_snippet_default = in_array( $taxonomy_name, [ 'product_cat', 'product_tag' ], true ) || substr( $taxonomy_name, 0, 3 ) === 'pa_' ? 'on' : 'off';

if ( 'category' === $taxonomy_name ) {
	$metabox_default = 'on';
	$custom_default  = 'off';
} elseif ( 'post_tag' === $taxonomy_name ) {
	$metabox_default = 'off';
	$custom_default  = 'on';
} elseif ( 'post_format' === $taxonomy_name ) {
	$custom_default = 'on';
}

$cmb->add_field(
	[
		'id'              => 'tax_' . $taxonomy_name . '_title',
		'type'            => 'text',
		/* translators: taxonomy name */
		'name'            => sprintf( esc_html__( '%s Archive Titles', 'seo-by-rank-math' ), $name ),
		/* translators: taxonomy name */
		'desc'            => sprintf( esc_html__( 'Title tag for %s archives', 'seo-by-rank-math' ), $name ),
		'classes'         => 'rank-math-supports-variables rank-math-title',
		'default'         => '%term% Archives %page% %sep% %sitename%',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'tax_' . $taxonomy_name . '_description',
		'type'       => 'textarea_small',
		/* translators: taxonomy name */
		'name'       => sprintf( esc_html__( '%s Archive Descriptions', 'seo-by-rank-math' ), $name ),
		/* translators: taxonomy name */
		'desc'       => sprintf( esc_html__( 'Description for %s archives', 'seo-by-rank-math' ), $name ),
		'classes'    => 'rank-math-supports-variables rank-math-description',
		'attributes' => [
			'class'                  => 'cmb2-textarea-small wp-exclude-emoji',
			'data-gramm'             => 'false',
			'rows'                   => 2,
			'data-exclude-variables' => 'seo_title,seo_description',
		],
		'default'    => '%term_description%',
	]
);

$cmb->add_field(
	[
		'id'      => 'tax_' . $taxonomy_name . '_custom_robots',
		'type'    => 'toggle',
		/* translators: taxonomy name */
		'name'    => sprintf( esc_html__( '%s Archives Robots Meta', 'seo-by-rank-math' ), $name ),
		/* translators: taxonomy name */
		'desc'    => sprintf( wp_kses_post( __( 'Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for %s archive pages. Otherwise the default meta will be used, as set in the Global Meta tab.', 'seo-by-rank-math' ) ), strtolower( $name ) ),
		'options' => [
			'off' => esc_html__( 'Default', 'seo-by-rank-math' ),
			'on'  => esc_html__( 'Custom', 'seo-by-rank-math' ),
		],
		'default' => $custom_default,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'                => 'tax_' . $taxonomy_name . '_robots',
		'type'              => 'multicheck',
		/* translators: taxonomy name */
		'name'              => sprintf( esc_html__( '%s Archives Robots Meta', 'seo-by-rank-math' ), $name ),
		/* translators: taxonomy name */
		'desc'              => sprintf( esc_html__( 'Custom values for robots meta tag on %s archives.', 'seo-by-rank-math' ), $name ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'dep'               => [ [ 'tax_' . $taxonomy_name . '_custom_robots', 'on' ] ],
		'classes'           => 'rank-math-advanced-option rank-math-robots-data',
		'default'           => [ 'index' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'tax_' . $taxonomy_name . '_advanced_robots',
		'type'            => 'advanced_robots',
		/* translators: taxonomy name */
		'name'            => sprintf( esc_html__( '%s Archives Advanced Robots Meta', 'seo-by-rank-math' ), $name ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'dep'             => [ [ 'tax_' . $taxonomy_name . '_custom_robots', 'on' ] ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'tax_' . $taxonomy_name . '_slack_enhanced_sharing',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Slack Enhanced Sharing', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'When the option is enabled and a term from this taxonomy is shared on Slack, additional information will be shown (the total number of items with this term).', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'tax_' . $taxonomy_name . '_add_meta_box',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Add SEO Controls', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Add the SEO Controls for the term editor screen to customize SEO options for individual terms in this taxonomy.', 'seo-by-rank-math' ),
		'default' => $metabox_default,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'remove_' . $taxonomy_name . '_snippet_data',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Remove Snippet Data', 'seo-by-rank-math' ),
		/* translators: taxonomy name */
		'desc'    => sprintf( esc_html__( 'Remove schema data from %s.', 'seo-by-rank-math' ), $name ),
		'default' => $remove_snippet_default,
		'classes' => 'rank-math-advanced-option',
	]
);

if ( 'post_format' === $taxonomy_name ) {
	$cmb->remove_field( 'tax_' . $taxonomy_name . '_add_meta_box' );
	$cmb->remove_field( 'remove_' . $taxonomy_name . '_snippet_data' );
}
PK     –ŠU]R
ÓSD  SD  '  includes/settings/titles/post-types.phpnu „[µü¤        <?php
/**
 * The post type settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;
use RankMath\KB;

defined( 'ABSPATH' ) || exit;

$current_post_type = $tab['post_type'];
if ( 'attachment' === $current_post_type && Helper::get_settings( 'general.attachment_redirect_urls', true ) ) {
	$cmb->add_field(
		[
			'id'      => 'redirect_attachment_notice',
			'type'    => 'notice',
			'what'    => 'warning',
			/* translators: The settings page link */
			'content' => sprintf( __( 'To configure meta tags for your media attachment pages, you need to first %s to parent.', 'seo-by-rank-math' ), '<a href="' . esc_url( Helper::get_admin_url( 'options-general#setting-panel-links' ) ) . '">' . esc_html__( 'disable redirect attachments', 'seo-by-rank-math' ) . '</a>' ),
		]
	);
		return;
}

$post_type_obj = get_post_type_object( $current_post_type );
$name          = $post_type_obj->labels->singular_name;

$custom_default  = 'off';
$richsnp_default = [
	'post'    => 'article',
	'product' => 'product',
];

if ( 'post' === $current_post_type || 'page' === $current_post_type ) {
	$custom_default = 'off';
} elseif ( 'attachment' === $current_post_type ) {
	$custom_default = 'on';
}

$primary_taxonomy_hash = [
	'post'    => 'category',
	'product' => 'product_cat',
];

$is_stories_post_type = defined( 'WEBSTORIES_VERSION' ) && 'web-story' === $current_post_type;

// Translators: Post type name.
$slack_enhanced_sharing_description = sprintf( __( 'When the option is enabled and a %s is shared on Slack, additional information will be shown (estimated time to read and author).', 'seo-by-rank-math' ), $name );
if ( 'page' === $current_post_type ) {
	$slack_enhanced_sharing_description = __( 'When the option is enabled and a page is shared on Slack, additional information will be shown (estimated time to read).', 'seo-by-rank-math' );
} elseif ( 'product' === $current_post_type ) {
	$slack_enhanced_sharing_description = __( 'When the option is enabled and a product is shared on Slack, additional information will be shown (price & availability).', 'seo-by-rank-math' );
} elseif ( 'download' === $current_post_type ) {
	$slack_enhanced_sharing_description = __( 'When the option is enabled and a product is shared on Slack, additional information will be shown (price).', 'seo-by-rank-math' );
}

$cmb->add_field(
	[
		'id'              => 'pt_' . $current_post_type . '_title',
		'type'            => 'text',
		/* translators: post type name */
		'name'            => sprintf( esc_html__( 'Single %s Title', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'            => sprintf( esc_html__( 'Default title tag for single %s pages. This can be changed on a per-post basis on the post editor screen.', 'seo-by-rank-math' ), $name ),
		'classes'         => 'rank-math-supports-variables rank-math-title',
		'default'         => '%title% %page% %sep% %sitename%',
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'pt_' . $current_post_type . '_description',
		'type'       => 'textarea_small',
		/* translators: post type name */
		'name'       => sprintf( esc_html__( 'Single %s Description', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'       => sprintf( esc_html__( 'Default description for single %s pages. This can be changed on a per-post basis on the post editor screen.', 'seo-by-rank-math' ), $name ),
		'classes'    => 'rank-math-supports-variables rank-math-description',
		'default'    => '%excerpt%',
		'attributes' => [
			'class'                  => 'cmb2-textarea-small wp-exclude-emoji',
			'data-gramm'             => 'false',
			'rows'                   => 2,
			'data-exclude-variables' => 'seo_title,seo_description',
		],
	]
);

$cmb->add_field(
	[
		'id'              => 'pt_' . $current_post_type . '_archive_title',
		'type'            => 'text',
		/* translators: post type name */
		'name'            => sprintf( esc_html__( '%s Archive Title', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'            => sprintf( esc_html__( 'Title for %s archive pages.', 'seo-by-rank-math' ), $name ),
		'classes'         => 'rank-math-supports-variables rank-math-title',
		'default'         => '%title% %page% %sep% %sitename%',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'pt_' . $current_post_type . '_archive_description',
		'type'       => 'textarea_small',
		/* translators: post type name */
		'name'       => sprintf( esc_html__( '%s Archive Description', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'       => sprintf( esc_html__( 'Description for %s archive pages.', 'seo-by-rank-math' ), $name ),
		'classes'    => 'rank-math-supports-variables rank-math-description',
		'attributes' => [
			'data-exclude-variables' => 'seo_title,seo_description',
			'rows'                   => 2,
		],
	]
);

if ( ( class_exists( 'WooCommerce' ) && 'product' === $current_post_type ) || ( class_exists( 'Easy_Digital_Downloads' ) && 'download' === $current_post_type ) ) {

	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_default_rich_snippet',
			'type'    => 'radio_inline',
			'name'    => esc_html__( 'Schema Type', 'seo-by-rank-math' ),
			/* translators: link to title setting screen */
			'desc'    => __( 'Default rich snippet selected when creating a new product.', 'seo-by-rank-math' ),
			'options' => [
				'off'     => esc_html__( 'None', 'seo-by-rank-math' ),
				'product' => 'download' === $current_post_type ? esc_html__( 'EDD Product', 'seo-by-rank-math' ) : esc_html__( 'WooCommerce Product', 'seo-by-rank-math' ),
			],
			'default' => $this->do_filter( 'settings/snippet/type', 'product', $current_post_type ),
		]
	);

} else {

	$schema_types = Helper::choices_rich_snippet_types( esc_html__( 'None (Click here to set one)', 'seo-by-rank-math' ), $current_post_type );
	$field_type   = 'select';
	$attributes   = ! $is_stories_post_type ? [ 'data-s2' => '' ] : '';
	$default      = isset( $richsnp_default[ $current_post_type ] ) ? $richsnp_default[ $current_post_type ] : 'off';

	if ( 2 === count( $schema_types ) ) {
		$field_type = 'radio_inline';
		$attributes = '';
		$default    = array_key_last( $schema_types );
	}

	$cmb->add_field(
		[
			'id'         => 'pt_' . $current_post_type . '_default_rich_snippet',
			'type'       => $field_type,
			'name'       => esc_html__( 'Schema Type', 'seo-by-rank-math' ),
			'desc'       => sprintf(
				// Translators: %s is "Article" inside a <code> tag.
				esc_html__( 'Default rich snippet selected when creating a new post of this type. If %s is selected, it will be applied for all existing posts with no Schema selected.', 'seo-by-rank-math' ),
				'<code>' . esc_html_x( 'Article', 'Schema type name in a field description', 'seo-by-rank-math' ) . '</code>'
			),
			'options'    => $is_stories_post_type ? [
				'off'     => esc_html__( 'None', 'seo-by-rank-math' ),
				'article' => esc_html__( 'Article', 'seo-by-rank-math' ),
			] : $schema_types,
			'default'    => $this->do_filter( 'settings/snippet/type', $default, $current_post_type ),
			'attributes' => $attributes,
		]
	);

	// Common fields.
	$cmb->add_field(
		[
			'id'              => 'pt_' . $current_post_type . '_default_snippet_name',
			'type'            => 'text',
			'name'            => esc_html__( 'Headline', 'seo-by-rank-math' ),
			'dep'             => [ [ 'pt_' . $current_post_type . '_default_rich_snippet', 'off', '!=' ] ],
			'classes'         => 'rank-math-supports-variables rank-math-advanced-option',
			'default'         => '%seo_title%',
			'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		]
	);

	$cmb->add_field(
		[
			'id'         => 'pt_' . $current_post_type . '_default_snippet_desc',
			'type'       => 'textarea',
			'name'       => esc_html__( 'Description', 'seo-by-rank-math' ),
			'attributes' => [
				'class'           => 'cmb2_textarea wp-exclude-emoji',
				'rows'            => 3,
				'data-autoresize' => true,
			],
			'classes'    => 'rank-math-supports-variables rank-math-advanced-option',
			'default'    => '%seo_description%',
			'dep'        => [ [ 'pt_' . $current_post_type . '_default_rich_snippet', 'off,book,local', '!=' ] ],
		]
	);
}

// Article fields.
$article_dep = [ [ 'pt_' . $current_post_type . '_default_rich_snippet', 'article' ] ];
/* translators: Google article snippet doc link */
$article_desc = 'person' === Helper::get_settings( 'titles.knowledgegraph_type' ) ? '<div class="notice notice-warning inline rank-math-notice"><p>' . sprintf( __( 'Google does not allow Person as the Publisher for articles. Organization will be used instead. You can read more about this <a href="%s" target="_blank">here</a>.', 'seo-by-rank-math' ), KB::get( 'google-article-schema' ) ) . '</p></div>' : '';
$cmb->add_field(
	[
		'id'      => 'pt_' . $current_post_type . '_default_article_type',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Article Type', 'seo-by-rank-math' ),
		'options' => [
			'Article'     => esc_html__( 'Article', 'seo-by-rank-math' ),
			'BlogPosting' => esc_html__( 'Blog Post', 'seo-by-rank-math' ),
			'NewsArticle' => esc_html__( 'News Article', 'seo-by-rank-math' ),
		],
		'default' => $this->do_filter( 'settings/snippet/article_type', 'post' === $current_post_type ? 'BlogPosting' : 'Article', $current_post_type ),
		'desc'    => $article_desc,
		'dep'     => $article_dep,
	]
);

$cmb->add_field(
	[
		'id'      => 'pt_' . $current_post_type . '_custom_robots',
		'type'    => 'toggle',
		/* translators: post type name */
		'name'    => sprintf( esc_html__( '%s Robots Meta', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'    => sprintf( wp_kses_post( __( 'Select custom robots meta, such as <code>nofollow</code>, <code>noarchive</code>, etc. for single %s pages. Otherwise the default meta will be used, as set in the Global Meta tab.', 'seo-by-rank-math' ) ), $name ),
		'options' => [
			'off' => esc_html__( 'Default', 'seo-by-rank-math' ),
			'on'  => esc_html__( 'Custom', 'seo-by-rank-math' ),
		],
		'default' => $custom_default,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'                => 'pt_' . $current_post_type . '_robots',
		'type'              => 'multicheck',
		/* translators: post type name */
		'name'              => sprintf( esc_html__( '%s Robots Meta', 'seo-by-rank-math' ), $name ),
		/* translators: post type name */
		'desc'              => sprintf( esc_html__( 'Custom values for robots meta tag on %s.', 'seo-by-rank-math' ), $name ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'dep'               => [ [ 'pt_' . $current_post_type . '_custom_robots', 'on' ] ],
		'classes'           => 'rank-math-advanced-option rank-math-robots-data',
		'default'           => [ 'index' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'pt_' . $current_post_type . '_advanced_robots',
		'type'            => 'advanced_robots',
		/* translators: post type name */
		'name'            => sprintf( esc_html__( '%s Advanced Robots Meta', 'seo-by-rank-math' ), $name ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'dep'             => [ [ 'pt_' . $current_post_type . '_custom_robots', 'on' ] ],
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'pt_' . $current_post_type . '_link_suggestions',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Link Suggestions', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enable Link Suggestions meta box for this post type, along with the Pillar Content feature.', 'seo-by-rank-math' ),
		'default' => $this->do_filter( 'settings/titles/link_suggestions', 'on', $current_post_type ),
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'pt_' . $current_post_type . '_ls_use_fk',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Link Suggestion Titles', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Use the Focus Keyword as the default text for the links instead of the post titles.', 'seo-by-rank-math' ),
		'options' => [
			'titles'         => esc_html__( 'Titles', 'seo-by-rank-math' ),
			'focus_keywords' => esc_html__( 'Focus Keywords', 'seo-by-rank-math' ),
		],
		'default' => 'titles',
		'dep'     => [ [ 'pt_' . $current_post_type . '_link_suggestions', 'on' ] ],
		'classes' => 'rank-math-advanced-option',
	]
);

$taxonomies = Helper::get_object_taxonomies( $current_post_type );
if ( $taxonomies ) {
	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_primary_taxonomy',
			'type'    => 'select',
			'name'    => esc_html__( 'Primary Taxonomy', 'seo-by-rank-math' ),
			/* translators: post type name */
			'desc'    => sprintf( esc_html__( 'Choose which taxonomy you want to use with the Primary Term feature. This will also be the taxonomy shown in the Breadcrumbs when a single %1$s is being viewed.', 'seo-by-rank-math' ), $name ),
			'options' => $taxonomies,
			'default' => isset( $primary_taxonomy_hash[ $current_post_type ] ) ? $primary_taxonomy_hash[ $current_post_type ] : 'off',
			'classes' => 'rank-math-advanced-option',
		]
	);
}

$cmb->add_field(
	[
		'id'   => 'pt_' . $current_post_type . '_facebook_image',
		'type' => 'file',
		'name' => esc_html__( 'Thumbnail for Facebook', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Image displayed when your page is shared on Facebook and other social networks. Use images that are at least 1200 x 630 pixels for the best display on high resolution devices.', 'seo-by-rank-math' ),
	]
);

// Enable/Disable Metabox option.
if ( 'attachment' === $current_post_type ) {
	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_bulk_editing',
			'type'    => 'radio_inline',
			'name'    => esc_html__( 'Bulk Editing', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Add bulk editing columns to the post listing screen.', 'seo-by-rank-math' ),
			'options' => [
				'0'        => esc_html__( 'Disabled', 'seo-by-rank-math' ),
				'editing'  => esc_html__( 'Enabled', 'seo-by-rank-math' ),
				'readonly' => esc_html__( 'Read Only', 'seo-by-rank-math' ),
			],
			'default' => 'editing',
			'classes' => 'rank-math-advanced-option',
		]
	);
} else {
	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_slack_enhanced_sharing',
			'type'    => 'toggle',
			'name'    => esc_html__( 'Slack Enhanced Sharing', 'seo-by-rank-math' ),
			'desc'    => esc_html( $slack_enhanced_sharing_description ),
			'default' => in_array( $current_post_type, [ 'post', 'page', 'product', 'download' ], true ) ? 'on' : 'off',
			'classes' => 'rank-math-advanced-option',
		]
	);

	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_add_meta_box',
			'type'    => 'toggle',
			'name'    => esc_html__( 'Add SEO Controls', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Add SEO controls for the editor screen to customize SEO options for posts in this post type.', 'seo-by-rank-math' ),
			'default' => 'on',
			'classes' => 'rank-math-advanced-option',
		]
	);

	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_bulk_editing',
			'type'    => 'radio_inline',
			'name'    => esc_html__( 'Bulk Editing', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Add bulk editing columns to the post listing screen.', 'seo-by-rank-math' ),
			'options' => [
				'0'        => esc_html__( 'Disabled', 'seo-by-rank-math' ),
				'editing'  => esc_html__( 'Enabled', 'seo-by-rank-math' ),
				'readonly' => esc_html__( 'Read Only', 'seo-by-rank-math' ),
			],
			'default' => 'editing',
			'dep'     => [ [ 'pt_' . $current_post_type . '_add_meta_box', 'on' ] ],
			'classes' => 'rank-math-advanced-option',
		]
	);

	$cmb->add_field(
		[
			'id'      => 'pt_' . $current_post_type . '_analyze_fields',
			'type'    => 'textarea_small',
			'name'    => esc_html__( 'Custom Fields', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'List of custom fields name to include in the Page analysis. Add one per line.', 'seo-by-rank-math' ),
			'default' => '',
			'classes' => 'rank-math-advanced-option',
		]
	);
}

// Archive not enabled.
if ( ! $post_type_obj->has_archive ) {
	$cmb->remove_field( 'pt_' . $current_post_type . '_archive_title' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_archive_description' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_facebook_image' );
}

if ( 'attachment' === $current_post_type ) {
	$cmb->remove_field( 'pt_' . $current_post_type . '_link_suggestions' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_ls_use_fk' );
}

if ( $is_stories_post_type ) {
	$cmb->remove_field( 'pt_' . $current_post_type . '_default_snippet_desc' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_description' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_link_suggestions' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_ls_use_fk' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_analyze_fields' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_bulk_editing' );
	$cmb->remove_field( 'pt_' . $current_post_type . '_add_meta_box' );
}
PK     –ŠU]AuH#    !  includes/settings/titles/misc.phpnu „[µü¤        <?php
/**
 * The misc settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$dep = [ [ 'disable_date_archives', 'off' ] ];

$cmb->add_field(
	[
		'id'      => 'disable_date_archives',
		'type'    => 'switch',
		'name'    => esc_html__( 'Date Archives', 'seo-by-rank-math' ),
		'desc'    => sprintf(
			// Translators: placeholder is an example URL.
			esc_html__( 'Enable or disable the date archives (e.g: %s). If this option is disabled, the date archives will be redirected to the homepage.', 'seo-by-rank-math' ),
			'<code>domain.com/2019/06/</code>'
		),
		'options' => [
			'on'  => esc_html__( 'Disabled', 'seo-by-rank-math' ),
			'off' => esc_html__( 'Enabled', 'seo-by-rank-math' ),
		],
		'default' => 'on',
	]
);

$cmb->add_field(
	[
		'id'              => 'date_archive_title',
		'type'            => 'text',
		'name'            => esc_html__( 'Date Archive Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Title tag on day/month/year based archives.', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title rank-math-advanced-option',
		'default'         => '%date% %page% %sep% %sitename%',
		'dep'             => $dep,
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'date_archive_description',
		'type'       => 'textarea_small',
		'name'       => esc_html__( 'Date Archive Description', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Date archive description.', 'seo-by-rank-math' ),
		'classes'    => 'rank-math-supports-variables rank-math-description rank-math-advanced-option',
		'dep'        => $dep,
		'attributes' => [
			'class'                  => 'cmb2-textarea-small wp-exclude-emoji',
			'data-gramm'             => 'false',
			'rows'                   => 2,
			'data-exclude-variables' => 'seo_title,seo_description',
		],
	]
);

$cmb->add_field(
	[
		'id'                => 'date_archive_robots',
		'type'              => 'multicheck',
		/* translators: post type name */
		'name'              => esc_html__( 'Date Robots Meta', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Custom values for robots meta tag on date page.', 'seo-by-rank-math' ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'dep'               => $dep,
		'classes'           => 'rank-math-advanced-option rank-math-robots-data',
	]
);

$cmb->add_field(
	[
		'id'              => 'date_advanced_robots',
		'type'            => 'advanced_robots',
		'name'            => esc_html__( 'Date Advanced Robots', 'seo-by-rank-math' ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'dep'             => $dep,
		'classes'         => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'              => '404_title',
		'type'            => 'text',
		'name'            => esc_html__( '404 Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Title tag on 404 Not Found error page.', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title rank-math-advanced-option',
		'default'         => 'Page Not Found %sep% %sitename%',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'              => 'search_title',
		'type'            => 'text',
		'name'            => esc_html__( 'Search Results Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Title tag on search results page.', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title rank-math-advanced-option',
		'default'         => '%search_query% %page% %sep% %sitename%',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'      => 'noindex_search',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Noindex Search Results', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Prevent search results pages from getting indexed by search engines. Search results could be considered to be thin content and prone to duplicate content issues.', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'noindex_archive_subpages',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Noindex Subpages', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Prevent all paginated pages from getting indexed by search engines.', 'seo-by-rank-math' ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'noindex_paginated_pages',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Noindex Paginated Single Pages', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Prevent paginated pages of single pages and posts to show up in the search results. This also applies for the Blog page.', 'seo-by-rank-math' ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'noindex_password_protected',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Noindex Password Protected Pages', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Prevent password protected pages & posts from getting indexed by search engines.', 'seo-by-rank-math' ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);
PK     –ŠU];SË‹      includes/class-update-email.phpnu „[µü¤        <?php
/**
 * Code related to the update notification emails.
 *
 * @since      1.0.57
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\KB;
use RankMath\Traits\Hooker;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Common class.
 */
class Update_Email {

	use Hooker;

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->filter( 'pre_set_site_transient_update_plugins', 'maybe_send_update_notification_email', 130 );
	}

	/**
	 * Maybe send the update notification email to the administrator if the setting is turned on.
	 *
	 * @param mixed $transient update_plugins site transient value.
	 * @return mixed
	 */
	public function maybe_send_update_notification_email( $transient ) {
		if ( ! Helper::get_settings( 'general.update_notification_email' ) ) {
			return $transient;
		}

		$should_send = $this->do_filter( 'admin/should_send_update_notification', $this->should_send_email( $transient ), $transient );
		if ( ! $should_send ) {
			return $transient;
		}

		$to = get_site_option( 'admin_email' );

		// Translators: placeholder is the site title.
		$subject = __( '[%s] An update is available for Rank Math', 'seo-by-rank-math' );
		$subject = sprintf( $subject, wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) );

		$body   = [];
		$body[] = __( 'Hello,', 'seo-by-rank-math' ) . "\n";

		// Translators: placeholder is the site URL.
		$body[] = sprintf( __( 'This is an automated email to let you know that there is an update available for the Rank Math SEO plugin installed on: %s', 'seo-by-rank-math' ), get_home_url() ) . "\n";

		$products = $this->do_filter( 'admin/update_notification_products', $this->get_updatable_products( $transient ), $transient );
		$list     = $this->get_products_list( $products );
		$body[]   = $list;

		// Translators: placeholder is the new admin page URL.
		$body[] = sprintf( __( 'To ensure your site is always on the latest, most up-to-date version of Rank Math - we recommend logging into the admin area to update the plugin as soon as possible: %s', 'seo-by-rank-math' ), admin_url( 'update-core.php' ) ) . "\n";

		// Add a note about the support forums.
		$body[] = __( 'If you have any questions or experience any issues â€“ our support team is at your disposal:', 'seo-by-rank-math' );
		$body[] = __( 'https://support.rankmath.com/', 'seo-by-rank-math' );
		$body[] = "\n" . '-';
		$body[] = __( 'Rank Math Team', 'seo-by-rank-math' );

		$body = implode( "\n", $body );

		$headers = '';

		$email = compact( 'to', 'subject', 'body', 'headers' );
		$email = $this->do_filter( 'admin/update_notification_email', $email );

		$result = wp_mail( $email['to'], $email['subject'], $email['body'], $email['headers'] );

		$stored  = get_option( 'rank_math_update_notifications_sent', [] );
		$new_opt = $stored;
		foreach ( $products as $key => $value ) {
			$new_opt[ $key ] = $value;
		}
		update_option( 'rank_math_update_notifications_sent', $new_opt, false );

		return $transient;
	}

	/**
	 * Check if we should send an update email or not, based on the update_plugins transient value.
	 *
	 * @param mixed $transient Transient value.
	 * @return boolean
	 */
	public function should_send_email( $transient ) {
		// No need to send email if auto-update is enabled.
		if ( Helper::get_auto_update_setting() ) {
			return false;
		}

		if ( ! is_object( $transient )
			|| empty( $transient->response )
			|| empty( $transient->response['seo-by-rank-math/rank-math.php'] )
			|| empty( $transient->response['seo-by-rank-math/rank-math.php']->new_version )
		) {
			return false;
		}

		$new_version = $transient->response['seo-by-rank-math/rank-math.php']->new_version;

		// Now let's check if we've already sent this email.
		$sent = get_option( 'rank_math_update_notifications_sent', [ 'free' => [ 'new_version' => '1.0' ] ] );
		if ( ! isset( $sent['free'] ) ) {
			$sent['free'] = [ 'new_version' => '1.0' ];
		}
		if ( version_compare( $sent['free']['new_version'], $new_version, '>=' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Get list of updatable products and their data.
	 *
	 * @param mixed $transient The update_plugins transient value.
	 * @return array
	 */
	public function get_updatable_products( $transient ) {
		if ( ! $this->should_send_email( $transient ) ) {
			return [];
		}

		$old_version = rank_math()->version;
		$new_version = $transient->response['seo-by-rank-math/rank-math.php']->new_version;

		$products = [
			'free' => [
				'name'        => __( 'Rank Math Free', 'seo-by-rank-math' ),
				'old_version' => $old_version,
				'new_version' => $new_version,
				'changelog'   => KB::get( 'changelog-free', 'Changelog Update notification mail' ),
			],
		];

		return $products;
	}

	/**
	 * Turn products array into a human-readable list.
	 *
	 * @param array $products_array Products array.
	 * @return string
	 */
	public function get_products_list( $products_array ) {
		$list = '';

		foreach ( $products_array as $product_data ) {
			// Translators: placeholders are the old and new version numbers.
			$list .= sprintf( __( '%1$s: Old %2$s -> New %3$s | Changelog: %4$s', 'seo-by-rank-math' ), $product_data['name'], $product_data['old_version'], $product_data['new_version'], $product_data['changelog'] ) . "\n";
		}

		return $list;
	}
}
PK     –ŠU]sò1-  1-    includes/class-helper.phpnu „[µü¤        <?php
/**
 * Helper Functions.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Helpers\Api;
use RankMath\Helpers\Conditional;
use RankMath\Helpers\Choices;
use RankMath\Helpers\Post_Type;
use RankMath\Helpers\Options;
use RankMath\Helpers\Taxonomy;
use RankMath\Helpers\WordPress;
use RankMath\Helpers\Schema;
use RankMath\Helpers\Analytics;
use RankMath\Helpers\Content_AI;
use RankMath\Helpers\HTML;
use RankMath\Replace_Variables\Replacer;
use RankMath\Helpers\Param;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Helper class.
 */
class Helper {

	use Api;
	use Conditional;
	use Choices;
	use Post_Type;
	use Options;
	use Taxonomy;
	use WordPress;
	use Schema;
	use Analytics;
	use Content_AI;

	/**
	 * Replace `%variables%` with context-dependent value.
	 *
	 * @param string $content The string containing the %variables%.
	 * @param array  $args    Context object, can be post, taxonomy or term.
	 * @param array  $exclude Excluded variables won't be replaced.
	 *
	 * @return string
	 */
	public static function replace_vars( $content, $args = [], $exclude = [] ) {
		return ( new Replacer() )->replace( $content, $args, $exclude );
	}

	/**
	 * Replace `%variables%` with context-dependent value in SEO fields.
	 *
	 * @param string $content The string containing the %variables%.
	 * @param object $post    Context object, can be post, taxonomy or term.
	 *
	 * @return string
	 */
	public static function replace_seo_fields( $content, $post ) {
		if ( empty( $post ) || ! in_array( $content, [ '%seo_title%', '%seo_description%', '%url%' ], true ) ) {
			return self::replace_vars( $content, $post );
		}

		if ( '%seo_title%' === $content ) {
			$default = self::get_settings( "titles.pt_{$post->post_type}_title", '%title% %sep% %sitename%' );
			$title   = self::get_post_meta( 'title', $post->ID, $default );

			return self::replace_vars( $title, $post );
		}

		if ( '%seo_description%' === $content ) {
			$default = self::get_settings( "titles.pt_{$post->post_type}_description", '%excerpt%' );
			$desc    = self::get_post_meta( 'description', $post->ID, $default );

			return self::replace_vars( $desc, $post );
		}

		return self::get_post_meta( 'canonical', $post->ID, get_the_permalink( $post->ID ) );
	}

	/**
	 * Register extra %variables%. For developers.
	 *
	 * @codeCoverageIgnore
	 *
	 * @deprecated 1.0.34 Use rank_math_register_var_replacement()
	 * @see rank_math_register_var_replacement()
	 *
	 * @param  string $variable  Variable name, for example %custom%. '%' signs are optional.
	 * @param  mixed  $callback  Replacement callback. Should return value, not output it.
	 * @param  array  $args      Array with additional title, description and example values for the variable.
	 *
	 * @return bool Replacement was registered successfully or not.
	 */
	public static function register_var_replacement( $variable, $callback, $args = [] ) {
		_deprecated_function( 'RankMath\Helper::register_var_replacement()', '1.0.34', 'rank_math_register_var_replacement()' );
		$args['description'] = isset( $args['desc'] ) ? $args['desc'] : '';
		$args['variable']    = $variable;
		return rank_math_register_var_replacement( $variable, $args, $callback );
	}

	/**
	 * Get midnight time for the date variables.
	 *
	 * @param  int $time Timestamp of date.
	 * @return int
	 */
	public static function get_midnight( $time ) {
		$org_time = $time;
		if ( is_numeric( $time ) ) {
			$time = self::get_date( 'Y-m-d H:i:s', $time, false, true );
		}

		// Early bail if time format is invalid.
		if ( false === strtotime( $time ) ) {
			return $org_time;
		}

		$date = new \DateTime( $time );
		$date->setTime( 0, 0, 0 );

		return $date->getTimestamp();
	}

	/**
	 * Extract URL part.
	 *
	 * @param  string $url  The URL to parse.
	 * @param  string $part The URL part to retrieve.
	 *
	 * @return string The extracted URL part.
	 */
	public static function get_url_part( $url, $part ) {
		$url_parts = wp_parse_url( $url );

		return $url_parts[ $part ] ?? '';
	}

	/**
	 * Get current page URL.
	 *
	 * @param  bool $ignore_qs Ignore query string.
	 *
	 * @return string
	 */
	public static function get_current_page_url( $ignore_qs = false ) {
		$link = ( is_ssl() ? 'https' : 'http' ) . '://' . Param::server( 'HTTP_HOST' ) . Param::server( 'REQUEST_URI' );

		if ( $ignore_qs ) {
			$link = explode( '?', $link );
			$link = $link[0];
		}

		return $link;
	}

	/**
	 * Get module by ID.
	 *
	 * @param  string $id ID to get module.
	 *
	 * @return object Module class object.
	 */
	public static function get_module( $id ) {
		return rank_math()->manager->get_module( $id );
	}

	/**
	 * Modify module status.
	 *
	 * @param array $modules Modules to modify.
	 */
	public static function update_modules( $modules ) {
		$stored = get_option( 'rank_math_modules', [] );

		foreach ( $modules as $module => $action ) {
			if ( 'off' === $action ) {
				if ( in_array( $module, $stored, true ) ) {
					$stored = array_diff( $stored, [ $module ] );
				}
				continue;
			}

			$stored[] = $module;
			Installer::create_tables( [ $module ] );
		}

		update_option( 'rank_math_modules', array_unique( $stored ) );
	}

	/**
	 * Get list of currently active modules.
	 *
	 * @return array
	 */
	public static function get_active_modules() {
		$registered_modules = rank_math()->manager->modules;
		$stored             = array_values( get_option( 'rank_math_modules', [] ) );
		foreach ( $stored as $key => $value ) {
			if (
				! isset( $registered_modules[ $value ] )
				|| ! is_object( $registered_modules[ $value ] )
				|| ! method_exists( $registered_modules[ $value ], 'is_disabled' )
				|| $registered_modules[ $value ]->is_disabled()
			) {
				unset( $stored[ $key ] );
			}
		}

		return $stored;
	}

	/**
	 * Clear cache from:
	 *  - WordPress Total Cache
	 *  - W3 Total Cache
	 *  - WP Super Cache
	 *  - SG CachePress
	 *  - WPEngine
	 *  - Varnish
	 *
	 * @param string $context Context for cache to clear.
	 */
	public static function clear_cache( $context = '' ) {

		/**
		 * Filter: 'rank_math/pre_clear_cache' - Allow developers to extend/override cache clearing.
		 * Pass a truthy value to override the cache clearing.
		 */
		if ( apply_filters( 'rank_math/pre_clear_cache', false, $context ) ) {
			return;
		}

		// Clean WordPress cache.
		if ( function_exists( 'wp_cache_clear_cache' ) ) {
			wp_cache_clear_cache();
		}

		// If W3 Total Cache is being used, clear the cache.
		if ( function_exists( 'w3tc_pgcache_flush' ) ) {
			w3tc_pgcache_flush();
		}

		// If WP Super Cache is being used, clear the cache.
		if ( function_exists( 'wp_cache_clean_cache' ) ) {
			global $file_prefix;
			wp_cache_clean_cache( $file_prefix );
		}

		// If SG CachePress is installed, reset its caches.
		if ( class_exists( 'SG_CachePress_Supercacher' ) && is_callable( [ 'SG_CachePress_Supercacher', 'purge_cache' ] ) ) {
			\SG_CachePress_Supercacher::purge_cache();
		}

		// Clear caches on WPEngine-hosted sites.
		if ( class_exists( 'WpeCommon' ) ) {
			\WpeCommon::purge_memcached();
			\WpeCommon::purge_varnish_cache();

			// Clear WPEngine CDN cache. Added this condition to avoid PHP error as we are not sure when the new clear_cdn_cache method was added.
			if ( method_exists( 'WpeCommon', 'clear_cdn_cache' ) ) {
				\WpeCommon::clear_cdn_cache();
			} else {
				\WpeCommon::clear_maxcdn_cache();
			}
		}

		// Clear Varnish caches.
		self::clear_varnish_cache();
	}

	/**
	 * Clear varnish cache for the dynamic files.
	 * Credit @davidbarratt: https://github.com/davidbarratt/varnish-http-purge
	 */
	private static function clear_varnish_cache() {
		// Early bail if Varnish cache is not enabled on the site.
		if ( ! isset( $_SERVER['HTTP_X_VARNISH'] ) ) {
			return;
		}

		// Parse the URL for proxy proxies.
		$parsed_url = wp_parse_url( home_url() );

		// Build a varniship.
		$varniship = get_option( 'vhp_varnish_ip' );
		if ( defined( 'VHP_VARNISH_IP' ) && false !== VHP_VARNISH_IP ) {
			$varniship = VHP_VARNISH_IP;
		}

		// If we made varniship, let it sail.
		$purgeme = ( isset( $varniship ) && null !== $varniship ) ? $varniship : $parsed_url['host'];
		wp_remote_request(
			$parsed_url['scheme'] . '://' . $purgeme,
			[
				'method'   => 'PURGE',
				'blocking' => false,
				'headers'  => [
					'host'           => $parsed_url['host'],
					'X-Purge-Method' => 'default',
				],
			]
		);
	}

	/**
	 * Check if current environment is a localhost.
	 *
	 * @return boolean
	 */
	public static function is_localhost() {
		$whitelist = [
			'127.0.0.1', // IPv4 address.
			'::1', // IPv6 address.
		];

		return in_array( self::get_remote_addr(), $whitelist, true );
	}

	/**
	 * Get IP address from which the user is viewing the current page.
	 *
	 * @return string
	 */
	public static function get_remote_addr() {
		$ip = filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP );

		// INPUT_SERVER is not available on some hosts, let's try INPUT_ENV.
		if ( ! $ip ) {
			$ip = filter_input( INPUT_ENV, 'REMOTE_ADDR', FILTER_VALIDATE_IP );
		}

		// If we still don't have it, try to get it from the $_SERVER global.
		if ( ! $ip && isset( $_SERVER['REMOTE_ADDR'] ) ) {
			$ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP );
		}

		return $ip ? $ip : '';
	}

	/**
	 * Get date using date_i18n() or date().
	 *
	 * @param string      $format Format to display the date.
	 * @param int|boolean $timestamp_with_offset A sum of Unix timestamp and timezone offset in seconds.
	 * @param boolean     $gmt Whether to use GMT timezone. Only applies if timestamp is not provided.
	 * @param boolean     $mode Whether to use date() or date_i18n().
	 * @return mixin
	 */
	public static function get_date( $format, $timestamp_with_offset = false, $gmt = false, $mode = false ) {
		if ( true === $mode ) {
			return date( $format, $timestamp_with_offset ); // phpcs:ignore
		}
		return date_i18n( $format, $timestamp_with_offset, $gmt );
	}

	/**
	 * Check for valid image url.
	 *
	 * @param string $image_url The image url.
	 * @return boolean
	 */
	public static function is_image_url( $image_url ) {
		return filter_var( $image_url, FILTER_VALIDATE_URL ) && preg_match( '/\.(jpg|jpeg|png|gif|webp)$/i', $image_url );
	}

	/**
	 * Check if plugin auto update is disabled.
	 *
	 * @return bool
	 */
	public static function is_plugin_update_disabled() {
		return ! apply_filters_ref_array( 'auto_update_plugin', [ true, (object) [] ] )
			|| apply_filters_ref_array( 'automatic_updater_disabled', [ false ] )
			|| ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS )
			|| ( defined( 'AUTOMATIC_UPDATER_DISABLED' ) && AUTOMATIC_UPDATER_DISABLED );
	}

	/**
	 * Enable big selects.
	 */
	public static function enable_big_selects_for_queries() {
		static $rank_math_enable_big_select;

		if ( $rank_math_enable_big_select || ! apply_filters( 'rank_math/enable_big_selects', true ) ) {
			return;
		}

		$rank_math_enable_big_select = DB_Helper::query( 'SET SESSION SQL_BIG_SELECTS=1' );
	}

	/**
	 * Used for Backward compatibility to prevent site from showing undefined method error. (PRO  v3.0.49-beta)
	 *
	 * @param string $name     Method name.
	 * @param array  $argument Parameters passed to the function.
	 *
	 * @return string
	 */
	public static function __callStatic( $name, $argument ) {
		if ( 'extract_attributes' === $name ) {
			return HTML::extract_attributes( current( $argument ) );
		}

		return '';
	}
}
PK     –ŠU]Ë–ÙÞˆ  ˆ  $  includes/frontend/class-comments.phpnu „[µü¤        <?php
/**
 * The class handles the comments functionalities.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\HTML;
use RankMath\Helpers\Str;
use RankMath\Helpers\Security;

defined( 'ABSPATH' ) || exit;

/**
 * Comments class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
class Comments {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'wp_head', 'add_attributes', 99 );
	}

	/**
	 * Add UGC attribute and remove ?replytocom parameters.
	 */
	public function add_attributes() {
		/**
		 * Enable or disable the feature that adds ugc attribute.
		 *
		 * @param bool $remove Whether to remove the parameters.
		 */
		if ( $this->do_filter( 'frontend/add_ugc_attribute', true ) ) {
			$this->filter( 'comment_text', 'add_ugc_attribute' );
			$this->filter( 'get_comment_author_link', 'add_ugc_attribute' );
		}

		/**
		 * Enable or disable the feature that removes the ?replytocom parameters.
		 *
		 * @param bool $remove Whether to remove the parameters.
		 */
		if ( $this->do_filter( 'frontend/remove_reply_to_com', true ) ) {
			$this->filter( 'comment_reply_link', 'remove_reply_to_com' );
			$this->action( 'template_redirect', 'replytocom_redirect', 1 );
		}
	}

	/**
	 * Replace the ?replytocom with #comment-[number] in a link.
	 *
	 * @param  string $link The comment link as a string.
	 * @return string The new link.
	 */
	public function remove_reply_to_com( $link ) {
		return preg_replace( '`href=(["\'])(?:.*(?:\?|&|&#038;)replytocom=(\d+)#respond)`', 'href=$1#comment-$2', $link );
	}

	/**
	 * Redirect the ?replytocom URLs.
	 *
	 * @return bool True when redirect has been done.
	 */
	public function replytocom_redirect() {

		if ( isset( $_GET['replytocom'] ) && is_singular() ) {
			$url          = get_permalink( $GLOBALS['post']->ID );
			$query_string = isset( $_SERVER['QUERY_STRING'] ) ? Security::remove_query_arg_raw( 'replytocom', sanitize_text_field( $_SERVER['QUERY_STRING'] ) ) : '';
			if ( ! empty( $query_string ) ) {
				$url .= '?' . $query_string;
			}
			$url .= '#comment-' . sanitize_text_field( $_GET['replytocom'] );
			Helper::redirect( $url, 301 );
			return true;
		}

		return false;
	}

	/**
	 * Add 'ugc' attribute to comment.
	 *
	 * @param  string $text Comment or author link text to add ugc attribute.
	 * @return string
	 */
	public function add_ugc_attribute( $text ) {
		preg_match_all( '/<(a\s[^>]+)>/', $text, $matches );
		if ( empty( $matches ) || empty( $matches[0] ) ) {
			return $text;
		}

		foreach ( $matches[0] as $link ) {
			$attrs        = HTML::extract_attributes( $link );
			$attrs['rel'] = empty( $attrs['rel'] ) ? 'ugc' : ( Str::contains( 'ugc', $attrs['rel'] ) ? $attrs['rel'] : $attrs['rel'] . ' ugc' );

			$new  = '<a' . HTML::attributes_to_string( $attrs ) . '>';
			$text = str_replace( $link, $new, $text );
		}

		return $text;
	}
}
PK     –ŠU]/ø‚ž  ž  '  includes/frontend/class-redirection.phpnu „[µü¤        <?php
/**
 * The class handles redirection of attachment & archive pages
 *
 * @since      1.0.216
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Add Link_Attributes class.
 */
class Redirection {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( Helper::is_module_active( 'redirections' ) ) {
			$this->filter( 'rank_math/redirection/pre_search', 'pre_redirection' );
			return;
		}

		$this->action( 'wp', 'redirect' );
	}

	/**
	 * Pre-filter the redirection.
	 *
	 * @param string $check Check.
	 *
	 * @return string|array
	 */
	public function pre_redirection( $check ) {
		if ( $new_link = $this->get_redirection_url() ) { // phpcs:ignore
			return [
				'url_to'      => $new_link,
				'header_code' => 301,
			];
		}

		return $check;
	}

	/**
	 * Redirect product with base to the new link.
	 */
	public function redirect() {
		if ( $link = $this->get_redirection_url() ) { // phpcs:ignore
			Helper::redirect( $link, 301 );
			exit;
		}
	}

	/**
	 * Get Redirection URL.
	 *
	 * @return string Modified URL
	 */
	private function get_redirection_url() {
		// Redirect attachment page to parent post.
		if ( is_attachment() && Helper::get_settings( 'general.attachment_redirect_urls', true ) ) {
			global $post;

			$redirect = ! empty( $post->post_parent ) ? get_permalink( $post->post_parent ) : Helper::get_settings( 'general.attachment_redirect_default' );
			if ( ! $redirect ) {
				return;
			}

			/**
			 * Redirect attachment to its parent post.
			 *
			 * @param string  $redirect URL as calculated for redirection.
			 * @param WP_Post $post     Current post instance.
			 */
			return $this->do_filter( 'frontend/attachment/redirect_url', $redirect, $post );
		}

		// Redirect archives.
		global $wp_query;
		if (
			( Helper::get_settings( 'titles.disable_date_archives' ) && $wp_query->is_date ) ||
			( true === Helper::get_settings( 'titles.disable_author_archives' ) && $wp_query->is_author )
		) {
			return get_bloginfo( 'url' );
		}

		return false;
	}
}
PK     –ŠU]Û*#Çr0  r0  &  includes/frontend/class-shortcodes.phpnu „[µü¤        <?php
/**
 * The Shortcodes of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Helper;
use RankMath\Paper\Paper;
use RankMath\Traits\Hooker;
use RankMath\Traits\Shortcode;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Shortcodes class.
 */
class Shortcodes {

	use Hooker;
	use Shortcode;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init' );
	}

	/**
	 * Initialize.
	 */
	public function init() {

		// Remove Yoast shortcodes.
		$this->remove_shortcode( 'wpseo_address' );
		$this->remove_shortcode( 'wpseo_map' );
		$this->remove_shortcode( 'wpseo_opening_hours' );
		$this->remove_shortcode( 'wpseo_breadcrumb' );
		$this->remove_shortcode( 'aioseo_breadcrumbs' );

		// Add Yoast compatibility shortcodes.
		$this->add_shortcode( 'wpseo_address', 'yoast_address' );
		$this->add_shortcode( 'wpseo_map', 'yoast_map' );
		$this->add_shortcode( 'wpseo_opening_hours', 'yoast_opening_hours' );
		$this->add_shortcode( 'wpseo_breadcrumb', 'breadcrumb' );
		$this->add_shortcode( 'aioseo_breadcrumbs', 'breadcrumb' );

		// Add the Contact shortcode.
		$this->add_shortcode( 'rank_math_contact_info', 'contact_info' );

		// Add the Breadcrumbs shortcode.
		$this->add_shortcode( 'rank_math_breadcrumb', 'breadcrumb' );
	}

	/**
	 * Get the breadcrumbs.
	 *
	 * @param array $args Arguments.
	 *
	 * @return string
	 */
	public function breadcrumb( $args ) {
		if ( ! Helper::is_breadcrumbs_enabled() ) {
			return;
		}
		return Breadcrumbs::get()->get_breadcrumb( $args );
	}

	/**
	 * Contact info shortcode, displays nicely formatted contact information.
	 *
	 * @param  array $args Optional. Shortcode arguments - currently only 'show'
	 *                     parameter, which is a comma-separated list of elements to show.
	 * @return string Shortcode output.
	 */
	public function contact_info( $args ) {
		$args = shortcode_atts(
			[
				'show'  => 'all',
				'class' => '',
			],
			$args,
			'contact-info'
		);

		$allowed = $this->get_allowed_info( $args );

		wp_enqueue_style( 'rank-math-contact-info', rank_math()->assets() . 'css/rank-math-contact-info.css', null, rank_math()->version );

		ob_start();
		echo '<div class="' . esc_attr( $this->get_contact_classes( $allowed, $args['class'] ) ) . '">';

		foreach ( $allowed as $element ) {
			$method = 'display_' . $element;
			if ( method_exists( $this, $method ) ) {
				echo '<div class="rank-math-contact-section rank-math-contact-' . esc_attr( $element ) . '">';
				$this->$method();
				echo '</div>';
			}
		}

		echo '</div>';
		echo '<div class="clear"></div>';

		/**
		 * Change the Contact Info HTML output.
		 *
		 * @param string $unsigned HTML output.
		 */
		return $this->do_filter( 'contact_info/html', ob_get_clean() );
	}

	/**
	 * Get allowed info array.
	 *
	 * @param array $args Shortcode arguments - currently only 'show'.
	 *
	 * @return array
	 */
	private function get_allowed_info( $args ) {
		$type = Helper::get_settings( 'titles.knowledgegraph_type' );

		$allowed = 'person' === $type
		? [ 'name', 'email', 'person_phone', 'address' ]
		: [ 'name', 'organization_description', 'email', 'address', 'hours', 'phone', 'additional_info', 'map' ];

		if ( ! empty( $args['show'] ) && 'all' !== $args['show'] ) {
			$allowed = array_intersect( Arr::from_string( $args['show'] ), $allowed );
		}

		return $allowed;
	}

	/**
	 * Get contact info container classes.
	 *
	 * @param  array $allowed     Allowed elements.
	 * @param  array $extra_class Shortcode arguments.
	 * @return string
	 */
	private function get_contact_classes( $allowed, $extra_class ) {
		$classes = [ 'rank-math-contact-info', $extra_class ];
		foreach ( $allowed as $elem ) {
			$classes[] = sanitize_html_class( 'show-' . $elem );
		}
		if ( count( $allowed ) === 1 ) {
			$classes[] = sanitize_html_class( 'show-' . $elem . '-only' );
		}

		return join( ' ', array_filter( $classes ) );
	}

	/**
	 * Output address.
	 */
	private function display_address() {
		$address = Helper::get_settings( 'titles.local_address' );
		if ( false === $address ) {
			return;
		}

		$hash   = [
			'streetAddress'   => 'address',
			'addressLocality' => 'locality',
			'addressRegion'   => 'region',
			'postalCode'      => 'postalcode',
			'addressCountry'  => 'country',
		];
		$format = nl2br( Helper::get_settings( 'titles.local_address_format' ) );
		$data   = self::get_address( $hash, $address, $format );
		?>
		<label><?php esc_html_e( 'Address:', 'seo-by-rank-math' ); ?></label>
		<address><?php echo wp_kses_post( $data ); ?></address>
		<?php
	}

	/**
	 * Output opening hours.
	 */
	private function display_hours() {
		$hours = Helper::get_settings( 'titles.opening_hours' );
		if ( ! isset( $hours[0]['time'] ) ) {
			return;
		}

		$combined = $this->get_hours_combined( $hours );
		$format   = Helper::get_settings( 'titles.opening_hours_format' );
		?>
		<label><?php esc_html_e( 'Hours:', 'seo-by-rank-math' ); ?></label>
		<div class="rank-math-contact-hours-details">
			<?php
			foreach ( $combined as $time => $days ) {
				if ( $format ) {
					$hours = explode( '-', $time );
					$time  = isset( $hours[1] ) ? date_i18n( 'g:i a', strtotime( $hours[0] ) ) . '-' . date_i18n( 'g:i a', strtotime( $hours[1] ) ) : $time;
				}
				$time = str_replace( '-', ' &ndash; ', $time );

				printf(
					'<div class="rank-math-opening-hours"><span class="rank-math-opening-days">%1$s</span><span class="rank-math-opening-time">%2$s</span></div>',
					esc_html( join( ', ', $days ) ),
					esc_html( $time )
				);
			}
			?>
		</div>
		<?php
	}

	/**
	 * Combine hours in an hour
	 *
	 * @param  array $hours Hours to combine.
	 * @return array
	 */
	private function get_hours_combined( $hours ) {
		$combined = [];

		foreach ( $hours as $hour ) {
			if ( empty( $hour['time'] ) ) {
				continue;
			}

			$combined[ trim( $hour['time'] ) ][] = $this->get_localized_day( $hour['day'] ?? 'Monday' );
		}

		return $combined;
	}

	/**
	 * Retrieve the full translated weekday word.
	 *
	 * @param string $day Day to translate.
	 *
	 * @return string
	 */
	private function get_localized_day( $day ) {
		global $wp_locale;

		$hash = [
			'Sunday'    => 0,
			'Monday'    => 1,
			'Tuesday'   => 2,
			'Wednesday' => 3,
			'Thursday'  => 4,
			'Friday'    => 5,
			'Saturday'  => 6,
		];

		return $wp_locale->get_weekday( $hash[ $day ] );
	}

	/**
	 * Output phone numbers.
	 */
	private function display_phone() {
		$phones = Helper::get_settings( 'titles.phone_numbers' );
		if ( empty( $phones ) ) {
			return;
		}

		$choices = Helper::choices_phone_types();
		foreach ( $phones as $phone ) :
			if ( empty( $phone['number'] ) ) {
				continue;
			}

			$number = esc_html( $phone['number'] );
			$type   = $phone['type'] ?? 'customer support';
			$label  = isset( $choices[ $type ] ) ? $choices[ $type ] : ''
			?>
			<div class="rank-math-phone-number type-<?php echo sanitize_html_class( $type ); ?>">
				<label><?php echo esc_html( $label ); ?>:</label>
				<span><?php echo isset( $phone['number'] ) ? '<a href="tel:' . esc_attr( $number ) . '">' . esc_html( $number ) . '</a>' : ''; ?></span>
			</div>
			<?php
		endforeach;
	}

	/**
	 * Output Person phone number.
	 */
	private function display_person_phone() {
		$phone = Helper::get_settings( 'titles.phone' );
		if ( empty( $phone ) ) {
			return;
		}
		?>
			<div class="rank-math-phone-numbers">
				<label><?php echo esc_html__( 'Telephone', 'seo-by-rank-math' ); ?>:</label>
				<span><a href="tel:<?php echo esc_attr( $phone ); ?>"><?php echo esc_html( $phone ); ?></a></span>
			</div>
		<?php
	}

	/**
	 * Output google map.
	 */
	private function display_map() {
		$api_key = Helper::get_settings( 'titles.maps_api_key' );
		if ( ! $api_key ) {
			return;
		}

		$address = Helper::get_settings( 'titles.local_address' );
		if ( false === $address ) {
			return;
		}

		/**
		 * Filter address for Google Map in contact shortcode.
		 *
		 * @param string $address
		 */
		$address = $this->do_filter( 'shortcode/contact/map_address', implode( ' ', $address ) );
		$address = $this->do_filter( 'shortcode/contact/map_iframe_src', '//maps.google.com/maps?q=' . rawurlencode( $address ) . '&z=15&output=embed&key=' . rawurlencode( $api_key ) );
		?>
		<iframe src="<?php echo esc_url( $address ); ?>"></iframe>
		<?php
	}

	/**
	 * Output name.
	 */
	private function display_name() {
		$name = Helper::get_settings( 'titles.knowledgegraph_name' );
		if ( false === $name ) {
			return;
		}

		$url = Helper::get_settings( 'titles.url' );
		?>
		<h4 class="rank-math-name">
			<a href="<?php echo esc_url( $url ); ?>"><?php echo esc_html( $name ); ?></a>
		</h4>
		<?php
	}

	/**
	 * Output email.
	 */
	private function display_email() {
		$email = Helper::get_settings( 'titles.email' );
		if ( false === $email ) {
			return;
		}
		?>
		<div class="rank-math-email">
			<label><?php esc_html_e( 'Email:', 'seo-by-rank-math' ); ?></label>
			<a href="mailto:<?php echo esc_attr( $email ); ?>"><?php echo esc_html( $email ); ?></a>
		</div>
		<?php
	}

	/**
	 * Output Organization description.
	 */
	private function display_organization_description() {
		$description = Helper::get_settings( 'titles.organization_description' );
		if ( ! $description ) {
			return;
		}
		?>
		<div class="rank-math-organization-description">
			<label><?php esc_html_e( 'Description:', 'seo-by-rank-math' ); ?></label>
			<p><?php echo esc_html( $description ); ?></p>
		</div>
		<?php
	}

	/**
	 * Output Additional Organization details.
	 */
	private function display_additional_info() {
		$properties = Helper::get_settings( 'titles.additional_info' );
		if ( empty( $properties ) ) {
			return;
		}

		$choices = Helper::choices_additional_organization_info();

		foreach ( $properties as $property ) {
			if ( empty( $property['value'] ) ) {
				continue;
			}

			$type = $property['type'] ?? 'legalName';
			?>
			<div class="rank-math-organization-additional-details">
				<label><?php echo esc_html( $choices[ $type ] ); ?>:</label>
				<span><?php echo esc_html( $property['value'] ); ?></span>
			</div>
			<?php
		}
	}

	/**
	 * Yoast address compatibility functionality.
	 *
	 * @param  array $args Array of arguments.
	 * @return string
	 */
	public function yoast_address( $args ) {
		$atts = shortcode_atts(
			[
				'hide_name'          => '0',
				'hide_address'       => '0',
				'show_state'         => '1',
				'show_country'       => '1',
				'show_phone'         => '1',
				'show_phone_2'       => '1',
				'show_fax'           => '1',
				'show_email'         => '1',
				'show_url'           => '0',
				'show_vat'           => '0',
				'show_tax'           => '0',
				'show_coc'           => '0',
				'show_price_range'   => '0',
				'show_logo'          => '0',
				'show_opening_hours' => '0',
			],
			$args,
			'wpseo_address'
		);
		$show = [ 'address' ];

		if ( 1 === absint( $atts['show_phone'] ) ) {
			$show[] = 'phone';
		}

		if ( 1 === absint( $atts['show_opening_hours'] ) ) {
			$show[] = 'hours';
		}

		return $this->contact_info(
			[
				'show'  => join( ',', $show ),
				'class' => 'wpseo_address_compat',
			]
		);
	}

	/**
	 * Yoast map compatibility functionality.
	 *
	 * @return string
	 */
	public function yoast_map() {
		return $this->contact_info(
			[
				'show'  => 'map',
				'class' => 'wpseo_map_compat',
			]
		);
	}

	/**
	 * Yoast opening hours compatibility functionality.
	 *
	 * @return string
	 */
	public function yoast_opening_hours() {
		return $this->contact_info(
			[
				'show'  => 'hours',
				'class' => 'wpseo_opening_hours_compat',
			]
		);
	}

	/**
	 * Get address
	 *
	 * @param array  $hash   Hash of tags.
	 * @param array  $address Address data.
	 * @param string $format Address format.
	 */
	public static function get_address( $hash, $address, $format ) {
		$parts_format = apply_filters( 'rank_math/shortcode/contact/address_parts_format', '<span class="contact-address-%1$s">%2$s</span>' );

		foreach ( $hash as $key => $tag ) {
			$value = '';
			if ( isset( $address[ $key ] ) && ! empty( $address[ $key ] ) ) {
				$value = sprintf( $parts_format, $key, $address[ $key ] );
			}

			$format = str_replace( "{{$tag}}", $value, $format );
		}

		return $format;
	}
}
PK     –ŠU]è¼æK@3  @3     includes/frontend/class-head.phpnu „[µü¤        <?php
/**
 * The <head> tag.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Post;
use RankMath\Helper;
use RankMath\Paper\Paper;
use RankMath\Traits\Hooker;
use RankMath\Sitemap\Router;
use RankMath\Helpers\Str;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Security;

defined( 'ABSPATH' ) || exit;

/**
 * Head class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
class Head {

	use Hooker;

	/**
	 * Keeps the buffer level.
	 *
	 * @since 1.0.252
	 *
	 * @var int
	 */
	private $buffer_level = 0;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$this->action( 'wp_head', 'head', 1 );

		if ( Helper::is_amp_active() ) {
			$this->action( 'amphtml_template_head', 'head', 1 );
			$this->action( 'weeblramp_print_meta_data', 'head', 1 );
			$this->action( 'better-amp/template/head', 'head', 99 );
			$this->action( 'amp_post_template_head', 'head', 9 );
			remove_action( 'better-amp/template/head', 'better_amp_print_rel_canonical' );
		}

		$this->action( 'wp_head', 'front_page_init', 0 );
		$this->filter( 'language_attributes', 'search_results_schema' );

		$this->action( 'rank_math/head', 'metadesc', 6 );
		$this->action( 'rank_math/head', 'robots', 10 );
		$this->action( 'rank_math/head', 'canonical', 20 );
		$this->action( 'rank_math/head', 'adjacent_rel_links', 21 );
		$this->action( 'rank_math/head', 'metakeywords', 22 );

		$this->filter( 'wp_title', 'title', 15 );
		$this->filter( 'thematic_doctitle', 'title', 15 );
		$this->filter( 'pre_get_document_title', 'title', 15 );

		// Code to move title inside the Rank Math's meta.
		remove_action( 'wp_head', '_wp_render_title_tag', 1 );
		add_action( 'rank_math/head', '_wp_render_title_tag', 1 );

		// Force Rewrite title.
		if ( Helper::get_settings( 'titles.rewrite_title' ) && ! current_theme_supports( 'title-tag' ) ) {
			$this->action( 'get_header', 'start_ob', 0 );
			$this->action( 'wp_head', 'rewrite_title', 9999 );
		}

		// Remove core robots data.
		if ( ! is_embed() ) {
			remove_all_filters( 'wp_robots' );
		}
	}

	/**
	 * Initialize front page related stuff.
	 */
	public function front_page_init() {
		if ( ! is_front_page() ) {
			return;
		}

		$this->action( 'rank_math/head', 'webmaster_tools_authentication', 90 );
	}

	/**
	 * Output authentication codes for all the Webmaster Tools.
	 */
	public function webmaster_tools_authentication() {
		$tools = [
			'google_verify'    => 'google-site-verification',
			'bing_verify'      => 'msvalidate.01',
			'baidu_verify'     => 'baidu-site-verification',
			'yandex_verify'    => 'yandex-verification',
			'pinterest_verify' => 'p:domain_verify',
			'norton_verify'    => 'norton-safeweb-site-verification',
		];

		foreach ( $tools as $id => $name ) {
			$content = trim( Helper::get_settings( "general.{$id}" ) );
			$content = $this->do_filter( 'webmaster/' . $id, $content );
			if ( empty( $content ) ) {
				continue;
			}

			printf( '<meta name="%1$s" content="%2$s" />' . "\n", esc_attr( $name ), esc_attr( $content ) );
		}

		$custom_webmaster_tags = Helper::get_settings( 'general.custom_webmaster_tags' );
		if ( empty( $custom_webmaster_tags ) ) {
			return;
		}

		$custom_webmaster_tags = Arr::from_string( $custom_webmaster_tags );
		foreach ( $custom_webmaster_tags as $custom_webmaster_tag ) {
			$custom_webmaster_tag = trim( $custom_webmaster_tag );
			if ( empty( $custom_webmaster_tag ) ) {
				continue;
			}

			echo wp_kses(
				$custom_webmaster_tag,
				[
					'meta' => [
						'name'    => [],
						'content' => [],
					],
				]
			) . "\n";
		}
	}

	/**
	 * Add Search Result Page schema as language attributes for the <html> tag.
	 *
	 * @param  string $output A space-separated list of language attributes.
	 * @return string
	 */
	public function search_results_schema( $output ) {
		if ( ! is_search() ) {
			return $output;
		}

		return preg_replace( '/itemtype="([^"]+)"/', 'itemtype="https://schema.org/SearchResultsPage', $output );
	}

	/**
	 * Main function attached to the wp_head hook.
	 */
	public function head() {
		global $wp_query;

		$old_wp_query = null;
		if ( ! $wp_query->is_main_query() ) {
			$old_wp_query = $wp_query;
			wp_reset_query(); //phpcs:ignore -- This function is needed here to reset the query before running the head code.
		}

		$this->credits();

		// Remove core actions, now handled by Rank Math.
		remove_action( 'wp_head', 'rel_canonical' );
		remove_action( 'wp_head', 'index_rel_link' );
		remove_action( 'wp_head', 'start_post_rel_link' );
		remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' );
		remove_action( 'wp_head', 'noindex', 1 );

		if ( Helper::is_amp_active() ) {
			remove_action( 'amp_post_template_head', 'amp_post_template_add_title' );
			remove_action( 'amp_post_template_head', 'amp_post_template_add_canonical' );
			remove_action( 'amp_post_template_head', 'amp_print_schemaorg_metadata' );
		}

		/**
		 * Add extra output in the head tag.
		 */
		$this->do_action( 'head' );

		$this->credits( true );

		if ( ! empty( $old_wp_query ) ) {
			$GLOBALS['wp_query'] = $old_wp_query;
			unset( $old_wp_query );
		}
	}

	/**
	 * Main title function.
	 *
	 * @param  string $title Already set title or empty string.
	 * @return string
	 */
	public function title( $title ) {
		if ( is_feed() ) {
			return $title;
		}

		$generated = Paper::get()->get_title();
		return Str::is_non_empty( $generated ) ? $generated : $title;
	}

	/**
	 * Output the meta description tag with the generated description.
	 */
	public function metadesc() {
		$generated = Paper::get()->get_description();

		if ( Str::is_non_empty( $generated ) ) {
			echo '<meta name="description" content="' . esc_attr( $generated ) . '"/>', "\n";
		}
	}

	/**
	 * Output the meta robots tag.
	 */
	public function robots() {
		$robots    = Paper::get()->get_robots();
		$robotsstr = join( ', ', $robots );
		if ( Str::is_non_empty( $robotsstr ) ) {
			echo '<meta name="robots" content="', esc_attr( $robotsstr ), '"/>', "\n";
		}

		// If a page is noindex, let's remove the canonical URL.
		// https://www.seroundtable.com/google-noindex-rel-canonical-confusion-26079.html .
		if ( isset( $robots['index'] ) && 'noindex' === $robots['index'] ) {
			$this->remove_action( 'rank_math/head', 'canonical', 20 );
			$this->remove_action( 'rank_math/head', 'adjacent_rel_links', 21 );
		}
	}

	/**
	 * Output the canonical URL tag.
	 */
	public function canonical() {
		$canonical = Paper::get()->get_canonical();
		if ( Str::is_non_empty( $canonical ) ) {
			echo '<link rel="canonical" href="' . esc_url( $canonical, null, 'other' ) . '" />' . "\n";
		}
	}

	/**
	 * Add the rel 'prev' and 'next' links to archives or single posts.
	 *
	 * @link http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
	 */
	public function adjacent_rel_links() {
		/**
		 * Enable rel "next" & "prev" tags on sites running Genesis.
		 *
		 * @param bool $unsigned Whether or not to show rel next / prev .
		 */
		if ( is_home() && function_exists( 'genesis' ) && false === $this->do_filter( 'frontend/genesis/force_adjacent_rel_home', false ) ) {
			return;
		}

		/**
		 * Disable rel 'prev' and 'next' links.
		 *
		 * @param bool $disable Rel 'prev' and 'next' links should be disabled or not.
		 */
		if ( true === $this->do_filter( 'frontend/disable_adjacent_rel_links', false ) ) {
			return;
		}

		if ( is_singular() ) {
			$this->adjacent_rel_links_single();
			return;
		}
		$this->adjacent_rel_links_archive();
	}

	/**
	 * Output the meta keywords value.
	 */
	public function metakeywords() {
		/**
		 * Passing a truthy value to the filter will effectively short-circuit the
		 * set keywords process.
		 *
		 * @param bool $return Short-circuit return value. Either false or true.
		 */
		if ( ! $this->do_filter( 'frontend/show_keywords', false ) ) {
			return;
		}

		$keywords = Paper::get()->get_keywords();
		if ( Str::is_non_empty( $keywords ) ) {
			echo '<meta name="keywords" content="', esc_attr( $keywords ), '"/>', "\n";
		}
	}

	/**
	 * Output the rel next/prev tags on a paginated single post.
	 *
	 * @return void
	 */
	private function adjacent_rel_links_single() {
		$num_pages = 1;

		$queried_object = get_queried_object();
		if ( ! empty( $queried_object ) ) {
			$num_pages = substr_count( $queried_object->post_content, '<!--nextpage-->' ) + 1;
		}

		if ( 1 === $num_pages ) {
			return;
		}

		$page = max( 1, (int) get_query_var( 'page' ) );
		$url  = get_permalink( get_queried_object_id() );

		if ( $page > 1 ) {
			$this->adjacent_rel_link( 'prev', $url, $page - 1, 'page' );
		}

		if ( $page < $num_pages ) {
			$this->adjacent_rel_link( 'next', $url, $page + 1, 'page' );
		}
	}

	/**
	 * Output the rel next/prev tags on archives.
	 */
	private function adjacent_rel_links_archive() {
		$url = Paper::get()->get_canonical( true, true );
		if ( ! is_string( $url ) || '' === $url ) {
			return;
		}

		$paged = max( 1, (int) get_query_var( 'paged' ) );
		if ( 2 === $paged ) {
			$this->adjacent_rel_link( 'prev', $url, $paged - 1 );
		}

		if ( is_front_page() ) {
			$url = Router::get_base_url( '' );
		}

		if ( $paged > 2 ) {
			$this->adjacent_rel_link( 'prev', $url, $paged - 1 );
		}

		if ( $paged < $GLOBALS['wp_query']->max_num_pages ) {
			$this->adjacent_rel_link( 'next', $url, $paged + 1 );
		}
	}

	/**
	 * Build adjacent page link for archives.
	 *
	 * @param string $rel       Prev or next.
	 * @param string $url       The current archive URL without page parameter.
	 * @param string $page      The page number added to the $url in the link tag.
	 * @param string $query_arg The pagination query argument to use for the $url.
	 */
	private function adjacent_rel_link( $rel, $url, $page, $query_arg = 'paged' ) {
		global $wp_rewrite;

		if ( $page > 1 ) {
			$url = ! $wp_rewrite->using_permalinks() ? Security::add_query_arg_raw( $query_arg, $page, $url ) : user_trailingslashit( trailingslashit( $url ) . $this->get_pagination_base() . $page );
		}

		/**
		 * Change the link rel HTML output.
		 *
		 * @param string $link The `<link rel=""` tag.
		 */
		$link = $this->do_filter( "frontend/{$rel}_rel_link", '<link rel="' . esc_attr( $rel ) . '" href="' . esc_url( $url ) . "\" />\n" );
		if ( Str::is_non_empty( $link ) ) {
			$allowed_tags = [
				'link' => [
					'href' => [],
					'rel'  => [],
				],
			];
			echo wp_kses( $link, $allowed_tags );
		}
	}

	/**
	 * Get pagination base.
	 *
	 * @return string The pagination base.
	 */
	private function get_pagination_base() {
		global $wp_rewrite;

		return ( ! is_singular() || Post::is_home_static_page() ) ? trailingslashit( $wp_rewrite->pagination_base ) : '';
	}

	/**
	 * Credits.
	 *
	 * @param boolean $closing Is closing credits needed.
	 */
	private function credits( $closing = false ) {

		/**
		 * Disable credit in the HTML source.
		 *
		 * @param bool $remove
		 */
		if ( $this->do_filter( 'frontend/remove_credit_notice', false ) ) {
			return;
		}

		if ( false === $closing ) {
			if ( ! Helper::is_whitelabel() && ! defined( 'RANK_MATH_PRO_FILE' ) ) {
				echo "\n<!-- " . esc_html__( 'Search Engine Optimization by Rank Math - https://rankmath.com/', 'seo-by-rank-math' ) . " -->\n";
			} elseif ( defined( 'RANK_MATH_PRO_FILE' ) ) {
				echo "\n<!-- " . esc_html__( 'Search Engine Optimization by Rank Math PRO - https://rankmath.com/', 'seo-by-rank-math' ) . " -->\n";
			}
			return;
		}

		if ( ! Helper::is_whitelabel() ) {
			echo '<!-- /' . esc_html__( 'Rank Math WordPress SEO plugin', 'seo-by-rank-math' ) . " -->\n\n";
		}
	}

	/**
	 * Start the Output Buffer.
	 *
	 * @since 1.0.29
	 */
	public function start_ob() {
		ob_start();
		$this->buffer_level = ob_get_level();
	}

	/**
	 * Use output buffering to force rewrite the title tag.
	 */
	public function rewrite_title() {
		if ( ob_get_level() !== $this->buffer_level ) {
			return;
		}

		global $wp_query;

		// Check if we're in the main query.
		$old_wp_query = null;
		if ( ! $wp_query->is_main_query() ) {
			$old_wp_query = $wp_query;
			wp_reset_query(); //phpcs:ignore -- This function is needed here to reset the query before running the head code.
		}

		$content = ob_get_clean();
		$title   = Paper::get()->get_title();
		if ( empty( $title ) ) {
			echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- This is the output buffer, escaping is unnecessary.
		}

		// Find all title tags, remove them, and add the new one.
		$content = preg_replace( '/<title.*?\/title>/i', '', $content );
		$content = str_replace( '<head>', '<head>' . "\n" . '<title>' . esc_html( $title ) . '</title>', $content );
		if ( ! empty( $old_wp_query ) ) {
			$GLOBALS['wp_query'] = $old_wp_query;
		}

		echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- This is the output buffer, escaping is unnecessary.
	}
}
PK     –ŠU]ü{"  "  $  includes/frontend/class-frontend.phpnu „[µü¤        <?php
/**
 * The public-facing functionality of the plugin.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Post;
use RankMath\Helper;
use RankMath\Paper\Paper;
use RankMath\Traits\Hooker;
use RankMath\OpenGraph\Twitter;
use RankMath\OpenGraph\Facebook;
use RankMath\OpenGraph\Slack;
use RankMath\Frontend\Shortcodes;

defined( 'ABSPATH' ) || exit;

/**
 * Frontend class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
class Frontend {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( \RankMath\Helpers\Param::get( 'et_fb' ) ) {
			return;
		}

		$this->includes();
		$this->hooks();

		/**
		 * Fires when frontend is included/loaded.
		 */
		$this->do_action( 'frontend/loaded' );
	}

	/**
	 * Include required files.
	 */
	private function includes() {

		rank_math()->shortcodes = new Shortcodes();

		if ( Helper::is_breadcrumbs_enabled() ) {
			/**
			 * If RM's breadcrumbs are enabled then we can remove the bbPress breadcrumbs.
			 */
			add_filter( 'bbp_get_breadcrumb', '__return_false' );
		}

		new Redirection();
		rank_math()->link_attributes = new Link_Attributes();
		rank_math()->comments        = new Comments();
	}

	/**
	 * Hook into actions and filters.
	 */
	private function hooks() {

		$this->action( 'wp_enqueue_scripts', 'enqueue' );
		$this->action( 'wp', 'integrations' );
		$this->filter( 'the_content_feed', 'embed_rssfooter' );
		$this->filter( 'the_excerpt_rss', 'embed_rssfooter_excerpt' );

		// Add support for shortcode in the Category/Term description.
		add_filter( 'category_description', 'do_shortcode' );
		add_filter( 'term_description', 'do_shortcode' );
	}

	/**
	 * Initialize integrations.
	 */
	public function integrations() {
		$type = get_query_var( 'sitemap' );
		if ( $this->do_filter( 'frontend/disable_integration', ! empty( $type ) || is_customize_preview() ) ) {
			return;
		}

		Paper::get();
		new Facebook();
		new Twitter();
		new Slack();

		// Leave this for backwards compatibility as AMP plugin uses head function. We can remove this in the future update.
		rank_math()->head = new Head();

		if ( function_exists( 'amp_is_dev_mode' ) && amp_is_dev_mode() ) {
			$this->filter( 'script_loader_tag', 'add_amp_dev_mode_attributes', 10, 2 );
			$this->filter( 'amp_dev_mode_element_xpaths', 'add_amp_dev_mode_xpaths' );
		}
	}

	/**
	 * Enqueue Styles and Scripts
	 */
	public function enqueue() {
		if ( ! is_admin_bar_showing() || ! Helper::has_cap( 'admin_bar' ) ) {
			return;
		}

		wp_enqueue_style( 'rank-math', rank_math()->assets() . 'css/rank-math.css', null, rank_math()->version );
		wp_enqueue_script( 'rank-math', rank_math()->assets() . 'js/rank-math.js', [ 'jquery' ], rank_math()->version, true );

		if ( is_singular() ) {
			Helper::add_json( 'objectID', Post::get_page_id() );
			Helper::add_json( 'objectType', 'post' );
		} elseif ( is_category() || is_tag() || is_tax() ) {
			Helper::add_json( 'objectID', get_queried_object_id() );
			Helper::add_json( 'objectType', 'term' );
		} elseif ( is_author() ) {
			Helper::add_json( 'objectID', get_queried_object_id() );
			Helper::add_json( 'objectType', 'user' );
		}
	}

	/**
	 * Adds the RSS header and footer messages to the RSS feed item content.
	 *
	 * @param string $content Feed item content.
	 *
	 * @return string
	 */
	public function embed_rssfooter( $content ) {
		return $this->embed_rss( $content, 'full' );
	}

	/**
	 * Adds the RSS header and footer messages to the RSS feed item excerpt.
	 *
	 * @param string $content Feed item excerpt.
	 *
	 * @return string
	 */
	public function embed_rssfooter_excerpt( $content ) {
		return $this->embed_rss( $content, 'excerpt' );
	}

	/**
	 * Add data-ampdevmode attribute to enqueued scripts.
	 *
	 * @since 1.0.45
	 *
	 * @param string $tag    The script tag.
	 * @param string $handle The script handle.
	 *
	 * @return string Modified script tag.
	 */
	public function add_amp_dev_mode_attributes( $tag, $handle ) {
		if ( ! in_array( $handle, [ 'rank-math', 'jquery-core', 'jquery-migrate' ], true ) ) {
			return $tag;
		}

		return preg_replace( '/(?<=<script)(?=\s|>)/i', ' data-ampdevmode', $tag );
	}

	/**
	 * Add data-ampdevmode attributes to the elements that need it.
	 *
	 * @since 1.0.45
	 *
	 * @param string[] $xpaths XPath queries for elements that should get the data-ampdevmode attribute.
	 *
	 * @return string[] XPath queries.
	 */
	public function add_amp_dev_mode_xpaths( $xpaths ) {
		$xpaths[] = '//script[ contains( text(), "var rankMath" ) ]';
		$xpaths[] = '//*[ @id = "rank-math-css" ]';
		$xpaths[] = '//a[starts-with(@href, "tel:")]';
		return $xpaths;
	}

	/**
	 * Inserts the RSS header and footer messages in the RSS feed item.
	 *
	 * @param string $content Feed item content.
	 * @param string $context Feed item context, 'excerpt' or 'full'.
	 *
	 * @return string
	 */
	private function embed_rss( $content, $context = 'full' ) {
		if ( false === $this->can_embed_footer( $content, $context ) ) {
			return $content;
		}

		$before = $this->get_rss_content( 'before' );
		$after  = $this->get_rss_content( 'after' );

		if ( '' === $before && '' === $after ) {
			return $content;
		}

		if ( 'excerpt' === $context && '' !== trim( $content ) ) {
			$content = wpautop( $content );
		}

		return $before . $content . $after;
	}

	/**
	 * Check if we can add the RSS footer and/or header to the RSS feed item.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @param string $content Feed item content.
	 * @param string $context Feed item context, either 'excerpt' or 'full'.
	 *
	 * @return bool
	 */
	private function can_embed_footer( $content, $context ) {
		/**
		 * Allow the RSS footer to be dynamically shown/hidden.
		 *
		 * @param bool   $show_embed Indicates if the RSS footer should be shown or not.
		 * @param string $context    The context of the RSS content - 'full' or 'excerpt'.
		 */
		if ( false === $this->do_filter( 'frontend/rss/include_footer', true, $context ) ) {
			return false;
		}

		return is_feed();
	}

	/**
	 * Get RSS content for specified location.
	 *
	 * @param string $which Location ID.
	 *
	 * @return string
	 */
	private function get_rss_content( $which ) {
		$content = $this->do_filter( 'frontend/rss/' . $which . '_content', Helper::get_settings( 'general.rss_' . $which . '_content' ) );

		return '' !== $content ? wpautop( $this->rss_replace_vars( $content ) ) : $content;
	}

	/**
	 * Replace variables with the actual values in RSS header and footer messages.
	 *
	 * @param string $content The RSS content.
	 *
	 * @return string
	 */
	private function rss_replace_vars( $content ) {
		global $post;

		/**
		 * Add nofollow for the links in the RSS header and footer messages. Default: true.
		 *
		 * @param bool $unsigned Whether or not to follow the links in RSS feed, defaults to true.
		 */
		$no_follow = $this->do_filter( 'frontend/rss/nofollow_links', true );
		$no_follow = true === $no_follow ? 'rel="nofollow" ' : '';

		$author_link = '';
		$image       = '';
		if ( ! empty( $post ) && $post instanceof \WP_Post ) {
			$author_link = '<a ' . $no_follow . 'href="' . esc_url( get_author_posts_url( $post->post_author ) ) . '">' . esc_html( get_the_author() ) . '</a>';

			// Featured image.
			$image = Helper::get_thumbnail_with_fallback( $post->ID, 'full' );
			$image = isset( $image[0] ) ? '<img src="' . $image[0] . '" style="display: block; margin: 1em auto">' : '';
		}

		$post_link      = '<a ' . $no_follow . 'href="' . esc_url( get_permalink() ) . '">' . esc_html( get_the_title() ) . '</a>';
		$blog_link      = '<a ' . $no_follow . 'href="' . esc_url( get_bloginfo( 'url' ) ) . '">' . esc_html( get_bloginfo( 'name' ) ) . '</a>';
		$blog_desc_link = '<a ' . $no_follow . 'href="' . esc_url( get_bloginfo( 'url' ) ) . '">' . esc_html( get_bloginfo( 'name' ) ) . ' - ' . esc_html( get_bloginfo( 'description' ) ) . '</a>';

		$content = stripslashes( trim( $content ) );
		$content = str_replace( '%AUTHORLINK%', $author_link, $content );
		$content = str_replace( '%POSTLINK%', $post_link, $content );
		$content = str_replace( '%BLOGLINK%', $blog_link, $content );
		$content = str_replace( '%BLOGDESCLINK%', $blog_desc_link, $content );
		$content = str_replace( '%FEATUREDIMAGE%', $image, $content );

		return $content;
	}
}
PK     –ŠU]ÍiüÕG  ÕG  '  includes/frontend/class-breadcrumbs.phpnu „[µü¤        <?php
/**
 * The Breadcrumbs.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2015, WooCommerce
 * The following code is a derivative work of the code from the WooCommerce(https://github.com/woocommerce/woocommerce/), which is licensed under GPL v3.
 */

namespace RankMath\Frontend;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Security;
use WP_Error;
use WP_Term;

defined( 'ABSPATH' ) || exit;

/**
 * Breadcrumbs class.
 */
class Breadcrumbs {

	use Hooker;

	/**
	 * Breadcrumb trail.
	 *
	 * @var array
	 */
	private $crumbs = [];

	/**
	 * Breadcrumb settings.
	 *
	 * @var array
	 */
	private $settings = [];

	/**
	 * String.
	 *
	 * @var array
	 */
	private $strings = [];

	/**
	 * Get an instance of the class.
	 *
	 * @return Breadcrumb The instancec.
	 */
	public static function get() {
		static $instance;

		$instance = false;
		if ( Helper::is_breadcrumbs_enabled() && false === $instance ) {
			$instance = new Breadcrumbs();
		}

		return $instance;
	}

	/**
	 * Convenience method to output as string.
	 *
	 * @return string
	 */
	public function __toString() {
		return $this->get_breadcrumb();
	}

	/**
	 * The Constructor
	 *
	 * @codeCoverageIgnore
	 */
	public function __construct() {
		$this->settings = wp_parse_args(
			$this->do_filter( 'frontend/breadcrumb/settings', [] ),
			[
				'home'            => Helper::get_settings( 'general.breadcrumbs_home' ),
				'separator'       => Helper::get_settings( 'general.breadcrumbs_separator' ),
				'remove_title'    => Helper::get_settings( 'general.breadcrumbs_remove_post_title' ),
				'hide_tax_name'   => Helper::get_settings( 'general.breadcrumbs_hide_taxonomy_name' ),
				'show_ancestors'  => Helper::get_settings( 'general.breadcrumbs_ancestor_categories' ),
				'show_blog'       => Helper::get_settings( 'general.breadcrumbs_blog_page' ),
				'show_pagination' => true,
			]
		);

		$this->strings = wp_parse_args(
			$this->do_filter( 'frontend/breadcrumb/strings', [] ),
			[
				'prefix'         => Helper::get_settings( 'general.breadcrumbs_prefix' ),
				'home'           => Helper::get_settings( 'general.breadcrumbs_home_label' ),
				'home_link'      => Helper::get_settings( 'general.breadcrumbs_home_link', home_url() ),
				'error404'       => Helper::get_settings( 'general.breadcrumbs_404_label' ),
				/* translators: search query */
				'search_format'  => Helper::get_settings( 'general.breadcrumbs_search_format' ),
				/* translators: archive title */
				'archive_format' => Helper::get_settings( 'general.breadcrumbs_archive_format' ),
			]
		);
	}

	/**
	 * Get the breadcrumbs.
	 *
	 * @param array $args Arguments.
	 * @return string
	 */
	public function get_breadcrumb( $args = [] ) {
		$args = $this->do_filter(
			'frontend/breadcrumb/args',
			wp_parse_args(
				$args,
				[
					'separator'   => $this->settings['separator'],
					'wrap_before' => '<nav aria-label="breadcrumbs" class="rank-math-breadcrumb"><p>',
					'wrap_after'  => '</p></nav>',
					'before'      => '',
					'after'       => '',
				]
			)
		);

		$html   = '';
		$crumbs = $this->get_crumbs();

		$remove_title = ( is_single() || is_page() ) && $this->settings['remove_title'];
		if ( $remove_title ) {
			array_pop( $crumbs );
		}
		$size = count( $crumbs );

		if ( ! empty( $this->strings['prefix'] ) ) {
			$html .= \sprintf( '<span class="label">%s</span> ', $this->strings['prefix'] );
		}

		foreach ( $crumbs as $key => $crumb ) {
			$link = ! empty( $crumb[1] ) && ( $remove_title || $size !== $key + 1 );
			$link = $link ? '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>' :
				'<span class="last">' . esc_html( $crumb[0] ) . '</span>';

			$html .= wp_kses_post( $args['before'] ) . $link . wp_kses_post( $args['after'] );

			if ( $size !== $key + 1 ) {
				$html .= '<span class="separator"> ' . wp_kses_post( $args['separator'] ) . ' </span>';
			}
		}

		$html = wp_kses_post( $args['wrap_before'] ) . $html . wp_kses_post( $args['wrap_after'] );

		/**
		 * Change the breadcrumbs HTML output.
		 *
		 * @param string      $html   HTML output.
		 * @param array       $crumbs The breadcrumbs array.
		 * @param Breadcrumbs $this   Current breadcrumb.
		 */
		return $this->do_filter( 'frontend/breadcrumb/html', wp_kses_post( $html ), $crumbs, $this );
	}

	/**
	 * Get the breadrumb trail.
	 *
	 * @return array
	 */
	public function get_crumbs() {
		if ( empty( $this->crumbs ) ) {
			$this->generate();
		}

		/**
		 * Change the breadcrumb items.
		 *
		 * @param array       $crumbs The breadcrumbs array.
		 * @param Breadcrumbs $this   Current breadcrumb.
		 */
		return $this->do_filter( 'frontend/breadcrumb/items', $this->crumbs, $this );
	}

	/**
	 * Add an item to the breadcrumbs.
	 *
	 * @param string $name           Name.
	 * @param string $link           Link.
	 * @param bool   $hide_in_schema Don't include in JSON-LD.
	 */
	private function add_crumb( $name, $link = '', $hide_in_schema = false ) {
		$this->crumbs[] = [
			wp_strip_all_tags( $name ),
			$link,
			'hide_in_schema' => $hide_in_schema,
		];
	}

	/**
	 * Generate the breadcrumb trail.
	 */
	private function generate() {
		$conditionals = [
			'is_home',
			'is_404',
			'is_search',
			'is_attachment',
			'is_shop',
			'is_product',
			'is_singular',
			'is_product_category',
			'is_product_tag',
			'is_post_type_archive',
			'is_category',
			'is_tag',
			'is_tax',
			'is_date',
			'is_author',
		];

		$this->maybe_add_home_crumb();

		if ( ! $this->can_generate() ) {
			return;
		}

		foreach ( $conditionals as $conditional ) {
			if ( function_exists( $conditional ) && call_user_func( $conditional ) ) {
				call_user_func( [ $this, 'add_crumbs_' . substr( $conditional, 3 ) ] );
				break;
			}
		}

		$this->maybe_add_page_crumb();
	}

	/**
	 * Can generate breadcrumb.
	 *
	 * @return bool
	 */
	private function can_generate() {
		return (
			! is_front_page() &&
			! (
				is_post_type_archive() &&
				function_exists( 'wc_get_page_id' ) &&
				intval( get_option( 'page_on_front' ) ) === wc_get_page_id( 'shop' ) )
			) ||
			is_paged();
	}

	/**
	 * Is home trail.
	 */
	private function add_crumbs_home() {
		$this->add_crumb( single_post_title( '', false ) );
	}

	/**
	 * 404 trail.
	 */
	private function add_crumbs_404() {
		$this->add_crumb( $this->strings['error404'] );
	}

	/**
	 * Search results trail.
	 */
	private function add_crumbs_search() {
		$this->add_crumb( $this->replace_placeholder( $this->strings['search_format'], get_search_query() ), Security::remove_query_arg_raw( 'paged' ) );
	}

	/**
	 * Attachment trail.
	 */
	private function add_crumbs_attachment() {
		global $post;

		$this->add_crumbs_singular( $post->post_parent, get_permalink( $post->post_parent ) );
		$this->add_crumb( $this->get_breadcrumb_title( 'post', get_the_ID(), get_the_title() ), get_permalink() );
	}

	/**
	 * Single product trail.
	 */
	private function add_crumbs_product() {
		global $post;

		$this->prepend_shop_page();
		$main_tax = Helper::get_settings( 'titles.pt_product_primary_taxonomy' );
		if ( $main_tax ) {
			$this->maybe_add_primary_term( get_the_terms( $post->ID, $main_tax ) );
		}

		if ( isset( $post->ID ) ) {
			$this->add_crumb( $this->get_breadcrumb_title( 'post', $post->ID, get_the_title( $post ) ), get_permalink( $post ) );
		}
	}

	/**
	 * Single post trail.
	 *
	 * @param int    $post_id   Post ID.
	 * @param string $permalink Post permalink.
	 */
	private function add_crumbs_singular( $post_id = 0, $permalink = '' ) {
		$post      = ! $post_id ? $GLOBALS['post'] : get_post( $post_id );
		$post_type = get_post_type( $post );
		$permalink = $permalink ? $permalink : get_permalink( $post );

		$this->add_crumbs_post_type_archive( $post_type );

		if ( ! isset( $post->ID ) || empty( $post->ID ) ) {
			return;
		}

		$this->maybe_add_blog();
		$main_tax = Helper::get_settings( 'titles.pt_' . $post_type . '_primary_taxonomy' );
		if ( isset( $post->post_parent ) && 0 === $post->post_parent && $main_tax ) {
			$this->maybe_add_primary_term( get_the_terms( $post, $main_tax ) );
		}

		if ( isset( $post->post_parent ) && 0 !== $post->post_parent ) {
			$this->add_post_ancestors( $post );
		}

		$this->add_crumb( $this->get_breadcrumb_title( 'post', $post->ID, get_the_title( $post ) ), $permalink );
	}

	/**
	 * Product category trail.
	 */
	private function add_crumbs_product_category() {
		$term = $GLOBALS['wp_query']->get_queried_object();
		$this->prepend_shop_page();
		$this->maybe_add_term_ancestors( $term );
		$this->add_crumb( $this->get_breadcrumb_title( 'term', $term, $term->name ), get_term_link( $term ) );
	}

	/**
	 * Product tag trail.
	 */
	private function add_crumbs_product_tag() {
		$term = $GLOBALS['wp_query']->get_queried_object();
		$this->prepend_shop_page();
		/* translators: %s: product tag */
		$this->add_crumb( sprintf( __( 'Products tagged &ldquo;%s&rdquo;', 'seo-by-rank-math' ), $this->get_breadcrumb_title( 'term', $term, $term->name ) ), get_term_link( $term ) );
	}

	/**
	 * Shop trail.
	 */
	private function add_crumbs_shop() {
		$shop_page_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'shop' ) : false;
		if ( intval( get_option( 'page_on_front' ) ) === $shop_page_id ) {
			return;
		}

		$name = $shop_page_id ? $this->get_breadcrumb_title( 'post', $shop_page_id, get_the_title( $shop_page_id ) ) : '';
		if ( ! $name ) {
			$post_type = get_post_type_object( 'product' );
			$name      = $post_type->labels->singular_name;
		}
		$this->add_crumb( $name, get_post_type_archive_link( 'product' ) );
	}

	/**
	 * Post type archive trail.
	 *
	 * @param string $post_type Post type.
	 */
	private function add_crumbs_post_type_archive( $post_type = null ) {
		if ( ! $post_type ) {
			$post_type = $GLOBALS['wp_query']->get( 'post_type' );
		}

		if ( 'post' === $post_type ) {
			return;
		}

		$type_object = get_post_type_object( $post_type );
		if ( ! empty( $type_object->has_archive ) ) {
			$this->add_crumb( $type_object->labels->name, get_post_type_archive_link( $post_type ) );
		}
	}

	/**
	 * Category trail.
	 */
	private function add_crumbs_category() {
		$this->maybe_add_blog();
		$term = $GLOBALS['wp_query']->get_queried_object();
		if ( empty( $term ) ) {
			return;
		}

		$this->maybe_add_term_ancestors( $term );
		$this->add_crumb( $this->get_breadcrumb_title( 'term', $term, $term->name ), get_term_link( $term ) );
	}

	/**
	 * Tag trail.
	 */
	private function add_crumbs_tag() {
		$this->maybe_add_blog();
		$term = $GLOBALS['wp_query']->get_queried_object();
		$this->add_crumb( $this->get_breadcrumb_title( 'term', $term, $term->name ), get_term_link( $term ) );
	}

	/**
	 * Taxonomies trail.
	 */
	private function add_crumbs_tax() {
		$term = $GLOBALS['wp_query']->get_queried_object();
		if ( ! $this->settings['hide_tax_name'] ) {
			$taxonomy = get_taxonomy( $term->taxonomy );
			$this->add_crumb( $taxonomy->labels->name );
		}

		$this->maybe_add_term_ancestors( $term );
		$this->add_crumb( $this->get_breadcrumb_title( 'term', $term, $term->name ), get_term_link( $term ) );
	}

	/**
	 * Trail for date based archives.
	 */
	private function add_crumbs_date() {
		if ( is_year() || is_month() || is_day() ) {
			$this->add_crumb( $this->replace_placeholder( $this->strings['archive_format'], get_the_time( 'Y' ) ), get_year_link( get_the_time( 'Y' ) ) );
		}
		if ( is_month() || is_day() ) {
			$this->add_crumb( $this->replace_placeholder( $this->strings['archive_format'], get_the_time( 'F' ) ), get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) );
		}
		if ( is_day() ) {
			$this->add_crumb( $this->replace_placeholder( $this->strings['archive_format'], get_the_time( 'd' ) ) );
		}
	}

	/**
	 * Trail for author archives.
	 */
	private function add_crumbs_author() {
		global $author;

		$userdata = get_userdata( $author );
		if ( ! $userdata || ! is_object( $userdata ) || ! isset( $userdata->ID ) ) {
			return;
		}

		$this->add_crumb( $this->replace_placeholder( $this->strings['archive_format'], $this->get_breadcrumb_title( 'user', $userdata->ID, $userdata->display_name ) ) );
	}

	/**
	 * Single post trail.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast (https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @param WP_Post $post Post object.
	 */
	private function add_post_ancestors( $post ) {
		$ancestors = [];
		if ( isset( $post->ancestors ) ) {
			$ancestors = is_array( $post->ancestors ) ? array_values( $post->ancestors ) : [ $post->ancestors ];
		} elseif ( isset( $post->post_parent ) ) {
			$ancestors = [ $post->post_parent ];
		}

		if ( ! is_array( $ancestors ) ) {
			return;
		}

		$ancestors = array_reverse( $ancestors );
		foreach ( $ancestors as $ancestor ) {
			$this->add_crumb( $this->get_breadcrumb_title( 'post', $ancestor, get_the_title( $ancestor ) ), get_permalink( $ancestor ) );
		}
	}

	/**
	 * Prepend the shop page to the shop trail.
	 */
	private function prepend_shop_page() {
		$shop_page_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'shop' ) : false;
		$shop_page    = get_post( $shop_page_id );

		// If permalinks contain the shop page in the URI prepend the breadcrumb with shop.
		if ( $shop_page_id && $shop_page && $this->is_using_shop_base( $shop_page ) && intval( get_option( 'page_on_front' ) ) !== $shop_page_id ) {
			$this->add_crumb( $this->get_breadcrumb_title( 'post', $shop_page_id, get_the_title( $shop_page ) ), get_permalink( $shop_page ) );
		}
	}

	/**
	 * Checks if the permalinks product base is using the shop base.
	 *
	 * @param \WP_Post $shop_page The shop page.
	 *
	 * @return bool
	 */
	private function is_using_shop_base( $shop_page ) {
		$permalinks         = wc_get_permalink_structure();
		$is_using_shop_base = isset( $permalinks['product_base'] ) && strstr( $permalinks['product_base'], '/' . $shop_page->post_name );

		/**
		 * Allows to filter the "is using shop base" condition.
		 *
		 * @param bool True if using shop base or false otherwise.
		 */
		return $this->do_filter( 'frontend/breadcrumb/is_using_shop_base', $is_using_shop_base );
	}
	/**
	 * Get the primary term.
	 *
	 * @param WP_Term[]|false|WP_Error $terms Terms attached to the current post.
	 */
	private function maybe_add_primary_term( $terms ) {
		// Early Bail!
		if ( is_wp_error( $terms ) || empty( $terms ) ) {
			return;
		}

		/**
		 * Allow changing the primary term output of the breadcrumbs class.
		 *
		 * @param WP_Term $term  Primary term.
		 * @param array   $terms Terms attached to the current post.
		 */
		$term = $this->do_filter( 'frontend/breadcrumb/main_term', $terms[0], $terms );
		$this->maybe_add_term_ancestors( $term );
		$this->add_crumb( $this->get_breadcrumb_title( 'term', $term, $term->name ), get_term_link( $term ) );
	}

	/**
	 * Add ancestor taxonomy crumbs to the hierarchical taxonomy trails.
	 *
	 * @param object $term Term data object.
	 */
	private function maybe_add_term_ancestors( $term ) {
		// Early Bail!
		if ( ! $this->can_add_term_ancestors( $term ) ) {
			return;
		}

		$ancestors = get_ancestors( $term->term_id, $term->taxonomy );
		$ancestors = array_reverse( $ancestors );

		foreach ( $ancestors as $ancestor ) {
			$ancestor = get_term( $ancestor, $term->taxonomy );
			if ( ! is_wp_error( $ancestor ) && $ancestor ) {
				$this->add_crumb( $this->get_breadcrumb_title( 'term', $ancestor, $ancestor->name ), get_term_link( $ancestor ) );
			}
		}
	}

	/**
	 * Can add ancestor taxonomy crumbs to the hierarchical taxonomy trails.
	 *
	 * @param object $term Term data object.
	 *
	 * @return bool
	 */
	private function can_add_term_ancestors( $term ) {
		if ( empty( $term ) || 0 === $term->parent || false === $this->settings['show_ancestors'] || false === is_taxonomy_hierarchical( $term->taxonomy ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Add a page crumb to paginated trails.
	 *
	 * @since 1.0.8
	 */
	private function maybe_add_page_crumb() {
		if ( empty( $this->settings['show_pagination'] ) || ! is_paged() ) {
			return;
		}

		$current_page = get_query_var( 'paged', 1 );
		if ( $current_page <= 1 ) {
			return;
		}

		/* translators: %s expands to the current page number */
		$this->add_crumb( sprintf( esc_html__( 'Page %s', 'seo-by-rank-math' ), $current_page ), '', true );
	}

	/**
	 * Add home label.
	 */
	private function maybe_add_home_crumb() {
		if ( ! empty( $this->settings['home'] ) ) {
			$this->add_crumb( $this->strings['home'], $this->strings['home_link'] );
		}
	}

	/**
	 * Get the Blog Page.
	 *
	 * @since 1.0.33
	 */
	private function maybe_add_blog() {
		// Early Bail!
		$blog_id = get_option( 'page_for_posts' );
		if ( ! $blog_id || ! $this->can_add_blog() ) {
			return;
		}

		$this->add_crumb( $this->get_breadcrumb_title( 'post', $blog_id, get_the_title( $blog_id ) ), get_permalink( $blog_id ) );
	}

	/**
	 * Can add Blog page crumb.
	 *
	 * @since 1.0.33
	 *
	 * @return bool
	 */
	private function can_add_blog() {
		if ( empty( $this->settings['show_blog'] ) || 'page' !== get_option( 'show_on_front' ) ) {
			return false;
		}

		if ( ! is_singular( 'post' ) && ! is_category() && ! is_tag() ) {
			return false;
		}

		return true;
	}

	/**
	 * Get the breadcrumb title.
	 *
	 * @param  string $object_type   Object type.
	 * @param  int    $object_id     Object ID to get the title for.
	 * @param  string $default_value Default value to use for title.
	 * @return string
	 */
	private function get_breadcrumb_title( $object_type, $object_id, $default_value ) {
		$title = '';
		if ( 'post' === $object_type ) {
			$title = Helper::get_post_meta( 'breadcrumb_title', $object_id );
		} elseif ( 'term' === $object_type ) {
			$title = Helper::get_term_meta( 'breadcrumb_title', $object_id );
		} elseif ( 'user' === $object_type ) {
			$title = Helper::get_user_meta( 'breadcrumb_title', $object_id );
		}

		return $title ? $title : $default_value;
	}

	/**
	 * Replace placeholder in breadcrumb string.
	 *
	 * @param string $text  Text with placeholder.
	 * @param string $query Query to replace.
	 * @return string
	 */
	private function replace_placeholder( $text, $query ) {
		return preg_replace( '/%s(?=\s|%|$)/', $query, $text );
	}
}
PK     –ŠU]3zóXþ  þ  )  includes/frontend/paper/class-archive.phpnu „[µü¤        <?php
/**
 * The PostArchive Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Archive class.
 */
class Archive implements IPaper {

	/**
	 * Build the title for a post type archive.
	 *
	 * @return string
	 */
	public function title() {
		$post_type = $this->get_queried_post_type();

		return Paper::get_from_options( "pt_{$post_type}_archive_title", [], '%pt_plural% Archive %page% %sep% %sitename%' );
	}

	/**
	 * Build the description for a post type archive.
	 *
	 * @return string
	 */
	public function description() {
		$post_type = $this->get_queried_post_type();

		return Paper::get_from_options( "pt_{$post_type}_archive_description", [], '%pt_plural% Archive %page% %sep% %sitename%' );
	}

	/**
	 * Retrieves the robots for a post type archive.
	 *
	 * @return string The robots to use on a post type archive.
	 */
	public function robots() {
		$robots    = [];
		$post_type = $this->get_queried_post_type();

		if ( Helper::get_settings( "titles.pt_{$post_type}_custom_robots" ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( "titles.pt_{$post_type}_robots" ) );
		}

		return $robots;
	}

	/**
	 * Retrieves the advanced robots for a post type archive.
	 *
	 * @return array The advanced robots to use on a post type archive.
	 */
	public function advanced_robots() {
		$robots    = [];
		$post_type = $this->get_queried_post_type();

		if ( Helper::get_settings( "titles.pt_{$post_type}_custom_robots" ) ) {
			$robots = Paper::advanced_robots_combine( Helper::get_settings( "titles.pt_{$post_type}_advanced_robots" ) );
		}

		return $robots;
	}

	/**
	 * Get the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return [ 'canonical' => get_post_type_archive_link( $this->get_queried_post_type() ) ];
	}

	/**
	 * Get the meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}

	/**
	 * Get the queried post type.
	 *
	 * @return string
	 */
	private function get_queried_post_type() {
		$post_type = get_query_var( 'post_type' );
		if ( is_array( $post_type ) ) {
			$post_type = reset( $post_type );
		}

		return $post_type;
	}
}
PK     –ŠU]¯]§g4  g4  '  includes/frontend/paper/class-paper.phpnu „[µü¤        <?php
/**
 * The Paper Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Post;
use RankMath\Helper;
use RankMath\Sitemap\Router;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Helpers\Security;

defined( 'ABSPATH' ) || exit;

/**
 * Paper class.
 */
class Paper {

	use Hooker;

	/**
	 * Hold the class instance.
	 *
	 * @var object
	 */
	private static $instance = null;

	/**
	 * Hold current paper object.
	 *
	 * @var IPaper
	 */
	private $paper = null;

	/**
	 * Hold title.
	 *
	 * @var string
	 */
	private $title = null;

	/**
	 * Hold description.
	 *
	 * @var string
	 */
	private $description = null;

	/**
	 * Hold robots.
	 *
	 * @var array
	 */
	private $robots = null;

	/**
	 * Hold canonical.
	 *
	 * @var array
	 */
	private $canonical = null;

	/**
	 * Hold keywords.
	 *
	 * @var string
	 */
	private $keywords = null;

	/**
	 * Initialize object
	 *
	 * @return object Post|Term|User.
	 */
	public static function get() {
		if ( ! is_null( self::$instance ) ) {
			return self::$instance;
		}

		self::$instance = new Paper();
		self::$instance->setup();
		return self::$instance;
	}

	/**
	 * Setup paper.
	 */
	private function setup() {
		foreach ( $this->get_papers() as $class_name => $is_valid ) {
			if ( $this->do_filter( 'paper/is_valid/' . strtolower( $class_name ), $is_valid ) ) {
				$class_name  = '\\RankMath\\Paper\\' . $class_name;
				$this->paper = new $class_name();
				break;
			}
		}

		if ( ! method_exists( $this->paper, 'set_object' ) ) {
			return;
		}

		if ( Post::is_home_static_page() ) {
			$this->paper->set_object( get_queried_object() );
		} elseif ( Post::is_simple_page() ) {
			$post = Post::get( Post::get_page_id() );
			$this->paper->set_object( $post->get_object() );
		}
	}

	/**
	 * Get papers types.
	 *
	 * @return array
	 */
	private function get_papers() {
		return $this->do_filter(
			'paper/hash',
			[
				'Search'    => is_search(),
				'Shop'      => Post::is_shop_page(),
				'Singular'  => Post::is_home_static_page() || Post::is_simple_page(),
				'Blog'      => Post::is_home_posts_page(),
				'Author'    => is_author() || ( Helper::is_module_active( 'bbpress' ) && function_exists( 'bbp_is_single_user' ) && bbp_is_single_user() ),
				'Date'      => is_date(),
				'Taxonomy'  => is_category() || is_tag() || is_tax(),
				'Archive'   => is_archive(),
				'Error_404' => is_404(),
				'Misc'      => true,
			]
		);
	}

	/**
	 * Get title after sanitization.
	 *
	 * @return string
	 */
	public function get_title() {
		if ( ! is_null( $this->title ) ) {
			return $this->title;
		}

		/**
		 * Allow changing the title.
		 *
		 * @param string $title The page title being put out.
		 */
		$this->title = $this->do_filter( 'frontend/title', $this->paper->title() );

		// Early Bail!!
		if ( '' === $this->title ) {
			return $this->title;
		}

		// Remove excess whitespace.
		$this->title = preg_replace( '[\s\s+]', ' ', $this->title );

		// Capitalize Titles.
		if ( Helper::get_settings( 'titles.capitalize_titles' ) ) {
			$this->title = Str::mb_ucwords( $this->title );
		}

		$this->title = wp_strip_all_tags( stripslashes( $this->title ), true );
		$this->title = esc_html( $this->title );
		$this->title = convert_smilies( $this->title );

		return $this->title;
	}

	/**
	 * Get description after sanitization.
	 *
	 * @return string
	 */
	public function get_description() {
		if ( ! is_null( $this->description ) ) {
			return $this->description;
		}

		/**
		* Allow changing the meta description sentence.
		*
		* @param string $description The description sentence.
		*/
		$this->description = $this->do_filter( 'frontend/description', trim( $this->paper->description() ) );

		// Early Bail!!
		if ( '' === $this->description ) {
			return $this->description;
		}

		$this->description = wp_strip_all_tags( stripslashes( $this->description ), true );
		$this->description = esc_attr( $this->description );

		return $this->description;
	}

	/**
	 * Get robots after sanitization.
	 *
	 * @return array
	 */
	public function get_robots() {
		if ( ! is_null( $this->robots ) ) {
			return $this->robots;
		}

		$this->robots = $this->paper->robots();
		if ( empty( $this->robots ) ) {
			$this->robots = self::robots_combine( Helper::get_settings( 'titles.robots_global' ) );
		}
		$this->validate_robots();
		$this->respect_settings_for_robots();

		/**
		 * Allows filtering of the meta robots.
		 *
		 * @param array $robots The meta robots directives to be echoed.
		 */
		$this->robots = $this->do_filter( 'frontend/robots', array_unique( $this->robots ) );
		$this->advanced_robots();

		return $this->robots;
	}

	/**
	 * Validate robots.
	 */
	private function validate_robots() {
		if ( empty( $this->robots ) || ! is_array( $this->robots ) ) {
			$this->robots = [
				'index'  => 'index',
				'follow' => 'follow',
			];
			return;
		}

		$this->robots = array_intersect_key(
			$this->robots,
			[
				'index'        => '',
				'follow'       => '',
				'noarchive'    => '',
				'noimageindex' => '',
				'nosnippet'    => '',
			]
		);

		// Add Index and Follow.
		if ( ! isset( $this->robots['index'] ) ) {
			$this->robots = [ 'index' => 'index' ] + $this->robots;
		}
		if ( ! isset( $this->robots['follow'] ) ) {
			$this->robots = [ 'follow' => 'follow' ] + $this->robots;
		}
	}

	/**
	 * Add Advanced robots.
	 */
	private function advanced_robots() {
		// Early Bail if robots is set to noindex or nosnippet!
		if ( ( isset( $this->robots['index'] ) && 'noindex' === $this->robots['index'] ) || ( isset( $this->robots['nosnippet'] ) && 'nosnippet' === $this->robots['nosnippet'] ) ) {
			return;
		}

		$advanced_robots = $this->paper->advanced_robots();
		if ( ! is_array( $advanced_robots ) ) {
			$advanced_robots = wp_parse_args(
				Helper::get_settings( 'titles.advanced_robots_global' ),
				[
					'max-snippet'       => -1,
					'max-video-preview' => -1,
					'max-image-preview' => 'large',
				]
			);

			$advanced_robots = self::advanced_robots_combine( $advanced_robots );
		}

		$advanced_robots = array_intersect_key(
			$advanced_robots,
			[
				'max-snippet'       => '',
				'max-video-preview' => '',
				'max-image-preview' => '',
			]
		);

		/**
		 * Allows filtering of the advanced meta robots.
		 *
		 * @param array $robots The meta robots directives to be echoed.
		 */
		$advanced_robots = $this->do_filter( 'frontend/advanced_robots', array_unique( $advanced_robots ) );

		$this->robots = ! empty( $advanced_robots ) ? $this->robots + $advanced_robots : $this->robots;
	}

	/**
	 * Get focus keywords
	 *
	 * @return string
	 */
	public function get_keywords() {
		if ( ! is_null( $this->keywords ) ) {
			return $this->keywords;
		}

		/**
		 * Allows filtering of the meta keywords.
		 *
		 * @param array $keywords The meta keywords to be echoed.
		 */
		$this->keywords = $this->do_filter( 'frontend/keywords', $this->paper->keywords() );

		return $this->keywords;
	}

	/**
	 * Respect some robots settings.
	 */
	private function respect_settings_for_robots() {
		// If blog is not public or replytocom is set, then force noindex.
		if ( 0 === absint( get_option( 'blog_public' ) ) || isset( $_GET['replytocom'] ) ) {
			$this->robots['index']  = 'noindex';
			$this->robots['follow'] = 'nofollow';
		}

		// Force noindex for sub-pages.
		if ( is_paged() && Helper::get_settings( 'titles.noindex_archive_subpages' ) ) {
			$this->robots['index'] = 'noindex';
		}
	}

	/**
	 * Get canonical after sanitization.
	 *
	 * @param bool $un_paged    Whether or not to return the canonical with or without pagination added to the URL.
	 * @param bool $no_override Whether or not to return a manually overridden canonical.
	 *
	 * @return string
	 */
	public function get_canonical( $un_paged = false, $no_override = false ) {
		if ( is_null( $this->canonical ) ) {
			$this->generate_canonical();
		}

		$canonical = $this->canonical['canonical'];
		if ( $un_paged ) {
			$canonical = $this->canonical['canonical_unpaged'];
		} elseif ( $no_override ) {
			$canonical = $this->canonical['canonical_no_override'];
		}

		return $canonical;
	}

	/**
	 * Generate canonical URL parts.
	 */
	private function generate_canonical() {
		$this->canonical = wp_parse_args(
			$this->paper->canonical(),
			[
				'canonical'          => false,
				'canonical_unpaged'  => false,
				'canonical_override' => false,
			]
		);
		extract( $this->canonical ); // phpcs:ignore

		if ( is_front_page() || ( function_exists( 'ampforwp_is_front_page' ) && ampforwp_is_front_page() ) ) {
			$canonical = user_trailingslashit( home_url() );
		}

		// If not singular than we can have pagination.
		if ( ! is_singular() ) {
			$canonical_unpaged = $canonical;
			$canonical         = $this->get_canonical_paged( $canonical );
		}

		$this->canonical['canonical_unpaged']     = $canonical_unpaged;
		$this->canonical['canonical_no_override'] = $canonical;

		// Force absolute URLs for canonicals.
		$canonical = Str::is_non_empty( $canonical ) && true === Url::is_relative( $canonical ) ? $this->base_url( $canonical ) : $canonical;
		$canonical = Str::is_non_empty( $canonical_override ) ? $canonical_override : $canonical;

		/**
		 * Filter the canonical URL.
		 *
		 * @param string $canonical The canonical URL.
		 */
		$this->canonical['canonical'] = apply_filters( 'rank_math/frontend/canonical', $canonical );
	}

	/**
	 * Get the paged version of the canonical URL if needed.
	 *
	 * @param string $canonical The canonical URL.
	 *
	 * @return string
	 */
	private function get_canonical_paged( $canonical ) {
		global $wp_rewrite;

		if ( ! $canonical || get_query_var( 'paged' ) < 2 ) {
			return $canonical;
		}

		if ( ! $wp_rewrite->using_permalinks() ) {
			return Security::add_query_arg_raw(
				'paged',
				get_query_var( 'paged' ),
				is_front_page() ? trailingslashit( $canonical ) : $canonical
			);
		}

		return user_trailingslashit(
			trailingslashit( is_front_page() ? Router::get_base_url( '' ) : $canonical ) .
			trailingslashit( $wp_rewrite->pagination_base ) .
			get_query_var( 'paged' )
		);
	}

	/**
	 * Get the base URL for relative URLs by parsing the home URL.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast (https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @param  string $path Optional path string.
	 * @return string
	 */
	private function base_url( $path = null ) {
		$parts    = wp_parse_url( get_option( 'home' ) );
		$base_url = trailingslashit( $parts['scheme'] . '://' . $parts['host'] );

		if ( ! is_null( $path ) ) {
			$base_url .= ltrim( $path, '/' );
		}

		return $base_url;
	}

	/**
	 * Get title or description option from the settings.
	 * The results will be run through the Helper::replace_vars() function.
	 *
	 * @param string       $id            Name of the option we are looking for.
	 * @param object|array $args          Object to pass to the replace_vars function.
	 * @param string       $default_value Default value if nothing found.
	 *
	 * @return string
	 */
	public static function get_from_options( $id, $args = [], $default_value = '' ) {
		$value = Helper::get_settings( "titles.$id" );

		// Break loop.
		if ( ! Str::ends_with( 'default_snippet_name', $value ) && ! Str::ends_with( 'default_snippet_desc', $value ) ) {
			$value = \str_replace(
				[ '%seo_title%', '%seo_description%' ],
				[ '%title%', '%excerpt%' ],
				$value
			);
		}

		return Helper::replace_vars( '' !== $value ? $value : $default_value, $args );
	}

	/**
	 * Make robots values as keyed array.
	 *
	 * @param array $robots        Main instance.
	 * @param bool  $default_value Append default.
	 *
	 * @return array
	 */
	public static function robots_combine( $robots, $default_value = false ) {
		if ( empty( $robots ) || ! is_array( $robots ) ) {
			return ! $default_value ? [] : [
				'index'  => 'index',
				'follow' => 'follow',
			];
		}

		$robots = array_combine( $robots, $robots );

		// Fix noindex key to index.
		if ( isset( $robots['noindex'] ) ) {
			$robots = [ 'index' => $robots['noindex'] ] + $robots;
			unset( $robots['noindex'] );
		}

		// Fix nofollow key to follow.
		if ( isset( $robots['nofollow'] ) ) {
			$robots = [ 'follow' => $robots['nofollow'] ] + $robots;
			unset( $robots['nofollow'] );
		}

		return $robots;
	}

	/**
	 * Make robots values as keyed array.
	 *
	 * @param array $advanced_robots  Main instance.
	 *
	 * @return array
	 */
	public static function advanced_robots_combine( $advanced_robots ) {
		if ( empty( $advanced_robots ) ) {
			return;
		}

		$robots = [];
		foreach ( $advanced_robots as $key => $data ) {
			if ( $data ) {
				$robots[ $key ] = $key . ':' . $data;
			}
		}
		return $robots;
	}

	/**
	 * Should apply shortcode on content.
	 *
	 * @return bool
	 */
	public static function should_apply_shortcode() {
		if (
			Post::is_woocommerce_page() ||
			( function_exists( 'is_wcfm_page' ) && is_wcfm_page() )
		) {
			return false;
		}

		return apply_filters( 'rank_math/paper/auto_generated_description/apply_shortcode', false );
	}

	/**
	 * Clears and reinitializes the object.
	 */
	public static function reset() {
		self::$instance = null;
		return self::get();
	}
}
PK     –ŠU]»³T�²  ²  &  includes/frontend/paper/class-misc.phpnu „[µü¤        <?php
/**
 * The Misc paper.
 *
 * @since      1.0.28
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Misc class.
 */
class Misc implements IPaper {

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title() {
		return '';
	}

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description() {
		return '';
	}

	/**
	 * Retrieves the robots.
	 *
	 * @return string
	 */
	public function robots() {
		return [];
	}

	/**
	 * Retrieves the advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		return [];
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return [];
	}

	/**
	 * Retrieves meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}
}
PK     –ŠU]’Ý    &  includes/frontend/paper/class-date.phpnu „[µü¤        <?php
/**
 * The Date Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Date class.
 */
class Date implements IPaper {

	/**
	 * Get the SEO title for a date archive.
	 *
	 * @return string
	 */
	public function title() {
		return Paper::get_from_options( 'date_archive_title' );
	}

	/**
	 * Get the SEO description for a date archive.
	 *
	 * @return string
	 */
	public function description() {
		return Paper::get_from_options( 'date_archive_description' );
	}

	/**
	 * Get the robots meta for a date archive.
	 *
	 * @return string
	 */
	public function robots() {
		$robots = [];
		$robots = Paper::robots_combine( Helper::get_settings( 'titles.date_archive_robots' ) );
		if ( Helper::get_settings( 'titles.disable_date_archives' ) ) {
			$robots['index'] = 'noindex';
		}

		return $robots;
	}

	/**
	 * Get the advanced robots meta for a date archive.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		return Paper::advanced_robots_combine( Helper::get_settings( 'titles.date_advanced_robots' ) );
	}

	/**
	 * Get the canonical URL for the current page.
	 *
	 * @return array
	 */
	public function canonical() {
		$canonical = '';
		if ( is_day() ) {
			$canonical = get_day_link( get_query_var( 'year' ), get_query_var( 'monthnum' ), get_query_var( 'day' ) );
		} elseif ( is_month() ) {
			$canonical = get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) );
		} elseif ( is_year() ) {
			$canonical = get_year_link( get_query_var( 'year' ) );
		}

		return [ 'canonical' => $canonical ];
	}

	/**
	 * Get the meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}
}
PK     –ŠU]Ô]Aÿ      (  includes/frontend/paper/class-search.phpnu „[µü¤        <?php
/**
 * The Search Results paper.
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Search results.
 */
class Search implements IPaper {

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title() {
		return Paper::get_from_options( 'search_title', [], 'Searched for %search_query% %page% %sep% %sitename%' );
	}

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description() {
		return '';
	}

	/**
	 * Retrieves the robots.
	 *
	 * @return string
	 */
	public function robots() {
		return Helper::get_settings( 'titles.noindex_search' ) ? [ 'index' => 'noindex' ] : [];
	}

	/**
	 * Retrieves the advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		return [];
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		$search_query = get_search_query();
		return [ 'canonical' => ! empty( $search_query ) && ! preg_match( '|^page/\d+$|', $search_query ) ? get_search_link() : '' ];
	}

	/**
	 * Retrieves meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}
}
PK     –ŠU]‘‘ˆB'  '  +  includes/frontend/paper/class-error-404.phpnu „[µü¤        <?php
/**
 * The 404 paper.
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * 404 Error.
 */
class Error_404 implements IPaper {

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title() {
		return Paper::get_from_options( '404_title', [], esc_html__( 'Page not found', 'seo-by-rank-math' ) );
	}

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description() {
		return '';
	}

	/**
	 * Retrieves the robots.
	 *
	 * @return string
	 */
	public function robots() {
		return [ 'index' => 'noindex' ];
	}

	/**
	 * Retrieves the advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		return [];
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return [];
	}

	/**
	 * Retrieves meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}
}
PK     –ŠU]�2-\  \  +  includes/frontend/paper/interface-paper.phpnu „[µü¤        <?php
/**
 * The Paper Interface
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Paper interface.
 */
interface IPaper {

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title();

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description();

	/**
	 * Retrieves the robots.
	 *
	 * @return string
	 */
	public function robots();

	/**
	 * Retrieves the advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots();

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical();

	/**
	 * Retrieves the keywords.
	 *
	 * @return string The focus keywords.
	 */
	public function keywords();
}
PK     –ŠU]Hr¬çŸ  Ÿ  *  includes/frontend/paper/class-taxonomy.phpnu „[µü¤        <?php
/**
 * The Term Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Term;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Taxonomy class.
 */
class Taxonomy implements IPaper {

	/**
	 * Retrieves the SEO title for a taxonomy.
	 *
	 * @return string The SEO title for the taxonomy.
	 */
	public function title() {
		$object = get_queried_object();
		if ( ! is_object( $object ) ) {
			return Paper::get_from_options( '404_title', [], esc_html__( 'Page not found', 'seo-by-rank-math' ) );
		}

		$title = Term::get_meta( 'title', $object, $object->taxonomy );
		if ( '' !== $title ) {
			return $title;
		}

		return Paper::get_from_options( "tax_{$object->taxonomy}_title", $object );
	}

	/**
	 * Retrieves the SEO description for a taxonomy.
	 *
	 * @return string The SEO description for the taxonomy.
	 */
	public function description() {
		$object      = get_queried_object();
		$description = Term::get_meta( 'description', $object, $object->taxonomy );
		if ( '' !== $description ) {
			return $description;
		}

		return Paper::get_from_options( "tax_{$object->taxonomy}_description", $object );
	}

	/**
	 * Retrieves the robots for a taxonomy.
	 *
	 * @return string The robots for the taxonomy
	 */
	public function robots() {
		$object = get_queried_object();
		$robots = Paper::robots_combine( Term::get_meta( 'robots', $object ) );

		if ( is_object( $object ) && empty( $robots ) && Helper::get_settings( "titles.tax_{$object->taxonomy}_custom_robots" ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( "titles.tax_{$object->taxonomy}_robots" ), true );
		}

		if ( $this->noindex_term( $object ) ) {
			$robots['index'] = 'noindex';
		}

		return $robots;
	}

	/**
	 * Retrieves the advanced robots for a taxonomy.
	 *
	 * @return array The advanced robots for the taxonomy
	 */
	public function advanced_robots() {
		$object = get_queried_object();
		$robots = Paper::advanced_robots_combine( Term::get_meta( 'advanced_robots', $object ) );

		if ( is_object( $object ) && empty( $robots ) && Helper::get_settings( "titles.tax_{$object->taxonomy}_custom_robots" ) ) {
			$robots = Paper::advanced_robots_combine( Helper::get_settings( "titles.tax_{$object->taxonomy}_advanced_robots" ), true );
		}

		return $robots;
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		$object = get_queried_object();

		if ( empty( $object ) || Term::is_multiple_terms_query() ) {
			return [];
		}

		$term_link = get_term_link( $object, $object->taxonomy );

		return [
			'canonical'          => is_wp_error( $term_link ) ? '' : $term_link,
			'canonical_override' => Term::get_meta( 'canonical_url', $object, $object->taxonomy ),
		];
	}

	/**
	 * Retrieves the keywords.
	 *
	 * @return string The focus keywords.
	 */
	public function keywords() {
		$object = get_queried_object();

		if ( empty( $object ) || Term::is_multiple_terms_query() ) {
			return '';
		}

		return Term::get_meta( 'focus_keyword', $object, $object->taxonomy );
	}

	/**
	 * Whether to noindex empty terms.
	 *
	 * @param object $term Current taxonomy term object.
	 *
	 * @return bool
	 */
	private function noindex_term( $term ) {
		if ( Term::is_multiple_terms_query() ) {
			return true;
		}

		if ( is_object( $term ) && 0 === $term->count && Helper::get_settings( 'titles.noindex_empty_taxonomies' ) ) {
			$children = get_terms(
				[
					'taxonomy' => $term->taxonomy,
					'parent'   => $term->term_id,
					'number'   => 1,
					'fields'   => 'ids',
				]
			);

			if ( empty( $children ) ) {
				return true;
			}
		}

		return false;
	}
}
PK     –ŠU]´_é”'  '  *  includes/frontend/paper/class-singular.phpnu „[µü¤        <?php
/**
 * The Singular Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Post;
use RankMath\Helper;
use RankMath\Helpers\Security;
use RankMath\Helpers\Str;
use RankMath\OpenGraph\OpenGraph;

defined( 'ABSPATH' ) || exit;

/**
 * Singular class.
 */
class Singular implements IPaper {

	/**
	 * Post object.
	 *
	 * @var WP_Post
	 */
	private $object;

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title() {
		return $this->get_post_title( $this->object );
	}

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description() {
		return $this->get_post_description( $this->object );
	}

	/**
	 * Retrieves the robots.
	 *
	 * @return string
	 */
	public function robots() {
		return $this->get_post_robots( $this->object );
	}

	/**
	 * Retrieves the advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		return $this->get_post_advanced_robots( $this->object );
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		$object_id          = Post::get_page_id();
		$canonical          = get_permalink( $object_id );
		$canonical_unpaged  = $canonical;
		$canonical_override = Post::get_meta( 'canonical_url', $object_id );

		/**
		 * Fix paginated pages canonical, but only if the page is truly paginated.
		 *
		 * @copyright Copyright (C) 2008-2019, Yoast BV
		 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
		 */
		if ( is_singular() && get_query_var( 'page' ) > 1 ) {
			$num_pages = ( substr_count( get_queried_object()->post_content, '<!--nextpage-->' ) + 1 );
			if ( $num_pages && get_query_var( 'page' ) <= $num_pages ) {
				global $wp_rewrite;
				$canonical = ! $wp_rewrite->using_permalinks() ? Security::add_query_arg_raw( 'page', get_query_var( 'page' ), $canonical ) :
					user_trailingslashit( trailingslashit( $canonical ) . get_query_var( 'page' ) );
			}
		}

		return [
			'canonical'          => $canonical,
			'canonical_unpaged'  => $canonical,
			'canonical_override' => $canonical_override,
		];
	}

	/**
	 * Retrieves meta keywords.
	 *
	 * @return string The focus keywords.
	 */
	public function keywords() {
		return Post::get_meta( 'focus_keyword', $this->object->ID );
	}

	/**
	 * Set post object.
	 *
	 * @param WP_Post $post Current post object.
	 */
	public function set_object( $post ) {
		$this->object = $post;
	}

	/**
	 * Get all SEO metadata for a post as a structured array.
	 *
	 * Uses existing Singular and Opengraph methods to ensure frontend fallback logic is applied consistently.
	 *
	 * @since 1.0.272
	 *
	 * @param int $post_id Post ID.
	 * @return array
	 */
	public function get_seo_meta( int $post_id ): array {
		$post = get_post( $post_id );
		if ( ! $post ) {
			return [ 'error' => esc_html__( 'Post not found.', 'seo-by-rank-math' ) ];
		}

		$this->set_object( $post );

		// Set post context so template variables and query-dependent functions resolve correctly.
		$prev_post       = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
		$GLOBALS['post'] = $post; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
		setup_postdata( $post );

		rank_math()->variables->setup();

		$seo_title       = $this->title();
		$seo_description = $this->description();

		// Derive canonical from $post_id directly â€” canonical() depends on the active WP query
		// and may return get_permalink(0) outside a real frontend request.
		$canonical_override = Post::get_meta( 'canonical_url', $post_id );
		$canonical          = ! empty( $canonical_override ) ? $canonical_override : get_permalink( $post_id );

		// Use OpenGraph directly to avoid extra hooks registered by Facebook/Twitter constructors.
		$facebook          = new OpenGraph();
		$facebook->network = 'facebook';
		$facebook->prefix  = 'facebook';

		$twitter          = new OpenGraph();
		$twitter->network = 'twitter';
		$twitter->prefix  = Helper::get_post_meta( 'twitter_use_facebook', $post_id, true ) ? 'facebook' : 'twitter';

		$og_title       = $facebook->get_title( $post_id );
		$og_description = $facebook->get_description( $post_id );
		$tw_title       = $twitter->get_title( $post_id );
		$tw_description = $twitter->get_description( $post_id );

		$result = [
			'post_id'             => $post_id,
			'title'               => $seo_title,
			'description'         => $seo_description,
			'focus_keyword'       => $this->keywords(),
			'robots'              => array_values( $this->get_effective_robots() ),
			'canonical'           => (string) $canonical,
			'og_title'            => $og_title ? $og_title : $seo_title,
			'og_description'      => $og_description ? $og_description : $seo_description,
			'twitter_title'       => $tw_title ? $tw_title : $seo_title,
			'twitter_description' => $tw_description ? $tw_description : $seo_description,
			'seo_score'           => (int) Post::get_meta( 'seo_score', $post_id ),
		];

		wp_reset_postdata();
		$GLOBALS['post'] = $prev_post; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited

		return $result;
	}

	/**
	 * Get the SEO title set in the post metabox.
	 *
	 * @param object|null $post Post object to retrieve the title for.
	 *
	 * @return string
	 */
	protected function get_post_title( $post = null ) {
		if ( ! is_object( $post ) ) {
			return Paper::get_from_options( '404_title', [], esc_html__( 'Page not found', 'seo-by-rank-math' ) );
		}

		$title = Post::get_meta( 'title', $post->ID );
		if ( '' !== $title ) {
			return $title;
		}

		$post_type = isset( $post->post_type ) ? $post->post_type : $post->query_var;
		return Paper::get_from_options( "pt_{$post_type}_title", $post, '%title% %sep% %sitename%' );
	}

	/**
	 * Retrieves the SEO description set in the post metabox.
	 *
	 * Retrieve in this order:
	 *     1. Custom meta description set for the post in SERP field
	 *     2. Excerpt
	 *     3. Description template set in the Titles & Meta
	 *     4. Paragraph with the focus keyword
	 *     5. The First paragraph of the content
	 *
	 * @param object|null $post Object to retrieve the description from.
	 *
	 * @return string The SEO description for the specified object, or queried object if not supplied.
	 */
	protected function get_post_description( $post = null ) {
		if ( ! is_object( $post ) ) {
			return '';
		}

		// 1. Custom meta description set for the post in SERP field.
		$description = Post::get_meta( 'description', $post->ID );
		if ( '' !== $description ) {
			return $description;
		}

		// 2. Excerpt
		if ( ! empty( $post->post_excerpt ) ) {
			return $post->post_excerpt;
		}

		// 3. Description template set in the Titles & Meta.
		$post_type = isset( $post->post_type ) ? $post->post_type : $post->query_var;

		return Str::truncate( Paper::get_from_options( "pt_{$post_type}_description", $post ), 160 );
	}

	/**
	 * Retrieves the robots set in the post metabox.
	 *
	 * @param object|null $post Object to retrieve the robots data from.
	 *
	 * @return string The robots for the specified object, or queried object if not supplied.
	 */
	protected function get_post_robots( $post = null ) {
		if ( ! is_object( $post ) ) {
			return [];
		}

		$post_type = $post->post_type;
		$robots    = Paper::robots_combine( Post::get_meta( 'robots', $post->ID ) );
		if ( empty( $robots ) && Helper::get_settings( "titles.pt_{$post_type}_custom_robots" ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( "titles.pt_{$post_type}_robots" ), true );
		}

		// `noindex` these conditions.
		$noindex_private            = 'private' === $post->post_status;
		$no_index_subpages          = is_paged() && Helper::get_settings( 'titles.noindex_paginated_pages' );
		$noindex_password_protected = ! empty( $post->post_password ) && Helper::get_settings( 'titles.noindex_password_protected' );

		if ( $noindex_private || $noindex_password_protected || $no_index_subpages ) {
			$robots['index'] = 'noindex';
		}

		return $robots;
	}

	/**
	 * Retrieves the advanced robots set in the post metabox.
	 *
	 * @param object|null $post Object to retrieve the robots data from.
	 *
	 * @return string The robots for the specified object, or queried object if not supplied.
	 */
	protected function get_post_advanced_robots( $post = null ) {
		if ( ! is_object( $this->object ) ) {
			return [];
		}

		$post_type = $this->object->post_type;
		$robots    = Paper::advanced_robots_combine( Post::get_meta( 'advanced_robots', $this->object->ID ) );
		if ( ! is_array( $robots ) && Helper::get_settings( "titles.pt_{$post_type}_custom_robots" ) ) {
			$robots = Paper::advanced_robots_combine( Helper::get_settings( "titles.pt_{$post_type}_advanced_robots" ), true );
		}

		return $robots;
	}

	/**
	 * Resolve the effective robots directives for the current post.
	 *
	 * Applies the same fallback and validation logic as Paper::get_robots().
	 *
	 * @return array
	 */
	private function get_effective_robots(): array {
		$robots = $this->robots();

		if ( empty( $robots ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( 'titles.robots_global' ) );
		}

		if ( empty( $robots ) || ! is_array( $robots ) ) {
			return [
				'index'  => 'index',
				'follow' => 'follow',
			];
		}

		if ( ! isset( $robots['index'] ) ) {
			$robots = [ 'index' => 'index' ] + $robots;
		}
		if ( ! isset( $robots['follow'] ) ) {
			$robots = [ 'follow' => 'follow' ] + $robots;
		}

		// Force noindex if the blog is not public.
		if ( 0 === absint( get_option( 'blog_public' ) ) ) {
			$robots['index']  = 'noindex';
			$robots['follow'] = 'nofollow';
		}

		$allowed = [
			'index'        => '',
			'follow'       => '',
			'noarchive'    => '',
			'noimageindex' => '',
			'nosnippet'    => '',
		];
		return array_unique( array_intersect_key( $robots, $allowed ) );
	}
}
PK     –ŠU]7ê¢û«  «  &  includes/frontend/paper/class-blog.phpnu „[µü¤        <?php
/**
 * The Home Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Post;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Blog class.
 */
class Blog implements IPaper {

	/**
	 * Builds the title for Homepage.
	 *
	 * @return string The title to use on homepage.
	 */
	public function title() {
		return Paper::get_from_options( 'homepage_title' );
	}

	/**
	 * Builds the description for Homepage.
	 *
	 * @return string The description to use on a homepage.
	 */
	public function description() {
		return Paper::get_from_options( 'homepage_description', [], get_bloginfo( 'description' ) );
	}

	/**
	 * Retrieves the robots for Homepage.
	 *
	 * @return string The robots specified for the homepage.
	 */
	public function robots() {
		$robots = [];

		if ( Helper::get_settings( 'titles.homepage_custom_robots' ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( 'titles.homepage_robots' ) );
		}

		if ( is_paged() && Helper::get_settings( 'titles.noindex_paginated_pages' ) ) {
			$robots['index'] = 'noindex';
		}

		return $robots;
	}

	/**
	 * Retrieves the advanced robots for Homepage.
	 *
	 * @return array The advanced robots specified for the homepage.
	 */
	public function advanced_robots() {
		if ( ! Helper::get_settings( 'titles.homepage_custom_robots' ) ) {
			return [];
		}

		return Paper::advanced_robots_combine( Helper::get_settings( 'titles.homepage_advanced_robots' ) );
	}

	/**
	 * Retrieves the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		$canonical = home_url();
		if ( Post::is_posts_page() ) {
			$posts_page_id = get_option( 'page_for_posts' );
			$canonical     = Post::get_meta( 'canonical_url', $posts_page_id );
			if ( empty( $canonical ) ) {
				$canonical = get_permalink( $posts_page_id );
			}
		}

		return [ 'canonical' => $canonical ];
	}

	/**
	 * Retrieves the keywords.
	 *
	 * @return string The focus keywords.
	 */
	public function keywords() {
		if ( ! Post::is_posts_page() ) {
			return '';
		}

		return Post::get_meta( 'focus_keyword', get_option( 'page_for_posts' ) );
	}
}
PK     –ŠU]¡°Gú  ú  &  includes/frontend/paper/class-shop.phpnu „[µü¤        <?php
/**
 * The Shop paper.
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Post;
use RankMath\Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Shop.
 */
class Shop extends Singular {

	/**
	 * Retrieves the WooCommerce Shop SEO title.
	 *
	 * @return string
	 */
	public function title() {
		$post  = Post::get( Post::get_shop_page_id() );
		$title = $this->get_post_title( $post->get_object() );

		// Early Bail!
		if ( Str::is_non_empty( $title ) ) {
			return $title;
		}

		return Paper::get_from_options( 'pt_product_archive_title', [], '%pt_plural% Archive %page% %sep% %sitename%' );
	}

	/**
	 * Retrieves the WooCommerce Shop SEO description.
	 *
	 * @return string
	 */
	public function description() {
		$post = Post::get( Post::get_shop_page_id() );
		$desc = $this->get_post_description( $post->get_object() );

		return '' !== $desc ? $desc : Paper::get_from_options( 'pt_product_archive_description', [], '%pt_plural% Archive %page% %sep% %sitename%' );
	}

	/**
	 * Retrieves the WooCommerce Shop robots.
	 *
	 * @return string
	 */
	public function robots() {
		$post = Post::get( Post::get_shop_page_id() );
		return $this->get_post_robots( $post->get_object() );
	}

	/**
	 * Retrieves the WooCommerce Shop advanced robots.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		$post   = Post::get( Post::get_shop_page_id() );
		$object = $post->get_object();
		return $this->get_post_advanced_robots( $object );
	}

	/**
	 * Retrieves meta keywords.
	 *
	 * @return string The focus keywords.
	 */
	public function keywords() {
		return Post::get_meta( 'focus_keyword', Post::get_shop_page_id() );
	}
}
PK     –ŠU]®fcúø	  ø	  (  includes/frontend/paper/class-author.phpnu „[µü¤        <?php
/**
 * The Author Class
 *
 * @since      1.0.22
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\User;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Author class.
 */
class Author implements IPaper {

	/**
	 * Get the SEO title set in the user metabox.
	 *
	 * @return string
	 */
	public function title() {
		$title = User::get_meta( 'title', $this->get_user_id() );
		if ( '' !== $title ) {
			return $title;
		}

		return Paper::get_from_options( 'author_archive_title' );
	}

	/**
	 * Get the SEO description set in the user metabox.
	 *
	 * @return string
	 */
	public function description() {
		$description = User::get_meta( 'description', $this->get_user_id() );
		if ( '' !== $description ) {
			return $description;
		}

		return Paper::get_from_options( 'author_archive_description' );
	}

	/**
	 * Get the robots meta value set in the user metabox.
	 *
	 * @return string
	 */
	public function robots() {
		$robots = Paper::robots_combine( User::get_meta( 'robots', $this->get_user_id() ) );

		if ( empty( $robots ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( 'titles.author_robots' ), true );
		}

		return $robots;
	}

	/**
	 * Get the advanced robots meta set in the user metabox.
	 *
	 * @return array
	 */
	public function advanced_robots() {
		$robots = Paper::advanced_robots_combine( User::get_meta( 'advanced_robots', $this->get_user_id() ) );

		if ( empty( $robots ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
			$robots = Paper::advanced_robots_combine( Helper::get_settings( 'titles.author_advanced_robots' ), true );
		}

		return $robots;
	}

	/**
	 * Get the canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return [
			'canonical'          => get_author_posts_url( $this->get_user_id(), get_query_var( 'author_name' ) ),
			'canonical_override' => User::get_meta( 'canonical_url', $this->get_user_id() ),
		];
	}

	/**
	 * Get the meta keywords for the user (in our case, the Focus Keywords).
	 *
	 * @return string
	 */
	public function keywords() {
		return User::get_meta( 'focus_keyword', $this->get_user_id() );
	}

	/**
	 * Get the user ID on the author archive or BBPress profile.
	 *
	 * @return int
	 */
	private function get_user_id() {
		$author_id = get_query_var( 'author' );
		if ( $author_id ) {
			return $author_id;
		}

		return get_query_var( 'bbp_user_id' );
	}
}
PK     –ŠU]–CÎaQ   Q   +  includes/frontend/class-link-attributes.phpnu „[µü¤        <?php
/**
 * The class handles adding of attributes to links to content.
 *
 * @since      1.0.43.2
 * @package    RankMath
 * @subpackage RankMath\Frontend
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Frontend;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Helpers\HTML;

defined( 'ABSPATH' ) || exit;

/**
 * Add Link_Attributes class.
 */
class Link_Attributes {

	use Hooker;

	/**
	 * Add rel=noopener or not.
	 *
	 * @var bool
	 */
	public $add_noopener;

	/**
	 * Add rel=nofollow to links or not.
	 *
	 * @var bool
	 */
	public $nofollow_link;

	/**
	 * Add rel=nofollow to images or not.
	 *
	 * @var bool
	 */
	public $nofollow_image;

	/**
	 * Open links in a new window or not.
	 *
	 * @var bool
	 */
	public $new_window_link;

	/**
	 * Remove existing CSS class from links or not.
	 *
	 * @var bool
	 */
	public $remove_class;

	/**
	 * Check if the link attributes have been modified or not.
	 *
	 * @var bool
	 */
	public $is_dirty;

	/**
	 * Additional attributes to add to links.
	 *
	 * @var array
	 */
	public $add_attributes;


	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'wp', 'add_attributes', 9999 );
		$this->action( 'rest_api_init', 'add_attributes' );
	}

	/**
	 * Add nofollow, target, title and alt attributes to link and images.
	 */
	public function add_attributes() {

		// Add rel="nofollow" & target="_blank" for external links.
		$this->add_noopener    = $this->do_filter( 'noopener', true );
		$this->nofollow_link   = Helper::get_settings( 'general.nofollow_external_links' );
		$this->nofollow_image  = Helper::get_settings( 'general.nofollow_image_links' );
		$this->new_window_link = Helper::get_settings( 'general.new_window_external_links' );
		$this->remove_class    = $this->do_filter( 'link/remove_class', false );
		$this->is_dirty        = false;

		// Filter to run the link attributes function even when Link options are disabled.
		$this->add_attributes = $this->do_filter( 'link/add_attributes', $this->nofollow_link || $this->new_window_link || $this->nofollow_image || $this->add_noopener );

		if ( $this->add_attributes || $this->remove_class ) {
			$this->filter( 'the_content', 'add_link_attributes', 11 );
		}
	}

	/**
	 * Add nofollow and target attributes to link.
	 *
	 * @param  string $content Post content.
	 * @return string
	 */
	public function add_link_attributes( $content ) {
		// Early bail if content is empty.
		if ( empty( $content ) ) {
			return $content;
		}
		$stripped_content = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $content );
		preg_match_all( '/<(a\s[^>]+)>/', $stripped_content, $matches );
		if ( empty( $matches ) || empty( $matches[0] ) ) {
			return $content;
		}

		foreach ( $matches[0] as $link ) {
			$attrs = HTML::extract_attributes( $link );

			if ( ! $this->can_add_attributes( $attrs ) ) {
				continue;
			}

			$attrs = $this->remove_link_class( $attrs );
			$attrs = $this->set_external_attrs( $attrs );

			if ( $this->is_dirty ) {
				$new     = '<a' . HTML::attributes_to_string( $attrs ) . '>';
				$content = str_replace( $link, $new, $content );
			}
		}

		return $content;
	}

	/**
	 * Set rel attribute.
	 *
	 * @param array   $attrs    Array which hold rel attribute.
	 * @param string  $property Property to add.
	 * @param boolean $append   Append or not.
	 */
	private function set_rel_attribute( &$attrs, $property, $append ) {
		if ( empty( $attrs['rel'] ) ) {
			$attrs['rel'] = $property;
			return;
		}

		if ( $append ) {
			$attrs['rel'] .= ' ' . $property;
		}
	}

	/**
	 * Check if we can do anything
	 *
	 * @param array $attrs Array of link attributes.
	 *
	 * @return boolean
	 */
	private function can_add_attributes( $attrs ) {
		// If link has no href attribute or if the link is not valid then we don't need to do anything.
		if (
			empty( $attrs['href'] ) ||
			( empty( wp_parse_url( $attrs['href'], PHP_URL_HOST ) ) && ! Url::is_affiliate( $attrs['href'] ) ) ||
			( isset( $attrs['role'] ) && 'button' === $attrs['role'] )
		) {
			return false;
		}

		return true;
	}

	/**
	 * Remove rank-math-link class.
	 *
	 * @since 1.0.44.2
	 *
	 * @param array $attrs Array of link attributes.
	 *
	 * @return array $attrs
	 */
	private function remove_link_class( $attrs ) {
		if ( ! $this->remove_class || empty( $attrs['class'] ) || strpos( $attrs['class'], 'rank-math-link' ) === false ) {
			return $attrs;
		}

		$this->is_dirty = true;
		$attrs['class'] = str_replace( 'rank-math-link', '', $attrs['class'] );

		if ( ! trim( $attrs['class'] ) ) {
			unset( $attrs['class'] );
		}

		return $attrs;
	}

	/**
	 * Set External attributes
	 *
	 * @since 1.0.44.2
	 *
	 * @param array $attrs Array of link attributes.
	 *
	 * @return array $attrs
	 */
	private function set_external_attrs( $attrs ) {
		if ( ! $this->add_attributes ) {
			return $attrs;
		}

		// Skip if there is no href or it's a hash link like "#id".
		// Skip if relative link.
		// Skip for same domain ignoring sub-domain if any.
		if ( ! Url::is_external( $attrs['href'] ) ) {
			return $attrs;
		}

		if ( $this->do_filter( 'nofollow/url', $this->should_add_nofollow( $attrs['href'] ), $attrs['href'] ) ) {
			if ( $this->nofollow_link || ( $this->nofollow_image && $this->is_valid_image( $attrs['href'] ) ) ) {
				$this->is_dirty = true;
				$this->set_rel_attribute( $attrs, 'nofollow', ( isset( $attrs['rel'] ) && ! Str::contains( 'dofollow', $attrs['rel'] ) && ! Str::contains( 'nofollow', $attrs['rel'] ) ) );
			}
		}

		if ( $this->new_window_link && ! isset( $attrs['target'] ) && $this->do_filter( 'target_blank/domain', Url::get_domain( $attrs['href'] ) ) ) {
			$this->is_dirty  = true;
			$attrs['target'] = '_blank';
		}

		if ( $this->add_noopener && $this->do_filter( 'noopener/domain', Url::get_domain( $attrs['href'] ) ) ) {
			$this->is_dirty = true;
			$this->set_rel_attribute( $attrs, 'noopener', ( isset( $attrs['rel'] ) && ! Str::contains( 'noopener', $attrs['rel'] ) ) );
		}

		if ( Url::is_affiliate( $attrs['href'] ) ) {
			$this->is_dirty = true;
			$this->set_rel_attribute( $attrs, 'sponsored', ( isset( $attrs['rel'] ) && ! Str::contains( 'sponsored', $attrs['rel'] ) ) );
		}

		return $attrs;
	}

	/**
	 * Check if we need to add nofollow for this link, based on "nofollow_domains" & "nofollow_exclude_domains"
	 *
	 * @param  string $url Link URL.
	 * @return bool
	 */
	private function should_add_nofollow( $url ) {
		if ( ! $this->nofollow_link && ! $this->nofollow_image ) {
			return false;
		}

		$include_domains = $this->get_nofollow_domains( 'include' );
		$exclude_domains = $this->get_nofollow_domains( 'exclude' );
		$parent_domain   = Url::get_domain( $url );
		$parent_domain   = preg_replace( '/^www\./', '', $parent_domain );

		// Check if domain is in list.
		if ( ! empty( $include_domains ) ) {
			return in_array( $parent_domain, $include_domains, true );
		}

		// Check if domain is NOT in list.
		if ( ! empty( $exclude_domains ) && in_array( $parent_domain, $exclude_domains, true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Get domain for nofollow
	 *
	 * @param  string $type Type either include or exclude.
	 * @return array
	 */
	private function get_nofollow_domains( $type ) {
		static $rank_math_nofollow_domains;

		if ( isset( $rank_math_nofollow_domains[ $type ] ) ) {
			return $rank_math_nofollow_domains[ $type ];
		}

		$setting = 'include' === $type ? 'nofollow_domains' : 'nofollow_exclude_domains';
		$domains = Helper::get_settings( "general.{$setting}" );
		$domains = Str::to_arr_no_empty( $domains );

		// Strip off www. prefixes.
		$domains = array_map(
			function ( $domain ) {
				$domain = preg_replace( '#^http(s)?://#', '', trim( $domain, '/' ) );
				return preg_replace( '/^www\./', '', $domain );
			},
			$domains
		);

		$rank_math_nofollow_domains[ $type ] = $domains;

		return $rank_math_nofollow_domains[ $type ];
	}

	/**
	 * Is a valid image url.
	 *
	 * @param string $url Image url.
	 *
	 * @return boolean
	 */
	private function is_valid_image( $url ) {
		foreach ( [ '.jpg', '.jpeg', '.png', '.gif' ] as $ext ) {
			if ( Str::contains( $ext, $url ) ) {
				return true;
			}
		}

		return false;
	}
}
PK     —ŠU]ÚÙ§Í3  3    includes/class-user.phpnu „[µü¤        <?php
/**
 * The User Class
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use WP_User;

defined( 'ABSPATH' ) || exit;

/**
 * User class.
 */
class User extends Metadata {

	/**
	 * The type of object the metadata is for.
	 *
	 * @var string
	 */
	protected $meta_type = 'user';

	/**
	 * Get User instance.
	 *
	 * @param WP_User|object|int $user User ID or user object.
	 * @return User|false User object or false if not found.
	 */
	public static function get( $user = 0 ) {
		if ( is_int( $user ) && 0 === absint( $user ) ) {
			$user = $GLOBALS['wp_query']->get_queried_object();
		}

		if ( is_object( $user ) ) {
			$user = $user->ID ?? '';
		}

		if ( empty( $user ) ) {
			return null;
		}

		if ( isset( self::$objects[ $user ] ) && 'user' === self::$objects[ $user ]->meta_type ) {
			return self::$objects[ $user ];
		}

		$_user                  = new self( get_user_by( 'id', $user ) );
		$_user->object_id       = $user;
		self::$objects[ $user ] = $_user;

		return $_user;
	}

	/**
	 * Get user meta data.
	 *
	 * @param string $key           Meta key.
	 * @param mixed  $user          User ID or user object.
	 * @param string $default_value Default value to use when metadata does not exists.
	 * @return mixed
	 */
	public static function get_meta( $key, $user = 0, $default_value = '' ) {
		$user = self::get( $user );

		if ( is_null( $user ) || ! $user->is_found() ) {
			return $default_value;
		}

		return $user->get_metadata( $key, $default_value );
	}
}
PK     —ŠU]¾@�>o2  o2    includes/class-tracking.phpnu „[µü¤        <?php
/**
 * Code related to the Mixpanel Tracking.
 *
 * @since      1.0.x
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

declare(strict_types=1);

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Helpers\Str;
use RankMath\Helpers\Editor;
use RankMath\Admin\Admin_Helper;
use WPMedia\Mixpanel\Optin;
use WPMedia\Mixpanel\TrackingPlugin;

/**
 * Tracking class.
 */
class Tracking {
	use Hooker;

	/**
	 * Opt-in instance.
	 *
	 * @var Optin
	 */
	private $optin;

	/**
	 * Mixpanel instance.
	 *
	 * @var TrackingPlugin
	 */
	private $mixpanel;

	/**
	 * User email for identification.
	 *
	 * @var string
	 */
	private $user_email = '';

	/**
	 * User language.
	 *
	 * @var string
	 */
	private $user_language = '';

	/**
	 * Plugin name.
	 *
	 * @var string
	 */
	private $plugin = '';

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->plugin   = defined( 'RANK_MATH_PRO_VERSION' ) ? 'Rank Math Pro ' . RANK_MATH_PRO_VERSION : 'Rank Math Free ' . rank_math()->version;
		$this->optin    = new Optin( 'rank_math', 'manage_options' );
		$this->mixpanel = new TrackingPlugin( '517e881edc2636e99a2ecf013d8134d3', $this->plugin, 'RankMath', 'RankMath' );

		$this->action( 'init', 'hooks' );
	}

	/**
	 * Initialize the tracking class hooks.
	 */
	public function hooks(): void {
		$this->init_user_data();
		$this->action( 'rank_math_mixpanel_optin_changed', 'track_optin_change' );
		$this->action( 'rank_math/module_changed', 'track_module_option_change', 10, 2 );
		$this->action( 'rank_math/setup_wizard/enable_tracking', 'enable_usage_tracking' );
		$this->action( 'rank_math/setup_wizard/step_viewed', 'track_setup_wizard_step_view' );
		$this->action( 'rank_math/admin/enqueue_scripts', 'enqueue_mixpanel' );
		$this->action( 'admin_init', 'track_admin_page_view' );
		$this->action( 'rank_math/admin/options/general_data', 'set_usage_tracking_option', 99 );
		$this->action( 'rank_math/settings/before_save', 'update_mixpanel_optin', 10, 2 );
		$this->filter( 'rank_math/settings/saved_data', 'add_mixpanel_data', 10, 2 );
		$this->action( 'cmb2_save_options-page_fields_rank-math-options-general_options', 'update_mixpanel_optin_cmb2' );
	}

	/**
	 * Track the opt-in status change.
	 *
	 * @param bool $status The new opt-in status.
	 */
	public function track_optin_change( $status ): void {
		$this->identify_user();
		$this->mixpanel->track_optin( $status );
	}

	/**
	 * Track module option changes.
	 *
	 * @param string $module_id The module ID.
	 * @param string $state     The new state (on/off).
	 */
	public function track_module_option_change( $module_id, $state ): void {
		$enable_module = $state === 'on';
		$properties    = [
			'context'        => 'wp_plugin',
			'option_name'    => 'module ' . $module_id,
			'previous_value' => ! $enable_module ? 1 : 0,
			'new_value'      => $enable_module ? 1 : 0,
			'language'       => $this->user_language,
		];

		$this->track_event( 'Option Changed', $properties );
	}

	/**
	 * Enable or disable usage tracking.
	 *
	 * @param bool $enable True to enable, false to disable.
	 */
	public function enable_usage_tracking( $enable ): void {
		if ( $enable ) {
			$this->optin->enable();
			return;
		}

		$this->optin->disable();
	}

	/**
	 * Track setup wizard step views.
	 */
	public function track_setup_wizard_step_view() {
		if ( ! $this->is_opted_in() ) {
			return;
		}

		// Get the actual admin page URL from the request referer.
		$referer     = wp_get_referer();
		$current_url = $referer ? $referer : Helper::get_current_page_url();
		$path        = $this->get_current_path_with_query();

		// Parse the referer URL to get the current step being viewed.
		$url_parts = wp_parse_url( $referer );
		parse_str( $url_parts['query'] ?? '', $query_params );
		$current_step_being_viewed = $query_params['step'] ?? 'compatibility';

		// Use static variable to prevent duplicate tracking in the same request.
		static $tracked_steps = [];
		if ( in_array( $current_step_being_viewed, $tracked_steps, true ) ) {
			return;
		}
		$tracked_steps[] = $current_step_being_viewed;

		$properties = [
			'current_url' => $current_url,
			'path'        => $path,
			'context'     => 'wp_plugin',
			'language'    => $this->user_language,
		];

		$this->track_event( 'Page Viewed', $properties );
	}

	/**
	 * Enqueue Mixpanel script on Block Editor pages.
	 */
	public function enqueue_mixpanel(): void {
		if ( ! $this->optin->can_track() ) {
			return;
		}

		if ( ! Helper::is_block_editor() || ! Editor::can_add_editor() ) {
			return;
		}

		$this->mixpanel->add_script();
		Helper::add_json(
			'tracking',
			[
				'plugin'   => $this->plugin,
				'path'     => isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '',
				'email'    => $this->user_email,
				'language' => $this->user_language,
			],
		);
	}

	/**
	 * Enqueue Mixpanel script and inject tracking data for non-block-editor admin pages.
	 * Called by individual module admin classes that need JS-side event tracking.
	 */
	public function enqueue_mixpanel_for_page(): void {
		if ( ! $this->optin->can_track() ) {
			return;
		}

		$this->mixpanel->add_script();
		Helper::add_json(
			'tracking',
			[
				'plugin'   => $this->plugin,
				'path'     => isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '',
				'email'    => $this->user_email,
				'language' => $this->user_language,
			],
		);
	}

	/**
	 * Track admin page views.
	 */
	public function track_admin_page_view() {
		if ( ! $this->optin->can_track() ) {
			return;
		}

		// Only track Rank Math admin/configuration pages.
		if ( ! Str::starts_with( 'rank-math', Param::get( 'page' ) ) ) {
			return;
		}

		// Check if we've already tracked this user in the last 7 days.
		$transient_key = 'rank_math_admin_tracking_' . md5( $this->user_email );
		if ( get_transient( $transient_key ) ) {
			return;
		}

		// Set transient for 7 days to prevent duplicate tracking.
		set_transient( $transient_key, true, WEEK_IN_SECONDS );

		// Get the current admin page URL.
		$current_url = Helper::get_current_page_url();
		$path        = $this->get_current_path_with_query();

		$properties = [
			'current_url' => $current_url,
			'path'        => $path,
			'context'     => 'wp_plugin',
			'language'    => $this->user_language,
		];

		// Determine capability based on current Rank Math page and pass it to Mixpanel.
		$page             = (string) Param::get( 'page' );
		$event_capability = $this->get_event_capability_for_page( $page );
		$this->track_event( 'Page Viewed', $properties, $event_capability );
	}

	/**
	 * Add usage_tracking option to the general settings.
	 *
	 * @param array $json Localized data.
	 */
	public function set_usage_tracking_option( $json ) {
		// Early bail if the current page is not general settings.
		if ( ! isset( $json['optionPage'] ) || $json['optionPage'] !== 'general' || ! isset( $json['data'] ) ) {
			return $json;
		}

		$json['canAddUsageTracking']    = current_user_can( 'manage_options' );
		$json['data']['usage_tracking'] = $this->optin->can_track();

		return $json;
	}

	/**
	 * Update opt-in value.
	 *
	 * @param string $type     Settings type.
	 * @param array  $settings Settings data.
	 */
	public function update_mixpanel_optin( $type, $settings ) {
		if ( $type !== 'general' || ! isset( $settings['usage_tracking'] ) ) {
			return;
		}

		if ( ! empty( $settings['usage_tracking'] ) ) {
			$this->optin->enable();
			return;
		}

		$this->optin->disable();
	}

	/**
	 * Add usage tracking data to the saved settings.
	 *
	 * @param array  $data Settings data.
	 * @param string $type Settings type.
	 * @return array
	 */
	public function add_mixpanel_data( $data, $type ) {
		if ( $type !== 'general' ) {
			return $data;
		}

		$data['usage_tracking'] = $this->optin->can_track();
		return $data;
	}

	/**
	 * Update Mixpanel optin option when general settings are saved. Used
	 */
	public function update_mixpanel_optin_cmb2() {
		// Get the value from the form submission.
		$usage_tracking = isset( $_POST['usage_tracking'] ) ? sanitize_text_field( wp_unslash( $_POST['usage_tracking'] ) ) : 'off';
		if ( $usage_tracking === 'on' ) {
			$this->optin->enable();
			return;
		}

		$this->optin->disable();
	}

	/**
	 * Check if usage tracking is enabled (opt-in).
	 *
	 * @return bool
	 */
	public function is_opted_in(): bool {
		return $this->optin->is_enabled();
	}

	/**
	 * Track a WordPress Abilities API execution event.
	 *
	 * MCP and direct calls share the same event name; the context property
	 * differentiates them ('wp_plugin' vs 'wp_plugin_mcp').
	 *
	 * @param string $event_name       Mixpanel event name (e.g. 'SEO Audit Run').
	 * @param array  $properties       Additional event properties (e.g. score, test_id).
	 * @param string $event_capability WordPress capability required to execute the ability.
	 */
	public function track_ability_executed( string $event_name, array $properties = [], string $event_capability = '' ): void {
		if ( ! $this->is_opted_in() ) {
			return;
		}

		$context = ! empty( $_SERVER['HTTP_MCP_SESSION_ID'] ) ? 'wp_plugin_mcp' : 'wp_plugin'; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput

		$this->track_event(
			$event_name,
			array_merge( [ 'context' => $context ], $properties ),
			$event_capability
		);
	}

	/**
	 * Track a custom event for Rank Math.
	 *
	 * Always enforces the usage-tracking opt-in â€” no-ops when the site
	 * hasn't consented, regardless of caller.
	 *
	 * @param string $event            Event name.
	 * @param array  $properties       Additional properties to merge.
	 * @param string $event_capability The capability required to track the event.
	 */
	public function track_event( string $event, array $properties = [], string $event_capability = '' ): void {
		if ( ! $this->is_opted_in() ) {
			return;
		}

		$defaults = [
			'context'  => 'wp_plugin',
			'language' => $this->user_language,
		];

		$this->identify_user();
		$this->mixpanel->track( $event, array_merge( $defaults, $properties ), $event_capability );
	}

	/**
	 * Get the current request path with query string, suitable for tracking.
	 * Handles AJAX and REST requests by using referer when available.
	 *
	 * @return string
	 */
	public function get_current_path_with_query(): string {
		// For AJAX/REST requests, use referer to get the originating page.
		$referer     = wp_get_referer();
		$current_url = $referer ? $referer : Helper::get_current_page_url();
		$path        = wp_parse_url( $current_url, PHP_URL_PATH ) . '?' . wp_parse_url( $current_url, PHP_URL_QUERY );

		return $path;
	}

	/**
	 * Identify the current user in Mixpanel.
	 * Safe to call multiple times; no-ops when opt-out.
	 */
	public function identify_user(): void {
		$this->mixpanel->identify( $this->user_email );
	}

	/**
	 * Get the current plugin label (with version) used in tracking payloads.
	 *
	 * @return string
	 */
	public function get_plugin_label(): string {
		return $this->plugin;
	}

	/**
	 * Initialize user data.
	 */
	private function init_user_data() {
		if ( ! $this->user_email ) {
			$this->user_email = $this->get_user_email();
		}

		if ( ! $this->user_language ) {
			$this->user_language = get_user_locale();
		}
	}

	/**
	 * Get user email for identification.
	 *
	 * @return string
	 */
	private function get_user_email(): string {
		$account = Admin_Helper::get_registration_data();
		if ( ! empty( $account['email'] ) ) {
			return $account['email'];
		}

		$user = wp_get_current_user();
		return isset( $user->user_email ) ? (string) $user->user_email : '';
	}

	/**
	 * Get the capability required for tracking based on the current Rank Math page.
	 *
	 * @param string $page The `page` query arg, e.g., 'rank-math-options-general'.
	 *
	 * @return string Capability name or empty for default behavior.
	 */
	private function get_event_capability_for_page( string $page ): string {
		// Map known Rank Math admin pages to their capabilities.
		$map = [
			'rank-math-options-general'          => 'rank_math_general',
			'rank-math-options-titles'           => 'rank_math_titles',
			'rank-math-options-sitemap'          => 'rank_math_sitemap',
			'rank-math-options-instant-indexing' => 'rank_math_general',
			'rank-math-404-monitor'              => 'rank_math_404_monitor',
			'rank-math-redirections'             => 'rank_math_redirections',
			'rank-math-role-manager'             => 'rank_math_role_manager',
			'rank-math-analytics'                => 'rank_math_analytics',
			'rank-math-seo-analysis'             => 'rank_math_site_analysis',
			'rank-math-content-ai-page'          => 'rank_math_content_ai',
			'rank-math-links-page'               => 'rank_math_general',
		];

		return isset( $map[ $page ] ) ? $map[ $page ] : '';
	}
}
PK     —ŠU]ÖÁÿì  ì    includes/class-auto-updater.phpnu „[µü¤        <?php
/**
 * Global functionality of the plugin.
 *
 * Defines the functionality loaded both on admin and frontend.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Common class.
 */
class Auto_Updater {

	use Hooker;

	/**
	 * Constructor method.
	 */
	public function __construct() {
		$this->filter( 'auto_update_plugin', 'auto_update_plugin', 20, 2 );
		$this->filter( 'plugin_auto_update_setting_html', 'plugin_auto_update_setting_html', 10, 3 );
	}

	/**
	 * Don't auto-update if it's a beta version.
	 *
	 * @param bool  $update Whether to update the plugin or not.
	 * @param array $item  The update plugin object.
	 *
	 * @return bool
	 */
	public function auto_update_plugin( $update, $item ) {
		// Show auto-updates control on Plugins page.
		if ( did_action( 'load-plugins.php' ) ) {
			return $update;
		}

		if ( $this->is_rm_update( $item ) && $this->is_beta_update( $item ) ) {
			return false;
		}

		return $update;
	}

	/**
	 * Check if updatable object is RM.
	 *
	 * @param object $item Updatable object.
	 * @return boolean
	 */
	public function is_rm_update( $item ) {
		return isset( $item->slug ) &&
			'seo-by-rank-math' === $item->slug &&
			isset( $item->new_version );
	}

	/**
	 * Check if given version is beta.
	 *
	 * @param string $item Update object.
	 * @return boolean
	 */
	public function is_beta_update( $item ) {
		return ( is_object( $item ) && isset( $item->new_version ) && false !== stripos( $item->new_version, 'beta' ) );
	}

	/**
	 * Hide "update scheduled in X hours" message if update is a beta version.
	 *
	 * @param string $html        HTML string.
	 * @param string $plugin_file Plugin file relative to the plugin directory.
	 * @param array  $plugin_data Plugin update data.
	 * @return string
	 */
	public function plugin_auto_update_setting_html( $html, $plugin_file, $plugin_data ) {
		if ( 'seo-by-rank-math/rank-math.php' !== $plugin_file ) {
			return $html;
		}

		if ( ! empty( $plugin_data['is_beta'] ) ) {
			$html = str_replace( 'class="auto-update-time"', 'class="auto-update-time hidden"', $html );
		}

		return $html;
	}
}
PK     —ŠU]ŒÛ      %  includes/modules/robots-txt/index.phpnu „[µü¤        <?php // Silence is golden.
PK     —ŠU]†3Ï    0  includes/modules/robots-txt/class-robots-txt.phpnu „[µü¤        <?php
/**
 * The robots.txt editor module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Robots_Txt class.
 */
class Robots_Txt {

	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {

		if ( is_super_admin() ) {
			$this->filter( 'rank_math/settings/general', 'add_settings' );
		}

		// Custom robots text.
		if ( ! is_admin() && Helper::get_settings( 'general.robots_txt_content' ) ) {
			$this->action( 'robots_txt', 'robots_txt', 10, 2 );
		}
	}

	/**
	 * Replace robots.txt content.
	 *
	 * @param string $content   Robots.txt file content.
	 * @param bool   $is_public Whether the site is considered "public".
	 *
	 * @return string New robots.txt content.
	 */
	public function robots_txt( $content, $is_public ) {
		return 0 === absint( $is_public ) ? $content : Helper::get_settings( 'general.robots_txt_content' );
	}

	/**
	 * Add module settings into general optional panel.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_settings( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'robots' => [
					'icon'      => 'rm-icon rm-icon-robots',
					'title'     => esc_html__( 'Edit robots.txt', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'      => sprintf( esc_html__( 'Edit your robots.txt file to control what bots see. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'edit-robotstxt', 'Options Panel Robots Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'      => __DIR__ . '/options.php',
					'classes'   => 'rank-math-advanced-option',
					'after_row' => '<div class="rank-math-desc">' . __( 'Leave the field empty to let WordPress handle the contents dynamically. If an actual robots.txt file is present in the root folder of your site, this option won\'t take effect and you have to edit the file directly, or delete it and then edit from here.', 'seo-by-rank-math' ) . '</div>',
					'json'      => [
						'robotsData' => self::get_robots_data(),
					],
				],
			],
			5
		);

		return $tabs;
	}

	/**
	 * Get robots.txt related data: whether the file exists, the contents
	 * of the file, and the "Search engine visibility" setting for the site.
	 *
	 * @return array
	 */
	public static function get_robots_data() {
		$wp_filesystem = Helper::get_filesystem();
		$public        = absint( get_option( 'blog_public' ) );

		$default  = '# This file is automatically added by Rank Math SEO plugin to help a website index better';
		$default .= "\n# More info: " . KB::get( 'seo-suite', 'Robots' ) . "\n";
		$default .= "User-Agent: *\n";
		if ( 0 === $public ) {
			$default .= "Disallow: /\n";
		} else {
			$default .= "Disallow: /wp-admin/\n";
			$default .= "Allow: /wp-admin/admin-ajax.php\n";
		}
		$default = apply_filters( 'robots_txt', $default, $public );

		if ( empty( $wp_filesystem ) || ! Helper::is_filesystem_direct() ) {
			return [
				'exists'   => false,
				'default'  => $default,
				'public'   => $public,
				'writable' => false,
			];
		}

		if ( $wp_filesystem->exists( ABSPATH . 'robots.txt' ) ) {
			return [
				'exists'  => true,
				'default' => $wp_filesystem->get_contents( ABSPATH . 'robots.txt' ),
				'public'  => $public,
			];
		}

		return [
			'exists'  => false,
			'default' => $default,
			'public'  => $public,
		];
	}
}
PK     —ŠU]Uã:Ô  Ô  '  includes/modules/robots-txt/options.phpnu „[µü¤        <?php
/**
 * The robots.txt settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Robots_Txt;
use RankMath\KB;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$data       = Robots_Txt::get_robots_data();
$attributes = [ 'data-gramm' => 'false' ];
$desc       = '';
if ( $data['exists'] ) {
	$attributes['readonly'] = 'readonly';
	$attributes['value']    = $data['default'];
	$desc                   = esc_html__( 'Contents are locked because a robots.txt file is present in the root folder.', 'seo-by-rank-math' );
} else {
	$attributes['placeholder'] = $data['default'];
}

if ( isset( $data['writable'] ) && false === $data['writable'] ) {
	$attributes['placeholder'] = $data['default'];
	$desc                      = esc_html__( 'Rank Math could not detect if a robots.txt file exists or not because of a filesystem issue. The file contents entered here may not be applied.', 'seo-by-rank-math' );

	unset( $attributes['readonly'], $attributes['value'] );
}

if ( 0 === $data['public'] ) {
	$attributes['readonly'] = 'readonly';
}

if ( ! Helper::is_edit_allowed() ) {
	$cmb->add_field(
		[
			'id'      => 'edit_disabled',
			'type'    => 'notice',
			'what'    => 'error',
			'content' => __( 'robots.txt file is not writable.', 'seo-by-rank-math' ),
		]
	);
	$attributes['disabled'] = 'disabled';
}

$cmb->add_field(
	[
		'id'              => 'robots_txt_content',
		'type'            => 'textarea',
		'attributes'      => $attributes,
		'classes'         => 'nob rank-math-code-box',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_robots_text' ],
	]
);

if ( $desc ) {
	$cmb->add_field(
		[
			'id'      => 'robots_locked',
			'type'    => 'notice',
			'what'    => 'warning',
			'classes' => 'nob nopt rank-math-notice',
			'content' => wp_kses_post( $desc ),
		]
	);
} elseif ( 0 === $data['public'] ) {
	$cmb->add_field(
		[
			'id'      => 'site_not_public',
			'type'    => 'notice',
			'what'    => 'warning',
			'classes' => 'nob nopt rank-math-notice',
			'content' => wp_kses_post(
				sprintf(
					// Translators: placeholder is the Settings page URL.
					__( '<strong>Warning:</strong> your site\'s search engine visibility is set to Hidden in <a href="%1$s" target="_blank">Settings &gt; Reading</a>. This means that the changes you make here will not take effect. Set the search engine visibility to Public to be able to change the robots.txt content.', 'seo-by-rank-math' ),
					admin_url( 'options-reading.php' )
				)
			),
		]
	);
}

$cmb->add_field(
	[
		'id'      => 'robots_tester',
		'type'    => 'notice',
		'what'    => 'info',
		'classes' => 'nob nopt rank-math-notice',
		'content' => wp_kses_post(
			sprintf(
				// Translators: placeholder is the URL to the robots.txt tester tool.
				__( 'Test and edit your live robots.txt file with our <a href="%1$s" target="_blank">Robots.txt Tester</a>.', 'seo-by-rank-math' ),
				KB::get( 'robotstxt-tool', 'Options Panel Robots.txt Tester' ) . '&url=' . rawurlencode( home_url( '/' ) )
			)
		),
	]
);
PK     —ŠU]ç?=“A  A  0  includes/modules/buddypress/class-buddypress.phpnu „[µü¤        <?php
/**
 * The BuddyPress Module.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\BuddyPress
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\BuddyPress;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * BuddyPress class.
 */
class BuddyPress {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( is_admin() ) {
			new Admin();
		}

		$this->filter( 'rank_math/paper/hash', 'paper' );
		$this->action( 'rank_math/vars/register_extra_replacements', 'register_replacements' );
		$this->filter( 'rank_math/json_ld', 'json_ld', 11 );
		$this->filter( 'rank_math/frontend/title', 'change_activate_title' );
	}

	/**
	 * Filter to change the Activate page title.
	 *
	 * @param string $title Page title.
	 */
	public function change_activate_title( $title ) {
		if ( function_exists( 'bp_is_current_component' ) && bp_is_current_component( 'activate' ) ) {
			return false;
		}

		return $title;
	}

	/**
	 * Add BuddyPress class.
	 *
	 * @param array $hash Paper Hash.
	 */
	public function paper( $hash ) {
		$bp_data = [
			'BP_User'  => bp_is_user(),
			'BP_Group' => ! is_singular() && bp_is_groups_component(),
		];

		return array_merge( $bp_data, $hash );
	}

	/**
	 * Collect data to output in JSON-LD.
	 *
	 * @param array $data An array of data to output in JSON-LD.
	 */
	public function json_ld( $data ) {
		if ( ! bp_is_user() ) {
			return $data;
		}

		if ( isset( $data['richSnippet'] ) ) {
			unset( $data['richSnippet'] );
		}

		$user_id = bp_displayed_user_id();

		$data['ProfilePage'] = [
			'@type'      => 'ProfilePage',
			'@id'        => get_author_posts_url( $user_id ),
			'headline'   => sprintf( 'About %s', get_the_author_meta( 'display_name', $user_id ) ),
			'mainEntity' => [
				'@type'       => 'Person',
				'name'        => get_the_author_meta( 'display_name', $user_id ),
				'url'         => function_exists( 'bp_members_get_user_url' ) ? esc_url( bp_members_get_user_url( $user_id ) ) : esc_url( bp_core_get_user_domain( $user_id ) ),
				'description' => get_the_author_meta( 'description', $user_id ),
				'image'       => [
					'@type'  => 'ImageObject',
					'url'    => get_avatar_url( $user_id, 96 ),
					'height' => 96,
					'width'  => 96,
				],
			],
		];
		return $data;
	}

	/**
	 * Register variable replacements for BuddyPress groups.
	 */
	public function register_replacements() {
		rank_math_register_var_replacement(
			'group_name',
			[
				'name'        => esc_html__( 'Group name.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Group name of the current group', 'seo-by-rank-math' ),
				'variable'    => 'group_name',
				'example'     => $this->get_group_name(),
			],
			[ $this, 'get_group_name' ]
		);

		rank_math_register_var_replacement(
			'group_desc',
			[
				'name'        => esc_html__( 'Group Description.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Group description of the current group', 'seo-by-rank-math' ),
				'variable'    => 'group_desc',
				'example'     => $this->get_group_desc(),
			],
			[ $this, 'get_group_desc' ]
		);
	}

	/**
	 * Retrieves the group name.
	 *
	 * @return string
	 */
	public function get_group_name() {
		$group = $this->get_group();
		if ( ! is_object( $group ) ) {
			return '';
		}

		return $group->name;
	}

	/**
	 * Retrieves the group description.
	 *
	 * @return string
	 */
	public function get_group_desc() {
		$group = $this->get_group();
		if ( ! is_object( $group ) ) {
			return '';
		}

		return $group->description;
	}

	/**
	 * Returns the group object when the current page is the group page.
	 *
	 * @return null|Object
	 */
	private function get_group() {
		if ( ! function_exists( 'groups_get_current_group' ) ) {
			return '';
		}

		$group = groups_get_current_group();
		if ( ! is_object( $group ) ) {
			return '';
		}

		return $group;
	}
}
PK     —ŠU]—‚º@f  f  +  includes/modules/buddypress/class-admin.phpnu „[µü¤        <?php
/**
 * The admin-side code for the BuddyPress module.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\BuddyPress
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\BuddyPress;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class
 */
class Admin {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->filter( 'rank_math/settings/title', 'add_title_settings' );
	}

	/**
	 * Add new tab in the Titles & Meta settings for the BuddyPress module.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_title_settings( $tabs ) {
		$tabs['buddypress'] = [
			'title' => esc_html__( 'BuddyPress:', 'seo-by-rank-math' ),
			'type'  => 'separator',
		];

		$tabs['buddypress-groups'] = [
			'icon'  => 'rm-icon rm-icon-users',
			'title' => esc_html__( 'Groups', 'seo-by-rank-math' ),
			'desc'  => esc_html__( 'This tab contains SEO options for BuddyPress Group pages.', 'seo-by-rank-math' ),
			'file'  => __DIR__ . '/views/options-titles.php',
		];

		return $tabs;
	}
}
PK     —ŠU]Ù9'ö	  ö	  4  includes/modules/buddypress/views/options-titles.phpnu „[µü¤        <?php
/**
 * The BuddyPress groups settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'              => 'bp_group_title',
		'type'            => 'text',
		'name'            => esc_html__( 'Group Title', 'seo-by-rank-math' ),
		'desc'            => esc_html__( 'Title tag for groups', 'seo-by-rank-math' ),
		'classes'         => 'rank-math-supports-variables rank-math-title',
		'default'         => '',
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'         => 'bp_group_description',
		'type'       => 'textarea',
		'name'       => esc_html__( 'Group Description', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'BuddyPress group description', 'seo-by-rank-math' ),
		'classes'    => 'rank-math-supports-variables rank-math-description',
		'attributes' => [
			'data-exclude-variables' => 'seo_title,seo_description',
			'rows'                   => 2,
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'bp_group_custom_robots',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Group Robots Meta', 'seo-by-rank-math' ),
		'desc'    => __( 'Select custom robots meta for Group archive pages. Otherwise the default meta will be used, as set in the Global Meta tab.', 'seo-by-rank-math' ),
		'options' => [
			'off' => esc_html__( 'Default', 'seo-by-rank-math' ),
			'on'  => esc_html__( 'Custom', 'seo-by-rank-math' ),
		],
		'default' => $custom_default,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'                => 'bp_group_robots',
		'type'              => 'multicheck',
		'name'              => esc_html__( 'Group Robots Meta', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Custom values for robots meta tag on groups page.', 'seo-by-rank-math' ),
		'options'           => Helper::choices_robots(),
		'select_all_button' => false,
		'dep'               => [ [ 'bp_group_custom_robots', 'on' ] ],
		'classes'           => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'              => 'bp_group_advanced_robots',
		'type'            => 'advanced_robots',
		'name'            => esc_html__( 'Group Advanced Robots Meta', 'seo-by-rank-math' ),
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_advanced_robots' ],
		'dep'             => [ [ 'bp_group_custom_robots', 'on' ] ],
		'classes'         => 'rank-math-advanced-option',
	]
);
PK     —ŠU]mr|¸0  0  4  includes/modules/buddypress/paper/class-bp-group.phpnu „[µü¤        <?php
/**
 * The BuddyPress group class for the BuddyPress module.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * BP_Group class.
 */
class BP_Group implements IPaper {

	/**
	 * Retrieves the SEO title.
	 *
	 * @return string
	 */
	public function title() {
		return Paper::get_from_options( 'bp_group_title' );
	}

	/**
	 * Retrieves the SEO description.
	 *
	 * @return string
	 */
	public function description() {
		return Paper::get_from_options( 'bp_group_description' );
	}

	/**
	 * Retrieves the robots meta value.
	 *
	 * @return string
	 */
	public function robots() {
		$robots = [];
		if ( Helper::get_settings( 'titles.bp_group_custom_robots' ) ) {
			$robots = Helper::get_settings( 'titles.bp_group_robots' );
		}

		return Paper::robots_combine( $robots, true );
	}

	/**
	 * Retrieves the advanced robots meta values.
	 *
	 * @return array The advanced robots meta values for the group.
	 */
	public function advanced_robots() {
		$robots = [];
		if ( Helper::get_settings( 'titles.bp_group_custom_robots' ) ) {
			$robots = Helper::get_settings( 'titles.bp_group_advanced_robots' );
		}

		return Paper::advanced_robots_combine( $robots, true );
	}

	/**
	 * Retrieves the default canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return '';
	}

	/**
	 * Retrieves the default meta keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return '';
	}
}
PK     —ŠU]BÏä^B  B  3  includes/modules/buddypress/paper/class-bp-user.phpnu „[µü¤        <?php
/**
 * The BuddyPress user class for the BuddyPress module.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\Paper
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Paper;

use RankMath\User;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * BP_User class.
 */
class BP_User implements IPaper {

	/**
	 * Retrieves the SEO title set in the user metabox.
	 *
	 * @return string The SEO title for the user.
	 */
	public function title() {
		return '';
	}

	/**
	 * Retrieves the SEO description set in the user metabox.
	 *
	 * @return string The SEO description for the user.
	 */
	public function description() {
		$description = User::get_meta( 'description', bp_displayed_user_id() );
		if ( '' !== $description ) {
			return $description;
		}

		return Paper::get_from_options( 'author_archive_description' );
	}

	/**
	 * Retrieves the robots set in the user metabox.
	 *
	 * @return string The robots for the specified user.
	 */
	public function robots() {
		$robots = Paper::robots_combine( User::get_meta( 'robots', bp_displayed_user_id() ) );

		if ( empty( $robots ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
			$robots = Paper::robots_combine( Helper::get_settings( 'titles.author_robots' ), true );
		}

		return $robots;
	}

	/**
	 * Retrieves the advanced robots set in the user metabox.
	 *
	 * @return array The advanced robots for the specified user.
	 */
	public function advanced_robots() {
		$robots = Paper::advanced_robots_combine( User::get_meta( 'advanced_robots', bp_displayed_user_id() ) );

		if ( empty( $robots ) && Helper::get_settings( 'titles.author_custom_robots' ) ) {
			$robots = Paper::advanced_robots_combine( Helper::get_settings( 'titles.author_advanced_robots' ), true );
		}

		return $robots;
	}

	/**
	 * Retrieves the default canonical URL.
	 *
	 * @return array
	 */
	public function canonical() {
		return '';
	}

	/**
	 * Retrieves the default keywords.
	 *
	 * @return string
	 */
	public function keywords() {
		return User::get_meta( 'focus_keyword', bp_displayed_user_id() );
	}
}
PK     —ŠU]ŒÛ        includes/modules/index.phpnu „[µü¤        <?php // Silence is golden.
PK     —ŠU]u\+Â4  Â4  '  includes/modules/analytics/class-db.phpnu „[µü¤        <?php
/**
 * The Analytics module database operations
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\Google\Api;
use RankMath\Google\Console;
use RankMath\Helpers\Str;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * DB class.
 */
class DB {

	/**
	 * Get any table.
	 *
	 * @param string $table_name Table name.
	 *
	 * @return \RankMath\Admin\Database\Query_Builder
	 */
	public static function table( $table_name ) {
		return Database::table( $table_name );
	}

	/**
	 * Get console data table.
	 *
	 * @return \RankMath\Admin\Database\Query_Builder
	 */
	public static function analytics() {
		return Database::table( 'rank_math_analytics_gsc' );
	}

	/**
	 * Get objects table.
	 *
	 * @return \RankMath\Admin\Database\Query_Builder
	 */
	public static function objects() {
		return Database::table( 'rank_math_analytics_objects' );
	}

	/**
	 * Get inspections table.
	 *
	 * @return \RankMath\Admin\Database\Query_Builder
	 */
	public static function inspections() {
		return Database::table( 'rank_math_analytics_inspections' );
	}

	/**
	 * Delete a record.
	 *
	 * @param  int $days Decide whether to delete all or delete 90 days data.
	 */
	public static function delete_by_days( $days ) {
		// Delete console data.
		if ( Console::is_console_connected() ) {
			if ( -1 === $days ) {
				self::analytics()->truncate();
			} else {
				$start = date_i18n( 'Y-m-d H:i:s', strtotime( '-1 days' ) );
				$end   = date_i18n( 'Y-m-d H:i:s', strtotime( '-' . $days . ' days' ) );

				self::analytics()->whereBetween( 'created', [ $end, $start ] )->delete();
			}
		}

		// Delete analytics, adsense data.
		do_action( 'rank_math/analytics/delete_by_days', $days );
		self::purge_cache();

		return true;
	}

	/**
	 * Delete record for comparison.
	 */
	public static function delete_data_log() {
		$days = Helper::get_settings( 'general.console_caching_control', 90 );

		// Delete old console data more than 2 times ago of specified number of days to keep the data.
		$start = date_i18n( 'Y-m-d H:i:s', strtotime( '-' . ( $days * 2 ) . ' days' ) );

		self::analytics()->where( 'created', '<', $start )->delete();

		// Delete old analytics and adsense data.
		do_action( 'rank_math/analytics/delete_data_log', $start );
	}

	/**
	 * Purge SC transient
	 */
	public static function purge_cache() {
		$table = Database::table( 'options' );
		$table->whereLike( 'option_name', 'top_keywords' )->delete();
		$table->whereLike( 'option_name', 'posts_summary' )->delete();
		$table->whereLike( 'option_name', 'top_keywords_graph' )->delete();
		$table->whereLike( 'option_name', 'dashboard_stats_widget' )->delete();
		$table->whereLike( 'option_name', 'rank_math_analytics_data_info' )->delete();

		do_action( 'rank_math/analytics/purge_cache', $table );

		wp_cache_flush();
	}

	/**
	 * Get search console table info.
	 *
	 * @return array
	 */
	public static function info() {
		global $wpdb;

		if ( ! Api::get()->is_console_connected() ) {
			return [];
		}

		if ( ! DB_Helper::check_table_exists( 'rank_math_analytics_gsc' ) ) {
			return [];
		}

		$key  = 'rank_math_analytics_data_info';
		$data = get_transient( $key );
		if ( false !== $data ) {
			return $data;
		}

		$days = self::analytics()
			->selectCount( 'DISTINCT(created)', 'days' )
			->getVar();

		$rows = self::analytics()
			->selectCount( 'id' )
			->getVar();

		$size = DB_Helper::get_var( "SELECT SUM((data_length + index_length)) AS size FROM information_schema.TABLES WHERE table_schema='" . $wpdb->dbname . "' AND (table_name='" . $wpdb->prefix . "rank_math_analytics_gsc')" );
		$data = compact( 'days', 'rows', 'size' );

		$data = apply_filters( 'rank_math/analytics/analytics_tables_info', $data );

		set_transient( $key, $data, DAY_IN_SECONDS );

		return $data;
	}

	/**
	 * Has data pulled.
	 *
	 * @return boolean
	 */
	public static function has_data() {
		static $rank_math_gsc_has_data;
		if ( isset( $rank_math_gsc_has_data ) ) {
			return $rank_math_gsc_has_data;
		}

		$id = self::objects()
		->select( 'id' )
		->limit( 1 )
		->getVar();

		$rank_math_gsc_has_data = $id > 0 ? true : false;
		return $rank_math_gsc_has_data;
	}

	/**
	 * Check if console data exists at specified date.
	 *
	 * @param  string $date   Date to check data existence.
	 * @param  string $action Action name to filter data type.
	 * @return boolean
	 */
	public static function date_exists( $date, $action = 'console' ) {
		$tables['console'] = DB_Helper::check_table_exists( 'rank_math_analytics_gsc' ) ? 'rank_math_analytics_gsc' : '';

		/**
		 * Filter: 'rank_math/analytics/date_exists_tables' - Allow developers to add more tables to check.
		 */
		$tables = apply_filters( 'rank_math/analytics/date_exists_tables', $tables, $date, $action );

		if ( empty( $tables[ $action ] ) ) {
			return true; // Should return true to avoid further data fetch action.
		}

		$table = self::table( $tables[ $action ] );

		$id = $table
			->select( 'id' )
			->where( 'DATE(created)', $date )
			->getVar();

		return $id > 0 ? true : false;
	}

	/**
	 * Add a new record into objects table.
	 *
	 * @param array $args Values to insert.
	 *
	 * @return bool|int
	 */
	public static function add_object( $args = [] ) {
		if ( empty( $args ) ) {
			return false;
		}

		unset( $args['id'] );

		$args = wp_parse_args(
			$args,
			[
				'created'        => current_time( 'mysql' ),
				'page'           => '',
				'object_type'    => 'post',
				'object_subtype' => 'post',
				'object_id'      => 0,
				'primary_key'    => '',
				'seo_score'      => 0,
				'page_score'     => 0,
				'is_indexable'   => false,
				'schemas_in_use' => '',
			]
		);

		return self::objects()->insert( $args, [ '%s', '%s', '%s', '%s', '%d', '%s', '%d', '%d', '%d', '%s' ] );
	}

	/**
	 * Add new record in the inspections table.
	 *
	 * @param array $args Values to insert.
	 *
	 * @return bool|int
	 */
	public static function store_inspection( $args = [] ) {
		if ( empty( $args ) || empty( $args['page'] ) ) {
			return false;
		}

		unset( $args['id'] );

		$defaults = self::get_inspection_defaults();

		// Only keep $args items that are in $defaults.
		$args = array_intersect_key( $args, $defaults );

		// Apply defaults.
		$args = wp_parse_args( $args, $defaults );

		// We only have strings: placeholders will be '%s'.
		$format = array_fill( 0, count( $args ), '%s' );

		// Check if we have an existing record, based on 'page'.
		$id = self::inspections()
			->select( 'id' )
			->where( 'page', $args['page'] )
			->getVar();

		if ( $id ) {
			return self::inspections()
				->set( $args )
				->where( 'id', $id )
				->update();
		}

		return self::inspections()->insert( $args, $format );
	}

	/**
	 * Get inspection defaults.
	 *
	 * @return array
	 */
	public static function get_inspection_defaults() {
		$defaults = [
			'created'              => current_time( 'mysql' ),
			'page'                 => '',
			'index_verdict'        => 'VERDICT_UNSPECIFIED',
			'indexing_state'       => 'INDEXING_STATE_UNSPECIFIED',
			'coverage_state'       => '',
			'page_fetch_state'     => 'PAGE_FETCH_STATE_UNSPECIFIED',
			'robots_txt_state'     => 'ROBOTS_TXT_STATE_UNSPECIFIED',
			'rich_results_verdict' => 'VERDICT_UNSPECIFIED',
			'rich_results_items'   => '',
			'last_crawl_time'      => '',
			'crawled_as'           => 'CRAWLING_USER_AGENT_UNSPECIFIED',
			'google_canonical'     => '',
			'user_canonical'       => '',
			'sitemap'              => '',
			'referring_urls'       => '',
			'raw_api_response'     => '',
		];

		return apply_filters( 'rank_math/analytics/inspection_defaults', $defaults );
	}

	/**
	 * Add/Update a record into/from objects table.
	 *
	 * @param array $args Values to update.
	 *
	 * @return bool|int
	 */
	public static function update_object( $args = [] ) {
		if ( empty( $args ) ) {
			return false;
		}

		// If object exists, try to update.
		$old_id = absint( $args['id'] );
		if ( ! empty( $old_id ) ) {
			unset( $args['id'] );

			$updated = self::objects()->set( $args )
			->where( 'id', $old_id )
			->where( 'object_id', absint( $args['object_id'] ) )
			->update();

			if ( ! empty( $updated ) ) {
				return $old_id;
			}
			$old_id = self::objects()
			->select( 'id' )
			->where( 'object_id', absint( $args['object_id'] ) )
			->getVar();
			if ( ! empty( $old_id ) ) {
				// $updated may sometimes return 0 if there is no field that is changed, even if a row with $args['object_id'] exists.
				return $old_id;
			}
		}

		// In case of new object or failed to update, try to add.
		return self::add_object( $args );
	}

	/**
	 * Add console records.
	 *
	 * @param string $date Date of creation.
	 * @param array  $rows Data rows to insert.
	 */
	public static function add_query_page_bulk( $date, $rows ) {
		$chunks = array_chunk( $rows, 50 );

		foreach ( $chunks as $chunk ) {
			self::bulk_insert_query_page_data( $date . ' 00:00:00', $chunk );
		}
	}

	/**
	 * Bulk inserts records into a console table using WPDB.  All rows must contain the same keys.
	 *
	 * @param  string $date        Date.
	 * @param  array  $rows        Rows to insert.
	 */
	public static function bulk_insert_query_page_data( $date, $rows ) {
		global $wpdb;

		$data         = [];
		$placeholders = [];
		$columns      = [
			'created',
			'query',
			'page',
			'clicks',
			'impressions',
			'position',
			'ctr',
		];
		$columns      = '`' . implode( '`, `', $columns ) . '`';
		$placeholder  = [
			'%s',
			'%s',
			'%s',
			'%d',
			'%d',
			'%d',
			'%d',
		];

		// Start building SQL, initialise data and placeholder arrays.
		$sql = "INSERT INTO `{$wpdb->prefix}rank_math_analytics_gsc` ( $columns ) VALUES\n";

		// Build placeholders for each row, and add values to data array.
		foreach ( $rows as $row ) {
			if (
				$row['position'] > self::get_position_filter() ||
				Str::contains( '?', $row['page'] )
			) {
				continue;
			}

			$data[] = $date;
			$data[] = $row['query'];
			$data[] = self::get_page( $row['page'] );
			$data[] = $row['clicks'];
			$data[] = $row['impressions'];
			$data[] = $row['position'];
			$data[] = $row['ctr'];

			$placeholders[] = '(' . implode( ', ', $placeholder ) . ')';
		}

		// Don't run insert with empty dataset, return 0 since no rows affected.
		if ( empty( $data ) ) {
			return 0;
		}

		// Stitch all rows together.
		$sql .= implode( ",\n", $placeholders );

		// Run the query.  Returns number of affected rows.
		return DB_Helper::query( $wpdb->prepare( $sql, $data ) );
	}

	/**
	 * Get page slug from full URL.
	 *
	 * @param  string $url Full URL to parse.
	 * @return string Page path/slug with leading slash.
	 */
	public static function get_page( $url ) {
		if ( empty( $url ) || ! is_string( $url ) ) {
			return '';
		}

		$url = urldecode( preg_replace( '/#.*$/', '', $url ) );

		$url = self::remove_hash( $url );

		// Parse the URL to get the path component.
		$parsed_url = wp_parse_url( $url );
		if ( isset( $parsed_url['path'] ) ) {
			return $parsed_url['path'];
		}

		// Fallback: try to extract path by removing domain.
		$host = Helper::get_home_url();
		$url  = str_replace( $host, '', $url );

		// Remove ASCII domain.
		$host_ascii = idn_to_ascii( $host );
		$url        = str_replace( $host_ascii, '', $url );

		$url = preg_replace( '#^https?://(www\.)?#i', '', $url );

		return $url;
	}

	/**
	 * Remove hash part from Url.
	 *
	 * @param  string $url Url to process.
	 * @return string
	 */
	public static function remove_hash( $url ) {
		if ( ! Str::contains( '#', $url ) ) {
			return $url;
		}

		$url = \explode( '#', $url );
		return $url[0];
	}

	/**
	 * Get position filter.
	 *
	 * @return int
	 */
	private static function get_position_filter() {
		$number = apply_filters( 'rank_math/analytics/position_limit', false );
		if ( false === $number ) {
			return 100;
		}

		return $number;
	}

	/**
	 * Get all inspections.
	 *
	 * @param array $params   REST Parameters.
	 * @param int   $per_page Limit.
	 */
	public static function get_inspections( $params, $per_page ) {
		$page     = ! empty( $params['page'] ) ? absint( $params['page'] ) : 1;
		$per_page = absint( $per_page );
		$offset   = ( $page - 1 ) * $per_page;

		$inspections = self::inspections()->table;
		$objects     = self::objects()->table;

		$query = self::inspections()
			->select( [ "$inspections.*", "$objects.title", "$objects.object_id" ] )
			->leftJoin( $objects, "$inspections.page", "$objects.page" )
			->where( "$objects.page", '!=', '' )
			->orderBy( 'id', 'DESC' )
			->limit( $per_page, $offset );

		do_action_ref_array( 'rank_math/analytics/get_inspections_query', [ &$query, $params ] );

		$results = $query->get();

		return apply_filters( 'rank_math/analytics/get_inspections_results', $results );
	}

	/**
	 * Get inspections count.
	 *
	 * @param array $params   REST Parameters.
	 *
	 * @return int
	 */
	public static function get_inspections_count( $params ) {
		$inspections = self::inspections()->table;
		$objects     = self::objects()->table;
		$query       = self::inspections()
		->selectCount( "$inspections.id", 'total' )
		->leftJoin( $objects, "$inspections.page", "$objects.page" )
		->where( "$objects.page", '!=', '' );

		do_action_ref_array( 'rank_math/analytics/get_inspections_count_query', [ &$query, $params ] );

		return $query->getVar();
	}
}
PK     —ŠU]šî•K  K  )  includes/modules/analytics/class-ajax.phpnu „[µü¤        <?php
/**
 * The Analytics AJAX
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use WP_Error;
use RankMath\Helper;
use RankMath\Google\Api;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Google\Analytics;
use RankMath\Google\Authentication;
use RankMath\Sitemap\Sitemap;
use RankMath\Analytics\Workflow\Console;
use RankMath\Analytics\Workflow\Inspections;
use RankMath\Analytics\Workflow\Objects;
use RankMath\Google\Console as Google_Analytics;

defined( 'ABSPATH' ) || exit;

/**
 * AJAX class.
 */
class AJAX {

	use \RankMath\Traits\Ajax;

	/**
	 * Get the instance of this class.
	 *
	 * @return AJAX
	 */
	public static function get() {
		static $instance = null;

		if ( is_null( $instance ) ) {
			$instance = new self();
		}

		return $instance;
	}

	/**
	 * The Constructor
	 */
	public function __construct() {
		$this->ajax( 'query_analytics', 'query_analytics' );
		$this->ajax( 'add_site_console', 'add_site_console' );
		$this->ajax( 'disconnect_google', 'disconnect_google' );
		$this->ajax( 'verify_site_console', 'verify_site_console' );
		$this->ajax( 'google_check_all_services', 'check_all_services' );

		// Google Data Management Services.
		$this->ajax( 'analytics_delete_cache', 'delete_cache' );
		$this->ajax( 'analytic_start_fetching', 'analytic_start_fetching' );
		$this->ajax( 'analytic_cancel_fetching', 'analytic_cancel_fetching' );

		// Save Linked Google Account info Services.
		$this->ajax( 'check_console_request', 'check_console_request' );
		$this->ajax( 'check_analytics_request', 'check_analytics_request' );
		$this->ajax( 'save_analytic_profile', 'save_analytic_profile' );
		$this->ajax( 'save_analytic_options', 'save_analytic_options' );

		// Create new GA4 property.
		$this->ajax( 'create_ga4_property', 'create_ga4_property' );
		$this->ajax( 'get_ga4_data_streams', 'get_ga4_data_streams' );
	}

	/**
	 * Create a new GA4 property.
	 */
	public function create_ga4_property() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );
		$account_id = Param::post( 'accountID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );

		$timezone = get_option( 'timezone_string' );
		$offset   = get_option( 'gmt_offset' );

		if ( empty( $timezone ) && 0 !== $offset && floor( $offset ) === $offset ) {
			$offset_st = $offset > 0 ? "-$offset" : '+' . absint( $offset );
			$timezone  = 'Etc/GMT' . $offset_st;
		}

		$args = [
			'displayName' => get_bloginfo( 'sitename' ) . ' - GA4',
			'parent'      => "accounts/{$account_id}",
			'timeZone'    => empty( $timezone ) ? 'UTC' : $timezone,
		];

		$response = Api::get()->http_post(
			'https://analyticsadmin.googleapis.com/v1alpha/properties',
			$args
		);

		if ( ! empty( $response['error'] ) ) {
			$this->error( $response['error']['message'] );
		}

		$property_id   = str_replace( 'properties/', '', $response['name'] );
		$property_name = esc_html( $response['displayName'] );
		$all_accounts  = get_option( 'rank_math_analytics_all_services' );
		if ( isset( $all_accounts['accounts'][ $account_id ] ) ) {
			$all_accounts['accounts'][ $account_id ]['properties'][ $property_id ] = [
				'name'       => $property_name,
				'id'         => $property_id,
				'account_id' => $account_id,
				'type'       => 'GA4',
			];

			update_option( 'rank_math_analytics_all_services', $all_accounts );
		}

		$this->success(
			[
				'id'   => $property_id,
				'name' => $property_name,
			]
		);
	}

	/**
	 * Get the list of Web data streams.
	 */
	public function get_ga4_data_streams() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );
		$property_id = Param::post( 'propertyID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );

		$response = Api::get()->http_get(
			"https://analyticsadmin.googleapis.com/v1alpha/properties/{$property_id}/dataStreams"
		);

		if ( ! empty( $response['error'] ) ) {
			$this->error( $response['error']['message'] );
		}

		if ( ! empty( $response['dataStreams'] ) ) {
			$streams = [];
			foreach ( $response['dataStreams'] as $data_stream ) {
				$streams[] = [
					'id'            => str_replace( "properties/{$property_id}/dataStreams/", '', $data_stream['name'] ),
					'name'          => $data_stream['displayName'],
					'measurementId' => $data_stream['webStreamData']['measurementId'],
				];
			}

			$this->success( [ 'streams' => $streams ] );
		}

		$stream = $this->create_ga4_data_stream( $property_id );
		if ( ! is_array( $stream ) ) {
			$this->error( $stream );
		}

		$this->success( [ 'streams' => [ $stream ] ] );
	}

	/**
	 * Check the Google Search Console request.
	 */
	public function check_console_request() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$success = Google_Analytics::test_connection();
		if ( false === $success ) {
			$this->error( esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ) );
		}

		$this->success();
	}

	/**
	 * Check the Google Analytics request.
	 */
	public function check_analytics_request() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$success = Analytics::test_connection();
		if ( false === $success ) {
			$this->error( esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ) );
		}

		$this->success();
	}

	/**
	 * Save analytic profile.
	 */
	public function save_analytic_profile() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$response = $this->do_save_analytic_profile(
			[
				'profile'             => Param::post( 'profile' ),
				'country'             => Param::post( 'country', 'all' ),
				'days'                => Param::get( 'days', 90, FILTER_VALIDATE_INT ),
				'enable_index_status' => Param::post( 'enableIndexStatus', false, FILTER_VALIDATE_BOOLEAN ),
			]
		);

		if ( is_wp_error( $response ) ) {
			$this->error( esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ) );
		}

		$this->success();
	}

	/**
	 * Save analytic profile.
	 */
	public function save_analytic_options() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$request = $this->do_save_analytic_options(
			[
				'account_id'       => Param::post( 'accountID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ),
				'property_id'      => Param::post( 'propertyID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ),
				'view_id'          => Param::post( 'viewID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ),
				'measurement_id'   => Param::post( 'measurementID', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ),
				'stream_name'      => Param::post( 'streamName', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ),
				'country'          => Param::post( 'country', 'all', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK ),
				'install_code'     => Param::post( 'installCode', false, FILTER_VALIDATE_BOOLEAN ),
				'anonymize_ip'     => Param::post( 'anonymizeIP', false, FILTER_VALIDATE_BOOLEAN ),
				'local_ga_js'      => Param::post( 'localGAJS', false, FILTER_VALIDATE_BOOLEAN ),
				'exclude_loggedin' => Param::post( 'excludeLoggedin', false, FILTER_VALIDATE_BOOLEAN ),
				'days'             => Param::get( 'days', 90, FILTER_VALIDATE_INT ),
			]
		);

		if ( is_wp_error( $request ) ) {
			$this->error( esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ) );
		}

		$this->success();
	}

	/**
	 * Disconnect google.
	 */
	public function disconnect_google() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );
		Api::get()->revoke_token();
		Workflow\Workflow::kill_workflows();

		foreach (
			[
				'rank_math_analytics_all_services',
				'rank_math_google_analytic_options',
			]
			as $option_name
		) {
			delete_option( $option_name );
		}

		$this->success();
	}

	/**
	 * Cancel fetching data.
	 */
	public function analytic_cancel_fetching() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );
		Workflow\Workflow::kill_workflows();

		$this->success( esc_html__( 'Data fetching cancelled.', 'seo-by-rank-math' ) );
	}

	/**
	 * Start data fetching for console, analytics, adsense.
	 */
	public function analytic_start_fetching() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		if ( ! Authentication::is_authorized() ) {
			$this->error( esc_html__( 'Google oAuth is not authorized.', 'seo-by-rank-math' ) );
		}

		$days = Param::get( 'days', 90, FILTER_VALIDATE_INT );
		$days = $days * 2;
		$rows = DB::objects()
			->selectCount( 'id' )
			->getVar();

		if ( empty( $rows ) ) {
			delete_option( 'rank_math_analytics_installed' );
		}
		delete_option( 'rank_math_analytics_last_single_action_schedule_time' );
		// Start fetching data.
		foreach ( [ 'console', 'analytics', 'adsense' ] as $action ) {
			Workflow\Workflow::do_workflow(
				$action,
				$days,
				null,
				null
			);
		}

		$this->success( esc_html__( 'Data fetching started in the background.', 'seo-by-rank-math' ) );
	}

	/**
	 * Delete cache.
	 */
	public function delete_cache() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$days = Param::get( 'days', false, FILTER_VALIDATE_INT );
		if ( ! $days ) {
			$this->error( esc_html__( 'Not a valid settings founds to delete cache.', 'seo-by-rank-math' ) );
		}

		// Delete fetched console data within specified date range.
		DB::delete_by_days( $days );

		// Cancel data fetch action.
		Workflow\Workflow::kill_workflows();
		delete_transient( 'rank_math_analytics_data_info' );
		$db_info = DB::info();

		$this->success(
			[
				'days' => $db_info['days'] ?? 0,
				'rows' => Str::human_number( $db_info['rows'] ?? 0 ),
				'size' => size_format( $db_info['size'] ?? 0 ),
			]
		);
	}

	/**
	 * Search objects info by title or page and return.
	 */
	public function query_analytics() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$query = Param::get( 'query', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );

		$data = DB::objects()
		->whereLike( 'title', $query )
		->orWhereLike( 'page', $query )
		->limit( 10 )
		->get();

		$this->send( [ 'data' => $data ] );
	}

	/**
	 * Check all google services.
	 */
	public function check_all_services() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$result = [
			'isVerified'           => false,
			'inSearchConsole'      => false,
			'hasSitemap'           => false,
			'hasAnalytics'         => false,
			'hasAnalyticsProperty' => false,
		];

		$result['homeUrl']         = Google_Analytics::get_site_url();
		$result['sites']           = Api::get()->get_sites();
		$result['inSearchConsole'] = $this->is_site_in_search_console();

		if ( $result['inSearchConsole'] ) {
			$result['isVerified'] = Helper::is_localhost() ? true : Api::get()->is_site_verified( Google_Analytics::get_site_url() );
			$result['hasSitemap'] = $this->has_sitemap_submitted();
		}

		$result['accounts'] = Api::get()->get_analytics_accounts();

		if ( ! empty( $result['accounts'] ) ) {
			$result['hasAnalytics']         = true;
			$result['hasAnalyticsProperty'] = $this->is_site_in_analytics( $result['accounts'] );
		}

		$result = apply_filters( 'rank_math/analytics/check_all_services', $result );

		update_option( 'rank_math_analytics_all_services', $result );

		$this->success( $result );
	}

	/**
	 * Add site to search console
	 */
	public function add_site_console() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$home_url = Google_Analytics::get_site_url();
		Api::get()->add_site( $home_url );
		Api::get()->verify_site( $home_url );

		$this->success( [ 'sites' => Api::get()->get_sites() ] );
	}

	/**
	 * Verify site console.
	 */
	public function verify_site_console() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'analytics' );

		$home_url = Google_Analytics::get_site_url();
		Api::get()->verify_site( $home_url );

		$this->success( [ 'verified' => true ] );
	}

	/**
	 * Is site in search console.
	 *
	 * @return boolean
	 */
	private function is_site_in_search_console() {
		// Early Bail!!
		if ( Helper::is_localhost() ) {
			return true;
		}

		$sites    = Api::get()->get_sites();
		$home_url = Google_Analytics::get_site_url();

		foreach ( $sites as $site ) {
			if ( trailingslashit( $site ) === $home_url ) {
				$profile = get_option( 'rank_math_google_analytic_profile' );
				if ( empty( $profile ) ) {
					update_option(
						'rank_math_google_analytic_profile',
						[
							'country' => 'all',
							'profile' => $home_url,
						]
					);
				}
				return true;
			}
		}

		return false;
	}

	/**
	 * Is site in analytics.
	 *
	 * @param array $accounts Analytics accounts.
	 *
	 * @return boolean
	 */
	private function is_site_in_analytics( $accounts ) {
		$home_url = Google_Analytics::get_site_url();

		foreach ( $accounts as $account ) {
			foreach ( $account['properties'] as $property ) {
				if ( ! empty( $property['url'] ) && trailingslashit( $property['url'] ) === $home_url ) {
					return true;
				}
			}
		}

		return false;
	}

	/**
	 * Has sitemap in search console.
	 *
	 * @return boolean
	 */
	private function has_sitemap_submitted() {
		$home_url = Google_Analytics::get_site_url();
		$sitemaps = Api::get()->get_sitemaps( $home_url );

		if ( ! \is_array( $sitemaps ) || empty( $sitemaps ) ) {
			return false;
		}

		foreach ( $sitemaps as $sitemap ) {
			if ( $sitemap['path'] === $home_url . Sitemap::get_sitemap_index_slug() . '.xml' ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Create a new data stream.
	 *
	 * @param string $property_id GA4 property ID.
	 */
	private function create_ga4_data_stream( $property_id ) {
		$args = [
			'type'          => 'WEB_DATA_STREAM',
			'displayName'   => 'Website',
			'webStreamData' => [
				'defaultUri' => home_url(),
			],
		];

		$stream = Api::get()->http_post(
			"https://analyticsadmin.googleapis.com/v1alpha/properties/{$property_id}/dataStreams",
			$args
		);

		if ( ! empty( $stream['error'] ) ) {
			return $stream['error']['message'];
		}

		return [
			'id'            => str_replace( "properties/{$property_id}/dataStreams/", '', $stream['name'] ),
			'name'          => $stream['displayName'],
			'measurementId' => $stream['webStreamData']['measurementId'],
		];
	}

	/**
	 * Save analytic profile.
	 *
	 * @param array $data Data to save.
	 */
	public function do_save_analytic_options( $data = [] ) {
		$value = [
			'account_id'       => $data['account_id'] ?? '',
			'property_id'      => $data['property_id'] ?? '',
			'view_id'          => $data['view_id'] ?? '',
			'measurement_id'   => $data['measurement_id'] ?? '',
			'stream_name'      => $data['stream_name'] ?? '',
			'country'          => $data['country'] ?? 'all',
			'install_code'     => $data['install_code'] ?? false,
			'anonymize_ip'     => $data['anonymize_ip'] ?? false,
			'local_ga_js'      => $data['local_ga_js'] ?? false,
			'exclude_loggedin' => $data['exclude_loggedin'] ?? false,
			'days'             => $data['days'] ?? 90,
		];

		$days = $value['days'];

		$prev = get_option( 'rank_math_google_analytic_options' );
		// Preserve adsense info.
		if ( isset( $prev['adsense_id'] ) ) {
			$value['adsense_id'] = $prev['adsense_id'];
		}
		update_option( 'rank_math_google_analytic_options', $value );

		// Remove other stored accounts from option for privacy.
		$all_accounts = get_option( 'rank_math_analytics_all_services', [] );
		if ( isset( $all_accounts['accounts'][ $value['account_id'] ] ) ) {
			$account = $all_accounts['accounts'][ $value['account_id'] ];

			if ( isset( $account['properties'][ $value['property_id'] ] ) ) {
				$property              = $account['properties'][ $value['property_id'] ];
				$account['properties'] = [ $value['property_id'] => $property ];
			}

			$all_accounts['accounts'] = [ $value['account_id'] => $account ];
		}
		update_option( 'rank_math_analytics_all_services', $all_accounts );

		// Test Google Analytics (GA) connection request.
		if ( ! empty( $value['view_id'] ) || ! empty( $value['country'] ) || ! empty( $value['property_id'] ) ) {
			$request = Analytics::get_sample_response();
			if ( is_wp_error( $request ) ) {
				return new WP_Error(
					'insufficient_permissions',
					esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' )
				);
			}
		}

		// Start fetching analytics data.
		Workflow\Workflow::do_workflow(
			'analytics',
			$days,
			$prev,
			$value
		);

		return true;
	}

	/**
	 * Save analytic profile.
	 *
	 * @param array $data Data to save.
	 */
	public function do_save_analytic_profile( $data = [] ) {
		$profile             = $data['profile'] ?? '';
		$country             = $data['country'] ?? 'all';
		$days                = $data['days'] ?? 90;
		$enable_index_status = $data['enable_index_status'] ?? false;

		$success = Api::get()->get_search_analytics(
			[
				'country' => $country,
				'profile' => $profile,
			]
		);

		if ( is_wp_error( $success ) ) {
			return new WP_Error( 'insufficient_permissions', esc_html__( 'Data import will not work for this service as sufficient permissions are not given.', 'seo-by-rank-math' ) );
		}

		$prev  = get_option( 'rank_math_google_analytic_profile', [] );
		$value = [
			'country'             => $country,
			'profile'             => $profile,
			'enable_index_status' => $enable_index_status,
		];
		update_option( 'rank_math_google_analytic_profile', $value );

		// Remove other stored sites from option for privacy.
		$all_accounts          = get_option( 'rank_math_analytics_all_services', [] );
		$all_accounts['sites'] = [ $profile => $profile ];

		update_option( 'rank_math_analytics_all_services', $all_accounts );

		// Purge Cache.
		if ( ! empty( array_diff( $prev, $value ) ) ) {
			DB::purge_cache();
		}

		new Objects();
		new Console();
		new Inspections();

		// Start fetching console data.
		Workflow\Workflow::do_workflow(
			'console',
			$days,
			$prev,
			$value
		);

		return true;
	}
}
PK     —ŠU]ñ¬/ßæ	  æ	  >  includes/modules/analytics/assets/img/report-icon-external.pngnu „[µü¤        ‰PNG

   IHDR         ©¥–  ¡iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
   tiff:ImageLength="21"
   tiff:ImageWidth="21"
   tiff:ResolutionUnit="2"
   tiff:XResolution="72.0"
   tiff:YResolution="72.0"
   exif:PixelXDimension="21"
   exif:PixelYDimension="21"
   exif:ColorSpace="1"
   photoshop:ColorMode="3"
   photoshop:ICCProfile="sRGB IEC61966-2.1"
   xmp:ModifyDate="2021-05-01T05:37:27+02:00"
   xmp:MetadataDate="2021-05-01T05:37:27+02:00">
   <tiff:BitsPerSample>
    <rdf:Seq>
     <rdf:li>8</rdf:li>
    </rdf:Seq>
   </tiff:BitsPerSample>
   <tiff:YCbCrSubSampling>
    <rdf:Seq>
     <rdf:li>1</rdf:li>
     <rdf:li>1</rdf:li>
    </rdf:Seq>
   </tiff:YCbCrSubSampling>
   <xmpMM:History>
    <rdf:Seq>
     <rdf:li
      stEvt:action="produced"
      stEvt:softwareAgent="Affinity Photo (Jul 30 2020)"
      stEvt:when="2021-05-01T05:37:27+02:00"/>
    </rdf:Seq>
   </xmpMM:History>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>ò[ïv  �iCCPsRGB IEC61966-2.1  (‘u‘Ï+DQÇ?fˆühê%¬ŒÆ¨‰�2JÒå×fæÎ¼53^ï�$[e«(±ñkÁ_ÀVY+E¤d§¬‰zÎ›™šIæÜî¹Ÿû½çœî=\á”J[•>Hg²fh4¨ÍÎÍkÕ/TQ�›vÚ"Ê2†¦¦&(kŸ÷+vëuj•�û×êbqKAE�ð 2Ì¬ð˜ðÄjÖpxG¸Y%#1á3ánS.(|çèÑ<¿:œÈó·Ãf84®Fa-QÂÑVI3-,/§#�ZQ…û8/©�gf¦em—ÙŠEˆQ‚hŒ3Â0zÀ‹ŸÙQ&ß—ËŸdYr•xƒ5L–H�$K·¨+R=.«.z\FŠ5§ÿûjé}þ|õú T=Ûö{'ToÃÏ–mÙöÏ1¸Ÿà2SÌ_>„þÑ·ŠZÇx6àüª¨EwábZ�ˆÉIn™.]‡·Sh˜ƒ¦¨]È÷¬pÎÉ„×å«®aoº$Þ³ø±gÀ1‡k   	pHYs     šœ  ^IDAT8�­”»kTAÆgæ^ã&!ñU(Äˆˆé¬‚ïB,­REíµ°òÿ AÄÊ÷«Q;‚¢vŠŠ"HðIŒÑ¸ÉîÞ9ŸÅjtÍ&kÐÓÍœ3¿{¾{æ848ª_ÊLÆ6rwL" #:È˜=Üñ�±¦+rxÛ"çŸŒëÈP™‚HžÀM¢×ëe�nà°DB$àV_Ç,qôy™‹O¿*›¬Ô 8³kY«~ZÆ¼“oõuÂ		á_y ˜	SA Šÿuw#´Ä�Ÿôy"ñ³Ö$ö®+±smwÃI‹uÅ™™=P›xçÕ„öÝãYµ 7Ep¸ðqº:ÿ1ÜL…iÆ.7­,Muóp¸¢�Á†Ê9…Õ¸õf\[—wNåsH6ô÷8xo” È©¾NÌ"YŠùDŠüÍô®�è]¥ÆãÝ=¶´+ÇÃßªÓêd^§ý¼è3Åžk#ºü¾Ê‰MK 0_ªÍ 7g¼R,,¤¼ðÊˆsºo1W¶ÀæUí¶>�tÍk~m²ú§sÀdfc¿'÷^}¯óÄ¹�ô÷v4íé±þ”€ *�mñÅŸ^úPá\_‰þÞî9Y8ð0}P]¥ŒS}óçœ‚ª‰¥ŽíXbÇæJûõWÓþù�j„Ê)5lÊUjV,©­É^£ÿ°“÷GµÿÁ$ƒ;P ¹NyDÁˆ‚V~3À%¶ßåø†n ÷ìk•A!’2)ÔM‘šqº„@¦‚Õí�§=¿~æÝ—RH˜’HQDÏÁj˜Zƒ“Á–us|K-
9Œs›Œ    IEND®B`‚PK     —ŠU]¡›«  «  5  includes/modules/analytics/assets/img/report-logo.pngnu „[µü¤        ‰PNG

   IHDR      ‚   ‰’\"   PLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿.Ha   tRNS 'ðâ,ÿ)(¨¥¤ª�Iþ?Ü²¼º¿H»½-q>Gõc6	MON7=R31SQ<"ûäÌ®‚$àí Ð”KÏ·­éá‡ËE0Ø–}e&èTšÊŠµ˜¡ÒB™ÈÇy€ëï“‘Úó:„ÓCxÙ#ìsß�÷ükÞ4!*¬o.Ã/ÔòýÅJtr@Éúç‰P8�ŸÛø¸j£Í ôùæÖ«L›Àvåöbfh©^ñ¦³Z
¯×ã|npŒwz±ÝVÑ2—…U9§\%¢Aî5~iuF�;Îg�Á_‹ˆ{+¾]Õ[W¹žƒX†´°mÆlŽÂYadœ`’Ä•¶êD”  ZIDATxìÓƒ•CA  À=}œ»ÿcìcÌ�éaÂ¹ÜÝoîá1¤ž²-äÒRd›»/"‚€  ‚€  ÜA@A@AA@A@� <¿¼¾mèýCRó™mîKRó�mîG.‹  åïßÿR¥˜¹û«ý/ÔêARÕÌb­ÀL;‹uIU·—Eúa†Ak2'‚ìfÄ¾=-èa®è[Û¶mÛ¶mÛ¶'Wcñ«g½ÕïéxºžÃööñõÑ�Ÿ�«¿~@ O AÁ>
!Å…†ùü)<Byr@"¡½¨è˜Ø¸°xv@ð?gRX"þ—$�<9 ÉÐ¹”Ô´tV@2ð¿LRXþ—ýä€H 9(7OŸ�|\¨àFò ,�\Ì¸�'�hRT3 P¬ÇJHA¥¸{ eúåÿ2¬xp *«8A5	çíq@jp¡Ú‡"� u�Ô“p¸ �¸PÓc "� –!4“`/p@Zp¡ÖGD�? âóÝ&�°‚,~@ÐNBCáü€ ‘Dêd„�®îîÔ‹u÷4ÙôöAeýü€X“@`„�ARÕÐðˆ­®Í	ˆøLUƒ@FI]cã¸Ú$? S¤sõ' DzÓ¸ÒL  â»]!�ðBä7‹ËÍñ2«Gº5/�°B³€ÀéD‹‰KÉoô—r–éæ­¬.•¯E®o<,l’NmA)�Àí±È�øÈÝ@Ò±i\hO9�ý²¥kK¤4	„ìq¹CR×¶½KKýQôñÉ,051uÚXræLZš<û·ó3óî¼ñý«¾àäÃÇ¢¬OŸ«oHÎ…'þ(nr_|!ZŽ²¢üõ{{wÅ™‡qü)òZ,Zšåh!È‡Zh‡:v¸»Kh
	Ö6$¥\‚K¡�Tð¬¸C!…Ëá®W\Oaóaß™�yGXm÷ûqËê/ïèÿš˜Ð7d<’”ÐnÊGSKëfÓ$ºÐCÓ¦S0ãÅ&…œ¢›Ä˜
$*®ëÌf™g=xƒgÏ™ûuÇyÃ`G0Ì§BhÉ>é¯µúÒUßodƒL$�¡èô…TIž’RÄ�d� Ò·0$&L§Å@|÷ý jHùÃh)”©ïCÉ‹úQ0>,¬¯ S!�”[œ@•öK–ÆÀº` Ë’(
…«â¹"¨oyô§ ôÉ
júqeÔcÒ!‰J]`Sa(’–i²jõÕ]Ý®JÒ”’F�D­YAMù>
«‚�àmŠÚ”‚Ò�µ‰4°.‡¹@rÀÒŸ¨ëõõ�Haj÷aHüÙh%�M›gQ®ü–šP‹N¢	IÑ�¤d¦®z5`hðúr“LÚš÷÷È6*d…(¦e]ÿ¼ÙdÙvJ½÷X�l¥Ê[0·ÃÀšdç.šÐ­ƒÙ�iù)•F¾ y½�Äì¡hóºÑœ]fÉ‰Ê‰40ºˆý@þ"éC÷Bªæ8ó�üÜ�æüÅý�ì‹®@S†Bn?Í›ñ{(Ú�Gþ¼‹¦4ÈÊÎ™h¨ZšÝ@~¡Ê˜¤¤Òl O§i¿¸;�ä®	44rÿ y�Ò» ¼-¨hÈ3+hÂa›�l¡Ja˜„ý!Q•¦I¡GÜH<ÍXQ0CG):§^´à¸<ó¾´HuãõCHE³7@_(½ãe� �œpo &­�(ˆ‘Ÿõ÷âZÓ‚ln
„›l2]¶~h2½'ÓMžL=Yl¼4�½´`€Oa÷ßV 1Ë¦�ªú\‰Ïv{(�<½Á)jH¢¶Zî
ä´õ@òSåiÂmg(zzRðjJAAºêWžÚ>‡SCšÒðñi€�}˜ÂÙÎ£*g+ñá¼s)©½*­Þ¼«ÎùoÂÇHÈTž$+y(�’›PóQ�ïû‹gòÜYrø¶ÏºnoD5¬2gb�M·�îM“,{˜*ŸÁ8�sˆÐÍR´–‚“(gÈN
âÓ?êZü•O«¾6¦ô¥ËçûR-9
�LùÏu�¬BÁžå¿®súçÈi&ÉÜbä¡ù9'T¡†¸À¤æôá+z×O=5=ÈaŠ¾ÓÙº(x%+DEÊ¼K•pÓ�\ýb`)8<·jÕÆZ$ûF�T�ùå(ú4ý9„‚†8cr1CÄÌK%!*t-ÑÔ8×)¸mÒ@BS#á¡¡‘kÆRmtà‚+4p
ž	$mEE¡Î}™®Êô¤RVs�8 …›?Re •@Fô¦Ê<˜	äàñg¡e¹jô’Q õùÐŒ”,pÓƒJ a3-¬òîP¸µ‡*•/¬£ÔëðP qTP•°—dò;û iÔ
*|i*�©PÛð,•þj!�­%ë‡,�Tõfÿ.Ão`k˜}HŽ]or0ÊËn¹D’µBSéb ’e6eþä©@fRT7J‡Y§*ôLkCÑ&)¿nP¡·ù@öÎ’ö!—)úÔhVuQS�ì“Žý½D…JîdÜ@¸ú6` H‘ÿi’¥<Eµ¡²m%$ž¢B´q ¯@Ë²=Tn6�ÇK¶¯ŒA]
j\¾r¦AêRHä¦(ÔÝ�|
-ÃfS!: ÁÇÔWÃS�,¦Âç°fEÅ¹mç¨pÛd “¨V–QþTŠ$SÐ]ˆyÙûQ�)Ê½�\‚¶þThˆ�¼F]§á¡@Si'¬)GQK£@Þ„žvU7È-ª­‡µ@ð³JÉfU„[ANŠÆ¸5�‚Ð“@QÇ@+©g·‡)M¥pX´¬/wŒÙ=W(:o*�UT»«�¢è#É¬ê65ÝÈŸ(šäÖ@vBOŠ¾È@Ð‰ÚfÀ3�\2^ �Œ¦`ŠA ¡kE§ÍÒÊ¸ã@°’¢ú½ëá¦@ªRÔß��œ‡®¬]Ì@Jö£¦m	¤þ{TYËfRÐÂ �o¡o,­c�é#ïÃl ÈLAºî!Ù�á®@Õ¥àwÒú~¤ 1 ©zH;�«ð@ OTÊDµs°ì+}»(˜]È0�™TK�­@vëž�mMÁN·‚�¬vc IC /?�È•djÛd?�±ÐÒùÃ'éª¬ëEA¢<�±�èAAùÒ@¾~¥Êì—`/ä§`\¬ö¬ê{È°ôñ¹AÁ{nä¾é»¾f^ cB©ãYØdÑ…C”æ?Y»^5�€Ä°²7S�5�¾N¥Ýä�L‡Äm
Æ?!$/\û~vQ^mµ¢)È”†ó,2".eÁÁ;Û×©´¡à_n¤:$P°( Iž&Þ•¡k¸Õ@lº	=&µ�FÆ�´2À ¬,��ý¹éâô4»�àŠÀáßÚïM“�T½�»S%<È'�Øx�p2ä­F]Kà�@&CÇîÙä;Hœ¡èSi Ô2Ãv øIã\M^��Ïf´´v^
ä$¦º?�ž¤w18Dµ¥DwïrÚ:¼K%û�\rC ómÒAc%@Ak�ÜŠóf …!ÑßÝ�Œc&�Ò'
eªP"'¼HKÉ ew2Ï³�0Ån ÈIÁ¢XõIÈ·a%�WO’¾	ä/’~­ógc=H­88¼8�R½È¸ÆÐ´¡(FÚ$K<÷T³ªÛ§Y	ä­öôU /x-�œâ�¡ÀSž	¤2Ü� Ôx!�å# iß\º3�¢ž¤n”Í@0•¢ÊØEÁX¤ù[dÀ;ðÈàPòM$vþ“šx>�Në¡#œ�Øs)È5†‚°ÈNþÖ)p$
›†¹7�¤O�¡W<5L|^<²íá@ÚO¹=—h�p‹Ý@6QÔ—‚¬VéöÛd\Ó�šÃìçº1�uƒá°wµ¼!LAéìé@Z(X¾Å½5gŠ/&8ðµOY1“*Ål‚™ò�\“�ô§Ê¦Km<¯˜ è¼Ä@äƒ+�á4"Ne*º)�ÿü€[¨¥ÅmM‡/áé@ø6ô¼O…WFÀU/_R·3B©ÒÐf QIÔ”\ÄB ƒöP¡v™³p5:0ÉY‚Â#ãë¥Ö‡ÓsmÜÈß¦ÁáÀij(¿@ñCñû7�øÞz+Ué–ÉÜÍŠâ)jš-[|Hæh *�Jíl‚[Ô”�l¥ÂKÐôf RåØpê|¥˜U}œ–}—þ˜�ä+
‡ïQKíÈàX°z<þèÑA1ƒ”jbD2EaCÌüÚÆvÀß9]_ó®Þïm‚ZÔð¬’“¢rø­r_±c¾©�°P8ÁîÅ�ÈÁX8¬¯@mnã‘I$“K=v + a’*KhªNÁø] éûðÐMª|a3�Ô)äu(U¡`9~�ô�_‚­ÏP©ÞÏ#àÔ Uo›�¤—†CÉœÔ’«	GH.ðÔðê\f¶B)¸•|ÈÕšÈÐœ*¯Ø›éâ}XYA¢)*[	¤…�ùà‹QpjØª©‘Pœbo…Ú	ädøv5¼^J÷ã©@Õ¥BI¸ZÏÔep+}Èù¡xä*�Ën/�Rã¨’´OHÄˆ¶Q�¼Áî
Ò”‚«>d]9þûþlê¸ÿC8}õ·0‹�|ó†¤–êË Ò�“á©@ÐÁøBØ´
¦þ)OðM ¿ªŸªB3{�`)Uþy ™¦Aô½¡#º¯A ó)èæ»@­Î§,·'R&áXw8Õÿ¥�…@’¯!ÃÚjè´®vŒò\ È£¹¼‰b+PÐÚþKŸ²
¨RÝ^ ø˜
saH›ì}HAÂ h›Nƒ@VS0;»�™pwœNŒ ‘�ŠŸAP.¿Ù@*6„Ã¶pKwbx0Ô£Át¦š?R°Ú~ôI Ó¡RŒ*§ìÒ�
›,Ò…¢× ée²€¢§}Hòü8×¦9Í§Ë¶ý�‰@æœ�CÚjj9\>ä	ÃÙØµ(…¦ÜôA Z¨U†b¸²æ†Å@ÆÐøŸÊÙÃ@ÎQô®wùÉ¹ï”„SÃ®§i^›ƒ‘pÚp%Ý(�;YàP£5$­|~¡Âf¨-7ž<t”¾	$.–Pia¬­@†Fð‘ÙC¬²/™‚
ÐP$œ†�<G…8¯ò3Ï—�à•CI´hJÞ)¤ÝSp˜v�ZÖ½
‚Tø/TºR”ðg¨¥í¢�y	.† Rm[�ˆkSa5´0:eùé
R³'Ea›ðÈÐ{7=È^ñ�”JiA;ê­�†SƒJôiž‡�¨¡õ)Àg�Ô¡¨M”|¦U•¯ T®ý(TO¥É¶Á7ÌPÖ™L…¯ÿ …"ÇI�`$Æ¯ŒÆC•{µãUÏ"Êv½í
»SNËR“d¢*�fÛàÐp9µÌì‚#¿Ÿ=—Jâ	Õúwï“~ŠRåi[�4d†½6y•JuD«ÇÅ…4ÈRª$�œ¿åà×é|`„—™4’2s:f+ó,eBwDÁ©ô®0&)	Yƒ©ÉÔðSQÀ§� ¿üÈÏzªuúèó›>lüÉÑÃÉ¤¿‚•TŠe5q^ÜbØS¨2;ôØÔr>³æÐÈ‰�E}“½H¡çOS&ôf üýN{J,¼8NMš^&2%Æ¦–<±ðu Q‹(
©¥z”ó³@°œJ+l‚¼qyóæ�d+�Ê4f~¦¾9ž¤Ä¡dJ,Úüw Cý5õ(1¾Î[”"ùP¦o‘¡µ„¿ø<�_?`� •rË±EZ¹%�´EÔwÀ³�”ºu˜2,x
ÅÿM™‰©Ù!(A’Û£á�w£üÂ,ß‚�¨°J©44:Ô�QžJý½
ÐP�…F�`õå÷d Ù:¾N™u5à*ruOJ´>	§i_üÔh+Š´¥–“ÏÁOAf*ä€Ò¨;$—‚TùÊë�ÄÜ§�{1a†� õóX …Ÿ¤ÌœËÃ¡mZj3Ê,™§šCà0©·üÂ,?d¡rœR	Ý1ÃŸÁ*eÚàí@0ôß”úûhfR×—ž	$ûªN”9|û,$
WO‰z¿ƒÒ°]ÔR§*ü(t4@Z|!õx˜èW�`;•î{)QGJ4²É1ü+Õ<È›î¡DØ®Ò02xK#JŒ»³í‰p�v ~> ü.Ÿ!mC¨­õó ð±‚¹Têãý@ðÇóÔÑ¬€Ê¦AáÔôýN·’v¦ e×¼3–�9L™gv¤Á¡ûj¹“žÖ�¢YÆÙÎÊî~ýGºJl¹¼.{´1æ‡�KÑ@(2=æ¿I2•à‘
¬„-Å(šm…·'ÓUAÇ;�Íäìå¡×ºÑÅºÂ”¦è $ºRA÷¯S&q˜—w~2%^ï1X"\»ð¼Bo†¿ùÈŒ:0ôRxø›NÖÂUl�¶“è6ºù‘afºäÑ;|FiH<•þæ#áá;¡4m´ð‡Ò‹A".ãÈ°qc42`—ðé—`ËW3œ~FèýPomïFA…%Ÿg…Ãá]©µ2…ïÍ(/,X�Ÿ€Â‰â\[…?ã<òß'C(1gu$¬)¹R~jd{Ùá÷©%O@hkÒáHê–ëGóLî¿ôåa C‹ÀW¾½àË<«�¶ü¶XŽ(Ø÷ÒçÇòä9öü³ÃÝþ�ú&e>Þ64.HËšu€_	
Ú{°5%úMv•m»ˆ–‡?	
Š)S›2‰-«âqKM§i²ÂŸ]@™woÅc›W‡¦Ìš
ÿÔ“úzþ+î±³y}]~&(¨1õ¤ïß ÷)rä*¥æœƒÿ	
jM-!¹ºÀÝò^˜M]ó³ÃU¢«ÄÉ•á	UßéFMÝ
Ã/5¡ÚÉ1ð˜›ÏÒUóšðSAAK(šõvYxVÙ·gQ¡Y	ø­  èT«ÿ‹ð¼úW:QœÙàÏ‚‚òÑ!äÉyð–buèp>üZPÐ>�ù�Êð¦á×ç3üVPÐY’7vÄÂÛŠôÚ\~/(èàòmpô?�+Gž-À¬\    IEND®B`‚PK     —ŠU]"Á^I¬ I¬ <  includes/modules/analytics/assets/img/single-post-report.jpgnu „[µü¤        ÿØÿà JFIF      ÿÛ „ 

	

  ##3($$(3;2/2;H@@HZVZvvŸ

	

  ##3($$(3;2/2;H@@HZVZvvŸÿÂ Ã€" ÿÄ            ÿÚ     þ¡         @@        	         "	        &EI        €       *Úò        V–"4°        
Ñ%my        JL×]@        3ÆÄ6¸        Æ–+¦À        äší         1J'y         Ç;×P3¤Zö�•k7Ò@)kÈ D,˜¦»h        LR‰Þ@   )°    c�Šë¨aÅçòS^Þíšm`cÃçðã§g¡×6×PgÉÃÇ•º{ºfvÐò¥WÓK…1MvÐ  ËÇh�sž¹ãž½fÒ   ¦)Dï9ðcÓ¥5µ‚Ì0¾×²&+*c{ñaÓß¨    Ç;×QÅâx~nnŸGÕèß¿¶Ã�Åð<®ZÛGØí×³¿qÏåxžg5g^ßK¯^Îý„aÍ•I¶ý:Šbší   _?ài�ú°¿¯§ÏßÖÛLÑîôµ   ¦)Dï<-åöôV÷Ús›ôoçøý{é¼V"–Šrz�Þ7?o»Þ    1ÎÅuÔãùÏ™à„Ät}¥=^·AËó¿-æ@_Ýöv×Öï0ñ>kÌ„ªôý}º}?@sqæ±èìÔ¦)®Ú   có-ž]};iÙÕó\ý6åÊX{ÿ ]Ú  LR‰Þ|ÿ �óu¶µ°Ã·²¾ÇÏo•ö×{é:ÆGêø¼½ßCè€   s±]ucóÿ æ[H#o§ôk·±ÖËÂøßÚÄJ}¿Wmý_MO#ä¼iÖoÏÓõo×êzrÃ‹\"Ž¾Ë©Šk¶€  |ÿ Ìq×»¦·õzþsÌ¿\òçÓ~{ë»@  )ŠQ;Ï/‡YÃš/�~–¼>óÊÃŸL;gžó=tÃÝõ<þ^ÏW     c�Šë«Íø¿š�-®¹bõý-½kwÆü­5›Jµîôú}?w¹Éò¿+Ž—ëì§.þ‡O©ïz
ñq­3*¢šz
bší   <ÿ &³mð·§+ÊzmËÛêê  LR‰ÞkŒÅi¦M0æôõË<óåìè…-¥séÞ”ÓP    Ç;×ZøåëÕÓ¶¸ãÉ•½oµöí'ÂxºëÑÕ­9ù)~¯®ún‡•ñí§©êcäpRz~¯êzYyü×µæÊÖ¹Ïwe©Šk¶€  
æ-VŒÒ˜^"n   ¦)Dï �t±­î      Ç;×\¾_àù:=?C›�üß;ŸÖûÿ ~sùßƒóöëôz7Ëuûo­Þ<„ò¶�ýŸW�Äâ­/öaÒçó±¾š©7®4¯g¡zbší         1J'y#:@  Lép    ìW]qùO‚çß¿Ñåçééóx¹ý/Ð~Šsù¯‚ãß·ÒÓ£øüì-öß]Ñ=ð>fÓÙïoÃçpV�±û>§?™•í²�+�kÙèÞ˜¦»h        LR‰ÞYòóç   ¶ý]     s±]uËæ?>ãß£Õé9¼¾Noô?yOžø;}{:öÏŸ�ŸŸºú½žçþ6ÎŸjØcçeŽ¿qö<Î{Îº‘žUŽïBôÅ5Û@        
b”NóN>9µky…’„DÈ¦Ýû€    c�Šë¬x?žø;oèwÞž6W÷þ¡ãüÎë{mzåZsúÿ }ïÝåüÊÍïèwGXzŸ }&¬¼þµö´S:SOG¶iŠk¶€ $    LR‰Þpó«ÑO#Ïõ»9-Ñ6¾qLtÑNºe‡g|€    Ç;×WÄ|V[é¤×<ùûþ÷ëzN_�øž}�9OÖý·¢s|—ÂyúÎ½SÍŽSõŸyêÊ8üÜ­30ŠÇ_¥º˜¦»h Ï|h¾ýl  3ÃŸ×Û~�. Å(�ç“Îßo+à¾wìþ›ÌçÒý}\Œ,‹MÞ·ªåßÑ¸    s±]ugàü'ÌÓK§G×}Ç¯%|Šùœ¯2­gßû_R<Ÿ‡ù[^ÑZO¿÷I¸Çƒ†’”C£Ðí•1MvÐ ®g�Ã…oÝéú}»È  Ã‹Ìó89²_~ÏKÔô:. S¢wžO?m¼¿Ï¾oí¾³ÎòñÓ·¿ÍËkgËn‹ãŸ¹îÏ.þ�À    c�Šë©ÏóŸó¼±1nï©û?oPÇÄù�ä�ÑîýwÐô†^'Æü·ŸI:}ï³ú~ÀaÁÉŒ=ÝšÅ5Û@\'‰çcmn¦Q¿¥íû]Ú  S�Æð¼žyÓEs¦�þç¹él ¦)Dï8yÕèËÄóýOJRÝ™RÚ1�g*vuÓÞé    Žv+®£ŸÆù¯ÏÏOè¾�ÕÔ|ÏŸð¼ütîö¾‡Öé//ç>{ÊçÓ»Ýú_o¬<¼ØU§GWF‚˜¦»h‡‘ó¾&]¾�¡×«.??ÍäßÜú/W` 2ó~wÁãéô½.ÍÔåóüÎ{Gíu S¢wšòqDÖ¶ºªÅÄ¢DJ½Û     c�Šë¨S“‡‹=û{º¤˜qrc§_oMÀ#›‡‡öwõè ®yÕ}51MvÐ/Ëù>ßµèôéesåó|?/kê}}@?+åüö=ßS¯[#<<ÿ Ââô¾£ßêLR‰ÞUåæ¥@ m¿VÀ    s±]uTÈ , ap  1MvÐü_”ñý¤÷;4—ƒóœžçÕú· #ÌùOžÛèþƒÐÚ@Ï—Æù¯#ÒúÏ{p)ŠQ;É¬  Íì     c�Šß[         Ë)ší gÉüÿ wÕ{½@qüÿ Ëó}7Ô÷€1ò¶ú¤î°Ïâü§“îý‡©`S¢w�        s±Uä        ¬Y]´?Íü”ý_Ñu€qüÏËíõÿ A°~Æð}'Õú2 þËÏÕû»˜¥¼€ Rl      s°¨        2®ÚÊøïè~·Ñ ¾gÈxAö€Èü¿©ö>Î€ qøœ^�±Ö
b”NóN<zo�ö!drsmÝ°      c�€         Û@Ëç¾3O²÷µ’|çÇíöžíÀ¯�ñ>Ö}WPBP�Ž?3?KÐ°S¢wž_šóûïÉn˜šÛYéáåéö½0      Ç;          +¶�Éò-î}—¤2ó<Þ�O6;ý]Hò>/Íúï©Ü¾oã7ûoræ>gŸN¾žõ=¼ÞÏO`¦)Dï<)áß|óÂ�NsîW—¯ßõ¤      c�ˆ€        e]´;âü_ªú¾¢</Îþ{¯ë8¾S³ëþãÑ_ó¿Gö rüŸÉûiéIçüWÇøþ—§äGÖ}÷¬+Áæíêô1J'yçðü‰ÓYãÏ«jòGµ~NŸ_°      1ÎÅmy        +Iší yçý�Óleð¿•vyúO‘ôŸu÷~ˆçù?”ö~×Ñ‹ã~sé~Ç°s|÷Ç~y[vé�ëŸkaÅåÏ«ÖÅ(�æ9ò•¦‘kENZo      Žv+¦À        ã3]´ã|O'Ú}†_ùF¾7¯Ÿ¡ïþ£ôRcó#ê}§¦ÅøUõÝAÅðŸžû^6Gí£è9<¨õºÂ˜¥¼¡        Žv+®         Å5Û@ñ¾'�ìþ�R>còß�ñ;þ£³—ÌýgíngàüçwÔw�ÁñŸ=õ?aÔåÜÿ yò¿å?iûý–õ;˜¥¼Ó§KBÀ  Œ'Y‰�   Ç;×P        
bší y_æýÓìGÏþcó9}GW‡Íßú§ÔX§—åõû qüÍ}ØöŒþKóÏ«ú¿†ø~?¡ýWé$qywõ:‚˜¥¼Óƒg¦¼zt^k†»E+¾  æàÉ§lqíÑxÎ½;  Žv+®¥&À¬\M2�l    q{
bší pü¿›ô~þÃƒäþ³éòùŒ>“ê»Exxú{ô›ùÿ gé»|?ßïùß•§Ô}7Prp_ÐÜ)ŠQ;Íx8ínÎ/z,§?WFpõ}  qy˜´ïåñoÕxÆ=�O@  c�Šë«‡ÎÓ³QŸ}›Ú&çÓÍÁG¶À §--ÑJmz®åÅ¬º6æåžž»Å5Û@ÏÏÇ»°øß¢9££`e•÷N.>¾ë†tÖÙsº5yNòÅ(�æ8<ØéïáòÕÏF¶o·¯é “ÎÅ¯g…M›Ýöõ  9Ø®ºÓÃù×N–¥cúõœæºe§µÃåéìûZ€›ÇçÛÑâãîÓ	ôwó<ÚÎ™Öþ—¡ÇŒßÑÜ¦)®Ú³    [€  ˜¥¼¹x«·nXÎxe[M»:€—>kïÍÁY‰‹öwh  s±]u§ƒà×ƒŸLé×ÓÏ�é•£m=£ãòtö½�@‡“Ë§_—çîÂÞ×©æùuµ³�=/W,s�K ¦)®Ú         S¢w•i©X¯  !*Ð‘k  Žv+®±çòG—ÃÉ^îÝ9ytè‹F‘×íS‚Þ�` ãÊoËÏ–|¸úž·?%«4¼÷wåÇ—WmÊbší         1J'y         Ç;×UjÇ	îÝž6è¾Ê´  ¨¬RœØôuÍf&%}+”i ¦)®Ú;[¢³b°É­Ác= Ë;ë!L§[1ÇMì1J'y         Ç;×P(¸    ©� ˜¦»hGŒíÕLg[FS¿—OGx‰¬íËÁ§©èX
xþ?O~±òò4ïÖ!×‡�§Õí˜¥¼€        c�Šë¨        1MvÐ§ƒó×Ë�Övµ:ý�‡³£<¦+í[‡_kÜÐ~[åïk¨ö;¾o.Ý²ÎÙéícËÕïzÒ
b”Nò        Žv+®¥Bd   W2÷   ˜¦»hWÄùêòòé¶xcÑÒìõü'MóÇ{óû½|û^½ÀËç|jù<ØÇWÐzÞÛa^šGÐ¸º½ßJALR‰Þ@        1ÎÅuÕÇ€�zô�*Ö@+ÇÉYêí¸*@µô Å5ÛAËæg4ÖõÊšíèäç´«µñì×šÝ½ #�ðqyšú¾�OVšÎñNøçÛ·`)ŠQ;È        9Ø®ºçæå¼±¯£­t¸ÏŸ|ævß}ä~n‹ú{S+êaŽÛmvßP˜¦»h%jÁaPI3U€S.{ôi5Lˆ¼DÈ
b”Nò        Žv+®¹y×í¼sqvãÅè#²øsóy<:ßÓîß«@ùÖéÃGNÎ¼õè§68ù¼6ïôuèé�1MvÐ        ˜¥¼€        c�Šë®^mûmÜ�¼ÞWw^ÿ fÜÞ—·G³èm×¨üûösszñ¼¿C¯‹«ÕžL²ó8Ýž¦»õÈ˜¦»h        LR‰Þ@        1ÎÅu×?;�	·£O;o;¿l<ÎÓÓíß§@ùÍòËÑ¿—æõôðuzÖæÃ>J4ë×£¢@Å5Û@        
b”Nò        Žv+®±ÍÅçsßÐîëc8S³zaŽ45Û}À3óys¾þžüüÚé†�6ÇèMõß@˜¦»h        LR‰Þ@        1ÎÅuÕpsß¿®À¥DÛ@x¸2Ó·»@u�7¸ ¦)®Ú         S¢w�        s±]uÂö   ó†š€  LS]u         Ï;X        
X®šÈ        ñ™­ï`        #:XˆÖÉ        Œëb³i        ZÙ         °ª@        BdT         ™          �@                                                              d              IP              °ªÀ             "RÓi    À      ˜  V*²#M              3Îf¶µî             
gX²\             ˜¦¶¶²             
åX²\             ˜¦¶¶²             
åX²\    ¤   ÙX   ½€˜¦¶¶²             
åX²]­®l  ŽQ   4P  /½ŠÄØÅ5µµ�             W*Å�Úì<Þ.®Ý$ž|û:@  sÒÔ‰¼ÖÅKÚ@!Ä™ÛKD3ªÚÖ-bdŠW}#ŸššõlÅ5µµssmÑq	"‘k3ËLð›ï¬¡ X        Ê±d6»›ç¼ú‹­Ëo¤õd  zãåñëÕ®9ÖÝ1žN¿CªÀc‹JÖÎ?"{4¤ôqð;;ù¹÷ÚÑÓÓœ^k¶˜ù¼Ó=Ý×Å5µï—�âözÛe•‘1jáŽúß“þN÷öÕ5˜³£ÐÜ        +•bÈmv^ÎóãÅN�3§£öÔ€ ÏN/•ñ´ëÖ1Åµ£
w}?»¨#ÏòžŸDZ<šÁggµÃáG§èy~uº6·±ëñózÓ¶˜ùõÓ—oOQLS[[No”ù}=qä˜¤oÊÍ³ÛÛå¥<Ý7æ�¥k½½_«õ        ¹V,†×SÎñðËƒ½yrô~ŸÔ  Ï\>wÊ‹_lyËÎ4êú_wP8¼—©¬LyþG/Ÿ]=c�È�C«ÊàÊz:=�k“—Òì�´§/=0éôuÅ5µ´Ãæ~[Ÿ\¹q­ëmú©yÂ›Ow½Éƒ›.N=;éÁƒn»zeìH        ®U‹!µÌyëÓ[g–Ýû€  ç­¹°ŠÎ”ÍiŠF�½Z)ƒ\ë3åÍ[mÑ–uæÆ™_§«®´Ö)¾Žn,4îê‘LS[[Jy^=Xpy¶=^íéyÊ4§G§ÏÁ¦±ÉÏ¯^>¡èôº=¾à        ®U‹!µÀ„¢&@  9ó°„À˜`µ™­¦ L	„Rmi�î®4¾òÅ5µµœ²–||V‰ô:l”&¶Ò¹Íâµµ²ó¹û{.¶à        ®U‹!µÀ    Ï8   	º�  }€˜¦¶¶²
Ô^@ ‘y         W*Å�Úà        	@  €LS[[Y             r¬Y®             LS[[Y             r¬Y®ÄKI    ­&ò       LSKÛY             r¬Y®9øp†½ýB   ¼|ïé°      À¦)¥­¥À            )�VCkŽ/ŠŽ¯cÒ±P  —‹ã=OcªÀ      1(�$ „€           Šçº\sù\9º}^û   ËóþlÛÓö:î       
bR 
¬           Lšè†×çÆ«ôì   ‡çy·Æ=/[·@ 
¬     ¦%y (´€           Ï(×D6¸!  S&š  ó~w>¨ç¯o­èl 7�ú     S‰ÒDEbè„¥           3Æ5Ñ®  “_C¿y ò¾zzf¸åÑéú=: 
y^¾÷¡`    Ä¢t“><ºúe‹Ó‡ŠÚÎ»ïy          xÆº!µÀ �‹â×§Óô:/k€+ãø:tÌF8Oo£ßÕ |/}Ïop   HS‰ÒQÁò|UîèŠÅñùÿ žŠFÞ‡½êè          ñ�tCk€ “ç¸µ£§}º;:tŸ‹âï¼•Ïôô=nÛ s|ÿ ˜ì÷ý	¥`¶€  c¾Â˜”N’¯�ð<uôº¢±|ü/›äóy±íû_¨è          xÆº!µÀ ç|ö}Q–u_¯Òôw/ÈéØÏ
úÇu€q|÷&”ö=ZñóU=>‡P „X|îOK°S‰ÒQç|Ý>“Ó²+Ž'›ƒŸ¾›ÝÔ          ãè†×  
ù^ú¦+Zçž¾Ç©°0ð¼¾½@SŸ/GÚíçüö[óiÛ—-ž·±¸9y«:õtk°S‰ÒQNwEå‹©�s¤OWD€         <c]Úà Ÿ‹ãoÐÇŸ£Ýô,Þ^€æ§±ìì™óÎ¬ybúée0ÛÞôl‹Åá†ž—¯Ò>žçP¦%¤ˆHŠ/(@         Æ5Ñ®  x^gVÀG>§·ÐŸ?ÉÙp\»ûÞ„„y>�1�o{‡?«íî|Ÿ
4Œ´ö½]Jy^/¡ít
bR&ò Š­          	€ ¦-tCk€ /�Å×¨ù6÷ý âùþ~Ë€#›_ÚÔ)äx›tH|›ûýàeây;Æ\½^ïuœÞ¯ën)‰JMä›È           \ãMÚà ÃóøöZ@¯6^ï­açüý:ìLHF|}žÿ Xgâøý;È„•æËÛõ´?ƒçõë5ççô}^—ˆö==…13‰Ò@[i`           "¹Ön†×  7ÀŽÉ Ã—Õöög�=r šrÏ»é†>'•×°�'¡îôƒ“çù{nS›>Ž‹rsöz~ŽÂ˜”N’ ŠÛi           \¨²\¬Mä<ŸN© Ë�·Þê#Êðuê�9ðö½{Œ<?³Pœz{Þˆ8~.Û
c�jß«¿¿aLJ'I )}€        JÚFp{W*Å�Úá¼YmßÐŸ�ãôt +Å¯¿ÞSÈñ7ê y=OoaËàñvè G6>Ï¯ �;ÀvHDV&÷íô5Ä¢t�—Ö¼™ï­ˆM2¤é¤×)ÖõåÇMõ™ÊšCFYZ+7Š¯­Œê½ÑŽ¶”ÍÀ§>`ÓjãY¶eX²\#ƒÈäÛÚô,T1ñ<Þ½€ÉOwÒ³?Çéé ø»}Þ‘ÉàsöÜ cÇèû›Šùž�R [·¿aLJ'I�¥ôåùÿ ?¯ªêÒý6ó8oÕÑlùg¿¾þG�=]vyü]Q~ì8rëçá·Lãm¶ÒÛóòS]Õäá¿oLÅº=.°eÍ
M�ë�¤ˆÓ¥•bÈmppðrÇ«èØ¨sx\}º #Ÿ›ÙõîËÅò»7 
qmïvŽ�— ñt{Ý‚žW‹¿L€ìô5Ä¢t’¸W}/§Ëyh­+NŸkÑð|ièÓHæŽï{Õó<žl2ì÷<Ï+¯nžß3ƒ¯×ò|kvéÍ½/ëWÎäÏh­p×§L©·Óúö¹«—3«hÞ¹M¯ÒÊ±d6¸1Ë:ôô pøöÜ Ã�Òö÷aáyý» xãÞôdó¼m€xëïzRgãy] [¯¿QLJ'I1ñùýžÉ)}9|nl9iHŽ�gÐò|Ú£w4mìzØpáÇÉÓërñiÕ®¾v‡¥çy“Ó~|¥Á‡¹ÛÏÇË4ZuÖüÔ×«è=Y¹«ËÆíê�«”áKî¿K*Å�Úà! æøVì°3áê÷ºÜÞv’ #“oÕ±åø:vX G/?µë\ÇÄó;w ëîÔS‰ÒL|>Ð’—×.+mb¨·C*Æu¶½lòÎÚo^XÆúå’êRÕàäô»Ùäˆ™µ¦•µº·\ÑL�ë�«�ô­ºYV,†×  )ãøý=2 W†}ÿ AÉàó÷\ Ü¾¿±¢¾W‡ÑÕ ‡§ílsø\=Ú€u÷j)‰Dé%<þOK®J_\<?.zú³§^>~»×^Ž)~¸Ï¢Ì6öz¤  Œ©¦   eÍU½r´ÄÅtéeX²\  ÃÃàìÝ(˜{^­ø|ö\ qz>æÊxþ?WL€\]^ïQËàò÷ë ºûuÄ¢t’2¦º
_L¼
S�k?/ž–ô½><¸ðÞym·¯õ=à     SŸ0_zãY"vÙ•bÈmp ‹ÁÏ·@qw{;pø·ë° 2áê÷z™x¾_o@ )Åow¼âðrï¸ ·Wv‚˜”N’!KíO7ÌÃ—‡ïbžW=6ô»¸ñÇ±¥o§¯ô]`     )@[HÎojåX²\ W‹·]€DŒøóìèæäêé� ŠpßÞîaâyýÛHI^L}¯RÏ?ÂvÜ [«·ALJ'I )}˜ã\ñ®½Ím¦9Ê²¬K£³@       ¹V,†×  cãy�½ˆ�F<ùÅtìÖa 8³÷}77…ËÝ¬ˆHÍÇêû¼Ï^Ë 	êíÐS‰Ò@[ìIˆ˜&€       r¬Y®  ãð±îÔ )XÓI 99½�Zü~}Ú �_¹Ó_+Åéë�nžÝ1(�$¶Ò           ™Ö,†× &Õòüm»,  ‰  F]þÍø<köØ 
pÇ·èWÇò»:d OWf‚˜”…ä ­´°           ªÈmp ÇŠ�1äñöôH    F|3èO?gL€^nNß_Oƒ»y ÓÙ ¦%)7�E´�           œM�ÚàÏäði<ûvÜ    
órM›ôÜ >L;z|úwj èìÐS4é ­µ°           
gU�Úà—Ÿçó×^½d    1‰½î  eÉŒS¯²à==z
bQ:H+}€           +•bÈmp Ï“—8µä    @ Sg§Y 	èëÐS‰Ò@
_` "PAh‘H¼©6D€‰ …‘(‰�Ê€¶‘œM+•bÈmpV¦…8ð¨        …€ ·G]Å1(�$ ¥õÏ—6—´±i¦\ÚR“ka:[KN\Q×ÓŸ½W{¡1”iÓH¥fñæÆvœö×,m¾½Ÿ=&Þ¸$FÛ²¬Y®ñsMûzTäç           wÄ¢t’*´Š_N?Ï®—žŽ¾>n�K—Æ×,´ïïáä4´Ç>}~‹Åž¬±Ýh�)~Í|êuúüxßzë¿‘æNö§N¹àßÓ÷zòæ†Mf7®S3
éÒÊ±d6¸aâù“Óëú6§           [~½1(�$ËÏË¿ªJ_Nœòùiîö¹<Í}|¼L³®Þç¿ËãrsÖµëìË?C«ÅåÚôÇ¶œéì}>{ƒ·Õó¼ÚÎ“êú¾‹Bu˜šÇµõ~Ž|ÕÃŽzú'jçÄé7éeX²\1ò<¸êõ½gËÏ           	èë¸¦%¤£›çø~ƒÕ¹KëÏæòó`tú|þu½.sK×¯7.VŽŽ¼°éèó°¾—ËŸ]Øgêúùù[õù¸j‹ú}ü4Î©˜Ò)è{]YsWŸ‘ÙÑ;W+c–›ÅúYV,†×
òó/×ºœ¸@          wê¸¦%¤£“æ¸~›×±Kë—5)6Û¯Ÿ‡~ËS�¶-tcŽ�zÚÑ[Np´Åm*Æ»F4—5µ'M)X¬˜_iË™5´m\´­mj_¥•bÈmp+))Í„           '~›ŠbQ:J9¼<}Îë¾œ¿?â×C«Ôåò::moéùü5ÚøÓ·Þôô   ‰  |±"'zã2DkÐÊ±d6¸ S›	L  A$ A0J€ NýÄ¢t’œñÑy)}y>_çkÓGO©—�J_|z=î9®»vý»°     
ã˜/µr¨NºÆU‹!µÀœøDÀ€  H% L J �&7è¸¦%¤ˆHRûeäùq¥uG?>½9ßÒË‚™Ó}ú=G@     €Lª•Ê±d6¸ SŸ           NÝ6Ä¢t�—Ù–d&ÓJVÖ.¤U6¶š        r¬Y® æÊ           ·E…1(�$¾À           Ê±d6¸ WŸ(           N½Ä¢o ‹ip           "¹Ö,†× 
áŒ           'mì)‰HZ@
ÛI ’¢PL ”$@�‰D� J$@˜¬,†× 
á�       «   ×{
bR“¢@"¶ÒÀ           Dgd6¸ W„JÀ” L( 	@¡0L$ N»ÊTÄÍ:H[k`           "¹Ud6¸ W           :í)S‰Ò@[ì         A2¨W*Å�Úà\s€          é¹*bQ:HKë8VÓ¼ÒtªöA%i1�µ”Ò±k¨E®­j¥¥X™^3¶±T^àWÁ}«•BuÖ2¬Y® Žp           �6šÙLJ'I#:éqKëÏãóÞ'>Í85êË>›¡vÛóyýTó5î¼³çtmL5¾V±ÎŽ]¢q¦³¯n\v×
W£·²áŸ,!)Þ¸L‘t2¬Y®
Ô¼£âa(”H‰0L$ 	  �›M.¦%¤˜y\þ¯mŠ_N™áËŸm=��tÂô½¦ñé{§o×\öžgFÜ¹úÝw,ivßƒn[Vu¿_vLõS—÷÷~�°2æŠ`è¼o\¦&%~–U‹!µÂ98é§wJ1Î@          ¦ÊÝLJ'IG'ÍùŸIíèRúqø<œœ‰ô{üŽM¶¯?>ÛÛ}_w“Çîß‰N.^®œ³µøíîíäyöëÎ¾ž¾}²˜Ó¯Kôãää¥)KûßOÚsW—�ÛÕ;W&T¶Ó~–U‹!µÂžo‘ÏÑízŒs€          é´ÒêbQ:J9>oÌú?sB—×>LóËzºùrµïžWÕ–}=•Æ÷‰Ë—-4V#;÷W‹=7­:mÍ:W=:lãˆ¬Ä[·ÑÔ2æŒy][ÆõÎÙe¦Ñn–U‹!µÂžg—–¾¿£hÆ�           �5˜•1(�$ÃËçôû¬RûŠÖoRf!eS2IZ’€µi6˜JˆZµµªÖ\ÅDo\®‰š_¥•bÈmp¯/2ý]Ê°           ›é"˜”N’Fq{Š_`         ÏŸ9&-½pI·eX²\†U€          ÛIÄ¢t�—Ø         ÒßHÊ¡m4®U‹!µÀ�   �    (	"Dô
bQ:H+}€           +•bÈmp gP          m˜”Mä¶¶           JV,†× *           '@¦%!i D[I           …�Úà ¥@          ®ÄÎ¶¼€"-¥€           ˆÎ³d6¸ )           Ö
bgÒ@
Ûi           Lª²\ €          6
bQ:H+}€        Z‚ÖRm5Ê±d6¸ *           1(�$ ¥õsg}o!M‘–DÅöŒ)}´W±œ×´“1‹Œ«Yš[[‰•pÌÚ0€�ueX²\            d)‰Dé /§7‰Å¯FäŒ«­ô×ƒÎ¥¶¯G©§‘Å¯fúÏ—NÈË©ÈßTÏF˜ã]-’Ôßo3–6ÓÎÓ»RÝ]ºåÍY…¢w®L#N–U‹!µÀ €           ¦%¤‘•5¼”¾œ)æ×=5˜ÆûRšO_¯Ááá·U·ö=ËÆ•ïôüŽk^¨å¶‹Z}>¿/ŽºôoN>oKÔñ<ý;÷ðñßH¿O¯ô=¹sF|î�W)„Y~–U‹!µÀ             )‰Dé&>?³ßb—Ó‹æüúòÛ«L9µëŒk�µÅâsïÒ×Öô¸¸9øù;ý7ÍDÚJ¶¶~�G�”·õ#Ìçô=/;ŠÞ†Þ74Y¯g«îvåÍNn7oTí\˜ÒÛÍúYV,†×              ¦%¤£ƒä¼ï®÷nRúãæsLZóZi³.wof±k×N�é•rËNž|5™CU5§×OU¹é¦ùçÛ–©‹m¿V™sF\î�[W;g�õ‹t²¬Y®‹€           LJ'IGÌñ}7³r—×ŸÈóç}3ÎûmyyÎ½oÕÑi,TLP¥mrf	A5É—4Z«Do\®‰SN–U‹!µÀÏ�.Î‘           ALJ'IE8ñìé’—Ó“åþz»I¦–ŽŽþ
M;¾‡Ô°      æ¤ˆ¾Ñ„Hk»*Å�Úàsyzž�™Ô           Zò)‰Dé""dRúóü÷ƒ�sßI¾|;{·¯?©ô~ˆ      U´Œà^¹V,†×›ÊÃÓô,Î           ÷
bQ:HKí^>JgM,¶^T{]nlúûµ         Ê±d6¸å§Nå"dˆ™¨p 
Õa”7 j™DLÔ	´€Ä¢t�—Øˆ�,ðŽ�f©�         ®U‹!µÀ"LøñÛI¶õ[�$¢ý}` qF÷™çÁ×¯."-×Õ` Ç�=¯1ŽÛrá‰êë¸LJ'I Eo¬€           ®U‹!µÀÍ›k×–>¦¾WÑ]½oO@ >/%íÑ×ÏçÓ×îóxS¯§êê >O3M·çêëó|ø³==/_p˜”/ ­µ�           ¥VCk€?•ÏžÞ�ùûº<îYVvõ==  qx¾vUêõ§ÍÃÒïàä!¯§êj >W&ZtôstuðqDÄièúÛ€Ä¤Eä¶’           +!µÀœœ¹e=ºa}qª"×êê  Ç�Ÿ<ôï¿>:o•›utØ 2ãÅ:[Û<ÊÍºzì SçKi ‹i`           "¹VÖCk€")MS$%` ªÕ¬Ö©I° 
‚©I	™ Å5ÎÚÈ+}d           yâä6¸             1J�$ ¥ö  D€*°«2   ÐÒ3€›Þ9ÒCk€             S«HKìæÃk§<']-R‘¾¬â÷0ättXÜñ6®÷ç®ÛÜ’´i¢ƒíµæ-¢œÔ÷®ö`’\             ˜¥XÒH„É¾¹x~OUëÚò³éèèÓÏàÂÝ»ÆuÓIë§‘–½3iiÕçyuÓg^þe5ÛTÍ,Æz{ãŠšöry–êè˜ô=2æ†m&7®6’#N‰Æ$†×              ¦)UiE9#«YEm§/ËøÛgÒñxkn¯G—ÅÃ]�¶•ŸgÒóyy9²Õ^Ÿs—ÅÇ§¦ý[yyóã¾Ó†=R6õ£ÉÏ³Û¯…ÎÖwú?k\¹ë�3«iÖ¹¨^oÐÉ$F·°             B3Îe#:ž—D‘7æñ¼øÓGÑâáæ¦ž‹ÏÎb‘;iŽ~§©†ÜxiZôúØùyï´umÁžXïÐæË~Šg=ï>zý+ùÜxÄvûž…©�0ÁÑ½´ŒØÖw›l¬È¬Í              a9Ûè	¦T‰®šÓ<Íf‘-4¦»ÄV•µ2-_˜›©[Ú+³›é9çTiÑ¢+ª×J¬ÞS3 ˆ              ™ @H   $        �                         $         ‚@        ,è€        �        	         hË9         Y�        i�        EöeI         I´€        "+y         m™R@        Up        H¼€        ìÊ’T° T±L€    *º"&d&	 	   )’"d "$�      �™RTãäß·@)…·§7On±‡5oÑ½¦3�.    UxÏ‹Ÿ§®àgŽ›S4´% šçY0J•½ä  H¼²àÇ³ªÓ3Ëmsâç×Kï¦TÚéR¶Ð    veIrüç—ßéßjVb3à¿¯·‰â÷z»eÁæ×«Ôéß¶œ4ììÐ    UëÇó|—¡}³‚2óú}jyZë:+¥b4-–q­§=îŽú»t�  
Eåæü×?«Û}r˜ˆçáîõqðñ½wïÓŸŸ¿IíÓ‡Ží€    NÌ©.?˜ò/uçÏ®×¿û^÷ÎWjqg[tk·¥íeåGw±Ò    ªõáù6ù×³µ×Ià×Ûêð9¦Ö¥Ñ\z&öÇH³9½:~ŽþE{=Ž©   ¤^cËù~-1·W4i}kÃÕî[Îôpñ±ß£/?»GÐöùtûÒ    ìÊ’åùÿ ‹žz1çíî¶ØëÕô9|þÃçtú7§.¾ÏµO&ž‡±Ò    ªõäùß�ôseß×}qß³¯ÂæÞy9:k¾|½0ÓŸFÑNì¹7úž¯'.ïgª@  )˜óþsÈäÇmyc¿£KåÑß¿™ÙŸ•Èï¯•Õ®_Kêù\Ý^Ït€   ;2¤°ñ¼¨šk…;z¹ã~‹ú5ó(áäìíµ9òëö4âÏ³³@    EWŽoÌš´çŽîŽ[oÑ}üÚlàòz{º©Ç½)¦:ß9ß«I÷:øòêíÒ@  )—‡ÃjZÜ×ï¿=÷Ûmüžmf•‹ÖÔ§³érsôwl    veIF^k1[8Òí#8œ«{‘Ièµ+¥€    Š®¦]V–ÊoiœÓü{õiÚ©‰µLg;Þµ½¤  H¼©ÏKÂikÎs{M±ÊöE-h«mk[\    veI"¤ZQTÚb±6�      EW"!2ˆ�d%)�    "ò"EfÑT¦@      ³*IËäqVý¾µ¼¯&¾§¯·�Å¿¯éì      UÑŸ™¯­Õ^'™=^µ¼Ì=-|î�GŸÌßÔÞ@    H¼™yÞW«>ŸÕéóù<í}?O@      	Ù•%_œü»æµßêÿ Aáüëæcè?Eö¾áy4ú¿Ñþ‡@     ^2ð¾ã}ÏÔ¾‹?’üçÆÇŸßý—á9¿Fïøwí¾_ä>«ï½     ‘yaóŸ|·Ö~‘Éùÿ Ë}oèþæ~~Ýß{÷�À      ³*K?‡üG“é»þ§é¿<üïÙß›ïýÏÉ¼®ðxcý#¨      EW¯Ÿù×å¿#õ?¼}Œ|×ÃyÅ{Ÿ£|ßÂeû'¯ùÐý‡ÂGêßs×      ¤^^Gæ™|ÏÞþ»òß™ü×è³|‡äž·»éý¿Úv       NÌ©,?üO§ê½«×ñ¿íô¯ÛõþAÃ÷3â~Åú_P      Š¯^‰øïÏú?wûKáÇç~wùwØýç�ñ_)úÇ¯øÍû©ú�é¥À     ¤^cÊø_�üûèÿ ^ó~Cóï¦ý“â?0úwØû_¦Ü      veIsþø¶~·Ñ}åžGÖSÑ¾·òï…ôx}¯Ú¾ïp¨°    ^3àùÏÆx?sûMc?›üsç¿^û~_Ì1ý?×ü?æú>÷÷±ÖDB	™    )–<#ø¯£ûo±ò?‹ú_°üWåþ¶Üÿ  þ¥ëÈˆ”€     �™RXüwç^�¯ùïÌýÆsþ¯§æ~ÏÛ~}Éõ~—ú×ê=ô¥ëÉn½€    UÑOšü;ÍýÏìon?Í'úßØ½î/Éÿ *ýCÕüCÃîöaý+Ð˜¥«ËJ#^Í$   H¼™ügá�ÿ ¹ýÆþè~Éáü�ÒSóÿ Ü~²Ô˜ãÎÑ×Ð     ìÊ’Çã?;õ½ïÎ~Kï~kÈýWoÊû¾�óÿ ¤ý/ä¿8ý+öoWƒƒºÞ>yéî÷X    *¹_™ü;Íý·Øãö¼¯Ç<ØAëáü›ò¯ÓýoÆ½/§ø¯kö/´ß“ÍëßÉçËžž‡¿×    
Eä§Æ~ÝûŸÑüoáž‡ì~Éý\þSÓû—ÖaætïâóíÇ¥      �™RY|�äžg™ô¦ø›i<¿ {ß™ùž÷—Íú·é½¾w›é[ÄåË¡ô¬    \§Ï~1ç~µæ|÷Ýy•ý/ë¾ý¸¿.üÏôSòŸ¦ýà¾#ôÕ}?Äô=?/‹›Š¾—Ñ÷X   H¼”ùÅ»¿hú‘ü_»õ¿žü¿;p}÷ë^Ç‡Ûèx¼ZßÜô¬     	Ù•%Ç|o¥öŸWÃñ?/_¢û~ÿ “ùþ—íý½1Ë\üì+¯§×     UÊù¿Ëõþ_�ôÞÎ}GÖôÏ?Éü·Óuü‡¯õþ?Å÷}Ï­Ÿ.Ûòrsæèõzd   H¼‘ã|6ÿ qèøÿ Ñö˜|?ÌgïýÇÑï‡.·óù#OS²@    ;2¤•çâÃ£·¢¼œQÙÙn~.}{:îÎl     Š®E9#¢™ož];Ù^~}íÏ§M9{iIN³    
EäeË=wË–z§“Š:û5"c:X     	Ù•$ ’	H      UÄ $@! H   H¼€	       ³*H         ŠM¤         ­o         :Ï>          ¥­         ¬ZÀ        ~ˆò|Np         ZÀ        &Ò         4õ}iùï“á         	Òd        Z@        	Ûè¾“_?ÊÈ         Bo         -         ýþ�ñ¤€        ¤Ú@        ´€        ¾Ó�f@        ¢à        µµ€        gYÎ³1HB@ !     Qr $       kk�H@�     ³¬çYœùp×ªðµsµkÞÓ	AZWK¢©¸    Š.¯?:sµ«¯U¢-`      µµ‘Ž[i0Z¼Üúté1ZD´‘jÕk     Vuœë,</³ÕßŸmrçèæãÛ»]4ŠÌ³‹VœTîééÏŽ:ún    EŽoÏ³“xÇ·ßèå§WUÀ      ­¬ËÇòý^öTÛªž‘¿­Õ­såç¾ýµ5é§zº®    ³¬çYœ¼_š�«ÍÖÃocËñ=�ø·ëcEèŠÇ%:ý/{.}[i    E¯›ó»tgæoÇÁÙõZùqßëo       ­­Ÿ)àú½ôæ§wÑßåüXéé¾SŸûÞk^ïvž\wúÛÈ    �g:ÌÇ™óQŽ{ñóú¿Eåø�øqvÚÓÁN­ãíŽSè}Dy1éû=    Š/_3çz»vÞg—ÝõO¾�·Ñ       ­­_/ä¼½íTuýWoÌù›s²Å¬iI¶=}žôùTô½®‰    ³¬çY˜âñ¹9¦så�KÚçãË“>¾=ûøkÑ\ôêÃ’Î�¡×Ï¯¡    ^9|.�G-y¹ïìiçS»ÐÔ      ZÚÔó|ŠãŒrù�ŸSéùÙõù|6Ê�ˆ¤kÛ·£¯ŸNþý@    Vuœë3ãLmlé;tV3Ê´óú½¦”Öùåe»-“M@   Quyy¯ÒšÄk¦Q­ä      ZÚÑŽvÊ•ò|�CÞë¤éÍ…ë"ié:Û8ÓI    YÖs¬Ê‰™„&PÏ-6’$H    ¢äBbD$ 	     
ÖÖA
á†ý&²J$˜H    ³¬çY•y<þ~Žþ·Ÿ—o¡´¢b@     \F9öuÇŸ^Þý™póBý–ãÉ~Þ»€    
ÖÖæâ¯oU¤       ³¬çYšùŸñ¼}ŸcöÕøŒå÷~ûêºd      \Œ>Wà8¾ëí<ÿ ƒùLþƒï¾—o#à~gºþß_Šà¿oÛý—\€    ­¬GÇüô°é        Vuœë3�Å~3åû¾¥úç'äü�žoÜþ½ô7       E3ð'üÃ›õ¿Ô¾òÛôgú?é¾—�ùßÊyÿ /—ëù—­éþ�÷=’     V¶±�Ë~EùÖÿ ´þ§Ü        ¬ë9ÖgÏ¿ïû�ˆóTùß„ý7é?,ó¿nûíÀ      EÑçþqù�æ~™ú'äÿ %÷=|iú¥‡™Áó_’s~µóß�ý½ì}—Ðî     +[Y_#òÿ Îxxÿ aýg¼       YÖs¬Î_ø§ÍzþGÑ~“ù÷‡ûÓþ=ð?³þ�Ö"	�     ¢ì~GòcáþãíùÏ«ˆý#ôÏRcƒó_É¾ËôßÎ¿3öº7ý#ô?FD �   +[Z9¾ò^¾��ýOõžø™       ³¬çYžo�ügÎ÷<>ßÑ>3ÉýÇé¿ü÷öoÔ:¨¶Xï`     EãÍü§òï¬îüçë¾ÛòŸôÞŸ€ú/Û~¢õùÆ|OØ¾¿óßŒú,?=úOÛ>–Õ™Ç=2¤ÇFÒ   
ÖÖ¯‹ø÷Àý¿?Á~‘û³�÷°       +:Îu—Ÿù7ä_k÷¿ñ ñ|§ê¿Mù?‹ûwèóéÝ‡šŽßS@     Eëâþ=ù·§ÍòŸMúGÇøÿ ¯z‘ïû7»ÝÍ(û?Ø{?ùÏ¯çü‹¯÷/¬Ëƒ££Ìáïâã=Ÿ[@   V¶µ>oñ_‰õü¿šû¿Û~§—Si       
Î³�fx¿4ü{³éþgƒõ=ÿ .¿¡á}‡ìŸK—‹—±‡“¥½Jà     "‹ÇÅü¯?Î|?Õ~©à~uëmóÿ g÷Ò{“x_¯ýþ?™þmÜùïºýƒÛóü/CÐð¸=N?24ú{`   V¶µ|¯†ùÜ>Oä~ûöc‡£Øé�       ¬ë9Ög?óß“Ã©ý_�ø¾oô?²ë¯-z8|ý÷îè�     EÔæÇ›ø û¯?óï•ÏÞûíþGÞô~·ôOfŸ1ùßÍWÞýëz9¸wßÌãéÃ•o[ÖÐ   ­¬Ë›>Kä>¿íÜú[H       Vuœë3py|Ý§¡<N>‡«Õ(‰Ç+_[      E¾G¡O;Ì§£éGE¸z=c3Ì�GÔè˜ƒ<Õ¬¶Ú@  ZÚÂ+ÅÅÙÛßk       ³¬çY’"”U3 ‚@     ¢àˆ™V!$D&d@   ­m`T´       gYÎ³         Qp        ZÚÀ        ³¬åI�        (°         ŠZÐ         ˜¶Î^:€        Î²         +œH         ·w¥>o�ˆ         ®XÀ         ¦9@         ßè>‡nNJÈ        ZÒ         s          [Ðôõ¥ï`                  ˜         ¥æºê                             ¦)®Ú                             )Šk¶€                            
bší Q"À                           S×m>v6ïÜT                          XÅ5ÛAÅó¼Ìö{]â                          ‚˜¦»h8ü-lëö;€                          LS]´ñå2Ó¯@                           S×m                             Å5Û@                            1MvÐ                            LS]´                             S×m                             Å5Û@                            1MvÐ              $             1MvÐ         1D!ˆˆ„DUˆˆ†ý=             1MvÐ       ™R""""""±ˆŠÄDV""""! ==ýÝzÜ            LS]´pe&½»      sù¾v1D JR”¦fS3)™LÌ£l´ëïíéÖÀ            S×mÏòjv{=â      3ãò|ÆÖ”ÌÊfe32™™&I”’HHˆË^zoÛÝÙ¾’           ˜¦»h8|=&{=žá     ‡›äsvví2H $   ËŸ—ô÷wuíiH          ‚˜¦»h2âÆS§n      ñù>e½½$H      …i�767êîîéÖà           S×m       o‘Ë×ßÑ`       +ž¼Ô×³»·£I           Å5Û@      xü�2ÝýšÈ       +—?&èíîìÛ@          1MvÐ      ;Èåêïé°        Ly¹qž®Þî­¬          1MvÐ      
òy>c¿·Y         Dg‡7.Zvwvôé          ˜¦»h      |ï#—§Ðè¸         
gÏËÍ]»{»7Ð         LS]´      åò¼¸ïîÖ@         ¦\Ü˜ÇOowV×         ˜¦»h      cÁäqôú=7          #<yyr·WwoV²         )Šk¶€     ÉåùqßÛ´€          
å‡'55ëïìßP        1MvÐ     \GG£Õp           !L¹¹9ã£·»¯k€       LS]´I    G/—å×¿»i            ž<Ü˜ÏOwoV¶        Å5ÛAœÑ{6    Ë‡Èâèôz¯             )žœÙi×ÝÛ¾²       LS]´þ›xžÏg¸@  ^o7Ê§w~ò             "¹srsÓ~Îî½í`      
bší åð|í&zýžñP  |>Oþ�]ä             ŠcÍËÏÝ½ZÜ      1MvÐS“š{v   ÏæyY÷÷ï              Zsòòãn¾îÎ�d      ˜¦»h
…€  8|žý½               Ë›“›={}Íä      
bší     9¼ß/.ïC{               S^Nkvz=»Ø      )Šk¶€   œ^WÞ�f’               #>n.Hëô{º,      S×m    ;ÊÇ»Ðè°                F|ü\uêô;ºn     LS]´    §•Á§¥Ù¨                œü|Yôzý:     LS]´   ‡�åcÛèôX                 EpãâÇoCÐéÔ     )Šk¶€   §'—çkèöë                  E1äâç×¿ÐêØ     ¦)®Ú   N¾�M€                 rãâæ¿w¡Ù¬€    ¦)®Ú   äòüûú]ºÈ                  "2åáåžßC³y    1MvÐ$ <W?g¥Ó`                  3åáäuú»Ø    S×m91ˆ�;5 Éåù×ô»µ�                   F|Ü<”êô;·¸   ˜¦»h1ò|ÊÃ¯ÙîËƒËæìôºn         	0        "œü\4éïîè¼€  H)Šk¶ƒÎŠ»=žñP¯7™ç_ÐïÖÀ      €€  ‚ˆD"k{M€       §?;zý�  E¤)Šk¶ƒ.$×»`py|Ý~ŸUÀ   ˆB‚!ˆ„DD"""DB ‚M¶ÛkÞÒ       Ã�ƒ{ûúµ  R”¦�LS]´
ÖÂÀG/›çO£ß¼€  X¥i�+X„D"A 		”“)L¦SÎ•µõßm´½¤       1ãáæÓ»¿«Y V´Ë,qÊ{½Šbší  |>_/_¥×p  ˆŠÅ+LéJRµ©)I2”¦S)L¥)’IH��")L³Î«ë¶úé¥¤       Ë“ƒ–Ý½ý{H­2ÏrÎ«é¯o\Šbší  _;Íz]ûÈ ""µ¥)JR”­`›Z×µ­k	˜‘! $   +\óË:-®Ûm¦–°       ®\¼Ž¾þ«S,qÎ‰¾º^ö¾Û1MvÐ Ãäòõz]— !­)JR”¥b6µ¯kÚÓiL€       ŠÖ™å•"tÛmµÒÓ       Ç�Íó©Ó¶º^úé¦–´¤×P¦)®Ú ŸÇäô=äD+­)JR”¤D&Öµí{ZÖ™’@        ŠçžYçY¾»o®–´€     ˆ¥3Ç,9ùy±Ë§Óô:µ´€i¨S×m �ºl­kJR™Ö•Š–›Úö½­i´¤$         V™å–t›é¶Úé{L€   "´Ï<qÎ‘7ÓKS��=û»·¼�7Ð)Šk¶€ Ï“ž•¥+X&Öµï{^Ö›&A      € €  �+\òË<ÖÓmµÖö™	  ¦xå–u_M5Òö™ŠáÅÃŽ½ÝÝH/p¦)®Ú —Âò©k_Ké¥ï{^Ói™LÊe)%$‰ 0A B„"!„D""	L‰’e)I"+žygœZûôtë)™$’R”„Ö´¦9c�¦ºé¥­)S>m;{út‘k…1MvÐ ÞGœ›M’		%3	JII133kZÓ1ŠÅbµŠÖ±ZÖ*ˆˆD" €€$’RJIJR�V™å•uëÞµÓm,™L­7´ÞÓ31Ï†tZúí®šZÓ  ®<|<¶íîêÖV°S×m Ÿ/<B"+ˆ¬V±ZÅkZÖµŠÖµ¬V±ZÅI¾šk¦“­+ZÒµ¤Vµ¬T%"S)%"IHÀ   ŠUhçÂý]ˆZÓ333kÛ<õ·>zïÑ¾Ûi¥í{ZÖ´ÚÓ32’k—'#³¿«kÈS×m gÉz¹ü�;:Öµ­iZÄEb"""„@›ém-$„ ”É)% ‘(™!BBADE)»>l­¾×F\ôÓ{cŽšB×´ÌÚfÖµ¯ké¦š_]4½ô½íi§?#³Ñô6
bší ?=~çÌøÙV°ˆ„Ì¬›LÌÚfffm332²fS32”’	@$˜$$D�&  AgÏÏžÝ7ˆÃ–»ôÚµ"±XŠÅb±™Zú_Ké¦ši¦–cÉÏ×ïzVÅ5Û@^4{ì|îH ™”¦e)JD’$@@   	  €$ ¬Ú‘uW´�AB!„‰ZffÓ5ÉèöØS×m cÃÛ”€‘ L€        �”	�    &!h”  ‚A@$@!{…1MvÐ«ÍM3¶·Myè”7è         +¥³Ó[Å²Â©„ôl         Ù-|¯­ÖÏ
&�Â˜¦»h <|:¸ë½µî·•Ç7Š_Ñõ5         
ùž^šinŽì|¬W¤mêz6         3ó8+nž6Ö×½årMë[ú~ž‚˜¦»h �³‹ŠŽ�c·Êâµ©z^ÎÀ        o�Å·o5'»ÚŸ#š¶õý[         yqÕÃÇGO³ÕäòZkú~Æ¢˜¦»h üþ}ùù³Êýý|™•¼÷w\         üÚoÉ†YïèéÉ‹_Ðí         óym=¼ùåC«Ž…m~îë
bší  ÄÖ#8ÓH‰D¯p         Öf±\çKÖP––         «35ŠÑ}*”J÷
bší                             ˜¦»h                             ¦)®Ú                             )Šk¶€                            
bší                             ˜¦»h                             ¦)®º€                            )Šk¦²                            3Êf“p                            bf                              ,                                                                                                                                                      @                             ’©�                            +}$                            S9šë¨                            ˜¦»h                             ¦)®Ú                             )Šk¶€                            
bší¢"Á‰  H                        )Šk¶˜yœý½–SšºÓmmN:í½í	TW:·Ø                        S×m<Ï�òýOBÓ—{²¾ÚgÙ¯ÍãéßN˜¤)[Ö¼<¾‡©îv                        Å5ÛOàü^ØçéÓ‹/V´¶Sëzÿ %ÍÝÉ¶×¯i¤in\uõ¾×Ú�                       1MvÓÍùO.¼¸ú]<öN¯'“Øúo#�,:¹:{<èÚ'¶þug³ì=©                        S×m1ãÇ,:eYiOÇõ>‘ž9ÓÍíôó‰ÊýDééu                        Å5ÛA™˜
òòôv^ÏŸmäJ@                       1MvÐ                            LS]´                             S×m                             Å5×P                            1MtÖ@                            FyJ–¸ „€      H    MR  	ª@  	ª@       ­.¤Ü Š­       ky    
-   ¢Ò   Qi       i¢³y E�      ´½€   ‘y  "ò   ŠÅä       ¥ÕµÄ	"±y� H    ´½ �  )]& I Jé1”BR +¤ÄJQ	IH�    )K«kŒ¸«Û¹‹×�v¼ˆ‰§<ôoi    Z^pçÒÒ”IW[ÄÍï  ¥tqðDôtdÞú\Jé\;õi\qkµ×Ò@
WHàãß®õÃ&»Ù9e›¡X½­    ¥ÕµÊù_eëY‹ó|§‰Ý¯FÔ¢…<ûz¿AéX    ixñ¾z—Ò-4^c(½–¿³ëh 
WL~{Á¯?Wg>}ýß¥`
WL¾cå·ôº)ÍÇn­í[ÙØ ¥tÃåþc§Òß>~;ôïkú¾o-ú©N«[nŸWÐ°   )umrŸ9ùçGè¾Õ‘X¿Â|¶Øïµ¸ãFÖâz?môº€    ­/9ñ<VÃ-ºqËX‰´FçÖýwH )]9¾SÆ�#¬¹;z~Óé4 ¥tÃä>R¹ÎD“ÙôßY× 
WNoŽùxÎq”“ÛîçãqDDÞ:útû~à   ¥ÕµÊù3×ôý’ŠÅðùßŸ¯£Î˜ëž)ßé}Ý     V—�+ç2yœ‡¥—=ò‹^šuç�¿ô{€•Ó?Âc”³¾ŸKîhJéŸ‰çG—žs¼gžÝÞ·¹Ò RºeâpSË¦WÚ3ÏnïFyy9ñ_9îË°õì   J][\Œð¾ö"±xÇóç§}¢FSn�ä    iyÏž|ý�D&kkÅ::, 
WFÑzÄ¢zw�
WFUŽx‰²µ¾ší`•ÑŒG<DÞ+]/¢)ZJ“~Jú½    
RêÚàQy�EÀ	     ­/dX 	 ‘y@@®’€ �H¼�  
/    
RêMä^@      
ÖÖ    X¼€ ‘y   Ebò       
VêE€ZH      ´€   V  ©�  ©�       Rº(¸ ­µ�      	    H  �  	       S;+:@Ø                           g‘[\ VÛ                   •`   m,  1+k€
Û`                   cÅ€   §oH  Ä­® +m€                  �    ��   S¶¸BB¶Ø         ­$   2µÀ  +KØ  §6`   ºu  ˜•µÆ|SÛq[lÊ¥2¾ê-L±×¦ÑZa®¤L´°    |Ï:^—£Íó§F€ ‹ÊßÕÛ*kL6Ü |ï;ÐôoŠùGD€Â€   ·Ð  
bV×¿;o¡é¶ÜþGJstû\þ|ßlz}Ëp2ã×zÍ4ÒþÏ     —�ó–� ú¼[úÜ˜z�@ y?)¿×ty<~½|Îÿ RÀ gàüÏ³õñgÖã§«°\+    ë   Ä­®9þ?¢ê¶¼_9åy–ß›§é¹<šcÏ¦½>ÌxQ¾uæ§F“–¿[ï\    ?9ó×¯Òûùø÷õ92ôº  ò>SO¯éñ8½ªù^Ÿ¯` 3ð>cØúšx3íócën W*€   ­À  ¦%mqO;?Ka[mÏåyþ~½8iêÓ—.Lº7ß®žUuÙÇN­kÉo õä    ~/™gµéÛ	¶1Ó` çøÛû[ažÜü]ÝÀ )åù~�­<ÎŒ³ê¸À   7°  Ä­®"‘¤ŠÛf4¤Ú&êÅ"ÓkFe¦‘kEê     Æ†ºH  +•µ
Òö  Ï=4  €   m   S¶¸ ­¶                       @  S¶¸ ­¶                           Ä­® +m€                          1+k€
_`                          LJMä¾²                           Še*E€o¤€                          ¥”\ VúÈ                          )œ«7�E¶                           Ä­® +m€                  T    �l  1+k€
Û`                   cÃˆ   §oH  Ä­® +m€                  �0    ×³   
bV×U¤VÛ D€       )[\   Zà  ­ì  S›0   ý€ LJÚã9èî+m™PM8ôè³JÅqÏ¢ÓU—Ô     
yžo§éÛ×*ôX  8|ž�_\k®|ûô  §‘çzž­¹Úã2 S
    ß@  )‰[\Ž›Ïé½	+m°ñ¼ú/Ó¯ŠÞûz<¼Îl:Sg³Ûè     ?1óßCôÑâÓ×æÇÕè  äüÇ_Ôkãsûy^‡­p 9~Cç>§êãÅ�[’ž®àp¨   mt  ˜•µÈóþZ>«Ð’¶Û�å</Ñèú¾O™Ï§g½çy›iž\ºtZ0õ¾ÃÐ     ?9ó^ßÔ¼*{xóú½  <o—ô~¢|>o/Ñö´ “ãþ{éþ¶žÚçËÕÜ ®U    -¥À  ¦%mr8|}î©+m°ðüº^ý^—'�Ïc>+ë®\štÛnï ë     |ß/»Õ¶¾yôÜ  G�ã÷z÷Â›cÅÕÛ` 2ò<ïSÖs·Ê�7 #8    &ö  ˜•µÆ|óÑq[lÂ‚ÚW8¦[ÞÅVšÖûÈ     ¥î   ÎÚ„VÒ Lô¸  ¤    i  ˜•µÂ¶À                   @    H  
bV× ¶À                          ˜•µÀm°                           ¦%mpKì                           )‰I¸ ­ô�                          ™J‘`[é                           s²“`Ö@                          LåY¼€"-°                           ¦%mp[l                   Æ    ëp  )‰[\ VÛ                       ;º@  ¦%mp[l                   ¸±    4ìè  ˜•µÄUi¶Ê¬$       V•�€  �¬   "@ æÌ    ¿F   S¶¹y¯Oq[mŸŸ^«®¬e†úÂ¶™½*gŽºE¦œùíÛ¨    ¯™æe·³Û–iÏ=7  ž_g¡ó½2ßP —‹ªùï¸ )…    o   Ä­®GËáõ~œ•¶¼1Å¾—ôéÂË“m+1¥õô99±S—££--ÏÍŸoÐú÷    3ùÿ –Ã»ê=ž¿Ðòëìu  7æýO_‹‡×ô  #çýmù=JÀ\h    []   ¦%mr<ÿ •äúï^JÛ^?–ñ9-¿»-¶®|Ž�#�wŸÍó·×‹n¸®k·g¿ô    ãü¿_Ô{<¾_oW‘Ÿ·Ö  9<¯jžMûü¾oÓ  <ßŸïÛ�Óõ, Î€   ´¸  Ä­®G'…_w¶JÛl|¯3’)éïÀ×XäŽ­3å×ÓŽ..�po|ùiÑ¯G£p   Íæò_×ì®vŽ'n  œWíd·6}  v÷Ç«¨      ›Ø  
bV×ÅµÅm³<ëéµK*´Å'E+i„ÌQe¯p    R­AU€    ™‹  ¤    i  ˜•µÀm°                         ˜•µÀm°                           ¦%mp[l                           )‰Y¼€¶À                          ˜¦‘p[é                           3™¥* "n                           º+ ˜�                           ›H                             ÿÄ          ÿÚ                       )    ˆ        H    †1wi9p×}h½{ç†d)@ ºA &�*
· I8yãÑ×Zž—Êý~»_¡õz¼Ÿ;‡�­E@ ÖÑ5)È ›U’ÐI®p IÏÊ®ÝóüŒ×·ßžÞ¯½¾W7Žì& @ �IH  IÃ–Ã¾¼^=ô˜ß»¯ÕúÙðuõãâxõ¸•    I®´ Ï(  œq¢;ß/îc>ÞŸ_éçÃÛÑ¯ƒãÖá\å@  (§^vE�8  Rc+£Ÿ)KÞû¾Û‹·?�Æô8•9pæëß¥ pù?#ÍÛê}�U5éŸgÁo-µòëË  #0j™Zúÿ F±ò>|kuœE@Ç‡Í¾ŽYõ{vøÿ ‹ðýW›×ö? ØQé½¹Û\óó€   µ�×³ÕŸšR>n}Ýêpðtú;	ðÿ öÿ [îÔòþgòß°ýV…&ºQ`'(  €   Pž?Óê_/Õïó�·û>Á�Ìþcú'°R         C—Êú>�OÕèOÉþcúO¬y=ÁI¢Ì€      �ëh>O¿Ôsþsõi@]`Rtç       ¤>?§@O—ßÜpþcûÒ ]`R °   R    CÁËéÐW¡ÃùŸë¿Ju�IP 
€ €   PáÏÕ@*üÇÕú dRRƒ )F@&‚Àß8JMKÌT  	@ R� Q &­²‘�b ªJ&³    H    …@   @X+˜»€ç     R    EÐ²P0.­Ì¡q     RQšb.¨TÅ·9—t    H    –/žÞœüÏFö,¸ø»ôóÏ—^»@    R    %¬ã.˜ç:oB™ù=y}Y…Þ�P    €   H°PT–T(    ˆ    €   @                                                  Q       €      5  (    €À    ‘u€  ReÔÉQÑ( ä    ÔEÖ‰ˆ ( e¬”›Ò¤VUf¤Î@   D@ ¡�@XÔ…!D T    D   P T       Ô@  ,    T       ¤-d ö¼y   @      T ¿§|þ,€  @       kÑÇ˜~–5ÏÅÈ^|À H)     ± «ÝÏÍÏ–G6ï›É‘¯¦ù¹  jE!bÊ     l@ïë4Ç‡™èöó.ùxroé_;«�ŽmÎ/¯Í… ,     l@ý7ÏÁ¯_2^¾O!×èóéœ·àâ=¾——Æéíðe@      e ýBôùüžÞüÃWçeßÝÈ7ÏÀ_¥'OWOP      ¤ :ýPuòyžýà/O'§×È/O�†þ�9½MyüqH À  
%#Q¹þÞA¾^+ôO/™ëôs__!\ü‘HØ�IdÒX(E,LÃPÔ@°=}ðü÷ÑÌùxžÞ¸ùx�½Ü�ÏË…•6"‰-�(©D¬PQ ~°§ÏŸGœž	ïÖ«óç§ÕÈòÅ TÝEŠ$È  P±5¯¡Î·“Ÿ¿ˆ§ÏŸC9ëóñëíÌóE T¶ÅŠ€   D vöq{—ˆ·ƒ?C”¿‹�·|ÁŸ4R@     
@ìß0È·“îP¼|¾üäóÅ (%R,XTX¤úç~  zŽ`/_/§œ�Ž@     �éíŒ€ @ºÎ c„RJ‚‚(@’¢‰DÔ@/}€    8E SUYQÔ¤´1›Qa5i›Û@    ž1H5PHPf©$µ5Û@    ž1H:TXš3€  
%Q ½¨     g‰H-E%$    5×@    žQD      5Ó@    žq@P¥‚À  ]K(TRQ‘H      ) t¶T!QIf¤X¨,E T 	V €‚‰DÔ@(     L% Suš¨…X& «-€MDå½     r”�Q@  
5Tn€    ÁH     ¢Q5èY@( Á@     Q j€    É@     €     É@     �P
–À,¤T!D5 RT HŠ%±5¢€Q(  AHÝK,šŒÚš•,¥LæÔÔ@      "¥M ‚( J(XMD       RN”3X€  ‰DÔ@°      RJ    D       P      Ô@"ÔÈ‚i2HhÌ        ¨ À   RÀ     
@       ,ÐEAPYb(*J@       6M%	-%EJC:³
%       
®h J  ”Š–R                            P    L    @    5@   0    Af¤¤\€ [` , ÃPH%€ Kº#6Ñ�1  ]h!@uˆ ”†j¬Îó€ F€Šr  5j� 0ÔXJ	`  P    P    L    @€  U)Y@  –,   aP   ÕEE–(  Áe•   @°²Ì9»P  Õ%J–(¤  L…@   ,çxÏF€ T‰K   ,   P    P    L    J    P    g˜    º    ú>     |ÿ ‡�    ¾®™    ÑÐ    üà    [Î    ®€   @    ’si�5˜  ë«D@   RÁP   $œçMŒé-ÎzòÄ  ë­*ãyÈ   ScJÈ  ’sšÐÍ •�g  º¶,²   )¬(`  ’sŠ•   º        IÎj¥¹È   :è    E    ’s›¨0   º    !@   $œÚ¨3‹‹°  º  )  T   IÎn³¦sÎóß@  º  ¡  R   IÎ(A(  ®€   @    “8€    ë     P    óül    ¿CôÀ   ¾€    Ÿ7Ëã€    ÷ú@   t    p                            PÑ�             d             P                            P                   
UU©Ï       T    ¾ž¶­U¥P ³Ïæå      CVd  ×ß¾HˆA  ë×o>      @   _W·�    :uß?/€    P   :{úyr    ½;^^P     T   /§ÛË€    ·Içób     T   töõób     ]öéÏÍÃ     T  }Þ^x     tí®>n0    T  ~ÞÞ^`     ºöpós€   Y� /o?<      }ºçÍçÀ     ý�¼Ü€      Ó·N^n   T  ;û¹yò       z÷ž^   T  ×³¿“œ        ^ž›åóä  @ ý¼ü°        ž�yüØ  @ k×ßËÄ        wèéÃË€ P ;{yù²         ÷íÇËÌ PÕ™zûù8€   (    5èïËËÎ P×Û�.@ éJ¢”,,˜Î`   ßÑ�/(­¸• _W£ËÀVÝ[j!n­˜Îd   ÛÓ<Ünµ£8æTûžL*Ûn­$’BX   ºÕ™Î$   ·}ýn|f%@/XÕµ"I  �  ÕÕ¹Î$  ºÖ´™›ôoÏç†aPRH”¥ZU @ˆB 
.µ«ÏJ*Ö÷»&"OON|ÈT’  „$ÌUUª(P€)¼JÌ¬êi™
¥«ÓÓß�›%@²y° ¨  @  Ýƒ‘$×Ó½• @           iP„£     4"™    Ñ)!P €    (    Ê              P                            P                                                                                                      P              `            7¸Qb±�           K«,k*9            T`             T              @              P              @   ¨  ¨ T €   ¢,T    ©@
”@P   ¢,P  
”   P   ¢E‹   ¨X¨ ©`@HbÀ 
                €             R€         ^´ À X         ï@ 9ò ‹ZJ°	   a7@€`t 8 ‹kFud¥‰€  6 X X` 	�H             �`                          @             �`         @ $ �`         Ñ  \@"Å�`°        ^´ À"ÅšÒ[šTÎ@  ˆ ˆ j 7@ 3�H±e¨ $        Ð @H             H             @                          H         {P r �`         ½  çÈ R,YjPJ±X  ;ž” œõ: w@ 3€H±f·%”JKs˜  ¼úÐež €6  ™ �`         
  €H             @              @                           ?ÿÄ           ÿÚ    €                       
    @   
     ¬ù|½}zÝ_W«Lb'“Ã¿]PP B€ ,(”M€  ¸ø?†þÏÕöúu÷GÞ|ß�àðçâ~WÃ¯Ð~‹§´…@   ° 	ž€ /Êü‹Sé}oo·êþÏYpøÿ /åø?æï>—é'²ÀTP    ‚€   —ø¾í¼»ý¯õ¢òx·î¿‹ùó÷êqñúþÿ µQ@   Ž9 }´   Ÿ–ù^íëÃ?eëý‡Þðx·ïôþåüŸ“¯5ûþ´E   R �âpë5dU�=` ÅüßoF<ÞßÖtûÿ ²Æ[óþËæùyêå×ët@TPN>n7¯§µ u÷ýÜ¼??€ Ï‹_�ú³ù²Öý¹öÐ Çó-=?¥ú.ß°ûÕÃñÿ 
O/ß§¸‚‘CŸÎñï³Ž=¿C è~�Õäá××�Ï|œˆ)Ã¬”õõ  +—Ìòuú~ªvû?O—ÅùÙ&cZ G?‘�§èÓ>o™ÛëlSõ?7ày³{ýŸ»ùï….xàwÚ€ (”@  E'Ëó}ŽÀáñýŸJ�Gì~oæðû_oò>b
         Nêû x~oÛê>ÿ Ûüoœwó(7@       SÁàû{Ïáý?i¿Øx?9 Lì‚À1v   €    >_³@O‹êú'_Úþwã€1²
         ùœ>Í òoÐtý¯çþ0          óröÐ	F¾×‡Â ”‚Å„ªh ‚¥B£ %ÔP  ° *P   * Lî€€µ         
    Ha3t‚€   (    E ,Ý	6     ,²˜Êî„]HÎ&µ E    (    ‚Êœ-ëÇË=]v	¯­Âxxòãß§PE    (    ‚ÂóË¯>.½4¯~7àå‰zl@   
      PJ(@   
                                                    @             @           �      
�@P E Éi  
    ¨  ,�P      
  % ("Â¢‘@         P P@         Š         
… <ÏM   
      
E Ÿ{zt   P      (8ôØñk;ôôÏ{€ P      (ÃË®ûéG/&Ù�½Âöê gDP      (äÅÌß«g6É�úéŸ³›¯¢‰‹ªž~úE       ‚€'�Lë×^~wôü{ÅÓ>®£ËÅßÒÇ—ÙP ”     
 Ï‹t˜ömæå°“Ù\¼½šõ“ÇXôõóçÕQ@        xú?Gw“:?_G>ÂcÛ¦|]ÏoEE     
B‘C—›a�úž5;÷yøìý=˜òlïQ@ X*,X ˆ,
%?.�™ëxõ c~——�ú\¼Ý(^õ‚€•,,,
 òM„çìxúPeê¾I°fzï?PkµE €@   °T(|› åèß“¥Ç±äºçì×Ÿ–èkµE ¤    B€róu9]€åë×�t^®žY o­E       B€y³°Z—}ùzP9ôïåºíP         ž{Ë¥  3‹vsïÃ¥ºÔP      ('ZÐ  E Nw ëQ@     ‚ÁP œð°‹  °¾¤P  – °T)Ë     ®•E%€” ¨,
(     ©    ‚ÁP s€    wQ@(Š     s€    wQ@       ˜€    v° ”     
      ],P      (€    t±@     ‚ÁP b     ÒÅ €  
 °T)˜	@ 	QH(¬P      B‰Y€    tE     B��     ZE       B�  *Q(ŠŠ%¤P      (     
E       ‚�      ¤P ( ( °T(     E €,*   °T(      P      °T(      P@  
B‰@     P      (   @  E       B�%€@ PEP     (  P   B€      B€      B€RT°²€J °T(      (%€    ‚€      €                       ´    #9€    ´    é@   c8    Ð    k¨    Æ     µ(%)
 êŠE�XÕ  Æ
–‚M  `  3t êÄ)¨‰o-ô  Æ     ¶D` ®¨ ›@ 1€    -    º€   Œa@   ´    êÄÖu&´   ÆX©   @   ®¬çy%Ù  1…YbËŸ^=ºùœÀ Ð 8_7ôv ®©�ä¹ß�îê  1…%JOo?§Óâñ  @ ðõóù/×è ®©5“7^-øgÔì  1€ 4È  -  Ìl ® ™°  Ç8    P    oµ    	ÏÉð0    o¤    [õ    ü/     :l    ;    Ç;     P    sãA(   &õ»š€%  HYh   sã@ ’Ð o[¹‚Àžú  $——]€  >4 ­  &õ» ¨:  €Î¨   sã@ ’Ð o[¨©@   P    sãR€”  o[¹�eª   Lnfï9j5@ Ï�T    ›ÖîÍ€  XšÊí1¬ÝP  sãU    &õ»€³§|z³â   \åe›¸X®W‡<{» Ï‹FT   	½næ5•ß»—·Íá   Ve…M0ß?ü¼1ö}` sãK%   o[¨±K¬À    ŒÆè øÐ    ›ÞÀ    h    ¸    ÓÑõ¶         Ÿñ˜    þƒéz¨    -    ‡äÀ    {ûP              E              R             R             P              E              P              E     Kª      P   	ÏB §]P     …   gÏ�”( ¤Æo^š      E   åÇ{   &3®½(     @  >yÓ@   	œN�u@    P  Ë†ú    1‹Ó®€    @  ážº     IÏ:ëÒ€     —u     g]w@   P  3Ã=t      LaÓ­    HP øk¨      ã7®ô   P 8c®€      yÍuÝ   @ |5Ö€      œá×¥   E  œqÓ`       çn”  P á®”        óÏ^´  @8ã®À        óÎúè  E p×Z         	Ë;ë  R'.}w@   "K½P   ãžºì P8ÞÔ &sŒÉ$’$D@N�ûvÕ   sç®º¡1Ë‹ÝQ@NXë°	&qŽxÆbÝUiUUE
“¹Ívï×t   &9ºÜqãÊk§£ÔEpvÒfgçŒd»Öõ­QD   Lrç‹×·}è  8åæó¯~½5ZêErÏ<sÎWZÞõ«J    „Ç><Ý;öéh <øñæß^šæßJ^„P.î÷«j$‘$„’E¶Ûm¶ÛjÛVÔDDI3Ç�,ú{ÍØ“9™ÏŸÏË§nšQžYßM6EûzêëWWZºººº¶Ös•µ¥¤D""

QL±Ç¾ùk£žzpœ[²c8Æ1Œc<ùr×ZE	wõ½R$’H’""  ‚€PNXÚk¾µn®®µ«YÎ9ãŸ/?.DP     (     „P-‚€    ˆ¡@    „¶
E A@    	Q@    	P E              P              E              P              @                                                                                        P              E              X  P           T              P              E              P              B€             P              E              RP€P  €P   P              E              P              E          Ä  ÖÀP          Np { @	I@   zZód ž^¼½`ùº» Z @  (  ¡¯>@	âëÇÝ@3âô;ƒ  @P             P              E              (              E             E          ã  7Ô E     “@”Ø“@ç  ]h E €€  3ó=oP ÏÍõy¾• ÇÍõßH1  [      bÍ€ì b´  P              @                           @                       ˜ [ @         9À ì E @	@ ìçÛÇ�~Îò  @ h E €   œú¼8 5è�|  2  ´ E      X      €P              E                                            ÿÄ (        0@P`p€ ÿÚ   ñ3333333333333333333333333333333333333?)™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™øÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÏÆ"""""""""""""""""""""""""""""""""""">ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ�¦"""""""""""""""""""""""""""""""""""#Èø Öµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZˆ|Àµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÔJ GÀ µ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÔCÀø. l€àa‰0Èø.?ˆ6�ÀÂl€àa‰6à>�ò‰Å]À­ç'é	Åmà°(™Ÿ¢×ví�§ëµ­kOÈØ>	ùskZÓkxµ¿Fl€àa|Úö›OÑ3?\ÈˆŸeÿ Hl7À|à"uTt£órÄœ‚oˆë~ðTñ:ŠºUùùd^I>A'€ãx,S€üLu(ôïûå~GÉº÷Å<üDÂaPUÛ´�§àl�„ü£E…à;…wÙ3Â;"§TîÈèŠ‚—½ï³`ò�ƒð/ƒ�W ôŽEppU·mvíÛ°Nu…Ñ\ÛvlÛ°UÛ·h¬.±”QÇi5ÈoÑ›ðÀòc,³—Ë¿;±_p8Mâ/“t
‘d•(ù1•YËçÔx+îÈíè¼Š²KÞDTQÃµß(ìWÚÊORxUÊ²Kÿ Ç2‚yð•B›àl�„ü¥EêçvWgx“¡t.»gYÚÓx{‚ø‹þørº!ÿ $Ø?ÀÂøpgŽÚO{½Ð~�_™ÿ ±ï•é^‡N…úo{ääð¾þÄyaì;ç|/Z®¢‹, ª/èÍ†ø‚àxYW¯:äD f¥†"t�àEe^¼rìÊEb!1i„ÀÄÌ�‹åEºrìÊdD›	¦LÈœƒàÆ9Ìy ˆˆÀ1)ƒÉ°|ò–åW6	ÐÀÀØW UJä‹Áœ‹ rwtÁvÆü“`üáÖ= !ª§ÀË¨¸.‘¤‹ g `)Ì©ÁUÞ
ìØSH,AB®@+r·)Fl7À|Â‡|åÛ‘1~#ˆCL¥ˆàx9ž¹zèÆ(À˜ÔÅ9LAo‰ø8»]ã“¸Q(äµ0¦ ·Âx9”>Èpp¢™Ê>ƒàp0Ÿ”®="é
tQ@ $±$($tL�]&Š³¬n_É6Àp0¾*ÍÄì…™Ù�Dì”b^=J·*�pÔüy˜ô:BÕŠ0õÁÇ‹±#›D%›uQl‘?Fl7À|)È¸PåÀðRj1GfÎ�âk¶ƒ©È¸TåÒ¢ (,G]¸ Rø\üƒ…”L…Hé(),G$]¸ Rø0ªc|#Èàá™‹àØ>	ùGÐQˆqãÇ‘—LÌ“d‹uY˜qý cÒ3°##³5!$Ø?ÀÂø1 HRE¸7Ð-… 3Ê·+D‘…¸µ‡iÓI¯[«Õ Ô™°5M*™= ˜èÍ†ø‚àaÅú�•.€‰Sƒ&dNKƒ†K2Â_(ýY "eGI‘:F({uøñH0Øðü‚¢` ·‘P\L3µ¸ñD<U7€ÀÈ�ÁÂŠF/ƒ`ø'å‰uB–­z�0(”RÕ«V½@�&$Öü£`üõÄ	@€ @K¬ýI°ßð\W9#;1D‚†UCîLâ�ðq�¸ñOÁó‘3Ó*d(N*Ä0�(øP_™ñÀ@e<lRãƒ."8lDxÃ >Å000¸9`ÁÁÁÀÄDžƒàp0ŸÅà8_€˜TÛ»víÛ·nÛ·níÛ·mÛ·víÛ¶‚€pÔ›ðÀÅs”ÇB\( {*HëÂaaœv'áLä±æˆ‰\>JÂ|8¡œ^#áLäqð€†  (aÕQE€Ù&2#Åã*b¸€#�"""ŽÁ°|ø£`üäÆ:¦V÷½ï{Þ÷½ï{Þ÷½ïk‚„T‡ýA°ßð\P92=˜‘Ñ6½4TÊæqÅ`R9>)D‡Mb*S¬u'¡Æ Ã‡ ^@  iDè¬¢’¨œDÆ;|âÈˆxP�ŽDDDKˆ�<Ààa?Š6Àp0¾*¨&ÐC ´¨”¦ºR•­)JR”Bj&oÔðÀÅú\ŠRSÈªWƒ¸YS˜æL8´Y�<§É"l(à«o…[DX%Ç¤@ÃcÂrhŸ
i)‘X&YCÆ1O�I0ð`X£€8QZÂaE/ƒ`ø'àM¯³eí?™kÞ÷´ýæÁøÂ†PÅ(çrô¼“wB¡œÀ-¸ªì·~ÁWß¼WÁmÅ<¸‰Š?§6à>�ƒŽSå¸L‡‚ ¿`WDæ34xÆÈ“Êää›9H¦LÚfÇ2Dã5L¡ábrmž"½È©\ÁÕ¹Ž‘xÆÌÒ(x0*E 3kÚÒ"‘(x6�ÀÂ}Âc*gvgÝþù^•Ù\@7ã‰…C.gfz/ûàø¯
äª�§ì6Àp0¸8°Ž”xŸ#ÅººÊ�xÑpe”tÅÀ¬Eà<ížÑ]¶X‚`6"$ýA°ßð\
ó^E’„�ïkŠ‚tãX³nBù8<oÈ2U 0Ö°˜NB±fÅªdòpvß’bº6 ÷Ø*
„øö‰àrª™‹393!‰‘"¾ƒàp0Ÿ`˜ë*ñnA^DïÌû¹Ü+â?K‘EúNÈ¨ðÄLª®–~¯"§ gÂ÷º‰È'È£È$ô‹�þ³`üƒ‹°‚8ðœ«TØñ-�7¨ˆ$@ª¦TÁ=@È•¡ é6…O&Ä@Ÿ¨6à>�åTŸ1}Ç*ØB×°Œ8ÖLÓ'ÅB<f÷�Y¨–m`›³ãÙ1I ‚„xÍÿ á™‰kØ1&ìøæz€|E:b“€R&’E/“`ø'Ös¬åÃõßÄ‚@ØAl)“rƒöï‘rSþ	Ž«‡/œ?QÐœÀÓ¨-E"è¾lýdPé6Àp0¾*…)€Ê•Ë"ñmš�‰šõªmÁ#6êƒpn-Å©ZƒqnfÀÕ$€NlD¤Ó›ðÀò ¢NX;â—â�ÆúôøÖüKN-³2'ó:n¹ããÇôÇ£Æ6ã1M ‘ÓpÍßã‰SŒ8¼j<S^%¯’ _��ˆtL€¥¨H‰)>Áð8O¤EE»tùUÊD™¥Ç§Ç�<xóñêqÊñê´¤å«æÎˆ¼çpéÓõÝbmQãÓãIÇëÍÇ©Ç+Ç*ÈÉ&³WÍ^$©Môà8_S1@×€Úd|­3kLÚÖ›	ñ4È_ÔðÀø˜Š6S�?ê‰Å¦ÄˆŸH”è(Èüw¬/›7)>“è(Äü`ñEâÓã“jDãé‰- ˆ$|Mƒàp0Ÿ@âª;véáŽ‹fìb›b¢	Ò‚™‘Qªì\°U¹hñ«¢í9œ¹xõU’E³&Ð¨t ¦)²Ìœ0]¤µvÍâJ€üÍƒð/“éZõë×¯^½zõë×¯^½zõë×¯X$DH@ÔðÀùÖšµ×í¨“] ±öTI¯]cíˆ� Ø>	ô(wn^:lÕ«$›”€!)“Y³¦NÌÝµpQúÎg+½vª�Û´bƒR&ùTH«wL�3hé›¤Ïó6Àp0¿(“^½zõë×¯^½zõë×¯^½zõëÔ	�cõ&Ã|ÁDÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­k	Œ>	ó9œ¬ùÑÌÕ³6‰"úŒU‘xÍËt”`éº¥ú‡Qû¥Õn‹&h R}B
$í£Æ�Œ\4T£ò6Àp0¿Ä›ñ kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­a�„ùªwÎ*ÙMQHì®‹æ«¦Õf.7Òs=]âé‘ƒVè”Ÿd*›Æ®¶M�¦?#`üæÖœ´ý{�ÿ jl7Ê?ŠŒ'ÈÂíGË”7l‘Cî9]"ù¸cÛ(_ qÁùÔ3$ BýÂ$á 6n	¿#`üàæQÀ;"â°¸"à®Ý»¶íÚ*(¿e5ÈÚü˜àa>Jõ\�¢lQL¿\6½íðT¯ÐrFj1Tƒó0¼Qò¨—�AÂ×¸×½¾SQ2
& üMƒð/…Ìír»Mážêo½‡±öÀ¯ûå~V_zK79?hl7Ê‰Ÿ�„ù.nES�“TÊTQwÃË£ÊÒÏOË–Eòjy9^&ý4MÇ(‰¾j £“²MŠD/•»ãrÁÌ%É‹õ9Tùdÿ ‚ÅÄL˜üMƒð/‡ ø¦Âb‰Nr¨SD™T•DÊ– Ÿí†ú"""""""""""""""""""""""""""""""""""#Äààa>&ÇFä@ã“@¾N<ƒ¾K˜7&ß–iËò<±ùvï¸ÅÚˆyp^E<ãŽÜ~k�"u�#R—Èã¡ä•ríNYŸ4¯6§*Ÿ)Åòìœà`XŠCñ6Àp0¾+¦æbA˜238òñä`LÄì`ƒU‹D["™hl7À| kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­D<âlx/Ì€qÅH<¬<êÎ•A»¼iÈ=v‘Ùf¢ƒ‘*�Ç™¨‡ÍÈò&Î4­Ãà²or\sæíÒTìÒv“œ#”‡É±`S„>&ÁøÁŠtzÝn¸! [õ�€¶ÅHÉh*E'í†ø‚�Cøx0�ÀÂ|O�qö6Î8*‡8‹Ä’wÈºfs¢“BçÈqŽH>UÎD«€4ÂüÜ�#…Î4øˆ8Îiu‡È3n»÷Œ–ÿ 8fÿ Å±LOÀø›à8_¾?rl7À|ø“`ø'Äøôqã…?‚™Ê“”@é¹KŽhVè¢ù6CÂ
êj6hƒb‡ÍÈr \ãEøy»®1ª,ùtIÒ|koóè¢M‹b˜ž#�ñ6Àp0¾&PØ
­p4ø›ÛÌýæ0©·h(µÀÓâ×üsa¾à¸Ä›Ààa>&Ç…~DCŽÄ¾ÎH¼¢JŒøþ-ÓC*ªœk%²aäøà¦I’/ÍÀr$¯-Çà òâ»n�ÑåÒ\‚‡ÆqmS/“âØ¦$	 |Mƒð/ƒâ¢¸†QC9#’¯»q–[`ª+Ä?Ú8¡Ž®Ý¤T‡QQtG ¶áXË‚ä8â›ðÀðcìÛákì|­{˜â¨*S~Í²gåkZÖµ­l1Ä÷|ƒàp0ŸÇxÙ6l‘L<Ž8E÷~	¯ÛŒwÆ8àÒà˜ñ-Ñ�ñR
I�óT ,Ù7@¿ãRñM'ÜsŽ�Š_â¥:i¦˜|Mƒð/ƒbÙ6.E±\v{fuÙIÈºB¹V@ÅûGÅ<“.N¢É¸+®Ø»3¢:l©ñM†ø‚àa…eLñ7„pŠû÷™ÂŽÊñ7 ¾ýû÷ï;‚¹\Îˆå%J?qÌe»XuAbžâ¦À1Œ¢½ŽÀ8ìv; àŠ	”PUSP¦òl�„ùª¶+4Ñ)~S¢-
Ø©™35…Hà bj)
3¨tÒnBüL˜"RAÒ3PjDÀ>&(¦	�¿`üàØ° RÂƒ‚‘ˆ%Ð "P)HFà_´qPP”¡R¹*©� ±S24ÿ Øo€ø.)�ªÄpW¡Èá~<‡tî
à®Áè¿öÃØó¼AÂgr ¨E1û•�±5£…Êå7"äÎÈé%L.ew»L®âª‚’¨©™1òl�„ùÔ	_Å¬}"Z€~,GÈØ?ÀÂø6(C"&™J¢}q@ÍÌÛ¨-:}N 5åA2î1L–�%HªFj:�N§P­D¡ø¦Ã|Áp1LxS (,Øe R(�Á`1¼@B•"¹HÉ¦›dÓ¹B®ž¢Js(*FªÙÀ˜*ƒ€Rƒp((\1“ÃÉ°|ø£`üäÅ¦° ´Ó^½ZÅ=zõÐ÷Ö”@—^½zµê ñ�†ø‚àa�d�¡Ú,ÄÌTjF©°Mˆ³;#2#>‡¯õþ¼ô�jšj¢f¤j’E¸À¢zAMFæh-LØíÊ“r”O¯×ë‹pmÖè¤ ¡NP"i�<›Ààa?>góæ~ƒ`üüI°ßð\J
fDí”f›"6n-JØÑ£F�D%Ö	� KJR‚˜¤(�°5M�SÕ«V­:µ ÅÁ"“àl�„øœâ°,µ¯{Þ×½Äâ¨*ZÖµ¬cŠÅX§úL}åTkZÖ1Å`TkZÖ°œÊo*¥7ÌØ?ÀÂÿ l7À|ä%À€_JþŽ+@$~°|àa]e^&ìŽû�ÁzgÅ|»¢ôÏˆðÎz“â<bï¹ÜîƒÐp³ƒ9MÂ
�~gNýåzïwºWK8QòOˆð‹ÎçsºW‚ág”œ"¡~fÁøø“a¾à¸Ä›Ààa>
cÓœÀc¹½ÞÙ�w;Å{Û-–³³‘r<gyÝ†xG¨8TâtÎÔÉýg"eEEè?þÀ¯Ú:XîTMÉöÎ÷»Ü;Ä^&ºÇº'j$ù›à8_âM†ø‚àx^÷½ÀßU­kZÓõ‰¶mØû-kZÖûMƒàp0Ÿ1âj%EPäiÓ33´ê¡ZFíÁ'hb·ß¬›S³+F�Ô@È$‹dÓš õŠŒ–j(¥M&Ì›�'MúÄo íÁ±(Í­ÐUA[�Ÿ3`üüI°ßð\9”PVÛ·nâ*S|ÄDÂ{ßfÀ8ô˜TPUÚ
¦¡é1„Â}—Ùp8ë6�ÀÂ|IF`ÈÌzcÓFaëÊÄ‹24Ò«N‡@‹`VFfRldÔ�“Læ`Qlvª0W�S�GŽK�I¡�Q�0èô…‰X™Ù‘�¸µM¹	ó6Àp0¿Ä›ðÀÃŠ¢R‚Zµ„„O´kø1ŒsËv; ¹T)Ê`¡L[ š…4ñ/>Ð=¯l0˜Æ1Že» àª�Šb˜>³`ø'Ä@H	ÓU)Jk H¨“]5Ó]”V”�¦´¨¦dLÔ�Š˜¢@O]5Ð	J´}Áøø“a¾à¸|S)KA*¥„ñetÕ:äpCˆœL*ÂÝ�\‹ r‰£ô)Šbe(RâXaYQpŠ»b(a8ˆŸ8ªUPP¢Q —ë6�ÀÂ~Â#òƒð/ñ&Ã|Áp0ø¦$bŸ`¨©å<pX ¸UÛŸ†ÅqÐÆà\'Ò¦)‰xW‰b˜äeÆU'Ãø>.µ R`a0¿Y°|ø£`üüI°ßð\8*P6þÈ8	•b
 ›„‘I±pà`9WDZõÓA¡LS}§91,88LQE3é DÀÀp00DQM2�@€_¬Ø>	üQ°~�…þ$Øo€ø.MDÕÂI¦‘JbêÖ¢l™ @Å-p@©”…)CèSÁ>ÐQ<K˜ D…1@‰ ¦(“^½`˜¥(}fÁð8Oâ�ƒð/ñ&Ã|Áp<"ˆuˆÝ$Š_x�%5ë×@)Cé8*™’ÒT’L�‘ZÅ@<	D´¥)@ >³`ø'ñFÁøø“a¾à¸LMzÀ¿dDD}‚QKN’�ëˆˆˆûMƒà|ø“`üüI„p<�‚ˆÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌˆ˜GÀø(�­33333333333333333333333333333333336ü Ö´ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌØL"À5­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖ°ŽÂffffffffffffffffffffffffffffffffffff~‰™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ÀøÇñÑ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿ È³33333333333333333333333333333333333333333333333333333333?)™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ùDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD|â+ZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ¬G�ð€ZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ�Àò> +0x�€ÖŽ`ày.û#`øëÇÈáp?²6�ÀÀÀÀþ¼Ø88G�ú�0š÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½î	„÷½ï{Þ÷½ï{Þ÷½ï{Þ÷}¦Áð8×Ž‘Âàyì�¾"{€þ9°Â#ù²OäID<ØOp4üMƒàp000<M§ðg&Ó?ÉŽ‘Âàx9–qÝIÙ\oß¿x¬w å5ñÏ†À^à8#kƒ&ÖŠÒ”¥)ZÖ¢Q ÁÀPâpM·h0FÀ9X¨€a|ÇPËn"Ä?ÄØ>ÇX]rœ}›/{Þ÷6‚—¹•Þ
�qt�ÁU½ï{ßeï{Þ…#…Àð8¨<Ã¨›€z<€r>À‹õ å©ÉøçÃxQE�÷Èø�{†yÝÄ|W‚ð^ñ_&ñ5J?#aŽ+Àqó+ª£ÄÞ•ïp^•Ø,³ƒ=¨º
»ÅzW�°vš÷w‚8_

§š�’9~Áð83·"ù©»f{ßÂø÷ûýá|wþÀ¯Áÿ yWäzG+º=¢¾Eð=Ýá|…÷¿ßÝä�&áGÈáp<œ&ªBCâ‡*…4™K´ÆXOÇ>Ãœxs*EÊàŠÆXW ï´.Là·tÍTÇälXÊ,šÉÈãÁXvv�çi“3£(¡@â«…ÅÈ<#ÞÙ]5\² º'ð (B¦$8"$ø›Àà``x_9Té8Máßð½ïw»ÂüÑz.»À|Žéº©�c�7ôÏÊø÷ð¾ýò½¬Ý5Pƒü!°pp<ŽÉ±Âj6§f«±M�²; fÕ³TÈŒ|6.GMLÀu
Ð ³éôŠÌZ§MŒÒL>FÅ“U�I1ò á%¨Èí¡Z7lšN;B´E¹�]±š@nFälÕ‘dJÝ£àÀ 	Œ Š% |ƒàp00<,“]Dr˜¢!ä#pn(nfàÜèlŠh¬‘på3c6Q#"šl¢(à&DÜPd›0'ð¦ÁÁÀò8\#‡ ¡×æhÊ×¬f�$Ú¦OÇ>ˆµêõA¯\Íz€Ó¨ ³é•ªi†^÷½î"8dÁ86€ÃQ3s4éƒB7Žˆµê‘¸¢v¢ÌY"4+TÑ(€�Ø_Å
rP‰&™Càl���àåp‚ŒCŽ<ÜzÌÌ¬ŒÉ6HñÄãƒ�<¼xñãÇëÇ�E‰,ÐY•˜23ñÃÆ�+˜¸d�ãÉÆ‡<z�H¿Â›Èáp>ZÒ”¥iJGãŸ3ò�„FM­kZÖµ­a0à †Lø�œäT
–µ¬"P/“Éê*e/ÄØ>˜ 
n«C0+0#Ú‚téÓ£F‘@
b€#¨Rzà†£¢«0`“B¡§@$B
l#…Àý@€–µ­kZÖµ­kZÖµ­kZÖµ­j‰Dµ­kZÖµ­kZÖµ­kZÖµ”<Ä|Íƒàp000>P$Õ¯^°'â	5•8þ$Ø88G�úšÖµ­kZÖµ­kZÖµ­kZÖµ­@±ZÖµ­kZÖµ­kZÖµ­kZ×í6�ÀÀÀÀþ¼ppp<Žû#`øëÇÈáp>"a>Í› å7è$M°là00?¯6‘Âà|1×=žÉLå93333333333333‚*ªgIºM`6LÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌà|�ƒà| €ÚÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ„Â"">G�ð6-‹ˆœNHÈ	<ˆ~b‚éE"¨8IPÜ€|Mƒàpr@@mkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖ1„Ö/‘Âà|T*È™@I$H_ÏX](C7p’ ?¾6�ÁûÇú#y/‘Âà|LS&(uúåD„Ïp.D�S¦AÂK”ÿ €#p7ê�ƒàp~áÁÀÀþ€@Ø8_#…ÀùV•¥#ì1…PX?q±È®)àŠb ¢º. Ú"¢†r›‚õ&Áð889Ÿˆày^ö´ÿ 2o%ò8\Ç9–UW$t“’(öŸ
¢˜@”ÄÄ–EÊkÀ~³‹•YºíÕ(þ Ø>äc(à¦¨‘ÀÀÃUÅé^ÎÙ]rŸùsy/‘Âà~:‚éC˜15‘rEÁPPo¤øèTÄÀ<ˆ‚R¨“”œ¦©Mõ(.Ì¦&-TLß¡´üƒàpp>#ŽTzýA’ä#�á\zuF~‰949&ÎH?ËÉ|Žñ‡3“ kÄpWEvGD\§Ÿ™ñØ› ø†Nª.QX¦úVF«s·P¦°œTÛ·`ñÇ}¤7ÀØ>âl}œˆ4OŽ"Àð =MTIR	š©Ç/åÍä¾G�øÆÇ&\S (¦$‰*‰¸EÁù(.Äp�ò˜† 
¢±Mó\\‰@JQl©U:çt.û}°v›”Õ}V½îŸ‘Ìº…Q�°|ÄqÊNX7ãš Pò8¤£S³S�7n19›tÃùcy/‘Âà~1ñÑ”À2 J$Å1•n¹òWa>ˆœ€-×EB�ÈØà\a JpMPtw&Rr0Š7Y3ý&1Ö] tW$Tâ¡œ!@àlƒ�ò1E R|ÉŠ)
Û«Ô+R$ü±¼—Èáp?âèÆÄÀ>B!�[ªQø­Ž„¸O¨Å9fË&o‘ÅÈ­‰„†(`©‚zõŠf*'n¡GælXë®+lÚEÐp’�ð6.eŽÜ�°|€ûÀ|b"?˜6Èáp?Qtl |ÄPÆª$oŠâäI…ú Å1PQº…‰ÅÐ©‰€`€“XPÆª&o™ÅÑÕ“P¤b$vËÞN.Nal	üMƒàprffffffdDfffffffffffffffffffffffffffffffffffffffffffffffDL8_#…Àüe…Ð—A€àÜÍÌ_€ââã	…úÇ)Eª‰�ÄøèO‰€}Fƒs·9~j£  ä0 ª
”Ø8©œ¨\l	üMƒàp2""""""""""""""""""""""""""""""""""""""""""""""" À!ò8\Å\\
`PúÅ©È>MŽqOöŽ‰ƒâ|t#‰‡Ô ¡H-NAù*.„¸@ð r€ ºk‚¢ªë,tŠ€âlƒ‘ ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµÖÈáp?ØäVÀ¿R��L˜ù69…<°À "-ŒAø(.‡û�N‘¾K‹‘ <˜§ 	+‘t¢À	'ÄØ>îÂ‡óâƒƒ�äp¸15î)¾“ã¡S úŽÆD|Ÿ
˜�Ø8 Z˜ƒðWa>Ã€�›œ¿ÇàSüD¦LIX„°Ÿ`ø¼¸_´ý3ð™ókÚ~»LÌÌÌÏ×6´ý¢kÞ÷½ÀÖ^÷½ÀÀ8l#…Àù9×ì¦ºg/ÒqtcbaõÜÀ>.„ø–Ú cS&>G"L'Ø8 Zœƒð0¹…0/Ê´Ö .%„ø›Ààà}á€'1×%XÙ³fÝ—~À8�M‚¨®—1Î¿h®J°)q1•ÁQT‰Ì·`û àûÁ`WfÁ8«»p+³`¨e…È9*À¦Í›6¾FÓ32S ˜Âi™™Áƒƒƒ�äp¸#bØ®¤t_"938 º0aêPÆ(Î]âqÀØØÈŒÌŽ..˜Oµ@jt†fpÂäT°>ÂâXO‰°|Þ;— ñ7Àû¿ßþÀ¯Èèë,ì_•ùîñŸñ$ñ5Îw
‹‚»Mï}7 »‡E|W¦x› p£µ•ÙWYØ¿+ò½3ÁzJô¯»ÅzTtg½òò ü_‹õ_™ù‘é_wûàù7i(ñ> ,.ÄddA00ppp<Žä|T§Hè$
O"…È”äA@.51<©Ž‡ˆˆñ`P<Ž8Åñ0(yˆˆˆˆÃ�Á¹�ø	±0 ˆˆñÄ°Ÿ`ø�‰•Šo‰|9ÇefÑ_°.7¤«a1]�°¦*€°(c˜åQš©ŽS:G ˜Wl±v{¦¦#‚eÕ·(Ø	‰á°ØìÓrŠ«	ÄçŠ¹œƒ+$Ÿa–Ê³ešŸ#a²Ns*UHy.ÄÚöÂà`ø#…ÀùQHÈ‚ Ìqq\S‡Õ
 ãS$>ÇB\L>Ó€ˆ·ù09± (}†A!lbüŽ„q0 úÃÂüMƒàpp>J…R]üKáb¬Û¦£1f,z‚L›7œ43€²eff‚Ï¤›Fè�Š¤fÇj£31A™PY¨±M˜4#c ³R³A¨ á¡˜�‹C3é#3Y²h¶H[’ŒE‡DXƒ�1%d,ŽÄƒ$¶LŸ#a°qL0 ÀÂá¼0 …ÀÁÁÁÀò8\œV´ úŽL¨¤ûÆD|,.D€@ûGca'“‹‘W ûGãS|¨.„10û‰a~&Áð88%Ñ+lˆx>(;J˜ (iÐ)”å9Š)ê2& `àÔ@(Ž	LÅlŠØ‚:E7ÅF†G­ÖmÖÆl³0bƒ`DP3aiÔêu:€ÓªºÂ×©Õ+b&#a²AH©�\7“…,Èáp?âèÆÄÀ>Ã ˆ·1|..0(}£Š cS|	ñ ¹@jdÇÊ¢èK„°1,'ÄØ>ä`]" ‰~%ð¨¹PÎ
é7}Ã=„]eÅÑw…òn…eWÞ.ˆì®Ìì•ïx^™ê.,DDDV±‘ZÔJ)é) ±ZÖµ­kZÖ¿3á°b$D0¸o 32#$ÀÁÁÁÀò8\ÄT\˜ ˜}‚
”‚ØäÇ¸¦ûÔÆ¦L|â@qÀàØÈ�•…È“`bXO‰°|ÌÄÊ_‰|*ÈtÌ[™À¹ETL¸¨a[°U›žTÅ*ÆTV�p33l×˜Xˆˆ‚” À%ˆˆ€€`ààày.á›2æL
`â€8ÝDÕ¸:‚�Þp862#áLt8˜Ü`Pæ/�ÅÅÀ¦°1</ÄØ>ï.¤vÆjvŠ4h4I�Q°³é’t(†“µ`ÐZ™�²é2´hÝ‡ì´¥)Jj %¥)J ¸888G�øg'8¤P´À¡
dÜvU^S¼À¨ (xT]	q0û‡cpØàVÄ€¿hbx_‰°|Þ\.‚€ -ŒÌ©Q:Ó§Ó…o¤íú½^§S«Ô}>§Q4_àÇÈáp?ArpÄÃî1�G „!~ó �¶1"@ }ê51.ELHíOñ6�ÁÀûË…ó­(­iJRµP%¥)JR€Oáƒƒ�äp¸„8±—2`@ûàJ$õ� >ñÅ@¸ÔÄÅÅqLyÀàÜÈ›ŽDØ�Úžâlƒ�÷— Ÿ#…Àû„×ØærsŠE(~GàB€ ØéœNºŠ
@PûÌ
•#7P¢qt8�Úžâlƒâf~‰™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™‘Àò8\¸æ:ÅpUÎ³…J	”?NpP©¨Gr¢À	”? ABŽ ªjœÎL\L>ÐÄð¿`ø!ö†ô#ò.Ü .r®eÄÉ�¡úqb€à‰”¿‚b¨@—(˜>ÐÄð¿`ø‘L@ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@€€ü�÷!Òõ‘"?R%õ`@/á˜§L@N‘Jhbx_‰°|�ûK…þ:mkZÖŸµ­k[Á°pp<Žî6((“Xõ1‘ø�%2B‰R!#íOñ6�ÁÀûË…ñ{Þß[Å¯kÞ÷µï{O�>Ë�¤N'½„÷·ÆD÷µ§éµïp8žö›^ÓäÂ&½ï{Ü"'½ï{�ÀÒl#…Àù‰öl¸Á±LöFGãDGÕ‡¬}ñ&âlƒ�÷—ÁÌeû ä�à°ª.À.
(·h™Ð;íÀ®.�×dƒ�ûÎàîÊìŽAe3²:ìÈ:+ŽÇc±ØÞ.ànì€XEnÀ/¸VÜeŽç¸
è]vÊç°gè®�ÁU)°ÂaŸ‰DÂ#ñ’`ààày.ÈÂ¢ÝžÉWLå6ù°Âa~&Áð88;\â_™Ãƒ; û¾‚o»
¹‰¼MÃ—xWÊ>ÀõÄU0¸îÐ}ßöðë•tÝ¤ée•p›°xw`ì{ ~/�÷x_Âf9ÔtW©<+…�÷x¯�è½MÑ•ràÏ
ô¯Åø=Mð¿3ã<+Ò?lí†àDN.á>I�ƒƒƒ�äp¸%qÁŒ *‘Ðx6ù°Äð¿`ø‘Ìªåt’€?øpS:&N¢Ü+„ÌT±rU©ŠLŒÈDœ7U¢dà@"é2 Và¡WL
P
G$ ž³q¢i ºNIaqÉŒ0jAMÚGCH§@!J A!JÈ`a°Þ1”*‰šC†ð8&¸<Èáp>J„Îˆ"’h¾‡Áþl0˜_‰°|Éav¢k51~%ð¡T@ÍNÌYƒ.Š,È‚ÍÌÑ6‰·;c±3�@¬›·!TLíŒÐìú]^›hv‚Í&¦n«>ˆ2}#°õä`…‘Ø•ƒf¤MT–h,’f(.Ü¬º=bF(6Ô³S0<xÿ _ÐÀ`´H�†ÃxP¦!H™p0¸o, „ÀÁÁÁÀò8\‘Š¢Bß¬T@ðl>óa„ÂüMƒàpp>KãÌD­
_ˆx8¨ ®+l6¦ UTÎSÜÆ1‹•0•PrŠ¦TU �€ˆ%¬RÒ	
bŽ� Ž¡G@#«P¡ ©�LQK@"dÌÜ­Á§QOV‘CF�4iÑ ©¸l6	E0L
8o‚ ÁÂ``ààày.Î´¥#Á°ø?Í†ƒð6�ÁÀù,W$Ùºañ/…ÅÒçz;]¾â.ÓråÁ�&ðƒñ|gÈ¼Ü9½â>æ}ÛAÓuˆ?‘ZWñM†„ˆ”
À™œ �Àò8\¸pø?Í†ƒ�äØ>äb™@¥ø—Âàù5R"@�¦	$š@àŠ%Q1Vàž:!ÉL’”©¢F€—ìL-kZÖ¥(Š$­kZ�
\6‘Âà}Ã‡Áþl0˜\&Áð888�‘pB¸lv Ã¤,�‘Y•±Ú�‰˜�F ÄÌbFêµ3^f À¬JÈ�D�û-kZÖ XŠÖµ­hÁð8G�÷ù°Âapp<›Ààà}åÂà�‰§N�:ALSE°7Ó Å!C@·ëèA  ðƒàp<Žî6ù°Âapp<›Àààx´¸_¶?“�äp¸q°Ø?Í†É°|™Ÿ¦p¢kZÖµ­kM­kZÖµ¦Öµ­kZÖµ­kZÓ6µ­i™›ZÖµ¦Öµ­kLÚÖµ­kZÓ33kZffÖµ­kXL#ƒ�äp¸q°Ø?Í†ƒ�äØ>îœ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™‘Àò8\¸ØoçK�ƒ�äØ>ÌDDDDDD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD|G�÷ù°Âà`ày6�ÁðôÆ """"""""""""""""""""""""""""""""""""""""""""""" @@@~…Àû‡ƒüØap0p<›Ààþp¿Ç	­kZÖdÚÖµ­`6‘Âà}ÆÃ`ÿ 6\&Áð88yp0Æ7mÚ*îMÀ¥Äû ÷½îµ¤M°'Ü
�î‰ÅM€p0œO{Ü{ØO°TÜ
íØ+nÛ´‰÷€q5ölÛäa1¯{Þ×)€La=ík\S`ààày.Ü8oç�†øÀàà|„E@Pñ/…N³�v/ð¼i9;ƒ¼Mà;;Â½+Îçs¸ßlŽE–‰¸YÁž¦ôŽû}±vgbð¯
èØ¼#ƒ/Ù}¾Ø»3Âº;žà:½Ã½€ó¸GD]Wv“²¹;‘v/Aé&¹ñ6|O’‰DÂ8‘‘„ÁÁÁÀò8\˜šû.Sxç…Ã`y6�ÁÀù(eÜÚ*€üáÈº0E�ÁW*¨*¡ÖPŽ
äëïí÷Açhwëw$UÚ¦]²ÎPäP«�Ø>+³82ààŽ»J<#¦ê¨¢‹™à=bï²ŠªŸfã®UÌ©¹C&uÔ:„\®ÎìÎŒë´“ÆŽ0|M†ÀÃU*…6Í­oÀÁÁÁÀò8\‘ÅE¿d‹¦rø6óa…ÀÁÀòlƒ�ò_5YŸø\«·ªµ�pMºfIt¹PÐ-TmÖ#`kÖ: ‹TÓ+”ŒÙTDZtÌÙTÐÐfýr d”AíÑU5“:$nŒÜ­ÐATE"Ô
	·Åm¨‰®ŠˆèÔ(‹qn-ˆÙ’(>&Ã`â‚a(¦!�…Ãx0Ø¾�ƒƒƒ�äp¸#ââ¡Äè�Àá°›.É°|É|xB$È„ø—ÁÊd°´FeÑE¨ v�f:†eÐ+ f,ÌË ›B¢t:…m×ÂØÍNË � ³ét…�°#7Q´è•ˆ33 d›S¶`Ó¦,Å™an(·30d,º=cÐ(¶!~&Ãx9‘R! 0¸obÐ¥ .�Àò8\‘ñp:zSI“Àá¼DDD~dxˆøDGÓøq"#" ¸?`ø’…Y¹"‘Cà\.E)J
z�:S^½zé¯^ºS^ºÒ”¥)Jk×¯]5ë×®‚M@žºkÖk×Jk¥ºÀ•×¯^½zõë|�†ÀÁ( D0¸o #�"$ÀÁÁÁÀò8\‘€éŠr B `àþš?UX`|Mƒàpp>B@Lñ.øÓƒäP 0|`€888G�óR” ðlçCâlƒ�÷—üi€KJR”  @IJR”°l#…Àû‡ùÐÂ‡ÀØ>À}¥Âÿ ¥)JWÅiJR”ð888G�÷ó¡�ñ6�Áñ3?LÈÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÈŽ‘Âà}Ãüð`|Mƒàp|‡‰ú€@ �äp¸pàÿ :`ø‘ !ñ.Ü8?Î‡ÈØ> î. ?‚Âàdlà<Ú\/™Ÿ¾ffgÄÌþ’~¡ZÖµ€Ò&µ­kZÀ8888G�÷�ôfÁð88í. œæW°—Ù{Þ÷6ïq9•ßØìoì`9Žeû\ª^âqXM q8ª
‚—½ï{Ú÷‰öï{	…MÛ�aTW*À¥ï{�üLkZÖµŠ`MkZÖØ888G�ý‘°|Þ_Ãžá^ð>½Ðz/»¢ôÏAñ^÷JïzîLô_ïo¶“¤—QE×íâoAé�u�‘é^è=#³¼3â½+Îïw¸àW3¡yÝ+±t.AÐ¼î¦èË¬ï¼/tw*>Iùá}Ý‰¸!ðøl‚…ÃFDFÈáp>ñç >&Áð88!qMñ/‡XìÖ2½’ºÅÈ»+ \Ëo”!�
‡Ø™ÀÀdÎØæÇ$1›»MÜ	Ü˜&p‘ÉÜŠÀ°9ìƒŽÁ\·\ë,è]vŠì®@çQG=¦®«¥APQ*eÎUŠè‹²ºMvª `Ãa¼â¨*Cà`a¼M­l.‘Âàdlƒ�òPîëuCâ_
é±Ú™™§Pí™¡šAl›¶M(*×¨›Pm¡4¤Y6;EFÍ�Å¯W«Ôëuº�QjJÐZVèªERÝPlš	 ³etÛ6Wj,ÊÕê ³NŸLôÈÑ6�ÐD¡†Ã`â˜l.'��…Ãx6Ip¸8\#…ÀþÈØ>â8äÏ–AV&'Ä¾RÓ§¬�B‡T­A¸·3c TD
¢BÓ¤ú½Bµ" C$(s5Dk¤íº} eÓ@Ï§Ó`ÌN™[(€´+>ŸL¬ÈÜÈN™èÂÐ¹›™ŸK¥Òé2µ".�r"¤B`apÞ Å¡I„ÀÁð8G�ô‰®þ˜Ø>â8à�¢Ñšdø—Â¦]s<+Ò»í™ßp®Êèv�ÉÖQÂnJä•Á¥)JÅkZRµ¥)JR”×JR”¨“P'JRµ¥)ZÒ”¥)MtR¾†ÀñZ††à#$D˜888G�ôÊ*UÓ9GÄÚÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖ´üMƒàpp>F*�Á¢i |á|zeV*àç·Ø�pqÚî"ïr¦)Ìà7]±‰ûƒ‹” À!ñ‚ `ààày.Ð¨¬bÁ„Ffffffffffffffffffffffffffffffffffffffffffffffd>&Áð888¬|CÂÅx‚ŒúfkÕ#^¯T�±ÓnTS3aj«plÕ»tÈ·Ò”¥( R”¥(†ÁÁÀò8\¡PY2&�Kà@B"""""""""""""""""""""""""""""""""""""""""""""* PøÀàà}åÂá�DÌY�@¬º}0h£5˜¢ÉàÜ[� 3M¹	ûªÖµ­|ÅkZÖ<Èáp>ƒé$ x°‘ZÖµ­`À
Öµ­kZÖµ­kQËX>k å­kZÖ ­kZÖµ­kZàšÀ>&Ó“kZÖ°kZÖ>&Áð88yp¾+Mt¥)J3 VåNµ¥ ŸÆ›Èáp>šÒ<TX}à¶Ó¬UÈsëö{=ŽÏd®P£÷ŽÇ\®}à°¨u…È9MQ9Öìö{ŽÈ8MR�Ús�`pU÷‚Â¨¬EÇX\ö{ã²T£õ›Ààà}£à¸õÄ$">Èáp>åqÁÅ`tÈè«(¡EE±Å@S`©±5˜Ÿ€l\WSx:i¹*Š�EH³ueÎ*›M„Q'öŸ2§p\Š‰ÄèœL¹Ì (

›H¢H~³`ø333333  333333333333333333333333333333333333333333333333"88G�÷(¢B�*E:`DpØ©5j×¬"hŸ€lX«¦d…:"Tˆ¢J"	 ‹RÕ¯X$DÐ"aö*¤2zÊši‰L	`ŠÅµkõ$˜}fÁð8>íèGÀày.Ü`Q#6‚Ð­S@ÈŠKY�ëõúÝn¹PM2—ðU¢ÐZ&Ø‰#7ëfC¯×ëõ�¸ še´å:"Û¬Ê€¤(-fG¯×ëõºÀÝ4ˆ_¬Ø>ÀdDDDDDD  DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD€ò8\¼K®‚˜&¨’•¥)Mt ðb”kÊZÒ”­)Jk¥ ŸtV”¥)JR”¥5Ò€O°Ø>D >±ð\(333æfff| Èáp?²6‘ÁÀû‹…ñ6øM­ðµ„÷·‹[à'Ù{üÄ÷½ïp=­p<þ­o˜ˆš÷½ïp0˜O{Þ÷€á°p>…ÀþÈØ>Gð…Ãêö
¶ÝÛ¨¸%XØ'2ý“:E\Ep\Û·b‹Ð;#�[vÝ»vŠŠ8}°wÚíÀ¬g@è®}»·mÝ¸VÁpT'Û»h¨e»%p›6�üLi™™’˜Â#>d‚8?Âàdl#ôM¾EÀíÇt�Eð?MÒ«*è¯ø¯Šì\.ä_ù‘è?âûº»Àù7+(¢»Èðû ßä}ØràÎû„uÙ	8;…ƒ z^@÷Á÷Øñ|/Šù7©¹QÉž÷ˆð«®±�‘éè½+Ä áðØ"&â<Æâ8\/öFÁò?	™1Ž±W!Àff@es>1„‡1€ír¸L@NU“\Š9Å0p™}¢®À=…B*ÔæS2g)Ï´EdHÎAO	à bX¦*¡�BDêm!äFÉ¨Š‹¨¢€tL€¸*ÄÀP«
è¦dâ#'9”*„<†L8#{ÜJ%Àø ÚfffffffffffffffffffffffffffffffffffffffffffffffffffffffÖ0üæeLWðfpUÛ™‘Y‹N›fúÕlv†iÓ#T�U²Œº ÈYôº@È¬ú‡f 	�7;EtA�²è¢Í4@í:DiÖé tmÕ;.‰1fv@ÄŒ� ³…h’
 f…f›T’Q%�§LZujÝ2�Œ"(�B€ �  @`�ÎmkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­?(ñ)‘*%,yˆÁ(¤(hÑ×*TÅoÖÅDR:ý~·[­Öú¿Xˆ=Bˆ·ëuºÝ`n	mÖý~¹Q…¿_¯Öú4~°7Ð(pnŠ"Ü‚ ˜�R:Ýn±P)|ÅDšõ�+M`JÄ}1ýŒ}Q8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¬DDDDDDDDDDDDDDDG˜ˆˆˆˆˆˆˆˆ�ïæffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffppFÖ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™›ZÓ33333333333333333333333333333333333336µ¦fffffffffffffffffffffffffffffffffffffl8oä¢""""""""""""""""""""""""""""""""""""0| \7ñÃà?�ãƒüpøãGÀ8oŒÚ~ÛZß	™Ÿ×€øM§øað	´ý3æmiŸ3ûÀÁÃ|*./rSÚmkZÆ8®U€Ç2®{©¹"–¨°»í•ÑÚDDû ß§äÆUÏq7=¦Öµ¬er¨1÷KÚÖµ­kZÖ°˜Ê€{ZÖµ°DOp7å�€òs¨è&¸Öµ­a1”ÞE$çQÏp®»%\ª\ÊÅ=­2&Øý@``á¾™ÚûÐ\®�è;3°z/;‚ðîÔx‹Ô\œÎÄUAÂN…Ùž®ôÏ{ˆºMÈ;MÉTQC®¤©MúaðÒå]ÁØ=íà<�ÎâŽÎõ©.²¦tG½à|à=îÎïtÂ¼bìÎAÏpÎé]‹Â:"Š(uÁÂKß”>Àã“¸pšè8…yÚ€ð^wâ®Åê]ÂË,³´›¢:íªì¯v.Êí5LuÞšÄ8~ 00pß ô‚Xï
ðŽÔvAØ8„ê™35U!xš„*Š¸3³,¢cØ"íÌ‘—9ÎS t‡ôÃà<9dÀ\ïì¨ìƒ \ª˜ç2GlªÇp -¸ìö�qtLç¶GbèŽŽèv{ ¸¸@·`Î›¹n¢çQ@:'H(|�Ç`è€=ƒ<MßlîÁà:Êª‡1‘;u\ šK¦¨‚ÅrUUP\"äîrÕU±Àéêð[‚ `1˜@¢�"RÀ¤Vè&ÜbjÖà©$š�’2i|D"‰”­È�~˜|�ÅñÐ*(�‰ÕB”ˆ¥¨ !¤¨ E
á2££B©†„ETA"$dÊZ�hRœ¤H¨3‘¸3ÅŠ¢`D�~PøŽqÈ((¦DÄ§)’Zˆ)P*ba*ª¥ÊDÁb�H¡S+,1VNˆ‘‡êðP®Q;R±<ôŽÄ¼zLz‡jVÅjˆÝ",™ÛuEªÌ�‚lŠÔZ™©™uA3·+t‘)L>Àâ¥p�š0+dv`“!hf¥lV½b72*µ+>¨µpÐÍRjFDf£.‰Y�™Y.‰XôE˜3# jv‡d“6è™5é"RþPø‹vâÐ�+13qé³3AjVÄkÖM¢³n¹[>ˆ²½A`ŽÌŒÛ!­D:É B~ 00pß$-�¸¡×Ð-Á°#¤PàŽ½`Q(§«Q�ë –­Bˆ·*%(€“Xôãà<ˆ¸ (uôpnŠB€ 	kè)jÖ)(ÜY¦Ð¨‚B—\¾Ž¸!¤PàŽ±HP
HÐùcà<˜§G¬
 ÜPëpDRà€%¬%2=pCN�C®iE nTàK¬ú�ÀÁÃ|„m{O‰½À|ßeçöÃà>V·™µíkNZÓ6ÊÄÛöà>VŸ`µï{d~à00pßÅV[’gÝ2‡"šÇUÇ"§6Nm¿&’âu�­Ë�8—2ƒò)ûQðg‡åQä’W+¹W•÷^è9¤yDœ(ánH¼ª.Ôr~I¥Qg'äÑ|šŸ¯ð:‹>7,‡ š§QgÆå�äªÎUå}×º'.ƒÒ÷!�ƒ†øy7<¯4<àrér¼Sæ‹ò<—'Ï)Ì–ã¹Î3’Yç-Í8ç=’|ÏÎñÏˆ?´äç|ÿ “çÖÿ GÄó|c‚Š£Ê®ÿ ‘7*ncßñœã>Iÿ 4ÿ ýOôO ýë®kˆå
ó”æšâ�4ýxø*©Èr\Ÿú£á¹†ŽŸò|Ÿúÿ GÃríœrïßs¥æƒ•mÉñÚ›÷!�ƒ†ø)œòœºŒš£Å£Äñ¼q‡žäN³N9n1Ü8¾_šxÉ4¸®E£?çÜ·Ú€ð8ìüÛžIE‡€Wƒ2x r-p§àŸñn“áJ‘ù5Þã?ÏŸ–? ¿ínW’äxÖÜ3ýxø�”æÜò&ÿ :«ey—<‰„ßçdô*¹,IÅ5â¸¶MÉû�ÀÁÃ|Ïô&äÏÆ®“öü‹|‹ŽyÓ%9Uësñ‰ò(sMøÕQË:b—ùä‡íÀxtNG�{Ãrl¸0à±<:'dåŸ=Ž	ÁqÁÆºá¹n1ÿ Ïç/œ©Ø?qË3'Å´júñð§Èqœ‡ù¯ùðf›î3�áß5ÿ :ýÌ~=Ñ9|ƒ	îCð[?Ð“nÑ±›™ÇÌ9}Í*ÍD
¹½á9%Öçóa,¿œ"?	µ­oÕ�€òr*×”kÏ“†Î	äãÊºçŸ0C‚ãÈÑË?ôi ŸÎc9³Ên8p¸ŸÎfÓk~�|“¦«Ni·0_óùÅ&vœÓn`¿çñ¦¢MVÍ[,’/ø>YŠà?ZÖý€``á¾
ç.“¦x•¸~i‹US–'ß‹âù.'�G…r«þUã&Ip\‡ÑoóÏš)"} sœËƒ�pW?ê‡À|¸¡Î8,)öYÊ¼ÿ  ín‡Ô¥vé¼pÌg6Tzî1~“j¸ìÆ_°.AÈº"ä7èÇÀ|èsYþ{8|0s¡Ìçùüd»rñ¬¸~G‰åà×á•&ìÇ\‚¸MO×†à®rê9}ÇrŠòœë¶©´gÌ²ãÇ‰ä9>G“SˆEÚo3ƒ:sŠÍgƒ‹©ØEELª ¹Ü"»s—õCà>Î_?Ðçœ1—~N]|£Îu÷ß�`Ý<wŸé¼pËç(N‚ü+Æœ/#Ãr(¨"²†tŠÇŽ
QsÙl²&ýø�ó�Îk?Ïç†Îw9œà1�òë“‘aÊò<—.·�
™qeéÔ;…H°ªE˜¿¯7Á@æòÍp<š£ÃñløÞg‰tÅ‹>E§Ä½ã9^)¶”våŸÀqÍpž”X«@Å@­€¿ªð6r¤çZñ-8âr«7rÁ^eWˆð<gÔ¡Žƒý>	Qìø}sˆ+^v
ã�:mŠ%p˜‘R˜€›R·Àýø�ó›O—iÁ5âH9Í§Ë´àš³K›hõ_,ü�ø/�B‚‰¶!�É % lýx``á¾[ò<3ŸóÁþ}¯ùÞ;‡I«Æ‡·ùäÿ Î°àq«2ä8G?ç‡�Küÿ À2`Bá‰¤¤PŠ!Õ©¶I0ýPø€ã´y!Ÿ
ƒ7ür<;foØÆñh§áRò|¢ãøçlœp|o›~C�sÀ0âY$ tÅ±ª‰6éôÒl‘?F>àl|ÝïÇðí|ÝïÇðí›¼cÈp+ž'ùö?çØq©'‡L[d:¢Ù6è�?^8oˆ‚ˆ‡¬M‰ 1j~8¼jm
A)Ð;XN96¥'ˆð )êÔ	€~¨|ÄÅ;bµŽ€5NÜ‘G¦D�´#p)Ó324"~#À”SÕ«P&ú1ð�ÍHÔ¥Ã�ÍHØ¤1l~8¼jlÊŸ˜�OV�H¥ýx``á¾qb#ÌD~Ü|åÄ~À|àDGîÃüpøãGÀ8\1…M»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»ví¶‚»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÚ*ì6íÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·aL\8¹]^CÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ³ö~ÏÙû?gìýŸ²KØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì½�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûcì}�±ö>ÇØûbGíÜ&*càpMzõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõëÖ	‚zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¬R”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”Ö‘0.ŠŒ=o®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»Öúàãýw®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×zï]ë½w®õÞ»×úðaëú‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:‡C¡Ðèt:�X¢� pÁZR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR” �	JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¨´¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥*Pã‡øÑðÆŽÆf†ŒÌÌÌÏðà>é™ýàà``àüc¯Û#‚©k�¤M´7n)ÀgÄø™œ‘PNÞà?¤"'T]¡r.ÁÐ¹íršDÖýØø�Ï¼§ù�atG<Ì‰…M› àiø‰®ú‘ÀÀÁÁø+ŽÎg(9MÐ»3ÔÝöŒë²E–sÞ#’/Ú ¸¯ÙìvÀ¹]žÑ�*õ7„tEÀê(eÊºj€þŒpp<*wEbªuŒá5Îä éº¦Pë‚éªû¡ðNgNëw ¸®g=²8)”3¥Ìé'i<@ä\‹•wAáƒ�uÙíÀêp]5@P88?•âk†Îè\¦àï;©.™Ÿ*¨£‘|›Ò½3Áx/Ã�ïvûB÷¸gJ.GxÙÒJ.¡Õ"¨(˜þŒpp<:2¢Š=e:DMÆ]±šŠÇ:¥U7î‡Ày\ïÖ›¹†zg�¦Î[�aza5Óp{†zÔpe“Xö»Bô·rŠ«¨uJ¢
&!ú�ÀÀÁÁø:%áÀ	‹¢ÔÉ‚	âç L†1B)…a@ÙLJr�a¡›
å9HŠŸéÀã TT8œ¥+¤Å&©¶*åP¥åD?t>Àã³<$4à™±Ú( ½)Q¢–…6P
l&!4’#l\ª Ü©êà8¹lf‚Ø­E™š�™·hš+6GhvefVË"Ù¹Úˆ0+#5ê‘‘Z*Ô[¡š7jÝ%;r·E"—ôcƒ�àqb8o­"# TmÒMªQ%•º(�¿ºàØä‡h,LÌÌÁšèœZ• Uvé43UÚ‹`hvefVbÓª-¯TŒÈÔ­‘ID”nVè¢Rþ p00p~&(¢-Å¡[aj,Á™[‚b–“7½C·;Vítn·\Í� 6Òfý@j-HØ„Š`‘KúAÁÀò ¢"Ð��-@˜¥§IH%Á"—÷cà<šu
c6rÔÌ[2E ¤TÄª!ÔÂÔamÕëPh�% ”SŠ_ÔŽÌGÌDLÎDAˆ(•8óˆ�ÔŽÂ"2|FM¦<ÌÌÌäÌÌþ´|Â<Ž.©ü""""""##õ£��ƒƒñ(áNKÚ§É&ä&UÊœ˜r©?"³û±ÁÀøˆ�U"“’˜ÇUÙù2ò©>"ž¢�’ö~È¼��Áßû/d^A'%7ëÀ|DT\ü�y×�àGà"íÏ'Í¸ÿ Aïÿ  ã9¶ÎÝ<äùÇèKþ�‡ú7•E_ÝŽÅU9>M÷ú6ÿ é8žQ%_>ä¹å¿ÐŸaÏñÜ’J½[’åç‡ý¿Ñµÿ GÇò�y7ŸèCýsí¹Î-òý`ø€âër|³¿ôŒÿ Ññ\‚&þp00p~
�6ë˜äZ“Ö:'Èqo¹ŽK’ä[¶SŒ8.WŒtQýÐàà|nEß=Ê=tÑÇù¥È¿=É»zÝšœ{rðK28ãô¹N=^!~-êlá�Ì®åV­	Æ´ãx–­‹úÁðÊ¾ç97Nxç?æÖj?ÁÁlÿ @Ÿ(Ÿ`W—7Ÿ<ó¤‹ÁñNø~m—¿ù÷(�î‡Èã¥ùÎIâŠqåCüÖ,·úmŒÀVQ4¸†í
 ¢Kqêq\£>`œK>9§> <yÈ»5Xâ­äEëžw’_ãÛ%þg88?3š'8š.½¢î¸R&^xüQx�§þ™&£þhíÇã33ûÁÀò¡ù‡Ü³æ\²r_ó¦x§úZ¬Ýu—mÈp|ƒ%CÀƒ£óïœ©þ�#oôd9‰Ü4åø^Y¢ÁòŸ3úðVSšä9|{.A ù£4ûñÀÀÁÁø.~uç,é«Jí‡å»¾s8“p
;?úeù¢·ÉäÇ·ï"€?°�Tÿ DùG\Rü‹çNxŽóØÁ3ŠÃ=G€wÄ.CIÍË<ç_ñÍø*¥Í´!§ÈpÏRàñfÀi2›¶nÀ¸Pó‡ÀxäVÿ Bý7sŽYè¹ÿ 8÷Žs°V*€?¾ƒ±ÿ Lªçà“ÑÎ¦‘ø±æ6?É;åyçœb?çÛ¢2®rS¬cª
m@äýˆààxäsýJ7n£×k-Â¬ŽsM¸âðËòN9ƒpeâ–IŽ¡ä«þ�ã[9ÎYd^2wÊ8åÏÁ…)qEé%Ìw•ÉV]Çl^ÓeH?œ>Á³–} ’ïÝmàWáVªJ¦?¾ƒ’¡dý—ïÝr/2áøîWŒ~É£å¹…‚ã8¦¥AÁ"`àM… #r?`88%Éq
ÿ ›?ùÞK„[�àø¶|g5Å,ÙŸ&ç—1x>8Ø¯#Å¼xç�[�gÁ0A7eçQ]FÜÃ®`KÀqÜjäT¢qv)‰ãá<e‰þxø�ä8Sÿ ›Wü÷)ÃzÞŒâÚ(Sb8�ïÇàròy>^Õ%Áñœ=ÛW‚qÁ„aþ‹âPGDˆUr
EH‰&@ýˆàày1NÜY‡%Å/Àq\2ñÜ— ¯N‡Çñ/X­Åq¬¶{Äqœ#¥	ÉqÜ—§N�à8Î-„LÍR@É®Ø[õ:dhÙç€òb°²U‡)Äùþ'‰AS2)$™C÷Ã��ƒƒñ9d¯éRâdDÌE™«Ä…CŒIdô‚@@ØŽÈATÇ¢Ð¥:k±S‡/�D@Ìh£cqÈ²!<(’ÌáÉÃ#Ç&ˆE@¢ON¡C¯ *`œ>äb¬Û×¢Ø
bŠEL÷Ã��ƒƒòŠÒ±â+Zþôpp>qâ+JäDEcá¥~¨ˆ�Ð€ùÅcø1ÀÀÁÁþ8pp?�ühà``á†mkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kXDLµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­a5€Öµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ¯bˆa±C™Çg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùìö{=žÏg³Ùì‹‘uÛîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Îçs¹Üîw;�Áx/{Ýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¿ßï÷ûýþÿ ¾W¨®A68mkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­i0ˆÚÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖ°‰Œ&½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ïtŒÌQÃb‰‹^ŸK¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òétº].—K¥Òé‹aëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õþ¿×úÿ _ëý¯õãÇ�ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾·Öúß[ë}o­õ¾´¼zˆ�RS^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N½Z´éÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§P§PÁð_ûY°|þÖl�„ÿ µ›Ààa>"7Ù·nÍ€?õã`ø'ÅC*ç·Úív“]3ùÿ ª üMƒàp0ŸÇå@Tª
…Q !äB""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" âl�„ø.WõÊŽ�EÑ(×�ƒàp0Ÿ”èuzÝn±)ëÆÁð8O•kZÖ¿õó`ø'ý¬Ø>	ÿ k6�ÀÂÚÍƒàp0Ÿö³`ø'ý¬Ø>	ýlÌÌÍ­{^÷½¿¯6�ÀÂ33kÚ×½öl¾Ý›6lÝ·níÛ·ïßØìv;=žÏkµÛíöû}Îçs¹ÝîƒÒ;*à úÃ`ø'Ê÷Ù²û'öÒ'»ŽÏgµÙív»}¾ßo¹Üîw;�Þïsº/Eïw¹Ýîw;�Îà»íöû]žÏg±¿~íÛvì½í3’
¦é7‰º*À{Rl�„øœÊ8ív{=’.CþÔL¢«;;Î×g³Øìoß»vÝ—½í>"+Zk×¯V­ZtèÑ×ëõúàß¯×ëõúý~¿_¯×ëõúýqnvæF
ºoxG%T?ÓÀàa>ŽáPXJª'@Åò#úù1Õr»³¨T�¿_¯×ëuºý~¿\õúý}}4hÑ§N�:µjÕ¯^½t¥)JÖµ¬DDG˜™3 væHG	¼Má@4ÿ :ñ6�ÀÂ|Â:J– IÐ(yˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒ:«ºUÀ&äD¥)JVµ­kZÖ""""#ób¢C$vænbÈå7‰º*Àiñ€`ø'ÄåQ¿W«Õê‘ö&2«®èê&Šh‘û˜‰‰Û™)UMÚoäª�§ùã`ø'ÈIJR”ý€‰Õ]ÒÎ@A4€±ûØŠG@íÌŽtÞ&ìŽ
¨ùÃ`ø'îÌuW]ÑÕ"I TÀ?‚�!’;s·2`b9MânŠ¸ßÌ›Ààa?r"ut³˜IÒÿ C"vÆn$*©ºMá`<ÿ ,l�„ýÀ™U×tuH’H0â JdÎ�Û™*É»MÙP<ÿ &l�„ýµŽ¢ÎVs‰ š _ãàJdŽÜíŒ�	&ñ7dp
¿‘6�ÀÂ~ÔLªëº:¤I&åLù(¨�È�¹ÛŠ`tÝ&ðŽŠ°ßÇÀàa?g'Qg+9Ä�M—ù�(¦tØè	JªnÓvG%Tüa°|öF2‹.éEˆšMÈ˜óp%2GnvÆGºovGPüI°|öer³œIÑ) �!‘;s·2@b9Mânˆ°ßÃÀàa>V½ï{þŒL¢ËºQb&“r&þŽ¢™�;c·TÝ&ìŽJ¨ƒ6�ÀÂ|Ne=žÏd‹�ÿ  “(³•œˆ¤‚h”¿Ô@”É™¶2UÓv›²8 óü°|â©œ¬+‚¢¨*Šˆ<ˆÌÌÌÌÌÌÌÌÌÌÌÌÌÈ™E—t¢Å"H0ë JdŽÜíÌ�Žx›².
¦fffffffffffffffffffffffffff@~&Áð8OŠÀå-HR*H‘—È‡åë8YÈŠH&�IÌ�Û°¦#”Ý‘ÉU~Øâl�„øœ§@ZõzÝb B~`ŠŠ®éEŠšMÈ�ûH™3 v§oRªGI»#‚¨ýÉ°|åQ%)J~aŽ«…�	’A$
HþÞ HdŽÜíŒŒ‘tÝ¦èŠ�¿nl�„ý0™EWtªå"MÈ�÷°$2'lvÂ™UIÚnˆ°ö¦Áð8OÒ˜ê®³£4@¤�ø”É�º�Œ‘TIÒNˆ°dl�„ý‰ÕYÊ«”‰7"@Xÿ �Ä‡AFÇD›”�rž`l�„ýŽªë:1ÓA&å$Â HtTlt Sr“´×ÛõÆÁð8OÐ�Uœª¹J“tÑÿ Ã JtTlt17	:MÁT~°Ø>	ùæ:«¬èÇM›”‘ÿ �)‘Q±Ûˆt�¦àª¿Tl�„üÑ¨³•W¤Ý4@±ÿ ˆ™%¨ØHE’t›’ªýA°|óuWYÉŽš)7"`ñq)’Qº�Œ™UIÒnJ°ôÆÁð8O�ž÷½Àÿ p‰ÔYÊ® ©7M.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD	Lš�ÔldŠ¢n’tUŠoÒÀàa>&ìö{=’.CýreYg'Q4RnDÀ?ãÂLè(ØéÓr“¢,·èMƒàp0Ÿ1ÁŒ®ÑTEDDfffdê*åW 	7M/ñÓ333336´Ïð�$:
6: dÜ¦ì‹�æffffffffffff@~&Áð8OŠ¸àšÅ2¦‰)|ˆ|DTYg'Q4RnD€±\ÌÌÚÖµ­{Þ÷Ù³nÍ»vî·nÝ¿~ýà°*·ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ�MÂNˆ¹OùÆÁð8O‰ÁDA·[­ÖMæ"s¬ág“tÐD~’fÖ½ï{ßfÍ›vŠ»wnÝ»~ýû÷ö;ŽÇc°.Çc±Øìv;÷îß»ví»vìÙ{ZÖ‚ÅpW\�§ø�!ÑQ±ÛÁIÒn
p¾DÂqPUÜU
?`ø'Æ”¥)O˜™E–ruSIäHó¦mkŠ‚¨¬+
âà\ŽÇc±Øß¿~ýÛ·mÛ³fËÚÖ™ŸZR”×«^­ZujÓ§H#§N�:téÒ(ŠBœÁb®W\ Öþ Ht”l£a)IÒn
 é°œUÌàÎqT§DIñ6�ÀÂ~�E\*ãn’$~<Í­}‚¨¬+‹�p.À®+
·¶Všõk×«V�:téÓ£F�4éÑ£N�:ujµjÕ¯^½zéJR•­kZÖµˆ­D‚˜¤(Š"�l
•r¸+‚¬
�íûØ©’Q²�„…U'I¹* o'QXË™Áœ
Â¤ÔJŠd |ƒàp0Ÿ€&QUœ�R$‹b$ø36¸œTEa\Wà\
â°©yŠë�DAKV½zõë¥)JR´­kZÄDDDDdDGÆ"""""""#ÄTH)ŠBˆ¢)RA@X®
à@öŸÝ‰Lš�ÔldÊªnÓtU÷
æpg\U´`ˆ"‚@˜  _‰°|ï1–]g“t�)>¹›\TEQXWà\�\U-‘M`ˆ" ˆ"	k×JV±û¸ŠÐS…@Q`«Á\pTŸÜŽª&²g1]ð>+�0AHV<†ñ6�ÀÂ}êŠâTQlD€¾ff×QXVÅÀ¸¸¬*ÞÙ]`�" € ‚@–ºRµˆÈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ
b�¢(
"œ�R®W\ Ó?®™°œUŒ¹—2§¢f¦mDŒ‘Ó…k��ñ6�ÀÂ}ç)Ñ"%\TEa\Wà\
â°©yŠk�@D×JV±"?�ˆˆ¨�RE@R¬‚€¹\pXÏéäL'c.g\UÀ¹š¨Ìí€]7$X¦úCâl�„ûÌ'T\‹±v.…ÏcvËÌ0HADõÒµŒ�à¦fffmkZÖµ­kZÓ33333â¢˜¤(™HK ¡W+‚¸*À¨òˆÈüY	ÅQXÎàV& �  �'Hˆ�¼tÜ‘p<üƒäl�„ûÖ*™}À �Á@TÝ»víÛ·mÛ·nÝ›6l½ï{ZÖµ¦ffgÄüæfffÖµï{ìÙ³nÝ»víÝ»víû÷ïßØìoìv;žÏg³Ùìö{=žÏg³Ùìö{=žÏg±Øìv;ŽÇcc±Øß¿~ýÛDâ#‚‚}ÀäéÈ/»~í»víÙ³eöl½ï{ZfffÂqPVÌàWm ˜" ˆ&¬DDDD	Š�Tl%"É¹Mrœ"0>FÁð8O½R®�šu¯[@#«])Xñ3k^û6íÛ»~þÇc³Ùív»]¾ßo·Üîw{½Þ÷wºAà;]žÏg³Ùìö»]¾ßp^÷{Ýîø¿CØ"<�²ö>ÇÙ{cì}�±ö>ÃØ!ì;ýþÿ {½Þî÷{½Îçs·Ûíö»]®Ïg±Øìö{=žÏg³Ùív{]®×kµÚív»}¾ßo·Ûíöû}¾Ðº¸ª*ŠÝ‚:#Þðò>Ì¼‘_ƒÞïw»Ýî÷;½Þè<€ó¶û}®×o´.Œô^‹ÎÎÐ)S*@˜÷@”È¨ÙFÂBª›”Ü@ò6�ÀÂ}V·“aÀB#á33kXM{‰ö
‚¦ÑWváXWÅÇ`\žÏh]®ßl^w;�ÞïwºAè= ôÎçs¹Übì]‹±v.…Ðº"ä\‹ŽÀ¯¼VÝ»nÝ›6lÙ³eï{Þöµí{ZÖµ¯{Þ÷¾Í›6lÙ³nÝ›vmÛ»níÛ·nß¿~ýû÷ïìv;÷
¢¦Ð\\À¸+’:]¾çwºAço·ÛîwAð?àÿ ¾nGÙ—’@Ï»…tW%rWEvè= ôÀv�È8÷mÛ²÷µ¦p@É¨ÝFÆLª&å7Päl�„úLc¬Eˆ
™wF~<€òÈ#ìG‘GØûaì=‡½Þî÷{�¾ßk³Øß»nÝ—´äVšõêÓ£¯×ëu�°6à€ ‚ZµjÓ§FŽ¿_­Öêõz½N§S©Óéôº}>ŸO§Óéôú}N§S©Ôêu:�N¯W©Ôêuz�N§S©Ôêu:‚Ó©Ôêuz�N¯S©Ôêõ:�N¯S©Ôêõ:½^§W«Õêuz�^¯W«Õëuz½Qj,Åˆ1€Û®d��¥*`Ž�"‘ˆl’€Hdõ•C Û7oìv{]Àz�ørÈ"�rAÉ$�rAÈ‡ Áð=€ìžÆãäQ# .“Äœ�áñ6�ÀÂ}ÅŒª‰(�‹ƒŽÙNMb˜¥§N�C¯Öëuº½N§S©Óéƒ dº].—K¥Òétº].—K§Óéôú}>ŸS©Ôêuz½^¯[­×ëõúý~¿_¯×ëõúý~¿_¯×ëõúý~¿_F�}4hÑ£F�4hÑ£F�4hÑ§N�téÓ§F�:4hÑ£F�:ú:ú4hÑ×ëõúý~¿_¯×ëuºÝn·[­Õêõz½^¯W«Ô33±3‰•§[¬-NÌÌA��HX‹‡G£Ñèôz=�G£Ñ=.—O§Ôêuºú4ê@ @Àp8(
 ¨+°Lr* vç'ÄØ>	ôH‘øPŠµ¿×úÿ _ëý¯õþ¿×ô:�G£Òétº}>ŸS©Ôêu:½^¯[­ÕëuºÝn·[­×ëõúú:ý~¿_¯×ëèÑ£F�4hÑ£F�4hÑ£F�4hÑ£F�4hÑ£F�4hÑ£F�:4hÓ§N�:téÑ£F�4hÑ£F�4hÑ£F�4hÑ£F�4hÑ£F�4uôhë‹akÔ�al�°µéõ¯[­ÖëuºÝn·[«Õêu:�NŸO§Òétz=‡C×úÿ _ëý¯ètz=.—O§Ôêõºý~¸¶324I"‡ÀØ>	ôœª DO­kZR”­b"+P%)JRµ¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JPKXˆˆŠÒ•¬DDDV”¥)JR”¥)JR”¥)JR”¥)JR”¥)]zéMzé®šéJR”¥kZÖµ¥)JR”¥)®”¥+ZÒ•¦½zéJRµ¥ >&Áð8O¦)@1Õ¶ŠåXÙ°cmû÷ïÞ‘B�ñ¢&PWìaWyU6ÞÆ8¯¿±¿~ò®S‡ñ†1”ß¼Ú+•`SfËÆ[c~ýà¹øÀàa>õEuSXUQr¹�Â:MU²‚¸,
ÛÊ²
�>.e	82Æ\®�à<MÉXÊ«¼Ü+oMdOãÅÎ*Š¤XU:år;„tšªepX·‘dL~Áð8O½`pR,QÁ0%¨c/‚P,T¥n	ÿ |pE“1)Š©DDÅ:
"u…P¨ ©•¸øÃã�R«pLIFêËå@° ![‚_`ø'Þrªˆ7Tn-ÌZ²I	€6ëuúÝ`nŠ$ãG"ˆªmŒ‰Û33ê¦Ý$Î™�ëu…°6ëºI”?‹8,–�o¥FâÐÌÅ¡$��èuºÝn°6+t’!~Áð8OÀk §¨R J‚ž­ZµjÖþ<J$ÖkÔ)uÁNšµêÕ«^°/ñ‚MZ�:
z…!@¨)êÕ«V­`_‰°|þÖl�„ÿ µ›Ààa?ífÁð8OûY°|þÖl�„ÿ µ›Àø/ý¬Ø>ÁDÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kXLa 6µ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖ°�˜ñüYÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌùœŠÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEcÀø( DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAƒÀø.ý¨Ø>	ÿ k6�ÀÂÚÍƒàp0Ÿö³`ø'‘=Àßí{|&Ö·ÙkÏýØ>	áC¬ð¯Òvî…s¹+¡pJ¸-·p(uLìÈ,
‚¢¦ÐTUÛ»náYG ðŽB›þ†l�„ðìï\•ãwÁÈ&<�ò*ò	r ô^‡ ^DybƒÕÜ9~“ôÞ{"rEäÈ{eì‡’ö!Èûää
ý.E»äU/ýØ>	ƒ�³�Lê.H¨™eY5N T ášÊ™î"&\Ë¦¯d:¦r�pWy1Žp0*ÉvG'ýØ>	áÑ³<Y¨Ì¬QbfJ°/F‚ÌŒUd³j°("á‡@ìÁ‘YªƒfÊ1?^<@d“�¡Y‹&­Y&Oú°|ÁÈv¢ÌÌG�/FBÐXô:=f£7LMÇ²d’jfFaëÎÉFM™u€0"À¬JÐíÀÙ$�ýØ>	æ¢ZS])JR”(€³M±IZk¡“äHJS])MzõÐþ†l�„ü¬|£þ¢l�„ÿ µ›Ààa?ífÁð>ÿ k6�ðQµ­kZÖµ­{ÚÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ¯kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµïkZÖµ­kZÖµ­kZÖµ¯{ZÖµ­kZÖµ­kZÖµ­kZÖ½íkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖp0ppÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖÀÁÁÀÈˆˆˆˆˆÁÀñà2"""""""""""""""""#ÌDDDDDDDDDD`ùˆˆˆˆˆˆˆˆˆˆˆˆˆÁó>À}ƒƒ��ûÁð¦ÇÌß�€Áð)Ÿˆày™Ÿªgõcà<Ï×3ø£�æmkNLý£��âm>fÖŸÀ3ió6´üfÖŸÕ€Áð�GDvšŸÀðc(ã¸W ¸-·nÝ»·n2ætWEXú‘ð"u; ã~íû·oÝ»p¬g àÝ¿vâŸï*¬w ûº› \ÎJä@ßPà`a…gý7…q¸V3žà;+�_vâŸìœôÞ}Â±Ü÷Ù\‚û·l2ý“;+°p.È/»p,
¿D>À|/yÉ3äªÀð¹Ÿ¼I>D9RržÈy?kíG”öžÐüšœš\›~E³‚�êÀañâÊ¿P9@å=¨ržÌy@å} rƒÊ%ìC“ö¾Ð92rM�ßpàxTÏ\q\^¥È"¯"Ÿ&^I.E²å¤p01Qä*ùE>L93r‡äMÈ“‘/"Ÿµ'$ÙÚfúÇÂÃÈ8;äyr~ÌÜ¢œ‰¹r$äC“ö¤ä“xáÙ¹ò)ò!ÉŸ“/&^OÚ$^A7è.Qýøð>rBø¼jL_€àxuœ©j'ÚUJàÊb¬
l!Œ'‹U8Ó§ú‘ð|äAÖ AÕT¢©Š ¨
 ®ÁT(˜É+Æ¨€ýÃ�á|~Š‚ÀSë	LU«Ç?¨p01|äÊ£}°Ê�Ä ûDE€·¬p</œ™ÜQ¶ÁT 'ØG‹�P‡ `žÀ;6"&3u˜	?D>À|Ð_ŒgÇ7Kà8+ÆGâÏÆv	18üIx‘ãŒOŒSŽ7b<s&äÔ€Ã´VãËÆ›�qÇ�N5^,¼Y¸ÏX<axÏX<a8Âñªq¥ã˜µH>áÀð¡^6;N¡¸áã�7ê½r\{&ä¤p01@tÔ8å8å8ïZn0¼g­4xÏXN1>9³TKõŽ…ÓPã•ã”ã}i¸Âqž´xÓqž±>1>9&j39N0xÃq…ã=hñ¥ããÜ4lÑ’Aú!ð>âbr¢ðH[Af£$Ù¨µê‹@hŒÛ§Ô¤Hõà<‚ß¬-•dzlÁ¹›u§S¦:�0kÖÝDÑ û‡À�Ò3PkÕêõ¯TZ© úG˜"dLÔ@iÕê‹N˜5åHëL2"×¨-§Wª-:ejÁG@·¢Ðuz€Ó®«T™¤Ÿè‡À`ø´p>1@ ˜ñú±ð!-#""#"<ÇàÆ#"#">±ÀÀùDFDGÞ>åñˆˆŒ� ôCà0ppfffffdDfffffffffffffffffffffffffffffdG ffffffffffffffffffdp0ffffffffffdp0fffffffffffffG fffffffffffffffffffffffffffffffDp0pp<LÌÌÌÌààdDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@„ DDDDDDDDDDDDDDDDDD@„DDDDDDDDDDD@„DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD``ààDDDDDD µ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­D 0|Ü\ ÿ ­›Àø´p¸ñãO·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÐP¦üs`øöŽþ<q9ÅM›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÍ›tÄ¿Žlà>ÑÂàÇŽ §JR”¥)JR”¥)JR”¥)JR”¥)J‰�Ø>À|¦~#…ÀùÚ~Sk|m?²ìÙ´§øÍ¿M°òŸÂ1ö�¿Ø`ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‚� Ø>À|Nc¸MÁMð.Š›·n…ÁŠ›÷mÌà]‘ÁTîÜe…ÉnÝ»~íÀ¨õ*
ë‹Þè=Ar‰Œ+Ö2€±MøfÅ•Qâ“4™@Xsï"€?yÅuÅê&0ª
ÜÊR›ë7é ùÁð>â°ºQªÈ›à8\Të:3Ñä=�Ÿ™ûw©®»£?+ñ~~@Ïû¨<AÊ®Lû¼w¦x›áä}�°ö~/Ó|Ýb�êÇ¦Q@9TbbbÆYd(¬bÃ>;J2Y±Žg.tŠ‹Unr~˜ôTU‚©
§]ÊJuŽ’‰�Ö8`ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€þA°|€øª’lšð/‡äÃœ†ƒƒ\D]‰8œ 	¤šäT9N)‰b˜¹H9Û¨ÄÉþ¥\|&L¬J@T«7A *ÅM4‹øgÇxèŒ“j
¤“A/‚€Ÿ€¦=SãÈˆ,W7E2®Dˆ—Ø89 üƒ`øñ8,Šh&_€ár"­•f~=>?¢n=&	 «Qdf*08¬
È¬ÈÙfÇbJÌ™‰øòñÄ`ŒÄìbÕêMúBÍ6M‘(¢‘S�2&Pü3bé*Í»Dˆ tA¸&ª}tS(}ç‹&ÍˆSÈ
2¤Býc‚ �là>BP Àp¸bŠb�XéÐbž‘D[õºú LÉ~¿\E¿\Ò(‹pnR~¤@ÉèÐŸ¨ñL]ELÄ@—YKø&&’“ÄF	@¿`€„DDDDDDDDDDDDDDDDD@~A°|€ûG�ÿ  ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ�É6�ðháp?ë†Áð>í.ýpØ>À}Á�ÿ \6�ÁÀ™™™™™™(€ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÉ‡ÄÌÌÌÌÏ€Àÿ ®€ÁÁÀˆˆˆˆˆˆ( DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAƒÀ}ÅÀúÙ°|€ûG�ÿ 
›víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»ví ßŽlà>ÑÂàÇŽ'0ŸfÍ›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÂ1/ã›Àø´p¸ñã�Ê$¥)JR”¥)JR”¥)JR”¥)JR”¥
DÀ¿Žlà>"6°Àp¸E¯�¯?·íü§ñŒ}  Âm?‚*müf~Ãa‚"""""""""""""""""
Ç6�ð£¤Ý&€áp0DTÝ»vàTê™Ñ‚û�kŠ»…c8E_výý€[qTýqÅÃŽóuÈ"&TªØêR›ñ‹ª£´&i: °çÞE ~ó™Ë ä9 ‰Œ©U¹•*¥7Ö8l�Ñòƒà|ÀqÀºQ²­ŒÂøPÎ] <ˆr ý'Š®«’=/#ìzW+<ï‹ÕÂ?D9äù_ûï?ë•Î@û˜*�ªgrC®tÔHøìW;#!ŠË„�$¢æ2Í” ýë�$°9ãUHU:îPrS¬t”L~±Ãd~ˆ ¿�là>ŽEØ´+`øÂøûaáE°‰\$ X�Ó3±±J)¢$ -ÌLÔ\¨?Lè°" ©\ ‚	b4ƒñ�`bDAPrŠ-Ñ#€9•?ÀpŠ@ß�IX®AÈ²i&�}c‚ _È6�ð]«fÈ—à8\T®š›�õÅãº³ê³Q‡­=6ˆ ³?^JÈ€ñÄãÊÇ¢vÇ¶f‰?\`p�˜·jB‰L�Pœ€‘ø†Ç	“fÄÈ‚ ESÉ$PûÔ+–¡Ç¶l@1L�Pœ…H¥úÇ#ô@ùÁð>âb™¢Rü�‚KF�
b‡\Íº¤DQÑ£N¡G@ êzåD¥ýx“QS øEÅÒTÀ>ÖR~	‰¨	ñ­>Áˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€Ç6�ðháp>È¥â1�là>ÑÂà×ƒà|Ú8\úá°|€ûƒþ¸lƒ€3333332Q™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™“ÜõÁð88 ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ0``ø¸¸ÿ [6�ðháp?ãÂaSnÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ ¡MøæÁð>í.üxâ¡„÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷¹˜—ñÍƒà|Ú8\øñÀäõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõÐ¤ ñÍƒà|ÄFàp€áp<ZÓòµ­öMíñµíúa8«´)¼Lå­ø¢m…?‰œ™üAÚm÷› _È6�ð«¤�¦€á|(u‘ÙWß¼w
çqÛ#�ûû€_x-°Vß¿yœ¢8ßØ÷ƒ;î&äŠ~�âáÁŸôž ¨çTLeˆ±Møc‹(wh.Q1Œ¹V@X‡ü!ÅUí&±•ÞE ~ÑÃ~� ¿�là>Žâ�œ48|áÁ�¬Weä=�¤égBÿ ¼w†vGÃÈ‡"<‡|¯ÅúO�ÒŽÌôy`wÂý'Âû¾Wæ~n@Ï»h;j¹ôjcì]@UºŒŽàÆY±Ì+¨Š¨›ðÍŽ�addñqYVê”Î*íÎ_Â6;*ÕETP9>áÃ~ˆ ¿�là>Žqè6#0€á|8‰(CaE#63œ>*)3�@¤Ô$8¶b¤\)“9-u	*eE™‚_¤8<IËQAºLÈ ºfj‚'Ê‰ üEÊºS *E["Þ®HD›ØèŠ"ØŠ”Ü¤û‡""""""""""""""""" 0? Ø>À|W"íQf‚að/…
»eX�<I»u[€0`ÈÌOÇ�+‘˜Ÿ�E‰ª¬½rl‰¸òñåeÒ3ñåãŠÀ¬ŠÍ£Q5ZŠLÑH K¬r� Bþ!ÊtH…Á1*ˆƒtÓ ü%vé¢t�Ó ûL �là>&(¢TJ_€áp0@H(èâÔˆjÑ§H$)hÐ	j… D)ŠZZtêÔ)
4êÖý(€“X&øP
ø´¯Æ´ ü1 ´ýÃ‘øæÁð>í.Êµÿ ªÀø´p¸õÃ`øöŽþ¸là>Áð\ÿ ­›Àø›ZÖµ­kZÖ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­k	¼ŽÙ8kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÒ Bµ­kZÖµ­+JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR”¥)JR•€û�ÿÄ 3   Qa!A1 0@"P`p2#R€��$Bq ÿÚ  ? ýêÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1�ÜcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ?qŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œcÿ ïÿ ‡ïø®þÊ„Ê•÷R"„E‰ô^âBDn!|¯?aB„!uBû.þÊ„/mÜBêŠý¯U…D¹2dÈŸ"|ˆBe}i
<‰rdÉ‘>E.DÐ„ÄÊú’yäÉ“"|‰ò+ˆLOâíóè(‰?"¹È®*	r'È˜’~DùFLŠâ¸®dW+ó7ö((
ä_"¸®+‘ÄDBú$+‰ò!
â¸®+Šâˆ‰?"‘DS“%Jý«RŠgmw~I>I>I\’\Žã’ò1•õ(¡G‘¶÷%.I2W$‰.F¹—‘±ôªô¨Š<�}É>I>FJä—#\�ò6>•õS£ô1úöùôC�GÝätò;Žã§’L’eW’‘—‘×ÉEäB§‘\WÅqWÈ§É_—¿±H±Å½ÉWÈ×&JrdÉ’œŠåy2&U©î>ï&JrW‘\È—"¸®dÉ“#rò9HÓêŠ¥ö­ýS)]Ç&÷½-£i)Ò«Ð¢ŽÚî9?#“êº´Ç±·J2«ÑÚŽÔ÷oqÉ�úZceJ2´ôÐ¨ßUèkÕ·ÏÙ�q©Clc*Pcp“GrL’%rK’o’k’}ÞII¢±_/cécrd›%D‘6L”I“©6I!÷Q%FMH’DªL’$Ñ4jd‰“d‰9a¸Ž£¨ê†’6ûNþŠ#µ1É½Ç'ë]ÈTB¹²ëDv¦97¸äý{‰u«é·J©�·¸äúÔ}w=té_f�¥W]¾~Åj6ÉX•F:ˆäÆ},m²Mø$¸$ÉX“%aÓÁ%!Å¢‘ù{ûÈî—ƒ¿±�Ø•‰WÀ×ûÏ¤ïLßÀ×«àixF×�¾aØv‡O°û¼4+£±FŠ/µo×c¶,Ýî9KÐßF†v³¶›‰¯"“+B‹¯lYäî“ô7Ñô£;D&w2‹¯j)Sº^Šô¡N�¬ØM�Ý6ôUû{ú6ûqWàVŠpmàÁ¿ƒ´ª;Ÿ�XK‚œ0+	p&¼
¾Î
/—¿²˜�˜…aXVà‹àŠàK‚¦þ&'ÁÁ
ž_\|±±À¬'Á
=BŸjß­
E•“*úW¥B½;GIù¤Š¤*t¢)VL«éR¾š#Cr;¨mÓb‘fì«ôTØIu ÐÜ‘ÝCn»{´~�¾Â„!
Â)ÑV„+
ÝQO™¿ÁB˜„½LBBõ¯¸o×b‰•›ê˜’z)
‚](Ï©J6é±H²²}jÊ!tEJu¤Ñ²6ëH³êfýjÑà¢õRGƒé]v7ø~!¿¸„!BD!Bè„!B_¸ï×ci[ëJCc¨ÑDUõúÑô£eÓcégÖú¤&ºmÕu¬Ñ²>•×égÔÍúÕ‰!$wtß¯Ôx6ë³÷·ë·âûTÆ1ŒcÆ1ŒcÆ1ŒcéR¿oß®Ì¬YI³~”eP˜„Š.µedŠEtØ¬XÔ™¿JtBJõ¬Ñ²(—MŠÅ�I”}hÍ†ú*z+4lŠEuÛÙ§¢¯Ñ·âûèÛ6ŸD/Jèº/e¢…~ß¿]ŠÅ�I”eJ2‚¨W¯t†ÜNØ¯GtXÓe$W£C]ßZ±ÊH¤QEÖ±cM�²}hú&„ºUô«¤Š$Q/M·_FßtBè¾À…Ò/áoìQeJ!E‡$\©QM-ÅA&""„$*‰‘"DW"DL¯J?¸oèî‹<º)Òƒ22½*Ç9"‰lQ/GtYZì8I”ö\än¶;b½ÑeT¶$Êu¡N•êç!¶�Ø¢žš?KôÕô¢ë·Ã ‘ErFâ¸®EòEòE‰‰üŠ	DW$n+‘¹‰òEò&'ïïëÛ¦ý6bÉA½É½O$¦�Ü›Gq¾FÇÚ4ÆÆÉThwä�Æ‡S¸ªé¹¿Û÷ôTïOaÅ·BP~¶ÉNG�ŽÄ½5ÓoaÁ²ž·694èv$Qz§=Ý	BLk®GÕÍŽMlv¥±D½5èÓö[)èÛàÐQ"¹äÈîJä®Jä—#\™äŒ¹ø´ED¹2;’|’%rWäÈŸ$_"‘_w^Ý7ëÝJMìj-O¢‘ô‘"Hu‰*’Ù*©"C±$J£T6é¿Ü7ô÷!M=†›Øœ‚QèÙ)›[«aA-„½I¡M1ªìJÁ(�d™)¿ml(¥°¢½I¡M=‡½87±(�d™)²Rkcµ-…ŠzjW£C^š•õmðy)ÈÝw%"r&É²V%bhš'Qä­7’Ü¯ÂHQB\�òJOÉ9‘6L�‰®	ÄœIÄk’¼Š\•÷7ö*Š2…P¤ˆê7±/Ó¦Â ˜Ÿ°¬Q›	ŠÂ°„+	p!	ð$ü
%J¿¸oé¨¤ˆÎ»¯ÒI?×ìMð6×Ò%JÄŒ‚‹ØRBšð']†Ÿ‚K‚v$ø$ø)MˆÂ›
(§­Iš{
UúF›¤IØ�‰¾	:}%)ô‘…6#Š{	•èú>©z¶÷¨$…îV´d¦ÉM’—|…aXV05Á(ðN”Üñ¸¤¼‰¯€�¢¼žwÙ9²Ràoƒ°¬+
Â±‚Qàœ(1§äR¦â’^ÞþÍF˜×DDKªè…Ñ]Pº¯C})öýýi‘—eÁÁ\�cÀ½¤È²2à‹à�ˆ®®ÄKÚ©pF\|ÿ ‰�cÀ—¸˜„!	zö÷’SÜm½ÉjH”ß‚¼	pEp$!V"øà¥h‰A’ƒ(Öâ’[•^õ¢�;Žl”ØßTúH®„!
Âd_|-68µ¹^E$Šû;û�£Æ1ŒcÆ1ŒcèÆ1ô¡O¼!1^òD/y
Â°¬/³ÐíLm½Ç©!É­„©°¢¼	{)ŠKÀ·ØpoaéÈ£[�É÷(v£Îãœ‡6xØQ^½šŠKÀš{5Øzlq~Nä·;—³¿¶˜„!B„!B„!Fú+µ3Èç#½¡$¶R[ûŠI•®Ãƒ$xÜîKÜíE*9Ès‘ãaE!/n¢’“ØqlzrQÜ—³¿êÊ&Q1ÎLs’(–ÂŠ)îÔRLó°á!ÆHª[•^ÕÚ˜äØç#ÆÂŠ^ú’eS—�ÆCI{û(]P¿NÑ±e[æU¡E!%_c¹2�ì8LÝÑ^×j<Žr;š;R(¾’oaE�¦ËØßØ ¢&ü‰Šäkä‹Ä+‘#qB]+úFˆ¢gt™Ý$Q"‰zW¡u^š¢©�²;dŠÅKÙ¢edÎùž
/Jô.•õ§RŒ£öwö(‡ÆŸ“&FŸ“"KÈ®dÉ‘\Mù;—‘ÔuJ¯Ò4‹<�Ó*ÑH¯J‰rA?ìBoû’òF�OûoûÔäî£ôÕ2’glÍ‘²ö(Š&wM•’)mèQ#§Éü�ÿ ‘	òA/$"ÿ ±	:wÔäªõÑôÛ×¿±³ä“$I’dâM•&É“DÑ7"N(c¨ê:#oÒ‹7efx(½+J/q©4™«'Z²p’«; ¾¡Æ.’5%7õ’krrhn+ÓX³ÉIž
Åzéû™VŠEzZ‹5"ÝhÔÕ„¼“t¬‡Ûý�I·FjEª³¹¤ä-X­Í½[ôÛ×¿±Z�Õ~¸Œx+Á¿ƒÃOÁD¶*¼¾ƒµ~�ØúYõ2³6FÞŠ&8ÆD§¬Å(TZ2ØkjŽkÉY‘ª!ô‹µzvg’“7Eb�½t‰ä¬Ï"½=ÈS« ¡±MGBqDÓ¡üžE§Ž©Tï„w*½;3sce1XV#aXVà�…aXVàŠàHLVý%ô³êgÖ�‘²ôU1Êž«;!AÉ’”‰N$ëàžˆÔâª$#éÙ•L}ãMI·¯éfìúÏÒ½QQdR’?ŸX®�{G§'±üGtå®†áoFÆÆý<z·ö×á[þ-ô³êgÖl�½)ÂBïe¤:¡$ª�"
.ƒZÊ„œ"l½3º¥eà£Eö>–nÏ¬ð}+ÓDvAŽshzº‰ÐQÑðGr’choYl8B&ËÕ¹¿M½[û4û-~Ï¿á{{[‹XÔÍ‘²ô·K¹’«Ø–¬–ÃQO´–œvF¦›f¦®Ä¥¨�D¥=5bE±XžF¦x>ŸM$ã"zºÞÚ:ºD«"JObZ�ÀÜâûOã„võïìïìÐ~Š"�ÈŸ"Ä$+‰ˆB_~�ÍÍŠ!'äO‘
âÄÄþnþ”'ë …ë^„„ÅðP…ÕzÐ…ÑtBô¯VÞÝPÛ{KÀãB‹Òµ?’»ËúŠ-}$a±ÅìUºD}Þ§O¤Ziz«Sr…±TÇ*�¿ÀâÑEé©ü¨]õ ´ÒØN"Õ®ÃrIõ/¤Ž•6ª£©Co^þÕ]†“I!¡™Ç_&L™eM½ï>�†“lhw2dw~Nê|Ýý…‘\Lˆ„DB\•~D×’"#r$nDHM•E+¸êd¯ÁHBeP�˜ŸD"½;EqBÄÊô ÆWÓ··QK�'àQõ"2!b1àBd‰OMzÓÚî|
%=I‹ª||\	{){ûN£76¨ÛÑ"D‰D‰Tc©Coz¾�Í‡F:²H‘"D‰Tj†ß3~»1ª�¸hqäÉ’œ™;¹~Jrd§&L™+Èß#”�ÜF:ŒeW¾Òlc©ô”7òdW2Uù;�††˜Æ1¡Ž£*‡Q²ƒ©T½}Á|t/cf¥_J3c¸Bƒtv)ÖžýJú6;Š¿0`§oÍß®Ìn£rD¢N£¡"l“†I“'RdêL�ê‡Ú6:Ž£_¨«ÓˆÙ$É!Ðc¯JÇ£lcèØÆ3n‰t«6^�¿ßÚBõ!
Â°¬+_…a
Â¾výjw
¾O|p4JOÀß8<ð:ø†×ƒŽ×à¢ºPQø+Ò†Çq�Œh’cCí¨ëÑŒuèêS«~­¿ßñ]ýª|	¯oÀ“ð$¼B|	ð%À…aXV…a.•ÈB˜¬P ˜„!BTÅêÛÚBB~”/B¸º$'ÑÔ�„ÊûIè½I	ôBõ$!?kÅwöQOÀvöhv£#¸©ä�ÈÜ�Åq\�År7Å'äú|�¯ÉWäTò+‘¹‘¸®Eò&¼”©¿“%}š&v—‘\�ÈÜ�ÈÜ�ÄùE’¼Šâ¸®FänFä_"kÉC%Z;½�ÿ ßð½½Ÿ#I�È¢y%rW$H’ä•É>I2D›Cp$™$ü’¹*y%rDŸ$®J¾II¡Ôu6öÕIw2q%I\w%rMù%.FâIHqä•ÉSÉ+’¹&IrI¿#”F1Ôt^Îÿ ŠïêWÅq_ç¡ì;{5LrLjL“$ÉX“à•	X•‰×Á"V%a§à}ƒ|¯‚K‚T$L•‰P’—�¤‡BUFŠ{1Ê£oÀÒðN¾	¢Hœ‰·à’ ûß‚UðIpJ„ªM²D‰)-‡Ú1ÔuEöwüWE:1ŒeY_s>ý
c+ïçàíí)"¯Á�>a.aXO�XK�XVàØRàV„+
Â\	¯¯�G�4&ü	?‰OeHV^ß�SÀëàÀ—‡P¤ü
Â°„+	p'À“ð$„Å_\öwüWC¨ÛÆ44Í„…Õz¨.ˆ¯¼ØÆŠ3n”Ÿ±B‚+ïííW¢UÑt^¥a^…ð•„È·àŒEèB¥{Ûþ+¿]�ú.ˆFæÃˆêU		²«ÑD5QÔlm•÷6}U
›"ˆí©¹R‹¥M½-£*mïmø†ÿ Šï×cr‚„}FÆÃRˆÐÜŠ¤m×aŽ£}Ý™¿Mºnl�†>á�Di�•FÝv*Th§¿·âþ+¿¡Ž#]*9³b¨ú�†Æ¤4—¢¨¯V™OsgÒ�76]*:�Hê4Ñ·¦½hýý¿ßñ]ý(4Æ:�”(W¦Â�“)é©�X¡Owq¡Ôl«6éQ		²…)ñöüCÅwôÕ}(üõ!{‹Û¨Æ2ž…ï/{oÄ7üqt§ÏLVOÝ¨BûNL™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2gÝÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&Lÿ ô¯&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2gÿ š÷�ŸÎ¶ýá·è*~þÙ·´¾2ä;Mü‰ò+Šâ¸®+ˆK‘7äîù‰B„!B„ÅðR˜„!HB�„!^Õ:Ô¯«oeD�|‰‹Ò„+ŠýÄ!1_¢B¨„…q\O‘>Šâ¸…Ñ
â¸¿Øj¤”‡®L™2dÉ^G)y*—ËíGo"¸Ÿ"¸©äWÅq\�Åq\W|‰ò)õ¤$$"¾Š©”~LŠän+‰¿%QÚQù+É^EA.E_$nFän+ŠB �Šúh1±�?^Þ½Š!Æ£îòV›ŠžD¹äWÅq\�ÈÜ�Åq\Uò+ŠäiäW*ü›rI¿#\�?"|ŠžEq\WÅq\�ÈÜ�ÅqIù;¿­MØÑ$M&É"H“r6_-Ñ’M“©2H‘&I$‰\“$H’d›’=†ª4ÆØÚôl:2]Ä¢I¹&I´7Ñ’©*Œj$‰&IrJä®J£•Ú4:�›z*UôT(Íý[zö>–y�ÐÒò;Žä®;Žã\’¹&ü’§’W$ù%RK’UòJžI>Fä‡Ú6Ê”D“%¥ä•|’|’|’\’¹+Žä«ä•ÉWÈÛ[�É~#äîL«Š¯°ëàv<ÃOÀÓ[©|¾ä97°ëàk‚K‚C§�Ø•‰X•‰X•‰X•‰&‡Š/b¨m�2‹ÑTw&U½‡O«à•‰Xi¡¨�Ômøàh}£m’±+D‰UPúFÇR…ª�*ý{zö*™Z�¸‘4L’$Id™"T$JÄ‰©2C¨ûF˜Ðä†ø$¸&‰“%BH’)%BI’RCI~%Q1O�XK�XV…ß–šˆØ�ˆØVŸlFÄlFÄlFÄl%À¢S×Q11!/Jb"È·à�ˆØHTà�„…A>Ø�…aXVEA1	zØÆP§§ob¨î©WàÁƒ\¯�Øv~
¯0`À¬*x0v¿^_	¯x0%À’ðmài½†ß‚¼Œ­lv¯ÄÐ½+í+ì¨B»^‰zööS„FÂ|	¿°ŸOÀ—°„+B°„%Ñ1B…a	¡K�WÀ—\
Â°—ì½ô+Kä/ØÛ~ðÛô*…öDWð=¿AÐ§L™*WÑ^ŒcÆ1ŒcÆ1ŒcÆ1Œ}(v”~Jò&W£Æ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œ}7õmúf4ØÆ1Ô~Š|Ú"ƒ¨ÓèšE ÛôQQŒcL§Øh�ÙVPq}E~ÿ ·èJ‰ˆBE>Á±³7eY±AÅ”+ðëö½¿K¤&'ð66gÔý.,hLOàv‰12¿jÛä!¢üëµfþJ‰ü™õzœG‰‰ûÔLuQ_µmíÐQä‹~E"¾º¢¸®+‘¹ÈŸ"›Ñtm�=½Ý™õzÚFŠ‰û›3ÉV4úU/´ííö¦87¸ÜüŽi^½†ªK¸’^F¹Êrw?'yUùµVUô â43"|‰•öv<ŸW®½z&WÚÙô«(Q•^„!åÓ¥};{[µ“rdûÐÒFÞº¢©�¸’DªMLŸr$Ò6üÛfU¿K$I^ÆÇ“êö¨8²‚kÙØØÝ•fÇkè¨$$dÉ“%E/“B¬ª^�½¾äÎöö;d�ÄŠ{Å_‚¼àv‡àìH¢üÛfV^ËC‹*Uzöé¿µ^Ž,¡TWØØÝôØ£M¼�’cc$I>•^Õ…qLO×DÍÙYzvöê'À—^ÍDÄ'Á±À¢Só]�%eíQ�4U/^ÌÜÜÛÚ¯GÒ«ØÙŸWMŠ�ê…ÒƒLª^ÕY&H�×J¯U+"¬ÛÓ·Ì_œmÒ¯Ûí}*½[3sson¥FŠ¯cf}^íJ¯j¬¯V‡V…W§fV]6^�¿JlÍÍýº2ŒªôìloïÒG‚©zü›û´eT½�ºV^š2�KÑDÊ•—M½;~“ØÙ•~í%ëØúŸ¿FQ•^­º}^õ%Ò¾½™»76ô¸²‚hBÜÍý{~“ØÙ•—»I½WÀ¤�—«cÉ¹·»FQ•^½�Íý5èâÆ‡ÑÈre:xôíú{Õ—¹±GÒ«Ó³7ø‘ãÕ³7fþýUêØÙ›³Uz1Œo¥:xôíòÆKà/Š…÷éVWÜ¬½ÝÊ4méÙŸW¿±GÓoNÆìÜÛÞ¤ºmé©³>§í¯ko‹B‚B¯‘1W„!	
â¸˜®!LWê�®+‰Šâè�„!1tHBÅqWÄ+Šâ�„!BB\‰ò&!\B+ï¿šêÆ˜êŠ¥è¯F1ôÛ¥_½I#aôØòoïìQ›£nŒ}677÷èúUtcé±³+/�ãÓ·Æ¢[|™Åq\WÄù;¹6;y2dÈ®dÉ¿“"|�ÆÃD“ä§"¸¤ü•Go&þL™*ü›	rdmùÞL™+É“&L™Äß’¨§%92+Šâ¸®duò;™2+Šâ¸›òw{‹çT¯F˜×¢ž­�Ù¿½ItÛ®Ï¦ÿ tl½;3�FQ•^��%eñvöè$&W×±³$Û%RQ$‰“&L›d˜ûI&ÉÔ™$H›%BD‘*�Ð¬JŽ¤‘(“D›i"jD‰2U‰*’l“h}¤•IÔ™"T$H‘4I£h“$ML™2d™&É"DÉ¢dÉTm/c~”ë^›ûøuéSržÖÌ«76÷húm×n››|
HÙzvgÔþ$méØò}_onˆqcr*½Š£¹ŠÆaØv‡a§àí>“»ƒ°ì;0;ÃOÀâlW¥x0:økbˆràvàÁAÐmŽÅ86;¸05ÁNÃ°ì;R
¢¼Ã±+±+Ã°ì;žaØvhqKÛuGÓKèþÅ³+/~ŒÝ]vé¹·À¤�—§foði/VÝ+/‹··T1©/f(‰dH"F$bE¢,�$Q,‹"EB ™$YÀ—¬$!O�XK¢b°¬!
Â°¬+	ðQø;EA	ðFÂ±°…aXV…aXVö7é^´é¿Ú«/�IuØÝ››|
K¦Þ�™Y|K¦Þ��Ù¹·ÄÛÛª;Š2‰{Ti�
â§‘\Mù*Š~LŠâ¸¤mÑ”ÅO"¸«äWÅq\îhªöP…ì!tLB^…êBº!{ˆ]wõ/±Qt«ø—£c…GÓoOÕð6(Ê4Uz67fæßor¢)ìU1î:’D¢Il“cíRH™6É:´u6$™"T$™$L‘&ÆÚ6_r~—écÇö
&U³so~Œ šFV_cstm×n•—Â£*—]��Ù¿ÅÛã÷~Ä¬JÃOÀÒC¯‚O‚V†¨>ÑÔc|Ã\ð;±*ø%aØqh¢üƒfV_	Å�t©Wð·(Ñ²ë³7fæßŒÙz6>¯�·Ç¨„'ÀŸ°—BboÀ¬FÂ\	
‚b°¬+
Â°¬+
Â°¬(”ü~‹¥eðkÑ¢C})ð©#n»3ssoƒIzveeñ¶ùKªõ¯Ëh™VU›|%ñ©/FÆï¦ßbŒ£EW¢²øÛ~’¬¾Ó±FPTB²ø”eRé·JËãmú2…DÅB¥_Úv(ÎÖS£�Ûøu;YA4mÒ¯ãmú5’LhmOíud†ÆúSâ8²…QÜÊ³o‹·èÚôcéOµT¯È¯F‰¿�·èô"ŸƒW­>6ßs ½kÙ]P¾ûOÊöøÔÅq\WÅq	
âbbˆ«äWäWÄúPWÅq\W�—"oÈŸ"hHIùäTäWÅq\WÅq
åD+Šâb…qBäWÅq\Uò'È…q\O‘>DþÍOE'ÛÜHE}Š&8±®GqÜÉ“»‘´45ÉWäª(†¥ätò;Žã|ŽTD‘(�r;™2drä“$˜×%Pè4Æ¹<ŽãOÈÒòdo‘Üw2W‘Ì“PâÇr¼›¼™2dÉ‘Ë‘ö�OÈî;Žã¯‘ÜÈß#¸×#¹Üü�Éz(!é¿ËhiŒuCtüŸon‡h›;½{Lm²D‘2dêN¨n$‰&J¨•	4J¤Ñ&L•G±X›¬‘4L™:“chh’d†â:’L‘&Hš'RdÉ"h›ct66%VI2Ui$M²dÉ’l“i-ÉTš&‰’&L™&I©*¡Ñuß«^›úiÒ¿¨¨ê1ÕüŸonˆi±÷¤mëªb|
Â°¬+	?˜«Òˆ¨Ÿ(ü
"HRBb°¬`¯
p`¯
~0`¯
p`Á^ü¼EQÜüø)ÁH�¶Wƒcm66¸àÁƒ0`Á¿ƒµø;R6é¿F1”é¿©üZ‰‹¥?'ÛÛÙ›±¹/b‚DH²$¢5"È‘ @ƒ"EDnE‘"E‘dYB˜„!ˆ„!
Â]S�„Ø—„%Ñ1
Â¬!V„½ô¯E×RüóFÞÝS˜ÔŽÔ½Š&8ÔiùäwÇq×ÉT4†¤S“&L™*Öåb8�r;™27Èëäm�Ôý�··Q1"žÅP÷%RD¨H‘$ÇBM©$L›'Bu%Qö’'RdÑ2L‘$ÐÕ¿_íñjTî*üàÁƒ8(Ux+Á�×Áƒx(üGw_ƒàÁNßØ|j‰ˆB„!V#a.!		ŠÂ…aXV‘O×›õÛ÷†ß¼6ýÛ¿]¿xmûÃoÞ|ZtHWÄ!	ôB}µAHWõ!Ð„!zP�„!	
â¯Ñ!	ô]¿KííÐHE}ŽÓµù2S‘\É’¥GäÈ©äK‘WÈ®Fâ¸®+Šâ¸ŸE*Ò¥QDQù+ÈŸ"¹Šâ¸®+Šâ¸—"¯’½2+Šâ¸®+•ä¢7òdW2dÉ’¼•eJ#%y<Šâ¸®*ùäR+úSonˆí*ü�ÉõllÇVIDª61�´i�“$™%É+’¹+’$¹|ŽEb4™.ñ´6‰T’$�×#¯‘¾I4J¤�ÇqÜ“~FÐÒä“ä•É\“cc ê4‰T•	$Hc è:�žGqÜ•É"U[ŽT*½{ô§Ø(S¥JþO··°ÕGÞ6—±T6ÇaØ’~	"IŒn#l•IŽÄ‰Ô‘"D‘:’Thä‰w!´6üp4H�I¡’$J„Û%Q¤:$Ù"D‰TtC©&‰2HvÆŠƒ êH’$É$I2J…õïÑŽ£¨úoé ÊüJ£QT¿'ÛÛØn£ïKØ¨˜¬'À¬+;x6~aXV…aXK�XV…_�˜¬$!XVàO�XK�XV…aXO�.‘TUøàK�XO�WÀ—kÁ�XV…a.auM	¿°¬+
Â°¬$ü
%¯~•ëN›üº�±�1¯ÉööêŽâ�ÁÚ‘OqXB]…Õ]…í!X]U„!¢b¬!ªUÕª„!^Îý„ºoòëÖ…?'ÛÛ¨˜‘OÜ[~k·ç{~mçó­¿xmûÃoÞ~ðÛ÷†ß�˜˜¯ÑuWÄ!zÅqB}($+‰‰ô¨��˜„!tBè®+ûkÒ�„&!\L]Uý‡î¿Ï¶ø»¨íc¯“"¸®+Šâ¸®+Šâ¸®+Šâ|•E
?&L™|›ù*�†›|”äWÄù6(ü™ÅqWÈ®%É“"¸®+Šâ¸˜„¹Åq>Es&D¹Å.ECµù2d¯%GäÈ®+Šâ¸Ÿ"‘_Ò{t_^ÆÌuc©$I2D™"H•É2L‘"H‘&Æâ2I’$1Ž£+ÕŒ’%W$ØÜF›$™"DªI!²U$‰$H•FÆ¢4ü’¹"W%H•I1ö’©*’ci$Ù$IrJä®I’lm¢«®ý)Ö¿¢6öèŽÞJËÉÜ½Š¦6ØÆø%_¬;Ä¬JÄ¬:x‡bC¨ÓE"66ü¯�®OF�Š˜‡bUðI4>Ñ²V%bD¬Id¬JÄ¬JÄ¬H•F‡ÚI¶I’±$J£ èI’¯�¡öŽMŽÃ¯�¡ö�¿¬JÄ¬JÄ¬;,¢ô±Œ}7õ1þ··DÉ&É9¡´�½uDY,‹"ˆ¢$YÁ"DŠ"E
‚�Ÿ°—°¬%ÁN•„ø„¸ÅaXV…aXV…aXV…a.
¢¯À¬+
ÂOÀ�˜Ÿ°—àV„„Ð›ð+
Â°¬%À—E:ïÒ¿¢ööê˜äØÔ¼){Bˆ“ò+‘¹yÅq\‰$X¨$Ä$Fâb�…oZ©[ÞOª·²¾ôïê_…ÊþO··QHIøJzöcU$™"H•É2D‰C¸Ûò9D“d‘$J¾II¡µøíê:�þO·Æª;ªI¿\±*’°ìH‘$‰&J£qàtðH•Fš(¿ªGRŸ“íñª)	ð+
Â°¬+
Â°©àÀÓðQVàUð(ðSñê›”ô!ªº¡BºWá!zP…ÕB„T¯¾„.«Ð„!B*WÜÛå!XBDÄÄ˜—¡~MCqB(U•(Št^Š•øT(Ä!¥
	²¦Å=9*Wß¡NˆBë^”è½5÷vý°ÐÓÇq´1×¦ÃMŒcÇQ¿ƒ·F˜ÐÐî66†4:•6F1Œu¿AÔhhcfÃ¯MŠ£Æ:�Ðª÷6ýT6:’$J£ è4ÆŠ¡¶1ŒcF¾PÛd‰GA´1¦4l61ØcÆŠ/z©Ž£$1Žƒ¨Ñ°Øê1Œc¨ÑEîmú6¥Ec‚†Ý)Ò¾ªøU*W�XÁFQ0S¥}T)ïÔ¯¢�iÒ¾º{»~�Bê…óWD%èBùëãíûÃoœ½h_%|¥ú_oŽ¢+‰ˆBäLB�®+‰ò&!BºPWÄù„!BB¸®+Šâ¸˜„¹Äù®!\B„!1tBD…q>DÄ+‹Ôý/ÒÆ1�óí½ÕìP¢gmO«É“&NîGA¦;™Äù*†Šr;ŽæL™2dÉ’¯ÉÜ:L’ä¢ò+™År¯ÉT44üŽã|Žã¨ÇA×ÈîS“&L™)È®W“&L•äªòQ~L•~Nä5Q§äw2+Šå_“»ÕAô¥Š²¾ÆÌn¤”‰¡.âNƒqY$ID†ÐèÉT™$I$H“$I¨Ý
ÄÜd‘4N¤É“$ÚˆÇVHcÇÚ:Œ’'RdÉ¢h�I²D‰"U%BT$I’ªCh•I"H’$I´:#n»ô úWä¡B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!à:©*�Øªc‘�®¾é+]ŒÃ±$Æ‘TUø05Àì;Ã°ì;ÃOÀâ}%Lào�×Àì;ÃOÁD66üÃ\ž_*‡_°ß¯�®àuð5Áƒ°Óð4†ÐÛð;à¢*Šð;Ã°ì4ÖÇjE=-Œc^¶1ûïò×ïT©BžÅDÄ!K¢bb°¬+	B°¬+
Â°¬!	ð+	tB˜¬+
Â°—Bb°¬+V˜¬+
Â\B|
ÂB¬+		ŠÂ˜˜¬+
ÂE=h_ü_ü.‰ïÿ e�…ï!}ù_†¡ÞBE÷Ú
5|Š\‰¡¢„$%È™Rˆí|Š\‰¡QäWäLBê�Šý¶ˆQäUò)	‹Ò„$$'Ò‚¨˜…Ñ]„!BBè„!]RØ¨(ò&üŠBè„!BB¸ŸJ
"¸Ÿ"¸Ÿ"b|‰ˆ]RŸÜh˜Óc¯‘‰/"¸Ÿ"\Šâ¸®+›y(ü•~E#¹U$¤5Ñ%äW2:ùÆùè®&Ê¢‹­Jý²‰�6:”äIyÅO"\Šâ¸®+ôßÉ^NäQ—‘.Eq\WÅr7Åq\�ÈÜO‘\W®+Šâ¯‘\WeQDS¥JüýŽÔ:Ž¥¹äTò%ÉŠâ¸¯Ò�É^DÑDÆÛ&J#\ôTò+ôUò*yäMù�’é¹S»î1Õ”gh×$«ä•<Žä«ä“ä‘&:$˜êŽè›2’(48¢W%2L�â49}£HuÊ¥öÊ¡Õ�¬íÉWÈéä•É\“ä‘&:©$ÆV#Rd‰$¹$ß’W%rO’K’UòJžI\w%rUò:l’$ù$É"Wh¬Q°ëÑ•KçìU1ÔígjÉWÉ*y%_$®IòH“	wLmyGt„â$Š1¡’cHjCh’%Üw$l:Œu+÷™ç¤‰¤’$J¤˜èQ•GsèÔ‘ô¢¨}ÌcHd›¡·F�ê4ÏÅPê:Œ¢_lØóÒD›$‰¨ØÒ(Ue˜ûQ¶1�2¨mŽ„‡QÐh�è:’$4†ÆØè41©!ö¡¸›ŒeÏØØÜd™*Œ’DªJ£cE
¡¶Phn#„Š#¹±’O¥Q.á¡ÐjC¢+ÔuJ/¸UÔmøàÀ×c86ð;ÆeÜŠ¿ð:ø)ÁNàÀÓð4Ê"¨©¹BŸlª¨Ûð7Áƒ§�Øv)Á·�§àv0`£*Š¿:`ÀÔ¼ð`¢ðUx|x0;ž_p7ÁNŠð`i­ŽÔUéBŸ`ªlmø+Áƒ_±N?|0P¬GWDHl¯
p5ÁUà¯8�ü¦ÅMÊ¿p¨˜¬EpFÄHØ‹àˆ�„Ä$!t¨˜„'Á	p!B|	pS¢b(Sí•ˆ®¾b6#b6˜„…a!B¤¼	¿\	p!1XB|
Äl"6Ÿ\Bb|	p%Ñ1û|±|
Â°¬Ep$!XK�.‰LVàB…a.!XK�.¨_rB„.ˆHBº¡_~B¡BÀ…ÕB˜„„!?»¡ªº!Bàj„ö4ÿ äˆÉþÄu£�¢ˆiòB/ûoûÔ§ÔFhI‡$!_¨…±	?ìCS‘I}ñDŒ94Ó§r!7äS](…¦Bûÿ ’!ÿ $CþD&ÿ ±¯$b¼�ƒþÄ§q¯"Š �*GS‘4F�N�Äfü�ËîÊ$!É¦Ÿö#©È¤…BšiÓ¸Ž¥7D`™?ìiÿ È‡üˆIÿ b:œ�Ëð#øá"Zr—ÔjIí#YòÍfÖæ¤ÜjÇØª-(½ÇÜÒ‘«7åšÑ~Y.åYÊ–âŽ�jrî'9:HÖ|šºmVGsŠr¬VåWÞ»P´“Üì­$>ÿ ìKVQú‡©²¨¢%èjÆOvk]š«“R/ûÔ’¬�¡:‹M?¨jN’%=D»‡«ê8i½ÇV»‡¨×Ô%§Z‹N«¸”õ(¤OQ¡¸¯ºö¦GI=ÎÆé"NØz®?Q]4ÈéEîv·Is§põœ~£»J£ÒŒ·&¦×q«/5®ÍW%»'>Ú�Å~³)	–¬•GªÑToàìkcøt‡åRäjù¢«;Q©§¨�H¨’Ž‹ß‚nrU%¯4WN´�IÃY*’œ`V+ïN1dÒ•i¹Šd¿’#zq6*˜õSØ”äþ’_ñ”^Ä¡¨É¹"pÑ5eSV¬šÕCzqÑd–»ß“µ­ÅìKZm&jkj'F8F.‡lWÝ6`ÍJÊ†´Û5#¨KºZÿ á©õPÖ›‘©BNP?Ð†£"ZšÌz‰)%±ü}§lWà?IôLÿ s#qŠ4»–èÒ’DV‹£Ô–ä^¢©§#NF–¤Ñ
*ÒcZ’#¥5SIiyD5+AÏY<Ž1�H¯½9E�U½Š&ûE¥7±MXŸë‰ô•ˆKƒNnˆÓ„d-]fWµÐoOÀåWÚ-$ö;5ÒÉôDÿ K;u˜´¹Õ;‡þN¢Q}¢ÓŠØ¢û¦ÃœXõ[Øí‹}¢ÒÔe'ÏE,U½ŽÈÉö‹OQ”œJŽ�¤%­ÿ ¤#i£IÉn�9¥F„×à?HÜ&MêËcVÌÖŒy5tdI4œ�äÐ{ð7©"Nf¬¢¨kBäôµX¤¢ªBz,‡t‰GScYGË5%-È½HÔ‡dEÚ¾ô¤ˆË‚1Ó–ÂZ’?Ýýq>ž©!iÂ[�ò’¨õõ�”"èG·Á±©þGþŸDOôH¦¬‰E“”‘(T‡dEEì!_kR"êèF:rØKYŸìˆ¥¥-x#9	j³ë‰_ñÿ ðrR5?•ìkvøf¾šäÔÑÔUc“Šr?’ªô¡_xÙŠQ‘	êx é±§àŽ“•	CU"SÑÿ Á¹³¿UžšØ„tÞÇðêºŒ–ãŽ‡‘êMªŸÿ ¢Kbºuí?†®ƒÐÕHîPU; º$!2ˆ§D„ÊýËýr?Ù#ýñ?×$„!B,íSU%¯­ÿ §s‹ ´áŠ#èfÓ?ü�ý>ˆŸè�å«"Z�Á8oAÿ �©IETSŠ+Ò‚($+ˆB¸¤U}«f®Gû™þÈŸë‰ôŸë™þÙ\Jè"3©	jx4ÜVÄ#¦ö?‡QÐ’ÕŽã–œMŠE�ºU•û¾ÌíR5M5J³IéyD5¨=MbRÑð8·°´u•M8éª³JZmTZº®„›DÖ�þZÎ· œjh&¥A½}®N°ñ£aÄu�è4Æ1¶U}Çcègû$¹ºQ’òFR§p§ÔPÓ–ãœäªK_YmÉÛº
]>‰Hÿ ò?ôÿ \Oô3»Y‹U­…üUí%þ6£Ø–”âª-HÇsº=;QFw1�¿#mKí[3ýr?ÚÏöDÿ \O¤ú&¶G×šÿ áÙR1ÔÝš]«sJZmTZºŽ„ž¬G8ŸIÚ™FwHÓGAÔm}Ú¨s„�XNM&khË“YÆ•f¯ù%)Å¸”ÒJ‡r•"jhj6‘­¢©Vjêªšú›¡¥Ú7¢Õ	ÆmöšŸãÈÔŒ)Vjëššº©Ñ�MEÐí‚6pÒ6F1÷#o¸l9iÈ”µ%DN:«bPÑF¤S£f¯ò’zhŸd�Mmg³ò>è·iÂ;]+9©“þŽ0‰)i2o]íÈÓ�P§£ã�ÖMDÔÐÖðü“�jc”°Ú%ÜI‰¸ÐÉT•Fš6_jØrÓ‘9j½‰GR5CZq>‘ËNDž«Ø”g¡ÿ 
Û‚RŒ¨�]-Fkirkj*UšŸäjxcN/´þ8"ˆmî$�¤u}fÆßvª¤]QZý#ît‰?øŽª±#¥O¤ŒcJÔMPSoé$›¤I7ýE«:Q_IEªÔ¯Ò5'H“ÿ ‹{ÄŒ}¤t’Øí]JE_Z4výËù"Ïå“}§ñÎ½§fšT?–»:•í; =TÕ
êW´Z4úNÄº÷&5v?Ù^Óø¢¶;àÕíJöŸÂ×Ò.ÊPŽªHœëÚ=)-‡£c¸MŠ&Åz6`ÁÚÊ/µl,Yü“o´þ)'ÚQ±ü‘gòM¾Óøš}§l#«°¦ßÒI?êM¿ê$ÕbGE-…ºw	±DØ¨Æ4Ê/¼TŒˆK„i×ú¢àŒz&F|mÿ Ti§ýQp(‰‘‘	p�?øšqàŒ8õTLBûšdeÁ¿HŒˆ'Z	"2à�…�j)¯‚1D[ðF<	!H„¸!UD!H§ÚÔˆÉø#àItR#'àŒx#>K„i®p(úTÄ!.
}ét^Úý6…ú?Ô)	„!B„!B„!B„!B„!B„!B„!B„!B„!B„DB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„+‰ô¢;*v¿&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2W“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2Uù;Ê£fI¦jw3TÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5MSTÕ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5CPÔ5\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5rjäÕÉ«“W&®M\š¹5J’ØÙGx¤ü±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬$ü
%T!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â°¬+
Â„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bÿ  ˆBàKÐ…øRüB‚ˆ«äRäO¢¡	¸Šõ]P½i	•û….Eq\Wä‰Š\•üa"5ò'Ñz”Eq>Dý)B}”jIHwÐWÅr¬ª;y7ò9?%ŠâbB#q\WÅq\�Ä%È›ò*yŠ¢‹­Jý§µ2�ª’l™*©&†¹|�µ¹TQ7ò&Wð
#°ú¼‰¯"")(‡Ž¾F¹âÅq)É^z!
än)	”ëR¿qª6e$v�KÉ&Æ�×#|ŽLúG’s6;Pëäw2;�r5É‘¾Fù$¹É\“D˜Óärh¬JTuJ£o´R#”Žä"‰›”‰N�ÉµC¯J´U~H³ÈûÆŠrdo’WhîGÒnÍÆ‰"CKÈî7ÈÚ%Q�ã\Žä›ò6ÊÅFý*U}ËfnÇÑ±Ôi•GQöU$¤8¢L“c âJD’%Rd˜ÆI±Ðk£r+:1Ôu±·Ú*™I
(Lª>£é%Q©#éQŽ¦Ëð¥ŽRdªJ$‘&5ÓêFÈ¬XÛc“</£$HleÆ:lm1ö¡ÐuÍ—Üv;“*ÇaØo�Øv$ÇQ¦¶)¸À×|¾
/ãln>ß�Øixào�Ø¢ð;°ì;IlQFý(Sí=ÉŽ¤¢É6†ânlw?×à¢*Œt¡O¿ì9#¹ø0S�Øk�Äu$ÚCq;˜«àT0;Ã°ì;Ã°ì5Àß±EàÜ¢*�ÍÊû•DÄøàK�XVˆ®¸„øàV^
¿8<
Â°¬'À¬%À„ø#aXVx]Š}ª¢�›ð%À’„Ä"�OÀj!	ðFÂ§‚¼ËÁNÔº&$*
B°¬'À¬+
Â°¬'À¬%À„S¢b)÷T!z…è]—D!]WT.¨_nB¡Bõ!]P„/»!tLR…‚º¡]D!u]P¾è‘riÇ“OþH„¹DgÈšDaÉ¿ìi·ýˆO‘KÒ¾ÿ AD„y ßö#>J¡"0äÓ�&›Ø„ùº¨‘�&šäÓ¹§ÿ "Ó¸Œ—’1^HG“OþFŸüˆ>QòWî±�¿$$ü‘˜ŸátBÒ‹ÜZu]Äœ�$j\’j²¥pµ#Z‘Ó‹ÜZuú‰6é"iÿ b²IÈŽ²_P¦¿QDtSúŽÉ5ÞwN�çóvîV	‘Ò‹Üìn’&å´‰¦¾¢­VBÕKs¹d´ÛÜšÙ“ÿ ‘%æc”’ï?’)Ôþ8=Ç5ÜMÿ ûÿ ‘9I.âZ´ÜîŠû¢„Yþ£¶Oë;æ—yüÊ;�É~H±éÂ[“z’U'þD‰öV„ÿ Ç‘8êEToInvB[“ÕÔi6jë³V­©þ<ÇX§#ù!R«ð!iÆ[�¹%#Vr{³Qj*²O°íÑ;©#S_Qªšš»“Š©«§4j}5‚6¢ÍI·±«_Õ‚ðÍM&ÍGª·dÿ �Ž›ÜœõZ©©¨�Fj)"PíŠûšŠœ%¹)9$ÍYIîj*ÜrŒ
Á~³$á2KY�Œ•Máà„¤èIë"PÑCJJ£××ÿ Ò3ŒkEý'ðÎ[OY*òwB%b¿P‹(¤ªKü�F7´©NÓ³Cÿ ç%QOV¬ÒŒ¢Ñ§9¢+¶…"º)"àÓÿ ‰¥§	lˆ÷É#¿U:Ç¢�8;c!6æ’Š4phI¯›J‚¢û•§¹ý’dÿ È›�hvk%“hë_…ª1J#È–”öf§e*ÉjÌŒ§(èáõHî×Bþ8ø˜“™ÛþGþ�Âb¿ íBÓ„·®£U?šUhŒ4¼
:ÿ úS´¦ƒß�ÿ $‡Þj8*TÖ‰(ÍU‘ŸnâœWT(EŠ1š¨õõ¿ôîqt;4<p?¨šÕfªŠ5 ONj¬þNß¨Z‘_rì‹#-Ç¯ªÕOä£hŽž›ØKü�ý }ð¾Ø±B2Üþ]I"Zò[ì¯i-:£ø¦•Ný<¶%®…üpñ1>ò¿äèû`}+¢J	EJýÛ¶qSÜïÖfœbªCøš¨ž³y\wô<ð7©!ÏUÉèvé·Ú=BJqU;¡PE´á-Ç©9*�_Y1BtÒ£�¥©àN>?¤z¬’œUNý8›tB}„„!TOì½��Óš©ß­¹§"T_ÏZòEvn)Â;›L¯àôƒ$”‡-w[šrí©¡ü^¦»¨8ëírsÓDœ[ ôuÿ ôŒc²Âþ¡jÊTcÔÖ[r8ÂŠ(ŽÖU•CIŽ£FÍ¾ìÞ›5$æjÇQººq5{Y'¨Oº$õ4GVè-=eSIiÄÑþ&FZ®ƒþHŸÇ§��$u9`ÝNÕ5R_äkéÜâè-=5±H1E³Mj.(Òzr#-WBOV#Zq)‚Lî6;Fåä¬F‡qÜmù;Š¯±ìÆôäjJr5a?¶œMV�jIêR‰'�´ueWàÛÑdµ¨‰éj·B_ã´KøéRZí“ÕÕNƒZj¨rÓI=VèjhQUš“…*ÍOòu	9EöŸÇìQ©.á¤lnlU”§ÝûâÏæoé+'ô/êJI5«NÒNQúF´–Ãqt‰?ñõ[¡=J“Ô�*j‘¨IQÐ–†‘©JTœéV5¤ÉÎrDµu“§'dc°£7Oê¡«£¨ji¯$õcJšŸäjN/´ì„J!Ñ“î$>Ñî>áöŒ•IîÆßcØþH³ù›úMßÐ5êJ	ý$ÿ —Á*Â¨zzqØi£¯áDu¢öÜš‰©	:EšÖ5&Õb(´ÜHéÅ*ÔƒTÜš‰©:DÕoú�¹V$tT~‘B+¥DÄ™D6:�¥>ïR2àƒàƒOéDgô•Õ¯`´šúHÆ	PŽ¬^Çs“Q5"Ý"ÍY?ê>åX‹J+é è‰½O´ÒØ”´Ú%«¨ßiÙ$ûE¥ªGrbÕOa¹6¢jÅºDÕ“þ£îMÄŽŠ_H ºwgiTw1¤66Æ4Ç_d©piØƒ‹úQDéýµì•>‘B(ªJ2Ÿ„)ŸœŸõ4ÿ âiÅÿ R¥¢„ÑN9?êi§ýHBŸJ#ãÖŸD%÷Å2ø#
!IŸœŸõ4Óþ¤!Â#)"Ö„aÀ¤ˆ7à„8WU$CR»mÿ SM?êB"1)Õ¢b˜„!/´TŒë±
ø#
)øJ°!zº¾ú½BUÕz�„/¼¯BýƒB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„/EŒŠâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸„+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+‰ò)]*“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j†¡¨j•%±·Nâ¦?Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒéƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`Áƒ0`£ðv]P„!B„!B„!B„!B„!B„!B„!B„!B„!B„.ŠÂ¿B¬!B„!B„!B„!B„!B„!B„!B„!B„!B„!ˆ„¿îþß¼6öè!¥pmíQ¬Ï¢¬ªôWöÞÞÕY*�ŒcýÁ·µTÆØê41¡Ô¢ý¿·µQ1XVŠý¿·¶¿ríûÃoÞ~ðÛ÷†ß¼6üÙBéªüÃoÄ—D.«Ô®!\WÅq\B"!¸®+‘ÈÝ
â¹Šâ¸®+Šâ¸®+Šâ¸®+Šâ|‰‰þ]·À¯Þh$"7Åq\WÅq\WÄ+Šâ¸®+ŠæLôÉ“&LŒwÇqÜ‘+’¹+’$H‘2DÉ“&L™2DÉ“&‰ÄhÈŸ"e+ÛÚ¡A\ÏZ•_v¢D¹|’%rD‰“&L™2dÉ“&L™2dÉ’$H‘"D‰c$1ôcö„!BèÑ(’ˆ×"¸˜Ÿå;{TLiŒcê†Ñ·ZýÅ!D¯$¦É1�£ö„!V„!XV„!B„!B„!ØLB}$‰Ä”z'È˜ŸäÛ{ULm±ŒcCª(½,cÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcúPQBUÜrd¦ú$!¢­ÑtB…ö¤ÄÄ2Q'K¢|‰‰úÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œcö6öª)p+VéBŸrHQ<ª’›˜�—ßSèÑ(’ˆÑ‘11?È6÷„/¹PQB\ŽM’›è—à(LO¤‘(’ˆî'ÈŸ"�mø‘’Sc��—à©‰‰ô”IÄ’2'È˜˜¿ÛïÔD«¸äJl¨‘OÂSèÑ(“ˆÑ‘>Dÿ Ûï©	t”ØäÊ	ü1	‰˜'QäLOŸÅ¶ûâBC‘)²´)øŠé(“‰(Žâ|‰‰þ'·Þ¨(–d¦Ç&PKñEÑ111¢Q$†Œ‰ò&Wñ¾ò�—#‘)²¢E?¨˜ŸF‰D”FŒ‰‰þ·ÞL’›%'Ñ/Çª&'ÒHœIDb¸Ÿ"|‹ð­¾íA!ºÑ’›ä(LLO�’‰8’FDùá{¨Bû-¢‹2Sl”ßD¿'LLV%Q2'ÈŸàÛ{j"ôU•ûBCd¦ÆÄ„…ùJº8’‰(�	ò&'øÞÕluÇTU/°$(ô”™)²‚E?.Bb}%q%,ÈŸ"|‰þ·µT6Ù*�c©D�ºÓå¤%Q²ScbB_™¦&+‰8’FDÄÄþû·µQHV0`ÁFSæ¡"‹É)2S}æÉ‰‰ôh”IDhWäL_zÛíÉòJllJ‚_�¦&'ÇI"q%"|‰‹ï}±"œ’“%7Ñ"ŸŸ¦&&4J$¢4'È˜ŸÝ¶ûUŠ’›ý„ÄúJ$¢4&&'÷M¾ÑD(”™)¾‰ý˜ŸID”×—Ñ1?¹möz	"¤¦Ç&$%ú-1>’‰(1£"bpÛìÉ	r92S}E?G&'Ñ¢Pd£Ñ>DÅöÝ¾ÉAD©)±±!/ÒI‰‰�‰(ôLOŸ¶mö*		L”ßD„¿J¦&W�¢Q%"|‰ý«o±$d”Øä$%úi1>’‰(ŒO‘?´móè$$9›è�—éÔÄúJ$¢Æ„ÄÄþË··AÄU•÷P—IMŽE¿P¦'ÒQ%¡11?±ííÐiŒcJ¯q!!È”ÙQ/Ô©‰ô”I@k¢baÛÚÙŽ£lcêQu§ª‚FIM’“(%ø:D.ˆBÄ!W„!B„!~˜ŸGP$Œ‰‰üý½ª¢¦éFSÙHHl”ÙQ!/´!ªÄ!W„!\B„!tBö˜ÇqŒcF1Œ‘"D‰$IuB…øbb%Q2&&/‚„!!õmî«
Â·´£ÒSc“)À‘O°¡B„/KÆ1ŒcîH‘"D‰$H�ÆH‘"D‰\cÆ1õ~Þ:±¢H’D!_€¦&&4J£Ñ12¾êBF6I±ú¶ù	’›*$%ò�„!B¡Œ‘&I’$1ŒcÆ1�ÛB„!B„!¢º!{hBV‰"H’ê„Ä&/¿¡1>‰E’�DÄý+¥.­’d™&7Öž­¾-—IMŽO¢_B„!uc!’d™&1�Ð„!B°„.ˆBû‚º´ID�×TÄÄ/¿&&P”I@ÈŸ$X„.Œ“$É1±õBövø”;FÙ)±±!/uB„/C"D™&H�ÇéB„/Á…Õ�D�×T!1}ídYAÅ’‹äo‘Èrê„!{›|J&I¶JO¢E=B„!^†1’$É$1ú„!ñ$!td‘$I¢„/·¡BZŽC�É.	Å�‹"/soNß¢lHHB„!zÉ$H�Æ?B„!~<„.­D‘$>ˆB¾Ò„!£$É2Ll}¬'À¬8’€ÑQ1?ooNß(ŠÅs&LŒlllcT!B„/ÂD.‹ª„/BUé^„!LBèÐÑ$ItB…ö!!ul“$É�¢…èLLÀâJ�DÄýí¾%$N¤Éú¡B„!Bº!Bè„!B„!Ð…î!u]„!B„!ˆ„!ˆ„+ˆBÐ…q\WÅq\WÅqtÉž™è®!B¹“"¹‘
â…q¢ˆ²$Hˆ ÐÐ×%9Äù7„!B„!B­BF6I’d˜ú`B¶˜˜ŸD¢ÉDÈ˜™_oo‰Tw½Æ†1Œc$2C$Hd‰�Æ>Žãë“&EÑ\W®Fâ¹‘¹‘¹‘¹‘¹‘¹"FäEr7#r7#r7#r7#r7ÈÜWÅq\WÅq\È®dÉ“&L™2dÉ“&L™3Ó&L™2dw2dÉ“&zg«¹“&Lôw3Ó&L™2dÉ“&L™2dW…Ñ�r;™)ÉNEq>Eq\WÅq\WÅq\WÅq\W#r7#r7#r/‘\ŠäW+ÉQ±¾¨B„/}111¢Qd£Ñ1?ko}Òˆ�"D‰$H‘ D�$H‘"D‰$Eq\W®#&L™ÇqÜw%rW%rW%rW'rW%rW%rW%qÜwÇrW%rW%rW%rW%rw'rdÉ“&L™3RäÉÜ™2dÉ“¹2d‰’$H‘"D‰$H‘"D‰"D‰$Hd‰$L‘"D‰c+’$Jä®Jä‰ÉÆ1Œh‘"dÉãÇqÜwÇqŒwÇqÜwÇq®Gq¾Fùäo“&Er$nFänFänFänBänFänFänFän!B…Õ11>’‰(ôN‚bõíïPI‰²½{QÚ$ü™2dÉ“&GqÜwÇqÜw+’$H‘"D‰$I’$H‘"D‰$H‘!’$H‘"D‰$H‘!Œd†Hcì;cƒ0`ÁƒcqéÇGéÁ�F=êÆ1ŒcÌcÆ1Œc!’$JÄ¬H‘"D‰$Hv†¸$‰±"hš$I’d‰$‰"dÙ2dÉ“DÉ$‰"dÉ“&L�ÉÜ�É\•É\•ÇqÜw2dÉ‘\WÅq\W„E‘dX‡Ä§"�¥êÛÝØ¢GR¨Û£¡*³R¬Ô5CS&¡¨j–f¡¨L™2v$NÄìJÄ¬JÄ¬JÄ¬;Ã°ì;Ã°ì;0`ÁƒtÁƒ0`Áƒõ`VŒ0`Áƒc…c
Æ…aXVŒ0+„.˜0!XÁƒaXF:c®aXÀ¬cª°¬+
Æ0+
Â°¬!XV0+
Â°¬!XV…aXV…a>
ð`v0`ÁƒøŒ0`Áƒ‡aØv‡aØ•‰X•‰Ø�‰Ø™3RÌÔ³5CPÔ5CP™2dÉ’$HeJŒ”Y$Æý[{»¦:Ž£HÛ§r¸àV…aX�…b6#aX�ˆØ�ˆØV…aXV…aXV…aXV…aXÀ…nˆ]0`Áƒ:àÁƒ0c¦0`Áƒ|0càcÑƒœø˜0`Ç·ƒ1Ó
Â…a1Ñ
Â°¬`VBŒ
Â…aXB°¬+
Â°¬+
ÄlFÄlFÄlFÂ°¬+
Â°¬`V0`ÁƒŒu¯x(ü£ôíïU~
?¡Bº¡B„!à¡}õB½HB„!í8è¬+
ÝÃV…a[Ô¬!B„![ª°ˆ‘ˆˆBõmï×Ô�˜¨+‰ˆBéA.ŠâD&Wðê„Ä*‰ˆ]*PIôWú!6'øu!1PBbÅÒ‚B¸®!\W™_Nßˆi±ÔØi”)É’§q³Æ1Ž¥J¯ÃÚc¨Øè4ÊrdÉR¨ØiŒcÇR¿‡4:Œu™Bœ™*ü�ÆÃMŒcÆT¯§oŠêÇQÐd‘"Dª:ˆÛÆ1Ž£6ü>µGQÔt$H‘#cf6Æ1Œc©ãðÝ�&ã ê>Ñ’D‰¨èUlcÆ:¡›zvø•*nlW‚¼†¸ßLÑOÄ*T«(lTÁ�Øhhm}0>´e
~Q¶o×b¦Ã\Pt*úc£èêSÕ·ÅLB„øàK¢„+_‰!B…a!!B„/Ãª&!¢bŸ\	B…a×·ï¿xmûÃoÞ~ðÛ÷†ß÷£&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÏÿ õ2ÿ ûs·ï¿xmì¡?‚¿jíëí_‘7äŒ¹"D�ÈÜŠäWªEòDDDÄ‘ü‘|‰òFäEqB7"FäW$kä‹äOö.Þ­ŽØ±ÆOr]ÞGr‹È®dÉ“%W’�ÉNLŠžMü�ÜŸMj8ËÈäü”^D¹äWÅq\WÌŠæLŽã¯‘\R~NåûoVÇÒÇÜÉTiDîNDèMî%ÚH™8’¹*ùkq½2]Ì’cQ&Ù2K’R&‘4ü“|“d‰Üœ‰¤Jä‰"]Èm/Ø›z¶;¢Ç6ö‰%à•‰Ø•‡OŸ“ðI/Ÿ°èö%öcrC”'à”x%bUð4¼2Ràmx'_¬IpJÄŸ°éà•||±(Él8¥ûo_pŸlEðEðEp%À¬EðFÂ°¬%ÀšðV»»ÀâÖÇÒ„ø#b/‚6^
ËÁÛÀšðFÄlFÂ±À—kÀ›ð+°¢ü
+ö&ÞÂQX]pcÐ…"5ð(ð%èVb�Lzëû#oŒ…ûgoÞ~ðÛþøç®ùŽ½´!{h_mßà¯”„.‹¢ÂB¡Bø¨Bô!^¤!}ÙE�$eÈ¥ìQ
$kä‹ä‰+‘È‘+’+’/’,¯Ú÷ê¢F¾HÜ�ÄFäH‘¹$H‘È‘#r$Dþ.Eq\O’4"¹~H‰‰ûÔ*$ü‘—$_$H‘\‘¹‘|‘"DOàPP#_$eÉÉ$W$nFä_$H‘‘‘¹ü‘"¹#r$H‘_¶Q‘cŒš¨ç%¸ä‘·¯µ1Á½ÇÝä¢ò%ÈŸ"¸—"¸¿ä+™2mäuòdîks½_jß¦Çbgl¼”äÉ‘\W2S‘\WÅq>L”äW2dMù;ù*¾ãRM’Š~L™)É¿“o'sòw¢«Ý¢jIKÈ×&Eq\Èëäw)É‘\«òwÓs¹/~ˆq©%/#TÜÈ©äW+Èëäw)É‘\«òw/%9äuòd§&L™2W“"oÉÞU}¯aö²nlŸzŠ6õý,“lš‘8£R¤Ò&ÍJ‰š¬Ô5.j2t'RdÔ�ÚFßjß§Ò:2}ÌÔ5©f£5Dj”5BdÉšŒÔ5'Ü‰:�ÂúXêÍÏ¤•I¦L�¨¤N„û�ÚFÞïÒÆêMÈœQ8š†¡6M“DÑ¨j3R¨–ÆËßúI:“r'q5Bl›&‰£Ræ£'TN„šdêM2h™6Lš5*M“Š&æ6‘·ÚêŽôö;¥àìkc±/c¹3ù+±�Øv^Ýàn>ß�Øk�×ÁNO¯�Øq’ØpH¢ûVý*ŽôÇ)x0màv%Ýà“àÛÁ^Ÿ�ÓÀìJÃ°ìJÃ±Na©x)±EðªŽê’OÁ'Àß±%Àä¼¾a©x;(½Ú£½½„ß�SÀëàv‡aØv‰Xv)ÁÙMŠ%ïÕïÀ«àTð:ø‡aØv‡bVŠpQx+Á^Ã°ì;Ã¯�Åx^Þ¶;b�¾Ø™ü
%=ŠŠD__l'À“ðE/lFÄlFÄW_lFÂOÀ¢Sí[õLV…b2à�|\KÁÁ±±±\
Ä_l(”øUˆ·àV#b6#b6#b6"¸}ê‰ŠÂh‹à�ˆØ�ˆØ�ˆØ�ˆØK�"žýDÄ„È·à�ˆØ�ˆØ�ˆØ�ˆ®¸„ø#b6#b6#b+�%àO�'àí_}LKîÛúÐ¿2LH§ýdh%üçÿ Í4º!B„!B„!B„!B„!|­¿Y´1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œe~Fß¬ë÷Ý½´/Å…Zù¯Ë_‰ííPQäR+í"7ÈÜWäB¹"#r+‘\O‘>ŠâäUòEò+‘¸®Dˆ„Êý¯°£òd«òwE„úPL¯ÅíLí~Næ·;—J	•(*•>mJKÉßÕ.Dú$'÷?#oj‰’R’*½t;S;_’œ”ä¯&Gr¯ÉX�¼Ž¾L™27ÈëäuòUy(¼”~JòUy|�rS“&Gs&Jµ¹ßö­ŠT}Ã û�ÝŠ"I�±¸�£§Å¢cRcrEbŠ!Än^NäQ¸¯ÁÙ�&ILm¢±;SXäÊÄi�²«î;ü�½ª¦6Æ¤�—±³%VM©6N„É÷!ö"L�I¢h›dÙ&I2Iídû™2MdÒ&‰“dÉ¢hŸpÚ_jØò7!¤7$l�Š¦6ÇR%MÊ/‹³�Ô‘H£bR©.á¨›1÷>ÌªcïhúFÓ$Ù$Æ¢TjFß…míUÅEëØîLîex~
pmà¯k[‰Ü`Àß
p`§
¡·àvŒ^
ð`Áƒ|KÁØ‘O´Ôs¨ëàtð4ü½Sé^”ø½Èî—ƒµ­ŽÔºw	?Tnvü.ê•~Âˆ¨˜‘DT£)øVÞÝDŠ{)‰ŠÂB„„Ä",�„!LB„&FÂ\B°¬%öª‰ˆBE>mD$SÓ^”øUOÄ¶ýá·ï¿xmÿ Ì÷ÿ ÉJ
â¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸®+Šâ¸¯ò¶ýfÐÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1•ù~ðÛÚ „WàSð:ì¯­|:
åÛÚ¢X¤ÎåìPHB„Ä�“ò&!	ˆHBäUò&D‰"™_·Ðì>¯'T„úPMü~ÔÊ?'s*º$&UE!SàPPäú¼�ý(„„Í„„þçãämílÆ›�Ú^Å;NL™+ÉÝÉX±©1®Es%_“é;y2W‘Üiù(¼™+É‘ÜÉ“¹­Îåöý˜ÕI)•¡TQ,m•ˆÐêU|m˜û˜ÛGÒŠ!Å�Èî‰D5"´+ð)8Ô—òÐ¬J!ÅŽLn#Lm•_…mílÊÉ�ÉK×±³%¹:“&L•Fâ:’DêL•PÜ	nN¤™&HšDêM“&M©*¡ö¯·ìÆê>ñ¦‡Ú6™)6I1¨ôjFßf71ÕŠ*‰I²JCQû†¨mð+9T—xãB‘Ci’m’MG£R(¿
ÛÚm1ÊC‹(½{Lï©WàÁ‚œ~¤¯x0S�ÅøiÝÁ‚œ0Wƒ80+àßÁØÖÇjû‡zeeàìà¢è˜—J”¹—ƒ°¢è¤%ÁDT«;J|
¦w×awx;:TLK¥J?Âööª'À‘Oe1X�„!.ˆDDø|		ŠÂ°„!XV„ÈØKî5J|ÚˆH§§»âTE?Û÷†ß¼6ýá·ýçcÆ1Œcý¾ÿ ù(�¾Æ¾Nß¬ÚÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ?“·ë*ýšŸ#oj‚BeW#q2¿9\¯­~O·µÚ…äR~NåìQ
/ÈŸ$_"#q
â¸®%È«ä‹ä�ÈÜ�ÈÜ�Ä&l$+‘¹‘¹‰ò+‘¹‘¹‘¸®)rWìÝ…“%_“¹#aDUéA2¿µ—“»¥¹è�ªWâvŠ¾Nâ‚©_ºøù{[1¦ÇÞ·+ìQ1©<”äÉWäªòQy2W‘µäuò5ÉNLŽã¸îd«òV>F¹äÈß#¸ëäÉ‘ÜÉEäÈß$«äu[�Ô+öM˜ÕI)cªHØi2]ÃgÒ4ÆÙUñ]%1ìlQ2I’lúJÈ¯ÃØi2Jch¢Jþ·µ³l}è¢FÞº¦6Ù$N¤ÉTn$¨ÉÔ™&‰2h�I“dÉ¢dêIÄ‘4™:“dèN¤Ñ6‰DÉ¶I’$˜Õ>ÍÜ˜êö$˜û†’6;�ûŽÓa¶>â‹âÕ2²ðv³c¹±Å”ˆØû†—ÃØªcïC ê5OÃvöª˜äÊ:Ðí^ÅQßÁ^àiøGr*üàÁƒx)Áƒ¯ÁDW‚¼ø)ÁUà«ðSƒàßÁNàí)ö^ä)p+¯ÁÚºTB]*Q”øµ*ÎÞ©‰tRe>'r*Ê7(SðÍ½ª‰‰ö*!>‘±øD!
Â™DD„!2"B°¬+B"DBÚU…ú;oÞ~ðÛ÷†ßô&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&~3ý¶ÿ ï'ÿÄ (     0@ P`p€�ÿÚ  ÿ ‘f½Ø¸½Ú¯OUOSMyw)³-]-Vð;�éÆ€ Ò    Ÿ^u]s:�QÚ'S7ï×sQ==XÑ:ˆéúj,“MûS)íÜ˜ôc´÷�Œúj«¨—²³133ë×3¨€¢fcµêëÔS†=>¦ºc]=»tN¦å5Ý¦mÝíÊªªúÊé_v½ j&ž×õŒ[‹slŠ­öè©ÕZ»UžÕQÕF£Qñ�O×SLZÚÚÚÚÚÚÚÚÚÚÚ›sÍPF€ˆŽ×iŠbb)·®ŠgUji£Q©×U:�ŒvŸyÉòDSQ:4èîÅUÓìÌÈŽÕSŽ!ŒQ®–å3ª¨¦ˆÕêïU¨ÔvOŽf«µu<žM=E7_Ë÷ÿ ¯wûÿ ý¿ÿ AcûVº¸Ÿ�Q«Q{Të©ŠuÓªµ>ÐÜÇq;SWMÔEA]Î¦ü÷‰‰ÒÌøj®íö›ÓOMU˜ªÕújùÍ]oôºÏëÑÓÚþÿ ?søW:›ú]õ¨¯ÁMD\«Q9L³¨™–d®¯¤WãMVú¨ëjënu?_u]»nÕb�šk±]»7i«ã3ý/è_ê?�ükÏ¦Ö3Eî�úÅ˜þOõ)«ÁEÝÝÝÝÝÝÝÝÝÝÝÙ¹3õÏ§:¿vÕº(ù\·rŽžçÇ¬¿ý«øÿ ÌµkãUÕþgGc£Ÿ°        åvª¦ÍôQ6êï3ýÞ«ù�?Igç]ôÑà )˜üGQU˜¦<ÅÈéç½ÉþÝßàtñÔøbUV&gÞ~§©×M¨ðÎ¯ÇMðê'úsü:|1è¿‰êc§Ôxª³E¾ýDR�áÕá�ç>þí»vcÄÏÂ¸ë?“Ðt~'ì" H‚|&ƒ°vŸh=…|Š¾„K¥UV|OxøÇiüÊý$h11 "cá1Ç€‚3UUUŠ¦~§&j‰ÉW)ûW¼ÎY1ášâ§S.lOçªœ©ªu:ªbiÔx+ž§¨³~ßWLê®Ôê??4ÍS:˜š6â#ÁT_èèé¨é)‰‰Œb"?6üÀù=�€úèÿ ‘îžïet÷té{+Ùt¾ÒøUUUUUUUUUUUUUÿ 4�`       =cì#F8‡ÑÐ|â&1ÇqÇf4cŽ8ãŒÇÑÇÆ4«©úÈñD®—,²fUr\¦~©WÌØ<  v‚øU|K÷Êªª«ÙUUWðqíèÃÐ�ZµrÌÓõg€øÃGcâ|�Ìù/¡F¨ÓvÕTýªéUUUUUUUUUUUWÐ¦�Š¨ùÚÔi‰®ÕvÏ•«Wm} yb–ª*±6fŸ…˜žÌU4Ü³U?
ugWb¸ËÌ~2ÄU¨«&»UÑÞÆªø1UÛUGz5N¢nY¢ÆÖÕË3§jmÌv�SEŒ�ZŠ¾Íê&;XÕ_(›Ôwµ‰ÎjÉÕÚ~hízßkqVªüeF§á®Gk_Ê&äU¬ê¯•3~™ïN­DÌN®[ÆÅf¯š«øq¥V‰¿¬j­*½®ÇkV•Xš¢¸íDS©ÓkoW&}£Ù;ƒÄ|lÅ_*&üj5gU|èÕèíb+ùÓ«ÑÚÜ|¯SæˆHÐÄv Ñ¨€  	õŸ�ˆ¯åN®Äê5oSó£Wãµˆ¯çF¯Çk:«ç^§Î«¥WJªª¬Ë–Jäû–b©UcSªâ�Q©•U§W¢{XÕzUZuv'µˆ¯J«^§Íƒ@h~Â˜¦&U]S«´Q�*­3^ªÔjÖªÒªÄÎ«�XŠôªµj|ÊªªäÌý}¨«ÁMS¨¢©ùÇk‘N¨Õ^
uv5cUüêÔýóâ5fšçÀäø)›±E:Ÿz˜Õ­U?*õ>P Ð h ±£ähìwÇ’�Sof"gÓ¢j¦(ª¯LÄÚ¦&{=šµ?5Wï#TU¹U^®Yx©ª*ª¯�ZŸ0| °ãAä�jŸ®«Sæ�ÆˆÐN£°v� Ñ¨€Ôh ŸN;Æ©úêµ>¢½ÕUUÒ¹*ä¬Ï«§²éW²ªöU~*¯eUU«SæŽó¨Ð õÑ¨úéÔù•\•UúØÕ?]WâcQõÓè/…tü¦�®ŸÅG™ñžÅ>p  Ð     Ì}töŸ^uŸŒê<Óê‡hÒªªªªªªªªªª«=§Ìªª«¥UUUU_U{G×Oâ£Æéó>Œø ?ÍÕUUUUUUU]*ª«àUýØ        Ðª¾GOÁù¾”zó�GÆ{ÇÂ:¯eUUWJª¿”�ý+ø•UWõ ágèçÆ«ÙUUUUUUUUUUUUò/ ÿ �€ˆ   €à_Á>1¦{=Ÿ„øÝ:YÔiÓÚ{ h?{¤þ°ý¼}<þF>ž~° D R;D     hóOp 4 b;fu�:�F§ÕŽÑó�Gž|Óð”|£U{*ä®•U_R;ªªªªª¯š{«’ªªé~ö>ž#GÚŸ´=Èúyûy¯,÷"}Xô€ô§å úz¨&ˆ¢˜õcæ|j|ÏÕ­O?‘ˆ         	Òªªªªªªªªª±õ«¸ü~?�Çãñøü~?�Çãñøü~?�Çãñøü~?�Çãñøü~?�ÇêíÕ^yçžyçžyçžyçžyçžyçžyçžyçžyçžq]¥UUUUUUUUUh½Èär9ŽG#‘Èär9ŽG#‘Èär9ŽG#‘Èär9ŽG#‘Èär9ŽEuÍ½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½½³SôôþFuŠf�"  1#Xž•=€Óô'À;¹=©î©Ð ˜�ztö�„÷Ÿ¡�¨î‰Ôj}‰í–Ydå“5e–NY9LúT÷{:~…W²ªº_^|O¹Oäg´vè)üŒöŽñ©Ôj}ú#=£á:�N§Y9Å^Í>‘÷ÓÚ;?gE1ìÓõGÓOuWà{Tú«÷3©ÒªªªªªªªªªÓ          úsW«¯¬æóy¼Þo7›Íæóy¼Þo7›Íæóy¼Þo7›Íæóy¼Þo7›Íæóy¼Þm=oC­�������������������������������������Šz~/‹Åâñx¼^/‹Åâñx¼^/‹Åâñx¼^/‹Åâñx¼^/‹Åâñg¥½EtOGÂáp¸\.…Âáp¸\.…Âáp¸\.…Âáp¸\.…Âáp¸\(è¬ë‘Èär9ŽG#‘Èär9ŽG#‘Èär9ŽG#‘Èär9ŽG#‘Èär9ˆêy|¾_/—Ëåòù|¾_/—Ëåòù|¾_/—Ëåòù|¾_/—Ëåòù|¾_/—ËåW_û©ûeðqÃ6öö¶¶vv6&ÌÓù¨Š:~/‹Åãq¸Ü}���­¬0ÄÒåž{›»±rm×ÒÕfcòÔ[·b«›ÛÛÛÛ»»››™ç–Yå–JªébºogUŠúj­Ÿ‘ˆµb)®ëî±r›Ú«§¯§š?E»v*¹UEMÚnÍôÕY˜üLE«Mw_¦Š©½*µ_MU£ð´QjÅW*¯ê˜¹Mæ«ôóGàb-X¦ŠîÍ_]Sv›Å}=VfŸ½¦‹v*¹UgSz.Íºúj­p[³MÝ™ûx®›Ñ]Vkéæƒí)¢ÝŠ«ªâªªªªªªªªªªªªªª±U7i½ªºzìL}�»4Ñ]é«ï˜®›ÔÝªÍv&Ÿ­¦›v*®»Ÿƒi»Mê­×biúª-SEËÓRªªªªªªªªªªªªªªªªª´Ü¦ôÓ_OUMM6ìMuÜÓ]Êúz­ý©·]é«ñÑ]õ_OU¿^<M»UwUUUUUUUò ã‰¥UUUUUUUV+¢üU]ŠíÝ©·]é«Ñ1Ã6öööööööðÃ1Ç;®YdMoè"ª/EÊì×dø˜ÅnhòÅ6ìMUÝUUîc†{xc§,óÏ<óÏ<óÏ,²ÉUUø1TWž¦‰·4•UUUUUUbª/Sv«UØÃ·ñf¹®jòD[¢åê«îá···�¬³Ï<òÉtûîQ^n3o	¤öHˆ¦Š©¯n»S9¯ž'30ÇNYîgžJªªªªªª÷UUUUV*Šâ¼Œ&ŒODŠbŒ<ò¦í7æšìM=çÍžîîîöîîîæææææîææææææyçžyçžyçžyçžyçžyçžyçžYdªå–Ygžyçžæì^‹ûÙÕVygžæææyçžLDR9ÍÌÕîÓr‹åv*£Î ãŽ8ãŽ8âÁUUtªª«–Ye–Yç–ye–Y*ªªÄå:"‰ "œÓ¹»¹¹¹¹»»»½½½½»»»Mú:¬ëµU>IÕ_0 ÇqÇ0Ã0Ão0Ã0Ã0Ã0Ã1ÇqÃ0Ã1ÇqÃ0Ã0Ã0Ã"£‰Ö8ãŽ8ã†a†mííá�¦º:�Ï( €                     ãŽ8ã†cèyúÙÔ}aÜï>ut«õ•Uúw²ªÿ îBªªªªªªªªªªªªªªªªªªªªªªªªªªªª¿î§ÌùŸ¦§Aˆcˆ˜ãˆL~–',²Ë,¢frÊ',²Ë,¦Xÿ âÀ hõÎàh<§ˆÑ£ÄhÐwñg³î=—ÊýÙÿ –£Qooooooooooooooooonª?IŠ²Ë,²Ë,²Ë,²Ë,²ª}à   ìUU5MQå<§…UUUUŸ^5ª¬J«>ÍTÅ8ù_+íOé•UUUUÿ  ?äqÇqÇqÇqÇq?I§Ò¯Ò<Àü$j%UUUU«×�€4?ƒUUUUgÒ~9d¹L«’ÌþNç…Wý""(ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛªŸÒF¢rË,²Ë,²Ë,²Ë,²ª}h€@11Öª¨œ£É:Îj¦¯UUUUUŸ^%UUbUV}i¤Æ<“¬*¦š~šLªªªª¿á üÃÿÄ ,       Q !0`1P"@A€�p �ÿÚ ? þ"¤!sÌ’K%‹“%Wè¢—è¥ú�àlcøàô—E‹e`|2ÏV2D"Idc"ùÅÎ…ù¹|˜!ÓäHMxz¨Q+†Ž�Ñ�+\ŒÊäèuâ°ÌWËç½�‰êart3F8bYš…¸»¹f
hiŒ¡”PÊ(ž|pôÒ=R¹}0z©þ	Bâ„ÌöãOÝšZyû‰O£âý³Jñš4õq†gµÔè}ÆŸ Ÿ_BY"É8%É$X:ŸoÆzXº&Mq˜G«+?†§…ÙLc)â®ÂFž‚}M]jjõ_Rÿ fµûä£R}�ªúw•“_éé*ÉÉ&Åk+³†ep¤‡Lh¡±Œ¢†6cãœ•<jŒþ”6ð‡lHKŠbhpÌ<3Ô¹°N„>¦·ÖjáduŠ´ii%ö‘?¢v%þ�-Dó"i¹F·Ðê‹UL¶z–{8ïgÁ?G­ŠW:¤8®u£¦ÙS¬å3)U"tå$¹•,2u%´�}¨ÂÎ2SÓYÛÆ±'®Ì.ÎPæÌ®Lˆs‘ýF¾ZÈ´´ÒÇaZÃ4½yô¡BÂñ¬#6avrŒY•Éˆc½\	àÂü•á�{]ê91§F~§ÿ D´—“uíªrgN†¾§ÿ Lé/%õ—ø–�ójgÿ <ãÍ×òé!?&i˜Fx¼öð™s©�ÿ �#«Á•ÅùL£sÛÊ=u“�Î¦L.á�3_Ûf<—Ëœ£ckÔÄ™3ÕyVXð9ì}ÇÛÅP×cÔz|ƒ,HUÁ¡®_¸éÉ4l5ËÔÄž¤aðcïdÇˆ¦*G§“©Ó—&Lru1&L¾Iƒ­Œf8õ>Ó¯†u1<ÙY1Ç¯>QŽO¸Ä˜|¾¤aò¢Q,Ç³Ó_Ë1Ù“·ê“�Ütíõ1'^¤4ÇÃ¡×Ã:˜ž~½¼£�^ÆdÃãÔÄñÀ¨‘J3á½N�¯´ëØëÛÊ0øõ1<¯Åó'S©ö�©ÓÅ0Ž¼ù“êb;9\zvs'^|S,Äö2‡“©‰ìæN¼>Ó¯c2uítðÌ³±�Q)ö³&ÔÄ�{F�¾×C¨òb{Ÿi×ÄU#©é_�4Lö°+CÉ‰ñ&¸gñßoéøkþÅW÷P¹—õC�6ê/9Ïò3N9óL³ ò<˜_Àv1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œcø´!B„!B„!B„!B„!BH¤išf™¦išf™¦išf™¦išf™¦išf™¦išf™¦išf™¦išf™¦išf™¦išdÂx+%QEQEQEQEQEQEQEQEQE<|C*KÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½ËÜ½Ç~â$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ï|ó®+�_(Çó¡yÃÉÓýÊ¾x‹‰-2Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ëlÿ ,¬’I$’I$’I$’I$’I$’I$’I$’I$’I$’I,‚I$’I$’I$’I$’I$’I$’I$’I$’I$’IÀ¥Š‘‘±±±±±±±±±±±±±±±±±±±ô‰a¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹[•¹E"Ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š-Ž¿·f1Œ{elVÅ±[±[±[Rñ¶Ê®D"I$‚4Í3LÓ4Í3LÓ4È ‚	Ø’YlT�x»¡OV)è†2†QE1î=Æ1ŒcØhdQ4Rñ6ÇDi¡¿€hÜÓ²_±HkÃÝ
z²eaüCB~æ�›#^Øè�4dÏÃ´2kÜŠKô5àÎ„–Y0°†ßÅ±£r,šö)xGDi£>ÃÐÐŸ¹§b~Å!¯žt%Õ“uò�^äY±Kô5ó924Ñ±Ÿ˜k„W¹ì4RùgF:²aa¾q¡£r,OØ©ù'Dé£c>�¢kÜ‹öøçFäÂÂx&…^äZè45ñn‰Ó]M†ü!¡?r,¡¯‡tnL.ƒ¯hÜ‹6*~Ñ0ºŸ¤7áí‘fÃ_ Ù¹º¾!ŒcÆ?„hh‹öþk¢aeŸ¤7øLcÆ>eÁD’I$’I$’!D±pcø†ˆ²kØ©çcáŽófäi¡×uŒ|Q$’.ÓÇÅ�ºø"X¸1þ{CD×¹5ìRø¡!pÏw,™Yf:!¾V1�‚$ˆ\�âe’ø1þcRC]M:=#CààlÏI$’.,+,–.ñJ'‹)	û‘cC_„ÐÊ(¢Š(c:„.B„!BeŒe¢Š(¢Š(¢Š(¡ŒcÊKâùÐ…Ç<$”.ÓFäY°×à!’I$’H ‚H ‚I$’I…Ì¸!’I$’I$’	$’I$’I$’I$’ ‚$‚$’H ‚I$’D!q#Ü{�™’I'qý‹öÍ+èÇzË,²ÍCPÔ,Ô5CP²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë(´Ye–Ye–Ye–Ye–Y¨j†©ªj£U{Ž»èBÁB„!B„!B„!B„!B„!B„-„-„!B„!B„!r¡B„!B„!B„/ú¡éåøÿ —ìþ<ã?�ŸˆÁ“¯›dÁ×ú}cÆ1ŒcÆ1Œcòt!B„!B„!u¹3øXÿ [àÊ:÷º˜F|›&½ü£ÔoÿÄ (          0@P`p€� ÿÚ  þ<ÇÈ�÷\Õž$�roœÀ·¥5|=V6ÈäMÝZ¸­¾'oQ˜>ÛûÂýä¿¤{V­n¾æ¡ÓsGyìÜ¤§CÃíiq6õzU"ýªRµÚûú²R®{+ñõ‡¢@‘í×ß¸°¼tWMí8®§³hÓÖ¢Úìj¨Ö²î¥BÚ4ÊÓè»lñóGÅ=Š®(´‹vkibÅÝ5
àöÕWnªò/!KµÄEkÉ¶›v-j�‹ºSõ%,ÞÞÞÞÞÞÞÞßÞÞßMà}CØªâiMYQ³�Ã`i@®¥ÕëKB-ÚB‡5¬FÚ)i6ÑoLŸŒÌÞ1D©Xªà/MN9€SicÔ=†¸�†B†¡w”t6-¦¸V M‘l'[{Ur¯ÛU¬ÂÕ«iô‰Uåjæb5h¼‰­pôp®’¾w†Ü±áºr¯�5.‚Ò¢£E@½¥Ò(z‡¶í½^ŒŒªÎŸI¦åfïâ	8azÿ ×“D.Ñµ·¶-"ß¤»—µD§N4‡H­8U�JÞ›G§Ð*êøŸVGF¦ö�W R{Å´ä«I¢0Hf!˜«HõuËW¸yá–øm­0í^Óñdñ»¼kQÄ®m†úK]ûö¬ÛÓ„3\ÓÜµbúÝ¢ÒZ³¬âWuenoS¤â@ëôDwJI³³³³³³³³³³³²›@z‡˜ío¿¶Nªõ›ví÷]µvÞ–èíÓÚÑØâÕ¯µ*ÐkuuãâŸ�yJ:{~M«fÒ¹Šáv5·¯ÜïJŽ¨«¸x\hüíR¬%Áp]Us@á–ø­Óá>á hüíaÒPðªµ)ÒvY­âgÑüíXÒÐðš¹fÕ¾vŽ…\Lz#âŸ�zÕ«ÄÝ‰:}~«QânáÈú®ãÈ|ä¸ôÏ!í?¤>)ó‘ˆõGÍý‡¢Aò¹.;ÇÅ?a˜€;[ÀCw�Š|/Ì«<Â‡„$ŽDç˜P?@|SÚ;JÐ³F– ¤R{Í&¬Y¹izuQ¥òE'è�Š{Ob’¤!mí„�Þ*Ö¡WÕ}D‚œ@úâŸ+37™™¾qæ>@þæÜÜ¨yá~oÞüŸätxc™î<�áÕ`??p=wÏŽgÓ4»ˆºç‡cz*¥S[¸çG��Ô«½|ÈBÒ¾û—-¯ñç°y.–J…ÑpË”91 ¢à=†®R
M;¿�Ÿº{’éM‹%iW;´žÆ!š¨Ñ¸«¹î"àí'<Áäh©?�3W(vmC�ÚOq•Í|ˆÄ%š­«²ê¹[_%”Ò<j¥PîAåv“ÜB<®PîP´®f–@"�·¸«t?<kïUZ<®Ò|<®R{�$¤òUˆ¬é>Ó¿hì=÷
{•V�¹IïUZ<®Ò{Í[<—ÜÌš|ÚÝ·J{•VÈ£K¡Þª´y]¤÷ª­W
{ÓCð#Çp§¸Ð¤Ò©T;ÕVèr»IïU[#•ÊOzhy�Ó%PïU[R�€ÒhQ«”;Í
O+´žôÐüñ\#À@¢¤ŽóÉÒ¨x[5v“Þš�+…#ÀØ·�Ul¨Ðð([5r’;…¼yŽóE{´=E ¢¤� …ª‡x¡øÞiIÀU›ÄAJSÞ(~wš?8yÏhì(xÎ?<ç\öŽ<çÁùÃðCÀ~pò�¤y�ùÃ�ü ðœ9ÀùÃ�ö„ûãìÀÜÜÚžcö§˜ðœ??D=aû�û�û�û�û�í·çÜpKÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝù3333333333333333337#ÉÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝßã�’hþ9? Ñ£÷ßÌžnüÝéÝéùd¨hÑü ó'Æ(÷OªhÑüry³33rfff¬@õ>&ü~A£G�üby’	ä=ãF�qí=Œß!Ýý$ó#‘¡G�<ÝýƒF�qí4*ÞŸhiNŽâ~!¥Þ|ê‘ªIôSÌó4(ö\¼.«S"Ú½sF�kòw§kQ»oP­Må|CW¬[·rÒôöôöÇ¢žfšˆEWì"ÕËÕ¡ëš4|ùçñšˆÇI>lpö*Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë ]ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÓA8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8”‘¨UÍT¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—jþîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîï	ÓE‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,UiµHR’(P¡B…
(P¡B…
(P¡B…
(P¡B…
(P¡BN›ccccccccccccccccccccccccccccccccccccca2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&LUÊŽWÈ‡7ww~÷äþ³»»åï+äC‘ô!êžLyI÷•é�TrÙ™™š™™™™±Ôf¦fÄu_ rŽWÈ‡#ÍÞ‡Â%Á&�£Éù�]]€†9G´�ñqíº¹�Š9F€ä(òa6ã®ÁöÏ'ƒ‘¡F˜Ð¢¡zåÔj«™jç�_ r�6äHÔ[%w®Ÿq˜(É…`]M»‹v­]²4údùÕØïð‡!ã
Ü'å±mí�çWÈ€ø¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌË§Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²ÉÅYB4�áÃ‡8páÃ‡8páÃ‡8páÃ‡8páÃ‡ÑB…
(P¡B…
(P¡B…
(P¡B…
(P¡B…
(\T/‰u>§ÔúŸSê}O©õ>§ÔúŸSê}O©õ>§ÔúŸSê}O©õ>§ÔúŸSê}O©õ>§ÔúŸSGÒ^J†®dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™2dÉ“&L™6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fÍ›6lÙ³fêIá�/¥ô¾—Òú_Ké}/¥ô¾—Òú_Ké}/¥ô¾—Òú_Ké}/¥ô¾—Òú_Ké}/¥ô¾—ÒÇµgùÑÿ nßàK»»»å–Ygžyîƒù§77w·wwww7773Ï<�ß“3cŽb.…¿åŠ•p'0Ã1ÇqÅ™›Ç‰C‹¡_’u\p�|¤¢…ÄÜñÅJXH	ŠJ]Å*á)C33333333333333333331F!bèWáŠ•p$'å6%.�_‚RÉJ>{8¸ÿ t•\		úlQ€P¸ÿ eK*J>Æ%.}RUp$'î”P¸ÿ EK*J>û1AHZnóIRÀJ[ðLRP›€ü¥,©(ðå%›€übUp£ñe%›�_K*J üqIE&àW¾J® ”{Îîùe–yç¹¹¹»½¼/¿Áb†½Å(©(Îï™ºo�L™R¥J•*T©2doïïnçžTÍŽ{[`�BuI¾.?¾AAHX[öänBµVï�+©`%Ë=Ó|êN¨ê¤n¾ÌxñãÇ�±±³³³³µ···†ã‹333bm9±BúuIÔ€ûÅ!báY¼­QÕ¸‹OnØòQJ äùnÇPuGTu;ùÖØ°4ãN,;xbÌÞã6&ÑÓ›‹©Õ'R.ƒì•Š¾»û…IJlÞ-CÊh“xê ßÝ|6c�0ÓÖÞ,Íì533333333c‰´tçM´�Ju)¼è9Y¼­IÔ›˜8Ó‹FÙ¶]30ò€,Ð�(q"Å‹$H‘"D‰$X±c>ÆÎÆÄxñ¢D‡
0 @� Á…
HpáÃ…(P¡A€xr¸Z¸IáƒGoMXHpáÄ‰6ÆÑBÖ«Ææ#N4£N-âÍÉŠMº‡•!Fž<hÑ†š4hÑ£ÇØØÙÙÚ¶¶öööö�­��­¼1j|³Ï<óÏ<óÏ<óÏ,²ÉÝÝÝÝßµ›µÛƒEi[bhVÊ´ðÕÂÇ	é]/¦xYág…žxiáçBtqNœéÕ§ÀåA³ª›:wPêC¨u¡Ô:‡PêçÏ�:tÙ³fL—.\¹råJ•*T©R¥J“&L™2dÉ“&L‰$É“&L™2dÊ•*T©RåË—.YÕ*ð¼uiÖ+P›ã[6tþ¡Ôzˆâ]K©õ>§Ôú—PŸ0ê�ót­T¤ù]ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝûÝÝÝÝÝÝß,²Ë,²Ë'ó»ü÷žïê·ÐoúVjjnöoîxÿ g�çžyçžyçžyçžyæúCD333333332GÞµfå¤ÚPñ’­A¸‹ÃÄL…\¶¾ãé¿jòî‹Š>2¦(µlx”#)ÑìÀ¿�¿¤£ù=ÝÝÝÝÝÝÝÝÝÿ HhÓ33333333'ïäTåÈ¨/Ç™PW{33333335¼º%UgÊªQ&Ò‡‰të«=çÒ�Ÿ.)µãÀ¤'ü]4Wžyçžyçžyçžyç˜WéŽ8ãŽ8ãŽ8ãŽ8ãŠGÞµavö<hL‹Wl|a÷íß7åŸIÔZ»z÷Æ�ð“ÿÄ -       Q!0` 1@AP"a€�p° ÿÚ ? ÿ Q+‡ÙZ~årû#%î'èl²E�{Gèœ_±-qH®¿vTŸ¹T¾ÈMtbñõrå&[c÷'²Èý–O¦I#›ƒ“ðÚ*­.„4B_EI7‚:ëÁ$i2ÛêË÷-‹èËdÒË'Œ�8~?üpk#²mðlÁ>¤%Çùf…\ÁÎ$—ÑÊ±Ã’•“|¾ŽO¢0’ âfYñîƒÎ8&²F$d²8>„¿‘‚:¡a>¤†)¢.àå±ðm3,ê…�a,žQ˜¯×K½Ÿ“Ð|Ü2°6ÎH�LØŒVŽ¢ÂàßRZ$Çb¶'kážf"spþÈÄWã±�»„91$A<d‹Y"D‰$H‘#Ã®>W4[9^^Ü¦žX®“K"œFH±.
ª™ÏcáÌŒ?NZ9WÃHŒEÅ22íÊ~È²CÐ¸NÈœ=×o£:�•–ÿ )'_RI“$Ñ<’dÑ6Mlèc§ÉS‹C‹m"Q÷àÉÙ%ÐUÅtâë’de2YO†
é‹ê#i3/†x¾8øj(úE“dä1“‰:Ù±Iv2NÖº­'$QJú+�°ˆ2›J­O%[m!Åör‡eo8#E‘"D‰$QŸ™¢2öC}HÖ½Œz%[ÊdáŒ±`ÊèË-ûŸ¥Bøj(rxD¦òÈÅ	Bb’%[i1IzÝ²Eñá–(åE“›÷$þÆ4NÜi¤Ù_ü˜´Œ>Ê}ÔŒ|ÕÙcù˜>�ç,Š+Ö¤‡\Œáz�“H�5å£Šc›o>¦˜àÒlªÚˆó¼x×,Xç1(ör‡	™ŠôóI<
š°‡dÛì8²|¸Èäükæ™…ÙÊg,ÌÅz3$(×‘ç_%êtìô0ñèþèÅl~MýŽ�¥&(z14'Iýß’ó£‘çàaŸÇdþgæïý©_±¯&i˜Fx¼ŒéÙêˆ¸œÄrc‹ò™F8ç¹Ê°fBqÁŸÿ @->ó^†Yƒ|«ÈŸc¡—Å¡>ÆŸ Â28ðB~ž‡_C\3éèe˜fW/ hhÊôtõàÏ£¡ÔÁ…ÂD½xŒú?±ÓÃrýX}¼zz}XfW©�z0ŒÈéá�ËÕ†evðÌ®=½ÏíÇ•‰‹Ãú}}8õìa™\zv1#+�C¯¡¢C|:xgNß^ÏNßS+�C¯�ô0øõù¾)×±‰‡öìt:ñëØèañéâ¹—c©ÐX:öq#§§NÆ$tñl#/±‘¡¾Ö$eË³ÔÊòÛèt3.ç_i�gñšídåbÁ—â˜ü,�ÿ «ï_8ëç~O'ëç|ã¯ì±þZø}]ÍdÄð&ŒG'+Œ Äã”4ÌÒ2¾^ä`)G(Ä°<£™~?$pfy"¢ˆ8ÒŒæÎXày%&IIŠø]{ŽlqŽ	s“Ê1ù,—ä¢:¾^ò#òÐ„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Ë‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰h–‰hzàã‚å'Ñ—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é—é–´L°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°þI.bŒ"�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢�¢”½ÑIàSEoè¯Ez+Ñ^ŠôW¢½è¯Ez+Ñ^ŠôW¢½è¯Ez+Ñ^ŠôW¢½è¯Ez+Ñ^ŠôW¢½è¯Ez+Ñ^ŠôW¢èŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèŽˆèþ/bÅö[²Ý–ì·e»-ÙnËv[²Ý–ì·e»-ÙnËv[²Ý–ì·e»-ÙnËv[²Ý–ì·e»-ÙnËv[²Ý–ì·e»,cŸ¿úý�™�öç$¹rfXà¢¿/[ÆE)
2NuŸÃ&ç‘$Œ¬~[qx&§’R‰8““'”8ÅgÁp1¿ÌBb#¢:òÁŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œcø!B„!B„!B„!B„!B¸)HƒH� @� @� @� @� @� @� @� @� @�øðm)2ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÆ×F;"›Y4‰ìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìžÉìÿ ÈM2¦ó‚­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑVŠ´U¢­h«EZ*ÑR~Â­aÛÚ„!B„!?KÒÆ1Œ‘"D‰$H‘"D‰$1�\ñ„†ÆÄ!B„!Bï.OÅ09?ÁO„�Ð˜Ÿ‡¤dlÇâ&2K‚~�åù+ƒC\ðtŒ�‰~b|$†„Äü—é.\ýô¸6%úˆCD—ÿ m!Ëö—	!¡	þ¶86%û©ð’0'úx¼1¡¡3?�ƒC�—‚¦44!?ËHrð¥ÂQàŸããƒ‘�”x'ø‰^"¸J<üpr1ø(B„"$vDŽÈìŽÈìŽÈ±~á(ðOæ¤9pÇÁDHì†È‘"!z"DÉ“,,,----,-,,,&X‹"M{ˆƒ"ÅøM	úÑöErgNî89	v�ˆì‰‘É²ÆZË=�Ð„!"D‰$H‘…¡hZ´�JdX‰"È“‰²,‹ùé�	‰_dPß±d‹$IˆQï7Á.(["¾È¢;M–²ÖXÉ>Š"-_„ˆ¿¡{D²#û"È±?”ˆ¢"dÛ-d¥îÄÈ¢+è_!.›-e¬µ–2\Ð´-~Æ=CÐô1ŒcâŸÑô?¢È–Ä’÷"ÅðP‘$IûÈ²Cb"¾…£\ø9#"E%%EEdˆ\ÆH‘=Ñ=Ñf‹4ODôODôODôY¢Íh³Eš,Ñf‹4ODôODôKD´=Ð„-ÑÑB„/Oøúúj.‰c÷CFI2D´KD´ODôODôI}_C‰/¤Zþ™t‹¹±/¡/¡z“àãÃ=ü²m–––––––&1ðB"@¬¨¨¤¤¤¤¤¤¤§üÿ ‚’’¢¢¢¢²²²²d @�eeeeeeeeeeeee{++ VTTTVÈ&A¢¤TÊžŠÊQS+hŽHIÉ•h¯DD1“'¢Íh±}/¢ÍÑ-Ñ8�½†B1+Ñ� @ˆ„/KÆ1Œ{Ç±ì{Æ1�cØö>,cÇ±ì{Ç±ì{Ïò1ïƒþG±ì{Ç±ì{Æ1�cÇ±�cØÆÆþÉ'îM/roì“ûûûÐÆ1úeZ*ÑNŠYKÑS**edWyŒc1Œcð¦1ŒcÆ1�cÇ±ì{Ç±�ÿ ¤þõ¿òŒN90û˜–ë“™öð…Ïƒ'7Œ8lÄL¾æQ™dj—o(þù3¾T¿ßT!B„!B„/'cÆ1ŒcÆ1Œcð$'ÞBî!!?èYüƒäw¡gò�—9Ó´ðË?�“ˆüb:—z"hI÷"!/û(çBŒ°f0û™bäÉÍ,‹ÉœÍ,‹“_s|¸9e‘MyCÿ ¢_ÿÙPK     —ŠU]Û\Æë ë 7  includes/modules/analytics/assets/img/rank-math-pro.jpgnu „[µü¤        ÿØÿá Exif  II*            ÿì Ducky     <  ÿá.http://ns.adobe.com/xap/1.0/ <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c006 79.164753, 2021/02/15-11:52:13        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop 22.3 (Macintosh)" xmpMM:InstanceID="xmp.iid:17750279BA2611EBA9C28DF1584B585C" xmpMM:DocumentID="xmp.did:1775027ABA2611EBA9C28DF1584B585C"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:17750277BA2611EBA9C28DF1584B585C" stRef:documentID="xmp.did:17750278BA2611EBA9C28DF1584B585C"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>ÿî &Adobe dÀ    
  R,  u’  ½4 éÿÛ „ 		



ÿÂ è ÿÄ ÿ                            0`!12@P"A345p€#%6� °B$E    1!AQq2 a"0@`�B#‘±ÁRr3P¡bsCpðÑ‚S³$€²Ã4 á’¢ÂcD            `!1 p�€Àa°      !1aAQ q‘ñ0@`ð�¡ÑP±Áp€á� ÿÚ    ñøà                          2`           2`      &@                         cP           É€      �’ÌCP€dØÐ                       652X3«  d˜ŒÐ°Mª HO5ªÆ   AXÀ2NFHBj  £/¤Æ«ÙÎ²½M.Ëæ7�                       “»­g6Í¢žµ¼]—Jàë=	}5ÇÖkTÑaz9»œ�f¹Z¹¶` ƒs×c{œ«˜ÈªBÌ^š¡s^³ qµ4 ØI}65VÌ®ä±VÍO'¼è                       ØÔ�ô¹×G6Ä°Ùt3iÙZÊuvSŸg£Æ²C]¼j(Ù1$ºWYäY¨ ‡´çºöM,VJ»F•¼ERÆ„å;<Î³R€ØK2Ó³¹�B’¬Iƒ‹©                       cSs»›:Â™6Yb�‘UØ­QÒ½t¥À:™´ì«R–%©g"Ì �dëKÍ³©-¹k%¥¬›bE¬‘W:È@6¦L                        “ È   �   ` �`Éƒ     P                          É€           È0      Žœ¸                          ˜           ˜       Éön]0  Éƒ& L      0      dÀ       È0    L0        ˜  “§(                                                                                             ÙËí‹9´ºg©ÃzW3¿;Ü·sž¶�kZƒRÆ-N™ŽÉ%ŸYr`‹SŸ×1k6¹êÿ -ì`Ú5¬ƒiy]ùégS‡L››@ÅA©[rÆ-œQ²€        K*ž†$^–
F	”\\š›$‘aLE   œ*ž†,®¦Æ¤)!2ì  O3íáªi]ÿ /X58~®Vq¡>,:–±ª�3é<}¼ç¯�N™Ÿ6|k&¶K›_r¶ó¼²D™²æ×Ü³‹¥oËÛóuó~Î�Ö+'ÍÞ]£yiuÄÙ´úfLÛ|õ,½¿7L¨        ‰ä«ËŸD0|æÎì¼‚õšÖ[±ç'›·}¯
yû7ÑMŽ|â.^½‡\€  œ<Yôciž,áèï¦ãÎ,Lß½z®   Áçý|`Ô‡S­Ã¦c‹éä4«Üµ_r|]�CäíæýœpC©6n–ÜõC®c²|Þ·Ÿ§?®O¦móÕ.™µ�C©é¼]¸ÞŽ|îØÅK›´\çª½3lu8oŸ×3fÔéž‡÷¼Ý@        iåkÊž¸¢y[:…¸æT6S>«�bcÃgçú{ëô—ÓÆpºë0§*pèÞ½Ç|€  ÍYÍOi/šžo7<Þë^û-ñçœWfõéÛw   ‡PWÖmãZ•·™³cÒL£Ò\µ«ÔZƒ	‚=%Ëyko;Ë$²æÅ©˜ƒrL£ÓhÁk­¼éd¹ºVñ›ÄvI,¹ºTvrûóêðék         žzÊgD¸@jU /8™9®W:Ôg	ÖÁq­€  Ç²Ü]^s�V:N»-9Û�›­ØP     `È             Õ6P                            ¶óÆôs±‹$½.;É©­Té›|õ´’Jvq}çÍéqØÉ©±“Pb¥ÍÈ                                   w\yïglt8î=!Öc©#JÚ¾zìùºÒë�ò–_5ìãc=MI%›7 «¼Ë›W¦{Þ^Ý.;                            ƒ&@     PëŽO~}.=9=ùÇ©ƒ	å¬jl]ˆ«¡òv¥Ó2å>5ÎíŠÛÎµ.h³‹[s´M›Wy¿Ëv1r¹&Í                            ØØ     5MkybÔŽÁÌí�,ëðé¼¹�,Á&u±¸                                  72     2 0€H�‰@                                  €É!°    S›då˜ÔØÐ†­Ê5AK-�                                  +&6     @œšØÁ¡1©‚ôkTÁ‚2ùÒ”                                  *™'6     T²¹¹`€�¹�H„^P                                  ªd˜Ü    l£  d„å€                                  *™&7         „äà W4-€     çÎ: S´
¤…RÉ8 ã�€W0Y                ©’cp    0 
 ‰I-€Ë>j–Ïr¼Cº|Å>°µN1hœ˜äÃŠt
§©>XzÔhëž=ŠóN�ó”úrÛ<™Þ"0T;‡ ¸qÎÙÍ+¤õëó„úRð“×-               “ÆË”(!@(k    .„%ˆµ(ÇŽI*X_ž4à•NúðS×¯ÎÒsìóSÕž%!6/”�`¼„úðÙ¯!8'¦_.”B´R©èWŽ�…à õKäSÞ/¢              BÍjcc(    À    Âê�%·(™òÄÜõËåÓÑ¯�O¢/�=1æÎzhT:Ëì–Wé'ÍOzx"’w—šqÒÙëNrñÒ¢zõäœDö‹â’E¢—Îqhõ+æ“S²¼ôkì@              P³K&62        ª@X–Ü          áÏp     ð§9>€¶À                ,ÒÉ�Œ€    0C©¼ºY$ kZ¤Ù¥ŠÊ¶]Æ®J                                  ,ŠÉ‰£DÞÝ$±n@  
=sÉôsŸ¯LÝå«8×?¶4"Üïù;Xçx~®ulíùúu¹l                                  9öp§žuíë·>s¡žYk^™¨  jr»â§LÏ›Wy¹Ï]><÷³�GŽù�¹÷|½¶9=ñv¼ý:ü¶                                  »ŸŸç²×º£ìðÐÝ{ôZ´  šjGRDu.nñ¦ÒÅ©>n„vV«üõrP                                  çYÏs”è]×™�$X’íÞà  0`É�  #¨¢Ä¶å o77¿›¹ä÷XÇ@                               ¡f–Lld    
½'ÑË¡Ëw9j-H5-cYŒVDi¥Mg|jî5{4Èôøþyö8:¾gÐ¾7èwšå§Mi%•¤�‹:’ÑHjüsë³.‚’ZYˆ�ÈÏ=g¥—Bº]X‰
iie#7*':¯Eµ”ˆ¢�Á!¹¡)])ƒrÁ"î †æ¦‰H¾²€    4²cc     s»c…êåÖóôæ÷Äøµ·‘•ÀÚ],†^÷›§k�@�ú_›ßÏÑáéóžï™ô/�ú.—O
Îä¾Væâú	x¶@E/ÈÎjtÖ&¤†J©Ô]KÑæ¬ôÜZ‰Z£+›“AhÁv(ÕDè¯8ÂN»ƒÑËäîp[Z)Õ]ÈŠE³–�˜€ˆª�Uç¥Åœç¤G°š     (Y¥“    �\ðý\º<wG®-óÕ}Èu&Í—4ie}Íó`;¾n�®= ¾þ_žý¯Îíã§Òþéö—ÎÙÐŠ•	héKA*UÈê­T¨U«P2[ŽmjLZŠ5¹×—‡dä%È©V£r¨Ht¢ÂÄœª°T-DÜ—ÏY“±ŠØ½œº�¹ª3bÌQ©KñÍ­ˆOC.À    
idÆÆ@    Ô‡shÚQŠÂdÌ£[%¯e¼êîh RëÃŸÛ‡cÍë—;       ƒ�gZ]À   Î¤²€      
)ur        …šY1±�    €  ]RÄ¶å                                  
idÆÆ@    Ð¨LljLM1©\Œµ-é@                                 …šY1±�     9ÄË &MŠË€–È–"©)@¶ùPíÃ­çõm4                               ,ÒÉ�Œ€   PŒÔØÐ¸nS7!.š×D½/JP;¿›ç?kózk=o7·èô9^JW®ä»ÓBU˜ SKŠ)+Wv\€SKŠ ÁQ.(‡e˜é¨²Q:ëËAÔ^bS®ü ÍN’ÓKŠÌ"bê�Y']€     
idÆÆ@    ŒØÈA€˜4 ,ËnP�ú_•èòt8ú8Þ¯¼ù épôð,ìËä®zkM-¬`Á©ê%ò—6–#ÓKÁ³µ/ÍÊ¤Å²»ÍRÚà¤–V’{)¯-g^9j¶ÊI±a}¾fÍM/&Êæ§=/.Aé¥ò×3®ç~^%�iyV@sRÁaaNÜ½      ¡f–Lld        T€±-¹@_W‹Â}o�6w³ôÿ �ú™&¼ýš$740hNK…àØ"=¼4%)�H¡[™2O¬•H‹ ïKæ¬éDF*"˜.é|åœôõ³\Û(–+’_=`ÜïKæìÜ²@@Luc“]è(     4²cc    i@   B
ž-J �O�›ßÍÞñûíóì ¦—                             lÖ¦�À    žP   		À                                  ªd˜ØÈ        ¡¹8                                  L“€        B¹¹` l­¾Vùö                               TÉ1¸    ¶³æ¥ŒÝåÚLœþ¹¹ÏX7Íâ÷çk7«Ë`
}xüçí~n·N]Ï'Ð÷ÿ ïŽrV®Ô 
å€
	}xöIE VJ§M@  +–
	:Ø     ZAWbòóÉÍ®¼²€M�yxöwe¤”k±,€ QKÊ  æ,²våÂl»YÀ¶€ w\yÿ _Tø£µ>ooË×ÍûxXÆµ®Ç›§¿>§ö¸ô y¥ñø~¯þ^Š]|þçäýî‡GŸ³¯Ú®nhBX2hG/—³­ºÁl„ÔØôRù«70`�•è¥óöJnU,�(©U‰Ì€^Šæ…²ÒðlÉ¡Ø–’Q­Ž¤L¼2wb‰weó¶jFtb�^ŠõÝ”  ÂÙ9ëcÌÏ/Jõì:ò\êNvïJóÛèÜ G¦9ý±¥WÞu7–Is}'�·×Æ:ÒÎÇ›¯3¦zœ·Òç Ÿö|ÿ ôþ5Ž}(vóýGà~ªlïÍÙ¹’Ñ’#$åCSÓKåìêÅjÉ	ËIK«èåáÙPÉ¡(6&5;ò,Éj86\Q’Bè(®^Ž]z9cH
5Ô‹‹ËAN®ÄPØôróÓ›X0uã›[‘´ë-4¾´ËgvP  #fA3â3àé^ž¾ûy®t§)nä^Ó¶@ Mk,’\Yb³¢K�U²il ç=¿7›ßÍè¼_G§ÃÔ€       9ÉÑP   +˜K*  qììJ9éÐZ	}@Á� ˜2 t€¾£ž�   æX.Åfw[mUg©²Ûk  €a1YŒVÒäY˜Ž¡$–À                                  L“€    *o<¾üçÎ©ôÆeµ‹ÌïŽ×›­îZ©Ó<oG;ÜµÏëœfö8téóÐ                                  U2Ln     çuÇ›öðÌ¸Kü·Úóõáúyv|ý5)uÏ+¿>·Ÿ§ÑÏè<½»<v 	•                               TÉ1¸    ŸLÑéŠ=s‚lÞÏŸ§;¶/rÜvWÞy½±Ñãºº�×[‡N§= +ïŸÏþÏç¹Ý¼Þ—Ãõ=§Ëû@ D¶  D¶                         TÉ1¸     Âbµ$—	•Âbµ2j@K-€ä¾�Èó~ï™{�¢-ãÝ|�½{—~=‚™l€Ü·ê‰â"*ªZ;’ù»2Z+’‚2ütT                     
¦I�À    S	²ä  „äàÍ{¾g›÷|ËëÇôø¾¡ð?Sg|…Ì‡N^M�EŒ�Ú69VH²—b
Éxv`¬X('r_9gao@´²                     ªd˜Ü    ¢rë%¸�•uH	ÈêxÝhÙb-¨	ä~—Èæ÷ózOÓîù=Âscd€È0B“¬D€ÜÐ"c$$¦ ÜÈ                    
¦I�À    '>²dˆ½TD&	&§.º‘Ò”                                  *™&7     UL51VcSB#Z–72sjä]P                                  ªd˜Ü    ©“    Ð€Üœ                                  
¦I�À        ¡¹8                                  L“€   ª    0iPË`  "å½`                          }I:e@  ©`š7    *    *xµ( fóþ¢Ÿ�¶                            `ßr÷·…ïw  £f*hØ         TñjP ×�ñý‘óÐ                            cÑÏ­õ¼Š 
6b¦�‚…  1fL•XLª TñjP äü�]?@                             Þî£ç 
6iV#`    2E©Ìí‰óko=[Ô¡ÛùêÎ5˜Åh•õ7Æ¥:Ð;ãüo`                              Íw>ç‡:€%œJõ1)Jº•˜‘¨™°ÔŠ È#³�éç’¶óÔáÓS�Ûœ’éRæéd¹±WKÏÓc¥� (ø;óþ     9š“Ç3s³ÏZÔÑ^¤�+$‘¥pzgÑrÔUb8{�|XjÔjq:f·�OU˜àtÍ-N÷=I,‘“µƒ™©×Å4¡f8»�Þ.óÙÆ¬ÅZš4®^§c:Þ#«0    ­õ¼–=<ÀNÎžæ\³ÄÏŸ»¯Nå	Ï	—õÖË@ƒ;¾#²KÜµ“Ÿ×;Æµ6lvl¸‹¼7*ÝÍ s¾o¢—‹¸    p÷-Çy­¦…˜Ô�¹›ÌÜÌGC%MO¡yºxÎØêæÑÒXô<õãúãr±½Ï¡yºyn¹ŠËRÄsw�Ö|«Ô¥¸.cZ©fÇ¨å©eñý±ÒÍóý3Ýç®f¥èŽ§ˆÈ*x¯^Ó†ä    §ôü¶ýœ€^Ï?g³–)Ë‹<ýËé¹wÎœl^°Îs·zì  Ö‰­oš³JÚ0 4#Y¢Ô 
>üÿ �è    
Õæ:âþo'rÄ\Íão=Œë·Ï^k®,æÃZY{7CÑó×rC‘¼ö±®®/”ë›‘‚Ijêz^ZàtÏ çª:š½Éã“C�©ÓÍ–]‹±s7ÅöÇ¯ã¿/Û®z©©$¼íK‘¡V®Ä’õ±e    ­õ¼–=<À,®]‰"ä…7]REÜ  5³2ä   Ð€˜µ(.Zã|_h     (ê^Í«\ÍÎï:                      6w>ï‡4 ¥f	�€    É_s�×E®zÌ¸³iu³it³eÚ!¨Îmüè 9+ÕWËÔ                             ¡ô<÷½ü •˜&62  2`È]ç—ßF+xÁ¼°êIË¼GZ•,ìqéÒç  Æo#äzáã°                            ß¯—Oêy@ R³Æà    u+o:Ö–I.¦+	$²fï·# ®§ÞÍ  Š>ô¼}£å²                           *n¹½îáoÙÄ  ¥f	�À     `  2TñfP  sq�                          ÚgP  •˜'6        „Å™@                                 �˜&6     `¬lJjdÁ¡00`Œ„±Ô                                  )Ù‚c`    2F@dÔÁ¹€J`„!-ÅÕ                                  
v`˜ØÈ    ˜0ljljd�ƒBÌZP                                  §f	Í€    É€  &¡	,XP                                  ©f	�Œ€        Á©‚Ä¸                                  ÉVÉ	Œ€   À    `ŒŠ¡45                                 6$&%�Ì€   ²€    ÔÐÐÔÀ                                “css`          0`À0                                L™      0d2      È  0� €           0d          @    T¯¹¼²å[shšQ“u.lvkY2mF+Vb„Ù¹c˜Åm,:›Dvl²F€ë1¸ ÞP        ‚ŠjNW©ãCZ½.Æ©²êF›šš.À    
i©ƒõÉªlº¤fÆ	  ,¯¨,fÖÜÌ2`³‹�ê£&£¨60mé¼jl`³›šÖµ´‚It°€`Ég*        ©Î³BÔhnlU®Œº¥TºÑ 2jLFJn     *¤54AWå�+%Ö‰0Ln  0A¬í,±_S ÊäÕ2²åŠŽ°›K­™]â;V\´¬‘Y¼ºÙ•Õ'—CZ	¥mË›(A²æ$—         
iÎ•ªÔFº%â"º[]ˆ��MÁ*€    %r:Þ.­t�..H�Í	MÔ              TÒ¤—             SÆ¦Lp`È0™\&T      j`˜AªeF@  `È @ Á� 0dÁ“Aƒ                                    ©›Ë“	ŠÁ“"’+73+„Ž²`ØÀ ’\€                                   Õ#¬˜2 ˜2I,Vd%”GfAƒc$¹                                   ƒ	²éf˜0l˜òëf 7—–mÖÆ¦@7”                                      À2                                                                                          ÿÚ  $Ö¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª•RªUJ©U*¥Tª”	©÷óØ÷>ímVÙéÑ¹½¶Ÿ!¶9:±’‹iÑ±-«Ó˜[Õ­%ÝÈÂGˆØS pTìÒ4°¡¡ ÷>øm«ÝkTÐ´a'â[„hÌ_ß“ŠÖÆáëäÇî†6ˆæ¡Å/2a#Åª~	˜D�Ÿ©Ã Å€)°Ô‘Øqdmds4ôuS±(F¦6-,-¬�µ±¾2Cpê¦Ç·ÁgÊ´Ek^‡ûŸ…é!)ø–¨âôÙ·OEBâì$Ì"T˜tmQî}ð~sÀnKI”•ÿ ÕŽ¨{m~[Ž›½ü€Ïx$pm�xcÖ½Â‘Æ­=Ö²THçÝŽâ –¯ÎùAó—ùXÆŒ¾Hšœhù¥:’ÈlŽ…³Ô6W>‡ß¾?”è™ØÓ}ÌŒ’šà#*£KÎœ)þ�†¥HàÖµ÷7#çÔ{Ÿx$°Í’\™!f[i&Z�- K™Rü æ;ßÈ40ä²�Ì Gš¤Ë
<Ð�œ)&UD96—d²ƒ*‰¹ºyoL4/É«Y‘FÇ‘Gï‚v]\ùêçdÔºæ'™§Ái¡_±Ò`Ê v[hÌ¡WfŠ¿FeŠnè™˜�˜Ð�—PÌš	qê=Ï¿m|�^Êõ¯�_¥¯m{Ç¹÷óØ÷82×c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2­Œ«c*ØÊ¶2¡ƒ-v1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1-ŒKcØÄ¶1��uï÷; îýb’á4¶â‡"åxWxN� Ü†’çP7!n…ÎÈ¢d ‹Â¼+Â’Péo=bÉªÔ
ð¯
à¯
àƒÁD©r¨cÊ©¸+Â¸+‚¼'Éè'¢dír¸+‡Õ“E‘ž#Qr�s£xp&‹#‘dfÆÈÙù&±Ñò7s­PNÚô¨ë¨Q”&j¼+Ç†ãA6}…¼³K¡’öªŽ„Ñk5^³P5ðemD¬¶I^hßlW
g|Z}"’Ôì‡Ì‡PÎë‹ÜY�v£‡ì{¬q&íJ­G-Wµ?!Åj<4¹îªŒ„+v«î|ÎhOÈu±ÌêË3”’}Ù;]{Õ&JfC�vCœšdZÎºYˆN�Ê¯µî$cÜ„äå.xöú—�LÌoSé6ò³gfQtŽãœtòjfÆ{ä$bçšb¹ÎkÝA.e$‚K›'³‹¯�Õ“0¡uuèb%ÄxNxŒ¦�r1lyØØ³+#Q5hê…¨m©XÒWÁ+!„¾XM?†#YƒÑ¾Â'¦AŽ5#}bk­„ õn\FñÓ†'\ö¹ÕzlFécý•!­a*bNØ¶?õ2b)ŒN�ö€ëžßHƒ¯oÂcêZIt/MŽ¨ÆZ[%T�ÁÎ.rlf¯gúzf˜â‹'ÑØMú·š¬¡YHÔÄÊ¶>@É(”HÖñŽ}$Ó¾Zjf1å˜L|oÃ�:<·Ñ¯./ãäu?„Ã÷ÄðÏªk?kâ%øæÔ<>Jz7�Ç.pŒ†‘—â>­•ÔRú ?k–#O„cÁfÕ­=�ËlÔ!hG¥@G¥6&…¢Ú€�+LPDÐ�\†;BÒj,Û5›
‹LUÑ‚†;Qˆ!ŽÔaiM�¡Q>¹7¡ZS`hN…¥7¡:•¶jÑj°SH-�:íoÕ8Tdñ÷˜ø¯S‚£Åm&ããxƒ‘¬ž:óC'×#Æ²˜ði‰b½l¢Æèøªt–Š³Ó@WCÕ£ÃÈÄÔ0@#
\`ô0¢ŠÅ#.[u¡é·õŽ;~†¿¢ÐyBgÚ7n«rÔyppW„djÕjÔýÚ�	Q�cÝ@ü³Xr	:�	Q�$j¼+ÂÔjÔjÕjÌ98*´�b”£9»UÎ:�TÔÈòD�i’g¬yKèPLÈ¹Kê×4µÑÊÕ.A«2™Ï"ð£˜Ý$ÆçJò]#šÑ;–4¤ŠªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªýSjØqª]Žt�EÍMcœH,$—8FTq¤ŒÜözcµ×ÛVœZ–bÚ�ˆvå}¶zž2zŽ:T8ù�ÚÏM†EO�Hãæ¬¸R<7�œ(ñ¥jÓ™iÊšÉU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥ZU¥PýA€"˜F­…4˜±}D!i…¦…¥š:7ËÎ÷C^ÚAÜT~^È}�£¥õdªðµ¼-@µ…AD«Â¼# Z�Bj<»'È}‡ÑÁ5¾†BƒŠ«¨Ò©û® 9Æ†Bµ
õ)Ä……ñòì¿ ‡�*²¢Ç-AEž‚3]3V·ÑÌôÑõúº2Œ•ˆÚ7Ë²ü‚9mP
ƒ¥¢¢§Z*"
o.Ëò}YNQ{vÍ“�‡3¡Éä0±]Ù÷×SÍqbn™9XøÑÃ4SE›Ÿ�…Å<=ŸvÀßtÈÈ‡,|˜2"ý6_�CÆªªªªªªªªªªªªª%8¨}»9<Ñ…ƒÅpÒrÎäÿ v+x¬œ‰p&ü·‹�ø¼¶N3¹¶žk2ÌnK•ÆãÛ?å\dROù?Îag»�æ0p7å\\Ïä9,|_ùG×ò<æ°$ãrå_—]7å|dsbåA•Wå<dqÜ¶x�þã'=�hü»Š/åùlll.^&)Ìâ;‘ä90`ü‹&<ž€þÍÏž8aŽGŽÁâ¦ü«ŒŒqüž&|y¿“q¸²ñÜæ{�áä�5ƒ€cü§‹|<Æl9¿�q|îÅqüÖpËæÛ7-1ƒ.ü¿Œ¿&˜H—ä
UUUUUUUUUUUUWÆ)ËÛ³ò°~ÓøÓšx|ÜïÉà9¦fOãœ_#&/{y¹#�þZÖ5�üÏÒµàŽñLyYLÇü·6gþMùN6Ã:gËøÏÆa7ŽÅËoÜù|�éÄ{Ÿ‹ù®fw€Þ#ŠÈ’?ÇxlèpáÂsþýýÃ'™_”óÜfÚøzKøïáñÆüxî–ÿ kÎÿ ©pÙ¿.þÛÉÕ¸>7ñ‹‹9hO�Çdp¼‹?îÐ³;òoÉøüA€?éßŒ`b;Žãbd”òqÆ?'ü‡Ž–~;™Ä‹ƒo1?HŸæú²œ±ý»31cÊÆ‚Ngƒ—/‘åù€x!ö<.[“âáá¥æògæ ÎÅç8ü©2±?0†i1Ü×}›ñf�Á?ü»’ÂÏã¹\ìÞW™\çø8N!®o6?!Ãrvçy	šoåPO&nx'ñÞ=òñXY¼§¸¼žw75�Oÿ -ÍnK¿$ä9^_:,N:L>ñ¥�˜ÇÎÂæy<¾[’ÅÍ‚sø¯×3ˆüª9$ã¹'?Œð­sx¯ÇñòÌ[œÀŸ/�æ[ÿ òÞSˆä`äyCÎdáFÇ¿ñÆ˜öq8ÐN?,ü‡6>VlÎg/‹›œËÈÃügŽÈÃÄý"˜CêÊrÇöúÑÃfÈ<nO‚Ë~d¼?ä9Ç,\oÓ§ù„>‡UªàµZƒ�DÑ\ájµW£œ2Œo—gùÖ‰¦½ J
2 „£ÃÈ}or/sE\V<†³“MsB÷Ñ’:°š‚²$5£×ê³Ë¹<œ‹V&EÝ%i@�çÈS¬~ÞÍ·90¹©Í.à±˜k+jÝ7^c£ØàÛ#Š™¥\åÇ
3Ë¹‡×&âì2àæÛ#Ñ÷sMT>ÞZahµ¢ÔÖÓL"À´Z€¢,ÂÒjÆo—rE]¶iLÆh@z>*¦À�(@€§…QáÕ�íÛ“Èâã‘ÎcVˆgo•gù„<yŸhÜ8˜¤+P'Ì �$8™Z„€£3P•¥@F@@ît ,G\ÞÎO,ãã¯sL®>f<=‹"I2�¶”B&ˆ»+3F@A€$oYù/€ò%g!ÉæÉŽ%œ7¹râÞÀ[$oFF×±ëLÙÑš±\×)¤ÓˆäòÆk®lÎ-‹
WËŠ„±8’ d‘½DÙ†Qš jÇpsJÍ•ñb·îÆ<,­ÄzÑ\›,N3fˆòoe¬‘�èébi¹´3D::hÈãe’\>C"HbÍË7\DÙbq¹·4 æ¹5È9¥	¢$¹¡6F8™c+�–IqÑ8øóüÂ>_ÁŸ![]#� ˜ã­]#‰lŽW9Å®s]#Ü˜ÿ MSZ¹Ë‹þ_g=[°q ÉdPÅÇG4ÒM']ŠÂþ¼ûc2Wñí¥œŒkGq30kæçãE�dœ¸ãdlå¢Á“Èþ;“hÈ…“r³A6pÇŽnU°³”Ç÷ãð1¤ÃŽi"âãã1t8ésr[:�Øù.—'#ú~3úP¸Œ¾;˜Ù:³âãý¹ù8ÿ ÜxÌ,yqà{±ññxìWcq-µrÐÇŸ(…ÍÈÆÀûV&…rr8–ý±ç3¸rZq~Þü•þÙv9ÿ lÇã±Ÿ‡¯(âÆc6'úcú|rø³¹idãNc§‘ ×äâxÅ“�®3¿{p28ÜVãd¹ÓâfÃ&!âñ[,šN¿mp<ÿ 0‡�’Úµ­pp&×BâZÃ`�ÕtN«b*8�ÎˆÝ#
lNZ.EŽjã+§ÙÈân`ýñÉ,ÒLüLI2ekCZ„YñeBüç?-˜33‘É‹3WG	”Ç™�+¤’ì³“�ÉYQkcñØÒCpd–|ÌýË.	dÈŠ	[Ÿ$B,išpb|X‘bÙ‰9º<?ô™Ø®ž)%,XÙ¯™¥ÑcýÒfÇÊÉ‚FòsÇ49Q°Á—‘‘<­Ìã ’h±ËN<9‚.  3¢|¸�´¶,¼q‘û¶–Òxpç‹;,fãÎd—î	°eM–áVãÅÈã²,<†áã±ÌÆ��‘Üû£ããá’^B	f‹/¹œ\¹±‰å¤ÑaqlvŽ~³OÉbK0ÊÃÕÆ�r“G>ìÌÇÜAþèèàÆËfñòQ´Zß˜CÇ"«I«L+°+1µÂ´+1…¦�>0±EÛ‘‡�:61Åmúb‡ÚqÆ7Ä<N!1ELúLŒ8r ¨Ÿæú²œ±ý¼»?Ì!ã•® W„$
¨•rÔHBQ�'=b:­òìÿ 0‡�!ôM	ËÙT•qF©‡Öâœã@ÖÃ¶l˜!å°IkÚöùV˜CÇ•ý,r1¡Mbµ:/RÏA¨j{…:5„(ÎÌü½´{Þå�6N ‡“œY+³³ Ms\Õ‘0‚¾WcC«¥ØrZ2ºåf˜ävv\GXò[$ý‡Ûåû›•¸†l×IÙ“¯£>Dñ••#%ÅÊ‘ò¬¼Ã��—÷í—"Fæ¨²[$ÝdÎ•Ó3>VLr$û†9Ë¿®Lí‚ºæýÿ 0‡ŽZ©á�œ±ý»9ânÄÁÜÅ�‰,yYRdÉÇ±\p®Dík¡½ÿ ewXævçŠ066YeÛdàí¡Ë{æ~V6Ï¤¸qJpù²¦„à½`ŠæÉ$fXÈåÉ¼“ÿ ÖÄ†Ll8ŽmŽÍË`vl8ÛŒœ|wI6t9||B|ŒHõó¥±úØ¸ò¡$ìä`Ÿ-òcãn&ÆÇt²à‡Å’øðk­#øl®™�t™xó²<v™™�9˜òjäg†lly&�Òò‚-¦pŒæåhºIÂæâaÄsnTaØ™ÎôoÒX"”ïLcLÙIÉ|¼K¸úãdÿ ­Åác²¾†˜CêÊrÇöìåqLøñK$RdåK“$>yc`Ž5,y¹Sdåd³>ì¼ÁÉíâîš^>\iÎ,óåeE4lü¤o~:ËG›�ÉÙ‘&ã6E<yùReåäØ'Ì“+*,™rc’�&wúøùäO‰•gÉÌÁ�íŸ9lQÈ9,]Äv$’@Ì¸æ2	§–EtðgA—,’`FöÉ‡�ËÊs1Œ°ÂÈ'ûNDR�×ÃÉÈ†|‰"}ñå;2)ò'ÈË�+V8M<¯lr}×*7œßõñ2†ê^A7_>“âeDÙò3F†\Ü©r}Ög¹E,ðÇ‘Kø×´ò»‡Â•ï‹ègù„<j************"‚ƒÛ·+‹ÆœŽ:ãâÁŽÞÌ¼a‘”'ù€€TTTTTTTTTTTTTñŠr‡ÛË²ü‚VS”^Þ]—äú²œ¡öísšÐÜÌW+Kòj<¯´E5ÊYí,”SY«P-@¯
ïC”„¢š­UY3Ú¸÷—ÇÙ—’Üx'Èšw¬B\gôÉÎŽ7“ýŽž6Í×'$Âõ/"49®’NÌ™$Ž2ßðež8œ³2¶ñÀé�ŽÌÒöýÉË)¹,Y|„Éùn0äÜDOÔ�²y£†?ºQ:hÛÝB—–ÜvýÑ­QÈÉÛ‹“­ár¹ºadê€‹À@×£æ6pS¦2`|¿„R8$qv©¡/j×rvCªÉ‰"ºrª^êUÍP>æç|¸¯äösÎ5ƒ
iáÂÁe™Ùg&^=ÅØK�ùyñÏ\’±Ó¼!—&IÌvç#"	>å–ì¦O3²1!šìx²åôÜhòPfêÉï"x7Ò¿
IÛ9‡,¡—3ø¬¢OOÿ dù“I6«%—&ì¹s˜ìœ\²ìœ¼˜$Èƒ.!™“/!šð±Ì�”‰ú¹§#úøpÛ•¥.|ŽÃšìx<Û^JGÇ‡•“(’lGd?)Ü€98¹o~FN\1æÇ/3Ì|t’Ê2Ÿf7Ëp¹Ý° YØÑG‰—ý§sžÈ �“ÅŸ‘,bhóqcÌÈœ»	bAÃ74º<æáÍ]�Å8œU
À¬y,»]•�ì.Bw¶™eÝb³)’7örþäQÖ^àMV]…‘x>Ò±3äæzG[›íÝ’Ú·YàýÆîrv9µ¸î¦<.¾Ÿ¶hÍî�Ë÷9@Ê7*2]‚ËcìæqŒ°cdÉ�&nt™Oc#àˆE
s�ƒ—/'¨³4Seå·1�m9NKçœýéœŸÉG!nG#ÐdDbjÜÇ�ÈÃÈãÍ'üì/ë[Ü1ŽŽ:ý›'Ùaÿ _›#Ì„áI�Ü�CW{˜ÙvYQ8åçñ¿Ìå*ÓÌš>OåÊüy6(—ŒÓÈ†A‹“ÉG64­ÛsóãŸ6%w÷ÿ ýŒïë56Y¸ù®ÈŸ�¾ˆ"C–Ëñ¸çÝ…ÿ «:L¦3!rÐ8ä7 òð¸Ø_/"É+•žÌˆf�Nu›&LqÏÉãË˜s}²NQ�ÇÃ‡G–4k¹hi>Kqá8<tbN7RlŒÉààïïåüq¤ž%¤6rl��/À¼þÙ›ò–R C¼Š Ð`+L!U�i„#¡Œ¦Õ¢ÕDö‚¡öíÊá¢�Ž
záñðcv ÓÃŒæexsÅ©4F,~ñ‰;òzbã:¶äæõ ¯uJ
öÎ'1áâíãé‰Œbð²â:CmQÅbn;Z¨�(@±ÁL‚žUUB¸+‚¼*õ¸*„\!CíåÙ~A!ö¶ºº\Š)2JŽG”òûuäº•xSKF‰ÞâàÓ;É÷·Ë²ü‚>_À5Õ2dXõTý�£T³öÚi0ý±VãðºŽ¹ÜoÃº£Êòü‚<í¨Ž&!½ð9D­‚¨úÓ÷QísšØÞÒ‹F7©€µØ£{'��E•ÈddH<*ö»¿%“Žöä°äù_�Cè(­
À´Ú¨­
ŠÐ­MªÀ­	Í
éÙÏHS1æ|X:ë>xf—æL4óÉI..TÎóry0ÁŸ\HäåÎ ÖBy Æ—#‘Ž9'ä„3eÈ¹	äƒ+.V�NB	gû¤9qå¨29…O!�13$,ŽNO!�Î{ð±¤Ï•G7!’0²]3[—äú•Ê¾	NQ{vspC…›&4™ùúÈN4ZXéŽŠi8û/â dn—KmÃšÃÌEÉmÈþ×9·”ÌÇ“%Ú�ä`¾/îù?Ü×ü®3ù‘°Èü,üfâ²®ÃÆmØŒÂÓÁ8��¹°;{Ú9$¬Kòxîö|…1ä¦½j
s¨µ– ZÁ>dÇÔŸ(Xî«{dðŽ¨â3‰ÁâÙŽz;»M€µ�`kÕ·‚ö±�Nc^Æ¹¥­-±–ŒlpÒÖ‘Æ¬eÅŒ.McšÆ50cÀ÷´´ à�æÖÐGfœv  ýb_�CÇ�úÕéüMÞ©õ¥¾„”*ˆMöquZàü<»/È!ãÈƒ=4Öš Ôæ+=(DŒi­¢sSâX¢�òì¿ ‡�O§(}¼»/È!õe9EíåÙ~Aªªªªªªªªªªªª¨”â¡öðucZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ-h–´KZ%­Ö‰kDµ¢ZÑ!$gÂ—ä
UUUUUUUUUUUUWÆ(¨=»‰ ?$¢Iòc\æ¦døüÇÖTÝ®ph|…çÉñJYß?Ì}z×¸§,nÙ¤¹ÞQÆ“º˜(xï4æçKé¬TO¨™ô®QKTd<# N�Q³T¼úaº­ì•ÖÇå hA¨ìä%Ó0æ’øÍB¼U8Ñj­OMT×W½ÂªFÑïøú¬lŸaZ0Ñ’Zç"M}Ûs‡íÂöìÊ>ž/%<�baÈùq[™9åõ¢¾<ˆ$.sZV1i– ÍÆ=òÏI’G#dž–NL¿usØÆÅ<ôäy-ªd‘È—Š×'9Œ ÈtÙ7š�'G5¢<œyJåó'Æd³ó�3.9±w8ÊIbˆG,R4!ñäA"�'GfG+³,M|’Å|±F·úŽÉÇk×+>LøÓ	 ãórr²ß•�ª(rñC],ldSÁ*š9O&÷±�Žx%N–&“Œdñ±Ïú]œÁÿ Z	 ?²WPkþø�PñTæ¯Zð$e\øÍ-*QNÚ€Ò›F"XžÂ™£ZC¿†(ôìÊ÷ñyŸíÜwôÿ Ør±Û?9ÊbE„î`º\žW�Åƒ3ûÆã69þÖ38bÑÈbÀÌîEø¬Ææ9i/äd,nBç¡‰§1ŒÂã°xœIp8^`–æg�’gÂ&æ¹Xq2¹É+““¢šjßÈ?—‘ÉäO±��Áñ\n3ñç–9yLSg'“'çrp¡�”ÌÅ‡�åºr?Þ!þOäÊåp1ñ±søìhøìadB&ƒ0ÅÅà4âñ›M.Ê"â8ü|–sI«ˆx©32¿å³wÌrXÑáKÎ6üŽ_�ÆÆ‚3t~.7òû9XKælÔÇ3"¥i:ìzÑæ‚¦¿ÁD<
*+¢¢°*+B´+B E¡·fPôñr`lðE7ŠÞ;h¥Êd¯æÝ…ÉfOËÃ� ä"Ên,ØÓMÃb±ÑãÇ‡ÉâO�…—t˜9Øù�Àä!ƒ;çc9™¥\®™Q2œŒ8àæà‹ŽÂÚ@±pù\©q'w/ÊaÏ‘'%ƒ$æÞrw._|–,èŸ.�áäaæE™�(üƒ‰?Þ2pç)ÈaÏ6V~$ógr˜YI•‡Ëå7–ÃŸ%œ¶,Ù8¹ØÓMÇâFèñVg‘&c¢aŠ~caC–È¸ŒIñ¡Í�‘ÕYÙ9“âNþ[?!Ù;.C.~Gyò9|Y²q£GâÀ)f@«Ä-¨´¤Ô"«H+˜A´ð.
¾NP{vHÛ™ô87K#†GÂà1ß¯Rdß0‡�! ¹É’ê„$Êz2…¨¨B@‹Â2#"ÄuGlñÚï(ãÇÝ7Ì!ãÍíêš‰5mQªô©(U1µ/«ªž«ëƒñí $EžP†»æù� x¨-4bMbs
-"„iŒ¢‘•M‰>2´½qÞüdæ=¾LlR93£À›æ>ŽŠŠŠŠŠ�„"Þ­V1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1XÅcŒV1PxS|ÂA_§(=¼»7Ì!ã”JW+•Êåw¨UW+‘r.XçÓË³|Â;»ià9bü|»7Ì!ã•EjµZ¨­VõµZ‹QjÇž]›æ>°¢¡öòì¿!õ¥1Ö­F-XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5«Õ�jÆµcZ±­XÖ¬kV5¨Äãs‡ÖQˆEªÕb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅb±X¬V+ŠÅbµ ]EEjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ­V«UªÕjµZ¨©ú?À
ý*©®EU*«•UÊþ„¢årW*«•ÊäJª¹\®UW*«º9É¥9Êªªår¹\®W*ª«•Êï«)ï5*ÿ Bç&=9Å5æ£¥z®UW*«�><�¢d•NqMy¨é^„«•UÈw» ÷>Ý	èPTõ	þ'ðí	èw ŠáõE8z¹0z>Š6§>MöyAÞ¡z„S|y£	Ô@T„òšïPŠ=GyTMª*"Ô!ª œj-Vª+Uªˆ…OKUD+UªÔG@¨5QZ¨¨­TCêÞµT õ«Qª§«}ž‰¨öO xôhOªb	áXš�cJ!Z©ú-ªŠÀ¨­Võ§Zt§ÑÑZ½iÖ�)à×èëÒ¾g=+Òªªª½*ªªª�Jªªô=+æƒÒžîó:QQS­:QQQS¡TéEEN”TóM?Ç/ÿÚ  ÿ ×zÕEj(j#¶�(­TTì¢µZ‹|Ô[àQQSÊ!:93¡
ÔZ©ÑÝ”TTVªu=(¨¨­D @Õj·¥
�J¢#ÊÑÉ�*ª‰Az4ª¢zÕÔ¹\ªšzW©è:UUUQ•éTSSü¡UUw[•UUUUUzUUUUUW¥Ê½kÒªªåU^•W*ªªªª«•zUU‰ÿ µZ‹{(¨¨©ßj#²�´ó{TTTTTT@'–ª!Ð„¢§B
ŠŠ‰ÃÌ-EÊª½µD z—*ô¹^¯W«ÕUêõzW¢|ÉUUT
.UUUUUÿ ÕV�)ÙENÊyÅ£±ÁN”G æð‡cŠ
ª½‚ç
ªªªõ¯Jõª¯øØÉZÓÌáZˆTTEªŠŠŠŠŠ�(�lM©éèð|ÌÞ´èU:„U:?¶÷‰½E'ËÌ­ë^•UUDª ª«Ñý±¾‡ÝD÷SÍUëUU^µUéT{šò±D×üº†’´�ç¸ÛSNŽÞz�=ôNuÉ­¢“åçˆ�BES[DãDOž›)]9Äÿ —kš! ¨©Ûj¢§@»XÚ–¶�|ÎÔBS¥ª�RšŸÛ/=éŒ¢“ßÌ­D UzUUÐ^…4§vÂê6©Œµ‰¯š«ÝU_³-pŸ!?ã E¨ˆéDz ©ÒŠÔï7·¥G´#Øÿ 7„JUG¥{+ÒåTîÖŠ¦ÆI"ó�|¸'¾Š6�ž=|ñ“ÙUtèãSç–ÎµšŸ-ðçxZ�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�W�Ô	N™äÀHM›ôÒhœêùA�§é’:§Ê0»ê(¨¨Š
ˆ…EEEEN‡¶CAå1ôã«“{ÏCÛ?ŒTôðG·P;H_Ã±¡z*wŽöô#»ø}^ßLz:UW­zžÙüf¢¿‡ð©¨=É^©Èú*ú­A'trÀ¦õj¢¯©=
þ  PöÍM@ QèG©÷ND¦£T=‡°)©§Ç‡Ûô‰üDJÕ	¨/âª*ª¨éÐžˆž„ªú�^�zUW¢¯¥}@ UBiM(#Ðžˆ§U}U@¦øñ{~�ñQôëwëà}8éEEEEEEEEN”TGºVÓÊP·éÇŒîâÙO(G~ *ªªõªªª(*ªª£à:ZG“	M‹õ+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B´+B§ÿ ÷ÿÚ  ÿ ×zªª½j«Û^•UUîªª¯ƒU_¾Võª¯Qß_ª½GeUU{+Ô*þ’\‡aéT<rPwezõø'Á¢§CôA?GwFt=
¢¢oŽþ�èz·Ä§Zt§JxëNêt§Ju§Jt§JvÓô›ÔTñÈVu¢¢§øUU_ª¾k> éU^Êø#Ì%QSÂ(©ÒŠŠÕEEEEEEEj§™è©ÿ ®MzWÃ=�^ÓÐy}Å4ô?D;G`òùC¡ìvµ[ÒŠŠŠŸ\ùCVä&¸4W²¾4Ï´týÑ�|Ì|aÛ”¢Œ9ˆÓ�UÇÌ§Æ²²áê�Uw=:0VÝ¨
—W8®Õ_=JûA5èÇ<å(â¸2;Sßr‹ãç‰Ùp!=åÉ­©žz|!ËjXþ]¯q¯aCµï´9åÝ"”·Ëµé_ öÕW¸"‡nQMˆ‘JY.1||®ç&ž‡¥ð
ÖŠˆv„PíÈeCZ¥–äSE•�Fô=	MúÇã‚¶¥Go–h©ÖŠŠŸà)UUUë^êª¡æóØ<!æò¨©áS ís¨1rªŠ=eHŠ*©\	ŒÕ¾xÉo¤rZ¥–½(<òüe·rŽðçj´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´«J´ª~¢äÚ"ÏÓBÊ¿¦4yIãô¦ù‚½+â|ÚÏÒOÐ«w¿�^§Ç>3<cá§©ê:§©ðÊ> è{OÐ?Àr¢ohú¦}úcâžÊv¦w¿éé)æ¦Ÿ)<þŠ;Áòƒ�úpz¯“*‹¿Rªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª¯ÿ ÿ ÿÚ ?áuHQ–´,µ¡N;ØyØ÷±ããÁ�ÏËj›åOÿÚ ?à—5÷*î”æü¾Eõ~Û~�µ¥õå·ì†;ZSŠaÒè…Æá<ÿ ÿÚ ?ÿ ÃÍ(ª;µöªÞ‡Ê*÷1TôÕï×ÓQ`±Tö&½§¶ž„vyV>‹‚¨X÷qX/2ÁCU�ržÁâ°Xú
öÓ²½µíÅaè©ÙB°X÷qXà
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊßéöžŽŠ½”þ9E^Ê*ªv×Ö(«ü½”ü=e;µíÇ×jVvV¨¢±ì
§²ž¨J C²�ÚúZwqïaß§¥Ã¶ªŠ½úúå
«Pªò«,V+ÉØ�íÇ»^ÊzJ˜û9UR°X«v`ª}?Ñ~ßáí^>Ÿv«µs5]ª µ\*‚ÕZµV¡`B»VÅ±lXÓÚ\Ð!öôûzî>Ï_wg‡¯Ÿg‡¯žõf‘±þ£EòfdŸ¤ƒê-n¢aŸÊwézÍú�ø{w÷:?RÎ¥råã»·©;Äl­3é²ÄìÑ»•ÁuuÊÚÐm$ðMš'f�â­=ß¢êÔnÙ[Ò»ûL³<21w%�áñ›8¾{²ê.Z<ƒ{Ž?Y¬•Ù+JüN;x †§ü½Ò9Ì<Ÿ�™&­¦9›„™¼¶ø–Vç�~fŒ=Õ¢~¢U±
ÈßˆS!­IôUÇSl´å­.™¨†½7Ú·ÃÇND†ƒ(­�`Ï!»²‹UG?S8—‘­l/]ÈÇ[(ÈýÞ	Ýç8ˆÛ‹�a.Š¶sÇ—íM–lÅ®9FQUwºJX[6Â²Jâd¿M˜Ÿ~ä"Ç#¹CöøW³Iúü‚1òeÀ¹ƒrlÐ;4nÚŒ~iKp%ƒ´Ñƒ¼Íæc°r?¨ÿ ËNÒH\×³™äym[¬¿3/çË‡ûPvb~¥®9˜‹]k#Ï¨{Ú 4¨êQÿ /ýq…¼¶­×Zjä¨o—¨çŽ¹${ku¥ý}s\èóŒ¹9ƒ–žf5ÃJê6&�SŽôÊg{ž²�jïñEð\Ó�Åæ•íÁÙ îªÉ-–ù�÷oTé¿ëëƒ6[ýˆ2bL‡14ÞŸ%\t¬tóc»z“Qr8ŠfÀàú(c”—JKŽFþ­©ý"Cãtn4Qêâ’A¤nLÌ©·òÙvlšphK¼2ÉOÍA÷U6hž7Xÿ 	¾{¸Äe~Õ]™ƒ¸æSKÓ`ÓFM@å®T²JFgÍÑòŠypY?í²NçóË–¡ßÊÊ±éä‹M0p1¹¦€R´;.›QÓÎ<”Ãö÷,­­Ü›õ»ÿ *ËÒèõ3ÓÍ›-k^*yå`{Á…h)T#ˆefsF�êŽ´S}G™­sÎSýV…õ`l‘¹¢ R¡Æ”Z'?å¯é¨PHbkä‘¡î{…Mn¦ÕÏ¦v­ÙœC+CZx&I‚]<Í»òœwXl*'¿¹�.®ú-(ÞÂ?û‚–&ÄÑÓŒ–:žj´Vµ_æ.a¡Ëá˜ Q?A&¢GÝh¨§å(µ},šxžê9…¦ƒ77…ýGþZ|~Ûä‡€eh¤{"lo�¹£sE-±j èõuÆ˜WµNç49Áâ„�éOýNÿ –‡÷X´|Yø­/èLþë âÏ¸¨‹âkÌíÍ!p­jµQP×7ÿ ¥ô
Gê4½fš€ÿ 
Ö­v)³±Žƒ[Z´M6SWþš˜j<ÍyÈväÀêY,DP´R šQÕÿ ¨ºÏ�¯’RìÅÂ¸J'Ãƒ#@ðËZ(+–˜}ˆ3JÏÛ~spªv„†S) PŸ¢ËÉé9Õpq5÷ÿ 	=|÷dÓÉË ¥öL°8î%‡ÄZ!¦‡LY>aŽ?©Æ˜/ûxwÍçÏ³©uô“èžüŸ·|<*'j5+KðC–•¯ó C_.•žW4�QZe ÒÉ“É…Ï¼gf>å§éÆçÑÎ®POÃà²ÐæúzeÛ\Šq#Â^)˜SáBN›úy¹èrþÞôÌt‘õcqÌ@Æ•æhS4Ñi««ZWÄ�0K¥‰®”Æá\¢»OÚ´ÁÂŽ¶ ©5ZhLÚik€Ç�-CdØôP+>7¸Wí.r š‘r´¦8Üð‰h'âP ©1ºƒÜµºiØèú¦ƒ0§Ã||SôÓi,u«rÖ•ð 
ëJ>ŸB?Ã-¿€®>ôdé¿§˜ùèrþÞõ/Òÿ îóE]á•¢ú/¢tEß¸ uO†8 ¥�ØÌæ=Ï3…”âF9„¼S0§Ãâ¿îÆ^Çà@$V”-4AçHè´Ñ¸yEKœãî¤ŒFã ,«(k·bÓ5àµÁ˜ƒ�L±Ï=AƒEw­n/•`£±iZá•Â1PV¬º70ü¯-4çO�_µ1ü.ciïÍhÓ}.�®8S—ì©(ÉÓwO7=_ÛÞ¿îåÃ1qÌZ.·pS¦×5ºx"¥"{‰¦ò²±¥ÎÌ|­?¸£kÚXê»ÊáCÌ¤�ÆîžgùèròoQëáˆÈÐ|¢´s�uZ8ÌµÇ<$T–øf,ßåî~ Œ¥Å¦•ßJ]Hg_3«�Ü )�ð‘Ã×Ï¯}}YÐÍZWÍËOOõº	úrœK	7Þ.šÍn¡�ˆc†?È £ÓÅÉ þ8zùãìðáêµTïÑU?�³Ã‡ªÑW¿UDþ>Ï¾xû<8zùïQî«ÿ (Ä¬Xà7¬Ñ;0öXpõ<}!ãÝòþãðoûUvª¦<á˜V›ÆÐS^Û8Tvj#w,deìù²‰]^`²‡‚íÕQ7�Ôv6ñU¡Tà•ÁÜ
Š¤/4s·&‚þ¯õïL„Ó¥#|¼BgN™Ž&»‚tãòæ
õ›É«¼FåBEoEäpwjá…ÕZàî
c$Áí¯”~T*öãl{2ç·Wå5àŸ%òŠÑa{wéSg¼U=Âàr?™ÃÊ5à�ÕU8äpw¥.”:?†=­U/m�UF!eÎ3n®(ÐÖ—RHÎfŒxtf¢¹h‰#,Œ9^ß—8Íº½”kÁ;�QE�®gVË5F]ëÈàî”sÀ>%V¸oB¯¶Ç±Á¯ÀXÇÈs8×zk£¹x 3Lü#br›i`¨×‚w²×Í¹bi[,x,Q¡­.²‡‚wUbi["àH¸†¼•M|‡3±Åeî¯¨«_Dÿ ÕÝ‡v)ì/Ë¨ÿ l]iüÚ“ûlÜŒ’¸¨k»³YÄvHØyË�÷¦Ç#¦”|t¡¯¦4©‘á¯wæ$c+E€Péœ~UÜ7¦ê4ã¦øÈ¶Ð´Ç ùÇæxáµ0eh°PêøOàTÕäŽ>˜âå›ã2t�¹i†Á#hšÇòôêFÿ ¦t#'P–¸8�U 4åßÅ1±yY#fìÁ˜þ£÷&>FçsÅÎÎ
`Ó‹XÓàš2ùé^¦ÚïGõ¹T·9w•¬ÞJˆjÿ ö¤×(>V»ÅM(é”…'é?r‡‚† h&}|�rIÌ×‹à´Òä22ó0mL1V	[ðS-|¯€YånsRvpZÖ°á¼ž	¥íÎ÷ŒÅûqZ†Ö´’•SpLkt²8†€Å,ŽòÍ;±ðªË—ÏOÜÛTjçµÔvòcr»K3N”?j€d6½O*
D_¥�š& ø	ŠAx­_wcê×ê^O™ôÌµMø[›(;“KÛ™îmsí÷&€q.é×Â¨änY0“mS=ÿ zaþ°³kÌ˜|·ìÒ£�Ùç¥èý42G39”ÿ 5¥ÕÒ™ÆI}é�ø4ã1ýFËZËüÖûÓÚÿ Ž>·¿jŒ•Ú¹<çÀ§tÛ‘ìkÅðZ"ãæ{¨OòNúvät„0»j£[I ÂMµYbæ$à8¦Fæ;M(ø©C^> 8z­=ëù»¹G;qbÚÉ}à¢ù\VFòünÜh°ÀvO$QµÍ�ír¤Ñ5¬¥Á®(Æ×tæÌH7]ÄÆ×šJ×ì
Ž/€‚Ú�•¹µ£ðÖ�a±	¬™¢(A«¨jJÓ=ƒË9»æ#ÔýÇ»j3ƒÌ?U7(ºb¹d<šŸ/&Zø­3Ú<±º¯SJGËx§‚Š`>[ZA+YQû¤ôþÅoÁÍ­C5>V=Ä×ÃzËõ,úz~çÅ•[;¨†CIs0£´ìÇ8œ>ÄèÈ‰Øõþ	í- &Ä!aÛ™ NÇfŽ†¡t\ÆÆÓÏ%j¢úS„xÏÄ¢|ÌlMˆ×RV¢B<’•d�QÕ%kØE)¯¹eƒRÃ§ø_L@Så5n|½I1s†	�7 §Dp­�ŠèäemÕ¯à›™ô‘¸’~-é±ÉbmjçÖ¿b†h(çEð•±Ò´ù�lûTsÌÆÄ"°¤¢7®ƒÂÚùe¯àµ1»ÈN_Æ;˜6…$òÉ˜¹»vàº.k[…µüc�QÂ¸&61R	à‹þn)¢O.¢XßZÕel?šJ×ì	íq°®c¼#;ùæ9�‰Ž�”ùeáZ¦y…ZížR›WGCñ¢æ5•ÁÒWðZVD*Ø\	à�h~âº.k[…Õü�ŽéÌFßrèÉ>)+_±îÃÓŽ¾x÷¾c*6Õg
¬±´5»‡«�qá|Y.cDÁF‹Ji™ ü!Æˆ21•£gªŽ¥pØ½P`½dpõóìðáëîãìðáëîãÞù¯TêSˆ+3MAÚ=–=}Ü{¥ÿ ÁƒÅ¼æq¹=�/1ø–£zXÛ³¡:³nØ8¬Ú˜ �k˜kDÓPq±Ò‘PÝ�g€|ÂÚ°Þ®SÍMýÖéès9¹«³¸!‰�YÏÃ»ŠUŸ�†´U6îI±\ñîáuÿ R }vnîÉ0‡ôüh€– Æmvj÷]Ð Ë²«JÓLÒº’òìd³<¯Ç ŸÌÉ+1ÂÄv6(ÙÔ™öjUlGãi­;ÐÂ)‘à“îì– b¹ît±õÞwbÕGÓ/åxÅ¨A†BÌÞ*N¸µùtÝÜt®Øvü}HpõóÇ»ÙŠ�µãªÛF¾«Y�·Ú¬ïÿ u»”5ü½š·ž|ô÷'µÖ Õ3x}Úº†WýM+ž»x/¨}z‘ŠxV»B‘Ì.«ãÔølZH#vWO@_¶”F}<�G‰©­Vˆ±Ù›GŠŽx^êæÀšÖ½�Š®Êö—Mj™£-‰�«ér£–;¦\#k~ÍcÏ0v_r,x«MÂÑ1žV‡R‹<íQ6W9ºR<Å»üQ:yó@EkïðS2®¤Yrù�óÞ¥kÜDœ¡­4©L…®.‚a€v4!jCÞî“_Ê1Ré_+Œœq5ñSé³FÐÚø¢Ç“Bóˆ8Ý7M§sú§¸¸�Ö¨t¦^œ9~cöÓr�úYË�4’2k†þÍOF>©Â¢´T–›5jµ"G»¦Ù9A¦*]4’¸ÃÀV„×Åj4ÁÄ±”,®7Nú�YtûÁ·¹H\ê¹¸fÛuþ_ú‡ÝØß¥ê!ævÊnSkIêj-#NðAÛÅS5:zu(Zv…—Y§,iø®ÕN”.žñ»`Q¿I>`M$Œšà�rÖtÆznQ27;§-jÒke/QÄC	ÊÖ4Ó32‡&k�Fõ3jêDF_1þ{ÔÂG'(cM*S .†a€v4!à³|NqÌ€‘¹€Ä&ÿ ikä¾Gà}F¨ýC±¹ò©K�W0åÌ6âºÆWõòæÍ_Á3Pòz�oºûB«kç ššú�áëç»Vc$x�÷ ö®jÏ'¹»²çùx¦±¶h ìtð³©Ÿ¸Áz®Œ9™°sß…lCá-Åt¾�ÆjS0åâ�§ÈGóº’3šö³-ÞM$cçAC�ÿ 0ºÓº2üçX¢i-�}É¡�.9Û€ì�RÈÌ�-!·LÖE}[I#Ú£oIÑBÃ™åûiØu0³¨É?u‚ë§§…Ñ“y…žHë+à8ï(iÞÖ‡êßÜiWNG˜j¦ÎÈL´ÕÃ7¹Jî“ŸÔ£›±I#c2Ã6'-ÁMžHÌQD<�uÉ+T\ÒŸVø­S‹Hk©”ïS¿)ÈX(í‰ÔŒõs­ân�tÒ¾Wã#ér¢ÕÇb½
kbÓtÛñ¾A÷vO �ò5ô¡1ÚwÆ?1²Ôæi¤«kµjœæ�×8e;Ö¯Ðö Çì­@iXaŸ¼ISFXz„Ÿ/½hhÒrŸÃÉOHÉ§6fâB3G§,oÆÓ�¹e,þ“p„±ƒ,4£âzèG§sss=û3DÞ¯I¹Íá5±iºmøß û“Ÿ”äéÓ6Å¥pi-msÊG63,3y¼·C3â,Ž†ƒwÉOIÏŽb(æìR½±™a›-ÁMÔHÃqŠ1¦æ½�3.™æ­Ëpš#c´ðƒW¼àO‚kòœ�:fØµ¬x-»ÊWFM!{Û€sF<=ƒªï�œQm1ÉJ{�‹-$ËÊxª>'FYAæÛÃÔ‡_=ìÜ�üÍXÊiÁe‰´ÞvžïL». Ôx{"8zùöxzùöxzùïUÆƒyT´ž>Ë�Z§uÄïî™û£yY¥u|6ÀÉ*a;ÏÚBù]f6è2x�k[ºØIù�¹r×ªì¼;‰ï,¾TÐ‘•øœ0î¹ñ³¨áf­=cÆb½óŒ†�ãØ\ÎqÊÖøªÊÎ›ÿ -kêHØË£ˆÑ´»ŽÚ/ý¬¿b.kKhi�e™ÿ �.¹\¹¨ª4ÒÓ‚kò–×á7î™$4hAÏ‚FDÄ]R~]+TèØM¥U6M%¥Ù� æA#¼„ÃV�½ç‡7$‘œ¯o¢cw¶¾©E^õ{]Ç»vbSå�ŸÒ¾§Uå�¶j­2±¸0x(I¾^ÍTÇ˜;(àŒrr•“Nh÷ügcBuŒÑÖ’5ß‚†8”HÏwf2Å)ÊC”më:¯-wåðORyœ$íñ(0JešgQ…ÛYºƒ!f.c¬´29àöjG> rŠ¬�'³ÅÂ�j×,��¸¿ý1›(„ã(æ;”ÚiÔéâ×]6¯¤ÿ …�¥’f¤¬¨Î<6­7.m~ÎÉâdÅ‘´Œv� ™£lÙ2¶²Ìn£ŒÍ×Š\*n
žK’1J�Ü"’C,Sr“pTŒŽC1`KnJiŸÔkÅcyº�‚slyÄ_‚ÓüÓæpúNðƒ\ó!P»¨h÷€ùNð¢”¹æNc¶»“Ë1•Ä`Ï„ÕúÏ�ÍÓÃ/¢šs”x©ÒA��çiûÂÑ»9Ì÷79Þ¤sW
PŽ*cvY%t‡`LÔõã&�i¥x„!ŠL�s1ðñâ¢�Ò™b›5ÁO†):QEÌárQ�ï2Âá„¿*FLêÉˆq*Yžã‘îùmÜ‘ÛšT^"§Þ²³÷eò3Þ›Ù~=š™<òbç{×4 ñ§‹WÍDÙg(ã‡÷f9Zw.¸Ôró±Ö¢Òý;²õvl÷£Ô˜ÊNýˆ	˜QÅ:‘`w”ÈþP´ÐƒV4Wz{)åËEv`´ÿ Ý
†ËW9ZjÁÅË¬É/äÊ¡ÕBÇ|Ð6„Ñ	¤“Bf˜ÍÑfZ™6¸¢/Z<®<ÕN%Ž§Ýè£væþ=¸z|V”ïUS´ñî‰‹¢û¶®¤~ñ°…ùc¬AŒÅÎÀ&F>NÉæ“§›�…tô`¾W|TÀ(5TêtÆYiãµ>œ‘˜Ò€§£!iº¸˜�íå ‘ö(æŒft.Í—Á k�,˜e¥–‚?Êðf¡ÒVŽ 

¡3f;ÂÕÿ qk8…«ÉÍÓxÑe–I«ÚÒ	$­FÃì_åÿ ©¿wf³‹W^húšwŠ+”„Á¦ÓT]-)E©sšLxg#nQ�èÃæ/;ÔÂPzRœíxM™­"F8T•ªþêÓËB[êê!#9JÒÿ t(?ºÔæ³šãÜ±Ó|ÿ øyv¨%Ž,Ž…ÙÌ!=�µÅîl9FÚ­,�éeq	Ì„8þsK§œÇÕ‰­¤ŒðMfŸKÔq¾í~+GúŠ•ÒÑŸñ�
¤Lù c!Ããÿ ÔÌŸï&F>E+w´¨�…>ÄéÏíCä‹ŽÒ£‚„ºKvMÁ0Áû�­À«;­ÿ ›SZüq#Š‡PÁ˜Âê–ø#�®t’aJYhùpþ]�ðŒÙO�»rø'FÆ¹ïx¦J(Ùþ4Tp‚É\uzt±LŒÜx¨NÁ %|¶=ïØ2­D§LØÓrè5[ZA­WMß`˜Ù?þF–ÿ ½eÓÕCXiå–éÇL4¹|Õµ|*�ÿ ®<}þ‰¼;O®ñtG¦ã³bÆFÓÞªß3ö¼÷0¯4ÄÔKJ‘ì
U22jZ)_@Ùulué±¿�l�±8æ`Ú+~Ï¨' Ì­ÊÓC]½ï�C_½È‚s=ç3ÝãÛ#ÞsK)«ˆþCÑ
îXzñöxz•;´X÷±Oãìðõ*úY?W~þË�SÃ¹_@þ=×Hû‹²³c¨4(E9ÌÃ€~ÑÇÐ8´•Å¸øziès4f'f>Ã_=Ø£Ù‹Št­mXÎbº’ytíævô:,�ƒ(;ÔN7ËØñXcmœìs)£”´;EŠac)´Žb¤–QGEPð7…×òe8ˆvÓŠ�ï�”dg0!K²t°¬[@â¾¨dót¶åâ´…˜	Ü3pFHùª.£†Yåß`7¦ui4o4%ƒ¤S;˜<Î°ÐÓê2»8«Ü;Ó,nGœ�ä‹–7Ç„�8ãàÃQLðsºÑ–FÃÈÃ�TÒS$ñT8x¦LòÆA´m#z2A–8¾Ø’œ$nYc9^?Ž_=ÖÊ?ÃæàUF1žv.”C&œlµPpGå“dîcšây²Š-^Jä§–·Qûþõ®kqwPáÁ4—ÑÀP³mT‡|‡î#ïR~��ý¿Áhe<Œ-Ì}Ë$o$ƒ†À Ô?ö²äs·&2/œ÷›7gŠ›ûmZ^ì—û®Z¯î•þbÆÜÛìMl�|bŽi¾]=(Ùª[Á1»ã§òYu:)Yƒ›˜µK,YúÝ¶›‘ÔòÅýËêkòÓdg+±ÆG¯ží ÝfÓœ?#¿Ú¹@ñªê<ç—fáÃ·3£ivò9E]Íâ²´Pnå WEŸ¦Üÿ š‹Ê ®&ŠŽ†â²¸U»ŠÊG—rÉ”eü»h�´7YH¨Ü¼ŒàzÆîÚƒˆ…�g”·r€+‰¢$ ®VgFÒíä,¤yw* Øªö5Çy-0Ü²ŒŸ—béå?.ÅA€?Œ�_wg‡¯ž>Ï_>Ï_>Ï_>‹™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.eÌ¹—2æ\Ë™s.oD=|÷êW—Ž>Æ`UöúÃ×Ïz¥Tû‡²Óß=|÷¼²Y»¼8zû¸÷IöN»•{£‚§¯?�u£Ó:XùÁÇjŠGó9µ)ÚZŽˆ¦6Þ²gï–¸ªG#^FÀVg4\”^%ih¹ªê€ÃñlMgQ¹ÝÊÚâWÍ‘¬®ò³1ÁÍÞÌ{Y[T­+#“ä¾•Åfynò¾T�}7Æ½Äù›[*Æàá¼,Ž™�Û«Ù™ç+v’žÙ2ÆA£y”qg"ÜY²ÅeŽV½Û�Uq %R9ó¸ÈŒ$òA¨ªêÈØÝæ¢ŽFüUØBoÍoŸ“ªÈðÁâ³Fðñ¼,…à>ùkŠ=9ú^…eŽF½Ã`+NæêD@^2o�óAŽpw+v¯˜àÊÚ¨gxmmUÒê·©ù+ŠéºV‡þZãØ%€ŒQ[¨åüâ§ñS[éÙl>ÌVWÊÖ»q*»7¬ýfeµj³¹Á¬üÅ|©ún*'�Hk ýŠâ}Þ+3ÜÝå|©þ ÷†—rƒµtÄ­/üµÇÓŽëôþ>¾î=ÖúgñoÞ ý	ÿ ¤ÿ å]'`×š›©eúo!­¸b´ºzå�ô'‰+©ÈAwõqPð�C¨#4ôÍ™Hé:š©IÅ T3#‘Q®8­Cõ`Ë7ß@´ì�öÉkw&E sáŒÓeÍTSh´ÒÂæŸ0#;#”7æHh÷o¢—é‡N»·»
¦¹â²H+Ÿr’'ˆ�å÷££3p¥{ÛWDï–w(âw+š3Sv+Jý8ÉSnC©‹™ÍmÎ)�Ñé¥†VÐ¦�¤UAú�ÜŒi^ñ–¥Kùè\ïyQê$¤&­ð¡ÁJu¾fGållðLvš"…þYàºOå-¾Ë(´ñÕ‘J`7�ä´§N2f6÷Ñhÿ ×âZOwÞ¡ýgîZÕø(åˆ 8º·ñB`>w”¹çnk¨q%‚ªH�Æ(µ,?¹£ßÃïO˜s¸?Ø‰ŸM,ò>òÁOƒ„mÆ<Â—O|Ã0i m”é™tÑŠÇÃŸM0´{‚ÓðŠnšCò˜9}ÕPj4ß,Ö„-(¶m¼HL’•ÁÔ¯â˜MËAôÞþëü¿�¯žè>™ðºÎÚº1µ²F9OúÑ?S©5�û7URd”4>³+"fÆþ
<òˆf´M¸,Ú­H�Št£oÞ}Ê£2ŒÀà¢c¹šÐ
”éƒÉO3”“MGgûÏýFŠ…²]§ÅC©›+±«éðøÍV”Òvl;SLÎx›ÌsØÎ•3°Ö…>m÷`‘GMGGð¿uVRj÷¼ö;§•Úyç;iþÕ¤ÑhÄ×ŽÅ§t@óTÓhLšež._Ñ#†�ƒ™Ì¹ìˆBÊâMM;%�œî
8äÁí­~Ôuz*ÿ ÜŒ®®ªL‘�ð[·ŠšŽZV¾”†�Ò`�x­4‘€[>>+M4`d�œ×ÅE>Ÿ÷#ÙüÓ].J´áÃÞ¡ K]SD#ˆUÀƒ‰¢è°VO.Q¿™�Ý�tTèÈAv?nÅð–ž	ÑA–H¾v'}L½I³`R6`sª(j›.’L4&ÅG>©¬‰±ìmÍ:�I£ÌkÇbn¯JGY·iÚ˜ýfVEÀÕ¦|`Æ|Øø ÈE]š¸à˜Óp >˜wG_=Ò=Gê¨zÖ­pû;2LÜÃg‚Í”º›j?��½Sº8zû¸÷³d³Ÿwxpõ÷qïP¯éßì…]Ëß=}Ü}“ìX�c0
®ÄúÃ×Ï¢²°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°V
ÁX+`¬‚°VôC‡¯Ÿg‡_<}ž=}Ü}ž¾}ž¾}ž¿�•×2æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ˜.`¹‚æ™]Wÿ ‹›ÿÚ ?!°Ë¼äg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œÌäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘‡qœÌäg#9ÈÎFr3‘œŒäg#9ÈÎFr3‘œŒäg#(2ï7<þ¨>ScÎnyÄtLS|< ± :jv	½‘+Æ=‘žtÛ£NÓ|ÕÚ ›A¨EÔJ~ \Â´Q¨[´{qˆ?cÎnyÀ•SH�f9t�Q”¤¢Ÿ@’FPe�ŠÄ±gL2ÂZf

†«K.ßdÀKmˆ«€•¼Æ™2�‘)ñ
A¢£¯ˆaÛ@­j<„À@–Œƒ[Ò5^�9¹ç)X%eâaËUwB™‹›Zÿ Ïš^µÐ¹HÂ¥€Ì”Šå*[:Ëc¤R»Çu´lGŒ´t¨`c”YŠ�ÍŠ<pi³‹ˆªnK®™T	š€’@# îc�ŒgÐðlyÍÏ9‘„ÐÌé#Z6Ò²¢¿ Yˆ
Å6råa„)fe¹7�£ùB´¢W%{ ±Úp3yœ¹M$ÄÊ¤›PåñP1òËzPhfc2ØÂ²›!íF>å‘Þg|ssÏÁl¶Z[-úRZ[-–ËKt´·Árô´·K—-–øÍoK–Ëe¥²Ùl¶Z[âØó›žDà”Øó–œþˆ÷k·ßþ_ï¿Ý,òþÿ ùý²ïuþëü×Ù//ü»ûtþ{~ºÙ'º_ù)÷Òé5ÚK´¤ú]$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’â‰$’I$’I$’I$’I$’Y­Ÿ!d³áßÁ³ü=ÿ ‹¢ep‚Œ„ÎA\	O¬'ÖY.fm4
‘Þ X?X�Xwfî†ù}�]3–rÁúÄ ýbsbeÌQ†e"zÀAúè0G¬3uLëOœ(\j¥€Áb¹‘¥@Ì‰¨,æ ´¬1j6ÕÊÕÍéˆëë2oþrc¡ËÁ!¡¤{¦J¹‚æJ¸cÞe%"UFDÌféÉÝ73VQbcfª�œ±`Ý1ë–[•Z/¢W/2íÞŒÌ˜}¡[cpzB9Œd™c1ˆL²¢AÇàfõÔÝcáN9óuŒ–-©@1ÌNH«9‹v¡
ã²üCæPGÐÂ0'`äC)kÔ¶¶0¥ª„˜høX„Át±ˆ'´‡™(Ø®ú,YEÃàìÐ4-N(U±Ù4Š–u´0‰‚ê9�®fFƒ$&b³™´½T¸,�Z Å Î&g:~˜êIÑ©FÈ,"9�‚¶–Œ±&&€ÌÚTÅÑÆJÂ¥6&Æ¡$;qÐPù«ÖZiÙF‹D5"È‹™`‚çY”åAÚ2Ô`ó™PC˜è%m‰ŸB:v|6iP}ô; †^qn”‹ 5Dðž¹L©¾¨n ™œpÍ£[Bª1uª›Ê”´†5G,&øF¶™®¢©v€é68Ø¨ tÀ7QåA·PÍ£·R•S E¶„mÚ´BêtXHv¢”˜öŽA3ý ‘óxHu!•!P@ê.U Œ,€‰M‰IFf"Ì]º�bV Ý¥³"
dJ
øNÐ/e\"YÌu Q)K¬XÈGÂ²Y,ðÓàÙ,ÿ 3Qá©GøÌ¼»	a™ŽŠ4Ö(a—€Ì³ªN¥6çÀ7ÌLR™I–u	½1]`±—Xw¦J¸.ÒåË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—ò»Òëd½&ÚiÃ˜˜áØÕ¬$¥ŒÌX†0[3pÍAU§Jô€y‹¢‰o)ƒ)ÝÌ2ÁÒá�fþ–næe+)ôh         \¿‘Gñ#¢7±¥KJj½ÚdÒm„nˆ>ÂfÅ]’ŠˆËþÇù7¹þDXýŸÉÔþÏäýœŸäV�ªÿ %_¹?ÉezÏò ¯Ûü•�¿™¸zÏò‡÷˜7ý¡Nÿ ´”y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉžLòg“<™äÏ&y3ÉÕ†ÈÌÚ %N8—iCÃ"æ!M nÑ^“¤M´‹S¯éåR¡ò—àRác‹o§žQCãÑI¦f™÷�N,¼‚jŠC£ßéí¿-'Çª.Ì¢ð%Dæ-+×D¨Ž¶”¦ ®c1«¿zú{ô¾FnÒñì‹¡ª({%í6	¸J7ÛO~—ÉXCJ�*JÊkIHP§ì}=ú_?¹âÙ;y\Å°n)è|‰ÔËës^)É®zÿ Œø4yÇ+Y]ë‡rém±o`�µÔ(t]¦%Tzž¼“c…‡MiÌ½m¸ˆ6-4ÿ Žý/�©))))))))))))Wæxh	L¼Õ�ØÝuK¡lÛBdK‹íŽ:’æ+_.&¨LÆµ’òZ"–U-Ëƒû .�¼�ÇYfz‘C<±yÉ0Ä$¢ë)iÖ£ÙYm:5ƒŒÄçÔ½È±©r)ÒÜw®‡,vZ 2v´§æ{œ¶‹Üí:gŒ³Ùbd¼„ ¦`PwØ~LeÑ@v/�?m,¸ªc†ù"ÎžY±q‰ŠÌÍÁ\K_ÞÖºœšlÇÄï»q6¹zvœ áø›0*‘qµí˜ª{O;”÷Ëh=c¾í›X‹^ÌYÚm>«TÎægÝrÄ:èºCHÙÒáµê�¢”^ÌÛÐÅg¢èy"WGmÚÎb=N‚z„�³ˆäàÂ°7VJpËó•Øõ�u}Õ‹Ðy¦Ày°¿h0°ªóª^s ‚XÆz’¤R±ATÙúOP¬i‰äÄ7«8³´Úå¦´6ª€»¾“™õîˆmvoìMÄíþ%×•¤)))))))))))).[.[-—-–Ë–Ë–ËbŠ~ß…©Ø7—÷P;wâ*â©v£�{q+}É«{&îù!„žS`U�Š�–”Ò‰€1éC£ƒ¬ðÞØ€ô"·Ú¡ÙWª×i¥CÞå3½€!ÅÊÓÛƒ±½BŠ|VIU¾öF1ÉÛ /Ñ­�±…-Õt©ÅÆ!N£>sÒ»ò2� ¦Álé˜z&KÌ §IE*:—fcäGSÃÖYª†®pdmÖS×é°VTÓÆŽf‹ V/R£k–“:•n&#Í	C×mLWN|S¶š}³™÷žñ÷\³í´I¦ø—M»´º­Ëý$O8"Õ–[y×åºŠŽU©¹Ö~ÞO÷`Uü7©Q‰™™Uï‰ûÙ õ„ÍwF!¿Ù„cñ|öÂk}�…¨’SHÑ�K¸U§äìå¶1ðØ‘@2ñ/îwŽ&[-–Ëe²ÙrÙrÙl¹oÈ¿áÞb¡¸ôŽe� ÒÚšn$
¸H­6¦@æˆt&œ«çåxò•HÞÁ�{„l‘½¸n	l«Úuw–µ+U7‘á.0YDuk´f’¶ú²–ülì*·¸ÊÑÒ‡Z�(·Ë=¼ZKÙ�,AÂnð&MÊÞ±›¥º‚÷Q�#[#�$Qm³¸ªˆõœ_Pt²¡X6mïùŒ7 )›41{«|££X½´
]]±¸ÈÝ0îS’fbÆ„7Î\8„VmåŽŠÞ 7@‹Ô,™q@Ú—¨7Ì;þCôQÚ!ÚSl'˜ÞN‹:ÌZ /`AOÁ*$Æ›].S4C.ã#uŽ«*.X¿éUeÒÈ¾ÂŠ‘®£(]é,Ü¥)ï‚Å®¢7­lí=•e–èTë¾Xè­ã”bbñ[C«ŽLÞ @§Bï1jõHN!˜>åèÜts� ÷€è¨.=)pÃ�#¼	v/pëSŒ{ë«œê«Þ4bH3þ'ï9ùøýÿ ž3Ì¬Œ;u[óñöîB…J³›‰1áÖïP½­„ƒ¸7{¯+Ÿñÿ yÏÉJ®D¹°AŒSžd«€tÜ"úÂ~ž_yÌè;5!L>Ï,ÝÌŽôÏ!nM¥æefâèª‰�0(—ºÏÓÎ¾Æó£gZÍÉ™)m1¢ø6Á(±©±å“.˜Xâ×YÒfÄBeÑÈÆíõÿ Ÿ§�û›Ç9>Ñ+¨/”f,©}ÿ 4*7PeE©°Ä¹žê ©šêÆ�Ò¢MÔ*?júzµöÌ[i°†SN#†0Å|2Ï‚Äiýÿ Ø!—ÐŽ§•�ý•Ô­Ï3séo¼çälÌ+MïËd¢Au�Z¬ë­L!�Õ:ÔŸjðØ±Kûwü"ª¦ÖUÝ` °U�~Ögìl,‰Ã¢\VT§'VZÔÓXcâåí×iÅ”…ô‚I¿t¬W’l™"£u—ØíèÔlWÃR©jÇ«ŒE&ÕÃ>tÌ´¯î¹¶ÁëLB’ò„ØoÒ4$ºïå/0›ØÔÁû¦<ûC)Ðÿ ©”�Gg´	ßF| ‰fGf	Zñ¿HE�ÚÕæ†_5!
}Ë\®TÅO9û`.VÓr…öÓŽÎ(®	i†Þ‡ýDŽÂŸÙ•‰0	²m¼xß¤dUFéìÊRÈ±fñò6K«�åœ?Ò*ý"Ö]¥*n�ajcÞ!ir•ë°ì?ëKÒÝ qÁ¿,WœL5•�g!ª4i¼ñ@WKÃ¼ÙaëÝâfºàüJ\ýËÐ4Ë|×”­®Ê³Vñ²&^eåti¦é˜W±FéæquA}%HIUš·‰¹@§œÊpŽ%äFË†qUA}>Cï9ùr6•.… í2d©½¦ð‡ëÖS._Þ?T¡E»ËRôÿ �	µÛëÄI‰Ð¾e.‚ßÛ»?X Ž' ÿ [ÇëO³ö›žS¢Üd5µ²@:ïýË4õÂ¬ Ì½B“Æ<·­¢5I7½>Š áŽÄMèï@Î±Z:SlìZÜ;ÿ P’aÿ 	”ÌKÜNÔºd®ÒÜt*+•B®ì=P¸ß� ì‹g¸1!:øŠ]üÑ†�w3ÝÆb[Ãô”Í#”lq‡kSë”ÎvŸwîŸcËß„èU€¶YeýƒÞðÞ§¡zžáÃ÷ûG%Bvèéq¦X/ÜJÏ2×,°ô©™Z‹¾Š¶}¯$«�*7¾ÑÅ§Ã¿þçCÿ ¡ï~pÁc—ÚTÀòíkÌJ¨LVðÄ.D‡èµ*i’ªžWn4*L¬œ»	DW6ñ½)tÌÕ\¶c`A9ùg_,A«>‘½ó¿?îŽˆZ8y\Ÿè]»B»Bê·ƒÎT´Ò%“º28lU·ù�oŽOø¿ö[=¿ù`dàŽöÿ #€¯Öòó)\ï}^s waz±ŽWHÞã‹y�7„µ')ªŸîl3|ü¼çädp›J?dZ�t±P[1m²fåm£]¡vÑ¡×üxUpµÏ~ß™üÀïUÜv� 4ò§h^Ñ�Á %R5`#ËY¿vfÙ…-Ó¾ò Úp]a}L@p+Ä>K¸¡ù‡™ho­Èôx/Hx�Õ	Ðë§tÔótýÂcOÍä3äJ@fæê¤†Ukâ©ªÕ³—h •¢Õû†8³]Ø�£/³nØŒ\ËqF{B×Fú÷…QÎû¥´T”Ú' í´!üÒS,ÚÎŒÃ¢¾b+‡–))²³S%¦¤¹¡gÞ#v.Gw™µ¾†c­À£
Ï£:™Y7k:B, ïz3Ž�±°a¼.!¢"½­¯h1Ûn'Hv†Æì7�.­uï0ZaÈD£ôƒ#/°ž_kå(5ô'cwPkQ‘ã²‰¹jÇ™„•å%ž&Ô�Ow´èÍüåO¥e(z»˜y
›�ø¸7QÃš•p-’ŸwÝêWNæ…X7»{ÂešÃy‹=ÿ ¸”^N^õ8C›dèkÞb?¨ÜíáìÄP5;õˆü ÊQ•±ÏúŸ„D1N\Ó¾:×)˜a+XnÁÊŒöÐ3ï»Z®�Ì�l»¶û�"p]D­›©o/�÷œüŒ£Û€Î8C>Ñ a¤&Ò0OHe>ÕâÙnˆÇ¨—Ä=Øþª"èWË�`©6F7à)ºþŒ6 Øøˆ%9ÈÐ7=0Zì‡Ê¹ÞuÄòÃgB�Ð>gï9ù*ÏŠ~ÿ ÓßyÏÈÎˆL“TS Á%b0BZ�P>ão§¾óŸ‘¨†î
\MÔMÆœŠ$Ô¹L5cN4¹s×ÜÛÅb±Øw|�ç«€õ
l–}-÷œü�id€ÄH—0R¢7‹£ ¤¥Œ‘‚ýëÂg,îëäDc—ºÐPñ²'G$rì-pè	j[´9J½P%h££Þ»›Ô`[Ns˜’‚•vy</›€í>¦ÝDÔú‚k\>’ªÍž[ð\bÙTmìð£V»IÌj„hí�
)Ò»æ¹¶t!9è�X<„g¶u4OYû@wX£†�ÑÞÈä|;È3ÙZSlßo‹Þ«®|Øö‚Ý¢ÆëïI|ÿ / ßne¨C` <þKï9ù ”J”x*Q¨A‡q%þqùc»çÒT. üwíÚ=zÃ·õŒMØ~­�> ©ez&DP5³¨ïÜ]Tl	@¶Ø4¨ƒ2Ý$´þ�åØ¡ ¼Î¤`õ±�
ÿ ó�¼«`÷^ŒK_7‡gpâ~ºâŒ´åÜ^…¶ ûy@Ž»3*Š
ÕÐ
•¸5Ö0é�òûQ-´§oB·»t‹¹Ô£½y�)Ì-[¶eW·:ËþIm¨
:ÝD1—i’â-¾ñh‘";½!*f[�Ánj!ZÙrÑÒÓ¶
æm
®»TÉSíÝø:JtTÒ6^ê!K\ VisÃ°˜‚ü„Û ™ºßhÒ¸Õ«jëîÇ$ÕÜ:	Ð–‘ISµ‘-´ÚÒW´j+s¤€�ãt%¥—\Ë{È/aÚã=Œ=—Vf_au-C7[u…fÝ`£°F°æ#ívXõËþ§›Ç˜QñÑu»F4mÄ’ó©W7rt{ÏÝ¸z]Å›é‰ˆ¼Ä!t(Æ%4=5 ß#.;Ø]�Þ€U4®�AÚW�YWKÛä¾óŸŸ�ßðÓ‹ã¢"eaÿ bK�¶cˆÞûÙÕyM¸·àÑnqS¸‹;DÞ5øšòúÆ›eÌúgùÕå¶?äÏ ßUþ“;`\z‘§EÔyÇˆèÌK`fl…´9tÛóÒ/Þ£ƒÜþ£¤ËŠVÀ4WF®¨u&Õ›·x€À4½œ²²Žž‡`êÆÌ{N¤*mR$ð‡%¤vgÊ=âõqF óRÍIenFlLPé@-Y'B__š™èS·Yj1t_ð›'­º�Ræm=“ƒ°ï¦&@`‹Æ�×JþÆòQÎäC
!�]#ÀÄ›°a‡ºÂÇô`1S.	¹±Ðìo¢UM²ŽÉý6ö™ˆ&N¸'yp öuŽ…2…XõÞ}ÒúÌÞk/¬Ü2Ew^×°U1c¬Gmw|Œ H-”VýªéÜ:¨èÏ”VZ¾ÿ ')·[©4BøÞ+Ò¦ÂÉ
:&Ð”«ºö¹r¥°ÜMÈlLO£rÛ¨CØ¦9fXgî_L·®ÙjƒŒß„ßäŸyÏÏßÿ C^‰;ß©ælÍãö }s7ÈnçÌ|6 :“ö†¤ý�þCÿ R¥J•*T©R¥J•ö>žý(`•*T©R¥J•*T©_ ~çÓß¥òUËødEêx©Ôº”Nå~—^”_ ÏKÓqX#¼åœ³ž#)š¦JàÍ\BFtO¼Mxrn˜î›ÓOÐ	ˆÒQ÷Cµ� ‰fGgN|“~Q­Ü³óáË`Rv7Ï€ÑºÛ¯6”kÜŽÒ[`+¿…Xlž³Ïw7?
™o@Ý�-CF±Ãg¦~BñDó7CEˆÂéMÿ nïV»½¢&Pw©. –D‡Q&öGŸ‡ö°Ø˜öpF3Ö£sÓðú@„¾�Ç�CMahìÍ„Í7˜æu6)Ðx«Ú=›òG~ÝRåK£~aŒE¨­kX­A¿ôS4˜â” ¬8 Z<Âñ¥h¹b…oo»?¦AŽ^uã¯z¯'n:ÁU‹¹óLôÐ_–?æ™Q»½´¯&0‰Ôe3e9ž§ÎT<›=bÖ ·‘äîNšó¶/R$�QK9ümàŽ‘ÒãxQš_VôEêBçZ›¦yšºv®u…ÒeéNa2´<GbYÞ™vK­ÁŽSºQË­ªN—t±/Ø(ÿ F«Ir�ŒPg<Þ³o5G~Õ}Yy?TŸn’Ù,)´ÖÞyhö6f Ñÿ qå¥?†ã
Øß¤ð ó2ÜÅuÛž'a9ÕþÊ~‡%."*0b’ãÉÃÃs›' íì(�ãDªê½Ä7P;ÜJýÑCŽWA¹êÀ-5ô/±5ŠÜØ?Ia´ìº*…ÍèFø[¨ì¹‹Ó|un126Ý—œb÷açP×òYMÕµ&÷¹üN�Üû­Ý:Üi—#b:©Ågz˜¡¶ÆôM¢­�Ç¨Ê‚.�S:åR–ê®ÑZÕéwérå4o!(,DöKÞÚºßø—¿µÿ ØÑTübuoC6B°ŒlMØFÓ®ÆŽc1èÑm®¥I×:,ÎlüKÍ3ƒÐní…¢°ìÆäÂ¶ÎÈÂ6 Ûµ s2†µ�Âo˜I·ãjˆ6¤é�¡¨•Vt¸†¤d6æl&%"UHúz«wÿ �SaPÞÿ ñ¼
œza„ý“»Ý‡5ª&ÀGo-£ÜïÏŒM™'_våŠlkp%…èÐMæåWµ·”¾Ô,ü~]/—œ¼År�ž©\“«wª ¬ªÚe½»ENVzÎ�#1‚ojÐÆw–Ûë–ÚöáèÎ×¡2V“ÎÂà! Ñè¹Âiÿ àÒÛÄ+Nß�5
+,#]ª÷eŠ�-d‡I¹’ˆƒÐ1»»�E\>I/³Õ:kzº%€;6#ŒlËìBûWŸ>êº‡b›ïó�p!4;þb MBÚ)ÙCoIf–”aw^ntø«^FõÄ§™2õU‰ÐÄ¯³íÉf§a¨•j§ “cð-WèÍ¬Ëúˆ.ô=!vë¼ð—Ý:Àˆ$¨Øú}Ï$0Åà®À,®ñm2+=ÿ ñ›Okk¨duKuïPx>fQÞØûýÔùy«]P°HoÝïå*¢üÕýûpi†?ýö²Ë¼Z@¼t}¶ŒùÌ=´ðÁç.ÊTL»ÕÀEa‹—Ë &¾©£èBvkQ[ê`²s¬úa›6#Ìþk÷¹B`FÊwé\Rå\È£Ù³Æ;¦Ù7©UÝEJ¨H•†›Ñª -Ô h†‹ŸïxÖïåÒ?Ü	ôÄqÆãÈìkW¼ÙƒË@ŠñQ½kD¯}{ø€6†§nr€b ïð(»¬÷Ñ)éþBàÐÙ¨± Æ´;Í£å„DÙ·]IÏ¢´òÓžûŠÚø:c—]@6<.‹ï§L9uðÑwY•‹i‚Êë‚d;µw›üEÃGWCËáveÿ P< šb›¨õ„¥Trá¢�
<k))œú°‹Sž];˜è½O§¿Käeºe]£pö!( Î(h“e±ŽBR!ÕÚ¿¯§¿KäcjŽ’€Î‰„‰sÒq*¸ît’×¹d‰� ûcÆ;@_¥ÿ Käg¬˜Û™-’¡‰TT@©5,	´e	%ÉI„/uÿ ŸUG·Uèq-ÝcGç¼³.àÓ-¶,nt·Sàáž_ 
£ö¡Ÿ¥ò2	Šô€t€º—§¤B"Gßù÷^Èÿ �ë¬V¾õ1†àöîÌ0!“«ÇižvòÇüÐKN‹~ElAôÝì–5©c#ðt:F¹ßTv<áq\˜mÿ FbúÁvºÄC@–Ræu96Ú0Àè…ì_uv‚ÃRò.ˆÄ –e¦²Xù‚˜Æé±^µÚêoAeGXƒ‹�ÑÑ4ƒÔpöÃ]”Z=û (µJ¿ù7Â"Øró+„;ˆ¾PêQuãŒÅÚúƒ×‰�Ç½¯¹çþsô¾JD¬ã¿ûžÞìŸì~~„Q;œÊgDI“�èv‡ÝªWiß“>¿½/ ¢ÿ qö³»…9o9ŸuÊg@uµ×êQ0}ŒU[–1J^Ë¬h·Ù;“õ?é+¦X:\a�ô7oiC³æ×·¦Ìû'í]¼&ëXy­6#íÂ_©Á{ÿ qÜ‡æ’Ý†¨˜ê×Ü¸÷êceÏdÉäˆæs¬ïU^qð³³‡üÏé|Œªâo�`‰K˜¦IFÓ5
¡MçÂèèPvIz;þ//êWh×êàÞâ}‹çR]ÀH7_›¼*3Ø(›©xUov~L`»ïp”5`U¯YUý’È�-¹Yé)•¥\Åv¨µØ5†ÎÕ	¤)­®TÒáEž‘%}Ý ÁQ‘Úâ…næKìèb¶eëJ¼*·»3¿")|çH,P³Ú¡ã0€•ºz€T
Ö®Õ)²�»‰ÅZÄÃÊ æKä©Båz ¤ÄNèK&2åÌe¤j-ö:}=ú_#]—NÉyKpª©dA—’¶`$Í)ÿ l}=ú_#%�_¼?céïÒùøýÏ§¿KçëZ‹¿3à¨ej'¸œIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœIÄœI²„ëÊùøzóûþ;óAÖ7�ÛÅí+Ÿ£7h„à®;AÍ¼aÎ“ç_ßñ?Ú'Jž‡ÒS—¹ÛÊ–dvñ}‡:O�²\¦—)ðÛñbÎÙçßé*†ÿ Ï‹ì9…ò$p#“–ô$‘½:ˆ.±]`Ýà­©½žUÿ Ÿa¾Ççé4¾D!%ø~Öë34¥bÑ6—å(ç”ßð%(:R#@|ß¥êkïíáó¿}DS4q))2…åÖ4êþÌFó%˜Ã{¯(ŸzBXŒÅAù˜¹Ùš/k†éU4µíž`Áa²9Á){"s»%WEÁ%¥,oXÀ#v¢Z÷N–iÔMaÇyÓ5+eö�ÍÌ%™˜ä!º üÀÐþûeÚü L�ó‚¾‘0&æXÄ›áAùŒwúiÐàVbÐ4sTÔ]"Žlb"ùÄ²·°á�Ìí�S‘ªÜ@XY›ÝO+g5çn@Ë:@ÝµÛfn�Å¥ä@eIÕ°Ä^-Õ¼KøžÒt(·h<ôÇÖ6ÿ ©”2êe–¿UÎ!´ ¢Á’¼å”µu}¥ÑÍ’ŒË^â©¨ o¸ºØÂá-Þ‰{€Ü&o¡O’gJÕN]¾=œx|Ï 8†ðXÊyJÃÛÆÅ³DÅUEÁUEhí,m©9Š9ãÃúOÇ£õSí�’Æ=(»nalâÕ\Œ‹îaŽŸ!xWø6—ºµ÷uÊñA -p¦ÁµeŽ3�±U¶ÑŒÏ 	^båú-Ë]AäK› ÞwaÅÀ_©¸Yh™är??�)=Á Tèrõb…è–GüÍ§jòë0(ØÜyY:�WÖ³YnM‹ü‰‚°à“ó1°öÈ¾ã˜§êõõ¦­™/ýj�õÌwJ;)§×;�—õ‚n´'pCˆ�7�˜Qƒ:%×#´,˜`¬ÿ Î³:6Æ/—2ºDsÔÉÙŠì»®ã˜Ï û]pûö§ñƒ€#%Ivæâ>U‘WÔõ‰�¥>Si¥}?q;¤?ð´1oJýs2è*nýææ0ìfcú¤ê2Zµ_{|WF³“¬¼À¬#÷o¿hO´Úk>˜½ÏËÛ*V±ŸÙ†Tnàu3›Í•qf]l�º‘æŸ{ÍáéÕX)†.BU	g¥�1,á€"ÃE iV£ûþ#5ëñ—¦ã¸þwXßM_kQäÃt£}Å{±ùP]²iáÚ<ØnÃ=è^^ìÍ:eØÅªÚšÌ8ù3{í]@åmY°Ë º3�ï.æ�6Ê—×ð[.ê>Bgƒí¹Ü¼‘»P* EÖ m=8 mŸÍTO!iü=wÐ©aÉB%oÞ�`p~Ë€NAicu^Þ’ü•ÓkØ(o)MÅ^ªØt)”&êÀ´²ˆv‚ÌwÚånÀ.÷èŒ°NÎ=ÎŸõ‰ é’Ú3Ð�¸ÓV‹¾ð0³6Þ-Á«zùŒM«áÇælÈîW�í D£ŽÏÌni¢bàë‚-ùDßƒ®#–wíu¢^1Ú»… ;·9gbøAU
Ò¡B‚·„Lf�·˜^QQ’Ît(-–êÜ‰“ýYP3r¯êëX®e�^«^� $'@UL·4(ëùë**®ý‹6ç«)„Æãý � ba²~0‘¿©boÖƒ;ÖV_\W¥`ã¾YÕl§û?{Æó†|!cís1P‚¦é8&Éh£t/Ðñßð÷÷§ŸÈðCq…W´ÂÊßB»�H^×b}óînê  ØÇ‡î9ù+w˜Æ! !3DAC ³Èÿ ñâöƒ~’«“õïâûŽ~JD\²ÜF‡4¦,EXÐE,¢Ä´¿ÛÄè,w�÷èþ¾�UUtüqÎ“ärÆ¸ºgˆ1*:•cô¶Síž4œ�H{ªå´Ý3ž’þ‹è	ÝÄÿ æ—ÀûŽtŸ!D¢RRRRRRT©DS÷þ›‡ñ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª{Tö©íSÚ§µOjžÕ=ª°>ÜsòU üCöþžû~FÙô¶iÙ¦ð±xD»éíöüŒ±Q¸d%ff#Q¹�aÇÓß¡òWn�ºæ�DðñGŸô÷èi>=|g÷>žým'Í°ÃI¹Öqçè,ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌùŒÌÌÌÌÌÌÌÌÌÌÌÎãÎ±>5J•*T©R¥J•*T|_¦           Á%J•*T©R¥J•*WÇHÃôä           @|õJúp           T¯’¹zY/ÇrþÌ|KøþIf–id³æ±,–J|…D³2TX‹¸×+P2‘Ê‘ÇLÃB’²‘Ê, %%e%e%Æ%¤¥…¡RVRRR"¡œ2• " ›TL!æ=	ºŠ’Þ&1ŽÈµzQ§o€Ýñ˜°‚[ÄÆ1Ù t£NØBñŒMµŠÌÙ‰–ÔA7›cJÄ¶ \¬ÇyK%Tf3s¤7›`¶*"[¥±&f$Ù›±ÄÊÌŒÙóG‰W.Ît­B’<» ‚t†&D9‚�ŒÃ©šRLì4JM²"5GãZ#÷¾Râîm–Yc„¶ƒ±ƒ¹ºgÒµÂW/ö> :;"´/zK°Ê9Á�šv‰rÊ+ÈšŽÐl
†`®´9€Ô`j|…Ðäµ—&ÈÌÂÔl.ã¶ƒàVµ*T©R¥xªV•*W‚´©R¼*Y ÑR¥J•+ç’À:"J%%J”•)*WÈ%ÊÆ@•(”•VT§Á¤¹~ñ_�z.\¹rþ£fZ4;ÒK$)yÐK#¡¹²fnfH}C¶¨ÕßJÌ¨š¥gFu‚1ÌLBÅ�:Çê"B+ÀV£ j> 4V‚ÁÔõÿ œßÿÚ ?!ÿ Õ+ÿ éråË—è[—.\¹râËÑÖåÅ—­ü7K—.^—¥Ë—/ÆÂW„ú1ÐÕñŸ•ãt~iR¥J•ôJ•*T©R¥JñÔ­*T¯‡ZT©R¥J•*T¯ý¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹ùð4šb¥Úi•*TÈGH–*T¨xR¥iR¥x¥J•+J†‹5ô‚‹F²�fl†ð/ÀQ†€ÕH^2xK<DÐ`†µ¦�ÒÍâ/æ/ä5\QðŠmÖß¤7F2J‹¬pÐXEÁ›#¼0ae09ð%þ Ž¤_òÏÊƒ¡ƒZêšé^ªêºI`†HdÖÞ¥2ïñóÿ ƒét•*W„*W€!¥©R´T©R¾£o‰¢jpÔ¤¦©Z!ÔYÂcQ-õZF–ñfþrô20²²’’²’’’˜˜,²b5ôýü4 ÿ ëÉÿ ñÅúxù÷éãçß§�”V„•+Â‡éãäÇ¯Âu0ý<F Â9ƒZŠl›¥èDúÖ«ªôÜ½WéâT­kJøuðëGÅ°íË?K"| xe`ÐMÃäÆ¶Â
kâŸâ_Œü‰òV0Žºbª$hª›¼=qÑ…P¢o|CSà\|,<.—kãë$|Š‹Jæ0C !GFînðùÀîCA7þ+ðßŒü³¡òçÈÞµËð—©z‹aŒÓ'æ/ã_ùçß§�Ÿ~ž>}ñmíD¯¥�Ÿ|8n�ÆäO¥OŸ|=rÙf#¯ßÑ7¼7ñÈ†~hù÷Ã»lÀÃ4AËøgÑGÏ¾.d‹í7_¥�ýˆô~¨)Ñt*T¯¾|8h³|:ÿ ^ñÖ•­|‰ò;ü@�ÏX±C§„îÇëâ«Ìþ|ÐñŸ	ù$|Šðü–qéŠ‚·Ã„ïÓs(-—/ZðŸ(ÃB
ùJñÖ•¡+äOñ®\½.^—à/ÆæÇµ<‡êºÒ¼õ™¿� •†V•eJÆ}_¾/€õ‹ˆ2õºÊŽ>¾¨z©¥Öl†ƒhè¯
ª'œÊƒW»ê›—/Árô^—âÞbufØ€3»*~7ë*ï ó7aeãàt¨Âž&?TF‰ƒëWÿ V'ÖsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsNiÍ9§4æœÓšsAzÿ ‰|`ÄaþŒÙ>>}ñ¶;ÏÒ�üGÏ¾/,>˜GÈ†“@Câ †H~˜Q¦â²þXb‡€c*&¯Ç[Ûe2•+JeJ� A–‰¥ÚS­0"´M”£FS*T©R¢ÆÒ´©R´æ%@e:S¢AìÑ4¯ŽïÃ>IB.8åÇA`ÆÆÜ|mÓ~‘¨}Sc®Ší;M‘RegLè¦Nb\0j*Š¢á¹²ºÊõ™Kí±6fF	`Íé½§®2Å¹ºh2†úcC‘zÌô0´»y±Š¿ýþWCã\½n\¹råËÑðŒÆŠ§HÐ£h™KÄ†)¼€LÊUN“,s¥RÁÄµ™v€œÀa•L9Ð1f©‹LJaP)…Ö ”1f,è5.*ˆéˆë(€ÂS(„SñÅ—¯ŠøpŸ#²´Šÿ ?cP+åÕ‚ ­Aâµ}¤º¯™º0•ªÂT#ãSËô†éÛæ€,êQ‚^4½è}Ó¡›åøÏ¿	3ˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"qˆœDâ'8‰ÄN"q€€?Ä¿ÿ É¥JðÖµ*T­jT©R¾ Fµá¯¥Ÿ„|™õËÖü.^—à¿ø/[—/Ãrþ¹¿ÿ Q¿ÿÚ ?!ÿ ×ƒJ•¥hŸBÔ­*T©P•â¨
øµ*T­+J•*WŒÒü/Ñ†Ž§�ùSâ\¹rþ…¹råËøw/[—ñ¯K—.\¹rÿ ô¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥èºH½._ˆ/Àº¤^—¥ø"õ¿èñ÷/åoKøLH¾t~¥Ë—¢õ4¸º±hÂ>qu:ƒþ#,W¢æëwñè™tc©ü!ÃÔ¨„4 JÒ¢iPÐ¨ JÔÑÒ¥J—ÊÒ¿Á—ÀÀÑcG¦øG~@z,x
¥j­¢´T­*T©Z*VŠ•¥JÑZ+Rh­¢´T©R£þ.RS¢J•òE²�*'‚‡þ]CUË—.\¹~¹råëråýF4 Ë—.\¹qbÔC Æ^ƒ\¹q}D4+JÖ D‰à€Zòú]êEJ•"¥J•+ÿ åVô¿Ëð\>¢XEüBð-KƒÔŸ:,!ðXÃQRµ,~ ³|yÑiZløU*T©ZV•­J‡ÓÌD�¡/Ï»¶ðí°[úœº\XEË—.\½.—v, ^²Âþ„?Á�/B\½V¿�‚KáÜéŽí›~_øuð|:„t~†V•*T	Q%Jññ½f^ÉÛŽ�(¯˜>1òÇøº•­J•­JÒ¡âÚÐ™Š1óñ«ÿ S÷V ý`Ÿ]ezÇVé“lÁ¿®\XS“¤#éÕ³oËÃ_ÿ žÙw#6o¶=D©]¾õ~[fÈGþº”7ƒõ>¨X1`Ë—.^«—¢‹ÂVF-ÑJú ½/[ùu„,>1eøÑ—¢ñûDd:B­¡<€ŠÇ—øü	–/ÐÂ1»á‚¼ Ñ%h ñ2&ärÈ�ˆê‰Hvù÷F?-ôeüžÈï­CâŠ•*T­*T¯ƒœÂÂlý3XC?ð*„°ÀÇ@Ë‹.^¢úÅqñj|ýR!„†•Z«Ä+™ÅD{èýW^*ø;$p6'b	�(%CÇŒúÊÞï‰Ù�‰Hvð‘øD>¦IÖ’g“—ÿ Ç;}                  _ü€\î@ú1ì�(úBï?ñ”Iu>]—.\²àË—.\½·é:‰ñWðŒ~|ªÂ^|¥ø>ÒõÖ^—¢™ƒ/Ãqðß€2ô½zø/ãŸ€]# Ôø	+CUJ•*V§ÊDëâF$v�¨Ë+>Ä ïÂ\¬@ÐŽò³;Ç}D‰ÁÄ6ÔïâV„øû¾ ½›?ŒÌÀŽò�¬iP%J‰3¢iLVbD”è4a¬ÊÌH‘%1 ‰À‚2¥f$¨‘>;ø*Ö´¯›tü�i_@¾]ÐeË—.\¹råË—ÿ It~]ø$~j_ô…|Ã*T©R¥J•$©R¡ð;�Ñ‰%¿äm–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––—ÿ ó2ÿ ”¿�¿¨+çkÿ ×ÿÚ                                                   $’I$’I$’I$’I$’I$’I$’I$’I$’H¤’I$’I$’I$’I¤’I$’I$€Od�I$’I$’I$’I$’I$’I$’I$’I$‘AX’H…ÉæI$“ L’XD’I ¹ÞI$’I$’I$’I$’I$’I$’I$’I"€çaéGqÍû‚I&Ác†Ü’ )‚ú$’I$’I$’I$’I$’I$’I$’I$’E$hˆü4]âlà’L*ŽHÿ $ ‚<~I$’I$’I$’I$’I$’I$’I$’I$ŠN�'À²I$�IHñ÷ÃH’I$’I$’I$’I$’I$’I$’I$’I4’ 	   ’I0‚  @$�	$’I$’I$’I$’I$’I$’I$’I$’I$’i$’I$’I$’I$’a$’I$’I                            �                 ¶Ûe–Û-¶Ûm¶Ûl¶Ûm¶Ûm²Ûm¶Ûm¶Ûd¶Ûm¶Û,¶Ûm¶Ûl–Ûm¶[m¶ÊI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’	’I$’I ’I$�I$’	$’I$’I$’I$’I$�I$’I$’I$’I$’I$’Hñ_‘}4ÃqoÒ…Ô×É‰ù$’I$’I$’I$ r@Ùñ$’IIZI$’Ï ~�úéX ·,ª?1�VŽI$’I$’I$’<‰ªRkYµ¿‚I$’i�ýäÌ’I&ªVK3¶ÉYÏæÜ#ú.î)„’I$’I$’I$ùEk§YV9iD’I$™ün$’H9¸Ã¨GãmÌbä‹NRMÉ$’I$’I$’I´Ì€~¡Úë)$’H'µtÒI$�$šI$�	$’I$’I$’I<’I$’I$’I$’A$�I$’I$’I$’I$’I$’I,b” YÉK=JA                             ’I$’I$’ �†oÃ•ï�Zè I$’I$’I$’I$’I$’I$’I$’I$’I$’H I$’I$®a9¬ÉÄš=Ô                           I’I$’Iî–çb	$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’A$ÊII$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I’I$’I"·âÝó¤’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’,$’I$’N²KoÊÉ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$ØI$’I$„a‚�3’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I´’I$’I�A$‘-$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“i$’I$’I$’I"JI I$’I$’I’H I$I$’I$’I$’I$’I$’I&ÒI$’I"I&’Igt’Gæž B2šyƒHÂ¼aÉ$’I$’I$’I$’I$’M^i4’i"I$’I�$SvØOÿ ¾l-ßí×ŸŽÓiïó’I$’I$’I$’I$’I$žHI$’I$’I$“	²H�p‚o¡ðQt›¹¿3�~ß]†¤’I$’I$’I$’I$’I´’I$’I$’I&d’I$’I$’I$’i$’I$“q$’I$’I$’I$’I$’I$’;i$’I$’þò)ÜI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$vÕ¢$’I%_8O’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I¬§‰$’N‚´À$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$�À£›I$óŽÕä5JI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I"Pöõ$’I½’I$Òl’A$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Gm$’I$“oÎI$¿÷aˆ c‰ ðI<’0ÄI Ÿöà’A!bI$’I$ŽÚI$’I'­?yWŽòIÖ–Ø‚H	“¿œ˜D sÌà‘¹Á
8"ñ‰ø’I$’I´’I$’LÑ"L	ä“‡ÄŒC<ó±û~¸‚<ìÀã^$ŽFÜŽÈäòA$’I$’;i$’I$Ÿ*Â�©LI$²É$’I$’I$€‰$’I ¢I$’I$’I8’I$’I$’I$vÒI$’I$’I$˜M’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Hí¤’I$’m6Òm6›$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‘ÛI$’I$Ò ¦dÆI'†I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I#¶’I$’I¶ÛI&Øì’*Œü’O$`I<’G$‘É#óøà’G<�NäŒI$’I$’Gm$’I$“i¤›I§™$É› qˆžH 0p7ƒ‡7z7$ÒÉÄ9€w?’I$’I$ŽÚI$’I$’I$“	²Iª	 ’@˜‚zd‚GìÈHáB�Aƒ‡$’I$’I´’I$’vÛm¶Ù)d’ä‘‰$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Y–Û-–[    ÙI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$I@    ’I$’H’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I´’I$’I$I$‘m$�9$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‘)$’I$’qªÙÙ6¶I�F$“I¾I;’I$š}$’I$’G<î	$ Hà’Hä’I!1ÀòBI$\;ÔÅ\’\“�"I¼ÂA ‚I”’iˆ mï¸ Ì$n3I$’E¼%´’HÈ6-ª·	$Óõ�	,“8#âIApd8áüs¸À‘�<Ç4’I$‰?[ò	$‘›�Zi×RI>òA’A$’A$�p$’H&b	$²xä‚A$�I |$’I-cš’I ÛßTÛ¤’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’m$’I$’DÁÄWI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$ÚI$’I$˜¯Ä:IŒ’I’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I´’I$’I#›Q3¿�$”¡$’O$’O$’I$’I$’I$’I$’I$’I$’I$’I$“i$’I$’dÎÝ;­ªI+åBƒÈ;A$€9$’I$’I$’I$’I$’I$’I$’I&ÒI$’I$‰É$�”’3s�þ$ïáè‚!ßŸ‰$’I$’I$’I$’I$’I$’I$’M¤’I$’Iàÿ |üúù$æIH òI$˜ ’I$’I$’I$’I$’I$’I$’I$›I$’I$“��=$²I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I6’I$’I'Ÿÿ ùä’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’m$’I$’M$’H II$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$ÚI$’I$’I$’H’’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I´’I$’HÛm¶Û~Õ$’HU¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm:I$�ÞÛm¶Ûom¶Ûm––I$I$’I$’I$’I$’I$’I$’I$’I$’I$“cRI%m¶Ûm¶Ûm¶Û%,’CÉ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Ì’Jûí·ûm©(¶B$œ’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$¹$†%¶Ûm¶ÈdÎ aß2I	$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I
I[¤U{l—€ŒìO§¤‘’I$’IL Æ‘€á[^Pp’fHLŸ€éáJo$’I$’L’?¬�ÔvÙ,çu8ŒI'$’I$“Ÿ8³æÂh¨g]#a�MŒ&˜‰$’I$ù$e1�…¤’J‰.»Å’HI$’I%oð\­ÇB.§Ki²ÛOujzªìz;’I$’IÒHRÁ%žK-Rm$‰k$”’I$’I&•	$’I$’I$’I$’I$’I$’I$’I$Ÿd�¥¶Ûm$�L^º¯þI'$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I.I!J   ë+ö*¡Ä’E‰$’I$’I$’I$’I$’I$’I$’I$’I$’I$’$’K±$I$�<·Fc˜)$‘›¿ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ýÊI$—bI$’I‘-²Û%”2I$’6Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûmµ$’I.BI$’I$I’ld’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’$’I$’H 	‹É$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$(I$’I$0  ’I3’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’H]„ ƒ@	€G$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$�óm¶Ûm´›m¶ÓmnI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I!æ’I$’I$’I$ÒêI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’K*m$’I$Ÿÿ ÿ ÿ ÿ ïš[m¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ý¥ÿ ÿ ÿ ÿ ÿ òI$’I Km¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¤I$’I$’I$’@ I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$$’I$’I„ÂI$   I   A              ’          $’I$’I$ŽÇ=¤Ì ›Í4²Îƒi$km’I$’I$’I$’wëg7}õ$’I$�?ÚÚ’I,D%­^Hªg!:£ÔÓh’$ªä’I$’I$’I&…öÆo~ÿ þI$’I a�Üÿ ¿$’/Ÿt=0{�_˜çå�/I$’I$’I$’IÓ¿6÷ýöä’I$’HùëgßîI$‚@  I$B $€ $€>  $’I$’I$’I$’d¦Ð  I$’I$�m„ X’I2RI¤’i$˜a�ÒI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“¤²vÒòUµõÏ$´’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I'Ke–ËE’KBa;©$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’LÕ¥£I¨Ób.›iI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I"ÒI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“ÿÚ ?5e—W¼÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß˜Sÿ f7ÿ ÙžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æSÿ ³ìÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿3ß™ïÌ÷æ{ó=ùžüÏ~g¿1×¶^ó÷ßïèƒoðßäÿ ]þçï¿Ü§Á2sç7 ó”ÝVªPCí+èà+Fòð•Þj&¹ÖžÒ°,ª-¢ŠÀYqjÌÊ{Jx°Â©}aù�–È´|Œwˆ¨—±]å‘u¤Õh©M�UShì¯�úï÷?}þáp¼ÊØd/˜$"ô¨ëEv¹Ré�%�Ü À6¸N?Ï›Fm(¤„M2éŒŽœRÀ‰JˆV‡æ^:� ”= ±ÝWÍ˜n�âÒ wqkÁ#³
 D a¼W’áÉÑÌ¸¡;K·‹dw„¼ Š×¤eï
Z!szÅ£„D5’
Xm˜a-m¥ï.†ü¥d¨¬®¢Š|®ÿ s÷ßî1d¦{½XÃ.é(€< Ñ¬Âá’ª%ÖŸÙ¢ºÈ!Übñf ,hSŠL@\Úl	€s˜€i: Òu�<ù~^™ƒ×©ŽN—;1^ÜÏ4·€WÐ€¾óFU›Þ-‘Þ*ó`†;GÈâK•�ž³Úr³xT±Zb�ÂƒÄíÜJžxeGŒ¾×¹ûï÷)/U
¦¡Ä®áQ–w—føLÉÉ •‚X«j§ùóhï)yBUã¼¿Ç�—LÜi5}be]ã=²c'Þ‡immæVq«(ï�†—«„ÉÅË!”8BÀÂ±ÚV—2èŸþÅ yÇcâÙçJz�TBÓ›†Iˆôe½¡.CB½.>%$Q*¸æRXyD\×ÒŒ\÷¾×¹ûï÷¢®î�ìÅ7`;1FÖæ
·èhé³1]Ö³Ý�lÎYgV
mˆ÷g$¶îåº)ë-Þ
lÎYÉ-we»Ëw�ìÅ7oÇ²;ém¯A5ë Ù¨¯YÉ ÙœÐ-˜®ìä–÷ðþ»ýÏß¿¢6€Ùß“ýwû‰Ketg#ÑœïFr}'7Òr½Êôg#Ñœ�IÎôg+Ñœ�Fr½Èôg;Ñœ�IÈôg#Ñœ�IËôg+Òr='3Ñœ¯IÈôg+Ñœ�Fr=Îôg7Ñœ¿Fs½'/Òs='?Ñœ¿Fs=Èôg#Ñœ�Fr}Èôœ�Fr='3Ñœÿ Fr=Èôg;Òs½Ïôg;ÑœŸIÌôg;ÑœŸIÎôg#Ñœ�Fs½Éôg+Òr=Èôg?ÑœßFr½ÌôœïIÏôg?Ñœ¯HUÿ §_¤åzNo¤äz3‘èÎw£9^Œæú3—èÎG£9žŒåú3™èÎW£9Þ“™é9¾Œçz3“èÎw£9Þ“—é9þ“ŸèÎG£9ÞŒäú3ŸèÎw£9“‘éþDlÝé9>Œäz3“èÎ_£9ÞŒäú3—èÎ£9>Œåz3“èÎO£9þŒåú3•èÎO£9>Œçú0+}ÎŒW§Ðœ?Bpý	Ãô'Ðœ?Bqý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'ÐœBpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Çô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'ÐœBpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ/Bpý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bqý	Ãô'Ðœ?Bpý	Ãô'Ðœ?Bpý	Ãô!m×Ðÿ ÀK'&—9%ž;%’Ï$ä–|à¿Cx&ÏÏØK;ërÉd²S¼ù{%�þI’éŸ­@WÊG×¥À(&´Zz¹›�‡XÅ©MU*ApëFã´/*Uð«Tn�7‘Ñ ²å´UCËL)0˜.‘jÖ5@†Ú„R�€ý|Â½HÂš‹Ð ö¤z�3ÕÀnÍØFŽhAe²	³3%^`ÙóD«b?¾Hpµ)MºßxˆÉW¼}U�xhdaÒÔUÆI·º$ÒÀK `ñ.	FÑz‚1µm©pü+>ÌÁ\±Öªm„�±MƒÚ©Ó—:ñZrÜ¯à¡#÷W+÷Ñ1¼4ÇF5UoyFÊâ-²¥à­ÌùÆif£2Z¼Ê›½Cµ«féocÄÉR¢ƒV¦#,Àèä—u¨kMí™N6»FÛÂ#%hseD
_9pX`&[.+tŠ›m ìH¯Ä ¢JEm•lÓ.‰Æè¸¬Ê.²Ø?‰²-M”�;¥é4„u*2þ¦L	.
Ú‚ø"
Qlf!,‚,püÎ€ÆAÑ•&FV‹h6‘XÕ_¼t»j.óPÐ­.a!sS ÕÊ¡Á.Ûž!õiˆ#ð…—YAfì#kÒùÍýA.šŽ;°€nÈð‹í¼¦Âßùƒ+16Co€-ËhbâºU3€4Çô\¿s–ŠWák‚�è1Sg™ž¤›Ô5­˜¸`ÂÚ&RX#ÙoGm™e½t‚Îê…K…Â�¶b4²!y(b­\æ”ÁÊRoz•ÜÈzâûFDaÞ57 ‹*ÝÚ*¦`b!Õ¹£*ˆ‹€4PØ;°ZÏx(šNØE�FHÂö¨ã½ÆÆZÅÊJ§pÇŸù„Æ|ã¼¦,�ò”¡°S†ƒÞQJi;#Óª£¾û1Ýö€ÏÚV)Ö[Ê‘KKŒƒgq“Óá-7èq‰˜E^`t&Oþ _(0ó‡Ý“#ëY¾õ.Äòeß[¤°Ûà%’Â-—ÎØ”*S�Ì÷IV¸RUD¶„¡„¢¼ T›¸@ôÑ˜.‚^À…žb!4‡Ð#¶*‰X™•¢å<&˜™+EeíG—ªJò%¸Š‚%R#WHi‰|˜€£ªŽa:`ÊT|Ø2ë�,j˜0(;@fóF úE ƒ0ØÝB‚P˜Â"lª‰pî„�¡JNñÁC%éQŠ„Jb qT£ìøFÑ)—pé„Ý–D‹¸Þè?Ô:bczÇ++�â¶HZŒü	Ï9 Ý|9jþ
[°MŸšAÞfºÌ Ûçw %Ñî@:J%�+å(ðQ­Qð¯ûb‰j%è²@°âáäne«#´ˆ†…›;ÅÁ´\b�7¡06K–K#'ÒXô˜\ÄôæÙDR„ŠR“}At�1p;V}         ._É:NÄØ»J"�á’ÌÙŒ#Q	{	k–Y‰L3”!4ßh�5
‰e¤birp%æQ.ê¨e‘[¨—¡
Ã0J«HœÍá»úÃ¹9¥{ý         Iò â9G^³s*�­T"(Ñ÷º¨1Á\c®i+{–¾�`ýßÈð—•þExŽÄXÀuEÿ Y–˜ºkÑvbÀž&#`4£»ÿ Â$¸‡–¸ˆbgóþ UÝçüKBŽù9ÿ iÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏñÏûCº~à=˜ƒNs@~=8\~ÅKi�bÔ‰s½£xS!|,—@G­�2#6¥ˆúÝ}=QÉ ¾AxoèM€…ßso§ª¶tœ>5“�‡­˜&I°�Úå£LÜp�›«êF‹²¼)ÌtWUý}<«íïÓl>5ÌVÃ%öŠ¬ÔB‹sxK”³†úÂBt"1¡Ú##r¸¢ g–ÃÑô÷Øó:fÈ|f�èfŽØ&eV±PŠ½F€‚)’%‚
•ˆŒGìÄ”Îx·éô÷Úó6Í�øÆ­•Š™®¦*©Ô¨¡Uéé 6‰s‚=ˆ�È;¢ §ï_O}¯3lÙ™tuO»ãÅÚÊÑ¹KüG�5Žê/È©Ê$‰Š¯…ÛA;¸/*«Á€4zú“_&NÀïLÎŸ]”–]u#Â-4JKÄ‚‚pÒ#„|(I¢ô¶ì=îZ¥§¦ j÷A+„¬ÀXl•þ;íy›fÈ|ÍUUS¬‘Sû×…ÀX•	ÂWÄ³Ò‡ Ä@Ñäm–4&s¨	Ôå¼A§ÛÄÇ`£]7–ñª(4©Ç�§£Éa2¢³”¶ÏFø�^Å¯Ìè‘bÚ@õaR<ÇG£/­Ö9/k§S‹„‚·¸dg|¹�®a5å9¥ÃØºlícÔQÅìõBA�X bþS˜Hƒ]ETØ§™Aç‰�›"¦÷ïÏìê'¦G¤ì£÷ßný/M”ò´ÞÛpÁÑêÚà„P ªbXF7þ¢H§«3˜¹G6}‹”W$û¿lÃã;«›uØ�pV7+«!õx”ð�¬#UXQ.œ}ä2h»K€,�Éÿ Á6Pòû˜<Ðv�q88ï?G*¯Û‚†ÎS£I.¢ålÌúKÓaŒî*ÃGæ.ÝàEÒj`�u‹WX¹bzS.¬‡hóácÁ^î=Îs1yíkQj’aéÑ¨Ô-‹IœÁ‘.õ¿?qÂsVoh½€°{a²Åù•1‡è/Ð�÷�^©gÁ4šYÿ _‹ìí|CÃ‹tÈÒ†Yþ$Dýîo)oñjªª¯¥}júÕô¯¤ÉbÔw÷v<6�9²ü¡(ÑzÜm8÷8\µî–×[röjcï_N„bÕï·W¤KtcÑLL96Þ]j�¶Ð˜ãî“ðâýÜ’_Ñ}fØÚ*ÝŠ2‚òjè€R�)Æ[u13Þfbowa|áÛXAÁB–mRà+:¢êïŽ>UöÃF ƒ6µãzŽî1†|ÂÆ™BÄ±“hžæáŒ¥*Û1Çvcs=ø¹rEÈnï!sJ ù:¯¼WoP!žÈåÞ ÉÖ'ÄÄe™÷þØ4Ø.m�-â<åŠÚ%6žð–ü­9
¨¤ÇkÌ(¹gìšê³ôzÆ“Ö	¥º€ÞqÀÎ‹m¥ÎéÝ ÏÔvF9•=dß
ì=“í}�÷e€GÈEhþ†7[dŸcïŠ*Õ¸Ž"‹5»¼ë%·eØW”7ª�Y`Zúâ0#K[çb¬ë]å'Ãà°¶Ko$²òÈø»HÙßüJý­�âª«é_Z¿Æ�'Úðxmüå!\è�1;sH á‡£u‚•Q,ãpó´„ 6»ŽeÎ`fÁÃw•ˆÕ�­Ñ´¯TŠéRèj„]=Ij®¿ˆo­U6ãÈ‹›Õ €�Kc›ò/s^Dƒ�6,Žm–·â·ÞR>ð¤·,bÚwÛ"|�ñœŸH€�FUŠúÄ]²Ž7@‰Ù›I:L÷v[HüÊö	@`˜Ãj‰«"ŠX`¶h�ŠÕ‹”!‚ó 6¨@2«Ò-ñF�#ø�›)#äŒ#¥¨qvH¨+¤&TE¿¾òîÀm+Æ<�ç[ÒS*&…¥c­J†AÞÂóXkzƒo"@Ô–Jko–ºÎ]Ê•%X°"ˆÚ¸çv.nÇ<MrA’å£´8Ë�!UÌ{öÃ¤¨¼Ùµ^; >p¼n²´•�¡ÖY	�‰4ctšD7"Î–…U ý•¦„ñ+oÅo¼º»KØ7¿=ï&RaÅ�'xÜ!¨ÕŒÄ„XTS™!ÍÐ$�u(Ì%t·AD‚Tud—Àý£…�GM6
Q�³‚9ka�N˜ÿ ÷\¦ÝÌº6OµàùäÝAcÏ~¯ŽÞæËlE³SãÓ˜¨¬z" YÛn¾ªWøÿ ºå6è>9¶Ë€\¾	Ràµsvjn¬¨�t‚P.daªª'@ˆ§Oø>žû®Pìª•Î“¹”K–K•ë!Ü|%{f¢IQè™fŠ¿zkIz£�zT7x†’û}‰”.�¦~¿O~ÙMŽK  �ÉtËÊD*ù™[¨_:�bõ3.ø*ÐLUtnÇvX˜R®[Ó51ÕY\@2jnQ˜¹©N7”ÑÌ
¡T§§éêíîœÀã8œÃ+Ú#‚5¹÷” 'Îaðø&S ¼o1ÂRÁRø*1\k–qˆ$®…¥Ë˜Ž€†"¯þOßkG™1F¶Ñ@K©ë).)×¬&>
†ñïA¶u¿Øö®mŸkÁâ@ÒÜèý?#¦vUæ•ñ´½š“Ïéoºå6è>2¸sYW\ÑÙÄsi¸ˆu‚'HŽÐ&ö"Ø)^jEÅ–ÂŸ§†øÙyMþ&ÜÔ~MV´eUÝcÀh2ƒ@ë
™h”ŽçáÙž]FFÏ÷£Ú’Ð¹Ú7jÒÁ¬5/Ã’¤cW;7å´¢�Ó¦ãn‰86ïÖ íó1+H(Áj 9Xàsa“ÎÌE4˜r-ZúÆ¦&Ý™âÛ ¸�ÝfyÛj–L4LBð%[º>#˜d»/ùHšG¢ÕFîÃc´Ð·æŸ‹¾vbErªìÝÝÌj#„hù¦1Åƒ‰Úù*ÇóX0÷KŸÄ €,2#Ô”¨JØó\zZ¨ –^HèES{MJXIÖ©ýHL p#O¬¦Añ,¶,ó"j‰s1f¶Š¸Øà³OáEX+?|ìÌBe–c5Û¯œY�¡„¦¡ãP£¸�cCvÊå0e’ÆÌgŸ1C%—†.h’ÅL•y–‹¤êèÎ_×Wí•Ü  ÕØ#Ý×W°ºD%3`6Ï)-d–2«×*‹·84ó³ m¦;_ˆKK0stT 2É³g#K2=`<
£±\D
ª`ZA€FÑGF÷ÌË}Ñx Í?s§G¦=9o¹Œ7X	\
Á�UÕµÔL·P\nÇ‹„ ã]HR-«¨n5³	:J‡JlÎƒ7õé¸µL²]‹nÎ§‘ì¶‹(ºÕ±\D<À¢†À`ŒG÷ôðßÈ}×)·Añ­PµÞµHLvD­eÀ'ÌY˜%éd‰ÁyK�F–Á7\»FŒÅyb+í ~¾:ðÇ¦_óÉ6¾}ºƒ0¬t(û;õ?þ€ØúÛ
_rÑ§Þ{§ï¿Ô¶BÉ”U˜Í‘ŠÍja·²!Ì€(€3	,Ô(ZÚ<ØïE1µ¥˜†T< KdÆŽ^SaCº ì:Zº6ƒœÿ ŒBÐÍÀ¸~#Ö·]’¿D+ÔWcJ]C7RÎ°m¬ßò–ª%Q¥A³pw–),¹!ø„ÄfÞbÌCH©®Ç*ñÖfQyÑ#Ò­©néí$ ‚ËyB7IVòoj£luhó¯Ü+HÊ[+GjÐçî$¶œš¦–ÜÜ1ÍªÐõºŒ�lh40e,|®&5’ÊÑ‘›€J-½›¤+mqÉeb¢«ÙcËx9Õ K+í[Ö5ÁaÊó«Y‚Ëk•((QÄYUÂàˆ¼Š*Í©~P}ë|ž£ù&Éµ5·V«Î¢N2WxzÂÝí˜E»ª¦ùƒJ6ÅÊÞe¬}1ŒÔEÝ”Z-Á
äáp�¨«¥KP÷*à]µv�¦U[2ø$®é×l‡-Ÿ„»£%3–¶ÝFÕ1ZT—œƒòÃfI[G…Ÿ³/Û\©3vÛ@/e�BË²oÒW\'Ò
¦'Üÿ ¨)•º:R]zHñË=Œò\Ib¯¾Aø›òÌá
Á
?…ÊÈ{–¨ÝïžeÀ-ô71;.æÕ, Â”4»’�&&/ 6ÀBm>¼ããý×)·Añ‚ÆÑ¼b0:ˆQaf]3b£‘SõŒ¡²áA‰ƒ„”ª)ÞèÞ”rØz|43³@’–ö8óžx–‹�@��Á	ñŽV{º'k  ô4[©áÝw�Ô½—�s†<¾‰(PãÚœ( …!bÔ\I†€òîÂZ¶¶¼¡]VK2sSn¾²÷<
Ø�4¬�gúiKxm\þ¢*bv Óx2:BÝgê¶â*-wEïå8ò\:öëò1J„'ƒ¢€ÜG¨i_Cs¼'%hµäzÁ B6p0ï×!ãq²9›í&DÁÙk‰@\z”êïç—Þ
K¿sÒfúœÊZi¸ Ú†…aŸ6cXÙ+\«e…|¦)]ˆeKoËÉÆj²€8Þä¡+è’¡V!l/•U[tÀ¬ˆ,â¦Õ¨tEå¨¥þNáË‰™€P‚.õ]á¥!Z9X6†Ø6ù’Õ05ÝÜ/2¡?�Ex{C9£‚’…pÀÑ9ØY.RZò…ú3¡~k»%Ú˜qJ *�›PèÜ¥\O‹ƒ“·,;LQù3"ï{£ ˆ¥œÊ« K/q†%žÂÙ,^M»G@¡a�˜lš„ŠÚØÜ¶Èíäèñ³î)hë
aÇ2ôeÀ7PÝÌ-Ž„Èj²½ãõRGýEÁðPª|Ð#/„w®ˆ#¶àÀ(ºè“x¹xE’�§‹©Ó²î®h‹Ì;r.ÓÇF>µ µŠË¥‹bt®·ŽÅ
Më¹Q–´e‹ ·@ú|ºå6è>1Ô"›¥Ã¨ È‰¾¥ÍÔ@ðm„Uº›¸Bð sDË¢´6ý<B‰â¬Ûë�7ký÷62˜÷{¼¿.áÔE�HŒ[,@ï&{J±è>" I‘ŒZm/Åª—CC•W*÷~U=ÚŽÃ¢‘Š ó?uÊmÐ||Õð�'Úð}=÷\¦ÝÆ¿e*ÜKApV¹H¸EÜàåÜë’°0RåÉfæZâÒŸ§ÓßuÊmÐ|k˜ìeäæ>%a3 *)¸êîfzŒBÀˆeKÌiG(õ¿éâ)ÖËé6½&J[oZ)]f!Â}-÷\¦ÝÆKÉVeHÚ_:À °�D� %%µÂT%*�äIC¬K¯YåàôxJ‘Ý·lvQaiÿ ‡`�»A2æ'BzzÝu.ÈXúhwFË#äf0A¬{=K€ðÌ A…ªËÂèë­¦ 2«¾ñ‰ËšgÂc%QQÝãÁJaR×hh™ö·Q…ÙÌðmLÄ³ý|*å5Ùu‹•{ofÍ/>®fõI»,S»á> /VÇR[\tÁ­–uÓ*~‹*PÏH¢~Î„s¡©mÚænÊ«°@6G#á7ìÊ7—G¦• T0ìÁ¿_¼ZîaÜo˜˜Ø´–»g˜G-U°Óª«ñiƒVåîzVþ+#BÔahu„‚ˆn iõù/ºå6è>36Ê„â”íé­¢�.š;NÂB+ûQáËné‘ÿ R§Â¾å�ˆë¼ÍÆwu;[nxÉÁ-oèî¿’fr�}Áú
{I-Ë+ôý@ 8v«gñ"PYX�oÐL#Øâu€k	 ÜÏY}80îqád8ªC7[{Áb‘©\IyX\ïJ®¨]\8Y}cM<™Ðx„ˆ$«ü‚1¼¾	—¿·û„Ìd¶ÌŠtÉËk¸o¢åÝBï2Ö@‰J¼‡2‹ ´«™SÉdj«÷<b€£ôŠX60›EÆÁK£yNŒ¼Jºòf˜ÉÒÚ‰¥Fú‹†ÒÊPØ-�M®%)`ÝÅ¾q‹SC±€´1(�yÊzHP0¾é;mïC>¾¶Õ+„Òˆ¤P¬)½×<­9šª;ÊôRä·’7[&å.Y	¶×ƒ#&6¿÷ùÔþRZ¢,ÂºbTJ¬®UÒ&Â¦
¶ô±éøòlùœh�™Y¨¶D[ì~.?Z¿ÊEN"©qÕÛ}Ö*ùîÙÚAãÚ÷Òk„�±lÄ½mÄ´ÌÉ
Àþú«+.‘J~|¤3ÈºK‹:=&�M&Ì¡@nUä@eº�å¼�£m ¯&i©ûáÀ….z•E3¤O¥Ø%i› ‰�P·ÖÑÔ®NÉy‘.¢²7{p…UÉ€wëî¨©Ì³N\Ó³ØÎÇÉ}×)·Aó.�“íx<'¬€·r‡”ÉÉ?äü‚ÛŽÈÊíÃ*uA{õ\Æº�‹=;W�F´ 3­ÆéõïŽ|ã¨vØ§™í,õ‚éZ*¹l3
R`¾Ýi”Tò¤Ùn¾-®ì`p¼¦NJã=µÕ‹è8áz]J¨�!˜;TÏQ=%�2ö§’QóDi†ÅØ�®×Že÷Øz�/º�E²AÊ©ûŒt˜«8õ !üàf¿pî`šÚÿ “2ÐŒ¤ö™\©ž„�ÍõÌ@)cbWÓ‹^iÛõØ–ýj(qfÄ´ê’‚S«Ð'PWBZ/8·gB(ºé°ÌÂ�!€î*^Í)‰ÎŒ+mÞ 6a`×á(Êð?!)R€­}a>(Ãðæð”-3£‰zÇãÞ¼&š�u2
„½´éDÜ}­þÔÍ#ƒÙ�Þòÿ 2ÉC
8‰|ÚŠOnØ„Ý
.FËëˆ„UaÕ6Ã0<‰r‚öA<·£ºdæêTUº\/½T:�þR¬je›)„°vÒå¨ êifá¢y€Mï¨Ë+f;ÑRMŒÄœŽäi�]ì_¤„k±ÌPÛcõ’–Ñ®®ð2­fÆ7+Ž`AõK ©hÅ�+ÙaÞñ&m2�í”1"À Š¼ù/ºå6è>-»Kv–í-Ú[´·inÒÝ¥»Kv–í-Ú*$ZeCïƒÅ‘NÖ/ÝÅ9Þöü«gý" uå£«åÿ ^¦ÕZº¬3b¾�Uý²�ˆ�]¥»Kv–í-Ú[´·inÒÝ¥»Kv–í-ÚRRRRRRRRRRRR"+ííôñ»¼*�P’’’’’’’’’’’ŸÑÕ>ï�§¾×™¶l‡ÆP€b	~+4tí€×Ÿþ|Nw\üµ;	Ókå˜"Øìý,Eß{€˜›!ñ®`Ø]  ƒòU+vDZ¤{U|KoX”à–Ž3u‡£Âjâ\§Ý¶_†¸�A/4&Î®òòì›BL C"=tª\±Ø;=—Ò%	¢‹r*¼)°Àßl(ÛÀg‰#.…7å¥ªøR�]†j¥I)/.v< 4ÆÝÙapglmIvð–…~po×@ŠA¼ÑÍI€L å@Üéò	�ñ.3™ì�ì“È�V{éDê6)ä <â@$5ˆ—˜ 4ˆäFå¡4?";øpìwE£ uYUS ÚìC5HTäYhïwˆˆ	ªÐ†B£3B'œG·V ¦ã´­½*ÓÌ¦g½§#Ù:žé­ú^×c’ÁÇÂÍJrgÛ¹²#@Kr² ¹Ô#WL~†Ù—3 Yãh‡hvnVi…Œ—ˆFìÃ¢¯¬ ¥~W¬È÷Hež»ÃR–BÎfr¶£–[*ª¿¯‡2ìC¸£ÐX`8#d«¥Øï¿I`¶^‰8êgƒrãrjpÌêöØŒ“aYQ§õ G½Ì7
/knl,ít\8Òœ·U¼Ïo®_WgíŠ	Œ *·oêR›RÓ¡õ‡•e»[Tù¥Gˆ€@e‡X4å0£§œÁô�=¤ÉQ²Ñ+¥
~:ICÀltƒŠ›»aŒ·n ®ÆÅ£Ý�¶%ù†]êà++¿H´è #/{<¥Ï0¦þQ,Ýð‰¬Á%:»¨+æè™­Ø*Ö«Š­)VÝ–WQ‡íÎà‘{¹ƒ�4ªÕ�nW´ B<¨ºS¤'(zŒ¶”Ì /KßhpŽ\Öé+Â6žcå¹€I½%˜bê4ÁEð•fïšPCŠ�
Êˆ¦Óƒt¿B7¾.í=Wlmý�0�.Êì˜¾óÆ F;“¼=ÐT¤i�XEs X]ôeT2*7°²V:¸Y*T& pf
ò”³ ¼'™(Ùî ]ŽÁ©É©Ð�øJ3Íu].T�ºKÃ«ýEž›{Y_¸k*ÉÕU/¬Ì€ø`>GÖf·Íß™Ó¡Ë®@ìv"Ñ*-‰Ø‡§\,¨Úê±'3 ¡Ôf‚v°½s®hA‡4‰à*‚¯¬æaÙx0P¤EÃC‚@Øp—ù—á„xÃqm®(ÏNàK»:n•
¸kÊ±-ò‰¯gÖ„F±"0òct«t6%p™Nži¢úzÃ;š ¸Ã±ìú[ÐL, é[Y•Èw)Jü’ø_@‹åçGÂú«ÖËÌd�‰ŸÆöaZæ}u„C‡2ü8íµ‡2Ò(2Ù7¯Pé ž©/VV!¨»AÊ0€¡•y0îà± ,o
Uˆ
ÌÔ‹.åd}’­Sð#?œ#ÍúzGE–m…)|ÀüÇ²û½^Ø˜ß;#/åÎƒ÷‹^‡+øòŠÚ %Œáþñ*RÚ–²ŒÚ<D v•QMQ¬·hUi«(ZÇZ‚�Uó;�<‘@nŒŒ~bºx+ìŽ©QÉ½½˜ØKÌ8
Ptt½,ø–ø+±Ìˆ,^mkB/EÕb^® ÊµsÙ‹€©.7‚ÔPÎZ2,2ƒ¬;Cz6˜Uô-wûhB(”AÏfQÎIm
;Ÿö+o‡*.Í‰~ž¢¨n‹djoòßAXÄzn=&Ã˜±±êÂÁè\"Ä]6%ã¥ÌÒ@ÍQ¯²¾dU€îBªM_B×�@ª[ª«ÚÖýü‚=[QJ¥üÂ*jUœØ w�ªeM†ÔÃ‘­Z;EKƒK$Ê RØ&´w­Ï —tˆR¨�¦·bö� �½åEå£à”�ž¬µk=Z!Vw—úì¸3!c¥:¡—å¶6yîÙ a´øÑ_ê]æ@>ÈŸx„Éõj&Ú V˜|¢!T£„«6„U¿½J«ªËó?ÀÌ\†ñó€û$;TX@Ù›ƒñ2²ŠXüô¸hÅäI;Ã¬ª²Î&U°™m!Ý(üETA†v-U‰N�„dµô¡Ù€¥\QF 	+k[zCc°|Uþ_ŒC6U!-àÆó(j¹7K§³˜æÍÀXðL3% ÷OAfL¸Ég,e²w®…€ô~iº_ï
Vs7¤n8à‹< ` ·Oï§ª£�ÀÀPÇx7Ê±•¯T.lŠ�X¹w
”0—€¨5UÊ*¢vW
• ¸Ñ"Ö™†FßÏ…§#,.7mn‚ŸÇJ�¦^`~â GƒÇ²cÊÕŽãB]ÀëKj-½(»ë(b	NIGm¶Ð5 ]ÐË(Ó€”6%‰EßYÒŒ3(ª¬J=6Òˆ‚S’@Æ&UÎ6pÜ€; ìæ ƒ@Œxƒ¾�1ägFvŒVÖ`ìsQàæ@ài³ïEJ.úÊ"
;Œ PPlPY[�_�ðÅÁ(›—fÛ@±6“@7U;RcJ½?Ö‰ûj²€»¡¼£P‘%¸õÐ	nBß�wÌ Ø­@[v³?fçûŽÐ¬½¸‡c¤€�G2°£ˆ:„vÍ„$/í)J¹c#oXPB@»QÕ2ÌÚ[.É'Iˆñ�¼f!»7FÑÝœ)·7 bMRTÃŠM�„ÓÓþ~žû^fÙ²	jˆŽµœ\°Á�o6Ó3ƒnWzˆFðÊ¸¨ä‹L¿HÜ8cb =/ÓßkÌÛ6CãP8�25¸G Ó¶n¦#Šf¦±ríŽ&
ó-õâgòÌür5òó)S�úøèHn¿Ký¯3lÙŒÜ"Tw�V´‡CdM�™H\»„A’tlÇÁ·«Šhb>íFŽ)O)'õðäÔÜ`]Ö"ZW,'K”¿8`#¬óŽHìº±þÂäø@‚ÑiKŒü `\…� nï=¾†û^fÙ²ÊI±kI¿¥‚R%ÖfäLSTUº@	°ËHOÕÿ >%JNôú•ÞÓ¢½é½¦ÄÊ%¥ß-°üp‹²/:Ë¼pl‹u½ÿ :3²Wi0±F—¨]‡”ÕbDæ²
†<Å
ÊêÍB¼
vHms:3Îô+y]C	Å:@ÈZÜHçg´~Dµ»¬²`Üêc—¼YØ#ÁgI“æ&‘€~}%|Ù±Cqm=‰€­€ˆLdUü¸ä8ÐÛ
3É”A6Ái¾#Xj°wý¢ûš”]žŒ]Àˆ¤â�Wiºé}CeÎyh)c\-,›-ÎSµ�?Î>×™¶l‡ÆZ.¬Üø‚X˜ÑÕ>ï�‹t�ÊÏÀ³"Ø
öY0ýv`bãX‹7ˆ&ß“Â'(ª�æË!´sf·ûÅ)„
ûs\bxÿ ”g¤BÃgQ =Ü(‚®RëÙÓº½†*?}%Jä¸�ÖŽ¯’0e£rh²ñ½ lDË Î<¢ËÄŠdÅœòÙj›ÿ qƒ/¾ÈŠ¯;_˜EW–“òÑ�mö<È†–êÏH³Y×*ÌÛäè°ae¾!ÀpuTz¡	¥—[ýÍÍ�ð`hUv–,CÄ2Ü ò©Íº\¤ê»€òËs+²U†T"÷üÏÚó6Í�ø×ÌJ)�PFX3C ¹`¹²››‚RåÒ*b"á#¥G„,¨ ¤G¼ÌÌ±¿LÖqê”›uÿ ª?P±‰BUûÑËÉ­D’±ÙHW¬€(½tw—úÂ¼à1N¥½èÝ€R§éÆüÅR�ºUº÷�LÉ“�:X¡°¬E(ö‘t¬˜©e
®`ª‹ÄïÑY§h¼=FC²±0¶µ„íap\�€Ër² žá2^Œ}Â¼ª²Ë¥ˆý�ØÈÐ“e›þaB¬Ý•ÝLÊ³òÙeŠ€ä�@ mlÓr“ M`»Š�ÕÅ�Æ˜½‹êUXÔ¤ lþgíy›fÈ|j­æmÞ:ŠÕÁJCq¯Õ1…¨PzÅR(ç ¸šØÿ z}=ö¼Í³d>1ÀGÈBŒ˜*b‰ ”ÀŒÍ»‰BG G¥EºÒëoÓéïµæm›!ñ�Ì1R‰D£Z%’ˆ†€ƒíöú{íy›fÈ|Ë£ª}ßO}¯3lÙ™JVû§Á>�î´Fjßÿ ©÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò}óüŸ|ÿ 'ß?É÷Ïò)M{X¸"XØõ>kï˜pjâ…Ëe²å²å²Ùl¶[-‹:£Ã>çƒÆè;åxÉkÈé9ƒ
þ‹¢)|hãÑÄ`p°t€VDÈøþÛ”Úi¹rÙrÙrÙl¶[-–Ë~+:¦Ö}Ï‰	¯Yz»v6ß¤ºŽN_Ä>à-#âûnSoÆšóDVó–ío9àŽÚVŽÑ˜Ä4}èñ3>g“«é"YeiÛ¿ˆÂÿ µ¦ÖæÍkÃ^Ed‡¿k…ÑËÉˆä»ÇHæ:íˆî”Á°]‚R7E!™n(„e½�ÓÂÍ)ŸŸ‘0oñé«¬~Iw¦?ÙYÉá5]+OT·0ºœÚ@±‡|@AE”íÄ^If†ÒˆøÉFb‡XÊjac£¾›#…ë‚Ãc3&š–BúGÎúÌã‰NûááóˆEïã¬AX¸Ž­™¡]ÐÚTŠ8Úà™Ø ²N×uY¨:ÐÃ·–¹X‹B‹#TâÝ¡jdxº[x@d (†ö2ÔÒ�ÁÌ0üÐ»YÖqý™òeXœ€
ÙwuÞm%z?Ë2ÔÉ¤;¡�¯éJ–wu•aÚVÛsˆ¶4=œâ ƒb;"JJý5æ‹XÞ @+nw—�GrÃ¬4Â´,ßÿ ˆGjÄub=°@uêÑFÂÐvË�…põ´;“iDD!i¢�ŒX�h\µ¥G=›C•:¼vÒ2=šÚRŠ¦Èœ›€º-â“®X9�>”–´È 8TÇXÚ§Ê›WPì´Y–RôÃ!š/v0¤ š®­¼*	l�²ßˆ5� ÖtEÃ£.ÌªŠÒ«|Kƒ±ÔPü¦äÑ´Í­ÂRîïFo¹xüË»²Ý`ÅE6ŠiÖò½ë0¡ÀCpYK½“»@YÐÌp c¢Úw[µLa {[3ÅÍ¤;¡˜á‡E…|±m¨ÑÙ{ññÔ�_¢øMkB?±2ß]ã	Úg*›ã·ÕvÔ±#49é%/ª0î<UTbBED‹,Á—BÍJ¹c	RØr¨´²^k,ç<Š¿§†ü_ô>7Ý»b¾ÕŸì“DòÒ·À8Óûh&ÂàCf;€èWÙubj¢z4�F.›Ê(ë3@!Y��Ç€i|ÇKcÎZ+á1häPš°Ås�£¬ÕÕµ¹ìY 8¦«¹€¾…Á`�“+¨°8cKaC�ípl>e±E.±ÏRPª0¢h™ZTÝlÝ¿Xý‹stš 9‡v ¤,Jw"É}!têœìÞ#ÿ U` ›aQ9Ó d”²°¹@°§HCÍ>¢€–][3=Ë¹wi²�®o;' ˜Tma4ZuZ%Y¡ÎgÖ”GFI ^lÜgµ²¤IMµîÅ€9mä¢Ü0æV–§ª3T§‰”†°oe/À¥)j¨›À¯Lb £F´«ŠBè ?ˆ¬›`œÇØ“,tV•­ð‹/&%p·ÒnB÷f[üZÒqÐŠß<&@ËòZïÇg¨&ü§¬´®X #@è(u€"wÓ¶EzKIb\ä
Ã•kT)�§Qî/ÎX¨½ùÐÁŠ6|´_hüQLMpµjàÚYcªtuœ—¤íFÈV–EŠÑ{…__�o@ô<!ÒÜýLx§'ì1:ôÁå]ØN’$B›Å*c¼Àé+’¦O¤J•*V©m Ô�ºé „ÒLÐ6	šHµ¤	A,]f ‡ìö<.ŒÜO“ÿ ŸW³§ä\oh e^Ø.rTì¡	T4 2ˆû»ònS*v(«SJ`—£ ;y¢8l¥!Q
ø¢ñBü¡Y¼GT$%ªØn¬`[ä{ºº°!å—C�,8nA²‘wKt0oàŸ“Ù-…eÒKr»@E§Zà‹jÕq‰yõ@«B„¹c±­¡
Ò•6Íž#k¬¨w]*¡dv>#'”z±P{CðÑ>¬4‚�c…;€RVç&%§8$À=Š^aÉì)ƒÐ/%~É@]j×^›(´âÖ-å…Ä( Kß$+•€sØ©Ze¹¨r¶Úò§‚†øa�:¢ ¨ ;ˆÃáØ¦²T.ÝÌAjŠŒJ½PÈ`©5½Ù(îQvwH°…Pff
_Ž“Bï¸°­È^NÉŠ«•BZ §ß$ýÂ²å†:´wu<b ìp@o6‡ž˜-#¡�ÞdÈÎ±Ž?âo¸+¸lz2^fRY@j«*å‡,s)¶a�“…™£BÎ#¤ A4N_‘ƒJgH
·;bJr@
!ÃiFäÁ Z¢K‹m/àD˜Ûžâ0»�5¶š,Ž|ÏŒ¶w¿­ðÓ+ÿ é+¸Lm6ÕÌÛ&Ò©Hf{¨T]ªƒÅQñ³rléRµ©R¢A:§Üðxj-åùY'éê|‚ã¦%åm%SÊ¨p%l¼Gó>ëüöÖ ~wfÀ<Œx~û”;AT©^
•*T©Z2¤TŠì Ìê1š¹~¹X¹|¸à\R®uˆVðg2ÅÃúx�%µù}~’q]"ƒêü¼_}ËXøÇ(åP·”€8Z„]bP9–9€Y—5—È\¦—˜[/Žqþž*»:¾¶Ïÿ >_H`epÿ ó  
�:fØ|g`ƒM‘M�¸N´ˆpF�ÌL‰Ì—4ÄÙLÇÛ"	FîÓÆøÌdbîæ‘la~¢S¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼³¼hËØÌp±8ß¸È”ä+Ë¯çà³¦m‡ÆAßZ_¤¤_r±é é mï*é¹	x€>ÎßîC=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üžÌþOf'³?“ÙŸÉìÏäögò{3ù=™üŸ­€?×Â:`�*T©R¥J•*T¯M@|6x±�Sîxú‡ñ•-Ã09JÜIhZ8Ü¡ÂHš…Ò2ËÛþ¨qˆ¼¹ç3µ´F+tÅ¨
²¨TÞ%�C¢&sZ†¾æÏ§¾ÿ �CâÔ+´/¹L!F8Ì—îVT4©K¹A¹Û›÷(�ÿ äúx}¾ðí J•(•*T©D©R¥h†JÒ´¯!‚¾þßOû»Ã6ÃæXq¡ÝaàÄ÷?Ì£úÏ~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žý=ú{ô÷éïÓß§¿O~žó1ØžY–ÀBRïZF|môÞ_MåôßMââh»,é´xO$·iäžInÓÉ<“É<’Ý§’y%»O$·iäžInÓÉ-Úy'’[´òO$òO$·iäžInÓÉ-Úy'’[´òKvžIä–í<“É<“É-Úy'’[´òKvžIä–í<’Ý§’y%»O$òKvžInÓÉ<’Ý§’[´òO$·iäžInÓÉ-Úy'’[´òKvžIä–í<’Ý »N9OMuuï¦òòòòòòòòÿ 4´Ñ¥{O$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$òO$hÐ;BÐ›¨‘‡J’�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iNÒ�¥;Jv”í)ÚS´§iHA$È¤€u€ølÒ’’Éc*T©RÈˆ*T©R¥J•*4B˜Ñ)
eJ•*TÄ¥Ô©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*vÖ4žÄ:Á:Ê•*T©R¥J•*T©R¥J•*T©R¥JŠ7‚u‰A6~C1-Äl”^-ƒ0K&!Þ¬°ÞQYœœ Ýñ¯0º®$]ÁºÃÅq–è‹%ˆë·‚Æê¹ŠîïÄÏ±)"�¸Ë7‚u‰u™–Ó@“xŽ°cÁ³æ¬”a>–;}ÐNê™Vó	)X*—ÉBn‰Êeêâ†P¿Œ¨¸¶&i…”¬ÕÁ²T›¢rŠ²ÃÇtfÄ»&xnÆ5+t_HÚj2œÊq–À°�mª>q1–†bâc%¬‚˜ëS¢®¦QÞœz£[2RTXËD¢ìyj%	“�y¥ž! ;5s"»¹@TTÃ¤Þ
Ë¼e%ÌÜJØL©ˆ²Ñ„¤øÂÊ—/Xv!Wy�¤—17¸¸!ƒth¥P“Ça/Ee”ˆ&e7‰q+m A�2Ð©[ˆßAÓé/So0«38!´³Ú‘‘ª9‚%ÌZ"Aåëh®Ò’ÄD1/Œ±%QeŠbÌb£æ›Ó3PŽ:DÚ0u¬…ÐŠÃ�¶¨J1¤*Ú
µ@C7`QñÑ&µ^‘ TK;<-ª \!‰vPvD\TPø	€V ”€ˆ`	H¥‰D¬¤¢"RSD%JJ%e%t¢Q))¢3„‰IIIH†Q(ùÍø›qUL—Sf'N›q¢ÓŠ Ú!™¥jf•¨ät¤C’Á œPÐ]
ÔÍ 6ñ­hVðïñVêø¥%" ’ˆ _¨�S¼îXJÝhe7L 0	t ƒg@%òý%‚Œ³h3QJ ¦c³ê Z_vU1Ån¹ƒ¢p´4qxóÁ*Î`­ ,PFV”Ã=¥¹�QU‡PÜB#†›\+¼¡…˜I”É*bbhÀ¢#0i("¬R'H—˜(ú–‰Q¼+àW‚�(Ò‰ZWþ^ÿÚ ?ÿ Ï—/è‹—ð/[ñ.\¿‰rü7¥üA~ƒ\Â0C> 0Bî]x �ÌÀü%™u¨Á¦ôÁðh4H0}’ê,ºc%ha¼,6�:…»EF$+:*$„$`†¡	d‡D†
�¥D‰¬ Áuüÿ IIYIIYYIYYYYIYIYYYYIYIYIYYYIYYYYIYIIYYYIIIYYYIYYYYYYYYYIYYYIIYYYYYIYIYYIYYYYYYYYYIYYIYIYYYYYYYYYYYIIYYYIYIIIIIYYIYYIYIYYIYIIO[E¼`[E´[E¥´[E´[RÚ-¢Þ0-àÔ¶‹h·Œh·Œh¶¥¥µ-¢Ú-©mÑmÔ·€[à ¶¥´[E¥´[E´[ÿ @€¹†7c„µ-GNbñV(KÕËc\´uÑ¶W/-.
(�/%$]Å�…è©iš7Ú1¢¾r¥GJ•*T¨Ÿ/R£â¯‡C/ƒ‚TÃ˜3¤ �p5E!EHTÂS}! Á¬Ê‹„ Â¸¡„0Àaå›ÂHJ„Á”\!•‚�D~nçXÂ]hÆDŽ�„épø—£¡à^‡Á!‘šu¸l¡ŽØ’!1¨•Ä0á�Q5J@Ö‘pH,ºCÓÉS4fƒ ÌU *Q•@­5.;ŽÉÑù³F:æRñÑ	Ú1ð¡ñ/€hê|!D´F9/ŠE°dVZ¢Ä%®+ŠËÁŒS—‹ƒ"˜"+.1ŠEb‘X„T´¼»K9rô¹råË—/À“¹z'�ZWÃ­+Ã_¾rþ�½)Z‹A²Ód´QÅž™Š/A±D¶�ËËDúˆieK¡�5 & E`Ù\tÁH�ë0ØA¨@Q‡ê™I`j5i ˆ5´Ê¡F—À>óÌ;ly¢ÅS+ï-*˜	³:ÂQ=õAat}<5Á–‚%Øa1EÅAA‘_­î_Öõ+Ã^7êóêÁò$¹råérõ¹råÇéãçß§�Ÿ~ž>B¥J•*T©R¥J•*T¨øïJð×‚´¯+JðVŽ§‚´¯CÃ_â‰R¥J•*T©R¥J•*WÊˆêøM«¯M]M_	£©ô¸hø	ð_	ð�_üpàâàå0´¼´¼JÑX¸kê%Ë—/áØÊ@T Ä
¸E›ànALuqJ“éò‹DÑa‚.V	 £N`T­€‚ÐˆX0öƒ¼vž_ON°Þt­‚5-ÁE`ËÁ’Ñ´ÇoÓêJhš+â-+äƒ¬y˜3
•cOÔëY@…Ò.3 ˜²	ŠE`ÆaƒeO„rwˆ´[Ÿ§¹–æ‰�À•ˆ.TÇ…•à%hGÅ^b%xÅZî�2¾é_à[¦Ùº
A¥@ 2‚C™cŒDmyxk]øÿ °Ð_TÚáÝûýÐQ)‡¾ŽÚ;ÌÁÐÚÁÆ­‰×@â’ñ7#Ò.ef[@Kív�„n;EÇCt©»-6f`âoLÇx¹•�´;cApí:Mê9�aX6èw™ÿ ©€�  å ¦ˆ¤ƒ"VO/iÝ†y‚PŠ%­¿C¼d®î˜¨ÔRáDÁ–t"—ˆ2ñ.%â,w—™‰ºLE¸F¥ÔÁ	ubÅ4LKÌ(ƒ1/4ÅÌeæb,5,˜†ú(3`ÔÄRáGøIh©yyh")——‚"™x"Xø·n;t‰:ˆå–üÅ¾5¾Xkÿ I@üá•Å`‹ÿ b:¤§ë£†2Âh Ñý‡©Ïò Ó¹ J5xQá¯á¨×„� DÐ%*Æ•à©]¥b5àòá)õÇý”ìž³ÕÛ¤õø÷€)ï£	×A†^aáô¼C¼3£¶„Ý¡bâlMÉu;Gx0ï*÷Ó¤B-EŒÌ¬Ã®†Ñ:h2»@•{Ãi¹6—�bniº\éi™Y—âÿ –ÈÀXÏÛŽñ^Ñ–ë¦ð*eó:Á�PuC´ÛC$¢1í:MæÄc´éãÒ´é1—ˆËÌ:é¼Œ*A•:Ci¹:iÒo64Þ`�"èo¥æ?à—.\¹råË—.\¹råøÁWàe<å¿×ÒK—.\¹råË—.\¹rþAúx—óÏÓÇÏT|J¨-€[é}.|�í%äq‹———�—qr´Â…þ|¥0Ö�¶¾• x•àIá%|*Ð.?!Z´•¡ð†ŠÔð	ðÏÈ„�Vî â& Œ‹™C‰[6Á‡„ë­‰ùšt�B_¯¿Ô*îÖð†wÑÚ;Â˜m7ƒˆC0Ft¬D˜#Q–JÌ:éŠ‡yW1Srm¦ fo¥fÊ› Má´Ü›¨‘„Ý.ƒ˜o(‰À‹.7„Ý©–JÌ�>¨è°ta†c˜à!˜7áBæÐ£2öPx�‘mþÓì¡;¡nÀm‚:®®›“” Té ÚhuÒ¬‰í:FçXuÑÚFåblJ¹±¨êÌÂ:Àƒ3:Ci¹¡Gxà•¦é×BÂNú‹Î…ÔXÜwŒí:|3á:,> ÔmAÅ°rñnƒ%¢âÂ‘|AÓOÜ¡…0.;>m~!�z®—�“"Þ«ðˆ¿#R¥KJ–•­¥JeGéãäoJI|	r5\’òÖ$D¬„˜–�§�’ E`ÂNYKŠÙZ„6&(²yxÕô¹ò5:!Pãâ¹EÂ(3ªK“Â/yƒ`¾æ!)ŒEC§€Ÿ¾†>Deè¼¹rôZZ*^…ð—&m½‰ßëc´Èw“Ê�¯LDˆ31 %‰P LN’±¢@‰1+1©Aüáóï„ù<ÉZp6~úNç?PÝ‰È.žQ›§R:¦èo°CiS¤6ð¢N¤w�ÆåJÿ 4|•x«J•à|"��*Ž{ŸÈuüC?¢ë~ñ^—ã½oüéò$¿ªÇÊß‚åø.?O>ý<|ûôñò*T©R¥J•*T©R¥Gà�•©»ÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁœÁ›`ƒ•*T©R¥J•*T©R¥|ºÔQ1ŽîñKô]Mð�çûK?Æö	dÙÐíôƒªsþ¾P›|Â´­kã0Çÿ Nÿ IRßñüùuÌL²²¹lL®	Š æYQe	á¶Mö??I¹È$:øHšÞ·._À¢XMòÍ]ÐÜB€TpÌóÞ<—ñ‚† ‚<”¶ñfä–*Zê^®¢»xŽÐlLÀ¸¦æ™Wˆ‰¼ºÐ.bV`]¬Å›’¢›šX_H:‹¸ÔN('h£yh³r,Ü€!´Ú	Ú^®±—ZP"âB6Æƒ5PMÈ7w€»E7 ,½]|z^,ñ\4MO0Â”–Ê¢ �¹«”$Žñ]xMøÛ3v0öóÆS� ÍÏÌuôL@¡6ïx¢H»ÃW7ajèÈ�“Ý	QÁÇ¼Efñ@LÌÄBe$Þ_`F3«Ê
´B‚B(Ú6«™1
G´ïk¹ö±uùMþIZvŒ¯HiyËƒ.F<QÛ JØõŒ•’éJáqco¦QÔ(wøÛžouV‡À|Ñx°j^0(©x©oÉûø×®%mÁN„Až×½PE‘ª
†«¶cµ€™¦tÆø‚‹s¡&úÄlUk–øÓ&¼%‡T!¸6˜;Z,/BÚ’:P[Þy•Â!Ý„CÖ�Øa63h¹a}H;C.íI¡…îA]Ì»cáD@©Uæ*nuNØKãsX61sñ¼ÕŸ	à­káÚ'È¯úºyü�ø4udY_çÐ†ì O	ò&Ø‚BTAÆ	T¼`’ª¼Xßðûô•'{oïˆùÑ‰IHÅTjTGq¤bn<H‚Æ#ß¥þý Š¿ïÿ �+Ä|�eƒJ:%£ÊtÃBçÆœ�Üªá›Ñ,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–K%’Éd²Y,–A›â/ò|ÚåË—.\½n\¿†Náé=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=’{$öIì“Ù'²OdžÉ=²l€|#ëÑóïÓÇÏ¿O>ý<|ûôñóé*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¡ÿ ±5­|õ|
úL%h©R¥jC…J†�¨©R¥J•¥�V‚JÑR¥JÑR¥J•þu>HÓd5Â2ñkr¢Æ\%Á—£«â\*,#]õ~uÑùÂ?$A‹	zX1‹ŒÁ¡z.\]^‹ƒ/BÁð„Yz¹råÅƒ¤¯â_Ã½/Ä:éšøµâ­+JÖ¾¢4¨’¥J•¥J•*¥J•¡¥hš$­¨M/á>'Äx¨Hº\¹zÜ¹râéråËÐ—¥Ë—¥Ëú¢åÿ ç/ÿÚ ?ÿ Ï•+èŠ•ð+Z•á©R¾%Jñ×Ä1ÐMô Ž†> Šƒ¥\­BD•¡>´«ÐÁŠÔ!ø¡ÐbEôÊ¸`hÂ1KÐGQâÅ†‡áK—14¼B:\|CB!‹útÁ¬råÅÒåÁÖ¹z‹ð¯AÐ1ñ€¸ÿ çûKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKëÈ               ¦èá¦ÉV‹´^† Å„oŒråÊu­Ñz/EÁÒ½.^‹—/@�eËùË—­Ë—/à^ˆ rþ%Ë‡†’å>¹C¤G6Á•ED‹¸¸–¸˜Š™y™h±,T„PÞ^â�Q+EôzBÜF€£h\½èª[QKB’Ö4Ê�!W¡Á„YLR¸Æ!buarÃ_Æ%K—ÀÀÔ±-Råå|,š¢K:�PÓ:LÐÆ=ÆŒsæ)x„]0†Zã„âBÜ6Ž%ÅÂBbXBc@›àù·CUŒBë1ÐY„¦n÷‹¶†&
˜¢,U�ˆÃEÚ	eK!j;`câ&¤
�¥`b!(„×FÚÀkRÔÚ2˜K`"`"X–WÀleGÎT¯J•*V†)Œf‚ï)Ê€”»øáº1D²V *&þZ¾�«I¤q“t¤`ð´nÐC —.SE>¢Û¨«MÎY–4Úàˆº²m‰N ±l,™tUrï¨N4ÚK ™´»a&M Ü«#4D‹—Šƒ—–Ð`(é”Ê`?O$IðlÖ&úÞ¾¹¹råËð\¹rþ°~1õ{ðkÂëEË—.\¹råË—.\¿š~ˆ¹råË—.\¹råË—òø7WüÃóçÓÏÏŸO?'Ir°bËÑYz,§ÓçÀ €~¶-K]¡U ã Xúy”Ëq¢o˜ñÅ�‚¦Q$K™4%®8JÌÙ  Á�§�uN’“§1_M„VÒ’¥`DŒ§È€Ð  °'Ã¿‡z$©yãÚCÓû.ŸK?#T·€6DÀÄÀÄéÊE~³²?±Ýâ-ÏÀƒ¹ÔaÙ/AÐÑ|	y‹.gÂx­ßSá30|â½H±að¯Eüƒò;fèmš-`£P+6¾ßfäfSîüÍ÷›;}õ)ÞÖ[.ƒ}¦"hï£¾®³¤bfU2³+0ëñ¨² ÆhHÂ¡¼@Ðí.lhé11!Zb@Ä¼hÙ ßC§Y´1:DŒJÐm1òÈŒ@F\B–€¡4“o‡Ù’rU.ý°°ó=¡€ØÓ301bB$ËF¬Ä•˜’³:Ê„©�	3£•s:TÀ•Ðè“2£lI™Z+•‰˜D‰r¦c¶„‰f$I˜�¿ üŠJè©Z©Q€Jˆ‚¼]D{õ€n—ó(ˆ?Î	óOÏŸO?>}<üùâÊ¯ôa6Yô³óç„©ƒÎ K]U3SÔïç 	³¢ËÕt<7àY~ñ™ð±tX:,¿çKð\¹y‡�~MùóÂ–:gþKgbŽ§ÏSûÛ¶ï>t;D¶è#:hrJÄbTbV•˜ö•Zèè`@ÌÞlÀ�m3u„�	‰Ò=4`õÑ%÷‹.u›3yYÐ37›>XLKÄ¨íäŸŸ<+æ#þ�šPž‹N„-¼þ¹‚#aZm.âb[+¤¨·+S¼{ÍôeÄŽcçY´ÞÞu†ÐŽ½`Â±6ŽŒ[‰§Xï6�të6�tÚe�`hí¥b$ü…J•*T©R¥J•*T©Pñ5c�–²êW¿
}"ÊÒ¥J•*T©R¥J•+ÿ DµDz†|Ïª*—ÊtkàôWJeÇ…‹ürËãèòÐ…ÖïÓ“ˆ7¢Ëðß�t¹~_Â½!ràÞ‹._‰t^¥øøL4]DÞ€íð6Æ‰zU%£Î�f1i,&é·ÂœYÔ©žXO$¿üã¬[ª¶#­ÐDŒÚ;Í¢f3iLt¼ÁÐ¸ixŽ�gu›Má3S6ÒæeÇh³hï6›ÌÂ†Ñ`h‘Ú[,l‹TXí¦ÍF—ˆ±„ëð’gÄ¡§Vo�h<cƒ9c„[•‰š1–PK(ð¹ñë=Fçf�ûç	•¬"z+M¥öŒ[�cçXÅŽ—LCyÖ:GCxï
—™»6›°Ð:‰1±Ú,f'Xï6`Æ†ÐË/GiÓ@F,zhÅ•�¨Úa¼ëð˜FÚ_*—:st‚H4WPÐÅ t¯6_õ-f¯Ìòî~ñóañ|
Ô4¬ü›PøN‰é¶‚ï A`løw.\¿Ë—/ë
	›PF&¥¯YŽ`ªZgÕû`1ÔV f$¨q7Î’ó2fÇÆê�zbËÎ�ÏF`X"�ŒX+Â£hˆoÀ}æ!cL(K[=O>> üúb¥J”Ò¥J•)*T¯M¶¹?8O¾¬0 (çï¤T·Ñ˜0VÎ…–ËbÆ,Ìë/Ae°feâ2Áú>þEŒyü™ß¯sï¬í÷÷Ú:ìáÖžp›4#´v�¢Çys¬wðàèm
„¹E¾ÒåË—¡¥ÃÂ	NÑVÌv±P~c÷¤òþë^
ñV•ã­kèçášŸW¾
ðT¯	ÿ ­.\¹råË—.\¹råü ] ½'âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§âœSŠqN)Å8§Oqøw.\¹råË—.\¹råü�ãED" ÛèÍà�hJñ¿>x•QÑô�!)§Äü¥ë ñgº¿It_Ÿò*oŒÞ]*—Ó`†%c¿)ô›b™C^^·ªe%`øÒøI,.‡2±â¯ÆtEd¶àšR\¤Pƒ&X#¥pe4Y|V èD6–%…ÊE¨7.À0dÌ¸±e’š$1È‹ÄF”—b=Q`Œ¹O�RðºÔ\2— „v|Š†–`€ÎƒÃ±øÛ&ØH¸#išÃ@w�_yºÈÒjuÁ¡‚˜‚‘â%À0\T•j<�1iUAÕÇ|ÍØ‚áØ”%M©µ§i ÕÍ°Y(SB´¼’— .’å“q,‡Æÿ _…• jZàj-E,é ÑðjVµ*T©R¥hxr'Æ@¼°EŽ`%«1L%‡F(l—»Žä”œét)€bThƒÄVQš—d–hŽÚ ¢-Ùí–Ê+(ŠDR3’)ˆ˜ˆ•"ÊÄh�˜†ð= –Ø¬£]’Ë˜ŠFLCãX¼/‚�µ¦”ø7ñOkò4»Ñùú
ô‹mø_‘RÝAøHè;ñP§sé.ƒóâ~NK„`ËÐARã�O?H¼oÈˆi2C‘ ²ÁÆ5´éÆØÊú/~cà`øÏŸ.³™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™œÌæg39™ÌÎfs3™Šw~óçÓÏÏŸO?>}<üùõéÿ šêT©R¥J•¥J•*T©R¥Júb¥J•*T­*T­*T©R¥Jÿ ×–\.¹råËÒâËƒ.\¹râË—.\¹råè°béråË—.^—.\¿£ÝèÃB>#âCÄ|éâaðÇ|GÇeJ•+J•À•+J•*T©Q%J•*T¨D•*T­+J�*T©R¥|ýx�—>#üŠ¿ò³â¹z\¹~—/GKú¡Ò¾õ•iR¥kR´©ZÔ©Z×‚µ¯ý[ÿÙPK     —ŠU]Ð[Ð÷À	 À	 -  includes/modules/analytics/assets/js/stats.jsnu „[µü¤        !function(){var e={3144:function(e,t,n){"use strict";var r=n(6743),o=n(1002),i=n(76),a=n(7119);e.exports=a||r.call(i,o)},1002:function(e){"use strict";e.exports=Function.prototype.apply},76:function(e){"use strict";e.exports=Function.prototype.call},3126:function(e,t,n){"use strict";var r=n(6743),o=n(9675),i=n(76),a=n(3144);e.exports=function(e){if(e.length<1||"function"!=typeof e[0])throw new o("a function is required");return a(r,i,e)}},7119:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect&&Reflect.apply},6556:function(e,t,n){"use strict";var r=n(453),o=n(3126),i=o([r("%String.prototype.indexOf%")]);e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&i(e,".prototype.")>-1?o([n]):n}},1508:function(e){function t(e){var n,r,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(n=0;n<i;n++)e[n]&&(r=t(e[n]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}function n(){for(var e,n,r=0,o="",i=arguments.length;r<i;r++)(e=arguments[r])&&(n=t(e))&&(o&&(o+=" "),o+=n);return o}e.exports=n,e.exports.clsx=n},8351:function(e,t,n){var r;!function(){"use strict";var o,i=1e9,a={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},c=!0,l="[DecimalError] ",u=l+"Invalid argument: ",s=l+"Exponent out of range: ",f=Math.floor,p=Math.pow,d=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,y=1e7,h=9007199254740991,m=f(1286742750677284.5),v={};function b(e,t){var n,r,o,i,a,l,u,s,f=e.constructor,p=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),c?_(t,p):t;if(u=e.d,s=t.d,a=e.e,o=t.e,u=u.slice(),i=a-o){for(i<0?(r=u,i=-i,l=s.length):(r=s,o=a,l=u.length),i>(l=(a=Math.ceil(p/7))>l?a+1:l+1)&&(i=l,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for((l=u.length)-(i=s.length)<0&&(i=l,r=s,s=u,u=r),n=0;i;)n=(u[--i]=u[i]+s[i]+n)/y|0,u[i]%=y;for(n&&(u.unshift(n),++o),l=u.length;0==u[--l];)u.pop();return t.d=u,t.e=o,c?_(t,p):t}function g(e,t,n){if(e!==~~e||e<t||e>n)throw Error(u+e)}function w(e){var t,n,r,o=e.length-1,i="",a=e[0];if(o>0){for(i+=a,t=1;t<o;t++)(n=7-(r=e[t]+"").length)&&(i+=S(n)),i+=r;(n=7-(r=(a=e[t])+"").length)&&(i+=S(n))}else if(0===a)return"0";for(;a%10==0;)a/=10;return i+a}v.absoluteValue=v.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e},v.comparedTo=v.cmp=function(e){var t,n,r,o,i=this;if(e=new i.constructor(e),i.s!==e.s)return i.s||-e.s;if(i.e!==e.e)return i.e>e.e^i.s<0?1:-1;for(t=0,n=(r=i.d.length)<(o=e.d.length)?r:o;t<n;++t)if(i.d[t]!==e.d[t])return i.d[t]>e.d[t]^i.s<0?1:-1;return r===o?0:r>o^i.s<0?1:-1},v.decimalPlaces=v.dp=function(){var e=this,t=e.d.length-1,n=7*(t-e.e);if(t=e.d[t])for(;t%10==0;t/=10)n--;return n<0?0:n},v.dividedBy=v.div=function(e){return x(this,new this.constructor(e))},v.dividedToIntegerBy=v.idiv=function(e){var t=this.constructor;return _(x(this,new t(e),0,1),t.precision)},v.equals=v.eq=function(e){return!this.cmp(e)},v.exponent=function(){return k(this)},v.greaterThan=v.gt=function(e){return this.cmp(e)>0},v.greaterThanOrEqualTo=v.gte=function(e){return this.cmp(e)>=0},v.isInteger=v.isint=function(){return this.e>this.d.length-2},v.isNegative=v.isneg=function(){return this.s<0},v.isPositive=v.ispos=function(){return this.s>0},v.isZero=function(){return 0===this.s},v.lessThan=v.lt=function(e){return this.cmp(e)<0},v.lessThanOrEqualTo=v.lte=function(e){return this.cmp(e)<1},v.logarithm=v.log=function(e){var t,n=this,r=n.constructor,i=r.precision,a=i+5;if(void 0===e)e=new r(10);else if((e=new r(e)).s<1||e.eq(o))throw Error(l+"NaN");if(n.s<1)throw Error(l+(n.s?"NaN":"-Infinity"));return n.eq(o)?new r(0):(c=!1,t=x(j(n,a),j(e,a),a),c=!0,_(t,i))},v.minus=v.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?A(t,e):b(t,(e.s=-e.s,e))},v.modulo=v.mod=function(e){var t,n=this,r=n.constructor,o=r.precision;if(!(e=new r(e)).s)throw Error(l+"NaN");return n.s?(c=!1,t=x(n,e,0,1).times(e),c=!0,n.minus(t)):_(new r(n),o)},v.naturalExponential=v.exp=function(){return O(this)},v.naturalLogarithm=v.ln=function(){return j(this)},v.negated=v.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},v.plus=v.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?b(t,e):A(t,(e.s=-e.s,e))},v.precision=v.sd=function(e){var t,n,r,o=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(u+e);if(t=k(o)+1,n=7*(r=o.d.length-1)+1,r=o.d[r]){for(;r%10==0;r/=10)n--;for(r=o.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},v.squareRoot=v.sqrt=function(){var e,t,n,r,o,i,a,u=this,s=u.constructor;if(u.s<1){if(!u.s)return new s(0);throw Error(l+"NaN")}for(e=k(u),c=!1,0==(o=Math.sqrt(+u))||o==1/0?(((t=w(u.d)).length+e)%2==0&&(t+="0"),o=Math.sqrt(t),e=f((e+1)/2)-(e<0||e%2),r=new s(t=o==1/0?"5e"+e:(t=o.toExponential()).slice(0,t.indexOf("e")+1)+e)):r=new s(o.toString()),o=a=(n=s.precision)+3;;)if(r=(i=r).plus(x(u,i,a+2)).times(.5),w(i.d).slice(0,a)===(t=w(r.d)).slice(0,a)){if(t=t.slice(a-3,a+1),o==a&&"4999"==t){if(_(i,n+1,0),i.times(i).eq(u)){r=i;break}}else if("9999"!=t)break;a+=4}return c=!0,_(r,n)},v.times=v.mul=function(e){var t,n,r,o,i,a,l,u,s,f=this,p=f.constructor,d=f.d,h=(e=new p(e)).d;if(!f.s||!e.s)return new p(0);for(e.s*=f.s,n=f.e+e.e,(u=d.length)<(s=h.length)&&(i=d,d=h,h=i,a=u,u=s,s=a),i=[],r=a=u+s;r--;)i.push(0);for(r=s;--r>=0;){for(t=0,o=u+r;o>r;)l=i[o]+h[r]*d[o-r-1]+t,i[o--]=l%y|0,t=l/y|0;i[o]=(i[o]+t)%y|0}for(;!i[--a];)i.pop();return t?++n:i.shift(),e.d=i,e.e=n,c?_(e,p.precision):e},v.toDecimalPlaces=v.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),void 0===e?n:(g(e,0,i),void 0===t?t=r.rounding:g(t,0,8),_(n,e+k(n)+1,t))},v.toExponential=function(e,t){var n,r=this,o=r.constructor;return void 0===e?n=T(r,!0):(g(e,0,i),void 0===t?t=o.rounding:g(t,0,8),n=T(r=_(new o(r),e+1,t),!0,e+1)),n},v.toFixed=function(e,t){var n,r,o=this,a=o.constructor;return void 0===e?T(o):(g(e,0,i),void 0===t?t=a.rounding:g(t,0,8),n=T((r=_(new a(o),e+k(o)+1,t)).abs(),!1,e+k(r)+1),o.isneg()&&!o.isZero()?"-"+n:n)},v.toInteger=v.toint=function(){var e=this,t=e.constructor;return _(new t(e),k(e)+1,t.rounding)},v.toNumber=function(){return+this},v.toPower=v.pow=function(e){var t,n,r,i,a,u,s=this,p=s.constructor,d=+(e=new p(e));if(!e.s)return new p(o);if(!(s=new p(s)).s){if(e.s<1)throw Error(l+"Infinity");return s}if(s.eq(o))return s;if(r=p.precision,e.eq(o))return _(s,r);if(u=(t=e.e)>=(n=e.d.length-1),a=s.s,u){if((n=d<0?-d:d)<=h){for(i=new p(o),t=Math.ceil(r/7+4),c=!1;n%2&&C((i=i.times(s)).d,t),0!==(n=f(n/2));)C((s=s.times(s)).d,t);return c=!0,e.s<0?new p(o).div(i):_(i,r)}}else if(a<0)throw Error(l+"NaN");return a=a<0&&1&e.d[Math.max(t,n)]?-1:1,s.s=1,c=!1,i=e.times(j(s,r+12)),c=!0,(i=O(i)).s=a,i},v.toPrecision=function(e,t){var n,r,o=this,a=o.constructor;return void 0===e?r=T(o,(n=k(o))<=a.toExpNeg||n>=a.toExpPos):(g(e,1,i),void 0===t?t=a.rounding:g(t,0,8),r=T(o=_(new a(o),e,t),e<=(n=k(o))||n<=a.toExpNeg,e)),r},v.toSignificantDigits=v.tosd=function(e,t){var n=this.constructor;return void 0===e?(e=n.precision,t=n.rounding):(g(e,1,i),void 0===t?t=n.rounding:g(t,0,8)),_(new n(this),e,t)},v.toString=v.valueOf=v.val=v.toJSON=function(){var e=this,t=k(e),n=e.constructor;return T(e,t<=n.toExpNeg||t>=n.toExpPos)};var x=function(){function e(e,t){var n,r=0,o=e.length;for(e=e.slice();o--;)n=e[o]*t+r,e[o]=n%y|0,r=n/y|0;return r&&e.unshift(r),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;o<n;o++)if(e[o]!=t[o]){i=e[o]>t[o]?1:-1;break}return i}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=e[n]<t[n]?1:0,e[n]=r*y+e[n]-t[n];for(;!e[0]&&e.length>1;)e.shift()}return function(r,o,i,a){var c,u,s,f,p,d,h,m,v,b,g,w,x,O,E,S,j,P,A=r.constructor,T=r.s==o.s?1:-1,C=r.d,N=o.d;if(!r.s)return new A(r);if(!o.s)throw Error(l+"Division by zero");for(u=r.e-o.e,j=N.length,E=C.length,m=(h=new A(T)).d=[],s=0;N[s]==(C[s]||0);)++s;if(N[s]>(C[s]||0)&&--u,(w=null==i?i=A.precision:a?i+(k(r)-k(o))+1:i)<0)return new A(0);if(w=w/7+2|0,s=0,1==j)for(f=0,N=N[0],w++;(s<E||f)&&w--;s++)x=f*y+(C[s]||0),m[s]=x/N|0,f=x%N|0;else{for((f=y/(N[0]+1)|0)>1&&(N=e(N,f),C=e(C,f),j=N.length,E=C.length),O=j,b=(v=C.slice(0,j)).length;b<j;)v[b++]=0;(P=N.slice()).unshift(0),S=N[0],N[1]>=y/2&&++S;do{f=0,(c=t(N,v,j,b))<0?(g=v[0],j!=b&&(g=g*y+(v[1]||0)),(f=g/S|0)>1?(f>=y&&(f=y-1),1==(c=t(p=e(N,f),v,d=p.length,b=v.length))&&(f--,n(p,j<d?P:N,d))):(0==f&&(c=f=1),p=N.slice()),(d=p.length)<b&&p.unshift(0),n(v,p,b),-1==c&&(c=t(N,v,j,b=v.length))<1&&(f++,n(v,j<b?P:N,b)),b=v.length):0===c&&(f++,v=[0]),m[s++]=f,c&&v[0]?v[b++]=C[O]||0:(v=[C[O]],b=1)}while((O++<E||void 0!==v[0])&&w--)}return m[0]||m.shift(),h.e=u,_(h,a?i+k(h)+1:i)}}();function O(e,t){var n,r,i,a,l,u=0,f=0,d=e.constructor,y=d.precision;if(k(e)>16)throw Error(s+k(e));if(!e.s)return new d(o);for(null==t?(c=!1,l=y):l=t,a=new d(.03125);e.abs().gte(.1);)e=e.times(a),f+=5;for(l+=Math.log(p(2,f))/Math.LN10*2+5|0,n=r=i=new d(o),d.precision=l;;){if(r=_(r.times(e),l),n=n.times(++u),w((a=i.plus(x(r,n,l))).d).slice(0,l)===w(i.d).slice(0,l)){for(;f--;)i=_(i.times(i),l);return d.precision=y,null==t?(c=!0,_(i,y)):i}i=a}}function k(e){for(var t=7*e.e,n=e.d[0];n>=10;n/=10)t++;return t}function E(e,t,n){if(t>e.LN10.sd())throw c=!0,n&&(e.precision=n),Error(l+"LN10 precision limit exceeded");return _(new e(e.LN10),t)}function S(e){for(var t="";e--;)t+="0";return t}function j(e,t){var n,r,i,a,u,s,f,p,d,y=1,h=e,m=h.d,v=h.constructor,b=v.precision;if(h.s<1)throw Error(l+(h.s?"NaN":"-Infinity"));if(h.eq(o))return new v(0);if(null==t?(c=!1,p=b):p=t,h.eq(10))return null==t&&(c=!0),E(v,p);if(p+=10,v.precision=p,r=(n=w(m)).charAt(0),a=k(h),!(Math.abs(a)<15e14))return f=E(v,p+2,b).times(a+""),h=j(new v(r+"."+n.slice(1)),p-10).plus(f),v.precision=b,null==t?(c=!0,_(h,b)):h;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=w((h=h.times(e)).d)).charAt(0),y++;for(a=k(h),r>1?(h=new v("0."+n),a++):h=new v(r+"."+n.slice(1)),s=u=h=x(h.minus(o),h.plus(o),p),d=_(h.times(h),p),i=3;;){if(u=_(u.times(d),p),w((f=s.plus(x(u,new v(i),p))).d).slice(0,p)===w(s.d).slice(0,p))return s=s.times(2),0!==a&&(s=s.plus(E(v,p+2,b).times(a+""))),s=x(s,new v(y),p),v.precision=b,null==t?(c=!0,_(s,b)):s;s=f,i+=2}}function P(e,t){var n,r,o;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;48===t.charCodeAt(r);)++r;for(o=t.length;48===t.charCodeAt(o-1);)--o;if(t=t.slice(r,o)){if(o-=r,n=n-r-1,e.e=f(n/7),e.d=[],r=(n+1)%7,n<0&&(r+=7),r<o){for(r&&e.d.push(+t.slice(0,r)),o-=7;r<o;)e.d.push(+t.slice(r,r+=7));r=7-(t=t.slice(r)).length}else r-=o;for(;r--;)t+="0";if(e.d.push(+t),c&&(e.e>m||e.e<-m))throw Error(s+n)}else e.s=0,e.e=0,e.d=[0];return e}function _(e,t,n){var r,o,i,a,l,u,d,h,v=e.d;for(a=1,i=v[0];i>=10;i/=10)a++;if((r=t-a)<0)r+=7,o=t,d=v[h=0];else{if((h=Math.ceil((r+1)/7))>=(i=v.length))return e;for(d=i=v[h],a=1;i>=10;i/=10)a++;o=(r%=7)-7+a}if(void 0!==n&&(l=d/(i=p(10,a-o-1))%10|0,u=t<0||void 0!==v[h+1]||d%i,u=n<4?(l||u)&&(0==n||n==(e.s<0?3:2)):l>5||5==l&&(4==n||u||6==n&&(r>0?o>0?d/p(10,a-o):0:v[h-1])%10&1||n==(e.s<0?8:7))),t<1||!v[0])return u?(i=k(e),v.length=1,t=t-i-1,v[0]=p(10,(7-t%7)%7),e.e=f(-t/7)||0):(v.length=1,v[0]=e.e=e.s=0),e;if(0==r?(v.length=h,i=1,h--):(v.length=h+1,i=p(10,7-r),v[h]=o>0?(d/p(10,a-o)%p(10,o)|0)*i:0),u)for(;;){if(0==h){(v[0]+=i)==y&&(v[0]=1,++e.e);break}if(v[h]+=i,v[h]!=y)break;v[h--]=0,i=1}for(r=v.length;0===v[--r];)v.pop();if(c&&(e.e>m||e.e<-m))throw Error(s+k(e));return e}function A(e,t){var n,r,o,i,a,l,u,s,f,p,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),c?_(t,h):t;if(u=e.d,p=t.d,r=t.e,s=e.e,u=u.slice(),a=s-r){for((f=a<0)?(n=u,a=-a,l=p.length):(n=p,r=s,l=u.length),a>(o=Math.max(Math.ceil(h/7),l)+2)&&(a=o,n.length=1),n.reverse(),o=a;o--;)n.push(0);n.reverse()}else{for((f=(o=u.length)<(l=p.length))&&(l=o),o=0;o<l;o++)if(u[o]!=p[o]){f=u[o]<p[o];break}a=0}for(f&&(n=u,u=p,p=n,t.s=-t.s),l=u.length,o=p.length-l;o>0;--o)u[l++]=0;for(o=p.length;o>a;){if(u[--o]<p[o]){for(i=o;i&&0===u[--i];)u[i]=y-1;--u[i],u[o]+=y}u[o]-=p[o]}for(;0===u[--l];)u.pop();for(;0===u[0];u.shift())--r;return u[0]?(t.d=u,t.e=r,c?_(t,h):t):new d(0)}function T(e,t,n){var r,o=k(e),i=w(e.d),a=i.length;return t?(n&&(r=n-a)>0?i=i.charAt(0)+"."+i.slice(1)+S(r):a>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o<0?"e":"e+")+o):o<0?(i="0."+S(-o-1)+i,n&&(r=n-a)>0&&(i+=S(r))):o>=a?(i+=S(o+1-a),n&&(r=n-o-1)>0&&(i=i+"."+S(r))):((r=o+1)<a&&(i=i.slice(0,r)+"."+i.slice(r)),n&&(r=n-a)>0&&(o+1===a&&(i+="."),i+=S(r))),e.s<0?"-"+i:i}function C(e,t){if(e.length>t)return e.length=t,!0}function N(e){if(!e||"object"!=typeof e)throw Error(l+"Object expected");var t,n,r,o=["precision",1,i,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<o.length;t+=3)if(void 0!==(r=e[n=o[t]])){if(!(f(r)===r&&r>=o[t+1]&&r<=o[t+2]))throw Error(u+n+": "+r);this[n]=r}if(void 0!==(r=e[n="LN10"])){if(r!=Math.LN10)throw Error(u+n+": "+r);this[n]=new this(r)}return this}a=function e(t){var n,r,o;function i(e){var t=this;if(!(t instanceof i))return new i(e);if(t.constructor=i,e instanceof i)return t.s=e.s,t.e=e.e,void(t.d=(e=e.d)?e.slice():e);if("number"==typeof e){if(0*e!=0)throw Error(u+e);if(e>0)t.s=1;else{if(!(e<0))return t.s=0,t.e=0,void(t.d=[0]);e=-e,t.s=-1}return e===~~e&&e<1e7?(t.e=0,void(t.d=[e])):P(t,e.toString())}if("string"!=typeof e)throw Error(u+e);if(45===e.charCodeAt(0)?(e=e.slice(1),t.s=-1):t.s=1,!d.test(e))throw Error(u+e);P(t,e)}if(i.prototype=v,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=e,i.config=i.set=N,void 0===t&&(t={}),t)for(o=["precision","rounding","toExpNeg","toExpPos","LN10"],n=0;n<o.length;)t.hasOwnProperty(r=o[n++])||(t[r]=this[r]);return i.config(t),i}(a),a.default=a.Decimal=a,o=new a(1),void 0===(r=function(){return a}.call(t,n,t,e))||(e.exports=r)}()},7176:function(e,t,n){"use strict";var r,o=n(3126),i=n(5795);try{r=[].__proto__===Array.prototype}catch(e){if(!e||"object"!=typeof e||!("code"in e)||"ERR_PROTO_ACCESS"!==e.code)throw e}var a=!!r&&i&&i(Object.prototype,"__proto__"),c=Object,l=c.getPrototypeOf;e.exports=a&&"function"==typeof a.get?o([a.get]):"function"==typeof l&&function(e){return l(null==e?e:c(e))}},655:function(e){"use strict";var t=Object.defineProperty||!1;if(t)try{t({},"a",{value:1})}catch(e){t=!1}e.exports=t},1237:function(e){"use strict";e.exports=EvalError},9383:function(e){"use strict";e.exports=Error},9290:function(e){"use strict";e.exports=RangeError},9538:function(e){"use strict";e.exports=ReferenceError},8068:function(e){"use strict";e.exports=SyntaxError},9675:function(e){"use strict";e.exports=TypeError},5345:function(e){"use strict";e.exports=URIError},9612:function(e){"use strict";e.exports=Object},228:function(e){"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function i(e,t,r,i,a){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,i||e,a),l=n?n+t:t;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],c]:e._events[l].push(c):(e._events[l]=c,e._eventsCount++),e}function a(e,t){0===--e._eventsCount?e._events=new r:delete e._events[t]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},c.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,a=new Array(i);o<i;o++)a[o]=r[o].fn;return a},c.prototype.listenerCount=function(e){var t=n?n+e:e,r=this._events[t];return r?r.fn?1:r.length:0},c.prototype.emit=function(e,t,r,o,i,a){var c=n?n+e:e;if(!this._events[c])return!1;var l,u,s=this._events[c],f=arguments.length;if(s.fn){switch(s.once&&this.removeListener(e,s.fn,void 0,!0),f){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,t),!0;case 3:return s.fn.call(s.context,t,r),!0;case 4:return s.fn.call(s.context,t,r,o),!0;case 5:return s.fn.call(s.context,t,r,o,i),!0;case 6:return s.fn.call(s.context,t,r,o,i,a),!0}for(u=1,l=new Array(f-1);u<f;u++)l[u-1]=arguments[u];s.fn.apply(s.context,l)}else{var p,d=s.length;for(u=0;u<d;u++)switch(s[u].once&&this.removeListener(e,s[u].fn,void 0,!0),f){case 1:s[u].fn.call(s[u].context);break;case 2:s[u].fn.call(s[u].context,t);break;case 3:s[u].fn.call(s[u].context,t,r);break;case 4:s[u].fn.call(s[u].context,t,r,o);break;default:if(!l)for(p=1,l=new Array(f-1);p<f;p++)l[p-1]=arguments[p];s[u].fn.apply(s[u].context,l)}}return!0},c.prototype.on=function(e,t,n){return i(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return i(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,r,o){var i=n?n+e:e;if(!this._events[i])return this;if(!t)return a(this,i),this;var c=this._events[i];if(c.fn)c.fn!==t||o&&!c.once||r&&c.context!==r||a(this,i);else{for(var l=0,u=[],s=c.length;l<s;l++)(c[l].fn!==t||o&&!c[l].once||r&&c[l].context!==r)&&u.push(c[l]);u.length?this._events[i]=1===u.length?u[0]:u:a(this,i)}return this},c.prototype.removeAllListeners=function(e){var t;return e?(t=n?n+e:e,this._events[t]&&a(this,t)):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,e.exports=c},9353:function(e){"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r<e.length;r+=1)n[r]=e[r];for(var o=0;o<t.length;o+=1)n[o+e.length]=t[o];return n};e.exports=function(e){var o=this;if("function"!=typeof o||"[object Function]"!==t.apply(o))throw new TypeError("Function.prototype.bind called on incompatible "+o);for(var i,a=function(e,t){for(var n=[],r=t||0,o=0;r<e.length;r+=1,o+=1)n[o]=e[r];return n}(arguments,1),c=n(0,o.length-a.length),l=[],u=0;u<c;u++)l[u]="$"+u;if(i=Function("binder","return function ("+function(e,t){for(var n="",r=0;r<e.length;r+=1)n+=e[r],r+1<e.length&&(n+=t);return n}(l,",")+"){ return binder.apply(this,arguments); }")(function(){if(this instanceof i){var t=o.apply(this,r(a,arguments));return Object(t)===t?t:this}return o.apply(e,r(a,arguments))}),o.prototype){var s=function(){};s.prototype=o.prototype,i.prototype=new s,s.prototype=null}return i}},6743:function(e,t,n){"use strict";var r=n(9353);e.exports=Function.prototype.bind||r},453:function(e,t,n){"use strict";var r,o=n(9612),i=n(9383),a=n(1237),c=n(9290),l=n(9538),u=n(8068),s=n(9675),f=n(5345),p=n(1514),d=n(8968),y=n(6188),h=n(8002),m=n(5880),v=n(414),b=n(3093),g=Function,w=function(e){try{return g('"use strict"; return ('+e+").constructor;")()}catch(e){}},x=n(5795),O=n(655),k=function(){throw new s},E=x?function(){try{return k}catch(e){try{return x(arguments,"callee").get}catch(e){return k}}}():k,S=n(4039)(),j=n(3628),P=n(1064),_=n(8648),A=n(1002),T=n(76),C={},N="undefined"!=typeof Uint8Array&&j?j(Uint8Array):r,M={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":S&&j?j([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":C,"%AsyncGenerator%":C,"%AsyncGeneratorFunction%":C,"%AsyncIteratorPrototype%":C,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":i,"%eval%":eval,"%EvalError%":a,"%Float16Array%":"undefined"==typeof Float16Array?r:Float16Array,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":g,"%GeneratorFunction%":C,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":S&&j?j(j([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&S&&j?j((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":o,"%Object.getOwnPropertyDescriptor%":x,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":c,"%ReferenceError%":l,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&S&&j?j((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":S&&j?j(""[Symbol.iterator]()):r,"%Symbol%":S?Symbol:r,"%SyntaxError%":u,"%ThrowTypeError%":E,"%TypedArray%":N,"%TypeError%":s,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":f,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet,"%Function.prototype.call%":T,"%Function.prototype.apply%":A,"%Object.defineProperty%":O,"%Object.getPrototypeOf%":P,"%Math.abs%":p,"%Math.floor%":d,"%Math.max%":y,"%Math.min%":h,"%Math.pow%":m,"%Math.round%":v,"%Math.sign%":b,"%Reflect.getPrototypeOf%":_};if(j)try{null.error}catch(e){var D=j(j(e));M["%Error.prototype%"]=D}var I=function e(t){var n;if("%AsyncFunction%"===t)n=w("async function () {}");else if("%GeneratorFunction%"===t)n=w("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=w("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&j&&(n=j(o.prototype))}return M[t]=n,n},R={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},L=n(6743),B=n(9957),F=L.call(T,Array.prototype.concat),U=L.call(A,Array.prototype.splice),z=L.call(T,String.prototype.replace),q=L.call(T,String.prototype.slice),W=L.call(T,RegExp.prototype.exec),K=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,$=/\\(\\)?/g,H=function(e,t){var n,r=e;if(B(R,r)&&(r="%"+(n=R[r])[0]+"%"),B(M,r)){var o=M[r];if(o===C&&(o=I(r)),void 0===o&&!t)throw new s("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new u("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new s("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new s('"allowMissing" argument must be a boolean');if(null===W(/^%?[^%]*%?$/,e))throw new u("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=q(e,0,1),n=q(e,-1);if("%"===t&&"%"!==n)throw new u("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new u("invalid intrinsic syntax, expected opening `%`");var r=[];return z(e,K,function(e,t,n,o){r[r.length]=n?z(o,$,"$1"):t||e}),r}(e),r=n.length>0?n[0]:"",o=H("%"+r+"%",t),i=o.name,a=o.value,c=!1,l=o.alias;l&&(r=l[0],U(n,F([0,1],l)));for(var f=1,p=!0;f<n.length;f+=1){var d=n[f],y=q(d,0,1),h=q(d,-1);if(('"'===y||"'"===y||"`"===y||'"'===h||"'"===h||"`"===h)&&y!==h)throw new u("property names with quotes must have matching quotes");if("constructor"!==d&&p||(c=!0),B(M,i="%"+(r+="."+d)+"%"))a=M[i];else if(null!=a){if(!(d in a)){if(!t)throw new s("base intrinsic for "+e+" exists, but the property is not available.");return}if(x&&f+1>=n.length){var m=x(a,d);a=(p=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:a[d]}else p=B(a,d),a=a[d];p&&!c&&(M[i]=a)}}return a}},1064:function(e,t,n){"use strict";var r=n(9612);e.exports=r.getPrototypeOf||null},8648:function(e){"use strict";e.exports="undefined"!=typeof Reflect&&Reflect.getPrototypeOf||null},3628:function(e,t,n){"use strict";var r=n(8648),o=n(1064),i=n(7176);e.exports=r?function(e){return r(e)}:o?function(e){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new TypeError("getProto: not an object");return o(e)}:i?function(e){return i(e)}:null},6549:function(e){"use strict";e.exports=Object.getOwnPropertyDescriptor},5795:function(e,t,n){"use strict";var r=n(6549);if(r)try{r([],"length")}catch(e){r=null}e.exports=r},5163:function(e,t,n){"use strict";t.A=function(e){var t=e.size,n=void 0===t?24:t,r=e.onClick,c=(e.icon,e.className),l=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],0<=t.indexOf(n)||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,i),u=["gridicon","gridicons-ellipsis",c,!1,!1,!1].filter(Boolean).join(" ");return o.default.createElement("svg",a({className:u,height:n,width:n,onClick:r},l,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}),o.default.createElement("g",null,o.default.createElement("path",{d:"M7 12a2 2 0 11-4.001-.001A2 2 0 017 12zm12-2a2 2 0 10.001 4.001A2 2 0 0019 10zm-7 0a2 2 0 10.001 4.001A2 2 0 0012 10z"})))};var r,o=(r=n(1594))&&r.__esModule?r:{default:r},i=["size","onClick","icon","className"];function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},a.apply(this,arguments)}},4039:function(e,t,n){"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(1333);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},1333:function(e){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(var r in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var o=Object.getOwnPropertySymbols(e);if(1!==o.length||o[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(e,t);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},9957:function(e,t,n){"use strict";var r=Function.prototype.call,o=Object.prototype.hasOwnProperty,i=n(6743);e.exports=i.call(r,o)},5580:function(e,t,n){var r=n(6110)(n(9325),"DataView");e.exports=r},1549:function(e,t,n){var r=n(2032),o=n(3862),i=n(6721),a=n(2749),c=n(5749);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=c,e.exports=l},79:function(e,t,n){var r=n(3702),o=n(80),i=n(4739),a=n(8655),c=n(1175);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=c,e.exports=l},8223:function(e,t,n){var r=n(6110)(n(9325),"Map");e.exports=r},3661:function(e,t,n){var r=n(3040),o=n(7670),i=n(289),a=n(4509),c=n(2949);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=c,e.exports=l},2804:function(e,t,n){var r=n(6110)(n(9325),"Promise");e.exports=r},6545:function(e,t,n){var r=n(6110)(n(9325),"Set");e.exports=r},8859:function(e,t,n){var r=n(3661),o=n(1380),i=n(1459);function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=o,a.prototype.has=i,e.exports=a},7217:function(e,t,n){var r=n(79),o=n(1420),i=n(938),a=n(3605),c=n(9817),l=n(945);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=o,u.prototype.delete=i,u.prototype.get=a,u.prototype.has=c,u.prototype.set=l,e.exports=u},1873:function(e,t,n){var r=n(9325).Symbol;e.exports=r},7828:function(e,t,n){var r=n(9325).Uint8Array;e.exports=r},8303:function(e,t,n){var r=n(6110)(n(9325),"WeakMap");e.exports=r},1033:function(e){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},7277:function(e){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}},9770:function(e){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var a=e[n];t(a,n,e)&&(i[o++]=a)}return i}},5325:function(e,t,n){var r=n(6131);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},9905:function(e){e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r<o;)if(n(t,e[r]))return!0;return!1}},695:function(e,t,n){var r=n(8096),o=n(2428),i=n(6449),a=n(3656),c=n(361),l=n(7167),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=i(e),s=!n&&o(e),f=!n&&!s&&a(e),p=!n&&!s&&!f&&l(e),d=n||s||f||p,y=d?r(e.length,String):[],h=y.length;for(var m in e)!t&&!u.call(e,m)||d&&("length"==m||f&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||c(m,h))||y.push(m);return y}},4932:function(e){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},4528:function(e){e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},4248:function(e){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},1074:function(e){e.exports=function(e){return e.split("")}},6025:function(e,t,n){var r=n(5288);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},3360:function(e,t,n){var r=n(3243);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},909:function(e,t,n){var r=n(641),o=n(8329)(r);e.exports=o},3777:function(e,t,n){var r=n(909);e.exports=function(e,t){var n=!0;return r(e,function(e,r,o){return n=!!t(e,r,o)}),n}},3599:function(e,t,n){var r=n(4394);e.exports=function(e,t,n){for(var o=-1,i=e.length;++o<i;){var a=e[o],c=t(a);if(null!=c&&(void 0===l?c==c&&!r(c):n(c,l)))var l=c,u=a}return u}},2523:function(e){e.exports=function(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i<o;)if(t(e[i],i,e))return i;return-1}},3120:function(e,t,n){var r=n(4528),o=n(5891);e.exports=function e(t,n,i,a,c){var l=-1,u=t.length;for(i||(i=o),c||(c=[]);++l<u;){var s=t[l];n>0&&i(s)?n>1?e(s,n-1,i,a,c):r(c,s):a||(c[c.length]=s)}return c}},6649:function(e,t,n){var r=n(3221)();e.exports=r},641:function(e,t,n){var r=n(6649),o=n(5950);e.exports=function(e,t){return e&&r(e,t,o)}},7422:function(e,t,n){var r=n(1769),o=n(7797);e.exports=function(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n<i;)e=e[o(t[n++])];return n&&n==i?e:void 0}},2199:function(e,t,n){var r=n(4528),o=n(6449);e.exports=function(e,t,n){var i=t(e);return o(e)?i:r(i,n(e))}},2552:function(e,t,n){var r=n(1873),o=n(659),i=n(9350),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?o(e):i(e)}},3335:function(e){e.exports=function(e,t){return e>t}},8077:function(e){e.exports=function(e,t){return null!=e&&t in Object(e)}},6131:function(e,t,n){var r=n(2523),o=n(5463),i=n(6959);e.exports=function(e,t,n){return t==t?i(e,t,n):r(e,o,n)}},7534:function(e,t,n){var r=n(2552),o=n(346);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},270:function(e,t,n){var r=n(7068),o=n(346);e.exports=function e(t,n,i,a,c){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,i,a,e,c))}},7068:function(e,t,n){var r=n(7217),o=n(5911),i=n(1986),a=n(689),c=n(5861),l=n(6449),u=n(3656),s=n(7167),f="[object Arguments]",p="[object Array]",d="[object Object]",y=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,h,m,v){var b=l(e),g=l(t),w=b?p:c(e),x=g?p:c(t),O=(w=w==f?d:w)==d,k=(x=x==f?d:x)==d,E=w==x;if(E&&u(e)){if(!u(t))return!1;b=!0,O=!1}if(E&&!O)return v||(v=new r),b||s(e)?o(e,t,n,h,m,v):i(e,t,w,n,h,m,v);if(!(1&n)){var S=O&&y.call(e,"__wrapped__"),j=k&&y.call(t,"__wrapped__");if(S||j){var P=S?e.value():e,_=j?t.value():t;return v||(v=new r),m(P,_,n,h,v)}}return!!E&&(v||(v=new r),a(e,t,n,h,m,v))}},1799:function(e,t,n){var r=n(7217),o=n(270);e.exports=function(e,t,n,i){var a=n.length,c=a,l=!i;if(null==e)return!c;for(e=Object(e);a--;){var u=n[a];if(l&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++a<c;){var s=(u=n[a])[0],f=e[s],p=u[1];if(l&&u[2]){if(void 0===f&&!(s in e))return!1}else{var d=new r;if(i)var y=i(f,p,s,e,t,d);if(!(void 0===y?o(p,f,3,i,d):y))return!1}}return!0}},5463:function(e){e.exports=function(e){return e!=e}},5083:function(e,t,n){var r=n(1882),o=n(7296),i=n(3805),a=n(7473),c=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,s=l.toString,f=u.hasOwnProperty,p=RegExp("^"+s.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||o(e))&&(r(e)?p:c).test(a(e))}},4901:function(e,t,n){var r=n(2552),o=n(294),i=n(346),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&o(e.length)&&!!a[r(e)]}},5389:function(e,t,n){var r=n(3663),o=n(7978),i=n(3488),a=n(6449),c=n(583);e.exports=function(e){return"function"==typeof e?e:null==e?i:"object"==typeof e?a(e)?o(e[0],e[1]):r(e):c(e)}},8984:function(e,t,n){var r=n(5527),o=n(3650),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&"constructor"!=n&&t.push(n);return t}},6176:function(e){e.exports=function(e,t){return e<t}},5128:function(e,t,n){var r=n(909),o=n(4894);e.exports=function(e,t){var n=-1,i=o(e)?Array(e.length):[];return r(e,function(e,r,o){i[++n]=t(e,r,o)}),i}},3663:function(e,t,n){var r=n(1799),o=n(776),i=n(7197);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},7978:function(e,t,n){var r=n(270),o=n(8156),i=n(631),a=n(8586),c=n(756),l=n(7197),u=n(7797);e.exports=function(e,t){return a(e)&&c(t)?l(u(e),t):function(n){var a=o(n,e);return void 0===a&&a===t?i(n,e):r(t,a,3)}}},6155:function(e,t,n){var r=n(4932),o=n(7422),i=n(5389),a=n(5128),c=n(3937),l=n(7301),u=n(3714),s=n(3488),f=n(6449);e.exports=function(e,t,n){t=t.length?r(t,function(e){return f(e)?function(t){return o(t,1===e.length?e[0]:e)}:e}):[s];var p=-1;t=r(t,l(i));var d=a(e,function(e,n,o){return{criteria:r(t,function(t){return t(e)}),index:++p,value:e}});return c(d,function(e,t){return u(e,t,n)})}},7237:function(e){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},7255:function(e,t,n){var r=n(7422);e.exports=function(e){return function(t){return r(t,e)}}},6151:function(e){var t=Math.ceil,n=Math.max;e.exports=function(e,r,o,i){for(var a=-1,c=n(t((r-e)/(o||1)),0),l=Array(c);c--;)l[i?c:++a]=e,e+=o;return l}},9302:function(e,t,n){var r=n(3488),o=n(6757),i=n(2865);e.exports=function(e,t){return i(o(e,t,r),e+"")}},9570:function(e,t,n){var r=n(7334),o=n(3243),i=n(3488),a=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;e.exports=a},5160:function(e){e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r<o;)i[r]=e[r+t];return i}},916:function(e,t,n){var r=n(909);e.exports=function(e,t){var n;return r(e,function(e,r,o){return!(n=t(e,r,o))}),!!n}},3937:function(e){e.exports=function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}},8096:function(e){e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},7556:function(e,t,n){var r=n(1873),o=n(4932),i=n(6449),a=n(4394),c=r?r.prototype:void 0,l=c?c.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return o(t,e)+"";if(a(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},4128:function(e,t,n){var r=n(1800),o=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,""):e}},7301:function(e){e.exports=function(e){return function(t){return e(t)}}},5765:function(e,t,n){var r=n(8859),o=n(5325),i=n(9905),a=n(9219),c=n(4517),l=n(4247);e.exports=function(e,t,n){var u=-1,s=o,f=e.length,p=!0,d=[],y=d;if(n)p=!1,s=i;else if(f>=200){var h=t?null:c(e);if(h)return l(h);p=!1,s=a,y=new r}else y=t?[]:d;e:for(;++u<f;){var m=e[u],v=t?t(m):m;if(m=n||0!==m?m:0,p&&v==v){for(var b=y.length;b--;)if(y[b]===v)continue e;t&&y.push(v),d.push(m)}else s(y,v,n)||(y!==d&&y.push(v),d.push(m))}return d}},9219:function(e){e.exports=function(e,t){return e.has(t)}},1769:function(e,t,n){var r=n(6449),o=n(8586),i=n(1802),a=n(3222);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:i(a(e))}},8754:function(e,t,n){var r=n(5160);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},3730:function(e,t,n){var r=n(4394);e.exports=function(e,t){if(e!==t){var n=void 0!==e,o=null===e,i=e==e,a=r(e),c=void 0!==t,l=null===t,u=t==t,s=r(t);if(!l&&!s&&!a&&e>t||a&&c&&u&&!l&&!s||o&&c&&u||!n&&u||!i)return 1;if(!o&&!a&&!s&&e<t||s&&n&&i&&!o&&!a||l&&n&&i||!c&&i||!u)return-1}return 0}},3714:function(e,t,n){var r=n(3730);e.exports=function(e,t,n){for(var o=-1,i=e.criteria,a=t.criteria,c=i.length,l=n.length;++o<c;){var u=r(i[o],a[o]);if(u)return o>=l?u:u*("desc"==n[o]?-1:1)}return e.index-t.index}},5481:function(e,t,n){var r=n(9325)["__core-js_shared__"];e.exports=r},8329:function(e,t,n){var r=n(4894);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var i=n.length,a=t?i:-1,c=Object(n);(t?a--:++a<i)&&!1!==o(c[a],a,c););return n}}},3221:function(e){e.exports=function(e){return function(t,n,r){for(var o=-1,i=Object(t),a=r(t),c=a.length;c--;){var l=a[e?c:++o];if(!1===n(i[l],l,i))break}return t}}},2507:function(e,t,n){var r=n(8754),o=n(9698),i=n(3912),a=n(3222);e.exports=function(e){return function(t){t=a(t);var n=o(t)?i(t):void 0,c=n?n[0]:t.charAt(0),l=n?r(n,1).join(""):t.slice(1);return c[e]()+l}}},2006:function(e,t,n){var r=n(5389),o=n(4894),i=n(5950);e.exports=function(e){return function(t,n,a){var c=Object(t);if(!o(t)){var l=r(n,3);t=i(t),n=function(e){return l(c[e],e,c)}}var u=e(t,n,a);return u>-1?c[l?t[u]:u]:void 0}}},5508:function(e,t,n){var r=n(6151),o=n(6800),i=n(7400);e.exports=function(e){return function(t,n,a){return a&&"number"!=typeof a&&o(t,n,a)&&(n=a=void 0),t=i(t),void 0===n?(n=t,t=0):n=i(n),a=void 0===a?t<n?1:-1:i(a),r(t,n,a,e)}}},4517:function(e,t,n){var r=n(6545),o=n(3950),i=n(4247),a=r&&1/i(new r([,-0]))[1]==1/0?function(e){return new r(e)}:o;e.exports=a},3243:function(e,t,n){var r=n(6110),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},5911:function(e,t,n){var r=n(8859),o=n(4248),i=n(9219);e.exports=function(e,t,n,a,c,l){var u=1&n,s=e.length,f=t.length;if(s!=f&&!(u&&f>s))return!1;var p=l.get(e),d=l.get(t);if(p&&d)return p==t&&d==e;var y=-1,h=!0,m=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++y<s;){var v=e[y],b=t[y];if(a)var g=u?a(b,v,y,t,e,l):a(v,b,y,e,t,l);if(void 0!==g){if(g)continue;h=!1;break}if(m){if(!o(t,function(e,t){if(!i(m,t)&&(v===e||c(v,e,n,a,l)))return m.push(t)})){h=!1;break}}else if(v!==b&&!c(v,b,n,a,l)){h=!1;break}}return l.delete(e),l.delete(t),h}},1986:function(e,t,n){var r=n(1873),o=n(7828),i=n(5288),a=n(5911),c=n(317),l=n(4247),u=r?r.prototype:void 0,s=u?u.valueOf:void 0;e.exports=function(e,t,n,r,u,f,p){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!f(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var d=c;case"[object Set]":var y=1&r;if(d||(d=l),e.size!=t.size&&!y)return!1;var h=p.get(e);if(h)return h==t;r|=2,p.set(e,t);var m=a(d(e),d(t),r,u,f,p);return p.delete(e),m;case"[object Symbol]":if(s)return s.call(e)==s.call(t)}return!1}},689:function(e,t,n){var r=n(2),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,i,a,c){var l=1&n,u=r(e),s=u.length;if(s!=r(t).length&&!l)return!1;for(var f=s;f--;){var p=u[f];if(!(l?p in t:o.call(t,p)))return!1}var d=c.get(e),y=c.get(t);if(d&&y)return d==t&&y==e;var h=!0;c.set(e,t),c.set(t,e);for(var m=l;++f<s;){var v=e[p=u[f]],b=t[p];if(i)var g=l?i(b,v,p,t,e,c):i(v,b,p,e,t,c);if(!(void 0===g?v===b||a(v,b,n,i,c):g)){h=!1;break}m||(m="constructor"==p)}if(h&&!m){var w=e.constructor,x=t.constructor;w==x||!("constructor"in e)||!("constructor"in t)||"function"==typeof w&&w instanceof w&&"function"==typeof x&&x instanceof x||(h=!1)}return c.delete(e),c.delete(t),h}},4840:function(e,t,n){var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},2:function(e,t,n){var r=n(2199),o=n(4664),i=n(5950);e.exports=function(e){return r(e,i,o)}},2651:function(e,t,n){var r=n(4218);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},776:function(e,t,n){var r=n(756),o=n(5950);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var i=t[n],a=e[i];t[n]=[i,a,r(a)]}return t}},6110:function(e,t,n){var r=n(5083),o=n(392);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},8879:function(e,t,n){var r=n(4335)(Object.getPrototypeOf,Object);e.exports=r},659:function(e,t,n){var r=n(1873),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,c=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,c),n=e[c];try{e[c]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[c]=n:delete e[c]),o}},4664:function(e,t,n){var r=n(9770),o=n(3345),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,c=a?function(e){return null==e?[]:(e=Object(e),r(a(e),function(t){return i.call(e,t)}))}:o;e.exports=c},5861:function(e,t,n){var r=n(5580),o=n(8223),i=n(2804),a=n(6545),c=n(8303),l=n(2552),u=n(7473),s="[object Map]",f="[object Promise]",p="[object Set]",d="[object WeakMap]",y="[object DataView]",h=u(r),m=u(o),v=u(i),b=u(a),g=u(c),w=l;(r&&w(new r(new ArrayBuffer(1)))!=y||o&&w(new o)!=s||i&&w(i.resolve())!=f||a&&w(new a)!=p||c&&w(new c)!=d)&&(w=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case h:return y;case m:return s;case v:return f;case b:return p;case g:return d}return t}),e.exports=w},392:function(e){e.exports=function(e,t){return null==e?void 0:e[t]}},9326:function(e,t,n){var r=n(1769),o=n(2428),i=n(6449),a=n(361),c=n(294),l=n(7797);e.exports=function(e,t,n){for(var u=-1,s=(t=r(t,e)).length,f=!1;++u<s;){var p=l(t[u]);if(!(f=null!=e&&n(e,p)))break;e=e[p]}return f||++u!=s?f:!!(s=null==e?0:e.length)&&c(s)&&a(p,s)&&(i(e)||o(e))}},9698:function(e){var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},2032:function(e,t,n){var r=n(1042);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},3862:function(e){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},6721:function(e,t,n){var r=n(1042),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},2749:function(e,t,n){var r=n(1042),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},5749:function(e,t,n){var r=n(1042);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},5891:function(e,t,n){var r=n(1873),o=n(2428),i=n(6449),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return i(e)||o(e)||!!(a&&e&&e[a])}},361:function(e){var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},6800:function(e,t,n){var r=n(5288),o=n(4894),i=n(361),a=n(3805);e.exports=function(e,t,n){if(!a(n))return!1;var c=typeof t;return!!("number"==c?o(n)&&i(t,n.length):"string"==c&&t in n)&&r(n[t],e)}},8586:function(e,t,n){var r=n(6449),o=n(4394),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(a.test(e)||!i.test(e)||null!=t&&e in Object(t))}},4218:function(e){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},7296:function(e,t,n){var r,o=n(5481),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!i&&i in e}},5527:function(e){var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},756:function(e,t,n){var r=n(3805);e.exports=function(e){return e==e&&!r(e)}},3702:function(e){e.exports=function(){this.__data__=[],this.size=0}},80:function(e,t,n){var r=n(6025),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},4739:function(e,t,n){var r=n(6025);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},8655:function(e,t,n){var r=n(6025);e.exports=function(e){return r(this.__data__,e)>-1}},1175:function(e,t,n){var r=n(6025);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},3040:function(e,t,n){var r=n(1549),o=n(79),i=n(8223);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},7670:function(e,t,n){var r=n(2651);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},289:function(e,t,n){var r=n(2651);e.exports=function(e){return r(this,e).get(e)}},4509:function(e,t,n){var r=n(2651);e.exports=function(e){return r(this,e).has(e)}},2949:function(e,t,n){var r=n(2651);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},317:function(e){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}},7197:function(e){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},2224:function(e,t,n){var r=n(104);e.exports=function(e){var t=r(e,function(e){return 500===n.size&&n.clear(),e}),n=t.cache;return t}},1042:function(e,t,n){var r=n(6110)(Object,"create");e.exports=r},3650:function(e,t,n){var r=n(4335)(Object.keys,Object);e.exports=r},6009:function(e,t,n){e=n.nmd(e);var r=n(4840),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,a=i&&i.exports===o&&r.process,c=function(){try{var e=i&&i.require&&i.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=c},9350:function(e){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},4335:function(e){e.exports=function(e,t){return function(n){return e(t(n))}}},6757:function(e,t,n){var r=n(1033),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,a=-1,c=o(i.length-t,0),l=Array(c);++a<c;)l[a]=i[t+a];a=-1;for(var u=Array(t+1);++a<t;)u[a]=i[a];return u[t]=n(l),r(e,this,u)}}},9325:function(e,t,n){var r=n(4840),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},1380:function(e){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},1459:function(e){e.exports=function(e){return this.__data__.has(e)}},4247:function(e){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}},2865:function(e,t,n){var r=n(9570),o=n(1811)(r);e.exports=o},1811:function(e){var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),i=16-(o-r);if(r=o,i>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},1420:function(e,t,n){var r=n(79);e.exports=function(){this.__data__=new r,this.size=0}},938:function(e){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},3605:function(e){e.exports=function(e){return this.__data__.get(e)}},9817:function(e){e.exports=function(e){return this.__data__.has(e)}},945:function(e,t,n){var r=n(79),o=n(8223),i=n(3661);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(e,t),this.size=n.size,this}},6959:function(e){e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r<o;)if(e[r]===t)return r;return-1}},3912:function(e,t,n){var r=n(1074),o=n(9698),i=n(2054);e.exports=function(e){return o(e)?i(e):r(e)}},1802:function(e,t,n){var r=n(2224),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,function(e,n,r,o){t.push(r?o.replace(i,"$1"):n||e)}),t});e.exports=a},7797:function(e,t,n){var r=n(4394);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},7473:function(e){var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},1800:function(e){var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},2054:function(e){var t="\\ud800-\\udfff",n="["+t+"]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^"+t+"]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",c="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+o+")"+"?",u="[\\ufe0e\\ufe0f]?",s=u+l+("(?:\\u200d(?:"+[i,a,c].join("|")+")"+u+l+")*"),f="(?:"+[i+r+"?",r,a,c,n].join("|")+")",p=RegExp(o+"(?="+o+")|"+f+s,"g");e.exports=function(e){return e.match(p)||[]}},7334:function(e){e.exports=function(e){return function(){return e}}},8221:function(e,t,n){var r=n(3805),o=n(124),i=n(9374),a=Math.max,c=Math.min;e.exports=function(e,t,n){var l,u,s,f,p,d,y=0,h=!1,m=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var n=l,r=u;return l=u=void 0,y=t,f=e.apply(r,n)}function g(e){var n=e-d;return void 0===d||n>=t||n<0||m&&e-y>=s}function w(){var e=o();if(g(e))return x(e);p=setTimeout(w,function(e){var n=t-(e-d);return m?c(n,s-(e-y)):n}(e))}function x(e){return p=void 0,v&&l?b(e):(l=u=void 0,f)}function O(){var e=o(),n=g(e);if(l=arguments,u=this,d=e,n){if(void 0===p)return function(e){return y=e,p=setTimeout(w,t),h?b(e):f}(d);if(m)return clearTimeout(p),p=setTimeout(w,t),b(d)}return void 0===p&&(p=setTimeout(w,t)),f}return t=i(t)||0,r(n)&&(h=!!n.leading,s=(m="maxWait"in n)?a(i(n.maxWait)||0,t):s,v="trailing"in n?!!n.trailing:v),O.cancel=function(){void 0!==p&&clearTimeout(p),y=0,l=d=u=p=void 0},O.flush=function(){return void 0===p?f:x(o())},O}},5288:function(e){e.exports=function(e,t){return e===t||e!=e&&t!=t}},9747:function(e,t,n){var r=n(7277),o=n(3777),i=n(5389),a=n(6449),c=n(6800);e.exports=function(e,t,n){var l=a(e)?r:o;return n&&c(e,t,n)&&(t=void 0),l(e,i(t,3))}},7309:function(e,t,n){var r=n(2006)(n(4713));e.exports=r},4713:function(e,t,n){var r=n(2523),o=n(5389),i=n(1489),a=Math.max;e.exports=function(e,t,n){var c=null==e?0:e.length;if(!c)return-1;var l=null==n?0:i(n);return l<0&&(l=a(c+l,0)),r(e,o(t,3),l)}},7307:function(e,t,n){var r=n(3120),o=n(5378);e.exports=function(e,t){return r(o(e,t),1)}},8156:function(e,t,n){var r=n(7422);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},631:function(e,t,n){var r=n(8077),o=n(9326);e.exports=function(e,t){return null!=e&&o(e,t,r)}},3488:function(e){e.exports=function(e){return e}},2428:function(e,t,n){var r=n(7534),o=n(346),i=Object.prototype,a=i.hasOwnProperty,c=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,"callee")&&!c.call(e,"callee")};e.exports=l},6449:function(e){var t=Array.isArray;e.exports=t},4894:function(e,t,n){var r=n(1882),o=n(294);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},3812:function(e,t,n){var r=n(2552),o=n(346);e.exports=function(e){return!0===e||!1===e||o(e)&&"[object Boolean]"==r(e)}},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),o=n(9935),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,c=a&&a.exports===i?r.Buffer:void 0,l=(c?c.isBuffer:void 0)||o;e.exports=l},2404:function(e,t,n){var r=n(270);e.exports=function(e,t){return r(e,t)}},1882:function(e,t,n){var r=n(2552),o=n(3805);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},294:function(e){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},1741:function(e,t,n){var r=n(8023);e.exports=function(e){return r(e)&&e!=+e}},9843:function(e){e.exports=function(e){return null==e}},8023:function(e,t,n){var r=n(2552),o=n(346);e.exports=function(e){return"number"==typeof e||o(e)&&"[object Number]"==r(e)}},3805:function(e){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},346:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},1331:function(e,t,n){var r=n(2552),o=n(8879),i=n(346),a=Function.prototype,c=Object.prototype,l=a.toString,u=c.hasOwnProperty,s=l.call(Object);e.exports=function(e){if(!i(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==s}},5015:function(e,t,n){var r=n(2552),o=n(6449),i=n(346);e.exports=function(e){return"string"==typeof e||!o(e)&&i(e)&&"[object String]"==r(e)}},4394:function(e,t,n){var r=n(2552),o=n(346);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},7167:function(e,t,n){var r=n(4901),o=n(7301),i=n(6009),a=i&&i.isTypedArray,c=a?o(a):r;e.exports=c},5950:function(e,t,n){var r=n(695),o=n(8984),i=n(4894);e.exports=function(e){return i(e)?r(e):o(e)}},8090:function(e){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},5378:function(e,t,n){var r=n(4932),o=n(5389),i=n(5128),a=n(6449);e.exports=function(e,t){return(a(e)?r:i)(e,o(t,3))}},3916:function(e,t,n){var r=n(3360),o=n(641),i=n(5389);e.exports=function(e,t){var n={};return t=i(t,3),o(e,function(e,o,i){r(n,o,t(e,o,i))}),n}},4506:function(e,t,n){var r=n(3599),o=n(3335),i=n(3488);e.exports=function(e){return e&&e.length?r(e,i,o):void 0}},7551:function(e,t,n){var r=n(3599),o=n(3335),i=n(5389);e.exports=function(e,t){return e&&e.length?r(e,i(t,2),o):void 0}},104:function(e,t,n){var r=n(3661);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},1684:function(e,t,n){var r=n(3599),o=n(6176),i=n(3488);e.exports=function(e){return e&&e.length?r(e,i,o):void 0}},6533:function(e,t,n){var r=n(3599),o=n(5389),i=n(6176);e.exports=function(e,t){return e&&e.length?r(e,o(t,2),i):void 0}},3950:function(e){e.exports=function(){}},124:function(e,t,n){var r=n(9325);e.exports=function(){return r.Date.now()}},583:function(e,t,n){var r=n(7237),o=n(7255),i=n(8586),a=n(7797);e.exports=function(e){return i(e)?r(a(e)):o(e)}},3181:function(e,t,n){var r=n(5508)();e.exports=r},2426:function(e,t,n){var r=n(4248),o=n(5389),i=n(916),a=n(6449),c=n(6800);e.exports=function(e,t,n){var l=a(e)?r:i;return n&&c(e,t,n)&&(t=void 0),l(e,o(t,3))}},3031:function(e,t,n){var r=n(3120),o=n(6155),i=n(9302),a=n(6800),c=i(function(e,t){if(null==e)return[];var n=t.length;return n>1&&a(e,t[0],t[1])?t=[]:n>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])});e.exports=c},3345:function(e){e.exports=function(){return[]}},9935:function(e){e.exports=function(){return!1}},7350:function(e,t,n){var r=n(8221),o=n(3805);e.exports=function(e,t,n){var i=!0,a=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return o(n)&&(i="leading"in n?!!n.leading:i,a="trailing"in n?!!n.trailing:a),r(e,t,{leading:i,maxWait:t,trailing:a})}},7400:function(e,t,n){var r=n(9374),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},1489:function(e,t,n){var r=n(7400);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},9374:function(e,t,n){var r=n(4128),o=n(3805),i=n(4394),a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=c.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):a.test(e)?NaN:+e}},3222:function(e,t,n){var r=n(7556);e.exports=function(e){return null==e?"":r(e)}},14:function(e,t,n){var r=n(5389),o=n(5765);e.exports=function(e,t){return e&&e.length?o(e,r(t,2)):[]}},5808:function(e,t,n){var r=n(2507)("toUpperCase");e.exports=r},1514:function(e){"use strict";e.exports=Math.abs},8968:function(e){"use strict";e.exports=Math.floor},4459:function(e){"use strict";e.exports=Number.isNaN||function(e){return e!=e}},6188:function(e){"use strict";e.exports=Math.max},8002:function(e){"use strict";e.exports=Math.min},5880:function(e){"use strict";e.exports=Math.pow},414:function(e){"use strict";e.exports=Math.round},3093:function(e,t,n){"use strict";var r=n(4459);e.exports=function(e){return r(e)||0===e?e:e<0?-1:1}},1240:function(e,t,n){var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,c="function"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&c?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=c&&l&&"function"==typeof l.get?l.get:null,s=c&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,y=Boolean.prototype.valueOf,h=Object.prototype.toString,m=Function.prototype.toString,v=String.prototype.match,b=String.prototype.slice,g=String.prototype.replace,w=String.prototype.toUpperCase,x=String.prototype.toLowerCase,O=RegExp.prototype.test,k=Array.prototype.concat,E=Array.prototype.join,S=Array.prototype.slice,j=Math.floor,P="function"==typeof BigInt?BigInt.prototype.valueOf:null,_=Object.getOwnPropertySymbols,A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"==typeof Symbol&&"object"==typeof Symbol.iterator,C="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,M=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function D(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||O.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-j(-e):j(e);if(r!==e){var o=String(r),i=b.call(t,o.length+1);return g.call(o,n,"$&_")+"."+g.call(g.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return g.call(t,n,"$&_")}var I=n(2634),R=I.custom,L=$(R)?R:null,B={__proto__:null,double:'"',single:"'"},F={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};function U(e,t,n){var r=n.quoteStyle||t,o=B[r];return o+e+o}function z(e){return g.call(String(e),/"/g,"&quot;")}function q(e){return!C||!("object"==typeof e&&(C in e||void 0!==e[C]))}function W(e){return"[object Array]"===G(e)&&q(e)}function K(e){return"[object RegExp]"===G(e)&&q(e)}function $(e){if(T)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!A)return!1;try{return A.call(e),!0}catch(e){}return!1}e.exports=function e(t,r,o,c){var l=r||{};if(V(l,"quoteStyle")&&!V(B,l.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(l,"maxStringLength")&&("number"==typeof l.maxStringLength?l.maxStringLength<0&&l.maxStringLength!==1/0:null!==l.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var h=!V(l,"customInspect")||l.customInspect;if("boolean"!=typeof h&&"symbol"!==h)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(l,"indent")&&null!==l.indent&&"\t"!==l.indent&&!(parseInt(l.indent,10)===l.indent&&l.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(l,"numericSeparator")&&"boolean"!=typeof l.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var w=l.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return X(t,l);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var O=String(t);return w?D(t,O):O}if("bigint"==typeof t){var j=String(t)+"n";return w?D(t,j):j}var _=void 0===l.depth?5:l.depth;if(void 0===o&&(o=0),o>=_&&_>0&&"object"==typeof t)return W(t)?"[Array]":"[Object]";var R=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=E.call(Array(e.indent+1)," ")}return{base:n,prev:E.call(Array(t+1),n)}}(l,o);if(void 0===c)c=[];else if(Y(c,t)>=0)return"[Circular]";function F(t,n,r){if(n&&(c=S.call(c)).push(n),r){var i={depth:l.depth};return V(l,"quoteStyle")&&(i.quoteStyle=l.quoteStyle),e(t,i,o+1,c)}return e(t,l,o+1,c)}if("function"==typeof t&&!K(t)){var H=function(e){if(e.name)return e.name;var t=v.call(m.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),Z=ne(t,F);return"[Function"+(H?": "+H:" (anonymous)")+"]"+(Z.length>0?" { "+E.call(Z,", ")+" }":"")}if($(t)){var re=T?g.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):A.call(t);return"object"!=typeof t||T?re:J(re)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var oe="<"+x.call(String(t.nodeName)),ie=t.attributes||[],ae=0;ae<ie.length;ae++)oe+=" "+ie[ae].name+"="+U(z(ie[ae].value),"double",l);return oe+=">",t.childNodes&&t.childNodes.length&&(oe+="..."),oe+="</"+x.call(String(t.nodeName))+">"}if(W(t)){if(0===t.length)return"[]";var ce=ne(t,F);return R&&!function(e){for(var t=0;t<e.length;t++)if(Y(e[t],"\n")>=0)return!1;return!0}(ce)?"["+te(ce,R)+"]":"[ "+E.call(ce,", ")+" ]"}if(function(e){return"[object Error]"===G(e)&&q(e)}(t)){var le=ne(t,F);return"cause"in Error.prototype||!("cause"in t)||N.call(t,"cause")?0===le.length?"["+String(t)+"]":"{ ["+String(t)+"] "+E.call(le,", ")+" }":"{ ["+String(t)+"] "+E.call(k.call("[cause]: "+F(t.cause),le),", ")+" }"}if("object"==typeof t&&h){if(L&&"function"==typeof t[L]&&I)return I(t,{depth:_-o});if("symbol"!==h&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{u.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var ue=[];return a&&a.call(t,function(e,n){ue.push(F(n,t,!0)+" => "+F(e,t))}),ee("Map",i.call(t),ue,R)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var se=[];return s&&s.call(t,function(e){se.push(F(e,t))}),ee("Set",u.call(t),se,R)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Q("WeakMap");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Q("WeakSet");if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{return d.call(e),!0}catch(e){}return!1}(t))return Q("WeakRef");if(function(e){return"[object Number]"===G(e)&&q(e)}(t))return J(F(Number(t)));if(function(e){if(!e||"object"!=typeof e||!P)return!1;try{return P.call(e),!0}catch(e){}return!1}(t))return J(F(P.call(t)));if(function(e){return"[object Boolean]"===G(e)&&q(e)}(t))return J(y.call(t));if(function(e){return"[object String]"===G(e)&&q(e)}(t))return J(F(String(t)));if("undefined"!=typeof window&&t===window)return"{ [object Window] }";if("undefined"!=typeof globalThis&&t===globalThis||void 0!==n.g&&t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===G(e)&&q(e)}(t)&&!K(t)){var fe=ne(t,F),pe=M?M(t)===Object.prototype:t instanceof Object||t.constructor===Object,de=t instanceof Object?"":"null prototype",ye=!pe&&C&&Object(t)===t&&C in t?b.call(G(t),8,-1):de?"Object":"",he=(pe||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(ye||de?"["+E.call(k.call([],ye||[],de||[]),": ")+"] ":"");return 0===fe.length?he+"{}":R?he+"{"+te(fe,R)+"}":he+"{ "+E.call(fe,", ")+" }"}return String(t)};var H=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return H.call(e,t)}function G(e){return h.call(e)}function Y(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function X(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return X(b.call(e,0,t.maxStringLength),t)+r}var o=F[t.quoteStyle||"single"];return o.lastIndex=0,U(g.call(g.call(e,o,"\\$1"),/[\x00-\x1f]/g,Z),"single",t)}function Z(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+w.call(t.toString(16))}function J(e){return"Object("+e+")"}function Q(e){return e+" { ? }"}function ee(e,t,n,r){return e+" ("+t+") {"+(r?te(n,r):E.call(n,", "))+"}"}function te(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+E.call(e,","+n)+"\n"+t.prev}function ne(e,t){var n=W(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=V(e,o)?t(e[o],e):""}var i,a="function"==typeof _?_(e):[];if(T){i={};for(var c=0;c<a.length;c++)i["$"+a[c]]=a[c]}for(var l in e)V(e,l)&&(n&&String(Number(l))===l&&l<e.length||T&&i["$"+l]instanceof Symbol||(O.call(/[^\w$]/,l)?r.push(t(l,e)+": "+t(e[l],e)):r.push(l+": "+t(e[l],e))));if("function"==typeof _)for(var u=0;u<a.length;u++)N.call(e,a[u])&&r.push("["+t(a[u])+"]: "+t(e[a[u]],e));return r}},2694:function(e,t,n){"use strict";var r=n(6925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},5556:function(e,t,n){e.exports=n(2694)()},6925:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4765:function(e){"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},5373:function(e,t,n){"use strict";var r=n(8636),o=n(2642),i=n(4765);e.exports={formats:i,parse:o,stringify:r}},2642:function(e,t,n){"use strict";var r=n(7720),o=Object.prototype.hasOwnProperty,i=Array.isArray,a={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictMerge:!0,strictNullHandling:!1,throwOnLimitExceeded:!1},c=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},l=function(e,t,n){if(e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1)return e.split(",");if(t.throwOnLimitExceeded&&n>=t.arrayLimit)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(1===t.arrayLimit?"":"s")+" allowed in an array.");return e},u=function(e,t,n,i){if(e){var a=function(e,t){var n=t.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e;if(t.depth<=0){if(!t.plainObjects&&o.call(Object.prototype,n)&&!t.allowPrototypes)return;return[n]}var r=[],i=n.indexOf("["),a=i>=0?n.slice(0,i):n;if(a){if(!t.plainObjects&&o.call(Object.prototype,a)&&!t.allowPrototypes)return;r[r.length]=a}for(var c=n.length,l=i,u=0;l>=0&&u<t.depth;){for(var s=1,f=l+1,p=-1;f<c&&p<0;){var d=n.charCodeAt(f);91===d?s+=1:93===d&&0==(s-=1)&&(p=f),f+=1}if(p<0)return r[r.length]="["+n.slice(l)+"]",r;var y=n.slice(l,p+1),h=y.slice(1,-1);if(!t.plainObjects&&o.call(Object.prototype,h)&&!t.allowPrototypes)return;r[r.length]=y,u+=1,l=n.indexOf("[",p+1)}if(l>=0){if(!0===t.strictDepth)throw new RangeError("Input depth exceeded depth option of "+t.depth+" and strictDepth is true");r[r.length]="["+n.slice(l)+"]"}return r}(e,n);if(a)return function(e,t,n,o){var i=0;if(e.length>0&&"[]"===e[e.length-1]){var a=e.slice(0,-1).join("");i=Array.isArray(t)&&t[a]?t[a].length:0}for(var c=o?t:l(t,n,i),u=e.length-1;u>=0;--u){var s,f=e[u];if("[]"===f&&n.parseArrays)s=r.isOverflow(c)?c:n.allowEmptyArrays&&(""===c||n.strictNullHandling&&null===c)?[]:r.combine([],c,n.arrayLimit,n.plainObjects);else{s=n.plainObjects?{__proto__:null}:{};var p="["===f.charAt(0)&&"]"===f.charAt(f.length-1)?f.slice(1,-1):f,d=n.decodeDotInKeys?p.replace(/%2E/g,"."):p,y=parseInt(d,10),h=!isNaN(y)&&f!==d&&String(y)===d&&y>=0&&n.parseArrays;if(n.parseArrays||""!==d)if(h&&y<n.arrayLimit)(s=[])[y]=c;else{if(h&&n.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+n.arrayLimit+" element"+(1===n.arrayLimit?"":"s")+" allowed in an array.");h?(s[y]=c,r.markOverflow(s,y)):"__proto__"!==d&&(s[d]=c)}else s={0:c}}c=s}return c}(a,t,n,i)}};e.exports=function(e,t){var n=function(e){if(!e)return a;if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.decodeDotInKeys&&"boolean"!=typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");if(void 0!==e.throwOnLimitExceeded&&"boolean"!=typeof e.throwOnLimitExceeded)throw new TypeError("`throwOnLimitExceeded` option must be a boolean");var t=void 0===e.charset?a.charset:e.charset,n=void 0===e.duplicates?a.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:void 0===e.allowDots?!0===e.decodeDotInKeys||a.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:a.allowEmptyArrays,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decodeDotInKeys:"boolean"==typeof e.decodeDotInKeys?e.decodeDotInKeys:a.decodeDotInKeys,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictDepth:"boolean"==typeof e.strictDepth?!!e.strictDepth:a.strictDepth,strictMerge:"boolean"==typeof e.strictMerge?!!e.strictMerge:a.strictMerge,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling,throwOnLimitExceeded:"boolean"==typeof e.throwOnLimitExceeded&&e.throwOnLimitExceeded}}(t);if(""===e||null==e)return n.plainObjects?{__proto__:null}:{};for(var s="string"==typeof e?function(e,t){var n={__proto__:null},u=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;u=u.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,f=u.split(t.delimiter,t.throwOnLimitExceeded&&void 0!==s?s+1:s);if(t.throwOnLimitExceeded&&void 0!==s&&f.length>s)throw new RangeError("Parameter limit exceeded. Only "+s+" parameter"+(1===s?"":"s")+" allowed.");var p,d=-1,y=t.charset;if(t.charsetSentinel)for(p=0;p<f.length;++p)0===f[p].indexOf("utf8=")&&("utf8=%E2%9C%93"===f[p]?y="utf-8":"utf8=%26%2310003%3B"===f[p]&&(y="iso-8859-1"),d=p,p=f.length);for(p=0;p<f.length;++p)if(p!==d){var h,m,v=f[p],b=v.indexOf("]="),g=-1===b?v.indexOf("="):b+1;if(-1===g?(h=t.decoder(v,a.decoder,y,"key"),m=t.strictNullHandling?null:""):null!==(h=t.decoder(v.slice(0,g),a.decoder,y,"key"))&&(m=r.maybeMap(l(v.slice(g+1),t,i(n[h])?n[h].length:0),function(e){return t.decoder(e,a.decoder,y,"value")})),m&&t.interpretNumericEntities&&"iso-8859-1"===y&&(m=c(String(m))),v.indexOf("[]=")>-1&&(m=i(m)?[m]:m),t.comma&&i(m)&&m.length>t.arrayLimit){if(t.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(1===t.arrayLimit?"":"s")+" allowed in an array.");m=r.combine([],m,t.arrayLimit,t.plainObjects)}if(null!==h){var w=o.call(n,h);w&&("combine"===t.duplicates||v.indexOf("[]=")>-1)?n[h]=r.combine(n[h],m,t.arrayLimit,t.plainObjects):w&&"last"!==t.duplicates||(n[h]=m)}}return n}(e,n):e,f=n.plainObjects?{__proto__:null}:{},p=Object.keys(s),d=0;d<p.length;++d){var y=p[d],h=u(y,s[y],n,"string"==typeof e);f=r.merge(f,h,n)}return!0===n.allowSparse?f:r.compact(f)}},8636:function(e,t,n){"use strict";var r=n(920),o=n(7720),i=n(4765),a=Object.prototype.hasOwnProperty,c={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},l=Array.isArray,u=Array.prototype.push,s=function(e,t){u.apply(e,l(t)?t:[t])},f=Date.prototype.toISOString,p=i.default,d={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:o.encode,encodeValuesOnly:!1,filter:void 0,format:p,formatter:i.formatters[p],indices:!1,serializeDate:function(e){return f.call(e)},skipNulls:!1,strictNullHandling:!1},y={},h=function e(t,n,i,a,c,u,f,p,h,m,v,b,g,w,x,O,k,E){for(var S,j=t,P=E,_=0,A=!1;void 0!==(P=P.get(y))&&!A;){var T=P.get(t);if(_+=1,void 0!==T){if(T===_)throw new RangeError("Cyclic object value");A=!0}void 0===P.get(y)&&(_=0)}if("function"==typeof m?j=m(n,j):j instanceof Date?j=g(j):"comma"===i&&l(j)&&(j=o.maybeMap(j,function(e){return e instanceof Date?g(e):e})),null===j){if(u)return x(h&&!O?h(n,d.encoder,k,"key",w):n);j=""}if("string"==typeof(S=j)||"number"==typeof S||"boolean"==typeof S||"symbol"==typeof S||"bigint"==typeof S||o.isBuffer(j))return h?[x(O?n:h(n,d.encoder,k,"key",w))+"="+x(h(j,d.encoder,k,"value",w))]:[x(n)+"="+x(String(j))];var C,N=[];if(void 0===j)return N;if("comma"===i&&l(j))O&&h&&(j=o.maybeMap(j,function(e){return null==e?e:h(e)})),C=[{value:j.length>0?j.join(",")||null:void 0}];else if(l(m))C=m;else{var M=Object.keys(j);C=v?M.sort(v):M}var D=p?String(n).replace(/\./g,"%2E"):String(n),I=a&&l(j)&&1===j.length?D+"[]":D;if(c&&l(j)&&0===j.length)return I+"[]";for(var R=0;R<C.length;++R){var L=C[R],B="object"==typeof L&&L&&void 0!==L.value?L.value:j[L];if(!f||null!==B){var F=b&&p?String(L).replace(/\./g,"%2E"):String(L),U=l(j)?"function"==typeof i?i(I,F):I:I+(b?"."+F:"["+F+"]");E.set(t,_);var z=r();z.set(y,E),s(N,e(B,U,i,a,c,u,f,p,"comma"===i&&O&&l(j)?null:h,m,v,b,g,w,x,O,k,z))}}return N};e.exports=function(e,t){var n,o=e,u=function(e){if(!e)return d;if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||d.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=i.default;if(void 0!==e.format){if(!a.call(i.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r,o=i.formatters[n],u=d.filter;if(("function"==typeof e.filter||l(e.filter))&&(u=e.filter),r=e.arrayFormat in c?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":d.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var s=void 0===e.allowDots?!0===e.encodeDotInKeys||d.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:d.addQueryPrefix,allowDots:s,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:d.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:d.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?d.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:d.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:d.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:d.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:d.encodeValuesOnly,filter:u,format:n,formatter:o,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:d.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:d.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:d.strictNullHandling}}(t);"function"==typeof u.filter?o=(0,u.filter)("",o):l(u.filter)&&(n=u.filter);var f=[];if("object"!=typeof o||null===o)return"";var p=c[u.arrayFormat],y="comma"===p&&u.commaRoundTrip;n||(n=Object.keys(o)),u.sort&&n.sort(u.sort);for(var m=r(),v=0;v<n.length;++v){var b=n[v];if(null!=b){var g=o[b];u.skipNulls&&null===g||s(f,h(g,b,p,y,u.allowEmptyArrays,u.strictNullHandling,u.skipNulls,u.encodeDotInKeys,u.encode?u.encoder:null,u.filter,u.sort,u.allowDots,u.serializeDate,u.format,u.formatter,u.encodeValuesOnly,u.charset,m))}}var w=f.join(u.delimiter),x=!0===u.addQueryPrefix?"?":"";return u.charsetSentinel&&("iso-8859-1"===u.charset?x+="utf8=%26%2310003%3B"+u.delimiter:x+="utf8=%E2%9C%93"+u.delimiter),w.length>0?x+w:""}},7720:function(e,t,n){"use strict";var r=n(4765),o=n(920),i=Object.prototype.hasOwnProperty,a=Array.isArray,c=o(),l=function(e,t){return c.set(e,t),e},u=function(e){return c.has(e)},s=function(e){return c.get(e)},f=function(e,t){c.set(e,t)},p=function(){for(var e=[],t=0;t<256;++t)e[e.length]="%"+((t<16?"0":"")+t.toString(16)).toUpperCase();return e}(),d=function(e,t){for(var n=t&&t.plainObjects?{__proto__:null}:{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n},y=1024;e.exports={arrayToObject:d,assign:function(e,t){return Object.keys(t).reduce(function(e,n){return e[n]=t[n],e},e)},combine:function(e,t,n,r){if(u(e)){var o=s(e)+1;return e[o]=t,f(e,o),e}var i=[].concat(e,t);return i.length>n?l(d(i,{plainObjects:r}),i.length-1):i},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],c=Object.keys(i),l=0;l<c.length;++l){var u=c[l],s=i[u];"object"==typeof s&&null!==s&&-1===n.indexOf(s)&&(t[t.length]={obj:i,prop:u},n[n.length]=s)}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&(r[r.length]=n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,o,i){if(0===e.length)return e;var a=e;if("symbol"==typeof e?a=Symbol.prototype.toString.call(e):"string"!=typeof e&&(a=String(e)),"iso-8859-1"===n)return escape(a).replace(/%u[0-9a-f]{4}/gi,function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"});for(var c="",l=0;l<a.length;l+=y){for(var u=a.length>=y?a.slice(l,l+y):a,s=[],f=0;f<u.length;++f){var d=u.charCodeAt(f);45===d||46===d||95===d||126===d||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122||i===r.RFC1738&&(40===d||41===d)?s[s.length]=u.charAt(f):d<128?s[s.length]=p[d]:d<2048?s[s.length]=p[192|d>>6]+p[128|63&d]:d<55296||d>=57344?s[s.length]=p[224|d>>12]+p[128|d>>6&63]+p[128|63&d]:(f+=1,d=65536+((1023&d)<<10|1023&u.charCodeAt(f)),s[s.length]=p[240|d>>18]+p[128|d>>12&63]+p[128|d>>6&63]+p[128|63&d])}c+=s.join("")}return c},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isOverflow:u,isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},markOverflow:l,maybeMap:function(e,t){if(a(e)){for(var n=[],r=0;r<e.length;r+=1)n[n.length]=t(e[r]);return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n&&"function"!=typeof n){if(a(t)){var o=t.length;if(r&&"number"==typeof r.arrayLimit&&o>r.arrayLimit)return l(d(t.concat(n),r),o);t[o]=n}else{if(!t||"object"!=typeof t)return[t,n];if(u(t)){var c=s(t)+1;t[c]=n,f(t,c)}else{if(r&&r.strictMerge)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!i.call(Object.prototype,n))&&(t[n]=!0)}}return t}if(!t||"object"!=typeof t){if(u(n)){for(var p=Object.keys(n),y=r&&r.plainObjects?{__proto__:null,0:t}:{0:t},h=0;h<p.length;h++){y[parseInt(p[h],10)+1]=n[p[h]]}return l(y,s(n)+1)}var m=[t].concat(n);return r&&"number"==typeof r.arrayLimit&&m.length>r.arrayLimit?l(d(m,r),m.length-1):m}var v=t;return a(t)&&!a(n)&&(v=d(t,r)),a(t)&&a(n)?(n.forEach(function(n,o){if(i.call(t,o)){var a=t[o];a&&"object"==typeof a&&n&&"object"==typeof n?t[o]=e(a,n,r):t[t.length]=n}else t[o]=n}),t):Object.keys(n).reduce(function(t,o){var a=n[o];if(i.call(t,o)?t[o]=e(t[o],a,r):t[o]=a,u(n)&&!u(t)&&l(t,s(n)),u(t)){var c=parseInt(o,10);String(c)===o&&c>=0&&c>s(t)&&f(t,c)}return t},v)}}},2799:function(e,t){"use strict";var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),u=Symbol.for("react.context"),s=Symbol.for("react.server_context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen");function v(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case i:case c:case a:case p:case d:return e;default:switch(e=e&&e.$$typeof){case s:case u:case f:case h:case y:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.isFragment=function(e){return v(e)===i}},4363:function(e,t,n){"use strict";e.exports=n(2799)},5116:function(e,t,n){"use strict";t.E=void 0;var r=l(n(1594)),o=l(n(3031)),i=l(n(9843)),a=l(n(1508)),c=n(8595);function l(e){return e&&e.__esModule?e:{default:e}}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(this,arguments)}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return p(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return p(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?d(Object(n),!0).forEach(function(t){h(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function h(e,t,n){var r;return r=function(e,t){if("object"!=u(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==u(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){return Array.isArray(e)&&(0,c.isNumOrStr)(e[0])&&(0,c.isNumOrStr)(e[1])?e.join(" ~ "):e}t.E=function(e){var t=e.separator,n=void 0===t?" : ":t,l=e.contentStyle,u=void 0===l?{}:l,p=e.itemStyle,d=void 0===p?{}:p,h=e.labelStyle,v=void 0===h?{}:h,b=e.payload,g=e.formatter,w=e.itemSorter,x=e.wrapperClassName,O=e.labelClassName,k=e.label,E=e.labelFormatter,S=e.accessibilityLayer,j=void 0!==S&&S,P=y({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},u),_=y({margin:0},v),A=!(0,i.default)(k),T=A?k:"",C=(0,a.default)("recharts-default-tooltip",x),N=(0,a.default)("recharts-tooltip-label",O);A&&E&&null!=b&&(T=E(k,b));var M=j?{role:"status","aria-live":"assertive"}:{};return r.default.createElement("div",s({className:C,style:P},M),r.default.createElement("p",{className:N,style:_},r.default.isValidElement(T)?T:"".concat(T)),function(){if(b&&b.length){var e=(w?(0,o.default)(b,w):b).map(function(e,t){if("none"===e.type)return null;var o=y({display:"block",paddingTop:4,paddingBottom:4,color:e.color||"#000"},d),i=e.formatter||g||m,a=e.value,l=e.name,u=a,s=l;if(i&&null!=u&&null!=s){var p=i(a,l,e,t,b);if(Array.isArray(p)){var h=f(p,2);u=h[0],s=h[1]}else u=p}return r.default.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(t),style:o},(0,c.isNumOrStr)(s)?r.default.createElement("span",{className:"recharts-tooltip-item-name"},s):null,(0,c.isNumOrStr)(s)?r.default.createElement("span",{className:"recharts-tooltip-item-separator"},n):null,r.default.createElement("span",{className:"recharts-tooltip-item-value"},u),r.default.createElement("span",{className:"recharts-tooltip-item-unit"},e.unit||""))});return r.default.createElement("ul",{className:"recharts-tooltip-item-list",style:{padding:0,margin:0}},e)}return null}())}},8595:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.compareValues=void 0,t.findEntryInArray=function(e,t,n){if(!e||!e.length)return null;return e.find(function(e){return e&&("function"==typeof t?t(e):(0,i.default)(e,t))===n})},t.uniqueId=t.mathSign=t.isPercent=t.isNumber=t.isNumOrStr=t.isNullish=t.interpolateNumber=t.hasDuplicate=t.getPercentValue=t.getLinearRegression=t.getAnyElementOfObject=void 0;var r=l(n(5015)),o=l(n(1741)),i=l(n(8156)),a=l(n(8023)),c=l(n(9843));function l(e){return e&&e.__esModule?e:{default:e}}t.mathSign=function(e){return 0===e?0:e>0?1:-1};var u=t.isPercent=function(e){return(0,r.default)(e)&&e.indexOf("%")===e.length-1},s=t.isNumber=function(e){return(0,a.default)(e)&&!(0,o.default)(e)},f=(t.isNullish=function(e){return(0,c.default)(e)},t.isNumOrStr=function(e){return s(e)||(0,r.default)(e)},0);t.uniqueId=function(e){var t=++f;return"".concat(e||"").concat(t)},t.getPercentValue=function(e,t){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!s(e)&&!(0,r.default)(e))return i;if(u(e)){var c=e.indexOf("%");n=t*parseFloat(e.slice(0,c))/100}else n=+e;return(0,o.default)(n)&&(n=i),a&&n>t&&(n=t),n},t.getAnyElementOfObject=function(e){if(!e)return null;var t=Object.keys(e);return t&&t.length?e[t[0]]:null},t.hasDuplicate=function(e){if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;r<t;r++){if(n[e[r]])return!0;n[e[r]]=!0}return!1},t.interpolateNumber=function(e,t){return s(e)&&s(t)?function(n){return e+n*(t-e)}:function(){return t}};t.getLinearRegression=function(e){if(!e||!e.length)return null;for(var t=e.length,n=0,r=0,o=0,i=0,a=1/0,c=-1/0,l=0,u=0,s=0;s<t;s++)n+=l=e[s].cx||0,r+=u=e[s].cy||0,o+=l*u,i+=l*l,a=Math.min(a,l),c=Math.max(c,l);var f=t*i!==n*n?(t*o-n*r)/(t*i-n*n):0;return{xmin:a,xmax:c,a:f,b:(r-f*n)/t}},t.compareValues=function(e,t){return s(e)&&s(t)?e-t:(0,r.default)(e)&&(0,r.default)(t)?e.localeCompare(t):e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():String(e).localeCompare(String(t))}},4803:function(e,t,n){"use strict";var r=n(1240),o=n(9675),i=function(e,t,n){for(var r,o=e;null!=(r=o.next);o=r)if(r.key===t)return o.next=r.next,n||(r.next=e.next,e.next=r),r};e.exports=function(){var e,t={assert:function(e){if(!t.has(e))throw new o("Side channel does not contain "+r(e))},delete:function(t){var n=function(e,t){if(e)return i(e,t,!0)}(e,t);return n&&e&&!e.next&&(e=void 0),!!n},get:function(t){return function(e,t){if(e){var n=i(e,t);return n&&n.value}}(e,t)},has:function(t){return function(e,t){return!!e&&!!i(e,t)}(e,t)},set:function(t,n){e||(e={next:void 0}),function(e,t,n){var r=i(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(e,t,n)}};return t}},507:function(e,t,n){"use strict";var r=n(453),o=n(6556),i=n(1240),a=n(9675),c=r("%Map%",!0),l=o("Map.prototype.get",!0),u=o("Map.prototype.set",!0),s=o("Map.prototype.has",!0),f=o("Map.prototype.delete",!0),p=o("Map.prototype.size",!0);e.exports=!!c&&function(){var e,t={assert:function(e){if(!t.has(e))throw new a("Side channel does not contain "+i(e))},delete:function(t){if(e){var n=f(e,t);return 0===p(e)&&(e=void 0),n}return!1},get:function(t){if(e)return l(e,t)},has:function(t){return!!e&&s(e,t)},set:function(t,n){e||(e=new c),u(e,t,n)}};return t}},2271:function(e,t,n){"use strict";var r=n(453),o=n(6556),i=n(1240),a=n(507),c=n(9675),l=r("%WeakMap%",!0),u=o("WeakMap.prototype.get",!0),s=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),p=o("WeakMap.prototype.delete",!0);e.exports=l?function(){var e,t,n={assert:function(e){if(!n.has(e))throw new c("Side channel does not contain "+i(e))},delete:function(n){if(l&&n&&("object"==typeof n||"function"==typeof n)){if(e)return p(e,n)}else if(a&&t)return t.delete(n);return!1},get:function(n){return l&&n&&("object"==typeof n||"function"==typeof n)&&e?u(e,n):t&&t.get(n)},has:function(n){return l&&n&&("object"==typeof n||"function"==typeof n)&&e?f(e,n):!!t&&t.has(n)},set:function(n,r){l&&n&&("object"==typeof n||"function"==typeof n)?(e||(e=new l),s(e,n,r)):a&&(t||(t=a()),t.set(n,r))}};return n}:a},920:function(e,t,n){"use strict";var r=n(9675),o=n(1240),i=n(4803),a=n(507),c=n(2271)||a||i;e.exports=function(){var e,t={assert:function(e){if(!t.has(e)){var n=e&&Object(e)===e?"the given object key":o(e);throw new r("Side channel does not contain "+n)}},delete:function(t){return!!e&&e.delete(t)},get:function(t){return e&&e.get(t)},has:function(t){return!!e&&e.has(t)},set:function(t,n){e||(e=c()),e.set(t,n)}};return t}},1594:function(e){"use strict";e.exports=React},2634:function(){},6942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{scaleBand:function(){return Ca},scaleDiverging:function(){return Vp},scaleDivergingLog:function(){return Gp},scaleDivergingPow:function(){return Xp},scaleDivergingSqrt:function(){return Zp},scaleDivergingSymlog:function(){return Yp},scaleIdentity:function(){return su},scaleImplicit:function(){return Aa},scaleLinear:function(){return uu},scaleLog:function(){return gu},scaleOrdinal:function(){return Ta},scalePoint:function(){return Ma},scalePow:function(){return _u},scaleQuantile:function(){return Uu},scaleQuantize:function(){return zu},scaleRadial:function(){return Cu},scaleSequential:function(){return Up},scaleSequentialLog:function(){return zp},scaleSequentialPow:function(){return Wp},scaleSequentialQuantile:function(){return $p},scaleSequentialSqrt:function(){return Kp},scaleSequentialSymlog:function(){return qp},scaleSqrt:function(){return Au},scaleSymlog:function(){return ku},scaleThreshold:function(){return qu},scaleTime:function(){return Rp},scaleUtc:function(){return Lp},tickFormat:function(){return cu}});var t={};n.r(t),n.d(t,{updateAnalyticsSummary:function(){return uP},updateDaysRange:function(){return tP},updateIndexingReport:function(){return yP},updateKeywordsOverview:function(){return zj},updateKeywordsRows:function(){return Wj},updateKeywordsSummary:function(){return qj},updatePostsOverview:function(){return cP},updatePostsRowsByObjects:function(){return sP},updatePostsSummary:function(){return lP},updateSinglePost:function(){return Vj},updateStats:function(){return Uj},updateUserPreferences:function(){return nP}});var r={};n.r(r),n.d(r,{appData:function(){return wP},appUi:function(){return jP}});var o={};n.r(o),n.d(o,{getAnalyticsSummary:function(){return FP},getAppData:function(){return AP},getDashboardStats:function(){return TP},getDaysRange:function(){return IP},getIndexingReport:function(){return WP},getIndexingReportAll:function(){return qP},getKeywordsOverview:function(){return CP},getKeywordsRows:function(){return DP},getKeywordsRowsAll:function(){return MP},getKeywordsSummary:function(){return NP},getPostsOverview:function(){return LP},getPostsRowsByObjects:function(){return zP},getPostsRowsByObjectsAll:function(){return UP},getPostsSummary:function(){return BP},getSinglePost:function(){return _P},getSinglePosts:function(){return PP},getUserColumnPreference:function(){return RP}});var i={};n.r(i),n.d(i,{getAnalyticsSummary:function(){return XP},getDashboardStats:function(){return KP},getIndexingReport:function(){return QP},getKeywordsOverview:function(){return $P},getKeywordsRows:function(){return VP},getKeywordsSummary:function(){return HP},getPostsOverview:function(){return YP},getPostsRowsByObjects:function(){return JP},getPostsSummary:function(){return ZP},getSinglePost:function(){return GP}});const a=jQuery;var c=n.n(a);const l=wp.i18n,u=wp.element,s=window.rankMathComponents,f=lodash;var p=n(6942),d=n.n(p),y=n(1594),h=n.n(y);const m=ReactDOM;var v,b=n.n(m);function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g.apply(null,arguments)}!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(v||(v={}));const w="popstate";function x(e,t){if(!1===e||null==e)throw new Error(t)}function O(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function k(e,t){return{usr:e.state,key:e.key,idx:t}}function E(e,t,n,r){return void 0===n&&(n=null),g({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?j(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function S(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function j(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function P(e,t,n,r){void 0===r&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,a=o.history,c=v.Pop,l=null,u=s();function s(){return(a.state||{idx:null}).idx}function f(){c=v.Pop;let e=s(),t=null==e?null:e-u;u=e,l&&l({action:c,location:d.location,delta:t})}function p(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,n="string"==typeof e?e:S(e);return n=n.replace(/ $/,"%20"),x(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,a.replaceState(g({},a.state,{idx:u}),""));let d={get action(){return c},get location(){return e(o,a)},listen(e){if(l)throw new Error("A history only accepts one active listener");return o.addEventListener(w,f),l=e,()=>{o.removeEventListener(w,f),l=null}},createHref:e=>t(o,e),createURL:p,encodeLocation(e){let t=p(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){c=v.Push;let r=E(d.location,e,t);n&&n(r,e),u=s()+1;let f=k(r,u),p=d.createHref(r);try{a.pushState(f,"",p)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(p)}i&&l&&l({action:c,location:d.location,delta:1})},replace:function(e,t){c=v.Replace;let r=E(d.location,e,t);n&&n(r,e),u=s();let o=k(r,u),f=d.createHref(r);a.replaceState(o,"",f),i&&l&&l({action:c,location:d.location,delta:0})},go:e=>a.go(e)};return d}var _;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(_||(_={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function A(e,t,n){return void 0===n&&(n="/"),T(e,t,n,!1)}function T(e,t,n,r){let o=W(("string"==typeof t?j(t):t).pathname||"/",n);if(null==o)return null;let i=C(e);!function(e){e.sort((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n]);return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)))}(i);let a=null,c=function(e){try{return e.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(t){return O(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}(o);for(let e=0;null==a&&e<i.length;++e)a=z(i[e],c,r);return a}function C(e,t,n,r){void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r="");let o=(e,o,i)=>{let a={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};a.relativePath.startsWith("/")&&(x(a.relativePath.startsWith(r),'Absolute route path "'+a.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),a.relativePath=a.relativePath.slice(r.length));let c=J([r,a.relativePath]),l=n.concat(a);e.children&&e.children.length>0&&(x(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+c+'".'),C(e.children,t,l,c)),(null!=e.path||e.index)&&t.push({path:c,score:U(c,e.index),routesMeta:l})};return e.forEach((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let n of N(e.path))o(e,t,n);else o(e,t)}),t}function N(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(0===r.length)return o?[i,""]:[i];let a=N(r.join("/")),c=[];return c.push(...a.map(e=>""===e?i:[i,e].join("/"))),o&&c.push(...a),c.map(t=>e.startsWith("/")&&""===t?"/":t)}const M=/^:[\w-]+$/,D=3,I=2,R=1,L=10,B=-2,F=e=>"*"===e;function U(e,t){let n=e.split("/"),r=n.length;return n.some(F)&&(r+=B),t&&(r+=I),n.filter(e=>!F(e)).reduce((e,t)=>e+(M.test(t)?D:""===t?R:L),r)}function z(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},i="/",a=[];for(let e=0;e<r.length;++e){let c=r[e],l=e===r.length-1,u="/"===i?t:t.slice(i.length)||"/",s=q({path:c.relativePath,caseSensitive:c.caseSensitive,end:l},u),f=c.route;if(!s&&l&&n&&!r[r.length-1].route.index&&(s=q({path:c.relativePath,caseSensitive:c.caseSensitive,end:!1},u)),!s)return null;Object.assign(o,s.params),a.push({params:o,pathname:J([i,s.pathname]),pathnameBase:Q(J([i,s.pathnameBase])),route:f}),"/"!==s.pathnameBase&&(i=J([i,s.pathnameBase]))}return a}function q(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);O("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(e,t,n)=>(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)"));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let i=new RegExp(o,t?void 0:"i");return[i,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let i=o[0],a=i.replace(/(.)\/+$/,"$1"),c=o.slice(1),l=r.reduce((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=c[n]||"";a=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const l=c[n];return e[r]=o&&!l?void 0:(l||"").replace(/%2F/g,"/"),e},{});return{params:l,pathname:i,pathnameBase:a,pattern:e}}function W(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}const K=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function $(e,t){void 0===t&&(t="/");let n,{pathname:r,search:o="",hash:i=""}="string"==typeof e?j(e):e;if(r)if(a=r,K.test(a))n=r;else{if(r.includes("//")){let e=r;r=Z(r),O(!1,"Pathnames cannot have embedded double slashes - normalizing "+e+" -> "+r)}n=r.startsWith("/")?H(r.substring(1),"/"):H(r,t)}else n=t;var a;return{pathname:n,search:ee(o),hash:te(i)}}function H(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)}),n.length>1?n.join("/"):"/"}function V(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function G(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.length>0)}function Y(e,t){let n=G(e);return t?n.map((e,t)=>t===n.length-1?e.pathname:e.pathnameBase):n.map(e=>e.pathnameBase)}function X(e,t,n,r){let o;void 0===r&&(r=!1),"string"==typeof e?o=j(e):(o=g({},e),x(!o.pathname||!o.pathname.includes("?"),V("?","pathname","search",o)),x(!o.pathname||!o.pathname.includes("#"),V("#","pathname","hash",o)),x(!o.search||!o.search.includes("#"),V("#","search","hash",o)));let i,a=""===e||""===o.pathname,c=a?"/":o.pathname;if(null==c)i=n;else{let e=t.length-1;if(!r&&c.startsWith("..")){let t=c.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}i=e>=0?t[e]:"/"}let l=$(o,i),u=c&&"/"!==c&&c.endsWith("/"),s=(a||"."===c)&&n.endsWith("/");return l.pathname.endsWith("/")||!u&&!s||(l.pathname+="/"),l}const Z=e=>e.replace(/\/\/+/g,"/"),J=e=>Z(e.join("/")),Q=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),ee=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",te=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function ne(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}const re=["post","put","patch","delete"],oe=(new Set(re),["get",...re]);new Set(oe),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function ie(){return ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ie.apply(null,arguments)}const ae=y.createContext(null);const ce=y.createContext(null);const le=y.createContext(null);const ue=y.createContext(null);const se=y.createContext({outlet:null,matches:[],isDataRoute:!1});const fe=y.createContext(null);function pe(){return null!=y.useContext(ue)}function de(){return pe()||x(!1),y.useContext(ue).location}function ye(e){y.useContext(le).static||y.useLayoutEffect(e)}function he(){let{isDataRoute:e}=y.useContext(se);return e?function(){let{router:e}=Se(ke.UseNavigateStable),t=Pe(Ee.UseNavigateStable),n=y.useRef(!1);return ye(()=>{n.current=!0}),y.useCallback(function(r,o){void 0===o&&(o={}),n.current&&("number"==typeof r?e.navigate(r):e.navigate(r,ie({fromRouteId:t},o)))},[e,t])}():function(){pe()||x(!1);let e=y.useContext(ae),{basename:t,future:n,navigator:r}=y.useContext(le),{matches:o}=y.useContext(se),{pathname:i}=de(),a=JSON.stringify(Y(o,n.v7_relativeSplatPath)),c=y.useRef(!1);ye(()=>{c.current=!0});let l=y.useCallback(function(n,o){if(void 0===o&&(o={}),!c.current)return;if("number"==typeof n)return void r.go(n);let l=X(n,JSON.parse(a),i,"path"===o.relative);null==e&&"/"!==t&&(l.pathname="/"===l.pathname?t:J([t,l.pathname])),(o.replace?r.replace:r.push)(l,o.state,o)},[t,r,a,i,e]);return l}()}function me(e,t){let{relative:n}=void 0===t?{}:t,{future:r}=y.useContext(le),{matches:o}=y.useContext(se),{pathname:i}=de(),a=JSON.stringify(Y(o,r.v7_relativeSplatPath));return y.useMemo(()=>X(e,JSON.parse(a),i,"path"===n),[e,a,i,n])}function ve(e,t,n,r){pe()||x(!1);let{navigator:o}=y.useContext(le),{matches:i}=y.useContext(se),a=i[i.length-1],c=a?a.params:{},l=(a&&a.pathname,a?a.pathnameBase:"/");a&&a.route;let u,s=de();if(t){var f;let e="string"==typeof t?j(t):t;"/"===l||(null==(f=e.pathname)?void 0:f.startsWith(l))||x(!1),u=e}else u=s;let p=u.pathname||"/",d=p;if("/"!==l){let e=l.replace(/^\//,"").split("/");d="/"+p.replace(/^\//,"").split("/").slice(e.length).join("/")}let h=A(e,{pathname:d});let m=Oe(h&&h.map(e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:J([l,o.encodeLocation?o.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?l:J([l,o.encodeLocation?o.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])})),i,n,r);return t&&m?y.createElement(ue.Provider,{value:{location:ie({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:v.Pop}},m):m}function be(){let e=function(){var e;let t=y.useContext(fe),n=je(Ee.UseRouteError),r=Pe(Ee.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[r]}(),t=ne(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:r};return y.createElement(y.Fragment,null,y.createElement("h2",null,"Unexpected Application Error!"),y.createElement("h3",{style:{fontStyle:"italic"}},t),n?y.createElement("pre",{style:o},n):null,null)}const ge=y.createElement(be,null);class we extends y.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?y.createElement(se.Provider,{value:this.props.routeContext},y.createElement(fe.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function xe(e){let{routeContext:t,match:n,children:r}=e,o=y.useContext(ae);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),y.createElement(se.Provider,{value:t},r)}function Oe(e,t,n,r){var o;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===r&&(r=null),null==e){var i;if(!n)return null;if(n.errors)e=n.matches;else{if(!(null!=(i=r)&&i.v7_partialHydration&&0===t.length&&!n.initialized&&n.matches.length>0))return null;e=n.matches}}let a=e,c=null==(o=n)?void 0:o.errors;if(null!=c){let e=a.findIndex(e=>e.route.id&&void 0!==(null==c?void 0:c[e.route.id]));e>=0||x(!1),a=a.slice(0,Math.min(a.length,e+1))}let l=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let e=0;e<a.length;e++){let t=a[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(u=e),t.route.id){let{loaderData:e,errors:r}=n,o=t.route.loader&&void 0===e[t.route.id]&&(!r||void 0===r[t.route.id]);if(t.route.lazy||o){l=!0,a=u>=0?a.slice(0,u+1):[a[0]];break}}}return a.reduceRight((e,r,o)=>{let i,s=!1,f=null,p=null;var d;n&&(i=c&&r.route.id?c[r.route.id]:void 0,f=r.route.errorElement||ge,l&&(u<0&&0===o?(d="route-fallback",!1||_e[d]||(_e[d]=!0),s=!0,p=null):u===o&&(s=!0,p=r.route.hydrateFallbackElement||null)));let h=t.concat(a.slice(0,o+1)),m=()=>{let t;return t=i?f:s?p:r.route.Component?y.createElement(r.route.Component,null):r.route.element?r.route.element:e,y.createElement(xe,{match:r,routeContext:{outlet:e,matches:h,isDataRoute:null!=n},children:t})};return n&&(r.route.ErrorBoundary||r.route.errorElement||0===o)?y.createElement(we,{location:n.location,revalidation:n.revalidation,component:f,error:i,children:m(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):m()},null)}var ke=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ke||{}),Ee=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Ee||{});function Se(e){let t=y.useContext(ae);return t||x(!1),t}function je(e){let t=y.useContext(ce);return t||x(!1),t}function Pe(e){let t=function(){let e=y.useContext(se);return e||x(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||x(!1),n.route.id}const _e={};function Ae(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}y.startTransition;function Te(e){x(!1)}function Ce(e){let{basename:t="/",children:n=null,location:r,navigationType:o=v.Pop,navigator:i,static:a=!1,future:c}=e;pe()&&x(!1);let l=t.replace(/^\/*/,"/"),u=y.useMemo(()=>({basename:l,navigator:i,static:a,future:ie({v7_relativeSplatPath:!1},c)}),[l,c,i,a]);"string"==typeof r&&(r=j(r));let{pathname:s="/",search:f="",hash:p="",state:d=null,key:h="default"}=r,m=y.useMemo(()=>{let e=W(s,l);return null==e?null:{location:{pathname:e,search:f,hash:p,state:d,key:h},navigationType:o}},[l,s,f,p,d,h,o]);return null==m?null:y.createElement(le.Provider,{value:u},y.createElement(ue.Provider,{children:n,value:m}))}function Ne(e){let{children:t,location:n}=e;return ve(Me(t),n)}new Promise(()=>{});y.Component;function Me(e,t){void 0===t&&(t=[]);let n=[];return y.Children.forEach(e,(e,r)=>{if(!y.isValidElement(e))return;let o=[...t,r];if(e.type===y.Fragment)return void n.push.apply(n,Me(e.props.children,o));e.type!==Te&&x(!1),e.props.index&&e.props.children&&x(!1);let i={id:e.props.id||o.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=Me(e.props.children,o)),n.push(i)}),n}function De(){return De=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},De.apply(null,arguments)}function Ie(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const Re=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],Le=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"];try{window.__reactRouterVersion="6"}catch(e){}const Be=y.createContext({isTransitioning:!1});new Map;const Fe=y.startTransition;m.flushSync,y.useId;function Ue(e){let{basename:t,children:n,future:r,window:o}=e,i=y.useRef();var a;null==i.current&&(i.current=(void 0===(a={window:o,v5Compat:!0})&&(a={}),P(function(e,t){let{pathname:n="/",search:r="",hash:o=""}=j(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),E("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"==typeof t?t:S(t))},function(e,t){O("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")},a)));let c=i.current,[l,u]=y.useState({action:c.action,location:c.location}),{v7_startTransition:s}=r||{},f=y.useCallback(e=>{s&&Fe?Fe(()=>u(e)):u(e)},[u,s]);return y.useLayoutEffect(()=>c.listen(f),[c,f]),y.useEffect(()=>Ae(r),[r]),y.createElement(Ce,{basename:t,children:n,location:l.location,navigationType:l.action,navigator:c,future:r})}const ze="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,qe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,We=y.forwardRef(function(e,t){let n,{onClick:r,relative:o,reloadDocument:i,replace:a,state:c,target:l,to:u,preventScrollReset:s,viewTransition:f}=e,p=Ie(e,Re),{basename:d}=y.useContext(le),h=!1;if("string"==typeof u&&qe.test(u)&&(n=u,ze))try{let e=new URL(window.location.href),t=u.startsWith("//")?new URL(e.protocol+u):new URL(u),n=W(t.pathname,d);t.origin===e.origin&&null!=n?u=n+t.search+t.hash:h=!0}catch(e){}let m=function(e,t){let{relative:n}=void 0===t?{}:t;pe()||x(!1);let{basename:r,navigator:o}=y.useContext(le),{hash:i,pathname:a,search:c}=me(e,{relative:n}),l=a;return"/"!==r&&(l="/"===a?r:J([r,a])),o.createHref({pathname:l,search:c,hash:i})}(u,{relative:o}),v=function(e,t){let{target:n,replace:r,state:o,preventScrollReset:i,relative:a,viewTransition:c}=void 0===t?{}:t,l=he(),u=de(),s=me(e,{relative:a});return y.useCallback(t=>{if(function(e,t){return!(0!==e.button||t&&"_self"!==t||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e))}(t,n)){t.preventDefault();let n=void 0!==r?r:S(u)===S(s);l(e,{replace:n,state:o,preventScrollReset:i,relative:a,viewTransition:c})}},[u,l,s,r,o,n,e,i,a,c])}(u,{replace:a,state:c,target:l,preventScrollReset:s,relative:o,viewTransition:f});return y.createElement("a",De({},p,{href:n||m,onClick:h||i?r:function(e){r&&r(e),e.defaultPrevented||v(e)},ref:t,target:l}))});const Ke=y.forwardRef(function(e,t){let{"aria-current":n="page",caseSensitive:r=!1,className:o="",end:i=!1,style:a,to:c,viewTransition:l,children:u}=e,s=Ie(e,Le),f=me(c,{relative:s.relative}),p=de(),d=y.useContext(ce),{navigator:h,basename:m}=y.useContext(le),v=null!=d&&function(e,t){void 0===t&&(t={});let n=y.useContext(Be);null==n&&x(!1);let{basename:r}=Ve($e.useViewTransitionState),o=me(e,{relative:t.relative});if(!n.isTransitioning)return!1;let i=W(n.currentLocation.pathname,r)||n.currentLocation.pathname,a=W(n.nextLocation.pathname,r)||n.nextLocation.pathname;return null!=q(o.pathname,a)||null!=q(o.pathname,i)}(f)&&!0===l,b=h.encodeLocation?h.encodeLocation(f).pathname:f.pathname,g=p.pathname,w=d&&d.navigation&&d.navigation.location?d.navigation.location.pathname:null;r||(g=g.toLowerCase(),w=w?w.toLowerCase():null,b=b.toLowerCase()),w&&m&&(w=W(w,m)||w);const O="/"!==b&&b.endsWith("/")?b.length-1:b.length;let k,E=g===b||!i&&g.startsWith(b)&&"/"===g.charAt(O),S=null!=w&&(w===b||!i&&w.startsWith(b)&&"/"===w.charAt(b.length)),j={isActive:E,isPending:S,isTransitioning:v},P=E?n:void 0;k="function"==typeof o?o(j):[o,E?"active":null,S?"pending":null,v?"transitioning":null].filter(Boolean).join(" ");let _="function"==typeof a?a(j):a;return y.createElement(We,De({},s,{"aria-current":P,className:k,ref:t,style:_,to:c,viewTransition:l}),"function"==typeof u?u(j):u)});var $e,He;function Ve(e){let t=y.useContext(ae);return t||x(!1),t}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})($e||($e={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(He||(He={}));const Ge=wp.hooks,Ye=wp.data;var Xe=function(){return Xe=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Xe.apply(this,arguments)};var Ze=function(e){var t=e.animate,n=void 0===t||t,r=e.animateBegin,o=e.backgroundColor,i=void 0===o?"#f5f6f7":o,a=e.backgroundOpacity,c=void 0===a?1:a,l=e.baseUrl,u=void 0===l?"":l,s=e.children,f=e.foregroundColor,p=void 0===f?"#eee":f,d=e.foregroundOpacity,h=void 0===d?1:d,m=e.gradientRatio,v=void 0===m?2:m,b=e.gradientDirection,g=void 0===b?"left-right":b,w=e.uniqueKey,x=e.interval,O=void 0===x?.25:x,k=e.rtl,E=void 0!==k&&k,S=e.speed,j=void 0===S?1.2:S,P=e.style,_=void 0===P?{}:P,A=e.title,T=void 0===A?"Loading...":A,C=e.beforeMask,N=void 0===C?null:C,M=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,["animate","animateBegin","backgroundColor","backgroundOpacity","baseUrl","children","foregroundColor","foregroundOpacity","gradientRatio","gradientDirection","uniqueKey","interval","rtl","speed","style","title","beforeMask"]),D=w||Math.random().toString(36).substring(6),I=D+"-diff",R=D+"-animated-diff",L=D+"-aria",B=E?{transform:"scaleX(-1)"}:null,F="0; "+O+"; 1",U=j+"s",z="top-bottom"===g?"rotate(90)":void 0;return(0,y.createElement)("svg",Xe({"aria-labelledby":L,role:"img",style:Xe(Xe({},_),B)},M),T?(0,y.createElement)("title",{id:L},T):null,N&&(0,y.isValidElement)(N)?N:null,(0,y.createElement)("rect",{role:"presentation",x:"0",y:"0",width:"100%",height:"100%",clipPath:"url("+u+"#"+I+")",style:{fill:"url("+u+"#"+R+")"}}),(0,y.createElement)("defs",null,(0,y.createElement)("clipPath",{id:I},s),(0,y.createElement)("linearGradient",{id:R,gradientTransform:z},(0,y.createElement)("stop",{offset:"0%",stopColor:i,stopOpacity:c},n&&(0,y.createElement)("animate",{attributeName:"offset",values:-v+"; "+-v+"; 1",keyTimes:F,dur:U,repeatCount:"indefinite",begin:r})),(0,y.createElement)("stop",{offset:"50%",stopColor:p,stopOpacity:h},n&&(0,y.createElement)("animate",{attributeName:"offset",values:-v/2+"; "+-v/2+"; "+(1+v/2),keyTimes:F,dur:U,repeatCount:"indefinite",begin:r})),(0,y.createElement)("stop",{offset:"100%",stopColor:i,stopOpacity:c},n&&(0,y.createElement)("animate",{attributeName:"offset",values:"0; 0; "+(1+v),keyTimes:F,dur:U,repeatCount:"indefinite",begin:r})))))},Je=function(e){return e.children?(0,y.createElement)(Ze,Xe({},e)):(0,y.createElement)(Qe,Xe({},e))},Qe=function(e){return(0,y.createElement)(Je,Xe({viewBox:"0 0 476 124"},e),(0,y.createElement)("rect",{x:"48",y:"8",width:"88",height:"6",rx:"3"}),(0,y.createElement)("rect",{x:"48",y:"26",width:"52",height:"6",rx:"3"}),(0,y.createElement)("rect",{x:"0",y:"56",width:"410",height:"6",rx:"3"}),(0,y.createElement)("rect",{x:"0",y:"72",width:"380",height:"6",rx:"3"}),(0,y.createElement)("rect",{x:"0",y:"88",width:"178",height:"6",rx:"3"}),(0,y.createElement)("circle",{cx:"20",cy:"20",r:"20"}))};const et=Je;var tt=function(e,t){return(0,f.round)(t/e*100,0)};const nt=(0,Ye.withSelect)(function(e){return{seoScores:e("rank-math").getAnalyticsSummary().optimization}})(function(e){var t=e.seoScores;if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-score-bar"},wp.element.createElement(et,{backgroundColor:"#dfe4e8",foregroundColor:"#dfe4e8",animate:!1,style:{width:"100%",height:"100%"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"})));var n=t.total,r=t.good,o=t.ok,i=t.bad;return wp.element.createElement("div",{className:"rank-math-score-bar"},wp.element.createElement("div",{className:"score-bar-good",style:{width:tt(n,r)+"%"}}),wp.element.createElement("div",{className:"score-bar-ok",style:{width:tt(n,o)+"%"}}),wp.element.createElement("div",{className:"score-bar-bad",style:{width:tt(n,i)+"%"}}))}),rt=wp.compose,ot=wp.components;function it(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=it(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const at=function(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=it(e))&&(r&&(r+=" "),r+=t);return r};var ct=n(7350),lt=n.n(ct),ut=n(5015),st=n.n(ut),ft=n(1741),pt=n.n(ft),dt=n(8156),yt=n.n(dt),ht=n(8023),mt=n.n(ht),vt=n(9843),bt=n.n(vt),gt=function(e){return 0===e?0:e>0?1:-1},wt=function(e){return st()(e)&&e.indexOf("%")===e.length-1},xt=function(e){return mt()(e)&&!pt()(e)},Ot=function(e){return xt(e)||st()(e)},kt=0,Et=function(e){var t=++kt;return"".concat(e||"").concat(t)},St=function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!xt(e)&&!st()(e))return r;if(wt(e)){var i=e.indexOf("%");n=t*parseFloat(e.slice(0,i))/100}else n=+e;return pt()(n)&&(n=r),o&&n>t&&(n=t),n},jt=function(e){if(!e)return null;var t=Object.keys(e);return t&&t.length?e[t[0]]:null},Pt=function(e,t){return xt(e)&&xt(t)?function(n){return e+n*(t-e)}:function(){return t}};function _t(e,t,n){return e&&e.length?e.find(function(e){return e&&("function"==typeof t?t(e):yt()(e,t))===n}):null}var At=function(e,t){return xt(e)&&xt(t)?e-t:st()(e)&&st()(t)?e.localeCompare(t):e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():String(e).localeCompare(String(t))},Tt=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o]},Ct=n(1882),Nt=n.n(Ct),Mt=n(3805),Dt=n.n(Mt),It=n(4363);function Rt(e,t){for(var n in e)if({}.hasOwnProperty.call(e,n)&&(!{}.hasOwnProperty.call(t,n)||e[n]!==t[n]))return!1;for(var r in t)if({}.hasOwnProperty.call(t,r)&&!{}.hasOwnProperty.call(e,r))return!1;return!0}function Lt(e){return Lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lt(e)}var Bt=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Ft=["points","pathLength"],Ut={svg:["viewBox","children"],polygon:Ft,polyline:Ft},zt=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],qt=function(e,t){if(!e||"function"==typeof e||"boolean"==typeof e)return null;var n=e;if((0,y.isValidElement)(e)&&(n=e.props),!Dt()(n))return null;var r={};return Object.keys(n).forEach(function(e){zt.includes(e)&&(r[e]=t||function(t){return n[e](n,t)})}),r},Wt=function(e,t,n){if(!Dt()(e)||"object"!==Lt(e))return null;var r=null;return Object.keys(e).forEach(function(o){var i=e[o];zt.includes(o)&&"function"==typeof i&&(r||(r={}),r[o]=function(e,t,n){return function(r){return e(t,n,r),null}}(i,t,n))}),r},Kt=["children"],$t=["children"];function Ht(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Vt(e){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(e)}var Gt={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Yt=function(e){return"string"==typeof e?e:e?e.displayName||e.name||"Component":""},Xt=null,Zt=null,Jt=function e(t){if(t===Xt&&Array.isArray(Zt))return Zt;var n=[];return y.Children.forEach(t,function(t){bt()(t)||((0,It.isFragment)(t)?n=n.concat(e(t.props.children)):n.push(t))}),Zt=n,Xt=t,n};function Qt(e,t){var n=[],r=[];return r=Array.isArray(t)?t.map(function(e){return Yt(e)}):[Yt(t)],Jt(e).forEach(function(e){var t=yt()(e,"type.displayName")||yt()(e,"type.name");-1!==r.indexOf(t)&&n.push(e)}),n}function en(e,t){var n=Qt(e,t);return n&&n[0]}var tn=function(e){if(!e||!e.props)return!1;var t=e.props,n=t.width,r=t.height;return!(!xt(n)||n<=0||!xt(r)||r<=0)},nn=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],rn=function(e){return e&&e.type&&st()(e.type)&&nn.indexOf(e.type)>=0},on=function(e,t,n){if(!e||"function"==typeof e||"boolean"==typeof e)return null;var r=e;if((0,y.isValidElement)(e)&&(r=e.props),!Dt()(r))return null;var o={};return Object.keys(r).forEach(function(e){var i;(function(e,t,n,r){var o,i=null!==(o=null==Ut?void 0:Ut[r])&&void 0!==o?o:[];return t.startsWith("data-")||!Nt()(e)&&(r&&i.includes(t)||Bt.includes(t))||n&&zt.includes(t)})(null===(i=r)||void 0===i?void 0:i[e],e,t,n)&&(o[e]=r[e])}),o},an=function e(t,n){if(t===n)return!0;var r=y.Children.count(t);if(r!==y.Children.count(n))return!1;if(0===r)return!0;if(1===r)return cn(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var o=0;o<r;o++){var i=t[o],a=n[o];if(Array.isArray(i)||Array.isArray(a)){if(!e(i,a))return!1}else if(!cn(i,a))return!1}return!0},cn=function(e,t){if(bt()(e)&&bt()(t))return!0;if(!bt()(e)&&!bt()(t)){var n=e.props||{},r=n.children,o=Ht(n,Kt),i=t.props||{},a=i.children,c=Ht(i,$t);return r&&a?Rt(o,c)&&an(r,a):!r&&!a&&Rt(o,c)}return!1},ln=function(e,t){var n=[],r={};return Jt(e).forEach(function(e,o){if(rn(e))n.push(e);else if(e){var i=Yt(e.type),a=t[i]||{},c=a.handler,l=a.once;if(c&&(!l||!r[i])){var u=c(e,i,o);n.push(u),r[i]=!0}}}),n};function un(e){return un="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},un(e)}function sn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sn(Object(n),!0).forEach(function(t){pn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function pn(e,t,n){var r;return r=function(e,t){if("object"!=un(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=un(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==un(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return yn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return yn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var hn=(0,y.forwardRef)(function(e,t){var n=e.aspect,r=e.initialDimension,o=void 0===r?{width:-1,height:-1}:r,i=e.width,a=void 0===i?"100%":i,c=e.height,l=void 0===c?"100%":c,u=e.minWidth,s=void 0===u?0:u,f=e.minHeight,p=e.maxHeight,d=e.children,m=e.debounce,v=void 0===m?0:m,b=e.id,g=e.className,w=e.onResize,x=e.style,O=void 0===x?{}:x,k=(0,y.useRef)(null),E=(0,y.useRef)();E.current=w,(0,y.useImperativeHandle)(t,function(){return Object.defineProperty(k.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),k.current},configurable:!0})});var S=dn((0,y.useState)({containerWidth:o.width,containerHeight:o.height}),2),j=S[0],P=S[1],_=(0,y.useCallback)(function(e,t){P(function(n){var r=Math.round(e),o=Math.round(t);return n.containerWidth===r&&n.containerHeight===o?n:{containerWidth:r,containerHeight:o}})},[]);(0,y.useEffect)(function(){var e=function(e){var t,n=e[0].contentRect,r=n.width,o=n.height;_(r,o),null===(t=E.current)||void 0===t||t.call(E,r,o)};v>0&&(e=lt()(e,v,{trailing:!0,leading:!1}));var t=new ResizeObserver(e),n=k.current.getBoundingClientRect(),r=n.width,o=n.height;return _(r,o),t.observe(k.current),function(){t.disconnect()}},[_,v]);var A=(0,y.useMemo)(function(){var e=j.containerWidth,t=j.containerHeight;if(e<0||t<0)return null;Tt(wt(a)||wt(l),"The width(%s) and height(%s) are both fixed numbers,\n       maybe you don't need to use a ResponsiveContainer.",a,l),Tt(!n||n>0,"The aspect(%s) must be greater than zero.",n);var r=wt(a)?e:a,o=wt(l)?t:l;n&&n>0&&(r?o=r/n:o&&(r=o*n),p&&o>p&&(o=p)),Tt(r>0||o>0,"The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.",r,o,a,l,s,f,n);var i=!Array.isArray(d)&&Yt(d.type).endsWith("Chart");return h().Children.map(d,function(e){return h().isValidElement(e)?(0,y.cloneElement)(e,fn({width:r,height:o},i?{style:fn({height:"100%",width:"100%",maxHeight:o,maxWidth:r},e.props.style)}:{})):e})},[n,d,l,p,f,s,j,a]);return h().createElement("div",{id:b?"".concat(b):void 0,className:at("recharts-responsive-container",g),style:fn(fn({},O),{},{width:a,height:l,minWidth:s,minHeight:f,maxHeight:p}),ref:k},A)}),mn=n(3181),vn=n.n(mn),bn=n(3031),gn=n.n(bn),wn="Invariant failed";function xn(e,t){if(!e)throw new Error(wn)}var On=["children","width","height","viewBox","className","style","title","desc"];function kn(){return kn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},kn.apply(this,arguments)}function En(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Sn(e){var t=e.children,n=e.width,r=e.height,o=e.viewBox,i=e.className,a=e.style,c=e.title,l=e.desc,u=En(e,On),s=o||{width:n,height:r,x:0,y:0},f=at("recharts-surface",i);return h().createElement("svg",kn({},on(u,!0,"svg"),{className:f,width:n,height:r,style:a,viewBox:"".concat(s.x," ").concat(s.y," ").concat(s.width," ").concat(s.height)}),h().createElement("title",null,c),h().createElement("desc",null,l),t)}var jn=["children","className"];function Pn(){return Pn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Pn.apply(this,arguments)}function _n(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var An=h().forwardRef(function(e,t){var n=e.children,r=e.className,o=_n(e,jn),i=at("recharts-layer",r);return h().createElement("g",Pn({className:i},on(o,!0),{ref:t}),n)});function Tn(e){return Tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tn(e)}function Cn(){return Cn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Cn.apply(this,arguments)}function Nn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Mn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Mn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function In(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Dn(Object(n),!0).forEach(function(t){Rn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Rn(e,t,n){var r;return r=function(e,t){if("object"!=Tn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Tn(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){return Array.isArray(e)&&Ot(e[0])&&Ot(e[1])?e.join(" ~ "):e}var Bn=function(e){var t=e.separator,n=void 0===t?" : ":t,r=e.contentStyle,o=void 0===r?{}:r,i=e.itemStyle,a=void 0===i?{}:i,c=e.labelStyle,l=void 0===c?{}:c,u=e.payload,s=e.formatter,f=e.itemSorter,p=e.wrapperClassName,d=e.labelClassName,y=e.label,m=e.labelFormatter,v=e.accessibilityLayer,b=void 0!==v&&v,g=In({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),w=In({margin:0},l),x=!bt()(y),O=x?y:"",k=at("recharts-default-tooltip",p),E=at("recharts-tooltip-label",d);x&&m&&null!=u&&(O=m(y,u));var S=b?{role:"status","aria-live":"assertive"}:{};return h().createElement("div",Cn({className:k,style:g},S),h().createElement("p",{className:E,style:w},h().isValidElement(O)?O:"".concat(O)),function(){if(u&&u.length){var e=(f?gn()(u,f):u).map(function(e,t){if("none"===e.type)return null;var r=In({display:"block",paddingTop:4,paddingBottom:4,color:e.color||"#000"},a),o=e.formatter||s||Ln,i=e.value,c=e.name,l=i,f=c;if(o&&null!=l&&null!=f){var p=o(i,c,e,t,u);if(Array.isArray(p)){var d=Nn(p,2);l=d[0],f=d[1]}else l=p}return h().createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(t),style:r},Ot(f)?h().createElement("span",{className:"recharts-tooltip-item-name"},f):null,Ot(f)?h().createElement("span",{className:"recharts-tooltip-item-separator"},n):null,h().createElement("span",{className:"recharts-tooltip-item-value"},l),h().createElement("span",{className:"recharts-tooltip-item-unit"},e.unit||""))});return h().createElement("ul",{className:"recharts-tooltip-item-list",style:{padding:0,margin:0}},e)}return null}())};function Fn(e){return Fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fn(e)}function Un(e,t,n){var r;return r=function(e,t){if("object"!=Fn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Fn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Fn(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zn="recharts-tooltip-wrapper",qn={visibility:"hidden"};function Wn(e){var t=e.coordinate,n=e.translateX,r=e.translateY;return at(zn,Un(Un(Un(Un({},"".concat(zn,"-right"),xt(n)&&t&&xt(t.x)&&n>=t.x),"".concat(zn,"-left"),xt(n)&&t&&xt(t.x)&&n<t.x),"".concat(zn,"-bottom"),xt(r)&&t&&xt(t.y)&&r>=t.y),"".concat(zn,"-top"),xt(r)&&t&&xt(t.y)&&r<t.y))}function Kn(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.key,o=e.offsetTopLeft,i=e.position,a=e.reverseDirection,c=e.tooltipDimension,l=e.viewBox,u=e.viewBoxDimension;if(i&&xt(i[r]))return i[r];var s=n[r]-c-o,f=n[r]+o;return t[r]?a[r]?s:f:a[r]?s<l[r]?Math.max(f,l[r]):Math.max(s,l[r]):f+c>l[r]+u?Math.max(s,l[r]):Math.max(f,l[r])}function $n(e){return $n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$n(e)}function Hn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Vn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Hn(Object(n),!0).forEach(function(t){Qn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Gn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,er(r.key),r)}}function Yn(e,t,n){return t=Zn(t),function(e,t){if(t&&("object"===$n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Xn()?Reflect.construct(t,n||[],Zn(e).constructor):t.apply(e,n))}function Xn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Xn=function(){return!!e})()}function Zn(e){return Zn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Zn(e)}function Jn(e,t){return Jn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Jn(e,t)}function Qn(e,t,n){return(t=er(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function er(e){var t=function(e,t){if("object"!=$n(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=$n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$n(t)?t:t+""}var tr=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return Qn(e=Yn(this,t,[].concat(r)),"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),Qn(e,"handleKeyDown",function(t){var n,r,o,i;"Escape"===t.key&&e.setState({dismissed:!0,dismissedAtCoordinate:{x:null!==(n=null===(r=e.props.coordinate)||void 0===r?void 0:r.x)&&void 0!==n?n:0,y:null!==(o=null===(i=e.props.coordinate)||void 0===i?void 0:i.y)&&void 0!==o?o:0}})}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jn(e,t)}(t,e),n=t,(r=[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var e=this.wrapperNode.getBoundingClientRect();(Math.abs(e.width-this.state.lastBoundingBox.width)>1||Math.abs(e.height-this.state.lastBoundingBox.height)>1)&&this.setState({lastBoundingBox:{width:e.width,height:e.height}})}else-1===this.state.lastBoundingBox.width&&-1===this.state.lastBoundingBox.height||this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var e,t;this.props.active&&this.updateBBox(),this.state.dismissed&&((null===(e=this.props.coordinate)||void 0===e?void 0:e.x)===this.state.dismissedAtCoordinate.x&&(null===(t=this.props.coordinate)||void 0===t?void 0:t.y)===this.state.dismissedAtCoordinate.y||(this.state.dismissed=!1))}},{key:"render",value:function(){var e=this,t=this.props,n=t.active,r=t.allowEscapeViewBox,o=t.animationDuration,i=t.animationEasing,a=t.children,c=t.coordinate,l=t.hasPayload,u=t.isAnimationActive,s=t.offset,f=t.position,p=t.reverseDirection,d=t.useTranslate3d,y=t.viewBox,m=t.wrapperStyle,v=function(e){var t,n,r=e.allowEscapeViewBox,o=e.coordinate,i=e.offsetTopLeft,a=e.position,c=e.reverseDirection,l=e.tooltipBox,u=e.useTranslate3d,s=e.viewBox;return{cssProperties:l.height>0&&l.width>0&&o?function(e){var t=e.translateX,n=e.translateY;return{transform:e.useTranslate3d?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}({translateX:t=Kn({allowEscapeViewBox:r,coordinate:o,key:"x",offsetTopLeft:i,position:a,reverseDirection:c,tooltipDimension:l.width,viewBox:s,viewBoxDimension:s.width}),translateY:n=Kn({allowEscapeViewBox:r,coordinate:o,key:"y",offsetTopLeft:i,position:a,reverseDirection:c,tooltipDimension:l.height,viewBox:s,viewBoxDimension:s.height}),useTranslate3d:u}):qn,cssClasses:Wn({translateX:t,translateY:n,coordinate:o})}}({allowEscapeViewBox:r,coordinate:c,offsetTopLeft:s,position:f,reverseDirection:p,tooltipBox:this.state.lastBoundingBox,useTranslate3d:d,viewBox:y}),b=v.cssClasses,g=v.cssProperties,w=Vn(Vn({transition:u&&n?"transform ".concat(o,"ms ").concat(i):void 0},g),{},{pointerEvents:"none",visibility:!this.state.dismissed&&n&&l?"visible":"hidden",position:"absolute",top:0,left:0},m);return h().createElement("div",{tabIndex:-1,className:b,style:w,ref:function(t){e.wrapperNode=t}},a)}}])&&Gn(n.prototype,r),o&&Gn(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent),nr={isSsr:!("undefined"!=typeof window&&window.document&&window.document.createElement&&window.setTimeout),get:function(e){return nr[e]},set:function(e,t){if("string"==typeof e)nr[e]=t;else{var n=Object.keys(e);n&&n.length&&n.forEach(function(t){nr[t]=e[t]})}}},rr=n(14),or=n.n(rr);function ir(e,t,n){return!0===t?or()(e,n):Nt()(t)?or()(e,t):e}function ar(e){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ar(e)}function cr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cr(Object(n),!0).forEach(function(t){yr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ur(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,hr(r.key),r)}}function sr(e,t,n){return t=pr(t),function(e,t){if(t&&("object"===ar(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,fr()?Reflect.construct(t,n||[],pr(e).constructor):t.apply(e,n))}function fr(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(fr=function(){return!!e})()}function pr(e){return pr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},pr(e)}function dr(e,t){return dr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},dr(e,t)}function yr(e,t,n){return(t=hr(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function hr(e){var t=function(e,t){if("object"!=ar(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ar(t)?t:t+""}function mr(e){return e.dataKey}var vr=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),sr(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&dr(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){var e=this,t=this.props,n=t.active,r=t.allowEscapeViewBox,o=t.animationDuration,i=t.animationEasing,a=t.content,c=t.coordinate,l=t.filterNull,u=t.isAnimationActive,s=t.offset,f=t.payload,p=t.payloadUniqBy,d=t.position,y=t.reverseDirection,m=t.useTranslate3d,v=t.viewBox,b=t.wrapperStyle,g=null!=f?f:[];l&&g.length&&(g=ir(f.filter(function(t){return null!=t.value&&(!0!==t.hide||e.props.includeHidden)}),p,mr));var w=g.length>0;return h().createElement(tr,{allowEscapeViewBox:r,animationDuration:o,animationEasing:i,isAnimationActive:u,active:n,coordinate:c,hasPayload:w,offset:s,position:d,reverseDirection:y,useTranslate3d:m,viewBox:v,wrapperStyle:b},function(e,t){return h().isValidElement(e)?h().cloneElement(e,t):"function"==typeof e?h().createElement(e,t):h().createElement(Bn,t)}(a,lr(lr({},this.props),{},{payload:g})))}}])&&ur(n.prototype,r),o&&ur(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);yr(vr,"displayName","Tooltip"),yr(vr,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!nr.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var br=n(5808),gr=n.n(br);Math.abs,Math.atan2;const wr=Math.cos,xr=(Math.max,Math.min,Math.sin),Or=Math.sqrt,kr=Math.PI,Er=2*kr;const Sr={draw(e,t){const n=Or(t/kr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},jr={draw(e,t){const n=Or(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Pr=Or(1/3),_r=2*Pr,Ar={draw(e,t){const n=Or(t/_r),r=n*Pr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Tr={draw(e,t){const n=Or(t),r=-n/2;e.rect(r,r,n,n)}},Cr=xr(kr/10)/xr(7*kr/10),Nr=xr(Er/10)*Cr,Mr=-wr(Er/10)*Cr,Dr={draw(e,t){const n=Or(.8908130915292852*t),r=Nr*n,o=Mr*n;e.moveTo(0,-n),e.lineTo(r,o);for(let t=1;t<5;++t){const i=Er*t/5,a=wr(i),c=xr(i);e.lineTo(c*n,-a*n),e.lineTo(a*r-c*o,c*r+a*o)}e.closePath()}},Ir=Or(3),Rr={draw(e,t){const n=-Or(t/(3*Ir));e.moveTo(0,2*n),e.lineTo(-Ir*n,-n),e.lineTo(Ir*n,-n),e.closePath()}},Lr=-.5,Br=Or(3)/2,Fr=1/Or(12),Ur=3*(Fr/2+1),zr={draw(e,t){const n=Or(t/Ur),r=n/2,o=n*Fr,i=r,a=n*Fr+n,c=-i,l=a;e.moveTo(r,o),e.lineTo(i,a),e.lineTo(c,l),e.lineTo(Lr*r-Br*o,Br*r+Lr*o),e.lineTo(Lr*i-Br*a,Br*i+Lr*a),e.lineTo(Lr*c-Br*l,Br*c+Lr*l),e.lineTo(Lr*r+Br*o,Lr*o-Br*r),e.lineTo(Lr*i+Br*a,Lr*a-Br*i),e.lineTo(Lr*c+Br*l,Lr*l-Br*c),e.closePath()}};function qr(e){return function(){return e}}n.dn(qr);const Wr=Math.PI,Kr=2*Wr,$r=1e-6,Hr=Kr-$r;function Vr(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}class Gr{constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==e?Vr:function(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Vr;const n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;t<r;++t)this._+=Math.round(arguments[t]*n)/n+e[t]}}(e)}moveTo(e,t){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,t){this._append`L${this._x1=+e},${this._y1=+t}`}quadraticCurveTo(e,t,n,r){this._append`Q${+e},${+t},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(e,t,n,r,o,i){this._append`C${+e},${+t},${+n},${+r},${this._x1=+o},${this._y1=+i}`}arcTo(e,t,n,r,o){if(e=+e,t=+t,n=+n,r=+r,(o=+o)<0)throw new Error(`negative radius: ${o}`);let i=this._x1,a=this._y1,c=n-e,l=r-t,u=i-e,s=a-t,f=u*u+s*s;if(null===this._x1)this._append`M${this._x1=e},${this._y1=t}`;else if(f>$r)if(Math.abs(s*c-l*u)>$r&&o){let p=n-i,d=r-a,y=c*c+l*l,h=p*p+d*d,m=Math.sqrt(y),v=Math.sqrt(f),b=o*Math.tan((Wr-Math.acos((y+f-h)/(2*m*v)))/2),g=b/v,w=b/m;Math.abs(g-1)>$r&&this._append`L${e+g*u},${t+g*s}`,this._append`A${o},${o},0,0,${+(s*p>u*d)},${this._x1=e+w*c},${this._y1=t+w*l}`}else this._append`L${this._x1=e},${this._y1=t}`;else;}arc(e,t,n,r,o,i){if(e=+e,t=+t,i=!!i,(n=+n)<0)throw new Error(`negative radius: ${n}`);let a=n*Math.cos(r),c=n*Math.sin(r),l=e+a,u=t+c,s=1^i,f=i?r-o:o-r;null===this._x1?this._append`M${l},${u}`:(Math.abs(this._x1-l)>$r||Math.abs(this._y1-u)>$r)&&this._append`L${l},${u}`,n&&(f<0&&(f=f%Kr+Kr),f>Hr?this._append`A${n},${n},0,1,${s},${e-a},${t-c}A${n},${n},0,1,${s},${this._x1=l},${this._y1=u}`:f>$r&&this._append`A${n},${n},0,${+(f>=Wr)},${s},${this._x1=e+n*Math.cos(o)},${this._y1=t+n*Math.sin(o)}`)}rect(e,t,n,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Yr(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(null==n)t=null;else{const e=Math.floor(n);if(!(e>=0))throw new RangeError(`invalid digits: ${n}`);t=e}return e},()=>new Gr(t)}function Xr(e){return Xr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xr(e)}var Zr=["type","size","sizeType"];function Jr(){return Jr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jr.apply(this,arguments)}function Qr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qr(Object(n),!0).forEach(function(t){to(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function to(e,t,n){var r;return r=function(e,t){if("object"!=Xr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Xr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Xr(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function no(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ro={symbolCircle:Sr,symbolCross:jr,symbolDiamond:Ar,symbolSquare:Tr,symbolStar:Dr,symbolTriangle:Rr,symbolWye:zr},oo=Math.PI/180,io=function(e){var t,n,r=e.type,o=void 0===r?"circle":r,i=e.size,a=void 0===i?64:i,c=e.sizeType,l=void 0===c?"area":c,u=eo(eo({},no(e,Zr)),{},{type:o,size:a,sizeType:l}),s=u.className,f=u.cx,p=u.cy,d=on(u,!0);return f===+f&&p===+p&&a===+a?h().createElement("path",Jr({},d,{className:at("recharts-symbols",s),transform:"translate(".concat(f,", ").concat(p,")"),d:(t=function(e){var t="symbol".concat(gr()(e));return ro[t]||Sr}(o),n=function(e,t){let n=null,r=Yr(o);function o(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return e="function"==typeof e?e:qr(e||Sr),t="function"==typeof t?t:qr(void 0===t?64:+t),o.type=function(t){return arguments.length?(e="function"==typeof t?t:qr(t),o):e},o.size=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),o):t},o.context=function(e){return arguments.length?(n=null==e?null:e,o):n},o}().type(t).size(function(e,t,n){if("area"===t)return e;switch(n){case"cross":return 5*e*e/9;case"diamond":return.5*e*e/Math.sqrt(3);case"square":return e*e;case"star":var r=18*oo;return 1.25*e*e*(Math.tan(r)-Math.tan(2*r)*Math.pow(Math.tan(r),2));case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}}(a,l,o)),n())})):null};function ao(e){return ao="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ao(e)}function co(){return co=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},co.apply(this,arguments)}function lo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function uo(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mo(r.key),r)}}function so(e,t,n){return t=po(t),function(e,t){if(t&&("object"===ao(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,fo()?Reflect.construct(t,n||[],po(e).constructor):t.apply(e,n))}function fo(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(fo=function(){return!!e})()}function po(e){return po=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},po(e)}function yo(e,t){return yo=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},yo(e,t)}function ho(e,t,n){return(t=mo(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mo(e){var t=function(e,t){if("object"!=ao(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ao(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ao(t)?t:t+""}io.registerSymbol=function(e,t){ro["symbol".concat(gr()(e))]=t};var vo=32,bo=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),so(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yo(e,t)}(t,e),n=t,r=[{key:"renderIcon",value:function(e){var t=this.props.inactiveColor,n=16,r=vo/6,o=vo/3,i=e.inactive?t:e.color;if("plainline"===e.type)return h().createElement("line",{strokeWidth:4,fill:"none",stroke:i,strokeDasharray:e.payload.strokeDasharray,x1:0,y1:n,x2:vo,y2:n,className:"recharts-legend-icon"});if("line"===e.type)return h().createElement("path",{strokeWidth:4,fill:"none",stroke:i,d:"M0,".concat(n,"h").concat(o,"\n            A").concat(r,",").concat(r,",0,1,1,").concat(2*o,",").concat(n,"\n            H").concat(vo,"M").concat(2*o,",").concat(n,"\n            A").concat(r,",").concat(r,",0,1,1,").concat(o,",").concat(n),className:"recharts-legend-icon"});if("rect"===e.type)return h().createElement("path",{stroke:"none",fill:i,d:"M0,".concat(4,"h").concat(vo,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(h().isValidElement(e.legendIcon)){var a=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?lo(Object(n),!0).forEach(function(t){ho(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):lo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},e);return delete a.legendIcon,h().cloneElement(e.legendIcon,a)}return h().createElement(io,{fill:i,cx:n,cy:n,size:vo,sizeType:"diameter",type:e.type})}},{key:"renderItems",value:function(){var e=this,t=this.props,n=t.payload,r=t.iconSize,o=t.layout,i=t.formatter,a=t.inactiveColor,c={x:0,y:0,width:vo,height:vo},l={display:"horizontal"===o?"inline-block":"block",marginRight:10},u={display:"inline-block",verticalAlign:"middle",marginRight:4};return n.map(function(t,n){var o=t.formatter||i,s=at(ho(ho({"recharts-legend-item":!0},"legend-item-".concat(n),!0),"inactive",t.inactive));if("none"===t.type)return null;var f=Nt()(t.value)?null:t.value;Tt(!Nt()(t.value),'The name property is also required when using a function for the dataKey of a chart\'s cartesian components. Ex: <Bar name="Name of my Data"/>');var p=t.inactive?a:t.color;return h().createElement("li",co({className:s,style:l,key:"legend-item-".concat(n)},Wt(e.props,t,n)),h().createElement(Sn,{width:r,height:r,viewBox:c,style:u},e.renderIcon(t)),h().createElement("span",{className:"recharts-legend-item-text",style:{color:p}},o?o(f,t,n):f))})}},{key:"render",value:function(){var e=this.props,t=e.payload,n=e.layout,r=e.align;if(!t||!t.length)return null;var o={padding:0,margin:0,textAlign:"horizontal"===n?r:"left"};return h().createElement("ul",{className:"recharts-default-legend",style:o},this.renderItems())}}],r&&uo(n.prototype,r),o&&uo(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function go(e){return go="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},go(e)}ho(bo,"displayName","Legend"),ho(bo,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var wo=["ref"];function xo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Oo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xo(Object(n),!0).forEach(function(t){_o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ko(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Ao(r.key),r)}}function Eo(e,t,n){return t=jo(t),function(e,t){if(t&&("object"===go(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,So()?Reflect.construct(t,n||[],jo(e).constructor):t.apply(e,n))}function So(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(So=function(){return!!e})()}function jo(e){return jo=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},jo(e)}function Po(e,t){return Po=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Po(e,t)}function _o(e,t,n){return(t=Ao(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ao(e){var t=function(e,t){if("object"!=go(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=go(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==go(t)?t:t+""}function To(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Co(e){return e.value}var No=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return _o(e=Eo(this,t,[].concat(r)),"lastBoundingBox",{width:-1,height:-1}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Po(e,t)}(t,e),n=t,o=[{key:"getWithHeight",value:function(e,t){var n=Oo(Oo({},this.defaultProps),e.props).layout;return"vertical"===n&&xt(e.props.height)?{height:e.props.height}:"horizontal"===n?{width:e.props.width||t}:null}}],(r=[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var e=this.wrapperNode.getBoundingClientRect();return e.height=this.wrapperNode.offsetHeight,e.width=this.wrapperNode.offsetWidth,e}return null}},{key:"updateBBox",value:function(){var e=this.props.onBBoxUpdate,t=this.getBBox();t?(Math.abs(t.width-this.lastBoundingBox.width)>1||Math.abs(t.height-this.lastBoundingBox.height)>1)&&(this.lastBoundingBox.width=t.width,this.lastBoundingBox.height=t.height,e&&e(t)):-1===this.lastBoundingBox.width&&-1===this.lastBoundingBox.height||(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,e&&e(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?Oo({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(e){var t,n,r=this.props,o=r.layout,i=r.align,a=r.verticalAlign,c=r.margin,l=r.chartWidth,u=r.chartHeight;return e&&(void 0!==e.left&&null!==e.left||void 0!==e.right&&null!==e.right)||(t="center"===i&&"vertical"===o?{left:((l||0)-this.getBBoxSnapshot().width)/2}:"right"===i?{right:c&&c.right||0}:{left:c&&c.left||0}),e&&(void 0!==e.top&&null!==e.top||void 0!==e.bottom&&null!==e.bottom)||(n="middle"===a?{top:((u||0)-this.getBBoxSnapshot().height)/2}:"bottom"===a?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),Oo(Oo({},t),n)}},{key:"render",value:function(){var e=this,t=this.props,n=t.content,r=t.width,o=t.height,i=t.wrapperStyle,a=t.payloadUniqBy,c=t.payload,l=Oo(Oo({position:"absolute",width:r||"auto",height:o||"auto"},this.getDefaultPosition(i)),i);return h().createElement("div",{className:"recharts-legend-wrapper",style:l,ref:function(t){e.wrapperNode=t}},function(e,t){if(h().isValidElement(e))return h().cloneElement(e,t);if("function"==typeof e)return h().createElement(e,t);t.ref;var n=To(t,wo);return h().createElement(bo,n)}(n,Oo(Oo({},this.props),{},{payload:ir(c,a,Co)})))}}])&&ko(n.prototype,r),o&&ko(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function Mo(){return Mo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mo.apply(this,arguments)}_o(No,"displayName","Legend"),_o(No,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Do=function(e){var t=e.cx,n=e.cy,r=e.r,o=e.className,i=at("recharts-dot",o);return t===+t&&n===+n&&r===+r?y.createElement("circle",Mo({},on(e,!1),qt(e),{className:i,cx:t,cy:n,r})):null},Io=n(5556),Ro=n.n(Io);const{getOwnPropertyNames:Lo,getOwnPropertySymbols:Bo}=Object,{hasOwnProperty:Fo}=Object.prototype;function Uo(e,t){return function(n,r,o){return e(n,r,o)&&t(n,r,o)}}function zo(e){return function(t,n,r){if(!t||!n||"object"!=typeof t||"object"!=typeof n)return e(t,n,r);const{cache:o}=r,i=o.get(t),a=o.get(n);if(i&&a)return i===n&&a===t;o.set(t,n),o.set(n,t);const c=e(t,n,r);return o.delete(t),o.delete(n),c}}function qo(e){return Lo(e).concat(Bo(e))}const Wo=Object.hasOwn||((e,t)=>Fo.call(e,t));function Ko(e,t){return e===t||!e&&!t&&e!=e&&t!=t}const{getOwnPropertyDescriptor:$o,keys:Ho}=Object;function Vo(e,t){return e.byteLength===t.byteLength&&ai(new Uint8Array(e),new Uint8Array(t))}function Go(e,t,n){let r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function Yo(e,t){return e.byteLength===t.byteLength&&ai(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function Xo(e,t){return Ko(e.getTime(),t.getTime())}function Zo(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function Jo(e,t){return e===t}function Qo(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const o=new Array(r),i=e.entries();let a,c,l=0;for(;(a=i.next())&&!a.done;){const r=t.entries();let i=!1,u=0;for(;(c=r.next())&&!c.done;){if(o[u]){u++;continue}const r=a.value,s=c.value;if(n.equals(r[0],s[0],l,u,e,t,n)&&n.equals(r[1],s[1],r[0],s[0],e,t,n)){i=o[u]=!0;break}u++}if(!i)return!1;l++}return!0}const ei=Ko;function ti(e,t,n){const r=Ho(e);let o=r.length;if(Ho(t).length!==o)return!1;for(;o-- >0;)if(!li(e,t,n,r[o]))return!1;return!0}function ni(e,t,n){const r=qo(e);let o,i,a,c=r.length;if(qo(t).length!==c)return!1;for(;c-- >0;){if(o=r[c],!li(e,t,n,o))return!1;if(i=$o(e,o),a=$o(t,o),(i||a)&&(!i||!a||i.configurable!==a.configurable||i.enumerable!==a.enumerable||i.writable!==a.writable))return!1}return!0}function ri(e,t){return Ko(e.valueOf(),t.valueOf())}function oi(e,t){return e.source===t.source&&e.flags===t.flags}function ii(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const o=new Array(r),i=e.values();let a,c;for(;(a=i.next())&&!a.done;){const r=t.values();let i=!1,l=0;for(;(c=r.next())&&!c.done;){if(!o[l]&&n.equals(a.value,c.value,a.value,c.value,e,t,n)){i=o[l]=!0;break}l++}if(!i)return!1}return!0}function ai(e,t){let n=e.byteLength;if(t.byteLength!==n||e.byteOffset!==t.byteOffset)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function ci(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function li(e,t,n,r){return!("_owner"!==r&&"__o"!==r&&"__v"!==r||!e.$$typeof&&!t.$$typeof)||Wo(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}const ui={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},si=Object.prototype.toString;function fi({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:n,areDatesEqual:r,areErrorsEqual:o,areFunctionsEqual:i,areMapsEqual:a,areNumbersEqual:c,areObjectsEqual:l,arePrimitiveWrappersEqual:u,areRegExpsEqual:s,areSetsEqual:f,areTypedArraysEqual:p,areUrlsEqual:d,unknownTagComparators:y}){return function(h,m,v){if(h===m)return!0;if(null==h||null==m)return!1;const b=typeof h;if(b!==typeof m)return!1;if("object"!==b)return"number"===b?c(h,m,v):"function"===b&&i(h,m,v);const g=h.constructor;if(g!==m.constructor)return!1;if(g===Object)return l(h,m,v);if(Array.isArray(h))return t(h,m,v);if(g===Date)return r(h,m,v);if(g===RegExp)return s(h,m,v);if(g===Map)return a(h,m,v);if(g===Set)return f(h,m,v);const w=si.call(h);if("[object Date]"===w)return r(h,m,v);if("[object RegExp]"===w)return s(h,m,v);if("[object Map]"===w)return a(h,m,v);if("[object Set]"===w)return f(h,m,v);if("[object Object]"===w)return"function"!=typeof h.then&&"function"!=typeof m.then&&l(h,m,v);if("[object URL]"===w)return d(h,m,v);if("[object Error]"===w)return o(h,m,v);if("[object Arguments]"===w)return l(h,m,v);if(ui[w])return p(h,m,v);if("[object ArrayBuffer]"===w)return e(h,m,v);if("[object DataView]"===w)return n(h,m,v);if("[object Boolean]"===w||"[object Number]"===w||"[object String]"===w)return u(h,m,v);if(y){let e=y[w];if(!e){const t=function(e){return null!=e?e[Symbol.toStringTag]:void 0}(h);t&&(e=y[t])}if(e)return e(h,m,v)}return!1}}const pi=di();di({strict:!0}),di({circular:!0}),di({circular:!0,strict:!0}),di({createInternalComparator:()=>Ko}),di({strict:!0,createInternalComparator:()=>Ko}),di({circular:!0,createInternalComparator:()=>Ko}),di({circular:!0,createInternalComparator:()=>Ko,strict:!0});function di(e={}){const{circular:t=!1,createInternalComparator:n,createState:r,strict:o=!1}=e,i=function({circular:e,createCustomConfig:t,strict:n}){let r={areArrayBuffersEqual:Vo,areArraysEqual:n?ni:Go,areDataViewsEqual:Yo,areDatesEqual:Xo,areErrorsEqual:Zo,areFunctionsEqual:Jo,areMapsEqual:n?Uo(Qo,ni):Qo,areNumbersEqual:ei,areObjectsEqual:n?ni:ti,arePrimitiveWrappersEqual:ri,areRegExpsEqual:oi,areSetsEqual:n?Uo(ii,ni):ii,areTypedArraysEqual:n?Uo(ai,ni):ai,areUrlsEqual:ci,unknownTagComparators:void 0};if(t&&(r=Object.assign({},r,t(r))),e){const e=zo(r.areArraysEqual),t=zo(r.areMapsEqual),n=zo(r.areObjectsEqual),o=zo(r.areSetsEqual);r=Object.assign({},r,{areArraysEqual:e,areMapsEqual:t,areObjectsEqual:n,areSetsEqual:o})}return r}(e),a=fi(i),c=n?n(a):(l=a,function(e,t,n,r,o,i,a){return l(e,t,a)});var l;return function({circular:e,comparator:t,createState:n,equals:r,strict:o}){if(n)return function(i,a){const{cache:c=(e?new WeakMap:void 0),meta:l}=n();return t(i,a,{cache:c,equals:r,meta:l,strict:o})};if(e)return function(e,n){return t(e,n,{cache:new WeakMap,equals:r,meta:void 0,strict:o})};const i={cache:void 0,equals:r,meta:void 0,strict:o};return function(e,n){return t(e,n,i)}}({circular:t,comparator:a,createState:r,equals:c,strict:o})}function yi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=-1;requestAnimationFrame(function r(o){n<0&&(n=o),o-n>t?(e(o),n=-1):function(e){"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(e)}(r)})}function hi(e){return hi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hi(e)}function mi(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return vi(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return vi(e,t)}(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function bi(){var e=function(){return null},t=!1,n=function n(r){if(!t){if(Array.isArray(r)){if(!r.length)return;var o=mi(r),i=o[0],a=o.slice(1);return"number"==typeof i?void yi(n.bind(null,a),i):(n(i),void yi(n.bind(null,a)))}"object"===hi(r)&&e(r),"function"==typeof r&&r()}};return{stop:function(){t=!0},start:function(e){t=!1,n(e)},subscribe:function(t){return e=t,function(){e=function(){return null}}}}}function gi(e){return gi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gi(e)}function wi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function xi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wi(Object(n),!0).forEach(function(t){Oi(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Oi(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==gi(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==gi(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===gi(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ki=function(e){return e},Ei=function(e,t){return Object.keys(t).reduce(function(n,r){return xi(xi({},n),{},Oi({},r,e(r,t[r])))},{})},Si=function(e,t,n){return e.map(function(e){return"".concat((r=e,r.replace(/([A-Z])/g,function(e){return"-".concat(e.toLowerCase())}))," ").concat(t,"ms ").concat(n);var r}).join(",")};function ji(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||_i(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pi(e){return function(e){if(Array.isArray(e))return Ai(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||_i(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _i(e,t){if(e){if("string"==typeof e)return Ai(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ai(e,t):void 0}}function Ai(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ti=1e-4,Ci=function(e,t){return[0,3*e,3*t-6*e,3*e-3*t+1]},Ni=function(e,t){return e.map(function(e,n){return e*Math.pow(t,n)}).reduce(function(e,t){return e+t})},Mi=function(e,t){return function(n){var r=Ci(e,t);return Ni(r,n)}},Di=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0],o=t[1],i=t[2],a=t[3];if(1===t.length)switch(t[0]){case"linear":r=0,o=0,i=1,a=1;break;case"ease":r=.25,o=.1,i=.25,a=1;break;case"ease-in":r=.42,o=0,i=1,a=1;break;case"ease-out":r=.42,o=0,i=.58,a=1;break;case"ease-in-out":r=0,o=0,i=.58,a=1;break;default:var c=t[0].split("(");if("cubic-bezier"===c[0]&&4===c[1].split(")")[0].split(",").length){var l=ji(c[1].split(")")[0].split(",").map(function(e){return parseFloat(e)}),4);r=l[0],o=l[1],i=l[2],a=l[3]}}[r,i,o,a].every(function(e){return"number"==typeof e&&e>=0&&e<=1});var u,s,f=Mi(r,i),p=Mi(o,a),d=(u=r,s=i,function(e){var t=Ci(u,s),n=[].concat(Pi(t.map(function(e,t){return e*t}).slice(1)),[0]);return Ni(n,e)}),y=function(e){return e>1?1:e<0?0:e},h=function(e){for(var t=e>1?1:e,n=t,r=0;r<8;++r){var o=f(n)-t,i=d(n);if(Math.abs(o-t)<Ti||i<Ti)return p(n);n=y(n-o/i)}return p(n)};return h.isStepper=!1,h},Ii=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0];if("string"==typeof r)switch(r){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Di(r);case"spring":return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.stiff,n=void 0===t?100:t,r=e.damping,o=void 0===r?8:r,i=e.dt,a=void 0===i?17:i,c=function(e,t,r){var i=r+(-(e-t)*n-r*o)*a/1e3,c=r*a/1e3+e;return Math.abs(c-t)<Ti&&Math.abs(i)<Ti?[t,0]:[c,i]};return c.isStepper=!0,c.dt=a,c}();default:if("cubic-bezier"===r.split("(")[0])return Di(r)}return"function"==typeof r?r:null};function Ri(e){return Ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ri(e)}function Li(e){return function(e){if(Array.isArray(e))return Wi(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||qi(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Bi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Fi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Bi(Object(n),!0).forEach(function(t){Ui(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ui(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ri(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Ri(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ri(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zi(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||qi(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qi(e,t){if(e){if("string"==typeof e)return Wi(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wi(e,t):void 0}}function Wi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ki=function(e,t,n){return e+(t-e)*n},$i=function(e){return e.from!==e.to},Hi=function e(t,n,r){var o=Ei(function(e,n){if($i(n)){var r=zi(t(n.from,n.to,n.velocity),2),o=r[0],i=r[1];return Fi(Fi({},n),{},{from:o,velocity:i})}return n},n);return r<1?Ei(function(e,t){return $i(t)?Fi(Fi({},t),{},{velocity:Ki(t.velocity,o[e].velocity,r),from:Ki(t.from,o[e].from,r)}):t},n):e(t,o,r-1)};const Vi=function(e,t,n,r,o){var i,a,c,l,u=(i=e,a=t,[Object.keys(i),Object.keys(a)].reduce(function(e,t){return e.filter(function(e){return t.includes(e)})})),s=u.reduce(function(n,r){return Fi(Fi({},n),{},Ui({},r,[e[r],t[r]]))},{}),f=u.reduce(function(n,r){return Fi(Fi({},n),{},Ui({},r,{from:e[r],velocity:0,to:t[r]}))},{}),p=-1,d=function(){return null};return d=n.isStepper?function(r){c||(c=r);var i=(r-c)/n.dt;f=Hi(n,f,i),o(Fi(Fi(Fi({},e),t),Ei(function(e,t){return t.from},f))),c=r,Object.values(f).filter($i).length&&(p=requestAnimationFrame(d))}:function(i){l||(l=i);var a=(i-l)/r,c=Ei(function(e,t){return Ki.apply(void 0,Li(t).concat([n(a)]))},s);if(o(Fi(Fi(Fi({},e),t),c)),a<1)p=requestAnimationFrame(d);else{var u=Ei(function(e,t){return Ki.apply(void 0,Li(t).concat([n(1)]))},s);o(Fi(Fi(Fi({},e),t),u))}},function(){return requestAnimationFrame(d),function(){cancelAnimationFrame(p)}}};function Gi(e){return Gi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gi(e)}n.dn(Vi);var Yi=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function Xi(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Zi(e){return function(e){if(Array.isArray(e))return Ji(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ji(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ji(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ji(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Qi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ea(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qi(Object(n),!0).forEach(function(t){ta(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ta(e,t,n){return(t=ra(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function na(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ra(r.key),r)}}function ra(e){var t=function(e,t){if("object"!==Gi(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Gi(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Gi(t)?t:String(t)}function oa(e,t){return oa=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},oa(e,t)}function ia(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();return function(){var n,r=la(e);if(t){var o=la(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return aa(this,n)}}function aa(e,t){if(t&&("object"===Gi(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return ca(e)}function ca(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function la(e){return la=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},la(e)}var ua=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&oa(e,t)}(i,e);var t,n,r,o=ia(i);function i(e,t){var n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i);var r=(n=o.call(this,e,t)).props,a=r.isActive,c=r.attributeName,l=r.from,u=r.to,s=r.steps,f=r.children,p=r.duration;if(n.handleStyleChange=n.handleStyleChange.bind(ca(n)),n.changeStyle=n.changeStyle.bind(ca(n)),!a||p<=0)return n.state={style:{}},"function"==typeof f&&(n.state={style:u}),aa(n);if(s&&s.length)n.state={style:s[0].style};else if(l){if("function"==typeof f)return n.state={style:l},aa(n);n.state={style:c?ta({},c,l):l}}else n.state={style:{}};return n}return t=i,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.isActive,n=e.canBegin;this.mounted=!0,t&&n&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.isActive,r=t.canBegin,o=t.attributeName,i=t.shouldReAnimate,a=t.to,c=t.from,l=this.state.style;if(r)if(n){if(!(pi(e.to,a)&&e.canBegin&&e.isActive)){var u=!e.canBegin||!e.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var s=u||i?c:e.to;if(this.state&&l){var f={style:o?ta({},o,s):s};(o&&l[o]!==s||!o&&l!==s)&&this.setState(f)}this.runAnimation(ea(ea({},this.props),{},{from:s,begin:0}))}}else{var p={style:o?ta({},o,a):a};this.state&&l&&(o&&l[o]!==a||!o&&l!==a)&&this.setState(p)}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var e=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),e&&e()}},{key:"handleStyleChange",value:function(e){this.changeStyle(e)}},{key:"changeStyle",value:function(e){this.mounted&&this.setState({style:e})}},{key:"runJSAnimation",value:function(e){var t=this,n=e.from,r=e.to,o=e.duration,i=e.easing,a=e.begin,c=e.onAnimationEnd,l=e.onAnimationStart,u=Vi(n,r,Ii(i),o,this.changeStyle);this.manager.start([l,a,function(){t.stopJSAnimation=u()},o,c])}},{key:"runStepAnimation",value:function(e){var t=this,n=e.steps,r=e.begin,o=e.onAnimationStart,i=n[0],a=i.style,c=i.duration,l=void 0===c?0:c;return this.manager.start([o].concat(Zi(n.reduce(function(e,r,o){if(0===o)return e;var i=r.duration,a=r.easing,c=void 0===a?"ease":a,l=r.style,u=r.properties,s=r.onAnimationEnd,f=o>0?n[o-1]:r,p=u||Object.keys(l);if("function"==typeof c||"spring"===c)return[].concat(Zi(e),[t.runJSAnimation.bind(t,{from:f.style,to:l,duration:i,easing:c}),i]);var d=Si(p,i,c),y=ea(ea(ea({},f.style),l),{},{transition:d});return[].concat(Zi(e),[y,i,s]).filter(ki)},[a,Math.max(l,r)])),[e.onAnimationEnd]))}},{key:"runAnimation",value:function(e){this.manager||(this.manager=bi());var t=e.begin,n=e.duration,r=e.attributeName,o=e.to,i=e.easing,a=e.onAnimationStart,c=e.onAnimationEnd,l=e.steps,u=e.children,s=this.manager;if(this.unSubscribe=s.subscribe(this.handleStyleChange),"function"!=typeof i&&"function"!=typeof u&&"spring"!==i)if(l.length>1)this.runStepAnimation(e);else{var f=r?ta({},r,o):o,p=Si(Object.keys(f),n,i);s.start([a,t,ea(ea({},f),{},{transition:p}),n,c])}else this.runJSAnimation(e)}},{key:"render",value:function(){var e=this.props,t=e.children,n=(e.begin,e.duration),r=(e.attributeName,e.easing,e.isActive),o=(e.steps,e.from,e.to,e.canBegin,e.onAnimationEnd,e.shouldReAnimate,e.onAnimationReStart,Xi(e,Yi)),i=y.Children.count(t),a=this.state.style;if("function"==typeof t)return t(a);if(!r||0===i||n<=0)return t;var c=function(e){var t=e.props,n=t.style,r=void 0===n?{}:n,i=t.className;return(0,y.cloneElement)(e,ea(ea({},o),{},{style:ea(ea({},r),a),className:i}))};return 1===i?c(y.Children.only(t)):h().createElement("div",null,y.Children.map(t,function(e){return c(e)}))}}])&&na(t.prototype,n),r&&na(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(y.PureComponent);ua.displayName="Animate",ua.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}},ua.propTypes={from:Ro().oneOfType([Ro().object,Ro().string]),to:Ro().oneOfType([Ro().object,Ro().string]),attributeName:Ro().string,duration:Ro().number,begin:Ro().number,easing:Ro().oneOfType([Ro().string,Ro().func]),steps:Ro().arrayOf(Ro().shape({duration:Ro().number.isRequired,style:Ro().object.isRequired,easing:Ro().oneOfType([Ro().oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),Ro().func]),properties:Ro().arrayOf("string"),onAnimationEnd:Ro().func})),children:Ro().oneOfType([Ro().node,Ro().func]),isActive:Ro().bool,canBegin:Ro().bool,onAnimationEnd:Ro().func,shouldReAnimate:Ro().bool,onAnimationStart:Ro().func,onAnimationReStart:Ro().func};const sa=ua;function fa(e){return fa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fa(e)}function pa(){return pa=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},pa.apply(this,arguments)}function da(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ya(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ya(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ya(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ha(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ma(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ha(Object(n),!0).forEach(function(t){va(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ha(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function va(e,t,n){var r;return r=function(e,t){if("object"!=fa(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=fa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==fa(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ba=function(e,t,n,r,o){var i,a=Math.min(Math.abs(n)/2,Math.abs(r)/2),c=r>=0?1:-1,l=n>=0?1:-1,u=r>=0&&n>=0||r<0&&n<0?1:0;if(a>0&&o instanceof Array){for(var s=[0,0,0,0],f=0;f<4;f++)s[f]=o[f]>a?a:o[f];i="M".concat(e,",").concat(t+c*s[0]),s[0]>0&&(i+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(u,",").concat(e+l*s[0],",").concat(t)),i+="L ".concat(e+n-l*s[1],",").concat(t),s[1]>0&&(i+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(u,",\n        ").concat(e+n,",").concat(t+c*s[1])),i+="L ".concat(e+n,",").concat(t+r-c*s[2]),s[2]>0&&(i+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(u,",\n        ").concat(e+n-l*s[2],",").concat(t+r)),i+="L ".concat(e+l*s[3],",").concat(t+r),s[3]>0&&(i+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(u,",\n        ").concat(e,",").concat(t+r-c*s[3])),i+="Z"}else if(a>0&&o===+o&&o>0){var p=Math.min(a,o);i="M ".concat(e,",").concat(t+c*p,"\n            A ").concat(p,",").concat(p,",0,0,").concat(u,",").concat(e+l*p,",").concat(t,"\n            L ").concat(e+n-l*p,",").concat(t,"\n            A ").concat(p,",").concat(p,",0,0,").concat(u,",").concat(e+n,",").concat(t+c*p,"\n            L ").concat(e+n,",").concat(t+r-c*p,"\n            A ").concat(p,",").concat(p,",0,0,").concat(u,",").concat(e+n-l*p,",").concat(t+r,"\n            L ").concat(e+l*p,",").concat(t+r,"\n            A ").concat(p,",").concat(p,",0,0,").concat(u,",").concat(e,",").concat(t+r-c*p," Z")}else i="M ".concat(e,",").concat(t," h ").concat(n," v ").concat(r," h ").concat(-n," Z");return i},ga=function(e,t){if(!e||!t)return!1;var n=e.x,r=e.y,o=t.x,i=t.y,a=t.width,c=t.height;if(Math.abs(a)>0&&Math.abs(c)>0){var l=Math.min(o,o+a),u=Math.max(o,o+a),s=Math.min(i,i+c),f=Math.max(i,i+c);return n>=l&&n<=u&&r>=s&&r<=f}return!1},wa={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},xa=function(e){var t=ma(ma({},wa),e),n=(0,y.useRef)(),r=da((0,y.useState)(-1),2),o=r[0],i=r[1];(0,y.useEffect)(function(){if(n.current&&n.current.getTotalLength)try{var e=n.current.getTotalLength();e&&i(e)}catch(e){}},[]);var a=t.x,c=t.y,l=t.width,u=t.height,s=t.radius,f=t.className,p=t.animationEasing,d=t.animationDuration,m=t.animationBegin,v=t.isAnimationActive,b=t.isUpdateAnimationActive;if(a!==+a||c!==+c||l!==+l||u!==+u||0===l||0===u)return null;var g=at("recharts-rectangle",f);return b?h().createElement(sa,{canBegin:o>0,from:{width:l,height:u,x:a,y:c},to:{width:l,height:u,x:a,y:c},duration:d,animationEasing:p,isActive:b},function(e){var r=e.width,i=e.height,a=e.x,c=e.y;return h().createElement(sa,{canBegin:o>0,from:"0px ".concat(-1===o?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:m,duration:d,isActive:v,easing:p},h().createElement("path",pa({},on(t,!0),{className:g,d:ba(a,c,r,i,s),ref:n})))}):h().createElement("path",pa({},on(t,!0),{className:g,d:ba(a,c,l,u,s)}))};function Oa(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e)}return this}function ka(e,t){switch(arguments.length){case 0:break;case 1:"function"==typeof e?this.interpolator(e):this.range(e);break;default:this.domain(e),"function"==typeof t?this.interpolator(t):this.range(t)}return this}class Ea extends Map{constructor(e,t=_a){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[t,n]of e)this.set(t,n)}get(e){return super.get(Sa(this,e))}has(e){return super.has(Sa(this,e))}set(e,t){return super.set(ja(this,e),t)}delete(e){return super.delete(Pa(this,e))}}Set;function Sa({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function ja({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function Pa({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function _a(e){return null!==e&&"object"==typeof e?e.valueOf():e}const Aa=Symbol("implicit");function Ta(){var e=new Ea,t=[],n=[],r=Aa;function o(o){let i=e.get(o);if(void 0===i){if(r!==Aa)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return o.domain=function(n){if(!arguments.length)return t.slice();t=[],e=new Ea;for(const r of n)e.has(r)||e.set(r,t.push(r)-1);return o},o.range=function(e){return arguments.length?(n=Array.from(e),o):n.slice()},o.unknown=function(e){return arguments.length?(r=e,o):r},o.copy=function(){return Ta(t,n).unknown(r)},Oa.apply(o,arguments),o}function Ca(){var e,t,n=Ta().unknown(void 0),r=n.domain,o=n.range,i=0,a=1,c=!1,l=0,u=0,s=.5;function f(){var n=r().length,f=a<i,p=f?a:i,d=f?i:a;e=(d-p)/Math.max(1,n-l+2*u),c&&(e=Math.floor(e)),p+=(d-p-e*(n-l))*s,t=e*(1-l),c&&(p=Math.round(p),t=Math.round(t));var y=function(e,t,n){e=+e,t=+t,n=(o=arguments.length)<2?(t=e,e=0,1):o<3?1:+n;for(var r=-1,o=0|Math.max(0,Math.ceil((t-e)/n)),i=new Array(o);++r<o;)i[r]=e+r*n;return i}(n).map(function(t){return p+e*t});return o(f?y.reverse():y)}return delete n.unknown,n.domain=function(e){return arguments.length?(r(e),f()):r()},n.range=function(e){return arguments.length?([i,a]=e,i=+i,a=+a,f()):[i,a]},n.rangeRound=function(e){return[i,a]=e,i=+i,a=+a,c=!0,f()},n.bandwidth=function(){return t},n.step=function(){return e},n.round=function(e){return arguments.length?(c=!!e,f()):c},n.padding=function(e){return arguments.length?(l=Math.min(1,u=+e),f()):l},n.paddingInner=function(e){return arguments.length?(l=Math.min(1,e),f()):l},n.paddingOuter=function(e){return arguments.length?(u=+e,f()):u},n.align=function(e){return arguments.length?(s=Math.max(0,Math.min(1,e)),f()):s},n.copy=function(){return Ca(r(),[i,a]).round(c).paddingInner(l).paddingOuter(u).align(s)},Oa.apply(f(),arguments)}function Na(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return Na(t())},e}function Ma(){return Na(Ca.apply(null,arguments).paddingInner(1))}function Da(e){return Da="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Da(e)}function Ia(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ra(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ia(Object(n),!0).forEach(function(t){La(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ia(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function La(e,t,n){var r;return r=function(e,t){if("object"!=Da(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Da(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Da(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ba={widthCache:{},cacheCount:0},Fa={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},Ua="recharts_measurement_span";var za=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==e||nr.isSsr)return{width:0,height:0};var n,r=(n=Ra({},t),Object.keys(n).forEach(function(e){n[e]||delete n[e]}),n),o=JSON.stringify({text:e,copyStyle:r});if(Ba.widthCache[o])return Ba.widthCache[o];try{var i=document.getElementById(Ua);i||((i=document.createElement("span")).setAttribute("id",Ua),i.setAttribute("aria-hidden","true"),document.body.appendChild(i));var a=Ra(Ra({},Fa),r);Object.assign(i.style,a),i.textContent="".concat(e);var c=i.getBoundingClientRect(),l={width:c.width,height:c.height};return Ba.widthCache[o]=l,++Ba.cacheCount>2e3&&(Ba.cacheCount=0,Ba.widthCache={}),l}catch(e){return{width:0,height:0}}};function qa(e){return qa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qa(e)}function Wa(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Ka(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ka(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ka(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Ha(r.key),r)}}function Ha(e){var t=function(e,t){if("object"!=qa(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=qa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==qa(t)?t:t+""}var Va=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Ga=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Ya=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,Xa=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,Za={cm:96/2.54,mm:96/25.4,pt:96/72,pc:16,in:96,Q:96/101.6,px:1},Ja=Object.keys(Za),Qa="NaN";var ec=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.num=t,this.unit=n,this.num=t,this.unit=n,Number.isNaN(t)&&(this.unit=""),""===n||Ya.test(n)||(this.num=NaN,this.unit=""),Ja.includes(n)&&(this.num=function(e,t){return e*Za[t]}(t,n),this.unit="px")}return t=e,r=[{key:"parse",value:function(t){var n,r=Wa(null!==(n=Xa.exec(t))&&void 0!==n?n:[],3),o=r[1],i=r[2];return new e(parseFloat(o),null!=i?i:"")}}],(n=[{key:"add",value:function(t){return this.unit!==t.unit?new e(NaN,""):new e(this.num+t.num,this.unit)}},{key:"subtract",value:function(t){return this.unit!==t.unit?new e(NaN,""):new e(this.num-t.num,this.unit)}},{key:"multiply",value:function(t){return""!==this.unit&&""!==t.unit&&this.unit!==t.unit?new e(NaN,""):new e(this.num*t.num,this.unit||t.unit)}},{key:"divide",value:function(t){return""!==this.unit&&""!==t.unit&&this.unit!==t.unit?new e(NaN,""):new e(this.num/t.num,this.unit||t.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}])&&$a(t.prototype,n),r&&$a(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,r}();function tc(e){if(e.includes(Qa))return Qa;for(var t=e;t.includes("*")||t.includes("/");){var n,r=Wa(null!==(n=Va.exec(t))&&void 0!==n?n:[],4),o=r[1],i=r[2],a=r[3],c=ec.parse(null!=o?o:""),l=ec.parse(null!=a?a:""),u="*"===i?c.multiply(l):c.divide(l);if(u.isNaN())return Qa;t=t.replace(Va,u.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var s,f=Wa(null!==(s=Ga.exec(t))&&void 0!==s?s:[],4),p=f[1],d=f[2],y=f[3],h=ec.parse(null!=p?p:""),m=ec.parse(null!=y?y:""),v="+"===d?h.add(m):h.subtract(m);if(v.isNaN())return Qa;t=t.replace(Ga,v.toString())}return t}var nc=/\(([^()]*)\)/;function rc(e){var t=e.replace(/\s+/g,"");return t=function(e){for(var t=e;t.includes("(");){var n=Wa(nc.exec(t),2)[1];t=t.replace(nc,tc(n))}return t}(t),t=tc(t)}function oc(e){var t=function(e){try{return rc(e)}catch(e){return Qa}}(e.slice(5,-1));return t===Qa?"":t}var ic=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],ac=["dx","dy","angle","className","breakAll"];function cc(){return cc=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cc.apply(this,arguments)}function lc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function uc(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return sc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sc(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function sc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var fc=/[ \f\n\r\t\v\u2028\u2029]+/,pc=function(e){var t=e.children,n=e.breakAll,r=e.style;try{var o=[];return bt()(t)||(o=n?t.toString().split(""):t.toString().split(fc)),{wordsWithComputedWidth:o.map(function(e){return{word:e,width:za(e,r).width}}),spaceWidth:n?0:za("Â ",r).width}}catch(e){return null}},dc=function(e){return[{words:bt()(e)?[]:e.toString().split(fc)}]},yc=function(e){var t=e.width,n=e.scaleToFit,r=e.children,o=e.style,i=e.breakAll,a=e.maxLines;if((t||n)&&!nr.isSsr){var c=pc({breakAll:i,children:r,style:o});return c?function(e,t,n,r,o){var i=e.maxLines,a=e.children,c=e.style,l=e.breakAll,u=xt(i),s=a,f=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(function(e,t){var i=t.word,a=t.width,c=e[e.length-1];if(c&&(null==r||o||c.width+a+n<Number(r)))c.words.push(i),c.width+=a+n;else{var l={words:[i],width:a};e.push(l)}return e},[])},p=f(t);if(!u)return p;for(var d,y=function(e){var t=s.slice(0,e),n=pc({breakAll:l,style:c,children:t+"â€¦"}).wordsWithComputedWidth,o=f(n),a=o.length>i||function(e){return e.reduce(function(e,t){return e.width>t.width?e:t})}(o).width>Number(r);return[a,o]},h=0,m=s.length-1,v=0;h<=m&&v<=s.length-1;){var b=Math.floor((h+m)/2),g=uc(y(b-1),2),w=g[0],x=g[1],O=uc(y(b),1)[0];if(w||O||(h=b+1),w&&O&&(m=b-1),!w&&O){d=x;break}v++}return d||p}({breakAll:i,children:r,maxLines:a,style:o},c.wordsWithComputedWidth,c.spaceWidth,t,n):dc(r)}return dc(r)},hc="#808080",mc=function(e){var t=e.x,n=void 0===t?0:t,r=e.y,o=void 0===r?0:r,i=e.lineHeight,a=void 0===i?"1em":i,c=e.capHeight,l=void 0===c?"0.71em":c,u=e.scaleToFit,s=void 0!==u&&u,f=e.textAnchor,p=void 0===f?"start":f,d=e.verticalAnchor,m=void 0===d?"end":d,v=e.fill,b=void 0===v?hc:v,g=lc(e,ic),w=(0,y.useMemo)(function(){return yc({breakAll:g.breakAll,children:g.children,maxLines:g.maxLines,scaleToFit:s,style:g.style,width:g.width})},[g.breakAll,g.children,g.maxLines,s,g.style,g.width]),x=g.dx,O=g.dy,k=g.angle,E=g.className,S=g.breakAll,j=lc(g,ac);if(!Ot(n)||!Ot(o))return null;var P,_=n+(xt(x)?x:0),A=o+(xt(O)?O:0);switch(m){case"start":P=oc("calc(".concat(l,")"));break;case"middle":P=oc("calc(".concat((w.length-1)/2," * -").concat(a," + (").concat(l," / 2))"));break;default:P=oc("calc(".concat(w.length-1," * -").concat(a,")"))}var T=[];if(s){var C=w[0].width,N=g.width;T.push("scale(".concat((xt(N)?N/C:1)/C,")"))}return k&&T.push("rotate(".concat(k,", ").concat(_,", ").concat(A,")")),T.length&&(j.transform=T.join(" ")),h().createElement("text",cc({},on(j,!0),{x:_,y:A,className:at("recharts-text",E),textAnchor:p,fill:b.includes("url")?hc:b}),w.map(function(e,t){var n=e.words.join(S?"":" ");return h().createElement("tspan",{x:_,dy:0===t?P:a,key:"".concat(n,"-").concat(t)},n)}))};const vc=Math.sqrt(50),bc=Math.sqrt(10),gc=Math.sqrt(2);function wc(e,t,n){const r=(t-e)/Math.max(0,n),o=Math.floor(Math.log10(r)),i=r/Math.pow(10,o),a=i>=vc?10:i>=bc?5:i>=gc?2:1;let c,l,u;return o<0?(u=Math.pow(10,-o)/a,c=Math.round(e*u),l=Math.round(t*u),c/u<e&&++c,l/u>t&&--l,u=-u):(u=Math.pow(10,o)*a,c=Math.round(e/u),l=Math.round(t/u),c*u<e&&++c,l*u>t&&--l),l<c&&.5<=n&&n<2?wc(e,t,2*n):[c,l,u]}function xc(e,t,n){if(!((n=+n)>0))return[];if((e=+e)===(t=+t))return[e];const r=t<e,[o,i,a]=r?wc(t,e,n):wc(e,t,n);if(!(i>=o))return[];const c=i-o+1,l=new Array(c);if(r)if(a<0)for(let e=0;e<c;++e)l[e]=(i-e)/-a;else for(let e=0;e<c;++e)l[e]=(i-e)*a;else if(a<0)for(let e=0;e<c;++e)l[e]=(o+e)/-a;else for(let e=0;e<c;++e)l[e]=(o+e)*a;return l}function Oc(e,t,n){return wc(e=+e,t=+t,n=+n)[2]}function kc(e,t,n){n=+n;const r=(t=+t)<(e=+e),o=r?Oc(t,e,n):Oc(e,t,n);return(r?-1:1)*(o<0?1/-o:o)}function Ec(e,t){return null==e||null==t?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Sc(e,t){return null==e||null==t?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function jc(e){let t,n,r;function o(e,r,o=0,i=e.length){if(o<i){if(0!==t(r,r))return i;do{const t=o+i>>>1;n(e[t],r)<0?o=t+1:i=t}while(o<i)}return o}return 2!==e.length?(t=Ec,n=(t,n)=>Ec(e(t),n),r=(t,n)=>e(t)-n):(t=e===Ec||e===Sc?e:Pc,n=e,r=e),{left:o,center:function(e,t,n=0,i=e.length){const a=o(e,t,n,i-1);return a>n&&r(e[a-1],t)>-r(e[a],t)?a-1:a},right:function(e,r,o=0,i=e.length){if(o<i){if(0!==t(r,r))return i;do{const t=o+i>>>1;n(e[t],r)<=0?o=t+1:i=t}while(o<i)}return o}}}function Pc(){return 0}function _c(e){return null===e?NaN:+e}const Ac=jc(Ec),Tc=Ac.right,Cc=(Ac.left,jc(_c).center,Tc);function Nc(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Mc(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Dc(){}n.dn(Nc);var Ic=.7,Rc=1/Ic,Lc="\\s*([+-]?\\d+)\\s*",Bc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Fc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Uc=/^#([0-9a-f]{3,8})$/,zc=new RegExp("^rgb\\("+[Lc,Lc,Lc]+"\\)$"),qc=new RegExp("^rgb\\("+[Fc,Fc,Fc]+"\\)$"),Wc=new RegExp("^rgba\\("+[Lc,Lc,Lc,Bc]+"\\)$"),Kc=new RegExp("^rgba\\("+[Fc,Fc,Fc,Bc]+"\\)$"),$c=new RegExp("^hsl\\("+[Bc,Fc,Fc]+"\\)$"),Hc=new RegExp("^hsla\\("+[Bc,Fc,Fc,Bc]+"\\)$"),Vc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Gc(){return this.rgb().formatHex()}function Yc(){return this.rgb().formatRgb()}function Xc(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=Uc.exec(e))?(n=t[1].length,t=parseInt(t[1],16),6===n?Zc(t):3===n?new el(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===n?Jc(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===n?Jc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=zc.exec(e))?new el(t[1],t[2],t[3],1):(t=qc.exec(e))?new el(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Wc.exec(e))?Jc(t[1],t[2],t[3],t[4]):(t=Kc.exec(e))?Jc(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=$c.exec(e))?ol(t[1],t[2]/100,t[3]/100,1):(t=Hc.exec(e))?ol(t[1],t[2]/100,t[3]/100,t[4]):Vc.hasOwnProperty(e)?Zc(Vc[e]):"transparent"===e?new el(NaN,NaN,NaN,0):null}function Zc(e){return new el(e>>16&255,e>>8&255,255&e,1)}function Jc(e,t,n,r){return r<=0&&(e=t=n=NaN),new el(e,t,n,r)}function Qc(e,t,n,r){return 1===arguments.length?((o=e)instanceof Dc||(o=Xc(o)),o?new el((o=o.rgb()).r,o.g,o.b,o.opacity):new el):new el(e,t,n,null==r?1:r);var o}function el(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function tl(){return"#"+rl(this.r)+rl(this.g)+rl(this.b)}function nl(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function rl(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function ol(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new al(e,t,n,r)}function il(e){if(e instanceof al)return new al(e.h,e.s,e.l,e.opacity);if(e instanceof Dc||(e=Xc(e)),!e)return new al;if(e instanceof al)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,o=Math.min(t,n,r),i=Math.max(t,n,r),a=NaN,c=i-o,l=(i+o)/2;return c?(a=t===i?(n-r)/c+6*(n<r):n===i?(r-t)/c+2:(t-n)/c+4,c/=l<.5?i+o:2-i-o,a*=60):c=l>0&&l<1?0:a,new al(a,c,l,e.opacity)}function al(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function cl(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}function ll(e,t,n,r,o){var i=e*e,a=i*e;return((1-3*e+3*i-a)*t+(4-6*i+3*a)*n+(1+3*e+3*i-3*a)*r+a*o)/6}function ul(e){var t=e.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[r],i=e[r+1],a=r>0?e[r-1]:2*o-i,c=r<t-1?e[r+2]:2*i-o;return ll((n-r/t)*t,a,o,i,c)}}function sl(e){var t=e.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*t),o=e[(r+t-1)%t],i=e[r%t],a=e[(r+1)%t],c=e[(r+2)%t];return ll((n-r/t)*t,o,i,a,c)}}Nc(Dc,Xc,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:Gc,formatHex:Gc,formatHsl:function(){return il(this).formatHsl()},formatRgb:Yc,toString:Yc}),Nc(el,Qc,Mc(Dc,{brighter:function(e){return e=null==e?Rc:Math.pow(Rc,e),new el(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?Ic:Math.pow(Ic,e),new el(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:tl,formatHex:tl,formatRgb:nl,toString:nl})),Nc(al,function(e,t,n,r){return 1===arguments.length?il(e):new al(e,t,n,null==r?1:r)},Mc(Dc,{brighter:function(e){return e=null==e?Rc:Math.pow(Rc,e),new al(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?Ic:Math.pow(Ic,e),new al(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,o=2*n-r;return new el(cl(e>=240?e-240:e+120,o,r),cl(e,o,r),cl(e<120?e+240:e-120,o,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}})),n.dn(ul),n.dn(sl);const fl=e=>()=>e;function pl(e,t){return function(n){return e+n*t}}function dl(e){return 1===(e=+e)?yl:function(t,n){return n-t?function(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):fl(isNaN(t)?n:t)}}function yl(e,t){var n=t-e;return n?pl(e,n):fl(isNaN(e)?t:e)}n.dn(fl);const hl=function e(t){var n=dl(t);function r(e,t){var r=n((e=Qc(e)).r,(t=Qc(t)).r),o=n(e.g,t.g),i=n(e.b,t.b),a=yl(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=o(t),e.b=i(t),e.opacity=a(t),e+""}}return r.gamma=e,r}(1);function ml(e){return function(t){var n,r,o=t.length,i=new Array(o),a=new Array(o),c=new Array(o);for(n=0;n<o;++n)r=Qc(t[n]),i[n]=r.r||0,a[n]=r.g||0,c[n]=r.b||0;return i=e(i),a=e(a),c=e(c),r.opacity=1,function(e){return r.r=i(e),r.g=a(e),r.b=c(e),r+""}}}var vl,bl;ml(ul),ml(sl);function gl(e,t){var n,r=t?t.length:0,o=e?Math.min(r,e.length):0,i=new Array(o),a=new Array(r);for(n=0;n<o;++n)i[n]=Pl(e[n],t[n]);for(;n<r;++n)a[n]=t[n];return function(e){for(n=0;n<o;++n)a[n]=i[n](e);return a}}function wl(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function xl(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Ol(e,t){var n,r={},o={};for(n in null!==e&&"object"==typeof e||(e={}),null!==t&&"object"==typeof t||(t={}),t)n in e?r[n]=Pl(e[n],t[n]):o[n]=t[n];return function(e){for(n in r)o[n]=r[n](e);return o}}n.dn(function(e,t){return(vl(t)?bl:gl)(e,t)}),n.dn(wl),n.dn(xl),n.dn(Ol),n.dn(Sl);var kl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,El=new RegExp(kl.source,"g");function Sl(e,t){var n,r,o,i=kl.lastIndex=El.lastIndex=0,a=-1,c=[],l=[];for(e+="",t+="";(n=kl.exec(e))&&(r=El.exec(t));)(o=r.index)>i&&(o=t.slice(i,o),c[a]?c[a]+=o:c[++a]=o),(n=n[0])===(r=r[0])?c[a]?c[a]+=r:c[++a]=r:(c[++a]=null,l.push({i:a,x:xl(n,r)})),i=El.lastIndex;return i<t.length&&(o=t.slice(i),c[a]?c[a]+=o:c[++a]=o),c.length<2?l[0]?function(e){return function(t){return e(t)+""}}(l[0].x):function(e){return function(){return e}}(t):(t=l.length,function(e){for(var n,r=0;r<t;++r)c[(n=l[r]).i]=n.x(e);return c.join("")})}function jl(e,t){t||(t=[]);var n,r=e?Math.min(t.length,e.length):0,o=t.slice();return function(i){for(n=0;n<r;++n)o[n]=e[n]*(1-i)+t[n]*i;return o}}function Pl(e,t){var n,r,o=typeof t;return null==t||"boolean"===o?fl(t):("number"===o?xl:"string"===o?(n=Xc(t))?(t=n,hl):Sl:t instanceof Xc?hl:t instanceof Date?wl:(r=t,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(t)?gl:"function"!=typeof t.valueOf&&"function"!=typeof t.toString||isNaN(t)?Ol:xl:jl))(e,t)}function _l(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function Al(e){return+e}n.dn(jl),n.dn(Pl),n.dn(_l);var Tl=[0,1];function Cl(e){return e}function Nl(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:(n=isNaN(t)?NaN:.5,function(){return n});var n}function Ml(e,t,n){var r=e[0],o=e[1],i=t[0],a=t[1];return o<r?(r=Nl(o,r),i=n(a,i)):(r=Nl(r,o),i=n(i,a)),function(e){return i(r(e))}}function Dl(e,t,n){var r=Math.min(e.length,t.length)-1,o=new Array(r),i=new Array(r),a=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++a<r;)o[a]=Nl(e[a],e[a+1]),i[a]=n(t[a],t[a+1]);return function(t){var n=Cc(e,t,1,r)-1;return i[n](o[n](t))}}function Il(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function Rl(){var e,t,n,r,o,i,a=Tl,c=Tl,l=Pl,u=Cl;function s(){var e=Math.min(a.length,c.length);return u!==Cl&&(u=function(e,t){var n;return e>t&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}(a[0],a[e-1])),r=e>2?Dl:Ml,o=i=null,f}function f(t){return null==t||isNaN(t=+t)?n:(o||(o=r(a.map(e),c,l)))(e(u(t)))}return f.invert=function(n){return u(t((i||(i=r(c,a.map(e),xl)))(n)))},f.domain=function(e){return arguments.length?(a=Array.from(e,Al),s()):a.slice()},f.range=function(e){return arguments.length?(c=Array.from(e),s()):c.slice()},f.rangeRound=function(e){return c=Array.from(e),l=_l,s()},f.clamp=function(e){return arguments.length?(u=!!e||Cl,s()):u!==Cl},f.interpolate=function(e){return arguments.length?(l=e,s()):l},f.unknown=function(e){return arguments.length?(n=e,f):n},function(n,r){return e=n,t=r,s()}}function Ll(){return Rl()(Cl,Cl)}var Bl,Fl=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ul(e){if(!(t=Fl.exec(e)))throw new Error("invalid format: "+e);var t;return new zl({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function zl(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function ql(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Wl(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function Kl(e){return(e=Wl(Math.abs(e)))?e[1]:NaN}function $l(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Kl(t)/3)))-Kl(Math.abs(e)))}function Hl(e,t){return function(n,r){for(var o=n.length,i=[],a=0,c=e[0],l=0;o>0&&c>0&&(l+c+1>r&&(c=Math.max(1,r-l)),i.push(n.substring(o-=c,o+c)),!((l+=c+1)>r));)c=e[a=(a+1)%e.length];return i.reverse().join(t)}}function Vl(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}function Gl(e){e:for(var t,n=e.length,r=1,o=-1;r<n;++r)switch(e[r]){case".":o=t=r;break;case"0":0===o&&(o=r),t=r;break;default:if(!+e[r])break e;o>0&&(o=0)}return o>0?e.slice(0,o)+e.slice(t+1):e}function Yl(e,t){var n=Wl(e,t);if(!n)return e+"";var r=n[0],o=n[1],i=o-(Bl=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,a=r.length;return i===a?r:i>a?r+new Array(i-a+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+Wl(e,Math.max(0,t+i-1))[0]}function Xl(e,t){var n=Wl(e,t);if(!n)return e+"";var r=n[0],o=n[1];return o<0?"0."+new Array(-o).join("0")+r:r.length>o+1?r.slice(0,o+1)+"."+r.slice(o+1):r+new Array(o-r.length+2).join("0")}Ul.prototype=zl.prototype,zl.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type},n.dn(ql),n.dn(Kl),n.dn($l),n.dn(Hl),n.dn(Vl),n.dn(Gl),n.dn(Yl),n.dn(Xl);const Zl={"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:ql,e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return Xl(100*e,t)},r:Xl,s:Yl,X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}};function Jl(e){return e}n.dn(Jl),n.dn(ou);var Ql,eu,tu,nu=Array.prototype.map,ru=["y","z","a","f","p","n","Âµ","m","","k","M","G","T","P","E","Z","Y"];function ou(e){var t=void 0===e.grouping||void 0===e.thousands?Jl:Hl(nu.call(e.grouping,Number),e.thousands+""),n=void 0===e.currency?"":e.currency[0]+"",r=void 0===e.currency?"":e.currency[1]+"",o=void 0===e.decimal?".":e.decimal+"",i=void 0===e.numerals?Jl:Vl(nu.call(e.numerals,String)),a=void 0===e.percent?"%":e.percent+"",c=void 0===e.minus?"-":e.minus+"",l=void 0===e.nan?"NaN":e.nan+"";function u(e){var u=(e=Ul(e)).fill,s=e.align,f=e.sign,p=e.symbol,d=e.zero,y=e.width,h=e.comma,m=e.precision,v=e.trim,b=e.type;"n"===b?(h=!0,b="g"):Zl[b]||(void 0===m&&(m=12),v=!0,b="g"),(d||"0"===u&&"="===s)&&(d=!0,u="0",s="=");var g="$"===p?n:"#"===p&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",w="$"===p?r:/[%p]/.test(b)?a:"",x=Zl[b],O=/[defgprs%]/.test(b);function k(e){var n,r,a,p=g,k=w;if("c"===b)k=x(e)+k,e="";else{var E=(e=+e)<0||1/e<0;if(e=isNaN(e)?l:x(Math.abs(e),m),v&&(e=Gl(e)),E&&0===+e&&"+"!==f&&(E=!1),p=(E?"("===f?f:c:"-"===f||"("===f?"":f)+p,k=("s"===b?ru[8+Bl/3]:"")+k+(E&&"("===f?")":""),O)for(n=-1,r=e.length;++n<r;)if(48>(a=e.charCodeAt(n))||a>57){k=(46===a?o+e.slice(n+1):e.slice(n))+k,e=e.slice(0,n);break}}h&&!d&&(e=t(e,1/0));var S=p.length+e.length+k.length,j=S<y?new Array(y-S+1).join(u):"";switch(h&&d&&(e=t(j+e,j.length?y-k.length:1/0),j=""),s){case"<":e=p+e+k+j;break;case"=":e=p+j+e+k;break;case"^":e=j.slice(0,S=j.length>>1)+p+e+k+j.slice(S);break;default:e=j+p+e+k}return i(e)}return m=void 0===m?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return e+""},k}return{format:u,formatPrefix:function(e,t){var n=u(((e=Ul(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Kl(t)/3))),o=Math.pow(10,-r),i=ru[8+r/3];return function(e){return n(o*e)+i}}}}function iu(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Kl(t)-Kl(e))+1}function au(e){return Math.max(0,-Kl(Math.abs(e)))}function cu(e,t,n,r){var o,i=kc(e,t,n);switch((r=Ul(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(e),Math.abs(t));return null!=r.precision||isNaN(o=$l(i,a))||(r.precision=o),tu(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=iu(i,Math.max(Math.abs(e),Math.abs(t))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=au(i))||(r.precision=o-2*("%"===r.type))}return eu(r)}function lu(e){var t=e.domain;return e.ticks=function(e){var n=t();return xc(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){var r=t();return cu(r[0],r[r.length-1],null==e?10:e,n)},e.nice=function(n){null==n&&(n=10);var r,o,i=t(),a=0,c=i.length-1,l=i[a],u=i[c],s=10;for(u<l&&(o=l,l=u,u=o,o=a,a=c,c=o);s-- >0;){if((o=Oc(l,u,n))===r)return i[a]=l,i[c]=u,t(i);if(o>0)l=Math.floor(l/o)*o,u=Math.ceil(u/o)*o;else{if(!(o<0))break;l=Math.ceil(l*o)/o,u=Math.floor(u*o)/o}r=o}return e},e}function uu(){var e=Ll();return e.copy=function(){return Il(e,uu())},Oa.apply(e,arguments),lu(e)}function su(e){var t;function n(e){return null==e||isNaN(e=+e)?t:e}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=Array.from(t,Al),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return su(e).unknown(t)},e=arguments.length?Array.from(e,Al):[0,1],lu(n)}function fu(e,t){var n,r=0,o=(e=e.slice()).length-1,i=e[r],a=e[o];return a<i&&(n=r,r=o,o=n,n=i,i=a,a=n),e[r]=t.floor(i),e[o]=t.ceil(a),e}function pu(e){return Math.log(e)}function du(e){return Math.exp(e)}function yu(e){return-Math.log(-e)}function hu(e){return-Math.exp(-e)}function mu(e){return isFinite(e)?+("1e"+e):e<0?0:e}function vu(e){return(t,n)=>-e(-t,n)}function bu(e){const t=e(pu,du),n=t.domain;let r,o,i=10;function a(){return r=function(e){return e===Math.E?Math.log:10===e&&Math.log10||2===e&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}(i),o=function(e){return 10===e?mu:e===Math.E?Math.exp:t=>Math.pow(e,t)}(i),n()[0]<0?(r=vu(r),o=vu(o),e(yu,hu)):e(pu,du),t}return t.base=function(e){return arguments.length?(i=+e,a()):i},t.domain=function(e){return arguments.length?(n(e),a()):n()},t.ticks=e=>{const t=n();let a=t[0],c=t[t.length-1];const l=c<a;l&&([a,c]=[c,a]);let u,s,f=r(a),p=r(c);const d=null==e?10:+e;let y=[];if(!(i%1)&&p-f<d){if(f=Math.floor(f),p=Math.ceil(p),a>0){for(;f<=p;++f)for(u=1;u<i;++u)if(s=f<0?u/o(-f):u*o(f),!(s<a)){if(s>c)break;y.push(s)}}else for(;f<=p;++f)for(u=i-1;u>=1;--u)if(s=f>0?u/o(-f):u*o(f),!(s<a)){if(s>c)break;y.push(s)}2*y.length<d&&(y=xc(a,c,d))}else y=xc(f,p,Math.min(p-f,d)).map(o);return l?y.reverse():y},t.tickFormat=(e,n)=>{if(null==e&&(e=10),null==n&&(n=10===i?"s":","),"function"!=typeof n&&(i%1||null!=(n=Ul(n)).precision||(n.trim=!0),n=eu(n)),e===1/0)return n;const a=Math.max(1,i*e/t.ticks().length);return e=>{let t=e/o(Math.round(r(e)));return t*i<i-.5&&(t*=i),t<=a?n(e):""}},t.nice=()=>n(fu(n(),{floor:e=>o(Math.floor(r(e))),ceil:e=>o(Math.ceil(r(e)))})),t}function gu(){const e=bu(Rl()).domain([1,10]);return e.copy=()=>Il(e,gu()).base(e.base()),Oa.apply(e,arguments),e}function wu(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function xu(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Ou(e){var t=1,n=e(wu(t),xu(t));return n.constant=function(n){return arguments.length?e(wu(t=+n),xu(t)):t},lu(n)}function ku(){var e=Ou(Rl());return e.copy=function(){return Il(e,ku()).constant(e.constant())},Oa.apply(e,arguments)}function Eu(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Su(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function ju(e){return e<0?-e*e:e*e}function Pu(e){var t=e(Cl,Cl),n=1;return t.exponent=function(t){return arguments.length?1===(n=+t)?e(Cl,Cl):.5===n?e(Su,ju):e(Eu(n),Eu(1/n)):n},lu(t)}function _u(){var e=Pu(Rl());return e.copy=function(){return Il(e,_u()).exponent(e.exponent())},Oa.apply(e,arguments),e}function Au(){return _u.apply(null,arguments).exponent(.5)}function Tu(e){return Math.sign(e)*e*e}function Cu(){var e,t=Ll(),n=[0,1],r=!1;function o(n){var o=function(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}(t(n));return isNaN(o)?e:r?Math.round(o):o}return o.invert=function(e){return t.invert(Tu(e))},o.domain=function(e){return arguments.length?(t.domain(e),o):t.domain()},o.range=function(e){return arguments.length?(t.range((n=Array.from(e,Al)).map(Tu)),o):n.slice()},o.rangeRound=function(e){return o.range(e).round(!0)},o.round=function(e){return arguments.length?(r=!!e,o):r},o.clamp=function(e){return arguments.length?(t.clamp(e),o):t.clamp()},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return Cu(t.domain(),n).round(r).clamp(t.clamp()).unknown(e)},Oa.apply(o,arguments),lu(o)}function Nu(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n<t||void 0===n&&t>=t)&&(n=t);else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&(n<o||void 0===n&&o>=o)&&(n=o)}return n}function Mu(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}function Du(e=Ec){if(e===Ec)return Iu;if("function"!=typeof e)throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||0===r?r:(0===e(n,n))-(0===e(t,t))}}function Iu(e,t){return(null==e||!(e>=e))-(null==t||!(t>=t))||(e<t?-1:e>t?1:0)}function Ru(e,t,n=0,r=1/0,o){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(o=void 0===o?Iu:Du(o);r>n;){if(r-n>600){const i=r-n+1,a=t-n+1,c=Math.log(i),l=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*l*(i-l)/i)*(a-i/2<0?-1:1);Ru(e,t,Math.max(n,Math.floor(t-a*l/i+u)),Math.min(r,Math.floor(t+(i-a)*l/i+u)),o)}const i=e[t];let a=n,c=r;for(Lu(e,n,t),o(e[r],i)>0&&Lu(e,n,r);a<c;){for(Lu(e,a,c),++a,--c;o(e[a],i)<0;)++a;for(;o(e[c],i)>0;)--c}0===o(e[n],i)?Lu(e,n,c):(++c,Lu(e,c,r)),c<=t&&(n=c+1),t<=c&&(r=c-1)}return e}function Lu(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function Bu(e,t,n){if(e=Float64Array.from(function*(e,t){if(void 0===t)for(let t of e)null!=t&&(t=+t)>=t&&(yield t);else{let n=-1;for(let r of e)null!=(r=t(r,++n,e))&&(r=+r)>=r&&(yield r)}}(e,n)),(r=e.length)&&!isNaN(t=+t)){if(t<=0||r<2)return Mu(e);if(t>=1)return Nu(e);var r,o=(r-1)*t,i=Math.floor(o),a=Nu(Ru(e,i).subarray(0,i+1));return a+(Mu(e.subarray(i+1))-a)*(o-i)}}function Fu(e,t,n=_c){if((r=e.length)&&!isNaN(t=+t)){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,o=(r-1)*t,i=Math.floor(o),a=+n(e[i],i,e);return a+(+n(e[i+1],i+1,e)-a)*(o-i)}}function Uu(){var e,t=[],n=[],r=[];function o(){var e=0,o=Math.max(1,n.length);for(r=new Array(o-1);++e<o;)r[e-1]=Fu(t,e/o);return i}function i(t){return null==t||isNaN(t=+t)?e:n[Cc(r,t)]}return i.invertExtent=function(e){var o=n.indexOf(e);return o<0?[NaN,NaN]:[o>0?r[o-1]:t[0],o<r.length?r[o]:t[t.length-1]]},i.domain=function(e){if(!arguments.length)return t.slice();t=[];for(let n of e)null==n||isNaN(n=+n)||t.push(n);return t.sort(Ec),o()},i.range=function(e){return arguments.length?(n=Array.from(e),o()):n.slice()},i.unknown=function(t){return arguments.length?(e=t,i):e},i.quantiles=function(){return r.slice()},i.copy=function(){return Uu().domain(t).range(n).unknown(e)},Oa.apply(i,arguments)}function zu(){var e,t=0,n=1,r=1,o=[.5],i=[0,1];function a(t){return null!=t&&t<=t?i[Cc(o,t,0,r)]:e}function c(){var e=-1;for(o=new Array(r);++e<r;)o[e]=((e+1)*n-(e-r)*t)/(r+1);return a}return a.domain=function(e){return arguments.length?([t,n]=e,t=+t,n=+n,c()):[t,n]},a.range=function(e){return arguments.length?(r=(i=Array.from(e)).length-1,c()):i.slice()},a.invertExtent=function(e){var a=i.indexOf(e);return a<0?[NaN,NaN]:a<1?[t,o[0]]:a>=r?[o[r-1],n]:[o[a-1],o[a]]},a.unknown=function(t){return arguments.length?(e=t,a):a},a.thresholds=function(){return o.slice()},a.copy=function(){return zu().domain([t,n]).range(i).unknown(e)},Oa.apply(lu(a),arguments)}function qu(){var e,t=[.5],n=[0,1],r=1;function o(o){return null!=o&&o<=o?n[Cc(t,o,0,r)]:e}return o.domain=function(e){return arguments.length?(t=Array.from(e),r=Math.min(t.length,n.length-1),o):t.slice()},o.range=function(e){return arguments.length?(n=Array.from(e),r=Math.min(t.length,n.length-1),o):n.slice()},o.invertExtent=function(e){var r=n.indexOf(e);return[t[r-1],t[r]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return qu().domain(t).range(n).unknown(e)},Oa.apply(o,arguments)}Ql=ou({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),eu=Ql.format,tu=Ql.formatPrefix,n.dn(iu),n.dn(au);const Wu=1e3,Ku=6e4,$u=36e5,Hu=864e5,Vu=6048e5,Gu=2592e6,Yu=31536e6,Xu=new Date,Zu=new Date;function Ju(e,t,n,r){function o(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return o.floor=t=>(e(t=new Date(+t)),t),o.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),o.round=e=>{const t=o(e),n=o.ceil(e);return e-t<n-e?t:n},o.offset=(e,n)=>(t(e=new Date(+e),null==n?1:Math.floor(n)),e),o.range=(n,r,i)=>{const a=[];if(n=o.ceil(n),i=null==i?1:Math.floor(i),!(n<r&&i>0))return a;let c;do{a.push(c=new Date(+n)),t(n,i),e(n)}while(c<n&&n<r);return a},o.filter=n=>Ju(t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},(e,r)=>{if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}),n&&(o.count=(t,r)=>(Xu.setTime(+t),Zu.setTime(+r),e(Xu),e(Zu),Math.floor(n(Xu,Zu))),o.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?o.filter(r?t=>r(t)%e===0:t=>o.count(0,t)%e===0):o:null)),o}const Qu=Ju(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Qu.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?Ju(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Qu:null);Qu.range;const es=Ju(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Wu)},(e,t)=>(t-e)/Wu,e=>e.getUTCSeconds()),ts=(es.range,Ju(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Wu)},(e,t)=>{e.setTime(+e+t*Ku)},(e,t)=>(t-e)/Ku,e=>e.getMinutes())),ns=(ts.range,Ju(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Ku)},(e,t)=>(t-e)/Ku,e=>e.getUTCMinutes())),rs=(ns.range,Ju(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Wu-e.getMinutes()*Ku)},(e,t)=>{e.setTime(+e+t*$u)},(e,t)=>(t-e)/$u,e=>e.getHours())),os=(rs.range,Ju(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*$u)},(e,t)=>(t-e)/$u,e=>e.getUTCHours())),is=(os.range,Ju(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ku)/Hu,e=>e.getDate()-1)),as=(is.range,Ju(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Hu,e=>e.getUTCDate()-1)),cs=(as.range,Ju(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Hu,e=>Math.floor(e/Hu)));cs.range;function ls(e){return Ju(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(e,t)=>{e.setDate(e.getDate()+7*t)},(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ku)/Vu)}const us=ls(0),ss=ls(1),fs=ls(2),ps=ls(3),ds=ls(4),ys=ls(5),hs=ls(6);us.range,ss.range,fs.range,ps.range,ds.range,ys.range,hs.range;function ms(e){return Ju(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+7*t)},(e,t)=>(t-e)/Vu)}const vs=ms(0),bs=ms(1),gs=ms(2),ws=ms(3),xs=ms(4),Os=ms(5),ks=ms(6),Es=(vs.range,bs.range,gs.range,ws.range,xs.range,Os.range,ks.range,Ju(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear()),e=>e.getMonth())),Ss=(Es.range,Ju(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear()),e=>e.getUTCMonth())),js=(Ss.range,Ju(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear()));js.every=e=>isFinite(e=Math.floor(e))&&e>0?Ju(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)}):null;js.range;const Ps=Ju(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Ps.every=e=>isFinite(e=Math.floor(e))&&e>0?Ju(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null;Ps.range;function _s(e,t,n,r,o,i){const a=[[es,1,Wu],[es,5,5e3],[es,15,15e3],[es,30,3e4],[i,1,Ku],[i,5,3e5],[i,15,9e5],[i,30,18e5],[o,1,$u],[o,3,108e5],[o,6,216e5],[o,12,432e5],[r,1,Hu],[r,2,1728e5],[n,1,Vu],[t,1,Gu],[t,3,7776e6],[e,1,Yu]];function c(t,n,r){const o=Math.abs(n-t)/r,i=jc(([,,e])=>e).right(a,o);if(i===a.length)return e.every(kc(t/Yu,n/Yu,r));if(0===i)return Qu.every(Math.max(kc(t,n,r),1));const[c,l]=a[o/a[i-1][2]<a[i][2]/o?i-1:i];return c.every(l)}return[function(e,t,n){const r=t<e;r&&([e,t]=[t,e]);const o=n&&"function"==typeof n.range?n:c(e,t,n),i=o?o.range(e,+t+1):[];return r?i.reverse():i},c]}const[As,Ts]=_s(Ps,Ss,vs,cs,os,ns),[Cs,Ns]=_s(js,Es,us,is,rs,ts);var Ms=new Date,Ds=new Date;function Is(e,t,n,r){function o(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return o.floor=function(t){return e(t=new Date(+t)),t},o.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},o.round=function(e){var t=o(e),n=o.ceil(e);return e-t<n-e?t:n},o.offset=function(e,n){return t(e=new Date(+e),null==n?1:Math.floor(n)),e},o.range=function(n,r,i){var a,c=[];if(n=o.ceil(n),i=null==i?1:Math.floor(i),!(n<r&&i>0))return c;do{c.push(a=new Date(+n)),t(n,i),e(n)}while(a<n&&n<r);return c},o.filter=function(n){return Is(function(t){if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(o.count=function(t,r){return Ms.setTime(+t),Ds.setTime(+r),e(Ms),e(Ds),Math.floor(n(Ms,Ds))},o.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?o.filter(r?function(t){return r(t)%e===0}:function(t){return o.count(0,t)%e===0}):o:null}),o}var Rs=864e5,Ls=6048e5;function Bs(e){return Is(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/Ls})}var Fs=Bs(0),Us=Bs(1),zs=Bs(2),qs=Bs(3),Ws=Bs(4),Ks=Bs(5),$s=Bs(6),Hs=(Fs.range,Us.range,zs.range,qs.range,Ws.range,Ks.range,$s.range,Is(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/Rs},function(e){return e.getUTCDate()-1}));const Vs=Hs;Hs.range;function Gs(e){return Is(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/Ls})}var Ys=Gs(0),Xs=Gs(1),Zs=Gs(2),Js=Gs(3),Qs=Gs(4),ef=Gs(5),tf=Gs(6),nf=(Ys.range,Xs.range,Zs.range,Js.range,Qs.range,ef.range,tf.range,Is(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/Rs},function(e){return e.getDate()-1}));const rf=nf;nf.range;var of=Is(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()});of.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Is(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};const af=of;of.range;var cf=Is(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()});cf.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Is(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};const lf=cf;cf.range;function uf(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function sf(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function ff(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}var pf,df,yf,hf={"-":"",_:" ",0:"0"},mf=/^\s*\d+/,vf=/^%/,bf=/[\\^$*+?|[\]().{}]/g;function gf(e,t,n){var r=e<0?"-":"",o=(r?-e:e)+"",i=o.length;return r+(i<n?new Array(n-i+1).join(t)+o:o)}function wf(e){return e.replace(bf,"\\$&")}function xf(e){return new RegExp("^(?:"+e.map(wf).join("|")+")","i")}function Of(e){for(var t={},n=-1,r=e.length;++n<r;)t[e[n].toLowerCase()]=n;return t}function kf(e,t,n){var r=mf.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function Ef(e,t,n){var r=mf.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function Sf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function jf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function Pf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function _f(e,t,n){var r=mf.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function Af(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Tf(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Cf(e,t,n){var r=mf.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function Nf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function Mf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function Df(e,t,n){var r=mf.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function If(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function Rf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function Lf(e,t,n){var r=mf.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function Bf(e,t,n){var r=mf.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function Ff(e,t,n){var r=mf.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Uf(e,t,n){var r=vf.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function zf(e,t,n){var r=mf.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function qf(e,t,n){var r=mf.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function Wf(e,t){return gf(e.getDate(),t,2)}function Kf(e,t){return gf(e.getHours(),t,2)}function $f(e,t){return gf(e.getHours()%12||12,t,2)}function Hf(e,t){return gf(1+rf.count(af(e),e),t,3)}function Vf(e,t){return gf(e.getMilliseconds(),t,3)}function Gf(e,t){return Vf(e,t)+"000"}function Yf(e,t){return gf(e.getMonth()+1,t,2)}function Xf(e,t){return gf(e.getMinutes(),t,2)}function Zf(e,t){return gf(e.getSeconds(),t,2)}function Jf(e){var t=e.getDay();return 0===t?7:t}function Qf(e,t){return gf(Ys.count(af(e)-1,e),t,2)}function ep(e){var t=e.getDay();return t>=4||0===t?Qs(e):Qs.ceil(e)}function tp(e,t){return e=ep(e),gf(Qs.count(af(e),e)+(4===af(e).getDay()),t,2)}function np(e){return e.getDay()}function rp(e,t){return gf(Xs.count(af(e)-1,e),t,2)}function op(e,t){return gf(e.getFullYear()%100,t,2)}function ip(e,t){return gf((e=ep(e)).getFullYear()%100,t,2)}function ap(e,t){return gf(e.getFullYear()%1e4,t,4)}function cp(e,t){var n=e.getDay();return gf((e=n>=4||0===n?Qs(e):Qs.ceil(e)).getFullYear()%1e4,t,4)}function lp(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+gf(t/60|0,"0",2)+gf(t%60,"0",2)}function up(e,t){return gf(e.getUTCDate(),t,2)}function sp(e,t){return gf(e.getUTCHours(),t,2)}function fp(e,t){return gf(e.getUTCHours()%12||12,t,2)}function pp(e,t){return gf(1+Vs.count(lf(e),e),t,3)}function dp(e,t){return gf(e.getUTCMilliseconds(),t,3)}function yp(e,t){return dp(e,t)+"000"}function hp(e,t){return gf(e.getUTCMonth()+1,t,2)}function mp(e,t){return gf(e.getUTCMinutes(),t,2)}function vp(e,t){return gf(e.getUTCSeconds(),t,2)}function bp(e){var t=e.getUTCDay();return 0===t?7:t}function gp(e,t){return gf(Fs.count(lf(e)-1,e),t,2)}function xp(e){var t=e.getUTCDay();return t>=4||0===t?Ws(e):Ws.ceil(e)}function Op(e,t){return e=xp(e),gf(Ws.count(lf(e),e)+(4===lf(e).getUTCDay()),t,2)}function kp(e){return e.getUTCDay()}function Ep(e,t){return gf(Us.count(lf(e)-1,e),t,2)}function Sp(e,t){return gf(e.getUTCFullYear()%100,t,2)}function jp(e,t){return gf((e=xp(e)).getUTCFullYear()%100,t,2)}function Pp(e,t){return gf(e.getUTCFullYear()%1e4,t,4)}function _p(e,t){var n=e.getUTCDay();return gf((e=n>=4||0===n?Ws(e):Ws.ceil(e)).getUTCFullYear()%1e4,t,4)}function Ap(){return"+0000"}function Tp(){return"%"}function Cp(e){return+e}function Np(e){return Math.floor(+e/1e3)}function Mp(e){return new Date(e)}function Dp(e){return e instanceof Date?+e:+new Date(+e)}function Ip(e,t,n,r,o,i,a,c,l,u){var s=Ll(),f=s.invert,p=s.domain,d=u(".%L"),y=u(":%S"),h=u("%I:%M"),m=u("%I %p"),v=u("%a %d"),b=u("%b %d"),g=u("%B"),w=u("%Y");function x(e){return(l(e)<e?d:c(e)<e?y:a(e)<e?h:i(e)<e?m:r(e)<e?o(e)<e?v:b:n(e)<e?g:w)(e)}return s.invert=function(e){return new Date(f(e))},s.domain=function(e){return arguments.length?p(Array.from(e,Dp)):p().map(Mp)},s.ticks=function(t){var n=p();return e(n[0],n[n.length-1],null==t?10:t)},s.tickFormat=function(e,t){return null==t?x:u(t)},s.nice=function(e){var n=p();return e&&"function"==typeof e.range||(e=t(n[0],n[n.length-1],null==e?10:e)),e?p(fu(n,e)):s},s.copy=function(){return Il(s,Ip(e,t,n,r,o,i,a,c,l,u))},s}function Rp(){return Oa.apply(Ip(Cs,Ns,js,Es,us,is,rs,ts,es,df).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Lp(){return Oa.apply(Ip(As,Ts,Ps,Ss,vs,as,os,ns,es,yf).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Bp(){var e,t,n,r,o,i=0,a=1,c=Cl,l=!1;function u(t){return null==t||isNaN(t=+t)?o:c(0===n?.5:(t=(r(t)-e)*n,l?Math.max(0,Math.min(1,t)):t))}function s(e){return function(t){var n,r;return arguments.length?([n,r]=t,c=e(n,r),u):[c(0),c(1)]}}return u.domain=function(o){return arguments.length?([i,a]=o,e=r(i=+i),t=r(a=+a),n=e===t?0:1/(t-e),u):[i,a]},u.clamp=function(e){return arguments.length?(l=!!e,u):l},u.interpolator=function(e){return arguments.length?(c=e,u):c},u.range=s(Pl),u.rangeRound=s(_l),u.unknown=function(e){return arguments.length?(o=e,u):o},function(o){return r=o,e=o(i),t=o(a),n=e===t?0:1/(t-e),u}}function Fp(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function Up(){var e=lu(Bp()(Cl));return e.copy=function(){return Fp(e,Up())},ka.apply(e,arguments)}function zp(){var e=bu(Bp()).domain([1,10]);return e.copy=function(){return Fp(e,zp()).base(e.base())},ka.apply(e,arguments)}function qp(){var e=Ou(Bp());return e.copy=function(){return Fp(e,qp()).constant(e.constant())},ka.apply(e,arguments)}function Wp(){var e=Pu(Bp());return e.copy=function(){return Fp(e,Wp()).exponent(e.exponent())},ka.apply(e,arguments)}function Kp(){return Wp.apply(null,arguments).exponent(.5)}function $p(){var e=[],t=Cl;function n(n){if(null!=n&&!isNaN(n=+n))return t((Cc(e,n,1)-1)/(e.length-1))}return n.domain=function(t){if(!arguments.length)return e.slice();e=[];for(let n of t)null==n||isNaN(n=+n)||e.push(n);return e.sort(Ec),n},n.interpolator=function(e){return arguments.length?(t=e,n):t},n.range=function(){return e.map((n,r)=>t(r/(e.length-1)))},n.quantiles=function(t){return Array.from({length:t+1},(n,r)=>Bu(e,r/t))},n.copy=function(){return $p(t).domain(e)},ka.apply(n,arguments)}function Hp(){var e,t,n,r,o,i,a,c=0,l=.5,u=1,s=1,f=Cl,p=!1;function d(e){return isNaN(e=+e)?a:(e=.5+((e=+i(e))-t)*(s*e<s*t?r:o),f(p?Math.max(0,Math.min(1,e)):e))}function y(e){return function(t){var n,r,o;return arguments.length?([n,r,o]=t,f=function(e,t){void 0===t&&(t=e,e=Pl);for(var n=0,r=t.length-1,o=t[0],i=new Array(r<0?0:r);n<r;)i[n]=e(o,o=t[++n]);return function(e){var t=Math.max(0,Math.min(r-1,Math.floor(e*=r)));return i[t](e-t)}}(e,[n,r,o]),d):[f(0),f(.5),f(1)]}}return d.domain=function(a){return arguments.length?([c,l,u]=a,e=i(c=+c),t=i(l=+l),n=i(u=+u),r=e===t?0:.5/(t-e),o=t===n?0:.5/(n-t),s=t<e?-1:1,d):[c,l,u]},d.clamp=function(e){return arguments.length?(p=!!e,d):p},d.interpolator=function(e){return arguments.length?(f=e,d):f},d.range=y(Pl),d.rangeRound=y(_l),d.unknown=function(e){return arguments.length?(a=e,d):a},function(a){return i=a,e=a(c),t=a(l),n=a(u),r=e===t?0:.5/(t-e),o=t===n?0:.5/(n-t),s=t<e?-1:1,d}}function Vp(){var e=lu(Hp()(Cl));return e.copy=function(){return Fp(e,Vp())},ka.apply(e,arguments)}function Gp(){var e=bu(Hp()).domain([.1,1,10]);return e.copy=function(){return Fp(e,Gp()).base(e.base())},ka.apply(e,arguments)}function Yp(){var e=Ou(Hp());return e.copy=function(){return Fp(e,Yp()).constant(e.constant())},ka.apply(e,arguments)}function Xp(){var e=Pu(Hp());return e.copy=function(){return Fp(e,Xp()).exponent(e.exponent())},ka.apply(e,arguments)}function Zp(){return Xp.apply(null,arguments).exponent(.5)}function Jp(e,t){if((o=e.length)>1)for(var n,r,o,i=1,a=e[t[0]],c=a.length;i<o;++i)for(r=a,a=e[t[i]],n=0;n<c;++n)a[n][1]+=a[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]}function Qp(e,t){if((r=e.length)>0){for(var n,r,o,i=0,a=e[0].length;i<a;++i){for(o=n=0;n<r;++n)o+=e[n][i][1]||0;if(o)for(n=0;n<r;++n)e[n][i][1]/=o}Jp(e,t)}}function ed(e,t){if((n=e.length)>0){for(var n,r=0,o=e[t[0]],i=o.length;r<i;++r){for(var a=0,c=0;a<n;++a)c+=e[a][r][1]||0;o[r][1]+=o[r][0]=-c/2}Jp(e,t)}}function td(e,t){if((o=e.length)>0&&(r=(n=e[t[0]]).length)>0){for(var n,r,o,i=0,a=1;a<r;++a){for(var c=0,l=0,u=0;c<o;++c){for(var s=e[t[c]],f=s[a][1]||0,p=(f-(s[a-1][1]||0))/2,d=0;d<c;++d){var y=e[t[d]];p+=(y[a][1]||0)-(y[a-1][1]||0)}l+=f,u+=p*f}n[a-1][1]+=n[a-1][0]=i,l&&(i-=u/l)}n[a-1][1]+=n[a-1][0]=i,Jp(e,t)}}!function(e){pf=function(e){var t=e.dateTime,n=e.date,r=e.time,o=e.periods,i=e.days,a=e.shortDays,c=e.months,l=e.shortMonths,u=xf(o),s=Of(o),f=xf(i),p=Of(i),d=xf(a),y=Of(a),h=xf(c),m=Of(c),v=xf(l),b=Of(l),g={a:function(e){return a[e.getDay()]},A:function(e){return i[e.getDay()]},b:function(e){return l[e.getMonth()]},B:function(e){return c[e.getMonth()]},c:null,d:Wf,e:Wf,f:Gf,g:ip,G:cp,H:Kf,I:$f,j:Hf,L:Vf,m:Yf,M:Xf,p:function(e){return o[+(e.getHours()>=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Cp,s:Np,S:Zf,u:Jf,U:Qf,V:tp,w:np,W:rp,x:null,X:null,y:op,Y:ap,Z:lp,"%":Tp},w={a:function(e){return a[e.getUTCDay()]},A:function(e){return i[e.getUTCDay()]},b:function(e){return l[e.getUTCMonth()]},B:function(e){return c[e.getUTCMonth()]},c:null,d:up,e:up,f:yp,g:jp,G:_p,H:sp,I:fp,j:pp,L:dp,m:hp,M:mp,p:function(e){return o[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Cp,s:Np,S:vp,u:bp,U:gp,V:Op,w:kp,W:Ep,x:null,X:null,y:Sp,Y:Pp,Z:Ap,"%":Tp},x={a:function(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=y[r[0].toLowerCase()],n+r[0].length):-1},A:function(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},b:function(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=b[r[0].toLowerCase()],n+r[0].length):-1},B:function(e,t,n){var r=h.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},c:function(e,n,r){return E(e,t,n,r)},d:Mf,e:Mf,f:Ff,g:Af,G:_f,H:If,I:If,j:Df,L:Bf,m:Nf,M:Rf,p:function(e,t,n){var r=u.exec(t.slice(n));return r?(e.p=s[r[0].toLowerCase()],n+r[0].length):-1},q:Cf,Q:zf,s:qf,S:Lf,u:Ef,U:Sf,V:jf,w:kf,W:Pf,x:function(e,t,r){return E(e,n,t,r)},X:function(e,t,n){return E(e,r,t,n)},y:Af,Y:_f,Z:Tf,"%":Uf};function O(e,t){return function(n){var r,o,i,a=[],c=-1,l=0,u=e.length;for(n instanceof Date||(n=new Date(+n));++c<u;)37===e.charCodeAt(c)&&(a.push(e.slice(l,c)),null!=(o=hf[r=e.charAt(++c)])?r=e.charAt(++c):o="e"===r?" ":"0",(i=t[r])&&(r=i(n,o)),a.push(r),l=c+1);return a.push(e.slice(l,c)),a.join("")}}function k(e,t){return function(n){var r,o,i=ff(1900,void 0,1);if(E(i,e,n+="",0)!=n.length)return null;if("Q"in i)return new Date(i.Q);if("s"in i)return new Date(1e3*i.s+("L"in i?i.L:0));if(t&&!("Z"in i)&&(i.Z=0),"p"in i&&(i.H=i.H%12+12*i.p),void 0===i.m&&(i.m="q"in i?i.q:0),"V"in i){if(i.V<1||i.V>53)return null;"w"in i||(i.w=1),"Z"in i?(o=(r=sf(ff(i.y,0,1))).getUTCDay(),r=o>4||0===o?Us.ceil(r):Us(r),r=Vs.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(o=(r=uf(ff(i.y,0,1))).getDay(),r=o>4||0===o?Xs.ceil(r):Xs(r),r=rf.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),o="Z"in i?sf(ff(i.y,0,1)).getUTCDay():uf(ff(i.y,0,1)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(o+5)%7:i.w+7*i.U-(o+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,sf(i)):uf(i)}}function E(e,t,n,r){for(var o,i,a=0,c=t.length,l=n.length;a<c;){if(r>=l)return-1;if(37===(o=t.charCodeAt(a++))){if(o=t.charAt(a++),!(i=x[o in hf?t.charAt(a++):o])||(r=i(e,n,r))<0)return-1}else if(o!=n.charCodeAt(r++))return-1}return r}return g.x=O(n,g),g.X=O(r,g),g.c=O(t,g),w.x=O(n,w),w.X=O(r,w),w.c=O(t,w),{format:function(e){var t=O(e+="",g);return t.toString=function(){return e},t},parse:function(e){var t=k(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=O(e+="",w);return t.toString=function(){return e},t},utcParse:function(e){var t=k(e+="",!0);return t.toString=function(){return e},t}}}(e),df=pf.format,pf.parse,yf=pf.utcFormat,pf.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),n.dn(Jp),n.dn(Qp),n.dn(ed),n.dn(td),n.dn(nd);Array.prototype.slice;function nd(e){return"object"==typeof e&&"length"in e?e:Array.from(e)}function rd(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n}function od(e,t){return e[t]}function id(e){const t=[];return t.key=e,t}function ad(){var e=qr([]),t=rd,n=Jp,r=od;function o(o){var i,a,c=Array.from(e.apply(this,arguments),id),l=c.length,u=-1;for(const e of o)for(i=0,++u;i<l;++i)(c[i][u]=[0,+r(e,c[i].key,u,o)]).data=e;for(i=0,a=nd(t(c));i<l;++i)c[a[i]].index=i;return n(c,a),c}return o.keys=function(t){return arguments.length?(e="function"==typeof t?t:qr(Array.from(t)),o):e},o.value=function(e){return arguments.length?(r="function"==typeof e?e:qr(+e),o):r},o.order=function(e){return arguments.length?(t=null==e?rd:"function"==typeof e?e:qr(Array.from(e)),o):t},o.offset=function(e){return arguments.length?(n=null==e?Jp:e,o):n},o}n.dn(rd),n.dn(ad);var cd=n(4506),ld=n.n(cd),ud=n(1684),sd=n.n(ud),fd=n(7307),pd=n.n(fd),dd=n(2404),yd=n.n(dd),hd=n(8351),md=n.n(hd);function vd(e){return function(e){if(Array.isArray(e))return bd(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return bd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bd(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function bd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var gd=function(e){return e},wd={"@@functional/placeholder":!0},xd=function(e){return e===wd},Od=function(e){return function t(){return 0===arguments.length||1===arguments.length&&xd(arguments.length<=0?void 0:arguments[0])?t:e.apply(void 0,arguments)}},kd=function e(t,n){return 1===t?n:Od(function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];var a=o.filter(function(e){return e!==wd}).length;return a>=t?n.apply(void 0,o):e(t-a,Od(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var i=o.map(function(e){return xd(e)?t.shift():e});return n.apply(void 0,vd(i).concat(t))}))})},Ed=function(e){return kd(e.length,e)},Sd=function(e,t){for(var n=[],r=e;r<t;++r)n[r-e]=r;return n},jd=Ed(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(e){return t[e]}).map(e)}),Pd=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!t.length)return gd;var r=t.reverse(),o=r[0],i=r.slice(1);return function(){return i.reduce(function(e,t){return t(e)},o.apply(void 0,arguments))}},_d=function(e){return Array.isArray(e)?e.reverse():e.split("").reverse.join("")},Ad=function(e){var t=null,n=null;return function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];return t&&o.every(function(e,n){return e===t[n]})?n:(t=o,n=e.apply(void 0,o))}};var Td=Ed(function(e,t,n){var r=+e;return r+n*(+t-r)}),Cd=Ed(function(e,t,n){var r=t-+e;return(n-e)/(r=r||1/0)}),Nd=Ed(function(e,t,n){var r=t-+e;return r=r||1/0,Math.max(0,Math.min(1,(n-e)/r))});const Md={rangeStep:function(e,t,n){for(var r=new(md())(e),o=0,i=[];r.lt(t)&&o<1e5;)i.push(r.toNumber()),r=r.add(n),o++;return i},getDigitCount:function(e){return 0===e?1:Math.floor(new(md())(e).abs().log(10).toNumber())+1},interpolateNumber:Td,uninterpolateNumber:Cd,uninterpolateTruncation:Nd};function Dd(e){return function(e){if(Array.isArray(e))return Ld(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||Rd(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Id(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||Rd(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rd(e,t){if(e){if("string"==typeof e)return Ld(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ld(e,t):void 0}}function Ld(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Bd(e){var t=Id(e,2),n=t[0],r=t[1],o=n,i=r;return n>r&&(o=r,i=n),[o,i]}function Fd(e,t,n){if(e.lte(0))return new(md())(0);var r=Md.getDigitCount(e.toNumber()),o=new(md())(10).pow(r),i=e.div(o),a=1!==r?.05:.1,c=new(md())(Math.ceil(i.div(a).toNumber())).add(n).mul(a).mul(o);return t?c:new(md())(Math.ceil(c))}function Ud(e,t,n){var r=1,o=new(md())(e);if(!o.isint()&&n){var i=Math.abs(e);i<1?(r=new(md())(10).pow(Md.getDigitCount(e)-1),o=new(md())(Math.floor(o.div(r).toNumber())).mul(r)):i>1&&(o=new(md())(Math.floor(e)))}else 0===e?o=new(md())(Math.floor((t-1)/2)):n||(o=new(md())(Math.floor(e)));var a=Math.floor((t-1)/2);return Pd(jd(function(e){return o.add(new(md())(e-a).mul(r)).toNumber()}),Sd)(0,t)}function zd(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new(md())(0),tickMin:new(md())(0),tickMax:new(md())(0)};var i,a=Fd(new(md())(t).sub(e).div(n-1),r,o);i=e<=0&&t>=0?new(md())(0):(i=new(md())(e).add(t).div(2)).sub(new(md())(i).mod(a));var c=Math.ceil(i.sub(e).div(a).toNumber()),l=Math.ceil(new(md())(t).sub(i).div(a).toNumber()),u=c+l+1;return u>n?zd(e,t,n,r,o+1):(u<n&&(l=t>0?l+(n-u):l,c=t>0?c:c+(n-u)),{step:a,tickMin:i.sub(new(md())(c).mul(a)),tickMax:i.add(new(md())(l).mul(a))})}var qd=Ad(function(e){var t=Id(e,2),n=t[0],r=t[1],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Math.max(o,2),c=Id(Bd([n,r]),2),l=c[0],u=c[1];if(l===-1/0||u===1/0){var s=u===1/0?[l].concat(Dd(Sd(0,o-1).map(function(){return 1/0}))):[].concat(Dd(Sd(0,o-1).map(function(){return-1/0})),[u]);return n>r?_d(s):s}if(l===u)return Ud(l,o,i);var f=zd(l,u,a,i),p=f.step,d=f.tickMin,y=f.tickMax,h=Md.rangeStep(d,y.add(new(md())(.1).mul(p)),p);return n>r?_d(h):h}),Wd=(Ad(function(e){var t=Id(e,2),n=t[0],r=t[1],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Math.max(o,2),c=Id(Bd([n,r]),2),l=c[0],u=c[1];if(l===-1/0||u===1/0)return[n,r];if(l===u)return Ud(l,o,i);var s=Fd(new(md())(u).sub(l).div(a-1),i,0),f=Pd(jd(function(e){return new(md())(l).add(new(md())(e).mul(s)).toNumber()}),Sd)(0,a).filter(function(e){return e>=l&&e<=u});return n>r?_d(f):f}),Ad(function(e,t){var n=Id(e,2),r=n[0],o=n[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Id(Bd([r,o]),2),c=a[0],l=a[1];if(c===-1/0||l===1/0)return[r,o];if(c===l)return[c];var u=Math.max(t,2),s=Fd(new(md())(l).sub(c).div(u-1),i,0),f=[].concat(Dd(Md.rangeStep(new(md())(c),new(md())(l).sub(new(md())(.99).mul(s)),s)),[l]);return r>o?_d(f):f})),Kd=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function $d(e){return $d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$d(e)}function Hd(){return Hd=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Hd.apply(this,arguments)}function Vd(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Gd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gd(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yd(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Xd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ny(r.key),r)}}function Zd(e,t,n){return t=Qd(t),function(e,t){if(t&&("object"===$d(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Jd()?Reflect.construct(t,n||[],Qd(e).constructor):t.apply(e,n))}function Jd(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Jd=function(){return!!e})()}function Qd(e){return Qd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Qd(e)}function ey(e,t){return ey=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ey(e,t)}function ty(e,t,n){return(t=ny(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ny(e){var t=function(e,t){if("object"!=$d(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=$d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$d(t)?t:t+""}var ry=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Zd(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ey(e,t)}(t,e),n=t,r=[{key:"render",value:function(){var e=this.props,t=e.offset,n=e.layout,r=e.width,o=e.dataKey,i=e.data,a=e.dataPointFormatter,c=e.xAxis,l=e.yAxis,u=Yd(e,Kd),s=on(u,!1);"x"===this.props.direction&&"number"!==c.type&&xn(!1);var f=i.map(function(e){var i=a(e,o),u=i.x,f=i.y,p=i.value,d=i.errorVal;if(!d)return null;var y,m,v=[];if(Array.isArray(d)){var b=Vd(d,2);y=b[0],m=b[1]}else y=m=d;if("vertical"===n){var g=c.scale,w=f+t,x=w+r,O=w-r,k=g(p-y),E=g(p+m);v.push({x1:E,y1:x,x2:E,y2:O}),v.push({x1:k,y1:w,x2:E,y2:w}),v.push({x1:k,y1:x,x2:k,y2:O})}else if("horizontal"===n){var S=l.scale,j=u+t,P=j-r,_=j+r,A=S(p-y),T=S(p+m);v.push({x1:P,y1:T,x2:_,y2:T}),v.push({x1:j,y1:A,x2:j,y2:T}),v.push({x1:P,y1:A,x2:_,y2:A})}return h().createElement(An,Hd({className:"recharts-errorBar",key:"bar-".concat(v.map(function(e){return"".concat(e.x1,"-").concat(e.x2,"-").concat(e.y1,"-").concat(e.y2)}))},s),v.map(function(e){return h().createElement("line",Hd({},e,{key:"line-".concat(e.x1,"-").concat(e.x2,"-").concat(e.y1,"-").concat(e.y2)}))}))});return h().createElement(An,{className:"recharts-errorBars"},f)}}],r&&Xd(n.prototype,r),o&&Xd(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h().Component);function oy(e){return oy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oy(e)}function iy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ay(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?iy(Object(n),!0).forEach(function(t){cy(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):iy(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function cy(e,t,n){var r;return r=function(e,t){if("object"!=oy(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=oy(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==oy(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}ty(ry,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"}),ty(ry,"displayName","ErrorBar");var ly=function(e){var t=e.children,n=e.formattedGraphicalItems,r=e.legendWidth,o=e.legendContent,i=en(t,No);if(!i)return null;var a,c=No.defaultProps,l=void 0!==c?ay(ay({},c),i.props):{};return a=i.props&&i.props.payload?i.props&&i.props.payload:"children"===o?(n||[]).reduce(function(e,t){var n=t.item,r=t.props,o=r.sectors||r.data||[];return e.concat(o.map(function(e){return{type:i.props.iconType||n.props.legendType,value:e.name,color:e.fill,payload:e}}))},[]):(n||[]).map(function(e){var t=e.item,n=t.type.defaultProps,r=void 0!==n?ay(ay({},n),t.props):{},o=r.dataKey,i=r.name,a=r.legendType;return{inactive:r.hide,dataKey:o,type:l.iconType||a||"square",color:vy(t),value:i||o,payload:r}}),ay(ay(ay({},l),No.getWithHeight(i,r)),{},{payload:a,item:i})};function uy(e){return uy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},uy(e)}function sy(e){return function(e){if(Array.isArray(e))return fy(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return fy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fy(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fy(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function py(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function dy(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?py(Object(n),!0).forEach(function(t){yy(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):py(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function yy(e,t,n){var r;return r=function(e,t){if("object"!=uy(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=uy(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==uy(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function hy(e,t,n){return bt()(e)||bt()(t)?n:Ot(t)?yt()(e,t,n):Nt()(t)?t(e):n}function my(e,t,n,r){var o=pd()(e,function(e){return hy(e,t)});if("number"===n){var i=o.filter(function(e){return xt(e)||parseFloat(e)});return i.length?[sd()(i),ld()(i)]:[1/0,-1/0]}return(r?o.filter(function(e){return!bt()(e)}):o).map(function(e){return Ot(e)||e instanceof Date?e:""})}var vy=function(e){var t,n,r=e.type.displayName,o=null!==(t=e.type)&&void 0!==t&&t.defaultProps?dy(dy({},e.type.defaultProps),e.props):e.props,i=o.stroke,a=o.fill;switch(r){case"Line":n=i;break;case"Area":case"Radar":n=i&&"none"!==i?i:a;break;default:n=a}return n},by=function(e,t,n,r,o){var i=Qt(t.props.children,ry).filter(function(e){return function(e,t,n){return!!bt()(t)||("horizontal"===e?"yAxis"===t:"vertical"===e||"x"===n?"xAxis"===t:"y"!==n||"yAxis"===t)}(r,o,e.props.direction)});if(i&&i.length){var a=i.map(function(e){return e.props.dataKey});return e.reduce(function(e,t){var r=hy(t,n);if(bt()(r))return e;var o=Array.isArray(r)?[sd()(r),ld()(r)]:[r,r],i=a.reduce(function(e,n){var r=hy(t,n,0),i=o[0]-Math.abs(Array.isArray(r)?r[0]:r),a=o[1]+Math.abs(Array.isArray(r)?r[1]:r);return[Math.min(i,e[0]),Math.max(a,e[1])]},[1/0,-1/0]);return[Math.min(i[0],e[0]),Math.max(i[1],e[1])]},[1/0,-1/0])}return null},gy=function(e,t,n,r,o){var i=t.map(function(t){var i=t.props.dataKey;return"number"===n&&i&&by(e,t,i,r)||my(e,i,n,o)});if("number"===n)return i.reduce(function(e,t){return[Math.min(e[0],t[0]),Math.max(e[1],t[1])]},[1/0,-1/0]);var a={};return i.reduce(function(e,t){for(var n=0,r=t.length;n<r;n++)a[t[n]]||(a[t[n]]=!0,e.push(t[n]));return e},[])},wy=function(e,t){return"horizontal"===e&&"xAxis"===t||"vertical"===e&&"yAxis"===t||"centric"===e&&"angleAxis"===t||"radial"===e&&"radiusAxis"===t},xy=function(e,t,n,r){if(r)return e.map(function(e){return e.coordinate});var o,i,a=e.map(function(e){return e.coordinate===t&&(o=!0),e.coordinate===n&&(i=!0),e.coordinate});return o||a.push(t),i||a.push(n),a},Oy=function(e,t,n){if(!e)return null;var r=e.scale,o=e.duplicateDomain,i=e.type,a=e.range,c="scaleBand"===e.realScaleType?r.bandwidth()/2:2,l=(t||n)&&"category"===i&&r.bandwidth?r.bandwidth()/c:0;return l="angleAxis"===e.axisType&&(null==a?void 0:a.length)>=2?2*gt(a[0]-a[1])*l:l,t&&(e.ticks||e.niceTicks)?(e.ticks||e.niceTicks).map(function(e){var t=o?o.indexOf(e):e;return{coordinate:r(t)+l,value:e,offset:l}}).filter(function(e){return!pt()(e.coordinate)}):e.isCategorical&&e.categoricalDomain?e.categoricalDomain.map(function(e,t){return{coordinate:r(e)+l,value:e,index:t,offset:l}}):r.ticks&&!n?r.ticks(e.tickCount).map(function(e){return{coordinate:r(e)+l,value:e,offset:l}}):r.domain().map(function(e,t){return{coordinate:r(e)+l,value:o?o[e]:e,index:t,offset:l}})},ky=new WeakMap,Ey=function(e,t){if("function"!=typeof t)return e;ky.has(e)||ky.set(e,new WeakMap);var n=ky.get(e);if(n.has(t))return n.get(t);var r=function(){e.apply(void 0,arguments),t.apply(void 0,arguments)};return n.set(t,r),r},Sy=function(t,n,r){var o=t.scale,i=t.type,a=t.layout,c=t.axisType;if("auto"===o)return"radial"===a&&"radiusAxis"===c?{scale:Ca(),realScaleType:"band"}:"radial"===a&&"angleAxis"===c?{scale:uu(),realScaleType:"linear"}:"category"===i&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:Ma(),realScaleType:"point"}:"category"===i?{scale:Ca(),realScaleType:"band"}:{scale:uu(),realScaleType:"linear"};if(st()(o)){var l="scale".concat(gr()(o));return{scale:(e[l]||Ma)(),realScaleType:e[l]?l:"point"}}return Nt()(o)?{scale:o}:{scale:Ma(),realScaleType:"point"}},jy=1e-4,Py=function(e){var t=e.domain();if(t&&!(t.length<=2)){var n=t.length,r=e.range(),o=Math.min(r[0],r[1])-jy,i=Math.max(r[0],r[1])+jy,a=e(t[0]),c=e(t[n-1]);(a<o||a>i||c<o||c>i)&&e.domain([t[0],t[n-1]])}},_y={sign:function(e){var t=e.length;if(!(t<=0))for(var n=0,r=e[0].length;n<r;++n)for(var o=0,i=0,a=0;a<t;++a){var c=pt()(e[a][n][1])?e[a][n][0]:e[a][n][1];c>=0?(e[a][n][0]=o,e[a][n][1]=o+c,o=e[a][n][1]):(e[a][n][0]=i,e[a][n][1]=i+c,i=e[a][n][1])}},expand:Qp,none:Jp,silhouette:ed,wiggle:td,positive:function(e){var t=e.length;if(!(t<=0))for(var n=0,r=e[0].length;n<r;++n)for(var o=0,i=0;i<t;++i){var a=pt()(e[i][n][1])?e[i][n][0]:e[i][n][1];a>=0?(e[i][n][0]=o,e[i][n][1]=o+a,o=e[i][n][1]):(e[i][n][0]=0,e[i][n][1]=0)}}},Ay=function(e,t,n){var r=t.map(function(e){return e.props.dataKey}),o=_y[n];return ad().keys(r).value(function(e,t){return+hy(e,t,0)}).order(rd).offset(o)(e)},Ty=function(e,t){var n=t.realScaleType,r=t.type,o=t.tickCount,i=t.originalDomain,a=t.allowDecimals,c=n||t.scale;if("auto"!==c&&"linear"!==c)return null;if(o&&"number"===r&&i&&("auto"===i[0]||"auto"===i[1])){var l=e.domain();if(!l.length)return null;var u=qd(l,o,a);return e.domain([sd()(u),ld()(u)]),{niceTicks:u}}if(o&&"number"===r){var s=e.domain();return{niceTicks:Wd(s,o,a)}}return null};function Cy(e){var t=e.axis,n=e.ticks,r=e.bandSize,o=e.entry,i=e.index,a=e.dataKey;if("category"===t.type){if(!t.allowDuplicatedCategory&&t.dataKey&&!bt()(o[t.dataKey])){var c=_t(n,"value",o[t.dataKey]);if(c)return c.coordinate+r/2}return n[i]?n[i].coordinate+r/2:null}var l=hy(o,bt()(a)?t.dataKey:a);return bt()(l)?null:t.scale(l)}var Ny=function(e){var t=e.axis,n=e.ticks,r=e.offset,o=e.bandSize,i=e.entry,a=e.index;if("category"===t.type)return n[a]?n[a].coordinate+r:null;var c=hy(i,t.dataKey,t.domain[a]);return bt()(c)?null:t.scale(c)-o/2+r},My=function(e,t,n){return Object.keys(e).reduce(function(r,o){var i=e[o].stackedData.reduce(function(e,r){var o=function(e){return e.reduce(function(e,t){return[sd()(t.concat([e[0]]).filter(xt)),ld()(t.concat([e[1]]).filter(xt))]},[1/0,-1/0])}(r.slice(t,n+1));return[Math.min(e[0],o[0]),Math.max(e[1],o[1])]},[1/0,-1/0]);return[Math.min(i[0],r[0]),Math.max(i[1],r[1])]},[1/0,-1/0]).map(function(e){return e===1/0||e===-1/0?0:e})},Dy=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Iy=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Ry=function(e,t,n){if(Nt()(e))return e(t,n);if(!Array.isArray(e))return t;var r=[];if(xt(e[0]))r[0]=n?e[0]:Math.min(e[0],t[0]);else if(Dy.test(e[0])){var o=+Dy.exec(e[0])[1];r[0]=t[0]-o}else Nt()(e[0])?r[0]=e[0](t[0]):r[0]=t[0];if(xt(e[1]))r[1]=n?e[1]:Math.max(e[1],t[1]);else if(Iy.test(e[1])){var i=+Iy.exec(e[1])[1];r[1]=t[1]+i}else Nt()(e[1])?r[1]=e[1](t[1]):r[1]=t[1];return r},Ly=function(e,t,n){if(e&&e.scale&&e.scale.bandwidth){var r=e.scale.bandwidth();if(!n||r>0)return r}if(e&&t&&t.length>=2){for(var o=gn()(t,function(e){return e.coordinate}),i=1/0,a=1,c=o.length;a<c;a++){var l=o[a],u=o[a-1];i=Math.min((l.coordinate||0)-(u.coordinate||0),i)}return i===1/0?0:i}return n?void 0:0},By=function(e,t,n){return e&&e.length?yd()(e,yt()(n,"type.defaultProps.domain"))?t:e:t},Fy=function(e,t){var n=e.type.defaultProps?dy(dy({},e.type.defaultProps),e.props):e.props,r=n.dataKey,o=n.name,i=n.unit,a=n.formatter,c=n.tooltipType,l=n.chartType,u=n.hide;return dy(dy({},on(e,!1)),{},{dataKey:r,unit:i,formatter:a,name:o||r,color:vy(e),value:hy(t,r),type:c,payload:t,chartType:l,hide:u})};function Uy(e){return Uy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Uy(e)}function zy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function qy(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zy(Object(n),!0).forEach(function(t){Wy(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zy(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Wy(e,t,n){var r;return r=function(e,t){if("object"!=Uy(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Uy(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Uy(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ky=["Webkit","Moz","O","ms"];function $y(e){return $y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$y(e)}function Hy(){return Hy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Hy.apply(this,arguments)}function Vy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Gy(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Vy(Object(n),!0).forEach(function(t){eh(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vy(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,th(r.key),r)}}function Xy(e,t,n){return t=Jy(t),function(e,t){if(t&&("object"===$y(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Zy()?Reflect.construct(t,n||[],Jy(e).constructor):t.apply(e,n))}function Zy(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Zy=function(){return!!e})()}function Jy(e){return Jy=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Jy(e)}function Qy(e,t){return Qy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Qy(e,t)}function eh(e,t,n){return(t=th(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function th(e){var t=function(e,t){if("object"!=$y(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=$y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$y(t)?t:t+""}var nh=function(e){return e.changedTouches&&!!e.changedTouches.length},rh=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),eh(n=Xy(this,t,[e]),"handleDrag",function(e){n.leaveTimer&&(clearTimeout(n.leaveTimer),n.leaveTimer=null),n.state.isTravellerMoving?n.handleTravellerMove(e):n.state.isSlideMoving&&n.handleSlideDrag(e)}),eh(n,"handleTouchMove",function(e){null!=e.changedTouches&&e.changedTouches.length>0&&n.handleDrag(e.changedTouches[0])}),eh(n,"handleDragEnd",function(){n.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var e=n.props,t=e.endIndex,r=e.onDragEnd,o=e.startIndex;null==r||r({endIndex:t,startIndex:o})}),n.detachDragEndListener()}),eh(n,"handleLeaveWrapper",function(){(n.state.isTravellerMoving||n.state.isSlideMoving)&&(n.leaveTimer=window.setTimeout(n.handleDragEnd,n.props.leaveTimeOut))}),eh(n,"handleEnterSlideOrTraveller",function(){n.setState({isTextActive:!0})}),eh(n,"handleLeaveSlideOrTraveller",function(){n.setState({isTextActive:!1})}),eh(n,"handleSlideDragStart",function(e){var t=nh(e)?e.changedTouches[0]:e;n.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:t.pageX}),n.attachDragEndListener()}),n.travellerDragStartHandlers={startX:n.handleTravellerDragStart.bind(n,"startX"),endX:n.handleTravellerDragStart.bind(n,"endX")},n.state={},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Qy(e,t)}(t,e),n=t,r=[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(e){var n=e.startX,r=e.endX,o=this.state.scaleValues,i=this.props,a=i.gap,c=i.data.length-1,l=Math.min(n,r),u=Math.max(n,r),s=t.getIndexInRange(o,l),f=t.getIndexInRange(o,u);return{startIndex:s-s%a,endIndex:f===c?c:f-f%a}}},{key:"getTextOfTick",value:function(e){var t=this.props,n=t.data,r=t.tickFormatter,o=t.dataKey,i=hy(n[e],o,e);return Nt()(r)?r(i,e):i}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(e){var t=this.state,n=t.slideMoveStartX,r=t.startX,o=t.endX,i=this.props,a=i.x,c=i.width,l=i.travellerWidth,u=i.startIndex,s=i.endIndex,f=i.onChange,p=e.pageX-n;p>0?p=Math.min(p,a+c-l-o,a+c-l-r):p<0&&(p=Math.max(p,a-r,a-o));var d=this.getIndex({startX:r+p,endX:o+p});d.startIndex===u&&d.endIndex===s||!f||f(d),this.setState({startX:r+p,endX:o+p,slideMoveStartX:e.pageX})}},{key:"handleTravellerDragStart",value:function(e,t){var n=nh(t)?t.changedTouches[0]:t;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:e,brushMoveStartX:n.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(e){var t=this.state,n=t.brushMoveStartX,r=t.movingTravellerId,o=t.endX,i=t.startX,a=this.state[r],c=this.props,l=c.x,u=c.width,s=c.travellerWidth,f=c.onChange,p=c.gap,d=c.data,y={startX:this.state.startX,endX:this.state.endX},h=e.pageX-n;h>0?h=Math.min(h,l+u-s-a):h<0&&(h=Math.max(h,l-a)),y[r]=a+h;var m=this.getIndex(y),v=m.startIndex,b=m.endIndex;this.setState(eh(eh({},r,a+h),"brushMoveStartX",e.pageX),function(){var e;f&&(e=d.length-1,("startX"===r&&(o>i?v%p===0:b%p===0)||o<i&&b===e||"endX"===r&&(o>i?b%p===0:v%p===0)||o>i&&b===e)&&f(m))})}},{key:"handleTravellerMoveKeyboard",value:function(e,t){var n=this,r=this.state,o=r.scaleValues,i=r.startX,a=r.endX,c=this.state[t],l=o.indexOf(c);if(-1!==l){var u=l+e;if(!(-1===u||u>=o.length)){var s=o[u];"startX"===t&&s>=a||"endX"===t&&s<=i||this.setState(eh({},t,s),function(){n.props.onChange(n.getIndex({startX:n.state.startX,endX:n.state.endX}))})}}}},{key:"renderBackground",value:function(){var e=this.props,t=e.x,n=e.y,r=e.width,o=e.height,i=e.fill,a=e.stroke;return h().createElement("rect",{stroke:a,fill:i,x:t,y:n,width:r,height:o})}},{key:"renderPanorama",value:function(){var e=this.props,t=e.x,n=e.y,r=e.width,o=e.height,i=e.data,a=e.children,c=e.padding,l=y.Children.only(a);return l?h().cloneElement(l,{x:t,y:n,width:r,height:o,margin:c,compact:!0,data:i}):null}},{key:"renderTravellerLayer",value:function(e,n){var r,o,i=this,a=this.props,c=a.y,l=a.travellerWidth,u=a.height,s=a.traveller,f=a.ariaLabel,p=a.data,d=a.startIndex,y=a.endIndex,m=Math.max(e,this.props.x),v=Gy(Gy({},on(this.props,!1)),{},{x:m,y:c,width:l,height:u}),b=f||"Min value: ".concat(null===(r=p[d])||void 0===r?void 0:r.name,", Max value: ").concat(null===(o=p[y])||void 0===o?void 0:o.name);return h().createElement(An,{tabIndex:0,role:"slider","aria-label":b,"aria-valuenow":e,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[n],onTouchStart:this.travellerDragStartHandlers[n],onKeyDown:function(e){["ArrowLeft","ArrowRight"].includes(e.key)&&(e.preventDefault(),e.stopPropagation(),i.handleTravellerMoveKeyboard("ArrowRight"===e.key?1:-1,n))},onFocus:function(){i.setState({isTravellerFocused:!0})},onBlur:function(){i.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(s,v))}},{key:"renderSlide",value:function(e,t){var n=this.props,r=n.y,o=n.height,i=n.stroke,a=n.travellerWidth,c=Math.min(e,t)+a,l=Math.max(Math.abs(t-e)-a,0);return h().createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:i,fillOpacity:.2,x:c,y:r,width:l,height:o})}},{key:"renderText",value:function(){var e=this.props,t=e.startIndex,n=e.endIndex,r=e.y,o=e.height,i=e.travellerWidth,a=e.stroke,c=this.state,l=c.startX,u=c.endX,s={pointerEvents:"none",fill:a};return h().createElement(An,{className:"recharts-brush-texts"},h().createElement(mc,Hy({textAnchor:"end",verticalAnchor:"middle",x:Math.min(l,u)-5,y:r+o/2},s),this.getTextOfTick(t)),h().createElement(mc,Hy({textAnchor:"start",verticalAnchor:"middle",x:Math.max(l,u)+i+5,y:r+o/2},s),this.getTextOfTick(n)))}},{key:"render",value:function(){var e=this.props,t=e.data,n=e.className,r=e.children,o=e.x,i=e.y,a=e.width,c=e.height,l=e.alwaysShowText,u=this.state,s=u.startX,f=u.endX,p=u.isTextActive,d=u.isSlideMoving,y=u.isTravellerMoving,m=u.isTravellerFocused;if(!t||!t.length||!xt(o)||!xt(i)||!xt(a)||!xt(c)||a<=0||c<=0)return null;var v=at("recharts-brush",n),b=1===h().Children.count(r),g=function(e,t){if(!e)return null;var n=e.replace(/(\w)/,function(e){return e.toUpperCase()}),r=Ky.reduce(function(e,r){return qy(qy({},e),{},Wy({},r+n,t))},{});return r[e]=t,r}("userSelect","none");return h().createElement(An,{className:v,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:g},this.renderBackground(),b&&this.renderPanorama(),this.renderSlide(s,f),this.renderTravellerLayer(s,"startX"),this.renderTravellerLayer(f,"endX"),(p||d||y||m||l)&&this.renderText())}}],o=[{key:"renderDefaultTraveller",value:function(e){var t=e.x,n=e.y,r=e.width,o=e.height,i=e.stroke,a=Math.floor(n+o/2)-1;return h().createElement(h().Fragment,null,h().createElement("rect",{x:t,y:n,width:r,height:o,fill:i,stroke:"none"}),h().createElement("line",{x1:t+1,y1:a,x2:t+r-1,y2:a,fill:"none",stroke:"#fff"}),h().createElement("line",{x1:t+1,y1:a+2,x2:t+r-1,y2:a+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(e,n){return h().isValidElement(e)?h().cloneElement(e,n):Nt()(e)?e(n):t.renderDefaultTraveller(n)}},{key:"getDerivedStateFromProps",value:function(e,t){var n=e.data,r=e.width,o=e.x,i=e.travellerWidth,a=e.updateId,c=e.startIndex,l=e.endIndex;if(n!==t.prevData||a!==t.prevUpdateId)return Gy({prevData:n,prevTravellerWidth:i,prevUpdateId:a,prevX:o,prevWidth:r},n&&n.length?function(e){var t=e.data,n=e.startIndex,r=e.endIndex,o=e.x,i=e.width,a=e.travellerWidth;if(!t||!t.length)return{};var c=t.length,l=Ma().domain(vn()(0,c)).range([o,o+i-a]),u=l.domain().map(function(e){return l(e)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:l(n),endX:l(r),scale:l,scaleValues:u}}({data:n,width:r,x:o,travellerWidth:i,startIndex:c,endIndex:l}):{scale:null,scaleValues:null});if(t.scale&&(r!==t.prevWidth||o!==t.prevX||i!==t.prevTravellerWidth)){t.scale.range([o,o+r-i]);var u=t.scale.domain().map(function(e){return t.scale(e)});return{prevData:n,prevTravellerWidth:i,prevUpdateId:a,prevX:o,prevWidth:r,startX:t.scale(e.startIndex),endX:t.scale(e.endIndex),scaleValues:u}}return null}},{key:"getIndexInRange",value:function(e,t){for(var n=0,r=e.length-1;r-n>1;){var o=Math.floor((n+r)/2);e[o]>t?r=o:n=o}return t>=e[r]?r:n}}],r&&Yy(n.prototype,r),o&&Yy(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function oh(e){return oh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oh(e)}function ih(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ah(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ih(Object(n),!0).forEach(function(t){ch(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ih(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ch(e,t,n){var r;return r=function(e,t){if("object"!=oh(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=oh(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==oh(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lh(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return uh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return uh(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function uh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}eh(rh,"displayName","Brush"),eh(rh,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var sh=Math.PI/180,fh=function(e){return 180*e/Math.PI},ph=function(e,t,n,r){return{x:e+Math.cos(-sh*r)*n,y:t+Math.sin(-sh*r)*n}},dh=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(e-(n.left||0)-(n.right||0)),Math.abs(t-(n.top||0)-(n.bottom||0)))/2},yh=function(e,t){var n=e.x,r=e.y,o=t.cx,i=t.cy,a=function(e,t){var n=e.x,r=e.y,o=t.x,i=t.y;return Math.sqrt(Math.pow(n-o,2)+Math.pow(r-i,2))}({x:n,y:r},{x:o,y:i});if(a<=0)return{radius:a};var c=(n-o)/a,l=Math.acos(c);return r>i&&(l=2*Math.PI-l),{radius:a,angle:fh(l),angleInRadian:l}},hh=function(e,t){var n=t.startAngle,r=t.endAngle,o=Math.floor(n/360),i=Math.floor(r/360);return e+360*Math.min(o,i)},mh=function(e,t){var n=e.x,r=e.y,o=yh({x:n,y:r},t),i=o.radius,a=o.angle,c=t.innerRadius,l=t.outerRadius;if(i<c||i>l)return!1;if(0===i)return!0;var u,s=function(e){var t=e.startAngle,n=e.endAngle,r=Math.floor(t/360),o=Math.floor(n/360),i=Math.min(r,o);return{startAngle:t-360*i,endAngle:n-360*i}}(t),f=s.startAngle,p=s.endAngle,d=a;if(f<=p){for(;d>p;)d-=360;for(;d<f;)d+=360;u=d>=f&&d<=p}else{for(;d>f;)d-=360;for(;d<p;)d+=360;u=d>=p&&d<=f}return u?ah(ah({},t),{},{radius:i,angle:hh(d,t)}):null},vh=function(e){return(0,y.isValidElement)(e)||Nt()(e)||"boolean"==typeof e?"":e.className};function bh(e){return bh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bh(e)}var gh=["offset"];function wh(e){return function(e){if(Array.isArray(e))return xh(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return xh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return xh(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Oh(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function kh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Eh(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kh(Object(n),!0).forEach(function(t){Sh(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kh(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Sh(e,t,n){var r;return r=function(e,t){if("object"!=bh(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=bh(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==bh(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jh(){return jh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},jh.apply(this,arguments)}var Ph=function(e,t,n){var r,o,i=e.position,a=e.viewBox,c=e.offset,l=e.className,u=a,s=u.cx,f=u.cy,p=u.innerRadius,d=u.outerRadius,y=u.startAngle,m=u.endAngle,v=u.clockWise,b=(p+d)/2,g=function(e,t){return gt(t-e)*Math.min(Math.abs(t-e),360)}(y,m),w=g>=0?1:-1;"insideStart"===i?(r=y+w*c,o=v):"insideEnd"===i?(r=m-w*c,o=!v):"end"===i&&(r=m+w*c,o=v),o=g<=0?o:!o;var x=ph(s,f,b,r),O=ph(s,f,b,r+359*(o?1:-1)),k="M".concat(x.x,",").concat(x.y,"\n    A").concat(b,",").concat(b,",0,1,").concat(o?0:1,",\n    ").concat(O.x,",").concat(O.y),E=bt()(e.id)?Et("recharts-radial-line-"):e.id;return h().createElement("text",jh({},n,{dominantBaseline:"central",className:at("recharts-radial-bar-label",l)}),h().createElement("defs",null,h().createElement("path",{id:E,d:k})),h().createElement("textPath",{xlinkHref:"#".concat(E)},t))};function _h(e){var t,n=e.offset,r=Eh({offset:void 0===n?5:n},Oh(e,gh)),o=r.viewBox,i=r.position,a=r.value,c=r.children,l=r.content,u=r.className,s=void 0===u?"":u,f=r.textBreakAll;if(!o||bt()(a)&&bt()(c)&&!(0,y.isValidElement)(l)&&!Nt()(l))return null;if((0,y.isValidElement)(l))return(0,y.cloneElement)(l,r);if(Nt()(l)){if(t=(0,y.createElement)(l,r),(0,y.isValidElement)(t))return t}else t=function(e){var t=e.value,n=e.formatter,r=bt()(e.children)?t:e.children;return Nt()(n)?n(r):r}(r);var p=function(e){return"cx"in e&&xt(e.cx)}(o),d=on(r,!0);if(p&&("insideStart"===i||"insideEnd"===i||"end"===i))return Ph(r,t,d);var m=p?function(e){var t=e.viewBox,n=e.offset,r=e.position,o=t,i=o.cx,a=o.cy,c=o.innerRadius,l=o.outerRadius,u=(o.startAngle+o.endAngle)/2;if("outside"===r){var s=ph(i,a,l+n,u),f=s.x;return{x:f,y:s.y,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if("center"===r)return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if("centerTop"===r)return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if("centerBottom"===r)return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var p=ph(i,a,(c+l)/2,u);return{x:p.x,y:p.y,textAnchor:"middle",verticalAnchor:"middle"}}(r):function(e){var t=e.viewBox,n=e.parentViewBox,r=e.offset,o=e.position,i=t,a=i.x,c=i.y,l=i.width,u=i.height,s=u>=0?1:-1,f=s*r,p=s>0?"end":"start",d=s>0?"start":"end",y=l>=0?1:-1,h=y*r,m=y>0?"end":"start",v=y>0?"start":"end";if("top"===o)return Eh(Eh({},{x:a+l/2,y:c-s*r,textAnchor:"middle",verticalAnchor:p}),n?{height:Math.max(c-n.y,0),width:l}:{});if("bottom"===o)return Eh(Eh({},{x:a+l/2,y:c+u+f,textAnchor:"middle",verticalAnchor:d}),n?{height:Math.max(n.y+n.height-(c+u),0),width:l}:{});if("left"===o){var b={x:a-h,y:c+u/2,textAnchor:m,verticalAnchor:"middle"};return Eh(Eh({},b),n?{width:Math.max(b.x-n.x,0),height:u}:{})}if("right"===o){var g={x:a+l+h,y:c+u/2,textAnchor:v,verticalAnchor:"middle"};return Eh(Eh({},g),n?{width:Math.max(n.x+n.width-g.x,0),height:u}:{})}var w=n?{width:l,height:u}:{};return"insideLeft"===o?Eh({x:a+h,y:c+u/2,textAnchor:v,verticalAnchor:"middle"},w):"insideRight"===o?Eh({x:a+l-h,y:c+u/2,textAnchor:m,verticalAnchor:"middle"},w):"insideTop"===o?Eh({x:a+l/2,y:c+f,textAnchor:"middle",verticalAnchor:d},w):"insideBottom"===o?Eh({x:a+l/2,y:c+u-f,textAnchor:"middle",verticalAnchor:p},w):"insideTopLeft"===o?Eh({x:a+h,y:c+f,textAnchor:v,verticalAnchor:d},w):"insideTopRight"===o?Eh({x:a+l-h,y:c+f,textAnchor:m,verticalAnchor:d},w):"insideBottomLeft"===o?Eh({x:a+h,y:c+u-f,textAnchor:v,verticalAnchor:p},w):"insideBottomRight"===o?Eh({x:a+l-h,y:c+u-f,textAnchor:m,verticalAnchor:p},w):Dt()(o)&&(xt(o.x)||wt(o.x))&&(xt(o.y)||wt(o.y))?Eh({x:a+St(o.x,l),y:c+St(o.y,u),textAnchor:"end",verticalAnchor:"end"},w):Eh({x:a+l/2,y:c+u/2,textAnchor:"middle",verticalAnchor:"middle"},w)}(r);return h().createElement(mc,jh({className:at("recharts-label",s)},d,m,{breakAll:f}),t)}_h.displayName="Label";var Ah=function(e){var t=e.cx,n=e.cy,r=e.angle,o=e.startAngle,i=e.endAngle,a=e.r,c=e.radius,l=e.innerRadius,u=e.outerRadius,s=e.x,f=e.y,p=e.top,d=e.left,y=e.width,h=e.height,m=e.clockWise,v=e.labelViewBox;if(v)return v;if(xt(y)&&xt(h)){if(xt(s)&&xt(f))return{x:s,y:f,width:y,height:h};if(xt(p)&&xt(d))return{x:p,y:d,width:y,height:h}}return xt(s)&&xt(f)?{x:s,y:f,width:0,height:0}:xt(t)&&xt(n)?{cx:t,cy:n,startAngle:o||r||0,endAngle:i||r||0,innerRadius:l||0,outerRadius:u||c||a||0,clockWise:m}:e.viewBox?e.viewBox:{}};_h.parseViewBox=Ah,_h.renderCallByParent=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e||!e.children&&n&&!e.label)return null;var r=e.children,o=Ah(e),i=Qt(r,_h).map(function(e,n){return(0,y.cloneElement)(e,{viewBox:t||o,key:"label-".concat(n)})});if(!n)return i;var a=function(e,t){return e?!0===e?h().createElement(_h,{key:"label-implicit",viewBox:t}):Ot(e)?h().createElement(_h,{key:"label-implicit",viewBox:t,value:e}):(0,y.isValidElement)(e)?e.type===_h?(0,y.cloneElement)(e,{key:"label-implicit",viewBox:t}):h().createElement(_h,{key:"label-implicit",content:e,viewBox:t}):Nt()(e)?h().createElement(_h,{key:"label-implicit",content:e,viewBox:t}):Dt()(e)?h().createElement(_h,jh({viewBox:t},e,{key:"label-implicit"})):null:null}(e.label,t||o);return[a].concat(wh(i))};var Th=function(e,t){var n=e.alwaysShow,r=e.ifOverflow;return n&&(r="extendDomain"),r===t},Ch=n(3916),Nh=n.n(Ch),Mh=n(9747),Dh=n.n(Mh),Ih=function(e){return null};Ih.displayName="Cell";var Rh=n(8090),Lh=n.n(Rh);function Bh(e){return Bh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bh(e)}var Fh=["valueAccessor"],Uh=["data","dataKey","clockWise","id","textBreakAll"];function zh(e){return function(e){if(Array.isArray(e))return qh(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return qh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qh(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Wh(){return Wh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Wh.apply(this,arguments)}function Kh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function $h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Kh(Object(n),!0).forEach(function(t){Hh(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Kh(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Hh(e,t,n){var r;return r=function(e,t){if("object"!=Bh(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Bh(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Bh(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vh(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Gh=function(e){return Array.isArray(e.value)?Lh()(e.value):e.value};function Yh(e){var t=e.valueAccessor,n=void 0===t?Gh:t,r=Vh(e,Fh),o=r.data,i=r.dataKey,a=r.clockWise,c=r.id,l=r.textBreakAll,u=Vh(r,Uh);return o&&o.length?h().createElement(An,{className:"recharts-label-list"},o.map(function(e,t){var r=bt()(i)?n(e,t):hy(e&&e.payload,i),o=bt()(c)?{}:{id:"".concat(c,"-").concat(t)};return h().createElement(_h,Wh({},on(e,!0),u,o,{parentViewBox:e.parentViewBox,value:r,textBreakAll:l,viewBox:_h.parseViewBox(bt()(a)?e:$h($h({},e),{},{clockWise:a})),key:"label-".concat(t),index:t}))})):null}Yh.displayName="LabelList",Yh.renderCallByParent=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e||!e.children&&n&&!e.label)return null;var r=Qt(e.children,Yh).map(function(e,n){return(0,y.cloneElement)(e,{data:t,key:"labelList-".concat(n)})});if(!n)return r;var o=function(e,t){return e?!0===e?h().createElement(Yh,{key:"labelList-implicit",data:t}):h().isValidElement(e)||Nt()(e)?h().createElement(Yh,{key:"labelList-implicit",data:t,content:e}):Dt()(e)?h().createElement(Yh,Wh({data:t},e,{key:"labelList-implicit"})):null:null}(e.label,t);return[o].concat(zh(r))};var Xh=n(1331),Zh=n.n(Xh),Jh=n(3812),Qh=n.n(Jh);function em(e){return em="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},em(e)}function tm(){return tm=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},tm.apply(this,arguments)}function nm(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return rm(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rm(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rm(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function om(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function im(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?om(Object(n),!0).forEach(function(t){am(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):om(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function am(e,t,n){var r;return r=function(e,t){if("object"!=em(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=em(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==em(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var cm=function(e,t,n,r,o){var i,a=n-r;return i="M ".concat(e,",").concat(t),i+="L ".concat(e+n,",").concat(t),i+="L ".concat(e+n-a/2,",").concat(t+o),i+="L ".concat(e+n-a/2-r,",").concat(t+o),i+="L ".concat(e,",").concat(t," Z")},lm={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},um=function(e){var t=im(im({},lm),e),n=(0,y.useRef)(),r=nm((0,y.useState)(-1),2),o=r[0],i=r[1];(0,y.useEffect)(function(){if(n.current&&n.current.getTotalLength)try{var e=n.current.getTotalLength();e&&i(e)}catch(e){}},[]);var a=t.x,c=t.y,l=t.upperWidth,u=t.lowerWidth,s=t.height,f=t.className,p=t.animationEasing,d=t.animationDuration,m=t.animationBegin,v=t.isUpdateAnimationActive;if(a!==+a||c!==+c||l!==+l||u!==+u||s!==+s||0===l&&0===u||0===s)return null;var b=at("recharts-trapezoid",f);return v?h().createElement(sa,{canBegin:o>0,from:{upperWidth:0,lowerWidth:0,height:s,x:a,y:c},to:{upperWidth:l,lowerWidth:u,height:s,x:a,y:c},duration:d,animationEasing:p,isActive:v},function(e){var r=e.upperWidth,i=e.lowerWidth,a=e.height,c=e.x,l=e.y;return h().createElement(sa,{canBegin:o>0,from:"0px ".concat(-1===o?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:m,duration:d,easing:p},h().createElement("path",tm({},on(t,!0),{className:b,d:cm(c,l,r,i,a),ref:n})))}):h().createElement("g",null,h().createElement("path",tm({},on(t,!0),{className:b,d:cm(a,c,l,u,s)})))};function sm(e){return sm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sm(e)}function fm(){return fm=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fm.apply(this,arguments)}function pm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function dm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pm(Object(n),!0).forEach(function(t){ym(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pm(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ym(e,t,n){var r;return r=function(e,t){if("object"!=sm(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=sm(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==sm(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var hm=function(e){var t=e.cx,n=e.cy,r=e.radius,o=e.angle,i=e.sign,a=e.isExternal,c=e.cornerRadius,l=e.cornerIsExternal,u=c*(a?1:-1)+r,s=Math.asin(c/u)/sh,f=l?o:o+i*s,p=l?o-i*s:o;return{center:ph(t,n,u,f),circleTangency:ph(t,n,r,f),lineTangency:ph(t,n,u*Math.cos(s*sh),p),theta:s}},mm=function(e){var t=e.cx,n=e.cy,r=e.innerRadius,o=e.outerRadius,i=e.startAngle,a=function(e,t){return gt(t-e)*Math.min(Math.abs(t-e),359.999)}(i,e.endAngle),c=i+a,l=ph(t,n,o,i),u=ph(t,n,o,c),s="M ".concat(l.x,",").concat(l.y,"\n    A ").concat(o,",").concat(o,",0,\n    ").concat(+(Math.abs(a)>180),",").concat(+(i>c),",\n    ").concat(u.x,",").concat(u.y,"\n  ");if(r>0){var f=ph(t,n,r,i),p=ph(t,n,r,c);s+="L ".concat(p.x,",").concat(p.y,"\n            A ").concat(r,",").concat(r,",0,\n            ").concat(+(Math.abs(a)>180),",").concat(+(i<=c),",\n            ").concat(f.x,",").concat(f.y," Z")}else s+="L ".concat(t,",").concat(n," Z");return s},vm={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},bm=function(e){var t=dm(dm({},vm),e),n=t.cx,r=t.cy,o=t.innerRadius,i=t.outerRadius,a=t.cornerRadius,c=t.forceCornerRadius,l=t.cornerIsExternal,u=t.startAngle,s=t.endAngle,f=t.className;if(i<o||u===s)return null;var p,d=at("recharts-sector",f),y=i-o,m=St(a,y,0,!0);return p=m>0&&Math.abs(u-s)<360?function(e){var t=e.cx,n=e.cy,r=e.innerRadius,o=e.outerRadius,i=e.cornerRadius,a=e.forceCornerRadius,c=e.cornerIsExternal,l=e.startAngle,u=e.endAngle,s=gt(u-l),f=hm({cx:t,cy:n,radius:o,angle:l,sign:s,cornerRadius:i,cornerIsExternal:c}),p=f.circleTangency,d=f.lineTangency,y=f.theta,h=hm({cx:t,cy:n,radius:o,angle:u,sign:-s,cornerRadius:i,cornerIsExternal:c}),m=h.circleTangency,v=h.lineTangency,b=h.theta,g=c?Math.abs(l-u):Math.abs(l-u)-y-b;if(g<0)return a?"M ".concat(d.x,",").concat(d.y,"\n        a").concat(i,",").concat(i,",0,0,1,").concat(2*i,",0\n        a").concat(i,",").concat(i,",0,0,1,").concat(2*-i,",0\n      "):mm({cx:t,cy:n,innerRadius:r,outerRadius:o,startAngle:l,endAngle:u});var w="M ".concat(d.x,",").concat(d.y,"\n    A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,"\n    A").concat(o,",").concat(o,",0,").concat(+(g>180),",").concat(+(s<0),",").concat(m.x,",").concat(m.y,"\n    A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(v.x,",").concat(v.y,"\n  ");if(r>0){var x=hm({cx:t,cy:n,radius:r,angle:l,sign:s,isExternal:!0,cornerRadius:i,cornerIsExternal:c}),O=x.circleTangency,k=x.lineTangency,E=x.theta,S=hm({cx:t,cy:n,radius:r,angle:u,sign:-s,isExternal:!0,cornerRadius:i,cornerIsExternal:c}),j=S.circleTangency,P=S.lineTangency,_=S.theta,A=c?Math.abs(l-u):Math.abs(l-u)-E-_;if(A<0&&0===i)return"".concat(w,"L").concat(t,",").concat(n,"Z");w+="L".concat(P.x,",").concat(P.y,"\n      A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(j.x,",").concat(j.y,"\n      A").concat(r,",").concat(r,",0,").concat(+(A>180),",").concat(+(s>0),",").concat(O.x,",").concat(O.y,"\n      A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(k.x,",").concat(k.y,"Z")}else w+="L".concat(t,",").concat(n,"Z");return w}({cx:n,cy:r,innerRadius:o,outerRadius:i,cornerRadius:Math.min(m,y/2),forceCornerRadius:c,cornerIsExternal:l,startAngle:u,endAngle:s}):mm({cx:n,cy:r,innerRadius:o,outerRadius:i,startAngle:u,endAngle:s}),h().createElement("path",fm({},on(t,!0),{className:d,d:p,role:"img"}))},gm=["option","shapeType","propTransformer","activeClassName","isActive"];function wm(e){return wm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wm(e)}function xm(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Om(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function km(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Om(Object(n),!0).forEach(function(t){Em(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Om(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Em(e,t,n){var r;return r=function(e,t){if("object"!=wm(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=wm(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==wm(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Sm(e,t){return km(km({},t),e)}function jm(e){var t=e.shapeType,n=e.elementProps;switch(t){case"rectangle":return h().createElement(xa,n);case"trapezoid":return h().createElement(um,n);case"sector":return h().createElement(bm,n);case"symbols":if(function(e){return"symbols"===e}(t))return h().createElement(io,n);break;default:return null}}function Pm(e){var t,n=e.option,r=e.shapeType,o=e.propTransformer,i=void 0===o?Sm:o,a=e.activeClassName,c=void 0===a?"recharts-active-shape":a,l=e.isActive,u=xm(e,gm);if((0,y.isValidElement)(n))t=(0,y.cloneElement)(n,km(km({},u),function(e){return(0,y.isValidElement)(e)?e.props:e}(n)));else if(Nt()(n))t=n(u);else if(Zh()(n)&&!Qh()(n)){var s=i(n,u);t=h().createElement(jm,{shapeType:r,elementProps:s})}else{var f=u;t=h().createElement(jm,{shapeType:r,elementProps:f})}return l?h().createElement(An,{className:c},t):t}function _m(e,t){return null!=t&&"trapezoids"in e.props}function Am(e,t){return null!=t&&"sectors"in e.props}function Tm(e,t){return null!=t&&"points"in e.props}function Cm(e,t){var n,r,o=e.x===(null==t||null===(n=t.labelViewBox)||void 0===n?void 0:n.x)||e.x===t.x,i=e.y===(null==t||null===(r=t.labelViewBox)||void 0===r?void 0:r.y)||e.y===t.y;return o&&i}function Nm(e,t){var n=e.endAngle===t.endAngle,r=e.startAngle===t.startAngle;return n&&r}function Mm(e,t){var n=e.x===t.x,r=e.y===t.y,o=e.z===t.z;return n&&r&&o}function Dm(e){var t=e.activeTooltipItem,n=e.graphicalItem,r=e.itemData,o=function(e,t){var n;return _m(e,t)?n="trapezoids":Am(e,t)?n="sectors":Tm(e,t)&&(n="points"),n}(n,t),i=function(e,t){var n,r;return _m(e,t)?null===(n=t.tooltipPayload)||void 0===n||null===(n=n[0])||void 0===n||null===(n=n.payload)||void 0===n?void 0:n.payload:Am(e,t)?null===(r=t.tooltipPayload)||void 0===r||null===(r=r[0])||void 0===r||null===(r=r.payload)||void 0===r?void 0:r.payload:Tm(e,t)?t.payload:{}}(n,t),a=r.filter(function(e,r){var a=yd()(i,e),c=n.props[o].filter(function(e){var r=function(e,t){var n;return _m(e,t)?n=Cm:Am(e,t)?n=Nm:Tm(e,t)&&(n=Mm),n}(n,t);return r(e,t)}),l=n.props[o].indexOf(c[c.length-1]);return a&&r===l});return r.indexOf(a[a.length-1])}var Im=["x","y"];function Rm(e){return Rm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rm(e)}function Lm(){return Lm=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Lm.apply(this,arguments)}function Bm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Fm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Bm(Object(n),!0).forEach(function(t){Um(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bm(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Um(e,t,n){var r;return r=function(e,t){if("object"!=Rm(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Rm(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Rm(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zm(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qm(e,t){var n=e.x,r=e.y,o=zm(e,Im),i="".concat(n),a=parseInt(i,10),c="".concat(r),l=parseInt(c,10),u="".concat(t.height||o.height),s=parseInt(u,10),f="".concat(t.width||o.width),p=parseInt(f,10);return Fm(Fm(Fm(Fm(Fm({},t),o),a?{x:a}:{}),l?{y:l}:{}),{},{height:s,width:p,name:t.name,radius:t.radius})}function Wm(e){return h().createElement(Pm,Lm({shapeType:"rectangle",propTransformer:qm,activeClassName:"recharts-active-bar"},e))}var Km,$m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return function(n,r){if("number"==typeof e)return e;var o=xt(n)||function(e){return bt()(e)}(n);return o?e(n,r):(o||xn(!1),t)}},Hm=["value","background"];function Vm(e){return Vm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vm(e)}function Gm(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ym(){return Ym=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ym.apply(this,arguments)}function Xm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xm(Object(n),!0).forEach(function(t){rv(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xm(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Jm(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ov(r.key),r)}}function Qm(e,t,n){return t=tv(t),function(e,t){if(t&&("object"===Vm(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ev()?Reflect.construct(t,n||[],tv(e).constructor):t.apply(e,n))}function ev(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ev=function(){return!!e})()}function tv(e){return tv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},tv(e)}function nv(e,t){return nv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},nv(e,t)}function rv(e,t,n){return(t=ov(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ov(e){var t=function(e,t){if("object"!=Vm(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Vm(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Vm(t)?t:t+""}var iv=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return rv(e=Qm(this,t,[].concat(r)),"state",{isAnimationFinished:!1}),rv(e,"id",Et("recharts-bar-")),rv(e,"handleAnimationEnd",function(){var t=e.props.onAnimationEnd;e.setState({isAnimationFinished:!0}),t&&t()}),rv(e,"handleAnimationStart",function(){var t=e.props.onAnimationStart;e.setState({isAnimationFinished:!1}),t&&t()}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nv(e,t)}(t,e),n=t,r=[{key:"renderRectanglesStatically",value:function(e){var t=this,n=this.props,r=n.shape,o=n.dataKey,i=n.activeIndex,a=n.activeBar,c=on(this.props,!1);return e&&e.map(function(e,n){var l=n===i,u=l?a:r,s=Zm(Zm(Zm({},c),e),{},{isActive:l,option:u,index:n,dataKey:o,onAnimationStart:t.handleAnimationStart,onAnimationEnd:t.handleAnimationEnd});return h().createElement(An,Ym({className:"recharts-bar-rectangle"},Wt(t.props,e,n),{key:"rectangle-".concat(null==e?void 0:e.x,"-").concat(null==e?void 0:e.y,"-").concat(null==e?void 0:e.value,"-").concat(n)}),h().createElement(Wm,s))})}},{key:"renderRectanglesWithAnimation",value:function(){var e=this,t=this.props,n=t.data,r=t.layout,o=t.isAnimationActive,i=t.animationBegin,a=t.animationDuration,c=t.animationEasing,l=t.animationId,u=this.state.prevData;return h().createElement(sa,{begin:i,duration:a,isActive:o,easing:c,from:{t:0},to:{t:1},key:"bar-".concat(l),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(t){var o=t.t,i=n.map(function(e,t){var n=u&&u[t];if(n){var i=Pt(n.x,e.x),a=Pt(n.y,e.y),c=Pt(n.width,e.width),l=Pt(n.height,e.height);return Zm(Zm({},e),{},{x:i(o),y:a(o),width:c(o),height:l(o)})}if("horizontal"===r){var s=Pt(0,e.height)(o);return Zm(Zm({},e),{},{y:e.y+e.height-s,height:s})}var f=Pt(0,e.width)(o);return Zm(Zm({},e),{},{width:f})});return h().createElement(An,null,e.renderRectanglesStatically(i))})}},{key:"renderRectangles",value:function(){var e=this.props,t=e.data,n=e.isAnimationActive,r=this.state.prevData;return!(n&&t&&t.length)||r&&yd()(r,t)?this.renderRectanglesStatically(t):this.renderRectanglesWithAnimation()}},{key:"renderBackground",value:function(){var e=this,t=this.props,n=t.data,r=t.dataKey,o=t.activeIndex,i=on(this.props.background,!1);return n.map(function(t,n){t.value;var a=t.background,c=Gm(t,Hm);if(!a)return null;var l=Zm(Zm(Zm(Zm(Zm({},c),{},{fill:"#eee"},a),i),Wt(e.props,t,n)),{},{onAnimationStart:e.handleAnimationStart,onAnimationEnd:e.handleAnimationEnd,dataKey:r,index:n,className:"recharts-bar-background-rectangle"});return h().createElement(Wm,Ym({key:"background-bar-".concat(n),option:e.props.background,isActive:n===o},l))})}},{key:"renderErrorBar",value:function(e,t){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,r=n.data,o=n.xAxis,i=n.yAxis,a=n.layout,c=Qt(n.children,ry);if(!c)return null;var l="vertical"===a?r[0].height/2:r[0].width/2,u=function(e,t){var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:hy(e,t)}},s={clipPath:e?"url(#clipPath-".concat(t,")"):null};return h().createElement(An,s,c.map(function(e){return h().cloneElement(e,{key:"error-bar-".concat(t,"-").concat(e.props.dataKey),data:r,xAxis:o,yAxis:i,layout:a,offset:l,dataPointFormatter:u})}))}},{key:"render",value:function(){var e=this.props,t=e.hide,n=e.data,r=e.className,o=e.xAxis,i=e.yAxis,a=e.left,c=e.top,l=e.width,u=e.height,s=e.isAnimationActive,f=e.background,p=e.id;if(t||!n||!n.length)return null;var d=this.state.isAnimationFinished,y=at("recharts-bar",r),m=o&&o.allowDataOverflow,v=i&&i.allowDataOverflow,b=m||v,g=bt()(p)?this.id:p;return h().createElement(An,{className:y},m||v?h().createElement("defs",null,h().createElement("clipPath",{id:"clipPath-".concat(g)},h().createElement("rect",{x:m?a:a-l/2,y:v?c:c-u/2,width:m?l:2*l,height:v?u:2*u}))):null,h().createElement(An,{className:"recharts-bar-rectangles",clipPath:b?"url(#clipPath-".concat(g,")"):null},f?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(b,g),(!s||d)&&Yh.renderCallByParent(this.props,n))}}],o=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curData:e.data,prevData:t.curData}:e.data!==t.curData?{curData:e.data}:null}}],r&&Jm(n.prototype,r),o&&Jm(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function av(e){return av="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},av(e)}function cv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fv(r.key),r)}}function lv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function uv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?lv(Object(n),!0).forEach(function(t){sv(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):lv(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function sv(e,t,n){return(t=fv(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fv(e){var t=function(e,t){if("object"!=av(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=av(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==av(t)?t:t+""}Km=iv,rv(iv,"displayName","Bar"),rv(iv,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!nr.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"}),rv(iv,"getComposedData",function(e){var t=e.props,n=e.item,r=e.barPosition,o=e.bandSize,i=e.xAxis,a=e.yAxis,c=e.xAxisTicks,l=e.yAxisTicks,u=e.stackedData,s=e.dataStartIndex,f=e.displayedData,p=e.offset,d=function(e,t){if(!e)return null;for(var n=0,r=e.length;n<r;n++)if(e[n].item===t)return e[n].position;return null}(r,n);if(!d)return null;var y=t.layout,h=n.type.defaultProps,m=void 0!==h?Zm(Zm({},h),n.props):n.props,v=m.dataKey,b=m.children,g=m.minPointSize,w="horizontal"===y?a:i,x=u?w.scale.domain():null,O=function(e){var t=e.numericAxis,n=t.scale.domain();if("number"===t.type){var r=Math.min(n[0],n[1]),o=Math.max(n[0],n[1]);return r<=0&&o>=0?0:o<0?o:r}return n[0]}({numericAxis:w}),k=Qt(b,Ih),E=f.map(function(e,t){var r,f,p,h,m,b;u?r=function(e,t){if(!t||2!==t.length||!xt(t[0])||!xt(t[1]))return e;var n=Math.min(t[0],t[1]),r=Math.max(t[0],t[1]),o=[e[0],e[1]];return(!xt(e[0])||e[0]<n)&&(o[0]=n),(!xt(e[1])||e[1]>r)&&(o[1]=r),o[0]>r&&(o[0]=r),o[1]<n&&(o[1]=n),o}(u[s+t],x):(r=hy(e,v),Array.isArray(r)||(r=[O,r]));var w=$m(g,Km.defaultProps.minPointSize)(r[1],t);if("horizontal"===y){var E,S=[a.scale(r[0]),a.scale(r[1])],j=S[0],P=S[1];f=Ny({axis:i,ticks:c,bandSize:o,offset:d.offset,entry:e,index:t}),p=null!==(E=null!=P?P:j)&&void 0!==E?E:void 0,h=d.size;var _=j-P;if(m=Number.isNaN(_)?0:_,b={x:f,y:a.y,width:h,height:a.height},Math.abs(w)>0&&Math.abs(m)<Math.abs(w)){var A=gt(m||w)*(Math.abs(w)-Math.abs(m));p-=A,m+=A}}else{var T=[i.scale(r[0]),i.scale(r[1])],C=T[0],N=T[1];if(f=C,p=Ny({axis:a,ticks:l,bandSize:o,offset:d.offset,entry:e,index:t}),h=N-C,m=d.size,b={x:i.x,y:p,width:i.width,height:m},Math.abs(w)>0&&Math.abs(h)<Math.abs(w))h+=gt(h||w)*(Math.abs(w)-Math.abs(h))}return Zm(Zm(Zm({},e),{},{x:f,y:p,width:h,height:m,value:u?r:r[1],payload:e,background:b},k&&k[t]&&k[t].props),{},{tooltipPayload:[Fy(n,e)],tooltipPosition:{x:f+h/2,y:p+m/2}})});return Zm({data:E,layout:y},p)});var pv=function(e,t,n,r,o){var i=e.width,a=e.height,c=e.layout,l=e.children,u=Object.keys(t),s={left:n.left,leftMirror:n.left,right:i-n.right,rightMirror:i-n.right,top:n.top,topMirror:n.top,bottom:a-n.bottom,bottomMirror:a-n.bottom},f=!!en(l,iv);return u.reduce(function(i,a){var l,u,p,d,y,h=t[a],m=h.orientation,v=h.domain,b=h.padding,g=void 0===b?{}:b,w=h.mirror,x=h.reversed,O="".concat(m).concat(w?"Mirror":"");if("number"===h.type&&("gap"===h.padding||"no-gap"===h.padding)){var k=v[1]-v[0],E=1/0,S=h.categoricalDomain.sort(At);if(S.forEach(function(e,t){t>0&&(E=Math.min((e||0)-(S[t-1]||0),E))}),Number.isFinite(E)){var j=E/k,P="vertical"===h.layout?n.height:n.width;if("gap"===h.padding&&(l=j*P/2),"no-gap"===h.padding){var _=St(e.barCategoryGap,j*P),A=j*P/2;l=A-_-(A-_)/P*_}}}u="xAxis"===r?[n.left+(g.left||0)+(l||0),n.left+n.width-(g.right||0)-(l||0)]:"yAxis"===r?"horizontal"===c?[n.top+n.height-(g.bottom||0),n.top+(g.top||0)]:[n.top+(g.top||0)+(l||0),n.top+n.height-(g.bottom||0)-(l||0)]:h.range,x&&(u=[u[1],u[0]]);var T=Sy(h,o,f),C=T.scale,N=T.realScaleType;C.domain(v).range(u),Py(C);var M=Ty(C,uv(uv({},h),{},{realScaleType:N}));"xAxis"===r?(y="top"===m&&!w||"bottom"===m&&w,p=n.left,d=s[O]-y*h.height):"yAxis"===r&&(y="left"===m&&!w||"right"===m&&w,p=s[O]-y*h.width,d=n.top);var D=uv(uv(uv({},h),M),{},{realScaleType:N,x:p,y:d,scale:C,width:"xAxis"===r?n.width:h.width,height:"yAxis"===r?n.height:h.height});return D.bandSize=Ly(D,M),h.hide||"xAxis"!==r?h.hide||(s[O]+=(y?-1:1)*D.width):s[O]+=(y?-1:1)*D.height,uv(uv({},i),{},sv({},a,D))},{})},dv=function(e,t){var n=e.x,r=e.y,o=t.x,i=t.y;return{x:Math.min(n,o),y:Math.min(r,i),width:Math.abs(o-n),height:Math.abs(i-r)}},yv=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.scale=t}return t=e,n=[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.bandAware,r=t.position;if(void 0!==e){if(r)switch(r){case"start":default:return this.scale(e);case"middle":var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(e)+o;case"end":var i=this.bandwidth?this.bandwidth():0;return this.scale(e)+i}if(n){var a=this.bandwidth?this.bandwidth()/2:0;return this.scale(e)+a}return this.scale(e)}}},{key:"isInRange",value:function(e){var t=this.range(),n=t[0],r=t[t.length-1];return n<=r?e>=n&&e<=r:e>=r&&e<=n}}],r=[{key:"create",value:function(t){return new e(t)}}],n&&cv(t.prototype,n),r&&cv(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,r}();sv(yv,"EPS",1e-4);var hv=function(e){var t=Object.keys(e).reduce(function(t,n){return uv(uv({},t),{},sv({},n,yv.create(e[n])))},{});return uv(uv({},t),{},{apply:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.bandAware,o=n.position;return Nh()(e,function(e,n){return t[n].apply(e,{bandAware:r,position:o})})},isInRange:function(e){return Dh()(e,function(e,n){return t[n].isInRange(e)})}})};function mv(){return mv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mv.apply(this,arguments)}function vv(e){return vv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vv(e)}function bv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function gv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bv(Object(n),!0).forEach(function(t){Sv(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bv(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function wv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,jv(r.key),r)}}function xv(e,t,n){return t=kv(t),function(e,t){if(t&&("object"===vv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Ov()?Reflect.construct(t,n||[],kv(e).constructor):t.apply(e,n))}function Ov(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Ov=function(){return!!e})()}function kv(e){return kv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},kv(e)}function Ev(e,t){return Ev=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ev(e,t)}function Sv(e,t,n){return(t=jv(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jv(e){var t=function(e,t){if("object"!=vv(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=vv(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==vv(t)?t:t+""}var Pv=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),xv(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ev(e,t)}(t,e),n=t,r=[{key:"render",value:function(){var e=this.props,n=e.x,r=e.y,o=e.r,i=e.alwaysShow,a=e.clipPathId,c=Ot(n),l=Ot(r);if(Tt(void 0===i,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!c||!l)return null;var u=function(e){var t=e.x,n=e.y,r=e.xAxis,o=e.yAxis,i=hv({x:r.scale,y:o.scale}),a=i.apply({x:t,y:n},{bandAware:!0});return Th(e,"discard")&&!i.isInRange(a)?null:a}(this.props);if(!u)return null;var s=u.x,f=u.y,p=this.props,d=p.shape,y=p.className,m=gv(gv({clipPath:Th(this.props,"hidden")?"url(#".concat(a,")"):void 0},on(this.props,!0)),{},{cx:s,cy:f});return h().createElement(An,{className:at("recharts-reference-dot",y)},t.renderDot(d,m),_h.renderCallByParent(this.props,{x:s-o,y:f-o,width:2*o,height:2*o}))}}],r&&wv(n.prototype,r),o&&wv(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h().Component);Sv(Pv,"displayName","ReferenceDot"),Sv(Pv,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1}),Sv(Pv,"renderDot",function(e,t){return h().isValidElement(e)?h().cloneElement(e,t):Nt()(e)?e(t):h().createElement(Do,mv({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"}))});var _v=n(2426),Av=n.n(_v),Tv=n(7309),Cv=n.n(Tv),Nv=n(104),Mv=n.n(Nv)()(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")});var Dv=(0,y.createContext)(void 0),Iv=(0,y.createContext)(void 0),Rv=(0,y.createContext)(void 0),Lv=(0,y.createContext)({}),Bv=(0,y.createContext)(void 0),Fv=(0,y.createContext)(0),Uv=(0,y.createContext)(0),zv=function(e){var t=e.state,n=t.xAxisMap,r=t.yAxisMap,o=t.offset,i=e.clipPathId,a=e.children,c=e.width,l=e.height,u=Mv(o);return h().createElement(Dv.Provider,{value:n},h().createElement(Iv.Provider,{value:r},h().createElement(Lv.Provider,{value:o},h().createElement(Rv.Provider,{value:u},h().createElement(Bv.Provider,{value:i},h().createElement(Fv.Provider,{value:l},h().createElement(Uv.Provider,{value:c},a)))))))};var qv=function(e){var t=(0,y.useContext)(Dv);null==t&&xn(!1);var n=t[e];return null==n&&xn(!1),n},Wv=function(e){var t=(0,y.useContext)(Iv);null==t&&xn(!1);var n=t[e];return null==n&&xn(!1),n},Kv=function(){return(0,y.useContext)(Uv)},$v=function(){return(0,y.useContext)(Fv)};function Hv(e){return Hv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hv(e)}function Vv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,tb(r.key),r)}}function Gv(e,t,n){return t=Xv(t),function(e,t){if(t&&("object"===Hv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Yv()?Reflect.construct(t,n||[],Xv(e).constructor):t.apply(e,n))}function Yv(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Yv=function(){return!!e})()}function Xv(e){return Xv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Xv(e)}function Zv(e,t){return Zv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Zv(e,t)}function Jv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Qv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jv(Object(n),!0).forEach(function(t){eb(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Jv(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function eb(e,t,n){return(t=tb(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tb(e){var t=function(e,t){if("object"!=Hv(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Hv(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Hv(t)?t:t+""}function nb(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return rb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rb(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rb(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ob(){return ob=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ob.apply(this,arguments)}function ib(e){var t=e.x,n=e.y,r=e.segment,o=e.xAxisId,i=e.yAxisId,a=e.shape,c=e.className,l=e.alwaysShow,u=(0,y.useContext)(Bv),s=qv(o),f=Wv(i),p=(0,y.useContext)(Rv);if(!u||!p)return null;Tt(void 0===l,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var d=function(e,t,n,r,o,i,a,c,l){var u=o.x,s=o.y,f=o.width,p=o.height;if(n){var d=l.y,y=e.y.apply(d,{position:i});if(Th(l,"discard")&&!e.y.isInRange(y))return null;var h=[{x:u+f,y},{x:u,y}];return"left"===c?h.reverse():h}if(t){var m=l.x,v=e.x.apply(m,{position:i});if(Th(l,"discard")&&!e.x.isInRange(v))return null;var b=[{x:v,y:s+p},{x:v,y:s}];return"top"===a?b.reverse():b}if(r){var g=l.segment.map(function(t){return e.apply(t,{position:i})});return Th(l,"discard")&&Av()(g,function(t){return!e.isInRange(t)})?null:g}return null}(hv({x:s.scale,y:f.scale}),Ot(t),Ot(n),r&&2===r.length,p,e.position,s.orientation,f.orientation,e);if(!d)return null;var m=nb(d,2),v=m[0],b=v.x,g=v.y,w=m[1],x=w.x,O=w.y,k=Qv(Qv({clipPath:Th(e,"hidden")?"url(#".concat(u,")"):void 0},on(e,!0)),{},{x1:b,y1:g,x2:x,y2:O});return h().createElement(An,{className:at("recharts-reference-line",c)},function(e,t){return h().isValidElement(e)?h().cloneElement(e,t):Nt()(e)?e(t):h().createElement("line",ob({},t,{className:"recharts-reference-line-line"}))}(a,k),_h.renderCallByParent(e,function(e){var t=e.x1,n=e.y1,r=e.x2,o=e.y2;return dv({x:t,y:n},{x:r,y:o})}({x1:b,y1:g,x2:x,y2:O})))}var ab=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Gv(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Zv(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){return h().createElement(ib,this.props)}}])&&Vv(n.prototype,r),o&&Vv(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h().Component);function cb(){return cb=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cb.apply(this,arguments)}function lb(e){return lb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lb(e)}function ub(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function sb(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ub(Object(n),!0).forEach(function(t){mb(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ub(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function fb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,vb(r.key),r)}}function pb(e,t,n){return t=yb(t),function(e,t){if(t&&("object"===lb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,db()?Reflect.construct(t,n||[],yb(e).constructor):t.apply(e,n))}function db(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(db=function(){return!!e})()}function yb(e){return yb=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},yb(e)}function hb(e,t){return hb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},hb(e,t)}function mb(e,t,n){return(t=vb(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vb(e){var t=function(e,t){if("object"!=lb(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=lb(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==lb(t)?t:t+""}eb(ab,"displayName","ReferenceLine"),eb(ab,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});var bb=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),pb(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&hb(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){var e=this.props,n=e.x1,r=e.x2,o=e.y1,i=e.y2,a=e.className,c=e.alwaysShow,l=e.clipPathId;Tt(void 0===c,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var u=Ot(n),s=Ot(r),f=Ot(o),p=Ot(i),d=this.props.shape;if(!(u||s||f||p||d))return null;var y=function(e,t,n,r,o){var i=o.x1,a=o.x2,c=o.y1,l=o.y2,u=o.xAxis,s=o.yAxis;if(!u||!s)return null;var f=hv({x:u.scale,y:s.scale}),p={x:e?f.x.apply(i,{position:"start"}):f.x.rangeMin,y:n?f.y.apply(c,{position:"start"}):f.y.rangeMin},d={x:t?f.x.apply(a,{position:"end"}):f.x.rangeMax,y:r?f.y.apply(l,{position:"end"}):f.y.rangeMax};return!Th(o,"discard")||f.isInRange(p)&&f.isInRange(d)?dv(p,d):null}(u,s,f,p,this.props);if(!y&&!d)return null;var m=Th(this.props,"hidden")?"url(#".concat(l,")"):void 0;return h().createElement(An,{className:at("recharts-reference-area",a)},t.renderRect(d,sb(sb({clipPath:m},on(this.props,!0)),y)),_h.renderCallByParent(this.props,y))}}])&&fb(n.prototype,r),o&&fb(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(h().Component);function gb(e){return function(e){if(Array.isArray(e))return wb(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return wb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return wb(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function wb(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}mb(bb,"displayName","ReferenceArea"),mb(bb,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1}),mb(bb,"renderRect",function(e,t){return h().isValidElement(e)?h().cloneElement(e,t):Nt()(e)?e(t):h().createElement(xa,cb({},t,{className:"recharts-reference-area-rect"}))});var xb=function(e,t,n,r,o){var i=Qt(e,ab),a=Qt(e,Pv),c=[].concat(gb(i),gb(a)),l=Qt(e,bb),u="".concat(r,"Id"),s=r[0],f=t;if(c.length&&(f=c.reduce(function(e,t){if(t.props[u]===n&&Th(t.props,"extendDomain")&&xt(t.props[s])){var r=t.props[s];return[Math.min(e[0],r),Math.max(e[1],r)]}return e},f)),l.length){var p="".concat(s,"1"),d="".concat(s,"2");f=l.reduce(function(e,t){if(t.props[u]===n&&Th(t.props,"extendDomain")&&xt(t.props[p])&&xt(t.props[d])){var r=t.props[p],o=t.props[d];return[Math.min(e[0],r,o),Math.max(e[1],r,o)]}return e},f)}return o&&o.length&&(f=o.reduce(function(e,t){return xt(t)?[Math.min(e[0],t),Math.max(e[1],t)]:e},f)),f},Ob=n(228),kb=new(n.n(Ob)()),Eb="recharts.syncMouseEvents";function Sb(e){return Sb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sb(e)}function jb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_b(r.key),r)}}function Pb(e,t,n){return(t=_b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _b(e){var t=function(e,t){if("object"!=Sb(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Sb(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Sb(t)?t:t+""}var Ab=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Pb(this,"activeIndex",0),Pb(this,"coordinateList",[]),Pb(this,"layout","horizontal")},(t=[{key:"setDetails",value:function(e){var t,n=e.coordinateList,r=void 0===n?null:n,o=e.container,i=void 0===o?null:o,a=e.layout,c=void 0===a?null:a,l=e.offset,u=void 0===l?null:l,s=e.mouseHandlerCallback,f=void 0===s?null:s;this.coordinateList=null!==(t=null!=r?r:this.coordinateList)&&void 0!==t?t:[],this.container=null!=i?i:this.container,this.layout=null!=c?c:this.layout,this.offset=null!=u?u:this.offset,this.mouseHandlerCallback=null!=f?f:this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(e){if(0!==this.coordinateList.length)switch(e.key){case"ArrowRight":if("horizontal"!==this.layout)return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break;case"ArrowLeft":if("horizontal"!==this.layout)return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse()}}},{key:"setIndex",value:function(e){this.activeIndex=e}},{key:"spoofMouse",value:function(){var e,t;if("horizontal"===this.layout&&0!==this.coordinateList.length){var n=this.container.getBoundingClientRect(),r=n.x,o=n.y,i=n.height,a=this.coordinateList[this.activeIndex].coordinate,c=(null===(e=window)||void 0===e?void 0:e.scrollX)||0,l=(null===(t=window)||void 0===t?void 0:t.scrollY)||0,u=r+a+c,s=o+this.offset.top+i/2+l;this.mouseHandlerCallback({pageX:u,pageY:s})}}}])&&jb(e.prototype,t),n&&jb(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();function Tb(){}function Cb(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Nb(e){this._context=e}function Mb(e){return new Nb(e)}function Db(e){this._context=e}function Ib(e){return new Db(e)}function Rb(e){this._context=e}function Lb(e){return new Rb(e)}n.dn(Tb),n.dn(Mb),Nb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Cb(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Cb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},n.dn(Ib),Db.prototype={areaStart:Tb,areaEnd:Tb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Cb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},n.dn(Lb),Rb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Cb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};class Bb{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t)}this._x0=e,this._y0=t}}function Fb(e){this._context=e}function Ub(e){return new Fb(e)}function zb(e){this._context=e}function qb(e){return new zb(e)}function Wb(e){return e<0?-1:1}function Kb(e,t,n){var r=e._x1-e._x0,o=t-e._x1,i=(e._y1-e._y0)/(r||o<0&&-0),a=(n-e._y1)/(o||r<0&&-0),c=(i*o+a*r)/(r+o);return(Wb(i)+Wb(a))*Math.min(Math.abs(i),Math.abs(a),.5*Math.abs(c))||0}function $b(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function Hb(e,t,n){var r=e._x0,o=e._y0,i=e._x1,a=e._y1,c=(i-r)/3;e._context.bezierCurveTo(r+c,o+c*t,i-c,a-c*n,i,a)}function Vb(e){this._context=e}function Gb(e){this._context=new Yb(e)}function Yb(e){this._context=e}function Xb(e){this._context=e}function Zb(e){var t,n,r=e.length-1,o=new Array(r),i=new Array(r),a=new Array(r);for(o[0]=0,i[0]=2,a[0]=e[0]+2*e[1],t=1;t<r-1;++t)o[t]=1,i[t]=4,a[t]=4*e[t]+2*e[t+1];for(o[r-1]=2,i[r-1]=7,a[r-1]=8*e[r-1]+e[r],t=1;t<r;++t)n=o[t]/i[t-1],i[t]-=n,a[t]-=n*a[t-1];for(o[r-1]=a[r-1]/i[r-1],t=r-2;t>=0;--t)o[t]=(a[t]-o[t+1])/i[t];for(i[r-1]=(e[r]+o[r-1])/2,t=0;t<r-1;++t)i[t]=2*e[t+1]-o[t+1];return[o,i]}function Jb(e){return new Xb(e)}function Qb(e,t){this._context=e,this._t=t}function eg(e){return new Qb(e,.5)}function tg(e){return e[0]}function ng(e){return e[1]}function rg(e,t){var n=qr(!0),r=null,o=qb,i=null,a=Yr(c);function c(c){var l,u,s,f=(c=nd(c)).length,p=!1;for(null==r&&(i=o(s=a())),l=0;l<=f;++l)!(l<f&&n(u=c[l],l,c))===p&&((p=!p)?i.lineStart():i.lineEnd()),p&&i.point(+e(u,l,c),+t(u,l,c));if(s)return i=null,s+""||null}return e="function"==typeof e?e:void 0===e?tg:qr(e),t="function"==typeof t?t:void 0===t?ng:qr(t),c.x=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),c):e},c.y=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),c):t},c.defined=function(e){return arguments.length?(n="function"==typeof e?e:qr(!!e),c):n},c.curve=function(e){return arguments.length?(o=e,null!=r&&(i=o(r)),c):o},c.context=function(e){return arguments.length?(null==e?r=i=null:i=o(r=e),c):r},c}function og(e,t,n){var r=null,o=qr(!0),i=null,a=qb,c=null,l=Yr(u);function u(u){var s,f,p,d,y,h=(u=nd(u)).length,m=!1,v=new Array(h),b=new Array(h);for(null==i&&(c=a(y=l())),s=0;s<=h;++s){if(!(s<h&&o(d=u[s],s,u))===m)if(m=!m)f=s,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),p=s-1;p>=f;--p)c.point(v[p],b[p]);c.lineEnd(),c.areaEnd()}m&&(v[s]=+e(d,s,u),b[s]=+t(d,s,u),c.point(r?+r(d,s,u):v[s],n?+n(d,s,u):b[s]))}if(y)return c=null,y+""||null}function s(){return rg().defined(o).curve(a).context(i)}return e="function"==typeof e?e:void 0===e?tg:qr(+e),t="function"==typeof t?t:qr(void 0===t?0:+t),n="function"==typeof n?n:void 0===n?ng:qr(+n),u.x=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),r=null,u):e},u.x0=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),u):e},u.x1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:qr(+e),u):r},u.y=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),n=null,u):t},u.y0=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),u):t},u.y1=function(e){return arguments.length?(n=null==e?null:"function"==typeof e?e:qr(+e),u):n},u.lineX0=u.lineY0=function(){return s().x(e).y(t)},u.lineY1=function(){return s().x(e).y(n)},u.lineX1=function(){return s().x(r).y(t)},u.defined=function(e){return arguments.length?(o="function"==typeof e?e:qr(!!e),u):o},u.curve=function(e){return arguments.length?(a=e,null!=i&&(c=a(i)),u):a},u.context=function(e){return arguments.length?(null==e?i=c=null:c=a(i=e),u):i},u}function ig(e){return ig="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ig(e)}function ag(){return ag=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ag.apply(this,arguments)}function cg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function lg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cg(Object(n),!0).forEach(function(t){ug(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ug(e,t,n){var r;return r=function(e,t){if("object"!=ig(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ig(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==ig(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(Ub),Fb.prototype={areaStart:Tb,areaEnd:Tb,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}},n.dn(qb),zb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}},Vb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Hb(this,this._t0,$b(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(t=+t,(e=+e)!==this._x1||t!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Hb(this,$b(this,n=Kb(this,e,t)),n);break;default:Hb(this,this._t0,n=Kb(this,e,t))}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}},(Gb.prototype=Object.create(Vb.prototype)).point=function(e,t){Vb.prototype.point.call(this,t,e)},Yb.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,o,i){this._context.bezierCurveTo(t,e,r,n,i,o)}},n.dn(Jb),Xb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),2===n)this._context.lineTo(e[1],t[1]);else for(var r=Zb(e),o=Zb(t),i=0,a=1;a<n;++i,++a)this._context.bezierCurveTo(r[0][i],o[0][i],r[1][i],o[1][i],e[a],t[a]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}},n.dn(eg),Qb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}},n.dn(rg),n.dn(og);var sg={curveBasisClosed:Ib,curveBasisOpen:Lb,curveBasis:Mb,curveBumpX:function(e){return new Bb(e,!0)},curveBumpY:function(e){return new Bb(e,!1)},curveLinearClosed:Ub,curveLinear:qb,curveMonotoneX:function(e){return new Vb(e)},curveMonotoneY:function(e){return new Gb(e)},curveNatural:Jb,curveStep:eg,curveStepAfter:function(e){return new Qb(e,1)},curveStepBefore:function(e){return new Qb(e,0)}},fg=function(e){return e.x===+e.x&&e.y===+e.y},pg=function(e){return e.x},dg=function(e){return e.y},yg=function(e){var t,n=e.type,r=void 0===n?"linear":n,o=e.points,i=void 0===o?[]:o,a=e.baseLine,c=e.layout,l=e.connectNulls,u=void 0!==l&&l,s=function(e,t){if(Nt()(e))return e;var n="curve".concat(gr()(e));return"curveMonotone"!==n&&"curveBump"!==n||!t?sg[n]||qb:sg["".concat(n).concat("vertical"===t?"Y":"X")]}(r,c),f=u?i.filter(function(e){return fg(e)}):i;if(Array.isArray(a)){var p=u?a.filter(function(e){return fg(e)}):a,d=f.map(function(e,t){return lg(lg({},e),{},{base:p[t]})});return(t="vertical"===c?og().y(dg).x1(pg).x0(function(e){return e.base.x}):og().x(pg).y1(dg).y0(function(e){return e.base.y})).defined(fg).curve(s),t(d)}return(t="vertical"===c&&xt(a)?og().y(dg).x1(pg).x0(a):xt(a)?og().x(pg).y1(dg).y0(a):rg().x(pg).y(dg)).defined(fg).curve(s),t(f)},hg=function(e){var t=e.className,n=e.points,r=e.path,o=e.pathRef;if(!(n&&n.length||r))return null;var i=n&&n.length?yg(e):r;return y.createElement("path",ag({},on(e,!1),qt(e),{className:at("recharts-curve",t),d:i,ref:o}))};function mg(e){return mg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mg(e)}var vg=["x","y","top","left","width","height","className"];function bg(){return bg=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},bg.apply(this,arguments)}function gg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wg(e,t,n){var r;return r=function(e,t){if("object"!=mg(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=mg(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==mg(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xg(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Og=function(e,t,n,r,o,i){return"M".concat(e,",").concat(o,"v").concat(r,"M").concat(i,",").concat(t,"h").concat(n)},kg=function(e){var t=e.x,n=void 0===t?0:t,r=e.y,o=void 0===r?0:r,i=e.top,a=void 0===i?0:i,c=e.left,l=void 0===c?0:c,u=e.width,s=void 0===u?0:u,f=e.height,p=void 0===f?0:f,d=e.className,y=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gg(Object(n),!0).forEach(function(t){wg(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({x:n,y:o,top:a,left:l,width:s,height:p},xg(e,vg));return xt(n)&&xt(o)&&xt(s)&&xt(p)&&xt(a)&&xt(l)?h().createElement("path",bg({},on(y,!0),{className:at("recharts-cross",d),d:Og(n,o,s,p,a,l)})):null};function Eg(e){var t=e.cx,n=e.cy,r=e.radius,o=e.startAngle,i=e.endAngle;return{points:[ph(t,n,r,o),ph(t,n,r,i)],cx:t,cy:n,radius:r,startAngle:o,endAngle:i}}function Sg(e,t,n){var r,o,i,a;if("horizontal"===e)i=r=t.x,o=n.top,a=n.top+n.height;else if("vertical"===e)a=o=t.y,r=n.left,i=n.left+n.width;else if(null!=t.cx&&null!=t.cy){if("centric"!==e)return Eg(t);var c=t.cx,l=t.cy,u=t.innerRadius,s=t.outerRadius,f=t.angle,p=ph(c,l,u,f),d=ph(c,l,s,f);r=p.x,o=p.y,i=d.x,a=d.y}return[{x:r,y:o},{x:i,y:a}]}function jg(e){return jg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jg(e)}function Pg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pg(Object(n),!0).forEach(function(t){Ag(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ag(e,t,n){var r;return r=function(e,t){if("object"!=jg(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=jg(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==jg(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Tg(e){var t,n,r,o=e.element,i=e.tooltipEventType,a=e.isActive,c=e.activeCoordinate,l=e.activePayload,u=e.offset,s=e.activeTooltipIndex,f=e.tooltipAxisBandSize,p=e.layout,d=e.chartName,h=null!==(t=o.props.cursor)&&void 0!==t?t:null===(n=o.type.defaultProps)||void 0===n?void 0:n.cursor;if(!o||!h||!a||!c||"ScatterChart"!==d&&"axis"!==i)return null;var m=hg;if("ScatterChart"===d)r=c,m=kg;else if("BarChart"===d)r=function(e,t,n,r){var o=r/2;return{stroke:"none",fill:"#ccc",x:"horizontal"===e?t.x-o:n.left+.5,y:"horizontal"===e?n.top+.5:t.y-o,width:"horizontal"===e?r:n.width-1,height:"horizontal"===e?n.height-1:r}}(p,c,u,f),m=xa;else if("radial"===p){var v=Eg(c),b=v.cx,g=v.cy,w=v.radius;r={cx:b,cy:g,startAngle:v.startAngle,endAngle:v.endAngle,innerRadius:w,outerRadius:w},m=bm}else r={points:Sg(p,c,u)},m=hg;var x=_g(_g(_g(_g({stroke:"#ccc",pointerEvents:"none"},u),r),on(h,!1)),{},{payload:l,payloadIndex:s,className:at("recharts-tooltip-cursor",h.className)});return(0,y.isValidElement)(h)?(0,y.cloneElement)(h,x):(0,y.createElement)(m,x)}var Cg=["item"],Ng=["children","className","width","height","style","compact","title","desc"];function Mg(e){return Mg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mg(e)}function Dg(){return Dg=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Dg.apply(this,arguments)}function Ig(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||Wg(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rg(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Lg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Gg(r.key),r)}}function Bg(e,t,n){return t=Ug(t),function(e,t){if(t&&("object"===Mg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Fg()?Reflect.construct(t,n||[],Ug(e).constructor):t.apply(e,n))}function Fg(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Fg=function(){return!!e})()}function Ug(e){return Ug=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ug(e)}function zg(e,t){return zg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},zg(e,t)}function qg(e){return function(e){if(Array.isArray(e))return Kg(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Wg(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wg(e,t){if(e){if("string"==typeof e)return Kg(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Kg(e,t):void 0}}function Kg(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Hg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$g(Object(n),!0).forEach(function(t){Vg(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$g(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Vg(e,t,n){return(t=Gg(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gg(e){var t=function(e,t){if("object"!=Mg(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Mg(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Mg(t)?t:t+""}var Yg={xAxis:["bottom","top"],yAxis:["left","right"]},Xg={width:"100%",height:"100%"},Zg={x:0,y:0};function Jg(e){return e}var Qg=function(e,t){var n=t.graphicalItems,r=t.dataStartIndex,o=t.dataEndIndex,i=(null!=n?n:[]).reduce(function(e,t){var n=t.props.data;return n&&n.length?[].concat(qg(e),qg(n)):e},[]);return i.length>0?i:e&&e.length&&xt(r)&&xt(o)?e.slice(r,o+1):[]};function ew(e){return"number"===e?[0,"auto"]:void 0}var tw,nw=function(e,t,n,r){var o=e.graphicalItems,i=e.tooltipAxis,a=Qg(t,e);return n<0||!o||!o.length||n>=a.length?null:o.reduce(function(o,c){var l,u,s=null!==(l=c.props.data)&&void 0!==l?l:t;(s&&e.dataStartIndex+e.dataEndIndex!==0&&e.dataEndIndex-e.dataStartIndex>=n&&(s=s.slice(e.dataStartIndex,e.dataEndIndex+1)),i.dataKey&&!i.allowDuplicatedCategory)?u=_t(void 0===s?a:s,i.dataKey,r):u=s&&s[n]||a[n];return u?[].concat(qg(o),[Fy(c,u)]):o},[])},rw=function(e,t,n,r){var o=r||{x:e.chartX,y:e.chartY},i=function(e,t){return"horizontal"===t?e.x:"vertical"===t?e.y:"centric"===t?e.angle:e.radius}(o,n),a=e.orderedTooltipTicks,c=e.tooltipAxis,l=e.tooltipTicks,u=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,a=null!==(t=null==n?void 0:n.length)&&void 0!==t?t:0;if(a<=1)return 0;if(o&&"angleAxis"===o.axisType&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var c=o.range,l=0;l<a;l++){var u=l>0?r[l-1].coordinate:r[a-1].coordinate,s=r[l].coordinate,f=l>=a-1?r[0].coordinate:r[l+1].coordinate,p=void 0;if(gt(s-u)!==gt(f-s)){var d=[];if(gt(f-s)===gt(c[1]-c[0])){p=f;var y=s+c[1]-c[0];d[0]=Math.min(y,(y+u)/2),d[1]=Math.max(y,(y+u)/2)}else{p=u;var h=f+c[1]-c[0];d[0]=Math.min(s,(h+s)/2),d[1]=Math.max(s,(h+s)/2)}var m=[Math.min(s,(p+s)/2),Math.max(s,(p+s)/2)];if(e>m[0]&&e<=m[1]||e>=d[0]&&e<=d[1]){i=r[l].index;break}}else{var v=Math.min(u,f),b=Math.max(u,f);if(e>(v+s)/2&&e<=(b+s)/2){i=r[l].index;break}}}else for(var g=0;g<a;g++)if(0===g&&e<=(n[g].coordinate+n[g+1].coordinate)/2||g>0&&g<a-1&&e>(n[g].coordinate+n[g-1].coordinate)/2&&e<=(n[g].coordinate+n[g+1].coordinate)/2||g===a-1&&e>(n[g].coordinate+n[g-1].coordinate)/2){i=n[g].index;break}return i}(i,a,l,c);if(u>=0&&l){var s=l[u]&&l[u].value,f=nw(e,t,u,s),p=function(e,t,n,r){var o=t.find(function(e){return e&&e.index===n});if(o){if("horizontal"===e)return{x:o.coordinate,y:r.y};if("vertical"===e)return{x:r.x,y:o.coordinate};if("centric"===e){var i=o.coordinate,a=r.radius;return Hg(Hg(Hg({},r),ph(r.cx,r.cy,a,i)),{},{angle:i,radius:a})}var c=o.coordinate,l=r.angle;return Hg(Hg(Hg({},r),ph(r.cx,r.cy,c,l)),{},{angle:l,radius:c})}return Zg}(n,a,u,o);return{activeTooltipIndex:u,activeLabel:s,activePayload:f,activeCoordinate:p}}return null},ow=function(e,t){var n=t.axes,r=t.graphicalItems,o=t.axisType,i=t.axisIdKey,a=t.stackGroups,c=t.dataStartIndex,l=t.dataEndIndex,u=e.layout,s=e.children,f=e.stackOffset,p=wy(u,o);return n.reduce(function(t,n){var d,y=void 0!==n.type.defaultProps?Hg(Hg({},n.type.defaultProps),n.props):n.props,h=y.type,m=y.dataKey,v=y.allowDataOverflow,b=y.allowDuplicatedCategory,g=y.scale,w=y.ticks,x=y.includeHidden,O=y[i];if(t[O])return t;var k,E,S,j=Qg(e.data,{graphicalItems:r.filter(function(e){var t;return(i in e.props?e.props[i]:null===(t=e.type.defaultProps)||void 0===t?void 0:t[i])===O}),dataStartIndex:c,dataEndIndex:l}),P=j.length;(function(e,t,n){if("number"===n&&!0===t&&Array.isArray(e)){var r=null==e?void 0:e[0],o=null==e?void 0:e[1];if(r&&o&&xt(r)&&xt(o))return!0}return!1})(y.domain,v,h)&&(k=Ry(y.domain,null,v),!p||"number"!==h&&"auto"===g||(S=my(j,m,"category")));var _=ew(h);if(!k||0===k.length){var A,T=null!==(A=y.domain)&&void 0!==A?A:_;if(m){if(k=my(j,m,h),"category"===h&&p){var C=function(e){if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;r<t;r++){if(n[e[r]])return!0;n[e[r]]=!0}return!1}(k);b&&C?(E=k,k=vn()(0,P)):b||(k=By(T,k,n).reduce(function(e,t){return e.indexOf(t)>=0?e:[].concat(qg(e),[t])},[]))}else if("category"===h)k=b?k.filter(function(e){return""!==e&&!bt()(e)}):By(T,k,n).reduce(function(e,t){return e.indexOf(t)>=0||""===t||bt()(t)?e:[].concat(qg(e),[t])},[]);else if("number"===h){var N=function(e,t,n,r,o){var i=t.map(function(t){return by(e,t,n,o,r)}).filter(function(e){return!bt()(e)});return i&&i.length?i.reduce(function(e,t){return[Math.min(e[0],t[0]),Math.max(e[1],t[1])]},[1/0,-1/0]):null}(j,r.filter(function(e){var t,n,r=i in e.props?e.props[i]:null===(t=e.type.defaultProps)||void 0===t?void 0:t[i],o="hide"in e.props?e.props.hide:null===(n=e.type.defaultProps)||void 0===n?void 0:n.hide;return r===O&&(x||!o)}),m,o,u);N&&(k=N)}!p||"number"!==h&&"auto"===g||(S=my(j,m,"category"))}else k=p?vn()(0,P):a&&a[O]&&a[O].hasStack&&"number"===h?"expand"===f?[0,1]:My(a[O].stackGroups,c,l):gy(j,r.filter(function(e){var t=i in e.props?e.props[i]:e.type.defaultProps[i],n="hide"in e.props?e.props.hide:e.type.defaultProps.hide;return t===O&&(x||!n)}),h,u,!0);if("number"===h)k=xb(s,k,O,o,w),T&&(k=Ry(T,k,v));else if("category"===h&&T){var M=T;k.every(function(e){return M.indexOf(e)>=0})&&(k=M)}}return Hg(Hg({},t),{},Vg({},O,Hg(Hg({},y),{},{axisType:o,domain:k,categoricalDomain:S,duplicateDomain:E,originalDomain:null!==(d=y.domain)&&void 0!==d?d:_,isCategorical:p,layout:u})))},{})},iw=function(e,t){var n=t.axisType,r=void 0===n?"xAxis":n,o=t.AxisComp,i=t.graphicalItems,a=t.stackGroups,c=t.dataStartIndex,l=t.dataEndIndex,u=e.children,s="".concat(r,"Id"),f=Qt(u,o),p={};return f&&f.length?p=ow(e,{axes:f,graphicalItems:i,axisType:r,axisIdKey:s,stackGroups:a,dataStartIndex:c,dataEndIndex:l}):i&&i.length&&(p=function(e,t){var n=t.graphicalItems,r=t.Axis,o=t.axisType,i=t.axisIdKey,a=t.stackGroups,c=t.dataStartIndex,l=t.dataEndIndex,u=e.layout,s=e.children,f=Qg(e.data,{graphicalItems:n,dataStartIndex:c,dataEndIndex:l}),p=f.length,d=wy(u,o),y=-1;return n.reduce(function(e,t){var h,m=(void 0!==t.type.defaultProps?Hg(Hg({},t.type.defaultProps),t.props):t.props)[i],v=ew("number");return e[m]?e:(y++,d?h=vn()(0,p):a&&a[m]&&a[m].hasStack?(h=My(a[m].stackGroups,c,l),h=xb(s,h,m,o)):(h=Ry(v,gy(f,n.filter(function(e){var t,n,r=i in e.props?e.props[i]:null===(t=e.type.defaultProps)||void 0===t?void 0:t[i],o="hide"in e.props?e.props.hide:null===(n=e.type.defaultProps)||void 0===n?void 0:n.hide;return r===m&&!o}),"number",u),r.defaultProps.allowDataOverflow),h=xb(s,h,m,o)),Hg(Hg({},e),{},Vg({},m,Hg(Hg({axisType:o},r.defaultProps),{},{hide:!0,orientation:yt()(Yg,"".concat(o,".").concat(y%2),null),domain:h,originalDomain:v,isCategorical:d,layout:u}))))},{})}(e,{Axis:o,graphicalItems:i,axisType:r,axisIdKey:s,stackGroups:a,dataStartIndex:c,dataEndIndex:l})),p},aw=function(e){var t=e.children,n=e.defaultShowTooltip,r=en(t,rh),o=0,i=0;return e.data&&0!==e.data.length&&(i=e.data.length-1),r&&r.props&&(r.props.startIndex>=0&&(o=r.props.startIndex),r.props.endIndex>=0&&(i=r.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:Boolean(n)}},cw=function(e){return"horizontal"===e?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:"vertical"===e?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:"centric"===e?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},lw=function(e,t){var n=e.props,r=(e.graphicalItems,e.xAxisMap),o=void 0===r?{}:r,i=e.yAxisMap,a=void 0===i?{}:i,c=n.width,l=n.height,u=n.children,s=n.margin||{},f=en(u,rh),p=en(u,No),d=Object.keys(a).reduce(function(e,t){var n=a[t],r=n.orientation;return n.mirror||n.hide?e:Hg(Hg({},e),{},Vg({},r,e[r]+n.width))},{left:s.left||0,right:s.right||0}),y=Object.keys(o).reduce(function(e,t){var n=o[t],r=n.orientation;return n.mirror||n.hide?e:Hg(Hg({},e),{},Vg({},r,yt()(e,"".concat(r))+n.height))},{top:s.top||0,bottom:s.bottom||0}),h=Hg(Hg({},y),d),m=h.bottom;f&&(h.bottom+=f.props.height||rh.defaultProps.height),p&&t&&(h=function(e,t,n,r){var o=n.children,i=n.width,a=n.margin,c=i-(a.left||0)-(a.right||0),l=ly({children:o,legendWidth:c});if(l){var u=r||{},s=u.width,f=u.height,p=l.align,d=l.verticalAlign,y=l.layout;if(("vertical"===y||"horizontal"===y&&"middle"===d)&&"center"!==p&&xt(e[p]))return dy(dy({},e),{},yy({},p,e[p]+(s||0)));if(("horizontal"===y||"vertical"===y&&"center"===p)&&"middle"!==d&&xt(e[d]))return dy(dy({},e),{},yy({},d,e[d]+(f||0)))}return e}(h,0,n,t));var v=c-h.left-h.right,b=l-h.top-h.bottom;return Hg(Hg({brushBottom:m},h),{},{width:Math.max(v,0),height:Math.max(b,0)})},uw=function(e,t){return"xAxis"===t?e[t].width:"yAxis"===t?e[t].height:void 0},sw=function(e){var t=e.chartName,n=e.GraphicalChild,r=e.defaultTooltipEventType,o=void 0===r?"axis":r,i=e.validateTooltipEventTypes,a=void 0===i?["axis"]:i,c=e.axisComponents,l=e.legendContent,u=e.formatAxisMap,s=e.defaultProps,f=function(e,t){var n=t.graphicalItems,r=t.stackGroups,o=t.offset,i=t.updateId,a=t.dataStartIndex,l=t.dataEndIndex,u=e.barSize,s=e.layout,f=e.barGap,p=e.barCategoryGap,d=e.maxBarSize,y=cw(s),h=y.numericAxisName,m=y.cateAxisName,v=function(e){return!(!e||!e.length)&&e.some(function(e){var t=Yt(e&&e.type);return t&&t.indexOf("Bar")>=0})}(n),b=[];return n.forEach(function(n,y){var g=Qg(e.data,{graphicalItems:[n],dataStartIndex:a,dataEndIndex:l}),w=void 0!==n.type.defaultProps?Hg(Hg({},n.type.defaultProps),n.props):n.props,x=w.dataKey,O=w.maxBarSize,k=w["".concat(h,"Id")],E=w["".concat(m,"Id")],S=c.reduce(function(e,n){var r=t["".concat(n.axisType,"Map")],o=w["".concat(n.axisType,"Id")];r&&r[o]||"zAxis"===n.axisType||xn(!1);var i=r[o];return Hg(Hg({},e),{},Vg(Vg({},n.axisType,i),"".concat(n.axisType,"Ticks"),Oy(i)))},{}),j=S[m],P=S["".concat(m,"Ticks")],_=r&&r[k]&&r[k].hasStack&&function(e,t){var n,r=(null!==(n=e.type)&&void 0!==n&&n.defaultProps?dy(dy({},e.type.defaultProps),e.props):e.props).stackId;if(Ot(r)){var o=t[r];if(o){var i=o.items.indexOf(e);return i>=0?o.stackedData[i]:null}}return null}(n,r[k].stackGroups),A=Yt(n.type).indexOf("Bar")>=0,T=Ly(j,P),C=[],N=v&&function(e){var t=e.barSize,n=e.totalSize,r=e.stackGroups,o=void 0===r?{}:r;if(!o)return{};for(var i={},a=Object.keys(o),c=0,l=a.length;c<l;c++)for(var u=o[a[c]].stackGroups,s=Object.keys(u),f=0,p=s.length;f<p;f++){var d=u[s[f]],y=d.items,h=d.cateAxisId,m=y.filter(function(e){return Yt(e.type).indexOf("Bar")>=0});if(m&&m.length){var v=m[0].type.defaultProps,b=void 0!==v?dy(dy({},v),m[0].props):m[0].props,g=b.barSize,w=b[h];i[w]||(i[w]=[]);var x=bt()(g)?t:g;i[w].push({item:m[0],stackList:m.slice(1),barSize:bt()(x)?void 0:St(x,n,0)})}}return i}({barSize:u,stackGroups:r,totalSize:uw(S,m)});if(A){var M,D,I=bt()(O)?d:O,R=null!==(M=null!==(D=Ly(j,P,!0))&&void 0!==D?D:I)&&void 0!==M?M:0;C=function(e){var t=e.barGap,n=e.barCategoryGap,r=e.bandSize,o=e.sizeList,i=void 0===o?[]:o,a=e.maxBarSize,c=i.length;if(c<1)return null;var l,u=St(t,r,0,!0),s=[];if(i[0].barSize===+i[0].barSize){var f=!1,p=r/c,d=i.reduce(function(e,t){return e+t.barSize||0},0);(d+=(c-1)*u)>=r&&(d-=(c-1)*u,u=0),d>=r&&p>0&&(f=!0,d=c*(p*=.9));var y={offset:((r-d)/2|0)-u,size:0};l=i.reduce(function(e,t){var n={item:t.item,position:{offset:y.offset+y.size+u,size:f?p:t.barSize}},r=[].concat(sy(e),[n]);return y=r[r.length-1].position,t.stackList&&t.stackList.length&&t.stackList.forEach(function(e){r.push({item:e,position:y})}),r},s)}else{var h=St(n,r,0,!0);r-2*h-(c-1)*u<=0&&(u=0);var m=(r-2*h-(c-1)*u)/c;m>1&&(m>>=0);var v=a===+a?Math.min(m,a):m;l=i.reduce(function(e,t,n){var r=[].concat(sy(e),[{item:t.item,position:{offset:h+(m+u)*n+(m-v)/2,size:v}}]);return t.stackList&&t.stackList.length&&t.stackList.forEach(function(e){r.push({item:e,position:r[r.length-1].position})}),r},s)}return l}({barGap:f,barCategoryGap:p,bandSize:R!==T?R:T,sizeList:N[E],maxBarSize:I}),R!==T&&(C=C.map(function(e){return Hg(Hg({},e),{},{position:Hg(Hg({},e.position),{},{offset:e.position.offset-R/2})})}))}var L,B,F=n&&n.type&&n.type.getComposedData;F&&b.push({props:Hg(Hg({},F(Hg(Hg({},S),{},{displayedData:g,props:e,dataKey:x,item:n,bandSize:T,barPosition:C,offset:o,stackedData:_,layout:s,dataStartIndex:a,dataEndIndex:l}))),{},Vg(Vg(Vg({key:n.key||"item-".concat(y)},h,S[h]),m,S[m]),"animationId",i)),childIndex:(L=n,B=e.children,Jt(B).indexOf(L)),item:n})}),b},p=function(e,r){var o=e.props,i=e.dataStartIndex,a=e.dataEndIndex,l=e.updateId;if(!tn({props:o}))return null;var s=o.children,p=o.layout,d=o.stackOffset,y=o.data,h=o.reverseStackOrder,m=cw(p),v=m.numericAxisName,b=m.cateAxisName,g=Qt(s,n),w=function(e,t,n,r,o,i){if(!e)return null;var a=(i?t.reverse():t).reduce(function(e,t){var o,i=null!==(o=t.type)&&void 0!==o&&o.defaultProps?dy(dy({},t.type.defaultProps),t.props):t.props,a=i.stackId;if(i.hide)return e;var c=i[n],l=e[c]||{hasStack:!1,stackGroups:{}};if(Ot(a)){var u=l.stackGroups[a]||{numericAxisId:n,cateAxisId:r,items:[]};u.items.push(t),l.hasStack=!0,l.stackGroups[a]=u}else l.stackGroups[Et("_stackId_")]={numericAxisId:n,cateAxisId:r,items:[t]};return dy(dy({},e),{},yy({},c,l))},{});return Object.keys(a).reduce(function(t,i){var c=a[i];return c.hasStack&&(c.stackGroups=Object.keys(c.stackGroups).reduce(function(t,i){var a=c.stackGroups[i];return dy(dy({},t),{},yy({},i,{numericAxisId:n,cateAxisId:r,items:a.items,stackedData:Ay(e,a.items,o)}))},{})),dy(dy({},t),{},yy({},i,c))},{})}(y,g,"".concat(v,"Id"),"".concat(b,"Id"),d,h),x=c.reduce(function(e,t){var n="".concat(t.axisType,"Map");return Hg(Hg({},e),{},Vg({},n,iw(o,Hg(Hg({},t),{},{graphicalItems:g,stackGroups:t.axisType===v&&w,dataStartIndex:i,dataEndIndex:a}))))},{}),O=lw(Hg(Hg({},x),{},{props:o,graphicalItems:g}),null==r?void 0:r.legendBBox);Object.keys(x).forEach(function(e){x[e]=u(o,x[e],O,e.replace("Map",""),t)});var k,E,S=x["".concat(b,"Map")],j=(k=jt(S),{tooltipTicks:E=Oy(k,!1,!0),orderedTooltipTicks:gn()(E,function(e){return e.coordinate}),tooltipAxis:k,tooltipAxisBandSize:Ly(k,E)}),P=f(o,Hg(Hg({},x),{},{dataStartIndex:i,dataEndIndex:a,updateId:l,graphicalItems:g,stackGroups:w,offset:O}));return Hg(Hg({formattedGraphicalItems:P,graphicalItems:g,offset:O,stackGroups:w},j),x)},d=function(e){function n(e){var r,o,i;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),Vg(i=Bg(this,n,[e]),"eventEmitterSymbol",Symbol("rechartsEventEmitter")),Vg(i,"accessibilityManager",new Ab),Vg(i,"handleLegendBBoxUpdate",function(e){if(e){var t=i.state,n=t.dataStartIndex,r=t.dataEndIndex,o=t.updateId;i.setState(Hg({legendBBox:e},p({props:i.props,dataStartIndex:n,dataEndIndex:r,updateId:o},Hg(Hg({},i.state),{},{legendBBox:e}))))}}),Vg(i,"handleReceiveSyncEvent",function(e,t,n){if(i.props.syncId===e){if(n===i.eventEmitterSymbol&&"function"!=typeof i.props.syncMethod)return;i.applySyncEvent(t)}}),Vg(i,"handleBrushChange",function(e){var t=e.startIndex,n=e.endIndex;if(t!==i.state.dataStartIndex||n!==i.state.dataEndIndex){var r=i.state.updateId;i.setState(function(){return Hg({dataStartIndex:t,dataEndIndex:n},p({props:i.props,dataStartIndex:t,dataEndIndex:n,updateId:r},i.state))}),i.triggerSyncEvent({dataStartIndex:t,dataEndIndex:n})}}),Vg(i,"handleMouseEnter",function(e){var t=i.getMouseInfo(e);if(t){var n=Hg(Hg({},t),{},{isTooltipActive:!0});i.setState(n),i.triggerSyncEvent(n);var r=i.props.onMouseEnter;Nt()(r)&&r(n,e)}}),Vg(i,"triggeredAfterMouseMove",function(e){var t=i.getMouseInfo(e),n=t?Hg(Hg({},t),{},{isTooltipActive:!0}):{isTooltipActive:!1};i.setState(n),i.triggerSyncEvent(n);var r=i.props.onMouseMove;Nt()(r)&&r(n,e)}),Vg(i,"handleItemMouseEnter",function(e){i.setState(function(){return{isTooltipActive:!0,activeItem:e,activePayload:e.tooltipPayload,activeCoordinate:e.tooltipPosition||{x:e.cx,y:e.cy}}})}),Vg(i,"handleItemMouseLeave",function(){i.setState(function(){return{isTooltipActive:!1}})}),Vg(i,"handleMouseMove",function(e){e.persist(),i.throttleTriggeredAfterMouseMove(e)}),Vg(i,"handleMouseLeave",function(e){i.throttleTriggeredAfterMouseMove.cancel();var t={isTooltipActive:!1};i.setState(t),i.triggerSyncEvent(t);var n=i.props.onMouseLeave;Nt()(n)&&n(t,e)}),Vg(i,"handleOuterEvent",function(e){var t,n=function(e){var t=e&&e.type;return t&&Gt[t]?Gt[t]:null}(e),r=yt()(i.props,"".concat(n));n&&Nt()(r)&&r(null!==(t=/.*touch.*/i.test(n)?i.getMouseInfo(e.changedTouches[0]):i.getMouseInfo(e))&&void 0!==t?t:{},e)}),Vg(i,"handleClick",function(e){var t=i.getMouseInfo(e);if(t){var n=Hg(Hg({},t),{},{isTooltipActive:!0});i.setState(n),i.triggerSyncEvent(n);var r=i.props.onClick;Nt()(r)&&r(n,e)}}),Vg(i,"handleMouseDown",function(e){var t=i.props.onMouseDown;Nt()(t)&&t(i.getMouseInfo(e),e)}),Vg(i,"handleMouseUp",function(e){var t=i.props.onMouseUp;Nt()(t)&&t(i.getMouseInfo(e),e)}),Vg(i,"handleTouchMove",function(e){null!=e.changedTouches&&e.changedTouches.length>0&&i.throttleTriggeredAfterMouseMove(e.changedTouches[0])}),Vg(i,"handleTouchStart",function(e){null!=e.changedTouches&&e.changedTouches.length>0&&i.handleMouseDown(e.changedTouches[0])}),Vg(i,"handleTouchEnd",function(e){null!=e.changedTouches&&e.changedTouches.length>0&&i.handleMouseUp(e.changedTouches[0])}),Vg(i,"handleDoubleClick",function(e){var t=i.props.onDoubleClick;Nt()(t)&&t(i.getMouseInfo(e),e)}),Vg(i,"handleContextMenu",function(e){var t=i.props.onContextMenu;Nt()(t)&&t(i.getMouseInfo(e),e)}),Vg(i,"triggerSyncEvent",function(e){void 0!==i.props.syncId&&kb.emit(Eb,i.props.syncId,e,i.eventEmitterSymbol)}),Vg(i,"applySyncEvent",function(e){var t=i.props,n=t.layout,r=t.syncMethod,o=i.state.updateId,a=e.dataStartIndex,c=e.dataEndIndex;if(void 0!==e.dataStartIndex||void 0!==e.dataEndIndex)i.setState(Hg({dataStartIndex:a,dataEndIndex:c},p({props:i.props,dataStartIndex:a,dataEndIndex:c,updateId:o},i.state)));else if(void 0!==e.activeTooltipIndex){var l=e.chartX,u=e.chartY,s=e.activeTooltipIndex,f=i.state,d=f.offset,y=f.tooltipTicks;if(!d)return;if("function"==typeof r)s=r(y,e);else if("value"===r){s=-1;for(var h=0;h<y.length;h++)if(y[h].value===e.activeLabel){s=h;break}}var m=Hg(Hg({},d),{},{x:d.left,y:d.top}),v=Math.min(l,m.x+m.width),b=Math.min(u,m.y+m.height),g=y[s]&&y[s].value,w=nw(i.state,i.props.data,s),x=y[s]?{x:"horizontal"===n?y[s].coordinate:v,y:"horizontal"===n?b:y[s].coordinate}:Zg;i.setState(Hg(Hg({},e),{},{activeLabel:g,activeCoordinate:x,activePayload:w,activeTooltipIndex:s}))}else i.setState(e)}),Vg(i,"renderCursor",function(e){var n,r=i.state,o=r.isTooltipActive,a=r.activeCoordinate,c=r.activePayload,l=r.offset,u=r.activeTooltipIndex,s=r.tooltipAxisBandSize,f=i.getTooltipEventType(),p=null!==(n=e.props.active)&&void 0!==n?n:o,d=i.props.layout,y=e.key||"_recharts-cursor";return h().createElement(Tg,{key:y,activeCoordinate:a,activePayload:c,activeTooltipIndex:u,chartName:t,element:e,isActive:p,layout:d,offset:l,tooltipAxisBandSize:s,tooltipEventType:f})}),Vg(i,"renderPolarAxis",function(e,t,n){var r=yt()(e,"type.axisType"),o=yt()(i.state,"".concat(r,"Map")),a=e.type.defaultProps,c=void 0!==a?Hg(Hg({},a),e.props):e.props,l=o&&o[c["".concat(r,"Id")]];return(0,y.cloneElement)(e,Hg(Hg({},l),{},{className:at(r,l.className),key:e.key||"".concat(t,"-").concat(n),ticks:Oy(l,!0)}))}),Vg(i,"renderPolarGrid",function(e){var t=e.props,n=t.radialLines,r=t.polarAngles,o=t.polarRadius,a=i.state,c=a.radiusAxisMap,l=a.angleAxisMap,u=jt(c),s=jt(l),f=s.cx,p=s.cy,d=s.innerRadius,h=s.outerRadius;return(0,y.cloneElement)(e,{polarAngles:Array.isArray(r)?r:Oy(s,!0).map(function(e){return e.coordinate}),polarRadius:Array.isArray(o)?o:Oy(u,!0).map(function(e){return e.coordinate}),cx:f,cy:p,innerRadius:d,outerRadius:h,key:e.key||"polar-grid",radialLines:n})}),Vg(i,"renderLegend",function(){var e=i.state.formattedGraphicalItems,t=i.props,n=t.children,r=t.width,o=t.height,a=i.props.margin||{},c=r-(a.left||0)-(a.right||0),u=ly({children:n,formattedGraphicalItems:e,legendWidth:c,legendContent:l});if(!u)return null;var s=u.item,f=Rg(u,Cg);return(0,y.cloneElement)(s,Hg(Hg({},f),{},{chartWidth:r,chartHeight:o,margin:a,onBBoxUpdate:i.handleLegendBBoxUpdate}))}),Vg(i,"renderTooltip",function(){var e,t=i.props,n=t.children,r=t.accessibilityLayer,o=en(n,vr);if(!o)return null;var a=i.state,c=a.isTooltipActive,l=a.activeCoordinate,u=a.activePayload,s=a.activeLabel,f=a.offset,p=null!==(e=o.props.active)&&void 0!==e?e:c;return(0,y.cloneElement)(o,{viewBox:Hg(Hg({},f),{},{x:f.left,y:f.top}),active:p,label:s,payload:p?u:[],coordinate:l,accessibilityLayer:r})}),Vg(i,"renderBrush",function(e){var t=i.props,n=t.margin,r=t.data,o=i.state,a=o.offset,c=o.dataStartIndex,l=o.dataEndIndex,u=o.updateId;return(0,y.cloneElement)(e,{key:e.key||"_recharts-brush",onChange:Ey(i.handleBrushChange,e.props.onChange),data:r,x:xt(e.props.x)?e.props.x:a.left,y:xt(e.props.y)?e.props.y:a.top+a.height+a.brushBottom-(n.bottom||0),width:xt(e.props.width)?e.props.width:a.width,startIndex:c,endIndex:l,updateId:"brush-".concat(u)})}),Vg(i,"renderReferenceElement",function(e,t,n){if(!e)return null;var r=i.clipPathId,o=i.state,a=o.xAxisMap,c=o.yAxisMap,l=o.offset,u=e.type.defaultProps||{},s=e.props,f=s.xAxisId,p=void 0===f?u.xAxisId:f,d=s.yAxisId,h=void 0===d?u.yAxisId:d;return(0,y.cloneElement)(e,{key:e.key||"".concat(t,"-").concat(n),xAxis:a[p],yAxis:c[h],viewBox:{x:l.left,y:l.top,width:l.width,height:l.height},clipPathId:r})}),Vg(i,"renderActivePoints",function(e){var t=e.item,r=e.activePoint,o=e.basePoint,i=e.childIndex,a=e.isRange,c=[],l=t.props.key,u=void 0!==t.item.type.defaultProps?Hg(Hg({},t.item.type.defaultProps),t.item.props):t.item.props,s=u.activeDot,f=Hg(Hg({index:i,dataKey:u.dataKey,cx:r.x,cy:r.y,r:4,fill:vy(t.item),strokeWidth:2,stroke:"#fff",payload:r.payload,value:r.value},on(s,!1)),qt(s));return c.push(n.renderActiveDot(s,f,"".concat(l,"-activePoint-").concat(i))),o?c.push(n.renderActiveDot(s,Hg(Hg({},f),{},{cx:o.x,cy:o.y}),"".concat(l,"-basePoint-").concat(i))):a&&c.push(null),c}),Vg(i,"renderGraphicChild",function(e,t,n){var r=i.filterFormatItem(e,t,n);if(!r)return null;var o=i.getTooltipEventType(),a=i.state,c=a.isTooltipActive,l=a.tooltipAxis,u=a.activeTooltipIndex,s=a.activeLabel,f=en(i.props.children,vr),p=r.props,d=p.points,h=p.isRange,m=p.baseLine,v=void 0!==r.item.type.defaultProps?Hg(Hg({},r.item.type.defaultProps),r.item.props):r.item.props,b=v.activeDot,g=v.hide,w=v.activeBar,x=v.activeShape,O=Boolean(!g&&c&&f&&(b||w||x)),k={};"axis"!==o&&f&&"click"===f.props.trigger?k={onClick:Ey(i.handleItemMouseEnter,e.props.onClick)}:"axis"!==o&&(k={onMouseLeave:Ey(i.handleItemMouseLeave,e.props.onMouseLeave),onMouseEnter:Ey(i.handleItemMouseEnter,e.props.onMouseEnter)});var E=(0,y.cloneElement)(e,Hg(Hg({},r.props),k));if(O){if(!(u>=0)){var S,j=(null!==(S=i.getItemByXY(i.state.activeCoordinate))&&void 0!==S?S:{graphicalItem:E}).graphicalItem,P=j.item,_=void 0===P?e:P,A=j.childIndex,T=Hg(Hg(Hg({},r.props),k),{},{activeIndex:A});return[(0,y.cloneElement)(_,T),null,null]}var C,N;if(l.dataKey&&!l.allowDuplicatedCategory){var M="function"==typeof l.dataKey?function(e){return"function"==typeof l.dataKey?l.dataKey(e.payload):null}:"payload.".concat(l.dataKey.toString());C=_t(d,M,s),N=h&&m&&_t(m,M,s)}else C=null==d?void 0:d[u],N=h&&m&&m[u];if(x||w){var D=void 0!==e.props.activeIndex?e.props.activeIndex:u;return[(0,y.cloneElement)(e,Hg(Hg(Hg({},r.props),k),{},{activeIndex:D})),null,null]}if(!bt()(C))return[E].concat(qg(i.renderActivePoints({item:r,activePoint:C,basePoint:N,childIndex:u,isRange:h})))}return h?[E,null,null]:[E,null]}),Vg(i,"renderCustomized",function(e,t,n){return(0,y.cloneElement)(e,Hg(Hg({key:"recharts-customized-".concat(n)},i.props),i.state))}),Vg(i,"renderMap",{CartesianGrid:{handler:Jg,once:!0},ReferenceArea:{handler:i.renderReferenceElement},ReferenceLine:{handler:Jg},ReferenceDot:{handler:i.renderReferenceElement},XAxis:{handler:Jg},YAxis:{handler:Jg},Brush:{handler:i.renderBrush,once:!0},Bar:{handler:i.renderGraphicChild},Line:{handler:i.renderGraphicChild},Area:{handler:i.renderGraphicChild},Radar:{handler:i.renderGraphicChild},RadialBar:{handler:i.renderGraphicChild},Scatter:{handler:i.renderGraphicChild},Pie:{handler:i.renderGraphicChild},Funnel:{handler:i.renderGraphicChild},Tooltip:{handler:i.renderCursor,once:!0},PolarGrid:{handler:i.renderPolarGrid,once:!0},PolarAngleAxis:{handler:i.renderPolarAxis},PolarRadiusAxis:{handler:i.renderPolarAxis},Customized:{handler:i.renderCustomized}}),i.clipPathId="".concat(null!==(r=e.id)&&void 0!==r?r:Et("recharts"),"-clip"),i.throttleTriggeredAfterMouseMove=lt()(i.triggeredAfterMouseMove,null!==(o=e.throttleDelay)&&void 0!==o?o:1e3/60),i.state={},i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zg(e,t)}(n,e),r=n,i=[{key:"componentDidMount",value:function(){var e,t;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:null!==(e=this.props.margin.left)&&void 0!==e?e:0,top:null!==(t=this.props.margin.top)&&void 0!==t?t:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var e=this.props,t=e.children,n=e.data,r=e.height,o=e.layout,i=en(t,vr);if(i){var a=i.props.defaultIndex;if(!("number"!=typeof a||a<0||a>this.state.tooltipTicks.length-1)){var c=this.state.tooltipTicks[a]&&this.state.tooltipTicks[a].value,l=nw(this.state,n,a,c),u=this.state.tooltipTicks[a].coordinate,s=(this.state.offset.top+r)/2,f="horizontal"===o?{x:u,y:s}:{y:u,x:s},p=this.state.formattedGraphicalItems.find(function(e){return"Scatter"===e.item.type.name});p&&(f=Hg(Hg({},f),p.props.points[a].tooltipPosition),l=p.props.points[a].tooltipPayload);var d={activeTooltipIndex:a,isTooltipActive:!0,activeLabel:c,activePayload:l,activeCoordinate:f};this.setState(d),this.renderCursor(i),this.accessibilityManager.setIndex(a)}}}},{key:"getSnapshotBeforeUpdate",value:function(e,t){return this.props.accessibilityLayer?(this.state.tooltipTicks!==t.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==e.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==e.margin&&this.accessibilityManager.setDetails({offset:{left:null!==(n=this.props.margin.left)&&void 0!==n?n:0,top:null!==(r=this.props.margin.top)&&void 0!==r?r:0}}),null):null;var n,r}},{key:"componentDidUpdate",value:function(e){an([en(e.children,vr)],[en(this.props.children,vr)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var e=en(this.props.children,vr);if(e&&"boolean"==typeof e.props.shared){var t=e.props.shared?"axis":"item";return a.indexOf(t)>=0?t:o}return o}},{key:"getMouseInfo",value:function(e){if(!this.container)return null;var t,n=this.container,r=n.getBoundingClientRect(),o={top:(t=r).top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft},i={chartX:Math.round(e.pageX-o.left),chartY:Math.round(e.pageY-o.top)},a=r.width/n.offsetWidth||1,c=this.inRange(i.chartX,i.chartY,a);if(!c)return null;var l=this.state,u=l.xAxisMap,s=l.yAxisMap,f=this.getTooltipEventType(),p=rw(this.state,this.props.data,this.props.layout,c);if("axis"!==f&&u&&s){var d=jt(u).scale,y=jt(s).scale,h=d&&d.invert?d.invert(i.chartX):null,m=y&&y.invert?y.invert(i.chartY):null;return Hg(Hg({},i),{},{xValue:h,yValue:m},p)}return p?Hg(Hg({},i),p):null}},{key:"inRange",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=this.props.layout,o=e/n,i=t/n;if("horizontal"===r||"vertical"===r){var a=this.state.offset;return o>=a.left&&o<=a.left+a.width&&i>=a.top&&i<=a.top+a.height?{x:o,y:i}:null}var c=this.state,l=c.angleAxisMap,u=c.radiusAxisMap;if(l&&u){var s=jt(l);return mh({x:o,y:i},s)}return null}},{key:"parseEventsOfWrapper",value:function(){var e=this.props.children,t=this.getTooltipEventType(),n=en(e,vr),r={};return n&&"axis"===t&&(r="click"===n.props.trigger?{onClick:this.handleClick}:{onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu}),Hg(Hg({},qt(this.props,this.handleOuterEvent)),r)}},{key:"addListener",value:function(){kb.on(Eb,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){kb.removeListener(Eb,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(e,t,n){for(var r=this.state.formattedGraphicalItems,o=0,i=r.length;o<i;o++){var a=r[o];if(a.item===e||a.props.key===e.key||t===Yt(a.item.type)&&n===a.childIndex)return a}return null}},{key:"renderClipPath",value:function(){var e=this.clipPathId,t=this.state.offset,n=t.left,r=t.top,o=t.height,i=t.width;return h().createElement("defs",null,h().createElement("clipPath",{id:e},h().createElement("rect",{x:n,y:r,height:o,width:i})))}},{key:"getXScales",value:function(){var e=this.state.xAxisMap;return e?Object.entries(e).reduce(function(e,t){var n=Ig(t,2),r=n[0],o=n[1];return Hg(Hg({},e),{},Vg({},r,o.scale))},{}):null}},{key:"getYScales",value:function(){var e=this.state.yAxisMap;return e?Object.entries(e).reduce(function(e,t){var n=Ig(t,2),r=n[0],o=n[1];return Hg(Hg({},e),{},Vg({},r,o.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(e){var t;return null===(t=this.state.xAxisMap)||void 0===t||null===(t=t[e])||void 0===t?void 0:t.scale}},{key:"getYScaleByAxisId",value:function(e){var t;return null===(t=this.state.yAxisMap)||void 0===t||null===(t=t[e])||void 0===t?void 0:t.scale}},{key:"getItemByXY",value:function(e){var t=this.state,n=t.formattedGraphicalItems,r=t.activeItem;if(n&&n.length)for(var o=0,i=n.length;o<i;o++){var a=n[o],c=a.props,l=a.item,u=void 0!==l.type.defaultProps?Hg(Hg({},l.type.defaultProps),l.props):l.props,s=Yt(l.type);if("Bar"===s){var f=(c.data||[]).find(function(t){return ga(e,t)});if(f)return{graphicalItem:a,payload:f}}else if("RadialBar"===s){var p=(c.data||[]).find(function(t){return mh(e,t)});if(p)return{graphicalItem:a,payload:p}}else if(_m(a,r)||Am(a,r)||Tm(a,r)){var d=Dm({graphicalItem:a,activeTooltipItem:r,itemData:u.data}),y=void 0===u.activeIndex?d:u.activeIndex;return{graphicalItem:Hg(Hg({},a),{},{childIndex:y}),payload:Tm(a,r)?u.data[d]:a.props.data[d]}}}return null}},{key:"render",value:function(){var e=this;if(!tn(this))return null;var t,n,r=this.props,o=r.children,i=r.className,a=r.width,c=r.height,l=r.style,u=r.compact,s=r.title,f=r.desc,p=Rg(r,Ng),d=on(p,!1);if(u)return h().createElement(zv,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},h().createElement(Sn,Dg({},d,{width:a,height:c,title:s,desc:f}),this.renderClipPath(),ln(o,this.renderMap)));this.props.accessibilityLayer&&(d.tabIndex=null!==(t=this.props.tabIndex)&&void 0!==t?t:0,d.role=null!==(n=this.props.role)&&void 0!==n?n:"application",d.onKeyDown=function(t){e.accessibilityManager.keyboardEvent(t)},d.onFocus=function(){e.accessibilityManager.focus()});var y=this.parseEventsOfWrapper();return h().createElement(zv,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},h().createElement("div",Dg({className:at("recharts-wrapper",i),style:Hg({position:"relative",cursor:"default",width:a,height:c},l)},y,{ref:function(t){e.container=t}}),h().createElement(Sn,Dg({},d,{width:a,height:c,title:s,desc:f,style:Xg}),this.renderClipPath(),ln(o,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}],i&&Lg(r.prototype,i),c&&Lg(r,c),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,c}(y.Component);Vg(d,"displayName",t),Vg(d,"defaultProps",Hg({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},s)),Vg(d,"getDerivedStateFromProps",function(e,t){var n=e.dataKey,r=e.data,o=e.children,i=e.width,a=e.height,c=e.layout,l=e.stackOffset,u=e.margin,s=t.dataStartIndex,f=t.dataEndIndex;if(void 0===t.updateId){var d=aw(e);return Hg(Hg(Hg({},d),{},{updateId:0},p(Hg(Hg({props:e},d),{},{updateId:0}),t)),{},{prevDataKey:n,prevData:r,prevWidth:i,prevHeight:a,prevLayout:c,prevStackOffset:l,prevMargin:u,prevChildren:o})}if(n!==t.prevDataKey||r!==t.prevData||i!==t.prevWidth||a!==t.prevHeight||c!==t.prevLayout||l!==t.prevStackOffset||!Rt(u,t.prevMargin)){var y=aw(e),h={chartX:t.chartX,chartY:t.chartY,isTooltipActive:t.isTooltipActive},m=Hg(Hg({},rw(t,r,c)),{},{updateId:t.updateId+1}),v=Hg(Hg(Hg({},y),h),m);return Hg(Hg(Hg({},v),p(Hg({props:e},v),t)),{},{prevDataKey:n,prevData:r,prevWidth:i,prevHeight:a,prevLayout:c,prevStackOffset:l,prevMargin:u,prevChildren:o})}if(!an(o,t.prevChildren)){var b,g,w,x,O=en(o,rh),k=O&&null!==(b=null===(g=O.props)||void 0===g?void 0:g.startIndex)&&void 0!==b?b:s,E=O&&null!==(w=null===(x=O.props)||void 0===x?void 0:x.endIndex)&&void 0!==w?w:f,S=k!==s||E!==f,j=!bt()(r)&&!S?t.updateId:t.updateId+1;return Hg(Hg({updateId:j},p(Hg(Hg({props:e},t),{},{updateId:j,dataStartIndex:k,dataEndIndex:E}),t)),{},{prevChildren:o,dataStartIndex:k,dataEndIndex:E})}return null}),Vg(d,"renderActiveDot",function(e,t,n){var r;return r=(0,y.isValidElement)(e)?(0,y.cloneElement)(e,t):Nt()(e)?e(t):h().createElement(Do,t),h().createElement(An,{className:"recharts-active-dot",key:n},r)});var m=(0,y.forwardRef)(function(e,t){return h().createElement(d,Dg({},e,{ref:t}))});return m.displayName=d.displayName,m},fw=["layout","type","stroke","connectNulls","isRange","ref"],pw=["key"];function dw(e){return dw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},dw(e)}function yw(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function hw(){return hw=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},hw.apply(this,arguments)}function mw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function vw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mw(Object(n),!0).forEach(function(t){kw(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function bw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Ew(r.key),r)}}function gw(e,t,n){return t=xw(t),function(e,t){if(t&&("object"===dw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ww()?Reflect.construct(t,n||[],xw(e).constructor):t.apply(e,n))}function ww(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ww=function(){return!!e})()}function xw(e){return xw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},xw(e)}function Ow(e,t){return Ow=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ow(e,t)}function kw(e,t,n){return(t=Ew(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ew(e){var t=function(e,t){if("object"!=dw(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=dw(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==dw(t)?t:t+""}var Sw=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return kw(e=gw(this,t,[].concat(r)),"state",{isAnimationFinished:!0}),kw(e,"id",Et("recharts-area-")),kw(e,"handleAnimationEnd",function(){var t=e.props.onAnimationEnd;e.setState({isAnimationFinished:!0}),Nt()(t)&&t()}),kw(e,"handleAnimationStart",function(){var t=e.props.onAnimationStart;e.setState({isAnimationFinished:!1}),Nt()(t)&&t()}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ow(e,t)}(t,e),n=t,r=[{key:"renderDots",value:function(e,n,r){var o=this.props.isAnimationActive,i=this.state.isAnimationFinished;if(o&&!i)return null;var a=this.props,c=a.dot,l=a.points,u=a.dataKey,s=on(this.props,!1),f=on(c,!0),p=l.map(function(e,n){var r=vw(vw(vw({key:"dot-".concat(n),r:3},s),f),{},{index:n,cx:e.x,cy:e.y,dataKey:u,value:e.value,payload:e.payload,points:l});return t.renderDotItem(c,r)}),d={clipPath:e?"url(#clipPath-".concat(n?"":"dots-").concat(r,")"):null};return h().createElement(An,hw({className:"recharts-area-dots"},d),p)}},{key:"renderHorizontalRect",value:function(e){var t=this.props,n=t.baseLine,r=t.points,o=t.strokeWidth,i=r[0].x,a=r[r.length-1].x,c=e*Math.abs(i-a),l=ld()(r.map(function(e){return e.y||0}));return xt(n)&&"number"==typeof n?l=Math.max(n,l):n&&Array.isArray(n)&&n.length&&(l=Math.max(ld()(n.map(function(e){return e.y||0})),l)),xt(l)?h().createElement("rect",{x:i<a?i:i-c,y:0,width:c,height:Math.floor(l+(o?parseInt("".concat(o),10):1))}):null}},{key:"renderVerticalRect",value:function(e){var t=this.props,n=t.baseLine,r=t.points,o=t.strokeWidth,i=r[0].y,a=r[r.length-1].y,c=e*Math.abs(i-a),l=ld()(r.map(function(e){return e.x||0}));return xt(n)&&"number"==typeof n?l=Math.max(n,l):n&&Array.isArray(n)&&n.length&&(l=Math.max(ld()(n.map(function(e){return e.x||0})),l)),xt(l)?h().createElement("rect",{x:0,y:i<a?i:i-c,width:l+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}},{key:"renderClipRect",value:function(e){return"vertical"===this.props.layout?this.renderVerticalRect(e):this.renderHorizontalRect(e)}},{key:"renderAreaStatically",value:function(e,t,n,r){var o=this.props,i=o.layout,a=o.type,c=o.stroke,l=o.connectNulls,u=o.isRange,s=(o.ref,yw(o,fw));return h().createElement(An,{clipPath:n?"url(#clipPath-".concat(r,")"):null},h().createElement(hg,hw({},on(s,!0),{points:e,connectNulls:l,type:a,baseLine:t,layout:i,stroke:"none",className:"recharts-area-area"})),"none"!==c&&h().createElement(hg,hw({},on(this.props,!1),{className:"recharts-area-curve",layout:i,type:a,connectNulls:l,fill:"none",points:e})),"none"!==c&&u&&h().createElement(hg,hw({},on(this.props,!1),{className:"recharts-area-curve",layout:i,type:a,connectNulls:l,fill:"none",points:t})))}},{key:"renderAreaWithAnimation",value:function(e,t){var n=this,r=this.props,o=r.points,i=r.baseLine,a=r.isAnimationActive,c=r.animationBegin,l=r.animationDuration,u=r.animationEasing,s=r.animationId,f=this.state,p=f.prevPoints,d=f.prevBaseLine;return h().createElement(sa,{begin:c,duration:l,isActive:a,easing:u,from:{t:0},to:{t:1},key:"area-".concat(s),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var a=r.t;if(p){var c,l=p.length/o.length,u=o.map(function(e,t){var n=Math.floor(t*l);if(p[n]){var r=p[n],o=Pt(r.x,e.x),i=Pt(r.y,e.y);return vw(vw({},e),{},{x:o(a),y:i(a)})}return e});return c=xt(i)&&"number"==typeof i?Pt(d,i)(a):bt()(i)||pt()(i)?Pt(d,0)(a):i.map(function(e,t){var n=Math.floor(t*l);if(d[n]){var r=d[n],o=Pt(r.x,e.x),i=Pt(r.y,e.y);return vw(vw({},e),{},{x:o(a),y:i(a)})}return e}),n.renderAreaStatically(u,c,e,t)}return h().createElement(An,null,h().createElement("defs",null,h().createElement("clipPath",{id:"animationClipPath-".concat(t)},n.renderClipRect(a))),h().createElement(An,{clipPath:"url(#animationClipPath-".concat(t,")")},n.renderAreaStatically(o,i,e,t)))})}},{key:"renderArea",value:function(e,t){var n=this.props,r=n.points,o=n.baseLine,i=n.isAnimationActive,a=this.state,c=a.prevPoints,l=a.prevBaseLine,u=a.totalLength;return i&&r&&r.length&&(!c&&u>0||!yd()(c,r)||!yd()(l,o))?this.renderAreaWithAnimation(e,t):this.renderAreaStatically(r,o,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,r=t.dot,o=t.points,i=t.className,a=t.top,c=t.left,l=t.xAxis,u=t.yAxis,s=t.width,f=t.height,p=t.isAnimationActive,d=t.id;if(n||!o||!o.length)return null;var y=this.state.isAnimationFinished,m=1===o.length,v=at("recharts-area",i),b=l&&l.allowDataOverflow,g=u&&u.allowDataOverflow,w=b||g,x=bt()(d)?this.id:d,O=null!==(e=on(r,!1))&&void 0!==e?e:{r:3,strokeWidth:2},k=O.r,E=void 0===k?3:k,S=O.strokeWidth,j=void 0===S?2:S,P=(function(e){return e&&"object"===Vt(e)&&"clipDot"in e}(r)?r:{}).clipDot,_=void 0===P||P,A=2*E+j;return h().createElement(An,{className:v},b||g?h().createElement("defs",null,h().createElement("clipPath",{id:"clipPath-".concat(x)},h().createElement("rect",{x:b?c:c-s/2,y:g?a:a-f/2,width:b?s:2*s,height:g?f:2*f})),!_&&h().createElement("clipPath",{id:"clipPath-dots-".concat(x)},h().createElement("rect",{x:c-A/2,y:a-A/2,width:s+A,height:f+A}))):null,m?null:this.renderArea(w,x),(r||m)&&this.renderDots(w,_,x),(!p||y)&&Yh.renderCallByParent(this.props,o))}}],o=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:t.curPoints,prevBaseLine:t.curBaseLine}:e.points!==t.curPoints||e.baseLine!==t.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}],r&&bw(n.prototype,r),o&&bw(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function jw(e,t,n){if(t<1)return[];if(1===t&&void 0===n)return e;for(var r=[],o=0;o<e.length;o+=t){if(void 0!==n&&!0!==n(e[o]))return;r.push(e[o])}return r}function Pw(e,t,n){return function(e){var t=e.width,n=e.height,r=function(e){return(e%180+180)%180}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0),o=r*Math.PI/180,i=Math.atan(n/t),a=o>i&&o<Math.PI-i?n/Math.sin(o):t/Math.cos(o);return Math.abs(a)}({width:e.width+t.width,height:e.height+t.height},n)}function _w(e,t,n,r,o){if(e*t<e*r||e*t>e*o)return!1;var i=n();return e*(t-e*i/2-r)>=0&&e*(t+e*i/2-o)<=0}function Aw(e){return Aw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Aw(e)}function Tw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Cw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Tw(Object(n),!0).forEach(function(t){Nw(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Nw(e,t,n){var r;return r=function(e,t){if("object"!=Aw(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Aw(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==Aw(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Mw(e,t,n){var r=e.tick,o=e.ticks,i=e.viewBox,a=e.minTickGap,c=e.orientation,l=e.interval,u=e.tickFormatter,s=e.unit,f=e.angle;if(!o||!o.length||!r)return[];if(xt(l)||nr.isSsr)return function(e,t){return jw(e,t+1)}(o,"number"==typeof l&&xt(l)?l:0);var p=[],d="top"===c||"bottom"===c?"width":"height",y=s&&"width"===d?za(s,{fontSize:t,letterSpacing:n}):{width:0,height:0},h=function(e,r){var o=Nt()(u)?u(e.value,r):e.value;return"width"===d?Pw(za(o,{fontSize:t,letterSpacing:n}),y,f):za(o,{fontSize:t,letterSpacing:n})[d]},m=o.length>=2?gt(o[1].coordinate-o[0].coordinate):1,v=function(e,t,n){var r="width"===n,o=e.x,i=e.y,a=e.width,c=e.height;return 1===t?{start:r?o:i,end:r?o+a:i+c}:{start:r?o+a:i+c,end:r?o:i}}(i,m,d);return"equidistantPreserveStart"===l?function(e,t,n,r,o){for(var i,a=(r||[]).slice(),c=t.start,l=t.end,u=0,s=1,f=c,p=function(){var t=null==r?void 0:r[u];if(void 0===t)return{v:jw(r,s)};var i,a=u,p=function(){return void 0===i&&(i=n(t,a)),i},d=t.coordinate,y=0===u||_w(e,d,p,f,l);y||(u=0,f=c,s+=1),y&&(f=d+e*(p()/2+o),u+=s)};s<=a.length;)if(i=p())return i.v;return[]}(m,v,h,o,a):(p="preserveStart"===l||"preserveStartEnd"===l?function(e,t,n,r,o,i){var a=(r||[]).slice(),c=a.length,l=t.start,u=t.end;if(i){var s=r[c-1],f=n(s,c-1),p=e*(s.coordinate+e*f/2-u);a[c-1]=s=Cw(Cw({},s),{},{tickCoord:p>0?s.coordinate-p*e:s.coordinate}),_w(e,s.tickCoord,function(){return f},l,u)&&(u=s.tickCoord-e*(f/2+o),a[c-1]=Cw(Cw({},s),{},{isShow:!0}))}for(var d=i?c-1:c,y=function(t){var r,i=a[t],c=function(){return void 0===r&&(r=n(i,t)),r};if(0===t){var s=e*(i.coordinate-e*c()/2-l);a[t]=i=Cw(Cw({},i),{},{tickCoord:s<0?i.coordinate-s*e:i.coordinate})}else a[t]=i=Cw(Cw({},i),{},{tickCoord:i.coordinate});_w(e,i.tickCoord,c,l,u)&&(l=i.tickCoord+e*(c()/2+o),a[t]=Cw(Cw({},i),{},{isShow:!0}))},h=0;h<d;h++)y(h);return a}(m,v,h,o,a,"preserveStartEnd"===l):function(e,t,n,r,o){for(var i=(r||[]).slice(),a=i.length,c=t.start,l=t.end,u=function(t){var r,u=i[t],s=function(){return void 0===r&&(r=n(u,t)),r};if(t===a-1){var f=e*(u.coordinate+e*s()/2-l);i[t]=u=Cw(Cw({},u),{},{tickCoord:f>0?u.coordinate-f*e:u.coordinate})}else i[t]=u=Cw(Cw({},u),{},{tickCoord:u.coordinate});_w(e,u.tickCoord,s,c,l)&&(l=u.tickCoord-e*(s()/2+o),i[t]=Cw(Cw({},u),{},{isShow:!0}))},s=a-1;s>=0;s--)u(s);return i}(m,v,h,o,a),p.filter(function(e){return e.isShow}))}tw=Sw,kw(Sw,"displayName","Area"),kw(Sw,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!nr.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"}),kw(Sw,"getBaseValue",function(e,t,n,r){var o=e.layout,i=e.baseValue,a=t.props.baseValue,c=null!=a?a:i;if(xt(c)&&"number"==typeof c)return c;var l="horizontal"===o?r:n,u=l.scale.domain();if("number"===l.type){var s=Math.max(u[0],u[1]),f=Math.min(u[0],u[1]);return"dataMin"===c?f:"dataMax"===c||s<0?s:Math.max(Math.min(u[0],u[1]),0)}return"dataMin"===c?u[0]:"dataMax"===c?u[1]:u[0]}),kw(Sw,"getComposedData",function(e){var t,n=e.props,r=e.item,o=e.xAxis,i=e.yAxis,a=e.xAxisTicks,c=e.yAxisTicks,l=e.bandSize,u=e.dataKey,s=e.stackedData,f=e.dataStartIndex,p=e.displayedData,d=e.offset,y=n.layout,h=s&&s.length,m=tw.getBaseValue(n,r,o,i),v="horizontal"===y,b=!1,g=p.map(function(e,t){var n;h?n=s[f+t]:(n=hy(e,u),Array.isArray(n)?b=!0:n=[m,n]);var r=null==n[1]||h&&null==hy(e,u);return v?{x:Cy({axis:o,ticks:a,bandSize:l,entry:e,index:t}),y:r?null:i.scale(n[1]),value:n,payload:e}:{x:r?null:o.scale(n[1]),y:Cy({axis:i,ticks:c,bandSize:l,entry:e,index:t}),value:n,payload:e}});return t=h||b?g.map(function(e){var t=Array.isArray(e.value)?e.value[0]:null;return v?{x:e.x,y:null!=t&&null!=e.y?i.scale(t):null}:{x:null!=t?o.scale(t):null,y:e.y}}):v?i.scale(m):o.scale(m),vw({points:g,baseLine:t,layout:y,isRange:b},d)}),kw(Sw,"renderDotItem",function(e,t){var n;if(h().isValidElement(e))n=h().cloneElement(e,t);else if(Nt()(e))n=e(t);else{var r=at("recharts-area-dot","boolean"!=typeof e?e.className:""),o=t.key,i=yw(t,pw);n=h().createElement(Do,hw({},i,{key:o,className:r}))}return n});var Dw=["viewBox"],Iw=["viewBox"],Rw=["ticks"];function Lw(e){return Lw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lw(e)}function Bw(){return Bw=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Bw.apply(this,arguments)}function Fw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Uw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Fw(Object(n),!0).forEach(function(t){Vw(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function zw(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function qw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Gw(r.key),r)}}function Ww(e,t,n){return t=$w(t),function(e,t){if(t&&("object"===Lw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Kw()?Reflect.construct(t,n||[],$w(e).constructor):t.apply(e,n))}function Kw(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Kw=function(){return!!e})()}function $w(e){return $w=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},$w(e)}function Hw(e,t){return Hw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Hw(e,t)}function Vw(e,t,n){return(t=Gw(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gw(e){var t=function(e,t){if("object"!=Lw(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Lw(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Lw(t)?t:t+""}var Yw=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=Ww(this,t,[e])).state={fontSize:"",letterSpacing:""},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Hw(e,t)}(t,e),n=t,r=[{key:"shouldComponentUpdate",value:function(e,t){var n=e.viewBox,r=zw(e,Dw),o=this.props,i=o.viewBox,a=zw(o,Iw);return!Rt(n,i)||!Rt(r,a)||!Rt(t,this.state)}},{key:"componentDidMount",value:function(){var e=this.layerReference;if(e){var t=e.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];t&&this.setState({fontSize:window.getComputedStyle(t).fontSize,letterSpacing:window.getComputedStyle(t).letterSpacing})}}},{key:"getTickLineCoord",value:function(e){var t,n,r,o,i,a,c=this.props,l=c.x,u=c.y,s=c.width,f=c.height,p=c.orientation,d=c.tickSize,y=c.mirror,h=c.tickMargin,m=y?-1:1,v=e.tickSize||d,b=xt(e.tickCoord)?e.tickCoord:e.coordinate;switch(p){case"top":t=n=e.coordinate,a=(r=(o=u+ +!y*f)-m*v)-m*h,i=b;break;case"left":r=o=e.coordinate,i=(t=(n=l+ +!y*s)-m*v)-m*h,a=b;break;case"right":r=o=e.coordinate,i=(t=(n=l+ +y*s)+m*v)+m*h,a=b;break;default:t=n=e.coordinate,a=(r=(o=u+ +y*f)+m*v)+m*h,i=b}return{line:{x1:t,y1:r,x2:n,y2:o},tick:{x:i,y:a}}}},{key:"getTickTextAnchor",value:function(){var e,t=this.props,n=t.orientation,r=t.mirror;switch(n){case"left":e=r?"start":"end";break;case"right":e=r?"end":"start";break;default:e="middle"}return e}},{key:"getTickVerticalAnchor",value:function(){var e=this.props,t=e.orientation,n=e.mirror,r="end";switch(t){case"left":case"right":r="middle";break;case"top":r=n?"start":"end";break;default:r=n?"end":"start"}return r}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.x,n=e.y,r=e.width,o=e.height,i=e.orientation,a=e.mirror,c=e.axisLine,l=Uw(Uw(Uw({},on(this.props,!1)),on(c,!1)),{},{fill:"none"});if("top"===i||"bottom"===i){var u=+("top"===i&&!a||"bottom"===i&&a);l=Uw(Uw({},l),{},{x1:t,y1:n+u*o,x2:t+r,y2:n+u*o})}else{var s=+("left"===i&&!a||"right"===i&&a);l=Uw(Uw({},l),{},{x1:t+s*r,y1:n,x2:t+s*r,y2:n+o})}return h().createElement("line",Bw({},l,{className:at("recharts-cartesian-axis-line",yt()(c,"className"))}))}},{key:"renderTicks",value:function(e,n,r){var o=this,i=this.props,a=i.tickLine,c=i.stroke,l=i.tick,u=i.tickFormatter,s=i.unit,f=Mw(Uw(Uw({},this.props),{},{ticks:e}),n,r),p=this.getTickTextAnchor(),d=this.getTickVerticalAnchor(),y=on(this.props,!1),m=on(l,!1),v=Uw(Uw({},y),{},{fill:"none"},on(a,!1)),b=f.map(function(e,n){var r=o.getTickLineCoord(e),i=r.line,b=r.tick,g=Uw(Uw(Uw(Uw({textAnchor:p,verticalAnchor:d},y),{},{stroke:"none",fill:c},m),b),{},{index:n,payload:e,visibleTicksCount:f.length,tickFormatter:u});return h().createElement(An,Bw({className:"recharts-cartesian-axis-tick",key:"tick-".concat(e.value,"-").concat(e.coordinate,"-").concat(e.tickCoord)},Wt(o.props,e,n)),a&&h().createElement("line",Bw({},v,i,{className:at("recharts-cartesian-axis-tick-line",yt()(a,"className"))})),l&&t.renderTickItem(l,g,"".concat(Nt()(u)?u(e.value,n):e.value).concat(s||"")))});return h().createElement("g",{className:"recharts-cartesian-axis-ticks"},b)}},{key:"render",value:function(){var e=this,t=this.props,n=t.axisLine,r=t.width,o=t.height,i=t.ticksGenerator,a=t.className;if(t.hide)return null;var c=this.props,l=c.ticks,u=zw(c,Rw),s=l;return Nt()(i)&&(s=l&&l.length>0?i(this.props):i(u)),r<=0||o<=0||!s||!s.length?null:h().createElement(An,{className:at("recharts-cartesian-axis",a),ref:function(t){e.layerReference=t}},n&&this.renderAxisLine(),this.renderTicks(s,this.state.fontSize,this.state.letterSpacing),_h.renderCallByParent(this.props))}}],o=[{key:"renderTickItem",value:function(e,t,n){var r=at(t.className,"recharts-cartesian-axis-tick-value");return h().isValidElement(e)?h().cloneElement(e,Uw(Uw({},t),{},{className:r})):Nt()(e)?e(Uw(Uw({},t),{},{className:r})):h().createElement(mc,Bw({},t,{className:"recharts-cartesian-axis-tick-value"}),n)}}],r&&qw(n.prototype,r),o&&qw(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.Component);function Xw(e){return Xw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xw(e)}function Zw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,rx(r.key),r)}}function Jw(e,t,n){return t=ex(t),function(e,t){if(t&&("object"===Xw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Qw()?Reflect.construct(t,n||[],ex(e).constructor):t.apply(e,n))}function Qw(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Qw=function(){return!!e})()}function ex(e){return ex=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ex(e)}function tx(e,t){return tx=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},tx(e,t)}function nx(e,t,n){return(t=rx(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rx(e){var t=function(e,t){if("object"!=Xw(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Xw(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Xw(t)?t:t+""}function ox(){return ox=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ox.apply(this,arguments)}function ix(e){var t=e.xAxisId,n=Kv(),r=$v(),o=qv(t);return null==o?null:y.createElement(Yw,ox({},o,{className:at("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(e){return Oy(e,!0)}}))}Vw(Yw,"displayName","CartesianAxis"),Vw(Yw,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var ax=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Jw(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&tx(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){return y.createElement(ix,this.props)}}])&&Zw(n.prototype,r),o&&Zw(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.Component);function cx(e){return cx="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},cx(e)}function lx(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,yx(r.key),r)}}function ux(e,t,n){return t=fx(t),function(e,t){if(t&&("object"===cx(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,sx()?Reflect.construct(t,n||[],fx(e).constructor):t.apply(e,n))}function sx(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(sx=function(){return!!e})()}function fx(e){return fx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},fx(e)}function px(e,t){return px=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},px(e,t)}function dx(e,t,n){return(t=yx(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yx(e){var t=function(e,t){if("object"!=cx(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=cx(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==cx(t)?t:t+""}function hx(){return hx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},hx.apply(this,arguments)}nx(ax,"displayName","XAxis"),nx(ax,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});var mx=function(e){var t=e.yAxisId,n=Kv(),r=$v(),o=Wv(t);return null==o?null:y.createElement(Yw,hx({},o,{className:at("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(e){return Oy(e,!0)}}))},vx=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),ux(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&px(e,t)}(t,e),n=t,(r=[{key:"render",value:function(){return y.createElement(mx,this.props)}}])&&lx(n.prototype,r),o&&lx(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.Component);dx(vx,"displayName","YAxis"),dx(vx,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});var bx=sw({chartName:"AreaChart",GraphicalChild:Sw,axisComponents:[{axisType:"xAxis",AxisComp:ax},{axisType:"yAxis",AxisComp:vx}],formatAxisMap:pv});const gx=wp.htmlEntities;var wx=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return(e=-1===e.toString().indexOf(".")?e:e.toFixed(t)).toString().replace(".00","")};const xx=function(e){if("n/a"===e)return e;e=parseFloat(e);var t=0,n=["K","M","B","T","Q"],r=Math.abs(e);if((e=wx(r))<1e3)return e;for(;e>=1e3&&++t<n.length;)e/=1e3;return 0===t?e:wx(e)+n[t-1]};n.dn(xx);const Ox=function(e){var t=e.total,n=void 0===t?"n/a":t,r=e.difference,o=void 0===r?"n/a":r,i=e.revert,a=void 0!==i&&i,c="rank-math-item-difference",l="",u="";if("n/a"!==n&&"n/a"!==o){n=(0,f.isUndefined)(n)?0:n,l=(0,f.round)(n,2),n=xx(n),o=(0,f.isUndefined)(o)?0:o,u=(0,f.round)(o,2),a=!(0,f.isUndefined)(a)&&a;var s=Math.abs(o)!==o;c=d()(c,{up:!a&&!s&&o>0||a&&s,down:!a&&s||a&&!s&&o>0})}return wp.element.createElement("div",{className:"rank-math-item-numbers"},wp.element.createElement("strong",{className:"text-large",title:l},n),"n/a"!==n&&n!=o&&wp.element.createElement("span",{className:c,title:u},xx(o)))};var kx=function(e){return"internal"===e?(0,l.__)("Internal Links","seo-by-rank-math"):"external"===e?(0,l.__)("External Links","seo-by-rank-math"):"incoming"===e?(0,l.__)("Incoming Links","seo-by-rank-math"):void 0};const Ex=function(e){var t=e.links,n=(0,f.defaults)(t,{internal:0,external:0,incoming:0});return wp.element.createElement("div",{className:"link-listing"},(0,f.map)(n,function(e,t){return wp.element.createElement("div",{className:"link-item",key:(0,f.uniqueId)("links-"),title:kx(t)},function(e){return"internal"===e?wp.element.createElement(ot.Dashicon,{icon:"admin-links",title:(0,l.__)("Internal Links","seo-by-rank-math")}):"external"===e?wp.element.createElement(ot.Dashicon,{icon:"external",title:(0,l.__)("External Links","seo-by-rank-math")}):"incoming"===e?wp.element.createElement(ot.Dashicon,{icon:"external",title:(0,l.__)("Incoming Links","seo-by-rank-math")}):void 0}(t)," ",e)}))};function Sx(e){return 100<e?"bad-fk dark":80<e?"good-fk":50<e?"ok-fk":"bad-fk"}n.dn(Sx);const jx=function(e){var t=e.score;if((t=parseInt(t))<1)return wp.element.createElement("div",{className:"seo-score no-score"},"N/A");var n=d()("seo-score",Sx(t),{"no-fk":0===t});return wp.element.createElement("div",{className:n},wp.element.createElement("span",{style:{width:t+"%"}}),wp.element.createElement("div",{className:"score-text"},0===t?"N/A":t))};function Px(e){return(0,f.get)({off:"rm-icon rm-icon-schema",Article:"rm-icon rm-icon-post",Book:"rm-icon rm-icon-book",Course:"rm-icon rm-icon-course",Dataset:"rm-icon rm-icon-dataset",Event:"rm-icon rm-icon-calendar",FactCheck:"rm-icon rm-icon-fact-check",JobPosting:"rm-icon rm-icon-job",Local:"rm-icon rm-icon-local-seo",Movie:"rm-icon rm-icon-movie",Music:"rm-icon rm-icon-music",Product:"rm-icon rm-icon-cart",Products:"rm-icon rm-icon-cart",WooCommerceProduct:"rm-icon rm-icon-cart",Recipe:"rm-icon rm-icon-recipe",Restaurant:"rm-icon rm-icon-restaurant",Video:"rm-icon rm-icon-video",Videos:"rm-icon rm-icon-video",VideoObject:"rm-icon rm-icon-video",Person:"rm-icon rm-icon-users",Review:"rm-icon rm-icon-star","Review snippets":"rm-icon rm-icon-star",Service:"rm-icon rm-icon-service",Software:"rm-icon rm-icon-software",SoftwareApplication:"rm-icon rm-icon-software","Sitelinks searchbox":"rm-icon rm-icon-search",FAQ:"rm-icon rm-icon-faq",FAQPage:"rm-icon rm-icon-faq",HowTo:"rm-icon rm-icon-howto",Breadcrumbs:"rm-icon rm-icon-redirection",PodcastEpisode:"rm-icon rm-icon-podcast"},e,"rm-icon rm-icon-schema")}const _x=function(e){var t=e.schemas;return(0,f.isUndefined)(t)?null:(t=(t=t||(0,l.__)("None","seo-by-rank-math")).toString().split(", "),wp.element.createElement("div",{className:"schema-listing"},(0,f.map)(t,function(e){var t=e.replace(/ /g,""),n="schema-item "+(0,f.lowerCase)(t);return wp.element.createElement("div",{className:n,key:(0,f.uniqueId)("schema-")},wp.element.createElement("i",{className:Px(t)})," ",e)})))};const Ax=function(e){var t=e.actions;return wp.element.createElement(ot.Button,{className:"button button-secondary"},(0,l.__)("Suggested Actions","seo-by-rank-math"),wp.element.createElement("span",null,t.length))};function Tx(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},i=r,a="",c=r.indexOf("#");-1!==c&&(i=r.substring(0,c),a=r.substring(c));var l=Object.keys(o).map(function(e){return"".concat(e,"=").concat(o[e])}).join("&"),u=i.includes("?")&&!i.endsWith("?")?"&":"?";return i+u+l+a+n}n.dn(Tx);const Cx=(0,ot.withFilters)("rankMath.analytics.keywordAddRemoveButton")(function(e){var t=e.sequence;return wp.element.createElement(u.Fragment,null,t,wp.element.createElement(ot.Button,{className:"button button-secondary button-small add-keyword",href:Tx("pro","Add KW Button"),target:"_blank"},wp.element.createElement("div",{className:"rank-math-tooltip"},wp.element.createElement("i",{className:"rm-icon rm-icon-plus"}),wp.element.createElement("span",null,(0,l.__)("Pro Feature","seo-by-rank-math")))))});const Nx=(0,ot.withFilters)("rankMath.analytics.keywordTitle")(function(e){var t=e.query;return wp.element.createElement("h4",null,(0,gx.decodeEntities)(t))});const Mx=(0,ot.withFilters)("rankMath.analytics.keywordDelete")(function(e){var t=e.sequence,n=e.query;return wp.element.createElement(u.Fragment,null,t,wp.element.createElement(ot.Button,{className:"button button-secondary button-small add-keyword delete",title:(0,l.__)("Delete from Keyword Manager","seo-by-rank-math"),onClick:function(){return(0,Ge.doAction)("rank_math_remove_keyword",n)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"})))});const Dx=(0,ot.withFilters)("rankMath.analytics.IndexingDataFooter")(function(){return wp.element.createElement("div",{className:"row-footer"},wp.element.createElement("table",null,wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("td",{colSpan:"8"},wp.element.createElement("div",{className:"last-crawl-data"},wp.element.createElement("div",null,wp.element.createElement("strong",null,(0,l.__)("Google: ","seo-by-rank-math")),wp.element.createElement("span",{className:"blurred"},(0,l.__)("Available in the PRO version","seo-by-rank-math"))),wp.element.createElement("div",null,wp.element.createElement("strong",null,(0,l.__)("Last Crawl: ","seo-by-rank-math")),wp.element.createElement("span",{className:"blurred"},(0,l.__)("PRO Feature","seo-by-rank-math")))))))))});function Ix(e){return Ix="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ix(e)}function Rx(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Lx(r.key),r)}}function Lx(e){var t=function(e,t){if("object"!=Ix(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ix(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ix(t)?t:t+""}function Bx(e,t,n){return t=Ux(t),function(e,t){if(t&&("object"==Ix(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Fx()?Reflect.construct(t,n||[],Ux(e).constructor):t.apply(e,n))}function Fx(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Fx=function(){return!!e})()}function Ux(e){return Ux=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ux(e)}function zx(e,t){return zx=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},zx(e,t)}var qx=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Bx(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zx(e,t)}(t,e),function(e,t,n){return t&&Rx(e.prototype,t),n&&Rx(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"render",value:function(){return wp.element.createElement("div",{className:"inner-elements hidden"},wp.element.createElement("table",null,wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("td",{colSpan:"8"},wp.element.createElement("div",{className:"indexing-data-wrapper"},this.getStatusResult(),this.getReferringURLs(),this.getMobileData(),this.richResultsData(),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 width-50"},wp.element.createElement("h3",null,(0,l.__)("PRO Version offers Advanced Indexing Stats","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Monitor metrics like Index Status, Last Crawl date, etc","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("All the Indexing statistics about your content in one place","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Use data provided by Google instead of 3rd party tools","seo-by-rank-math"))),wp.element.createElement("a",{href:Tx("pro","Index Status Tab Toggle"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math"))))))))))}},{key:"getStatusResult",value:function(){return wp.element.createElement("div",{className:"indexing-data status"},wp.element.createElement("h4",null,"Index Status Result"),Array.from([{label:"Verdict",value:"NEUTRAL"},{label:"Robots Text State",value:"ROBOTS_TXT_STATE_UNSPECIFIED"},{label:"Indexing State",value:"INDEXING_STATE_UNSPECIFIED"},{label:"Last Crawl Time",value:"2022-01-09 05:46:12"},{label:"Page Fetch State",value:"PAGE_FETCH_STATE_UNSPECIFIED"},{label:"Google Canonical",value:"https://example.com/"},{label:"User Canonical",value:"https://example.com/"},{label:"Sitemap",value:"https://example.com/sitemap_index.xml"}]).map(function(e){return wp.element.createElement("div",{key:e.label},wp.element.createElement("span",{className:"label"},e.label),wp.element.createElement("span",{className:"result"},e.value))}))}},{key:"getReferringURLs",value:function(){return wp.element.createElement("div",{className:"indexing-data referring-urls"},wp.element.createElement("h4",null,"Referring URLs"),wp.element.createElement("ul",null,["https://example.com/test1","https://example.com/test2"].map(function(e,t){return wp.element.createElement("li",{key:t},e)})))}},{key:"getMobileData",value:function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"indexing-data crawled"},wp.element.createElement("h4",null,"Crawled As"),wp.element.createElement("div",null,"UNSPECIFIED")),wp.element.createElement("div",{className:"indexing-data status"},wp.element.createElement("h4",null,"Mobile Usability Result"),wp.element.createElement("div",null,wp.element.createElement("span",null,"Verdict"),wp.element.createElement("span",null,"Unspecified"))))}},{key:"richResultsData",value:function(){return wp.element.createElement("div",{className:"indexing-data detected-items"},wp.element.createElement("h4",null,"detectedItems"),wp.element.createElement("div",{className:"rich-results-wrapper"},wp.element.createElement("div",{className:"rich-results-header"},wp.element.createElement("h4",null,"Rich Result Types"),wp.element.createElement("h4",null,"Items")),wp.element.createElement("div",{className:"rich-results-data"},wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("h4",null,"Breadcrumbs"),wp.element.createElement("div",{className:"schema-data"},wp.element.createElement("strong",null,"Name"),wp.element.createElement("span",null,"Unnamed item"))),wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("h4",null,"Review snippets"),wp.element.createElement("div",{className:"schema-data"},wp.element.createElement("strong",null,"Name"),wp.element.createElement("span",null,"Issues"),wp.element.createElement("div",{className:"sub-issues"},wp.element.createElement("span",null,"Unnamed item"),wp.element.createElement("span",{className:"schema-issues"},wp.element.createElement("strong",null,"Issue Message"),wp.element.createElement("strong",null,"Severity"),wp.element.createElement("div",{className:"issue-details"},wp.element.createElement("span",{className:"error"},wp.element.createElement("span",null,"Item does not support reviews"),wp.element.createElement("span",null,"ERROR")),wp.element.createElement("span",{className:"warning"},wp.element.createElement("span",null,"Missing reviewed item name"),wp.element.createElement("span",null,"WARNING"))))))))))}}])}(u.Component);const Wx=(0,ot.withFilters)("rankMath.analytics.IndexingDataToggle")(qx);function Kx(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return $x(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$x(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Hx=function(e){var t=e.currentTarget.nextSibling,n=t.classList.contains("inner-elements")?t:t.querySelector(".inner-elements");n.classList.contains("hidden")?n.classList.remove("hidden"):n.classList.add("hidden")};const Vx=function(e){var t=e.row,n=Kx((0,u.useState)(null),2),r=n[0],o=n[1],i=Kx((0,u.useState)(!1),2),a=i[0],c=i[1],l=(0,u.useRef)(null);(0,u.useEffect)(function(){l.current.click()},[]);return wp.element.createElement(u.Fragment,null,wp.element.createElement("h4",null,wp.element.createElement(We,{to:"/single/"+(0,f.get)(t,"object_id",""),ref:l,onClick:function(e){if(!a&&(e.preventDefault(),!a)){var t=document.createElement("tr");t.classList.add("rank-math-child-row");var n=e.currentTarget.closest("tr");n.addEventListener("click",Hx),n.parentNode.insertBefore(t,n.nextSibling);var r=document.createElement("td");r.colSpan=10,t.appendChild(r),o(r),c(!0)}}},wp.element.createElement("span",null,(0,gx.decodeEntities)(t.title)),wp.element.createElement("small",null,t.page))),a&&(0,u.createPortal)(wp.element.createElement(u.Fragment,null,wp.element.createElement(Dx,{data:t,onClick:Hx}),wp.element.createElement(Wx,{data:t})),r))};function Gx(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Yx(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Yx(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yx(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Xx(e,t){if("page_fetch_state"!==t)return e;var n={PAGE_FETCH_STATE_UNSPECIFIED:(0,l.__)("Unknown fetch state","seo-by-rank-math"),SUCCESSFUL:(0,l.__)("Successful fetch","seo-by-rank-math"),SOFT_404:(0,l.__)("Soft 404","seo-by-rank-math"),BLOCKED_ROBOTS_TXT:(0,l.__)("Blocked by robots.txt","seo-by-rank-math"),NOT_FOUND:(0,l.__)("Not found (404)","seo-by-rank-math"),ACCESS_DENIED:(0,l.__)("Blocked due to unauthorized request (401)","seo-by-rank-math"),SERVER_ERROR:(0,l.__)("Server error (5xx)","seo-by-rank-math"),REDIRECT_ERROR:(0,l.__)("Redirection error","seo-by-rank-math"),ACCESS_FORBIDDEN:(0,l.__)("Blocked due to access forbidden (403)","seo-by-rank-math"),BLOCKED_4XX:(0,l.__)("Blocked due to other 4xx issue (not 403, 404)","seo-by-rank-math"),INTERNAL_CRAWL_ERROR:(0,l.__)("Internal error","seo-by-rank-math"),INVALID_URL:(0,l.__)("Invalid URL","seo-by-rank-math")};return(0,f.has)(n,e)?n[e]:e}function Zx(e){return e?e.includes("UNSPECIFIED")?(0,l.__)("Unspecified","seo-by-rank-math"):"NEUTRAL"===e?(0,l.__)("Excluded","seo-by-rank-math"):e:(0,l.__)("Not available","seo-by-rank-math")}function Jx(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t=t||(0,l.sprintf)((0,l.__)("No data to display. Check back later or try to update data manually from %s","seo-by-rank-math"),'<a href="'+rankMath.adminurl+'?page=rank-math-options-general#setting-panel-analytics"><strong>'+(0,l.__)("Rank Math > General Settings > Analytics > Click 'Update data manually' button.","seo-by-rank-math")+"</strong></a>"),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"rank-math-analytics-notice"},wp.element.createElement("div",{className:"rank-math-cta-table woocommerce-table rank-math-table"},wp.element.createElement("div",{className:"rank-math-cta-header"},wp.element.createElement("h2",null,e)),wp.element.createElement("div",{className:"rank-math-cta-body",dangerouslySetInnerHTML:{__html:t}})))}function Qx(e,t){var n=Gx(t,2),r=n[0],o=n[1];return(0,u.useEffect)(function(){var t=e.current;if(t){new IntersectionObserver(function(e){Gx(e,1)[0].isIntersecting&&!1===r&&o(!0)}).observe(t)}},[r]),r}function eO(e){return eO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},eO(e)}function tO(e){return function(e){if(Array.isArray(e))return nO(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return nO(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nO(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nO(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rO(){return rO=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rO.apply(null,arguments)}function oO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function iO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?oO(Object(n),!0).forEach(function(t){aO(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):oO(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function aO(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=eO(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=eO(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==eO(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function cO(){return(0,Ge.applyFilters)("rank_math_is_pro",!1)}function lO(e,t){return(0,f.map)(e,function(e){return iO(iO({},e),{},{visible:e.required||(0,f.has)(t,e.key)&&t[e.key]})})}function uO(e,t){return(e-1)*t}function sO(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],i=0;return(0,f.map)(e,function(a,c){return(0,f.map)(t,function(t){var l,s,p,y=(0,f.get)(a,t,""),h="";if("sequenceOnly"===t)h=++i+n;else if("sequence"===t)y=(0,f.get)(a,"object_subtype","post"),h=wp.element.createElement(u.Fragment,null,++i+n," ",wp.element.createElement("i",{className:(s=y,p={post:"rm-icon-post",page:"rm-icon-page",product:"rm-icon-cart",download:"rm-icon-cart","web-story":"rm-icon-stories",topic:"rm-icon-users"},d()("post-type rm-icon",(0,f.has)(p,s)?p[s]:"rm-icon-post")),title:(l=y,l.charAt(0).toUpperCase()+l.slice(1))}));else if("sequenceAdd"===t){var m=r&&r.includes(c);h=wp.element.createElement(Cx,{isTracked:m,sequence:++i+n,query:a.query})}else if("sequenceDelete"===t)h=wp.element.createElement(Mx,{sequence:++i+n,query:a.query,rowID:c,rows:e,graphKeywords:o});else if("title"===t)y=y||c,h=(0,f.isUndefined)(a.index_verdict)?wp.element.createElement("h4",null,wp.element.createElement(We,{to:"/single/"+(0,f.get)(a,"object_id","")},wp.element.createElement("span",null,(0,gx.decodeEntities)(y)),wp.element.createElement("small",null,a.page))):wp.element.createElement(Vx,{row:a});else if("query"===t)h=wp.element.createElement(Nx,{query:y});else if("seo_score"===t)h=wp.element.createElement(jx,{score:y});else if("schemas_in_use"===t)h=wp.element.createElement(_x,{schemas:y}),y=(0,f.isArray)(y)?y.join(" "):"";else if("impressions"===t||"pageviews"===t||"clicks"===t||"ctr"===t)h=wp.element.createElement(Ox,y),y=y.difference;else if("position"===t)h=wp.element.createElement(Ox,rO({},y,{revert:!0})),y=y.difference;else if("positionHistory"===t){var v=(0,f.get)(a,"graph",!1),b="dataMax";if(!1!==v&&(0,f.isArray)(v)){var g=Math.max.apply(Math,tO(v.map(function(e){return e.position})));b=Math.min(g+parseInt(g/2),100)}h=!1===v?"":wp.element.createElement("div",{className:"rank-math-graph"},wp.element.createElement(hn,{height:40},wp.element.createElement(bx,{data:v,baseValue:b,margin:{top:0,right:0,left:0,bottom:0}},wp.element.createElement(vr,{wrapperClassName:"rank-math-graph-tooltip",labelFormatter:function(e){return(0,f.get)(v,[e,"formatted_date"],"")}}),wp.element.createElement("defs",null,wp.element.createElement("linearGradient",{id:"gradient",x1:"0",y1:"0",x2:"0",y2:"1"},wp.element.createElement("stop",{offset:"5%",stopColor:"#4e8cde",stopOpacity:.2}),wp.element.createElement("stop",{offset:"95%",stopColor:"#4e8cde",stopOpacity:0}))),wp.element.createElement(Sw,{dataKey:"position",stroke:"#4e8cde",strokeWidth:2,fill:"url(#gradient)"}),wp.element.createElement(vx,{hide:!0,reversed:!0}))))}else if("links"===t)h=wp.element.createElement(Ex,{links:y}),y="";else{if("actions"!==t)return h=wp.element.createElement("span",{className:t+" "+(0,f.kebabCase)(y)},(0,f.capitalize)((0,f.startCase)(Xx(y,t)))),(0,Ge.applyFilters)("rank_math_table_column_value",{display:h,value:y},h,y,t);h=wp.element.createElement(Ax,{actions:y}),y=y.join(" ")}return{display:h,value:y}})})}function fO(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n="";return(0,f.map)(e,function(e,r){e&&(n+="&"+r+"="+(!0===t?"1":e))}),n}function pO(e){return(0,f.map)(e,function(e){return e.title=e.query,e.content=wp.element.createElement(Ox,e.position),e})}function dO(e){return function(t){var n=he(),r=de(),o=function(){let{matches:e}=y.useContext(se),t=e[e.length-1];return t?t.params:{}}();return t=iO(iO({},t),{},{location:r,navigate:n,params:o}),wp.element.createElement(e,t)}}window.rankMath=window.rankMath||{},window.rankMath.analyticsHelpers=window.rankMath.analyticsHelpers||{},window.rankMath.analyticsHelpers={translateText:Xx,convertValue:Zx,noDataMessage:Jx,elementObserver:Qx};const yO=dO((0,ot.withFilters)("rankMath.analytics.searchForm")(function(){return null}));const hO=(0,rt.compose)((0,Ye.withSelect)(function(e){return{range:e("rank-math").getDaysRange()}}),(0,Ye.withDispatch)(function(e){return{updateDaysRange:function(t){e("rank-math").invalidateResolutionForStore(),(0,Ge.doAction)("rank_math_analytics_clear_store"),e("rank-math").updateDaysRange(t)}}}))(function(e){var t=e.heading,n=e.range,r=e.updateDaysRange,o=e.onChange,i=e.postID,a=void 0===i?0:i,c=e.slug,u=void 0!==c&&c,s=e.adminURL,f=e.homeURL,p=(0,Ge.applyFilters)("rank_math_analytics_day_range",[{label:"7 Days",value:"-7 days"},{label:"15 Days",value:"-15 days"},{label:"30 Days",value:"-30 days"},{label:"90 Days",value:"-3 months"}]);return wp.element.createElement("div",{className:"rank-math-analyzer-header"},wp.element.createElement("h3",{className:"tab-title"},wp.element.createElement("div",null,t),a>0&&wp.element.createElement(ot.Button,{isLink:!0,target:"_blank",className:"rank-math-edit-post",href:s+"post.php?post="+a+"&action=edit"},(0,l.__)("[Edit]","seo-by-rank-math")),u&&wp.element.createElement("a",{className:"rank-math-post-link",href:f+u,target:"_blank",rel:"noreferrer"},u)),wp.element.createElement(yO,null),(0,Ge.applyFilters)("rank_math_analytics_before_timeframe_test"),wp.element.createElement(ot.SelectControl,{label:(0,l.__)("Timeframe","seo-by-rank-math"),className:"analytics-dropdown",value:n,options:p,onChange:function(e){r(e),o&&o()},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))});const mO=(0,u.forwardRef)(function({icon:e,size:t=24,...n},r){return(0,u.cloneElement)(e,{width:t,height:t,...n,ref:r})});var vO=n(5163);const bO=({label:e,renderContent:t,className:n,onToggle:r,placement:o="bottom-start",focusOnMount:i="firstElement"})=>{if(!t)return null;return(0,u.createElement)("div",{className:at(n,"woocommerce-ellipsis-menu")},(0,u.createElement)(ot.Dropdown,{contentClassName:"woocommerce-ellipsis-menu__popover",popoverProps:{placement:o,focusOnMount:i},renderToggle:({onToggle:t,isOpen:n})=>{const o=at("woocommerce-ellipsis-menu__toggle",{"is-opened":n});return(0,u.createElement)(ot.Button,{className:o,onClick:e=>{r&&r(e),t&&t()},title:e,"aria-expanded":n},(0,u.createElement)(mO,{icon:(0,u.createElement)(vO.A,null)}))},renderContent:e=>(0,u.createElement)(ot.NavigableMenu,{className:"woocommerce-ellipsis-menu__content"},t(e))}))},gO=wp.keycodes,wO=({checked:e,children:t,isCheckbox:n=!1,isClickable:r=!1,onInvoke:o=()=>{}})=>{const i=(0,y.useRef)(null),a=e=>{r&&(e.preventDefault(),o())},c=e=>{const t=e.target;if(t.isSameNode(e.currentTarget)&&(e.keyCode!==gO.ENTER&&e.keyCode!==gO.SPACE||(e.preventDefault(),o()),e.keyCode===gO.UP&&e.preventDefault(),e.keyCode===gO.DOWN)){e.preventDefault();(t.nextSibling||t.parentNode?.querySelector(".woocommerce-ellipsis-menu__item")).focus()}};return n?(0,u.createElement)("div",{"aria-checked":e,ref:i,role:"menuitemcheckbox",tabIndex:0,onKeyDown:c,onClick:a,className:"woocommerce-ellipsis-menu__item"},(0,u.createElement)(ot.BaseControl,{className:"components-toggle-control"},(0,u.createElement)(ot.FormToggle,{"aria-hidden":"true",checked:e,onChange:o,onClick:e=>e.stopPropagation(),tabIndex:-1}),t)):(0,u.createElement)("div",{role:"menuitem",tabIndex:0,onKeyDown:c,onClick:a,className:"woocommerce-ellipsis-menu__item"},t)},xO=({children:e})=>(0,u.createElement)("div",{className:"woocommerce-ellipsis-menu__title"},e);const OO=e=>(0,u.createElement)("path",e),kO=(0,u.forwardRef)(({className:e,isPressed:t,...n},r)=>{const o={...n,className:at(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,u.createElement)("svg",{...o,ref:r})});kO.displayName="SVG";const EO=(0,y.createElement)(kO,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,y.createElement)(OO,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})),SO=(0,y.createElement)(kO,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,y.createElement)(OO,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"}));function jO({pageCount:e,currentPage:t,showPageArrowsLabel:n=!0,setCurrentPage:r}){if(e<=1)return null;const o=at("woocommerce-pagination__link",{"is-active":t>1}),i=at("woocommerce-pagination__link",{"is-active":t<e});return(0,u.createElement)("div",{className:"woocommerce-pagination__page-arrows"},n&&(0,u.createElement)("span",{className:"woocommerce-pagination__page-arrows-label",role:"status","aria-live":"polite"},(0,l.sprintf)((0,l.__)("Page %1$d of %2$d","woocommerce"),t,e)),(0,u.createElement)("div",{className:"woocommerce-pagination__page-arrows-buttons"},(0,u.createElement)(ot.Button,{className:o,disabled:!(t>1),onClick:function(e){e.stopPropagation(),t-1<1||r(t-1,"previous")},label:(0,l.__)("Previous Page","woocommerce")},(0,u.createElement)(ot.Icon,{icon:EO})),(0,u.createElement)(ot.Button,{className:i,disabled:!(t<e),onClick:function(n){n.stopPropagation(),t+1>e||r(t+1,"next")},label:(0,l.__)("Next Page","woocommerce")},(0,u.createElement)(ot.Icon,{icon:SO}))))}function PO({pageCount:e,currentPage:t,setCurrentPage:n}){const[r,o]=(0,u.useState)(t);const i=t<1||t>e,a=at("woocommerce-pagination__page-picker-input",{"has-error":i}),c=(0,f.uniqueId)("woocommerce-pagination-page-picker-");return(0,u.createElement)("div",{className:"woocommerce-pagination__page-picker"},(0,u.createElement)("label",{htmlFor:c,className:"woocommerce-pagination__page-picker-label"},(0,l.__)("Go to page","woocommerce"),(0,u.createElement)("input",{id:c,className:a,"aria-invalid":i,type:"number",onClick:function(e){e.currentTarget.select()},onChange:function(e){o(parseInt(e.currentTarget.value,10))},onBlur:function(r){const o=parseInt(r.target.value,10);o!==t&&Number.isFinite(o)&&o>0&&e&&e>=o&&n(o,"goto")},value:r,min:1,max:e})))}const _O=[25,50,75,100];function AO({perPage:e,currentPage:t,total:n,setCurrentPage:r,setPerPageChange:o=()=>{},perPageOptions:i=_O,label:a=(0,l.__)("Rows per page","woocommerce")}){const c=i.map(e=>({value:e.toString(),label:e.toString()}));return(0,u.createElement)("div",{className:"woocommerce-pagination__per-page-picker"},(0,u.createElement)(ot.SelectControl,{label:a,labelPosition:"side",value:e.toString(),onChange:function(e){o(parseInt(e,10));const i=Math.ceil(n/parseInt(e,10));t>i&&r(i)},options:c}))}function TO({page:e,onPageChange:t=()=>{},total:n,perPage:r,onPerPageChange:o=()=>{},showPagePicker:i=!0,showPerPagePicker:a=!0,showPageArrowsLabel:c=!0,className:l,perPageOptions:s=_O,children:f}){const p=Math.ceil(n/r);if(f&&"function"==typeof f)return f({pageCount:p});const d=at("woocommerce-pagination",l);return p<=1?n>s[0]&&(0,u.createElement)("div",{className:d},(0,u.createElement)(AO,{currentPage:e,perPage:r,setCurrentPage:t,total:n,setPerPageChange:o,perPageOptions:s}))||null:(0,u.createElement)("div",{className:d},(0,u.createElement)(jO,{currentPage:e,pageCount:p,showPageArrowsLabel:c,setCurrentPage:t}),i&&(0,u.createElement)(PO,{currentPage:e,pageCount:p,setCurrentPage:t}),a&&(0,u.createElement)(AO,{currentPage:e,perPage:r,setCurrentPage:t,total:n,setPerPageChange:o,perPageOptions:s}))}const CO=(0,y.createElement)(kO,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,y.createElement)(OO,{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})),NO=(0,y.createElement)(kO,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,y.createElement)(OO,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"}));var MO=Object.create(null);function DO(e,t={}){const{since:n,version:r,alternative:o,plugin:i,link:a,hint:c}=t,l=`${e} is deprecated${n?` since version ${n}`:""}${r?` and will be removed${i?` from ${i}`:""} in version ${r}`:""}.${o?` Please use ${o} instead.`:""}${a?` See: ${a}`:""}${c?` Note: ${c}`:""}`;l in MO||((0,Ge.doAction)("deprecated",e,t,l),console.warn(l),MO[l]=!0)}const IO="asc",RO="desc",LO=(0,rt.withInstanceId)(({instanceId:e,headers:t=[],rows:n=[],ariaHidden:r,caption:o,className:i,onSort:a=e=>e,query:c={},rowHeader:s,rowKey:p,emptyMessage:d,...y})=>{const{classNames:h}=y,[m,v]=(0,u.useState)(void 0),[b,g]=(0,u.useState)(!1),[w,x]=(0,u.useState)(!1),O=(0,u.useRef)(null);h&&DO("Table component's classNames prop",{since:"11.1.0",version:"12.0.0",alternative:"className",plugin:"@woocommerce/components"});const k=at("woocommerce-table__table",h,i,{"is-scrollable-right":b,"is-scrollable-left":w}),E=e=>()=>{const n=c.orderby||(0,f.get)((0,f.find)(t,{defaultSort:!0}),"key",!1),r=c.order||(0,f.get)((0,f.find)(t,{key:n}),"defaultOrder",RO);let o=RO;e===n&&(o=RO===r?IO:RO),a(e,o)},S=(e,t)=>p&&"function"==typeof p?p(e,t):t,j=()=>{const e=O.current;if(!e)return;const t=e.scrollWidth,n=e.offsetWidth,r=e.scrollLeft;if(!(t>n))return g(!1),x(!1),void(0!==r&&(e.scrollLeft=0));const o=0===r;g(!(t-r<=n)),x(!o)},P=c.orderby||(0,f.get)((0,f.find)(t,{defaultSort:!0}),"key",!1),_=c.order||(0,f.get)((0,f.find)(t,{key:P}),"defaultOrder",RO),A=!!n.length;return(0,u.useEffect)(()=>{const e=O.current?.scrollWidth,t=O.current?.clientWidth;if(void 0===e||void 0===t)return;v(e>t?0:void 0),j();const n=()=>{requestAnimationFrame(()=>{j()})};return window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),(0,u.useEffect)(j,[t,n,d]),(0,u.createElement)("div",{className:k,ref:O,tabIndex:m,"aria-hidden":r,"aria-labelledby":`caption-${e}`,role:"group",onScroll:j},(0,u.createElement)("table",null,(0,u.createElement)("caption",{id:`caption-${e}`,className:"woocommerce-table__caption screen-reader-text"},o,0===m&&(0,u.createElement)("small",null,(0,l.__)("(scroll to see more)","woocommerce"))),(0,u.createElement)("tbody",null,(0,u.createElement)("tr",null,t.map((t,n)=>{const{cellClassName:r,isLeftAligned:o,isSortable:i,isNumeric:a,key:c,label:s,screenReaderLabel:p}=t,d=`header-${e}-${n}`,y={className:at("woocommerce-table__header",r,{"is-left-aligned":o||!a,"is-sortable":i,"is-sorted":P===c,"is-numeric":a})};i&&(y["aria-sort"]="none",P===c&&(y["aria-sort"]=_===IO?"ascending":"descending"));const h=P===c&&_!==IO?(0,l.sprintf)((0,l.__)("Sort by %s in ascending order","woocommerce"),p||s):(0,l.sprintf)((0,l.__)("Sort by %s in descending order","woocommerce"),p||s),m=(0,u.createElement)(u.Fragment,null,(0,u.createElement)("span",{"aria-hidden":Boolean(p)},s),p&&(0,u.createElement)("span",{className:"screen-reader-text"},p));return(0,u.createElement)("th",{role:"columnheader",scope:"col",key:t.key||n,...y},i?(0,u.createElement)(u.Fragment,null,(0,u.createElement)(ot.Button,{"aria-describedby":d,onClick:A?E(c):f.noop},P===c&&_===IO?(0,u.createElement)(mO,{icon:CO}):(0,u.createElement)(mO,{icon:NO}),m),(0,u.createElement)("span",{className:"screen-reader-text",id:d},h)):m)})),A?n.map((e,n)=>(0,u.createElement)("tr",{key:S(e,n)},e.map((r,o)=>{const{cellClassName:i,isLeftAligned:a,isNumeric:c}=t[o],l=s===o,f=l?"th":"td",p=at("woocommerce-table__item",i,{"is-left-aligned":a||!c,"is-numeric":c,"is-sorted":P===t[o].key}),d=S(e,n).toString()+o;return(0,u.createElement)(f,{scope:l?"row":void 0,key:d,className:p},(e=>e.display||null)(r))}))):(0,u.createElement)("tr",null,(0,u.createElement)("td",{className:"woocommerce-table__empty-item",colSpan:t.length},d??(0,l.__)("No data to display","woocommerce"))))))}),BO=({query:e,caption:t,headers:n,numberOfRows:r=5,...o})=>{const i=(0,f.range)(r).map(()=>n.map(()=>({display:(0,u.createElement)("span",{className:"is-placeholder"})}))),a={query:e,caption:t,headers:n,numberOfRows:r,...o};return(0,u.createElement)(LO,{ariaHidden:!0,className:"is-loading",rows:i,...a})},FO=({data:e})=>(0,u.createElement)("ul",{className:"woocommerce-table__summary",role:"complementary"},e.map(({label:e,value:t},n)=>(0,u.createElement)("li",{className:"woocommerce-table__summary-item",key:n},(0,u.createElement)("span",{className:"woocommerce-table__summary-value"},t),(0,u.createElement)("span",{className:"woocommerce-table__summary-label"},e)))),UO=()=>(0,u.createElement)("ul",{className:"woocommerce-table__summary is-loading",role:"complementary"},(0,u.createElement)("li",{className:"woocommerce-table__summary-item"},(0,u.createElement)("span",{className:"is-placeholder"}))),zO=()=>()=>{},qO=()=>{},WO=({actions:e,className:t,hasSearch:n,tablePreface:r,headers:o=[],ids:i,isLoading:a=!1,onQueryChange:c=zO,onColumnsChange:s=qO,onSort:p,query:d={},rowHeader:y=0,rows:h=[],rowsPerPage:m,showMenu:v=!0,summary:b,title:g,totalRows:w,rowKey:x,emptyMessage:O,...k})=>{const[E,S]=(0,u.useState)(((e=[])=>e.map(({key:e,visible:t})=>!(void 0!==t&&!t)&&e).filter(Boolean))(o)),j=e=>()=>{if(E.includes(e)){if(d.orderby===e){const e=(0,f.find)(o,{defaultSort:!0})||(0,f.first)(o)||{key:void 0};c("sort")(e.key,"desc")}const t=(0,f.without)(E,e);s(t,e),S(t)}else{const t=[...E,e];s(t,e),S(t)}},P=o,_=o.filter(({key:e})=>E.includes(e)),A=h.map(e=>o.map(({key:t},n)=>E.includes(t)&&e[n]).filter(Boolean)),T=at("woocommerce-table",t,{"has-actions":!!e,"has-menu":v,"has-search":n});return(0,u.createElement)(ot.Card,{className:T},(0,u.createElement)(ot.CardHeader,null,(0,u.createElement)(ot.__experimentalText,{size:16,weight:600,as:"h2",color:"#23282d"},g),(0,u.createElement)("div",{className:"woocommerce-table__actions"},e),v&&(0,u.createElement)(bO,{label:(0,l.__)("Choose which values to display","woocommerce"),placement:"bottom-end",renderContent:()=>(0,u.createElement)(u.Fragment,null,(0,u.createElement)(xO,null,(0,l.__)("Columns:","woocommerce")),P.map(({key:e,label:t,required:n})=>n?null:(0,u.createElement)(wO,{checked:E.includes(e),isCheckbox:!0,isClickable:!0,key:e,onInvoke:void 0!==e?j(e):void 0},t)))})),(0,u.createElement)(ot.CardBody,{size:null},r&&(0,u.createElement)("div",{className:"woocommerce-table__preface"},r),a?(0,u.createElement)(u.Fragment,null,(0,u.createElement)("span",{className:"screen-reader-text"},(0,l.__)("Your requested data is loading","woocommerce")),(0,u.createElement)(BO,{numberOfRows:m,headers:_,rowHeader:y,caption:g,query:d})):(0,u.createElement)(LO,{rows:A,headers:_,rowHeader:y,caption:g,query:d,onSort:p||c("sort"),rowKey:x,emptyMessage:O})),(0,u.createElement)(ot.CardFooter,{justify:"center"},a?(0,u.createElement)(UO,null):(0,u.createElement)(u.Fragment,null,(0,u.createElement)(TO,{key:parseInt(d.paged,10)||1,page:parseInt(d.paged,10)||1,perPage:m,total:w,onPageChange:(e,t)=>{k.onPageChange&&k.onPageChange(e,t),c&&c("paged")(e.toString(),t)},onPerPageChange:e=>c("per_page")(e.toString())}),b&&(0,u.createElement)(FO,{data:b}))))};const KO=dO((0,ot.withFilters)("rankMath.analytics.siteAnalyticsTable")((0,Ye.withSelect)(function(e){return{summary:e("rank-math").getAnalyticsSummary().summary,seoScores:e("rank-math").getDashboardStats(e("rank-math").getDaysRange()).optimization}})(function(e){var t=e.summary,n=e.seoScores;if((0,f.isUndefined)(t)||(0,f.isUndefined)(n))return"Loading";var r=[{label:(0,l.__)("Posts","seo-by-rank-math"),value:n.total},{label:(0,l.__)("Total Impressions","seo-by-rank-math"),value:xx(t.impressions)},{label:(0,l.__)("Total Clicks","seo-by-rank-math"),value:xx(t.clicks)}],o={"power-words":{id:29,title:"Power Words: The Art of Writing Headlines That Get Clicked",page:"/blog/power-words",object_type:"post",object_subtype:"post",object_id:"18",seo_score:"26",schemas_in_use:"",links:{internal:3,external:2,incoming:1},pageviews:{total:4340,difference:102}},"howto-schema":{id:4,title:'How to Add "HowTo Schema" to your Website With Rank Math',page:"/blog/howto-schema",object_type:"post",object_subtype:"post",object_id:154,seo_score:88,schemas_in_use:"Article",links:{internal:2,external:3,incoming:5},pageviews:{total:2043,difference:523}},"/blog/faq-schema":{id:31,title:"FAQ Schema: A Practicla (and EASY) Guide",page:"/blog/faq-schema",object_type:"post",object_subtype:"post",object_id:12,seo_score:76,schemas_in_use:"Article, MusicGroup",links:{internal:4,external:1,incoming:2},pageviews:{total:809,difference:-49}},"/blog/elementor-seo":{id:29,title:"Elementor SEO: THe Solutions you've All Been Waiting For",page:"/blog/elementor-seo",object_type:"post",object_subtype:"post",object_id:"18",seo_score:"26",schemas_in_use:"",links:{internal:1,external:6,incoming:3},pageviews:{total:1033,difference:285}},"/blog/seo-elements":{id:4,title:"Are You Missing These SEO Elements on Your WordPress Website?",page:"/blog/seo-elements",object_type:"post",object_subtype:"post",object_id:154,seo_score:88,schemas_in_use:"Article",links:{internal:5,external:0,incoming:2},pageviews:{total:3928,difference:423}}},i=[{key:"sequence",label:(0,l.__)("#","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-index"},{key:"title",label:(0,l.__)("Title","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-title"},{key:"seo_score",label:(0,l.__)("SEO Score","seo-by-rank-math"),cellClassName:"rank-math-col-score"},{key:"schemas_in_use",label:(0,l.__)("Schema","seo-by-rank-math"),cellClassName:"rank-math-col-schema"},{key:"links",label:(0,l.__)("Links","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-links"},{key:"pageviews",label:(0,l.__)("Traffic","seo-by-rank-math"),cellClassName:"rank-math-col-pageviews"}];return wp.element.createElement("div",{className:"rank-math-posts"},wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 width-50"},wp.element.createElement("h3",null,(0,l.__)("Prioritize Your Content Efforts With Detailed Insights","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("All the statistics about your content all in one place","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Monitor key metrics like traffic and search performance","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Use data provided by Google instead of 3rd party tools","seo-by-rank-math"))),wp.element.createElement("a",{href:Tx("pro","Analytics Tab Table"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math")))),wp.element.createElement(WO,{className:"rank-math-table",title:(0,l.__)("Content","seo-by-rank-math"),headers:i,downloadable:!0,rowsPerPage:25,rows:sO(o,(0,f.map)(i,"key")),isLoading:(0,f.isEmpty)(o),totalRows:50,summary:r,showPageArrowsLabel:!1}))}))),$O=function(e){var t=(0,f.isEmpty)(e.toString());return{good:t||e.getAll("filter").includes("good"),ok:t||e.getAll("filter").includes("ok"),bad:t||e.getAll("filter").includes("bad"),noData:t||e.getAll("filter").includes("noData")}};n.dn($O);const HO=function(e){var t=e.className,n=e.children,r=d()("rank-math-tooltip",t);return wp.element.createElement("span",{className:r},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,n))};function VO(e){return VO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},VO(e)}function GO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function YO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?GO(Object(n),!0).forEach(function(t){XO(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):GO(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function XO(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=VO(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=VO(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==VO(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const ZO=function(e){var t=e.type,n=e.title,r=e.score,o=e.tooltip,i=e.onClick,a=e.selected,c=e.tooltipClassName,l=d()("score-filter-"+t,{"is-active":a[t]});return wp.element.createElement(ot.Button,{className:l,onClick:function(){i(YO(YO({},a),{},XO({},"".concat(t),!a[t])))}},wp.element.createElement("h4",null,n,wp.element.createElement(HO,{className:c},o)),wp.element.createElement("div",{className:"filter-score text-large"},r))};const JO=function(e){var t=e.times,n=void 0===t?4:t,r=e.height,o=void 0===r?"62":r,i=e.className;return wp.element.createElement("div",{className:i},(0,f.times)(n,function(e){return wp.element.createElement("button",{className:"components-button",key:e},wp.element.createElement(et,{animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%",height:o+"px"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"})))}))};var QO=function(e,t){if(cO()){var n="?";(0,f.map)(e,function(e,t){!0===e&&(n+="filter="+t+"&")}),t("/analytics/1"+n)}};const ek=dO((0,Ye.withSelect)(function(e,t){return{params:new URLSearchParams(t.location.search),navigate:t.navigate,seoScores:e("rank-math").getAnalyticsSummary().optimization}})(function(e){var t=e.seoScores,n=e.params,r=e.navigate;if((0,f.isEmpty)(t))return wp.element.createElement(JO,{className:"rank-math-graph-filter rank-math-score-filters"});var o=$O(n),i=t.good,a=t.ok,c=t.bad,u=t.noData;return wp.element.createElement("div",{className:"rank-math-graph-filter rank-math-score-filters"},wp.element.createElement(ZO,{type:"good",title:(0,l.__)("Good Score","seo-by-rank-math"),score:i,tooltipClassName:"bottom",tooltip:(0,l.__)("SEO score between 80 and 100. These posts are well optimized and usually do not require further actions.","seo-by-rank-math"),selected:o,onClick:function(e){QO(e,r)}}),wp.element.createElement(ZO,{type:"ok",title:(0,l.__)("Fair Score","seo-by-rank-math"),score:a,tooltipClassName:"bottom",tooltip:(0,l.__)("SEO score between 50 and 80. You may want to revisit these posts for further optimization.","seo-by-rank-math"),selected:o,onClick:function(e){QO(e,r)}}),wp.element.createElement(ZO,{type:"bad",title:(0,l.__)("Poor Score","seo-by-rank-math"),score:c,tooltipClassName:"bottom",tooltip:(0,l.__)("SEO score below 50. These posts are not well optimized and require further optimization.","seo-by-rank-math"),selected:o,onClick:function(e){QO(e,r)}}),wp.element.createElement(ZO,{type:"noData",title:(0,l.__)("No Data","seo-by-rank-math"),score:u,tooltipClassName:"bottom",tooltip:(0,l.__)("These posts have not been analyzed by Rank Math yet.","seo-by-rank-math"),selected:o,onClick:function(e){QO(e,r)}}))}));const tk=function(){return wp.element.createElement(u.Fragment,null,wp.element.createElement(hO,{heading:(0,l.__)("Site Analytics","seo-by-rank-math"),onChange:function(){(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getPostsSummary"),(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getPostsRowsByObjects")}}),wp.element.createElement(nt,null),wp.element.createElement(ek,null),wp.element.createElement(KO,null))};var nk=["points","className","baseLinePoints","connectNulls"];function rk(){return rk=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rk.apply(this,arguments)}function ok(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ik(e){return function(e){if(Array.isArray(e))return ak(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ak(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ak(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ak(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ck=function(e){return e&&e.x===+e.x&&e.y===+e.y},lk=function(e,t){var n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=[[]];return e.forEach(function(e){ck(e)?t[t.length-1].push(e):t[t.length-1].length>0&&t.push([])}),ck(e[0])&&t[t.length-1].push(e[0]),t[t.length-1].length<=0&&(t=t.slice(0,-1)),t}(e);t&&(n=[n.reduce(function(e,t){return[].concat(ik(e),ik(t))},[])]);var r=n.map(function(e){return e.reduce(function(e,t,n){return"".concat(e).concat(0===n?"M":"L").concat(t.x,",").concat(t.y)},"")}).join("");return 1===n.length?"".concat(r,"Z"):r},uk=function(e){var t=e.points,n=e.className,r=e.baseLinePoints,o=e.connectNulls,i=ok(e,nk);if(!t||!t.length)return null;var a=at("recharts-polygon",n);if(r&&r.length){var c=i.stroke&&"none"!==i.stroke,l=function(e,t,n){var r=lk(e,n);return"".concat("Z"===r.slice(-1)?r.slice(0,-1):r,"L").concat(lk(t.reverse(),n).slice(1))}(t,r,o);return h().createElement("g",{className:a},h().createElement("path",rk({},on(i,!0),{fill:"Z"===l.slice(-1)?i.fill:"none",stroke:"none",d:l})),c?h().createElement("path",rk({},on(i,!0),{fill:"none",d:lk(t,o)})):null,c?h().createElement("path",rk({},on(i,!0),{fill:"none",d:lk(r,o)})):null)}var u=lk(t,o);return h().createElement("path",rk({},on(i,!0),{fill:"Z"===u.slice(-1)?i.fill:"none",className:a,d:u}))};function sk(e){return sk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sk(e)}function fk(){return fk=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fk.apply(this,arguments)}function pk(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function dk(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pk(Object(n),!0).forEach(function(t){gk(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pk(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function yk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,wk(r.key),r)}}function hk(e,t,n){return t=vk(t),function(e,t){if(t&&("object"===sk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,mk()?Reflect.construct(t,n||[],vk(e).constructor):t.apply(e,n))}function mk(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(mk=function(){return!!e})()}function vk(e){return vk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},vk(e)}function bk(e,t){return bk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},bk(e,t)}function gk(e,t,n){return(t=wk(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wk(e){var t=function(e,t){if("object"!=sk(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=sk(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==sk(t)?t:t+""}var xk=Math.PI/180,Ok=1e-5,kk=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),hk(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bk(e,t)}(t,e),n=t,r=[{key:"getTickLineCoord",value:function(e){var t=this.props,n=t.cx,r=t.cy,o=t.radius,i=t.orientation,a=t.tickSize||8,c=ph(n,r,o,e.coordinate),l=ph(n,r,o+("inner"===i?-1:1)*a,e.coordinate);return{x1:c.x,y1:c.y,x2:l.x,y2:l.y}}},{key:"getTickTextAnchor",value:function(e){var t=this.props.orientation,n=Math.cos(-e.coordinate*xk);return n>Ok?"outer"===t?"start":"end":n<-Ok?"outer"===t?"end":"start":"middle"}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.cx,n=e.cy,r=e.radius,o=e.axisLine,i=e.axisLineType,a=dk(dk({},on(this.props,!1)),{},{fill:"none"},on(o,!1));if("circle"===i)return h().createElement(Do,fk({className:"recharts-polar-angle-axis-line"},a,{cx:t,cy:n,r}));var c=this.props.ticks.map(function(e){return ph(t,n,r,e.coordinate)});return h().createElement(uk,fk({className:"recharts-polar-angle-axis-line"},a,{points:c}))}},{key:"renderTicks",value:function(){var e=this,n=this.props,r=n.ticks,o=n.tick,i=n.tickLine,a=n.tickFormatter,c=n.stroke,l=on(this.props,!1),u=on(o,!1),s=dk(dk({},l),{},{fill:"none"},on(i,!1)),f=r.map(function(n,r){var f=e.getTickLineCoord(n),p=dk(dk(dk({textAnchor:e.getTickTextAnchor(n)},l),{},{stroke:"none",fill:c},u),{},{index:r,payload:n,x:f.x2,y:f.y2});return h().createElement(An,fk({className:at("recharts-polar-angle-axis-tick",vh(o)),key:"tick-".concat(n.coordinate)},Wt(e.props,n,r)),i&&h().createElement("line",fk({className:"recharts-polar-angle-axis-tick-line"},s,f)),o&&t.renderTickItem(o,p,a?a(n.value,r):n.value))});return h().createElement(An,{className:"recharts-polar-angle-axis-ticks"},f)}},{key:"render",value:function(){var e=this.props,t=e.ticks,n=e.radius,r=e.axisLine;return n<=0||!t||!t.length?null:h().createElement(An,{className:at("recharts-polar-angle-axis",this.props.className)},r&&this.renderAxisLine(),this.renderTicks())}}],o=[{key:"renderTickItem",value:function(e,t,n){return h().isValidElement(e)?h().cloneElement(e,t):Nt()(e)?e(t):h().createElement(mc,fk({},t,{className:"recharts-polar-angle-axis-tick-value"}),n)}}],r&&yk(n.prototype,r),o&&yk(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);gk(kk,"displayName","PolarAngleAxis"),gk(kk,"axisType","angleAxis"),gk(kk,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var Ek=n(7551),Sk=n.n(Ek),jk=n(6533),Pk=n.n(jk),_k=["cx","cy","angle","ticks","axisLine"],Ak=["ticks","tick","angle","tickFormatter","stroke"];function Tk(e){return Tk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tk(e)}function Ck(){return Ck=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ck.apply(this,arguments)}function Nk(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Mk(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Nk(Object(n),!0).forEach(function(t){Uk(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nk(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Dk(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ik(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,zk(r.key),r)}}function Rk(e,t,n){return t=Bk(t),function(e,t){if(t&&("object"===Tk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Lk()?Reflect.construct(t,n||[],Bk(e).constructor):t.apply(e,n))}function Lk(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Lk=function(){return!!e})()}function Bk(e){return Bk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Bk(e)}function Fk(e,t){return Fk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Fk(e,t)}function Uk(e,t,n){return(t=zk(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zk(e){var t=function(e,t){if("object"!=Tk(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Tk(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Tk(t)?t:t+""}var qk,Wk=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Rk(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fk(e,t)}(t,e),n=t,r=[{key:"getTickValueCoord",value:function(e){var t=e.coordinate,n=this.props,r=n.angle,o=n.cx,i=n.cy;return ph(o,i,t,r)}},{key:"getTickTextAnchor",value:function(){var e;switch(this.props.orientation){case"left":e="end";break;case"right":e="start";break;default:e="middle"}return e}},{key:"getViewBox",value:function(){var e=this.props,t=e.cx,n=e.cy,r=e.angle,o=e.ticks,i=Sk()(o,function(e){return e.coordinate||0});return{cx:t,cy:n,startAngle:r,endAngle:r,innerRadius:Pk()(o,function(e){return e.coordinate||0}).coordinate||0,outerRadius:i.coordinate||0}}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.cx,n=e.cy,r=e.angle,o=e.ticks,i=e.axisLine,a=Dk(e,_k),c=o.reduce(function(e,t){return[Math.min(e[0],t.coordinate),Math.max(e[1],t.coordinate)]},[1/0,-1/0]),l=ph(t,n,c[0],r),u=ph(t,n,c[1],r),s=Mk(Mk(Mk({},on(a,!1)),{},{fill:"none"},on(i,!1)),{},{x1:l.x,y1:l.y,x2:u.x,y2:u.y});return h().createElement("line",Ck({className:"recharts-polar-radius-axis-line"},s))}},{key:"renderTicks",value:function(){var e=this,n=this.props,r=n.ticks,o=n.tick,i=n.angle,a=n.tickFormatter,c=n.stroke,l=Dk(n,Ak),u=this.getTickTextAnchor(),s=on(l,!1),f=on(o,!1),p=r.map(function(n,r){var l=e.getTickValueCoord(n),p=Mk(Mk(Mk(Mk({textAnchor:u,transform:"rotate(".concat(90-i,", ").concat(l.x,", ").concat(l.y,")")},s),{},{stroke:"none",fill:c},f),{},{index:r},l),{},{payload:n});return h().createElement(An,Ck({className:at("recharts-polar-radius-axis-tick",vh(o)),key:"tick-".concat(n.coordinate)},Wt(e.props,n,r)),t.renderTickItem(o,p,a?a(n.value,r):n.value))});return h().createElement(An,{className:"recharts-polar-radius-axis-ticks"},p)}},{key:"render",value:function(){var e=this.props,t=e.ticks,n=e.axisLine,r=e.tick;return t&&t.length?h().createElement(An,{className:at("recharts-polar-radius-axis",this.props.className)},n&&this.renderAxisLine(),r&&this.renderTicks(),_h.renderCallByParent(this.props,this.getViewBox())):null}}],o=[{key:"renderTickItem",value:function(e,t,n){return h().isValidElement(e)?h().cloneElement(e,t):Nt()(e)?e(t):h().createElement(mc,Ck({},t,{className:"recharts-polar-radius-axis-tick-value"}),n)}}],r&&Ik(n.prototype,r),o&&Ik(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);function Kk(e){return Kk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kk(e)}function $k(){return $k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},$k.apply(this,arguments)}function Hk(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Vk(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Hk(Object(n),!0).forEach(function(t){Qk(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hk(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Gk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,eE(r.key),r)}}function Yk(e,t,n){return t=Zk(t),function(e,t){if(t&&("object"===Kk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Xk()?Reflect.construct(t,n||[],Zk(e).constructor):t.apply(e,n))}function Xk(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Xk=function(){return!!e})()}function Zk(e){return Zk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Zk(e)}function Jk(e,t){return Jk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Jk(e,t)}function Qk(e,t,n){return(t=eE(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eE(e){var t=function(e,t){if("object"!=Kk(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Kk(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Kk(t)?t:t+""}Uk(Wk,"displayName","PolarRadiusAxis"),Uk(Wk,"axisType","radiusAxis"),Uk(Wk,"defaultProps",{type:"number",radiusAxisId:0,cx:0,cy:0,angle:0,orientation:"right",stroke:"#ccc",axisLine:!0,tick:!0,tickCount:5,allowDataOverflow:!1,scale:"auto",allowDuplicatedCategory:!0});var tE=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Qk(n=Yk(this,t,[e]),"pieRef",null),Qk(n,"sectorRefs",[]),Qk(n,"id",Et("recharts-pie-")),Qk(n,"handleAnimationEnd",function(){var e=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),Nt()(e)&&e()}),Qk(n,"handleAnimationStart",function(){var e=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),Nt()(e)&&e()}),n.state={isAnimationFinished:!e.isAnimationActive,prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,sectorToFocus:0},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jk(e,t)}(t,e),n=t,o=[{key:"getDerivedStateFromProps",value:function(e,t){return t.prevIsAnimationActive!==e.isAnimationActive?{prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:[],isAnimationFinished:!0}:e.isAnimationActive&&e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:t.curSectors,isAnimationFinished:!0}:e.sectors!==t.curSectors?{curSectors:e.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(e,t){return e>t?"start":e<t?"end":"middle"}},{key:"renderLabelLineItem",value:function(e,t,n){if(h().isValidElement(e))return h().cloneElement(e,t);if(Nt()(e))return e(t);var r=at("recharts-pie-label-line","boolean"!=typeof e?e.className:"");return h().createElement(hg,$k({},t,{key:n,type:"linear",className:r}))}},{key:"renderLabelItem",value:function(e,t,n){if(h().isValidElement(e))return h().cloneElement(e,t);var r=n;if(Nt()(e)&&(r=e(t),h().isValidElement(r)))return r;var o=at("recharts-pie-label-text","boolean"==typeof e||Nt()(e)?"":e.className);return h().createElement(mc,$k({},t,{alignmentBaseline:"middle",className:o}),r)}}],(r=[{key:"isActiveIndex",value:function(e){var t=this.props.activeIndex;return Array.isArray(t)?-1!==t.indexOf(e):e===t}},{key:"hasActiveIndex",value:function(){var e=this.props.activeIndex;return Array.isArray(e)?0!==e.length:e||0===e}},{key:"renderLabels",value:function(e){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,r=n.label,o=n.labelLine,i=n.dataKey,a=n.valueKey,c=on(this.props,!1),l=on(r,!1),u=on(o,!1),s=r&&r.offsetRadius||20,f=e.map(function(e,n){var f=(e.startAngle+e.endAngle)/2,p=ph(e.cx,e.cy,e.outerRadius+s,f),d=Vk(Vk(Vk(Vk({},c),e),{},{stroke:"none"},l),{},{index:n,textAnchor:t.getTextAnchor(p.x,e.cx)},p),y=Vk(Vk(Vk(Vk({},c),e),{},{fill:"none",stroke:e.fill},u),{},{index:n,points:[ph(e.cx,e.cy,e.outerRadius,f),p]}),m=i;return bt()(i)&&bt()(a)?m="value":bt()(i)&&(m=a),h().createElement(An,{key:"label-".concat(e.startAngle,"-").concat(e.endAngle,"-").concat(e.midAngle,"-").concat(n)},o&&t.renderLabelLineItem(o,y,"line"),t.renderLabelItem(r,d,hy(e,m)))});return h().createElement(An,{className:"recharts-pie-labels"},f)}},{key:"renderSectorsStatically",value:function(e){var t=this,n=this.props,r=n.activeShape,o=n.blendStroke,i=n.inactiveShape;return e.map(function(n,a){if(0===(null==n?void 0:n.startAngle)&&0===(null==n?void 0:n.endAngle)&&1!==e.length)return null;var c=t.isActiveIndex(a),l=i&&t.hasActiveIndex()?i:null,u=c?r:l,s=Vk(Vk({},n),{},{stroke:o?n.fill:n.stroke,tabIndex:-1});return h().createElement(An,$k({ref:function(e){e&&!t.sectorRefs.includes(e)&&t.sectorRefs.push(e)},tabIndex:-1,className:"recharts-pie-sector"},Wt(t.props,n,a),{key:"sector-".concat(null==n?void 0:n.startAngle,"-").concat(null==n?void 0:n.endAngle,"-").concat(n.midAngle,"-").concat(a)}),h().createElement(Pm,$k({option:u,isActive:c,shapeType:"sector"},s)))})}},{key:"renderSectorsWithAnimation",value:function(){var e=this,t=this.props,n=t.sectors,r=t.isAnimationActive,o=t.animationBegin,i=t.animationDuration,a=t.animationEasing,c=t.animationId,l=this.state,u=l.prevSectors,s=l.prevIsAnimationActive;return h().createElement(sa,{begin:o,duration:i,isActive:r,easing:a,from:{t:0},to:{t:1},key:"pie-".concat(c,"-").concat(s),onAnimationStart:this.handleAnimationStart,onAnimationEnd:this.handleAnimationEnd},function(t){var r=t.t,o=[],i=(n&&n[0]).startAngle;return n.forEach(function(e,t){var n=u&&u[t],a=t>0?yt()(e,"paddingAngle",0):0;if(n){var c=Pt(n.endAngle-n.startAngle,e.endAngle-e.startAngle),l=Vk(Vk({},e),{},{startAngle:i+a,endAngle:i+c(r)+a});o.push(l),i=l.endAngle}else{var s=e.endAngle,f=e.startAngle,p=Pt(0,s-f)(r),d=Vk(Vk({},e),{},{startAngle:i+a,endAngle:i+p+a});o.push(d),i=d.endAngle}}),h().createElement(An,null,e.renderSectorsStatically(o))})}},{key:"attachKeyboardHandlers",value:function(e){var t=this;e.onkeydown=function(e){if(!e.altKey)switch(e.key){case"ArrowLeft":var n=++t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[n].focus(),t.setState({sectorToFocus:n});break;case"ArrowRight":var r=--t.state.sectorToFocus<0?t.sectorRefs.length-1:t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[r].focus(),t.setState({sectorToFocus:r});break;case"Escape":t.sectorRefs[t.state.sectorToFocus].blur(),t.setState({sectorToFocus:0})}}}},{key:"renderSectors",value:function(){var e=this.props,t=e.sectors,n=e.isAnimationActive,r=this.state.prevSectors;return!(n&&t&&t.length)||r&&yd()(r,t)?this.renderSectorsStatically(t):this.renderSectorsWithAnimation()}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var e=this,t=this.props,n=t.hide,r=t.sectors,o=t.className,i=t.label,a=t.cx,c=t.cy,l=t.innerRadius,u=t.outerRadius,s=t.isAnimationActive,f=this.state.isAnimationFinished;if(n||!r||!r.length||!xt(a)||!xt(c)||!xt(l)||!xt(u))return null;var p=at("recharts-pie",o);return h().createElement(An,{tabIndex:this.props.rootTabIndex,className:p,ref:function(t){e.pieRef=t}},this.renderSectors(),i&&this.renderLabels(r),_h.renderCallByParent(this.props,null,!1),(!s||f)&&Yh.renderCallByParent(this.props,r,!1))}}])&&Gk(n.prototype,r),o&&Gk(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(y.PureComponent);qk=tE,Qk(tE,"displayName","Pie"),Qk(tE,"defaultProps",{stroke:"#fff",fill:"#808080",legendType:"rect",cx:"50%",cy:"50%",startAngle:0,endAngle:360,innerRadius:0,outerRadius:"80%",paddingAngle:0,labelLine:!0,hide:!1,minAngle:0,isAnimationActive:!nr.isSsr,animationBegin:400,animationDuration:1500,animationEasing:"ease",nameKey:"name",blendStroke:!1,rootTabIndex:0}),Qk(tE,"parseDeltaAngle",function(e,t){return gt(t-e)*Math.min(Math.abs(t-e),360)}),Qk(tE,"getRealPieData",function(e){var t=e.data,n=e.children,r=on(e,!1),o=Qt(n,Ih);return t&&t.length?t.map(function(e,t){return Vk(Vk(Vk({payload:e},r),e),o&&o[t]&&o[t].props)}):o&&o.length?o.map(function(e){return Vk(Vk({},r),e.props)}):[]}),Qk(tE,"parseCoordinateOfPie",function(e,t){var n=t.top,r=t.left,o=t.width,i=t.height,a=dh(o,i);return{cx:r+St(e.cx,o,o/2),cy:n+St(e.cy,i,i/2),innerRadius:St(e.innerRadius,a,0),outerRadius:St(e.outerRadius,a,.8*a),maxRadius:e.maxRadius||Math.sqrt(o*o+i*i)/2}}),Qk(tE,"getComposedData",function(e){var t=e.item,n=e.offset,r=void 0!==t.type.defaultProps?Vk(Vk({},t.type.defaultProps),t.props):t.props,o=qk.getRealPieData(r);if(!o||!o.length)return null;var i=r.cornerRadius,a=r.startAngle,c=r.endAngle,l=r.paddingAngle,u=r.dataKey,s=r.nameKey,f=r.valueKey,p=r.tooltipType,d=Math.abs(r.minAngle),y=qk.parseCoordinateOfPie(r,n),h=qk.parseDeltaAngle(a,c),m=Math.abs(h),v=u;bt()(u)&&bt()(f)?(Tt(!1,'Use "dataKey" to specify the value of pie,\n      the props "valueKey" will be deprecated in 1.1.0'),v="value"):bt()(u)&&(Tt(!1,'Use "dataKey" to specify the value of pie,\n      the props "valueKey" will be deprecated in 1.1.0'),v=f);var b,g,w=o.filter(function(e){return 0!==hy(e,v,0)}).length,x=m-w*d-(m>=360?w:w-1)*l,O=o.reduce(function(e,t){var n=hy(t,v,0);return e+(xt(n)?n:0)},0);O>0&&(b=o.map(function(e,t){var n,r=hy(e,v,0),o=hy(e,s,t),c=(xt(r)?r:0)/O,u=(n=t?g.endAngle+gt(h)*l*(0!==r?1:0):a)+gt(h)*((0!==r?d:0)+c*x),f=(n+u)/2,m=(y.innerRadius+y.outerRadius)/2,b=[{name:o,value:r,payload:e,dataKey:v,type:p}],w=ph(y.cx,y.cy,m,f);return g=Vk(Vk(Vk({percent:c,cornerRadius:i,name:o,tooltipPayload:b,midAngle:f,middleRadius:m,tooltipPosition:w},e),y),{},{value:hy(e,v),startAngle:n,endAngle:u,payload:e,paddingAngle:gt(h)*l})}));return Vk(Vk({},y),{},{sectors:b,data:o})});var nE=sw({chartName:"PieChart",GraphicalChild:tE,validateTooltipEventTypes:["item"],defaultTooltipEventType:"item",legendContent:"children",axisComponents:[{axisType:"angleAxis",AxisComp:kk},{axisType:"radiusAxis",AxisComp:Wk}],formatAxisMap:function(e,t,n,r,o){var i=e.width,a=e.height,c=e.startAngle,l=e.endAngle,u=St(e.cx,i,i/2),s=St(e.cy,a,a/2),f=dh(i,a,n),p=St(e.innerRadius,f,0),d=St(e.outerRadius,f,.8*f);return Object.keys(t).reduce(function(e,n){var i,a=t[n],f=a.domain,y=a.reversed;if(bt()(a.range))"angleAxis"===r?i=[c,l]:"radiusAxis"===r&&(i=[p,d]),y&&(i=[i[1],i[0]]);else{var h=lh(i=a.range,2);c=h[0],l=h[1]}var m=Sy(a,o),v=m.realScaleType,b=m.scale;b.domain(f).range(i),Py(b);var g=Ty(b,ah(ah({},a),{},{realScaleType:v})),w=ah(ah(ah({},a),g),{},{range:i,radius:d,realScaleType:v,scale:b,cx:u,cy:s,innerRadius:p,outerRadius:d,startAngle:c,endAngle:l});return ah(ah({},e),{},ch({},n,w))},{})},defaultProps:{layout:"centric",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}});function rE(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function oE(){return oE=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},oE.apply(null,arguments)}function iE(e,t){return iE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},iE(e,t)}function aE(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,iE(e,t)}const cE=h().createContext(null);function lE(e,t){var n=Object.create(null);return e&&y.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,y.isValidElement)(e)?t(e):e}(e)}),n}function uE(e,t,n){return null!=n[t]?n[t]:e.props[t]}function sE(e,t,n){var r=lE(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var c={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];c[o[l][r]]=n(u)}c[l]=n(l)}for(r=0;r<i.length;r++)c[i[r]]=n(i[r]);return c}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,y.isValidElement)(a)){var c=i in t,l=i in r,u=t[i],s=(0,y.isValidElement)(u)&&!u.props.in;!l||c&&!s?l||!c||s?l&&c&&(0,y.isValidElement)(u)&&(o[i]=(0,y.cloneElement)(a,{onExited:n.bind(null,a),in:u.props.in,exit:uE(a,"exit",e),enter:uE(a,"enter",e)})):o[i]=(0,y.cloneElement)(a,{in:!1}):o[i]=(0,y.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:uE(a,"exit",e),enter:uE(a,"enter",e)})}}),o}var fE=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},pE=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}aE(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,lE(n.children,function(e){return(0,y.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:uE(e,"appear",n),enter:uE(e,"enter",n),exit:uE(e,"exit",n)})})):sE(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=lE(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=oE({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=rE(e,["component","childFactory"]),o=this.state.contextValue,i=fE(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?h().createElement(cE.Provider,{value:o},i):h().createElement(cE.Provider,{value:o},h().createElement(t,r,i))},t}(h().Component);pE.propTypes={},pE.defaultProps={component:"div",childFactory:function(e){return e}};const dE=pE;function yE(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}const hE=!1;var mE=function(e){return e.scrollTop},vE="unmounted",bE="exited",gE="entering",wE="entered",xE="exiting",OE=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=bE,r.appearStatus=gE):o=wE:o=t.unmountOnExit||t.mountOnEnter?vE:bE,r.state={status:o},r.nextCallback=null,r}aE(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===vE?{status:bE}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==gE&&n!==wE&&(t=gE):n!==gE&&n!==wE||(t=xE)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===gE){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:b().findDOMNode(this);n&&mE(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===bE&&this.setState({status:vE})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[b().findDOMNode(this),r],i=o[0],a=o[1],c=this.getTimeouts(),l=r?c.appear:c.enter;!e&&!n||hE?this.safeSetState({status:wE},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:gE},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:wE},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:b().findDOMNode(this);t&&!hE?(this.props.onExit(r),this.safeSetState({status:xE},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:bE},function(){e.props.onExited(r)})})})):this.safeSetState({status:bE},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:b().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===vE)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,rE(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return h().createElement(cE.Provider,{value:null},"function"==typeof n?n(e,r):h().cloneElement(h().Children.only(n),r))},t}(h().Component);function kE(){}OE.contextType=cE,OE.propTypes={},OE.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:kE,onEntering:kE,onEntered:kE,onExit:kE,onExiting:kE,onExited:kE},OE.UNMOUNTED=vE,OE.EXITED=bE,OE.ENTERING=gE,OE.ENTERED=wE,OE.EXITING=xE;const EE=OE;var SE=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=yE(n.className,r):n.setAttribute("class",yE(n.className&&n.className.baseVal||"",r)));var n,r})},jE=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}aE(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&mE(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&SE(e,r),o&&SE(e,o),i&&SE(e,i)},n.render=function(){var e=this.props,t=(e.classNames,rE(e,["classNames"]));return h().createElement(EE,oE({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(h().Component);jE.defaultProps={classNames:""},jE.propTypes={};const PE=jE;wp.url;function _E(e){return _E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_E(e)}function AE(e){var t=function(e,t){if("object"!=_E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_E(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_E(t)?t:t+""}function TE(e,t,n){return(t=AE(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function CE(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function NE(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?CE(n,!0).forEach(function(t){TE(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):CE(n).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var ME={adminUrl:"",countries:[],currency:{code:"USD",precision:2,symbol:"$",symbolPosition:"left",decimalSeparator:".",priceFormat:"%1$s%2$s",thousandSeparator:","},defaultDateRange:"period=month&compare=previous_year",locale:{siteLocale:"en_US",userLocale:"en_US",weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},orderStatuses:[],siteTitle:"",wcAssetUrl:""},DE=NE({},ME,{},"object"===("undefined"==typeof wcSharedSettings?"undefined":_E(wcSharedSettings))?wcSharedSettings:{});DE.currency=NE({},ME.currency,{},DE.currency),DE.locale=NE({},ME.locale,{},DE.locale);var IE;DE.adminUrl,DE.countries,DE.currency,DE.locale,DE.orderStatuses,DE.siteTitle,DE.wcAssetUrl,DE.defaultDateRange;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(IE||(IE={}));var RE=function(e){return e};var LE="beforeunload",BE="popstate";function FE(e){e.preventDefault(),e.returnValue=""}function UE(){var e=[];return{get length(){return e.length},push:function(t){return e.push(t),function(){e=e.filter(function(e){return e!==t})}},call:function(t){e.forEach(function(e){return e&&e(t)})}}}function zE(){return Math.random().toString(36).substr(2,8)}function qE(e){var t=e.pathname,n=void 0===t?"/":t,r=e.search,o=void 0===r?"":r,i=e.hash,a=void 0===i?"":i;return o&&"?"!==o&&(n+="?"===o.charAt(0)?o:"?"+o),a&&"#"!==a&&(n+="#"===a.charAt(0)?a:"#"+a),n}function WE(e){var t={};if(e){var n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));var r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}var KE=n(5373);let $E;function HE(){if(!$E){const e=function(e){void 0===e&&(e={});var t=e.window,n=void 0===t?document.defaultView:t,r=n.history;function o(){var e=n.location,t=e.pathname,o=e.search,i=e.hash,a=r.state||{};return[a.idx,RE({pathname:t,search:o,hash:i,state:a.usr||null,key:a.key||"default"})]}var i=null;n.addEventListener(BE,function(){if(i)f.call(i),i=null;else{var e=IE.Pop,t=o(),n=t[0],r=t[1];if(f.length){if(null!=n){var a=l-n;a&&(i={action:e,location:r,retry:function(){v(-1*a)}},v(a))}}else m(e)}});var a=IE.Pop,c=o(),l=c[0],u=c[1],s=UE(),f=UE();function p(e){return"string"==typeof e?e:qE(e)}function d(e,t){return void 0===t&&(t=null),RE(oE({pathname:u.pathname,hash:"",search:""},"string"==typeof e?WE(e):e,{state:t,key:zE()}))}function y(e,t){return[{usr:e.state,key:e.key,idx:t},p(e)]}function h(e,t,n){return!f.length||(f.call({action:e,location:t,retry:n}),!1)}function m(e){a=e;var t=o();l=t[0],u=t[1],s.call({action:a,location:u})}function v(e){r.go(e)}null==l&&(l=0,r.replaceState(oE({},r.state,{idx:l}),""));var b={get action(){return a},get location(){return u},createHref:p,push:function e(t,o){var i=IE.Push,a=d(t,o);if(h(i,a,function(){e(t,o)})){var c=y(a,l+1),u=c[0],s=c[1];try{r.pushState(u,"",s)}catch(e){n.location.assign(s)}m(i)}},replace:function e(t,n){var o=IE.Replace,i=d(t,n);if(h(o,i,function(){e(t,n)})){var a=y(i,l),c=a[0],u=a[1];r.replaceState(c,"",u),m(o)}},go:v,back:function(){v(-1)},forward:function(){v(1)},listen:function(e){return s.push(e)},block:function(e){var t=f.push(e);return 1===f.length&&n.addEventListener(LE,FE),function(){t(),f.length||n.removeEventListener(LE,FE)}}};return b}();let t=[e.location];const n=(e,n)=>{switch(e){case"POP":t=t.slice(0,t.length-1);break;case"PUSH":t=[...t,n];break;case"REPLACE":t=[...t.slice(0,t.length-1),n]}};$E={get action(){return e.action},get location(){const{location:t}=e,n=(0,KE.parse)(t.search.substring(1));let r;return n&&"string"==typeof n.path?r=n.path:n&&n.path&&"string"!=typeof n.path?(console.warn(`Query path parameter should be a string but instead was: ${n.path}, undefined behaviour may occur.`),r=n.path):r="/",{...t,pathname:r}},get __experimentalLocationStack(){return[...t]},createHref:e.createHref,push:e.push,replace:e.replace,go:e.go,back:e.back,forward:e.forward,block:e.block,listen(t){return e.listen(()=>{t({action:this.action,location:this.location})})}},e.listen(()=>n($E.action,$E.location))}return $E}const VE=({href:e,children:t,type:n="wc-admin",...r})=>{const o=(e,t)=>{if(t?.ctrlKey||t?.metaKey||t?.altKey||t?.shiftKey)return;t?.preventDefault();if(!1!==(!e||!t||e(t))&&t?.target instanceof Element){const e=t.target.closest("a")?.getAttribute("href");e?HE().push(e):console.error("@woocommerce/components/link is trying to push an undefined state into navigation stack")}},i={...r,"data-link-type":n};return"wc-admin"===n&&(i.onClick=(0,f.partial)(o,i.onClick)),(0,u.createElement)("a",{href:e,...i},t)};function GE(e){const{href:t,linkType:n}=e;return n||(t?"external":null)}function YE(e){const{item:t}=e,{before:n,title:r,after:o,content:i,onClick:a,href:c,target:l,listItemTag:s}=t,f="function"==typeof a||c,p=c?VE:"div",d={className:"woocommerce-list__item-inner",onClick:"function"==typeof a?a:null,"aria-disabled":f?"false":null,tabIndex:f?"0":null,role:f?"menuitem":null,onKeyDown:e=>f?function(e,t){"function"==typeof t&&e.keyCode===gO.ENTER&&t()}(e,a):null,target:c?l:null,type:GE(t),href:c,"data-list-item-tag":s};return(0,u.createElement)(p,{...d},n&&(0,u.createElement)("div",{className:"woocommerce-list__item-before"},n),(0,u.createElement)("div",{className:"woocommerce-list__item-text"},(0,u.createElement)("span",{className:"woocommerce-list__item-title"},r),i&&(0,u.createElement)("span",{className:"woocommerce-list__item-content"},i)),o&&(0,u.createElement)("div",{className:"woocommerce-list__item-after"},o))}YE.propTypes={item:Ro().shape({after:Ro().node,before:Ro().node,className:Ro().string,content:Ro().oneOfType([Ro().string,Ro().node]),href:Ro().string,onClick:Ro().func,target:Ro().string,title:Ro().oneOfType([Ro().string,Ro().node])}).isRequired};const XE=YE;function ZE(e){const{className:t,items:n,children:r}=e,o=at("woocommerce-list",t);return DO("List with items prop is deprecated",{version:"9.0.0",hint:"See ExperimentalList / ExperimentalListItem for the new API that will replace this component in future versions."}),(0,u.createElement)(dE,{component:"ul",className:o,role:"menu"},n.map((e,t)=>{const{className:n,href:o,key:i,onClick:a}=e,c=at("woocommerce-list__item",n,{"has-action":"function"==typeof a||o});return(0,u.createElement)(PE,{key:i||t,timeout:500,classNames:"woocommerce-list__item"},(0,u.createElement)("li",{className:c},r?r(e,t):(0,u.createElement)(XE,{item:e})))}))}ZE.propTypes={className:Ro().string,items:Ro().arrayOf(Ro().shape({after:Ro().node,before:Ro().node,className:Ro().string,content:Ro().oneOfType([Ro().string,Ro().node]),href:Ro().string,onClick:Ro().func,target:Ro().string,title:Ro().oneOfType([Ro().string,Ro().node]),key:Ro().string}))};const JE=ZE;function QE(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eS(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?eS(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eS(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var tS=function(e){var t=e.cx,n=e.cy,r=e.innerRadius,o=e.outerRadius,i=e.startAngle,a=e.endAngle,c=e.fill;return wp.element.createElement("g",null,wp.element.createElement(bm,{cx:t,cy:n,innerRadius:r,outerRadius:o,startAngle:i,endAngle:a,fill:c}),wp.element.createElement(bm,{cx:t,cy:n,startAngle:i,endAngle:a,innerRadius:o+6,outerRadius:o+10,fill:c}))},nS=function(e){if(!e.active)return null;var t=e.payload,n=d()("rank-math-graph-tooltip","color-"+t[0].name.toLowerCase().replace(/ /g,"-"));return wp.element.createElement("div",{className:n},"".concat(t[0].name," : ").concat(t[0].value))};const rS=(0,Ye.withSelect)(function(e){return{seoScores:e("rank-math").getDashboardStats(e("rank-math").getDaysRange()).optimization}})(function(e){var t=e.seoScores,n=he(),r=QE((0,u.useState)(0),2),o=r[0],i=r[1];if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-box rank-math-score-overview"},wp.element.createElement(Qe,{animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4"}));var a=[{title:(0,l.__)("Good","seo-by-rank-math"),color:"#10AC84",content:t.good,className:"seo-score-good",onClick:function(){return cO()?n("/analytics/1?filter=good"):null}},{title:(0,l.__)("Fair","seo-by-rank-math"),color:"#FF9F43",content:t.ok,className:"seo-score-ok",onClick:function(){return cO()?n("/analytics/1?filter=ok"):null}},{title:(0,l.__)("Poor","seo-by-rank-math"),color:"#ed5e5e",content:t.bad,className:"seo-score-bad",onClick:function(){return cO()?n("/analytics/1?filter=bad"):null}},{title:(0,l.__)("No Data","seo-by-rank-math"),color:"#dadfe4",content:t.noData,className:"seo-score-no-data",onClick:function(){return cO()?n("/analytics/1?filter=noData"):null}}],c=(0,f.map)(a,function(e){return{name:e.title,value:parseInt(e.content),color:e.color}});return wp.element.createElement("div",{className:"rank-math-box rank-math-score-overview"},wp.element.createElement("h3",null,(0,l.__)("Overall Optimization","seo-by-rank-math"),wp.element.createElement("a",{href:Tx("help-analytics","Overall Optimization Tooltip"),target:"_blank",rel:"noopener noreferrer",className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}))),wp.element.createElement("div",{className:"rank-math-box-grid"},wp.element.createElement("div",{className:"rank-math-seo-score-graph"},wp.element.createElement(hn,{aspect:1},wp.element.createElement(nE,null,wp.element.createElement(tE,{activeIndex:o,activeShape:tS,data:c,innerRadius:60,outerRadius:80,dataKey:"value",onMouseEnter:function(e,t){i(t)}},(0,f.map)(c,function(e,t){return wp.element.createElement(Ih,{key:t,fill:e.color})}),wp.element.createElement(_h,{position:"center"},(0,f.round)(t.average))),wp.element.createElement(vr,{wrapperStyle:{zIndex:10},content:wp.element.createElement(nS,null),allowEscapeViewBox:{x:!0,y:!0}})))),wp.element.createElement(JE,{className:"rank-math-seo-score-list",items:a})),wp.element.createElement("p",{className:"description"},(0,f.round)(t.average)+" "+(0,l.__)("is the average Rank Mathâ€™s SEO score. This chart shows how well your posts are optimized based on Rank Mathâ€™s scoring system.","seo-by-rank-math")),wp.element.createElement(ot.Button,{isLink:!0,onClick:function(){return n("/analytics/1")}},(0,l.__)("Open Report","seo-by-rank-math")))});var oS=n(5116);function iS(){return iS=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},iS.apply(null,arguments)}const aS=function(e){var t=(0,f.get)(e,"payload.0",!1);return!1!==t?wp.element.createElement(oS.E,iS({},e,{label:t.payload.dateFormatted})):wp.element.createElement(oS.E,e)};function cS(){return cS=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cS.apply(null,arguments)}const lS=function(e){var t=e.title,n=e.tooltip,r=e.stats,o=e.graph,i=e.dataKey,a="position"===i;return wp.element.createElement("div",{className:"rank-math-analytic-item"},wp.element.createElement("h3",null,t,wp.element.createElement(HO,null,n)),wp.element.createElement(Ox,cS({},r,{revert:a})),wp.element.createElement("div",{className:"rank-math-graph rank-math-analytic-graph"},wp.element.createElement(hn,{height:50},wp.element.createElement(bx,{data:o,margin:{top:0,right:0,left:0,bottom:0},baseValue:"dataMin"},wp.element.createElement(vr,{content:wp.element.createElement(aS,null),wrapperStyle:{zIndex:10,marginTop:50},wrapperClassName:"rank-math-graph-tooltip",formatter:function(e,t){return 0===e?["n/a",t]:"position"===t?[-e,t]:[e,t]}}),wp.element.createElement("defs",null,wp.element.createElement("linearGradient",{id:"gradient",x1:"0",y1:"0",x2:"0",y2:"1"},wp.element.createElement("stop",{offset:"5%",stopColor:"#4e8cde",stopOpacity:.2}),wp.element.createElement("stop",{offset:"95%",stopColor:"#4e8cde",stopOpacity:0}))),wp.element.createElement(Sw,{dataKey:i,stroke:"#4e8cde",strokeWidth:2,fill:"url(#gradient)"})))))};const uS=dO((0,ot.withFilters)("rankMath.analytics.dashboardAnalyticsOverview")((0,Ye.withSelect)(function(e){return{stats:e("rank-math").getDashboardStats(e("rank-math").getDaysRange()).stats}})(function(e){var t=e.stats,n=e.navigate;if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-box rank-math-score-overview"},wp.element.createElement("div",{className:"rank-math-box-grid"},(0,f.times)(4,function(e){return wp.element.createElement(et,{key:e,animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"50%"}))})));var r={total:0,difference:0};return wp.element.createElement("div",{className:"rank-math-box rank-math-analytics-overview"},wp.element.createElement("div",{className:"rank-math-box-grid"},wp.element.createElement(lS,{title:(0,l.__)("Total Impressions","seo-by-rank-math"),tooltip:(0,l.__)("How many times your site showed up in the search results.","seo-by-rank-math"),stats:(0,f.get)(t,"impressions",r),graph:t.graph.merged,dataKey:"impressions"}),wp.element.createElement(lS,{title:(0,l.__)("Total Clicks","seo-by-rank-math"),tooltip:(0,l.__)("How many times your site was clicked on in the search results.","seo-by-rank-math"),stats:(0,f.get)(t,"clicks",r),graph:t.graph.merged,dataKey:"clicks"}),wp.element.createElement(lS,{title:(0,l.__)("Total Keywords","seo-by-rank-math"),tooltip:(0,l.__)("Total number of keywords your site ranks for within top 100 positions.","seo-by-rank-math"),stats:(0,f.get)(t,"keywords",r),graph:t.graph.merged,dataKey:"keywords"}),wp.element.createElement(lS,{title:(0,l.__)("CTR","seo-by-rank-math"),tooltip:(0,l.__)("Average click-through rate. Total clicks divided by total impressions.","seo-by-rank-math"),stats:(0,f.get)(t,"ctr",r),graph:t.graph.merged,dataKey:"ctr"})),wp.element.createElement(ot.Button,{isLink:!0,onClick:function(){return n("/performance/1")}},(0,l.__)("Open Report","seo-by-rank-math")))})));const sS=(0,ot.withFilters)("rankMath.analytics.automaticKeywordTracking")(function(){return wp.element.createElement("div",{className:"rank-math-seo-score-overview"},wp.element.createElement("div",{className:"rank-math-box-grid blurred"},wp.element.createElement("div",{className:"col"},wp.element.createElement("h4",null,(0,l.__)("Top Winning Keywords","seo-by-rank-math")),wp.element.createElement(JE,{className:"rank-math-keywords-list keywords-winning",items:pO({"best seo plugin":{query:"best seo plugin",position:{total:23,difference:1}},"wordpress seo plugin":{query:"wordpress seo plugin",position:{total:89,difference:40}},"best seo plugin wordpress":{query:"best seo plugin wordpress",position:{total:33,difference:5}},"seo plugins for wordpress":{query:"seo plugins for wordpress",position:{total:54,difference:7}},"wordpress seo plugins":{query:"wordpress seo plugins",position:{total:65,difference:18}}})})),wp.element.createElement("div",{className:"col"},wp.element.createElement("h4",null,(0,l.__)("Top Losing Keywords","seo-by-rank-math")),wp.element.createElement(JE,{className:"rank-math-keywords-list keywords-losing",items:pO({"best seo plugin wordpress":{query:"best seo plugin wordpress",position:{total:88,difference:-45}},"seo plugins for wordpress":{query:"seo plugins for wordpress",position:{total:10,difference:-8}},"wordpress seo plugin":{query:"wordpress seo plugin",position:{total:40,difference:-10}},"best seo plugin":{query:"best seo plugin",position:{total:89,difference:-22}},"wordpress seo plugins":{query:"wordpress seo plugins",position:{total:69,difference:-20}}})}))))});const fS=(0,ot.withFilters)("rankMath.analytics.manualKeywordTracking")(function(){return wp.element.createElement("div",{className:"rank-math-seo-score-overview"},wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-70 less-padding"},wp.element.createElement("h3",null,(0,l.__)("Track Keyword Performance","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Find winning keywords","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Keep an eye on losing keywords","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Built-in Keyword Rank Tracker","seo-by-rank-math"))),wp.element.createElement("a",{href:Tx("pro","Overview KW Tabs"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math")))),wp.element.createElement("div",{className:"rank-math-box-grid blurred"},wp.element.createElement("div",{className:"col"},wp.element.createElement("h4",null,(0,l.__)("Top Winning Keywords","seo-by-rank-math")),wp.element.createElement(JE,{className:"rank-math-list rank-math-keywords-list keywords-winning",items:pO({"best seo plugin":{query:"best seo plugin",position:{total:23,difference:1}},"wordpress seo plugin":{query:"wordpress seo plugin",position:{total:89,difference:40}},"best seo plugin wordpress":{query:"best seo plugin wordpress",position:{total:33,difference:5}},"seo plugins for wordpress":{query:"seo plugins for wordpress",position:{total:54,difference:7}},"wordpress seo plugins":{query:"wordpress seo plugins",position:{total:65,difference:18}}})})),wp.element.createElement("div",{className:"col"},wp.element.createElement("h4",null,(0,l.__)("Top Losing Keywords","seo-by-rank-math")),wp.element.createElement(JE,{className:"rank-math-list rank-math-keywords-list keywords-losing",items:pO({"best seo plugin wordpress":{query:"best seo plugin wordpress",position:{total:88,difference:-45}},"seo plugins for wordpress":{query:"seo plugins for wordpress",position:{total:10,difference:-8}},"wordpress seo plugin":{query:"wordpress seo plugin",position:{total:40,difference:-10}},"best seo plugin":{query:"best seo plugin",position:{total:89,difference:-22}},"wordpress seo plugins":{query:"wordpress seo plugins",position:{total:69,difference:-20}}})}))))});const pS=function(){var e=he(),t=[{name:"manualKeywordTracking",title:(0,l.__)("All Keywords","seo-by-rank-math"),view:fS,className:"rank-math-tab rank-math-keywordTracking-tab"},{name:"automaticKeywordTracking",title:(0,l.__)("Tracked Keywords","seo-by-rank-math"),view:sS,className:"rank-math-tab rank-math-keywordTracking-tab"}];return wp.element.createElement("div",{className:"rank-math-box no-padding rank-math-keywords-overview"},wp.element.createElement("a",{href:Tx("top-5-winning-and-losing","Keywords Tab Dashboard KB"),target:"_blank",rel:"noopener noreferrer",className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help analytics-dashicon"})),wp.element.createElement(ot.TabPanel,{className:"rank-math-tabs",activeClass:"is-active",tabs:t},function(e){return wp.element.createElement("div",{className:"rank-math-tab-content-"+e.name},(0,u.createElement)(e.view))}),wp.element.createElement(ot.Button,{isLink:!0,onClick:function(){return e("/keywords/1")}},(0,l.__)("Open Report","seo-by-rank-math")))};var dS=sw({chartName:"BarChart",GraphicalChild:iv,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:ax},{axisType:"yAxis",AxisComp:vx}],formatAxisMap:pv}),yS=["x1","y1","x2","y2","key"],hS=["offset"];function mS(e){return mS="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mS(e)}function vS(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function bS(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vS(Object(n),!0).forEach(function(t){gS(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vS(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function gS(e,t,n){var r;return r=function(e,t){if("object"!=mS(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=mS(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"),(t="symbol"==mS(r)?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wS(){return wS=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},wS.apply(this,arguments)}function xS(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var OS=function(e){var t=e.fill;if(!t||"none"===t)return null;var n=e.fillOpacity,r=e.x,o=e.y,i=e.width,a=e.height,c=e.ry;return h().createElement("rect",{x:r,y:o,ry:c,width:i,height:a,stroke:"none",fill:t,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function kS(e,t){var n;if(h().isValidElement(e))n=h().cloneElement(e,t);else if(Nt()(e))n=e(t);else{var r=t.x1,o=t.y1,i=t.x2,a=t.y2,c=t.key,l=xS(t,yS),u=on(l,!1),s=(u.offset,xS(u,hS));n=h().createElement("line",wS({},s,{x1:r,y1:o,x2:i,y2:a,fill:"none",key:c}))}return n}function ES(e){var t=e.x,n=e.width,r=e.horizontal,o=void 0===r||r,i=e.horizontalPoints;if(!o||!i||!i.length)return null;var a=i.map(function(r,i){var a=bS(bS({},e),{},{x1:t,y1:r,x2:t+n,y2:r,key:"line-".concat(i),index:i});return kS(o,a)});return h().createElement("g",{className:"recharts-cartesian-grid-horizontal"},a)}function SS(e){var t=e.y,n=e.height,r=e.vertical,o=void 0===r||r,i=e.verticalPoints;if(!o||!i||!i.length)return null;var a=i.map(function(r,i){var a=bS(bS({},e),{},{x1:r,y1:t,x2:r,y2:t+n,key:"line-".concat(i),index:i});return kS(o,a)});return h().createElement("g",{className:"recharts-cartesian-grid-vertical"},a)}function jS(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,o=e.y,i=e.width,a=e.height,c=e.horizontalPoints,l=e.horizontal;if(!(void 0===l||l)||!t||!t.length)return null;var u=c.map(function(e){return Math.round(e+o-o)}).sort(function(e,t){return e-t});o!==u[0]&&u.unshift(0);var s=u.map(function(e,c){var l=!u[c+1]?o+a-e:u[c+1]-e;if(l<=0)return null;var s=c%t.length;return h().createElement("rect",{key:"react-".concat(c),y:e,x:r,height:l,width:i,stroke:"none",fill:t[s],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return h().createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function PS(e){var t=e.vertical,n=void 0===t||t,r=e.verticalFill,o=e.fillOpacity,i=e.x,a=e.y,c=e.width,l=e.height,u=e.verticalPoints;if(!n||!r||!r.length)return null;var s=u.map(function(e){return Math.round(e+i-i)}).sort(function(e,t){return e-t});i!==s[0]&&s.unshift(0);var f=s.map(function(e,t){var n=!s[t+1]?i+c-e:s[t+1]-e;if(n<=0)return null;var u=t%r.length;return h().createElement("rect",{key:"react-".concat(t),x:e,y:a,width:n,height:l,stroke:"none",fill:r[u],fillOpacity:o,className:"recharts-cartesian-grid-bg"})});return h().createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},f)}var _S=function(e,t){var n=e.xAxis,r=e.width,o=e.height,i=e.offset;return xy(Mw(bS(bS(bS({},Yw.defaultProps),n),{},{ticks:Oy(n,!0),viewBox:{x:0,y:0,width:r,height:o}})),i.left,i.left+i.width,t)},AS=function(e,t){var n=e.yAxis,r=e.width,o=e.height,i=e.offset;return xy(Mw(bS(bS(bS({},Yw.defaultProps),n),{},{ticks:Oy(n,!0),viewBox:{x:0,y:0,width:r,height:o}})),i.top,i.top+i.height,t)},TS={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function CS(e){var t,n,r,o,i,a,c,l,u=Kv(),s=$v(),f=(0,y.useContext)(Lv),p=bS(bS({},e),{},{stroke:null!==(t=e.stroke)&&void 0!==t?t:TS.stroke,fill:null!==(n=e.fill)&&void 0!==n?n:TS.fill,horizontal:null!==(r=e.horizontal)&&void 0!==r?r:TS.horizontal,horizontalFill:null!==(o=e.horizontalFill)&&void 0!==o?o:TS.horizontalFill,vertical:null!==(i=e.vertical)&&void 0!==i?i:TS.vertical,verticalFill:null!==(a=e.verticalFill)&&void 0!==a?a:TS.verticalFill,x:xt(e.x)?e.x:f.left,y:xt(e.y)?e.y:f.top,width:xt(e.width)?e.width:f.width,height:xt(e.height)?e.height:f.height}),d=p.x,m=p.y,v=p.width,b=p.height,g=p.syncWithTicks,w=p.horizontalValues,x=p.verticalValues,O=(c=(0,y.useContext)(Dv),jt(c)),k=(l=(0,y.useContext)(Iv),Cv()(l,function(e){return Dh()(e.domain,Number.isFinite)})||jt(l));if(!xt(v)||v<=0||!xt(b)||b<=0||!xt(d)||d!==+d||!xt(m)||m!==+m)return null;var E=p.verticalCoordinatesGenerator||_S,S=p.horizontalCoordinatesGenerator||AS,j=p.horizontalPoints,P=p.verticalPoints;if((!j||!j.length)&&Nt()(S)){var _=w&&w.length,A=S({yAxis:k?bS(bS({},k),{},{ticks:_?w:k.ticks}):void 0,width:u,height:s,offset:f},!!_||g);Tt(Array.isArray(A),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(mS(A),"]")),Array.isArray(A)&&(j=A)}if((!P||!P.length)&&Nt()(E)){var T=x&&x.length,C=E({xAxis:O?bS(bS({},O),{},{ticks:T?x:O.ticks}):void 0,width:u,height:s,offset:f},!!T||g);Tt(Array.isArray(C),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(mS(C),"]")),Array.isArray(C)&&(P=C)}return h().createElement("g",{className:"recharts-cartesian-grid"},h().createElement(OS,{fill:p.fill,fillOpacity:p.fillOpacity,x:p.x,y:p.y,width:p.width,height:p.height,ry:p.ry}),h().createElement(ES,wS({},p,{offset:f,horizontalPoints:j,xAxis:O,yAxis:k})),h().createElement(SS,wS({},p,{offset:f,verticalPoints:P,xAxis:O,yAxis:k})),h().createElement(jS,wS({},p,{horizontalPoints:j})),h().createElement(PS,wS({},p,{verticalPoints:P})))}function NS(e){return NS="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},NS(e)}function MS(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function DS(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?MS(Object(n),!0).forEach(function(t){IS(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):MS(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function IS(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=NS(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=NS(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==NS(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}CS.displayName="CartesianGrid";var RS=function(e){var t=e.title,n=e.data;return wp.element.createElement("div",{className:"rank-math-keyword-block"},wp.element.createElement("h4",null,t),wp.element.createElement(Ox,n))};const LS=(0,Ye.withSelect)(function(e){var t=e("rank-math").getKeywordsOverview();return DS(DS({},t.topKeywords),{},{graph:(0,f.get)(t,["positionGraph"])})})(function(e){var t=e.top3,n=e.top10,r=e.top50,o=e.ctr,i=e.ctrDifference,a=e.graph,c=he();if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-box rank-math-score-overview"},wp.element.createElement("div",{className:"rank-math-box-grid has-3-col"},(0,f.times)(3,function(e){return wp.element.createElement(et,{key:e,animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%",height:"80px"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"50%"}))})),wp.element.createElement("div",{className:"rank-math-box-grid has-5-col"},(0,f.times)(5,function(e){return wp.element.createElement(et,{key:e,animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"}))})));var u={top3:(0,l.__)("Top 3 Positions","seo-by-rank-math"),top10:(0,l.__)("4-10 Positions","seo-by-rank-math"),top50:(0,l.__)("10-50 Positions","seo-by-rank-math")};return wp.element.createElement("div",{className:"rank-math-box rank-math-position-overview"},wp.element.createElement("h3",null,(0,l.__)("Keyword Positions","seo-by-rank-math")),wp.element.createElement("div",{className:"grid"},wp.element.createElement("div",{className:"rank-math-position position-top3"},wp.element.createElement(RS,{title:(0,l.__)("Top 3 Positions","seo-by-rank-math"),data:t})),wp.element.createElement("div",{className:"rank-math-position position-top10"},wp.element.createElement(RS,{title:(0,l.__)("4-10 Positions","seo-by-rank-math"),data:n})),wp.element.createElement("div",{className:"rank-math-position position-top50"},wp.element.createElement(RS,{title:(0,l.__)("10-50 Positions","seo-by-rank-math"),data:r}))),wp.element.createElement(hn,{height:160},wp.element.createElement(dS,{data:a,margin:{top:1,right:1,left:1,bottom:1},stackOffset:"expand"},wp.element.createElement(CS,{stroke:"#f2f2f2",vertical:!1}),wp.element.createElement(vr,{content:wp.element.createElement(aS,null),wrapperStyle:{zIndex:10},wrapperClassName:"rank-math-graph-tooltip",formatter:function(e,t){return[e,u[t]]},cursor:{fill:"rgb(0 0 0 / 0.05)"}}),wp.element.createElement(iv,{type:"basis",dataKey:"top3",strokeWidth:0,fill:"#3e70b2",stackId:"keywords"}),wp.element.createElement(iv,{type:"basis",dataKey:"top10",strokeWidth:0,fill:"#4e8cde",stackId:"keywords"}),wp.element.createElement(iv,{type:"basis",dataKey:"top50",strokeWidth:0,fill:"#71a3e5",stackId:"keywords"}))),wp.element.createElement("div",{className:"rank-math-avg-ctr"},wp.element.createElement(RS,{title:(0,l.__)("CTR","seo-by-rank-math"),data:{total:o,difference:i}})),wp.element.createElement(ot.Button,{isLink:!0,onClick:function(){return c("/keywords/1")}},(0,l.__)("Open Report","seo-by-rank-math")))});const BS=(0,ot.withFilters)("rankMath.analytics.topActionablePosts")(function(){return null});const FS=dO((0,ot.withFilters)("rankMath.analytics.topPosts")(function(){return wp.element.createElement(u.Fragment,null,wp.element.createElement("div",{id:"rank-math-pro-cta"},wp.element.createElement("div",{className:"rank-math-cta-table"},wp.element.createElement("div",{className:"rank-math-cta-header"},wp.element.createElement("h2",null,(0,l.__)("Top 5 Winning & Losing Posts","rank-mth"))),wp.element.createElement("div",{className:"rank-math-cta-body"},wp.element.createElement(ot.Dashicon,{size:"50",icon:"awards"}),wp.element.createElement("p",null,(0,l.__)("Take full control of whatâ€™s important to the success of your website â€“ see content thatâ€™s performing well and content thatâ€™s dropped in rankings so you can take action.","seo-by-rank-math")),wp.element.createElement("a",{href:Tx("pro","Overview Winning Posts"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math"))))))}));const US=function(){return wp.element.createElement(u.Fragment,null,wp.element.createElement(hO,{heading:(0,l.__)("Analytics","seo-by-rank-math"),onChange:function(){(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getPostsOverview"),(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getKeywordsOverview")}}),wp.element.createElement("div",{className:"grid"},wp.element.createElement(rS,null),wp.element.createElement(uS,null)),wp.element.createElement("div",{className:"grid"},wp.element.createElement(pS,null),wp.element.createElement(LS,null)),wp.element.createElement(FS,null),wp.element.createElement(BS,null))};function zS(e){return zS="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},zS(e)}function qS(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function WS(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qS(Object(n),!0).forEach(function(t){KS(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qS(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function KS(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=zS(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=zS(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==zS(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const $S=function(e){var t=e.type,n=e.title,r=e.tooltip,o=e.onClick,i=e.selected,a=e.data,c=e.className,l=e.tooltipClassName,u=d()("stat-filter-"+t,c,{"is-active":i[t]});return wp.element.createElement(ot.Button,{className:u,onClick:function(){o(WS(WS({},i),{},KS({},"".concat(t),!i[t])))}},wp.element.createElement("h4",null,n,wp.element.createElement(HO,{className:l},r)),wp.element.createElement(Ox,a))};const HS=(0,ot.withFilters)("rankMath.analytics.performanceStatsFilter")(function(e){var t=e.stats,n=e.selected,r=e.setSelection;if((0,f.isEmpty)(t))return wp.element.createElement(JO,{times:6,height:"73",className:"rank-math-graph-filter rank-math-stat-filters has-4-col has-6-item"});var o=(0,f.get)(t,"ctr",0),i=(0,f.get)(t,"clicks",0),a=(0,f.get)(t,"position",0);a&&0!==a.previous&&(a.revert=!0);var c=(0,f.get)(t,"keywords",0),u=(0,f.get)(t,"impressions",0),s=d()("rank-math-graph-filter rank-math-stat-filters has-4-col has-6-item");return wp.element.createElement("div",{className:s},wp.element.createElement($S,{className:"stat-filter-color-2",type:"impressions",title:(0,l.__)("Total Impressions","seo-by-rank-math"),data:u,tooltipClassName:"bottom",tooltip:(0,l.__)("How many times your site showed up in the search results.","seo-by-rank-math"),selected:n,onClick:r}),wp.element.createElement($S,{className:"stat-filter-color-3",type:"keywords",title:(0,l.__)("Total Keywords","seo-by-rank-math"),data:c,tooltipClassName:"bottom",tooltip:(0,l.__)("Total number of keywords your site ranks for within top 100 positions.","seo-by-rank-math"),selected:n,onClick:r}),wp.element.createElement($S,{className:"stat-filter-color-4",type:"clicks",title:(0,l.__)("Total Clicks","seo-by-rank-math"),data:i,tooltipClassName:"bottom",tooltip:(0,l.__)("How many times your site was clicked on in the search results.","seo-by-rank-math"),selected:n,onClick:r}),wp.element.createElement($S,{className:"stat-filter-color-5",type:"ctr",title:(0,l.__)("CTR","seo-by-rank-math"),data:o,tooltip:(0,l.__)("Average click-through rate. Total clicks divided by total impressions.","seo-by-rank-math"),selected:n,onClick:r}),wp.element.createElement($S,{className:"stat-filter-color-6",type:"position",title:(0,l.__)("Average Position","seo-by-rank-math"),data:a,tooltip:(0,l.__)("Average position of all the keywords ranking within top 100 positions.","seo-by-rank-math"),selected:n,onClick:r}))});function VS(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return GS(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?GS(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function GS(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var YS="performance";const XS=dO((0,ot.withFilters)("rankMath.analytics.postsTable")((0,Ye.withSelect)(function(e,t){return{query:t.params,navigate:t.navigate,userPreference:e("rank-math").getUserColumnPreference(YS)}})(function(e){var t=e.query,n=e.navigate,r=e.userPreference,o=t.paged,i=void 0===o?1:o,a=VS((0,u.useState)(!1),2),c=a[0],s=a[1],p=VS((0,u.useState)(!1),2),d=p[0],y=p[1],h=(0,u.useState)(!1),m=VS(h,1)[0],v=(0,u.useRef)(null);if(Qx(v,h),(0,Ye.useSelect)(function(e){if(!1!==m){var t=e("rank-math").getPostsRowsByObjects(i,{});(0,f.isEmpty)(t)||t===c||s(t);var n=e("rank-math").getPostsSummary();(0,f.isEmpty)(n)||n===d||y(n)}},[m,i,c,d]),(0,f.isUndefined)(c)||(0,f.isUndefined)(d))return"Loading";var b=[];if(!(0,f.isUndefined)(c.rows)&&(b="No Data"===c.rows.response?[]:c.rows,(0,f.isEmpty)(b)))return Jx((0,l.__)("Content","seo-by-rank-math"));var g=(0,Ge.applyFilters)("rankMath.analytics.performanceHeaders",[{key:"sequence",label:(0,l.__)("#","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-index"},{key:"title",label:(0,l.__)("Title","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-title"},{key:"impressions",label:(0,l.__)("Impressions","seo-by-rank-math"),cellClassName:"rank-math-col-impressions"},{key:"clicks",label:(0,l.__)("Clicks","seo-by-rank-math"),cellClassName:"rank-math-col-click"},{key:"ctr",label:(0,l.__)("CTR","seo-by-rank-math"),cellClassName:"rank-math-col-ctr"},{key:"position",label:(0,l.__)("Position","seo-by-rank-math"),cellClassName:"rank-math-col-position"}]),w=(0,Ge.applyFilters)("rankMath.analytics.performanceTableSummary",[{label:(0,l.__)("Posts","seo-by-rank-math"),value:c.rowsFound},{label:(0,l.__)("Total Impressions","seo-by-rank-math"),value:xx(d.impressions)},{label:(0,l.__)("Total Clicks","seo-by-rank-math"),value:xx(d.clicks)}],d),x=lO(g,r);return wp.element.createElement("div",{className:"rank-math-posts",ref:v},wp.element.createElement(WO,{className:"rank-math-table",title:(0,l.__)("Content","seo-by-rank-math"),headers:x,downloadable:!0,rowsPerPage:25,rows:sO(b,(0,f.map)(g,"key"),uO(i,25)),isLoading:(0,f.isEmpty)(c.rows),query:t,totalRows:parseInt(c.rowsFound),summary:w,showPageArrowsLabel:!1,onPageChange:function(e){n("/performance/"+e)},onQueryChange:function(){return function(){}},onColumnsChange:function(e,t){r[t]=!r[t],(0,Ye.dispatch)("rank-math").updateUserPreferences(r,YS)}}))})));var ZS={pageviews:"#10AC84",impressions:"#4e8cde",keywords:"#ed5e5e",clicks:"#FF9F43",ctr:"#F368E0",position:"#0bbde3",adsense:"#00A3A4"};const JS=function(e){return(0,f.get)(ZS,e,"#999999")};n.dn(JS);const QS=moment;var ej=n.n(QS);const tj=function(e){var t=e.width,n=e.height,r=e.x,o=e.y,i=e.dy,a=e.payload,c=e.index,l=e.visibleTicksCount,u=e.isFormat,s=void 0===u||u,f="middle";return 0===c&&(f="start"),c===l-1&&(f="end"),wp.element.createElement("g",{className:"recharts-layer recharts-cartesian-axis-tick"},wp.element.createElement("text",{width:t,height:n,x:r,y:o,stroke:"none",fill:"#7f868d",fontSize:"14",textAnchor:f},wp.element.createElement("tspan",{x:r,dy:i},s?ej()(a.value).format("D MMM, YYYY"):a.value)))};const nj=(0,ot.withFilters)("rankMath.analytics.performanceGraph")(function(e){var t=e.stats,n=e.selected;if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-graph main-graph performance-graph loader"},wp.element.createElement(et,{animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%",height:"100%"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"})));var r=0,o=t.graph.merged,i={ctr:(0,l.__)("CTR","seo-by-rank-math"),clicks:(0,l.__)("Clicks","seo-by-rank-math"),earnings:(0,l.__)("Adsense","seo-by-rank-math"),impressions:(0,l.__)("Impressions","seo-by-rank-math"),keywords:(0,l.__)("Keywords","seo-by-rank-math"),pageviews:(0,l.__)("Pageviews","seo-by-rank-math"),position:(0,l.__)("Position","seo-by-rank-math")},a=Object.values(n).filter(Boolean).length,c=t.graph.merged.reduce(function(e,t){return void 0!==t.position?e+=1:e},0);return wp.element.createElement("div",{className:"rank-math-graph main-graph performance-graph"},wp.element.createElement(hn,null,wp.element.createElement(bx,{data:o,margin:{top:10},baseValue:"dataMin"},wp.element.createElement(ax,{dy:15,dataKey:"formattedDate",interval:1,tickLine:!1,tickFormatter:function(e){return e},tick:wp.element.createElement(tj,{isFormat:!1}),axisLine:{stroke:"rgba(0, 0, 0, 0.15)"},domain:["dataMin","dataMax"]}),wp.element.createElement(vr,{content:wp.element.createElement(aS,null),wrapperStyle:{zIndex:10},wrapperClassName:"rank-math-graph-tooltip",formatter:function(e,t){return 0===e?["n/a",t]:"position"===t?[-e,i[t]]:[e,i[t]]}}),wp.element.createElement("defs",null,(0,f.map)(n,function(e,t){return!1===e?null:wp.element.createElement("linearGradient",{key:t,id:t,x1:"0",y1:"0",x2:"0",y2:"1"},wp.element.createElement("stop",{offset:"5%",stopColor:JS(t),stopOpacity:.2}),wp.element.createElement("stop",{offset:"95%",stopColor:JS(t),stopOpacity:0}))})),(0,f.map)(n,function(e,t){if(!1===e||"position"===t&&0===c)return null;++r;var n=!(a<3);return wp.element.createElement(vx,{key:t,hide:n,dx:1===r?-10:10,axisLine:!1,tickLine:!1,tickFormatter:function(e){return xx(e)},tick:{fill:"#7f868d",fontSize:14},yAxisId:"".concat(t,"-yaxis"),orientation:1===r?"left":"right",domain:"position"===t?[function(e){return 4*(parseInt((e+1)/4)-1)-1},-1]:["auto","auto"]})}),(0,f.map)(n,function(e,t){if(!1===e||"position"===t&&0===c)return null;var n="adsense"===t?"earnings":t;return wp.element.createElement(Sw,{key:t,connectNulls:!0,dataKey:n,stroke:JS(t),strokeWidth:2,fill:"url(#".concat(t,")"),yAxisId:"".concat(t,"-yaxis")})}),wp.element.createElement(CS,{stroke:"rgba(0, 0, 0, 0.05)",vertical:!1}))))});function rj(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return oj(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?oj(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function oj(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const ij=(0,Ye.withSelect)(function(e){return{stats:e("rank-math").getDashboardStats(e("rank-math").getDaysRange()).stats}})(function(e){var t=e.stats,n=rj((0,u.useState)({pageviews:cO(),impressions:!0,clicks:!cO(),keywords:!0,ctr:!1,position:!1,adsense:!1}),2),r=n[0],o=n[1];return wp.element.createElement(u.Fragment,null,wp.element.createElement(hO,{heading:(0,l.__)("SEO Performance","seo-by-rank-math"),onChange:function(){(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getPostsSummary"),(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getPostsOverview")}}),wp.element.createElement(HS,{stats:t,selected:r,setSelection:o}),wp.element.createElement(nj,{stats:t,selected:r}),wp.element.createElement(FS,null),wp.element.createElement(XS,null))});var aj="indexing";const cj=dO((0,ot.withFilters)("rankMath.analytics.indexingTable")((0,Ye.withSelect)(function(e,t){var n=t.params,r=n.paged,o=void 0===r?1:r;return{query:n,navigate:t.navigate,tableData:e("rank-math").getIndexingReport(o,{}),summary:e("rank-math").getPostsSummary(),userPreference:e("rank-math").getUserColumnPreference(aj)}})(function(e){var t=e.tableData,n=e.summary,r=e.query,o=e.navigate,i=e.userPreference;if((0,f.isUndefined)(t)||(0,f.isUndefined)(n))return"Loading";var a=(0,f.isUndefined)(t.rows)||"No Data"===t.rows.response?[]:t.rows;(0,f.isUndefined)(i.index_verdict)||(i.index_verdict=!0);var c=(0,Ge.applyFilters)("rankMath.analytics.indexingHeaders",[{key:"sequence",label:(0,l.__)("#","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-index"},{key:"title",label:(0,l.__)("Title","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-title"},{key:"index_verdict",label:(0,l.__)("Status","seo-by-rank-math"),cellClassName:"rank-math-col-status",isReadOnly:!0},{key:"indexing_state",label:(0,l.__)("Indexing Allowed","seo-by-rank-math"),cellClassName:"rank-math-col-indexing-allowed"},{key:"rich_results_items",label:(0,l.__)("Rich Results","seo-by-rank-math"),cellClassName:"rank-math-col-rich-results"},{key:"page_fetch_state",label:(0,l.__)("Page Fetch","seo-by-rank-math"),cellClassName:"rank-math-col-page-fetch"},{key:"crawled_as",label:(0,l.__)("Crawled As [PRO]","seo-by-rank-math"),cellClassName:"rank-math-col-crawled-as",disabled:!0},{key:"robots_txt_state",label:(0,l.__)("Robots state [PRO]","seo-by-rank-math"),cellClassName:"rank-math-col-robots-state",disabled:!0}]),u=(0,Ge.applyFilters)("rankMath.analytics.indexingSummary",[{label:(0,l.__)("Posts","seo-by-rank-math"),value:t.rowsFound}],n),s=r.paged,p=void 0===s?1:s,d=lO(c,i);return wp.element.createElement("div",{className:"rank-math-posts"},wp.element.createElement(WO,{className:"rank-math-table",title:(0,l.__)("Content","seo-by-rank-math"),headers:d,downloadable:!0,rowsPerPage:25,rows:sO(a,(0,f.filter)((0,f.map)(c,function(e){return e.disabled?"":e.key})),uO(p,25)),isLoading:(0,f.isEmpty)(t.rows),query:r,totalRows:parseInt(t.rowsFound),summary:u,showPageArrowsLabel:!1,onPageChange:function(e){o("/indexing/"+e)},onQueryChange:function(){return function(){}},onColumnsChange:function(e,t){i[t]=!i[t],(0,Ye.dispatch)("rank-math").updateUserPreferences(i,aj)},indexingData:a}))})));(0,Ge.addFilter)("rank_math_table_column_value","rank-math",function(e,t,n,r){if((0,f.includes)(["index_verdict","indexing_state","crawled_as","robots_txt_state"],r)){var o=(0,f.kebabCase)(n),i=r+" verdict ";return("index_verdict"!==r||cO())&&(i+=d()((0,f.lowerCase)(o),{unspecified:(0,f.includes)(["verdict-unspecified","indexing-state-unspecified","crawling-user-agent-unspecified","robots-txt-state-unspecified"],o),pass:(0,f.includes)(["pass","indexing-allowed","allowed"],o),fail:(0,f.includes)(["fail","blocked-by-meta-tag"],o)})),{display:t=wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("i",{className:i}),wp.element.createElement("span",null,(0,f.startCase)((0,f.camelCase)(Zx(n))))),value:n}}return"rich_results_items"===r?(t=n?wp.element.createElement("div",{className:"schema-listing"},(0,f.map)(JSON.parse(n),function(e){var t=(0,f.unescape)(e.richResultType),n=t.replace(/ /g,""),r="schema-item",o=(0,l.__)("Pass","seo-by-rank-math");if(!(0,f.isUndefined)(e.items[0].issues)){var i="";(0,f.forEach)(e.items[0].issues,function(e){if("ERROR"===e.severity)return i=e.severity,o=(0,l.__)("Error","seo-by-rank-math"),!1;i=e.severity,o=e.severity}),r+=" "+(0,f.lowerCase)(i)}return wp.element.createElement("span",{className:r,key:(0,f.uniqueId)("schema-")},wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("i",{className:Px(n)}),wp.element.createElement("span",null,o)),t)})):wp.element.createElement(_x,{schemas:n}),{display:t,value:n}):e});const lj=dO((0,ot.withFilters)("rankMath.analytics.UrlInspection")(function(){return wp.element.createElement(u.Fragment,null,!cO()&&wp.element.createElement("div",{className:"rank-math-unlock-pro-notice",id:"rank-math-unlock-pro-notice"},wp.element.createElement("a",{href:Tx("pro","Unlock PRO Index Status Tab Notice"),target:"_blank",className:"pro-link",rel:"noreferrer"},wp.element.createElement("p",null,(0,l.__)("Get Advanced Index Stats Directly from Google database.","seo-by-rank-math")," ",wp.element.createElement("span",null,wp.element.createElement("strong",null,(0,l.__)("Upgrade to Rank Math PRO!","seo-by-rank-math")))))),wp.element.createElement(cj,null))}));const uj=(0,ot.withFilters)("rankMath.analytics.keywordStatsFilter")(function(){return null});const sj=(0,Ye.withSelect)(function(e){return e("rank-math").getKeywordsOverview().topKeywords})(function(e){var t=e.top3,n=e.top10,r=e.top50,o=e.top100,i=e.selected,a=e.setSelection;return(0,f.isEmpty)(t)?wp.element.createElement(JO,{height:"73",className:"rank-math-graph-filter rank-math-stat-filters has-4-item"}):wp.element.createElement("div",{className:"rank-math-graph-filter rank-math-stat-filters has-4-col"},wp.element.createElement($S,{type:"top3",title:(0,l.__)("Top 3 Positions","seo-by-rank-math"),data:t,tooltipClassName:"bottom",tooltip:(0,l.__)("Your site appears in the best position for these keywords.","seo-by-rank-math"),selected:i,onClick:a}),wp.element.createElement($S,{type:"top10",title:(0,l.__)("4-10 Positions","seo-by-rank-math"),data:n,tooltipClassName:"bottom",tooltip:(0,l.__)("Your site appears on the first page for these keywords, but not in the top 3 positions.","seo-by-rank-math"),selected:i,onClick:a}),wp.element.createElement($S,{type:"top50",title:(0,l.__)("10-50 Positions","seo-by-rank-math"),data:r,tooltipClassName:"bottom",tooltip:(0,l.__)("Your site appears somewhere on pages 2-5 of the search results for these keywords.","seo-by-rank-math"),selected:i,onClick:a}),wp.element.createElement($S,{type:"top100",title:(0,l.__)("51-100 Positions","seo-by-rank-math"),data:o,tooltipClassName:"bottom",tooltip:(0,l.__)("Your site appears in the search results for these keywords, but not on the first couple of pages.","seo-by-rank-math"),selected:i,onClick:a}))});function fj(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function i(n,r,o,i){var l=r&&r.prototype instanceof c?r:c,u=Object.create(l.prototype);return pj(u,"_invoke",function(n,r,o){var i,c,l,u=0,s=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return i=t,c=0,l=e,p.n=n,a}};function d(n,r){for(c=n,l=r,t=0;!f&&u&&!o&&t<s.length;t++){var o,i=s[t],d=p.p,y=i[2];n>3?(o=y===r)&&(l=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=n<2&&d<i[1])?(c=0,p.v=r,p.n=i[1]):d<y&&(o=n<3||i[0]>r||r>y)&&(i[4]=n,i[5]=r,p.n=y,c=0))}if(o||n>1)return a;throw f=!0,r}return function(o,s,y){if(u>1)throw TypeError("Generator is already running");for(f&&1===s&&d(s,y),c=s,l=y;(t=c<2?e:l)||!f;){i||(c?c<3?(c>1&&(p.n=-1),d(c,l)):p.n=l:p.v=l);try{if(u=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(l=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(f=p.n<0)?l:n.call(r,p))!==a)break}catch(t){i=e,c=1,l=t}finally{u=1}}return{value:t,done:f}}}(n,o,i),!0),u}var a={};function c(){}function l(){}function u(){}t=Object.getPrototypeOf;var s=[][r]?t(t([][r]())):(pj(t={},r,function(){return this}),t),f=u.prototype=c.prototype=Object.create(s);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,pj(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return l.prototype=u,pj(f,"constructor",u),pj(u,"constructor",l),l.displayName="GeneratorFunction",pj(u,o,"GeneratorFunction"),pj(f),pj(f,o,"Generator"),pj(f,r,function(){return this}),pj(f,"toString",function(){return"[object Generator]"}),(fj=function(){return{w:i,m:p}})()}function pj(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}pj=function(e,t,n,r){function i(t,n){pj(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(i("next",0),i("throw",1),i("return",2))},pj(e,t,n,r)}function dj(e,t,n,r,o,i,a){try{var c=e[i](a),l=c.value}catch(e){return void n(e)}c.done?t(l):Promise.resolve(l).then(r,o)}function yj(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return hj(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?hj(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function hj(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var mj="keywords";const vj=dO((0,ot.withFilters)("rankMath.analytics.keywordsTable")((0,Ye.withSelect)(function(e,t){return{query:t.params,navigate:t.navigate,userPreference:e("rank-math").getUserColumnPreference(mj)}})(function(e){var t=e.query,n=e.navigate,r=e.userPreference,o=t.paged,i=void 0===o?1:o,a=yj((0,u.useState)(!1),2),c=a[0],s=a[1],p=yj((0,u.useState)(!1),2),d=p[0],y=p[1],h=yj((0,u.useState)(0),2),m=h[0],v=h[1],b=(0,u.useState)(!1),g=yj(b,1)[0],w=(0,u.useRef)(null);if(Qx(w,b),(0,Ye.useSelect)(function(){var e,t=(e=fj().m(function e(t){var n,r,o,a;return fj().w(function(e){for(;;)switch(e.n){case 0:if(!1!==g){e.n=1;break}return e.a(2);case 1:return e.n=2,t("rank-math").getKeywordsRows(i);case 2:return n=e.v,(0,f.isEmpty)(n)||n===c||s(n),e.n=3,t("rank-math").getKeywordsSummary();case 3:return r=e.v,(0,f.isEmpty)(r)||r===d||y(r),e.n=4,t("rank-math").getKeywordsOverview();case 4:o=e.v,(0,f.isEmpty)(o)||(a=["top3","top10","top50","top100"].reduce(function(e,t){return e+parseInt((0,f.get)(o,["topKeywords",t,"total"],0))},0),v(a));case 5:return e.a(2)}},e)}),function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){dj(i,r,o,a,c,"next",e)}function c(e){dj(i,r,o,a,c,"throw",e)}a(void 0)})});return function(e){return t.apply(this,arguments)}}(),[g,i,c,d]),(0,f.isUndefined)(c)||(0,f.isUndefined)(d))return"Loading";var x="No Data"===c.response?[]:c;if((0,f.isEmpty)(x))return wp.element.createElement("div",{ref:w},Jx((0,l.__)("Rest of the Keywords","seo-by-rank-math")));var O=(0,Ge.applyFilters)("rankMath.analytics.keywordsHeaders",[{key:"sequenceAdd",label:(0,l.__)("#","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-index"},{key:"query",label:(0,l.__)("Keywords","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-query"},{key:"impressions",label:(0,l.__)("Impressions","seo-by-rank-math"),cellClassName:"rank-math-col-impressions"},{key:"clicks",label:(0,l.__)("Clicks","seo-by-rank-math"),cellClassName:"rank-math-col-click"},{key:"ctr",label:(0,l.__)("CTR","seo-by-rank-math"),cellClassName:"rank-math-col-ctr"},{key:"position",label:(0,l.__)("Position","seo-by-rank-math"),cellClassName:"rank-math-col-position"}]),k=[{label:(0,l.__)("Keywords","seo-by-rank-math"),value:(0,f.get)(d,["keywords","total"],0)},{label:(0,l.__)("Total Impressions","seo-by-rank-math"),value:xx((0,f.get)(d,["impressions","total"],0))},{label:(0,l.__)("CTR","seo-by-rank-math"),value:xx((0,f.get)(d,["ctr","total"],0))},{label:(0,l.__)("Total Clicks","seo-by-rank-math"),value:xx((0,f.get)(d,["clicks","total"],0))}],E=lO(O,r);return wp.element.createElement(u.Fragment,null,wp.element.createElement("div",{className:"rank-math-keyword-table",ref:w},wp.element.createElement(WO,{className:"rank-math-table rank-math-analytics__card",title:(0,l.__)("Rest of the Keywords","seo-by-rank-math"),headers:E,rows:sO(x,(0,f.map)(O,"key"),uO(i,25)),downloadable:!0,query:t,rowsPerPage:25,totalRows:m,summary:k,isLoading:(0,f.isEmpty)(c),showPageArrowsLabel:!1,onPageChange:function(e){n("/keywords/"+e)},onQueryChange:function(){return function(){}},onColumnsChange:function(e,t){r[t]=!r[t],(0,Ye.dispatch)("rank-math").updateUserPreferences(r,mj)}})))})));function bj(e){return bj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bj(e)}function gj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gj(Object(n),!0).forEach(function(t){xj(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function xj(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=bj(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=bj(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==bj(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Oj=(0,Ye.withSelect)(function(e,t){var n=e("rank-math").getKeywordsOverview();return wj(wj({},t),{},{graph:(0,f.get)(n,["positionGraph"])})})(function(e){var t=e.graph,n=e.selected;if((0,f.isEmpty)(t))return wp.element.createElement("div",{className:"rank-math-graph main-graph keywords-position-graph loader"},wp.element.createElement(et,{animate:!1,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"100%",height:"100%"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"})));var r={top3:(0,l.__)("Top 3 Positions","seo-by-rank-math"),top10:(0,l.__)("4-10 Positions","seo-by-rank-math"),top50:(0,l.__)("10-50 Positions","seo-by-rank-math"),top100:(0,l.__)("51-100 Positions","seo-by-rank-math")};return wp.element.createElement("div",{className:"rank-math-graph main-graph keywords-position-graph"},wp.element.createElement(hn,null,wp.element.createElement(dS,{data:t,margin:{top:0,right:0,left:0,bottom:0},stackOffset:"expand",style:{direction:rankMath.isRtl?"rtl":"ltr"}},wp.element.createElement(ax,{reversed:rankMath.isRtl,dy:15,dataKey:"formattedDate",interval:"preserveStartEnd",minTickGap:15,tickLine:!1,tickFormatter:function(e){return e},tick:{fill:"#7f868d",fontSize:14},axisLine:{stroke:"rgba(0, 0, 0, 0.15)"}}),wp.element.createElement(vx,{orientation:rankMath.isRtl?"right":"left",dx:-10,axisLine:!1,tickLine:!1,tickFormatter:function(e){return xx(e)},tick:{fill:"#7f868d",fontSize:14}}),wp.element.createElement(vr,{style:{direction:rankMath.isRtl?"rtl":"ltr"},content:wp.element.createElement(aS,null),wrapperStyle:{zIndex:10},wrapperClassName:"rank-math-graph-tooltip",formatter:function(e,t){return[e,r[t]]},cursor:{fill:"rgb(0 0 0 / 0.05)"}}),n.top3&&wp.element.createElement(iv,{type:"basis",dataKey:"top3",strokeWidth:0,fill:"#3e70b2",stackId:"keywords"}),n.top10&&wp.element.createElement(iv,{type:"basis",dataKey:"top10",strokeWidth:0,fill:"#4e8cde",stackId:"keywords"}),n.top50&&wp.element.createElement(iv,{type:"basis",dataKey:"top50",strokeWidth:0,fill:"#71a3e5",stackId:"keywords"}),n.top100&&wp.element.createElement(iv,{type:"basis",dataKey:"top100",strokeWidth:0,fill:"#83afe8",stackId:"keywords"}),wp.element.createElement(CS,{stroke:"rgba(0, 0, 0, 0.05)",vertical:!1}))))});const kj=(0,ot.withFilters)("rankMath.analytics.keywordStatsGraph")(function(){return null});const Ej=(0,ot.withFilters)("rankMath.analytics.topKeywords")(function(){return wp.element.createElement(u.Fragment,null,wp.element.createElement("div",{id:"rank-math-pro-cta"},wp.element.createElement("div",{className:"rank-math-cta-table"},wp.element.createElement("div",{className:"rank-math-cta-header"},wp.element.createElement("h2",null,(0,l.__)("Top 5 Winning & Losing Keywords","rank-mth"))),wp.element.createElement("div",{className:"rank-math-cta-body"},wp.element.createElement(ot.Dashicon,{size:"50",icon:"awards"}),wp.element.createElement("p",null,(0,l.__)("Prioritize whatâ€™s most important so you can take action before its too late by seeing keywords youâ€™re ranking well for and keywords where your siteâ€™s position has dropped.","seo-by-rank-math")),wp.element.createElement("a",{href:Tx("pro","Winning KW CTA"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math"))))))});function Sj(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,c=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return jj(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jj(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jj(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Pj=function(){var e=Sj((0,u.useState)({impressions:!0,clicks:!0,keywords:!0,ctr:!1,position:!1}),2),t=e[0],n=e[1],r=Sj((0,u.useState)({top3:!0,top10:!0,top50:!0,top100:!0}),2),o=r[0],i=r[1];return wp.element.createElement(u.Fragment,null,wp.element.createElement(hO,{heading:(0,l.__)("Keywords","seo-by-rank-math"),onChange:function(){(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getKeywordsOverview"),(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getKeywordsRows"),(0,Ye.dispatch)("rank-math").invalidateResolutionForStoreSelector("getKeywordsSummary")}}),wp.element.createElement(sj,{selected:o,setSelection:i}),wp.element.createElement(Oj,{selected:o}),wp.element.createElement(uj,{selected:t,setSelection:n}),wp.element.createElement(kj,{selected:t}),wp.element.createElement(Ej,null),wp.element.createElement(vj,null))};function _j(e){return _j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_j(e)}function Aj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Tj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Aj(Object(n),!0).forEach(function(t){Cj(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Aj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Cj(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=_j(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_j(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==_j(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Nj=dO((0,ot.withFilters)("rankMath.analytics.single")((0,Ye.withSelect)(function(e,t){var n=t.params.id,r=void 0===n?0:n;return Tj(Tj({},t),{},{post:e("rank-math").getSinglePost(r)})})(function(e){var t=e.post;return(0,f.isEmpty)(t)?null:wp.element.createElement(u.Fragment,null,wp.element.createElement(hO,{heading:(0,gx.decodeEntities)(t.title),slug:t.page,adminURL:t.admin_url,homeURL:t.home_url}),wp.element.createElement("div",{className:"rank-math-single-post-report"},wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-50 top-20"},wp.element.createElement("h3",null,(0,l.__)("Ready for more than just an overview? We have fully-fledged reports!","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Track more than 20 metrics for all of your posts","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Monitor Google trends for your selected focus keyword","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Keep an eye on the data that matters all in one place","seo-by-rank-math"))),wp.element.createElement("a",{href:Tx("pro","Single Post Report"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math")))),wp.element.createElement("img",{src:rankMath.singleImage,alt:(0,l.__)("Single Post/Page Reports","seo-by-rank-math"),className:"single-post-report"})))})));const Mj=dO((0,ot.withFilters)("rankMath.analytics.keywordManager")(function(){var e=[{key:"sequenceDelete",label:(0,l.__)("#","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-index"},{key:"query",label:(0,l.__)("Keywords","seo-by-rank-math"),required:!0,cellClassName:"rank-math-col-title"},{key:"impressions",label:(0,l.__)("Impressions","seo-by-rank-math"),cellClassName:"rank-math-col-impressions"},{key:"clicks",label:(0,l.__)("Clicks","seo-by-rank-math"),cellClassName:"rank-math-col-click"},{key:"ctr",label:(0,l.__)("CTR","seo-by-rank-math"),cellClassName:"rank-math-col-click"},{key:"position",label:(0,l.__)("Position","seo-by-rank-math"),cellClassName:"rank-math-col-position"},{key:"positionHistory",label:(0,l.__)("Position History","seo-by-rank-math"),cellClassName:"rank-math-col-position-history"}],t=[{label:(0,l.__)("Used","seo-by-rank-math"),value:5},{label:(0,l.__)("Remaining","seo-by-rank-math"),value:45},{label:(0,l.__)("Allowed","seo-by-rank-math"),value:50}],n=[{date:"2020-07-15",position:3},{date:"2020-07-25",position:5},{date:"2020-07-31",position:1},{date:"2020-08-13",position:1},{date:"2020-08-20",position:7},{date:"2020-08-28",position:7}],r=[{date:"2020-07-03",position:8},{date:"2020-08-06",position:2},{date:"2020-08-28",position:2}],o={"best seo plugin wordpress":{query:"best seo plugin wordpress",clicks:{total:21,difference:10},impressions:{total:2030,difference:-200},position:{total:3,difference:1},ctr:{total:.631578947368421,difference:.23},graph:n},"seo plugins for wordpress":{query:"seo plugins for wordpress",clicks:{total:40,difference:-15},impressions:{total:125,difference:22},position:{total:4,difference:-1},ctr:{total:3.25,difference:-.2},graph:r},"wordpress seo plugin":{query:"wordpress seo plugin",clicks:{total:60,difference:-2},impressions:{total:2222,difference:-22},position:{total:5,difference:15},ctr:{total:.55,difference:-.1},graph:n},"best seo plugin":{query:"best seo plugin",clicks:{total:724,difference:23},impressions:{total:2159,difference:329},position:{total:1,difference:0},ctr:{total:20.69,difference:.07},graph:r},"wordpress seo plugins":{query:"wordpress seo plugins",clicks:{total:1e4,difference:5e3},impressions:{total:3e5,difference:-23300},position:{total:5,difference:2},ctr:{total:.59,difference:-.1},graph:n}};return wp.element.createElement(u.Fragment,null,wp.element.createElement("div",{className:"rank-math-keyword-table keyword-manager"},wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-50"},wp.element.createElement("h3",null,(0,l.__)("Your Own Keyword Manager","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Track your performance for your target keywords","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Monitor impressions, clicks, and position history","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("No additional monthly subscriptions for third-party tools","seo-by-rank-math"))),wp.element.createElement("a",{href:Tx("pro","Keyword Manager Table"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,l.__)("Upgrade","seo-by-rank-math")))),wp.element.createElement(WO,{className:"rank-math-table blurred",title:(0,l.__)("Keyword Manager","seo-by-rank-math"),headers:e,rows:sO(o,(0,f.map)(e,"key")),rowsPerPage:20,totalRows:20,summary:t})))}));const Dj=function(){var e=function(){var e=[];return e.push({path:"/",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-acf",title:(0,l.__)("Dashboard","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("Dashboard","seo-by-rank-math"))),view:US,className:"rank-math-dashboard-tab"}),e.push({path:"/analytics/:paged",link:"/analytics/1",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-search-console",title:(0,l.__)("Site Analytics","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("Site Analytics","seo-by-rank-math"))),view:tk,className:"rank-math-analytics-tab"}),e.push({path:"/performance/:paged",link:"/performance/1",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-analyzer",title:(0,l.__)("SEO Performance","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("SEO Performance","seo-by-rank-math"))),view:ij,className:"rank-math-performance-tab"}),e.push({path:"/keywords/:paged",link:"/keywords/1",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-faq",title:(0,l.__)("Keywords","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("Keywords","seo-by-rank-math"))),view:Pj,className:"rank-math-keywords-tab"}),e.push({path:"/single/:id",view:Nj,className:"rank-math-single-tab"}),e.push({path:"/tracker/:paged",link:"/tracker/1",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-acf",title:(0,l.__)("Rank Tracker","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("Rank Tracker","seo-by-rank-math"))),view:Mj,className:"rank-math-tracker-tab"}),rankMath.enableIndexStatus&&e.push({path:"/indexing/:paged",link:"/indexing/1",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-analyzer",title:(0,l.__)("Index Status","seo-by-rank-math")}),wp.element.createElement("span",null,(0,l.__)("Index Status","seo-by-rank-math"))),view:lj,className:"rank-math-indexing-tab",isNew:!rankMath.viewedIndexStatus}),(0,Ge.applyFilters)("rank_math_search_console_tabs",e)}();return wp.element.createElement(Ue,null,wp.element.createElement("div",{className:"rank-math-tabs horizontal"},wp.element.createElement("div",{className:"rank-math-tab-nav",role:"tablist","aria-orientation":"horizontal"},(0,f.map)(e,function(e){var t=e.path,n=e.title,r=void 0!==n&&n,o=e.link,i=void 0!==o&&o;e.isNew;if(!1===r)return null;var a=d()("rank-math-tab",{isNew:"is-new"});return wp.element.createElement(Ke,{className:function(e){var n=e.isActive;return n?"/"===t&&window.location.hash&&"#/"!==window.location.hash?a:n?a+" is-active":a:a},key:t,to:i||t},r)}),""!==rankMath.lastUpdated&&wp.element.createElement("div",{className:"rank-math-updated"},wp.element.createElement("strong",null,(0,l.__)("Last updated","seo-by-rank-math")),wp.element.createElement("br",null)," ",rankMath.lastUpdated)),wp.element.createElement(Ne,null,(0,f.map)(e,function(e){var t=d()("rank-math-tab-content",e.className),n=e.view;return wp.element.createElement(Te,{key:e.path,path:e.path,element:wp.element.createElement("div",{className:t},wp.element.createElement(n,e),"/indexing/:paged"!==e.path&&wp.element.createElement("p",{className:"rank-math-footnote"},wp.element.createElement("strong",null,(0,l.__)("Note:","seo-by-rank-math"))," ",(0,l.__)("The statistics that appear in the Rank Math Analytics module wonâ€™t match with the data from the Google Search Console as we only track posts and keywords that rank in the top 100 positions in the selected timeframe. We do this to help make decision-making easier and for faster data processing since this is the data you really need to prioritize your SEO efforts on.","seo-by-rank-math")))})}))))};function Ij(e,t){return{type:"RANK_MATH_APP_DATA",key:e,value:t}}function Rj(e){return Rj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rj(e)}function Lj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Bj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lj(Object(n),!0).forEach(function(t){Fj(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Fj(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Rj(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Rj(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Rj(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Uj(e,t){var n=Bj({},(0,Ye.select)("rank-math").getAppData().dashboardStats);return n[t]=e,Ij("dashboardStats",n)}function zj(e){return Ij("keywordsOverview",e)}function qj(e){return Ij("keywordsSummary",e)}function Wj(e,t,n){var r=Bj({},(0,Ye.select)("rank-math").getKeywordsRowsAll());return r[e]=(0,f.isUndefined)(r[e])?{}:r[e],r[e][n]=t,Ij("keywordsRows",r)}function Kj(e){return Kj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kj(e)}function $j(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Hj(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Kj(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Kj(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Kj(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vj(e,t,n){var r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$j(Object(n),!0).forEach(function(t){Hj(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$j(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},(0,Ye.select)("rank-math").getSinglePosts());return r[e]=(0,f.isUndefined)(r[e])?{}:r[e],r[e][n]=t,Ij("singlePost",r)}function Gj(e){return Gj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gj(e)}var Yj=function(e){if(!e)return!1;if(-1===e){var t=new Date;return t.setYear(1970),t.getTime()}var n=parseInt(e),r=e.replace(n,"");return"d"===r&&(n=24*n*60*60*1e3),"h"===r&&(n=60*n*60*1e3),"m"===r&&(n=60*n*1e3),"s"===r&&(n*=1e3),Date.now()+n};const Xj=wp.apiFetch;var Zj=n.n(Xj);function Jj(e){return Jj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jj(e)}function Qj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eP(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Jj(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Jj(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Jj(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tP(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"30d";n=Yj(n);var r=new Date;r.setTime(n),"object"===Gj(t)&&(t=JSON.stringify(t)),document.cookie=[encodeURIComponent(e)+"="+encodeURIComponent(t),n?"; expires="+r.toUTCString():"","; path=/"].join("")}("rank_math_analytics_date_range",e),Ij("daysRange",e)}function nP(e,t){var n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qj(Object(n),!0).forEach(function(t){eP(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},(0,Ye.select)("rank-math").getUserColumnPreference());return n[t]=e,Zj()({method:"POST",path:"rankmath/v1/an/userPreferences",data:{preferences:n}}),function(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}("userColumnPreference",n)}function rP(e){return rP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},rP(e)}function oP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function iP(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?oP(Object(n),!0).forEach(function(t){aP(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):oP(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function aP(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=rP(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=rP(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==rP(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function cP(e){return Ij("postsOverview",e)}function lP(e){return Ij("postsSummary",e)}function uP(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=iP({},(0,Ye.select)("rank-math").getAnalyticsSummary());return n[t]=e,Ij("analyticsSummary",n)}function sP(e,t,n){var r=iP({},(0,Ye.select)("rank-math").getPostsRowsByObjectsAll());return r[e]=(0,f.isUndefined)(r[e])?{}:r[e],r[e][n]=t,Ij("postsRowsByObjects",r)}function fP(e){return fP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fP(e)}function pP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function dP(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=fP(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=fP(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==fP(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yP(e,t,n){var r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pP(Object(n),!0).forEach(function(t){dP(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pP(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},(0,Ye.select)("rank-math").getIndexingReportAll());return r[e]=(0,f.isUndefined)(r[e])?{}:r[e],r[e][n]=t,Ij("indexingReport",r)}function hP(e){return hP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hP(e)}function mP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function vP(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mP(Object(n),!0).forEach(function(t){bP(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mP(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function bP(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=hP(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=hP(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==hP(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var gP={score:0,dashboardStats:!1,keywordsOverview:!1,postsOverview:!1,postsRows:{},postsRowsByObjects:{},indexingReport:{},postsSummary:!1,keywordsRows:{},keywordsSummary:!1,singlePost:!1,daysRange:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.cookie?document.cookie.split("; "):[],r=/(%[0-9A-Za-z]{2})+/g,o=t,i=0;i<n.length;i++){var a=n[i].split("="),c=a[0].replace(r,decodeURIComponent),l=a.slice(1).join("=");if(e===c){'"'===l.charAt(0)&&(l=l.slice(1,-1));try{l=l.replace(r,decodeURIComponent);try{l=JSON.parse(l)}catch(e){}}catch(e){}o=l;break}}return o}("rank_math_analytics_date_range","-30 days"),analyticsSummary:!1};function wP(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gP,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_DATA"===t.type?vP(vP({},e),{},bP({},t.key,t.value)):e}function xP(e){return xP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xP(e)}function OP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function kP(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?OP(Object(n),!0).forEach(function(t){EP(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):OP(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function EP(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=xP(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=xP(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==xP(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var SP={isLoaded:!1,userColumnPreference:rankMath.userColumnPreference};function jP(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:SP,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?kP(kP({},e),{},EP({},t.key,t.value)):e}function PP(e){return e.appData.singlePost}function _P(e,t,n){var r=fO(n,!1);return r=""===r?"all":r,(0,f.isUndefined)(e.appData.singlePost[t])?{}:e.appData.singlePost[t][r]}function AP(e){return e.appData}function TP(e,t){return(0,f.get)(e.appData,["dashboardStats",t],!1)}function CP(e){return e.appData.keywordsOverview}function NP(e){return e.appData.keywordsSummary}function MP(e){return e.appData.keywordsRows}function DP(e,t,n){var r=fO(n,!1);return r=""===r?"all":r,(0,f.isUndefined)(e.appData.keywordsRows[t])?{}:e.appData.keywordsRows[t][r]}function IP(e){return e.appData.daysRange}function RP(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t?e.appUi.userColumnPreference[t]:e.appUi.userColumnPreference}function LP(e){return e.appData.postsOverview}function BP(e){return e.appData.postsSummary}function FP(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=(0,f.isUndefined)(e.appData.analyticsSummary[t])?e.appData.analyticsSummary:e.appData.analyticsSummary[t];return(0,Ge.applyFilters)("rankMath.analytics.analyticsSummary",n,e.appData.analyticsSummary)}function UP(e){return e.appData.postsRowsByObjects}function zP(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=fO(n)+fO(r,!1);return i=""===i?"all":i,i=o?i+"&postType="+o:i,(0,f.isUndefined)(e.appData.postsRowsByObjects[t])?{}:e.appData.postsRowsByObjects[t][i]}function qP(e){return e.appData.indexingReport}function WP(e,t,n,r){var o=fO(n,!1)+fO(r,!1);return o=""===o?"all":o,(0,f.isUndefined)(e.appData.indexingReport[t])?{}:e.appData.indexingReport[t][o]}function KP(e){Zj()({method:"GET",path:"rankmath/v1/an/dashboard"}).then(function(t){(0,Ye.dispatch)("rank-math").updateStats(t,e)})}function $P(){Zj()({method:"GET",path:"rankmath/v1/an/keywordsOverview"}).then(function(e){(0,Ye.dispatch)("rank-math").updateKeywordsOverview(e)})}function HP(){Zj()({method:"GET",path:"rankmath/v1/an/keywordsSummary"}).then(function(e){(0,Ye.dispatch)("rank-math").updateKeywordsSummary(e)})}function VP(e,t){var n=fO(t,!1);Zj()({method:"GET",path:"rankmath/v1/an/keywordsRows?page="+e+n}).then(function(t){(0,Ye.dispatch)("rank-math").updateKeywordsRows(e,t,""===n?"all":n)})}function GP(e,t){var n=fO(t,!1);Zj()({method:"GET",path:"rankmath/v1/an/post/"+e+"?"+n.substring(1)}).then(function(t){(0,Ye.dispatch)("rank-math").updateSinglePost(e,t,""===n?"all":n)})}function YP(){Zj()({method:"GET",path:"rankmath/v1/an/postsOverview"}).then(function(e){(0,Ye.dispatch)("rank-math").updatePostsOverview(e)})}function XP(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e?"?postType=".concat(e):"";Zj()({method:"GET",path:"rankmath/v1/an/analyticsSummary"+t}).then(function(t){(0,Ye.dispatch)("rank-math").updateAnalyticsSummary(t,e)})}function ZP(e){var t=e?"?postType=".concat(e):"";Zj()({method:"GET",path:"rankmath/v1/an/postsSummary"+t}).then(function(e){(0,Ye.dispatch)("rank-math").updatePostsSummary(e)})}function JP(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=fO(t)+fO(n,!1);o+=r?"&postType=".concat(r):"",Zj()({method:"GET",path:"rankmath/v1/an/postsRowsByObjects?page="+e+o}).then(function(t){(0,Ye.dispatch)("rank-math").updatePostsRowsByObjects(e,t,""===o?"all":o)})}function QP(e,t,n){var r=fO(t,!1)+fO(n,!1);Zj()({method:"GET",path:"rankmath/v1/an/inspectionResults?page="+e+r}).then(function(t){(0,Ye.dispatch)("rank-math").updateIndexingReport(e,t,""===r?"all":r)})}(0,Ye.registerStore)("rank-math",{reducer:(0,Ye.combineReducers)(r),selectors:o,actions:t,resolvers:i});function e_(e){return e_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e_(e)}function t_(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,n_(r.key),r)}}function n_(e){var t=function(e,t){if("object"!=e_(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=e_(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==e_(t)?t:t+""}(0,Ge.addFilter)("rankMath.components.AnalyticItem","rank-math",function(){return lS}),(0,Ge.addFilter)("rank_math_filter_shown_headers","rank-math",lO),(0,Ge.addFilter)("rank_math_process_rows","rank-math",sO),(0,Ge.addFilter)("rank_math_getFilterQuery","rank-math",$O),(0,Ge.addFilter)("rank_math_humanNumber","rank-math",xx),(0,Ge.addFilter)("rank_math_getSnippetIcon","rank-math",Px);var r_=function(){return function(e,t,n){return t&&t_(e.prototype,t),n&&t_(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)},[{key:"setup",value:function(){(0,u.createRoot)(document.getElementById("rank-math-analytics")).render(wp.element.createElement(React.Fragment,null,wp.element.createElement(s.DashboardHeader,{page:"analytics"}),wp.element.createElement("div",{className:"wrap rank-math-wrap"},wp.element.createElement("div",{className:"rank-math-analytics"},wp.element.createElement(Dj,null)))))}}])}();c()(document).ready(function(){window.searchConsole=new r_,null!==document.getElementById("rank-math-analytics")&&window.searchConsole.setup()})}()}();PK     —ŠU]»Tÿß¤x  ¤x  1  includes/modules/analytics/assets/js/admin-bar.jsnu „[µü¤        !function(){var e={6942:function(e,t){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=o(e,l(n)))}return e}function l(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)a.call(e,n)&&e[n]&&(t=o(t,n));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(n=function(){return r}.apply(t,[]))||(e.exports=n)}()}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var l=t[a]={exports:{}};return e[a](l,l.exports,n),l.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=jQuery;var t=n.n(e);const a=React;var r=function(){return r=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},r.apply(this,arguments)};var l=function(e){var t=e.animate,n=void 0===t||t,l=e.animateBegin,o=e.backgroundColor,i=void 0===o?"#f5f6f7":o,s=e.backgroundOpacity,c=void 0===s?1:s,m=e.baseUrl,u=void 0===m?"":m,p=e.children,d=e.foregroundColor,f=void 0===d?"#eee":d,h=e.foregroundOpacity,y=void 0===h?1:h,b=e.gradientRatio,v=void 0===b?2:b,w=e.gradientDirection,E=void 0===w?"left-right":w,g=e.uniqueKey,k=e.interval,_=void 0===k?.25:k,S=e.rtl,N=void 0!==S&&S,O=e.speed,x=void 0===O?1.2:O,R=e.style,C=void 0===R?{}:R,P=e.title,I=void 0===P?"Loading...":P,T=e.beforeMask,j=void 0===T?null:T,A=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n}(e,["animate","animateBegin","backgroundColor","backgroundOpacity","baseUrl","children","foregroundColor","foregroundOpacity","gradientRatio","gradientDirection","uniqueKey","interval","rtl","speed","style","title","beforeMask"]),M=g||Math.random().toString(36).substring(6),U=M+"-diff",F=M+"-animated-diff",D=M+"-aria",B=N?{transform:"scaleX(-1)"}:null,L="0; "+_+"; 1",G=x+"s",V="top-bottom"===E?"rotate(90)":void 0;return(0,a.createElement)("svg",r({"aria-labelledby":D,role:"img",style:r(r({},C),B)},A),I?(0,a.createElement)("title",{id:D},I):null,j&&(0,a.isValidElement)(j)?j:null,(0,a.createElement)("rect",{role:"presentation",x:"0",y:"0",width:"100%",height:"100%",clipPath:"url("+u+"#"+U+")",style:{fill:"url("+u+"#"+F+")"}}),(0,a.createElement)("defs",null,(0,a.createElement)("clipPath",{id:U},p),(0,a.createElement)("linearGradient",{id:F,gradientTransform:V},(0,a.createElement)("stop",{offset:"0%",stopColor:i,stopOpacity:c},n&&(0,a.createElement)("animate",{attributeName:"offset",values:-v+"; "+-v+"; 1",keyTimes:L,dur:G,repeatCount:"indefinite",begin:l})),(0,a.createElement)("stop",{offset:"50%",stopColor:f,stopOpacity:y},n&&(0,a.createElement)("animate",{attributeName:"offset",values:-v/2+"; "+-v/2+"; "+(1+v/2),keyTimes:L,dur:G,repeatCount:"indefinite",begin:l})),(0,a.createElement)("stop",{offset:"100%",stopColor:i,stopOpacity:c},n&&(0,a.createElement)("animate",{attributeName:"offset",values:"0; 0; "+(1+v),keyTimes:L,dur:G,repeatCount:"indefinite",begin:l})))))},o=function(e){return e.children?(0,a.createElement)(l,r({},e)):(0,a.createElement)(i,r({},e))},i=function(e){return(0,a.createElement)(o,r({viewBox:"0 0 476 124"},e),(0,a.createElement)("rect",{x:"48",y:"8",width:"88",height:"6",rx:"3"}),(0,a.createElement)("rect",{x:"48",y:"26",width:"52",height:"6",rx:"3"}),(0,a.createElement)("rect",{x:"0",y:"56",width:"410",height:"6",rx:"3"}),(0,a.createElement)("rect",{x:"0",y:"72",width:"380",height:"6",rx:"3"}),(0,a.createElement)("rect",{x:"0",y:"88",width:"178",height:"6",rx:"3"}),(0,a.createElement)("circle",{cx:"20",cy:"20",r:"20"}))};const s=o,c=wp.apiFetch;var m=n.n(c);const u=wp.hooks,p=wp.element,d=wp.i18n;function f(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var r={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},l=a,o="",i=a.indexOf("#");-1!==i&&(l=a.substring(0,i),o=a.substring(i));var s=Object.keys(r).map(function(e){return"".concat(e,"=").concat(r[e])}).join("&"),c=l.includes("?")&&!l.endsWith("?")?"&":"?";return l+c+s+o+n}n.dn(f);const h=lodash;var y=n(6942),b=n.n(y),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return(e=-1===e.toString().indexOf(".")?e:e.toFixed(t)).toString().replace(".00","")};const w=function(e){if("n/a"===e)return e;e=parseFloat(e);var t=0,n=["K","M","B","T","Q"],a=Math.abs(e);if((e=v(a))<1e3)return e;for(;e>=1e3&&++t<n.length;)e/=1e3;return 0===t?e:v(e)+n[t-1]};n.dn(w);const E=function(e){var t=e.total,n=void 0===t?"n/a":t,a=e.difference,r=void 0===a?"n/a":a,l=e.revert,o=void 0!==l&&l,i="rank-math-item-difference",s="",c="";if("n/a"!==n&&"n/a"!==r){n=(0,h.isUndefined)(n)?0:n,s=(0,h.round)(n,2),n=w(n),r=(0,h.isUndefined)(r)?0:r,c=(0,h.round)(r,2),o=!(0,h.isUndefined)(o)&&o;var m=Math.abs(r)!==r;i=b()(i,{up:!o&&!m&&r>0||o&&m,down:!o&&m||o&&!m&&r>0})}return wp.element.createElement("div",{className:"rank-math-item-numbers"},wp.element.createElement("strong",{className:"text-large",title:s},n),"n/a"!==n&&n!=r&&wp.element.createElement("span",{className:i,title:c},w(r)))};function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},k.apply(null,arguments)}function _(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,S(a.key),a)}}function S(e){var t=function(e,t){if("object"!=g(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=g(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==g(t)?t:t+""}function N(e,t,n){return t=x(t),function(e,t){if(t&&("object"==g(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,O()?Reflect.construct(t,n||[],x(e).constructor):t.apply(e,n))}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}function x(e){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},x(e)}function R(e,t){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},R(e,t)}var C=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=N(this,t,arguments)).data=e.props.data,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&R(e,t)}(t,e),n=t,(a=[{key:"render",value:function(){return wp.element.createElement(React.Fragment,null,this.getContentAiScore(),this.getSeoScore(),this.getSiteTraffic(),this.getSiteImpression(),this.getAveragePosition(),this.getIndexVerdict(),this.getPageSpeed())}},{key:"getContentAiScore",value:function(){return!(0,h.isUndefined)(this.data.contentAiScore)&&wp.element.createElement("div",{className:"rank-math-item content-ai-score"},wp.element.createElement("h3",null,(0,d.__)("Content AI score","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,d.__)("Content AI Score.","seo-by-rank-math")))),wp.element.createElement("div",{className:"score"},wp.element.createElement("strong",null,this.data.contentAiScore," / 100"),wp.element.createElement("div",{className:"score-wrapper"},wp.element.createElement("span",{className:"score-dot",style:{left:this.data.contentAiScore<13?13:this.data.contentAiScore+"%"}}))))}},{key:"getSeoScore",value:function(){var e=this.data.seo_score,t="rank-math-item seo-score "+this.getScoreClass(e);return wp.element.createElement("div",{className:t},wp.element.createElement("h3",null,(0,d.__)("SEO Score","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,d.__)("Rank Math's SEO Score","seo-by-rank-math")))),wp.element.createElement("div",{className:"score"},wp.element.createElement("strong",null,wp.element.createElement("span",null,e))))}},{key:"getSiteImpression",value:function(){if((0,h.isUndefined)(this.data.impressions)&&!rankMath.isAnalyticsConnected)return!1;var e=(0,h.get)(this.data,"impressions",0);return wp.element.createElement("div",{className:"rank-math-item"},wp.element.createElement("h3",null,(0,d.__)("Total Impressions","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,d.__)("This is how many times your site showed up in the search results.","seo-by-rank-math")))),wp.element.createElement("div",{className:"score"},wp.element.createElement(E,e)))}},{key:"getAveragePosition",value:function(){return!((0,h.isUndefined)(this.data.position)||!rankMath.isConsoleConnected)&&wp.element.createElement("div",{className:"rank-math-item"},wp.element.createElement("h3",null,(0,d.__)("Average Position","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,d.__)("This is the average position of your site in the search results.","seo-by-rank-math")))),wp.element.createElement("div",{className:"score"},wp.element.createElement(E,k({},this.data.position,{revert:!0}))))}},{key:"getSiteTraffic",value:function(){return(0,u.applyFilters)("rank-math-analytics-stats-site-traffic","")}},{key:"getIndexVerdict",value:function(){return(0,u.applyFilters)("rank-math-analytics-stats-index-verdict",wp.element.createElement("div",{className:"rank-math-item blur index-status"},wp.element.createElement("h3",null,(0,d.__)("Index Status","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,d.__)("URL Inspection Status","seo-by-rank-math")))),wp.element.createElement("div",{className:"verdict"},wp.element.createElement("i",{className:"indexing_state verdict indexing allowed undefined"}),wp.element.createElement("span",null,"undefined"))),this.data)}},{key:"getPageSpeed",value:function(){return(0,u.applyFilters)("rank-math-analytics-stats-pagespeed",wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{id:"rank-math-analytics-stats-pagespeed",className:"rank-math-single-tab rank-math-item blur"},wp.element.createElement("div",{className:"rank-math-box rank-math-pagespeed-box"},wp.element.createElement("div",{className:"rank-math-pagespeed-header"},wp.element.createElement("h3",null,(0,d.__)("PageSpeed","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}))),wp.element.createElement("span",null,"April 2, 2022")),wp.element.createElement("div",{className:"grid"},wp.element.createElement("div",{className:"col pagespeed-desktop"},wp.element.createElement("i",{className:"rm-icon rm-icon-desktop"}),wp.element.createElement("strong",{className:"pagespeed interactive-good"},"0 s"),wp.element.createElement("small",{className:"pagescore score-bad"},"0")),wp.element.createElement("div",{className:"col pagespeed-mobile"},wp.element.createElement("i",{className:"rm-icon rm-icon-mobile"}),wp.element.createElement("strong",{className:"pagespeed interactive-good"},"0 s"),wp.element.createElement("small",{className:"pagescore score-bad"},"0")))))))}},{key:"getScoreClass",value:function(e){return e>80?"great":e>50&&e<81?"good":"bad"}}])&&_(n.prototype,a),r&&_(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a,r}(p.Component);const P=C,I=wp.htmlEntities,T=wp.components;(0,T.withFilters)("rankMath.analytics.keywordAddRemoveButton")(function(e){var t=e.sequence;return wp.element.createElement(p.Fragment,null,t,wp.element.createElement(T.Button,{className:"button button-secondary button-small add-keyword",href:f("pro","Add KW Button"),target:"_blank"},wp.element.createElement("div",{className:"rank-math-tooltip"},wp.element.createElement("i",{className:"rm-icon rm-icon-plus"}),wp.element.createElement("span",null,(0,d.__)("Pro Feature","seo-by-rank-math")))))});(0,T.withFilters)("rankMath.analytics.keywordTitle")(function(e){var t=e.query;return wp.element.createElement("h4",null,(0,I.decodeEntities)(t))});(0,T.withFilters)("rankMath.analytics.keywordDelete")(function(e){var t=e.sequence,n=e.query;return wp.element.createElement(p.Fragment,null,t,wp.element.createElement(T.Button,{className:"button button-secondary button-small add-keyword delete",title:(0,d.__)("Delete from Keyword Manager","seo-by-rank-math"),onClick:function(){return(0,u.doAction)("rank_math_remove_keyword",n)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"})))});(0,T.withFilters)("rankMath.analytics.IndexingDataFooter")(function(){return wp.element.createElement("div",{className:"row-footer"},wp.element.createElement("table",null,wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("td",{colSpan:"8"},wp.element.createElement("div",{className:"last-crawl-data"},wp.element.createElement("div",null,wp.element.createElement("strong",null,(0,d.__)("Google: ","seo-by-rank-math")),wp.element.createElement("span",{className:"blurred"},(0,d.__)("Available in the PRO version","seo-by-rank-math"))),wp.element.createElement("div",null,wp.element.createElement("strong",null,(0,d.__)("Last Crawl: ","seo-by-rank-math")),wp.element.createElement("span",{className:"blurred"},(0,d.__)("PRO Feature","seo-by-rank-math")))))))))});function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}function A(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,M(a.key),a)}}function M(e){var t=function(e,t){if("object"!=j(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=j(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==j(t)?t:t+""}function U(e,t,n){return t=D(t),function(e,t){if(t&&("object"==j(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,F()?Reflect.construct(t,n||[],D(e).constructor):t.apply(e,n))}function F(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(F=function(){return!!e})()}function D(e){return D=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},D(e)}function B(e,t){return B=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},B(e,t)}var L=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),U(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&B(e,t)}(t,e),n=t,(a=[{key:"render",value:function(){return wp.element.createElement("div",{className:"inner-elements hidden"},wp.element.createElement("table",null,wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("td",{colSpan:"8"},wp.element.createElement("div",{className:"indexing-data-wrapper"},this.getStatusResult(),this.getReferringURLs(),this.getMobileData(),this.richResultsData(),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 width-50"},wp.element.createElement("h3",null,(0,d.__)("PRO Version offers Advanced Indexing Stats","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,d.__)("Monitor metrics like Index Status, Last Crawl date, etc","seo-by-rank-math")),wp.element.createElement("li",null,(0,d.__)("All the Indexing statistics about your content in one place","seo-by-rank-math")),wp.element.createElement("li",null,(0,d.__)("Use data provided by Google instead of 3rd party tools","seo-by-rank-math"))),wp.element.createElement("a",{href:f("pro","Index Status Tab Toggle"),target:"_blank",rel:"noreferrer",className:"button button-primary is-green"},(0,d.__)("Upgrade","seo-by-rank-math"))))))))))}},{key:"getStatusResult",value:function(){return wp.element.createElement("div",{className:"indexing-data status"},wp.element.createElement("h4",null,"Index Status Result"),Array.from([{label:"Verdict",value:"NEUTRAL"},{label:"Robots Text State",value:"ROBOTS_TXT_STATE_UNSPECIFIED"},{label:"Indexing State",value:"INDEXING_STATE_UNSPECIFIED"},{label:"Last Crawl Time",value:"2022-01-09 05:46:12"},{label:"Page Fetch State",value:"PAGE_FETCH_STATE_UNSPECIFIED"},{label:"Google Canonical",value:"https://example.com/"},{label:"User Canonical",value:"https://example.com/"},{label:"Sitemap",value:"https://example.com/sitemap_index.xml"}]).map(function(e){return wp.element.createElement("div",{key:e.label},wp.element.createElement("span",{className:"label"},e.label),wp.element.createElement("span",{className:"result"},e.value))}))}},{key:"getReferringURLs",value:function(){return wp.element.createElement("div",{className:"indexing-data referring-urls"},wp.element.createElement("h4",null,"Referring URLs"),wp.element.createElement("ul",null,["https://example.com/test1","https://example.com/test2"].map(function(e,t){return wp.element.createElement("li",{key:t},e)})))}},{key:"getMobileData",value:function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"indexing-data crawled"},wp.element.createElement("h4",null,"Crawled As"),wp.element.createElement("div",null,"UNSPECIFIED")),wp.element.createElement("div",{className:"indexing-data status"},wp.element.createElement("h4",null,"Mobile Usability Result"),wp.element.createElement("div",null,wp.element.createElement("span",null,"Verdict"),wp.element.createElement("span",null,"Unspecified"))))}},{key:"richResultsData",value:function(){return wp.element.createElement("div",{className:"indexing-data detected-items"},wp.element.createElement("h4",null,"detectedItems"),wp.element.createElement("div",{className:"rich-results-wrapper"},wp.element.createElement("div",{className:"rich-results-header"},wp.element.createElement("h4",null,"Rich Result Types"),wp.element.createElement("h4",null,"Items")),wp.element.createElement("div",{className:"rich-results-data"},wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("h4",null,"Breadcrumbs"),wp.element.createElement("div",{className:"schema-data"},wp.element.createElement("strong",null,"Name"),wp.element.createElement("span",null,"Unnamed item"))),wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("h4",null,"Review snippets"),wp.element.createElement("div",{className:"schema-data"},wp.element.createElement("strong",null,"Name"),wp.element.createElement("span",null,"Issues"),wp.element.createElement("div",{className:"sub-issues"},wp.element.createElement("span",null,"Unnamed item"),wp.element.createElement("span",{className:"schema-issues"},wp.element.createElement("strong",null,"Issue Message"),wp.element.createElement("strong",null,"Severity"),wp.element.createElement("div",{className:"issue-details"},wp.element.createElement("span",{className:"error"},wp.element.createElement("span",null,"Item does not support reviews"),wp.element.createElement("span",null,"ERROR")),wp.element.createElement("span",{className:"warning"},wp.element.createElement("span",null,"Missing reviewed item name"),wp.element.createElement("span",null,"WARNING"))))))))))}}])&&A(n.prototype,a),r&&A(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a,r}(p.Component);(0,T.withFilters)("rankMath.analytics.IndexingDataToggle")(L);function G(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,i=[],s=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=l.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?V(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function K(e){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},K(e)}function q(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,H(a.key),a)}}function H(e){var t=function(e,t){if("object"!=K(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=K(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==K(t)?t:t+""}window.rankMath=window.rankMath||{},window.rankMath.analyticsHelpers=window.rankMath.analyticsHelpers||{},window.rankMath.analyticsHelpers={translateText:function(e,t){if("page_fetch_state"!==t)return e;var n={PAGE_FETCH_STATE_UNSPECIFIED:(0,d.__)("Unknown fetch state","seo-by-rank-math"),SUCCESSFUL:(0,d.__)("Successful fetch","seo-by-rank-math"),SOFT_404:(0,d.__)("Soft 404","seo-by-rank-math"),BLOCKED_ROBOTS_TXT:(0,d.__)("Blocked by robots.txt","seo-by-rank-math"),NOT_FOUND:(0,d.__)("Not found (404)","seo-by-rank-math"),ACCESS_DENIED:(0,d.__)("Blocked due to unauthorized request (401)","seo-by-rank-math"),SERVER_ERROR:(0,d.__)("Server error (5xx)","seo-by-rank-math"),REDIRECT_ERROR:(0,d.__)("Redirection error","seo-by-rank-math"),ACCESS_FORBIDDEN:(0,d.__)("Blocked due to access forbidden (403)","seo-by-rank-math"),BLOCKED_4XX:(0,d.__)("Blocked due to other 4xx issue (not 403, 404)","seo-by-rank-math"),INTERNAL_CRAWL_ERROR:(0,d.__)("Internal error","seo-by-rank-math"),INVALID_URL:(0,d.__)("Invalid URL","seo-by-rank-math")};return(0,h.has)(n,e)?n[e]:e},convertValue:function(e){return e?e.includes("UNSPECIFIED")?(0,d.__)("Unspecified","seo-by-rank-math"):"NEUTRAL"===e?(0,d.__)("Excluded","seo-by-rank-math"):e:(0,d.__)("Not available","seo-by-rank-math")},noDataMessage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t=t||(0,d.sprintf)((0,d.__)("No data to display. Check back later or try to update data manually from %s","seo-by-rank-math"),'<a href="'+rankMath.adminurl+'?page=rank-math-options-general#setting-panel-analytics"><strong>'+(0,d.__)("Rank Math > General Settings > Analytics > Click 'Update data manually' button.","seo-by-rank-math")+"</strong></a>"),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"rank-math-analytics-notice"},wp.element.createElement("div",{className:"rank-math-cta-table woocommerce-table rank-math-table"},wp.element.createElement("div",{className:"rank-math-cta-header"},wp.element.createElement("h2",null,e)),wp.element.createElement("div",{className:"rank-math-cta-body",dangerouslySetInnerHTML:{__html:t}})))},elementObserver:function(e,t){var n=G(t,2),a=n[0],r=n[1];return(0,p.useEffect)(function(){var t=e.current;if(t){new IntersectionObserver(function(e){G(e,1)[0].isIntersecting&&!1===a&&r(!0)}).observe(t)}},[a]),a}};var W=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.init(),this.addContentLoader(),this.events()},n=[{key:"init",value:function(){t()("body").prepend(this.analyticsWrapper()),m()({method:"GET",path:"rankmath/v1/an/post/"+rankMath.objectID}).then(function(e){e.errorMessage?t()("#rank-math-analytics-stats-wrapper").remove():((0,p.createRoot)(document.getElementById("rank-math-analytics-stats")).render((0,p.createElement)(function(){return wp.element.createElement("div",{className:"rank-math-analytics-wrapper"},wp.element.createElement(P,{data:e}))})),(0,u.doAction)("rank-math-analytics-stats",e))}).catch(function(){t()("#rank-math-analytics-stats-wrapper").remove()})}},{key:"analyticsWrapper",value:function(){var e=rankMath.hideFrontendStats?"hide-stats":"";return'<div id="rank-math-analytics-stats-wrapper" class="'.concat(e,'">\n\t\t\t\t<div class="top-icons">\t\n\t\t\t\t\t<a href="').concat(f("analytics-stats-bar","Analytics Stats Bar KB"),'" target="_blank" class="rank-math-stats-bar-help">\n\t\t\t\t\t\t<em class="dashicons-before dashicons-editor-help" title="').concat((0,d.__)("Learn More","seo-by-rank-math"),'"></em>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a href="#" class="rank-math-analytics-disable-stats" title="').concat((0,d.__)("Close Permanently","seo-by-rank-math"),'">\n\t\t\t\t\t\t<span class="dashicons dashicons-no-alt"></span>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<a href="#" class="rank-math-analytics-close-stats">\n\t\t\t\t\t<span class="dashicons dashicons-arrow-up-alt2" title="').concat((0,d.__)("Hide Analytics Stats","seo-by-rank-math"),'"></span>\n\t\t\t\t\t<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg"><title>').concat((0,d.__)("Show Analytics Stats","seo-by-rank-math"),'</title><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg>\n\t\t\t\t</a>\n\n\t\t\t\t<div id="rank-math-analytics-stats-content">\n\t\t\t\t\t<div id="rank-math-analytics-stats" class="rank-math-analytics"></div>\n\t\t\t\t\t').concat(this.proContent(),"\n\t\t\t\t</div>\n\t\t\t</div>")}},{key:"addContentLoader",value:function(){for(var e=[],t=0;t<4;t++)e.push(wp.element.createElement(s,{animate:!0,backgroundColor:"#f0f2f4",foregroundColor:"#f0f2f4",style:{width:"23%",height:"83px",padding:"1rem"}},wp.element.createElement("rect",{x:"0",y:"0",rx:"0",ry:"0",width:"100%",height:"100%"})));(0,p.createRoot)(document.getElementById("rank-math-analytics-stats")).render((0,p.createElement)(function(){return wp.element.createElement("div",{className:"rank-math-analytics-wrapper"},e)}))}},{key:"proContent",value:function(){return(0,u.applyFilters)("rank_math_is_pro",!1)?"":'<div class="rank-math-analytics-stats-footer">\n\t\t\t<p>\n\t\t\t'.concat((0,d.sprintf)((0,d.__)("Advanced Stats are available in the PRO version, %1$s.","seo-by-rank-math"),'<a href="'+f("analytics-stats-bar","Analytics Stats Bar")+'" target="_blank" rel="noreferrer" class="button button-primary">'+(0,d.__)("learn More","seo-by-rank-math")+"</a>"),'\n\t\t\t</p>\n\t\t\t<a href="').concat(f("analytics-stats-bar","Analytics Stats Bar"),'" target="_blank" rel="noreferrer" class="button button-primary">\n\t\t\t\t').concat((0,d.__)("Upgrade to PRO","seo-by-rank-math"),"\n\t\t\t</a>\n\t\t\t</div>\n\t\t")}},{key:"events",value:function(){var e=t()("#rank-math-analytics-stats-wrapper");t()(".rank-math-analytics-close-stats").on("click",function(t){return t.preventDefault(),e.toggleClass("hide-stats"),m()({method:"POST",path:"rankmath/v1/an/removeFrontendStats/",data:{toggleBar:!0,hide:e.hasClass("hide-stats")}}),!1}),t()(".rank-math-analytics-disable-stats").on("click",function(t){return t.preventDefault(),confirm((0,d.__)("Are you sure you want to do this? This action will close the Stats bar permanently. Instead, you can use the toggle icon to minimize it.","seo-by-rank-math"))&&(e.remove(),m()({method:"POST",path:"rankmath/v1/an/removeFrontendStats/"})),!1})}}],n&&q(e.prototype,n),a&&q(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,a}();t()(function(){new W})}()}();PK     —ŠU]«w%ªO  ªO  3  includes/modules/analytics/assets/css/admin-bar.cssnu „[µü¤        :root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@font-face{font-family:"Rank-Math";font-weight:normal;font-style:normal;font-display:block;src:url("../fonts/Rank-Math.ttf?v1.0.95") format("truetype"),url("../fonts/Rank-Math.woff?v1.0.95") format("woff"),url("../fonts/Rank-Math.svg?v1.0.95#Rank-Math") format("svg")}[class^=rm-icon-],[class*=" rm-icon-"]{font-family:"Rank-Math" !important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.rm-icon-content-ai:before{content:"î¤‰"}.rm-icon-bot:before{content:"î¨ "}.rm-icon-enter-key:before{content:"î¤ˆ"}.rm-icon-send:before{content:"î¤‡"}.rm-icon-seo-description:before{content:"î¨µ"}.rm-icon-search-console:before{content:"îµ±"}.rm-icon-adsense:before{content:"î®™"}.rm-icon-role-manager:before{content:"î¨º"}.rm-icon-software:before{content:"îªš"}.rm-icon-calendar:before{content:"î©ƒ"}.rm-icon-cart:before{content:"îµ³"}.rm-icon-post-format:before{content:"î±¤"}.rm-icon-fact-check:before{content:"î¯·"}.rm-icon-tick:before{content:"î®�"}.rm-icon-recipe:before{content:"î°»"}.rm-icon-circle-plus:before{content:"î®Ÿ"}.rm-icon-service:before{content:"î±¦"}.rm-icon-cross:before{content:"î¯ª"}.rm-icon-code:before{content:"î±§"}.rm-icon-settings:before{content:"î© "}.rm-icon-comments-reply:before{content:"î±¿"}.rm-icon-comments:before{content:"î´µ"}.rm-icon-dataset:before{content:"î³¸"}.rm-icon-schema:before{content:"î®—"}.rm-icon-direction:before{content:"î³‰"}.rm-icon-desktop:before{content:"î©§"}.rm-icon-mail:before{content:"î¶Ž"}.rm-icon-import:before{content:"î©š"}.rm-icon-export:before{content:"î©�"}.rm-icon-eye:before{content:"î®¤"}.rm-icon-facebook:before{content:"î¶¥"}.rm-icon-htaccess:before{content:"î©¯"}.rm-icon-robots:before{content:"î©°"}.rm-icon-movie:before{content:"î·�"}.rm-icon-category:before{content:"î©¶"}.rm-icon-images:before{content:"î­ª"}.rm-icon-google:before{content:"î¤…"}.rm-icon-course:before{content:"î±°"}.rm-icon-heart-filled:before{content:"î®¬"}.rm-icon-home:before{content:"î´�"}.rm-icon-image:before{content:"îª "}.rm-icon-info:before{content:"î®´"}.rm-icon-instagram:before{content:"î»º"}.rm-icon-stories:before{content:"î³§"}.rm-icon-acf:before{content:"î³«"}.rm-icon-book:before{content:"î±³"}.rm-icon-light-bulb:before{content:"î½ "}.rm-icon-howto:before{content:"î®¼"}.rm-icon-faq:before{content:"î®½"}.rm-icon-local-seo:before{content:"îª‡"}.rm-icon-job:before{content:"î´º"}.rm-icon-misc:before{content:"îª�"}.rm-icon-mail-reply:before{content:"î¿ž"}.rm-icon-podcast:before{content:"î¿®"}.rm-icon-copy:before{content:"î¤†"}.rm-icon-mobile:before{content:"î¨®"}.rm-icon-social:before{content:"î±¶"}.rm-icon-music:before{content:"î¯ˆ"}.rm-icon-sitemap:before{content:"î©�"}.rm-icon-post:before{content:"îµ�"}.rm-icon-attachment:before{content:"î¶ƒ"}.rm-icon-edit:before{content:"î±¸"}.rm-icon-pencil:before{content:"ï‚¨"}.rm-icon-plus:before{content:"î¯Ž"}.rm-icon-help:before{content:"î¯’"}.rm-icon-restaurant:before{content:"î±–"}.rm-icon-analyzer:before{content:"îª©"}.rm-icon-search:before{content:"îª«"}.rm-icon-star-filled:before{content:"îª³"}.rm-icon-star:before{content:"îªµ"}.rm-icon-support:before{content:"îµ¤"}.rm-icon-tag:before{content:"î¶‘"}.rm-icon-target:before{content:"î¶•"}.rm-icon-text-align-left:before{content:"ïŒµ"}.rm-icon-text:before{content:"ïŒ¸"}.rm-icon-heading:before{content:"ïŒ»"}.rm-icon-thumbs-up:before{content:"ï�…"}.rm-icon-instant-indexing:before{content:"î¯¡"}.rm-icon-toolbox:before{content:"î´Ÿ"}.rm-icon-trash:before{content:"îªº"}.rm-icon-redirection:before{content:"î­°"}.rm-icon-twitter:before{content:"ï��"}.rm-icon-link:before{content:"îªƒ"}.rm-icon-seo-title:before{content:"ï��"}.rm-icon-user:before{content:"ï�˜"}.rm-icon-users:before{content:"î«„"}.rm-icon-video:before{content:"î­³"}.rm-icon-404:before{content:"î¯¨"}.rm-icon-seo:before{content:"ï�»"}.rm-icon-page:before{content:"î²†"}.rm-icon-youtube:before{content:"ï’…"}.rm-icon-rank-math:before{content:"î¤„"}.rm-icon-bank-3:before{content:"î¤€"}.rm-icon-map-marker-11:before{content:"î¤�"}.rm-icon-wallet-1-dollar:before{content:"î¤‚"}.rm-icon-info-circle:before{content:"î¤ƒ"}.rm-icon-bulb-1:before{content:"î¤Š"}.rm-icon-off:before{content:"ï’†"}.rm-icon-ai-visibility:before{content:"ï’‡"}.rank-math-tooltip{position:relative;cursor:pointer;color:#b5bfc9;display:inline-block;line-height:20px;height:20px;z-index:1}.rank-math-tooltip em{line-height:20px}.rank-math-tooltip>span{font-size:11px;font-weight:400;line-height:1.5;white-space:normal;width:200px;padding:8px 10px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);text-align:center;pointer-events:none;opacity:0;color:#fff;border-radius:3px;background:#555d66;position:absolute;bottom:100%;left:50%}.rank-math-tooltip>span:after{content:"";-webkit-transform:translate3d(-50%, 0, 0);transform:translate3d(-50%, 0, 0);position:absolute;top:100%;left:50%;border-style:solid;height:0;width:0;border-color:#555d66 rgba(0,0,0,0) rgba(0,0,0,0);border-width:8px 7px 0}.rank-math-tooltip.bottom span{top:130%;bottom:auto;display:table}.rank-math-tooltip.bottom span:after{position:absolute;top:auto;bottom:100%;left:50%;-webkit-transform:rotate(180deg) translate3d(50%, 0, 0);transform:rotate(180deg) translate3d(50%, 0, 0)}.rank-math-tooltip.left span{right:0%;-webkit-transform:translate3d(-90%, 0, 0);transform:translate3d(-90%, 0, 0)}.rank-math-tooltip.left span:after{left:90%}.rank-math-tooltip:hover{color:#069de3}.rank-math-tooltip:hover span{bottom:130%;opacity:1;z-index:1}@font-face{font-family:"Rank-Math";font-weight:normal;font-style:normal;font-display:block;src:url("../../../../../assets/admin/fonts/Rank-Math.ttf?v1.0.76") format("truetype"),url("../../../../../assets/admin/fonts/Rank-Math.woff?v1.0.76") format("woff"),url("../../../../../assets/admin/fonts/Rank-Math.svg?v1.0.76#Rank-Math") format("svg")}#rank-math-analytics-stats-wrapper{line-height:1.3;position:relative;z-index:99999;color:#242628;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);-webkit-font-smoothing:auto}#rank-math-analytics-stats-wrapper *{letter-spacing:initial}#rank-math-analytics-stats-wrapper a.rank-math-analytics-close-stats{position:absolute;z-index:1;top:auto;right:20px;bottom:0;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;width:34px;height:34px;padding:4px;text-align:center;text-decoration:none;border-radius:4px 4px 0 0;background:rgba(218,223,228,.7)}#rank-math-analytics-stats-wrapper a.rank-math-analytics-close-stats .dashicons{line-height:28px;color:#7f868d}#rank-math-analytics-stats-wrapper a.rank-math-analytics-close-stats:hover .dashicons{color:#242628}#rank-math-analytics-stats-wrapper a.rank-math-analytics-close-stats svg{display:none;fill:#6666c3}#rank-math-analytics-stats-wrapper .top-icons{position:absolute;z-index:1;top:5px;right:20px}#rank-math-analytics-stats-wrapper .top-icons a{line-height:20px;display:inline-block;width:20px;text-decoration:none;opacity:.5;color:#7f868d}#rank-math-analytics-stats-wrapper .top-icons a:hover{opacity:1;color:#069de3}#rank-math-analytics-stats-wrapper .top-icons a.rank-math-analytics-disable-stats{opacity:.7}#rank-math-analytics-stats-wrapper .top-icons a.rank-math-analytics-disable-stats:hover{color:#ed5e5e}#rank-math-analytics-stats-wrapper .top-icons a.rank-math-analytics-disable-stats span{vertical-align:-5px}#rank-math-analytics-stats-wrapper.hide-stats a.rank-math-analytics-close-stats{top:20px;border-radius:4px;background:#fff;-webkit-box-shadow:0 0 3px rgba(68,68,68,.5);box-shadow:0 0 3px rgba(68,68,68,.5)}#rank-math-analytics-stats-wrapper.hide-stats a.rank-math-analytics-close-stats .dashicons-arrow-up-alt2{display:none}#rank-math-analytics-stats-wrapper.hide-stats a.rank-math-analytics-close-stats svg{display:block}#rank-math-analytics-stats-wrapper.hide-stats .top-icons,#rank-math-analytics-stats-wrapper.hide-stats .rank-math-stats-bar-help,#rank-math-analytics-stats-wrapper.hide-stats .rank-math-analytics-disable-stats,#rank-math-analytics-stats-wrapper.hide-stats #rank-math-analytics-stats-content{display:none}#rank-math-analytics-stats{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;background-color:#fff;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#rank-math-analytics-stats .rank-math-analytics-wrapper{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:96%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#rank-math-analytics-stats .rank-math-analytics-wrapper .rank-math-tooltip{text-transform:none}#rank-math-analytics-stats .rank-math-analytics-wrapper .rank-math-tooltip span{top:108% !important;bottom:auto !important}#rank-math-analytics-stats .rank-math-analytics-wrapper .rank-math-tooltip>span:after{top:-5px;left:46%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}#rank-math-analytics-stats .rank-math-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:1rem 1.5rem}#rank-math-analytics-stats .rank-math-item .text-large{font-size:1.5rem;font-weight:700;margin-right:5px;color:#242628}#rank-math-analytics-stats .rank-math-item .rank-math-item-difference{color:#7f868d;font-size:1rem}#rank-math-analytics-stats .rank-math-item .up,#rank-math-analytics-stats .rank-math-item .down{font-weight:500}#rank-math-analytics-stats .rank-math-item .up:before,#rank-math-analytics-stats .rank-math-item .down:before{font-family:"dashicons";font-size:18px;font-weight:900;margin-right:2px;vertical-align:-3px}#rank-math-analytics-stats .rank-math-item .up{color:#10ac84}#rank-math-analytics-stats .rank-math-item .up:before{content:"ï…‚"}#rank-math-analytics-stats .rank-math-item .down{color:#ed5e5e}#rank-math-analytics-stats .rank-math-item .down:before{content:"ï…€"}#rank-math-analytics-stats .rank-math-item{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-analytics-stats .rank-math-item.blur{-webkit-filter:blur(2px);filter:blur(2px)}#rank-math-analytics-stats .rank-math-item.content-ai-score strong{font-size:1rem}#rank-math-analytics-stats .rank-math-item.seo-score{margin-right:0}#rank-math-analytics-stats .rank-math-item.seo-score .score{display:block}#rank-math-analytics-stats .rank-math-item.seo-score .score span{position:relative;z-index:0}#rank-math-analytics-stats .rank-math-item.seo-score .score strong{font-size:14px;line-height:22px;position:relative;display:inline-block;min-width:52px;height:22px;text-align:center;color:hsl(3.9130434783,77.9661016949%,71.862745098%);border:1px solid hsl(3.9130434783,77.9661016949%,71.862745098%);border-radius:5px}#rank-math-analytics-stats .rank-math-item.seo-score .score strong:before{position:absolute;top:0;bottom:0;left:0;width:20px;content:"";border-radius:5px;background:hsl(3.9130434783,77.9661016949%,94.862745098%)}#rank-math-analytics-stats .rank-math-item.seo-score.good strong{color:rgb(255,158.921875,18.5);border-color:rgb(255,158.921875,18.5)}#rank-math-analytics-stats .rank-math-item.seo-score.good strong:before{background:rgb(255,235.58125,207.2)}#rank-math-analytics-stats .rank-math-item.seo-score.great strong{color:hsl(120,42.5531914894%,58.137254902%);border-color:hsl(120,42.5531914894%,58.137254902%)}#rank-math-analytics-stats .rank-math-item.seo-score.great strong:before{background:hsl(120,42.5531914894%,91.137254902%)}#rank-math-analytics-stats .rank-math-item h3{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;font-size:13px;font-weight:500;line-height:1;margin:0;text-transform:uppercase}#rank-math-analytics-stats .rank-math-item .score{line-height:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#rank-math-analytics-stats .rank-math-item .score strong{margin-right:10px;-ms-flex-preferred-size:100%;flex-basis:100%}#rank-math-analytics-stats .rank-math-item .score .score-wrapper{position:relative;overflow:hidden;width:100%;min-width:130px;height:10px;border-radius:10px;background:-webkit-gradient(linear, left top, right top, from(#e93f30), color-stop(50%, #ffbe5f), to(#58bb58));background:linear-gradient(90deg, #e93f30 0%, #ffbe5f 50%, #58bb58 100%)}#rank-math-analytics-stats .rank-math-item .score .score-wrapper .score-dot{position:absolute;top:-2px;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;margin-left:-14px;-webkit-transition:1s left linear;transition:1s left linear;border:2px solid #fff;border-radius:50%;background:rgba(0,0,0,0)}#rank-math-analytics-stats .rank-math-item .score .score-wrapper .score-dot:before{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;width:10px;height:10px;content:"";border:1px solid rgba(0,0,0,.1);border-radius:10px}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-box{padding:0}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-box .col{line-height:1;margin:0;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-box .col .rm-icon{font-size:13px}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-box .col.pagespeed-desktop{margin-right:10px}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header{margin-bottom:10px}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header h3{display:inline-block;margin-right:2.5rem}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header>span{font-size:12px;font-weight:normal;line-height:1;vertical-align:4px;opacity:.6}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header button{line-height:.5;width:15px;height:15px;margin:0 0 0 5px;vertical-align:2px;background-color:rgba(0,0,0,0);-webkit-text-stroke:0}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header button span{font-size:14px;width:inherit;height:inherit;vertical-align:0}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header .rank-math-tooltip{height:15px}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .rank-math-pagespeed-header .rank-math-tooltip em{vertical-align:0}#rank-math-analytics-stats .rank-math-item#rank-math-analytics-stats-pagespeed .grid{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:.2rem;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-analytics-stats .rank-math-item.index-status .verdict span{font-size:1rem;font-weight:500;vertical-align:top;text-transform:capitalize}#rank-math-analytics-stats .rank-math-item.index-status .verdict i{font-style:normal;position:relative;margin-right:5px;text-align:center}#rank-math-analytics-stats .rank-math-item.index-status .verdict i:before{font-family:"Dashicons";font-size:16px;line-height:20px;display:inline-block;width:20px;content:"ï‘ ";-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;color:#fff;border-radius:50%;background-color:#ff9f43}#rank-math-analytics-stats .rank-math-item.index-status .verdict i:hover:before{-webkit-box-shadow:0 0 0 4px rgba(255,159,67,.25);box-shadow:0 0 0 4px rgba(255,159,67,.25)}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.neutral:before{background:#b5bfc9}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.neutral:hover:before{-webkit-box-shadow:0 0 0 4px rgba(181,191,201,.25);box-shadow:0 0 0 4px rgba(181,191,201,.25)}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.unspecified:before{font-family:Arial,Helvetica,sans-serif;font-size:14px;font-weight:500;content:"?";background:#7f868d}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.unspecified:hover:before{-webkit-box-shadow:0 0 0 4px rgba(127,134,141,.25);box-shadow:0 0 0 4px rgba(127,134,141,.25)}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.pass:before{content:"ï…ž";background:#10ac84}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.pass:hover:before{-webkit-box-shadow:0 0 0 4px rgba(16,172,132,.25);box-shadow:0 0 0 4px rgba(16,172,132,.25)}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.fail:before{content:"ïŒµ";background:#ed5e5e}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.fail:hover:before{-webkit-box-shadow:0 0 0 4px rgba(237,94,94,.25);box-shadow:0 0 0 4px rgba(237,94,94,.25)}#rank-math-analytics-stats .rank-math-item.index-status .verdict i.partial:before{content:"ï…ž"}#rank-math-analytics-stats .rank-math-pagespeed-box .rank-math-pagespeed-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#rank-math-analytics-stats .rank-math-pagespeed-box .rank-math-pagespeed-header span{margin-left:auto}#rank-math-analytics-stats .rank-math-pagespeed-box .col{margin-top:.825rem;-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%}#rank-math-analytics-stats .rank-math-pagespeed-box .col .rm-icon{font-size:1.25rem;margin-right:8px;vertical-align:middle}#rank-math-analytics-stats .rank-math-pagespeed-box .col strong{font-size:1rem;font-weight:500;margin-right:10px;vertical-align:middle}#rank-math-analytics-stats .rank-math-pagespeed-box .col strong.interactive-good{color:#52a652}#rank-math-analytics-stats .rank-math-pagespeed-box .col small{font-size:14px;font-weight:500;line-height:24px;display:inline-block;width:42px;text-align:center;border-radius:5px}#rank-math-analytics-stats .rank-math-pagespeed-box .col small.score-bad{color:#f0776f;background:hsl(3.7209302326,81.1320754717%,95.8235294118%)}.rank-math-analytics-stats-footer{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;font-size:1rem;padding:.75rem 1.5rem;text-align:center;border-top:1px solid rgba(218,223,228,.7);background-color:#fff}.rank-math-analytics-stats-footer>a{font-size:12px;font-weight:600;margin-left:3px;padding:4px 15px;text-decoration:none;text-transform:uppercase;color:#fff;border-radius:4px;background-color:#4e8cde}.rank-math-analytics-stats-footer>a:hover{color:#fff}.rank-math-analytics-stats-footer p{font-size:14px;line-height:1;display:inline-block;margin:0}.rank-math-analytics-stats-footer p a.button{font-size:inherit;line-height:1;display:inline-block;padding:0;color:#4e8cde;background-color:rgba(0,0,0,0)}body.et_fixed_nav #rank-math-analytics-stats-wrapper{z-index:999999}PK     —ŠU]*]±Á Á /  includes/modules/analytics/assets/css/stats.cssnu „[µü¤        /*!
 * Plugin:	Rank Math
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	stats.css
 */:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-analytics .rank-math-keywords-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-keywords-overview .rank-math-list__item-text,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-text,.rank-math-analytics .grid,.woocommerce-table__summary,.woocommerce-pagination>div,.woocommerce-pagination,.woocommerce-table table .link-listing,.woocommerce-table .components-text .add-keyword-button,.woocommerce-table .components-card__header-item,.woocommerce-table .components-card__header,.rank-math-box-grid,.rank-math-analyzer-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}html{font-size:14px}.rank-math-wrap.analytics{font-size:1rem}#rank-math-analytics h2,#rank-math-analytics h3,#rank-math-analytics h4{color:#5a5d70}.rank-math-analytics input,.rank-math-analytics textarea,.rank-math-analytics select{-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;border-color:#b5bfc9}.rank-math-analytics input:hover,.rank-math-analytics input:focus,.rank-math-analytics input:active,.rank-math-analytics textarea:hover,.rank-math-analytics textarea:focus,.rank-math-analytics textarea:active,.rank-math-analytics select:hover,.rank-math-analytics select:focus,.rank-math-analytics select:active{border-color:#069de3;background-color:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-analytics .text-large{font-size:1.5rem;font-weight:700;margin-right:5px;color:#242628}.rank-math-analytics .rank-math-item-difference{color:#7f868d;font-size:1rem}.rank-math-analytics .up,.rank-math-analytics .down{font-weight:500}.rank-math-analytics .up:before,.rank-math-analytics .down:before{font-family:"dashicons";font-size:18px;font-weight:900;margin-right:2px;vertical-align:-3px}.rank-math-analytics .up{color:#10ac84}.rank-math-analytics .up:before{content:"ï…‚"}.rank-math-analytics .down{color:#ed5e5e}.rank-math-analytics .down:before{content:"ï…€"}.rank-math-analytics .rank-math-tooltip{color:#b5bfc9}.rank-math-analytics .rank-math-tooltip:hover{color:#069de3}.rank-math-analytics button:not(disabled){cursor:pointer}.rank-math-analytics button.is-link,.rank-math-analytics button.woocommerce-ellipsis-menu__toggle{font-size:.825rem;font-weight:500;line-height:1;float:right;min-height:auto;padding:0;text-transform:uppercase;color:#4e8cde;border:0;border-bottom:1px dotted #fff;background:rgba(0,0,0,0)}.rank-math-analytics button.is-link:hover,.rank-math-analytics button.is-link:focus,.rank-math-analytics button.is-link:active,.rank-math-analytics button.woocommerce-ellipsis-menu__toggle:hover,.rank-math-analytics button.woocommerce-ellipsis-menu__toggle:focus,.rank-math-analytics button.woocommerce-ellipsis-menu__toggle:active{color:#069de3;border-bottom-color:#069de3;background:rgba(0,0,0,0)}.rank-math-analytics .rank-math-analytics-notice .rank-math-cta-body{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.rank-math-analytics .rank-math-analytics-notice .rank-math-cta-body a{margin-left:5px;margin-right:5px}.rank-math-analyzer-header{margin-bottom:1rem;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-analyzer-header h3.tab-title{font-weight:500;margin:0 1rem 1rem 0;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}@media screen and (min-width: 48rem){.rank-math-analyzer-header h3.tab-title{-webkit-box-flex:1;-ms-flex:1;flex:1}}.rank-math-analyzer-header .rank-math-suggestions-wrapper{position:relative}@media screen and (min-width: 48rem){.rank-math-analyzer-header .rank-math-suggestions-wrapper{margin-left:auto}}.rank-math-analyzer-header .rank-math-suggestions{position:absolute;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:10px;border:1px solid #b5bfc9;border-radius:4px;background:#fff}.rank-math-analyzer-header .rank-math-suggestions li{padding:5px 0;cursor:pointer}.rank-math-analyzer-header .rank-math-suggestions li:hover .title{color:#069de3}.rank-math-analyzer-header .rank-math-suggestions li .title{-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;color:#5a5d70}.rank-math-analyzer-header .rank-math-suggestions li .url{font-size:12px;margin-top:3px;opacity:.7}.rank-math-analyzer-header .analytics-search{width:250px}.rank-math-analyzer-header .analytics-search:after{font-family:"Rank-Math";font-size:13px;content:"îª«";color:hsl(210,15.625%,64.9019607843%);position:absolute;top:9px;right:10px}.rank-math-analyzer-header .analytics-search input{width:100%;height:34px;background:#fdfdfd}.rank-math-analyzer-header .analytics-search input::-webkit-input-placeholder{color:hsl(210,15.625%,64.9019607843%)}.rank-math-analyzer-header .analytics-search input::-moz-placeholder{color:hsl(210,15.625%,64.9019607843%)}.rank-math-analyzer-header .analytics-search input:-ms-input-placeholder{color:hsl(210,15.625%,64.9019607843%)}.rank-math-analyzer-header .analytics-search input::-ms-input-placeholder{color:hsl(210,15.625%,64.9019607843%)}.rank-math-analyzer-header .analytics-search input::placeholder{color:hsl(210,15.625%,64.9019607843%)}.rank-math-analyzer-header .analytics-dropdown{width:auto;margin-left:.5rem;gap:initial}.rank-math-analyzer-header .analytics-dropdown label{display:none !important}@media screen and (min-width: 48rem){.rank-math-analyzer-header .analytics-dropdown{margin-left:1rem}.rank-math-analyzer-header .analytics-dropdown label{display:inline;margin-right:5px}}.rank-math-analyzer-header .analytics-dropdown select.components-select-control__input{height:34px;color:#7f868d;background-color:#fdfdfd;border:1px solid #b5bfc9}.rank-math-analyzer-header .analytics-dropdown select.components-select-control__input+span+.components-input-control__backdrop{display:none}.rank-math-box-grid{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-box-grid>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}@media screen and (min-width: 48rem){.rank-math-box-grid>*{-webkit-box-flex:0;-ms-flex:0 0 48%;flex:0 0 48%}.rank-math-box-grid.has-3-col>*{-webkit-box-flex:0;-ms-flex:0 0 32%;flex:0 0 32%}.rank-math-box-grid.has-4-col>*{-webkit-box-flex:0;-ms-flex:0 0 23%;flex:0 0 23%}.rank-math-box-grid.has-5-col>*{-webkit-box-flex:0;-ms-flex:0 0 18%;flex:0 0 18%}}.rank-math-wrap p.rank-math-footnote{font-style:italic;position:relative;z-index:100;margin-bottom:0;opacity:.6}@media screen and (min-width: 62rem){html{font-size:16px}}@media screen and (min-width: 48rem){html{font-size:15px}}.rank-math-analytics{width:1200px;max-width:100%}.rank-math-tabs .rank-math-tab{font-size:15px;font-weight:500;line-height:40px;position:relative;display:inline-block;margin-left:0;padding:0 15px;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;text-decoration:none;color:#5b646c;border:1px solid #b5bfc9;border-right:0;border-bottom:0;background:#f0f2f4}.rank-math-tabs .rank-math-tab:hover,.rank-math-tabs .rank-math-tab:focus,.rank-math-tabs .rank-math-tab.is-active{color:#1a1e22;outline:none;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-tab-nav{display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:auto;white-space:nowrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row;flex-flow:row}@media screen and (min-width: 64rem){.rank-math-tabs .rank-math-tab-nav{overflow-x:visible}}.rank-math-tabs .rank-math-tab-nav .rank-math-tab:not(.rank-math-options-panel-content){line-height:44px}.rank-math-tabs .rank-math-tab.is-active:after{position:absolute;z-index:1;bottom:-1px;left:0;width:100%;height:1px;content:"";background:#fafafb}.rank-math-tabs .rank-math-tab:first-child{border-radius:4px 0 0 0}.rank-math-tabs .rank-math-tab:last-of-type{border-right:1px solid #b5bfc9;border-radius:0 4px 0 0}.rank-math-tabs .rank-math-tab .rm-icon{font-size:1rem;margin-right:7px;vertical-align:-2px}.rank-math-tabs .rank-math-tab-content{position:relative;margin-bottom:.5rem;padding:30px 0;color:#7f868d;border-radius:0 6px 6px 6px;background:#f8f9fa}.rank-math-tabs .rank-math-tab-content:before{position:absolute;top:0;left:-20px;overflow:hidden;width:120vw;height:100%;padding-bottom:50px;content:"";border-top:1px solid #b5bfc9;border-bottom:1px solid #b5bfc9;background:#f8f9fa}.rank-math-tabs .rank-math-tab-content>div{position:relative}.rank-math-tabs .rank-math-tab.is-new:before{font-size:9px;font-weight:600;line-height:1;position:absolute;top:-23px;right:7px;padding:3px 4px;content:"New!";-webkit-animation:bounce .8s infinite alternate;animation:bounce .8s infinite alternate;color:#fff;border-radius:2px 2px 0 2px;background:#ed5e5e}.rank-math-tabs .rank-math-tab.is-new:after{position:absolute;top:-8px;right:7px;left:auto;width:0;height:0;content:"";-webkit-animation:bounce .8s infinite alternate;animation:bounce .8s infinite alternate;border:0 solid rgba(0,0,0,0);border-top:4px solid #ed5e5e;border-right-width:0;border-left-width:11px}.rank-math-tabs .rank-math-updated{font-size:13px;display:inline-block;margin-bottom:10px;margin-left:10px;opacity:.5;text-align:right}@media screen and (min-width: 62rem){.rank-math-tabs .rank-math-updated{margin-left:auto}}body.rtl .rank-math-tabs .rank-math-updated{margin-right:10px;margin-left:0}@media screen and (min-width: 62rem){body.rtl .rank-math-tabs .rank-math-updated{margin-right:auto}}.keyword-manager .woocommerce-ellipsis-menu{margin-left:0}.rank-math-keyword-table .delete{opacity:0}.rank-math-page .components-popover{z-index:999}.rank-math-page .components-popover__content{z-index:200;width:200px;padding:1rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}.rtl .rank-math-page .components-popover__content{right:0;left:auto}.woocommerce-ellipsis-menu__item{padding:5px 0;cursor:pointer}.woocommerce-ellipsis-menu__item .components-form-toggle{pointer-events:none}.woocommerce-ellipsis-menu__title{font-weight:500;margin-bottom:5px;color:#242628}.woocommerce-table{margin-bottom:1rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}.woocommerce-table__header{white-space:nowrap}.woocommerce-table__header .is-placeholder,.woocommerce-table__item .is-placeholder{display:inline-block;width:80%;max-width:120px;height:16px;-webkit-animation:loading-fade 1.6s ease-in-out infinite;animation:loading-fade 1.6s ease-in-out infinite;color:rgba(0,0,0,0);background-color:#eee}.woocommerce-table__header .is-placeholder::after,.woocommerce-table__item .is-placeholder::after{content:"Â "}@media screen and (prefers-reduced-motion: reduce){.woocommerce-table__header .is-placeholder,.woocommerce-table__item .is-placeholder{-webkit-animation:none;animation:none}}.woocommerce-table__header.is-numeric .is-placeholder,.woocommerce-table__item.is-numeric .is-placeholder{max-width:40px}.woocommerce-table__table{overflow-x:auto}.woocommerce-table__table::after,.woocommerce-table__table::before{position:absolute;z-index:1;top:0;width:60px;height:100%;content:"";-webkit-transition:opacity .3s;transition:opacity .3s;pointer-events:none;opacity:0}.woocommerce-table__table::after{right:0;background:-webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(rgba(255, 255, 255, 0.65)));background:linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.65))}.woocommerce-table__table::before{left:0;background:-webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0.65)), to(rgba(255, 255, 255, 0)));background:linear-gradient(90deg, rgba(255, 255, 255, 0.65), rgba(255, 255, 255, 0))}.woocommerce-table__table.is-scrollable-right::after,.woocommerce-table__table.is-scrollable-left::before{opacity:1}.woocommerce-table__actions{margin-right:.5rem}.woocommerce-table__actions .components-base-control__field{margin-bottom:0}.woocommerce-table__actions .components-base-control .components-select-control .components-input-control__backdrop{border-color:#b5bfc9;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}.woocommerce-table.components-card{color:#7f868d;border-radius:6px;-webkit-box-shadow:none;box-shadow:none}.woocommerce-table__item .is-placeholder{display:inline-block;width:80%;max-width:120px;height:16px;-webkit-animation:loading-fade 1.6s ease-in-out infinite;animation:loading-fade 1.6s ease-in-out infinite;color:rgba(0,0,0,0);background-color:#eee}.woocommerce-table__item .is-placeholder::after{content:"Â "}@media screen and (prefers-reduced-motion: reduce){.woocommerce-table__item .is-placeholder{-webkit-animation:none;animation:none}}.woocommerce-table__item.is-numeric .is-placeholder{max-width:40px}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle{display:-webkit-box;display:-ms-flexbox;display:flex;float:none;height:30px;height:30px;padding:0 10px;padding:0 8px;border:1px solid #b5bfc9;border-radius:3px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle:hover,.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle:focus{fill:#069de3}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle span{margin-right:0 !important}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle svg{vertical-align:top}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle svg:nth-child(2){display:none}.woocommerce-table .components-button.woocommerce-ellipsis-menu__toggle:hover{border-color:#069de3}.woocommerce-table .components-dropdown{position:relative}.woocommerce-table .components-dropdown svg{fill:#6b7278}.woocommerce-table .components-card__footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:0}.woocommerce-table .components-card__body{position:relative}.woocommerce-table .components-card__header{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-right:1rem;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.woocommerce-table .components-card__header .button{border-color:#b5bfc9}.woocommerce-table .components-card__header .components-dropdown{position:relative}.woocommerce-table .components-card__header .components-dropdown .components-popover{z-index:999;position:relative !important;top:0 !important;right:auto !important;left:auto !important}.woocommerce-table .components-card__header .components-dropdown .components-popover__content{position:absolute;z-index:200;top:5px;right:auto;left:0;width:200px;padding:1rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}.rtl .woocommerce-table .components-card__header .components-dropdown .components-popover__content{right:0;left:auto}.woocommerce-table .components-card__header .woocommerce-ellipsis-menu .components-dropdown .components-popover__content{right:0;left:auto}.rtl .woocommerce-table .components-card__header .woocommerce-ellipsis-menu .components-dropdown .components-popover__content{right:auto;left:0}.woocommerce-table .components-card__header .components-dropdown .components-popover__content .woocommerce-ellipsis-menu__item{padding:5px 0}.woocommerce-table .components-card__header .components-dropdown .components-popover__content .woocommerce-ellipsis-menu__item .is-disabled input{border-color:rgba(220,220,222,.75);background:#f8f9fa}.woocommerce-table .components-card__header .components-dropdown .components-popover__content .woocommerce-ellipsis-menu__item .is-disabled input:hover{-webkit-box-shadow:none;box-shadow:none}.woocommerce-table .components-card__header .components-dropdown .components-popover__content .woocommerce-ellipsis-menu__item input{margin-right:7px}.woocommerce-table .components-card__header .components-dropdown .components-popover__content .woocommerce-ellipsis-menu__title{font-weight:500;margin-bottom:5px;color:#242628}.woocommerce-table .components-card__header-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.woocommerce-table .components .woocommerce-list{margin:0}.woocommerce-table .components-dropdown li{font-size:.9375rem;font-weight:normal;padding:5px 0;cursor:pointer}.woocommerce-table .components-dropdown li:hover{color:#069de3}.woocommerce-table .components .button{margin-left:5px;border-color:#b5bfc9}.woocommerce-table .components .button.button-auto-add-focus-keyword{margin-right:-10px;margin-left:0}.woocommerce-table .components-popover__content{position:absolute;z-index:200;top:35px;right:0;width:200px;padding:1rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}.woocommerce-table .components-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1}.woocommerce-table .components-text .add-keyword-button{font-weight:normal;margin:-10px auto -10px 10px}.woocommerce-table .components-text .add-keyword-button .button{line-height:28px;margin-left:5px}.woocommerce-table .components-text .add-keyword-button .button.adding{color:#52a652;border-color:#52a652}.woocommerce-table .components-text .add-keyword-button .components-base-control__field{margin-bottom:0}.woocommerce-table .components-text button:not(.is-link):not(.add-keyword):not(.cancel-keyword):not(.add-focus-keyword):not(.button-auto-add-focus-keyword){font-size:1.125rem;font-weight:600;line-height:1;min-height:100%;padding:0;color:#5a5d70;border:0;background:rgba(0,0,0,0)}.woocommerce-table .components-text button:not(.is-link):not(.add-keyword):not(.cancel-keyword):not(.add-focus-keyword):not(.button-auto-add-focus-keyword):after{font-family:"Dashicons";margin-left:5px;content:"ï�‡";vertical-align:-4px}.woocommerce-table .components-text .components-popover__content{right:auto;left:0}.woocommerce-table h2{font-size:1.125rem;margin:0;padding:10px 0;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.woocommerce-table table{width:1198px;border-collapse:collapse;color:#7f868d;border-bottom:1px solid #dadfe4}.woocommerce-table table .text-large{font-size:inherit;font-weight:normal}.woocommerce-table table .rank-math-item-difference{font-size:13px}.woocommerce-table table h4{font-size:1rem;font-weight:500;width:300px;margin:0}.woocommerce-table table h4 a{text-decoration:none;color:inherit}.woocommerce-table table h4:hover span{border-bottom:1px dotted}.woocommerce-table table small{font-size:.9375rem;font-weight:normal;display:block;margin-top:5px;color:#7f868d}.woocommerce-table table .schema-item{font-size:14px;margin-bottom:8px}.woocommerce-table table .schema-item:last-child{margin-bottom:0}.woocommerce-table table .schema-item.none i{display:none}.woocommerce-table table .schema-item i{font-size:18px;display:inline-block;margin-right:3px;vertical-align:-3px}.woocommerce-table table .seo-score{font-weight:500;line-height:26px;position:relative;width:64px;text-align:center;border:1px solid #b5bfc9;border-radius:3px}.woocommerce-table table .seo-score span{position:absolute;top:0;left:0;height:100%;opacity:.2}.woocommerce-table table .seo-score div{position:relative;z-index:1}.woocommerce-table table .seo-score.good-fk{color:#10ac84;border-color:#10ac84}.woocommerce-table table .seo-score.good-fk span{background:rgba(16,172,132,.8)}.woocommerce-table table .seo-score.ok-fk{color:#ff9f43;border-color:#ff9f43}.woocommerce-table table .seo-score.ok-fk span{background:rgba(255,159,67,.8)}.woocommerce-table table .seo-score.bad-fk{color:#ed5e5e;border-color:#ed5e5e}.woocommerce-table table .seo-score.bad-fk span{background:rgba(237,94,94,.8)}.woocommerce-table table .seo-score.no-fk{color:#7f868d;border-color:#7f868d}.woocommerce-table table .link-listing{max-width:110px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.woocommerce-table table .link-listing .link-item{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%}.woocommerce-table table .link-listing .link-item:nth-child(3) .dashicon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.woocommerce-table table .link-listing svg,.woocommerce-table table .link-listing .dashicon{font-size:18px;margin-right:3px;vertical-align:-4px;fill:#7f868d;stroke:#fff;-webkit-text-stroke:.5px #fff}.woocommerce-table table .rank-math-col-links{min-width:140px}.woocommerce-table table button span{font-size:12px;line-height:18px;display:inline-block;width:22px;margin-left:5px;text-align:center;border-radius:3px;background:#dadfe4}.woocommerce-table table tr{-webkit-transition:.25s background ease-in-out;transition:.25s background ease-in-out;border-bottom:1px solid #dadfe4}.woocommerce-table table tr:hover{background:#fafafb}.woocommerce-table table tr:first-child{border-bottom:1px solid #dadfe4;background:#fafafb}.woocommerce-table table tr:first-child th{font-weight:500;padding:14px}.woocommerce-table table tr:last-child{border-bottom:0}.woocommerce-table table tr:last-child th:first-child{border-radius:0 0 0 6px}.woocommerce-table table tr th{font-weight:normal;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:100px;padding:5px .625rem;-webkit-transition:.25s box-shadow ease-in-out;transition:.25s box-shadow ease-in-out;text-align:left;color:#242628;border-right:1px solid #dadfe4;background:#fafafb}.woocommerce-table table tr th:first-child{min-width:60px;padding:5px 0;text-align:center}.woocommerce-table table tr th:first-child .add-keyword{font-size:10px;line-height:20px;display:block;width:22px;height:100%;min-height:100%;margin:7px auto;margin-top:5px;padding:0;text-align:center;color:#7f868d;border-color:#7f868d;border-radius:25px}.woocommerce-table table tr th:first-child .add-keyword i{font-weight:bold;vertical-align:-1px}.woocommerce-table table tr th:first-child .add-keyword:hover,.woocommerce-table table tr th:first-child .add-keyword:focus,.woocommerce-table table tr th:first-child .add-keyword.added{color:#52a652 !important;border-color:#52a652 !important;background:hsl(120,42.5531914894%,91.137254902%) !important;-webkit-box-shadow:0 0 0 5px hsl(120,42.5531914894%,91.137254902%) !important;box-shadow:0 0 0 5px hsl(120,42.5531914894%,91.137254902%) !important}.woocommerce-table table tr th:first-child .add-keyword.added{-webkit-box-shadow:none !important;box-shadow:none !important}.woocommerce-table table tr th:first-child .add-keyword.delete{color:#f0776f !important;border-color:#f0776f !important;background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important;-webkit-box-shadow:0 0 0 5px hsl(3.9130434783,77.9661016949%,94.862745098%) !important;box-shadow:0 0 0 5px hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.woocommerce-table table tr th:first-child .add-keyword .rank-math-tooltip span{width:100px}.woocommerce-table table tr th:first-child i.post-type{display:block;margin-top:8px;opacity:.5}.woocommerce-table table tr th:last-child{border-right:0}.woocommerce-table table tr td{-webkit-box-sizing:border-box;box-sizing:border-box;padding:1rem .825rem}.woocommerce-table table tr td .rank-math-graph{position:relative;width:160px;height:40px;background:rgba(0,0,0,0)}.woocommerce-table table tr td .rank-math-graph .recharts-layer{max-height:50px}.woocommerce-table .rank-math-keyword-table tr:hover .delete{opacity:1}.woocommerce-table .rank-math-keyword-table tr a:hover{border-bottom:1px dotted}.woocommerce-pagination{position:relative;z-index:1;padding:2rem 1rem 2rem;background:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.woocommerce-pagination>div{margin-left:1rem}.woocommerce-pagination>div:first-child{margin-left:0}.woocommerce-pagination>div input,.woocommerce-pagination>div select,.woocommerce-pagination>div>.woocommerce-pagination__page-arrows-buttons{margin-left:.5rem}.woocommerce-pagination>div .woocommerce-pagination__page-arrows-label{margin-top:8px}.woocommerce-pagination>div .woocommerce-pagination__page-arrows-buttons{border:1px solid #b5bfc9;border-radius:4px;background:#f8f9fa}.woocommerce-pagination>div button{line-height:34px;width:34px;padding:0 4px;border:0;border-right:1px solid #b5bfc9;background:rgba(0,0,0,0);fill:#7f868d}.woocommerce-pagination>div button:disabled{opacity:.3}.woocommerce-pagination>div button:hover{background:none;fill:#242628}.woocommerce-pagination>div button svg{vertical-align:-5px}.woocommerce-pagination>div button:last-child{border-right:0}.woocommerce-pagination>div button span{display:none}.woocommerce-pagination+.woocommerce-table__summary{margin:0;padding-top:0}.woocommerce-pagination__per-page-picker{display:none !important}.woocommerce-table__summary{position:relative;z-index:1;margin:0;padding:2rem 1rem;padding:2rem 1rem;border-radius:0 0 6px 6px;background:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.woocommerce-table__summary li{display:inline-block;margin:0 1rem .25rem}.woocommerce-table__summary li span:first-child{font-weight:500;margin-right:4px;color:#242628}body.rtl .woocommerce-pagination__page-picker{margin-right:1rem;margin-left:0}body.rtl .woocommerce-pagination__page-picker-input{margin-right:.5rem;margin-left:0}body.rtl .woocommerce-pagination__page-arrows-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;margin-right:.5rem;margin-left:0}.rank-math-graph{background:#fff}.rank-math-graph .recharts-surface{overflow:visible}.rank-math-graph.main-graph{overflow:visible;-webkit-box-sizing:border-box;box-sizing:border-box;height:340px;margin-top:-1px;margin-bottom:2rem;padding:1.5rem 1rem 2rem 1rem;border:1px solid #dadfe4}.rank-math-graph.main-graph.loader{padding:1.5rem}.recharts-tooltip-wrapper{z-index:999;left:0px}.rank-math-graph-tooltip{z-index:1;padding:10px;border:1px solid #dadfe4;border-radius:5px;background-color:#fff}.rank-math-graph-tooltip.color-good{color:#fff;border-color:#10ac84;background:#10ac84}.rank-math-graph-tooltip.color-fair{color:#fff;border-color:#ff9f43;background:#ff9f43}.rank-math-graph-tooltip.color-poor{color:#fff;border-color:#ed5e5e;background:#ed5e5e}.rank-math-graph-tooltip p{font-weight:600;margin-bottom:5px !important;padding-bottom:5px;text-align:center;color:#242628;border-bottom:1px solid #dadfe4}.rank-math-graph-tooltip p:empty{display:none}.rank-math-graph-tooltip .recharts-tooltip-item{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;padding-bottom:7px !important;border-bottom:1px solid #f2f2f2}.rank-math-graph-tooltip .recharts-tooltip-item:before{margin-right:5px;content:"â—�";color:inherit}.rank-math-graph-tooltip .recharts-tooltip-item:last-child{padding-bottom:0 !important;border-bottom:0 !important}.rank-math-graph-tooltip .recharts-tooltip-item-name{text-transform:capitalize;color:#7f868d}.rank-math-graph-tooltip .recharts-tooltip-item-name:text(ctr){text-transform:uppercase}.rank-math-graph-tooltip .recharts-tooltip-item-separator{margin-right:10px;color:#7f868d}.rank-math-graph-tooltip .recharts-tooltip-item-value{font-weight:500;margin-left:auto;color:#7f868d}body.rtl .rank-math-graph-tooltip .recharts-tooltip-item:before{margin-left:5px;margin-right:0}body.rtl .rank-math-graph-tooltip .recharts-tooltip-item-separator{margin-right:0;margin-left:10px}body.rtl .rank-math-graph-tooltip .recharts-tooltip-item-value{margin-right:auto;margin-left:0}.rank-math-graph-filter{z-index:1;display:grid;overflow-x:auto;margin-bottom:1.5rem;border-width:1px 0 0 1px;border-style:solid;border-color:#dadfe4;grid-template-columns:repeat(4, 1fr)}@media screen and (min-width: 64rem){.rank-math-graph-filter{overflow-x:visible}}.rank-math-graph-filter.has-3-col{grid-template-columns:repeat(3, 1fr)}.rank-math-graph-filter.rank-math-stat-filters{margin-bottom:0;white-space:nowrap}.rank-math-graph-filter.rank-math-stat-filters+.graph{height:300px;margin-bottom:1.5rem;border:1px solid #dadfe4;border-top:0;background:#eee;-webkit-box-shadow:inset 0 0 0 10px #fff;box-shadow:inset 0 0 0 10px #fff}.rank-math-graph-filter button.components-button{position:relative;display:block;min-width:200px;height:100%;margin:0;padding:1.125rem;text-align:left;border-width:0 1px 1px 0;border-style:solid;border-color:#dadfe4;background:#fff}.rank-math-graph-filter button.components-button:after{position:absolute;right:-1px;bottom:-1px;left:-1px;height:5px;content:"";-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;background:rgba(0,0,0,0)}.rank-math-graph-filter button.components-button:hover,.rank-math-graph-filter button.components-button.is-active{border-color:#dadfe4;background:rgba(181,191,201,.05);-webkit-box-shadow:none;box-shadow:none}.rank-math-graph-filter button.components-button:hover:after,.rank-math-graph-filter button.components-button.is-active:after{background:#b5bfc9}.rank-math-graph-filter button.components-button:hover{background:#fff}.rank-math-graph-filter button.components-button:focus{border-color:#dadfe4;outline:0;background:#fff;-webkit-box-shadow:inset 0 0 0 1px #7f868d;box-shadow:inset 0 0 0 1px #7f868d}.rank-math-graph-filter button.components-button.score-filter-good.is-active,.rank-math-graph-filter button.components-button.stat-filter-good.is-active{background:rgba(16,172,132,.05)}.rank-math-graph-filter button.components-button.score-filter-good.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-good.is-active:after{background:#10ac84}.rank-math-graph-filter button.components-button.score-filter-ok.is-active,.rank-math-graph-filter button.components-button.stat-filter-ok.is-active{background:rgba(255,159,67,.05)}.rank-math-graph-filter button.components-button.score-filter-ok.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-ok.is-active:after{background:#ff9f43}.rank-math-graph-filter button.components-button.score-filter-bad.is-active,.rank-math-graph-filter button.components-button.stat-filter-bad.is-active{background:rgba(237,94,94,.05)}.rank-math-graph-filter button.components-button.score-filter-bad.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-bad.is-active:after{background:#ed5e5e}.rank-math-graph-filter button.components-button.score-filter-top3.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-top3.is-active:after{background:#3e70b2}.rank-math-graph-filter button.components-button.score-filter-top10.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-top10.is-active:after{background:#4e8cde}.rank-math-graph-filter button.components-button.score-filter-top50.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-top50.is-active:after{background:#71a3e5}.rank-math-graph-filter button.components-button.score-filter-top100.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-top100.is-active:after{background:#83afe8}.rank-math-graph-filter button.components-button.score-filter-color-1.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-1.is-active{background:rgba(16,172,132,.05)}.rank-math-graph-filter button.components-button.score-filter-color-1.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-1.is-active:after{background:#10ac84}.rank-math-graph-filter button.components-button.score-filter-color-2.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-2.is-active{background:rgba(78,140,222,.05)}.rank-math-graph-filter button.components-button.score-filter-color-2.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-2.is-active:after{background:#4e8cde}.rank-math-graph-filter button.components-button.score-filter-color-3.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-3.is-active{background:rgba(237,94,94,.05)}.rank-math-graph-filter button.components-button.score-filter-color-3.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-3.is-active:after{background:#ed5e5e}.rank-math-graph-filter button.components-button.score-filter-color-4.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-4.is-active{background:rgba(255,159,67,.05)}.rank-math-graph-filter button.components-button.score-filter-color-4.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-4.is-active:after{background:#ff9f43}.rank-math-graph-filter button.components-button.score-filter-color-5.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-5.is-active{background:rgba(243,104,224,.05)}.rank-math-graph-filter button.components-button.score-filter-color-5.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-5.is-active:after{background:#f368e0}.rank-math-graph-filter button.components-button.score-filter-color-6.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-6.is-active{background:rgba(11,189,227,.05)}.rank-math-graph-filter button.components-button.score-filter-color-6.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-6.is-active:after{background:#0bbde3}.rank-math-graph-filter button.components-button.score-filter-color-7.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-7.is-active{background:rgba(0,163,164,.05)}.rank-math-graph-filter button.components-button.score-filter-color-7.is-active:after,.rank-math-graph-filter button.components-button.stat-filter-color-7.is-active:after{background:#00a3a4}.rank-math-graph-filter button.components-button.score-filter-color-8.is-active,.rank-math-graph-filter button.components-button.stat-filter-color-8.is-active{background:rgba(33,47,62,.05)}.rank-math-graph-filter button.components-button.score-filter-color-8.is-active:before,.rank-math-graph-filter button.components-button.stat-filter-color-8.is-active:before{background:#212f3e}.rank-math-graph-filter button.components-button h4{font-size:1.3125rem;font-weight:400;margin:0}.rank-math-graph-filter button.components-button em:before{margin-left:3px;vertical-align:-3px}.rank-math-graph-filter button.components-button .text-large{font-size:2.75rem}.rank-math-analytics .rank-math-position-overview .rank-math-position h4:before,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-title:before{position:relative;display:inline-block;width:10px;height:10px;margin-right:10px}.rtl .rank-math-analytics .rank-math-position-overview .rank-math-position h4:before,.rank-math-analytics .rank-math-position-overview .rank-math-position .rtl h4:before,.rtl .rank-math-analytics .rank-math-score-overview .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rtl .woocommerce-list__item-title:before,.rtl .rank-math-analytics .rank-math-score-overview .rank-math-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rtl .rank-math-list__item-title:before{margin-right:auto;margin-left:10px}.rank-math-analytics .rank-math-position-overview .rank-math-position h4:before,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-title:before{content:"";border-radius:2px;background:#dadfe4}.rank-math-analytics .grid{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-analytics .grid .rank-math-box{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:#dadfe4;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}@media screen and (min-width: 48rem){.rank-math-analytics .grid .rank-math-box{-webkit-box-flex:0;-ms-flex:0 0 49.5%;flex:0 0 49.5%}}.rank-math-analytics .rank-math-box h3{font-size:1.3125rem;font-weight:500;margin:0}.rank-math-analytics .rank-math-box h3 .rank-math-tooltip em:before{margin-left:3px}.rtl .rank-math-analytics .rank-math-box h3 .rank-math-tooltip em:before{margin-left:auto;margin-right:3px}.rank-math-analytics .rank-math-box h3 .rank-math-tooltip em:before{vertical-align:-3px}.rank-math-analytics .rank-math-score-overview h3{margin:0 0 1rem;text-align:center}.rank-math-analytics .rank-math-score-overview .rank-math-seo-score-graph{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:213px;height:213px;margin:-1rem 1rem 0 0;border:1rem solid #fff;border-radius:50%;-webkit-box-flex:0;-ms-flex:0 0 213px;flex:0 0 213px}.rank-math-analytics .rank-math-score-overview .rank-math-seo-score-graph .recharts-label{font-size:3rem;font-weight:700;opacity:.7}@media screen and (min-width: 48rem){.rank-math-analytics .rank-math-score-overview .rank-math-seo-score-graph{margin:-1rem 1rem 0 0}}.rank-math-analytics .rank-math-score-overview .woocommerce-list,.rank-math-analytics .rank-math-score-overview .rank-math-list{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item,.rank-math-analytics .rank-math-score-overview .rank-math-list__item{margin-bottom:0;padding:8px 3px;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;border-bottom:1px solid hsl(210,15.625%,92.4509803922%)}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-text{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-good .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-good .rank-math-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-good .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-good .rank-math-list__item-title:before{background:#10ac84}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-good .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-good .rank-math-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-good .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-good .rank-math-list__item-content{color:#10ac84}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-ok .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-ok .rank-math-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-ok .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-ok .rank-math-list__item-title:before{background:#ff9f43}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-ok .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-ok .rank-math-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-ok .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-ok .rank-math-list__item-content{color:#ff9f43}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-bad .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-bad .rank-math-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-bad .woocommerce-list__item-title:before,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-bad .rank-math-list__item-title:before{background:#ed5e5e}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-bad .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item.seo-score-bad .rank-math-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-bad .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item.seo-score-bad .rank-math-list__item-content{color:#ed5e5e}.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-content,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-content{font-weight:500;color:hsl(210,15.625%,64.9019607843%)}.rank-math-analytics .rank-math-score-overview p{font-size:.875rem;font-weight:300;text-align:center;color:#92949f}.rank-math-analytics .rank-math-score-overview button.is-link{margin-top:11px}.rank-math-analytics .rank-math-analytics-overview .rank-math-analytic-item{margin-bottom:1.5rem}.rank-math-analytics .rank-math-analytics-overview .rank-math-item-numbers{margin:10px 0}.rank-math-analytics .rank-math-analytics-overview .rank-math-item-numbers span{vertical-align:1px}.rank-math-analytics .rank-math-analytics-overview .rank-math-analytic-graph{position:relative;height:50px;margin-top:1rem}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs{border-bottom:1px solid #dadfe4;border-radius:6px 6px 0 0;background:#f9f9f9}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs button{line-height:2.625rem;border:0;border-right:1px solid #dadfe4;background:rgba(0,0,0,0)}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs button.is-active{background:#fff}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs button.is-active:after{background:#fff}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs button:last-child{border-radius:0}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tabs button:focus{background:#fff;-webkit-box-shadow:none;box-shadow:none}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content{overflow:scroll;max-height:310px;margin-bottom:0;padding:0 0 .9375rem;background:rgba(0,0,0,0)}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content:before{display:none}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content .loader{padding:0 2rem 0 1rem}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content h4{margin:0;padding:.9375rem;border-bottom:1px solid #dadfe4}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content ul{margin:0}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content li{line-height:1.3;margin-bottom:0;padding:.825rem .9375rem;border-bottom:1px solid #dadfe4}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content .col{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}@media screen and (min-width: 48rem){.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content .col{max-width:50%;-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%}}.rank-math-analytics .rank-math-keywords-overview .rank-math-tabs .components-tab-panel__tab-content .text-large{font-size:inherit;font-weight:500}.rank-math-analytics .rank-math-keywords-overview .rank-math-tooltip{position:absolute;z-index:999;top:10px;right:10px}.rank-math-analytics .rank-math-keywords-overview-tooltip .analytics-dashicon{position:absolute;z-index:999;top:10px;right:10px}.rank-math-analytics .rank-math-keywords-overview button:not(.rank-math-tab){margin-right:1rem;margin-bottom:1rem}.rank-math-analytics .rank-math-keywords-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-keywords-overview .rank-math-list__item-text{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-analytics .rank-math-keywords-overview .woocommerce-list__item-title,.rank-math-analytics .rank-math-keywords-overview .rank-math-list__item-title{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:300px;margin-right:10px;white-space:nowrap;text-overflow:ellipsis;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-analytics .rank-math-position-overview h3{margin-bottom:1.5rem}.rank-math-analytics .rank-math-position-overview h4{font-weight:normal;margin:0 0 1rem;color:#92949f}.rank-math-analytics .rank-math-position-overview .rank-math-position{margin-bottom:1rem}.rank-math-analytics .rank-math-position-overview .rank-math-position.position-top3 h4:before{background:#3e70b2}.rank-math-analytics .rank-math-position-overview .rank-math-position.position-top10 h4:before{background:#4e8cde}.rank-math-analytics .rank-math-position-overview .rank-math-position.position-top50 h4:before{background:#71a3e5}.rank-math-analytics .rank-math-position-overview .rank-math-position-graph{height:160px;background:#eee}.rank-math-analytics .rank-math-position-overview .rank-math-avg-ctr{display:inline-block;margin:1rem 0 0}.rank-math-analytics .rank-math-position-overview .rank-math-avg-ctr h4{display:inline-block;margin:0 5px 0 0}.rank-math-analytics .rank-math-position-overview .rank-math-avg-ctr .text-large{font-size:inherit;font-weight:500}.rank-math-analytics .rank-math-position-overview .rank-math-avg-ctr .rank-math-item-numbers{display:inline-block}.rank-math-analytics .rank-math-position-overview button.is-link{line-height:21px;margin:1rem 0 0}.rank-math-score-bar{overflow:hidden;height:26px;margin-bottom:1.5em;background:#dadfe4}.rank-math-score-bar>div{display:inline-block;height:100%;border-right:3px solid #f0f2f4}.rank-math-score-bar>div[style*="width: 0%"]{display:none}.rank-math-score-bar>div.score-bar-good{background:#10ac84}.rank-math-score-bar>div.score-bar-ok{background:#ff9f43}.rank-math-score-bar>div.score-bar-bad{background:#ed5e5e}.rank-math-analytics-tab .woocommerce-table .components-card__header,.rank-math-analytics-tab .woocommerce-table .components-card__body,.rank-math-analytics-tab .woocommerce-table .woocommerce-pagination{-webkit-filter:blur(2px);filter:blur(2px)}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-analyzer-header,.rank-math-box-grid,.woocommerce-table .components-card__header,.woocommerce-table .components-card__header-item,.woocommerce-table .components-text .add-keyword-button,.woocommerce-table table .link-listing,.woocommerce-pagination,.woocommerce-pagination>div,.woocommerce-table__summary,.rank-math-analytics .grid,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-text,.rank-math-analytics .rank-math-keywords-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-keywords-overview .rank-math-list__item-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-single-tab .single-post-report{position:relative;z-index:1;max-width:100%}.rank-math-single-tab .rank-math-edit-post{font-size:1rem;display:inline-block;margin-left:10px;vertical-align:2px;text-decoration:none;color:#069de3}.rank-math-single-tab .rank-math-post-link{font-size:.825rem;font-weight:normal;display:inline-block;vertical-align:top;text-decoration:none;color:#7f868d}.rank-math-single-tab .rank-math-post-link:hover,.rank-math-single-tab .rank-math-post-link:focus{color:#069de3;outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-single-tab .rank-math-post-link:after{font-family:"dashicons";font-size:1rem;margin-left:5px;content:"ï”„";vertical-align:-3px;fill:#7f868d;-webkit-text-stroke:.5px #fff}.rank-math-keyword-table.keyword-manager{margin-bottom:2rem}.rank-math-keyword-table.keyword-manager table tr:last-child{border-bottom:1px solid #dadfe4}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-analyzer-header,.rank-math-box-grid,.woocommerce-table .components-card__header,.woocommerce-table .components-card__header-item,.woocommerce-table .components-text .add-keyword-button,.woocommerce-table table .link-listing,.woocommerce-pagination,.woocommerce-pagination>div,.woocommerce-table__summary,.rank-math-analytics .grid,.rank-math-analytics .rank-math-score-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-score-overview .rank-math-list__item-text,.rank-math-analytics .rank-math-keywords-overview .woocommerce-list__item-text,.rank-math-analytics .rank-math-keywords-overview .rank-math-list__item-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}#rank-math-pro-cta.analytics{margin-left:0}#rank-math-pro-cta.analytics .rank-math-cta-box{background:rgba(0,0,0,0)}#rank-math-pro-cta.rank-math-privacy-box{width:630px;max-width:100%;margin-top:3rem}#rank-math-pro-cta.rank-math-privacy-box.width-100{width:100%}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-table{border-width:2px;border-color:#10ac84}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body{background:rgba(16,172,132,.06)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body i{font-size:2rem;line-height:50px;width:50px;height:50px;margin-right:1.25rem;color:#10ac84;border-radius:50px;background:rgba(16,172,132,.1)}#rank-math-pro-cta.rank-math-privacy-box .rank-math-cta-body p{font-size:.9375rem;margin:0;color:#5f8c80}.rank-math-indexing-tab #rank-math-unlock-pro-notice{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:978px;max-width:100%;margin-top:15px;border:3px solid #161e28;border-radius:4px;background:#253142}.rank-math-indexing-tab #rank-math-unlock-pro-notice a{display:block;padding:10px 14px;text-decoration:none;color:#e4e5e7}.rank-math-indexing-tab #rank-math-unlock-pro-notice a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-indexing-tab #rank-math-unlock-pro-notice p{font-size:1rem;margin:0}.rank-math-indexing-tab #rank-math-unlock-pro-notice p span{text-decoration:underline;color:#f7d070}.rank-math-indexing-tab #rank-math-unlock-pro-notice .close-notice{display:none}.rank-math-indexing-tab #rank-math-pro-cta{margin-top:0}.rank-math-indexing-tab td.rank-math-col-status{-webkit-filter:blur(2px);filter:blur(2px)}.rank-math-indexing-tab td.rank-math-col-status .rank-math-tooltip:hover span{opacity:0}.rank-math-indexing-tab .rank-math-col-rich-results{min-width:170px}.rank-math-indexing-tab .rank-math-col-rich-results .schema-item{display:block}.rank-math-indexing-tab .rank-math-col-rich-results .schema-item i{margin-right:6px;padding:3px;color:#10ac84;border-radius:3px;background:rgba(16,172,132,.15)}.rank-math-indexing-tab .rank-math-col-rich-results .schema-item.error i{color:#ed5e5e;background:rgba(237,94,94,.15)}.rank-math-indexing-tab .rank-math-col-rich-results .schema-item.warning i{color:#ff9f43;background:rgba(255,159,67,.15)}.rank-math-indexing-tab .rank-math-col-status,.rank-math-indexing-tab .rank-math-col-indexing-allowed,.rank-math-indexing-tab .rank-math-col-crawled-as,.rank-math-indexing-tab .rank-math-col-robots-state{text-align:center}.rank-math-indexing-tab .verdict{font-style:normal;position:relative;display:block;width:100%;text-align:center}.rank-math-indexing-tab .verdict:before{font-family:"Dashicons";font-size:16px;line-height:20px;display:inline-block;width:20px;content:"ï‘ ";-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;color:#fff;border-radius:50%;background-color:#ff9f43}.rank-math-indexing-tab .verdict:hover:before{-webkit-box-shadow:0 0 0 4px rgba(255,159,67,.25);box-shadow:0 0 0 4px rgba(255,159,67,.25)}.rank-math-indexing-tab .verdict.neutral:before{background:#b5bfc9}.rank-math-indexing-tab .verdict.neutral:hover:before{-webkit-box-shadow:0 0 0 4px rgba(181,191,201,.25);box-shadow:0 0 0 4px rgba(181,191,201,.25)}.rank-math-indexing-tab .verdict.unspecified:before{font-family:Arial,Helvetica,sans-serif;font-size:14px;font-weight:500;content:"?";background:#7f868d}.rank-math-indexing-tab .verdict.unspecified:hover:before{-webkit-box-shadow:0 0 0 4px rgba(127,134,141,.25);box-shadow:0 0 0 4px rgba(127,134,141,.25)}.rank-math-indexing-tab .verdict.pass:before{content:"ï…ž";background:#10ac84}.rank-math-indexing-tab .verdict.pass:hover:before{-webkit-box-shadow:0 0 0 4px rgba(16,172,132,.25);box-shadow:0 0 0 4px rgba(16,172,132,.25)}.rank-math-indexing-tab .verdict.fail:before{content:"ïŒµ";background:#ed5e5e}.rank-math-indexing-tab .verdict.fail:hover:before{-webkit-box-shadow:0 0 0 4px rgba(237,94,94,.25);box-shadow:0 0 0 4px rgba(237,94,94,.25)}.rank-math-indexing-tab .verdict.partial:before{content:"ï…ž"}.rank-math-indexing-tab .rank-math-tooltip span{width:100px}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict:before{background-color:#dadfe4}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict:hover:before{-webkit-box-shadow:0 0 0 4px rgba(127,134,141,.1);box-shadow:0 0 0 4px rgba(127,134,141,.1)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.unspecified:hover:before,.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.neutral:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.unspecified:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.neutral:hover:before{-webkit-box-shadow:0 0 0 4px rgba(127,134,141,.1);box-shadow:0 0 0 4px rgba(127,134,141,.1)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.pass:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.pass:before{content:"ï…ž";color:#10ac84;background:rgba(16,172,132,.25)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.pass:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.pass:hover:before{-webkit-box-shadow:0 0 0 4px rgba(16,172,132,.1);box-shadow:0 0 0 4px rgba(16,172,132,.1)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.fail:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.fail:before{content:"ïŒµ";color:#ed5e5e;background:rgba(237,94,94,.25)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.fail:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.fail:hover:before{-webkit-box-shadow:0 0 0 4px rgba(237,94,94,.1);box-shadow:0 0 0 4px rgba(237,94,94,.1)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.partial:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.partial:before{content:"ï…ž";color:#ff9f43;background:rgba(255,159,67,.25)}.rank-math-indexing-tab .rank-math-col-indexing-allowed .verdict.partial:hover:before,.rank-math-indexing-tab .rank-math-col-robots-state .verdict.partial:hover:before{-webkit-box-shadow:0 0 0 4px rgba(255,159,67,.1);box-shadow:0 0 0 4px rgba(255,159,67,.1)}.rank-math-indexing-tab .row-footer{cursor:pointer;background:rgba(248,249,250,.5)}.rank-math-indexing-tab .row-footer td{padding:.825rem .825rem}.rank-math-indexing-tab .last-crawl-data{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-indexing-tab .last-crawl-data div:first-child{margin-right:1rem}.rank-math-indexing-tab .inner-elements>td{border-bottom:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements>td:first-child:empty{background:#efeff1}.rank-math-indexing-tab .inner-elements td{padding:0;padding-top:0;padding-bottom:0}.rank-math-indexing-tab .inner-elements td:first-child{border-right:1px solid #dadfe4;background-color:#fafafb}.rank-math-indexing-tab .inner-elements td .indexing-data-wrapper{position:relative}.rank-math-indexing-tab .inner-elements td .indexing-data-wrapper .indexing-data{-webkit-filter:blur(2px);filter:blur(2px)}.rank-math-indexing-tab .inner-elements td .indexing-data h4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:inherit;padding:1rem .825rem;border-bottom:1px solid #dadfe4;background-color:#efeff1}.rank-math-indexing-tab .inner-elements td .indexing-data h4 .rank-math-tooltip{margin-left:3px;color:#069de3}.rank-math-indexing-tab .inner-elements td .indexing-data h4 .rank-math-tooltip:hover em:before{color:rgb(4.686695279,122.635193133,177.313304721)}.rank-math-indexing-tab .inner-elements td .indexing-data.status div{display:-webkit-box;display:-ms-flexbox;display:flex;border-bottom:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data.status div span{-webkit-box-sizing:border-box;box-sizing:border-box;padding:1rem .825rem}.rank-math-indexing-tab .inner-elements td .indexing-data.status div span:first-child{font-weight:500;width:30%;color:#5a5d70;border-right:1px solid #dadfe4;background-color:#fafafb}.rank-math-indexing-tab .inner-elements td .indexing-data.detected-items>h4{display:none}.rank-math-indexing-tab .inner-elements td .indexing-data.referring-urls ul{max-width:900px;margin:.825rem .825rem .825rem 1.75rem;list-style-type:square;word-break:break-all}.rank-math-indexing-tab .inner-elements td .indexing-data.referring-urls ul li{margin-bottom:.825rem}.rank-math-indexing-tab .inner-elements td .indexing-data.crawled div{padding:1rem .825rem;border-bottom:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data.crawled div i{margin-right:5px;vertical-align:middle}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-header{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-header h4{font-size:1rem;font-weight:500;display:block;width:inherit;width:30%;margin:0;padding:1rem .825rem}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-header h4:first-child{border-right:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-header h4:last-child{width:70%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper:last-of-type h4{border-bottom:0}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper:last-of-type .schema-data:last-of-type>span,.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper:last-of-type .schema-data:last-of-type>strong{border-bottom:0}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper:last-of-type .schema-data:last-of-type>span+.sub-issues{border-top:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper:last-of-type .sub-issues:last-of-type{border-bottom:0}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper h4{width:30%;border-right:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data{display:-webkit-box;display:-ms-flexbox;display:flex;width:70%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data>span{width:70%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data strong{-webkit-box-sizing:border-box;box-sizing:border-box;width:30%;padding:1rem .825rem;border-right:1px solid #dadfe4;border-bottom:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data>span{-webkit-box-sizing:border-box;box-sizing:border-box;padding:1rem .825rem;border-bottom:1px solid #dadfe4;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;border-bottom:1px solid #dadfe4;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues>span:first-child{font-weight:500;-webkit-box-sizing:border-box;box-sizing:border-box;width:30%;margin-left:-1px;padding:1rem .825rem}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues>span:last-child{display:-webkit-box;display:-ms-flexbox;display:flex;width:70%;border-left:1px solid #dadfe4;-ms-flex-wrap:wrap;flex-wrap:wrap}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues strong{width:30%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues strong:first-child{width:70%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span{display:-webkit-box;display:-ms-flexbox;display:flex;border-bottom:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span:last-of-type{border-bottom:0}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span span{-webkit-box-sizing:border-box;box-sizing:border-box;padding:1rem .825rem}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span span:first-child{width:70%;border-right:1px solid #dadfe4}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span span:last-child{width:30%}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span.error span:last-of-type{color:#ed5e5e}.rank-math-indexing-tab .inner-elements td .indexing-data .rich-results-wrapper .rich-results-data .inner-wrapper .schema-data .sub-issues .schema-issues .issue-details>span.warning span:last-of-type{color:#ff9f43}.rank-math-indexing-tab #rank-math-unlock-pro-notice{width:100%;margin-bottom:1.5rem}.rank-math-indexing-tab .rank-math-child-row>td{padding:0}.rank-math-indexing-tab .rank-math-child-row>td table{width:100%}.rank-math-indexing-tab .woocommerce-ellipsis-menu__content .woocommerce-ellipsis-menu__item:last-child,.rank-math-indexing-tab .woocommerce-ellipsis-menu__content .woocommerce-ellipsis-menu__item:nth-last-child(2){pointer-events:none}PK     —ŠU]Ï7�6‹:  ‹:  3  includes/modules/analytics/google/class-request.phpnu „[µü¤        <?php
/**
 * Google API Request.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

use RankMath\Helper;
use WP_Error;
use RankMath\Helpers\Schedule;

defined( 'ABSPATH' ) || exit;

/**
 * Request
 */
class Request {

	/**
	 * Workflow.
	 *
	 * @var string
	 */
	private $workflow = '';

	/**
	 * Was the last request successful.
	 *
	 * @var bool
	 */
	private $is_success = false;

	/**
	 * Last error.
	 *
	 * @var string
	 */
	private $last_error = '';

	/**
	 * Last response.
	 *
	 * @var array
	 */
	private $last_response = [];

	/**
	 * Last response header code.
	 *
	 * @var int
	 */
	protected $last_code = 0;

	/**
	 * Is refresh token notice added.
	 *
	 * @var bool
	 */
	private $is_notice_added = false;

	/**
	 * Access token.
	 *
	 * @var string
	 */
	public $token = '';

	/**
	 * Set workflow
	 *
	 * @param string $workflow Workflow name.
	 */
	public function set_workflow( $workflow = '' ) {
		$this->workflow = $workflow;
	}

	/**
	 * Was the last request successful?
	 *
	 * @return bool  True for success, false for failure
	 */
	public function is_success() {
		return $this->is_success;
	}

	/**
	 * Get the last error returned by either the network transport, or by the API.
	 * If something didn't work, this should contain the string describing the problem.
	 *
	 * @return  array|false  describing the error
	 */
	public function get_error() {
		return $this->last_error ? $this->last_error : false;
	}

	/**
	 * Get an array containing the HTTP headers and the body of the API response.
	 *
	 * @return array  Assoc array with keys 'headers' and 'body'
	 */
	public function get_response() {
		return $this->last_response;
	}

	/**
	 * Make an HTTP GET request - for retrieving data.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return WP_Error|array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_get( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'GET', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP POST request - for creating and updating items.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return WP_Error|array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_post( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'POST', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP PUT request - for creating new items.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return WP_Error|array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_put( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'PUT', $url, $args, $timeout );
	}

	/**
	 * Make an HTTP DELETE request - for deleting data.
	 *
	 * @param string $url     URL to do request.
	 * @param array  $args    Assoc array of arguments (usually your data).
	 * @param int    $timeout Timeout limit for request in seconds.
	 *
	 * @return WP_Error|array|false     Assoc array of API response, decoded from JSON.
	 */
	public function http_delete( $url, $args = [], $timeout = 10 ) {
		return $this->make_request( 'DELETE', $url, $args, $timeout );
	}

	/**
	 * Performs the underlying HTTP request. Not very exciting.
	 *
	 * @param string $http_verb The HTTP verb to use: get, post, put, patch, delete.
	 * @param string $url       URL to do request.
	 * @param array  $args       Assoc array of parameters to be passed.
	 * @param int    $timeout    Timeout limit for request in seconds.
	 *
	 * @return array|false Assoc array of decoded result.
	 */
	private function make_request( $http_verb, $url, $args = [], $timeout = 10 ) {
		// Early Bail!!
		if ( ! Authentication::is_authorized() ) {
			return;
		}

		if ( ! $this->refresh_token() || ! is_scalar( $this->token ) ) {
			if ( ! $this->is_notice_added ) {
				$this->is_notice_added = true;
				$this->is_success      = false;
				$this->last_error      = sprintf(
					/* translators: reconnect link */
					wp_kses_post( __( 'There is a problem with the Google auth token. Please <a href="%1$s" class="button button-link rank-math-reconnect-google">reconnect your app</a>', 'seo-by-rank-math' ) ),
					wp_nonce_url( admin_url( 'admin.php?reconnect=google' ), 'rank_math_reconnect_google' )
				);
				$this->log_response( $http_verb, $url, $args, '', '', '', date( 'Y-m-d H:i:s' ) . ': Google auth token has been expired or is invalid' );
			}
			return;
		}

		$params = [
			'timeout' => $timeout,
			'method'  => $http_verb,
		];

		$params['headers'] = [ 'Authorization' => 'Bearer ' . $this->token ];

		if ( 'DELETE' === $http_verb || 'PUT' === $http_verb ) {
			$params['headers']['Content-Length'] = '0';
		} elseif ( 'POST' === $http_verb && ! empty( $args ) && is_array( $args ) ) {
			$json                                = wp_json_encode( $args );
			$params['body']                      = $json;
			$params['headers']['Content-Type']   = 'application/json';
			$params['headers']['Content-Length'] = strlen( $json );
		}

		$this->reset();
		sleep( 1 );
		$response           = wp_remote_request( $url, $params );
		$formatted_response = $this->format_response( $response );
		$this->determine_success( $response, $formatted_response );

		$this->log_response( $http_verb, $url, $args, $response, $formatted_response, $params );

		// Error handaling.
		$code = wp_remote_retrieve_response_code( $response );
		if ( 200 !== $code ) {
			// Remove workflow actions.
			if ( $this->workflow ) {
				as_unschedule_all_actions( 'rank_math/analytics/get_' . $this->workflow . '_data' );
			}
		}

		do_action(
			'rank_math/analytics/handle_' . $this->workflow . '_response',
			[
				'formatted_response' => $formatted_response,
				'response'           => $response,
				'http_verb'          => $http_verb,
				'url'                => $url,
				'args'               => $args,
				'code'               => $code,
			]
		);

		return $formatted_response;
	}

	/**
	 * Log the response in analytics_debug.log file.
	 *
	 * @param string         $http_verb          The HTTP verb to use: get, post, put, patch, delete.
	 * @param string         $url                URL to do request.
	 * @param array          $args               Assoc array of parameters to be passed.
	 * @param array|WP_Error $response           make_request response.
	 * @param string         $formatted_response Formatted response.
	 * @param array          $params             Parameters.
	 * @param string         $text               Text to append at the end of the response.
	 */
	private function log_response( $http_verb = '', $url = '', $args = [], $response = [], $formatted_response = '', $params = [], $text = '' ) {
		do_action( 'rank_math/analytics/log', $http_verb, $url, $args, $response, $formatted_response, $params );

		if ( ! apply_filters( 'rank_math/analytics/log_response', false ) ) {
			return;
		}

		$uploads = wp_upload_dir();
		$file    = $uploads['basedir'] . '/rank-math/analytics-debug.log';

		$wp_filesystem = Helper::get_filesystem();

		// Create log file if it doesn't exist.
		$wp_filesystem->touch( $file );

		// Not writable? Bail.
		if ( ! $wp_filesystem->is_writable( $file ) ) {
			return;
		}

		$message  = '********************************' . PHP_EOL;
		$message .= date( 'Y-m-d h:i:s' ) . PHP_EOL;

		$tokens = Authentication::tokens();
		if ( ! empty( $tokens ) && is_array( $tokens ) && isset( $tokens['expire'] ) ) {
			$message .= 'Expiry: ' . date( 'Y-m-d h:i:s', $tokens['expire'] ) . PHP_EOL;
			$message .= 'Expiry Readable: ' . human_time_diff( $tokens['expire'] ) . PHP_EOL;
		}

		$message .= $text . PHP_EOL;

		if ( is_wp_error( $response ) ) {
			$message .= '<span class="fail">FAIL</span>' . PHP_EOL;
			$message .= 'WP_Error: ' . $response->get_error_message() . PHP_EOL;
		} elseif ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
			$message .= '<span class="fail">FAIL</span>' . PHP_EOL;
		} elseif ( isset( $formatted_response['error_description'] ) ) {
			$message .= '<span class="fail">FAIL</span>' . PHP_EOL;
			$message .= 'Bad Request' === $formatted_response['error_description'] ?
			esc_html__( 'Bad request. Please check the code.', 'seo-by-rank-math' ) : $formatted_response['error_description'];
		} else {
			$message .= '<span class="pass">PASS</span>' . PHP_EOL;
		}
		$message .= 'REQUEST: ' . $http_verb . ' > ' . $url . PHP_EOL;
		$message .= 'REQUEST_PARAMETERS: ' . wp_json_encode( $params ) . PHP_EOL;
		$message .= 'REQUEST_API_ARGUMENTS: ' . wp_json_encode( $args ) . PHP_EOL;
		$message .= 'RESPONSE_CODE: ' . wp_remote_retrieve_response_code( $response ) . PHP_EOL;
		$message .= 'RESPONSE_CODE_MESSAGE: ' . wp_remote_retrieve_body( $response ) . PHP_EOL;
		$message .= 'RESPONSE_FORMATTED: ' . wp_json_encode( $formatted_response ) . PHP_EOL;
		$message .= 'ORIGINAL_RESPONSE: ' . wp_json_encode( $response ) . PHP_EOL;
		$message .= '================================' . PHP_EOL;
		$message .= $wp_filesystem->get_contents( $file );

		$wp_filesystem->put_contents( $file, $message );
	}

	/**
	 * Decode the response and format any error messages for debugging
	 *
	 * @param array|WP_Error $response The response from the curl request.
	 *
	 * @return array|false The JSON decoded into an array
	 */
	private function format_response( $response ) {
		$this->last_response = $response;

		if ( is_wp_error( $response ) ) {
			return false;
		}

		if ( ! empty( $response['body'] ) ) {
			return json_decode( $response['body'], true );
		}

		return false;
	}

	/**
	 * Check if the response was successful or a failure. If it failed, store the error.
	 *
	 * @param object      $response           The response from the curl request.
	 * @param array|false $formatted_response The response body payload from the curl request.
	 */
	private function determine_success( $response, $formatted_response ) {
		if ( is_wp_error( $response ) ) {
			$this->last_error = 'WP_Error: ' . $response->get_error_message();
			return;
		}

		$this->last_code = wp_remote_retrieve_response_code( $response );
		if ( in_array( $this->last_code, [ 200, 204 ], true ) ) {
			$this->is_success = true;
			return;
		}

		if ( isset( $formatted_response['error_description'] ) ) {
			$this->last_error = 'Bad Request' === $formatted_response['error_description'] ?
				esc_html__( 'Bad request. Please check the code.', 'seo-by-rank-math' ) : $formatted_response['error_description'];
			return;
		}

		$message = esc_html__( 'Unknown error, call get_response() to find out what happened.', 'seo-by-rank-math' );
		$body    = wp_remote_retrieve_body( $response );
		if ( ! empty( $body ) ) {
			$body = json_decode( $body, true );
			if ( ! empty( $body['error'] ) && ! empty( $body['error']['message'] ) ) {
				$message = $body['error']['message'];
			} elseif ( ! empty( $body['errors'] ) && is_array( $body['errors'] ) && ! empty( $body['errors'][0]['message'] ) ) {
				$message = $body['errors'][0]['message'];
			}
		}

		$this->last_error = $message;
	}

	/**
	 * Reset request.
	 */
	private function reset() {
		$this->last_code     = 0;
		$this->last_error    = '';
		$this->is_success    = false;
		$this->last_response = [
			'body'    => null,
			'headers' => null,
		];
	}

	/**
	 * Refresh access token when user login.
	 */
	public function refresh_token() {
		// Bail if the user is not authenticated at all yet.
		if ( ! Authentication::is_authorized() || ! Authentication::is_token_expired() ) {
			return true;
		}

		$response = $this->get_refresh_token();
		if ( ! $response ) {
			return false;
		}

		if ( false === $response['success'] ) {
			return false;
		}

		$tokens = Authentication::tokens();

		// Save new token.
		$this->token            = $response['access_token'];
		$tokens['expire']       = $response['expire'];
		$tokens['access_token'] = $response['access_token'];
		Authentication::tokens( $tokens );

		return true;
	}

	/**
	 * Get the new refresh token.
	 *
	 * @return mixed
	 */
	protected function get_refresh_token() {
		$tokens = Authentication::tokens();
		if ( empty( $tokens['refresh_token'] ) ) {
			return false;
		}

		$response = wp_remote_get(
			add_query_arg(
				[
					'code'   => $tokens['refresh_token'],
					'format' => 'json',
				],
				Authentication::get_auth_app_url() . '/refresh.php'
			)
		);

		if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
			return false;
		}

		$response = json_decode( wp_remote_retrieve_body( $response ), true );
		if ( empty( $response ) ) {
			return false;
		}

		return $response;
	}

	/**
	 * Revoke an OAuth2 token.
	 *
	 * @return boolean Whether the token was revoked successfully.
	 */
	public function revoke_token() {
		Authentication::tokens( false );
		delete_option( 'rank_math_google_analytic_profile' );
		delete_option( 'rank_math_google_analytic_options' );
		delete_option( 'rankmath_google_api_failed_attempts_data' );
		delete_option( 'rankmath_google_api_reconnect' );

		return $this->is_success();
	}

	/**
	 * Log every failed API call.
	 * And kill all next scheduled event if failed count is more then three.
	 *
	 * @param array  $response   Response from api.
	 * @param string $action     Action performing.
	 * @param string $start_date Start date fetching for (or page URI for inspections).
	 * @param array  $args       Array of arguments.
	 */
	public function log_failed_request( $response, $action, $start_date, $args ) {
		if ( $this->is_success() ) {
			return;
		}

		$option_key                  = 'rankmath_google_api_failed_attempts_data';
		$reconnect_google_option_key = 'rankmath_google_api_reconnect';
		if ( empty( $response['error'] ) || ! is_array( $response['error'] ) ) {
			delete_option( $option_key );
			delete_option( $reconnect_google_option_key );
			return;
		}

		// Limit maximum 10 failed attempt data to log.
		$failed_attempts   = get_option( $option_key, [] );
		$failed_attempts   = ( ! empty( $failed_attempts ) && is_array( $failed_attempts ) ) ? array_slice( $failed_attempts, -9, 9 ) : [];
		$failed_attempts[] = [
			'action' => $action,
			'args'   => $args,
			'error'  => $response['error'],
		];

		update_option( $option_key, $failed_attempts, false );

		// Number of allowed attempt.
		if ( 3 < count( $failed_attempts ) ) {
			update_option( $reconnect_google_option_key, 'search_analytics_query' );
			return;
		}

		Schedule::single_action(
			time() + 60,
			"rank_math/analytics/get_{$action}_data",
			[ $start_date ],
			'rank-math'
		);
	}
}
PK     —ŠU]äVB¸d#  d#  3  includes/modules/analytics/google/class-console.phpnu „[µü¤        <?php
/**
 *  Google Search Console.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

use RankMath\Google\Api;
use RankMath\Helpers\Str;
use RankMath\Helpers\Schedule;
use RankMath\Analytics\Workflow\Base;
use RankMath\Sitemap\Sitemap;
use WP_Error;

defined( 'ABSPATH' ) || exit;

/**
 * Console class.
 */
class Console extends Analytics {

	/**
	 * Connection status key.
	 */
	const CONNECTION_STATUS_KEY = 'rank_math_console_connection_error';

	/**
	 * Add site.
	 *
	 * @param string $url Site url to add.
	 *
	 * @return bool
	 */
	public function add_site( $url ) {
		$this->http_put( 'https://www.googleapis.com/webmasters/v3/sites/' . rawurlencode( $url ) );
		return $this->is_success();
	}

	/**
	 * Get site verification token.
	 *
	 * @param string $url Site url to add.
	 *
	 * @return bool|string
	 */
	public function get_site_verification_token( $url ) {
		$args = [
			'site'               => [
				'type'       => 'SITE',
				'identifier' => $url,
			],
			'verificationMethod' => 'META',
		];

		$response = $this->http_post( 'https://www.googleapis.com/siteVerification/v1/token', $args );
		if ( ! $this->is_success() ) {
			return false;
		}

		return \RankMath\CMB2::sanitize_webmaster_tags( $response['token'] );
	}

	/**
	 * Verify site token.
	 *
	 * @param string $url Site url to add.
	 *
	 * @return bool|string
	 */
	public function verify_site( $url ) {
		$token = $this->get_site_verification_token( $url );
		if ( ! $token ) {
			return;
		}

		// Save in transient.
		set_transient( 'rank_math_google_site_verification', $token, DAY_IN_SECONDS * 2 );

		// Call Google site verification.
		$args = [
			'site' => [
				'type'       => 'SITE',
				'identifier' => $url,
			],
		];

		$this->http_post( 'https://www.googleapis.com/siteVerification/v1/webResource?verificationMethod=META', $args );

		// Sync sitemap.
		Schedule::async_action( 'rank_math/analytics/sync_sitemaps', [], 'rank-math' );

		return $this->is_success();
	}

	/**
	 * Get sites.
	 *
	 * @return array
	 */
	public function get_sites() {
		static $rank_math_google_sites;
		if ( ! \is_null( $rank_math_google_sites ) ) {
			return $rank_math_google_sites;
		}

		$rank_math_google_sites = [];
		$response               = $this->http_get( 'https://www.googleapis.com/webmasters/v3/sites' );
		if ( ! $this->is_success() || empty( $response['siteEntry'] ) ) {
			return $rank_math_google_sites;
		}

		foreach ( $response['siteEntry'] as $site ) {
			$rank_math_google_sites[ $site['siteUrl'] ] = $site['siteUrl'];
		}

		return $rank_math_google_sites;
	}

	/**
	 * Fetch sitemaps.
	 *
	 * @param string  $url        Site to get sitemaps for.
	 * @param boolean $with_index With index data.
	 *
	 * @return array
	 */
	public function get_sitemaps( $url, $with_index = false ) {
		$with_index = $with_index ? '?sitemapIndex=' . rawurlencode( $url . Sitemap::get_sitemap_index_slug() . '.xml' ) : '';
		$response   = $this->http_get( 'https://www.googleapis.com/webmasters/v3/sites/' . rawurlencode( $url ) . '/sitemaps' . $with_index );

		if ( ! $this->is_success() || empty( $response['sitemap'] ) ) {
			return [];
		}

		return $response['sitemap'];
	}

	/**
	 * Submit sitemap to search console.
	 *
	 * @param string $url     Site to add sitemap for.
	 * @param string $sitemap Sitemap url.
	 *
	 * @return array
	 */
	public function add_sitemap( $url, $sitemap ) {
		return $this->http_put( 'https://www.googleapis.com/webmasters/v3/sites/' . rawurlencode( $url ) . '/sitemaps/' . rawurlencode( $sitemap ) );
	}

	/**
	 * Delete sitemap from search console.
	 *
	 * @param string $url     Site to delete sitemap for.
	 * @param string $sitemap Sitemap url.
	 *
	 * @return array
	 */
	public function delete_sitemap( $url, $sitemap ) {
		return $this->http_delete( 'https://www.googleapis.com/webmasters/v3/sites/' . rawurlencode( $url ) . '/sitemaps/' . rawurlencode( $sitemap ) );
	}

	/**
	 * Query analytics data from google client api.
	 *
	 * @param array $args  Query arguments.
	 *
	 * @return array|false|WP_Error
	 */
	public function get_search_analytics( $args = [] ) {
		$dates = Base::get_dates();

		$start_date = isset( $args['start_date'] ) ? $args['start_date'] : $dates['start_date'];
		$end_date   = isset( $args['end_date'] ) ? $args['end_date'] : $dates['end_date'];
		$dimensions = isset( $args['dimensions'] ) ? $args['dimensions'] : 'date';
		$row_limit  = isset( $args['row_limit'] ) ? $args['row_limit'] : Api::get()->get_row_limit();

		$params = [
			'startDate'  => $start_date,
			'endDate'    => $end_date,
			'rowLimit'   => $row_limit,
			'dimensions' => \is_array( $dimensions ) ? $dimensions : [ $dimensions ],
		];

		$stored  = get_option(
			'rank_math_google_analytic_profile',
			[
				'country'             => '',
				'profile'             => '',
				'enable_index_status' => true,
			]
		);
		$country = isset( $args['country'] ) ? $args['country'] : $stored['country'];
		$profile = isset( $args['profile'] ) ? $args['profile'] : $stored['profile'];

		if ( 'all' !== $country ) {
			$params['dimensionFilterGroups'] = [
				[
					'filters' => [
						[
							'dimension'  => 'country',
							'operator'   => 'equals',
							'expression' => $country,
						],
					],
				],
			];
		}

		if ( empty( $profile ) ) {
			$profile = trailingslashit( strtolower( home_url() ) );
		}

		$workflow = 'console';
		$this->set_workflow( $workflow );
		$response = $this->http_post(
			'https://www.googleapis.com/webmasters/v3/sites/' . rawurlencode( $profile ) . '/searchAnalytics/query',
			$params
		);

		$this->log_failed_request( $response, $workflow, $start_date, func_get_args() );

		if ( ! $this->is_success() ) {
			return new WP_Error( 'request_failed', __( 'The Google Search Console request failed.', 'seo-by-rank-math' ) );
		}

		if ( ! isset( $response['rows'] ) ) {
			return false;
		}

		return $response['rows'];
	}

	/**
	 * Is site verified.
	 *
	 * @param string $url Site to verify.
	 *
	 * @return boolean
	 */
	public function is_site_verified( $url ) {
		$response = $this->http_get( 'https://www.googleapis.com/siteVerification/v1/webResource/' . rawurlencode( $url ) );
		if ( ! $this->is_success() ) {
			return false;
		}

		return isset( $response['owners'] );
	}

	/**
	 * Sync sitemaps with google search console.
	 */
	public function sync_sitemaps() {
		$site_url = self::get_site_url();
		$data     = $this->get_sitemap_to_sync();

		// Submit it.
		if ( ! $data['sitemaps_in_list'] ) {
			$this->add_sitemap( $site_url, $data['local_sitemap'] );
		}

		if ( empty( $data['delete_sitemaps'] ) ) {
			return;
		}

		// Delete it.
		foreach ( $data['delete_sitemaps'] as $sitemap ) {
			$this->delete_sitemap( $site_url, $sitemap );
		}
	}

	/**
	 * Get sitemaps to sync.
	 *
	 * @return array
	 */
	private function get_sitemap_to_sync() {
		$delete_sitemaps  = [];
		$sitemaps_in_list = false;
		$site_url         = self::get_site_url();
		$sitemaps         = $this->get_sitemaps( $site_url );
		$local_sitemap    = trailingslashit( $site_url ) . Sitemap::get_sitemap_index_slug() . '.xml';

		// Early Bail if there are no sitemaps.
		if ( empty( $sitemaps ) ) {
			return compact( 'delete_sitemaps', 'sitemaps_in_list', 'local_sitemap' );
		}

		foreach ( $sitemaps as $sitemap ) {
			if ( $sitemap['path'] === $local_sitemap ) {
				$sitemaps_in_list = true;
				continue;
			}

			$delete_sitemaps[] = $sitemap['path'];
		}

		return compact( 'delete_sitemaps', 'sitemaps_in_list', 'local_sitemap' );
	}

	/**
	 * Get site url.
	 *
	 * @return string
	 */
	public static function get_site_url() {
		static $rank_math_site_url;

		if ( is_null( $rank_math_site_url ) ) {
			$default            = trailingslashit( strtolower( home_url() ) );
			$rank_math_site_url = get_option( 'rank_math_google_analytic_profile', [ 'profile' => $default ] );
			$rank_math_site_url = empty( $rank_math_site_url['profile'] ) ? $default : $rank_math_site_url['profile'];

			if ( Str::contains( 'sc-domain:', $rank_math_site_url ) ) {
				$rank_math_site_url = str_replace( 'sc-domain:', '', $rank_math_site_url );
				$rank_math_site_url = ( is_ssl() ? 'https://' : 'http://' ) . $rank_math_site_url;
			}
		}

		return $rank_math_site_url;
	}

	/**
	 * Check if console is connected.
	 *
	 * @return boolean Returns True if the console is connected, otherwise False.
	 */
	public static function is_console_connected() {
		$profile = wp_parse_args(
			get_option( 'rank_math_google_analytic_profile' ),
			[
				'profile' => '',
				'country' => 'all',
			]
		);

		return ! empty( $profile['profile'] );
	}

	/**
	 * Is valid connection
	 */
	public static function is_valid_connection() {
		return Api::get()->get_connection_status( self::CONNECTION_STATUS_KEY );
	}

	/**
	 * Test connection
	 */
	public static function test_connection() {
		return Api::get()->check_connection_status( self::CONNECTION_STATUS_KEY, [ Api::get(), 'get_search_analytics' ] );
	}
}
PK     —ŠU]j„½î|  |  5  includes/modules/analytics/google/class-analytics.phpnu „[µü¤        <?php
/**
 *  Google Analytics.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

defined( 'ABSPATH' ) || exit;

use WP_Error;
use RankMath\Helper;
use RankMath\Google\Api;
use RankMath\Helpers\Str;
use RankMath\Analytics\Workflow\Base;

/**
 * Analytics class.
 */
class Analytics extends Request {

	/**
	 * Connection status key.
	 */
	const CONNECTION_STATUS_KEY = 'rank_math_analytics_connection_error';

	/**
	 * Get analytics accounts.
	 */
	public function get_analytics_accounts() {
		$accounts        = [];
		$next_page_token = '';
		$base_url        = 'https://analyticsadmin.googleapis.com/v1beta/accountSummaries?pageSize=200';

		do {
			$url = $base_url;
			if ( $next_page_token ) {
				$url .= '&pageToken=' . $next_page_token;
			}

			$response = $this->http_get( $url );

			if ( ! $response || ! $this->is_success() || isset( $response['error'] ) ) {
				break;
			}

			if ( ! empty( $response['accountSummaries'] ) ) {
				foreach ( $response['accountSummaries'] as $account ) {
					if ( empty( $account['propertySummaries'] ) ) {
						continue;
					}

					$account_id = str_replace( 'accounts/', '', $account['account'] );

					$accounts[ $account_id ] = [
						'name'       => $account['displayName'],
						'properties' => [],
					];

					foreach ( $account['propertySummaries'] as $property ) {
						$property_id = str_replace( 'properties/', '', $property['property'] );

						$accounts[ $account_id ]['properties'][ $property_id ] = [
							'name'       => $property['displayName'],
							'id'         => $property_id,
							'account_id' => $account_id,
							'type'       => 'GA4',
						];
					}
				}
			}

			$next_page_token = isset( $response['nextPageToken'] ) ? $response['nextPageToken'] : '';
		} while ( $next_page_token );

		return $accounts;
	}

	/**
	 * Check if google analytics is connected.
	 *
	 * @return boolean Returns True if the google analytics is connected, otherwise False.
	 */
	public static function is_analytics_connected() {
		$account = wp_parse_args(
			get_option( 'rank_math_google_analytic_options' ),
			[ 'view_id' => '' ]
		);

		return ! empty( $account['view_id'] );
	}

	/**
	 * Is valid connection
	 */
	public static function is_valid_connection() {
		return Api::get()->get_connection_status( self::CONNECTION_STATUS_KEY );
	}

	/**
	 * Test connection
	 */
	public static function test_connection() {
		return Api::get()->check_connection_status( self::CONNECTION_STATUS_KEY, [ __CLASS__, 'get_sample_response' ] );
	}

	/**
	 * Get sample response to test connection.
	 *
	 * @return array|false|WP_Error
	 */
	public static function get_sample_response() {
		return self::get_analytics(
			[
				'row_limit' => 1,
			],
			true
		);
	}

	/**
	 * Query analytics data from google client api.
	 *
	 * @param array   $options Analytics options.
	 * @param boolean $days    Whether to include dates.
	 *
	 * @return array|false|WP_Error
	 */
	public static function get_analytics( $options = [], $days = false ) {
		// Check view ID.
		$view_id = isset( $options['view_id'] ) ? $options['view_id'] : self::get_view_id();
		if ( ! $view_id ) {
			return false;
		}

		$stored = get_option(
			'rank_math_google_analytic_options',
			[
				'account_id'       => '',
				'property_id'      => '',
				'view_id'          => '',
				'measurement_id'   => '',
				'stream_name'      => '',
				'country'          => '',
				'install_code'     => '',
				'anonymize_ip'     => '',
				'local_ga_js'      => '',
				'exclude_loggedin' => '',
			]
		);

		// Check property ID.
		$property_id = isset( $options['property_id'] ) ? $options['property_id'] : $stored['property_id'];
		if ( ! $property_id ) {
			return false;
		}

		// Check dates.
		$dates      = Base::get_dates();
		$start_date = isset( $options['start_date'] ) ? $options['start_date'] : $dates['start_date'];
		$end_date   = isset( $options['end_date'] ) ? $options['end_date'] : $dates['end_date'];
		if ( ! $start_date || ! $end_date ) {
			return false;
		}

		// Request for GA4 API.
		$args = [
			'limit'           => isset( $options['row_limit'] ) ? $options['row_limit'] : Api::get()->get_row_limit(),
			'dateRanges'      => [
				[
					'startDate' => $start_date,
					'endDate'   => $end_date,
				],
			],
			'dimensionFilter' => [
				'andGroup' => [
					'expressions' => [
						[
							'filter' => [
								'fieldName'    => 'streamId',
								'stringFilter' => [
									'matchType' => 'EXACT',
									'value'     => $view_id,
								],
							],
						],
					],
				],
			],
		];

		$dimensions = isset( $options['dimensions'] ) ? $options['dimensions'] : [];
		if ( $dimensions ) {
			$args = wp_parse_args(
				[
					'dimensions' => $dimensions,
				],
				$args
			);
		}

		$metrics = isset( $options['metrics'] ) ? $options['metrics'] : [];
		if ( $metrics ) {
			$args = wp_parse_args(
				[
					'metrics' => $metrics,
				],
				$args
			);
		}

		// Include only dates.
		if ( true === $days ) {
			$args = wp_parse_args(
				[
					'dimensions' => [
						[ 'name' => 'date' ],
					],
				],
				$args
			);
		}

		$workflow = 'analytics';
		Api::get()->set_workflow( $workflow );

		// Request.
		$response = Api::get()->http_post(
			'https://analyticsdata.googleapis.com/v1beta/properties/' . $property_id . ':runReport',
			$args
		);

		Api::get()->log_failed_request( $response, $workflow, $start_date, func_get_args() );

		if ( ! Api::get()->is_success() ) {
			return new WP_Error( 'request_failed', __( 'The Google Analytics Console request failed.', 'seo-by-rank-math' ) );
		}

		if ( ! isset( $response['rows'] ) ) {
			return false;
		}

		$dimensions = isset( $response['dimensionHeaders'] ) ? array_column( $response['dimensionHeaders'], 'name' ) : [];
		$metrics    = isset( $response['metricHeaders'] ) ? array_column( $response['metricHeaders'], 'name' ) : [];

		$rows = [];
		foreach ( $response['rows'] as $row ) {
			$item = [];

			if ( isset( $row['dimensionValues'] ) ) {
				foreach ( $row['dimensionValues'] as $i => $dim ) {
					$item[ $dimensions[ $i ] ] = $dim['value'];
				}
			}

			if ( isset( $row['metricValues'] ) ) {
				foreach ( $row['metricValues'] as $i => $met ) {
					$item[ $metrics[ $i ] ] = (int) $met['value'];
				}
			}

			$rows[] = $item;
		}

		return $rows;
	}

	/**
	 * Get view id.
	 *
	 * @return string
	 */
	public static function get_view_id() {
		static $rank_math_view_id;

		if ( is_null( $rank_math_view_id ) ) {
			$options           = get_option( 'rank_math_google_analytic_options' );
			$rank_math_view_id = ! empty( $options['view_id'] ) ? $options['view_id'] : false;
		}

		return $rank_math_view_id;
	}
}
PK     —ŠU]¢IjÁL  L  :  includes/modules/analytics/google/class-authentication.phpnu „[µü¤        <?php
/**
 *  Google Authentication wrapper.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Data_Encryption;
use RankMath\Helpers\Param;
use RankMath\Helpers\Security;

defined( 'ABSPATH' ) || exit;

/**
 * Authentication class.
 */
class Authentication {

	/**
	 * API version.
	 *
	 * @var string
	 */
	protected static $api_version = '2.1';

	/**
	 * Get or update token data.
	 *
	 * @param  bool|array $data Data to save.
	 * @return bool|array
	 */
	public static function tokens( $data = null ) {
		$key          = 'rank_math_google_oauth_tokens';
		$encrypt_keys = [
			'access_token',
			'refresh_token',
		];

		// Clear data.
		if ( false === $data ) {
			delete_option( $key );
			return false;
		}

		$saved = get_option( $key, [] );
		foreach ( $encrypt_keys as $enc_key ) {
			if ( isset( $saved[ $enc_key ] ) ) {
				$saved[ $enc_key ] = Data_Encryption::deep_decrypt( $saved[ $enc_key ] );
			}
		}

		// Getter.
		if ( is_null( $data ) ) {
			return wp_parse_args( $saved, [] );
		}

		// Setter.
		foreach ( $encrypt_keys as $enc_key ) {
			if ( isset( $saved[ $enc_key ] ) ) {
				$saved[ $enc_key ] = Data_Encryption::deep_encrypt( $saved[ $enc_key ] );
			}
			if ( isset( $data[ $enc_key ] ) ) {
				$data[ $enc_key ] = Data_Encryption::deep_encrypt( $data[ $enc_key ] );
			}
		}

		$data = wp_parse_args( $data, $saved );
		update_option( $key, $data );

		return $data;
	}

	/**
	 * Is google authorized.
	 *
	 * @return boolean
	 */
	public static function is_authorized() {
		$tokens = self::tokens();

		return isset( $tokens['access_token'] ) && isset( $tokens['refresh_token'] );
	}

	/**
	 * Check if token is expired.
	 *
	 * @return boolean
	 */
	public static function is_token_expired() {
		$tokens = self::tokens();

		return $tokens['expire'] && time() > $tokens['expire'];
	}

	/**
	 * Get oauth url.
	 *
	 * @return string
	 */
	public static function get_auth_url() {
		$page = self::get_page_slug();

		return Security::add_query_arg_raw(
			[
				'version'      => defined( 'RANK_MATH_PRO_VERSION' ) ? 'pro' : 'free',
				'api_version'  => static::$api_version,
				'redirect_uri' => rawurlencode( admin_url( 'admin.php?page=' . $page ) ),
				'security'     => wp_create_nonce( 'rank_math_oauth_token' ),
			],
			self::get_auth_app_url()
		);
	}

	/**
	 * Google custom app.
	 *
	 * @return string
	 */
	public static function get_auth_app_url() {
		return apply_filters( 'rank_math/analytics/app_url', 'https://oauth.rankmath.com' );
	}

	/**
	 * Get page slug according to request.
	 *
	 * @return string
	 */
	public static function get_page_slug() {
		$page = Param::get( 'page' );
		if ( ! empty( $page ) ) {
			switch ( $page ) {
				case 'rank-math-wizard':
					return 'rank-math-wizard&step=analytics';

				case 'rank-math-analytics':
					return 'rank-math-analytics';

				default:
					if ( Helper::is_react_enabled() ) {
						return 'rank-math-options-general&view=analytics';
					}

					return 'rank-math-options-general#setting-panel-analytics';
			}
		}

		$page = wp_get_referer();
		if ( ! empty( $page ) && Str::contains( 'wizard', $page ) ) {
			return 'rank-math-wizard&step=analytics';
		}

		return 'rank-math-options-general#setting-panel-analytics';
	}
}
PK     —ŠU]„iO	²  ²  :  includes/modules/analytics/google/class-url-inspection.phpnu „[µü¤        <?php
/**
 * Google URL Inspection API.
 *
 * @since      1.0.84
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Analytics class.
 */
class Url_Inspection extends Request {
	/**
	 * URL Inspection API base URL.
	 *
	 * @var string
	 */
	private $api_url = 'https://searchconsole.googleapis.com/v1/urlInspection/index:inspect';

	/**
	 * Access token.
	 *
	 * @var array
	 */
	public $token = [];

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Url_Inspection
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Url_Inspection ) ) {
			$instance = new Url_Inspection();
			$instance->setup();
		}

		return $instance;
	}

	/**
	 * Setup token.
	 */
	public function setup() {
		if ( ! Authentication::is_authorized() ) {
			return;
		}

		$tokens      = Authentication::tokens();
		$this->token = $tokens['access_token'];
	}

	/**
	 * Send URL to the API and return the response, or false on failure.
	 *
	 * @param string $page URL to inspect (relative).
	 */
	public function get_api_results( $page ) {
		$lang_arr  = \explode( '_', get_locale() );
		$lang_code = empty( $lang_arr[1] ) ? $lang_arr[0] : $lang_arr[0] . '-' . $lang_arr[1];

		$args = [
			'inspectionUrl' => untrailingslashit( Helper::get_home_url() ) . $page,
			'siteUrl'       => Console::get_site_url(),
			'languageCode'  => $lang_code,
		];

		set_time_limit( 90 );

		$workflow = 'inspections';
		$this->set_workflow( $workflow );

		$response = $this->http_post( $this->api_url, $args, 60 );

		$this->log_failed_request( $response, $workflow, $page, func_get_args() );

		if ( ! $this->is_success() ) {
			return false;
		}

		return $response;
	}

	/**
	 * Get inspection data.
	 *
	 * @param string $page URL to inspect.
	 */
	public function get_inspection_data( $page ) {
		$inspection = $this->get_api_results( $page );
		if ( empty( $inspection ) || empty( $inspection['inspectionResult'] ) ) {
			return;
		}
		$inspection = $this->normalize_inspection_data( $inspection );

		$inspection['page'] = $page;

		return $inspection;
	}

	/**
	 * Normalize inspection data.
	 *
	 * @param  array $inspection Inspection data.
	 */
	private function normalize_inspection_data( $inspection ) {
		$incoming   = $inspection['inspectionResult'];
		$normalized = [];

		$map_properties = [
			'indexStatusResult.verdict'         => 'index_verdict',
			'indexStatusResult.coverageState'   => 'coverage_state',
			'indexStatusResult.indexingState'   => 'indexing_state',
			'indexStatusResult.pageFetchState'  => 'page_fetch_state',
			'indexStatusResult.robotsTxtState'  => 'robots_txt_state',
			'richResultsResult.verdict'         => 'rich_results_verdict',
			'indexStatusResult.crawledAs'       => 'crawled_as',
			'indexStatusResult.googleCanonical' => 'google_canonical',
			'indexStatusResult.userCanonical'   => 'user_canonical',
			'indexStatusResult.sitemap'         => 'sitemap',
			'indexStatusResult.referringUrls'   => 'referring_urls',
		];

		$this->assign_inspection_values( $incoming, $map_properties, $normalized );

		$normalized = apply_filters( 'rank_math/analytics/url_inspection_map_properties', $normalized, $incoming );

		return $normalized;
	}

	/**
	 * Assign inspection field value to the data array.
	 *
	 * @param  array  $raw_data  Raw data.
	 * @param  string $field     Field name.
	 * @param  string $assign_to Field name to assign to.
	 * @param  array  $data      Data array.
	 *
	 * @return void
	 */
	public function assign_inspection_value( $raw_data, $field, $assign_to, &$data ) {
		$data[ $assign_to ] = $this->get_result_field( $raw_data, $field );

		if ( is_array( $data[ $assign_to ] ) ) {
			$data[ $assign_to ] = wp_json_encode( $data[ $assign_to ] );
		} elseif ( preg_match( '/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/', $data[ $assign_to ], $matches ) ) {
			// If it's a date, convert to MySQL format.
			$data[ $assign_to ] = date( 'Y-m-d H:i:s', strtotime( $matches[0] ) ); // phpcs:ignore WordPress.DateTime.RestrictedFunctions.date_date -- Date is stored as TIMESTAMP, so the timezone is converted automatically.
		}
	}

	/**
	 * Get a field from the inspection result.
	 *
	 * @param array  $raw_data Incoming data.
	 * @param string $field    Field name.
	 *
	 * @return mixed
	 */
	protected function get_result_field( $raw_data, $field ) {
		if ( false !== strpos( $field, '.' ) ) {
			$fields = explode( '.', $field );

			if ( ! isset( $raw_data[ $fields[0] ] ) || ! isset( $raw_data[ $fields[0] ][ $fields[1] ] ) ) {
				return '';
			}

			return $raw_data[ $fields[0] ][ $fields[1] ];
		}

		if ( ! isset( $raw_data[ $field ] ) ) {
			return '';
		}

		return $raw_data[ $field ];
	}

	/**
	 * Assign inspection field values to the data array.
	 *
	 * @param  array $raw_data Raw data.
	 * @param  array $fields   Map properties.
	 * @param  array $data     Data array.
	 *
	 * @return void
	 */
	public function assign_inspection_values( $raw_data, $fields, &$data ) {
		foreach ( $fields as $field => $assign_to ) {
			$this->assign_inspection_value( $raw_data, $field, $assign_to, $data );
		}
	}
}
PK     —ŠU]xbÉ"à  à  7  includes/modules/analytics/google/class-permissions.phpnu „[µü¤        <?php
/**
 *  Google Permissions.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

defined( 'ABSPATH' ) || exit;

/**
 * Permissions class.
 */
class Permissions {

	const OPTION_NAME = 'rank_math_analytics_permissions';

	/**
	 * Permission info.
	 */
	public static function fetch() {
		$tokens = Authentication::tokens();
		if ( empty( $tokens['access_token'] ) ) {
			return;
		}

		$url      = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' . $tokens['access_token'];
		$response = wp_remote_get( $url );
		if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
			return;
		}

		$response = wp_remote_retrieve_body( $response );
		if ( empty( $response ) ) {
			return;
		}

		$response = \json_decode( $response, true );
		$scopes   = $response['scope'];
		$scopes   = explode( ' ', $scopes );
		$scopes   = str_replace( 'https://www.googleapis.com/auth/', '', $scopes );

		update_option( self::OPTION_NAME, $scopes );
	}

	/**
	 * Get permissions.
	 *
	 * @return array
	 */
	public static function get() {
		return get_option( self::OPTION_NAME, [] );
	}

	/**
	 * If user give permission or not.
	 *
	 * @param  string $permission Permission name.
	 * @return boolean
	 */
	public static function has( $permission ) {
		$permissions = self::get();

		return in_array( $permission, $permissions, true );
	}

	/**
	 * If user give permission or not.
	 *
	 * @return boolean
	 */
	public static function has_console() {
		return self::has( 'webmasters' );
	}

	/**
	 * If user give permission or not.
	 *
	 * @return boolean
	 */
	public static function has_analytics() {
		return self::has( 'analytics.readonly' ) ||
			self::has( 'analytics.provision' ) ||
			self::has( 'analytics.edit' );
	}

	/**
	 * If user give permission or not.
	 *
	 * @return boolean
	 */
	public static function has_adsense() {
		return self::has( 'adsense.readonly' );
	}

	/**
	 * If user give permission or not.
	 *
	 * @return string
	 */
	public static function get_status() {
		return [
			esc_html__( 'Search Console', 'seo-by-rank-math' ) => self::get_status_text( self::has_console() ),
		];
	}

	/**
	 * Status text
	 *
	 * @param  boolean $check Truthness.
	 * @return string
	 */
	public static function get_status_text( $check ) {
		return $check ? esc_html__( 'Given', 'seo-by-rank-math' ) : esc_html__( 'Not Given', 'seo-by-rank-math' );
	}

	/**
	 * Print warning
	 */
	public static function print_warning() {
		?>
		<p class="warning">
			<strong class="warning">
				<?php esc_html_e( 'Warning:', 'seo-by-rank-math' ); ?>
			</strong>
			<?php
				/* translators: %s is the reconnect link. */
				printf( wp_kses_post( __( 'You have not given the permission to fetch this data. Please <a href="%s">reconnect</a> with all required permissions.', 'seo-by-rank-math' ) ), esc_url( wp_nonce_url( admin_url( 'admin.php?reconnect=google' ), 'rank_math_reconnect_google' ) ) );
			?>
		</p>
		<?php
	}
}
PK     —ŠU]º—g2¢  ¢  /  includes/modules/analytics/google/class-api.phpnu „[µü¤        <?php
/**
 * Minimal Google API wrapper.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Google;

defined( 'ABSPATH' ) || exit;

/**
 * Api
 */
class Api extends Console {

	/**
	 * Access token.
	 *
	 * @var array
	 */
	public $token = [];

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Api
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Api ) ) {
			$instance = new Api();
			$instance->setup();
		}

		return $instance;
	}

	/**
	 * Setup token.
	 */
	private function setup() {
		if ( ! Authentication::is_authorized() ) {
			return;
		}

		$tokens      = Authentication::tokens();
		$this->token = $tokens['access_token'];
	}

	/**
	 * Get row limit.
	 *
	 * @return int
	 */
	public function get_row_limit() {
		return apply_filters( 'rank_math/analytics/row_limit', 10000 );
	}

	/**
	 * Get connection status.
	 *
	 * @param string $key Connection status key.
	 *
	 * @return bool
	 */
	public function get_connection_status( $key ) {
		return ! get_option( $key, false );
	}

	/**
	 * Set connection status.
	 *
	 * @param string $key   Connection status key.
	 * @param bool   $status Connection status.
	 */
	public function set_connection_status( $key, $status ) {
		if ( $status ) {
			update_option( $key, true );
		} else {
			delete_option( $key );
		}
	}

	/**
	 * Check connection status.
	 *
	 * @param string   $key     Connection status key.
	 * @param callable $callback Callback to check connection.
	 *
	 * @return bool
	 */
	public function check_connection_status( $key, $callback ) {
		$this->set_connection_status( $key, false );

		$response = call_user_func( $callback );

		if ( is_wp_error( $response ) ) {
			$this->set_connection_status( $key, true );
			return false;
		}

		return true;
	}
}
PK     ˜ŠU]=Žíi5  i5  ,  includes/modules/analytics/class-summary.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Traits\Cache;
use RankMath\Google\Console;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Summary class.
 *
 * @method get_cache_key()
 * @method get_intervals()
 * @method get_sql_date_intervals()
 * @method set_dimension_as_key()
 * @method extract_data_from_mixed()
 * @method get_merged_metrics()
 * @method get_merge_data_graph()
 * @method get_date_array()
 * @method get_graph_data_flat()
 */
class Summary {

	use Cache;

	/**
	 * Start date.
	 *
	 * @var string
	 */
	public $start_date;

	/**
	 * End date.
	 *
	 * @var string
	 */
	public $end_date;

	/**
	 * Compare start date.
	 *
	 * @var string
	 */
	public $compare_start_date;

	/**
	 * Compare end date.
	 *
	 * @var string
	 */
	public $compare_end_date;

	/**
	 * Days.
	 *
	 * @var int
	 */
	public $days;

	/**
	 * Get Widget.
	 *
	 * @return object
	 */
	public function get_widget() {
		global $wpdb;

		$cache_key = Stats::get()->get_cache_key( 'dashboard_stats_widget' );
		$cache     = get_transient( $cache_key );

		if ( false !== $cache ) {
			return $cache;
		}

		if ( ! Console::is_console_connected() ) {
			return (object) [
				'clicks'      => [
					'total'      => 'n/a',
					'previous'   => 'n/a',
					'difference' => 'n/a',
				],
				'impressions' => [
					'total'      => 'n/a',
					'previous'   => 'n/a',
					'difference' => 'n/a',
				],
				'position'    => [
					'total'      => 'n/a',
					'previous'   => 'n/a',
					'difference' => 'n/a',
				],
				'keywords'    => [
					'total'      => 'n/a',
					'previous'   => 'n/a',
					'difference' => 'n/a',
				],
			];
		}

		$stats = DB::analytics()
			->selectSum( 'impressions', 'impressions' )
			->selectSum( 'clicks', 'clicks' )
			->selectAvg( 'position', 'position' )
			->whereBetween( 'created', [ Stats::get()->start_date, Stats::get()->end_date ] )
			->one();

		$old_stats = DB::analytics()
			->selectSum( 'impressions', 'impressions' )
			->selectSum( 'clicks', 'clicks' )
			->selectAvg( 'position', 'position' )
			->whereBetween( 'created', [ Stats::get()->compare_start_date, Stats::get()->compare_end_date ] )
			->one();

		if ( is_null( $stats ) ) {
			$stats = (object) [
				'clicks'      => 0,
				'impressions' => 0,
				'position'    => 0,
			];
		}

		if ( is_null( $old_stats ) ) {
			$old_stats = $stats;
		}

		$stats->clicks = [
			'total'      => (int) $stats->clicks,
			'previous'   => (int) $old_stats->clicks,
			'difference' => $stats->clicks - $old_stats->clicks,
		];

		$stats->impressions = [
			'total'      => (int) $stats->impressions,
			'previous'   => (int) $old_stats->impressions,
			'difference' => $stats->impressions - $old_stats->impressions,
		];

		$stats->position = [
			'total'      => $stats->position ? (float) \number_format( $stats->position, 2 ) : 0,
			'previous'   => $stats->position ? (float) \number_format( $old_stats->position, 2 ) : 0,
			'difference' => $stats->position ? (float) \number_format( $stats->position - $old_stats->position, 2 ) : 0,
		];

		$stats->keywords = $this->get_keywords_summary();

		$stats = apply_filters( 'rank_math/analytics/get_widget', $stats );

		set_transient( $cache_key, $stats, DAY_IN_SECONDS * Stats::get()->days );

		return $stats;
	}

	/**
	 * Get Optimization stats.
	 *
	 * @param string $post_type Selected Post Type.
	 *
	 * @return object
	 */
	public function get_optimization_summary( $post_type = '' ) {
		global $wpdb;

		$cache_group = 'rank_math_optimization_summary';
		$hash_name   = $post_type ? $post_type : 'overall';
		$cache_key   = $this->generate_hash( $hash_name );
		$cache       = $this->get_cache( $cache_key, $cache_group );
		if ( false !== $cache ) {
			return $cache;
		}

		$stats = (object) [
			'good'    => 0,
			'ok'      => 0,
			'bad'     => 0,
			'noData'  => 0,
			'total'   => 0,
			'average' => 0,
		];

		$object_type_sql = $post_type ? ' AND object_subtype = "' . $post_type . '"' : '';
		$data            = DB_Helper::get_results(
			"SELECT COUNT(object_id) AS count,
				CASE
					WHEN seo_score BETWEEN 81 AND 100 THEN 'good'
					WHEN seo_score BETWEEN 51 AND 80 THEN 'ok'
					WHEN seo_score BETWEEN 1 AND 50 THEN 'bad'
					WHEN seo_score = 0 THEN 'noData'
					ELSE 'none'
				END AS type
			FROM {$wpdb->prefix}rank_math_analytics_objects
			WHERE is_indexable = 1
			{$object_type_sql}
			GROUP BY type"
		);

		$total = 0;
		foreach ( $data as $row ) {
			$total              += (int) $row->count;
			$stats->{$row->type} = (int) $row->count;
		}
		$stats->total   = $total;
		$stats->average = 0;

		// Average.
		$query = DB::objects()
		->selectCount( 'object_id', 'total' )
		->where( 'is_indexable', 1 )
		->selectSum( 'seo_score', 'score' );
		if ( $object_type_sql ) {
			$query->where( 'object_subtype', $post_type );
		}

		$average = $query->one();
		if ( $average && $average->total > 0 ) {
			$average->total += property_exists( $stats, 'noData' ) ? $stats->noData : 0; // phpcs:ignore
			$stats->average  = \round( $average->score / $average->total, 2 );
		}

		$this->set_cache( $cache_key, $stats, $cache_group, DAY_IN_SECONDS );

		return $stats;
	}

	/**
	 * Get analytics summary.
	 *
	 * @return object
	 */
	public function get_analytics_summary() {
		$args = [
			'start_date'         => $this->start_date,
			'end_date'           => $this->end_date,
			'compare_start_date' => $this->compare_start_date,
			'compare_end_date'   => $this->compare_end_date,
		];

		$cache_group = 'rank_math_analytics_summary';
		$cache_key   = $this->generate_hash( $args );
		$cache       = $this->get_cache( $cache_key, $cache_group );
		if ( false !== $cache ) {
			return $cache;
		}

		$na    = [
			'total'      => 'n/a',
			'previous'   => 'n/a',
			'difference' => 'n/a',
		];
		$stats = (object) [
			'clicks'      => $na,
			'impressions' => $na,
			'position'    => $na,
			'keywords'    => $na,
			'ctr'         => $na,
		];

		if ( Console::is_console_connected() ) {
			$stats = DB::analytics()
				->selectCount( 'DISTINCT(page)', 'posts' )
				->selectSum( 'impressions', 'impressions' )
				->selectSum( 'clicks', 'clicks' )
				->selectAvg( 'position', 'position' )
				->whereBetween( 'created', [ $this->start_date, $this->end_date ] )
				->one();

			$old_stats = DB::analytics()
				->selectCount( 'DISTINCT(page)', 'posts' )
				->selectSum( 'impressions', 'impressions' )
				->selectSum( 'clicks', 'clicks' )
				->selectAvg( 'position', 'position' )
				->whereBetween( 'created', [ $this->compare_start_date, $this->compare_end_date ] )
				->one();

			$total_ctr    = is_null( $stats->impressions ) ? 'n/a' : round( ( $stats->clicks / $stats->impressions ) * 100, 2 );
			$previous_ctr = is_null( $old_stats->impressions ) ? 'n/a' : ( 0 !== $old_stats->impressions && 'n/a' !== $old_stats->impressions ? round( ( $old_stats->clicks / $old_stats->impressions ) * 100, 2 ) : 0 );

			$stats->ctr = [
				'total'      => $total_ctr,
				'previous'   => $previous_ctr,
				'difference' => 'n/a' !== $total_ctr && 'n/a' !== $previous_ctr ? $total_ctr - $previous_ctr : 'n/a',
			];

			$stats->clicks = [
				'total'      => is_null( $stats->clicks ) ? 'n/a' : (int) $stats->clicks,
				'previous'   => is_null( $old_stats->clicks ) ? 'n/a' : (int) $old_stats->clicks,
				'difference' => is_null( $stats->clicks ) || is_null( $old_stats->clicks ) ? 'n/a' : $stats->clicks - $old_stats->clicks,
			];

			$stats->impressions = [
				'total'      => is_null( $stats->impressions ) ? 'n/a' : (int) $stats->impressions,
				'previous'   => is_null( $old_stats->impressions ) ? 'n/a' : (int) $old_stats->impressions,
				'difference' => is_null( $stats->impressions ) || is_null( $old_stats->impressions ) ? 'n/a' : $stats->impressions - $old_stats->impressions,
			];

			$stats->position = [
				'total'      => is_null( $stats->position ) ? 'n/a' : (float) \number_format( $stats->position, 2 ),
				'previous'   => is_null( $old_stats->position ) ? 'n/a' : (float) \number_format( $old_stats->position, 2 ),
				'difference' => is_null( $stats->position ) || is_null( $old_stats->position ) ? 'n/a' : (float) \number_format( $stats->position - $old_stats->position, 2 ),
			];
		}
		$stats->keywords = $this->get_keywords_summary();
		$stats->graph    = $this->get_analytics_summary_graph();

		$stats = apply_filters( 'rank_math/analytics/summary', $stats );

		$stats = array_filter( (array) $stats );

		$this->set_cache( $cache_key, $stats, $cache_group, DAY_IN_SECONDS );

		return $stats;
	}

	/**
	 * Get posts summary.
	 *
	 * @param string $post_type Selected Post Type.
	 *
	 * @return object
	 */
	public function get_posts_summary( $post_type = '' ) {
		if ( ! Console::is_console_connected() ) {
			return (object) [
				'ctr'         => 'n/a',
				'posts'       => 'n/a',
				'clicks'      => 'n/a',
				'pageviews'   => 'n/a',
				'impressions' => 'n/a',
			];
		}

		$cache_key = $this->get_cache_key( 'posts_summary', $this->days . 'days' );
		$cache     = ! $post_type ? get_transient( $cache_key ) : false;

		if ( false !== $cache ) {
			return $cache;
		}

		global $wpdb;
		$query   = DB::analytics()
			->selectCount( 'DISTINCT(' . $wpdb->prefix . 'rank_math_analytics_gsc.page)', 'posts' )
			->selectSum( 'impressions', 'impressions' )
			->selectSum( 'clicks', 'clicks' )
			->selectAvg( 'ctr', 'ctr' )
			->whereBetween( $wpdb->prefix . 'rank_math_analytics_gsc.created', [ $this->start_date, $this->end_date ] );
		$summary = $query->one();
		$summary = apply_filters( 'rank_math/analytics/posts_summary', $summary, $post_type, $query );
		$summary = wp_parse_args(
			array_filter( (array) $summary ),
			[
				'ctr'         => 'n/a',
				'posts'       => 'n/a',
				'clicks'      => 'n/a',
				'pageviews'   => 'n/a',
				'impressions' => 'n/a',
			]
		);

		set_transient( $cache_key, $summary, DAY_IN_SECONDS );

		return $summary;
	}

	/**
	 * Get keywords summary.
	 *
	 * @return array
	 */
	public function get_keywords_summary() {
		global $wpdb;

		// Get Total Keywords Counts.
		$keywords_count = DB_Helper::get_var(
			$wpdb->prepare(
				"SELECT NULLIF(COUNT(DISTINCT(query)), 0)
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s",
				$this->start_date,
				$this->end_date
			)
		);

		$old_keywords_count = DB_Helper::get_var(
			$wpdb->prepare(
				"SELECT NULLIF(COUNT(DISTINCT(query)), 0)
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s",
				$this->compare_start_date,
				$this->compare_end_date
			)
		);

		$keywords = [
			'total'      => is_null( $keywords_count ) ? 'n/a' : (int) $keywords_count,
			'previous'   => is_null( $old_keywords_count ) ? 'n/a' : (int) $old_keywords_count,
			'difference' => is_null( $keywords_count ) || is_null( $old_keywords_count ) ? 'n/a' : (int) $keywords_count - (int) $old_keywords_count,
		];

		return $keywords;
	}

	/**
	 * Get analytics graph data.
	 *
	 * @return array
	 */
	public function get_analytics_summary_graph() {
		global $wpdb;

		$data = new \stdClass();

		// Step1. Get split date intervals for graph within selected date range.
		$intervals     = $this->get_intervals();
		$sql_daterange = $this->get_sql_date_intervals( $intervals );

		// Step2. Get current analytics data by split date intervals.
		// phpcs:disable
		$query = $wpdb->prepare(
			"SELECT DATE_FORMAT( created, '%%Y-%%m-%%d') as date, SUM(clicks) as clicks, SUM(impressions) as impressions, AVG(position) as position, AVG(ctr) as ctr, {$sql_daterange}
			FROM {$wpdb->prefix}rank_math_analytics_gsc
			WHERE created BETWEEN %s AND %s
			GROUP BY range_group",
			$this->start_date,
			$this->end_date
		);
		$analytics = DB_Helper::get_results( $query );
		$analytics = $this->set_dimension_as_key( $analytics, 'range_group' );
		// phpcs:enable

		// Step2. Get current keyword data by split date intervals. Keyword count should be calculated as total count of most recent date for each split date intervals.
		// phpcs:disable
		$query = $wpdb->prepare(
			"SELECT t.range_group, MAX(CONCAT(t.range_group, ':', t.date, ':', t.keywords )) as mixed FROM
				(SELECT COUNT(DISTINCT(query)) as keywords, Date(created) as date, {$sql_daterange}
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s
				GROUP BY range_group, Date(created)) AS t
			GROUP BY t.range_group",
			$this->start_date,
			$this->end_date
		);
		$keywords = DB_Helper::get_results( $query );
		// phpcs:enable

		$keywords = $this->extract_data_from_mixed( $keywords, 'mixed', ':', [ 'keywords', 'date' ] );
		$keywords = $this->set_dimension_as_key( $keywords, 'range_group' );

		// merge metrics data.
		$data->analytics = [];
		$data->analytics = $this->get_merged_metrics( $analytics, $keywords, true );

		$data->merged = $this->get_date_array(
			$intervals['dates'],
			[
				'clicks'      => [],
				'impressions' => [],
				'position'    => [],
				'ctr'         => [],
				'keywords'    => [],
				'pageviews'   => [],
			]
		);

		// Convert types.
		$data->analytics = array_map( [ $this, 'normalize_graph_rows' ], $data->analytics );

		// Merge for performance.
		$data->merged = $this->get_merge_data_graph( $data->analytics, $data->merged, $intervals['map'] );

		// For developers.
		$data = apply_filters( 'rank_math/analytics/analytics_summary_graph', $data, $intervals );

		$data->merged = $this->get_graph_data_flat( $data->merged );
		$data->merged = array_values( $data->merged );

		return $data;
	}
}
PK     ˜ŠU]òÇNNL  NL  .  includes/modules/analytics/class-analytics.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Google\Api;
use RankMath\Module\Base;
use RankMath\Admin\Page;
use RankMath\Google\Console;
use RankMath\Google\Authentication;
use RankMath\Analytics\Workflow\Jobs;
use RankMath\Analytics\Workflow\OAuth;
use RankMath\Analytics\Workflow\Workflow;

defined( 'ABSPATH' ) || exit;

/**
 * Analytics class.
 */
class Analytics extends Base {

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * Module help.
	 *
	 * @var array
	 */
	public $help = [];

	/**
	 * Module page.
	 *
	 * @var object
	 */
	public $page;

	/**
	 * The Constructor
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() || ! Helper::has_cap( 'analytics' ) ) {
			return;
		}

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'analytics',
				'directory' => $directory,
				'help'      => [
					'title' => esc_html__( 'Analytics', 'seo-by-rank-math' ),
					'view'  => $directory . '/views/help.php',
				],
			]
		);
		parent::__construct();

		new AJAX();
		Api::get();
		Watcher::get();
		Stats::get();
		Jobs::get();
		Workflow::get();

		$this->action( 'admin_notices', 'render_notice' );
		$this->action( 'rank_math/admin/enqueue_scripts', 'enqueue' );
		$this->action( 'admin_enqueue_scripts', 'options_panel_messages' );
		$this->action( 'wp_helpers_notification_dismissed', 'analytic_first_fetch_dismiss' );

		if ( is_admin() ) {
			$this->filter( 'rank_math/settings/general', 'add_settings' );
			$this->action( 'admin_init', 'refresh_token_missing', 25 );
			$this->action( 'admin_init', 'cancel_fetch', 5 );
			$this->action( 'wp_helpers_notification_dismissed', 'notice_dismissible' );

			new OAuth();
		}
	}

	/**
	 * Cancel Fetching of Google.
	 */
	public function cancel_fetch() {
		$cancel = Param::get( 'cancel-fetch', false );
		if (
			empty( $cancel ) ||
			! Param::get( '_wpnonce' ) ||
			! wp_verify_nonce( Param::get( '_wpnonce' ), 'rank_math_cancel_fetch' ) ||
			! Helper::has_cap( 'analytics' )
		) {
			return;
		}

		Workflow::kill_workflows();
	}

	/**
	 * If refresh token missing add notice.
	 */
	public function refresh_token_missing() {
		// Bail if the user is not authenticated at all yet.
		if ( ! Helper::is_site_connected() || ! Authentication::is_authorized() ) {
			return;
		}

		$this->maybe_add_cron_notice();

		$tokens = Authentication::tokens();
		if ( ! empty( $tokens['refresh_token'] ) ) {
			Helper::remove_notification( 'reconnect' );
			return;
		}

		// Show admin notification.
		Helper::add_notification(
			sprintf(
				/* translators: Auth URL */
				'<i class="rm-icon rm-icon-rank-math"></i>' . __( 'It seems like the connection with your Google account & Rank Math needs to be made again. <a href="%s" class="rank-math-reconnect-google">Please click here.</a>', 'seo-by-rank-math' ),
				esc_url( Authentication::get_auth_url() )
			),
			[
				'type'    => 'error',
				'classes' => 'rank-math-error rank-math-notice',
				'id'      => 'reconnect',
			]
		);
	}

	/**
	 * Hide fetch notice.
	 *
	 * @param  string $notification_id Notification id.
	 */
	public function analytic_first_fetch_dismiss( $notification_id ) {
		if ( 'rank_math_analytics_first_fetch' !== $notification_id ) {
			return;
		}

		update_option( 'rank_math_analytics_first_fetch', 'hidden' );
	}

	/**
	 * Admin init.
	 */
	public function render_notice() {
		$this->remove_action( 'admin_notices', 'render_notice' );
		if ( 'fetching' === get_option( 'rank_math_analytics_first_fetch' ) ) {
			$actions = as_get_scheduled_actions(
				[
					'order'  => 'DESC',
					'hook'   => 'rank_math/analytics/clear_cache',
					'status' => \ActionScheduler_Store::STATUS_PENDING,
				]
			);

			if ( empty( $actions ) ) {
				update_option( 'rank_math_analytics_first_fetch', 'hidden' );
				return;
			}

			$action         = current( $actions );
			$schedule       = $action->get_schedule();
			$next_timestamp = $schedule->get_date()->getTimestamp();

			// Calculate extra time needed for the inspections.
			$objects_count   = DB::objects()->selectCount( 'id' )->getVar();
			$daily_api_limit = \RankMath\Analytics\Workflow\Inspections::API_LIMIT;
			$time_gap        = \RankMath\Analytics\Workflow\Inspections::REQUEST_GAP_SECONDS;
			$extra_time      = $objects_count * $time_gap;
			if ( $objects_count > $daily_api_limit ) {
				$extra_time += DAY_IN_SECONDS * floor( $objects_count / $daily_api_limit );
			}

			// phpcs:disable
			$notification   = new \RankMath\Admin\Notifications\Notification(
				/* translators: delete counter */
				sprintf(
					'<svg style="vertical-align: middle; margin-right: 5px" viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg>' .
					esc_html__( 'Rank Math is importing latest data from connected Google Services, %1$s remaining.', 'seo-by-rank-math' ) .
					'&nbsp;<a href="%2$s">' . esc_html__( 'Cancel Fetch', 'seo-by-rank-math' ) . '</a>',
					$this->human_interval( $next_timestamp - gmdate( 'U' ) + $extra_time ),
					esc_url( wp_nonce_url( add_query_arg( 'cancel-fetch', 1 ), 'rank_math_cancel_fetch' ) )
				),
				[
					'type'    => 'info',
					'id'      => 'rank_math_analytics_first_fetch',
					'classes' => 'rank-math-notice',
				]
			);

			echo $notification;
		}
	}

	/**
	 * Store a value in the options table when CRON notice is dismissed to prevent the site from showing it again.
	 *
	 * @param string $notification_id Notification id.
	 */
	public function notice_dismissible( $notification_id ) {
		if ( 'analytics_cron_notice' === $notification_id ) {
			update_option( 'rank_math_analytics_cron_notice_dismissed', true, false );
		}
	}

	/**
	 * Add Notice on Analytics page when CRON is not working on the site.
	 */
	private function maybe_add_cron_notice() {
		if ( ! $this->page->is_current_page() || get_option( 'rank_math_analytics_cron_notice_dismissed' ) ) {
			return;
		}

		if ( Helper::is_cron_enabled() ) {
			Helper::remove_notification( 'analytics_cron_notice' );
			return;
		}

		$message = sprintf(
			/* translators: constant value */
			esc_html__( 'Loopback requests to %s are blocked. This may prevent scheduled tasks from running. Please check your server configuration.', 'seo-by-rank-math' ),
			'<code>wp-cron.php</code>'
		);
		if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
			$message = sprintf(
				/* translators: constant value */
				esc_html__( 'WordPress\'s internal cron system is disabled via %s. Please ensure a real cron job is set up, otherwise scheduled features like Analytics may not work correctly.', 'seo-by-rank-math' ),
				'<code>DISABLE_WP_CRON</code>'
			);
		}

		// Show admin notification.
		Helper::add_notification(
			$message,
			[
				'type'   => 'warning',
				'id'     => 'analytics_cron_notice',
				'screen' => 'rank-math_page_rank-math-analytics',
			]
		);
	}

	/**
	 * Convert an interval of seconds into a two part human friendly string.
	 *
	 * The WordPress human_time_diff() function only calculates the time difference to one degree, meaning
	 * even if an action is 1 day and 11 hours away, it will display "1 day". This function goes one step
	 * further to display two degrees of accuracy.
	 *
	 * Inspired by the Crontrol::interval() function by Edward Dale: https://wordpress.org/plugins/wp-crontrol/
	 *
	 * @param int $interval A interval in seconds.
	 * @param int $periods_to_include Depth of time periods to include, e.g. for an interval of 70, and $periods_to_include of 2, both minutes and seconds would be included. With a value of 1, only minutes would be included.
	 * @return string A human friendly string representation of the interval.
	 */
	private function human_interval( $interval, $periods_to_include = 2 ) {
		$time_periods = [
			[
				'seconds' => YEAR_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s year', '%s years', 'seo-by-rank-math' ),
			],
			[
				'seconds' => MONTH_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s month', '%s months', 'seo-by-rank-math' ),
			],
			[
				'seconds' => WEEK_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s week', '%s weeks', 'seo-by-rank-math' ),
			],
			[
				'seconds' => DAY_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s day', '%s days', 'seo-by-rank-math' ),
			],
			[
				'seconds' => HOUR_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s hour', '%s hours', 'seo-by-rank-math' ),
			],
			[
				'seconds' => MINUTE_IN_SECONDS,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s minute', '%s minutes', 'seo-by-rank-math' ),
			],
			[
				'seconds' => 1,
				/* translators: %s: amount of time */
				'names'   => _n_noop( '%s second', '%s seconds', 'seo-by-rank-math' ),
			],
		];

		if ( $interval <= 0 ) {
			return __( 'Now!', 'seo-by-rank-math' );
		}

		$output = '';

		$time_period_count = count( $time_periods );
		for ( $time_period_index = 0, $periods_included = 0, $seconds_remaining = $interval; $time_period_index < $time_period_count && $seconds_remaining > 0 && $periods_included < $periods_to_include; $time_period_index++ ) {

			$periods_in_interval = floor( $seconds_remaining / $time_periods[ $time_period_index ]['seconds'] );

			if ( $periods_in_interval > 0 ) {
				if ( ! empty( $output ) ) {
					$output .= ' ';
				}
				$output            .= sprintf( translate_nooped_plural( $time_periods[ $time_period_index ]['names'], $periods_in_interval, 'seo-by-rank-math' ), $periods_in_interval );
				$seconds_remaining -= $periods_in_interval * $time_periods[ $time_period_index ]['seconds'];
				++$periods_included;
			}
		}

		return $output;
	}

	/**
	 * Add l18n for the Settings.
	 *
	 * @return void
	 */
	public function options_panel_messages() {
		$screen = get_current_screen();

		if ( 'rank-math_page_rank-math-options-general' !== $screen->id ) {
			return;
		}

		Helper::add_json( 'confirmAction', esc_html__( 'Are you sure you want to do this?', 'seo-by-rank-math' ) );
		Helper::add_json( 'confirmClearImportedData', esc_html__( 'You are about to delete all the previously imported data.', 'seo-by-rank-math' ) );
		Helper::add_json( 'confirmClear90DaysCache', esc_html__( 'You are about to delete your 90 days cache.', 'seo-by-rank-math' ) );
		Helper::add_json( 'confirmDisconnect', esc_html__( 'Are you sure you want to disconnect Google services from your site?', 'seo-by-rank-math' ) );
		Helper::add_json( 'feedbackCacheDeleted', esc_html__( 'Cache deleted.', 'seo-by-rank-math' ) );
	}

	/**
	 * Enqueue scripts for the metabox.
	 */
	public function enqueue() {
		$screen = get_current_screen();

		if ( 'rank-math_page_rank-math-analytics' !== $screen->id ) {
			return;
		}

		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		wp_enqueue_style(
			'rank-math-analytics',
			$uri . '/assets/css/stats.css',
			[],
			rank_math()->version
		);

		wp_register_script(
			'rank-math-analytics',
			$uri . '/assets/js/stats.js',
			[
				'lodash',
				'wp-components',
				'wp-element',
				'wp-i18n',
				'wp-date',
				'wp-api-fetch',
				'wp-html-entities',
				'rank-math-components',
			],
			rank_math()->version,
			true
		);

		wp_set_script_translations( 'rank-math-analytics', 'seo-by-rank-math', plugin_dir_path( __FILE__ ) . 'languages/' );

		$this->action( 'admin_footer', 'dequeue_cmb2' );

		$preference = apply_filters(
			'rank_math/analytics/user_preference',
			[
				'topPosts'        => [
					'seo_score'       => false,
					'schemas_in_use'  => false,
					'impressions'     => true,
					'pageviews'       => true,
					'clicks'          => false,
					'position'        => true,
					'positionHistory' => true,
				],
				'siteAnalytics'   => [
					'seo_score'       => true,
					'schemas_in_use'  => true,
					'impressions'     => false,
					'pageviews'       => true,
					'links'           => true,
					'clicks'          => false,
					'position'        => false,
					'positionHistory' => false,
				],
				'performance'     => [
					'seo_score'       => true,
					'schemas_in_use'  => true,
					'impressions'     => true,
					'pageviews'       => true,
					'ctr'             => false,
					'clicks'          => true,
					'position'        => true,
					'positionHistory' => true,
				],
				'keywords'        => [
					'impressions'     => true,
					'ctr'             => false,
					'clicks'          => true,
					'position'        => true,
					'positionHistory' => true,
				],
				'topKeywords'     => [
					'impressions'     => true,
					'ctr'             => true,
					'clicks'          => true,
					'position'        => true,
					'positionHistory' => true,
				],
				'trackKeywords'   => [
					'impressions'     => true,
					'ctr'             => false,
					'clicks'          => true,
					'position'        => true,
					'positionHistory' => true,
				],
				'rankingKeywords' => [
					'impressions'     => true,
					'ctr'             => false,
					'clicks'          => true,
					'position'        => true,
					'positionHistory' => true,
				],
				'indexing'        => [
					'index_verdict'      => true,
					'indexing_state'     => true,
					'rich_results_items' => true,
					'page_fetch_state'   => false,
				],
			]
		);

		$user_id = get_current_user_id();
		if ( metadata_exists( 'user', $user_id, 'rank_math_analytics_table_columns' ) ) {
			$preference = wp_parse_args(
				get_user_meta( $user_id, 'rank_math_analytics_table_columns', true ),
				$preference
			);
		}

		Helper::add_json( 'userColumnPreference', $preference );

		// Last Updated.
		$updated = get_option( 'rank_math_analytics_last_updated', false );
		$updated = $updated ? date_i18n( get_option( 'date_format' ), $updated ) : '';
		Helper::add_json( 'lastUpdated', $updated );

		Helper::add_json( 'singleImage', rank_math()->plugin_url() . 'includes/modules/analytics/assets/img/single-post-report.jpg' );

		// Index Status tab.
		$enable_index_status = Helper::can_add_index_status();
		Helper::add_json( 'enableIndexStatus', $enable_index_status );
		Helper::add_json( 'viewedIndexStatus', get_option( 'rank_math_viewed_index_status', false ) );

		if ( $enable_index_status ) {
			update_option( 'rank_math_viewed_index_status', true );
		}

		Helper::add_json( 'isRtl', is_rtl() );
	}

	/**
	 * Dequeue cmb2.
	 */
	public function dequeue_cmb2() {
		wp_dequeue_script( 'cmb2-scripts' );
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		$dot_color = '#ed5e5e';
		if ( Console::is_console_connected() ) {
			$dot_color = '#11ac84';
		}

		$this->page = new Page(
			'rank-math-analytics',
			esc_html__( 'Analytics', 'seo-by-rank-math' ) . '<span class="rm-menu-new update-plugins" style="background: ' . $dot_color . '; margin-left: 5px;min-width: 10px;height: 10px;margin-top: 5px;"><span class="plugin-count"></span></span>',
			[
				'position'   => 5,
				'parent'     => 'rank-math',
				'capability' => 'rank_math_analytics',
				'render'     => $this->directory . '/views/dashboard.php',
				'classes'    => [ 'rank-math-page' ],
				'assets'     => [
					'styles'  => [
						'rank-math-common'    => '',
						'rank-math-analytics' => '',
					],
					'scripts' => [
						'rank-math-analytics' => '',
					],
				],
			]
		);
	}

	/**
	 * Add module settings into general optional panel.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_settings( $tabs ) {
		$db_info = \RankMath\Analytics\DB::info();
		$next_fetch = '';
		$actions = as_get_scheduled_actions(
			[
				'order'  => 'DESC',
				'hook'   => 'rank_math/analytics/data_fetch',
				'status' => \ActionScheduler_Store::STATUS_PENDING,
			]
		);
		if ( Authentication::is_authorized() && ! empty( $actions ) ) {
			$action    = current( $actions );
			$schedule  = $action->get_schedule();
			$next_date = $schedule->get_date();
			if ( $next_date ) {
				$next_fetch = sprintf(
					__( 'Next update on %s (in %s)', 'seo-by-rank-math' ),
					date_i18n( 'd M, Y H:m:i', $next_date->getTimestamp() ),
					human_time_diff( $next_date->getTimestamp() )
				);
			}
		}

		Arr::insert(
			$tabs,
			[
				'analytics' => [
					'icon'  => 'rm-icon rm-icon-search-console',
					'title' => esc_html__( 'Analytics', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'  => sprintf( esc_html__( 'See your Google Search Console, Analytics and AdSense data without leaving your WP dashboard. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'analytics-settings', 'Options Panel Analytics Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => $this->directory . '/views/options.php',
					'json'  => apply_filters(
						'rank_math/analytics/options/data',
						[
							'analytics' => \RankMath\Wizard\Search_Console::get_localized_data(),
							'isSettingsPage' => true,
							'homeUrl' => home_url(),
							'fields' => [
								'console_caching_control' => [
									'description' => $this->get_description( 'console_caching_control' ),
								],
							],
							'dbInfo' => [
								'days'    => $db_info['days'] ?? 0,
								'rows'    => Str::human_number( $db_info['rows'] ?? 0 ),
								'size'    => size_format( $db_info['size'] ?? 0 ),
							],
							'isFetching' => 'fetching' === get_option( 'rank_math_analytics_first_fetch' ),
							'nextFetch'  => $next_fetch,
							'isAuthorized' => Authentication::is_authorized(),
						]
					),
				],
			],
			9
		);

		return $tabs;
	}

	/**
	 * Get the description for a field.
	 *
	 * @param string $field_id The field ID.
	 *
	 * @return string
	 */
	public function get_description( $field_id ) {
		if ( ! $field_id ) {
			return '';
		}

		$description = '';

		switch ( $field_id ) {
			case 'console_caching_control':
				// Translators: placeholder is a link to rankmath.com, with "free version" as the anchor text.
				$description = sprintf( __( 'Enter the number of days to keep Analytics data in your database. The maximum allowed days are 90 in the %s. Though, 2x data will be stored in the DB for calculating the difference properly.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'pro', 'Analytics DB Option' ) . '" target="_blank" rel="noopener noreferrer">' . __( 'free version', 'seo-by-rank-math' ) . '</a>' );
				$description = apply_filters_deprecated( 'rank_math/analytics/options/cahce_control/description', [ $description ], '1.0.61.1', 'rank_math/analytics/options/cache_control/description' );
				$description = apply_filters( 'rank_math/analytics/options/cache_control/description', $description );
				break;
			default:
				$description = apply_filters( 'rank_math/analytics/options/' . $field_id . '/description', '' );
				break;
		}

		return $description;
	}

}
PK     ˜ŠU]ŒÛ      $  includes/modules/analytics/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ˜ŠU]ãS‚ý  ý  6  includes/modules/analytics/views/email-reports/cta.phpnu „[µü¤        <?php
/**
 * Analytics Report header template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

use RankMath\KB;

defined( 'ABSPATH' ) || exit;

?>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="cta">
	<tbody>
		<tr class="top">
			<td align="left">
				<a href="<?php KB::the( 'seo-email-reporting', 'Email Report CTA' ); ?>"><?php $this->image( 'rank-math-pro.jpg', 540, 422, __( 'Rank Math PRO', 'seo-by-rank-math' ) ); ?></a>
			</td>
		</tr>
	</tbody>
</table>
PK     ˜ŠU]x?ï£  £  9  includes/modules/analytics/views/email-reports/report.phpnu „[µü¤        <?php
/**
 * Analytics Report email template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;

$this->template_part( 'header' );

?>

<?php $this->template_part( 'header-after' ); ?>

<?php $this->template_part( 'sections/summary' ); ?>

<?php $this->template_part( 'sections/positions' ); ?>

<?php $this->template_part( 'cta' ); ?>

<?php
$this->template_part( 'footer' );
PK     ˜ŠU]�¶×‡³  ³  7  includes/modules/analytics/views/email-reports/stat.phpnu „[µü¤        <?php
/**
 * Analytics Report header template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

$diff_class = 'n/a' !== $diff ? ( $diff > 0 ? 'positive' : 'negative' ) : 'n/a';

if ( ! empty( $invert ) ) {
	$diff_class = 'n/a' !== $diff ? ( $diff < 0 ? 'positive' : 'negative' ) : 'n/a';
}

$diff_sign = '<span class="diff-sign">' . ( 'positive' === $diff_class ? '&#9650;' : '&#9660;' ) . '</span>';

if ( 0.0 === floatval( $diff ) ) {
	$diff_class = 'no-diff';
	$diff_sign  = '';
}

$stat_value = $value;
$stat_diff  = 'n/a' !== $diff ? abs( $diff ) : 'n/a';

// Human number is 'true' by default.
if ( ! isset( $human_number ) || $human_number ) {
	$stat_value = Str::human_number( $stat_value );
	$stat_diff  = Str::human_number( $stat_diff );
}

?>
<span class="stat-value">
	<?php echo esc_html( $stat_value ); ?>
</span>
<span class="stat-diff <?php echo sanitize_html_class( $diff_class ); ?>">
	<?php echo $diff_sign . ' ' . esc_html( $stat_diff ); // phpcs:ignore ?>
</span>

<?php
if ( ! empty( $graph ) && ! empty( $graph_data ) ) {

	$show_graph = false;
	// Check data points.
	foreach ( $graph_data as $key => $value ) {
		if ( ! empty( $value ) ) {
			$show_graph = true;
		}

		// Adjust values.
		if ( ! empty( $graph_modifier ) ) {
			$graph_data[ $key ] = abs( $graph_data[ $key ] + $graph_modifier );
		}
	}

	if ( ! $show_graph ) {
		return;
	}

	// `img` tag size.
	// Actual image size is 3x this.
	$width  = 64;
	$height = 34;

	$this->image( $this->charts_api_url( $graph_data, $width * 3, $height * 3 ), $width, $height, __( 'Data Chart', 'seo-by-rank-math' ), [ 'style' => 'float: right;margin-top: -7px;' ] );
} ?>
PK     ˜ŠU]_´h`í  í  9  includes/modules/analytics/views/email-reports/header.phpnu „[µü¤        <?php
/**
 * Analytics Report header template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;

?><!doctype html>
<html>
	<head>
		<meta name="viewport" content="width=device-width" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title><?php esc_html_e( 'SEO Report of Your Website', 'seo-by-rank-math' ); ?></title>

		<?php $this->template_part( 'style' ); ?>
	</head>
	<body class="">
		<span class="preheader"><?php esc_html_e( 'SEO Report of Your Website', 'seo-by-rank-math' ); ?></span>
		<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body">
			<tr>
				<td>&nbsp;</td>
				<td class="container">
					<div class="content">

						<!-- START CENTERED WHITE CONTAINER -->
						<table role="presentation" class="main" border="0" cellpadding="0" cellspacing="0">

							<!-- START HEADER -->
							<tr>
								<td class="header">
									<table role="presentation" border="0" cellpadding="0" cellspacing="0">
										<tr>
											<td class="logo">
												<a href="###LOGO_LINK###" target="_blank">
													<?php $this->image( 'report-logo.png', 0, 26, __( 'Rank Math', 'seo-by-rank-math' ) ); ?>
												</a>
											</td>
											<td class="period-days">
												<?php // Translators: don't translate the variable names between the #hashes#. ?>
												<?php esc_html_e( 'Last ###PERIOD_DAYS### Days', 'seo-by-rank-math' ); ?>
											</td>
										</tr>
									</table>
								</td>
							</tr>
							<!-- END HEADER -->

							<!-- START MAIN CONTENT AREA -->
							<tr>
								<td class="wrapper">
									<table role="presentation" border="0" cellpadding="0" cellspacing="0">
										<tr>
											<td>
PK     ˜ŠU]|`+[ó  ó  8  includes/modules/analytics/views/email-reports/style.phpnu „[µü¤        <?php
/**
 * Analytics Report email styling.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;
?>
<style>
	/* -------------------------------------
			GLOBAL RESETS
	------------------------------------- */
	/* All the styling goes here */
	img {
		border: none;
		-ms-interpolation-mode: bicubic;
		max-width: 100%; 
	}

	body {
		background-color: #f7f9fb;
		-webkit-font-smoothing: antialiased;
		font-size: 14px;
		line-height: 1.4;
		margin: 0;
		padding: 0;
		-ms-text-size-adjust: 100%;
		-webkit-text-size-adjust: 100%; 
	}

	table {
		border-collapse: separate;
		mso-table-lspace: 0pt;
		mso-table-rspace: 0pt;
		width: 100%;
	}

	table td {
		font-size: 15px;
		vertical-align: top; 
	}

	/* -------------------------------------
			BODY & CONTAINER
	------------------------------------- */

	.body, td {
		font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;
	}

	.body {
		background-color: #F0F4F8;
		width: 100%; 
	}

	/* Set a max-width, and make it display as block. */
	.container {
		display: block;
		margin: 0 auto !important;
		/* makes it centered */
		max-width: 90%;
		padding: 50px 0;
		width: 600px; 
	}

	.content {
		box-sizing: border-box;
		display: block;
		margin: 0 auto;
		width: 100%;
	}

	/* -------------------------------------
			HEADER, FOOTER, MAIN
	------------------------------------- */
	.main {
		background: #ffffff;
		border-radius: 6px;
		width: 100%;
		color: #1a1e22;
	}

	.wrapper {
		box-sizing: border-box;
		padding: 30px 30px 60px;
	}

	.header {
		background: #724BB7;
		background: linear-gradient(90deg, #724BB7 0%, #4098D7 100%);
		border-radius: 8px 8px 0 0;
		height: 76px;
		vertical-align: middle;
		padding: 0 30px;
		color: #ffffff;
	}

	td.logo {
		vertical-align: middle;
	}

	td.logo img {
		width: auto;
		height: 26px;
		margin-top: 6px;
	}

	.period-days {
		text-align: right;
		vertical-align: middle;
		font-weight: 500;
		letter-spacing: 0.5px;
		font-size: 14px;
	}

	.content-block {
		padding-bottom: 10px;
		padding-top: 10px;
	}

	.footer {
		clear: both;
		margin-top: 10px;
		width: 100%; 
	}

	.footer .wrapper {
		padding-bottom: 30px;
	}

	.footer td,
	.footer p,
	.footer span {
		color: #999ba7;
		font-size: 14px; 
	}

	.footer td {
		padding-top: 0;
	}

	.footer p.first {
		padding-top: 20px;
		border-top: 1px solid #e5e5e7;
		line-height: 1.8;
		margin-bottom: 0;
	}

	.footer .rank-math-contact-address {
		font-style: normal;
	}

	.footer p:empty {
		display: none;
	}

	.footer address {
		display: inline-block;
		font-style: normal;
		margin-top: 10px;
	}

	/* -------------------------------------
			TYPOGRAPHY
	------------------------------------- */
	h1,
	h2,
	h3,
	h4 {
		color: #000000;
		font-weight: 600;
		line-height: 1.4;
		margin: 0;
	}

	h1 {
		font-size: 30px;
	}

	p,
	ul,
	ol {
		font-size: 14px;
		font-weight: normal;
		margin: 0;
		margin-bottom: 15px; 
	}
		p li,
		ul li,
		ol li {
			list-style-position: inside;
			margin-left: 5px; 
	}

	a {
		color: #22a8e6;
		text-decoration: none; 
	}

	h2.report-date {
		margin: 25px 0 4px;
		font-size: 18px;
	}

	.site-url {
		color: #595d6f;
		text-decoration: none;
		font-size: 15px;
	}

	.full-report-link {
		vertical-align: bottom;
		text-align: right;
		width: 110px;
	}

	.full-report-link a {
		font-size: 12px;
		font-weight: 600;
		text-decoration: none;
	}

	.full-report-link img {
		vertical-align: -1px;
		margin-left: 2px;
	}

	table.report-error {
		border: 2px solid #f1d400;
		background: #fffdec;
		margin: 10px 0;
	}

	table.report-error td {
		padding: 5px 10px;
	}
	table.stats {
		border-collapse: separate;
		margin-top: 10px;
	}

	table.stats td {
		width: 50%;
		padding: 20px 20px;
		background: #f7f9fb;
		border: 10px solid #fff;
		border-radius: 16px;
	}

	table.stats td.col-2 {
		border-right: none;
	}

	table.stats td.col-1 {
		border-left: none;
	}

	h3 {
		font-size: 13px;
		font-weight: 500;
		color: #565a6b;
		text-transform: uppercase;
	}

	.stat-value {
		color: #000000;
		font-size: 25px;
		font-weight: 700;
	}

	.stat-diff {
		font-size: 14px;
		font-weight: 500;
	}

	.stat-diff.positive {
		color: #339e75;
	}

	span.stat-diff.negative {
		color: #e2454f;
	}

	.stat-diff.no-diff {
		color: #999ba7;
	}

	.diff-sign {
		font-size: 10px;
	}

	.stats-2 {
		margin: 50px 0 24px;
	}

	.stats-2 td.col-1, .stats-2 td.col-2 {
		border-right: 3px solid #f7f9fb;
	}

	.stats-2 td.col-2, .stats-2 td.col-3 {
		padding-left: 40px;
	}

	.cta {
		margin-bottom: 0;
	}

	/* -------------------------------------
			BUTTONS
	------------------------------------- */
	.btn {
		box-sizing: border-box;
		width: 100%;
	}

	.btn > tbody > tr > td {
		padding-bottom: 48px;
		text-align: center;
		padding-top: 34px;
	}

	.btn table {
		width: auto; 
	}

	.btn table td {
		background-color: #ffffff;
		border-radius: 5px;
		text-align: center; 
	}

	.btn a {
		border: none;
		border-radius: 31px;
		box-sizing: border-box;
		color: #59403b;
		cursor: pointer;
		display: inline-block;
		font-size: 16px;
		font-weight: 700;
		margin: 0;
		padding: 18px 44px;
		text-decoration: none;
		text-transform: capitalize;
		background: rgb(47,166,129);
		background: linear-gradient( 0deg, #f7d070 0%, #f7dc6f 100%);
		letter-spacing: 0.7px;
	}

	.btn-primary table td {
		background-color: #3498db;
	}

	/* -------------------------------------
			OTHER STYLES THAT MIGHT BE USEFUL
	------------------------------------- */
	.last {
		margin-bottom: 0; 
	}

	.first {
		margin-top: 0; 
	}

	.align-center {
		text-align: center; 
	}

	.align-right {
		text-align: right; 
	}

	.align-left {
		text-align: left; 
	}

	.clear {
		clear: both; 
	}

	.mt0 {
		margin-top: 0; 
	}

	.mb0 {
		margin-bottom: 0; 
	}

	.preheader {
		color: transparent;
		display: none;
		height: 0;
		max-height: 0;
		max-width: 0;
		opacity: 0;
		overflow: hidden;
		mso-hide: all;
		visibility: hidden;
		width: 0; 
	}

	hr {
		border: 0;
		border-bottom: 1px solid #F0F4F8;
		margin: 20px 0; 
	}

	/* -------------------------------------
			RESPONSIVE AND MOBILE FRIENDLY STYLES
	------------------------------------- */
	@media only screen and (max-width: 620px) {
		table[class=body] h1 {
			font-size: 28px !important;
			margin-bottom: 10px !important; 
		}
		table[class=body] p,
		table[class=body] ul,
		table[class=body] ol,
		table[class=body] td,
		table[class=body] span,
		table[class=body] a {
			font-size: 16px !important; 
		}
		table[class=body] .wrapper,
		table[class=body] .article {
			padding: 10px !important; 
		}
		table[class=body] .content {
			padding: 0 !important; 
		}
		table[class=body] .container {
			padding: 0 !important;
			width: 100% !important; 
		}
		table[class=body] .main {
			border-left-width: 0 !important;
			border-radius: 0 !important;
			border-right-width: 0 !important; 
		}
		table[class=body] .btn table {
			width: 100% !important; 
		}
		table[class=body] .btn a {
			width: 100% !important; 
		}
		table[class=body] .img-responsive {
			height: auto !important;
			max-width: 100% !important;
			width: auto !important; 
		}
	}

	/* -------------------------------------
			PRESERVE THESE STYLES IN THE HEAD
	------------------------------------- */
	@media all {
		.ExternalClass {
			width: 100%; 
		}
		.ExternalClass,
		.ExternalClass p,
		.ExternalClass span,
		.ExternalClass font,
		.ExternalClass td,
		.ExternalClass div {
			line-height: 100%; 
		}
		.rankmath-link a {
			color: inherit !important;
			font-family: inherit !important;
			font-size: inherit !important;
			font-weight: inherit !important;
			line-height: inherit !important;
			text-decoration: none !important; 
		}
		#MessageViewBody a {
			color: inherit;
			text-decoration: none;
			font-size: inherit;
			font-family: inherit;
			font-weight: inherit;
			line-height: inherit;
		}
		.btn-primary table td:hover {
			background-color: #34495e !important; 
		}
		.btn-primary a:hover {
			background-color: #34495e !important;
			border-color: #34495e !important; 
		} 
	}
</style>

<?php $this->template_part( 'pro-style' ); ?>
PK     ˜ŠU]^‡_ç  ç  C  includes/modules/analytics/views/email-reports/sections/summary.phpnu „[µü¤        <?php
/**
 * Analytics Report summary table template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;

?>

<?php if ( $this->get_variable( 'stats_invalid_data' ) ) { ?>
	<?php return; ?>
<?php } ?>

<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="stats">
	<tr>
		<td class="col-1">
			<h3><?php esc_html_e( 'Total Impressions', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value'      => $this->get_variable( 'stats_impressions' ),
					'diff'       => $this->get_variable( 'stats_impressions_diff' ),
					'graph'      => true,
					'graph_data' => $this->get_graph_data( 'impressions' ),
				]
			);
			?>
		</td>
		<td class="col-2">
			<h3><?php esc_html_e( 'Total Clicks', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value'      => $this->get_variable( 'stats_clicks' ),
					'diff'       => $this->get_variable( 'stats_clicks_diff' ),
					'graph'      => true,
					'graph_data' => $this->get_graph_data( 'clicks' ),
				]
			);
			?>
		</td>
	</tr>
	<tr>
		<td class="col-1">
			<h3><?php esc_html_e( 'Total Keywords', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value'      => $this->get_variable( 'stats_keywords' ),
					'diff'       => $this->get_variable( 'stats_keywords_diff' ),
					'graph'      => true,
					'graph_data' => $this->get_graph_data( 'keywords' ),
				]
			);
			?>
		</td>
		<td class="col-2">
			<h3><?php esc_html_e( 'Average Position', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value'          => $this->get_variable( 'stats_position' ),
					'diff'           => $this->get_variable( 'stats_position_diff' ),
					'graph'          => true,
					'graph_data'     => $this->get_graph_data( 'position' ),
					'graph_modifier' => -100,
					'human_number'   => false,
					'invert'         => true,
				]
			);
			?>
		</td>
	</tr>
</table>
PK     ˜ŠU]�‹y;ù  ù  E  includes/modules/analytics/views/email-reports/sections/positions.phpnu „[µü¤        <?php
/**
 * Analytics Report summary table template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;

?>

<?php if ( $this->get_variable( 'stats_invalid_data' ) ) { ?>
	<?php return; ?>
<?php } ?>

<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="stats-2">
	<tr>
		<td class="col-1">
			<h3><?php esc_html_e( 'Top 3 Positions', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value' => $this->get_variable( 'stats_top_3_positions' ),
					'diff'  => $this->get_variable( 'stats_top_3_positions_diff' ),
				]
			);
			?>
		</td>
		<td class="col-2">
			<h3><?php esc_html_e( '4-10 Positions', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value' => $this->get_variable( 'stats_top_10_positions' ),
					'diff'  => $this->get_variable( 'stats_top_10_positions_diff' ),
				]
			);
			?>
		</td>
		<td class="col-3">
			<h3><?php esc_html_e( '11-50 Positions', 'seo-by-rank-math' ); ?></h3>
			<?php
			$this->template_part(
				'stat',
				[
					'value' => $this->get_variable( 'stats_top_50_positions' ),
					'diff'  => $this->get_variable( 'stats_top_50_positions_diff' ),
				]
			);
			?>
		</td>
	</tr>
</table>
PK     ˜ŠU]¿"oq�  �  ?  includes/modules/analytics/views/email-reports/header-after.phpnu „[µü¤        <?php
/**
 * Analytics Report header template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

?>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="report-info">
	<tr>
		<td>
			<h1><?php esc_html_e( 'SEO Report of Your Website', 'seo-by-rank-math' ); ?></h1>
			<h2 class="report-date">###START_DATE### - ###END_DATE###</h2>
			<a href="###SITE_URL###" target="_blank" class="site-url">###SITE_URL_SIMPLE###</a>
		</td>
		<td class="full-report-link">
			<a href="###REPORT_URL###" target="_blank" class="full-report-link">
				<?php esc_html_e( 'FULL REPORT', 'seo-by-rank-math' ); ?>
				<?php $this->image( 'report-icon-external.png', 12, 12, __( 'External Link Icon', 'seo-by-rank-math' ) ); ?>
			</a>
		</td>
	</tr>
</table>

<?php if ( $this->get_variable( 'stats_invalid_data' ) ) { ?>
	<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="report-error">
		<tr>
			<td>
				<h2><?php esc_html_e( 'Uh-oh', 'seo-by-rank-math' ); ?></h2>
				<p><em><?php esc_html_e( 'It seems that there are no stats to show right now.', 'seo-by-rank-math' ); ?></em></p>
				<?php // Translators: placeholders are anchor opening and closing tags. ?>
				<p><?php printf( esc_html__( 'If you can see the site data in your Search Console and Analytics accounts, but not here, then %1$s try reconnecting your account %2$s and make sure that the correct properties are selected in the %1$s Analytics Settings%2$s.', 'seo-by-rank-math' ), '<a href="' . esc_url( Helper::get_settings_url( 'general', 'analytics' ) ) . '">', '</a>' ); ?></p>
			</td>
		</tr>
	</table>
	<?php
}
PK     ˜ŠU]Ôïg  g  9  includes/modules/analytics/views/email-reports/footer.phpnu „[µü¤        <?php
/**
 * Analytics Report email template footer.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

defined( 'ABSPATH' ) || exit;

?>
											</td>
										</tr>
									</table>
								</td>
							</tr>

							<!-- START FOOTER -->
							<tr class="footer">
								<td class="wrapper">
									<p class="first">
										###FOOTER_HTML###
									</p>
								</td>
							</tr>
							<!-- END FOOTER -->

							<!-- END MAIN CONTENT AREA -->

						</table>
						<!-- END CENTERED WHITE CONTAINER -->

					</div>
				</td>
				<td>&nbsp;</td>
			</tr>
		</table>
	</body>
</html>
PK     ˜ŠU]¢jlÙR  R  .  includes/modules/analytics/views/dashboard.phpnu „[µü¤        <?php
/**
 * Dashboard page template.
 *
 * @package    RankMath
 * @subpackage RankMath\Admin
 */

use RankMath\Helper;
use RankMath\Google\Authentication;

defined( 'ABSPATH' ) || exit;

$path = rank_math()->admin_dir() . 'wizard/views/'; // phpcs:ignore
?>
<div class="analytics">

	<span class="wp-header-end"></span>

	<?php
	if ( ! Helper::is_site_connected() ) {
		require_once $path . 'rank-math-connect.php';
	} elseif ( ! Authentication::is_authorized() ) {
		require_once $path . 'google-connect.php';
	} else {
		echo '<div class="" id="rank-math-analytics"></div>';
	}
	?>

</div>
PK     ˜ŠU]0"ºÕ      *  includes/modules/analytics/views/index.phpnu „[µü¤        <?php // Silence is golden.PK     ˜ŠU]Iä%  %  ,  includes/modules/analytics/views/options.phpnu „[µü¤        <?php
/**
 * Search console options.
 *
 * @package Rank_Math
 */

use RankMath\KB;
use RankMath\Helper;
use RankMath\Analytics\DB;
use RankMath\Helpers\Str;
use RankMath\Google\Authentication;

defined( 'ABSPATH' ) || exit;

// phpcs:disable
$actions = \as_get_scheduled_actions(
	[
		'hook' => 'rank_math/analytics/clear_cache',
		'status' => \ActionScheduler_Store::STATUS_PENDING,
	]
);
$db_info        = DB::info();
$is_queue_empty = empty( $actions );
$disable        = ( ! Authentication::is_authorized() || ! $is_queue_empty ) ? true : false;

if ( ! empty( $db_info ) ) {
	$db_info = [
		/* translators: number of days */
		'<div class="rank-math-console-db-info"><i class="rm-icon rm-icon-calendar"></i> ' . sprintf( esc_html__( 'Storage Days: %s', 'seo-by-rank-math' ), '<strong>' . $db_info['days'] . '</strong>' ) . '</div>',
		/* translators: number of rows */
		'<div class="rank-math-console-db-info"><i class="rm-icon rm-icon-faq"></i> ' . sprintf( esc_html__( 'Data Rows: %s', 'seo-by-rank-math' ), '<strong>' . Str::human_number( $db_info['rows'] ) . '</strong>' ) . '</div>',
		/* translators: database size */
		'<div class="rank-math-console-db-info"><i class="rm-icon rm-icon-database"></i> ' . sprintf( esc_html__( 'Size: %s', 'seo-by-rank-math' ), '<strong>' . size_format( $db_info['size'] ) . '</strong>' ) . '</div>',
	];
}

$actions = as_get_scheduled_actions(
	[
		'order'  => 'DESC',
		'hook'   => 'rank_math/analytics/data_fetch',
		'status' => \ActionScheduler_Store::STATUS_PENDING,
	]
);
if ( Authentication::is_authorized() && ! empty( $actions ) ) {
	$action    = current( $actions );
	$schedule  = $action->get_schedule();
	$next_date = $schedule->get_date();
	if ( $next_date ) {
		$cmb->add_field(
			[
				'id'      => 'console_data_empty',
				'type'    => 'raw',
				/* translators: date */
				'content' => sprintf(
					'<span class="next-fetch">' . __( 'Next data fetch on %s', 'seo-by-rank-math' ),
					date_i18n( 'd M, Y H:m:i', $next_date->getTimestamp() ) . '</span>'
				),
			]
		);
	}
}
// phpcs:enable

$cmb->add_field(
	[
		'id'   => 'search_console_ui',
		'type' => 'raw',
		'file' => rank_math()->admin_dir() . '/wizard/views/search-console-ui.php',
	]
);

if ( ! Authentication::is_authorized() ) {
	return;
}

$is_fetching = 'fetching' === get_option( 'rank_math_analytics_first_fetch' );
$buttons     = '<br>' .
	'<button class="button button-small console-cache-delete" data-days="-1">' . esc_html__( 'Delete data', 'seo-by-rank-math' ) . '</button>' .
	'&nbsp;&nbsp;<button class="button button-small console-cache-update-manually"' . ( $disable ? ' disabled="disabled"' : '' ) . '>' . ( $is_queue_empty ? esc_html__( 'Update data manually', 'seo-by-rank-math' ) : esc_html__( 'Fetching in Progress', 'seo-by-rank-math' ) ) . '</button>' .
	'&nbsp;&nbsp;<button class="button button-link-delete button-small cancel-fetch"' . disabled( $is_fetching, false, false ) . '>' . esc_html__( 'Cancel Fetching', 'seo-by-rank-math' ) . '</button>';

$buttons .= '<br>' . join( '', $db_info );

// Translators: placeholder is a link to rankmath.com, with "free version" as the anchor text.
$description = sprintf( __( 'Enter the number of days to keep Analytics data in your database. The maximum allowed days are 90 in the %s. Though, 2x data will be stored in the DB for calculating the difference properly.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'pro', 'Analytics DB Option' ) . '" target="_blank" rel="noopener noreferrer">' . __( 'free version', 'seo-by-rank-math' ) . '</a>' );
$description = apply_filters_deprecated( 'rank_math/analytics/options/cahce_control/description', [ $description ], '1.0.61.1', 'rank_math/analytics/options/cache_control/description' );
$description = apply_filters( 'rank_math/analytics/options/cache_control/description', $description );

$cmb->add_field(
	[
		'id'              => 'console_caching_control',
		'type'            => 'text',
		'name'            => __( 'Analytics Database', 'seo-by-rank-math' ),
		// translators: Anchor text 'free version', linking to pricing page.
		'description'     => $description,
		'default'         => 90,
		'sanitization_cb' => function ( $value ) {
			$max   = apply_filters( 'rank_math/analytics/max_days_allowed', 90 );
			$value = absint( $value );
			if ( $value > $max ) {
				$value = $max;
			}

			return $value;
		},
		'after_field'     => $buttons,
	]
);

$cmb->add_field(
	[
		'id'          => 'analytics_stats',
		'type'        => 'toggle',
		'name'        => __( 'Frontend Stats Bar', 'seo-by-rank-math' ),
		'description' => esc_html__( 'Enable this option to show Analytics Stats on the front just after the admin bar.', 'seo-by-rank-math' ),
		'default'     => 'on',
	]
);

if ( RankMath\Analytics\Email_Reports::are_fields_hidden() ) {
	return;
}

$preview_url  = home_url( '?rank_math_analytics_report_preview=1' );
$report_title = esc_html__( 'Email Reports', 'seo-by-rank-math' );
// Translators: Placeholders are the opening and closing tag for the link.
$description = sprintf( esc_html__( 'Receive periodic SEO Performance reports via email. Once enabled and options are saved, you can see %1$s the preview here%2$s.', 'seo-by-rank-math' ), '<a href="' . esc_url_raw( $preview_url ) . '" target="_blank">', '</a>' );
$cmb->add_field(
	[
		'id'      => 'email_reports_title',
		'type'    => 'raw',
		'content' => sprintf( '<div class="cmb-form cmb-row nopb"><header class="email-reports-title"><h3>%1$s</h3><p class="description">%2$s</p></header></div>', $report_title, $description ),
	]
);

$cmb->add_field(
	[
		'id'          => 'console_email_reports',
		'type'        => 'toggle',
		'name'        => __( 'Email Reports', 'seo-by-rank-math' ),
		'description' => __( 'Turn on email reports.', 'seo-by-rank-math' ),
		'default'     => Helper::get_settings( 'general.console_email_reports' ) ? 'on' : 'off',
		'classes'     => 'nob',
	]
);

$is_pro_active = defined( 'RANK_MATH_PRO_FILE' );
$pro_badge     = '<span class="rank-math-pro-badge"><a href="' . KB::get( 'seo-email-reporting', 'Email Frequency Toggle' ) . '" target="_blank" rel="noopener noreferrer">' . __( 'PRO', 'seo-by-rank-math' ) . '</a></span>';
$args          = [
	'id'         => 'console_email_frequency',
	'type'       => 'select',
	'name'       => esc_html__( 'Email Frequency', 'seo-by-rank-math' ) . ( ! $is_pro_active ? $pro_badge : '' ),
	'desc'       => wp_kses_post( __( 'Email report frequency.', 'seo-by-rank-math' ) ),
	'default'    => 'monthly',
	'options'    => [
		'monthly' => esc_html__( 'Every 30 days', 'seo-by-rank-math' ),
	],
	'dep'        => [ [ 'console_email_reports', 'on' ] ],
	'attributes' => ! $is_pro_active ? [ 'disabled' => 'disabled' ] : [],
	'before_row' => ! $is_pro_active ? '<div class="cmb-redirector-element" data-url="' . KB::get( 'seo-email-reporting', 'Email Frequency Toggle' ) . '">' : '',
	'after_row'  => ! $is_pro_active ? '</div>' : '',
];

$cmb->add_field( $args );
PK     ˜ŠU]¦u°gÄ  Ä  ,  includes/modules/analytics/class-objects.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Objects class.
 *
 * @method set_page_as_key()
 */
class Objects extends Summary {

	/**
	 * Get objects for pages.
	 *
	 * @param  array $pages Array of urls.
	 * @return array
	 */
	public function get_objects( $pages ) {
		if ( empty( $pages ) ) {
			return [];
		}

		$pages = DB::objects()
			->whereIn( 'page', \array_unique( $pages ) )
			->where( 'is_indexable', 1 )
			->get( ARRAY_A );

		return $this->set_page_as_key( $pages );
	}

	/**
	 * Get objects by seo score range filter.
	 *
	 * @param WP_REST_Request $request Filters.
	 *
	 * @return array
	 */
	public function get_objects_by_score( $request ) {
		global $wpdb;

		$orderby   = in_array( $request->get_param( 'orderby' ), [ 'title', 'seo_score', 'created' ], true ) ? $request->get_param( 'orderby' ) : 'created';
		$order     = in_array( $request->get_param( 'order' ), [ 'asc', 'desc' ], true ) ? strtoupper( $request->get_param( 'order' ) ) : 'DESC';
		$post_type = sanitize_key( $request->get_param( 'postType' ) );
		// Construct filters from request parameters.
		$filters    = [
			'good'   => $request->get_param( 'good' ),
			'ok'     => $request->get_param( 'ok' ),
			'bad'    => $request->get_param( 'bad' ),
			'noData' => $request->get_param( 'noData' ),
		];
		$field_name = 'seo_score';
		$per_page   = $request->get_param( 'per_page' ) ? sanitize_text_field( $request->get_param( 'per_page' ) ) : 25;
		$offset     = ( sanitize_text_field( $request->get_param( 'page' ) ) - 1 ) * $per_page;

		// Construct SQL condition based on filter parameters.
		$conditions = [];
		if ( $filters['good'] ) {
			$conditions[] = "{$field_name} BETWEEN 81 AND 100";
		}

		if ( $filters['ok'] ) {
			$conditions[] = "{$field_name} BETWEEN 51 AND 80";
		}

		if ( $filters['bad'] ) {
			$conditions[] = "{$field_name} BETWEEN 1 AND 50";
		}

		if ( $filters['noData'] ) {
			$conditions[] = "{$field_name} = 0";
		}

		$subwhere = '';
		if ( count( $conditions ) > 0 ) {
			$subwhere = implode( ' OR ', $conditions );
			$subwhere = " AND ({$subwhere})";
		}

		if ( $post_type ) {
			$subwhere = $subwhere . ' AND object_subtype = "' . $post_type . '"';
		}

		// Get filtered objects data limited by page param.
		$pages = DB_Helper::get_results(
			"SELECT * FROM {$wpdb->prefix}rank_math_analytics_objects 
			WHERE is_indexable = 1 
			{$subwhere} 
			ORDER BY {$orderby} {$order}
			LIMIT {$offset} , {$per_page}",
			ARRAY_A
		);

		// Get total filtered objects count.
		$total_rows = DB_Helper::get_var(
			"SELECT count(*) FROM {$wpdb->prefix}rank_math_analytics_objects 
			WHERE is_indexable = 1 
			{$subwhere}
			ORDER BY created DESC"
		);

		return [
			'rows'      => $this->set_page_as_key( $pages ),
			'rowsFound' => $total_rows,
		];
	}
}
PK     ˜ŠU]×‚ï�¥  ¥  ,  includes/modules/analytics/class-watcher.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Google\Authentication;
use RankMath\Helpers\Sitepress;

defined( 'ABSPATH' ) || exit;

/**
 * Watcher class.
 */
class Watcher {

	use Hooker;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Watcher
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Watcher ) ) {
			$instance = new Watcher();
			$instance->hooks();
		}

		return $instance;
	}

	/**
	 * Hooks
	 */
	public function hooks() {
		if ( Authentication::is_authorized() ) {
			$this->action( 'save_post', 'update_post_info', 101 );
		}
	}

	/**
	 * Update post info for analytics.
	 *
	 * @param int $post_id Post id.
	 */
	public function update_post_info( $post_id ) {
		$status    = get_post_status( $post_id );
		$post_type = get_post_type( $post_id );
		if (
			'publish' !== $status ||
			wp_is_post_autosave( $post_id ) ||
			wp_is_post_revision( $post_id ) ||
			! Helper::is_post_type_accessible( $post_type )
		) {
			DB::objects()
				->where( 'object_type', 'post' )
				->where( 'object_id', $post_id )
				->delete();
			return;
		}

		// Get primary focus keyword.
		$primary_keyword = get_post_meta( $post_id, 'rank_math_focus_keyword', true );
		if ( $primary_keyword ) {
			$primary_keyword = explode( ',', $primary_keyword );
			$primary_keyword = trim( $primary_keyword[0] );
		}

		$permalink = $this->get_permalink( $post_id );
		$page      = str_replace( Helper::get_home_url(), '', urldecode( $permalink ) );

		// Set argument for object row.
		$object_args = [
			'id'                  => get_post_meta( $post_id, 'rank_math_analytic_object_id', true ),
			'created'             => get_the_modified_date( 'Y-m-d H:i:s', $post_id ),
			'title'               => get_the_title( $post_id ),
			'page'                => $page,
			'object_type'         => 'post',
			'object_subtype'      => $post_type,
			'object_id'           => $post_id,
			'primary_key'         => $primary_keyword,
			'seo_score'           => $primary_keyword ? get_post_meta( $post_id, 'rank_math_seo_score', true ) : 0,
			'schemas_in_use'      => \RankMath\Schema\DB::get_schema_types( $post_id, true, false ),
			'is_indexable'        => Helper::is_post_indexable( $post_id ),
			'pagespeed_refreshed' => 'NULL',
		];

		// Get translated object info in case multi-language plugin is installed.
		$translated_objects = apply_filters( 'rank_math/analytics/get_translated_objects', $post_id );
		if ( false !== $translated_objects && is_array( $translated_objects ) ) {
			// Remove current object info from objects table.
			DB::objects()
				->where( 'object_id', $post_id )
				->delete();

			foreach ( $translated_objects as $obj ) {
				$object_args['title'] = $obj['title'];
				$object_args['page']  = $obj['url'];

				DB::add_object( $object_args );
			}

			// Here we don't need to add `rank_math_analytic_object_id` post meta, because we always remove old translated objects info and add new one, in case of multi-language.
			return;
		}

		// Update post from objects table.
		$id = DB::update_object( $object_args );

		if ( $id > 0 ) {
			update_post_meta( $post_id, 'rank_math_analytic_object_id', $id );
		}
	}

	/**
	 * Get permalink.
	 *
	 * @param int $post_id   Post ID.
	 *
	 * @return string
	 */
	public function get_permalink( $post_id ) {
		$permalink = get_permalink( $post_id );

		if ( ! Sitepress::get()->is_active() ) {
			return $permalink;
		}

		$sitepress = Sitepress::get()->get_var();

		$language_domains = $sitepress->get_setting( 'language_domains', [] );
		if ( ! $language_domains ) {
			return $permalink;
		}

		$details   = apply_filters( 'wpml_post_language_details', null, $post_id );
		$code      = $details['language_code'] ?? '';
		$permalink = apply_filters( 'wpml_permalink', get_the_permalink( $post_id ), $code );
		foreach ( $language_domains as $key => $domain ) {
			$permalink = preg_replace( "#https?://{$domain}#i", '', $permalink );
		}

		return $permalink;
	}
}
PK     ˜ŠU]LI¼¶%  ¶%  .  includes/modules/analytics/rest/class-rest.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Controller;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Rest class.
 */
class Rest extends WP_REST_Controller {

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE . '/an';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		$routes = [
			'dashboard'           => [
				'callback' => [ $this, 'get_dashboard' ],
			],
			'keywordsOverview'    => [
				'callback' => [ $this, 'get_keywords_overview' ],
			],
			'postsSummary'        => [
				'callback' => [ Stats::get(), 'get_posts_summary' ],
			],
			'postsRowsByObjects'  => [
				'callback' => [ Stats::get(), 'get_posts_rows_by_objects' ],
			],
			'post/(?P<id>\d+)'    => [
				'callback' => [ $this, 'get_post' ],
				'args'     => [
					'id' => [
						'description' => esc_html__( 'Post ID.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => true,
					],
				],
			],
			'keywordsSummary'     => [
				'callback' => [ Stats::get(), 'get_analytics_summary' ],
			],
			'analyticsSummary'    => [
				'callback' => [ $this, 'get_analytics_summary' ],
				'args'     => [
					'postType' => [
						'description' => esc_html__( 'Post Type.', 'seo-by-rank-math' ),
						'type'        => 'string',
					],
				],
			],
			'keywordsRows'        => [
				'callback' => [ Stats::get(), 'get_keywords_rows' ],
				'args'     => [
					'page'    => [
						'description' => esc_html__( 'Page number.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => false,
					],
					'perPage' => [
						'description' => esc_html__( 'Results per page.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => false,
					],
					'orderBy' => [
						'description' => esc_html__( 'Order by.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'order'   => [
						'description' => esc_html__( 'Order.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'search'  => [
						'description' => esc_html__( 'Search.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
				],
			],
			'userPreferences'     => [
				'callback' => [ $this, 'update_user_preferences' ],
				'methods'  => WP_REST_Server::CREATABLE,
				'args'     => [
					'preferences' => [
						'description' => esc_html__( 'User preferences.', 'seo-by-rank-math' ),
						'type'        => 'object',
						'required'    => true,
					],
				],
			],
			'inspectionResults'   => [
				'callback' => [ $this, 'get_inspection_results' ],
				'args'     => [
					'page'       => [
						'description' => esc_html__( 'Page number.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => false,
					],
					'perPage'    => [
						'description' => esc_html__( 'Results per page.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => false,
					],
					'orderBy'    => [
						'description' => esc_html__( 'Order by.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'order'      => [
						'description' => esc_html__( 'Order.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'search'     => [
						'description' => esc_html__( 'Search.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'filter'     => [
						'description' => esc_html__( 'Filter.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'filterType' => [
						'description' => esc_html__( 'Filter type.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
				],
			],
			'removeFrontendStats' => [
				'callback' => [ $this, 'remove_frontend_stats' ],
				'methods'  => WP_REST_Server::CREATABLE,
				'args'     => [
					'toggleBar' => [
						'description' => esc_html__( 'Toggle bar.', 'seo-by-rank-math' ),
						'type'        => 'boolean',
						'required'    => false,
					],
					'hide'      => [
						'description' => esc_html__( 'Hide.', 'seo-by-rank-math' ),
						'type'        => 'boolean',
						'required'    => false,
					],
				],
			],
		];

		foreach ( $routes as $route => $args ) {
			$this->register_route( $route, $args );
		}
	}

	/**
	 * Register a route.
	 *
	 * @param string $route  Route.
	 * @param array  $args   Arguments.
	 */
	private function register_route( $route, $args ) {
		$route_defaults = [
			'methods'             => WP_REST_Server::READABLE,
			'permission_callback' => [ $this, 'has_permission' ],
		];

		$route_args = wp_parse_args( $args, $route_defaults );

		register_rest_route( $this->namespace, '/' . $route, $route_args );
	}

	/**
	 * Determines if the current user can manage analytics.
	 *
	 * @return true
	 */
	public function has_permission() {
		return current_user_can( 'rank_math_analytics' );
	}

	/**
	 * Update user preferences.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return boolean|WP_Error True on success, or WP_Error object on failure.
	 */
	public function update_user_preferences( WP_REST_Request $request ) {
		$pref = $request->get_param( 'preferences' );
		if ( empty( $pref ) ) {
			return new WP_Error(
				'param_value_empty',
				esc_html__( 'Sorry, no preference found.', 'seo-by-rank-math' )
			);
		}

		update_user_meta(
			get_current_user_id(),
			'rank_math_analytics_table_columns',
			$pref
		);

		return true;
	}

	/**
	 * Get post data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_post( WP_REST_Request $request ) {
		$id = $request->get_param( 'id' );
		if ( empty( $id ) ) {
			return new WP_Error(
				'param_value_empty',
				esc_html__( 'Sorry, no post id found.', 'seo-by-rank-math' )
			);
		}

		return rest_ensure_response( Stats::get()->get_post( $request ) );
	}

	/**
	 * Get dashboard data.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_dashboard() {
		return rest_ensure_response(
			[
				'stats'        => Stats::get()->get_analytics_summary(),
				'optimization' => Stats::get()->get_optimization_summary(),
			]
		);
	}

	/**
	 * Get analytics summary.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_analytics_summary( WP_REST_Request $request ) { // phpcs:ignore
		$post_type = sanitize_key( $request->get_param( 'postType' ) );
		return rest_ensure_response(
			[
				'summary'      => Stats::get()->get_posts_summary( $post_type ),
				'optimization' => Stats::get()->get_optimization_summary( $post_type ),
			]
		);
	}

	/**
	 * Get keywords overview.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_keywords_overview() {
		return rest_ensure_response(
			apply_filters(
				'rank_math/analytics/keywords_overview',
				[
					'topKeywords'   => Stats::get()->get_top_keywords(),
					'positionGraph' => Stats::get()->get_top_position_graph(),
				]
			)
		);
	}

	/**
	 * Get inspection results: latest result for each post.
	 *
	 * @param WP_REST_Request $request Rest request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_inspection_results( WP_REST_Request $request ) {
		$per_page = 25;
		$rows     = Url_Inspection::get()->get_inspections( $request->get_params(), $per_page );

		if ( empty( $rows ) ) {
			return [
				'rows'      => [ 'response' => 'No Data' ],
				'rowsFound' => 0,
			];
		}

		return rest_ensure_response(
			[
				'rows'      => $rows,
				'rowsFound' => DB::get_inspections_count( $request->get_params() ),
			]
		);
	}

	/**
	 * Remove frontend stats.
	 *
	 * @param WP_REST_Request $request Rest request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function remove_frontend_stats( WP_REST_Request $request ) {
		if ( (bool) $request->get_param( 'toggleBar' ) ) {
			$hide_bar = (bool) $request->get_param( 'hide' );
			$user_id  = get_current_user_id();
			if ( $hide_bar ) {
				return update_user_meta( $user_id, 'rank_math_hide_frontend_stats', true );
			}

			return delete_user_meta( $user_id, 'rank_math_hide_frontend_stats' );
		}

		$all_opts                   = rank_math()->settings->all_raw();
		$general                    = $all_opts['general'];
		$general['analytics_stats'] = 'off';

		Helper::update_all_settings( $general, null, null );

		return true;
	}

	/**
	 * Should update pagespeed record.
	 *
	 * @param  int $id      Database row id.
	 * @return bool
	 */
	private function should_update_pagespeed( $id ) {
		$record = DB::objects()->where( 'id', $id )->one();

		return \time() > ( \strtotime( $record->pagespeed_refreshed ) + ( DAY_IN_SECONDS * 7 ) );
	}
}
PK     ˜ŠU]#üF.3  .3  5  includes/modules/analytics/class-analytics-common.phpnu „[µü¤        <?php
/**
 * Methods for frontend and backend in admin-only module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Traits\Hooker;
use RankMath\Google\Console;
use RankMath\Analytics\Analytics;
use RankMath\Google\Authentication;
use RankMath\Analytics\Workflow\Jobs;
use RankMath\Analytics\Workflow\Workflow;
use RankMath\Helpers\Schedule;

defined( 'ABSPATH' ) || exit;

/**
 * Analytics class.
 */
class Analytics_Common {

	use Hooker;

	/**
	 * The Constructor
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() ) {
			return;
		}

		if ( Helper::has_cap( 'analytics' ) ) {
			$this->action( 'rank_math/admin_bar/items', 'admin_bar_items', 11 );
		}

		// Show Analytics block in the Dashboard widget only if account is connected or user has permissions.
		if ( Helper::has_cap( 'analytics' ) && Authentication::is_authorized() ) {
			$this->action( 'rank_math/dashboard/widget', 'dashboard_widget' );
		}

		new GTag();
		new Analytics_Stats();
		$this->action( 'init', 'maybe_init_email_reports' );
		$this->action( 'init', 'maybe_enable_email_reports', 20 );
		$this->action( 'cmb2_save_options-page_fields_rank-math-options-general_options', 'maybe_update_report_schedule', 20, 3 );
		$this->action( 'rank_math/settings/before_save', 'before_settings_save', 10, 2 );

		Jobs::get();
		Workflow::get();

		$this->action( 'rest_api_init', 'init_rest_api' );
		$this->filter( 'rank_math/webmaster/google_verify', 'add_site_verification' );

		$this->filter( 'rank_math/tools/analytics_clear_caches', 'analytics_clear_caches' );
		$this->filter( 'rank_math/tools/analytics_reindex_posts', 'analytics_reindex_posts' );
		$this->filter( 'rank_math/tools/analytics_fix_collations', 'analytics_fix_collations' );
		$this->filter( 'wp_helpers_notifications_render', 'replace_notice_link', 10, 3 );
	}

	/**
	 * Add stats widget into admin dashboard.
	 */
	public function dashboard_widget() {
		?>
		<h3>
			<?php esc_html_e( 'Analytics', 'seo-by-rank-math' ); ?>
			<span><?php esc_html_e( 'Last 30 Days', 'seo-by-rank-math' ); ?></span>
			<a href="<?php echo esc_url( Helper::get_admin_url( 'analytics' ) ); ?>" class="rank-math-view-report" title="<?php esc_html_e( 'View Report', 'seo-by-rank-math' ); ?>">
				<i class="dashicons dashicons-chart-bar"></i>
			</a>
		</h3>
		<div class="rank-math-dashboard-block items-4">
			<?php
			$items = $this->get_dashboard_widget_items();
			foreach ( $items as $label => $item ) {
				if ( ! $item['value'] ) {
					continue;
				}
				?>
				<div>
					<h4>
						<?php echo esc_html( $item['label'] ); ?>
						<span class="rank-math-tooltip">
							<em class="dashicons-before dashicons-editor-help"></em>
							<span>
								<?php echo esc_html( $item['desc'] ); ?>
							</span>
						</span>
					</h4>
					<?php $this->get_analytic_block( $item['data'], ! empty( $item['revert'] ) ); ?>
				</div>
			<?php } ?>
		</div>
		<?php
	}

	/**
	 * Return site verification code.
	 *
	 * @param string $content If any code from setting.
	 *
	 * @return string
	 */
	public function add_site_verification( $content ) {
		$code = get_transient( 'rank_math_google_site_verification' );

		return ! empty( $code ) ? $code : $content;
	}

	/**
	 * Load the REST API endpoints.
	 */
	public function init_rest_api() {
		$controllers = [
			new Rest(),
		];

		foreach ( $controllers as $controller ) {
			$controller->register_routes();
		}
	}

	/**
	 * Add admin bar item.
	 *
	 * @param Admin_Bar_Menu $menu Menu class instance.
	 */
	public function admin_bar_items( $menu ) {
		$dot_color = '#ed5e5e';
		if ( Console::is_console_connected() ) {
			$dot_color = '#11ac84';
		}

		$menu->add_sub_menu(
			'analytics',
			[
				'title'    => esc_html__( 'Analytics', 'seo-by-rank-math' ) . '<span class="rm-menu-new update-plugins" style="background: ' . $dot_color . ';margin-left: 5px;min-width: 10px;height: 10px;margin-bottom: -1px;display: inline-block;border-radius: 5px;"><span class="plugin-count"></span></span>',
				'href'     => Helper::get_admin_url( 'analytics' ),
				'meta'     => [ 'title' => esc_html__( 'Review analytics and sitemaps', 'seo-by-rank-math' ) ],
				'priority' => 20,
			]
		);
	}

	/**
	 * Purge cache.
	 *
	 * @return string
	 */
	public function analytics_clear_caches() {
		DB::purge_cache();
		return __( 'Analytics cache cleared.', 'seo-by-rank-math' );
	}

	/**
	 * ReIndex posts.
	 *
	 * @return string
	 */
	public function analytics_reindex_posts() {
		// Clear all objects data.
		DB::objects()
			->truncate();

		// Clear all metadata related to object.
		DB::table( 'postmeta' )
			->where( 'meta_key', 'rank_math_analytic_object_id' )
			->delete();

		// Start reindexing posts.
		( new \RankMath\Analytics\Workflow\Objects() )->flat_posts();

		return __( 'Post re-index in progress.', 'seo-by-rank-math' );
	}

	/**
	 * Fix table & column collations.
	 *
	 * @return string
	 */
	public function analytics_fix_collations() {
		$tables = [
			'rank_math_analytics_ga',
			'rank_math_analytics_gsc',
			'rank_math_analytics_keyword_manager',
			'rank_math_analytics_inspections',
		];

		$objects_coll = DB_Helper::get_table_collation( 'rank_math_analytics_objects' );
		$changed      = 0;
		foreach ( $tables as $table ) {
			$changed += (int) DB_Helper::check_collation( $table, 'all', $objects_coll );
		}

		return $changed ? sprintf(
			/* translators: %1$d: number of changes, %2$s: new collation. */
			_n( '%1$d collation changed to %2$s.', '%1$d collations changed to %2$s.', $changed, 'seo-by-rank-math' ),
			$changed,
			'`' . $objects_coll . '`'
		) : __( 'No collation mismatch to fix.', 'seo-by-rank-math' );
	}

	/**
	 * Init Email Reports class if the option is enabled.
	 *
	 * @return void
	 */
	public function maybe_init_email_reports() {
		if ( Helper::get_settings( 'general.console_email_reports' ) ) {
			new Email_Reports();
		}
	}

	/**
	 * Enable the email reports option if the `enable_email_reports` param is set.
	 *
	 * @return void
	 */
	public function maybe_enable_email_reports() {
		if ( ! Helper::has_cap( 'analytics' ) ) {
			return;
		}

		if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( $_GET['_wpnonce'] ), 'enable_email_reports' ) ) {
			return;
		}

		if ( ! empty( $_GET['enable_email_reports'] ) ) {
			$all_opts = rank_math()->settings->all_raw();
			$general  = $all_opts['general'];

			$general['console_email_reports'] = 'on';

			Helper::update_all_settings( $general, null, null );
			rank_math()->settings->reset();
			$this->schedule_email_reporting();

			Helper::remove_notification( 'rank_math_analytics_new_email_reports' );
			Helper::redirect( remove_query_arg( 'enable_email_reports' ) );
			die();
		}
	}

	/**
	 * Add/remove/change scheduled action when the report on/off or the frequency options are changed.
	 *
	 * @param string $type     Settings type.
	 * @param array  $settings Settings data.
	 */
	public function before_settings_save( $type, $settings ) {
		if ( $type !== 'general' ) {
			return;
		}

		$console_email_reports   = Helper::get_settings( 'general.console_email_reports' );
		$console_email_frequency = Helper::get_settings( 'general.console_email_frequency' );
		$updated_email_reports   = isset( $settings['console_email_reports'] ) ? $settings['console_email_reports'] : '';
		$updated_email_frequency = isset( $settings['console_email_frequency'] ) ? $settings['console_email_frequency'] : '';

		// Early bail if our options are not changed.
		if ( $console_email_reports === $updated_email_reports && $console_email_frequency === $updated_email_frequency ) {
			return;
		}

		as_unschedule_all_actions( 'rank_math/analytics/email_report_event', [], 'rank-math' );
		if ( ! $console_email_reports ) {
			return;
		}

		$frequency = $updated_email_frequency ? $updated_email_frequency : 'monthly';
		$this->schedule_email_reporting( $frequency );
	}

	/**
	 * Add/remove/change scheduled action when the report on/off or the frequency options are changed.
	 *
	 * @param int    $object_id The ID of the current object.
	 * @param array  $updated   Array of field IDs that were updated.
	 *                          Will only include field IDs that had values change.
	 * @param object $cmb       CMB object.
	 */
	public function maybe_update_report_schedule( $object_id, $updated, $cmb ) {
		// Early bail if our options are not changed.
		if ( ! in_array( 'console_email_reports', $updated, true ) && ! in_array( 'console_email_frequency', $updated, true ) ) {
			return;
		}

		as_unschedule_all_actions( 'rank_math/analytics/email_report_event', [], 'rank-math' );
		$values = $cmb->get_sanitized_values( $_POST ); // phpcs:ignore
		if ( 'off' === $values['console_email_reports'] ) {
			return;
		}

		$frequency = isset( $values['console_email_frequency'] ) ? $values['console_email_frequency'] : 'monthly';
		$this->schedule_email_reporting( $frequency );
	}

	/**
	 * Replace link inside notice dynamically to avoid issues with the nonce.
	 *
	 * @param string $output Notice output.
	 *
	 * @return string
	 */
	public function replace_notice_link( $output ) {
		$url    = wp_nonce_url( Helper::get_settings_url( 'general', 'analytics' ) . '&enable_email_reports=1', 'enable_email_reports' );
		$output = str_replace( '###ENABLE_EMAIL_REPORTS###', $url, $output );
		return $output;
	}

	/**
	 * Get Dashboard Widget items.
	 */
	private function get_dashboard_widget_items() {
		// Get stats info within last 30 days.
		Stats::get()->set_date_range( '-30 days' );
		$data         = Stats::get()->get_widget();
		$analytics    = get_option( 'rank_math_google_analytic_options' );
		$is_connected = ! empty( $analytics ) && ! empty( $analytics['view_id'] );
		return [
			'search-traffic'    => [
				'label' => __( 'Search Traffic', 'seo-by-rank-math' ),
				'desc'  => __( 'This is the number of pageviews carried out by visitors from Search Engines.', 'seo-by-rank-math' ),
				'value' => $is_connected && defined( 'RANK_MATH_PRO_FILE' ),
				'data'  => isset( $data->pageviews ) ? $data->pageviews : '',
			],
			'total-impressions' => [
				'label' => __( 'Total Impressions', 'seo-by-rank-math' ),
				'desc'  => __( 'How many times your site showed up in the search results.', 'seo-by-rank-math' ),
				'value' => true,
				'data'  => $data->impressions,
			],
			'total-clicks'      => [
				'label' => __( 'Total Clicks', 'seo-by-rank-math' ),
				'desc'  => __( 'How many times your site was clicked on in the search results.', 'seo-by-rank-math' ),
				'value' => ! $is_connected || ( $is_connected && ! defined( 'RANK_MATH_PRO_FILE' ) ),
				'data'  => $data->clicks,
			],
			'total-keywords'    => [
				'label' => __( 'Total Keywords', 'seo-by-rank-math' ),
				'desc'  => __( 'Total number of keywords your site ranks for within top 100 positions.', 'seo-by-rank-math' ),
				'value' => true,
				'data'  => $data->keywords,
			],
			'average-position'  => [
				'label'  => __( 'Average Position', 'seo-by-rank-math' ),
				'desc'   => __( 'Average position of all the keywords ranking within top 100 positions.', 'seo-by-rank-math' ),
				'value'  => true,
				'revert' => true,
				'data'   => $data->position,
			],
		];
	}

	/**
	 * Get analytic block
	 *
	 * @param object  $item   Item.
	 * @param boolean $revert Flag whether to revert difference icon or not.
	 */
	private function get_analytic_block( $item, $revert = false ) {
		$total       = isset( $item['total'] ) && 'n/a' !== $item['total'] ? abs( $item['total'] ) : 0;
		$difference  = isset( $item['difference'] ) && 'n/a' !== $item['difference'] ? abs( $item['difference'] ) : 0;
		$is_negative = isset( $item['difference'] ) && 'n/a' !== $item['difference'] && abs( $item['difference'] ) !== $item['difference'];
		$diff_class  = 'up';
		if ( ( ! $revert && $is_negative ) || ( $revert && ! $is_negative && $item['difference'] > 0 ) ) {
			$diff_class = 'down';
		}
		if ( 0.0 === floatval( $difference ) ) {
			$diff_class = 'no-diff';
		}
		?>
		<div class="rank-math-item-numbers">
			<strong class="text-large" title="<?php echo esc_html( Str::human_number( $total ) ); ?>"><?php echo esc_html( Str::human_number( $total ) ); ?></strong>
			<span class="rank-math-item-difference <?php echo esc_attr( $diff_class ); ?>" title="<?php echo esc_html( Str::human_number( $difference ) ); ?>"><?php echo esc_html( Str::human_number( $difference ) ); ?></span>
		</div>
		<?php
	}

	/**
	 * Schedule Email Reporting.
	 *
	 * @param string $frequency  The frequency in which the action should run.
	 * @return void
	 */
	private function schedule_email_reporting( $frequency = 'monthly' ) {
		$interval_days = Email_Reports::get_period_from_frequency( $frequency );
		$midnight      = strtotime( 'tomorrow midnight' );
		Schedule::recurring_action( $midnight, $interval_days * DAY_IN_SECONDS, 'rank_math/analytics/email_report_event', [], 'rank-math' );
	}
}
PK     ˜ŠU](›	ƒDj  Dj  *  includes/modules/analytics/class-stats.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Google\Analytics;
use RankMathPro\Analytics\Pageviews;
use RankMath\Google\Console;

defined( 'ABSPATH' ) || exit;

/**
 * Stats class.
 */
class Stats extends Keywords {

	use Hooker;

	/**
	 * Start timestamp.
	 *
	 * @var int
	 */
	public $start = 0;

	/**
	 * End timestamp.
	 *
	 * @var int
	 */
	public $end = 0;

	/**
	 * Start date.
	 *
	 * @var string
	 */
	public $start_date = '';

	/**
	 * End date.
	 *
	 * @var string
	 */
	public $end_date = '';

	/**
	 * Compare Start date.
	 *
	 * @var string
	 */
	public $compare_start_date = '';

	/**
	 * Compare End date.
	 *
	 * @var string
	 */
	public $compare_end_date = '';

	/**
	 * Number of days.
	 *
	 * @var int
	 */
	public $days = 0;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Stats
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Stats ) ) {
			$instance = new Stats();
			$instance->set_date_range();
		}

		return $instance;
	}

	/**
	 * Set date range.
	 *
	 * @param string $range Range of days.
	 */
	public function set_date_range( $range = false ) {
		// Shift 3 days prior.
		$subtract = DAY_IN_SECONDS * 3;
		$end      = strtotime( $this->do_filter( 'analytics/end_date', 'today' ) ) - $subtract;
		$start    = strtotime( false !== $range ? $range : $this->get_date_from_cookie( 'date_range', '-30 days' ), $end ) - $subtract;

		// Timestamp.
		$this->end   = Helper::get_midnight( $end );
		$this->start = Helper::get_midnight( $start );

		// Period.
		$this->end_date   = Helper::get_date( 'Y-m-d 23:59:59', $end, false, true );
		$this->start_date = Helper::get_date( 'Y-m-d 00:00:00', $start, false, true );

		// Compare date.
		$this->days               = ceil( abs( $end - $start ) / DAY_IN_SECONDS );
		$this->compare_end_date   = $start - DAY_IN_SECONDS;
		$this->compare_start_date = $this->compare_end_date - ( $this->days * DAY_IN_SECONDS );
		$this->compare_end_date   = Helper::get_date( 'Y-m-d 23:59:59', $this->compare_end_date, false, true );
		$this->compare_start_date = Helper::get_date( 'Y-m-d 00:00:00', $this->compare_start_date, false, true );
	}

	/**
	 * Get date intervals for graph.
	 *
	 * @return array
	 */
	public function get_intervals() {
		$range    = $this->get_date_from_cookie( 'date_range', '-30 days' );
		$interval = [
			'-7 days'   => '0 days',
			'-15 days'  => '-3 days',
			'-30 days'  => '-6 days',
			'-3 months' => '-6 days',
			'-6 months' => '-30 days',
			'-1 year'   => '-30 days',
		];

		$ticks = [
			'-7 days'   => 7,
			'-15 days'  => 5,
			'-30 days'  => 5,
			'-3 months' => 13,
			'-6 months' => 6,
			'-1 year'   => 12,
		];

		$addition = [
			'-7 days'   => 0,
			'-15 days'  => DAY_IN_SECONDS,
			'-30 days'  => DAY_IN_SECONDS,
			'-3 months' => -DAY_IN_SECONDS / 6,
			'-6 months' => DAY_IN_SECONDS / 2,
			'-1 year'   => 0,
		];

		$ticks    = $ticks[ $range ];
		$interval = $interval[ $range ];
		$addition = $addition[ $range ];

		$map   = [];
		$dates = [];

		$end   = $this->end;
		$start = strtotime( $interval, $end );

		for ( $i = 0; $i < $ticks; $i++ ) {
			$end_date   = Helper::get_date( 'Y-m-d', $end, false, true );
			$start_date = Helper::get_date( 'Y-m-d', $start, false, true );

			$dates[ $end_date ] = [
				'start'            => $start_date,
				'end'              => $end_date,
				'formatted_date'   => Helper::get_date( 'd M, Y', $end ),
				'formatted_period' => Helper::get_date( 'd M', $start ) . ' - ' . Helper::get_date( 'd M, Y', $end ),
			];

			$map[ $start_date ] = $end_date;
			for ( $j = 1; $j < 32; $j++ ) {
				$date = Helper::get_date( 'Y-m-d', strtotime( $j . ' days', $start ), false, true );
				if ( $start_date === $end_date ) {
					break;
				}

				if ( $date === $end_date ) {
					break;
				}

				$map[ $date ] = $end_date;
			}
			$map[ $end_date ] = $end_date;

			$end   = \strtotime( '-1 days', $start );
			$start = \strtotime( $interval, $end + $addition );
		}
		return [
			'map'   => $map,
			'dates' => \array_reverse( $dates ),
		];
	}

	/**
	 * Get date intervals for SQL query.
	 *
	 * @param  array  $intervals Date Intervals.
	 * @param  string $column Column name to check.
	 * @param  string $newcolumn Column name to return.
	 * @return string
	 */
	public function get_sql_date_intervals( $intervals, $column = 'created', $newcolumn = 'range_group' ) {
		$sql_parts = [];
		array_push( $sql_parts, 'CASE' );

		$index = 1;
		foreach ( $intervals['dates'] as $date_range ) {
			$start_date = $date_range['start'] . ' 00:00:00';
			$end_date   = $date_range['end'] . ' 23:59:59';

			array_push( $sql_parts, sprintf( "WHEN %s BETWEEN '%s' AND '%s' THEN 'range%d'", $column, $start_date, $end_date, $index ) );

			++$index;
		}

		array_push( $sql_parts, "ELSE 'none'" );
		array_push( $sql_parts, sprintf( "END AS '%s'", $newcolumn ) );

		return implode( ' ', $sql_parts );
	}

	/**
	 * Get date array
	 *
	 * @param  array $dates         Dates.
	 * @param  array $default_value Default value.
	 * @return array
	 */
	public function get_date_array( $dates, $default_value ) {
		$data = [];
		foreach ( $dates as $date => $d ) {
			$data[ $date ]                  = $default_value;
			$data[ $date ]['date']          = $date;
			$data[ $date ]['dateFormatted'] = $d['start'] === $d['end'] ? $d['formatted_date'] : $d['formatted_period'];
			$data[ $date ]['formattedDate'] = $d['formatted_date'];
		}

		return $data;
	}

	/**
	 * Convert data to proper type.
	 *
	 * @param  array $row Row to normalize.
	 * @return array
	 */
	public function normalize_graph_rows( $row ) {
		foreach ( $row as $col => $val ) {
			if ( in_array( $col, [ 'query', 'page', 'date', 'created', 'dateFormatted' ], true ) ) {
				continue;
			}

			if ( in_array( $col, [ 'ctr', 'position', 'earnings' ], true ) ) {
				$row->$col = round( $row->$col, 0 );
				continue;
			}

			$row->$col = absint( $row->$col );
		}

		return $row;
	}

	/**
	 * Remove unnecessary graph rows.
	 *
	 * @param  array $rows Rows to filter.
	 * @return array
	 */
	public function filter_graph_rows( $rows ) {
		foreach ( $rows as $key => $row ) {
			if ( isset( $row->range_group ) && 'none' === $row->range_group ) {
				unset( $rows[ $key ] );
			}
		}
		return $rows;
	}

	/**
	 * Extract proper data.
	 *
	 * @param  array  $rows   Data rows.
	 * @param  string $column Column name contains mixed data.
	 * @param  string $sep    Separator for mixed data.
	 * @param  array  $keys   Column array to extract.
	 * @return array
	 */
	public function extract_data_from_mixed( $rows, $column, $sep, $keys ) {
		foreach ( $rows as $index => &$row ) {
			if ( ! isset( $row->$column ) ) {
				continue;
			}

			$mixed       = explode( $sep, $row->$column );
			$mixed_count = count( $mixed );
			if ( ! $mixed_count ) {
				continue;
			}

			foreach ( $keys as $key_idx => $key ) {
				if ( 'position' === $key ) {
					// Should subtract the position value from 100. The position data was inverted before call this function.
					$value = 100 - (int) $mixed[ $mixed_count - $key_idx - 1 ];
				} else {
					$value = $mixed[ $mixed_count - $key_idx - 1 ];
				}
				$row->$key = $value;
			}

			unset( $row->$column );
		}

		return $rows;
	}

	/**
	 * Merge two metrics array into one
	 *
	 * @param  array   $metrics_rows1 Metrics Rows to merge.
	 * @param  array   $metrics_rows2 Metrics Rows to merge.
	 * @param  boolean $has_traffic   Flag to include/exclude traffic data.
	 * @return array
	 */
	public function get_merged_metrics( $metrics_rows1, $metrics_rows2, $has_traffic = false ) {
		$data = [];

		// Construct base data array.
		$base_array = [
			'position'        => 0,
			'diffPosition'    => 0,
			'clicks'          => 0,
			'diffClicks'      => 0,
			'impressions'     => 0,
			'diffImpressions' => 0,
			'ctr'             => 0,
			'diffCtr'         => 0,
		];

		if ( $has_traffic ) {
			$base_array['pageviews']  = 0;
			$base_array['difference'] = 0;
		}

		// Merge first array and second array into base array.
		foreach ( $metrics_rows1 as $key => $row ) {
			if ( isset( $metrics_rows2[ $key ] ) ) {
				if ( is_object( $row ) ) {
					$data[ $key ] = (object) array_merge( $base_array, (array) $row, (array) $metrics_rows2[ $key ] );
				} else {
					$data[ $key ] = array_merge( $base_array, $row, $metrics_rows2[ $key ] );
				}
				unset( $metrics_rows2[ $key ] );
			} else {
				$data[ $key ] = array_merge( $base_array, $row );
			}
		}

		// Merge remaining items from second array into base array.
		foreach ( $metrics_rows2 as $key => $row ) {
			if ( is_object( $row ) ) {
				$metrics_rows2[ $key ] = (object) array_merge( $base_array, (array) $row );
			} else {
				$metrics_rows2[ $key ] = array_merge( $base_array, $row );
			}
		}

		return array_merge( $data, $metrics_rows2 );
	}

	/**
	 * Merge data graph by date.
	 *
	 * @param  array $rows Rows to merge.
	 * @param  array $data Data array.
	 * @param  array $map  Interval map.
	 * @return array
	 */
	public function get_merge_data_graph( $rows, $data, $map ) {
		foreach ( $rows as $row ) {
			if ( ! isset( $map[ $row->date ] ) ) {
				continue;
			}

			$date = $map[ $row->date ];
			foreach ( $row as $key => $value ) {
				if ( 'date' === $key || 'created' === $key ) {
					continue;
				}

				// trick to invert Position Graph YAxis.
				if ( 'position' === $key ) {
					$value = 0 - $value;
				}
				$data[ $date ][ $key ][] = $value;
			}
		}

		return $data;
	}

	/**
	 * Flat graph data.
	 *
	 * @param  array $rows Graph data.
	 * @return array
	 */
	public function get_graph_data_flat( $rows ) {
		foreach ( $rows as &$row ) {
			if ( isset( $row['clicks'] ) ) {
				$row['clicks'] = \array_sum( $row['clicks'] );
			}

			if ( isset( $row['impressions'] ) ) {
				$row['impressions'] = \array_sum( $row['impressions'] );
			}

			if ( isset( $row['earnings'] ) ) {
				$row['earnings'] = \array_sum( $row['earnings'] );
			}

			if ( isset( $row['pageviews'] ) ) {
				$row['pageviews'] = \array_sum( $row['pageviews'] );
			}

			if ( isset( $row['ctr'] ) ) {
				$row['ctr'] = empty( $row['ctr'] ) ? 0 : ceil( array_sum( $row['ctr'] ) / count( $row['ctr'] ) );
			}

			if ( isset( $row['position'] ) ) {
				if ( empty( $row['position'] ) ) {
					unset( $row['position'] );
				} else {
					$row['position'] = ceil( array_sum( $row['position'] ) / count( $row['position'] ) );
				}
			}

			if ( isset( $row['keywords'] ) ) {
				$row['keywords'] = empty( $row['keywords'] ) ? 0 : ceil( array_sum( $row['keywords'] ) / count( $row['keywords'] ) );
			}
		}

		return $rows;
	}

	/**
	 * Get filter data.
	 *
	 * @param string $filter        Filter key.
	 * @param string $default_value Filter default value.
	 *
	 * @return mixed
	 */
	public function get_date_from_cookie( $filter, $default_value ) {
		$cookie_key = 'rank_math_analytics_' . $filter;
		$new_value  = sanitize_title( Param::post( $filter ) );
		if ( $new_value ) {
			setcookie( $cookie_key, $new_value, time() + ( HOUR_IN_SECONDS * 30 ), COOKIEPATH, COOKIE_DOMAIN, false, true );
			return $new_value;
		}

		if ( ! empty( $_COOKIE[ $cookie_key ] ) ) {
			return sanitize_text_field( wp_unslash( $_COOKIE[ $cookie_key ] ) );
		}

		return $default_value;
	}

	/**
	 * Get analytics data.
	 *
	 * @param  array $args Array of arguments.
	 * @return array
	 */
	public function get_analytics_data( $args = [] ) {
		global $wpdb;

		$args = wp_parse_args(
			$args,
			[
				'action'    => '',
				'keyword'   => '',
				'dimension' => 'page',
				'order'     => 'DESC',
				'orderBy'   => 'diffPosition',
				'objects'   => false,
				'pageview'  => false,
				'where'     => '',
				'sub_where' => '',
				'pages'     => [],
				'type'      => '',
				'offset'    => 0,
				'perpage'   => 5,
			]
		);

		$action         = $args['action'];
		$dimension      = $args['dimension'];
		$type           = $args['type'];
		$offset         = $args['offset'];
		$perpage        = $args['perpage'];
		$order_by_field = $args['orderBy'];
		$sub_where      = $args['sub_where'];

		$order_position_fields = [ 'position', 'diffPosition' ];
		$order_metrics_fields  = [ 'clicks', 'diffClicks', 'impressions', 'diffImpressions', 'ctr', 'diffCtr' ];

		if ( in_array( $order_by_field, $order_position_fields, true ) ) {
			// In case order by position related fields, get position data first.
			$positions = $this->get_position_data_by_dimension( $args );

			// Filter position data by condition.
			$positions = $this->filter_analytics_data( $positions, $args );

			// Get dimension list from above result.
			$dimensions = wp_list_pluck( $positions, $dimension );
			$dimensions = array_map( 'esc_sql', $dimensions );

			// Get metrics data based on above dimension list.
			$metrics_args = [
				'dimension' => $dimension,
				'sub_where' => ' AND ' . $dimension . " IN ('" . join( "', '", $dimensions ) . "')",
			];

			if ( 'get_keyword_pages' === $action ) {
				$metrics_args['sub_where'] = $metrics_args['sub_where'] . ' AND query = "' . $args['keyword'] . '"';
			}
			$metrics = $this->get_metrics_data_by_dimension( $metrics_args );

			// Merge above two data into one.
			$rows = $this->get_merged_metrics( $positions, $metrics, true );

		} elseif ( in_array( $order_by_field, $order_metrics_fields, true ) ) {
			// In case order by fields which are not related with position, get metrics data first.
			$metrics = $this->get_metrics_data_by_dimension( $args );

			// Filter metrics data by condition.
			$metrics = $this->filter_analytics_data( $metrics, $args );

			// Get dimension list from above result.
			$dimensions = wp_list_pluck( $metrics, $dimension );
			$dimensions = array_map( 'esc_sql', $dimensions );

			// Get position data based on above dimension list.
			$positions = $this->get_position_data_by_dimension(
				[
					'dimension' => $dimension,
					'sub_where' => ' AND ' . $dimension . " IN ('" . join( "', '", $dimensions ) . "') " . $sub_where,
				]
			);

			// Merge above two data into one.
			$rows = $this->get_merged_metrics( $metrics, $positions, true );
		} else {
			// Get position data and other metrics data separately.
			$positions = $this->get_position_data_by_dimension( $args );
			$metrics   = $this->get_metrics_data_by_dimension( $args );

			// Merge above two data into one.
			$rows = $this->get_merged_metrics( $positions, $metrics, true );

			// Filter array by condition.
			$rows = $this->filter_analytics_data( $rows, $args );
		}

		$page_urls = \array_unique( \array_merge( \array_keys( $rows ), $args['pages'] ) );

		if ( $args['objects'] ) {
			$objects = $this->get_objects( $page_urls );
		}
		foreach ( $rows as $page => $row ) {
			$rows[ $page ]['pageviews'] = [
				'total'      => 0,
				'difference' => 0,
			];

			$rows[ $page ]['clicks'] = [
				'total'      => (int) $rows[ $page ]['clicks'],
				'difference' => (int) $rows[ $page ]['diffClicks'],
			];

			$rows[ $page ]['impressions'] = [
				'total'      => (int) $rows[ $page ]['impressions'],
				'difference' => (int) $rows[ $page ]['diffImpressions'],
			];

			$rows[ $page ]['position'] = [
				'total'      => (float) $rows[ $page ]['position'],
				'difference' => (float) $rows[ $page ]['diffPosition'],
			];

			$rows[ $page ]['ctr'] = [
				'total'      => (float) $rows[ $page ]['ctr'],
				'difference' => (float) $rows[ $page ]['diffCtr'],
			];

			unset(
				$rows[ $page ]['diffClicks'],
				$rows[ $page ]['diffImpressions'],
				$rows[ $page ]['diffPosition'],
				$rows[ $page ]['diffCtr'],
				$rows[ $page ]['difference']
			);
		}

		if ( $args['objects'] && ! empty( $objects ) ) {
			foreach ( $objects as $object ) {
				$page = $object['page'];
				if ( ! isset( $rows[ $page ] ) ) {
					$rows[ $page ] = [];
				}
				$rows[ $page ] = array_merge( $rows[ $page ], $object );
			}
		}

		return $this->do_filter( 'analytics/rows', $rows, $args, $page_urls );
	}

	/**
	 * Get position data.
	 *
	 * @param array $args Argument array.
	 * @return array
	 */
	public function get_position_data_by_dimension( $args = [] ) {
		if ( ! Console::is_console_connected() ) {
			return [];
		}

		global $wpdb;

		$args = wp_parse_args(
			$args,
			[
				'dimension' => 'page',
				'where'     => '',
				'sub_where' => '',
			]
		);

		$dimension = $args['dimension'];
		$where     = $args['where'];
		$sub_where = $args['sub_where'];

		if ( 'page' === $dimension ) {
			// In case dimension is set as 'page', position data for each page will be top position of last ranked date.
			// That is, among all the position value from the last date of the page, the top position(smallest position value) value will be the result.

			// Get current position data.
			$positions = DB_Helper::get_results(
				$wpdb->prepare(
					"SELECT %i, MAX(CONCAT(%i, ':', DATE(`created`), ':', LPAD((100 - `position`), 3, '0'))) as uid
				FROM {$wpdb->prefix}rank_math_analytics_gsc 
				WHERE `created` BETWEEN %s AND %s {$sub_where}
				GROUP BY %i",
					$dimension,
					$dimension,
					$this->start_date,
					$this->end_date,
					$dimension
				)
			);

			// Get old position data.
			$old_positions = DB_Helper::get_results(
				$wpdb->prepare(
					"SELECT %i, MAX(CONCAT(%i, ':', DATE(`created`), ':', LPAD((100 - `position`), 3, '0'))) as uid
				FROM {$wpdb->prefix}rank_math_analytics_gsc 
				WHERE `created` BETWEEN %s AND %s {$sub_where}
				GROUP BY %i",
					$dimension,
					$dimension,
					$this->compare_start_date,
					$this->compare_end_date,
					$dimension,
				)
			);

			// Extract proper position data.
			$positions     = $this->extract_data_from_mixed( $positions, 'uid', ':', [ 'position', 'date' ] );
			$old_positions = $this->extract_data_from_mixed( $old_positions, 'uid', ':', [ 'position', 'date' ] );

			// Set 'page' as key.
			$positions     = $this->set_dimension_as_key( $positions, $dimension );
			$old_positions = $this->set_dimension_as_key( $old_positions, $dimension );

			// Calculate position difference, merge old into current position data array.
			foreach ( $positions as $page => &$row ) {
				$row = (array) $row; // force to convert as array.
				if ( ! isset( $old_positions[ $page ] ) ) {
					$old_position_value = 100; // Should set as 100 here to get correct position difference.
				} else {
					$old_position_value = $old_positions[ $page ]->position;
				}

				$row['diffPosition'] = $row['position'] - $old_position_value;
			}
		} else {
			// In case dimension is not 'page', position data for each dimension will be most recent position value.

			// Step1. Get most recent row id for each dimension for current data.
			$ids = DB_Helper::get_results(
				$wpdb->prepare(
					"SELECT t1.id as id
				FROM {$wpdb->prefix}rank_math_analytics_gsc t1
				INNER JOIN (
					SELECT query, MAX(created) as latest_created
					FROM {$wpdb->prefix}rank_math_analytics_gsc
					WHERE created BETWEEN %s AND %s {$sub_where} GROUP BY %i
				) t2 ON t1.query = t2.query AND t1.created = t2.latest_created",
					$this->start_date,
					$this->end_date,
					$dimension
				)
			);

			// Step2. Get id list from above result.
			$ids       = wp_list_pluck( $ids, 'id' );
			$ids_where = " AND id IN ('" . join( "', '", $ids ) . "')";

			// Step3. Get most recent row id for each dimension for compare data.
			$old_ids = DB_Helper::get_results(
				$wpdb->prepare(
					"SELECT t1.id as id
				FROM {$wpdb->prefix}rank_math_analytics_gsc t1
				INNER JOIN (
					SELECT query, MAX(created) as latest_created
					FROM {$wpdb->prefix}rank_math_analytics_gsc
					WHERE created BETWEEN %s AND %s {$sub_where} GROUP BY %i
				) t2 ON t1.query = t2.query AND t1.created = t2.latest_created",
					$this->compare_start_date,
					$this->compare_end_date,
					$dimension
				)
			);

			// Step4. Get id list from above result.
			$old_ids       = wp_list_pluck( $old_ids, 'id' );
			$old_ids_where = " AND id IN ('" . join( "', '", $old_ids ) . "')";

			// Step5. Get position and difference data based on above id list.
			$positions = DB_Helper::get_results(
				$wpdb->prepare(
					"SELECT
						t1.%i as %i, ROUND( t1.position, 0 ) as position,
						COALESCE( ROUND( t1.position - COALESCE( t2.position, 100 ), 0 ), 0 ) as diffPosition
					FROM
						( SELECT a.%i, a.position FROM {$wpdb->prefix}rank_math_analytics_gsc AS a WHERE 1 = 1{$ids_where}) AS t1
					LEFT JOIN
						( SELECT a.%i, a.position FROM {$wpdb->prefix}rank_math_analytics_gsc AS a WHERE 1 = 1{$old_ids_where}) AS t2
					ON t1.%i = t2.%i
					{$where}",
					$dimension,
					$dimension,
					$dimension,
					$dimension,
					$dimension,
					$dimension,
				),
				ARRAY_A
			);

			$positions = $this->set_dimension_as_key( $positions, $dimension );
		}

		return $positions;
	}

	/**
	 * Get metrics data.
	 *
	 * @param array $args Argument array.
	 * @return array
	 */
	public function get_metrics_data_by_dimension( $args = [] ) {
		if ( ! Console::is_console_connected() ) {
			return [];
		}

		global $wpdb;
		Helper::enable_big_selects_for_queries();
		$args = wp_parse_args(
			$args,
			[
				'dimension' => 'page',
				'sub_where' => '',
			]
		);

		$dimension = $args['dimension'];
		$sub_where = $args['sub_where'];

		// Get metrics data like impressions, click, ctr, etc.
		$metrics = DB_Helper::get_results(
			$wpdb->prepare(
				"SELECT
				t1.%i as %i, t1.clicks, t1.impressions, t1.ctr,
				COALESCE( t1.clicks - t2.clicks, 0 ) as diffClicks,
				COALESCE( t1.impressions - t2.impressions, 0 ) as diffImpressions,
				COALESCE( t1.ctr - t2.ctr, 0 ) as diffCtr
			FROM
				( SELECT %i, SUM( clicks ) as clicks, SUM(impressions) as impressions, AVG(ctr) as ctr
					FROM {$wpdb->prefix}rank_math_analytics_gsc
					WHERE 1 = 1 AND created BETWEEN %s AND %s {$sub_where}
					GROUP BY %i) as t1
			LEFT JOIN
				( SELECT %i, SUM( clicks ) as clicks, SUM(impressions) as impressions, AVG(ctr) as ctr
					FROM {$wpdb->prefix}rank_math_analytics_gsc
					WHERE 1 = 1 AND created BETWEEN %s AND %s {$sub_where}
					GROUP BY %i) as t2
			ON t1.%i = t2.%i",
				$dimension,
				$dimension,
				$dimension,
				$this->start_date,
				$this->end_date,
				$dimension,
				$dimension,
				$this->compare_start_date,
				$this->compare_end_date,
				$dimension,
				$dimension,
				$dimension
			),
			ARRAY_A
		);

		$metrics = $this->set_dimension_as_key( $metrics, $dimension );

		return $metrics;
	}

	/**
	 * Filter analytics data.
	 *
	 * @param array $data Data to process.
	 * @param array $args Argument array.
	 * @return array
	 */
	public function filter_analytics_data( $data, $args ) {
		$dimension      = $args['dimension'];
		$offset         = $args['offset'];
		$perpage        = $args['perpage'];
		$order_by_field = $args['orderBy'];

		/**
		 * Short-circuit to filter the data.
		 */
		$pre = $this->do_filter( 'analytics/pre_filter_data', null, $data, $args );
		if ( is_array( $pre ) ) {
			return $pre;
		}

		// Sort array by $args['order'], $order_by_field value.
		if ( ! empty( $args['order'] ) ) {
			$sort_base_arr = array_column( $data, $order_by_field, $dimension );
			array_multisort( $sort_base_arr, 'ASC' === $args['order'] ? SORT_ASC : SORT_DESC, $data );
		}

		// Filter array by $offset, $perpage value.
		$data = array_slice( $data, $offset, $perpage, true );

		return $data;
	}

	/**
	 * Set page as key.
	 *
	 * @param array $data Rows to process.
	 * @return array
	 */
	public function set_page_as_key( $data ) {
		$rows = [];
		foreach ( $data as $row ) {
			$page = $this->get_relative_url( $row['page'] );
			if ( ! empty( $row['object_id'] ) && empty( $row['schemas_in_use'] ) ) {
				$row['schemas_in_use'] = Helper::get_default_schema_type( $row['object_id'], true, true );
			}
			$rows[ $page ] = $row;
		}

		return $rows;
	}

	/**
	 * Set dimension parameter as key.
	 *
	 * @param array  $data      Rows to process.
	 * @param string $dimension Dimension to set as key.
	 * @return array
	 */
	public function set_dimension_as_key( $data, $dimension = 'query' ) {
		$rows = [];
		foreach ( $data as $row ) {
			if ( is_object( $row ) ) {
				$value = $row->$dimension;
			} else {
				$value = $row[ $dimension ];
			}
			$key          = 'page' === $dimension ? $this->get_relative_url( $value ) : strtolower( $value );
			$rows[ $key ] = $row;
		}

		return $rows;
	}

	/**
	 * Set query position history.
	 *
	 * @param array $data    Rows to process.
	 * @param array $history Rows to process.
	 *
	 * @return array
	 */
	public function set_query_position( $data, $history ) {
		foreach ( $history as $row ) {
			$key = strtolower( $row->query );

			$data[ $key ]['query'] = isset( $data[ $key ]['query'] ) ? $data[ $key ]['query'] : $key;
			$data[ $key ]['graph'] = isset( $data[ $key ]['graph'] ) ? $data[ $key ]['graph'] : [];

			if ( ! isset( $row->formatted_date ) ) {
				$formatted_date      = Helper::get_date( 'd M, Y', strtotime( $row->date ) );
				$row->formatted_date = $formatted_date;
			}

			$data[ $row->query ]['graph'][] = $row;
		}

		return $data;
	}

	/**
	 * Set page position history.
	 *
	 * @param array $data    Rows to process.
	 * @param array $history Rows to process.
	 *
	 * @return array
	 */
	public function set_page_position_graph( $data, $history ) {
		foreach ( $history as $row ) {
			$data[ $row->page ]['graph'] = isset( $data[ $row->page ]['graph'] ) ? $data[ $row->page ]['graph'] : [];

			if ( ! isset( $row->formatted_date ) ) {
				$formatted_date      = Helper::get_date( 'd M, Y', strtotime( $row->date ) );
				$row->formatted_date = $formatted_date;
			}
			$data[ $row->page ]['graph'][] = $row;

		}

		return $data;
	}

	/**
	 * Generate Cache Keys.
	 *
	 * @param string $what What for you need the key.
	 * @param mixed  $args more salt to add into key.
	 *
	 * @return string
	 */
	public function get_cache_key( $what, $args = [] ) {
		$key = 'rank_math_' . $what;

		if ( ! empty( $args ) ) {
			$key .= '_' . md5( wp_json_encode( $args ) );

		}

		return $key;
	}

	/**
	 * Get relative url.
	 *
	 * @param  string $url Url to make relative.
	 * @return string
	 */
	public static function get_relative_url( $url ) {
		$home_url = Console::get_site_url();

		// On multisite and sub-directory setup replace the home url.
		if ( is_multisite() && ! is_subdomain_install() ) {
			$url = \str_replace( $home_url, '/', $url );
		} else {
			$domain = strtolower( wp_parse_url( $home_url, PHP_URL_HOST ) );
			$domain = str_replace( [ 'www.', '.' ], [ '', '\.' ], $domain );
			$regex  = "/http[s]?:\/\/(www\.)?$domain/mU";
			$url    = strtolower( trim( $url ) );
			$url    = preg_replace( $regex, '', $url );
		}

		/**
		 * Google API and get_permalink sends URL Encoded strings so we need
		 * to urldecode in order to get them to match with whats saved in DB.
		 */
		$url = urldecode( $url );
		return \str_replace( $home_url, '', $url );
	}
}
PK     ˜ŠU]‹X§#W  W  3  includes/modules/analytics/class-url-inspection.phpnu „[µü¤        <?php
/**
 * Get URL Inspection data.
 *
 * @since      1.0.84
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use Exception;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Helpers\Schedule;

defined( 'ABSPATH' ) || exit;

/**
 * Url_Inspection class.
 */
class Url_Inspection {

	/**
	 * Holds the singleton instance of this class.
	 *
	 * @var Url_Inspection
	 */
	private static $instance;

	/**
	 * Singleton
	 */
	public static function get() {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 * Schedule a new inspection for an object ID.
	 *
	 * @param string $page       URL to inspect (relative).
	 * @param string $reschedule What to do if the job already exists: reschedule for new time, or skip and keep old time.
	 * @param int    $delay      Number of seconds to delay the inspection from now.
	 */
	public function schedule_inspection( $page, $reschedule = true, $delay = 0 ) {
		$delay = absint( $delay );
		if ( $reschedule ) {
			Schedule::unschedule_action( 'rank_math/analytics/get_inspections_data', [ $page ], 'rank-math' );
		} elseif ( as_has_scheduled_action( 'rank_math/analytics/get_inspections_data', [ $page ], 'rank-math' ) ) {
			// Already scheduled and reschedule = false.
			return;
		}

		if ( 0 === $delay ) {
			Schedule::async_action( 'rank_math/analytics/get_inspections_data', [ $page ], 'rank-math' );
			return;
		}

		$time = time() + $delay;
		Schedule::single_action( $time, 'rank_math/analytics/get_inspections_data', [ $page ], 'rank-math' );
	}

	/**
	 * Fetch the inspection data for a URL, store it, and return it.
	 *
	 * @param string $page URL to inspect.
	 */
	public function inspect( $page ) {
		$inspection = \RankMath\Google\Url_Inspection::get()->get_inspection_data( $page );

		if ( empty( $inspection ) ) {
			return [];
		}

		DB::store_inspection( $inspection );

		return wp_parse_args( $inspection, DB::get_inspection_defaults() );
	}

	/**
	 * Get latest inspection results for each page.
	 *
	 * @param array $params   Parameters.
	 * @param int   $per_page Number of items per page.
	 */
	public function get_inspections( $params, $per_page ) {
		// Early Bail!!
		if ( ! DB_Helper::check_table_exists( 'rank_math_analytics_inspections' ) ) {
			return;
		}

		return DB::get_inspections( $params, $per_page );
	}

	/**
	 * Check if the "Enable Index Status Tab" option is enabled.
	 *
	 * @return bool
	 */
	public static function is_enabled() {
		$profile = get_option( 'rank_math_google_analytic_profile', [] );
		if ( empty( $profile ) || ! is_array( $profile ) ) {
			return false;
		}

		$enable_index_status = true;
		if ( isset( $profile['enable_index_status'] ) ) {
			$enable_index_status = $profile['enable_index_status'];
		}

		return $enable_index_status;
	}
}
PK     ™ŠU]±¹Ö6V  V  :  includes/modules/analytics/workflows/class-inspections.phpnu „[µü¤        <?php
/**
 *  Google Search Console.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use Exception;
use RankMath\Helpers\DB;
use RankMath\Traits\Hooker;
use RankMath\Analytics\Workflow\Base;
use RankMath\Analytics\DB as AnalyticsDB;
use RankMath\Analytics\Url_Inspection;
use RankMath\Google\Console;
use RankMath\Helpers\Schedule;

use function as_unschedule_all_actions;

defined( 'ABSPATH' ) || exit;

/**
 * Inspections class.
 */
class Inspections {

	use Hooker;

	/**
	 * API Limit.
	 * 600 requests per minute, 2000 per day.
	 * We can ignore the per-minute limit, since we will use a few seconds delay after each request.
	 */
	const API_LIMIT = 2000;

	/**
	 * Interval between requests.
	 */
	const REQUEST_GAP_SECONDS = 7;

	/**
	 * Constructor.
	 */
	public function __construct() {

		$this->create_tables();

		// If console is not connected, ignore all, no need to proceed.
		if ( ! Console::is_console_connected() ) {
			return;
		}

		$this->action( 'rank_math/analytics/workflow/create_tables', 'create_tables' );
		$this->action( 'rank_math/analytics/workflow/inspections', 'create_tables', 6, 0 );
		$this->action( 'rank_math/analytics/workflow/inspections', 'create_data_jobs', 10, 0 );
	}

	/**
	 * Unschedule all inspections data fetch action.
	 *
	 * Stop processing queue items, clear cronjob and delete all batches.
	 */
	public static function kill_jobs() {
		as_unschedule_all_actions( 'rank_math/analytics/get_inspections_data' );
	}

	/**
	 * Create tables.
	 */
	public function create_tables() {
		global $wpdb;

		$table = 'rank_math_analytics_inspections';
		DB::create_table(
			$table,
			"id bigint(20) unsigned NOT NULL auto_increment,
			page varchar(500) NOT NULL,
			created timestamp NOT NULL, 
			index_verdict varchar(64) NOT NULL,            /* PASS, PARTIAL, FAIL, NEUTRAL, VERDICT_UNSPECIFIED */
			indexing_state varchar(64) NOT NULL,           /* INDEXING_ALLOWED, BLOCKED_BY_META_TAG, BLOCKED_BY_HTTP_HEADER, BLOCKED_BY_ROBOTS_TXT, INDEXING_STATE_UNSPECIFIED */
			coverage_state text NOT NULL,                  /* String, e.g. 'Submitted and indexed'. */
			page_fetch_state varchar(64) NOT NULL,         /* SUCCESSFUL, SOFT_404, BLOCKED_ROBOTS_TXT, NOT_FOUND, ACCESS_DENIED, SERVER_ERROR, REDIRECT_ERROR, ACCESS_FORBIDDEN, BLOCKED_4XX, INTERNAL_CRAWL_ERROR, INVALID_URL, PAGE_FETCH_STATE_UNSPECIFIED */
			robots_txt_state varchar(64) NOT NULL,         /* ALLOWED, DISALLOWED, ROBOTS_TXT_STATE_UNSPECIFIED */
			rich_results_verdict varchar(64) NOT NULL,     /* PASS, PARTIAL, FAIL, NEUTRAL, VERDICT_UNSPECIFIED */
			rich_results_items longtext NOT NULL,          /* JSON */
			last_crawl_time timestamp NOT NULL,
			crawled_as varchar(64) NOT NULL,               /* DESKTOP, MOBILE, CRAWLING_USER_AGENT_UNSPECIFIED */
			google_canonical text NOT NULL,                /* Google-chosen canonical URL. */
			user_canonical text NOT NULL,                  /* Canonical URL declared on-page. */
			sitemap text NOT NULL,                         /* Sitemap URL. */
			referring_urls longtext NOT NULL,              /* JSON */
			raw_api_response longtext NOT NULL,            /* JSON */
			PRIMARY KEY  (id),
			KEY analytics_object_page (page(190)),
			KEY created (created),
			KEY index_verdict (index_verdict),
			KEY page_fetch_state (page_fetch_state),
			KEY robots_txt_state (robots_txt_state),
			KEY rich_results_verdict (rich_results_verdict)"
		);

		// Make sure that collations match the objects table.
		$objects_coll = DB::get_table_collation( 'rank_math_analytics_objects' );
		DB::check_collation( $table, 'all', $objects_coll );
	}

	/**
	 * Create jobs to fetch data.
	 */
	public function create_data_jobs() {
		// If there are jobs left from the previous queue, don't create new jobs.
		if ( as_has_scheduled_action( 'rank_math/analytics/get_inspections_data' ) ) {
			return;
		}

		// If the option is disabled, don't create jobs.
		if ( ! Url_Inspection::is_enabled() ) {
			return;
		}

		global $wpdb;

		$inspections_table = AnalyticsDB::inspections()->table;
		$objects_table     = AnalyticsDB::objects()->table;

		$objects = AnalyticsDB::objects()
			->select( [ "$objects_table.id", "$objects_table.page", "$inspections_table.created" ] )
			->leftJoin( $inspections_table, "$inspections_table.page", "$objects_table.page" )
			->where( "$objects_table.is_indexable", 1 )
			->orderBy( "$inspections_table.created", 'ASC' )
			->get();

		$pages = [];
		foreach ( $objects as $object ) {
			if ( $object->created && date( 'Y-m-d', strtotime( $object->created ) ) === date( 'Y-m-d' ) ) {
				continue;
			}

			$pages[] = $object->page;
		}

		if ( empty( $pages ) ) {
			return;
		}

		$dates = Base::get_dates();

		$query = $wpdb->prepare(
			"SELECT DISTINCT(page) as page, COUNT(impressions) as total
			FROM {$wpdb->prefix}rank_math_analytics_gsc
			WHERE page IN ('" . join( "', '", $pages ) . "')
			AND DATE(created) BETWEEN %s AND %s
			GROUP BY page
			ORDER BY total DESC",
			$dates['start_date'],
			$dates['end_date']
		);

		$top_pages = $wpdb->get_results( $query );
		$top_pages = wp_list_pluck( $top_pages, 'page' );

		$pages = array_merge( $top_pages, $pages );
		$pages = array_unique( $pages );

		$count = 0;
		foreach ( $pages as $page ) {
			++$count;
			$time = time() + ( $count * self::REQUEST_GAP_SECONDS );
			if ( $count > self::API_LIMIT ) {
				$delay_days = floor( $count / self::API_LIMIT );
				$time       = strtotime( "+{$delay_days} days", $time );
			}

			Schedule::single_action( $time, 'rank_math/analytics/get_inspections_data', [ $page ], 'rank-math' );
		}
	}
}
PK     ™ŠU]¡ÿ è	  è	  6  includes/modules/analytics/workflows/class-console.phpnu „[µü¤        <?php
/**
 *  Google Search Console.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use Exception;
use RankMath\Helpers\DB;
use RankMath\Google\Console as GoogleConsole;
use function as_unschedule_all_actions;

defined( 'ABSPATH' ) || exit;

/**
 * Console class.
 */
class Console extends Base {

	/**
	 * Constructor.
	 */
	public function __construct() {

		$this->create_tables();

		// If console is not connected, ignore all no need to proceed.
		if ( ! GoogleConsole::is_console_connected() ) {
			return;
		}

		$this->action( 'rank_math/analytics/workflow/console', 'kill_jobs', 5, 0 );
		$this->action( 'rank_math/analytics/workflow/create_tables', 'create_tables' );
		$this->action( 'rank_math/analytics/workflow/console', 'create_tables', 6, 0 );
		$this->action( 'rank_math/analytics/workflow/console', 'create_data_jobs', 10, 3 );
	}

	/**
	 * Unschedule all console data fetch action.
	 *
	 * Stop processing queue items, clear cronjob and delete all batches.
	 */
	public function kill_jobs() {
		as_unschedule_all_actions( 'rank_math/analytics/get_console_data' );
	}

	/**
	 * Create tables.
	 */
	public function create_tables() {
		global $wpdb;

		$table = 'rank_math_analytics_gsc';
		DB::create_table(
			$table,
			'id bigint(20) unsigned NOT NULL auto_increment,
			created timestamp NOT NULL,
			query varchar(1000) NOT NULL,
			page varchar(500) NOT NULL,
			clicks mediumint(6) NOT NULL,
			impressions mediumint(6) NOT NULL,
			position double NOT NULL,
			ctr double NOT NULL,
			PRIMARY KEY  (id),
			KEY analytics_query (query(190)),
			KEY analytics_page (page(190)),
			KEY clicks (clicks),
			KEY rank_position (position)'
		);

		// Make sure that collations match the objects table.
		$objects_coll = DB::get_table_collation( 'rank_math_analytics_objects' );
		DB::check_collation( $table, 'all', $objects_coll );
	}

	/**
	 * Create jobs to fetch data.
	 *
	 * @param integer $days      Number of days to fetch from past.
	 * @param string  $prev      Previous saved value.
	 * @param string  $new_value New posted value.
	 */
	public function create_data_jobs( $days, $prev, $new_value ) {
		// Early bail if saved & new profile are same.
		if ( ! $this->is_profile_updated( 'profile', $prev, $new_value ) ) {
			return;
		}

		update_option( 'rank_math_analytics_first_fetch', 'fetching' );

		// Fetch now.
		$this->schedule_single_action( $days, 'console' );
	}
}
PK     ™ŠU]Rá:O  O  3  includes/modules/analytics/workflows/class-jobs.phpnu „[µü¤        <?php
/**
 * Jobs.
 *
 * @since      1.0.54
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use Exception;
use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Google\Api;
use RankMath\Google\Console;
use RankMath\Google\Url_Inspection;
use RankMath\Analytics\DB;
use RankMath\Traits\Cache;
use RankMath\Traits\Hooker;
use RankMath\Analytics\Stats;
use RankMath\Analytics\Watcher;

defined( 'ABSPATH' ) || exit;

/**
 * Jobs class.
 */
class Jobs {

	use Hooker;
	use Cache;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Jobs
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Jobs ) ) {
			$instance = new Jobs();
			$instance->hooks();
		}

		return $instance;
	}

	/**
	 * Hooks.
	 */
	public function hooks() {
		$this->action( 'rank_math/analytics/flat_posts', 'do_flat_posts' );
		$this->action( 'rank_math/analytics/flat_posts_completed', 'flat_posts_completed' );
		add_action( 'rank_math/analytics/sync_sitemaps', [ Api::get(), 'sync_sitemaps' ] );

		if ( Console::is_console_connected() ) {
			$this->action( 'rank_math/analytics/clear_cache', 'clear_cache', 99 );

			// Fetch missing google data action.
			$this->action( 'rank_math/analytics/data_fetch', 'data_fetch' );

			// Console data fetch.
			$this->filter( 'rank_math/analytics/get_console_days', 'get_console_days' );
			$this->action( 'rank_math/analytics/get_console_data', 'get_console_data' );
			$this->action( 'rank_math/analytics/handle_console_response', 'handle_console_response' );

			// Inspections data fetch.
			$this->action( 'rank_math/analytics/get_inspections_data', 'get_inspections_data' );
		}
	}

	/**
	 * Fetch missing console data.
	 */
	public function data_fetch() {
		$success = Console::test_connection();
		if ( $success ) {
			$this->check_for_missing_dates( 'console' );
		}
	}

	/**
	 * Perform post check.
	 */
	public function flat_posts_completed() {
		$rows = DB::objects()
			->selectCount( 'id' )
			->getVar();

		Workflow::kill_workflows();
	}

	/**
	 * Add/update posts info from objects table.
	 *
	 * @param  array $ids Posts ids to process.
	 */
	public function do_flat_posts( $ids ) {
		Inspections::kill_jobs();

		foreach ( $ids as $id ) {
			Watcher::get()->update_post_info( $id );
		}
	}

	/**
	 * Clear cache.
	 */
	public function clear_cache() {
		global $wpdb;

		// Delete all useless data from console data table.
		DB_Helper::get_results( "DELETE FROM {$wpdb->prefix}rank_math_analytics_gsc WHERE page NOT IN ( SELECT page from {$wpdb->prefix}rank_math_analytics_objects )" );

		// Delete useless data from inspections table too.
		DB_Helper::get_results( "DELETE FROM {$wpdb->prefix}rank_math_analytics_inspections WHERE page NOT IN ( SELECT page from {$wpdb->prefix}rank_math_analytics_objects )" );

		delete_transient( 'rank_math_analytics_data_info' );
		DB::purge_cache();
		DB::delete_data_log();
		$this->calculate_stats();

		update_option( 'rank_math_analytics_last_updated', time() );

		Workflow::do_workflow( 'inspections' );
	}

	/**
	 * Set the console start and end dates.
	 *
	 * @param array $args Args containing start and end date.
	 */
	public function get_console_days( $args = [] ) {
		set_time_limit( 300 );

		$rows = Api::get()->get_search_analytics(
			[
				'start_date' => $args['start_date'],
				'end_date'   => $args['end_date'],
				'dimensions' => [ 'date' ],
			]
		);

		if ( empty( $rows ) || is_wp_error( $rows ) ) {
			return [];
		}

		$empty_dates = get_option( 'rank_math_console_empty_dates', [] );

		$dates = [];

		foreach ( $rows as $row ) {

			// Have at least few impressions.
			if ( $row['impressions'] ) {
				$date = $row['keys'][0];

				if ( ! DB::date_exists( $date, 'console' ) && ! in_array( $date, $empty_dates, true ) ) {
					$dates[] = [
						'start_date' => $date,
						'end_date'   => $date,
					];
				}
			}
		}

		return $dates;
	}

	/**
	 * Get console data.
	 *
	 * @param string $date Date to fetch data for.
	 */
	public function get_console_data( $date ) {
		set_time_limit( 300 );

		$rows = Api::get()->get_search_analytics(
			[
				'start_date' => $date,
				'end_date'   => $date,
				'dimensions' => [ 'query', 'page' ],
			]
		);

		if ( empty( $rows ) || is_wp_error( $rows ) ) {
			return;
		}

		$rows = \array_map( [ $this, 'normalize_query_page_data' ], $rows );

		try {
			DB::add_query_page_bulk( $date, $rows );

			// Clear the cache here.
			$this->cache_flush_group( 'rank_math_rest_keywords_rows' );
			$this->cache_flush_group( 'rank_math_posts_rows_by_objects' );
			$this->cache_flush_group( 'rank_math_analytics_summary' );

			return $rows;
		} catch ( Exception $e ) {} // phpcs:ignore
	}

	/**
	 * Handlle console response.
	 *
	 * @param array $data API request and response data.
	 */
	public function handle_console_response( $data = [] ) {
		if ( 200 !== $data['code'] ) {
			return;
		}

		if ( isset( $data['formatted_response']['rows'] ) && ! empty( $data['formatted_response']['rows'] ) ) {
			return;
		}

		if ( ! isset( $data['args']['startDate'] ) ) {
			return;
		}

		$dates = get_option( 'rank_math_console_empty_dates', [] );
		if ( ! $dates ) {
			$dates = [];
		}

		$dates[] = $data['args']['startDate'];
		$dates[] = $data['args']['endDate'];

		$dates = array_unique( $dates );

		update_option( 'rank_math_console_empty_dates', $dates );
	}

	/**
	 * Get inspection results from the API and store them in the database.
	 *
	 * @param string $page URI to fetch data for.
	 */
	public function get_inspections_data( $page ) {
		// If the option is disabled, don't fetch data.
		if ( ! \RankMath\Analytics\Url_Inspection::is_enabled() ) {
			return;
		}

		$inspection = Url_Inspection::get()->get_inspection_data( $page );
		if ( empty( $inspection ) ) {
			return;
		}

		try {
			DB::store_inspection( $inspection );
		} catch ( Exception $e ) {} // phpcs:ignore
	}

	/**
	 * Check for missing dates.
	 *
	 * @param string $action Action to perform.
	 */
	public function check_for_missing_dates( $action ) {
		$days = Helper::get_settings( 'general.console_caching_control', 90 );

		Workflow::do_workflow(
			$action,
			$days,
			null,
			null
		);
	}

	/**
	 * Calculate stats.
	 */
	private function calculate_stats() {
		$ranges = [
			'-7 days',
			'-15 days',
			'-30 days',
			'-3 months',
			'-6 months',
			'-1 year',
		];

		foreach ( $ranges as $range ) {
			Stats::get()->set_date_range( $range );
			Stats::get()->get_top_keywords();
		}
	}

	/**
	 * Normalize console data.
	 *
	 * @param array $row Single row item.
	 *
	 * @return array
	 */
	protected function normalize_query_page_data( $row ) {
		$row          = $this->normalize_data( $row );
		$row['query'] = $row['keys'][0];
		$row['page']  = $row['keys'][1];

		unset( $row['keys'] );

		return $row;
	}

	/**
	 * Normalize console data.
	 *
	 * @param array $row Single row item.
	 *
	 * @return array
	 */
	private function normalize_data( $row ) {
		$row['ctr']      = round( $row['ctr'] * 100, 2 );
		$row['position'] = round( $row['position'], 2 );

		return $row;
	}
}
PK     ™ŠU]9ßõ    4  includes/modules/analytics/workflows/class-oauth.phpnu „[µü¤        <?php
/**
 * Authentication workflow.
 *
 * @since      1.0.55
 * @package    RankMath
 * @subpackage RankMath\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use RankMath\Helper;
use RankMath\Google\Api;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Helpers\Security;
use RankMath\Analytics\DB;
use RankMath\Google\Permissions;
use RankMath\Google\Authentication;

defined( 'ABSPATH' ) || exit;

/**
 * OAuth class.
 */
class OAuth {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->action( 'admin_init', 'process_oauth' );
		$this->action( 'admin_init', 'reconnect_google' );
	}

	/**
	 * OAuth reply back
	 */
	public function process_oauth() {
		$process_oauth = Param::get( 'process_oauth', 0, FILTER_VALIDATE_INT );
		$access_token  = Param::get( 'access_token', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
		$security      = Param::get( 'rankmath_security', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );

		// Early Bail!!
		if ( empty( $security ) || ( $process_oauth < 1 && empty( $access_token ) ) ) {
			return;
		}

		if ( ! wp_verify_nonce( $security, 'rank_math_oauth_token' ) ) {
			wp_nonce_ays( 'rank_math_oauth_token' );
			die();
		}

		$redirect = false;
		// Backward compatibility.
		if ( ! empty( $process_oauth ) ) {
			$redirect = $this->get_tokens_from_server();
		}

		// New version.
		if ( ! empty( $access_token ) ) {
			$redirect = $this->get_tokens_from_url();
		}

		$redirect .= '&view=analytics';

		// Remove possible admin notice if we have new access token.
		// Also remove the connection errors.
		foreach (
			[
				'rankmath_google_api_failed_attempts_data',
				'rankmath_google_api_reconnect',
				'rank_math_console_connection_error',
				'rank_math_analytics_connection_error',
				'rank_math_adsense_connection_error',
			] as $option
		) {
			delete_option( $option );
		}

		Permissions::fetch();

		if ( ! empty( $redirect ) ) {
			Helper::redirect( $redirect );
			exit;
		}
	}

	/**
	 * Reconnect Google.
	 */
	public function reconnect_google() {
		if ( ! isset( $_GET['reconnect'] ) || 'google' !== $_GET['reconnect'] ) {
			return;
		}

		if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'rank_math_reconnect_google' ) ) {
			wp_nonce_ays( 'rank_math_reconnect_google' );
			die();
		}

		if ( ! Helper::has_cap( 'analytics' ) ) {
			return;
		}

		$rows = DB::objects()
			->selectCount( 'id' )
			->getVar();

		if ( empty( $rows ) ) {
			delete_option( 'rank_math_analytics_installed' );
		}

		Api::get()->revoke_token();
		Workflow::kill_workflows();

		wp_redirect( Authentication::get_auth_url() ); // phpcs:ignore
		die();
	}

	/**
	 * Get access token from url.
	 *
	 * @return string
	 */
	private function get_tokens_from_url() {
		$data = [
			'access_token'  => urldecode( Param::get( 'access_token', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ) ),
			'refresh_token' => urldecode( Param::get( 'refresh_token', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK ) ),
			'expire'        => urldecode( Param::get( 'expire', 0, FILTER_VALIDATE_INT ) ),
		];

		Authentication::tokens( $data );

		$current_request = remove_query_arg(
			[
				'access_token',
				'refresh_token',
				'expire',
				'security',
			]
		);

		return $current_request;
	}

	/**
	 * Get access token from rankmath server.
	 *
	 * @return string
	 */
	private function get_tokens_from_server() {
		// Bail if the user is not authenticated at all yet.
		$id = Param::get( 'process_oauth', 0, FILTER_VALIDATE_INT );
		if ( $id < 1 ) {
			return;
		}

		$response = wp_remote_get( Authentication::get_auth_app_url() . '/get.php?id=' . $id );
		if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
			return;
		}

		$response = wp_remote_retrieve_body( $response );
		if ( empty( $response ) ) {
			return;
		}

		$response = \json_decode( $response, true );
		unset( $response['id'] );

		// Save new token.
		Authentication::tokens( $response );

		$redirect = Security::remove_query_arg_raw( [ 'process_oauth', 'security' ] );
		if ( Str::contains( 'rank-math-options-general', $redirect ) ) {
			$redirect .= '#setting-panel-analytics';
		}

		Helper::remove_notification( 'rank_math_analytics_reauthenticate' );

		return $redirect;
	}
}
PK     ™ŠU] ŸUÇÐ  Ð  3  includes/modules/analytics/workflows/class-base.phpnu „[µü¤        <?php
/**
 *  Workflow Base.
 *
 * @since      1.0.54
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use RankMath\Helper;
use RankMath\Analytics\DB;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Schedule;
use function has_filter;

defined( 'ABSPATH' ) || exit;

/**
 * Base class.
 */
abstract class Base {

	use Hooker;

	/**
	 * Start fetching process.
	 *
	 * @param  integer $days   Number of days to fetch from past.
	 * @param  string  $action Action to perform.
	 * @return integer
	 */
	public function create_jobs( $days = 90, $action = 'console' ) {
		$count    = $this->add_data_pull( $days + 3, $action );
		$time_gap = $this->get_schedule_gap();

		Workflow::add_clear_cache( time() + ( $time_gap * ( $count + 1 ) ) );

		update_option( 'rank_math_analytics_first_fetch', 'fetching' );

		return $count;
	}

	/**
	 * Add data pull jobs.
	 *
	 * @param integer $days Number of days to fetch from past.
	 * @param  string  $action Action to perform.
	 * @return integer
	 */
	private function add_data_pull( $days, $action = 'console' ) {
		$count    = 1;
		$start    = Helper::get_midnight( time() + DAY_IN_SECONDS );
		$interval = $this->get_data_interval();
		$time_gap = $this->get_schedule_gap();

		$hook = "get_{$action}_data";
		if ( 1 === $interval ) {
			for ( $current = 1; $current <= $days; $current++ ) {
				$date = date_i18n( 'Y-m-d', $start - ( DAY_IN_SECONDS * $current ) );
				if ( ! DB::date_exists( $date, $action ) ) {
					++$count;
					Schedule::single_action(
						time() + ( $time_gap * $count ),
						'rank_math/analytics/' . $hook,
						[ $date ],
						'rank-math'
					);
				}
			}
		} else {
			for ( $current = 1; $current <= $days; $current = $current + $interval ) {
				for ( $j = 0; $j < $interval; $j++ ) {
					$date = date_i18n( 'Y-m-d', $start - ( DAY_IN_SECONDS * ( $current + $j ) ) );
					if ( ! DB::date_exists( $date, $action ) ) {
						++$count;
						Schedule::single_action(
							time() + ( $time_gap * $count ),
							'rank_math/analytics/' . $hook,
							[ $date ],
							'rank-math'
						);
					}
				}
			}
		}

		return $count;
	}

	/**
	 * Get data interval.
	 *
	 * @return int
	 */
	private function get_data_interval() {
		$is_custom = has_filter( 'rank_math/analytics/app_url' );

		return $is_custom ? $this->do_filter( 'analytics/data_interval', 7 ) : 7;
	}

	/**
	 * Get schedule gap.
	 *
	 * @return int
	 */
	private function get_schedule_gap() {
		return $this->do_filter( 'analytics/schedule_gap', 30 );
	}

	/**
	 * Check if google profile is updated.
	 *
	 * @param string $param Google profile param name.
	 * @param string $previous_value Previous profile data.
	 * @param string $new_value  New posted profile data.
	 *
	 * @return boolean
	 */
	public function is_profile_updated( $param, $previous_value, $new_value ) {
		if (
			! is_null( $previous_value ) &&
			! is_null( $new_value ) &&
			isset( $previous_value[ $param ] ) &&
			isset( $new_value[ $param ] ) &&
			$previous_value[ $param ] === $new_value[ $param ]
		) {
			return false;
		}

		return true;
	}

	/**
	 * Function to get the dates.
	 *
	 * @param int $days Number of days.
	 *
	 * @return array
	 */
	public static function get_dates( $days = 90 ) {
		$end   = Helper::get_midnight( strtotime( '-1 day', time() ) );
		$start = strtotime( '-' . $days . ' day', $end );

		return [
			'start_date' => date_i18n( 'Y-m-d', $start ),
			'end_date'   => date_i18n( 'Y-m-d', $end ),
		];
	}

	/**
	 * Schedule single action
	 *
	 * @param int     $days   Number of days.
	 * @param string  $action Name of the action hook.
	 * @param array   $args   Arguments to pass to callbacks when the hook triggers.
	 * @param string  $group  The group to assign this job to.
	 * @param boolean $unique Whether the action should be unique.
	 */
	public function schedule_single_action( $days = 90, $action = '', $args = [], $group = 'rank-math', $unique = false ) {
		$timestamp = get_option( 'rank_math_analytics_last_single_action_schedule_time', time() );
		$time_gap  = $this->get_schedule_gap();

		$dates = self::get_dates( $days );

		// Get the analytics dates in which analytics data is actually available.
		$days = apply_filters(
			'rank_math/analytics/get_' . $action . '_days',
			[
				'start_date' => $dates['start_date'],
				'end_date'   => $dates['end_date'],
			]
		);

		// No days then don't schedule the action.
		if ( empty( $days ) ) {
			return;
		}

		foreach ( $days as $day ) {

			// Next schedule time.
			$timestamp = $timestamp + $time_gap;

			$args = wp_parse_args(
				[
					'start_date' => $day['start_date'],
					'end_date'   => $day['end_date'],
				],
				$args
			);

			Schedule::single_action(
				$timestamp,
				'rank_math/analytics/get_' . $action . '_data',
				$args,
				$group,
				$unique
			);

		}

		Workflow::add_clear_cache( $timestamp );

		// Update timestamp.
		update_option( 'rank_math_analytics_last_single_action_schedule_time', $timestamp );
	}
}
PK     ™ŠU]ôBÕ  Õ  6  includes/modules/analytics/workflows/class-objects.phpnu „[µü¤        <?php
/**
 *  Install objects.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use Exception;
use RankMath\Helper;
use RankMath\Helpers\DB;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Schedule;

defined( 'ABSPATH' ) || exit;

/**
 * Objects class.
 */
class Objects extends Base {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$done = \boolval( get_option( 'rank_math_analytics_installed' ) );
		if ( $done ) {
			return;
		}

		$this->create_tables();
		$this->create_data_job();
		$this->flat_posts();

		update_option( 'rank_math_analytics_installed', true );
	}

	/**
	 * Create tables.
	 */
	public function create_tables() {
		DB::create_table(
			'rank_math_analytics_objects',
			'id bigint(20) unsigned NOT NULL auto_increment,
			created timestamp NOT NULL,
			title text NOT NULL,
			page varchar(500) NOT NULL,
			object_type varchar(100) NOT NULL,
			object_subtype varchar(100) NOT NULL,
			object_id bigint(20) unsigned NOT NULL,
			primary_key varchar(255) NOT NULL,
			seo_score tinyint NOT NULL default 0,
			page_score tinyint NOT NULL default 0,
			is_indexable tinyint(1) NOT NULL default 1,
			schemas_in_use varchar(500),
			desktop_interactive double default 0,
			desktop_pagescore double default 0,
			mobile_interactive double default 0,
			mobile_pagescore double default 0,
			pagespeed_refreshed timestamp,
			PRIMARY KEY  (id),
			KEY analytics_object_page (page(190))'
		);
	}

	/**
	 * Create jobs to fetch data.
	 */
	public function create_data_job() {
		// Clear old schedule.
		wp_clear_scheduled_hook( 'rank_math/analytics/get_analytics' );

		// Schedule new action only when there is no existing action.
		if ( false === as_next_scheduled_action( 'rank_math/analytics/data_fetch' ) ) {
			Helper::schedule_data_fetch();
		}
	}

	/**
	 * Flat posts
	 */
	public function flat_posts() {
		$ids = get_posts(
			[
				'post_type'      => $this->get_post_types(),
				'post_status'    => 'publish',
				'fields'         => 'ids',
				'posts_per_page' => -1,
			]
		);

		$counter = 0;
		$chunks  = \array_chunk( $ids, 50 );
		foreach ( $chunks as $chunk ) {
			++$counter;
			Schedule::single_action(
				time() + ( 60 * ( $counter / 2 ) ),
				'rank_math/analytics/flat_posts',
				[ $chunk ],
				'rank-math'
			);
		}

		// Check for posts.
		Schedule::single_action(
			time() + ( 60 * ( ( $counter + 1 ) / 2 ) ),
			'rank_math/analytics/flat_posts_completed',
			[],
			'rank-math'
		);

		// Clear cache.
		Workflow::add_clear_cache( time() + ( 60 * ( ( $counter + 2 ) / 2 ) ) );
	}

	/**
	 * Get post types to process.
	 */
	private function get_post_types() {
		$post_types = $this->do_filter( 'analytics/post_types', Helper::get_accessible_post_types() );
		unset( $post_types['attachment'] );
		if ( isset( $post_types['web-story'] ) ) {
			unset( $post_types['web-story'] );
		}

		return array_keys( $post_types );
	}
}
PK     ™ŠU]Jb7S  S  7  includes/modules/analytics/workflows/class-workflow.phpnu „[µü¤        <?php
/**
 *  Workflow.
 *
 * @since      1.0.54
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics\Workflow;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Schedule;
use function as_unschedule_all_actions;

defined( 'ABSPATH' ) || exit;

/**
 * Workflow class.
 */
class Workflow {

	use Hooker;

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Workflow
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Workflow ) ) {
			$instance = new Workflow();
			$instance->hooks();
		}

		return $instance;
	}

	/**
	 * Hooks.
	 */
	public function hooks() {
		// Common.
		$this->action( 'rank_math/analytics/workflow', 'maybe_first_install', 5, 0 );
		$this->action( 'rank_math/analytics/workflow', 'start_workflow', 10, 4 );
		$this->action( 'rank_math/analytics/workflow/create_tables', 'create_tables_only', 5 );

		// Console.
		$this->action( 'rank_math/analytics/workflow/console', 'init_console_workflow', 5, 0 );

		// Inspections.
		$this->action( 'rank_math/analytics/workflow/inspections', 'init_inspections_workflow', 5, 0 );
	}

	/**
	 * Maybe first install.
	 */
	public function maybe_first_install() {
		new Objects();
	}

	/**
	 * Init Console workflow
	 */
	public function init_console_workflow() {
		new Console();
	}

	/**
	 * Init Inspections workflow.
	 */
	public function init_inspections_workflow() {
		new Inspections();
	}

	/**
	 * Create tables only.
	 */
	public function create_tables_only() {
		( new Objects() )->create_tables();
		( new Inspections() )->create_tables();
		new Console();
	}

	/**
	 * Service workflow
	 *
	 * @param string  $action    Action to perform.
	 * @param integer $days      Number of days to fetch from past.
	 * @param string  $prev      Previous saved value.
	 * @param string  $new_value New posted value.
	 */
	public function start_workflow( $action, $days = 0, $prev = null, $new_value = null ) {
		do_action(
			'rank_math/analytics/workflow/' . $action,
			$days,
			$prev,
			$new_value
		);
	}

	/**
	 * Service workflow
	 *
	 * @param string  $action    Action to perform.
	 * @param integer $days      Number of days to fetch from past.
	 * @param string  $prev      Previous saved value.
	 * @param string  $new_value New posted value.
	 */
	public static function do_workflow( $action, $days = 0, $prev = null, $new_value = null ) {
		Schedule::async_action(
			'rank_math/analytics/workflow',
			[
				$action,
				$days,
				$prev,
				$new_value,
			],
			'rank-math'
		);
	}

	/**
	 * Kill all workflows
	 *
	 * Stop processing queue items, clear cronjob and delete all batches.
	 */
	public static function kill_workflows() {
		as_unschedule_all_actions( 'rank_math/analytics/workflow' );
		as_unschedule_all_actions( 'rank_math/analytics/clear_cache' );
		as_unschedule_all_actions( 'rank_math/analytics/get_console_data' );
		as_unschedule_all_actions( 'rank_math/analytics/get_analytics_data' );
		as_unschedule_all_actions( 'rank_math/analytics/get_adsense_data' );
		as_unschedule_all_actions( 'rank_math/analytics/get_inspections_data' );

		do_action( 'rank_math/analytics/clear_cache' );
	}

	/**
	 * Add clear cache job.
	 *
	 * @param int $time Timestamp to add job for.
	 */
	public static function add_clear_cache( $time ) {
		as_unschedule_all_actions( 'rank_math/analytics/clear_cache' );
		Schedule::single_action(
			$time,
			'rank_math/analytics/clear_cache',
			[],
			'rank-math'
		);

		delete_option( 'rank_math_analytics_last_single_action_schedule_time' );
	}
}
PK     ™ŠU]µ,7gº&  º&  -  includes/modules/analytics/class-keywords.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use WP_REST_Request;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Google\Console;
use RankMath\Analytics\Stats;

defined( 'ABSPATH' ) || exit;

/**
 * Keywords class.
 *
 * @method get_analytics_data()
 */
class Keywords extends Posts {

	/**
	 * Get most recent day's keywords.
	 *
	 * @return array
	 */
	public function get_recent_keywords() {
		if ( ! Console::is_console_connected() ) {
			return [];
		}

		global $wpdb;

		$query = $wpdb->prepare(
			"SELECT query
			FROM {$wpdb->prefix}rank_math_analytics_gsc
			WHERE DATE(created) = (SELECT MAX(DATE(created)) FROM {$wpdb->prefix}rank_math_analytics_gsc WHERE created BETWEEN %s AND %s)
			GROUP BY query",
			Stats::get()->start_date,
			Stats::get()->end_date
		);
		$data  = DB_Helper::get_results( $query );

		return $data;
	}

	/**
	 * Get keywords data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_keywords_rows( WP_REST_Request $request ) {
		// Get most recent day's keywords only.
		$keywords = $this->get_recent_keywords();
		$keywords = wp_list_pluck( $keywords, 'query' );
		$keywords = array_map( 'esc_sql', $keywords );
		$keywords = array_map( 'mb_strtolower', $keywords );
		$per_page = 25;

		$cache_args             = $request->get_params();
		$cache_args['per_page'] = $per_page;

		$cache_group = 'rank_math_rest_keywords_rows';
		$cache_key   = $this->generate_hash( $cache_args );
		$rows        = $this->get_cache( $cache_key, $cache_group );
		if ( empty( $rows ) ) {
			$rows = $this->get_analytics_data(
				[
					'dimension' => 'query',
					'objects'   => false,
					'pageview'  => false,
					'orderBy'   => ! empty( $request->get_param( 'orderby' ) ) ? $request->get_param( 'orderby' ) : 'impressions',
					'order'     => in_array( $request->get_param( 'order' ), [ 'asc', 'desc' ], true ) ? strtoupper( $request->get_param( 'order' ) ) : 'DESC',
					'offset'    => ( $request->get_param( 'page' ) - 1 ) * $per_page,
					'perpage'   => $per_page,
					'sub_where' => " AND query IN ('" . join( "', '", $keywords ) . "')",
				]
			);
		}

		$rows = apply_filters( 'rank_math/analytics/keywords', $rows );
		if ( empty( $rows ) ) {
			$rows['response'] = 'No Data';
		}
		return $rows;
	}

	/**
	 * Get top keywords overview filtered by keyword position range.
	 *
	 * @return object
	 */
	public function get_top_keywords() {
		if ( ! Console::is_console_connected() ) {
			return [
				'top3'          => [
					'total'      => 0,
					'difference' => 0,
				],
				'top10'         => [
					'total'      => 0,
					'difference' => 0,
				],
				'top50'         => [
					'total'      => 0,
					'difference' => 0,
				],
				'top100'        => [
					'total'      => 0,
					'difference' => 0,
				],
				'ctr'           => 0,
				'ctrDifference' => 0,
			];
		}

		global $wpdb;

		$cache_key = $this->get_cache_key( 'top_keywords', $this->days . 'days' );
		$cache     = get_transient( $cache_key );

		if ( false !== $cache ) {
			return $cache;
		}

		// Get current keywords count filtered by position range.
		$query = $wpdb->prepare(
			"SELECT COUNT(t1.query) AS total,
				CASE
					WHEN t1.position BETWEEN 1 AND 3 THEN 'top3'
					WHEN t1.position BETWEEN 4 AND 10 THEN 'top10'
					WHEN t1.position BETWEEN 11 AND 50 THEN 'top50'
					WHEN t1.position BETWEEN 51 AND 100 THEN 'top100'
					ELSE 'none'
				END AS position_type
			FROM (SELECT query, ROUND( AVG(position), 0 ) AS position 
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s AND DATE(created) = (SELECT MAX(DATE(created)) FROM {$wpdb->prefix}rank_math_analytics_gsc WHERE created BETWEEN %s AND %s)
				GROUP BY query 
				ORDER BY position) as t1
			GROUP BY position_type",
			$this->start_date,
			$this->end_date,
			$this->start_date,
			$this->end_date
		);
		$data  = DB_Helper::get_results( $query );

		// Get compare keywords count filtered by position range.
		$query   = $wpdb->prepare(
			"SELECT COUNT(t1.query) AS total,
				CASE
					WHEN t1.position BETWEEN 1 AND 3 THEN 'top3'
					WHEN t1.position BETWEEN 4 AND 10 THEN 'top10'
					WHEN t1.position BETWEEN 11 AND 50 THEN 'top50'
					WHEN t1.position BETWEEN 51 AND 100 THEN 'top100'
					ELSE 'none'
				END AS position_type
			FROM (SELECT query, ROUND( AVG(position), 0 ) AS position 
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s AND DATE(created) = (SELECT MAX(DATE(created)) FROM {$wpdb->prefix}rank_math_analytics_gsc WHERE created BETWEEN %s AND %s)
				GROUP BY query 
				ORDER BY position) as t1
			GROUP BY position_type",
			$this->compare_start_date,
			$this->compare_end_date,
			$this->compare_start_date,
			$this->compare_end_date
		);
		$compare = DB_Helper::get_results( $query );

		$positions = [
			'top3'          => [
				'total'      => 0,
				'difference' => 0,
			],
			'top10'         => [
				'total'      => 0,
				'difference' => 0,
			],
			'top50'         => [
				'total'      => 0,
				'difference' => 0,
			],
			'top100'        => [
				'total'      => 0,
				'difference' => 0,
			],
			'ctr'           => 0,
			'ctrDifference' => 0,
		];

		// Calculate total and difference for each position range.
		$positions = $this->get_top_position_total( $positions, $data, 'total' );
		$positions = $this->get_top_position_total( $positions, $compare, 'difference' );

		// Get CTR.
		$positions['ctr'] = DB::analytics()
			->selectAvg( 'ctr', 'ctr' )
			->whereBetween( 'created', [ $this->start_date, $this->end_date ] )
			->getVar();

		// Get compare CTR.
		$positions['ctrDifference'] = DB::analytics()
			->selectAvg( 'ctr', 'ctr' )
			->whereBetween( 'created', [ $this->compare_start_date, $this->compare_end_date ] )
			->getVar();

		// Calculate current CTR and CTR difference.
		$positions['ctr']           = empty( $positions['ctr'] ) ? 0 : $positions['ctr'];
		$positions['ctrDifference'] = empty( $positions['ctrDifference'] ) ? 0 : $positions['ctrDifference'];
		$positions['ctrDifference'] = $positions['ctr'] - $positions['ctrDifference'];

		set_transient( $cache_key, $positions, DAY_IN_SECONDS );

		return $positions;
	}

	/**
	 * Get position graph
	 *
	 * @return array
	 */
	public function get_top_position_graph() {
		global $wpdb;

		$cache_key = $this->get_cache_key( 'top_keywords_graph', $this->days . 'days' );
		$cache     = get_transient( $cache_key );

		if ( false !== $cache ) {
			return $cache;
		}

		if ( ! Console::is_console_connected() ) {
			return $cache;
		}

		// Step1. Get split date intervals for graph within selected date range.
		$intervals     = $this->get_intervals();
		$sql_daterange = $this->get_sql_date_intervals( $intervals );

		// Step2. Get most recent days for each split date intervals.
		// phpcs:disable
		$query = $wpdb->prepare(
			"SELECT MAX(DATE(created)) as date, {$sql_daterange}
			FROM {$wpdb->prefix}rank_math_analytics_gsc
			WHERE created BETWEEN %s AND %s
			GROUP BY range_group",
			$this->start_date,
			$this->end_date
		);
		$position_dates = DB_Helper::get_results( $query, ARRAY_A );
		// phpcs:enable

		if ( count( $position_dates ) === 0 ) {
			return [];
		}

		$dates = [];
		foreach ( $position_dates as $row ) {
			array_push( $dates, $row['date'] );
		}
		$dates = '(\'' . join( '\', \'', $dates ) . '\')';

		// Step3. Get keywords count filtered by position range group for each date.
		// phpcs:disable
		$query = $wpdb->prepare(
			"SELECT COUNT(t.query) AS total, t.date, 
				CASE
					WHEN t.position BETWEEN 1 AND 3 THEN 'top3'
					WHEN t.position BETWEEN 4 AND 10 THEN 'top10'
					WHEN t.position BETWEEN 11 AND 50 THEN 'top50'
					WHEN t.position BETWEEN 51 AND 100 THEN 'top100'
					ELSE 'none'
				END AS position_type
			FROM (
				SELECT query, ROUND( AVG(position), 0 ) AS position, Date(created) as date
				FROM {$wpdb->prefix}rank_math_analytics_gsc
				WHERE created BETWEEN %s AND %s AND DATE(created) IN {$dates}
				GROUP BY DATE(created), query) AS t
			GROUP BY t.date, position_type",
			$this->start_date,
			$this->end_date
		);
		$position_data = DB_Helper::get_results( $query );
		// phpcs:enable

		// Construct return data.
		$data = $this->get_date_array(
			$intervals['dates'],
			[
				'top3'   => 0,
				'top10'  => 0,
				'top50'  => 0,
				'top100' => 0,
			]
		);

		foreach ( $position_data as $row ) {
			if ( ! isset( $intervals['map'][ $row->date ] ) ) {
				continue;
			}

			$date = $intervals['map'][ $row->date ];

			if ( ! isset( $data[ $date ][ $row->position_type ] ) ) {
				continue;
			}

			$key = $row->position_type;

			$data[ $date ][ $key ] = $row->total;
		}

		$data = array_values( $data );
		set_transient( $cache_key, $data, DAY_IN_SECONDS );

		return $data;
	}

	/**
	 * Get top position total.
	 *
	 * @param  array  $positions Position array.
	 * @param  array  $rows      Data to process.
	 * @param  string $where     What data to get total.
	 *
	 * @return array
	 */
	private function get_top_position_total( $positions, $rows, $where ) {
		foreach ( $rows as $row ) {
			$positions[ $row->position_type ][ $where ] = $row->total;
		}

		if ( 'difference' === $where ) {
			$positions['top3']['difference']   = $positions['top3']['total'] - $positions['top3']['difference'];
			$positions['top10']['difference']  = $positions['top10']['total'] - $positions['top10']['difference'];
			$positions['top50']['difference']  = $positions['top50']['total'] - $positions['top50']['difference'];
			$positions['top100']['difference'] = $positions['top100']['total'] - $positions['top100']['difference'];
		}

		return $positions;
	}
}
PK     ™ŠU]ruí’Ÿ  Ÿ  *  includes/modules/analytics/class-posts.phpnu „[µü¤        <?php
/**
 * The Analytics Module
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use stdClass;
use WP_Error;
use WP_REST_Request;
use RankMath\Helper;
use RankMath\Analytics\DB;

defined( 'ABSPATH' ) || exit;

/**
 * Posts class.
 *
 * @method get_analytics_data()
 */
class Posts extends Objects {

	/**
	 * Get post data.
	 *
	 * @param  WP_REST_Request $request post object.
	 *
	 * @return object
	 */
	public function get_post( $request ) {
		$id   = $request->get_param( 'id' );
		$post = DB::objects()
			->where( 'object_id', $id )
			->one();

		if ( is_null( $post ) ) {
			return [ 'errorMessage' => esc_html__( 'Sorry, no post found for given id.', 'seo-by-rank-math' ) ];
		}

		$post->admin_url = admin_url();
		$post->home_url  = home_url();

		return apply_filters( 'rank_math/analytics/post_data', (array) $post, $request );
	}

	/**
	 * Get posts by objects.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_posts_rows_by_objects( WP_REST_Request $request ) {
		$pre = apply_filters( 'rank_math/analytics/get_posts_rows_by_objects', false, $request );
		if ( false !== $pre ) {
			return $pre;
		}

		$cache_group = 'rank_math_posts_rows_by_objects';
		$cache_key   = $this->generate_hash( $request );
		$data        = $this->get_cache( $cache_key, $cache_group );
		if ( false !== $data ) {
			return rest_ensure_response( $data );
		}

		// Pagination.
		$per_page = 25;
		$offset   = ( $request->get_param( 'page' ) - 1 ) * $per_page;

		// Get objects filtered by seo score range and it's analytics data.
		$objects = $this->get_objects_by_score( $request );
		$pages   = \array_keys( $objects['rows'] );
		$console = $this->get_analytics_data(
			[
				'offset'    => 0, // Here offset should always zero.
				'perpage'   => $objects['rowsFound'],
				'sub_where' => " AND page IN ('" . join( "', '", $pages ) . "')",
			]
		);

		// Construct return data.
		$new_rows = [];
		foreach ( $objects['rows'] as $object ) {
			$page = $object['page'];

			if ( isset( $console[ $page ] ) ) {
				$object = \array_merge( $console[ $page ], $object );
			}

			if ( ! isset( $object['links'] ) ) {
				$object['links'] = new stdClass();
			}

			$new_rows[ $page ] = $object;
		}

		$count = count( $new_rows );

		if ( $offset + 25 <= $count ) {
			$new_rows = array_slice( $new_rows, $offset, 25 );

		} else {
			$rest     = $count - $offset;
			$new_rows = array_slice( $new_rows, $offset, $rest );
		}
		if ( empty( $new_rows ) ) {
			$new_rows['response'] = 'No Data';
		}

		$output = [
			'rows'      => $new_rows,
			'rowsFound' => $objects['rowsFound'],
		];

		$this->set_cache( $cache_key, $output, $cache_group, DAY_IN_SECONDS );

		return rest_ensure_response( $output );
	}
}
PK     ™ŠU]ÜN‘’(  ’(  )  includes/modules/analytics/class-gtag.phpnu „[µü¤        <?php
/**
 * The GTag
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright 2019 Google LLC
 * The following code is a derivative work of the code from the Site Kit Plugin(https://sitekit.withgoogle.com), which is licensed under Apache License 2.0.
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use AMP_Theme_Support;
use AMP_Options_Manager;

defined( 'ABSPATH' ) || exit;

/**
 * GTag class.
 */
class GTag {

	use Hooker;

	/**
	 * Primary "standard" AMP website mode.
	 *
	 * @var string
	 */
	const AMP_MODE_PRIMARY = 'primary';

	/**
	 * Secondary AMP website mode.
	 *
	 * @var string
	 */
	const AMP_MODE_SECONDARY = 'secondary';

	/**
	 * Options.
	 *
	 * @var array
	 */
	private $options = null;

	/**
	 * Internal flag set after gtag amp print for the first time.
	 *
	 * @var bool
	 */
	private $did_amp_gtag = false;

	/**
	 * The Constructor
	 */
	public function __construct() {
		$this->action( 'template_redirect', 'add_analytics_tag' );
	}

	/**
	 * Add analytics tag.
	 */
	public function add_analytics_tag() {
		// Early Bail!!
		$use_snippet = $this->get( 'install_code' );
		if ( ! $use_snippet ) {
			return;
		}

		$property_id = $this->get( 'property_id' );
		if ( ! $property_id ) {
			return;
		}

		$this->action( 'wp_head', 'print_tracking_opt_out', 0 ); // For non-AMP and AMP.
		$this->action( 'web_stories_story_head', 'print_tracking_opt_out', 0 ); // For Web Stories plugin.

		if ( $this->is_amp() ) {
			$this->action( 'amp_print_analytics', 'print_amp_gtag' ); // For all AMP modes.
			$this->action( 'wp_footer', 'print_amp_gtag', 20 ); // For AMP Standard and Transitional.
			$this->action( 'amp_post_template_footer', 'print_amp_gtag', 20 ); // For AMP Reader.
			$this->action( 'web_stories_print_analytics', 'print_amp_gtag' ); // For Web Stories plugin.

			// Load amp-analytics component for AMP Reader.
			$this->filter( 'amp_post_template_data', 'amp_analytics_component_data' );
		} elseif ( version_compare( get_bloginfo( 'version' ), '5.7', '<' ) ) {
			$this->action( 'wp_enqueue_scripts', 'enqueue_gtag_js' );
		} else {
			$this->action( 'wp_head', 'add_gtag_js' );
		}
	}

	/**
	 * Print gtag <amp-analytics> tag.
	 */
	public function print_amp_gtag() {
		if ( $this->did_amp_gtag ) {
			return;
		}

		$this->did_amp_gtag = true;

		$property_id  = $this->get( 'property_id' );
		$gtag_options = [
			'vars'            => [
				'gtag_id' => $property_id,
				'config'  => [
					$property_id => [
						'groups' => 'default',
						'linker' => [
							'domains' => [ $this->get_home_domain() ],
						],
					],
				],
			],
			'optoutElementId' => '__gaOptOutExtension',
		];
		?>
		<amp-analytics type="gtag" data-credentials="include">
			<script type="application/json">
				<?php echo wp_json_encode( $gtag_options ); ?>
			</script>
		</amp-analytics>
		<?php
	}

	/**
	 * Loads AMP analytics script if opted in.
	 *
	 * @param array $data AMP template data.
	 * @return array Filtered $data.
	 */
	public function amp_analytics_component_data( $data ) {
		if ( isset( $data['amp_component_scripts']['amp-analytics'] ) ) {
			return $data;
		}

		$data['amp_component_scripts']['amp-analytics'] = 'https://cdn.ampproject.org/v0/amp-analytics-0.1.js';
		return $data;
	}

	/**
	 * Print gtag snippet for non-amp. Used only for WordPress 5.7 or above.
	 */
	public function add_gtag_js() {
		if ( $this->is_tracking_disabled() ) {
			return;
		}

		$gtag_script_info = $this->get_gtag_info();

		wp_print_script_tag(
			[
				'id'    => 'google_gtagjs',
				'src'   => $gtag_script_info['url'],
				'async' => true,
			]
		);

		wp_print_inline_script_tag(
			$gtag_script_info['inline'],
			[
				'id' => 'google_gtagjs-inline',
			]
		);
	}

	/**
	 * Print gtag snippet for non-amp. Used for below WordPress 5.7.
	 */
	public function enqueue_gtag_js() {
		if ( $this->is_tracking_disabled() ) {
			return;
		}

		$gtag_script_info = $this->get_gtag_info();

		wp_enqueue_script( // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
			'google_gtagjs',
			$gtag_script_info['url'],
			false,
			null, // phpcs:ignore
			false
		);

		wp_add_inline_script(
			'google_gtagjs',
			$gtag_script_info['inline']
		);
	}

	/**
	 * Gets the current AMP mode.
	 *
	 * @return bool|string 'primary' if in standard mode,
	 *                     'secondary' if in transitional or reader modes
	 *                     false if AMP not active, or unknown mode
	 */
	public function get_amp_mode() {
		if ( ! class_exists( 'AMP_Theme_Support' ) ) {
			return false;
		}

		$exposes_support_mode = defined( 'AMP_Theme_Support::STANDARD_MODE_SLUG' )
			&& defined( 'AMP_Theme_Support::TRANSITIONAL_MODE_SLUG' )
			&& defined( 'AMP_Theme_Support::READER_MODE_SLUG' );

		if ( defined( 'AMP__VERSION' ) ) {
			$amp_plugin_version = AMP__VERSION;
			if ( strpos( $amp_plugin_version, '-' ) !== false ) {
				$amp_plugin_version = explode( '-', $amp_plugin_version )[0];
			}

			$amp_plugin_version_2_or_higher = version_compare( $amp_plugin_version, '2.0.0', '>=' );
		} else {
			$amp_plugin_version_2_or_higher = false;
		}

		if ( $amp_plugin_version_2_or_higher ) {
			$exposes_support_mode = class_exists( 'AMP_Options_Manager' )
				&& method_exists( 'AMP_Options_Manager', 'get_option' )
				&& $exposes_support_mode;
		} else {
			$exposes_support_mode = class_exists( 'AMP_Theme_Support' )
				&& method_exists( 'AMP_Theme_Support', 'get_support_mode' )
				&& $exposes_support_mode;
		}

		if ( $exposes_support_mode ) {
			// If recent version, we can properly detect the mode.
			if ( $amp_plugin_version_2_or_higher ) {
				$mode = AMP_Options_Manager::get_option( 'theme_support' );
			} else {
				$mode = AMP_Theme_Support::get_support_mode();
			}

			if ( AMP_Theme_Support::STANDARD_MODE_SLUG === $mode ) {
				return self::AMP_MODE_PRIMARY;
			}

			if ( in_array( $mode, [ AMP_Theme_Support::TRANSITIONAL_MODE_SLUG, AMP_Theme_Support::READER_MODE_SLUG ], true ) ) {
				return self::AMP_MODE_SECONDARY;
			}
		} elseif ( function_exists( 'amp_is_canonical' ) ) {
			// On older versions, if it is not primary AMP, it is definitely secondary AMP (transitional or reader mode).
			if ( amp_is_canonical() ) {
				return self::AMP_MODE_PRIMARY;
			}

			return self::AMP_MODE_SECONDARY;
		}

		return false;
	}

	/**
	 * Is AMP url.
	 *
	 * @return bool
	 */
	protected function is_amp() {
		if ( is_singular( 'web-story' ) ) {
			return true;
		}

		return function_exists( 'is_amp_endpoint' ) && is_amp_endpoint();
	}

	/**
	 * Is tracking disabled.
	 *
	 * @return bool
	 */
	protected function is_tracking_disabled() {
		if ( ! $this->get( 'exclude_loggedin' ) ) {
			return false;
		}

		$logged_in    = is_user_logged_in();
		$filter_match = false;
		if ( $logged_in ) {
			if ( ! function_exists( 'get_editable_roles' ) ) {
				require_once ABSPATH . 'wp-admin/includes/user.php'; // @phpstan-ignore-line
			}

			$all_roles    = array_keys( get_editable_roles() );
			$all_roles    = array_combine( $all_roles, $all_roles ); // Copy values to keys for easier filtering.
			$user_roles   = array_flip( get_userdata( get_current_user_id() )->roles );
			$filter_match = count( array_intersect_key( (array) $this->do_filter( 'analytics/gtag_exclude_loggedin_roles', $all_roles ), $user_roles ) );
		}

		return $filter_match;
	}

	/**
	 * Gets the hostname of the home URL.
	 *
	 * @return string
	 */
	private function get_home_domain() {
		return wp_parse_url( home_url(), PHP_URL_HOST );
	}

	/**
	 * Get option
	 *
	 * @param  string $id Option to get.
	 *
	 * @return mixed
	 */
	protected function get( $id ) {
		if ( is_null( $this->options ) ) {
			$this->options = $this->normalize_it( get_option( 'rank_math_google_analytic_options', [] ) );
		}

		$value = isset( $this->options[ $id ] ) ? $this->options[ $id ] : false;
		if ( $value && 'property_id' === $id ) {
			$value = $this->get( 'measurement_id' );
		}

		return $value;
	}

	/**
	 * Get gtag script info
	 *
	 * @return mixed
	 */
	protected function get_gtag_info() {
		// Get Google Analytics Property ID.
		$property_id = $this->get( 'property_id' );

		// Get main gtag script Url.
		$url = 'https://www.googletagmanager.com/gtag/js?id=' . esc_attr( $property_id );

		$gtag_opt = [];
		if ( $this->get_amp_mode() ) {
			$gtag_opt['linker'] = [
				'domains' => [ $this->get_home_domain() ],
			];
		}

		$gtag_inline_linker_script = '';
		if ( ! empty( $gtag_opt['linker'] ) ) {
			$gtag_inline_linker_script = 'gtag(\'set\', \'linker\', ' . wp_json_encode( $gtag_opt['linker'] ) . ' );';
		}
		unset( $gtag_opt['linker'] );

		// Get Google Analytics Property ID.
		$gtag_config = [];
		$gtag_config = $this->do_filter( 'analytics/gtag_config', $gtag_config );

		// Construct inline scripts.
		$gtag_inline_script  = 'window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}';
		$gtag_inline_script .= $gtag_inline_linker_script;
		$gtag_inline_script .= 'gtag(\'js\', new Date());';
		$gtag_inline_script .= 'gtag(\'config\', \'' . esc_attr( $property_id ) . '\', {' . join( ', ', $gtag_config ) . '} );';

		$gtag = $this->do_filter(
			'analytics/gtag',
			[
				'url'    => $url,
				'inline' => $gtag_inline_script,
			]
		);

		return $gtag;
	}

	/**
	 * Normalize option data
	 *
	 * @param mixed $options Array to normalize.
	 * @return mixed
	 */
	protected function normalize_it( $options ) {
		foreach ( (array) $options as $key => $value ) {
			$options[ $key ] = is_array( $value ) ? $this->normalize_it( $value ) : Helper::normalize_data( $value );
		}

		return $options;
	}

	/**
	 * Print the user tracking opt-out code
	 *
	 * This script opts out of all Google Analytics tracking, for all measurement IDs, regardless of implementation.
	 *
	 * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/user-opt-out
	 */
	public function print_tracking_opt_out() {
		if ( ! $this->is_tracking_disabled() ) {
			return;
		}

		if ( $this->is_amp() ) :
			?>
		<script type="application/ld+json" id="__gaOptOutExtension"></script>
		<?php else : ?>
		<script type="text/javascript">window['ga-disable-<?php echo esc_js( $this->get( 'property_id' ) ); ?>'] = true;</script>
			<?php
		endif;
	}
}
PK     ™ŠU]oñ	Yš@  š@  2  includes/modules/analytics/class-email-reports.phpnu „[µü¤        <?php
/**
 * Analytics Email Reports.
 *
 * @since      1.0.68
 * @package    RankMath
 * @subpackage RankMath\modules
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Google\Console;
use RankMath\Admin\Admin_Helper;

use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Email_Reports class.
 */
class Email_Reports {

	use Hooker;

	/**
	 * Email content variables.
	 *
	 * @var array
	 */
	private $variables = [];

	/**
	 * Path to the views directory.
	 *
	 * @var array
	 */
	private $views_path = '';

	/**
	 * URL to the assets directory.
	 *
	 * @var array
	 */
	private $assets_url = '';

	/**
	 * Charts Account.
	 *
	 * @var string
	 */
	private $charts_account = 'rankmath';

	/**
	 * Charts Key.
	 *
	 * @var string
	 */
	private $charts_key = '10042B42-9193-428A-ABA7-5753F3370F84';

	/**
	 * Graph data.
	 *
	 * @var array
	 */
	private $graph_data = [];

	/**
	 * Debug mode.
	 *
	 * @var boolean
	 */
	private $debug = false;

	/**
	 * The constructor.
	 */
	public function __construct() {
		if ( ! Console::is_console_connected() ) {
			return;
		}

		$directory        = __DIR__;
		$this->views_path = $directory . '/views/email-reports/';

		$url              = plugin_dir_url( __FILE__ );
		$this->assets_url = $this->do_filter( 'analytics/email_report_assets_url', $url . 'assets/' );

		$this->hooks();
	}

	/**
	 * Add filter & action hooks.
	 *
	 * @return void
	 */
	public function hooks() {
		$this->action( 'rank_math/analytics/email_report_event', 'email_report' );
		$this->action( 'wp_loaded', 'maybe_debug' );

		$this->action( 'rank_math/analytics/email_report_html', 'replace_variables' );
		$this->action( 'rank_math/analytics/email_report_html', 'strip_comments' );
	}

	/**
	 * Send Analytics report or error message.
	 *
	 * @return void
	 */
	public function email_report() {
		$this->setup_variables();
		$this->send_report();
	}

	/**
	 * Collect variables to be used in the Report template.
	 *
	 * @return void
	 */
	public function setup_variables() {
		$stats = $this->get_stats();
		$date  = $this->get_date();

		// Translators: placeholder is "rankmath.com" as a link.
		$footer_text  = sprintf( esc_html__( 'This email was sent to you as a registered member of %s.', 'seo-by-rank-math' ), '<a href="###SITE_URL###">###SITE_URL_SIMPLE###</a>' );
		$footer_text .= ' ';

		// Translators: placeholder is "click here" as a link.
		$footer_text .= sprintf( esc_html__( 'To update your email preferences, %s.', 'seo-by-rank-math' ), '<a href="###SETTINGS_URL###">' . esc_html__( 'click here', 'seo-by-rank-math' ) . '</a>' );

		$footer_text .= '###ADDRESS###';

		$this->variables = [
			'site_url'                    => get_home_url(),
			'site_url_simple'             => explode( '://', get_home_url() )[1],
			'settings_url'                => Helper::get_settings_url( 'general', 'analytics' ),
			'report_url'                  => Helper::get_admin_url( 'analytics' ),
			'assets_url'                  => $this->assets_url,
			'address'                     => '<br/> [rank_math_contact_info show="address"]',
			'logo_link'                   => KB::get( 'email-reports-logo', 'Email Report Logo' ),

			'period_days'                 => $date['period'],
			'start_date'                  => $date['start'],
			'end_date'                    => $date['end'],

			'stats_clicks'                => $stats['clicks'],
			'stats_clicks_diff'           => $stats['clicks_diff'],
			'stats_traffic'               => $stats['traffic'],
			'stats_traffic_diff'          => $stats['traffic_diff'],
			'stats_impressions'           => $stats['impressions'],
			'stats_impressions_diff'      => $stats['impressions_diff'],
			'stats_keywords'              => $stats['keywords'],
			'stats_keywords_diff'         => $stats['keywords_diff'],
			'stats_position'              => $stats['position'],
			'stats_position_diff'         => $stats['position_diff'],
			'stats_top_3_positions'       => $stats['top_3_positions'],
			'stats_top_3_positions_diff'  => $stats['top_3_positions_diff'],
			'stats_top_10_positions'      => $stats['top_10_positions'],
			'stats_top_10_positions_diff' => $stats['top_10_positions_diff'],
			'stats_top_50_positions'      => $stats['top_50_positions'],
			'stats_top_50_positions_diff' => $stats['top_50_positions_diff'],
			'stats_invalid_data'          => $stats['invalid_data'],
			'footer_html'                 => $footer_text,
		];

		$this->variables = $this->do_filter( 'analytics/email_report_variables', $this->variables );
	}

	/**
	 * Get date data.
	 *
	 * @return array
	 */
	public function get_date() {
		$period = self::get_period_from_frequency();

		// Shift 3 days prior.
		$subtract = DAY_IN_SECONDS * 3;
		$start    = strtotime( '-' . $period . ' days' ) - $subtract;
		$end      = strtotime( $this->do_filter( 'analytics/report_end_date', 'today' ) ) - $subtract;

		$start = date_i18n( 'd M Y', $start );
		$end   = date_i18n( 'd M Y', $end );
		return compact( 'start', 'end', 'period' );
	}

	/**
	 * Get Analytics stats.
	 *
	 * @return array
	 */
	public function get_stats() {
		$period = self::get_period_from_frequency();
		$stats  = Stats::get();
		$stats->set_date_range( "-{$period} days" );

		// Basic stats.
		$data = (array) $stats->get_analytics_summary();

		$analytics              = get_option( 'rank_math_google_analytic_options' );
		$is_analytics_connected = ! empty( $analytics ) && ! empty( $analytics['view_id'] );

		$out = [];

		$out['impressions']      = $data['impressions']['total'];
		$out['impressions_diff'] = $data['impressions']['difference'];

		$out['traffic']      = 0;
		$out['traffic_diff'] = 0;
		if ( $is_analytics_connected && defined( 'RANK_MATH_PRO_FILE' ) && isset( $data['pageviews'] ) ) {
			$out['traffic']      = $data['pageviews']['total'];
			$out['traffic_diff'] = $data['pageviews']['difference'];
		}

		$out['clicks']      = 0;
		$out['clicks_diff'] = 0;
		if ( ! $is_analytics_connected || ( $is_analytics_connected && ! defined( 'RANK_MATH_PRO_FILE' ) ) ) {
			$out['clicks']      = $data['clicks']['total'];
			$out['clicks_diff'] = $data['clicks']['difference'];
		}

		$out['keywords']      = $data['keywords']['total'];
		$out['keywords_diff'] = $data['keywords']['difference'];

		$out['position']      = $data['position']['total'];
		$out['position_diff'] = $data['position']['difference'];

		// Keyword stats.
		$kw_data = (array) $stats->get_top_keywords();

		$out['top_3_positions']      = $kw_data['top3']['total'];
		$out['top_3_positions_diff'] = $kw_data['top3']['difference'];

		$out['top_10_positions']      = $kw_data['top10']['total'];
		$out['top_10_positions_diff'] = $kw_data['top10']['difference'];

		$out['top_50_positions']      = $kw_data['top50']['total'];
		$out['top_50_positions_diff'] = $kw_data['top50']['difference'];

		$out['invalid_data'] = false;
		if ( ! count( array_filter( $out ) ) ) {
			$out['invalid_data'] = true;
		}

		return $out;
	}

	/**
	 * Get date period (days) from the frequency option.
	 *
	 * @param string $frequency Frequency string.
	 *
	 * @return string
	 */
	public static function get_period_from_frequency( $frequency = null ) {
		$periods = [
			'monthly' => 30,
		];

		$periods = apply_filters( 'rank_math/analytics/email_report_periods', $periods );

		if ( empty( $frequency ) ) {
			$frequency = self::get_setting( 'frequency', 'monthly' );
		}

		if ( isset( $periods[ $frequency ] ) ) {
			return absint( $periods[ $frequency ] );
		}

		return absint( reset( $periods ) );
	}

	/**
	 * Send report data.
	 *
	 * @return void
	 */
	public function send_report() {
		$account      = Admin_Helper::get_registration_data();
		$report_email = [
			'to'      => $account['email'],
			'subject' => sprintf(
				// Translators: placeholder is the site URL.
				__( 'Rank Math [SEO Report] - %s', 'seo-by-rank-math' ),
				explode( '://', get_home_url() )[1]
			),
			'message' => $this->get_template( 'report' ),
			'headers' => 'Content-Type: text/html; charset=UTF-8',
		];

		/**
		 * Filter: rank_math/analytics/email_report_parameters
		 * Filters the report email parameters.
		 */
		$report_email = $this->do_filter( 'analytics/email_report_parameters', $report_email );

		wp_mail(
			$report_email['to'],
			$report_email['subject'],
			$report_email['message'],
			$report_email['headers']
		);
	}

	/**
	 * Get full HTML template for email.
	 *
	 * @param string $template Template name.
	 * @return string
	 */
	private function get_template( $template ) {
		$file = $this->locate_template( $template );

		/**
		 * Filter template file.
		 */
		$file = $this->do_filter( 'analytics/email_report_template', $file, $template );

		if ( ! file_exists( $file ) ) {
			return '';
		}

		ob_start();
		include_once $file;
		$content = ob_get_clean();

		/**
		 * Filter template HTML.
		 */
		return $this->do_filter( 'analytics/email_report_html', $content );
	}

	/**
	 * Locate and include template part.
	 *
	 * @param string $part Template part.
	 * @param array  $args Template arguments.
	 * @return mixed
	 */
	private function template_part( $part, $args = [] ) {
		$file = $this->locate_template( $part );

		/**
		 * Filter template part.
		 */
		$file = $this->do_filter( 'analytics/email_report_template_part', $file, $part, $args );

		if ( ! file_exists( $file ) ) {
			return '';
		}

		extract( $args, EXTR_SKIP ); // phpcs:ignore
		include $file;
	}

	/**
	 * Replace variables in content.
	 *
	 * @param string $content   Email content.
	 * @param string $recursion Recursion count, to account for double-encoded variables.
	 * @return string
	 */
	public function replace_variables( $content, $recursion = 1 ) {
		foreach ( $this->variables as $key => $value ) {
			if ( ! is_scalar( $value ) ) {
				continue;
			}

			// Variables must be uppercase.
			$key = mb_strtoupper( $key );

			$content = str_replace( "###$key###", $value, $content );
		}

		if ( $recursion ) {
			--$recursion;
			$content = $this->replace_variables( $content, $recursion );
		}

		return do_shortcode( $content );
	}

	/**
	 * Strip HTML & CSS comments.
	 *
	 * @param string $content Email content.
	 * @return string
	 */
	public function strip_comments( $content ) {
		$content = preg_replace( '[(<!--(.*)-->|/\*(.*)\*/)]isU', '', $content );

		return $content;
	}

	/**
	 * Init debug mode if requested and allowed.
	 *
	 * @return void
	 */
	public function maybe_debug() {
		if ( 1 !== absint( Param::get( 'rank_math_analytics_report_preview' ) ) ) {
			return;
		}

		if ( ! Helper::has_cap( 'analytics' ) ) {
			return;
		}

		$send   = boolval( Param::get( 'send' ) );
		$values = boolval( Param::get( 'values', '1' ) );

		$this->debug( $send, $values );
	}

	/**
	 * Send or output the report email.
	 *
	 * @param boolean $send   Send email or output to browser.
	 * @param boolean $values Replace variables with actual values.
	 * @return void
	 */
	private function debug( $send = false, $values = true ) {
		$this->debug = true;

		if ( $values ) {
			$this->setup_variables();
		}

		if ( $send ) {
			// Send it now.
			$this->send_report();
			$url = remove_query_arg(
				[
					'rank_math_analytics_report_preview',
					'send',
					'values',
				]
			);
			Helper::redirect( $url );
			exit;
		}

		// Output it to the browser.
		echo $this->get_template( 'report' ); // phpcs:ignore
		die();
	}

	/**
	 * Variable getter, whenever the value is needed in PHP.
	 *
	 * @param string $name Variable name.
	 * @return mixed
	 */
	public function get_variable( $name ) {
		if ( isset( $this->variables[ $name ] ) ) {
			return $this->variables[ $name ];
		}

		return "###$name###";
	}

	/**
	 * Setting getter.
	 *
	 * @param string $option        Option name.
	 * @param mixed  $default_value Default value.
	 * @return mixed
	 */
	public static function get_setting( $option, $default_value = false ) {
		return Helper::get_settings( 'general.console_email_' . $option, $default_value );
	}

	/**
	 * Output image inside the email template.
	 *
	 * @param string $url    Image URL.
	 * @param string $width  Image width.
	 * @param string $height Image height.
	 * @param string $alt    ALT text.
	 * @param array  $attr   Additional attributes.
	 * @return void
	 */
	public function image( $url, $width = 0, $height = 0, $alt = '', $attr = [] ) {
		$atts           = $attr;
		$atts['border'] = '0';

		if ( ! isset( $atts['src'] ) ) {
			$atts['src'] = $url;
		}

		if ( ! isset( $atts['width'] ) && $width ) {
			$atts['width'] = $width;
		}

		if ( ! isset( $atts['height'] ) && $height ) {
			$atts['height'] = $height;
		}

		if ( ! isset( $atts['alt'] ) ) {
			$atts['alt'] = $alt;
		}

		if ( ! isset( $atts['style'] ) ) {
			$atts['style'] = 'border: 0; outline: none; text-decoration: none; display: inline-block;';
		}

		if ( substr( $atts['src'], 0, 4 ) !== 'http' && substr( $atts['src'], 0, 3 ) !== '###' ) {
			$atts['src'] = $this->assets_url . 'img/' . $atts['src'];
		}

		$atts = $this->do_filter( 'analytics/email_report_image_atts', $atts, $url, $width, $height, $alt, $attr );

		$attributes = '';
		foreach ( $atts as $name => $value ) {
			if ( ! empty( $value ) ) {
				$value       = ( 'src' === $name ) ? esc_url_raw( $value ) : esc_attr( $value );
				$attributes .= ' ' . $name . '="' . $value . '"';
			}
		}

		$image = "<img $attributes>";
		$image = $this->do_filter( 'analytics/email_report_image_html', $image, $url, $width, $height, $alt, $attr );

		echo $image; // phpcs:ignore
	}

	/**
	 * Gets template path.
	 *
	 * @param string $template_name    Template name.
	 * @param bool   $return_full_path Return the full path or not.
	 * @return string
	 */
	public function locate_template( $template_name, $return_full_path = true ) {
		$default_paths  = [ $this->views_path ];
		$template_paths = $this->do_filter( 'analytics/email_report_template_paths', $default_paths );

		$paths        = array_reverse( $template_paths );
		$located      = '';
		$path_partial = '';
		foreach ( $paths as $path ) {
			if ( file_exists( $full_path = trailingslashit( $path ) . $template_name . '.php' ) ) { // phpcs:ignore
				$located      = $full_path;
				$path_partial = $path;
				break;
			}
		}

		return $return_full_path ? $located : $path_partial;
	}

	/**
	 * Load all graph data into memory.
	 *
	 * @return void
	 */
	private function load_graph_data() {
		$period = self::get_period_from_frequency();
		$stats  = Stats::get();
		$stats->set_date_range( "-{$period} days" );
		$this->graph_data = (array) $stats->get_analytics_summary_graph();
	}

	/**
	 * Get data points for graph.
	 *
	 * @param string $chart Chart to get data for.
	 * @return array
	 */
	public function get_graph_data( $chart ) {
		if ( empty( $this->graph_data ) ) {
			$this->load_graph_data();
		}

		$data  = [];
		$group = 'merged';
		$prop  = $chart;
		if ( 'traffic' === $chart ) {
			$group = 'traffic';
			$prop  = 'pageviews';
		}

		if ( empty( $this->graph_data[ $group ] ) ) {
			return $data;
		}

		foreach ( (array) $this->graph_data[ $group ] as $range_data ) {
			$range_data = (array) $range_data;
			if ( isset( $range_data[ $prop ] ) ) {
				$data[] = $range_data[ $prop ];
			}
		}

		return $data;
	}

	/**
	 * Charts API sign request.
	 *
	 * @param string $query Query.
	 * @param string $code  Code.
	 * @return string
	 */
	private function charts_api_sign( $query, $code ) {
		return hash_hmac( 'sha256', $query, $code );
	}

	/**
	 * Generate URL for the Charts API image.
	 *
	 * @param  array $graph_data Graph data points.
	 * @param  int   $width      Image height.
	 * @param  int   $height     Image width.
	 *
	 * @return string
	 */
	private function charts_api_url( $graph_data, $width = 192, $height = 102 ) {
		$params = [
			'chco' => '80ace7',
			'chds' => 'a',
			'chf'  => 'bg,s,f7f9fb',
			'chls' => 4,
			'chm'  => 'B,e2eeff,0,0,0',
			'chs'  => "{$width}x{$height}",
			'cht'  => 'ls',
			'chd'  => 'a:' . join( ',', $graph_data ),
			'icac' => $this->charts_account,
		];

		$query_string = urldecode( http_build_query( $params ) );
		$signature    = $this->charts_api_sign( $query_string, $this->charts_key );

		return 'https://charts.rankmath.com/chart?' . $query_string . '&ichm=' . $signature;
	}

	/**
	 * Check if fields should be hidden.
	 *
	 * @return bool
	 */
	public static function are_fields_hidden() {
		return apply_filters( 'rank_math/analytics/hide_email_report_options', false );
	}
}
PK     ™ŠU]3x»‚Ã  Ã  4  includes/modules/analytics/class-analytics-stats.phpnu „[µü¤        <?php
/**
 * Show Analytics stats on frontend.
 *
 * @since      1.0.86
 * @package    RankMath
 * @subpackage RankMath\Analytics
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Analytics;

use RankMath\Helper;
use RankMath\KB;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Analytics_Stats class.
 */
class Analytics_Stats {

	use Hooker;

	/**
	 * The Constructor
	 */
	public function __construct() {
		if ( ! Helper::can_add_frontend_stats() ) {
			return;
		}

		$this->action( 'wp_enqueue_scripts', 'enqueue' );
	}

	/**
	 * Enqueue Styles and Scripts
	 */
	public function enqueue() {
		if ( ! is_singular() || is_admin() || is_preview() || Helper::is_divi_frontend_editor() ) {
			return;
		}

		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );
		wp_enqueue_style( 'rank-math-analytics-stats', $uri . '/assets/css/admin-bar.css', null, rank_math()->version );
		wp_enqueue_script( 'rank-math-analytics-stats', $uri . '/assets/js/admin-bar.js', [ 'jquery', 'wp-api-fetch', 'wp-element', 'wp-components', 'lodash' ], rank_math()->version, true );

		Helper::add_json( 'isConsoleConnected', \RankMath\Google\Console::is_console_connected() );
		Helper::add_json( 'isAnalyticsConnected', \RankMath\Google\Analytics::is_analytics_connected() );
		Helper::add_json( 'hideFrontendStats', get_user_meta( get_current_user_id(), 'rank_math_hide_frontend_stats', true ) );

		Helper::add_json( 'links', KB::get_links() );
	}
}
PK     ™ŠU]¯V1�Å€  Å€  7  includes/modules/seo-analysis/assets/js/seo-analysis.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},dn:function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})}},t={};e.r(t),e.d(t,{updateResults:function(){return De},updateUrl:function(){return ze}});var n={};e.r(n),e.d(n,{appUi:function(){return Ie}});var r={};e.r(r),e.d(r,{getResults:function(){return Ke},getUrl:function(){return Ve}});const a=jQuery;var o=e.n(a);const s=wp.element;const i=React,l=ReactDOM;function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}var c;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(c||(c={}));const m="popstate";function p(e,t){if(!1===e||null==e)throw new Error(t)}function h(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function d(e,t){return{usr:e.state,key:e.key,idx:t}}function f(e,t,n,r){return void 0===n&&(n=null),u({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?g(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function y(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function g(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function b(e,t,n,r){void 0===r&&(r={});let{window:a=document.defaultView,v5Compat:o=!1}=r,s=a.history,i=c.Pop,l=null,h=g();function g(){return(s.state||{idx:null}).idx}function b(){i=c.Pop;let e=g(),t=null==e?null:e-h;h=e,l&&l({action:i,location:k.location,delta:t})}function w(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"==typeof e?e:y(e);return n=n.replace(/ $/,"%20"),p(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==h&&(h=0,s.replaceState(u({},s.state,{idx:h}),""));let k={get action(){return i},get location(){return e(a,s)},listen(e){if(l)throw new Error("A history only accepts one active listener");return a.addEventListener(m,b),l=e,()=>{a.removeEventListener(m,b),l=null}},createHref:e=>t(a,e),createURL:w,encodeLocation(e){let t=w(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){i=c.Push;let r=f(k.location,e,t);n&&n(r,e),h=g()+1;let u=d(r,h),m=k.createHref(r);try{s.pushState(u,"",m)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;a.location.assign(m)}o&&l&&l({action:i,location:k.location,delta:1})},replace:function(e,t){i=c.Replace;let r=f(k.location,e,t);n&&n(r,e),h=g();let a=d(r,h),u=k.createHref(r);s.replaceState(a,"",u),o&&l&&l({action:i,location:k.location,delta:0})},go:e=>s.go(e)};return k}var w;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(w||(w={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function k(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}const v=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function E(e,t){void 0===t&&(t="/");let n,{pathname:r,search:a="",hash:o=""}="string"==typeof e?g(e):e;if(r)if(s=r,v.test(s))n=r;else{if(r.includes("//")){let e=r;r=A(r),h(!1,"Pathnames cannot have embedded double slashes - normalizing "+e+" -> "+r)}n=r.startsWith("/")?O(r.substring(1),"/"):O(r,t)}else n=t;var s;return{pathname:n,search:C(a),hash:T(o)}}function O(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)}),n.length>1?n.join("/"):"/"}function S(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function _(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.length>0)}function P(e,t){let n=_(e);return t?n.map((e,t)=>t===n.length-1?e.pathname:e.pathnameBase):n.map(e=>e.pathnameBase)}function R(e,t,n,r){let a;void 0===r&&(r=!1),"string"==typeof e?a=g(e):(a=u({},e),p(!a.pathname||!a.pathname.includes("?"),S("?","pathname","search",a)),p(!a.pathname||!a.pathname.includes("#"),S("#","pathname","hash",a)),p(!a.search||!a.search.includes("#"),S("#","search","hash",a)));let o,s=""===e||""===a.pathname,i=s?"/":a.pathname;if(null==i)o=n;else{let e=t.length-1;if(!r&&i.startsWith("..")){let t=i.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let l=E(a,o),c=i&&"/"!==i&&i.endsWith("/"),m=(s||"."===i)&&n.endsWith("/");return l.pathname.endsWith("/")||!c&&!m||(l.pathname+="/"),l}const A=e=>e.replace(/\/\/+/g,"/"),j=e=>A(e.join("/")),C=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",T=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;const N=["post","put","patch","delete"],U=(new Set(N),["get",...N]);new Set(U),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function x(){return x=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},x.apply(null,arguments)}const M=i.createContext(null);const D=i.createContext(null);const z=i.createContext(null);const W=i.createContext({outlet:null,matches:[],isDataRoute:!1});function L(){return null!=i.useContext(z)}function H(){return L()||p(!1),i.useContext(z).location}function F(e){i.useContext(D).static||i.useLayoutEffect(e)}function B(){let{isDataRoute:e}=i.useContext(W);return e?function(){let{router:e}=V(I.UseNavigateStable),t=$(K.UseNavigateStable),n=i.useRef(!1);return F(()=>{n.current=!0}),i.useCallback(function(r,a){void 0===a&&(a={}),n.current&&("number"==typeof r?e.navigate(r):e.navigate(r,x({fromRouteId:t},a)))},[e,t])}():function(){L()||p(!1);let e=i.useContext(M),{basename:t,future:n,navigator:r}=i.useContext(D),{matches:a}=i.useContext(W),{pathname:o}=H(),s=JSON.stringify(P(a,n.v7_relativeSplatPath)),l=i.useRef(!1);return F(()=>{l.current=!0}),i.useCallback(function(n,a){if(void 0===a&&(a={}),!l.current)return;if("number"==typeof n)return void r.go(n);let i=R(n,JSON.parse(s),o,"path"===a.relative);null==e&&"/"!==t&&(i.pathname="/"===i.pathname?t:j([t,i.pathname])),(a.replace?r.replace:r.push)(i,a.state,a)},[t,r,s,o,e])}()}i.Component;var I=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(I||{}),K=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(K||{});function V(e){let t=i.useContext(M);return t||p(!1),t}function $(e){let t=function(){let e=i.useContext(W);return e||p(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||p(!1),n.route.id}function J(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}i.startTransition;function q(e){let{basename:t="/",children:n=null,location:r,navigationType:a=c.Pop,navigator:o,static:s=!1,future:l}=e;L()&&p(!1);let u=t.replace(/^\/*/,"/"),m=i.useMemo(()=>({basename:u,navigator:o,static:s,future:x({v7_relativeSplatPath:!1},l)}),[u,l,o,s]);"string"==typeof r&&(r=g(r));let{pathname:h="/",search:d="",hash:f="",state:y=null,key:b="default"}=r,w=i.useMemo(()=>{let e=k(h,u);return null==e?null:{location:{pathname:e,search:d,hash:f,state:y,key:b},navigationType:a}},[u,h,d,f,y,b,a]);return null==w?null:i.createElement(D.Provider,{value:m},i.createElement(z.Provider,{children:n,value:w}))}new Promise(()=>{});i.Component;function G(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const Y=i.startTransition;l.flushSync,i.useId;function Q(e){let{basename:t,children:n,future:r,window:a}=e,o=i.useRef();var s;null==o.current&&(o.current=(void 0===(s={window:a,v5Compat:!0})&&(s={}),b(function(e,t){let{pathname:n,search:r,hash:a}=e.location;return f("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:y(t)},null,s)));let l=o.current,[u,c]=i.useState({action:l.action,location:l.location}),{v7_startTransition:m}=r||{},p=i.useCallback(e=>{m&&Y?Y(()=>c(e)):c(e)},[c,m]);return i.useLayoutEffect(()=>l.listen(p),[l,p]),i.useEffect(()=>J(r),[r]),i.createElement(q,{basename:t,children:n,location:u.location,navigationType:u.action,navigator:l,future:r})}"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement;var X,Z;function ee(e){let t=i.useRef(G(e)),n=i.useRef(!1),r=H(),a=i.useMemo(()=>function(e,t){let n=G(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}(r.search,n.current?null:t.current),[r.search]),o=B(),s=i.useCallback((e,t)=>{const r=G("function"==typeof e?e(a):e);n.current=!0,o("?"+r,t)},[o,a]);return[a,s]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(X||(X={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Z||(Z={}));const te=lodash,ne=wp.i18n,re=wp.hooks,ae=window.rankMathComponents,oe=wp.data,se=wp.compose;function ie(e,t,n){return o().ajax({url:rankMath.ajaxurl,type:n||"POST",dataType:"json",data:o().extend(!0,{action:"rank_math_"+e,security:rankMath.security},t)})}function le(e){return le="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},le(e)}e.dn(ie);var ue=["children","startAudit"];function ce(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ce(Object(n),!0).forEach(function(t){pe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ce(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function pe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=le(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=le(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==le(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,s,i=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return de(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?de(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function de(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var fe=(0,s.createContext)();const ye=(0,se.compose)((0,oe.withSelect)(function(e){var t=e("rank-math-seo-analysis"),n=t.getResults,r=t.getUrl;return{results:n(),url:r()}}),(0,oe.withDispatch)(function(e){return{updateUrl:function(t){e("rank-math-seo-analysis").updateUrl(t)},updateResults:function(t){e("rank-math-seo-analysis").updateResults(t)},startAudit:function(t,n){t(!0),ie("analyze").always(function(r){r.error?n(r.error):e("rank-math-seo-analysis").updateResults(r),t(!1)})}}}))(function(e){var t=e.children,n=e.startAudit,r=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,ue),a=he((0,s.useState)(!1),2),o=a[0],i=a[1],l=he((0,s.useState)(""),2),u=l[0],c=l[1];return wp.element.createElement(fe.Provider,{value:me(me({},r),{},{startProgress:o,setStartProgress:i,startAnalysis:function(){n(i,c)},analysisError:u})},t)});var ge=function(){return(0,s.useContext)(fe)};function be(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,s,i=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return we(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?we(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function we(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const ke=function(){var e=be((0,s.useState)(!1),2),t=e[0],n=e[1],r=ge(),a=r.url,o=r.updateUrl,i=r.startAnalysis;return wp.element.createElement("p",{className:"page-analysis-selected"},(0,ne.__)("Selected page: ","seo-by-rank-math"),t?wp.element.createElement("form",{className:"changeurl-form",onSubmit:function(e){e.preventDefault(),n(!1),i()}},wp.element.createElement(ae.TextControl,{className:"rank-math-analyze-url",variant:"default",value:a,onChange:o}),"Â ",wp.element.createElement(ae.Button,{type:"submit",variant:"secondary",className:"rank-math-changeurl-ok",disabled:!a},(0,ne.__)("OK","seo-by-rank-math"))):wp.element.createElement(React.Fragment,null,wp.element.createElement("a",{href:a,target:"_blank",rel:"noreferrer",className:"rank-math-current-url"},a),"Â ",wp.element.createElement(ae.Button,{variant:"secondary",className:"rank-math-changeurl",onClick:function(){n(!0)}},(0,ne.__)("Change URL","seo-by-rank-math"))))};e.dn(ke);const ve=function(){var e=ge(),t=e.results,n=e.startProgress,r=e.startAnalysis,a=e.analysisError,o=rankMath.analyzeSubpage;return(0,te.isEmpty)(t)?wp.element.createElement(React.Fragment,null,a&&wp.element.createElement(s.RawHTML,null,a),wp.element.createElement("div",{className:"rank-math-seo-analysis-header"},n?wp.element.createElement(React.Fragment,null,o?wp.element.createElement("h2",null,(0,ne.__)("Analysing Pageâ€¦","seo-by-rank-math")):wp.element.createElement("h2",null,(0,ne.__)("Analysing Websiteâ€¦","seo-by-rank-math")),wp.element.createElement(ae.ProgressBar,null)):wp.element.createElement(React.Fragment,null,o&&wp.element.createElement(ke,null),wp.element.createElement(ae.Button,{variant:"primary",size:"xlarge",className:"rank-math-recheck",onClick:r},o?(0,ne.__)("Start Page Analysis","seo-by-rank-math"):(0,ne.__)("Start SEO Analyzer","seo-by-rank-math"))))):wp.element.createElement(ae.AnalyzerResult,{results:t})};e.dn(ve);const Ee=wp.components;function Oe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,s="",i=r.indexOf("#");-1!==i&&(o=r.substring(0,i),s=r.substring(i));var l=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),u=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+u+l+s+n}e.dn(Oe);const Se=function(){var e=ge(),t=e.results,n=e.updateResults,r=e.startAnalysis;if(!(0,te.isEmpty)(t))return wp.element.createElement("div",{className:"analyzer-result-actions"},wp.element.createElement(ae.Button,{variant:"link",className:"rank-math-recheck",onClick:function(){n([]),r()}},(0,ne.__)("Restart SEO Analyzer","seo-by-rank-math"),wp.element.createElement(Ee.Dashicon,{icon:"update"})),wp.element.createElement("div",{className:"analyzer-results-header"},(0,re.applyFilters)("rank_math_seo_analysis_print_result",wp.element.createElement("div",{id:"print-results"},wp.element.createElement(ae.Button,{href:Oe("pro","SEO Analyzer Print Button"),variant:"secondary",className:"rank-math-print-results is-inactive",target:"_blank"},wp.element.createElement("span",{className:"dashicons dashicons-printer"}),(0,ne.__)("Print","seo-by-rank-math"),wp.element.createElement("span",{className:"rank-math-pro-badge"},"PRO")))),wp.element.createElement(ae.Button,{variant:"primary",href:"#analysis-result",className:"rank-math-view-issues"},(0,ne.__)("View Issues","seo-by-rank-math"))))};e.dn(Se);const _e=function(){var e=rankMath,t=e.connectUrl,n=e.isSiteConnected;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",{className:"rank-math-box"},wp.element.createElement("h2",null,wp.element.createElement("span",{className:"title-prefix"},(0,ne.__)("SEO Analysis for","seo-by-rank-math")),wp.element.createElement("span",null,window.location.hostname)),n&&wp.element.createElement(Se,null)),wp.element.createElement("div",{className:"rank-math-box rank-math-analyzer-result"},n?wp.element.createElement(ve,null):wp.element.createElement("div",{className:"rank-math-seo-analysis-header"},wp.element.createElement("h3",null,(0,ne.__)("Analyze your site by ","seo-by-rank-math"),wp.element.createElement("a",{href:t,target:"_blank",rel:"noreferrer"},(0,ne.__)("linking your Rank Math account","seo-by-rank-math"))))))};e.dn(_e);const Pe=function(){return{metrices:{percent:85,total:29,statuses:{ok:20,warning:2,fail:7}},date:{date:"October 17, 2024",time:"8:01 am"},serpData:{favicon:"",url:"https://www.rankmath.com/",title:"Rank Math - Best Free WordPress SEO Tools in 2025",description:"Rank Math WordPress SEO plugin will help you rank higher in search engines. DOWNLOAD for FREE this plugin today to optimize WordPress website for higher ra..."},results:{basic:[{status:"info",test_id:"common_keywords",title:"Common Keywords",tooltip:"A list of keywords that appear frequently in the text of the content.",kb_link:"https://rankmath.com/kb/seo-analysis/#common-keywords-test",message:"Here are the most common keywords we found on the page:",data:{rank:31,math:29,wordpress:15,plugin:10,best:9,search:8,google:7,support:7,features:6,free:6}},{status:"fail",test_id:"description_length",title:"SEO Description",tooltip:"SEO analysis of page's meta-description.",kb_link:"https://rankmath.com/kb/seo-analysis/#seo-description-test",message:"The description of page has 184 characters. Most search engines will truncate meta description to 160 characters.",fix:"<p>Write a meta-description for page. Use target keyword(s) (in a natural way) and write with human readers in mind. Summarize the content - describe the topics article discusses.</p><p>The description should stimulate reader interest and get them to click on the article. Think of it as a mini-advert for content.</p>",data:["Rank Math WordPress SEO plugin will help you rank higher in search engines. DOWNLOAD for FREE this plugin today to optimize WordPress website for higher rankings and more traffic."]},{status:"ok",test_id:"h1_heading",title:"H1 Heading",tooltip:"SEO Analysis of the H1 Tags on the page.",kb_link:"https://rankmath.com/kb/seo-analysis/#h1-heading-test",message:"One H1 tag was found on the page.",data:["WordPress SEO Made Easy"]},{status:"ok",test_id:"h2_headings",title:"H2 Headings",tooltip:"SEO analysis of the H2 headings on your page.",kb_link:"https://rankmath.com/kb/seo-analysis/#h2-headings-test",message:"One or more H2 tags were found on the page.",data:["Powering SEO optimization for businesses around the world","What is Rank Math?","Recommended By the Best SEOs On The Planet","What you can do with Rank Math","Take The Guesswork Out of WordPress SEO","Your all-in-one solution for all the SEO needs","Leading SEOs are Loving Rank Math!"]},{status:"ok",test_id:"img_alt",title:"Image ALT Attributes",tooltip:'SEO analysis of the "alt" attribute for image tags.',kb_link:"https://rankmath.com/kb/seo-analysis/#image-alt-attributes-test",message:"All images on the page have alt attributes."},{status:"ok",test_id:"keywords_meta",title:"Keywords in Title & Description",tooltip:"SEO analysis of the HTML page's Title and meta description content.",kb_link:"https://rankmath.com/kb/seo-analysis/#keywords-in-title-and-description-test",message:"One or more common keywords were found in the title and description of the page.",data:{title:["rank","math","wordpress","best","free"],description:["rank","math","wordpress","plugin","search","free"]}}]}}};e.dn(Pe);const Re=function(){var e={metrices:{percent:85,total:29,statuses:{ok:20,warning:2,fail:7}},date:{date:"October 17, 2024",time:"8:01 am"},serpData:{favicon:"",url:"https://www.rankmath.com/",title:"Rank Math - Best Free WordPress SEO Tools in 2025",description:"Rank Math WordPress SEO plugin will help you rank higher in search engines. DOWNLOAD for FREE this plugin today to optimize WordPress website for higher ra..."},results:{basic:[{status:"info",test_id:"common_keywords",title:"Common Keywords",tooltip:"A list of keywords that appear frequently in the text of the content.",kb_link:"https://rankmath.com/kb/seo-analysis/#common-keywords-test",message:"Here are the most common keywords we found on the page:",data:{rank:31,math:29,wordpress:15,plugin:10,best:9,search:8,google:7,support:7,features:6,free:6}},{status:"fail",test_id:"description_length",title:"SEO Description",tooltip:"SEO analysis of page's meta-description.",kb_link:"https://rankmath.com/kb/seo-analysis/#seo-description-test",message:"The description of page has 184 characters. Most search engines will truncate meta description to 160 characters.",fix:"<p>Write a meta-description for page. Use target keyword(s) (in a natural way) and write with human readers in mind. Summarize the content - describe the topics article discusses.</p><p>The description should stimulate reader interest and get them to click on the article. Think of it as a mini-advert for content.</p>",data:["Rank Math WordPress SEO plugin will help you rank higher in search engines. DOWNLOAD for FREE this plugin today to optimize WordPress website for higher rankings and more traffic."]},{status:"ok",test_id:"h1_heading",title:"H1 Heading",tooltip:"SEO Analysis of the H1 Tags on the page.",kb_link:"https://rankmath.com/kb/seo-analysis/#h1-heading-test",message:"One H1 tag was found on the page.",data:["WordPress SEO Made Easy"]},{status:"ok",test_id:"h2_headings",title:"H2 Headings",tooltip:"SEO analysis of the H2 headings on your page.",kb_link:"https://rankmath.com/kb/seo-analysis/#h2-headings-test",message:"One or more H2 tags were found on the page.",data:["Powering SEO optimization for businesses around the world","What is Rank Math?","Recommended By the Best SEOs On The Planet","What you can do with Rank Math","Take The Guesswork Out of WordPress SEO","Your all-in-one solution for all the SEO needs","Leading SEOs are Loving Rank Math!"]},{status:"ok",test_id:"img_alt",title:"Image ALT Attributes",tooltip:'SEO analysis of the "alt" attribute for image tags.',kb_link:"https://rankmath.com/kb/seo-analysis/#image-alt-attributes-test",message:"All images on the page have alt attributes."},{status:"ok",test_id:"keywords_meta",title:"Keywords in Title & Description",tooltip:"SEO analysis of the HTML page's Title and meta description content.",kb_link:"https://rankmath.com/kb/seo-analysis/#keywords-in-title-and-description-test",message:"One or more common keywords were found in the title and description of the page.",data:{title:["rank","math","wordpress","best","free"],description:["rank","math","wordpress","plugin","search","free"]}}]}};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-box blurred"},wp.element.createElement("h2",null,(0,ne.__)("Competitor Analyzer","seo-by-rank-math")),wp.element.createElement("p",null,(0,ne.__)("Enter a site URL to see how it ranks for the same SEO criteria as site.","seo-by-rank-math")),wp.element.createElement("div",{className:"url-form"},wp.element.createElement("input",{type:"text",name:"competitor_url",id:"competitor_url",placeholder:"https://rankmath.com",disabled:!0}),wp.element.createElement(ae.Button,{variant:"primary",id:"competitor_url_submit",disabled:!0},(0,ne.__)("Start SEO Analyzer","seo-by-rank-math")))),wp.element.createElement("div",{className:"rank-math-box rank-math-analyzer-result blurred"},wp.element.createElement("span",{className:"wp-header-end"}),!(0,te.isEmpty)(e)&&wp.element.createElement(ae.AnalyzerResult,{results:e})),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-50 top-20 less-padding"},wp.element.createElement("h3",null,(0,ne.__)("Competitor Analyzer","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,ne.__)("Analyze competitor websites to gain an edge","seo-by-rank-math")),wp.element.createElement("li",null,(0,ne.__)("Evaluate strengths and weaknesses","seo-by-rank-math")),wp.element.createElement("li",null,(0,ne.__)("Explore new keywords and opportunities","seo-by-rank-math")),wp.element.createElement("li",null,(0,ne.__)("Make more informed decisions & strategy","seo-by-rank-math"))),wp.element.createElement(ae.Button,{variant:"green",href:Oe("pro","Competitor Analyzer Tab"),target:"_blank",rel:"noreferrer"},(0,ne.__)("Upgrade","seo-by-rank-math")))))};function Ae(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Ce(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function je(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,s,i=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(u)throw a}}return i}}(e,t)||Ce(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ce(e,t){if(e){if("string"==typeof e)return Te(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Te(e,t):void 0}}function Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}e.dn(Re);var Ne=function(){return(0,re.applyFilters)("rank_math_analyzer_tabs",[{name:"seo_analyzer",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-analyzer"}),(0,ne.__)("SEO Analyzer","seo-by-rank-math")),view:_e},{name:"competitor_analyzer",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-users"}),(0,ne.__)("Competitor Analyzer","seo-by-rank-math")),view:Re}])},Ue=function(){var e=je(ee(),2),t=e[0],n=e[1],r=t.get("view")||Ne()[0].name,a=function(e){return n(function(t){return(0,te.fromPairs)([].concat(Ae(t),[["view",e]]))})};return wp.element.createElement(React.Fragment,null,wp.element.createElement(ae.DashboardHeader,{page:r}),wp.element.createElement("div",{className:"wrap rank-math-wrap rank-math-seo-analysis-wrap dashboard"},wp.element.createElement(ae.TabPanel,{tabs:Ne(),key:r,initialTabName:r,onSelect:function(e){return a(e)}},function(e){var t=e.name,n=e.view;return wp.element.createElement("div",{className:"rank-math-ui seo-analysis ".concat(t)},wp.element.createElement(n,{onTabSelect:a}))})))};const xe=function(){return wp.element.createElement(Q,null,wp.element.createElement(ye,null,wp.element.createElement(Ue,null)))};function Me(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}function De(e){return Me("results",e)}function ze(e){return Me("url",e)}function We(e){return We="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},We(e)}function Le(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function He(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Le(Object(n),!0).forEach(function(t){Fe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Le(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Fe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=We(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=We(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==We(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.dn(xe);var Be={results:rankMath.results,url:rankMath.analyzeUrl};function Ie(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Be,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?He(He({},e),{},Fe({},t.key,t.value)):e}function Ke(e){return e.appUi.results}function Ve(e){return e.appUi.url}var $e;(0,oe.register)((0,oe.createReduxStore)("rank-math-seo-analysis",{reducer:(0,oe.combineReducers)(n),selectors:r,actions:t}));$e=function(){(0,s.createRoot)(document.getElementById("rank-math-seo-analysis-wrapper")).render(wp.element.createElement(xe,null)),o()(document).on("click",".enable-auto-update",function(e){e.preventDefault(),ie("enable_auto_update"),o()(this).closest(".auto-update-disabled").addClass("hidden").siblings(".auto-update-enabled").removeClass("hidden").closest(".row-description").find(".status-icon").removeClass("status-warning dashicons-warning").addClass("status-ok dashicons-yes")})},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",$e):$e())}();PK     ™ŠU]²ª (ã^  ã^  9  includes/modules/seo-analysis/assets/css/seo-analysis.cssnu „[µü¤        /*!
 * Plugin:	Rank Math - SEO Analyzer
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	seo-analysis.css
 */@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}.rank-math-seo-analysis-wrap header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;gap:20px;margin-bottom:0;border-bottom:0;border-radius:6px 6px 0 0;background:#fff}.rank-math-seo-analysis-wrap header h2{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap;margin:0;font-size:1.5rem}.rank-math-seo-analysis-wrap header .analyzer-result-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-ms-flex:1;flex:1;gap:20px}.rank-math-seo-analysis-wrap header .rank-math-recheck{gap:5px;font-size:15px;font-weight:400;line-height:1 !important;text-decoration:none;text-transform:inherit}.rank-math-seo-analysis-wrap header .rank-math-recheck .dashicons{font-size:16px;width:16px;height:16px;vertical-align:-3px}.rank-math-seo-analysis-wrap header .analyzer-results-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-seo-analysis-wrap header .rank-math-view-issues{font-weight:600}.rank-math-seo-analysis-wrap header .rank-math-print-results{margin-right:10px;font-weight:600}.rank-math-seo-analysis-wrap header .rank-math-print-results .dashicons{margin-right:5px;margin-left:-4px;-webkit-transition:none;transition:none;vertical-align:middle}.rank-math-seo-analysis-wrap header .rank-math-print-results .rank-math-pro-badge{vertical-align:1px;line-height:1.3}.rank-math-seo-analysis-wrap header .rank-math-print-results.disabled{cursor:pointer;pointer-events:initial}.rank-math-seo-analysis-wrap header .rank-math-print-results.is-inactive:not(:disabled),.rank-math-seo-analysis-wrap header .rank-math-print-results.is-inactive:hover:not(:disabled),.rank-math-seo-analysis-wrap header .rank-math-print-results.is-inactive:focus:not(:disabled),.rank-math-seo-analysis-wrap header .rank-math-print-results.is-inactive:active:not(:focus):not(:disabled){color:#a7aaad;background-color:#f6f7f7;border-color:#dcdcde;-webkit-box-shadow:none;box-shadow:none}.rank-math-seo-analysis-wrap header .button:not(.rank-math-recheck){text-transform:uppercase}.rank-math-seo-analysis-wrap .title-prefix,.rank-math-seo-analysis-wrap .rank-math-analysis-date{display:block;margin-bottom:7px;color:#7f868d;font-size:14px;font-weight:400;text-transform:uppercase}.rank-math-seo-analysis-wrap .rank-math-analysis-date{text-transform:initial}.rank-math-seo-analysis-wrap .changeurl-form{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-seo-analysis-wrap .changeurl-form .rank-math-text-control{width:210px}.rank-math-seo-analysis-wrap .rank-math-seo-analysis-header{border:1px solid #b5bfc9;background:#fff;padding:30px;text-align:center}.rank-math-seo-analysis-wrap .rank-math-seo-analysis-header h2{font-size:2em}.rank-math-result-graphs{padding:2.5rem 1.875rem;border-radius:0 0 6px 6px;background:#fff}.rank-math-result-graphs label{cursor:unset}.rank-math-result-graphs .rank-math-analysis-date{margin-top:-1rem;margin-bottom:.5rem;text-align:right}.rank-math-result-graphs .three-col{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:37px}.rank-math-result-graphs .graphs-main,.rank-math-result-graphs .graphs-side{padding:1rem;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-result-graphs .graphs-main{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;padding:0;text-align:center}.rank-math-result-graphs .graphs-side{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;padding:1.5rem;border-radius:6px;background-color:#f7f7f9}.rank-math-result-graphs .graphs-side li{height:auto !important}.rank-math-result-graphs .serp-preview{-webkit-box-flex:1;-ms-flex:1;flex:1}.rank-math-result-graphs .result-score{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:10px}.rank-math-result-graphs .result-score strong{font-weight:700}.rank-math-result-graphs .result-score div{display:block;color:#7f868d;font-size:15px}.serp-preview{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:450px;padding:20px;border:4px solid #ebebed;border-radius:6px;background:#fff}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url-wrapper{display:block;position:relative;overflow:hidden;z-index:1;max-width:630px;margin:0;font-family:arial,sans-serif}.serp-preview .serp-title{margin-bottom:4px;font-size:20px;font-weight:normal;line-height:1.3;color:#1a0dab}.serp-preview .serp-favicon{display:inline-block;margin-right:5px;vertical-align:top}.serp-preview .serp-url-wrapper{margin:3px 0 5px;font-size:14px;line-height:1.3;color:#202124}.serp-preview .serp-description{font-size:14px;line-height:1.58;word-wrap:break-word;color:#4d5156}.chart{width:100%;margin:0}.chart li{position:relative;display:block;margin-bottom:1.25rem}.chart li:last-child{margin-bottom:0}.chart .chart-bar{position:relative}.chart .chart-bar:before{position:absolute;top:0;left:0;width:100%;height:100%;content:"";border-radius:6px;background:#dadfe4}.chart .chart-bar-good span{background:#10ac84}.chart .chart-bar-average span{background:#ff9f43}.chart .chart-bar-bad span{background:#ed5e5e}.chart span{display:block;position:relative;z-index:1;height:13px;margin:0;border-radius:6px;background:rgba(209,236,250,.75);-webkit-animation:drawchart 1s ease-in-out;animation:drawchart 1s ease-in-out}@-webkit-keyframes drawchart{0%{width:0}}@keyframes drawchart{0%{width:0}}#rank-math-circle-progress{position:relative}#rank-math-circle-progress strong{-webkit-transform:translateY(-50%);transform:translateY(-50%);width:100%;font-size:2em;font-weight:700;text-align:center}#rank-math-circle-progress .result-main-score{position:absolute;top:40%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}#rank-math-circle-progress .result-main-score div{display:block;margin-top:4px;text-transform:uppercase;color:#7f868d}.progress-bar,.progress{height:4px;border-radius:3px;background:#e9e9ea}.progress-bar .progress-text,.progress .progress-text{display:block;padding-top:6px;color:rgba(117,121,127,.6)}.progress{width:0;background:linear-gradient(-135deg, #ff4492, #434e8f)}.progress-bar{margin-bottom:3rem}.rank-math-result-table{padding:1.5rem 0 0}.rank-math-result-table:first-of-type{padding-top:0}.rank-math-result-table:last-of-type{padding-bottom:30px}.rank-math-result-table .category-title{padding:11px 20px;padding-left:0;border-bottom:1px solid #dadfe4;color:#242628;font-size:17px;font-weight:500}.rank-math-result-table .table-row{display:table;table-layout:fixed;width:100%;border:1px solid #dadfe4;border-top:0;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-result-table .table-row.hidden{display:none}.rank-math-result-table .table-row.rank-math-result-test-id-mobile_snapshot img{border:1px solid rgba(60,64,67,.08)}.rank-math-result-table .row-title,.rank-math-result-table .row-description{display:table-cell;position:relative;padding:18px 20px 12px}.rank-math-result-table .row-title{width:21%;vertical-align:top}.rank-math-result-table .row-title h3{display:inline-block;margin:0 0 0 34px;font-size:15px;font-weight:500}.rank-math-result-table .row-content{position:relative;padding-left:40px;font-size:14px}.rank-math-result-table .row-content code{display:inline-block;padding:0 3px;border-radius:3px;color:hsl(210,5.2631578947%,39.9019607843%);background:hsl(210,15.625%,96.4509803922%)}.rank-math-result-table .row-content code.full-width{display:block;margin-top:10px;padding:10px;border-radius:4px}.rank-math-result-table .auto-update-disabled{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-result-table .auto-update-disabled.hidden{display:none}.rank-math-result-table .enable-auto-update{margin-top:-2px}.rank-math-result-filter{display:inline-block;position:relative;padding:18px 16px;text-decoration:none;color:#242628}.rank-math-result-filters{position:relative;z-index:1;margin-top:30px;padding:0 1.875rem;border:1px solid #b5bfc9;border-bottom:0;border-radius:6px 6px 0 0;background:#fff}.rank-math-result-filter:hover,.rank-math-result-filter.active{color:#242628}.rank-math-result-filter.active:after,.rank-math-result-filter:hover:after{display:block;content:"";position:absolute;bottom:-2px;left:0;width:100%;height:3px;background:#069de3}.rank-math-result-filter-count{display:inline-block;margin-left:9px;padding:3px 12px;border-radius:16px;color:#069de3;background:rgba(6,157,227,.15);font-size:12px;font-weight:600;pointer-events:none}.rank-math-result-filter.active .rank-math-result-filter-count{color:#fff}.rank-math-result-filter-all.active:after,.rank-math-result-filter-all.active .rank-math-result-filter-count,.rank-math-result-filter-all:hover:after{background:#069de3}.rank-math-result-filter-passed.active:after,.rank-math-result-filter-passed.active .rank-math-result-filter-count,.rank-math-result-filter-passed:hover:after{background:#10ac84}.rank-math-result-filter-warnings.active:after,.rank-math-result-filter-warnings.active .rank-math-result-filter-count,.rank-math-result-filter-warnings:hover:after{background:#ff9f43}.rank-math-result-filter-failed.active:after,.rank-math-result-filter-failed.active .rank-math-result-filter-count,.rank-math-result-filter-failed:hover:after{background:#ed5e5e}.rank-math-result-filter-passed .rank-math-result-filter-count{color:#10ac84;background:rgba(16,172,132,.15)}.rank-math-result-filter-warnings .rank-math-result-filter-count{color:rgb(255,132.9574468085,16);background:rgba(255,159,67,.15)}.rank-math-result-filter-failed .rank-math-result-filter-count{color:#ed5e5e;background:rgba(237,94,94,.15)}.seo-analysis-results{margin-top:30px;border:1px solid #b5bfc9;border-radius:6px;background:#fff}.seo-analysis-results>.components-tab-panel__tabs,.seo-analysis-results>.components-tab-panel__tab-content{padding:0 1.875rem}.seo-analysis-results>.components-tab-panel__tabs{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item{height:auto;font-size:15px;font-weight:400;color:#242628}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active .rank-math-result-filter-count{color:#fff}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active::after{height:3px;bottom:-2px;outline:none}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-all::after,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-all .rank-math-result-filter-count,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-info::after,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-info .rank-math-result-filter-count{background:#069de3}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-passed::after,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-passed .rank-math-result-filter-count{background:#10ac84}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-warnings::after,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-warnings .rank-math-result-filter-count{background:#ff9f43}.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-failed::after,.seo-analysis-results>.components-tab-panel__tabs .components-tab-panel__tabs-item.is-active.rank-math-result-filter-failed .rank-math-result-filter-count{background:#ed5e5e}.seo-analysis-results>.components-tab-panel__tab-content{padding:1.875rem;border-top:1px solid #b5bfc9}.status-icon{position:absolute;top:18px;border:1px solid rgba(0,0,0,0);border-radius:50em;color:#069de3;background:rgba(6,157,227,.15)}.status-icon.status-info::before{content:"i";vertical-align:5px;font-family:sans-serif;font-size:15px;font-weight:bold}.status-icon.status-ok{color:#10ac84;background:rgba(16,172,132,.15)}.status-icon.status-warning{color:rgb(255,132.9574468085,16);background:rgba(255,159,67,.15)}.status-icon.status-warning:before{content:"!";font-family:sans-serif;font-size:15px;font-weight:bold;vertical-align:5px}.status-icon.status-fail{color:#ed5e5e;background:rgba(237,94,94,.15)}.info-list{max-height:500px;padding:4px;color:hsl(210,5.2631578947%,39.9019607843%);border-radius:6px;background:hsl(210,15.625%,96.4509803922%);overflow:scroll}.info-list li{font-family:Consolas,Monaco,monospace;font-size:13px;margin:0 1px;padding:3px 6px 2px;direction:ltr;overflow-wrap:break-word;unicode-bidi:embed}.analysis-test-how-to-fix,.how-to-fix-wrapper{-webkit-transition:all 200ms linear;transition:all 200ms linear}.analysis-test-how-to-fix .result-action,.how-to-fix-wrapper .result-action{display:none}.rank-math-button.components-button.button-secondary.result-action{margin:-5px 0 0 10px;border-color:#7f868d;color:#fff;background:#7f868d;float:right}.expanded .rank-math-button.components-button.button-secondary.result-action,.rank-math-button.components-button.button-secondary.result-action:hover,.rank-math-button.components-button.button-secondary.result-action:focus{color:#fff !important;background:#069de3 !important;border-color:#069de3 !important}.analysis-test-how-to-fix{line-height:1.5;margin:22px auto 0;padding:15px;border:1px solid #10ac84;border-radius:6px;color:rgb(5.1489361702,55.3510638298,42.4787234043);background:rgba(16,172,132,.08)}.analysis-test-how-to-fix ul{clear:both;margin-top:0;margin-bottom:0;margin-left:15px;list-style-type:disc}.analysis-test-how-to-fix pre{margin:0;padding:0;color:inherit;background:rgba(0,0,0,0)}.analysis-test-how-to-fix p:first-of-type{margin-top:0}.analysis-test-how-to-fix p:last-of-type{margin-bottom:0}.expanded .analysis-test-how-to-fix{display:block}.keyword-cloud-item{display:inline-block;padding:4px;vertical-align:middle}.competitor_analyzer .rank-math-box>h2{margin:0;text-align:center}.competitor_analyzer .rank-math-box>p{color:#7f868d;text-align:center}.competitor_analyzer #competitor_url{width:400px}.competitor_analyzer .url-form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap;row-gap:.5rem;margin:0 auto}.competitor_analyzer #competitor_url_submit{margin-left:.5rem}.rank-math-seo-analysis-wrap{width:100%;max-width:100%;margin-top:20px;margin-bottom:-65px;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-seo-analysis-wrap button.rank-math-button .dashicons{line-height:1}.rank-math-seo-analysis-wrap .components-tab-panel__tab-content>div{position:relative;width:1100px;max-width:100%}.rank-math-seo-analysis-wrap .rank-math-breadcrumbs-wrap{margin-bottom:20px}.rank-math-seo-analysis-wrap .rank-math-breadcrumbs-wrap .divider{margin:0 8px}.rank-math-analyzer-result{padding:0;border:0;border-radius:0 0 6px 6px;background:rgba(0,0,0,0)}@media screen and (max-width: 782px){.rank-math-seo-analysis-wrap .graphs-main,.rank-math-seo-analysis-wrap .graphs-side{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;margin:0}.rank-math-seo-analysis-wrap .chart li{height:170px}.rank-math-seo-analysis-wrap .info-list{overflow:scroll}}@media screen and (max-width: 595px){.rank-math-seo-analysis-wrap header{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:start}.rank-math-seo-analysis-wrap header .analyzer-results-actions{-ms-flex-wrap:wrap;flex-wrap:wrap}.rank-math-seo-analysis-wrap .rank-math-result-table .row-title,.rank-math-seo-analysis-wrap .rank-math-result-table .row-description{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}}PK     ™ŠU]F'¸+	  +	  -  includes/modules/seo-analysis/class-admin.phpnu „[µü¤        <?php
/**
 * The SEO Analyzer module - admin side functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\SEO_Analysis;

use RankMath\Module\Base;
use RankMath\Admin\Page;
use RankMath\Helper;
use RankMath\KB;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * Module page.
	 *
	 * @var object
	 */
	public $page;

	/**
	 * SEO Analyzer object.
	 *
	 * @var object
	 */
	public $analyzer;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'seo-analysis',
				'directory' => $directory,
			]
		);
		parent::__construct();

		if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || $this->page->is_current_page() ) {
			include_once 'seo-analysis-tests.php';
			$this->analyzer = new SEO_Analyzer();
			Helper::add_json( 'results', $this->analyzer->get_results_from_storage() );
			Helper::add_json( 'analyzeSubpage', $this->analyzer->analyse_subpage );
			Helper::add_json( 'analyzeUrl', $this->analyzer->analyse_url );
		}
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		$this->page = new Page(
			'rank-math-seo-analysis',
			// Translators: placeholder is the new Rank Math label.
			esc_html__( 'SEO Analyzer', 'seo-by-rank-math' ),
			[
				'position'   => 60,
				'parent'     => 'rank-math',
				'capability' => 'rank_math_site_analysis',
				'classes'    => [ 'rank-math-page' ],
				'render'     => $this->directory . '/views/main.php',
				'assets'     => [
					'styles'  => [
						'wp-components'          => '',
						'rank-math-common'       => '',
						'rank-math-seo-analysis' => $uri . '/assets/css/seo-analysis.css',
					],
					'scripts' => [
						'wp-element'             => '',
						'rank-math-components'   => '',
						'rank-math-seo-analysis' => $uri . '/assets/js/seo-analysis.js',
					],
					'json'    => [
						'connectUrl'      => Helper::get_connect_url(),
						'isSiteConnected' => Helper::is_site_connected(),
					],
				],
			]
		);
	}
}
PK     ™ŠU]ŒÛ      '  includes/modules/seo-analysis/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ™ŠU]k­€žD  D  ,  includes/modules/seo-analysis/views/main.phpnu „[µü¤        <?php
/**
 * SEO Analyzer admin page contents.
 *
 * @package   RANK_MATH
 * @author    Rank Math <support@rankmath.com>
 * @license   GPL-2.0+
 * @link      https://rankmath.com/wordpress/plugin/seo-suite/
 * @copyright 2019 Rank Math
 */

defined( 'ABSPATH' ) || exit;

?>

<div id="rank-math-seo-analysis-wrapper"></div>
PK     ™ŠU]ŒÛ      -  includes/modules/seo-analysis/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ™ŠU]$ÿWá›X  ›X  4  includes/modules/seo-analysis/seo-analysis-tests.phpnu „[µü¤        <?php
/**
 * The local tests for the SEO Analyzer.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Google\Console;
use RankMath\Google\Authentication;
use RankMath\Helpers\DB;

defined( 'ABSPATH' ) || exit;

add_filter( 'rank_math/seo_analysis/tests', 'rank_math_register_seo_analysis_basic_tests' );

/**
 * Register basic local tests for the SEO Analyzer.
 *
 * @param array $tests Array of tests.
 *
 * @return array
 */
function rank_math_register_seo_analysis_basic_tests( $tests ) {
	$new_tests['site_description'] = [
		'title'       => esc_html__( 'Site Tagline', 'seo-by-rank-math' ),
		/* translators: link to general setting screen */
		'description' => sprintf( esc_html__( 'Your theme may display the Site Tagline, and it can also be used in SEO titles &amp; descriptions. Set it to something unique. You can change it by navigating to <a href="%s">Settings &gt; General</a>.', 'seo-by-rank-math' ), admin_url( 'options-general.php' ) ),
		'how_to_fix'  => '<p>' . esc_html__( 'Most WordPress themes place your site\'s tagline in a prominent position (inside header tags near the top of the page).  Using the right tagline can give your site an SEO boost.', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'Unfortunately, the standard WordPress tagline is "Just Another WordPress site."  That\'s pretty sloppy looking, and it does nothing for your SEO.  In fact, it\'s actually a security risk - it makes it easy for hackers with a WordPress exploit to locate your site with an automated search.', 'seo-by-rank-math' ) . '</p>' .
			/* translators: link to general setting screen */
			'<p>' . sprintf( wp_kses_post( __( 'Changing your tagline is very easy.  Just head on over to <a target="_blank" href="%1$s">Settings - General</a> in WordPress\'s admin menu (on the left), or click on the link in this sentence.', 'seo-by-rank-math' ) ), esc_url( admin_url( 'options-general.php' ) ) ) . '</p>' .
			'<p>' . esc_html__( 'The tagline is the second option.  Choose a tagline that summarizes your site in a few words.  The tagline is also a good place to use your main keyword.', 'seo-by-rank-math' ) . '</p>',
		'kb_link'     => KB::get( 'analysis-site-tagline' ),
		'tooltip'     => esc_html__( 'Confirm custom tagline is set for your site', 'seo-by-rank-math' ),
	];

	$new_tests['blog_public'] = [
		'title'       => esc_html__( 'Blog Public', 'seo-by-rank-math' ),
		/* translators: link to general setting screen */
		'description' => esc_html__( 'Your site may not be visible to search engine.', 'seo-by-rank-math' ),
		'how_to_fix'  => '<p>' .
			sprintf(
				/* translators: %1$s link to the reading settings, %2$s closing tag for the link */
				esc_html__( 'You must %1$sgo to your Reading Settings%2$s and uncheck the box for Search Engine Visibility.', 'seo-by-rank-math' ),
				'<a href="' . esc_url( admin_url( 'options-reading.php' ) ) . '">',
				'</a>'
			) .
		'</p>',
		'kb_link'     => KB::get( 'analysis-blog-public' ),
		'tooltip'     => esc_html__( "Check your site's visibility to search engines", 'seo-by-rank-math' ),
	];

	$new_tests['permalink_structure'] = [
		'title'       => esc_html__( 'Permalink Structure', 'seo-by-rank-math' ),
		/* translators: link to permalink setting screen */
		'description' => sprintf( __( 'For the best SEO results, use a custom permalink structure, preferably one that includes the post title (<code>%%postname%%</code>). You can change it by navigating to <a href="%s">Settings &gt; Permalinks</a>', 'seo-by-rank-math' ), admin_url( 'options-permalink.php' ) ),
		'how_to_fix'  => '<p>' . esc_html__( 'The standard permalink structure is pretty ugly - WordPress generates offputting URLs like: http://www.yoursite.com/?p=99', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'It\'s not very kind on the eyes, and it does nothing for your site\'s SEO.  In fact, it can hurt it - Google\'s bot is quite cautious about crawling pages that look auto-generated.', 'seo-by-rank-math' ) . '</p>' .
			/* translators: link to permalink setting screen */
			'<p>' . sprintf( wp_kses_post( __( 'Fortunately, it\'s very easy to fix.  Just hop on over to <a target="_blank" href="%1$s">Settings - Permalinks</a>.  Then chose the "Post Name" option.', 'seo-by-rank-math' ) ), esc_url( admin_url( 'options-permalink.php' ) ) ) . '</p>' .
			'<p>' . esc_html__( 'This option will replace the "?p=99" part of the URL with the post\'s title, like this: http://www.yoursite.com/my-amazing-post-title/', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'This looks nice for readers - and it gets your keywords into the URL (keywords in the URL is a ranking factor).', 'seo-by-rank-math' ) . '</p>',
		'kb_link'     => KB::get( 'analysis-permalink-structure' ),
		'tooltip'     => esc_html__( 'Check your site for SEO-friendly permalink structure', 'seo-by-rank-math' ),
	];

	$new_tests['focus_keywords'] = [
		'title'       => esc_html__( 'Focus Keywords', 'seo-by-rank-math' ),
		'description' => esc_html__( 'Setting focus keywords for your posts allows Rank Math to analyse the content.', 'seo-by-rank-math' ),
		'how_to_fix'  => '<p>' . esc_html__( 'Rank Math allows you to set a focus keyword for every post and page you write - the option is in the "Meta Box", which appears under the text editor in the screen where you write and edit content.', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'Rank Math uses these focus keywords to analyze your on-page content.  It can tell if you\'ve done a good job of optimizing your text to rank for these keywords.', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'Of course, if you don\'t give Rank Math a focus keyword to work with, it can\'t give you any useful feedback.', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'Fixing this issue is easy - just edit the post, and set a Focus Keyword.  Then follow Rank Math\'s analysis to improve your rankings.', 'seo-by-rank-math' ) . '</p>',
		'kb_link'     => KB::get( 'analysis-focus-keywords' ),
		'tooltip'     => esc_html__( 'Confirm focus keywords are set for all your posts', 'seo-by-rank-math' ),
	];

	$new_tests['post_titles'] = [
		'title'       => esc_html__( 'Post Titles Missing Focus Keywords', 'seo-by-rank-math' ),
		'description' => esc_html__( 'Make sure the focus keywords you set for the posts appear in their titles.', 'seo-by-rank-math' ),
		'how_to_fix'  => '<p>' . esc_html__( 'HTML Page Titles play a large role in Google\'s ranking algorithm.  When you add a Focus Keyword to a post or page, Rank Math will check to see that you used the keyword in the title.  If it finds any posts or pages that are missing the keyword in the title, it will tell you here.', 'seo-by-rank-math' ) . '</p>' .
			'<p>' . esc_html__( 'Fixing the issue is simple - just edit the post/page and add the focus keyword(s) to the title.', 'seo-by-rank-math' ) . '</p>',
		'kb_link'     => KB::get( 'analysis-post-titles' ),
		'tooltip'     => esc_html__( 'Verify the presence of focus keywords in your post titles', 'seo-by-rank-math' ),
	];

	foreach ( $new_tests as $key => $test ) {
		$test['category'] = 'basic';
		$test['callback'] = 'rank_math_analyze_' . $key;
		$tests[ $key ]    = $test;
	}

	return $tests;
}

add_filter( 'rank_math/seo_analysis/tests', 'rank_math_register_seo_analysis_advanced_tests' );

/**
 * Register advanced local tests for the SEO Analyzer.
 *
 * @param array $tests Array of tests.
 *
 * @return array
 */
function rank_math_register_seo_analysis_advanced_tests( $tests ) {
	$tests['search_console'] = [
		'category'    => 'advanced',
		'title'       => esc_html__( 'Search Console', 'seo-by-rank-math' ),
		'description' => sprintf(
			/* translators: link to plugin setting screen */
			esc_html__( 'Register at Google Search Console and verificate your site by adding the code to <a href="%1$s">Settings &gt; Verificate Tools</a>, then navigate to <a href="%2$s">Settings &gt; Search Console</a> to authenticate and link your site.', 'seo-by-rank-math' ),
			Helper::get_settings_url( 'general', 'webmaster' ),
			Helper::get_settings_url( 'general', 'analytics' )
		),
		'how_to_fix'  => '<p>' . esc_html__( 'Google\'s Search Console is a vital source of information concerning your rankings and click-through rates.  Rank Math can import this data, so you don\'t have to log into your Google account to get the data you need.', 'seo-by-rank-math' ) . '</p>' .
			/* translators: link to plugin search console setting screen */
			'<p>' . sprintf( wp_kses_post( __( 'You can integrate the Google Search Console with Rank math in the <a href="%1$s" target="_blank">Search Console tab</a>. of Rank Math\'s General Settings menu.', 'seo-by-rank-math' ) ), esc_url( Helper::get_settings_url( 'general', 'analytics' ) ) ) . '</p>' .
			/* translators: Link to Search Console KB article */
			'<p>' . sprintf( wp_kses_post( __( 'Read <a href="%1$s" target="_blank">this article</a> for detailed instructions on setting up your Google Webmaster account and getting Rank Math to work with the Google Search Console.', 'seo-by-rank-math' ) ), KB::get( 'help-analytics', 'SEO Analysis GSC Test' ) ) . '</p>',
		'callback'    => 'rank_math_analyze_search_console',
		'kb_link'     => KB::get( 'analysis-search-console' ),
		'tooltip'     => esc_html__( 'Confirm if Rank Math is connected to Search Console', 'seo-by-rank-math' ),
	];

	$tests['sitemaps'] = [
		'category'    => 'advanced',
		'title'       => esc_html__( 'Sitemaps', 'seo-by-rank-math' ),
		'description' => esc_html__( 'XML sitemaps are a special type of text file that tells search engines about the structure of your site. They\'re a list of all the resources (pages and files) you would like the search engine to index. You can assign different priorities, so certain pages will be crawled first. Before XML sitemaps, search engines were limited to indexing the content they could find by following links. That\'s still an important feature for search engine spiders, but XML sitemaps have made it easier for content creators and search engines to collaborate.', 'seo-by-rank-math' ),
		'how_to_fix'  => esc_html__( 'If you don\'t have an XML sitemap, the best option is to install a plugin that creates sitemaps for you. That way you\'ll know the sitemap will always be up-to-date. Plugins can also automatically ping the search engines when the XML file is updated. The Rank Math WordPress plugin gives you complete control over your site\'s XML sitemaps. You can control the settings for each page as you write or edit it, and Rank Math will ping Google as soon as you submit your edits. This results in fast crawls and indexing.', 'seo-by-rank-math' ),
		'callback'    => 'rank_math_analyze_sitemap',
		'kb_link'     => KB::get( 'analysis-sitemaps' ),
		'tooltip'     => esc_html__( 'Check the presence of sitemaps on your website', 'seo-by-rank-math' ),
	];

	return $tests;
}

add_filter( 'rank_math/seo_analysis/tests', 'rank_math_register_seo_analysis_auto_update_test', 20 );

/**
 * Register test for the auto update option.
 *
 * @param array $tests Array of tests.
 *
 * @return array
 */
function rank_math_register_seo_analysis_auto_update_test( $tests ) {
	$new_tests = [
		'auto_update' => [
			'category'    => 'priority',
			'title'       => esc_html__( 'Automatic Updates', 'seo-by-rank-math' ),
			'description' => esc_html__( 'Enable automatic updates to ensure you are always using the latest version of Rank Math.', 'seo-by-rank-math' ),
			'callback'    => 'rank_math_analyze_auto_update',
			'kb_link'     => KB::get( 'analysis-auto-update' ),
			'tooltip'     => esc_html__( 'Verify auto-updates are enabled for Rank Math', 'seo-by-rank-math' ),
		],
	];

	// Move to top.
	$tests = array_merge( $new_tests, $tests );

	return $tests;
}

/**
 * Checks if auto update is enabled.
 *
 * @return array
 */
function rank_math_analyze_auto_update() {
	if ( Helper::is_plugin_update_disabled() ) {
		return [
			'status'  => 'warning',
			'message' => __( 'Site wide plugins auto-update option is disabled on your site.', 'seo-by-rank-math' ),
		];
	}

	if ( Helper::get_auto_update_setting() ) {
		return [
			'status'  => 'ok',
			'message' => __( 'Rank Math auto-update option is enabled on your site.', 'seo-by-rank-math' ),
		];
	}

	return [
		'status'  => 'warning',
		'message' => '<div class="auto-update-disabled">' . sprintf(
			// Translators: placeholder is an activate button.
			__( 'Automatic updates are not enabled on your site. %s', 'seo-by-rank-math' ),
			'<a href="#" class="button button-primary button-small enable-auto-update">' . __( 'Enable Auto Updates', 'seo-by-rank-math' ) . '</a>'
		) . '</div>' .
		'<div class="auto-update-enabled hidden">' .
		esc_html__( 'Rank Math auto-update option is enabled on your site.', 'seo-by-rank-math' ) .
		'</div>',
	];
}

/**
 * Checks if site description is empty or set to default.
 *
 * @return array
 */
function rank_math_analyze_site_description() {
	$sitedesc = get_bloginfo( 'description' );

	if ( '' === $sitedesc ) {
		return [
			'status'  => 'warning',
			'message' => sprintf(
				/* translators: %1$s link to the customize settings, %2$s closing tag for the link */
				esc_html__( 'You have not entered a tagline yet. It is a good idea to choose one. %1$sYou can fix this in the customizer%2$s.', 'seo-by-rank-math' ),
				'<a href="' . esc_url( admin_url( 'customize.php' ) ) . '" target="_blank">',
				'</a>'
			),
		];
	}

	if ( rank_math_is_default_tagline() ) {
		return [
			'status'  => 'fail',
			'message' => wp_kses_post( __( 'Your Site Tagline is set to the default value <em>Just another WordPress site</em>.', 'seo-by-rank-math' ) ),
		];
	}

	return [
		'status'  => 'ok',
		'message' => esc_html__( 'Your Site Tagline is set to a custom value.', 'seo-by-rank-math' ),
	];
}

/**
 * Check if the site uses the default WP tagline.
 *
 * @return bool
 */
function rank_math_is_default_tagline() {
	$description            = get_bloginfo( 'description' );
	$translated_description = translate( 'Just another WordPress site' ); // phpcs:ignore

	if ( $description === $translated_description ) {
		return true;
	}

	// Also check untranslated version.
	return 'Just another WordPress site' === $description;
}

/**
 * Checks if pretty permalinks are enabled and if they contain %postname%.
 *
 * @return array
 */
function rank_math_analyze_permalink_structure() {
	$permalink_structure = get_option( 'permalink_structure' );

	if ( '' === $permalink_structure ) {
		return [
			'status'  => 'fail',
			'message' => wp_kses_post( __( 'Permalinks are set to the default value. <em>Pretty permalinks</em> are disabled. ', 'seo-by-rank-math' ) ),
		];
	}

	if ( ! rank_math_is_postname_in_permalink() ) {
		return [
			'status'  => 'fail',
			'message' => wp_kses_post( __( 'Permalinks are set to a custom structure but the post titles do not appear in the permalinks.', 'seo-by-rank-math' ) ),
		];
	}

	return [
		'status'  => 'ok',
		/* translators: permalink structure */
		'message' => sprintf( wp_kses_post( __( 'Post permalink structure is set to %s.', 'seo-by-rank-math' ) ), '<code>' . $permalink_structure . '</code>' ),
	];
}

/**
 * Check if the post permalink includes %postname%.
 *
 * @return bool
 */
function rank_math_is_postname_in_permalink() {
	return ( false !== strpos( get_option( 'permalink_structure' ), '%postname%' ) );
}

/**
 * Checks if Search Console is linked.
 *
 * @return array
 */
function rank_math_analyze_search_console() {
	$status = Authentication::is_authorized() && Console::get_site_url();

	return [
		'status'  => $status ? 'ok' : 'fail',
		'message' => $status ? esc_html__( 'Google Search Console has been linked.', 'seo-by-rank-math' ) : esc_html__( 'You have not linked Google Search Console yet.', 'seo-by-rank-math' ),
	];
}

/**
 * Checks for posts without a focus keyword.
 *
 * @return array
 */
function rank_math_analyze_focus_keywords() {
	global $wpdb;

	$postmeta_table_limit = apply_filters( 'rank_math/seo_analysis/postmeta_table_limit', 200000 );
	if ( DB::table_size_exceeds( $wpdb->postmeta, $postmeta_table_limit ) ) {
		return [
			'status'  => 'warning',
			'message' => esc_html__( 'Could not check Focus Keywords in posts - the post meta table exceeds the size limit.', 'seo-by-rank-math' ),
		];
	}

	$in_search_post_types = Helper::get_allowed_post_types();
	$in_search_post_types = empty( $in_search_post_types ) ? '' : " AND {$wpdb->posts}.post_type IN ('" . join( "', '", array_map( 'esc_sql', $in_search_post_types ) ) . "')";

	$meta_query = new WP_Meta_Query(
		[
			'relation' => 'AND',
			[
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'NOT EXISTS',
			],
			[
				'relation' => 'OR',
				[
					'key'     => 'rank_math_robots',
					'value'   => 'noindex',
					'compare' => 'NOT LIKE',
				],
				[
					'key'     => 'rank_math_robots',
					'compare' => 'NOT EXISTS',
				],
			],
		]
	);

	$mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
	$query  = "SELECT {$wpdb->posts}.ID, {$wpdb->posts}.post_type FROM $wpdb->posts {$mq_sql['join']} WHERE 1 = 1 {$mq_sql['where']}{$in_search_post_types} AND ({$wpdb->posts}.post_status = 'publish') GROUP BY {$wpdb->posts}.ID";
	$data   = DB_Helper::get_results( $query, ARRAY_A );

	// Early Bail!
	if ( empty( $data ) ) {
		return [
			'status'  => 'ok',
			'message' => esc_html__( 'All published posts have focus keywords set.', 'seo-by-rank-math' ),
		];
	}

	$rows  = rank_math_analyze_group_result( $data );
	$links = rank_math_get_post_type_links( $rows, '&focus_keyword=1' );

	return [
		'status'  => 'fail',
		/* translators: post type links */
		'message' => sprintf( esc_html__( 'There are %s with no focus keyword set.', 'seo-by-rank-math' ), join( ', ', $links ) ),
	];
}

/**
 * Checks for posts where the focus keyword doesn't appear in the title.
 *
 * @return array
 */
function rank_math_analyze_post_titles() {
	$info = [];
	$data = rank_math_get_posts_with_titles();

	// Early Bail!
	if ( empty( $data ) ) {
		return [
			'status'  => 'ok',
			'message' => esc_html__( 'Focus keywords appear in the titles of published posts where it is set.', 'seo-by-rank-math' ),
		];
	}

	$rows  = rank_math_analyze_group_result( $data );
	$links = rank_math_get_post_type_links( $rows, '&fk_in_title=1' );

	$post_ids     = wp_list_pluck( $data, 'ID' );
	$post_ids_max = array_slice( $post_ids, 0, 20 );
	foreach ( $post_ids_max as $postid ) {
		$info[] = '<a href="' . get_permalink( $postid ) . '" target="_blank">' . get_the_title( $postid ) . '</a>';
	}
	$count = count( $post_ids ) - 20;
	if ( $count > 0 ) {
		/* translators: post ID count */
		$info[] = sprintf( esc_html__( '+%d More...', 'seo-by-rank-math' ), $count );
	}

	return [
		'status'  => 'fail',
		/* translators: post type links */
		'message' => sprintf( esc_html__( 'There are %s published posts where the primary focus keyword does not appear in the post title.', 'seo-by-rank-math' ), join( ', ', $links ) ),
		'info'    => $info,
	];
}

/**
 * Get `post_type` links.
 *
 * @param array  $rows         Rows.
 * @param string $extra_params Extra parameters.
 *
 * @return array
 */
function rank_math_get_post_type_links( $rows, $extra_params ) {
	$links = [];
	foreach ( $rows as $post_type => $row ) {
		$post_type = get_post_type_object( $post_type );
		$count     = count( $row );
		$links[]   = sprintf(
			'<a href="%1$s%2$s" target="_blank">%3$d %4$s</a>',
			esc_url( admin_url( 'edit.php?post_type=' . $post_type->name ) ),
			$extra_params,
			$count,
			$count > 1 ? $post_type->label : $post_type->labels->singular_name
		);
	}

	return $links;
}

/**
 * Get posts not set to noindex where the Focus Keyword has been added.
 *
 * @return mixed
 */
function rank_math_get_posts_with_titles() {
	global $wpdb;

	$in_post_types = Helper::get_allowed_post_types();
	$in_post_types = empty( $in_post_types ) ? '' : " AND {$wpdb->posts}.post_type IN ('" . join( "', '", array_map( 'esc_sql', $in_post_types ) ) . "')";
	$meta_query    = new WP_Meta_Query(
		[
			'relation' => 'AND',
			[
				'key'     => 'rank_math_focus_keyword',
				'compare' => 'EXISTS',
			],
			[
				'relation' => 'OR',
				[
					'key'     => 'rank_math_robots',
					'value'   => 'noindex',
					'compare' => 'NOT LIKE',
				],
				[
					'key'     => 'rank_math_robots',
					'compare' => 'NOT EXISTS',
				],
			],
		]
	);

	$mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
	$query  = "SELECT {$wpdb->posts}.ID, {$wpdb->posts}.post_type FROM $wpdb->posts {$mq_sql['join']} WHERE 1=1 {$mq_sql['where']}{$in_post_types} AND ({$wpdb->posts}.post_status = 'publish') AND REPLACE( {$wpdb->posts}.post_title, '&amp;', '&' ) NOT LIKE CONCAT( '%', SUBSTRING_INDEX( {$wpdb->postmeta}.meta_value, ',', 1 ), '%' ) GROUP BY {$wpdb->posts}.ID";

	return DB_Helper::get_results( $query, ARRAY_A );
}

/**
 * Group result data by post type.
 *
 * @param array $data Result data.
 *
 * @return array
 */
function rank_math_analyze_group_result( $data ) {
	foreach ( $data as $val ) {
		$key            = array_key_exists( 'post_type', $val ) ? $val['post_type'] : '';
		$rows[ $key ][] = $val;
	}
	return $rows;
}

/**
 * Check if sitemap module is active.
 *
 * @return array
 */
function rank_math_analyze_sitemap() {

	$found = Helper::is_module_active( 'sitemap' );
	if ( ! $found ) {
		$sitemap = wp_remote_get( RankMath\Sitemap\Router::get_base_url( 'sitemap.xml' ) );
		$found   = isset( $sitemap['response'] ) && 200 === $sitemap['response']['code'];
	}

	return [
		'status'  => $found ? 'ok' : 'fail',
		'message' => $found ? esc_html__( 'Your site has one or more sitemaps.', 'seo-by-rank-math' ) : esc_html__( 'No sitemaps found.', 'seo-by-rank-math' ),
	];
}


/**
 * Check if the site is globally set to noindex.
 */
function rank_math_analyze_blog_public() {
	$info_message  = '<strong>' . esc_html__( 'Attention: Search Engines can\'t see your website.', 'seo-by-rank-math' ) . '</strong> ';
	$info_message .= sprintf(
		/* translators: %1$s: opening tag of the link, %2$s: the closing tag */
		esc_html__( 'Navigate to %1$sSettings > Reading%2$s and turn off this option: "Discourage search engines from indexing this site".', 'seo-by-rank-math' ),
		'<a href="' . esc_url( admin_url( 'options-reading.php' ) ) . '">',
		'</a>'
	);

	$public = (bool) get_option( 'blog_public' );
	return [
		'status'  => $public ? 'ok' : 'fail',
		'message' => $public ? esc_html__( 'Your site is accessible by search engine.', 'seo-by-rank-math' ) : $info_message,
	];
}
PK     ™ŠU]Õx¤ÞÊ  Ê  .  includes/modules/seo-analysis/class-result.phpnu „[µü¤        <?php
/**
 * The SEO Analyzer result of each test.
 *
 * @since      1.0.24
 * @package    RankMath
 * @subpackage RankMath\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\SEO_Analysis;

use RankMath\Helper;
use RankMath\KB;

defined( 'ABSPATH' ) || exit;

/**
 * Result class.
 */
class Result {

	/**
	 * Result ID.
	 *
	 * @var string
	 */
	private $id;

	/**
	 * Hold result data.
	 *
	 * @var array
	 */
	private $result;

	/**
	 * Is sub-page.
	 *
	 * @var array
	 */
	private $is_subpage;

	/**
	 * The Constructor.
	 *
	 * @param string $id         Result id.
	 * @param object $data       Result data.
	 * @param bool   $is_subpage Is sub-page result.
	 */
	public function __construct( $id, $data, $is_subpage ) {
		if ( is_a( $data, 'RankMath\\SEO_Analysis\\Result' ) ) {
			$data = $data->result;
		}
		$this->id         = $id;
		$this->result     = $data;
		$this->is_subpage = $is_subpage;
	}

	/**
	 * Get result ID.
	 *
	 * @return string
	 */
	public function get_id() {
		return $this->id;
	}

	/**
	 * Get result category.
	 *
	 * @return string
	 */
	public function get_category() {
		return is_array( $this->result ) && isset( $this->result['category'] ) ? $this->result['category'] : '';
	}

	/**
	 * Get result status.
	 *
	 * @return string
	 */
	public function get_status() {
		return is_array( $this->result ) && isset( $this->result['status'] ) ? $this->result['status'] : '';
	}

	/**
	 * Is test excluded.
	 *
	 * @return bool
	 */
	public function is_excluded() {
		$exclude_tests = [
			'active_plugins',
			'active_theme',
			'dirlist',
			'libwww_perl_access',
			'robots_txt',
			'safe_browsing',
			'xmlrpc',

			// Local tests.
			'comment_pagination',
			'site_description',
			'permalink_structure',
			'cache_plugin',
			'search_console',
			'focus_keywords',
			'post_titles',
		];

		return $this->is_subpage && in_array( $this->id, $exclude_tests, true );
	}

	/**
	 * Is test hidden.
	 *
	 * @return bool
	 */
	public function is_hidden() {
		$always_hidden = [
			'serp_preview',
			'mobile_serp_preview',
		];

		// Hidden when not in advanced mode.
		$hidden_tests = [
			// Performance.
			'image_header',
			'minify_css',
			'minify_js',
			'page_objects',
			'page_size',
			'response_time',

			// Security.
			'directory_listing',
			'safe_browsing',
			'ssl',
			'active_plugins',
			'active_theme',
		];

		$is_hidden = in_array( $this->id, $always_hidden, true ) || ( ! Helper::is_advanced_mode() && in_array( $this->id, $hidden_tests, true ) );

		return apply_filters( 'rank_math/seo_analysis/is_test_hidden', $is_hidden, $this->id );
	}

	/**
	 * Get test score.
	 *
	 * @return int
	 */
	public function get_score() {
		$score = [
			'h1_heading'          => 5,
			'h2_headings'         => 2,
			'img_alt'             => 4,
			'keywords_meta'       => 5,
			'links_ratio'         => 3,
			'title_length'        => 4,
			'permalink_structure' => 7,
			'focus_keywords'      => 3,
			'post_titles'         => 4,

			// Advanced SEO.
			'canonical'           => 5,
			'noindex'             => 7,
			'non_www'             => 4,
			'opengraph'           => 2,
			'robots_txt'          => 3,
			'schema'              => 3,
			'sitemaps'            => 3,
			'search_console'      => 1,

			// Performance.
			'image_header'        => 3,
			'minify_css'          => 2,
			'minify_js'           => 1,
			'page_objects'        => 2,
			'page_size'           => 3,
			'response_time'       => 3,

			// Security.
			'directory_listing'   => 1,
			'safe_browsing'       => 8,
			'ssl'                 => 7,
		];

		return isset( $score[ $this->id ] ) ? $score[ $this->id ] : 0;
	}

	/**
	 * Get test result data.
	 *
	 * @return array
	 */
	public function get_result() {
		return $this->result;
	}
}
PK     ™ŠU]m-ó;/1  /1  4  includes/modules/seo-analysis/class-seo-analyzer.phpnu „[µü¤        <?php
/**
 * The SEO Analyzer class runs the tests and handles the results.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\SEO_Analysis;

use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * SEO_Analyzer class.
 */
class SEO_Analyzer {

	use Ajax;
	use Hooker;

	/**
	 * Rank Math SEO Checkup API.
	 *
	 * @var string
	 */
	private $api_url = '';

	/**
	 * URL to analyze.
	 *
	 * @var string
	 */
	public $analyse_url = '';

	/**
	 * Sub-page URL to analyze.
	 *
	 * @var string
	 */
	public $analyse_subpage = false;

	/**
	 * Hold analysis results.
	 *
	 * @var null|array
	 */
	public $results = null;

	/**
	 * Hold analysis results.
	 *
	 * @var null|array
	 */
	public $results_data = null;

	/**
	 * Hold analysis result date.
	 *
	 * @var mixed
	 */
	public $results_date = null;

	/**
	 * Hold any api error.
	 *
	 * @var array
	 */
	public $api_error = '';

	/**
	 * Hold local test data.
	 *
	 * @var array
	 */
	private $local_tests = [];

	/**
	 * The constructor.
	 */
	public function __construct() {
		$this->analyse_url = home_url();

		$this->action( 'init', 'set_url' );
		$this->maybe_clear_storage();

		$this->ajax( 'analyze', 'analyze_me' );
		$this->ajax( 'enable_auto_update', 'enable_auto_update' );
	}

	/**
	 * Set URL and other properties on init.
	 *
	 * @return void
	 */
	public function set_url() {

		$this->api_url = $this->do_filter( 'seo_analysis/api_endpoint', 'https://rankmath.com/analyze/v2/json/' );
		if ( ! empty( $_REQUEST['u'] ) && $this->is_allowed_url( Param::request( 'u' ) ) ) { // phpcs:ignore
			$this->analyse_url     = esc_url_raw( Param::request( 'u' ) );
			$this->analyse_subpage = true;
		}

		/**
		 * Action: 'rank_math/seo_analysis/after_set_url' - Fires after setting the URL.
		 */
		$this->do_action( 'seo_analysis/after_set_url', $this );

		if ( $this->analyse_subpage ) {
			return;
		}

		$this->get_results_from_storage();
		$this->local_tests = $this->do_filter( 'seo_analysis/tests', [] );
	}

	/**
	 * Get graph metrics.
	 *
	 * @return array
	 */
	private function get_graph_metrics() {
		$total       = 0;
		$percent     = 0;
		$total_score = 0;
		$statuses    = [
			'ok'      => 0,
			'fail'    => 0,
			'info'    => 0,
			'warning' => 0,
		];
		foreach ( $this->results as $id => $result ) {
			if ( false === $this->can_count_result( $result ) ) {
				continue;
			}

			if ( $result->is_hidden() ) {
				continue;
			}

			++$statuses[ $result->get_status() ];
			++$total;

			$total_score = $total_score + $result->get_score();

			if ( 'ok' !== $result->get_status() ) {
				continue;
			}

			$percent = $percent + $result->get_score();
		}

		$percent = $total_score > 0 ? round( ( $percent / $total_score ) * 100 ) : 0;
		$grade   = $this->get_graph_grade( $percent );

		return compact( 'total', 'percent', 'statuses', 'grade' );
	}

	/**
	 * Can count result.
	 *
	 * @param Result $result Result instance.
	 *
	 * @return bool
	 */
	public function can_count_result( $result ) {
		return ! is_object( $result ) ? false : true;
	}

	/**
	 * Format grade result.
	 *
	 * @param int $percent Total percentage.
	 *
	 * @return string
	 */
	private function get_graph_grade( $percent ) {
		if ( $percent < 70 ) {
			return 'average';
		}

		if ( $percent < 50 ) {
			return 'bad';
		}

		return 'good';
	}

	/**
	 * Get result from storage.
	 *
	 * @param string $option Option name.
	 */
	public function get_results_from_storage( $option = 'rank_math_seo_analysis' ) {
		$this->results      = get_option( $option . '_results' );
		$this->results_date = get_option( $option . '_date' );

		$url = get_option( $option . '_url' );
		if ( $url ) {
			$this->analyse_url = $url;
		}

		$this->build_results();
		if ( empty( $this->results ) ) {
			return [];
		}

		return $this->get_results();
	}

	/**
	 * Return formatted date.
	 */
	public function get_last_checked_date() {
		if ( ! $this->results_date ) {
			return;
		}

		$date = date_i18n( get_option( 'date_format' ), $this->results_date );
		$time = date_i18n( get_option( 'time_format' ), $this->results_date );

		return [
			'date' => $date,
			'time' => $time,
		];
	}

	/**
	 * Clear stored results if needed.
	 */
	private function maybe_clear_storage() {
		if ( '1' === Param::request( 'clear_results' ) ) {
			delete_option( 'rank_math_seo_analysis_results' );
			delete_option( 'rank_math_seo_analysis_date' );
			Helper::redirect( Security::remove_query_arg_raw( 'clear_results' ) );
			exit;
		}
	}

	/**
	 * Convert result into object.
	 */
	public function build_results() {
		if ( ! is_array( $this->results ) ) {
			return;
		}

		$this->move_priority_results_to_top();

		$this->results_data = $this->results;
		$this->results_date = time();
		foreach ( $this->results as $id => $result ) {
			$this->results[ $id ] = new Result( $id, $result, $this->analyse_subpage );
		}
	}

	/**
	 * Move all tests in "priority" category to top.
	 */
	private function move_priority_results_to_top() {
		$priority = [];
		foreach ( $this->results as $id => $result ) {
			if ( is_array( $result ) && 'priority' === $result['category'] ) {
				$priority[ $id ] = $result;
				unset( $this->results[ $id ] );
			}
		}

		$this->results = array_replace( $priority, $this->results );
	}

	/**
	 * Run all SEO analysis tests against the configured URL.
	 *
	 * Extracted from analyze_me() so the analyzer can be invoked outside
	 * the AJAX request lifecycle (e.g. by Rank Math abilities).
	 *
	 * @param bool $clear_cache Whether to clear cached results before running.
	 * @return bool True on success, false if the remote API failed AND no local tests ran.
	 */
	public function run_tests( $clear_cache = true ) {
		$this->results = null;

		if ( ! $this->analyse_subpage && $clear_cache ) {
			delete_option( 'rank_math_seo_analysis_results' );
			delete_option( 'rank_math_seo_analysis_date' );
		}

		$remote_ok = $this->run_api_tests();

		if ( ! $this->analyse_subpage ) {
			$this->run_local_tests();
			update_option( 'rank_math_seo_analysis_results', $this->results, false );
			update_option( 'rank_math_seo_analysis_date', time(), false );
		}

		/**
		 * Fires after the SEO analysis has completed.
		 *
		 * @see action: rank_math/seo_analysis/after_analyze
		 */
		$this->do_action( 'seo_analysis/after_analyze', $this );
		$this->build_results();

		return $remote_ok || ! empty( $this->results );
	}

	/**
	 * Whether the most recent run_tests() call reached the remote API.
	 *
	 * @return bool
	 */
	public function remote_api_succeeded() {
		return empty( $this->api_error );
	}

	/**
	 * AJAX handler â€” runs the site SEO audit and returns results to the admin UI.
	 */
	public function analyze_me() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'site_analysis' );

		$this->set_url();
		$this->run_tests( true );
		$this->success( $this->get_results() );
	}

	/**
	 * Ajax handler for the Enable auto update button.
	 */
	public function enable_auto_update() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'general' );

		$this->enable_auto_update_in_stored_data();
		Helper::toggle_auto_update_setting( 'on' );

		echo '1';
		die;
	}

	/**
	 * Update the auto update value in the stored results.
	 */
	public function enable_auto_update_in_stored_data() {
		$results = get_option( 'rank_math_seo_analysis_results' );
		if ( ! isset( $results['auto_update'] ) ) {
			return;
		}

		$results['auto_update']['status']  = 'ok';
		$results['auto_update']['message'] = __( 'Rank Math auto-update option is enabled on your site.', 'seo-by-rank-math' );
		update_option( 'rank_math_seo_analysis_results', $results, false );
	}

	/**
	 * Run test through the Rank Math Analysis API.
	 *
	 * @return boolean
	 */
	public function run_api_tests() {
		$response = $this->get_api_results();
		if ( false === $response ) {
			return false;
		}

		$this->process_api_results( $response );

		return true;
	}

	/**
	 * Process results as needed.
	 *
	 * @param array $response Response.
	 *
	 * @return boolean
	 */
	private function process_api_results( $response ) {
		foreach ( $response as $id => $results ) {
			$this->results[ $id ] = wp_parse_args(
				$results,
				[
					'test_id'  => $id,
					'api_test' => true,
				]
			);
		}

		return true;
	}

	/**
	 * Get API results.
	 *
	 * @return bool|array
	 */
	private function get_api_results() {
		$api_url = Security::add_query_arg_raw(
			[
				'u'          => $this->analyse_url,
				'locale'     => get_locale(),
				'is_subpage' => $this->analyse_subpage,
			],
			$this->api_url
		);

		$request = wp_remote_get( $api_url, [ 'timeout' => 30 ] );
		if ( is_wp_error( $request ) ) {
			$this->api_error = wp_strip_all_tags( $request->get_error_message() );
			return false;
		}

		$status = absint( wp_remote_retrieve_response_code( $request ) );
		if ( 200 !== $status ) {
			// Translators: placeholder is a HTTP error code.
			$this->api_error = sprintf( __( 'HTTP %d error.', 'seo-by-rank-math' ), $status );
			return false;
		}

		$response = wp_remote_retrieve_body( $request );
		$response = json_decode( $response, true );
		if ( ! is_array( $response ) ) {
			$this->api_error = __( 'Unexpected API response.', 'seo-by-rank-math' );
			return false;
		}

		return $response;
	}

	/**
	 * Run local site tests.
	 */
	private function run_local_tests() {
		foreach ( $this->local_tests as $id => $test ) {
			$this->results[ $id ] = array_merge(
				[
					'test_id'     => $id,
					'api_test'    => false,
					'title'       => $test['title'],
					'description' => $test['description'],
					'fix'         => isset( $test['how_to_fix'] ) ? $test['how_to_fix'] : '',
					'category'    => $test['category'],
					'info'        => [],
					'kb_link'     => isset( $test['kb_link'] ) ? $test['kb_link'] : 'https://rankmath.com/kb/seo-analysis',
					'tooltip'     => ! empty( $test['tooltip'] ) ? $test['tooltip'] : '',
				],
				call_user_func( $test['callback'], $this )
			);
		}
	}

	/**
	 * Check if it is a valid URL on this site.
	 *
	 * @param string $url Check url if it is allowed.
	 * @return bool
	 */
	private function is_allowed_url( $url ) {
		$allowed = true;
		$home    = get_home_url();
		if ( strpos( $url, $home ) !== 0 ) {
			$allowed = false;
		}

		// wp-admin pages are not allowed.
		if ( strpos( substr( $url, strlen( $home ) ), '/wp-admin' ) === 0 ) {
			$allowed = false;
		}

		return $this->do_filter( 'analysis/is_allowed_url', $allowed, $url );
	}

	/**
	 * Sort results by category.
	 *
	 * @return array
	 */
	private function sort_results_by_category() {
		$data = [];
		foreach ( $this->results as $result ) {
			if ( $result->is_hidden() ) {
				continue;
			}
			$category = $result->get_category();
			if ( ! isset( $data[ $category ] ) ) {
				$data[ $category ] = [];
			}
			$data[ $category ][ $result->get_id() ] = $result->get_result();
		}

		return $data;
	}

	/**
	 * Get SEO Analysis results.
	 *
	 * @return array
	 */
	private function get_results() {
		return [
			'results'  => $this->sort_results_by_category(),
			'metrices' => $this->get_graph_metrics(),
			'date'     => $this->get_last_checked_date(),
			'serpData' => $this->get_serp_data(),
		];
	}

	/**
	 * Get SERP Data.
	 *
	 * @return array
	 */
	private function get_serp_data() {
		$favicon = get_site_icon_url( 128 );
		if ( is_array( $this->results ) ) {
			if ( isset( $this->results['title_length'] ) ) {
				$title_data = $this->results['title_length']->get_result();
				$title      = $title_data['data'];
			}

			if ( isset( $this->results['description_length'] ) ) {
				$description_data = $this->results['description_length']->get_result();
				$description      = $description_data['data'];
			}
		}

		if ( empty( $title ) ) {
			$title = __( '(No Title)', 'seo-by-rank-math' );
		}
		// Cut title to 60 characters.
		if ( strlen( $title ) > 60 ) {
			$title = substr( $title, 0, 60 ) . '...';
		}

		if ( empty( $description ) ) {
			$description = __( '(No Description)', 'seo-by-rank-math' );
		}
		// Cut description to 160 characters.
		if ( strlen( $description ) > 160 ) {
			$description = substr( $description, 0, 160 ) . '...';
		}

		return [
			'favicon'     => $favicon,
			'url'         => esc_url( $this->analyse_url ),
			'title'       => esc_html( $title ),
			'description' => esc_html( $description ),
		];
	}
}
PK     ™ŠU]káèM  M  4  includes/modules/seo-analysis/class-seo-analysis.phpnu „[µü¤        <?php
/**
 * The SEO Analyzer module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\SEO_Analysis
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\SEO_Analysis;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * SEO_Analysis class.
 */
class SEO_Analysis {

	use Hooker;

	/**
	 * Admin object.
	 *
	 * @var Admin
	 */
	public $admin;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() ) {
			return;
		}

		if ( is_admin() ) {
			$this->admin = new Admin();
		}

		if ( Helper::has_cap( 'rank_math_site_analysis' ) ) {
			$this->action( 'rank_math/admin_bar/items', 'admin_bar_items', 11 );
		}
	}

	/**
	 * Add admin bar item.
	 *
	 * @param Admin_Bar_Menu $menu Menu class instance.
	 */
	public function admin_bar_items( $menu ) {
		$menu->add_sub_menu(
			'seo-analysis',
			[
				'title'    => esc_html__( 'SEO Analyzer', 'seo-by-rank-math' ),
				'href'     => Helper::get_admin_url( 'seo-analysis' ),
				'meta'     => [ 'title' => esc_html__( 'Site-wide analysis', 'seo-by-rank-math' ) ],
				'priority' => 50,
			]
		);

		if ( ! is_admin() && ! is_404() ) {
			$link = is_front_page() ? '' : ( is_ssl() ? 'https' : 'http' ) . '://' . Param::server( 'HTTP_HOST' ) . Param::server( 'REQUEST_URI' );

			$menu->add_sub_menu(
				'analyze',
				[
					'title' => $link ? esc_html__( 'Analyze this Page', 'seo-by-rank-math' ) : esc_html__( 'SEO Analyzer', 'seo-by-rank-math' ),
					'href'  => Helper::get_admin_url( 'seo-analysis' ) . ( $link ? '&u=' . rawurlencode( $link ) : '' ),
					'meta'  => [ 'title' => esc_html__( 'SEO Analysis for this page', 'seo-by-rank-math' ) ],
				],
				'seo-analysis'
			);
		}
	}

	/**
	 * Add PRO tab previews.
	 *
	 * @param string $file        Include file.
	 * @param string $current_tab Current tab.
	 *
	 * @return string
	 */
	public function add_tab_previews( $file, $current_tab ) {
		if ( 'competitor_analyzer' === $current_tab ) {
			$file = __DIR__ . '/views/competitor-analysis.php';
		}

		return $file;
	}
}
PK     ™ŠU](ÓÂ’  ’  $  includes/modules/schema/class-db.phpnu „[µü¤        <?php
/**
 * The Schema module database operations.
 *
 * @since      1.4.3
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * DB class.
 */
class DB {

	/**
	 * Get query builder object.
	 *
	 * @param string $table Meta table name.
	 *
	 * @return Query_Builder
	 */
	private static function table( $table = 'postmeta' ) {
		return Database::table( $table );
	}

	/**
	 * Get all schemas by Object ID.
	 *
	 * @param int    $object_id  Object ID.
	 * @param string $table      Meta table name.
	 * @param bool   $from_db    If set to true, the schema will be retrieved from the database.
	 *
	 * @return array
	 */
	public static function get_schemas( $object_id, $table = 'postmeta', $from_db = false ) {
		static $schema_cache = [];

		// Add exception handler.
		if ( is_null( $object_id ) ) {
			return [];
		}

		// Get from cache.
		if ( ! $from_db && isset( $schema_cache[ $table . '_' . $object_id ] ) ) {
			return $schema_cache[ $table . '_' . $object_id ];
		}

		$key  = 'termmeta' === $table ? 'term_id' : 'post_id';
		$data = self::table( $table )
			->select( 'meta_id' )
			->select( 'meta_value' )
			->where( $key, $object_id )
			->whereLike( 'meta_key', 'rank_math_schema', '' )
			->get();

		$schemas = [];
		foreach ( $data as $schema ) {
			$value = maybe_unserialize( $schema->meta_value );
			if ( empty( $value ) ) {
				continue;
			}

			$id             = 'schema-' . $schema->meta_id;
			$schemas[ $id ] = maybe_unserialize( $schema->meta_value );
		}

		// Add to cache.
		$schema_cache[ $table . '_' . $object_id ] = $schemas;

		return $schemas;
	}

	/**
	 * Get Schema types by Object ID.
	 *
	 * @param int  $object_id Object ID.
	 * @param bool $sanitize  Sanitize schema types.
	 * @param bool $translate Whether to get the schema name.
	 *
	 * @return array
	 */
	public static function get_schema_types( $object_id, $sanitize = false, $translate = true ) {
		$schemas = self::get_schemas( $object_id );

		if ( empty( $schemas ) && Helper::get_default_schema_type( $object_id ) ) {
			$schemas[] = [ '@type' => ucfirst( Helper::get_default_schema_type( $object_id ) ) ];
		}

		if ( has_block( 'rank-math/faq-block', $object_id ) ) {
			$schemas[] = [ '@type' => 'FAQPage' ];
		}

		if ( has_block( 'rank-math/howto-block', $object_id ) ) {
			$schemas[] = [ '@type' => 'HowTo' ];
		}

		if ( empty( $schemas ) ) {
			return false;
		}

		$types = array_reduce(
			wp_list_pluck( $schemas, '@type' ),
			function ( $carry, $type ) {
				if ( is_array( $type ) ) {
					return array_merge( $carry, $type );
				}

				$carry[] = $type;
				return $carry;
			},
			[]
		);

		$types = array_unique( $types );

		if ( $sanitize ) {
			$types = array_map(
				function ( $type ) use ( $translate ) {
					return Helper::sanitize_schema_title( $type, $translate );
				},
				$types
			);
		}
		return implode( ', ', $types );
	}

	/**
	 * Get schema by shortcode id.
	 *
	 * @param  string $id Shortcode unique id.
	 * @param  bool   $from_db If set to true, the schema will be retrieved from the database.
	 * @return array
	 */
	public static function get_schema_by_shortcode_id( $id, $from_db = false ) {
		/**
		 * Keep Schema data in memory after querying by shortcode ID, to avoid
		 * unnecessary queries.
		 *
		 * @var array
		 */
		static $cached_schema_shortcodes = [];

		if ( ! $from_db && isset( $cached_schema_shortcodes[ $id ] ) ) {
			return $cached_schema_shortcodes[ $id ];
		}

		// First, check for meta_key matches for a "shortcut" to the schema.
		$shortcut = false;
		if ( strpos( self::table()->table, 'post' ) !== false ) {
			// Only check for shortcuts if we're querying for a post.
			$shortcut = self::table()
				->select( 'meta_value' )
				->where( 'meta_key', 'rank_math_shortcode_schema_' . $id )
				->one();
		}

		if ( ! empty( $shortcut ) ) {
			$data = self::table()
				->select( 'post_id' )
				->select( 'meta_value' )
				->where( 'meta_id', $shortcut->meta_value )
				->one();

			if ( ! empty( $data ) ) {
				$schema = [
					'post_id' => $data->post_id,
					'schema'  => maybe_unserialize( $data->meta_value ),
				];

				// Cache the schema for future use.
				$cached_schema_shortcodes[ $id ] = $schema;

				return $schema;
			}
		}

		$data = self::table()
			->select( 'post_id' )
			->select( 'meta_value' )
			->whereLike( 'meta_value', $id, '%:"' )
			->one();

		if ( ! empty( $data ) ) {
			$schema = [
				'post_id' => $data->post_id,
				'schema'  => maybe_unserialize( $data->meta_value ),
			];

			// Cache the schema for future use.
			$cached_schema_shortcodes[ $id ] = $schema;

			return $schema;
		}

		return false;
	}

	/**
	 * Get schema type for template.
	 *
	 * @param int $post_id Post id.
	 *
	 * @return string
	 */
	public static function get_template_type( $post_id ) {
		$data = self::table()
			->select( 'meta_value' )
			->where( 'post_id', $post_id )
			->whereLike( 'meta_key', 'rank_math_schema', '' )
			->one();

		if ( empty( $data ) ) {
			return '';
		}

		$schema = maybe_unserialize( $data->meta_value );

		return [
			'type'   => isset( $schema['@type'] ) ? $schema['@type'] : '',
			'schema' => $schema,
		];
	}

	/**
	 * Delete Schema data using Post ID.
	 *
	 * @param int $post_id Post ID.
	 *
	 * @return string
	 */
	public static function delete_schema_data( $post_id ) {
		return self::table()->where( 'post_id', $post_id )->whereLike( 'meta_key', 'rank_math_schema_' )->delete();
	}

	/**
	 * Unpublish job posting when expired.
	 *
	 * @param JsonLD $jsonld  JsonLD Instance.
	 * @param array  $schemas Array of JSON-LD entity.
	 */
	public static function unpublish_jobposting_post( $jsonld, $schemas ) {
		if ( ! is_singular() ) {
			return;
		}

		$job_postings = array_map(
			function ( $schema ) {
				return isset( $schema['@type'] ) && 'JobPosting' === $schema['@type'] ? $schema : false;
			},
			$schemas
		);

		if ( empty( $job_postings ) ) {
			return;
		}

		foreach ( $job_postings as $job_posting ) {
			if (
				empty( $job_posting['metadata']['unpublish'] ) ||
				'on' !== $job_posting['metadata']['unpublish'] ||
				empty( $job_posting['validThrough'] ) ||
				date_create( 'now' )->getTimestamp() < strtotime( $job_posting['validThrough'] )
			) {
				continue;
			}

			wp_update_post(
				[
					'ID'          => $jsonld->post_id,
					'post_status' => 'draft',
				]
			);

			break;
		}
	}
}
PK     ™ŠU]ÙŽË/ƒY  ƒY  (  includes/modules/schema/class-jsonld.phpnu „[µü¤        <?php
/**
 * Output the Schema.org markup in JSON-LD format.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Helpers\Url;
use RankMath\Helpers\Str;
use RankMath\Helpers\Arr;
use RankMath\Paper\Paper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * JsonLD class.
 */
class JsonLD {

	use Hooker;

	/**
	 * Hold post object.
	 *
	 * @var WP_Post
	 */
	public $post = null;

	/**
	 * Hold post ID.
	 *
	 * @var ID
	 */
	public $post_id = 0;

	/**
	 * Hold post parts.
	 *
	 * @var array
	 */
	public $parts = [];

	/**
	 * The Constructor.
	 */
	public function setup() {
		$this->action( 'rank_math/head', 'json_ld', 90 );
		$this->action( 'rank_math/json_ld', 'add_context_data' );
		$this->action( 'rank_math/json_ld/preview', 'generate_preview' );
		new Block_Parser();
		new Frontend();
	}

	/**
	 * Get Schema Preview. Used in the Code Validation in Pro.
	 */
	public function generate_preview() {
		global $post;

		if ( is_singular() ) {
			$this->post    = $post;
			$this->post_id = $post->ID;
			$this->get_parts();
		}

		$data = $this->do_filter( 'json_ld', [], $this );
		unset( $data['BreadcrumbList'] );

		// Preview schema.
		$schema    = \json_decode( file_get_contents( 'php://input' ), true );
		$schema_id = $schema['schemaID'];
		if ( isset( $data[ $schema_id ] ) ) {
			$current_data = $data[ $schema_id ];
			unset( $data[ $schema_id ] );
		} else {
			$current_data = array_pop( $data );
		}
		unset( $schema['schemaID'] );

		$schema = $this->replace_variables( $schema );
		$schema = $this->filter( $schema, $this, $data );
		$schema = wp_parse_args( $schema['schema'], $current_data );
		if ( ! empty( $schema['@type'] ) && in_array( $schema['@type'], [ 'WooCommerceProduct', 'EDDProduct' ], true ) ) {
			$schema['@type'] = ! empty( $schema['hasVariant'] ) ? 'ProductGroup' : 'Product';
		}

		// Merge.
		$data = array_merge( $data, [ $schema_id => $schema ] );

		/**
		 * Filter to change the Code validation data..
		 *
		 * @param array $unsigned An array of data to output in JSON-LD.
		 */
		$data = $this->do_filter( 'schema/preview/validate', $this->do_filter( 'schema/validated_data', $this->validate_schema( $data ) ) );

		echo wp_json_encode( array_values( $data ) );
	}

	/**
	 * Function to get Old schema data. This code is used in the Schema_Converter to convert old schema data.
	 *
	 * @param  int   $post_id       Post id for conversion.
	 * @param  mixed $snippet_class Class instance of snippet.
	 * @return array
	 */
	public function get_old_schema( $post_id, $snippet_class ) {
		global $post;
		$post          = get_post( $post_id ); // phpcs:ignore
		$this->post    = $post;
		$this->post_id = $post_id;
		setup_postdata( $post );
		$this->get_parts();

		/**
		 * Collect data to output in JSON-LD.
		 *
		 * @param array  $unsigned An array of data to output in json-ld.
		 * @param JsonLD $unsigned JsonLD instance.
		 */
		return $snippet_class->process( [], $this );
	}

	/**
	 * Output the ld+json tag with the generated schema data.
	 */
	public function json_ld() {
		global $post;

		if ( is_singular() ) {
			$this->post    = $post;
			$this->post_id = $post->ID;
			$this->get_parts();
		}

		/**
		 * Filter to collect data to output in JSON-LD.
		 *
		 * @param array  $unsigned An array of data to output in JSON-LD.
		 * @param JsonLD $unsigned JsonLD instance.
		 */
		$data = array_filter( $this->do_filter( 'json_ld', [], $this ) );
		if ( empty( $data ) ) {
			return;
		}
		$data = $this->do_filter( 'schema/validated_data', $this->validate_schema( $data ) );
		if ( is_array( $data ) && ! empty( $data ) ) {

			$class = defined( 'RANK_MATH_PRO_FILE' ) ? 'schema-pro' : 'schema';
			$json  = [
				'@context' => 'https://schema.org',
				'@graph'   => array_values( $data ),
			];

			$options = defined( 'RANKMATH_DEBUG' ) && RANKMATH_DEBUG ? JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES : JSON_UNESCAPED_SLASHES;

			echo '<script type="application/ld+json" class="rank-math-' . esc_attr( $class ) . '">' . wp_json_encode( wp_kses_post_deep( $json ), $options ) . '</script>' . "\n";
		}
	}

	/**
	 * Validate schema data. Removes invalid and empty values from the schema data.
	 *
	 * @param array $data Array of JSON-LD data.
	 *
	 * @return array
	 */
	private function validate_schema( $data ) {
		if ( ! is_array( $data ) || empty( $data ) ) {
			return $data;
		}

		foreach ( $data as $id => $value ) {
			if ( is_array( $value ) ) {
				// Remove aline @type.
				if ( isset( $value['@type'] ) && 1 === count( $value ) ) {
					unset( $data[ $id ] );
					continue;
				}

				// Remove empty review.
				if ( 'review' === $id && isset( $value['@type'] ) ) {
					if ( ! isset( $value['reviewRating'] ) || ! isset( $value['reviewRating']['ratingValue'] ) ) {
						unset( $data[ $id ] );
						continue;
					}
				}

				// Recursive.
				$data[ $id ] = $this->validate_schema( $value );
			}

			// Remove empty values.
			// Remove need of array_filter as this will go recursive.
			if ( '' === $value ) {
				unset( $data[ $id ] );
				continue;
			}
		}

		return $data;
	}

	/**
	 * Get Default Schema Data.
	 *
	 * @param array $data Array of JSON-LD data.
	 *
	 * @return array
	 */
	public function add_schema( $data ) {
		global $post;

		$schema = DB::get_schemas( $post->ID );

		return array_merge( $data, $schema );
	}

	/**
	 * Get Default Schema Data.
	 *
	 * @param array $data Array of json-ld data.
	 *
	 * @return array
	 */
	public function add_context_data( $data ) {
		$is_product_archive = $this->is_product_archive_page();
		$can_add_global     = $this->can_add_global_entities( $data, $is_product_archive );
		$snippets           = [
			'\\RankMath\\Schema\\Publisher'     => ! isset( $data['publisher'] ) && $can_add_global,
			'\\RankMath\\Schema\\Website'       => $can_add_global,
			'\\RankMath\\Schema\\PrimaryImage'  => is_singular() && ! post_password_required() && $can_add_global,
			'\\RankMath\\Schema\\Breadcrumbs'   => $this->can_add_breadcrumb(),
			'\\RankMath\\Schema\\Webpage'       => $can_add_global,
			'\\RankMath\\Schema\\Author'        => is_author() || ( is_singular() && $can_add_global ),
			'\\RankMath\\Schema\\Products_Page' => $is_product_archive,
			'\\RankMath\\Schema\\Singular'      => ! post_password_required() && is_singular(),
		];

		foreach ( $snippets as $class => $can_run ) {
			if ( $can_run ) {
				$class = new $class();
				$data  = $class->process( $data, $this );
			}
		}

		return $data;
	}

	/**
	 * Function to replace variables used in Schema fields.
	 *
	 * @param array  $schemas        Schema to replace.
	 * @param object $current_object Current Object.
	 * @param array  $data           Array of json-ld data.
	 *
	 * @return array
	 */
	public function replace_variables( $schemas, $current_object = [], $data = [] ) {
		$new_schemas    = [];
		$current_object = empty( $current_object ) ? get_queried_object() : $current_object;
		foreach ( $schemas as $key => $schema ) {
			if ( 'metadata' === $key ) {
				$new_schemas['isPrimary'] = ! empty( $schema['isPrimary'] );

				if ( ! empty( $schema['type'] ) && 'custom' === $schema['type'] ) {
					$new_schemas['isCustom'] = true;
				}

				continue;
			}

			$this->replace_author( $schema, $data );
			if ( is_array( $schema ) ) {
				$new_schemas[ $key ] = $this->replace_variables( $schema, $current_object, $data );
				continue;
			}

			// Need this conditions to convert date to valid ISO 8601 format.
			if ( in_array( $key, [ 'datePublished', 'uploadDate' ], true ) && '%date(Y-m-dTH:i:sP)%' === $schema ) {
				$schema = '%date(Y-m-d\TH:i:sP)%';
			}
			if ( 'dateModified' === $key && '%modified(Y-m-dTH:i:sP)%' === $schema ) {
				$schema = '%modified(Y-m-d\TH:i:sP)%';
			}

			$new_schemas[ $key ] = is_string( $schema ) && Str::contains( '%', $schema ) && ! filter_var( $schema, FILTER_VALIDATE_URL )
				? Helper::replace_vars( $schema, $current_object ) : $schema;
			if ( '' === $new_schemas[ $key ] ) {
				unset( $new_schemas[ $key ] );
			}
		}

		return $new_schemas;
	}

	/**
	 * Function to replace %author% with Author entity @id.
	 *
	 * @param array $schema Schema to replace.
	 * @param array $data   Array of json-ld data.
	 *
	 * @return void
	 */
	private function replace_author( &$schema, $data ) {
		if ( empty( $data['ProfilePage'] ) ) {
			return;
		}

		if ( empty( $schema['author'] ) || ! isset( $schema['author']['name'] ) || ! in_array( $schema['author']['name'], [ '%name%', '%post_author%' ], true ) ) {
			return;
		}

		$schema['author'] = [
			'@id'  => $data['ProfilePage']['@id'],
			'name' => get_the_author(),
		];
	}

	/**
	 * Filter schema data before adding it to ld+json.
	 *
	 * @param array  $schemas Schema to replace.
	 * @param JsonLD $jsonld  Instance of jsonld.
	 * @param array  $data   Array of json-ld data.
	 *
	 * @return array
	 */
	public function filter( $schemas, $jsonld, $data ) {
		$new_schemas = [];

		foreach ( $schemas as $key => $schema ) {
			$type = is_array( $schema['@type'] ) ? $schema['@type'][0] : $schema['@type'];
			$type = strtolower( $type );
			$type = in_array( $type, [ 'musicgroup', 'musicalbum' ], true )
				? 'music'
				: ( in_array( $type, [ 'blogposting', 'newsarticle' ], true ) ? 'article' : $type );
			$type = Str::contains( 'event', $type ) ? 'event' : $type;
			$hook = 'snippet/rich_snippet_' . $type;

			/**
			 * Short-circuit if 3rd party is interested generating his own data.
			 */
			$pre = $this->do_filter( $hook, false, $jsonld->parts, $data );
			if ( false !== $pre ) {
				$new_schemas[ $key ] = $this->do_filter( $hook . '_custom_entity', [] );
				$new_schemas[ $key ] = $this->do_filter( 'snippet/rich_snippet_entity', $new_schemas[ $key ] );
				continue;
			}

			$new_schemas[ $key ] = $this->do_filter( $hook . '_entity', $schema );
			$new_schemas[ $key ] = $this->do_filter( 'snippet/rich_snippet_entity', $new_schemas[ $key ] );
		}

		return $new_schemas;
	}

	/**
	 * Whether to add global schema entities.
	 *
	 * @param array $data               Array of json-ld data.
	 * @param bool  $is_product_archive Whether the current page is a Product archive.
	 * @return bool
	 */
	public function can_add_global_entities( $data = [], $is_product_archive = false ) {
		if ( ! $is_product_archive && ( is_category() || is_tag() || is_tax() ) ) {
			$object              = get_queried_object();
			$add_global_entities = $object && ! Helper::get_settings( 'titles.remove_' . $object->taxonomy . '_snippet_data' ) && ! $this->do_filter( 'snippet/remove_taxonomy_data', false, $object->taxonomy );
			return $this->do_filter( 'schema/add_global_entities', $add_global_entities, $this );
		}

		if ( is_front_page() || ! is_singular() || ! Helper::can_use_default_schema( $this->post_id ) || ! empty( $data ) ) {
			return true;
		}

		$schemas = DB::get_schemas( $this->post_id );
		if ( ! empty( $schemas ) ) {
			return true;
		}

		/**
		 * Allow developer to remove global schema entities.
		 *
		 * @param bool   $can_add
		 * @param JsonLD $unsigned JsonLD instance.
		 */
		return $this->do_filter( 'schema/add_global_entities', Helper::get_default_schema_type( $this->post_id, true ), $this );
	}

	/**
	 * Can add breadcrumb schema.
	 *
	 * @return bool
	 */
	private function can_add_breadcrumb() {
		/**
		 * Allow developer to disable the breadcrumb JSON-LD output.
		 *
		 * @param bool $unsigned Default: true
		 */
		return ! is_front_page() && Helper::is_breadcrumbs_enabled() && $this->do_filter( 'json_ld/breadcrumbs_enabled', true );
	}

	/**
	 * Check if current page is a WooCommerce archive page.
	 *
	 * @return bool
	 */
	private function is_product_archive_page() {
		return Helper::is_woocommerce_active() && ( ( is_tax() && in_array( get_query_var( 'taxonomy' ), get_object_taxonomies( 'product' ), true ) ) || is_shop() );
	}

	/**
	 * Add property to entity.
	 *
	 * @param string $prop   Name of the property to add into entity.
	 * @param array  $entity Array of json-ld entity.
	 * @param string $key    Property key to add into entity.
	 * @param array  $data   Array of json-ld data.
	 */
	public function add_prop( $prop, &$entity, $key = '', $data = [] ) {
		if ( empty( $prop ) ) {
			return;
		}

		$hash = [
			'email' => [ 'titles.email', 'email' ],
			'phone' => [ 'titles.phone', 'telephone' ],
		];

		if ( isset( $hash[ $prop ] ) && $value = Helper::get_settings( $hash[ $prop ][0] ) ) { // phpcs:ignore
			$entity[ $hash[ $prop ][1] ] = $value;
			return;
		}

		$perform = "add_prop_{$prop}";
		if ( method_exists( $this, $perform ) ) {
			$this->$perform( $entity, $key, $data );
		}
	}

	/**
	 * Add logo property to the entity.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_prop_image( &$entity ) {
		$logo = Helper::get_settings( 'titles.knowledgegraph_logo' );
		if ( ! $logo ) {
			$logo_id = \get_option( 'site_logo' );
			$logo    = $logo_id ? wp_get_attachment_image_url( $logo_id ) : '';
		}

		if ( ! $logo ) {
			return;
		}

		$entity['logo'] = [
			'@type'      => 'ImageObject',
			'@id'        => home_url( '/#logo' ),
			'url'        => $logo,
			'contentUrl' => $logo,
			'caption'    => $this->get_website_name(),
		];
		$this->add_prop_language( $entity['logo'] );

		$attachment = wp_get_attachment_metadata( Helper::get_settings( 'titles.knowledgegraph_logo_id' ), true );
		if ( ! $attachment ) {
			return;
		}

		$entity['logo']['width']  = $attachment['width'];
		$entity['logo']['height'] = $attachment['height'];
	}

	/**
	 * Add Language property to the entity.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_prop_language( &$entity ) {
		$entity['inLanguage'] = $this->do_filter( 'schema/language', get_bloginfo( 'language' ) );
	}

	/**
	 * Add Image property to entity.
	 *
	 * @param  array  $entity Array of json-ld entity.
	 * @param  string $key   Entity Key.
	 * @param  array  $data  Schema Data.
	 */
	private function add_prop_thumbnail( &$entity, $key, $data ) {
		if ( ! empty( $data['primaryImage'] ) ) {
			$entity[ $key ] = [ '@id' => $data['primaryImage']['@id'] ];
		}
	}

	/**
	 * Add isPartOf property to entity.
	 *
	 * @param array  $entity Array of json-ld entity.
	 * @param string $key    Entity Key.
	 */
	private function add_prop_is_part_of( &$entity, $key ) {
		$hash = [
			'website' => home_url( '/#website' ),
			'webpage' => Paper::get()->get_canonical() . '#webpage',
		];

		if ( ! empty( $hash[ $key ] ) ) {
			$entity['isPartOf'] = [ '@id' => $hash[ $key ] ];
		}
	}

	/**
	 * Add publisher property to entity
	 *
	 * @param array  $entity Entity.
	 * @param string $key    Entity Key.
	 * @param  array  $data  Schema Data.
	 */
	public function add_prop_publisher( &$entity, $key, $data ) {
		if ( empty( $data['publisher'] ) ) {
			return;
		}

		$entity[ $key ] = [ '@id' => $data['publisher']['@id'] ];
	}

	/**
	 * Add url property to entity.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_prop_url( &$entity ) {
		if ( $url = Helper::get_settings( 'titles.url' ) ) { // phpcs:ignore
			$entity['url'] = ! Url::is_relative( $url ) ? $url : 'http://' . $url;
		}
	}

	/**
	 * Add address property to entity.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_prop_address( &$entity ) {
		if ( $address = Helper::get_settings( 'titles.local_address' ) ) { // phpcs:ignore
			$entity['address'] = [ '@type' => 'PostalAddress' ] + $address;
		}
	}

	/**
	 * Add aggregateratings to entity.
	 *
	 * @param string $schema Schema to get data for.
	 * @param array  $entity Array of JSON-LD entity to attach data to.
	 */
	public function add_ratings( $schema, &$entity ) {
		$rating = Helper::get_post_meta( "snippet_{$schema}_rating" );

		// Early Bail!
		if ( ! $rating ) {
			return;
		}

		$entity['review'] = [
			'author'        => [
				'@type' => 'Person',
				'name'  => get_the_author_meta( 'display_name' ),
			],
			'datePublished' => get_post_time( 'Y-m-d\TH:i:sP', false ),
			'dateModified'  => get_post_modified_time( 'Y-m-d\TH:i:sP', false ),
			'reviewRating'  => [
				'@type'       => 'Rating',
				'ratingValue' => $rating,
				'bestRating'  => Helper::get_post_meta( "snippet_{$schema}_rating_max" ) ? Helper::get_post_meta( "snippet_{$schema}_rating_max" ) : 5,
				'worstRating' => Helper::get_post_meta( "snippet_{$schema}_rating_min" ) ? Helper::get_post_meta( "snippet_{$schema}_rating_min" ) : 1,
			],
		];
	}

	/**
	 * Get website name with a fallback to bloginfo( 'name' ).
	 *
	 * @return string
	 */
	public function get_website_name() {
		return Helper::get_settings( 'titles.website_name', $this->get_organization_name() );
	}

	/**
	 * Get website name with a fallback to bloginfo( 'name' ).
	 *
	 * @return string
	 */
	public function get_organization_name() {
		$name = Helper::get_settings( 'titles.knowledgegraph_name' );
		return $name ? $name : get_bloginfo( 'name' );
	}

	/**
	 * Set publisher/provider data for JSON-LD.
	 *
	 * @param array  $entity Array of JSON-LD entity.
	 * @param array  $organization Organization data.
	 * @param string $type         Type data set to. Default: 'publisher'.
	 */
	public function set_publisher( &$entity, $organization, $type = 'publisher' ) {
		$keys = [ '@context', '@type', 'url', 'name', 'logo', 'image', 'contactPoint', 'sameAs' ];
		foreach ( $keys as $key ) {
			if ( ! isset( $organization[ $key ] ) ) {
				continue;
			}

			$entity[ $type ][ $key ] = 'logo' !== $key ? $organization[ $key ] : [
				'@type' => 'ImageObject',
				'url'   => $organization[ $key ],
			];
		}
	}

	/**
	 * Set address for JSON-LD.
	 *
	 * @param string $schema Schema to get data for.
	 * @param array  $entity Array of JSON-LD entity to attach data to.
	 */
	public function set_address( $schema, &$entity ) {
		$address = Helper::get_post_meta( "snippet_{$schema}_address" );

		// Early Bail!
		if ( ! is_array( $address ) || empty( $address ) ) {
			return;
		}

		$entity['address'] = [ '@type' => 'PostalAddress' ];
		foreach ( $address as $key => $value ) {
			$entity['address'][ $key ] = $value;
		}
	}

	/**
	 * Set data to entity.
	 *
	 * Loop through post meta value grab data and attache it to the entity.
	 *
	 * @param array $hash   Key to get data and Value to save as.
	 * @param array $entity Array of JSON-LD entity to attach data to.
	 */
	public function set_data( $hash, &$entity ) {
		foreach ( $hash as $metakey => $dest ) {
			$entity[ $dest ] = Helper::get_post_meta( $metakey, $this->post_id );
		}
	}

	/**
	 * Get post title.
	 *
	 * Retrieves the title in this order.
	 *  1. Custom post meta set in rich snippet
	 *  2. Headline template set in Titles & Meta
	 *
	 * @param int $post_id Post ID to get title for.
	 *
	 * @return string
	 */
	public function get_post_title( $post_id = 0 ) {
		$title = Helper::get_post_meta( 'snippet_name', $post_id );

		if ( ! $title && ! empty( $this->post ) ) {
			$title = Helper::replace_vars( Helper::get_settings( "titles.pt_{$this->post->post_type}_default_snippet_name", '%seo_title%' ), $this->post );
		}

		$title = $title ? $title : Paper::get()->get_title();

		return Str::truncate( $title );
	}

	/**
	 * Get post url.
	 *
	 * @param  int $post_id Post ID to get URL for.
	 * @return string
	 */
	public function get_post_url( $post_id = 0 ) {
		$url = Helper::get_post_meta( 'snippet_url', $post_id );

		return $url ? $url : ( 0 === $post_id ? Paper::get()->get_canonical() : get_the_permalink( $post_id ) );
	}

	/**
	 * Get product description.
	 *
	 * @param  object $product Product Object.
	 * @return string
	 */
	public function get_product_desc( $product = [] ) {
		if ( empty( $product ) ) {
			return;
		}

		if ( $description = Helper::get_post_meta( 'description', $product->get_id() ) ) { //phpcs:ignore
			return $description;
		}

		$product_object = get_post( $product->get_id() );
		$description    = Paper::get_from_options( 'pt_product_description', $product_object, '%excerpt%' );

		if ( ! $description ) {
			$description = $product->get_short_description() ? $product->get_short_description() : $product->get_description();
		}

		$description = $this->do_filter( 'product_description/apply_shortcode', false ) ? do_shortcode( $description ) : Helper::strip_shortcodes( $description );
		return wp_strip_all_tags( $description, true );
	}

	/**
	 * Get product title.
	 *
	 * @param  object $product Product Object.
	 * @return string
	 */
	public function get_product_title( $product = [] ) {
		if ( empty( $product ) ) {
			return '';
		}

		if ( $title = Helper::get_post_meta( 'title', $product->get_id() ) ) { //phpcs:ignore
			return $title;
		}

		$product_object = get_post( $product->get_id() );

		$title = Paper::get_from_options( 'pt_product_title', $product_object, '%title% %sep% %sitename%' );
		return $title ? $title : $product->get_name();
	}

	/**
	 * Get post parts.
	 */
	private function get_parts() {
		$parts = [
			'title'     => $this->get_post_title(),
			'url'       => $this->get_post_url(),
			'canonical' => Paper::get()->get_canonical(),
			'modified'  => mysql2date( DATE_W3C, $this->post->post_modified, false ),
			'published' => mysql2date( DATE_W3C, $this->post->post_date, false ),
			'excerpt'   => Helper::replace_vars( '%excerpt%', $this->post ),
		];

		// Description.
		$desc = Helper::get_post_meta( 'snippet_desc' );

		if ( ! $desc ) {
			$desc = Helper::replace_vars( Helper::get_settings( "titles.pt_{$this->post->post_type}_default_snippet_desc" ), $this->post );
		}
		$parts['desc'] = $desc ? $desc : ( Helper::get_post_meta( 'description' ) ? Helper::get_post_meta( 'description' ) : $parts['excerpt'] );

		// Author.
		$author          = Helper::get_post_meta( 'snippet_author' );
		$parts['author'] = $author ? $author : get_the_author_meta( 'display_name', $this->post->post_author );

		// Modified date cannot be before publish date.
		if ( strtotime( $this->post->post_modified ) < strtotime( $this->post->post_date ) ) {
			$parts['modified'] = $parts['published'];
		}

		$this->parts = $parts;
	}

	/**
	 * Get global social profile URLs, to use in the `sameAs` property.
	 *
	 * @link https://developers.google.com/webmasters/structured-data/customize/social-profiles
	 */
	public function get_social_profiles() {
		$profiles = [ Helper::get_settings( 'titles.social_url_facebook' ) ];

		$twitter = Helper::get_settings( 'titles.twitter_author_names' );
		if ( $twitter ) {
			$profiles[] = "https://twitter.com/$twitter";
		}

		$additional_profiles = Helper::get_settings( 'titles.social_additional_profiles' );
		if ( ! empty( $additional_profiles ) ) {
			$profiles = array_merge( $profiles, Arr::from_string( $additional_profiles, "\n" ) );
		}

		return array_values( array_filter( $profiles ) );
	}
}
PK     ™ŠU]h�ÓÑ) Ñ) <  includes/modules/schema/assets/img/custom-schema-builder.jpgnu „[µü¤        ÿØÿà JFIF      ÿÛ „ 		



ÿÂ êú ÿÄ            ÿÚ     þ©                                                                                                „@    ”ú                          0t    oÖ             ºåo@  #')å³    u{w@ <ÆÓ£�   rw/}>€            Ÿ>-šêå´Î=®½6ÈO½F»X²¬ß:.ås„óY£ G“ìróTŽñÒ©N>g‘gµ³,uJµ‘ìºÏ.í~kÐš¼Ú®   «ÄóWmÕêt             9‚ˆXßàS¿ËÕŸÔÃçoØ�v×Øä×·V˜Õu~oaÝqù¯[6kùé|ýž�§,ªyêô´GÂm²7ßF}þ�jí�ñ1sÖÛóul²žÙM¶z[€sË»ŸœfúKg“Ìú/ª¸  o—Ã†ÏkÙõz             ÁEW/ùZ³ÎCçä”ªÎeÑè‘úJ5]Wœ®ÍoÉéîm=ŸŸ·ŠsÝš;}¯Ko�MV×˜¹ìý5µvÈù=›þkž5:hiåSô2ž]Ðü·ÌÖGÍúßÒu   Íóù|‡µíz½             |i——F^Yr«¡OŸ—?¡Uþ”pgú½1ªî`£­Ø2d«­¾ž]y3áÅ¢øíßƒÍö}
�vá•9yïûs«¶sÌóžÅß?T³iª:è«Ýõ:<»®ùz.®Ê§³èo  O‡çgŸ§¿Õè             9U3¿±C�å®ó�¦½NË™9¿¼…ˆQËmâï%7cÊóÛw%*qíº®O°ìhæ»ì”çî©T”zä¹Ë$ž]›bï;Î¥Ð  ¢§hz�                    Î€    <ûú    
öî                          
¼û¦    •ò                          dÕ`                               C&¹Æ                             ³�2k•ô                             Y@C&¹gä¹À    ëœ                     w®p	½�tt2k–~w.`    Û,t€                    .ÙÌU�¯F|€Y·½ÑÐÉ®YùÏ7N€    G›|ýö                     ¯ ÁºPìûŽ;ðK\3ÏD0ï·º:5Ë?#çzš)…’˜:   GÊíØýz±lÑØÑeÝ                   ¿c'«æx÷û{qdßƒV¯Ê¿ÛÛäë»º:ôÊŽÇÎõ!ò~vÙûÍtvzò   sÊí¹=_œùOc}´âÙôÚ@                   ¯ÈÖÉéüÏ‰èìú:roÁ®ßžå~§­åk»º:¼”/��êy¿œy[ìºŒòÉõŸ¡h   sÊí¹=_–øû4òX7þ…¼                   
ü}ŒžŸÍáúO3Ý†Mø5èð¹_§èù:îîŽ€†-¦Qó½Lÿ —ÞÏá³ú|÷¾®Ð  <®Û“Öó|k¡mV[íj                   2y>“'­çx[³ýy7à×§Â¢>Æÿ ']ÝÑÐÉ®Y‘ó½;ñ×²¿2ÖéNÞ€  #åJÜ~¼ãÞw�K                   Ìž->ßrzÏ2‹ý<™wàÕ³ÌÍßNÿ ']ÝÑÐÉ®YùÏ:w€  9v[çh°                    ó°k÷v™ðîiïÁ0‡lŽoFÎèèd×,ü•ø    šeš�                    9iÕÌÕºn§7n—tt2k–~IÀ                         tpœ¨÷G@C&¹gŒ€                             Œ´t2k�U                              [h2k›œ                             ½ C&¹ò                              è2k�t                             [x2k–dœ     ë€                       ‹O@C&¹gä¨ÏÀ    ,Ó,Ô€                      vžwG@C&¹gç<éÜ    åÙo�¢À                       ¯?£gtt2k–~GÎôô€:   #åJÜ~·c9t�Rä%9                     *ò6]ÝšåŸ‘ó½Iàœ;Wn†ëÀ  <®Û“Õò¼ïCB3Ž«<zá-5aÝëé                     Wäk»º:ôÊŽÇÎôüÏ…îÆVÓ÷ßKÐ  žWmÉëy¿:WE×z¾§ÎQ[6ÉGè½~€                    Wäk»º:¼”/��éùÿ -çy½9b§ï~‡   <®Û“×¯ÊóøåÜ¿V^r9÷]‡Ñõú                    ŸÈßwtt1h•2��êYEtÎÞÂn   ò»v?bq�;Îò¨Ý#’ìe0                    
<|žÍýÑÐÉ®Yœótè    pi·Ïß`                      7Ë¿Þ·º:5Ë?;—0    	í–:@                      *†Íîèèd×,ü—8    ½s€                      Î÷±îŽ€†MrÌ�                             ièd×:*è                             ¶ðd×>D                             ] †Mss€                             w d×:ª                              ¶Ðd×,ñ�                             –Ž€†MrÏÉWO     ²îÓ_                     vË¹L8ºp¦!ÙÝÎèèd×,üyð°    «užt¦                    ô^tä_·£ÞÆŒû£ !“\³ò>w£§¢.õÃ¡Î;Ð ò¬·­oã�€                  
¼�¬~­9,ÛfÛðiÙ�Í¿ÒŸ•²îèèd×,ü��ê]OËV«Ç¼çcFilœn´ 9åvÜž¼3Y*©£T£Z€                  ~F¶OSçü>ç·—&üîùÜrö½_+]ÝÑÐÉ®Yù;ÔÁòXÛiÍµsŸWáQ-~fHíïaôŸS0Ï+¶äõ|?Îù°ŽŽSÏ ú»                   
ü�lžŸÌyžî¢¯&üïð¥Vÿ SÉ×wtt2k–~GÎôü¯•ðå;ñdõ<�½o‹õøvÂŽoú³´ sÊí¹=_Ä†~vèsUž‡ÑÚ                   Sämdõ<?3ßó=èdßƒ^Ÿ˜û‡“®îèèd×,ü��ê2åJuÑªžÂ<³Šoì¨¶û÷È sÊ]“×Ž^Â]”;jwt                  _—çúýÉëÑàFÏ £&üõø´G××äë»º:ôÊŽÇÍß    2ëpúv€                   >w�?y‹Ó��Øéß‚í™³Ëg|Í·wG@W‚r…ýÃG@    oŸŸ€                   ™©ÛêóÏçBõäÉ>ç}	wG@C‰S)F    V!                     Nh@³¼¯€œãÝšå™      ª²@!Ù ÆR #ØöB”ÜŒºäÃ‘äú s’ 9	ôCŽÎ5öÎŽG²¯“ç#Þw�³®V±	ô ä{òŸ@   #ÝšåŸ’     ò<Ûµm†¨QË%–S±;rš)„sÂël¯O3vÛ+¦�™c²£åÓ¶Þ×žû.�Ve‡§Ÿ±º>d}	OFNœçg<Ù«<ä&†m·Ê¨åÍË½<þUû¥Øö¬÷Ù‚�OÍì/…izýíž'}ãÙlP³²Ñ–7C7rlæ=Û	s]   =ÑÐÉ®Yù     Ï7ÈŽXCè©òòk¶¼ÜÑO¥êxÙôûžEellG×�“Ûtå¢^ÿ Ÿç+úüXÛÎö=§]ytó_«ãÓßKOƒ3úÏ‡«ºªýcÂ]ìyµÓrPœoß·À¦Ê¥?bêä]åq®Ú¨ßämô'/=k<½¯5Öä•·–BïsÆÉ±ž9VË¶Ç6žý£   =ÑÐÉ®Yù      Éç¨óáïÃŸ²»qJìÞ—§âWèú¾fO3\û~žæœ±Í	Õ£ØÇæÆ>ý>Lå–�7gŠú¯Žíþ4uêÓäY^GÑùùÓ_+¿Ôö<|ö{muFësùú´eõ=Ož£_;§KÉ„¢gÏ²6s&ŽïªjUzTGÜòpY}‘óç²uùú=¿ŸË³¶B¨è›^<Úªõ½kÀ  ÷G@C&¹gä€    0r½ÊlvŸ'<ý²Êá\Ýî;××Ä!.N|¦q¿”MV]7Â¼»{(Ymœ¥D»\˜u+ó'é]u1íôÄŸjÅ®xvê§�ç'.æ—yØ`ÉëÚBs•2áY;óò\ŸkO¼ªSñ^œç²J0”l¶`  {£ !“\³ò@        ag@ tç;Ð 8ë�ìÀÎó�è äú è C³     #Ýšå™                              "ÓÐÉ®tUÐ                             9màÉ®|ˆ                             ºšæç                              ï@É®uT                             m É®Yã                              #-šåŸ’®ž    eÊià                    Ýr˜p%táLC³»�ÑÐÉ®Yøóá`    9Véø˜º                    ›}Ç�9WíÅE¨÷±‡£>èèd×,ü��èéè‹½pèsŽõÎéÇD|«'óÒï&8è9ÎõÎKœ�G½9ÞIõÈw�ä¥ÈKœì¹.C¼ï'Ò<ä¥ÈO°àï%(Æ}‡:—9Îòh‘ö`     Gèe�Õ§%›lÃ›~;1ù·úSò¶]ÝšåŸ‘ó½K©âyjÕb÷œìhÍ-“�=·úŽÃ5öK—wËì¼	áÅ¿½Žyz,œ²óhôåŽ‹¨¯Ô·7!RÙrUÑ³<hô»æÝ«F?"üögôuÓçY]¶�O7•ØëÉéèÓÏº=TùÞ®�¾Õ+èÝëyx=K<ú¬‡¡�:SôãçU=[g^L×û3      �A,ž§Ïø:}Ïo.Mø5Ýó¸åíz¾V»»£ !“\³ò>w©ƒä±¶Óšjç>¯Â¢ZüÌ‘ÛÞ×ßM~Ã¬Zõw7½ô˜»/~G‡<µ]G~Â?1Uù¾“OÏQÞgúOåêç)³’®½IåyÑõ4ÏÏ¯ÙÁ‚ìøózõ[“5;ô=ñi‡«åËžô¾bØëÏº¿FßŸ£ÓË*púžÿ “âêç{b)·MðÙ*éÍm^µÐú;@     #_ÐK'§óg»Ÿè«É¿»ü)U¿ÔòuÝÝšåŸ‘ó½?+å|9NüY=O'Fï[Ç¢ý~�°£›§Šh¢^õ~vŠ²}Ûçì¼	ù6¯&¦ZýçŸÌxöè¿MÙ3Ñ|ôjð¡»'�mZ9fïkÊómß¯Õñ|¯rŸ.ú(ªy¶ÙìäóóÛo¹ŸÊ×“V:kú;<nòœ›%î[áSéÝæ×ŸwµƒÄí;ã8Æ6gÙM/_w�Ï;½úË|Ï¡´     ºþŠY=OÌ÷üÏz7à×§À¦>Ç¡äë»º:5Ë?#çzŒ¹R�tj§°�,â›û*-¾mÑÖí†XÎ¿KgšŸ�<¹wV¶1ÏÍS®%–:åT§š«m²¼6W}éÙ{¢R¢½1Í:å	G¼Ð§¼îªh²‡yªuB´{Í6få²Ï([¢š%	òQìeÉC¼ºY¥´Ñ›Ó�     a—ÔO'¯G�>‚Œ›ðk×âÑ__“®îèèd×,ü�›¿@    9æ]?ŸK�èçè"ïG9Þ¹Îó½          s’     X=«–/NtBwc§~¶fÏ-�ó6ÝÝšåŸ�ÃG@    o—“ˆ                    QSÙyüèC^¼™'Ã¼ï¡.èèd×,ÉF    V!X                    É¡ vÎò¾s�tt1h•2�     @˜ #ÉõÊÖ!>�Ê’ŸQä¹É¹Èó¼—PLBŸ@G‰t 1ìÈÕdà˜W)L‡{ÉÊD;ÎÉÈO§+N@   #Ý^	ÊÈ     CÌËn«¥eU9Éé®5JCÎ‡¡)ÏÄ³Ð¯&Ù¹;>x]Ó²Õz\ÉnœØ^‡.§ðÑmyÞ”sÏ{6Y)j†^ö^ttßl§—°”tNÂQÑ‡Û¡§“èèÍÑ•kc£Îò´lÑd3O~HÝ››^¨èó%n•YvëÍÈy½»\»}ÙªíÚ:  ÷G@C™QÙ     xÿ ?jÍ~†
så¿W¯ƒ>.Ñëìñ!<þ‡·àÕm™%žvrÈhõþjYÙYç}¯	ëWäó¹ý�>'yo-¯?Óàñ´S	_(z~ç›ãWé{??Ž|Ù£_“?;·z—bË›±ú/?Î—)úøsº4(½Û(÷3xv_d4S_ÓyÞnŸcÄÉl#ô^^HÎkðzßÎSf[{w%ôüO ôú  ÷G@C&¹gä€    '‘Nw}¬YòÑéjÛäæåqõ÷ù3¯£ìxøìºÈyöë�8uû>$-‚Væõ5ù:5KÌ».?cW‹ÞÅ9Sîãò¯ªvÆôwæñûìú~^L•µz~Lp]èëy§’úØ®ÃO½g‰®³}Z;“'»Ï&vC–Ê¯w]>‡›E¸ö3ç;u:=§OaŽ¿#ŸH  îŽ€†MrÏÉ     k�rŽŠërÙNˆ»Ël§½®Wgä¹b´ûÊ§v~ÎR�rê©ò»ež}„£.ÙÊe	÷‘�R¾‰Ûeq«±•Ô!;$Ï.wš#\ãÙçN0œ�…ü¦}„£5œŒ§\e_]Vr2Œûe<FÎs’§Tk¶Ù  èèd×,ü�      ôÎw�ï8è <ïyÞœtÎw§9ÉtïAÎtè è    �   îŽ€†MrÏÉ     Pì{ÊUÅØdÜ
ëº}ÅVžYt(ºÚr6¬•]�cÛ.B½±ò³Ý±eÓ§76G°¦þÊ=Ç=F5â«v¨£ØäÓ¦êxóè”®² ç{m\åtl²}        îŽ€†MrÏÉ     
ü\Ñª·W¥äà²p¯Þòâ¦\®Z½_�‡¥¯ÄzÕxÜÓO©¿Éí<Œ#Ùö3ú[¼LTòÈú�…D5ò2¢ûy[G½“Î•û’òÎó6Ï{ËÉ½o×C_«âò5ÙTu{^Vx«Ù»Ö°        Gº:5Ë?$     *ùú)§6žßïüïŸé³ÝìøQª»ç<Û½ß=ÏÞ—‹£lü›2ãö÷y*cªº²Ý³�ö·ùù*Ïš=Ÿž¯fxóÒ«5ÕÕÑÒ`ñtXökùù\¾ ò1Y¯Ôó2Ûš6û>(®Ú{é{ž6kå]Ÿ½         Gº:5Ë?$     9ŽžÕ’øÙéâ¯J‰_åj—;)Wn¼©B»tg�ŒÖF�6ãì,¶5Âvòé…hBÓ�·B›/®®J2ªmÕç—y¡›°\ŽŒõ];h…•Ã¶ùz»_›[F¼‘»•`ßºÐ       èèd×,ü�     9ÞBP”øë„&çAÎ€s®w�tÎ¹Ó�8ï;Ã :è!7)]#�F�        Gº:5Ë?$                             {£ !“\¨¯                              rËú5Î0à                             œ€!“\Ü                              è5ÎºÀ                             ,°5Ë<$                             g£ !“\³òQ‡     •ˆG€                      ÙN=ÑÐÉ®YùÜ4t    ùùðè                       r~‡{£ !“\³ò>ný#�    �™u¸};@                      ¯3uÝÑÐÉ®Yù;ÔÑÎUŸe€   9å.ÉëØ                       ùîîŽ€†MSÌ��êQåcÁµÜ   žWmÉëØ                       ùîîŽ€†¥U‘ó½?'á¼ÿ CÐû­à   9åvÜž½€                      W‘²îèè`³°º>w©OÌsÔ»Ö¼   <®Û“×°                       G—ê_Ýš¥�;ÑÑ{Þ€   �•e¸½k@                      áñcîßÝšåŸ�>    •n³Î”À                      áÍ³ÙŸtt2k–~Jºx    —všø                       8ºè÷G@C&¹gä€                             �tt2k–xH                             ÏG@C&¹×X                             – C&¹¸                             Ð2kœaÀ                             ;9 C&¹Q_@                             å—ô2k–~Kœ    Þ€                       ÷G@C&¹gçræ    =¶        F=˜  �r<Ÿ@   :F=˜   éO èèd×,üç›§@    #ƒNÀ       âª[/ŠP”{Û 9ÎôŒfË——ì”'ÈÊ=®VtrNT· öub®[.ªVuÈFÉ9ÎõTm�9c/•_«²0²qŒÎ‘îŽ€†MrÏÈùÞ¦ž¯—tè  +»€       æ,²K‘¾nš7aÅèëJGµå×¦Û£+óˆíç‹éç¢ú¶ø¶úSë“„³×¾Êü^ú6rËi¯VžÕÙáÎN~-ž¦Š!’­å4é³G‹ŸÐ½;cEÛ%_-ç—ãóÐö<|;µS^šã¢ý|îŽ€†MrÏÈùÞ§|I_åùq÷¤Ÿ¯¨  Ï+»@       çŸV}'“f+%ônÝ¹Ü×ê®ë=ÿ F0²Ÿ?•ÝŸò›ë¢ý>ÇÏJR�VSZ(¿~�"ÛìÁÏcèl«³ó«Ï¡"ºµyÒ¯·mÅ’m?CãG<¹Í”åô>—U|·ž•Í¾ŸÏUææº0ºTû?O>èèd×,ü��êyŸ™Uêb‚ÈÇÙýx  žWv€       ÉŠQº~zc9{Ù¬…XrWª�^œ2çúÍq…‘ó¡ØíòüìñKg­çìÉŸ=&ÿ CgƒF�y“÷ýùÕÛ1ã”o�„ælztw—áŽª5}�†ÝxáÌõzÿ I¦¾ZÃãóÑô|QÉ£”n†_cèeÝšåŸ‘ó½LÖ»4SŠ~ïÓØ   ç•Ý        #š™éì9W%<œcMîä­Žú³ŒgÚsFýª®q²èÎÓ–ý²yðzZ3FîÓ*ósÑÐ¯³ŽZ§©–}£-ú‘ç;(ËE]*»
hß¯°åŠqGfŒõ[öäm¿�ÑÐÉ®Yù;ÓºžÆn¡Û,è  >T¶€       8è 8èE#�8è ïG#.€ã§:8è#Þ€ s’éÇ@èèd×,üç›-     Ž]º€                       ÷G@C&¹gä²c»     ³LÀ                       ÷G@C&¹gä©§W@   Ð                        �tt2k–~Jšµw‘                            ]�tt2k–~Jšµ*t                            8·�ÑÐÉ®Yù*jÕÊìè                            r»ÑÐÉ®Yù*jÕÊíf¤    Úcš°                      ³Lª±ÝšåŸ’¦­\…•yÚ,    yý±ê�                     »t×7tt2k–~JšµrQ�×²	:€  y*�©T/˜€                    �•-•ÍÝšåŸ’¦­<…´dõ³üízïô#]°Ù¤   ¯È×W=—ó½m2åœCg¥Ð                    9åweswG@C&¹gä©ËjZ(ÉêüçÀgÓ«MìÏ÷[   ~Fº¹»â|ìÔú6eº¹ûŸYp                    ò»²¹»£ !“\³òTç»�¾Œž¯ƒð–zÔøWfÛ¶ú™   +ò5ÕÏCÄ·ÌÁé<ÙËvßjÀ                    +ò-Û\ÝÑÐÉ®Yù*jÒ®Ú1úðò-ß‡ÈÔõ9¯@  _�²žz¼ì!>s�Ÿf                    ~_—êî®nèèd×,ü•5jä,§ÏßgŒd�   +ÁèU›|€                     9‹Èç¹¶¹»£ !�L¨ì©«W!g1Ò    í‘Å                      ªïôl®nèè
ðNP¾TÕ«•ÛÞp    zç                      %ÞUcº:´J™Jšµr»:                            ®Çtt2k–d©«R§@                           ‹yÝšåŸ’¦­]ä@                            —cÝšåŸ’¦­]à                            cÝšåŸ’¦­Jø                            lçtt2k–~Jšµr¹Ë€    ¸                      cÑÐÉ®Yù*jÕÊíí5ð    ²îSX                      Yr«ÑÐÉ®Yù*jÕÈY_�)€   ôkÃo@                     U»EswG@C&¹gä©«W!e½k@   W“¶ªýC½{Ð                   *Í•ÍÝšåŸ’¦­\…”dõùLãØJ\ÑÐ  _‘®®z>Dv[."�~wîè                    ç•Ý•ÍÝšåŸ’¦­<…´dõ~æ4à³=ÖOî}  _‘®®z?äêäóÂ]Uu^·Ð\                    9åweswG@C&¹gä«Í$´Q“Ôù™óü¯GkÎ×ú_®   +ò5ÕÏO‹‡cÎŸ¢ÇÏ[$>—P                    ‡“=µÍÝšåŸ’åq�o£'­›.lú®Qßfà  _‘®—««³•öÎÂ6ò:$                    G“èn®nèèd×,ü��vÑ‡Ó°Ð  W™ºª}9                      s�O·º¹»£ !“\³òB0²>|:    OÐ†                      Ÿ>�ZêæîŽ€†MrÏÉÂÎÂ<    e5q                      	YÊæîŽ€†MrÏÉ×o@                           •XîŽ€†MrÏÉÕ.€                           #kº:)åÕ<ÉG€                            v\ièù±^m2¡Ðp                            ¸¾CÿÄ               ÿÚ                                                                                                                                         €                          ¨    @             €  
@   aH  
€    ,             D  E  @!aD  ©@@   ,             DÐ (AKB‚bÊ‘aHª@@   ,             H –Q`°¤ K(	I@`¨  ©@€   ,                     °     ¨    @                          P                              @                               X                               …€                             X X                               X                               X                           P,,T¨@Š     J                    JX„ X¢     ¢                     (”Š‘D T¢(‹    ¢Q)                    (–Ä¶Y(”@¢Â-€²   
%                    (”Ke’‰D P"€    ¢,²À                   ‰D¶Y)@Š     
                     ˆ¤¶Y)@Š                           ¥@X@Š                           
(@Š                              @Š                              @Š                              @€                               X                               Š                              @Š                              @Š                              @Š                              @Š     
                        @Š     
                        @J"€€   ¢                       D j,"€€   ¢                       D P     
                        @Š                           P@Š                              @Š                              @Š                              @Š                              @€                               X                               Š                              @Š                              @Š                              @Š                           ¥@X@Š     
                     ˆ°¶Y@Š     
                     ‰lKe’‰D X¢((  ¢(                   ‰lKe’‰D X¢(   
"€                   (”Ke’‰D X¢     ¢                     (ŠKe’‘D T¡     ¢                     )de‘RØ@¢À                          P*T
„ P                              @Š                              @Š     ,RB„±P©PP²¢¢�²„X
% P   ”Ab€”€   @Š     )!`¢,T*)”%¨¢
�
 !H(X @   @Š     €°±`J°T b’� ,¡ Å’Ø (”@XK`¨X¤*–@   @Š         € …@ €Q`À¤,`       @Š                              @Š                              @Š                              @€                               X                               Š                              @Š                              @Š     €                        X      i@                    FV¥@X@Š     
¶€                    &H°¶Y@Š     
¶€ ”   
@¢PŠJ€RT"„      H–Ä¶Y(”@Š"€€  Š¶  ¨  X `      P     H–Ä¶Y(”@Š"€   «j`€° °RX °,P
…‚À ¥      $‰D¶Y(”@Š     
¶€                    $ˆ¤¶Y)@Š    
j€                    FV@¶Y-„ X      Z                    P*T
„ X                               P                              @¢À     QPYb�©IIbˆ¨©Ie	H(‹€XIe%B¡DRTRE!BX,   @J     ¨AH¢(¡,(ŠJ"‚Y*Éj�R(ŠŠ	b’Ê‹*(‹
¤µ    X      *À¨
�d °XY` X  ‰@*@XÁbÀP ²ÀKd   @Š                   À          X                               X       `* * ,��P*`€          @Š     (XBÀ
–H²*Á-@@¨’‚ IEˆ         X      RˆX±@@¨ ¨¤Š…”‹"ˆ¢TT
Š,T€        @Š     �**PK–,,X°YPb¢¢¥”‚ÂË (	QH         X                               X                               X                               XX                             €€                               XP                              X                               X                               X                               X¡     ¢                       D X¢     ¢                       D X¢€   
                        @ "ˆ    ¢                       D j,"     ¢                       D X¢     ¢                       D X                               X                               X                               X                               XP                              X                               …€                             X X                               X                               X                               X              *            P  X¢             "¥%%€°e�,¨T¨ R*
‚¢  ”�@Š R            € ’€   @P    ” „ X¢(   
        R(  @Q(€P"‹ €  „ X¢(   
             `, ¨ À À   X¢                              @Š                              @ŠT                              X¢À                             @Š,                              X¢À                             @Š,                              X¢À                             @Š,                              X¢À@    @                       @Š,R    J€                     
 X¥E @  D                       @ŠP„P   B€€                    
 X¢À@X   D                      
 X¢ÀÊ                           T¢À                             @¢ÂÀ                             @À                             @Š,                              X¢À                             @Š,                              X¢À                             @Š,                              X¢À                             @Š,                              X¢À@    @                       @Š,    D                      
 X¢ÀE   D                      
 X¢ˆJ   D                      
 X¡HA`   D                      
 X     D                      
 X                               X                               X                               X                               X                               X                              ÿÄ               ÿÚ                                                                                                                                                                    Š    P                 Š     Š       P             X  T€P(¨  …   P             Y‚XQA,YRR,(ÅKA
ˆ-    P             ¨ @Š€Y` °A
€ X    %                          	@    %                                                          J                                                               J                               J€                              J€                              J€                              J‚€    ‚€                     ` J‚€    ‚€                     °¨ J‚     *(                   %X @* (   ‚                    X E‚    (–P                   �aPP¨(    (                    
…�QPP¨ X                             J€                              J€                              J€                              J@                             
 J                                                               J€                              J€                              J€                              J€                              J‚€    ‚€                       J‚€    ‚€                       J‚ 
   (                       P 
   (                       PX(    (                       P¨(    (                       P¨                              P¨                              P¨                              P¨                              P                                J                               ¤                               ¨                              P¨                              P¨                              P¨(    (                    
Š�QPP¨(    (                    "Ø J‚ `@ ‚ €                  %X J‚   
 * (                    °X J‚€    ‚€                     ¨X J‚€    ‚€                     ¤¨ @                              PX                              P¨                              P¨     (     %      RPY`(Š  €    J€      T XX °@ ,€,, *À % X       P¨      E@Š@ ¨T Â XÂÀ *   Xa` 
    J€         ”                   P¨                              P¨                              P¨                              P                                J                               ¤                               ¨                              P¨                              P¨     €                    @  P¨(    d                     h¨¨ J‚€    „€     `,Ëa`¤°°        K"Ø J‚ `  
„ŠP"„PR(  E(	@  K      K%X J‚     XH²„P!DP*(ŠP"’ˆ  E°      ´°X J‚€    „€                    J…�aPP¨(    H                    T¤¨ J€     @                    €  P¨                              PX                              P      %   ” "€ % €   P Š %  Š    P¨     €°€`‹  ¨P°*@°*  ,, , ¨P   J€     X X  ©H* °‘H@¨* 
€*TX°À
E   P¨                              P¨                              P¨            (                 J€      *À¢ ¨ )` 
�``@        P¨     `, °*€�  °*`° °
         J€                   "€”         J€                              J€                              J€                              J                               J                               ¤                               ¨                              P¨                              P¨                              P¨(    (                       P¨(    (                       P¨)
    ‚€                       @*
    ‚€                       @*(    ‚€                       J‚€    ‚€                       J€                              J€                              J€                              J€                              J@                             
 J                               ¢                             @¨                              P¨                              P¨                              P¨(                             J‚€    €         %   P E  % ( I@ J‚‚(           À P` T   `�€
P¨* (   €         (@TPDÅ@
   �€P¨* P   €                        P¨(                             J€                              J€                              J€                              J€                              J€                              J€                              J€                              J€                              J€                           J€E    X                       J‚PT    €                     €P¨ T                           J€                           J€    P                      €P¨                              P                               E€                              J€                              J€                              J€                              J€                              J€                              J€                              J€                              J€                           J€                           J€@   P                      €P¨ T@                         J€                           J€                           J€                              J€                              J€                              J€                              J€                              JŠ                            ÅÿÄ (       0@Pp `�ÿÚ   ÿ ôbßk,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÆ»h_ê›Ã=·Ûú}v-Û_úýì}vd=ô/äon×À„.ú2«ýÅ­üb4ñ‡6W–‹ÁzõëÁ^½zõë×¯^½zõë×¯^½zõë×¯^¼Â=‡ÿ _Û¯NÉ¡—ï¡tïÌÆÆ#!ì3 íÔØ}}Þ÷=ÎvÇ¾áè«‚Íl8-˜îíë—~]=šAö	‘vÑ‘v¡Èæº9î{œáu×m	D>§yžW=Êçëy¼Á¼Î›êt±â†6>§@|ž>àîñvWë@ðÞÎ�zü=ŽfuÛ}Fg~�.úßò;ï¢?\>Ç/X&Š`?õÂÃB Eß8îOWÑóýNþ§O[—«ÓÕ$cÒ4¥ý`úÛõõë‹Ø­ÓÚ²/[§ªWÓ£Ã¾°y¬vö!°ÂTgÌtõKzg=n·oX‘ó=ûœáèòõ÷ë×°\~¸}­úý½^>·/K™Óf{çÜ¦½ÛóõoõõpPðw¼ã¦�€%àó‚dG;‡¯[~×_S—«û®Þ¿[^ÑCšßý�á<ôú{ž¯�îrü‹—ä½%éù'OÉ<_h¸ÿ �s× àHD°úáa ƒc.rÃõwÀSõ×!h>v½Pñ("šç½õïË¯^ûïÈe8÷,œyºÖ5�Îút.Ù}{ºƒ‘ž‚×Ì	½•p†9õÓ±Ž]8æÊ‡‡NþgCáŒw¶ì=ôs¹®]<±ðÞðx�áüÐô"9�¶`fšßN¼FÁ‹—_@ú†ðžzÚ÷‹ñ.¢trÿ Šè–ÿ �o;„Þ„èŽ‰`?õæ9ž‡¼/À×ù]¼Qy:ò·äóó	•3ç—ó»��ÛÍïær  ~/$±$L•$HŸ,kƒ	Ž:ÞÇÏ�9%¿¯�¿,8¼²RÜ¼Á‘ýyŸ4^oo8·›ÓÅåãðòöO©#|‚†KóÃæqòºùÃóP?3·š\�œG˜wƒÀ|rßq& 8DãkÆ“×ÅãäoË“ÏÇóÊ_ö<7„ð×CñþŒuük—ã]çøÈ¿#áçüŽà8_±×òóx–'€ÿ ×ïCá²€,l:ç¾[-¢Û/¢Áç¾zÁ‹u&<ö_\5Ì\»“àDÁkA×ÀùŒ¶Šƒ‹wÎ=ðÙ]Ù`ðØ4†1qQùü‰ï…mqgRûóËðØF\%µË|«A²½HòóÁËàA¾:ñ0çÏzp–†¶¸o†‹C^°yýÃxPoÞµ­æµ¼O�I$’I$’I$’I$’I$’I$“c=•©¢Æ4SAÿ Ø§Þ‰ÿ (Ÿ)ÿ 	÷§ý7éDùOøDþ.ðç-t	‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±¾ûÂœuþ«Ø"áÌ¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T¨¡ú¯_Ž_ïÝ~9|[ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²ë¨Eôõøå›Î‚Ö"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""&ó˜µôõøå‚Î˜föù$’I$’I$’I$’I$’I$’I$’I$’I$’I$“BøØ¤’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$“BøØ¤’I$‘úÞoo’I$’M®x§¯Ç,›ßnû1,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,³s3Ècc3Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²ÏÄÈÐ]LÍ,²Ë.Œpì½ûlÄ²Í,³r3ÌBÀ`~ž¿°X<ußm—+N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téŒŸnEEßz"”êS§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:}Jl%öca"›-¸è¦É™.Wxke‹Óo˜tW©A¾Å€Àý=~9`°xë‚ÂºÞúÑÝ×m	\®Öÿ –<9…0ÆqÎX`Þ½~5Õûê3|»ëãý³¶Ã9Ç¿@ðý’Þ¹SšÙÜ/ðc	gaœ?ÐÙcÄÍtÎØ[€Àý=s{æ1buÍá\:cÒ÷Aù$-ù/s§¼/É9~AÓò2>¸ü¡áÌ)†3†=ã[ôÈ{:÷?z?pÇ¹æ{ºÿ �öÎø[ç�h|¹ò"O±Q�Âÿ 0–ÑžA$2Þ`�ð¶�úzçM€[¶ë›ÂÙí‹×è‘^&O~ÀG?`?Gñƒ7ü¡áÌ)†3†?"æ2ü�¯�á®^|íÿ �öÎø[ç�g—�Ë\8wüÂYßF¶ëçk¦wÂØ,éë›>[ä :æð®zE½O§ƒËÀéãz~q~1Æ‡ø·‰ãðò‡‡0¦ÎÏ^‰ø!ðEú/Ñþƒ‡ˆW�øöödÀº–Ã9Ã9ëÑ) ^ä"A;…þa,í£ (üðôÎø[€Àý=~9`°xë‚Â¢»�åç�b½|py@ò9ÙPqÖÕUUUUUUUUUUUUF#›)†3Žøïz�±¶6·Xªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª»“&�ð\3œwÇ}@cÏýi?˜Nì¿ÁŒ%±á¢ð ±^}wÛe°XÓ×ã–�Îšî&®Ý»ví»—.Ý»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÑË°EœÎ]»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ£:hÈ´O� ÷÷ÌåÛ–®]íÜ¨Ð8÷º#2ë¾�ô9­ð°§¯Ç,›×^;)V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕæT º—ÙJµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«We6G^¡ÐƒÐµZµjÕª¼¹'^B+V­Zµjó,‹�úzürÁ`ð?(ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ðˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ðˆˆˆ‰òˆˆˆ‰‚À`~ž¿°YÓ5·9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îs�½óÀý=~9fð`cÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œ`¯§¯Ç/�é­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµº×Ó×ã—ÆÅ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I&…ôõøå›Îƒrÿ ¶«¹�_O_ŽX,é�Ò&*ªªªªªªªªªªªªªªªªªª®"bªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªâ\ð?O_ŽX,7¾½¶nÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµÌÐ-õ1³v­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµkFùÅ€Àý=~9`°xé¾ãâV•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R!€°ûYÌ�*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©RèL9ÀBÀ`~ž¿°X<uÁaP¢""""""""""""""""""'4SgqÐúk¾‡¯ùMëc–I5±]õÐ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰Ø=´[€Àý=~9`°xë›Â¹Û¸ý€z¢õÿ n/p>ßíuìp3üÁáÌ)†3†~‰ž^™sÂôéÔ§¿H¹®ý{zBôuêÒªcÔ×¦_Ð-Óü«¶wÂØ,éë›ß1ˆcs®og¸`ß£ÏÙ5ù/|~Ÿ?O§¾[Ýü|à7ü±áÌ)†3†s×¢XÇF»	¾†¹o7±�›° ê-˜,Å¸öóL‡å=³¾Á`0?O\é°bÖÁ�sx[=‚Ý¼S^'Ÿãàðà™üxŸ�á¿–<9…0ÆpÎ8cŸ?§•¿,>H¼~~P¼âüw×©Myß­–/§ŸÔ‡_+Ï(”of:ôè[€Àý=saçË|„ ç\Îœ¶D~füPy:óèÍ“Ç‡ó‡0¦Î9Ç7­óß
úá¾ã²ã*�/®0Ã¾åø‡ŸùF÷ß¹³œºÁ`0?O_ŽX,:ë¶‹š¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—s·R¡ï­‘»—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.éÃ�:`‹�úzürÁ`ð9½vá²ñEQEQEQEQEQEQEQEQEQE2Ü€0ö-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¾#'¯<¹0XÓ×ã–�øÞ™qÇqÇqÇqÇqÇqÇqÇqÇqÇqè?qÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇ à°§¯Ç,tÀíUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUE¾x§¯Ç,ÞtSýµÌúzürøØcŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãŽ8ãÐ~ž¿¾7·9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9ÎsœçkO_ŽY¼Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{ÞëéëñË�3ZkZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ»×<Ó×ã–�ø]šµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ ÀE½�¶ÍZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­hÐ;k{ØûÚµjÕ«A2˜>‚3jÕ«V­¾¶,éëñËƒÀàöc¨9U«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­Z¢-­—éÔ}z ½ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V¨ËòéÄ]…Ð`/VµjµFÝÏ@®ËoŽ‹Õ~câ!`0?O_ŽX,:àôWœqÇ{ƒqÆÈãŽ8ã�`lqÇqÇqÇqÇcæl0ÆrqÇq±‘ÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqöçÔ%°Îr wî/G‘î{aÐø3„À-3ÓÑ,{ˆúƒ¨K`°§¯Ç,�sxWÓgv{Gm?ÇÒ	ý·Ð÷íx˜°›Íî¾˜½Ž>�O]½Ï¿Ú<9…0ÆpÎ;ìcöA=³ƒôºzÀöuêÒ«¯_�Íoüo¶wÂØg8f·ë™²Æä3¸_àÆÃB9×|AžoQç|-‚À`~ž¿°X<uÍálõÍööÌ~J_òPþIßÜß¼Êù'OÊ÷ù1OS�ÿ CÞåù'ïÁìü—¯äý@û;üƒÿ ¥ä>'©È_`ðæÃÃ¿\Þ�Ñëëwõuè Íýúc?ÌçŽo€¿Æûg|-†s‡Çµ¢EõæóæKgp¿ÁŒ%†Bc˜×Ÿœ™ß`°§¯Ç,�sx[=¾#ò½/$�’cÌãæò¸yBò{ù%<®e@`Ù}yü	õæl‘_/ŸŸ×ÏÙ ù¼<�¡}}ƒÃ˜Sg½r�)Ø�.ž_+~X¼ðù|ü}yyÿ î>Â-†s†^±Ra±±‘Ã¸_àÆÎøs-ïÎ×Lï…°XÓ×ã–�Î¹¼+†ëÌ3âpñ:x�ñúxaü^0¼ x=¼~ÿ åàôðuáñ¾~èÿ F?Ç¹ø!ò8yàØ<9…0ÆpÎ9Ø¿ëEçkËßš;~x¼ÐyÚ'Pµ¯ñ®�R¸g8g-.`“J”,¸_àÆÎº9È!×2<úç|-‚À`~ž¹½ó†1:çL+ÞÄóÏ<óÏ<óÏ4óÏ<óÏ<óÏ=‹,X±bÅ‹,Xƒ=
èÆ€.&,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ�8w·r¸[FuÌ\L¸õ5®æûø3…;o¿moˆ9rS[BÀ`~ž¹Ó`Å­ƒ£5§½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{ö qãÏ {pÖ=ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ!uãH¡>@ê¼u·½ïsòC˜ç9ÎÞùqä`0?O\Øyòß! ?øÁAAAAAAAAAå­`¹ÁAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW®y½œAkŽƒ›øÁA yëBÀ`~ž¿°X<õ»ØûZÑ€�WáUW}5ÿ …UÅUØ÷Ô#\_…_•{·Ð#ÅøI‚5]ï}t%ø\õ×[U\Þ÷Ó]uµøUUU\ÞÞ«ðªªª»ºÊ‹¦ºï¨z`‡³í­®.o{ë¡(º‡»÷Ö]˜×awqw}o{p÷Ð¶)t%UU_…\Ø¤|º‡¾Áè¸ª¿Íôõøå‚Áà­ê—KzWõèsïØ×ì?dÛ7Ðè‡ÑÑÛÀ5¾½hþ�·C—÷èõôÃè ø}žý�#=�oÓ¤¶„t^ˆ½.Mœ/é^×¡Ë¿c&}>~‡3áôèoÑð¢‚=¿GGŒúEOk°ÏèþýFŒ™ééóõ8úô8�n‡À|gÂ|~€}zN÷ïû-zÏk¯S�<3á>?Göaôè‹Ðß¡ÀèL‹°Žl÷sÛôÅé–ôù8hgœÑðàñzBô9ú:ôz%=1žëìÖþ'»�çétô‹ú<t;Èçn¦Ï–:Ý=ú\=Ÿ /Gö`ô{‘Ýõêx>ˆMö7£�}ú`ôzz?Èø}ß£|'ùuþ`°§¯Ç,ýnõèrçÀß çCÜNíèuéÚß#W‡ß©ÞFöwö>y®Ý{÷¢]£=:öÙB9õÓg'óûzD0ôäsg{Ñ�Ž½LN‡ùóûïÜ\ºÀlÜúïÔß3¡?ÔõÞgztópÏ^½ölHõ=�lÀÏù¦{u1Ü&»çèZÁóL÷ÎÛœ¿~}�w×A�˜~ûèÖûë¨’0dF�Ðß}ãy�Sâ½�™Ñ½™¸.óˆç†û–ïÔïN¥õÈ ÃÁç>…Ds·žd[=ÌÂg{fè‘ÉÞý�yçGØ×{EÎ÷9h}‡ÖèË8GÐîŽè×d;„_Ëôõøå‚Áà®7Ì»þo<‘sE»ýw??õâóûy…üþ¾oêüâ&8w+¢$I�ŸR†ÊkÏæBŸ2#Ü³¼°-²" 25éè�2E9ú%ê�Ìãç.|°Êó 2#%"ß¯ìG‘…ùùûóCç©ÆKõ*ˆ*c�Rœ‰óÅæùäÌƒ°S© ùýAó¼òcâ` Š+Ì¹¢Úà2š%ËÏ d”<Ê„�~W<Mù òÁçˆˆ	„‘bÇtâ[#J†Êuà¼‰tó9yý¼ýùÀó�ãƒÌ~E»q.Ä¸‘äEÉ×3¼i�8€—r<Î>2{ê@�ò=œÀÚ+úñÙùœ¼ýùáóÂDÇš;DH˜8ïùbÀ`~ž¿°X<õÂ;ã Šè�9–øl�KV®"�'²ÕÀ\ÆL$ÁÃaß•Ñ”ôTEÎ×”H¦ø×®"”iè•Pqè_Djh�9tá²:("ƒ /3‰
¢"";óø”Ù-e…ÈDÂSEõÄ\öT%ö\D¹–ïÇõÜÈˆˆÈó
ya#Ì¶À"Û&šçÐ°Iˆ˜Ièµ~Å7æq"2Ý. µZÛ+¢ºàCä2 &2�&"›$sÏãå$"a&"¯	=€D‚PdÂLdél¦‰€¤}
�‰„ž‹ì¸‰„ž‹WÙaæO¯#žqO,F¨‰–É¥]€EiT¤ÀòÅ€Àý=~9`°xü`�ƒü$fµñ½G­}ûÓ~7­ñ$û7¦&õµ÷ ¹ëŽµö#SïÞ·Ä<µ¯ê…€Àý=~9`³¦jªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª-óÀý=~9fó Ÿí¨Þ`×Ó×ã—ÆÃqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇƒôõøåñ½¹Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç;[úzürÍàÆ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þð_O_ŽX,éšÓZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­Þ¹à~ž¿°X<ÀúìÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­Zµh-ï¡�ž½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^Ñîf5½ì}íZµjÕ ™LAµjÕ«V�ß[ôõøå‚Áàp{1ÔªÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­QÖËôì3¦å{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï”‘¾ì.ƒzµ«Uª0è¦z v[|t^¨Ëó�úzürÁ`ð9×¢¼ãŽ8ãØ4ãŽ6GqÇ{cŽ=�ØãŽ6GqÆ>fÀSìÆs µ­è,c7­iŒcÍ‡y­1›h;Ö´Æ1ŒÞµ¦1Œc[‰šÃšÓ°¹\®3zv.Ä·4iÊåv‚Æ3x»q›Óµ­ƒ{Ð¶=ÚÞÄ`³BÐX-è[Þ„ÝæÅ¡ozƒ°ìzµŒc7›E 1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ3 áM™ÎAäýÅèò=Ïl:ßp˜£zz%�qPu	lôõøå‚Áàs®o
àúlîÏhí£øúA?£–úý¯6b9£‚=×Ó±ÇÒ	ë»>gÓëù=âþß3»;£ƒ>/_—¡£»6¡ì-œÂ˜o;à0ñŽ>€ïÐ× /G·¤_Ðç×§Qú!ô´x^�_P^¹oS—n�;	ýïépõx˜Ævþý‡Áè‡Ð @G…é~Ðo§¥ÏÔäg©ž¾‡C™Ýu8l^ =.¾ }q{Dý?Ø=¿S~¨}~¾¹OX~—?O�c†wê×áêŒö½Rþˆƒ¯N§=@z¢õŠ¿Üöý2Fû÷5êòõ»z õ÷ëÕëì�ôuÔ÷¡Ï×áéoÐ9ê—õ;z|=Pú]ýqûýŽ¾Á_L'F|Ñþ^˜ý"¾–½Âô;ú"ôI�ä/ìzg'†s†k~¹‘,`�þC;…þa,4#�wÄæõwÂØ,éëñËƒÀç\ÞÏ\ßolÇä¥ÿ %ä�ýÍûÁü ’tü¯“õ8ô=î_’~üÁ¿Ézþ@_Ô³¿È?ú_þ‡·¯ÐÞ�òõþF?Èµù&½“—s�²cßåù›îpês
a¼ï�ÏW7Ðz<½]0wÏô<þž�cF€oö]=K[nžaƒÝ{w®fÌtâ?,Áž‡�Ñ´#»>âô‚·®D·bÛ>k¡²Ý‚�®„ÍˆŸ¡ÌñÓ)Çgu8º6?P¹®šÙm€À¹œ¸W±SfzvÎ¼Ë‹C3°žáê•ôŸ>l·Aç#½}BÆúì—C&O¯ah\Ý:uò»èç£Ð}ùzõ:uå×]zG:uÞ÷ß[-Û¿¤SÑí…Š›:uôÃëÓ+Ë©"z/ý—Lá„ðÎpøö´H¾¼Þ|Élîø1„°ÈLs :óó�Ó;álôõøå‚Áàs®og·Ä~W¥ä‘òLyœ|ÃžW(^O$§•Ì¨/¯?�>¼Í’+åóóúùû$7�‘úóD¸ùüü~þU y¾g“éy["_�²`#â�&˜Sç|zº=çò¹ù¦|’þY>ÆºÏß˜cÎ×—ÇÌyåpÇ]1æ€�@ùÅÁÔÁÂœ<íy½üî¥9•èS‰>¾A/�ŸÇ‘ò# X‡ë	�×T¡b›óÄW‘C%Y¿7õÂóyáÀú7çòòç!À‰î<ø­0—ìO§œ_Ì%ç÷ó�xÜ<ÞÄ¶@~oœ¸+Ô‰ò<ÀŸØ®üñù„<à>D^`ü¾~`Hh†Èl˜¼Ðéçóòÿ ]²=üâžw›.k•^Þn¼Îo–XþŠè¿ö]D\DðÎpÀëÖ*L6628wüÂYß`E½ùÚé�ð¶�úzürÁ`ð9×7…pÁ}y†|N'O>?O?�ëÆ€·ƒÏÂãü¼ž¼!~7ÏÁýèÇø÷?^8ü^Ÿ�òðäÅãÜ¼.>i�,^<.ž/ ¿› Â˜o;à0Ùn^xJ�ÏŸ¢»&"#$@)TDuæèŽ‰¯R@%Ì¨Šì€Il¯Rz$<$kt%×Êååôò¸y»"5Äe…çó#®æ�K ˆyôã²'²#¿>†üÝùáó‚_e†DFC™óì[^vÉh†Éþ¿~x<þ|v–¨"!¿7õáó¹p:’ß‘	!yüŠhKkÏ ùÛ"$"<D@@Dµç‹Ïž¢à??D7æþ¸>w>&¸p%Ì?Øtè`É“Ã9Ã9hÙsšT¡`Âÿ 0–uÑÎA¹‘ç×;álôõøå‚Áàs®tÂ½ìO<óÏ<óÏ<óO<óÏ<óÏ<óÍ<óÏ<óÏ<óØƒ=
èÖŒè67I$’I#�$’I$’ln’I$“cvºI$Ž{´9$’Yd’Ye’Ie’I$’I$’Id’I%’I$’I$–Ye’I$’Yd’Id’I%–I$’I$’I$’I$’Y$’I%ØÝ$²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ê.¦L~`
hÎ¹‹‰�w¡µÜßbßp§m÷í­ñ.Cêc ‹hXÓ×ã–�ÁhÇiï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þýˆxóêd¶N¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*TÙAùÁòˆùü�Ô=xëo{Þæä†91Îs�½òãÈ"À`~ž¿°X<À�¾0AAAAAAAAAA ykX.{/ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V«¢Áç›Ð¹ÁA¸è9°ïŒAž´,éë›>»ê!‡úÝï}$×Eÿ …UUùU\Ø·Ó]uµÍì]ÃßBØ¥Ð•UUpBÙ�w×]	Wc×]lC×EÍ‹}u×[\õÓc×EÅ@ôøUIõ×BU_…UØ¤—B_•UUÿ …UÍ�}CÑWÒÀz(º¢ªªª¨ºÙ×pô\]ô×}4%]ŽP�{ß]}5ÍŠ]áw±v×mtU_•_ä�úzçM ;´ëzlÑ­ú|½ z9d={	á /C‘ÙvdFÅèð½FŒ™¦S� ?C‰ÞýŒŸ*wGºz³áèÐ ?Gö`>#üŽîcÑåéóôè øÏõô9ú<÷ë£¡ôy™6p~ŸO™ñz�3ËÓ¡Ìþ½¡ÛÐ/èríØÎ½3éƒÑ×§ÇÐý…þg >½·è_ÎÝzzô¹ú ?£A0.£=£¢ô/þÇ‘‘ö²3ºô6x>†»š>?L¿§£ÿ ±æ`ù­,wgÌz=0žß£~–½-ý€zÿ gÏÒà^†�Ðì|±ðõî`>‡#ÃìcÑß¨[ÒÙàúš=ÇÒè— @G†|^�c’õ<ýý¾ =^ž½ ú?Ç¾ÅØØ}Ÿâc[þ0°§®o\À !þ´Zôøì:ûñ<œ;ïÌf�€ø{•é/C]Nt5£â=æ=ƒÖ�³?æ™çÏ¾Œ‹bûôô9ß}&;óŽ¬ç½v}›æk¨¬ù}N�·~c#×ÑÖÂÞÏy†=¨»„Æ»ÝåØ×B†‰�Õ4º9Ø\Ç½óí¾Öüíóß£Ø}íùØ.^—.z“Fø�àk¿aõnçy�B=MwÎÆôo§ \á>žˆvk¡îg|ÞÞ€ ›çÔÆ]Þ	½ôK›=çõ·¼æ0˜ž÷.‡:4X^‡Y‹tŽ‡`úŸ,p¯_K`è# 1³9¡ïåëÐùÎGD`b Â-wžga�î#Lyá¿Œ,éëñËƒÀÿ \s–È÷'Sdyp-Äámr2O—œ\€
Bl¸Kt#¯;õ¾iC<S™#x¼ß<˜¹œá¢Z& $cÏ™ÇÏ
ˆõ!çëÄÁ0ývÉÑ	-ð—ç—5ÈD@H©sœ* ‘Ÿ;^oœPï•ÑùÕ?_Ì·R||Âœý"`ó¨¯2!²{+ÏÏ.=Oð^~yÛ	Ò´z•Ñ•%Ã·…úpê@¿�Ì‰bÇ8tá¢c /4·žO�âÁ'HÇ›ËÎ \ï>Åƒçó/[DLy¡óyùú!²=Èè‡š[Ñ-²@ó÷çì§ë¹ìH¿šXJò |¸œ+Ì˜Èöóyå¸z´W^vÈSÑ qíç$>G|þ^pÉÒä@D¶R™r<zo•¦P�^Çôõøå‚Áà®``’@’.…ôHDBD% �¡@‘Ù-Ù.eÅÏeB_eÄK™móèL„P$ô_eÄL$ôZ¸‹�2›ä"A%TDÂLDÂN¨Kï•hÈ|ªh¸‹l—2ãå²!)²»%¢›%¢•AÇ§ÙJ)²µ)h¯BÜ8–É¨9 ¹@"a("\Êo˜ÉÒÙ “Ñpñ‘Ñ:TÂLúpÑXV—>=8ìŽŠl�JÀ"´‚V½q¡Ï‡BôBSeiT¥¢µCÈ\4Zsp•€EL<ºÑ@’M«¢ÚçÐ Iˆžˆè®Êì�Il¶ÊòçÐ°I¸Cüq`0?O_ŽX,ûÇkô¿*åv·›Þ…ð®Ð¾¥ÿ …Íï}$ÐÕÚßÎÅ¡Âÿ ÎÅšÎ÷$šý;[ÿ ¥v·±kvöïêQº×òÅ€Àý=~9`°xëw±öÑ­™Ñ­šÑ½›]cF¶l&º›×¡Ë°�ÐŒèÖÍèèØtíÓÐ×¥ÌîÍ Ø;öêa8ÝÌ�Òåè€ÖÍ¸ºÖŒìÝ�œèw™ûz5³c:ÜÇÔFÎóôƒèò<#`6û�v=ÇÐ	�š´3Ÿ°	½Ù�žÞ�Á5®‚íc©ž§µé3¾Ö,lÞ�t6?C�­}ôkf‚h]{ß¥ÄðÍ Øo �ÐŒ„È�hÞÍ ËÆgF¶lg4{™�uÖÿ ð‚À`~ž¿°X<õ½DtØô=x^�NƒÑâ|Ož«£Ú?Ôñ~¼ú9Ì÷oH ýœžž‘ýúé±ó5pGüófúv9ÌÙ#�ÅÓŸ]z"õ|ã¦LÐŽlîý�ò4?OŸ§tfÉö(!‡ÒáÃ��r3tGüó�û?Ðß.áôvw~ŽŒ‹¨Ns3Ðî�Ñì`�H±ƒ§wë~Ç¡€tóÄpÐýmz·ïìïc>qÐõ8röýÆÃÔ÷MôâcgDx‰Þ�Œ�æ·¥ÏÕ¡ûúÄ}Ž_Ùý›Ñž^�C\·ÿ „ôõøå‚Áà­ï£Ü‚œzrØ9sëÃÎç°z\ù–,LÁHJòØLï\ûpäXE¹Ùn¥|ÒÂäd¿2½Jh·RÞo3 èW™2|OqÙp4ODüÂæù3§=óÑ^dúÙa•äS‘>¥q+Ô;?Ï�åz“«Ð·›Ï°ä\$ú”×-*PÉhy‡§qÑnœDL¡R|}BÛ%À˜Š ©^™~„¹’Ñ}ð.Lá<°ts�¸ñ&¼9žàÂ'²½å×F7^ /‚Íó‹‘ž[áÀŸR�+Ôv¸_øA`0?O_ŽX,úÑk¹@ùãóÅæôòøy¦‘%¾]üày|É�üÞ^w^<Þ>hüÀybóAçl€¼Þ·Ë¡ :ó¸‘Ñ@ëÂ€JŽüÎ:qŸ¢óAçè ‰oÏš<$ÄN�2Á^!,"¢'@~w"ãÓÏ�¢‚#¿4xt'¿<>xüðù£óõåþ·Ÿ�Ë�b¿®	‘Ñ\;ß�¯?§ž8ÆL$CÇ¹ ùÁ%T<»	”Ùùüˆvà?7�˜?,^Y¿<¯™ÏÌàF.Äç�‰t$2‰óçÿ „ôõøå‚Áà®DM‡|´q<DDDØbÐQ1á1>Q1>>1a‹AM€e€[@LDD ð¢À`~ž¿°YÓ¿öñožéëñË7�¬UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]ç0ëéëñËàAß(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢‹\‚§¯Ç/•UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUúºürø÷ÖI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$×PéëñË�7­5­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÝëžÃôõøå‚Áà~=öžyçžyçžyçžyçžyçžyçžyçžyçžyçžyÃ×[ÁtžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyÃÓ€Àý=~9`°xÌwÖØÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒØAÛ�N‚íßXÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒÞqïÌBÀ`~ž¿°X<uÎ˜W…zõëÁ^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯\eÌó+³ x—¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zõë×¯^½zý‹Œ%ö,éëñËƒÀç\ÞÍŠMõêk^�.ŸÐaL1œ3�ù÷lï…°XÓ×ã–Å±ì9×7…pñ±{f?#ïù	KÎôÃ˜Sgãþ}Û;álôõÁŸmöØÁ�sx[=Ü6h}	‘"OÌ×ôÃ˜Sgãþ}Û}¶[€Àý=pa-ò`3®o
áò†ÿ áøÉŸ’_—ôÃ˜Sgãþz1›51\ôõøç¡zuÁì¯M�zÖ•Úé$’I$’I$’I$’I$’I$’I$’I$’H>†ÆSg!qé$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’©³†\ôõøå‚Áàpz1ÈmZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ¡Ö‹óê¼ÀbÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«C3Ü[àL¯�úzürÁ`ð?å²µjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­Pw¡ñÙZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÔ§¢|økBÀ`~ž¿°X<û€°§¯Ç,tÖ¶ç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îs·¾zÓ×ã—ÀÁ¾QÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇ¹ O_Ž_(ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰õuøåð!o¬²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë®¡Ó×ã–o:Xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ›Îb×Ó×ã–:`u›Ûä’I$’I$’I$’I$’I$’I$’I$’I$’I$’MýZç�úzürÁ`ð9½öï³Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë73<‡ÿ �Øæ×Moù+ñ½ï®»h_Ò.·ñ±Í®šßówµøÞÅ×]´/´XÓ×ã–�Î»í²åiÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�:téÓ§N�1“íÈ¨µÿ €éÓ©‰ß�ml]Ñw×Cß]t}ÕUUU_¡|‹zÞ³{íÜ]¥â`Ø¦Ð„=uØõ×}6d=õµUUUØ´5ÍˆFcBUøUøÞaÞuéÔÄ€1Ç¶Ç³!ï¡b¨ºë¸D«±=W{mEUøUøÃ½fðÇs�D±­}´h=C×UØ´5øôõøå‚Áàs®
ëª.‚2Aœïå�aL×÷ûÃCv=‡€´?CÐ%éõô:zÜ½>ž©c'ÏsôËú¡ô·ékÑß¦@~�}úcõ‹ú:7Ï®5�ÎÂê$Ð·¢Ã7ß~·æ½N§oP¿£ÜÏoD¿©ÏÔß¤H^�=!zôÅèöõ8ú¼Î„É£=Ïp;ÏÑ×¥û ¶?Cö|k{Á`0[40‡}7ß¡Þ>�CfÇé~ÌÇ£Äø=  ?P>®½>>‡Nç€çC^–ý0z63¢ôøž °xÖ=—óñ}a:[Òß§ÛÒåèëÔëêqõ7éð8‹�úzürÁ`ð9×7…pÏsÿ /~Áÿ ÈEù'É
þAÓò þCËÝ+ßùCÃ˜S5ýø°Ö��9ƒ\ó·O_¹CC9Ô|Œd7êoŸ4×M÷àñz<Îr^|úq<@ZÁæ°9ß7�ƒÀÂùë˜^'ûõçØ]|Ü7¾™®@»ÎÏhÏ_K‘îfGÏ˜n�0{`Îý´b]÷æ{GÌæcÍ1Ç{Á`0xgAÁó¹áìæx\ßSýhÀŒÇ3 èpèN§S¾i±të¾£²»í£œO™>DLšÍáí<}hyèf€c¾Ï„Ð�èôÁê3ÞAžôõøå‚Áàs®og¹ßØô‰ú�õŒöåÎ½��Ùß<î_ÊÂ™¯ï÷†yãÄ"ü�óíæuò(ìŽ¼þe	p6@·—ßÏ¥;’ãÃõ»ò¸ù¥H™&c�ä¹àóXèüÂ=Œ:çÏÐ*/~fÊÎÙ?<§rüüÁy»óÌ1•äW§“ÇÌ/ç˜Š˜ãä8[¹j|<Þ„SõÃ-Ø©~>i^AÞ›ÑžZÛ„"ü�r*ÃóúnõæïÌÑq2D¿™úþÞoœCEÎ~^n¼þ¤õçˆ§R¼ø�*T<k7‡B>q� õèð1ùƒò¹y½| y`ó‡ç‹ÌòÉñ°§¯Ç,�sx[=r‡¿ãø¶ÿ ãøî¼~Ç:~9Ëñ¯'ÆàåaL×þ Aè[e@WŸ!óÑq– ùû" ã¾æ.;."=¼î^P	ˆI‡‡BÆ•!Ì8-kZÍë§•Ñ^EØ.ÆO~xHˆ‡"›ä;çB‚óúy|<í’Ñ•ßÅç..}	 †‹¾ÈSŸÛËáåñ/­o ë…ªó*}9€	 ¼îžQ7Dê–ˆ‹Ï	
b#Ìž�Ô®¼ð”®2!$2|Ðy\	„8-ZøíÏ¡0“áÁ½JëÏÑQ	=”¡¢›'²‹kBÀ`~ž¿°X<uÁaQ;'¢”´V®¸o†Ê¨yëjªªªªªªªªªªªª£Í”ÍàQ©÷l:üìÊ|µ©ö£5¯øÞ£Ö¾�‡AùMkáŸòŒÖ¿ƒ½3çzO–³ZûE€Àý=~9`°xé£âoG®Ý»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»víÛ·nÝ»vèŽŒe�þ†,éëñËƒÀæôg–‹„­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«Ì¨þ†,éëñËƒÀüuÀh!DDDDDDDDDDDDDDDDDDDOôA`0?O_ŽX,ã®sÀülO{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷¿BÁ`0?O_ŽX,ã®sÀà¶-ëHˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰½aØ°§¯Ç,ñ×9àpy¬‘?¨DOót·€Á`0?O_ŽX,ã®sÀàóXú˜Ù»V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµkFùÆ>†­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­Zµj×3@³xôõøå‚Áà~:ç<5�Îâs'J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©t&â## J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*T©R¥J•*B$0óxôõøå‚Áà~:ç<5�Ã9Ç\C¼ØõÑÚÚ""""""""""""""""vmÃxOA×C 8ýˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆƒ	ÍÍæð,éëñËƒÀüuÀl;õ°áœáœ¶pÙ¿‡ä[ü„¯ºL~¶½ ú¿¸.o[þWlï…ðÞÎ‚õ½¹tîý½û\ýžžÀ}¡{e=üœxs
fóxôõøå‚Áà~;f…®»éÌAÃ9Ã¿È9ÄßCŒÜííkØäýÿ Çsßò»g|/†ðžÏl<ŠßE„k8�Ù¡å¿$e·þN<9…3y¼�úzürÁ`ð?³@-ò C†s†s×ºPï–CÄƒ¿4ÙAyÜ¼ÿ þ{�ãß��ç¯åvÎø_á<Mù|<�KÃãàñÎù@ð…ãsñ8øå|þ!ÿ 'ëÐßR›Þo‚À`~ž¿°X<Ç\ç�Ð³X3œsŽ/ßÅ+äì‘¯3ôðËx òÿ SÀ¶¿—Û;a|7„ð9¾zøè®¸‹†Šì¨KkŽ¹ëü™zt8t]‰fóxôõøå‚Áà~:ç<5�ÃÐ¹¹³Z5sf§³£7.\¹råË—.\¹råË—.\¹råË—.\¹rçS{ 9råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹råË—.\¹sg�íÛ†‰y¼�úzæ÷ÌbÄŽ¹ÏƒÍ`paìZ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ƒ‰`¨:†(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š-ñO×ð#Ë˜³xôõÎ› ¶-lsžšÀül1ÇqÇqÇqÇqÇqÇqÇqÇqÇqÇzÆÃqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇ�‚Íà0XÓ×6|·È@Ç\ç�Áæ°;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUQoxôõøå‚Áà~:ç<BÖ¶ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª»Øt�úzürÁ`ð?sžãacÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1š�úzürÁ`ð?sžã{sœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9ÚÞ�úzürÁ`ð?sž7±ýœ"ÖÅ€Àý=~9`°xŽ¹ÏƒÄÐZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ­kZÖµ»
€Àý=~9`°xŽ¹ÏƒÍ`s{mšµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V´hµ±f-ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÐBÍà0XÓ×ã–�øëœð8<Ö;¯@«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµF_—NC1Ó{	jµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­ZµjÕ«V­Zµjˆ¶¶_¦óxôõøå‚Áà~:ç<5�Ã9È<yÇqÇqÇqÇqÇqÇqÇqÇqÇqÇn}B_á@žõ­68ãŽ8ãß=ëZlqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇqÇcæl3y¼�úzürÁ`ð?sžšÀáœáœwÓ½ëw¶wö=³a8ÿ 3¶wÂøo	àÄoÑãêr9x'vöý úèõxú…Ì‡äƒÃ˜S7›À`°§¯Ç,ñ×�Ø·­‡çý¿G~ÿ ÿ D?ÊEù6ÿ "áùÊ|ßÈüÃ:þglï…ðÞÎ�ôËh\ÏˆàNwô�élÈMtô€x|Â/8ßŸäƒÃ˜S7›À`°§¯Ç,ñÓ[Öºo§1çÖ½â½|“$Ä@§—¯~AŸ/Åó|nZþglï…ðÞÍhï>~Èóû�íç—óAçÎïæó‚LÇžP¡0ÿ ’tÁ”Íæð,éëñËƒÀüoBçù !Ã9Ã9hÁ!y=¼~3ËÁ×�¿¯€[Ã/Çù�³¾ÃxOƒæ"ÔBTEwç„Ž‹V0’Ñq	0üŒc6o¡‚Y¼Þ€Àý=~9`°xùk†4q1byçžyçžÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,v01Ñ­è,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹,X±bÅ‹6dÑÃ&¹l–·›À`°§¯Ç,ÿ #Í`s {pÖ=ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{ß¼ãÃ˜{s	ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½ï{Þ÷½û^{&X—bÍà0XÓ×ã–�ÿ ‘æ°?çAAAAAAAAA@y½”AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA^¸ykBÍà0XÓ×ã–�ÿ ‘æ°;ÿ e÷€Á`0?O_ŽX,þE­æ„ç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9Îsœç9ÎØµ�Ð°ùµjÕ®†¬ó4#C4V­Zµg}çžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçž}w²#@4V­Zµÿ >9æðxúßûF¾€Àÿ ÏÿÄ 1    Q!1"As#0 2p@BP`�CRaq�ÿÚ  ? ÿ ýH•öNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²_ØŸùW£Ú‹§Ñ”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦Råö{‘×þ_À‘$±?÷<BD¢Dÿ êR!?$×ØŸû^ŽÅ^IãÁ#Dè�¢tF‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:#F4aÿ ðÂbd®ÑÙ×þ_íESè¦T³ž™Ñ1å“^’!>9%¯$§äMYù&—‘B„$J~DÅýŸNÇHªe"“ážä$ˆçŽD×$ÏÙ-ù%/$·Ç"K’ã’/ì–„!B+ì—ö&!$D¿$SòK^D!Bþ®ã“#®™iöÏzG’!ù"Ÿ’iy3öM}ˆ•öKûŸðô|½O,Ç�ðÙ‹#ãÜE.y%ý’¾ÈKÉ
¸ä›]3Ÿ÷>ÙlqM&Zû)ý�¿'êIò:ÿ Ëº<lS\
ç‘Íœcäxé¤ÆßlJze;òqJwÇ#¼|•-¤ËOžG+¶.<�ù'�"çÉ<vÈOÉ-y9ðÊUäå.Y/ì÷ú÷éÄ±ÕŠ$Tø8|££Ù�¾JYøçì_§ÛðÇîí�ÛÓ+&O#Xy/Þû.lëÈ¸ò/¶J^Dß’òK~Iã¦>:e{ûdµÛ>™í†]Ûá—¶{W‘lïÉ/ìž9ä™û»È²qÙÊôï×âÆÛ=µÐÒCœlÈò4™–;b•ÃdóÇ'»Ã®Ù;=3®['ÝÇ"Ê—g+ø:>^Ž0¶´eŒÔ“û2+\ÑÆ5ò=Ñ<uG2þG¸ýt—'ºSÿ sûlu‘�O#Lj�Ü£´uÿ —t>NWuÉìžls‰™2d|q2ív>yEñÀÝ¡þ‘NßK^’ÌŠJE¯²ŸÙ’WFg^Y•—k±ª+r‹¬‰r7	³¯Ný9–qg¾G/“èárWµ¤eýOq’WµË)WCsØÿ Qô?ô]e}íçƒ"e¯%Jé–ë¶RžS3úelËTŠxùÑxß—‘¢¿LSO“¾Œ”ËH¤dšòR�%ºò7öW¹Âôï×£†Æ†èø£öØ–gÉ/FTßW_fN¨ËL¶¹eÌôeyáruü/FðWÿ ÂÞzëìÊŸHÎ—|™þ¹?Ôýòfk®Oõ_¨ŸË5*�Ú_î~_¨ÉpqGÍvŽ¿òÿ r*hePü±Ôð+®Z"çÂ.Ÿh¤ºEûü1ð{ëÁ3>ßƒãà¿w‚¸çƒ'¿Ž
¹íW�¯£Ø¼¿(ã‚žnx=¸×¯~œ¡óÊ*FUW,â–¼×�§Ò2xà§ß¯¢¦“h÷cà^þZ'ÙÇ÷xð‹EÍt‹¥Ú\ð4üÖº?oŽ-¾
«ð9K”{ã‚Õ>tûGGÇ¤_»Àøçƒ'Ž_FOwxmO§~½ò>|ÝàöÊ=ÑÁnÛHÉ]4s>«Àý¾~‡5à~ß5à¥|ð~š]/àèùz~¦6…–Ûö‰>äž:‘sÜ“ÇR.{“ÿ ˆ°RiÈKýÏ2Ë÷6‘–ºàÈß‚ýË¡ã”vŽ¿òþDÄ$$&-þˆD/¢4Bú�˜¸!ýKÁ	óÁ	x!ý¾„¾‰B¯¢aóÁÂõïÕ11
D&"_Ñ!}þ‰ŸBB/Ê#D7à‰ú'�h•ô"ix¾x.È¯(…ôN„þˆçÁ<x!ý_DKðL®—¯?Ð¨\ø~(LŠòˆ_Dñà�¾‰Dh�¢4)þ��‘-ß“1³1³Œ‚Q$’I$’I$’I$’I$’I$’I,ÇF#‰—ù€—õ!¹_Ö¿�
ûnŽSeÅÁe–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye—lkÉ×ùU4'bàB„!B„!B„!B„!B„"P—ù[£äuê„!B„!B„!B„!B„!ü¯Ñò:ôãüåÏñt|ŽŽ½Æ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œc^�GÈëÓ¿T„I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‰ú¤I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I"~©I$’H…è„I$’I"~½ÿ GÈëÓ¿Ní-¾Œ†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd-žÏr8G„[2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd-¾Ê8CO„[2†C!Iö{Ž�iMôd2Y�´6øg+Ó¿âèùzwéÂ_¥É$“¢I$’I$’I$’I$’I$’I$’I$’I$’I$ž<ÊèèâGyä�N‰$’tN‰$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’D¤q�æN$÷Øœ�¼˜Œl–H§Àùàø�ž^Ià‰1'ÁŽˆbR{,æ};þ.�‘×§~Ÿ÷Š"|³~Hd?±1!ýçGËÓâ~áñ'í˜ýÜrFEä�’FÈ—ä›ûÿ |Yû‡Å~áÄ§ÏcçÈÝ.Y6—bhèùŸæt{dk”™‘Ñr×,÷¤sîéßñtqBà\¿O‰û‡ÄX¡±Å´¨¯w÷G÷ëãÜcr¹£ÿ ‘�?î15Ý¥ñî#;\3Ü¹ÿ wÑòôøŸ¸~ÙXÓá™_#R¹g~IöùÎ÷¨Òä÷Êâ‹?pø£âÏÜ?h|²²Y’gÜ\ZL÷B:gÌøŸ3¤7u‘œ£Úúàý³÷Šôïøº¸®
>Ÿ÷�KpdýZ2»3V?³*®Ì¸W™²O–e÷y?ÔJé³ýU_–fªž[Æ¹ÿ wÑòôøŸ¸~ÙM>
÷¾Œ³³'n~ø2pgo®LÓ•{¹?iˆ>,ýÃâ�‹?pý¡¶Åú½˜ÿ Gÿ BYúÙðGLùŸæt�ƒØ’P¸GÁŸ¸|W§ÅÑÍ�p$ý>'îõ1´]dm"�®d_¥ý£ÆÛHÉWÂEþ—ƒ-eá"®;‘«çÚ<t{a/÷}/O‰û‡0~²}×‚xð|¼Ûàùx!®äœuÊG²Rÿ ð)–*È|QñgîÀ®[àxrøéðUåäã:gÌøŸ3¤|m�#„��û‡Åzwü]#¯Ný>'îÚ‰¥ÁŠßhÅžKƒ/;¾x1¨ãƒ
®x1JãƒúF8ð„!B„!B„!B„!�{½>'îÚ‰dh’4I$‘!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B¸§Øé¾ÇV|QñgîÚ‰©àš|ŒRùÏàùä.äå¶R®Å)Ø~áñ^�ÿ GÈëÓ¿NPÕr9\Rÿ ¡|%#™_#KüNø.¹.™^äq(æGÈÒôB£±óÉñ<Ž=$”p6‡wÉÄ¯Nÿ ‹£äuéß§"£±ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ$ÎÊcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1œ‹Ÿ�£„r„Æ1Œc;ú*;Æ1ŒHázwü]#¯Nÿ ¡B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bô!B…ýB„!z÷ü]#¯NýP„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!z÷ü]#¯NF1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆqü]#¯èB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!'GÈëÓ�B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!ÿ GÈëÕ±ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ5ü}#¯Ný„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!^�ÿ GÈëÓ¿N'cÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒMœ£„)Æ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œb£•éßñt|Ž½;ôá×¥Ïý;àxèåHîø_ãæ�âø9ŸNÿ ‹£äuéß§ÄýÁ{P„!B„!B„!B„!B„!Bà^ïO‰û‚ö¢'É–!B‘(‚6A,™1�ÄÄ!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!{Yû‡Åzwü]#¯Ný>'îq®[1Mqî15Ï(ÄŸäaãŸr0§ýÆÿ ¸ÅíçÜŒ.¸÷"r.Sÿ {ÑòôøŸ¸qŒ¸ç‚•pÙîû&W’_Ù	ù!¯$óäWö{c“Šk“®yŽNü’—“•Ó/ßäv×gºÅ~áñ^�ÿ G.ÁËôøŸ¸|
ŒoƒýGê¾2ÄöÌªú£5O³ýM>ygú”ùm™¦8å™ï2íù/.9äå¼èùz|OÜ9ƒÜ›*)ðTt[ðÌ‰y2ºû2ñä¶Êår{±úŒ®
ä¹]}Ü‘v9ì¬v�rG+üUñgîéßñt?q\>}>'îå†Šªoƒ*ç„¨«ðÌËÌ²¸þÒ¸þÓ+ç‰2ÎdÜý�O(á¼èùz|OÜ>(÷#ßÏE{ºEqà­Ï�¥à´ü‹èªž
·ÏÐô:^îð9^rð?w)�ŽNø§�)byŠôïøº9¡p.Ÿ§ÄýÃâ‰µÙ�ý«é[þÔaŸø£ú1éšðŒJ¹ö“�p¿Þô|½>'î&Iè�¾ˆD¢Ñ/Âd“¢tIè”Iè•à_â•)örÚLugÅzwü]#¯Ný9C›äR¸$�“²vNÉÙ;'dì�’I$’I$’I$’I$’I$’I$’I$“Ç“ß]Èã ”’I$’I$“²IÙ$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’H¸ò7ÊES¤q+Ó¿âèùzwéÊ=Å§Ñ�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2…±óÙíG(åò‹FC!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�¶UŸŸ£…éßñt|Ž½;õLD’I$’I$’I$’I$’I$’I$’I$’I$’I$’!/TÄI$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I"^½ÿ GÈëÓ¿D!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B§ÅÑò:õhcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1�ÿ GÈëÓ‘B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!GÈëú„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!_ÉÑò:ôàcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œg?ÅÑò:ôïÕB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B¯ÅÑò:ôïÕ!!B„!B„!B„!B„!B„&rp$!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!	œœ	B„'ö'è�—Ø„!Bg>�ÿ GÈëÓ¿Nùáe–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–ZEEvrŽ$ª®t¹,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë.W%MpÎQÄ•UÂ-¢Ë,²Ë†6|F‹¶Yhe2ËH©®Êôïøº>G^�ú|NríDè�¢tN‰D’N‰Ñ$’N‰Ñ:'Dè’H$�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dèž«££âs�Ÿj$’I$’I$’I'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢}¬ã!ñGÅ‰ä'ÚcÇäÄŸ”b§äŠ]À‘ò>'ÈM‘‰UÑä‹DûD²éßñt|Ž½;ôøŸ¸|E+³~LKíŸÙ��$OÙ-ù1lÆþÌ{1Êç’ñÉ5<òc—Û1¿³û1¿³û1Bòc~(š~L|y1ìÅÏ“~ót|½>'îL.Ù�ž9!ý�—“û1¥ä‡\rcãÉ�ý˜—Ù‰¿$dðÎWøsâÏÜ>(ø³÷1•<ðÌµ]34´ß#|&Ïtòt|Ï‰ó:‡Ánš2WfLlªã“öÏÜ>+Ó¿âèùzwéñ?pø6™•d}™!ñî2WüŠKº*ûäxþËwÂ¢ýœºÜVIáQw�rþÏoúnyú.r4¨¤»¢òWT\Ç-•Ç¸Ë’z£+|¶T}™9þâÒãÜe«óÑYxMžéOùz>^Ÿ÷1•¤ÌŽ¹ä¹}²½¾L¼ù2\ù2ªç“'L²¼™ëÃgú�w–d¦“g0ŸøsâÏÜ>(ø³÷Ú,ýL�’±sÀñæào:gÌøŸ3¤sþ§f?iôqÁð?pø¯Nÿ ‹£äuéß§ÄýÃàUÃHºmðf÷ô™™¯ÿ Q5Òfg�´Ìýð™Ÿõ;LÍú=&ªvúgú�´Ì¸m>µ‡Úf«o†g¯	™±Òå3+ÅÒ?ÔÞ_Ìår™’~ŒïÂfe×ÏOÃ2$¹FLv¹CP¿—£åéñ?pçWËHÈ«Ž¾R3Sã†dkÁ“EèÈ¾Œ–üÇhkè¬vº8…þJXžCâ�‹?pçë—À±åì�Ñÿ Ð«?[>éŸ3â|Î‘ðcVø/‚�#àÏÜ>+Ó¿âèùzwéñ?pø¡d]¢4cÈÿ ´Çñ1SçÚcK�iŠ¿âbUÏ´ÇíãÚaoûQŠâŒuÿ WÑŽ¿âbKûLmõ$qÇ'\ûLR¸ö˜ùðcãûLmÿ i‰ÄÆ¿âN7ÊGùz>^Ÿ÷Š&×hÇÏ<ÚðcOÁ�F5ôcF7ôc_D/¢4L¿ü6¥´˜ë!ñGÅŸ¸|P®_EÍ¶‘›Ž;2;M£ÛèùŸæts÷3…àæ¼$|Ü>+Ó¿âèâ…À¸9~ŸŒ„©Dl‚ ‚ ‚1�AAA²vNÉÙ;'dì�“²vNÉÙ;'�"ªèèøžÜ„û|“² ‚ ‚#dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�’—“¦“1»GÅ{rvOµvC^LTaÑŠHHLæ�‰Å	×’(‚"Q>ß'»'GÅzwü]ÜWŸNPÛå$Èe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S#*Ÿ,ö£”>yFDd2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)•£%ß�ËM£„rŠUÊ2#!�Èd2O³ƒ£’åôd2d2N¹gÓ¿âèæ…À¸~©’þ‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢t$qè™:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'B^©“¢tN‰Ñ:'D¯¡/DÉDè�¢tN‰Ð—¯ÅÑò:ôïþ»‚gË#d¿±?áHL_Æ„„&/Eê¿¥BBÒ‘;¢Bþ¤„Î¥!!?±?äHBþê�¹þ”…±/±?D‰OÉ/ì_Ò�„ÄJû%ý‹�l�’¾Éd¯²_Ù+ì—ö'ê‘+ì—ö&$.|‰ÿ Bþ…È…±1"v&/ú>ÿ ‹£äuéßýwEÇ<qÉSå‰ùdqä‡\r*\òL}‘²9òCû'�"çÉ)vÈoÉy#d×Ø’ä™~HãÉ-ñÈœòL¾9'�$lIù=ßd¯,†ü‘Ç’9ã’my&<²òCû!ý“Ç’Ù»ŽO|r{‘?,Ž<‘îã‘Rå
‘'Ó=ÏÉ)vÈd/²Zò|¼‰.Ùì‡öBû#Ÿ$5ä•ážúò%²Sã’8òG>I¿³Ù<�ñÉòòK^H_dÛò%<“/ŽId/²Ùì‡öBû&þÅ3È½ürOI§äMrL¿$¿²WÙì…öFÈd/²Zò|ü’çÉ/ìI¾ÈãÈ—†püŸþ‰¾Ù6¼žÄ[®™IöÉKÉì…öCû!/$ì^ï$¥Û!¯'·Ã_‘N>y®9=ËÉmôÊÙkìkì§ö?wlU>IŸ²mù8ŽJV×%7Û%/"ãÉÅù%¯$/²Ùì��þÉ_dÛò/o$ËòCû%ý’—‘sä™Ÿ"wäž<’×L~ï"^Y#Žy#Ÿ$qä‡\r*_ï»þ.�‘×§õÜ¡9b÷�ŽŒ‘Ù’zäÈïÉOe}%6d÷y2qÏ%øä¿%®¹27äÉ3äÉîò]µØçnŸe®¹2]¢§¨Ê˜ò_»ŽK¿²¦Ko„d•Éo®JçÈÜù/èËÉ•Ÿ�Ûä·á–ß’ªÐÿ H|²§¾L‰qÉ‘ß’œvR)¾y)‘kìª~KKÉ\”—“'»Éiy25Ó2{¼™8ò]ý�Þ‡8Ëtû-uÉ’»/”˜Þ2½Ì¾L˜Ñ‘¿%Õ.F°òS·ÙSöVËçŽK¥ä¹~L�ù.©rÇXJœŒ¾<–­v?Ò)ß”—<–ß’çìÉ_f^L’¼—OÉiy-¾JŽ¹+#EN>Kšk“#~K¤Se4d—É\pÆÉã³Û]_eÏÙuö\ý—_e/²¼™Ù“eZ_‘¼|&d¬…ð¹·±{…ì¸iï\úeËòSµË=Ø¿ô5mžÂ©ñÉNKvdÆŒž92lËF^L‘å•Ç’�¥Èÿ GŸÿ 
tû.kÉ\vÇ²¶]/%MsÉ“Ç&F¼•ä³'™%qÉ‘×“'·É¨¹g2»_ï{þ.�‘×§õþécUàuô7>
oÁJü`tüÏ‚•ø³Á~ÿ {|Ï‚¹ðSŸóà¨k”7�‚Õ>‹§àp×(ý¾ïž
sÒ2;ðR^E{¼Ûà¨mðW¿�¹C¯¡è|x->R2sÇ¹ð_»Ái§ÀÔpUv‘mñÁmsÁjü`§à¶øà½Ç‚×Ñ’kÁv¼Çƒ&‹^Q\ñÁU
Uà®<ºà¤×(o~çÑTùàix×�¼|ï}�kÁiø*Zèk	o#.—ƒ&‹]ðV5ÁY‚üðTµÑû\íôZú-Úè¥ÁJùH¶¸à´ü_C_CÑJ|7à»^—h¥\!®=Øø*­ôZ~
KÁKè®|�–:“"|ožŸ¢ëè¹ú.¾ŠÆUW\ø/Ÿh½=Ý##žÑN¹às’øH·ßñÇ7Ïqà¯w-Éà«ð‹›ð5‹‚›}OÁsô[\p6ü¯óà­CÑ\tŒœø.m6†°ÿ èsL«£"^”üÇ‚çè»ú-?qà­Ï�û<þ‹Uà¯o‚Õø.ï{þ.�‘×§õé‹BD�þˆOÀ¥	’×‚9ç‚Rã‚9ðNˆD'àŽ<¢gÂ\OÁè™ðŽ‰lšú#Ÿqà�¾‰àTŸ~þx?NWBd“¢Ñø#�sà�	^QóÁqÁóÀ¥^Qø!}þˆkÁ.¼+Á!ý—Hæü§ŽoÁ	qÁø&<!5ÁóÁè‘!4K~	_D¿¢Ñ3ô{§‚]óÁ	x!ýÇƒÝ]#ÚûDqà™úß‚Ñ2üŽ	¯¢WÑè…ôN‰Ñ4¼ëž•àž<ëç�Bð&ˆoÁ'D¿¢WÑ"B¥Ùø!}þˆ_D?¢Rð{¼#‹å¢fWD?¢Ñè�¾ˆ_Dñà†ü—‚_Ñè‡ôJ^ü×h‰~Ç×Ñè‡ôJú%}þˆD/¢tN‰D?¢%ø9Žuàö¾Ñx!}¢Ñè‡ôBú#DhžDsàž8àŽ|¾Ž?Þ÷ü]#¯Nÿ ðÔÉÐ—ûD/TÄ%þÁ1z¦Kú%7"ôäB_ì%}	*¿ØrKú%þ³¿âèùzwè„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bôïøº>G^­cÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1¿ãèùzr!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„#�âèùB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!ù:>G^œcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œçøº>G^�ú¡B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bõïøº>G^�ú¤$!B„!B„!B„!B„!B„ÎN	Ÿ²Ù#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙ#dl�‘²6FÈÙìšû98„!OìOÑ!/±B„Î};þ.�‘×§~œ!óÂ.Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,´ŠŠìåO%{šLÈþÌ†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2‹ì¯rMžéGUW¶‹,²Ë.Ùñ.Ùe¡”Ë-"¦¸g+Ó¿âèùzwéñ9ÈOµ¢tN‰Ñ:%I:'D’I:'Dè�¢I ’tN‰ ‚I'Dè’I'Dè�¢x®Ž�ƒ9ÈÅÁ(†&!”K„!’Ib(’ID±B(–!B$’I$LH’X„J ’6I%ˆ”A�ˆd’"Q ��A,B(’6K(ŽIbD"_dl��È%ˆ”FÉb!A’Q2–J!²	b‰DÄ!B„!B„!B„!B„!B„!B„!pq‘|XžB}¦<~LIùF*~H¥Ñ<	#â|„Ñ)•]^H´O´K!ñ^�ÿ GÈëÓ¿O‰û‡ÄR»1'äÄ¾Ñ‰ý˜øòDý’ß“ÌoìÇ³®y!ß“SÏ&9}³û1¯³û1/³/&7â‰§äÇÇ“ÌKíâ[ä…|{‰sÏ¸ÇuÇ¸ÇSÏ&$ü˜øòbŸ³®=Æ:\òcf4¼˜›ã’_†r�—§ÁŸ¸|G	Ÿ.Ùy!}˜öcÙ+ìš|r*B”c—äÆþÈãÉ�}�¾ÉÙ4øäVº¢Ø½ÞHãÉ2¼“UÇ$ÚèIrD¾9#�$l��¼³û1¯²Ù�/&=�ëŽEQÈ¦¼‘3äš¾9%Ï’TôÆ¯È¸í‘OÈšäPŸe{ü�Ï’¦¼Ÿ'ÏŽEK¶FÏ�L¥~F§ÉÏØÓò&ûd)ç‘UñÈª9äpŸ+òq>Guäj9äjøl—=²ã’iy&g‘c®99žy¿ŽOtòÙì^Þ™JøäýD»Ï<Žk„ÆþËKžJçŽJçÉñíœW“õ8ì^ÎOÓç†?l‡<¶GE/¦:~NL~îÙÏ$§Ó4Îûg^Guä•=²Zé—/¦[û-?'>Y#Žy#g[WœÏý—Gî|Yû‡ÊžxfZ®™šZo‘¾gºy:>gÄù�Cà·M+³&6UqÉûgîéßñt|Ž½;ôøŸ¸|ŠLÊ²>Ì�ø÷+þE%Ý}ò<e»áQ~Î]?î+$ð¨»Î¹g·ý7<ý9TR]Ñy+ª.c–Ê‹ãÜeÉ=Q•¾[*>Ìœÿ qiqî2Õy2äÇäËú¼¶ÊXü™ã'<¾˜áÑmõE¥Ç¸Í•tÏõ“Ë2(òeožK•ýÅ«î�Õir{ñò|½>ýÃâtÊ—Ñ“eÃòd}re®ù2%ä·‘.Ov4Øæ_{á™“ò\Ï“'»É’þÌ�f�é.XÖ7Á‘Û.>Ë¯²Ü™UòSá65‹”\ä}–×“/žYkË/Ÿ&D¼™ã“"ï“'ŽLµöd¬«–?Ðÿ ÑQLÉKÉjü—2»+/EWÈ¼+¢ýü6W°ªäç±ø8í——ïä¨Ÿ%«ã“õ1öÅWÑ_§ÉsL©.k¦d©òZÈŸ%{CäNú/Ú8¾ÅXÇ99EDy/õ<”ávW±—YYN
WÈâ<—ïò~¤vÄï¢¢QUîl§gº
O“…ÙSà·^J–ŠöpUrÊ›è¹Ÿ&G\r^EÉP;}Ž(ÉÇ™*¼–—,¥]HxÙJze]ðØ²IöÉžŠ…És|r[�%ÖN9+<¦8žN2Ÿÿ eÑû‡Á~áûCåŸ©“²V.x<ÜãGLùŸætŽ`ŸÔìÇí#žŽ8>îéßñt|Ž½;ôøŸ¸|
¸iM¾Þþ“35áŸê&ºLÌñö™Ÿ¾3þ§i™¿G¤ÏõNßLÿ Qö™—§Á–°ûLÕmðÌõá36:\¦exºGú›Ëá™œ®S2OÑ�øLÌºá™éøfOohÉ?FNzFzúeµË“4¾“3.šfzk¦W·äŠO¤e_LÉÇŸ|35WI™¦“iŽq$Ï—§ÁŸ¸|GÃPýž•]#'+”?g‚«è¼wÏÅ	3õW·ÏãÁ“¾•ß‚Ôø+ŸKž‰Ÿ©<»à§áÁV¼/ÅG»ä¶Ò2sÚ·Á}ôdšðd©ðdšðdµàÉç‚×”TR|ô¸*é¾‹è·^
kÀá®P½œp:ç„dY<Ø¹#"®8-.x2Sãƒ#^çÁ“ÛÒ2ûüb8àÊòv†ñqÀÛ}ü"Ûç‚áqÁn×(jWEÌ´Œ�'h§÷ø2Lx2]x2û|SÁJ(n|ëž…à¾|ZðewàËàÊòv†át|Ym¾j¹à®—ÃÁ‘SIkž÷x)5Ðý£áðŒ•~Š|}þ™ð]?H\ðd¾¸.{à·^öø-ß‚¦|éZðešç‚ß¡Æ.‘–²x28ðe«ðeSàËú©´{!r„¡�õ�‚ÿ ²I	ä>ø³÷qŽ¹|^Èýý
³õ³àŽ™ó>'Ìé5o‚ø)ÑÒ>ýÃâ½;þ.�‘×§~Ÿ÷ŠEÚ#F<�ûLqÿ >}¦4¸ö˜«þ&%\ûL~Þ=¦ÿ µ§þ(Ç_ñ%}ëþ&$¿´ÆßRGpbuÏ´Å+�i�Ÿ>?´Æßö˜—üLii�ýOûLSÿ ^Uÿ ÚbŸø‘¤FO£_ÚD¿:^s\ûLxøá
gƒåéðgîõ•sÁ>Þ81ÓðcŸ¢WÑèŽ<=’—‚4Cú1óà„¼¾‰ãÁßH|öJ^D?¢Ñ<x9ð‡É/Ê!}Ç‚ðMW‚&|ëÁôC^_DèIpMyD?¢'è•ôJ:&ü¢%óÀ’&‘óÁ	qÁø#�>|øðcçÁ��'ÏKŽ	Ñü¾ˆDKð$¸&ü¢ç‚xã‚9ðGpG>mx1Ëç‚eÈ¯¢4C~|x1·àÇÇ‚ç�JD[í?D¯¢Zã‚ç‚ðC~�¡pMùF>yàÆ×ƒ~ãÁ	ø!¯'à†¼ÓðC^OÁx#Ÿ7ôc_D¯¡5Ç7ÏqàÆßƒióÀ¥t;G¶ùàâìT£è÷dGÁ~áñB¹}6ÚFn8ìÈí6�l#£æ|O™ÑÌÜÎƒšð4‘ð?pø¯Nÿ ‹£äuéß§Äã!*Q ‚ ‚ ‚dAAA2 ‚ ‚ �“Ç‘Uttsk ¸$B„"I„!D²D!BdˆB"$HB„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B$B„!B„!B„!B„!B„!B„!\)²�£ˆGÅžÜ�“í]�×“tb’9£âqBD5äŠ „È”O·ÉîÉÑñ^�ÿ GÈëÓ¿NPÛå$Èe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S#*Ÿ,ö£Ý<›iŒ†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2qàºú+Ÿ±®�lðrŠUÊ2#!�Èd2O³ƒ£’åôd2d2N¹gÓ¿âèùzwê™/è�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'BG‰“¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢Ð—ªdè�¢tN‰Ñ+èKÑ2_Ñ:'Dè�¢t%ëßñtqBà\	¿úî!1±HHOìOÕ"WÙ/ìLHBÐ¿¡"WÙ/ì�‰ú¤!		‹Ñ!	‹Õ!1!1z!!?éH�‰‰ÿ 
B'bì’ûþ„‰çÈ˜„„ÿ ¡J’6NÄÅè„„ýŸªDìO×�!1!1z$!?èH•öKûýÅÐýÅpPùÿ ®èxÙõÈ¶Kû%ý“±4L}’ß’WÙì…öM?"ã’yòJû!}�×’òMøg±rwÇ'ËÉ-y!}“gÚ)_”ßl”¼‹�'ä–¼�¾Èd/²6Cû%}“g¶)[\�g~IKÉì…ö.<‹ßäVŽ¥öÉoŽEKÉúgÿ §Ë¶CŸ$'ä›]3Ø¹»†ÄçÈ¹òNÈkÉ;Äß‘R&lŽxä�o<‰>˜ßÙÃòK^HçÉ&Ÿ	œ¡Bì”øäŽ<“O„Çíå+¶rü‹ŽÙì—öK~D—$§Ç$µä„ü‘Ç’9ã’myû'd/²9òB^HoŽDçžOcòú&ûdqäŽxä›\¦8O²�ù:í“±/±7Û#ÛäŽ|‘Ç’Ùìž<‘ÏŠ§”ÇöW»ÈßØ¾Ù;#�$ìKìMùžOkòJû&Ÿ‘{y=´×'~I~Y	y!¾9ŽQì¯$µä\ù'�$?²òOEïò*^EÇ$CòCû&W“åäëžEÏ“Ç’Ùœ"cì�‘±YÊÿ qßñtsBà\?úîPý­¢ýì¤\ý—Ïlm®Æã’½ÜrR\òTý—Ï“%ý–©r?Ò§Ù_LÉÏ’Ôù2:ò]qËÆW¹—Ï&LhÈß’ê—#¬?ú¶ÏaTü•íò[£&4doŽL›2×Ù—“$ùelºµØÞýõI”‹eÇÙvü”£’ç/©\�A~î“ÉMpÊh¢ÓäÉ�qÉ’«ÉuÇ,oJße®ŠL¾9äµ×%ßÙS%þ¯�ãä©çƒ'»É‘®9)÷ÉH¦Ë•ä¿<™9ã’©¦Î kžå¾LœñÉvÓg8Êš|Š_eËò>;c«ò5Œª¿%Lù-W“%.927É_c”><–ü2Õy/�&G‘vUbì¯qLÉ=™%qÉ‘ß’ªW'ºOe.
¿²¸.{2Bã“#¯&F¼™_fT\®9/ßäw�†>FŠEñÏ%óÇ%Zç’¥ò$7‹‘¦Ì”ËT‡XJýFS2BäÈ—™®Ê¬]�ÞÊ•ä®K.{äº|rSžy.lªk‘Î.KYLÉ²íy+ÜS’Óä¾<—?fKµØý«“ˆ+Þ×%ÏÙ’í.Jö¦Î¿Üwü]#¯Nÿ ëýòÏ“|¼"ë®žø2{—Cý>Ê÷r‘|qÁ’¾‹÷x]¡ª]ôø-Sá)öŠkÁmx-W�Ïã+Ýàz^OÁR×CXø)Óèº~�¢Úã�·àmx-?hzŠã¤dçÁsi´7‡‚½ï¢ßÑ\x.~‹¿¢áø.§Ž
wÏcá §~§ÀåŽ¤®|�WÑj¼xèn:-W‚ëè¥ôZë‚ß|ŽÉ>
›ç‚”pUóÑ~ï%Ï¾¸/Eh½ã‚¹ç�âC¥Àér‹çŽ
uÏ±.�‰ï~íðZ¯×Ñ’~‹÷.Fñ6ú2Tø2:ð_]/—à§==Þk´[~kÁJ×Cœ|ŸH®|Ûà¦ü¯ÀâPÜ—Uà¿<EWÐý¾
oÁj¼¡ñà|x/é=þ
‰\•H¾|þŠ_Eøà·ßÇ\‘x*/ž±ðU¿çÀÓð5�‚�>MøŸ7à¥k¡Î>
tÚE¾¸)ý?E×\/žãŽ
·Ïb¥Ðë;o‚¸ð\ýOÁIx+E¯¢ëèpùàqÂÁ^æÒ.¾‡4›G¶Wûžÿ ‹£äuéßý$èšú!?5à„ùàIpMyDè‡ôBú%}.8&¾ˆ_D?¢Ñø&|!4K~	_D¿¢Ñ3ô&¸&Ÿ‚Ñè•ôJú%ýþˆ_Dè�þˆDKð&¸"Ÿ‚Ñ!ý¾ˆD¯¢4Jð„Ñ<ø$HT‰çÁ(—ôG>	ŸT¸d7Ï/¢4G>KÁø!}¡"ivˆçÁx#Ÿ/¢Ñ:#Ÿ%à_G´T»#žx!}
}'D7à…ôCú&~„×·ÏqàŽ|¾‰.ÈožãÁø#�'ÏHTJú'‚Ñø®…HŽyà„¼Ï‚WÑ$?¢9ðJú'Dè‡ôG<ðL®‘5ôG>_DhŽ|Ç‚9ðJú#BD¿(•ôH’&¾‰_D�þˆOž—×”B~_D?¢ðC^	_Dh”üŽ	§à…ôCú!}¾‰D?¢Ñ<x>G‚kè…ôJú8ÿ sßñt|Ž½;ÿ ½BÖ¿¡B¢Bþ„/ã_Ò½8$B¿¡!Jô¤&%ýBÖ„ÿ ­Bþ~sÿ TŽ?Þ÷ü]#¯Nÿ ë¸&|²Ùì‡öBû!ý’þÉØ¸&|²6Bû!ý‘+É.øLNy"_l‡öJû!ý�¾ÈKÉ-ñÉy&¼1Jä”øäŸw’j|‹Ÿ$ìšðÏj}²6*]
>ÉÙ-ù!¯$'äšðÄ‘)ù'�$säŽ<‘²òM?$l��¾ÈKÉ5\r{—'¬l¦üœ>Ù5>EÏ’vMxbH…öLý“OÉ-y!?$l…öG»ŽIkÉì…öCû%/$§Ç$µä‡ö&‰_dl”¼œ?'|r{Ð’òNÉÙì‡öB^I÷y&—‘4Lý�þÈ_d7ä^ÞI—Ç$óäš^EÏ’~Ù5ö.9!?$?²Ùì…öCû!}“^¸&~Èd/²xò/w’×‘3Ÿü¿âèùzwÿ ]Ä²•4™~y/Ç%ÏÙo®K]òRòÇm.Gú|Žì®|™+Ã.|²ítËyW,s‡’ýí&ZòÇÇ’¹ò^Ë©òZ®y-uÉUK–7‹’ýìÉÉ’Wl{-?#¾9gÉJšLÉÏ’©vWË2'Éq=²�y*øåŽ`·}2åy/žy-uÉ‘÷É“�%Ï|–Ÿ—Ç“%?&N<—YgÁ£Ï¥Mtd•ÛËOÈí®XÖ>QjÚäª^L‰òR\r[ï’×\™-&ËKŽKóÉ~9.|²©qÉ|óÉP¼—V»cäxÛì®|•KÈßÙ^áûJÆŠUä¦¼—_eÏÙwö\¾[*š\�cä¥M&\ý—_eû—,uˆµlÈd‘ì¥öURå�bä¿{á–¼±ñä®|—_eËòVÊª]�ô¹+ÜøeÏÙ’ŸL¾;e{¹är¸lv×g+ÿ ïøº>G^�ÿ ×s,¯{cã‚ùç‚šðTÑT¼(§k‘¬?ú2:fG^
ã´WÒ.|¢žEÐÖýõtº2hÉîð_ãÁZ2sà¥K¡þ�÷¾†ß�¥Ò/Ÿh´ÑOo'�©ð9cr?w�µà¿¤dUà¥ÀÞ2¦¼KÁ^8.Ÿ�û|¢¸ð_»Áz
ÑQk¡ð‘ÌŽ‡¡Õxž‘|ø+EªCx‹ýGÂ-¾Ðý¾OÁIqÁu^£´4úE/¡ñÇsÏ×ÑsÛE>¸2yàµk¡¬eW<}ÞŸh½îð5%T¾®ŸFM?E×Ñ_h¦ºEãµÊÅÁ^÷ÑUôW=¡¦ºéð?sèmø·Á|ø+�Í®‡ú?úê2éte2r8]ŽßFGôR¥Ðÿ Kÿ E+eÓðWÚ+E%à¥|"—�¯ü¿âèùzwÿ ]Ê&þ„Ÿ‚ZðOkÀ¥x9é#ØùàNx&ß‚ðL¯¿¢_Ñ2ùàøp:ÉÏ¥à‡ôBú%ý¾‰Ñè˜~íàš|ðJú%¯è—ôL?k‚yç‚Rð)b¤O>	KÁ5ôG<ð(úOuÏñàž|¾‰ãÁ/è�þ‰_D¯¢_Ð¹ð{N¨H—ôK^	Ñ/è˜~ç‚ióÁèž<þ‰çÁ+èIx&Ÿ‚_Ð“ðK^	çÁ-x'Ÿqà™|ð)\~Q!}þ‰çÀ¤V¼ß‚Ñ/è•ôJú&¾ˆOž—ßÑ)ø%}¡%À­ø%}Ç‚tKú&_<Ç»'<—h‡ôJ^
ç¤W»´OµtL?öðM?¯¢WÑ/èI>ë'�J]ßü¿âèùzwÿ `„!hI	ý	z!B˜¹ð$!B½„!ÑB„/D!ÑBôBô¡^ˆ^ˆBôB„!^¨Bª…ê½…ê…è„!1hHBd×Ñ3ô$…è…è„ÉçÀ—þßñt|Ž½;ÿ 9wü]#£¯F†1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œcß§_ÃÑò:ôçüåÇñt|Ž½P„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bñô|Ž½8ôcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1úsü]#£¯ó§_ÃÑò:ôïÕ"WÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÄÎ}'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉØŸ¯ÅÑò:ôïÓ„4øFJ2L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”ÈŠ—Ã=Èáž‘™¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)�È‡Ïåzwü]#¯Ný>'9	r‰Ñ:'Dè‚tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tO5ÑÑñ=Ù	öø'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tO·ÁíÈ|W§ÅÑò:ôïÓâ~áñBDì•öD¯$:ã‘Rçþ‡£åéñ?pø¯ñ÷ÅŸ¸|W§ÅÑò:ôïÓâ~áñ$û%7Ù3ÿ "­>“&uËûbMÿ Ðô|½>'îþ>ø³÷Šôïøº8£„trý>'îÖ6Ñš-®Ìù+ìÉSËL¨Îº8Ä¿èz>^Ÿ÷Šÿ /k?pøúwü]ÐøOÓâ~áñhkƒßmð$û’bxàS|ð{%/ú�—§ÄýÃâ¿Ç©!$×'¿!ñ^�ÿ GÈ\ƒ¿O‰ÆB}¨–bf$A“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“À�tt|N2íDì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²Rò)O†:~Fíéßñt|Ž½;ôåžQpYe–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye´U×gæJšå+‚Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,¾–Ël¤ÓhâW§ÅÑò:ôïÕ11B„!B„!B„!B„!B„$pr&!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B'DèSôqéßñt|Ž½;ÿ 9wü]#£¯ó§_ÃÑò:ôçÑŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÇéÇñt|Ž½P„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Bñô|Ž½8ÿ 9sü]#£¯FÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1Œc×§_ÃÑò:ôïÕ!I$’I$’I$’I$’I$’I$’I$’I$’I$’I"änÿ ‹£äuéß§ö–ßFC!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2‡Ïg¹àI±3Ÿ÷©	'ÿ R‘;ÿ £àH—ö'üýÿ GÈëÓ¿Nêø.I$’I$�I$’I$’I$’I$’I$’I$’I$’I$ñàöWG_ø
”>z-”Ÿg¸èHLD¯±1/±2gË!¿"b¢þ„!?éìèáÒ›è´wÃBDóäLHOìH\ùD'äšðÄÄ!ÑH^©¾Éb~‹úõ©Co„YIö*BH„ü’þÄý„¾Ébb„/N	Ÿ²ò&!Bþ¾…	�>˜ýÝ±ZòtLùd7äLBBbôwü]#¯Ný>'î!D£û1·Ç$´!_îú>_øCðrùd'ÀšåWÃ“ôß‘[í“3ä^þ9'ÛäNøL÷G%Ci2Õy²òG>HãÉù!¯&4ü�×’Rò%\rM/$lUëÙÑÂcª®É¯µòr�Ó†ÏÝã’\rÙ3á‰×’Tù=÷Ç#œ|–­ö4ûd5ä��þÈ_d7äÆ—“~H_d¥äU^HkÉ-ôÏl6[§Ã->Ù)vÈÙù!ý“Ç’'ìŽ|“g+ú:ƒžÙ	ð&¹CO�ÌrdvøeËí“IvJ^H_d?³LåöÉKÉ/ì‰û#�"uä„¼‘oŽD£’½Í&dç–Ä—l�‘²Ù/ì‰û!?$Ûò{—ôô>UC’¹GT¶“2óÉ¶Bû%®˜¹í‘²Ré’ß’Ù9<3•éßñt|Ž½;ôøŸ¸|EŽ[f<wÃ£ÈÇíç’cž(uÏ5“º1Ô.hÆŸ÷šþâ.øLýIOýßGËÿ èìè·cQÙó=¸™Uo‚ñ²­qÉj¹ä¶¸ä§‘1þ�þ‡ïe×ƒ,3*’ödž¹.»äÉÉ–«É•¯&LˆµEãžy*¯ŽJ©M�zvt|O˜ÜôR®ý8CPÒ/õ¹)G—kžKšò]O‘þ¢èè§‘£"\£*2l¹^L”øä¹\òdñÉ•¿&[|rdqÉsEG\•‘¢¿L^çÈ¥ô[}3"Eùäµ\r?g’Ýy-÷ÉN’äæWôtvs%ûÎ#³ä~Ù.ß"Ÿí._‘¨ò]W—Ç<”ÙR]>9*gžJ_fJë’Óç“"ë“%Zì§ƒÿ G9_$Ì•ÏÉÇ<™6\¿%{{e}2éù/Þ»BþžŽ˜•	œ´~Û9ÉÙ¦V:|[òdkÉsöeuäÉH¸^Lžï%Ó\³™^�ÿ GÈëÓ¿O‰û‡ÀqŠ¸3,ï†üŸê>Û2{8äË•ùfN¾îW'úŒ+ŽYš¼¶¨ç„ÙŸ.Tß#œkŸ÷}/ü£”9b9é¾Fã„VKm¢§Â2OÑ’Ÿ‚åx-Úès‹�ä¿SÚ=!û|Ÿçƒ'<p]®x-W‚ºèö¯çÀÔx)æÿ Ùí…ëÙÑÊ®O¦/¡ÝAYCkž’ü8ã‚ß|\©6‡X¸9ÉËD¨ðwà¥áð\×ƒ%®8/Ï§ài®�Ûã�Ë}ï¡¤›=Ðdš|#%¿&¹Cöx/ÝÇùàÊ—çƒ#|pRi´q+ú:9¾ÉéÈÜ>³o„dÉå+”Œ¼qÁ’kÁ’×þ‹ÑpüñÁ–Ÿƒ'=¢Òð[~
š\£ö¸ÿ ð¹¶Ò2×\å¡¨ðZ®‘ußHé##ïƒ"®8-ÒmØ_ÓÑÌ±û‡È×0[¦Ñ•õÁy-«Á\x-¯ªðW·Áoè¿<èâW§ÅÑò:ôïÓâ~áðlm#&L­ûJ™þÓ*¯{{’“þÓ®ä÷Ä´ú’›îOÐ¥Ñí”¿Ýô|¿ð$Ð˜ÎûBdè‡ôCú1¯¢ðB|ð)\ß�$'ôK^ožkÁ*¹à„¼ß‚Ñ+èšú=Þ¢¹àö¯^Î½ô1#¢[ðOF>|—‚ðDxBh”ü	¢tE}Ç‚]x"~ˆkÁ	ø%}Ž8%¯7ÏÇ+¡4E?/¢Ñ-x#žx#�?¢Ñùà˜]#�éM	ŒìI
‘óÁôC^DºðDýÇ‚4Cú!}ßÑè�þˆ—à\pMýŸ‚Ñ<x"Ÿ‚ðCú!¯û¹à˜^õ{‘Ëðv{N‰¿(„ü—ß‚ÑèŽyà„¸à�ß‚cÂ8ôïøº>G^�ú|OÜµK³|ðŒZF|#ú1hÆ¾Œz1?¤b_DO„!B„!B„!B„!\Ýÿ �¡ùÓõ&%ü_Î„%ý)ˆKøSþ!Zÿ d˜¿…_Ïßñt|Ž½;ôåk‘Ï_ôï�ä£…þEïøº>G^�út&‡îÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1‰3…þEïøº>G^�úô.EÀ„!B„!B„!B„!B„!Bÿ #wü]#¯Nýz;:ÿ 6÷ü]#¯Nýz;:ô|ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1óëßñt|Ž½;õèìëÓ¿D"I$’I$’I$’I$’I$’I$’I$’I$’I$’I$‘B$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$Bôï×¿âèùzwëÑÙ×§gGR1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ*9GIŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÄÙÊ:;õïøº>G^�úôvuéÙÑÄŽï�µÿ NÒ_2p‡’‡ÇøÑð<trŽŽý{þ.�‘×§~½�zvt|Yû‚ö¡"Ùì’X„!B„!B„!B„!B…ígîEî“yf*~I¯’I$’H„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B…À½Þ�ú÷ü]#¯Nýz;��~áñ'¾Å4×¸N¿¸Æ—÷íÿ q‰®y1Oü‘‡Ÿî15Ï¹}Ü{‘LçýßÅŸ¸|}>G·%c¦“-Wl•+š1¿ù²ÙöBû#�$säœ¼vr¿Å/NŽý{þ.�‘×§~½1ð3–t|Yû‡Ê™®Ÿ¨û2ûºlÎ×–g•ËlÉ�û}Æj\¦fçû™š'ŽYž³.ß“&YžYÌ¯÷~áñôù´ÿ þò¾´¹àÏ‹®Ìüùf{fXž{2§Ç,É_fUÒlÍOžÌŠÒg0¿Å/NŽý{þ.�‘×§~½³¯NÑñgîã+$WÈò>‹ª\¡¨þÒ±ÃèÉYøKìÈ°óÁšïŽ·ðeœ«âV)žQÄ¯÷~áñôùì|«“žQÇ¶ø‘§ý§³èu<$_»ÁkÂ)¾Ñí^e'Áí”¿Å	!:9:;õïøº>G^�úôvuéÙÑñgîr&š1ÕsÁßƒž8"¥ð‰yyrCŽ81ÍräÂ§�j1{¹ö‘�t¿Þ|Yû‡ÇÓä'$¶$EyF5ôBú!ý×Ñ�ý×Ñ%	‰Ô£ŽRc«>(èï×¿âèùzwëÑÙ×§gG2Ç¤’��Ìd‰'dì’I$’I$’I$’I$’I$’I$’I‘ÞC‰:=•Ù<y$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$��>TÙNÐÔ££¿^ÿ ‹£ŠàåúôvuéÙÑÊ9|¢Ñ�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2…³‡Ë8G¹ž‹FC!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!�Èd2†C!t7ô{_ƒÚŽŽý{þ.‡î+‚‡Ï¯Gg^��z&"I$’I$’I$’I$’I$’I$’I$’I$’I$’I—ªb$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Iôèï×¿âèæ…À¸~½�zwè„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!Ó¿^ÿ ‹£äuéß¯Gg^�‘ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ>}{þ.�‘×§~½�›{þ.�‘×§~½�z/óBõïøº>G^�úôvtqèÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcÆ1ŒcôçÓ¿âèùzwëÑÙ×§/ú„!B„!B„!B„!B„!Bþ„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B¯×¿âèùzwëÑÙ×§gGB„!B„!B„!B„!B„!Bg'B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!B„!3“£¿^ÿ ‹£äuéß¯Gg^��"ª¸EÒä²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë,²Ë•ÉS\3™8E]t[E–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–Ye–YiÙÊ:;õïøº>G^�úôvuéÙÑñg9	ö¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'DèŸk8È|N„ë²}¤"	$’I$’I!I$è�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tOUÑÑÑß¯ÅÑò:ôï×£³¯NÎ�‹?pø¢cË1sÇ&>9äÅÏ“û0íŸÙ�/&:|&*_ï~,ýÃãéò=±Èñ×“Ýö'öBòÈd/²8òcÙ�ý‘Ç<�—“Úúg»ì÷¿'+üKÑòôèï×¿âèùzwëÑØ¸ôìèø³÷1•…>•dòRÇýÅ,œ{‹©êŒÜÿ s2¯,¥?Ü^LÉ{‡—{ÿ {ñgîO‘Î2¹l¼tq>L”úeÊí–Ÿ“#ë“+û2¯³"\rdºã’îy+)r{¥‰z>^�ú÷ü]#¯NýyCLhg,èø³÷Ú/#|#'oƒýD¦’gúšÉá™é.S/FTºGúŽ|34æžS*1Jg_ï>,ýÃãéò>'¹>Š|´Œ¾ïqÚ/Ž‘•¿N{CãÀøð[ú)Whøx)ö‘’2x…Ïø•$/w§G~½ÿ GÈëÓ¿^DýxgGÅŸ¸säòˆkÁŠ¿âbçŸiŠâcÑ�ÿ ÄÅ_ñ1ã®T‹¤¿ÞüYû‡ÇÓä|Dü�×‚9ðBú!ýßÑè’HD'àžkÁ	óÀ¥‰B”ûÙÒ:;õïøº>G^�ÿ _gGÅžÜ„û|�AANÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dìŸo“Ý�ø�
k²xòNÉÙAl��A;'d²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉÙ;'dì�“²vNÉØ’|1Ó}Ž¬~Ôtwëßñt|Ž½;þ¾ÎŽPùå�Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L†F>yg÷"¥òŒˆÊe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2™L¦S)”Êe2Qmøk”{QÑß¯ÅÑò:ôïúû:ôL�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'DèKÓ‘2tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'Dè�¢tN‰Ñ:'D£ƒ£¿^ÿ ‹£äuéßõöuþfèï×¿âèùzwý|?óG/×¿êÇÿ Ùÿ û#ÿ dcÿ ìŒ\y1{¼˜¸òbãÊ1óýÆ=˜öŒ{F=£Ñ�hÅ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÇ³Ì{1ìÅ³Ñ�f>¸ÅÇ”cÿ ìŒý‘�ÿ ²1ÿ öGå?)ùOÊuÿ Ê|¿ùN¿ùN¿ùNÿ ùOÊ~có˜üÇæ?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ùOÊ~SòŸ”ü§å?)ù�Êwÿ Ê~SòŸ”ü§å?ÿÄ             `p€°ÐàÿÚ  ÷–G¾`                                         Zj»ŠÍWqYªî+5]Åg NUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUøâÿÄ               ÀàÿÚ ? ¿ÿ pÿÄ               àÿÚ  oGäÿ ÿÄ               ÀàÿÚ ? ¿ÿ pÿÙPK     ™ŠU]¤†ª ¯h ¯h 5  includes/modules/schema/assets/js/schema-gutenberg.jsnu „[µü¤        !function(){var e={694:function(e,r,a){"use strict";var t=a(925);function i(){}function n(){}n.resetWarningCache=i,e.exports=function(){function e(e,r,a,i,n,o){if(o!==t){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function r(){return e}e.isRequired=e;var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:r,element:e,elementType:e,instanceOf:r,node:e,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r,checkPropTypes:n,resetWarningCache:i};return a.PropTypes=a,a}},556:function(e,r,a){e.exports=a(694)()},925:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},942:function(e,r){var a;!function(){"use strict";var t={}.hasOwnProperty;function i(){for(var e="",r=0;r<arguments.length;r++){var a=arguments[r];a&&(e=o(e,n(a)))}return e}function n(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return i.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var r="";for(var a in e)t.call(e,a)&&e[a]&&(r=o(r,a));return r}function o(e,r){return r?e?e+" "+r:e+r:e}e.exports?(i.default=i,e.exports=i):void 0===(a=function(){return i}.apply(r,[]))||(e.exports=a)}()}},r={};function a(t){var i=r[t];if(void 0!==i)return i.exports;var n=r[t]={exports:{}};return e[t](n,n.exports,a),n.exports}a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,{a:r}),r},a.d=function(e,r){for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=lodash,r=wp.hooks,t=wp.i18n,i=wp.data,n=wp.components,o=wp.apiFetch;var s=a.n(o);const l={version:"1.0.0",properties:{author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math")}}}},rating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}},bookEditions:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Edition","rank-math"),help:(0,t.__)("Either a specific edition of the written work, or the volume of the work","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Book"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Title","rank-math"),help:(0,t.__)("The title of the tome. Use for the title of the tome if it differs from the book. *Optional when tome has the same title as the book","rank-math")}}},bookEdition:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Edition","rank-math"),help:(0,t.__)("The edition of the book","rank-math")}}},isbn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("ISBN","rank-math"),help:(0,t.__)("The ISBN of the print book","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("URL","rank-math"),help:(0,t.__)("URL specific to this edition if one exists","rank-math")}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Date Published","rank-math"),help:(0,t.__)("Date of first publication of this tome","rank-math")}}},bookFormat:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Book Format","rank-math"),desc:"The format of the book.",options:{"https://schema.org/EBook":"eBook","https://schema.org/Hardcover":"Hardcover","https://schema.org/Paperback":"Paperback","https://schema.org/AudioBook":"Audio Book"},default:"https://schema.org/Hardcover"}}}},provider:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Course Provider","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Organization"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Provider Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Provider URL","rank-math")}}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Repeat Count","rank-math"),help:(0,t.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Repeat Frequency","rank-math"),help:(0,t.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":(0,t.__)("Select Repeat Frequency","seo-by-rank-math"),Daily:(0,t.__)("Daily","seo-by-rank-math"),Weekly:(0,t.__)("Weekly","seo-by-rank-math"),Monthly:(0,t.__)("Monthly","seo-by-rank-math"),Yearly:(0,t.__)("Yearly","seo-by-rank-math")},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Start Date","rank-math"),help:(0,t.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("End Date","rank-math"),help:(0,t.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}},courseInstance:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Instance","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"CourseInstance"}},courseMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Course Mode","rank-math"),help:(0,t.__)("The medium through which the course will be delivered.","rank-math"),options:{Online:"Online",Onsite:"Onsite",Blended:"Blended"},default:"Online"}}},courseWorkload:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Course Workload","rank-math"),help:(0,t.__)("Total time to watch all videos and complete all assignments and exams for the course. Use the 8601 format. Example: PT22H","rank-math")}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Repeat Count","rank-math"),help:(0,t.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Repeat Frequency","rank-math"),help:(0,t.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":"Select Repeat Frequency",Daily:"Daily",Weekly:"Weekly",Monthly:"Monthly",Yearly:"Yearly"},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Start Date","rank-math"),help:(0,t.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("End Date","rank-math"),help:(0,t.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math")}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math")}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math")}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math")}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math")}}}},"virtual-location":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{value:"VirtualLocation"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Online Event URL","rank-math"),help:(0,t.__)("The URL of the online event, where people can join. This property is required if your event is happening online","rank-math")}}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}},"physical-location":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue Name","rank-math"),help:(0,t.__)("The venue name.","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue URL","rank-math"),help:(0,t.__)("Website URL of the venue","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}}},"event-performer":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Performer Information","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Performer","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Person"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Website or Social Link","rank-math")}}}},"monetary-amount-unit":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Salary (Recommended)","rank-math"),help:(0,t.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Payroll (Recommended)","rank-math"),help:(0,t.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}},"monetary-amount":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"MonetaryAmount"}},currency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Salary Currency","rank-math"),help:(0,t.__)("ISO 4217 Currency code. Example: EUR","rank-math"),classes:"col-4"}}},value:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Salary (Recommended)","rank-math"),help:(0,t.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Payroll (Recommended)","rank-math"),help:(0,t.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}}},"hiring-organization":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Organization"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Hiring Organization","rank-math"),placeholder:"%org_name%",help:(0,t.__)("The name of the company. Leave empty to use your own company information.","rank-math"),classes:"col-4"}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Organization URL (Recommended)","rank-math"),placeholder:"%org_url%",help:(0,t.__)("The URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}},logo:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Organization Logo (Recommended)","rank-math"),placeholder:"%org_logo%",help:(0,t.__)("Logo URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}}},brand:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Brand"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Brand Name","rank-math")}}}},calories:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"NutritionInformation"}},calories:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Calories","rank-math"),help:(0,t.__)("The number of calories in the recipe. Optional.","rank-math")}}}},"video-object":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Video","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"VideoObject"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Name","rank-math"),help:(0,t.__)("A recipe video Name","rank-math"),classes:"col-6"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),help:(0,t.__)("A recipe video Description","rank-math")}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Video URL","rank-math"),help:(0,t.__)("A video URL. Optional.","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Content URL","rank-math"),help:(0,t.__)("A URL pointing to the actual video media file","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Recipe Video Thumbnail","rank-math"),help:(0,t.__)("A recipe video thumbnail URL","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-6"}}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Video Upload Date","rank-math"),classes:"col-6"}}}},instructionText:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"HowtoStep"}},text:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea"}}}},instructions:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Recipe Instructions","rank-math"),help:(0,t.__)("Either a specific edition of the written work, or the volume of the work","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"HowToSection"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Name","rank-math"),help:(0,t.__)("Instruction name of the recipe.","rank-math")}}},itemListElement:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"instructionText",arrayProps:{map:{classes:"show-delete-property-group"}},classes:"show-add-property-group",field:{label:(0,t.__)("Instruction Texts","rank-math")}}}},"geo-coordinates":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Geo Coordinates","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"GeoCoordinates"}},latitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Latitude","rank-math")}}},longitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Longitude","rank-math")}}}},"opening-hours":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Timings","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"OpeningHoursSpecification"}},dayOfWeek:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"checkbox",label:(0,t.__)("Open Days","rank-math"),options:{monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday"},default:[]}}},opens:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,t.__)("Opening Time","rank-math"),classes:"col-6",placeholder:"09:00 AM"}}},closes:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,t.__)("Closing Time","rank-math"),classes:"col-6",placeholder:"05:00 PM"}}}},cuisine:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1},cuisine:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Cuisine","rank-math")}}}}},schemas:{Article:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Article","rank-math"),defaultEn:"Article"},headline:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},keywords:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Keywords","rank-math"),placeholder:"%keywords%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Article Type","rank-math"),classes:"show-property",options:{Article:"Article",BlogPosting:"Blog Post",NewsArticle:"News Article"},notice:{status:"warning",className:"article-notice",content:(0,t.__)("Google does not allow Person as the Publisher for articles. Organization will be used instead.","rank-math")}}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Published Date","rank-math"),classes:"hide-group",default:"%date(Y-m-d\\TH:i:sP)%"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Modified Date","rank-math"),classes:"hide-group",default:"%modified(Y-m-d\\TH:i:sP)%"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},articleSection:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Article Section","rank-math"),classes:"hide-group",default:"%primary_taxonomy_terms%"}}}},Book:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Book","rank-math"),defaultEn:"Book"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("URL","rank-math")}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}},hasPart:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"bookEditions",arrayProps:{map:{classes:"show-delete-property-group"}},field:{label:(0,t.__)("Editions","rank-math")}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Course:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Course","rank-math"),defaultEn:"Course"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},provider:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Course Provider","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Organization"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Provider Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Provider URL","rank-math")}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},hasCourseInstance:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Instance","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"CourseInstance"}},courseMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Course Mode","rank-math"),help:(0,t.__)("The medium through which the course will be delivered.","rank-math"),options:{Online:"Online",Onsite:"Onsite",Blended:"Blended"},default:"Online"}}},courseWorkload:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Course Workload","rank-math"),help:(0,t.__)("Total time to watch all videos and complete all assignments and exams for the course. Use the 8601 format. Example: PT22H","rank-math")}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Repeat Count","rank-math"),help:(0,t.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Repeat Frequency","rank-math"),help:(0,t.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":"Select Repeat Frequency",Daily:"Daily",Weekly:"Weekly",Monthly:"Monthly",Yearly:"Yearly"},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Start Date","rank-math"),help:(0,t.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("End Date","rank-math"),help:(0,t.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math"),help:(0,t.__)("The pricing category of the course. Example: Free, Partially Free, Subscription, Paid","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math"),help:(0,t.__)("The numerical price of the course, if applicable.","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math"),help:(0,t.__)("The currency of the price of the course, in ISO 4217 currency format (3 letter code), if applicable.","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}}},Event:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Event","rank-math"),defaultEn:"Event"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"select",label:(0,t.__)("Event Type","rank-math"),help:(0,t.__)("Type of the event","rank-math"),classes:"show-property col-4",options:{Event:"Event",BusinessEvent:"Business Event",ChildrensEvent:"Childrens Event",ComedyEvent:"Comedy Event",DanceEvent:"Dance Event",DeliveryEvent:"Delivery Event",EducationEvent:"Education Event",ExhibitionEvent:"Exhibition Event",Festival:"Festival",FoodEvent:"Food Event",LiteraryEvent:"Literary Event",MusicEvent:"Music Event",PublicationEvent:"Publication Event",SaleEvent:"Sale Event",ScreeningEvent:"Screening Event",SocialEvent:"Social Event",SportsEvent:"Sports Event",TheaterEvent:"Theater Event",VisualArtsEvent:"Visual Arts Event"}}}},eventStatus:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Event Status","rank-math"),help:(0,t.__)("Current status of the event (optional)","rank-math"),options:{"":"None",EventScheduled:"Scheduled",EventCancelled:"Cancelled",EventPostponed:"Postponed",EventRescheduled:"Rescheduled",EventMovedOnline:"Moved Online"},classes:"col-4",default:"EventScheduled"}}},eventAttendanceMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Event Attendance Mode","rank-math"),help:(0,t.__)("Indicates whether the event occurs online, offline at a physical location, or a mix of both online and offline.","rank-math"),options:{OfflineEventAttendanceMode:"Offline",OnlineEventAttendanceMode:"Online",MixedEventAttendanceMode:"Online + Offline"},default:"OfflineEventAttendanceMode",classes:"col-4"}}},VirtualLocation:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header",dependency:[{field:"eventAttendanceMode",value:["OnlineEventAttendanceMode","MixedEventAttendanceMode"]}]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{value:"VirtualLocation"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Online Event URL","rank-math"),help:(0,t.__)("The URL of the online event, where people can join. This property is required if your event is happening online","rank-math")}}}},location:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header",dependency:[{field:"eventAttendanceMode",value:["OfflineEventAttendanceMode","MixedEventAttendanceMode"]}]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue Name","rank-math"),help:(0,t.__)("The venue name.","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue URL","rank-math"),help:(0,t.__)("Website URL of the venue","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}}},performer:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Performer Information","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Performer","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Person"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Website or Social Link","rank-math")}}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Start Date","rank-math"),help:(0,t.__)("Date and time of the event","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("End Date","rank-math"),help:(0,t.__)("End date and time of the event","rank-math"),classes:"col-4"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math"),classes:"hide-group",placeholder:"General Admission"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math"),classes:"hide-group",placeholder:"primary"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math")}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math")}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math")}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},JobPosting:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Job Posting","rank-math"),defaultEn:"Job Posting"},title:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},baseSalary:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"MonetaryAmount"}},currency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Salary Currency","rank-math"),help:(0,t.__)("ISO 4217 Currency code. Example: EUR","rank-math"),classes:"col-4"}}},value:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Salary (Recommended)","rank-math"),help:(0,t.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Payroll (Recommended)","rank-math"),help:(0,t.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}}},datePosted:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Date Posted","rank-math"),placeholder:"%date(Y-m-d)%",help:(0,t.__)("The original date on which employer posted the job. You can leave it empty to use the post publication date as job posted date","rank-math"),classes:"col-4"}}},validThrough:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Expiry Posted","rank-math"),help:(0,t.__)("The date when the job posting will expire. If a job posting never expires, or you do not know when the job will expire, do not include this property","rank-math"),classes:"col-4"}}},unpublish:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Unpublish when expired","rank-math"),options:{on:"Yes",off:"No"},help:(0,t.__)("If checked, post status will be changed to Draft and its URL will return a 404 error, as required by the Rich Result guidelines","rank-math"),classes:"col-4",default:"on"}}},employmentType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"checkbox",multiple:!0,label:(0,t.__)("Employment Type (Recommended)","rank-math"),help:(0,t.__)("Type of employment. You can choose more than one value","rank-math"),options:{"":"None",FULL_TIME:"Full Time",PART_TIME:"Part Time",CONTRACTOR:"Contractor",TEMPORARY:"Temporary",INTERN:"Intern",VOLUNTEER:"Volunteer",PER_DIEM:"Per Diem",OTHER:"Other"},default:[]}}},hiringOrganization:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Organization"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Hiring Organization","rank-math"),placeholder:"%org_name%",help:(0,t.__)("The name of the company. Leave empty to use your own company information.","rank-math"),classes:"col-4"}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Organization URL (Recommended)","rank-math"),placeholder:"%org_url%",help:(0,t.__)("The URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}},logo:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Organization Logo (Recommended)","rank-math"),placeholder:"%org_logo%",help:(0,t.__)("Logo URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}}},id:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Posting ID (Recommended)","rank-math"),help:(0,t.__)("The hiring organization's unique identifier for the job.","rank-math"),classes:"col-6"}}},jobLocation:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue Name","rank-math"),help:(0,t.__)("The venue name.","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Venue URL","rank-math"),help:(0,t.__)("Website URL of the venue","rank-math"),classes:"hide-group"}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Music:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Music","rank-math"),defaultEn:"Music"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("URL","rank-math"),placeholder:"%url%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Music Type","rank-math"),classes:"show-property",options:{MusicGroup:"MusicGroup",MusicAlbum:"MusicAlbum"},default:"MusicGroup"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Person:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Person","rank-math"),defaultEn:"Person"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},email:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Email","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}},gender:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Gender","rank-math"),classes:"col-6"}}},jobTitle:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Job title","rank-math"),help:(0,t.__)("The job title of the person (for example, Financial Manager).","rank-math"),classes:"col-6"}}}},Product:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Product","rank-math"),defaultEn:"Product"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Product name","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},sku:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Product SKU","rank-math")}}},brand:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Brand"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Brand Name","rank-math")}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},gtin8:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Gtin","rank-math"),classes:"hide-group"}}},mpn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("MPN","rank-math"),classes:"hide-group"}}},isbn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("ISBN","rank-math"),classes:"hide-group"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math"),classes:"hide-group",placeholder:"%url%"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math")}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}}},Recipe:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Recipe","rank-math"),defaultEn:"Recipe"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Published Date","rank-math"),classes:"hide-group",default:"%date(Y-m-d\\TH:i:sP)%"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},prepTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Preparation Time","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},cookTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Cooking Time","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},totalTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Total Time","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},recipeCategory:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Type","rank-math"),help:(0,t.__)("Type of dish, for example appetizer, or dessert.","rank-math"),classes:"col-4"}}},recipeCuisine:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Cuisine","rank-math"),help:(0,t.__)("The cuisine of the recipe (for example, French or Ethiopian).","rank-math"),classes:"col-4"}}},keywords:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Keywords","rank-math"),help:(0,t.__)("Other terms for your recipe such as the season, the holiday, or other descriptors. Separate multiple entries with commas.","rank-math"),classes:"col-4"}}},recipeYield:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Recipe Yield","rank-math"),help:(0,t.__)("Quantity produced by the recipe, for example 4 servings","rank-math"),classes:"col-4"}}},nutrition:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"NutritionInformation"}},calories:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Calories","rank-math"),help:(0,t.__)("The number of calories in the recipe. Optional.","rank-math")}}}},recipeIngredient:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"show-add-property show-delete-property",field:{label:(0,t.__)("Recipe Ingredients","rank-math"),help:(0,t.__)("Recipe ingredients, add one item per line","rank-math")}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}},video:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Video","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"VideoObject"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Name","rank-math"),help:(0,t.__)("A recipe video Name","rank-math"),classes:"col-6"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),help:(0,t.__)("A recipe video Description","rank-math")}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Video URL","rank-math"),help:(0,t.__)("A video URL. Optional.","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Content URL","rank-math"),help:(0,t.__)("A URL pointing to the actual video media file","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Recipe Video Thumbnail","rank-math"),help:(0,t.__)("A recipe video thumbnail URL","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-6"}}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,t.__)("Video Upload Date","rank-math"),classes:"col-6"}}}},instructionType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,t.__)("Instruction Type","rank-math"),options:{SingleField:"Single Field",HowToStep:"How To Step"},default:"SingleField"}}},instructionsSingleField:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Recipe Instructions","rank-math")},dependency:[{field:"instructionType",value:"SingleField"}]}},instructionsHowToStep:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"instructions",arrayProps:{map:{classes:"show-delete-property-group"}},field:{label:(0,t.__)("Recipe Instructions","rank-math")},dependency:[{field:"instructionType",value:["HowToStep"]}]}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Restaurant:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Restaurant","rank-math"),defaultEn:"Restaurant"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},telephone:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Phone Number","rank-math")}}},priceRange:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Price Range","rank-math"),classes:"col-4"}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,t.__)("Country","rank-math")}}}},geo:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Geo Coordinates","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"GeoCoordinates"}},latitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Latitude","rank-math")}}},longitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Longitude","rank-math")}}}},openingHoursSpecification:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Timings","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"OpeningHoursSpecification"}},dayOfWeek:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"checkbox",label:(0,t.__)("Open Days","rank-math"),options:{monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday"},default:[]}}},opens:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,t.__)("Opening Time","rank-math"),classes:"col-6",placeholder:"09:00 AM"}}},closes:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,t.__)("Closing Time","rank-math"),classes:"col-6",placeholder:"05:00 PM"}}}},servesCuisine:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"show-add-property show-delete-property",field:{label:(0,t.__)("Serves Cuisine","rank-math")}}},hasMenu:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Menu URL","rank-math"),help:(0,t.__)("URL pointing to the menu of the restaurant.","rank-math"),classes:"col-6"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Service:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Service","rank-math"),defaultEn:"Service"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},serviceType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Service Type","rank-math"),help:(0,t.__)("The type of service being offered, e.g. veterans' benefits, emergency relief, etc.","rank-math"),classes:"col-4"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},SoftwareApplication:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Software","rank-math"),defaultEn:"Software"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,t.__)("Review Location","rank-math"),help:(0,t.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},operatingSystem:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Operating System","rank-math"),help:(0,t.__)("For example, Windows 7, OSX 10.6, Android 1.6","rank-math"),classes:"col-6"}}},applicationCategory:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Application Category","rank-math"),help:(0,t.__)("For example, Game, Multimedia","rank-math"),classes:"col-6"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,t.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,t.__)("Availability","rank-math"),help:(0,t.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid From","rank-math"),help:(0,t.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,t.__)("Price Valid Until","rank-math"),help:(0,t.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,t.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating","rank-math"),help:(0,t.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Minimum","rank-math"),help:(0,t.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,t.__)("Rating Maximum","rank-math"),help:(0,t.__)("Rating maximum score","rank-math"),placeholder:5}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},VideoObject:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("Video","rank-math"),defaultEn:"Video"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,t.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,t.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,t.__)("Shortcode","rank-math"),help:(0,t.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Upload Date","rank-math"),classes:"hide-group",placeholder:"%date(Y-m-d\\TH:i:sP)%"}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Embed URL","rank-math"),help:(0,t.__)("A URL pointing to the embeddable player for the video. Example: <code>https://www.youtube.com/embed/VIDEOID</code>","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Content URL","rank-math"),help:(0,t.__)("A URL pointing to the actual video media file like MP4, MOV, etc. Please leave it empty if you don't know the URL.","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Duration","rank-math"),help:(0,t.__)("ISO 8601 duration format. Example: 1H30M","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,t.__)("Video Thumbnail","rank-math"),help:(0,t.__)("A video thumbnail URL","rank-math"),classes:"hide-group",placeholder:"%post_thumbnail%"}}}},WooCommerceProduct:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("WooCommerce Product","rank-math"),defaultEn:"WooCommerce Product"}},EDDProduct:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,t.__)("EDD Product","rank-math"),defaultEn:"EDD Product"}}}};const m={set:function(e,r,a){return!!e&&(localStorage.setItem(e,JSON.stringify({value:r,expires:this.expiry(a)})),!0)},get:function(e){if(!e)return!1;var r=localStorage.getItem(e);return!!r&&((r=JSON.parse(r)).expires&&Date.now()>r.expires?(localStorage.removeItem(e),!1):r.value)},remove:function(e){return!!e&&(localStorage.removeItem(e),!0)},expiry:function(e){if(!e)return!1;if(-1===e){var r=new Date;return r.setYear(1970),r.getTime()}var a=parseInt(e),t=e.replace(a,"");return"d"===t&&(a=24*a*60*60*1e3),"h"===t&&(a=60*a*60*1e3),"m"===t&&(a=60*a*1e3),"s"===t&&(a*=1e3),Date.now()+a}};function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(e,r){for(var a=0;a<r.length;a++){var t=r[a];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,u(t.key),t)}}function c(e,r,a){return(r=u(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function u(e){var r=function(e,r){if("object"!=d(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=d(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==d(r)?r:r+""}var h="rank_math_schema_templates_store",y=function(){return a=function e(){!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"cache",null),c(this,"templates",null),c(this,"verion","1.1.0"),"product"!==rankMath.postType&&delete l.schemas.WooCommerceProduct,"download"!==rankMath.postType&&delete l.schemas.EDDProduct,this.cache=(0,r.applyFilters)("rank_math_schema_maps",l),(0,r.doAction)("rank_math_schema_template_loaded")},i=[{key:"verifyCache",value:function(){var e=m.get(h);return!1!==e&&this.version===e.version&&(this.cache=e,(0,r.doAction)("rank_math_schema_template_loaded"),!0)}},{key:"fetchStore",value:function(){var e=this;s()({method:"GET",url:"//"+window.location.host+"/wp-json/rankmath/v1/getSchemas"}).then(function(a){m.set(h,a,"30d"),e.cache=a,(0,r.doAction)("rank_math_schema_template_loaded")})}},{key:"getMap",value:function(r){var a=(0,e.get)(this.cache.properties,r,!1);return a||(0,e.get)(this.cache.schemas,r,!1)}},{key:"getTemplates",value:function(){var r=this,a=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return null===this.templates&&(this.templates=[],(0,e.forEach)(this.cache.schemas,function(a,i){var n=(0,e.get)(a,"map.title",i);r.templates.push({type:i,title:"WooCommerceProduct"!==i?n:(0,t.__)("WooCommerce Product","seo-by-rank-math")})}),a||this.templates.push({type:"PodcastEpisode",title:(0,t.__)("Podcast Episode","seo-by-rank-math"),isPro:!0},{type:"Dataset",title:(0,t.__)("Dataset","seo-by-rank-math"),isPro:!0},{type:"FactCheck",title:(0,t.__)("Fact Check","seo-by-rank-math"),isPro:!0},{type:"Movie",title:(0,t.__)("Movie","seo-by-rank-math"),isPro:!0},{type:"FAQ",title:(0,t.__)("FAQ","seo-by-rank-math"),isPro:!0},{type:"HowTo",title:(0,t.__)("HowTo","seo-by-rank-math"),isPro:!0}),this.templates=(0,e.orderBy)(this.templates,"type")),this.templates}}],i&&p(a.prototype,i),n&&p(a,n),Object.defineProperty(a,"prototype",{writable:!1}),a;var a,i,n}(),f=new y;function _(e){return f.getMap(e)}function R(e,r){var a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!a){if(Array.isArray(e)||(a=function(e,r){if(e){if("string"==typeof e)return b(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?b(e,r):void 0}}(e))||r&&e&&"number"==typeof e.length){a&&(e=a);var t=0,i=function(){};return{s:i,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o=!0,s=!1;return{s:function(){a=a.call(e)},n:function(){var e=a.next();return o=e.done,e},e:function(e){s=!0,n=e},f:function(){try{o||null==a.return||a.return()}finally{if(s)throw n}}}}function b(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}function k(r,a){if((0,e.isEmpty)(r)||a.id===r)return a;var t,i=R(a.properties);try{for(i.s();!(t=i.n()).done;){var n=t.value;if(n.id===r)return n;if(n.map.isGroup){var o=k(r,n);if(o)return o}}}catch(e){i.e(e)}finally{i.f()}}function v(r,a){if((0,e.isEmpty)(r))return a;var t,i=R(a.properties);try{for(i.s();!(t=i.n()).done;){var n=t.value;if(n.property===r)return n.value=(0,e.has)(a.metadata,r)?a.metadata[r]:n.value,n}}catch(e){i.e(e)}finally{i.f()}return!1}const g={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let A;const w=new Uint8Array(16);function G(){if(!A&&(A="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!A))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return A(w)}const q=[];for(let e=0;e<256;++e)q.push((e+256).toString(16).slice(1));function S(e,r=0){return q[e[r+0]]+q[e[r+1]]+q[e[r+2]]+q[e[r+3]]+"-"+q[e[r+4]]+q[e[r+5]]+"-"+q[e[r+6]]+q[e[r+7]]+"-"+q[e[r+8]]+q[e[r+9]]+"-"+q[e[r+10]]+q[e[r+11]]+q[e[r+12]]+q[e[r+13]]+q[e[r+14]]+q[e[r+15]]}const E=function(e,r,a){if(g.randomUUID&&!r&&!e)return g.randomUUID();const t=(e=e||{}).random||(e.rng||G)();if(t[6]=15&t[6]|64,t[8]=63&t[8]|128,r){a=a||0;for(let e=0;e<16;++e)r[a+e]=t[e];return r}return S(t)};function P(){return{id:"g-".concat(E()),property:"",properties:[],map:{isGroup:!0,isArray:!1,isRequired:!1,isRecommended:!1}}}function O(){return{id:"p-".concat(E()),property:"",value:"",map:{isGroup:!1,isArray:!1,isRequired:!1,isRecommended:!1}}}function C(e){return e.id="g-".concat(E()),e.properties.forEach(function(e){e.map.isGroup?C(e):e.id="p-".concat(E())}),e}var T=function(r){if(!r)return P();var a=r.map.isGroup?P():O();return(0,e.forEach)(r,function(r,t){if("map"!==t){var i=O();r.map.isGroup&&(i=T(r)),i.map=r.map,i.property=t,i.value=(0,e.get)(r.map,"value",(0,e.get)(r.map,"field.default","")),a.properties.push(i)}else(0,e.has)(r,"title")&&(a.map.title=r.title,a.map.defaultEn=r.defaultEn)}),a};function j(r){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=!1;arguments.length>2&&void 0!==arguments[2]&&arguments[2]||(t=(0,e.isString)(r)?_(r):r);var i=T(t);return(i=(0,e.merge)(i,a)).property=r,i}function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function N(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function L(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=x(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=x(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==x(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function M(r,a){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(0,e.isEmpty)(a)||(0,e.forEach)(a,function(a,i){if("@context"!==i){var n=v(i,r);if(n)D(n,i,a,t);else{var o=!t&&_(i);(0,e.isArray)(a)?(n=P()).map.isArray=!0:n=(0,e.isObject)(a)||o?M(o?j(o):P(),a,t):O(),D(n,i,a,t),n.property=i,r.properties.push(n)}}}),r}var D=function(e,a,t){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!a)return e;var n=(0,r.applyFilters)("rank_math_schema_convert_value",!1,e,a,t,i);return!1!==n||!1!==(n=(0,r.applyFilters)("rank_math_schema_convert_"+a,!1,e,t))?n:(e.value=t,e)};function I(e,r){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return M(j(r,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a),e,a)}function U(a){var t=function(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?N(Object(a),!0).forEach(function(r){L(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):N(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}({},a),i=(0,r.applyFilters)("rank_math_schema_type",(0,e.get)(t,"@type","")),n=(0,e.get)(t,"metadata",{type:"template"});delete t.metadata;var o="custom"===n.type?P():j(i);(0,e.has)(o.map,"title")&&!(0,e.has)(n,"title")&&(n.title=o.map.title),(0,e.has)(n,"title")&&n.title===o.map.defaultEn&&(n.title=o.map.title),o.property=(0,e.get)(n,"title",i),o.metadata=n;var s=v("@type",o);if(!1!==s&&""!==s.value&&(t["@type"]=s.value),o=M(o,t,"custom"===n.type),"custom"!==n.type){var l=o.properties.pop();o.properties.unshift(l)}return o}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function H(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function B(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=F(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=F(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==F(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}var V=function(r){if((0,e.isNumber)(r.value)||!(0,e.isEmpty)(r.value)||!(0,e.isUndefined)(r.map.field)&&"toggle"===r.map.field.type)return r.value;var a=(0,e.get)(r,"map.field.placeholder");return(0,e.isEmpty)(a)?(0,e.get)(r,"map.field.default",!1):a},Y=function(a){if((0,e.isEmpty)(a)||(0,e.isUndefined)(a.properties))return a;var t={};return"metadata"in a&&(t.metadata=function(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?H(Object(a),!0).forEach(function(r){B(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):H(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}({},a.metadata),t.metadata.title=t.metadata.title?t.metadata.title:a.property),(0,e.map)(a.properties,function(a){var i=(0,e.get)(a,"map.save",!0),n=(0,e.get)(a,"map.isHidden",!1);if((0,e.isEmpty)(a.properties)||(0,e.isEmpty)(a.properties[0])||(0,e.isEmpty)(a.properties[0].property)||"0"!==a.properties[0].property||(a.map.isArray=!0),!1!==i&&!n)if("metadata"!==i){var o=function(e){var a=!1;return a=(0,r.applyFilters)("rank_math_schema_process_value",a,e),(0,r.applyFilters)("rank_math_schema_process_"+e.property,a,e)}(a);if(!1===o){if(a.map.isArray){var s=[];return(0,e.map)(a.properties,function(r){s.push((0,e.isUndefined)(r.properties)?r.value:W(r))}),void(t[a.property]=s)}if(a.map.isGroup){var l=W(a),m=(0,e.get)(l,"@type",(0,e.isUndefined)(l["@id"])?a.property:"");return m&&(l["@type"]=m),void(t[a.property]=l)}var d=V(a);((0,e.isNumber)(d)||(0,e.isBoolean)(d)||!(0,e.isEmpty)(d))&&d&&(t[a.property]=d)}else t[a.property]=o}else{var p=V(a);if((0,e.isEmpty)(p)&&"toggle"!==a.map.field.type)return;t.metadata[a.property]=p}}),t};function W(e){var a=Y(e);return a=(0,r.applyFilters)("rank_math_processed_schema_"+a["@type"],a),(0,r.applyFilters)("rank_math_processed_schema",a)}function z(e){return"string"!=typeof e&&(e=JSON.stringify(e,null,2)),(e=e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,function(e){var r="number";return/^"/.test(e)?r=/:$/.test(e)?"key":"string":/true|false/.test(e)?r="boolean":/null/.test(e)&&(r="null"),'<span class="'+r+'">'+e+"</span>"})}function J(r,a){if(!(0,e.has)(r,"map.dependency"))return!0;var t=null,i=r.map.dependency,n=(0,e.get)(i,"relation","or");return(0,e.forEach)(i,function(r){var i,o,s,l=v(r.field,a),m=(i=l.value,o=(0,e.get)(r,"value",!1),s=(0,e.get)(r,"comparison","="),(0,e.isArray)(o)&&"="===s?o.includes(i):(0,e.isArray)(o)&&"!="===s?!o.includes(i):"="===s&&i===o||"=="===s&&i===o||">="===s&&i>=o||"<="===s&&i<=o||">"===s&&i>o||"<"===s&&i<o||"!="===s&&i!==o);if("or"===n&&m)return t=!0,!1;"and"===n&&(t=(null===t||t)&&m)}),!!t}window.rankMath=window.rankMath||{},window.rankMath.Helpers=window.rankMath.Helpers||{},window.rankMath.Helpers={generateValidSchema:U,prettyJSON:z,processSchema:W};const Q=wp.compose;function K(r){return(0,e.get)({off:"rm-icon rm-icon-schema",Article:"rm-icon rm-icon-post",Book:"rm-icon rm-icon-book",Course:"rm-icon rm-icon-course",Dataset:"rm-icon rm-icon-dataset",Event:"rm-icon rm-icon-calendar",FactCheck:"rm-icon rm-icon-fact-check",JobPosting:"rm-icon rm-icon-job",Local:"rm-icon rm-icon-local-seo",Movie:"rm-icon rm-icon-movie",Music:"rm-icon rm-icon-music",Product:"rm-icon rm-icon-cart",Products:"rm-icon rm-icon-cart",WooCommerceProduct:"rm-icon rm-icon-cart",Recipe:"rm-icon rm-icon-recipe",Restaurant:"rm-icon rm-icon-restaurant",Video:"rm-icon rm-icon-video",Videos:"rm-icon rm-icon-video",VideoObject:"rm-icon rm-icon-video",Person:"rm-icon rm-icon-users",Review:"rm-icon rm-icon-star","Review snippets":"rm-icon rm-icon-star",Service:"rm-icon rm-icon-service",Software:"rm-icon rm-icon-software",SoftwareApplication:"rm-icon rm-icon-software","Sitelinks searchbox":"rm-icon rm-icon-search",FAQ:"rm-icon rm-icon-faq",FAQPage:"rm-icon rm-icon-faq",HowTo:"rm-icon rm-icon-howto",Breadcrumbs:"rm-icon rm-icon-redirection",PodcastEpisode:"rm-icon rm-icon-podcast"},r,"rm-icon rm-icon-schema")}function $(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",t=rankMath.links[e]||"";if(!t)return"#";if(!r)return t;var i={utm_source:"Plugin",utm_medium:encodeURIComponent(r),utm_campaign:"WP"},n=t,o="",s=t.indexOf("#");-1!==s&&(n=t.substring(0,s),o=t.substring(s));var l=Object.keys(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join("&"),m=n.includes("?")&&!n.endsWith("?")?"&":"?";return n+m+l+o+a}a.dn($);const X=React;function Z(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var t,i,n,o,s=[],l=!0,m=!1;try{if(n=(a=a.call(e)).next,0===r){if(Object(a)!==a)return;l=!1}else for(;!(l=(t=n.call(a)).done)&&(s.push(t.value),s.length!==r);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,r)||function(e,r){if(e){if("string"==typeof e)return ee(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?ee(e,r):void 0}}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ee(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}const re=function(e){var r=e.onClick,a=e.children,i=(e.className,(0,X.useRef)()),o=Z((0,X.useState)(!1),2),s=o[0],l=o[1],m=function(e){i.current.contains(e.target)||l(!1)};return(0,X.useEffect)(function(){return s?document.addEventListener("mousedown",m):document.removeEventListener("mousedown",m),function(){document.removeEventListener("mousedown",m)}},[s]),wp.element.createElement("div",{ref:i,className:"rank-math-inline-confirmation"},!s&&a(l),s&&wp.element.createElement("div",{className:"rank-math-confirm-delete"},wp.element.createElement("span",null,(0,t.__)("Delete?","seo-by-rank-math")),wp.element.createElement(n.Button,{isLink:!0,onClick:function(){l(!1),r()}},wp.element.createElement("span",null,(0,t.__)("Yes","seo-by-rank-math"))),wp.element.createElement(n.Button,{isLink:!0,onClick:function(){return l(!1)}},wp.element.createElement("span",null,(0,t.__)("No","seo-by-rank-math")))))};var ae=(0,n.withFilters)("rankMath.schema.SchemaList")(function(r){var a=r.schemas,i=r.edit,o=r.trash,s=r.preview,l=r.showProNotice;return(0,e.isEmpty)(a)?null:wp.element.createElement("div",{className:"rank-math-schema-in-use"},wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,t.__)("Schema in Use","seo-by-rank-math")),l&&wp.element.createElement("div",{className:"components-notice rank-math-notice is-warning"},wp.element.createElement("div",{className:"components-notice__content"},(0,t.__)("Multiple Schemas are allowed in the","seo-by-rank-math")," ",wp.element.createElement("a",{href:$("pro","Schema Tab Notice"),rel:"noreferrer noopener",target:"_blank"},wp.element.createElement("strong",null,(0,t.__)("PRO Version","seo-by-rank-math"))))),(0,e.map)(a,function(r,a){return wp.element.createElement("div",{key:a,id:"rank-math-schema-item",className:"rank-math-schema-item row"},wp.element.createElement("strong",{className:"rank-math-schema-name"},wp.element.createElement("i",{className:K(r["@type"])}),(0,e.get)(r,"metadata.title",r["@type"])),wp.element.createElement("span",{className:"rank-math-schema-item-actions"},wp.element.createElement(n.Button,{className:"button rank-math-edit-schema",isLink:!0,onClick:function(){return i(a)}},wp.element.createElement("i",{className:"rm-icon rm-icon-edit"}),wp.element.createElement("span",null,(0,t.__)("Edit","seo-by-rank-math"))),wp.element.createElement(n.Button,{className:"button rank-math-preview-schema",isLink:!0,onClick:function(){return s(a)}},wp.element.createElement("i",{className:"rm-icon rm-icon-eye"}),wp.element.createElement("span",null,(0,t.__)("Preview","seo-by-rank-math"))),wp.element.createElement(re,{key:a,onClick:function(){return o(a)}},function(e){return wp.element.createElement(n.Button,{isLink:!0,className:"button rank-math-delete-schema",onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,t.__)("Delete","seo-by-rank-math")))})))}))});const te=(0,Q.compose)((0,i.withSelect)(function(e){var r=e("rank-math").getSchemas();return{schemas:r,showProNotice:1<=Object.keys(r).length}}),(0,i.withDispatch)(function(e){return{trash:function(r){e("rank-math").deleteSchema(r)},edit:function(r){e("rank-math").setEditingSchemaId(r),e("rank-math").toggleSchemaEditor(!0)},preview:function(r){e("rank-math").setEditingSchemaId(r),e("rank-math").setEditorTab("codeValidation"),e("rank-math").toggleSchemaEditor(!0)}}}))(ae),ie=jQuery;var ne=a.n(ie);function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function se(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function le(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?se(Object(a),!0).forEach(function(r){me(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):se(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}function me(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=oe(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=oe(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==oe(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function de(e){return function(e){if(Array.isArray(e))return pe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return pe(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?pe(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pe(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}const ce=function(){ne()(function(e){new ClipboardJS(".structured-data-copy").on("success",function(r){var a=e(r.trigger);a.addClass("copied"),setTimeout(function(){a.removeClass("copied")},2e3)})}),(0,r.addAction)("rank_math_loaded","rank-math",function(){var a={},t=(0,e.get)(rankMath,"schemas",{});(0,e.map)(t,function(t,i){var n=(0,e.get)(t,"@type");t=(0,r.applyFilters)("rank_math_pre_schema_"+n,t),t=U((0,r.applyFilters)("rank_math_pre_schema",t)),a[i]=(0,r.applyFilters)("rank_math_pre_edited_schema",t,i)}),(0,i.dispatch)("rank-math").updateEditSchemas(a)}),(0,r.addFilter)("rank_math_schema_type","rank-math",function(r){return(0,e.isUndefined)(r)||(0,e.isEmpty)(r)?r:"NewsArticle"===r||"BlogPosting"===r?"Article":"MusicGroup"===r||"MusicAlbum"===r?"Music":r.includes("Event")||"Festival"===r?"Event":r}),(0,r.addFilter)("rank_math_schema_convert_author","rank-math",function(r,a,t){return(0,e.isObject)(t)||(0,e.isUndefined)(a.properties)?r:(a.properties[1].value=t,a)}),(0,r.addFilter)("rank_math_schema_convert_value","rank-math",function(r,a,t,i){var n=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(!a.map.isArray)return r;var o=a.map,s=o.arrayMap,l=void 0!==s&&s,m=o.arrayProps,d=void 0===m?{}:m;return l?((0,e.forEach)(i,function(e){a.properties.push(I(e,l,d,n))}),a):(i=function(r){return(0,e.isObject)(r)?r:[r]}(i),(0,e.forEach)(i,function(r,t){var i=(0,e.get)(r,"@type",!1);if(!1===i){var o=O();o.property=t,o.value=r,a.properties.push(o)}else a.properties.push(I(r,i,d,n))}),a)}),(0,r.addFilter)("rank_math_schema_convert_value","rank-math",function(e,r,a,t){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return r.map.isArray||!r.map.isGroup||i?e:M(r,t,i)},20),(0,r.addFilter)("rank_math_pre_schema_Product","rank-math",function(r){return(0,e.has)(r,"brand")&&!(0,e.isObject)(r.brand)&&(r.brand={"@type":"Brand",name:r.brand}),r}),(0,r.addFilter)("rank_math_processed_schema_Recipe","rank-math",function(e){var r=e.instructionType;return delete e.instructionType,"SingleField"===r&&(e.recipeInstructions=e.instructionsSingleField,delete e.instructionsSingleField),"HowToStep"===r&&(1===e.instructionsHowToStep.length&&(e.recipeInstructions={"@type":"HowToSection",name:e.instructionsHowToStep[0].name,itemListElement:e.instructionsHowToStep[0].itemListElement}),e.instructionsHowToStep.length>1&&(e.recipeInstructions=de(e.instructionsHowToStep)),delete e.instructionsHowToStep),e},20),(0,r.addFilter)("rank_math_pre_schema_Recipe","rank-math",function(r){var a=r.recipeInstructions;if((0,e.isString)(a)&&(r.instructionType="SingleField",r.instructionsSingleField=a,delete r.recipeInstructions),(0,e.forEach)(["cookTime","prepTime","totalTime"],function(a){(0,e.isUndefined)(r[a])||"PT"!==r[a]||delete r[a]}),(0,e.isArray)(a)&&(r.instructionType="HowToStep",(0,e.forEach)(a,function(r,t){(0,e.isUndefined)(r.type)||(r["@type"]=r.type,delete r.type),(0,e.isUndefined)(r.itemListElement)||((0,e.isUndefined)(r.itemListElement.type)||(r.itemListElement["@type"]=r.itemListElement.type,delete r.itemListElement.type),(0,e.isArray)(r.itemListElement)||(r.itemListElement=[r.itemListElement])),a[t]=r}),r.instructionsHowToStep=a,delete r.recipeInstructions),!(0,e.isArray)(a)&&(0,e.isObject)(a)){var t=le(le({},a),{},{"@type":"HowToSection"});r.instructionType="HowToStep",r.instructionsHowToStep=[],r.instructionsHowToStep.push(t),delete r.recipeInstructions}return r}),(0,r.addFilter)("rank_math_processed_schema","rank-math",function(r){var a=r.eventAttendanceMode;return(0,e.isUndefined)(a)||("MixedEventAttendanceMode"===a&&(r.location=[r.VirtualLocation,r.location],delete r.VirtualLocation),"OnlineEventAttendanceMode"===a&&(r.location=r.VirtualLocation,delete r.VirtualLocation)),r},20),(0,r.addFilter)("rank_math_pre_schema","rank-math",function(r){var a=r.eventAttendanceMode;return(0,e.isUndefined)(a)||("MixedEventAttendanceMode"===a&&(r.VirtualLocation=(0,e.find)(r.location,["@type","VirtualLocation"]),r.location=(0,e.find)(r.location,["@type","Place"])),"OnlineEventAttendanceMode"===a&&(r.VirtualLocation=r.location,delete r.location)),r}),(0,r.addFilter)("rank_math_pre_edited_schema","rank-math",function(r,a){var t=r.properties;return(0,e.isEmpty)(t)||"new-9999"!==a||(r.properties=(0,e.map)(t,function(a){return(0,e.includes)(["name","headline","title"],a.property)&&(a.value=r.metadata.name),"description"===a.property&&(a.value=r.metadata.description),a})),r}),(0,r.addFilter)("rank_math_schema_apply_metadata_values_Job_Posting","rank-math",function(r){return r.properties.map(function(a){return"unpublish"!==a.property||(0,e.isUndefined)(r.metadata.unpublish)||(a.value=r.metadata.unpublish),a}),r})};var ue=a(942),he=a.n(ue);const ye=wp.keycodes,fe=wp.element;var _e=a(556),Re=a.n(_e);const be=function(r){var a=r.position,t=void 0===a?"middle right":a,i=r.value,o=r.onChange,s=r.children;return wp.element.createElement(n.Dropdown,{position:t,className:"rank-math-datepicker",contentClassName:"rank-math-datepicker__dialog",renderToggle:function(e){var r=e.onToggle,a=e.isOpen;return wp.element.createElement(fe.Fragment,null,s,wp.element.createElement(n.Button,{icon:"calendar-alt",onClick:r,"aria-expanded":a}))},renderContent:function(){return wp.element.createElement(n.DatePicker,{currentDate:i.split("T")[0],onMonthPreviewed:e.noop,onChange:function(e){o(e.split("T")[0])}})}})};const ke=function(e){var r=e.position,a=void 0===r?"middle right":r,t=e.value,i=e.onChange,o=e.children;return wp.element.createElement(n.Dropdown,{position:a,className:"rank-math-datepicker",contentClassName:"rank-math-datepicker__dialog",renderToggle:function(e){var r=e.onToggle,a=e.isOpen;return wp.element.createElement(fe.Fragment,null,o,wp.element.createElement(n.Button,{icon:"calendar-alt",onClick:r,"aria-expanded":a}))},renderContent:function(){return wp.element.createElement(n.DateTimePicker,{is12Hour:!0,currentDate:t,onChange:i})}})};var ve={};(0,e.isUndefined)(rankMath.assessor)||(0,e.forEach)(rankMath.assessor.diacritics,function(e,r){return ve[r]=new RegExp(e,"g")});function ge(r){return(0,e.map)(r,function(e,r){return{label:e,value:r}})}function Ae(e){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ae(e)}a.dn(function(e){if((void 0)(e))return e;for(var r in ve)e=e.replace(ve[r],r);return e});var we=["value","onChange","type","options"];function Ge(e){return function(e){if(Array.isArray(e))return qe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return qe(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?qe(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qe(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var a=arguments[r];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},Se.apply(null,arguments)}function Ee(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function Pe(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?Ee(Object(a),!0).forEach(function(r){Oe(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Ee(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}function Oe(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=Ae(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=Ae(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==Ae(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}var Ce=function(r){var a=r.value,t=r.onChange,i=r.type,o=r.options,s=void 0===o?{}:o,l=function(e,r){if(null==e)return{};var a,t,i=function(e,r){if(null==e)return{};var a={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==r.indexOf(t))continue;a[t]=e[t]}return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)a=n[t],-1===r.indexOf(a)&&{}.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}(r,we),m=l;return a=a||"",(0,e.isUndefined)(l.help)||(l.help=(0,fe.RawHTML)({children:l.help}),m=Pe(Pe({},l),{},{help:Pe(Pe({},l.help),{},{type:"span"})})),"radio"===i?wp.element.createElement(n.RadioControl,Se({selected:a,options:ge(s),onChange:t},m)):"select"===i?(!(0,e.has)(l,"multiple")&&(0,e.isArray)(a)&&(a=a[0]),wp.element.createElement(n.SelectControl,Se({value:a,options:ge(s),onChange:t,__next40pxDefaultSize:!0},m))):"toggle"===i?wp.element.createElement(n.ToggleControl,Se({checked:a,onChange:t},m)):"number"===i?wp.element.createElement(n.TextControl,Se({type:"number",autoComplete:"off",step:"0.01",value:a,onChange:t,__next40pxDefaultSize:!0},m)):"url"===i?wp.element.createElement(n.TextControl,Se({type:"url",autoComplete:"off",value:a,onChange:t,__next40pxDefaultSize:!0},m)):"datepicker"===i?wp.element.createElement(be,{value:a,position:"bottom left",onChange:t},wp.element.createElement(n.TextControl,Se({value:a,onChange:t,__next40pxDefaultSize:!0},m))):"datetimepicker"===i?wp.element.createElement(ke,{value:a,position:"bottom left",onChange:t},wp.element.createElement(n.TextControl,Se({value:a,onChange:t,__next40pxDefaultSize:!0},m))):"textarea"===i?wp.element.createElement(n.TextareaControl,Se({rows:5,value:a,onChange:t},m)):"checkbox"===i?wp.element.createElement("div",{className:"rank-math-checkbox-component components-base-control schema-property--value"},wp.element.createElement("label",{htmlFor:"checklist-label",className:"components-base-control__label"},l.label),wp.element.createElement("div",null,ge(s).map(function(r){return wp.element.createElement(n.CheckboxControl,{key:(0,e.uniqueId)("checkbox-"),label:r.label,checked:(0,e.includes)(a,r.value),onChange:function(i){var n=Ge(a);i?n.push(r.value):(0,e.remove)(n,function(e){return e===r.value}),t(n)}})}))):wp.element.createElement(n.TextControl,Se({value:a,onChange:t,__next40pxDefaultSize:!0},m))};Ce.default={value:"",type:"text",onChange:null},Ce.propTypes={id:Re().string,onChange:Re().func.isRequired};const Te=Ce;function je(e){return je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},je(e)}function xe(){return xe=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var a=arguments[r];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},xe.apply(null,arguments)}function Ne(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var t,i,n,o,s=[],l=!0,m=!1;try{if(n=(a=a.call(e)).next,0===r){if(Object(a)!==a)return;l=!1}else for(;!(l=(t=n.call(a)).done)&&(s.push(t.value),s.length!==r);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,r)||function(e,r){if(e){if("string"==typeof e)return Le(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?Le(e,r):void 0}}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}function Me(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function De(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?Me(Object(a),!0).forEach(function(r){Ie(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Me(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}function Ie(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=je(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=je(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==je(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}const Ue=(0,Q.compose)((0,i.withSelect)(function(e,r){return De(De({},r),{},{isPro:e("rank-math").isPro()})}))(function(a){var t=a.data,i=t.property,o=t.id,s=t.map,l=a.actions,m=l.removeProperty,d=l.propertyChange,p=l.duplicateProperty,c=(0,e.get)(s,"field",{label:!1}),u=De({},c),h=Ne((0,fe.useState)(),2),y=h[0],f=h[1];if((0,fe.useEffect)(function(){f(function(a,t){var i=a.data,n=i.property,o=i.value,s=a.schema.metadata;return o===(0,e.get)(t,"placeholder","")&&(o=""),"reviewLocation"===n&&(0,e.has)(s,"reviewLocation")&&(o=s.reviewLocation),"unpublish"===n&&(0,e.has)(s,"unpublish")&&(o=s.unpublish),a.isPro&&"[rank_math_rich_snippet]"===o&&(o='[rank_math_rich_snippet id="'+s.shortcode+'"]'),(0,r.applyFilters)("rank_math_schema_property_value",o,a)}(a,c))},[o]),!1===J(a.data,a.schema))return a.data.map.isHidden=!0,null;s.isRequired&&(c.label&&(u.label=wp.element.createElement(fe.Fragment,null,c.label," ",wp.element.createElement("span",null,"*"))),c.placeholder||(u.required="required")),a.isCustom&&(u.type=(0,r.applyFilters)("rank_math_schema_custom_field_type","text",i),delete u.label);var _=he()("schema-group-or-property-container schema-property-container",(0,e.get)(c,"classes",!1),{"hide-property":"@type"===i});return a.data.map.isHidden=!1,wp.element.createElement("div",{className:_},wp.element.createElement("div",{className:"schema-group-or-property schema-property"},wp.element.createElement("div",{className:"schema-property--body"},!a.isCustom&&c.label?null:wp.element.createElement("div",{className:"schema-property--field"},wp.element.createElement(n.TextControl,{value:i,onChange:function(e){d(o,"property",e)},__next40pxDefaultSize:!0})),wp.element.createElement("div",{className:"schema-property--value"},wp.element.createElement(Te,xe({value:y},u,{onChange:function(e){f(e),d(o,"value",e)}})),(0,e.has)(u,"notice")&&wp.element.createElement(n.Notice,xe({isDismissible:!1},u.notice),u.notice.content)),!s.isRequired&&wp.element.createElement("div",{className:"schema-property--header"},wp.element.createElement(n.Button,{isSecondary:!0,className:"button rank-math-duplicate-property",onClick:function(){return p(o,a.parentId,a.data)}},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"})),wp.element.createElement(re,{key:o,onClick:function(){return m(o,a.parentId)}},function(e){return wp.element.createElement(n.Button,{isSecondary:!0,className:"button rank-math-delete-group",onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}))})))))});var Fe=function(a){if(!1===J(a.data,a.schema))return a.data.map.isHidden=!0,null;var i=a.isCustom,o=a.isPro,s=a.isMain,l=void 0!==s&&s,m=a.arrayIndex,d=a.data,p=d.id,c=d.property,u=d.properties,h=d.map,y=d.metadata,f=a.actions,_=f.addProperty,R=f.addGroup,b=f.removeGroup,k=f.propertyChange,v=f.duplicateGroup,g=(0,e.get)(h,"field",{label:!1}),A=he()("schema-group-or-property-container schema-group-container",(0,e.get)(h,"classes",!1),{"hide-property":"metadata"===c,"is-group":h.isGroup,"is-array":h.isArray,"no-array-map":(0,e.isUndefined)(h.arrayMap)});return a.data.map.isHidden=!1,wp.element.createElement("div",{className:A},wp.element.createElement("div",{className:"schema-group-or-property schema-group"},(0,r.applyFilters)("rank_math_schema_before_fields","",c),wp.element.createElement("div",{className:"schema-group-header"},function(){if(a.isArray&&void 0!==m)return wp.element.createElement("div",{className:"schema-property--label"},(0,e.startCase)(c)," ",m);if(!i&&g.label)return wp.element.createElement("div",{className:"schema-property--label"},g.label,g.labelHelp&&wp.element.createElement("span",{className:"schema-property--label-help"},(0,fe.RawHTML)({children:g.labelHelp})));var r="WooCommerceProduct"!==c?c:"WooCommerce Product";return wp.element.createElement("div",{className:"schema-property--field"},wp.element.createElement(n.TextControl,{value:(0,e.isUndefined)(y)||(0,e.isEmpty)(y.title)?r:y.title,disabled:!o,onChange:function(e){k(p,"property",e)},__next40pxDefaultSize:!0}))}(),wp.element.createElement(n.ButtonGroup,{className:"schema-group--actions schema-group--actions--tr"},wp.element.createElement(n.Button,{className:"button rank-math-add-property",isLink:!0,onClick:function(){return _(p)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Add Property","seo-by-rank-math"))),wp.element.createElement(n.Button,{className:"button rank-math-add-property-group",isLink:!0,onClick:function(){return R(p,h)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Add Property Group","seo-by-rank-math"))),!l&&wp.element.createElement(n.Button,{className:"button rank-math-duplicate-property-group",isLink:!0,onClick:function(){return v(p,a.parentId,a.data)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Duplicate Group","seo-by-rank-math"))),wp.element.createElement(re,{key:p,onClick:function(){return b(p,a.parentId)}},function(e){return wp.element.createElement(n.Button,{className:"button rank-math-delete-group",isLink:!0,onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,t.__)("Delete","seo-by-rank-math")))}))),wp.element.createElement("div",{className:"schema-group--children"},(0,e.map)(u,function(e,r){return e.map.isGroup?wp.element.createElement(Fe,{key:r,data:e,parentId:p,isArray:h.isArray,arrayIndex:h.isArray?r+1:void 0,isCustom:i,schema:a.schema,actions:a.actions,isPro:o}):wp.element.createElement(Ue,{key:r,data:e,parentId:p,isCustom:i,schema:a.schema,actions:a.actions})})),l&&wp.element.createElement("div",{className:"schema-group-footer"},wp.element.createElement(n.ButtonGroup,{className:"schema-group--actions schema-group--actions--tr"},wp.element.createElement(n.Button,{className:"button rank-math-add-property",isLink:!0,onClick:function(){return _(p)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Add Property","seo-by-rank-math"))),wp.element.createElement(n.Button,{className:"button rank-math-add-property-group",isLink:!0,onClick:function(){return R(p,h)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Add Property Group","seo-by-rank-math"))),wp.element.createElement(re,{key:p,onClick:function(){return b(p,a.parentId)}},function(e){return wp.element.createElement(n.Button,{className:"button rank-math-delete-group",isLink:!0,onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,t.__)("Delete","seo-by-rank-math")))})))))};const He=Fe;function Be(e){return Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Be(e)}function Ve(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function Ye(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?Ve(Object(a),!0).forEach(function(r){$e(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Ve(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}function We(e,r){for(var a=0;a<r.length;a++){var t=r[a];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,Xe(t.key),t)}}function ze(e,r,a){return r=Qe(r),function(e,r){if(r&&("object"==Be(r)||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Je()?Reflect.construct(r,a||[],Qe(e).constructor):r.apply(e,a))}function Je(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Je=function(){return!!e})()}function Qe(e){return Qe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Qe(e)}function Ke(e,r){return Ke=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,r){return e.__proto__=r,e},Ke(e,r)}function $e(e,r,a){return(r=Xe(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function Xe(e){var r=function(e,r){if("object"!=Be(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=Be(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==Be(r)?r:r+""}var Ze=function(a){function i(){var a;return function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,i),$e(a=ze(this,i,arguments),"addGroup",function(e,r){var t=Ye({},a.state.data),i=k(e,t),n=r.isArray,o=r.arrayMap,s=void 0!==o&&o,l=r.arrayProps,m=n&&s?j(s,void 0===l?{}:l):P();i.properties.push(m),a.setState({data:t})}),$e(a,"addProperty",function(e){var r=Ye({},a.state.data);k(e,r).properties.push(O()),a.setState({data:r})}),$e(a,"duplicateGroup",function(r,t,i){var n=Ye({},a.state.data),o=k(t,n),s=(0,e.cloneDeep)(i),l=o.properties.findIndex(function(e){return e.id===r});o.properties.splice(l,0,C(s)),a.setState({data:n})}),$e(a,"duplicateProperty",function(e,r,t){var i=Ye({},a.state.data),n=k(r,i),o=Ye({},t),s=n.properties.findIndex(function(r){return r.id===e});o.id="p-".concat(E()),n.properties.splice(s,0,o),a.setState({data:i})}),$e(a,"removeGroup",function(e,r){var t=Ye({},a.state.data),i=k(r,t);if(i.id!==e){var n=i.properties.findIndex(function(r){return r.id===e});i.properties.splice(n,1),a.setState({data:t})}else a.setState({data:P()})}),$e(a,"removeProperty",function(e,r){var t=Ye({},a.state.data),i=k(r,t),n=i.properties.findIndex(function(r){return r.id===e});i.properties.splice(n,1),a.setState({data:t})}),$e(a,"propertyChange",function(t,i,n){var o=Ye({},a.state.data),s=k(t,o);Object.assign(s,$e({},i,n)),!(0,e.isEmpty)(o.metadata)&&(0,e.has)(o.metadata,s.property)&&"title"!==s.property&&(o.metadata[s.property]=n),"property"!==i||(0,e.isUndefined)(s.metadata)||(s.metadata.title=n),a.setState({data:o}),(0,r.doAction)("rank_math_property_changed",o,s,a.setState,i,n,a.state)}),a.options=(0,e.get)(a.props.data,"metadata",{}),a.state={data:a.props.data,loading:!1,showNotice:!1,postId:rankMath.objectID},a.setState=a.setState.bind(a),a.templateSaveCount=0,a.isEditingTemplate=(0,e.get)(rankMath,"isTemplateScreen",!1),a}return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),r&&Ke(e,r)}(i,a),o=i,(s=[{key:"getWrapperClasses",value:function(){var r=(0,e.get)(rankMath,"knowledgegraphType",!1);r=!1===r?"empty":"local-"+r;var a=(0,e.get)(this.props.data,"property","");return(0,e.isArray)(a)&&(a=a.join("-")),a="schema-"+a.toLowerCase(),he()("schema-builder",a,$e({"schema-template-pre-defined":"template"===this.options.type,"schema-template-custom":"custom"===this.options.type},"".concat(r),"template"===this.options.type))}},{key:"render",value:function(){var e=this;return wp.element.createElement("form",{className:this.getWrapperClasses()},wp.element.createElement(He,{data:this.state.data,schema:this.state.data,isPro:this.props.isPro,parentId:null,isMain:!0,isArray:!1,isCustom:"custom"===this.options.type,actions:{addGroup:this.addGroup,addProperty:this.addProperty,removeGroup:this.removeGroup,removeProperty:this.removeProperty,propertyChange:this.propertyChange,duplicateGroup:this.duplicateGroup,duplicateProperty:this.duplicateProperty}}),wp.element.createElement("div",{className:"schema-builder-save-as"},this.props.isPro&&wp.element.createElement(fe.Fragment,null,"custom"!==this.options.type&&wp.element.createElement(n.Button,{isSecondary:!0,onClick:function(){return e.props.toggleMode(e.props.id,e.state.data)}},(0,t.__)("Advanced Editor","seo-by-rank-math")),!this.isEditingTemplate&&wp.element.createElement(n.Button,{isSecondary:!0,className:this.state.loading?"save-as-template saving":"save-as-template",onClick:function(){e.templateSaveCount>=1&&!confirm((0,t.__)("Each save will create a new template.","seo-by-rank-math"))||(e.templateSaveCount+=1,e.props.saveTemplate(e.state.data,e.setState))}},this.state.showNotice?(0,t.__)("Template saved.","seo-by-rank-math"):(0,t.__)("Save as Template","seo-by-rank-math")),this.state.showNotice&&wp.element.createElement("div",{className:"rank-math-save-template-confirmation"},(0,t.__)("Template saved.","seo-by-rank-math"))),this.isEditingTemplate&&wp.element.createElement(n.Button,{isPrimary:!0,className:"button",onClick:function(){return e.props.saveTemplate(e.state.data,e.setState,e.state.postId)}},this.state.loading?(0,t.__)("Saving","seo-by-rank-math"):this.state.showNotice?(0,t.__)("Saved","seo-by-rank-math"):(0,t.__)("Save","seo-by-rank-math")),!this.isEditingTemplate&&wp.element.createElement(n.Button,{isPrimary:!0,className:"button",onClick:function(){return e.props.saveSchema(e.props.id,e.state.data)}},"term"===rankMath.objectType?(0,t.__)("Save for this Term","seo-by-rank-math"):(0,t.__)("Save for this Post","seo-by-rank-math"))))}}])&&We(o.prototype,s),l&&We(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,s,l}(fe.Component);Ze.defaultProps={query:null,fields:[],onQueryChange:null},Ze.propTypes={query:Re().object,fields:Re().array.isRequired,onQueryChange:Re().func};const er=(0,Q.compose)((0,i.withSelect)(function(a,t){var i=a("rank-math").getEditingSchema(),n=a("rank-math").getEditSchemas(),o=(0,e.isString)(i.data.property)?i.data.property:(0,e.isArray)(i.data.property)?i.data.property[0]:"";return(0,r.applyFilters)("rank_math_schema_apply_metadata_values_"+o.replaceAll(" ","_"),i.data),Ye(Ye(Ye({},t),i),{},{schemas:n,isPro:a("rank-math").isPro()})}),(0,i.withDispatch)(function(r,a){var i=a.onSave,n=void 0!==i&&i,o=a.isPro,s=a.schemas;return{toggleMode:function(e,a){if(confirm((0,t.__)("Are you sure you want to convert? You can't use simple mode for this edited Schema.","seo-by-rank-math"))){var i=Ye({},a);i.metadata.type="custom",r("rank-math").updateEditSchema(e,i)}},saveSchema:function(a,t){var i=ne()("form.schema-builder").get(0);if(i.checkValidity()){o||(0,e.forEach)(s,function(e,t){a!==t&&r("rank-math").deleteSchema(t)});var l=W(t);r("rank-math").updateEditSchema(a,t),r("rank-math").saveSchema(a,l),n&&n(a,l),r("rank-math").schemaUpdated(!0),r("rank-math").toggleSchemaTemplates(!1),r("rank-math").toggleSchemaEditor(!1)}else i.reportValidity()},saveTemplate:function(e,a,t){r("rank-math").saveTemplate(W(e),a,t)}}}))(Ze);var rr={"@context":"https://schema.org/","@graph":[{"@type":"Article",headline:"Power Words: The Art of Writing Headlines That Get Clicked",description:"Power words are words with strong meaning that smart copywriters (as well as marketers) use to increase CTR and boost conversions.",author:{"@type":"Person",name:"Rank Math"},datePublished:"2020-09-12GMT+000015:45:32+00:00",dateModified:"2020-09-12GMT+000015:45:29+00:00","@id":"https://rankmath.com/blog/power-words/#schema-44838",mainEntityOfPage:{"@id":"https://rankmath.com/blog/power-words/#webpage"},isPartOf:{"@id":"https://rankmath.com/blog/power-words/#webpage"},publisher:{"@id":"/#organization"},inLanguage:"en-US"}]};const ar=function(){var e=JSON.stringify(rr,null,2);return wp.element.createElement(fe.Fragment,null,wp.element.createElement("div",{className:"rank-math-pretty-json free-version"},wp.element.createElement("form",{method:"post",target:"_blank",action:"https://search.google.com/test/rich-results"},wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,t.__)("JSON-LD Code","seo-by-rank-math")),wp.element.createElement("button",{className:"button structured-data-copy is-small",type:"button","data-clipboard-text":e},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"}),wp.element.createElement("span",{className:"original-text"},(0,t.__)("Copy","seo-by-rank-math")),wp.element.createElement("span",{className:"success","aria-hidden":"true"},(0,t.__)("Copied!","seo-by-rank-math"))),wp.element.createElement("button",{className:"button structured-data-test is-small",type:"submit"},wp.element.createElement("i",{className:"rm-icon rm-icon-google"})," ",wp.element.createElement("span",null,(0,t.__)("Test with Google","seo-by-rank-math"))),wp.element.createElement("textarea",{name:"code_snippet",defaultValue:e})),wp.element.createElement("pre",{className:"code-output"},wp.element.createElement("code",{className:"language-javascript",dangerouslySetInnerHTML:{__html:z(e)}})),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-70"},wp.element.createElement("h3",null,(0,t.__)("Preview & Validate Your Schema Markup","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,t.__)("Advanced Schema markup viewer","seo-by-rank-math")),wp.element.createElement("li",null,(0,t.__)("Live testing with Google","seo-by-rank-math")),wp.element.createElement("li",null,(0,t.__)("No other SEO plugin offers this feature","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:$("pro","Code Validation"),rel:"noreferrer noopener",target:"_blank"},(0,t.__)("Upgrade","seo-by-rank-math"))))))};const tr=function(e){var a,i=e.selectedTab;return wp.element.createElement(n.TabPanel,{className:"rank-math-tabs rank-math-editor rank-math-schema-tabs",activeClass:"is-active",initialTabName:i,tabs:Object.values((a={schemaBuilder:{name:"schemaBuilder",title:wp.element.createElement(fe.Fragment,null,wp.element.createElement("span",null,(0,t.__)("Edit","seo-by-rank-math"))),view:er,className:"rank-math-tab-templates"},codeValidation:{name:"codeValidation",title:wp.element.createElement(fe.Fragment,null,wp.element.createElement("span",null,(0,t.__)("Code Validation","seo-by-rank-math"))),view:ar,className:"rank-math-tab-code-validation"}},(0,r.applyFilters)("rank_math_schema_editor_tabs",a)))},function(e){return wp.element.createElement("div",{className:"components-panel__body rank-math-schema-tab-content-"+e.name},(0,fe.createElement)(e.view))})};function ir(e){return ir="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ir(e)}function nr(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=ir(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=ir(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==ir(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}const or=(0,Q.compose)((0,i.withSelect)(function(r){var a=r("rank-math").getEditingSchema();return{isOpen:r("rank-math").isSchemaEditorOpen(),selectedTab:r("rank-math").getEditorTab(),isCutomSchema:(0,e.get)(a,"data.metadata.type",!1)}}),(0,i.withDispatch)(function(e,r){return{toggleModal:function(){e("rank-math").setEditorTab(""),e("rank-math").toggleSchemaEditor(!r.isOpen)}}}))(function(e){var r=e.isOpen,a=void 0!==r&&r,i=e.toggleModal,o=e.selectedTab,s=e.isCutomSchema;if(!a)return null;var l=he()("rank-math-modal rank-math-schema-generator rank-math-schema-modal",{"rank-math-schema-modal-no-map":"custom"===s});return wp.element.createElement(n.Modal,{title:(0,t.__)("Schema Builder","seo-by-rank-math"),closeButtonLabel:(0,t.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,onRequestClose:i,className:l,overlayClassName:"rank-math-modal-overlay"},wp.element.createElement(n.KeyboardShortcuts,{shortcuts:nr(nr(nr(nr({},ye.rawShortcut.ctrl("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.ctrlShift("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.primary("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.primaryShift("z"),function(e){return e.stopImmediatePropagation()})},wp.element.createElement("a",{href:$("rich-snippets","Schema Builder Header"),rel:"noopener noreferrer",target:"_blank",title:(0,t.__)("More Info","seo-by-rank-math"),className:"rank-math-schema-info"},wp.element.createElement(n.Dashicon,{icon:"info"})),wp.element.createElement(tr,{selectedTab:o})))});function sr(e){return sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sr(e)}function lr(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,t)}return a}function mr(e){for(var r=1;r<arguments.length;r++){var a=null!=arguments[r]?arguments[r]:{};r%2?lr(Object(a),!0).forEach(function(r){dr(e,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):lr(Object(a)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(a,r))})}return e}function dr(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=sr(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=sr(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==sr(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}const pr=(0,Q.compose)((0,i.withSelect)(function(r,a){var t=r("rank-math").isPro(),i=r("rank-math").getSchemas(),n=(0,e.findKey)(i,"metadata.isPrimary");return n=(0,e.isEmpty)(n)?{}:{id:n,type:i[n]["@type"]},mr(mr({},a),{},{primarySchema:n,isPro:t})}),(0,i.withDispatch)(function(r,a){var t=a.isPro,i=a.primarySchema,n=void 0!==i&&i,o=!(!t||!(0,e.isEmpty)(n));return t||(o=!0),{addSchema:function(a){var t=(0,e.uniqueId)("new-"),i=(0,e.get)(a,"schema",!1);!1===i&&(i={"@type":a.type,metadata:{type:"template",shortcode:"s-".concat(E())}}),i.metadata.isPrimary=o,r("rank-math").setEditingSchemaId(t),r("rank-math").updateEditSchema(t,U(i)),r("rank-math").toggleSchemaEditor(!0)},editSchema:function(e){r("rank-math").setEditingSchemaId(e),r("rank-math").toggleSchemaEditor(!0)}}}))(function(e){var a=e.search,i=e.templates,o=e.isPro,s=e.addSchema,l=e.editSchema,m=e.primarySchema;""!==a&&(i=i.filter(function(e){return e.title.toLowerCase().includes(a)}));var d=m?(0,r.applyFilters)("rank_math_schema_type",m.type):"";return wp.element.createElement("div",{className:"rank-math-schema-catalog"},i.map(function(e,r){var a=!o&&d===e.type,i=he()("rank-math-schema-item rank-math-use-schema row button",{"in-use":a,"schema-pro":e.isPro});return wp.element.createElement("div",{id:"rank-math-schema-list-wrapper",key:r},wp.element.createElement(n.Button,{key:r,id:"rank-math-schema-item",className:i,href:e.isPro?$("pro","PRO Schema Type"):"#",target:e.isPro?"_blank":"",isLink:!0,onClick:function(){if(!e.isPro)return a?l(m.id):s(e)}},wp.element.createElement("input",{type:"radio",name:"primarySchema",value:e.type,checked:d===e.type,onChange:function(){return s(e)},disabled:e.isPro}),wp.element.createElement("span",{className:"rank-math-schema-name"},wp.element.createElement("i",{className:K(e.type)}),e.title,e.isPro&&wp.element.createElement("span",{className:"rank-math-pro-badge"},(0,t.__)("Pro","seo-by-rank-math"))),wp.element.createElement("span",{className:"button rank-math-schema-item-actions"},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Use","seo-by-rank-math")))))}))});function cr(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var t,i,n,o,s=[],l=!0,m=!1;try{if(n=(a=a.call(e)).next,0===r){if(Object(a)!==a)return;l=!1}else for(;!(l=(t=n.call(a)).done)&&(s.push(t.value),s.length!==r);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,r)||function(e,r){if(e){if("string"==typeof e)return ur(e,r);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?ur(e,r):void 0}}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ur(e,r){(null==r||r>e.length)&&(r=e.length);for(var a=0,t=Array(r);a<r;a++)t[a]=e[a];return t}var hr=function(e){var a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"global"===e?f.getTemplates(a):(0,r.applyFilters)("rank_math_schema_templates_by_source",[],e)};const yr=(0,Q.compose)((0,i.withSelect)(function(e){return{isPro:e("rank-math").isPro()}}))(function(e){var a=cr((0,X.useState)("global"),2),i=a[0],o=a[1],s=cr((0,X.useState)(""),2),l=s[0],m=s[1];return wp.element.createElement(fe.Fragment,null,e.isPro&&wp.element.createElement(te,null),wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,t.__)("Available Schema Types","seo-by-rank-math")),wp.element.createElement("div",{className:"rank-math-schema-filter"},wp.element.createElement(n.RadioControl,{selected:i,options:(0,r.applyFilters)("rank_math_schema_template_sources",[{value:"global",label:(0,t.__)("Schema Catalog","seo-by-rank-math")}]),onChange:o}),wp.element.createElement("div",{className:"rank-math-schema-search"},wp.element.createElement(n.TextControl,{value:l,onChange:m,placeholder:(0,t.__)("Searchâ€¦","seo-by-rank-math"),__next40pxDefaultSize:!0}))),wp.element.createElement(pr,{templates:hr(i,e.isPro),search:l.toLowerCase()}))}),fr=function(){return wp.element.createElement("div",{className:"components-panel__body rank-math-custom-schema-wrapper"},wp.element.createElement("img",{src:rankMath.customSchemaImage,alt:"",className:"custom-schema"}),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-60"},wp.element.createElement("h3",null,(0,t.__)("Advanced Schema Builder","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,t.__)("Possibility to create 700+ Schema Types","seo-by-rank-math")),wp.element.createElement("li",null,(0,t.__)("Import Schema from ANY website","seo-by-rank-math")),wp.element.createElement("li",null,(0,t.__)("Create Advanced templates","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:$("pro","Custom Builder"),rel:"noreferrer noopener",target:"_blank"},(0,t.__)("Upgrade","seo-by-rank-math")))))};a.dn(fr);const _r=function(){return wp.element.createElement(n.TabPanel,{className:"rank-math-tabs rank-math-editor rank-math-schema-tabs",activeClass:"is-active",tabs:Object.values((e={templates:{name:"templates",title:wp.element.createElement(fe.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-schema"}),wp.element.createElement("span",null,(0,t.__)("Schema Templates","seo-by-rank-math"))),view:yr,className:"rank-math-tab-templates"},newSchema:{name:"new-schema",title:wp.element.createElement(fe.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,t.__)("Custom Schema","seo-by-rank-math"))),view:fr,className:"rank-math-tab-new-schema"}},(0,r.applyFilters)("rank_math_schema_templates_tabs",e)))},function(e){return wp.element.createElement("div",{className:"components-panel__body rank-math-schema-tab-content-"+e.name},(0,fe.createElement)(e.view))});var e};function Rr(e){return Rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rr(e)}function br(e,r,a){return(r=function(e){var r=function(e,r){if("object"!=Rr(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var t=a.call(e,r||"default");if("object"!=Rr(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==Rr(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}a.dn(_r);const kr=(0,Q.compose)((0,i.withSelect)(function(e){return{isOpen:e("rank-math").isSchemaTemplatesOpen()}}),(0,i.withDispatch)(function(e,r){return{toggleModal:function(){e("rank-math").toggleSchemaTemplates(!r.isOpen)}}}))(function(e){var r=e.isOpen,a=void 0!==r&&r,i=e.toggleModal;return a?wp.element.createElement(n.Modal,{title:(0,t.__)("Schema Generator","seo-by-rank-math"),closeButtonLabel:(0,t.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,onRequestClose:i,className:"rank-math-modal rank-math-schema-generator rank-math-schema-template-modal",overlayClassName:"rank-math-modal-overlay"},wp.element.createElement(n.KeyboardShortcuts,{shortcuts:br(br(br(br({},ye.rawShortcut.ctrl("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.ctrlShift("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.primary("z"),function(e){return e.stopImmediatePropagation()}),ye.rawShortcut.primaryShift("z"),function(e){return e.stopImmediatePropagation()})},wp.element.createElement("a",{href:$("rich-snippets","Schema Generator Header"),rel:"noopener noreferrer",target:"_blank",title:(0,t.__)("More Info","seo-by-rank-math"),className:"rank-math-schema-info"},wp.element.createElement(n.Dashicon,{icon:"info"})),wp.element.createElement(_r,null))):null});ce();const vr=function(){return wp.element.createElement(n.PanelBody,{initialOpen:!0,className:"rank-math-schema-in-use"},wp.element.createElement("p",{className:"cmb2-metabox-description"},(0,t.__)("Configure Schema Markup for your pages. Search engines, use structured data to display rich results in SERPs.","seo-by-rank-math")," ",wp.element.createElement("a",{href:$("rich-snippets","Schema G Tab"),target:"_blank",rel:"noopener noreferrer"},(0,t.__)("Learn more.","seo-by-rank-math"))),wp.element.createElement(te,null),wp.element.createElement(n.Button,{isPrimary:!0,onClick:function(){return(0,i.dispatch)("rank-math").toggleSchemaTemplates(!0)}},(0,t.__)("Schema Generator","seo-by-rank-math")),wp.element.createElement(or,null),wp.element.createElement(kr,null))};const gr=(0,i.withSelect)(function(r){var a=r("rank-math").getSchemas();return{type:function(){if((0,e.isEmpty)(a))return"off";var r=Object.keys(a);return(0,e.get)(a,[r[0],"@type"])}()}})(function(e){var r=e.type;return wp.element.createElement(fe.Fragment,null,wp.element.createElement("i",{className:K(r)}),wp.element.createElement("span",null,(0,t.__)("Schema","seo-by-rank-math")))}),Ar=function(){return!(0,e.isNull)(document.getElementById("site-editor"))};a.dn(Ar);const wr=function(){if(!Ar())return!1;var r=wp.data.select("core/editor"),a=r.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===a)return!0;var t=r.getCurrentTemplateId()||a;return!(!(0,e.endsWith)(t,"//home")&&!(0,e.endsWith)(t,"//front-page"))||!(!(0,e.endsWith)(t,"//page")&&!(0,e.endsWith)(t,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};a.dn(wr),(0,r.addFilter)("rank_math_sidebar_tabs","rank-math",function(r){return wr()||rankMath.canUser.snippet&&!(0,e.isUndefined)(rankMath.schemas)&&r.splice(2,0,{name:"schema",title:wp.element.createElement(gr,null),view:vr,className:"rank-math-schema-tab"}),r})}()}();PK     ™ŠU]êûB�Ó �Ó 4  includes/modules/schema/assets/js/schema-template.jsnu „[µü¤        !function(){var e={694:function(e,t,r){"use strict";var a=r(925);function i(){}function n(){}n.resetWarningCache=i,e.exports=function(){function e(e,t,r,i,n,o){if(o!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:n,resetWarningCache:i};return r.PropTypes=r,r}},556:function(e,t,r){e.exports=r(694)()},925:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},942:function(e,t){var r;!function(){"use strict";var a={}.hasOwnProperty;function i(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=o(e,n(r)))}return e}function n(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return i.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)a.call(e,r)&&e[r]&&(t=o(t,r));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(i.default=i,e.exports=i):void 0===(r=function(){return i}.apply(t,[]))||(e.exports=r)}()}},t={};function r(a){var i=t[a];if(void 0!==i)return i.exports;var n=t[a]={exports:{}};return e[a](n,n.exports,r),n.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};r.r(e),r.d(e,{deleteSchema:function(){return mt},lockModifiedDate:function(){return A},refreshResults:function(){return Fe},resetDirtyMetadata:function(){return G},resetRedirection:function(){return F},resetStore:function(){return S},saveSchema:function(){return lt},saveTemplate:function(){return pt},schemaUpdated:function(){return tt},setEditingSchemaId:function(){return rt},setEditorTab:function(){return at},setTemplateTab:function(){return it},setVersion:function(){return He},toggleFrontendScore:function(){return b},toggleIsDiviPageSettingsBarActive:function(){return Be},toggleIsDiviRankMathModalActive:function(){return Ve},toggleLoaded:function(){return Ue},toggleSchemaEditor:function(){return Ze},toggleSchemaTemplates:function(){return et},toggleSnippetEditor:function(){return ce},updateAIScore:function(){return dt},updateAdvancedRobots:function(){return k},updateAnalysisScore:function(){return R},updateAppData:function(){return h},updateAppUi:function(){return y},updateBreadcrumbTitle:function(){return w},updateCanonicalUrl:function(){return g},updateDescription:function(){return M},updateEditSchema:function(){return st},updateEditSchemas:function(){return nt},updateFacebookDescription:function(){return E},updateFacebookHasOverlay:function(){return T},updateFacebookImage:function(){return P},updateFacebookImageID:function(){return O},updateFacebookImageOverlay:function(){return D},updateFacebookTitle:function(){return q},updateFeaturedImage:function(){return N},updateHasRedirect:function(){return H},updateHighlightedParagraphs:function(){return Ye},updateKeywords:function(){return f},updatePermalink:function(){return I},updatePillarContent:function(){return _},updatePostID:function(){return C},updatePrimaryTermID:function(){return U},updateRedirection:function(){return x},updateRedirectionItem:function(){return L},updateRobots:function(){return v},updateSchemas:function(){return ot},updateSelectedKeyword:function(){return xe},updateSerpDescription:function(){return de},updateSerpSlug:function(){return pe},updateSerpTitle:function(){return me},updateSnippetPreviewType:function(){return ue},updateSocialTab:function(){return Le},updateTitle:function(){return j},updateTwitterAppCountry:function(){return Ne},updateTwitterAppDescription:function(){return qe},updateTwitterAppGoogleplayID:function(){return Ie},updateTwitterAppGoogleplayName:function(){return je},updateTwitterAppGoogleplayUrl:function(){return Me},updateTwitterAppIpadID:function(){return Te},updateTwitterAppIpadName:function(){return De},updateTwitterAppIpadUrl:function(){return Ce},updateTwitterAppIphoneID:function(){return Ee},updateTwitterAppIphoneName:function(){return Pe},updateTwitterAppIphoneUrl:function(){return Oe},updateTwitterAuthor:function(){return be},updateTwitterCardType:function(){return ye},updateTwitterDescription:function(){return _e},updateTwitterHasOverlay:function(){return ke},updateTwitterImage:function(){return ge},updateTwitterImageID:function(){return Re},updateTwitterImageOverlay:function(){return ve},updateTwitterPlayerSize:function(){return Ae},updateTwitterPlayerStreamCtype:function(){return Se},updateTwitterPlayerStreamUrl:function(){return Ge},updateTwitterPlayerUrl:function(){return we},updateTwitterTitle:function(){return fe},updateTwitterUseFacebook:function(){return he}});var t={};r.r(t),r.d(t,{appData:function(){return _t},appUi:function(){return wt}});var a={};r.r(a),r.d(a,{getAdvancedRobots:function(){return Ot},getAnalysisScore:function(){return St},getAppData:function(){return At},getBreadcrumbTitle:function(){return Dt},getCanonicalUrl:function(){return Tt},getDescription:function(){return er},getDirtyMetadata:function(){return Gt},getEditSchemas:function(){return Rr},getEditingSchema:function(){return gr},getEditorTab:function(){return vr},getFacebookAuthor:function(){return zt},getFacebookDescription:function(){return Yt},getFacebookHasOverlay:function(){return Jt},getFacebookImage:function(){return Kt},getFacebookImageID:function(){return Wt},getFacebookImageOverlay:function(){return Qt},getFacebookTitle:function(){return Vt},getFeaturedImage:function(){return tr},getFeaturedImageHtml:function(){return rr},getHighlightedParagraphs:function(){return Bt},getKeywords:function(){return qt},getPermalink:function(){return Zt},getPillarContent:function(){return Et},getPostID:function(){return $t},getPreviewSchema:function(){return kr},getPrimaryTermID:function(){return ar},getRedirectionID:function(){return ir},getRedirectionItem:function(){return sr},getRedirectionType:function(){return nr},getRedirectionUrl:function(){return or},getRichSnippets:function(){return Ct},getRobots:function(){return Pt},getSchemas:function(){return br},getSelectedKeyword:function(){return Nt},getSerpDescription:function(){return cr},getSerpSlug:function(){return dr},getSerpTitle:function(){return pr},getShowScoreFrontend:function(){return It},getSnippetPreviewType:function(){return hr},getSocialTab:function(){return Ut},getTemplateTab:function(){return wr},getTitle:function(){return Xt},getTwitterAppCountry:function(){return Br},getTwitterAppDescription:function(){return Cr},getTwitterAppGoogleplayID:function(){return Lr},getTwitterAppGoogleplayName:function(){return Fr},getTwitterAppGoogleplayUrl:function(){return Hr},getTwitterAppIpadID:function(){return Nr},getTwitterAppIpadName:function(){return Ur},getTwitterAppIpadUrl:function(){return xr},getTwitterAppIphoneID:function(){return Ir},getTwitterAppIphoneName:function(){return jr},getTwitterAppIphoneUrl:function(){return Mr},getTwitterAuthor:function(){return Er},getTwitterCardType:function(){return Gr},getTwitterDescription:function(){return qr},getTwitterHasOverlay:function(){return Tr},getTwitterImage:function(){return Or},getTwitterImageID:function(){return Pr},getTwitterImageOverlay:function(){return Dr},getTwitterPlayerSize:function(){return Yr},getTwitterPlayerStream:function(){return zr},getTwitterPlayerStreamCtype:function(){return Wr},getTwitterPlayerUrl:function(){return Vr},getTwitterTitle:function(){return Sr},getTwitterUseFacebook:function(){return Ar},hasRedirect:function(){return lr},hasSchemaUpdated:function(){return _r},isDiviPageSettingsBarActive:function(){return Ft},isDiviRankMathModalActive:function(){return Ht},isLoaded:function(){return Mt},isModifiedDateLocked:function(){return jt},isPro:function(){return Lt},isRefreshing:function(){return xt},isSchemaEditorOpen:function(){return yr},isSchemaTemplatesOpen:function(){return fr},isSnippetEditorOpen:function(){return ur}});const i=jQuery;var n=r.n(i);const o=lodash,s=wp.data,l=wp.hooks,m=wp.element;function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function d(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,c(a.key),a)}}function c(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=p(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}var u=new(function(){return e=function e(){var t,r,a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,a=null,(r=c(r="map"))in t?Object.defineProperty(t,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[r]=a},(t=[{key:"swap",value:function(e,t){var r=this;if(!(e=e||""))return"";var a=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return e.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(a,function(e){return r.replace(t,e)}).trim()}},{key:"replace",value:function(e,t){var r=t.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(r)){var a="term_description"===r?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():n()(a).val()}return r.includes("customfield(")?(r=r.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[r]:"":(e=e||this.getMap(),(r="seo_description"===(r="seo_title"===(r=r.includes("(")?r.split("(")[0]:r)?"title":r)?"excerpt":r)in e?e[r]:"")}},{key:"getMap",value:function(){var e=this;return null!==this.map||(this.map={},n().each(rankMath.variables,function(t,r){t=t.toLowerCase().replace(/%+/g,"").split("(")[0],e.map[t]=r.example})),this.map}},{key:"setVariable",value:function(e,t){null!==this.map?this.map[e]=t:void 0!==rankMath.variables[e]&&(rankMath.variables[e].example=t)}}])&&d(e.prototype,t),r&&d(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}());function h(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return t=(0,l.applyFilters)("rank_math_sanitize_data",t,e,r),null!==a&&(a=(0,l.applyFilters)("rank_math_sanitize_meta_value",a,e,r)),a=null===a?t:a,(0,l.doAction)("rank_math_data_changed",e,t,r),{type:"RANK_MATH_APP_DATA",key:e,value:t,metaKey:r,metaValue:a}}function y(e,t){return(0,l.doAction)("rank_math_update_app_ui",e,t),{type:"RANK_MATH_APP_UI",key:e,value:t}}function f(e){return u.setVariable("focuskw",e.split(",")[0]),rankMathEditor.refresh("keyword"),h("keywords",e,"rank_math_focus_keyword")}function _(e){return h("pillarContent",e,"rank_math_pillar_content",!0===e?"on":"off")}function b(e){return h("showScoreFrontend",e,"rank_math_dont_show_seo_score",!0===e?"off":"on")}function R(e){return h("score",e,"rank_math_seo_score")}function g(e){return h("canonicalUrl",e,"rank_math_canonical_url")}function k(e){return h("advancedRobots",e,"rank_math_advanced_robots")}function v(e){return h("robots",e,"rank_math_robots",Object.keys(e))}function w(e){return h("breadcrumbTitle",e,"rank_math_breadcrumb_title")}function A(e){return h("lockModifiedDate",e,"rank_math_lock_modified_date")}function G(){return h("dirtyMetadata",{})}function S(e){return{type:"RESET_STORE",value:e}}function q(e){return h("facebookTitle",e,"rank_math_facebook_title")}function E(e){return h("facebookDescription",e,"rank_math_facebook_description")}function P(e){return h("facebookImage",e,"rank_math_facebook_image")}function O(e){return h("facebookImageID",e,"rank_math_facebook_image_id")}function T(e){return h("facebookHasOverlay",e,"rank_math_facebook_enable_image_overlay",!0===e?"on":"off")}function D(e){return h("facebookImageOverlay",e,"rank_math_facebook_image_overlay")}function C(e){return rankMath.objectID=e,h("postID",e)}function I(e){return h("permalink",e,"permalink")}function j(e){return h("title",e,"rank_math_title")}function M(e){return h("description",e,"rank_math_description")}function N(e){return h("featuredImage",e)}function U(e,t){return h("primaryTerm",parseInt(e),"rank_math_primary_"+t)}function x(e,t){return h(e,t)}function L(e){return y("redirectionItem",e)}function F(){return y("redirectionItem",{})}function H(e){return y("hasRedirect",e)}const B=function(e){return e.replace(/<\/?[a-z][^>]*?>/gi,"")};r.dn(B);const V=function(e){return e.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};r.dn(V);const Y=function(e){return e.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};r.dn(Y);const z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,t)};r.dn(z);const W=function(e){return e.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};r.dn(W);const K=function(e){return e.replace(/<!--[\s\S]*?-->/g,"")};r.dn(K);const J=function(e){return e.replace(/&\S+?;/g,"")};function Q(e){return(0,o.isUndefined)(e)||!e?"":(0,o.flow)([V,z,B,K,J,Y,W])(e)}r.dn(J);const $=wp.autop;var X="[^<>&/\\[\\]\0- =]+?",Z=new RegExp("\\["+X+"( [^\\]]+?)?\\]","g"),ee=new RegExp("\\[/"+X+"\\]","g");const te=function(e){return e.replace(Z,"").replace(ee,"")};r.dn(te);const re=function(e,t){var r=function(e,t){for(var r,a=/<p(?:[^>]+)?>(.*?)<\/p>/gi,i=[];null!==(r=a.exec(e));)i.push(r);return(0,o.map)(i,function(e){return t?Q(e[1]):e[1]})}(e=(0,o.flow)([te,K,$.autop])(e),t=t||!1);return 0<r.length?r:[t?Q(e):e]};r.dn(re),r.dn(ie);var ae=document.createElement("div");function ie(e){return e&&"string"==typeof e&&(e=e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),ae.innerHTML=e,e=ae.textContent,ae.textContent=""),e}r.dn(le);var ne=function(e,t){return e=(e=Q(e)).replace(/\r?\n|\r/g," "),t?(0,o.truncate)(e,{length:t,separator:" "}):e},oe=function(e){if((0,o.isEmpty)(e))return"";e=z(e),e=V(e),e=(0,o.unescape)(e).replace(/\[caption[^\]]*\](.*)\[\/caption\]/g,"");var t=(0,o.filter)(re(e,!0),function(e){return""!==e.trim()});if(!t.length)return"";var r=rankMathEditor.getPrimaryKeyword();if(""!==r){var a=(0,o.filter)(t,function(e){return(0,o.includes)(e.toLowerCase(),r.toLowerCase())});if(0<a.length)return ne(a[0],160)}return ne(t[0],160)},se=function(e){return!(0,o.isUndefined)(e)&&!(0,o.isEmpty)(e)&&Q(e)};function le(e){var t=rankMathEditor.assessor.dataCollector.getData(),r=t.excerpt,a=oe(t.content),i=(0,o.isUndefined)(r)||(0,o.isEmpty)(r)?a:(0,o.unescape)(r);if(u.setVariable("excerpt",i),u.setVariable("seo_description",i),""!==(e=ie((0,l.applyFilters)("rankMath/description",e))))return Q(e);var n=(0,o.unescape)(rankMath.assessor.serpData.descriptionTemplate);return"term"===rankMath.objectType?se(n)||se(r)||a:se(r)||se(n)||a}function me(e){return e=u.swap(""!==e?e:rankMath.assessor.serpData.titleTemplate),rankMathEditor.refresh("title"),y("serpTitle",ie(e))}function pe(e){return e=""!==e?e:rankMathEditor.assessor.dataCollector.getSlug(),rankMathEditor.refresh("permalink"),y("serpSlug",e)}function de(e){return e=u.swap(le(e)),rankMathEditor.refresh("description"),y("serpDescription",e)}function ce(e){return y("isSnippetEditorOpen",e)}function ue(e){return y("snippetPreviewType",e)}function he(e){return h("twitterUseFacebook",e,"rank_math_twitter_use_facebook",!0===e?"on":"off")}function ye(e){return h("twitterCardType",e,"rank_math_twitter_card_type")}function fe(e){return h("twitterTitle",e,"rank_math_twitter_title")}function _e(e){return h("twitterDescription",e,"rank_math_twitter_description")}function be(e){return h("twitterAuthor",e,"rank_math_twitter_author")}function Re(e){return h("twitterImageID",e,"rank_math_twitter_image_id")}function ge(e){return h("twitterImage",e,"rank_math_twitter_image")}function ke(e){return h("twitterHasOverlay",e,"rank_math_twitter_enable_image_overlay",!0===e?"on":"off")}function ve(e){return h("twitterImageOverlay",e,"rank_math_twitter_image_overlay")}function we(e){return h("twitterPlayerUrl",e,"rank_math_twitter_player_url")}function Ae(e){return h("twitterPlayerSize",e,"rank_math_twitter_player_size")}function Ge(e){return h("twitterPlayerStream",e,"rank_math_twitter_player_stream")}function Se(e){return h("twitterPlayerStreamCtype",e,"rank_math_twitter_player_stream_ctype")}function qe(e){return h("twitterAppDescription",e,"rank_math_twitter_app_description")}function Ee(e){return h("twitterAppIphoneID",e,"rank_math_twitter_app_iphone_id")}function Pe(e){return h("twitterAppIphoneName",e,"rank_math_twitter_app_iphone_name")}function Oe(e){return h("twitterAppIphoneUrl",e,"rank_math_twitter_app_iphone_url")}function Te(e){return h("twitterAppIpadID",e,"rank_math_twitter_app_ipad_id")}function De(e){return h("twitterAppIpadName",e,"rank_math_twitter_app_ipad_name")}function Ce(e){return h("twitterAppIpadUrl",e,"rank_math_twitter_app_ipad_url")}function Ie(e){return h("twitterAppGoogleplayID",e,"rank_math_twitter_app_googleplay_id")}function je(e){return h("twitterAppGoogleplayName",e,"rank_math_twitter_app_googleplay_name")}function Me(e){return h("twitterAppGoogleplayUrl",e,"rank_math_twitter_app_googleplay_url")}function Ne(e){return h("twitterAppCountry",e,"rank_math_twitter_app_country")}function Ue(e){return y("isLoaded",e)}function xe(e){return y("selectedKeyword",e)}function Le(e){return y("socialTab",e)}function Fe(){return y("refreshResults",Date.now())}function He(){return y("isPro",!0)}function Be(e){return y("isDiviPageSettingsBarActive",e)}function Ve(e){return y("isDiviRankMathModalActive",e)}function Ye(e){return y("highlightedParagraphs",e)}const ze=wp.i18n,We=wp.apiFetch;var Ke=r.n(We);function Je(e){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Je(e)}function Qe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function $e(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Qe(Object(r),!0).forEach(function(t){Xe(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Qe(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function Xe(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Je(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=Je(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Je(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ze(e){return y("isSchemaEditorOpen",e)}function et(e){return y("isSchemaTemplatesOpen",e)}function tt(e){return y("schemaUpdated",e)}function rt(e){return y("editingSchemaId",e)}function at(e){return y("editorTab",e)}function it(e){return y("templateTab",e)}function nt(e){return y("editSchemas",e)}function ot(e){return h("schemas",e)}function st(e,t){var r=$e({},(0,s.select)("rank-math").getEditSchemas());return r[e]=t,y("editSchemas",r)}function lt(e,t){var r=$e({},(0,s.select)("rank-math").getSchemas());return r[e]=t,h("schemas",r)}function mt(e){var t=$e({},(0,s.select)("rank-math").getSchemas());return delete t[e],(0,l.doAction)("rank_math_schema_trash",e),h("schemas",t,"rank_math_delete_"+e,"")}function pt(e,t,r){return Ke()({method:"POST",path:"rankmath/v1/saveTemplate",data:{schema:e,postId:r}}).then(function(r){t({loading:!1,showNotice:!0,postId:r.id}),setTimeout(function(){t({showNotice:!1}),(0,o.get)(rankMath,"isTemplateScreen",!1)&&(document.title=(0,ze.__)("Edit Schema","seo-by-rank-math"),window.history.pushState(null,"",r.link.replace(/&amp;/g,"&")))},2e3),rankMath.schemaTemplates.push({schema:e,title:e.metadata.title,type:e["@type"]})}),t({loading:!0}),{type:"DONT_WANT_TO_DO_SOMETHING"}}function dt(e){return h("contentAIScore",e,"rank_math_contentai_score",e)}function ct(e){return ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ct(e)}function ut(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function ht(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ut(Object(r),!0).forEach(function(t){yt(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ut(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function yt(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=ct(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=ct(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ct(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ft=function(e){var t=e.assessor.serpData,r=e.assessor.hasRedirection;return{postID:null,title:t.title?t.title:t.titleTemplate,description:t.description,keywords:t.focusKeywords?t.focusKeywords:"",pillarContent:t.pillarContent,featuredImage:"",permalink:!1,primaryTerm:t.primaryTerm,robots:t.robots,advancedRobots:t.advancedRobots,canonicalUrl:t.canonicalUrl,breadcrumbTitle:t.breadcrumbTitle,showScoreFrontend:t.showScoreFrontend,lockModifiedDate:t.lockModifiedDate,redirectionID:r?(0,o.get)(e.assessor,"redirection.id",""):"",redirectionType:r?(0,o.get)(e.assessor,"redirection.header_code",""):"",redirectionUrl:r?(0,o.get)(e.assessor,"redirection.url_to",""):"",facebookTitle:t.facebookTitle,facebookImage:t.facebookImage,facebookImageID:t.facebookImageID,facebookAuthor:t.facebookAuthor,facebookDescription:t.facebookDescription,facebookHasOverlay:t.facebookHasOverlay,facebookImageOverlay:t.facebookImageOverlay,twitterTitle:t.twitterTitle,twitterImage:t.twitterImage,twitterAuthor:t.twitterAuthor,twitterImageID:t.twitterImageID,twitterCardType:t.twitterCardType,twitterUseFacebook:t.twitterUseFacebook,twitterDescription:t.twitterDescription,twitterHasOverlay:t.twitterHasOverlay,twitterImageOverlay:t.twitterImageOverlay,twitterPlayerUrl:t.twitterPlayerUrl,twitterPlayerSize:t.twitterPlayerSize,twitterPlayerStream:t.twitterPlayerStream,twitterPlayerStreamCtype:t.twitterPlayerStreamCtype,twitterAppDescription:t.twitterAppDescription,twitterAppIphoneName:t.twitterAppIphoneName,twitterAppIphoneID:t.twitterAppIphoneID,twitterAppIphoneUrl:t.twitterAppIphoneUrl,twitterAppIpadName:t.twitterAppIpadName,twitterAppIpadID:t.twitterAppIpadID,twitterAppIpadUrl:t.twitterAppIpadUrl,twitterAppGoogleplayName:t.twitterAppGoogleplayName,twitterAppGoogleplayID:t.twitterAppGoogleplayID,twitterAppGoogleplayUrl:t.twitterAppGoogleplayUrl,twitterAppCountry:t.twitterAppCountry,schemas:(0,o.get)(e,"schemas",{}),score:0,dirtyMetadata:{}}};function _t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ft(rankMath),t=arguments.length>1?arguments[1]:void 0,r=ht({},e.dirtyMetadata);return!1!==t.metaKey&&(r[t.metaKey]=t.metaValue),"RESET_STORE"===t.type?ht({},ft(t.value)):"RANK_MATH_APP_DATA"===t.type?"dirtyMetadata"===t.key?ht(ht({},e),{},{dirtyMetadata:t.value}):ht(ht({},e),{},yt(yt({},t.key,t.value),"dirtyMetadata",r)):e}function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function gt(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Rt(Object(r),!0).forEach(function(t){kt(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Rt(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function kt(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=bt(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=bt(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==bt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var vt={isLoaded:!1,isPro:!1,selectedKeyword:{tag:"",index:0,data:{value:""}},hasRedirect:rankMath.assessor.hasRedirection&&!(0,o.isEmpty)((0,o.get)(rankMath.assessor,"redirection.id",""))&&!(0,o.isEmpty)((0,o.get)(rankMath.assessor,"redirection.url_to","")),serpTitle:"",serpSlug:"",serpDescription:(0,o.get)(rankMath.assessor,"serpData.description",""),isSnippetEditorOpen:!1,snippetPreviewType:"",refreshResults:"",redirectionItem:{},socialTab:"facebook",highlightedParagraphs:[],editorTab:"",templateTab:"",editSchemas:{},editingSchemaId:"",isSchemaEditorOpen:!1,isSchemaTemplatesOpen:!1,schemaUpdated:!1,isDiviRankMathModalActive:!1,isDiviPageSettingsBarActive:!1};function wt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:vt,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?gt(gt({},e),{},kt({},t.key,t.value)):e}function At(e){return e.appData}function Gt(e){return e.appData.dirtyMetadata}function St(e){return e.appData.score}function qt(e){return e.appData.keywords}function Et(e){return e.appData.pillarContent}function Pt(e){return e.appData.robots}function Ot(e){return e.appData.advancedRobots}function Tt(e){return e.appData.canonicalUrl}function Dt(e){return e.appData.breadcrumbTitle}function Ct(e){return"todo"}function It(e){return e.appData.showScoreFrontend}function jt(e){return e.appData.lockModifiedDate}function Mt(e){return e.appUi.isLoaded}function Nt(e){return e.appUi.selectedKeyword}function Ut(e){return e.appUi.socialTab}function xt(e){return e.appUi.refreshResults}function Lt(e){return e.appUi.isPro}function Ft(e){return e.appUi.isDiviPageSettingsBarActive}function Ht(e){return e.appUi.isDiviRankMathModalActive}function Bt(e){return e.appUi.highlightedParagraphs}function Vt(e){return e.appData.facebookTitle}function Yt(e){return e.appData.facebookDescription}function zt(e){return e.appData.facebookAuthor}function Wt(e){return e.appData.facebookImageID}function Kt(e){return e.appData.facebookImage}function Jt(e){return e.appData.facebookHasOverlay}function Qt(e){return""!==e.appData.facebookImageOverlay?e.appData.facebookImageOverlay:"play"}function $t(e){return e.appData.postID}function Xt(e){return e.appData.title}function Zt(e){return e.appData.permalink}function er(e){return e.appData.description}function tr(e){return e.appData.featuredImage}function rr(e){var t=e.appData.featuredImage;return'<img src="'.concat(t.source_url,'" alt="').concat(t.alt_text,'" >')}function ar(e){return e.appData.primaryTerm}function ir(e){return String(e.appData.redirectionID)}function nr(e){return e.appData.redirectionType}function or(e){return e.appData.redirectionUrl}function sr(e){return e.appUi.redirectionItem}function lr(e){return e.appUi.hasRedirect}const mr=wp.url;function pr(e){return ie(e.appUi.serpTitle)}function dr(e){return(0,mr.safeDecodeURIComponent)(e.appUi.serpSlug)}function cr(e){return e.appUi.serpDescription}function ur(e){return e.appUi.isSnippetEditorOpen}function hr(e){return e.appUi.snippetPreviewType}function yr(e){return e.appUi.isSchemaEditorOpen}function fr(e){return e.appUi.isSchemaTemplatesOpen}function _r(e){return e.appUi.schemaUpdated}function br(e){return e.appData.schemas}function Rr(e){return e.appUi.editSchemas}function gr(e){return{id:e.appUi.editingSchemaId,data:e.appUi.editSchemas[e.appUi.editingSchemaId]}}function kr(e){return e.appData.schemas[e.appUi.editingSchemaId]}function vr(e){return e.appUi.editorTab}function wr(e){return e.appUi.templateTab}function Ar(e){return e.appData.twitterUseFacebook}function Gr(e){return e.appData.twitterCardType}function Sr(e){return e.appData.twitterTitle}function qr(e){return e.appData.twitterDescription}function Er(e){return e.appData.twitterAuthor}function Pr(e){return e.appData.twitterImageID}function Or(e){return e.appData.twitterImage}function Tr(e){return e.appData.twitterHasOverlay}function Dr(e){return""!==e.appData.twitterImageOverlay?e.appData.twitterImageOverlay:"play"}function Cr(e){return e.appData.twitterAppDescription}function Ir(e){return e.appData.twitterAppIphoneID}function jr(e){return e.appData.twitterAppIphoneName}function Mr(e){return e.appData.twitterAppIphoneUrl}function Nr(e){return e.appData.twitterAppIpadID}function Ur(e){return e.appData.twitterAppIpadName}function xr(e){return e.appData.twitterAppIpadUrl}function Lr(e){return e.appData.twitterAppGoogleplayID}function Fr(e){return e.appData.twitterAppGoogleplayName}function Hr(e){return e.appData.twitterAppGoogleplayUrl}function Br(e){return e.appData.twitterAppCountry}function Vr(e){return e.appData.twitterPlayerUrl}function Yr(e){return e.appData.twitterPlayerSize}function zr(e){return e.appData.twitterPlayerStream}function Wr(e){return e.appData.twitterPlayerStreamCtype}(0,s.registerStore)("rank-math",{reducer:(0,s.combineReducers)(t),selectors:a,actions:e});const Kr={version:"1.0.0",properties:{author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math")}}}},rating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}},bookEditions:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Edition","rank-math"),help:(0,ze.__)("Either a specific edition of the written work, or the volume of the work","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Book"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Title","rank-math"),help:(0,ze.__)("The title of the tome. Use for the title of the tome if it differs from the book. *Optional when tome has the same title as the book","rank-math")}}},bookEdition:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Edition","rank-math"),help:(0,ze.__)("The edition of the book","rank-math")}}},isbn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("ISBN","rank-math"),help:(0,ze.__)("The ISBN of the print book","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("URL","rank-math"),help:(0,ze.__)("URL specific to this edition if one exists","rank-math")}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Date Published","rank-math"),help:(0,ze.__)("Date of first publication of this tome","rank-math")}}},bookFormat:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Book Format","rank-math"),desc:"The format of the book.",options:{"https://schema.org/EBook":"eBook","https://schema.org/Hardcover":"Hardcover","https://schema.org/Paperback":"Paperback","https://schema.org/AudioBook":"Audio Book"},default:"https://schema.org/Hardcover"}}}},provider:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Course Provider","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Organization"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Provider Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Provider URL","rank-math")}}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Repeat Count","rank-math"),help:(0,ze.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Repeat Frequency","rank-math"),help:(0,ze.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":(0,ze.__)("Select Repeat Frequency","seo-by-rank-math"),Daily:(0,ze.__)("Daily","seo-by-rank-math"),Weekly:(0,ze.__)("Weekly","seo-by-rank-math"),Monthly:(0,ze.__)("Monthly","seo-by-rank-math"),Yearly:(0,ze.__)("Yearly","seo-by-rank-math")},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Start Date","rank-math"),help:(0,ze.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("End Date","rank-math"),help:(0,ze.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}},courseInstance:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Instance","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"CourseInstance"}},courseMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Course Mode","rank-math"),help:(0,ze.__)("The medium through which the course will be delivered.","rank-math"),options:{Online:"Online",Onsite:"Onsite",Blended:"Blended"},default:"Online"}}},courseWorkload:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Course Workload","rank-math"),help:(0,ze.__)("Total time to watch all videos and complete all assignments and exams for the course. Use the 8601 format. Example: PT22H","rank-math")}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Repeat Count","rank-math"),help:(0,ze.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Repeat Frequency","rank-math"),help:(0,ze.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":"Select Repeat Frequency",Daily:"Daily",Weekly:"Weekly",Monthly:"Monthly",Yearly:"Yearly"},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Start Date","rank-math"),help:(0,ze.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("End Date","rank-math"),help:(0,ze.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math")}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math")}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math")}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math")}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math")}}}},"virtual-location":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{value:"VirtualLocation"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Online Event URL","rank-math"),help:(0,ze.__)("The URL of the online event, where people can join. This property is required if your event is happening online","rank-math")}}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}},"physical-location":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue Name","rank-math"),help:(0,ze.__)("The venue name.","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue URL","rank-math"),help:(0,ze.__)("Website URL of the venue","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}}},"event-performer":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Performer Information","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Performer","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Person"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Website or Social Link","rank-math")}}}},"monetary-amount-unit":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Salary (Recommended)","rank-math"),help:(0,ze.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Payroll (Recommended)","rank-math"),help:(0,ze.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}},"monetary-amount":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"MonetaryAmount"}},currency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Salary Currency","rank-math"),help:(0,ze.__)("ISO 4217 Currency code. Example: EUR","rank-math"),classes:"col-4"}}},value:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Salary (Recommended)","rank-math"),help:(0,ze.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Payroll (Recommended)","rank-math"),help:(0,ze.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}}},"hiring-organization":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Organization"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Hiring Organization","rank-math"),placeholder:"%org_name%",help:(0,ze.__)("The name of the company. Leave empty to use your own company information.","rank-math"),classes:"col-4"}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Organization URL (Recommended)","rank-math"),placeholder:"%org_url%",help:(0,ze.__)("The URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}},logo:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Organization Logo (Recommended)","rank-math"),placeholder:"%org_logo%",help:(0,ze.__)("Logo URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}}},brand:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Brand"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Brand Name","rank-math")}}}},calories:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"NutritionInformation"}},calories:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Calories","rank-math"),help:(0,ze.__)("The number of calories in the recipe. Optional.","rank-math")}}}},"video-object":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Video","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"VideoObject"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Name","rank-math"),help:(0,ze.__)("A recipe video Name","rank-math"),classes:"col-6"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),help:(0,ze.__)("A recipe video Description","rank-math")}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Video URL","rank-math"),help:(0,ze.__)("A video URL. Optional.","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Content URL","rank-math"),help:(0,ze.__)("A URL pointing to the actual video media file","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Recipe Video Thumbnail","rank-math"),help:(0,ze.__)("A recipe video thumbnail URL","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-6"}}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Video Upload Date","rank-math"),classes:"col-6"}}}},instructionText:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"HowtoStep"}},text:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea"}}}},instructions:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Recipe Instructions","rank-math"),help:(0,ze.__)("Either a specific edition of the written work, or the volume of the work","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"HowToSection"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Name","rank-math"),help:(0,ze.__)("Instruction name of the recipe.","rank-math")}}},itemListElement:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"instructionText",arrayProps:{map:{classes:"show-delete-property-group"}},classes:"show-add-property-group",field:{label:(0,ze.__)("Instruction Texts","rank-math")}}}},"geo-coordinates":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Geo Coordinates","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"GeoCoordinates"}},latitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Latitude","rank-math")}}},longitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Longitude","rank-math")}}}},"opening-hours":{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Timings","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"OpeningHoursSpecification"}},dayOfWeek:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"checkbox",label:(0,ze.__)("Open Days","rank-math"),options:{monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday"},default:[]}}},opens:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,ze.__)("Opening Time","rank-math"),classes:"col-6",placeholder:"09:00 AM"}}},closes:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,ze.__)("Closing Time","rank-math"),classes:"col-6",placeholder:"05:00 PM"}}}},cuisine:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1},cuisine:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Cuisine","rank-math")}}}}},schemas:{Article:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Article","rank-math"),defaultEn:"Article"},headline:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},keywords:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Keywords","rank-math"),placeholder:"%keywords%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Article Type","rank-math"),classes:"show-property",options:{Article:"Article",BlogPosting:"Blog Post",NewsArticle:"News Article"},notice:{status:"warning",className:"article-notice",content:(0,ze.__)("Google does not allow Person as the Publisher for articles. Organization will be used instead.","rank-math")}}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Published Date","rank-math"),classes:"hide-group",default:"%date(Y-m-d\\TH:i:sP)%"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Modified Date","rank-math"),classes:"hide-group",default:"%modified(Y-m-d\\TH:i:sP)%"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},articleSection:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Article Section","rank-math"),classes:"hide-group",default:"%primary_taxonomy_terms%"}}}},Book:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Book","rank-math"),defaultEn:"Book"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("URL","rank-math")}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}},hasPart:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"bookEditions",arrayProps:{map:{classes:"show-delete-property-group"}},field:{label:(0,ze.__)("Editions","rank-math")}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Course:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Course","rank-math"),defaultEn:"Course"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},provider:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Course Provider","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Organization"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Provider Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Provider URL","rank-math")}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},hasCourseInstance:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Instance","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"CourseInstance"}},courseMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Course Mode","rank-math"),help:(0,ze.__)("The medium through which the course will be delivered.","rank-math"),options:{Online:"Online",Onsite:"Onsite",Blended:"Blended"},default:"Online"}}},courseWorkload:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Course Workload","rank-math"),help:(0,ze.__)("Total time to watch all videos and complete all assignments and exams for the course. Use the 8601 format. Example: PT22H","rank-math")}}},courseSchedule:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Course Schedule","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,value:"Schedule"}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("Suggested pacing in repeatFrequency units (8601 duration format). For example, PT5H monthly means 5 hours per month. Use courseWorkload for total length.","rank-math")}}},repeatCount:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Repeat Count","rank-math"),help:(0,ze.__)("The numerical value for how long the course lasts for, in repeatFrequency units. For example, if the repeatFrequency is monthly and the repeatCount is 4, the course lasts for 4 months.","rank-math")}}},repeatFrequency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Repeat Frequency","rank-math"),help:(0,ze.__)("The duration and repeatCount properties are relative to this field. ","rank-math"),options:{"":"Select Repeat Frequency",Daily:"Daily",Weekly:"Weekly",Monthly:"Monthly",Yearly:"Yearly"},default:""}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Start Date","rank-math"),help:(0,ze.__)("The start date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("End Date","rank-math"),help:(0,ze.__)("The end date for the course, in 8601 date format (YYYY-MM-DD), if applicable.","rank-math"),classes:"col-4"}}}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math"),help:(0,ze.__)("The pricing category of the course. Example: Free, Partially Free, Subscription, Paid","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math"),help:(0,ze.__)("The numerical price of the course, if applicable.","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math"),help:(0,ze.__)("The currency of the price of the course, in ISO 4217 currency format (3 letter code), if applicable.","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}}},Event:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Event","rank-math"),defaultEn:"Event"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"select",label:(0,ze.__)("Event Type","rank-math"),help:(0,ze.__)("Type of the event","rank-math"),classes:"show-property col-4",options:{Event:"Event",BusinessEvent:"Business Event",ChildrensEvent:"Childrens Event",ComedyEvent:"Comedy Event",DanceEvent:"Dance Event",DeliveryEvent:"Delivery Event",EducationEvent:"Education Event",ExhibitionEvent:"Exhibition Event",Festival:"Festival",FoodEvent:"Food Event",LiteraryEvent:"Literary Event",MusicEvent:"Music Event",PublicationEvent:"Publication Event",SaleEvent:"Sale Event",ScreeningEvent:"Screening Event",SocialEvent:"Social Event",SportsEvent:"Sports Event",TheaterEvent:"Theater Event",VisualArtsEvent:"Visual Arts Event"}}}},eventStatus:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Event Status","rank-math"),help:(0,ze.__)("Current status of the event (optional)","rank-math"),options:{"":"None",EventScheduled:"Scheduled",EventCancelled:"Cancelled",EventPostponed:"Postponed",EventRescheduled:"Rescheduled",EventMovedOnline:"Moved Online"},classes:"col-4",default:"EventScheduled"}}},eventAttendanceMode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Event Attendance Mode","rank-math"),help:(0,ze.__)("Indicates whether the event occurs online, offline at a physical location, or a mix of both online and offline.","rank-math"),options:{OfflineEventAttendanceMode:"Offline",OnlineEventAttendanceMode:"Online",MixedEventAttendanceMode:"Online + Offline"},default:"OfflineEventAttendanceMode",classes:"col-4"}}},VirtualLocation:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header",dependency:[{field:"eventAttendanceMode",value:["OnlineEventAttendanceMode","MixedEventAttendanceMode"]}]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{value:"VirtualLocation"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Online Event URL","rank-math"),help:(0,ze.__)("The URL of the online event, where people can join. This property is required if your event is happening online","rank-math")}}}},location:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header",dependency:[{field:"eventAttendanceMode",value:["OfflineEventAttendanceMode","MixedEventAttendanceMode"]}]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue Name","rank-math"),help:(0,ze.__)("The venue name.","rank-math")}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue URL","rank-math"),help:(0,ze.__)("Website URL of the venue","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}}},performer:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Performer Information","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Performer","rank-math"),classes:"show-property",options:{Organization:"Organization",Person:"Person"},default:"Person"}}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math")}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Website or Social Link","rank-math")}}}},startDate:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Start Date","rank-math"),help:(0,ze.__)("Date and time of the event","rank-math"),classes:"col-4"}}},endDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("End Date","rank-math"),help:(0,ze.__)("End date and time of the event","rank-math"),classes:"col-4"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math"),classes:"hide-group",placeholder:"General Admission"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math"),classes:"hide-group",placeholder:"primary"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math")}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math")}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math")}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},JobPosting:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Job Posting","rank-math"),defaultEn:"Job Posting"},title:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},baseSalary:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"MonetaryAmount"}},currency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Salary Currency","rank-math"),help:(0,ze.__)("ISO 4217 Currency code. Example: EUR","rank-math"),classes:"col-4"}}},value:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Salary","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"QuantitativeValue"}},value:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Salary (Recommended)","rank-math"),help:(0,ze.__)("Insert amount, e.g. 50.00, or a salary range, e.g. 40.00-50.00","rank-math"),classes:"col-4"}}},unitText:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Payroll (Recommended)","rank-math"),help:(0,ze.__)("Salary amount is for","rank-math"),options:{"":"None",YEAR:"Yearly",MONTH:"Monthly",WEEK:"Weekly",DAY:"Daily",HOUR:"Hourly"},classes:"col-4"}}}}},datePosted:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Date Posted","rank-math"),placeholder:"%date(Y-m-d)%",help:(0,ze.__)("The original date on which employer posted the job. You can leave it empty to use the post publication date as job posted date","rank-math"),classes:"col-4"}}},validThrough:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Expiry Posted","rank-math"),help:(0,ze.__)("The date when the job posting will expire. If a job posting never expires, or you do not know when the job will expire, do not include this property","rank-math"),classes:"col-4"}}},unpublish:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Unpublish when expired","rank-math"),options:{on:"Yes",off:"No"},help:(0,ze.__)("If checked, post status will be changed to Draft and its URL will return a 404 error, as required by the Rich Result guidelines","rank-math"),classes:"col-4",default:"on"}}},employmentType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"checkbox",multiple:!0,label:(0,ze.__)("Employment Type (Recommended)","rank-math"),help:(0,ze.__)("Type of employment. You can choose more than one value","rank-math"),options:{"":"None",FULL_TIME:"Full Time",PART_TIME:"Part Time",CONTRACTOR:"Contractor",TEMPORARY:"Temporary",INTERN:"Intern",VOLUNTEER:"Volunteer",PER_DIEM:"Per Diem",OTHER:"Other"},default:[]}}},hiringOrganization:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Organization"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Hiring Organization","rank-math"),placeholder:"%org_name%",help:(0,ze.__)("The name of the company. Leave empty to use your own company information.","rank-math"),classes:"col-4"}}},sameAs:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Organization URL (Recommended)","rank-math"),placeholder:"%org_url%",help:(0,ze.__)("The URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}},logo:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Organization Logo (Recommended)","rank-math"),placeholder:"%org_logo%",help:(0,ze.__)("Logo URL of the organization offering the job position. Leave empty to use your own company information","rank-math"),classes:"col-6"}}}},id:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Posting ID (Recommended)","rank-math"),help:(0,ze.__)("The hiring organization's unique identifier for the job.","rank-math"),classes:"col-6"}}},jobLocation:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Place"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue Name","rank-math"),help:(0,ze.__)("The venue name.","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Venue URL","rank-math"),help:(0,ze.__)("Website URL of the venue","rank-math"),classes:"hide-group"}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Music:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Music","rank-math"),defaultEn:"Music"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("URL","rank-math"),placeholder:"%url%"}}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Music Type","rank-math"),classes:"show-property",options:{MusicGroup:"MusicGroup",MusicAlbum:"MusicAlbum"},default:"MusicGroup"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Person:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Person","rank-math"),defaultEn:"Person"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},email:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Email","rank-math")}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}},gender:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Gender","rank-math"),classes:"col-6"}}},jobTitle:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Job title","rank-math"),help:(0,ze.__)("The job title of the person (for example, Financial Manager).","rank-math"),classes:"col-6"}}}},Product:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Product","rank-math"),defaultEn:"Product"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Product name","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},sku:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Product SKU","rank-math")}}},brand:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Brand"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Brand Name","rank-math")}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}},gtin8:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Gtin","rank-math"),classes:"hide-group"}}},mpn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("MPN","rank-math"),classes:"hide-group"}}},isbn:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("ISBN","rank-math"),classes:"hide-group"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math"),classes:"hide-group",placeholder:"%url%"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:"col-4",options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math")}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}}},Recipe:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Recipe","rank-math"),defaultEn:"Recipe"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Published Date","rank-math"),classes:"hide-group",default:"%date(Y-m-d\\TH:i:sP)%"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},prepTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Preparation Time","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},cookTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Cooking Time","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},totalTime:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Total Time","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-4"}}},recipeCategory:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Type","rank-math"),help:(0,ze.__)("Type of dish, for example appetizer, or dessert.","rank-math"),classes:"col-4"}}},recipeCuisine:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Cuisine","rank-math"),help:(0,ze.__)("The cuisine of the recipe (for example, French or Ethiopian).","rank-math"),classes:"col-4"}}},keywords:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Keywords","rank-math"),help:(0,ze.__)("Other terms for your recipe such as the season, the holiday, or other descriptors. Separate multiple entries with commas.","rank-math"),classes:"col-4"}}},recipeYield:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Recipe Yield","rank-math"),help:(0,ze.__)("Quantity produced by the recipe, for example 4 servings","rank-math"),classes:"col-4"}}},nutrition:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"NutritionInformation"}},calories:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Calories","rank-math"),help:(0,ze.__)("The number of calories in the recipe. Optional.","rank-math")}}}},recipeIngredient:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"show-add-property show-delete-property",field:{label:(0,ze.__)("Recipe Ingredients","rank-math"),help:(0,ze.__)("Recipe ingredients, add one item per line","rank-math")}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}},video:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Video","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"VideoObject"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Name","rank-math"),help:(0,ze.__)("A recipe video Name","rank-math"),classes:"col-6"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),help:(0,ze.__)("A recipe video Description","rank-math")}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Video URL","rank-math"),help:(0,ze.__)("A video URL. Optional.","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Content URL","rank-math"),help:(0,ze.__)("A URL pointing to the actual video media file","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Recipe Video Thumbnail","rank-math"),help:(0,ze.__)("A recipe video thumbnail URL","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: PT1H30M","rank-math"),classes:"col-6"}}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datepicker",label:(0,ze.__)("Video Upload Date","rank-math"),classes:"col-6"}}}},instructionType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"radio",label:(0,ze.__)("Instruction Type","rank-math"),options:{SingleField:"Single Field",HowToStep:"How To Step"},default:"SingleField"}}},instructionsSingleField:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Recipe Instructions","rank-math")},dependency:[{field:"instructionType",value:"SingleField"}]}},instructionsHowToStep:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,arrayMap:"instructions",arrayProps:{map:{classes:"show-delete-property-group"}},field:{label:(0,ze.__)("Recipe Instructions","rank-math")},dependency:[{field:"instructionType",value:["HowToStep"]}]}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Restaurant:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Restaurant","rank-math"),defaultEn:"Restaurant"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},telephone:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Phone Number","rank-math")}}},priceRange:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Price Range","rank-math"),classes:"col-4"}}},address:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Address","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"PostalAddress"}},streetAddress:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Street Address","rank-math")}}},addressLocality:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Locality","rank-math")}}},addressRegion:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Region","rank-math")}}},postalCode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Postal Code","rank-math")}}},addressCountry:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"text",label:(0,ze.__)("Country","rank-math")}}}},geo:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Geo Coordinates","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"GeoCoordinates"}},latitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Latitude","rank-math")}}},longitude:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Longitude","rank-math")}}}},openingHoursSpecification:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Timings","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"OpeningHoursSpecification"}},dayOfWeek:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"checkbox",label:(0,ze.__)("Open Days","rank-math"),options:{monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday"},default:[]}}},opens:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,ze.__)("Opening Time","rank-math"),classes:"col-6",placeholder:"09:00 AM"}}},closes:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"timepicker",label:(0,ze.__)("Closing Time","rank-math"),classes:"col-6",placeholder:"05:00 PM"}}}},servesCuisine:{map:{isArray:!0,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"show-add-property show-delete-property",field:{label:(0,ze.__)("Serves Cuisine","rank-math")}}},hasMenu:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Menu URL","rank-math"),help:(0,ze.__)("URL pointing to the menu of the restaurant.","rank-math"),classes:"col-6"}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},Service:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Service","rank-math"),defaultEn:"Service"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},serviceType:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Service Type","rank-math"),help:(0,ze.__)("The type of service being offered, e.g. veterans' benefits, emergency relief, etc.","rank-math"),classes:"col-4"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},SoftwareApplication:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Software","rank-math"),defaultEn:"Software"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},reviewLocation:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"select",label:(0,ze.__)("Review Location","rank-math"),help:(0,ze.__)("The review or rating must be displayed on the page to comply with Google's Schema guidelines.","rank-math"),options:{bottom:"Below Content",top:"Above Content",both:"Above and Below Content",custom:"Custom (use shortcode)"},default:"custom"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]",dependency:[{field:"reviewLocation",value:"custom"}]}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},operatingSystem:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Operating System","rank-math"),help:(0,ze.__)("For example, Windows 7, OSX 10.6, Android 1.6","rank-math"),classes:"col-6"}}},applicationCategory:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Application Category","rank-math"),help:(0,ze.__)("For example, Game, Multimedia","rank-math"),classes:"col-6"}}},offers:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Offers","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Offer"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Name","rank-math"),classes:"hide-group"}}},category:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Category","rank-math"),classes:"hide-group"}}},url:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("URL","rank-math"),classes:"hide-group"}}},price:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Price","rank-math")}}},priceCurrency:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{label:(0,ze.__)("Currency","rank-math")}}},availability:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"select",label:(0,ze.__)("Availability","rank-math"),help:(0,ze.__)("Offer availability","rank-math"),classes:["col-4","hide-group"],options:{InStock:"In Stock",SoldOut:"Sold Out",PreOrder:"Preorder"},default:"InStock"}}},validFrom:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid From","rank-math"),help:(0,ze.__)("The date when the item becomes valid.","rank-math"),classes:"hide-group"}}},priceValidUntil:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"datepicker",label:(0,ze.__)("Price Valid Until","rank-math"),help:(0,ze.__)("The date after which the price will no longer be available","rank-math"),classes:"hide-group"}}},inventoryLevel:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Inventory Level","rank-math"),classes:"hide-group"}}}},review:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Review","rank-math")}},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Review"}},datePublished:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Published Date","rank-math"),placeholder:"%date(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},dateModified:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"datetimepicker",label:(0,ze.__)("Modified Date","rank-math"),placeholder:"%modified(Y-m-d\\TH:i:sP)%",classes:"hide-group"}}},author:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Person"}},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Author Name","rank-math"),placeholder:"%name%"}}}},reviewRating:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:"hide-group-header"},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"Rating"}},ratingValue:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating","rank-math"),help:(0,ze.__)("Rating score","rank-math")}}},worstRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Minimum","rank-math"),help:(0,ze.__)("Rating minimum score","rank-math"),placeholder:1}}},bestRating:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{type:"number",label:(0,ze.__)("Rating Maximum","rank-math"),help:(0,ze.__)("Rating maximum score","rank-math"),placeholder:5}}}}},image:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,classes:["hide-group-header","hide-group"]},"@type":{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,value:"ImageObject"}},url:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Image URL","rank-math"),placeholder:"%post_thumbnail%"}}}}},VideoObject:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("Video","rank-math"),defaultEn:"Video"},name:{map:{isArray:!1,isGroup:!1,isRequired:!0,isRecommended:!1,field:{label:(0,ze.__)("Headline","rank-math"),placeholder:"%seo_title%"}}},description:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!0,field:{type:"textarea",label:(0,ze.__)("Description","rank-math"),placeholder:"%seo_description%"}}},reviewLocationShortcode:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,save:"metadata",field:{type:"text",label:(0,ze.__)("Shortcode","rank-math"),help:(0,ze.__)("You can either use this shortcode or Schema Block in the block editor to print the schema data in the content in order to meet the Google's guidelines. Read more about it <a href=https://developers.google.com/search/docs/guides/sd-policies#content target=_blank>here</a>.","rank-math"),readOnly:"readonly"},value:"[rank_math_rich_snippet]"}},uploadDate:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Upload Date","rank-math"),classes:"hide-group",placeholder:"%date(Y-m-d\\TH:i:sP)%"}}},embedUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Embed URL","rank-math"),help:(0,ze.__)("A URL pointing to the embeddable player for the video. Example: <code>https://www.youtube.com/embed/VIDEOID</code>","rank-math"),classes:"col-6"}}},contentUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Content URL","rank-math"),help:(0,ze.__)("A URL pointing to the actual video media file like MP4, MOV, etc. Please leave it empty if you don't know the URL.","rank-math"),classes:"col-6"}}},duration:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Duration","rank-math"),help:(0,ze.__)("ISO 8601 duration format. Example: 1H30M","rank-math"),classes:"col-6"}}},thumbnailUrl:{map:{isArray:!1,isGroup:!1,isRequired:!1,isRecommended:!1,field:{label:(0,ze.__)("Video Thumbnail","rank-math"),help:(0,ze.__)("A video thumbnail URL","rank-math"),classes:"hide-group",placeholder:"%post_thumbnail%"}}}},WooCommerceProduct:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("WooCommerce Product","rank-math"),defaultEn:"WooCommerce Product"}},EDDProduct:{map:{isArray:!1,isGroup:!0,isRequired:!1,isRecommended:!1,title:(0,ze.__)("EDD Product","rank-math"),defaultEn:"EDD Product"}}}};const Jr={set:function(e,t,r){return!!e&&(localStorage.setItem(e,JSON.stringify({value:t,expires:this.expiry(r)})),!0)},get:function(e){if(!e)return!1;var t=localStorage.getItem(e);return!!t&&((t=JSON.parse(t)).expires&&Date.now()>t.expires?(localStorage.removeItem(e),!1):t.value)},remove:function(e){return!!e&&(localStorage.removeItem(e),!0)},expiry:function(e){if(!e)return!1;if(-1===e){var t=new Date;return t.setYear(1970),t.getTime()}var r=parseInt(e),a=e.replace(r,"");return"d"===a&&(r=24*r*60*60*1e3),"h"===a&&(r=60*r*60*1e3),"m"===a&&(r=60*r*1e3),"s"===a&&(r*=1e3),Date.now()+r}};function Qr(e){return Qr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qr(e)}function $r(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,Zr(a.key),a)}}function Xr(e,t,r){return(t=Zr(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Zr(e){var t=function(e,t){if("object"!=Qr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=Qr(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Qr(t)?t:t+""}var ea="rank_math_schema_templates_store",ta=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Xr(this,"cache",null),Xr(this,"templates",null),Xr(this,"verion","1.1.0"),"product"!==rankMath.postType&&delete Kr.schemas.WooCommerceProduct,"download"!==rankMath.postType&&delete Kr.schemas.EDDProduct,this.cache=(0,l.applyFilters)("rank_math_schema_maps",Kr),(0,l.doAction)("rank_math_schema_template_loaded")},t=[{key:"verifyCache",value:function(){var e=Jr.get(ea);return!1!==e&&this.version===e.version&&(this.cache=e,(0,l.doAction)("rank_math_schema_template_loaded"),!0)}},{key:"fetchStore",value:function(){var e=this;Ke()({method:"GET",url:"//"+window.location.host+"/wp-json/rankmath/v1/getSchemas"}).then(function(t){Jr.set(ea,t,"30d"),e.cache=t,(0,l.doAction)("rank_math_schema_template_loaded")})}},{key:"getMap",value:function(e){var t=(0,o.get)(this.cache.properties,e,!1);return t||(0,o.get)(this.cache.schemas,e,!1)}},{key:"getTemplates",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return null===this.templates&&(this.templates=[],(0,o.forEach)(this.cache.schemas,function(t,r){var a=(0,o.get)(t,"map.title",r);e.templates.push({type:r,title:"WooCommerceProduct"!==r?a:(0,ze.__)("WooCommerce Product","seo-by-rank-math")})}),t||this.templates.push({type:"PodcastEpisode",title:(0,ze.__)("Podcast Episode","seo-by-rank-math"),isPro:!0},{type:"Dataset",title:(0,ze.__)("Dataset","seo-by-rank-math"),isPro:!0},{type:"FactCheck",title:(0,ze.__)("Fact Check","seo-by-rank-math"),isPro:!0},{type:"Movie",title:(0,ze.__)("Movie","seo-by-rank-math"),isPro:!0},{type:"FAQ",title:(0,ze.__)("FAQ","seo-by-rank-math"),isPro:!0},{type:"HowTo",title:(0,ze.__)("HowTo","seo-by-rank-math"),isPro:!0}),this.templates=(0,o.orderBy)(this.templates,"type")),this.templates}}],t&&$r(e.prototype,t),r&&$r(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r}(),ra=new ta;function aa(e){return ra.getMap(e)}function ia(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return na(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?na(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var a=0,i=function(){};return{s:i,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){s=!0,n=e},f:function(){try{o||null==r.return||r.return()}finally{if(s)throw n}}}}function na(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function oa(e,t){if((0,o.isEmpty)(e)||t.id===e)return t;var r,a=ia(t.properties);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(i.id===e)return i;if(i.map.isGroup){var n=oa(e,i);if(n)return n}}}catch(e){a.e(e)}finally{a.f()}}function sa(e,t){if((0,o.isEmpty)(e))return t;var r,a=ia(t.properties);try{for(a.s();!(r=a.n()).done;){var i=r.value;if(i.property===e)return i.value=(0,o.has)(t.metadata,e)?t.metadata[e]:i.value,i}}catch(e){a.e(e)}finally{a.f()}return!1}const la={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let ma;const pa=new Uint8Array(16);function da(){if(!ma&&(ma="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!ma))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ma(pa)}const ca=[];for(let e=0;e<256;++e)ca.push((e+256).toString(16).slice(1));function ua(e,t=0){return ca[e[t+0]]+ca[e[t+1]]+ca[e[t+2]]+ca[e[t+3]]+"-"+ca[e[t+4]]+ca[e[t+5]]+"-"+ca[e[t+6]]+ca[e[t+7]]+"-"+ca[e[t+8]]+ca[e[t+9]]+"-"+ca[e[t+10]]+ca[e[t+11]]+ca[e[t+12]]+ca[e[t+13]]+ca[e[t+14]]+ca[e[t+15]]}const ha=function(e,t,r){if(la.randomUUID&&!t&&!e)return la.randomUUID();const a=(e=e||{}).random||(e.rng||da)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=a[e];return t}return ua(a)};function ya(){return{id:"g-".concat(ha()),property:"",properties:[],map:{isGroup:!0,isArray:!1,isRequired:!1,isRecommended:!1}}}function fa(){return{id:"p-".concat(ha()),property:"",value:"",map:{isGroup:!1,isArray:!1,isRequired:!1,isRecommended:!1}}}function _a(e){return e.id="g-".concat(ha()),e.properties.forEach(function(e){e.map.isGroup?_a(e):e.id="p-".concat(ha())}),e}var ba=function(e){if(!e)return ya();var t=e.map.isGroup?ya():fa();return(0,o.forEach)(e,function(e,r){if("map"!==r){var a=fa();e.map.isGroup&&(a=ba(e)),a.map=e.map,a.property=r,a.value=(0,o.get)(e.map,"value",(0,o.get)(e.map,"field.default","")),t.properties.push(a)}else(0,o.has)(e,"title")&&(t.map.title=e.title,t.map.defaultEn=e.defaultEn)}),t};function Ra(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=!1;arguments.length>2&&void 0!==arguments[2]&&arguments[2]||(r=(0,o.isString)(e)?aa(e):e);var a=ba(r);return(a=(0,o.merge)(a,t)).property=e,a}function ga(e){return ga="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ga(e)}function ka(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function va(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=ga(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=ga(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ga(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function wa(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(0,o.isEmpty)(t)||(0,o.forEach)(t,function(t,a){if("@context"!==a){var i=sa(a,e);if(i)Aa(i,a,t,r);else{var n=!r&&aa(a);(0,o.isArray)(t)?(i=ya()).map.isArray=!0:i=(0,o.isObject)(t)||n?wa(n?Ra(n):ya(),t,r):fa(),Aa(i,a,t,r),i.property=a,e.properties.push(i)}}}),e}var Aa=function(e,t,r){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!t)return e;var i=(0,l.applyFilters)("rank_math_schema_convert_value",!1,e,t,r,a);return!1!==i||!1!==(i=(0,l.applyFilters)("rank_math_schema_convert_"+t,!1,e,r))?i:(e.value=r,e)};function Ga(e,t){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return wa(Ra(t,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r),e,r)}function Sa(e){var t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ka(Object(r),!0).forEach(function(t){va(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ka(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},e),r=(0,l.applyFilters)("rank_math_schema_type",(0,o.get)(t,"@type","")),a=(0,o.get)(t,"metadata",{type:"template"});delete t.metadata;var i="custom"===a.type?ya():Ra(r);(0,o.has)(i.map,"title")&&!(0,o.has)(a,"title")&&(a.title=i.map.title),(0,o.has)(a,"title")&&a.title===i.map.defaultEn&&(a.title=i.map.title),i.property=(0,o.get)(a,"title",r),i.metadata=a;var n=sa("@type",i);if(!1!==n&&""!==n.value&&(t["@type"]=n.value),i=wa(i,t,"custom"===a.type),"custom"!==a.type){var s=i.properties.pop();i.properties.unshift(s)}return i}function qa(e){return qa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qa(e)}function Ea(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function Pa(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=qa(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=qa(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==qa(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Oa=function(e){if((0,o.isNumber)(e.value)||!(0,o.isEmpty)(e.value)||!(0,o.isUndefined)(e.map.field)&&"toggle"===e.map.field.type)return e.value;var t=(0,o.get)(e,"map.field.placeholder");return(0,o.isEmpty)(t)?(0,o.get)(e,"map.field.default",!1):t},Ta=function(e){if((0,o.isEmpty)(e)||(0,o.isUndefined)(e.properties))return e;var t={};return"metadata"in e&&(t.metadata=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ea(Object(r),!0).forEach(function(t){Pa(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ea(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},e.metadata),t.metadata.title=t.metadata.title?t.metadata.title:e.property),(0,o.map)(e.properties,function(e){var r=(0,o.get)(e,"map.save",!0),a=(0,o.get)(e,"map.isHidden",!1);if((0,o.isEmpty)(e.properties)||(0,o.isEmpty)(e.properties[0])||(0,o.isEmpty)(e.properties[0].property)||"0"!==e.properties[0].property||(e.map.isArray=!0),!1!==r&&!a)if("metadata"!==r){var i=function(e){var t=!1;return t=(0,l.applyFilters)("rank_math_schema_process_value",t,e),(0,l.applyFilters)("rank_math_schema_process_"+e.property,t,e)}(e);if(!1===i){if(e.map.isArray){var n=[];return(0,o.map)(e.properties,function(e){n.push((0,o.isUndefined)(e.properties)?e.value:Da(e))}),void(t[e.property]=n)}if(e.map.isGroup){var s=Da(e),m=(0,o.get)(s,"@type",(0,o.isUndefined)(s["@id"])?e.property:"");return m&&(s["@type"]=m),void(t[e.property]=s)}var p=Oa(e);((0,o.isNumber)(p)||(0,o.isBoolean)(p)||!(0,o.isEmpty)(p))&&p&&(t[e.property]=p)}else t[e.property]=i}else{var d=Oa(e);if((0,o.isEmpty)(d)&&"toggle"!==e.map.field.type)return;t.metadata[e.property]=d}}),t};function Da(e){var t=Ta(e);return t=(0,l.applyFilters)("rank_math_processed_schema_"+t["@type"],t),(0,l.applyFilters)("rank_math_processed_schema",t)}function Ca(e,t){if(!(0,o.has)(e,"map.dependency"))return!0;var r=null,a=e.map.dependency,i=(0,o.get)(a,"relation","or");return(0,o.forEach)(a,function(e){var a,n,s,l=sa(e.field,t),m=(a=l.value,n=(0,o.get)(e,"value",!1),s=(0,o.get)(e,"comparison","="),(0,o.isArray)(n)&&"="===s?n.includes(a):(0,o.isArray)(n)&&"!="===s?!n.includes(a):"="===s&&a===n||"=="===s&&a===n||">="===s&&a>=n||"<="===s&&a<=n||">"===s&&a>n||"<"===s&&a<n||"!="===s&&a!==n);if("or"===i&&m)return r=!0,!1;"and"===i&&(r=(null===r||r)&&m)}),!!r}function Ia(e){return Ia="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ia(e)}function ja(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function Ma(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ja(Object(r),!0).forEach(function(t){Na(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ja(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function Na(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Ia(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=Ia(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ia(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ua(e){return function(e){if(Array.isArray(e))return xa(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return xa(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?xa(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xa(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}const La=function(){n()(function(e){new ClipboardJS(".structured-data-copy").on("success",function(t){var r=e(t.trigger);r.addClass("copied"),setTimeout(function(){r.removeClass("copied")},2e3)})}),(0,l.addAction)("rank_math_loaded","rank-math",function(){var e={},t=(0,o.get)(rankMath,"schemas",{});(0,o.map)(t,function(t,r){var a=(0,o.get)(t,"@type");t=(0,l.applyFilters)("rank_math_pre_schema_"+a,t),t=Sa((0,l.applyFilters)("rank_math_pre_schema",t)),e[r]=(0,l.applyFilters)("rank_math_pre_edited_schema",t,r)}),(0,s.dispatch)("rank-math").updateEditSchemas(e)}),(0,l.addFilter)("rank_math_schema_type","rank-math",function(e){return(0,o.isUndefined)(e)||(0,o.isEmpty)(e)?e:"NewsArticle"===e||"BlogPosting"===e?"Article":"MusicGroup"===e||"MusicAlbum"===e?"Music":e.includes("Event")||"Festival"===e?"Event":e}),(0,l.addFilter)("rank_math_schema_convert_author","rank-math",function(e,t,r){return(0,o.isObject)(r)||(0,o.isUndefined)(t.properties)?e:(t.properties[1].value=r,t)}),(0,l.addFilter)("rank_math_schema_convert_value","rank-math",function(e,t,r,a){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(!t.map.isArray)return e;var n=t.map,s=n.arrayMap,l=void 0!==s&&s,m=n.arrayProps,p=void 0===m?{}:m;return l?((0,o.forEach)(a,function(e){t.properties.push(Ga(e,l,p,i))}),t):(a=function(e){return(0,o.isObject)(e)?e:[e]}(a),(0,o.forEach)(a,function(e,r){var a=(0,o.get)(e,"@type",!1);if(!1===a){var n=fa();n.property=r,n.value=e,t.properties.push(n)}else t.properties.push(Ga(e,a,p,i))}),t)}),(0,l.addFilter)("rank_math_schema_convert_value","rank-math",function(e,t,r,a){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return t.map.isArray||!t.map.isGroup||i?e:wa(t,a,i)},20),(0,l.addFilter)("rank_math_pre_schema_Product","rank-math",function(e){return(0,o.has)(e,"brand")&&!(0,o.isObject)(e.brand)&&(e.brand={"@type":"Brand",name:e.brand}),e}),(0,l.addFilter)("rank_math_processed_schema_Recipe","rank-math",function(e){var t=e.instructionType;return delete e.instructionType,"SingleField"===t&&(e.recipeInstructions=e.instructionsSingleField,delete e.instructionsSingleField),"HowToStep"===t&&(1===e.instructionsHowToStep.length&&(e.recipeInstructions={"@type":"HowToSection",name:e.instructionsHowToStep[0].name,itemListElement:e.instructionsHowToStep[0].itemListElement}),e.instructionsHowToStep.length>1&&(e.recipeInstructions=Ua(e.instructionsHowToStep)),delete e.instructionsHowToStep),e},20),(0,l.addFilter)("rank_math_pre_schema_Recipe","rank-math",function(e){var t=e.recipeInstructions;if((0,o.isString)(t)&&(e.instructionType="SingleField",e.instructionsSingleField=t,delete e.recipeInstructions),(0,o.forEach)(["cookTime","prepTime","totalTime"],function(t){(0,o.isUndefined)(e[t])||"PT"!==e[t]||delete e[t]}),(0,o.isArray)(t)&&(e.instructionType="HowToStep",(0,o.forEach)(t,function(e,r){(0,o.isUndefined)(e.type)||(e["@type"]=e.type,delete e.type),(0,o.isUndefined)(e.itemListElement)||((0,o.isUndefined)(e.itemListElement.type)||(e.itemListElement["@type"]=e.itemListElement.type,delete e.itemListElement.type),(0,o.isArray)(e.itemListElement)||(e.itemListElement=[e.itemListElement])),t[r]=e}),e.instructionsHowToStep=t,delete e.recipeInstructions),!(0,o.isArray)(t)&&(0,o.isObject)(t)){var r=Ma(Ma({},t),{},{"@type":"HowToSection"});e.instructionType="HowToStep",e.instructionsHowToStep=[],e.instructionsHowToStep.push(r),delete e.recipeInstructions}return e}),(0,l.addFilter)("rank_math_processed_schema","rank-math",function(e){var t=e.eventAttendanceMode;return(0,o.isUndefined)(t)||("MixedEventAttendanceMode"===t&&(e.location=[e.VirtualLocation,e.location],delete e.VirtualLocation),"OnlineEventAttendanceMode"===t&&(e.location=e.VirtualLocation,delete e.VirtualLocation)),e},20),(0,l.addFilter)("rank_math_pre_schema","rank-math",function(e){var t=e.eventAttendanceMode;return(0,o.isUndefined)(t)||("MixedEventAttendanceMode"===t&&(e.VirtualLocation=(0,o.find)(e.location,["@type","VirtualLocation"]),e.location=(0,o.find)(e.location,["@type","Place"])),"OnlineEventAttendanceMode"===t&&(e.VirtualLocation=e.location,delete e.location)),e}),(0,l.addFilter)("rank_math_pre_edited_schema","rank-math",function(e,t){var r=e.properties;return(0,o.isEmpty)(r)||"new-9999"!==t||(e.properties=(0,o.map)(r,function(t){return(0,o.includes)(["name","headline","title"],t.property)&&(t.value=e.metadata.name),"description"===t.property&&(t.value=e.metadata.description),t})),e}),(0,l.addFilter)("rank_math_schema_apply_metadata_values_Job_Posting","rank-math",function(e){return e.properties.map(function(t){return"unpublish"!==t.property||(0,o.isUndefined)(e.metadata.unpublish)||(t.value=e.metadata.unpublish),t}),e})};var Fa=r(942),Ha=r.n(Fa);const Ba=wp.compose,Va=wp.components;var Ya=r(556),za=r.n(Ya);const Wa=function(e){var t=e.position,r=void 0===t?"middle right":t,a=e.value,i=e.onChange,n=e.children;return wp.element.createElement(Va.Dropdown,{position:r,className:"rank-math-datepicker",contentClassName:"rank-math-datepicker__dialog",renderToggle:function(e){var t=e.onToggle,r=e.isOpen;return wp.element.createElement(m.Fragment,null,n,wp.element.createElement(Va.Button,{icon:"calendar-alt",onClick:t,"aria-expanded":r}))},renderContent:function(){return wp.element.createElement(Va.DatePicker,{currentDate:a.split("T")[0],onMonthPreviewed:o.noop,onChange:function(e){i(e.split("T")[0])}})}})};const Ka=function(e){var t=e.position,r=void 0===t?"middle right":t,a=e.value,i=e.onChange,n=e.children;return wp.element.createElement(Va.Dropdown,{position:r,className:"rank-math-datepicker",contentClassName:"rank-math-datepicker__dialog",renderToggle:function(e){var t=e.onToggle,r=e.isOpen;return wp.element.createElement(m.Fragment,null,n,wp.element.createElement(Va.Button,{icon:"calendar-alt",onClick:t,"aria-expanded":r}))},renderContent:function(){return wp.element.createElement(Va.DateTimePicker,{is12Hour:!0,currentDate:a,onChange:i})}})};var Ja={};(0,o.isUndefined)(rankMath.assessor)||(0,o.forEach)(rankMath.assessor.diacritics,function(e,t){return Ja[t]=new RegExp(e,"g")});function Qa(e){return(0,o.map)(e,function(e,t){return{label:e,value:t}})}function $a(e){return $a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$a(e)}r.dn(function(e){if((void 0)(e))return e;for(var t in Ja)e=e.replace(Ja[t],t);return e});var Xa=["value","onChange","type","options"];function Za(e){return function(e){if(Array.isArray(e))return ei(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ei(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ei(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ei(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function ti(){return ti=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},ti.apply(null,arguments)}function ri(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function ai(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ri(Object(r),!0).forEach(function(t){ii(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ri(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function ii(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=$a(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=$a(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ni=function(e){var t=e.value,r=e.onChange,a=e.type,i=e.options,n=void 0===i?{}:i,s=function(e,t){if(null==e)return{};var r,a,i=function(e,t){if(null==e)return{};var r={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(-1!==t.indexOf(a))continue;r[a]=e[a]}return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)r=n[a],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Xa),l=s;return t=t||"",(0,o.isUndefined)(s.help)||(s.help=(0,m.RawHTML)({children:s.help}),l=ai(ai({},s),{},{help:ai(ai({},s.help),{},{type:"span"})})),"radio"===a?wp.element.createElement(Va.RadioControl,ti({selected:t,options:Qa(n),onChange:r},l)):"select"===a?(!(0,o.has)(s,"multiple")&&(0,o.isArray)(t)&&(t=t[0]),wp.element.createElement(Va.SelectControl,ti({value:t,options:Qa(n),onChange:r,__next40pxDefaultSize:!0},l))):"toggle"===a?wp.element.createElement(Va.ToggleControl,ti({checked:t,onChange:r},l)):"number"===a?wp.element.createElement(Va.TextControl,ti({type:"number",autoComplete:"off",step:"0.01",value:t,onChange:r,__next40pxDefaultSize:!0},l)):"url"===a?wp.element.createElement(Va.TextControl,ti({type:"url",autoComplete:"off",value:t,onChange:r,__next40pxDefaultSize:!0},l)):"datepicker"===a?wp.element.createElement(Wa,{value:t,position:"bottom left",onChange:r},wp.element.createElement(Va.TextControl,ti({value:t,onChange:r,__next40pxDefaultSize:!0},l))):"datetimepicker"===a?wp.element.createElement(Ka,{value:t,position:"bottom left",onChange:r},wp.element.createElement(Va.TextControl,ti({value:t,onChange:r,__next40pxDefaultSize:!0},l))):"textarea"===a?wp.element.createElement(Va.TextareaControl,ti({rows:5,value:t,onChange:r},l)):"checkbox"===a?wp.element.createElement("div",{className:"rank-math-checkbox-component components-base-control schema-property--value"},wp.element.createElement("label",{htmlFor:"checklist-label",className:"components-base-control__label"},s.label),wp.element.createElement("div",null,Qa(n).map(function(e){return wp.element.createElement(Va.CheckboxControl,{key:(0,o.uniqueId)("checkbox-"),label:e.label,checked:(0,o.includes)(t,e.value),onChange:function(a){var i=Za(t);a?i.push(e.value):(0,o.remove)(i,function(t){return t===e.value}),r(i)}})}))):wp.element.createElement(Va.TextControl,ti({value:t,onChange:r,__next40pxDefaultSize:!0},l))};ni.default={value:"",type:"text",onChange:null},ni.propTypes={id:za().string,onChange:za().func.isRequired};const oi=ni,si=React;function li(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,i,n,o,s=[],l=!0,m=!1;try{if(n=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(a=n.call(r)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return mi(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?mi(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mi(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}const pi=function(e){var t=e.onClick,r=e.children,a=(e.className,(0,si.useRef)()),i=li((0,si.useState)(!1),2),n=i[0],o=i[1],s=function(e){a.current.contains(e.target)||o(!1)};return(0,si.useEffect)(function(){return n?document.addEventListener("mousedown",s):document.removeEventListener("mousedown",s),function(){document.removeEventListener("mousedown",s)}},[n]),wp.element.createElement("div",{ref:a,className:"rank-math-inline-confirmation"},!n&&r(o),n&&wp.element.createElement("div",{className:"rank-math-confirm-delete"},wp.element.createElement("span",null,(0,ze.__)("Delete?","seo-by-rank-math")),wp.element.createElement(Va.Button,{isLink:!0,onClick:function(){o(!1),t()}},wp.element.createElement("span",null,(0,ze.__)("Yes","seo-by-rank-math"))),wp.element.createElement(Va.Button,{isLink:!0,onClick:function(){return o(!1)}},wp.element.createElement("span",null,(0,ze.__)("No","seo-by-rank-math")))))};function di(e){return di="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},di(e)}function ci(){return ci=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},ci.apply(null,arguments)}function ui(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,i,n,o,s=[],l=!0,m=!1;try{if(n=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(a=n.call(r)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return hi(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?hi(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function hi(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function yi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function fi(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?yi(Object(r),!0).forEach(function(t){_i(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):yi(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function _i(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=di(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=di(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==di(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const bi=(0,Ba.compose)((0,s.withSelect)(function(e,t){return fi(fi({},t),{},{isPro:e("rank-math").isPro()})}))(function(e){var t=e.data,r=t.property,a=t.id,i=t.map,n=e.actions,s=n.removeProperty,p=n.propertyChange,d=n.duplicateProperty,c=(0,o.get)(i,"field",{label:!1}),u=fi({},c),h=ui((0,m.useState)(),2),y=h[0],f=h[1];if((0,m.useEffect)(function(){f(function(e,t){var r=e.data,a=r.property,i=r.value,n=e.schema.metadata;return i===(0,o.get)(t,"placeholder","")&&(i=""),"reviewLocation"===a&&(0,o.has)(n,"reviewLocation")&&(i=n.reviewLocation),"unpublish"===a&&(0,o.has)(n,"unpublish")&&(i=n.unpublish),e.isPro&&"[rank_math_rich_snippet]"===i&&(i='[rank_math_rich_snippet id="'+n.shortcode+'"]'),(0,l.applyFilters)("rank_math_schema_property_value",i,e)}(e,c))},[a]),!1===Ca(e.data,e.schema))return e.data.map.isHidden=!0,null;i.isRequired&&(c.label&&(u.label=wp.element.createElement(m.Fragment,null,c.label," ",wp.element.createElement("span",null,"*"))),c.placeholder||(u.required="required")),e.isCustom&&(u.type=(0,l.applyFilters)("rank_math_schema_custom_field_type","text",r),delete u.label);var _=Ha()("schema-group-or-property-container schema-property-container",(0,o.get)(c,"classes",!1),{"hide-property":"@type"===r});return e.data.map.isHidden=!1,wp.element.createElement("div",{className:_},wp.element.createElement("div",{className:"schema-group-or-property schema-property"},wp.element.createElement("div",{className:"schema-property--body"},!e.isCustom&&c.label?null:wp.element.createElement("div",{className:"schema-property--field"},wp.element.createElement(Va.TextControl,{value:r,onChange:function(e){p(a,"property",e)},__next40pxDefaultSize:!0})),wp.element.createElement("div",{className:"schema-property--value"},wp.element.createElement(oi,ci({value:y},u,{onChange:function(e){f(e),p(a,"value",e)}})),(0,o.has)(u,"notice")&&wp.element.createElement(Va.Notice,ci({isDismissible:!1},u.notice),u.notice.content)),!i.isRequired&&wp.element.createElement("div",{className:"schema-property--header"},wp.element.createElement(Va.Button,{isSecondary:!0,className:"button rank-math-duplicate-property",onClick:function(){return d(a,e.parentId,e.data)}},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"})),wp.element.createElement(pi,{key:a,onClick:function(){return s(a,e.parentId)}},function(e){return wp.element.createElement(Va.Button,{isSecondary:!0,className:"button rank-math-delete-group",onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}))})))))});var Ri=function(e){if(!1===Ca(e.data,e.schema))return e.data.map.isHidden=!0,null;var t=e.isCustom,r=e.isPro,a=e.isMain,i=void 0!==a&&a,n=e.arrayIndex,s=e.data,p=s.id,d=s.property,c=s.properties,u=s.map,h=s.metadata,y=e.actions,f=y.addProperty,_=y.addGroup,b=y.removeGroup,R=y.propertyChange,g=y.duplicateGroup,k=(0,o.get)(u,"field",{label:!1}),v=Ha()("schema-group-or-property-container schema-group-container",(0,o.get)(u,"classes",!1),{"hide-property":"metadata"===d,"is-group":u.isGroup,"is-array":u.isArray,"no-array-map":(0,o.isUndefined)(u.arrayMap)});return e.data.map.isHidden=!1,wp.element.createElement("div",{className:v},wp.element.createElement("div",{className:"schema-group-or-property schema-group"},(0,l.applyFilters)("rank_math_schema_before_fields","",d),wp.element.createElement("div",{className:"schema-group-header"},function(){if(e.isArray&&void 0!==n)return wp.element.createElement("div",{className:"schema-property--label"},(0,o.startCase)(d)," ",n);if(!t&&k.label)return wp.element.createElement("div",{className:"schema-property--label"},k.label,k.labelHelp&&wp.element.createElement("span",{className:"schema-property--label-help"},(0,m.RawHTML)({children:k.labelHelp})));var a="WooCommerceProduct"!==d?d:"WooCommerce Product";return wp.element.createElement("div",{className:"schema-property--field"},wp.element.createElement(Va.TextControl,{value:(0,o.isUndefined)(h)||(0,o.isEmpty)(h.title)?a:h.title,disabled:!r,onChange:function(e){R(p,"property",e)},__next40pxDefaultSize:!0}))}(),wp.element.createElement(Va.ButtonGroup,{className:"schema-group--actions schema-group--actions--tr"},wp.element.createElement(Va.Button,{className:"button rank-math-add-property",isLink:!0,onClick:function(){return f(p)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Add Property","seo-by-rank-math"))),wp.element.createElement(Va.Button,{className:"button rank-math-add-property-group",isLink:!0,onClick:function(){return _(p,u)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Add Property Group","seo-by-rank-math"))),!i&&wp.element.createElement(Va.Button,{className:"button rank-math-duplicate-property-group",isLink:!0,onClick:function(){return g(p,e.parentId,e.data)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Duplicate Group","seo-by-rank-math"))),wp.element.createElement(pi,{key:p,onClick:function(){return b(p,e.parentId)}},function(e){return wp.element.createElement(Va.Button,{className:"button rank-math-delete-group",isLink:!0,onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,ze.__)("Delete","seo-by-rank-math")))}))),wp.element.createElement("div",{className:"schema-group--children"},(0,o.map)(c,function(a,i){return a.map.isGroup?wp.element.createElement(Ri,{key:i,data:a,parentId:p,isArray:u.isArray,arrayIndex:u.isArray?i+1:void 0,isCustom:t,schema:e.schema,actions:e.actions,isPro:r}):wp.element.createElement(bi,{key:i,data:a,parentId:p,isCustom:t,schema:e.schema,actions:e.actions})})),i&&wp.element.createElement("div",{className:"schema-group-footer"},wp.element.createElement(Va.ButtonGroup,{className:"schema-group--actions schema-group--actions--tr"},wp.element.createElement(Va.Button,{className:"button rank-math-add-property",isLink:!0,onClick:function(){return f(p)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Add Property","seo-by-rank-math"))),wp.element.createElement(Va.Button,{className:"button rank-math-add-property-group",isLink:!0,onClick:function(){return _(p,u)}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Add Property Group","seo-by-rank-math"))),wp.element.createElement(pi,{key:p,onClick:function(){return b(p,e.parentId)}},function(e){return wp.element.createElement(Va.Button,{className:"button rank-math-delete-group",isLink:!0,onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,ze.__)("Delete","seo-by-rank-math")))})))))};const gi=Ri;function ki(e){return ki="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ki(e)}function vi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function wi(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?vi(Object(r),!0).forEach(function(t){Pi(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):vi(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function Ai(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,Oi(a.key),a)}}function Gi(e,t,r){return t=qi(t),function(e,t){if(t&&("object"==ki(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Si()?Reflect.construct(t,r||[],qi(e).constructor):t.apply(e,r))}function Si(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Si=function(){return!!e})()}function qi(e){return qi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},qi(e)}function Ei(e,t){return Ei=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ei(e,t)}function Pi(e,t,r){return(t=Oi(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Oi(e){var t=function(e,t){if("object"!=ki(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=ki(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ki(t)?t:t+""}var Ti=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),Pi(e=Gi(this,t,arguments),"addGroup",function(t,r){var a=wi({},e.state.data),i=oa(t,a),n=r.isArray,o=r.arrayMap,s=void 0!==o&&o,l=r.arrayProps,m=n&&s?Ra(s,void 0===l?{}:l):ya();i.properties.push(m),e.setState({data:a})}),Pi(e,"addProperty",function(t){var r=wi({},e.state.data);oa(t,r).properties.push(fa()),e.setState({data:r})}),Pi(e,"duplicateGroup",function(t,r,a){var i=wi({},e.state.data),n=oa(r,i),s=(0,o.cloneDeep)(a),l=n.properties.findIndex(function(e){return e.id===t});n.properties.splice(l,0,_a(s)),e.setState({data:i})}),Pi(e,"duplicateProperty",function(t,r,a){var i=wi({},e.state.data),n=oa(r,i),o=wi({},a),s=n.properties.findIndex(function(e){return e.id===t});o.id="p-".concat(ha()),n.properties.splice(s,0,o),e.setState({data:i})}),Pi(e,"removeGroup",function(t,r){var a=wi({},e.state.data),i=oa(r,a);if(i.id!==t){var n=i.properties.findIndex(function(e){return e.id===t});i.properties.splice(n,1),e.setState({data:a})}else e.setState({data:ya()})}),Pi(e,"removeProperty",function(t,r){var a=wi({},e.state.data),i=oa(r,a),n=i.properties.findIndex(function(e){return e.id===t});i.properties.splice(n,1),e.setState({data:a})}),Pi(e,"propertyChange",function(t,r,a){var i=wi({},e.state.data),n=oa(t,i);Object.assign(n,Pi({},r,a)),!(0,o.isEmpty)(i.metadata)&&(0,o.has)(i.metadata,n.property)&&"title"!==n.property&&(i.metadata[n.property]=a),"property"!==r||(0,o.isUndefined)(n.metadata)||(n.metadata.title=a),e.setState({data:i}),(0,l.doAction)("rank_math_property_changed",i,n,e.setState,r,a,e.state)}),e.options=(0,o.get)(e.props.data,"metadata",{}),e.state={data:e.props.data,loading:!1,showNotice:!1,postId:rankMath.objectID},e.setState=e.setState.bind(e),e.templateSaveCount=0,e.isEditingTemplate=(0,o.get)(rankMath,"isTemplateScreen",!1),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ei(e,t)}(t,e),r=t,(a=[{key:"getWrapperClasses",value:function(){var e=(0,o.get)(rankMath,"knowledgegraphType",!1);e=!1===e?"empty":"local-"+e;var t=(0,o.get)(this.props.data,"property","");return(0,o.isArray)(t)&&(t=t.join("-")),t="schema-"+t.toLowerCase(),Ha()("schema-builder",t,Pi({"schema-template-pre-defined":"template"===this.options.type,"schema-template-custom":"custom"===this.options.type},"".concat(e),"template"===this.options.type))}},{key:"render",value:function(){var e=this;return wp.element.createElement("form",{className:this.getWrapperClasses()},wp.element.createElement(gi,{data:this.state.data,schema:this.state.data,isPro:this.props.isPro,parentId:null,isMain:!0,isArray:!1,isCustom:"custom"===this.options.type,actions:{addGroup:this.addGroup,addProperty:this.addProperty,removeGroup:this.removeGroup,removeProperty:this.removeProperty,propertyChange:this.propertyChange,duplicateGroup:this.duplicateGroup,duplicateProperty:this.duplicateProperty}}),wp.element.createElement("div",{className:"schema-builder-save-as"},this.props.isPro&&wp.element.createElement(m.Fragment,null,"custom"!==this.options.type&&wp.element.createElement(Va.Button,{isSecondary:!0,onClick:function(){return e.props.toggleMode(e.props.id,e.state.data)}},(0,ze.__)("Advanced Editor","seo-by-rank-math")),!this.isEditingTemplate&&wp.element.createElement(Va.Button,{isSecondary:!0,className:this.state.loading?"save-as-template saving":"save-as-template",onClick:function(){e.templateSaveCount>=1&&!confirm((0,ze.__)("Each save will create a new template.","seo-by-rank-math"))||(e.templateSaveCount+=1,e.props.saveTemplate(e.state.data,e.setState))}},this.state.showNotice?(0,ze.__)("Template saved.","seo-by-rank-math"):(0,ze.__)("Save as Template","seo-by-rank-math")),this.state.showNotice&&wp.element.createElement("div",{className:"rank-math-save-template-confirmation"},(0,ze.__)("Template saved.","seo-by-rank-math"))),this.isEditingTemplate&&wp.element.createElement(Va.Button,{isPrimary:!0,className:"button",onClick:function(){return e.props.saveTemplate(e.state.data,e.setState,e.state.postId)}},this.state.loading?(0,ze.__)("Saving","seo-by-rank-math"):this.state.showNotice?(0,ze.__)("Saved","seo-by-rank-math"):(0,ze.__)("Save","seo-by-rank-math")),!this.isEditingTemplate&&wp.element.createElement(Va.Button,{isPrimary:!0,className:"button",onClick:function(){return e.props.saveSchema(e.props.id,e.state.data)}},"term"===rankMath.objectType?(0,ze.__)("Save for this Term","seo-by-rank-math"):(0,ze.__)("Save for this Post","seo-by-rank-math"))))}}])&&Ai(r.prototype,a),i&&Ai(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,a,i}(m.Component);Ti.defaultProps={query:null,fields:[],onQueryChange:null},Ti.propTypes={query:za().object,fields:za().array.isRequired,onQueryChange:za().func};const Di=(0,Ba.compose)((0,s.withSelect)(function(e,t){var r=e("rank-math").getEditingSchema(),a=e("rank-math").getEditSchemas(),i=(0,o.isString)(r.data.property)?r.data.property:(0,o.isArray)(r.data.property)?r.data.property[0]:"";return(0,l.applyFilters)("rank_math_schema_apply_metadata_values_"+i.replaceAll(" ","_"),r.data),wi(wi(wi({},t),r),{},{schemas:a,isPro:e("rank-math").isPro()})}),(0,s.withDispatch)(function(e,t){var r=t.onSave,a=void 0!==r&&r,i=t.isPro,s=t.schemas;return{toggleMode:function(t,r){if(confirm((0,ze.__)("Are you sure you want to convert? You can't use simple mode for this edited Schema.","seo-by-rank-math"))){var a=wi({},r);a.metadata.type="custom",e("rank-math").updateEditSchema(t,a)}},saveSchema:function(t,r){var l=n()("form.schema-builder").get(0);if(l.checkValidity()){i||(0,o.forEach)(s,function(r,a){t!==a&&e("rank-math").deleteSchema(a)});var m=Da(r);e("rank-math").updateEditSchema(t,r),e("rank-math").saveSchema(t,m),a&&a(t,m),e("rank-math").schemaUpdated(!0),e("rank-math").toggleSchemaTemplates(!1),e("rank-math").toggleSchemaEditor(!1)}else l.reportValidity()},saveTemplate:function(t,r,a){e("rank-math").saveTemplate(Da(t),r,a)}}}))(Ti);function Ci(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var i={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},n=a,o="",s=a.indexOf("#");-1!==s&&(n=a.substring(0,s),o=a.substring(s));var l=Object.keys(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join("&"),m=n.includes("?")&&!n.endsWith("?")?"&":"?";return n+m+l+o+r}r.dn(Ci);var Ii={"@context":"https://schema.org/","@graph":[{"@type":"Article",headline:"Power Words: The Art of Writing Headlines That Get Clicked",description:"Power words are words with strong meaning that smart copywriters (as well as marketers) use to increase CTR and boost conversions.",author:{"@type":"Person",name:"Rank Math"},datePublished:"2020-09-12GMT+000015:45:32+00:00",dateModified:"2020-09-12GMT+000015:45:29+00:00","@id":"https://rankmath.com/blog/power-words/#schema-44838",mainEntityOfPage:{"@id":"https://rankmath.com/blog/power-words/#webpage"},isPartOf:{"@id":"https://rankmath.com/blog/power-words/#webpage"},publisher:{"@id":"/#organization"},inLanguage:"en-US"}]};const ji=function(){var e,t=JSON.stringify(Ii,null,2);return wp.element.createElement(m.Fragment,null,wp.element.createElement("div",{className:"rank-math-pretty-json free-version"},wp.element.createElement("form",{method:"post",target:"_blank",action:"https://search.google.com/test/rich-results"},wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,ze.__)("JSON-LD Code","seo-by-rank-math")),wp.element.createElement("button",{className:"button structured-data-copy is-small",type:"button","data-clipboard-text":t},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"}),wp.element.createElement("span",{className:"original-text"},(0,ze.__)("Copy","seo-by-rank-math")),wp.element.createElement("span",{className:"success","aria-hidden":"true"},(0,ze.__)("Copied!","seo-by-rank-math"))),wp.element.createElement("button",{className:"button structured-data-test is-small",type:"submit"},wp.element.createElement("i",{className:"rm-icon rm-icon-google"})," ",wp.element.createElement("span",null,(0,ze.__)("Test with Google","seo-by-rank-math"))),wp.element.createElement("textarea",{name:"code_snippet",defaultValue:t})),wp.element.createElement("pre",{className:"code-output"},wp.element.createElement("code",{className:"language-javascript",dangerouslySetInnerHTML:{__html:(e=t,"string"!=typeof e&&(e=JSON.stringify(e,null,2)),(e=e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,function(e){var t="number";return/^"/.test(e)?t=/:$/.test(e)?"key":"string":/true|false/.test(e)?t="boolean":/null/.test(e)&&(t="null"),'<span class="'+t+'">'+e+"</span>"}))}})),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-70"},wp.element.createElement("h3",null,(0,ze.__)("Preview & Validate Your Schema Markup","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,ze.__)("Advanced Schema markup viewer","seo-by-rank-math")),wp.element.createElement("li",null,(0,ze.__)("Live testing with Google","seo-by-rank-math")),wp.element.createElement("li",null,(0,ze.__)("No other SEO plugin offers this feature","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:Ci("pro","Code Validation"),rel:"noreferrer noopener",target:"_blank"},(0,ze.__)("Upgrade","seo-by-rank-math"))))))};var Mi=n()("#post"),Ni=n()(".rank-math-schema"),Ui=function(e,t){Ni.val(JSON.stringify(t)),setTimeout(function(){Mi.submit()},1e3)};const xi=function(){return wp.element.createElement(Va.TabPanel,{className:"rank-math-tabs rank-math-editor rank-math-schema-tabs",activeClass:"is-active",tabs:Object.values((e={builder:{name:"builder",title:wp.element.createElement(m.Fragment,null,wp.element.createElement("span",null,(0,ze.__)("Edit","seo-by-rank-math"))),view:function(){return wp.element.createElement(Di,{onSave:Ui})},className:"rank-math-tab-builder"},codeValidation:{name:"codeValidation",title:wp.element.createElement(m.Fragment,null,wp.element.createElement("span",null,(0,ze.__)("Code Validation","seo-by-rank-math"))),view:ji,className:"rank-math-tab-code-validation"}},(0,l.applyFilters)("rank_math_schema_editor_tabs",e)))},function(e){return wp.element.createElement("div",{className:"components-panel__body rank-math-schema-tab-content-"+e.name},(0,m.createElement)(e.view))});var e};const Li=(0,Ba.compose)((0,s.withSelect)(function(e){var t=e("rank-math").getEditingSchema();return{isOpen:e("rank-math").isSchemaEditorOpen(),isCutomSchema:(0,o.get)(t,"data.metadata.type",!1)}}))(function(e){var t=e.isOpen,r=void 0!==t&&t,a=e.isCutomSchema;if(!r)return null;var i=Ha()("rank-math-modal rank-math-schema-generator rank-math-schema-modal",{"rank-math-schema-modal-no-map":"custom"===a}),n=(0,l.applyFilters)("rank_math_schema_modal_title",(0,ze.__)("Select Schema","seo-by-rank-math"));return wp.element.createElement(Va.Modal,{title:n,closeButtonLabel:(0,ze.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,className:i,onRequestClose:function(){var e=window.location,t=e.origin,r=e.pathname;window.location=t+r.replace("post.php","edit.php?post_type=rank_math_schema").replace("post-new.php","edit.php?post_type=rank_math_schema")},overlayClassName:"rank-math-modal-overlay"},wp.element.createElement(xi,null))});function Fi(e){return(0,o.get)({off:"rm-icon rm-icon-schema",Article:"rm-icon rm-icon-post",Book:"rm-icon rm-icon-book",Course:"rm-icon rm-icon-course",Dataset:"rm-icon rm-icon-dataset",Event:"rm-icon rm-icon-calendar",FactCheck:"rm-icon rm-icon-fact-check",JobPosting:"rm-icon rm-icon-job",Local:"rm-icon rm-icon-local-seo",Movie:"rm-icon rm-icon-movie",Music:"rm-icon rm-icon-music",Product:"rm-icon rm-icon-cart",Products:"rm-icon rm-icon-cart",WooCommerceProduct:"rm-icon rm-icon-cart",Recipe:"rm-icon rm-icon-recipe",Restaurant:"rm-icon rm-icon-restaurant",Video:"rm-icon rm-icon-video",Videos:"rm-icon rm-icon-video",VideoObject:"rm-icon rm-icon-video",Person:"rm-icon rm-icon-users",Review:"rm-icon rm-icon-star","Review snippets":"rm-icon rm-icon-star",Service:"rm-icon rm-icon-service",Software:"rm-icon rm-icon-software",SoftwareApplication:"rm-icon rm-icon-software","Sitelinks searchbox":"rm-icon rm-icon-search",FAQ:"rm-icon rm-icon-faq",FAQPage:"rm-icon rm-icon-faq",HowTo:"rm-icon rm-icon-howto",Breadcrumbs:"rm-icon rm-icon-redirection",PodcastEpisode:"rm-icon rm-icon-podcast"},e,"rm-icon rm-icon-schema")}function Hi(e){return Hi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hi(e)}function Bi(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function Vi(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Bi(Object(r),!0).forEach(function(t){Yi(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Bi(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function Yi(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Hi(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=Hi(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Hi(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const zi=(0,Ba.compose)((0,s.withSelect)(function(e,t){var r=e("rank-math").isPro(),a=e("rank-math").getSchemas(),i=(0,o.findKey)(a,"metadata.isPrimary");return i=(0,o.isEmpty)(i)?{}:{id:i,type:a[i]["@type"]},Vi(Vi({},t),{},{primarySchema:i,isPro:r})}),(0,s.withDispatch)(function(e,t){var r=t.isPro,a=t.primarySchema,i=void 0!==a&&a,n=!(!r||!(0,o.isEmpty)(i));return r||(n=!0),{addSchema:function(t){var r=(0,o.uniqueId)("new-"),a=(0,o.get)(t,"schema",!1);!1===a&&(a={"@type":t.type,metadata:{type:"template",shortcode:"s-".concat(ha())}}),a.metadata.isPrimary=n,e("rank-math").setEditingSchemaId(r),e("rank-math").updateEditSchema(r,Sa(a)),e("rank-math").toggleSchemaEditor(!0)},editSchema:function(t){e("rank-math").setEditingSchemaId(t),e("rank-math").toggleSchemaEditor(!0)}}}))(function(e){var t=e.search,r=e.templates,a=e.isPro,i=e.addSchema,n=e.editSchema,o=e.primarySchema;""!==t&&(r=r.filter(function(e){return e.title.toLowerCase().includes(t)}));var s=o?(0,l.applyFilters)("rank_math_schema_type",o.type):"";return wp.element.createElement("div",{className:"rank-math-schema-catalog"},r.map(function(e,t){var r=!a&&s===e.type,l=Ha()("rank-math-schema-item rank-math-use-schema row button",{"in-use":r,"schema-pro":e.isPro});return wp.element.createElement("div",{id:"rank-math-schema-list-wrapper",key:t},wp.element.createElement(Va.Button,{key:t,id:"rank-math-schema-item",className:l,href:e.isPro?Ci("pro","PRO Schema Type"):"#",target:e.isPro?"_blank":"",isLink:!0,onClick:function(){if(!e.isPro)return r?n(o.id):i(e)}},wp.element.createElement("input",{type:"radio",name:"primarySchema",value:e.type,checked:s===e.type,onChange:function(){return i(e)},disabled:e.isPro}),wp.element.createElement("span",{className:"rank-math-schema-name"},wp.element.createElement("i",{className:Fi(e.type)}),e.title,e.isPro&&wp.element.createElement("span",{className:"rank-math-pro-badge"},(0,ze.__)("Pro","seo-by-rank-math"))),wp.element.createElement("span",{className:"button rank-math-schema-item-actions"},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Use","seo-by-rank-math")))))}))});var Wi=(0,Va.withFilters)("rankMath.schema.SchemaList")(function(e){var t=e.schemas,r=e.edit,a=e.trash,i=e.preview,n=e.showProNotice;return(0,o.isEmpty)(t)?null:wp.element.createElement("div",{className:"rank-math-schema-in-use"},wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,ze.__)("Schema in Use","seo-by-rank-math")),n&&wp.element.createElement("div",{className:"components-notice rank-math-notice is-warning"},wp.element.createElement("div",{className:"components-notice__content"},(0,ze.__)("Multiple Schemas are allowed in the","seo-by-rank-math")," ",wp.element.createElement("a",{href:Ci("pro","Schema Tab Notice"),rel:"noreferrer noopener",target:"_blank"},wp.element.createElement("strong",null,(0,ze.__)("PRO Version","seo-by-rank-math"))))),(0,o.map)(t,function(e,t){return wp.element.createElement("div",{key:t,id:"rank-math-schema-item",className:"rank-math-schema-item row"},wp.element.createElement("strong",{className:"rank-math-schema-name"},wp.element.createElement("i",{className:Fi(e["@type"])}),(0,o.get)(e,"metadata.title",e["@type"])),wp.element.createElement("span",{className:"rank-math-schema-item-actions"},wp.element.createElement(Va.Button,{className:"button rank-math-edit-schema",isLink:!0,onClick:function(){return r(t)}},wp.element.createElement("i",{className:"rm-icon rm-icon-edit"}),wp.element.createElement("span",null,(0,ze.__)("Edit","seo-by-rank-math"))),wp.element.createElement(Va.Button,{className:"button rank-math-preview-schema",isLink:!0,onClick:function(){return i(t)}},wp.element.createElement("i",{className:"rm-icon rm-icon-eye"}),wp.element.createElement("span",null,(0,ze.__)("Preview","seo-by-rank-math"))),wp.element.createElement(pi,{key:t,onClick:function(){return a(t)}},function(e){return wp.element.createElement(Va.Button,{isLink:!0,className:"button rank-math-delete-schema",onClick:function(){return e(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-trash"}),wp.element.createElement("span",null,(0,ze.__)("Delete","seo-by-rank-math")))})))}))});const Ki=(0,Ba.compose)((0,s.withSelect)(function(e){var t=e("rank-math").getSchemas();return{schemas:t,showProNotice:1<=Object.keys(t).length}}),(0,s.withDispatch)(function(e){return{trash:function(t){e("rank-math").deleteSchema(t)},edit:function(t){e("rank-math").setEditingSchemaId(t),e("rank-math").toggleSchemaEditor(!0)},preview:function(t){e("rank-math").setEditingSchemaId(t),e("rank-math").setEditorTab("codeValidation"),e("rank-math").toggleSchemaEditor(!0)}}}))(Wi);function Ji(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,i,n,o,s=[],l=!0,m=!1;try{if(n=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(a=n.call(r)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){m=!0,i=e}finally{try{if(!l&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(m)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Qi(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Qi(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}var $i=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"global"===e?ra.getTemplates(t):(0,l.applyFilters)("rank_math_schema_templates_by_source",[],e)};const Xi=(0,Ba.compose)((0,s.withSelect)(function(e){return{isPro:e("rank-math").isPro()}}))(function(e){var t=Ji((0,si.useState)("global"),2),r=t[0],a=t[1],i=Ji((0,si.useState)(""),2),n=i[0],o=i[1];return wp.element.createElement(m.Fragment,null,e.isPro&&wp.element.createElement(Ki,null),wp.element.createElement("h4",{className:"rank-math-schema-section-title"},(0,ze.__)("Available Schema Types","seo-by-rank-math")),wp.element.createElement("div",{className:"rank-math-schema-filter"},wp.element.createElement(Va.RadioControl,{selected:r,options:(0,l.applyFilters)("rank_math_schema_template_sources",[{value:"global",label:(0,ze.__)("Schema Catalog","seo-by-rank-math")}]),onChange:a}),wp.element.createElement("div",{className:"rank-math-schema-search"},wp.element.createElement(Va.TextControl,{value:n,onChange:o,placeholder:(0,ze.__)("Searchâ€¦","seo-by-rank-math"),__next40pxDefaultSize:!0}))),wp.element.createElement(zi,{templates:$i(r,e.isPro),search:n.toLowerCase()}))}),Zi=function(){return wp.element.createElement("div",{className:"components-panel__body rank-math-custom-schema-wrapper"},wp.element.createElement("img",{src:rankMath.customSchemaImage,alt:"",className:"custom-schema"}),wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks width-60"},wp.element.createElement("h3",null,(0,ze.__)("Advanced Schema Builder","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,ze.__)("Possibility to create 700+ Schema Types","seo-by-rank-math")),wp.element.createElement("li",null,(0,ze.__)("Import Schema from ANY website","seo-by-rank-math")),wp.element.createElement("li",null,(0,ze.__)("Create Advanced templates","seo-by-rank-math"))),wp.element.createElement("a",{className:"button button-primary is-green",href:Ci("pro","Custom Builder"),rel:"noreferrer noopener",target:"_blank"},(0,ze.__)("Upgrade","seo-by-rank-math")))))};r.dn(Zi);const en=function(){return wp.element.createElement(Va.TabPanel,{className:"rank-math-tabs rank-math-editor rank-math-schema-tabs",activeClass:"is-active",tabs:Object.values((e={templates:{name:"templates",title:wp.element.createElement(m.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-schema"}),wp.element.createElement("span",null,(0,ze.__)("Schema Templates","seo-by-rank-math"))),view:Xi,className:"rank-math-tab-templates"},newSchema:{name:"new-schema",title:wp.element.createElement(m.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"}),wp.element.createElement("span",null,(0,ze.__)("Custom Schema","seo-by-rank-math"))),view:Zi,className:"rank-math-tab-new-schema"}},(0,l.applyFilters)("rank_math_schema_templates_tabs",e)))},function(e){return wp.element.createElement("div",{className:"components-panel__body rank-math-schema-tab-content-"+e.name},(0,m.createElement)(e.view))});var e};function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}function rn(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function an(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=tn(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=tn(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==tn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}r.dn(en);const nn=(0,Ba.compose)((0,s.withSelect)(function(e,t){return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?rn(Object(r),!0).forEach(function(t){an(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):rn(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},t)}))(function(e){return e.isOpen?wp.element.createElement(Va.Modal,{title:(0,ze.__)("Schema Generator","seo-by-rank-math"),closeButtonLabel:(0,ze.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,className:"rank-math-modal rank-math-schema-generator rank-math-schema-modal",onRequestClose:function(){if(!wp.data.select("rank-math").isSchemaEditorOpen()){var e=window.location,t=e.origin,r=e.pathname;window.location=t+r.replace("post.php","edit.php?post_type=rank_math_schema").replace("post-new.php","edit.php?post_type=rank_math_schema")}},overlayClassName:"rank-math-modal-overlay"},wp.element.createElement("a",{href:Ci("rich-snippets","Schema Generator Header"),rel:"noopener noreferrer",target:"_blank",title:(0,ze.__)("More Info","seo-by-rank-math"),className:"rank-math-schema-info"},wp.element.createElement(Va.Dashicon,{icon:"info"})),wp.element.createElement(en,null)):null});n()(function(){var e=Object.keys(rankMath.schemas),t=n()(".rank-math-schema-meta-id");t.val((0,o.get)(e,0,"").replace("schema-","")),La(),(0,s.dispatch)("rank-math").setVersion(),(0,s.dispatch)("rank-math").setEditingSchemaId(e[0]);var r=!0;""!==t.val()&&"new-9999"!==t.val()&&(r=!1,(0,s.dispatch)("rank-math").toggleSchemaEditor(!0)),(0,l.addAction)("rank_math_loaded","rank-math",function(){(0,m.createRoot)(document.getElementById("rank-math-schema-template")).render((0,m.createElement)(function(){return wp.element.createElement(m.Fragment,null,wp.element.createElement(nn,{isOpen:r}),wp.element.createElement(Li,null))}))}),(0,l.doAction)("rank_math_loaded")})}()}();PK     ™ŠU]·fV�Ù  Ù  2  includes/modules/schema/assets/css/schema-dark.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-schema-in-use #rank-math-schema-item{border-color:#26292c;background:#26292c;color:#e0e1e3}.rank-math-schema-in-use #rank-math-schema-item .button{color:#c2cbd2}.rank-math-schema-generator .components-popover__content{border-color:#64666a;background:#64666a}.rank-math-schema-generator .components-popover__content .CalendarMonth{background:#64666a}.rank-math-schema-generator .components-popover__content .CalendarMonth_caption{color:#e0e1e3}.rank-math-schema-generator .components-popover__content .CalendarMonthGrid{background:#64666a}.rank-math-schema-generator .components-popover__content .DayPicker__horizontal{background:#64666a}.rank-math-schema-generator .components-popover__content .DayPicker_weekHeader{color:#e0e1e3}.rank-math-schema-generator .components-popover__content .DayPickerNavigation_button svg{fill:#e0e1e3}.rank-math-schema-generator .components-popover__content .DayPickerNavigation_button__default,.rank-math-schema-generator .components-popover__content .DayPickerNavigation_button__default:hover{background:#64666a;border-color:#64666a}.rank-math-schema-generator .components-popover__content .CalendarDay__default{background:rgba(0,0,0,0);color:#e0e1e3}.rank-math-schema-generator .components-popover__content .CalendarDay__default:hover{background:#26292c}.rank-math-schema-generator .components-popover__content .CalendarDay__default.CalendarDay__selected,.rank-math-schema-generator .components-popover__content .CalendarDay__default.CalendarDay__selected:active,.rank-math-schema-generator .components-popover__content .CalendarDay__default.CalendarDay__selected:hover{background:#069de3;border-color:#069de3;color:#fff}.rank-math-schema-generator .components-popover__content .components-button.is-link{color:#e0e1e3}.rank-math-schema-generator #rank-math-schema-item .rank-math-inline-confirmation{border-color:#7d7e82}.rank-math-schema-generator .rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-schema-generator .rank-math-schema-tabs .components-panel__body .schema-group--actions .button{color:#e0e1e3}.rank-math-schema-generator .rank-math-schema-tabs .components-panel__body .schema-group--actions .button,.rank-math-schema-generator .rank-math-schema-tabs .components-panel__body .schema-group--actions .button:hover{border-color:#7d7e82}.rank-math-schema-generator .components-modal__content .is-secondary{color:#e0e1e3;background:#64666a;border-color:#64666a;-webkit-transition:none;transition:none}.rank-math-schema-generator .components-modal__content .is-secondary:hover,.rank-math-schema-generator .components-modal__content .is-secondary:focus{outline:none;-webkit-box-shadow:none;box-shadow:none;color:#e0e1e3;border-color:#4c4f56;background-color:#4c4f56}.rank-math-schema-generator .schema-builder .schema-property--header button.button.is-secondary{color:#e0e1e3;background:#64666a;border-color:#64666a}.rank-math-schema-generator .schema-builder .schema-property--header button.button.is-secondary:hover,.rank-math-schema-generator .schema-builder .schema-property--header button.button.is-secondary:focus{color:#e0e1e3;border-color:#4c4f56;background-color:#4c4f56}.rank-math-schema-generator .schema-builder-save-as{background:#34383c;border-color:#34383c}.rank-math-schema-generator #tab-panel-2-schemaBuilder-view select{background:#34383c;color:#c2cbd2}.rank-math-schema-generator .components-notice.is-warning{background:#26292c}.rank-math-schema-generator .rank-math-modal .components-modal__content .is-secondary{background:#26292c;color:#a4afb7}.rank-math-schema-generator .rank-math-tabs.rank-math-editor.rank-math-schema-tabs select{background:#34383c;color:#c2cbd2}.rank-math-schema-generator .rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){color:#e0e1e3;background:#64666a;border-color:#64666a;cursor:pointer}.rank-math-schema-generator .rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-schema-generator .rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#e0e1e3;border-color:#4c4f56;background-color:#4c4f56}.rank-math-schema-generator .components-radio-control__input[type=radio]:focus{-webkit-box-shadow:none;box-shadow:none}#rank-math-schema-item{background:#34383c;border-color:#7d7e82;color:#e0e1e3}#rank-math-schema-item:hover,#rank-math-schema-item:focus,#rank-math-schema-item.in-use{background-color:#34383c;border-color:#7d7e82;-webkit-box-shadow:none;box-shadow:none}#rank-math-schema-item .button{color:#e0e1e3;border-color:#7d7e82}#rank-math-schema-item .button:hover,#rank-math-schema-item .button:focus:not(:disabled),#rank-math-schema-item .button:active{color:#e0e1e3}.rank-math-schema-catalog #rank-math-schema-item:hover{color:#e0e1e3;background:#26292c;border-color:#7d7e82}.rank-math-schema-filter .rank-math-schema-search input:focus{-webkit-box-shadow:none;box-shadow:none;border-color:rgba(0,0,0,0)}PK     ™ŠU]8Î³ãh  h  -  includes/modules/schema/assets/css/schema.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.schema-builder-save-as,.schema-builder .schema-property--body,.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header,.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header,.rank-math-pretty-json form,#rank-math-schema-item .rank-math-schema-item-actions,#rank-math-schema-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-schema-tabs{overflow:visible}.rank-math-modal.rank-math-schema-modal.rank-math-schema-modal-no-map{width:80vw}.rank-math-modal.rank-math-schema-modal.rank-math-schema-modal-no-map .components-notice{display:none}.rank-math-schema-info{font-size:14px;position:absolute;top:62px;right:20px;padding:5px;text-decoration:none;color:inherit;color:#78797a;border-radius:16px;background:#ebeced;-webkit-box-shadow:none;box-shadow:none;z-index:1}.rank-math-schema-info svg,.rank-math-schema-info .dashicon{vertical-align:-5px}.rank-math-schema-info:hover{color:#242628;background:#dfe0e1}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-name{font-size:13px;font-weight:normal}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-name i.rm-icon{font-weight:normal}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-item-actions button.button i{margin-right:0}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-item-actions button.button span{display:none}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-item-actions .rank-math-inline-confirmation button span{display:inline}.rank-math-tab-content-schema #rank-math-schema-item .rank-math-schema-item-actions .rank-math-inline-confirmation .rank-math-delete-schema span{display:none}.rank-math-schema-section-title{font-size:14px;font-weight:600;margin:0 0 .825rem;color:#242628}.rank-math-schema-in-use{margin-bottom:1rem;color:#4c6875}.rank-math-schema-in-use #rank-math-schema-item{border-color:#069de3;background:rgb(243.5038626609,251.1510729614,254.6961373391)}.rank-math-schema-in-use #rank-math-schema-item .button{color:#4c6875}.rank-math-schema-in-use>*{margin-bottom:1rem !important}.rank-math-schema-in-use>*:last-child{margin-bottom:0 !important}.rank-math-schema-in-use .rank-math-notice{margin:0 0 1rem;color:#242628}.rank-math-schema-in-use .rank-math-notice a{text-decoration:none;border-bottom:1px dotted}.rank-math-schema-filter{display:none}.rank-math-schema-catalog{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-schema-catalog #rank-math-schema-item:hover{color:#4c6875}#rank-math-schema-list-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;margin-bottom:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:0;-ms-flex:0 0 48.5%;flex:0 0 48.5%}#rank-math-schema-item{font-size:14px;font-weight:normal;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-bottom:10px;padding:10px 12px;text-decoration:none;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #b5bfc9;border-radius:4px;background:#fbfbfb;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-schema-item:hover,#rank-math-schema-item:focus,#rank-math-schema-item.in-use{border-color:#069de3;background:rgb(243.5038626609,251.1510729614,254.6961373391)}#rank-math-schema-item.in-use{-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}#rank-math-schema-item.schema-pro{color:hsl(210,5.7851239669%,60.5490196078%);border-color:#dadfe4}#rank-math-schema-item.schema-pro .button,#rank-math-schema-item.schema-pro .button:hover{color:hsl(210,5.7851239669%,60.5490196078%)}#rank-math-schema-item.schema-pro:hover{color:#7f868d;border-color:#b5bfc9;background:rgb(241.5875,243.4,245.2125)}#rank-math-schema-item.schema-pro:hover .rank-math-pro-badge{opacity:1}#rank-math-schema-item.schema-pro .rank-math-pro-badge{padding:2px 5px;opacity:.7;vertical-align:1px}#rank-math-schema-item input[type=radio]{margin-top:0;margin-right:8px}#rank-math-schema-item .rank-math-schema-name{line-height:1.4;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-schema-item .rank-math-schema-name i{font-size:18px;margin-right:8px;vertical-align:-4px}#rank-math-schema-item .rank-math-inline-confirmation{border-left:1px solid #dadfe4}#rank-math-schema-item .rm-icon-circle-plus:before{vertical-align:-2.4px}#rank-math-schema-item:last-of-type{margin-bottom:0}#rank-math-schema-item .button,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button{font-size:14px;line-height:1.4;min-height:auto;padding:0 12px;text-decoration:none;color:#6b7278;border:0;border-left:1px solid #dadfe4;border-radius:0;background:rgba(0,0,0,0)}#rank-math-schema-item .button:hover,#rank-math-schema-item .button:focus:not(:disabled),#rank-math-schema-item .button:active,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:focus:not(:disabled),.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:active{color:#069de3;border-color:#dadfe4;outline:none;background:none;-webkit-box-shadow:none;box-shadow:none}#rank-math-schema-item .button:first-of-type,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:first-of-type{border-left:0 !important}#rank-math-schema-item .button:last-child,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button:last-child{padding-right:0}#rank-math-schema-item .button.rank-math-edit-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-edit-schema i{vertical-align:-1px}#rank-math-schema-item .button.rank-math-delete-schema i,#rank-math-schema-item .button.rank-math-delete-group i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-group i{vertical-align:-2px}#rank-math-schema-item .button.rank-math-delete-schema:hover,#rank-math-schema-item .button.rank-math-delete-group:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-schema:hover,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-delete-group:hover{color:#ee6a5e}#rank-math-schema-item .button.rank-math-use-schema i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-use-schema i{font-size:11px;vertical-align:-1px}#rank-math-schema-item .button i,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button i{font-size:15px;line-height:1;margin-right:5px;vertical-align:-2px}#rank-math-schema-item .button.rank-math-preview-schema,.rank-math-schema-tabs .components-panel__body .schema-group--actions .button.rank-math-preview-schema{display:none}#rank-math-schema-item .rank-math-confirm-delete,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete{position:absolute;top:6px;right:10px;width:158px;margin-left:-1px;padding:4px 10px;border-radius:3px;background:#fff;-webkit-box-shadow:0 1px 6px 0 rgba(0,0,0,.15);box-shadow:0 1px 6px 0 rgba(0,0,0,.15)}#rank-math-schema-item .rank-math-confirm-delete .is-link,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link{line-height:1.4;display:inline-block !important;padding:0 12px;text-decoration:none;border-right:1px solid #dadfe4}#rank-math-schema-item .rank-math-confirm-delete .is-link:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:hover{text-decoration:underline}#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type{color:#ee6a5e}#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type:hover,#rank-math-schema-item .rank-math-confirm-delete .is-link:first-of-type:focus,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:first-of-type:focus{color:#e93f30}#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type{padding-right:0;color:#069de3;border-right:0}#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type:hover,#rank-math-schema-item .rank-math-confirm-delete .is-link:last-of-type:focus,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type:hover,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete .is-link:last-of-type:focus{color:#08a7f1}#rank-math-schema-item .rank-math-confirm-delete>span,.rank-math-schema-tab-content-schemaBuilder .schema-builder .rank-math-confirm-delete>span{font-weight:600;line-height:1.4;margin-right:8px}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation{position:relative;display:none;width:74px;height:22px;border-left:1px solid #dadfe4}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation .rank-math-confirm-delete,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation .rank-math-confirm-delete{position:absolute;top:-3px;right:0}#rank-math-schema-item .schema-group--actions .rank-math-inline-confirmation>button,.rank-math-schema-tab-content-schemaBuilder .schema-builder .schema-group--actions .rank-math-inline-confirmation>button{margin-top:1px}.rank-math-custom-schema-wrapper img{max-width:100%;opacity:.6}.show-add-property-group>.schema-group>.schema-group-header .rank-math-add-property-group,.show-add-property>.schema-group>.schema-group-header>.schema-group--actions{display:inline-block !important}.show-delete-property-group>div>.schema-group-header div.rank-math-inline-confirmation{display:inline-block !important}.show-delete-property>div div.rank-math-inline-confirmation button.button{display:inline-block !important}.rank-math-pretty-json *,.rank-math-pretty-json *:before,.rank-math-pretty-json *:after{-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-pretty-json *:focus{outline:none}.rank-math-pretty-json textarea{display:none}.rank-math-pretty-json.free-version form,.rank-math-pretty-json.free-version .code-output{-webkit-filter:blur(2px);filter:blur(2px)}.rank-math-pretty-json form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.rank-math-pretty-json form h4{margin-right:auto;margin-bottom:0}.rank-math-pretty-json form button.is-small i{font-size:13px;display:inline-block;vertical-align:-2px}.rank-math-pretty-json form button.is-small:first-of-type i{margin-right:3px}.rank-math-pretty-json form .structured-data-copy{margin-right:5px}.rank-math-pretty-json form .structured-data-copy .success{display:none}.rank-math-pretty-json form .structured-data-copy.copied.is-small{color:#52a652;border-color:#52a652}.rank-math-pretty-json form .structured-data-copy.copied.is-small .original-text{display:none}.rank-math-pretty-json form .structured-data-copy.copied.is-small .success{display:inline-block}.rank-math-pretty-json .code-output{line-height:1.5em;overflow-y:auto;margin:1rem 0 0;border-radius:4px;background:#283142}.rank-math-pretty-json .code-output code{font-family:"Roboto Mono",monospace;font-size:14px;line-height:20px;display:block;overflow:scroll;max-height:540px;padding:1rem;color:#eceff1}.rank-math-pretty-json .string{color:#4dd0e1}.rank-math-pretty-json .number{color:#ffab70}.rank-math-pretty-json .boolean{color:#ffab70}.rank-math-pretty-json .null{color:#fafbfc}.rank-math-pretty-json .key{color:#9ccc65}.schema-builder{font-size:14px;line-height:1.25}.schema-builder.schema-template-pre-defined .schema-group--actions{display:none}.schema-builder.schema-template-pre-defined .schema-group-or-property-container>.schema-group-or-property:before{top:-21px;border-width:0 0 2px 2px}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property{padding:8px 0 0;border:0;background:rgba(0,0,0,0)}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property:before,.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property:after{left:-13px;width:16px}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property>.schema-group-header>.schema-group--actions button.rank-math-add-property{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-right:0;border-right:0 !important}.schema-builder.schema-template-pre-defined .schema-group--children>.no-array-map>.schema-group-or-property .schema-property--body .schema-property--field{display:none}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group{padding:0;border:0;background:rgba(0,0,0,0)}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group:before{display:none}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group:after{left:-13px}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group>.schema-group-header{display:none}.schema-builder.schema-template-pre-defined .schema-group--children .hide-group-header>.schema-group>.schema-group--children>.schema-group-or-property-container>.schema-group-or-property{margin-left:0}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions{display:-webkit-box;display:-ms-flexbox;display:flex}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header>.schema-group--actions button.rank-math-add-property-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-right:0;border-right:0 !important}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group>.schema-group-header .schema-group--actions--tr{margin-bottom:0}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions{margin-bottom:0}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions button{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group>.schema-group-header>.schema-group--actions button.rank-math-delete-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group--children:empty{display:none}.schema-builder.schema-template-pre-defined .is-array:not(.no-array-map) .schema-group .schema-group--children:empty:before{display:none}.schema-builder.schema-template-pre-defined button.is-destructive{display:none}.schema-builder.schema-template-pre-defined .hide-property,.schema-builder.schema-template-pre-defined .hide-group{display:none}.schema-builder.schema-template-pre-defined .show-property{display:block}.schema-builder.schema-template-pre-defined:not(.local-person) .article-notice{display:none}.schema-builder .schema-group--children{margin:0 0 5px;padding-top:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property{margin-bottom:10px;margin-left:1rem;padding:10px;border:1px solid #dadfe4;border-radius:4px;background:#f8f9fa}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property:before{top:-11px;border-width:0 0 2px 2px}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::after{top:50%;border-width:0 0 0 2px}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::before,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property::after{position:absolute;left:-14px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:calc(50% + 14px);content:"";border-style:solid;border-color:#dadfe4}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=text]:hover,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=number]:hover,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:hover{border-color:#069de3}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=text]:focus,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=number]:focus,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=text]:-moz-read-only, .schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=number]:-moz-read-only, .schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:-moz-read-only{background-color:hsla(0,0%,100%,.5);color:rgba(44,51,56,.5)}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=text]:read-only,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property input[type=number]:read-only,.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property textarea:read-only{background-color:hsla(0,0%,100%,.5);color:rgba(44,51,56,.5)}.schema-builder .schema-group--children>.schema-group-or-property-container>.schema-group-or-property .components-notice{margin-top:1rem;margin-left:0}.schema-builder .schema-group--children>.schema-group-or-property-container:first-child>.schema-group-or-property::before{top:-13px;height:calc(50% + 13px)}.schema-builder .schema-group--children>.schema-group-or-property-container:last-child>.schema-group-or-property::before{border-radius:0 0 0 4px}.schema-builder .schema-group--children>.schema-group-or-property-container:last-child>.schema-group-or-property::after{display:none}.schema-builder .schema-group--children>.schema-group-or-property-container:not(:has(.schema-property-container)) .schema-group-header{-webkit-box-align:anchor-center;-ms-flex-align:anchor-center;align-items:anchor-center;margin-left:6px}.schema-builder .schema-group--children>.schema-group-or-property-container:not(:has(.schema-property-container)) .schema-group--actions--tr{margin-bottom:0}.schema-builder .schema-group--children>.schema-group-or-property-container:not(:has(.schema-property-container)) .schema-group-or-property:before{top:-13px}.schema-builder .schema-group-or-property{position:relative;border-radius:5px}.schema-builder .schema-group--actions{display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-group--actions button.button{height:22px}.schema-builder .schema-group--actions--tr{margin-bottom:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.schema-builder .schema-group .components-base-control .components-base-control__field{margin-bottom:0}.schema-builder .schema-group .components-base-control.components-toggle-control .components-base-control__field{margin-bottom:5px}.schema-builder .schema-group .components-base-control.components-toggle-control .components-base-control__field label{margin-bottom:0}.schema-builder .schema-property{margin-bottom:15px}.schema-builder .schema-property--label{font-weight:600;position:relative;z-index:1}.schema-builder .schema-property--label:has(.schema-property--label-help){width:100%}.schema-builder .schema-property--label-help{float:right;font-size:13px;font-style:italic}.schema-builder .schema-property--field{font-weight:600;display:inline-block;margin-right:10px}.schema-builder .schema-property--value{-webkit-box-flex:1;-ms-flex:1;flex:1}.schema-builder .schema-property--value label span{color:#e93f30}.schema-builder .schema-property--value div:not(.components-radio-control__option)>label{font-weight:600;margin-bottom:6px}.schema-builder .schema-property--value .components-select-control__input{display:block}.schema-builder .schema-property--value .components-base-control__help{font-size:14px;font-style:normal;margin:0;padding-top:5px;color:#7f868d}.schema-builder .schema-property input[type=text]{width:100%}.schema-builder .schema-property input[type=text]:diabled{color:#444;background:#eee}.schema-builder .schema-property textarea{line-height:1.42857143;min-height:30px;padding:4px 8px}.schema-builder .schema-property textarea:disabled{color:inherit;background:#dadfe4}.schema-builder .schema-property--header>div{display:inline-block}.schema-builder .schema-property--header button.button.is-secondary{line-height:30px;display:none;width:32px;height:30px;margin-left:10px;padding:0 6px;text-align:center;text-decoration:none;border-color:#7e8993;border-radius:3px;background:#fff}.schema-builder .schema-property--header button.button.is-secondary:hover,.schema-builder .schema-property--header button.button.is-secondary:focus{-webkit-box-shadow:none;box-shadow:none}.schema-builder .schema-property--header button.button.is-secondary.rank-math-delete-group:hover,.schema-builder .schema-property--header button.button.is-secondary.rank-math-delete-group:focus{color:#ee6a5e;border-color:#ee6a5e;background:#fff}.schema-builder .schema-property--header>button:first-child{display:inline-block}.schema-builder .schema-property--header>button:first-child i{font-size:16px;line-height:29px}.schema-builder .schema-property--header>button:first-child:hover,.schema-builder .schema-property--header>button:first-child:focus{color:#069de3;border-color:#069de3}.schema-builder .schema-property--header .rank-math-inline-confirmation{width:42px;position:relative}.schema-builder .schema-property--header button.rank-math-delete-group i{font-size:15px;line-height:29px}.schema-builder-save-as{position:sticky;z-index:1;bottom:0;margin:auto -20px -20px;padding:15px 20px;border-top:1px solid #b5bfc9;background:#fff}.rank-math-datepicker__dialog{position:absolute;margin-top:-2px}.rank-math-datepicker__dialog .components-popover__content:before{margin:0}.rank-math-datepicker__dialog .components-popover__content button.is-secondary{line-height:26px;height:26px}.rank-math-datepicker__dialog .components-popover__content .components-datetime__date{padding-left:0;border-top:0}.rank-math-datepicker__dialog .components-popover__content .components-datetime__date .CalendarMonth{padding:0 !important}.rank-math-datepicker>button.components-button{line-height:26px;height:26px;margin:-7px 0 0 0;padding:0 8px;border:0;background:rgba(0,0,0,0)}.rank-math-datepicker>button.components-button:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-checkbox-component>label{display:block;margin-bottom:1rem}.rank-math-checkbox-component>div>div{margin-bottom:5px}.rank-math-schema-template-modal{width:930px;max-height:580px}.rank-math-schema-template-modal .rank-math-custom-schema-wrapper{background-size:contain;display:block;height:calc(100vh - 350px)}.rank-math-schema-template-modal #rank-math-pro-cta{top:100px;bottom:auto}PK     ™ŠU]üT‡õ  õ  +  includes/modules/schema/class-opengraph.phpnu „[µü¤        <?php
/**
 * Output Opengraph tags for specific schema types.
 *
 * @since      1.0.56
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Opengraph class.
 */
class Opengraph {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/opengraph/facebook', 'add_schema_tags', 90 );
	}

	/**
	 * Output the schema opengraph tags.
	 *
	 * @param OpenGraph $opengraph The current opengraph network object.
	 */
	public function add_schema_tags( $opengraph ) {
		if ( ! is_singular() ) {
			return;
		}

		$schemas = $this->get_schemas();
		if ( empty( $schemas ) ) {
			return;
		}

		$hash = [
			'VideoObject' => 'video',
			'Product'     => 'product',
			'Article'     => 'article',
			'NewsArticle' => 'article',
			'BlogPosting' => 'article',
		];

		foreach ( $schemas as $schema ) {
			$method = $hash[ $schema['@type'] ];
			$this->$method( $schema, $opengraph );
		}
	}

	/**
	 * Function to get schema data.
	 */
	private function get_schemas() {
		global $post;
		$schemas = array_filter(
			DB::get_schemas( $post->ID ),
			function ( $schema ) {
				return ! empty( $schema['@type'] ) && in_array( $schema['@type'], [ 'Article', 'NewsArticle', 'BlogPosting', 'Product', 'VideoObject' ], true );
			}
		);

		if ( ! empty( $schemas ) ) {
			return $schemas;
		}

		$default_schema = Helper::get_default_schema_type( $post->ID, true, false );
		if ( ! in_array( $default_schema, [ 'Article', 'BlogPosting', 'NewsArticle' ], true ) ) {
			return false;
		}

		return [
			[
				'@type'         => $default_schema,
				'datePublished' => '%date(Y-m-d\TH:i:sP)%',
				'dateModified'  => '%modified(Y-m-d\TH:i:sP)%',
			],
		];
	}

	/**
	 * Output Video Schema tags.
	 *
	 * @param array     $schema    Schema Data.
	 * @param OpenGraph $opengraph The current opengraph network object.
	 */
	private function video( $schema, $opengraph ) {
		$video_url = ! empty( $schema['contentUrl'] ) ? $schema['contentUrl'] : ( ! empty( $schema['embedUrl'] ) ? $schema['embedUrl'] : '' );
		if ( ! $video_url ) {
			return;
		}

		$opengraph->tag( 'og:video', $video_url );
		if ( ! empty( $schema['duration'] ) ) {
			global $post;
			$opengraph->tag( 'video:duration', Helper::duration_to_seconds( Helper::replace_vars( $schema['duration'], $post ) ) );
		}
	}

	/**
	 * Output Product Schema tags.
	 *
	 * @param array     $schema    Schema Data.
	 * @param OpenGraph $opengraph The current opengraph network object.
	 */
	public function product( $schema, $opengraph ) {
		if ( isset( $schema['brand'], $schema['brand']['name'] ) ) {
			$opengraph->tag( 'product:brand', $schema['brand']['name'] );
		}

		$tags = [
			'product:price:amount'   => ! empty( $schema['offers']['price'] ) ? $schema['offers']['price'] : '',
			'product:price:currency' => ! empty( $schema['offers']['priceCurrency'] ) ? $schema['offers']['priceCurrency'] : '',
			'product:availability'   => ! empty( $schema['offers']['availability'] ) && 'instock' === $schema['offers']['availability'] ? 'instock' : '',
		];

		foreach ( $tags as $tag => $value ) {
			$opengraph->tag( $tag, $value );
		}
	}

	/**
	 * Output Article Schema tags.
	 *
	 * @param array     $schema    Schema Data.
	 * @param OpenGraph $opengraph The current opengraph network object.
	 */
	private function article( $schema, $opengraph ) {
		if ( empty( $schema['datePublished'] ) || empty( $schema['dateModified'] ) ) {
			return;
		}

		global $post;
		$pub = '%date(Y-m-dTH:i:sP)%' === $schema['datePublished'] ? '%date(Y-m-d\TH:i:sP)%' : $schema['datePublished'];
		$mod = '%modified(Y-m-dTH:i:sP)%' === $schema['dateModified'] ? '%modified(Y-m-d\TH:i:sP)%' : $schema['dateModified'];
		$pub = Helper::replace_vars( $pub, $post );
		$mod = Helper::replace_vars( $mod, $post );
		$opengraph->tag( 'article:published_time', $pub );
		if ( $mod !== $pub ) {
			$opengraph->tag( 'article:modified_time', $mod );
		}
	}
}
PK     ™ŠU]Ú¢O—2  —2  3  includes/modules/schema/class-snippet-shortcode.phpnu „[µü¤        <?php
/**
 * The Schema Shortcode
 *
 * @since      1.0.24
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Traits\Shortcode;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Snippet_Shortcode class.
 */
class Snippet_Shortcode {

	use Hooker;
	use Shortcode;

	/**
	 * Post object.
	 *
	 * @var object
	 */
	private $post;

	/**
	 * Schema data.
	 *
	 * @var array
	 */
	private $schema;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->add_shortcode( 'rank_math_rich_snippet', 'rich_snippet' );
		$this->add_shortcode( 'rank_math_review_snippet', 'rich_snippet' );

		if ( ! is_admin() ) {
			$this->filter( 'the_content', 'output_schema_in_content', 11 );
		}
	}

	/**
	 * Schema shortcode.
	 *
	 * @param  array $atts Optional. Shortcode arguments - currently only 'show'
	 *                     parameter, which is a comma-separated list of elements to show.
	 *
	 * @return string Shortcode output.
	 */
	public function rich_snippet( $atts ) {
		$atts = shortcode_atts(
			[
				'id'        => false,
				'post_id'   => Param::get( 'post_id' ) ? Param::get( 'post_id' ) : get_the_ID(),
				'classname' => '',
				'is_block'  => false,
			],
			$atts,
			'rank_math_rich_snippet'
		);

		if ( 'edit' === Param::get( 'context' ) ) {
			rank_math()->variables->setup();
		}

		$data = $this->get_schema_data( $atts['id'], $atts['post_id'] );
		if ( empty( $data ) || empty( $data['schema'] ) ) {
			return esc_html__( 'No schema found.', 'seo-by-rank-math' );
		}

		$post    = get_post( $data['post_id'] );
		$schemas = ! empty( $atts['id'] ) ? [ $data['schema'] ] : $data['schema'];

		$html = '';

		foreach ( $schemas as $schema ) {
			$schema = $this->replace_variables( $schema, $post );
			$schema = $this->do_filter( 'schema/shortcode/filter_attributes', $schema, $atts );

			if ( empty( $schema ) ) {
				continue;
			}

			/**
			 * Change the Schema HTML output.
			 *
			 * @param string            $unsigned HTML output.
			 * @param array             $schema   Schema data.
			 * @param WP_Post           $post     The post instance.
			 * @param Snippet_Shortcode $this     Snippet_Shortcode instance.
			 */
			$html .= $this->do_filter( 'snippet/html', $this->get_snippet_content( $schema, $post, $atts ), $schema, $post, $this );
		}

		return $html;
	}

	/**
	 * Get Snippet content.
	 *
	 * @param  array   $schema Schema to replace.
	 * @param  WP_Post $post   Post schema attached to.
	 * @param  array   $atts   Optional. Shortcode arguments - currently only 'show'
	 *                     parameter, which is a comma-separated list of elements to show.
	 *
	 * @return string Shortcode output.
	 */
	public function get_snippet_content( $schema, $post, $atts ) {
		wp_enqueue_style( 'rank-math-review-snippet', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/blocks/schema/assets/css/schema.css', null, rank_math()->version );
		$type         = \strtolower( $schema['@type'] );
		$type         = preg_replace( '/[^a-z0-9_-]+/i', '', $type );
		$this->post   = $post;
		$this->schema = $schema;

		if ( in_array( $type, [ 'article', 'blogposting', 'newsarticle' ], true ) ) {
			return;
		}

		if ( Str::ends_with( 'event', $type ) ) {
			$type = 'event';
		}

		if ( 'resturant' === $type ) {
			$type = 'restaurant';
		}

		$class = ! empty( $atts['classname'] ) ? $atts['classname'] : '';

		ob_start();
		?>
			<div id="rank-math-rich-snippet-wrapper" class="<?php echo esc_attr( $class ); ?>">

				<?php
				$type = sanitize_file_name( $type );
				$file = rank_math()->plugin_dir() . "includes/modules/schema/shortcode/$type.php";
				if ( file_exists( $file ) ) {
					include $file;
				}

				$this->do_action( 'snippet/after_schema_content', $this );
				?>

			</div>
		<?php

		return ob_get_clean();
	}

	/**
	 * Get field value.
	 *
	 * @param  string $field_id      Field id.
	 * @param  mixed  $default_value Default value.
	 * @return mixed
	 */
	public function get_field_value( $field_id, $default_value = null ) {
		$array = $this->schema;
		if ( isset( $array[ $field_id ] ) ) {
			if ( isset( $array[ $field_id ]['@type'] ) ) {
				unset( $array[ $field_id ]['@type'] );
			}

			return $array[ $field_id ];
		}

		foreach ( explode( '.', $field_id ) as $segment ) {
			if ( ! is_array( $array ) || ! array_key_exists( $segment, $array ) ) {
				return $default_value;
			}

			$array = $array[ $segment ];
		}

		return $array;
	}

	/**
	 * Get field.
	 *
	 * @param  string $title         Field title.
	 * @param  string $field_id      Field id to get value.
	 * @param  string $convert_date  Convert date value to proper format.
	 * @param  mixed  $default_value Default value.
	 */
	public function get_field( $title, $field_id, $convert_date = false, $default_value = null ) {
		$value = $this->get_field_value( $field_id, $default_value );
		if ( empty( $value ) ) {
			return;
		}

		if ( $convert_date ) {
			$value = Helper::convert_date( $value );
		}

		$this->output_field( $title, $value );
	}

	/**
	 * Get Opening hours data.
	 *
	 * @param string $field_id Field id to get value.
	 */
	public function get_opening_hours( $field_id ) {
		$opening_hours = $this->get_field_value( $field_id );
		if ( empty( $opening_hours ) ) {
			return;
		}

		if ( count( array_filter( array_keys( $opening_hours ), 'is_string' ) ) > 0 ) {
			$this->get_opening_hour( $opening_hours );
			return;
		}

		echo '<div>';
		echo '<strong>' . esc_html__( 'Opening Hours', 'seo-by-rank-math' ) . '</strong><br />';
		foreach ( $opening_hours as $opening_hour ) {
			$this->get_opening_hour( $opening_hour );
		}
		echo '</div>';
	}

	/**
	 * Get Opening hours.
	 *
	 * @param array $opening_hour Opening hours data.
	 */
	public function get_opening_hour( $opening_hour ) {
		$labels = [
			'dayOfWeek' => esc_html__( 'Days', 'seo-by-rank-math' ),
			'opens'     => esc_html__( 'Opening Time', 'seo-by-rank-math' ),
			'closes'    => esc_html__( 'Closing Time', 'seo-by-rank-math' ),
		];
		foreach ( $labels as $key => $label ) {
			if ( empty( $opening_hour[ $key ] ) ) {
				continue;
			}

			$this->output_field( $label, $opening_hour[ $key ] );
		}
	}

	/**
	 * Get field.
	 *
	 * @param string $title Field title.
	 * @param mixed  $value Field value.
	 */
	public function output_field( $title, $value ) {
		?>
		<p>
			<strong><?php echo esc_html( $title ); // phpcs:ignore ?>: </strong>
			<?php echo is_array( $value ) ? implode( ', ', $value ) : wp_kses_post( $value ); // phpcs:ignore ?>
		</p>
		<?php
	}

	/**
	 * Get title.
	 */
	public function get_title() {
		if ( ! isset( $this->schema['name'] ) && ! isset( $this->schema['title'] ) ) {
			return;
		}

		$title = isset( $this->schema['title'] ) ? $this->schema['title'] : $this->schema['name'];
		$title = $title && '' !== $title ? $title : Helper::replace_vars( '%title%', $this->post );
		?>
		<h5 class="rank-math-title"><?php echo esc_html( $title ); // phpcs:ignore ?></h5>
		<?php
	}

	/**
	 * Get description.
	 *
	 * @param  string $description Schema description field.
	 */
	public function get_description( $description = 'description' ) {
		$excerpt = Helper::replace_vars( '%excerpt%', $this->post );
		if ( $description && '' !== $description ) {
			$description = $this->get_field_value( $description );
		}
		$description = $description && '' !== $description ? $description : ( $excerpt ? $excerpt : Helper::get_post_meta( 'description', $this->post->ID ) );
		?>
		<p><?php echo wp_kses_post( do_shortcode( $description ) ); ?></p>
		<?php
	}

	/**
	 * Get image.
	 */
	public function get_image() {
		if ( ! isset( $this->schema['image'] ) ) {
			return;
		}

		$image = Helper::get_thumbnail_with_fallback( $this->post->ID, 'medium' );
		if ( empty( $image ) ) {
			return;
		}
		?>
		<div class="rank-math-review-image">
			<img src="<?php echo esc_url( $image[0] ); ?>" />
		</div>
		<?php
	}

	/**
	 * Display nicely formatted reviews.
	 *
	 * @param  string $field_id     Field id to get value.
	 */
	public function show_ratings( $field_id = 'review.reviewRating.ratingValue' ) {
		$rating = (float) $this->get_field_value( $field_id );
		if ( empty( $rating ) ) {
			return;
		}

		$best_rating = (int) $this->get_field_value( 'review.reviewRating.bestRating', 5 );
		?>
		<div class="rank-math-total-wrapper">

			<strong><?php echo $this->do_filter( 'review/text', esc_html__( 'Editor\'s Rating:', 'seo-by-rank-math' ) ); // phpcs:ignore ?></strong><br />

			<span class="rank-math-total"><?php echo $rating; // phpcs:ignore ?></span>

			<div class="rank-math-review-star">

				<div class="rank-math-review-result-wrapper">

					<?php echo \str_repeat( '<i class="rank-math-star"></i>', $best_rating ); // phpcs:ignore ?>

					<div class="rank-math-review-result" style="width:<?php echo ( $rating * ( 100 / $best_rating ) ); // phpcs:ignore ?>%;">
						<?php echo \str_repeat( '<i class="rank-math-star"></i>', $best_rating ); // phpcs:ignore ?>
					</div>

				</div>

			</div>

		</div>
		<?php
	}

	/**
	 * Add schema data in the content.
	 *
	 * @param  string $content Post content.
	 * @return string
	 *
	 * @since 1.0.12
	 */
	public function output_schema_in_content( $content ) {
		if ( ! is_singular() ) {
			return $content;
		}

		$schemas = $this->get_schemas();
		if ( empty( $schemas ) ) {
			return $content;
		}

		foreach ( $schemas as $schema ) {
			$location = $this->get_content_location( $schema );
			if ( false === $location || 'custom' === $location ) {
				continue;
			}

			$review = do_shortcode( '[rank_math_rich_snippet id="' . $schema['metadata']['shortcode'] . '"]' );
			if ( in_array( $location, [ 'top', 'both' ], true ) ) {
				$content = $review . $content;
			}

			if ( in_array( $location, [ 'bottom', 'both' ], true ) && $this->can_add_multi_page() ) {
				$content .= $review;
			}
		}

		return $content;
	}

	/**
	 * Get schema data by shortcode/post ID.
	 *
	 * @param  string $shortcode_id Schema shortcode ID.
	 * @param  string $post_id      Post ID.
	 * @return array
	 */
	private function get_schema_data( $shortcode_id, $post_id = false ) {
		if ( ! empty( $shortcode_id ) && is_string( $shortcode_id ) ) {
			return DB::get_schema_by_shortcode_id( $shortcode_id );
		}

		if ( ! $post_id ) {
			$post_id = Param::get( 'post_id' ) ? Param::get( 'post_id' ) : get_the_ID();
		}

		$data = DB::get_schemas( $post_id );
		return empty( $data ) ? false : [
			'post_id' => $post_id,
			'schema'  => $data,
		];
	}

	/**
	 * Function to replace variables used in Schema fields.
	 *
	 * @param  array   $schemas Schema to replace.
	 * @param  WP_Post $post    Post schema attached to.
	 * @return array
	 */
	private function replace_variables( $schemas, $post ) {
		if ( ! is_array( $schemas ) && ! is_object( $schemas ) ) {
			return [];
		}

		$new_schemas = [];
		foreach ( $schemas as $key => $schema ) {
			if ( 'metadata' === $key ) {
				continue;
			}

			if ( is_array( $schema ) ) {
				$new_schemas[ $key ] = $this->replace_variables( $schema, $post );
				continue;
			}

			// Need this conditions to convert date to valid ISO 8601 format.
			if ( in_array( $key, [ 'datePublished', 'uploadDate' ], true ) && '%date(Y-m-dTH:i:sP)%' === $schema ) {
				$schema = '%date(Y-m-d\TH:i:sP)%';
			}
			if ( 'dateModified' === $key && '%modified(Y-m-dTH:i:sP)%' === $schema ) {
				$schema = '%modified(Y-m-d\TH:i:sP)%';
			}

			$new_schemas[ $key ] = Str::contains( '%', $schema ) ? Helper::replace_seo_fields( $schema, $post ) : $schema;
		}

		return $new_schemas;
	}

	/**
	 * Check if we can inject the review in the content.
	 *
	 * @param array $schema Schema Data.
	 *
	 * @return boolean|string
	 */
	private function get_content_location( $schema ) {
		$location = ! empty( $schema['metadata']['shortcode'] ) && isset( $schema['metadata']['reviewLocation'] ) ? $schema['metadata']['reviewLocation'] : false;
		return $this->do_filter( 'snippet/review/location', $location );
	}

	/**
	 * Get schema data to show in the content.
	 *
	 * @return boolean|array
	 *
	 * @since 1.0.59
	 */
	private function get_schemas() {
		/**
		 * Filter: Allow disabling the review display.
		 *
		 * @param bool $return True to disable.
		 */
		if ( ! is_main_query() || ! in_the_loop() || $this->do_filter( 'snippet/review/hide_data', false ) ) {
			return false;
		}

		$schemas = $this->get_schema_data( false );
		if ( empty( $schemas ) ) {
			return false;
		}

		return array_filter(
			$schemas['schema'],
			function ( $schema ) {
				return ! empty( $schema['metadata']['reviewLocation'] );
			}
		);
	}

	/**
	 * Check if we can add content if multipage.
	 *
	 * @return bool
	 */
	private function can_add_multi_page() {
		global $multipage, $numpages, $page;

		return ( ! $multipage || $page === $numpages );
	}
}
PK     ™ŠU]“<m$ã  ã  9  includes/modules/schema/shortcode/softwareapplication.phpnu „[µü¤        <?php
/**
 * Shortcode - Software Application
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Price', 'seo-by-rank-math' ),
		'offers.price'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Price Currency', 'seo-by-rank-math' ),
		'offers.priceCurrency'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Operating System', 'seo-by-rank-math' ),
		'operatingSystem'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Application Category', 'seo-by-rank-math' ),
		'applicationCategory'
	);
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]Îïi�  �  ,  includes/modules/schema/shortcode/recipe.phpnu „[µü¤        <?php
/**
 * Shortcode - Recipe
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Type', 'seo-by-rank-math' ),
		'recipeCategory'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Cuisine', 'seo-by-rank-math' ),
		'recipeCuisine'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Keywords', 'seo-by-rank-math' ),
		'keywords'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Recipe Yield', 'seo-by-rank-math' ),
		'recipeYield'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Calories', 'seo-by-rank-math' ),
		'nutrition.calories'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Preparation Time', 'seo-by-rank-math' ),
		'prepTime'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Cooking Time', 'seo-by-rank-math' ),
		'cookTime'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Total Time', 'seo-by-rank-math' ),
		'totalTime'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Recipe Video Name', 'seo-by-rank-math' ),
		'video.name'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Recipe Video Description', 'seo-by-rank-math' ),
		'video.description'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Recipe Video Thumbnail', 'seo-by-rank-math' ),
		'video.thumbnailUrl'
	);
	?>

	<?php
	global $wp_embed;
	if ( ! empty( $this->schema['video'] ) ) {
		if ( ! empty( $this->schema['video']['embedUrl'] ) ) {
			echo do_shortcode( $wp_embed->autoembed( $this->schema['video']['embedUrl'] ) );
		} elseif ( ! empty( $this->schema['video']['contentUrl'] ) ) {
			echo do_shortcode( $wp_embed->autoembed( $this->schema['video']['contentUrl'] ) );
		}
	}
	?>

	<?php
	$ingredient = $this->get_field_value( 'recipeIngredient' );
	$this->output_field(
		esc_html__( 'Recipe Ingredients', 'seo-by-rank-math' ),
		'<ul><li>' . join( '</li><li>', $ingredient ) . '</li></ul>'
	);
	?>

	<?php
	$instructions = $this->get_field_value( 'recipeInstructions' );
	if ( is_string( $instructions ) ) {
		$this->get_field(
			esc_html__( 'Recipe Instructions', 'seo-by-rank-math' ),
			'recipeInstructions'
		);
	} else {
		// HowTo Array.
		if ( isset( $instructions[0]['@type'] ) && 'HowtoStep' === $instructions[0]['@type'] ) {
			$instructions = wp_list_pluck( $instructions, 'text' );
			$this->output_field(
				esc_html__( 'Recipe Instructions', 'seo-by-rank-math' ),
				'<ul><li>' . join( '</li><li>', $instructions ) . '</li></ul>'
			);
		}

		// Single HowToSection data.
		if ( ! empty( $instructions['itemListElement'] ) ) {
			$this->output_field(
				esc_html__( 'Recipe Instructions', 'seo-by-rank-math' ),
				''
			);

			$this->output_field(
				$instructions['name'],
				'<ul><li>' . join( '</li><li>', wp_list_pluck( $instructions['itemListElement'], 'text' ) ) . '</li></ul>'
			);
		}

		// Multiple HowToSection data.
		if ( isset( $instructions[0]['@type'] ) && 'HowToSection' === $instructions[0]['@type'] ) {
			$this->output_field(
				esc_html__( 'Recipe Instructions', 'seo-by-rank-math' ),
				''
			);

			foreach ( $instructions as $section ) {
				if ( empty( $section['itemListElement'] ) ) {
					continue;
				}

				$this->output_field(
					$section['name'],
					'<ul><li>' . join( '</li><li>', wp_list_pluck( $section['itemListElement'], 'text' ) ) . '</li></ul>'
				);
			}
		}
	}
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]äö³Mo  o  ,  includes/modules/schema/shortcode/person.phpnu „[µü¤        <?php
/**
 * Shortcode - Person
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Email', 'seo-by-rank-math' ),
		'email'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Address', 'seo-by-rank-math' ),
		'address'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Gender', 'seo-by-rank-math' ),
		'gender'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Job Title', 'seo-by-rank-math' ),
		'jobTitle'
	);
	?>

</div>
PK     ™ŠU]ŒÛ      +  includes/modules/schema/shortcode/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ™ŠU]çµÜ    1  includes/modules/schema/shortcode/videoobject.phpnu „[µü¤        <?php
/**
 * Shortcode - Video
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

global $wp_embed;
$this->get_title();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	if ( ! empty( $this->schema['embedUrl'] ) ) {
		echo do_shortcode( $wp_embed->autoembed( $this->schema['embedUrl'] ) );
	} elseif ( ! empty( $this->schema['contentUrl'] ) ) {
		echo do_shortcode( $wp_embed->autoembed( $this->schema['contentUrl'] ) );
	}
	?>

</div>
PK     ™ŠU]tÄÖ–  –  0  includes/modules/schema/shortcode/restaurant.phpnu „[µü¤        <?php
/**
 * Shortcode - Restaurant
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Address', 'seo-by-rank-math' ),
		'address'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Geo Coordinates', 'seo-by-rank-math' ),
		'geo'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Phone Number', 'seo-by-rank-math' ),
		'telephone'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Price Range', 'seo-by-rank-math' ),
		'priceRange'
	);
	?>

	<?php $this->get_opening_hours( 'openingHoursSpecification' ); ?>

	<?php
	$this->get_field(
		esc_html__( 'Serves Cuisine', 'seo-by-rank-math' ),
		'servesCuisine'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Menu URL', 'seo-by-rank-math' ),
		'hasMenu'
	);
	?>

</div>
PK     ™ŠU]™Ùêyß	  ß	  +  includes/modules/schema/shortcode/event.phpnu „[µü¤        <?php
/**
 * Shortcode - Event
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();

$value      = $this->get_field_value( 'eventAttendanceMode' );
$is_online  = 'Online' === $value;
$is_offline = 'Offline' === $value;

if ( 'MixedEventAttendanceMode' === $value ) {
	$is_online  = true;
	$is_offline = true;
	$value      = esc_html__( 'Online + Offline', 'seo-by-rank-math' );
}
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Event Type', 'seo-by-rank-math' ),
		'@type'
	);
	?>

	<?php
	$this->output_field(
		esc_html__( 'Event Attendance Mode', 'seo-by-rank-math' ),
		$value
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Event Status', 'seo-by-rank-math' ),
		'eventStatus'
	);
	?>

	<?php
	if ( $is_offline ) {
		$this->get_field(
			esc_html__( 'Venue Name', 'seo-by-rank-math' ),
			'location.name'
		);

		$this->get_field(
			esc_html__( 'Venue URL', 'seo-by-rank-math' ),
			'location.url'
		);

		$this->get_field(
			esc_html__( 'Address', 'seo-by-rank-math' ),
			'location.address'
		);
	}
	?>

	<?php
	if ( $is_online ) {
		$this->get_field(
			esc_html__( 'Online Event URL', 'seo-by-rank-math' ),
			'VirtualLocation.url'
		);
	}
	?>

	<?php
	$this->get_field(
		esc_html__( 'Performer', 'seo-by-rank-math' ),
		'performer.@type'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Performer Name', 'seo-by-rank-math' ),
		'performer.name'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Performer URL', 'seo-by-rank-math' ),
		'performer.sameAs'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Start Date', 'seo-by-rank-math' ),
		'startDate',
		true
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'End Date', 'seo-by-rank-math' ),
		'endDate',
		true
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Ticket URL', 'seo-by-rank-math' ),
		'offers.url'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Entry Price', 'seo-by-rank-math' ),
		'offers.price'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Currency', 'seo-by-rank-math' ),
		'offers.priceCurrency'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Availability', 'seo-by-rank-math' ),
		'offers.availability'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Availability Starts', 'seo-by-rank-math' ),
		'startDate'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Stock Inventory', 'seo-by-rank-math' ),
		'offers.inventoryLevel'
	);
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]*SqJ  J  ,  includes/modules/schema/shortcode/course.phpnu „[µü¤        <?php
/**
 * Shortcode - Course
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Course Provider', 'seo-by-rank-math' ),
		'provider.@type'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Provider Name', 'seo-by-rank-math' ),
		'provider.name'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Provider URL', 'seo-by-rank-math' ),
		'provider.sameAs'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Mode', 'seo-by-rank-math' ),
		'hasCourseInstance.courseMode'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Workload', 'seo-by-rank-math' ),
		'hasCourseInstance.courseWorkload',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Start Date', 'seo-by-rank-math' ),
		'hasCourseInstance.courseSchedule.startDate',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'End Date', 'seo-by-rank-math' ),
		'hasCourseInstance.courseSchedule.endDate',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Duration', 'seo-by-rank-math' ),
		'hasCourseInstance.courseSchedule.duration',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Repeat Count', 'seo-by-rank-math' ),
		'hasCourseInstance.courseSchedule.repeatCount',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Repeat Frequency', 'seo-by-rank-math' ),
		'hasCourseInstance.courseSchedule.repeatFrequency',
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Type', 'seo-by-rank-math' ),
		'offers.category'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Currency', 'seo-by-rank-math' ),
		'offers.priceCurrency'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Course Price', 'seo-by-rank-math' ),
		'offers.price'
	);
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]…±™p  p  *  includes/modules/schema/shortcode/book.phpnu „[µü¤        <?php
/**
 * Shortcode - Book
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'URL', 'seo-by-rank-math' ),
		'url'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Author', 'seo-by-rank-math' ),
		'author.name'
	);
	?>

	<?php
	if ( ! empty( $schema['hasPart'] ) ) {
		$hash = [
			'edition'       => __( 'Edition', 'seo-by-rank-math' ),
			'name'          => __( 'Name', 'seo-by-rank-math' ),
			'url'           => __( 'Url', 'seo-by-rank-math' ),
			'author'        => __( 'Author', 'seo-by-rank-math' ),
			'isbn'          => __( 'ISBN', 'seo-by-rank-math' ),
			'datePublished' => __( 'Date Published', 'seo-by-rank-math' ),
			'bookFormat'    => __( 'Format', 'seo-by-rank-math' ),
		];
		foreach ( $schema['hasPart'] as $edition ) {
			$this->schema = $edition;
			foreach ( $hash as $key => $label ) {
				$this->get_field( $label, $key );
			}
		}
		$this->schema = $schema;
	}
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]– hnÏ  Ï  0  includes/modules/schema/shortcode/jobposting.phpnu „[µü¤        <?php
/**
 * Shortcode - Job Posting
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Salary', 'seo-by-rank-math' ),
		'baseSalary.value.value'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Salary Currency', 'seo-by-rank-math' ),
		'baseSalary.currency'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Payroll', 'seo-by-rank-math' ),
		'baseSalary.value.unitText'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Date Posted', 'seo-by-rank-math' ),
		'datePosted'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Expiry Posted', 'seo-by-rank-math' ),
		'validThrough'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Unpublish when expired', 'seo-by-rank-math' ),
		'unpublish'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Employment Type ', 'seo-by-rank-math' ),
		'employmentType'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Hiring Organization ', 'seo-by-rank-math' ),
		'hiringOrganization.name'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Organization URL', 'seo-by-rank-math' ),
		'hiringOrganization.sameAs'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Organization Logo', 'seo-by-rank-math' ),
		'hiringOrganization.logo'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Location', 'seo-by-rank-math' ),
		'jobLocation.address'
	);
	?>

</div>
PK     ™ŠU][À¦^/  /  -  includes/modules/schema/shortcode/service.phpnu „[µü¤        <?php
/**
 * Shortcode - Service
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Service Type', 'seo-by-rank-math' ),
		'serviceType'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Price', 'seo-by-rank-math' ),
		'offers.price'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Currency', 'seo-by-rank-math' ),
		'offers.priceCurrency'
	);
	?>

</div>
PK     ™ŠU]|¨ú!©  ©  -  includes/modules/schema/shortcode/product.phpnu „[µü¤        <?php
/**
 * Shortcode - Product
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'Product SKU', 'seo-by-rank-math' ),
		'sku'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Product Brand', 'seo-by-rank-math' ),
		'brand.name'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Product Currency', 'seo-by-rank-math' ),
		'offers.priceCurrency'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Product Price', 'seo-by-rank-math' ),
		'offers.price'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Price Valid Until', 'seo-by-rank-math' ),
		'offers.priceValidUntil'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Product In-Stock', 'seo-by-rank-math' ),
		'offers.availability'
	);
	?>

	<?php $this->show_ratings(); ?>

</div>
PK     ™ŠU]9©<r¨  ¨  +  includes/modules/schema/shortcode/music.phpnu „[µü¤        <?php
/**
 * Shortcode - Music
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

defined( 'ABSPATH' ) || exit;

$this->get_title();
$this->get_image();
?>
<div class="rank-math-review-data">

	<?php $this->get_description(); ?>

	<?php
	$this->get_field(
		esc_html__( 'URL', 'seo-by-rank-math' ),
		'url'
	);
	?>

	<?php
	$this->get_field(
		esc_html__( 'Type', 'seo-by-rank-math' ),
		'@type'
	);
	?>

</div>
PK     šŠU]w:£Æý  ý  '  includes/modules/schema/class-admin.phpnu „[µü¤        <?php
/**
 * The admin-side code of the Schema module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Module\Base;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'rich-snippet',
				'directory' => $directory,
			]
		);
		parent::__construct();

		$this->action( 'admin_init', 'add_kb_links', 50 );
		$this->action( 'rank_math/admin/editor_scripts', 'enqueue' );
		$this->action( 'rank_math/post/column/seo_details', 'display_schema_type', 10, 2 );
	}

	/**
	 * Display schema type in the `seo_details` column on the posts.
	 *
	 * @param int   $post_id The current post ID.
	 * @param array $data    SEO data of current post.
	 */
	public function display_schema_type( $post_id, $data ) {
		$schema = absint( get_option( 'page_for_posts' ) ) !== $post_id ? $this->get_schema_types( $data, $post_id ) : 'CollectionPage';
		$schema = ! empty( $schema ) ? $schema : $this->get_schema_name( Helper::get_default_schema_type( $post_id, true ) );
		$schema = $schema ? $schema : esc_html__( 'Off', 'seo-by-rank-math' );
		?>
			<span class="rank-math-column-display schema-type">
				<strong><?php esc_html_e( 'Schema', 'seo-by-rank-math' ); ?>:</strong>
				<?php echo esc_html( Helper::sanitize_schema_title( $schema ) ); ?>
			</span>
		<?php
	}

	/**
	 * Enqueue Styles and Scripts required for the metabox on the post screen.
	 */
	public function enqueue() {
		if ( ! Helper::has_cap( 'onpage_snippet' ) || Admin_Helper::is_posts_page() ) {
			return;
		}

		$object_id = $this->get_object_id();
		if ( false === $object_id ) {
			return;
		}

		Helper::add_json( 'schemas', $this->get_schema_data( $object_id ) );
		Helper::add_json( 'customSchemaImage', esc_url( rank_math()->plugin_url() . 'includes/modules/schema/assets/img/custom-schema-builder.jpg' ) );

		wp_enqueue_style( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/css/schema.css', [ 'wp-components', 'rank-math-editor' ], rank_math()->version );
		$this->enqueue_translation();

		$screen = get_current_screen();
		if ( 'rank_math_schema' !== $screen->post_type ) {
			wp_enqueue_script( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/js/schema-gutenberg.js', [ 'rank-math-editor' ], rank_math()->version, true );
			wp_set_script_translations( 'rank-math-schema', 'seo-by-rank-math' );
		}
	}

	/**
	 * KB Links for gutenberg
	 */
	public function add_kb_links() {
		Helper::add_json(
			'assessor',
			[
				'reviewConverterLink' => Helper::get_admin_url( 'status', 'view=tools' ),
			]
		);
	}

	/**
	 * Get Schema Data.
	 *
	 * @param int $post_id Post ID.
	 *
	 * @return array $schemas Schema Data.
	 */
	private function get_schema_data( $post_id ) {
		$schemas = DB::get_schemas( $post_id );
		if ( ! empty( $schemas ) ) {
			return $schemas;
		}

		$default_type = $this->get_default_schema_type( $post_id );
		if ( ! $default_type ) {
			return [];
		}

		$post_type   = get_post_type( $post_id );
		$name        = Helper::get_settings( "titles.pt_{$post_type}_default_snippet_name" );
		$description = Helper::get_settings( "titles.pt_{$post_type}_default_snippet_desc" );

		$schemas['new-9999'] = [
			'@type'    => $default_type,
			'metadata' => [
				'title'       => Helper::sanitize_schema_title( $default_type ),
				'type'        => 'template',
				'shortcode'   => uniqid( 's-' ),
				'isPrimary'   => true,
				'name'        => $name,
				'description' => $description,
			],
		];

		if ( ! in_array( $default_type, [ 'Article', 'NewsArticle', 'BlogPosting' ], true ) ) {
			return $schemas;
		}

		$schemas['new-9999']['headline']    = $name ? $name : '';
		$schemas['new-9999']['description'] = $description ? $description : '';
		$schemas['new-9999']['keywords']    = '%keywords%';
		$schemas['new-9999']['author']      = [
			'@type' => 'Person',
			'name'  => '%name%',
		];

		return $schemas;
	}

	/**
	 * Get default schema type.
	 *
	 * @param int $post_id Post ID.
	 *
	 * @return string|bool Schema type.
	 */
	private function get_default_schema_type( $post_id ) {
		$default_type = ucfirst( Helper::get_default_schema_type( $post_id ) );
		if ( ! $default_type ) {
			return false;
		}

		if ( 'Video' === $default_type ) {
			return 'VideoObject';
		}

		if ( 'Software' === $default_type ) {
			return 'SoftwareApplication';
		}

		if ( 'Jobposting' === $default_type ) {
			return 'JobPosting';
		}

		return $default_type;
	}

	/**
	 * Enqueue translation.
	 */
	private function enqueue_translation() {
		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( 'rank-math-schema', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		}
	}

	/**
	 * Get schema types for current post.
	 *
	 * @param array $data    Current post SEO data.
	 * @param int   $post_id Current post ID.
	 *
	 * @return string Comma separated schema types.
	 */
	private function get_schema_types( $data, $post_id ) {
		if ( empty( $data ) ) {
			return false;
		}

		$types = [];
		foreach ( $data as $key => $value ) {
			if ( ! Str::starts_with( 'rank_math_schema_', $key ) ) {
				continue;
			}

			$schema = maybe_unserialize( $value );
			if ( empty( $schema['@type'] ) ) {
				continue;
			}

			if ( ! is_array( $schema['@type'] ) ) {
				$types[] = $this->get_schema_name( $schema['@type'] );
				continue;
			}

			$types = array_merge(
				$types,
				array_map(
					function ( $type ) {
						return $this->get_schema_name( $type );
					},
					$schema['@type']
				)
			);
		}

		if ( empty( $types ) && Helper::get_default_schema_type( $post_id ) ) {
			$types[] = $this->get_schema_name( Helper::get_default_schema_type( $post_id ) );
		}

		if ( has_block( 'rank-math/faq-block', $post_id ) ) {
			$types[] = 'FAQPage';
		}

		if ( has_block( 'rank-math/howto-block', $post_id ) ) {
			$types[] = 'HowTo';
		}

		return empty( $types ) ? false : implode( ', ', $types );
	}

	/**
	 * Function to get Sanitized schema name with sub-schema.
	 *
	 * @param string $schema Selected schema type.
	 *
	 * @return string Schema name with sub-schema.
	 */
	private function get_schema_name( $schema ) {
		$subtitle = in_array( $schema, [ 'BlogPosting', 'NewsArticle' ], true ) ? " ($schema)" : '';
		return Helper::sanitize_schema_title( $schema ) . $subtitle;
	}

	/**
	 * Get the current object ID (post or term).
	 *
	 * @return int|false Object ID or false if not available.
	 */
	private function get_object_id() {
		global $post;

		// For term edit pages.
		if ( Admin_Helper::is_term_profile_page() ) {
			return false;
		}

		// For post edit pages.
		if ( isset( $post->ID ) ) {
			return $post->ID;
		}

		// Try to get from query string.
		return isset( $_GET['post'] ) ? absint( $_GET['post'] ) : false;
	}

	/**
	 * Can exclude field.
	 *
	 * @param string $id   Field id.
	 * @param string $type Field type.
	 *
	 * @return bool
	 */
	private function can_exclude( $id, $type ) {
		$exclude = [ 'meta_tab_container_open', 'tab_container_open', 'tab_container_close', 'tab', 'raw', 'notice' ];
		return in_array( $type, $exclude, true ) || ! Str::starts_with( 'rank_math_snippet_', $id );
	}

	/**
	 * Convert string to camel case.
	 *
	 * @param string $str String to convert.
	 *
	 * @return string
	 */
	private function camelize( $str ) {
		$sep = '_';
		$str = str_replace( 'rank_math_snippet_', '', $str );
		$str = str_replace( $sep, '', ucwords( $str, $sep ) );

		return lcfirst( $str );
	}
}
PK     šŠU]&¬“ñÇ  Ç  2  includes/modules/schema/snippets/class-website.phpnu „[µü¤        <?php
/**
 * The Website Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Website class.
 */
class Website implements Snippet {

	/**
	 * Generate WebSite JSON-LD.
	 *
	 * @link https://schema.org/WebSite
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$data['WebSite'] = [
			'@type' => 'WebSite',
			'@id'   => home_url( '/#website' ),
			'url'   => get_home_url(),
			'name'  => $jsonld->get_website_name(),
		];

		$alternate_name = Helper::get_settings( 'titles.website_alternate_name' );
		if ( $alternate_name ) {
			$data['WebSite']['alternateName'] = $alternate_name;
		}
		$jsonld->add_prop( 'publisher', $data['WebSite'], 'publisher', $data );
		$jsonld->add_prop( 'language', $data['WebSite'] );

		/**
		 * Disable the JSON-LD output for the Sitelinks Searchbox.
		 *
		 * @param bool $disable Display or not the JSON-LD for the Sitelinks Searchbox.
		 */
		if ( apply_filters( 'rank_math/json_ld/disable_search', ! is_front_page() || is_paged() ) ) {
			return $data;
		}

		/**
		 * Change the search URL in the JSON-LD.
		 *
		 * @param string $search_url The search URL with `{search_term_string}` placeholder.
		 */
		$search_url = apply_filters( 'rank_math/json_ld/search_url', home_url( '/?s={search_term_string}' ) );

		$data['WebSite']['potentialAction'] = [
			'@type'       => 'SearchAction',
			'target'      => $search_url,
			'query-input' => 'required name=search_term_string',
		];

		return $data;
	}
}
PK     šŠU]÷qò ‹  ‹  2  includes/modules/schema/snippets/class-article.phpnu „[µü¤        <?php
/**
 * The Article Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Article class.
 */
class Article implements Snippet {

	use Hooker;

	/**
	 * Article rich snippet.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$entity = [
			'@type'          => Helper::get_default_schema_type( $jsonld->post->ID ),
			'headline'       => $jsonld->parts['title'],
			'keywords'       => Helper::replace_vars( '%keywords%', $jsonld->post ),
			'datePublished'  => $jsonld->parts['published'],
			'dateModified'   => $jsonld->parts['modified'],
			'isPrimary'      => true,
			'articleSection' => Helper::replace_vars( '%primary_taxonomy_terms%', $jsonld->post ),
			'author'         => ! empty( $data['ProfilePage'] ) ?
				[
					'@id'  => $data['ProfilePage']['@id'],
					'name' => $jsonld->parts['author'],
				] :
				[
					'@type' => 'Person',
					'name'  => $jsonld->parts['author'],
				],
		];

		$jsonld->add_prop( 'publisher', $entity, 'publisher', $data );
		if ( ! empty( $jsonld->parts['desc'] ) ) {
			$entity['description'] = $jsonld->parts['desc'];
		}

		return $entity;
	}
}
PK     šŠU]½häQ	  Q	  8  includes/modules/schema/snippets/class-products-page.phpnu „[µü¤        <?php
/**
 * The Products Page Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Products_Page class.
 */
class Products_Page implements Snippet {

	/**
	 * Sets the Schema structured data on the Products Archive page.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		if ( ! $this->can_add_snippet_taxonomy() || ! $this->can_add_snippet_shop() ) {
			return $data;
		}

		$data['ProductsPage'] = [
			'@context' => 'https://schema.org/',
			'@graph'   => [],
		];

		while ( have_posts() ) {
			the_post();

			$post_id = get_the_ID();
			$product = wc_get_product( $post_id );
			$url     = $jsonld->get_post_url( $post_id );

			$part = [
				'@type'       => 'Product',
				'name'        => $jsonld->get_product_title( $product ),
				'url'         => $url,
				'@id'         => $url,
				'description' => $jsonld->get_product_desc( $product ),
			];

			$data['ProductsPage']['@graph'][] = $part;
		}

		wp_reset_postdata();

		return $data;
	}

	/**
	 * Check if structured data can be added on the current Product taxonomy.
	 *
	 * @return boolean|string
	 */
	private function can_add_snippet_taxonomy() {
		$queried_object = get_queried_object();

		/**
		 * Allow developer to remove snippet data.
		 *
		 * @param bool $unsigned Default: false
		 * @param string $unsigned Taxonomy Name
		 */
		if (
			! is_shop() &&
			(
				true === Helper::get_settings( 'titles.remove_' . $queried_object->taxonomy . '_snippet_data' ) ||
				true === apply_filters( 'rank_math/snippet/remove_taxonomy_data', false, $queried_object->taxonomy )
			)
		) {
			return false;
		}

		return true;
	}

	/**
	 * Check if structured data can be added on the Shop page.
	 *
	 * @return boolean|string
	 */
	private function can_add_snippet_shop() {
		/**
		 * Allow developer to remove snippet data from Shop page.
		 *
		 * @param bool $unsigned Default: false
		 */
		if (
			is_shop() &&
			(
				true === Helper::get_settings( 'general.remove_shop_snippet_data' ) ||
				true === apply_filters( 'rank_math/snippet/remove_shop_data', false )
			)
		) {
			return false;
		}

		return true;
	}
}
PK     šŠU]"ÉEé.  é.  >  includes/modules/schema/snippets/class-product-woocommerce.phpnu „[µü¤        <?php
/**
 * The WooCommerce Product Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Product_WooCommerce class.
 */
class Product_WooCommerce {

	/**
	 * Attribute assigner.
	 *
	 * @var WC_Attributes
	 */
	private $attributes;

	/**
	 * Get the instance.
	 */
	public static function get() {
		static $instance = null;

		if ( null === $instance ) {
			$instance = new self();
		}

		return $instance;
	}

	/**
	 * Set product data for rich snippet.
	 *
	 * @param array  $entity Array of JSON-LD entity.
	 * @param JsonLD $jsonld JsonLD Instance.
	 */
	public function set_product( &$entity, $jsonld ) {
		$product          = wc_get_product( get_the_ID() );
		$this->attributes = new WC_Attributes( $product );

		if ( Helper::is_module_active( 'woocommerce' ) ) {
			$brand = \RankMath\WooCommerce\WooCommerce::get_brands( $product->get_id() );

			// Brand.
			if ( ! empty( $brand ) ) {
				$entity['brand'] = [
					'@type' => 'Brand',
					'name'  => $brand,
				];
			}
		}

		$entity['name']             = $jsonld->get_product_title( $product );
		$entity['description']      = $jsonld->get_product_desc( $product );
		$entity['sku']              = $product->get_sku() ? $product->get_sku() : '';
		$entity['category']         = Product::get_category( $product->get_id(), 'product_cat' );
		$entity['mainEntityOfPage'] = [ '@id' => $jsonld->parts['canonical'] . '#webpage' ];

		$this->set_gtin( $product, $entity );
		$this->set_weight( $product, $entity );
		$this->set_dimensions( $product, $entity );
		$this->set_images( $product, $entity );
		$this->set_ratings( $product, $entity );
		$this->set_offers( $product, $entity, Product::get_seller( $jsonld ) );

		// GTIN numbers need product attributes.
		$this->attributes->assign_property( $entity, 'gtin8' );
		$this->attributes->assign_property( $entity, 'gtin12' );
		$this->attributes->assign_property( $entity, 'gtin13' );
		$this->attributes->assign_property( $entity, 'gtin14' );

		// Color.
		$this->attributes->assign_property( $entity, 'color' );

		// Remaining Attributes.
		$this->attributes->assign_remaining( $entity );
	}

	/**
	 * Set product gtin.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 */
	private function set_gtin( $product, &$entity ) {
		if ( ! method_exists( $product, 'get_global_unique_id' ) || empty( $product->get_global_unique_id() ) ) {
			return;
		}

		$entity['gtin'] = $product->get_global_unique_id();
	}

	/**
	 * Set product weight.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 */
	private function set_weight( $product, &$entity ) {
		if ( ! $product->has_weight() ) {
			return;
		}

		$hash = [
			'lbs' => 'LBR',
			'kg'  => 'KGM',
			'g'   => 'GRM',
			'oz'  => 'ONZ',
		];
		$unit = get_option( 'woocommerce_weight_unit' );

		$entity['weight'] = [
			'@type'    => 'QuantitativeValue',
			'unitCode' => isset( $hash[ $unit ] ) ? $hash[ $unit ] : 'LBR',
			'value'    => $product->get_weight(),
		];
	}

	/**
	 * Set product dimension.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 */
	private function set_dimensions( $product, &$entity ) {
		if ( ! $product->has_dimensions() ) {
			return;
		}

		$hash = [
			'in' => 'INH',
			'm'  => 'MTR',
			'cm' => 'CMT',
			'mm' => 'MMT',
			'yd' => 'YRD',
		];
		$unit = get_option( 'woocommerce_dimension_unit' );
		$code = isset( $hash[ $unit ] ) ? $hash[ $unit ] : '';

		$entity['height'] = [
			'@type'    => 'QuantitativeValue',
			'unitCode' => $code,
			'value'    => $product->get_height(),
		];

		$entity['width'] = [
			'@type'    => 'QuantitativeValue',
			'unitCode' => $code,
			'value'    => $product->get_width(),
		];

		$entity['depth'] = [
			'@type'    => 'QuantitativeValue',
			'unitCode' => $code,
			'value'    => $product->get_length(),
		];
	}

	/**
	 * Set product images.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 */
	private function set_images( $product, &$entity ) {
		$images = $this->get_images( $product );
		if ( ! $images ) {
			return;
		}

		$entity['image'] = $images;
	}

	/**
	 * Set product ratings.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 */
	private function set_ratings( $product, &$entity ) {
		if ( $product->get_rating_count() < 1 ) {
			return;
		}

		// Aggregate Rating.
		$entity['aggregateRating'] = [
			'@type'       => 'AggregateRating',
			'ratingValue' => $product->get_average_rating(),
			'bestRating'  => '5',
			'ratingCount' => $product->get_rating_count(),
			'reviewCount' => $product->get_review_count(),
		];

		// Reviews.
		$comments  = get_comments(
			[
				'post_type' => 'product',
				'post_id'   => get_the_ID(),
				'status'    => 'approve',
				'parent'    => 0,
			]
		);
		$permalink = $product->get_permalink();

		foreach ( $comments as $comment ) {
			$rating = intval( get_comment_meta( $comment->comment_ID, 'rating', true ) );
			if ( ! $rating ) {
				continue;
			}

			$entity['review'][] = [
				'@type'         => 'Review',
				'@id'           => $permalink . '#li-comment-' . $comment->comment_ID,
				'description'   => $comment->comment_content,
				'datePublished' => $comment->comment_date,
				'reviewRating'  => [
					'@type'       => 'Rating',
					'ratingValue' => $rating,
					'bestRating'  => '5',
					'worstRating' => '1',
				],
				'author'        => [
					'@type' => 'Person',
					'name'  => $comment->comment_author,
					'url'   => $comment->comment_author_url,
				],
			];
		}
	}

	/**
	 * Get product images.
	 *
	 * @param object $product Product instance.
	 */
	public function get_images( $product ) {
		if ( ! $product->get_image_id() ) {
			return;
		}

		$images = [];
		$image  = wp_get_attachment_image_src( $product->get_image_id(), 'single-post-thumbnail' );
		if ( ! empty( $image ) ) {
			$images[] = [
				'@type'  => 'ImageObject',
				'url'    => $image[0],
				'height' => $image[2],
				'width'  => $image[1],
			];
		}

		$gallery = $product->get_gallery_image_ids();
		foreach ( $gallery as $image_id ) {
			$image = wp_get_attachment_image_src( $image_id, 'single-post-thumbnail' );
			if ( empty( $image ) ) {
				continue;
			}

			$images[] = [
				'@type'  => 'ImageObject',
				'url'    => $image[0],
				'height' => $image[2],
				'width'  => $image[1],
			];
		}

		return $images;
	}

	/**
	 * Set product offers.
	 *
	 * @param object $product Product instance.
	 * @param array  $entity  Array of JSON-LD entity.
	 * @param array  $seller  Seller info.
	 */
	private function set_offers( $product, &$entity, $seller ) {
		$offers = $this->get_offers( $product, $seller );
		if ( ! $offers ) {
			return;
		}

		$entity['offers'] = $offers;

		if ( $product->is_type( 'variable' ) ) {
			return;
		}

		$this->attributes->assign_property( $offers, 'itemCondition' );
	}

	/**
	 * Get product offers.
	 *
	 * @param object $product Product instance.
	 * @param array  $seller  Seller info.
	 */
	public function get_offers( $product, $seller ) {
		if ( '' === $product->get_price() ) {
			return;
		}

		$offers = $this->get_offers_variable( $product, $seller );
		if ( $offers ) {
			return $offers;
		}

		$price_valid_until = gmdate( 'Y-12-31', time() + YEAR_IN_SECONDS );
		if ( $product->get_date_on_sale_to() ) {
			$sale_price_valid_until = gmdate( 'Y-m-d', $product->get_date_on_sale_to()->getTimestamp() );
		}

		$offer = [
			'@type'           => 'Offer',
			'price'           => $product->get_price() ? wc_format_decimal( $product->get_price(), wc_get_price_decimals() ) : '0',
			'priceCurrency'   => get_woocommerce_currency(),
			'priceValidUntil' => $sale_price_valid_until ?? $price_valid_until,
			'availability'    => $this->get_availability( $product ),
			'itemCondition'   => 'NewCondition',
			'url'             => $product->get_permalink(),
			'seller'          => $seller,
		];

		// Set Price Specification.
		$price_specification = $this->get_price_specification( $product->get_price(), $offer );
		if ( $price_specification ) {
			$offer['priceSpecification'] = $price_specification;
		}

		return $offer;
	}

	/**
	 * Get product availability.
	 *
	 * @param object $product Product instance.
	 *
	 * @return string Product availability schema.
	 */
	public function get_availability( $product ) {
		if ( $product->is_in_stock() ) {
			$stock_status_schema = ( 'onbackorder' === $product->get_stock_status() ) ? 'BackOrder' : 'InStock';
		} else {
			$stock_status_schema = 'OutOfStock';
		}

		return 'http://schema.org/' . $stock_status_schema;
	}

	/**
	 * Get product variable offers.
	 *
	 * @param object $product Product instance.
	 * @param array  $seller  Seller info.
	 */
	private function get_offers_variable( $product, $seller ) {
		if ( ! $product->is_type( 'variable' ) ) {
			return false;
		}

		$offers = $this->get_single_variable_offer( $product, $seller );
		if ( $offers ) {
			return $offers;
		}

		$permalink = $product->get_permalink();
		$lowest    = wc_format_decimal( $product->get_variation_price( 'min', false ), wc_get_price_decimals() );
		$highest   = wc_format_decimal( $product->get_variation_price( 'max', false ), wc_get_price_decimals() );

		if ( $lowest === $highest ) {
			$offer = [
				'@type'           => 'Offer',
				'price'           => $lowest,
				'priceValidUntil' => date( 'Y-12-31', time() + YEAR_IN_SECONDS ),
			];

			// Set Price Specification.
			$price_specification = $this->get_price_specification( $lowest, $offer );
			if ( $price_specification ) {
				$offer['priceSpecification'] = $price_specification;
			}
		} else {
			$offer = [
				'@type'      => 'AggregateOffer',
				'lowPrice'   => $lowest,
				'highPrice'  => $highest,
				'offerCount' => count( $product->get_children() ),
			];
		}

		$offer += [
			'priceCurrency' => get_woocommerce_currency(),
			'availability'  => 'http://schema.org/' . ( $product->is_in_stock() ? 'InStock' : 'OutOfStock' ),
			'seller'        => $seller,
			'url'           => $permalink,
		];

		return $offer;
	}

	/**
	 * Set Single Variable Product offer.
	 *
	 * Credit @leewillis77: https://github.com/leewillis77/wc-structured-data-option-4
	 *
	 * @param object $product Product instance.
	 * @param array  $seller  Seller info.
	 */
	private function get_single_variable_offer( $product, $seller ) {
		$data_store   = \WC_Data_Store::load( 'product' );
		$variation_id = $data_store->find_matching_product_variation( $product, wp_unslash( $_GET ) );
		$variation    = $variation_id ? wc_get_product( $variation_id ) : false;
		if ( empty( $variation ) ) {
			return false;
		}

		$price_valid_until = date( 'Y-12-31', time() + YEAR_IN_SECONDS );
		if ( $variation->is_on_sale() && $variation->get_date_on_sale_to() ) {
			$price_valid_until = date( 'Y-m-d', $variation->get_date_on_sale_to()->getTimestamp() );
		}

		return [
			'@type'           => 'Offer',
			'url'             => $variation->get_permalink(),
			'sku'             => $variation->get_sku(),
			'price'           => wc_format_decimal( $variation->get_price(), wc_get_price_decimals() ),
			'priceCurrency'   => get_woocommerce_currency(),
			'priceValidUntil' => $price_valid_until,
			'seller'          => $seller,
			'availability'    => 'http://schema.org/' . ( $variation->is_in_stock() ? 'InStock' : 'OutOfStock' ),
		];
	}

	/**
	 * Get price specification.
	 *
	 * @param object $price  Product price.
	 */
	private function get_price_specification( $price ) {
		if ( ! wc_tax_enabled() ) {
			return;
		}

		return [
			'price'                 => $price ? $price : '0',
			'priceCurrency'         => get_woocommerce_currency(),
			'valueAddedTaxIncluded' => wc_prices_include_tax() ? 'true' : 'false',
		];
	}
}
PK     šŠU]dñ&ÿô  ô  3  includes/modules/schema/snippets/class-singular.phpnu „[µü¤        <?php
/**
 * The Singular Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Schema\DB;

defined( 'ABSPATH' ) || exit;

/**
 * Singular class.
 */
class Singular implements Snippet {

	use Hooker;

	/**
	 * Generate rich snippet.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$schema = $this->can_add_schema( $jsonld );
		if ( false === $schema ) {
			return $data;
		}

		$hook = 'snippet/rich_snippet_' . $schema;
		/**
		 * Short-circuit if 3rd party is interested generating his own data.
		 */
		$pre = $this->do_filter( $hook, false, $jsonld->parts, $data );
		if ( false !== $pre ) {
			$data['richSnippet'] = $this->do_filter( $hook . '_custom_entity', [] );
			return $data;
		}

		$object = $this->get_schema_class( $schema );
		if ( false === $object ) {
			return $data;
		}

		$entity = $object->process( $data, $jsonld );

		$data['richSnippet'] = $this->do_filter( $hook . '_entity', $entity );

		return $data;
	}

	/**
	 * Get Schema type.
	 *
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return boolean|string
	 */
	private function can_add_schema( $jsonld ) {
		if ( empty( $jsonld->post_id ) ) {
			return false;
		}

		$schemas = DB::get_schemas( $jsonld->post_id );
		if ( ! empty( $schemas ) ) {
			$has_product = array_filter(
				$schemas,
				function ( $schema ) {
					return ! empty( $schema['@type'] ) && in_array( $schema['@type'], [ 'WooCommerceProduct', 'EDDProduct' ], true );
				}
			);
			return ! empty( $has_product ) ? 'product' : false;
		}

		if ( metadata_exists( 'post', $jsonld->post_id, 'rank_math_rich_snippet' ) ) {
			return Helper::get_post_meta( 'rich_snippet' );
		}

		if ( ! Helper::can_use_default_schema( $jsonld->post_id ) ) {
			return false;
		}

		return $this->get_default_schema( $jsonld );
	}

	/**
	 * Get Default Rich Snippet type from Settings.
	 *
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return string
	 */
	private function get_default_schema( $jsonld ) {
		$schema = Helper::get_default_schema_type( $jsonld->post_id, true );
		if ( ! $schema ) {
			return false;
		}

		if ( in_array( $schema, [ 'BlogPosting', 'NewsArticle', 'Article' ], true ) ) {
			return 'article';
		}

		if (
			( Helper::is_woocommerce_active() && is_singular( 'product' ) ) ||
			( Helper::is_edd_active() && is_singular( 'download' ) )
		) {
			return 'product';
		}

		return false;
	}

	/**
	 * Get appropriate Schema Class.
	 *
	 * @param string $schema Schema type.
	 * @return bool|Class
	 */
	private function get_schema_class( $schema ) {
		$data = [
			'article' => '\\RankMath\\Schema\\Article',
			'product' => '\\RankMath\\Schema\\Product',
		];

		if ( isset( $data[ $schema ] ) && class_exists( $data[ $schema ] ) ) {
			return new $data[ $schema ]();
		}

		return false;
	}
}
PK     šŠU]ŒÇØ    6  includes/modules/schema/snippets/class-product-edd.phpnu „[µü¤        <?php
/**
 * The Easy Digital Downloads Product Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use EDD_Download;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Product_Edd class.
 */
class Product_Edd {

	/**
	 * Set product data for rich snippet.
	 *
	 * @param array  $entity Array of JSON-LD entity.
	 * @param JsonLD $jsonld JsonLD Instance.
	 */
	public function set_product( &$entity, $jsonld ) {
		$product_id = get_the_ID();
		$permalink  = get_permalink();
		$product    = new EDD_Download( $product_id );

		$entity['url']              = $permalink;
		$entity['name']             = $jsonld->post->post_title;
		$entity['description']      = Helper::replace_vars( '%seo_description%' );
		$entity['category']         = Product::get_category( $product_id, 'download_category' );
		$entity['mainEntityOfPage'] = [ '@id' => $jsonld->parts['canonical'] . '#webpage' ];

		// SKU.
		if ( $product->get_sku() ) {
			$entity['sku'] = $product->get_sku();
		}

		// Offers.
		$seller     = Product::get_seller( $jsonld );
		$variations = $this->has_variations( $product );
		if ( false !== $variations ) {
			$entity['offers'] = [];
			foreach ( $variations as $variation ) {
				$offer = [
					'@type'           => 'Offer',
					'description'     => $variation['name'],
					'price'           => $variation['amount'],
					'priceCurrency'   => edd_get_currency(),
					'priceValidUntil' => date( 'Y-12-31', time() + YEAR_IN_SECONDS ),
					'url'             => $permalink,
					'seller'          => $seller,
				];

				// Set Price Specification.
				$this->set_price_specification( $variation['amount'], $offer );
				$entity['offers'][] = $offer;
			}

			return;
		}

		// Single offer.
		$entity['offers'] = [
			'@type'           => 'Offer',
			'price'           => $product->get_price() ? $product->get_price() : '0',
			'priceCurrency'   => edd_get_currency(),
			'priceValidUntil' => date( 'Y-12-31', time() + YEAR_IN_SECONDS ),
			'seller'          => $seller,
			'url'             => $permalink,
		];

		// Set Price Specification.
		$this->set_price_specification( $product->get_price(), $entity['offers'] );
	}

	/**
	 * Set price specification.
	 *
	 * @param object $price  Product price.
	 * @param array  $entity Array of offer entity.
	 */
	private function set_price_specification( $price, &$entity ) {
		if ( ! edd_use_taxes() ) {
			return;
		}

		$entity['priceSpecification'] = [
			'price'                 => $price ? $price : '0',
			'priceCurrency'         => edd_get_currency(),
			'valueAddedTaxIncluded' => edd_prices_include_tax() ? 'true' : 'false',
		];
	}

	/**
	 * If product is variable, set variations.
	 *
	 * @param  EDD_Download $product Current product.
	 *
	 * @return array|boolean
	 */
	private function has_variations( $product ) {
		if ( ! $product->has_variable_prices() ) {
			return false;
		}

		$variations = $product->get_prices();
		return ! empty( $variations ) ? $variations : false;
	}
}
PK     šŠU]h¢‘F•
  •
  2  includes/modules/schema/snippets/class-product.phpnu „[µü¤        <?php
/**
 * The Product Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Schema\Product_Edd;
use RankMath\Schema\Product_WooCommerce;

defined( 'ABSPATH' ) || exit;

/**
 * Product class.
 */
class Product implements Snippet {

	/**
	 * Hold JsonLD Instance.
	 *
	 * @var JsonLD
	 */
	private $json = '';

	/**
	 * Product rich snippet.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$entity = [
			'@type' => 'Product',
		];
		if ( Helper::is_woocommerce_active() && is_product() ) {
			remove_action( 'wp_footer', [ WC()->structured_data, 'output_structured_data' ], 10 );
			remove_action( 'woocommerce_email_order_details', [ WC()->structured_data, 'output_email_structured_data' ], 30 );
			Product_WooCommerce::get()->set_product( $entity, $jsonld );
		}

		if ( Helper::is_edd_active() && is_singular( 'download' ) ) {
			remove_filter( 'wp_footer', [ \EDD()->structured_data, 'output_structured_data' ] );
			remove_action( 'edd_purchase_link_top', 'edd_purchase_link_single_pricing_schema', 10 );
			remove_action( 'loop_start', 'edd_microdata_wrapper_open', 10 );
			$product = new Product_Edd();
			$product->set_product( $entity, $jsonld );
		}

		return $entity;
	}

	/**
	 * Get seller.
	 *
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public static function get_seller( $jsonld ) {
		$site_url = home_url();
		$type     = Helper::get_settings( 'titles.knowledgegraph_type' );
		$seller   = [
			'@type' => 'person' === $type ? 'Person' : 'Organization',
			'@id'   => trailingslashit( $site_url ),
			'name'  => $jsonld->get_website_name(),
			'url'   => $site_url,
		];

		if ( 'company' === $type ) {
			$seller['logo'] = Helper::get_settings( 'titles.knowledgegraph_logo' );
		}

		return $seller;
	}

	/**
	 * Set product categories.
	 *
	 * @param int    $product_id Product ID.
	 * @param string $taxonomy   Taxonomy.
	 */
	public static function get_category( $product_id, $taxonomy ) {
		$categories = get_the_terms( $product_id, $taxonomy );
		if ( is_wp_error( $categories ) || empty( $categories ) ) {
			return;
		}

		if ( 0 === $categories[0]->parent ) {
			return $categories[0]->name;
		}

		$ancestors = array_reverse( get_ancestors( $categories[0]->term_id, $taxonomy ) );
		foreach ( $ancestors as $parent ) {
			$term       = get_term( $parent, $taxonomy );
			$category[] = $term->name;
		}
		$category[] = $categories[0]->name;

		return join( ' > ', $category );
	}
}
PK     šŠU]6Ê3›º  º  6  includes/modules/schema/snippets/class-breadcrumbs.phpnu „[µü¤        <?php
/**
 * The Breadcrumbs Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Frontend\Breadcrumbs as BreadcrumbTrail;
use RankMath\Paper\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Breadcrumbs class.
 */
class Breadcrumbs implements Snippet {

	/**
	 * Generate breadcrumbs JSON-LD.
	 *
	 * @link https://schema.org/BreadcrumbList
	 *
	 * @param array  $data Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$crumbs = BreadcrumbTrail::get() ? BreadcrumbTrail::get()->get_crumbs() : false;
		if ( empty( $crumbs ) ) {
			return $data;
		}

		$entity = [
			'@type'           => 'BreadcrumbList',
			'@id'             => Paper::get()->get_canonical() . '#breadcrumb',
			'itemListElement' => [],
		];

		$position = 1;
		foreach ( $crumbs as $crumb ) {
			if ( ! empty( $crumb['hide_in_schema'] ) || empty( $crumb[1] ) ) {
				continue;
			}

			$entity['itemListElement'][] = [
				'@type'    => 'ListItem',
				'position' => $position,
				'item'     => [
					'@id'  => $crumb[1],
					'name' => $crumb[0],
				],
			];

			++$position;
		}

		$entity = apply_filters( 'rank_math/snippet/breadcrumb', $entity );
		if ( empty( $entity['itemListElement'] ) ) {
			return $data;
		}

		$data['BreadcrumbList'] = $entity;
		return $data;
	}
}
PK     šŠU]è«VùM  M  4  includes/modules/schema/snippets/class-publisher.phpnu „[µü¤        <?php
/**
 * The Publisher Class.
 *
 * @since      1.0.43
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Publisher class.
 */
class Publisher implements Snippet {

	/**
	 * Generate Organization JSON-LD.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$type              = Helper::get_settings( 'titles.knowledgegraph_type' );
		$id                = 'company' === $type ? 'organization' : 'person';
		$data['publisher'] = [
			'@type' => $this->get_publisher_type( $type ),
			'@id'   => home_url( "/#{$id}" ),
			'name'  => $jsonld->get_organization_name(),
		];

		$social_profiles = $jsonld->get_social_profiles();
		if ( ! empty( $social_profiles ) ) {
			$data['publisher']['sameAs'] = $social_profiles;
		}

		$jsonld->add_prop( 'image', $data['publisher'] );
		if ( empty( $data['publisher']['logo'] ) ) {
			return $data;
		}

		if ( 'person' === $type ) {
			$data['publisher']['image'] = $data['publisher']['logo'];
		}

		if ( ! is_singular() ) {
			unset( $data['publisher']['logo'] );
		}

		return $data;
	}

	/**
	 * Get Publisher Type.
	 *
	 * @param string $type Knowledgegraph type.
	 *
	 * @return string|array
	 */
	private function get_publisher_type( $type ) {
		if ( 'company' === $type ) {
			return 'Organization';
		}

		if ( ! is_singular() ) {
			return 'Person';
		}

		return [ 'Person', 'Organization' ];
	}
}
PK     šŠU]…¸­#  #  8  includes/modules/schema/snippets/class-wc-attributes.phpnu „[µü¤        <?php
/**
 * Helper class for handling WooComerce product attributes for rich snippets.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

defined( 'ABSPATH' ) || exit;

/**
 * WC_Attributes class.
 */
class WC_Attributes {

	/**
	 * Hold product attributes.
	 *
	 * @var array
	 */
	private $attributes;

	/**
	 * Hold product object.
	 *
	 * @var WC_Product
	 */
	private $product;

	/**
	 * The Constructor.
	 *
	 * @param WC_Product $product The Product.
	 */
	public function __construct( $product ) {
		$this->product    = $product;
		$this->attributes = $product->get_attributes();
	}

	/**
	 * Find attribute for property.
	 *
	 * @param array  $entity Entity to attach data to.
	 * @param string $needle Assign this property.
	 */
	public function assign_property( &$entity, $needle ) {
		foreach ( $this->attributes as $key => $attrib ) {
			if ( stristr( $key, $needle ) ) {
				$entity[ $needle ] = $this->product->get_attribute( $key );
				unset( $this->attributes[ $key ] );
				return;
			}
		}
	}

	/**
	 * Map remaining attributes as PropertyValue.
	 *
	 * @param array $entity Entity to attach data to.
	 */
	public function assign_remaining( &$entity ) {
		foreach ( $this->attributes as $key => $attrib ) {
			if ( $attrib['is_visible'] && ! $attrib['is_variation'] ) {
				$entity['additionalProperty'][] = [
					'@type' => 'PropertyValue',
					'name'  => $key,
					'value' => $this->product->get_attribute( $key ),
				];
			}
		}
	}
}
PK     šŠU]OÐ!pÙ  Ù  7  includes/modules/schema/snippets/class-primaryimage.phpnu „[µü¤        <?php
/**
 * The Primary Image Class.
 *
 * @since      1.0.43
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * PrimaryImage class.
 */
class PrimaryImage implements Snippet {

	/**
	 * Add primaryImage entity in JSON-LD data.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$image = Helper::get_thumbnail_with_fallback( get_the_ID(), 'full' );
		if ( empty( $image ) ) {
			return $data;
		}

		$data['primaryImage'] = [
			'@type'   => 'ImageObject',
			'@id'     => $image[0],
			'url'     => $image[0],
			'width'   => $image[1],
			'height'  => $image[2],
			'caption' => isset( $image['caption'] ) ? $image['caption'] : '',
		];

		$jsonld->add_prop( 'language', $data['primaryImage'] );

		return $data;
	}
}
PK     šŠU]= }Â    1  includes/modules/schema/snippets/class-author.phpnu „[µü¤        <?php
/**
 * The Author Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\User;
use RankMath\Paper\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Author class.
 */
class Author implements Snippet {

	/**
	 * Add Author entity in JSON-LD data.
	 *
	 * @link https://schema.org/Person
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$is_archive_disabled = Helper::get_settings( 'titles.disable_author_archives' );
		$author_id           = is_singular() ? $jsonld->post->post_author : get_the_author_meta( 'ID' );
		$author_name         = get_the_author();
		$author_url          = get_author_posts_url( $author_id );
		$data['ProfilePage'] = [
			'@type'       => 'Person',
			'@id'         => ! $is_archive_disabled ? $author_url : $jsonld->parts['url'] . '#author',
			'name'        => $author_name,
			'description' => wp_strip_all_tags( stripslashes( $this->get_description( $author_id ) ), true ),
			'url'         => $is_archive_disabled ? '' : $author_url,
		];

		$this->add_image( $data['ProfilePage'], $author_id, $jsonld );
		$this->add_same_as( $data['ProfilePage'], $author_id );
		$this->add_works_for( $data['ProfilePage'], $data );

		if ( is_author() && ! empty( $data['WebPage'] ) ) {
			$data['ProfilePage']['mainEntityOfPage'] = [
				'@id' => $data['WebPage']['@id'],
			];
		}

		return $data;
	}

	/**
	 * Add sameAs property to the Person entity.
	 *
	 * @param array $entity    Author schema data.
	 * @param int   $author_id Author ID.
	 */
	private function add_same_as( &$entity, $author_id ) {
		$same_as = [
			get_the_author_meta( 'user_url', $author_id ),
			get_user_meta( $author_id, 'facebook', true ),
		];

		if ( $twitter = get_user_meta( $author_id, 'twitter', true ) ) { // phpcs:ignore
			$same_as[] = 'https://twitter.com/' . $twitter;
		}

		$additional_urls = get_user_meta( $author_id, 'additional_profile_urls', true );
		if ( $additional_urls ) {
			$same_as = array_merge( $same_as, explode( ' ', $additional_urls ) );
		}

		$same_as = array_filter( $same_as );
		if ( empty( $same_as ) ) {
			return;
		}

		$entity['sameAs'] = array_values( $same_as );
	}

	/**
	 * Add image property to the Person entity.
	 *
	 * @param array  $entity    Author schema data.
	 * @param int    $author_id Author ID.
	 * @param JsonLD $jsonld    JsonLD Instance.
	 */
	private function add_image( &$entity, $author_id, $jsonld ) {
		$entity['image'] = [
			'@type'   => 'ImageObject',
			'@id'     => get_avatar_url( $author_id ),
			'url'     => get_avatar_url( $author_id ),
			'caption' => get_the_author(),
		];

		$jsonld->add_prop( 'language', $entity['image'] );
	}

	/**
	 * Add worksFor property referencing it to the publisher entity.
	 *
	 * @param array $entity Author schema data.
	 * @param array $data   Schema Data.
	 */
	private function add_works_for( &$entity, $data ) {
		if (
			empty( $data['publisher'] ) ||
			in_array( 'Person', (array) $data['publisher']['@type'], true )
		) {
			return;
		}

		$entity['worksFor'] = [ '@id' => $data['publisher']['@id'] ];
	}

	/**
	 * Get author description.
	 *
	 * @param int $author_id Author ID.
	 */
	private function get_description( $author_id ) {
		$description = User::get_meta( 'description', $author_id );
		return $description ? $description : Paper::get_from_options( 'author_archive_description' );
	}
}
PK     šŠU]pQóFÚ  Ú  2  includes/modules/schema/snippets/class-webpage.phpnu „[µü¤        <?php
/**
 * The Webpage Class.
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Paper\Paper;

defined( 'ABSPATH' ) || exit;

/**
 * Webpage class.
 */
class Webpage implements Snippet {

	/**
	 * Generate WebPage JSON-LD.
	 *
	 * @link https://schema.org/WebPage
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld JsonLD Instance.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld ) {
		$entity = [
			'@type' => $this->get_type(),
			'@id'   => Paper::get()->get_canonical() . '#webpage',
			'url'   => Paper::get()->get_canonical(),
			'name'  => Paper::get()->get_title(),
		];

		if ( is_singular() ) {
			$entity['datePublished'] = $jsonld->parts['published'];
			$entity['dateModified']  = $jsonld->parts['modified'];
		}

		if ( is_front_page() ) {
			$jsonld->add_prop( 'publisher', $entity, 'about', $data );
		}

		$jsonld->add_prop( 'is_part_of', $entity, 'website' );
		$jsonld->add_prop( 'thumbnail', $entity, 'primaryImageOfPage', $data );
		$jsonld->add_prop( 'language', $entity );

		if ( isset( $data['BreadcrumbList'] ) ) {
			$entity['breadcrumb'] = [ '@id' => $data['BreadcrumbList']['@id'] ];
		}

		$data['WebPage'] = $entity;

		return $data;
	}

	/**
	 * Get WebPage type depending on the current page.
	 *
	 * @return string
	 */
	private function get_type() {
		$about_page   = Helper::get_settings( 'titles.local_seo_about_page' );
		$contact_page = Helper::get_settings( 'titles.local_seo_contact_page' );
		$hash         = [
			'SearchResultsPage' => is_search(),
			'ProfilePage'       => is_author(),
			'CollectionPage'    => is_home() || is_archive(),
			'AboutPage'         => $about_page && is_page( $about_page ),
			'ContactPage'       => $contact_page && is_page( $contact_page ),
		];

		return ! empty( array_filter( $hash ) ) ? key( array_filter( $hash ) ) : 'WebPage';
	}
}
PK     šŠU]ŒÛ      !  includes/modules/schema/index.phpnu „[µü¤        <?php // Silence is golden.
PK     šŠU]]òýþ×  ×  1  includes/modules/schema/views/metabox-options.phpnu „[µü¤        <?php
/**
 * Metabox - Schema Tab
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

if ( ! Helper::has_cap( 'onpage_snippet' ) ) {
	return;
}

$cmb->add_field(
	[
		'id'         => 'rank_math_schema_generator',
		'type'       => 'raw',
		'content'    => '<div id="rank-math-schema-generator"></div>',
		'save_field' => false,
	]
);

$cmb->add_field(
	[
		'id'         => 'rank-math-schemas',
		'type'       => 'textarea',
		'classes'    => 'hidden',
		'save_field' => false,
	]
);

$cmb->add_field(
	[
		'id'         => 'rank-math-schemas-delete',
		'type'       => 'textarea',
		'default'    => '[]',
		'classes'    => 'hidden',
		'save_field' => false,
	]
);
PK     šŠU]”L>s=!  =!  *  includes/modules/schema/class-frontend.phpnu „[µü¤        <?php
/**
 * The frontend code of the Schema module.
 *
 * @since      1.4.3
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Frontend class.
 */
class Frontend {

	use Hooker;

	/**
	 * Hold post object.
	 *
	 * @var WP_Post
	 */
	public $post = null;

	/**
	 * Hold post ID.
	 *
	 * @var ID
	 */
	public $post_id = 0;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( Helper::is_divi_frontend_editor() ) {
			return;
		}
		$this->action( 'rank_math/json_ld', 'add_schema', 10, 2 );
		$this->action( 'rank_math/json_ld', 'connect_schema_entities', 99, 2 );
		$this->filter( 'rank_math/snippet/rich_snippet_event_entity', 'validate_event_schema', 11, 2 );
		$this->filter( 'rank_math/snippet/rich_snippet_article_entity', 'add_name_property', 11, 2 );
		$this->action( 'rank_math/schema/validated_data', 'remove_person_entity', 999 );

		new Opengraph();
	}

	/**
	 * Output schema data for a post.
	 *
	 * @param array  $data   Array of json-ld data.
	 * @param JsonLD $jsonld Instance of jsonld.
	 *
	 * @return array
	 */
	public function add_schema( $data, $jsonld ) {
		if ( ! is_singular() || post_password_required() ) {
			return $data;
		}

		global $post;
		$schemas = array_filter(
			DB::get_schemas( $post->ID ),
			function ( $schema ) {
				return ! in_array( $schema['@type'], [ 'WooCommerceProduct', 'EDDProduct' ], true );
			}
		);

		// Check & Unpublish the JobPosting post.
		DB::unpublish_jobposting_post( $jsonld, $schemas );

		$schemas = $jsonld->replace_variables( $schemas, [], $data );
		$schemas = $jsonld->filter( $schemas, $jsonld, $data );

		return array_merge( $data, $schemas );
	}

	/**
	 * Connect different schema entities using isPartOf & publisher properties.
	 *
	 * @param array  $schemas Array of json-ld data.
	 * @param JsonLD $jsonld  Instance of jsonld.
	 *
	 * @return array
	 */
	public function connect_schema_entities( $schemas, $jsonld ) {
		if ( empty( $schemas ) ) {
			return $schemas;
		}

		$jsonld->parts['canonical'] = ! empty( $jsonld->parts['canonical'] ) ? $jsonld->parts['canonical'] : \RankMath\Paper\Paper::get()->get_canonical();

		$schema_types = [];
		foreach ( $schemas as $id => $schema ) {
			if ( ( ! Str::starts_with( 'schema-', $id ) && 'richSnippet' !== $id ) || ! $schema ) {
				continue;
			}

			$schema_types[] = $schema['@type'];
			$this->connect_properties( $schema, $id, $jsonld, $schemas );
			$this->add_main_entity_of_page( $schema, $jsonld );
			$schemas[ $id ] = $schema;
		}

		return $this->change_webpage_entity( $schemas, $schema_types );
	}

	/**
	 * Add name property to the Article schema.
	 *
	 * @since 1.0.61
	 *
	 * @param  array $schema Snippet Data.
	 * @return array
	 */
	public function add_name_property( $schema ) {
		if ( empty( $schema['headline'] ) ) {
			return $schema;
		}

		$schema['name'] = $schema['headline'];
		if ( ! isset( $schema['articleSection'] ) ) {
			global $post;
			$schema['articleSection'] = Helper::replace_vars( '%primary_taxonomy_terms%', $post );
		}

		return $schema;
	}

	/**
	 * Add timezone to startDate field.
	 *
	 * @param array $schema Event schema Data.
	 * @return array
	 */
	public function validate_event_schema( $schema ) {
		if ( ! empty( $schema['startDate'] ) ) {
			$start_date          = date_i18n( 'Y-m-d H:i:sP', strtotime( $schema['startDate'] ) );
			$schema['startDate'] = str_replace( ' ', 'T', $start_date );
		}

		if ( ! empty( $schema['endDate'] ) ) {
			$end_date          = date_i18n( 'Y-m-d H:i:sP', strtotime( $schema['endDate'] ) );
			$schema['endDate'] = str_replace( ' ', 'T', $end_date );
		}

		return $schema;
	}

	/**
	 * Connect schema properties.
	 *
	 * @param array  $schema  Schema Entity.
	 * @param string $id      Schema Entity ID.
	 * @param JsonLD $jsonld  JsonLD Instance.
	 * @param array  $schemas Array of json-ld data.
	 */
	private function connect_properties( &$schema, $id, $jsonld, $schemas ) {
		if ( isset( $schema['isCustom'] ) ) {
			unset( $schema['isCustom'] );
			return;
		}

		// Remove empty ImageObject.
		if ( isset( $schema['image'] ) && empty( $schema['image']['url'] ) && ! is_array( $schema['image'] ) ) {
			unset( $schema['image'] );
		}

		$jsonld->parts['canonical'] = ! empty( $jsonld->parts['canonical'] ) ? $jsonld->parts['canonical'] : \RankMath\Paper\Paper::get()->get_canonical();
		$schema['@id']              = $jsonld->parts['canonical'] . '#' . $id;

		if ( empty( $schema['@type'] ) ) {
			return;
		}

		$types = array_map( 'strtolower', (array) $schema['@type'] );
		foreach ( $types as $type ) {
			$is_event = Str::contains( 'event', $type );
			// Add publisher entity @id in the organizer property of Event schema.
			if ( $is_event ) {
				$jsonld->add_prop( 'publisher', $schema, 'organizer', $schemas );
			}

			$props = [
				'is_part_of' => [
					'key'   => 'webpage',
					'value' => ! in_array( $type, [ 'jobposting', 'musicgroup', 'person', 'product', 'productgroup', 'restaurant', 'service' ], true ) && ! $is_event,
				],
				'publisher'  => [
					'key'   => 'publisher',
					'value' => ! in_array( $type, [ 'jobposting', 'musicgroup', 'person', 'product', 'productgroup', 'restaurant', 'service' ], true ) && ! $is_event,
				],
				'thumbnail'  => [
					'key'   => 'image',
					'value' => ! in_array( $type, [ 'videoobject' ], true ) || isset( $schema['image'] ),
				],
				'language'   => [
					'key'   => 'inLanguage',
					'value' => ! in_array( $type, [ 'person', 'service', 'restaurant', 'product', 'productgroup', 'musicgroup', 'musicalbum', 'jobposting' ], true ),
				],
			];

			if ( isset( $schema['image'] ) && in_array( $type, [ 'product', 'productgroup' ], true ) && is_array( $schema['image'] ) ) {
				$props['thumbnail']['value'] = false;
			}

			foreach ( $props as $prop => $data ) {
				if ( ! $data['value'] ) {
					continue;
				}

				$jsonld->add_prop( $prop, $schema, $data['key'], $schemas );
			}
		}
	}

	/**
	 * Add mainEntityOfPage property to Primary schema entity.
	 *
	 * @param array  $schema Schema Entity.
	 * @param JsonLD $jsonld JsonLD Instance.
	 */
	private function add_main_entity_of_page( &$schema, $jsonld ) {
		if ( ! isset( $schema['isPrimary'] ) ) {
			return;
		}

		if ( ! empty( $schema['isPrimary'] ) ) {
			$schema['mainEntityOfPage'] = [ '@id' => $jsonld->parts['canonical'] . '#webpage' ];
		}

		unset( $schema['isPrimary'] );
	}

	/**
	 * Remove Person entity if it is not referenced in any other entities.
	 *
	 * @param array $data Array of json-ld data.
	 *
	 * @return array
	 */
	public function remove_person_entity( $data ) {
		if ( empty( $data['ProfilePage'] ) || empty( $data['ProfilePage']['@id'] ) || ! is_singular() ) {
			return $data;
		}

		if ( function_exists( 'bp_is_user' ) && bp_is_user() ) {
			return $data;
		}

		$temp_data = $data;
		$id        = $temp_data['ProfilePage']['@id'];
		$ids       = [];

		unset( $temp_data['ProfilePage'] );
		array_walk_recursive(
			$temp_data,
			function ( $value, $key ) use ( &$ids, $id ) {
				if ( '@id' === $key && $value === $id ) {
					$ids[] = $value;
				}
			}
		);

		if ( empty( $ids ) ) {
			unset( $data['ProfilePage'] );
		}

		return $data;
	}

	/**
	 * Change WebPage entity type depending on the schemas on the page.
	 *
	 * @param array $schemas Schema data.
	 * @param array $types   Schema types.
	 *
	 * @return array
	 */
	private function change_webpage_entity( $schemas, $types ) {
		if ( in_array( 'Product', $types, true ) ) {
			$schemas['WebPage']['@type'] = 'ItemPage';
		}

		if ( isset( $schemas['howto'] ) && ! empty( $schemas['WebPage'] ) ) {
			$schemas['howto']['mainEntityOfPage'] = [ '@id' => $schemas['WebPage']['@id'] ];
		}

		$faq_data = array_map(
			function ( $schema ) {
				return isset( $schema['@type'] ) && 'FAQPage' === $schema['@type'];
			},
			$schemas
		);

		$faq_key = is_array( $faq_data ) && ! empty( $faq_data ) ? key( array_filter( $faq_data ) ) : '';
		if ( ! $faq_key ) {
			return $schemas;
		}

		if ( in_array( $faq_key, array_keys( $schemas ), true ) ) {
			$schemas['WebPage']['@type'] =
				! empty( $types )
				? array_merge( (array) $schemas['WebPage']['@type'], [ 'FAQPage' ] )
				: 'FAQPage';

			$schemas['WebPage']['mainEntity'] = $schemas[ $faq_key ]['mainEntity'];

			unset( $schemas[ $faq_key ] );
		}

		return $schemas;
	}
}
PK     šŠU]>Yy÷    (  includes/modules/schema/class-schema.phpnu „[µü¤        <?php
/**
 * The Schema Module
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Schema class.
 */
class Schema {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		if ( is_admin() ) {
			new Admin();
		}
		$this->action( 'wp', 'integrations' );
		$this->filter( 'rank_math/elementor/dark_styles', 'add_dark_style' );

		new Blocks();
		new Snippet_Shortcode();
	}

	/**
	 * Add dark style
	 *
	 * @param array $styles The dark mode styles.
	 */
	public function add_dark_style( $styles = [] ) {
		$styles['rank-math-schema-dark'] = rank_math()->plugin_url() . 'includes/modules/schema/assets/css/schema-dark.css';

		return $styles;
	}

	/**
	 * Initialize integrations.
	 */
	public function integrations() {
		$type = get_query_var( 'sitemap' );
		if ( ! empty( $type ) ) {
			return;
		}

		( new JsonLD() )->setup();
	}
}
PK     šŠU]R;/Ý  Ý  -  includes/modules/schema/interface-snippet.phpnu „[µü¤        <?php
/**
 * The Schema Interface
 *
 * @since      1.0.13
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

defined( 'ABSPATH' ) || exit;

/**
 * Schema interface.
 */
interface Snippet {

	/**
	 * Process schema data
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld Instance of JsonLD.
	 *
	 * @return array
	 */
	public function process( $data, $jsonld );
}
PK     šŠU]ÌÆ--  -  .  includes/modules/schema/blocks/class-admin.phpnu „[µü¤        <?php
/**
 * The Block Admin
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema\Blocks;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Block Admin class.
 */
class Admin {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->filter( 'rank_math/settings/general', 'add_general_settings' );
	}

	/**
	 * Add block settings into general optional panel.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_general_settings( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'blocks' => [
					'icon'  => 'rm-icon rm-icon-stories',
					'title' => esc_html__( 'Blocks', 'seo-by-rank-math' ),
					'desc'  => esc_html__( 'Take control over the default settings available for Rank Math Blocks.', 'seo-by-rank-math' ),
					'file'  => __DIR__ . '/views/options-general.php',
				],
			],
			7
		);

		return $tabs;
	}
}
PK     šŠU](ö³½  ½  8  includes/modules/schema/blocks/views/options-general.phpnu „[µü¤        <?php
/**
 * Blocks general settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'toc_block_title',
		'type'    => 'text',
		'name'    => esc_html__( 'Table of Contents Title', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enter the default title to use for the Table of Contents block.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
		'default' => esc_html__( 'Table of Contents', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'      => 'toc_block_list_style',
		'type'    => 'select',
		'name'    => esc_html__( 'Table of Contents List style', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Select the default list style for the Table of Contents block.', 'seo-by-rank-math' ),
		'options' => [
			'div' => esc_html__( 'None', 'seo-by-rank-math' ),
			'ol'  => esc_html__( 'Numbered', 'seo-by-rank-math' ),
			'ul'  => esc_html__( 'Unordered', 'seo-by-rank-math' ),
		],
		'default' => 'ul',
	]
);

$cmb->add_field(
	[
		'id'      => 'toc_block_exclude_headings',
		'name'    => esc_html__( 'Table of Contents Exclude Headings', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Choose the headings to exclude from the Table of Contents block.', 'seo-by-rank-math' ),
		'type'    => 'multicheck',
		'options' => [
			'h1' => esc_html__( 'Heading H1', 'seo-by-rank-math' ),
			'h2' => esc_html__( 'Heading H2', 'seo-by-rank-math' ),
			'h3' => esc_html__( 'Heading H3', 'seo-by-rank-math' ),
			'h4' => esc_html__( 'Heading H4', 'seo-by-rank-math' ),
			'h5' => esc_html__( 'Heading H5', 'seo-by-rank-math' ),
			'h6' => esc_html__( 'Heading H6', 'seo-by-rank-math' ),
		],
	]
);
PK     šŠU]H‘º1A  A  /  includes/modules/schema/blocks/howto/block.jsonnu „[µü¤        {
	"apiVersion": 3,
	"title": "HowTo by Rank Math",
	"description": "Easily add Schema-ready, SEO-friendly, HowTo block to your content.",
	"name": "rank-math/howto-block",
	"category": "rank-math-blocks",
	"icon": "editor-ol",
	"textdomain": "seo-by-rank-math",
 	"keywords": [ "HowTo", "Schema", "SEO", "Structured Data", "Yoast", "Rank Math", "Block", "Markup", "Rich Snippet" ],
	"editorScript": [
		"lodash",
		"file:./assets/js/index.js"
	],
	"editorStyle": [
		"rank-math-block-admin",
		"file:./assets/css/howto.css"
	],
	"attributes": {
		"hasDuration": {
			"type": "boolean",
			"default": false
		},
		"days": {
			"type": "string",
			"default": ""
		},
		"hours": {
			"type": "string",
			"default": ""
		},
		"minutes": {
			"type": "string",
			"default": ""
		},
		"description": {
			"type": "string",
			"default": ""
		},
		"steps": {
			"type": "array",
			"default": [],
			"items": {
				"type": "object"
			}
		},
		"sizeSlug": {
			"type": "string",
			"default": "full"
		},
		"imageID": {
			"type": "integer"
		},
		"mainSizeSlug": {
			"type": "string",
			"default": "full"
		},
		"listStyle": {
			"type": "string",
			"default": ""
		},
		"timeLabel": {
			"type": "string",
			"default": ""
		},
		"titleWrapper": {
			"type": "string",
			"default": "h3"
		},
		"listCssClasses": {
			"type": "string",
			"default": ""
		},
		"titleCssClasses": {
			"type": "string",
			"default": ""
		},
		"contentCssClasses": {
			"type": "string",
			"default": ""
		},
		"textAlign": {
			"type": "string",
			"default": "left"
		}
	},
	"supports": {
		"multiple": false
	}
}
PK     šŠU]\jžµ  µ  ;  includes/modules/schema/blocks/howto/assets/scss/howto.scssnu „[µü¤        // Common and Vendors
@import '../../../../../../../assets/vendor/bourbon/bourbon';
@import '../../../../../../../assets/admin/scss/mixins';
@import '../../../../../../../assets/admin/scss/variables';

// HowTo Block.
#rank-math-howto {
    .rank-math-media-placeholder {
        position: relative;

        display: inline-block;
        float: none;

        margin-bottom: 15px;
        margin-left: 0;

        text-align: left;
    }

    .components-base-control {
        &__label {
            font-weight: 600;
        }

        &__field {
            margin-bottom: 0;
        }

        &__help {
            font-style: italic;

            margin: 0;
        }
    }

    .components-text-control__input,
    .components-textarea-control__input {
        font-size: 1rem;

        margin-bottom: 0;

        color: #3a3a3a;
        border-color: $gray;
    }

    .rank-math-howto {
        &-duration {
            &-label {
                // Toggle Control.
                .components-toggle-control {
                    display: inline-block;

                    margin-left: 8px;
                }
            }

            &-fields {
                margin-top: 10px;

                .components-base-control {
                    display: inline-block;

                    width: 75px;
                    margin-right: 5px;

                    + .components-base-control {
                        margin-bottom: 0!important;
                    }

                    > .components-base-control__field {
                        margin: 0;
                    }

                    &:first-child {
                        width: auto;
                    }

                    &.hidden {
                        display: none;
                    }
                }
            }

            &-instructions {
                font-size: 13px;
                font-style: italic;

                margin: 10px 0 5px;

                opacity: .7;
            }
        }

        &-estimated-cost {
            display: flex;

            flex-flow: row wrap;

            > div:last-child {
                margin-left: 10px;

                align-self: flex-end;
            }
        }
    }
}
PK     šŠU]g.Oú  ú  >  includes/modules/schema/blocks/howto/assets/js/index.asset.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is required to dynamically load the necessary block dependencies.
/**
 * Block script dependencies.
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

return [
	'dependencies' => [
		'wp-blocks',
		'wp-block-editor',
		'wp-components',
		'wp-data',
		'wp-element',
		'wp-hooks',
		'wp-i18n',
		'lodash',
	],
	'version'      => rank_math()->version,
];
PK     šŠU]¼€s\ýC  ýC  7  includes/modules/schema/blocks/howto/assets/js/index.jsnu „[µü¤        !function(){var e={942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=wp.blocks,t=lodash,r=wp.i18n,o=wp.element,a=wp.hooks,i=wp.components,l=wp.blockEditor;var s=n(942),c=n.n(s);const u=wp.data;function m(e,n){var r=(0,u.select)("core").getMedia,o=e?r(e):null;return null===o?null:n?function(e,n){var r=(0,t.get)(e,["media_details","sizes",n,"source_url"]);return r||(0,t.get)(e,["media_details","sizes","full","source_url"])}(o,n):o}const p=(0,u.withSelect)(function(e,t){var n=t.imageID,r=t.sizeSlug;return{imageUrl:n?m(n,r):null}})(function(e){var t=e.imageUrl;return t?wp.element.createElement("img",{src:t,alt:""}):null});const f=function(e){var t=e.imageID,n=e.sizeSlug,o=e.open,a=e.removeImage,l=e.addButtonLabel,s=void 0===l?(0,r.__)("Add Image","seo-by-rank-math"):l,c=e.addImageRef;return wp.element.createElement("div",{className:"rank-math-media-placeholder"},t>0&&wp.element.createElement(p,{imageID:t,sizeSlug:n}),t>0?wp.element.createElement(i.Button,{ref:c,icon:"edit",className:"rank-math-replace-image",onClick:o}):wp.element.createElement(i.Button,{ref:c,onClick:o,className:"rank-math-add-image",isPrimary:!0},s),t>0&&wp.element.createElement(i.Button,{icon:"no-alt",className:"rank-math-delete-image",onClick:a}))};function b(e){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b(e)}function h(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,S(r.key),r)}}function v(e,t,n){return t=_(t),function(e,t){if(t&&("object"==b(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,g()?Reflect.construct(t,n||[],_(e).constructor):t.apply(e,n))}function g(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(g=function(){return!!e})()}function _(e){return _=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},_(e)}function w(e,t){return w=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},w(e,t)}function k(e,t,n){return(t=S(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){var t=function(e,t){if("object"!=b(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=b(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==b(t)?t:t+""}var C=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return k(e=v(this,t,[].concat(r)),"toggleVisibility",function(){var t=e.props,n=t.setAttributes,r=t.index,o=h(e.props.steps);o[r].visible=!e.props.visible,n({steps:o})}),k(e,"deleteStep",function(){var t=e.props,n=t.setAttributes,r=t.index,o=h(e.props.steps);o.splice(r,1),n({steps:o})}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&w(e,t)}(t,e),n=t,(o=[{key:"render",value:function(){var e=this,t=this.props,n=t.title,o=t.content,s=t.visible,u=t.imageID,m=t.sizeSlug,p=t.titleWrapper,b=t.titleCssClasses,h=t.contentCssClasses,y=c()("rank-math-step-wrapper",{"step-not-visible":!s});return wp.element.createElement("div",{className:y},wp.element.createElement("div",{className:"rank-math-item-header"},wp.element.createElement(l.RichText,{tagName:p,className:"rank-math-howto-step-title rank-math-block-title"+b,value:n,onChange:function(t){e.setStepProp("title",t)},placeholder:(0,r.__)("Enter a step title","seo-by-rank-math")}),wp.element.createElement("div",{className:"rank-math-block-actions"},(0,a.applyFilters)("rank_math_block_howto_actions","",this.props),wp.element.createElement(i.Button,{className:"rank-math-item-visbility",icon:s?"visibility":"hidden",onClick:this.toggleVisibility,title:(0,r.__)("Hide Step","seo-by-rank-math")}),wp.element.createElement(i.Button,{icon:"trash",className:"rank-math-item-delete",onClick:this.deleteStep,title:(0,r.__)("Delete Step","seo-by-rank-math")}))),wp.element.createElement(l.MediaUpload,{allowedTypes:["image"],multiple:!1,value:u,render:function(t){var n=t.open;return wp.element.createElement(f,{imageID:u,sizeSlug:m,open:n,addButtonLabel:(0,r.__)("Add Step Image","seo-by-rank-math"),removeImage:function(){e.setStepProp("imageID",0)}})},onSelect:function(t){e.setStepProp("imageID",t.id)}}),wp.element.createElement(l.RichText,{tagName:"div",className:"rank-math-howto-step-content"+h,value:o,onChange:function(t){e.setStepProp("content",t)},placeholder:(0,r.__)("Enter a step description","seo-by-rank-math")}))}},{key:"setStepProp",value:function(e,t){var n=this.props,r=n.setAttributes,o=n.index,a=h(this.props.steps);a[o][e]=t,r({steps:a})}}])&&d(n.prototype,o),s&&d(n,s),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o,s}(o.Component);const E=C;function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?O(Object(n),!0).forEach(function(t){j(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function j(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=x(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=x(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==x(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const D=(0,u.withSelect)(function(e,t){var n=(0,e("core/block-editor").getSettings)().imageSizes;return N(N({},t),{},{imageSizes:n})})(function(e){var n=e.imageSizes,o=e.attributes,a=e.setAttributes,s=function(e){return(0,t.map)(e,function(e){var t=e.name;return{value:e.slug,label:t}})}(n);return wp.element.createElement(l.InspectorControls,{key:"inspector"},wp.element.createElement(i.PanelBody,{title:(0,r.__)("HowTo Options","seo-by-rank-math")},wp.element.createElement(i.SelectControl,{label:(0,r.__)("List Style","seo-by-rank-math"),value:o.listStyle,options:[{value:"",label:(0,r.__)("None","seo-by-rank-math")},{value:"numbered",label:(0,r.__)("Numbered","seo-by-rank-math")},{value:"unordered",label:(0,r.__)("Unordered","seo-by-rank-math")}],onChange:function(e){a({listStyle:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.SelectControl,{label:(0,r.__)("Title Wrapper","seo-by-rank-math"),value:o.titleWrapper,options:[{value:"h2",label:(0,r.__)("H2","seo-by-rank-math")},{value:"h3",label:(0,r.__)("H3","seo-by-rank-math")},{value:"h4",label:(0,r.__)("H4","seo-by-rank-math")},{value:"h5",label:(0,r.__)("H5","seo-by-rank-math")},{value:"h6",label:(0,r.__)("H6","seo-by-rank-math")},{value:"p",label:(0,r.__)("P","seo-by-rank-math")},{value:"div",label:(0,r.__)("DIV","seo-by-rank-math")}],onChange:function(e){a({titleWrapper:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.SelectControl,{label:(0,r.__)("Main Image Size","seo-by-rank-math"),value:o.mainSizeSlug,options:s,onChange:function(e){a({mainSizeSlug:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.SelectControl,{label:(0,r.__)("Image Size","seo-by-rank-math"),value:o.sizeSlug,options:s,onChange:function(e){a({sizeSlug:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement(i.PanelBody,{title:(0,r.__)("Styling Options","seo-by-rank-math")},wp.element.createElement(i.TextControl,{label:(0,r.__)("Step Title Wrapper CSS Class(es)","seo-by-rank-math"),value:o.titleCssClasses,onChange:function(e){a({titleCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.TextControl,{label:(0,r.__)("Step Content Wrapper CSS Class(es)","seo-by-rank-math"),value:o.contentCssClasses,onChange:function(e){a({contentCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.TextControl,{label:(0,r.__)("Step List CSS Class(es)","seo-by-rank-math"),value:o.listCssClasses,onChange:function(e){a({listCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})))}),P=function(e){return"".concat(e,"-").concat((new Date).getTime())};function A(){return A=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},A.apply(null,arguments)}function z(e){return function(e){if(Array.isArray(e))return B(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return B(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(P);const T=function(e){var n=e.className,s=e.isSelected,c=e.attributes,u=e.setAttributes,m=c.imageID,p=c.mainSizeSlug,b=c.textAlign,h=(0,l.useBlockProps)();return wp.element.createElement("div",h,wp.element.createElement("div",{id:"rank-math-howto",className:"rank-math-block "+n},s&&wp.element.createElement(D,e),s&&wp.element.createElement(o.Fragment,null,wp.element.createElement(l.BlockControls,null,wp.element.createElement(l.AlignmentToolbar,{value:b,onChange:function(t){return e.setAttributes({textAlign:t})}}))),wp.element.createElement(l.MediaUpload,{allowedTypes:["image"],multiple:!1,value:m,render:function(t){var n=t.open;return wp.element.createElement("div",{className:"rank-math-howto-final-image"},wp.element.createElement(f,{imageID:m,sizeSlug:p,open:n,addButtonLabel:(0,r.__)("Add Final Image","seo-by-rank-math"),removeImage:function(){!function(e){(0,e.setAttributes)({imageID:0})}(e)}}))},onSelect:function(t){!function(e,t){(0,t.setAttributes)({imageID:e.id})}(t,e)}}),wp.element.createElement(l.RichText,{style:{textAlign:b},tagName:"div",className:"rank-math-howto-description",value:c.description,onChange:function(e){u({description:e})},placeholder:(0,r.__)("Enter a main description","seo-by-rank-math")}),wp.element.createElement("div",{className:"rank-math-howto-duration"},wp.element.createElement("div",{className:"components-base-control rank-math-howto-duration-label"},wp.element.createElement("span",null,(0,r.__)("Duration","seo-by-rank-math")),wp.element.createElement(i.ToggleControl,{checked:c.hasDuration,onChange:function(){!function(e){e.setAttributes({hasDuration:!e.attributes.hasDuration})}(e)},__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"rank-math-howto-duration-fields"+(c.hasDuration?"":" hidden")},wp.element.createElement(i.TextControl,{value:c.timeLabel,placeholder:(0,r.__)("Total time:","seo-by-rank-math"),onChange:function(e){u({timeLabel:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.TextControl,{type:"number",value:c.days,placeholder:(0,r.__)("DD","seo-by-rank-math"),onChange:function(e){u({days:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.TextControl,{type:"number",value:c.hours,placeholder:(0,r.__)("HH","seo-by-rank-math"),onChange:function(e){u({hours:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(i.TextControl,{type:"number",value:c.minutes,placeholder:(0,r.__)("MM","seo-by-rank-math"),onChange:function(e){u({minutes:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"rank-math-howto-duration-instructions"+(c.hasDuration?"":" hidden")},(0,r.__)("Optional, use first field to describe the duration.","seo-by-rank-math"))),(0,a.applyFilters)("rank_math_block_howto_data","",e),wp.element.createElement("ul",{style:{textAlign:b}},function(e){var n=e.attributes,r=n.steps,o=n.sizeSlug,a=n.titleWrapper,i=n.titleCssClasses,l=n.contentCssClasses;return(0,t.isEmpty)(r)?null:r.map(function(t,n){return wp.element.createElement("li",{key:t.id},wp.element.createElement(E,A({},t,{index:n,key:t.id+"-step",steps:r,setAttributes:e.setAttributes,sizeSlug:o,titleWrapper:a,titleCssClasses:i,contentCssClasses:l})))})}(e)),wp.element.createElement(i.Button,{variant:"primary",onClick:function(){!function(e){var n=e.attributes.steps,r=(0,t.isEmpty)(n)?[]:z(n);r.push({id:P("howto-step"),title:"",content:"",visible:!0}),e.setAttributes({steps:r})}(e)}},(0,r.__)("Add New Step","seo-by-rank-math")),wp.element.createElement("a",{href:"http://rankmath.com/blog/howto-schema/",title:(0,r.__)("More Info","seo-by-rank-math"),target:"_blank",rel:"noopener noreferrer",className:"rank-math-block-info"},wp.element.createElement(i.Dashicon,{icon:"info"}))))};n.dn(T);const I=function(e){var n=e.attributes,r=n.steps,o=n.titleWrapper;return(0,t.isEmpty)(r)?null:wp.element.createElement("div",l.useBlockProps.save(),r.map(function(e,t){return!1===e.visible?null:wp.element.createElement("div",{className:"rank-math-howto-step",key:t},e.title&&wp.element.createElement(l.RichText.Content,{tagName:o,value:e.title,className:"rank-math-howto-title"}),e.content&&wp.element.createElement(l.RichText.Content,{tagName:"div",value:e.content,className:"rank-math-howto-content"}))}))};n.dn(I);const M={from:[{type:"block",blocks:["yoast/how-to-block"],transform:function(t){var n={steps:t.steps.map(function(e){return{visible:!0,id:P("howto-step"),title:e.jsonName,content:e.jsonText}}),titleWrapper:"h3",hasDuration:t.hasDuration,days:t.days,hours:t.hours,minutes:t.minutes,description:t.jsonDescription,className:t.className,listStyle:t.unorderedList?"unordered":""};return(0,e.createBlock)("rank-math/howto-block",n)}}]};(0,e.registerBlockType)("rank-math/howto-block",{example:{attributes:{steps:[{visible:!0,titleWrapper:"div",title:"Step # 1",content:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."}]}},edit:T,save:I,transforms:M})}()}();PK     šŠU]	ÓB0X  X  G  includes/modules/schema/blocks/howto/assets/src/components/inspector.jsnu „[µü¤        /**
 * External dependencies
 */
import { map } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { withSelect } from '@wordpress/data'
import { InspectorControls } from '@wordpress/block-editor'
import { PanelBody, SelectControl, TextControl } from '@wordpress/components'

/**
 * Format array of image sizes.
 *
 * @param  {Array} imageSizes Array of image sizes.
 * @return {Array} Formatted array.
 */
const getImageSizeOptions = ( imageSizes ) => {
	return map( imageSizes, ( { name, slug } ) => ( {
		value: slug,
		label: name,
	} ) )
}

/**
 * Adds controls to the editor sidebar to control params.
 *
 * @param {Object} props This component's props.
 */
const Inspector = ( { imageSizes, attributes, setAttributes } ) => {
	const imageSizeOptions = getImageSizeOptions( imageSizes )

	return (
		<InspectorControls key={ 'inspector' }>
			<PanelBody title={ __( 'HowTo Options', 'seo-by-rank-math' ) }>
				<SelectControl
					label={ __( 'List Style', 'seo-by-rank-math' ) }
					value={ attributes.listStyle }
					options={ [
						{
							value: '',
							label: __( 'None', 'seo-by-rank-math' ),
						},
						{
							value: 'numbered',
							label: __( 'Numbered', 'seo-by-rank-math' ),
						},
						{
							value: 'unordered',
							label: __( 'Unordered', 'seo-by-rank-math' ),
						},
					] }
					onChange={ ( listStyle ) => {
						setAttributes( { listStyle } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<SelectControl
					label={ __( 'Title Wrapper', 'seo-by-rank-math' ) }
					value={ attributes.titleWrapper }
					options={ [
						{ value: 'h2', label: __( 'H2', 'seo-by-rank-math' ) },
						{ value: 'h3', label: __( 'H3', 'seo-by-rank-math' ) },
						{ value: 'h4', label: __( 'H4', 'seo-by-rank-math' ) },
						{ value: 'h5', label: __( 'H5', 'seo-by-rank-math' ) },
						{ value: 'h6', label: __( 'H6', 'seo-by-rank-math' ) },
						{ value: 'p', label: __( 'P', 'seo-by-rank-math' ) },
						{ value: 'div', label: __( 'DIV', 'seo-by-rank-math' ) },
					] }
					onChange={ ( titleWrapper ) => {
						setAttributes( { titleWrapper } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<SelectControl
					label={ __( 'Main Image Size', 'seo-by-rank-math' ) }
					value={ attributes.mainSizeSlug }
					options={ imageSizeOptions }
					onChange={ ( mainSizeSlug ) => {
						setAttributes( { mainSizeSlug } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<SelectControl
					label={ __( 'Image Size', 'seo-by-rank-math' ) }
					value={ attributes.sizeSlug }
					options={ imageSizeOptions }
					onChange={ ( sizeSlug ) => {
						setAttributes( { sizeSlug } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			</PanelBody>

			<PanelBody title={ __( 'Styling Options', 'seo-by-rank-math' ) }>
				<TextControl
					label={ __(
						'Step Title Wrapper CSS Class(es)',
						'seo-by-rank-math'
					) }
					value={ attributes.titleCssClasses }
					onChange={ ( titleCssClasses ) => {
						setAttributes( { titleCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<TextControl
					label={ __(
						'Step Content Wrapper CSS Class(es)',
						'seo-by-rank-math'
					) }
					value={ attributes.contentCssClasses }
					onChange={ ( contentCssClasses ) => {
						setAttributes( { contentCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<TextControl
					label={ __( 'Step List CSS Class(es)', 'seo-by-rank-math' ) }
					value={ attributes.listCssClasses }
					onChange={ ( listCssClasses ) => {
						setAttributes( { listCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			</PanelBody>
		</InspectorControls>
	)
}

export default withSelect( ( select, props ) => {
	const { getSettings } = select( 'core/block-editor' )
	const { imageSizes } = getSettings()

	return {
		...props,
		imageSizes,
	}
} )( Inspector )
PK     šŠU]c´'7}  }  B  includes/modules/schema/blocks/howto/assets/src/components/Step.jsnu „[µü¤        /**
 * External dependencies
 */
import classnames from 'classnames'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Component } from '@wordpress/element'
import { Button } from '@wordpress/components'
import { RichText, MediaUpload } from '@wordpress/block-editor'

/**
 * Internal dependencies
 */
import MediaUploader from '@blocks/shared/MediaUploader'
import { applyFilters } from "@wordpress/hooks";

/**
 * A Step within HowTo block.
 */
class Step extends Component {
	/**
	 * Renders the component.
	 *
	 * @return {Component} Step editor.
	 */
	render() {
		const {
			title,
			content,
			visible,
			imageID,
			sizeSlug,
			titleWrapper,
			titleCssClasses,
			contentCssClasses,
		} = this.props
		const wrapperClasses = classnames( 'rank-math-step-wrapper', {
			'step-not-visible': ! visible,
		} )

		return (
			<div className={ wrapperClasses }>
				<div className="rank-math-item-header">
					<RichText
						tagName={ titleWrapper }
						className={
							'rank-math-howto-step-title rank-math-block-title' +
							titleCssClasses
						}
						value={ title }
						onChange={ ( newTitle ) => {
							this.setStepProp( 'title', newTitle )
						} }
						placeholder={ __( 'Enter a step title', 'seo-by-rank-math' ) }
					/>

					<div className="rank-math-block-actions">
						{ applyFilters( 'rank_math_block_howto_actions', '', this.props ) }

						<Button
							className="rank-math-item-visbility"
							icon={ visible ? 'visibility' : 'hidden' }
							onClick={ this.toggleVisibility }
							title={ __( 'Hide Step', 'seo-by-rank-math' ) }
						/>

						<Button
							icon="trash"
							className="rank-math-item-delete"
							onClick={ this.deleteStep }
							title={ __( 'Delete Step', 'seo-by-rank-math' ) }
						/>
					</div>
				</div>

				<MediaUpload
					allowedTypes={ [ 'image' ] }
					multiple={ false }
					value={ imageID }
					render={ ( { open } ) => (
						<MediaUploader
							imageID={ imageID }
							sizeSlug={ sizeSlug }
							open={ open }
							addButtonLabel={ __(
								'Add Step Image',
								'seo-by-rank-math'
							) }
							removeImage={ () => {
								this.setStepProp( 'imageID', 0 )
							} }
						/>
					) }
					onSelect={ ( image ) => {
						this.setStepProp( 'imageID', image.id )
					} }
				/>

				<RichText
					tagName="div"
					className={
						'rank-math-howto-step-content' + contentCssClasses
					}
					value={ content }
					onChange={ ( newContent ) => {
						this.setStepProp( 'content', newContent )
					} }
					placeholder={ __(
						'Enter a step description',
						'seo-by-rank-math'
					) }
				/>
			</div>
		)
	}

	/**
	 * Update step properties.
	 *
	 * @param {string} prop  Poperty name.
	 * @param {string} value Property value.
	 */
	setStepProp( prop, value ) {
		const { setAttributes, index } = this.props
		const steps = [ ...this.props.steps ]
		steps[ index ][ prop ] = value

		setAttributes( { steps } )
	}

	/**
	 * Toggle step visibility.
	 */
	toggleVisibility = () => {
		const { setAttributes, index } = this.props
		const steps = [ ...this.props.steps ]
		steps[ index ].visible = ! this.props.visible

		setAttributes( { steps } )
	}

	/**
	 * Delete step from block.
	 */
	deleteStep = () => {
		const { setAttributes, index } = this.props
		const steps = [ ...this.props.steps ]
		steps.splice( index, 1 )

		setAttributes( { steps } )
	}
}

export default Step
PK     šŠU]>møâÚ  Ú  7  includes/modules/schema/blocks/howto/assets/src/save.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty } from 'lodash'

/**
 * WordPress dependencies
 */
import { RichText, useBlockProps } from '@wordpress/block-editor'

/**
 * Save block for display on front
 *
 * @param {Object} props This component's props.
 */
export default ( props ) => {
	const { steps, titleWrapper } = props.attributes

	if ( isEmpty( steps ) ) {
		return null
	}

	return (
		<div { ...useBlockProps.save() }>
			{ steps.map( ( step, index ) => {
				if ( false === step.visible ) {
					return null
				}

				return (
					<div className="rank-math-howto-step" key={ index }>
						{ step.title && (
							<RichText.Content
								tagName={ titleWrapper }
								value={ step.title }
								className="rank-math-howto-title"
							/>
						) }

						{ step.content && (
							<RichText.Content
								tagName="div"
								value={ step.content }
								className="rank-math-howto-content"
							/>
						) }
					</div>
				)
			} ) }
		</div>
	)
}
PK     šŠU]JË`ìœ  œ  =  includes/modules/schema/blocks/howto/assets/src/transforms.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { createBlock } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import generateId from '@helpers/generateId'

/**
 * Transform yoast howto block.
 *
 * @type {Array}
 */
export default {
	from: [
		{
			type: 'block',
			blocks: [ 'yoast/how-to-block' ],
			transform: ( yoast ) => {
				const steps = yoast.steps.map( ( step ) => {
					return {
						visible: true,
						id: generateId( 'howto-step' ),
						title: step.jsonName,
						content: step.jsonText,
					}
				} )

				const attributes = {
					steps,
					titleWrapper: 'h3',
					hasDuration: yoast.hasDuration,
					days: yoast.days,
					hours: yoast.hours,
					minutes: yoast.minutes,
					description: yoast.jsonDescription,
					className: yoast.className,
					listStyle: yoast.unorderedList ? 'unordered' : '',
				}

				return createBlock( 'rank-math/howto-block', attributes )
			},
		},
	],
}
PK     šŠU]o<í¶  ¶  7  includes/modules/schema/blocks/howto/assets/src/edit.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Fragment } from '@wordpress/element'
import { applyFilters } from '@wordpress/hooks'
import {
	Button,
	Dashicon,
	TextControl,
	ToggleControl,
} from '@wordpress/components'
import {
	BlockControls,
	AlignmentToolbar,
	RichText,
	MediaUpload,
	useBlockProps,
} from '@wordpress/block-editor'

/**
 * Internal dependencies
 */
import Step from './components/Step'
import Inspector from './components/inspector'
import generateId from '@helpers/generateId'
import MediaUploader from '@blocks/shared/MediaUploader'

/**
 * Add an empty Step into block.
 *
 * @param {Object} props Block props.
 */
const addNew = ( props ) => {
	const { steps } = props.attributes
	const newSteps = isEmpty( steps ) ? [] : [ ...steps ]
	newSteps.push( {
		id: generateId( 'howto-step' ),
		title: '',
		content: '',
		visible: true,
	} )

	props.setAttributes( { steps: newSteps } )
}

/**
 * Toggle duration form visibility.
 *
 * @param {Object} props Block props
 */
const toggleDuration = ( props ) => {
	props.setAttributes( {
		hasDuration: ! props.attributes.hasDuration,
	} )
}

/**
 * When an image selected.
 *
 * @param {Object} image Seelected image object.
 * @param {Object} props Block props.
 */
const onSelectImage = ( image, props ) => {
	const { setAttributes } = props

	setAttributes( { imageID: image.id } )
}

/**
 * Remove image from step.
 *
 * @param {Object} props Block props.
 */
const removeImage = ( props ) => {
	const { setAttributes } = props

	setAttributes( { imageID: 0 } )
}

/**
 * Render Steps component.
 *
 * @param {Object} props Block props.
 * @return {Array} Array of step editor.
 */
const renderSteps = ( props ) => {
	const {
		steps,
		sizeSlug,
		titleWrapper,
		titleCssClasses,
		contentCssClasses,
	} = props.attributes
	if ( isEmpty( steps ) ) {
		return null
	}

	return steps.map( ( step, index ) => {
		return (
			<li key={ step.id }>
				<Step
					{ ...step }
					index={ index }
					key={ step.id + '-step' }
					steps={ steps }
					setAttributes={ props.setAttributes }
					sizeSlug={ sizeSlug }
					titleWrapper={ titleWrapper }
					titleCssClasses={ titleCssClasses }
					contentCssClasses={ contentCssClasses }
				/>
			</li>
		)
	} )
}

/**
 * HowTo block edit component.
 *
 * @param {Object} props Block props.
 */
export default ( props ) => {
	const { className, isSelected, attributes, setAttributes } = props
	const { imageID, mainSizeSlug, textAlign } = attributes
	const blockProps = useBlockProps()

	return (
		<div { ...blockProps }>
			<div
				id="rank-math-howto"
				className={ 'rank-math-block ' + className }
			>
				{ isSelected && <Inspector { ...props } /> }
				{ isSelected && (
					<Fragment>
						<BlockControls>
							<AlignmentToolbar
								value={ textAlign }
								onChange={ ( nextTextAlignment ) =>
									props.setAttributes( {
										textAlign: nextTextAlignment,
									} )
								}
							/>
						</BlockControls>
					</Fragment>
				) }

				<MediaUpload
					allowedTypes={ [ 'image' ] }
					multiple={ false }
					value={ imageID }
					render={ ( { open } ) => (
						<div className="rank-math-howto-final-image">
							<MediaUploader
								imageID={ imageID }
								sizeSlug={ mainSizeSlug }
								open={ open }
								addButtonLabel={ __(
									'Add Final Image',
									'seo-by-rank-math'
								) }
								removeImage={ () => {
									removeImage( props )
								} }
							/>
						</div>
					) }
					onSelect={ ( image ) => {
						onSelectImage( image, props )
					} }
				/>

				<RichText
					style={ { textAlign } }
					tagName="div"
					className="rank-math-howto-description"
					value={ attributes.description }
					onChange={ ( description ) => {
						setAttributes( { description } )
					} }
					placeholder={ __(
						'Enter a main description',
						'seo-by-rank-math'
					) }
				/>

				<div className={ 'rank-math-howto-duration' }>
					<div
						className={
							'components-base-control rank-math-howto-duration-label'
						}
					>
						<span>{ __( 'Duration', 'seo-by-rank-math' ) }</span>

						<ToggleControl
							checked={ attributes.hasDuration }
							onChange={ () => {
								toggleDuration( props )
							} }
							__nextHasNoMarginBottom={ true }
						/>
					</div>

					<div
						className={
							'rank-math-howto-duration-fields' +
							( attributes.hasDuration ? '' : ' hidden' )
						}
					>
						<TextControl
							value={ attributes.timeLabel }
							placeholder={ __( 'Total time:', 'seo-by-rank-math' ) }
							onChange={ ( timeLabel ) => {
								setAttributes( { timeLabel } )
							} }
							__next40pxDefaultSize={ true }
							__nextHasNoMarginBottom={ true }
						/>

						<TextControl
							type="number"
							value={ attributes.days }
							placeholder={ __( 'DD', 'seo-by-rank-math' ) }
							onChange={ ( days ) => {
								setAttributes( { days } )
							} }
							__next40pxDefaultSize={ true }
							__nextHasNoMarginBottom={ true }
						/>

						<TextControl
							type="number"
							value={ attributes.hours }
							placeholder={ __( 'HH', 'seo-by-rank-math' ) }
							onChange={ ( hours ) => {
								setAttributes( { hours } )
							} }
							__next40pxDefaultSize={ true }
							__nextHasNoMarginBottom={ true }
						/>

						<TextControl
							type="number"
							value={ attributes.minutes }
							placeholder={ __( 'MM', 'seo-by-rank-math' ) }
							onChange={ ( minutes ) => {
								setAttributes( { minutes } )
							} }
							__next40pxDefaultSize={ true }
							__nextHasNoMarginBottom={ true }
						/>
					</div>

					<div
						className={
							'rank-math-howto-duration-instructions' +
							( attributes.hasDuration ? '' : ' hidden' )
						}
					>
						{ __(
							'Optional, use first field to describe the duration.',
							'seo-by-rank-math'
						) }
					</div>
				</div>

				{ applyFilters( 'rank_math_block_howto_data', '', props ) }

				<ul style={ { textAlign } }>{ renderSteps( props ) }</ul>

				<Button
					variant="primary"
					onClick={ () => {
						addNew( props )
					} }
				>
					{ __( 'Add New Step', 'seo-by-rank-math' ) }
				</Button>

				<a
					href="http://rankmath.com/blog/howto-schema/"
					title={ __( 'More Info', 'seo-by-rank-math' ) }
					target="_blank"
					rel="noopener noreferrer"
					className={ 'rank-math-block-info' }
				>
					<Dashicon icon="info" />
				</a>
			</div>
		</div>
	)
}
PK     šŠU]ša‰t  t  8  includes/modules/schema/blocks/howto/assets/src/index.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { registerBlockType } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import example from './example'
import edit from './edit'
import save from './save'
import transforms from './transforms'

/**
 * Register HowTo block.
 */
registerBlockType(
	'rank-math/howto-block',
	{
		example,
		edit,
		save,
		transforms,
	}
)
PK     šŠU]•ÝMš^  ^  :  includes/modules/schema/blocks/howto/assets/src/example.jsnu „[µü¤        /**
 * HowTo eample for in block preview pane.
 *
 * @type {Object}
 */
export default {
	attributes: {
		steps: [
			{
				visible: true,
				titleWrapper: 'div',
				title: 'Step # 1',
				content:
					'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
			},
		],
	},
}
PK     šŠU]¥�}Õ    9  includes/modules/schema/blocks/howto/assets/css/howto.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}#rank-math-howto .rank-math-media-placeholder{position:relative;display:inline-block;float:none;margin-bottom:15px;margin-left:0;text-align:left}#rank-math-howto .components-base-control__label{font-weight:600}#rank-math-howto .components-base-control__field{margin-bottom:0}#rank-math-howto .components-base-control__help{font-style:italic;margin:0}#rank-math-howto .components-text-control__input,#rank-math-howto .components-textarea-control__input{font-size:1rem;margin-bottom:0;color:#3a3a3a;border-color:#b5bfc9}#rank-math-howto .rank-math-howto-duration-label .components-toggle-control{display:inline-block;margin-left:8px}#rank-math-howto .rank-math-howto-duration-fields{margin-top:10px}#rank-math-howto .rank-math-howto-duration-fields .components-base-control{display:inline-block;width:75px;margin-right:5px}#rank-math-howto .rank-math-howto-duration-fields .components-base-control+.components-base-control{margin-bottom:0 !important}#rank-math-howto .rank-math-howto-duration-fields .components-base-control>.components-base-control__field{margin:0}#rank-math-howto .rank-math-howto-duration-fields .components-base-control:first-child{width:auto}#rank-math-howto .rank-math-howto-duration-fields .components-base-control.hidden{display:none}#rank-math-howto .rank-math-howto-duration-instructions{font-size:13px;font-style:italic;margin:10px 0 5px;opacity:.7}#rank-math-howto .rank-math-howto-estimated-cost{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}#rank-math-howto .rank-math-howto-estimated-cost>div:last-child{margin-left:10px;-ms-flex-item-align:end;align-self:flex-end}PK     šŠU]¿¢Ž¡/  ¡/  :  includes/modules/schema/blocks/howto/class-block-howto.phpnu „[µü¤        <?php
/**
 * The HowTo Block
 *
 * @since      1.0.233
 * @package    RankMath
 * @subpackage RankMath\HowTo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use WP_Block_Type_Registry;
use RankMath\Traits\Hooker;
use RankMath\Paper\Paper;
use RankMath\Helpers\Attachment;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * HowTo Block class.
 */
class Block_HowTo extends Block {

	use Hooker;

	/**
	 * Block type name.
	 *
	 * @var string
	 */
	private $block_type = 'rank-math/howto-block';

	/**
	 * The single instance of the class.
	 *
	 * @var Block_HowTo
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_HowTo instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Block_HowTo
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Block_HowTo ) ) {
			self::$instance = new Block_HowTo();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( WP_Block_Type_Registry::get_instance()->is_registered( $this->block_type ) ) {
			return;
		}

		register_block_type(
			RANK_MATH_PATH . 'includes/modules/schema/blocks/howto/block.json',
			[
				'render_callback' => [ $this, 'render' ],
			]
		);

		add_filter( 'rank_math/schema/block/howto-block', [ $this, 'add_graph' ], 10, 2 );
	}

	/**
	 * Add HowTO schema data in JSON-LD array..
	 *
	 * @param array $data  Array of JSON-LD data.
	 * @param array $block JsonLD Instance.
	 *
	 * @return array
	 */
	public function add_graph( $data, $block ) {
		// Early bail.
		if ( ! $this->has_steps( $block['attrs'] ) ) {
			return $data;
		}

		$attrs = $block['attrs'];

		if ( ! isset( $data['howto'] ) ) {
			$data['howto'] = [
				'@type'       => 'HowTo',
				'name'        => Paper::get()->get_title(),
				'description' => isset( $attrs['description'] ) ? $this->clean_text( do_shortcode( $attrs['description'] ) ) : '',
				'totalTime'   => '',
				'step'        => [],
			];
		}

		$this->add_step_image( $data['howto'], $attrs );
		$this->add_duration( $data['howto'], $attrs );
		$permalink = get_permalink() . '#';

		foreach ( $attrs['steps'] as $index => $step ) {
			if ( empty( $step['visible'] ) ) {
				continue;
			}

			$schema_step = $this->add_step( $step, $permalink . $step['id'] );
			if ( $schema_step ) {
				$data['howto']['step'][] = $schema_step;
			}
		}

		return $data;
	}

	/**
	 * Render block content.
	 *
	 * @param array $attributes Array of attributes.
	 * @return string
	 */
	public static function markup( $attributes = [] ) {
		$list_style          = isset( $attributes['listStyle'] ) ? esc_attr( $attributes['listStyle'] ) : '';
		$list_css_classes    = isset( $attributes['listCssClasses'] ) ? esc_attr( $attributes['listCssClasses'] ) : '';
		$title_wrapper       = isset( $attributes['titleWrapper'] ) ? esc_attr( $attributes['titleWrapper'] ) : 'h3';
		$title_css_classes   = isset( $attributes['titleCssClasses'] ) ? esc_attr( $attributes['titleCssClasses'] ) : '';
		$content_css_classes = isset( $attributes['contentCssClasses'] ) ? esc_attr( $attributes['contentCssClasses'] ) : '';
		$size_slug           = isset( $attributes['sizeSlug'] ) ? esc_attr( $attributes['sizeSlug'] ) : '';

		$list_tag = self::get()->get_list_style( $list_style );
		$item_tag = self::get()->get_list_item_style( $list_style );
		$class    = 'rank-math-block';
		if ( ! empty( $attributes['className'] ) ) {
			$class .= ' ' . esc_attr( $attributes['className'] );
		}

		// HTML.
		$out   = [];
		$out[] = sprintf( '<div id="rank-math-howto" class="%1$s" %2$s>', esc_attr( $class ), self::get()->get_styles( $attributes ) );

		// HeaderContent.
		$out[] = '<div class="rank-math-howto-description">';

		if ( ! empty( $attributes['imageUrl'] ) ) {
			$out[] = '<img src="' . esc_url( $attributes['imageUrl'] ) . '" />';
		} elseif ( ! empty( $attributes['mainSizeSlug'] ) ) {
			$out[] = self::get()->get_image( $attributes, $attributes['mainSizeSlug'], '' );
		}

		if ( ! empty( $attributes['description'] ) ) {
			$out[] = self::get()->normalize_text( $attributes['description'], 'howto' );
		}

		$out[] = '</div>';

		$out[] = self::get()->build_duration( $attributes );

		$out[] = sprintf( '<%1$s class="rank-math-steps %2$s">', $list_tag, $list_css_classes );

		// Steps.
		foreach ( $attributes['steps'] as $index => $step ) {
			if ( empty( $step['visible'] ) ) {
				continue;
			}

			$step_id = isset( $step['id'] ) ? esc_attr( $step['id'] ) : '';

			$out[] = sprintf( '<%1$s id="%2$s" class="rank-math-step">', $item_tag, $step_id );

			if ( ! empty( $step['title'] ) ) {
				$out[] = sprintf(
					'<%1$s class="rank-math-step-title %2$s">%3$s</%1$s>',
					self::get()->get_title_wrapper( $title_wrapper, 'howto' ),
					$title_css_classes,
					wp_kses_post( $step['title'] )
				);
			}

			$step_content = ! empty( $step['content'] ) ? self::get()->normalize_text( $step['content'], 'howto' ) : '';
			$step_image   = ! empty( $step['imageUrl'] ) ? '<img src="' . esc_url( $step['imageUrl'] ) . '" />' : self::get()->get_image( $step, $size_slug, '' );

			$out[] = sprintf(
				'<div class="rank-math-step-content %1$s">%3$s%2$s</div>',
				$content_css_classes,
				$step_content,
				$step_image
			);

			$out[] = sprintf( '</%1$s>', $item_tag );
		}

		$out[] = sprintf( '</%1$s>', $list_tag );
		$out[] = '</div>';

		return apply_filters(
			'rank_math/schema/block/howto/content',
			wp_kses_post( join( "\n", $out ) ),
			$out,
			$attributes
		);
	}

	/**
	 * Render block content.
	 *
	 * @param array $attributes Array of attributes.
	 *
	 * @return string
	 */
	public function render( $attributes ) {
		// Early bail.
		if ( ! $this->has_steps( $attributes ) ) {
			return '';
		}

		return self::markup( $attributes );
	}

	/**
	 * Add Step
	 *
	 * @param array  $step Step.
	 * @param string $permalink Permalink.
	 */
	private function add_step( $step, $permalink ) {
		$name = wp_strip_all_tags( do_shortcode( $step['title'] ) );
		$text = $this->clean_text( do_shortcode( $step['content'] ) );

		if ( empty( $name ) && empty( $text ) ) {
			return false;
		}

		$schema_step = [
			'@type' => 'HowToStep',
			'url'   => '' . esc_url( $permalink ),
		];

		if ( empty( $name ) ) {
			$schema_step['text'] = '';

			if ( empty( $text ) && empty( $schema_step['image'] ) ) {
				return false;
			}

			if ( ! empty( $text ) ) {
				$schema_step['text'] = $text;
			}
		} elseif ( empty( $text ) ) {
			$schema_step['text'] = $name;
		} else {
			$schema_step['name'] = $name;
			if ( ! empty( $text ) ) {
				$schema_step['itemListElement'] = [
					[
						'@type' => 'HowToDirection',
						'text'  => $text,
					],
				];
			}
		}

		if ( false === $this->add_step_image( $schema_step, $step ) ) {
			$this->add_step_image_from_content( $schema_step, $step );
		}

		return $schema_step;
	}

	/**
	 * Checks if we have an inline image and add it.
	 *
	 * @param array $schema_step Our Schema output for the Step.
	 * @param array $step        The step block data.
	 */
	private function add_step_image_from_content( &$schema_step, $step ) {
		// Early Bail.
		if ( empty( $step['content'] ) || ! Str::contains( '<img', $step['content'] ) ) {
			return;
		}

		// Search for image.
		preg_match_all( '/<img.+?src=[\'"]([^\'"]+)[\'"].*?>/i', $step['content'], $matches );

		if ( ! isset( $matches[1][0] ) || empty( $matches[1][0] ) ) {
			return;
		}

		$schema_image = [
			'@type' => 'ImageObject',
			'url'   => esc_url( $matches[1][0] ),
		];

		$image_id = Attachment::get_by_url( $schema_image['url'] );

		if ( $image_id > 0 ) {
			$this->add_caption( $schema_image, $image_id );
			$this->add_image_size( $schema_image, $image_id );
		}

		$schema_step['image'] = $schema_image;
	}

	/**
	 * Checks if we have a step image and add it.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @param array $schema_step Our Schema output for the Step.
	 * @param array $step        The step block data.
	 */
	private function add_step_image( &$schema_step, $step ) {
		if ( empty( $step['imageID'] ) ) {
			return false;
		}

		$image_id = absint( $step['imageID'] );
		if ( ! ( $image_id > 0 ) ) {
			return false;
		}

		$image_url = wp_get_attachment_image_url( $image_id, 'full' );
		if ( ! $image_url ) {
			return false;
		}

		$schema_image = [
			'@type' => 'ImageObject',
			'url'   => esc_url( $image_url ),
		];

		$this->add_caption( $schema_image, $image_id );
		$this->add_image_size( $schema_image, $image_id );

		$schema_step['image'] = $schema_image;

		return true;
	}

	/**
	 * Add caption to schema.
	 *
	 * @param array $schema_image Our Schema output for the Image.
	 * @param int   $image_id     The image ID.
	 */
	private function add_caption( &$schema_image, $image_id ) {
		$caption = wp_get_attachment_caption( $image_id );
		if ( ! empty( $caption ) ) {
			$schema_image['caption'] = esc_html( $caption );
			return;
		}

		$caption = Attachment::get_alt_tag( $image_id );
		if ( ! empty( $caption ) ) {
			$schema_image['caption'] = esc_html( $caption );
		}
	}

	/**
	 * Add image size to schema.
	 *
	 * @param array $schema_image Our Schema output for the Image.
	 * @param int   $image_id     The image ID.
	 */
	private function add_image_size( &$schema_image, $image_id ) {
		$image_meta = wp_get_attachment_metadata( $image_id );
		if ( empty( $image_meta['width'] ) || empty( $image_meta['height'] ) ) {
			return;
		}

		$schema_image['width']  = absint( $image_meta['width'] );
		$schema_image['height'] = absint( $image_meta['height'] );
	}

	/**
	 * Add duration to schema.
	 *
	 * @param array $data  Our Schema output.
	 * @param array $attrs The block attributes.
	 */
	private function add_duration( &$data, $attrs ) {
		if ( ! empty( $attrs['hasDuration'] ) ) {
			$days    = absint( $attrs['days'] ?? 0 );
			$hours   = absint( $attrs['hours'] ?? 0 );
			$minutes = absint( $attrs['minutes'] ?? 0 );
			if ( ( $days + $hours + $minutes ) > 0 ) {
				$data['totalTime'] = esc_attr( 'P' . $days . 'DT' . $hours . 'H' . $minutes . 'M' );
			}
		}
	}

	/**
	 * Generate HowTo duration property.
	 *
	 * @param array $attrs The block attributes.
	 *
	 * @return string
	 */
	private function build_duration( $attrs ) {
		if ( empty( $attrs['hasDuration'] ) ) {
			return '';
		}

		$days    = isset( $attrs['days'] ) ? absint( $attrs['days'] ) : 0;
		$hours   = isset( $attrs['hours'] ) ? absint( $attrs['hours'] ) : 0;
		$minutes = isset( $attrs['minutes'] ) ? absint( $attrs['minutes'] ) : 0;

		$elements = [];
		if ( $days > 0 ) {
			/* translators: %d is the number of days. */
			$elements[] = sprintf( _n( '%d day', '%d days', $days, 'seo-by-rank-math' ), $days );
		}

		if ( $hours > 0 ) {
			/* translators: %d is the number of hours. */
			$elements[] = sprintf( _n( '%d hour', '%d hours', $hours, 'seo-by-rank-math' ), $hours );
		}

		if ( $minutes > 0 ) {
			/* translators: %d is the number of minutes. */
			$elements[] = sprintf( _n( '%d minute', '%d minutes', $minutes, 'seo-by-rank-math' ), $minutes );
		}

		$count   = count( $elements );
		$formats = [
			1 => '%1$s',
			/* translators: placeholders are units of time, e.g. '1 hour and 30 minutes' */
			2 => __( '%1$s and %2$s', 'seo-by-rank-math' ),
			/* translators: placeholders are units of time, e.g. '1 day, 8 hours and 30 minutes' */
			3 => __( '%1$s, %2$s and %3$s', 'seo-by-rank-math' ),
		];

		return sprintf(
			'<p class="rank-math-howto-duration"><strong>%2$s</strong> <span>%1$s</span></p>',
			isset( $formats[ $count ] ) ? vsprintf( $formats[ $count ], $elements ) : '',
			empty( $attrs['timeLabel'] ) ? __( 'Total Time:', 'seo-by-rank-math' ) : esc_html( $attrs['timeLabel'] )
		);
	}

	/**
	 * Function to check the HowTo block have steps data.
	 *
	 * @param array $attributes Array of attributes.
	 *
	 * @return boolean
	 */
	private function has_steps( $attributes ) {
		return ! isset( $attributes['steps'] ) || empty( $attributes['steps'] ) ? false : true;
	}
}
PK     šŠU]¯FÛÌ%  %  0  includes/modules/schema/blocks/schema/block.jsonnu „[µü¤        {
	"apiVersion": 3,
	"title": "Schema by Rank Math",
	"description": "Add the Schema generated by Rank Math anywhere on your page using this Block.",
	"name": "rank-math/rich-snippet",
	"category": "rank-math-blocks",
	"icon": "editor-ul",
	"textdomain": "seo-by-rank-math",
	"keywords": [ "Schema", "Markup", "Structured Data", "Rich Snippet", "SEO", "Rank Math", "Yoast" ],
	"editorScript": "file:./assets/js/index.js",
	"editorStyle": "file:./assets/css/schema.css",
	"attributes": {
		"post_id": {
			"type": "string",
			"default": ""
		}
	}
}
PK     šŠU],BLq	  q	  =  includes/modules/schema/blocks/schema/assets/scss/schema.scssnu „[µü¤        // compileCompressed: ../css/$1.css

/*!
* Plugin:  Rank Math
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
* Name:  rank-math-review-snippet.css
*/

// Common and Vendors
@import '../../../../../../../assets/vendor/bourbon/bourbon';
@import '../../../../../../../assets/admin/scss/mixins';
@import '../../../../../../../assets/admin/scss/variables';

/**
* Styling for Rank Math [rank_math_review_snippet] shortcode
*/
#rank-math-rich-snippet-wrapper {
	overflow: hidden;

	h5.rank-math-title {
		display: block;
		font-size: 18px;
		line-height: 1.4;
	}

	.rank-math-review-image {
		float: right;
		max-width: 40%;
		margin-left: 15px;
	}

	.rank-math-review-data {
		margin-bottom: 15px;
	}

	.rank-math-total-wrapper {
		width: 100%;
		padding: 0 0 20px 0;
		float: left;
		clear: both;
		position: relative;
		box-sizing: border-box;

		.rank-math-total {
			border: 0;
			display: block;
			margin: 0;
			width: auto;
			float: left;
			text-align: left;
			padding: 0;
			font-size: 24px;
			line-height: 1;
			font-weight: 700;
			box-sizing: border-box;
			overflow: hidden;
		}

		.rank-math-review-star {
			float: left;
			margin-left: 15px;
			margin-top: 5px;
			position: relative;
			z-index: 99;
			line-height: 1;

			.rank-math-review-result-wrapper {
				display: inline-block;
				white-space: nowrap;
				position: relative;
				color: #e7e7e7;

				.rank-math-review-result {
					position: absolute;
					top: 0;
					left: 0;
					overflow: hidden;
					white-space: nowrap;
					color:#ffbe01;
				}

				i {
					font-size: 18px;
					-webkit-text-stroke-width: 1px;
					font-style: normal;
					padding: 0 2px;
					line-height: inherit;

					&:before {
						content: "\2605";
					}
				}
			}
		}
	}
}

body.rtl {
	#rank-math-rich-snippet-wrapper {
		.rank-math-review-image {
			float: left;
			margin-left: 0;
			margin-right: 15px;
		}

		.rank-math-total-wrapper {
			.rank-math-total {
				float: right;
			}

			.rank-math-review-star {
				float: right;
				margin-left: 0;
				margin-right: 15px;

				.rank-math-review-result {
					left: auto;
					right: 0;
				}
			}
		}
	}
}

@media screen and (max-width: 480px) {
	#rank-math-rich-snippet-wrapper {
		.rank-math-review-image {
			display: block;
			max-width: 100%;
			width: 100%;
			text-align: center;
			margin-right: 0;
		}

		.rank-math-review-data {
			clear: both;
		}
	}
}

.clear {
	clear: both;
}
PK     šŠU]ØÉ(ç    ?  includes/modules/schema/blocks/schema/assets/js/index.asset.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is required to dynamically load the necessary block dependencies.
/**
 * Block script dependencies.
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

return [
	'dependencies' => [
		'wp-api-fetch',
		'wp-blocks',
		'wp-block-editor',
		'wp-components',
		'wp-compose',
		'wp-data',
		'wp-element',
		'wp-hooks',
		'wp-i18n',
		'wp-url',
	],
	'version'      => rank_math()->version,
];
PK     šŠU]|h¨X$  $  8  includes/modules/schema/blocks/schema/assets/js/index.jsnu „[µü¤        !function(){"use strict";var e={252:function(e){e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,s;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!==o--;)if(!e(t[o],r[o]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],r.get(o[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if((n=t.length)!=r.length)return!1;for(o=n;0!==o--;)if(t[o]!==r[o])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(s=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!==o--;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=n;0!==o--;){var a=s[o];if(!e(t[a],r[a]))return!1}return!0}return t!=t&&r!=r}},20:function(e,t,r){var n=r(594),o=Symbol.for("react.element"),s=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,u=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,s={},c=null,l=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(l=t.ref),t)a.call(t,n)&&!i.hasOwnProperty(n)&&(s[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===s[n]&&(s[n]=t[n]);return{$$typeof:o,type:e,key:c,ref:l,props:s,_owner:u.current}}t.jsx=c,t.jsxs=c},848:function(e,t,r){e.exports=r(20)},594:function(e){e.exports=React}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})};const n=lodash,o=wp.blocks,s=wp.i18n,a=wp.blockEditor,u=wp.components,i=wp.element,c=wp.data;var l=r(252),f=r.n(l);const p=wp.compose,d=wp.apiFetch;var y=r.n(d);const h=wp.url;var m=r(848);const b={};function _({className:e}){return(0,m.jsx)(u.Placeholder,{className:e,children:(0,s.__)("Block rendered as empty.")})}function g({response:e,className:t}){const r=(0,s.sprintf)((0,s.__)("Error loading block: %s"),e.errorMsg);return(0,m.jsx)(u.Placeholder,{className:t,children:r})}function v({children:e,showLoader:t}){return(0,m.jsxs)("div",{style:{position:"relative"},children:[t&&(0,m.jsx)("div",{style:{position:"absolute",top:"50%",left:"50%",marginTop:"-9px",marginLeft:"-9px"},children:(0,m.jsx)(u.Spinner,{})}),(0,m.jsx)("div",{style:{opacity:t?"0.3":1},children:e})]})}function x(e){const{className:t,EmptyResponsePlaceholder:r=_,ErrorResponsePlaceholder:n=g,LoadingResponsePlaceholder:s=v}=e,a=(0,i.useRef)(!1),[u,c]=(0,i.useState)(!1),l=(0,i.useRef)(),[d,x]=(0,i.useState)(null),w=(0,p.usePrevious)(e),[k,j]=(0,i.useState)(!1),O=(0,i.useRef)(e);(0,i.useLayoutEffect)(()=>{O.current=e},[e]);const S=(0,i.useCallback)(()=>{var e,t;if(!a.current)return;const{attributes:r,block:n,skipBlockSupportAttributes:s=!1,httpMethod:u="GET",urlQueryArgs:i}=O.current;j(!0);const f=setTimeout(()=>{c(!0)},1e3);let p=r&&(0,o.__experimentalSanitizeBlockAttributes)(n,r);s&&(p=function(e){const{backgroundColor:t,borderColor:r,fontFamily:n,fontSize:o,gradient:s,textColor:a,className:u,...i}=e,{border:c,color:l,elements:f,spacing:p,typography:d,...y}=e?.style||b;return{...i,style:y}}(p));const d="POST"===u,m=function(e,t=null,r={}){return(0,h.addQueryArgs)(`/wp/v2/block-renderer/${e}`,{context:"edit",...null!==t?{attributes:t}:{},...r})}(n,d?null:null!==(e=p)&&void 0!==e?e:null,i),_=d?{attributes:null!==(t=p)&&void 0!==t?t:null}:null,g=l.current=y()({path:m,data:_,method:d?"POST":"GET"}).then(e=>{a.current&&g===l.current&&e&&x(e.rendered)}).catch(e=>{a.current&&g===l.current&&x({error:!0,errorMsg:e.message})}).finally(()=>{a.current&&g===l.current&&(j(!1),c(!1),clearTimeout(f))});return g},[]),E=(0,p.useDebounce)(S,500);(0,i.useEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]),(0,i.useEffect)(()=>{void 0===w?S():f()(w,e)||E()});const P=!!d,R=""===d,T=!!d?.error;return k?(0,m.jsx)(s,{...e,showLoader:u,children:P&&!T&&(0,m.jsx)(i.RawHTML,{className:t,children:d})}):R||!P?(0,m.jsx)(r,{...e}):T?(0,m.jsx)(n,{response:d,...e}):(0,m.jsx)(i.RawHTML,{className:t,children:d})}const w={},k=(0,c.withSelect)(e=>{const t=e("core/editor");if(t){const e=t.getCurrentPostId();if(e&&"number"==typeof e)return{currentPostId:e}}return w})(({urlQueryArgs:e=w,currentPostId:t,...r})=>{const n=(0,i.useMemo)(()=>t?{post_id:t,...e}:e,[t,e]);return(0,m.jsx)(x,{urlQueryArgs:n,...r})}),j=function(e){var t=e.attributes,r=e.setAttributes,o=(0,a.useBlockProps)(),i=[];return t.post_id||(t.post_id=rankMath.objectID,r({post_id:rankMath.objectID})),(0,n.forEach)(t,function(e,o){"post_id"!==o?"className"!==o&&i.push(wp.element.createElement(u.TextControl,{key:o,label:(0,s.__)((0,n.startCase)(o),"seo-by-rank-math"),value:t[o],type:"string",onChange:function(e){var t={};t[o]=e,r(t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})):i.push(wp.element.createElement(u.TextControl,{key:o,label:(0,s.__)((0,n.startCase)(o),"seo-by-rank-math"),value:t[o],type:"number",min:1,step:1,onChange:function(e){var t={};t[o]=e||rankMath.objectID,r(t)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))}),wp.element.createElement("div",o,wp.element.createElement(a.InspectorControls,null,wp.element.createElement(u.PanelBody,{title:(0,s.__)("Settings","seo-by-rank-math")},i)),wp.element.createElement(k,{block:"rank-math/rich-snippet",attributes:t}))};r.dn(j),(0,o.registerBlockType)("rank-math/rich-snippet",{edit:j})}();PK     šŠU]U_}"  "  8  includes/modules/schema/blocks/schema/assets/src/edit.jsnu „[µü¤        /**
 * External dependencies
 */
import { startCase, forEach } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useBlockProps, InspectorControls } from '@wordpress/block-editor'
import { TextControl, PanelBody } from '@wordpress/components'
import ServerSideRender from '@wordpress/server-side-render'

export default ( {
	attributes,
	setAttributes,
} ) => {
	const blockProps = useBlockProps()
	const controllers = []

	if ( ! attributes.post_id ) {
		attributes.post_id = rankMath.objectID
		setAttributes( { post_id: rankMath.objectID } )
	}
	forEach( attributes, ( attribute, slug ) => {
		if ( 'post_id' === slug ) {
			controllers.push(
				<TextControl
					key={ slug }
					label={ __( startCase( slug ), 'seo-by-rank-math' ) }
					value={ attributes[ slug ] }
					type="number"
					min={ 1 }
					step={ 1 }
					onChange={ ( newID ) => {
						const attrs = {}
						attrs[ slug ] = newID ? newID : rankMath.objectID
						setAttributes( attrs )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			)
			return
		}

		if ( 'className' !== slug ) {
			controllers.push(
				<TextControl
					key={ slug }
					label={ __( startCase( slug ), 'seo-by-rank-math' ) }
					value={ attributes[ slug ] }
					type="string"
					onChange={ ( nextID ) => {
						const attrs = {}
						attrs[ slug ] = nextID
						setAttributes( attrs )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			)
		}
	} )

	return (
		<div { ...blockProps }>
			<InspectorControls>
				<PanelBody title={ __( 'Settings', 'seo-by-rank-math' ) }>
					{ controllers }
				</PanelBody>
			</InspectorControls>

			<ServerSideRender
				block="rank-math/rich-snippet"
				attributes={ attributes }
			/>
		</div>
	)
}
PK     šŠU]U˜"<  <  9  includes/modules/schema/blocks/schema/assets/src/index.jsnu „[µü¤        /**
 * External Dependencies
 */
import { isUndefined } from 'lodash'

/**
 * WordPress dependencies
 */
import { registerBlockType } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import edit from './edit'

/**
 * Register Schema block.
 */
registerBlockType(
	'rank-math/rich-snippet',
	{
		edit,
	}
)
PK     šŠU]ažëé3  3  ;  includes/modules/schema/blocks/schema/assets/css/schema.cssnu „[µü¤        /*!
* Plugin:  Rank Math
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
* Name:  rank-math-review-snippet.css
*/@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}#rank-math-rich-snippet-wrapper{overflow:hidden}#rank-math-rich-snippet-wrapper h5.rank-math-title{display:block;font-size:18px;line-height:1.4}#rank-math-rich-snippet-wrapper .rank-math-review-image{float:right;max-width:40%;margin-left:15px}#rank-math-rich-snippet-wrapper .rank-math-review-data{margin-bottom:15px}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper{width:100%;padding:0 0 20px 0;float:left;clear:both;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-total{border:0;display:block;margin:0;width:auto;float:left;text-align:left;padding:0;font-size:24px;line-height:1;font-weight:700;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star{float:left;margin-left:15px;margin-top:5px;position:relative;z-index:99;line-height:1}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper{display:inline-block;white-space:nowrap;position:relative;color:#e7e7e7}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper .rank-math-review-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#ffbe01}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper i{font-size:18px;-webkit-text-stroke-width:1px;font-style:normal;padding:0 2px;line-height:inherit}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper i:before{content:"â˜…"}body.rtl #rank-math-rich-snippet-wrapper .rank-math-review-image{float:left;margin-left:0;margin-right:15px}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-total{float:right}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star{float:right;margin-left:0;margin-right:15px}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result{left:auto;right:0}@media screen and (max-width: 480px){#rank-math-rich-snippet-wrapper .rank-math-review-image{display:block;max-width:100%;width:100%;text-align:center;margin-right:0}#rank-math-rich-snippet-wrapper .rank-math-review-data{clear:both}}.clear{clear:both}PK     šŠU]B! "  "  <  includes/modules/schema/blocks/schema/class-block-schema.phpnu „[µü¤        <?php
/**
 * The Schema Block
 *
 * @since      1.0.233
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use WP_Block_Type_Registry;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Schema Block class.
 */
class Block_Schema {

	use Hooker;

	/**
	 * Block type name.
	 *
	 * @var string
	 */
	private $block_type = 'rank-math/rich-snippet';

	/**
	 * The single instance of the class.
	 *
	 * @var Block_Schema
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_TOC instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Block_Schema
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Block_Schema ) ) {
			self::$instance = new Block_Schema();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( WP_Block_Type_Registry::get_instance()->is_registered( $this->block_type ) ) {
			return;
		}

		register_block_type(
			RANK_MATH_PATH . 'includes/modules/schema/blocks/schema/block.json',
			[
				'render_callback' => [ $this, 'rich_snippet' ],
			]
		);
	}

	/**
	 * Schema Block render callback.
	 *
	 * @param array $attributes Block Attributes.
	 */
	public function rich_snippet( $attributes ) {
		$output = '';
		foreach ( $attributes as $key => $value ) {
			$output .= $key . '="' . esc_attr( $value ) . '" ';
		}

		return do_shortcode( '[rank_math_rich_snippet ' . trim( $output ) . ']' );
	}
}
PK     šŠU]‹÷nŠ    -  includes/modules/schema/blocks/toc/block.jsonnu „[µü¤        {
	"apiVersion": 3,
	"title": "Table of Contents by Rank Math",
	"description": "Automatically generate the Table of Contents from the Headings added to this page.",
	"name": "rank-math/toc-block",
    "category": "rank-math-blocks",
	"icon": "rm-icon rm-icon-stories",
	"textdomain": "seo-by-rank-math",
	"editorScript": "file:./assets/js/index.js",
	"editorStyle": [
		"file:./assets/css/toc.css",
		"file:./assets/css/toc_list_style.css"
	],
	"attributes": {
		"title": {
			"type": "string"
		},
		"headings": {
			"type": "array",
			"items": {
				"type": "object"
			}
		},
		"listStyle": {
			"type": "string"
		},
		"titleWrapper": {
			"type": "string",
			"default": "h2"
		},
		"excludeHeadings": {
			"type": "array"
		}
	},
	"supports": {
		"color": {
			"link": true,
			"gradients": true
		},
		"multiple": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"align": true
	}
}
PK     šŠU]$Ñ’âç  ç  6  includes/modules/schema/blocks/toc/class-block-toc.phpnu „[µü¤        <?php
/**
 * The TOC Block
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use WP_Block_Type_Registry;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * HowTo Block class.
 */
class Block_TOC extends Block {

	use Hooker;

	/**
	 * Block type name.
	 *
	 * @var string
	 */
	private $block_type = 'rank-math/toc-block';

	/**
	 * The single instance of the class.
	 *
	 * @var Block_TOC
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_TOC instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Block_TOC
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Block_TOC ) ) {
			self::$instance = new Block_TOC();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( WP_Block_Type_Registry::get_instance()->is_registered( $this->block_type ) ) {
			return;
		}

		$this->filter( 'rank_math/schema/block/toc-block', 'add_graph', 10, 2 );
		$this->filter( 'render_block_rank-math/toc-block', 'render_toc_block_content', 10, 2 );
		$this->filter( 'rank_math/metabox/post/values', 'block_settings_metadata' );
		$this->action( 'admin_enqueue_scripts', 'add_json_data' );
		register_block_type( RANK_MATH_PATH . 'includes/modules/schema/blocks/toc/block.json' );
		$this->action( 'wp_enqueue_scripts', 'register_block_style' );
	}

	/**
	 * Register block style.
	 */
	public function register_block_style() {
		wp_register_style( 'rank-math-toc-block', rank_math()->plugin_url() . 'includes/modules/schema/blocks/toc/assets/css/toc_list_style.css', [], rank_math()->version );
	}

	/**
	 * Add meta data to use in the TOC block.
	 *
	 * @param array $values Array of tabs.
	 *
	 * @return array
	 */
	public function block_settings_metadata( $values ) {
		$values['tocTitle']           = Helper::get_settings( 'general.toc_block_title' );
		$values['tocExcludeHeadings'] = Helper::get_settings( 'general.toc_block_exclude_headings', [] );
		$values['listStyle']          = Helper::get_settings( 'general.toc_block_list_style', 'ul' );

		return $values;
	}

	/**
	 * Add default Block values on FSE Template page.
	 *
	 * @return void
	 */
	public function add_json_data() {
		if ( Param::get( 'postType' ) !== 'wp_template' ) {
			return;
		}

		Helper::add_json( 'tocTitle', Helper::get_settings( 'general.toc_block_title' ) );
		Helper::add_json( 'tocExcludeHeadings', Helper::get_settings( 'general.toc_block_exclude_headings', [] ) );
		Helper::add_json( 'listStyle', Helper::get_settings( 'general.toc_block_list_style', 'ul' ) );
	}

	/**
	 * Add default TOC title.
	 *
	 * @param string $block_content Block content.
	 * @param array  $parsed_block  The full block, including name and attributes.
	 *
	 * @return string
	 */
	public function render_toc_block_content( $block_content, $parsed_block ) {
		wp_enqueue_style( 'rank-math-toc-block' );
		if ( isset( $parsed_block['attrs']['title'] ) ) {
			return $block_content;
		}

		$title = Helper::get_settings( 'general.toc_block_title' );
		if ( ! $title ) {
			return $block_content;
		}

		$allowed_tags  = [ 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'div' ];
		$title_wrapper = isset( $parsed_block['attrs']['titleWrapper'] ) && in_array( $parsed_block['attrs']['titleWrapper'], $allowed_tags, true ) ? $parsed_block['attrs']['titleWrapper'] : 'h2';

		$block_content = preg_replace_callback(
			'/(<div class=".*?wp-block-rank-math-toc-block.*?"\>)/i',
			function ( $value ) use ( $title, $block_content, $title_wrapper ) {
				if ( ! isset( $value[0] ) ) {
					return $block_content;
				}

				$value[0] = str_replace( '>', ' id="rank-math-toc">', $value[0] );
				return $value[0] . '<' . tag_escape( $title_wrapper ) . '>' . esc_html( $title ) . '</' . tag_escape( $title_wrapper ) . '>';
			},
			$block_content
		);
		$block_content = str_replace( 'class=""', '', $block_content );

		return apply_filters(
			'rank_math/schema/block/toc/content',
			wp_kses_post( $block_content ),
			$block_content,
			$parsed_block['attrs'],
		);
	}

	/**
	 * Add TOC schema data in JSON-LD array.
	 *
	 * @param array $data  Array of JSON-LD data.
	 * @param array $block JsonLD Instance.
	 *
	 * @return array
	 */
	public function add_graph( $data, $block ) {
		$attributes = $block['attrs'];
		// Early bail.
		if ( empty( $attributes['headings'] ) ) {
			return $data;
		}

		if ( ! isset( $data['toc'] ) ) {
			$data['toc'] = [];
		}

		foreach ( $attributes['headings'] as $heading ) {
			if ( ! empty( $heading['disable'] ) ) {
				continue;
			}

			$data['toc'][] = [
				'@context' => 'https://schema.org',
				'@type'    => 'SiteNavigationElement',
				'@id'      => '#rank-math-toc',
				'name'     => esc_html( $heading['content'] ),
				'url'      => esc_url( get_permalink() . $heading['link'] ),
			];
		}

		if ( empty( $data['toc'] ) ) {
			unset( $data['toc'] );
		}

		return $data;
	}
}
PK     šŠU]Ëk>‘;  ;  7  includes/modules/schema/blocks/toc/assets/scss/toc.scssnu „[µü¤        .wp-block-rank-math-toc-block {
	nav {
		li, div {
			position: relative;
			min-height: 28px;
			margin-bottom: 0;

			&.disabled {
				display: block !important;
				opacity: 0.5;
			}

			.components-base-control {
				position: absolute;
				top: 2px;
				left: -4px;
				right: -3px;
			}

			.rank-math-block-actions {
				position: absolute;
				top: 1px;
				right: 0;
				display: none;
				line-height: 1;

				button.components-button {
					min-width: 24px;
					width: 24px;
					height: 24px;
					line-height: 34px;
				}				
			}

			&:hover, &:focus, .components-base-control + .rank-math-block-actions {
				.rank-math-block-actions {
					display: block;
				}
			}
		}
	}
}

.rank-math-toc-exclude-headings {
	display: flex;
	flex-wrap: wrap;

	> div {
		flex: 0 0 50%;
		margin-bottom: 10px!important;
	}
}PK     šŠU]Säd§Ë   Ë   B  includes/modules/schema/blocks/toc/assets/scss/toc_list_style.scssnu „[µü¤        .wp-block-rank-math-toc-block {
	nav {
		ol {
			counter-reset: item;

			li {
				display: block;
			}

			li:before {
				content: counters(item, ".") ". ";
				counter-increment: item;
			}
		}

	}
}
PK     šŠU]â¨à/  /  <  includes/modules/schema/blocks/toc/assets/js/index.asset.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is required to dynamically load the necessary block dependencies.
/**
 * Block script dependencies.
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

return [
	'dependencies' => [
		'wp-blocks',
		'wp-element',
		'wp-components',
		'wp-block-editor',
		'wp-data',
		'wp-dom',
		'wp-url',
		'wp-i18n',
		'lodash',
		'wp-primitives',
		'wp-reusable-blocks',
	],
	'version'      => rank_math()->version,
];
PK     šŠU]­ß«£â3  â3  5  includes/modules/schema/blocks/toc/assets/js/index.jsnu „[µü¤        !function(){"use strict";var e={dn:function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})}};const t=wp.blocks,n=lodash,a=wp.i18n,r=wp.blockEditor,l=wp.data,i=wp.components,o=wp.element,s=wp.dom;function c(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,i=!0,o=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){o=!0,l=e},f:function(){try{i||null==n.return||n.return()}finally{if(o)throw l}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function u(e,t){return(0,l.useSelect)(function(a){var i,o=a(r.store),d=o.getBlockAttributes,u=o.getBlockName,m=o.getClientIdsWithDescendants,h=o.getSettings,p=(0,l.useDispatch)("core/reusable-blocks").__experimentalConvertBlockToStatic,f=m(),v=[],b=0,g=[],y=c(f);try{var k=function(){var a=i.value,r=u(a);if("core/block"===r){var l=d(a);if(!(0,n.isNull)(l.ref)){var o=wp.data.select("core").getEditedEntityRecord("postType","wp_block",l.ref),c=(0,n.map)(o.blocks,function(e){return e.name});(0,n.includes)(c,"rank-math/toc-block")&&!(0,n.isNull)(d(a))&&p(a)}return 0}if(!(0,n.includes)(["rank-math/faq-block","rank-math/howto-block","core/heading"],r))return 0;var m=d(a);if("rank-math/faq-block"===r||"rank-math/howto-block"===r){var f=m.titleWrapper;if((0,n.includes)(t,f)||(0,n.includes)(["div","p"],f))return 0;var y="rank-math/howto-block"===r?m.steps:m.questions;return(0,n.isEmpty)(y)||(0,n.forEach)(y,function(t){var a=(0,n.isUndefined)(e)||(0,n.isEmpty)(e[v.length])?{content:"",level:"",disable:!1,isUpdated:!1,isGeneratedLink:!0}:e[v.length],r=!(0,n.isUndefined)(a.isGeneratedLink)&&a.isGeneratedLink,l=!(0,n.isUndefined)(a.isUpdated)&&a.isUpdated?a.content:t.title;v.push({key:t.id,content:(0,s.__unstableStripHTML)(l),level:parseInt(m.titleWrapper.replace("h","")),link:r?"#".concat(t.id):a.link,disable:!!a.disable&&a.disable,isUpdated:!(0,n.isUndefined)(a.isUpdated)&&a.isUpdated,isGeneratedLink:r})}),0}if("core/heading"===r){if((0,n.includes)(t,"h"+m.level))return 0;var k=(0,n.isUndefined)(e)||(0,n.isEmpty)(e[v.length])?{content:"",level:"",disable:!1,isUpdated:!1,isGeneratedLink:!0}:e[v.length],w=!(0,n.isUndefined)(k.isGeneratedLink)&&k.isGeneratedLink,E=h(),_=(0,n.isEmpty)(m.content.text)?m.content:m.content.text,S=function(e,t,a,r){return(0,n.isEmpty)(e)&&((0,n.isUndefined)(r.generateAnchors)||!0!==r.generateAnchors)&&a?(0,n.kebabCase)((0,s.__unstableStripHTML)(t)):e}(m.anchor,_,w,E);(0,n.includes)(g,S)&&(S=S+"-"+(b+=1)),g.push(S),m.anchor=S;var H=(0,n.isString)(_)?(0,s.__unstableStripHTML)(_.replace(/(<br *\/?>)+/g," ")):"",x=!(0,n.isUndefined)(k.isUpdated)&&k.isUpdated?k.content:H;v.push({key:a,content:(0,s.__unstableStripHTML)(x),level:m.level,link:w?"#".concat(m.anchor):k.link,disable:!!k.disable&&k.disable,isUpdated:!(0,n.isUndefined)(k.isUpdated)&&k.isUpdated,isGeneratedLink:w})}};for(y.s();!(i=y.n()).done;)k()}catch(e){y.e(e)}finally{y.f()}return(0,n.isEqual)(e,v)?null:v})}function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=[];return(0,n.forEach)(e,function(a,r){var l;if(!(0,n.isEmpty)(a.content)&&a.level===e[0].level)if((null===(l=e[r+1])||void 0===l?void 0:l.level)>a.level){for(var i=e.length,o=r+1;o<e.length;o++)if(e[o].level===a.level){i=o;break}t.push({heading:a,children:m(e.slice(r+1,i))})}else t.push({heading:a,children:null})}),t}function h(e){var t=e.headings,l=void 0===t?{}:t,o=e.onHeadingUpdate,s=void 0===o?{}:o,c=e.edit,d=void 0===c?{}:c,u=e.toggleEdit,m=void 0===u?{}:u,p=e.hideHeading,f=void 0===p?{}:p,v=e.ListStyle,b=void 0===v?"ul":v,g=e.isSave,y=void 0!==g&&g;return(0,n.isEmpty)(l)?null:wp.element.createElement(React.Fragment,null,l.map(function(e){if(y&&e.heading.disable)return!1;var t=e.heading,n=t.content,l=t.link,o=t.disable,c=t.key,u="div"===b?"div":"li";return wp.element.createElement(u,{key:c,className:o?"disabled":""},y&&wp.element.createElement("a",{href:l},n),!y&&wp.element.createElement(r.RichText,{tagName:"a",value:n,allowedFormats:[],onChange:function(e){return s(e,c,!0)},placeholder:(0,a.__)("Heading text","seo-by-rank-math")}),e.children&&wp.element.createElement(b,null,wp.element.createElement(h,{headings:e.children,onHeadingUpdate:s,edit:d,toggleEdit:m,hideHeading:f,ListStyle:b,isSave:y})),c===d&&wp.element.createElement(i.TextControl,{placeholder:(0,a.__)("Heading Link","seo-by-rank-math"),value:l,onChange:function(e){return s(e,c)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),!y&&wp.element.createElement("span",{className:"rank-math-block-actions"},wp.element.createElement(i.Button,{icon:d===c?"saved":"admin-links",className:"rank-math-item-visbility",onClick:function(){return m(d!==c&&c)},title:(0,a.__)("Edit Link","seo-by-rank-math")}),wp.element.createElement(i.Button,{className:"rank-math-item-delete",icon:o?"hidden":"visibility",onClick:function(){return f(!o,c)},title:(0,a.__)("Hide","seo-by-rank-math")})))}))}const p=function(e){var t=e.attributes,l=e.setAttributes,o=e.excludeHeadings,s=e.setExcludeHeadings;return wp.element.createElement(r.InspectorControls,null,wp.element.createElement(i.PanelBody,{title:(0,a.__)("Settings","seo-by-rank-math")},wp.element.createElement(i.SelectControl,{label:(0,a.__)("Title Wrapper","seo-by-rank-math"),value:t.titleWrapper,options:[{value:"h2",label:(0,a.__)("H2","seo-by-rank-math")},{value:"h3",label:(0,a.__)("H3","seo-by-rank-math")},{value:"h4",label:(0,a.__)("H4","seo-by-rank-math")},{value:"h5",label:(0,a.__)("H5","seo-by-rank-math")},{value:"h6",label:(0,a.__)("H6","seo-by-rank-math")},{value:"p",label:(0,a.__)("P","seo-by-rank-math")},{value:"div",label:(0,a.__)("DIV","seo-by-rank-math")}],onChange:function(e){l({titleWrapper:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement("br",null),wp.element.createElement("h3",null,(0,a.__)("Exclude Headings","seo-by-rank-math")),wp.element.createElement("div",{className:"rank-math-toc-exclude-headings"},(0,n.map)(["h1","h2","h3","h4","h5","h6"],function(e){return wp.element.createElement(i.CheckboxControl,{key:e,label:(0,a.__)("Heading ","seo-by-rank-math")+(0,n.toUpper)(e),checked:(0,n.includes)(o,e),onChange:function(t){return s(e,t)},__nextHasNoMarginBottom:!0})}))))};e.dn(p);const f=React;function v(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var r=e.length;for(t=0;t<r;t++)e[t]&&(n=v(e[t]))&&(a&&(a+=" "),a+=n)}else for(n in e)e[n]&&(a&&(a+=" "),a+=n);return a}const b=function(){for(var e,t,n=0,a="",r=arguments.length;n<r;n++)(e=arguments[n])&&(t=v(e))&&(a&&(a+=" "),a+=t);return a};const g=e=>(0,o.createElement)("path",e),y=(0,o.forwardRef)(({className:e,isPressed:t,...n},a)=>{const r={...n,className:b(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,o.createElement)("svg",{...r,ref:a})});y.displayName="SVG";const k=(0,f.createElement)(y,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,f.createElement)(g,{d:"M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})),w=(0,f.createElement)(y,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,f.createElement)(g,{d:"M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM5 6.7V10h1V5.3L3.8 6l.4 1 .8-.3zm-.4 5.7c-.3.1-.5.2-.7.3l.1 1.1c.2-.2.5-.4.8-.5.3-.1.6 0 .7.1.2.3 0 .8-.2 1.1-.5.8-.9 1.6-1.4 2.5h2.7v-1h-1c.3-.6.8-1.4.9-2.1.1-.3 0-.8-.2-1.1-.5-.6-1.3-.5-1.7-.4z"})),E=(0,f.createElement)(y,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,f.createElement)(g,{d:"M13 5.5H4V4h9v1.5Zm7 7H4V11h16v1.5Zm-7 7H4V18h9v1.5Z"})),_=function(e){var t=e.setAttributes;return wp.element.createElement(r.BlockControls,null,wp.element.createElement(i.Toolbar,{label:(0,a.__)("Table of Content Options","seo-by-rank-math")},wp.element.createElement(i.ToolbarButton,{icon:k,label:(0,a.__)("Unordered List","seo-by-rank-math"),onClick:function(){return t({listStyle:"ul"})}}),wp.element.createElement(i.ToolbarButton,{icon:w,label:(0,a.__)("Ordered List","seo-by-rank-math"),onClick:function(){return t({listStyle:"ol"})}}),wp.element.createElement(i.ToolbarButton,{icon:E,label:(0,a.__)("None","seo-by-rank-math"),onClick:function(){return t({listStyle:"div"})}})))};function S(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,i,o=[],s=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=l.call(n)).done)&&(o.push(a.value),o.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return H(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}e.dn(_);const x=function(e){var t,s=e.attributes,c=e.setAttributes,d=(0,r.useBlockProps)(),f=S((0,o.useState)(!1),2),v=f[0],b=f[1],g=S((0,o.useState)({}),2),y=g[0],k=g[1];s.listStyle||c({listStyle:rankMath.listStyle});var w=s.listStyle,E=null!==(t=s.title)&&void 0!==t?t:rankMath.tocTitle,H=(0,n.isUndefined)(s.excludeHeadings)?rankMath.tocExcludeHeadings:s.excludeHeadings,x=function(e){(0,n.includes)(H,e)?(0,n.remove)(H,function(t){return t===e}):H.push(e),c({excludeHeadings:H}),k(!y)},U=(0,l.useDispatch)(r.store).__unstableMarkNextChangeAsNotPersistent,A=u(s.headings,H);(0,o.useEffect)(function(){null!==A&&(U(),c({headings:A}))},[A]);var C=m(s.headings);return(0,n.isUndefined)(s.headings)||0===s.headings.length?wp.element.createElement("div",d,wp.element.createElement(i.Placeholder,{label:(0,a.__)("Table of Contents","seo-by-rank-math"),instructions:(0,a.__)("Add Heading blocks to this page to generate the Table of Contents.","seo-by-rank-math")}),wp.element.createElement(p,{attributes:s,setAttributes:c,excludeHeadings:H,setExcludeHeadings:x})):wp.element.createElement("div",d,wp.element.createElement(r.RichText,{tagName:s.titleWrapper,value:E,onChange:function(e){c({title:e})},placeholder:(0,a.__)("Enter a title","seo-by-rank-math")}),wp.element.createElement("nav",null,wp.element.createElement(w,null,wp.element.createElement(h,{headings:C,onHeadingUpdate:function(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=(0,n.map)(s.headings,function(n){return n.key===t&&(a?(n.content=e,n.isUpdated=!0):(n.isGeneratedLink=!1,n.link=e)),n});c({headings:r})},edit:v,toggleEdit:b,hideHeading:function(e,t){var a=(0,n.map)(s.headings,function(n){return n.key===t&&(n.disable=e),n});c({headings:a})},ListStyle:w}))),wp.element.createElement(_,{setAttributes:c}),wp.element.createElement(p,{attributes:s,setAttributes:c,excludeHeadings:H,setExcludeHeadings:x}))};function U(){return U=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},U.apply(null,arguments)}e.dn(x);var A={attributes:{title:{type:"text"},headings:{type:"array",items:{type:"object"}},listStyle:{type:"text"},titleWrapper:{type:"text",default:"h2"},excludeHeadings:{type:"array"}},save:function(e){var t=e.attributes;if(0===t.headings.length)return null;var n=t.titleWrapper,a=m(t.headings),l=t.listStyle;return wp.element.createElement("div",r.useBlockProps.save(),t.title&&wp.element.createElement(n,{dangerouslySetInnerHTML:{__html:t.title}}),wp.element.createElement("nav",null,wp.element.createElement(l,null,wp.element.createElement(h,{headings:a,ListStyle:l,isSave:!0}))))}};const C=[A];(0,t.registerBlockType)("rank-math/toc-block",{edit:x,save:function(e){var t=e.attributes;if((0,n.isUndefined)(t.headings)||0===t.headings.length)return null;var a=t.titleWrapper,l=m(t.headings),i=t.listStyle;return wp.element.createElement("div",U({},r.useBlockProps.save(),{id:"rank-math-toc"}),t.title&&wp.element.createElement(a,{dangerouslySetInnerHTML:{__html:t.title}}),wp.element.createElement("nav",null,wp.element.createElement(i,null,wp.element.createElement(h,{headings:l,ListStyle:i,isSave:!0}))))},deprecated:C})}();PK     šŠU]D,öQ˜  ˜  5  includes/modules/schema/blocks/toc/assets/src/save.jsnu „[µü¤        /**
 * External dependencies
 */
import { isUndefined } from 'lodash'

/**
 * WordPress dependencies
 */
import { useBlockProps } from '@wordpress/block-editor'

/**
 * Internal dependencies
 */
import { linearToNestedHeadingList } from './utils'
import List from './list'

export default function save( { attributes } ) {
	if ( isUndefined( attributes.headings ) || attributes.headings.length === 0 ) {
		return null
	}

	const TitleWrapper = attributes.titleWrapper
	const headings = linearToNestedHeadingList( attributes.headings )
	const ListStyle = attributes.listStyle

	return (
		<div { ...useBlockProps.save() } id="rank-math-toc">
			{ attributes.title && <TitleWrapper dangerouslySetInnerHTML={ { __html: attributes.title } }></TitleWrapper> }
			<nav>
				<ListStyle>
					<List
						headings={ headings }
						ListStyle={ ListStyle }
						isSave={ true }
					/>
				</ListStyle>
			</nav>
		</div>
	)
}
PK     šŠU]$.‚£y	  y	  5  includes/modules/schema/blocks/toc/assets/src/list.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Button, TextControl } from '@wordpress/components'
import { RichText } from '@wordpress/block-editor'

export default function List( { headings = {}, onHeadingUpdate = {}, edit = {}, toggleEdit = {}, hideHeading = {}, ListStyle = 'ul', isSave = false } ) {
	if ( isEmpty( headings ) ) {
		return null
	}

	return (
		<>
			{ headings.map( ( heading ) => {
				if ( isSave && heading.heading.disable ) {
					return false
				}

				const { content, link, disable, key } = heading.heading
				const TagName = 'div' === ListStyle ? 'div' : 'li'
				return (
					<TagName key={ key } className={ disable ? 'disabled' : '' }>
						{
							isSave &&
							<a href={ link }>
								{ content }
							</a>
						}
						{
							! isSave &&
							<RichText
								tagName="a"
								value={ content }
								allowedFormats={ [] }
								onChange={ ( newContent ) => onHeadingUpdate( newContent, key, true ) }
								placeholder={ __( 'Heading text', 'seo-by-rank-math' ) }
							/>
						}
						{
							heading.children &&
							<ListStyle>
								<List
									headings={ heading.children }
									onHeadingUpdate={ onHeadingUpdate }
									edit={ edit }
									toggleEdit={ toggleEdit }
									hideHeading={ hideHeading }
									ListStyle={ ListStyle }
									isSave={ isSave }
								/>
							</ListStyle>
						}
						{
							key === edit &&
							<TextControl
								placeholder={ __( 'Heading Link', 'seo-by-rank-math' ) }
								value={ link }
								onChange={ ( newLink ) => onHeadingUpdate( newLink, key ) }
								__next40pxDefaultSize={ true }
								__nextHasNoMarginBottom={ true }
							/>
						}
						{
							! isSave &&
							<span className="rank-math-block-actions">
								<Button
									icon={ edit === key ? 'saved' : 'admin-links' }
									className="rank-math-item-visbility"
									onClick={ () => toggleEdit( edit === key ? false : key ) }
									title={ __( 'Edit Link', 'seo-by-rank-math' ) }
								/>

								<Button
									className="rank-math-item-delete"
									icon={ ! disable ? 'visibility' : 'hidden' }
									onClick={ () => hideHeading( ! disable, key ) }
									title={ __( 'Hide', 'seo-by-rank-math' ) }
								/>
							</span>
						}
					</TagName>
				)
			} ) }
		</>
	)
}
PK     šŠU]g€%°Ì  Ì  8  includes/modules/schema/blocks/toc/assets/src/toolbar.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { BlockControls } from '@wordpress/block-editor'
import {
	Toolbar,
	ToolbarButton,
} from '@wordpress/components'
import { formatListBullets, formatListNumbered, alignLeft } from '@wordpress/icons'

export default ( { setAttributes } ) => {
	return (
		<BlockControls>
			<Toolbar label={ __( 'Table of Content Options', 'seo-by-rank-math' ) }>
				<ToolbarButton
					icon={ formatListBullets }
					label={ __( 'Unordered List', 'seo-by-rank-math' ) }
					onClick={ () => setAttributes( { listStyle: 'ul' } ) }
				/>
				<ToolbarButton
					icon={ formatListNumbered }
					label={ __( 'Ordered List', 'seo-by-rank-math' ) }
					onClick={ () => setAttributes( { listStyle: 'ol' } ) }
				/>
				<ToolbarButton
					icon={ alignLeft }
					label={ __( 'None', 'seo-by-rank-math' ) }
					onClick={ () => setAttributes( { listStyle: 'div' } ) }
				/>
			</Toolbar>
		</BlockControls>
	)
}
PK     šŠU]è�ÉÏ    ;  includes/modules/schema/blocks/toc/assets/src/deprecated.jsnu „[µü¤        import { linearToNestedHeadingList } from './utils'
import { useBlockProps } from '@wordpress/block-editor'
import List from './list'

const attributes = {
	title: {
		type: 'text',
	},
	headings: {
		type: 'array',
		items: {
			type: 'object',
		},
	},
	listStyle: {
		type: 'text',
	},
	titleWrapper: {
		type: 'text',
		default: 'h2',
	},
	excludeHeadings: {
		type: 'array',
	},
}

const v1 = {
	attributes,
	save( { attributes } ) {
		if ( attributes.headings.length === 0 ) {
			return null
		}

		const TitleWrapper = attributes.titleWrapper
		const headings = linearToNestedHeadingList( attributes.headings )
		const ListStyle = attributes.listStyle

		return (
			<div { ...useBlockProps.save() }>
				{ attributes.title && <TitleWrapper dangerouslySetInnerHTML={ { __html: attributes.title } }></TitleWrapper> }
				<nav>
					<ListStyle>
						<List
							headings={ headings }
							ListStyle={ ListStyle }
							isSave={ true }
						/>
					</ListStyle>
				</nav>
			</div>
		)
	},
}

export default [ v1 ]
PK     šŠU]³zf‹  ‹  6  includes/modules/schema/blocks/toc/assets/src/utils.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty, isUndefined, isString, kebabCase, includes, forEach, isEqual, map, isNull } from 'lodash'

/**
 * WordPress dependencies
 */
import { store as blockEditorStore } from '@wordpress/block-editor'
import { __unstableStripHTML as stripHTML } from '@wordpress/dom'
import { useSelect, useDispatch } from '@wordpress/data'

// Conditionally generate anchor from heading text.
const generateAnchor = ( anchor, headingText, isGeneratedLink, settings ) => {
	if ( ! isEmpty( anchor ) ) {
		return anchor
	}

	if ( ! isUndefined( settings.generateAnchors ) && settings.generateAnchors === true ) {
		return anchor
	}

	return isGeneratedLink ? kebabCase( stripHTML( headingText ) ) : anchor
}

/**
 * Get the headings from the content.
 *
 * @param {Array} headings        Array of headings data
 * @param {Array} excludeHeadings Heading levels to exclude
 */
export function GetLatestHeadings( headings, excludeHeadings ) {
	return useSelect(
		( select ) => {
			const {
				getBlockAttributes,
				getBlockName,
				getClientIdsWithDescendants,
				getSettings,
			} = select( blockEditorStore )
			const { __experimentalConvertBlockToStatic: convertBlockToStatic } = useDispatch( 'core/reusable-blocks' )

			// Get the client ids of all blocks in the editor.
			const allBlockClientIds = getClientIdsWithDescendants()
			const _latestHeadings = []
			let i = 0
			const anchors = []
			for ( const blockClientId of allBlockClientIds ) {
				const blockName = getBlockName( blockClientId )
				if ( blockName === 'core/block' ) {
					const attrs = getBlockAttributes( blockClientId )
					if ( ! isNull( attrs.ref ) ) {
						const reusableBlock = wp.data.select( 'core' ).getEditedEntityRecord( 'postType', 'wp_block', attrs.ref )
						const blocks = map( reusableBlock.blocks, ( block ) => {
							return block.name
						} )

						if ( includes( blocks, 'rank-math/toc-block' ) && ! isNull( getBlockAttributes( blockClientId ) ) ) {
							convertBlockToStatic( blockClientId )
						}
					}

					continue
				}

				if ( ! includes( [ 'rank-math/faq-block', 'rank-math/howto-block', 'core/heading' ], blockName ) ) {
					continue
				}

				const headingAttributes = getBlockAttributes( blockClientId )
				if ( blockName === 'rank-math/faq-block' || blockName === 'rank-math/howto-block' ) {
					const titleWrapper = headingAttributes.titleWrapper
					if (
						includes( excludeHeadings, titleWrapper ) ||
						includes( [ 'div', 'p' ], titleWrapper )
					) {
						continue
					}

					const data = blockName === 'rank-math/howto-block' ? headingAttributes.steps : headingAttributes.questions
					if ( isEmpty( data ) ) {
						continue
					}

					forEach( data, ( value ) => {
						const currentHeading = ! isUndefined( headings ) && ! isEmpty( headings[ _latestHeadings.length ] ) ? headings[ _latestHeadings.length ] : {
							content: '',
							level: '',
							disable: false,
							isUpdated: false,
							isGeneratedLink: true,
						}

						const isGeneratedLink = ! isUndefined( currentHeading.isGeneratedLink ) && currentHeading.isGeneratedLink
						const content = ! isUndefined( currentHeading.isUpdated ) && currentHeading.isUpdated ? currentHeading.content : value.title

						_latestHeadings.push( {
							key: value.id,
							content: stripHTML( content ),
							level: parseInt( headingAttributes.titleWrapper.replace( 'h', '' ) ),
							link: ! isGeneratedLink ? currentHeading.link : `#${ value.id }`,
							disable: currentHeading.disable ? currentHeading.disable : false,
							isUpdated: ! isUndefined( currentHeading.isUpdated ) ? currentHeading.isUpdated : false,
							isGeneratedLink,
						} )
					} )

					continue
				}

				if ( blockName === 'core/heading' ) {
					if ( includes( excludeHeadings, 'h' + headingAttributes.level ) ) {
						continue
					}

					const currentHeading = ! isUndefined( headings ) && ! isEmpty( headings[ _latestHeadings.length ] ) ? headings[ _latestHeadings.length ] : {
						content: '',
						level: '',
						disable: false,
						isUpdated: false,
						isGeneratedLink: true,
					}

					const isGeneratedLink = ! isUndefined( currentHeading.isGeneratedLink ) && currentHeading.isGeneratedLink

					const settings = getSettings()
					const headingText = ! isEmpty( headingAttributes.content.text ) ? headingAttributes.content.text : headingAttributes.content
					let anchor = generateAnchor( headingAttributes.anchor, headingText, isGeneratedLink, settings )

					if ( includes( anchors, anchor ) ) {
						i += 1
						anchor = anchor + '-' + i
					}

					anchors.push( anchor )
					headingAttributes.anchor = anchor
					const headingContent = isString( headingText ) ? stripHTML(
						headingText.replace(
							/(<br *\/?>)+/g,
							' '
						)
					) : ''

					const content = ! isUndefined( currentHeading.isUpdated ) && currentHeading.isUpdated ? currentHeading.content : headingContent

					_latestHeadings.push( {
						key: blockClientId,
						content: stripHTML( content ),
						level: headingAttributes.level,
						link: ! isGeneratedLink ? currentHeading.link : `#${ headingAttributes.anchor }`,
						disable: currentHeading.disable ? currentHeading.disable : false,
						isUpdated: ! isUndefined( currentHeading.isUpdated ) ? currentHeading.isUpdated : false,
						isGeneratedLink,
					} )
				}
			}

			if ( isEqual( headings, _latestHeadings ) ) {
				return null
			}

			return _latestHeadings
		}
	)
}

/**
 * Nest heading based on the Heading level.
 *
 * @param {Array} headingList The flat list of headings to nest.
 *
 * @return {Array} The nested list of headings.
 */
export function linearToNestedHeadingList( headingList = [] ) {
	const nestedHeadingList = []
	forEach( headingList, ( heading, key ) => {
		if ( isEmpty( heading.content ) ) {
			return
		}

		// Make sure we are only working with the same level as the first iteration in our set.
		if ( heading.level === headingList[ 0 ].level ) {
			if ( headingList[ key + 1 ]?.level > heading.level ) {
				let endOfSlice = headingList.length
				for ( let i = key + 1; i < headingList.length; i++ ) {
					if ( headingList[ i ].level === heading.level ) {
						endOfSlice = i
						break
					}
				}

				nestedHeadingList.push( {
					heading,
					children: linearToNestedHeadingList(
						headingList.slice( key + 1, endOfSlice )
					),
				} )
			} else {
				nestedHeadingList.push( {
					heading,
					children: null,
				} )
			}
		}
	} )

	return nestedHeadingList
}
PK     ›ŠU]ñ2O  O  5  includes/modules/schema/blocks/toc/assets/src/edit.jsnu „[µü¤        /**
 * External dependencies
 */
import { isUndefined, map, includes, remove } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import {
	useBlockProps,
	RichText,
	store as blockEditorStore,
} from '@wordpress/block-editor'
import { useDispatch } from '@wordpress/data'
import { Placeholder } from '@wordpress/components'
import { useEffect, useState } from '@wordpress/element'

/**
 * Internal dependencies
 */
import { GetLatestHeadings, linearToNestedHeadingList } from './utils'
import List from './list'
import InspectControls from './inspectControls'
import Toolbar from './toolbar'

export default ( {
	attributes,
	setAttributes,
} ) => {
	const blockProps = useBlockProps()

	// State to monitor edit heading links.
	const [ edit, toggleEdit ] = useState( false )
	const [ excludeHeading, toggleExcludeHeading ] = useState( {} )
	if ( ! attributes.listStyle ) {
		setAttributes( { listStyle: rankMath.listStyle } )
	}

	const ListStyle = attributes.listStyle
	const tocTitle = attributes.title ?? rankMath.tocTitle
	const excludeHeadings = ! isUndefined( attributes.excludeHeadings ) ? attributes.excludeHeadings : rankMath.tocExcludeHeadings

	// Function to hide certain heading.
	const hideHeading = ( value, key ) => {
		const headings = map( attributes.headings, ( heading ) => {
			if ( heading.key === key ) {
				heading.disable = value
			}

			return heading
		} )

		setAttributes( { headings } )
	}

	// Function to update Heading link.
	const onHeadingUpdate = ( value, key, isContent = false ) => {
		const headings = map( attributes.headings, ( heading ) => {
			if ( heading.key === key ) {
				if ( isContent ) {
					heading.content = value
					heading.isUpdated = true
				} else {
					heading.isGeneratedLink = false
					heading.link = value
				}
			}

			return heading
		} )

		setAttributes( { headings } )
	}

	const setExcludeHeadings = ( headingLevel ) => {
		if ( includes( excludeHeadings, headingLevel ) ) {
			remove( excludeHeadings, ( heading ) => {
				return heading === headingLevel
			} )
		} else {
			excludeHeadings.push( headingLevel )
		}
		setAttributes( { excludeHeadings } )
		toggleExcludeHeading( ! excludeHeading )
	}

	const { __unstableMarkNextChangeAsNotPersistent } = useDispatch( blockEditorStore )

	// Get Latest headings from the content.
	const latestHeadings = GetLatestHeadings( attributes.headings, excludeHeadings )
	useEffect( () => {
		if ( latestHeadings !== null ) {
			__unstableMarkNextChangeAsNotPersistent()
			setAttributes( { headings: latestHeadings } )
		}
	}, [ latestHeadings ] )

	const headingTree = linearToNestedHeadingList( attributes.headings )
	if ( isUndefined( attributes.headings ) || attributes.headings.length === 0 ) {
		return (
			<div { ...blockProps }>
				<Placeholder
					label={ __( 'Table of Contents', 'seo-by-rank-math' ) }
					instructions={ __( 'Add Heading blocks to this page to generate the Table of Contents.', 'seo-by-rank-math' ) }
				/>
				<InspectControls attributes={ attributes } setAttributes={ setAttributes } excludeHeadings={ excludeHeadings } setExcludeHeadings={ setExcludeHeadings } />
			</div>
		)
	}

	return (
		<div { ...blockProps }>
			<RichText
				tagName={ attributes.titleWrapper }
				value={ tocTitle }
				onChange={ ( newTitle ) => {
					setAttributes( { title: newTitle } )
				} }
				placeholder={ __( 'Enter a title', 'seo-by-rank-math' ) }
			/>
			<nav>
				<ListStyle>
					<List
						headings={ headingTree }
						onHeadingUpdate={ onHeadingUpdate }
						edit={ edit }
						toggleEdit={ toggleEdit }
						hideHeading={ hideHeading }
						ListStyle={ ListStyle }
					/>
				</ListStyle>
			</nav>
			<Toolbar setAttributes={ setAttributes } />
			<InspectControls attributes={ attributes } setAttributes={ setAttributes } excludeHeadings={ excludeHeadings } setExcludeHeadings={ setExcludeHeadings } />
		</div>
	)
}
PK     ›ŠU]Åæ;D  D  6  includes/modules/schema/blocks/toc/assets/src/index.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { registerBlockType } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import edit from './edit'
import save from './save'
import deprecated from './deprecated'

/**
 * Register TOC block
 */
registerBlockType(
	'rank-math/toc-block',
	{
		edit,
		save,
		deprecated,
	}
)
PK     ›ŠU]t†’b*  *  @  includes/modules/schema/blocks/toc/assets/src/inspectControls.jsnu „[µü¤        /**
 * External dependencies
 */
import { map, includes, toUpper } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { InspectorControls } from '@wordpress/block-editor'
import {
	PanelBody,
	SelectControl,
	CheckboxControl,
} from '@wordpress/components'

export default ( { attributes, setAttributes, excludeHeadings, setExcludeHeadings } ) => {
	return (
		<InspectorControls>
			<PanelBody title={ __( 'Settings', 'seo-by-rank-math' ) }>

				<SelectControl
					label={ __( 'Title Wrapper', 'seo-by-rank-math' ) }
					value={ attributes.titleWrapper }
					options={ [
						{ value: 'h2', label: __( 'H2', 'seo-by-rank-math' ) },
						{ value: 'h3', label: __( 'H3', 'seo-by-rank-math' ) },
						{ value: 'h4', label: __( 'H4', 'seo-by-rank-math' ) },
						{ value: 'h5', label: __( 'H5', 'seo-by-rank-math' ) },
						{ value: 'h6', label: __( 'H6', 'seo-by-rank-math' ) },
						{ value: 'p', label: __( 'P', 'seo-by-rank-math' ) },
						{ value: 'div', label: __( 'DIV', 'seo-by-rank-math' ) },
					] }
					onChange={ ( titleWrapper ) => {
						setAttributes( { titleWrapper } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<br />
				<h3>{ __( 'Exclude Headings', 'seo-by-rank-math' ) }</h3>
				<div className="rank-math-toc-exclude-headings">
					{
						map( [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], ( value ) => {
							return (
								<CheckboxControl
									key={ value }
									label={ __( 'Heading ', 'seo-by-rank-math' ) + toUpper( value ) }
									checked={ includes( excludeHeadings, value ) }
									onChange={ ( newVlaue ) => setExcludeHeadings( value, newVlaue ) }
									__nextHasNoMarginBottom={ true }
								/>
							)
						} )
					}
				</div>
			</PanelBody>
		</InspectorControls>
	)
}
PK     ›ŠU]ãÜÝÕ   Õ   @  includes/modules/schema/blocks/toc/assets/css/toc_list_style.cssnu „[µü¤        .wp-block-rank-math-toc-block nav ol{counter-reset:item}.wp-block-rank-math-toc-block nav ol li{display:block}.wp-block-rank-math-toc-block nav ol li:before{content:counters(item, ".") ". ";counter-increment:item}PK     ›ŠU]û˜Æ5  5  5  includes/modules/schema/blocks/toc/assets/css/toc.cssnu „[µü¤        .wp-block-rank-math-toc-block nav li,.wp-block-rank-math-toc-block nav div{position:relative;min-height:28px;margin-bottom:0}.wp-block-rank-math-toc-block nav li.disabled,.wp-block-rank-math-toc-block nav div.disabled{display:block !important;opacity:.5}.wp-block-rank-math-toc-block nav li .components-base-control,.wp-block-rank-math-toc-block nav div .components-base-control{position:absolute;top:2px;left:-4px;right:-3px}.wp-block-rank-math-toc-block nav li .rank-math-block-actions,.wp-block-rank-math-toc-block nav div .rank-math-block-actions{position:absolute;top:1px;right:0;display:none;line-height:1}.wp-block-rank-math-toc-block nav li .rank-math-block-actions button.components-button,.wp-block-rank-math-toc-block nav div .rank-math-block-actions button.components-button{min-width:24px;width:24px;height:24px;line-height:34px}.wp-block-rank-math-toc-block nav li:hover .rank-math-block-actions,.wp-block-rank-math-toc-block nav li:focus .rank-math-block-actions,.wp-block-rank-math-toc-block nav li .components-base-control+.rank-math-block-actions .rank-math-block-actions,.wp-block-rank-math-toc-block nav div:hover .rank-math-block-actions,.wp-block-rank-math-toc-block nav div:focus .rank-math-block-actions,.wp-block-rank-math-toc-block nav div .components-base-control+.rank-math-block-actions .rank-math-block-actions{display:block}.rank-math-toc-exclude-headings{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.rank-math-toc-exclude-headings>div{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;margin-bottom:10px !important}PK     ›ŠU]'�þQ  Q  -  includes/modules/schema/blocks/faq/block.jsonnu „[µü¤        {
	"apiVersion": 3,
	"title": "FAQ by Rank Math",
	"description": "Easily add Schema-ready, SEO-friendly, Frequently Asked Questions to your content.",
	"name": "rank-math/faq-block",
	"category": "rank-math-blocks",
	"icon": "editor-ul",
	"textdomain": "seo-by-rank-math",
 	"keywords": [ "FAQ", "Frequently Asked Questions", "Schema", "SEO", "Structured Data", "Yoast", "Rank Math", "Block", "Markup", "Rich Snippet" ],
	"editorScript": [
		"lodash",
		"file:./assets/js/index.js"
	],
	"editorStyle": "rank-math-block-admin",
	"attributes": {
		"listStyle": {
			"type": "string",
			"default": ""
		},
		"titleWrapper": {
			"type": "string",
			"default": "h3"
		},
		"sizeSlug": {
			"type": "string",
			"default": "thumbnail"
		},
		"questions": {
			"type": "array",
			"default": [],
			"items": {
				"type": "object"
			}
		},
		"listCssClasses": {
			"type": "string",
			"default": ""
		},
		"titleCssClasses": {
			"type": "string",
			"default": ""
		},
		"contentCssClasses": {
			"type": "string",
			"default": ""
		},
		"textAlign": {
			"type": "string",
			"default": "left"
		}
	}
}
PK     ›ŠU]g.Oú  ú  <  includes/modules/schema/blocks/faq/assets/js/index.asset.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is required to dynamically load the necessary block dependencies.
/**
 * Block script dependencies.
 *
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

return [
	'dependencies' => [
		'wp-blocks',
		'wp-block-editor',
		'wp-components',
		'wp-data',
		'wp-element',
		'wp-hooks',
		'wp-i18n',
		'lodash',
	],
	'version'      => rank_math()->version,
];
PK     ›ŠU]A¾–ü'>  '>  5  includes/modules/schema/blocks/faq/assets/js/index.jsnu „[µü¤        !function(){var e={942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=wp.blocks,t=lodash,r=wp.i18n,o=wp.element,a=wp.components,i=wp.blockEditor;function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},a=r,i="",l=r.indexOf("#");-1!==l&&(a=r.substring(0,l),i=r.substring(l));var s=Object.keys(o).map(function(e){return"".concat(e,"=").concat(o[e])}).join("&"),u=a.includes("?")&&!a.endsWith("?")?"&":"?";return a+u+s+i+n}n.dn(l);const s=wp.data;function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function p(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const f=(0,s.withSelect)(function(e,t){var n=(0,e("core/block-editor").getSettings)().imageSizes;return m(m({},t),{},{imageSizes:n})})(function(e){var n=e.imageSizes,o=e.attributes,l=e.setAttributes,s=function(e){return(0,t.map)(e,function(e){var t=e.name;return{value:e.slug,label:t}})}(n);return wp.element.createElement(i.InspectorControls,{key:"inspector"},wp.element.createElement(a.PanelBody,{title:(0,r.__)("FAQ Options","seo-by-rank-math")},wp.element.createElement(a.SelectControl,{label:(0,r.__)("List Style","seo-by-rank-math"),value:o.listStyle,options:[{value:"",label:(0,r.__)("None","seo-by-rank-math")},{value:"numbered",label:(0,r.__)("Numbered","seo-by-rank-math")},{value:"unordered",label:(0,r.__)("Unordered","seo-by-rank-math")}],onChange:function(e){l({listStyle:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(a.SelectControl,{label:(0,r.__)("Title Wrapper","seo-by-rank-math"),value:o.titleWrapper,options:[{value:"h2",label:(0,r.__)("H2","seo-by-rank-math")},{value:"h3",label:(0,r.__)("H3","seo-by-rank-math")},{value:"h4",label:(0,r.__)("H4","seo-by-rank-math")},{value:"h5",label:(0,r.__)("H5","seo-by-rank-math")},{value:"h6",label:(0,r.__)("H6","seo-by-rank-math")},{value:"p",label:(0,r.__)("P","seo-by-rank-math")},{value:"div",label:(0,r.__)("DIV","seo-by-rank-math")}],onChange:function(e){l({titleWrapper:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(a.SelectControl,{label:(0,r.__)("Image Size","seo-by-rank-math"),value:o.sizeSlug,options:s,onChange:function(e){l({sizeSlug:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement(a.PanelBody,{title:(0,r.__)("Styling Options","seo-by-rank-math")},wp.element.createElement(a.TextControl,{label:(0,r.__)("Title Wrapper CSS Class(es)","seo-by-rank-math"),value:o.titleCssClasses,onChange:function(e){l({titleCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(a.TextControl,{label:(0,r.__)("Content Wrapper CSS Class(es)","seo-by-rank-math"),value:o.contentCssClasses,onChange:function(e){l({contentCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(a.TextControl,{label:(0,r.__)("List CSS Class(es)","seo-by-rank-math"),value:o.listCssClasses,onChange:function(e){l({listCssClasses:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})))});var b=n(942),y=n.n(b);function d(e,n){var r=(0,s.select)("core").getMedia,o=e?r(e):null;return null===o?null:n?function(e,n){var r=(0,t.get)(e,["media_details","sizes",n,"source_url"]);return r||(0,t.get)(e,["media_details","sizes","full","source_url"])}(o,n):o}const v=(0,s.withSelect)(function(e,t){var n=t.imageID,r=t.sizeSlug;return{imageUrl:n?d(n,r):null}})(function(e){var t=e.imageUrl;return t?wp.element.createElement("img",{src:t,alt:""}):null});const h=function(e){var t=e.imageID,n=e.sizeSlug,o=e.open,i=e.removeImage,l=e.addButtonLabel,s=void 0===l?(0,r.__)("Add Image","seo-by-rank-math"):l,u=e.addImageRef;return wp.element.createElement("div",{className:"rank-math-media-placeholder"},t>0&&wp.element.createElement(v,{imageID:t,sizeSlug:n}),t>0?wp.element.createElement(a.Button,{ref:u,icon:"edit",className:"rank-math-replace-image",onClick:o}):wp.element.createElement(a.Button,{ref:u,onClick:o,className:"rank-math-add-image",isPrimary:!0},s),t>0&&wp.element.createElement(a.Button,{icon:"no-alt",className:"rank-math-delete-image",onClick:i}))},g=wp.hooks;function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function _(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,P(r.key),r)}}function C(e,t,n){return t=O(t),function(e,t){if(t&&("object"==w(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,E()?Reflect.construct(t,n||[],O(e).constructor):t.apply(e,n))}function E(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(E=function(){return!!e})()}function O(e){return O=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},O(e)}function j(e,t){return j=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},j(e,t)}function x(e,t,n){return(t=P(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e){var t=function(e,t){if("object"!=w(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=w(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==w(t)?t:t+""}var A=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return x(e=C(this,t,[].concat(r)),"contentRef",(0,o.createRef)()),x(e,"addImageRef",(0,o.createRef)()),x(e,"handleDeleteKeyDown",function(t){if("Tab"===t.key&&!t.shiftKey){t.preventDefault();var n=e.contentRef.current;if(n){var r=n.querySelector("[contenteditable]");r&&r.focus()}}}),x(e,"handleAnswerKeyDown",function(t){"Tab"!==t.key||t.shiftKey||(t.preventDefault(),e.addImageRef.current&&e.addImageRef.current.focus())}),x(e,"toggleVisibility",function(){var t=e.props,n=t.setAttributes,r=t.index,o=_(e.props.questions);o[r].visible=!e.props.visible,n({questions:o})}),x(e,"deleteQuestion",function(){var t=e.props,n=t.setAttributes,r=t.index,o=_(e.props.questions);o.splice(r,1),n({questions:o})}),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&j(e,t)}(t,e),n=t,(l=[{key:"render",value:function(){var e=this,t=this.props,n=t.title,o=t.content,l=t.visible,s=t.imageID,u=t.sizeSlug,c=t.titleWrapper,m=t.titleCssClasses,p=t.contentCssClasses,f=y()("rank-math-question-wrapper",{"question-not-visible":!l});return wp.element.createElement("div",{className:f},wp.element.createElement("div",{className:"rank-math-item-header"},wp.element.createElement(i.RichText,{tagName:c,className:"rank-math-faq-question rank-math-block-title"+m,value:n,onChange:function(t){e.setQuestionProp("title",t)},placeholder:(0,r.__)("Questionâ€¦","seo-by-rank-math")}),wp.element.createElement("div",{className:"rank-math-block-actions"},(0,g.applyFilters)("rank_math_block_faq_actions","",this.props,this),wp.element.createElement(a.Button,{className:"rank-math-item-visbility",icon:l?"visibility":"hidden",onClick:this.toggleVisibility,label:(0,r.__)("Hide Question","seo-by-rank-math"),showTooltip:!0}),wp.element.createElement(a.Button,{icon:"trash",className:"rank-math-item-delete",onClick:this.deleteQuestion,onKeyDown:this.handleDeleteKeyDown,label:(0,r.__)("Delete Question","seo-by-rank-math"),showTooltip:!0}))),wp.element.createElement("div",{className:"rank-math-item-content",ref:this.contentRef},wp.element.createElement(i.RichText,{tagName:"div",className:"rank-math-faq-answer "+p,value:o,onChange:function(t){e.setQuestionProp("content",t)},onKeyDown:this.handleAnswerKeyDown,placeholder:(0,r.__)("Enter the answer to the question","seo-by-rank-math")}),wp.element.createElement(i.MediaUpload,{allowedTypes:["image"],multiple:!1,value:s,render:function(t){var n=t.open;return wp.element.createElement(h,{imageID:s,sizeSlug:u,open:n,addImageRef:e.addImageRef,removeImage:function(){e.setQuestionProp("imageID",0)}})},onSelect:function(t){e.setQuestionProp("imageID",t.id)}})))}},{key:"setQuestionProp",value:function(e,t){var n=this.props,r=n.setAttributes,o=n.index,a=_(this.props.questions);a[o][e]=t,r({questions:a})}}])&&S(n.prototype,l),s&&S(n,s),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,l,s}(o.Component);const q=A,N=function(e){return"".concat(e,"-").concat((new Date).getTime())};function D(e){return function(e){if(Array.isArray(e))return I(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return I(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?I(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},T.apply(null,arguments)}n.dn(N);const B=function(e){var n=e.className,s=e.isSelected,u=e.attributes.textAlign,c=(0,i.useBlockProps)();return wp.element.createElement("div",c,wp.element.createElement("div",{id:"rank-math-faq",className:"rank-math-block "+n},s&&wp.element.createElement(f,e),s&&wp.element.createElement(o.Fragment,null,wp.element.createElement(i.BlockControls,null,wp.element.createElement(i.AlignmentToolbar,{value:u,onChange:function(t){return e.setAttributes({textAlign:t})}}))),wp.element.createElement("ul",{style:{textAlign:u}},function(e){var n=e.attributes,r=n.sizeSlug,o=n.titleWrapper,a=n.titleCssClasses,i=n.contentCssClasses,l=e.attributes.questions;return(0,t.isEmpty)(l)&&(l=[{id:N("faq-question"),title:"",content:"",visible:!0}],e.setAttributes({questions:l})),l.map(function(t,n){return wp.element.createElement("li",{key:t.id},wp.element.createElement(q,T({},t,{index:n,key:t.id+"-question",questions:l,setAttributes:e.setAttributes,sizeSlug:r,titleWrapper:o,titleCssClasses:a,contentCssClasses:i})))})}(e)),wp.element.createElement(a.Button,{variant:"primary",onClick:function(){!function(e){var t=D(e.attributes.questions);t.push({id:N("faq-question"),title:"",content:"",visible:!0}),e.setAttributes({questions:t})}(e)}},(0,r.__)("Add New FAQ","seo-by-rank-math")),wp.element.createElement("a",{href:l("faq-schema-block","Add New FAQ"),rel:"noopener noreferrer",target:"_blank",title:(0,r.__)("More Info","seo-by-rank-math"),className:"rank-math-block-info"},wp.element.createElement(a.Dashicon,{icon:"info"}))))};n.dn(B);const z={from:[{type:"block",blocks:["yoast/faq-block"],transform:function(t){var n={titleWrapper:"h3",questions:t.questions.map(function(e){return{title:e.jsonQuestion,content:e.jsonAnswer,visible:!0}}),className:t.className};return(0,e.createBlock)("rank-math/faq-block",n)}}]},R=function(e){var n=e.attributes,r=n.questions,o=n.titleWrapper;return(0,t.isEmpty)(r)?null:wp.element.createElement("div",i.useBlockProps.save(),r.map(function(e,n){return(0,t.isEmpty)(e.title)||(0,t.isEmpty)(e.content)||!1===e.visible?null:wp.element.createElement("div",{className:"rank-math-faq-item",key:n},wp.element.createElement(i.RichText.Content,{tagName:o,value:e.title,className:"rank-math-question"}),wp.element.createElement(i.RichText.Content,{tagName:"div",value:e.content,className:"rank-math-answer"}))}))};n.dn(R),(0,e.registerBlockType)("rank-math/faq-block",{example:{attributes:{questions:[{visible:!0,titleWrapper:"div",title:"Question",content:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."}]}},edit:B,save:R,transforms:z})}()}();PK     ›ŠU]XgÃÄ.  .  D  includes/modules/schema/blocks/faq/assets/src/components/Question.jsnu „[µü¤        /**
 * External dependencies
 */
import classnames from 'classnames'

/**
 * Internal dependencies
 */
import MediaUploader from '@blocks/shared/MediaUploader'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { applyFilters } from '@wordpress/hooks'
import { Button } from '@wordpress/components'
import { Component, createRef } from '@wordpress/element'
import { RichText, MediaUpload } from '@wordpress/block-editor'

/**
 * A Question and answer pair within FAQ block.
 */
class Question extends Component {
	contentRef = createRef()

	addImageRef = createRef()

	/**
	 * Move focus to the answer input when tabbing forward from the delete button.
	 *
	 * @param {KeyboardEvent} event Keyboard event.
	 */
	handleDeleteKeyDown = ( event ) => {
		if ( event.key === 'Tab' && ! event.shiftKey ) {
			event.preventDefault()
			const contentArea = this.contentRef.current
			if ( contentArea ) {
				const focusable = contentArea.querySelector( '[contenteditable]' )
				if ( focusable ) {
					focusable.focus()
				}
			}
		}
	}

	/**
	 * Move focus to the Add Image button when tabbing forward from the answer input.
	 *
	 * @param {KeyboardEvent} event Keyboard event.
	 */
	handleAnswerKeyDown = ( event ) => {
		if ( event.key === 'Tab' && ! event.shiftKey ) {
			event.preventDefault()
			if ( this.addImageRef.current ) {
				this.addImageRef.current.focus()
			}
		}
	}

	/**
	 * Renders the component.
	 *
	 * @return {Component} Question editor.
	 */
	render() {
		const {
			title,
			content,
			visible,
			imageID,
			sizeSlug,
			titleWrapper,
			titleCssClasses,
			contentCssClasses,
		} = this.props
		const wrapperClasses = classnames( 'rank-math-question-wrapper', {
			'question-not-visible': ! visible,
		} )

		return (
			<div className={ wrapperClasses }>
				<div className="rank-math-item-header">
					<RichText
						tagName={ titleWrapper }
						className={
							'rank-math-faq-question rank-math-block-title' +
							titleCssClasses
						}
						value={ title }
						onChange={ ( newTitle ) => {
							this.setQuestionProp( 'title', newTitle )
						} }
						placeholder={ __( 'Questionâ€¦', 'seo-by-rank-math' ) }
					/>

					<div className="rank-math-block-actions">
						{ applyFilters( 'rank_math_block_faq_actions', '', this.props, this ) }

						<Button
							className="rank-math-item-visbility"
							icon={ visible ? 'visibility' : 'hidden' }
							onClick={ this.toggleVisibility }
							label={ __( 'Hide Question', 'seo-by-rank-math' ) }
							showTooltip={ true }
						/>

						<Button
							icon="trash"
							className="rank-math-item-delete"
							onClick={ this.deleteQuestion }
							onKeyDown={ this.handleDeleteKeyDown }
							label={ __( 'Delete Question', 'seo-by-rank-math' ) }
							showTooltip={ true }
						/>
					</div>
				</div>

				<div className="rank-math-item-content" ref={ this.contentRef }>
					<RichText
						tagName="div"
						className={ 'rank-math-faq-answer ' + contentCssClasses }
						value={ content }
						onChange={ ( newContent ) => {
							this.setQuestionProp( 'content', newContent )
						} }
						onKeyDown={ this.handleAnswerKeyDown }
						placeholder={ __(
							'Enter the answer to the question',
							'seo-by-rank-math'
						) }
					/>

					<MediaUpload
						allowedTypes={ [ 'image' ] }
						multiple={ false }
						value={ imageID }
						render={ ( { open } ) => (
							<MediaUploader
								imageID={ imageID }
								sizeSlug={ sizeSlug }
								open={ open }
								addImageRef={ this.addImageRef }
								removeImage={ () => {
									this.setQuestionProp( 'imageID', 0 )
								} }
							/>
						) }
						onSelect={ ( image ) => {
							this.setQuestionProp( 'imageID', image.id )
						} }
					/>
				</div>
			</div>
		)
	}

	/**
	 * Update question properties.
	 *
	 * @param {string} prop  Poperty name.
	 * @param {string} value Property value.
	 */
	setQuestionProp( prop, value ) {
		const { setAttributes, index } = this.props
		const questions = [ ...this.props.questions ]
		questions[ index ][ prop ] = value

		setAttributes( { questions } )
	}

	/**
	 * Toggle question visibility.
	 */
	toggleVisibility = () => {
		const { setAttributes, index } = this.props
		const questions = [ ...this.props.questions ]
		questions[ index ].visible = ! this.props.visible

		setAttributes( { questions } )
	}

	/**
	 * Delete question from block.
	 */
	deleteQuestion = () => {
		const { setAttributes, index } = this.props
		const questions = [ ...this.props.questions ]
		questions.splice( index, 1 )

		setAttributes( { questions } )
	}
}

export default Question
PK     ›ŠU]›†•å  å  E  includes/modules/schema/blocks/faq/assets/src/components/Inspector.jsnu „[µü¤        /**
 * External dependencies
 */
import { map } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { withSelect } from '@wordpress/data'
import { InspectorControls } from '@wordpress/block-editor'
import { PanelBody, SelectControl, TextControl } from '@wordpress/components'

/**
 * Format array of image sizes.
 *
 * @param  {Array} imageSizes Array of image sizes.
 * @return {Array} Formatted array.
 */
const getImageSizeOptions = ( imageSizes ) => {
	return map( imageSizes, ( { name, slug } ) => ( {
		value: slug,
		label: name,
	} ) )
}

/**
 * Adds controls to the editor sidebar to control params.
 *
 * @param {Object} props This component's props.
 */
const Inspector = ( { imageSizes, attributes, setAttributes } ) => {
	const imageSizeOptions = getImageSizeOptions( imageSizes )

	return (
		<InspectorControls key={ 'inspector' }>
			<PanelBody title={ __( 'FAQ Options', 'seo-by-rank-math' ) }>
				<SelectControl
					label={ __( 'List Style', 'seo-by-rank-math' ) }
					value={ attributes.listStyle }
					options={ [
						{
							value: '',
							label: __( 'None', 'seo-by-rank-math' ),
						},
						{
							value: 'numbered',
							label: __( 'Numbered', 'seo-by-rank-math' ),
						},
						{
							value: 'unordered',
							label: __( 'Unordered', 'seo-by-rank-math' ),
						},
					] }
					onChange={ ( listStyle ) => {
						setAttributes( { listStyle } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<SelectControl
					label={ __( 'Title Wrapper', 'seo-by-rank-math' ) }
					value={ attributes.titleWrapper }
					options={ [
						{ value: 'h2', label: __( 'H2', 'seo-by-rank-math' ) },
						{ value: 'h3', label: __( 'H3', 'seo-by-rank-math' ) },
						{ value: 'h4', label: __( 'H4', 'seo-by-rank-math' ) },
						{ value: 'h5', label: __( 'H5', 'seo-by-rank-math' ) },
						{ value: 'h6', label: __( 'H6', 'seo-by-rank-math' ) },
						{ value: 'p', label: __( 'P', 'seo-by-rank-math' ) },
						{ value: 'div', label: __( 'DIV', 'seo-by-rank-math' ) },
					] }
					onChange={ ( titleWrapper ) => {
						setAttributes( { titleWrapper } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<SelectControl
					label={ __( 'Image Size', 'seo-by-rank-math' ) }
					value={ attributes.sizeSlug }
					options={ imageSizeOptions }
					onChange={ ( sizeSlug ) => {
						setAttributes( { sizeSlug } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			</PanelBody>

			<PanelBody title={ __( 'Styling Options', 'seo-by-rank-math' ) }>
				<TextControl
					label={ __( 'Title Wrapper CSS Class(es)', 'seo-by-rank-math' ) }
					value={ attributes.titleCssClasses }
					onChange={ ( titleCssClasses ) => {
						setAttributes( { titleCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<TextControl
					label={ __( 'Content Wrapper CSS Class(es)', 'seo-by-rank-math' ) }
					value={ attributes.contentCssClasses }
					onChange={ ( contentCssClasses ) => {
						setAttributes( { contentCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>

				<TextControl
					label={ __( 'List CSS Class(es)', 'seo-by-rank-math' ) }
					value={ attributes.listCssClasses }
					onChange={ ( listCssClasses ) => {
						setAttributes( { listCssClasses } )
					} }
					__next40pxDefaultSize={ true }
					__nextHasNoMarginBottom={ true }
				/>
			</PanelBody>
		</InspectorControls>
	)
}

export default withSelect( ( select, props ) => {
	const { getSettings } = select( 'core/block-editor' )
	const { imageSizes } = getSettings()

	return {
		...props,
		imageSizes,
	}
} )( Inspector )
PK     ›ŠU]µƒtYé  é  5  includes/modules/schema/blocks/faq/assets/src/save.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty } from 'lodash'

/**
 * WordPress dependencies
 */
import { RichText, useBlockProps } from '@wordpress/block-editor'

/**
 * Save block for display on front
 *
 * @param {Object} props This component's props.
 */
export default ( props ) => {
	const { questions, titleWrapper } = props.attributes

	if ( isEmpty( questions ) ) {
		return null
	}

	return (
		<div { ...useBlockProps.save() }>
			{ questions.map( ( question, index ) => {
				if (
					isEmpty( question.title ) ||
					isEmpty( question.content ) ||
					false === question.visible
				) {
					return null
				}

				return (
					<div className="rank-math-faq-item" key={ index }>
						<RichText.Content
							tagName={ titleWrapper }
							value={ question.title }
							className="rank-math-question"
						/>

						<RichText.Content
							tagName="div"
							value={ question.content }
							className="rank-math-answer"
						/>
					</div>
				)
			} ) }
		</div>
	)
}
PK     ›ŠU]aï?€k  k  ;  includes/modules/schema/blocks/faq/assets/src/transforms.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { createBlock } from '@wordpress/blocks'

/**
 * Transform yoast faq block.
 *
 * @type {Array}
 */
export default {
	from: [
		{
			type: 'block',
			blocks: [ 'yoast/faq-block' ],
			transform: ( yoast ) => {
				const questions = yoast.questions.map( ( question ) => {
					return {
						title: question.jsonQuestion,
						content: question.jsonAnswer,
						visible: true,
					}
				} )

				const attributes = {
					titleWrapper: 'h3',
					questions,
					className: yoast.className,
				}

				return createBlock( 'rank-math/faq-block', attributes )
			},
		},
	],
}
PK     ›ŠU]Ù�Óä»  »  5  includes/modules/schema/blocks/faq/assets/src/edit.jsnu „[µü¤        /**
 * External dependencies
 */
import { isEmpty } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Fragment } from '@wordpress/element'
import { Button, Dashicon } from '@wordpress/components'
import { BlockControls, AlignmentToolbar, useBlockProps } from '@wordpress/block-editor'

/**
 * Internal dependencies
 */
import getLink from '@helpers/getLink'
import Inspector from './components/Inspector'
import Question from './components/Question'
import generateId from '@helpers/generateId'

/**
 * Render Quetion component.
 *
 * @param {Object} props Block attributes
 *
 * @return {Array} Array of question editor.
 */
const renderQuestions = ( props ) => {
	const {
		sizeSlug,
		titleWrapper,
		titleCssClasses,
		contentCssClasses,
	} = props.attributes
	let { questions } = props.attributes
	if ( isEmpty( questions ) ) {
		questions = [
			{
				id: generateId( 'faq-question' ),
				title: '',
				content: '',
				visible: true,
			},
		]
		props.setAttributes( { questions } )
	}

	return questions.map( ( question, index ) => {
		return (
			<li key={ question.id }>
				<Question
					{ ...question }
					index={ index }
					key={ question.id + '-question' }
					questions={ questions }
					setAttributes={ props.setAttributes }
					sizeSlug={ sizeSlug }
					titleWrapper={ titleWrapper }
					titleCssClasses={ titleCssClasses }
					contentCssClasses={ contentCssClasses }
				/>
			</li>
		)
	} )
}

/**
 * Add an empty Question into block.
 *
 * @param {Object} props Block props.
 */
const addNew = ( props ) => {
	const questions = [ ...props.attributes.questions ]
	questions.push( {
		id: generateId( 'faq-question' ),
		title: '',
		content: '',
		visible: true,
	} )

	props.setAttributes( { questions } )
}

/**
 * FAQ block edit component.
 *
 * @param {Object} props Block props.
 */
export default ( props ) => {
	const { className, isSelected } = props
	const { textAlign } = props.attributes
	const blockProps = useBlockProps()

	return (
		<div { ...blockProps }>
			<div
				id="rank-math-faq"
				className={ 'rank-math-block ' + className }
			>
				{ isSelected && <Inspector { ...props } /> }
				{ isSelected && (
					<Fragment>
						<BlockControls>
							<AlignmentToolbar
								value={ textAlign }
								onChange={ ( nextTextAlignment ) =>
									props.setAttributes( {
										textAlign: nextTextAlignment,
									} )
								}
							/>
						</BlockControls>
					</Fragment>
				) }

				<ul style={ { textAlign } }>{ renderQuestions( props ) }</ul>

				<Button
					variant="primary"
					onClick={ () => {
						addNew( props )
					} }
				>
					{ __( 'Add New FAQ', 'seo-by-rank-math' ) }
				</Button>

				<a
					href={ getLink( 'faq-schema-block', 'Add New FAQ' ) }
					rel="noopener noreferrer"
					target="_blank"
					title={ __( 'More Info', 'seo-by-rank-math' ) }
					className={ 'rank-math-block-info' }
				>
					<Dashicon icon="info" />
				</a>
			</div>
		</div>
	)
}

PK     ›ŠU]øÜ®9p  p  6  includes/modules/schema/blocks/faq/assets/src/index.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { registerBlockType } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import example from './example'
import edit from './edit'
import transforms from './transforms'
import save from './save'

/**
 * Register FAQ block.
 */
registerBlockType(
	'rank-math/faq-block',
	{
		example,
		edit,
		save,
		transforms,
	}
)
PK     ›ŠU]Öh¬É`  `  8  includes/modules/schema/blocks/faq/assets/src/example.jsnu „[µü¤        /**
 * FAQ eample for in block preview pane.
 *
 * @type {Object}
 */
export default {
	attributes: {
		questions: [
			{
				visible: true,
				titleWrapper: 'div',
				title: 'Question',
				content:
					'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
			},
		],
	},
}
PK     ›ŠU]'úV!é  é  6  includes/modules/schema/blocks/faq/class-block-faq.phpnu „[µü¤        <?php
/**
 * The Faq Block
 *
 * @since      1.0.233
 * @package    RankMath
 * @subpackage RankMath\Faq
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use WP_Block_Type_Registry;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Faq Block class.
 */
class Block_FAQ extends Block {

	use Hooker;

	/**
	 * Block type name.
	 *
	 * @var string
	 */
	private $block_type = 'rank-math/faq-block';

	/**
	 * The single instance of the class.
	 *
	 * @var Block_FAQ
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_FAQ instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Block_FAQ
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Block_FAQ ) ) {
			self::$instance = new Block_FAQ();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( WP_Block_Type_Registry::get_instance()->is_registered( $this->block_type ) ) {
			return;
		}

		register_block_type(
			RANK_MATH_PATH . 'includes/modules/schema/blocks/faq/block.json',
			[
				'render_callback' => [ $this, 'render' ],
			]
		);

		add_filter( 'rank_math/schema/block/faq-block', [ $this, 'add_graph' ], 10, 2 );
	}


	/**
	 * Add FAQ schema data in JSON-LD array.
	 *
	 * @param array $data  Array of JSON-LD data.
	 * @param array $block JsonLD Instance.
	 *
	 * @return array
	 */
	public function add_graph( $data, $block ) {
		// Early bail.
		if ( ! $this->has_questions( $block['attrs'] ) ) {
			return $data;
		}

		if ( ! isset( $data['faqs'] ) ) {
			$data['faqs'] = [
				'@type'      => 'FAQPage',
				'mainEntity' => [],
			];
		}

		$permalink = get_permalink() . '#';
		foreach ( $block['attrs']['questions'] as $question ) {
			if ( empty( $question['title'] ) || empty( $question['content'] ) || empty( $question['visible'] ) ) {
				continue;
			}

			$question['title']   = do_shortcode( $question['title'] );
			$question['content'] = do_shortcode( $question['content'] );

			if ( empty( $question['id'] ) ) {
				$question['id'] = 'rm-faq-' . md5( $question['title'] );
			}

			$data['faqs']['mainEntity'][] = [
				'@type'          => 'Question',
				'url'            => esc_url( $permalink . $question['id'] ),
				'name'           => wp_strip_all_tags( $question['title'] ),
				'acceptedAnswer' => [
					'@type' => 'Answer',
					'text'  => $this->clean_text( $question['content'] ),
				],
			];
		}

		return $data;
	}

	/**
	 * Render block content.
	 *
	 * @param array $attributes Array of attributes.
	 * @return string
	 */
	public static function markup( $attributes = [] ) {
		$list_tag = self::get()->get_list_style( $attributes['listStyle'] );
		$item_tag = self::get()->get_list_item_style( $attributes['listStyle'] );
		$class    = 'rank-math-block';
		if ( ! empty( $attributes['className'] ) ) {
			$class .= ' ' . esc_attr( $attributes['className'] );
		}

		// HTML.
		$out   = [];
		$out[] = sprintf( '<div id="rank-math-faq" class="%1$s"%2$s>', $class, self::get()->get_styles( $attributes ) );
		$out[] = sprintf( '<%1$s class="rank-math-list %2$s">', $list_tag, esc_attr( $attributes['listCssClasses'] ) );

		// Questions.
		foreach ( $attributes['questions'] as $question ) {
			if ( empty( $question['title'] ) || empty( $question['content'] ) || empty( $question['visible'] ) ) {
				continue;
			}

			if ( empty( $question['id'] ) ) {
				$question['id'] = 'rm-faq-' . md5( $question['title'] );
			}

			$out[] = sprintf( '<%1$s id="%2$s" class="rank-math-list-item">', $item_tag, esc_attr( $question['id'] ) );

			$out[] = sprintf(
				'<%1$s class="rank-math-question %2$s">%3$s</%1$s>',
				self::get()->get_title_wrapper( $attributes['titleWrapper'] ),
				esc_attr( $attributes['titleCssClasses'] ),
				wp_kses_post( $question['title'] )
			);

			$out[] = '<div class="rank-math-answer ' . esc_attr( $attributes['contentCssClasses'] ) . '">';

			if ( ! empty( $question['imageUrl'] ) ) {
				$out[] = '<img src="' . esc_url( $question['imageUrl'] ) . '" />';
			} else {
				$out[] = self::get()->get_image( $question, $attributes['sizeSlug'] );
			}

			$out[] = self::get()->normalize_text( $question['content'], 'faq' );
			$out[] = '</div>';

			$out[] = sprintf( '</%1$s>', $item_tag );
		}

		$out[] = sprintf( '</%1$s>', $list_tag );
		$out[] = '</div>';

		return apply_filters(
			'rank_math/schema/block/faq/content',
			wp_kses_post( join( "\n", $out ) ),
			$out,
			$attributes
		);
	}

	/**
	 * Render block content
	 *
	 * @param array $attributes Array of attributes.
	 *
	 * @return string
	 */
	public function render( $attributes ) {
		// Early bail.
		if ( ! $this->has_questions( $attributes ) ) {
			return '';
		}

		return self::markup( $attributes );
	}

	/**
	 * Check if FAQ block has questions data.
	 *
	 * @param array $attributes Array of attributes.
	 *
	 * @return boolean
	 */
	private function has_questions( $attributes ) {
		return ! isset( $attributes['questions'] ) || empty( $attributes['questions'] ) ? false : true;
	}
}
PK     ›ŠU]Á¨—-  -  5  includes/modules/schema/blocks/shared/ImagePreview.jsnu „[µü¤        /**
 * Internal dependencies
 */
import { getImageByID } from '@helpers/imageHelper'

/**
 * WordPress dependencies
 */
import { withSelect } from '@wordpress/data'

/**
 * Render image from image id.
 *
 * @param {string} imageUrl Image url.
 */
const ImagePreview = ( { imageUrl } ) => {
	if ( ! imageUrl ) {
		return null
	}

	return <img src={ imageUrl } alt="" />
}

export default withSelect( ( select, props ) => {
	const { imageID, sizeSlug } = props

	return {
		imageUrl: imageID ? getImageByID( imageID, sizeSlug ) : null,
	}
} )( ImagePreview )
PK     ›ŠU]³Ê+¶    6  includes/modules/schema/blocks/shared/MediaUploader.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Button } from '@wordpress/components'

/**
 * Internal dependencies
 */
import ImagePreview from '@blocks/shared/ImagePreview'

/**
 * Media uploader component.
 *
 * @param {Object}   props                This component's props.
 * @param {number}   props.imageID        The ID of the image to display.
 * @param {string}   props.sizeSlug       The size of the image to display.
 * @param {Function} props.open           Function to open the media library.
 * @param {Function} props.removeImage    Function to remove the image.
 * @param {string}   props.addButtonLabel Label for the add image button.
 * @param {Object}   props.addImageRef    Ref for the add image button.
 */
const MediaUploader = ( {
	imageID,
	sizeSlug,
	open,
	removeImage,
	addButtonLabel = __( 'Add Image', 'seo-by-rank-math' ),
	addImageRef,
} ) => {
	return (
		<div className="rank-math-media-placeholder">
			{ imageID > 0 && (
				<ImagePreview imageID={ imageID } sizeSlug={ sizeSlug } />
			) }
			{ imageID > 0 ? (
				<Button
					ref={ addImageRef }
					icon="edit"
					className="rank-math-replace-image"
					onClick={ open }
				/>
			) : (
				<Button
					ref={ addImageRef }
					onClick={ open }
					className="rank-math-add-image"
					isPrimary
				>
					{ addButtonLabel }
				</Button>
			) }
			{ imageID > 0 && (
				<Button
					icon="no-alt"
					className="rank-math-delete-image"
					onClick={ removeImage }
				/>
			) }
		</div>
	)
}

export default MediaUploader
PK     ›ŠU]�£|‹  ‹  .  includes/modules/schema/blocks/class-block.phpnu „[µü¤        <?php
/**
 * The Block Base
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Block class.
 */
class Block {

	/**
	 * Function to certain tags from the text.
	 *
	 * @param string $text Block content.
	 *
	 * @return string
	 */
	protected function clean_text( $text ) {
		return strip_tags( $text, '<h1><h2><h3><h4><h5><h6><br><ol><ul><li><a><p><b><strong><i><em>' );
	}

	/**
	 * Function to get the block image.
	 *
	 * @param array  $attrs       Block attributes data.
	 * @param string $size        Image size.
	 * @param string $image_class Attachment image class.
	 *
	 * @return string The HTML image element.
	 */
	protected function get_image( $attrs, $size = 'thumbnail', $image_class = 'class=alignright' ) {
		$image_id = empty( $attrs['imageID'] ) ? '' : absint( $attrs['imageID'] );
		if ( ! $image_id ) {
			return '';
		}

		$html = wp_get_attachment_image( $image_id, $size, false, $image_class );

		return $html ? $html : wp_get_attachment_image( $image_id, 'full', false, $image_class );
	}

	/**
	 * Get styles
	 *
	 * @param array $attributes Array of attributes.
	 *
	 * @return string
	 */
	protected function get_styles( $attributes ) {
		return empty( $attributes['textAlign'] ) || ! in_array( $attributes['textAlign'], [ 'right', 'center' ], true )
			? ''
			: ' style="text-align:' . $attributes['textAlign'] . '"';
	}

	/**
	 * Get list style
	 *
	 * @param string $style Style.
	 *
	 * @return string
	 */
	protected function get_list_style( $style ) {
		if ( 'numbered' === $style ) {
			return 'ol';
		}

		return 'unordered' === $style ? 'ul' : 'div';
	}

	/**
	 * Get list item style
	 *
	 * @param string $style Style.
	 *
	 * @return string
	 */
	protected function get_list_item_style( $style ) {
		return in_array( $style, [ 'numbered', 'unordered' ], true ) ? 'li' : 'div';
	}

	/**
	 * Get title wrapper tag.
	 *
	 * @param string $title_wrapper Title wrapper attribute.
	 * @param string $block         Block name.
	 */
	protected function get_title_wrapper( $title_wrapper, $block = 'faq' ) {
		$wrapper = in_array( $title_wrapper, [ 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'div' ], true ) ? $title_wrapper : 'h2';

		return apply_filters( "rank_math/blocks/{$block}/title_wrapper", $wrapper );
	}

	/**
	 * Normalize the block text.
	 *
	 * @param string $text  Text.
	 * @param string $block Block name.
	 *
	 * @return string
	 */
	protected function normalize_text( $text, $block ) {
		/**
		 * Filter: Allow developers to preserve line breaks.
		 *
		 * @param bool   $return If set, this will convert all remaining line breaks after paragraphing.
		 * @param string $block  Block name.
		 */
		return wpautop( wp_kses_post( $text ), apply_filters( 'rank_math/block/preserve_line_breaks', true, $block ) );
	}
}
PK     ›ŠU]Æ<j2  2  5  includes/modules/schema/blocks/class-block-parser.phpnu „[µü¤        <?php
/**
 * The Block Parser
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Block_Parser class.
 */
class Block_Parser {

	use Hooker;

	/**
	 * Holds the parsed blocks.
	 *
	 * @var array
	 */
	private $blocks = [];

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/json_ld', 'parse', 8 );
	}

	/**
	 * Filter function to add Blocks data in schema.
	 *
	 * @param array $data Array of JSON-LD data.
	 *
	 * @return array
	 */
	public function parse( $data ) {
		if ( ! function_exists( 'parse_blocks' ) || ! is_singular() ) {
			return $data;
		}

		$this->get_parsed_blocks();
		foreach ( $this->blocks as $block_type => $blocks ) {
			foreach ( $blocks as $block ) {
				/**
				 * Filter: 'rank_math/schema/block/<block-type>' - Allows filtering graph output per block.
				 *
				 * @param array $data  Array of JSON-LD data.
				 * @param array $block The block.
				 */
				$data = $this->do_filter( 'schema/block/' . $block_type, $data, $block );
			}
		}

		return $data;
	}

	/**
	 * Parse the blocks and loop through them.
	 */
	private function get_parsed_blocks() {
		$post          = get_post();
		$parsed_blocks = parse_blocks( $post->post_content );

		/**
		 * Filter: 'rank_math/schema/block/before_filter'
		 *
		 * @param array $parsed_blocks Array of parsed blocks.
		 */
		$parsed_blocks = $this->do_filter( 'schema/block/before_filter', $parsed_blocks );

		$this->filter_blocks( $parsed_blocks );
	}

	/**
	 * Filter blocks.
	 *
	 * @param array $blocks Blocks to filter.
	 */
	private function filter_blocks( $blocks ) {
		foreach ( $blocks as $block ) {
			if ( $this->is_nested_block( $block ) || ! $this->is_valid_block( $block ) ) {
				continue;
			}

			$name = \str_replace( 'rank-math/', '', $block['blockName'] );
			$name = strtolower( $name );
			if ( ! isset( $this->blocks[ $name ] ) || ! is_array( $this->blocks[ $name ] ) ) {
				$this->blocks[ $name ] = [];
			}

			$this->blocks[ $name ][] = $block;
		}
	}

	/**
	 * Is nested block.
	 *
	 * @param array $block Block.
	 *
	 * @return boolean
	 */
	private function is_nested_block( $block ) {
		if ( empty( $block['blockName'] ) ) {
			return false;
		}

		/**
		 * Filter: 'rank_math/schema/nested_blocks' - Allows filtering for nested blocks.
		 *
		 * @param array $data  Array of JSON-LD data.
		 * @param array $block The block.
		 */
		$nested = $this->do_filter(
			'schema/nested_blocks',
			[
				'core/group',
				'core/columns',
				'core/column',
			]
		);

		if ( ! in_array( $block['blockName'], $nested, true ) ) {
			return false;
		}

		$this->filter_blocks( $block['innerBlocks'] );

		return true;
	}

	/**
	 * Is block valid.
	 *
	 * @param array $block Block.
	 *
	 * @return boolean
	 */
	private function is_valid_block( $block ) {
		return ! empty( $block['blockName'] ) && Str::starts_with( 'rank-math', $block['blockName'] );
	}
}
PK     ›ŠU]9©ì«  «  (  includes/modules/schema/class-blocks.phpnu „[µü¤        <?php
/**
 * The Schema Blocks
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Schema
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Schema;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Blocks class.
 */
class Blocks {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init' );

		$filter = version_compare( get_bloginfo( 'version' ), '5.8', '>=' ) ? 'block_categories_all' : 'block_categories';
		$this->filter( $filter, 'block_categories' );
		$this->action( 'enqueue_block_editor_assets', 'editor_assets' ); // Backend.
	}

	/**
	 * Init blocks.
	 */
	public function init() {
		if ( ! function_exists( 'register_block_type' ) ) {
			return;
		}

		wp_register_style( 'rank-math-common', rank_math()->plugin_url() . 'assets/admin/css/common.css', null, rank_math()->version );
		wp_register_style(
			'rank-math-block-admin',
			rank_math()->plugin_url() . 'assets/admin/css/blocks.css',
			[
				'rank-math-common',
				'dashicons',
			],
			rank_math()->version
		);

		new Blocks\Admin();
		new Block_FAQ();
		new Block_HowTo();
		new Block_TOC();
		new Block_Schema();
	}

	/**
	 * Create a new (Rank Math) block category.
	 *
	 * @param array|null $categories Array of block categories.
	 *
	 * @return array
	 */
	public function block_categories( $categories ) {
		$categories = empty( $categories ) ? [] : $categories;
		return array_merge(
			$categories,
			[
				[
					'slug'  => 'rank-math-blocks',
					'title' => __( 'Rank Math', 'seo-by-rank-math' ),
					'icon'  => 'wordpress',
				],
			]
		);
	}

	/**
	 * Enqueue Styles and Scripts required for blocks at backend.
	 */
	public function editor_assets() {
		if ( ! $this->is_block_faq() && ! $this->is_block_howto() ) {
			return;
		}

		Helper::add_json(
			'blocks',
			[
				'faq'   => $this->is_block_faq(),
				'howTo' => $this->is_block_howto(),
			]
		);
	}

	/**
	 * Is FAQ Block enabled.
	 *
	 * @return boolean
	 */
	private function is_block_faq() {
		return true;
	}

	/**
	 * Is HowTo Block enabled.
	 *
	 * @return boolean
	 */
	private function is_block_howto() {
		return true;
	}
}
PK     ›ŠU]ŒÛ      $  includes/modules/local-seo/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ›ŠU]ŒÛ      *  includes/modules/local-seo/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ›ŠU]ÆÔÿ‘Ê)  Ê)  3  includes/modules/local-seo/views/titles-options.phpnu „[µü¤        <?php
/**
 * The local SEO settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Local_Seo
 */

use RankMath\Helper;
use RankMath\KB;

defined( 'ABSPATH' ) || exit;

$rank_math_company = [ [ 'knowledgegraph_type', 'company' ] ];
$rank_math_person  = [ [ 'knowledgegraph_type', 'person' ] ];

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_type',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Person or Company', 'seo-by-rank-math' ),
		'options' => [
			'person'  => esc_html__( 'Person', 'seo-by-rank-math' ),
			'company' => esc_html__( 'Organization', 'seo-by-rank-math' ),
		],
		'desc'    => esc_html__( 'Choose whether the site represents a person or an organization.', 'seo-by-rank-math' ),
		'default' => 'person',
	]
);

$cmb->add_field(
	[
		'id'      => 'website_name',
		'type'    => 'text',
		'name'    => esc_html__( 'Website Name', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enter the name of your site to appear in search results.', 'seo-by-rank-math' ),
		'default' => get_bloginfo( 'name' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'website_alternate_name',
		'type' => 'text',
		'name' => esc_html__( 'Website Alternate Name', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'An alternate version of your site name (for example, an acronym or shorter name).', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_name',
		'type'    => 'text',
		'name'    => esc_html__( 'Person/Organization Name', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Your name or company name intended to feature in Google\'s Knowledge Panel.', 'seo-by-rank-math' ),
		'default' => get_bloginfo( 'name' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'organization_description',
		'type' => 'textarea_small',
		'name' => esc_html__( 'Description', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Provide a detailed description of your organization.', 'seo-by-rank-math' ),
		'dep'  => $rank_math_company,
	]
);

$cmb->add_field(
	[
		'id'      => 'knowledgegraph_logo',
		'type'    => 'file',
		'name'    => esc_html__( 'Logo', 'seo-by-rank-math' ),
		'desc'    => __( '<strong>Min Size: 112Î§112px</strong>.<br /> A squared image is preferred by the search engines.', 'seo-by-rank-math' ),
		'options' => [ 'url' => false ],
	]
);

$cmb->add_field(
	[
		'id'      => 'url',
		'type'    => 'text_url',
		'name'    => esc_html__( 'URL', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'URL of your website or your companyâ€™s website.', 'seo-by-rank-math' ),
		'default' => home_url(),
	]
);

$cmb->add_field(
	[
		'id'   => 'email',
		'type' => 'text',
		'name' => esc_html__( 'Email', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Enter the contact email address that could be displayed on search engines.', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'   => 'phone',
		'type' => 'text',
		'name' => esc_html__( 'Phone', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Search engines may prominently display your contact phone number for mobile users.', 'seo-by-rank-math' ),
		'dep'  => $rank_math_person,
	]
);

$cmb->add_field(
	[
		'id'   => 'local_address',
		'type' => 'address',
		'name' => esc_html__( 'Address', 'seo-by-rank-math' ),
	]
);

$cmb->add_field(
	[
		'id'         => 'local_address_format',
		'type'       => 'textarea_small',
		'name'       => esc_html__( 'Address Format', 'seo-by-rank-math' ),
		'desc'       => wp_kses_post( __( 'Format used when the address is displayed using the <code>[rank_math_contact_info]</code> shortcode.<br><strong>Available Tags: {address}, {locality}, {region}, {postalcode}, {country}, {gps}</strong>', 'seo-by-rank-math' ) ),
		'default'    => '{address} {locality}, {region} {postalcode}',
		'classes'    => 'rank-math-address-format',
		'attributes' => [
			'rows'        => 2,
			'placeholder' => '{address} {locality}, {region} {country}. {postalcode}.',
		],
		'dep'        => $rank_math_company,
	]
);

$cmb->add_field(
	[
		'id'         => 'local_business_type',
		'type'       => 'select',
		'name'       => esc_html__( 'Business Type', 'seo-by-rank-math' ),
		'options'    => Helper::choices_business_types( true ),
		'attributes' => ( 'data-s2' ),
		'dep'        => $rank_math_company,
	]
);

$cmb->add_field(
	[
		'id'      => 'opening_hours_format',
		'type'    => 'switch',
		'name'    => esc_html__( 'Opening Hours Format', 'seo-by-rank-math' ),
		'options' => [
			'off' => '24:00',
			'on'  => '12:00',
		],
		'desc'    => esc_html__( 'Time format used in the contact shortcode.', 'seo-by-rank-math' ),
		'default' => 'off',
		'dep'     => $rank_math_company,
	]
);

$rank_math_opening_hours = $cmb->add_field(
	[
		'id'      => 'opening_hours',
		'type'    => 'group',
		'name'    => esc_html__( 'Opening Hours', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Select opening hours. You can add multiple sets if you have different opening or closing hours on some days or if you have a mid-day break. Times are specified using 24:00 time.', 'seo-by-rank-math' ),
		'options' => [
			'add_button'    => esc_html__( 'Add time', 'seo-by-rank-math' ),
			'remove_button' => esc_html__( 'Remove', 'seo-by-rank-math' ),
		],
		'dep'     => $rank_math_company,
		'classes' => 'cmb-group-text-only',
	]
);

$cmb->add_group_field(
	$rank_math_opening_hours,
	[
		'id'      => 'day',
		'type'    => 'select',
		'options' => [
			'Monday'    => esc_html__( 'Monday', 'seo-by-rank-math' ),
			'Tuesday'   => esc_html__( 'Tuesday', 'seo-by-rank-math' ),
			'Wednesday' => esc_html__( 'Wednesday', 'seo-by-rank-math' ),
			'Thursday'  => esc_html__( 'Thursday', 'seo-by-rank-math' ),
			'Friday'    => esc_html__( 'Friday', 'seo-by-rank-math' ),
			'Saturday'  => esc_html__( 'Saturday', 'seo-by-rank-math' ),
			'Sunday'    => esc_html__( 'Sunday', 'seo-by-rank-math' ),
		],
	]
);

$cmb->add_group_field(
	$rank_math_opening_hours,
	[
		'id'          => 'time',
		'type'        => 'text',
		'attributes'  => [ 'placeholder' => esc_html__( 'e.g. 09:00-17:00', 'seo-by-rank-math' ) ],
		'time_format' => 'H:i',
	]
);

$rank_math_phones = $cmb->add_field(
	[
		'id'      => 'phone_numbers',
		'type'    => 'group',
		'name'    => esc_html__( 'Phone Number', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Search engines may prominently display your contact phone number for mobile users.', 'seo-by-rank-math' ),
		'options' => [
			'add_button'    => esc_html__( 'Add number', 'seo-by-rank-math' ),
			'remove_button' => esc_html__( 'Remove', 'seo-by-rank-math' ),
		],
		'dep'     => $rank_math_company,
		'classes' => 'cmb-group-text-only',
	]
);

$cmb->add_group_field(
	$rank_math_phones,
	[
		'id'      => 'type',
		'type'    => 'select',
		'options' => Helper::choices_phone_types(),
		'default' => 'customer_support',
	]
);

$cmb->add_group_field(
	$rank_math_phones,
	[
		'id'         => 'number',
		'type'       => 'text',
		'attributes' => [ 'placeholder' => esc_html__( 'Format: +1-401-555-1212', 'seo-by-rank-math' ) ],
	]
);

$cmb->add_field(
	[
		'id'   => 'price_range',
		'type' => 'text',
		'name' => esc_html__( 'Price Range', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'The price range of the business, for example $$$.', 'seo-by-rank-math' ),
		'dep'  => $rank_math_company,
	]
);

$rank_math_additional_info = $cmb->add_field(
	[
		'id'      => 'additional_info',
		'type'    => 'group',
		'name'    => esc_html__( 'Additional Info', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Provide relevant details of your company to include in the Organization Schema.', 'seo-by-rank-math' ),
		'options' => [
			'add_button'    => esc_html__( 'Add', 'seo-by-rank-math' ),
			'remove_button' => esc_html__( 'Remove', 'seo-by-rank-math' ),
		],
		'dep'     => $rank_math_company,
		'classes' => 'cmb-group-text-only',
	]
);

$cmb->add_group_field(
	$rank_math_additional_info,
	[
		'id'      => 'type',
		'type'    => 'select',
		'options' => Helper::choices_additional_organization_info(),
		'default' => '',
	]
);

$cmb->add_group_field(
	$rank_math_additional_info,
	[
		'id'   => 'value',
		'type' => 'text',
	]
);

$rank_math_about_page    = Helper::get_settings( 'titles.local_seo_about_page' );
$rank_math_about_options = [ '' => __( 'Select Page', 'seo-by-rank-math' ) ];

if ( $rank_math_about_page ) {
	$rank_math_about_options[ $rank_math_about_page ] = get_the_title( $rank_math_about_page );
}

$cmb->add_field(
	[
		'id'         => 'local_seo_about_page',
		'type'       => 'select',
		'options'    => $rank_math_about_options,
		'name'       => esc_html__( 'About Page', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Select a page on your site where you want to show the LocalBusiness meta data.', 'seo-by-rank-math' ),
		'attributes' => ( 'data-s2-pages' ),
	]
);

$rank_math_contact_page    = Helper::get_settings( 'titles.local_seo_contact_page' );
$rank_math_contact_options = [ '' => __( 'Select Page', 'seo-by-rank-math' ) ];

if ( $rank_math_contact_page ) {
	$rank_math_contact_options[ $rank_math_contact_page ] = get_the_title( $rank_math_contact_page );
}

$cmb->add_field(
	[
		'id'         => 'local_seo_contact_page',
		'type'       => 'select',
		'options'    => $rank_math_contact_options,
		'name'       => esc_html__( 'Contact Page', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Select a page on your site where you want to show the LocalBusiness meta data.', 'seo-by-rank-math' ),
		'attributes' => ( 'data-s2-pages' ),
	]
);

$cmb->add_field(
	[
		'id'         => 'maps_api_key',
		'type'       => 'text',
		'name'       => esc_html__( 'Google Maps API Key', 'seo-by-rank-math' ),
		/* translators: %s expands to "Google Maps Embed API" https://developers.google.com/maps/documentation/embed/ */
		'desc'       => sprintf( esc_html__( 'An API Key is required to display embedded Google Maps on your site. Get it here: %s', 'seo-by-rank-math' ), '<a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_blank">' . __( 'Google Maps Embed API', 'seo-by-rank-math' ) . '</a>' ),
		'dep'        => $rank_math_company,
		'attributes' => [ 'type' => 'password' ],
	]
);

$cmb->add_field(
	[
		'id'    => 'geo',
		'type'  => 'text',
		'name'  => esc_html__( 'Geo Coordinates', 'seo-by-rank-math' ),
		'desc'  => esc_html__( 'Latitude and longitude values separated by comma.', 'seo-by-rank-math' ),
		'dep'   => $rank_math_company,
		/* Translators: placeholder is a link to the Pro version */
		'after' => '<strong style="margin-top:20px; display:block; text-align:right;">' . sprintf( __( 'Multiple Locations are available in the %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'pro', 'Multiple Location Notice' ) . '" target="_blank">PRO Version</a>' ) . '</strong>',
	]
);
PK     ›ŠU]wpÀ#È"  È"  -  includes/modules/local-seo/class-kml-file.phpnu „[µü¤        <?php
/**
 * The KML File.
 *
 * @since      1.0.24
 * @package    RankMath
 * @subpackage RankMath\Local_Seo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Local_Seo;

use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Sitemap\Router;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * KML_File class.
 */
class KML_File {

	use Ajax;
	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init', 1 );
		$this->filter( 'rank_math/sitemap/http_headers', 'remove_x_robots_tag' );
		$this->filter( 'rank_math/sitemap/index', 'add_local_sitemap' );
		$this->filter( 'rank_math/sitemap/local/content', 'local_sitemap_content' );
		$this->filter( 'rank_math/sitemap/locations/content', 'kml_file_content' );
		$this->action( 'cmb2_save_options-page_fields_rank-math-options-titles_options', 'update_sitemap', 25, 2 );
		$this->action( 'rank_math/settings/before_save', 'before_settings_save', 25, 2 );
	}

	/**
	 * Set up rewrite rules.
	 */
	public function init() {
		add_rewrite_rule( Router::get_sitemap_base() . 'locations\.kml$', 'index.php?sitemap=locations', 'top' );
	}

	/**
	 * Filter function to remove x-robots tag from Locations KML file.
	 *
	 * @param array $headers HTTP headers.
	 */
	public function remove_x_robots_tag( $headers ) {
		if ( ! isset( $headers['X-Robots-Tag'] ) ) {
			return $headers;
		}

		$url = array_filter( explode( '/', Param::server( 'REQUEST_URI' ) ) );
		if ( 'locations.kml' !== end( $url ) ) {
			return $headers;
		}

		unset( $headers['X-Robots-Tag'] );
		return $headers;
	}

	/**
	 * Add the Local SEO Sitemap to the sitemap index.
	 *
	 * @param string $xml String to append to sitemaps index.
	 *
	 * @return string $xml The sitemap index with the Local SEO Sitemap added.
	 */
	public function add_local_sitemap( $xml ) {
		$item = $this->do_filter(
			'sitemap/index/entry',
			[
				'loc'     => Router::get_base_url( 'local-sitemap.xml' ),
				'lastmod' => $this->get_modified_date(),
			],
			'local',
		);

		if ( ! $item ) {
			return $xml;
		}

		$xml .= $this->newline( '<sitemap>', 1 );
		$xml .= $this->newline( '<loc>' . htmlspecialchars( $item['loc'] ) . '</loc>', 2 );
		$xml .= empty( $item['lastmod'] ) ? '' : $this->newline( '<lastmod>' . htmlspecialchars( $item['lastmod'] ) . '</lastmod>', 2 );
		$xml .= $this->newline( '</sitemap>', 1 );

		return $xml;
	}

	/**
	 * The content of the Local SEO Sitemap.
	 *
	 * @return string $urlset Local SEO Sitemap XML content.
	 */
	public function local_sitemap_content() {
		$item = $this->do_filter(
			'sitemap/entry',
			[
				'loc' => Router::get_base_url( 'locations.kml' ),
				'mod' => $this->get_modified_date(),
			],
			'local',
			[]
		);

		if ( ! $item ) {
			return '';
		}

		$output  = $this->newline( '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">', 1 );
		$output .= $this->newline( '<url>', 2 );
		$output .= $this->newline( '<loc>' . htmlspecialchars( $item['loc'] ) . '</loc>', 3 );
		$output .= empty( $item['mod'] ) ? '' : $this->newline( '<lastmod>' . htmlspecialchars( $item['mod'] ) . '</lastmod>', 3 );
		$output .= $this->newline( '</url>', 2 );
		$output .= $this->newline( '</urlset>', 1 );

		return $output;
	}

	/**
	 * Generate the KML file contents.
	 *
	 * @return string $kml KML file content.
	 */
	public function kml_file_content() {
		$locations = $this->get_local_seo_data();
		if ( empty( $locations ) ) {
			return;
		}

		$business_name = Helper::get_settings( 'titles.knowledgegraph_name' );
		$business_url  = Helper::get_settings( 'titles.url' );

		$kml  = $this->newline( '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">' );
		$kml .= $this->newline( '<Document>', 1 );
		$kml .= $this->newline( '<name>Locations for ' . esc_html( $business_name ) . '</name>', 2 );
		$kml .= $this->newline( '<open>1</open>', 2 );
		$kml .= $this->newline( '<Folder>', 2 );

		if ( ! empty( $business_url ) ) {
			$kml .= $this->newline( '<atom:link href="' . $business_url . '" />', 3 );
		}

		foreach ( $locations as $location ) {
			$address   = ! empty( $location['address'] ) ? Helper::replace_vars( implode( ', ', array_filter( $location['address'] ) ) ) : '';
			$has_coord = ! empty( $location['coords']['latitude'] ) && ! empty( $location['coords']['longitude'] );

			$kml .= $this->newline( '<Placemark>', 3 );
			$kml .= $this->newline( '<name><![CDATA[' . html_entity_decode( $location['name'] ) . ']]></name>', 4 );
			$kml .= $this->newline( '<description><![CDATA[' . html_entity_decode( $location['description'] ) . ']]></description>', 4 );
			$kml .= $this->newline( '<address><![CDATA[' . $address . ']]></address>', 4 );
			$kml .= $this->newline( '<phoneNumber><![CDATA[' . $location['phone'] . ']]></phoneNumber>', 4 );
			$kml .= $this->newline( '<atom:link href="' . $location['url'] . '"/>', 4 );
			$kml .= $this->newline( '<LookAt>', 4 );

			if ( $has_coord ) {
				$kml .= $this->newline( '<latitude>' . $location['coords']['latitude'] . '</latitude>', 5 );
				$kml .= $this->newline( '<longitude>' . $location['coords']['longitude'] . '</longitude>', 5 );
			}

			$kml .= $this->newline( '<altitude>0</altitude>', 5 );
			$kml .= $this->newline( '<range></range>', 5 );
			$kml .= $this->newline( '<tilt>0</tilt>', 5 );
			$kml .= $this->newline( '</LookAt>', 4 );
			$kml .= $this->newline( '<Point>', 4 );
			if ( $has_coord ) {
				$kml .= $this->newline( '<coordinates>' . $location['coords']['longitude'] . ',' . $location['coords']['latitude'] . '</coordinates>', 5 );
			}
			$kml .= $this->newline( '</Point>', 4 );
			$kml .= $this->newline( '</Placemark>', 3 );
		}

		$kml .= $this->newline( '</Folder>', 2 );
		$kml .= $this->newline( '</Document>', 1 );
		$kml .= $this->newline( '</kml>' );

		return $kml;
	}

	/**
	 * Add/remove/change scheduled action when the report on/off or the frequency options are changed.
	 *
	 * @param string $type     Settings type.
	 * @param array  $settings Settings data.
	 */
	public function before_settings_save( $type, $settings ) {
		if ( $type !== 'titles' ) {
			return;
		}

		$local_seo_fields = [
			'knowledgegraph_name',
			'url',
			'email',
			'local_address',
			'local_business_type',
			'opening_hours',
			'phone_numbers',
			'price_range',
			'geo',
		];

		foreach ( $local_seo_fields as $field ) {
			$value = Helper::get_settings( "titles.{$field}" );
			if ( isset( $settings[ $field ] ) && $settings[ $field ] !== $value ) {
				update_option( 'rank_math_local_seo_update', date( 'c' ) );
				break;
			}
		}
	}

	/**
	 * Update the sitemap when the Local SEO settings are changed.
	 *
	 * @param int   $object_id The ID of the current object.
	 * @param array $updated   Array of field IDs that were updated.
	 *                         Will only include field IDs that had values change.
	 */
	public function update_sitemap( $object_id, $updated ) { // phpcs:ignore
		$local_seo_fields = [
			'knowledgegraph_name',
			'url',
			'email',
			'local_address',
			'local_business_type',
			'opening_hours',
			'phone_numbers',
			'price_range',
			'geo',
		];

		if ( count( array_intersect( $local_seo_fields, $updated ) ) ) {
			update_option( 'rank_math_local_seo_update', date( 'c' ) );
		}
	}

	/**
	 * Get the Local SEO data.
	 *
	 * @return array
	 */
	private function get_local_seo_data() {
		$geo   = Str::to_arr( Helper::get_settings( 'titles.geo' ) );
		$cords = [
			'latitude'  => isset( $geo[0] ) ? $geo[0] : '',
			'longitude' => isset( $geo[1] ) ? $geo[1] : '',
		];

		$phone_numbers = Helper::get_settings( 'titles.phone_numbers' );
		$number        = ! empty( $phone_numbers ) && isset( $phone_numbers[0]['number'] ) ? $phone_numbers[0]['number'] : '';

		$locations = [
			[
				'name'        => Helper::get_settings( 'titles.knowledgegraph_name' ),
				'description' => get_option( 'blogname' ) . ' - ' . get_option( 'blogdescription' ),
				'email'       => Helper::get_settings( 'titles.email' ),
				'phone'       => $number,
				'url'         => Helper::get_settings( 'titles.url' ),
				'address'     => Helper::get_settings( 'titles.local_address' ),
				'coords'      => $cords,
				'author'      => get_option( 'blogname' ),
			],
		];

		return $this->do_filter( 'sitemap/locations/data', $locations );
	}

	/**
	 * Get the Modified Date.
	 *
	 * @return $date
	 */
	private function get_modified_date() {
		if ( ! $date = get_option( 'rank_math_local_seo_update' ) ) { // phpcs:ignore
			$date = date( 'c' );
		}

		return $date;
	}

	/**
	 * Write a newline with indent count.
	 *
	 * @param string  $content Content to write.
	 * @param integer $indent  Count of indent.
	 *
	 * @return string
	 */
	private function newline( $content, $indent = 0 ) {
		return str_repeat( "\t", $indent ) . $content . "\n";
	}
}
PK     ›ŠU]Ë…Vþ¬1  ¬1  .  includes/modules/local-seo/class-local-seo.phpnu „[µü¤        <?php
/**
 * The Local SEO module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Local_Seo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Local_Seo;

use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Local_Seo class.
 */
class Local_Seo {

	use Ajax;
	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'after_setup_theme', 'location_sitemap', 11 );
		$this->filter( 'rank_math/settings/title', 'add_settings' );
		$this->filter( 'rank_math/json_ld', 'organization_or_person', 9, 2 );
	}

	/**
	 * Init Local SEO Sitemap.
	 */
	public function location_sitemap() {
		if (
			Helper::is_module_active( 'sitemap' ) &&
			'company' === Helper::get_settings( 'titles.knowledgegraph_type' ) &&
			$this->do_filter( 'sitemap/locations', false )
		) {
			new KML_File();
		}
	}

	/**
	 * Add module settings in Titles & Meta panel.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_settings( $tabs ) {
		$about_page = Helper::get_settings( 'titles.local_seo_about_page' );
		if ( $about_page ) {
			$about_page = [
				'id'   => $about_page,
				'name' => get_the_title( $about_page ),
				'url'  => get_permalink( $about_page ),
			];
		}

		$contact_page = Helper::get_settings( 'titles.local_seo_contact_page' );
		if ( $contact_page ) {
			$contact_page = [
				'id'   => $contact_page,
				'name' => get_the_title( $contact_page ),
				'url'  => get_permalink( $contact_page ),
			];
		}
		$tabs['local']['json'] = [
			'businessTypes'    => Helper::choices_business_types( true ),
			'phoneTypes'       => Helper::choices_phone_types(),
			'organizationInfo' => Helper::choices_additional_organization_info(),
			'aboutPage'        => $about_page,
			'contactPage'      => $contact_page,
		];

		$tabs['local']['file'] = __DIR__ . '/views/titles-options.php';

		return $tabs;
	}

	/**
	 * Add Person/Organization schema.
	 *
	 * @param array  $data    Array of JSON-LD data.
	 * @param JsonLD $json_ld The JsonLD instance.
	 *
	 * @return array
	 */
	public function organization_or_person( $data, $json_ld ) {
		if ( ! $json_ld->can_add_global_entities( $data ) ) {
			return $data;
		}

		$entity = [
			'@type' => '',
			'@id'   => '',
			'name'  => '',
			'url'   => get_home_url(),
		];

		$social_profiles = $json_ld->get_social_profiles();
		if ( ! empty( $social_profiles ) ) {
			$entity['sameAs'] = $social_profiles;
		}

		$json_ld->add_prop( 'email', $entity );
		$json_ld->add_prop( 'url', $entity );
		$json_ld->add_prop( 'address', $entity );
		$json_ld->add_prop( 'image', $entity );

		switch ( Helper::get_settings( 'titles.knowledgegraph_type' ) ) {
			case 'company':
				$this->add_place_entity( $data, $json_ld );
				$data['publisher'] = $this->organization( $entity, $data );
				break;
			case 'person':
				$data['publisher'] = $this->person( $entity, $json_ld );
				break;
		}

		return $data;
	}

	/**
	 * Add place entity to use in the Organization schema.
	 *
	 * @param array  $data   Array of JSON-LD data.
	 * @param JsonLD $jsonld The JsonLD instance.
	 */
	private function add_place_entity( &$data, $jsonld ) {
		$properties = [];
		$this->add_geo_coordinates( $properties );
		$jsonld->add_prop( 'address', $properties );
		if ( empty( $properties ) ) {
			return;
		}

		$data['place'] = array_merge(
			[
				'@type' => 'Place',
				'@id'   => home_url( '/#place' ),
			],
			$properties
		);
	}

	/**
	 * Structured data for Organization.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 * @param array $data  Array of JSON-LD data.
	 */
	private function organization( $entity, $data ) {
		$name            = Helper::get_settings( 'titles.knowledgegraph_name' );
		$type            = Helper::get_settings( 'titles.local_business_type' );
		$entity['@type'] = $type ? $type : 'Organization';
		$entity['@id']   = home_url( '/#organization' );
		$entity['name']  = $name ? $name : get_bloginfo( 'name' );

		if ( is_singular() && 'Organization' !== $type ) {
			$entity['@type'] = \array_values( array_filter( [ $type, 'Organization' ] ) );
		}

		// Price Range.
		if ( $price_range = Helper::get_settings( 'titles.price_range' ) ) { // phpcs:ignore
			$entity['priceRange'] = $price_range;
		}

		$this->add_contact_points( $entity );
		$this->add_business_hours( $entity );
		$this->add_additional_details( $entity );

		// Add reference to the place entity.
		if ( isset( $data['place'] ) ) {
			$entity['location'] = [ '@id' => $data['place']['@id'] ];
		}

		return $this->sanitize_organization_schema( $entity, $type );
	}

	/**
	 * Structured data for Person.
	 *
	 * @param array  $entity  Array of JSON-LD entity.
	 * @param JsonLD $json_ld JsonLD instance.
	 */
	private function person( $entity, $json_ld ) {
		$name = Helper::get_settings( 'titles.knowledgegraph_name' );
		if ( ! $name ) {
			return false;
		}

		$entity['@type'] = is_singular()
		? [
			'Organization',
			'Person',
		]
		: 'Person';
		$entity['@id']   = home_url( '/#person' );
		$entity['name']  = $name;
		$json_ld->add_prop( 'phone', $entity );

		if ( isset( $entity['logo'] ) ) {
			$entity['image'] = [ '@id' => $entity['logo']['@id'] ];

			if ( ! is_singular() ) {
				$entity['image'] = $entity['logo'];
				unset( $entity['logo'] );
			}
		}

		return $entity;
	}

	/**
	 * Add Contact points in the Organization schema.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_contact_points( &$entity ) {
		$phone_numbers = Helper::get_settings( 'titles.phone_numbers' );
		if ( empty( $phone_numbers ) ) {
			return;
		}

		$numbers = [];
		foreach ( $phone_numbers as $number ) {
			if ( empty( $number['number'] ) ) {
				continue;
			}

			$numbers[] = [
				'@type'       => 'ContactPoint',
				'telephone'   => $number['number'],
				'contactType' => ! empty( $number['type'] ) ? esc_html( $number['type'] ) : 'customer support',
			];
		}

		if ( ! empty( $numbers ) ) {
			$entity['contactPoint'] = $numbers;
		}
	}

	/**
	 * Add geo coordinates in Place entity.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_geo_coordinates( &$entity ) {
		$geo = Str::to_arr( Helper::get_settings( 'titles.geo' ) );
		if ( ! isset( $geo[0], $geo[1] ) ) {
			return;
		}

		$entity['geo'] = [
			'@type'     => 'GeoCoordinates',
			'latitude'  => $geo[0],
			'longitude' => $geo[1],
		];

		$entity['hasMap'] = 'https://www.google.com/maps/search/?api=1&query=' . join( ',', $geo );
	}

	/**
	 * Add business hours in the Organization schema.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_business_hours( &$entity ) {
		$opening_hours = $this->get_opening_hours();
		if ( empty( $opening_hours ) ) {
			return;
		}

		$entity['openingHours'] = [];
		foreach ( $opening_hours as $time => $days ) {
			$entity['openingHours'][] = join( ',', $days ) . ' ' . $time;
		}
	}

	/**
	 * Get Business opening hours.
	 *
	 * @return bool|array
	 */
	private function get_opening_hours() {
		$hours = Helper::get_settings( 'titles.opening_hours' );
		if ( ! is_array( $hours ) ) {
			return false;
		}

		$opening_hours = [];
		foreach ( $hours as $hour ) {
			if ( empty( $hour['time'] ) ) {
				continue;
			}

			$opening_hours[ $hour['time'] ][] = ! empty( $hour['day'] ) ? esc_html( $hour['day'] ) : 'Monday';
		}

		return $opening_hours;
	}

	/**
	 * Add additional details in the Organization schema.
	 *
	 * @param array $entity Array of JSON-LD entity.
	 */
	private function add_additional_details( &$entity ) {
		$description = Helper::get_settings( 'titles.organization_description' );
		if ( $description ) {
			$entity['description'] = $description;
		}

		$properties = Helper::get_settings( 'titles.additional_info' );
		if ( empty( $properties ) ) {
			return;
		}

		foreach ( $properties as $property ) {
			if ( empty( $property['value'] ) ) {
				continue;
			}

			$type = ! empty( $property['type'] ) ? esc_html( $property['type'] ) : 'legalName';
			if ( 'numberOfEmployees' === $type ) {
				$parts = explode( '-', $property['value'] );
				if ( empty( $parts[1] ) ) {
					$entity['numberOfEmployees'] = [
						'@type' => 'QuantitativeValue',
						'value' => $parts[0],
					];

					continue;
				}

				$entity['numberOfEmployees'] = [
					'@type'    => 'QuantitativeValue',
					'minValue' => $parts[0],
					'maxValue' => $parts[1],
				];

				continue;
			}

			$entity[ $type ] = $property['value'];
		}
	}

	/**
	 * Sanitize structured data for different organization types.
	 *
	 * @param array  $entity Array of Schema structured data.
	 * @param string $type   Type of organization.
	 *
	 * @return array Sanitized data.
	 */
	private function sanitize_organization_schema( $entity, $type ) {
		$types = [
			'op'   => [ 'Organization', 'Corporation', 'EducationalOrganization', 'CollegeOrUniversity', 'ElementarySchool', 'HighSchool', 'MiddleSchool', 'Preschool', 'School', 'SportsTeam', 'MedicalOrganization', 'DiagnosticLab', 'Pharmacy', 'VeterinaryCare', 'PerformingGroup', 'DanceGroup', 'MusicGroup', 'TheaterGroup', 'GovernmentOrganization', 'NGO', 'Airline', 'Consortium', 'Funding Scheme', 'FundingAgency', 'LibrarySystem', 'NewsMediaOrganization', 'Project', 'SportsOrganization', 'WorkersUnion', 'OnlineStore', 'OnlineBusiness' ],
			'logo' => [ 'AnimalShelter', 'AutomotiveBusiness', 'Campground', 'ChildCare', 'DryCleaningOrLaundry', 'Dentist', 'EmergencyService', 'FireStation', 'PoliceStation', 'EntertainmentBusiness', 'AdultEntertainment', 'AmusementPark', 'ArtGallery', 'Casino', 'ComedyClub', 'MovieTheater', 'NightClub', 'EmploymentAgency', 'TravelAgency', 'Store', 'AutoPartsStore', 'BikeStore', 'BookStore', 'ClothingStore', 'ComputerStore', 'ConvenienceStore', 'DepartmentStore', 'ElectronicsStore', 'Florist', 'FurnitureStore', 'GardenStore', 'GroceryStore', 'HardwareStore', 'HobbyShop', 'HomeGoodsStore', 'JewelryStore', 'LiquorStore', 'MensClothingStore', 'MobilePhoneStore', 'MovieRentalStore', 'MusicStore', 'OfficeEquipmentStore', 'OutletStore', 'PawnShop', 'PetStore', 'ShoeStore', 'SportingGoodsStore', 'TireShop', 'ToyStore', 'WholesaleStore', 'FinancialService', 'Hospital', 'MovieTheater', 'HomeAndConstructionBusiness', 'Electrician', 'GeneralContractor', 'Plumber', 'InternetCafe', 'Library', 'LocalBusiness', 'LodgingBusiness', 'Hostel', 'Hotel', 'Motel', 'BedAndBreakfast', 'Campground', 'RadioStation', 'RealEstateAgent', 'RecyclingCenter', 'SelfStorage', 'ShoppingCenter', 'SportsActivityLocation', 'BowlingAlley', 'ExerciseGym', 'GolfCourse', 'HealthClub', 'PublicSwimmingPool', 'Resort', 'SkiResort', 'SportsClub', 'TennisComplex', 'StadiumOrArena', 'TelevisionStation', 'TouristInformationCenter', 'MovingCompany', 'InsuranceAgency', 'ProfessionalService', 'HVACBusiness', 'AutoBodyShop', 'AutoDealer', 'AutoPartsStore', 'AutoRental', 'AutoRepair', 'AutoWash', 'GasStation', 'MotorcycleDealer', 'MotorcycleRepair', 'AccountingService', 'AutomatedTeller', 'FoodEstablishment', 'Bakery', 'BarOrPub', 'Brewery', 'CafeOrCoffeeShop', 'FastFoodRestaurant', 'IceCreamShop', 'Restaurant', 'Winery', 'GovernmentOffice', 'PostOffice', 'HealthAndBeautyBusiness', 'BeautySalon', 'DaySpa', 'HairSalon', 'HealthClub', 'NailSalon', 'TattooParlor', 'HousePainter', 'Locksmith', 'Notary', 'RoofingContractor', 'LegalService', 'Physician', 'Optician', 'MedicalBusiness', 'MedicalClinic', 'BankOrCreditUnion', 'CovidTestingFacility', 'ArchiveOrganization', 'Optician', 'DietNutrition' ],
		];

		$perform = false;
		foreach ( $types as $func => $to_check ) {
			if ( in_array( $type, $to_check, true ) ) {
				$perform = 'sanitize_organization_' . $func;
				break;
			}
		}

		return $perform ? $this->$perform( $entity ) : $entity;
	}

	/**
	 * Remove `openingHours`, `priceRange` properties
	 * from the Schema entity.
	 *
	 * @param array $entity Array of Schema structured data.
	 *
	 * @return array Sanitized data.
	 */
	private function sanitize_organization_op( $entity ) {
		unset( $entity['openingHours'], $entity['priceRange'] );

		return $entity;
	}

	/**
	 * Change `logo` property to `image` & `contactPoint` to `telephone`.
	 *
	 * @param array $entity Array of schema data.
	 *
	 * @return array Sanitized data.
	 */
	private function sanitize_organization_logo( $entity ) {
		if ( isset( $entity['logo'] ) ) {
			$entity['image'] = [ '@id' => $entity['logo']['@id'] ];
		}
		if ( isset( $entity['contactPoint'] ) ) {
			$entity['telephone'] = $entity['contactPoint'][0]['telephone'];
			unset( $entity['contactPoint'] );
		}

		return $entity;
	}
}
PK     œŠU]®ÿñ•�  •�  7  includes/modules/role-manager/assets/js/role-manager.jsnu „[µü¤        !function(){var t={332:function(){},423:function(){},709:function(t,e,n){"use strict";n.d(e,{A:function(){return c}});var r=n(601),o=n.n(r),i=n(314),a=n.n(i)()(o());a.push([t.id,"/*!\n * Plugin:\tRank Math - Role Manager\n * URL:\t\thttps://rankmath.com/wordpress/plugin/seo-suite/\n * Name:\trole-manager.css\n */.rank-math-tab-header{padding:1.875rem 1.875rem 0;margin:-1.875rem -1.875rem 30px;border-radius:6px 6px 0 0;border-bottom:1px solid #b5bfc9;background-color:#f8f9fa;text-align:center}.rank-math-tab-header h2{font-size:30px;font-weight:500;margin:0}.rank-math-tab-header p{font-size:1rem;margin-bottom:2rem}.field-row:first-of-type{padding-top:0}footer.form-footer .rank-math-button:first-of-type{width:90px}footer.form-footer .rank-math-button:last-of-type{width:150px}@media(min-width: 1200px){.field-big-labels .rank-math-checkbox-list li{width:33.33%}}@media(min-width: 641px){.rank-math-button.toggle-all-capabilities{position:absolute;top:56px;left:0;font-weight:600}.field-wrap .field-row:first-of-type .rank-math-button.toggle-all-capabilities{top:32px}}",""]);const c=a},314:function(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n="",r=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),r&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),r&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n}).join("")},e.i=function(t,n,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var a={};if(r)for(var c=0;c<this.length;c++){var u=this[c][0];null!=u&&(a[u]=!0)}for(var l=0;l<t.length;l++){var s=[].concat(t[l]);r&&a[s[0]]||(void 0!==i&&(void 0===s[5]||(s[1]="@layer".concat(s[5].length>0?" ".concat(s[5]):""," {").concat(s[1],"}")),s[5]=i),n&&(s[2]?(s[1]="@media ".concat(s[2]," {").concat(s[1],"}"),s[2]=n):s[2]=n),o&&(s[4]?(s[1]="@supports (".concat(s[4],") {").concat(s[1],"}"),s[4]=o):s[4]="".concat(o)),e.push(s))}},e}},601:function(t){"use strict";t.exports=function(t){return t[1]}},72:function(t){"use strict";var e=[];function n(t){for(var n=-1,r=0;r<e.length;r++)if(e[r].identifier===t){n=r;break}return n}function r(t,r){for(var i={},a=[],c=0;c<t.length;c++){var u=t[c],l=r.base?u[0]+r.base:u[0],s=i[l]||0,f="".concat(l," ").concat(s);i[l]=s+1;var p=n(f),d={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==p)e[p].references++,e[p].updater(d);else{var m=o(d,r);r.byIndex=c,e.splice(c,0,{identifier:f,updater:m,references:1})}a.push(f)}return a}function o(t,e){var n=e.domAPI(e);n.update(t);return function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var a=0;a<i.length;a++){var c=n(i[a]);e[c].references--}for(var u=r(t,o),l=0;l<i.length;l++){var s=n(i[l]);0===e[s].references&&(e[s].updater(),e.splice(s,1))}i=u}}},659:function(t){"use strict";var e={};t.exports=function(t,n){var r=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540:function(t){"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},56:function(t,e,n){"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},825:function(t){"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(r,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},113:function(t){"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}},942:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];n&&(t=a(t,i(n)))}return t}function i(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return o.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var n in t)r.call(t,n)&&t[n]&&(e=a(e,n));return e}function a(t,e){return e?t?t+" "+e:t+e:t}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,exports:{}};return t[r](i,i.exports,n),i.exports}n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},n.nc=void 0,function(){"use strict";var t={};n.r(t),n.d(t,{resetStore:function(){return y},resetdirtySettings:function(){return m},updateAnalytics:function(){return p},updateData:function(){return f},updateModules:function(){return d}});var e={};n.r(e),n.d(e,{appData:function(){return S},appUi:function(){return E}});var r={};n.r(r),n.d(r,{getAnalytics:function(){return C},getAppData:function(){return x},getData:function(){return T},getModules:function(){return M},getdirtySettings:function(){return A}});const o=jQuery;var i=n.n(o);const a=lodash,c=wp.element,u=wp.data,l=wp.hooks;function s(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,l.applyFilters)("rank_math_sanitize_settings",e,t,n),null!==r&&(r=(0,l.applyFilters)("rank_math_sanitize_settings_value",r,t,n)),r=null===r?e:r,(0,l.doAction)("rank_math_settings_changed",t,e,n),{type:"RANK_MATH_SETTINGS_DATA",key:t,value:e,settingsKey:n,settingsValue:r}}function f(t){return s("data",t,"data")}function p(t){return s("analytics",t,"analytics")}function d(t,e){var n=wp.data.select("rank-math-settings").getData();return n[t].isActive=e,(0,a.forEach)(n,function(e,r){if((0,a.includes)(e.dep_modules,t)){var o=!1;(0,a.forEach)(e.dep_modules,function(t){n[t].isActive||(o=!0)}),n[r].isDisabled=o,n[r].disabled=o}}),f(n)}function m(){return s("dirtySettings",{})}function y(){return{type:"RESET_STORE"}}n(332);function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function g(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function h(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?g(Object(n),!0).forEach(function(e){v(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function v(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=b(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=b(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==b(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var w={data:(0,a.get)(rankMath,"data",{}),analytics:h(h(h({},rankMath),(0,a.get)(rankMath,"data",{})),(0,a.get)(rankMath,"analytics",{})),dirtySettings:{}},O=h({},w);function S(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:w,e=arguments.length>1?arguments[1]:void 0,n=h({},t.dirtySettings);return!1!==e.settingsKey&&(n=e.settingsValue),"RANK_MATH_SETTINGS_DATA"===e.type?"dirtySettings"===e.key?h(h({},t),{},{dirtySettings:e.value}):h(h({},t),{},v(v({},e.key,e.value),"dirtySettings",n)):"RESET_STORE"===e.type?O:t}function j(t){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},j(t)}function k(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function P(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?k(Object(n),!0).forEach(function(e){_(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function _(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=j(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=j(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==j(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function E(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?P(P({},t),{},_({},e.key,e.value)):t}function x(t){return t.appData}function A(t){return t.appData.dirtySettings}function T(t){return t.appData.data}function C(t){return t.appData.analytics}function M(t){return t.appData.modules}n(423),(0,u.register)((0,u.createReduxStore)("rank-math-settings",{reducer:(0,u.combineReducers)(e),selectors:r,actions:t}));const D=wp.i18n,N=wp.compose;function R(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[t]||"";if(!r)return"#";if(!e)return r;var o={utm_source:"Plugin",utm_medium:encodeURIComponent(e),utm_campaign:"WP"},i=r,a="",c=r.indexOf("#");-1!==c&&(i=r.substring(0,c),a=r.substring(c));var u=Object.keys(o).map(function(t){return"".concat(t,"=").concat(o[t])}).join("&"),l=i.includes("?")&&!i.endsWith("?")?"&":"?";return i+l+u+a+n}n.dn(R);const I=function(t){var e=t.title,n=t.description,r=t.link,o=t.linkText,i=void 0===o?(0,D.__)("Learn more","seo-by-rank-math"):o;return wp.element.createElement("header",{className:"rank-math-tab-header"},wp.element.createElement("h2",null,e),wp.element.createElement("p",null,n,r&&wp.element.createElement(React.Fragment,null," ",wp.element.createElement("a",{href:r,target:"_blank",rel:"noreferrer"},i),".")))};n.dn(I);const U=wp.apiFetch;var B=n.n(U);const L=window.rankMathComponents;function F(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];e=e||"error",r=r||!1;var c=i()('<div class="notice notice-'+e+" "+o+' is-dismissible"><p>'+t+"</p></div>").hide();a||n.siblings(".notice").remove(),n.after(c),c.slideDown(),i()(document).trigger("wp-updates-notice-added"),i()("html,body").animate({scrollTop:c.offset().top-50},"slow"),r&&setTimeout(function(){c.fadeOut(function(){c.remove()})},r)}function G(t){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},G(t)}n.dn(F);var H=["validate","afterSave"];function W(){return W=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},W.apply(null,arguments)}function z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function K(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?z(Object(n),!0).forEach(function(e){V(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):z(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function V(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=G(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=G(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==G(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function $(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return q(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?q(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var J=function(t,e){return"resetting"===e?(0,D.__)("Resettingâ€¦","seo-by-rank-math"):"resetted"===e?(0,D.__)("Resetted","seo-by-rank-math"):t.children},Q=function(t,e){return"updating"===e?(0,D.__)("Updatingâ€¦","seo-by-rank-math"):"updated"===e?(0,D.__)("Updated","seo-by-rank-math"):t.children},Y=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if((0,a.includes)(["roleCapabilities","redirections"],t))return{data:e,fields:{},updated:[]};var i={},c=[];return{data:(0,a.isUndefined)(n)?{}:(0,a.reduce)(n,function(t,n){return(0,a.isArray)(n.fields)&&0!==n.fields.length?"htaccess"===n.name?(t.htaccess_allow_editing=e.htaccess_allow_editing,t.htaccess_content=e.htaccess_content,(0,a.isEqual)(e.htaccess_content,o.htaccess_content)||c.push("htaccess_content"),t):((0,a.forEach)(n.fields,function(n){var u=n.id;if(r)(0,a.has)(n,"default")&&(t[u]=n.default,i[u]=n.type);else{var l=(""===e[u]||(0,a.isUndefined)(e[u]))&&(0,a.has)(n,"default")?n.default:e[u];t[u]=l,i[u]=n.type,"file"!==n.type||(0,a.isUndefined)(e[u+"_id"])||(t[u+"_id"]=e[u+"_id"],i[u]="text"),(0,a.isEqual)(l,o[u])||c.push(u)}}),t):t},{}),fields:i,updated:c}};const X=(0,N.compose)((0,u.withSelect)(function(t){return{settings:t("rank-math-settings").getdirtySettings(),data:t("rank-math-settings").getData()}}),(0,u.withDispatch)(function(t,e){var n=e.type,r=e.settings,o=e.tabs,c=e.footer.applyButton;return{saveSettings:function(e,u){var l=Y(n,r,o,!1,u);e("updating"),B()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:l.data,fieldTypes:l.fields,updated:l.updated}}).then(function(n){return e("updated"),n?!(0,a.isUndefined)(n.notifications)&&n.notifications.length?((0,a.forEach)(n.notifications,function(t){var e=!(0,a.isEmpty)(t.error);F(e?t.error:t.success,e?"error":"success",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice",!0)}),void i()("html, body").animate({scrollTop:0},"fast")):n.error?(F(n.error,"error",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void i()("html, body").animate({scrollTop:0},"fast")):(t("rank-math-settings").updateData(n.settings?n.settings:K({},l.data)),n.success?(F(n.success,"success",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void i()("html, body").animate({scrollTop:0},"fast")):(n&&!n.error&&c.afterSave&&c.afterSave(),e("updated"),void t("rank-math-settings").resetdirtySettings())):(e(""),void window.alert((0,D.__)("Something went wrong! Please try again.","seo-by-rank-math")))})},resetSettings:function(e){var i=Y(n,r,o,!0);e("resetting"),B()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:i.data,fieldTypes:i.fields,isReset:!0}}).then(function(n){if(!n)return e(""),void window.alert((0,D.__)("Something went wrong! Please try again.","seo-by-rank-math"));e("resetted"),t("rank-math-settings").updateData(n.settings?n.settings:K({},i.data)),t("rank-math-settings").resetdirtySettings()})}}}))(function(t){var e=$((0,c.useState)(""),2),n=e[0],r=e[1],o=t.settings,i=t.data,u=t.resetSettings,l=t.saveSettings,s=t.footer,f=s.applyButton,p=f.validate,d=(f.afterSave,function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(f,H)),m=(0,c.useRef)(null);return null===m.current&&(m.current=K({},i)),(0,c.useEffect)(function(){(0,a.includes)(["updated","resetted"],n)&&setTimeout(function(){return r("")},1e3)},[n]),wp.element.createElement("footer",{className:"form-footer rank-math-ui"},wp.element.createElement(L.Button,W({onClick:function(){window.confirm((0,D.__)("Are you sure? You want to reset settings.","seo-by-rank-math"))&&u(r)}},s.discardButton,{children:J(s.discardButton,n)})),wp.element.createElement(L.Button,W({variant:"primary",onClick:function(){(!p||p())&&l(r,m.current)},disabled:(0,a.isEmpty)(o)},d,{children:Q(d,n)})))});var Z=n(942),tt=n.n(Z);function et(t){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},et(t)}var nt=["id","type","content","Component","isDisabled","default"];function rt(){return rt=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},rt.apply(null,arguments)}function ot(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function it(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ot(Object(n),!0).forEach(function(e){at(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ot(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function at(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=et(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=et(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==et(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ct(t){return function(t){if(Array.isArray(t))return ut(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return ut(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ut(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ut(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const lt=(0,N.compose)((0,u.withDispatch)(function(t,e){var n=e.settings;return{updateSetting:function(e,r){n[e]=r,t("rank-math-settings").updateData(it({},n))}}}))(function(t){var e=t.field,n=t.settingType,r=t.settings,o=t.value,i=e.id,u=e.type,l=e.content,s=e.Component,f=e.isDisabled,p=e.default,d=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(e,nt);(0,a.isUndefined)(o)&&(o=(0,a.isUndefined)(r)||(0,a.isUndefined)(r[i])?p:r[i]),(0,a.includes)(["disable_author_archives","opening_hours_format"],i)&&(0,a.isBoolean)(o)&&t.updateSetting(i,!1===o?"off":"on"),(0,a.includes)(["disable_author_archives"],i)&&""===o&&t.updateSetting(i,p),(0,a.endsWith)(i,"_bulk_editing")&&!(0,a.isString)(o)&&(o=String(o)),!(0,a.endsWith)(i,"_default_rich_snippet")||""!==o&&!1!==o||(o="off");var m=function(e){if(((0,a.endsWith)(i,"_robots")||"robots_global"===i)&&(0,a.isArray)(e)&&((0,a.includes)(e,"index")||(0,a.includes)(e,"noindex")||(0,a.includes)(o||[],"index")||(0,a.includes)(o||[],"noindex"))){var n=o||[],r=(0,a.includes)(e,"index"),c=(0,a.includes)(e,"noindex"),l=(0,a.includes)(n,"index"),s=(0,a.includes)(n,"noindex");if(l&&!r)e=[].concat(ct(e),["noindex"]);else if(s&&!c)e=[].concat(ct(e),["index"]);else if(r&&c){var f=(0,a.last)(e);e=(0,a.filter)(e,function(t){return"index"===f?"noindex"!==t:"index"!==t})}}"file"===u?((0,a.isEmpty)(e)&&(e={url:"",id:""}),t.updateSetting(i,e.url),t.updateSetting(i+"_id",e.id)):t.updateSetting(i,e)},y=function(){var t={toggle:"checked",checkbox:"checked"}[u]||"value",e=(0,a.includes)(["component","group"],u);return it(it(it({},d),{},at(at({id:i},t,d.value||o),"onChange",d.onChange||!f&&m),e&&{settingType:n}),d.attributes)},b={file:window.rankMathComponents.UploadFile,text:window.rankMathComponents.TextControl,select:window.rankMathComponents.SelectControl,toggle:window.rankMathComponents.ToggleControl,select_search:window.rankMathComponents.SelectWithSearch,multicheck:window.rankMathComponents.CheckboxList,multicheck_inline:window.rankMathComponents.CheckboxList,radio_inline:window.rankMathComponents.ToggleGroupControl,repeatable_group:window.rankMathComponents.RepeatableGroup,selectSearch:window.rankMathComponents.SelectWithSearch,searchPage:window.rankMathComponents.SearchPage,checkboxlist:window.rankMathComponents.CheckboxList,toggleGroup:window.rankMathComponents.ToggleGroupControl,repeatableGroup:window.rankMathComponents.RepeatableGroup,group:window.rankMathComponents.Group,checkbox:window.rankMathComponents.CheckboxControl,textarea:window.rankMathComponents.TextareaControl,notice:window.rankMathComponents.Notice,selectVariable:window.rankMathComponents.SelectVariable,button:window.rankMathComponents.Button}[u],g="group"===u?{onChange:t.updateSetting}:{};return b?wp.element.createElement(b,rt({},y(),{settings:r},g)):"component"===u?wp.element.createElement(s,y()):"raw"===u?wp.element.createElement(c.RawHTML,null,l):null});var st=["relation","compare"];function ft(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return pt(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const dt=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t.relation,r=void 0===n?"or":n,o=t.compare,i=void 0===o?"":o,c=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,st),u=function(t){var n=ft(t,2),r=n[0],o=n[1],c=e[r];return"!="===i?(0,a.isArray)(o)?!(0,a.includes)(o,c):o!==c:(0,a.isArray)(o)?(0,a.includes)(o,c):o===c};return"and"===r?(0,a.every)((0,a.entries)(c),u):(0,a.some)((0,a.entries)(c),u)};function mt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return yt(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?yt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}n.dn(dt);const bt=function(t,e){return(0,a.some)(t,function(t){var n=mt(t,1)[0];return e[n]})};function gt(t){return gt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gt(t)}function ht(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function vt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ht(Object(n),!0).forEach(function(e){wt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ht(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function wt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=gt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=gt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==gt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.dn(bt);const Ot=function(t){var e=t.settingType,n=t.fields,r=t.settings,o=void 0===r?null:r;return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-".concat(e),className:"field-metabox field-list"},(0,a.map)(n,function(t,n){var r=t.id,i=t.type,a=t.name,c=t.desc,u=t.classes,l=t.content,s=t.dep,f=t.disableDep,p=t.afterfield,d=bt(f,o);if((!s||dt(s,o))&&"hidden"!==i){if("raw"===i)return l;var m=tt()("field-row",u,wt(wt({"field-disabled":d},"field-id-"+r,r),"field-type-"+i,i));return wp.element.createElement("div",{key:r||n,className:m},a&&wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:r},a)),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(lt,{settingType:e,field:vt(vt({},t),{},{isDisabled:d}),settings:o}),c&&wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:c}}),p))}})))};n.dn(Ot);const St=function(t){var e=t.type,n=t.header,r=t.footer,o=t.fields,i=void 0===o?[]:o,c=t.settings,u=void 0===c?null:c,l=t.tabs;return(0,a.isEmpty)(u)?null:wp.element.createElement(React.Fragment,null,n&&wp.element.createElement(I,n),wp.element.createElement(Ot,{settingType:e,fields:i,settings:u}),r&&wp.element.createElement(X,{type:e,footer:r,tabs:l}))};n.dn(St);var jt=n(72),kt=n.n(jt),Pt=n(825),_t=n.n(Pt),Et=n(659),xt=n.n(Et),At=n(56),Tt=n.n(At),Ct=n(540),Mt=n.n(Ct),Dt=n(113),Nt=n.n(Dt),Rt=n(709),It={};It.styleTagTransform=Nt(),It.setAttributes=Tt(),It.insert=xt().bind(null,"head"),It.domAPI=_t(),It.insertStyleElement=Mt();kt()(Rt.A,It);Rt.A&&Rt.A.locals&&Rt.A.locals;function Ut(t){return Ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ut(t)}function Bt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Lt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Bt(Object(n),!0).forEach(function(e){Ft(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Bt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Ft(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Ut(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ut(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Gt=(0,N.compose)((0,u.withSelect)(function(t){return{settings:t("rank-math-settings").getData()}}))(function(t){var e,n,r,o,i=t.settings;return wp.element.createElement("div",{className:"wrap rank-math-wrap"},wp.element.createElement("div",{className:"rank-math-box container"},wp.element.createElement("span",{className:"wp-header-end"}),wp.element.createElement(St,{type:"roleCapabilities",fields:(e=rankMath,n=e.roles,r=e.capabilities,o=(0,a.map)((0,a.keys)(r),function(t){return{id:t,label:r[t]}}),(0,a.map)((0,a.keys)(n),function(t){var e=(0,a.map)(o,function(e){return Lt(Lt({},e),"administrator"===t&&"rank_math_role_manager"===e.id?{disabled:!0}:{})});return{id:t,name:n[t],options:e,type:"checkboxlist",classes:"field-big-labels",toggleAll:{size:"small",className:"toggle-all-capabilities",children:(0,D.__)("Toggle All","seo-by-rank-math")}}})),settings:i,header:{title:(0,D.__)("Role Manager","seo-by-rank-math"),link:R("role-manager","Role Manager Page"),description:(0,D.__)("Control which user has access to which options of Rank Math.","seo-by-rank-math")},footer:{discardButton:{children:(0,D.__)("Reset","seo-by-rank-math")},applyButton:{children:(0,D.__)("Update Capabilities","seo-by-rank-math")}}})))});i()(function(){var t=document.getElementById("rank-math-settings");(0,a.isNull)(t)||(0,c.createRoot)(t).render(wp.element.createElement(Gt,null))})}()}();PK     œŠU]øêC—Ž  Ž  8  includes/modules/role-manager/class-user-role-editor.phpnu „[µü¤        <?php
/**
 * User Role Editor plugin integration.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Role_Manager
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Role_Manager;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * User_Role_Editor class.
 */
class User_Role_Editor {

	use Hooker;

	/**
	 * Members cap group name.
	 *
	 * @var string
	 */
	const GROUP = 'rank_math';

	/**
	 * Hold caps.
	 *
	 * @var array
	 */
	private $caps = [];

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->filter( 'ure_capabilities_groups_tree', 'register_group' );
		$this->filter( 'ure_custom_capability_groups', 'register_capability_groups', 10, 2 );

		$this->caps = Capability_Manager::get()->get_capabilities();
	}

	/**
	 * Adds Rank Math capability group in the User Role Editor plugin.
	 *
	 * @param  array $groups Current groups.
	 * @return array Filtered list of capability groups.
	 */
	public function register_group( $groups = [] ) {
		$groups = (array) $groups;

		$groups[ self::GROUP ] = [
			'caption' => esc_html__( 'Rank Math', 'seo-by-rank-math' ),
			'parent'  => 'custom',
			'level'   => 3,
		];

		return $groups;
	}

	/**
	 * Adds capabilities to the Rank Math group in the User Role Editor plugin.
	 *
	 * @param  array  $groups Current capability groups.
	 * @param  string $cap_id Capability identifier.
	 * @return array List of filtered groups.
	 */
	public function register_capability_groups( $groups = [], $cap_id = '' ) {
		if ( array_key_exists( $cap_id, $this->caps ) ) {
			$groups   = (array) $groups;
			$groups[] = self::GROUP;
		}

		return $groups;
	}
}
PK     �ŠU]¤”â´  ´  4  includes/modules/role-manager/class-role-manager.phpnu „[µü¤        <?php
/**
 * The Role Manager Module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Role_Manager
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Role_Manager;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Module\Base;
use RankMath\Admin\Page;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Role_Manager class.
 */
class Role_Manager extends Base {
	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'role-manager',
				'directory' => $directory,
			]
		);
		parent::__construct();

		// Members plugin integration.
		if ( \function_exists( 'members_plugin' ) ) {
			new Members();
		}

		// User Role Editor plugin integration.
		if ( defined( 'URE_PLUGIN_URL' ) ) {
			new User_Role_Editor();
		}
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		$this->page = new Page(
			'rank-math-role-manager',
			esc_html__( 'Role Manager', 'seo-by-rank-math' ),
			[
				'position'   => 20,
				'parent'     => 'rank-math',
				'capability' => 'rank_math_role_manager',
				'classes'    => [ 'rank-math-page' ],
				'render'     => 'settings',
				'assets'     => [
					'styles'  => [
						'rank-math-common' => '',
						'wp-components'    => '',
					],
					'scripts' => [
						'lodash'                 => '',
						'wp-element'             => '',
						'wp-data'                => '',
						'wp-components'          => '',
						'wp-api-fetch'           => '',
						'rank-math-components'   => '',
						'rank-math-role-manager' => $uri . '/assets/js/role-manager.js',
					],
					'json'    => [
						'roles'        => Helper::get_roles(),
						'data'         => Helper::get_roles_capabilities(),
						'capabilities' => Capability_Manager::get()->get_capabilities(),
					],
				],
			]
		);
	}
}
PK     �ŠU]ŒÛ      '  includes/modules/role-manager/index.phpnu „[µü¤        <?php // Silence is golden.
PK      ŠU]úó¨´  ´  /  includes/modules/role-manager/class-members.phpnu „[µü¤        <?php
/**
 * Members plugin integration.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Role_Manager
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Role_Manager;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Members class.
 */
class Members {

	use Hooker;

	/**
	 * Members cap group name.
	 *
	 * @var string
	 */
	const GROUP = 'rank_math';

	/**
	 * Class Members constructor.
	 */
	public function __construct() {
		$this->action( 'members_register_caps', 'register_caps' );
		$this->action( 'members_register_cap_groups', 'register_cap_groups' );
	}

	/**
	 * Registers cap group.
	 */
	public function register_cap_groups() {
		// @phpstan-ignore-next-line
		\members_register_cap_group(
			self::GROUP,
			[
				'label'    => esc_html__( 'Rank Math', 'seo-by-rank-math' ),
				'caps'     => [],
				'icon'     => 'dashicons-chart-area',
				'priority' => 30,
			]
		);
	}

	/**
	 * Registers caps.
	 */
	public function register_caps() {
		$caps = Capability_Manager::get()->get_capabilities();
		if ( 'administrator' === Param::get( 'role' ) ) {
			$caps['rank_math_edit_htaccess'] = esc_html__( 'Edit .htaccess', 'seo-by-rank-math' );
		}

		foreach ( $caps as $key => $value ) {
			// @phpstan-ignore-next-line
			\members_register_cap(
				$key,
				[
					'label' => html_entity_decode( $value ),
					'group' => self::GROUP,
				]
			);
		}
	}
}
PK      ŠU]4ý>    :  includes/modules/role-manager/class-capability-manager.phpnu „[µü¤        <?php
/**
 * The Capability Manager.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Role_Manager
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Role_Manager;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Capability_Manager class.
 */
class Capability_Manager {

	use Hooker;

	/**
	 * Registered capabilities.
	 *
	 * @var array
	 */
	protected $capabilities = [];

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Capability_Manager
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Capability_Manager ) ) {
			$instance = new Capability_Manager();
			$instance->set_capabilities();
		}

		return $instance;
	}

	/**
	 * Set default capabilities.
	 *
	 * @codeCoverageIgnore
	 */
	public function set_capabilities() {
		$this->register( 'rank_math_titles', esc_html__( 'Titles & Meta Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_general', esc_html__( 'General Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_sitemap', esc_html__( 'Sitemap Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_404_monitor', esc_html__( '404 Monitor Log', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_link_builder', esc_html__( 'Link Builder', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_redirections', esc_html__( 'Redirections', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_role_manager', esc_html__( 'Role Manager', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_analytics', esc_html__( 'Analytics', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_site_analysis', esc_html__( 'Site-Wide Analysis', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_onpage_analysis', esc_html__( 'On-Page Analysis', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_onpage_general', esc_html__( 'On-Page General Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_onpage_advanced', esc_html__( 'On-Page Advanced Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_onpage_snippet', esc_html__( 'On-Page Schema Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_onpage_social', esc_html__( 'On-Page Social Settings', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_content_ai', esc_html__( 'Content AI', 'seo-by-rank-math' ) );
		$this->register( 'rank_math_admin_bar', esc_html__( 'Top Admin Bar', 'seo-by-rank-math' ) );
	}

	/**
	 * Registers a capability.
	 *
	 * @param string $capability Capability to register.
	 * @param string $title      Capability human title.
	 */
	public function register( $capability, $title ) {
		$this->capabilities[ $capability ] = $title;
	}

	/**
	 * Get all registered capabilitities.
	 *
	 * @param bool $caps Capabilities as keys.
	 *
	 * @return string[] Registered capabilities.
	 */
	public function get_capabilities( $caps = false ) {
		return $caps ? array_keys( $this->capabilities ) : $this->capabilities;
	}

	/**
	 * Add capabilities on install.
	 */
	public function create_capabilities() {
		foreach ( Helper::get_roles() as $slug => $role ) {
			$role = get_role( $slug );
			if ( ! $role ) {
				continue;
			}

			$this->loop_capabilities( $this->get_default_capabilities_by_role( $slug ), 'add_cap', $role );
		}
	}

	/**
	 * Remove capabilities on uninstall.
	 */
	public function remove_capabilities() {
		$capabilities = $this->get_capabilities( true );
		foreach ( Helper::get_roles() as $slug => $role ) {
			$role = get_role( $slug );
			if ( ! $role ) {
				continue;
			}

			$this->loop_capabilities( $capabilities, 'remove_cap', $role );
		}
	}

	/**
	 * Loop capabilities and perform action.
	 *
	 * @param array  $caps    Capabilities.
	 * @param string $perform Action to perform.
	 * @param object $role    Role object.
	 */
	private function loop_capabilities( $caps, $perform, $role ) {
		foreach ( $caps as $cap ) {
			$role->$perform( $cap );
		}
	}

	/**
	 * Get default capabilities by roles.
	 *
	 * @param  string $role Capabilities for this role.
	 * @return array
	 */
	private function get_default_capabilities_by_role( $role ) {

		if ( 'administrator' === $role ) {
			return $this->get_capabilities( true );
		}

		if ( 'editor' === $role ) {
			return [
				'rank_math_site_analysis',
				'rank_math_onpage_analysis',
				'rank_math_onpage_general',
				'rank_math_onpage_snippet',
				'rank_math_onpage_social',
			];
		}

		if ( 'author' === $role ) {
			return [
				'rank_math_onpage_analysis',
				'rank_math_onpage_general',
				'rank_math_onpage_snippet',
				'rank_math_onpage_social',
			];
		}

		return [];
	}

	/**
	 * Reset capabilities.
	 *
	 * @return void
	 */
	public function reset_capabilities() {
		$this->remove_capabilities();
		$this->create_capabilities();
	}
}
PK     ¡ŠU]£ˆ~º<  <  3  includes/modules/image-seo/class-add-attributes.phpnu „[µü¤        <?php
/**
 * The class handles changes in image tag attributes.
 *
 * @since      1.0.15
 * @package    RankMath
 * @subpackage RankMath\Image_Seo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Image_Seo;

use stdClass;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\HTML;

defined( 'ABSPATH' ) || exit;

/**
 * Add Attributes class.
 */
class Add_Attributes {

	use Hooker;

	/**
	 * Stores the image alt format if it is set.
	 *
	 * @var string|false
	 */
	public $is_alt;

	/**
	 * Stores the image title format if it is set.
	 *
	 * @var string|false
	 */
	public $is_title;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'wp', 'add_attributes', 9999 );
		$this->action( 'rest_api_init', 'add_attributes' );
	}

	/**
	 * Add nofollow, target, title and alt attributes to images.
	 */
	public function add_attributes() {
		// Add image title and alt.
		$this->is_alt   = Helper::get_settings( 'general.add_img_alt' ) && Helper::get_settings( 'general.img_alt_format' ) ? trim( Helper::get_settings( 'general.img_alt_format' ) ) : false;
		$this->is_title = Helper::get_settings( 'general.add_img_title' ) && Helper::get_settings( 'general.img_title_format' ) ? trim( Helper::get_settings( 'general.img_title_format' ) ) : false;

		if ( $this->is_alt || $this->is_title ) {
			$this->filter( 'the_content', 'add_img_attributes', 11 );
			$this->filter( 'post_thumbnail_html', 'add_img_attributes', 11, 2 );
			$this->filter( 'woocommerce_single_product_image_thumbnail_html', 'add_img_attributes', 11 );
		}
	}

	/**
	 * Add 'title' and 'alt' attribute to image.
	 *
	 * @param string   $content Post content.
	 * @param null|int $post_id The current post ID.
	 * @return string
	 */
	public function add_img_attributes( $content, $post_id = null ) {
		if ( empty( $content ) ) {
			return $content;
		}

		$stripped_content = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $content );
		preg_match_all( '/<img ([^>]+)\/?>/iU', $stripped_content, $matches, PREG_SET_ORDER );
		if ( empty( $matches ) ) {
			return $content;
		}

		$post = $this->get_post( $post_id );
		foreach ( $matches as $image ) {
			$is_dirty = false;
			$attrs    = HTML::extract_attributes( $image[0] );

			if ( ! isset( $attrs['src'] ) && ! isset( $attrs['data-ct-lazy'] ) ) {
				continue;
			}

			$post->filename = isset( $attrs['data-ct-lazy'] ) ? $attrs['data-ct-lazy'] : $attrs['src'];

			// Lazy load support.
			if ( ! empty( $attrs['data-src'] ) ) {
				$post->filename = $attrs['data-src'];
			} elseif ( ! empty( $attrs['data-layzr'] ) ) {
				$post->filename = $attrs['data-layzr'];
			} elseif ( ! empty( $attrs['nitro-lazy-srcset'] ) ) {
				$post->filename = $attrs['nitro-lazy-srcset'];
			}

			// Pass attributes so they can be used later.
			$post->alttext   = isset( $attrs['alt'] ) ? $attrs['alt'] : '';
			$post->titletext = isset( $attrs['title'] ) ? $attrs['title'] : '';

			$this->set_image_attribute( $attrs, 'alt', $this->is_alt, $is_dirty, $post );
			$this->set_image_attribute( $attrs, 'title', $this->is_title, $is_dirty, $post );

			if ( $is_dirty ) {
				$new     = '<img' . HTML::attributes_to_string( $attrs ) . '>';
				$content = str_replace( $image[0], $new, $content );
			}
		}

		return $content;
	}

	/**
	 * Get post object.
	 *
	 * @param null|int $post_id The post ID.
	 * @return object
	 */
	private function get_post( $post_id = null ) {
		$post = \get_post( $post_id );
		if ( empty( $post ) ) {
			$post = new stdClass();
		}

		return $post;
	}

	/**
	 * Set image attribute after checking condition.
	 *
	 * @param array   $attrs     Array which hold rel attribute.
	 * @param string  $attribute Attribute to set.
	 * @param boolean $condition Condition to check.
	 * @param boolean $is_dirty  Is dirty variable.
	 * @param object  $post      Post Object.
	 */
	private function set_image_attribute( &$attrs, $attribute, $condition, &$is_dirty, $post ) {
		if ( $condition && empty( $attrs[ $attribute ] ) ) {
			$is_dirty            = true;
			$attrs[ $attribute ] = trim( Helper::replace_vars( $condition, $post ) );
		}
	}
}
PK     ¡ŠU](X÷    *  includes/modules/image-seo/class-admin.phpnu „[µü¤        <?php
/**
 * The admin-side functionality of the Image SEO module.
 *
 * @since      1.0
 * @package    RankMath
 * @subpackage RankMath\Image_Seo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Image_Seo;

use RankMath\KB;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/settings/general', 'register_tab' );
	}

	/**
	 * Add the Images tab in the General Settings.
	 *
	 * @param  array $tabs Original tabs array.
	 * @return array       New tabs array.
	 */
	public function register_tab( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'images' => [
					'icon'  => 'rm-icon rm-icon-images',
					'title' => esc_html__( 'Images', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'  => sprintf( esc_html__( 'SEO options related to featured images and media appearing in your post content. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'image-settings', 'Options Panel Images Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => __DIR__ . '/options.php',
				],
			],
			3
		);

		return $tabs;
	}
}
PK     ¡ŠU]ŒÛ      $  includes/modules/image-seo/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¡ŠU]öß–V—  —  .  includes/modules/image-seo/class-image-seo.phpnu „[µü¤        <?php
/**
 * The Image SEO module.
 *
 * @since      1.0
 * @package    RankMath
 * @subpackage RankMath\Image_Seo
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Image_Seo;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Image_Seo class.
 *
 * @codeCoverageIgnore
 */
class Image_Seo {

	use Hooker;

	/**
	 * Admin page object.
	 *
	 * @var object
	 */
	public $admin;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->load_admin();

		new Add_Attributes();
	}

	/**
	 * Load admin functionality.
	 */
	private function load_admin() {
		if ( is_admin() ) {
			$this->admin = new Admin();
		}
	}
}
PK     ¡ŠU]W:¶Ã	  	  &  includes/modules/image-seo/options.phpnu „[µü¤        <?php
/**
 * The Image SEO settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Image_Seo
 */

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'add_img_alt',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Add missing ALT attributes', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Add <code>alt</code> attributes for <code>images</code> without <code>alt</code> attributes automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.', 'seo-by-rank-math' ) ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'              => 'img_alt_format',
		'type'            => 'text',
		'name'            => esc_html__( 'Alt attribute format', 'seo-by-rank-math' ),
		'desc'            => wp_kses_post( __( 'Format used for the new <code>alt</code> attribute values.', 'seo-by-rank-math' ) ),
		'classes'         => 'large-text rank-math-supports-variables',
		'default'         => ' %filename%',
		'dep'             => [ [ 'add_img_alt', 'on' ] ],
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);

$cmb->add_field(
	[
		'id'      => 'add_img_title',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Add missing TITLE attributes', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'Add <code>TITLE</code> attribute for all <code>images</code> without a <code>TITLE</code> attribute automatically. The attribute is dynamically applied when the content is displayed, and the stored content is not changed.', 'seo-by-rank-math' ) ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'              => 'img_title_format',
		'type'            => 'text',
		'name'            => esc_html__( 'Title attribute format', 'seo-by-rank-math' ),
		'desc'            => wp_kses_post( __( 'Format used for the new <code>title</code> attribute values.', 'seo-by-rank-math' ) ),
		'classes'         => 'large-text rank-math-supports-variables dropdown-up',
		'default'         => '%title% %count(title)%',
		'dep'             => [ [ 'add_img_title', 'on' ] ],
		'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
		'attributes'      => [ 'data-exclude-variables' => 'seo_title,seo_description' ],
	]
);
PK     ¡ŠU]¾/ê»  »  ,  includes/modules/404-monitor/class-table.phpnu „[µü¤        <?php
/**
 * The WP List Table class for the 404 Monitor module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Monitor
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Monitor;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Redirections\DB as RedirectionsDB;
use RankMath\Redirections\Cache as RedirectionsCache;
use RankMath\Admin\List_Table;
use RankMath\Monitor\Admin;

defined( 'ABSPATH' ) || exit;

/**
 * Table class.
 */
class Table extends List_Table {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		parent::__construct(
			[
				'screen'   => Admin::get_screen(),
				'singular' => 'event',
				'plural'   => 'events',
				'no_items' => esc_html__( 'The 404 error log is empty.', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Prepares the list of items for displaying.
	 */
	public function prepare_items() {
		$per_page = $this->get_items_per_page( 'rank_math_404_monitor_per_page', 100 );
		$search   = $this->get_search();

		$data = DB::get_logs(
			[
				'limit'   => $per_page,
				'order'   => $this->get_order(),
				'orderby' => $this->get_orderby( 'accessed' ),
				'paged'   => $this->get_pagenum(),
				'search'  => $search ? $search : '',
			]
		);

		$this->items = $data['logs'];

		foreach ( $this->items as $i => $item ) {
			$this->items[ $i ]['uri_decoded'] = urldecode( $item['uri'] );
		}

		$this->set_pagination_args(
			[
				'total_items' => $data['count'],
				'per_page'    => $per_page,
			]
		);
	}

	/**
	 * Extra controls to be displayed between bulk actions and pagination.
	 *
	 * @param string $which Where to show nav.
	 */
	protected function extra_tablenav( $which ) {
		if ( empty( $this->items ) ) {
			return;
		}
		?>
		<div class="alignleft actions">
			<input type="button" class="button button-link-delete action rank-math-clear-logs" value="<?php esc_attr_e( 'Clear Log', 'seo-by-rank-math' ); ?>">
		</div>
		<?php
	}

	/**
	 * Handles the checkbox column output.
	 *
	 * @param object $item The current item.
	 */
	public function column_cb( $item ) {
		$out = sprintf( '<input type="checkbox" name="log[]" value="%s" />', $item['id'] );
		return $this->do_filter( '404_monitor/list_table_column', $out, $item, 'cb' );
	}

	/**
	 * Handle the URI column.
	 *
	 * @param object $item The current item.
	 */
	protected function column_uri( $item ) {
		$link = '<a href="' . esc_url( home_url( $item['uri'] ) ) . '" target="_blank" title="' . esc_attr__( 'View', 'seo-by-rank-math' ) . '">' . esc_html( $item['uri_decoded'] ) . '</a>';
		$out  = $link . $this->column_actions( $item );
		return $this->do_filter( '404_monitor/list_table_column', $out, $item, 'uri' );
	}

	/**
	 * Handle the referer column.
	 *
	 * @param object $item The current item.
	 */
	protected function column_referer( $item ) {
		$out = '<a href="' . esc_url( $item['referer'] ) . '" target="_blank">' . esc_html( $item['referer'] ) . '</a>';
		return $this->do_filter( '404_monitor/list_table_column', $out, $item, 'referer' );
	}

	/**
	 * Handles the default column output.
	 *
	 * @param object $item        The current item.
	 * @param string $column_name The current column name.
	 */
	public function column_default( $item, $column_name ) {
		$out = '';
		if ( in_array( $column_name, [ 'times_accessed', 'accessed', 'user_agent' ], true ) ) {
			$out = esc_html( $item[ $column_name ] );
		}

		return $this->do_filter( '404_monitor/list_table_column', $out, $item, $column_name );
	}

	/**
	 * Generate row actions div.
	 *
	 * @param object $item The current item.
	 */
	public function column_actions( $item ) {
		$actions = [];

		$actions['view'] = sprintf(
			'<a href="%s" target="_blank">' . esc_html__( 'View', 'seo-by-rank-math' ) . '</a>',
			esc_url( home_url( $item['uri'] ) )
		);

		if ( Helper::get_module( 'redirections' ) ) {
			$this->add_redirection_actions( $item, $actions );
		}

		$actions['delete'] = sprintf(
			'<a href="%s" class="rank-math-404-delete">' . esc_html__( 'Delete', 'seo-by-rank-math' ) . '</a>',
			Helper::get_admin_url(
				'404-monitor',
				[
					'action'   => 'delete',
					'log'      => $item['id'],
					'security' => wp_create_nonce( '404_delete_log' ),
				]
			)
		);

		return $this->row_actions( $actions );
	}

	/**
	 * Add redirection actions.
	 *
	 * @param object $item    The current item.
	 * @param array  $actions Array of actions.
	 */
	private function add_redirection_actions( $item, &$actions ) {
		$redirection = RedirectionsCache::get_by_url( $item['uri_decoded'] );

		if ( ! $redirection ) {
			$redirection = RedirectionsDB::match_redirections( $item['uri_decoded'] );
		}

		if ( $redirection ) {
			$redirection_array = (array) $redirection;
			$url               = esc_url(
				Helper::get_admin_url(
					'redirections',
					[
						'redirection' => isset( $redirection_array['redirection_id'] ) ? $redirection_array['redirection_id'] : $redirection_array['id'],
						'security'    => wp_create_nonce( 'redirection_list_action' ),
						'action'      => 'edit',
					]
				)
			);

			$actions['view_redirection'] = sprintf( '<a href="%s" target="_blank">' . esc_html__( 'View Redirection', 'seo-by-rank-math' ) . '</a>', $url );
			return;
		}

		$url = esc_url(
			Helper::get_admin_url(
				'redirections',
				[
					'url' => $item['uri_decoded'],
				]
			)
		);

		$actions['redirect'] = sprintf(
			'<a href="%1$s" class="rank-math-404-redirect-btn">%2$s</a>',
			$url,
			esc_html__( 'Redirect', 'seo-by-rank-math' )
		);
	}

	/**
	 * Get the list of columns.
	 *
	 * @return array
	 */
	public function get_columns() {
		$columns = [
			'cb'             => '<input type="checkbox" />',
			'uri'            => esc_html__( 'URI', 'seo-by-rank-math' ),
			'referer'        => esc_html__( 'Referer', 'seo-by-rank-math' ),
			'user_agent'     => esc_html__( 'User-Agent', 'seo-by-rank-math' ),
			'times_accessed' => esc_html__( 'Hits', 'seo-by-rank-math' ),
			'accessed'       => esc_html__( 'Access Time', 'seo-by-rank-math' ),
		];

		$columns = $this->filter_columns( $columns );
		return $this->do_filter( '404_monitor/list_table_columns', $columns );
	}

	/**
	 * Filter columns.
	 *
	 * @param array $columns Original columns.
	 *
	 * @return array
	 */
	private function filter_columns( $columns ) {
		if ( 'simple' === Helper::get_settings( 'general.404_monitor_mode' ) ) {
			unset( $columns['referer'], $columns['user_agent'] );
			return $columns;
		}

		unset( $columns['times_accessed'] );
		return $columns;
	}

	/**
	 * Get the list of sortable columns.
	 *
	 * @return array
	 */
	public function get_sortable_columns() {
		$sortable = [
			'uri'            => [ 'uri', false ],
			'times_accessed' => [ 'times_accessed', false ],
			'accessed'       => [ 'accessed', false ],
		];

		return $this->do_filter( '404_monitor/list_table_sortable_columns', $sortable );
	}

	/**
	 * Get an associative array ( option_name => option_title ) with the list
	 * of bulk actions available on this table.
	 *
	 * @return array
	 */
	public function get_bulk_actions() {
		$actions = [
			'redirect' => esc_html__( 'Redirect', 'seo-by-rank-math' ),
			'delete'   => esc_html__( 'Delete', 'seo-by-rank-math' ),
		];

		if ( ! Helper::get_module( 'redirections' ) ) {
			unset( $actions['redirect'] );
		}

		return $actions;
	}
}
PK     ¡ŠU]1|Ëfp  p  )  includes/modules/404-monitor/class-db.phpnu „[µü¤        <?php
/**
 * The database operations for the 404 Monitor module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Monitor
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Monitor;

use RankMath\Helper;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * DB class.
 */
class DB {

	/**
	 * Get query builder.
	 *
	 * @return Query_Builder
	 */
	private static function table() {
		return Database::table( 'rank_math_404_logs' );
	}

	/**
	 * Get error log items.
	 *
	 * @param array $args Array of arguments.
	 *
	 * @return array
	 */
	public static function get_logs( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'orderby' => 'id',
				'order'   => 'DESC',
				'limit'   => 10,
				'paged'   => 1,
				'search'  => '',
				'ids'     => [],
				'uri'     => '',
			]
		);

		$args = apply_filters( 'rank_math/404_monitor/get_logs_args', $args );

		$table = self::table()->found_rows()->page( $args['paged'] - 1, $args['limit'] );

		if ( ! empty( $args['search'] ) ) {
			$table->whereLike( 'uri', rawurlencode( $args['search'] ) );
		}

		if ( ! empty( $args['ids'] ) ) {
			$table->whereIn( 'id', (array) $args['ids'] );
		}

		if ( ! empty( $args['uri'] ) ) {
			$table->where( 'uri', $args['uri'] );
		}

		if ( ! empty( $args['orderby'] ) && in_array( $args['orderby'], [ 'id', 'uri', 'accessed', 'times_accessed' ], true ) ) {
			$table->orderBy( $args['orderby'], $args['order'] );
		}

		return [
			'logs'  => $table->get( ARRAY_A ),
			'count' => $table->get_found_rows(),
		];
	}

	/**
	 * Add a record.
	 *
	 * @param array $args Values to insert.
	 */
	public static function add( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'uri'            => '',
				'accessed'       => current_time( 'mysql' ),
				'times_accessed' => '1',
				'referer'        => '',
				'user_agent'     => '',
			]
		);

		// Maybe delete logs if record exceed defined limit.
		$limit = absint( Helper::get_settings( 'general.404_monitor_limit' ) );
		if ( $limit && self::get_count() >= $limit ) {
			self::clear_logs();
		}

		return self::table()->insert( $args, [ '%s', '%s', '%d', '%s', '%s', '%s' ] );
	}

	/**
	 * Update a record.
	 *
	 * @param array $args Values to update.
	 */
	public static function update( $args ) {
		$row = self::table()->where( 'uri', $args['uri'] )->one( ARRAY_A );

		if ( $row ) {
			return self::update_counter( $row );
		}

		return self::add( $args );
	}

	/**
	 * Delete a record.
	 *
	 * @param array $ids Array of IDs to delete.
	 *
	 * @return int Number of records deleted.
	 */
	public static function delete_log( $ids ) {
		return self::table()->whereIn( 'id', (array) $ids )->delete();
	}

	/**
	 * Get total number of log items (number of rows in the DB table).
	 *
	 * @return int
	 */
	public static function get_count() {
		return self::table()->selectCount()->getVar();
	}

	/**
	 * Clear logs completely.
	 *
	 * @return int
	 */
	public static function clear_logs() {
		return self::table()->truncate();
	}

	/**
	 * Get stats for dashboard widget.
	 *
	 * @return array
	 */
	public static function get_stats() {
		return self::table()->selectCount( '*', 'total' )->selectSum( 'times_accessed', 'hits' )->one();
	}

	/**
	 * Update if URL is matched and hit.
	 *
	 * @param object $row Record to update.
	 *
	 * @return int|false The number of rows updated, or false on error.
	 */
	private static function update_counter( $row ) {
		$update_data = [
			'accessed'       => current_time( 'mysql' ),
			'times_accessed' => absint( $row['times_accessed'] ) + 1,
		];

		return self::table()->set( $update_data )->where( 'id', absint( $row['id'] ) )->update();
	}
}
PK     ¡ŠU]:¼ÞÏ   Ï   9  includes/modules/404-monitor/assets/scss/404-monitor.scssnu „[µü¤        // compileCompressed: $1.css
/*!
 * Plugin:	Rank Math - 404 Monitor
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	404-monitor.css
 */


.metabox-prefs legend + label {
	display: none;
}
PK     ¡ŠU]üw  w  5  includes/modules/404-monitor/assets/js/404-monitor.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}};const e=jQuery;var n;(n=t.n(e)())(function(){var t=this;t.wrap=n(".rank-math-404-monitor-wrap"),t.wrap.on("click",".rank-math-404-delete",function(t){t.preventDefault();var e=n(this),r=e.attr("href").replace("admin.php","admin-ajax.php").replace("action=delete","action=rank_math_delete_log").replace("page=","math=");n.ajax({url:r,type:"GET",success:function(t){t&&t.success&&e.closest("tr").fadeOut(800,function(){n(this).remove()})}})}),t.wrap.on("click",".rank-math-clear-logs",function(t){if(t.preventDefault(),!confirm(rankMath.logConfirmClear))return!1;n(this).closest("form").append('<input type="hidden" name="action" value="clear_log">').submit()}),n("#doaction, #doaction2").on("click",function(){"redirect"===n("#bulk-action-selector-top").val()&&n(this).closest("form").attr("action",rankMath.redirectionsUri)})})}();PK     ¡ŠU]^ˆ�w¦   ¦   7  includes/modules/404-monitor/assets/css/404-monitor.cssnu „[µü¤        /*!
 * Plugin:	Rank Math - 404 Monitor
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	404-monitor.css
 */.metabox-prefs legend+label{display:none}PK     ¡ŠU]í…bÔ  Ô  ,  includes/modules/404-monitor/class-admin.phpnu „[µü¤        <?php
/**
 * The admin-side code for the 404 Monitor module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Monitor
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Monitor;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Module\Base;
use RankMath\Admin\Page;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory;

	/**
	 * WP_List_Table class name.
	 *
	 * @var string
	 */
	public $table;

	/**
	 * Screen options.
	 *
	 * @var array
	 */
	public $screen_options = [];

	/**
	 * Page object.
	 *
	 * @var Page
	 */
	public $page;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$directory = __DIR__;
		$this->config(
			[
				'id'             => '404-monitor',
				'directory'      => $directory,
				'table'          => 'RankMath\Monitor\Table',
				'screen_options' => [
					'id'      => 'rank_math_404_monitor_per_page',
					'default' => 100,
				],
			]
		);
		parent::__construct();

		if ( $this->page->is_current_page() ) {
			$this->action( 'init', 'init' );
		}

		if ( Helper::has_cap( '404_monitor' ) ) {
			$this->filter( 'rank_math/settings/general', 'add_settings' );
		}
	}

	/**
	 * Initialize.
	 */
	public function init() {
		$action = Helper::get_request_action();
		if ( false === $action || ! in_array( $action, [ 'delete', 'clear_log' ], true ) ) {
			return;
		}

		if ( ! check_admin_referer( 'bulk-events' ) ) {
			check_admin_referer( '404_delete_log', 'security' );
		}

		$action = 'do_' . $action;
		$this->$action();
	}

	/**
	 * Delete selected log.
	 */
	protected function do_delete() {
		$log = Param::request( 'log', '', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
		if ( empty( $log ) ) {
			return;
		}

		$count = DB::delete_log( $log );
		if ( $count > 0 ) {
			Helper::add_notification(
				/* translators: delete counter */
				sprintf( esc_html__( '%d log(s) deleted.', 'seo-by-rank-math' ), $count ),
				[ 'type' => 'success' ]
			);
		}
	}

	/**
	 * Clears all 404 logs, by truncating the log table.
	 * Fired with the `$this->$action();` line inside the `init()` method.
	 */
	protected function do_clear_log() {
		$count = DB::get_count();
		DB::clear_logs();

		Helper::add_notification(
			/* translators: delete counter */
			sprintf( esc_html__( 'Log cleared - %d items deleted.', 'seo-by-rank-math' ), $count ),
			[ 'type' => 'success' ]
		);
	}

	/**
	 * Register the 404 Monitor admin page.
	 */
	public function register_admin_page() {

		$dir = $this->directory . '/views/';
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		$this->page = new Page(
			'rank-math-404-monitor',
			esc_html__( '404 Monitor', 'seo-by-rank-math' ),
			[
				'position'   => 30,
				'parent'     => 'rank-math',
				'capability' => 'rank_math_404_monitor',
				'render'     => $dir . 'main.php',
				'help'       => [
					'404-overview'       => [
						'title' => esc_html__( 'Overview', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-overview.php',
					],
					'404-screen-content' => [
						'title' => esc_html__( 'Screen Content', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-screen-content.php',
					],
					'404-actions'        => [
						'title' => esc_html__( 'Available Actions', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-actions.php',
					],
					'404-bulk'           => [
						'title' => esc_html__( 'Bulk Actions', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-bulk.php',
					],
				],
				'assets'     => [
					'styles'  => [
						'rank-math-common'      => '',
						'rank-math-404-monitor' => $uri . '/assets/css/404-monitor.css',
					],
					'scripts' => [ 'rank-math-404-monitor' => $uri . '/assets/js/404-monitor.js' ],
				],
			]
		);

		if ( $this->page->is_current_page() ) {
			Helper::add_json( 'logConfirmClear', esc_html__( 'Are you sure you wish to delete all 404 error logs?', 'seo-by-rank-math' ) );
			Helper::add_json( 'redirectionsUri', Helper::get_admin_url( 'redirections' ) );
		}
	}

	/**
	 * Add module settings tab in the General Settings.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_settings( $tabs ) {

		Arr::insert(
			$tabs,
			[
				'404-monitor' => [
					'icon'  => 'rm-icon rm-icon-404',
					'title' => esc_html__( '404 Monitor', 'seo-by-rank-math' ),
					/* translators: 1. Link to KB article 2. Link to redirection setting scree */
					'desc'  => sprintf( esc_html__( 'Monitor broken pages that ruin user-experience and affect SEO. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( '404-monitor-settings', 'Options Panel 404 Monitor Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => $this->directory . '/views/options.php',
					'json'  => [
						'choicesComparisonTypes' => Helper::choices_comparison_types(),
					],
				],
			],
			7
		);

		return $tabs;
	}

	/**
	 * Output page title actions.
	 *
	 * @return void
	 */
	public function page_title_actions() {
		$actions = [
			'settings'   => [
				'class' => 'page-title-action',
				'href'  => Helper::get_settings_url( 'general', '404-monitor' ),
				'label' => __( 'Settings', 'seo-by-rank-math' ),
			],
			'learn_more' => [
				'class' => 'page-title-action',
				'href'  => KB::get( '404-monitor', '404 Page Learn More Button' ),
				'label' => __( 'Learn More', 'seo-by-rank-math' ),
			],
		];

		/**
		 * Filters the title actions available on the 404 Monitor page.
		 *
		 * @param array $actions Multidimensional array of actions to show.
		 */
		$actions = $this->do_filter( '404_monitor/page_title_actions', $actions );

		foreach ( $actions as $action_name => $action ) {
			?>
				<a class="<?php echo esc_attr( $action['class'] ); ?> rank-math-404-monitor-<?php echo esc_attr( $action_name ); ?>" href="<?php echo esc_attr( $action['href'] ); ?>" target="_blank"><?php echo esc_attr( $action['label'] ); ?></a>
			<?php
		}
	}
}
PK     ¡ŠU]ŒÛ      &  includes/modules/404-monitor/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¢ŠU]>´j    >  includes/modules/404-monitor/views/help-tab-screen-content.phpnu „[µü¤        <?php
/**
 * 404 Monitor inline help: "Screen Content" tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Monitor
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'You can customize the display of this screen\'s contents in a number of ways:', 'seo-by-rank-math' ); ?>
</p>
<ul>
	<li><?php esc_html_e( 'You can hide/display columns based on your needs.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can decide how many items to list per screen using the Screen Options tab.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can search items using the search form at the top.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can reorder the list by clicking on the column headings. ', 'seo-by-rank-math' ); ?></li>
</ul>
PK     ¢ŠU]åewï  ï  +  includes/modules/404-monitor/views/main.phpnu „[µü¤        <?php
/**
 * Main template for 404 monitor
 *
 * @package    RankMath
 * @subpackage RankMath\Monitor
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$monitor = Helper::get_module( '404-monitor' )->admin;
$monitor->table->prepare_items();
?>
<div class="wrap rank-math-404-monitor-wrap">

	<h2>
		<?php echo esc_html( get_admin_page_title() ); ?>
		<?php $monitor->page_title_actions(); ?>
	</h2>

	<?php \do_action( 'rank_math/404_monitor/before_list_table', $monitor ); ?>

	<form method="get">
		<input type="hidden" name="page" value="rank-math-404-monitor">
		<?php $monitor->table->search_box( esc_html__( 'Search', 'seo-by-rank-math' ), 's' ); ?>
	</form>
	<form method="post">
		<?php $monitor->table->display(); ?>
	</form>

</div>
PK     ¢ŠU]ŒÛ      ,  includes/modules/404-monitor/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¢ŠU]ìjóB^  ^  4  includes/modules/404-monitor/views/help-tab-bulk.phpnu „[µü¤        <?php
/**
 * 404 Monitor inline help: "Bulk Actions" tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Monitor
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'You can also redirect or delete multiple items at once. Selecting multiple items to redirect allows you to redirect them to a single URL.', 'seo-by-rank-math' ); ?>
</p>
PK     ¢ŠU]M`»ÉV
  V
  .  includes/modules/404-monitor/views/options.phpnu „[µü¤        <?php
/**
 * 404 Monitor general settings.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Monitor
 * @author     Rank Math <support@rankmath.com>
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => '404_advanced_monitor',
		'type'    => 'notice',
		'what'    => 'error',
		'content' => esc_html__( 'If you have hundreds of 404 errors, your error log might increase quickly. Only choose this option if you have a very few 404s and are unable to replicate the 404 error on a particular URL from your end.', 'seo-by-rank-math' ),
		'dep'     => [ [ '404_monitor_mode', 'advanced' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => '404_monitor_mode',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Mode', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'The Simple mode only logs URI and access time, while the Advanced mode creates detailed logs including additional information such as the Referer URL.', 'seo-by-rank-math' ),
		'options' => [
			'simple'   => esc_html__( 'Simple', 'seo-by-rank-math' ),
			'advanced' => esc_html__( 'Advanced', 'seo-by-rank-math' ),
		],
		'default' => 'simple',
	]
);

$cmb->add_field(
	[
		'id'         => '404_monitor_limit',
		'type'       => 'text',
		'name'       => esc_html__( 'Log Limit', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Sets the max number of rows in a log. Set to 0 to disable the limit.', 'seo-by-rank-math' ),
		'default'    => '100',
		'attributes' => [ 'type' => 'number' ],
	]
);

$monitor_exclude = $cmb->add_field(
	[
		'id'      => '404_monitor_exclude',
		'type'    => 'group',
		'name'    => esc_html__( 'Exclude Paths', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enter URIs or keywords you wish to prevent from getting logged by the 404 monitor.', 'seo-by-rank-math' ),
		'options' => [
			'add_button'    => esc_html__( 'Add another', 'seo-by-rank-math' ),
			'remove_button' => esc_html__( 'Remove', 'seo-by-rank-math' ),
		],
		'classes' => 'cmb-group-text-only',
	]
);

$cmb->add_group_field(
	$monitor_exclude,
	[
		'id'   => 'exclude',
		'type' => 'text',
	]
);

$cmb->add_group_field(
	$monitor_exclude,
	[
		'id'      => 'comparison',
		'type'    => 'select',
		'options' => Helper::choices_comparison_types(),
	]
);

$cmb->add_field(
	[
		'id'      => '404_monitor_ignore_query_parameters',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Ignore Query Parameters', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Turn ON to ignore all query parameters (the part after a question mark in a URL) when logging 404 errors.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);
PK     ¢ŠU]@É£ê  ê  8  includes/modules/404-monitor/views/help-tab-overview.phpnu „[µü¤        <?php
/**
 * 404 Monitor inline help: "Overview" tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Monitor
 */

use RankMath\KB;

defined( 'ABSPATH' ) || exit;

?>

<p>
	<?php esc_html_e( 'With the 404 monitor you can see where users and search engines are unable to find your content.', 'seo-by-rank-math' ); ?>
</p>

<p>
	<?php esc_html_e( 'Knowledge Base Articles:', 'seo-by-rank-math' ); ?>
</p>

<ul>
	<li>
		<a href="<?php echo esc_url( KB::get( '404-monitor', '404 Monitor Help Toggle' ) ); ?>" target="_blank">
			<?php esc_html_e( '404 Monitor', 'seo-by-rank-math' ); ?>
</a>
	</li>
	<li>
		<a href="<?php echo esc_url( KB::get( '404-monitor-settings', '404 Monitor Help Toggle' ) ); ?>" target="_blank">
			<?php esc_html_e( '404 Monitor Settings', 'seo-by-rank-math' ); ?>
</a>
	</li>
	<li>
		<a href="<?php echo esc_url( KB::get( 'fix-404', '404 Monitor Help Toggle Fix link' ) ); ?>" target="_blank">
			<?php esc_html_e( 'Fix 404 Errors', 'seo-by-rank-math' ); ?>
</a>
	</li>
</ul>
PK     ¢ŠU]V¨"    7  includes/modules/404-monitor/views/help-tab-actions.phpnu „[µü¤        <?php
/**
 * 404 Monitor inline help: "Available Actions" tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Monitor
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'Hovering over a row in the list will display action links that allow you to manage the item. You can perform the following actions:', 'seo-by-rank-math' ); ?>
</p>
<ul>
	<li><?php echo wp_kses_post( __( '<strong>View Details</strong> shows details about the 404 requests.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( '<strong>Redirect</strong> takes you to the Redirections manager to redirect the 404 URL.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( '<strong>Delete</strong> permanently removes the item from the list.', 'seo-by-rank-math' ) ); ?></li>
</ul>
PK     ¢ŠU]µ[¸Ò¾  ¾  .  includes/modules/404-monitor/class-monitor.phpnu „[µü¤        <?php
/**
 * The 404 Monitor Module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Monitor
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Monitor;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use donatj\UserAgent\UserAgentParser;

defined( 'ABSPATH' ) || exit;

/**
 * Monitor class.
 */
class Monitor {

	use Hooker;
	use Ajax;

	/**
	 * Admin object.
	 *
	 * @var Admin
	 */
	public $admin;

	/**
	 * Whether the current request was a 404 at the time the `wp` action fired.
	 *
	 * Captured before `template_redirect` fires, because some themes replace
	 * $wp_query at that point to serve a custom error page, which causes
	 * is_404() to return false by the time capture_404() runs.
	 *
	 * @var bool
	 */
	private $is_404 = false;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( is_admin() ) {
			$this->admin = new Admin();
		}

		if ( Helper::is_ajax() ) {
			$this->ajax( 'delete_log', 'delete_log' );
		}

		if ( Helper::has_cap( '404_monitor' ) && Helper::is_rest() ) {
			$this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 11 );
		}

		$this->action( 'wp', 'save_404_flag' );
		$this->action( $this->get_hook(), 'capture_404' );

		if ( Helper::has_cap( '404_monitor' ) ) {
			$this->action( 'rank_math/admin_bar/items', 'admin_bar_items', 11 );
		}
	}

	/**
	 * Save the 404 status before any theme or plugin can replace $wp_query.
	 *
	 * Hooked to `wp`, which fires before `template_redirect`. Some themes
	 * replace the global query on `template_redirect` to render a custom error
	 * page, which causes is_404() to return false afterwards. Capturing the
	 * flag here ensures the original 404 state is preserved for capture_404().
	 */
	public function save_404_flag() {
		$this->is_404 = is_404();
	}

	/**
	 * Add stats in the admin dashboard widget.
	 */
	public function dashboard_widget() {
		$data = DB::get_stats();
		?>
		<h3>
			<?php esc_html_e( '404 Monitor', 'seo-by-rank-math' ); ?>
			<a href="<?php echo esc_url( Helper::get_admin_url( '404-monitor' ) ); ?>" class="rank-math-view-report" title="<?php esc_html_e( 'View Report', 'seo-by-rank-math' ); ?>"><i class="dashicons dashicons-chart-bar"></i></a>
		</h3>
		<div class="rank-math-dashboard-block">
			<div>
				<h4>
					<?php esc_html_e( 'Log Count', 'seo-by-rank-math' ); ?>
					<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span><?php esc_html_e( 'Total number of 404 pages opened by the users.', 'seo-by-rank-math' ); ?></span></span>
				</h4>
				<strong class="text-large"><?php echo esc_html( Str::human_number( $data->total ) ); ?></strong>
			</div>
			<div>
				<h4>
					<?php esc_html_e( 'URL Hits', 'seo-by-rank-math' ); ?>
					<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span><?php esc_html_e( 'Total number visits received on all the 404 pages.', 'seo-by-rank-math' ); ?></span></span>
				</h4>
				<strong class="text-large"><?php echo esc_html( Str::human_number( $data->hits ) ); ?></strong>
			</div>
		</div>
		<?php
	}

	/**
	 * Add admin bar item.
	 *
	 * @param Admin_Bar_Menu $menu Menu class instance.
	 */
	public function admin_bar_items( $menu ) {
		$menu->add_sub_menu(
			'404-monitor',
			[
				'title'    => esc_html__( '404 Monitor', 'seo-by-rank-math' ),
				'href'     => Helper::get_admin_url( '404-monitor' ),
				'meta'     => [ 'title' => esc_html__( 'Review 404 errors on your site', 'seo-by-rank-math' ) ],
				'priority' => 50,
			]
		);
	}

	/**
	 * Delete a log item.
	 */
	public function delete_log() {

		check_ajax_referer( '404_delete_log', 'security' );

		$this->has_cap_ajax( '404_monitor' );

		$id = Param::request( 'log' );
		if ( ! $id ) {
			$this->error( esc_html__( 'No valid id found.', 'seo-by-rank-math' ) );
		}

		DB::delete_log( $id );
		$this->success( esc_html__( 'Log item successfully deleted.', 'seo-by-rank-math' ) );
	}

	/**
	 * Log the request details when a 404 is detected, unless WP's response code is 410 or 451.
	 *
	 * Prefers the flag set by save_404_flag() (hooked to `wp`) over a live
	 * is_404() call, because some themes replace $wp_query on `template_redirect`
	 * before this hook fires, making is_404() return false at that point.
	 * Falls back to a live is_404() check when save_404_flag() has not run
	 * (e.g. in unit tests that call capture_404() directly).
	 */
	public function capture_404() {
		if ( ( ! $this->is_404 && ! is_404() ) || in_array( http_response_code(), [ 410, 451 ], true ) ) {
			return;
		}

		$uri = untrailingslashit( Helper::get_current_page_url( Helper::get_settings( 'general.404_monitor_ignore_query_parameters' ) ) );
		$uri = preg_replace( '/(?<=\/)(https?:\/[^\s]*)/i', '', $uri );
		$uri = str_replace( Helper::get_home_url( '/' ), '', $uri );
		if ( ! $uri ) {
			return;
		}

		// Check if excluded.
		if ( $this->is_url_excluded( $uri ) ) {
			return;
		}

		// Mode = simple.
		if ( 'simple' === Helper::get_settings( 'general.404_monitor_mode' ) ) {
			DB::update( [ 'uri' => $uri ] );
			return;
		}

		// Mode = advanced.
		DB::add(
			[
				'uri'        => $uri,
				'referer'    => Param::server( 'HTTP_REFERER', '' ),
				'user_agent' => $this->get_user_agent(),
			]
		);
	}

	/**
	 * Check if given URL is excluded.
	 *
	 * @param string $uri The URL to check for exclusion.
	 *
	 * @return boolean
	 */
	private function is_url_excluded( $uri ) {
		$excludes = Helper::get_settings( 'general.404_monitor_exclude' );
		if ( ! is_array( $excludes ) ) {
			return false;
		}

		foreach ( $excludes as $rule ) {
			$rule['exclude'] = empty( $rule['exclude'] ) ? '' : $this->sanitize_exclude_pattern( $rule['exclude'], $rule['comparison'] );

			if ( ! empty( $rule['exclude'] ) && Str::comparison( $rule['exclude'], $uri, $rule['comparison'] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Check if regex pattern has delimiters or not, and add them if not.
	 *
	 * @param string $pattern The pattern to check.
	 * @param string $comparison The comparison type.
	 *
	 * @return string
	 */
	private function sanitize_exclude_pattern( $pattern, $comparison ) {
		if ( 'regex' !== $comparison ) {
			return $pattern;
		}

		if ( preg_match( '[^(?:([^a-zA-Z0-9\\\\]).*\\1|\\(.*\\)|\\{.*\\}|\\[.*\\]|<.*>)[imsxADSUXJu]*$]', $pattern ) ) {
			return $pattern;
		}

		return '[' . addslashes( $pattern ) . ']';
	}

	/**
	 * Get user-agent header.
	 *
	 * @return string
	 */
	private function get_user_agent() {
		$u_agent = Param::server( 'HTTP_USER_AGENT' );
		if ( empty( $u_agent ) ) {
			return '';
		}

		$parsed  = $this->parse_user_agent( $u_agent );
		$nice_ua = '';
		if ( ! empty( $parsed['browser'] ) ) {
			$nice_ua .= $parsed['browser'];
		}
		if ( ! empty( $parsed['version'] ) ) {
			$nice_ua .= ' ' . $parsed['version'];
		}

		return $nice_ua . ' | ' . $u_agent;
	}

	/**
	 * Parses a user-agent string into its parts.
	 *
	 * @link https://github.com/donatj/PhpUserAgent
	 *
	 * @param string $u_agent User agent string to parse or null. Uses $_SERVER['HTTP_USER_AGENT'] on NULL.
	 *
	 * @return string[] an array with browser, version and platform keys
	 */
	private function parse_user_agent( $u_agent ) {
		if ( ! $u_agent ) {
			return [
				'platform' => null,
				'browser'  => null,
				'version'  => null,
			];
		}

		$parser = new UserAgentParser();
		$agent  = $parser->parse( $u_agent );

		return [
			'platform' => $agent->platform(),
			'browser'  => $agent->browser(),
			'version'  => $agent->browserVersion(),
		];
	}

	/**
	 * Function to get the hook name depending on the theme.
	 *
	 * @return string WP hook.
	 */
	private function get_hook() {
		$hook = defined( 'CT_VERSION' ) ?
			'oxygen_enqueue_frontend_scripts' :
			(
				function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ?
				'wp_head' :
				'get_header'
			);

		/**
		 * Allow developers to change the action hook that will trigger the 404 capture.
		*/
		return $this->do_filter( '404_monitor/hook', $hook );
	}
}
PK     ¢ŠU]Ø])Ü�  �  4  includes/modules/ai-visibility/Admin/class-admin.phpnu „[µü¤        <?php
/**
 * The AI Visibility module admin page registration.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Page;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin {

	use Hooker;

	/**
	 * Admin page slug.
	 */
	const PAGE_SLUG = 'rank-math-ai-visibility';

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->filter( 'rank_math/admin_pages', 'add_admin_page' );
		$this->action( 'init', 'register_admin_page' );
		$this->action( 'admin_enqueue_scripts', 'enqueue_mixpanel' );
		$this->action( 'rank_math/admin_bar/items', 'admin_bar_items' );
	}

	/**
	 * Allow the AI Visibility page slug through Rank Math's page allowlist.
	 *
	 * @param array $pages Existing allowed page slugs.
	 *
	 * @return array
	 */
	public function add_admin_page( $pages ) {
		$pages[] = 'rank-math_page_' . self::PAGE_SLUG;
		return $pages;
	}

	/**
	 * Register the admin page with Rank Math's Page wrapper.
	 */
	public function register_admin_page() {
		$new_label = '<span class="rank-math-new-label" style="color:#ed5e5e;font-size:10px;font-weight:normal;">' . esc_html__( 'New!', 'seo-by-rank-math' ) . '</span>';
		new Page(
			self::PAGE_SLUG,
			esc_html__( 'AI Visibility', 'seo-by-rank-math' ),
			[
				'position'   => 4,
				'parent'     => 'rank-math',
				// Translators: placeholder is the new label.
				'menu_title' => sprintf( esc_html__( 'AI Visibility %s', 'seo-by-rank-math' ), $new_label ),
				'render'     => function () {
					echo '<div id="rank-math-ai-visibility-container"></div>';
				},
				'classes'    => [ 'rank-math-page' ],
				'assets'     => [
					'styles'  => [
						'wp-components'    => '',
						'rank-math-common' => '',
					],
					'scripts' => [
						'lodash'                  => '',
						'wp-api-fetch'            => '',
						'wp-components'           => '',
						'wp-element'              => '',
						'wp-url'                  => '',
						'rank-math-components'    => '',
						'rank-math-ai-visibility' => RANK_MATH_URL . 'includes/modules/ai-visibility/assets/js/ai-visibility.js',
					],
					'json'    => [
						'aiVisibility' => [
							'isSiteConnected' => Helper::is_site_connected(),
							'activateUrl'     => Admin_Helper::get_activate_url( admin_url( 'admin.php?page=rank-math-ai-visibility' ) ),
							'isSiteUrlValid'  => Admin_Helper::is_site_url_valid(),
							'isPro'           => defined( 'RANK_MATH_PRO_FILE' ),
							'plan'            => Helper::get_content_ai_plan(),
							'locales'         => array_values(
								array_filter(
									array_map(
										function ( $key, $label ) {
											// 'all' (Worldwide) has no country code â€” skip it.
											if ( 'all' === $key ) {
												return null;
											}
											// Extract country code: 'en_US' â†’ 'US', 'zh-TW_TW' â†’ 'TW'.
											$parts        = explode( '_', $key );
											$country_code = strtoupper( end( $parts ) );
											return [
												'label' => $label,
												'value' => $country_code,
											];
										},
										array_keys( Helper::choices_contentai_countries() ),
										Helper::choices_contentai_countries()
									)
								)
							),
						],
					],
				],
			]
		);
	}

	/**
	 * Enqueue Mixpanel script and inject tracking data for JS events on this page.
	 */
	public function enqueue_mixpanel() {
		if ( Param::get( 'page' ) !== self::PAGE_SLUG ) {
			return;
		}

		if ( ! rank_math()->tracking->is_opted_in() ) {
			return;
		}

		rank_math()->tracking->enqueue_mixpanel_for_page();
	}

	/**
	 * Add an "AI Visibility" entry to the Rank Math admin-bar menu.
	 *
	 * @param \RankMath\Admin\Admin_Bar_Menu $menu Admin bar menu object.
	 */
	public function admin_bar_items( $menu ) {
		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}

		$menu->add_sub_menu(
			'ai-visibility',
			[
				'title'    => esc_html__( 'AI Visibility', 'seo-by-rank-math' ),
				'href'     => Helper::get_admin_url( 'ai-visibility' ),
				'priority' => 65,
			]
		);
	}
}
PK     ¢ŠU]¿ôV³æ ³æ 9  includes/modules/ai-visibility/assets/js/ai-visibility.jsnu „[µü¤        !function(){"use strict";var e={3111:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-analyses{display:flex;flex-direction:column;gap:24px}.rank-math-ai-visibility-analyses__error{padding:8px 16px;background:#fef0f0;border:1px solid #f66276;border-radius:4px;color:#f66276;font-size:14px}.rank-math-ai-visibility-analyses__card{border-radius:4px;border:1px solid #e0e0e0;overflow:hidden}.rank-math-ai-visibility-analyses .rank-math-table{font-size:13px}.rank-math-ai-visibility-analyses .rank-math-table-card{border-top:1px solid #e0e0e0}.rank-math-ai-visibility-analyses .rank-math-table thead{background:#fcfcfc;border-color:#e0e0e0}.rank-math-ai-visibility-analyses .rank-math-table thead th{padding:13px 16px}.rank-math-ai-visibility-analyses .rank-math-table thead th:first-child{padding:13px 26px}.rank-math-ai-visibility-analyses .rank-math-table thead th .rank-math-table-header-cell{color:#1e1e1e;font-size:14px}.rank-math-ai-visibility-analyses .rank-math-table tbody tr td{padding:16px}.rank-math-ai-visibility-analyses .rank-math-table tbody tr td:first-child{padding:16px 26px}.rank-math-ai-visibility-analyses .rank-math-table tbody .rank-math-table-row,.rank-math-ai-visibility-analyses .rank-math-table tbody .rank-math-table-row:hover,.rank-math-ai-visibility-analyses .rank-math-table tbody .rank-math-table-row:nth-child(odd){background:rgba(0,0,0,0)}.rank-math-ai-visibility-analyses .rank-math-table-footer{justify-content:center;padding:20px 0}.rank-math-ai-visibility-analyses .rank-math-table-footer-nav{justify-content:center;align-items:center}.rank-math-ai-visibility-analyses .rank-math-pagination-page-info{color:#666}.rank-math-ai-visibility-analyses .rank-math-pagination-separator{color:#b2b2b2}.rank-math-ai-visibility-analyses .rank-math-pagination-jump span{color:#666}.rank-math-ai-visibility-analyses .rank-math-pagination-jump .rank-math-pagination-input{width:31px;height:28px;border-radius:2px;min-height:28px;border-color:#c6c6c6;color:#757575}",""]);const l=o},834:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-analyses-filter-bar{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;padding:15px 25px;background-color:#fff}.rank-math-ai-visibility-analyses-filter-bar .components-base-control{margin-bottom:0}.rank-math-ai-visibility-analyses-filter-bar__brand{min-width:150px;flex-shrink:0}.rank-math-ai-visibility-analyses-filter-bar__status{min-width:140px;flex-shrink:0}.rank-math-ai-visibility-analyses-filter-bar__search{flex:1;min-width:120px;max-width:260px}.rank-math-ai-visibility-analyses-filter-bar__search .components-input-control.is-focused .components-input-control__backdrop{border-color:#017cba !important;box-shadow:0 0 0 2px rgba(1,124,186,.15) !important}.rank-math-ai-visibility-analyses-filter-bar__search input[type=text],.rank-math-ai-visibility-analyses-filter-bar__search input[type=search]{height:36px;border-radius:2px;font-size:13px}.rank-math-ai-visibility-analyses-filter-bar__search input[type=text]:focus,.rank-math-ai-visibility-analyses-filter-bar__search input[type=search]:focus{outline:none !important;box-shadow:none !important}.rank-math-ai-visibility-analyses-filter-bar__search input[type=text]{padding:0 12px}.rank-math-ai-visibility-analyses-filter-bar__search input[type=search]{padding:0 5px}.rank-math-ai-visibility-analyses-filter-bar__dates{display:flex;align-items:center;gap:6px;flex-shrink:0;margin-left:auto}.rank-math-ai-visibility-analyses-filter-bar__date-sep{font-size:13px;color:#9b9b9b;flex-shrink:0}.rank-math-ai-visibility-analyses-filter-bar__date-input{border:none;outline:none;font-size:12px;color:#1e1e1e;background:rgba(0,0,0,0);width:100px;padding:0}.rank-math-ai-visibility-analyses-filter-bar__clear{flex-shrink:0;white-space:nowrap;font-size:12px}#rank-math-ai-visibility-container .components-input-control__input,#rank-math-ai-visibility-container .components-select-control__input{height:36px;min-height:36px}#rank-math-ai-visibility-container .components-select-control__input{color:#757575;padding:0 16px}#rank-math-ai-visibility-container .components-input-control__backdrop{border-color:#949494}",""]);const l=o},5517:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-analyses .rank-math-table-header{display:none !important}.rank-math-ai-visibility-analyses table th:nth-child(1){width:45%}.rank-math-ai-visibility-analyses table th:nth-child(2){width:35%}.rank-math-ai-visibility-analyses table th:nth-child(3){width:20%}.rank-math-ai-visibility-analyses-table__time-cell{display:flex;align-items:center;gap:6px;white-space:nowrap}",""]);const l=o},4373:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-analysis-run-detail__stat-cards{display:flex;gap:28px;margin-bottom:26px;margin-top:24px}.rank-math-ai-visibility-analysis-run-detail__table{background:#fff;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden}.rank-math-ai-visibility-analysis-run-detail__table-row{display:grid;grid-template-columns:1fr 140px 160px;align-items:center;padding:20px 35px;border-bottom:1px solid #e0e0e0;gap:16px}.rank-math-ai-visibility-analysis-run-detail__table-row:last-child{border-bottom:none}.rank-math-ai-visibility-analysis-run-detail__table-row--header{background:#fcfcfc;font-size:12px;font-weight:600;color:#1e1e1e;text-transform:uppercase;letter-spacing:.03em;padding:13px 35px}.rank-math-ai-visibility-analysis-run-detail__col{min-width:0}.rank-math-ai-visibility-analysis-run-detail__col--query{font-size:13px;color:#1e1e1e;line-height:1.5}.rank-math-ai-visibility-analysis-run-detail__col--sentiment{display:flex;align-items:center}.rank-math-ai-visibility-analysis-run-detail__content{background:#fff;border-width:0px 1px 1px 1px;border-style:solid;border-color:#e0e0e0;border-radius:0px 0px 4px 4px;padding:24px 34px 34px 34px;margin:24px 0 0 0}",""]);const l=o},9717:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility{margin:0}.rank-math-ai-visibility .rank-math-tabs{margin-top:16px}.rank-math-ai-visibility .rank-math-table tbody .rank-math-table-row:focus{outline:none}.rank-math-ai-visibility .components-checkbox-control__input[type=checkbox]:checked,.rank-math-ai-visibility .components-checkbox-control__input[type=checkbox]:indeterminate{background:#017cba;border-color:#017cba}.rank-math-ai-visibility .components-input-control__suffix svg,.rank-math-ai-visibility .components-input-control__suffix,.rank-math-ai-visibility .components-input-control__prefix{color:#757575}.rank-math-ai-visibility .rank-math-table-pagination-buttons{display:inline-flex}.rank-math-ai-visibility .rank-math-table-pagination-buttons .rank-math-pagination-btn{color:#757575;border-radius:2px}.rank-math-ai-visibility .rank-math-table-pagination-buttons .rank-math-pagination-btn:first-child{border-top-right-radius:0;margin-right:-1px;border-bottom-right-radius:0}.rank-math-ai-visibility .rank-math-table-pagination-buttons .rank-math-pagination-btn:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.rank-math-ai-visibility .rank-math-table-pagination-buttons .rank-math-pagination-input{width:auto;padding:0}.rank-math-ai-visibility .rank-math-pagination-jump .rank-math-pagination-input{width:auto;min-height:28px;background:rgba(0,0,0,0)}.rank-math-ai-visibility .rank-math-pagination-jump span{color:#666}.rank-math-ai-visibility .rank-math-pagination-page-info{color:#666}.rank-math-ai-visibility .rank-math-table-footer{padding:20px 20px}@media(min-width: 960px){.rank-math-ai-visibility .components-modal__frame{max-height:80%}}",""]);const l=o},4629:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-brand-detail{display:flex;flex-direction:column;gap:20px}.rank-math-ai-visibility-brand-detail__content{background:#fff;border:1px solid #e0e0e0;border-radius:4px}.rank-math-ai-visibility-brand-detail--loading{display:flex;justify-content:center;padding:24px}.rank-math-ai-visibility-brand-detail--error{padding:16px;text-align:center;color:#f66276}.rank-math-ai-visibility-brand-detail__tabs{margin-top:8px}.rank-math-ai-visibility-brand-detail__tab{padding:32px}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-header__name{font-weight:400;font-size:30px;line-height:34px;color:#1e1e1e;margin:0}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs{margin:0}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-tab-panel__tabs{padding:0 16px;border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-tab-panel__tabs-item{height:52px !important;font-weight:500;color:#383838}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-tab-panel__tabs-item.is-active{color:#017cba}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-tab-panel__tabs-item.is-active:after{background:#017cba;height:2px}.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-button:hover:not(:disabled,[aria-disabled=true]),.rank-math-ai-visibility-brand-detail .rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs .components-button[aria-expanded=true]{color:#017cba}",""]);const l=o},421:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-brand-header{display:flex;flex-direction:column;gap:0;padding:32px;border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-brand-header__content{display:flex;align-items:flex-start;justify-content:space-between}.rank-math-ai-visibility-brand-header__identity{display:flex;flex-direction:column;flex:1}.rank-math-ai-visibility-brand-header__name-row{display:flex;align-items:center;gap:16px}.rank-math-ai-visibility-brand-header__name{margin:0;font-size:26px;font-weight:600;line-height:1.2;color:#1e1e1e}.rank-math-ai-visibility-brand-header__edit-btn.rank-math-ai-visibility-btn.components-button{display:inline-flex;align-items:center;gap:6px;font-size:12px;height:24px;padding:0 8px;border-color:#c6c6c6;color:#757575;background:#fcfcfc;min-height:24px}.rank-math-ai-visibility-brand-header__edit-btn.rank-math-ai-visibility-btn.components-button .dashicons{height:12px;width:12px;font-size:12px;margin:0}.rank-math-ai-visibility-brand-header__url-row{display:flex;align-items:center;gap:8px}.rank-math-ai-visibility-brand-header__url{text-decoration:none;font-weight:300;font-size:20px;line-height:28px;color:#017cba}.rank-math-ai-visibility-brand-header__url:hover{text-decoration:underline}.rank-math-ai-visibility-brand-header__external{color:#757575;display:inline-flex;align-items:center;text-decoration:none}.rank-math-ai-visibility-brand-header__external:hover{color:#017cba}.rank-math-ai-visibility-brand-header__external svg path{fill:currentColor}.rank-math-ai-visibility-brand-header__meta-row{display:flex;align-items:center;gap:10px;font-size:13px;margin:12px 0 0 0}.rank-math-ai-visibility-brand-header__status{display:inline-flex;align-items:center;padding:0 10px;border-radius:20px;font-size:11px;font-weight:400;border:1px solid #e0e0e0}.rank-math-ai-visibility-brand-header__status--active{color:#2e7d32;border-color:#a5d6a7;background:rgba(46,125,50,.06)}.rank-math-ai-visibility-brand-header__status--inactive{color:#9b9b9b;border-color:#e0e0e0;background:rgba(0,0,0,0)}.rank-math-ai-visibility-brand-header__last-analysis{display:inline-flex;align-items:center;gap:4px;color:#9b9b9b;font-size:12px}.rank-math-ai-visibility-brand-header__last-analysis .dashicons{height:14px;width:14px;font-size:14px}.rank-math-ai-visibility-brand-header__description-panel{flex:0 0 320px;padding:16px;border:1px solid #e0e0e0;border-radius:4px;background:#fff}.rank-math-ai-visibility-brand-header__description-label{display:block;font-size:13px;font-weight:600;color:#1e1e1e;margin-bottom:8px}.rank-math-ai-visibility-brand-header__description-text{margin:0;font-size:13px;line-height:1.6;color:#9b9b9b}",""]);const l=o},695:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-brand-overview{display:flex;flex-direction:column;gap:16px}.rank-math-ai-visibility-brand-overview__stats{display:flex;gap:16px}@media(max-width: 782px){.rank-math-ai-visibility-brand-overview__stats{flex-direction:column}}.rank-math-ai-visibility-brand-overview__stats .rank-math-ai-visibility-stat-card{flex:1}.rank-math-ai-visibility-stat-card--overview-score{--stat-icon-bg: rgba( 1, 124, 186, 0.12 );--stat-icon-color: #017cba}.rank-math-ai-visibility-stat-card--overview-mentions{--stat-icon-bg: rgba( 232, 166, 35, 0.12 );--stat-icon-color: #E8A623}.rank-math-ai-visibility-stat-card--overview-sentiment{--stat-icon-bg: rgba( 82, 96, 185, 0.12 );--stat-icon-color: #5260B9}.rank-math-ai-visibility-stat-card--overview-competitor{--stat-icon-bg: rgba( 246, 98, 118, 0.12 );--stat-icon-color: #F66276}",""]);const l=o},6350:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-competitors-table{max-width:1146px;margin:0 auto}.rank-math-ai-visibility-competitors-table--loading{display:flex;justify-content:center;padding:24px}.rank-math-ai-visibility-competitors-table--error p{font-size:13px;color:#f66276;margin:0}.rank-math-ai-visibility-competitors-table .rank-math-ai-visibility-data-table__td:first-child{display:flex;align-items:center;gap:10px}.rank-math-ai-visibility-competitors-table__avatar{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:4px;font-size:12px;font-weight:600;color:#fff;flex-shrink:0;line-height:1}.rank-math-ai-visibility-competitors-table__name{font-size:13px;color:#1e1e1e;font-weight:400}",""]);const l=o},5607:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-queries-table{display:flex;flex-direction:column;gap:30px}.rank-math-ai-visibility-queries-table__toolbar{display:flex;align-items:center;gap:12px}.rank-math-ai-visibility-queries-table__toolbar .components-button{min-height:36px;font-weight:300}.rank-math-ai-visibility-queries-table__toolbar .dashicons{font-size:14px;width:14px;height:14px;line-height:14px}.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__th{font-weight:500;font-size:14px;line-height:20px;color:#1e1e1e;padding:13px}.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__th:first-child{padding-left:35px}.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__td{padding:30px 16px;font-weight:400;font-size:13px;line-height:19px;color:#1e1e1e}.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__td:first-child{padding:20px 35px}.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__td:nth-child(2),.rank-math-ai-visibility-queries-table .rank-math-ai-visibility-data-table__td:nth-child(3){color:#868686}",""]);const l=o},385:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-run-detail--loading{display:flex;justify-content:center;padding:32px}.rank-math-ai-visibility-run-detail--error p{font-size:13px;color:#f66276;margin:0}.rank-math-ai-visibility-run-detail--empty p{font-size:13px;color:#9b9b9b;margin:0}",""]);const l=o},2634:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,".rank-math-ai-visibility-account{border:1px solid #e0e0e0;border-radius:4px}.rank-math-ai-visibility-account h3{font-style:normal;font-weight:500;font-size:20px;line-height:26px;color:#c64539;margin:0}.rank-math-ai-visibility-account header{padding:19px 28px;border-bottom:1px solid #e0e0e0;display:flex;align-items:center;justify-content:space-between}.rank-math-ai-visibility-account .rank-math-status-button.components-button.is-disconnected{background:#c64539;font-size:13px;font-weight:300;border-radius:2px}.rank-math-ai-visibility-account .rank-math-status-button.components-button.is-disconnected svg{width:10px}.rank-math-ai-visibility-account-content{display:flex;padding:80px;align-items:center;justify-content:center;text-align:center;font-weight:400;font-size:16px;line-height:23px;color:#1e1e1e}.rank-math-ai-visibility-account-content a{color:#017cba}.rank-math-ai-visibility-account-content p{margin:0;line-height:23px}.rank-math-ai-visibility-account-content p.rank-math-ai-visibility-account-not-registered-note{margin-top:30px;font-weight:500;font-size:12px;line-height:16px;color:#757575}.rank-math-ai-visibility-account-content .rank-math-button.components-button.button-animate{margin-top:32px;font-size:22px;font-weight:400;line-height:80px;padding:0 42px}",""]);const l=o},3019:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-brands-table__last-analyzed{color:#868686;display:inline-flex;align-items:center;gap:4px}.rank-math-ai-visibility-brands-table tbody .rank-math-table-row .rank-math-table-primary-column a{color:#017cba;font-weight:400}.rank-math-ai-visibility-brands-table__brand-cell{display:flex;flex-direction:column;align-items:flex-start;gap:5px}.rank-math-ai-visibility-brands-table tbody .rank-math-table-row .rank-math-table-primary-column .rank-math-ai-visibility-brands-table__brand-name{font-size:13px;font-weight:600;color:#1e1e1e;line-height:1.4}.rank-math-ai-visibility-brands-table tbody .rank-math-table-row .rank-math-table-primary-column .rank-math-ai-visibility-brands-table__brand-name:hover{color:#1e1e1e;text-decoration:none}.rank-math-ai-visibility-brands-table__brand-url{font-size:12px;color:#017cba;line-height:1.4;word-break:break-all}.rank-math-ai-visibility-brands-table__brand-url:hover{text-decoration:underline}.rank-math-ai-visibility-brands-table__brand-link{display:inline-flex;gap:4px}.rank-math-ai-visibility-brands-table .rank-math-table-cell-content{font-size:13px}.rank-math-ai-visibility-brands-table .rank-math-table-header-cell{font-size:14px}.rank-math-ai-visibility-brands-table .rank-math-table thead{background-color:#fcfcfc}.rank-math-ai-visibility-brands-table .rank-math-table thead th{color:#1e1e1e;font-size:14px}.rank-math-ai-visibility-brands-table .rank-math-table thead th:first-child{padding-left:25px}.rank-math-ai-visibility-brands-table .rank-math-table tbody tr td:first-child{padding-left:25px}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row:hover,.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row:nth-child(odd){background:rgba(0,0,0,0)}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled td{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-brands-table__brand-name{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-brands-table__brand-url{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-brands-table__brand-url:hover{text-decoration:none}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-brands-table__last-analyzed{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-country-flag__code{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-score-badge{color:#c4c4c4 !important;border-color:#c4c4c4 !important;background-color:rgba(196,196,196,.1) !important}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-rank-badge{color:#c4c4c4 !important;border-color:#c4c4c4 !important;background-color:rgba(196,196,196,.2) !important}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-sentiment-badge{color:#c4c4c4 !important;border-color:#c4c4c4 !important;background-color:rgba(196,196,196,.08) !important}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-sentiment-badge svg{color:#c4c4c4}.rank-math-ai-visibility-brands-table .rank-math-table tbody .rank-math-table-row.is-disabled .rank-math-ai-visibility-sentiment-badge svg path{fill:#c4c4c4 !important}",""]);const l=o},8766:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-brands-toolbar{display:flex;align-items:center;gap:16px}.rank-math-ai-visibility-brands-toolbar__search.components-base-control{flex:0 0 auto;margin:0;width:200px}.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=text],.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=search]{height:36px;border-radius:2px;border-color:#949494;font-size:13px}.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=text]:focus,.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=search]:focus{border-color:#017cba;box-shadow:0 0 0 1px #017cba}.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=text]{padding:0 12px}.rank-math-ai-visibility-brands-toolbar__search.components-base-control input[type=search]{padding:0 5px}",""]);const l=o},9921:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-dashboard{display:flex;flex-direction:column;gap:26px}.rank-math-ai-visibility-dashboard__error{padding:8px 16px;background:#fef0f0;border:1px solid #f66276;border-radius:4px;color:#f66276;font-size:14px}.rank-math-ai-visibility-dashboard__stats{display:flex;gap:16px;margin-top:16px}@media(max-width: 782px){.rank-math-ai-visibility-dashboard__stats{flex-direction:column}}.rank-math-ai-visibility-dashboard__empty{background:#fff;border:1px solid #e0e0e0;border-radius:4px}.rank-math-ai-visibility-dashboard__table-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;overflow:hidden;position:relative}.rank-math-ai-visibility-dashboard__table-card .rank-math-ai-visibility-brands-toolbar{padding:14px 25px;border-bottom:1px solid #e0e0e0;gap:8px}.rank-math-ai-visibility-dashboard__table-card .rank-math-ai-visibility-brands-toolbar__search.components-base-control{width:260px}.rank-math-ai-visibility-dashboard__table-card .rank-math-table-header{display:none}.rank-math-ai-visibility-dashboard__table-card .rank-math-table-card{border:none;border-radius:0;background:rgba(0,0,0,0);box-shadow:none}.rank-math-ai-visibility-dashboard__table-card .rank-math-table-footer,.rank-math-ai-visibility-dashboard__table-card .rank-math-table__pagination{display:flex;justify-content:center}.rank-math-ai-visibility-dashboard__table-card>svg{position:absolute;top:0;left:0;z-index:999;opacity:.5}",""]);const l=o},3484:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,".rank-math-ai-visibility-gated-preview{filter:blur(4px);pointer-events:none;user-select:none}",""]);const l=o},7377:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-reports{display:flex;flex-direction:column;gap:24px}.rank-math-ai-visibility-reports-total-citations .rank-math-ai-visibility-reports__stat-value,.rank-math-ai-visibility-reports-total-mentions .rank-math-ai-visibility-reports__stat-value{font-size:26px}.rank-math-ai-visibility-reports__layout{display:grid;grid-template-columns:1fr 3fr;gap:16px}.rank-math-ai-visibility-reports__filters{display:flex;flex-direction:column;gap:0;padding:0;background:#fff;border:1px solid #e0e0e0;border-radius:4px;align-self:baseline;min-width:0}.rank-math-ai-visibility-reports__filters-header{display:flex;align-items:center;min-height:68px;gap:9px;padding:0 18px 0 24px;border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-reports__filters-header .dashicons{font-size:18px;width:18px;height:18px;color:#9b9b9b;flex-shrink:0}.rank-math-ai-visibility-reports__filters-body{display:flex;flex-direction:column;gap:12px;padding:20px 24px 24px}.rank-math-ai-visibility-reports__filters-header .rank-math-ai-visibility-reports__filters-title{font-size:13px;font-weight:500;line-height:16px;color:#1e1e1e;margin:0 0 2px}.rank-math-ai-visibility-reports__filters-header .rank-math-ai-visibility-reports__filters-subtitle{font-size:12px;line-height:20px;color:#868686;margin:0}.rank-math-ai-visibility-reports__filter-field{display:flex;flex-direction:column;gap:8px}.rank-math-ai-visibility-reports__filter-field .components-base-control__label{font-size:11px;font-weight:600;color:#1e1e1e;letter-spacing:.1px;text-transform:uppercase}.rank-math-ai-visibility-reports__generate-btn{align-self:flex-start;margin-top:24px}.rank-math-ai-visibility-reports__preview{display:flex;flex-direction:column;gap:24px;min-width:0}.rank-math-ai-visibility-reports__empty{display:flex;align-items:center;justify-content:center;min-height:100%;background:#fff;border:1px dashed #e0e0e0;border-radius:4px}.rank-math-ai-visibility-reports__empty p{font-size:14px;color:#9b9b9b;margin:0;text-align:center}.rank-math-ai-visibility-reports__report-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;overflow:hidden}.rank-math-ai-visibility-reports__preview-header{display:flex;align-items:center;justify-content:space-between;min-height:68px;padding:0 18px 0 24px;gap:16px;border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-reports__preview-title-row{display:flex;align-items:center;gap:12px}.rank-math-ai-visibility-reports__preview-title-row .dashicons{font-size:18px;width:18px;height:18px;color:#9b9b9b;flex-shrink:0}.rank-math-ai-visibility-reports__preview-header .rank-math-ai-visibility-reports__preview-title{font-size:13px;font-weight:500;line-height:16px;color:#1e1e1e;margin:0 0 2px}.rank-math-ai-visibility-reports__preview-header .rank-math-ai-visibility-reports__preview-subtitle{font-size:12px;font-weight:300;line-height:20px;color:#868686;margin:0}.rank-math-ai-visibility-reports__preview-actions{display:flex;gap:8px;flex-shrink:0;align-items:center}.rank-math-ai-visibility-reports__report-card-body{padding:30px 20px 20px 20px;display:flex;flex-direction:column;gap:26px;min-width:0;overflow-x:auto}.rank-math-ai-visibility-reports__stat-cards{display:grid;grid-template-columns:repeat(4, 1fr);gap:12px}.rank-math-ai-visibility-reports__stat-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;display:flex;gap:16px;padding:34px 17px}.rank-math-ai-visibility-reports__stat-icon{display:flex;align-items:center;justify-content:center;min-width:44px;flex-shrink:0;width:45.5px;height:38.52px;border-radius:7.16667px}.rank-math-ai-visibility-reports__stat-icon .dashicons{font-size:20px;width:20px;height:20px}.rank-math-ai-visibility-reports__stat-body{display:flex;flex-direction:column;gap:8px;min-width:0}.rank-math-ai-visibility-reports__stat-label{font-size:12px;white-space:nowrap;gap:8px;display:inline-flex}.rank-math-ai-visibility-reports__stat-value{font-size:30px;font-weight:500;color:#1e1e1e;line-height:1}.rank-math-ai-visibility-reports__stat-value--na{color:#868686;font-weight:400}.rank-math-ai-visibility-reports__report-card-body .rank-math-ai-visibility-data-table__th{padding:15px 18px;font-size:14px;color:#1e1e1e}.rank-math-ai-visibility-reports__report-card-body .rank-math-ai-visibility-data-table__td{padding:10px 16px}.rank-math-ai-visibility-reports__report-card-body .rank-math-ai-visibility-data-table__td--date{color:#868686}.rank-math-ai-visibility-reports__competitors{display:flex;flex-wrap:wrap;gap:7px}.rank-math-ai-visibility-reports__competitor-tag{box-sizing:border-box;display:flex;flex-direction:row;justify-content:center;align-items:center;padding:4px 8px;gap:6px;border:1px solid rgba(0,0,0,.1);border-radius:2px;font-weight:400;font-size:12px;line-height:13px;color:rgba(0,0,0,.5)}",""]);const l=o},9559:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-access-gate-modal.components-modal__frame{width:600px;max-width:95vw;max-height:95%}.rank-math-ai-visibility-access-gate-modal .components-modal__content{padding:0}.rank-math-ai-visibility-access-gate-modal__header{display:flex;align-items:center;gap:14px;padding:26px 56px;background:linear-gradient(96deg, #7053c9 0%, #59abf7 100%)}.rank-math-ai-visibility-access-gate-modal__header-icon{flex-shrink:0;color:#fff}.rank-math-ai-visibility-access-gate-modal__header-icon.dashicons,.rank-math-ai-visibility-access-gate-modal__header-icon.rm-icon{width:26px;height:26px;font-size:26px;line-height:1}.rank-math-ai-visibility-access-gate-modal__title{margin:0;font-size:20px;font-weight:500;line-height:1.3;color:#fff !important}.rank-math-ai-visibility-access-gate-modal__body{display:flex;flex-direction:column;gap:24px;padding:32px 56px 28px}.rank-math-ai-visibility-gate__intro{margin:0;font-size:14px;line-height:1.65;color:#4e4e4e}.rank-math-ai-visibility-gate__intro strong{color:#1e1e1e;font-weight:600}.rank-math-ai-visibility-gate__notice{margin:0;padding:12px 16px;font-size:13px;line-height:1.55;color:#1e1e1e;background:#ebf3fa;border-left:3px solid #017cba;border-radius:0 4px 4px 0}.rank-math-ai-visibility-gate__error{margin:0;padding:10px 14px;background-color:#fff3f3;border:1px solid #f0b8b8;border-radius:4px;color:#c0392b;font-size:13px;line-height:1.5}.rank-math-ai-visibility-gate__actions{display:flex}.rank-math-ai-visibility-gate__footnote{margin:-12px 0 0;font-size:12px;color:#757575}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button{background:#16a571;color:#fff;font-size:14px;padding:12px 16px}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button svg{fill:#fff}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button:hover:not(:disabled){background:rgb(18.4,138,94.5090909091);color:#fff !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button:focus-visible{background:#16a571;color:#fff !important;box-shadow:0 0 0 2px #fff,0 0 0 4px #16a571}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button:focus:not(:focus-visible):not(:disabled){background:#16a571;color:#fff !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button:active:not(:disabled){background:rgb(16,120,82.1818181818);color:#fff !important}",""]);const l=o},5367:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-activating-modal.components-modal__frame{width:440px;max-width:95vw}.rank-math-ai-visibility-activating-modal .components-modal__content{display:flex;flex-direction:column;align-items:center;gap:12px;padding:40px 40px 32px;text-align:center}.rank-math-ai-visibility-activating-modal__spinner{margin-bottom:4px}.rank-math-ai-visibility-activating-modal__spinner .components-spinner{width:44px;height:44px;margin:0;color:#017cba}.rank-math-ai-visibility-activating-modal__title{margin:0;font-size:18px;font-weight:500;line-height:1.35;color:#017cba}.rank-math-ai-visibility-activating-modal__subtitle{margin:0;font-size:13px;line-height:1.55;color:#757575}.rank-math-ai-visibility-activating-modal__steps{display:flex;flex-direction:column;align-items:flex-start;gap:8px;margin:12px 0 0;padding:0;list-style:none;text-align:left}.rank-math-ai-visibility-activating-modal__step{display:flex;align-items:center;gap:8px;margin:0;font-size:12px;line-height:1.4;color:#9b9b9b;transition:color .2s ease,opacity .2s ease}.rank-math-ai-visibility-activating-modal__step--done,.rank-math-ai-visibility-activating-modal__step--active{color:#017cba}.rank-math-ai-visibility-activating-modal__step--pending{opacity:.6}.rank-math-ai-visibility-activating-modal__step-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:14px;height:14px;color:currentColor}.rank-math-ai-visibility-activating-modal__step-icon .rm-icon{font-size:13px;line-height:1}.rank-math-ai-visibility-activating-modal__step-circle{display:block;width:12px;height:12px;border:1.4px solid currentColor;border-radius:50%}.rank-math-ai-visibility-activating-modal__step--active .rank-math-ai-visibility-activating-modal__step-circle{border-top-color:rgba(0,0,0,0);animation:rank-math-aiv-step-spin .9s linear infinite}@keyframes rank-math-aiv-step-spin{to{transform:rotate(360deg)}}.rank-math-ai-visibility-trial-success__video{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;min-height:280px;padding:32px 24px;background:#131a2a;border-radius:8px;color:#fff}.rank-math-ai-visibility-trial-success__video--idle{cursor:pointer}.rank-math-ai-visibility-trial-success__video--idle:hover,.rank-math-ai-visibility-trial-success__video--idle:focus-visible{outline:none}.rank-math-ai-visibility-trial-success__video--idle:hover .rank-math-ai-visibility-trial-success__video-play,.rank-math-ai-visibility-trial-success__video--idle:focus-visible .rank-math-ai-visibility-trial-success__video-play{opacity:.75;transform:scale(1.1)}.rank-math-ai-visibility-trial-success__video--playing{padding:0;overflow:hidden}.rank-math-ai-visibility-trial-success__video-iframe{display:block;width:100%;height:280px;border:0;border-radius:8px}.rank-math-ai-visibility-trial-success__video-play.dashicons{width:48px;height:48px;font-size:48px;line-height:1;transition:opacity .2s ease,transform .2s ease}.rank-math-ai-visibility-trial-success__video-caption{font-size:12px;font-weight:500;letter-spacing:1.5px;text-transform:uppercase}.rank-math-ai-visibility-trial-success__links{display:flex;align-items:center;gap:28px}.rank-math-ai-visibility-trial-success__link{display:inline-flex;align-items:center;gap:7px;font-size:14px;color:#017cba;text-decoration:none}.rank-math-ai-visibility-trial-success__link .rm-icon{flex-shrink:0;font-size:16px;line-height:1}.rank-math-ai-visibility-trial-success__link:hover,.rank-math-ai-visibility-trial-success__link:focus{color:rgb(.7818181818,96.9454545455,145.4181818182);text-decoration:underline;box-shadow:none}",""]);const l=o},9368:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-add-brand-modal.components-modal__frame{width:585px;max-width:95vw;max-height:85%}.rank-math-ai-visibility-add-brand-modal .components-modal__content{padding:0}.rank-math-ai-visibility-add-brand-modal__header{display:flex;align-items:flex-start;justify-content:space-between;padding:30px 32px 32px 54px}.rank-math-ai-visibility-add-brand-modal__header-text{display:flex;flex-direction:column;gap:6px}.rank-math-ai-visibility-add-brand-modal__title{margin:0;font-size:18px;font-weight:400;line-height:1.3;color:#1e1e1e}.rank-math-ai-visibility-add-brand-modal__subtitle{margin:0;font-size:13px;line-height:1.5;color:#9b9b9b}.rank-math-ai-visibility-add-brand-modal__subtitle a{margin-left:2px}.rank-math-ai-visibility-add-brand-modal__close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;background:rgba(0,0,0,0);border:none;border-radius:4px;color:#9b9b9b;cursor:pointer;flex-shrink:0;margin-top:-4px}.rank-math-ai-visibility-add-brand-modal__close:hover{background:rgba(0,0,0,.06);color:#1e1e1e}.rank-math-ai-visibility-add-brand-modal__close:focus-visible{outline:2px solid #868686;outline-offset:2px}.rank-math-ai-visibility-add-brand-modal__close[aria-expanded=true],.rank-math-ai-visibility-add-brand-modal__close:hover:not(:disabled,[aria-disabled=true]){background:rgba(0,0,0,0);color:inherit}.rank-math-ai-visibility-add-brand-modal__close:focus:not(:active){box-shadow:none}.rank-math-ai-visibility-add-brand-modal__divider{margin:0;border:none;border-top:1px solid #e0e0e0}.rank-math-ai-visibility-add-brand-modal__body{display:flex;flex-direction:column;gap:22px;padding:36px 56px}.rank-math-ai-visibility-add-brand-modal__field{display:flex;flex-direction:column;gap:6px}.rank-math-ai-visibility-add-brand-modal__label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#1e1e1e}.rank-math-ai-visibility-add-brand-modal__info-icon{color:#9b9b9b;flex-shrink:0}.rank-math-ai-visibility-add-brand-modal .components-base-control__label,.rank-math-ai-visibility-add-brand-modal .components-input-control__label{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#1e1e1e}.rank-math-ai-visibility-add-brand-modal .rank-math-select-with-searchbox{max-width:100%}.rank-math-ai-visibility-add-brand-modal .rank-math-select-with-searchbox .components-button{font-weight:normal;font-size:inherit;font-family:inherit;line-height:inherit}.rank-math-ai-visibility-add-brand-modal__field--error .components-text-control__input,.rank-math-ai-visibility-add-brand-modal__field--error .components-textarea-control__input{border-color:#f66276}.rank-math-ai-visibility-add-brand-modal__field--error .components-text-control__input:focus,.rank-math-ai-visibility-add-brand-modal__field--error .components-textarea-control__input:focus{box-shadow:0 0 0 1px #f66276;border-color:#f66276}.rank-math-ai-visibility-add-brand-modal__field--error .components-base-control__help{color:#f66276}.rank-math-ai-visibility-add-brand-modal .components-base-control{margin-bottom:0}.rank-math-ai-visibility-add-brand-modal__platforms{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin-top:4px}.rank-math-ai-visibility-add-brand-modal__platforms-col{display:flex;flex-direction:column;gap:10px}.rank-math-ai-visibility-add-brand-modal__platform-row{display:flex;align-items:center;gap:8px}.rank-math-ai-visibility-add-brand-modal__platform-row .components-checkbox-control{margin-bottom:0}.rank-math-ai-visibility-add-brand-modal__platform-row .components-checkbox-control__input-container,.rank-math-ai-visibility-add-brand-modal__platform-row .components-checkbox-control__label{cursor:pointer}.rank-math-ai-visibility-add-brand-modal__platform-row--disabled{opacity:.65}.rank-math-ai-visibility-add-brand-modal__platform-row--disabled .components-checkbox-control__input-container,.rank-math-ai-visibility-add-brand-modal__platform-row--disabled .components-checkbox-control__label{cursor:not-allowed}.rank-math-ai-visibility-add-brand-modal__coming-soon{display:inline-flex;align-items:center;padding:0px 4px;background-color:rgba(183,183,183,.1411764706);color:#9d9d9d;font-size:10px;font-weight:500;white-space:nowrap;flex-shrink:0;border:1px solid rgba(183,183,183,.1294117647);border-radius:2px}.rank-math-ai-visibility-add-brand-modal__api-error{margin:0 54px 0 54px;padding:10px 14px;background-color:#fff3f3;border:1px solid #f0b8b8;border-radius:4px;color:#c0392b;font-size:13px;line-height:1.5}.rank-math-ai-visibility-add-brand-modal__footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:20px 54px 24px 24px}.rank-math-ai-visibility-add-brand-modal__footer .components-button.is-primary{min-height:40px;padding:12px 16px;font-weight:300}.rank-math-ai-visibility-add-brand-modal__footer .components-button.is-secondary{min-height:40px;padding:12px 16px;color:#757575;border-color:#949494}.rank-math-ai-visibility-add-brand-modal .rank-math-ai-visibility-add-brand-modal__close{padding:0px;color:#9b9b9b}",""]);const l=o},1655:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-checkout-iframe{display:block;width:100%;height:100%;border:0}.rank-math-ai-visibility-checkout-iframe__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;height:72vh;background:#fff}.rank-math-ai-visibility-checkout-iframe__error{margin:0;max-width:360px;font-size:14px;color:#4e4e4e;text-align:center}",""]);const l=o},9034:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-confirm-modal .components-modal__content{padding-bottom:0}.rank-math-ai-visibility-confirm-modal__message{margin:0 0 24px;font-size:14px;line-height:1.6;color:#1e1e1e}.rank-math-ai-visibility-confirm-modal__footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:20px 0 28px;border-top:1px solid #e0e0e0;margin-top:4px}.rank-math-ai-visibility-confirm-modal__footer .components-button{min-height:36px;padding:8px 16px;font-size:13px;font-weight:500}.rank-math-ai-visibility-confirm-modal__footer .components-button.is-secondary{color:#5c5f62;border-color:#8c9196}.rank-math-ai-visibility-confirm-modal__footer .components-button.is-secondary:hover:not(:disabled){color:#1d2327;border-color:#5c5f62;background:rgba(0,0,0,.04)}.rank-math-ai-visibility-confirm-modal__footer .components-button.is-primary.is-destructive{background:#f66276;border-color:#f66276;color:#fff}.rank-math-ai-visibility-confirm-modal__footer .components-button.is-primary.is-destructive:hover:not(:disabled){background:rgb(243.7879518072,59.4120481928,84.3277108434);border-color:rgb(243.7879518072,59.4120481928,84.3277108434)}",""]);const l=o},1664:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,".rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{top:32px;left:160px;z-index:999999}body.folded .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{left:36px}body.rtl .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{left:0;right:160px}body.rtl.folded .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{right:36px}@media(max-width: 960px){body.auto-fold .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{left:36px}body.rtl.auto-fold .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{left:0;right:36px}}@media(max-width: 782px){.rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{top:46px}.rank-math-ai-visibility-content-overlay.components-modal__screen-overlay,body.folded .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay,body.auto-fold .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay,body.rtl .rank-math-ai-visibility-content-overlay.components-modal__screen-overlay{left:0;right:0}}body:has(.rank-math-ai-visibility-content-overlay) #wpfooter{position:relative;z-index:100001}",""]);const l=o},5357:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-feature-checklist{display:flex;flex-direction:column;gap:14px;margin:0;padding:0;list-style:none}.rank-math-ai-visibility-feature-checklist__item{display:flex;align-items:center;gap:14px;margin:0}.rank-math-ai-visibility-feature-checklist__icon.dashicons{flex-shrink:0;width:20px;height:20px;font-size:20px;line-height:1;color:#16a571}.rank-math-ai-visibility-feature-checklist__label{font-size:14px;line-height:1.4;color:#1e1e1e}",""]);const l=o},3771:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-upgrade-plan-modal.components-modal__frame{width:1060px;max-width:95vw;max-height:92vh}.rank-math-ai-visibility-upgrade-plan-modal .components-modal__content{padding:0}.rank-math-ai-visibility-upgrade-plan-modal__header{display:flex;align-items:flex-start;gap:14px;padding:24px 32px}.rank-math-ai-visibility-upgrade-plan-modal__header-icon.dashicons{flex-shrink:0;margin-top:2px;width:24px;height:24px;font-size:24px;line-height:1;color:#1e1e1e}.rank-math-ai-visibility-upgrade-plan-modal__header-text{display:flex;flex-direction:column;gap:4px;flex:1}.rank-math-ai-visibility-upgrade-plan-modal__title{margin:0;font-size:18px;font-weight:600;line-height:1.3;color:#1e1e1e}.rank-math-ai-visibility-upgrade-plan-modal__subtitle{margin:0;font-size:13px;line-height:1.5;color:#757575}.rank-math-ai-visibility-upgrade-plan-modal__close.components-button{display:flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;flex-shrink:0;background:rgba(0,0,0,0);border:1px solid #e0e0e0;border-radius:4px;color:#9b9b9b;cursor:pointer}.rank-math-ai-visibility-upgrade-plan-modal__close.components-button:hover:not(:disabled){background:rgba(0,0,0,.04);color:#1e1e1e !important}.rank-math-ai-visibility-upgrade-plan-modal__close.components-button:focus-visible{outline:2px solid #017cba;outline-offset:2px;box-shadow:none}.rank-math-ai-visibility-upgrade-plan-modal__close.components-button:focus:not(:active){box-shadow:none}.rank-math-ai-visibility-upgrade-plan-modal__body{background:linear-gradient(96deg, #7053c9 0%, #59abf7 100%)}.rank-math-ai-visibility-upgrade-plan-modal__body iframe{display:block;width:100%;height:72vh;border:0}.rank-math-ai-visibility-upgrade-plan-modal__footer{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 32px;background:#fff}.rank-math-ai-visibility-upgrade-plan-modal__guarantee{margin:0;font-size:13px;color:#4e4e4e}.rank-math-ai-visibility-upgrade-plan-modal__later.components-button{padding:0;height:auto;font-size:14px;font-weight:500;color:#017cba;background:rgba(0,0,0,0);border:none;box-shadow:none;text-decoration:none}.rank-math-ai-visibility-upgrade-plan-modal__later.components-button:hover:not(:disabled){color:rgb(.7818181818,96.9454545455,145.4181818182) !important;text-decoration:underline;background:rgba(0,0,0,0)}.rank-math-ai-visibility-upgrade-plan-modal__later.components-button:focus-visible{outline:2px solid #017cba;outline-offset:2px;box-shadow:none}.rank-math-ai-visibility-upgrade-plan-modal__later.components-button:focus:not(:focus-visible){box-shadow:none}",""]);const l=o},6424:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-action-buttons{display:grid;grid-template-columns:repeat(3, 28px);gap:8px;align-items:center;flex-shrink:0}.rank-math-ai-visibility-action-buttons .dashicons,.rank-math-ai-visibility-action-buttons svg{height:16px;width:16px;font-size:16px;line-height:1;flex-shrink:0}.rank-math-ai-visibility-action-buttons svg path,.rank-math-ai-visibility-action-buttons svg circle{fill:currentColor}.rank-math-ai-visibility-action-buttons .rank-math-ai-visibility-btn--icon.components-button{width:28px;height:28px;min-width:unset;padding:0;gap:0;border:none;background:rgba(0,0,0,0);box-shadow:none;position:relative;overflow:visible;z-index:1}.rank-math-ai-visibility-action-buttons .rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled),.rank-math-ai-visibility-action-buttons .rank-math-ai-visibility-btn--icon.components-button:focus:not(:disabled){background:rgba(0,0,0,0);box-shadow:none}.rank-math-ai-visibility-action-buttons .rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled){z-index:10}.rank-math-ai-visibility-action-buttons .rank-math-ai-visibility-btn--icon.components-button:focus-visible{outline:none;box-shadow:none}.rank-math-ai-visibility-action-buttons__inner{box-sizing:border-box;position:absolute;left:0;top:0;height:28px;display:flex;align-items:center;padding:0 6px;border-radius:2px;white-space:nowrap;min-width:28px;box-shadow:0 0 0 1px #c6c6c6;background:rgba(0,0,0,0);color:#757575;pointer-events:none;transition:min-width .2s ease,box-shadow .15s ease,background .15s ease,color .15s ease}.rank-math-ai-visibility-action-buttons__inner>span:not(.rank-math-ai-visibility-action-buttons__label){flex-shrink:0;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;line-height:1}.rank-math-ai-visibility-action-buttons__label{max-width:0;overflow:hidden;opacity:0;white-space:nowrap;font-size:12px;line-height:1;transition:max-width .2s ease,opacity .15s ease,margin-left .15s ease}.rank-math-ai-visibility-action-buttons__view.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__inner{box-shadow:0 0 0 1px #42b268;color:#42b268}.rank-math-ai-visibility-action-buttons__view.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner{min-width:64px;box-shadow:0 0 0 1px #198b3f;background:#f0f9f3;color:#198b3f}.rank-math-ai-visibility-action-buttons__view.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__label{max-width:50px;opacity:1;margin-left:4px}.rank-math-ai-visibility-action-buttons__edit.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner{min-width:64px;box-shadow:0 0 0 1px #9b9b9b;background:#f8f8f8;color:#383838}.rank-math-ai-visibility-action-buttons__edit.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__label{max-width:40px;opacity:1;margin-left:4px}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__inner{right:0;left:auto;flex-direction:row-reverse;box-shadow:0 0 0 1px #017cba;color:#017cba}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__label{transition:max-width .2s ease,opacity .15s ease,margin-right .15s ease}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner{min-width:64px;box-shadow:0 0 0 1px #006ba1;background:#ebf5fa;color:#006ba1}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__label{max-width:36px;opacity:1;margin-right:4px}.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__inner{box-shadow:0 0 0 1px #f66276;color:#f66276}.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner{box-shadow:0 0 0 1px #f66276;background:#fff9fa;color:#f24f65}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__inner,.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__inner{right:0;left:auto;flex-direction:row-reverse}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__label,.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button .rank-math-ai-visibility-action-buttons__label{transition:max-width .2s ease,opacity .15s ease,margin-right .15s ease}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner,.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__inner{min-width:64px}.rank-math-ai-visibility-action-buttons__inactive.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__label,.rank-math-ai-visibility-action-buttons__active.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled) .rank-math-ai-visibility-action-buttons__label{max-width:80px;opacity:1;margin-right:4px}",""]);const l=o},5089:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-btn.components-button{padding:10px 12px;gap:8px;border-radius:2px;font-size:13px;font-weight:400;line-height:1;white-space:nowrap;cursor:pointer;height:auto}.rank-math-ai-visibility-btn--primary.components-button{background:#017cba;color:#fff;border:none;box-shadow:none}.rank-math-ai-visibility-btn--primary.components-button:hover:not(:disabled){background:rgb(.7818181818,96.9454545455,145.4181818182);color:#fff !important;box-shadow:none}.rank-math-ai-visibility-btn--primary.components-button:focus-visible{background:#017cba;color:#fff !important;box-shadow:0 0 0 2px #fff,0 0 0 4px #017cba;outline:none}.rank-math-ai-visibility-btn--primary.components-button:focus:not(:focus-visible):not(:disabled){background:#017cba;color:#fff !important;box-shadow:none;outline:none}.rank-math-ai-visibility-btn--primary.components-button:active:not(:disabled){background:rgb(.6727272727,83.4181818182,125.1272727273);color:#fff !important;box-shadow:none}.rank-math-ai-visibility-btn--primary.components-button:disabled,.rank-math-ai-visibility-btn--primary.components-button[aria-disabled=true]{opacity:.6;cursor:not-allowed}.rank-math-ai-visibility-btn--secondary.components-button{background:rgba(0,0,0,0);color:#4e4e4e;border:1px solid #949494;border-radius:2px;box-shadow:none}.rank-math-ai-visibility-btn--secondary.components-button:hover:not(:disabled){background:rgba(0,0,0,0);color:#4e4e4e !important;border-color:#4e4e4e;box-shadow:none}.rank-math-ai-visibility-btn--secondary.components-button:focus-visible{color:#4e4e4e !important;box-shadow:none;outline:2px solid #017cba;outline-offset:2px}.rank-math-ai-visibility-btn--secondary.components-button:focus:not(:focus-visible):not(:disabled){color:#4e4e4e !important;box-shadow:none;outline:none}.rank-math-ai-visibility-btn--secondary.components-button:disabled,.rank-math-ai-visibility-btn--secondary.components-button[aria-disabled=true]{opacity:.6;cursor:not-allowed}.rank-math-ai-visibility-btn--icon.components-button{width:28px;height:28px;min-width:0;padding:0;border:1px solid #e0e0e0;border-radius:4px;background:rgba(0,0,0,0);color:#9b9b9b;box-shadow:none;transition:background .15s ease,color .15s ease,border-color .15s ease;display:inline-flex;align-items:center;justify-content:center}.rank-math-ai-visibility-btn--icon.components-button svg{display:block;flex-shrink:0}.rank-math-ai-visibility-btn--icon.components-button:hover:not(:disabled){background:rgba(0,0,0,.05);color:#9b9b9b}.rank-math-ai-visibility-btn--icon.components-button:focus-visible{outline:2px solid #017cba;outline-offset:2px;box-shadow:none}.rank-math-ai-visibility-btn--icon.components-button:disabled,.rank-math-ai-visibility-btn--icon.components-button[aria-disabled=true]{opacity:.6;cursor:not-allowed}.rank-math-ai-visibility-btn--primary.components-button.is-destructive{background:#f66276;color:#fff;border:none}.rank-math-ai-visibility-btn--primary.components-button.is-destructive:hover:not(:disabled){background:rgb(243.7879518072,59.4120481928,84.3277108434);color:#fff !important}.rank-math-ai-visibility-btn--icon-danger.components-button{color:#f66276;border-color:#f66276;background:rgba(246,98,118,.08)}.rank-math-ai-visibility-btn--icon-danger.components-button svg{fill:#f66276}.rank-math-ai-visibility-btn--icon-danger.components-button:hover:not(:disabled){background:rgba(246,98,118,.14);color:#f66276}.rank-math-ai-visibility-btn--icon-active.components-button{color:#017cba;border-color:#017cba;background:rgba(1,124,186,.08)}.rank-math-ai-visibility-btn--icon-active.components-button svg{fill:#017cba}.rank-math-ai-visibility-btn--icon-active.components-button:hover:not(:disabled){background:rgba(1,124,186,.14);color:#017cba}.rank-math-ai-visibility-btn__icon-left,.rank-math-ai-visibility-btn__icon-right{display:inline-flex;align-items:center;flex-shrink:0;line-height:0}.rank-math-ai-visibility-btn__icon-left svg,.rank-math-ai-visibility-btn__icon-right svg{display:block;width:16px;height:16px}.rank-math-ai-visibility-btn.rank-math-ai-visibility-view-transcript{padding:7px 8px;gap:6px;background:rgba(0,0,0,0) !important;border:1px solid #42b268 !important;border-radius:2px;font-size:12px;color:#42b268 !important;box-shadow:none !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-view-transcript:hover:not(:disabled){background:#f0f9f3 !important;color:#198b3f !important;border-color:#198b3f !important;box-shadow:none !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-view-transcript:focus-visible{outline:none !important;box-shadow:none !important;color:#42b268 !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-view-transcript:focus:not(:focus-visible){box-shadow:none !important;outline:none !important;color:#42b268 !important}.rank-math-ai-visibility-btn.rank-math-ai-visibility-view-transcript .dashicons{color:#42b268;height:13px;width:13px;font-size:14px}.components-modal__header button.components-button{color:#9b9b9b;background:rgba(0,0,0,0);box-shadow:none}.components-modal__header button.components-button:hover:not(:disabled){background:rgba(0,0,0,.06);color:#1e1e1e !important;box-shadow:none}.components-modal__header button.components-button:focus-visible{outline:2px solid #017cba;outline-offset:2px;box-shadow:none;color:#1e1e1e !important}.components-modal__header button.components-button:focus:not(:focus-visible){box-shadow:none}.components-modal__header button.components-button svg{fill:currentColor}",""]);const l=o},627:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-count-badge{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font-size:12px;font-weight:400;color:#1e1e1e;line-height:1;background:rgba(0,0,0,.05)}.rank-math-ai-visibility-count-badge--citations{background:rgba(66,178,104,.08)}.rank-math-ai-visibility-count-badge--mentions{background:rgba(223,150,44,.08)}",""]);const l=o},5975:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-country-flag{display:inline-flex;align-items:center;gap:2px;height:16px;padding:0 6px;border-radius:2px;border:1px solid #cecece;background:rgba(109,122,135,.0901960784);font-size:11px;font-weight:400;line-height:1;white-space:nowrap;color:#9b9b9b}.rank-math-ai-visibility-country-flag__emoji{font-size:11px;line-height:1}.rank-math-ai-visibility-country-flag__code{font-size:11px;line-height:1}",""]);const l=o},479:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-data-table{width:100%;border-collapse:collapse;font-size:13px;border:1px solid #e0e0e0;background:#fff}.rank-math-ai-visibility-data-table__th{padding:14px 22px;text-align:left;font-size:12px;font-weight:500;color:#3c434a;border-bottom:1px solid #e0e0e0;background:#f9f9f9;white-space:nowrap}.rank-math-ai-visibility-data-table__row{border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-data-table__row:last-child{border-bottom:none}.rank-math-ai-visibility-data-table__row:hover{background:rgba(0,0,0,.01)}.rank-math-ai-visibility-data-table__td{padding:14px 22px;vertical-align:middle;color:#1e1e1e;line-height:1.5}",""]);const l=o},6135:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-date-input{display:inline-flex;align-items:center;gap:4px;height:34px;padding:0 8px;border:1px solid #949494;border-radius:2px}.rank-math-ai-visibility-date-input:focus-within{border-color:#949494 !important;box-shadow:0 0 0 2px rgba(148,148,148,.15) !important}.rank-math-ai-visibility-date-input input{border:none;color:#383838;padding:0;min-width:auto;width:auto;min-height:auto}.rank-math-ai-visibility-date-input input:focus{border:none !important;box-shadow:none !important;outline:none !important}.rank-math-ai-visibility-date-input input::-webkit-datetime-edit{max-width:max-content}.rank-math-ai-visibility-date-input input::-webkit-calendar-picker-indicator{opacity:.5;background-size:14px;padding-left:4px}",""]);const l=o},6583:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:100px 0}.rank-math-ai-visibility-empty-state__icon{width:60px;height:60px;border-radius:40px;background:rgba(57,116,198,.1);padding:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-sizing:border-box}.rank-math-ai-visibility-empty-state__icon svg{width:28px;height:28px;fill:#017cba}.rank-math-ai-visibility-empty-state .rank-math-ai-visibility-empty-state__heading{margin:0 0 8px 0;font-size:28px;font-weight:400;line-height:34px;color:#1e1e1e}.rank-math-ai-visibility-empty-state .rank-math-ai-visibility-empty-state__description{margin:0 0 15px 0;font-size:16px;font-weight:300;line-height:23px;color:#868686;max-width:580px}.rank-math-ai-visibility-empty-state .components-button.rank-math-ai-visibility-btn.rank-math-ai-visibility-empty-state__cta{font-weight:300}",""]);const l=o},6574:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-page-topbar{display:flex;align-items:center;justify-content:space-between}.rank-math-ai-visibility-page-topbar__left{display:flex;align-items:center;gap:16px;font-size:14px}.rank-math-ai-visibility-page-topbar__title{font-size:16px;font-weight:500;color:#1e1e1e}.rank-math-ai-visibility-page-topbar__actions{display:flex;align-items:center;gap:8px}",""]);const l=o},6558:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-rank-badge{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:30px;padding:0;border-radius:50%;border-width:1px;border-style:solid;font-size:12px;font-weight:600;line-height:1;white-space:nowrap;flex-shrink:0}.rank-math-ai-visibility-rank-badge--rank-1{color:#42b268;background-color:rgba(66,178,104,.1019607843);border-color:#42b268}.rank-math-ai-visibility-rank-badge--rank-3{color:#f66276;background-color:rgba(246,98,118,.1019607843);border-color:#f66276}.rank-math-ai-visibility-rank-badge--rank-2{color:#f2b02d;background-color:rgba(242,176,45,.1019607843);border-color:#f2b02d}.rank-math-ai-visibility-rank-badge--neutral{color:#b7b7b7;background-color:rgba(183,183,183,.1019607843);border-color:#b7b7b7}",""]);const l=o},4236:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-score-badge{display:inline-flex;align-items:center;padding:3px 6px;border-radius:2px;font-size:11px;font-weight:600;white-space:nowrap;border:1px solid #b7b7b7;background:rgba(183,183,183,.1);color:#b7b7b7;min-width:44px;justify-content:center}.rank-math-ai-visibility-score-badge--good{background:rgba(66,178,104,.1);border-color:#42b268;color:#198b3f}.rank-math-ai-visibility-score-badge--average{background:rgba(232,166,35,.1);border-color:#e8a623;color:#d18e08}.rank-math-ai-visibility-score-badge--poor{background:rgba(246,98,118,.1);border-color:#f66276;color:#f66276}",""]);const l=o},3269:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-section-header{display:flex;flex-direction:column;gap:8px}.rank-math-ai-visibility-section-header .rank-math-ai-visibility-section-header__title{margin:0;font-size:18px;font-weight:500;line-height:26px;color:#1e1e1e}.rank-math-ai-visibility-section-header .rank-math-ai-visibility-section-header__subtitle{margin:0;font-size:12px;font-weight:400;line-height:16px;color:#868686}",""]);const l=o},7497:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-sentiment-badge{display:inline-flex;align-items:center;gap:4px;height:18px;padding:0 6px;border-radius:20px;border-width:1px;border-style:solid;font-size:12px;font-weight:400;line-height:1;white-space:nowrap;min-width:40px;justify-content:center}.rank-math-ai-visibility-sentiment-badge--positive{color:#42b268;background-color:rgba(66,178,104,.0784313725);border-color:#42b268}.rank-math-ai-visibility-sentiment-badge--warning{color:#f2b02d;background-color:#F2B02D14;border-color:#f2b02d}.rank-math-ai-visibility-sentiment-badge--negative{color:#f66276;background-color:rgba(246,98,118,.0784313725);border-color:#f66276}.rank-math-ai-visibility-sentiment-badge--neutral{color:#b7b7b7;background-color:#B7B7B714;border-color:#b7b7b7}.rank-math-ai-visibility-sentiment-badge__icon{flex-shrink:0;display:inline-flex}.rank-math-ai-visibility-sentiment-badge__label{font-size:11px;font-weight:bold}",""]);const l=o},6082:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-processed-start-time{color:#868686}",""]);const l=o},1297:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-stat-card{background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:40px 24px;display:flex;flex-direction:row;align-items:flex-start;gap:20px;flex:1 1 0;min-width:0}.rank-math-ai-visibility-stat-card__icon-wrap{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:48px;height:42px;background:var(--stat-icon-bg, #f0f0f0);border-radius:6px}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--score .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(1,124,186,.1215686275)}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--score .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#017cba}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--mentions .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(223,150,44,.1215686275)}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--mentions .rank-math-ai-visibility-stat-card__icon-wrap svg{fill:#df962c}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--mentions .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#df962c}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--sentiment .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(82,96,185,.1215686275)}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--sentiment .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#5260b9}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--competitor .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(246,98,118,.1215686275)}.rank-math-ai-visibility-stat-card.rank-math-ai-visibility-brand-overview__stat-card--competitor .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#f66276}.rank-math-ai-visibility-stat-card__icon{width:24px;height:24px;flex-shrink:0;fill:var(--stat-icon-color, #9b9b9b);color:var(--stat-icon-color, #9b9b9b)}.rank-math-ai-visibility-stat-card__icon.dashicons{width:20px;height:20px;font-size:20px;line-height:1}.rank-math-ai-visibility-stat-card__content{display:flex;flex-direction:column;gap:11px;min-width:0}.rank-math-ai-visibility-stat-card__label-row{display:flex;align-items:center;gap:8px}.rank-math-ai-visibility-stat-card__label{font-size:16px;line-height:normal;font-weight:400;color:#9b9b9b}.rank-math-ai-visibility-stat-card--has-data .rank-math-ai-visibility-stat-card__label,.rank-math-ai-visibility-stat-card--has-data .rank-math-ai-visibility-stat-card__value{color:inherit}.rank-math-ai-visibility-stat-card__data{display:flex;flex-direction:column;gap:8px;min-width:0}.rank-math-ai-visibility-stat-card__value{font-size:30px;font-weight:600;line-height:32px;color:#9b9b9b}.rank-math-ai-visibility-stat-card--active-brands{--stat-icon-bg: #017CBA1F;--stat-icon-color: #017CBA}.rank-math-ai-visibility-stat-card--analyses{--stat-icon-bg: #5260B91F;--stat-icon-color: #5260B9}.rank-math-ai-visibility-stat-card--mentions{--stat-icon-bg: #E8A6231F;--stat-icon-color: #E8A623}.rank-math-ai-visibility-stat-card--target-brand .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(1,124,186,.1215686275)}.rank-math-ai-visibility-stat-card--target-brand .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#017cba}.rank-math-ai-visibility-stat-card--duration-timing .rank-math-ai-visibility-stat-card__icon-wrap{background:rgba(82,96,185,.1215686275)}.rank-math-ai-visibility-stat-card--duration-timing .rank-math-ai-visibility-stat-card__icon-wrap .dashicons{color:#5260b9}.rank-math-ai-visibility-stat-card--compact{padding:20px}.rank-math-ai-visibility-stat-card__sub{font-size:12px;color:#9b9b9b;margin-top:2px}",""]);const l=o},162:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-status-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:400;padding:2px 6px 2px 3px;border-radius:20px;flex-shrink:0;white-space:nowrap;line-height:1}.rank-math-ai-visibility-status-badge svg{flex-shrink:0}.rank-math-ai-visibility-status-badge .dashicons{height:14px;width:14px;font-size:14px}.rank-math-ai-visibility-status-badge--success{color:#42b268;background:rgba(66,178,104,.1);border:1px solid rgba(66,178,104,.35)}.rank-math-ai-visibility-status-badge--error{color:#f66276;background:rgba(246,98,118,.1);border:1px solid rgba(246,98,118,.35)}.rank-math-ai-visibility-status-badge--partial{color:#f2b02d;background:rgba(242,176,45,.1);border:1px solid rgba(242,176,45,.35)}",""]);const l=o},7482:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-status-icon{position:relative;display:inline-flex;width:26px;height:26px;flex-shrink:0;vertical-align:middle}.rank-math-ai-visibility-status-icon__pill{position:absolute;top:50%;left:0;transform:translateY(-50%);display:inline-flex;align-items:center;border-radius:100px;border:1px solid rgba(0,0,0,0);padding:4px;background:#fff;cursor:default;white-space:nowrap;transition:background .18s ease}.rank-math-ai-visibility-status-icon .dashicons{width:16px;height:16px;font-size:16px}.rank-math-ai-visibility-status-icon .dashicons.dashicons-update{font-weight:100;animation:spin 2s linear infinite}.rank-math-ai-visibility-status-icon:hover{z-index:10}.rank-math-ai-visibility-status-icon--error .rank-math-ai-visibility-status-icon__pill{color:#e05252;border-color:#e05252}.rank-math-ai-visibility-status-icon--error:hover .rank-math-ai-visibility-status-icon__pill{background:#fceeee}.rank-math-ai-visibility-status-icon--running .rank-math-ai-visibility-status-icon__pill,.rank-math-ai-visibility-status-icon--pending .rank-math-ai-visibility-status-icon__pill{color:#e08c1a;border-color:#e08c1a}.rank-math-ai-visibility-status-icon--running:hover .rank-math-ai-visibility-status-icon__pill,.rank-math-ai-visibility-status-icon--pending:hover .rank-math-ai-visibility-status-icon__pill{background:#fcf3e8}.rank-math-ai-visibility-status-icon__label{font-size:12px;font-weight:500;line-height:1;max-width:0;overflow:hidden;opacity:0;transition:max-width .18s ease,opacity .15s ease,margin-left .15s ease}.rank-math-ai-visibility-status-icon:hover .rank-math-ai-visibility-status-icon__label{max-width:60px;opacity:1;margin-left:4px}",""]);const l=o},1623:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-status-toggle.components-checkbox-control{margin-bottom:0}.rank-math-ai-visibility-status-toggle .components-base-control__field{display:flex;align-items:center;margin:0}.rank-math-ai-visibility-status-toggle .components-h-stack{gap:8px !important}.rank-math-ai-visibility-status-toggle .components-checkbox-control__input-container{flex-shrink:0;margin:0}.rank-math-ai-visibility-status-toggle .components-checkbox-control__input[type=checkbox]{margin:0}.rank-math-ai-visibility-status-toggle .components-checkbox-control__input[type=checkbox]:checked{background-color:#017cba;border-color:#017cba}.rank-math-ai-visibility-status-toggle .components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #017cba}.rank-math-ai-visibility-status-toggle .components-checkbox-control__label{font-size:13px;font-weight:400;color:#1e1e1e;line-height:1;margin:0}.rank-math-ai-visibility-status-toggle .components-checkbox-control__input[type=checkbox]:disabled{opacity:.6}",""]);const l=o},7340:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,'@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-transcript-modal{display:grid;grid-template-columns:56fr 44fr;flex:1 1 0;min-height:0;overflow:hidden;height:100%;max-height:50vh}.rank-math-ai-visibility-transcript-modal__modal-title{display:flex;align-items:center;justify-content:center;gap:8px}.rank-math-ai-visibility-transcript-modal__wrapper .components-modal__frame{max-width:1130px;width:92vw;max-height:90vh;display:flex !important;flex-direction:column !important}.rank-math-ai-visibility-transcript-modal__wrapper .components-modal__header{flex-shrink:0;padding:22px 28px;border-bottom:1px solid #e0e0e0}.rank-math-ai-visibility-transcript-modal__wrapper .components-modal__header .components-modal__header-heading{font-size:13px}.rank-math-ai-visibility-transcript-modal__wrapper .components-modal__content{padding:0 !important;overflow:hidden;flex:1 1 0;min-height:0;display:flex;flex-direction:column}.rank-math-ai-visibility-transcript-modal__section-right{flex:1}.rank-math-ai-visibility-transcript-modal__left,.rank-math-ai-visibility-transcript-modal__right{display:flex;flex-direction:column;height:100%;overflow:hidden}.rank-math-ai-visibility-transcript-modal__sections,.rank-math-ai-visibility-transcript-modal__json-viewer{flex:1;overflow-y:auto;min-height:0}.rank-math-ai-visibility-transcript-modal__left{display:flex;flex-direction:column;gap:4px;padding:25px;background:#fff;border-right:1px solid #e0e0e0;overflow-y:auto}.rank-math-ai-visibility-transcript-modal__left-header{display:flex;justify-content:flex-end}.rank-math-ai-visibility-transcript-modal__copy-btn.rank-math-ai-visibility-btn.components-button{font-size:12px;padding:4px 10px;min-height:28px;height:28px;color:#9b9b9b;border-color:#e0e0e0;background:rgba(0,0,0,0)}.rank-math-ai-visibility-transcript-modal__copy-btn.rank-math-ai-visibility-btn.components-button:hover{color:#017cba;border-color:#017cba;background:rgba(0,0,0,0)}.rank-math-ai-visibility-transcript-modal__copy-btn.rank-math-ai-visibility-btn.components-button .dashicons{font-size:13px;width:13px;height:13px}.rank-math-ai-visibility-transcript-modal__right .rank-math-ai-visibility-transcript-modal__copy-json-btn.rank-math-ai-visibility-btn.components-button{color:#c6c6c6;border-color:#c6c6c6}.rank-math-ai-visibility-transcript-modal__sections{gap:40px;display:flex;flex-direction:column}.rank-math-ai-visibility-transcript-modal__section{display:flex;gap:10px}.rank-math-ai-visibility-transcript-modal__section-label{display:flex;align-items:center;gap:10px;font-size:12px;color:#868686;font-weight:500;margin-bottom:8px}.rank-math-ai-visibility-transcript-modal__section-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;min-width:30px;border-radius:50%;background:#fff;border:1px solid #e3e3e3;color:#1e1e1e}.rank-math-ai-visibility-transcript-modal__section-icon .dashicons{font-size:16px;width:16px;height:16px}.rank-math-ai-visibility-transcript-modal__content-box{padding:20px 24px;border:1px solid #e0e0e0;border-radius:0 11px 11px 11px;font-size:12px;color:#1e1e1e;line-height:1.6;background:#fff;white-space:pre-wrap}.rank-math-ai-visibility-transcript-modal__content-box--response{max-height:280px;overflow-y:auto}.rank-math-ai-visibility-transcript-modal__right{display:flex;flex-direction:column;background:#1c1c1c;overflow:hidden}.rank-math-ai-visibility-transcript-modal__right-header{display:flex;align-items:center;justify-content:space-between;padding:20px 40px;flex-shrink:0}.rank-math-ai-visibility-transcript-modal__right-title{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:500;color:#c6c6c6}.rank-math-ai-visibility-transcript-modal__json-badge{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:#fff;font-size:11px;font-weight:400;color:#1e1e1e;font-family:monospace}.rank-math-ai-visibility-transcript-modal__copy-json-btn.rank-math-ai-visibility-btn.components-button{font-size:12px;padding:4px 10px;min-height:28px;height:28px;color:#9ca3af;background:hsla(0,0%,100%,.06);border:1px solid hsla(0,0%,100%,.12)}.rank-math-ai-visibility-transcript-modal__copy-json-btn.rank-math-ai-visibility-btn.components-button:hover{color:#e5e7eb;background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.25)}.rank-math-ai-visibility-transcript-modal__copy-json-btn.rank-math-ai-visibility-btn.components-button .dashicons{font-size:13px;width:13px;height:13px}.rank-math-ai-visibility-transcript-modal__json-viewer{flex:1;overflow-y:auto;padding:0 40px}.rank-math-ai-visibility-transcript-modal__json-pre{margin:0;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;font-size:12px;line-height:1.7;color:#d1d5db;white-space:pre;overflow-x:auto}.rank-math-ai-visibility-transcript-modal__json-pre .json-key{color:#f2b02d;margin-left:8px}.rank-math-ai-visibility-transcript-modal__json-pre .json-string{color:#5dbec4}.rank-math-ai-visibility-transcript-modal__json-pre .json-number{color:#e5e7eb}.rank-math-ai-visibility-transcript-modal__json-pre .json-boolean{color:#5dbec4}.rank-math-ai-visibility-transcript-modal__json-pre .json-null{color:#9ca3af}',""]);const l=o},4061:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(1601),i=n.n(a),r=n(6314),o=n.n(r)()(i());o.push([e.id,"@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.rank-math-ai-visibility-transcript-viewer{display:grid;grid-template-columns:450px 1fr;min-height:500px;background:#fff;overflow:hidden;gap:23px}.rank-math-ai-visibility-transcript-viewer__left{border-right:1px solid #e0e0e0;display:flex;flex-direction:column;overflow:hidden;background:#fff;border:1px solid #e0e0e0;border-radius:4px}.rank-math-ai-visibility-transcript-viewer__section-right{flex:1}.rank-math-ai-visibility-transcript-viewer__filter-bar{display:flex;align-items:center;gap:12px;padding:18px;border-bottom:1px solid #e0e0e0;background:#fff;flex-shrink:0}.rank-math-ai-visibility-transcript-viewer__date-filter{display:inline-flex;align-items:center;background:#fff}.rank-math-ai-visibility-transcript-viewer__date-filter .dashicons{font-size:13px;width:13px;height:13px;color:#9b9b9b}.rank-math-ai-visibility-transcript-viewer__date-filter input{border:none}.rank-math-ai-visibility-transcript-viewer__date-input{border:none;outline:none;font-size:12px;color:#1e1e1e;background:rgba(0,0,0,0);width:105px;padding:0}.rank-math-ai-visibility-transcript-viewer__query-select{flex:1;min-width:0}.rank-math-ai-visibility-transcript-viewer__entry-list{overflow-y:auto;flex:1;padding:26px 18px;display:flex;flex-direction:column;gap:14px;background:#fcfcfc}.rank-math-ai-visibility-transcript-viewer__empty-list{font-size:13px;color:#9b9b9b;padding:16px;margin:0;text-align:center}.rank-math-ai-visibility-transcript-viewer__entry-card{display:block;padding:26px;border:1px solid #e0e0e0;border-radius:4px;cursor:pointer;transition:border-color .12s ease;background:#fff}.rank-math-ai-visibility-transcript-viewer__entry-card:hover{border-color:rgb(198.5,198.5,198.5)}.rank-math-ai-visibility-transcript-viewer__entry-card--selected{border:1px solid #017cba}.rank-math-ai-visibility-transcript-viewer__entry-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:20px}.rank-math-ai-visibility-transcript-viewer__entry-timestamp{font-size:12px;color:#868686;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.rank-math-ai-visibility-transcript-viewer .rank-math-ai-visibility-transcript-viewer__entry-query-text{font-size:12px;color:#1e1e1e;margin:0 0 10px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:20px}.rank-math-ai-visibility-transcript-viewer__entry-footer{display:flex;align-items:center;justify-content:space-between}.rank-math-ai-visibility-transcript-viewer__entry-duration{display:inline-flex;align-items:center;gap:3px;font-size:12px;color:#9ca3af}.rank-math-ai-visibility-transcript-viewer__entry-duration .dashicons{font-size:13px;width:13px;height:13px}.rank-math-ai-visibility-transcript-viewer__entry-view-link{display:inline-flex;align-items:center;gap:2px;font-size:12px;color:#017cba;font-weight:500;cursor:pointer;user-select:none}.rank-math-ai-visibility-transcript-viewer__entry-view-link .dashicons{font-size:14px;width:14px;height:14px;line-height:1}.rank-math-ai-visibility-transcript-viewer__entry-view-link:hover{color:rgb(.7272727273,90.1818181818,135.2727272727)}.rank-math-ai-visibility-transcript-viewer__detail{display:flex;flex-direction:column;overflow-y:auto;background:#fcfcfc;border:1px solid #e0e0e0;border-radius:4px}.rank-math-ai-visibility-transcript-viewer__detail-header{display:flex;align-items:center;gap:8px;padding:22px 18px;border-bottom:1px solid #e0e0e0;flex-shrink:0}.rank-math-ai-visibility-transcript-viewer__detail-header .dashicons{font-size:16px;width:16px;height:16px}.rank-math-ai-visibility-transcript-viewer__detail-header-title{font-size:14px;font-weight:500;color:#1e1e1e}.rank-math-ai-visibility-transcript-viewer__detail-empty{flex:1;display:flex;align-items:center;justify-content:center}.rank-math-ai-visibility-transcript-viewer__detail-empty p{font-size:13px;color:#9b9b9b;margin:0}.rank-math-ai-visibility-transcript-viewer__detail-content{padding:24px;display:flex;flex-direction:column;gap:40px;background:#fcfcfc}.rank-math-ai-visibility-transcript-viewer__section{display:flex;gap:10px}.rank-math-ai-visibility-transcript-viewer__section .dashicons{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;min-width:34px;border-radius:50%;background:#fff;font-size:14px;border:1px solid #e3e3e3}.rank-math-ai-visibility-transcript-viewer__section-label{display:flex;align-items:center;gap:10px;font-size:12px;color:#868686;font-weight:500;margin-bottom:8px}.rank-math-ai-visibility-transcript-viewer__query-box,.rank-math-ai-visibility-transcript-viewer__response-box{padding:20px 24px;border:1px solid #e0e0e0;border-radius:0 11px 11px 11px;font-size:12px;color:#1e1e1e;line-height:1.6;background:#fff;white-space:pre-wrap}.rank-math-ai-visibility-transcript-viewer__date-input.input[type=date]{border:none}",""]);const l=o},6314:function(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",a=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),a&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),a&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,a,i,r){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(a)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(o[s]=!0)}for(var c=0;c<e.length;c++){var m=[].concat(e[c]);a&&o[m[0]]||(void 0!==r&&(void 0===m[5]||(m[1]="@layer".concat(m[5].length>0?" ".concat(m[5]):""," {").concat(m[1],"}")),m[5]=r),n&&(m[2]?(m[1]="@media ".concat(m[2]," {").concat(m[1],"}"),m[2]=n):m[2]=n),i&&(m[4]?(m[1]="@supports (".concat(m[4],") {").concat(m[1],"}"),m[4]=i):m[4]="".concat(i)),t.push(m))}},t}},1601:function(e){e.exports=function(e){return e[1]}},5072:function(e){var t=[];function n(e){for(var n=-1,a=0;a<t.length;a++)if(t[a].identifier===e){n=a;break}return n}function a(e,a){for(var r={},o=[],l=0;l<e.length;l++){var s=e[l],c=a.base?s[0]+a.base:s[0],m=r[c]||0,d="".concat(c," ").concat(m);r[c]=m+1;var u=n(d),b={css:s[1],media:s[2],sourceMap:s[3],supports:s[4],layer:s[5]};if(-1!==u)t[u].references++,t[u].updater(b);else{var p=i(b,a);a.byIndex=l,t.splice(l,0,{identifier:d,updater:p,references:1})}o.push(d)}return o}function i(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,i){var r=a(e=e||[],i=i||{});return function(e){e=e||[];for(var o=0;o<r.length;o++){var l=n(r[o]);t[l].references--}for(var s=a(e,i),c=0;c<r.length;c++){var m=n(r[c]);0===t[m].references&&(t[m].updater(),t.splice(m,1))}r=s}}},7659:function(e){var t={};e.exports=function(e,n){var a=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(n)}},540:function(e){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056:function(e,t,n){e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7825:function(e){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var a="";n.supports&&(a+="@supports (".concat(n.supports,") {")),n.media&&(a+="@media ".concat(n.media," {"));var i=void 0!==n.layer;i&&(a+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),a+=n.css,i&&(a+="}"),n.media&&(a+="}"),n.supports&&(a+="}");var r=n.sourceMap;r&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(a,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113:function(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}},t={};function n(a){var i=t[a];if(void 0!==i)return i.exports;var r=t[a]={id:a,exports:{}};return e[a](r,r.exports,n),r.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},n.nc=void 0;const a=wp.element,i=lodash,r=wp.i18n,o=wp.components,l=window.rankMathComponents,s=React;function c(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=c(e[t]))&&(a&&(a+=" "),a+=n)}else for(n in e)e[n]&&(a&&(a+=" "),a+=n);return a}const m=function(){for(var e,t,n=0,a="",i=arguments.length;n<i;n++)(e=arguments[n])&&(t=c(e))&&(a&&(a+=" "),a+=t);return a};const d=e=>(0,a.createElement)("path",e),u=(0,a.forwardRef)(({className:e,isPressed:t,...n},i)=>{const r={...n,className:m(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,a.createElement)("svg",{...r,ref:i})});u.displayName="SVG";const b=(0,s.createElement)(u,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,s.createElement)(d,{d:"M3.445 16.505a.75.75 0 001.06.05l5.005-4.55 4.024 3.521 4.716-4.715V14h1.5V8.25H14v1.5h3.19l-3.724 3.723L9.49 9.995l-5.995 5.45a.75.75 0 00-.05 1.06z"})),p=(0,s.createElement)(u,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,s.createElement)(d,{fillRule:"evenodd",d:"M19.75 11H21V8.667L19.875 4H4.125L3 8.667V11h1.25v8.75h15.5V11zm-1.5 0H5.75v7.25H10V13h4v5.25h4.25V11zm-5.5-5.5h2.067l.486 3.24.028.76H12.75v-4zm-3.567 0h2.067v4H8.669l.028-.76.486-3.24zm7.615 3.1l-.464-3.1h2.36l.806 3.345V9.5h-2.668l-.034-.9zM7.666 5.5h-2.36L4.5 8.845V9.5h2.668l.034-.9.464-3.1z",clipRule:"evenodd"})),h=wp.apiFetch;var f=n.n(h);const y=wp.url;function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function _(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return g(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(g(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,g(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,g(d,"constructor",c),g(c,"constructor",s),s.displayName="GeneratorFunction",g(c,i,"GeneratorFunction"),g(d),g(d,i,"Generator"),g(d,a,function(){return this}),g(d,"toString",function(){return"[object Generator]"}),(_=function(){return{w:r,m:u}})()}function g(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}g=function(e,t,n,a){function r(t,n){g(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},g(e,t,n,a)}function k(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?k(Object(n),!0).forEach(function(t){x(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function x(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=v(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=v(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==v(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}var A=function(){var e,t=(e=_().m(function e(t){var n,a,i=arguments;return _().w(function(e){for(;;)switch(e.n){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},e.n=1,f()(w({path:t},n));case 1:return a=e.v,e.a(2,a&&!0===a.success?a.data:a)}},e)}),function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){E(r,a,i,o,l,"next",e)}function l(e){E(r,a,i,o,l,"throw",e)}o(void 0)})});return function(e){return t.apply(this,arguments)}}(),S=function(e,t){var n="".concat("/rankmath/v1/ai-visibility").concat(e);return t&&Object.keys(t).length?(0,y.addQueryArgs)(n,t):n},N=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.refresh,n=void 0!==t&&t,a=e.search,i=void 0===a?"":a;return A(S("/overview",w(w({},n?{refresh:1}:{}),i?{search:i}:{})))},j=function(e){return A(S("/brands/".concat(e)))},O=function(e,t){return A(S("/brands/".concat(e)),{method:"PUT",data:t})},C=function(e,t){return A(S("/brands/".concat(e)),{method:"PATCH",data:{status:t}})},P=function(){return A(S("/trial/activate"),{method:"POST"})},T=function(e){return A(S("/brands/".concat(e,"/insights")))},I=function(e){return A(S("/brands/".concat(e,"/queries")))},z=function(e,t,n){return A(S("/brands/".concat(e,"/queries/").concat(t)),{method:"PUT",data:n})},M=function(e){return A(S("/brands/".concat(e,"/generate-queries")),{method:"POST"})},D=function(e){if(!e)return null;if("inactive"===e.status)return null;switch(e.analysis_status){case"pending":case"running":return"running";case"error":return"error";default:return null}};function B(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=V(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,i=function(){};return{s:i,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){l=!0,r=e},f:function(){try{o||null==n.return||n.return()}finally{if(l)throw r}}}}function L(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return R(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(R(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,R(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,R(d,"constructor",c),R(c,"constructor",s),s.displayName="GeneratorFunction",R(c,i,"GeneratorFunction"),R(d),R(d,i,"Generator"),R(d,a,function(){return this}),R(d,"toString",function(){return"[object Generator]"}),(L=function(){return{w:r,m:u}})()}function R(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}R=function(e,t,n,a){function r(t,n){R(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},R(e,t,n,a)}function q(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function F(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){q(r,a,i,o,l,"next",e)}function l(e){q(r,a,i,o,l,"throw",e)}o(void 0)})}}function G(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||V(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e,t){if(e){if("string"==typeof e)return U(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?U(e,t):void 0}}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var H=function(e){return"running"===D(e)&&!e.last_analyzed};const Q=function(){var e=G((0,a.useState)(null),2),t=e[0],n=e[1],i=G((0,a.useState)([]),2),o=i[0],l=i[1],s=G((0,a.useState)(!0),2),c=s[0],m=s[1],d=G((0,a.useState)(!1),2),u=d[0],b=d[1],p=G((0,a.useState)(null),2),h=p[0],f=p[1],y=(0,a.useRef)(!1),v=(0,a.useRef)({}),_=(0,a.useRef)(""),g=(0,a.useCallback)(F(L().m(function e(){var t,a,i,o,s=arguments;return L().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=s.length>0&&void 0!==s[0]&&s[0],!y.current){e.n=1;break}return e.a(2,null);case 1:return y.current=!0,f(null),e.p=2,e.n=3,N({refresh:t,search:_.current});case 3:return i=e.v,n(null!==(a=null==i?void 0:i.summary)&&void 0!==a?a:null),l(Array.isArray(null==i?void 0:i.brands)?i.brands:[]),b(!(null==i||!i.is_stale)),e.a(2,i);case 4:return e.p=4,o=e.v,f((null==o?void 0:o.message)||(0,r.__)("Failed to load dashboard data.","seo-by-rank-math")),e.a(2,null);case 5:return e.p=5,y.current=!1,m(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])})),[]),k=(0,a.useCallback)(function(e){return _.current=e||"",g()},[g]);(0,a.useEffect)(function(){var e=function(){var e=F(L().m(function e(){var t;return L().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,g();case 1:if(null==(t=e.v)||!t.is_stale){e.n=2;break}return e.n=2,g(!0);case 2:return e.a(2)}},e)}));return function(){return e.apply(this,arguments)}}();e()},[g]),(0,a.useEffect)(function(){var e=o.filter(H);if(e.length){var t=setInterval(F(L().m(function t(){var n,a,i,r,o,l;return L().w(function(t){for(;;)switch(t.p=t.n){case 0:if(!document.hidden){t.n=1;break}return t.a(2);case 1:n=B(e),t.p=2,n.s();case 3:if((a=n.n()).done){t.n=10;break}if(i=a.value,v.current[i.id]||(v.current[i.id]={attempts:0,errors:0}),!((r=v.current[i.id]).attempts>=10||r.errors>=3)){t.n=4;break}return t.a(3,9);case 4:return r.attempts++,t.p=5,t.n=6,T(i.id);case 6:if(o=t.v,r.errors=0,null==o||!o.insights){t.n=7;break}return t.n=7,g(!0);case 7:t.n=9;break;case 8:t.p=8,t.v,r.errors++;case 9:t.n=3;break;case 10:t.n=12;break;case 11:t.p=11,l=t.v,n.e(l);case 12:return t.p=12,n.f(),t.f(12);case 13:return t.a(2)}},t,null,[[5,8],[2,11,12,13]])})),2e4);return function(){return clearInterval(t)}}},[o,g]);var w=(0,a.useCallback)(function(){var e=F(L().m(function e(t,n){var a,i;return L().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,t();case 1:return a=e.v,e.n=2,g();case 2:return e.a(2,a);case 3:throw e.p=3,i=e.v,f((null==i?void 0:i.message)||n),i;case 4:return e.a(2)}},e,null,[[0,3]])}));return function(t,n){return e.apply(this,arguments)}}(),[g]),x=(0,a.useCallback)(function(e){return w(function(){return function(e){return A(S("/brands"),{method:"POST",data:e})}(e)},(0,r.__)("Failed to create brand.","seo-by-rank-math"))},[w]),E=(0,a.useCallback)(function(e,t){return w(function(){return O(e,t)},(0,r.__)("Failed to update brand.","seo-by-rank-math"))},[w]),j=(0,a.useCallback)(function(e){return w(function(){return C(e,"inactive")},(0,r.__)("Failed to disable brand.","seo-by-rank-math"))},[w]),P=(0,a.useCallback)(function(e){return w(function(){return C(e,"active")},(0,r.__)("Failed to enable brand.","seo-by-rank-math"))},[w]);return{summary:t,brands:o,loading:c,isStale:u,error:h,refetch:g,handleSearch:k,handleAddBrand:x,handleUpdateBrand:E,handleDisableBrand:j,handleEnableBrand:P}};var W=n(5072),$=n.n(W),Y=n(7825),K=n.n(Y),Z=n(7659),J=n.n(Z),X=n(5056),ee=n.n(X),te=n(540),ne=n.n(te),ae=n(1113),ie=n.n(ae),re=n(5089),oe={};oe.styleTagTransform=ie(),oe.setAttributes=ee(),oe.insert=J().bind(null,"head"),oe.domAPI=K(),oe.insertStyleElement=ne();$()(re.A,oe);re.A&&re.A.locals&&re.A.locals;var le=["variant","className","iconVariant","iconLeft","iconRight","children"];function se(){return se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},se.apply(null,arguments)}const ce=function(e){var t=e.variant,n=void 0===t?"primary":t,a=e.className,i=void 0===a?"":a,r=e.iconVariant,l=e.iconLeft,s=e.iconRight,c=e.children,m=function(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(-1!==t.indexOf(a))continue;n[a]=e[a]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,le),d="rank-math-ai-visibility-btn",u=[d,"".concat(d,"--").concat(n),r&&"".concat(d,"--icon-").concat(r),i].filter(Boolean).join(" ");return wp.element.createElement(o.Button,se({variant:n,className:u},m),l&&wp.element.createElement("span",{className:"".concat(d,"__icon-left"),"aria-hidden":"true"},l),c,s&&wp.element.createElement("span",{className:"".concat(d,"__icon-right"),"aria-hidden":"true"},s))};var me=["isLoading","loadingLabel","children","disabled","iconLeft"];function de(){return de=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},de.apply(null,arguments)}const ue=function(e){var t=e.isLoading,n=void 0!==t&&t,a=e.loadingLabel,i=e.children,r=e.disabled,l=e.iconLeft,s=function(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(-1!==t.indexOf(a))continue;n[a]=e[a]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}(e,me),c=n?null!=a?a:"".concat(i,"â€¦"):i,m=l&&n?wp.element.createElement(o.Spinner,null):l;return wp.element.createElement(ce,de({iconLeft:m,disabled:r||n},s),c)};var be=n(1297),pe={};pe.styleTagTransform=ie(),pe.setAttributes=ee(),pe.insert=J().bind(null,"head"),pe.domAPI=K(),pe.insertStyleElement=ne();$()(be.A,pe);be.A&&be.A.locals&&be.A.locals;const he=function(e){var t,n=e.icon,a=e.label,i=e.value,r=e.tooltip,s=e.sub,c=e.compact,m=void 0!==c&&c,d=e.className,u=void 0===d?"":d,b=e.analysis,p=void 0===b?null:b,h="rank-math-ai-visibility-stat-card",f=[h,(null!==(t=(null==p?void 0:p.status)&&"done"===(null==p?void 0:p.status))&&void 0!==t?t:null!=i&&""!==i&&"â€”"!==i)&&"".concat(h,"--has-data"),m&&"".concat(h,"--compact"),u].filter(Boolean).join(" "),y="".concat(h,"__label"),v="".concat(h,"__value");return wp.element.createElement("div",{className:f},n&&wp.element.createElement("span",{className:"".concat(h,"__icon-wrap")},"string"==typeof n?wp.element.createElement("span",{className:"dashicons dashicons-".concat(n," ").concat(h,"__icon")}):wp.element.createElement(o.Icon,{icon:n,className:"".concat(h,"__icon")})),wp.element.createElement("div",{className:"".concat(h,"__content")},wp.element.createElement("div",{className:"".concat(h,"__label-row")},wp.element.createElement("span",{className:y},a),r&&l.HelpTooltip&&wp.element.createElement(l.HelpTooltip,{text:r})),wp.element.createElement("div",{className:"".concat(h,"__data")},wp.element.createElement("span",{className:v},null!=i?i:"N/A"),s&&wp.element.createElement("span",{className:"".concat(h,"__sub")},s))))};var fe=n(6583),ye={};ye.styleTagTransform=ie(),ye.setAttributes=ee(),ye.insert=J().bind(null,"head"),ye.domAPI=K(),ye.insertStyleElement=ne();$()(fe.A,ye);fe.A&&fe.A.locals&&fe.A.locals;const ve=function(e){var t=e.icon,n=e.heading,a=e.description,i=e.ctaLabel,r=e.onCta,l=i&&r,s="rank-math-ai-visibility-empty-state";return wp.element.createElement("div",{className:s},t&&wp.element.createElement("div",{className:"".concat(s,"__icon"),"aria-hidden":"true"},wp.element.createElement(o.Icon,{icon:t})),wp.element.createElement("h2",{className:"".concat(s,"__heading")},n),wp.element.createElement("p",{className:"".concat(s,"__description")},a),l&&wp.element.createElement(ce,{className:"".concat(s,"__cta"),onClick:r},i))};var _e=n(6558),ge={};ge.styleTagTransform=ie(),ge.setAttributes=ee(),ge.insert=J().bind(null,"head"),ge.domAPI=K(),ge.insertStyleElement=ne();$()(_e.A,ge);_e.A&&_e.A.locals&&_e.A.locals;const ke=function(e){var t=e.rank,n=function(e){if(null==e)return"neutral";var t=parseInt(e,10);return 1===t?"rank-1":2===t?"rank-2":"rank-3"}(t),a=null!=t?"".concat(t):"âˆ’",i="rank-math-ai-visibility-rank-badge";return wp.element.createElement("span",{className:"".concat(i," ").concat(i,"--").concat(n)},a)};var we=n(7497),xe={};xe.styleTagTransform=ie(),xe.setAttributes=ee(),xe.insert=J().bind(null,"head"),xe.domAPI=K(),xe.insertStyleElement=ne();$()(we.A,xe);we.A&&we.A.locals&&we.A.locals;var Ee=function(e){var t=e.modifier;return"positive"===t?wp.element.createElement("svg",{width:"12",height:"12",viewBox:"0 0 12 12",style:{fill:"none",flexShrink:0},"aria-hidden":"true"},wp.element.createElement("circle",{cx:"6",cy:"6",r:"5",stroke:"currentColor",strokeWidth:"1"}),wp.element.createElement("circle",{cx:"4",cy:"4.8",r:"0.8",fill:"currentColor"}),wp.element.createElement("circle",{cx:"8",cy:"4.8",r:"0.8",fill:"currentColor"}),wp.element.createElement("path",{d:"M3.5 7 Q6 9 8.5 7",stroke:"currentColor",strokeWidth:"1",strokeLinecap:"round"})):"negative"===t?wp.element.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M5.83335 5.38542C5.83335 4.98271 5.50687 4.65625 5.10417 4.65625C4.70146 4.65625 4.375 4.98271 4.375 5.38542C4.375 5.78812 4.70146 6.11467 5.10417 6.11467C5.50687 6.11467 5.83335 5.78812 5.83335 5.38542Z",fill:"#F66276"}),wp.element.createElement("path",{d:"M8.89567 4.65625C9.2984 4.65625 9.62484 4.98271 9.62484 5.38542C9.62484 5.78812 9.2984 6.11467 8.89567 6.11467C8.493 6.11467 8.1665 5.78818 8.1665 5.38548C8.1665 4.98277 8.493 4.65625 8.89567 4.65625Z",fill:"#F66276"}),wp.element.createElement("path",{d:"M5.38427 9.48806C5.23378 9.67712 4.95854 9.70833 4.76951 9.55783C4.58048 9.40733 4.54924 9.13211 4.69974 8.94305C5.23746 8.26767 6.06821 7.8335 7.00003 7.8335C7.9319 7.8335 8.76263 8.26767 9.30034 8.94305C9.45084 9.13211 9.41963 9.40733 9.23058 9.55783C9.04158 9.70833 8.7663 9.67712 8.6158 9.48806C8.23699 9.01224 7.65412 8.7085 7.00003 8.7085C6.34599 8.7085 5.76313 9.01224 5.38427 9.48806Z",fill:"#F66276"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6.99984 1.1665C3.77817 1.1665 1.1665 3.77817 1.1665 6.99984C1.1665 10.2215 3.77817 12.8332 6.99984 12.8332C10.2215 12.8332 12.8332 10.2215 12.8332 6.99984C12.8332 3.77817 10.2215 1.1665 6.99984 1.1665ZM2.0415 6.99984C2.0415 4.26143 4.26143 2.0415 6.99984 2.0415C9.73824 2.0415 11.9582 4.26143 11.9582 6.99984C11.9582 9.73824 9.73824 11.9582 6.99984 11.9582C4.26143 11.9582 2.0415 9.73824 2.0415 6.99984Z",fill:"#F66276"})):wp.element.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M5.63997 5.38542C5.63997 4.98271 5.31352 4.65625 4.91081 4.65625C4.5081 4.65625 4.18164 4.98271 4.18164 5.38542C4.18164 5.78812 4.5081 6.11467 4.91081 6.11467C5.31352 6.11467 5.63997 5.78812 5.63997 5.38542Z",fill:"#E8A623"}),wp.element.createElement("path",{d:"M4.7207 8.30566C4.47908 8.30566 4.2832 8.50155 4.2832 8.74316C4.2832 8.98478 4.47908 9.18066 4.7207 9.18066H9.27886C9.52047 9.18066 9.71636 8.98478 9.71636 8.74316C9.71636 8.50155 9.52047 8.30566 9.27886 8.30566H4.7207Z",fill:"#E8A623"}),wp.element.createElement("path",{d:"M9.08903 4.65625C9.49176 4.65625 9.8182 4.98271 9.8182 5.38542C9.8182 5.78812 9.49176 6.11467 9.08903 6.11467C8.6863 6.11467 8.35986 5.78818 8.35986 5.38548C8.35986 4.98277 8.6863 4.65625 9.08903 4.65625Z",fill:"#E8A623"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6.99984 1.1665C3.77817 1.1665 1.1665 3.77817 1.1665 6.99984C1.1665 10.2215 3.77817 12.8332 6.99984 12.8332C10.2215 12.8332 12.8332 10.2215 12.8332 6.99984C12.8332 3.77817 10.2215 1.1665 6.99984 1.1665ZM2.0415 6.99984C2.0415 4.26143 4.26143 2.0415 6.99984 2.0415C9.73824 2.0415 11.9582 4.26143 11.9582 6.99984C11.9582 9.73824 9.73824 11.9582 6.99984 11.9582C4.26143 11.9582 2.0415 9.73824 2.0415 6.99984Z",fill:"#E8A623"}))};const Ae=function(e){var t=e.score,n=function(e){if(null==e)return{modifier:"neutral"};var t=Number(e);return t>=70?{modifier:"positive"}:t>=50?{modifier:"warning"}:{modifier:"negative"}}(t).modifier,a=null!=t,r="rank-math-ai-visibility-sentiment-badge";return wp.element.createElement("span",{className:"".concat(r," ").concat(r,"--").concat(n)},a&&wp.element.createElement("span",{className:"".concat(r,"__icon")},wp.element.createElement(Ee,{modifier:n})),wp.element.createElement("span",{className:"".concat(r,"__label")},a?"".concat((0,i.round)(t),"%"):"âˆ’"))};var Se=n(5975),Ne={};Ne.styleTagTransform=ie(),Ne.setAttributes=ee(),Ne.insert=J().bind(null,"head"),Ne.domAPI=K(),Ne.insertStyleElement=ne();$()(Se.A,Ne);Se.A&&Se.A.locals&&Se.A.locals;function je(e){return function(e){if(Array.isArray(e))return Oe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Oe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Oe(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const Ce=function(e){var t=e.locale;if(!t)return null;var n=function(e){if(!e)return"";var t=e.split("-");return(t[1]||t[0]).toUpperCase()}(t),a=function(e){return je(e.toUpperCase()).map(function(e){return String.fromCodePoint(127462+e.charCodeAt(0)-65)}).join("")}(n),i="rank-math-ai-visibility-country-flag";return wp.element.createElement("span",{className:i,"aria-label":n},wp.element.createElement("span",{className:"".concat(i,"__emoji"),"aria-hidden":"true"},a),wp.element.createElement("span",{className:"".concat(i,"__code")},n))};var Pe=n(3269),Te={};Te.styleTagTransform=ie(),Te.setAttributes=ee(),Te.insert=J().bind(null,"head"),Te.domAPI=K(),Te.insertStyleElement=ne();$()(Pe.A,Te);Pe.A&&Pe.A.locals&&Pe.A.locals;const Ie=function(e){var t=e.title,n=e.subtitle;if(!t)return null;var a="rank-math-ai-visibility-section-header";return wp.element.createElement("div",{className:a},wp.element.createElement("h2",{className:"".concat(a,"__title")},t),n&&wp.element.createElement("p",{className:"".concat(a,"__subtitle")},n))};var ze=n(6424),Me={};Me.styleTagTransform=ie(),Me.setAttributes=ee(),Me.insert=J().bind(null,"head"),Me.domAPI=K(),Me.insertStyleElement=ne();$()(ze.A,Me);ze.A&&ze.A.locals&&ze.A.locals;var De=(0,a.memo)(function(e){var t=e.status,n=e.onView,a=e.onEdit,i=e.onDisable,o="rank-math-ai-visibility-action-buttons";return wp.element.createElement("div",{className:o},wp.element.createElement(ce,{variant:"icon",className:"".concat(o,"__view"),onClick:n,"aria-label":(0,r.__)("View","seo-by-rank-math")},wp.element.createElement("span",{className:"".concat(o,"__inner")},wp.element.createElement("span",{className:"rm-icon-eye"}),wp.element.createElement("span",{className:"".concat(o,"__label")},(0,r.__)("View","seo-by-rank-math")))),wp.element.createElement(ce,{variant:"icon",className:"".concat(o,"__edit"),onClick:a,"aria-label":(0,r.__)("Edit","seo-by-rank-math")},wp.element.createElement("span",{className:"".concat(o,"__inner")},wp.element.createElement("span",{className:"rm-icon rm-icon-edit"}),wp.element.createElement("span",{className:"".concat(o,"__label")},(0,r.__)("Edit","seo-by-rank-math")))),wp.element.createElement(ce,{variant:"icon",className:"".concat("".concat(o,"inactive"===t?"__inactive":"__active")),onClick:function(){i("inactive"===t?"activate":"deactivate")},"aria-label":"inactive"===t?(0,r.__)("Activate","seo-by-rank-math"):(0,r.__)("Deactivate","seo-by-rank-math")},"inactive"===t?wp.element.createElement("span",{className:"".concat(o,"__inner")},wp.element.createElement("span",{className:"dashicons dashicons-controls-play"}),wp.element.createElement("span",{className:"".concat(o,"__label")},(0,r.__)("Activate","seo-by-rank-math"))):wp.element.createElement("span",{className:"".concat(o,"__inner")},wp.element.createElement("span",{className:"rm-icon-off"}),wp.element.createElement("span",{className:"".concat(o,"__label")},(0,r.__)("Deactivate","seo-by-rank-math")))))});De.displayName="ActionButtons";const Be=De;var Le=n(9034),Re={};Re.styleTagTransform=ie(),Re.setAttributes=ee(),Re.insert=J().bind(null,"head"),Re.domAPI=K(),Re.insertStyleElement=ne();$()(Le.A,Re);Le.A&&Le.A.locals&&Le.A.locals;var qe=function(e){var t=e.title,n=e.message,a=e.confirmLabel,i=void 0===a?(0,r.__)("Confirm","seo-by-rank-math"):a,l=e.cancelLabel,s=void 0===l?(0,r.__)("Cancel","seo-by-rank-math"):l,c=e.isDestructive,m=void 0!==c&&c,d=e.isProcessing,u=void 0!==d&&d,b=e.error,p=void 0===b?null:b,h=e.onConfirm,f=e.onCancel,y="rank-math-ai-visibility-confirm-modal";return wp.element.createElement(o.Modal,{title:t,onRequestClose:f,className:y},wp.element.createElement("p",{className:"".concat(y,"__message")},n),p&&wp.element.createElement("p",{className:"".concat(y,"__error")},p),wp.element.createElement("div",{className:"".concat(y,"__footer")},wp.element.createElement(ce,{variant:"secondary",onClick:f,disabled:u},s),wp.element.createElement(ue,{variant:"primary",isDestructive:m,onClick:h,isLoading:u,loadingLabel:"".concat(i,"â€¦")},i)))};qe.displayName="ConfirmModal";const Fe=qe;var Ge=n(1623),Ve={};Ve.styleTagTransform=ie(),Ve.setAttributes=ee(),Ve.insert=J().bind(null,"head"),Ve.domAPI=K(),Ve.insertStyleElement=ne();$()(Ge.A,Ve);Ge.A&&Ge.A.locals&&Ge.A.locals;var Ue=function(e){var t,n=e.value,a=e.onChange,i=e.disabled,l=void 0!==i&&i,s=e.isLoading,c=void 0!==s&&s;return t=c?n?(0,r.__)("Enablingâ€¦","seo-by-rank-math"):(0,r.__)("Disablingâ€¦","seo-by-rank-math"):n?(0,r.__)("Enabled","seo-by-rank-math"):(0,r.__)("Disabled","seo-by-rank-math"),wp.element.createElement(o.CheckboxControl,{className:"rank-math-ai-visibility-status-toggle",label:t,checked:n,onChange:a,disabled:l||c,__nextHasNoMarginBottom:!0})};Ue.displayName="StatusToggle";const He=Ue;var Qe=n(7340),We={};We.styleTagTransform=ie(),We.setAttributes=ee(),We.insert=J().bind(null,"head"),We.domAPI=K(),We.insertStyleElement=ne();$()(Qe.A,We);Qe.A&&Qe.A.locals&&Qe.A.locals;function $e(e){return $e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$e(e)}function Ye(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ke(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ke(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Je(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ze(Object(n),!0).forEach(function(t){Xe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Xe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=$e(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=$e(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==$e(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var et=function(e,t){var n=function(){t()};function a(){var t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;top:0;left:0;opacity:0;pointer-events:none",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy"),n()}catch(e){}document.body.removeChild(t)}window.navigator.clipboard?window.navigator.clipboard.writeText(e).then(n).catch(function(){return a()}):a()},tt=function(e){if("string"!=typeof e.extraction_data)return e;try{return Je(Je({},e),{},{extraction_data:JSON.parse(e.extraction_data)})}catch(t){return e}},nt=function(e){var t,n=e.entry,i=e.onClose,l="rank-math-ai-visibility-transcript-modal",s=Ye((0,a.useState)(!1),2),c=s[0],m=s[1],d=Ye((0,a.useState)(!1),2),u=d[0],b=d[1];return wp.element.createElement(o.Modal,{title:wp.element.createElement("span",{className:"".concat(l,"__modal-title")},wp.element.createElement("span",{className:"dashicons rm-icon-comments","aria-hidden":"true"}),(0,r.__)("Transcript","seo-by-rank-math")),onRequestClose:i,className:"".concat(l,"__wrapper"),size:"large"},wp.element.createElement("div",{className:l},wp.element.createElement("div",{className:"".concat(l,"__left")},wp.element.createElement("div",{className:"".concat(l,"__left-header")},wp.element.createElement(ce,{variant:"secondary",className:"".concat(l,"__copy-btn"),onClick:function(){var e=[(0,r.__)("Query:","seo-by-rank-math")+" "+(n.query||""),"",(0,r.__)("Response:","seo-by-rank-math")+" "+(n.response||n.excerpt||"")].join("\n");et(e,function(){m(!0),setTimeout(function(){return m(!1)},2e3)})},iconLeft:wp.element.createElement("span",{className:"dashicons dashicons-clipboard"})},c?(0,r.__)("Copied!","seo-by-rank-math"):(0,r.__)("Copy Raw Text","seo-by-rank-math"))),wp.element.createElement("div",{className:"".concat(l,"__sections")},wp.element.createElement("div",{className:"".concat(l,"__section")},wp.element.createElement("div",{className:"".concat(l,"__section-left")},wp.element.createElement("span",{className:"".concat(l,"__section-icon")},wp.element.createElement("span",{className:"dashicons dashicons-admin-users","aria-hidden":"true"}))),wp.element.createElement("div",{className:"".concat(l,"__section-right")},wp.element.createElement("div",{className:"".concat(l,"__section-label")},(0,r.__)("Original Query","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(l,"__content-box")},n.query||"â€”"))),wp.element.createElement("div",{className:"".concat(l,"__section")},wp.element.createElement("div",{className:"".concat(l,"__section-left")},wp.element.createElement("span",{className:"".concat(l,"__section-icon")},wp.element.createElement("span",{className:"dashicons dashicons-superhero-alt","aria-hidden":"true"}))),wp.element.createElement("div",{className:"".concat(l,"__section-right")},wp.element.createElement("div",{className:"".concat(l,"__section-label")},(0,r.__)("Model Response","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(l,"__content-box ").concat(l,"__content-box--response")},n.response||n.excerpt||"â€”"))))),wp.element.createElement("div",{className:"".concat(l,"__right")},wp.element.createElement("div",{className:"".concat(l,"__right-header")},wp.element.createElement("div",{className:"".concat(l,"__right-title")},wp.element.createElement("span",{className:"".concat(l,"__json-badge")},"{}"),(0,r.__)("Extracted Signals","seo-by-rank-math")),wp.element.createElement(ce,{variant:"secondary",onClick:function(){et(JSON.stringify(tt(n),null,2),function(){b(!0),setTimeout(function(){return b(!1)},2e3)})},className:"".concat(l,"__copy-json-btn"),iconLeft:wp.element.createElement("span",{className:"dashicons dashicons-clipboard"})},u?(0,r.__)("Copied!","seo-by-rank-math"):(0,r.__)("Copy JSON","seo-by-rank-math"))),wp.element.createElement("div",{className:"".concat(l,"__json-viewer")},wp.element.createElement("pre",{className:"".concat(l,"__json-pre"),dangerouslySetInnerHTML:{__html:(t=JSON.stringify(tt(n),null,2),t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(?:\\u[a-fA-F0-9]{4}|\\[^u]|[^\\"])*"(?:\s*:)?|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,function(e){return e.endsWith(":")||e.startsWith('"')&&e.endsWith('":')?'<span class="json-key">'.concat(e,"</span>"):e.startsWith('"')?'<span class="json-string">'.concat(e,"</span>"):"true"===e||"false"===e?'<span class="json-boolean">'.concat(e,"</span>"):"null"===e?'<span class="json-null">'.concat(e,"</span>"):'<span class="json-number">'.concat(e,"</span>")}))}})))))};nt.displayName="TranscriptModal";const at=nt;var it=n(162),rt={};rt.styleTagTransform=ie(),rt.setAttributes=ee(),rt.insert=J().bind(null,"head"),rt.domAPI=K(),rt.insertStyleElement=ne();$()(it.A,rt);it.A&&it.A.locals&&it.A.locals;const ot=function(e){var t=e.status;if(!t)return null;var n="success"===t,a="rank-math-ai-visibility-status-badge";return wp.element.createElement("span",{className:"".concat(a," ").concat(a,"--").concat(t)},n?wp.element.createElement("i",{className:"dashicons dashicons-yes","aria-hidden":"true"}):wp.element.createElement("i",{className:"dashicons dashicons-no","aria-hidden":"true"}),function(e){return"success"===e?(0,r.__)("Success","seo-by-rank-math"):"partial"===e?(0,r.__)("Partial","seo-by-rank-math"):(0,r.__)("Failed","seo-by-rank-math")}(t))};var lt=n(6135),st={};st.styleTagTransform=ie(),st.setAttributes=ee(),st.insert=J().bind(null,"head"),st.domAPI=K(),st.insertStyleElement=ne();$()(lt.A,st);lt.A&&lt.A.locals&&lt.A.locals;var ct=function(e){var t=e.value,n=e.onChange,a=e.ariaLabel,i=e.id,r=e.className;return wp.element.createElement("div",{className:"rank-math-ai-visibility-date-input"},wp.element.createElement("input",{type:"date",id:i,value:t,onChange:n,"aria-label":a,className:r}))};ct.displayName="DateInput";const mt=ct;var dt=function(e){if(!e)return null;var t=new Date(e);return isNaN(t.getTime())?null:t},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" at ",n=dt(e);if(!n)return"â€”";var a=n.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),i=n.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return"".concat(a).concat(t).concat(i)},bt=function(e){var t=dt(e);return t?t.toLocaleDateString("en-GB",{day:"numeric",month:"long",year:"numeric"}):"â€”"},pt=n(4061),ht={};ht.styleTagTransform=ie(),ht.setAttributes=ee(),ht.insert=J().bind(null,"head"),ht.domAPI=K(),ht.insertStyleElement=ne();$()(pt.A,ht);pt.A&&pt.A.locals&&pt.A.locals;function ft(e){return function(e){if(Array.isArray(e))return _t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||vt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||vt(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vt(e,t){if(e){if("string"==typeof e)return _t(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_t(e,t):void 0}}function _t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var gt=function(e){var t,n=e.entry,a=e.isSelected,i=e.onSelect,o=e.onViewTranscript,l=void 0===o?function(){}:o,s="rank-math-ai-visibility-transcript-viewer",c=n.model||n.platform||"";return wp.element.createElement("div",{role:"button",tabIndex:0,className:["".concat(s,"__entry-card"),a?"".concat(s,"__entry-card--selected"):""].filter(Boolean).join(" "),onClick:function(){return i(n.id)},onKeyDown:function(e){return("Enter"===e.key||" "===e.key)&&i(n.id)},"aria-current":a?"true":void 0},wp.element.createElement("div",{className:"".concat(s,"__entry-meta")},wp.element.createElement("span",{className:"".concat(s,"__entry-timestamp")},(t=n.created_at,ut(t," Â· ")),c&&" Â· ".concat(c)),wp.element.createElement(ot,{status:n.status})),wp.element.createElement("p",{className:"".concat(s,"__entry-query-text")},n.query||"â€”"),wp.element.createElement("div",{className:"".concat(s,"__entry-footer")},null!==n.duration_seconds&&void 0!==n.duration_seconds&&wp.element.createElement("span",{className:"".concat(s,"__entry-duration")},wp.element.createElement("span",{className:"dashicons dashicons-clock","aria-hidden":"true"}),n.duration_seconds,"s"),wp.element.createElement("span",{role:"button",tabIndex:0,className:"".concat(s,"__entry-view-link"),onClick:function(e){e.stopPropagation(),l(n)},onKeyDown:function(e){return("Enter"===e.key||" "===e.key)&&l(n)}},(0,r.__)("View","seo-by-rank-math"),wp.element.createElement("span",{className:"dashicons dashicons-arrow-right-alt2","aria-hidden":"true"}))))},kt=function(e){var t=e.entry,n="rank-math-ai-visibility-transcript-viewer";return wp.element.createElement("div",{className:"".concat(n,"__detail")},wp.element.createElement("div",{className:"".concat(n,"__detail-header")},wp.element.createElement("span",{className:"dashicons rm-icon-comments","aria-hidden":"true"}),wp.element.createElement("span",{className:"".concat(n,"__detail-header-title")},(0,r.__)("Transcript preview","seo-by-rank-math"))),t?wp.element.createElement("div",{className:"".concat(n,"__detail-content")},wp.element.createElement("div",{className:"".concat(n,"__section")},wp.element.createElement("div",{className:"".concat(n,"__section-left")},wp.element.createElement("span",{className:"dashicons dashicons-admin-users","aria-hidden":"true"})),wp.element.createElement("div",{className:"".concat(n,"__section-right")},wp.element.createElement("div",{className:"".concat(n,"__section-label")},(0,r.__)("Original Query","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(n,"__query-box")},t.query||"â€”"))),wp.element.createElement("div",{className:"".concat(n,"__section")},wp.element.createElement("div",{className:"".concat(n,"__section-left")},wp.element.createElement("span",{className:"dashicons dashicons-superhero-alt","aria-hidden":"true"})),wp.element.createElement("div",{className:"".concat(n,"__section-right")},wp.element.createElement("div",{className:"".concat(n,"__section-label")},(0,r.__)("Model Response","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(n,"__response-box")},t.response||t.excerpt||"â€”")))):wp.element.createElement("div",{className:"".concat(n,"__detail-empty")},wp.element.createElement("p",null,(0,r.__)("Select a query to preview its transcript.","seo-by-rank-math"))))},wt=function(e){var t,n,i,l=e.entries,s=void 0===l?[]:l,c=e.selectedEntryId,m=void 0===c?null:c,d=e.onSelectEntry,u=void 0===d?function(){}:d,b="rank-math-ai-visibility-transcript-viewer",p=yt((0,a.useState)(""),2),h=p[0],f=p[1],y=yt((0,a.useState)(""),2),v=y[0],_=y[1],g=yt((0,a.useState)(null),2),k=g[0],w=g[1],x=(0,a.useMemo)(function(){return[{label:(0,r.__)("All queries","seo-by-rank-math"),value:""}].concat(ft(s.map(function(e){var t="Entry ".concat(e.id);return e.query&&(t=e.query.length>60?e.query.slice(0,60)+"â€¦":e.query),{label:t,value:String(e.id)}})))},[s]),E=(0,a.useMemo)(function(){var e=s;return h&&(e=e.filter(function(e){var t;return null===(t=e.created_at)||void 0===t?void 0:t.startsWith(h)})),v&&(e=e.filter(function(e){return String(e.id)===v})),e},[s,h,v]),A=null!==(t=null!=m?m:null===(n=E[0])||void 0===n?void 0:n.id)&&void 0!==t?t:null,S=null!==(i=s.find(function(e){return e.id===A}))&&void 0!==i?i:null;return wp.element.createElement("div",{className:b},wp.element.createElement("div",{className:"".concat(b,"__left")},wp.element.createElement("div",{className:"".concat(b,"__filter-bar")},wp.element.createElement("div",{className:"".concat(b,"__date-filter")},wp.element.createElement(mt,{value:h,onChange:function(e){return f(e.target.value)},ariaLabel:(0,r.__)("Filter by date","seo-by-rank-math"),className:"".concat(b,"__date-input")})),wp.element.createElement(o.SelectControl,{value:v,options:x,onChange:_,className:"".concat(b,"__query-select"),__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"".concat(b,"__entry-list")},0===E.length?wp.element.createElement("p",{className:"".concat(b,"__empty-list")},(0,r.__)("No entries match the current filters.","seo-by-rank-math")):E.map(function(e){return wp.element.createElement(gt,{key:e.id,entry:e,isSelected:e.id===A,onSelect:u,onViewTranscript:w})}))),wp.element.createElement(kt,{entry:S}),k&&wp.element.createElement(at,{entry:k,onClose:function(){return w(null)}}))};wt.displayName="TranscriptViewer";const xt=wt;var Et=n(6082),At={};At.styleTagTransform=ie(),At.setAttributes=ee(),At.insert=J().bind(null,"head"),At.domAPI=K(),At.insertStyleElement=ne();$()(Et.A,At);Et.A&&Et.A.locals&&Et.A.locals;var St=(0,a.memo)(function(e){var t=e.value,n=void 0===t?"-":t;return n&&"-"!==n&&(n=ut(n)||n),wp.element.createElement("div",{className:"rank-math-ai-visibility-processed-start-time"},n)});St.displayName="StartTime";const Nt=St;var jt=n(4236),Ot={};Ot.styleTagTransform=ie(),Ot.setAttributes=ee(),Ot.insert=J().bind(null,"head"),Ot.domAPI=K(),Ot.insertStyleElement=ne();$()(jt.A,Ot);jt.A&&jt.A.locals&&jt.A.locals;const Ct=function(e){var t=e.score,n=e.showOutOf,a=void 0===n||n,i=function(e){if(null==e)return"neutral";var t=Number(e);return t>=70?"good":t>=40?"average":"poor"}(t),r="-/-";null!=t&&(r=a?"".concat(t," / 100"):String(t));var o="rank-math-ai-visibility-score-badge";return wp.element.createElement("span",{className:"".concat(o," ").concat(o,"--").concat(i)},r)};var Pt=n(627),Tt={};Tt.styleTagTransform=ie(),Tt.setAttributes=ee(),Tt.insert=J().bind(null,"head"),Tt.domAPI=K(),Tt.insertStyleElement=ne();$()(Pt.A,Tt);Pt.A&&Pt.A.locals&&Pt.A.locals;const It=function(e){var t=e.value,n=e.variant,a=void 0===n?"neutral":n,i=null==t||"error"===t||"warning"===t?"-":t,r="rank-math-ai-visibility-count-badge";return wp.element.createElement("span",{className:"".concat(r," ").concat(r,"--").concat(a)},i)};var zt=n(479),Mt={};Mt.styleTagTransform=ie(),Mt.setAttributes=ee(),Mt.insert=J().bind(null,"head"),Mt.domAPI=K(),Mt.insertStyleElement=ne();$()(zt.A,Mt);zt.A&&zt.A.locals&&zt.A.locals;var Dt=function(e){var t=e.columns,n=void 0===t?[]:t,a=e.rows,i=void 0===a?[]:a,r=e.rowKey,o=void 0===r?"id":r,l=e.className,s="rank-math-ai-visibility-data-table",c=[s,void 0===l?"":l].filter(Boolean).join(" "),m="function"==typeof o?o:function(e){return e[o]};return wp.element.createElement("table",{className:c},wp.element.createElement("thead",null,wp.element.createElement("tr",null,n.map(function(e){return wp.element.createElement("th",{key:e.key,className:"".concat(s,"__th"),style:e.width?{width:e.width}:void 0},e.label)}))),wp.element.createElement("tbody",null,i.map(function(e,t){return wp.element.createElement("tr",{key:m(e,t),className:"".concat(s,"__row")},n.map(function(t){var n;return wp.element.createElement("td",{key:t.key,className:"".concat(s,"__td ").concat(s,"__td--").concat(t.key)},t.render?t.render(e):null!==(n=e[t.key])&&void 0!==n?n:"â€”")}))})))};Dt.displayName="DataTable";const Bt=Dt;var Lt=n(6574),Rt={};Rt.styleTagTransform=ie(),Rt.setAttributes=ee(),Rt.insert=J().bind(null,"head"),Rt.domAPI=K(),Rt.insertStyleElement=ne();$()(Lt.A,Rt);Lt.A&&Lt.A.locals&&Lt.A.locals;var qt=function(e){var t=e.onBack,n=e.backLabel,a=e.title,i=e.actions,o=e.className,l=void 0===o?"":o,s="rank-math-ai-visibility-page-topbar";return wp.element.createElement("div",{className:[s,l].filter(Boolean).join(" ")},wp.element.createElement("div",{className:"".concat(s,"__left")},wp.element.createElement(ce,{onClick:t},n||(0,r.__)("â†� Back","seo-by-rank-math")),a&&wp.element.createElement("span",{className:"".concat(s,"__title")},a)),i&&wp.element.createElement("div",{className:"".concat(s,"__actions")},i))};qt.displayName="PageTopbar";const Ft=qt;var Gt=n(7482),Vt={};Vt.styleTagTransform=ie(),Vt.setAttributes=ee(),Vt.insert=J().bind(null,"head"),Vt.domAPI=K(),Vt.insertStyleElement=ne();$()(Gt.A,Vt);Gt.A&&Gt.A.locals&&Gt.A.locals;var Ut={error:{icon:"dashicons-warning",label:(0,r.__)("Error","seo-by-rank-math"),tooltip:(0,r.__)("Last analysis failed. It will be retried automatically.","seo-by-rank-math")},running:{icon:"dashicons-update",label:(0,r.__)("Running","seo-by-rank-math"),tooltip:(0,r.__)("Analysis in progress â€” data will appear in approximately 10 minutes.","seo-by-rank-math")},pending:{icon:"dashicons-update",label:(0,r.__)("Pending","seo-by-rank-math"),tooltip:(0,r.__)("Analysis in progress â€” data will appear in approximately 10 minutes.","seo-by-rank-math")}},Ht=function(e){var t=e.variant,n=Ut[t];if(!n)return null;var a="rank-math-ai-visibility-status-icon";return wp.element.createElement(o.Tooltip,{text:n.tooltip},wp.element.createElement("span",{className:"".concat(a," ").concat(a,"--").concat(t)},wp.element.createElement("span",{className:"".concat(a,"__pill")},wp.element.createElement("span",{className:"dashicons ".concat(n.icon)}),wp.element.createElement("span",{className:"".concat(a,"__label")},n.label))))};Ht.displayName="StatusIcon";const Qt=Ht,Wt=(0,s.createElement)(u,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,s.createElement)(d,{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"}));function $t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var i={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},r=a,o="",l=a.indexOf("#");-1!==l&&(r=a.substring(0,l),o=a.substring(l));var s=Object.keys(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join("&"),c=r.includes("?")&&!r.endsWith("?")?"&":"?";return r+c+s+o+n}n.dn($t);var Yt=n(9368),Kt={};Kt.styleTagTransform=ie(),Kt.setAttributes=ee(),Kt.insert=J().bind(null,"head"),Kt.domAPI=K(),Kt.insertStyleElement=ne();$()(Yt.A,Kt);Yt.A&&Yt.A.locals&&Yt.A.locals;function Zt(e){return Zt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Zt(e)}function Jt(e){return function(e){if(Array.isArray(e))return rn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||an(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function en(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Xt(Object(n),!0).forEach(function(t){tn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Zt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Zt(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Zt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||an(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function an(e,t){if(e){if("string"==typeof e)return rn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?rn(e,t):void 0}}function rn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var on={name:"",url:"",description:"",locale:"",interval:"weekly",platforms:["chatgpt"]},ln=["name","url","description"],sn=[{label:(0,r.__)("Weekly","seo-by-rank-math"),value:"weekly",disabled:!1},{label:(0,r.__)("Monthly (Coming Soon)","seo-by-rank-math"),value:"monthly",disabled:!0},{label:(0,r.__)("Daily (Coming Soon)","seo-by-rank-math"),value:"daily",disabled:!0}],cn=[{id:"chatgpt",label:"ChatGPT",enabled:!0},{id:"perplexity",label:"Perplexity",enabled:!1},{id:"google_ai_overview",label:"Google AI Overview",enabled:!1},{id:"gemini",label:"Gemini",enabled:!1},{id:"claude",label:"Claude",enabled:!1}],mn=cn.slice(0,3),dn=cn.slice(3),un=function(){return wp.element.createElement("span",{className:"rank-math-ai-visibility-add-brand-modal__coming-soon"},(0,r.__)("Coming Soon","seo-by-rank-math"))},bn=function(e){var t=e.platform,n=e.checked,a=e.onChange,i=e.disabled,r="rank-math-ai-visibility-add-brand-modal",l=t.enabled,s=["".concat(r,"__platform-row"),l?"":"".concat(r,"__platform-row--disabled")].filter(Boolean).join(" ");return wp.element.createElement("div",{className:s},wp.element.createElement(o.CheckboxControl,{label:t.label,checked:!!l&&n,onChange:l?a:void 0,disabled:!l||i,__nextHasNoMarginBottom:!0}),!l&&wp.element.createElement(un,null))},pn=function(e){var t,n=e.brand,i=void 0===n?null:n,s=e.onSave,c=e.onClose,m=e.isSaving,d=void 0!==m&&m,u=e.apiError,b=void 0===u?null:u,p=e.locales,h=void 0===p?[]:p,f=nn((0,a.useState)(on),2),y=f[0],v=f[1],_=nn((0,a.useState)({}),2),g=_[0],k=_[1],w="rank-math-ai-visibility-add-brand-modal",x={name:(0,a.useRef)(null),url:(0,a.useRef)(null),description:(0,a.useRef)(null)},E=(0,a.useMemo)(function(){return h.reduce(function(e,t){var n=t.value,a=t.label;return e[n]=a,e},{"":(0,r.__)("Select country (optional)","seo-by-rank-math")})},[h]);(0,a.useEffect)(function(){var e,t,n,a,r,o;i?v({id:i.id,name:null!==(e=i.name)&&void 0!==e?e:"",url:null!==(t=i.url)&&void 0!==t?t:"",description:null!==(n=i.description)&&void 0!==n?n:"",locale:null!==(a=i.locale)&&void 0!==a?a:"",interval:null!==(r=i.interval)&&void 0!==r?r:"weekly",platforms:null!==(o=i.platforms)&&void 0!==o?o:["chatgpt"]}):v(on)},[i]);var A=function(e){return function(t){v(function(n){return en(en({},n),{},tn({},e,t))}),k(function(t){if(!t[e])return t;var n=en({},t);return delete n[e],n})}},S=function(e){v(function(t){var n=t.platforms.includes(e);return en(en({},t),{},{platforms:n?t.platforms.filter(function(t){return t!==e}):[].concat(Jt(t.platforms),[e])})})},N=Boolean(i),j=d||0===(null==y||null===(t=y.platforms)||void 0===t?void 0:t.length)||Object.keys(g).length>0;return wp.element.createElement(o.Modal,{onRequestClose:c,className:w,__experimentalHideHeader:!0},wp.element.createElement("div",{className:"".concat(w,"__header")},wp.element.createElement("div",{className:"".concat(w,"__header-text")},wp.element.createElement("h1",{className:"".concat(w,"__title")},N?(0,r.__)("Edit Brand or Product","seo-by-rank-math"):(0,r.__)("Add Brand or Product","seo-by-rank-math")),wp.element.createElement("p",{className:"".concat(w,"__subtitle")},(0,r.__)("Share the basics so we can start tracking this brand or a product.","seo-by-rank-math"),wp.element.createElement("a",{href:$t("ai-visibility","AI Visibility Add Brand Modal"),target:"_blank",rel:"noopener noreferrer"},(0,r.__)("Learn more","seo-by-rank-math")))),wp.element.createElement(ce,{variant:"",onClick:c,disabled:d,className:"".concat(w,"__close")},wp.element.createElement(o.Icon,{icon:Wt,size:24}))),wp.element.createElement("hr",{className:"".concat(w,"__divider")}),wp.element.createElement("div",{className:"".concat(w,"__body")},wp.element.createElement("div",{className:"".concat(w,"__field"),ref:x.name},wp.element.createElement(o.TextControl,{label:(0,r.__)("Brand / Product Name","seo-by-rank-math"),value:y.name,onChange:A("name"),placeholder:(0,r.__)("Enter your brand or product name","seo-by-rank-math"),disabled:d,help:g.name,className:g.name?"".concat(w,"__field--error"):"",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"".concat(w,"__field"),ref:x.url},wp.element.createElement(o.TextControl,{label:(0,r.__)("Brand / Product URL","seo-by-rank-math"),value:y.url,onChange:A("url"),onBlur:function(){var e=y.url.trim();if(e&&!/^https?:\/\//i.test(e)){var t=e.startsWith("//")?"https:"+e:"https://"+e;A("url")(t)}},placeholder:"https://example.com",type:"url",disabled:d,help:g.url,className:g.url?"".concat(w,"__field--error"):"",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"".concat(w,"__field"),ref:x.description},wp.element.createElement(o.TextareaControl,{label:(0,r.__)("How would you describe your brand/product?","seo-by-rank-math"),value:y.description,onChange:A("description"),placeholder:(0,r.__)("Describe what your brand/product does, who it's for, and what makes it unique. This helps AI models identify and accurately represent you.","seo-by-rank-math"),disabled:d,rows:3,help:g.description,className:g.description?"".concat(w,"__field--error"):"",__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"".concat(w,"__field")},wp.element.createElement("span",{className:"".concat(w,"__label")},(0,r.__)("Target Country (Optional)","seo-by-rank-math")),wp.element.createElement(l.SelectWithSearch,{value:y.locale,options:E,onChange:A("locale"),disabled:d})),wp.element.createElement("div",{className:"".concat(w,"__field")},wp.element.createElement(o.SelectControl,{label:(0,r.__)("Frequency of analyses","seo-by-rank-math"),value:y.interval,options:sn,onChange:A("interval"),disabled:d,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"".concat(w,"__field")},wp.element.createElement("span",{className:"".concat(w,"__label")},(0,r.__)("AI Platforms","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(w,"__platforms")},wp.element.createElement("div",{className:"".concat(w,"__platforms-col")},mn.map(function(e){return wp.element.createElement(bn,{key:e.id,platform:e,checked:y.platforms.includes(e.id),onChange:function(){return S(e.id)},disabled:d})})),wp.element.createElement("div",{className:"".concat(w,"__platforms-col")},dn.map(function(e){return wp.element.createElement(bn,{key:e.id,platform:e,checked:y.platforms.includes(e.id),onChange:function(){return S(e.id)},disabled:d})}))))),b&&wp.element.createElement("div",{className:"".concat(w,"__api-error"),role:"alert"},b),wp.element.createElement("div",{className:"".concat(w,"__footer")},wp.element.createElement(ce,{variant:"secondary",onClick:c,disabled:d},(0,r.__)("Cancel","seo-by-rank-math")),wp.element.createElement(ue,{variant:"primary",onClick:function(){var e=function(){var e={};return y.name.trim()||(e.name=(0,r.__)("Brand name is required.","seo-by-rank-math")),y.url.trim()?/^https?:\/\/.+\..+/.test(y.url.trim())||(e.url=(0,r.__)("Please enter a valid URL (must start with https://).","seo-by-rank-math")):e.url=(0,r.__)("Website URL is required.","seo-by-rank-math"),y.description.trim()||(e.description=(0,r.__)("Description is required.","seo-by-rank-math")),k(e),e}();Object.keys(e).length>0?function(e){var t,n=ln.find(function(t){return e[t]}),a=n?null===(t=x[n])||void 0===t?void 0:t.current:null;if(a){a.scrollIntoView({behavior:"smooth",block:"center"});var i=a.querySelector("input, textarea");i&&i.focus({preventScroll:!0})}}(e):s({name:y.name.trim(),url:y.url.trim(),description:y.description.trim(),locale:y.locale,interval:y.interval,platforms:y.platforms})},isLoading:d,loadingLabel:N?(0,r.__)("Savingâ€¦","seo-by-rank-math"):(0,r.__)("Addingâ€¦","seo-by-rank-math"),disabled:j},N?(0,r.__)("Save Changes","seo-by-rank-math"):(0,r.__)("Add","seo-by-rank-math"))))};pn.displayName="AddBrandModal";const hn=pn;var fn=n(9559),yn={};yn.styleTagTransform=ie(),yn.setAttributes=ee(),yn.insert=J().bind(null,"head"),yn.domAPI=K(),yn.insertStyleElement=ne();$()(fn.A,yn);fn.A&&fn.A.locals&&fn.A.locals;var vn=n(1664),_n={};_n.styleTagTransform=ie(),_n.setAttributes=ee(),_n.insert=J().bind(null,"head"),_n.domAPI=K(),_n.insertStyleElement=ne();$()(vn.A,_n);vn.A&&vn.A.locals&&vn.A.locals;var gn=function(){},kn=function(e){var t=e.icon,n=void 0===t?"":t,a=e.title,r=e.className,l=void 0===r?"":r,s=e.isDismissible,c=void 0!==s&&s,m=e.onRequestClose,d=void 0===m?gn:m,u=e.children,b="rank-math-ai-visibility-access-gate-modal";return wp.element.createElement(o.Modal,{onRequestClose:d,className:(0,i.join)((0,i.compact)([b,l])," "),overlayClassName:"rank-math-modal-overlay rank-math-ai-visibility-content-overlay",isDismissible:c,shouldCloseOnEsc:c,shouldCloseOnClickOutside:c,aria:{labelledby:"".concat(b,"-title")},__experimentalHideHeader:!0},wp.element.createElement("div",{className:"".concat(b,"__header")},n&&wp.element.createElement("i",{className:"".concat(b,"__header-icon ").concat(n),"aria-hidden":"true"}),wp.element.createElement("h1",{id:"".concat(b,"-title"),className:"".concat(b,"__title")},a)),wp.element.createElement("div",{className:"".concat(b,"__body")},u))};kn.displayName="AccessGateModal";const wn=kn;var xn=n(5357),En={};En.styleTagTransform=ie(),En.setAttributes=ee(),En.insert=J().bind(null,"head"),En.domAPI=K(),En.insertStyleElement=ne();$()(xn.A,En);xn.A&&xn.A.locals&&xn.A.locals;var An=[(0,r.__)("Track how often AI mentions your brand","seo-by-rank-math"),(0,r.__)("Monitor sentiment across AI search results","seo-by-rank-math"),(0,r.__)("See which pages AI models cite as sources","seo-by-rank-math"),(0,r.__)("Benchmark your AI visibility against competitors","seo-by-rank-math"),(0,r.__)("Spot opportunities to grow your AI-driven traffic","seo-by-rank-math")],Sn=function(e){var t=e.features,n=void 0===t?An:t,a="rank-math-ai-visibility-feature-checklist";return wp.element.createElement("ul",{className:a},n.map(function(e){return wp.element.createElement("li",{key:e,className:"".concat(a,"__item")},wp.element.createElement("i",{className:"".concat(a,"__icon dashicons dashicons-yes-alt"),"aria-hidden":"true"}),wp.element.createElement("span",{className:"".concat(a,"__label")},e))}))};Sn.displayName="FeatureChecklist";const Nn=Sn,jn=(0,s.createElement)(u,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,s.createElement)(d,{d:"m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z"}));var On=function(){var e="rank-math-ai-visibility-gate";return wp.element.createElement(wn,{icon:"dashicons dashicons-lock",title:(0,r.__)("Upgrade to Unlock AI Visibility","seo-by-rank-math"),className:"rank-math-ai-visibility-unlock-modal"},wp.element.createElement("p",{className:"".concat(e,"__intro")},wp.element.createElement("strong",null,(0,r.__)("Your competitors are already tracking their AI presence. You should be too.","seo-by-rank-math"))," ",(0,r.__)("Upgrade to unlock AI Visibility module and see where your brand appears across ChatGPT, and other AI platforms, and take action before you fall further behind.","seo-by-rank-math")),wp.element.createElement(Nn,null),wp.element.createElement("div",{className:"".concat(e,"__actions")},wp.element.createElement(ce,{variant:"primary",className:"".concat(e,"__cta"),href:$t("content-ai-pricing-tables","AI Visibility Upgrade Modal"),target:"_blank",rel:"noreferrer",iconRight:wp.element.createElement(o.Icon,{icon:jn,size:18})},(0,r.__)("Start 15-Day Free Trial","seo-by-rank-math"))),wp.element.createElement("p",{className:"".concat(e,"__footnote")},(0,r.__)("30-Day Money-Back Guarantee","seo-by-rank-math")))};On.displayName="UpgradeToUnlockModal";const Cn=On;function Pn(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return Tn(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(Tn(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,Tn(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,Tn(d,"constructor",c),Tn(c,"constructor",s),s.displayName="GeneratorFunction",Tn(c,i,"GeneratorFunction"),Tn(d),Tn(d,i,"Generator"),Tn(d,a,function(){return this}),Tn(d,"toString",function(){return"[object Generator]"}),(Pn=function(){return{w:r,m:u}})()}function Tn(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}Tn=function(e,t,n,a){function r(t,n){Tn(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},Tn(e,t,n,a)}function In(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function zn(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){In(r,a,i,o,l,"next",e)}function l(e){In(r,a,i,o,l,"throw",e)}o(void 0)})}}function Mn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Dn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Bn="idle",Ln="activating",Rn="success",qn="error";const Fn=function(){var e=Mn((0,a.useState)(Bn),2),t=e[0],n=e[1],i=Mn((0,a.useState)(null),2),o=i[0],l=i[1];return{status:t,error:o,activate:(0,a.useCallback)(zn(Pn().m(function e(){var t,a,i;return Pn().w(function(e){for(;;)switch(e.p=e.n){case 0:return n(Ln),l(null),t=Date.now(),e.p=1,e.n=2,P();case 2:if(!((a=3500-(Date.now()-t))>0)){e.n=3;break}return e.n=3,new Promise(function(e){return setTimeout(e,a)});case 3:n(Rn),e.n=5;break;case 4:e.p=4,i=e.v,n(qn),l((null==i?void 0:i.message)||(0,r.__)("Something went wrong while activating your trial. Please try again.","seo-by-rank-math"));case 5:return e.a(2)}},e,null,[[1,4]])})),[])}};var Gn=n(5367),Vn={};Vn.styleTagTransform=ie(),Vn.setAttributes=ee(),Vn.insert=J().bind(null,"head"),Vn.domAPI=K(),Vn.insertStyleElement=ne();$()(Gn.A,Vn);Gn.A&&Gn.A.locals&&Gn.A.locals;function Un(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Hn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Hn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Hn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Qn=function(){},Wn=[(0,r.__)("Authenticating credentialsâ€¦","seo-by-rank-math"),(0,r.__)("Provisioning AI tracking workspaceâ€¦","seo-by-rank-math"),(0,r.__)("Connecting to AI search modelsâ€¦","seo-by-rank-math")],$n=function(e){var t=e.error,n=e.onActivate,a="rank-math-ai-visibility-gate",i=new Date(Date.now()+1296e6).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"});return wp.element.createElement(wn,{icon:"dashicons dashicons-unlock",title:(0,r.__)("Activate Your AI Visibility Trial","seo-by-rank-math"),className:"rank-math-ai-visibility-trial-modal"},wp.element.createElement("p",{className:"".concat(a,"__intro")},(0,r.sprintf)((0,r.__)("Start your free trial and see exactly where AI mentions your brand. Your %d-day trial gives you full access to track, analyze, and grow your presence, before your competitors do.","seo-by-rank-math"),15)),wp.element.createElement(Nn,null),wp.element.createElement("p",{className:"".concat(a,"__notice")},(0,r.sprintf)((0,r.__)("Your trial begins immediately. Auto-renews on %s unless cancelled.","seo-by-rank-math"),i)),t&&wp.element.createElement("div",{className:"".concat(a,"__error"),role:"alert"},t),wp.element.createElement("div",{className:"".concat(a,"__actions")},wp.element.createElement(ce,{variant:"primary",className:"".concat(a,"__cta"),onClick:n,iconRight:wp.element.createElement(o.Icon,{icon:jn,size:18})},t?(0,r.__)("Retry Activation","seo-by-rank-math"):(0,r.__)("Start 15-Day Free Trial","seo-by-rank-math"))),wp.element.createElement("p",{className:"".concat(a,"__footnote")},(0,r.__)("30-Day Money-Back Guarantee","seo-by-rank-math")))},Yn=function(){var e="rank-math-ai-visibility-activating-modal",t=Un((0,a.useState)(0),2),n=t[0],i=t[1];return(0,a.useEffect)(function(){var e=setInterval(function(){i(function(e){return Math.min(e+1,Wn.length-1)})},1200);return function(){return clearInterval(e)}},[]),wp.element.createElement(o.Modal,{onRequestClose:Qn,className:e,overlayClassName:"rank-math-modal-overlay rank-math-ai-visibility-content-overlay",isDismissible:!1,shouldCloseOnEsc:!1,shouldCloseOnClickOutside:!1,aria:{labelledby:"".concat(e,"-title")},__experimentalHideHeader:!0},wp.element.createElement("div",{className:"".concat(e,"__spinner")},wp.element.createElement(o.Spinner,null)),wp.element.createElement("h1",{id:"".concat(e,"-title"),className:"".concat(e,"__title")},(0,r.__)("Activating Your AI Visibility Trialâ€¦","seo-by-rank-math")),wp.element.createElement("p",{className:"".concat(e,"__subtitle")},(0,r.__)("We're setting up your workspace and connecting AI models. This will take just a moment.","seo-by-rank-math")),wp.element.createElement("ul",{className:"".concat(e,"__steps")},Wn.map(function(t,a){var i=function(e,t){return e<t?"done":e===t?"active":"pending"}(a,n);return wp.element.createElement("li",{key:t,className:"".concat(e,"__step ").concat(e,"__step--").concat(i)},wp.element.createElement("span",{className:"".concat(e,"__step-icon"),"aria-hidden":"true"},"done"===i?wp.element.createElement("i",{className:"rm-icon rm-icon-tick"}):wp.element.createElement("span",{className:"".concat(e,"__step-circle")})),t)})))},Kn=function(){var e="rank-math-ai-visibility-trial-success",t=Un((0,a.useState)(!1),2),n=t[0],i=t[1];return wp.element.createElement(wn,{icon:"dashicons dashicons-yes-alt",title:(0,r.__)("Welcome to AI Visibility","seo-by-rank-math"),className:e},wp.element.createElement("p",{className:"rank-math-ai-visibility-gate__intro"},(0,r.__)("Your 15-day free trial is now active. We've sent a confirmation email with your trial details and next steps.","seo-by-rank-math")),n?wp.element.createElement("div",{className:"".concat(e,"__video ").concat(e,"__video--playing")},wp.element.createElement("iframe",{className:"".concat(e,"__video-iframe"),src:"https://www.youtube.com/embed/aqz-KE-bpKQ?autoplay=1",title:(0,r.__)("Quick Start Guide","seo-by-rank-math"),allow:"autoplay; fullscreen",allowFullScreen:!0})):wp.element.createElement("div",{className:"".concat(e,"__video ").concat(e,"__video--idle"),role:"button",tabIndex:0,onClick:function(){return i(!0)},onKeyDown:function(e){return("Enter"===e.key||" "===e.key)&&i(!0)},"aria-label":(0,r.__)("Play Quick Start Guide","seo-by-rank-math")},wp.element.createElement("i",{className:"".concat(e,"__video-play dashicons dashicons-controls-play"),"aria-hidden":"true"}),wp.element.createElement("span",{className:"".concat(e,"__video-caption")},(0,r.__)("Quick Start Guide","seo-by-rank-math"))),wp.element.createElement("div",{className:"".concat(e,"__links")},wp.element.createElement("a",{href:$t("knowledgebase","AI Visibility Welcome Modal"),target:"_blank",rel:"noreferrer",className:"".concat(e,"__link")},wp.element.createElement("i",{className:"rm-icon rm-icon-book","aria-hidden":"true"}),(0,r.__)("Knowledge Base","seo-by-rank-math")),wp.element.createElement("a",{href:$t("support","AI Visibility Welcome Modal"),target:"_blank",rel:"noreferrer",className:"".concat(e,"__link")},wp.element.createElement("i",{className:"rm-icon rm-icon-support","aria-hidden":"true"}),(0,r.__)("Contact Support","seo-by-rank-math"))),wp.element.createElement("div",{className:"rank-math-ai-visibility-gate__actions"},wp.element.createElement(ce,{variant:"primary",className:"rank-math-ai-visibility-gate__cta",onClick:function(){return window.location.reload()},iconRight:wp.element.createElement(o.Icon,{icon:jn,size:18})},(0,r.__)("Go to Dashboard","seo-by-rank-math"))))},Zn=function(){var e=Fn(),t=e.status,n=e.error,a=e.activate;return Ln===t?wp.element.createElement(Yn,null):Rn===t?wp.element.createElement(Kn,null):wp.element.createElement($n,{error:n,onActivate:a})};Zn.displayName="ActivateTrialModal";const Jn=Zn;var Xn=n(1655),ea={};ea.styleTagTransform=ie(),ea.setAttributes=ee(),ea.insert=J().bind(null,"head"),ea.domAPI=K(),ea.insertStyleElement=ne();$()(Xn.A,ea);Xn.A&&Xn.A.locals&&Xn.A.locals;function ta(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return na(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?na(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function na(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var aa=function(){var e="rank-math-ai-visibility-checkout-iframe",t=ta((0,a.useState)(""),2),n=t[0],i=t[1],l=ta((0,a.useState)(null),2),s=l[0],c=l[1],m=ta((0,a.useState)(!0),2),d=m[0],u=m[1],b=(0,a.useRef)(!1),p=function(){u(!0),c(null),A(S("/checkout-url"),{method:"POST"}).then(function(e){if(null==e||!e.url)throw new Error((null==e?void 0:e.message)||(0,r.__)("Could not start the checkout session. Please try again.","seo-by-rank-math"));i(e.url)}).catch(function(e){return c((null==e?void 0:e.message)||(0,r.__)("Could not start the checkout session. Please try again.","seo-by-rank-math"))}).finally(function(){return u(!1)})};(0,a.useEffect)(function(){b.current||(b.current=!0,p())},[]);return d?wp.element.createElement("div",{className:"".concat(e,"__state")},wp.element.createElement(o.Spinner,null)):s?wp.element.createElement("div",{className:"".concat(e,"__state")},wp.element.createElement("p",{className:"".concat(e,"__error")},s),wp.element.createElement(ce,{variant:"secondary",onClick:function(){b.current=!0,p()}},(0,r.__)("Try Again","seo-by-rank-math"))):wp.element.createElement("iframe",{className:e,src:n,title:(0,r.__)("Upgrade your Content AI plan","seo-by-rank-math")})};aa.displayName="CheckoutIframe";const ia=aa;var ra=n(3771),oa={};oa.styleTagTransform=ie(),oa.setAttributes=ee(),oa.insert=J().bind(null,"head"),oa.domAPI=K(),oa.insertStyleElement=ne();$()(ra.A,oa);ra.A&&ra.A.locals&&ra.A.locals;var la=function(e){var t=e.plan,n=void 0===t?"":t,a=e.isTopTier,l=void 0!==a&&a,s=e.onClose,c=e.children,m=void 0===c?null:c,d="rank-math-ai-visibility-upgrade-plan-modal",u=l?(0,r.__)("You've reached the maximum number of brands available on your plan. Contact support if you need a higher limit.","seo-by-rank-math"):(0,r.sprintf)((0,r.__)("You've reached the brand limit for your current %s plan.","seo-by-rank-math"),(0,i.upperFirst)(n));return wp.element.createElement(o.Modal,{onRequestClose:s,className:d,overlayClassName:"rank-math-modal-overlay rank-math-ai-visibility-content-overlay",aria:{labelledby:"".concat(d,"-title")},__experimentalHideHeader:!0},wp.element.createElement("div",{className:"".concat(d,"__header")},wp.element.createElement("i",{className:"".concat(d,"__header-icon dashicons dashicons-warning"),"aria-hidden":"true"}),wp.element.createElement("div",{className:"".concat(d,"__header-text")},wp.element.createElement("h1",{id:"".concat(d,"-title"),className:"".concat(d,"__title")},(0,r.__)("Upgrade Your Plan","seo-by-rank-math")),wp.element.createElement("p",{className:"".concat(d,"__subtitle")},u)),wp.element.createElement(ce,{variant:"",onClick:s,className:"".concat(d,"__close"),label:(0,r.__)("Close","seo-by-rank-math")},wp.element.createElement(o.Icon,{icon:Wt,size:20}))),wp.element.createElement("div",{className:"".concat(d,"__body")},m||wp.element.createElement(ia,null)),wp.element.createElement("div",{className:"".concat(d,"__footer")},wp.element.createElement("p",{className:"".concat(d,"__guarantee")},(0,r.__)("All plans include a 30-day money-back guarantee.","seo-by-rank-math")),wp.element.createElement(ce,{variant:"link",onClick:s,className:"".concat(d,"__later")},(0,r.__)("I'll do this later","seo-by-rank-math"))))};la.displayName="UpgradePlanModal";const sa=la;var ca=n(8766),ma={};ma.styleTagTransform=ie(),ma.setAttributes=ee(),ma.insert=J().bind(null,"head"),ma.domAPI=K(),ma.insertStyleElement=ne();$()(ca.A,ma);ca.A&&ca.A.locals&&ca.A.locals;var da=function(e){var t=e.searchValue,n=void 0===t?"":t,a=e.onSearchChange,i=void 0===a?function(){}:a,l=e.onAdd,s=void 0===l?function(){}:l,c="rank-math-ai-visibility-brands-toolbar";return wp.element.createElement("div",{className:c},wp.element.createElement(ce,{variant:"primary",onClick:s},(0,r.__)("+ Add Brand / Product","seo-by-rank-math")),wp.element.createElement(o.SearchControl,{className:"".concat(c,"__search"),placeholder:(0,r.__)("Search name or URL","seo-by-rank-math"),value:n,onChange:i,__nextHasNoMarginBottom:!0}))};da.displayName="BrandsTableToolbar";const ua=da;var ba=n(3019),pa={};pa.styleTagTransform=ie(),pa.setAttributes=ee(),pa.insert=J().bind(null,"head"),pa.domAPI=K(),pa.insertStyleElement=ne();$()(ba.A,pa);ba.A&&ba.A.locals&&ba.A.locals;const ha=(0,a.memo)(function(e){var t=e.brands,n=void 0===t?[]:t,o=e.loading,s=void 0!==o&&o,c=e.pagination,m=void 0===c?{}:c,d=e.onView,u=void 0===d?function(){}:d,b=e.onEdit,p=void 0===b?function(){}:b,h=e.onDisable,f=void 0===h?function(){}:h,y=e.onPageChange,v=void 0===y?function(){}:y,_=e.onPerPageChange,g=void 0===_?function(){}:_,k="rank-math-ai-visibility-brands-table",w=(0,a.useMemo)(function(){return[{key:"name",label:(0,r.__)("Brand","seo-by-rank-math"),render:function(e,t){return wp.element.createElement("div",{className:"".concat(k,"__brand-cell")},wp.element.createElement("a",{href:"#",className:"".concat(k,"__brand-name"),onClick:function(e){e.preventDefault(),u(t)}},e),wp.element.createElement("div",{className:"".concat(k,"__brand-link")},wp.element.createElement("a",{className:"".concat(k,"__brand-url"),href:t.url,target:"_blank",rel:"noreferrer"},t.url),t.locale&&wp.element.createElement(Ce,{locale:t.locale})))}},{key:"score",label:(0,r.__)("AI Visibility Score","seo-by-rank-math"),render:function(e){return wp.element.createElement(Ct,{score:null!=e?e:null})}},{key:"rank",label:(0,r.__)("Avg Rank","seo-by-rank-math"),render:function(e){return wp.element.createElement(ke,{rank:e})}},{key:"avg_sentiment",label:(0,r.__)("Avg sentiment","seo-by-rank-math"),render:function(e){return wp.element.createElement(Ae,{score:e})}},{key:"mentions",label:(0,r.__)("Mentions","seo-by-rank-math"),render:function(e){return wp.element.createElement(It,{value:e,variant:"mentions"})}},{key:"citations",label:(0,r.__)("Citations","seo-by-rank-math"),render:function(e){return wp.element.createElement(It,{value:e,variant:"citations"})}},{key:"last_analyzed",label:(0,r.__)("Last analyzed","seo-by-rank-math"),render:function(e,t){var n=D(t);return wp.element.createElement("span",{className:"".concat(k,"__last-analyzed")},e?bt(e):!n&&"-",n&&wp.element.createElement(Qt,{variant:n}))}},{key:"id",label:(0,r.__)("Actions","seo-by-rank-math"),render:function(e,t){return wp.element.createElement(Be,{status:null==t?void 0:t.status,onView:function(){return u(t)},onEdit:function(){return p(t)},onDisable:function(){return f(t)}})}}]},[u,p,f]);return s&&!n.length?wp.element.createElement(l.TableSkeleton,{columns:7,rows:10}):wp.element.createElement("div",{className:k},wp.element.createElement(l.ListTable,{storageKey:"ai-visibility-brands",headers:w,rows:n,currentPage:(0,i.get)(m,"page",1),rowsPerPage:(0,i.get)(m,"perPage",10),totalItems:(0,i.get)(m,"total",n.length),totalPages:(0,i.get)(m,"pages",1),onPageChange:v,onRowsPerPageChange:g,getRowClass:function(e){return"inactive"===(null==e?void 0:e.status)?"is-disabled":""}}))});function fa(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ya(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ya(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ya(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const va=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.skip,r=void 0!==i&&i,o=n.errorMessage,l=void 0===o?"Failed to load.":o,s=n.initialData,c=void 0===s?null:s,m=fa((0,a.useState)(c),2),d=m[0],u=m[1],b=fa((0,a.useState)(!r),2),p=b[0],h=b[1],f=fa((0,a.useState)(null),2),y=f[0],v=f[1];return(0,a.useEffect)(function(){if(!r){var t=!1;return h(!0),v(null),e().then(function(e){t||(u(e),h(!1))}).catch(function(e){t||(v((null==e?void 0:e.message)||l),h(!1))}),function(){t=!0}}h(!1)},t),{data:d,loading:p,error:y,setData:u}};var _a="dashboard",ga=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_a;return(0,y.getQueryArg)(window.location.href,"tab")||e},ka=function(){var e=(0,y.getQueryArg)(window.location.href,"brand");return e?String(e):null},wa=function(){var e=(0,y.addQueryArgs)(window.location.href,{brand:void 0,brand_tab:void 0});window.history.pushState({},"",e)},xa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"overview";return(0,y.getQueryArg)(window.location.href,"brand_tab")||e},Ea=function(e){var t={tab:"reports",brand:void 0,brand_tab:void 0,report_brand:e?String(e):void 0},n=(0,y.addQueryArgs)(window.location.href,t);window.history.pushState({},"",n),window.dispatchEvent(new window.PopStateEvent("popstate"))};const Aa=function(e){var t=e.onBack,n=e.onExport,a=void 0===n?function(){}:n;return wp.element.createElement(Ft,{onBack:t,title:(0,r.__)("Brand detail","seo-by-rank-math"),actions:wp.element.createElement(ce,{variant:"secondary",onClick:a},(0,r.__)("Export Report","seo-by-rank-math"))})},Sa=(0,s.createElement)(u,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,s.createElement)(d,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"}));var Na=n(421),ja={};ja.styleTagTransform=ie(),ja.setAttributes=ee(),ja.insert=J().bind(null,"head"),ja.domAPI=K(),ja.insertStyleElement=ne();$()(Na.A,ja);Na.A&&Na.A.locals&&Na.A.locals;var Oa=function(e){return e?e.startsWith("http")?e:"https://".concat(e):"#"};const Ca=function(e){var t=e.brand,n=e.onEdit,a=void 0===n?function(){}:n,i="rank-math-ai-visibility-brand-header",l="active"===(null==t?void 0:t.status);return wp.element.createElement("div",{className:i},wp.element.createElement("div",{className:"".concat(i,"__card")},wp.element.createElement("div",{className:"".concat(i,"__content")},wp.element.createElement("div",{className:"".concat(i,"__identity")},wp.element.createElement("div",{className:"".concat(i,"__name-row")},wp.element.createElement("h1",{className:"".concat(i,"__name")},t.name),wp.element.createElement(ce,{variant:"secondary",onClick:a,className:"".concat(i,"__edit-btn")},wp.element.createElement("span",{className:"rm-icon rm-icon-edit"}),(0,r.__)("Edit Brand","seo-by-rank-math"))),wp.element.createElement("div",{className:"".concat(i,"__url-row")},wp.element.createElement("a",{className:"".concat(i,"__url"),href:Oa(t.url),target:"_blank",rel:"noreferrer"},t.url),t.locale&&wp.element.createElement(Ce,{locale:t.locale}),wp.element.createElement("a",{className:"".concat(i,"__external"),href:Oa(t.url),target:"_blank",rel:"noreferrer","aria-label":(0,r.__)("Open brand URL","seo-by-rank-math")},wp.element.createElement(o.Icon,{icon:Sa,size:14}))),wp.element.createElement("div",{className:"".concat(i,"__meta-row")},wp.element.createElement("span",{className:"".concat(i,"__status ").concat(i,"__status--").concat(l?"active":"inactive")},l?(0,r.__)("Active","seo-by-rank-math"):(0,r.__)("Inactive","seo-by-rank-math")),t.last_analyzed&&wp.element.createElement("span",{className:"".concat(i,"__last-analysis")},wp.element.createElement("span",{className:"dashicons dashicons-clock"}),(0,r.__)("Last analysis:","seo-by-rank-math")," ",ut(t.last_analyzed)))),t.description&&wp.element.createElement("div",{className:"".concat(i,"__description-panel")},wp.element.createElement("strong",{className:"".concat(i,"__description-label")},(0,r.__)("Description","seo-by-rank-math")),wp.element.createElement("p",{className:"".concat(i,"__description-text")},t.description)))))};var Pa=n(695),Ta={};Ta.styleTagTransform=ie(),Ta.setAttributes=ee(),Ta.insert=J().bind(null,"head"),Ta.domAPI=K(),Ta.insertStyleElement=ne();$()(Pa.A,Ta);Pa.A&&Pa.A.locals&&Pa.A.locals;const Ia=function(e){var t,n,a,o=e.brand,l=e.insights,s=void 0===l?null:l,c=e.loading;if(!o)return null;var m=void 0!==c&&c?"â€¦":"â€”",d=null!==(t=null==s||null===(n=s.competitors)||void 0===n||null===(n=n[0])||void 0===n?void 0:n.name)&&void 0!==t?t:null,u="rank-math-ai-visibility-brand-overview";return wp.element.createElement("div",{className:u},wp.element.createElement("div",{className:"".concat(u,"__stats")},wp.element.createElement(he,{className:"".concat(u,"__stat-card ").concat(u,"__stat-card--score"),icon:" rm-icon-ai-visibility",label:(0,r.__)("AI Visibility Score","seo-by-rank-math"),value:null!==(null==s?void 0:s.score)&&void 0!==(null==s?void 0:s.score)?"".concat(s.score,"/100"):m,tooltip:(0,r.__)("AI Visibility Score for this brand across AI platforms.","seo-by-rank-math"),analysis:null==s?void 0:s.analysis}),wp.element.createElement(he,{className:"".concat(u,"__stat-card ").concat(u,"__stat-card--mentions"),icon:" rm-icon-comments",label:(0,r.__)("Recent Mentions","seo-by-rank-math"),value:null!==(a=null==s?void 0:s.mentions)&&void 0!==a?a:m,tooltip:(0,r.__)("Total brand mentions across AI-generated content.","seo-by-rank-math"),analysis:null==s?void 0:s.analysis}),wp.element.createElement(he,{className:"".concat(u,"__stat-card ").concat(u,"__stat-card--sentiment"),icon:"smiley",label:(0,r.__)("Avg Sentiments","seo-by-rank-math"),value:null!==(null==s?void 0:s.avg_sentiment)&&void 0!==(null==s?void 0:s.avg_sentiment)?"".concat((0,i.round)(s.avg_sentiment),"%"):m,tooltip:(0,r.__)("Average sentiment score across all AI mentions of this brand.","seo-by-rank-math"),analysis:null==s?void 0:s.analysis}),wp.element.createElement(he,{className:"".concat(u,"__stat-card ").concat(u,"__stat-card--competitor"),icon:"awards",label:(0,r.__)("Top Competitor","seo-by-rank-math"),value:d||m,tooltip:(0,r.__)("The competitor brand with the highest share of voice in AI mentions.","seo-by-rank-math"),analysis:null==s?void 0:s.analysis})))};var za=n(5607),Ma={};Ma.styleTagTransform=ie(),Ma.setAttributes=ee(),Ma.insert=J().bind(null,"head"),Ma.domAPI=K(),Ma.insertStyleElement=ne();$()(za.A,Ma);za.A&&za.A.locals&&za.A.locals;function Da(e){return Da="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Da(e)}function Ba(e){return function(e){if(Array.isArray(e))return Wa(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Qa(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function La(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Ra(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?La(Object(n),!0).forEach(function(t){qa(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):La(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function qa(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Da(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Da(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Da(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Fa(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return Ga(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(Ga(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,Ga(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,Ga(d,"constructor",c),Ga(c,"constructor",s),s.displayName="GeneratorFunction",Ga(c,i,"GeneratorFunction"),Ga(d),Ga(d,i,"Generator"),Ga(d,a,function(){return this}),Ga(d,"toString",function(){return"[object Generator]"}),(Fa=function(){return{w:r,m:u}})()}function Ga(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}Ga=function(e,t,n,a){function r(t,n){Ga(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},Ga(e,t,n,a)}function Va(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function Ua(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){Va(r,a,i,o,l,"next",e)}function l(e){Va(r,a,i,o,l,"throw",e)}o(void 0)})}}function Ha(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||Qa(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qa(e,t){if(e){if("string"==typeof e)return Wa(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wa(e,t):void 0}}function Wa(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const $a=function(e){var t=e.brandId,n="rank-math-ai-visibility-queries-table",i=Ha((0,a.useState)([]),2),o=i[0],s=i[1],c=Ha((0,a.useState)([]),2),m=c[0],d=c[1],u=Ha((0,a.useState)(!0),2),b=u[0],p=u[1],h=Ha((0,a.useState)(null),2),f=h[0],y=h[1],v=Ha((0,a.useState)(!1),2),_=v[0],g=v[1],k=Ha((0,a.useState)(!1),2),w=k[0],x=k[1],E=(0,a.useCallback)(Ua(Fa().m(function e(){var n,a;return Fa().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return s([]),p(!1),e.a(2);case 1:return p(!0),e.p=2,e.n=3,I(t);case 3:n=e.v,a=Array.isArray(null==n?void 0:n.queries)?n.queries:[],d(a.map(function(e){return e.id})),s(a),e.n=5;break;case 4:e.p=4,e.v,s([]);case 5:return e.p=5,p(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])})),[t]);(0,a.useEffect)(function(){E()},[E]);var A=(0,a.useCallback)(function(){var e=Ua(Fa().m(function e(n,a){return Fa().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return y(n.id),s(function(e){return Ba(e.map(function(e){return e.id===n.id?Ra(Ra({},e),{},{enabled:a}):e})).sort(function(e,t){return m.indexOf(e.id)-m.indexOf(t.id)})}),e.p=2,e.n=3,z(t,n.id,{enabled:a});case 3:e.n=5;break;case 4:e.p=4,e.v,s(function(e){return Ba(e.map(function(e){return e.id===n.id?Ra(Ra({},e),{},{enabled:n.enabled}):e})).sort(function(e,t){return m.indexOf(e.id)-m.indexOf(t.id)})});case 5:return e.p=5,y(null),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,n){return e.apply(this,arguments)}}(),[t]),S=(0,a.useCallback)(Ua(Fa().m(function e(){var n;return Fa().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t){e.n=1;break}return e.a(2);case 1:return g(!1),x(!0),p(!0),e.p=2,e.n=3,M(t);case 3:n=e.v,s(Array.isArray(null==n?void 0:n.queries)?n.queries:[]),e.n=5;break;case 4:return e.p=4,e.v,e.n=5,E();case 5:return e.p=5,x(!1),p(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])})),[t,E]);return wp.element.createElement("div",{className:n},wp.element.createElement("div",{className:"".concat(n,"__toolbar")},wp.element.createElement(ue,{variant:"secondary",onClick:function(){return o.length>0?g(!0):S()},isLoading:w,loadingLabel:(0,r.__)("Regeneratingâ€¦","seo-by-rank-math"),iconLeft:wp.element.createElement("span",{className:"dashicons dashicons-update","aria-hidden":"true"}),disabled:b},(0,r.__)("Regenerate baseline queries","seo-by-rank-math"))),b&&wp.element.createElement(l.TableSkeleton,{columns:4,rows:5}),!b&&0===o.length&&wp.element.createElement(ve,{heading:(0,r.__)("No queries yet","seo-by-rank-math"),description:(0,r.__)("Regenerate baseline queries to start tracking how AI answers questions about this brand.","seo-by-rank-math")}),!b&&o.length>0&&wp.element.createElement(Bt,{columns:[{key:"text",label:(0,r.__)("Query text","seo-by-rank-math"),width:"56%",render:function(e){return e.text}},{key:"created_at",label:(0,r.__)("Created","seo-by-rank-math"),render:function(e){return bt(e.created_at)}},{key:"updated_at",label:(0,r.__)("Last updated","seo-by-rank-math"),render:function(e){var t;return bt(null!==(t=e.updated_at)&&void 0!==t?t:e.created_at)}},{key:"status",label:(0,r.__)("Status","seo-by-rank-math"),width:"120px",render:function(e){return wp.element.createElement(He,{value:!1!==e.enabled,onChange:function(t){return A(e,t)},isLoading:f===e.id})}}],rows:o,rowKey:"id"}),_&&wp.element.createElement(Fe,{title:(0,r.__)("Regenerate queries?","seo-by-rank-math"),message:(0,r.__)("This will replace all existing baseline queries with new AI-generated ones. Continue?","seo-by-rank-math"),confirmLabel:(0,r.__)("Regenerate","seo-by-rank-math"),isDestructive:!1,onConfirm:S,onCancel:function(){return g(!1)}}))};var Ya=n(6350),Ka={};Ka.styleTagTransform=ie(),Ka.setAttributes=ee(),Ka.insert=J().bind(null,"head"),Ka.domAPI=K(),Ka.insertStyleElement=ne();$()(Ya.A,Ka);Ya.A&&Ya.A.locals&&Ya.A.locals;var Za=function(e){for(var t=["#E60012","#107C10","#1A1A1A","#1B2838","#5260B9","#017CBA","#F59E0B","#42B268"],n=0,a=0;a<(e||"").length;a++)n=(31*n+e.charCodeAt(a))%t.length;return t[n]},Ja=function(e){var t,n,a=e.name;return wp.element.createElement("span",{className:"rank-math-ai-visibility-competitors-table__avatar",style:{backgroundColor:Za(a)},"aria-hidden":"true"},null!==(t=null==a||null===(n=a.charAt(0))||void 0===n?void 0:n.toUpperCase())&&void 0!==t?t:"?")},Xa=function(e){var t,n=e.insights,a=void 0===n?null:n,i=e.loading,o=void 0!==i&&i,s=null!==(t=null==a?void 0:a.competitors)&&void 0!==t?t:[],c="rank-math-ai-visibility-competitors-table";if(o)return wp.element.createElement(l.TableSkeleton,{columns:3,rows:4});if(!s.length)return wp.element.createElement("div",{className:c},wp.element.createElement(ve,{heading:(0,r.__)("No competitors detected yet","seo-by-rank-math"),description:(0,r.__)("Competitors are automatically identified during analysis runs.","seo-by-rank-math")}));var m=[{key:"name",label:(0,r.__)("Competitor","seo-by-rank-math"),width:"50%",render:function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(Ja,{name:e.name}),wp.element.createElement("span",{className:"".concat(c,"__name")},e.name))}},{key:"avg_sentiment",label:(0,r.__)("Avg sentiment","seo-by-rank-math"),render:function(e){return wp.element.createElement(Ae,{score:e.avg_sentiment})}},{key:"mentions",label:(0,r.__)("Mentions","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(It,{value:null!==(t=e.mentions)&&void 0!==t?t:null,variant:"mentions"})}}];return wp.element.createElement("div",{className:c},wp.element.createElement(Bt,{columns:m,rows:s,rowKey:"name"}))};Xa.displayName="CompetitorsTable";const ei=Xa;var ti=n(385),ni={};ni.styleTagTransform=ie(),ni.setAttributes=ee(),ni.insert=J().bind(null,"head"),ni.domAPI=K(),ni.insertStyleElement=ne();$()(ti.A,ni);ti.A&&ti.A.locals&&ti.A.locals;function ai(e){return ai="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ai(e)}function ii(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ri(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ri(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ri(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function oi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function li(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?oi(Object(n),!0).forEach(function(t){si(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):oi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function si(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ai(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=ai(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ai(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ci=function(e){var t=e.insights,n=void 0===t?null:t,i=e.loading,o=void 0!==i&&i,s=(0,a.useMemo)(function(){var e;return(null!==(e=null==n?void 0:n.query_results)&&void 0!==e?e:[]).map(function(e,t){return function(e,t,n){var a,i,r,o,l;return li(li({},e),{},{id:null!==(a=e.query_id)&&void 0!==a?a:t,query:null!==(i=e.query_text)&&void 0!==i?i:"",response:null!==(r=e.response)&&void 0!==r?r:"",created_at:null!==(o=null==n?void 0:n.finished_at)&&void 0!==o?o:null,duration_seconds:null!==(l=null==n?void 0:n.duration_seconds)&&void 0!==l?l:null,status:e.found?"success":"partial",model:null})}(e,t,null==n?void 0:n.analysis)})},[n]),c=ii((0,a.useState)(null),2),m=c[0],d=c[1];(0,a.useEffect)(function(){var e,t;d(null!==(e=null===(t=s[0])||void 0===t?void 0:t.id)&&void 0!==e?e:null)},[s]);var u="rank-math-ai-visibility-run-detail";return o?wp.element.createElement(l.TableSkeleton,{columns:3,rows:4}):s.length?wp.element.createElement("div",{className:u},wp.element.createElement(xt,{entries:s,selectedEntryId:m,onSelectEntry:d})):wp.element.createElement("div",{className:u},wp.element.createElement(ve,{heading:(0,r.__)("No transcripts found","seo-by-rank-math"),description:(0,r.__)("Transcripts will appear here once the first analysis completes.","seo-by-rank-math")}))};ci.displayName="RunDetail";const mi=ci;var di=n(4629),ui={};ui.styleTagTransform=ie(),ui.setAttributes=ee(),ui.insert=J().bind(null,"head"),ui.domAPI=K(),ui.insertStyleElement=ne();$()(di.A,ui);di.A&&di.A.locals&&di.A.locals;function bi(e){return bi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bi(e)}function pi(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return hi(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(hi(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,hi(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,hi(d,"constructor",c),hi(c,"constructor",s),s.displayName="GeneratorFunction",hi(c,i,"GeneratorFunction"),hi(d),hi(d,i,"Generator"),hi(d,a,function(){return this}),hi(d,"toString",function(){return"[object Generator]"}),(pi=function(){return{w:r,m:u}})()}function hi(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}hi=function(e,t,n,a){function r(t,n){hi(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},hi(e,t,n,a)}function fi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function yi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?fi(Object(n),!0).forEach(function(t){vi(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):fi(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function vi(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=bi(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=bi(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==bi(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _i(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function gi(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ki(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ki(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ki(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var wi=[{name:"overview",title:(0,r.__)("Overview","seo-by-rank-math"),view:function(e){var t=e.brand,n=e.insights,a=e.insightsLoading;return wp.element.createElement(Ia,{brand:t,insights:n,loading:a})}},{name:"queries",title:(0,r.__)("Queries","seo-by-rank-math"),view:function(e){var t=e.brand;return wp.element.createElement($a,{brandId:null==t?void 0:t.id})}},{name:"competitors",title:(0,r.__)("Competitors","seo-by-rank-math"),view:function(e){var t=e.insights,n=e.insightsLoading;return wp.element.createElement(ei,{insights:t,loading:n})}},{name:"transcripts",title:(0,r.__)("Raw data / Transcripts","seo-by-rank-math"),view:function(e){var t=e.insights,n=e.insightsLoading;return wp.element.createElement(mi,{insights:t,loading:n})}}];const xi=function(e){var t,n,i=e.brandId,s=e.onBack,c=e.locales,m=void 0===c?[]:c,d=s||wa,u=va(function(){return j(i)},[i],{skip:!i,errorMessage:(0,r.__)("Failed to load brand.","seo-by-rank-math")}),b=u.data,p=u.loading,h=u.error,f=u.setData,v=null!==(t=null==b?void 0:b.brand)&&void 0!==t?t:null,_=va(function(){return T(i)},[i],{skip:!i,errorMessage:(0,r.__)("Failed to load insights.","seo-by-rank-math")}),g=_.data,k=_.loading,w=null!==(n=null==g?void 0:g.insights)&&void 0!==n?n:null,x=gi((0,a.useState)(function(){return xa()}),2),E=x[0],A=x[1],S=gi((0,a.useState)(!1),2),N=S[0],C=S[1],P=gi((0,a.useState)(!1),2),I=P[0],z=P[1],M=gi((0,a.useState)(null),2),D=M[0],B=M[1],L=function(){var e,t=(e=pi().m(function e(t){var n,a,o,l;return pi().w(function(e){for(;;)switch(e.p=e.n){case 0:return z(!0),B(null),e.p=1,e.n=2,O(i,t);case 2:a=e.v,f({brand:null!==(n=null==a?void 0:a.brand)&&void 0!==n?n:yi(yi({},v),t)}),C(!1),e.n=4;break;case 3:e.p=3,l=e.v,B(null!==(o=null==l?void 0:l.message)&&void 0!==o?o:(0,r.__)("Failed to save brand.","seo-by-rank-math"));case 4:return e.p=4,z(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}),function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){_i(r,a,i,o,l,"next",e)}function l(e){_i(r,a,i,o,l,"throw",e)}o(void 0)})});return function(e){return t.apply(this,arguments)}}(),R="rank-math-ai-visibility-brand-detail";return(0,a.useEffect)(function(){var e=function(){return A(xa())};return window.addEventListener("popstate",e),function(){return window.removeEventListener("popstate",e)}},[]),p?wp.element.createElement(l.TableSkeleton,{columns:3,rows:4}):h||!v?wp.element.createElement("div",{className:"".concat(R," ").concat(R,"--error")},wp.element.createElement("p",null,h||(0,r.__)("Brand not found.","seo-by-rank-math")),wp.element.createElement("button",{className:"button",onClick:d},(0,r.__)("â†� Back to Dashboard","seo-by-rank-math"))):wp.element.createElement("div",{className:R},wp.element.createElement(Aa,{onBack:d,onExport:function(){return Ea(null==v?void 0:v.id)}}),wp.element.createElement("div",{className:"".concat(R,"__content")},wp.element.createElement(Ca,{brand:v,onEdit:function(){return C(!0)}}),wp.element.createElement(o.TabPanel,{key:E,className:"rank-math-tabs ".concat(R,"__tabs"),activeClass:"is-active",initialTabName:E,tabs:wi,onSelect:function(e){!function(e){if(xa()!==e){var t=(0,y.addQueryArgs)(window.location.href,{brand_tab:e});window.history.pushState({},"",t)}}(e),A(e)}},function(e){return wp.element.createElement("div",{className:"".concat(R,"__tab ").concat(R,"__tab--").concat(e.name)},(0,a.createElement)(e.view,{brand:v,insights:w,insightsLoading:k}))})),N&&wp.element.createElement(hn,{brand:v,onSave:L,onClose:function(){C(!1),B(null)},isSaving:I,apiError:D,locales:m}))};var Ei=n(9921),Ai={};Ai.styleTagTransform=ie(),Ai.setAttributes=ee(),Ai.insert=J().bind(null,"head"),Ai.domAPI=K(),Ai.insertStyleElement=ne();$()(Ei.A,Ai);Ei.A&&Ei.A.locals&&Ei.A.locals;function Si(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return Ni(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(Ni(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,Ni(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,Ni(d,"constructor",c),Ni(c,"constructor",s),s.displayName="GeneratorFunction",Ni(c,i,"GeneratorFunction"),Ni(d),Ni(d,i,"Generator"),Ni(d,a,function(){return this}),Ni(d,"toString",function(){return"[object Generator]"}),(Si=function(){return{w:r,m:u}})()}function Ni(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}Ni=function(e,t,n,a){function r(t,n){Ni(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},Ni(e,t,n,a)}function ji(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function Oi(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){ji(r,a,i,o,l,"next",e)}function l(e){ji(r,a,i,o,l,"throw",e)}o(void 0)})}}function Ci(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Pi(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Pi(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Ti={starter:1,creator:10,expert:50},Ii=function(e){var t=e.loading,n=e.hasBrands,a=e.raw,r=e.format;return t?"â€”":n?(0,i.isNil)(a)?0:r?r(a):a:null};const zi=function(e){var t=e.locales,n=void 0===t?[]:t,l=e.onBrandCreated,s=void 0===l?function(){}:l,c=Ci((0,a.useState)(ka),2),m=c[0],d=c[1];(0,a.useEffect)(function(){var e=function(){return d(ka())};return window.addEventListener("popstate",e),function(){return window.removeEventListener("popstate",e)}},[]);var u=Q(),h=u.brands,f=u.summary,v=u.loading,_=u.error,g=u.handleSearch,k=u.handleAddBrand,w=u.handleUpdateBrand,x=u.handleDisableBrand,E=u.handleEnableBrand,A=Ci((0,a.useState)(!1),2),S=A[0],N=A[1],O=Ci((0,a.useState)(null),2),C=O[0],P=O[1],T=Ci((0,a.useState)(!1),2),I=T[0],z=T[1],M=Ci((0,a.useState)(null),2),D=M[0],B=M[1],L=Ci((0,a.useState)(null),2),R=L[0],q=L[1],F=Ci((0,a.useState)("delete"),2),G=F[0],V=F[1],U=Ci((0,a.useState)(!1),2),H=U[0],W=U[1],$=Ci((0,a.useState)(null),2),Y=$[0],K=$[1],Z=Ci((0,a.useState)(!1),2),J=Z[0],X=Z[1],ee=Ci((0,a.useState)(""),2),te=ee[0],ne=ee[1],ae=(0,a.useRef)(!0);(0,a.useEffect)(function(){if(!ae.current){var e=setTimeout(function(){g(te.trim())},300);return function(){return clearTimeout(e)}}ae.current=!1},[te,g]);var ie=!!te.trim(),re=!v&&0===h.length&&!ie,oe=function(){q(null),K(null)},le="enable"===G?(0,r.__)("Activate brand?","seo-by-rank-math"):(0,r.__)("Deactivate brand?","seo-by-rank-math"),se=function(e,t){return e?"enable"===t?(0,r.sprintf)((0,r.__)('Resume tracking "%s"? Analysis will run on the next scheduled cycle.',"seo-by-rank-math"),e.name):(0,r.sprintf)((0,r.__)('Stop tracking "%s"? You can re-enable it later.',"seo-by-rank-math"),e.name):""}(R,G),ce=function(){N(!1),P(null),B(null)},me=(0,i.toLower)((0,i.get)(window,"rankMath.aiVisibility.plan","")),de=(0,i.get)(Ti,me,null),ue=function(){null!==de&&h.length>=de?X(!0):(P(null),N(!0))},be=function(){var e=Oi(Si().m(function e(t){var n;return Si().w(function(e){for(;;)switch(e.p=e.n){case 0:if(B(null),z(!0),e.p=1,!C){e.n=3;break}return e.n=2,w(C.id,t);case 2:e.n=5;break;case 3:return e.n=4,k(t);case 4:s((0,r.__)("Brand added! The first analysis is running â€” data will appear in approximately 10 minutes.","seo-by-rank-math"));case 5:ce(),e.n=7;break;case 6:e.p=6,n=e.v,B((null==n?void 0:n.message)||(0,r.__)("Something went wrong. Please try again.","seo-by-rank-math"));case 7:return e.p=7,z(!1),e.f(7);case 8:return e.a(2)}},e,null,[[1,6,7,8]])}));return function(t){return e.apply(this,arguments)}}(),pe=function(){var e=Oi(Si().m(function e(){var t,n;return Si().w(function(e){for(;;)switch(e.p=e.n){case 0:if(R){e.n=1;break}return e.a(2);case 1:if(W(!0),K(null),e.p=2,"disable"!==G){e.n=4;break}return e.n=3,x(R.id);case 3:e.n=5;break;case 4:if("enable"!==G){e.n=5;break}return e.n=5,E(R.id);case 5:oe(),e.n=7;break;case 6:e.p=6,n=e.v,K(null!==(t=null==n?void 0:n.message)&&void 0!==t?t:(0,r.__)("Action failed. Please try again.","seo-by-rank-math"));case 7:return e.p=7,W(!1),e.f(7);case 8:return e.a(2)}},e,null,[[2,6,7,8]])}));return function(){return e.apply(this,arguments)}}();if(m)return wp.element.createElement(xi,{brandId:m,onBack:function(){wa(),d(null)},locales:n});var fe="rank-math-ai-visibility-dashboard";return wp.element.createElement("div",{className:fe},_&&wp.element.createElement(o.Notice,{status:"error",isDismissible:!1},_),wp.element.createElement("div",{className:"".concat(fe,"__stats")},wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--active-brands",icon:" rm-icon rm-icon-ai-visibility",label:(0,r.__)("Global AI Visibility Score","seo-by-rank-math"),value:Ii({loading:v,hasBrands:h.length>0,raw:null==f?void 0:f.ai_visibility_score,format:function(e){return e+"/100"}}),tooltip:(0,r.__)("Average rank score across all tracked brands.","seo-by-rank-math")}),wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--analyses",icon:b,label:(0,r.__)("Analyses in last 24h","seo-by-rank-math"),value:Ii({loading:v,hasBrands:h.length>0,raw:null==f?void 0:f.analyses_last_24h}),tooltip:(0,r.__)("Total analysis runs completed in the past 24 hours.","seo-by-rank-math")}),wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--mentions",icon:"rm-icon rm-icon-comments",label:(0,r.__)("Avg mentions per brand","seo-by-rank-math"),value:Ii({loading:v,hasBrands:h.length>0,raw:null==f?void 0:f.avg_mentions_per_brand}),tooltip:(0,r.__)("Average number of AI-generated mentions across all tracked brands.","seo-by-rank-math")})),re&&wp.element.createElement("div",{className:"".concat(fe,"__empty")},wp.element.createElement(ve,{icon:p,heading:(0,r.__)("No brands or products tracked yet","seo-by-rank-math"),description:(0,r.__)("Add a brand or a specific product to see how you rank against competitors. Monitor your AI visibility, discover where you stand, and uncover opportunities to grow.","seo-by-rank-math"),ctaLabel:(0,r.__)("+ Add Your First Brand","seo-by-rank-math"),onCta:ue})),!re&&wp.element.createElement("div",{className:"".concat(fe,"__table-card")},wp.element.createElement(ua,{searchValue:te,onSearchChange:ne,onAdd:ue}),wp.element.createElement(ha,{brands:h,loading:v,onView:function(e){var t,n;t=e.id,n=(0,y.addQueryArgs)(window.location.href,{brand:t}),window.history.pushState({},"",n),d(e.id)},onEdit:function(){var e=Oi(Si().m(function e(t){var n;return Si().w(function(e){for(;;)switch(e.p=e.n){case 0:return P(t),N(!0),e.p=1,e.n=2,j(t.id);case 2:null!=(n=e.v)&&n.brand&&P(n.brand),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t){return e.apply(this,arguments)}}(),onDisable:function(e){return function(e){q(e),V("inactive"===(null==e?void 0:e.status)?"enable":"disable")}(e)}})),S&&wp.element.createElement(hn,{brand:C,onSave:be,onClose:ce,isSaving:I,apiError:D,locales:n}),J&&wp.element.createElement(sa,{plan:me,isTopTier:"expert"===me,onClose:function(){return X(!1)}}),R&&wp.element.createElement(Fe,{title:le,message:se,confirmLabel:"enable"===G?(0,r.__)("Activate","seo-by-rank-math"):(0,r.__)("Deactivate","seo-by-rank-math"),isDestructive:"disable"===G,isProcessing:H,error:Y,onConfirm:pe,onCancel:oe}))};var Mi=n(834),Di={};Di.styleTagTransform=ie(),Di.setAttributes=ee(),Di.insert=J().bind(null,"head"),Di.domAPI=K(),Di.insertStyleElement=ne();$()(Mi.A,Di);Mi.A&&Mi.A.locals&&Mi.A.locals;function Bi(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||Ri(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Li(e){return function(e){if(Array.isArray(e))return qi(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Ri(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ri(e,t){if(e){if("string"==typeof e)return qi(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qi(e,t):void 0}}function qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Fi=[{label:(0,r.__)("All Statuses","seo-by-rank-math"),value:""},{label:(0,r.__)("Done","seo-by-rank-math"),value:"done"},{label:(0,r.__)("Running","seo-by-rank-math"),value:"running"},{label:(0,r.__)("Error","seo-by-rank-math"),value:"error"}],Gi=function(e){var t=e.filters,n=e.onFilterChange,i=e.onClearFilters,l=e.brandOptions,s=void 0===l?[]:l,c="rank-math-ai-visibility-analyses-filter-bar",m=(0,a.useMemo)(function(){return[{label:(0,r.__)("All Brands","seo-by-rank-math"),value:""}].concat(Li(s))},[s]),d=t.brandIds&&t.brandIds[0]?String(t.brandIds[0]):"",u=Bi((0,a.useState)(t.search||""),2),b=u[0],p=u[1];(0,a.useEffect)(function(){p(t.search||"")},[t.search]),(0,a.useEffect)(function(){var e=setTimeout(function(){n({search:b})},300);return function(){return clearTimeout(e)}},[b,n]);var h=""!==d||""!==t.status||""!==(t.search||"")||""!==(t.dateFrom||"")||""!==(t.dateTo||"");return wp.element.createElement("div",{className:c},wp.element.createElement(o.SelectControl,{className:"".concat(c,"__brand"),value:d,options:m,onChange:function(e){return n({brandIds:e?[e]:[]})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(o.SelectControl,{className:"".concat(c,"__status"),value:t.status,options:Fi,onChange:function(e){return n({status:e})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(o.SearchControl,{className:"".concat(c,"__search"),placeholder:(0,r.__)("Search","seo-by-rank-math"),"aria-label":(0,r.__)("Search runs","seo-by-rank-math"),value:b,onChange:function(e){return p(e)},__nextHasNoMarginBottom:!0}),h&&wp.element.createElement(o.Button,{className:"".concat(c,"__clear"),variant:"link",isDestructive:!0,onClick:i},(0,r.__)("Clear filters","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(c,"__dates")},wp.element.createElement("div",{className:"".concat(c,"__date-wrap")},wp.element.createElement(mt,{value:t.dateFrom,onChange:function(e){return n({dateFrom:e.target.value})},ariaLabel:(0,r.__)("From date","seo-by-rank-math"),className:"".concat(c,"__date-input")})),wp.element.createElement("span",{className:"".concat(c,"__date-sep")},"-"),wp.element.createElement("div",{className:"".concat(c,"__date-wrap")},wp.element.createElement(mt,{value:t.dateTo,onChange:function(e){return n({dateTo:e.target.value})},ariaLabel:(0,r.__)("To date","seo-by-rank-math"),className:"".concat(c,"__date-input")}))))};Gi.displayName="AnalysesFilterBar";const Vi=Gi;var Ui=n(5517),Hi={};Hi.styleTagTransform=ie(),Hi.setAttributes=ee(),Hi.insert=J().bind(null,"head"),Hi.domAPI=K(),Hi.insertStyleElement=ne();$()(Ui.A,Hi);Ui.A&&Ui.A.locals&&Ui.A.locals;const Qi=(0,a.memo)(function(e){var t=e.items,n=void 0===t?[]:t,o=e.loading,s=void 0!==o&&o,c=e.pagination,m=void 0===c?{}:c,d=e.onViewDetail,u=void 0===d?function(){}:d,b=e.onPageChange,p=void 0===b?function(){}:b,h=e.onPerPageChange,f=void 0===h?function(){}:h,y=(0,a.useMemo)(function(){return[{key:"brand_name",label:(0,r.__)("Brand","seo-by-rank-math")},{key:"started_at",label:(0,r.__)("Last analyzed","seo-by-rank-math"),render:function(e,t){var n="error"===t.status||"running"===t.status;return wp.element.createElement("span",{className:"rank-math-ai-visibility-analyses-table__time-cell"},e?wp.element.createElement(Nt,{value:e}):!n&&"âˆ’",n&&wp.element.createElement(Qt,{variant:t.status}))}},{key:"id",label:(0,r.__)("Action","seo-by-rank-math"),render:function(e,t){return t.started_at?wp.element.createElement(ce,{className:"rank-math-ai-visibility-view-transcript",iconLeft:wp.element.createElement("span",{className:"rm-icon-eye"}),onClick:function(){return u(t)}},(0,r.__)("View Run Detail","seo-by-rank-math")):null}}]},[u]);return s&&!n.length?wp.element.createElement(l.TableSkeleton,{columns:3,rows:10}):wp.element.createElement(l.ListTable,{storageKey:"ai-visibility-analyses",headers:y,rows:n,currentPage:(0,i.get)(m,"page",1),rowsPerPage:(0,i.get)(m,"perPage",10),totalItems:(0,i.get)(m,"total",n.length),totalPages:(0,i.get)(m,"pages",1),onPageChange:p,onRowsPerPageChange:f})});var Wi=n(4373),$i={};$i.styleTagTransform=ie(),$i.setAttributes=ee(),$i.insert=J().bind(null,"head"),$i.domAPI=K(),$i.insertStyleElement=ne();$()(Wi.A,$i);Wi.A&&Wi.A.locals&&Wi.A.locals;function Yi(e){return Yi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Yi(e)}function Ki(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Zi(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Zi(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function Ji(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Xi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ji(Object(n),!0).forEach(function(t){er(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ji(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function er(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Yi(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=Yi(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Yi(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var tr=function(e){var t,n,i,s,c,m,d,u,b=e.row,p=e.onBack,h="rank-math-ai-visibility-analysis-run-detail",f=va(function(){return T(b.id)},[null==b?void 0:b.id],{skip:!(null!=b&&b.id),errorMessage:(0,r.__)("Failed to load run detail.","seo-by-rank-math")}),y=f.data,v=f.loading,_=f.error,g=null!==(t=null==y?void 0:y.insights)&&void 0!==t?t:null,k=Ki((0,a.useState)(null),2),w=k[0],x=k[1],E=(null!==(n=null==g?void 0:g.query_results)&&void 0!==n?n:[]).map(function(e,t){return function(e,t,n){var a,i,r,o,l;return Xi(Xi({},e),{},{id:null!==(a=e.query_id)&&void 0!==a?a:t,query:null!==(i=e.query_text)&&void 0!==i?i:"",response:null!==(r=e.response)&&void 0!==r?r:"",created_at:null!==(o=null==n?void 0:n.finished_at)&&void 0!==o?o:null,duration_seconds:null!==(l=null==n?void 0:n.duration_seconds)&&void 0!==l?l:null,model:null})}(e,t,null==g?void 0:g.analysis)}),A=null!==(i=null==g||null===(s=g.analysis)||void 0===s?void 0:s.duration_seconds)&&void 0!==i?i:0,S=A?"".concat(A,"s"):"â€”",N=null!==(c=null==b?void 0:b.started_at)&&void 0!==c?c:null==g||null===(m=g.analysis)||void 0===m?void 0:m.started_at;return wp.element.createElement("div",{className:h},wp.element.createElement(Ft,{onBack:p,title:(0,r.__)("Analysis Run Detail","seo-by-rank-math"),actions:wp.element.createElement(ce,{variant:"secondary",onClick:function(){return Ea(b.id)}},(0,r.__)("Export Report","seo-by-rank-math"))}),wp.element.createElement("div",{className:"".concat(h,"__content")},wp.element.createElement("div",{className:"".concat(h,"__stat-cards")},wp.element.createElement(he,{compact:!0,icon:" rm-icon-target",label:(0,r.__)("Target Brand","seo-by-rank-math"),value:(null==b?void 0:b.brand_name)||"â€”",className:"rank-math-ai-visibility-stat-card--target-brand",tooltip:(0,r.__)("The brand this analysis run is for.","seo-by-rank-math"),analysis:null==g?void 0:g.analysis}),wp.element.createElement(he,{compact:!0,icon:"clock",label:(0,r.__)("Duration & Timing","seo-by-rank-math"),value:S,sub:(d=N,u=dt(d),u?u.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"â€”"),className:"rank-math-ai-visibility-stat-card--duration-timing",tooltip:(0,r.__)("Total duration of all queries in this run, and the date it was started.","seo-by-rank-math"),analysis:null==g?void 0:g.analysis})),_&&wp.element.createElement(o.Notice,{status:"error",isDismissible:!1},_),v?wp.element.createElement(l.TableSkeleton,{columns:3,rows:3}):wp.element.createElement("div",{className:"".concat(h,"__table")},wp.element.createElement("div",{className:"".concat(h,"__table-row ").concat(h,"__table-row--header")},wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--query")},(0,r.__)("Query text","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--sentiment")},(0,r.__)("Sentiment","seo-by-rank-math")),wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--action")},(0,r.__)("Action","seo-by-rank-math"))),0===E.length?wp.element.createElement(ve,{heading:(0,r.__)("No queries found","seo-by-rank-math"),description:(0,r.__)("No queries were recorded for this analysis run.","seo-by-rank-math")}):E.map(function(e){var t,n,a;return wp.element.createElement("div",{key:e.id,className:"".concat(h,"__table-row")},wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--query")},e.query||"â€”"),wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--sentiment")},null!==(null!==(t=e.avg_sentiment)&&void 0!==t?t:e.sentiment)&&void 0!==(null!==(n=e.avg_sentiment)&&void 0!==n?n:e.sentiment)?wp.element.createElement(Ae,{score:null!==(a=e.avg_sentiment)&&void 0!==a?a:e.sentiment}):wp.element.createElement(o.Tooltip,{text:!1===e.found?(0,r.__)("Sentiment unavailable - this brand was not detected in the AI response for this query.","seo-by-rank-math"):(0,r.__)("Sentiment data is not available for this query.","seo-by-rank-math")},wp.element.createElement("span",null,wp.element.createElement(Ae,{score:null})))),wp.element.createElement("div",{className:"".concat(h,"__col ").concat(h,"__col--action")},wp.element.createElement(ce,{variant:"secondary",iconLeft:wp.element.createElement("span",{className:"rm-icon-eye"}),onClick:function(){return x(e)},className:"rank-math-ai-visibility-view-transcript"},(0,r.__)("View Transcript","seo-by-rank-math"))))})),w&&wp.element.createElement(at,{entry:w,onClose:function(){return x(null)}})))};tr.displayName="AnalysisRunDetail";const nr=tr;var ar=n(3111),ir={};ir.styleTagTransform=ie(),ir.setAttributes=ee(),ir.insert=J().bind(null,"head"),ir.domAPI=K(),ir.insertStyleElement=ne();$()(ar.A,ir);ar.A&&ar.A.locals&&ar.A.locals;function rr(e){return rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},rr(e)}function or(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?or(Object(n),!0).forEach(function(t){sr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):or(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=rr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=rr(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==rr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function cr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return mr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var dr={brandIds:[],status:"",search:"",dateFrom:"",dateTo:""},ur=function(e){var t=D(e);return{id:e.id,brand_id:e.id,brand_name:e.name,started_at:e.last_analyzed,status:null!=t?t:e.last_analyzed?"done":"none"}};const br=function(){var e=Q(),t=e.brands,n=e.loading,i=e.error,l=cr((0,a.useState)(dr),2),s=l[0],c=l[1],m=cr((0,a.useState)({page:1,perPage:10}),2),d=m[0],u=m[1],b=cr((0,a.useState)(null),2),p=b[0],h=b[1],f=(0,a.useMemo)(function(){return t.map(function(e){return{label:e.name,value:e.id}})},[t]),v=(0,a.useMemo)(function(){return t.map(ur).filter(function(e){if(s.search&&!e.brand_name.toLowerCase().includes(s.search.toLowerCase()))return!1;if(s.status&&e.status!==s.status)return!1;if(s.brandIds.length&&!s.brandIds.includes(e.brand_id))return!1;var t=e.started_at?e.started_at.slice(0,10):"";return!(s.dateFrom&&(!t||t<s.dateFrom))&&!(s.dateTo&&(!t||t>s.dateTo))})},[t,s]),_=v.length,g=Math.max(1,Math.ceil(_/d.perPage)),k=(0,a.useMemo)(function(){var e=(d.page-1)*d.perPage;return v.slice(e,e+d.perPage)},[v,d]),w=(0,a.useCallback)(function(e){c(function(t){return lr(lr({},t),e)}),u(function(e){return lr(lr({},e),{},{page:1})})},[]),x=(0,a.useCallback)(function(){c(dr),u(function(e){return lr(lr({},e),{},{page:1})})},[]);if((0,a.useEffect)(function(){!function(e,t){var n={aiv_brands:e.brandIds.length?e.brandIds.join(","):void 0,aiv_status:e.status||void 0,aiv_search:e.search||void 0,aiv_from:e.dateFrom||void 0,aiv_to:e.dateTo||void 0,aiv_page:t.page>1?t.page:void 0,aiv_per:10!==t.perPage?t.perPage:void 0},a=(0,y.addQueryArgs)(window.location.href,n);window.history.replaceState({},"",a)}(s,d)},[s,d]),p)return wp.element.createElement(nr,{row:p,onBack:function(){return h(null)}});var E="rank-math-ai-visibility-analyses";return wp.element.createElement("div",{className:E},wp.element.createElement(Ie,{title:(0,r.__)("Analyses & Transcripts","seo-by-rank-math"),subtitle:(0,r.__)("Global view of all runs with per-query detail.","seo-by-rank-math")}),i&&wp.element.createElement(o.Notice,{status:"error",isDismissible:!1},i),wp.element.createElement("div",{className:"".concat(E,"__card")},wp.element.createElement(Vi,{filters:s,onFilterChange:w,onClearFilters:x,brandOptions:f}),wp.element.createElement(Qi,{items:k,loading:n,pagination:lr(lr({},d),{},{total:_,pages:g}),onViewDetail:function(e){return h(e)},onPageChange:function(e){return u(function(t){return lr(lr({},t),{},{page:Math.max(1,e)})})},onPerPageChange:function(e){return u({page:1,perPage:Math.max(1,e)})}})))};const pr=function(e,t){var n=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),a=URL.createObjectURL(n),i=document.createElement("a");i.href=a,i.download=t,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)};var hr=n(7377),fr={};fr.styleTagTransform=ie(),fr.setAttributes=ee(),fr.insert=J().bind(null,"head"),fr.domAPI=K(),fr.insertStyleElement=ne();$()(hr.A,fr);hr.A&&hr.A.locals&&hr.A.locals;function yr(e){return yr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yr(e)}function vr(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof l?a:l,c=Object.create(s.prototype);return _r(c,"_invoke",function(n,a,i){var r,l,s,c=0,m=i||[],d=!1,u={p:0,n:0,v:e,a:b,f:b.bind(e,4),d:function(t,n){return r=t,l=0,s=e,u.n=n,o}};function b(n,a){for(l=n,s=a,t=0;!d&&c&&!i&&t<m.length;t++){var i,r=m[t],b=u.p,p=r[2];n>3?(i=p===a)&&(s=r[(l=r[4])?5:(l=3,3)],r[4]=r[5]=e):r[0]<=b&&((i=n<2&&b<r[1])?(l=0,u.v=a,u.n=r[1]):b<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,u.n=p,l=0))}if(i||n>1)return o;throw d=!0,a}return function(i,m,p){if(c>1)throw TypeError("Generator is already running");for(d&&1===m&&b(m,p),l=m,s=p;(t=l<2?e:s)||!d;){r||(l?l<3?(l>1&&(u.n=-1),b(l,s)):u.n=s:u.v=s);try{if(c=2,r){if(l||(i="next"),t=r[i]){if(!(t=t.call(r,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,l<2&&(l=0)}else 1===l&&(t=r.return)&&t.call(r),l<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),l=1);r=e}else if((t=(d=u.n<0)?s:n.call(a,u))!==o)break}catch(t){r=e,l=1,s=t}finally{c=1}}return{value:t,done:d}}}(n,i,r),!0),c}var o={};function l(){}function s(){}function c(){}t=Object.getPrototypeOf;var m=[][a]?t(t([][a]())):(_r(t={},a,function(){return this}),t),d=c.prototype=l.prototype=Object.create(m);function u(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,_r(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=c,_r(d,"constructor",c),_r(c,"constructor",s),s.displayName="GeneratorFunction",_r(c,i,"GeneratorFunction"),_r(d),_r(d,i,"Generator"),_r(d,a,function(){return this}),_r(d,"toString",function(){return"[object Generator]"}),(vr=function(){return{w:r,m:u}})()}function _r(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_r=function(e,t,n,a){function r(t,n){_r(e,t,function(e){return this._invoke(t,n,e)})}t?i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},_r(e,t,n,a)}function gr(e,t,n,a,i,r,o){try{var l=e[r](o),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,i)}function kr(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var r=e.apply(t,n);function o(e){gr(r,a,i,o,l,"next",e)}function l(e){gr(r,a,i,o,l,"throw",e)}o(void 0)})}}function wr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function xr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wr(Object(n),!0).forEach(function(t){Er(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Er(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=yr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=yr(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==yr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ar(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||Nr(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Sr(e){return function(e){if(Array.isArray(e))return jr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Nr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Nr(e,t){if(e){if("string"==typeof e)return jr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jr(e,t):void 0}}function jr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Or=function(e){var t=e.icon,n=e.label,a=e.value,i=e.iconBg,r=e.iconColor,o=e.tooltip,s=e.className,c="rank-math-ai-visibility-reports";return wp.element.createElement("div",{className:"".concat(c,"__stat-card").concat(s?" ".concat(s):"")},wp.element.createElement("div",{className:"".concat(c,"__stat-icon"),style:{background:i}},wp.element.createElement("span",{className:"dashicons dashicons-".concat(t),style:{color:r},"aria-hidden":"true"})),wp.element.createElement("div",{className:"".concat(c,"__stat-body")},wp.element.createElement("span",{className:"".concat(c,"__stat-label")},n,wp.element.createElement(l.HelpTooltip,{text:o})),wp.element.createElement("span",{className:"".concat(c,"__stat-value").concat(null==a?" ".concat(c,"__stat-value--na"):"")},null!=a?a:"N/A")))},Cr=function(){var e,t,n,s,c="rank-math-ai-visibility-reports",m=Q(),d=m.brands,u=m.summary,b=(0,r.__)("Select Brand","seo-by-rank-math"),p=(0,a.useMemo)(function(){return[{label:b,value:""}].concat(Sr(d.map(function(e){return{label:e.name,value:String(e.id)}})))},[d]),h=Ar((0,a.useState)(function(){return{brandId:(e=(0,y.getQueryArg)(window.location.href,"report_brand"),e?String(e):"")};var e}),2),f=h[0],v=h[1],_=Ar((0,a.useState)(null),2),g=_[0],k=_[1],w=Ar((0,a.useState)(null),2),x=w[0],E=w[1],A=Ar((0,a.useState)(!1),2),S=A[0],N=A[1],j=Ar((0,a.useState)(null),2),O=j[0],C=j[1],P=(0,a.useRef)(!1);(0,a.useEffect)(function(){!P.current&&f.brandId&&d.length>0&&(P.current=!0,I())},[d]);var I=(0,a.useCallback)(kr(vr().m(function e(){var t,n,a,i,o,l,s,c,m,b,p,h,y,v,_,g,w,x;return vr().w(function(e){for(;;)switch(e.p=e.n){case 0:if(N(!0),C(null),E(d.find(function(e){return String(e.id)===f.brandId})||null),e.p=1,i=(f.brandId?d.filter(function(e){return String(e.id)===f.brandId}):d).filter(function(e){return e.last_analyzed}),o=i.map(function(e){return{id:e.id,score:e.score,rank:e.rank,sentiment:e.avg_sentiment,mentions:e.mentions,citations:e.citations,competitors:[],date:e.last_analyzed}}),!f.brandId||!o.length){e.n=5;break}return e.p=2,e.n=3,T(f.brandId);case 3:b=e.v,o[0].competitors=(null!==(l=null==b||null===(s=b.insights)||void 0===s?void 0:s.competitors)&&void 0!==l?l:[]).map(function(e){return e.name}),o[0].queries=(null!==(c=null==b||null===(m=b.insights)||void 0===m?void 0:m.query_results)&&void 0!==c?c:[]).map(function(e){var t,n;return{query:null!==(t=e.query_text)&&void 0!==t?t:"",response:null!==(n=e.response)&&void 0!==n?n:""}}),e.n=5;break;case 4:e.p=4,e.v;case 5:p=function(e){return o.reduce(function(t,n){var a;return t+(null!==(a=n[e])&&void 0!==a?a:0)},0)},h={summary:{score:f.brandId?null!==(t=null===(n=o[0])||void 0===n?void 0:n.score)&&void 0!==t?t:null:null!==(a=null==u?void 0:u.rank_score)&&void 0!==a?a:null,avg_sentiment:o.length?Math.round(p("sentiment")/o.length):null,total_mentions:p("mentions"),total_citations:p("citations")},details:o},k(h),rankMath.tracking&&(y=rankMath.tracking,v=y.plugin,_=y.email,g=y.language,w=y.path,mixpanel.identify(_),mixpanel.track("AI Visibility Report Generated",{has_data:o.length>0,context:"wp_plugin",brand:"rankmath",application:"rankmath",plugin:v,path:w,language:g})),e.n=7;break;case 6:e.p=6,x=e.v,C((null==x?void 0:x.message)||(0,r.__)("Failed to generate report.","seo-by-rank-math"));case 7:return e.p=7,N(!1),e.f(7);case 8:return e.a(2)}},e,null,[[2,4],[1,6,7,8]])})),[f,d,u]),z=null!==(e=null==g?void 0:g.summary)&&void 0!==e?e:{},M=null!==(t=null==g?void 0:g.details)&&void 0!==t?t:[],D=(0,a.useMemo)(function(){return x?x.name:""},[x]);return wp.element.createElement("div",{className:c},wp.element.createElement(Ie,{title:(0,r.__)("Reports & Export","seo-by-rank-math"),subtitle:(0,r.__)("Export daily aggregates for a brand.","seo-by-rank-math")}),wp.element.createElement("div",{className:"".concat(c,"__layout")},wp.element.createElement("aside",{className:"".concat(c,"__filters")},wp.element.createElement("div",{className:"".concat(c,"__filters-header")},wp.element.createElement("span",{className:"dashicons dashicons-filter","aria-hidden":"true"}),wp.element.createElement("div",null,wp.element.createElement("p",{className:"".concat(c,"__filters-title")},(0,r.__)("Filters","seo-by-rank-math")),wp.element.createElement("p",{className:"".concat(c,"__filters-subtitle")},(0,r.__)("Select brand and format.","seo-by-rank-math")))),wp.element.createElement("div",{className:"".concat(c,"__filters-body")},wp.element.createElement("div",{className:"".concat(c,"__filter-field")},wp.element.createElement(o.SelectControl,{label:(0,r.__)("BRAND","seo-by-rank-math"),value:f.brandId,options:p,onChange:function(e){var t;(t="brandId",function(e){return v(function(n){return xr(xr({},n),{},Er({},t,e))})})(e),e||(k(null),E(null),C(null))},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement(ue,{className:"".concat(c,"__generate-btn"),onClick:I,isLoading:S,loadingLabel:(0,r.__)("Generatingâ€¦","seo-by-rank-math"),disabled:!f.brandId},(0,r.__)("Generate preview","seo-by-rank-math")))),wp.element.createElement("div",{className:"".concat(c,"__preview")},O&&wp.element.createElement(o.Notice,{status:"error",isDismissible:!1},O),S&&wp.element.createElement(l.TableSkeleton,{columns:5,rows:4}),!g&&!S&&!O&&wp.element.createElement("div",{className:"".concat(c,"__empty")},wp.element.createElement("p",null,(0,r.__)('Select a brand, then click "Generate preview".',"seo-by-rank-math"))),g&&wp.element.createElement("div",{className:"".concat(c,"__report-card")},wp.element.createElement("div",{className:"".concat(c,"__preview-header")},wp.element.createElement("div",{className:"".concat(c,"__preview-title-row")},wp.element.createElement("span",{className:"dashicons dashicons-chart-bar","aria-hidden":"true"}),wp.element.createElement("div",null,wp.element.createElement("p",{className:"".concat(c,"__preview-title")},(0,r.__)("Preview","seo-by-rank-math")),D&&wp.element.createElement("p",{className:"".concat(c,"__preview-subtitle")},D))),wp.element.createElement("div",{className:"".concat(c,"__preview-actions")},wp.element.createElement(ce,{variant:"secondary",onClick:function(){if(pr(g,"ai-visibility-report.json"),rankMath.tracking){var e=rankMath.tracking,t=e.plugin,n=e.email,a=e.language,i=e.path;mixpanel.identify(n),mixpanel.track("Button Clicked",{button:"Download AI Visibility Report",context:"wp_plugin",brand:"rankmath",application:"rankmath",plugin:t,path:i,language:a})}}},(0,r.__)("Download JSON","seo-by-rank-math")))),wp.element.createElement("div",{className:"".concat(c,"__report-card-body")},wp.element.createElement("div",{className:"".concat(c,"__stat-cards")},wp.element.createElement(Or,{icon:" rm-icon-ai-visibility",className:"rank-math-ai-visibility-reports-overall-score",label:(0,r.__)("Global AI Visibility Score","seo-by-rank-math"),value:null!==z.score&&void 0!==z.score?"".concat(z.score,"/100"):null,iconBg:"rgba(1,124,186,0.12)",iconColor:"#017CBA",tooltip:(0,r.__)("The overall AI Visibility Score for the selected brand and date range, calculated based on the volume of mentions, sentiment, and other factors.","seo-by-rank-math")}),wp.element.createElement(Or,{icon:"smiley",className:"rank-math-ai-visibility-reports-overall-sentiment",label:(0,r.__)("Avg Sentiment","seo-by-rank-math"),value:null!==z.avg_sentiment&&void 0!==z.avg_sentiment?"".concat((0,i.round)(z.avg_sentiment),"%"):null,iconBg:"rgba(82,96,185,0.12)",iconColor:"#5260B9",tooltip:(0,r.__)("The average sentiment score across all AI mentions for the selected brand and date range. Calculated by analyzing the sentiment of each mention and averaging the scores.","seo-by-rank-math")}),wp.element.createElement(Or,{icon:" rm-icon-comments",className:"rank-math-ai-visibility-reports-total-mentions",label:(0,r.__)("Total Mentions","seo-by-rank-math"),value:null!==(n=z.total_mentions)&&void 0!==n?n:0,iconBg:"rgba(255,171,64,0.15)",iconColor:"#F59E0B",tooltip:(0,r.__)("The total number of AI-generated mentions of the selected brand within the specified date range.","seo-by-rank-math")}),wp.element.createElement(Or,{icon:" rm-icon-misc",className:"rank-math-ai-visibility-reports-total-citations",label:(0,r.__)("Total Citations","seo-by-rank-math"),value:null!==(s=z.total_citations)&&void 0!==s?s:0,iconBg:"rgba(66,178,104,0.15)",iconColor:"#42B268",tooltip:(0,r.__)("The total number of AI-generated mentions that include a link to the selected brandâ€™s website within the specified date range.","seo-by-rank-math")})),M.length>0&&wp.element.createElement(Bt,{columns:[{key:"score",label:(0,r.__)("AI Visibility Score","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(Ct,{score:null!==(t=e.score)&&void 0!==t?t:null})}},{key:"rank",label:(0,r.__)("Avg Rank","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(ke,{rank:null!==(t=e.rank)&&void 0!==t?t:null})}},{key:"sentiment",label:(0,r.__)("Sentiment","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(Ae,{score:null!==(t=e.sentiment)&&void 0!==t?t:null})}},{key:"mentions",label:(0,r.__)("Mentions","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(It,{value:null!==(t=e.mentions)&&void 0!==t?t:null,variant:"mentions"})}},{key:"citations",label:(0,r.__)("Citations","seo-by-rank-math"),render:function(e){var t;return wp.element.createElement(It,{value:null!==(t=e.citations)&&void 0!==t?t:null,variant:"citations"})}},{key:"competitors",label:(0,r.__)("Top competitors","seo-by-rank-math"),render:function(e){return wp.element.createElement("div",{className:"".concat(c,"__competitors")},(e.competitors||[]).map(function(e){return wp.element.createElement("span",{key:e,className:"".concat(c,"__competitor-tag")},e)}))}},{key:"date",label:(0,r.__)("Date","seo-by-rank-math"),render:function(e){return ut(e.date)}}],rows:M,rowKey:function(e,t){var n;return null!==(n=e.id)&&void 0!==n?n:t}}))))))};Cr.displayName="Reports";const Pr=Cr;var Tr=n(3484),Ir={};Ir.styleTagTransform=ie(),Ir.setAttributes=ee(),Ir.insert=J().bind(null,"head"),Ir.domAPI=K(),Ir.insertStyleElement=ne();$()(Tr.A,Ir);Tr.A&&Tr.A.locals&&Tr.A.locals;var zr=function(){},Mr=[{id:"preview-1",name:"Playstation 5",url:"sony.com",locale:"US",score:94,rank:1,avg_sentiment:81,mentions:4,citations:2,last_analyzed:"2026-03-16",status:"active"},{id:"preview-2",name:"iPad",url:"apple.com",locale:"US",score:94,rank:1,avg_sentiment:76,mentions:9,citations:16,last_analyzed:"2026-03-16",status:"active"},{id:"preview-3",name:"MiniCRM",url:"https://minicrm.hu/",locale:"HU",score:null,rank:null,avg_sentiment:null,mentions:null,citations:null,last_analyzed:"2026-03-16",status:"active"},{id:"preview-4",name:"BackWPup",url:"https://backwpup.com",locale:"",score:null,rank:null,avg_sentiment:null,mentions:null,citations:null,last_analyzed:"2026-03-16",status:"active"},{id:"preview-5",name:"GTmetrix",url:"https://gtmetrix.com",locale:"",score:null,rank:null,avg_sentiment:null,mentions:null,citations:null,last_analyzed:"2026-03-16",status:"active"},{id:"preview-6",name:"Rank Math",url:"https://rankmath.com/",locale:"",score:23,rank:3,avg_sentiment:40,mentions:2,citations:1,last_analyzed:"2026-03-16",status:"inactive"},{id:"preview-7",name:"WP Rocket",url:"https://wp-rocket.me",locale:"",score:23,rank:3,avg_sentiment:40,mentions:2,citations:1,last_analyzed:"2026-03-16",status:"active"}],Dr=function(){var e="rank-math-ai-visibility-dashboard";return wp.element.createElement("div",{className:"".concat(e," rank-math-ai-visibility-gated-preview"),"aria-hidden":"true"},wp.element.createElement("div",{className:"".concat(e,"__stats")},wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--active-brands",icon:" rm-icon rm-icon-ai-visibility",label:(0,r.__)("Global AI Visibility Score","seo-by-rank-math"),value:"70/100"}),wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--analyses",icon:b,label:(0,r.__)("Analyses in last 24h","seo-by-rank-math"),value:0}),wp.element.createElement(he,{className:"rank-math-ai-visibility-stat-card--mentions",icon:"rm-icon rm-icon-comments",label:(0,r.__)("Avg mentions per brand","seo-by-rank-math"),value:3.2})),wp.element.createElement("div",{className:"".concat(e,"__table-card")},wp.element.createElement(ua,{searchValue:"",onSearchChange:zr,onAdd:zr}),wp.element.createElement(ha,{brands:Mr,loading:!1,onView:zr,onEdit:zr,onDisable:zr})))};Dr.displayName="GatedPreview";const Br=Dr;var Lr=n(2634),Rr={};Rr.styleTagTransform=ie(),Rr.setAttributes=ee(),Rr.insert=J().bind(null,"head"),Rr.domAPI=K(),Rr.insertStyleElement=ne();$()(Lr.A,Rr);Lr.A&&Lr.A.locals&&Lr.A.locals;const qr=function(e){var t=e.activateUrl,n=void 0===t?"":t,a=e.isSiteUrlValid,i=void 0===a||a;return wp.element.createElement(React.Fragment,null,wp.element.createElement("p",null,(0,r.__)("Connect your account to start tracking your brand's AI visibility.","seo-by-rank-math"),wp.element.createElement("br",null),wp.element.createElement("a",{href:$t("ai-visibility-connect","AI Visibility Connect"),target:"_blank",rel:"noopener noreferrer"},(0,r.__)("Need help? View tutorial â†’","seo-by-rank-math"))),wp.element.createElement(l.InvalidSiteUrlNotice,{isSiteUrlValid:i}),wp.element.createElement("div",{className:"center"},wp.element.createElement(l.Button,{variant:"animate",href:n,className:"button-connect"},(0,r.__)("Connect Now","seo-by-rank-math"))),wp.element.createElement("p",{className:"".concat("rank-math-ai-visibility-account-not-registered","-note")},(0,r.__)("Takes less than 30 seconds to get started","seo-by-rank-math")))};n.dn(qr);const Fr=function(e){var t,n=e.config,a=void 0===n?{}:n,i=a.isSiteConnected,o=a.registerProductNonce,s=null!==(t=a.aiVisibility)&&void 0!==t?t:{},c=s.activateUrl,m=s.isSiteUrlValid,d="rank-math-ai-visibility-account",u=i?"connected":"disconnected",b=i?(0,r.__)("Connected","seo-by-rank-math"):(0,r.__)("Not Connected","seo-by-rank-math");return wp.element.createElement("div",{className:"".concat(d," ").concat("".concat(d,i?"-connected":"-disconnected"))},wp.element.createElement("header",null,wp.element.createElement("h3",null,(0,r.__)("Account Connection Required","seo-by-rank-math")),wp.element.createElement(l.StatusButton,{status:u},b)),wp.element.createElement("div",{className:"".concat(d,"-content")},wp.element.createElement("form",{method:"post"},wp.element.createElement(l.TextControl,{type:"hidden",name:"registration-action",value:i?"deregister":"register"}),wp.element.createElement(l.TextControl,{type:"hidden",name:"_wpnonce",value:o}),wp.element.createElement(qr,{activateUrl:c,isSiteUrlValid:m}))))};function Gr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Vr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Vr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.dn(Fr);const Ur=function(e){var t=e.config,n=void 0===t?{}:t,s=Gr((0,a.useState)(ga(_a)),2),c=s[0],m=s[1],d=Gr((0,a.useState)(null),2),u=d[0],b=d[1],p=function(e){return b(e)};(0,a.useEffect)(function(){var e=function(){m(ga(_a))};return window.addEventListener("popstate",e),function(){return window.removeEventListener("popstate",e)}},[]);var h=rankMath.aiVisibility,f=h.isSiteConnected,v=h.isPro,_=h.plan,g=h.locales,k=void 0===g?[]:g,w=(0,i.includes)(["","free"],(0,i.toLower)(_)),x=f&&w;return wp.element.createElement(React.Fragment,null,wp.element.createElement(l.DashboardHeader,{page:(0,r.__)("AI Visibility","seo-by-rank-math")}),wp.element.createElement("div",{className:"wrap rank-math-wrap rank-math-ai-visibility"},wp.element.createElement(l.TabPanel,{key:c,className:"rank-math-tabs",activeClass:"is-active",initialTabName:c,tabs:[{name:_a,title:(0,r.__)("Dashboard","seo-by-rank-math"),className:"rank-math-ai-visibility-dashboard-tab rank-math-tab",view:zi},{name:"analyses",title:(0,r.__)("Analyses & Transcripts","seo-by-rank-math"),className:"rank-math-ai-visibility-analyses-tab rank-math-tab",view:br},{name:"reports",title:(0,r.__)("Reports & Export","seo-by-rank-math"),className:"rank-math-ai-visibility-reports-tab rank-math-tab",view:Pr}],onSelect:function(e){!function(e){if(ga()!==e){var t=(0,y.addQueryArgs)(window.location.href,{tab:e});window.history.pushState({},"",t)}}(e),m(e)}},function(e){return wp.element.createElement("div",{className:"rank-math-ai-visibility__tab rank-math-ai-visibility__tab--"+e.name},!f&&wp.element.createElement(Fr,{config:n}),f&&(x?wp.element.createElement(Br,null):(0,a.createElement)(e.view,{locales:k,onBrandCreated:p})))}),x&&(v?wp.element.createElement(Jn,null):wp.element.createElement(Cn,null))),u&&wp.element.createElement(o.Snackbar,{onRemove:function(){return b(null)}},u))};var Hr=n(9717),Qr={};Qr.styleTagTransform=ie(),Qr.setAttributes=ee(),Qr.insert=J().bind(null,"head"),Qr.domAPI=K(),Qr.insertStyleElement=ne();$()(Hr.A,Qr);Hr.A&&Hr.A.locals&&Hr.A.locals;document.addEventListener("DOMContentLoaded",function(){var e,t=document.getElementById("rank-math-ai-visibility-container");if(t){var n=null!==(e=window.rankMath)&&void 0!==e?e:{};(0,a.createRoot)(t).render(wp.element.createElement(Ur,{config:n}))}})}();PK     ¢ŠU]Ž�Ü[ô  ô  :  includes/modules/ai-visibility/assets/src/ai-visibility.jsnu „[µü¤        /**
 * AI Visibility â€” entry point.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { createRoot } from '@wordpress/element'

/**
 * Internal dependencies
 */
import App from './App'
import './App.scss'

document.addEventListener( 'DOMContentLoaded', () => {
	const container = document.getElementById( 'rank-math-ai-visibility-container' )
	if ( ! container ) {
		return
	}

	const config = window.rankMath ?? {}
	createRoot( container ).render( <App config={ config } /> )
} )
PK     ¢ŠU],,M%G  G  0  includes/modules/ai-visibility/assets/src/App.jsnu „[µü¤        /**
 * AI Visibility â€” top-level app shell.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { includes, toLower } from 'lodash'

/**
 * WordPress dependencies
 */
import { useState, useEffect, createElement } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { Snackbar } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { DashboardHeader, TabPanel } from '@rank-math/components'
import Dashboard from './Dashboard'
import Analyses from './Analyses'
import Reports from './Reports'
import { DEFAULT_TAB, getActiveTab, setTabInUrl } from './utils/urlState'
import { UpgradeToUnlockModal, ActivateTrialModal } from './shared/Modals'
import GatedPreview from './Dashboard/GatedPreview'
import Connect from './Connect'

/**
 * Build the tabs array consumed by `@rank-math/components` TabPanel.
 *
 * @return {Array<Object>} Tab config objects.
 */
const getTabs = () => [
	{
		name: DEFAULT_TAB,
		title: __( 'Dashboard', 'seo-by-rank-math' ),
		className: 'rank-math-ai-visibility-dashboard-tab rank-math-tab',
		view: Dashboard,
	},
	{
		name: 'analyses',
		title: __( 'Analyses & Transcripts', 'seo-by-rank-math' ),
		className: 'rank-math-ai-visibility-analyses-tab rank-math-tab',
		view: Analyses,
	},
	{
		name: 'reports',
		title: __( 'Reports & Export', 'seo-by-rank-math' ),
		className: 'rank-math-ai-visibility-reports-tab rank-math-tab',
		view: Reports,
	},
]

const App = ( { config = {} } ) => {
	const [ activeTab, setActiveTab ] = useState( getActiveTab( DEFAULT_TAB ) )
	const [ snackbar, setSnackbar ] = useState( null )

	const showSnackbar = ( message ) => setSnackbar( message )
	const dismissSnackbar = () => setSnackbar( null )

	// Sync with browser back/forward â€” pushState does NOT fire popstate.
	useEffect( () => {
		const handlePopState = () => {
			setActiveTab( getActiveTab( DEFAULT_TAB ) )
		}

		window.addEventListener( 'popstate', handlePopState )
		return () => window.removeEventListener( 'popstate', handlePopState )
	}, [] )

	const handleTabSelect = ( tabName ) => {
		setTabInUrl( tabName )
		setActiveTab( tabName )
	}

	const { isSiteConnected, isPro, plan, locales = [] } = rankMath.aiVisibility

	// Access gate â€” Free Content AI plan: PRO users get the trial flow,
	// free plugin users get the upgrade modal.
	const isFreePlan = includes( [ '', 'free' ], toLower( plan ) )
	const isPlanGated = isSiteConnected && isFreePlan

	return (
		<>
			<DashboardHeader page={ __( 'AI Visibility', 'seo-by-rank-math' ) } />
			<div className="wrap rank-math-wrap rank-math-ai-visibility">

				<TabPanel
					key={ activeTab }
					className="rank-math-tabs"
					activeClass="is-active"
					initialTabName={ activeTab }
					tabs={ getTabs() }
					onSelect={ handleTabSelect }
				>
					{ ( tab ) => (
						<div className={ 'rank-math-ai-visibility__tab rank-math-ai-visibility__tab--' + tab.name }>
							{ ! isSiteConnected && <Connect config={ config } /> }
							{ isSiteConnected && (
								isPlanGated ? <GatedPreview /> : createElement( tab.view, { locales, onBrandCreated: showSnackbar } )
							) }
						</div>
					) }
				</TabPanel>

				{ isPlanGated && ( isPro ? <ActivateTrialModal /> : <UpgradeToUnlockModal /> ) }
			</div>

			{ snackbar && (
				<Snackbar
					onRemove={ dismissSnackbar }
				>
					{ snackbar }
				</Snackbar>
			) }
		</>
	)
}

export default App
PK     ¢ŠU]QÔDý
  
  <  includes/modules/ai-visibility/assets/src/Connect/style.scssnu „[µü¤        .rank-math-ai-visibility-account {
    border: 1px solid #E0E0E0;
    border-radius: 4px;

    h3 {
        font-style: normal;
        font-weight: 500;
        font-size: 20px;
        line-height: 26px;
        color: #C64539;
        margin: 0;
    }

    header {
        padding: 19px 28px;
        border-bottom: 1px solid #E0E0E0;
        display: flex;
        align-items: center;
        justify-content: space-between;
    }

    .rank-math-status-button.components-button.is-disconnected {
        background: #C64539;
        font-size: 13px;
        font-weight: 300;
        border-radius: 2px;

        svg {
            width: 10px;
        }
    }

    &-content {
        display: flex;
        padding: 80px;
        align-items: center;
        justify-content: center;
        text-align: center;
        font-weight: 400;
        font-size: 16px;
        line-height: 23px;
        color: #1E1E1E;

        a {
            color: #017CBA;
        }
        
        p {
            margin: 0;
            line-height: 23px;

            &.rank-math-ai-visibility-account-not-registered-note {
                margin-top: 30px;
                font-weight: 500;
                font-size: 12px;
                line-height: 16px;
                color: #757575;
            }
        }
        
        .rank-math-button.components-button.button-animate {
            margin-top: 32px;
            font-size: 22px;
            font-weight: 400;
            line-height: 80px;
            padding: 0 42px;
        }
    }

}PK     ¢ŠU]d¿¯">  >  B  includes/modules/ai-visibility/assets/src/Connect/NotRegistered.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { Button, InvalidSiteUrlNotice } from '@rank-math/components'
import getLink from '@helpers/getLink'

export default ( { activateUrl = '', isSiteUrlValid = true } ) => {
	const ns = 'rank-math-ai-visibility-account-not-registered'

	return (
		<>
			<p>
				{ __(
					'Connect your account to start tracking your brand\'s AI visibility.',
					'seo-by-rank-math'
				) }
				<br />
				<a href={ getLink( 'ai-visibility-connect', 'AI Visibility Connect' ) } target="_blank" rel="noopener noreferrer">
					{ __( 'Need help? View tutorial â†’', 'seo-by-rank-math' ) }
				</a>
			</p>

			<InvalidSiteUrlNotice isSiteUrlValid={ isSiteUrlValid } />

			<div className="center">
				<Button
					variant="animate"
					href={ activateUrl }
					className="button-connect"
				>
					{ __( 'Connect Now', 'seo-by-rank-math' ) }
				</Button>
			</div>

			<p className={ `${ ns }-note` }>{ __( 'Takes less than 30 seconds to get started', 'seo-by-rank-math' ) }</p>
		</>
	)
}
PK     ¢ŠU]©¡@S  S  :  includes/modules/ai-visibility/assets/src/Connect/index.jsnu „[µü¤        /**
 * Wordpress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import './style.scss'
import { StatusButton, TextControl } from '@rank-math/components'
import NotRegistered from './NotRegistered'

export default ( { config = {} } ) => {
	const { isSiteConnected, registerProductNonce } = config
	const { activateUrl, isSiteUrlValid } = config.aiVisibility ?? {}

	const ns = 'rank-math-ai-visibility-account'

	const status = isSiteConnected ? 'connected' : 'disconnected'
	const statusLabel = isSiteConnected
		? __( 'Connected', 'seo-by-rank-math' )
		: __( 'Not Connected', 'seo-by-rank-math' )

	return (
		<div
			className={ `${ ns } ${
				isSiteConnected ? `${ ns }-connected` : `${ ns }-disconnected`
			}` }
		>
			<header>
				<h3>{ __( 'Account Connection Required', 'seo-by-rank-math' ) }</h3>

				<StatusButton status={ status }>{ statusLabel }</StatusButton>
			</header>

			<div className={ `${ ns }-content` }>
				<form method="post">
					<TextControl
						type="hidden"
						name="registration-action"
						value={ isSiteConnected ? 'deregister' : 'register' }
					/>

					<TextControl
						type="hidden"
						name="_wpnonce"
						value={ registerProductNonce }
					/>

					<NotRegistered activateUrl={ activateUrl } isSiteUrlValid={ isSiteUrlValid } />
				</form>
			</div>
		</div>
	)
}
PK     ¢ŠU]¯ÍðD‘  ‘  D  includes/modules/ai-visibility/assets/src/Dashboard/BrandsTable.scssnu „[µü¤        /**
 * BrandsTable â€” brands list table column overrides.
 */

@import '../scss/variables';

.rank-math-ai-visibility-brands-table {
	&__last-analyzed {
		color: #868686;
		display: inline-flex;
		align-items: center;
		gap: 4px;
	}

	tbody .rank-math-table-row .rank-math-table-primary-column a {
		color: #017CBA;
		font-weight: 400;
	}

	&__brand-cell {
		display:        flex;
		flex-direction: column;
		align-items:    flex-start;
		gap:            5px;
	}

	tbody .rank-math-table-row .rank-math-table-primary-column .rank-math-ai-visibility-brands-table__brand-name {
		font-size:   13px;
		font-weight: 600;
		color:       $color-text-primary;
		line-height: 1.4;

		&:hover {
			color: $color-text-primary;
			text-decoration: none;
		}
	}

	&__brand-url {
		font-size:   12px;
		color:       $color-btn-primary;
		line-height: 1.4;
		word-break:  break-all;

		&:hover {
			text-decoration: underline;
		}
	}

	&__brand-link {
		display: inline-flex;
		gap: 4px;
	}

	.rank-math-table {
		&-cell-content {
			font-size: 13px;
		}

		&-header-cell {
			font-size: 14px;
		}

		thead {
			background-color: #FCFCFC;
			
			th {
				color: #1E1E1E;
    			font-size: 14px;

				&:first-child {
					padding-left: 25px;
				}
			}
		}

		tbody {
			tr td:first-child {
				padding-left: 25px;
			}

			.rank-math-table-row {
				&:hover,
				&:nth-child(odd) {
					background: transparent;
				}

				// Disabled (inactive) brand â€” replace all colors with flat gray.
				&.is-disabled {
					// All plain text cells (mentions, citations, date).
					td {
						color: #c4c4c4;
					}

					// Brand name, URL, last-analyzed.
					.rank-math-ai-visibility-brands-table {
						&__brand-name {
							color: #c4c4c4;
						}

						&__brand-url {
							color: #c4c4c4;

							&:hover {
								text-decoration: none;
							}
						}

						&__last-analyzed {
							color: #c4c4c4;
						}
					}

					// Country flag locale code.
					.rank-math-ai-visibility-country-flag__code {
						color: #c4c4c4;
					}

					// Score badge â€” strip variant color, replace with gray.
					.rank-math-ai-visibility-score-badge {
						color: #c4c4c4 !important;
						border-color: #c4c4c4 !important;
						background-color: rgba(196, 196, 196, 0.1) !important;
					}

					// Rank badge â€” strip variant color, replace with gray.
					.rank-math-ai-visibility-rank-badge {
						color: #c4c4c4 !important;
						border-color: #c4c4c4 !important;
						background-color: rgba(196, 196, 196, 0.2) !important;
					}

					// Sentiment badge â€” strip variant color, replace with gray.
					// Also covers the SVG smiley icon via currentColor.
					.rank-math-ai-visibility-sentiment-badge {
						color: #c4c4c4 !important;
						border-color: #c4c4c4 !important;
						background-color: rgba(196, 196, 196, 0.08) !important;

						svg {
							color: #c4c4c4;

							path {
								fill: #c4c4c4 !important;
							}
						}
					}
				}
			}
		}
	}
}
PK     ¢ŠU]C‚BKØ  Ø  C  includes/modules/ai-visibility/assets/src/Dashboard/GatedPreview.jsnu „[µü¤        /**
 * GatedPreview â€” blurred decorative dashboard shown behind access-gate modals.
 * Uses static sample data; no API calls are made.
 *
 * @since 1.0.281
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { trendingUp } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import { StatCard } from '../shared/components'
import BrandsTableToolbar from './BrandsTableToolbar'
import BrandsTable from './BrandsTable'
import './GatedPreview.scss'

const noop = () => {}

// Display-only sample data â€” intentionally untranslated.
const SAMPLE_BRANDS = [
	{ id: 'preview-1', name: 'Playstation 5', url: 'sony.com', locale: 'US', score: 94, rank: 1, avg_sentiment: 81, mentions: 4, citations: 2, last_analyzed: '2026-03-16', status: 'active' },
	{ id: 'preview-2', name: 'iPad', url: 'apple.com', locale: 'US', score: 94, rank: 1, avg_sentiment: 76, mentions: 9, citations: 16, last_analyzed: '2026-03-16', status: 'active' },
	{ id: 'preview-3', name: 'MiniCRM', url: 'https://minicrm.hu/', locale: 'HU', score: null, rank: null, avg_sentiment: null, mentions: null, citations: null, last_analyzed: '2026-03-16', status: 'active' },
	{ id: 'preview-4', name: 'BackWPup', url: 'https://backwpup.com', locale: '', score: null, rank: null, avg_sentiment: null, mentions: null, citations: null, last_analyzed: '2026-03-16', status: 'active' },
	{ id: 'preview-5', name: 'GTmetrix', url: 'https://gtmetrix.com', locale: '', score: null, rank: null, avg_sentiment: null, mentions: null, citations: null, last_analyzed: '2026-03-16', status: 'active' },
	{ id: 'preview-6', name: 'Rank Math', url: 'https://rankmath.com/', locale: '', score: 23, rank: 3, avg_sentiment: 40, mentions: 2, citations: 1, last_analyzed: '2026-03-16', status: 'inactive' },
	{ id: 'preview-7', name: 'WP Rocket', url: 'https://wp-rocket.me', locale: '', score: 23, rank: 3, avg_sentiment: 40, mentions: 2, citations: 1, last_analyzed: '2026-03-16', status: 'active' },
]

// Reuses the Dashboard BEM namespace so Dashboard.scss layout applies.

const GatedPreview = () => {
	const ns = 'rank-math-ai-visibility-dashboard'

	return (
		<div
			className={ `${ ns } rank-math-ai-visibility-gated-preview` }
			aria-hidden="true"
		>
			<div className={ `${ ns }__stats` }>
				<StatCard
					className="rank-math-ai-visibility-stat-card--active-brands"
					icon=" rm-icon rm-icon-ai-visibility"
					label={ __( 'Global AI Visibility Score', 'seo-by-rank-math' ) }
					value="70/100"
				/>
				<StatCard
					className="rank-math-ai-visibility-stat-card--analyses"
					icon={ trendingUp }
					label={ __( 'Analyses in last 24h', 'seo-by-rank-math' ) }
					value={ 0 }
				/>
				<StatCard
					className="rank-math-ai-visibility-stat-card--mentions"
					icon="rm-icon rm-icon-comments"
					label={ __( 'Avg mentions per brand', 'seo-by-rank-math' ) }
					value={ 3.2 }
				/>
			</div>

			<div className={ `${ ns }__table-card` }>
				<BrandsTableToolbar
					searchValue=""
					onSearchChange={ noop }
					onAdd={ noop }
				/>

				<BrandsTable
					brands={ SAMPLE_BRANDS }
					loading={ false }
					onView={ noop }
					onEdit={ noop }
					onDisable={ noop }
				/>
			</div>
		</div>
	)
}

GatedPreview.displayName = 'GatedPreview'

export default GatedPreview
PK     ¢ŠU]ª!²�
  
  B  includes/modules/ai-visibility/assets/src/Dashboard/Dashboard.scssnu „[µü¤        /**
 * Dashboard tab â€” layout styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-dashboard {
	display:        flex;
	flex-direction: column;
	gap:            26px;

	&__error {
		padding:       $space-sm $space-md;
		background:    #fef0f0;
		border:        1px solid $color-trend-down;
		border-radius: $radius-sm;
		color:         $color-trend-down;
		font-size:     14px;
	}

	&__stats {
		display: flex;
		gap:     $card-row-gap;
		margin-top: 16px;

		// On narrow viewports stack cards vertically.
		@media ( max-width: 782px ) {
			flex-direction: column;
		}
	}

	&__empty {
		background:    $color-surface;
		border:        $border-width solid $border-color;
		border-radius: $radius-sm;
	}

	&__table-card {
		background:    #fff;
		border:        1px solid $color-border;
		border-radius: $radius-sm;
		overflow:      hidden;
		position: relative;

		// Toolbar padding inside the card.
		.rank-math-ai-visibility-brands-toolbar {
			padding: 14px 25px;
			border-bottom: 1px solid $color-border;
			gap: 8px;

			&__search.components-base-control {
				width: 260px;
			}
		}

		.rank-math-table-header {
			display: none;
		}

		.rank-math-table-card {
			border:        none;
			border-radius: 0;
			background:    transparent;
			box-shadow:    none;
		}

		// Center the table pagination row.
		.rank-math-table-footer,
		.rank-math-table__pagination {
			display:         flex;
			justify-content: center;
		}

		> svg {
			position: absolute;
			top: 0;
			left: 0;
			z-index: 999;
			opacity: .5;
		}
	}

}
PK     ¢ŠU]Ä<–Çµ  µ  I  includes/modules/ai-visibility/assets/src/Dashboard/BrandsTableToolbar.jsnu „[µü¤        /**
 * BrandsTableToolbar â€” search + add-brand controls above the brands table.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { SearchControl } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { Button } from '../shared/components'
import './BrandsTableToolbar.scss'

/**
 * @param {Object}   props
 * @param {string}   [props.searchValue='']
 * @param {Function} [props.onSearchChange]
 * @param {Function} [props.onAdd]
 * @return {JSX.Element} Rendered component.
 */
const BrandsTableToolbar = ( {
	searchValue = '',
	onSearchChange = () => {},
	onAdd = () => {},
} ) => {
	const ns = 'rank-math-ai-visibility-brands-toolbar'

	return (
		<div className={ ns }>
			<Button
				variant="primary"
				onClick={ onAdd }
			>
				{ __( '+ Add Brand / Product', 'seo-by-rank-math' ) }
			</Button>

			<SearchControl
				className={ `${ ns }__search` }
				placeholder={ __( 'Search name or URL', 'seo-by-rank-math' ) }
				value={ searchValue }
				onChange={ onSearchChange }
				__nextHasNoMarginBottom={ true }
			/>
		</div>
	)
}

BrandsTableToolbar.displayName = 'BrandsTableToolbar'

export default BrandsTableToolbar
PK     ¢ŠU]ìf“£    B  includes/modules/ai-visibility/assets/src/Dashboard/BrandsTable.jsnu „[µü¤        /**
 * BrandsTable â€” brands list table for the Dashboard tab.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { get } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useMemo, memo } from '@wordpress/element'

/**
 * Internal dependencies
 */
import { ListTable as Table, TableSkeleton } from '@rank-math/components'
import { formatLongDate } from '../utils/formatDate'
import { getAnalysisState } from '../utils/analysisState'
import {
	RankBadge,
	SentimentBadge,
	CountryFlag,
	ActionButtons,
	ScoreBadge,
	CountBadge,
	StatusIcon,
} from '../shared/components'
import './BrandsTable.scss'

/**
 * @param {Object}   props
 * @param {Array}    [props.brands=[]]
 * @param {boolean}  [props.loading=false]
 * @param {Object}   [props.pagination={}]   `{ page, perPage, total, pages }`
 * @param {Function} [props.onView]
 * @param {Function} [props.onEdit]
 * @param {Function} [props.onDisable]
 * @param {Function} [props.onPageChange]
 * @param {Function} [props.onPerPageChange]
 * @return {JSX.Element} Rendered component.
 */
const BrandsTable = ( {
	brands = [],
	loading = false,
	pagination = {},
	onView = () => {},
	onEdit = () => {},
	onDisable = () => {},
	onPageChange = () => {},
	onPerPageChange = () => {},
} ) => {
	const ns = 'rank-math-ai-visibility-brands-table'

	const headers = useMemo( () => [
		{
			key: 'name',
			label: __( 'Brand', 'seo-by-rank-math' ),
			render: ( value, row ) => (
				<div className={ `${ ns }__brand-cell` }>
					{ /* eslint-disable-next-line jsx-a11y/anchor-is-valid */ }
					<a href="#" className={ `${ ns }__brand-name` } onClick={ ( event ) => {
						event.preventDefault()
						onView( row )
					} }>
						{ value }
					</a>
					<div className={ `${ ns }__brand-link` }>
						<a
							className={ `${ ns }__brand-url` }
							href={ row.url }
							target="_blank"
							rel="noreferrer"
						>
							{ row.url }
						</a>
						{ row.locale && <CountryFlag locale={ row.locale } /> }
					</div>
				</div>
			),
		},
		{
			key: 'score',
			label: __( 'AI Visibility Score', 'seo-by-rank-math' ),
			render: ( value ) => <ScoreBadge score={ value ?? null } />,
		},
		{
			key: 'rank',
			label: __( 'Avg Rank', 'seo-by-rank-math' ),
			render: ( value ) => <RankBadge rank={ value } />,
		},
		{
			key: 'avg_sentiment',
			label: __( 'Avg sentiment', 'seo-by-rank-math' ),
			render: ( value ) => <SentimentBadge score={ value } />,
		},
		{
			key: 'mentions',
			label: __( 'Mentions', 'seo-by-rank-math' ),
			render: ( value ) => <CountBadge value={ value } variant="mentions" />,
		},
		{
			key: 'citations',
			label: __( 'Citations', 'seo-by-rank-math' ),
			render: ( value ) => <CountBadge value={ value } variant="citations" />,
		},
		{
			key: 'last_analyzed',
			label: __( 'Last analyzed', 'seo-by-rank-math' ),
			render: ( value, row ) => {
				const state = getAnalysisState( row )
				return (
					<span className={ `${ ns }__last-analyzed` }>
						{ value ? formatLongDate( value ) : ( ! state && '-' ) }
						{ state && <StatusIcon variant={ state } /> }
					</span>
				)
			},
		},
		{
			key: 'id',
			label: __( 'Actions', 'seo-by-rank-math' ),
			render: ( _, row ) => (
				<ActionButtons
					status={ row?.status }
					onView={ () => onView( row ) }
					onEdit={ () => onEdit( row ) }
					onDisable={ () => onDisable( row ) }
				/>
			),
		},
	], [ onView, onEdit, onDisable ] )

	if ( loading && ! brands.length ) {
		return <TableSkeleton columns={ 7 } rows={ 10 } />
	}

	return (
		<div className={ ns }>
			<Table
				storageKey="ai-visibility-brands"
				headers={ headers }
				rows={ brands }
				currentPage={ get( pagination, 'page', 1 ) }
				rowsPerPage={ get( pagination, 'perPage', 10 ) }
				totalItems={ get( pagination, 'total', brands.length ) }
				totalPages={ get( pagination, 'pages', 1 ) }
				onPageChange={ onPageChange }
				onRowsPerPageChange={ onPerPageChange }
				getRowClass={ ( row ) => row?.status === 'inactive' ? 'is-disabled' : '' }
			/>
		</div>
	)
}

export default memo( BrandsTable )
PK     ¢ŠU]’’ù2Ð   Ð   E  includes/modules/ai-visibility/assets/src/Dashboard/GatedPreview.scssnu „[µü¤        /**
 * GatedPreview â€” blurred decorative dashboard behind the access-gate modals.
 */

.rank-math-ai-visibility-gated-preview {
	filter:         blur( 4px );
	pointer-events: none;
	user-select:    none;
}
PK     £ŠU]Ø·%o(  o(  <  includes/modules/ai-visibility/assets/src/Dashboard/index.jsnu „[µü¤        /**
 * Dashboard tab
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { get, toLower, isNil } from 'lodash'

/**
 * WordPress dependencies
 */
import { __, sprintf } from '@wordpress/i18n'
import { Notice } from '@wordpress/components'
import { useState, useEffect, useRef } from '@wordpress/element'
import { trendingUp, store } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import useDashboard from '../shared/hooks/useDashboard'
import { getBrand } from '../shared/services/api/aiVisibilityApi'
import { StatCard, EmptyState } from '../shared/components'
import { ConfirmModal, AddBrandModal, UpgradePlanModal } from '../shared/Modals'
import BrandsTableToolbar from './BrandsTableToolbar'
import BrandsTable from './BrandsTable'
import BrandDetail from '../BrandDetail'
import { getActiveBrandId, navigateToBrand, navigateBackToDashboard } from '../utils/urlState'
import './Dashboard.scss'

// Plans not listed here are treated as unlimited.
const BRAND_LIMITS = {
	starter: 1,
	creator: 10,
	expert: 50,
}

const TOP_TIER_PLAN = 'expert' // no upgrade path â€” show limit-reached messaging

/**
 * @param {Object|null} confirmBrand
 * @param {string}      confirmAction 'disable' | 'enable'
 * @return {string} Localised confirmation message.
 */
const getConfirmMessage = ( confirmBrand, confirmAction ) => {
	if ( ! confirmBrand ) {
		return ''
	}

	if ( confirmAction === 'enable' ) {
		return sprintf(
			/* translators: %s is the brand name, e.g. "Nike". */
			__( `Resume tracking "%s"? Analysis will run on the next scheduled cycle.`, 'seo-by-rank-math' ),
			confirmBrand.name
		)
	}

	return sprintf(
		/* translators: %s is the brand name, e.g. "Nike". */
		__( `Stop tracking "%s"? You can re-enable it later.`, 'seo-by-rank-math' ),
		confirmBrand.name
	)
}

/**
 * Resolve the display value for a summary StatCard.
 *
 * @param {Object}    options
 * @param {boolean}   options.loading   Whether the dashboard is still loading.
 * @param {boolean}   options.hasBrands Whether any brands are tracked.
 * @param {*}         options.raw       Raw summary value (may be null/undefined).
 * @param {Function} [options.format]   Optional formatter for a present value.
 * @return {string|number|null} Placeholder, null (empty), 0 (missing) or formatted value.
 */
const getStatValue = ( { loading, hasBrands, raw, format } ) => {
	if ( loading ) {
		return 'â€”'
	}
	if ( ! hasBrands ) {
		return null
	}
	if ( isNil( raw ) ) {
		return 0
	}
	return format ? format( raw ) : raw
}

/**
 * @param {Object}   props
 * @param {Array}    [props.locales]        Locale options for the brand modals.
 * @param {Function} [props.onBrandCreated] Callback when a new brand is successfully created.
 * @return {JSX.Element} Rendered component.
 */
const Dashboard = ( { locales = [], onBrandCreated = () => {} } ) => {
	const [ activeBrandId, setActiveBrandId ] = useState( getActiveBrandId )

	useEffect( () => {
		const handlePopState = () => setActiveBrandId( getActiveBrandId() )
		window.addEventListener( 'popstate', handlePopState )
		return () => window.removeEventListener( 'popstate', handlePopState )
	}, [] )

	const {
		brands,
		summary,
		loading,
		error,
		handleSearch,
		handleAddBrand,
		handleUpdateBrand,
		handleDisableBrand,
		handleEnableBrand,
	} = useDashboard()

	// Modal state
	const [ isAddModalOpen, setAddModalOpen ] = useState( false )
	const [ editBrand, setEditBrand ] = useState( null )
	const [ isSaving, setIsSaving ] = useState( false )
	const [ saveError, setSaveError ] = useState( null )

	// ConfirmModal state
	const [ confirmBrand, setConfirmBrand ] = useState( null )
	const [ confirmAction, setConfirmAction ] = useState( 'delete' )
	const [ isProcessing, setIsProcessing ] = useState( false )
	const [ actionError, setActionError ] = useState( null )

	const [ isUpgradeModalOpen, setUpgradeModalOpen ] = useState( false )

	// Search: debounced 300 ms, proxy filters cached rows server-side.
	const [ searchQuery, setSearchQuery ] = useState( '' )
	const isFirstSearchRender = useRef( true )

	useEffect( () => {
		if ( isFirstSearchRender.current ) {
			isFirstSearchRender.current = false
			return
		}

		const timer = setTimeout( () => {
			handleSearch( searchQuery.trim() )
		}, 300 )
		return () => clearTimeout( timer )
	}, [ searchQuery, handleSearch ] )

	const hasActiveSearch = !! searchQuery.trim()
	const isEmpty = ! loading && brands.length === 0 && ! hasActiveSearch

	const openDisableConfirm = ( brand ) => {
		setConfirmBrand( brand )
		setConfirmAction( brand?.status === 'inactive' ? 'enable' : 'disable' )
	}
	const closeConfirm = () => {
		setConfirmBrand( null )
		setActionError( null )
	}

	const confirmTitle = confirmAction === 'enable'
		? __( 'Activate brand?', 'seo-by-rank-math' )
		: __( 'Deactivate brand?', 'seo-by-rank-math' )

	const confirmMessage = getConfirmMessage( confirmBrand, confirmAction )

	const closeAddModal = () => {
		setAddModalOpen( false )
		setEditBrand( null )
		setSaveError( null )
	}

	const plan = toLower( get( window, 'rankMath.aiVisibility.plan', '' ) )
	const brandLimit = get( BRAND_LIMITS, plan, null )

	const openAddBrand = () => {
		if ( null !== brandLimit && brands.length >= brandLimit ) {
			setUpgradeModalOpen( true )
			return
		}
		setEditBrand( null )
		setAddModalOpen( true )
	}

	const handleSaveBrand = async ( data ) => {
		setSaveError( null )
		setIsSaving( true )
		try {
			if ( editBrand ) {
				await handleUpdateBrand( editBrand.id, data )
			} else {
				await handleAddBrand( data )
				onBrandCreated( __( 'Brand added! The first analysis is running â€” data will appear in approximately 10 minutes.', 'seo-by-rank-math' ) )
			}
			closeAddModal()
		} catch ( err ) {
			setSaveError( err?.message || __( 'Something went wrong. Please try again.', 'seo-by-rank-math' ) )
		} finally {
			setIsSaving( false )
		}
	}

	const onConfirmAction = async () => {
		if ( ! confirmBrand ) {
			return
		}
		setIsProcessing( true )
		setActionError( null )
		try {
			if ( confirmAction === 'disable' ) {
				await handleDisableBrand( confirmBrand.id )
			} else if ( confirmAction === 'enable' ) {
				await handleEnableBrand( confirmBrand.id )
			}
			closeConfirm()
		} catch ( err ) {
			setActionError( err?.message ?? __( 'Action failed. Please try again.', 'seo-by-rank-math' ) )
		} finally {
			setIsProcessing( false )
		}
	}

	const handleViewBrand = ( brand ) => {
		navigateToBrand( brand.id )
		setActiveBrandId( brand.id )
	}

	const handleBackToDashboard = () => {
		navigateBackToDashboard()
		setActiveBrandId( null )
	}

	if ( activeBrandId ) {
		return (
			<BrandDetail
				brandId={ activeBrandId }
				onBack={ handleBackToDashboard }
				locales={ locales }
			/>
		)
	}

	const ns = 'rank-math-ai-visibility-dashboard'

	return (
		<div className={ ns }>

			{ error && (
				<Notice status="error" isDismissible={ false }>
					{ error }
				</Notice>
			) }

			<div className={ `${ ns }__stats` }>
				<StatCard
					className="rank-math-ai-visibility-stat-card--active-brands"
					icon=" rm-icon rm-icon-ai-visibility"
					label={ __( 'Global AI Visibility Score', 'seo-by-rank-math' ) }
					value={ getStatValue( { loading, hasBrands: brands.length > 0, raw: summary?.ai_visibility_score, format: ( v ) => v + '/100' } ) }
					tooltip={ __( 'Average rank score across all tracked brands.', 'seo-by-rank-math' ) }
				/>
				<StatCard
					className="rank-math-ai-visibility-stat-card--analyses"
					icon={ trendingUp }
					label={ __( 'Analyses in last 24h', 'seo-by-rank-math' ) }
					value={ getStatValue( { loading, hasBrands: brands.length > 0, raw: summary?.analyses_last_24h } ) }
					tooltip={ __( 'Total analysis runs completed in the past 24 hours.', 'seo-by-rank-math' ) }
				/>
				<StatCard
					className="rank-math-ai-visibility-stat-card--mentions"
					icon="rm-icon rm-icon-comments"
					label={ __( 'Avg mentions per brand', 'seo-by-rank-math' ) }
					value={ getStatValue( { loading, hasBrands: brands.length > 0, raw: summary?.avg_mentions_per_brand } ) }
					tooltip={ __( 'Average number of AI-generated mentions across all tracked brands.', 'seo-by-rank-math' ) }
				/>
			</div>

			{ isEmpty && (
				<div className={ `${ ns }__empty` }>
					<EmptyState
						icon={ store }
						heading={ __( 'No brands or products tracked yet', 'seo-by-rank-math' ) }
						description={ __(
							'Add a brand or a specific product to see how you rank against competitors. Monitor your AI visibility, discover where you stand, and uncover opportunities to grow.',
							'seo-by-rank-math'
						) }
						ctaLabel={ __( '+ Add Your First Brand', 'seo-by-rank-math' ) }
						onCta={ openAddBrand }
					/>
				</div>
			) }

			{ ! isEmpty && (
				<div className={ `${ ns }__table-card` }>
					<BrandsTableToolbar
						searchValue={ searchQuery }
						onSearchChange={ setSearchQuery }
						onAdd={ openAddBrand }
					/>

					<BrandsTable
						brands={ brands }
						loading={ loading }
						onView={ handleViewBrand }
						onEdit={ async ( brand ) => {
							setEditBrand( brand )
							setAddModalOpen( true )
							try {
								const result = await getBrand( brand.id )
								if ( result?.brand ) {
									setEditBrand( result.brand )
								}
							} catch {
								// keep the partial brand already set
							}
						} }
						onDisable={ ( brand ) => openDisableConfirm( brand ) }
					/>
				</div>
			) }

			{ isAddModalOpen && (
				<AddBrandModal
					brand={ editBrand }
					onSave={ handleSaveBrand }
					onClose={ closeAddModal }
					isSaving={ isSaving }
					apiError={ saveError }
					locales={ locales }
				/>
			) }

			{ isUpgradeModalOpen && (
				<UpgradePlanModal
					plan={ plan }
					isTopTier={ TOP_TIER_PLAN === plan }
					onClose={ () => setUpgradeModalOpen( false ) }
				/>
			) }

			{ confirmBrand && (
				<ConfirmModal
					title={ confirmTitle }
					message={ confirmMessage }
					confirmLabel={ confirmAction === 'enable'
						? __( 'Activate', 'seo-by-rank-math' )
						: __( 'Deactivate', 'seo-by-rank-math' )
					}
					isDestructive={ confirmAction === 'disable' }
					isProcessing={ isProcessing }
					error={ actionError }
					onConfirm={ onConfirmAction }
					onCancel={ closeConfirm }
				/>
			) }

		</div>
	)
}

export default Dashboard
PK     £ŠU]…Pi¼£  £  K  includes/modules/ai-visibility/assets/src/Dashboard/BrandsTableToolbar.scssnu „[µü¤        /**
 * BrandsTableToolbar â€” search + add-brand bar above the brands table.
 */

@import '../scss/variables';

.rank-math-ai-visibility-brands-toolbar {
	display:     flex;
	align-items: center;
	gap:         $space-md;

	&__search.components-base-control {
		flex:      0 0 auto;
		margin:    0;
		width:     200px;

		input[type='text'],
		input[type='search'] {
			height:        36px;
			border-radius: 2px;
			border-color:  #949494;
			font-size:     13px;

			&:focus {
				border-color: $color-btn-primary;
				box-shadow:   0 0 0 1px $color-btn-primary;
			}
		}

		input[type='text'] {
			padding: 0 12px;
		}

		input[type='search'] {
			padding: 0 5px;
		}
	}
}
PK     £ŠU]{9ú	£.  £.  >  includes/modules/ai-visibility/assets/src/scss/_variables.scssnu „[µü¤        /**
 * AI Visibility â€” SCSS design tokens.
 *
 * All values sourced directly from the Figma file:
 * https://www.figma.com/design/Ro0jblj6zP93S52TzqGfBU/AI-Visibility
 *
 * Module-scoped variables. The Rank Math codebase has no centralised tokens
 * file, so each module defines its own here.
 *
 * Usage:
 *   @import '../scss/variables';
 *   .foo { color: $color-text-muted; }
 */

// ---------------------------------------------------------------------------
// Colors â€” surfaces & borders
// ---------------------------------------------------------------------------

// Card / panel background.
$color-surface:           #fff;

// Border on cards and separators (Figma token: Color/Layout/borders).
$color-border:            #e0e0e0;

// Input field border â€” slightly darker than card borders (used on date pickers,
// select control backdrop, etc.).
$color-input-border:      #949494;

// ---------------------------------------------------------------------------
// Colors â€” text
// ---------------------------------------------------------------------------

// Primary text â€” empty state heading, strong labels.
$color-text-primary:      #1e1e1e;

// Secondary text â€” section subtitles
$color-text-secondary:    #868686;

// Muted / secondary text â€” stat labels, stat values (zero state), body copy.
$color-text-muted:        #9b9b9b;

// Body copy on light surfaces â€” modal intro text, footer notes
// (matches the secondary button text colour used in Button.scss).
$color-text-body:         #4e4e4e;

// Text / icons on dark or gradient backgrounds â€” gate modal headers,
// video placeholder.
$color-text-light:        #fff;

// ---------------------------------------------------------------------------
// Colors â€” trend indicators
// (applied to the "Changes, Period" chip on stat cards)
// ---------------------------------------------------------------------------

// Positive trend (direction: up).
$color-trend-up:          #42B268;
$color-trend-up-bg:       #42B26814;  // for up badge background (not in Figma, but added for better accessibility)

// Negative trend (direction: down).
$color-trend-down:        #F66276;
$color-trend-down-bg:     #F6627614;  // for down badge background (not in Figma, but added for better accessibility)

// Neutral / flat trend (delta: 0 or no data).
$color-trend-neutral:        #B7B7B7;
$color-trend-neutral-bg:     #B1B1B114;

// ---------------------------------------------------------------------------
// Colors â€” rank badge
// (Status-Anchor-Tag component, Figma node 3-1043)
// All backgrounds use the badge colour at 30 % opacity (hex suffix 4D).
// ---------------------------------------------------------------------------

// Rank 1 â€” green (reuses $color-trend-up).
// Rank 2 â€” amber (unique to rank badges; not shared with trend indicators).
$color-rank-2:            #F2B02D;
// Rank 3 â€” pink/red (reuses $color-trend-down).
// Rank âˆ’ â€” grey    (reuses $color-trend-neutral).

// Shared badge padding (Figma: 6 px each side â€” distinct from the 4 px
// trend-chip padding in $stat-trend-badge-padding-x).
$rank-badge-padding-x:    6px;

// ---------------------------------------------------------------------------
// Colors â€” interactive
// ---------------------------------------------------------------------------

// Primary CTA button background (Figma token: Button/button-primary-default).
$color-btn-primary:       #017cba;

// Primary button text.
$color-btn-primary-text:  #fff;

// ---------------------------------------------------------------------------
// Typography â€” font family
// ---------------------------------------------------------------------------

// SF Pro Text is used throughout the design. In a browser context this
// resolves to the OS system-ui font, which WordPress admin already sets.
// Declare it here so components can reference it explicitly if needed.
$font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
	Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;

// ---------------------------------------------------------------------------
// Typography â€” stat card
// ---------------------------------------------------------------------------

// Stat card label (e.g. "Active brands", "Analyses in last 24h").
$stat-label-size:         16px;   // Figma: SF Pro Text 16px
$stat-label-weight:       500;    // Figma: Medium
$stat-label-line-height:  26px;   // Figma: 26px
$stat-label-color:        $color-text-muted;

// Stat card value (the large number e.g. "0", "5", "3.4").
$stat-value-size:         30px;
$stat-value-weight:       600;
$stat-value-line-height:  32px;
$stat-value-color:        $color-text-muted;

// Trend / delta chip text.
// The delta ("-0%") renders as a pill-badge; the label ("this month") is plain text.
$stat-trend-delta-size:       14px;   // Figma: badge font size
$stat-trend-badge-bg:         #B1B1B114; // Figma: neutral badge background (translucent grey)
$stat-trend-badge-radius:     30px;
$stat-trend-badge-padding-x:  4px;
$stat-trend-badge-padding-y:  4px;
$stat-trend-label-size:       12px;   // Figma: plain trailing-label font size
$stat-trend-label-lh:         16px;   // Figma: 16px
$stat-trend-gap:              6px;    // gap between badge and plain label

// StatCard content column gaps (Figma "Frame 45" / "Data" containers).
$stat-label-data-gap:     4px;  // gap between label row and value+trend block (~11â€“13 px in Figma)
$stat-value-trend-gap:    16px;  // gap between value and trend chip inside data block

// ---------------------------------------------------------------------------
// Typography â€” empty state
// ---------------------------------------------------------------------------

// "No brands or products tracked yet" heading.
$empty-heading-size:      28px;   // Figma: 28px
$empty-heading-weight:    400;    // Figma: Medium
$empty-heading-line-height: 34px; // Figma: 34px
$empty-heading-color:     $color-text-primary;

// Supporting body copy beneath the heading.
$empty-body-size:         16px;
$empty-body-weight:       400;
$empty-body-line-height:  23px;
$empty-body-color:        $color-text-muted;

// ---------------------------------------------------------------------------
// Spacing
// ---------------------------------------------------------------------------

$space-xs:                4px;
$space-sm:                8px;
$space-md:                16px;
$space-lg:                24px;
$space-xl:                32px;

// Card content padding (top/left/right differ from bottom per Figma).
$card-padding-top:        16px;
$card-padding-x:          16px;
$card-padding-bottom:     16px;

// Gap between the two stacked groups inside a card (label row â†’ value row).
$card-inner-gap:          11px;

// Gap between the three stat cards in the row.
$card-row-gap:            16px;

// ---------------------------------------------------------------------------
// Borders & radii
// ---------------------------------------------------------------------------

$radius-sm:               4px;
$radius-md:               8px;
$radius-btn:              2px;   // Button corner radius â€” Figma token Number/Radius/radius-xs

$border-width:            1px;
$border-color:            $color-border;

// ---------------------------------------------------------------------------
// Components â€” button
// ---------------------------------------------------------------------------

$btn-height:              36px;
$btn-radius:              $radius-btn;  // 6px
$btn-padding-x:           $space-md;
$btn-gap:                 $space-sm;

// ---------------------------------------------------------------------------
// Components â€” empty state
// ---------------------------------------------------------------------------

// Vertical gap between icon â†’ heading â†’ body â†’ button.
$empty-state-gap:         16px;

// Icon container â€” Figma "Tool Icon Container" (64 Ã— 64, radius 40px, padding 10px).
$empty-state-icon-size:    64px;                       // container width & height
$empty-state-icon-radius:  40px;                       // rounded rect (not full circle)
$empty-state-icon-padding: 10px;                       // inner padding around SVG
$empty-state-icon-bg:      rgba(57, 116, 198, 0.10);   // #3974C6 @ 10% opacity
$empty-state-icon-svg:     28px;                       // inner SVG / Frame size

// ---------------------------------------------------------------------------
// Colors â€” access & upgrade modals
// (Figma: Free Users / Paid Users / Upgrade Plan flows)
// ---------------------------------------------------------------------------

// Gradient header (purple â†’ blue) used on the access-gate modal headers and
// the Upgrade Plan modal body backdrop.
$gate-gradient-start:     #7053c9;
$gate-gradient-end:       #59abf7;
$gate-gradient:           linear-gradient( 96deg, $gate-gradient-start 0%, $gate-gradient-end 100% );

// Green CTA ("Start 15-Day Free Trial", "Go to Dashboard") + feature checkmarks.
$color-cta:               #16a571;
$color-cta-text:          #fff;

// Trial auto-renew notice (Paid Users modal).
$trial-notice-bg:         #ebf3fa;
$trial-notice-border:     #017cba;   // reuses the primary blue as the left accent

// Footnote under the CTA ("30-Day Money-Back Guarantee").
$gate-footnote-color:     #757575;

// Quick Start Guide video placeholder (success modal).
$gate-video-bg:           #131a2a;

// ---------------------------------------------------------------------------
// Mixins â€” card & table base patterns
// (reused across CompetitorsTable, QueriesTable, Reports, etc.)
// ---------------------------------------------------------------------------

/// Card-like surface: white bg, 1px border, 4px radius.
@mixin card-base {
	background:    $color-surface;
	border:        1px solid $color-border;
	border-radius: $radius-sm;
}

/// Standard data table wrapper: full-width, collapsed borders, 13px font.
@mixin table-base {
	width:           100%;
	border-collapse: collapse;
	font-size:       13px;
	border:          1px solid $color-border;
	background:      $color-surface;
}

/// Standard header cell: left-aligned, grey header bg, border-bottom.
@mixin table-header-cell {
	padding:       14px 22px;
	text-align:    left;
	font-size:     12px;
	font-weight:   500;
	color:         #3c434a;
	border-bottom: 1px solid $color-border;
	background:    #f9f9f9;
	white-space:   nowrap;
}

/// Standard body cell: left-aligned, 14px 22px padding, primary text.
@mixin table-body-cell {
	padding:        14px 22px;
	vertical-align: middle;
	color:          $color-text-primary;
	line-height:    1.5;
}

/// Standard table row: bottom border, hover highlight, no border on last row.
@mixin table-row-base {
	border-bottom: 1px solid $color-border;

	&:last-child {
		border-bottom: none;
	}

	&:hover {
		background: rgba( 0, 0, 0, 0.01 );
	}
}

/// Error state: 13px red text, no margin.
/// Apply inside an `--error` modifier block, targeting the inner `p`.
/// Usage: &--error { p { @include error-state; } }
@mixin error-state {
	font-size: 13px;
	color:     $color-trend-down;
	margin:    0;
}

/// Consistent focus ring for text/date inputs and WP InputControl backdrops.
/// Uses !important on border-color and box-shadow to beat WP admin's
/// `var(--wp-admin-theme-color)` injection which wins on specificity alone.
/// Usage: input:focus { @include input-focus-ring; outline: none; }
@mixin input-focus-ring {
	border-color: $color-btn-primary !important;
	box-shadow:   0 0 0 2px rgba( 1, 124, 186, 0.15 ) !important;
}

// Secondary focus ring for focused elements inside a focused wrapper (e.g. search input
@mixin input-focus-ring-secondary {
	border-color: $color-input-border !important;
	box-shadow:   0 0 0 2px rgba( 148, 148, 148, 0.15 ) !important;
}

@keyframes spin {
	from { transform: rotate( 0deg ); }
	to   { transform: rotate( 360deg ); }
}
PK     £ŠU]Ï'BÐ  Ð  E  includes/modules/ai-visibility/assets/src/Analyses/AnalysesTable.scssnu „[µü¤        /**
 * AnalysesTable â€” analyses runs table overrides.
 */

@import '../scss/variables';

.rank-math-ai-visibility-analyses {

	// Suppress the ListTable's own toolbar row â€” we use AnalysesFilterBar instead.
	.rank-math-table-header {
		display: none !important;
	}

	// Explicit column widths â€” prevents table-layout:auto from giving
	// Last Analyzed a disproportionately large share due to nowrap content.
	table {
		th:nth-child(1) { width: 45%; } // Brand
		th:nth-child(2) { width: 35%; } // Last Analyzed
		th:nth-child(3) { width: 20%; } // Action
	}
}

// -------------------------------------------------------------------------
// Last analyzed cell â€” time + optional status icon.
// Mirrors the BrandsTable status icon pattern.
// -------------------------------------------------------------------------

.rank-math-ai-visibility-analyses-table {

	&__time-cell {
		display:     flex;
		align-items: center;
		gap:         6px;
		white-space: nowrap;
	}
}
PK     £ŠU]º5›ž5  5  G  includes/modules/ai-visibility/assets/src/Analyses/AnalysesFilterBar.jsnu „[µü¤        /**
 * AnalysesFilterBar â€” filter controls above the analyses table.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useMemo, useState, useEffect } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { SelectControl, SearchControl, Button } from '@wordpress/components'

/**
 * Internal dependencies
 */
import './AnalysesFilterBar.scss'
import { DateInput } from '../shared/components'

// Status options â€” matches the states derived by `getAnalysisState`.
const STATUS_OPTIONS = [
	{ label: __( 'All Statuses', 'seo-by-rank-math' ), value: '' },
	{ label: __( 'Done', 'seo-by-rank-math' ), value: 'done' },
	{ label: __( 'Running', 'seo-by-rank-math' ), value: 'running' },
	{ label: __( 'Error', 'seo-by-rank-math' ), value: 'error' },
]

/**
 * AnalysesFilterBar component.
 *
 * @param {Object}   props
 * @param {Object}   props.filters           Active filter bag.
 * @param {Function} props.onFilterChange    Receives a partial patch object.
 * @param {Function} props.onClearFilters    Resets all filters to defaults.
 * @param {Array}    [props.brandOptions=[]] `[{ label, value }]` for the brand dropdown.
 * @return {JSX.Element} Single-row filter bar.
 */
const AnalysesFilterBar = ( {
	filters,
	onFilterChange,
	onClearFilters,
	brandOptions = [],
} ) => {
	const ns = 'rank-math-ai-visibility-analyses-filter-bar'

	// Prepend "All Brands" option to the brand list.
	const brandSelectOptions = useMemo( () => [
		{ label: __( 'All Brands', 'seo-by-rank-math' ), value: '' },
		...brandOptions,
	], [ brandOptions ] )

	// The hook stores brandIds as an array. For the single-select UI we store
	// the first item (or '') and convert back on change.
	const activeBrandId = ( filters.brandIds && filters.brandIds[ 0 ] )
		? String( filters.brandIds[ 0 ] )
		: ''

	// Local search state â€” debounced 300 ms before propagating to the hook.
	// This prevents a new API request on every keystroke.
	const [ localSearch, setLocalSearch ] = useState( filters.search || '' )

	// Sync local state if the parent resets filters externally (e.g. "clear all").
	useEffect( () => {
		setLocalSearch( filters.search || '' )
	}, [ filters.search ] )

	useEffect( () => {
		const timer = setTimeout( () => {
			onFilterChange( { search: localSearch } )
		}, 300 )
		return () => clearTimeout( timer )
	}, [ localSearch, onFilterChange ] )

	const hasActiveFilters = (
		activeBrandId !== '' ||
		filters.status !== '' ||
		( filters.search || '' ) !== '' ||
		( filters.dateFrom || '' ) !== '' ||
		( filters.dateTo || '' ) !== ''
	)

	return (
		<div className={ ns }>

			{ /* Brand â€” standard SelectControl, matches Status style */ }
			<SelectControl
				className={ `${ ns }__brand` }
				value={ activeBrandId }
				options={ brandSelectOptions }
				onChange={ ( val ) => onFilterChange( { brandIds: val ? [ val ] : [] } ) }
				__next40pxDefaultSize={ true }
				__nextHasNoMarginBottom={ true }
			/>

			{ /* Status */ }
			<SelectControl
				className={ `${ ns }__status` }
				value={ filters.status }
				options={ STATUS_OPTIONS }
				onChange={ ( value ) => onFilterChange( { status: value } ) }
				__next40pxDefaultSize={ true }
				__nextHasNoMarginBottom={ true }
			/>

			{ /* Search â€” value bound to local state; propagation is debounced 300 ms */ }
			<SearchControl
				className={ `${ ns }__search` }
				placeholder={ __( 'Search', 'seo-by-rank-math' ) }
				aria-label={ __( 'Search runs', 'seo-by-rank-math' ) }
				value={ localSearch }
				onChange={ ( value ) => setLocalSearch( value ) }
				__nextHasNoMarginBottom={ true }
			/>

			{ hasActiveFilters && (
				<Button
					className={ `${ ns }__clear` }
					variant="link"
					isDestructive
					onClick={ onClearFilters }
				>
					{ __( 'Clear filters', 'seo-by-rank-math' ) }
				</Button>
			) }

			{ /* Date range: [ðŸ“… From] - [ðŸ“… To] */ }
			<div className={ `${ ns }__dates` }>
				<div className={ `${ ns }__date-wrap` }>
					<DateInput
						value={ filters.dateFrom }
						onChange={ ( e ) => onFilterChange( { dateFrom: e.target.value } ) }
						ariaLabel={ __( 'From date', 'seo-by-rank-math' ) }
						className={ `${ ns }__date-input` }
					/>
				</div>
				<span className={ `${ ns }__date-sep` }>-</span>
				<div className={ `${ ns }__date-wrap` }>
					<DateInput
						value={ filters.dateTo }
						onChange={ ( e ) => onFilterChange( { dateTo: e.target.value } ) }
						ariaLabel={ __( 'To date', 'seo-by-rank-math' ) }
						className={ `${ ns }__date-input` }
					/>
				</div>
			</div>

		</div>
	)
}

AnalysesFilterBar.displayName = 'AnalysesFilterBar'

export default AnalysesFilterBar
PK     £ŠU]®Ìk_˜  ˜  C  includes/modules/ai-visibility/assets/src/Analyses/AnalysesTable.jsnu „[µü¤        /**
 * AnalysesTable â€” paginated analyses runs table.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { get } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useMemo, memo } from '@wordpress/element'

/**
 * Internal dependencies
 */
import { ListTable as Table, TableSkeleton } from '@rank-math/components'
import { Button, StartTime, StatusIcon } from '../shared/components'
import './AnalysesTable.scss'

/**
 * AnalysesTable component.
 *
 * @param {Object}   props
 * @param {Array}    [props.items=[]]        Analysis run rows.
 * @param {boolean}  [props.loading=false]   Show skeleton when true and items is empty.
 * @param {Object}   [props.pagination={}]   `{ page, perPage, total, pages }`.
 * @param {Function} [props.onViewDetail]    Handler for "View Run Detail" â€” opens transcript.
 * @param {Function} [props.onPageChange]    Called with new page number.
 * @param {Function} [props.onPerPageChange] Called with new per-page value.
 * @return {JSX.Element} Paginated analyses runs table with section header.
 */
const AnalysesTable = ( {
	items = [],
	loading = false,
	pagination = {},
	onViewDetail = () => {},
	onPageChange = () => {},
	onPerPageChange = () => {},
} ) => {
	const headers = useMemo( () => [
		{
			key: 'brand_name',
			label: __( 'Brand', 'seo-by-rank-math' ),
		},
		{
			key: 'started_at',
			label: __( 'Last analyzed', 'seo-by-rank-math' ),
			render: ( value, row ) => {
				const hasStatus = row.status === 'error' || row.status === 'running'
				return (
					<span className="rank-math-ai-visibility-analyses-table__time-cell">
						{ value ? <StartTime value={ value } /> : ( ! hasStatus && 'âˆ’' ) }
						{ hasStatus && <StatusIcon variant={ row.status } /> }
					</span>
				)
			},
		},
		{
			key: 'id',
			label: __( 'Action', 'seo-by-rank-math' ),
			render: ( _, row ) => {
				// A completed run exists (and thus viewable transcripts) if
				// last_analyzed is set. analysis_status can read `pending` for
				// the next scheduled cycle even when prior data exists.
				if ( ! row.started_at ) {
					return null
				}

				return (
					<Button
						className="rank-math-ai-visibility-view-transcript"
						iconLeft={ <span className="rm-icon-eye" /> }
						onClick={ () => onViewDetail( row ) }
					>
						{ __( 'View Run Detail', 'seo-by-rank-math' ) }
					</Button>
				)
			},
		},
	], [ onViewDetail ] )

	if ( loading && ! items.length ) {
		return <TableSkeleton columns={ 3 } rows={ 10 } />
	}

	return (
		<Table
			storageKey="ai-visibility-analyses"
			headers={ headers }
			rows={ items }
			currentPage={ get( pagination, 'page', 1 ) }
			rowsPerPage={ get( pagination, 'perPage', 10 ) }
			totalItems={ get( pagination, 'total', items.length ) }
			totalPages={ get( pagination, 'pages', 1 ) }
			onPageChange={ onPageChange }
			onRowsPerPageChange={ onPerPageChange }
		/>
	)
}

export default memo( AnalysesTable )
PK     £ŠU]u�‰‘§
  §
  I  includes/modules/ai-visibility/assets/src/Analyses/AnalysesFilterBar.scssnu „[µü¤        /**
 * AnalysesFilterBar â€” single-row filter bar.
 *
 * [All Brands â–¼] [All Statuses â–¼] [Search ðŸ”� ........] [ðŸ“… dd/mm/yy] - [ðŸ“… dd/mm/yy]
 */

@import '../scss/variables';

.rank-math-ai-visibility-analyses-filter-bar {
	display:     flex;
	align-items: center;
	gap:         $space-sm;
	flex-wrap:   nowrap;
	padding: 15px 25px;
	background-color: $color-surface;

	// Remove WP base-control bottom margin.
	.components-base-control {
		margin-bottom: 0;
	}

	// Brand â€” fixed width, same style as Status
	&__brand {
		min-width: 150px;
		flex-shrink: 0;
	}

	// Status â€” fixed width
	&__status {
		min-width: 140px;
		flex-shrink: 0;
	}

	// Search â€” grows to fill available space between dropdowns and date range.
	// Styled to match the Dashboard BrandsTableToolbar search:
	// icon LEFT (default WP), 36px tall, border-radius 2px, border #949494.
	&__search {
		flex: 1;
		min-width: 120px;
		max-width: 260px;

		// WP InputControl renders the visible border on .components-input-control__backdrop
		// (a positioned <div>), NOT on the <input> element. The .is-focused class is
		// toggled on the wrapper by WP on focus. WP admin also injects
		// var(--wp-admin-theme-color) here, so !important is required to win.
		.components-input-control.is-focused .components-input-control__backdrop {
			@include input-focus-ring;
		}

		input[type='text'],
		input[type='search'] {
			height:        36px;
			border-radius: 2px;
			font-size:     13px;

			// The visible ring lives on the backdrop â€” suppress any residual
			// browser outline or box-shadow on the raw input element itself.
			&:focus {
				outline:    none !important;
				box-shadow: none !important;
			}
		}

		input[type='text'] {
			padding: 0 12px;
		}

		input[type='search'] {
			padding: 0 5px;
		}
	}

	// Date range wrapper: [ðŸ“… input] - [ðŸ“… input]
	&__dates {
		display:     flex;
		align-items: center;
		gap:         6px;
		flex-shrink: 0;
		margin-left: auto;
	}

	&__date-sep {
		font-size:  13px;
		color:      $color-text-muted;
		flex-shrink: 0;
	}

	&__date-input {
		border:      none;
		outline:     none;
		font-size:   12px;
		color:       $color-text-primary;
		background:  transparent;
		width:       100px;
		padding:     0;
	}

	// "Clear filters" link â€” appears only when filters are active.
	&__clear {
		flex-shrink: 0;
		white-space: nowrap;
		font-size: 12px;
	}

	@at-root #rank-math-ai-visibility-container {
		.components-input-control__input,
		.components-select-control__input {
			height: 36px;
			min-height: 36px;
		}

		.components-select-control__input {
			color: #757575;
			padding: 0 16px;
		}

		.components-input-control__backdrop {
			border-color: $color-input-border;
		}
	}
}
PK     £ŠU]QPgÆ    G  includes/modules/ai-visibility/assets/src/Analyses/AnalysisRunDetail.jsnu „[µü¤        /**
 * AnalysisRunDetail â€” full-page run detail view.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { Notice, Tooltip } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { TableSkeleton } from '@rank-math/components'
import { getInsights } from '../shared/services/api/aiVisibilityApi'
import { Button, SentimentBadge, TranscriptModal, EmptyState, StatCard } from '../shared/components'
import PageTopbar from '../shared/components/PageTopbar'
import useFetch from '../shared/hooks/useFetch'
import { formatShortDate } from '../utils/formatDate'
import { navigateToReportsTab } from '../utils/urlState'
import './AnalysisRunDetail.scss'

/**
 * Map an insights query result to the shape TranscriptModal expects.
 *
 * @param {Object} result   Query result from the insights payload.
 * @param {number} index    Fallback index.
 * @param {Object} analysis Parent analysis meta.
 * @return {Object} Normalised entry.
 */
const normalise = ( result, index, analysis ) => ( {
	...result,
	id: result.query_id ?? index,
	query: result.query_text ?? '',
	response: result.response ?? '',
	created_at: analysis?.finished_at ?? null,
	duration_seconds: analysis?.duration_seconds ?? null,
	model: null,
} )

/**
 * AnalysisRunDetail component.
 *
 * @param {Object}   props
 * @param {Object}   props.row    The analyses table row (brand_name, started_at, id).
 * @param {Function} props.onBack Called when â†� Back is clicked.
 * @return {JSX.Element} Full-page analysis run detail.
 */
const AnalysisRunDetail = ( { row, onBack } ) => {
	const ns = 'rank-math-ai-visibility-analysis-run-detail'

	const { data: insightsData, loading, error } = useFetch(
		() => getInsights( row.id ),
		[ row?.id ],
		{ skip: ! row?.id, errorMessage: __( 'Failed to load run detail.', 'seo-by-rank-math' ) }
	)
	const insights = insightsData?.insights ?? null
	const [ modalEntry, setModalEntry ] = useState( null )

	const transcripts = ( insights?.query_results ?? [] ).map( ( result, i ) => normalise( result, i, insights?.analysis ) )
	const totalDuration = insights?.analysis?.duration_seconds ?? 0
	const durationLabel = totalDuration ? `${ totalDuration }s` : 'â€”'
	const startedAt = row?.started_at ?? insights?.analysis?.started_at

	const handleExportReport = () => navigateToReportsTab( row.id )

	return (
		<div className={ ns }>

			<PageTopbar
				onBack={ onBack }
				title={ __( 'Analysis Run Detail', 'seo-by-rank-math' ) }
				actions={
					<Button
						variant="secondary"
						onClick={ handleExportReport }
					>
						{ __( 'Export Report', 'seo-by-rank-math' ) }
					</Button>
				}
			/>

			<div className={ `${ ns }__content` }>

				<div className={ `${ ns }__stat-cards` }>

					<StatCard
						compact
						icon=" rm-icon-target"
						label={ __( 'Target Brand', 'seo-by-rank-math' ) }
						value={ row?.brand_name || 'â€”' }
						className="rank-math-ai-visibility-stat-card--target-brand"
						tooltip={ __( 'The brand this analysis run is for.', 'seo-by-rank-math' ) }
						analysis={ insights?.analysis }
					/>

					<StatCard
						compact
						icon="clock"
						label={ __( 'Duration & Timing', 'seo-by-rank-math' ) }
						value={ durationLabel }
						sub={ formatShortDate( startedAt ) }
						className="rank-math-ai-visibility-stat-card--duration-timing"
						tooltip={ __( 'Total duration of all queries in this run, and the date it was started.', 'seo-by-rank-math' ) }
						analysis={ insights?.analysis }
					/>

				</div>

				{ error && (
					<Notice status="error" isDismissible={ false }>{ error }</Notice>
				) }

				{ loading ? (
					<TableSkeleton columns={ 3 } rows={ 3 } />
				) : (
					<div className={ `${ ns }__table` }>
						<div className={ `${ ns }__table-row ${ ns }__table-row--header` }>
							<div className={ `${ ns }__col ${ ns }__col--query` }>
								{ __( 'Query text', 'seo-by-rank-math' ) }
							</div>
							<div className={ `${ ns }__col ${ ns }__col--sentiment` }>
								{ __( 'Sentiment', 'seo-by-rank-math' ) }
							</div>
							<div className={ `${ ns }__col ${ ns }__col--action` }>
								{ __( 'Action', 'seo-by-rank-math' ) }
							</div>
						</div>

						{ transcripts.length === 0 ? (
							<EmptyState
								heading={ __( 'No queries found', 'seo-by-rank-math' ) }
								description={ __( 'No queries were recorded for this analysis run.', 'seo-by-rank-math' ) }
							/>
						) : (
							transcripts.map( ( entry ) => (
								<div key={ entry.id } className={ `${ ns }__table-row` }>
									<div className={ `${ ns }__col ${ ns }__col--query` }>
										{ entry.query || 'â€”' }
									</div>
									<div className={ `${ ns }__col ${ ns }__col--sentiment` }>
										{ ( entry.avg_sentiment ?? entry.sentiment ) !== null && ( entry.avg_sentiment ?? entry.sentiment ) !== undefined ? (
											<SentimentBadge score={ entry.avg_sentiment ?? entry.sentiment } />
										) : (
											<Tooltip text={ entry.found === false
												? __( 'Sentiment unavailable - this brand was not detected in the AI response for this query.', 'seo-by-rank-math' )
												: __( 'Sentiment data is not available for this query.', 'seo-by-rank-math' )
											}>
												<span>
													<SentimentBadge score={ null } />
												</span>
											</Tooltip>
										) }
									</div>
									<div className={ `${ ns }__col ${ ns }__col--action` }>
										<Button
											variant="secondary"
											iconLeft={ <span className="rm-icon-eye" /> }
											onClick={ () => setModalEntry( entry ) }
											className="rank-math-ai-visibility-view-transcript"
										>
											{ __( 'View Transcript', 'seo-by-rank-math' ) }
										</Button>
									</div>
								</div>
							) )
						) }
					</div>
				) }

				{ modalEntry && (
					<TranscriptModal
						entry={ modalEntry }
						onClose={ () => setModalEntry( null ) }
					/>
				) }

			</div>

		</div>
	)
}

AnalysisRunDetail.displayName = 'AnalysisRunDetail'

export default AnalysisRunDetail
PK     £ŠU]n'³¥%  %  @  includes/modules/ai-visibility/assets/src/Analyses/Analyses.scssnu „[µü¤        /**
 * Analyses tab.
 */

@import '../scss/variables';

.rank-math-ai-visibility-analyses {
	display:        flex;
	flex-direction: column;
	gap:            24px;

	// Error notice â€” same pattern as Dashboard.
	&__error {
		padding:       $space-sm $space-md;
		background:    #fef0f0;
		border:        1px solid $color-trend-down;
		border-radius: $radius-sm;
		color:         $color-trend-down;
		font-size:     14px;
	}

	&__card {
		border-radius: 4px;
		border: 1px solid #E0E0E0;
		overflow: hidden;
	}


	// Override the table styling
	.rank-math-table {
		font-size: 13px;

		&-card {
			border-top: 1px solid #E0E0E0;
		}

		thead {
			background: #FCFCFC;
			border-color: #E0E0E0;

			th {
				padding: 13px 16px;

				&:first-child {
					padding: 13px 26px;
				}

				.rank-math-table-header-cell {
					color: #1E1E1E;
					font-size: 14px;
				}
			}
		}


		tbody {
			tr {
				td {
					padding: 16px;

					&:first-child {
						padding: 16px 26px;
					}
				}
			}

			.rank-math-table-row {
				&,
				&:hover,
				&:nth-child(odd) {
					background: transparent;
				}
			}
		}

		&-footer {
			justify-content: center;
			padding: 20px 0;

			&-nav {
				justify-content: center;
				align-items: center;
			}
		}
	}

	.rank-math-pagination {
		&-page-info {
			color: #666666;
		}

		&-separator {
			color: #B2B2B2;
		}

		&-jump {
			span {
				color: #666666;
			}

			.rank-math-pagination-input {
				width: 31px;
				height: 28px;
				border-radius: 2px;
				min-height: 28px;
				border-color: #C6C6C6;
				color: #757575;
			}
		}
	}
	
}
PK     £ŠU]7BQ,  ,  I  includes/modules/ai-visibility/assets/src/Analyses/AnalysisRunDetail.scssnu „[µü¤        /**
 * AnalysisRunDetail â€” full-page run detail view styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-analysis-run-detail {

	// â”€â”€ Stat cards â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	&__stat-cards {
		display: flex;
		gap: 28px;
		margin-bottom: 26px;
		margin-top: 24px;
	}

	// â”€â”€ Query table â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	&__table {
		background: $color-surface;
		border: 1px solid $color-border;
		border-radius: $radius-md;
		overflow: hidden;
	}

	&__table-row {
		display: grid;
		grid-template-columns: 1fr 140px 160px;
		align-items: center;
		padding: 20px 35px;
		border-bottom: 1px solid $color-border;
		gap: 16px;

		&:last-child {
			border-bottom: none;
		}

		&--header {
			background: #FCFCFC;
			font-size: 12px;
			font-weight: 600;
			color: #1E1E1E;
			text-transform: uppercase;
			letter-spacing: 0.03em;
			padding: 13px 35px;
		}
	}

	&__col {
		min-width: 0;

		&--query {
			font-size: 13px;
			color: $color-text-primary;
			line-height: 1.5;
		}

		&--sentiment {
			display: flex;
			align-items: center;
		}
	}

	&__content {
		background: #FFFFFF;
		border-width: 0px 1px 1px 1px;
		border-style: solid;
		border-color: #E0E0E0;
		border-radius: 0px 0px 4px 4px;
		padding: 24px 34px 34px 34px;
		margin: 24px 0 0 0;
	}
}

PK     £ŠU].{²õ  õ  ;  includes/modules/ai-visibility/assets/src/Analyses/index.jsnu „[µü¤        /**
 * Analyses & Transcripts tab container.
 *
 * Rows are derived from the cached dashboard data (one row per brand = its
 * latest run); filtering, search, and pagination are client-side. No
 * dedicated API endpoints.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState, useEffect, useMemo, useCallback } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { Notice } from '@wordpress/components'
import { addQueryArgs } from '@wordpress/url'

/**
 * Internal dependencies
 */
import useDashboard from '../shared/hooks/useDashboard'
import { getAnalysisState } from '../utils/analysisState'
import { SectionHeader } from '../shared/components'
import AnalysesFilterBar from './AnalysesFilterBar'
import AnalysesTable from './AnalysesTable'
import AnalysisRunDetail from './AnalysisRunDetail'
import './Analyses.scss'

const DEFAULT_FILTERS = {
	brandIds: [],
	status: '',
	search: '',
	dateFrom: '',
	dateTo: '',
}

/**
 * Sync filters + pagination into the URL without reloading.
 *
 * @param {Object} filters    Active filter bag.
 * @param {Object} pagination Active pagination.
 */
const writeToUrl = ( filters, pagination ) => {
	const params = {
		aiv_brands: filters.brandIds.length ? filters.brandIds.join( ',' ) : undefined,
		aiv_status: filters.status || undefined,
		aiv_search: filters.search || undefined,
		aiv_from: filters.dateFrom || undefined,
		aiv_to: filters.dateTo || undefined,
		aiv_page: pagination.page > 1 ? pagination.page : undefined,
		aiv_per: pagination.perPage !== 10 ? pagination.perPage : undefined,
	}

	const url = addQueryArgs( window.location.href, params )
	window.history.replaceState( {}, '', url )
}

/**
 * Derive a run row from a brand's rollup data.
 *
 * @param {Object} brand Brand row.
 * @return {Object} Analyses table row.
 */
const toRunRow = ( brand ) => {
	const state = getAnalysisState( brand )

	return {
		id: brand.id,
		brand_id: brand.id,
		brand_name: brand.name,
		started_at: brand.last_analyzed,
		// Display/filter bucket: running | error | done | none. Same icon
		// derivation as the Dashboard column, so the two tabs never disagree.
		status: state ?? ( brand.last_analyzed ? 'done' : 'none' ),
	}
}

/**
 * Analyses tab container component.
 *
 * @return {JSX.Element} Filter bar + derived runs table.
 */
const Analyses = () => {
	const { brands, loading, error } = useDashboard()

	const [ filters, setFilters ] = useState( DEFAULT_FILTERS )
	const [ pagination, setPagination ] = useState( { page: 1, perPage: 10 } )
	const [ selectedRow, setSelectedRow ] = useState( null )

	const brandOptions = useMemo(
		() => brands.map( ( b ) => ( { label: b.name, value: b.id } ) ),
		[ brands ]
	)

	// Derive + filter rows client-side.
	const filteredItems = useMemo( () => {
		return brands.map( toRunRow ).filter( ( item ) => {
			if ( filters.search && ! item.brand_name.toLowerCase().includes( filters.search.toLowerCase() ) ) {
				return false
			}
			if ( filters.status && item.status !== filters.status ) {
				return false
			}
			if ( filters.brandIds.length && ! filters.brandIds.includes( item.brand_id ) ) {
				return false
			}

			const itemDate = item.started_at ? item.started_at.slice( 0, 10 ) : ''
			if ( filters.dateFrom && ( ! itemDate || itemDate < filters.dateFrom ) ) {
				return false
			}
			if ( filters.dateTo && ( ! itemDate || itemDate > filters.dateTo ) ) {
				return false
			}

			return true
		} )
	}, [ brands, filters ] )

	const total = filteredItems.length
	const pages = Math.max( 1, Math.ceil( total / pagination.perPage ) )
	const pageItems = useMemo( () => {
		const offset = ( pagination.page - 1 ) * pagination.perPage
		return filteredItems.slice( offset, offset + pagination.perPage )
	}, [ filteredItems, pagination ] )

	const handleFilterChange = useCallback( ( patch ) => {
		setFilters( ( prev ) => ( { ...prev, ...patch } ) )
		setPagination( ( prev ) => ( { ...prev, page: 1 } ) )
	}, [] )

	const handleClearFilters = useCallback( () => {
		setFilters( DEFAULT_FILTERS )
		setPagination( ( prev ) => ( { ...prev, page: 1 } ) )
	}, [] )

	useEffect( () => {
		writeToUrl( filters, pagination )
	}, [ filters, pagination ] )

	if ( selectedRow ) {
		return (
			<AnalysisRunDetail
				row={ selectedRow }
				onBack={ () => setSelectedRow( null ) }
			/>
		)
	}

	const ns = 'rank-math-ai-visibility-analyses'

	return (
		<div className={ ns }>

			<SectionHeader
				title={ __( 'Analyses & Transcripts', 'seo-by-rank-math' ) }
				subtitle={ __( 'Global view of all runs with per-query detail.', 'seo-by-rank-math' ) }
			/>

			{ error && (
				<Notice status="error" isDismissible={ false }>
					{ error }
				</Notice>
			) }

			<div className={ `${ ns }__card` }>
				<AnalysesFilterBar
					filters={ filters }
					onFilterChange={ handleFilterChange }
					onClearFilters={ handleClearFilters }
					brandOptions={ brandOptions }
				/>

				<AnalysesTable
					items={ pageItems }
					loading={ loading }
					pagination={ { ...pagination, total, pages } }
					onViewDetail={ ( row ) => setSelectedRow( row ) }
					onPageChange={ ( page ) => setPagination( ( prev ) => ( { ...prev, page: Math.max( 1, page ) } ) ) }
					onPerPageChange={ ( perPage ) => setPagination( { page: 1, perPage: Math.max( 1, perPage ) } ) }
				/>
			</div>

		</div>
	)
}

export default Analyses
PK     £ŠU]uÐëô  ô  2  includes/modules/ai-visibility/assets/src/App.scssnu „[µü¤        /**
 * AI Visibility â€” root app styles.
 */

@import './scss/variables';

.rank-math-ai-visibility {
	margin: 0;

	.rank-math-tabs {
		margin-top: $space-md;
	}

	.rank-math-table tbody .rank-math-table-row:focus {
		outline: none;
	}

	.components-checkbox-control__input[type=checkbox] {
		&:checked,
		&:indeterminate {
			background: #017CBA;
			border-color: #017CBA;
		}
	}

	.components-input-control {
		&__suffix svg,
		&__suffix,
		&__prefix {
			color: #757575;
		}
	}

	.rank-math-table-pagination-buttons {
		display: inline-flex;

		.rank-math-pagination-btn {
			color: #757575;
			border-radius: 2px;

			&:first-child {
				border-top-right-radius: 0;
				margin-right: -1px;
				border-bottom-right-radius: 0;
			}

			&:last-child {
				border-top-left-radius: 0;
				border-bottom-left-radius: 0;
			}
		}

		.rank-math-pagination-input {
			width: auto;
			padding: 0;
		}
	}

	.rank-math-pagination-jump {
		.rank-math-pagination-input {
			width: auto;
			min-height: 28px;
			background: transparent;
		}

		span {
			color: #666666;
		}
	}

	.rank-math-pagination-page-info {
		color: #666666;
	}

	.rank-math-table-footer {
    	padding: 20px 20px;
	}

	@media (min-width: 960px) {
		.components-modal__frame {
			max-height: 80%;
		}
	}

}PK     £ŠU])÷Iï¢6  ¢6  <  includes/modules/ai-visibility/assets/src/Reports/Reports.jsnu „[µü¤        /* global mixpanel */

/**
 * Reports â€” Reports & Export tab.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { round } from 'lodash'

/**
 * WordPress dependencies
 */
import { useState, useCallback, useMemo, useEffect, useRef } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { SelectControl, Notice } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { getInsights } from '../shared/services/api/aiVisibilityApi'
import { TableSkeleton } from '@rank-math/components'
import { Button, LoadingButton, RankBadge, SentimentBadge, SectionHeader, ScoreBadge, DataTable, CountBadge } from '../shared/components'
import useDashboard from '../shared/hooks/useDashboard'
import { getReportBrandParam } from '../utils/urlState'
import { formatDateTime } from '../utils/formatDate'
import downloadJson from '../utils/downloadJson'
import { HelpTooltip } from '@rank-math/components'
import './Reports.scss'

/**
 * ReportStatCard component.
 *
 * @param {Object}             props
 * @param {string}             props.icon        Dashicon class suffix.
 * @param {string}             props.label       Card label.
 * @param {string|number|null} props.value       Numeric value or null for N/A.
 * @param {string}             props.iconBg      CSS background for the icon circle.
 * @param {string}             props.iconColor   Icon colour hex.
 * @param {string}             props.tooltip     Tooltip text for the help icon.
 * @param {string}             [props.className] Optional additional class(es) for the root.
 * @return {JSX.Element} Report stat card.
 */
const ReportStatCard = ( { icon, label, value, iconBg, iconColor, tooltip, className } ) => {
	const ns = 'rank-math-ai-visibility-reports'

	return (
		<div className={ `${ ns }__stat-card${ className ? ` ${ className }` : '' }` }>
			<div
				className={ `${ ns }__stat-icon` }
				style={ { background: iconBg } }
			>
				<span
					className={ `dashicons dashicons-${ icon }` }
					style={ { color: iconColor } }
					aria-hidden="true"
				/>
			</div>
			<div className={ `${ ns }__stat-body` }>
				<span className={ `${ ns }__stat-label` }>
					{ label }
					<HelpTooltip text={ tooltip } />
				</span>
				<span className={ `${ ns }__stat-value${ value === null || value === undefined ? ` ${ ns }__stat-value--na` : '' }` }>
					{ value !== null && value !== undefined ? value : 'N/A' }
				</span>
			</div>
		</div>
	)
}

/**
 * Reports component.
 *
 * @return {JSX.Element} Two-panel reports view.
 */
const Reports = () => {
	const ns = 'rank-math-ai-visibility-reports'

	const { brands, summary: dashboardSummary } = useDashboard()
	const SELECT_BRAND_LABEL = __( 'Select Brand', 'seo-by-rank-math' )
	const brandOptions = useMemo( () => [
		{ label: SELECT_BRAND_LABEL, value: '' },
		...brands.map( ( b ) => ( { label: b.name, value: String( b.id ) } ) ),
	], [ brands ] )

	const [ filters, setFilters ] = useState( () => ( {
		brandId: getReportBrandParam(),
	} ) )
	const setFilter = ( key ) => ( value ) => setFilters( ( prev ) => ( { ...prev, [ key ]: value } ) )

	const [ report, setReport ] = useState( null )
	const [ reportBrand, setReportBrand ] = useState( null )
	const [ loading, setLoading ] = useState( false )
	const [ error, setError ] = useState( null )

	const autoGeneratedRef = useRef( false )
	useEffect( () => {
		if ( ! autoGeneratedRef.current && filters.brandId && brands.length > 0 ) {
			autoGeneratedRef.current = true
			handleGenerate()
		}
	}, [ brands ] )

	// Phase 1: one report row per brand, built client-side from cached data
	// (latest analysis only). Date-range history awaits the Phase 2 endpoint.
	const handleGenerate = useCallback( async () => {
		setLoading( true )
		setError( null )
		setReportBrand( brands.find( ( b ) => String( b.id ) === filters.brandId ) || null )
		try {
			const selected = ( filters.brandId
				? brands.filter( ( b ) => String( b.id ) === filters.brandId )
				: brands
			).filter( ( b ) => b.last_analyzed )

			const rows = selected.map( ( b ) => ( {
				id: b.id,
				score: b.score,
				rank: b.rank,
				sentiment: b.avg_sentiment,
				mentions: b.mentions,
				citations: b.citations,
				competitors: [],
				date: b.last_analyzed,
			} ) )

			// Single-brand report: enrich with competitor names from the
			// cached insights payload.
			if ( filters.brandId && rows.length ) {
				try {
					const data = await getInsights( filters.brandId )
					rows[ 0 ].competitors = ( data?.insights?.competitors ?? [] ).map( ( c ) => c.name )
					rows[ 0 ].queries = ( data?.insights?.query_results ?? [] ).map( ( q ) => ( {
						query: q.query_text ?? '',
						response: q.response ?? '',
					} ) )
				} catch {
					// Competitors and queries are nice-to-have in the report â€” ignore.
				}
			}

			const sum = ( key ) => rows.reduce( ( s, r ) => s + ( r[ key ] ?? 0 ), 0 )
			const reportData = {
				summary: {
					score: filters.brandId
						? rows[ 0 ]?.score ?? null
						: dashboardSummary?.rank_score ?? null,
					avg_sentiment: rows.length
						? Math.round( sum( 'sentiment' ) / rows.length )
						: null,
					total_mentions: sum( 'mentions' ),
					total_citations: sum( 'citations' ),
				},
				details: rows,
			}
			setReport( reportData )

			if ( rankMath.tracking ) {
				const { plugin, email, language, path } = rankMath.tracking
				mixpanel.identify( email )
				mixpanel.track( 'AI Visibility Report Generated', {
					has_data: rows.length > 0,
					context: 'wp_plugin',
					brand: 'rankmath',
					application: 'rankmath',
					plugin,
					path,
					language,
				} )
			}
		} catch ( err ) {
			setError( err?.message || __( 'Failed to generate report.', 'seo-by-rank-math' ) )
		} finally {
			setLoading( false )
		}
	}, [ filters, brands, dashboardSummary ] )

	const summary = report?.summary ?? {}
	const rows = report?.details ?? []

	const previewSubtitle = useMemo( () => {
		return reportBrand ? reportBrand.name : ''
	}, [ reportBrand ] )

	return (
		<div className={ ns }>
			<SectionHeader
				title={ __( 'Reports & Export', 'seo-by-rank-math' ) }
				subtitle={ __( 'Export daily aggregates for a brand.', 'seo-by-rank-math' ) }
			/>

			<div className={ `${ ns }__layout` }>
				<aside className={ `${ ns }__filters` }>

					{ /* Panel header */ }
					<div className={ `${ ns }__filters-header` }>
						<span className="dashicons dashicons-filter" aria-hidden="true" />
						<div>
							<p className={ `${ ns }__filters-title` }>
								{ __( 'Filters', 'seo-by-rank-math' ) }
							</p>
							<p className={ `${ ns }__filters-subtitle` }>
								{ __( 'Select brand and format.', 'seo-by-rank-math' ) }
							</p>
						</div>
					</div>

					{ /* Panel body â€” form fields + CTA */ }
					<div className={ `${ ns }__filters-body` }>

						{ /* Brand â€” SelectControl renders its own associated label */ }
						<div className={ `${ ns }__filter-field` }>
							<SelectControl
								label={ __( 'BRAND', 'seo-by-rank-math' ) }
								value={ filters.brandId }
								options={ brandOptions }
								onChange={ ( value ) => {
									setFilter( 'brandId' )( value )
									if ( ! value ) {
										setReport( null )
										setReportBrand( null )
										setError( null )
									}
								} }
								__next40pxDefaultSize={ true }
								__nextHasNoMarginBottom={ true }
							/>
						</div>

						<LoadingButton
							className={ `${ ns }__generate-btn` }
							onClick={ handleGenerate }
							isLoading={ loading }
							loadingLabel={ __( 'Generatingâ€¦', 'seo-by-rank-math' ) }
							disabled={ ! filters.brandId }
						>
							{ __( 'Generate preview', 'seo-by-rank-math' ) }
						</LoadingButton>

					</div>

				</aside>

				{ /* â”€â”€ Right: preview panel â”€â”€ */ }
				<div className={ `${ ns }__preview` }>

					{ error && (
						<Notice status="error" isDismissible={ false }>
							{ error }
						</Notice>
					) }

					{ loading && <TableSkeleton columns={ 5 } rows={ 4 } /> }

					{ ! report && ! loading && ! error && (
						<div className={ `${ ns }__empty` }>
							<p>{ __( 'Select a brand, then click "Generate preview".', 'seo-by-rank-math' ) }</p>
						</div>
					) }

					{ report && (
						<div className={ `${ ns }__report-card` }>

							{ /* Card header: chart icon + title/subtitle + actions */ }
							<div className={ `${ ns }__preview-header` }>
								<div className={ `${ ns }__preview-title-row` }>
									<span className="dashicons dashicons-chart-bar" aria-hidden="true" />
									<div>
										<p className={ `${ ns }__preview-title` }>
											{ __( 'Preview', 'seo-by-rank-math' ) }
										</p>
										{ previewSubtitle && (
											<p className={ `${ ns }__preview-subtitle` }>
												{ previewSubtitle }
											</p>
										) }
									</div>
								</div>
								<div className={ `${ ns }__preview-actions` }>
									<Button
										variant="secondary"
										onClick={ () => {
											downloadJson( report, 'ai-visibility-report.json' )
											if ( rankMath.tracking ) {
												const { plugin, email, language, path } = rankMath.tracking
												mixpanel.identify( email )
												mixpanel.track( 'Button Clicked', {
													button: 'Download AI Visibility Report',
													context: 'wp_plugin',
													brand: 'rankmath',
													application: 'rankmath',
													plugin,
													path,
													language,
												} )
											}
										} }
									>
										{ __( 'Download JSON', 'seo-by-rank-math' ) }
									</Button>
								</div>
							</div>

							{ /* Card body: stat cards + table */ }
							<div className={ `${ ns }__report-card-body` }>

								{ /* Stat cards */ }
								<div className={ `${ ns }__stat-cards` }>
									<ReportStatCard
										icon=" rm-icon-ai-visibility"
										className="rank-math-ai-visibility-reports-overall-score"
										label={ __( 'Global AI Visibility Score', 'seo-by-rank-math' ) }
										value={ summary.score !== null && summary.score !== undefined
											? `${ summary.score }/100`
											: null
										}
										iconBg="rgba(1,124,186,0.12)"
										iconColor="#017CBA"
										tooltip={ __( 'The overall AI Visibility Score for the selected brand and date range, calculated based on the volume of mentions, sentiment, and other factors.', 'seo-by-rank-math' ) }
									/>
									<ReportStatCard
										icon="smiley"
										className="rank-math-ai-visibility-reports-overall-sentiment"
										label={ __( 'Avg Sentiment', 'seo-by-rank-math' ) }
										value={ summary.avg_sentiment !== null && summary.avg_sentiment !== undefined ? `${ round( summary.avg_sentiment ) }%` : null }
										iconBg="rgba(82,96,185,0.12)"
										iconColor="#5260B9"
										tooltip={ __( 'The average sentiment score across all AI mentions for the selected brand and date range. Calculated by analyzing the sentiment of each mention and averaging the scores.', 'seo-by-rank-math' ) }
									/>
									<ReportStatCard
										icon=" rm-icon-comments"
										className="rank-math-ai-visibility-reports-total-mentions"
										label={ __( 'Total Mentions', 'seo-by-rank-math' ) }
										value={ summary.total_mentions ?? 0 }
										iconBg="rgba(255,171,64,0.15)"
										iconColor="#F59E0B"
										tooltip={ __( 'The total number of AI-generated mentions of the selected brand within the specified date range.', 'seo-by-rank-math' ) }
									/>
									<ReportStatCard
										icon=" rm-icon-misc"
										className="rank-math-ai-visibility-reports-total-citations"
										label={ __( 'Total Citations', 'seo-by-rank-math' ) }
										value={ summary.total_citations ?? 0 }
										iconBg="rgba(66,178,104,0.15)"
										iconColor="#42B268"
										tooltip={ __( 'The total number of AI-generated mentions that include a link to the selected brandâ€™s website within the specified date range.', 'seo-by-rank-math' ) }
									/>
								</div>

								{ /* Per-run data table */ }
								{ rows.length > 0 && (
									<DataTable
										columns={ [
											{
												key: 'score',
												label: __( 'AI Visibility Score', 'seo-by-rank-math' ),
												render: ( row ) => <ScoreBadge score={ row.score ?? null } />,
											},
											{
												key: 'rank',
												label: __( 'Avg Rank', 'seo-by-rank-math' ),
												render: ( row ) => <RankBadge rank={ row.rank ?? null } />,
											},
											{
												key: 'sentiment',
												label: __( 'Sentiment', 'seo-by-rank-math' ),
												render: ( row ) => <SentimentBadge score={ row.sentiment ?? null } />,
											},
											{
												key: 'mentions',
												label: __( 'Mentions', 'seo-by-rank-math' ),
												render: ( row ) => <CountBadge value={ row.mentions ?? null } variant="mentions" />,
											},
											{
												key: 'citations',
												label: __( 'Citations', 'seo-by-rank-math' ),
												render: ( row ) => <CountBadge value={ row.citations ?? null } variant="citations" />,
											},
											{
												key: 'competitors',
												label: __( 'Top competitors', 'seo-by-rank-math' ),
												render: ( row ) => (
													<div className={ `${ ns }__competitors` }>
														{ ( row.competitors || [] ).map( ( c ) => (
															<span key={ c } className={ `${ ns }__competitor-tag` }>{ c }</span>
														) ) }
													</div>
												),
											},
											{
												key: 'date',
												label: __( 'Date', 'seo-by-rank-math' ),
												render: ( row ) => formatDateTime( row.date ),
											},
										] }
										rows={ rows }
										rowKey={ ( row, i ) => row.id ?? i }
									/>
								) }

							</div>
						</div>
					) }

				</div>
			</div>
		</div>
	)
}

Reports.displayName = 'Reports'

export default Reports
PK     £ŠU] x‹ç  ç  >  includes/modules/ai-visibility/assets/src/Reports/Reports.scssnu „[µü¤        /**
 * Reports â€” Reports & Export tab styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-reports {
	display: flex;
	flex-direction: column;
	gap: $space-lg;

	&-total-citations .rank-math-ai-visibility-reports__stat-value,
	&-total-mentions .rank-math-ai-visibility-reports__stat-value {
		font-size: 26px;
	}

	&__layout {
		display: grid;
		grid-template-columns: 1fr 3fr;
		gap: 16px;
	}

	&__filters {
		display: flex;
		flex-direction: column;
		gap: 0;
		padding: 0;
		background: $color-surface;
		border: 1px solid $color-border;
		border-radius: 4px;
		align-self: baseline;
		min-width: 0;
	}

	&__filters-header {
		display: flex;
		align-items: center;
		min-height: 68px;
		gap: 9px;
		padding: 0 18px 0 24px;
		border-bottom: 1px solid $color-border;

		.dashicons {
			font-size: 18px;
			width: 18px;
			height: 18px;
			color: $color-text-muted;
			flex-shrink: 0;
		}
	}

	// Panel body â€” wraps Brand + Date Range + button below the header
	&__filters-body {
		display: flex;
		flex-direction: column;
		gap: 12px;
		padding: 20px 24px 24px;
	}

	// Nested under __filters-header to raise specificity to (0,2,0) and beat WP admin `p` rules
	&__filters-header &__filters-title {
		font-size: 13px;
		font-weight: 500;
		line-height: 16px;
		color: $color-text-primary;
		margin: 0 0 2px;
	}

	&__filters-header &__filters-subtitle {
		font-size: 12px;
		line-height: 20px;
		color: $color-text-secondary;
		margin: 0;
	}

	&__filter-field {
		display: flex;
		flex-direction: column;
		gap: 8px;

		// Override WP SelectControl label
		.components-base-control__label {
			font-size: 11px;
			font-weight: 600;
			color: $color-text-primary;
			letter-spacing: 0.1px;
			text-transform: uppercase;
		}
	}

	// Generate preview button â€” layout only (appearance comes from shared Button component)
	&__generate-btn {
		align-self: flex-start;
		margin-top: 24px;
	}

	// â”€â”€ Right: preview panel â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	&__preview {
		display: flex;
		flex-direction: column;
		gap: $space-lg;
		min-width: 0;  // critical: lets the grid item shrink; without this the wide table overflows
	}

	&__empty {
		display: flex;
		align-items: center;
		justify-content: center;
		min-height: 100%;
		background: $color-surface;
		border: 1px dashed $color-border;
		border-radius: 4px;

		p {
			font-size: 14px;
			color: $color-text-muted;
			margin: 0;
			text-align: center;
		}
	}

	// Card container â€” wraps header + body when report data is loaded
	&__report-card {
		@include card-base;
		overflow: hidden;
	}

	// Preview header: chart icon + title/subtitle + action buttons (card top bar)
	&__preview-header {
		display:         flex;
		align-items:     center;
		justify-content: space-between;
		min-height:      68px;
		padding:         0 18px 0 24px;
		gap:             $space-md;
		border-bottom:   1px solid $color-border;
	}

	&__preview-title-row {
		display:     flex;
		align-items: center;
		gap:         12px;

		.dashicons {
			font-size:  18px;
			width:      18px;
			height:     18px;
			color:      $color-text-muted;
			flex-shrink: 0;
		}
	}

	// Nested under __preview-header to raise specificity to (0,2,0) and beat WP admin `p` rules
	&__preview-header &__preview-title {
		font-size:   13px;
		font-weight: 500;
		line-height: 16px;
		color:       $color-text-primary;
		margin:      0 0 2px;
	}

	&__preview-header &__preview-subtitle {
		font-size:   12px;
		font-weight: 300;
		line-height: 20px;
		color:       $color-text-secondary;
		margin:      0;
	}

	&__preview-actions {
		display:    flex;
		gap:        $space-sm;
		flex-shrink: 0;
		align-items: center;
	}

	// Card body â€” wraps stat cards + table with consistent padding
	&__report-card-body {
		padding: 30px 20px 20px 20px;
		display: flex;
		flex-direction: column;
		gap: 26px;
		min-width: 0;       // inherit grid shrink behaviour
		overflow-x: auto;   // scroll horizontally when table is wider than the panel
	}

	// 4 stat cards row
	&__stat-cards {
		display: grid;
		grid-template-columns: repeat( 4, 1fr );
		gap: 12px;
	}

	&__stat-card {
		@include card-base;
		display:     flex;
		gap:         $space-md;
		padding:     34px 17px;
	}

	// Colored circular icon
	&__stat-icon {
		display: flex;
		align-items: center;
		justify-content: center;
		min-width: 44px;
		flex-shrink: 0;
		width: 45.5px;
		height: 38.52px;
		border-radius: 7.16667px;

		.dashicons {
			font-size: 20px;
			width: 20px;
			height: 20px;
		}
	}

	&__stat-body {
		display: flex;
		flex-direction: column;
		gap: 8px;
		min-width: 0;
	}

	&__stat-label {
		font-size: 12px;
		white-space: nowrap;
		gap: 8px;
    	display: inline-flex;
	}

	&__stat-value {
		font-size: 30px;
		font-weight: 500;
		color: #1e1e1e;
		line-height: 1;

		// "N/A" â€” muted appearance when no real value
		&--na {
			color:       $color-text-secondary;
			font-weight: 400;
		}
	}

	// Per-run data table replaced by shared <DataTable> component (DataTable.scss).
	// Reports uses 14px header font and 10px/24px cell padding â€” override via wrapper.
	&__report-card-body .rank-math-ai-visibility-data-table {
		&__th {
			padding:   15px 18px;
			font-size: 14px;
			color:     $color-text-primary;
		}

		&__td {
			padding: 10px 16px;

			&--date {
				color: #868686;
			}
		}
	}

	// Top competitors â€” inline pill tags
	&__competitors {
		display: flex;
		flex-wrap: wrap;
		gap: 7px;
	}

	&__competitor-tag {
		box-sizing: border-box;
		display: flex;
		flex-direction: row;
		justify-content: center;
		align-items: center;
		padding: 4px 8px;
		gap: 6px;
		border: 1px solid rgba(0, 0, 0, 0.1);
		border-radius: 2px;
		font-weight: 400;
		font-size: 12px;
		line-height: 13px;
		color: rgba(0, 0, 0, 0.5);
	}

}
PK     £ŠU]ÏÓZ   Z   :  includes/modules/ai-visibility/assets/src/Reports/index.jsnu „[µü¤        /**
 * Reports & Export tab.
 *
 * @since 1.0.273
 */
export { default } from './Reports'
PK     £ŠU]éäÙh  h  K  includes/modules/ai-visibility/assets/src/BrandDetail/CompetitorsTable.scssnu „[µü¤        /**
 * CompetitorsTable â€” Brand detail Competitors sub-tab styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-competitors-table {
	max-width: 1146px;
    margin: 0 auto;

	&--loading {
		display:         flex;
		justify-content: center;
		padding:         $space-lg;
	}

	&--error {
		p {
			@include error-state;
		}
	}

	.rank-math-ai-visibility-data-table__td:first-child {
		display:     flex;
		align-items: center;
		gap:         10px;
	}

	&__avatar {
		display:         inline-flex;
		align-items:     center;
		justify-content: center;
		width:           28px;
		height:          28px;
		border-radius:   4px;
		font-size:       12px;
		font-weight:     600;
		color:           $color-btn-primary-text;
		flex-shrink:     0;
		line-height:     1;
	}

	&__name {
		font-size:   13px;
		color:       $color-text-primary;
		font-weight: 400;
	}
}
PK     £ŠU]˜Â÷{ä  ä  D  includes/modules/ai-visibility/assets/src/BrandDetail/BrandHeader.jsnu „[µü¤        /**
 * BrandHeader â€” brand detail page header.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { external } from '@wordpress/icons'
import { Icon } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { Button, CountryFlag } from '../shared/components'
import { formatDateTime } from '../utils/formatDate'
import './BrandHeader.scss'

/**
 * @param {string} url Brand URL from the API.
 * @return {string} URL with https:// prepended if missing.
 */
const getBrandUrl = ( url ) => {
	if ( ! url ) {
		return '#'
	}

	return url.startsWith( 'http' ) ? url : `https://${ url }`
}

/**
 * @param {Object}   props
 * @param {Object}   props.brand
 * @param {Function} [props.onEdit]
 * @return {JSX.Element} Rendered component.
 */
const BrandHeader = ( {
	brand,
	onEdit = () => {},
} ) => {
	const ns = 'rank-math-ai-visibility-brand-header'

	const isActive = brand?.status === 'active'

	return (
		<div className={ ns }>
			<div className={ `${ ns }__card` }>
				<div className={ `${ ns }__content` }>
					<div className={ `${ ns }__identity` }>

						<div className={ `${ ns }__name-row` }>
							<h1 className={ `${ ns }__name` }>{ brand.name }</h1>
							<Button
								variant="secondary"
								onClick={ onEdit }
								className={ `${ ns }__edit-btn` }
							>
								<span className="rm-icon rm-icon-edit" />
								{ __( 'Edit Brand', 'seo-by-rank-math' ) }
							</Button>
						</div>

						<div className={ `${ ns }__url-row` }>
							<a
								className={ `${ ns }__url` }
								href={ getBrandUrl( brand.url ) }
								target="_blank"
								rel="noreferrer"
							>
								{ brand.url }
							</a>
							{ brand.locale && <CountryFlag locale={ brand.locale } /> }
							<a
								className={ `${ ns }__external` }
								href={ getBrandUrl( brand.url ) }
								target="_blank"
								rel="noreferrer"
								aria-label={ __( 'Open brand URL', 'seo-by-rank-math' ) }
							>
								<Icon icon={ external } size={ 14 } />
							</a>
						</div>

						<div className={ `${ ns }__meta-row` }>
							<span className={ `${ ns }__status ${ ns }__status--${ isActive ? 'active' : 'inactive' }` }>
								{ isActive ? __( 'Active', 'seo-by-rank-math' ) : __( 'Inactive', 'seo-by-rank-math' ) }
							</span>
							{ brand.last_analyzed && (
								<span className={ `${ ns }__last-analysis` }>
									<span className="dashicons dashicons-clock" />
									{ __( 'Last analysis:', 'seo-by-rank-math' ) }
									{ ' ' }
									{ formatDateTime( brand.last_analyzed ) }
								</span>
							) }
						</div>

					</div>

					{ brand.description && (
						<div className={ `${ ns }__description-panel` }>
							<strong className={ `${ ns }__description-label` }>
								{ __( 'Description', 'seo-by-rank-math' ) }
							</strong>
							<p className={ `${ ns }__description-text` }>
								{ brand.description }
							</p>
						</div>
					) }

				</div>
			</div>
		</div>
	)
}

export default BrandHeader
PK     £ŠU]è9" i  i  F  includes/modules/ai-visibility/assets/src/BrandDetail/BrandHeader.scssnu „[µü¤        /**
 * BrandHeader
 */

@import '../scss/variables';

.rank-math-ai-visibility-brand-header {
	display:        flex;
	flex-direction: column;
	gap:            0;
	padding: 32px;
	border-bottom: 1px solid $color-border;

	// -------------------------------------------------------------------------
	// Two-column content area.
	// -------------------------------------------------------------------------

	&__content {
		display:         flex;
		align-items:     flex-start;
		justify-content: space-between;
	}

	&__identity {
		display:        flex;
		flex-direction: column;
		flex:           1;
	}

	// Brand name + inline Edit Brand button.
	&__name-row {
		display:     flex;
		align-items: center;
		gap:         16px;
	}

	&__name {
		margin:      0;
		font-size:   26px;
		font-weight: 600;
		line-height: 1.2;
		color:       $color-text-primary;
	}

	&__edit-btn.rank-math-ai-visibility-btn.components-button {
		display: inline-flex;
		align-items: center;
		gap: 6px;
		font-size: 12px;
		height: 24px;
		padding: 0 8px;
		border-color: #C6C6C6;
		color: #757575;
		background: #FCFCFC;
		min-height: 24px;

		.dashicons {
			height: 12px;
			width: 12px;
			font-size: 12px;
			margin: 0;
		}
	}

	// URL + flag + external link row.
	&__url-row {
		display:     flex;
		align-items: center;
		gap:         8px;
	}

	&__url {
		text-decoration: none;
		font-weight: 300;
		font-size: 20px;
		line-height: 28px;
		color: #017CBA;

		&:hover {
			text-decoration: underline;
		}
	}

	&__external {
		color:           #757575;
		display:         inline-flex;
		align-items:     center;
		text-decoration: none;

		&:hover {
			color: $color-btn-primary;
		}

		// WP external icon uses fill
		svg path {
			fill: currentColor;
		}
	}

	// Status badge + last analysis row.
	&__meta-row {
		display: flex;
		align-items: center;
		gap: 10px;
		font-size: 13px;
		margin: 12px 0 0 0;
	}

	&__status {
		display: inline-flex;
		align-items: center;
		padding: 0 10px;
		border-radius: 20px;
		font-size: 11px;
		font-weight: 400;
		border: 1px solid #e0e0e0;

		&--active {
			color:        #2e7d32;
			border-color: #a5d6a7;
			background:   rgba( 46, 125, 50, 0.06 );
		}

		&--inactive {
			color:        $color-text-muted;
			border-color: $color-border;
			background:   transparent;
		}
	}

	&__last-analysis {
		display:     inline-flex;
		align-items: center;
		gap:         4px;
		color:       $color-text-muted;
		font-size:   12px;

		.dashicons {
			height: 14px;
			width: 14px;
			font-size: 14px;
		}
	}

	// -------------------------------------------------------------------------
	// Description panel â€” right column.
	// -------------------------------------------------------------------------

	&__description-panel {
		flex:          0 0 320px;
		padding:       16px;
		border:        1px solid $color-border;
		border-radius: $radius-sm;
		background:    $color-surface;
	}

	&__description-label {
		display:     block;
		font-size:   13px;
		font-weight: 600;
		color:       $color-text-primary;
		margin-bottom: 8px;
	}

	&__description-text {
		margin:      0;
		font-size:   13px;
		line-height: 1.6;
		color:       $color-text-muted;
	}
}
PK     £ŠU] º_þx  x  D  includes/modules/ai-visibility/assets/src/BrandDetail/RunDetail.scssnu „[µü¤        /**
 * RunDetail â€” transcript viewer wrapper styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-run-detail {
	&--loading {
		display:         flex;
		justify-content: center;
		padding:         $space-xl;
	}

	&--error {
		p {
			@include error-state;
		}
	}

	&--empty {
		p {
			font-size: 13px;
			color:     $color-text-muted;
			margin:    0;
		}
	}
}
PK     £ŠU]4 Æ    F  includes/modules/ai-visibility/assets/src/BrandDetail/BrandDetail.scssnu „[µü¤        /**
 * BrandDetail â€” brand detail page layout.
 */

@import '../scss/variables';

.rank-math-ai-visibility-brand-detail {
	display:        flex;
	flex-direction: column;
	gap:            20px;

	&__content {
		background:    $color-surface;
		border:        1px solid $color-border;
		border-radius: $radius-sm;
	}

	&--loading {
		display:         flex;
		justify-content: center;
		padding:         $space-lg;
	}

	&--error {
		padding:  $space-md;
		text-align: center;
		color:    $color-trend-down;
	}

	&__tabs {
		margin-top: $space-sm;
	}

	&__tab {
		padding: 32px;
	}

	.rank-math-ai-visibility-brand-header__name {
		font-weight: 400;
		font-size: 30px;
		line-height: 34px;
		color: #1E1E1E;
		margin: 0;
	}

	.rank-math-ai-visibility-brand-detail__tabs.rank-math-tabs {
		margin: 0;

		.components-tab-panel__tabs {
			padding:       0 16px;
			border-bottom: 1px solid $color-border;
		}

		.components-tab-panel__tabs-item {
			height: 52px !important;
			font-weight: 500;
    		color: #383838;

			&.is-active {
				color: $color-btn-primary;

				&:after {
					background: $color-btn-primary;
					height: 2px;
				}
			}
		}

		.components-button:hover:not(:disabled,[aria-disabled=true]),
		.components-button[aria-expanded=true] {
			color: $color-btn-primary;
		}
	}
}
PK     £ŠU]q<Ä¥à  à  B  includes/modules/ai-visibility/assets/src/BrandDetail/RunDetail.jsnu „[µü¤        /**
 * RunDetail â€” transcript viewer for the brand's latest analysis.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState, useMemo, useEffect } from '@wordpress/element'
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { TableSkeleton } from '@rank-math/components'
import { TranscriptViewer, EmptyState } from '../shared/components'
import './RunDetail.scss'

/**
 * Map an insights query result to the shape TranscriptViewer expects.
 *
 * @param {Object} result   Query result from the insights payload.
 * @param {number} index    Fallback index.
 * @param {Object} analysis Parent analysis meta.
 * @return {Object} Normalised entry.
 */
const toEntry = ( result, index, analysis ) => ( {
	...result,
	id: result.query_id ?? index,
	query: result.query_text ?? '',
	response: result.response ?? '',
	created_at: analysis?.finished_at ?? null,
	duration_seconds: analysis?.duration_seconds ?? null,
	status: result.found ? 'success' : 'partial',
	model: null,
} )

/**
 * @param {Object}      props
 * @param {Object|null} props.insights Latest-analysis insights payload.
 * @param {boolean}     props.loading  Whether insights are loading.
 * @return {JSX.Element} Transcript viewer or loading/empty state.
 */
const RunDetail = ( { insights = null, loading = false } ) => {
	const entries = useMemo(
		() => ( insights?.query_results ?? [] ).map( ( result, i ) => toEntry( result, i, insights?.analysis ) ),
		[ insights ]
	)

	const [ selectedId, setSelectedId ] = useState( null )

	useEffect( () => {
		setSelectedId( entries[ 0 ]?.id ?? null )
	}, [ entries ] )

	const ns = 'rank-math-ai-visibility-run-detail'

	if ( loading ) {
		return <TableSkeleton columns={ 3 } rows={ 4 } />
	}

	if ( ! entries.length ) {
		return (
			<div className={ ns }>
				<EmptyState
					heading={ __( 'No transcripts found', 'seo-by-rank-math' ) }
					description={ __( 'Transcripts will appear here once the first analysis completes.', 'seo-by-rank-math' ) }
				/>
			</div>
		)
	}

	return (
		<div className={ ns }>
			<TranscriptViewer
				entries={ entries }
				selectedEntryId={ selectedId }
				onSelectEntry={ setSelectedId }
			/>
		</div>
	)
}

RunDetail.displayName = 'RunDetail'

export default RunDetail
PK     £ŠU] 1A
  A
  F  includes/modules/ai-visibility/assets/src/BrandDetail/BrandOverview.jsnu „[µü¤        /**
 * BrandOverview â€” Brand detail Overview sub-tab.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { round } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { StatCard } from '../shared/components'
import './BrandOverview.scss'

/**
 * @param {Object}      props
 * @param {Object}      props.brand
 * @param {Object|null} props.insights
 * @param {boolean}     props.loading
 * @return {JSX.Element|null} Rendered component, or null when brand is falsy.
 */
const BrandOverview = ( { brand, insights = null, loading = false } ) => {
	if ( ! brand ) {
		return null
	}

	const placeholder = loading ? 'â€¦' : 'â€”'
	const topCompetitor = insights?.competitors?.[ 0 ]?.name ?? null

	const ns = 'rank-math-ai-visibility-brand-overview'

	return (
		<div className={ ns }>

			<div className={ `${ ns }__stats` }>
				<StatCard
					className={ `${ ns }__stat-card ${ ns }__stat-card--score` }
					icon=" rm-icon-ai-visibility"
					label={ __( 'AI Visibility Score', 'seo-by-rank-math' ) }
					value={ insights?.score !== null && insights?.score !== undefined
						? `${ insights.score }/100`
						: placeholder
					}
					tooltip={ __( 'AI Visibility Score for this brand across AI platforms.', 'seo-by-rank-math' ) }
					analysis={ insights?.analysis }
				/>

				<StatCard
					className={ `${ ns }__stat-card ${ ns }__stat-card--mentions` }
					icon=" rm-icon-comments"
					label={ __( 'Recent Mentions', 'seo-by-rank-math' ) }
					value={ insights?.mentions ?? placeholder }
					tooltip={ __( 'Total brand mentions across AI-generated content.', 'seo-by-rank-math' ) }
					analysis={ insights?.analysis }
				/>

				<StatCard
					className={ `${ ns }__stat-card ${ ns }__stat-card--sentiment` }
					icon="smiley"
					label={ __( 'Avg Sentiments', 'seo-by-rank-math' ) }
					value={ insights?.avg_sentiment !== null && insights?.avg_sentiment !== undefined
						? `${ round( insights.avg_sentiment ) }%`
						: placeholder
					}
					tooltip={ __( 'Average sentiment score across all AI mentions of this brand.', 'seo-by-rank-math' ) }
					analysis={ insights?.analysis }
				/>

				<StatCard
					className={ `${ ns }__stat-card ${ ns }__stat-card--competitor` }
					icon="awards"
					label={ __( 'Top Competitor', 'seo-by-rank-math' ) }
					value={ topCompetitor || placeholder }
					tooltip={ __( 'The competitor brand with the highest share of voice in AI mentions.', 'seo-by-rank-math' ) }
					analysis={ insights?.analysis }
				/>
			</div>

		</div>
	)
}

export default BrandOverview
PK     £ŠU]žÔd¹M
  M
  I  includes/modules/ai-visibility/assets/src/BrandDetail/CompetitorsTable.jsnu „[µü¤        /**
 * CompetitorsTable â€” Brand detail Competitors sub-tab.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { TableSkeleton } from '@rank-math/components'
import { SentimentBadge, EmptyState, CountBadge, DataTable } from '../shared/components'
import './CompetitorsTable.scss'

/**
 * @param {string} name Competitor name.
 * @return {string} Deterministic hex colour from the palette.
 */
const colorFromName = ( name ) => {
	const palette = [ '#E60012', '#107C10', '#1A1A1A', '#1B2838', '#5260B9', '#017CBA', '#F59E0B', '#42B268' ]
	let hash = 0
	for ( let i = 0; i < ( name || '' ).length; i++ ) {
		hash = ( ( hash * 31 ) + name.charCodeAt( i ) ) % palette.length
	}
	return palette[ hash ]
}

/**
 * @param {Object} props
 * @param {string} props.name
 * @return {JSX.Element} Rendered component.
 */
const BrandAvatar = ( { name } ) => (
	<span
		className="rank-math-ai-visibility-competitors-table__avatar"
		style={ { backgroundColor: colorFromName( name ) } }
		aria-hidden="true"
	>
		{ name?.charAt( 0 )?.toUpperCase() ?? '?' }
	</span>
)

/**
 * @param {Object}      props
 * @param {Object|null} props.insights
 * @param {boolean}     props.loading
 * @return {JSX.Element} Rendered component.
 */
const CompetitorsTable = ( { insights = null, loading = false } ) => {
	const competitors = insights?.competitors ?? []

	const ns = 'rank-math-ai-visibility-competitors-table'

	if ( loading ) {
		return <TableSkeleton columns={ 3 } rows={ 4 } />
	}

	if ( ! competitors.length ) {
		return (
			<div className={ ns }>
				<EmptyState
					heading={ __( 'No competitors detected yet', 'seo-by-rank-math' ) }
					description={ __( 'Competitors are automatically identified during analysis runs.', 'seo-by-rank-math' ) }
				/>
			</div>
		)
	}

	const columns = [
		{
			key: 'name',
			label: __( 'Competitor', 'seo-by-rank-math' ),
			width: '50%',
			render: ( row ) => (
				<>
					<BrandAvatar name={ row.name } />
					<span className={ `${ ns }__name` }>{ row.name }</span>
				</>
			),
		},
		{
			key: 'avg_sentiment',
			label: __( 'Avg sentiment', 'seo-by-rank-math' ),
			render: ( row ) => <SentimentBadge score={ row.avg_sentiment } />,
		},
		{
			key: 'mentions',
			label: __( 'Mentions', 'seo-by-rank-math' ),
			render: ( row ) => <CountBadge value={ row.mentions ?? null } variant="mentions" />,
		},
	]

	return (
		<div className={ ns }>
			<DataTable columns={ columns } rows={ competitors } rowKey="name" />
		</div>
	)
}

CompetitorsTable.displayName = 'CompetitorsTable'

export default CompetitorsTable
PK     £ŠU]G ÖÞÿ  ÿ  D  includes/modules/ai-visibility/assets/src/BrandDetail/BrandTopbar.jsnu „[µü¤        /**
 * BrandTopbar â€” header section of the Brand Detail page.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { Button } from '../shared/components'
import PageTopbar from '../shared/components/PageTopbar'

/**
 * @param {Object}   props
 * @param {Function} props.onBack
 * @param {Function} [props.onExport]
 * @return {JSX.Element} Rendered component.
 */
const BrandTopbar = ( {
	onBack,
	onExport = () => {},
} ) => (
	<PageTopbar
		onBack={ onBack }
		title={ __( 'Brand detail', 'seo-by-rank-math' ) }
		actions={
			<Button variant="secondary" onClick={ onExport }>
				{ __( 'Export Report', 'seo-by-rank-math' ) }
			</Button>
		}
	/>
)

export default BrandTopbar
PK     £ŠU]MÃì`g  g  E  includes/modules/ai-visibility/assets/src/BrandDetail/QueriesTable.jsnu „[µü¤        /**
 * QueriesTable â€” Brand detail Queries sub-tab.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useEffect, useCallback } from '@wordpress/element'

/**
 * Internal dependencies
 */
import { TableSkeleton } from '@rank-math/components'
import { getQueries, updateQuery, generateQueries } from '../shared/services/api/aiVisibilityApi'
import { LoadingButton, StatusToggle, EmptyState, DataTable } from '../shared/components'
import { ConfirmModal } from '../shared/Modals'
import { formatLongDate } from '../utils/formatDate'
import './QueriesTable.scss'

/**
 * @param {Object} props
 * @param {number} props.brandId
 * @return {JSX.Element} Queries sub-tab content.
 */
const QueriesTable = ( { brandId } ) => {
	const ns = 'rank-math-ai-visibility-queries-table'

	const [ queries, setQueries ] = useState( [] )
	const [ queryOrder, setQueryOrder ] = useState( [] )
	const [ loading, setLoading ] = useState( true )
	const [ togglingId, setTogglingId ] = useState( null )
	const [ regenConfirm, setRegenConfirm ] = useState( false )
	const [ isRegenerating, setIsRegenerating ] = useState( false )

	const fetchQueries = useCallback( async () => {
		if ( ! brandId ) {
			setQueries( [] )
			setLoading( false )
			return
		}

		setLoading( true )
		try {
			const data = await getQueries( brandId )
			const fetched = Array.isArray( data?.queries ) ? data.queries : []
			setQueryOrder( fetched.map( ( q ) => q.id ) )
			setQueries( fetched )
		} catch {
			setQueries( [] )
		} finally {
			setLoading( false )
		}
	}, [ brandId ] )

	useEffect( () => {
		fetchQueries()
	}, [ fetchQueries ] )

	const handleToggleStatus = useCallback( async ( query, newValue ) => {
		if ( ! brandId ) {
			return
		}

		setTogglingId( query.id )
		setQueries( ( prev ) => {
			const updated = prev.map( ( q ) => q.id === query.id ? { ...q, enabled: newValue } : q )
			return [ ...updated ].sort( ( a, b ) => queryOrder.indexOf( a.id ) - queryOrder.indexOf( b.id ) )
		} )

		try {
			await updateQuery( brandId, query.id, { enabled: newValue } )
		} catch {
			setQueries( ( prev ) => {
				const reverted = prev.map( ( q ) => q.id === query.id ? { ...q, enabled: query.enabled } : q )
				return [ ...reverted ].sort( ( a, b ) => queryOrder.indexOf( a.id ) - queryOrder.indexOf( b.id ) )
			} )
		} finally {
			setTogglingId( null )
		}
	}, [ brandId ] )

	const handleRegenerateQueries = useCallback( async () => {
		if ( ! brandId ) {
			return
		}

		setRegenConfirm( false )
		setIsRegenerating( true )
		setLoading( true )
		try {
			const data = await generateQueries( brandId )
			setQueries( Array.isArray( data?.queries ) ? data.queries : [] )
		} catch {
			await fetchQueries()
		} finally {
			setIsRegenerating( false )
			setLoading( false )
		}
	}, [ brandId, fetchQueries ] )

	return (
		<div className={ ns }>

			{ /* Toolbar */ }
			<div className={ `${ ns }__toolbar` }>
				<LoadingButton
					variant="secondary"
					onClick={ () => queries.length > 0 ? setRegenConfirm( true ) : handleRegenerateQueries() }
					isLoading={ isRegenerating }
					loadingLabel={ __( 'Regeneratingâ€¦', 'seo-by-rank-math' ) }
					iconLeft={ <span className="dashicons dashicons-update" aria-hidden="true" /> }
					disabled={ loading }
				>
					{ __( 'Regenerate baseline queries', 'seo-by-rank-math' ) }
				</LoadingButton>
			</div>

			{ loading && <TableSkeleton columns={ 4 } rows={ 5 } /> }

			{ ! loading && queries.length === 0 && (
				<EmptyState
					heading={ __( 'No queries yet', 'seo-by-rank-math' ) }
					description={ __(
						'Regenerate baseline queries to start tracking how AI answers questions about this brand.',
						'seo-by-rank-math'
					) }
				/>
			) }

			{ /* Table */ }
			{ ! loading && queries.length > 0 && (
				<DataTable
					columns={ [
						{
							key: 'text',
							label: __( 'Query text', 'seo-by-rank-math' ),
							width: '56%',
							render: ( row ) => row.text,
						},
						{
							key: 'created_at',
							label: __( 'Created', 'seo-by-rank-math' ),
							render: ( row ) => formatLongDate( row.created_at ),
						},
						{
							key: 'updated_at',
							label: __( 'Last updated', 'seo-by-rank-math' ),
							render: ( row ) => formatLongDate( row.updated_at ?? row.created_at ),
						},
						{
							key: 'status',
							label: __( 'Status', 'seo-by-rank-math' ),
							width: '120px',
							render: ( row ) => (
								<StatusToggle
									value={ row.enabled !== false }
									onChange={ ( val ) => handleToggleStatus( row, val ) }
									isLoading={ togglingId === row.id }
								/>
							),
						},
					] }
					rows={ queries }
					rowKey="id"
				/>
			) }

			{ regenConfirm && (
				<ConfirmModal
					title={ __( 'Regenerate queries?', 'seo-by-rank-math' ) }
					message={ __(
						'This will replace all existing baseline queries with new AI-generated ones. Continue?',
						'seo-by-rank-math'
					) }
					confirmLabel={ __( 'Regenerate', 'seo-by-rank-math' ) }
					isDestructive={ false }
					onConfirm={ handleRegenerateQueries }
					onCancel={ () => setRegenConfirm( false ) }
				/>
			) }

		</div>
	)
}

export default QueriesTable
PK     £ŠU]G™/O  O  G  includes/modules/ai-visibility/assets/src/BrandDetail/QueriesTable.scssnu „[µü¤        /**
 * QueriesTable â€” Brand detail Queries sub-tab styles.
 */

@import '../scss/variables';

.rank-math-ai-visibility-queries-table {
	display:        flex;
	flex-direction: column;
	gap:            30px;

	&__toolbar {
		display:     flex;
		align-items: center;
		gap:         12px;

		.components-button {
			min-height: 36px;
    		font-weight: 300;
		}

		.dashicons {
			font-size:    14px;
			width:        14px;
			height:       14px;
			line-height:  14px;
		}
	}

	// Table markup replaced by shared <DataTable> component.
	// Table styles now live in DataTable.scss.
	// Column widths are set via the columns[].width prop (inline style on <th>).
	.rank-math-ai-visibility-data-table__th {
		font-weight: 500;
		font-size: 14px;
		line-height: 20px;
		color: #1E1E1E;
		padding: 13px;

		&:first-child {
			padding-left: 35px;
		}
	}

	.rank-math-ai-visibility-data-table__td {
		padding: 30px 16px;
		font-weight: 400;
		font-size: 13px;
		line-height: 19px;
		color: #1E1E1E;

		&:first-child {
			padding: 20px 35px;
		}

		&:nth-child(2), 
		&:nth-child(3) {
			color: #868686;
		}
	}
}PK     £ŠU]ÈjxÂò  ò  H  includes/modules/ai-visibility/assets/src/BrandDetail/BrandOverview.scssnu „[µü¤        /**
 * BrandOverview â€” stat cards row for the Overview sub-tab.
 */

@import '../scss/variables';

.rank-math-ai-visibility-brand-overview {
	display:        flex;
	flex-direction: column;
	gap:            $space-md;

	&__stats {
		display: flex;
		gap:     $card-row-gap;

		// Stack vertically on narrow viewports.
		@media ( max-width: 782px ) {
			flex-direction: column;
		}

		// Each card grows equally.
		.rank-math-ai-visibility-stat-card {
			flex: 1;
		}
	}
}

// -------------------------------------------------------------------------
// Per-card icon colour variants for the Overview sub-tab.
// -------------------------------------------------------------------------

.rank-math-ai-visibility-stat-card--overview {
	// AI Visibility Score â€” blue
	&-score {
		--stat-icon-bg:    rgba( 1, 124, 186, 0.12 );
		--stat-icon-color: #{$color-btn-primary};
	}

	// Recent Mentions â€” amber
	&-mentions {
		--stat-icon-bg:    rgba( 232, 166, 35, 0.12 );
		--stat-icon-color: #E8A623;
	}

	// Avg Sentiments â€” purple/blue
	&-sentiment {
		--stat-icon-bg:    rgba( 82, 96, 185, 0.12 );
		--stat-icon-color: #5260B9;
	}

	// Top Competitor â€” red/pink
	&-competitor {
		--stat-icon-bg:    rgba( 246, 98, 118, 0.12 );
		--stat-icon-color: #F66276;
	}
}
PK     £ŠU]Y‰×¾    >  includes/modules/ai-visibility/assets/src/BrandDetail/index.jsnu „[µü¤        /**
 * BrandDetail â€” brand detail page wrapper.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useEffect, createElement } from '@wordpress/element'
import { TabPanel } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { TableSkeleton } from '@rank-math/components'
import { getBrand, getInsights, updateBrand } from '../shared/services/api/aiVisibilityApi'
import useFetch from '../shared/hooks/useFetch'
import { AddBrandModal } from '../shared/Modals'
import {
	navigateBackToDashboard,
	getActiveBrandTab,
	setActiveBrandTabInUrl,
	navigateToReportsTab,
} from '../utils/urlState'
import BrandTopbar from './BrandTopbar'
import BrandHeader from './BrandHeader'
import BrandOverview from './BrandOverview'
import QueriesTable from './QueriesTable'
import CompetitorsTable from './CompetitorsTable'
import RunDetail from './RunDetail'
import './BrandDetail.scss'

const OverviewView = ( { brand, insights, insightsLoading } ) => (
	<BrandOverview brand={ brand } insights={ insights } loading={ insightsLoading } />
)
const QueriesView = ( { brand } ) => <QueriesTable brandId={ brand?.id } />
const CompetitorsView = ( { insights, insightsLoading } ) => (
	<CompetitorsTable insights={ insights } loading={ insightsLoading } />
)
const TranscriptsView = ( { insights, insightsLoading } ) => (
	<RunDetail insights={ insights } loading={ insightsLoading } />
)

const SUB_TABS = [
	{ name: 'overview', title: __( 'Overview', 'seo-by-rank-math' ), view: OverviewView },
	{ name: 'queries', title: __( 'Queries', 'seo-by-rank-math' ), view: QueriesView },
	{ name: 'competitors', title: __( 'Competitors', 'seo-by-rank-math' ), view: CompetitorsView },
	{ name: 'transcripts', title: __( 'Raw data / Transcripts', 'seo-by-rank-math' ), view: TranscriptsView },
]

/**
 * @param {Object}   props
 * @param {number}   props.brandId
 * @param {Function} [props.onBack]
 * @param {Array}    [props.locales]
 * @return {JSX.Element} Rendered component.
 */
const BrandDetail = ( { brandId, onBack, locales = [] } ) => {
	const handleBack = onBack || navigateBackToDashboard
	const { data: brandData, loading, error, setData: setBrandData } = useFetch(
		() => getBrand( brandId ),
		[ brandId ],
		{ skip: ! brandId, errorMessage: __( 'Failed to load brand.', 'seo-by-rank-math' ) }
	)
	const brand = brandData?.brand ?? null

	const { data: insightsData, loading: insightsLoading } = useFetch(
		() => getInsights( brandId ),
		[ brandId ],
		{ skip: ! brandId, errorMessage: __( 'Failed to load insights.', 'seo-by-rank-math' ) }
	)
	const insights = insightsData?.insights ?? null

	const [ activeSubTab, setActiveSubTab ] = useState( () => getActiveBrandTab() )

	const [ isEditModalOpen, setEditModalOpen ] = useState( false )
	const [ isSaving, setIsSaving ] = useState( false )
	const [ saveError, setSaveError ] = useState( null )

	const handleSaveBrand = async ( data ) => {
		setIsSaving( true )
		setSaveError( null )
		try {
			const result = await updateBrand( brandId, data )
			setBrandData( { brand: result?.brand ?? { ...brand, ...data } } )
			setEditModalOpen( false )
		} catch ( err ) {
			setSaveError( err?.message ?? __( 'Failed to save brand.', 'seo-by-rank-math' ) )
		} finally {
			setIsSaving( false )
		}
	}

	const ns = 'rank-math-ai-visibility-brand-detail'

	const handleExport = () => navigateToReportsTab( brand?.id )

	useEffect( () => {
		const handlePopState = () => setActiveSubTab( getActiveBrandTab() )
		window.addEventListener( 'popstate', handlePopState )
		return () => window.removeEventListener( 'popstate', handlePopState )
	}, [] )

	if ( loading ) {
		return <TableSkeleton columns={ 3 } rows={ 4 } />
	}

	if ( error || ! brand ) {
		return (
			<div className={ `${ ns } ${ ns }--error` }>
				<p>{ error || __( 'Brand not found.', 'seo-by-rank-math' ) }</p>
				<button
					className="button"
					onClick={ handleBack }
				>
					{ __( 'â†� Back to Dashboard', 'seo-by-rank-math' ) }
				</button>
			</div>
		)
	}

	return (
		<div className={ ns }>

			<BrandTopbar
				onBack={ handleBack }
				onExport={ handleExport }
			/>

			<div className={ `${ ns }__content` }>
				<BrandHeader
					brand={ brand }
					onEdit={ () => setEditModalOpen( true ) }
				/>

				<TabPanel
					key={ activeSubTab }
					className={ `rank-math-tabs ${ ns }__tabs` }
					activeClass="is-active"
					initialTabName={ activeSubTab }
					tabs={ SUB_TABS }
					onSelect={ ( tabName ) => {
						setActiveBrandTabInUrl( tabName )
						setActiveSubTab( tabName )
					} }
				>
					{ ( tab ) => (
						<div className={ `${ ns }__tab ${ ns }__tab--${ tab.name }` }>
							{ createElement( tab.view, { brand, insights, insightsLoading } ) }
						</div>
					) }
				</TabPanel>
			</div>

			{ isEditModalOpen && (
				<AddBrandModal
					brand={ brand }
					onSave={ handleSaveBrand }
					onClose={ () => {
						setEditModalOpen( false )
						setSaveError( null )
					} }
					isSaving={ isSaving }
					apiError={ saveError }
					locales={ locales }
				/>
			) }

		</div>
	)
}

export default BrandDetail
PK     £ŠU],Ê�u  u  =  includes/modules/ai-visibility/assets/src/utils/formatDate.jsnu „[µü¤        /**
 * AI Visibility â€” shared date formatting utilities.
 *
 * @since 1.0.273
 */

/**
 * @param {string} iso ISO date string.
 * @return {Date|null} Parsed Date, or null on empty/invalid input.
 */
const parseDate = ( iso ) => {
	if ( ! iso ) {
		return null
	}
	const d = new Date( iso )
	return isNaN( d.getTime() ) ? null : d
}

/**
 * "Mar 10, 2026" â€” short month + day + year.
 *
 * @param {string} iso ISO date string.
 * @return {string} Formatted date or 'â€”'.
 */
export const formatShortDate = ( iso ) => {
	const d = parseDate( iso )
	if ( ! d ) {
		return 'â€”'
	}
	return d.toLocaleDateString( 'en-US', { month: 'short', day: 'numeric', year: 'numeric' } )
}

/**
 * "Mar 10, 2026 at 2:15 PM" â€” short date + 12-hour time.
 *
 * @param {string} iso       ISO date string.
 * @param {string} separator Between date and time. Pass ' Â· ' for dot-separated format.
 * @return {string} Formatted date+time or 'â€”'.
 */
export const formatDateTime = ( iso, separator = ' at ' ) => {
	const d = parseDate( iso )
	if ( ! d ) {
		return 'â€”'
	}
	const date = d.toLocaleDateString( 'en-US', { month: 'short', day: 'numeric', year: 'numeric' } )
	const time = d.toLocaleTimeString( 'en-US', { hour: 'numeric', minute: '2-digit', hour12: true } )
	return `${ date }${ separator }${ time }`
}

/**
 * "10 March 2026" â€” day + long month + year (en-GB).
 *
 * @param {string} iso ISO date string.
 * @return {string} Formatted date or 'â€”'.
 */
export const formatLongDate = ( iso ) => {
	const d = parseDate( iso )
	if ( ! d ) {
		return 'â€”'
	}
	return d.toLocaleDateString( 'en-GB', { day: 'numeric', month: 'long', year: 'numeric' } )
}
PK     £ŠU]L¼Ì÷V  V  ?  includes/modules/ai-visibility/assets/src/utils/downloadJson.jsnu „[µü¤        /**
 * Download an object as a pretty-printed JSON file.
 *
 * @since 1.0.273
 *
 * @param {Object} data     Payload to serialise.
 * @param {string} filename Download filename.
 */
const downloadJson = ( data, filename ) => {
	const blob = new Blob( [ JSON.stringify( data, null, 2 ) ], { type: 'application/json' } )
	const url = URL.createObjectURL( blob )
	const a = document.createElement( 'a' )
	a.href = url
	a.download = filename
	a.style.display = 'none'
	document.body.appendChild( a )
	a.click()
	document.body.removeChild( a )
	URL.revokeObjectURL( url )
}

export default downloadJson
PK     £ŠU]†á2…ô  ô  @  includes/modules/ai-visibility/assets/src/utils/analysisState.jsnu „[µü¤        /**
 * Derive a brand's display analysis state from its `analysis_status`.
 *
 * API status semantics:
 *   success â†’ ran successfully (a future weekly run is masked as success)
 *   partial â†’ last run completed partially
 *   pending â†’ awaiting first run, or an overdue run is due
 *   running â†’ a run is currently in progress
 *   error   â†’ the latest run failed
 *   null    â†’ no analysis at all
 *
 * Completed runs (success/partial) and brands with no analysis show no icon;
 * pending/running surface the running icon, error surfaces the error icon.
 *
 * @since 1.0.273
 */

/**
 * @param {Object} brand Brand rollup row.
 * @return {'running'|'error'|null} null when there's nothing to flag.
 */
export const getAnalysisState = ( brand ) => {
	if ( ! brand ) {
		return null
	}

	if ( brand.status === 'inactive' ) {
		return null
	}

	switch ( brand.analysis_status ) {
		case 'pending':
		case 'running':
			return 'running'
		case 'error':
			return 'error'
		default:
			return null
	}
}
PK     £ŠU]:NÌ×  ×  ;  includes/modules/ai-visibility/assets/src/utils/urlState.jsnu „[µü¤        /**
 * URL / query-param state helpers for the AI Visibility admin app.
 *
 * Tab state lives in `?tab=<slug>` (not hash). Transitions use pushState;
 * a popstate listener in App.js keeps React in sync with browser navigation.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { addQueryArgs, getQueryArg } from '@wordpress/url'

export const DEFAULT_TAB = 'dashboard'
export const DEFAULT_BRAND_TAB = 'overview'

/**
 * @param {string} fallback Fallback when no `tab` param is set.
 * @return {string} Active tab slug.
 */
export const getActiveTab = ( fallback = DEFAULT_TAB ) => {
	return getQueryArg( window.location.href, 'tab' ) || fallback
}

/**
 * Push a tab slug into the URL. No-op if already on that tab.
 *
 * @param {string} tabName Tab slug to activate.
 */
export const setTabInUrl = ( tabName ) => {
	if ( getActiveTab() === tabName ) {
		return
	}

	const url = addQueryArgs( window.location.href, { tab: tabName } )
	window.history.pushState( {}, '', url )
}

/**
 * @return {string|null} Brand UUID from the URL, or null.
 */
export const getActiveBrandId = () => {
	const raw = getQueryArg( window.location.href, 'brand' )
	return raw ? String( raw ) : null
}

/**
 * @param {number} brandId Brand ID to navigate to.
 */
export const navigateToBrand = ( brandId ) => {
	const url = addQueryArgs( window.location.href, {
		brand: brandId,
	} )
	window.history.pushState( {}, '', url )
}

/**
 * Navigate back to the Dashboard by removing brand detail params from the URL.
 */
export const navigateBackToDashboard = () => {
	const url = addQueryArgs( window.location.href, {
		brand: undefined,
		brand_tab: undefined,
	} )
	window.history.pushState( {}, '', url )
}

/**
 * @param {string} fallback Fallback when `brand_tab` param is absent.
 * @return {string} Active brand sub-tab slug.
 */
export const getActiveBrandTab = ( fallback = DEFAULT_BRAND_TAB ) =>
	getQueryArg( window.location.href, 'brand_tab' ) || fallback

/**
 * @param {string} tabName Brand detail sub-tab slug.
 */
export const setActiveBrandTabInUrl = ( tabName ) => {
	if ( getActiveBrandTab() === tabName ) {
		return
	}

	const url = addQueryArgs( window.location.href, { brand_tab: tabName } )
	window.history.pushState( {}, '', url )
}

/**
 * @return {string} Brand ID from `report_brand` param, or ''.
 */
export const getReportBrandParam = () => {
	const raw = getQueryArg( window.location.href, 'report_brand' )
	return raw ? String( raw ) : ''
}

/**
 * Navigate to Reports tab, clearing brand drill-down params. Dispatches
 * popstate so App.js picks up the tab change.
 *
 * @param {number|string} [brandId] Pre-populate the report brand filter.
 */
export const navigateToReportsTab = ( brandId ) => {
	const params = {
		tab: 'reports',
		brand: undefined,
		brand_tab: undefined,
		report_brand: brandId ? String( brandId ) : undefined,
	}
	const url = addQueryArgs( window.location.href, params )
	window.history.pushState( {}, '', url )
	window.dispatchEvent( new window.PopStateEvent( 'popstate' ) )
}
PK     £ŠU]Sîu’¨  ¨  K  includes/modules/ai-visibility/assets/src/shared/components/EmptyState.scssnu „[µü¤        /**
 * EmptyState â€” styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-empty-state {
	display:         flex;
	flex-direction:  column;
	align-items:     center;
	text-align:      center;
	gap:             16px;
	padding:         100px 0;

	&__icon {
		width:           60px;
		height:          60px;
		border-radius:   $empty-state-icon-radius;  // 40 px (rounded rect, not full circle)
		background:      $empty-state-icon-bg;      // rgba(57, 116, 198, 0.10)
		padding:         $empty-state-icon-padding; // 10 px inner padding around SVG
		display:         flex;
		align-items:     center;
		justify-content: center;
		flex-shrink:     0;
		box-sizing:      border-box;

		// Icon SVG / WordPress Icon fills this container.
		svg {
			width:  $empty-state-icon-svg;
			height: $empty-state-icon-svg;
			fill:   $color-btn-primary;
		}
	}

	// ---------------------------------------------------------------------------
	// Heading
	// ---------------------------------------------------------------------------

	.rank-math-ai-visibility-empty-state__heading {
		margin:      0 0 8px 0;
		font-size:   $empty-heading-size;         // 28 px
		font-weight: $empty-heading-weight;       // 500
		line-height: $empty-heading-line-height;  // 34 px
		color:       $empty-heading-color;        // #1e1e1e
	}

	// ---------------------------------------------------------------------------
	// Description
	// ---------------------------------------------------------------------------

	.rank-math-ai-visibility-empty-state__description {
		margin: 0 0 15px 0;
		font-size: 16px;
		font-weight: 300;
		line-height: 23px;
		color: #868686;
		max-width: 580px;
	}

	// CTA button â€” sizing comes from the shared Button component (Button.scss).
	// No local overrides needed; the .rank-math-ai-visibility-btn class handles it.
	.components-button.rank-math-ai-visibility-btn.rank-math-ai-visibility-empty-state__cta {
		font-weight: 300;
	}
}
PK     £ŠU]XHý”  ”  I  includes/modules/ai-visibility/assets/src/shared/components/StatCard.scssnu „[µü¤        /**
 * StatCard â€” styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-stat-card {
	background: #fff;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
    padding: 40px 24px;

	display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 20px;

	flex: 1 1 0;
    min-width: 0;

	&__icon-wrap {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		flex-shrink: 0;
		width: 48px;
		height: 42px;
		background: var( --stat-icon-bg, #f0f0f0 );
		border-radius: 6px;
	}

	&.rank-math-ai-visibility-brand-overview__stat-card {
		&--score {
			.rank-math-ai-visibility-stat-card__icon-wrap {
				background: #017CBA1F;

				.dashicons {
					color: #017CBA;
				}
			}
		}

		&--mentions {
			.rank-math-ai-visibility-stat-card__icon-wrap {
				background: #DF962C1F;

				svg {
					fill: #DF962C;
				}

				.dashicons {
					color: #DF962C;
				}
			}
		}

		&--sentiment {
			.rank-math-ai-visibility-stat-card__icon-wrap {
				background: #5260B91F;

				.dashicons {
					color: #5260B9;
				}
			}
		}

		&--competitor {
			.rank-math-ai-visibility-stat-card__icon-wrap {
				background: #F662761F;

				.dashicons {
					color: #F66276;
				}
			}
		}
	}

	&__icon {
		width:       24px;
		height:      24px;
		flex-shrink: 0;
		// Default: muted grey. Override per card via --stat-icon-color on the root element.
		// SVG icons (fill) and dashicons (color) â€” both controlled by the same variable.
		fill:  var( --stat-icon-color, #{$color-text-muted} );
		color: var( --stat-icon-color, #{$color-text-muted} );

		// Dashicon sizing when used as the icon element.
		&.dashicons {
			width:     20px;
			height:    20px;
			font-size: 20px;
			line-height: 1;
		}
	}

	&__content {
		display: flex;
		flex-direction: column;
		gap: 11px;
		min-width: 0;
	}

	&__label-row {
		display: flex;
		align-items: center;
		gap: 8px;
	}

	&__label {
		font-size: 16px;
		line-height: normal;
		font-weight: 400;
		color: #9b9b9b;
	}

	&--has-data {
		.rank-math-ai-visibility-stat-card__label,
		.rank-math-ai-visibility-stat-card__value {
			color: inherit;
		}
	}

	// Data block â€” wraps value + trend chip.
	&__data {
		display: flex;
		flex-direction: column;
		gap: 8px;
		min-width: 0;
	}

	&__value {
		font-size:   $stat-value-size;
		font-weight: $stat-value-weight;
		line-height: $stat-value-line-height;
		color:       $stat-value-color;
	}

	// Active brands / Rank Score â€” blue
	&--active-brands {
		--stat-icon-bg:    #017CBA1F;
		--stat-icon-color: #017CBA;
	}

	// Analyses in last 24h â€” indigo
	&--analyses {
		--stat-icon-bg:    #5260B91F;
		--stat-icon-color: #5260B9;
	}

	// Avg mentions per brand â€” amber
	&--mentions {
		--stat-icon-bg:    #E8A6231F;
		--stat-icon-color: #E8A623;
	}

	// -------------------------------------------------------------------------
	// Compact modifier â€” reduced padding for dense contexts (e.g. AnalysisRunDetail)
	// -------------------------------------------------------------------------

	&--target-brand .rank-math-ai-visibility-stat-card__icon-wrap {
		background: #017CBA1F;

		.dashicons {
			color: #017CBA;
		}
	}

	&--duration-timing .rank-math-ai-visibility-stat-card__icon-wrap {
		background: #5260B91F;

		.dashicons {
			color: #5260B9;
		}
	}

	&--compact {
		padding: 20px;
	}

	// Sub-label â€” rendered below the value (e.g. a date string).
	&__sub {
		font-size:  12px;
		color:      $color-text-muted;
		margin-top: 2px;
	}
}
PK     £ŠU]Ï“‚	  ‚	  L  includes/modules/ai-visibility/assets/src/shared/components/ActionButtons.jsnu „[µü¤        /**
 * ActionButtons â€” View / Edit / Disable action buttons for a brand table row.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { memo } from '@wordpress/element'
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import Button from './Button'
import './ActionButtons.scss'

/**
 * @param {Object}   props
 * @param {string}   props.status      Brand status ('active' | 'inactive').
 * @param {Function} [props.onView]    View handler.
 * @param {Function} [props.onEdit]    Edit handler.
 * @param {Function} [props.onDisable] Disable/Enable handler.
 * @return {JSX.Element} Rendered component.
 */
const ActionButtons = memo( ( { status, onView, onEdit, onDisable } ) => {
	const ns = 'rank-math-ai-visibility-action-buttons'

	const handleStatus = () => {
		onDisable( status === 'inactive' ? 'activate' : 'deactivate' )
	}

	return (
		<div className={ ns }>

			<Button
				variant="icon"
				className={ `${ ns }__view` }
				onClick={ onView }
				aria-label={ __( 'View', 'seo-by-rank-math' ) }
			>
				<span className={ `${ ns }__inner` }>
					<span className="rm-icon-eye" />
					<span className={ `${ ns }__label` }>{ __( 'View', 'seo-by-rank-math' ) }</span>
				</span>
			</Button>

			<Button
				variant="icon"
				className={ `${ ns }__edit` }
				onClick={ onEdit }
				aria-label={ __( 'Edit', 'seo-by-rank-math' ) }
			>
				<span className={ `${ ns }__inner` }>
					<span className="rm-icon rm-icon-edit" />
					<span className={ `${ ns }__label` }>{ __( 'Edit', 'seo-by-rank-math' ) }</span>
				</span>
			</Button>

			<Button
				variant="icon"
				className={ `${ status === 'inactive' ? `${ ns }__inactive` : `${ ns }__active` }` }
				onClick={ handleStatus }
				aria-label={ status === 'inactive' ? __( 'Activate', 'seo-by-rank-math' ) : __( 'Deactivate', 'seo-by-rank-math' ) }
			>
				{
					status === 'inactive' ? (
						<span className={ `${ ns }__inner` }>
							<span className="dashicons dashicons-controls-play" />
							<span className={ `${ ns }__label` }>{ __( 'Activate', 'seo-by-rank-math' ) }</span>
						</span>
					) : (
						<span className={ `${ ns }__inner` }>
							<span className="rm-icon-off" />
							<span className={ `${ ns }__label` }>{ __( 'Deactivate', 'seo-by-rank-math' ) }</span>
						</span>
					)
				}
			</Button>

		</div>
	)
} )

ActionButtons.displayName = 'ActionButtons'

export default ActionButtons
PK     £ŠU]>s7£    N  includes/modules/ai-visibility/assets/src/shared/components/SectionHeader.scssnu „[µü¤        /**
 * SectionHeader â€” styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-section-header {
	display:        flex;
	flex-direction: column;
	gap:            8px;

	.rank-math-ai-visibility-section-header__title {
		margin:      0;
		font-size:   18px;
		font-weight: 500;
		line-height: 26px;
		color:       $color-text-primary;
	}

	.rank-math-ai-visibility-section-header__subtitle {
		margin:      0;
		font-size:   12px;
		font-weight: 400;
		line-height: 16px;
		color:       $color-text-secondary;
	}
}
PK     £ŠU]0m    I  includes/modules/ai-visibility/assets/src/shared/components/StatusIcon.jsnu „[µü¤        /**
 * StatusIcon â€” inline status indicator (icon + hover-reveal label).
 *
 * The root keeps a fixed footprint; the pill expands as an absolutely
 * positioned overlay, so revealing the label never shifts surrounding layout.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Tooltip } from '@wordpress/components'

/**
 * Internal dependencies
 */
import './StatusIcon.scss'

const VARIANTS = {
	error: {
		icon: 'dashicons-warning',
		label: __( 'Error', 'seo-by-rank-math' ),
		tooltip: __( 'Last analysis failed. It will be retried automatically.', 'seo-by-rank-math' ),
	},
	running: {
		icon: 'dashicons-update',
		label: __( 'Running', 'seo-by-rank-math' ),
		tooltip: __( 'Analysis in progress â€” data will appear in approximately 10 minutes.', 'seo-by-rank-math' ),
	},
	pending: {
		icon: 'dashicons-update',
		label: __( 'Pending', 'seo-by-rank-math' ),
		tooltip: __( 'Analysis in progress â€” data will appear in approximately 10 minutes.', 'seo-by-rank-math' ),
	},
}

/**
 * StatusIcon component.
 *
 * @param {Object}                      props
 * @param {'error'|'running'|'pending'} props.variant Status variant.
 * @return {JSX.Element|null} Status icon, or null for unknown variants.
 */
const StatusIcon = ( { variant } ) => {
	const config = VARIANTS[ variant ]
	if ( ! config ) {
		return null
	}

	const ns = 'rank-math-ai-visibility-status-icon'

	return (
		<Tooltip text={ config.tooltip }>
			<span className={ `${ ns } ${ ns }--${ variant }` }>
				<span className={ `${ ns }__pill` }>
					<span className={ `dashicons ${ config.icon }` } />
					<span className={ `${ ns }__label` }>{ config.label }</span>
				</span>
			</span>
		</Tooltip>
	)
}

StatusIcon.displayName = 'StatusIcon'

export default StatusIcon
PK     £ŠU]fŽÔä¬  ¬  E  includes/modules/ai-visibility/assets/src/shared/components/Button.jsnu „[µü¤        /**
 * Button â€” module-scoped primary button.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { Button as WpButton } from '@wordpress/components'

/**
 * Internal dependencies
 */
import './Button.scss'

/**
 * AI-Visibility primary button.
 *
 * @param {Object}   props
 * @param {string}   [props.variant='primary'] WP Button variant ('primary'|'secondary'|'tertiary'|'link'|'icon').
 * @param {string}   [props.className]         Additional class names.
 * @param {string}   [props.iconVariant]       Icon-button colour sub-variant: 'danger' | 'active' | 'borderless'.
 *                                             Adds `--icon-{variant}` BEM modifier. Consumed here â€” never reaches DOM.
 * @param {*}        [props.iconLeft]          React node rendered before `children` (e.g. a WP icon).
 *                                             Consumed here â€” never reaches DOM.
 * @param {*}        [props.iconRight]         React node rendered after `children`.
 *                                             Consumed here â€” never reaches DOM.
 * @param {boolean}  [props.isDestructive]     Destructive styling (red).
 * @param {boolean}  [props.disabled]          Disabled state.
 * @param {boolean}  [props.isBusy]            Loading spinner state.
 * @param {Function} [props.onClick]           Click handler.
 * @param {*}        props.children            Button label / content.
 *
 * @return {JSX.Element} Button element with AI-Visibility styles and WP Button functionality.
 */
const Button = ( {
	variant = 'primary',
	className = '',
	iconVariant,
	iconLeft,
	iconRight,
	children,
	...rest
} ) => {
	const ns = 'rank-math-ai-visibility-btn'

	const cls = [
		ns,
		`${ ns }--${ variant }`,
		iconVariant && `${ ns }--icon-${ iconVariant }`,
		className,
	]
		.filter( Boolean )
		.join( ' ' )

	return (
		<WpButton
			variant={ variant }
			className={ cls }
			{ ...rest }
		>
			{ iconLeft && (
				<span className={ `${ ns }__icon-left` } aria-hidden="true">
					{ iconLeft }
				</span>
			) }
			{ children }
			{ iconRight && (
				<span className={ `${ ns }__icon-right` } aria-hidden="true">
					{ iconRight }
				</span>
			) }
		</WpButton>
	)
}

export default Button
PK     £ŠU]cËQ¥n  n  M  includes/modules/ai-visibility/assets/src/shared/components/SentimentBadge.jsnu „[µü¤        /**
 * SentimentBadge â€” coloured pill showing an average sentiment score.
 *
 * @since 1.0.273
 */

/**
 * External dependencies
 */
import { round } from 'lodash'

/**
 * Internal dependencies
 */
import './SentimentBadge.scss'

/**
 * Simple smiley face SVG icon â€” coloured via `currentColor` (inherits from badge).
 *
 * @param {Object} props          Component props.
 * @param {string} props.modifier BEM modifier for the badge variant (e.g. 'positive', 'negative').
 * @return {JSX.Element} 12Ã—12 smiley face SVG.
 */
const SmileyIcon = ( { modifier } ) => {
	if ( modifier === 'positive' ) {
		return (
			<svg
				width="12"
				height="12"
				viewBox="0 0 12 12"
				style={ { fill: 'none', flexShrink: 0 } }
				aria-hidden="true"
			>
				<circle cx="6" cy="6" r="5" stroke="currentColor" strokeWidth="1" />
				<circle cx="4" cy="4.8" r="0.8" fill="currentColor" />
				<circle cx="8" cy="4.8" r="0.8" fill="currentColor" />
				<path
					d="M3.5 7 Q6 9 8.5 7"
					stroke="currentColor"
					strokeWidth="1"
					strokeLinecap="round"
				/>
			</svg>
		)
	}

	if ( modifier === 'negative' ) {
		return (
			<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
				<path d="M5.83335 5.38542C5.83335 4.98271 5.50687 4.65625 5.10417 4.65625C4.70146 4.65625 4.375 4.98271 4.375 5.38542C4.375 5.78812 4.70146 6.11467 5.10417 6.11467C5.50687 6.11467 5.83335 5.78812 5.83335 5.38542Z" fill="#F66276" />
				<path d="M8.89567 4.65625C9.2984 4.65625 9.62484 4.98271 9.62484 5.38542C9.62484 5.78812 9.2984 6.11467 8.89567 6.11467C8.493 6.11467 8.1665 5.78818 8.1665 5.38548C8.1665 4.98277 8.493 4.65625 8.89567 4.65625Z" fill="#F66276" />
				<path d="M5.38427 9.48806C5.23378 9.67712 4.95854 9.70833 4.76951 9.55783C4.58048 9.40733 4.54924 9.13211 4.69974 8.94305C5.23746 8.26767 6.06821 7.8335 7.00003 7.8335C7.9319 7.8335 8.76263 8.26767 9.30034 8.94305C9.45084 9.13211 9.41963 9.40733 9.23058 9.55783C9.04158 9.70833 8.7663 9.67712 8.6158 9.48806C8.23699 9.01224 7.65412 8.7085 7.00003 8.7085C6.34599 8.7085 5.76313 9.01224 5.38427 9.48806Z" fill="#F66276" />
				<path fillRule="evenodd" clipRule="evenodd" d="M6.99984 1.1665C3.77817 1.1665 1.1665 3.77817 1.1665 6.99984C1.1665 10.2215 3.77817 12.8332 6.99984 12.8332C10.2215 12.8332 12.8332 10.2215 12.8332 6.99984C12.8332 3.77817 10.2215 1.1665 6.99984 1.1665ZM2.0415 6.99984C2.0415 4.26143 4.26143 2.0415 6.99984 2.0415C9.73824 2.0415 11.9582 4.26143 11.9582 6.99984C11.9582 9.73824 9.73824 11.9582 6.99984 11.9582C4.26143 11.9582 2.0415 9.73824 2.0415 6.99984Z" fill="#F66276" />
			</svg>
		)
	}

	return (
		<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
			<path d="M5.63997 5.38542C5.63997 4.98271 5.31352 4.65625 4.91081 4.65625C4.5081 4.65625 4.18164 4.98271 4.18164 5.38542C4.18164 5.78812 4.5081 6.11467 4.91081 6.11467C5.31352 6.11467 5.63997 5.78812 5.63997 5.38542Z" fill="#E8A623" />
			<path d="M4.7207 8.30566C4.47908 8.30566 4.2832 8.50155 4.2832 8.74316C4.2832 8.98478 4.47908 9.18066 4.7207 9.18066H9.27886C9.52047 9.18066 9.71636 8.98478 9.71636 8.74316C9.71636 8.50155 9.52047 8.30566 9.27886 8.30566H4.7207Z" fill="#E8A623" />
			<path d="M9.08903 4.65625C9.49176 4.65625 9.8182 4.98271 9.8182 5.38542C9.8182 5.78812 9.49176 6.11467 9.08903 6.11467C8.6863 6.11467 8.35986 5.78818 8.35986 5.38548C8.35986 4.98277 8.6863 4.65625 9.08903 4.65625Z" fill="#E8A623" />
			<path fillRule="evenodd" clipRule="evenodd" d="M6.99984 1.1665C3.77817 1.1665 1.1665 3.77817 1.1665 6.99984C1.1665 10.2215 3.77817 12.8332 6.99984 12.8332C10.2215 12.8332 12.8332 10.2215 12.8332 6.99984C12.8332 3.77817 10.2215 1.1665 6.99984 1.1665ZM2.0415 6.99984C2.0415 4.26143 4.26143 2.0415 6.99984 2.0415C9.73824 2.0415 11.9582 4.26143 11.9582 6.99984C11.9582 9.73824 9.73824 11.9582 6.99984 11.9582C4.26143 11.9582 2.0415 9.73824 2.0415 6.99984Z" fill="#E8A623" />
		</svg>
	)
}

/**
 * Resolve BEM modifier and badge hex colour from a numeric sentiment value.
 *
 * @param {number|null|undefined} value Sentiment 0â€“100, or null.
 * @return {{ modifier: string }} BEM modifier for the badge.
 */
const resolveVariant = ( value ) => {
	if ( value === null || value === undefined ) {
		return { modifier: 'neutral' }
	}

	const n = Number( value )

	if ( n >= 70 ) {
		return { modifier: 'positive' }
	}
	if ( n >= 50 ) {
		return { modifier: 'warning' }
	}

	return { modifier: 'negative' }
}

/**
 * SentimentBadge component.
 *
 * @param {Object}      props
 * @param {number|null} props.score Sentiment score 0â€“100, or null for no data.
 * @return {JSX.Element} Coloured sentiment pill with smiley icon and score percentage.
 */
const SentimentBadge = ( { score } ) => {
	const { modifier } = resolveVariant( score )
	const hasValue = score !== null && score !== undefined

	const ns = 'rank-math-ai-visibility-sentiment-badge'

	return (
		<span
			className={ `${ ns } ${ ns }--${ modifier }` }
		>
			{ hasValue && (
				<span className={ `${ ns }__icon` }>
					<SmileyIcon modifier={ modifier } />
				</span>
			) }
			<span className={ `${ ns }__label` }>
				{ hasValue ? `${ round( score ) }%` : 'âˆ’' }
			</span>
		</span>
	)
}

export default SentimentBadge
PK     £ŠU]Ì]ºq  q  H  includes/modules/ai-visibility/assets/src/shared/components/DataTable.jsnu „[µü¤        /**
 * DataTable â€” generic data table for the AI Visibility module.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './DataTable.scss'

/**
 * DataTable component.
 *
 * @param {Object}          props
 * @param {Array}           props.columns     Column definitions (see above).
 * @param {Array}           props.rows        Row data objects.
 * @param {string|Function} [props.rowKey]    Key name or function to derive a unique key per row. Default 'id'.
 * @param {string}          [props.className] Extra class appended to the <table> element.
 * @return {JSX.Element} Rendered data table.
 */
const DataTable = ( { columns = [], rows = [], rowKey = 'id', className = '' } ) => {
	const ns = 'rank-math-ai-visibility-data-table'

	const tableClass = [ ns, className ].filter( Boolean ).join( ' ' )

	const getRowKey = typeof rowKey === 'function'
		? rowKey
		: ( row ) => row[ rowKey ]

	return (
		<table className={ tableClass }>
			<thead>
				<tr>
					{ columns.map( ( col ) => (
						<th
							key={ col.key }
							className={ `${ ns }__th` }
							style={ col.width ? { width: col.width } : undefined }
						>
							{ col.label }
						</th>
					) ) }
				</tr>
			</thead>
			<tbody>
				{ rows.map( ( row, i ) => (
					<tr key={ getRowKey( row, i ) } className={ `${ ns }__row` }>
						{ columns.map( ( col ) => (
							<td key={ col.key } className={ `${ ns }__td ${ ns }__td--${ col.key }` }>
								{ col.render ? col.render( row ) : ( row[ col.key ] ?? 'â€”' ) }
							</td>
						) ) }
					</tr>
				) ) }
			</tbody>
		</table>
	)
}

DataTable.displayName = 'DataTable'

export default DataTable
PK     £ŠU]Eï¨f?  ?  O  includes/modules/ai-visibility/assets/src/shared/components/SentimentBadge.scssnu „[µü¤        /**
 * SentimentBadge â€” styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-sentiment-badge {
	display: inline-flex;
    align-items: center;
    gap: 4px;
    height: 18px;
    padding: 0 6px;
    border-radius: 20px;
    border-width: 1px;
    border-style: solid;
    font-size: 12px;
    font-weight: 400;
    line-height: 1;
    white-space: nowrap;
    min-width: 40px;
    justify-content: center;

	&--positive {
		color:            $color-trend-up;
		background-color: $color-trend-up-bg;
		border-color:     $color-trend-up
	}

	&--warning {
		color:            $color-rank-2;
		background-color: #{$color-rank-2}14;
		border-color:     $color-rank-2
	}

	&--negative {
		color:            $color-trend-down;
		background-color: $color-trend-down-bg;
		border-color:     $color-trend-down
	}

	&--neutral {
		color:            $color-trend-neutral;
		background-color: #{$color-trend-neutral}14;
		border-color:     $color-trend-neutral;
	}

	&__icon {
		flex-shrink: 0;
		display: inline-flex;
	}

	&__label {
		font-size: 11px;
		font-weight: bold;
	}
}
PK     £ŠU]¾§/ŒŽ   Ž   J  includes/modules/ai-visibility/assets/src/shared/components/StartTime.scssnu „[µü¤        /**
 * StartTime component styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-processed-start-time {
    color: #868686;
}PK     £ŠU]ûËMpM  M  K  includes/modules/ai-visibility/assets/src/shared/components/ScoreBadge.scssnu „[µü¤        /**
 * ScoreBadge â€” AI Visibility Score pill (X/100).
 */

@import '../../scss/variables';

.rank-math-ai-visibility-score-badge {
	display: inline-flex;
    align-items: center;
    padding: 3px 6px;
    border-radius: 2px;
    font-size: 11px;
    font-weight: 600;
    white-space: nowrap;
    border: 1px solid #B7B7B7;
    background: rgba(183, 183, 183, 0.1);
    color: #B7B7B7;
    min-width: 44px;
    justify-content: center;

	// Score â‰¥ 70 â€” green
	&--good {
		background:   rgba( 66, 178, 104, 0.1 );
		border-color: #42B268;
		color:        #198B3F;
	}

	// Score 40â€“69 â€” amber
	&--average {
		background:   rgba( 232, 166, 35, 0.1 );
		border-color: #E8A623;
		color:        #D18E08;
	}

	// Score < 40 â€” red
	&--poor {
		background:   rgba( 246, 98, 118, 0.1 );
		border-color: #F66276;
		color:        #F66276;
	}
}
PK     £ŠU]>>å«  «  I  includes/modules/ai-visibility/assets/src/shared/components/EmptyState.jsnu „[µü¤        /**
 * EmptyState â€” centred icon + heading + description + optional CTA.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { Icon } from '@wordpress/components'

/**
 * Internal dependencies
 */
import Button from './Button'
import './EmptyState.scss'

/**
 * EmptyState component.
 *
 * @param {Object}   props
 * @param {*}        props.icon        WordPress icon glyph (from `@wordpress/icons`) passed to <Icon>.
 * @param {string}   props.heading     Primary heading text.
 * @param {string}   props.description Supporting body copy.
 * @param {string}   [props.ctaLabel]  CTA button label. Button omitted when absent.
 * @param {Function} [props.onCta]     CTA click handler. Button omitted when absent.
 *
 * @return {JSX.Element} Centred icon, heading, description, and optional CTA button.
 */
const EmptyState = ( { icon, heading, description, ctaLabel, onCta } ) => {
	const hasCta = ctaLabel && onCta

	const ns = 'rank-math-ai-visibility-empty-state'

	return (
		<div className={ ns }>
			{ icon && (
				<div className={ `${ ns }__icon` } aria-hidden="true">
					<Icon icon={ icon } />
				</div>
			) }

			<h2 className={ `${ ns }__heading` }>
				{ heading }
			</h2>

			<p className={ `${ ns }__description` }>
				{ description }
			</p>

			{ hasCta && (
				<Button
					className={ `${ ns }__cta` }
					onClick={ onCta }
				>
					{ ctaLabel }
				</Button>
			) }
		</div>
	)
}

export default EmptyState
PK     £ŠU] õxž  ž  I  includes/modules/ai-visibility/assets/src/shared/components/PageTopbar.jsnu „[µü¤        /**
 * PageTopbar â€” shared top-bar layout for full-page detail views.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import Button from './Button'
import './PageTopbar.scss'

/**
 * PageTopbar component.
 *
 * @param {Object}      props
 * @param {Function}    props.onBack         Handler for the Back button.
 * @param {string}      [props.backLabel]    Label for the Back button. Defaults to "â†� Back".
 * @param {string}      [props.title]        Page title shown to the right of Back.
 * @param {JSX.Element} [props.actions]      Right-side action buttons.
 * @param {string}      [props.className=''] Extra class on the root element.
 * @return {JSX.Element} Topbar with back + title on the left, actions on the right.
 */
const PageTopbar = ( {
	onBack,
	backLabel,
	title,
	actions,
	className = '',
} ) => {
	const ns = 'rank-math-ai-visibility-page-topbar'

	return (
		<div className={ [ ns, className ].filter( Boolean ).join( ' ' ) }>
			<div className={ `${ ns }__left` }>
				<Button onClick={ onBack }>
					{ backLabel || __( 'â†� Back', 'seo-by-rank-math' ) }
				</Button>
				{ title && (
					<span className={ `${ ns }__title` }>{ title }</span>
				) }
			</div>
			{ actions && (
				<div className={ `${ ns }__actions` }>{ actions }</div>
			) }
		</div>
	)
}

PageTopbar.displayName = 'PageTopbar'

export default PageTopbar
PK     £ŠU]|19sÇ  Ç  L  includes/modules/ai-visibility/assets/src/shared/components/LoadingButton.jsnu „[µü¤        /**
 * LoadingButton â€” Button with built-in loading state.
 *
 * Renders a WP Spinner to the left of the label while loading.
 * Never changes the button colour â€” only adds a spinner and swaps the text.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { Spinner } from '@wordpress/components'

/**
 * Internal dependencies
 */
import Button from './Button'

/**
 * @param {Object}  props
 * @param {boolean} [props.isLoading=false] Swaps label and disables the button. If `iconLeft` is
 *                                          provided, also replaces it with a Spinner while loading.
 * @param {string}  [props.loadingLabel]    Label shown while loading. Falls back to `children + 'â€¦'`.
 * @param {*}       props.children          Default label.
 * @param {boolean} [props.disabled]        Additional disabled condition (independent of isLoading).
 * @param {*}       [props.iconLeft]        Icon shown when not loading. When provided, it is replaced
 *                                          by a Spinner while loading. Omit for text-only buttons.
 * @param {*}       [props.iconRight]       Icon shown to the right; unaffected by loading state.
 * @param {string}  [props.variant]         WP Button variant passed through.
 * @return {JSX.Element} Button with loading state support.
 */
const LoadingButton = ( {
	isLoading = false,
	loadingLabel,
	children,
	disabled,
	iconLeft,
	...rest
} ) => {
	const label = isLoading ? ( loadingLabel ?? `${ children }â€¦` ) : children
	const leftIcon = iconLeft && isLoading ? <Spinner /> : iconLeft

	return (
		<Button
			iconLeft={ leftIcon }
			disabled={ disabled || isLoading }
			{ ...rest }
		>
			{ label }
		</Button>
	)
}

export default LoadingButton
PK     £ŠU]N ŒFÏ  Ï  H  includes/modules/ai-visibility/assets/src/shared/components/DateInput.jsnu „[µü¤        /**
 * DateInput â€” calendar icon + native date picker.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './DateInput.scss'

/**
 * DateInput component.
 *
 * @param {Object}   props
 * @param {string}   props.value       Current date value (YYYY-MM-DD).
 * @param {Function} props.onChange    Change handler â€” receives the native event.
 * @param {string}   props.ariaLabel   Accessible label for the input.
 * @param {string}   [props.id]        Optional id attribute for the input.
 * @param {string}   [props.className] CSS class for the input element.
 * @return {JSX.Element} Calendar icon + date input.
 */
const DateInput = ( { value, onChange, ariaLabel, id, className } ) => (
	<div className="rank-math-ai-visibility-date-input">
		<input
			type="date"
			id={ id }
			value={ value }
			onChange={ onChange }
			aria-label={ ariaLabel }
			className={ className }
		/>
	</div>
)

DateInput.displayName = 'DateInput'

export default DateInput
PK     £ŠU]í�OÝv  v  K  includes/modules/ai-visibility/assets/src/shared/components/StatusToggle.jsnu „[µü¤        /**
 * StatusToggle â€” enabled/disabled checkbox for a query row.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { CheckboxControl } from '@wordpress/components'

/**
 * Internal dependencies
 */
import './StatusToggle.scss'

/**
 * StatusToggle component.
 *
 * @param {Object}   props
 * @param {boolean}  props.value             Checked state â€” true = enabled, false = disabled.
 * @param {Function} props.onChange          Called with the new boolean value on change.
 * @param {boolean}  [props.disabled=false]  Disables interaction when true.
 * @param {boolean}  [props.isLoading=false] Shows in-progress label when true.
 * @return {JSX.Element} Checkbox toggle with contextual label.
 */
const StatusToggle = ( { value, onChange, disabled = false, isLoading = false } ) => {
	let label
	if ( isLoading ) {
		label = value
			? __( 'Enablingâ€¦', 'seo-by-rank-math' )
			: __( 'Disablingâ€¦', 'seo-by-rank-math' )
	} else {
		label = value
			? __( 'Enabled', 'seo-by-rank-math' )
			: __( 'Disabled', 'seo-by-rank-math' )
	}

	return (
		<CheckboxControl
			className="rank-math-ai-visibility-status-toggle"
			label={ label }
			checked={ value }
			onChange={ onChange }
			disabled={ disabled || isLoading }
			__nextHasNoMarginBottom={ true }
		/>
	)
}

StatusToggle.displayName = 'StatusToggle'

export default StatusToggle
PK     ¤ŠU]nn(8    N  includes/modules/ai-visibility/assets/src/shared/components/TranscriptModal.jsnu „[µü¤        /**
 * TranscriptModal â€” two-panel transcript modal.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { Modal } from '@wordpress/components'

/**
 * Internal dependencies
 */
import Button from './Button'
import './TranscriptModal.scss'

/**
 * Apply syntax highlighting to a JSON string.
 * Escapes HTML entities first, then wraps tokens in <span class="json-*"> elements.
 * Safe to use with dangerouslySetInnerHTML since input is our own serialised data.
 *
 * Colour classes (defined in TranscriptModal.scss):
 *   .json-key     â†’ amber  #F2B02D  (object keys)
 *   .json-string  â†’ teal   #5DBEC4  (string values)
 *   .json-number  â†’ white  #e5e7eb  (numbers)
 *   .json-boolean â†’ teal   #5DBEC4  (true / false)
 *   .json-null    â†’ grey   #9ca3af  (null)
 *
 * @param {string} json JSON string to highlight.
 * @return {string} HTML string with <span> tokens.
 */
const highlightJson = ( json ) => {
	// 1. Escape HTML entities.
	const escaped = json
		.replace( /&/g, '&amp;' )
		.replace( /</g, '&lt;' )
		.replace( />/g, '&gt;' )

	// 2. Tokenise and wrap.
	return escaped.replace(
		// Matches: "key":  |  "string value"  |  true/false/null  |  numbers
		/("(?:\\u[a-fA-F0-9]{4}|\\[^u]|[^\\"])*"(?:\s*:)?|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,
		( token ) => {
			if ( token.endsWith( ':' ) || ( token.startsWith( '"' ) && token.endsWith( '":' ) ) ) {
				return `<span class="json-key">${ token }</span>`
			}
			if ( token.startsWith( '"' ) ) {
				return `<span class="json-string">${ token }</span>`
			}
			if ( token === 'true' || token === 'false' ) {
				return `<span class="json-boolean">${ token }</span>`
			}
			if ( token === 'null' ) {
				return `<span class="json-null">${ token }</span>`
			}
			return `<span class="json-number">${ token }</span>`
		}
	)
}

/**
 * Copy text to clipboard with execCommand fallback.
 *
 * @param {string}   text      Text to copy.
 * @param {Function} onSuccess Called after successful copy.
 */
const copyToClipboard = ( text, onSuccess ) => {
	const done = () => {
		onSuccess()
	}

	if ( window.navigator.clipboard ) {
		window.navigator.clipboard.writeText( text ).then( done ).catch( () => fallback() )
	} else {
		fallback()
	}

	function fallback() {
		const el = document.createElement( 'textarea' )
		el.value = text
		el.style.cssText = 'position:fixed;top:0;left:0;opacity:0;pointer-events:none'
		document.body.appendChild( el )
		el.focus()
		el.select()
		try {
			document.execCommand( 'copy' )
			done()
		} catch {
			// Silently swallow â€” clipboard unavailable in this context.
		}
		document.body.removeChild( el )
	}
}

/**
 * TranscriptModal component.
 *
 * @param {Object}   props
 * @param {Object}   props.entry   The transcript entry to display.
 * @param {Function} props.onClose Called when the modal should close.
 * @return {JSX.Element} Two-panel transcript modal.
 */
/**
 * Prepare an entry for JSON serialisation.
 * Parses `extraction_data` if it is a JSON string so it renders as a nested
 * object rather than an escaped string.
 *
 * @param {Object} entryObj The transcript entry.
 * @return {Object} Entry with `extraction_data` parsed.
 */
const prepareEntry = ( entryObj ) => {
	if ( typeof entryObj.extraction_data !== 'string' ) {
		return entryObj
	}
	try {
		return { ...entryObj, extraction_data: JSON.parse( entryObj.extraction_data ) }
	} catch {
		return entryObj
	}
}

const TranscriptModal = ( { entry, onClose } ) => {
	const ns = 'rank-math-ai-visibility-transcript-modal'
	const [ copiedText, setCopiedText ] = useState( false )
	const [ copiedJson, setCopiedJson ] = useState( false )

	const handleCopyText = () => {
		const text = [
			__( 'Query:', 'seo-by-rank-math' ) + ' ' + ( entry.query || '' ),
			'',
			__( 'Response:', 'seo-by-rank-math' ) + ' ' + ( entry.response || entry.excerpt || '' ),
		].join( '\n' )
		copyToClipboard( text, () => {
			setCopiedText( true )
			setTimeout( () => setCopiedText( false ), 2000 )
		} )
	}

	const handleCopyJson = () => {
		copyToClipboard( JSON.stringify( prepareEntry( entry ), null, 2 ), () => {
			setCopiedJson( true )
			setTimeout( () => setCopiedJson( false ), 2000 )
		} )
	}

	return (
		<Modal
			title={ (
				<span className={ `${ ns }__modal-title` }>
					<span className="dashicons rm-icon-comments" aria-hidden="true" />
					{ __( 'Transcript', 'seo-by-rank-math' ) }
				</span>
			) }
			onRequestClose={ onClose }
			className={ `${ ns }__wrapper` }
			size="large"
		>
			<div className={ ns }>

				<div className={ `${ ns }__left` }>

					<div className={ `${ ns }__left-header` }>
						<Button
							variant="secondary"
							className={ `${ ns }__copy-btn` }
							onClick={ handleCopyText }
							iconLeft={ <span className="dashicons dashicons-clipboard" /> }
						>
							{ copiedText
								? __( 'Copied!', 'seo-by-rank-math' )
								: __( 'Copy Raw Text', 'seo-by-rank-math' )
							}
						</Button>
					</div>

					<div className={ `${ ns }__sections` }>
						<div className={ `${ ns }__section` }>
							<div className={ `${ ns }__section-left` }>
								<span className={ `${ ns }__section-icon` }>
									<span className="dashicons dashicons-admin-users" aria-hidden="true" />
								</span>
							</div>
							<div className={ `${ ns }__section-right` }>
								<div className={ `${ ns }__section-label` }>
									{ __( 'Original Query', 'seo-by-rank-math' ) }
								</div>
								<div className={ `${ ns }__content-box` }>
									{ entry.query || 'â€”' }
								</div>
							</div>
						</div>

						<div className={ `${ ns }__section` }>
							<div className={ `${ ns }__section-left` }>
								<span className={ `${ ns }__section-icon` }>
									<span className="dashicons dashicons-superhero-alt" aria-hidden="true" />
								</span>
							</div>
							<div className={ `${ ns }__section-right` }>
								<div className={ `${ ns }__section-label` }>
									{ __( 'Model Response', 'seo-by-rank-math' ) }
								</div>
								<div className={ `${ ns }__content-box ${ ns }__content-box--response` }>
									{ entry.response || entry.excerpt || 'â€”' }
								</div>
							</div>
						</div>
					</div>

				</div>

				<div className={ `${ ns }__right` }>

					<div className={ `${ ns }__right-header` }>
						<div className={ `${ ns }__right-title` }>
							<span className={ `${ ns }__json-badge` }>{ '{}' }</span>
							{ __( 'Extracted Signals', 'seo-by-rank-math' ) }
						</div>
						<Button
							variant="secondary"
							onClick={ handleCopyJson }
							className={ `${ ns }__copy-json-btn` }
							iconLeft={ <span className="dashicons dashicons-clipboard" /> }
						>
							{ copiedJson
								? __( 'Copied!', 'seo-by-rank-math' )
								: __( 'Copy JSON', 'seo-by-rank-math' )
							}
						</Button>
					</div>

					<div className={ `${ ns }__json-viewer` }>
						{ /* dangerouslySetInnerHTML is safe: content is our own serialised JSON */ }
						<pre
							className={ `${ ns }__json-pre` }
							// eslint-disable-next-line react/no-danger
							dangerouslySetInnerHTML={ {
								__html: highlightJson( JSON.stringify( prepareEntry( entry ), null, 2 ) ),
							} }
						/>
					</div>

				</div>

			</div>
		</Modal>
	)
}

TranscriptModal.displayName = 'TranscriptModal'

export default TranscriptModal
PK     ¤ŠU]{…üŒ  Œ  L  includes/modules/ai-visibility/assets/src/shared/components/CountryFlag.scssnu „[µü¤        /**
 * CountryFlag â€” styles.
 */

@import '../../scss/variables';

$country-flag-bg:     #6D7A8717;
$country-flag-border: #CECECE;

.rank-math-ai-visibility-country-flag {
	display:         inline-flex;
	align-items:     center;
	gap:             2px;
	height:          16px;
	padding:         0 6px;
	border-radius: 	 2px;
	border:          1px solid $country-flag-border;
	background:      $country-flag-bg;
	font-size:       11px;
	font-weight:     400;
	line-height:     1;
	white-space:     nowrap;
	color:           $color-text-muted;

	&__emoji {
		font-size: 11px;
		line-height: 1;
	}

	&__code {
		font-size:   11px;
		line-height: 1;
	}
}
PK     ¤ŠU]8^î¯ë  ë  H  includes/modules/ai-visibility/assets/src/shared/components/StartTime.jsnu „[µü¤        /**
 * StartTime â€” formatted start-time cell for the analyses table.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { memo } from '@wordpress/element'

/**
 * Internal dependencies
 */
import { formatDateTime } from '../../utils/formatDate'
import './StartTime.scss'

/**
 * @param {Object} props
 * @param {string} [props.value] ISO date string from the API.
 * @return {JSX.Element} Rendered component.
 */
const StartTime = memo( ( { value = '-' } ) => {
	const ns = 'rank-math-ai-visibility-processed-start-time'

	if ( value && value !== '-' ) {
		value = formatDateTime( value ) || value
	}

	return (
		<div className={ ns }>
			{ value }
		</div>
	)
} )

StartTime.displayName = 'StartTime'

export default StartTime
PK     ¤ŠU]Gü    I  includes/modules/ai-visibility/assets/src/shared/components/ScoreBadge.jsnu „[µü¤        /**
 * ScoreBadge â€” AI Visibility Score pill (X/100).
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './ScoreBadge.scss'

/**
 * Resolve the BEM modifier from a numeric score.
 *
 * @param {number|null|undefined} score AI Visibility score 0â€“100.
 * @return {string} BEM modifier: 'good' | 'average' | 'poor' | 'neutral'.
 */
const getVariant = ( score ) => {
	if ( score === null || score === undefined ) {
		return 'neutral'
	}
	const n = Number( score )
	if ( n >= 70 ) {
		return 'good'
	}
	if ( n >= 40 ) {
		return 'average'
	}
	return 'poor'
}

/**
 * ScoreBadge component.
 *
 * @param {Object}      props
 * @param {number|null} props.score            AI Visibility score 0â€“100, or null for no data.
 * @param {boolean}     [props.showOutOf=true] Append "/100" after the score.
 * @return {JSX.Element} Coloured score pill.
 */
const ScoreBadge = ( { score, showOutOf = true } ) => {
	const variant = getVariant( score )
	const hasValue = score !== null && score !== undefined
	let label = '-/-'
	if ( hasValue ) {
		label = showOutOf ? `${ score } / 100` : String( score )
	}

	const ns = 'rank-math-ai-visibility-score-badge'

	return (
		<span className={ `${ ns } ${ ns }--${ variant }` }>
			{ label }
		</span>
	)
}

export default ScoreBadge
PK     ¤ŠU]Ú"OÝ  Ý  P  includes/modules/ai-visibility/assets/src/shared/components/TranscriptModal.scssnu „[µü¤        /**
 * TranscriptModal â€” two-panel transcript modal styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-transcript-modal {
	display: grid;
	grid-template-columns: 56fr 44fr;
	flex:       1 1 0;
	min-height: 0;
	overflow: hidden;
	height: 100%;
    max-height: 50vh;

	&__modal-title {
		display: flex;
		align-items: center;
		justify-content: center;
		gap: 8px;
	}

	// Override WP Modal
	&__wrapper {
		.components-modal__frame {
			max-width:      1130px;
			width:          92vw;
			max-height:     90vh;
			display:        flex !important;
			flex-direction: column !important;
		}

		.components-modal__header {
			flex-shrink: 0;
    		padding: 22px 28px;
			border-bottom: 1px solid #E0E0E0;

			.components-modal__header-heading {
				font-size: 13px;
			}
		}

		.components-modal__content {
			padding:  0 !important;
			overflow: hidden;
			flex:     1 1 0;
			min-height: 0;
			display:  flex;
			flex-direction: column;
		}
	}

	&__section-right {
		flex: 1;
	}

	&__left,
	&__right {
		display: flex;
		flex-direction: column;
		height: 100%;
		overflow: hidden;
	}

	&__sections,
	&__json-viewer {
		flex: 1;
		overflow-y: auto;
		min-height: 0;
	}

	&__left {
		display: flex;
		flex-direction: column;
		gap: 4px;
		padding: 25px;
		background: $color-surface;
		border-right: 1px solid $color-border;
		overflow-y: auto;
	}

	&__left-header {
		display: flex;
		justify-content: flex-end;
	}

	// "Copy Raw Text" â€” small pill button in left header
	&__copy-btn {
		&.rank-math-ai-visibility-btn.components-button {
			font-size:  12px;
			padding:    4px 10px;
			min-height: 28px;
			height:     28px;
			color:      $color-text-muted;
			border-color: $color-border;
			background: transparent;

			&:hover {
				color:        $color-btn-primary;
				border-color: $color-btn-primary;
				background:   transparent;
			}

			.dashicons {
				font-size: 13px;
				width:     13px;
				height:    13px;
			}
		}
	}

	&__right {
		.rank-math-ai-visibility-transcript-modal__copy-json-btn.rank-math-ai-visibility-btn.components-button {
			color: #C6C6C6;
			border-color: #C6C6C6;
		}
	}

	&__sections {
		gap: 40px;
		display: flex;
		flex-direction: column;
	}

	&__section {
		display: flex;
		gap: 10px;
	}

	&__section-label {
		display: flex;
		align-items: center;
		gap: 10px;
		font-size: 12px;
		color: #868686;
		font-weight: 500;
		margin-bottom: 8px;
	}

	&__section-icon {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		width: 34px;
		height: 34px;
		min-width: 30px;
		border-radius: 50%;
		background: #fff;
		border: 1px solid #E3E3E3;
		color: #1E1E1E;

		.dashicons {
			font-size: 16px;
			width: 16px;
			height: 16px;
		}
	}

	&__content-box {
		padding: 20px 24px;
		border: 1px solid $color-border;
		border-radius: 0 11px 11px 11px;
		font-size: 12px;
		color: $color-text-primary;
		line-height: 1.6;
		background: $color-surface;
		white-space: pre-wrap;

		&--response {
			max-height: 280px;
			overflow-y: auto;
		}
	}

	&__right {
		display: flex;
		flex-direction: column;
		background: #1c1c1c;
		overflow: hidden;
	}

	&__right-header {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 20px 40px;
		flex-shrink: 0;
	}

	&__right-title {
		display: flex;
		align-items: center;
		gap: 10px;
		font-size: 13px;
		font-weight: 500;
		color: #C6C6C6;
	}

	&__json-badge {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		width: 34px;
		height: 34px;
		border-radius: 50%;
		background: #fff;
		font-size: 11px;
		font-weight: 400;
		color: #1E1E1E;
		font-family: monospace;
	}

	// "Copy JSON" â€” small pill button on dark header
	&__copy-json-btn {
		&.rank-math-ai-visibility-btn.components-button {
			font-size:   12px;
			padding:     4px 10px;
			min-height:  28px;
			height:      28px;
			color:       #9ca3af;
			background:  rgba( 255, 255, 255, 0.06 );
			border:      1px solid rgba( 255, 255, 255, 0.12 );

			&:hover {
				color:       #e5e7eb;
				background:  rgba( 255, 255, 255, 0.12 );
				border-color: rgba( 255, 255, 255, 0.25 );
			}

			.dashicons {
				font-size: 13px;
				width:     13px;
				height:    13px;
			}
		}
	}

	&__json-viewer {
		flex: 1;
		overflow-y: auto;
		padding: 0 40px;
	}

	&__json-pre {
		margin: 0;
		font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
		font-size: 12px;
		line-height: 1.7;
		color: #d1d5db;
		white-space: pre;
		overflow-x: auto;

		.json-key     { color: #F2B02D; margin-left: 8px; }   // amber  â€” object keys
		.json-string  { color: #5DBEC4; }   // teal   â€” string values
		.json-number  { color: #e5e7eb; }   // white  â€” numbers
		.json-boolean { color: #5DBEC4; }   // teal   â€” true / false
		.json-null    { color: #9ca3af; }   // grey   â€” null
	}
}
PK     ¤ŠU]ÈëN    J  includes/modules/ai-visibility/assets/src/shared/components/DataTable.scssnu „[µü¤        /**
 * DataTable â€” shared data table styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-data-table {
	@include table-base;

	&__th {
		@include table-header-cell;
	}

	&__row {
		@include table-row-base;
	}

	&__td {
		@include table-body-cell;
	}
}
PK     ¤ŠU]à5Ré.  .  O  includes/modules/ai-visibility/assets/src/shared/components/TranscriptViewer.jsnu „[µü¤        /**
 * TranscriptViewer â€” two-panel transcript viewer.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState, useMemo } from '@wordpress/element'
import { __ } from '@wordpress/i18n'
import { SelectControl } from '@wordpress/components'

/**
 * Internal dependencies
 */
import TranscriptModal from './TranscriptModal'
import StatusBadge from './StatusBadge'
import DateInput from './DateInput'
import { formatDateTime } from '../../utils/formatDate'
import './TranscriptViewer.scss'

/**
 * Format ISO timestamp as "Apr 15, 2026 Â· 10:00 AM".
 *
 * @param {string} isoStr ISO date string.
 * @return {string} Formatted timestamp or 'â€”'.
 */
const formatTimestamp = ( isoStr ) => formatDateTime( isoStr, ' Â· ' )

/**
 * @param {Object}   props
 * @param {Object}   props.entry            Transcript entry data.
 * @param {boolean}  props.isSelected       Whether this card is active.
 * @param {Function} props.onSelect         Called with entry.id on left panel click.
 * @param {Function} props.onViewTranscript Called with full entry object when "View >" is clicked.
 * @return {JSX.Element} Rendered component.
 */
const EntryCard = ( { entry, isSelected, onSelect, onViewTranscript = () => {} } ) => {
	const ns = 'rank-math-ai-visibility-transcript-viewer'
	const modelName = entry.model || entry.platform || ''

	return (
		<div
			role="button"
			tabIndex={ 0 }
			className={ [
				`${ ns }__entry-card`,
				isSelected ? `${ ns }__entry-card--selected` : '',
			].filter( Boolean ).join( ' ' ) }
			onClick={ () => onSelect( entry.id ) }
			onKeyDown={ ( e ) => ( e.key === 'Enter' || e.key === ' ' ) && onSelect( entry.id ) }
			aria-current={ isSelected ? 'true' : undefined }
		>
			<div className={ `${ ns }__entry-meta` }>
				<span className={ `${ ns }__entry-timestamp` }>
					{ formatTimestamp( entry.created_at ) }
					{ modelName && ` Â· ${ modelName }` }
				</span>
				<StatusBadge status={ entry.status } />
			</div>

			<p className={ `${ ns }__entry-query-text` }>
				{ entry.query || 'â€”' }
			</p>

			<div className={ `${ ns }__entry-footer` }>
				{ entry.duration_seconds !== null && entry.duration_seconds !== undefined && (
					<span className={ `${ ns }__entry-duration` }>
						<span className="dashicons dashicons-clock" aria-hidden="true" />
						{ entry.duration_seconds }s
					</span>
				) }
				<span
					role="button"
					tabIndex={ 0 }
					className={ `${ ns }__entry-view-link` }
					onClick={ ( e ) => {
						e.stopPropagation(); onViewTranscript( entry )
					} }
					onKeyDown={ ( e ) => ( e.key === 'Enter' || e.key === ' ' ) && onViewTranscript( entry ) }
				>
					{ __( 'View', 'seo-by-rank-math' ) }
					<span className="dashicons dashicons-arrow-right-alt2" aria-hidden="true" />
				</span>
			</div>
		</div>
	)
}

/**
 * @param {Object}      props
 * @param {Object|null} props.entry Selected entry, or null.
 * @return {JSX.Element} Right-panel transcript preview.
 */
const TranscriptDetail = ( { entry } ) => {
	const ns = 'rank-math-ai-visibility-transcript-viewer'

	return (
		<div className={ `${ ns }__detail` }>

			<div className={ `${ ns }__detail-header` }>
				<span className="dashicons rm-icon-comments" aria-hidden="true" />
				<span className={ `${ ns }__detail-header-title` }>
					{ __( 'Transcript preview', 'seo-by-rank-math' ) }
				</span>
			</div>

			{ entry ? (
				<div className={ `${ ns }__detail-content` }>

					<div className={ `${ ns }__section` }>
						<div className={ `${ ns }__section-left` }>
							<span className="dashicons dashicons-admin-users" aria-hidden="true" />
						</div>
						<div className={ `${ ns }__section-right` }>
							<div className={ `${ ns }__section-label` }>
								{ __( 'Original Query', 'seo-by-rank-math' ) }
							</div>
							<div className={ `${ ns }__query-box` }>
								{ entry.query || 'â€”' }
							</div>
						</div>
					</div>

					<div className={ `${ ns }__section` }>
						<div className={ `${ ns }__section-left` }>
							<span className="dashicons dashicons-superhero-alt" aria-hidden="true" />
						</div>
						<div className={ `${ ns }__section-right` }>
							<div className={ `${ ns }__section-label` }>
								{ __( 'Model Response', 'seo-by-rank-math' ) }
							</div>
							<div className={ `${ ns }__response-box` }>
								{ entry.response || entry.excerpt || 'â€”' }
							</div>
						</div>
					</div>

				</div>
			) : (
				<div className={ `${ ns }__detail-empty` }>
					<p>{ __( 'Select a query to preview its transcript.', 'seo-by-rank-math' ) }</p>
				</div>
			) }

		</div>
	)
}

/**
 * @param {Object}   props
 * @param {Array}    [props.entries=[]]      Transcript entry objects.
 * @param {*}        [props.selectedEntryId] ID shown in the detail panel.
 * @param {Function} [props.onSelectEntry]   Called with entry ID on selection.
 * @return {JSX.Element} Two-panel viewer.
 */
const TranscriptViewer = ( {
	entries = [],
	selectedEntryId = null,
	onSelectEntry = () => {},
} ) => {
	const ns = 'rank-math-ai-visibility-transcript-viewer'

	const [ dateFilter, setDateFilter ] = useState( '' )
	const [ queryFilter, setQueryFilter ] = useState( '' )
	const [ modalEntry, setModalEntry ] = useState( null )

	const queryOptions = useMemo( () => [
		{ label: __( 'All queries', 'seo-by-rank-math' ), value: '' },
		...entries.map( ( e ) => {
			let label = `Entry ${ e.id }`
			if ( e.query ) {
				label = e.query.length > 60 ? e.query.slice( 0, 60 ) + 'â€¦' : e.query
			}
			return { label, value: String( e.id ) }
		} ),
	], [ entries ] )

	const filteredEntries = useMemo( () => {
		let result = entries
		if ( dateFilter ) {
			result = result.filter( ( e ) => e.created_at?.startsWith( dateFilter ) )
		}
		if ( queryFilter ) {
			result = result.filter( ( e ) => String( e.id ) === queryFilter )
		}
		return result
	}, [ entries, dateFilter, queryFilter ] )

	const effectiveId = selectedEntryId ?? filteredEntries[ 0 ]?.id ?? null
	const selectedEntry = entries.find( ( e ) => e.id === effectiveId ) ?? null

	return (
		<div className={ ns }>
			<div className={ `${ ns }__left` }>
				<div className={ `${ ns }__filter-bar` }>
					<div className={ `${ ns }__date-filter` }>
						<DateInput
							value={ dateFilter }
							onChange={ ( e ) => setDateFilter( e.target.value ) }
							ariaLabel={ __( 'Filter by date', 'seo-by-rank-math' ) }
							className={ `${ ns }__date-input` }
						/>
					</div>
					<SelectControl
						value={ queryFilter }
						options={ queryOptions }
						onChange={ setQueryFilter }
						className={ `${ ns }__query-select` }
						__nextHasNoMarginBottom={ true }
					/>
				</div>

				<div className={ `${ ns }__entry-list` }>
					{ filteredEntries.length === 0 ? (
						<p className={ `${ ns }__empty-list` }>
							{ __( 'No entries match the current filters.', 'seo-by-rank-math' ) }
						</p>
					) : (
						filteredEntries.map( ( entry ) => (
							<EntryCard
								key={ entry.id }
								entry={ entry }
								isSelected={ entry.id === effectiveId }
								onSelect={ onSelectEntry }
								onViewTranscript={ setModalEntry }
							/>
						) )
					) }
				</div>

			</div>

			<TranscriptDetail entry={ selectedEntry } />

			{ modalEntry && (
				<TranscriptModal
					entry={ modalEntry }
					onClose={ () => setModalEntry( null ) }
				/>
			) }

		</div>
	)
}

TranscriptViewer.displayName = 'TranscriptViewer'

export default TranscriptViewer
PK     ¤ŠU]pÔ�‹      J  includes/modules/ai-visibility/assets/src/shared/components/StatusBadge.jsnu „[µü¤        /**
 * StatusBadge â€” run status pill (success / error / partial).
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import './StatusBadge.scss'

/**
 * Get the human-readable label for a run status.
 *
 * @param {string} status 'success' | 'partial' | 'error'
 * @return {string} Translated status label.
 */
const getStatusLabel = ( status ) => {
	if ( status === 'success' ) {
		return __( 'Success', 'seo-by-rank-math' )
	}
	if ( status === 'partial' ) {
		return __( 'Partial', 'seo-by-rank-math' )
	}
	return __( 'Failed', 'seo-by-rank-math' )
}

/**
 * StatusBadge component.
 *
 * @param {Object} props
 * @param {string} [props.status] 'success' | 'error' | 'partial'
 * @return {JSX.Element|null} Coloured status pill with SVG icon.
 */
const StatusBadge = ( { status } ) => {
	if ( ! status ) {
		return null
	}

	const isSuccess = status === 'success'

	const ns = 'rank-math-ai-visibility-status-badge'

	return (
		<span className={ `${ ns } ${ ns }--${ status }` }>
			{ isSuccess ? <i className="dashicons dashicons-yes" aria-hidden="true" /> : <i className="dashicons dashicons-no" aria-hidden="true" /> }
			{ getStatusLabel( status ) }
		</span>
	)
}

export default StatusBadge
PK     ¤ŠU]¹ˆHU*  *  K  includes/modules/ai-visibility/assets/src/shared/components/CountBadge.scssnu „[µü¤        /**
 * CountBadge â€” 28Ã—28 circular count pill.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-count-badge {
	display:         inline-flex;
	align-items:     center;
	justify-content: center;
	width:           28px;
	height:          28px;
	border-radius:   50%;
	font-size:       12px;
	font-weight:     400;
	color:           $color-text-primary;
	line-height:     1;
	background:      rgba( 0, 0, 0, 0.05 );

	&--citations {
		background: rgba( 66, 178, 104, 0.08 );
	}

	&--mentions {
		background: rgba( 223, 150, 44, 0.08 );
	}
}
PK     ¤ŠU]Ó—¢  ¢  H  includes/modules/ai-visibility/assets/src/shared/components/RankBadge.jsnu „[µü¤        /**
 * RankBadge â€” coloured pill showing a brand's rank position.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './RankBadge.scss'

/**
 * Resolve the BEM modifier from a numeric rank value.
 *
 * @param {number|null|undefined} rank
 * @return {string} BEM modifier: 'rank-1', 'rank-2', 'rank-3', or 'neutral'.
 */
const getRankModifier = ( rank ) => {
	if ( rank === null || rank === undefined ) {
		return 'neutral'
	}

	const n = parseInt( rank, 10 )

	if ( n === 1 ) {
		return 'rank-1'
	}
	if ( n === 2 ) {
		return 'rank-2'
	}

	// Rank 3 and anything beyond â†’ red badge.
	return 'rank-3'
}

/**
 * RankBadge component.
 *
 * @param {Object}      props
 * @param {number|null} props.rank Numeric rank (1, 2, 3 â€¦) or null for no data.
 * @return {JSX.Element} Coloured rank circle badge.
 */
const RankBadge = ( { rank } ) => {
	const modifier = getRankModifier( rank )
	const label = ( rank !== null && rank !== undefined )
		? `${ rank }`
		: '\u2212' // "âˆ’" (Unicode minus sign)

	const ns = 'rank-math-ai-visibility-rank-badge'

	return (
		<span className={ `${ ns } ${ ns }--${ modifier }` }>
			{ label }
		</span>
	)
}

export default RankBadge
PK     ¤ŠU]™=6ƒ7  7  L  includes/modules/ai-visibility/assets/src/shared/components/SectionHeader.jsnu „[µü¤        /**
 * SectionHeader â€” page/section title + optional subtitle.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './SectionHeader.scss'

/**
 * SectionHeader component.
 *
 * @param {Object} props
 * @param {string} props.title      Section heading (required).
 * @param {string} [props.subtitle] Optional supporting text beneath the heading.
 * @return {JSX.Element|null} Section heading pair, or null when title is falsy.
 */
const SectionHeader = ( { title, subtitle } ) => {
	if ( ! title ) {
		return null
	}

	const ns = 'rank-math-ai-visibility-section-header'

	return (
		<div className={ ns }>
			<h2 className={ `${ ns }__title` }>
				{ title }
			</h2>
			{ subtitle && (
				<p className={ `${ ns }__subtitle` }>
					{ subtitle }
				</p>
			) }
		</div>
	)
}

export default SectionHeader
PK     ¤ŠU]*ØÖÛ8  8  G  includes/modules/ai-visibility/assets/src/shared/components/Button.scssnu „[µü¤        /**
 * Button â€” module-scoped button styles.
 */

@import '../../scss/variables';

// ---------------------------------------------------------------------------
// Base â€” shared across all variants
// ---------------------------------------------------------------------------

.rank-math-ai-visibility-btn {
	&.components-button {
		padding:      10px 12px;
		gap:          8px;
		border-radius: $radius-btn;
		font-size:    13px;
		font-weight:  400;
		line-height:  1;
		white-space:  nowrap;
		cursor:       pointer;
		height:       auto;
	}

	// ---------------------------------------------------------------------------
	// Primary â€” solid blue fill (#017CBA)
	// ---------------------------------------------------------------------------

	&--primary.components-button {
		background: $color-btn-primary;
		color:      $color-btn-primary-text;
		border:     none;
		box-shadow: none;

		&:hover:not( :disabled ) {
			background: darken( $color-btn-primary, 8% );
			color:      $color-btn-primary-text !important; // beats WP admin theme-color override
			box-shadow: none;
		}

		&:focus-visible {
			background: $color-btn-primary;
			color:      $color-btn-primary-text !important;
			box-shadow: 0 0 0 2px #fff, 0 0 0 4px $color-btn-primary;
			outline:    none;
		}

		// WP .components-button:focus (non-visible) â€” reset to match non-focused state
		&:focus:not( :focus-visible ):not( :disabled ) {
			background: $color-btn-primary;
			color:      $color-btn-primary-text !important;
			box-shadow: none;
			outline:    none;
		}

		&:active:not( :disabled ) {
			background: darken( $color-btn-primary, 12% );
			color:      $color-btn-primary-text !important;
			box-shadow: none;
		}

		&:disabled,
		&[aria-disabled='true'] {
			opacity: 0.6;
			cursor:  not-allowed;
		}
	}

	// ---------------------------------------------------------------------------
	// Secondary â€” outline (#949494 border, #4E4E4E text)
	// ---------------------------------------------------------------------------

	&--secondary.components-button {
		background:    transparent;
		color:         #4E4E4E;
		border:        1px solid $color-input-border;
		border-radius: $radius-btn;
		box-shadow:    none;

		&:hover:not( :disabled ) {
			background:   transparent;
			color:        #4E4E4E !important; // beats WP admin theme-color override on hover
			border-color: #4E4E4E;
			box-shadow:   none;
		}

		&:focus-visible {
			color:      #4E4E4E !important;
			box-shadow: none;
			outline:    2px solid $color-btn-primary;
			outline-offset: 2px;
		}

		// WP .components-button:focus (non-visible) â€” reset ugly inset box-shadow
		&:focus:not( :focus-visible ):not( :disabled ) {
			color:      #4E4E4E !important;
			box-shadow: none;
			outline:    none;
		}

		&:disabled,
		&[aria-disabled='true'] {
			opacity: 0.6;
			cursor:  not-allowed;
		}
	}

	// ---------------------------------------------------------------------------
	// Icon â€” square 28Ã—28 icon-only button
	// ---------------------------------------------------------------------------

	&--icon.components-button {
		width:           28px;
		height:          28px;
		min-width:       0;
		padding:         0;
		border:          1px solid $color-border;
		border-radius:   $radius-sm;
		background:      transparent;
		color:           $color-text-muted;
		box-shadow:      none;
		transition:      background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
		display:         inline-flex;
		align-items:     center;
		justify-content: center;

		svg {
			display:     block;
			flex-shrink: 0;
		}

		&:hover:not( :disabled ) {
			background: rgba( 0, 0, 0, 0.05 );
			color:      $color-text-muted;
		}

		&:focus-visible {
			outline:        2px solid $color-btn-primary;
			outline-offset: 2px;
			box-shadow:     none;
		}

		&:disabled,
		&[aria-disabled='true'] {
			opacity: 0.6;
			cursor:  not-allowed;
		}
	}

	// ---------------------------------------------------------------------------
	// Destructive â€” red primary for irreversible actions
	// ---------------------------------------------------------------------------

	&--primary.components-button.is-destructive {
		background: $color-trend-down;
		color:      #fff;
		border:     none;

		&:hover:not( :disabled ) {
			background: darken( $color-trend-down, 8% );
			color:      #fff !important;
		}
	}

	// ---------------------------------------------------------------------------
	// Icon colour sub-variants (--danger, --active) via `iconVariant` prop
	// ---------------------------------------------------------------------------

	&--icon-danger.components-button {
		color:        $color-trend-down;
		border-color: $color-trend-down;
		background:   rgba( 246, 98, 118, 0.08 );

		svg { fill: $color-trend-down; }

		&:hover:not( :disabled ) {
			background: rgba( 246, 98, 118, 0.14 );
			color:      $color-trend-down;
		}
	}

	&--icon-active.components-button {
		color:        $color-btn-primary;
		border-color: $color-btn-primary;
		background:   rgba( 1, 124, 186, 0.08 );

		svg { fill: $color-btn-primary; }

		&:hover:not( :disabled ) {
			background: rgba( 1, 124, 186, 0.14 );
			color:      $color-btn-primary;
		}
	}

	// ---------------------------------------------------------------------------
	// Icon slot wrappers â€” for iconLeft / iconRight props
	// ---------------------------------------------------------------------------

	&__icon-left,
	&__icon-right {
		display:     inline-flex;
		align-items: center;
		flex-shrink: 0;
		line-height: 0;

		svg {
			display: block;
			width:   16px;
			height:  16px;
		}
	}

	// ---------------------------------------------------------------------------
	// View Transcript â€” compact pill variant used in the run-detail query table
	// ---------------------------------------------------------------------------

	&.rank-math-ai-visibility-view-transcript {
		padding:      7px 8px;
		gap:          6px;
		background:   transparent !important;
		border:       1px solid #42B268 !important;
		border-radius: $radius-btn;
		font-size:    12px;
		color:        #42B268 !important;
		box-shadow:   none !important;

		&:hover:not( :disabled ) {
			background:   #F0F9F3 !important;
			color:        #198B3F !important;
			border-color: #198B3F !important;
			box-shadow:   none !important;
		}

		&:focus-visible {
			outline:    none !important;
			box-shadow: none !important;
			color:      #42B268 !important;
		}

		&:focus:not( :focus-visible ) {
			box-shadow: none !important;
			outline:    none !important;
			color:      #42B268 !important;
		}

		.dashicons {
			color:     #42B268;
			height:    13px;
			width:     13px;
			font-size: 14px;
		}
	}
}

// ---------------------------------------------------------------------------
// WP Modal close button â€” override WP admin blue hover inside our modals
// ---------------------------------------------------------------------------

.components-modal__header {
	button.components-button {
		color:      $color-text-muted;
		background: transparent;
		box-shadow: none;

		&:hover:not( :disabled ) {
			background: rgba( 0, 0, 0, 0.06 );
			color:      $color-text-primary !important;
			box-shadow: none;
		}

		&:focus-visible {
			outline:    2px solid $color-btn-primary;
			outline-offset: 2px;
			box-shadow: none;
			color:      $color-text-primary !important;
		}

		&:focus:not( :focus-visible ) {
			box-shadow: none;
		}

		svg {
			fill: currentColor;
		}
	}
}
PK     ¤ŠU]
<8    N  includes/modules/ai-visibility/assets/src/shared/components/ActionButtons.scssnu „[µü¤        /**
 * ActionButtons â€” colour overrides for Run and Disable icon buttons.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-action-buttons {
	display:               grid;
	grid-template-columns: repeat( 3, 28px );
	gap:                   8px;
	align-items:           center;
	flex-shrink:           0;

	// Icon sizing â€” dashicons + SVG
	.dashicons {
		height:      16px;
		width:       16px;
		font-size:   16px;
		line-height: 1;
		flex-shrink: 0;
	}

	svg {
		@extend .dashicons;

		path,
		circle {
			fill: currentColor;
		}
	}

	.rank-math-ai-visibility-btn--icon.components-button {
		width:      28px;
		height:     28px;
		min-width:  unset;
		padding:    0;
		gap:        0;
		border:     none;
		background: transparent;
		box-shadow: none;
		position:   relative;
		overflow:   visible;
		z-index:    1;

		&:hover:not( :disabled ),
		&:focus:not( :disabled ) {
			background: transparent;
			box-shadow: none;
		}

		&:hover:not( :disabled ) {
			z-index: 10;  // Rise above adjacent buttons when expanded
		}

		// Suppress WP focus ring (focus visually shifts to __inner)
		&:focus-visible {
			outline:    none;
			box-shadow: none;
		}
	}

	&__inner {
		box-sizing:     border-box;    // min-width counts total width incl. padding (fixes 40pxâ†’28px bug)
		position:       absolute;
		left:           0;
		top:            0;
		height:         28px;
		display:        flex;
		align-items:    center;
		padding:        0 6px;
		border-radius:  2px;
		white-space:    nowrap;
		min-width:      28px;          // total = 28px (border-box), so content = 16px, icon centred by padding
		box-shadow:     0 0 0 1px #C6C6C6;
		background:     transparent;
		color:          #757575;
		pointer-events: none;          // Clicks pass through to the <button> below
		transition:     min-width   0.2s ease,
		                box-shadow  0.15s ease,
		                background  0.15s ease,
		                color       0.15s ease;

		// Icon spans â€” fixed 16Ã—16 so centering maths hold regardless of icon font-size
		> span:not( .rank-math-ai-visibility-action-buttons__label ) {
			flex-shrink:     0;
			width:           16px;
			height:          16px;
			display:         inline-flex;
			align-items:     center;
			justify-content: center;
			line-height:     1;
		}
	}

	// -------------------------------------------------------------------------
	// Label â€” hidden, slides in on hover
	// -------------------------------------------------------------------------

	&__label {
		max-width:   0;
		overflow:    hidden;
		opacity:     0;
		white-space: nowrap;
		font-size:   12px;
		line-height: 1;
		// margin properties are set per-direction below
		transition:  max-width   0.2s ease,
		             opacity     0.15s ease,
		             margin-left 0.15s ease;
	}

	// -------------------------------------------------------------------------
	// View â€” default green, hover green, expands RIGHT
	// -------------------------------------------------------------------------

	&__view.rank-math-ai-visibility-btn--icon.components-button {
		.rank-math-ai-visibility-action-buttons__inner {
			box-shadow: 0 0 0 1px #42B268;
			color:      #42B268;
		}

		&:hover:not( :disabled ) {
			.rank-math-ai-visibility-action-buttons__inner {
				min-width:  64px;
				box-shadow: 0 0 0 1px #198B3F;
				background: #F0F9F3;
				color:      #198B3F;
			}

			.rank-math-ai-visibility-action-buttons__label {
				max-width:   50px;
				opacity:     1;
				margin-left: 4px;
			}
		}
	}

	// -------------------------------------------------------------------------
	// Edit â€” default grey, hover grey, expands RIGHT
	// -------------------------------------------------------------------------

	&__edit.rank-math-ai-visibility-btn--icon.components-button {
		&:hover:not( :disabled ) {
			.rank-math-ai-visibility-action-buttons__inner {
				min-width:  64px;
				box-shadow: 0 0 0 1px #9B9B9B;
				background: #F8F8F8;
				color:      #383838;
			}

			.rank-math-ai-visibility-action-buttons__label {
				max-width:   40px;
				opacity:     1;
				margin-left: 4px;
			}
		}
	}

	// -------------------------------------------------------------------------
	// Run / Activate â€” blue pill, expands LEFT
	// right:0 anchors the pill to the button's right edge.
	// row-reverse keeps the icon on the right as the label grows leftward.
	// -------------------------------------------------------------------------

	&__inactive.rank-math-ai-visibility-btn--icon.components-button {
		// Default pill: blue border
		.rank-math-ai-visibility-action-buttons__inner {
			right:          0;
			left:           auto;
			flex-direction: row-reverse;
			box-shadow:     0 0 0 1px $color-btn-primary;
			color:          $color-btn-primary;
		}

		// Label uses margin-right so the gap is between label and icon (icon is on right)
		.rank-math-ai-visibility-action-buttons__label {
			transition: max-width    0.2s ease,
			            opacity      0.15s ease,
			            margin-right 0.15s ease;
		}

		&:hover:not( :disabled ) {
			.rank-math-ai-visibility-action-buttons__inner {
				min-width:  64px;
				box-shadow: 0 0 0 1px #006BA1;
				background: #EBF5FA;
				color:      #006BA1;
			}

			.rank-math-ai-visibility-action-buttons__label {
				max-width:    36px;
				opacity:      1;
				margin-right: 4px;
			}
		}
	}

	// -------------------------------------------------------------------------
	// Activate/Deactivate â€” red/pink pill, expands LEFT
	// -------------------------------------------------------------------------
	&__active.rank-math-ai-visibility-btn--icon.components-button {
		.rank-math-ai-visibility-action-buttons__inner {
			box-shadow:     0 0 0 1px $color-trend-down;
			color:          $color-trend-down;
		}

		&:hover:not( :disabled ) {
			.rank-math-ai-visibility-action-buttons__inner {
				box-shadow: 0 0 0 1px $color-trend-down;
				background: #FFF9FA;
				color:      #F24F65;
			}
		}
	}

	&__inactive.rank-math-ai-visibility-btn--icon.components-button,
	&__active.rank-math-ai-visibility-btn--icon.components-button {
		// Default pill: red border
		.rank-math-ai-visibility-action-buttons__inner {
			right:          0;
			left:           auto;
			flex-direction: row-reverse;
		}

		.rank-math-ai-visibility-action-buttons__label {
			transition: max-width    0.2s ease,
			            opacity      0.15s ease,
			            margin-right 0.15s ease;
		}

		&:hover:not( :disabled ) {
			.rank-math-ai-visibility-action-buttons__inner {
				min-width:  64px;
			}

			.rank-math-ai-visibility-action-buttons__label {
				max-width:    80px;
				opacity:      1;
				margin-right: 4px;
			}
		}
	}
}
PK     ¤ŠU]‡¡>!Ò  Ò  J  includes/modules/ai-visibility/assets/src/shared/components/DateInput.scssnu „[µü¤        /**
 * DateInput component styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-date-input {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	height: 34px;
	padding: 0 8px;
	border: 1px solid $color-input-border;
	border-radius: 2px;

	&:focus-within {
		@include input-focus-ring-secondary;
	}

	input {
		border: none;
		color: #383838;
		padding: 0;
		min-width: auto;
		width: auto;
		min-height: auto;

		&:focus {
			border:     none !important;
			box-shadow: none !important;
			outline:    none !important;
		}

		&::-webkit-datetime-edit {
			max-width: max-content;
		}

		&::-webkit-calendar-picker-indicator {
			opacity: .5;
			background-size: 14px;
			padding-left: 4px;
		}
	}
}
PK     ¤ŠU]®ÙŽ6    K  includes/modules/ai-visibility/assets/src/shared/components/PageTopbar.scssnu „[µü¤        /**
 * PageTopbar â€” shared top-bar layout used on Brand/Analysis Detail pages.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-page-topbar {
	display:         flex;
	align-items:     center;
	justify-content: space-between;

	&__left {
		display:     flex;
		align-items: center;
		gap:         16px;
		font-size:   14px;
	}

	&__title {
		font-size:   16px;
		font-weight: 500;
		color:       $color-text-primary;
	}

	&__actions {
		display:     flex;
		align-items: center;
		gap:         $space-sm;
	}
}
PK     ¤ŠU]
ú˜sj  j  Q  includes/modules/ai-visibility/assets/src/shared/components/TranscriptViewer.scssnu „[µü¤        /**
 * TranscriptViewer.scss
 */

@import '../../scss/variables';

.rank-math-ai-visibility-transcript-viewer {
	display: grid;
	grid-template-columns: 450px 1fr;
	min-height: 500px;
	background: $color-surface;
	overflow: hidden;
	gap: 23px;

	&__left {
		border-right: 1px solid $color-border;
		display: flex;
		flex-direction: column;
		overflow: hidden;
		background: $color-surface;
		border: 1px solid #e0e0e0;
		border-radius: 4px;
	}

	&__section-right {
		flex: 1;
	}

	&__filter-bar {
		display: flex;
		align-items: center;
		gap: 12px;
		padding: 18px;
		border-bottom: 1px solid $color-border;
		background: $color-surface;
		flex-shrink: 0;
	}

	&__date-filter {
		display: inline-flex;
		align-items: center;
		background: #FFFFFF;

		.dashicons {
			font-size: 13px;
			width: 13px;
			height: 13px;
			color: $color-text-muted;
		}

		input {
			border: none;
		}
	}

	&__date-input {
		border: none;
		outline: none;
		font-size: 12px;
		color: $color-text-primary;
		background: transparent;
		width: 105px;
		padding: 0;
	}

	&__query-select {
		flex: 1;
		min-width: 0;
	}

	&__entry-list {
		overflow-y: auto;
		flex: 1;
		padding: 26px 18px;
		display: flex;
		flex-direction: column;
		gap: 14px;
		background: #FCFCFC;
	}

	&__empty-list {
		font-size: 13px;
		color: $color-text-muted;
		padding: $space-md;
		margin: 0;
		text-align: center;
	}

	&__entry-card {
		display: block;
		padding: 26px;
		border: 1px solid $color-border;
		border-radius: 4px;
		cursor: pointer;
		transition: border-color 0.12s ease;
		background: $color-surface;

		&:hover {
			border-color: darken( $color-border, 10% );
		}

		&--selected {
			border: 1px solid $color-btn-primary;
		}
	}

	&__entry-meta {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: $space-sm;
		margin-bottom: 20px;
	}

	&__entry-timestamp {
		font-size: 12px;
    	color: #868686;
		white-space: nowrap;
		overflow: hidden;
		text-overflow: ellipsis;
		flex: 1;
		min-width: 0;
	}

	.rank-math-ai-visibility-transcript-viewer__entry-query-text {
		font-size: 12px;
		color: $color-text-primary;
		margin: 0 0 10px;
		line-height: 1.5;
		display: -webkit-box;
		-webkit-line-clamp: 3;
		-webkit-box-orient: vertical;
		overflow: hidden;
		margin-bottom: 20px;
	}

	&__entry-footer {
		display: flex;
		align-items: center;
		justify-content: space-between;
	}

	&__entry-duration {
		display: inline-flex;
		align-items: center;
		gap: 3px;
		font-size: 12px;
		color: #9ca3af;

		.dashicons {
			font-size: 13px;
			width: 13px;
			height: 13px;
		}
	}

	&__entry-view-link {
		display: inline-flex;
		align-items: center;
		gap: 2px;
		font-size: 12px;
		color: $color-btn-primary;
		font-weight: 500;
		cursor: pointer;
		user-select: none;

		.dashicons {
			font-size: 14px;
			width: 14px;
			height: 14px;
			line-height: 1;
		}

		&:hover {
			color: darken( $color-btn-primary, 10% );
		}
	}

	&__detail {
		display: flex;
		flex-direction: column;
		overflow-y: auto;
		background: #FCFCFC;
		border: 1px solid #e0e0e0;
		border-radius: 4px;
	}

	&__detail-header {
		display: flex;
		align-items: center;
		gap: 8px;
		padding: 22px 18px;
		border-bottom: 1px solid $color-border;
		flex-shrink: 0;

		.dashicons {
			font-size: 16px;
			width: 16px;
			height: 16px;
		}
	}

	&__detail-header-title {
		font-size: 14px;
		font-weight: 500;
		color: $color-text-primary;
	}

	&__detail-empty {
		flex: 1;
		display: flex;
		align-items: center;
		justify-content: center;

		p {
			font-size: 13px;
			color: $color-text-muted;
			margin: 0;
		}
	}

	&__detail-content {
		padding: 24px;
		display: flex;
		flex-direction: column;
		gap: 40px;
		background: #FCFCFC;
	}

	&__section {
		display: flex;
		gap: 10px;

		.dashicons {
			display: inline-flex;
			align-items: center;
			justify-content: center;
			width: 34px;
			height: 34px;
			min-width: 34px;
			border-radius: 50%;
			background: #fff;
			font-size: 14px;
			border: 1px solid #E3E3E3;
		}
	}

	&__section-label {
		display: flex;
		align-items: center;
		gap: 10px;
		font-size: 12px;
		color: #868686;
		font-weight: 500;
		margin-bottom: 8px;
	}

	&__query-box,
	&__response-box {
		padding: 20px 24px;
		border: 1px solid $color-border;
		border-radius: 0 11px 11px 11px;
		font-size: 12px;
		color: $color-text-primary;
		line-height: 1.6;
		background: $color-surface;
		white-space: pre-wrap;
	}

	&__date-input.input[type="date"] {
		border: none;
	}

}PK     ¤ŠU]úTû  û  J  includes/modules/ai-visibility/assets/src/shared/components/RankBadge.scssnu „[µü¤        /**
 * RankBadge â€” styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-rank-badge {
	display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 30px;
    height: 30px;
    padding: 0;
    border-radius: 50%;
    border-width: 1px;
    border-style: solid;
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
	flex-shrink:     0;

	// -------------------------------------------------------------------------
	// Colour variants
	// -------------------------------------------------------------------------

	&--rank-1 {
		color:            #42B268;
		background-color: #42B2681A;
		border-color:     #42B268
	}

	&--rank-3 {
		color:            #F66276;
		background-color: #F662761A;
		border-color:     #F66276
	}

	&--rank-2 {
		color:            #F2B02D;
		background-color: #F2B02D1A;
		border-color:     #F2B02D
	}

	&--neutral {
		color:            #B7B7B7;
		background-color: #B7B7B71A;
		border-color:     #B7B7B7;
	}
}
PK     ¤ŠU]`&úù<  <  I  includes/modules/ai-visibility/assets/src/shared/components/CountBadge.jsnu „[µü¤        /**
 * CountBadge â€” 28Ã—28 circular count pill.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './CountBadge.scss'

/**
 * CountBadge component.
 *
 * @param {Object}             props
 * @param {number|string|null} props.value     Numeric count, or null/'error'/'warning' for no data.
 * @param {string}             [props.variant] 'citations' | 'mentions' | 'neutral' (default).
 * @return {JSX.Element} Circular count badge.
 */
const CountBadge = ( { value, variant = 'neutral' } ) => {
	const isSpecial = value === null || value === undefined || value === 'error' || value === 'warning'
	const display = isSpecial ? '-' : value

	const ns = 'rank-math-ai-visibility-count-badge'

	return (
		<span className={ `${ ns } ${ ns }--${ variant }` }>
			{ display }
		</span>
	)
}

export default CountBadge
PK     ¤ŠU]l2\mÁ  Á  D  includes/modules/ai-visibility/assets/src/shared/components/index.jsnu „[µü¤        /**
 * AI Visibility â€” shared components barrel.
 */

export { default as Button } from './Button'
export { default as LoadingButton } from './LoadingButton'
export { default as StatCard } from './StatCard'
export { default as EmptyState } from './EmptyState'
export { default as RankBadge } from './RankBadge'
export { default as SentimentBadge } from './SentimentBadge'
export { default as CountryFlag } from './CountryFlag'
export { default as SectionHeader } from './SectionHeader'
export { default as ActionButtons } from './ActionButtons'
export { default as ConfirmModal } from '../Modals/ConfirmModal'
export { default as StatusToggle } from './StatusToggle'
export { default as TranscriptViewer } from './TranscriptViewer'
export { default as TranscriptModal } from './TranscriptModal'
export { default as StartTime } from './StartTime'
export { default as ScoreBadge } from './ScoreBadge'
export { default as StatusBadge } from './StatusBadge'
export { default as CountBadge } from './CountBadge'
export { default as DataTable } from './DataTable'
export { default as PageTopbar } from './PageTopbar'
export { default as DateInput } from './DateInput'
export { default as StatusIcon } from './StatusIcon'
PK     ¤ŠU]Ë½~  ~  L  includes/modules/ai-visibility/assets/src/shared/components/StatusBadge.scssnu „[µü¤        /**
 * StatusBadge â€” run status pill (success / error / partial).
 */

@import '../../scss/variables';

.rank-math-ai-visibility-status-badge {
	display:      inline-flex;
	align-items:  center;
	gap:          4px;
	font-size:    11px;
	font-weight:  400;
	padding:      2px 6px 2px 3px;
	border-radius: 20px;
	flex-shrink:  0;
	white-space:  nowrap;
	line-height:  1;

	svg {
		flex-shrink: 0;
	}

	.dashicons {
		height: 14px;
		width: 14px;
		font-size: 14px;
	}

	&--success {
		color:      $color-trend-up;
		background: rgba( 66, 178, 104, 0.1 );
		border:     1px solid rgba( 66, 178, 104, 0.35 );
	}

	&--error {
		color:      $color-trend-down;
		background: rgba( 246, 98, 118, 0.1 );
		border:     1px solid rgba( 246, 98, 118, 0.35 );
	}

	&--partial {
		color:      $color-rank-2;
		background: rgba( 242, 176, 45, 0.1 );
		border:     1px solid rgba( 242, 176, 45, 0.35 );
	}
}
PK     ¤ŠU]¨D€¥j  j  K  includes/modules/ai-visibility/assets/src/shared/components/StatusIcon.scssnu „[µü¤        /**
 * StatusIcon â€” shared inline status indicator.
 *
 * The root is a fixed 26x26 anchor; the pill is an absolute overlay that
 * expands on hover without affecting surrounding layout (no jump).
 */

@import '../../scss/variables';

.rank-math-ai-visibility-status-icon {
	position:       relative;
	display:        inline-flex;
	width:          26px;
	height:         26px;
	flex-shrink:    0;
	vertical-align: middle;

	&__pill {
		position:        absolute;
		top:             50%;
		left:            0;
		transform:       translateY( -50% );
		display:         inline-flex;
		align-items:     center;
		border-radius:   100px;
		border:          1px solid transparent;
		padding:         4px;
		background:      #fff;
		cursor:          default;
		white-space:     nowrap;
		transition:      background 0.18s ease;
	}

	.dashicons {
		width:     16px;
		height:    16px;
		font-size: 16px;

		&.dashicons-update {
			font-weight: 100;
			animation: spin 2s linear infinite; 
		}
	}

	&:hover {
		z-index: 10;
	}

	&--error &__pill {
		color:        #E05252;
		border-color: #E05252;
	}

	&--error:hover &__pill {
		background: #FCEEEE;
	}

	&--running &__pill,
	&--pending &__pill {
		color:        #E08C1A;
		border-color: #E08C1A;
	}

	&--running:hover &__pill,
	&--pending:hover &__pill {
		background: #FCF3E8;
	}

	&__label {
		font-size:   12px;
		font-weight: 500;
		line-height: 1;
		max-width:   0;
		overflow:    hidden;
		opacity:     0;
		transition:  max-width 0.18s ease, opacity 0.15s ease,
		             margin-left 0.15s ease;
	}

	&:hover &__label {
		max-width:   60px;
		opacity:     1;
		margin-left: 4px;
	}
}

PK     ¤ŠU]�*ãý  ý  M  includes/modules/ai-visibility/assets/src/shared/components/StatusToggle.scssnu „[µü¤        /**
 * StatusToggle â€” query status checkbox styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-status-toggle {

	&.components-checkbox-control {
		margin-bottom: 0;
	}

	.components-base-control__field {
		display:     flex;
		align-items: center;
		margin:      0;
	}

	// WP CheckboxControl renders an inner HStack between the checkbox box and
	// the label â€” target it directly because the HStack resets gap to 0.
	.components-h-stack {
		gap: 8px !important;
	}

	// Ensure the input container doesn't collapse.
	.components-checkbox-control__input-container {
		flex-shrink: 0;
		margin: 0;
	}

	// Pin checked colour to the module's primary blue.
	.components-checkbox-control__input[type='checkbox'] {
		margin: 0;

		&:checked {
			background-color: $color-btn-primary;
			border-color:     $color-btn-primary;
		}

		&:focus {
			box-shadow: 0 0 0 2px #fff, 0 0 0 4px $color-btn-primary;
		}
	}

	// Label â€” 13 px to match table cell body text.
	.components-checkbox-control__label {
		font-size:   13px;
		font-weight: 400;
		color:       $color-text-primary;
		line-height: 1;
		margin:      0;
	}

	// Reduce opacity when the whole control is disabled.
	.components-checkbox-control__input[type='checkbox']:disabled {
		opacity: 0.6;
	}
}
PK     ¤ŠU] ^PÅÈ  È  J  includes/modules/ai-visibility/assets/src/shared/components/CountryFlag.jsnu „[µü¤        /**
 * CountryFlag â€” locale tag showing a flag emoji and region code.
 *
 * Flag emoji is produced via the Unicode regional-indicator trick, which
 * works on macOS, iOS, Android, and Linux. Windows Chrome renders country
 * flags as letter-pair glyphs; if Windows fidelity becomes a requirement,
 * swap the emoji span for an <img> without changing the component API.
 *
 * @since 1.0.273
 */

/**
 * Internal dependencies
 */
import './CountryFlag.scss'

/**
 * Convert a 2-letter region code (e.g. "US", "EU") to a flag emoji string
 * using Unicode regional-indicator symbols (U+1F1E6 â€¦ U+1F1FF).
 *
 * @param {string} region Two-letter ISO 3166-1 alpha-2 or regional code.
 * @return {string}        Flag emoji, e.g. "ðŸ‡ºðŸ‡¸".
 */
const toFlagEmoji = ( region ) =>
	[ ...region.toUpperCase() ]
		.map( ( char ) => String.fromCodePoint( 0x1f1e6 + char.charCodeAt( 0 ) - 65 ) )
		.join( '' )

/**
 * Extract the region code from a BCP 47 locale string or return the raw
 * value when it is already a plain code (e.g. "US", "EU").
 *
 * @param {string} locale e.g. "en-US" or "US".
 * @return {string}        Upper-cased region code, e.g. "US".
 */
const extractRegion = ( locale ) => {
	if ( ! locale ) {
		return ''
	}
	const parts = locale.split( '-' )
	return ( parts[ 1 ] || parts[ 0 ] ).toUpperCase()
}

/**
 * CountryFlag component.
 *
 * @param {Object} props
 * @param {string} props.locale BCP 47 locale ("en-US") or plain region code ("US").
 * @return {JSX.Element|null}     Null when locale is falsy.
 */
const CountryFlag = ( { locale } ) => {
	if ( ! locale ) {
		return null
	}

	const region = extractRegion( locale )
	const flag = toFlagEmoji( region )

	const ns = 'rank-math-ai-visibility-country-flag'

	return (
		<span
			className={ ns }
			aria-label={ region }
		>
			<span className={ `${ ns }__emoji` } aria-hidden="true">
				{ flag }
			</span>
			<span className={ `${ ns }__code` }>
				{ region }
			</span>
		</span>
	)
}

export default CountryFlag
PK     ¤ŠU]Qm¾A  A  G  includes/modules/ai-visibility/assets/src/shared/components/StatCard.jsnu „[µü¤        /**
 * StatCard â€” dashboard summary card.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { Icon } from '@wordpress/components'

/**
 * Internal dependencies
 */
import { HelpTooltip } from '@rank-math/components'
import './StatCard.scss'

/**
 * StatCard component.
 *
 * @param {Object}             props
 * @param {JSX.Element|string} [props.icon]      WP icon glyph passed to <Icon icon={â€¦}>, or a dashicon class
 *                                               suffix string (e.g. "smiley") rendered as a native dashicon span.
 * @param {string}             props.label       Stat label, e.g. "Active brands".
 * @param {string|number}      props.value       Primary numeric/text value, e.g. "0".
 * @param {string}             [props.tooltip]   Tooltip text for the help icon.
 * @param {string}             [props.className] Extra class(es) for the card root. Use to set
 *                                               - -stat-icon-bg / --stat-icon-color CSS custom
 *                                               properties for per-card icon colours.
 * @param {string|JSX.Element} [props.sub]       Optional sub-label rendered below the value (e.g. a date string).
 * @param {boolean}            [props.compact]   Reduce card padding to 20px (adds --compact modifier).
 * @param {Object}             [props.analysis]  Optional analysis object. If provided, the card will apply
 *
 * @return {JSX.Element} Stat card with icon, label, value, and optional trend.
 */
const StatCard = ( { icon, label, value, tooltip, sub, compact = false, className = '', analysis = null } ) => {
	const hasData = ( analysis?.status && analysis?.status === 'done' ) ?? ( value !== null && value !== undefined && value !== '' && value !== 'â€”' )

	const ns = 'rank-math-ai-visibility-stat-card'

	const rootClass = [
		ns,
		hasData && `${ ns }--has-data`,
		compact && `${ ns }--compact`,
		className,
	].filter( Boolean ).join( ' ' )

	const labelClass = `${ ns }__label`
	const valueClass = `${ ns }__value`

	return (
		<div className={ rootClass }>

			{ icon && (
				<span className={ `${ ns }__icon-wrap` }>
					{ typeof icon === 'string' ? (
						<span className={ `dashicons dashicons-${ icon } ${ ns }__icon` } />
					) : (
						<Icon
							icon={ icon }
							className={ `${ ns }__icon` }
						/>
					) }
				</span>
			) }

			<div className={ `${ ns }__content` }>

				<div className={ `${ ns }__label-row` }>
					<span className={ labelClass }>{ label }</span>
					{ tooltip && HelpTooltip && (
						<HelpTooltip text={ tooltip } />
					) }
				</div>

				<div className={ `${ ns }__data` }>
					<span className={ valueClass }>{ value !== null && value !== undefined ? value : 'N/A' }</span>

					{ sub && (
						<span className={ `${ ns }__sub` }>{ sub }</span>
					) }
				</div>

			</div>

		</div>
	)
}

export default StatCard
PK     ¤ŠU]Ùòòò�  �  P  includes/modules/ai-visibility/assets/src/shared/services/api/aiVisibilityApi.jsnu „[µü¤        /**
 * AI Visibility â€” REST API service layer.
 *
 * Wraps `@wordpress/api-fetch` and unwraps the `{ success, data }` envelope.
 * All caching is server-side; these calls are cheap cache reads in steady state.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import apiFetch from '@wordpress/api-fetch'
import { addQueryArgs } from '@wordpress/url'

export const NAMESPACE = '/rankmath/v1/ai-visibility'

/**
 * @param {string} path    REST path.
 * @param {Object} options apiFetch options.
 * @return {Promise<*>} Unwrapped `data` payload.
 */
const request = async ( path, options = {} ) => {
	const response = await apiFetch( { path, ...options } )
	return response && response.success === true ? response.data : response
}

/**
 * @param {string} path     Path under the namespace.
 * @param {Object} [params] Query params.
 * @return {string} Full path.
 */
const buildPath = ( path, params ) => {
	const full = `${ NAMESPACE }${ path }`
	return params && Object.keys( params ).length ? addQueryArgs( full, params ) : full
}

/**
 * GET /overview â€” summary + per-brand rollup rows.
 *
 * @param {Object}  [params]         Optional params.
 * @param {boolean} [params.refresh] Force upstream revalidation (SWR).
 * @param {string}  [params.search]  Server-side name/URL filter.
 * @return {Promise<{ summary: Object, brands: Array, is_stale: boolean }>} Overview data.
 */
export const getOverview = ( { refresh = false, search = '' } = {} ) =>
	request( buildPath( '/overview', {
		...( refresh ? { refresh: 1 } : {} ),
		...( search ? { search } : {} ),
	} ) )

/**
 * GET /brands/{id} â€” brand identity (cache-first).
 *
 * @param {string} id Brand UUID.
 * @return {Promise<{ brand: Object }>} Brand details.
 */
export const getBrand = ( id ) => request( buildPath( `/brands/${ id }` ) )

/**
 * POST /brands â€” create a brand.
 *
 * @param {Object} data Brand payload (name, url, description, locale).
 * @return {Promise<{ brand: Object }>} Created brand.
 */
export const createBrand = ( data ) =>
	request( buildPath( '/brands' ), { method: 'POST', data } )

/**
 * PUT /brands/{id} â€” update brand fields.
 *
 * @param {string} id   Brand UUID.
 * @param {Object} data Partial brand payload.
 * @return {Promise<{ brand: Object }>} Updated brand.
 */
export const updateBrand = ( id, data ) =>
	request( buildPath( `/brands/${ id }` ), { method: 'PUT', data } )

/**
 * PATCH /brands/{id} â€” set brand status ('active' or 'inactive').
 *
 * @param {string} id     Brand UUID.
 * @param {string} status New status.
 * @return {Promise<{ brand: Object }>} Updated brand.
 */
export const setBrandStatus = ( id, status ) =>
	request( buildPath( `/brands/${ id }` ), { method: 'PATCH', data: { status } } )

/**
 * Activate 15-day AI Visibility free trial.
 *
 * @return {Promise<{ activated: boolean }>} Activation result.
 */
export const activateTrial = () =>
	request( buildPath( '/trial/activate' ), { method: 'POST' } )

/**
 * Get an authenticated, single-use Content AI checkout iframe URL.
 *
 * Fetch a fresh URL per iframe session â€” the token in it expires in 15 min
 * and is consumed on first load, so never reload the iframe with the same URL.
 *
 * @return {Promise<{ url: string }>} Iframe src URL.
 */
export const getCheckoutUrl = () =>
	request( buildPath( '/checkout-url' ), { method: 'POST' } )

/**
 * GET /brands/{id}/insights â€” latest-analysis payload (cache-first).
 * Returns `{ pending: true }` when no completed analysis exists yet.
 *
 * @param {string} id Brand UUID.
 * @return {Promise<{ insights: Object }|{ pending: boolean }>} Latest insights or pending status.
 */
export const getInsights = ( id ) => request( buildPath( `/brands/${ id }/insights` ) )

/**
 * GET /brands/{id}/queries â€” query list (cache-first, 24h TTL).
 *
 * @param {string} id Brand UUID.
 * @return {Promise<{ queries: Array }>} List of queries with their current enabled/disabled status and performance metrics.
 */
export const getQueries = ( id ) => request( buildPath( `/brands/${ id }/queries` ) )

/**
 * PUT /brands/{id}/queries/{queryId} â€” enable/disable a query.
 *
 * @param {string} id      Brand UUID.
 * @param {string} queryId Query UUID.
 * @param {Object} data    `{ enabled }`.
 * @return {Promise<{ query: Object }>} Updated query.
 */
export const updateQuery = ( id, queryId, data ) =>
	request( buildPath( `/brands/${ id }/queries/${ queryId }` ), { method: 'PUT', data } )

/**
 * POST /brands/{id}/generate-queries â€” regenerate baseline queries.
 *
 * @param {string} id Brand UUID.
 * @return {Promise<{ queries: Array }>} New query list (same shape as GET /queries).
 */
export const generateQueries = ( id ) =>
	request( buildPath( `/brands/${ id }/generate-queries` ), { method: 'POST' } )
PK     ¤ŠU]Óôu@/  /  B  includes/modules/ai-visibility/assets/src/shared/hooks/useFetch.jsnu „[µü¤        /**
 * useFetch â€” generic data-fetching hook with cancelled-flag guard.
 *
 * Options: skip (bail out when truthy), errorMessage (fallback), initialData.
 * Returns setData for optimistic updates without triggering a re-fetch.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState, useEffect } from '@wordpress/element'

/**
 * @param {Function} fetcher                Returns a Promise; re-called on deps change.
 * @param {Array}    deps                   useEffect dependency array.
 * @param {Object}   [options]
 * @param {boolean}  [options.skip]         Skip the fetch when truthy.
 * @param {string}   [options.errorMessage]
 * @param {*}        [options.initialData]
 * @return {Object}    { data, loading, error, setData }
 */
const useFetch = ( fetcher, deps, options = {} ) => {
	const {
		skip = false,
		errorMessage = 'Failed to load.',
		initialData = null,
	} = options

	const [ data, setData ] = useState( initialData )
	const [ loading, setLoading ] = useState( ! skip )
	const [ error, setError ] = useState( null )

	useEffect( () => {
		if ( skip ) {
			setLoading( false )
			return
		}

		let cancelled = false
		setLoading( true )
		setError( null )

		fetcher()
			.then( ( result ) => {
				if ( ! cancelled ) {
					setData( result )
					setLoading( false )
				}
			} )
			.catch( ( err ) => {
				if ( ! cancelled ) {
					setError( err?.message || errorMessage )
					setLoading( false )
				}
			} )

		return () => {
			cancelled = true
		}
	}, deps )

	return { data, loading, error, setData }
}

export default useFetch
PK     ¤ŠU],ÈóÕT  T  F  includes/modules/ai-visibility/assets/src/shared/hooks/useDashboard.jsnu „[µü¤        /**
 * useDashboard â€” dashboard data hook.
 *
 * Manages summary metrics, per-brand rollup rows, mutations, and the
 * first-analysis poller. Implements stale-while-revalidate: serves a stale
 * cache immediately, then revalidates in the background.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { useState, useEffect, useCallback, useRef } from '@wordpress/element'
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import {
	getOverview,
	getInsights,
	createBrand,
	updateBrand,
	setBrandStatus,
} from '../services/api/aiVisibilityApi'
import { getAnalysisState } from '../../utils/analysisState'

const POLL_INTERVAL_MS = 20000
const POLL_MAX_ATTEMPTS = 10
const POLL_MAX_ERRORS = 3

/**
 * Whether a brand qualifies for first-analysis polling.
 *
 * Only brands awaiting their first result (no `last_analyzed` yet) are
 * pollable: the insights endpoint always returns the last *completed* run, so
 * polling a brand that already has data can't detect a newer run completing â€”
 * that resolves on the normal /overview refresh instead.
 *
 * @param {Object} brand Brand row.
 * @return {boolean} True when pollable.
 */
const isPollable = ( brand ) => 'running' === getAnalysisState( brand ) && ! brand.last_analyzed

/**
 * Dashboard data hook.
 *
 * @return {Object} summary, brands, loading, isStale, error, refetch, mutation handlers.
 */
const useDashboard = () => {
	const [ summary, setSummary ] = useState( null )
	const [ brands, setBrands ] = useState( [] )
	const [ loading, setLoading ] = useState( true )
	const [ isStale, setIsStale ] = useState( false )
	const [ error, setError ] = useState( null )

	const isFetching = useRef( false )
	const pollState = useRef( {} ) // per-brand attempt/error counters
	const searchRef = useRef( '' ) // preserved across refreshes/polls

	/**
	 * @param {boolean} [refresh=false] Force upstream revalidation.
	 * @return {Promise<Object|null>} Envelope or null on guard/error.
	 */
	const fetchDashboard = useCallback( async ( refresh = false ) => {
		if ( isFetching.current ) {
			return null
		}
		isFetching.current = true
		setError( null )

		try {
			const data = await getOverview( { refresh, search: searchRef.current } )
			setSummary( data?.summary ?? null )
			setBrands( Array.isArray( data?.brands ) ? data.brands : [] )
			setIsStale( !! data?.is_stale )
			return data
		} catch ( err ) {
			setError( err?.message || __( 'Failed to load dashboard data.', 'seo-by-rank-math' ) )
			return null
		} finally {
			isFetching.current = false
			setLoading( false )
		}
	}, [] )

	/**
	 * @param {string} term Search term (filters cached rows server-side).
	 * @return {Promise<Object|null>}
	 */
	const handleSearch = useCallback( ( term ) => {
		searchRef.current = term || ''
		return fetchDashboard()
	}, [ fetchDashboard ] )

	// Initial load; revalidate if the served cache was stale.
	useEffect( () => {
		const load = async () => {
			const data = await fetchDashboard()
			if ( data?.is_stale ) {
				await fetchDashboard( true )
			}
		}
		load()
	}, [ fetchDashboard ] )

	// First-analysis poller â€” bounded per-brand, paused when tab is hidden.
	useEffect( () => {
		const pollable = brands.filter( isPollable )
		if ( ! pollable.length ) {
			return
		}

		const intervalId = setInterval( async () => {
			if ( document.hidden ) {
				return
			}

			for ( const brand of pollable ) {
				if ( ! pollState.current[ brand.id ] ) {
					pollState.current[ brand.id ] = { attempts: 0, errors: 0 }
				}
				const state = pollState.current[ brand.id ]
				if ( state.attempts >= POLL_MAX_ATTEMPTS || state.errors >= POLL_MAX_ERRORS ) {
					continue
				}
				state.attempts++

				try {
					const data = await getInsights( brand.id )
					state.errors = 0
					// First analysis completed (404â†’insights). Refresh from the
					// API so the row's analysis_status reflects completion and
					// the running icon clears.
					if ( data?.insights ) {
						await fetchDashboard( true )
					}
				} catch {
					state.errors++
				}
			}
		}, POLL_INTERVAL_MS )

		return () => clearInterval( intervalId )
	}, [ brands, fetchDashboard ] )

	/**
	 * @param {Function} mutation    API call to run.
	 * @param {string}   fallbackMsg Error fallback message.
	 * @return {Promise<*>}
	 */
	const mutate = useCallback( async ( mutation, fallbackMsg ) => {
		try {
			const result = await mutation()
			await fetchDashboard()
			return result
		} catch ( err ) {
			setError( err?.message || fallbackMsg )
			throw err
		}
	}, [ fetchDashboard ] )

	const handleAddBrand = useCallback(
		( data ) => mutate( () => createBrand( data ), __( 'Failed to create brand.', 'seo-by-rank-math' ) ),
		[ mutate ]
	)

	const handleUpdateBrand = useCallback(
		( id, data ) => mutate( () => updateBrand( id, data ), __( 'Failed to update brand.', 'seo-by-rank-math' ) ),
		[ mutate ]
	)

	const handleDisableBrand = useCallback(
		( id ) => mutate( () => setBrandStatus( id, 'inactive' ), __( 'Failed to disable brand.', 'seo-by-rank-math' ) ),
		[ mutate ]
	)

	const handleEnableBrand = useCallback(
		( id ) => mutate( () => setBrandStatus( id, 'active' ), __( 'Failed to enable brand.', 'seo-by-rank-math' ) ),
		[ mutate ]
	)

	return {
		summary,
		brands,
		loading,
		isStale,
		error,
		refetch: fetchDashboard,
		handleSearch,
		handleAddBrand,
		handleUpdateBrand,
		handleDisableBrand,
		handleEnableBrand,
	}
}

export default useDashboard
PK     ¤ŠU]×¡Ëì}  }  L  includes/modules/ai-visibility/assets/src/shared/hooks/useTrialActivation.jsnu „[µü¤        /**
 * useTrialActivation â€” trial activation state machine.
 *
 * idle â”€â”€activate()â”€â”€â–¶ activating â”€â”€â–¶ success / error (retry via activate()).
 *
 * @since 1.0.281
 */

/**
 * WordPress dependencies
 */
import { useState, useCallback } from '@wordpress/element'
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import { activateTrial } from '../services/api/aiVisibilityApi'

/**
 * Activation flow statuses.
 */
export const ACTIVATION_STATUS = {
	IDLE: 'idle',
	ACTIVATING: 'activating',
	SUCCESS: 'success',
	ERROR: 'error',
}

// Keep the loader visible long enough to avoid a flash on fast responses.
const MIN_ACTIVATING_MS = 3500

/**
 * Trial activation hook.
 *
 * @return {Object} { status, error, activate } Activation state and handler.
 */
const useTrialActivation = () => {
	const [ status, setStatus ] = useState( ACTIVATION_STATUS.IDLE )
	const [ error, setError ] = useState( null )

	const activate = useCallback( async () => {
		setStatus( ACTIVATION_STATUS.ACTIVATING )
		setError( null )

		const startedAt = Date.now()

		try {
			await activateTrial()

			// Keep the loader visible for the minimum duration.
			const remaining = MIN_ACTIVATING_MS - ( Date.now() - startedAt )
			if ( remaining > 0 ) {
				await new Promise( ( done ) => setTimeout( done, remaining ) )
			}

			setStatus( ACTIVATION_STATUS.SUCCESS )
		} catch ( err ) {
			setStatus( ACTIVATION_STATUS.ERROR )
			setError(
				err?.message || __( 'Something went wrong while activating your trial. Please try again.', 'seo-by-rank-math' )
			)
		}
	}, [] )

	return { status, error, activate }
}

export default useTrialActivation
PK     ¤ŠU](—Á³r"  r"  M  includes/modules/ai-visibility/assets/src/shared/Modals/ActivateTrialModal.jsnu „[µü¤        /**
 * ActivateTrialModal â€” 15-day trial gate for PRO users on the Free plan.
 * Flow: idle / error â†’ activating â†’ success (logic in useTrialActivation).
 *
 * @since 1.0.281
 */

/**
 * WordPress dependencies
 */
import { __, sprintf } from '@wordpress/i18n'
import { useState, useEffect } from '@wordpress/element'
import { Modal, Spinner, Icon } from '@wordpress/components'
import { arrowRight } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import getLink from '@helpers/getLink'
import Button from '../components/Button'
import AccessGateModal from './AccessGateModal'
import FeatureChecklist from './FeatureChecklist'
import useTrialActivation, { ACTIVATION_STATUS } from '../hooks/useTrialActivation'
import './ActivateTrialModal.scss'

const noop = () => {}

/**
 * Cosmetic provisioning steps â€” advance on a timer, not backend progress.
 */
const ACTIVATION_STEPS = [
	__( 'Authenticating credentialsâ€¦', 'seo-by-rank-math' ),
	__( 'Provisioning AI tracking workspaceâ€¦', 'seo-by-rank-math' ),
	__( 'Connecting to AI search modelsâ€¦', 'seo-by-rank-math' ),
]

/** How often the cosmetic step list advances (ms). */
const STEP_ADVANCE_MS = 1200

/**
 * Trial length in days â€” keep in sync with the backend trial duration.
 */
const TRIAL_DAYS = 15

/**
 * @param {Object}      props
 * @param {string|null} props.error      Error message from a failed attempt.
 * @param {Function}    props.onActivate Start/Retry handler.
 * @return {JSX.Element} Trial pitch or error state.
 */
const TrialPitch = ( { error, onActivate } ) => {
	const ns = 'rank-math-ai-visibility-gate'

	const renewDate = new Date( Date.now() + ( TRIAL_DAYS * 24 * 60 * 60 * 1000 ) )
		.toLocaleDateString( undefined, { year: 'numeric', month: 'long', day: 'numeric' } )

	return (
		<AccessGateModal
			icon="dashicons dashicons-unlock"
			title={ __( 'Activate Your AI Visibility Trial', 'seo-by-rank-math' ) }
			className="rank-math-ai-visibility-trial-modal"
		>
			<p className={ `${ ns }__intro` }>
				{ sprintf(
					/* translators: %d: trial length in days. */
					__( 'Start your free trial and see exactly where AI mentions your brand. Your %d-day trial gives you full access to track, analyze, and grow your presence, before your competitors do.', 'seo-by-rank-math' ),
					TRIAL_DAYS
				) }
			</p>

			<FeatureChecklist />

			<p className={ `${ ns }__notice` }>
				{ sprintf(
					/* translators: %s: localized auto-renew date, e.g. "June 26, 2026". */
					__( 'Your trial begins immediately. Auto-renews on %s unless cancelled.', 'seo-by-rank-math' ),
					renewDate
				) }
			</p>

			{ error && (
				<div className={ `${ ns }__error` } role="alert">
					{ error }
				</div>
			) }

			<div className={ `${ ns }__actions` }>
				<Button
					variant="primary"
					className={ `${ ns }__cta` }
					onClick={ onActivate }
					iconRight={ <Icon icon={ arrowRight } size={ 18 } /> }
				>
					{ error
						? __( 'Retry Activation', 'seo-by-rank-math' )
						: __( 'Start 15-Day Free Trial', 'seo-by-rank-math' )
					}
				</Button>
			</div>

			<p className={ `${ ns }__footnote` }>
				{ __( '30-Day Money-Back Guarantee', 'seo-by-rank-math' ) }
			</p>
		</AccessGateModal>
	)
}

/**
 * Visual state of a provisioning step row.
 *
 * @param {number} index      Step index.
 * @param {number} activeStep Currently active step index.
 * @return {string} 'done' | 'active' | 'pending'.
 */
const getStepState = ( index, activeStep ) => {
	if ( index < activeStep ) {
		return 'done'
	}
	return index === activeStep ? 'active' : 'pending'
}

/**
 * Activating state â€” spinner, headline, and cosmetic provisioning steps.
 *
 * @return {JSX.Element} Activating progress modal.
 */
const ActivatingState = () => {
	const ns = 'rank-math-ai-visibility-activating-modal'
	const [ activeStep, setActiveStep ] = useState( 0 )

	// Advance the steps on a timer; hold on the last one until the hook resolves.
	useEffect( () => {
		const intervalId = setInterval( () => {
			setActiveStep( ( step ) => Math.min( step + 1, ACTIVATION_STEPS.length - 1 ) )
		}, STEP_ADVANCE_MS )

		return () => clearInterval( intervalId )
	}, [] )

	return (
		<Modal
			onRequestClose={ noop }
			className={ ns }
			overlayClassName="rank-math-modal-overlay rank-math-ai-visibility-content-overlay"
			isDismissible={ false }
			shouldCloseOnEsc={ false }
			shouldCloseOnClickOutside={ false }
			aria={ { labelledby: `${ ns }-title` } }
			__experimentalHideHeader
		>
			<div className={ `${ ns }__spinner` }>
				<Spinner />
			</div>

			<h1 id={ `${ ns }-title` } className={ `${ ns }__title` }>
				{ __( 'Activating Your AI Visibility Trialâ€¦', 'seo-by-rank-math' ) }
			</h1>

			<p className={ `${ ns }__subtitle` }>
				{ __( "We're setting up your workspace and connecting AI models. This will take just a moment.", 'seo-by-rank-math' ) }
			</p>

			<ul className={ `${ ns }__steps` }>
				{ ACTIVATION_STEPS.map( ( step, index ) => {
					const state = getStepState( index, activeStep )
					return (
						<li key={ step } className={ `${ ns }__step ${ ns }__step--${ state }` }>
							<span className={ `${ ns }__step-icon` } aria-hidden="true">
								{ 'done' === state
									? <i className="rm-icon rm-icon-tick" />
									: <span className={ `${ ns }__step-circle` } />
								}
							</span>
							{ step }
						</li>
					)
				} ) }
			</ul>
		</Modal>
	)
}

/**
 * Success state â€” "Welcome to AI Visibility" with the Go to Dashboard CTA.
 *
 * @return {JSX.Element} Trial success modal.
 */
// Placeholder - swap this URL for the real quick-start guide video when ready.
const QUICK_START_VIDEO_URL = 'https://www.youtube.com/embed/aqz-KE-bpKQ?autoplay=1'

const SuccessState = () => {
	const ns = 'rank-math-ai-visibility-trial-success'
	const [ isPlaying, setIsPlaying ] = useState( false )

	// Reload re-localizes the refreshed plan from PHP, dropping the gate.
	const goToDashboard = () => window.location.reload()

	return (
		<AccessGateModal
			icon="dashicons dashicons-yes-alt"
			title={ __( 'Welcome to AI Visibility', 'seo-by-rank-math' ) }
			className={ ns }
		>
			<p className="rank-math-ai-visibility-gate__intro">
				{ __( "Your 15-day free trial is now active. We've sent a confirmation email with your trial details and next steps.", 'seo-by-rank-math' ) }
			</p>

			{ /* Quick Start Guide â€” click to play. */ }
			{ isPlaying ? (
				<div className={ `${ ns }__video ${ ns }__video--playing` }>
					<iframe
						className={ `${ ns }__video-iframe` }
						src={ QUICK_START_VIDEO_URL }
						title={ __( 'Quick Start Guide', 'seo-by-rank-math' ) }
						allow="autoplay; fullscreen"
						allowFullScreen
					/>
				</div>
			) : (
				<div
					className={ `${ ns }__video ${ ns }__video--idle` }
					role="button"
					tabIndex={ 0 }
					onClick={ () => setIsPlaying( true ) }
					onKeyDown={ ( e ) => ( e.key === 'Enter' || e.key === ' ' ) && setIsPlaying( true ) }
					aria-label={ __( 'Play Quick Start Guide', 'seo-by-rank-math' ) }
				>
					<i className={ `${ ns }__video-play dashicons dashicons-controls-play` } aria-hidden="true" />
					<span className={ `${ ns }__video-caption` }>
						{ __( 'Quick Start Guide', 'seo-by-rank-math' ) }
					</span>
				</div>
			) }

			<div className={ `${ ns }__links` }>
				<a
					href={ getLink( 'knowledgebase', 'AI Visibility Welcome Modal' ) }
					target="_blank"
					rel="noreferrer"
					className={ `${ ns }__link` }
				>
					<i className="rm-icon rm-icon-book" aria-hidden="true" />
					{ __( 'Knowledge Base', 'seo-by-rank-math' ) }
				</a>
				<a
					href={ getLink( 'support', 'AI Visibility Welcome Modal' ) }
					target="_blank"
					rel="noreferrer"
					className={ `${ ns }__link` }
				>
					<i className="rm-icon rm-icon-support" aria-hidden="true" />
					{ __( 'Contact Support', 'seo-by-rank-math' ) }
				</a>
			</div>

			<div className="rank-math-ai-visibility-gate__actions">
				<Button
					variant="primary"
					className="rank-math-ai-visibility-gate__cta"
					onClick={ goToDashboard }
					iconRight={ <Icon icon={ arrowRight } size={ 18 } /> }
				>
					{ __( 'Go to Dashboard', 'seo-by-rank-math' ) }
				</Button>
			</div>
		</AccessGateModal>
	)
}

/**
 * ActivateTrialModal component.
 *
 * @return {JSX.Element} Trial activation flow modal.
 */
const ActivateTrialModal = () => {
	const { status, error, activate } = useTrialActivation()

	if ( ACTIVATION_STATUS.ACTIVATING === status ) {
		return <ActivatingState />
	}

	if ( ACTIVATION_STATUS.SUCCESS === status ) {
		return <SuccessState />
	}

	// idle + error share the pitch layout; error adds the notice + Retry CTA.
	return <TrialPitch error={ error } onActivate={ activate } />
}

ActivateTrialModal.displayName = 'ActivateTrialModal'

export default ActivateTrialModal
PK     ¤ŠU]Þûê]Ñ  Ñ  I  includes/modules/ai-visibility/assets/src/shared/Modals/ConfirmModal.scssnu „[µü¤        /**
 * ConfirmModal â€” styles for the generic confirmation dialog.
 *
 * All colour tokens come from `_variables.scss`.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-confirm-modal {

	// Give the content area uniform padding â€” bottom space so buttons
	// don't sit flush against the modal edge.
	.components-modal__content {
		padding-bottom: 0;
	}

	// -------------------------------------------------------------------------
	// Message body
	// -------------------------------------------------------------------------

	&__message {
		margin:      0 0 24px;
		font-size:   14px;
		line-height: 1.6;
		color:       $color-text-primary;
	}

	// -------------------------------------------------------------------------
	// Footer â€” Cancel + Confirm buttons, right-aligned.
	// Both buttons use the same height (40 px) and padding for visual harmony.
	// -------------------------------------------------------------------------

	&__footer {
		display:         flex;
		justify-content: flex-end;
		align-items:     center;
		gap:             12px;
		padding:         20px 0 28px;
		border-top:      1px solid $color-border;
		margin-top:      4px;

		// Uniform button sizing so both sit in the same visual family.
		.components-button {
			min-height: 36px;
			padding:    8px 16px;
			font-size:  13px;
			font-weight: 500;

			// Cancel â€” neutral grey outline (not WP's default blue secondary).
			&.is-secondary {
				color:        #5c5f62;
				border-color: #8c9196;

				&:hover:not( :disabled ) {
					color:        #1d2327;
					border-color: #5c5f62;
					background:   rgba( 0, 0, 0, 0.04 );
				}
			}

			// Disable / destructive â€” red fill, consistent with danger action.
			&.is-primary.is-destructive {
				background:   $color-trend-down;
				border-color: $color-trend-down;
				color:        #fff;

				&:hover:not( :disabled ) {
					background:   darken( $color-trend-down, 8% );
					border-color: darken( $color-trend-down, 8% );
				}
			}
		}
	}
}
PK     ¤ŠU]ÃµBM7	  7	  G  includes/modules/ai-visibility/assets/src/shared/Modals/ConfirmModal.jsnu „[µü¤        /**
 * ConfirmModal â€” generic confirmation dialog for destructive actions.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Modal } from '@wordpress/components'

/**
 * Internal dependencies
 */
import Button from '../components/Button'
import LoadingButton from '../components/LoadingButton'
import './ConfirmModal.scss'

/**
 * ConfirmModal component.
 *
 * @param {Object}      props
 * @param {string}      props.title                 Dialog heading (passed to WP Modal).
 * @param {string}      props.message               Body copy â€” explains the action.
 * @param {string}      [props.confirmLabel]        Confirm button label. Default "Confirm".
 * @param {string}      [props.cancelLabel]         Cancel button label. Default "Cancel".
 * @param {boolean}     [props.isDestructive=false] Renders confirm button in red.
 * @param {boolean}     [props.isProcessing=false]  Disables + spins both buttons.
 * @param {string|null} [props.error=null]          Error message shown inside the modal on failure.
 * @param {Function}    [props.onConfirm]           Handler for Confirm click.
 * @param {Function}    [props.onCancel]            Handler for Cancel / close.
 * @return {JSX.Element} Confirmation dialog with Cancel and Confirm buttons.
 */
const ConfirmModal = ( {
	title,
	message,
	confirmLabel = __( 'Confirm', 'seo-by-rank-math' ),
	cancelLabel = __( 'Cancel', 'seo-by-rank-math' ),
	isDestructive = false,
	isProcessing = false,
	error = null,
	onConfirm,
	onCancel,
} ) => {
	const ns = 'rank-math-ai-visibility-confirm-modal'
	return (
		<Modal
			title={ title }
			onRequestClose={ onCancel }
			className={ ns }
		>
			<p className={ `${ ns }__message` }>
				{ message }
			</p>

			{ error && (
				<p className={ `${ ns }__error` }>
					{ error }
				</p>
			) }

			<div className={ `${ ns }__footer` }>
				<Button
					variant="secondary"
					onClick={ onCancel }
					disabled={ isProcessing }
				>
					{ cancelLabel }
				</Button>

				<LoadingButton
					variant="primary"
					isDestructive={ isDestructive }
					onClick={ onConfirm }
					isLoading={ isProcessing }
					loadingLabel={ `${ confirmLabel }â€¦` }
				>
					{ confirmLabel }
				</LoadingButton>
			</div>
		</Modal>
	)
}

ConfirmModal.displayName = 'ConfirmModal'

export default ConfirmModal
PK     ¤ŠU]„= lv  v  K  includes/modules/ai-visibility/assets/src/shared/Modals/UpgradePlanModal.jsnu „[µü¤        /**
 * UpgradePlanModal â€” shown when adding a brand would exceed the plan's
 * limit. Body hosts the Content AI checkout iframe by default; pass
 * `children` to override it.
 *
 * @since 1.0.281
 */

/**
 * External dependencies
 */
import { upperFirst } from 'lodash'

/**
 * WordPress dependencies
 */
import { __, sprintf } from '@wordpress/i18n'
import { Modal, Icon } from '@wordpress/components'
import { close } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import Button from '../components/Button'
import CheckoutIframe from './CheckoutIframe'
import './UpgradePlanModal.scss'

/**
 * UpgradePlanModal component.
 *
 * @param {Object}   props
 * @param {string}   props.plan              Current Content AI plan slug.
 * @param {boolean}  [props.isTopTier=false] Highest plan â€” show limit-reached copy.
 * @param {Function} props.onClose           Close handler.
 * @param {*}        [props.children]        Body override. Defaults to the checkout iframe.
 * @return {JSX.Element} Upgrade Plan modal.
 */
const UpgradePlanModal = ( { plan = '', isTopTier = false, onClose, children = null } ) => {
	const ns = 'rank-math-ai-visibility-upgrade-plan-modal'

	const subtitle = isTopTier
		? __( 'You\'ve reached the maximum number of brands available on your plan. Contact support if you need a higher limit.', 'seo-by-rank-math' )
		: sprintf(
			/* translators: %s: current plan name, e.g. "Starter". */
			__( 'You\'ve reached the brand limit for your current %s plan.', 'seo-by-rank-math' ),
			upperFirst( plan )
		)

	return (
		<Modal
			onRequestClose={ onClose }
			className={ ns }
			overlayClassName="rank-math-modal-overlay rank-math-ai-visibility-content-overlay"
			aria={ { labelledby: `${ ns }-title` } }
			__experimentalHideHeader
		>
			<div className={ `${ ns }__header` }>
				<i className={ `${ ns }__header-icon dashicons dashicons-warning` } aria-hidden="true" />

				<div className={ `${ ns }__header-text` }>
					<h1 id={ `${ ns }-title` } className={ `${ ns }__title` }>
						{ __( 'Upgrade Your Plan', 'seo-by-rank-math' ) }
					</h1>
					<p className={ `${ ns }__subtitle` }>
						{ subtitle }
					</p>
				</div>

				<Button
					variant=""
					onClick={ onClose }
					className={ `${ ns }__close` }
					label={ __( 'Close', 'seo-by-rank-math' ) }
				>
					<Icon icon={ close } size={ 20 } />
				</Button>
			</div>

			<div className={ `${ ns }__body` }>
				{ children || <CheckoutIframe /> }
			</div>

			<div className={ `${ ns }__footer` }>
				<p className={ `${ ns }__guarantee` }>
					{ __( 'All plans include a 30-day money-back guarantee.', 'seo-by-rank-math' ) }
				</p>

				<Button
					variant="link"
					onClick={ onClose }
					className={ `${ ns }__later` }
				>
					{ __( 'I\'ll do this later', 'seo-by-rank-math' ) }
				</Button>
			</div>
		</Modal>
	)
}

UpgradePlanModal.displayName = 'UpgradePlanModal'

export default UpgradePlanModal
PK     ¤ŠU]�ã#\    J  includes/modules/ai-visibility/assets/src/shared/Modals/AccessGateModal.jsnu „[µü¤        /**
 * AccessGateModal â€” shared gradient-header shell for the access-gate modals
 * (Free Users, Paid Users trial, trial success). Non-dismissible by default.
 *
 * @since 1.0.281
 */

/**
 * External dependencies
 */
import { compact, join } from 'lodash'

/**
 * WordPress dependencies
 */
import { Modal } from '@wordpress/components'

/**
 * Internal dependencies
 */
import './AccessGateModal.scss'
import './ContentOverlay.scss'

const noop = () => {}

/**
 * AccessGateModal component.
 *
 * @param {Object}   props
 * @param {string}   [props.icon]                Header icon class (e.g. 'dashicons dashicons-lock').
 * @param {string}   props.title                 Header title.
 * @param {string}   [props.className]           Extra class for per-modal overrides.
 * @param {boolean}  [props.isDismissible=false] Allow closing via ESC / outside click.
 * @param {Function} [props.onRequestClose]      Close handler. Defaults to a no-op.
 * @param {*}        props.children              Body content.
 * @return {JSX.Element} Modal with gradient header.
 */
const AccessGateModal = ( {
	icon = '',
	title,
	className = '',
	isDismissible = false,
	onRequestClose = noop,
	children,
} ) => {
	const ns = 'rank-math-ai-visibility-access-gate-modal'

	return (
		<Modal
			onRequestClose={ onRequestClose }
			className={ join( compact( [ ns, className ] ), ' ' ) }
			overlayClassName="rank-math-modal-overlay rank-math-ai-visibility-content-overlay"
			isDismissible={ isDismissible }
			shouldCloseOnEsc={ isDismissible }
			shouldCloseOnClickOutside={ isDismissible }
			aria={ { labelledby: `${ ns }-title` } }
			__experimentalHideHeader
		>
			<div className={ `${ ns }__header` }>
				{ icon && (
					<i className={ `${ ns }__header-icon ${ icon }` } aria-hidden="true" />
				) }
				<h1 id={ `${ ns }-title` } className={ `${ ns }__title` }>
					{ title }
				</h1>
			</div>

			<div className={ `${ ns }__body` }>
				{ children }
			</div>
		</Modal>
	)
}

AccessGateModal.displayName = 'AccessGateModal'

export default AccessGateModal
PK     ¤ŠU]sâ#µ  µ  K  includes/modules/ai-visibility/assets/src/shared/Modals/CheckoutIframe.scssnu „[µü¤        /**
 * CheckoutIframe â€” Content AI checkout iframe + loading/error states.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-checkout-iframe {
	display: block;
	width:   100%;
	height:  100%;
	border:  0;

	// Loading / error state â€” fills the body, on a white surface so the
	// spinner/message stays readable over the gradient body.
	&__state {
		display:         flex;
		flex-direction:  column;
		align-items:     center;
		justify-content: center;
		gap:             $space-md;
		height:          72vh;
		background:      $color-surface;
	}

	&__error {
		margin:     0;
		max-width:  360px;
		font-size:  14px;
		color:      $color-text-body;
		text-align: center;
	}
}
PK     ¤ŠU]íp·ÏM7  M7  H  includes/modules/ai-visibility/assets/src/shared/Modals/AddBrandModal.jsnu „[µü¤        /**
 * AddBrandModal â€” add / edit brand form dialog.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useEffect, useMemo, useRef } from '@wordpress/element'
import { Modal, TextControl, TextareaControl, SelectControl, CheckboxControl, Icon } from '@wordpress/components'
import { close } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import { SelectWithSearch } from '@rank-math/components'
import Button from '../components/Button'
import LoadingButton from '../components/LoadingButton'
import getLink from '@helpers/getLink'
import './AddBrandModal.scss'

// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------

const EMPTY_FORM = {
	name: '',
	url: '',
	description: '',
	locale: '',
	interval: 'weekly',
	platforms: [ 'chatgpt' ],
}

/**
 * Order in which fields are validated / scrolled to.
 * Used to focus the first errored field on a failed save.
 */
const FIELD_ORDER = [ 'name', 'url', 'description' ]

/**
 * Analysis interval options.
 */
const INTERVAL_OPTIONS = [
	{ label: __( 'Weekly', 'seo-by-rank-math' ), value: 'weekly', disabled: false },
	{ label: __( 'Monthly (Coming Soon)', 'seo-by-rank-math' ), value: 'monthly', disabled: true },
	{ label: __( 'Daily (Coming Soon)', 'seo-by-rank-math' ), value: 'daily', disabled: true },
]

/**
 * AI Platform definitions.
 *
 * `enabled` â€” whether the platform is available for selection.
 * Disabled platforms show a "Coming Soon" badge.
 *
 * Layout: left column = index 0â€“2, right column = index 3â€“4.
 */
const AI_PLATFORMS = [
	{ id: 'chatgpt', label: 'ChatGPT', enabled: true },
	{ id: 'perplexity', label: 'Perplexity', enabled: false },
	{ id: 'google_ai_overview', label: 'Google AI Overview', enabled: false },
	{ id: 'gemini', label: 'Gemini', enabled: false },
	{ id: 'claude', label: 'Claude', enabled: false },
]

const LEFT_PLATFORMS = AI_PLATFORMS.slice( 0, 3 )
const RIGHT_PLATFORMS = AI_PLATFORMS.slice( 3 )

// ---------------------------------------------------------------------------
// Sub-components
// ---------------------------------------------------------------------------

/** "Coming Soon" pill badge. */
const ComingSoonBadge = () => (
	<span className="rank-math-ai-visibility-add-brand-modal__coming-soon">
		{ __( 'Coming Soon', 'seo-by-rank-math' ) }
	</span>
)

/**
 * Single platform row â€” checkbox + label + optional badge.
 *
 * @param {Object}   props
 * @param {Object}   props.platform Platform definition object.
 * @param {boolean}  props.checked  Whether the checkbox is checked.
 * @param {Function} props.onChange Toggle handler.
 * @param {boolean}  props.disabled Parent-level disabled (isSaving).
 */
const PlatformRow = ( { platform, checked, onChange, disabled } ) => {
	const ns = 'rank-math-ai-visibility-add-brand-modal'
	const isEnabled = platform.enabled
	const rowClass = [
		`${ ns }__platform-row`,
		! isEnabled ? `${ ns }__platform-row--disabled` : '',
	].filter( Boolean ).join( ' ' )

	return (
		<div className={ rowClass }>
			<CheckboxControl
				label={ platform.label }
				checked={ isEnabled ? checked : false }
				onChange={ isEnabled ? onChange : undefined }
				disabled={ ! isEnabled || disabled }
				__nextHasNoMarginBottom={ true }
			/>
			{ ! isEnabled && <ComingSoonBadge /> }
		</div>
	)
}

/**
 * AddBrandModal component.
 *
 * @param {Object}        props
 * @param {Object|null}   [props.brand=null]     null = add mode, object = edit (pre-fills form).
 * @param {Function}      props.onSave           Called with the validated form payload.
 * @param {Function}      props.onClose          Called when the modal should close.
 * @param {boolean}       [props.isSaving=false] Shows spinner + disables all fields.
 * @param {string | null} props.apiError         API error message to display.
 * @param {Array}         [props.locales=[]]     Locale options injected from PHP via wp_localize_script.
 * @return {JSX.Element} Brand add/edit dialog.
 */
const AddBrandModal = ( {
	brand = null,
	onSave,
	onClose,
	isSaving = false,
	apiError = null,
	locales = [],
} ) => {
	const [ form, setForm ] = useState( EMPTY_FORM )
	const [ errors, setErrors ] = useState( {} )

	const ns = 'rank-math-ai-visibility-add-brand-modal'

	// Refs to field wrappers â€” used to scroll/focus the first errored field.
	const fieldRefs = {
		name: useRef( null ),
		url: useRef( null ),
		description: useRef( null ),
	}

	// Locale options â€” object map expected by SelectWithSearch: { value: label, â€¦ }
	// Memoized so the object is only rebuilt when the locales prop changes.
	const localeOptions = useMemo(
		() => locales.reduce( ( acc, { value, label } ) => {
			acc[ value ] = label
			return acc
		}, { '': __( 'Select country (optional)', 'seo-by-rank-math' ) } ),
		[ locales ]
	)

	// Pre-fill when editing.
	useEffect( () => {
		if ( brand ) {
			setForm( {
				id: brand.id,
				name: brand.name ?? '',
				url: brand.url ?? '',
				description: brand.description ?? '',
				locale: brand.locale ?? '',
				interval: brand.interval ?? 'weekly',
				platforms: brand.platforms ?? [ 'chatgpt' ],
			} )
		} else {
			setForm( EMPTY_FORM )
		}
	}, [ brand ] )

	// â”€â”€ Field helpers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	const set = ( field ) => ( value ) => {
		setForm( ( prev ) => ( { ...prev, [ field ]: value } ) )
		setErrors( ( prev ) => {
			if ( ! prev[ field ] ) {
				return prev
			}
			const next = { ...prev }
			delete next[ field ]
			return next
		} )
	}

	/**
	 * Toggle a platform ID in the platforms array.
	 *
	 * @param {string} id Platform id to toggle.
	 */
	const togglePlatform = ( id ) => {
		setForm( ( prev ) => {
			const exists = prev.platforms.includes( id )
			return {
				...prev,
				platforms: exists
					? prev.platforms.filter( ( p ) => p !== id )
					: [ ...prev.platforms, id ],
			}
		} )
	}

	/**
	 * On blur: if the user typed a bare domain or a protocol-relative URL,
	 * silently prepend `https://` so validation always sees a full URL.
	 */
	const handleUrlBlur = () => {
		const val = form.url.trim()
		if ( ! val || /^https?:\/\//i.test( val ) ) {
			return
		}
		const normalized = val.startsWith( '//' ) ? 'https:' + val : 'https://' + val
		set( 'url' )( normalized )
	}

	// â”€â”€ Validation â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	const validate = () => {
		const newErrors = {}

		if ( ! form.name.trim() ) {
			newErrors.name = __( 'Brand name is required.', 'seo-by-rank-math' )
		}
		if ( ! form.url.trim() ) {
			newErrors.url = __( 'Website URL is required.', 'seo-by-rank-math' )
		} else if ( ! /^https?:\/\/.+\..+/.test( form.url.trim() ) ) {
			newErrors.url = __( 'Please enter a valid URL (must start with https://).', 'seo-by-rank-math' )
		}
		if ( ! form.description.trim() ) {
			newErrors.description = __( 'Description is required.', 'seo-by-rank-math' )
		}

		setErrors( newErrors )
		return newErrors
	}

	/**
	 * Scroll to (and focus) the first field that has a validation error,
	 * so the user is taken straight to what needs fixing.
	 *
	 * @param {Object} errs Errors keyed by field name.
	 */
	const scrollToFirstError = ( errs ) => {
		const firstField = FIELD_ORDER.find( ( field ) => errs[ field ] )
		const node = firstField ? fieldRefs[ firstField ]?.current : null
		if ( ! node ) {
			return
		}
		node.scrollIntoView( { behavior: 'smooth', block: 'center' } )
		const input = node.querySelector( 'input, textarea' )
		if ( input ) {
			input.focus( { preventScroll: true } )
		}
	}

	// â”€â”€ Save â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

	const handleSave = () => {
		const newErrors = validate()
		if ( Object.keys( newErrors ).length > 0 ) {
			scrollToFirstError( newErrors )
			return
		}
		onSave( {
			name: form.name.trim(),
			url: form.url.trim(),
			description: form.description.trim(),
			locale: form.locale,
			interval: form.interval,
			platforms: form.platforms,
		} )
	}

	const isEditMode = Boolean( brand )
	const isActionDisabled = isSaving || form?.platforms?.length === 0 || Object.keys( errors ).length > 0

	return (
		<Modal
			onRequestClose={ onClose }
			className={ ns }
			__experimentalHideHeader
		>
			{ /* â”€â”€ Custom header: title + subtitle + close button â”€â”€ */ }
			<div className={ `${ ns }__header` }>
				<div className={ `${ ns }__header-text` }>
					<h1 className={ `${ ns }__title` }>
						{ isEditMode ? __( 'Edit Brand or Product', 'seo-by-rank-math' ) : __( 'Add Brand or Product', 'seo-by-rank-math' ) }
					</h1>
					<p className={ `${ ns }__subtitle` }>
						{ __( 'Share the basics so we can start tracking this brand or a product.', 'seo-by-rank-math' ) }
						<a href={ getLink( 'ai-visibility', 'AI Visibility Add Brand Modal' ) } target="_blank" rel="noopener noreferrer">
							{ __( 'Learn more', 'seo-by-rank-math' ) }
						</a>
					</p>
				</div>

				<Button
					variant=""
					onClick={ onClose }
					disabled={ isSaving }
					className={ `${ ns }__close` }
				>
					<Icon icon={ close } size={ 24 } />
				</Button>
			</div>

			{ /* â”€â”€ Divider between header and body â”€â”€ */ }
			<hr className={ `${ ns }__divider` } />

			{ /* â”€â”€ Body: form fields â”€â”€ */ }
			<div className={ `${ ns }__body` }>

				{ /* Brand / Product Name */ }
				<div className={ `${ ns }__field` } ref={ fieldRefs.name }>
					<TextControl
						label={ __( 'Brand / Product Name', 'seo-by-rank-math' ) }
						value={ form.name }
						onChange={ set( 'name' ) }
						placeholder={ __( 'Enter your brand or product name', 'seo-by-rank-math' ) }
						disabled={ isSaving }
						help={ errors.name }
						className={ errors.name ? `${ ns }__field--error` : '' }
						__next40pxDefaultSize={ true }
						__nextHasNoMarginBottom={ true }
					/>
				</div>

				{ /* Brand / Product URL */ }
				<div className={ `${ ns }__field` } ref={ fieldRefs.url }>
					<TextControl
						label={ __( 'Brand / Product URL', 'seo-by-rank-math' ) }
						value={ form.url }
						onChange={ set( 'url' ) }
						onBlur={ handleUrlBlur }
						placeholder="https://example.com"
						type="url"
						disabled={ isSaving }
						help={ errors.url }
						className={ errors.url ? `${ ns }__field--error` : '' }
						__next40pxDefaultSize={ true }
						__nextHasNoMarginBottom={ true }
					/>
				</div>

				{ /* Description */ }
				<div className={ `${ ns }__field` } ref={ fieldRefs.description }>
					<TextareaControl
						label={ __( 'How would you describe your brand/product?', 'seo-by-rank-math' ) }
						value={ form.description }
						onChange={ set( 'description' ) }
						placeholder={ __( 'Describe what your brand/product does, who it\'s for, and what makes it unique. This helps AI models identify and accurately represent you.', 'seo-by-rank-math' ) }
						disabled={ isSaving }
						rows={ 3 }
						help={ errors.description }
						className={ errors.description ? `${ ns }__field--error` : '' }
						__nextHasNoMarginBottom={ true }
					/>
				</div>

				{ /* Target Country (optional) */ }
				<div className={ `${ ns }__field` }>
					<span className={ `${ ns }__label` }>
						{ __( 'Target Country (Optional)', 'seo-by-rank-math' ) }
					</span>
					<SelectWithSearch
						value={ form.locale }
						options={ localeOptions }
						onChange={ set( 'locale' ) }
						disabled={ isSaving }
					/>
				</div>

				{ /* Interval */ }
				<div className={ `${ ns }__field` }>
					<SelectControl
						label={ __( 'Frequency of analyses', 'seo-by-rank-math' ) }
						value={ form.interval }
						options={ INTERVAL_OPTIONS }
						onChange={ set( 'interval' ) }
						disabled={ isSaving }
						__next40pxDefaultSize={ true }
						__nextHasNoMarginBottom={ true }
					/>
				</div>

				{ /* AI Platforms */ }
				<div className={ `${ ns }__field` }>
					<span className={ `${ ns }__label` }>
						{ __( 'AI Platforms', 'seo-by-rank-math' ) }
					</span>
					<div className={ `${ ns }__platforms` }>
						<div className={ `${ ns }__platforms-col` }>
							{ LEFT_PLATFORMS.map( ( platform ) => (
								<PlatformRow
									key={ platform.id }
									platform={ platform }
									checked={ form.platforms.includes( platform.id ) }
									onChange={ () => togglePlatform( platform.id ) }
									disabled={ isSaving }
								/>
							) ) }
						</div>
						<div className={ `${ ns }__platforms-col` }>
							{ RIGHT_PLATFORMS.map( ( platform ) => (
								<PlatformRow
									key={ platform.id }
									platform={ platform }
									checked={ form.platforms.includes( platform.id ) }
									onChange={ () => togglePlatform( platform.id ) }
									disabled={ isSaving }
								/>
							) ) }
						</div>
					</div>
				</div>

			</div>

			{ /* â”€â”€ API error message â”€â”€ */ }
			{ apiError && (
				<div className={ `${ ns }__api-error` } role="alert">
					{ apiError }
				</div>
			) }

			{ /* â”€â”€ Footer â”€â”€ */ }
			<div className={ `${ ns }__footer` }>
				<Button
					variant="secondary"
					onClick={ onClose }
					disabled={ isSaving }
				>
					{ __( 'Cancel', 'seo-by-rank-math' ) }
				</Button>

				<LoadingButton
					variant="primary"
					onClick={ handleSave }
					isLoading={ isSaving }
					loadingLabel={ isEditMode
						? __( 'Savingâ€¦', 'seo-by-rank-math' )
						: __( 'Addingâ€¦', 'seo-by-rank-math' )
					}
					disabled={ isActionDisabled }
				>
					{
						isEditMode
							? __( 'Save Changes', 'seo-by-rank-math' )
							: __( 'Add', 'seo-by-rank-math' )
					}
				</LoadingButton>
			</div>
		</Modal>
	)
}

AddBrandModal.displayName = 'AddBrandModal'

export default AddBrandModal
PK     ¤ŠU]¬ö¾kÂ  Â  M  includes/modules/ai-visibility/assets/src/shared/Modals/UpgradePlanModal.scssnu „[µü¤        /**
 * UpgradePlanModal â€” brand-limit upgrade prompt shell styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-upgrade-plan-modal {

	&.components-modal__frame {
		width:      1060px;
		max-width:  95vw;
		max-height: 92vh;
	}

	.components-modal__content {
		padding: 0;
	}

	// -------------------------------------------------------------------------
	// Header â€” icon + title/subtitle on the left, close Ã— on the right.
	// -------------------------------------------------------------------------

	&__header {
		display:     flex;
		align-items: flex-start;
		gap:         14px;
		padding:     $space-lg $space-xl;
	}

	&__header-icon.dashicons {
		flex-shrink: 0;
		margin-top:  2px;
		width:       24px;
		height:      24px;
		font-size:   24px;
		line-height: 1;
		color:       $color-text-primary;
	}

	&__header-text {
		display:        flex;
		flex-direction: column;
		gap:            4px;
		flex:           1;
	}

	&__title {
		margin:      0;
		font-size:   18px;
		font-weight: 600;
		line-height: 1.3;
		color:       $color-text-primary;
	}

	&__subtitle {
		margin:      0;
		font-size:   13px;
		line-height: 1.5;
		color:       $gate-footnote-color;
	}

	&__close.components-button {
		display:         flex;
		align-items:     center;
		justify-content: center;
		width:           30px;
		height:          30px;
		padding:         0;
		flex-shrink:     0;
		background:      transparent;
		border:          1px solid $color-border;
		border-radius:   $radius-sm;
		color:           $color-text-muted;
		cursor:          pointer;

		&:hover:not( :disabled ) {
			background: rgba( 0, 0, 0, 0.04 );
			color:      $color-text-primary !important;
		}

		&:focus-visible {
			outline:        2px solid $color-btn-primary;
			outline-offset: 2px;
			box-shadow:     none;
		}

		&:focus:not( :active ) {
			box-shadow: none;
		}
	}

	// -------------------------------------------------------------------------
	// Body â€” gradient backdrop; hosts the pricing iframe once available.
	// -------------------------------------------------------------------------

	&__body {
		background: $gate-gradient;

		// Definite, viewport-based height so the full pricing page shows and
		// scrolls internally â€” the iframe content has no height of its own.
		iframe {
			display: block;
			width:   100%;
			height:  72vh;
			border:  0;
		}
	}

	// -------------------------------------------------------------------------
	// Footer â€” guarantee note (left) + "I'll do this later" (right).
	// -------------------------------------------------------------------------

	&__footer {
		display:         flex;
		align-items:     center;
		justify-content: space-between;
		gap:             $space-md;
		padding:         $space-md $space-xl;
		background:      $color-surface;
	}

	&__guarantee {
		margin:    0;
		font-size: 13px;
		color:     $color-text-body;
	}

	&__later.components-button {
		padding:         0;
		height:          auto;
		font-size:       14px;
		font-weight:     500;
		color:           $color-btn-primary;
		background:      transparent;
		border:          none;
		box-shadow:      none;
		text-decoration: none;

		&:hover:not( :disabled ) {
			color:           darken( $color-btn-primary, 8% ) !important;
			text-decoration: underline;
			background:      transparent;
		}

		&:focus-visible {
			outline:        2px solid $color-btn-primary;
			outline-offset: 2px;
			box-shadow:     none;
		}

		&:focus:not( :focus-visible ) {
			box-shadow: none;
		}
	}
}
PK     ¤ŠU]Ç[–u  u  M  includes/modules/ai-visibility/assets/src/shared/Modals/FeatureChecklist.scssnu „[µü¤        /**
 * FeatureChecklist â€” green check-bullet feature list styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-feature-checklist {
	display:        flex;
	flex-direction: column;
	gap:            14px;
	margin:         0;
	padding:        0;
	list-style:     none;

	&__item {
		display:     flex;
		align-items: center;
		gap:         14px;
		margin:      0;
	}

	&__icon.dashicons {
		flex-shrink: 0;
		width:       20px;
		height:      20px;
		font-size:   20px;
		line-height: 1;
		color:       $color-cta;
	}

	&__label {
		font-size:   14px;
		line-height: 1.4;
		color:       $color-text-primary;
	}
}
PK     ¤ŠU] Yó  ó  O  includes/modules/ai-visibility/assets/src/shared/Modals/UpgradeToUnlockModal.jsnu „[µü¤        /**
 * UpgradeToUnlockModal â€” access gate for free plugin users on the Free
 * Content AI plan. The CTA links to the Content AI purchase page; the
 * module unlocks automatically on reload after purchase.
 *
 * @since 1.0.281
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { Icon } from '@wordpress/components'
import { arrowRight } from '@wordpress/icons'

/**
 * Internal dependencies
 */
import getLink from '@helpers/getLink'
import Button from '../components/Button'
import AccessGateModal from './AccessGateModal'
import FeatureChecklist from './FeatureChecklist'

/**
 * UpgradeToUnlockModal component.
 *
 * @return {JSX.Element} Non-dismissible upgrade gate modal.
 */
const UpgradeToUnlockModal = () => {
	const ns = 'rank-math-ai-visibility-gate'

	return (
		<AccessGateModal
			icon="dashicons dashicons-lock"
			title={ __( 'Upgrade to Unlock AI Visibility', 'seo-by-rank-math' ) }
			className="rank-math-ai-visibility-unlock-modal"
		>
			<p className={ `${ ns }__intro` }>
				<strong>
					{ __( 'Your competitors are already tracking their AI presence. You should be too.', 'seo-by-rank-math' ) }
				</strong>
				{ ' ' }
				{ __( 'Upgrade to unlock AI Visibility module and see where your brand appears across ChatGPT, and other AI platforms, and take action before you fall further behind.', 'seo-by-rank-math' ) }
			</p>

			<FeatureChecklist />

			<div className={ `${ ns }__actions` }>
				<Button
					variant="primary"
					className={ `${ ns }__cta` }
					href={ getLink( 'content-ai-pricing-tables', 'AI Visibility Upgrade Modal' ) }
					target="_blank"
					rel="noreferrer"
					iconRight={ <Icon icon={ arrowRight } size={ 18 } /> }
				>
					{ __( 'Start 15-Day Free Trial', 'seo-by-rank-math' ) }
				</Button>
			</div>

			<p className={ `${ ns }__footnote` }>
				{ __( '30-Day Money-Back Guarantee', 'seo-by-rank-math' ) }
			</p>
		</AccessGateModal>
	)
}

UpgradeToUnlockModal.displayName = 'UpgradeToUnlockModal'

export default UpgradeToUnlockModal
PK     ¤ŠU]Qg3Ì'  '  K  includes/modules/ai-visibility/assets/src/shared/Modals/ContentOverlay.scssnu „[µü¤        /**
 * ContentOverlay â€” confines the WP Modal overlay to the wp-admin content
 * area so the admin bar, sidebar menu, and footer stay clickable.
 * Applied via the Modal `overlayClassName` prop; offsets mirror wp-admin's
 * own layout rules.
 */

.rank-math-ai-visibility-content-overlay.components-modal__screen-overlay {
	top:  32px;   // #wpadminbar
	left: 160px;  // #adminmenuwrap
	z-index: 999999;

	// Collapsed admin menu ("Collapse menu" toggle).
	body.folded & {
		left: 36px;
	}

	// RTL admin â€” menu sits on the right.
	body.rtl & {
		left:  0;
		right: 160px;
	}

	body.rtl.folded & {
		right: 36px;
	}

	// Auto-folded menu between 783â€“960px.
	@media ( max-width: 960px ) {
		body.auto-fold & {
			left: 36px;
		}

		body.rtl.auto-fold & {
			left:  0;
			right: 36px;
		}
	}

	// Mobile â€” admin bar grows to 46px and the menu goes off-canvas.
	@media ( max-width: 782px ) {
		top: 46px;

		&,
		body.folded &,
		body.auto-fold &,
		body.rtl & {
			left:  0;
			right: 0;
		}
	}
}

// The footer (#wpfooter) lives in the page flow, so a fixed overlay can't be
// excluded from it geometrically â€” lift it above the overlay (z-index 100000)
// while one of our content-area modals is open.
body:has( .rank-math-ai-visibility-content-overlay ) #wpfooter {
	position: relative;
	z-index:  100001;
}
PK     ¤ŠU]
cgÁ  Á  L  includes/modules/ai-visibility/assets/src/shared/Modals/AccessGateModal.scssnu „[µü¤        /**
 * AccessGateModal â€” gradient-header shell styles + shared "gate" elements
 * (intro, notice, error box, green CTA, footnote).
 */

@import '../../scss/variables';

.rank-math-ai-visibility-access-gate-modal {

	&.components-modal__frame {
		width:     600px;
		max-width: 95vw;
		max-height: 95%;
	}

	// Custom gradient header + body handle all spacing.
	.components-modal__content {
		padding: 0;
	}

	// -------------------------------------------------------------------------
	// Gradient header â€” icon + title on the purple â†’ blue gradient.
	// -------------------------------------------------------------------------

	&__header {
		display:     flex;
		align-items: center;
		gap:         14px;
		padding:     26px 56px;
		background:  $gate-gradient;
	}

	&__header-icon {
		flex-shrink: 0;
		color:       $color-text-light;

		&.dashicons,
		&.rm-icon {
			width:       26px;
			height:      26px;
			font-size:   26px;
			line-height: 1;
		}
	}

	&__title {
		margin:      0;
		font-size:   20px;
		font-weight: 500;
		line-height: 1.3;
		color:       $color-text-light !important;
	}

	// -------------------------------------------------------------------------
	// Body â€” vertical stack supplied by each modal.
	// -------------------------------------------------------------------------

	&__body {
		display:        flex;
		flex-direction: column;
		gap:            $space-lg;
		padding:        $space-xl 56px 28px;
	}
}

// ---------------------------------------------------------------------------
// Shared gate elements â€” used inside UpgradeToUnlockModal & ActivateTrialModal.
// ---------------------------------------------------------------------------

.rank-math-ai-visibility-gate {

	&__intro {
		margin:      0;
		font-size:   14px;
		line-height: 1.65;
		color:       $color-text-body;

		strong {
			color:       $color-text-primary;
			font-weight: 600;
		}
	}

	// Trial auto-renew notice (Paid Users modal).
	&__notice {
		margin:      0;
		padding:     12px 16px;
		font-size:   13px;
		line-height: 1.55;
		color:       $color-text-primary;
		background:  $trial-notice-bg;
		border-left: 3px solid $trial-notice-border;
		border-radius: 0 $radius-sm $radius-sm 0;
	}

	// API error â€” mirrors AddBrandModal's error box styling.
	&__error {
		margin:           0;
		padding:          10px 14px;
		background-color: #fff3f3;
		border:           1px solid #f0b8b8;
		border-radius:    $radius-sm;
		color:            #c0392b;
		font-size:        13px;
		line-height:      1.5;
	}

	&__actions {
		display: flex;
	}

	&__footnote {
		margin:     -12px 0 0;
		font-size:  12px;
		color:      $gate-footnote-color;
	}
}

// Green CTA â€” overrides the module primary button colour.
// Triple selector beats `&--primary.components-button` in Button.scss.
.rank-math-ai-visibility-btn.rank-math-ai-visibility-gate__cta.components-button {
	background:  $color-cta;
	color:       $color-cta-text;
	font-size:   14px;
	padding:     12px 16px;

	svg {
		fill: $color-cta-text;
	}

	&:hover:not( :disabled ) {
		background: darken( $color-cta, 6% );
		color:      $color-cta-text !important;
	}

	&:focus-visible {
		background: $color-cta;
		color:      $color-cta-text !important;
		box-shadow: 0 0 0 2px #fff, 0 0 0 4px $color-cta;
	}

	&:focus:not( :focus-visible ):not( :disabled ) {
		background: $color-cta;
		color:      $color-cta-text !important;
	}

	&:active:not( :disabled ) {
		background: darken( $color-cta, 10% );
		color:      $color-cta-text !important;
	}
}
PK     ¤ŠU]˜~Ù  Ù  K  includes/modules/ai-visibility/assets/src/shared/Modals/FeatureChecklist.jsnu „[µü¤        /**
 * FeatureChecklist â€” green check-bullet benefit list shared by the
 * UpgradeToUnlockModal and ActivateTrialModal.
 *
 * @since 1.0.281
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import './FeatureChecklist.scss'

/**
 * Default benefit rows â€” copy matches the Figma designs verbatim.
 */
const DEFAULT_FEATURES = [
	__( 'Track how often AI mentions your brand', 'seo-by-rank-math' ),
	__( 'Monitor sentiment across AI search results', 'seo-by-rank-math' ),
	__( 'See which pages AI models cite as sources', 'seo-by-rank-math' ),
	__( 'Benchmark your AI visibility against competitors', 'seo-by-rank-math' ),
	__( 'Spot opportunities to grow your AI-driven traffic', 'seo-by-rank-math' ),
]

/**
 * FeatureChecklist component.
 *
 * @param {Object}   props
 * @param {string[]} [props.features] Feature labels. Defaults to the Figma list.
 * @return {JSX.Element} Unordered list with green check bullets.
 */
const FeatureChecklist = ( { features = DEFAULT_FEATURES } ) => {
	const ns = 'rank-math-ai-visibility-feature-checklist'

	return (
		<ul className={ ns }>
			{ features.map( ( feature ) => (
				<li key={ feature } className={ `${ ns }__item` }>
					<i className={ `${ ns }__icon dashicons dashicons-yes-alt` } aria-hidden="true" />
					<span className={ `${ ns }__label` }>{ feature }</span>
				</li>
			) ) }
		</ul>
	)
}

FeatureChecklist.displayName = 'FeatureChecklist'

export default FeatureChecklist
PK     ¤ŠU]& <+Š  Š  J  includes/modules/ai-visibility/assets/src/shared/Modals/AddBrandModal.scssnu „[µü¤        /**
 * AddBrandModal â€” add / edit brand form styles.
 */

@import '../../scss/variables';

.rank-math-ai-visibility-add-brand-modal {

	&.components-modal__frame {
		width:     585px;
		max-width: 95vw;
		max-height: 85%;
	}

	// Remove default padding â€” our custom header + body handle all spacing.
	.components-modal__content {
		padding: 0;
	}

	// -------------------------------------------------------------------------
	// Custom header â€” title + subtitle on the left, close Ã— on the right.
	// -------------------------------------------------------------------------

	&__header {
		display:         flex;
		align-items:     flex-start;
		justify-content: space-between;
		padding:         30px 32px 32px 54px;
	}

	&__header-text {
		display:        flex;
		flex-direction: column;
		gap:            6px;
	}

	&__title {
		margin:      0;
		font-size:   18px;
		font-weight: 400;
		line-height: 1.3;
		color:       $color-text-primary;
	}

	&__subtitle {
		margin:      0;
		font-size:   13px;
		line-height: 1.5;
		color:       $color-text-muted;

		a {
			margin-left: 2px;
		}
	}

	&__close {
		display:          flex;
		align-items:      center;
		justify-content:  center;
		width:            32px;
		height:           32px;
		padding:          0;
		background:       transparent;
		border:           none;
		border-radius:    $radius-sm;
		color:            $color-text-muted;
		cursor:           pointer;
		flex-shrink:      0;
		margin-top:       -4px;

		&:hover {
			background: rgba( 0, 0, 0, 0.06 );
			color:      $color-text-primary;
		}

		&:focus-visible {
			outline:        2px solid $color-text-secondary;
			outline-offset: 2px;
		}

		&[aria-expanded="true"],
		&:hover:not(:disabled, [aria-disabled="true"]) {
			background: transparent;
			color: inherit;
		}

		&:focus:not(:active) {
			box-shadow: none;
		}
	}

	// -------------------------------------------------------------------------
	// Divider between header and body.
	// -------------------------------------------------------------------------

	&__divider {
		margin:     0;
		border:     none;
		border-top: 1px solid $color-border;
	}

	// -------------------------------------------------------------------------
	// Body â€” vertical stack of field wrappers.
	// -------------------------------------------------------------------------

	&__body {
		display:        flex;
		flex-direction: column;
		gap:            22px;
		padding:        36px 56px;;
	}

	&__field {
		display:        flex;
		flex-direction: column;
		gap:            6px;
	}

	&__label {
		display:        flex;
		align-items:    center;
		gap:            6px;
		font-size:      11px;
		font-weight:    500;
		text-transform: uppercase;
		letter-spacing: 0.5px;
		color:          $color-text-primary;
	}

	&__info-icon {
		color:       $color-text-muted;
		flex-shrink: 0;
	}

	.components-base-control__label,
	.components-input-control__label {
		font-size:      11px;
		font-weight:    500;
		text-transform: uppercase;
		letter-spacing: 0.5px;
		color:          $color-text-primary;
	}

	.rank-math-select-with-searchbox  {
		max-width: 100%;

		.components-button {
			font-weight: normal;
			font-size: inherit;
			font-family: inherit;
			line-height: inherit;
		}
	}

	// -------------------------------------------------------------------------
	// Inline validation error state.
	// -------------------------------------------------------------------------

	&__field--error {
		.components-text-control__input, .components-textarea-control__input {
			border-color: $color-trend-down;

			&:focus {
				box-shadow: 0 0 0 1px $color-trend-down;
				border-color: $color-trend-down;
			}
		}

		.components-base-control__help {
			color: $color-trend-down;
		}
	}

	// -------------------------------------------------------------------------
	// Collapse WP default bottom margins on form controls.
	// -------------------------------------------------------------------------

	.components-base-control {
		margin-bottom: 0;
	}

	// -------------------------------------------------------------------------
	// AI Platforms â€” 2-column checkbox grid.
	// -------------------------------------------------------------------------

	&__platforms {
		display:               grid;
		grid-template-columns: 1fr 1fr;
		gap:                   10px 16px;
		margin-top:            4px;
	}

	&__platforms-col {
		display:        flex;
		flex-direction: column;
		gap:            10px;
	}

	&__platform-row {
		display:     flex;
		align-items: center;
		gap:         8px;

		.components-checkbox-control {
			margin-bottom: 0;
		}

		.components-checkbox-control__input-container,
		.components-checkbox-control__label {
			cursor: pointer;
		}

		&--disabled {
			opacity: 0.65;

			.components-checkbox-control__input-container,
			.components-checkbox-control__label {
				cursor: not-allowed;
			}
		}
	}

	// -------------------------------------------------------------------------
	// "Coming Soon" pill badge.
	// -------------------------------------------------------------------------

	&__coming-soon {
		display: inline-flex;
		align-items: center;
		padding: 0px 4px;
		background-color: #B7B7B724;
		color: #9D9D9D;
		font-size: 10px;
		font-weight: 500;
		white-space: nowrap;
		flex-shrink: 0;
		border: 1px solid #B7B7B721;
		border-radius: 2px;
	}

	// -------------------------------------------------------------------------
	// API error â€” shown above the footer when a backend error occurs.
	// -------------------------------------------------------------------------

	&__api-error {
		margin:           0 54px 0 54px;
		padding:          10px 14px;
		background-color: #fff3f3;
		border:           1px solid #f0b8b8;
		border-radius:    4px;
		color:            #c0392b;
		font-size:        13px;
		line-height:      1.5;
	}

	// -------------------------------------------------------------------------
	// Footer â€” right-aligned Cancel + primary action button.
	// -------------------------------------------------------------------------

	&__footer {
		display:         flex;
		justify-content: flex-end;
		align-items:     center;
		gap:             12px;
		padding: 		 20px 54px 24px 24px;

		.components-button {
			&.is-primary {
				min-height: 40px;
				padding: 12px 16px;
				font-weight: 300;
			}

			&.is-secondary {
				min-height: 40px;
				padding: 12px 16px;
				color: #757575;
				border-color: #949494;
			}
		}
	}

	.rank-math-ai-visibility-add-brand-modal__close {
		padding: 0px;
		color: #9b9b9b;
	}
}PK     ¤ŠU]:<°*V  V  O  includes/modules/ai-visibility/assets/src/shared/Modals/ActivateTrialModal.scssnu „[µü¤        /**
 * ActivateTrialModal â€” activating + success state styles.
 *
 * The idle/error pitch reuses the shared gate styles in GradientModal.scss.
 */

@import '../../scss/variables';

// ---------------------------------------------------------------------------
// Activating state â€” compact centered modal with spinner + steps.
// ---------------------------------------------------------------------------

.rank-math-ai-visibility-activating-modal {

	&.components-modal__frame {
		width:     440px;
		max-width: 95vw;
	}

	.components-modal__content {
		display:        flex;
		flex-direction: column;
		align-items:    center;
		gap:            12px;
		padding:        40px 40px $space-xl;
		text-align:     center;
	}

	&__spinner {
		margin-bottom: 4px;

		.components-spinner {
			width:  44px;
			height: 44px;
			margin: 0;
			color:  $color-btn-primary;
		}
	}

	&__title {
		margin:      0;
		font-size:   18px;
		font-weight: 500;
		line-height: 1.35;
		color:       $color-btn-primary;
	}

	&__subtitle {
		margin:      0;
		font-size:   13px;
		line-height: 1.55;
		color:       $gate-footnote-color;
	}

	// â”€â”€ Provisioning steps â”€â”€
	&__steps {
		display:        flex;
		flex-direction: column;
		align-items:    flex-start;
		gap:            $space-sm;
		margin:         12px 0 0;
		padding:        0;
		list-style:     none;
		text-align:     left;
	}

	&__step {
		display:     flex;
		align-items: center;
		gap:         8px;
		margin:      0;
		font-size:   12px;
		line-height: 1.4;
		color:       $color-text-muted;
		transition:  color 0.2s ease, opacity 0.2s ease;

		&--done,
		&--active {
			color: $color-btn-primary;
		}

		&--pending {
			opacity: 0.6;
		}
	}

	&__step-icon {
		display:         inline-flex;
		align-items:     center;
		justify-content: center;
		flex-shrink:     0;
		width:           14px;
		height:          14px;
		color:           currentColor;

		.rm-icon {
			font-size:   13px;
			line-height: 1;
		}
	}

	// Hollow circle for active/pending steps; active one spins a dash.
	&__step-circle {
		display:       block;
		width:         12px;
		height:        12px;
		border:        1.4px solid currentColor;
		border-radius: 50%;
	}

	&__step--active &__step-circle {
		border-top-color: transparent;
		animation:        rank-math-aiv-step-spin 0.9s linear infinite;
	}
}

@keyframes rank-math-aiv-step-spin {
	to {
		transform: rotate( 360deg );
	}
}

// ---------------------------------------------------------------------------
// Success state â€” Quick Start Guide placeholder + help links.
// ---------------------------------------------------------------------------

.rank-math-ai-visibility-trial-success {

	&__video {
		display:         flex;
		flex-direction:  column;
		align-items:     center;
		justify-content: center;
		gap:             $space-lg;
		min-height:      280px;
		padding:         $space-xl $space-lg;
		background:      $gate-video-bg;
		border-radius:   $radius-md;
		color:           $color-text-light;
	}

	&__video--idle {
		cursor: pointer;

		&:hover,
		&:focus-visible {
			outline: none;

			.rank-math-ai-visibility-trial-success__video-play {
				opacity: .75;
				transform: scale( 1.1 );
			}
		}
	}

	&__video--playing {
		padding: 0;
		overflow: hidden;
	}

	&__video-iframe {
		display:      block;
		width:        100%;
		height:       280px;
		border:       0;
		border-radius: $radius-md;
	}

	&__video-play.dashicons {
		width:       48px;
		height:      48px;
		font-size:   48px;
		line-height: 1;
		transition:  opacity .2s ease, transform .2s ease;
	}

	&__video-caption {
		font-size:      12px;
		font-weight:    500;
		letter-spacing: 1.5px;
		text-transform: uppercase;
	}

	&__links {
		display:     flex;
		align-items: center;
		gap:         28px;
	}

	&__link {
		display:         inline-flex;
		align-items:     center;
		gap:             7px;
		font-size:       14px;
		color:           $color-btn-primary;
		text-decoration: none;

		.rm-icon {
			flex-shrink: 0;
			font-size:   16px;
			line-height: 1;
		}

		&:hover,
		&:focus {
			color:           darken( $color-btn-primary, 8% );
			text-decoration: underline;
			box-shadow:      none;
		}
	}
}
PK     ¤ŠU]�mc±§  §  @  includes/modules/ai-visibility/assets/src/shared/Modals/index.jsnu „[µü¤        /**
 * AI Visibility â€” shared Modals barrel.
 *
 * Re-exports every shared modal so call sites import from
 * '../../shared/Modals' rather than per-file paths.
 */

export { default as ConfirmModal } from './ConfirmModal'
export { default as AddBrandModal } from './AddBrandModal'
export { default as AccessGateModal } from './AccessGateModal'
export { default as FeatureChecklist } from './FeatureChecklist'
export { default as UpgradeToUnlockModal } from './UpgradeToUnlockModal'
export { default as ActivateTrialModal } from './ActivateTrialModal'
export { default as UpgradePlanModal } from './UpgradePlanModal'
export { default as CheckoutIframe } from './CheckoutIframe'
PK     ¤ŠU]ó~ml¶	  ¶	  I  includes/modules/ai-visibility/assets/src/shared/Modals/CheckoutIframe.jsnu „[µü¤        /**
 * CheckoutIframe â€” authenticated Content AI checkout/upgrade iframe.
 *
 * Fetches a fresh single-use checkout URL on mount (token expires in 15 min
 * and is consumed on first load) and renders it. A new URL is requested per
 * mount, so the parent must remount this component for each session rather
 * than reuse a stale URL.
 *
 * @since 1.0.273
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useEffect, useRef } from '@wordpress/element'
import { Spinner } from '@wordpress/components'

/**
 * Internal dependencies
 */
import Button from '../components/Button'
import { getCheckoutUrl } from '../services/api/aiVisibilityApi'
import './CheckoutIframe.scss'

/**
 * CheckoutIframe component.
 *
 * @return {JSX.Element} Loading, error, or iframe view.
 */
const CheckoutIframe = () => {
	const ns = 'rank-math-ai-visibility-checkout-iframe'

	const [ url, setUrl ] = useState( '' )
	const [ error, setError ] = useState( null )
	const [ loading, setLoading ] = useState( true )

	const requested = useRef( false )

	const fetchUrl = () => {
		setLoading( true )
		setError( null )

		getCheckoutUrl()
			.then( ( data ) => {
				// A missing URL means an error envelope slipped through with a
				// 2xx status (apiFetch only rejects on non-2xx), so surface its
				// message instead of rendering a blank iframe.
				if ( ! data?.url ) {
					throw new Error( data?.message || __( 'Could not start the checkout session. Please try again.', 'seo-by-rank-math' ) )
				}
				setUrl( data.url )
			} )
			.catch( ( err ) => setError( err?.message || __( 'Could not start the checkout session. Please try again.', 'seo-by-rank-math' ) ) )
			.finally( () => setLoading( false ) )
	}

	useEffect( () => {
		if ( requested.current ) {
			return
		}
		requested.current = true
		fetchUrl()
	}, [] )

	const retry = () => {
		requested.current = true
		fetchUrl()
	}

	if ( loading ) {
		return (
			<div className={ `${ ns }__state` }>
				<Spinner />
			</div>
		)
	}

	if ( error ) {
		return (
			<div className={ `${ ns }__state` }>
				<p className={ `${ ns }__error` }>{ error }</p>
				<Button variant="secondary" onClick={ retry }>
					{ __( 'Try Again', 'seo-by-rank-math' ) }
				</Button>
			</div>
		)
	}

	return (
		<iframe
			className={ ns }
			src={ url }
			title={ __( 'Upgrade your Content AI plan', 'seo-by-rank-math' ) }
		/>
	)
}

CheckoutIframe.displayName = 'CheckoutIframe'

export default CheckoutIframe
PK     ¤ŠU]ËA¶Ï	  	  <  includes/modules/ai-visibility/Api/class-base-controller.phpnu „[µü¤        <?php
/**
 * Base REST API controller.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility\Api
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility\Api;

use WP_Error;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Controller;
use RankMath\Rest\Rest_Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Abstract base.
 */
abstract class Base_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = Rest_Helper::BASE . '/ai-visibility';
	}

	/**
	 * Permission check â€” user must have `manage_options`.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return true|WP_Error
	 */
	public function check_admin_permission( $request ) {
		return Rest_Helper::can_manage_options();
	}

	/**
	 * Build a success response envelope.
	 *
	 * @param mixed  $data    Payload to return under `data`.
	 * @param string $message Optional human-readable status message.
	 *
	 * @return WP_REST_Response
	 */
	protected function success( $data, $message = '' ) {
		$response = [
			'success' => true,
			'data'    => $data,
		];

		if ( ! empty( $message ) ) {
			$response['message'] = $message;
		}

		return rest_ensure_response( $response );
	}

	/**
	 * Build an error response.
	 *
	 * @param string $code    Error code slug.
	 * @param string $message Human-readable message.
	 * @param int    $status  HTTP status code.
	 *
	 * @return WP_Error
	 */
	protected function error( $code, $message, $status = 400 ) {
		return new WP_Error( $code, $message, [ 'status' => $status ] );
	}

	/**
	 * Send a request to the AI Visibility backend.
	 *
	 * Centralises all `wp_remote_*` calls so every controller method only has
	 * to supply the HTTP verb, the path, and an optional payload.
	 *
	 * Return value
	 * ------------
	 * Returns the decoded JSON array on success. Returns a `WP_Error` on:
	 *   - Missing / invalid registration data (not connected to Rank Math).
	 *   - `wp_remote_request()` transport error (timeout, DNS, TLS, â€¦).
	 *   - Non-2xx HTTP status from the backend (code mapped to a slug).
	 *   - Response body that cannot be decoded as JSON.
	 *
	 * @param string $method           HTTP verb â€” 'GET', 'POST', 'PATCH', 'PUT', 'DELETE'.
	 * @param string $path             Backend path, e.g. '/api/v1/brands'.
	 * @param array  $body             Request payload (JSON-encoded automatically).
	 *
	 * @return array|WP_Error Decoded response array, or WP_Error on failure.
	 */
	protected function remote_request( $method, $path, $body = [] ) {
		$data = Admin_Helper::get_registration_data();
		if ( ! $data || empty( $data['api_key'] ) ) {
			return new WP_Error(
				'aiv_unauthorized',
				__( 'Rank Math account not connected. Please connect your account and try again.', 'seo-by-rank-math' ),
				[ 'status' => 401 ]
			);
		}

		$headers = [
			'Accept'        => 'application/json',
			'Content-Type'  => 'application/json',
			'x-username'    => $data['username'] ?? '',
			'x-site-url'    => $data['site_url'] ?? '',
			'x-cai-api-key' => $data['api_key'],
		];

		$args = [
			'method'  => strtoupper( $method ),
			'timeout' => 30,
			'headers' => $headers,
		];

		if ( ! empty( $body ) ) {
			$args['body'] = wp_json_encode( $body );
		}

		$url      = 'https://ai-visibility.rankmath.com/' . ltrim( $path, '/' );
		$response = wp_remote_request( $url, $args );

		if ( is_wp_error( $response ) ) {
			return new WP_Error(
				'aiv_request_failed',
				$response->get_error_message(),
				[ 'status' => 502 ]
			);
		}

		$http_code   = (int) wp_remote_retrieve_response_code( $response );
		$raw_body    = wp_remote_retrieve_body( $response );
		$decoded     = json_decode( $raw_body, true );
		$backend_msg = isset( $decoded['message'] ) ? $decoded['message'] : '';

		if ( $http_code < 200 || $http_code >= 300 ) {
			$error_map = [
				400 => 'aiv_bad_request',
				401 => 'aiv_unauthorized',
				402 => 'aiv_insufficient_credits',
				403 => 'aiv_plan_limit',
				404 => 'aiv_not_found',
				409 => 'aiv_conflict',
				422 => 'aiv_invalid_credentials',
			];

			if ( $http_code >= 500 ) {
				$code = 'aiv_server_error';
			} else {
				$code = isset( $error_map[ $http_code ] ) ? $error_map[ $http_code ] : 'aiv_request_failed';
			}

			$message = ! empty( $backend_msg )
				? $backend_msg
				/* translators: %d: HTTP status code returned by the backend. */
				: sprintf( __( 'AI Visibility API returned an unexpected status: %d', 'seo-by-rank-math' ), $http_code );

			return new WP_Error( $code, $message, [ 'status' => $http_code ] );
		}

		if ( null === $decoded ) {
			return new WP_Error(
				'aiv_bad_response',
				__( 'AI Visibility API returned an invalid response.', 'seo-by-rank-math' ),
				[ 'status' => 502 ]
			);
		}

		return $decoded;
	}
}
PK     ¤ŠU]ŽŽX•”Y  ”Y  >  includes/modules/ai-visibility/Api/class-brands-controller.phpnu „[µü¤        <?php
/**
 * Brands REST API controller.
 *
 * Cache-backed proxy for the AI Visibility backend with SWR caching.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility\Api
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility\Api;

use WP_REST_Server;
use WP_REST_Request;
use RankMath\AI_Visibility\Cache;

defined( 'ABSPATH' ) || exit;

/**
 * Brands_Controller class.
 */
class Brands_Controller extends Base_Controller {

	/**
	 * Regex segment that matches a brand UUID.
	 */
	const BRAND_ID_PATTERN = '(?P<id>[a-zA-Z0-9\-]+)';

	/**
	 * Register routes.
	 */
	public function register_routes() {
		$id_arg = [
			'id' => [
				'description'       => esc_html__( 'Brand UUID.', 'seo-by-rank-math' ),
				'type'              => 'string',
				'required'          => true,
				'sanitize_callback' => 'sanitize_text_field',
				'validate_callback' => 'rest_validate_request_arg',
			],
		];

		// GET /overview â€” dashboard payload: summary + per-brand rollup rows.
		register_rest_route(
			$this->namespace,
			'/overview',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_overview' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => [
					'refresh' => [
						'description'       => esc_html__( 'Force a refresh from the AI Visibility API.', 'seo-by-rank-math' ),
						'type'              => 'boolean',
						'required'          => false,
						'default'           => false,
						'sanitize_callback' => 'rest_sanitize_boolean',
					],
					'search'  => [
						'description'       => esc_html__( 'Filter brands by name or URL.', 'seo-by-rank-math' ),
						'type'              => 'string',
						'required'          => false,
						'default'           => '',
						'sanitize_callback' => 'sanitize_text_field',
					],
				],
			]
		);

		// GET /brands/{id} â€” single brand identity (incl. description).
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN,
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_brand' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => $id_arg,
			]
		);

		// POST /brands â€” create a new brand.
		register_rest_route(
			$this->namespace,
			'/brands',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'create_brand' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => [
					'name'        => [
						'description'       => esc_html__( 'Brand name.', 'seo-by-rank-math' ),
						'type'              => 'string',
						'required'          => true,
						'sanitize_callback' => 'sanitize_text_field',
					],
					'url'         => [
						'description'       => esc_html__( 'Brand website URL or domain.', 'seo-by-rank-math' ),
						'type'              => 'string',
						'required'          => true,
						'sanitize_callback' => 'esc_url_raw',
					],
					'description' => [
						'description'       => esc_html__( 'Short description of the brand or product.', 'seo-by-rank-math' ),
						'type'              => 'string',
						'required'          => true,
						'sanitize_callback' => 'sanitize_textarea_field',
					],
					'locale'      => [
						'description'       => esc_html__( 'ISO 3166-1 alpha-2 country code (e.g. "US", "HU").', 'seo-by-rank-math' ),
						'type'              => 'string',
						'required'          => false,
						'sanitize_callback' => 'sanitize_text_field',
					],
				],
			]
		);

		// PUT/PATCH /brands/{id} â€” update brand fields and/or status.
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN,
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'update_brand' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => array_merge(
					$id_arg,
					[
						'name'        => [
							'type'              => 'string',
							'required'          => false,
							'sanitize_callback' => 'sanitize_text_field',
						],
						'url'         => [
							'type'              => 'string',
							'required'          => false,
							'sanitize_callback' => 'esc_url_raw',
						],
						'description' => [
							'type'              => 'string',
							'required'          => false,
							'sanitize_callback' => 'sanitize_textarea_field',
						],
						'locale'      => [
							'type'              => 'string',
							'required'          => false,
							'sanitize_callback' => 'sanitize_text_field',
						],
						'status'      => [
							'type'              => 'string',
							'required'          => false,
							'enum'              => [ 'active', 'inactive' ],
							'sanitize_callback' => 'sanitize_text_field',
						],
					]
				),
			]
		);

		// GET /brands/{id}/insights â€” full latest-analysis payload
		// (competitors + transcripts). Cache-first; the only proxy route that
		// may call the upstream analyses/results endpoint.
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN . '/insights',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_insights' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => $id_arg,
			]
		);

		// GET /brands/{id}/queries â€” list queries for a brand.
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN . '/queries',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_queries' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => $id_arg,
			]
		);

		// PUT /brands/{id}/queries/{qid} â€” enable/disable a query.
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN . '/queries/(?P<qid>[a-zA-Z0-9\-]+)',
			[
				'methods'             => WP_REST_Server::EDITABLE,
				'callback'            => [ $this, 'update_query' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => array_merge(
					$id_arg,
					[
						'qid'     => [
							'description'       => esc_html__( 'Query UUID.', 'seo-by-rank-math' ),
							'type'              => 'string',
							'required'          => true,
							'sanitize_callback' => 'sanitize_text_field',
							'validate_callback' => 'rest_validate_request_arg',
						],
						'enabled' => [
							'description' => esc_html__( 'Whether the query is enabled for analysis.', 'seo-by-rank-math' ),
							'type'        => 'boolean',
							'required'    => true,
						],
					]
				),
			]
		);

		// POST /brands/{id}/generate-queries â€” regenerate baseline queries.
		register_rest_route(
			$this->namespace,
			'/brands/' . self::BRAND_ID_PATTERN . '/generate-queries',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'generate_queries' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
				'args'                => $id_arg,
			]
		);
	}

	/**
	 * Dashboard payload (summary + rollup rows) â€” cache-first with SWR.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function get_overview( $request ) {
		$force  = (bool) $request->get_param( 'refresh' );
		$search = (string) $request->get_param( 'search' );
		$cached = Cache::get_dashboard();

		if ( null !== $cached && ! $force ) {
			if ( Cache::is_dashboard_fresh() ) {
				return $this->overview_response( $cached, false, $search );
			}

			// Stale-while-revalidate: serve stale immediately; the client
			// fires a background `refresh=1` request on seeing `is_stale`.
			return $this->overview_response( $cached, true, $search );
		}

		$result = $this->remote_request( 'GET', '/api/v1/overview' );

		if ( is_wp_error( $result ) ) {
			// Serve stale cache on upstream failure rather than erroring out.
			if ( null !== $cached ) {
				return $this->overview_response( $cached, true, $search );
			}

			return $result;
		}

		$summary = isset( $result['summary'] ) ? (array) $result['summary'] : [];
		$brands  = [];

		$raw_brands = isset( $result['brands']['data'] ) ? (array) $result['brands']['data'] : [];
		foreach ( $raw_brands as $brand ) {
			$brands[] = $this->map_overview_brand( $brand );
		}

		Cache::set_dashboard( $summary, $brands );

		return $this->overview_response( Cache::get_dashboard(), false, $search );
	}

	/**
	 * Map an /overview brand item (API shape) to the UI row shape.
	 *
	 * Note: `description` is not returned by /overview â€” it is fetched
	 * lazily and cached per brand via `get_brand()`.
	 *
	 * @param array $brand Raw brand item.
	 *
	 * @return array
	 */
	private function map_overview_brand( $brand ) {
		return [
			'id'              => $brand['uuid'] ?? '',
			'name'            => $brand['name'] ?? '',
			'url'             => $brand['url'] ?? '',
			'locale'          => $brand['country_code'] ?? null,
			'status'          => ! empty( $brand['active'] ) ? 'active' : 'inactive',
			'score'           => $brand['ai_visibility_score'] ?? null,
			'rank'            => $brand['rank'] ?? null,
			'avg_sentiment'   => $brand['avg_sentiment'] ?? null,
			'mentions'        => $brand['mentions'] ?? null,
			'citations'       => $brand['citations'] ?? null,
			'last_analyzed'   => $brand['last_analyzed_at'] ?? null,
			'created_at'      => $brand['created_at'] ?? null,
			'analysis_status' => $brand['last_analysis_status'] ?? null,
			'next_scheduled'  => $brand['next_scheduled_at'] ?? null,
		];
	}

	/**
	 * Build the dashboard response envelope, applying the optional search
	 * filter (name/URL) against the stored rows. The filter never affects
	 * what is cached â€” only what is returned.
	 *
	 * @param array  $data     Cached dashboard payload.
	 * @param bool   $is_stale Whether the payload is past its TTL.
	 * @param string $search   Optional name/URL filter.
	 *
	 * @return \WP_REST_Response
	 */
	private function overview_response( $data, $is_stale, $search = '' ) {
		$brands = isset( $data['brands'] ) ? $data['brands'] : [];

		if ( '' !== $search ) {
			$brands = array_values(
				array_filter(
					$brands,
					function ( $row ) use ( $search ) {
						return false !== stripos( $row['name'] ?? '', $search )
							|| false !== stripos( $row['url'] ?? '', $search );
					}
				)
			);
		}

		return $this->success(
			[
				'summary'  => isset( $data['summary'] ) ? $data['summary'] : [],
				'brands'   => $brands,
				'is_stale' => (bool) $is_stale,
			]
		);
	}

	/**
	 * Get single brand identity (incl. description) â€” cache-first.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function get_brand( $request ) {
		$uuid   = sanitize_text_field( $request->get_param( 'id' ) );
		$cached = Cache::get_brand( $uuid );

		if ( false !== $cached ) {
			return $this->success( [ 'brand' => $cached ] );
		}

		// /overview omits `description`, so the single-brand endpoint is the
		// canonical source for full identity. Fetched once, then cached.
		$result = $this->remote_request( 'GET', '/api/v1/brands/' . $uuid );

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		$brand = $this->map_brand( isset( $result['data'] ) ? $result['data'] : $result );
		Cache::set_brand( $uuid, $brand );

		return $this->success( [ 'brand' => $brand ] );
	}

	/**
	 * Create a brand â€” the 201 response primes the dashboard row, identity
	 * transient, and queries cache (no follow-up reads).
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function create_brand( $request ) {
		$locale = $request->get_param( 'locale' );
		$result = $this->remote_request(
			'POST',
			'/api/v1/brands',
			[
				'name'         => sanitize_text_field( (string) $request->get_param( 'name' ) ),
				'url'          => esc_url_raw( (string) $request->get_param( 'url' ) ),
				'description'  => sanitize_textarea_field( (string) $request->get_param( 'description' ) ),
				'country_code' => $locale ? strtoupper( (string) $locale ) : '',
			]
		);

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		$brand = $this->map_brand( $result );
		$uuid  = $brand['id'];

		// Prime caches from the create response. Creation atomically seeds a
		// pending analysis, so the row starts as `pending` (no last_analyzed) â€”
		// this is what makes it eligible for the first-analysis poller.
		Cache::append_brand_row(
			array_merge(
				$brand,
				[
					'score'           => null,
					'rank'            => null,
					'avg_sentiment'   => null,
					'mentions'        => null,
					'citations'       => null,
					'analysis_status' => 'pending',
					'next_scheduled'  => null,
				]
			)
		);
		Cache::set_brand( $uuid, $brand );

		if ( ! empty( $result['queries'] ) ) {
			Cache::set_queries( $uuid, $this->map_queries( $result['queries'] ) );
		}

		rank_math()->tracking->track_ability_executed(
			'AI Visibility Brand Created',
			[
				'locale'    => $brand['locale'] ?? null,
				'interval'  => 'weekly',
				'platforms' => [ 'chatgpt' ],
			]
		);

		return $this->success( [ 'brand' => $brand ] );
	}

	/**
	 * Update brand fields/status â€” patches the cached row in place
	 * (analysis and queries caches are intentionally kept).
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function update_brand( $request ) {
		$uuid = sanitize_text_field( $request->get_param( 'id' ) );

		$body   = [];
		$fields = [
			'name'        => 'sanitize_text_field',
			'url'         => 'esc_url_raw',
			'description' => 'sanitize_textarea_field',
			'status'      => 'sanitize_text_field',
		];

		foreach ( $fields as $field => $sanitizer ) {
			$value = $request->get_param( $field );
			if ( null !== $value ) {
				$body[ $field ] = call_user_func( $sanitizer, $value );
			}
		}

		$locale = $request->get_param( 'locale' );
		if ( null !== $locale ) {
			$body['country_code'] = strtoupper( sanitize_text_field( $locale ) );
		}

		if ( empty( $body ) ) {
			return $this->error( 'aiv_bad_request', __( 'No fields to update.', 'seo-by-rank-math' ), 400 );
		}

		$result = $this->remote_request( 'PATCH', '/api/v1/brands/' . $uuid, $body );

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		$brand = $this->map_brand( isset( $result['data'] ) ? $result['data'] : $result );

		// Write-through: patch the dashboard row, replace the identity transient.
		Cache::patch_brand_row(
			$uuid,
			[
				'name'        => $brand['name'],
				'url'         => $brand['url'],
				'description' => $brand['description'],
				'locale'      => $brand['locale'],
				'status'      => $brand['status'],
			]
		);
		Cache::set_brand( $uuid, $brand );

		$status_changed = isset( $body['status'] );
		rank_math()->tracking->track_event(
			'AI Visibility Brand Updated',
			[
				'fields_changed' => array_keys( $body ),
				'status_changed' => $status_changed,
				'new_status'     => $status_changed ? $brand['status'] : null,
			]
		);

		return $this->success( [ 'brand' => $brand ] );
	}

	/**
	 * Map an upstream brand object to the UI shape.
	 *
	 * @param array $brand Raw brand object.
	 *
	 * @return array
	 */
	private function map_brand( $brand ) {
		return [
			'id'            => $brand['uuid'] ?? '',
			'name'          => $brand['name'] ?? '',
			'url'           => $brand['url'] ?? '',
			'description'   => $brand['description'] ?? '',
			'locale'        => $brand['country_code'] ?? null,
			'status'        => $brand['status'] ?? 'active',
			'last_analyzed' => $brand['last_analyzed_at'] ?? null,
			'created_at'    => $brand['created_at'] ?? null,
		];
	}

	/**
	 * Full latest-analysis payload â€” cache-first; upstream only on miss or
	 * stale flag. Upstream 404 (no completed analysis) â†’ `{ pending: true }`.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function get_insights( $request ) {
		$uuid   = sanitize_text_field( $request->get_param( 'id' ) );
		$cached = Cache::get_analysis( $uuid );

		if ( false !== $cached && ! Cache::is_brand_stale( $uuid ) ) {
			return $this->success( [ 'insights' => $cached ] );
		}

		$result = $this->remote_request( 'GET', '/api/v1/brands/' . $uuid . '/analyses/results' );

		if ( is_wp_error( $result ) ) {
			// No completed analysis yet â€” pending state, never cached.
			if ( 'aiv_not_found' === $result->get_error_code() ) {
				return $this->success( [ 'pending' => true ] );
			}

			// Serve the superseded payload on upstream failure.
			if ( false !== $cached ) {
				return $this->success( [ 'insights' => $cached ] );
			}

			return $result;
		}

		$insights = $this->map_insights( $result );

		Cache::set_analysis( $uuid, $insights );

		rank_math()->tracking->track_event(
			'AI Visibility Insights Fetched',
			[
				'score'              => $insights['score'],
				'rank'               => $insights['rank'],
				'avg_sentiment'      => $insights['avg_sentiment'],
				'mentions'           => $insights['mentions'],
				'citations'          => $insights['citations'],
				'has_competitors'    => ! empty( $insights['competitors'] ),
				'query_result_count' => count( $insights['query_results'] ),
			]
		);

		// Keep the dashboard row's summary in sync (poller success path).
		Cache::patch_brand_row(
			$uuid,
			[
				'score'         => $insights['score'],
				'rank'          => $insights['rank'],
				'avg_sentiment' => $insights['avg_sentiment'],
				'mentions'      => $insights['mentions'],
				'citations'     => $insights['citations'],
				'last_analyzed' => $insights['analysis']['finished_at'],
			]
		);

		return $this->success( [ 'insights' => $insights ] );
	}

	/**
	 * Map the upstream analyses/results payload to the UI shape.
	 *
	 * @param array $result Raw payload.
	 *
	 * @return array
	 */
	private function map_insights( $result ) {
		$analysis = isset( $result['analysis'] ) ? (array) $result['analysis'] : [];

		return [
			'score'         => $result['ai_visibility_score'] ?? null,
			'rank'          => $result['rank'] ?? null,
			'avg_sentiment' => $result['avg_sentiment'] ?? null,
			'mentions'      => $result['mentions'] ?? null,
			'citations'     => $result['citations'] ?? null,
			'analysis'      => [
				'id'               => $analysis['uuid'] ?? null,
				// Map the API status vocabulary to the UI one (`success` â†’ `done`).
				'status'           => isset( $analysis['status'] ) && 'success' === $analysis['status'] ? 'done' : ( $analysis['status'] ?? null ),
				'started_at'       => $analysis['started_at'] ?? null,
				'finished_at'      => $analysis['finished_at'] ?? null,
				'duration_seconds' => $analysis['duration_seconds'] ?? null,
			],
			'competitors'   => array_map(
				function ( $competitor ) {
					return [
						'name'          => $competitor['name'] ?? '',
						'url'           => $competitor['url'] ?? null,
						'mentions'      => $competitor['mentions'] ?? null,
						'avg_sentiment' => $competitor['avg_sentiment'] ?? null,
					];
				},
				isset( $result['competitors'] ) ? (array) $result['competitors'] : []
			),
			'query_results' => array_map(
				function ( $query_result ) {
					return [
						'query_id'        => $query_result['query_uuid'] ?? null,
						'query_text'      => $query_result['query_text'] ?? '',
						'found'           => ! empty( $query_result['found'] ),
						'rank'            => $query_result['rank_among_competitors'] ?? null,
						'sentiment'       => $query_result['sentiment_score'] ?? null,
						'citations'       => $query_result['citations_count'] ?? null,
						'response'        => $query_result['model_response'] ?? '',
						'extraction_data' => $query_result['extraction_data_raw'] ?? '',
					];
				},
				isset( $result['query_results'] ) ? (array) $result['query_results'] : []
			),
		];
	}

	/**
	 * List queries for a brand â€” cache-first (24h TTL).
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function get_queries( $request ) {
		$uuid   = sanitize_text_field( $request->get_param( 'id' ) );
		$cached = Cache::get_queries( $uuid );

		if ( null !== $cached ) {
			return $this->success( [ 'queries' => $cached['queries'] ] );
		}

		$result = $this->remote_request( 'GET', '/api/v1/brands/' . $uuid . '/queries?enabled=true' );

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		$queries = $this->map_queries( isset( $result['queries'] ) ? $result['queries'] : [] );
		Cache::set_queries( $uuid, $queries );

		return $this->success( [ 'queries' => $queries ] );
	}

	/**
	 * Enable or disable a query.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function update_query( $request ) {
		$uuid    = sanitize_text_field( $request->get_param( 'id' ) );
		$qid     = sanitize_text_field( $request->get_param( 'qid' ) );
		$enabled = (bool) $request->get_param( 'enabled' );

		$result = $this->remote_request( 'PATCH', '/api/v1/queries/' . $qid, [ 'enabled' => $enabled ] );

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		Cache::patch_query( $uuid, $qid, [ 'enabled' => $enabled ] );

		rank_math()->tracking->track_event(
			'AI Visibility Query Toggled',
			[ 'enabled' => $enabled ]
		);

		return $this->success( [ 'updated' => true ] );
	}

	/**
	 * Regenerate baseline queries â€” response replaces the cached list.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function generate_queries( $request ) {
		$uuid = sanitize_text_field( $request->get_param( 'id' ) );

		$result = $this->remote_request( 'POST', '/api/v1/brands/' . $uuid . '/generate-queries' );
		if ( is_wp_error( $result ) ) {
			return $result;
		}

		$queries = $this->map_queries( isset( $result['queries'] ) ? $result['queries'] : [] );
		Cache::set_queries( $uuid, $queries );

		rank_math()->tracking->track_event(
			'AI Visibility Queries Regenerated',
			[ 'query_count' => count( $queries ) ]
		);

		return $this->success( [ 'queries' => $queries ] );
	}

	/**
	 * Map upstream query objects to the UI shape.
	 *
	 * @param array $queries Raw query objects.
	 *
	 * @return array
	 */
	private function map_queries( $queries ) {
		return array_map(
			function ( $query ) {
				return [
					'id'          => $query['uuid'] ?? '',
					'text'        => $query['text'] ?? '',
					'enabled'     => $query['enabled'] ?? true,
					'is_baseline' => ! empty( $query['is_baseline'] ),
					'created_at'  => $query['created_at'] ?? null,
					'updated_at'  => $query['updated_at'] ?? null,
				];
			},
			(array) $queries
		);
	}
}
PK     ¤ŠU]ºn"  "  =  includes/modules/ai-visibility/Api/class-trial-controller.phpnu „[µü¤        <?php
/**
 * Trial activation REST API controller.
 *
 * @since      1.0.281
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility\Api
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility\Api;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Trial_Controller class.
 */
class Trial_Controller extends Base_Controller {

	use Hooker;

	/**
	 * Plan slug requested when activating the AI Visibility free trial.
	 */
	const TRIAL_PLAN = 'content-ai-creator-trial';

	/**
	 * Register routes.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/trial/activate',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'activate_trial' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
			]
		);
	}

	/**
	 * Activate 15-day AI Visibility free trial.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|\WP_Error
	 */
	public function activate_trial( $request ) {
		unset( $request );

		$result = $this->request_trial_activation();

		if ( is_wp_error( $result ) ) {
			return $result;
		}

		// Refresh the cached Content AI plan & credits so the UI unlocks on reload.
		Helper::get_content_ai_credits( true );

		rank_math()->tracking->track_event(
			'AI Visibility Trial Activated',
			[ 'plan' => Helper::get_content_ai_plan() ]
		);

		return $this->success(
			$result,
			__( 'Your AI Visibility trial has been activated.', 'seo-by-rank-math' )
		);
	}

	/**
	 * Request trial activation from the Rank Math account API.
	 *
	 * Hits the `planUpgrade` endpoint with the connected account's
	 * credentials. The base URL defaults to the test host and can be pointed
	 * at production via the `rank_math/ai_visibility/plan_upgrade_url` filter.
	 *
	 * @return array|WP_Error Decoded response array, or WP_Error on failure.
	 */
	private function request_trial_activation() {
		$registered = Admin_Helper::get_registration_data();

		if ( empty( $registered['api_key'] ) || empty( $registered['username'] ) ) {
			return new WP_Error(
				'aiv_unauthorized',
				__( 'Rank Math account not connected. Please connect your account and try again.', 'seo-by-rank-math' ),
				[ 'status' => 401 ]
			);
		}

		$response = wp_remote_post(
			RANK_MATH_SITE_URL . '/wp-json/rankmath/v1/planUpgrade',
			[
				'timeout' => 60,
				'body'    => [
					'api_key'  => $registered['api_key'],
					'username' => $registered['username'],
					'plan'     => self::TRIAL_PLAN,
				],
			]
		);

		if ( is_wp_error( $response ) ) {
			return new WP_Error(
				'aiv_request_failed',
				$response->get_error_message(),
				[ 'status' => 502 ]
			);
		}

		$http_code = (int) wp_remote_retrieve_response_code( $response );
		$decoded   = json_decode( wp_remote_retrieve_body( $response ), true );

		if ( $http_code < 200 || $http_code >= 300 ) {
			$message = ! empty( $decoded['message'] )
				? $decoded['message']
				: __( 'We could not activate your trial. Please try again.', 'seo-by-rank-math' );

			return new WP_Error( 'aiv_trial_activation_failed', $message, [ 'status' => $http_code ] );
		}

		return is_array( $decoded ) ? $decoded : [ 'activated' => true ];
	}
}
PK     ¤ŠU]'	À    @  includes/modules/ai-visibility/Api/class-checkout-controller.phpnu „[µü¤        <?php
/**
 * Content AI checkout REST API controller.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility\Api
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility\Api;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Checkout_Controller class.
 */
class Checkout_Controller extends Base_Controller {

	use Hooker;

	/**
	 * Register routes.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/checkout-url',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'get_checkout_url' ],
				'permission_callback' => [ $this, 'check_admin_permission' ],
			]
		);
	}

	/**
	 * POST /checkout-url â€” build an authenticated Content AI checkout iframe URL.
	 *
	 * Fetches a fresh single-use token (15-min, consumed on first iframe load)
	 * and returns the full iframe `src`. A new URL must be requested per
	 * iframe session â€” never reload the iframe with the same URL.
	 *
	 * @param WP_REST_Request $request Request.
	 *
	 * @return \WP_REST_Response|WP_Error
	 */
	public function get_checkout_url( $request ) {
		$token = $this->get_checkout_token();

		if ( is_wp_error( $token ) ) {
			return $token;
		}

		$url = add_query_arg(
			[
				'site_checkout' => 1,
				'rm_token'      => $token,
			],
			RANK_MATH_SITE_URL . '/site-checkout-cai',
		);

		return $this->success( [ 'url' => $url ] );
	}

	/**
	 * Fetch a single-use checkout token from the Rank Math account API.
	 *
	 * @return string|WP_Error Token string, or WP_Error on failure.
	 */
	private function get_checkout_token() {
		$registered = Admin_Helper::get_registration_data();

		if ( empty( $registered['api_key'] ) || empty( $registered['username'] ) ) {
			return new WP_Error(
				'aiv_unauthorized',
				__( 'Rank Math account not connected. Please connect your account and try again.', 'seo-by-rank-math' ),
				[ 'status' => 401 ]
			);
		}

		$response = wp_remote_post(
			RANK_MATH_SITE_URL . '/wp-json/rankmath/v1/checkoutToken',
			[
				'timeout' => 60,
				'headers' => [ 'Content-Type' => 'application/json' ],
				'body'    => wp_json_encode(
					[
						'username' => $registered['username'],
						'api_key'  => $registered['api_key'],
					]
				),
			]
		);

		if ( is_wp_error( $response ) ) {
			return new WP_Error( 'aiv_request_failed', $response->get_error_message(), [ 'status' => 502 ] );
		}

		$http_code = (int) wp_remote_retrieve_response_code( $response );
		$decoded   = json_decode( wp_remote_retrieve_body( $response ), true );

		if ( $http_code < 200 || $http_code >= 300 || empty( $decoded['token'] ) ) {
			$message = ! empty( $decoded['message'] )
				? $decoded['message']
				: __( 'Could not start the checkout session. Please try again.', 'seo-by-rank-math' );

			return new WP_Error( 'aiv_checkout_token_failed', $message, [ 'status' => $http_code ? $http_code : 502 ] );
		}

		return $decoded['token'];
	}
}
PK     ¤ŠU]=ÖËk    6  includes/modules/ai-visibility/class-ai-visibility.phpnu „[µü¤        <?php
/**
 * The AI Visibility module.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility;

use RankMath\Traits\Hooker;
use RankMath\AI_Visibility\Admin;

defined( 'ABSPATH' ) || exit;

/**
 * AI_Visibility class.
 */
class AI_Visibility {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->action( 'rest_api_init', 'init_rest_api' );

		if ( is_admin() ) {
			new Admin();
		}
	}

	/**
	 * Register REST routes for this module.
	 */
	public function init_rest_api() {
		( new Api\Brands_Controller() )->register_routes();
		( new Api\Trial_Controller() )->register_routes();
		( new Api\Checkout_Controller() )->register_routes();
	}
}
PK     ¤ŠU]X5'�»#  »#  .  includes/modules/ai-visibility/class-cache.phpnu „[µü¤        <?php
/**
 * AI Visibility cache service.
 *
 * All locally stored AI Visibility data is temporary cache (non-autoloading
 * options + transients, no custom tables): the dashboard option (summary +
 * rollup rows + stale flags), per-brand queries options, and per-brand
 * identity/analysis transients. A changed `last_analyzed_at` marks a brand
 * stale; its analysis payload is refetched lazily on the next detail visit.
 *
 * @since      1.0.273
 * @package    RankMath
 * @subpackage RankMath\AI_Visibility
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\AI_Visibility;

defined( 'ABSPATH' ) || exit;

/**
 * Cache class.
 */
class Cache {

	/**
	 * Option key holding the dashboard (/overview) payload.
	 *
	 * @var string
	 */
	const DASHBOARD_KEY = 'rank_math_aiv_dashboard';

	/**
	 * Option key prefix for per-brand query lists.
	 *
	 * @var string
	 */
	const QUERIES_PREFIX = 'rank_math_aiv_queries_';

	/**
	 * Transient prefix for per-brand identity (incl. description).
	 *
	 * @var string
	 */
	const BRAND_PREFIX = 'rank_math_aiv_brand_';

	/**
	 * Transient prefix for per-brand full analysis payloads.
	 *
	 * @var string
	 */
	const ANALYSIS_PREFIX = 'rank_math_aiv_analysis_';

	/**
	 * Dashboard freshness window in seconds (filterable).
	 *
	 * @return int
	 */
	public static function dashboard_ttl() {
		return apply_filters( 'rank_math/ai_visibility/dashboard_ttl', 12 * HOUR_IN_SECONDS );
	}

	/**
	 * Queries list freshness window in seconds.
	 *
	 * @return int
	 */
	public static function queries_ttl() {
		return DAY_IN_SECONDS;
	}

	/**
	 * Transient expiry â€” garbage collection only, not a freshness rule.
	 *
	 * @return int
	 */
	public static function gc_expiry() {
		return 30 * DAY_IN_SECONDS;
	}

	// -------------------------------------------------------------------------
	// Dashboard (/overview) cache.
	// -------------------------------------------------------------------------

	/**
	 * Get the cached dashboard payload.
	 *
	 * @return array|null `[ 'summary' => [], 'brands' => [], 'fetched_at' => int ]` or null.
	 */
	public static function get_dashboard() {
		$data = get_option( self::DASHBOARD_KEY, null );
		return is_array( $data ) ? $data : null;
	}

	/**
	 * Whether the cached dashboard payload is still fresh.
	 *
	 * @return bool
	 */
	public static function is_dashboard_fresh() {
		$data = self::get_dashboard();
		if ( null === $data || empty( $data['fetched_at'] ) ) {
			return false;
		}

		return ( time() - (int) $data['fetched_at'] ) < self::dashboard_ttl();
	}

	/**
	 * Replace the dashboard cache; brands with a changed `last_analyzed`
	 * are flagged `stale` (existing flags carry over until cleared).
	 *
	 * @param array $summary Site-level summary metrics.
	 * @param array $brands  Per-brand rollup rows (UI shape).
	 *
	 * @return void
	 */
	public static function set_dashboard( $summary, $brands ) {
		$previous = self::get_dashboard();
		$old_rows = [];

		if ( null !== $previous && ! empty( $previous['brands'] ) ) {
			foreach ( $previous['brands'] as $row ) {
				if ( isset( $row['id'] ) ) {
					$old_rows[ $row['id'] ] = $row;
				}
			}
		}

		foreach ( $brands as &$row ) {
			$uuid = isset( $row['id'] ) ? $row['id'] : '';
			if ( '' === $uuid ) {
				continue;
			}

			$row['stale'] = false;

			if ( isset( $old_rows[ $uuid ] ) ) {
				$old = $old_rows[ $uuid ];

				// Carry over an uncleared stale flag.
				if ( ! empty( $old['stale'] ) ) {
					$row['stale'] = true;
				}

				// New analysis detected â€” flag the heavy payload for refetch.
				if ( ( $old['last_analyzed'] ?? null ) !== ( $row['last_analyzed'] ?? null ) ) {
					$row['stale'] = true;
				}
			}
		}
		unset( $row );

		update_option(
			self::DASHBOARD_KEY,
			[
				'summary'    => $summary,
				'brands'     => array_values( $brands ),
				'fetched_at' => time(),
			],
			false
		);
	}

	/**
	 * Append a brand row to the cached dashboard (after create).
	 *
	 * @param array $row Brand row in UI shape.
	 *
	 * @return void
	 */
	public static function append_brand_row( $row ) {
		$data = self::get_dashboard();
		if ( null === $data ) {
			return;
		}

		$row['stale']     = false;
		$data['brands'][] = $row;

		update_option( self::DASHBOARD_KEY, $data, false );
	}

	/**
	 * Patch fields of a single cached brand row in place.
	 *
	 * @param string $uuid   Brand UUID.
	 * @param array  $fields Fields to merge into the row.
	 *
	 * @return void
	 */
	public static function patch_brand_row( $uuid, $fields ) {
		$data = self::get_dashboard();
		if ( null === $data || empty( $data['brands'] ) ) {
			return;
		}

		foreach ( $data['brands'] as &$row ) {
			if ( isset( $row['id'] ) && $row['id'] === $uuid ) {
				$row = array_merge( $row, $fields );
				break;
			}
		}
		unset( $row );

		update_option( self::DASHBOARD_KEY, $data, false );
	}

	/**
	 * Get a single cached brand row.
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return array|null
	 */
	public static function get_brand_row( $uuid ) {
		$data = self::get_dashboard();
		if ( null === $data || empty( $data['brands'] ) ) {
			return null;
		}

		foreach ( $data['brands'] as $row ) {
			if ( isset( $row['id'] ) && $row['id'] === $uuid ) {
				return $row;
			}
		}

		return null;
	}

	/**
	 * Whether a brand's full-analysis payload is flagged stale.
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return bool
	 */
	public static function is_brand_stale( $uuid ) {
		$row = self::get_brand_row( $uuid );
		return null !== $row && ! empty( $row['stale'] );
	}

	/**
	 * Clear a brand's stale flag (after its analysis payload was refetched).
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return void
	 */
	public static function clear_brand_stale( $uuid ) {
		self::patch_brand_row( $uuid, [ 'stale' => false ] );
	}

	// -------------------------------------------------------------------------
	// Per-brand identity (incl. description).
	// -------------------------------------------------------------------------

	/**
	 * Get the cached single-brand identity.
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return array|false
	 */
	public static function get_brand( $uuid ) {
		return get_transient( self::BRAND_PREFIX . $uuid );
	}

	/**
	 * Cache the single-brand identity (write-through on GET and PATCH).
	 *
	 * @param string $uuid  Brand UUID.
	 * @param array  $brand Brand identity in UI shape.
	 *
	 * @return void
	 */
	public static function set_brand( $uuid, $brand ) {
		set_transient( self::BRAND_PREFIX . $uuid, $brand, self::gc_expiry() );
	}

	// -------------------------------------------------------------------------
	// Per-brand full analysis payload (competitors + transcripts).
	// -------------------------------------------------------------------------

	/**
	 * Get the cached full analysis payload for a brand.
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return array|false
	 */
	public static function get_analysis( $uuid ) {
		return get_transient( self::ANALYSIS_PREFIX . $uuid );
	}

	/**
	 * Cache the full analysis payload for a brand and clear its stale flag.
	 *
	 * @param string $uuid     Brand UUID.
	 * @param array  $insights Insights payload in UI shape.
	 *
	 * @return void
	 */
	public static function set_analysis( $uuid, $insights ) {
		set_transient( self::ANALYSIS_PREFIX . $uuid, $insights, self::gc_expiry() );
		self::clear_brand_stale( $uuid );
	}

	// -------------------------------------------------------------------------
	// Per-brand query lists.
	// -------------------------------------------------------------------------

	/**
	 * Get the cached query list for a brand.
	 *
	 * @param string $uuid Brand UUID.
	 *
	 * @return array|null `[ 'queries' => [], 'fetched_at' => int ]` or null.
	 */
	public static function get_queries( $uuid ) {
		$data = get_option( self::QUERIES_PREFIX . $uuid, null );

		if ( ! is_array( $data ) || empty( $data['fetched_at'] ) ) {
			return null;
		}

		if ( ( time() - (int) $data['fetched_at'] ) >= self::queries_ttl() ) {
			return null;
		}

		return $data;
	}

	/**
	 * Cache the query list for a brand (full replace).
	 *
	 * @param string $uuid    Brand UUID.
	 * @param array  $queries Query items in UI shape.
	 *
	 * @return void
	 */
	public static function set_queries( $uuid, $queries ) {
		update_option(
			self::QUERIES_PREFIX . $uuid,
			[
				'queries'    => array_values( $queries ),
				'fetched_at' => time(),
			],
			false
		);
	}

	/**
	 * Patch a single query inside a brand's cached list.
	 *
	 * @param string $uuid     Brand UUID.
	 * @param string $query_id Query UUID.
	 * @param array  $fields   Fields to merge into the query.
	 *
	 * @return void
	 */
	public static function patch_query( $uuid, $query_id, $fields ) {
		$data = get_option( self::QUERIES_PREFIX . $uuid, null );
		if ( ! is_array( $data ) || empty( $data['queries'] ) ) {
			return;
		}

		foreach ( $data['queries'] as &$query ) {
			if ( isset( $query['id'] ) && $query['id'] === $query_id ) {
				$query = array_merge( $query, $fields );
				break;
			}
		}
		unset( $query );

		update_option( self::QUERIES_PREFIX . $uuid, $data, false );
	}
}
PK     ¤ŠU]ÊÁäE.  E.  -  includes/modules/redirections/class-table.phpnu „[µü¤        <?php
/**
 * The WP List Table class for the Redirections module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Admin\List_Table;
use RankMath\Redirections\Admin;

defined( 'ABSPATH' ) || exit;

/**
 * Table class.
 */
class Table extends List_Table {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		parent::__construct(
			[
				'screen'   => Admin::get_screen(),
				'singular' => 'redirection',
				'plural'   => 'redirections',
				'no_items' => $this->is_trashed_page() ? esc_html__( 'No redirections found in Trash.', 'seo-by-rank-math' ) : wp_kses_post( __( 'No redirections added yet. <a href="#" class="rank-math-add-new-redirection">Add New Redirection</a>', 'seo-by-rank-math' ) ),
			]
		);
	}

	/**
	 * Prepares the list of items for displaying.
	 */
	public function prepare_items() {
		$per_page = $this->get_items_per_page( 'rank_math_redirections_per_page', 100 );

		$data = DB::get_redirections(
			[
				'limit'   => $per_page,
				'order'   => $this->get_order(),
				'orderby' => $this->get_orderby( 'id' ),
				'paged'   => $this->get_pagenum(),
				'search'  => $this->get_search(),
				'status'  => Param::request( 'status', 'any' ),
			]
		);

		$this->items = $data['redirections'];

		$this->set_pagination_args(
			[
				'total_items' => $data['count'],
				'per_page'    => $per_page,
			]
		);
	}

	/**
	 * Handles the checkbox column output.
	 *
	 * @param object $item The current item.
	 */
	public function column_cb( $item ) {
		return sprintf( '<input type="checkbox" name="redirection[]" value="%s" />', $item['id'] );
	}

	/**
	 * Handle the sources column.
	 *
	 * @param object $item The current item.
	 */
	protected function column_sources( $item ) {
		return $this->get_sources_html( $item ) . $this->column_actions( $item );
	}

	/**
	 * Handle the created column.
	 *
	 * @param object $item The current item.
	 */
	protected function column_created( $item ) {
		$no_created = ( empty( $item['created'] ) || '0000-00-00 00:00:00' === $item['created'] );

		return $no_created ? '' : mysql2date( 'F j, Y, G:i', $item['created'] );
	}

	/**
	 * Handle the last accessed column.
	 *
	 * @param object $item The current item.
	 */
	protected function column_last_accessed( $item ) {
		$no_last_accessed = ( empty( $item['last_accessed'] ) || '0000-00-00 00:00:00' === $item['last_accessed'] );

		return $no_last_accessed ? '' : mysql2date( 'F j, Y, G:i', $item['last_accessed'] );
	}

	/**
	 * Handles the default column output.
	 *
	 * @param object $item        The current item.
	 * @param string $column_name The current column name.
	 */
	public function column_default( $item, $column_name ) {
		/**
		 * Filters the default column output. Pass non-empty value to enable.
		 *
		 * @param bool   $false The column value.
		 * @param object $item  The current item.
		 */
		$default = apply_filters( "rank_math/redirection/admin_column_{$column_name}", false, $item );
		if ( ! empty( $default ) ) {
			return $default;
		}

		if ( in_array( $column_name, [ 'hits', 'header_code', 'url_to' ], true ) ) {
			return esc_html( $item[ $column_name ] );
		}

		return esc_html( wp_json_encode( $item, true ) );
	}

	/**
	 * Get html for sources column
	 *
	 * @param  array $item Array of current redirection..
	 * @return string
	 */
	private function get_sources_html( $item ) {
		$sources = maybe_unserialize( $item['sources'] );

		if ( empty( $sources ) ) {
			return '';
		}

		$comparison_hash = Helper::choices_comparison_types();

		// First one.
		$html = $this->get_source_html( $sources[0], $comparison_hash, $item );
		unset( $sources[0] );

		if ( empty( $sources ) ) {
			return $html;
		}

		// Show more button.
		$html .= ' <a href="#" class="rank-math-showmore" title="' . esc_html__( 'Show more', 'seo-by-rank-math' ) . '">[&hellip;]</a>';
		$html .= '<div class="rank-math-more">';

		// Loop remaining.
		$parts = [];
		foreach ( $sources as $source ) {
			$parts[] = $this->get_source_html( $source, $comparison_hash, $item );
		}

		$html .= join( '<br>', $parts );
		$html .= '<br><a href="#" class="rank-math-hidemore" title="' . esc_html__( 'Hide details', 'seo-by-rank-math' ) . '">[' . esc_html__( 'Hide', 'seo-by-rank-math' ) . ']</a>';
		$html .= '</div>';

		return $html;
	}

	/**
	 * Get html of a source.
	 *
	 * @param  array $source          Source for which render html.
	 * @param  array $comparison_hash Comparison array hash.
	 * @param  array $item            Array of current redirection.
	 * @return string
	 */
	private function get_source_html( $source, $comparison_hash, $item ) {
		$edit_url = $this->get_url(
			$item,
			[
				'action' => 'edit',
			]
		);
		$html     = '<span class="value-url_from"><strong><a href="' . $edit_url . '">' . esc_html( stripslashes( $source['pattern'] ) ) . '</a></strong></span>';
		if ( 'exact' !== $source['comparison'] ) {
			$html .= ' <span class="value-source-comparison">(' . esc_html( $comparison_hash[ $source['comparison'] ] ) . ')</span>';
		}
		return $html;
	}

	/**
	 * Generate admin action url.
	 *
	 * @param object $item      The current item.
	 * @param array  $params Additional URL params.
	 */
	public function get_url( $item, $params = [] ) {
		$defaults = [
			'redirection' => $item['id'],
			'security'    => wp_create_nonce( 'redirection_list_action' ),
		];
		$params   = wp_parse_args( $params, $defaults );
		return esc_url( Helper::get_admin_url( 'redirections', $params ) );
	}

	/**
	 * Generate row actions div.
	 *
	 * @param object $item The current item.
	 */
	public function column_actions( $item ) {
		$url      = $this->get_url( $item );
		$sources  = maybe_unserialize( $item['sources'] );
		$view_url = Helper::get_home_url( $sources[0]['pattern'] );
		$edit_url = $this->get_url(
			$item,
			[
				'action' => 'edit',
			]
		);

		if ( $this->is_trashed_page() ) {
			return $this->row_actions(
				[
					'restore' => '<a href="' . $url . '" data-action="restore" class="rank-math-redirection-action">' . esc_html__( 'Restore', 'seo-by-rank-math' ) . '</a>',
					'delete'  => '<a href="' . $url . '" data-action="delete" class="rank-math-redirection-action">' . esc_html__( 'Delete Permanently', 'seo-by-rank-math' ) . '</a>',
				]
			);
		}

		$redirection = $this->do_filter(
			'redirections/table_item',
			[
				'id'          => $item['id'],
				'sources'     => unserialize( $item['sources'] ), //phpcs:ignore -- This will be fixed after moving the sources to JSON.
				'url_to'      => $item['url_to'],
				'header_code' => $item['header_code'],
				'status'      => $item['status'],
			]
		);

		return $this->row_actions(
			[
				'edit'       => '<a data-redirection="' . esc_attr( wp_json_encode( $redirection ) ) . '" href="' . $edit_url . '" class="rank-math-redirection-edit">' . esc_html__( 'Edit', 'seo-by-rank-math' ) . '</a>',
				'deactivate' => '<a href="' . $url . '" data-action="deactivate" class="rank-math-redirection-action">' . esc_html__( 'Deactivate', 'seo-by-rank-math' ) . '</a>',
				'activate'   => '<a href="' . $url . '" data-action="activate" class="rank-math-redirection-action">' . esc_html__( 'Activate', 'seo-by-rank-math' ) . '</a>',
				'trash'      => '<a href="' . $url . '" data-action="trash" class="rank-math-redirection-action">' . esc_html__( 'Trash', 'seo-by-rank-math' ) . '</a>',
				'view'       => '<a href="' . $view_url . '" rel="bookmark">' . esc_html__( 'View', 'seo-by-rank-math' ) . '</a>',
			]
		);
	}

	/**
	 * Get a list of columns.
	 *
	 * @return array
	 */
	public function get_columns() {
		/**
		 * Filters the columns displayed in the Redirections table.
		 *
		 * @param array $columns Array of columns.
		 */
		return apply_filters(
			'rank_math/redirection/admin_columns',
			[
				'cb'            => '<input type="checkbox" />',
				'sources'       => esc_html__( 'From', 'seo-by-rank-math' ),
				'url_to'        => esc_html__( 'To', 'seo-by-rank-math' ),
				'header_code'   => esc_html__( 'Type', 'seo-by-rank-math' ),
				'hits'          => esc_html__( 'Hits', 'seo-by-rank-math' ),
				'created'       => esc_html__( 'Created', 'seo-by-rank-math' ),
				'last_accessed' => esc_html__( 'Last Accessed', 'seo-by-rank-math' ),
			]
		);
	}

	/**
	 * Get a list of sortable columns.
	 *
	 * @return array
	 */
	public function get_sortable_columns() {
		return [
			'url_to'        => [ 'url_to', false ],
			'header_code'   => [ 'header_code', false ],
			'hits'          => [ 'hits', false ],
			'created'       => [ 'created', false ],
			'last_accessed' => [ 'last_accessed', false ],
		];
	}

	/**
	 * Get an associative array ( option_name => option_title ) with the list
	 * of bulk actions available on this table.
	 *
	 * @return array
	 */
	public function get_bulk_actions() {
		if ( $this->is_trashed_page() ) {
			$actions = [
				'restore' => esc_html__( 'Restore', 'seo-by-rank-math' ),
				'delete'  => esc_html__( 'Delete Permanently', 'seo-by-rank-math' ),
			];
		} else {
			$actions = [
				'activate'   => esc_html__( 'Activate', 'seo-by-rank-math' ),
				'deactivate' => esc_html__( 'Deactivate', 'seo-by-rank-math' ),
				'trash'      => esc_html__( 'Move to Trash', 'seo-by-rank-math' ),
			];
		}

		/**
		 * Filters the list of bulk actions available on the Redirections table.
		 *
		 * @param array $actions Array of bulk actions.
		 */
		return apply_filters( 'rank_math/redirection/bulk_actions', $actions );
	}

	/**
	 * Get an associative array ( id => link ) with the list of views available on this table.
	 *
	 * @return array
	 */
	public function get_views() {

		$url     = Helper::get_admin_url( 'redirections' );
		$current = Param::get( 'status', 'all' );
		$counts  = DB::get_counts();
		$labels  = [
			'all'      => esc_html__( 'All', 'seo-by-rank-math' ),
			'active'   => esc_html__( 'Active', 'seo-by-rank-math' ),
			'inactive' => esc_html__( 'Inactive', 'seo-by-rank-math' ),
			'trashed'  => esc_html__( 'Trash', 'seo-by-rank-math' ),
		];

		$links = [];
		foreach ( $labels as $key => $label ) {
			$links[ $key ] = sprintf(
				'<a href="%1$s"%2$s>%3$s <span class="count">(%4$s)</span></a>',
				$url . '&status=' . $key,
				$key === $current ? ' class="current"' : '',
				$label,
				number_format_i18n( $counts[ $key ] )
			);
		}

		return $links;
	}

	/**
	 * Generates content for a single row of the table.
	 *
	 * @param object $item The current item.
	 */
	public function single_row( $item ) {
		$classes = 'rank-math-redirection-' . ( 'inactive' === $item['status'] ? 'deactivated' : 'activated' );

		/**
		 * Filters the row class.
		 *
		 * @param string $classes The row class.
		 * @param object $item    The current item.
		 */
		$classes = apply_filters( 'rank_math/redirection/row_classes', $classes, $item );

		echo '<tr class="' . esc_attr( $classes ) . '">';
		$this->single_row_columns( $item );
		echo '</tr>';
	}

	/**
	 * Prints extra table nav.
	 *
	 * @param string $which The position. Accepts `top` or `bottom`.
	 */
	public function extra_tablenav( $which ) {
		parent::extra_tablenav( $which );

		do_action( 'rank_math/redirection/extra_tablenav', $which );

		if ( ! $this->is_trashed_page() ) {
			return;
		}

		$counts = DB::get_counts();
		if ( empty( $counts['trashed'] ) || ! intval( $counts['trashed'] ) ) {
			return;
		}

		echo '<div class="alignleft actions">';
		submit_button( esc_html__( 'Empty Trash', 'seo-by-rank-math' ), '', 'delete_all', false );
		echo '</div>';
	}

	/**
	 * Checks if page status is set to trashed.
	 *
	 * @return bool
	 */
	protected function is_trashed_page() {
		return 'trashed' === Param::get( 'status' );
	}
}
PK     ¤ŠU]�äH™Î2  Î2  *  includes/modules/redirections/class-db.phpnu „[µü¤        <?php
/**
 * The Redirection module database operations.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Helpers\Str;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * DB class.
 */
class DB {

	/**
	 * Get query builder object.
	 *
	 * @return Query_Builder
	 */
	private static function table() {
		return Database::table( 'rank_math_redirections' );
	}

	/**
	 * Get counts of records grouped by active and inactive.
	 *
	 * @return array
	 */
	public static function get_counts() {
		static $redirection_counts;
		if ( ! is_null( $redirection_counts ) ) {
			return $redirection_counts;
		}

		$redirection_counts = self::table()
			->selectSum( "status = 'active'", 'active' )
			->selectSum( "status = 'inactive'", 'inactive' )
			->selectSum( "status = 'trashed'", 'trashed' )
			->one( ARRAY_A );

		$redirection_counts = array_map(
			function ( $value ) {
				return $value ? $value : 0;
			},
			$redirection_counts
		);

		$redirection_counts['all'] = $redirection_counts['active'] + $redirection_counts['inactive'];

		return $redirection_counts;
	}

	/**
	 * Get redirections.
	 *
	 * @param array $args Array of filters apply to query.
	 *
	 * @return array
	 */
	public static function get_redirections( $args = [] ) {
		$args = wp_parse_args(
			$args,
			[
				'orderby' => 'id',
				'order'   => 'DESC',
				'limit'   => 10,
				'paged'   => 1,
				'search'  => '',
				'status'  => 'any',
			]
		);

		$status = self::is_valid_status( $args['status'] ) ? [ $args['status'], null ] : [ '!=', 'trashed' ];

		$table = self::table()
			->found_rows()
			->page( $args['paged'] - 1, $args['limit'] )
			->where( 'status', $status[0], $status[1] );

		if ( ! empty( $args['search'] ) ) {
			$table->whereLike( 'sources', $args['search'] );
			$table->orWhereLike( 'url_to', $args['search'] );
			$table->where( 'status', $status[0], $status[1] );
		}

		if ( ! empty( $args['orderby'] ) && in_array( $args['orderby'], [ 'id', 'url_to', 'header_code', 'hits', 'created', 'last_accessed' ], true ) ) {
			$table->orderBy( $args['orderby'], $args['order'] );
		}

		do_action_ref_array( 'rank_math/redirection/get_redirections_query', [ &$table, $args ] );

		$redirections = $table->get( ARRAY_A );
		$count        = $table->get_found_rows();

		return compact( 'redirections', 'count' );
	}

	/**
	 * Match redirections for URI.
	 *
	 * @param string $uri Current URI to match.
	 * @param bool   $all Get All.
	 *
	 * @return object
	 */
	public static function match_redirections( $uri, $all = false ) {
		if ( empty( $uri ) ) {
			return false;
		}

		// If nothing found than go for all.
		if ( $all ) {
			$redirections = self::table()
				->where( 'status', 'active' )
				->orderby( 'updated', 'desc' )
				->get( ARRAY_A );

			return self::compare_redirections( $redirections, $uri );
		}

		$table = self::table()->where( 'status', 'active' )->orderby( 'updated', 'desc' );

		// Generate words.
		$words = str_replace( '/', '-', $uri );
		$words = str_replace( '.', '-', $words );
		$words = explode( '-', $words );

		// Generate where clause.
		$where  = [];
		$source = maybe_serialize(
			[
				'pattern'    => $uri,
				'comparison' => 'exact',
			]
		);

		$where[] = [ 'sources', 'like', $table->esc_like( $source ) ];
		foreach ( $words as $word ) {
			$where[] = [ 'sources', 'like', $table->esc_like( $word ) ];
		}

		$redirections = $table->where( $where, 'or' )->get( ARRAY_A );
		$redirection  = self::compare_redirections( $redirections, $uri );
		if ( false === $redirection ) {
			return self::match_redirections( $uri, true );
		}

		return $redirection;
	}

	/**
	 * Compare given redirections.
	 *
	 * @param array  $redirections Array of redirection matched.
	 * @param string $uri          URI to compare with.
	 *
	 * @return array|bool
	 */
	private static function compare_redirections( $redirections, $uri ) {
		foreach ( $redirections as $redirection ) {
			$redirection['sources'] = maybe_unserialize( $redirection['sources'] );
			if ( ! empty( $redirection['sources'] ) && self::compare_sources( $redirection['sources'], $uri ) ) {
				return $redirection;
			}
		}

		return false;
	}

	/**
	 * Compare sources.
	 *
	 * @param array  $sources Array of sources.
	 * @param string $uri     URI to compare with.
	 *
	 * @return bool
	 */
	public static function compare_sources( $sources, $uri ) {
		if ( ! is_array( $sources ) || empty( $sources ) ) {
			return false;
		}

		foreach ( $sources as $source ) {
			$compare_uri = $uri;
			$comparison  = $source['comparison'];
			if ( 'exact' === $comparison ) {
				$compare_uri = untrailingslashit( $compare_uri );
			}

			if ( in_array( $comparison, [ 'contains', 'start', 'end' ], true ) ) {
				$source['pattern'] = untrailingslashit( $source['pattern'] );
			}

			if ( 'exact' === $comparison && isset( $source['ignore'] ) && 'case' === $source['ignore'] && strtolower( $source['pattern'] ) === strtolower( $compare_uri ) ) {
				return true;
			}

			if ( Str::comparison( self::get_clean_pattern( $source['pattern'], $comparison ), $compare_uri, $comparison ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Match redirections for a source.
	 *
	 * @param string $source Current source to match.
	 *
	 * @return array
	 */
	public static function match_redirections_source( $source ) {
		if ( empty( $source ) ) {
			return false;
		}

		$table = self::table();

		return $table->found_rows()
			->where( 'status', 'active' )
			->whereLike( 'sources', $source )
			->orderby( 'updated', 'desc' )
			->page( 0, 1 )
			->get( ARRAY_A );
	}

	/**
	 * Get clean pattern for testing.
	 *
	 * @param string $pattern    Pattern to clean.
	 * @param string $comparison Comparison type.
	 *
	 * @return string
	 */
	public static function get_clean_pattern( $pattern, $comparison ) {
		if ( 'exact' === $comparison ) {
			$pattern = trim( $pattern, '/' );
		}

		$cleaned = 'regex' === $comparison ? ( '@' . stripslashes( $pattern ) . '@' ) : $pattern;

		return apply_filters( 'rank_math/redirection/get_clean_pattern', $cleaned, $pattern, $comparison );
	}

	/**
	 *  Get source by ID.
	 *
	 * @param int    $id     ID of the record to search for.
	 * @param string $status Status to filter with.
	 *
	 * @return bool|array
	 */
	public static function get_redirection_by_id( $id, $status = 'all' ) {
		$fields = [
			[ 'id', '=', $id ],
		];

		if ( 'all' !== $status ) {
			$fields[] = [ 'status', '=', $status ];
		}

		return self::get_redirection_by( $fields );
	}

	/**
	 *  Get redirection
	 *
	 * @param array $data Redirection data.
	 *
	 * @return bool|array
	 */
	public static function get_redirection( $data ) {
		$args = [];
		if ( isset( $data['destination'] ) ) {
			$args[] = [ 'url_to', '=', $data['destination'] ];
		}

		if ( isset( $data['type'] ) ) {
			$args[] = [ 'header_code', '=', $data['type'] ];
		}

		if ( isset( $data['status'] ) ) {
			$args[] = [ 'status', '=', $data['status'] ];
		}

		if ( empty( $args ) ) {
			return false;
		}

		// Exist by destination.
		$exist = self::get_redirection_by( $args );

		if ( $exist ) {
			return $exist;
		}

		// Exist by ID.
		if ( ! empty( $data['id'] ) ) {
			return self::get_redirection_by_id( $data['id'] );
		}

		return false;
	}

	/**
	 *  Get source by.
	 *
	 * @param array $data Redirection fields.
	 *
	 * @return bool|array
	 */
	public static function get_redirection_by( $data = [] ) {
		$table = self::table()->where( $data );

		$item = $table->one( ARRAY_A );
		if ( ! isset( $item['sources'] ) ) {
			return false;
		}

		$item['sources'] = self::get_sources( maybe_unserialize( $item['sources'] ) );
		return $item;
	}

	/**
	 * Get stats for dashboard widget.
	 *
	 * @return object
	 */
	public static function get_stats() {
		return self::table()->selectCount( '*', 'total' )->selectSum( 'hits', 'hits' )->one();
	}

	/**
	 * Add a new record.
	 *
	 * @param array $args Values to insert.
	 *
	 * @return bool|int
	 */
	public static function add( $args = [] ) {
		if ( empty( $args ) ) {
			return false;
		}

		if ( array_key_exists( 'id', $args ) ) {
			unset( $args['id'] );
		}

		$args = wp_parse_args(
			$args,
			[
				'sources'     => '',
				'url_to'      => '',
				'header_code' => '301',
				'hits'        => '0',
				'status'      => 'active',
				'created'     => current_time( 'mysql' ),
				'updated'     => current_time( 'mysql' ),
			]
		);

		if ( in_array( $args['header_code'], [ 410, 451 ], true ) ) {
			$args['url_to'] = '';
		}

		$args['sources'] = maybe_serialize( $args['sources'] );

		return self::table()->insert( $args, [ '%s', '%s', '%d', '%d', '%s', '%s', '%s' ] );
	}

	/**
	 * Update a record.
	 *
	 * @param array $args Values to update.
	 *
	 * @return bool|int
	 */
	public static function update( $args = [] ) {
		if ( empty( $args ) ) {
			return false;
		}

		$args = wp_parse_args(
			$args,
			[
				'id'          => '',
				'sources'     => '',
				'url_to'      => '',
				'header_code' => '301',
				'status'      => 'active',
				'updated'     => current_time( 'mysql' ),
			]
		);

		$id = absint( $args['id'] );
		if ( 0 === $id ) {
			return false;
		}

		$args['sources'] = maybe_serialize( $args['sources'] );
		unset( $args['id'] );

		if ( in_array( $args['header_code'], [ 410, 451 ], true ) ) {
			$args['url_to'] = '';
		}

		Cache::purge( $id );
		return self::table()->set( $args )->where( 'id', $id )->update();
	}

	/**
	 * Add or Update record.
	 *
	 * @param array $redirection Single redirection item.
	 *
	 * @return int
	 */
	public static function update_iff( $redirection ) {
		// Update record.
		if ( isset( $redirection['id'] ) && ! empty( $redirection['id'] ) ) {
			self::update( $redirection );
			return $redirection['id'];
		}

		$existing_redirection = self::match_redirections_source( maybe_serialize( $redirection['sources'] ) );
		if ( ! empty( $existing_redirection ) && isset( $existing_redirection[0]['id'] ) ) {
			$redirection['id'] = $existing_redirection[0]['id'];
			self::update( $redirection );
			return $redirection['id'];
		}

		// Add record.
		return self::add( $redirection );
	}

	/**
	 * Update counter for redirection.
	 *
	 * @param object $redirection Record to update.
	 *
	 * @return int|false The number of rows updated, or false on error.
	 */
	public static function update_access( $redirection = false ) {
		if ( empty( $redirection ) ) {
			return false;
		}

		$args['hits']          = absint( $redirection['hits'] ) + 1;
		$args['last_accessed'] = current_time( 'mysql' );

		return self::table()->set( $args )->where( 'id', $redirection['id'] )->update();
	}

	/**
	 * Delete multiple records.
	 *
	 * @param array $ids Array of ids to delete.
	 *
	 * @return int Number of records deleted.
	 */
	public static function delete( $ids ) {
		Cache::purge( $ids );
		$deleted = self::table()->whereIn( 'id', (array) $ids )->delete();

		/**
		 * Fires after deleting redirections.
		 */
		do_action( 'rank_math/redirection/deleted', $ids, $deleted );

		return $deleted;
	}

	/**
	 * Change record status to active or inactive.
	 *
	 * @param array $ids     Array of ids.
	 * @param bool  $status Active=1, Inactive=0.
	 *
	 * @return int Number of records updated.
	 */
	public static function change_status( $ids, $status ) {
		if ( ! self::is_valid_status( $status ) ) {
			return false;
		}

		return self::table()->set( 'status', $status )
			->set( 'updated', current_time( 'mysql' ) )
			->whereIn( 'id', (array) $ids )->update();
	}

	/**
	 * Clean trashed redirects after 30 days.
	 *
	 * @return void
	 */
	public static function periodic_clean_trash() {
		$ids = self::table()->select( 'id' )->where( 'status', 'trashed' )->where( 'updated', '<=', date_i18n( 'Y-m-d', strtotime( '30 days ago' ) ) )->get( ARRAY_A );
		if ( empty( $ids ) ) {
			return;
		}

		self::delete( wp_list_pluck( $ids, 'id' ) );
	}

	/**
	 * Delete all trashed redirections and associated sources.
	 *
	 * @return int Number of records deleted.
	 */
	public static function clear_trashed() {
		$ids = self::table()->select( 'id' )->where( 'status', 'trashed' )->get();
		if ( empty( $ids ) ) {
			return 0;
		}

		return self::delete( wp_list_pluck( $ids, 'id' ) );
	}

	/**
	 * Check if status is valid.
	 *
	 * @param string $status Status to validate.
	 *
	 * @return bool
	 */
	private static function is_valid_status( $status ) {
		$allowed = [ 'active', 'inactive', 'trashed' ];
		return in_array( $status, $allowed, true );
	}

	/**
	 * Get redirection source.
	 *
	 * @param array $sources Unserialized sources.
	 *
	 * @return array
	 */
	private static function get_sources( $sources ) {
		if ( ! is_array( $sources ) || empty( $sources ) ) {
			return $sources;
		}

		foreach ( $sources as $key => $source ) {
			$sources[ $key ]['pattern'] = wp_specialchars_decode( $source['pattern'] );
		}

		return $sources;
	}
}
PK     ¤ŠU]›/ÝGš  š  0  includes/modules/redirections/class-debugger.phpnu „[µü¤        <?php
/**
 * The Redirection debugger.
 *
 * @since      1.0.92
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Debugger class.
 */
class Debugger {

	use Hooker;

	/**
	 * Redirector variables.
	 *
	 * @var array
	 */
	private $args = [];

	/**
	 * Constructor.
	 *
	 * @param array $args Redirector variables.
	 */
	public function __construct( $args ) {
		$this->args = $args;
		$this->filter( 'user_has_cap', 'filter_user_has_cap' );
		$this->action( 'rank_math/redirection/debugger_head', 'inline_styles' );
		$this->action( 'rank_math/redirection/debugger_footer', 'inline_scripts' );

		$this->debugger_headers();

		include_once __DIR__ . '/views/debugging.php';
		exit;
	}

	/**
	 * Output CSS for the debugger page.
	 */
	public function inline_styles() {
		?>
		<style type="text/css">
			a {
				color: #3a3aea;
				text-decoration: none;
			}
			.rank-math-redrection-debug {
				width: 540px;
				margin: 0 auto;
				padding: 14px 16px;
				margin-top: 20px;
				border: 2px solid #f8dd91;
				background: #fef7e6;
				color: #343434;
				font-family: Arial;
				text-align: center;
			}

			.rank-math-redirection-loading-animation {
				margin-bottom: 8px;
			}

			.rank-math-redirection-loading-timer {
				display: inline-block;
				margin-top: 0;
				vertical-align: 12px;
				margin-left: 14px;
			}
			.redirection-timer {
				display: inline-block;
				margin: 6px 10px 0 0;
			}
			code {
				font-family: Consolas, Monaco, monospace;
				unicode-bidi: embed;
				padding: 3px 5px 2px 5px;
				margin: 0 1px;
				background-color: #f7f7f9;
				border: 1px solid #e1e1e8;
				font-size: 13px;
				color: #d72b3f;
			}

			code a {
				color: #d72b3f;
			}
			.rank-math-redirection-debug-info {
				font-size: 13px;
				font-style: italic;
				font-family: Consolas, Monaco, monospace;
				color: #000;
			}
		</style>
		<?php
	}

	/**
	 * Output JS for the debugger page.
	 */
	public function inline_scripts() {
		?>
		<script>
			var redirectTimer = 5,
				stopRedirection = false;

			var updateTimer = function() {
				if ( stopRedirection ) {
					return;
				}

				redirectTimer--;
				if ( redirectTimer > 1) {
					document.getElementById( 'redirection-timer-counter' ).textContent = redirectTimer;
					setTimeout( updateTimer, 1000 );
				} else {
					document.getElementById( 'redirection-timer-counter' ).textContent = redirectTimer;
					window.location.href = '<?php echo esc_url_raw( $this->args['redirect_to'] ); ?>';
				}
			}

			var cancelRedirection = function() {
				stopRedirection = true;
				document.querySelector('.rank-math-redirection-loading-animation').style.display = 'none';
				document.querySelector('.rank-math-redirection-loading-timer').style.display = 'none';

				document.querySelector('.rank-math-redirect-debug-continue').style.display = 'block';
			}

			setTimeout( updateTimer, 1000 );

			document.getElementById( 'rank-math-cancel-redirection' ).addEventListener( 'click', function( event ) {
				event.preventDefault();
				cancelRedirection();
			} );

			document.addEventListener( 'keyup', function( event ) {
				if ( 27 === event.keyCode ) {
					cancelRedirection();
				}
			} );
		</script>
		<?php
	}

	/**
	 * Send headers for the debugger page.
	 */
	private function debugger_headers() {
		$headers = [];

		$protocol  = wp_get_server_protocol();
		$headers[] = "$protocol 200 OK";
		$headers[] = 'Content-Type: text/html; charset=UTF-8';

		$headers = $this->do_filter( 'redirection/debugger_headers', $headers );

		foreach ( $headers as $header ) {
			header( $header );
		}
	}
}
PK     ¤ŠU]uâ]‚G•  G•  7  includes/modules/redirections/assets/js/redirections.jsnu „[µü¤        !function(){var t={332:function(){},423:function(){},942:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t="",e=0;e<arguments.length;e++){var n=arguments[e];n&&(t=a(t,i(n)))}return t}function i(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return o.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var n in t)r.call(t,n)&&t[n]&&(e=a(e,n));return e}function a(t,e){return e?t?t+" "+e:t+e:t}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},function(){"use strict";var t={};n.r(t),n.d(t,{resetStore:function(){return mt},resetdirtySettings:function(){return pt},updateAnalytics:function(){return ft},updateData:function(){return st},updateModules:function(){return dt}});var e={};n.r(e),n.d(e,{appData:function(){return St},appUi:function(){return Pt}});var r={};n.r(r),n.d(r,{getAnalytics:function(){return Ct},getAppData:function(){return Et},getData:function(){return Dt},getModules:function(){return At},getdirtySettings:function(){return xt}});const o=jQuery;var i=n.n(o);const a=wp.element,c=lodash,u=wp.i18n,l=wp.compose,s=wp.data,f=wp.hooks,d=function(){return(0,f.applyFilters)("rank_math_redirection_fields",[{id:"sources",type:"repeatableGroup",name:(0,u.__)("Source URLs","seo-by-rank-math"),default:{comparison:"exact"},options:{addButton:{children:(0,u.__)("Add another","seo-by-rank-math")},removeButton:{children:(0,u.__)("Remove","seo-by-rank-math")}},classes:"field-group-text-only",fields:[{id:"pattern",type:"text"},{id:"comparison",type:"select",options:{exact:(0,u.__)("Exact","seo-by-rank-math"),contains:(0,u.__)("Contains","seo-by-rank-math"),start:(0,u.__)("Starts With","seo-by-rank-math"),end:(0,u.__)("End With","seo-by-rank-math"),regex:(0,u.__)("Regex","seo-by-rank-math")}},{id:"ignore",type:"checkbox",label:(0,u.__)("Ignore Case","seo-by-rank-math"),variant:"metabox"}]},{id:"url_to",type:"text",name:(0,u.__)("Destination URL","seo-by-rank-math"),dep:{header_code:["301","302","307"]}},{id:"header_code",type:"toggleGroup",name:(0,u.__)("Redirection Type","seo-by-rank-math"),options:{301:(0,u.__)("301 Permanent Move","seo-by-rank-math"),302:(0,u.__)("302 Temporary Move","seo-by-rank-math"),307:(0,u.__)("307 Temporary Redirect","seo-by-rank-math"),410:(0,u.__)("410 Content Deleted","seo-by-rank-math"),451:(0,u.__)("451 Content Unavailable for Legal Reasons","seo-by-rank-math")}},{id:"status",type:"toggleGroup",name:(0,u.__)("Status","seo-by-rank-math"),options:{active:(0,u.__)("Activate","seo-by-rank-math"),inactive:(0,u.__)("Deactivate","seo-by-rank-math")},disableDep:[["start-date"],["end-date"]]}])};n.dn(d);const p=function(){var t=document.querySelector(".rank-math-editcreate-form").querySelectorAll('input[type="text"]:not(#add_category):not(#exclude)');(0,c.forEach)(t,function(t){t.classList.remove("invalid");var e=t.nextElementSibling;e&&e.classList.contains("validation-message")&&e.remove()});var e=(0,c.filter)(t,function(t){return!t.value.trim()});return!e.length>0||((0,c.forEach)(e,function(t,e){var n=document.createElement("span");n.className="validation-message",n.innerText=(0,u.__)("This field must not be empty.","seo-by-rank-math"),t.classList.add("invalid"),t.after(n),0===e&&t.scrollIntoView({behavior:"smooth",block:"nearest"})}),!1)};n.dn(p);const m=function(t){var e=document.querySelector(".rank-math-add-new-redirection");if(!(0,c.isNull)(e)){var n=document.querySelectorAll(".value-url_from, .rank-math-redirection-edit"),r=function(){return t(!0)},o=function(){return t(!1)};return(0,c.forEach)(n,function(t){return t.addEventListener("click",r)}),e.addEventListener("click",o),function(){(0,c.forEach)(n,function(t){return t.removeEventListener("click",r)}),e.removeEventListener("click",o)}}};n.dn(m);const y=function(){var t=document.querySelector(".field-id-header_code");if(t){var e=t.querySelector(".rank-math-toggle-group-control");if(e){var n=function(t){var e=document.createElement("div");return e.className=t,e},r=n("field-th"),o=document.createElement("label");o.textContent=(0,u.__)("Maintenance Code","seo-by-rank-math"),r.appendChild(o);var i=n("field-td"),a=n("components-base-control"),c=n("components-base-control__field"),l=n("components-toggle-group-control rank-math-toggle-group-control css-ml4wxx e19lxcc00");l.append(e.children[3],e.children[4]),c.appendChild(l),a.appendChild(c),i.appendChild(a);var s=n("field-row field-type-radio_inline field-id-maintenance");s.append(r,i),t.after(s)}}};n.dn(y);const h=function(t){var e=t.title,n=t.description,r=t.link,o=t.linkText,i=void 0===o?(0,u.__)("Learn more","seo-by-rank-math"):o;return wp.element.createElement("header",{className:"rank-math-tab-header"},wp.element.createElement("h2",null,e),wp.element.createElement("p",null,n,r&&wp.element.createElement(React.Fragment,null," ",wp.element.createElement("a",{href:r,target:"_blank",rel:"noreferrer"},i),".")))};n.dn(h);const b=wp.apiFetch;var v=n.n(b);const g=window.rankMathComponents;function w(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];e=e||"error",r=r||!1;var c=i()('<div class="notice notice-'+e+" "+o+' is-dismissible"><p>'+t+"</p></div>").hide();a||n.siblings(".notice").remove(),n.after(c),c.slideDown(),i()(document).trigger("wp-updates-notice-added"),i()("html,body").animate({scrollTop:c.offset().top-50},"slow"),r&&setTimeout(function(){c.fadeOut(function(){c.remove()})},r)}function S(t){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},S(t)}n.dn(w);var O=["validate","afterSave"];function k(){return k=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},k.apply(null,arguments)}function _(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function j(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_(Object(n),!0).forEach(function(e){P(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function P(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=S(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==S(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function E(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return x(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?x(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}var D=function(t,e){return"resetting"===e?(0,u.__)("Resettingâ€¦","seo-by-rank-math"):"resetted"===e?(0,u.__)("Resetted","seo-by-rank-math"):t.children},C=function(t,e){return"updating"===e?(0,u.__)("Updatingâ€¦","seo-by-rank-math"):"updated"===e?(0,u.__)("Updated","seo-by-rank-math"):t.children},A=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if((0,c.includes)(["roleCapabilities","redirections"],t))return{data:e,fields:{},updated:[]};var i={},a=[];return{data:(0,c.isUndefined)(n)?{}:(0,c.reduce)(n,function(t,n){return(0,c.isArray)(n.fields)&&0!==n.fields.length?"htaccess"===n.name?(t.htaccess_allow_editing=e.htaccess_allow_editing,t.htaccess_content=e.htaccess_content,(0,c.isEqual)(e.htaccess_content,o.htaccess_content)||a.push("htaccess_content"),t):((0,c.forEach)(n.fields,function(n){var u=n.id;if(r)(0,c.has)(n,"default")&&(t[u]=n.default,i[u]=n.type);else{var l=(""===e[u]||(0,c.isUndefined)(e[u]))&&(0,c.has)(n,"default")?n.default:e[u];t[u]=l,i[u]=n.type,"file"!==n.type||(0,c.isUndefined)(e[u+"_id"])||(t[u+"_id"]=e[u+"_id"],i[u]="text"),(0,c.isEqual)(l,o[u])||a.push(u)}}),t):t},{}),fields:i,updated:a}};const T=(0,l.compose)((0,s.withSelect)(function(t){return{settings:t("rank-math-settings").getdirtySettings(),data:t("rank-math-settings").getData()}}),(0,s.withDispatch)(function(t,e){var n=e.type,r=e.settings,o=e.tabs,a=e.footer.applyButton;return{saveSettings:function(e,l){var s=A(n,r,o,!1,l);e("updating"),v()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:s.data,fieldTypes:s.fields,updated:s.updated}}).then(function(n){return e("updated"),n?!(0,c.isUndefined)(n.notifications)&&n.notifications.length?((0,c.forEach)(n.notifications,function(t){var e=!(0,c.isEmpty)(t.error);w(e?t.error:t.success,e?"error":"success",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice",!0)}),void i()("html, body").animate({scrollTop:0},"fast")):n.error?(w(n.error,"error",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void i()("html, body").animate({scrollTop:0},"fast")):(t("rank-math-settings").updateData(n.settings?n.settings:j({},s.data)),n.success?(w(n.success,"success",i()(".rank-math-breadcrumbs-wrap"),!1,"rank-math-settings-notice"),void i()("html, body").animate({scrollTop:0},"fast")):(n&&!n.error&&a.afterSave&&a.afterSave(),e("updated"),void t("rank-math-settings").resetdirtySettings())):(e(""),void window.alert((0,u.__)("Something went wrong! Please try again.","seo-by-rank-math")))})},resetSettings:function(e){var i=A(n,r,o,!0);e("resetting"),v()({method:"POST",path:"/rankmath/v1/updateSettings",data:{type:n,settings:i.data,fieldTypes:i.fields,isReset:!0}}).then(function(n){if(!n)return e(""),void window.alert((0,u.__)("Something went wrong! Please try again.","seo-by-rank-math"));e("resetted"),t("rank-math-settings").updateData(n.settings?n.settings:j({},i.data)),t("rank-math-settings").resetdirtySettings()})}}}))(function(t){var e=E((0,a.useState)(""),2),n=e[0],r=e[1],o=t.settings,i=t.data,l=t.resetSettings,s=t.saveSettings,f=t.footer,d=f.applyButton,p=d.validate,m=(d.afterSave,function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(d,O)),y=(0,a.useRef)(null);return null===y.current&&(y.current=j({},i)),(0,a.useEffect)(function(){(0,c.includes)(["updated","resetted"],n)&&setTimeout(function(){return r("")},1e3)},[n]),wp.element.createElement("footer",{className:"form-footer rank-math-ui"},wp.element.createElement(g.Button,k({onClick:function(){window.confirm((0,u.__)("Are you sure? You want to reset settings.","seo-by-rank-math"))&&l(r)}},f.discardButton,{children:D(f.discardButton,n)})),wp.element.createElement(g.Button,k({variant:"primary",onClick:function(){(!p||p())&&s(r,y.current)},disabled:(0,c.isEmpty)(o)},m,{children:C(m,n)})))});var M=n(942),R=n.n(M);function N(t){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},N(t)}var I=["id","type","content","Component","isDisabled","default"];function U(){return U=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},U.apply(null,arguments)}function L(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function B(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?L(Object(n),!0).forEach(function(e){G(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):L(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function G(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=N(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=N(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==N(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function F(t){return function(t){if(Array.isArray(t))return q(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return q(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?q(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const W=(0,l.compose)((0,s.withDispatch)(function(t,e){var n=e.settings;return{updateSetting:function(e,r){n[e]=r,t("rank-math-settings").updateData(B({},n))}}}))(function(t){var e=t.field,n=t.settingType,r=t.settings,o=t.value,i=e.id,u=e.type,l=e.content,s=e.Component,f=e.isDisabled,d=e.default,p=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(e,I);(0,c.isUndefined)(o)&&(o=(0,c.isUndefined)(r)||(0,c.isUndefined)(r[i])?d:r[i]),(0,c.includes)(["disable_author_archives","opening_hours_format"],i)&&(0,c.isBoolean)(o)&&t.updateSetting(i,!1===o?"off":"on"),(0,c.includes)(["disable_author_archives"],i)&&""===o&&t.updateSetting(i,d),(0,c.endsWith)(i,"_bulk_editing")&&!(0,c.isString)(o)&&(o=String(o)),!(0,c.endsWith)(i,"_default_rich_snippet")||""!==o&&!1!==o||(o="off");var m=function(e){if(((0,c.endsWith)(i,"_robots")||"robots_global"===i)&&(0,c.isArray)(e)&&((0,c.includes)(e,"index")||(0,c.includes)(e,"noindex")||(0,c.includes)(o||[],"index")||(0,c.includes)(o||[],"noindex"))){var n=o||[],r=(0,c.includes)(e,"index"),a=(0,c.includes)(e,"noindex"),l=(0,c.includes)(n,"index"),s=(0,c.includes)(n,"noindex");if(l&&!r)e=[].concat(F(e),["noindex"]);else if(s&&!a)e=[].concat(F(e),["index"]);else if(r&&a){var f=(0,c.last)(e);e=(0,c.filter)(e,function(t){return"index"===f?"noindex"!==t:"index"!==t})}}"file"===u?((0,c.isEmpty)(e)&&(e={url:"",id:""}),t.updateSetting(i,e.url),t.updateSetting(i+"_id",e.id)):t.updateSetting(i,e)},y=function(){var t={toggle:"checked",checkbox:"checked"}[u]||"value",e=(0,c.includes)(["component","group"],u);return B(B(B({},p),{},G(G({id:i},t,p.value||o),"onChange",p.onChange||!f&&m),e&&{settingType:n}),p.attributes)},h={file:window.rankMathComponents.UploadFile,text:window.rankMathComponents.TextControl,select:window.rankMathComponents.SelectControl,toggle:window.rankMathComponents.ToggleControl,select_search:window.rankMathComponents.SelectWithSearch,multicheck:window.rankMathComponents.CheckboxList,multicheck_inline:window.rankMathComponents.CheckboxList,radio_inline:window.rankMathComponents.ToggleGroupControl,repeatable_group:window.rankMathComponents.RepeatableGroup,selectSearch:window.rankMathComponents.SelectWithSearch,searchPage:window.rankMathComponents.SearchPage,checkboxlist:window.rankMathComponents.CheckboxList,toggleGroup:window.rankMathComponents.ToggleGroupControl,repeatableGroup:window.rankMathComponents.RepeatableGroup,group:window.rankMathComponents.Group,checkbox:window.rankMathComponents.CheckboxControl,textarea:window.rankMathComponents.TextareaControl,notice:window.rankMathComponents.Notice,selectVariable:window.rankMathComponents.SelectVariable,button:window.rankMathComponents.Button}[u],b="group"===u?{onChange:t.updateSetting}:{};return h?wp.element.createElement(h,U({},y(),{settings:r},b)):"component"===u?wp.element.createElement(s,y()):"raw"===u?wp.element.createElement(a.RawHTML,null,l):null});var H=["relation","compare"];function K(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return V(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?V(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}const $=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t.relation,r=void 0===n?"or":n,o=t.compare,i=void 0===o?"":o,a=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;n[r]=t[r]}return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],-1===e.indexOf(n)&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(t,H),u=function(t){var n=K(t,2),r=n[0],o=n[1],a=e[r];return"!="===i?(0,c.isArray)(o)?!(0,c.includes)(o,a):o!==a:(0,c.isArray)(o)?(0,c.includes)(o,a):o===a};return"and"===r?(0,c.every)((0,c.entries)(a),u):(0,c.some)((0,c.entries)(a),u)};function z(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Q(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}n.dn($);const Y=function(t,e){return(0,c.some)(t,function(t){var n=z(t,1)[0];return e[n]})};function J(t){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},J(t)}function X(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Z(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?X(Object(n),!0).forEach(function(e){tt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):X(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function tt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=J(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=J(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==J(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.dn(Y);const et=function(t){var e=t.settingType,n=t.fields,r=t.settings,o=void 0===r?null:r;return wp.element.createElement("div",{className:"field-wrap form-table wp-core-ui rank-math-ui"},wp.element.createElement("div",{id:"field-metabox-rank-math-".concat(e),className:"field-metabox field-list"},(0,c.map)(n,function(t,n){var r=t.id,i=t.type,a=t.name,c=t.desc,u=t.classes,l=t.content,s=t.dep,f=t.disableDep,d=t.afterfield,p=Y(f,o);if((!s||$(s,o))&&"hidden"!==i){if("raw"===i)return l;var m=R()("field-row",u,tt(tt({"field-disabled":p},"field-id-"+r,r),"field-type-"+i,i));return wp.element.createElement("div",{key:r||n,className:m},a&&wp.element.createElement("div",{className:"field-th"},wp.element.createElement("label",{htmlFor:r},a)),wp.element.createElement("div",{className:"field-td"},wp.element.createElement(W,{settingType:e,field:Z(Z({},t),{},{isDisabled:p}),settings:o}),c&&wp.element.createElement("p",{className:"field-description",dangerouslySetInnerHTML:{__html:c}}),d))}})))};n.dn(et);const nt=function(t){var e=t.type,n=t.header,r=t.footer,o=t.fields,i=void 0===o?[]:o,a=t.settings,u=void 0===a?null:a,l=t.tabs;return(0,c.isEmpty)(u)?null:wp.element.createElement(React.Fragment,null,n&&wp.element.createElement(h,n),wp.element.createElement(et,{settingType:e,fields:i,settings:u}),r&&wp.element.createElement(T,{type:e,footer:r,tabs:l}))};function rt(t){return rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rt(t)}function ot(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function it(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=rt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=rt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==rt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function at(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,c=[],u=!0,l=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ct(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ct(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ct(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}n.dn(nt);const ut=(0,l.compose)((0,s.withSelect)(function(t,e){return{defaultRedirection:e.defaultRedirection,settings:t("rank-math-settings").getData()}}),(0,s.withDispatch)(function(t){return{updateData:function(e){t("rank-math-settings").updateData(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ot(Object(n),!0).forEach(function(e){it(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ot(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({},e))}}}))(function(t){var e=t.defaultRedirection,n=t.settings,r=t.updateData,o=rankMath,i=o.isNew,l=o.data,s=at((0,a.useState)(!(0,c.isEmpty)(l)),2),f=s[0],h=s[1];return(0,a.useEffect)(y,[]),(0,a.useEffect)(function(){return m(h)},[]),(0,a.useEffect)(function(){rankMath.data||r(e)},[]),wp.element.createElement("div",{className:"rank-math-redirections-form rank-math-editcreate-form rank-math-page rank-math-box ".concat(i||f?"is-open":"")},wp.element.createElement("h2",null,wp.element.createElement("strong",null,f?(0,u.__)("Update Redirection","seo-by-rank-math"):(0,u.__)("Add Redirection","seo-by-rank-math"))),wp.element.createElement(nt,{type:"redirections",fields:d(),settings:n,settingType:"redirections",footer:{discardButton:{onClick:void 0,isDestructive:!0,children:(0,u.__)("Cancel","seo-by-rank-math")},applyButton:{type:"submit",validate:p,children:f?(0,u.__)("Update Redirection","seo-by-rank-math"):(0,u.__)("Add Redirection","seo-by-rank-math"),afterSave:function(){return window.location.href="".concat(rankMath.adminurl,"?page=rank-math-redirections")}}}}))});function lt(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,f.applyFilters)("rank_math_sanitize_settings",e,t,n),null!==r&&(r=(0,f.applyFilters)("rank_math_sanitize_settings_value",r,t,n)),r=null===r?e:r,(0,f.doAction)("rank_math_settings_changed",t,e,n),{type:"RANK_MATH_SETTINGS_DATA",key:t,value:e,settingsKey:n,settingsValue:r}}function st(t){return lt("data",t,"data")}function ft(t){return lt("analytics",t,"analytics")}function dt(t,e){var n=wp.data.select("rank-math-settings").getData();return n[t].isActive=e,(0,c.forEach)(n,function(e,r){if((0,c.includes)(e.dep_modules,t)){var o=!1;(0,c.forEach)(e.dep_modules,function(t){n[t].isActive||(o=!0)}),n[r].isDisabled=o,n[r].disabled=o}}),st(n)}function pt(){return lt("dirtySettings",{})}function mt(){return{type:"RESET_STORE"}}n(332);function yt(t){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yt(t)}function ht(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function bt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ht(Object(n),!0).forEach(function(e){vt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ht(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function vt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=yt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=yt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==yt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var gt={data:(0,c.get)(rankMath,"data",{}),analytics:bt(bt(bt({},rankMath),(0,c.get)(rankMath,"data",{})),(0,c.get)(rankMath,"analytics",{})),dirtySettings:{}},wt=bt({},gt);function St(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gt,e=arguments.length>1?arguments[1]:void 0,n=bt({},t.dirtySettings);return!1!==e.settingsKey&&(n=e.settingsValue),"RANK_MATH_SETTINGS_DATA"===e.type?"dirtySettings"===e.key?bt(bt({},t),{},{dirtySettings:e.value}):bt(bt({},t),{},vt(vt({},e.key,e.value),"dirtySettings",n)):"RESET_STORE"===e.type?wt:t}function Ot(t){return Ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ot(t)}function kt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function _t(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?kt(Object(n),!0).forEach(function(e){jt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):kt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function jt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Ot(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ot(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ot(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Pt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?_t(_t({},t),{},jt({},e.key,e.value)):t}function Et(t){return t.appData}function xt(t){return t.appData.dirtySettings}function Dt(t){return t.appData.data}function Ct(t){return t.appData.analytics}function At(t){return t.appData.modules}n(423),(0,s.register)((0,s.createReduxStore)("rank-math-settings",{reducer:(0,s.combineReducers)(e),selectors:r,actions:t}));function Tt(t){return Tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tt(t)}function Mt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Rt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Mt(Object(n),!0).forEach(function(e){Nt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Mt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Nt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Tt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Tt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Tt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var It,Ut="".concat(rankMath.adminurl,"?page=rank-math-redirections");(It=i())(function(){({init:function(){this.wrap=It(".rank-math-redirections-wrap"),this.defaultRedirection={header_code:"301",status:"active",url_to:"",sources:[{comparison:"exact",pattern:""}]},this.addForm(),this.addNew(),this.edit(),this.importExport(),this.showMore(),this.columnActions(),this.explodePastedContent()},addForm:function(){(0,a.createRoot)(document.getElementById("rank-math-redirections-form")).render(wp.element.createElement(ut,{defaultRedirection:this.defaultRedirection}))},addNew:function(){var t=this,e=It("html, body");this.wrap.on("click",".rank-math-add-new-redirection",function(n){n.preventDefault();var r=t.wrap.find(".rank-math-editcreate-form");if(t.wrap.find(".rank-math-importexport-form").hide(),r.is(":visible"))return r.hide(),void window.history.pushState(null,{},Ut);wp.data.dispatch("rank-math-settings").updateData(Rt({},t.defaultRedirection)),r.show(),window.history.pushState(null,{},n.currentTarget.href),e.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){e.stop()}),e.animate({scrollTop:r.position().top},"slow",function(){e.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove")})}),this.wrap.on("click",".rank-math-button.is-destructive",function(t){t.preventDefault(),It(this).closest(".rank-math-editcreate-form").hide(),window.history.pushState(null,{},Ut)})},edit:function(){var t=this,e=It("html, body");this.wrap.on("click",".value-url_from",function(t){t.preventDefault();var e=It(t.currentTarget);return e.closest(".rank-math-more").length?e.closest(".rank-math-more").parent().find(".rank-math-redirection-edit").trigger("click"):e.parent().find(".rank-math-redirection-edit").trigger("click"),!1}),this.wrap.on("click",".rank-math-redirection-edit",function(n){n.preventDefault();var r=t.wrap.find(".rank-math-editcreate-form");t.wrap.find(".rank-math-importexport-form").hide();var o=i()(this).data("redirection");wp.data.dispatch("rank-math-settings").updateData(Rt({},o)),r.show(),window.history.pushState(null,{},n.currentTarget.href),e.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove",function(){e.stop()}),e.animate({scrollTop:r.position().top},"slow",function(){e.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove")})})},importExport:function(){var t=this;this.wrap.on("click",".rank-math-redirections-import_export",function(e){e.preventDefault();var n=t.wrap.find(".rank-math-importexport-form");if(n.is(":visible"))return n.hide(),void window.history.pushState(null,{},Ut);t.wrap.find(".rank-math-editcreate-form").hide(),n.slideToggle(200),window.history.pushState(null,{},e.currentTarget.href)})},explodePastedContent:function(){var t=It("#sources_repeat");t.on("paste","input",function(e){var n=e.originalEvent.clipboardData.getData("text");if(!/\r|\n/.exec(n))return!0;var r=It(this),o=It(".cmb-add-group-row",t),i=n.split(/\r?\n/).filter(String),a=r.closest(".cmb-field-list").find("select").val();return It.each(i,function(e,n){if(r.val(n),r.closest(".cmb-field-list").find("select").val(a),e<i.length-1){if(rankMath.redirectionPastedContent-1<=e)return!1;o.click(),r=It(".cmb-repeatable-grouping",t).last().find("input")}else r.focus()}),!1})},showMore:function(){this.wrap.on("click",".rank-math-showmore",function(t){t.preventDefault();var e=It(this);e.hide(),e.next(".rank-math-more").slideDown()}),this.wrap.on("click",".rank-math-hidemore",function(t){t.preventDefault();var e=It(this).parent();e.hide(),e.prev(".rank-math-showmore").show()})},columnActions:function(){var t=this;this.wrap.on("click",".rank-math-redirection-action",function(e){e.preventDefault();var n=It(this),r=n.data("action"),o=this.href.replace("admin.php","admin-ajax.php").replace("page=rank-math-redirections&","")+"&action=rank_math_redirection_"+r;It.ajax({url:o,type:"GET",success:function(e){e&&e.success&&(["delete","trash","restore"].includes(r)?n.closest("tr").fadeOut(800,function(){It(this).remove()}):n.closest("tr").toggleClass("rank-math-redirection-activated rank-math-redirection-deactivated"),"activate"===r?(t.filterCountAdd("active"),t.filterCountSubstract("inactive")):"deactivate"===r?(t.filterCountAdd("inactive"),t.filterCountSubstract("active")):"trash"===r?(t.filterCountAdd("trashed"),t.filterCountSubstract("all"),n.closest(".rank-math-redirection-deactivated").length?t.filterCountSubstract("inactive"):t.filterCountSubstract("active")):"delete"===r?t.filterCountSubstract("trashed"):"restore"===r&&(t.filterCountAdd("active"),t.filterCountAdd("all"),t.filterCountSubstract("trashed")))}})})},filterCountAdd:function(t){this.filterCount(t,"add")},filterCountSubstract:function(t){this.filterCount(t,"sub")},filterCount:function(t,e){var n=this.wrap.find("form > ul.subsubsub > ."+t+" .count"),r=parseInt(n.text().substr(1));r="add"===e?r+1:r-1,n.text("("+r+")")}}).init()})}()}();PK     ¤ŠU]::É†>  >  9  includes/modules/redirections/assets/css/redirections.cssnu „[µü¤        /*!
 * Plugin:	Rank Math - Redirections
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	redirections.css
 */@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.column-url_from,.column-url_to{width:28%}tr.rank-math-redirection-deactivated .deactivate,tr.rank-math-redirection-activated .activate,.rank-math-more,.rank-math-redirections-form,.metabox-prefs legend+label{display:none}.rank-math-redirections-form{width:808px;max-width:100%;margin-top:1.25rem;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-redirections-form.is-open{display:block}.rank-math-redirections-form>h2{margin-top:0;margin-bottom:2rem}#rank-math-redirections-form .field-row{border-top:0 !important}#rank-math-redirections-form .rank-math-editcreate-form{overflow:visible}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-bottom:10px;line-height:1.3}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping>.group-item{-webkit-box-flex:0;-ms-flex:0 0 41%;flex:0 0 41%;display:inline-block;width:calc(43% - 10px)}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping>.group-item~.group-item:not(.group-item-checkbox){margin-left:10px}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping>.group-item.group-item-checkbox{margin-left:0;margin-top:10px;-ms-flex-order:4;order:4;-webkit-box-ordinal-group:5}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping>.group-item.group-item-checkbox .components-checkbox-control__label{color:#7f868d;letter-spacing:.01em;line-height:1.3}#rank-math-redirections-form .rank-math-editcreate-form .field-repeatable-grouping .button-remove-group{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin-left:10px}.form-footer:not(.rank-math-custom){margin:1.875rem -1.875rem -1.875rem;padding:20px 1.875rem;width:auto;overflow:hidden;border:0;border-top:1px solid #b5bfc9}.form-footer:not(.rank-math-custom) .rank-math-button.components-button{padding:0 20px}tr.rank-math-redirection-deactivated{opacity:.5}.rank-math-redirections-export-options{padding:20px}PK     ¤ŠU]Ÿ$å î)  î)  3  includes/modules/redirections/class-redirection.phpnu „[µü¤        <?php
/**
 * The Redirection Item.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Helper;
use RankMath\Helpers\Url;
use RankMath\Helpers\Param;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Redirection class.
 */
class Redirection {

	/**
	 * Hold redirection data.
	 *
	 * @var array
	 */
	private $data;

	/**
	 * Hold cache data.
	 *
	 * @var array
	 */
	private $cache;

	/**
	 * No pre redirection cache.
	 *
	 * @var bool
	 */
	private $nocache = false;

	/**
	 * Hold current parent domain.
	 *
	 * @var string
	 */
	private $domain = null;

	/**
	 * Hold state.
	 *
	 * @var string
	 */
	private $is_new = true;

	/**
	 * Retrieve Redirection instance.
	 *
	 * @param integer $id Redirection ID.
	 *
	 * @return Redirection
	 */
	public static function create( $id = 0 ) {
		$data = [
			'id'          => 0,
			'sources'     => [],
			'url_to'      => '',
			'header_code' => '301',
			'hits'        => '0',
			'status'      => 'active',
			'created'     => '',
			'updated'     => '',
		];

		if ( $id > 0 && $object = DB::get_redirection_by_id( $id ) ) { // phpcs:ignore
			$object['id'] = absint( $object['id'] );
			unset( $object['last_accessed'] );
			$data = $object;
		}

		return new self( $data );
	}

	/**
	 * Create instance from array.
	 *
	 * @param array $data Array of data.
	 *
	 * @return Redirection
	 */
	public static function from( $data ) {
		$sources = [];
		if ( isset( $data['sources'] ) ) {
			$sources = $data['sources'];
			unset( $data['sources'] );
		}

		$object = new self( $data );
		$object->add_sources( $sources );

		if ( isset( $data['url_to'] ) ) {
			$object->add_destination( $data['url_to'] );
		}

		return $object;
	}

	/**
	 * Constructor.
	 *
	 * @param array $data    Array of item data.
	 * @param bool  $nocache Don't do pre-cache.
	 */
	public function __construct( $data, $nocache = false ) {
		$this->data    = $data;
		$this->nocache = $nocache;

		if ( isset( $data['id'] ) && $data['id'] > 0 ) {
			$this->is_new = false;
		}
	}

	/**
	 * Getter.
	 *
	 * @param string $key Key to get.
	 *
	 * @return mixed
	 */
	public function __get( $key ) {
		if ( isset( $this->data[ $key ] ) ) {
			return $this->data[ $key ];
		}

		return $this->$key;
	}

	/**
	 * Get item ID.
	 *
	 * @return int
	 */
	public function get_id() {
		return $this->data['id'];
	}

	/**
	 * Set item ID.
	 *
	 * @param int $id Item ID.
	 */
	public function set_id( $id ) {
		$this->data['id'] = $id;
	}

	/**
	 * Set item status.
	 *
	 * @param string $status Item status.
	 */
	public function set_status( $status ) {
		$this->data['status'] = $status;
	}

	/**
	 * Set cache setting.
	 *
	 * @param bool $nocache Can save cache or not.
	 */
	public function set_nocache( $nocache ) {
		$this->nocache = $nocache;
	}

	/**
	 * Is new redirection.
	 *
	 * @return int
	 */
	public function is_new() {
		return $this->is_new;
	}

	/**
	 * Has sources.
	 *
	 * @return bool
	 */
	public function has_sources() {
		return ! empty( $this->data['sources'] ) && is_array( $this->data['sources'] );
	}

	/**
	 * Save to database.
	 */
	public function save() {
		if ( false === $this->has_sources() ) {
			return false;
		}

		$this->set_id( DB::update_iff( $this->data ) );

		if ( false === $this->nocache ) {
			$this->save_redirection_cache();
		}

		return $this->get_id();
	}

	/**
	 * Check a newly added redirection for infinite loop.
	 */
	public function is_infinite_loop() {
		$destination = $this->data['url_to'];
		foreach ( $this->data['sources'] as $source ) {
			if ( 'exact' !== $source['comparison'] ) {
				continue;
			}

			$source_url = home_url( $source['pattern'] );
			if ( $destination === $source_url ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Add sources.
	 *
	 * @param array $sources Sources to add.
	 */
	public function add_sources( $sources ) {
		foreach ( $sources as $key => $value ) {
			$value['comparison'] = empty( $value['comparison'] ) ? 'exact' : $value['comparison'];
			$this->add_source( $value['pattern'], $value['comparison'], ! empty( $value['ignore'] ) ? 'case' : '' );
		}
	}

	/**
	 * Add source.
	 *
	 * @param string $pattern    Pattern to add.
	 * @param string $comparison Comparison for pattern.
	 * @param string $ignore     Ignore flag.
	 */
	public function add_source( $pattern, $comparison, $ignore = '' ) {
		$pattern = trim( $pattern );
		if ( empty( $pattern ) ) {
			return;
		}

		$pattern = $this->sanitize_source( wp_strip_all_tags( $pattern, true ), $comparison );
		if ( ! $pattern ) {
			return;
		}

		$this->data['sources'][] = [
			'ignore'     => $ignore,
			'pattern'    => $pattern,
			'comparison' => $comparison,
		];
	}

	/**
	 * Add and sanitize destination URL.
	 *
	 * @param string $url URL to process.
	 */
	public function add_destination( $url ) {
		$processed = trim( wp_strip_all_tags( $url, true ) );

		// If beginning looks like a domain but without protocol then let's add home_url().
		if ( ! empty( $processed ) && Url::is_relative( $processed ) ) {
			$processed = home_url( $processed );
		}

		$this->data['url_to'] = $processed;
	}

	/**
	 * Sanitize source.
	 *
	 * @param string $pattern    Pattern to sanitize.
	 * @param string $comparison Comparison of pattern.
	 *
	 * @return string
	 */
	private function sanitize_source( $pattern, $comparison ) {
		if ( 'exact' === $comparison ) {
			$pattern = $this->sanitize_source_url( $pattern );
			if ( $pattern && false === $this->nocache ) {
				$this->pre_redirection_cache( $pattern );
			}

			return $pattern;
		} elseif ( 'regex' === $comparison ) {
			return $this->sanitize_source_regex( $pattern );
		}

		// Other comparison types: "contains", "start", "end".
		return filter_var( $pattern, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
	}

	/**
	 * Sanitize redirection source URL.
	 *
	 * Following urls converted to URI:
	 *    '' => false
	 *    '/' => false
	 *    /URI => URI
	 *    #URI => #URI
	 *    https://website.com/#URI/ => #URI
	 *    https://website.com#URI/ => #URI
	 *    website.com => false
	 *    www.website.com => false
	 *    http://sub.website.com/URI => false
	 *    http://external.com/URI => false
	 *    website.com/URI => URI
	 *    website.com/URI/ => URI
	 *    http://website.com/URI => URI
	 *    http://website.com/URI/ => URI
	 *    https://website.com/URI => URI
	 *    https://website.com/URI/ => URI
	 *    www.website.com/URI => URI
	 *    www.website.com/URI/ => URI
	 *    http://www.website.com/URI => URI
	 *    http://www.website.com/URI/ => URI
	 *    https://www.website.com/URI => URI
	 *    https://www.website.com/URI/ => URI
	 *
	 * @param string $url User-input source URL.
	 *
	 * @return string|false
	 */
	private function sanitize_source_url( $url ) {
		if ( empty( $url ) || '/' === $url ) {
			return false;
		}

		if ( '#' === $url[0] || '/' === $url[0] ) {
			return ltrim( $url, '/' );
		}

		$original = $url;
		$domain   = $this->get_home_domain();
		$url      = trailingslashit( $url );
		$url      = str_replace( $domain . '#', $domain . '/#', $url );  // For website.com#URI link.
		$domain   = trailingslashit( $domain );
		$search   = [
			'http://' . $domain,
			'http://www.' . $domain,
			'https://' . $domain,
			'https://www.' . $domain,
			'www.' . $domain,
		];
		$url      = str_replace( $search, '', $url );
		$url      = preg_replace( '/^' . preg_quote( $domain, '/' ) . '/s', '', $url );

		// Empty url.
		// External domain.
		if ( empty( $url ) || 0 === strpos( $url, 'http://' ) || 0 === strpos( $url, 'https://' ) ) {
			return false;
		}

		// Remove trailing slash if original url doesn't have it.
		if ( '/' !== substr( $original, -1 ) ) {
			$url = untrailingslashit( $url );
		}

		return urldecode( self::strip_subdirectory( $url ) );
	}

	/**
	 * Sanitize redirection source for regex.
	 *
	 * @param  string $pattern Pattern to process.
	 * @return string
	 */
	private function sanitize_source_regex( $pattern ) {
		// No new lines.
		$pattern = preg_replace( "/[\r\n\t].*?$/s", '', $pattern );

		// Clean control codes.
		$pattern = preg_replace( '/[^\PC\s]/u', '', $pattern );

		// Check if it's a valid pattern.
		if ( @preg_match( '@' . $pattern . '@', '' ) === false ) { // phpcs:ignore
			/* translators: source pattern */
			Helper::add_notification( sprintf( __( 'Invalid regex pattern: %s', 'seo-by-rank-math' ), $pattern ), [ 'type' => 'error' ] );
			return false;
		}

		return $pattern;
	}

	/**
	 * Maybe collect WordPress object to add redirection cache.
	 *
	 * @param string $slug Url to search for.
	 */
	private function pre_redirection_cache( $slug ) {
		global $wpdb;

		// Check for post.
		$post_id = url_to_postid( home_url( $slug ) );
		if ( $post_id ) {
			$this->cache[] = [
				'from_url'    => $slug,
				'object_id'   => $post_id,
				'object_type' => 'post',
			];
			return;
		}

		// Check for term.
		$terms = DB_Helper::get_results( $wpdb->prepare( "SELECT term_id FROM $wpdb->terms WHERE slug = %s", $slug ) );
		if ( $terms ) {
			foreach ( $terms as $term ) {
				$this->cache[] = [
					'from_url'    => $slug,
					'object_id'   => $term->term_id,
					'object_type' => 'term',
				];
			}
			return;
		}

		// Check for user.
		$user = get_user_by( 'slug', $slug );
		if ( $user ) {
			$this->cache[] = [
				'from_url'    => $slug,
				'object_id'   => $user->ID,
				'object_type' => 'user',
			];
			return;
		}
	}

	/**
	 * Save redirection caches.
	 */
	private function save_redirection_cache() {
		if ( ! $this->get_id() || empty( $this->cache ) ) {
			return;
		}

		foreach ( $this->cache as $item ) {
			$item['redirection_id'] = $this->get_id();
			Cache::add( $item );
		}
	}

	/**
	 * Get the domain, without www. and protocol.
	 *
	 * @return string
	 */
	private function get_home_domain() {
		if ( ! is_null( $this->domain ) ) {
			return $this->domain;
		}

		$this->domain = Url::get_host( home_url() );

		return $this->domain;
	}

	/**
	 * Strip home directory when WP is installed in subdirectory.
	 *
	 * @param string $url URL to strip from.
	 *
	 * @return string
	 */
	public static function strip_subdirectory( $url ) {
		$home_dir = ltrim( Helper::get_home_url( '', 'relative' ), '/' );

		return $home_dir ? str_replace( trailingslashit( $home_dir ), '', $url ) : $url;
	}

	/**
	 * Get the current URI.
	 *
	 * @return string
	 */
	public static function get_full_uri() {
		$uri = str_replace( home_url( '/' ), '', Param::server( 'REQUEST_URI' ) );
		$uri = urldecode( $uri );
		$uri = trim( self::strip_subdirectory( $uri ), '/' );

		return $uri;
	}
}
PK     ¤ŠU]ët;rÁ+  Á+  -  includes/modules/redirections/class-admin.phpnu „[µü¤        <?php
/**
 * The Redirections module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Param;
use RankMath\Module\Base;
use RankMath\Traits\Ajax;
use RankMath\Traits\Hooker;
use RankMath\Admin\Admin_Helper;
use RankMath\Admin\Page;
use RankMath\Monitor\DB as Monitor_DB;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	use Ajax;
	use Hooker;

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * List table object.
	 *
	 * @var object
	 */
	public $table;

	/**
	 * Screen options.
	 *
	 * @var array
	 */
	public $screen_options = [];

	/**
	 * Module page.
	 *
	 * @var object
	 */
	public $page;

	/**
	 * Admin object.
	 *
	 * @var Admin
	 */
	public $admin;

	/**
	 * Import/Export object.
	 *
	 * @var Import_Export
	 */
	public $import_export;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$directory = __DIR__;
		$this->config(
			[
				'id'             => 'redirect',
				'directory'      => $directory,
				'table'          => 'RankMath\Redirections\Table',
				'screen_options' => [
					'id'      => 'rank_math_redirections_per_page',
					'default' => 100,
				],
			]
		);
		parent::__construct();

		$this->ajax_hooks();
		$this->load_metabox();

		if ( Helper::has_cap( 'redirections' ) ) {
			$this->filter( 'rank_math/settings/general', 'add_settings' );
		}

		if ( $this->page->is_current_page() || 'rank_math_save_redirections' === Param::post( 'action' ) ) {
			$this->import_export = new Import_Export();
			$this->import_export->hooks();
		}

		if ( $this->page->is_current_page() ) {
			new Export();
			$this->action( 'init', 'init', 21 );
		}

		add_action( 'rank_math/redirection/clean_trashed', 'RankMath\\Redirections\\DB::periodic_clean_trash' );
	}

	/**
	 * Load metabox.
	 */
	private function load_metabox() {
		if ( Admin_Helper::is_post_edit() || Admin_Helper::is_term_edit() ) {
			new Metabox();
		}
	}

	/**
	 * Hooks for ajax.
	 */
	private function ajax_hooks() {
		if ( ! Helper::is_ajax() ) {
			return;
		}

		$this->ajax( 'redirection_delete', 'handle_ajax' );
		$this->ajax( 'redirection_activate', 'handle_ajax' );
		$this->ajax( 'redirection_deactivate', 'handle_ajax' );
		$this->ajax( 'redirection_trash', 'handle_ajax' );
		$this->ajax( 'redirection_restore', 'handle_ajax' );
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {

		$dir = $this->directory . '/views/';
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		$this->page = new Page(
			'rank-math-redirections',
			esc_html__( 'Redirections', 'seo-by-rank-math' ),
			[
				'position'   => 40,
				'parent'     => 'rank-math',
				'capability' => 'rank_math_redirections',
				'render'     => $dir . 'main.php',
				'help'       => [
					'redirections-overview'       => [
						'title' => esc_html__( 'Overview', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-overview.php',
					],
					'redirections-screen-content' => [
						'title' => esc_html__( 'Screen Content', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-screen-content.php',
					],
					'redirections-actions'        => [
						'title' => esc_html__( 'Available Actions', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-actions.php',
					],
					'redirections-bulk'           => [
						'title' => esc_html__( 'Bulk Actions', 'seo-by-rank-math' ),
						'view'  => $dir . 'help-tab-bulk.php',
					],
				],
				'assets'     => [
					'styles'  => [
						'wp-components'          => '',
						'rank-math-common'       => '',
						'rank-math-redirections' => $uri . '/assets/css/redirections.css',
					],
					'scripts' => [
						'wp-element'             => '',
						'wp-components'          => '',
						'rank-math-common'       => '',
						'rank-math-components'   => '',
						'rank-math-redirections' => $uri . '/assets/js/redirections.js',
					],
					'json'    => [
						'isNew' => Param::get( 'new' ),
					],
				],
			]
		);
	}

	/**
	 * Add module settings in the General Settings panel.
	 *
	 * @param  array $tabs Array of option panel tabs.
	 * @return array
	 */
	public function add_settings( $tabs ) {

		/**
		 * Allow developers to change number of redirections to process at once.
		 *
		 * @param int $number
		 */
		Helper::add_json( 'redirectionPastedContent', $this->do_filter( 'redirections/pastedContent', 100 ) );

		Arr::insert(
			$tabs,
			[
				'redirections' => [
					'icon'  => 'rm-icon rm-icon-redirection',
					'title' => esc_html__( 'Redirections', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'  => sprintf( esc_html__( 'Easily create redirects without fiddling with tedious code. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'redirections-settings', 'Options Panel Redirections Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => $this->directory . '/views/options.php',
					'json'  => [
						'redirectionTypes' => Helper::choices_redirection_types(),
					],
				],
			],
			8
		);

		return $tabs;
	}

	/**
	 * Initialize module actions.
	 */
	public function init() {
		Helper::add_json( 'data', $this->get_default_redirection() );
		if ( ! empty( $_REQUEST['delete_all'] ) ) {
			check_admin_referer( 'bulk-redirections' );
			DB::clear_trashed();
			return;
		}

		$action = Helper::get_request_action();
		if ( false === $action || empty( $_REQUEST['redirection'] ) || 'edit' === $action ) {
			return;
		}

		check_admin_referer( 'bulk-redirections' );

		$ids = (array) wp_parse_id_list( $_REQUEST['redirection'] );
		if ( empty( $ids ) ) {
			Helper::add_notification( __( 'No valid ID found.', 'seo-by-rank-math' ) );
			return;
		}

		$notice = $this->perform_action( $action, $ids );
		if ( $notice ) {
			Helper::add_notification( $notice, [ 'type' => 'success' ] );
			return;
		}
	}

	/**
	 * Handle AJAX request.
	 */
	public function handle_ajax() {
		$action = Helper::get_request_action();
		if ( false === $action ) {
			return;
		}

		check_ajax_referer( 'redirection_list_action', 'security' );
		$this->has_cap_ajax( 'redirections' );

		$id     = Param::request( 'redirection', 0, FILTER_VALIDATE_INT );
		$action = str_replace( 'rank_math_redirection_', '', $action );

		if ( ! $id ) {
			$this->error( esc_html__( 'No valid ID found.', 'seo-by-rank-math' ) );
		}

		$notice = $this->perform_action( $action, $id );
		if ( $notice ) {
			$this->success( $notice );
		}

		$this->error( esc_html__( 'No valid action found.', 'seo-by-rank-math' ) );
	}

	/**
	 * Output page title actions.
	 *
	 * @param bool $is_editing User is editing a redirection.
	 * @return void
	 */
	public function page_title_actions( $is_editing ) {
		$actions = [
			'add'           => [
				'class' => 'page-title-action rank-math-add-new-redirection' . ( $is_editing ? '-refresh' : '' ),
				'href'  => Helper::get_admin_url( 'redirections', 'new=1' ),
				'label' => __( 'Add New', 'seo-by-rank-math' ),
			],
			'import_export' => [
				'class' => 'page-title-action',
				'href'  => Helper::get_admin_url( 'redirections', 'importexport=1' ),
				'label' => __( 'Export Options', 'seo-by-rank-math' ),
			],
			'learn_more'    => [
				'class' => 'page-title-action',
				'href'  => KB::get( 'redirections', 'SW Redirection Step' ),
				'label' => __( 'Learn More', 'seo-by-rank-math' ),
			],
			'settings'      => [
				'class' => 'page-title-action',
				'href'  => Helper::get_settings_url( 'general', 'redirections' ),
				'label' => __( 'Settings', 'seo-by-rank-math' ),
			],
		];

		$actions = $this->do_filter( 'redirections/page_title_actions', $actions, $is_editing );

		foreach ( $actions as $action_name => $action ) {
			?>
				<a class="<?php echo esc_attr( $action['class'] ); ?> rank-math-redirections-<?php echo esc_attr( $action_name ); ?>" href="<?php echo esc_attr( $action['href'] ); ?>" target="<?php echo $action_name === 'learn_more' ? '_blank' : ''; ?>"><?php echo esc_attr( $action['label'] ); ?></a>
			<?php
		}
	}

	/**
	 * Get default Redirection to show on a new Redirection form.
	 *
	 * @return array
	 */
	private function get_default_redirection() {
		$redirection = Param::get( 'redirection' );
		if ( $redirection ) {
			return $this->do_filter( 'redirections/table_item', DB::get_redirection_by_id( $redirection ) );
		}

		$url = Param::get( 'url' );
		if ( $url ) {
			return [
				'header_code' => '301',
				'status'      => 'active',
				'sources'     => [
					[
						'pattern'    => esc_attr( $url ),
						'comparison' => 'exact',
					],
				],
			];
		}

		$urls = Param::get( 'urls', false, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
		if ( $urls ) {
			$urls    = array_map( 'esc_attr', $urls );
			$sources = [];
			foreach ( $urls as $url ) {
				$sources[] = [
					'pattern'    => $url,
					'comparison' => 'exact',
				];
			}

			return [
				'header_code' => '301',
				'status'      => 'active',
				'sources'     => $sources,
			];
		}

		if ( ! empty( $_REQUEST['log'] ) && is_array( $_REQUEST['log'] ) ) {
			return [
				'header_code' => '301',
				'status'      => 'active',
				'sources'     => $this->get_sources_for_log(),
				'url_to'      => esc_url( home_url( '/' ) ),
			];
		}

		return false;
	}

	/**
	 * Get sources for 404 log items.
	 *
	 * @return array
	 */
	private function get_sources_for_log() {
		$logs = isset( $_REQUEST['log'] ) ? array_map( 'absint', $_REQUEST['log'] ) : [];
		$logs = Monitor_DB::get_logs(
			[
				'ids'     => $logs,
				'orderby' => '',
				'limit'   => 1000,
			]
		);

		$sources = [];
		foreach ( $logs['logs'] as $log ) {
			if ( empty( $log['uri'] ) ) {
				continue;
			}
			$sources[] = [
				'pattern'    => $log['uri'],
				'comparison' => 'exact',
			];
		}

		return $sources;
	}

	/**
	 * Perform action on database.
	 *
	 * @param  string        $action Action to perform.
	 * @param  integer|array $ids    Rows to perform on.
	 * @return string
	 */
	private function perform_action( $action, $ids ) {
		$status  = [
			'activate'   => 'active',
			'deactivate' => 'inactive',
			'trash'      => 'trashed',
			'restore'    => 'active',
		];
		$message = [
			'activate'   => esc_html__( 'Redirection successfully activated.', 'seo-by-rank-math' ),
			'deactivate' => esc_html__( 'Redirection successfully deactivated.', 'seo-by-rank-math' ),
			'trash'      => esc_html__( 'Redirection successfully moved to Trash.', 'seo-by-rank-math' ),
			'restore'    => esc_html__( 'Redirection successfully restored.', 'seo-by-rank-math' ),
		];

		if ( isset( $status[ $action ] ) ) {
			DB::change_status( $ids, $status[ $action ] );
			return $message[ $action ];
		}

		if ( 'delete' === $action ) {
			$count = DB::delete( $ids );
			if ( $count > 0 ) {
				/* translators: delete counter */
				return sprintf( esc_html__( '%d redirection(s) successfully deleted.', 'seo-by-rank-math' ), $count );
			}
		}

		return false;
	}
}
PK     ¤ŠU]™Aå	ÿ  ÿ  ?  includes/modules/redirections/views/help-tab-screen-content.phpnu „[µü¤        <?php
/**
 * On-Screen help tab: Screen Content.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'You can customize the display of this screen\'s contents in a number of ways:', 'seo-by-rank-math' ); ?>
</p>
<ul>
	<li><?php esc_html_e( 'You can hide/display columns based on your needs.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can decide how many items to list per screen using the Screen Options tab.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can search items using the search form at the top.', 'seo-by-rank-math' ); ?></li>
	<li><?php esc_html_e( 'You can reorder the list by clicking on the column headings. ', 'seo-by-rank-math' ); ?></li>
</ul>
PK     ¤ŠU]¬™†·  ·  ,  includes/modules/redirections/views/main.phpnu „[µü¤        <?php
/**
 * Redirection main view.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

use RankMath\Helper;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

$redirections = Helper::get_module( 'redirections' )->admin;
$redirections->table->prepare_items();

$is_new     = (bool) Param::get( 'new' );
$is_editing = ! empty( Param::get( 'url' ) ) || ! empty( $_GET['urls'] ) || ! empty( $_REQUEST['log'] ) || ! empty( Param::request( 'redirect_uri' ) );

$is_importexport = ! empty( Param::get( 'importexport' ) );

$entries_status = Param::get( 'status' ) ?? 'any';

?>
<div class="wrap rank-math-redirections-wrap">

	<h1 class="wp-heading-inline">
		<?php echo esc_html( get_admin_page_title() ); ?>
		<?php $redirections->page_title_actions( $is_editing ); ?>
	</h1>

	<div class="clear"></div>

	<div id="rank-math-redirections-form"></div>

	<div class="rank-math-redirections-form rank-math-importexport-form<?php echo $is_importexport ? ' is-open' : ''; ?>">

		<?php $redirections->import_export->display_form(); ?>

	</div>

	<form method="get">
		<input type="hidden" name="page" value="rank-math-redirections">
		<input type="hidden" name="status" value="<?php echo esc_attr( $entries_status ); ?>">
		<?php $redirections->table->search_box( esc_html__( 'Search', 'seo-by-rank-math' ), 's' ); ?>
	</form>

	<form method="post">
	<?php
		$redirections->table->views();
		$redirections->table->display();
	?>
	</form>

</div>
PK     ¤ŠU]‹èŸÞ†  †  1  includes/modules/redirections/views/debugging.phpnu „[µü¤        <?php
/**
 * Redirection debugging template.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
<head>
	<title><?php esc_html_e( 'Rank Math SEO Redirection Debugger', 'seo-by-rank-math' ); ?></title>
	<meta name="viewport" content="width=device-width"/>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

	<?php $this->do_action( 'redirection/debugger_head' ); ?>
</head>
<body>
	<div class="rank-math-redrection-debug">
		<h1><?php esc_html_e( 'Redirection Debugger', 'seo-by-rank-math' ); ?></h1>
		<p>
			<?php esc_html_e( 'Redirecting from ', 'seo-by-rank-math' ); ?><code>/<?php echo esc_html( $this->args['uri'] ); ?></code>
			<?php esc_html_e( ' To ', 'seo-by-rank-math' ); ?><code><a href="<?php echo esc_url_raw( $this->args['redirect_to'] ); ?>"><?php echo esc_url( $this->args['redirect_to'] ); ?></a></code>
		</p>

		<div class="rank-math-redirection-loading-animation">
			<img src="<?php echo esc_url_raw( rank_math()->plugin_url() . 'assets/admin/img/loader.svg' ); ?>">
		</div>
		<div class="rank-math-redirection-loading-timer">
			<?php /* translators: countdown seconds */ ?>
			<span class="redirection-timer"><?php printf( esc_html__( 'Redirecting in %s seconds...', 'seo-by-rank-math' ), '<span id="redirection-timer-counter">5</span>' ); ?></span><br />
			<a href="#" class="button button-secondary" id="rank-math-cancel-redirection"><?php esc_html_e( 'Stop Redirection', 'seo-by-rank-math' ); ?></a>
		</div>
		<div class="rank-math-redirect-debug-continue" style="display: none;">
			<a href="<?php echo esc_url( $this->args['redirect_to'] ); ?>"><?php esc_html_e( 'Continue redirecting', 'seo-by-rank-math' ); ?></a>
		</div>

		<p>
			<?php $rank_math_redirections_page_url = Helper::get_admin_url( 'redirections' ); ?>
			<?php if ( isset( $this->args['matched']['id'] ) ) : ?>
				<a target="_blank" href="<?php echo esc_url_raw( $rank_math_redirections_page_url . '&action=edit&redirection=' . absint( $this->args['matched']['id'] ) ); ?>"><?php esc_html_e( 'Manage This Redirection', 'seo-by-rank-math' ); ?></a> 
				<?php esc_html_e( 'or', 'seo-by-rank-math' ); ?>
			<?php endif; ?>
			<a target="_blank" href="<?php echo esc_url_raw( $rank_math_redirections_page_url ); ?>"><?php esc_html_e( 'Manage All Redirections', 'seo-by-rank-math' ); ?></a>
		</p>

		<p class="rank-math-redirection-debug-info">
			<?php echo wp_kses_post( __( '<strong>Note:</strong> This interstitial page is displayed only to administrators. Site visitors are redirected without delay.', 'seo-by-rank-math' ) ); ?>
		</p>

		<?php if ( $this->args['cache'] ) : ?>
			<code><?php esc_html_e( 'Served from cache', 'seo-by-rank-math' ); ?></code>
		<?php endif; ?>
	</div>

	<?php $this->do_action( 'redirection/debugger_footer' ); ?>
</body>
</html>
PK     ¤ŠU]Ø(tl3  3  5  includes/modules/redirections/views/help-tab-bulk.phpnu „[µü¤        <?php
/**
 * On-Screen help tab: Bulk Actions.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'You can also activate, deactivate, or delete multiple items at once using the Bulk Actions dropdown.', 'seo-by-rank-math' ); ?>
</p>
PK     ¤ŠU]É]–F  F  /  includes/modules/redirections/views/options.phpnu „[µü¤        <?php
/**
 * Redirections general settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'redirections_debug',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Debug Redirections', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Display the Debug Console instead of being redirected. Administrators only.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'      => 'redirections_fallback',
		'type'    => 'radio',
		'name'    => esc_html__( 'Fallback Behavior', 'seo-by-rank-math' ),
		'desc'    => wp_kses_post( __( 'If nothing similar is found, this behavior will be applied. <strong>Note</strong>: If the requested URL ends with <code>/login</code>, <code>/admin</code>, or <code>/dashboard</code>, WordPress will automatically redirect to respective locations within the WordPress admin area.', 'seo-by-rank-math' ) ),
		'options' => [
			'default'  => esc_html__( 'Default 404', 'seo-by-rank-math' ),
			'homepage' => esc_html__( 'Redirect to Homepage', 'seo-by-rank-math' ),
			'custom'   => esc_html__( 'Custom Redirection', 'seo-by-rank-math' ),
		],
		'default' => 'default',
	]
);

$cmb->add_field(
	[
		'id'   => 'redirections_custom_url',
		'type' => 'text',
		'name' => esc_html__( 'Custom Url ', 'seo-by-rank-math' ),
		'dep'  => [ [ 'redirections_fallback', 'custom' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'redirections_header_code',
		'type'    => 'select',
		'name'    => esc_html__( 'Redirection Type', 'seo-by-rank-math' ),
		'options' => Helper::choices_redirection_types(),
		'default' => '301',
	]
);

$cmb->add_field(
	[
		'id'      => 'redirections_post_redirect',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Auto Post Redirect', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Extend the functionality of WordPress by creating redirects in our plugin when you change the slug of a post, page, category or a CPT. You can modify the redirection further according to your needs.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);
PK     ¤ŠU]V–C+=  =  9  includes/modules/redirections/views/help-tab-overview.phpnu „[µü¤        <?php
/**
 * On-Screen help tab: Overview.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'Here you can set up custom redirections. It is important to choose the right type of redirection.', 'seo-by-rank-math' ); ?>
</p>
<ul>
	<li><?php echo wp_kses_post( __( '301 redirections are <em>permanent</em>. The old URL will be removed in search engines and replaced by the new one, passing on SearchRank and other SEO scores. Browsers may also store the new URL in cache and redirect to it even after the redirection is deleted from the list here.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( 'Using a 302 <em>temporary</em> redirection is useful when you want to test a new page for client feedback temporarily without affecting the SEO scores of the original page.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( 'Redirections can be exported to your .htaccess file for faster redirections, in SEO > Settings > Import/Export.', 'seo-by-rank-math' ) ); ?></li>
</ul>
PK     ¤ŠU]ª½w‘-  -  8  includes/modules/redirections/views/help-tab-actions.phpnu „[µü¤        <?php
/**
 * On-Screen help tab: Available Actions.
 *
 * @package    RankMath
 * @subpackage RankMath\Redirections
 */

defined( 'ABSPATH' ) || exit;

?>
<p>
	<?php esc_html_e( 'Hovering over a row in the list will display action links that allow you to manage the item. You can perform the following actions:', 'seo-by-rank-math' ); ?>
</p>
<ul>
	<li><?php echo wp_kses_post( __( '<strong>Edit</strong> redirection details: from/to URLs and the redirection type.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( '<strong>Activate/Deactivate</strong> redirections. Deactivated redirections do not take effect on your site.', 'seo-by-rank-math' ) ); ?></li>
	<li><?php echo wp_kses_post( __( '<strong>Delete</strong> permanently removes the redirection.', 'seo-by-rank-math' ) ); ?></li>
</ul>
PK     ¤ŠU]'èèÎG  G  4  includes/modules/redirections/class-redirections.phpnu „[µü¤        <?php
/**
 * The Redirections Module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Security;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Redirections class.
 */
class Redirections {

	use Hooker;

	/**
	 * Admin object.
	 *
	 * @var Admin
	 */
	public $admin;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->load_admin();

		if ( ! is_admin() ) {
			// Delay the redirection when BuddyPress plugin  is active since it uses template_redirect hook to show the group page content.
			$hook = class_exists( 'BuddyPress' ) ? 'template_redirect' : 'wp';
			$this->action( $hook, 'do_redirection', 11 );
		}

		if ( Helper::has_cap( 'redirections' ) ) {
			$this->action( 'rank_math/admin_bar/items', 'admin_bar_items', 11 );

			if ( Helper::is_rest() ) {
				$this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 12 );
			}
		}

		if ( $this->disable_auto_redirect() ) {
			remove_action( 'template_redirect', 'wp_old_slug_redirect' );
		}
	}

	/**
	 * Add stats in the Rank Math admin dashboard widget.
	 */
	public function dashboard_widget() {
		$data = DB::get_stats();
		?>
		<h3>
			<?php esc_html_e( 'Redirections', 'seo-by-rank-math' ); ?>
			<a href="<?php echo esc_url( Helper::get_admin_url( 'redirections' ) ); ?>" class="rank-math-view-report" title="<?php esc_html_e( 'View Report', 'seo-by-rank-math' ); ?>"><i class="dashicons dashicons-chart-bar"></i></a>
		</h3>
		<div class="rank-math-dashboard-block">
			<div>
				<h4>
					<?php esc_html_e( 'Redirection Count', 'seo-by-rank-math' ); ?>
					<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span><?php esc_html_e( 'Total number of Redirections created in the Rank Math.', 'seo-by-rank-math' ); ?></span></span>
				</h4>
				<strong class="text-large"><?php echo esc_html( Str::human_number( $data->total ) ); ?></strong>
			</div>
			<div>
				<h4>
					<?php esc_html_e( 'Redirection Hits', 'seo-by-rank-math' ); ?>
					<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span><?php esc_html_e( 'Total number of hits received by all the Redirections.', 'seo-by-rank-math' ); ?></span></span>
				</h4>
				<strong class="text-large"><?php echo esc_html( Str::human_number( $data->hits ) ); ?></strong>
			</div>
		</div>
		<?php
	}

	/**
	 * Load redirection admin and the REST API.
	 */
	private function load_admin() {
		if ( is_admin() ) {
			$this->admin = new Admin();
		}

		if ( is_admin() || Helper::is_rest() ) {
			new Watcher();
		}
	}

	/**
	 * Do redirection on frontend.
	 */
	public function do_redirection() {
		if (
			$this->is_wp_login() ||
			is_customize_preview() ||
			Helper::is_ajax() ||
			! isset( $_SERVER['REQUEST_URI'] ) ||
			empty( $_SERVER['REQUEST_URI'] ) ||
			$this->is_script_uri_or_http_x() ||
			(bool) Param::get( 'elementor-preview' )
		) {
			return;
		}

		$redirector = new Redirector();
	}

	/**
	 * Add admin bar item.
	 *
	 * @param Admin_Bar_Menu $menu Menu class instance.
	 */
	public function admin_bar_items( $menu ) {
		$menu->add_sub_menu(
			'redirections',
			[
				'title'    => esc_html__( 'Redirections', 'seo-by-rank-math' ),
				'href'     => Helper::get_admin_url( 'redirections' ),
				'meta'     => [ 'title' => esc_html__( 'Create and edit redirections', 'seo-by-rank-math' ) ],
				'priority' => 50,
			]
		);

		$menu->add_sub_menu(
			'redirections-edit',
			[
				'title' => esc_html__( 'Manage Redirections', 'seo-by-rank-math' ),
				'href'  => Helper::get_admin_url( 'redirections' ),
				'meta'  => [ 'title' => esc_html__( 'Create and edit redirections', 'seo-by-rank-math' ) ],
			],
			'redirections'
		);

		$menu->add_sub_menu(
			'redirections-settings',
			[
				'title' => esc_html__( 'Redirection Settings', 'seo-by-rank-math' ),
				'href'  => Helper::get_settings_url( 'general', 'redirections' ),
				'meta'  => [ 'title' => esc_html__( 'Redirection Settings', 'seo-by-rank-math' ) ],
			],
			'redirections'
		);

		if ( ! is_admin() ) {
			$menu->add_sub_menu(
				'redirections-redirect-me',
				[
					'title' => esc_html__( '&raquo; Redirect this page', 'seo-by-rank-math' ),
					'href'  => Security::add_query_arg_raw( 'url', rawurlencode( ltrim( Param::server( 'REQUEST_URI' ), '/' ) ), Helper::get_admin_url( 'redirections' ) ),
					'meta'  => [ 'title' => esc_html__( 'Redirect the current URL', 'seo-by-rank-math' ) ],
				],
				'redirections'
			);
		}
	}

	/**
	 * Check if request is WordPress login.
	 *
	 * @return boolean
	 */
	private function is_wp_login() {
		$uri = Param::server( 'REQUEST_URI' );
		if ( Str::contains( 'wp-admin', $uri ) || Str::contains( 'wp-login', $uri ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Check if request is script URI or a http-x request.
	 *
	 * @return boolean
	 */
	private function is_script_uri_or_http_x() {
		if ( isset( $_SERVER['SCRIPT_URI'] ) && ! empty( $_SERVER['SCRIPT_URI'] ) && admin_url( 'admin-ajax.php' ) === Param::server( 'SCRIPT_URI' ) ) {
			return true;
		}

		if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ! empty( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( Param::server( 'HTTP_X_REQUESTED_WITH' ) ) === 'xmlhttprequest' ) {
			return true;
		}

		return false;
	}

	/**
	 * Disable Auto-Redirect.
	 *
	 * @return bool
	 */
	private function disable_auto_redirect() {
		return get_option( 'permalink_structure' ) && Helper::get_settings( 'general.redirections_post_redirect' );
	}
}
PK     ¥ŠU]ÞRUâ˜  ˜  5  includes/modules/redirections/class-import-export.phpnu „[µü¤        <?php
/**
 * The Redirections import/export panel.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Import_Export class.
 */
class Import_Export {

	use Hooker;

	/**
	 * Limit
	 *
	 * @var string
	 */
	public $limit;

	/**
	 * Instance of this class.
	 *
	 * @var object
	 */
	protected static $instance;

	/**
	 * Get the singleton instance of this class.
	 *
	 * @return Import_Export
	 */
	public static function get() {
		if ( ! ( self::$instance instanceof self ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->limit = $this->do_filter( 'redirections/export_notice_limit', 1000 );
	}

	/**
	 * The hooks.
	 */
	public function hooks() {
		$this->action( 'rank_math/redirections/export_tab_content', 'export_tab' );
	}

	/**
	 * Export Tab contents.
	 *
	 * @return void
	 */
	public function export_tab() {
		// Show a notice if the number of redirections is too high.
		$count = DB::get_redirections(
			[
				'limit'  => $this->limit,
				'status' => 'active',
			]
		);

		if ( $count['count'] >= $this->limit ) {
			?>
			<div class="inline notice notice-warning notice-alt rank-math-notice" style="margin: 10px 10px 0;">
				<p>
					<?php
					// Translators: Placeholder expands to number of redirections.
					printf( esc_html__( 'Warning: you have more than %d active redirections. Exporting them to your .htaccess file may cause performance issues.', 'seo-by-rank-math' ), absint( $this->limit ) );
					?>
				</p>
			</div>
			<?php
		}

		?>
		<div class="rank-math-redirections-export-options">
			<a class="button button-primary" href="<?php echo esc_url( wp_nonce_url( Helper::get_admin_url( 'redirections', 'export=apache' ), 'rank-math-export-redirections' ) ); ?>"><?php esc_html_e( 'Export to .htaccess', 'seo-by-rank-math' ); ?></a>
			<a class="button button-primary" href="<?php echo esc_url( wp_nonce_url( Helper::get_admin_url( 'redirections', 'export=nginx' ), 'rank-math-export-redirections' ) ); ?>"><?php esc_html_e( 'Export to Nginx config file', 'seo-by-rank-math' ); ?></a>
		</div>
		<?php
	}

	/**
	 * Display form.
	 */
	public function display_form() {
		$tabs = $this->do_filter(
			'redirections/export_tabs',
			[
				'export' => [
					'name'  => __( 'Export', 'seo-by-rank-math' ),
					'icon'  => 'rm-icon-export',
					'class' => 'active-tab',
				],
			]
		);

		?>
		<div id="import-export-box" class="rank-math-box no-padding">
			<div class="rank-math-box-tabs wp-clearfix">
				<?php foreach ( $tabs as $tab_id => $tab ) : ?>
					<a href="#panel-<?php echo sanitize_html_class( $tab_id ); ?>" class="<?php echo esc_attr( $tab['class'] ); ?>">
						<i class="rm-icon <?php echo esc_attr( $tab['icon'] ); ?>"></i>
						<span class="rank-math-tab-text"><?php echo esc_html( $tab['name'] ); ?></span>
					</a>
				<?php endforeach; ?>
			</div>

			<div class="rank-math-box-content">

				<div class="rank-math-box-inner">
					<?php foreach ( $tabs as $tab_id => $tab ) : ?>
						<form id="panel-<?php echo sanitize_html_class( $tab_id ); ?>" class="rank-math-<?php echo sanitize_html_class( $tab_id ); ?>-form cmb2-form <?php echo esc_attr( $tab['class'] ); ?>" action="#import-export-box" method="post" enctype="multipart/form-data" accept-charset="<?php echo esc_attr( get_bloginfo( 'charset' ) ); ?>">
							<?php $this->do_action( 'redirections/' . $tab_id . '_tab_content' ); ?>
						</form>
					<?php endforeach; ?>
				</div>
			</div>
		</div>

		<?php
	}
}
PK     ¥ŠU]‰ã¹‡+  ‡+  /  includes/modules/redirections/class-watcher.phpnu „[µü¤        <?php
/**
 * The Redirections Watcher.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;
use RankMath\Helpers\Sitepress;

defined( 'ABSPATH' ) || exit;

/**
 * Watcher class.
 */
class Watcher {

	use Hooker;

	/**
	 * Hold updated posts permalinks.
	 *
	 * @var array
	 */
	private $updated_posts = [];

	/**
	 * Hold updated terms permalinks.
	 *
	 * @var array
	 */
	private $updated_terms = [];

	/**
	 * The constructor.
	 */
	public function __construct() {

		// Post.
		// Only monitor if pretty permalinks are enabled.
		if ( get_option( 'permalink_structure' ) ) {
			if ( Helper::get_settings( 'general.redirections_post_redirect' ) ) {
				$this->action( 'pre_post_update', 'pre_post_update' );
				$this->action( 'post_updated', 'handle_post_update', 10, 3 );
				$this->action( 'attachment_updated', 'handle_post_update', 10, 3 );
				$this->action( 'edit_terms', 'pre_term_update', 10, 2 );
				$this->action( 'edited_term', 'handle_term_update', 10, 3 );
			}
			$this->action( 'wp_trash_post', 'display_suggestion' );
		}
		$this->action( 'deleted_post', 'invalidate_post' );

		// Term.
		$this->action( 'pre_delete_term', 'invalidate_term', 10, 2 );

		// User.
		$this->action( 'delete_user', 'invalidate_author' );
		$this->action( 'profile_update', 'invalidate_author' );
	}

	/**
	 * Remember the previous post permalink.
	 *
	 * @param integer $post_id Post ID.
	 */
	public function pre_post_update( $post_id ) {
		$this->updated_posts[ $post_id ] = get_permalink( $post_id );
	}

	/**
	 * Handles redirection when post is updated.
	 *
	 * @param integer $post_id Post ID.
	 * @param WP_Post $post    Post object after update.
	 * @param WP_Post $before  Post object before update.
	 */
	public function handle_post_update( $post_id, $post, $before ) {
		if ( ! in_array( $post->post_type, Helper::get_accessible_post_types(), true ) ) {
			return;
		}

		// Transitioning state of post.
		$transition = "{$before->post_status}_to_{$post->post_status}";

		// Both state permalink.
		$before_permalink = isset( $this->updated_posts[ $post_id ] ) ? $this->updated_posts[ $post_id ] : false;
		$after_permalink  = get_permalink( $post_id );

		// Check for permalink change.
		if ( $this->is_watched_transition( $transition, $post ) && $this->has_permalink_changed( $before_permalink, $after_permalink ) ) {
			$redirection_id = $this->create_redirection( $before_permalink, $after_permalink, 301, $post->ID, 'post' );

			$message = sprintf(
				// translators: %1$s: post type label, %2$s: edit redirection URL.
				__( 'SEO Notice: you just changed the slug of a %1$s and Rank Math has automatically created a redirection. You can edit the redirection by <a href="%2$s">clicking here</a>.', 'seo-by-rank-math' ),
				Helper::get_post_type_label( $post->post_type, true ),
				$this->get_edit_redirection_url( $redirection_id )
			);
			$this->add_notification( $message, true );

			// Update the meta value as well.
			if ( 'edit-post' === Param::post( 'screen' ) ) {
				update_post_meta( $post_id, 'rank_math_permalink', $post->post_name );
			}

			$this->do_action( 'redirection/post_updated', $redirection_id, $post_id );
			return;
		}
	}

	/**
	 * Remember the previous term permalink.
	 *
	 * @param integer $term_id  Term ID.
	 * @param string  $taxonomy Taxonomy slug of the related term.
	 */
	public function pre_term_update( $term_id, $taxonomy ) {
		$this->updated_terms[ $term_id ] = get_term_link( $term_id, $taxonomy );
	}

	/**
	 * Detect if the slug changed, hooked into 'post_updated'.
	 *
	 * @param integer $term_id  ID of the term edited.
	 * @param integer $tt_id    The term taxonomy id.
	 * @param string  $taxonomy Taxonomy slug of the related term.
	 *
	 * @return void
	 */
	public function handle_term_update( $term_id, $tt_id, $taxonomy ) {
		if ( ! in_array( $taxonomy, array_keys( Helper::get_accessible_taxonomies() ), true ) ) {
			return;
		}

		Sitepress::get()->delete_cached_tax_permalink( $term_id, $taxonomy );

		// Both state permalink.
		$before_permalink = isset( $this->updated_terms[ $term_id ] ) ? $this->updated_terms[ $term_id ] : false;
		$after_permalink  = get_term_link( $term_id );

		if ( $before_permalink !== $after_permalink ) {
			$term           = get_term_by( 'id', $term_id, $taxonomy );
			$redirection_id = $this->create_redirection( $before_permalink, $after_permalink, 301, $term->term_id, 'term' );

			$message = sprintf(
				// translators: %1$s: term name, %2$s: edit redirection URL.
				__( 'SEO Notice: you just changed the slug of a %1$s and Rank Math has automatically created a redirection. You can edit the redirection by <a href="%2$s">clicking here</a>.', 'seo-by-rank-math' ),
				$term->name,
				$this->get_edit_redirection_url( $redirection_id )
			);
			$this->add_notification( $message, true );

			$this->do_action( 'redirection/term_updated', $redirection_id, $term_id );
		}
	}

	/**
	 * Create redirection.
	 *
	 * @param string $from_url    Redirecting from url for cache.
	 * @param string $url_to      Destination url.
	 * @param int    $header_code Response header code.
	 * @param int    $object_id   Object id.
	 * @param string $type        Object type.
	 *
	 * @return int Redirection id.
	 */
	private function create_redirection( $from_url, $url_to, $header_code, $object_id, $type ) {
		// Early bail.
		if ( empty( $from_url ) || empty( $url_to ) ) {
			return;
		}

		// Check for any existing redirection.
		// If found update that record.
		$redirection = $this->has_existing_redirection( $object_id, $type );
		if ( false === $redirection ) {
			$redirection = Redirection::from(
				[
					'url_to'      => $url_to,
					'header_code' => $header_code,
				]
			);
		}

		$redirection->set_nocache( true );
		$redirection->add_source( $from_url, 'exact' );
		$redirection->add_destination( $url_to );
		$redirection->save();

		// Perform Cache.
		Cache::purge_by_object_id( $object_id, $type );
		if ( $from_url ) {
			$from_url = wp_parse_url( $from_url, PHP_URL_PATH );
			$from_url = Redirection::strip_subdirectory( $from_url );
			Cache::add(
				[
					'from_url'       => $from_url,
					'redirection_id' => $redirection->get_id(),
					'object_id'      => $object_id,
					'object_type'    => $type,
				]
			);
		}

		return $redirection->get_id();
	}

	/**
	 * Check for any existing redirection.
	 *
	 * @param int    $object_id Object id.
	 * @param string $type      Object type.
	 *
	 * @return boolean|int
	 */
	private function has_existing_redirection( $object_id, $type ) {
		$cache = Cache::get_by_object_id( $object_id, $type );
		if ( ! $cache ) {
			return false;
		}

		return Redirection::create( $cache->redirection_id );
	}

	/**
	 * Check if permalinks are different and if the before isn't the site URL.
	 *
	 * @param  WP_Post $before Post object before update.
	 * @param  WP_Post $after  Post object after update.
	 * @return boolean
	 */
	private function has_permalink_changed( $before, $after ) {
		$before = wp_parse_url( $before, PHP_URL_PATH );
		$after  = wp_parse_url( $after, PHP_URL_PATH );

		// Do the URLs the match?
		if ( $before === $after ) {
			return false;
		}

		// Is the $before the site URL?
		if ( $this->get_site_path() === $before || '/' === $before ) {
			return false;
		}

		return true;
	}

	/**
	 * Gets edit redirection URL.
	 *
	 * @param  int $redirection_id Redirection ID.
	 * @return string
	 */
	private function get_edit_redirection_url( $redirection_id ) {
		return Helper::get_admin_url(
			'redirections',
			[
				'redirection' => $redirection_id,
				'action'      => 'edit',
				'security'    => wp_create_nonce( 'redirection_list_action' ),
			]
		);
	}

	/**
	 * Get site path.
	 *
	 * @return string
	 */
	private function get_site_path() {
		$path = wp_parse_url( get_home_url(), PHP_URL_PATH );
		if ( $path ) {
			return rtrim( $path, '/' ) . '/';
		}

		return '/';
	}

	/**
	 * Display a suggestion notice after a post has been deleted.
	 *
	 * @param int $post_id Deleted post ID.
	 */
	public function display_suggestion( $post_id ) {
		$post = get_post( $post_id );

		if ( $this->can_display_suggestion( $post ) ) {
			$url = get_permalink( $post_id );
			$this->add_invalid_notification( $url, 'post' );
		}
	}

	/**
	 * Invalidate redirection cache for the post.
	 * Don't invalidate for revisions.
	 *
	 * @param int $post_id Post ID to invalidate type for.
	 */
	public function invalidate_post( $post_id ) {
		if ( wp_is_post_revision( $post_id ) ) {
			return;
		}

		Cache::purge_by_object_id( $post_id, 'post' );
	}

	/**
	 * Invalidate redirection cache for taxonomies.
	 *
	 * @param int $term Term ID.
	 */
	public function invalidate_term( $term ) {
		$url = get_term_link( $term );
		$this->add_invalid_notification( $url, 'term' );
		Cache::purge_by_object_id( $term, 'term' );
	}

	/**
	 * Invalidate redirection cache for authors.
	 *
	 * @param int $user_id User ID.
	 */
	public function invalidate_author( $user_id ) {
		Cache::purge_by_object_id( $user_id, 'user' );
	}

	/**
	 * Check if notice can be displayed or not.
	 *
	 * @param  WP_Post $post Current post.
	 * @return bool
	 */
	private function can_display_suggestion( $post ) {
		if ( 'publish' !== $post->post_status ) {
			return false;
		}

		return Helper::is_post_type_accessible( $post->post_type );
	}

	/**
	 * Show Delete Post/Term notification.
	 *
	 * @param url    $url  Deleted object url.
	 * @param string $type Deleted object type.
	 */
	private function add_invalid_notification( $url, $type ) {
		$admin_url = Helper::get_admin_url( 'redirections', [ 'url' => trim( set_url_scheme( $url, 'relative' ), '/' ) ] );

		/* translators: 1. url to new screen, 2. old trashed post permalink */
		$message = sprintf( wp_kses_post( __( '<strong>SEO Notice:</strong> A previously published %1$s has been moved to trash. You may redirect <code>%2$s</code> to <a href="%3$s">a new url</a>.', 'seo-by-rank-math' ) ), $type, $url, $admin_url );

		$this->add_notification( $message, true );
	}

	/**
	 * Show Delete Post/Term notification.
	 *
	 * @param string  $message        Notification message.
	 * @param boolean $is_dismissible Is notification dismissible.
	 */
	private function add_notification( $message, $is_dismissible = false ) {
		if ( ! Helper::has_cap( 'redirections' ) ) {
			return;
		}

		Helper::add_notification(
			$message,
			[
				'type'    => 'warning',
				'id'      => 'auto_post_redirection',
				'classes' => $is_dismissible ? 'is-dismissible' : '',
			]
		);
	}

	/**
	 * Invalidate redirection update.
	 *
	 * @param string  $transition Previous and current post status.
	 * @param WP_Post $post       Current post.
	 * @return bool
	 */
	private function is_watched_transition( $transition, $post ) {
		return 'publish_to_publish' === $transition
			|| ( 'inherit_to_inherit' === $transition && 'attachment' === $post->post_type && ! Helper::get_settings( 'general.attachment_redirect_urls' ) );
	}
}
PK     ¥ŠU]çqäç'  ç'  2  includes/modules/redirections/class-redirector.phpnu „[µü¤        <?php
/**
 * The Redirector.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use WP_Query;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Redirector class.
 */
class Redirector {

	use Hooker;

	/**
	 * Matched redirection.
	 *
	 * @var array
	 */
	private $matched = false;

	/**
	 * Redirect to this URL.
	 *
	 * @var string
	 */
	private $redirect_to;

	/**
	 * Current request URI.
	 *
	 * @var string
	 */
	private $uri = '';

	/**
	 * Current request uri with querystring.
	 *
	 * @var string
	 */
	private $full_uri = '';

	/**
	 * Current query string.
	 *
	 * @var string
	 */
	private $query_string = '';

	/**
	 * From cache.
	 *
	 * @var bool
	 */
	private $cache = false;

	/**
	 * Sets the error template to include.
	 *
	 * @var string
	 */
	protected $template_file_path;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->start();
		$this->flow();
		$this->redirect();
	}

	/**
	 * Set the required values.
	 */
	private function start() {
		// Complete request uri.
		$this->full_uri = Redirection::get_full_uri();

		// Remove query string.
		$this->uri = explode( '?', $this->full_uri );
		if ( isset( $this->uri[1] ) ) {
			$this->query_string = $this->uri[1];
		}
		$this->uri = trim( $this->uri[0], '/' );

		if ( $this->is_amp_endpoint() ) {
			$this->uri = \str_replace( '/' . amp_get_slug(), '', $this->uri );
		}
	}

	/**
	 * Run the system flow.
	 */
	private function flow() {
		$flow = [ 'pre_filter', 'from_cache', 'everything', 'fallback' ];
		foreach ( $flow as $func ) {
			if ( false !== $this->matched ) {
				break;
			}

			$this->$func();
		}
	}

	/**
	 * If we got a match, redirect.
	 */
	private function redirect() {
		if ( false === $this->matched ) {
			return;
		}

		if ( isset( $this->matched['id'], $this->matched['url_to'] ) ) {
			DB::update_access( $this->matched );
		}

		$header_code = $this->get_header_code();
		if ( in_array( $header_code, [ 410, 451 ], true ) ) {
			$this->redirect_without_target( $header_code );
			return;
		}

		$this->do_debugging();

		if ( true === $this->do_filter( 'redirection/add_query_string', true, $this->matched ) && Str::is_non_empty( $this->query_string ) ) {
			$separator          = Str::contains( '?', $this->redirect_to ) ? '&' : '?';
			$this->redirect_to .= $separator . $this->query_string;
		}

		if ( wp_redirect( esc_url_raw( $this->redirect_to ), $header_code, $this->get_redirect_header() ) ) { // phpcs:ignore
			exit;
		}
	}

	/**
	 * Handles the redirects without a target by setting the needed hooks.
	 *
	 * @param string $header_code The type of the redirect.
	 *
	 * @return void
	 */
	private function redirect_without_target( $header_code ) {
		$has_include_hook = $this->set_template_include_hook( $header_code );
		if ( ! $has_include_hook ) {
			$this->set_404();
		}

		if ( 410 === $header_code ) {
			status_header( 410 );
		}

		if ( 451 === $header_code ) {
			status_header( 451, 'Unavailable For Legal Reasons' );
		}
	}

	/**
	 * Sets the hook for setting the template include. This is the file that we want to show.
	 *
	 * @param string $template The template to look for.
	 *
	 * @return bool True when template should be included.
	 */
	protected function set_template_include_hook( $template ) {
		$this->template_file_path = get_query_template( $template );
		if ( ! empty( $this->template_file_path ) ) {
			$this->filter( 'template_include', 'set_template_include' );
			return true;
		}

		return false;
	}

	/**
	 * Returns the template that should be included.
	 *
	 * @param string $template The template that will included before executing hook.
	 *
	 * @return string Returns the template that should be included.
	 */
	public function set_template_include( $template ) {
		if ( ! empty( $this->template_file_path ) ) {
			return $this->template_file_path;
		}

		return $template;
	}

	/**
	 * Pre filter
	 */
	private function pre_filter() {
		$pre = $this->do_filter(
			'redirection/pre_search',
			null,
			$this->uri,
			$this->full_uri
		);

		if ( null === $pre || ! is_array( $pre ) ) {
			return;
		}

		$this->matched     = $pre;
		$this->redirect_to = $pre['url_to'];
	}

	/**
	 * Search from cache.
	 */
	private function from_cache() {
		$redirections = Cache::get_by_object_id_or_url( (int) get_queried_object_id(), $this->get_current_object_type(), $this->uri );
		foreach ( $redirections as $redirection ) {
			if ( empty( $redirection->object_id ) ) {
				$this->cache = true;
				$this->set_redirection( $redirection->redirection_id );
				return;
			}

			if ( trim( $redirection->from_url, '/' ) === $this->uri ) {
				$this->cache = true;
				$this->set_redirection( $redirection->redirection_id );
				return;
			}
		}
	}

	/**
	 * Search for everything rules.
	 */
	private function everything() {
		$redirection = DB::match_redirections( $this->uri );
		if ( ! $redirection && $this->uri !== $this->full_uri ) {
			$redirection = DB::match_redirections( $this->full_uri );
		}

		if ( $redirection ) {
			Cache::add(
				[
					'from_url'       => $this->uri,
					'redirection_id' => $redirection['id'],
					'object_id'      => 0,
					'object_type'    => 'any',
					'is_redirected'  => '1',
				]
			);
			$this->set_redirection( $redirection );
		}
	}

	/**
	 * Do the fallback strategy here.
	 */
	private function fallback() {
		if ( ! $this->can_run_fallback() ) {
			return;
		}

		$behavior = Helper::get_settings( 'general.redirections_fallback' );
		if ( 'default' === $behavior ) {
			return;
		}

		if ( 'homepage' === $behavior ) {
			$this->matched     = [];
			$this->redirect_to = home_url();
			return;
		}

		$custom_url = Helper::get_settings( 'general.redirections_custom_url' );
		if ( ! empty( $custom_url ) ) {
			$this->matched     = [];
			$this->redirect_to = $custom_url;
		}
	}

	/**
	 * Show debugging interstitial if enabled.
	 */
	private function do_debugging() {
		if ( ! Helper::get_settings( 'general.redirections_debug' ) || ! Helper::has_cap( 'redirections' ) ) {
			return;
		}

		new Debugger( get_object_vars( $this ) );
	}

	/**
	 * Set redirection by ID.
	 *
	 * @param integer $redirection Redirection ID to set for.
	 */
	private function set_redirection( $redirection ) {
		if ( ! is_array( $redirection ) ) {
			$redirection = DB::get_redirection_by_id( $redirection, 'active' );
		}

		$custom_match = $this->do_filter( 'redirection/redirection_match', false, $redirection );
		if ( false === $redirection || ( ! DB::compare_sources( $redirection['sources'], $this->uri ) && ! $custom_match ) ) {
			return;
		}

		if ( isset( $redirection['url_to'] ) ) {
			$this->matched = $redirection;
			$this->set_redirect_to();
		}

		if ( $this->is_amp_endpoint() ) {
			$this->redirect_to = $this->redirect_to . amp_get_slug() . '/';
		}
	}

	/**
	 * Set redirect to.
	 */
	private function set_redirect_to() {
		$this->redirect_to = $this->matched['url_to'];
		foreach ( $this->matched['sources'] as $source ) {
			$this->set_redirect_to_regex( $source );
		}
	}

	/**
	 * Set redirect to by replacing using regex.
	 *
	 * @param array $source Source to check.
	 */
	private function set_redirect_to_regex( $source ) {
		if ( 'regex' !== $source['comparison'] ) {
			return;
		}

		$pattern = DB::get_clean_pattern( $source['pattern'], $source['comparison'] );
		if ( Str::comparison( $pattern, $this->uri, $source['comparison'] ) ) {
			$this->redirect_to = preg_replace( $pattern, $this->redirect_to, $this->uri );
		}
	}

	/**
	 * Sets the wp_query to 404 when this is an object.
	 */
	private function set_404() {
		global $wp_query;

		$wp_query         = is_object( $wp_query ) ? $wp_query : new WP_Query();
		$wp_query->is_404 = true;
	}

	/**
	 * Get the object type for the current page.
	 *
	 * @return string object type name.
	 */
	private function get_current_object_type() {
		$hash   = [
			'WP_Post' => 'post',
			'WP_Term' => 'term',
			'WP_User' => 'user',
		];
		$object = get_queried_object();
		if ( ! $object ) {
			return 'none';
		}

		$object = get_class( $object );
		return isset( $hash[ $object ] ) ? $hash[ $object ] : 'none';
	}

	/**
	 * Get header code.
	 *    1. From matched redirection.
	 *    2. From optgeneral options.
	 *
	 * @return int
	 */
	private function get_header_code() {
		$header_code = isset( $this->matched['header_code'] ) ? $this->matched['header_code'] : Helper::get_settings( 'general.redirections_header_code' );
		return absint( $header_code );
	}

	/**
	 * Get redirect header.
	 *
	 * @return string
	 */
	private function get_redirect_header() {
		return true === $this->do_filter( 'redirection/add_redirect_header', true ) ? 'Rank Math' : 'WordPress';
	}

	/**
	 * Is AMP url.
	 *
	 * @return bool
	 */
	private function is_amp_endpoint() {
		return \function_exists( 'is_amp_endpoint' ) && \function_exists( 'amp_is_canonical' ) && is_amp_endpoint() && ! amp_is_canonical();
	}

	/**
	 * Gets the post id for the redirections' fallback.
	 *
	 * @return int|void
	 */
	private static function get_redirections_fallback_post_id() {
		$fall_back = Helper::get_settings( 'general.redirections_fallback' );

		if ( in_array( $fall_back, [ 'default', 'homepage' ], true ) ) {
			return (int) get_option( 'page_on_front' );
		}

		if ( Helper::get_settings( 'general.redirections_custom_url' ) ) {
			return url_to_postid( Helper::get_settings( 'general.redirections_custom_url' ) );
		}
	}

	/**
	 * Check if the fall_back redirect can run in the current contexts.
	 *
	 * @return bool
	 */
	private function can_run_fallback() {
		if ( ! is_404() ) {
			return false;
		}

		if (
			! $this->uri &&
			$this->query_string &&
			(
				Str::starts_with( 'p=', trim( $this->query_string ) ) ||
				Str::starts_with( 'page_id=', trim( $this->query_string ) )
			)
		) {
			$this->query_string = '';
			return true;
		}

		$wp_redirect_admin_locations = $this->do_filter( 'redirection/fallback_exclude_locations', [ 'login', 'admin', 'dashboard' ] );
		return $this->uri && ! in_array( $this->uri, $wp_redirect_admin_locations, true );
	}
}
PK     ¥ŠU]æ¡-U    /  includes/modules/redirections/class-metabox.phpnu „[µü¤        <?php
/**
 * The Redirections Metabox.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Metabox class.
 */
class Metabox {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/metabox/values', 'add_json_data' );
	}

	/**
	 * Add settings in the Advanced tab of the metabox.
	 *
	 * @param array $values Localized data.
	 */
	public function add_json_data( $values ) {
		if ( ! $this->can_add_setting( $values ) ) {
			return $values;
		}

		$object_type = $values['objectType'];
		$object_id   = (int) $values['objectID'];
		$url         = 'term' === $object_type ? get_term_link( $object_id ) : get_permalink( $object_id );
		if ( is_wp_error( $url ) ) {
			return $values;
		}

		$redirection = Cache::get_by_object_id( $object_id, $object_type );
		$redirection = $redirection ? DB::get_redirection_by_id( $redirection->redirection_id, 'active' ) : [
			'id'          => '',
			'url_to'      => '',
			'header_code' => Helper::get_settings( 'general.redirections_header_code' ),
		];

		if ( ! empty( $redirection['url_to'] ) && $url === $redirection['url_to'] ) {
			$redirection['url_to'] = '';
		}

		$values['assessor']['redirection']           = $redirection;
		$values['assessor']['autoCreateRedirection'] = Helper::get_settings( 'general.redirections_post_redirect' );

		return $values;
	}

	/**
	 * Save handler for metadata.
	 *
	 * @param CMB2 $cmb CMB2 instance.
	 */
	public function save_advanced_meta( $cmb ) {
		if ( $this->can_delete( $cmb->data_to_save ) ) {
			// Delete.
			if ( ! empty( $cmb->data_to_save['redirection_id'] ) ) {
				DB::delete( $cmb->data_to_save['redirection_id'] );
				Helper::add_notification( esc_html__( 'Redirection successfully deleted.', 'seo-by-rank-math' ), [ 'type' => 'info' ] );
			}
			return [
				'action'  => 'delete',
				'message' => esc_html__( 'Redirection successfully deleted.', 'seo-by-rank-math' ),
			];
		}

		// Check if no change bail!!
		if ( ! $this->can_update( $cmb->data_to_save ) ) {
			return [
				'action'  => 'cant_update',
				'message' => esc_html__( 'Can\'t update redirection.', 'seo-by-rank-math' ),
			];
		}

		$redirection = Redirection::from(
			[
				'id'          => isset( $cmb->data_to_save['redirection_id'] ) ? $cmb->data_to_save['redirection_id'] : '',
				'url_to'      => $cmb->data_to_save['redirection_url_to'],
				'sources'     => [
					[
						'pattern'    => $cmb->data_to_save['redirection_sources'],
						'comparison' => 'exact',
					],
				],
				'header_code' => $cmb->data_to_save['redirection_header_code'],
			]
		);
		$redirection->set_nocache( true );
		$redirection->save();

		$response = [
			'action'  => 'update',
			'message' => esc_html__( 'Redirection updated successfully.', 'seo-by-rank-math' ),
		];

		if ( $redirection->is_new() ) {
			Helper::add_notification( esc_html__( 'New redirection created.', 'seo-by-rank-math' ) );
			$response = [
				'id'      => $redirection->get_id(),
				'action'  => 'new',
				'message' => esc_html__( 'New redirection created.', 'seo-by-rank-math' ),
			];
		}

		Cache::add(
			[
				'from_url'       => $cmb->data_to_save['redirection_sources'],
				'redirection_id' => $redirection->get_id(),
				'object_id'      => $cmb->object_id,
				'object_type'    => \property_exists( $cmb, 'object_type' ) ? $cmb->object_type : 'post',
			]
		);

		return $response;
	}

	/**
	 * Whether to add Redirection Settings.
	 *
	 * @param array $values Localized data.
	 */
	private function can_add_setting( $values ) {
		if ( 'post' !== $values['objectType'] ) {
			return true;
		}

		$post = get_post( $values['objectID'] );
		if ( empty( $post ) || 'publish' !== $post->post_status ) {
			return false;
		}

		return true;
	}

	/**
	 * Check if can delete.
	 *
	 * @param array $values Values.
	 *
	 * @return boolean
	 */
	private function can_delete( $values ) {
		if ( ! isset( $values['rank_math_enable_redirection'] ) || 'off' === $values['rank_math_enable_redirection'] ) {
			return true;
		}

		if ( isset( $values['has_redirect'] ) && empty( $values['has_redirect'] ) ) {
			return true;
		}

		if ( false === in_array( (int) $values['redirection_header_code'], [ 410, 451 ], true ) ) {
			if ( empty( $values['redirection_url_to'] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Check if update is required.
	 *
	 * @param array $values Values.
	 *
	 * @return boolean
	 */
	private function can_update( $values ) {
		if ( did_action( 'rank_math/redirection/post_updated' ) ) {
			return false;
		}

		if ( empty( $values['redirection_id'] ) || in_array( (int) $values['redirection_header_code'], [ 410, 451 ], true ) ) {
			return true;
		}

		$redirection = DB::get_redirection_by_id( $values['redirection_id'] );

		return ! (
			$values['redirection_url_to'] === $redirection['url_to'] &&
			$values['redirection_header_code'] === $redirection['header_code']
		);
	}
}
PK     ¥ŠU]xK¶R%  %  -  includes/modules/redirections/class-cache.phpnu „[µü¤        <?php
/**
 * The Redirections Cache.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * Cache class.
 */
class Cache {

	/**
	 * Get query builder.
	 *
	 * @return Query_Builder
	 */
	private static function table() {
		return Database::table( 'rank_math_redirections_cache' );
	}

	/**
	 * Get redirection by object ID.
	 *
	 * @param  integer $object_id   Object ID to look for.
	 * @param  string  $object_type Current object type.
	 * @return object
	 */
	public static function get_by_object_id( $object_id, $object_type ) {
		return self::table()->where( 'object_id', $object_id )->where( 'object_type', $object_type )->one();
	}

	/**
	 * Get redirection by URL.
	 *
	 * @param  integer $url URL to look for.
	 * @return object
	 */
	public static function get_by_url( $url ) {
		return empty( $url ) ? false : self::table()->where( 'BINARY from_url', $url )->one();
	}

	/**
	 * Get redirections by object ID or URL.
	 *
	 * @param integer $object_id   Object ID to look for.
	 * @param string  $object_type Current object type.
	 * @param string  $url         URL to look for.
	 * @return array
	 */
	public static function get_by_object_id_or_url( $object_id, $object_type, $url ) {
		$query = self::table()->where( [ [ 'object_id', '=', $object_id ], [ 'object_type', '=', $object_type ] ], 'and' );

		if ( '' !== (string) $url ) {
			$query->orWhere( 'BINARY from_url', $url );
		}

		return $query->orderBy( 'object_id', 'desc' )->get();
	}

	/**
	 * Add a new record.
	 *
	 * @param array $args Values to insert.
	 */
	public static function add( $args = [] ) {
		if ( empty( $args ) ) {
			return false;
		}

		$args = wp_parse_args(
			$args,
			[
				'from_url'       => '',
				'redirection_id' => '',
				'object_id'      => '',
				'object_type'    => 'post',
				'is_redirected'  => '1',
			]
		);

		// Check if already exists.
		$exists = self::table()->where(
			[
				[ 'from_url', '=', $args['from_url'] ],
				[ 'redirection_id', '=', $args['redirection_id'] ],
				[ 'object_id', '=', $args['object_id'] ],
				[ 'object_type', '=', $args['object_type'] ],
				[ 'is_redirected', '=', $args['is_redirected'] ],
			],
			'and'
		)->one();

		if ( ! empty( $exists ) ) {
			return false;
		}

		return self::table()->insert( $args, [ '%s', '%d', '%d', '%s', '%d' ] );
	}

	/**
	 * Purge cache for a redirection.
	 *
	 * @param  integer $ids Redirection IDs to purge cache for.
	 * @return integer
	 */
	public static function purge( $ids ) {
		return self::table()->whereIn( 'redirection_id', (array) $ids )->delete();
	}

	/**
	 * Purge cache for an object.
	 *
	 * @param  integer $ids Object IDs to purge cache for.
	 * @param  string  $object_type Current object type.
	 * @return integer
	 */
	public static function purge_by_object_id( $ids, $object_type ) {
		return self::table()->whereIn( 'object_id', (array) $ids )
			->where( 'object_type', $object_type )->delete();
	}
}
PK     ¥ŠU]Ki0 _  _  .  includes/modules/redirections/class-export.phpnu „[µü¤        <?php
/**
 * Export Redirections in various formats.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Redirections
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Redirections;

use RankMath\KB;
use RankMath\Redirections\Import_Export;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Export class.
 */
class Export {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'admin_init', 'export' );
	}

	/**
	 * Export redirections.
	 */
	public function export() {
		$server = Param::get( 'export' );
		if ( ! $server || ! in_array( $server, [ 'apache', 'nginx' ], true ) ) {
			return;
		}

		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}

		check_admin_referer( 'rank-math-export-redirections' );

		$filename = "rank-math-redirections-{$server}-" . date_i18n( 'Y-m-d-H-i-s' ) . ( 'apache' === $server ? '.htaccess' : '.conf' );

		header( 'Content-Type: application/octet-stream' );
		header( 'Content-Disposition: attachment; filename=' . $filename );
		header( 'Cache-Control: no-cache, no-store, must-revalidate' );
		header( 'Pragma: no-cache' );
		header( 'Expires: 0' );

		$items = DB::get_redirections(
			[
				'limit'  => Import_Export::get()->limit,
				'status' => 'active',
			]
		);

		if ( 0 === $items['count'] ) {
			return;
		}

		$text[] = '# Created by Rank Math';
		$text[] = '# ' . date_i18n( 'r' );
		$text[] = '# Rank Math ' . trim( rank_math()->version ) . ' - ' . KB::get( 'seo-suite' );
		$text[] = '';

		$text = array_merge( $text, $this->$server( $items['redirections'] ) );

		$text[] = '';
		$text[] = '# Rank Math Redirections END';

		echo implode( PHP_EOL, $text ) . PHP_EOL; // phpcs:ignore
		exit;
	}

	/**
	 * Apache rewrite rules.
	 *
	 * @param array $items Array of DB items.
	 *
	 * @return string
	 */
	private function apache( $items ) {
		$output[] = '<IfModule mod_rewrite.c>';

		foreach ( $items as $item ) {
			$this->apache_item( $item, $output );
		}

		$output[] = '</IfModule>';

		return $output;
	}

	/**
	 * Format Apache single item.
	 *
	 * @param array $item   Single item.
	 * @param array $output Output array.
	 */
	private function apache_item( $item, &$output ) {
		$target  = '410' === $item['header_code'] ? '- [G]' : sprintf( '%s [R=%d,L]', $this->encode2nd( $item['url_to'] ), $item['header_code'] );
		$sources = maybe_unserialize( $item['sources'] );

		foreach ( $sources as $from ) {
			$url = $from['pattern'];
			if ( ( 'regex' !== $from['comparison'] && strpos( $url, '?' ) !== false ) || strpos( $url, '&' ) !== false ) {
				$url_parts = wp_parse_url( $url );
				$url       = $url_parts['path'];
				$output[]  = sprintf( 'RewriteCond %%{QUERY_STRING} ^%s$', preg_quote( $url_parts['query'], null ) );
			}

			// Get rewrite string.
			$output[] = sprintf( '%sRewriteRule %s %s', ( $this->is_valid_regex( $from ) ? '' : '# ' ), $this->get_comparison( $url, $from ), $target );
		}
	}

	/**
	 * Nginx rewrite rules.
	 *
	 * @param array $items Array of db items.
	 *
	 * @return string
	 */
	private function nginx( $items ) {
		$output[] = 'server {';

		foreach ( $items as $item ) {
			$this->nginx_item( $item, $output );
		}

		$output[] = '}';

		return $output;
	}

	/**
	 * Format nginx single item.
	 *
	 * @param array $item   Single item.
	 * @param array $output Output array.
	 */
	private function nginx_item( $item, &$output ) {
		$target      = $this->encode2nd( $item['url_to'] );
		$sources     = maybe_unserialize( $item['sources'] );
		$header_code = '301' === $item['header_code'] ? 'permanent' : 'redirect';

		foreach ( $sources as $from ) {
			if ( ! $this->is_valid_regex( $from ) ) {
				continue;
			}

			$output[] = $this->normalize_nginx_redirect( $this->get_comparison( $from['pattern'], $from ), $target, $header_code );
		}
	}

	/**
	 * Check if it's a valid pattern.
	 *
	 * So we don't break the site when it's inserted in the .htaccess.
	 *
	 * @param array $source Source array.
	 *
	 * @return string
	 */
	private function is_valid_regex( $source ) {
		if ( 'regex' == $source['comparison'] && @preg_match( '/' . $source['pattern'] . '/', null ) === false ) { // phpcs:ignore
			return false;
		}

		return true;
	}

	/**
	 * Normalize redirect data.
	 *
	 * @param string $source      Matching pattern.
	 * @param string $target      Target where to redirect.
	 * @param string $header_code Response header code.
	 *
	 * @return string
	 */
	private function normalize_nginx_redirect( $source, $target, $header_code ) {
		$source = preg_replace( "/[\r\n\t].*?$/s", '', $source );
		$source = preg_replace( '/[^\PC\s]/u', '', $source );
		$target = preg_replace( "/[\r\n\t].*?$/s", '', $target );
		$target = preg_replace( '/[^\PC\s]/u', '', $target );

		return "    rewrite {$source} {$target} {$header_code};";
	}

	/**
	 * Get comparison pattern.
	 *
	 * @param string $url  URL for comparison.
	 * @param array  $from Comparison type and URL.
	 *
	 * @return string
	 */
	private function get_comparison( $url, $from ) {
		$comparison = $from['comparison'];
		if ( 'regex' === $comparison ) {
			return $this->encode_regex( $from['pattern'] );
		}

		$hash = [
			'exact'    => '^{url}/?$',
			'contains' => '^(.*){url}(.*)$',
			'start'    => '^{url}',
			'end'      => '{url}/?$',
		];

		$url = preg_quote( $url, null );
		return isset( $hash[ $comparison ] ) ? str_replace( '{url}', $url, $hash[ $comparison ] ) : $url;
	}

	/**
	 * Encode URL.
	 *
	 * @param string $url URL to encode.
	 *
	 * @return string
	 */
	private function encode2nd( $url ) {
		$url = rawurlencode( $url );
		$url = str_replace( '%2F', '/', $url );
		$url = str_replace( '%3F', '?', $url );
		$url = str_replace( '%3A', ':', $url );
		$url = str_replace( '%3D', '=', $url );
		$url = str_replace( '%26', '&', $url );
		$url = str_replace( '%25', '%', $url );
		$url = str_replace( '+', '%20', $url );
		$url = str_replace( '%24', '$', $url );
		return $url;
	}

	/**
	 * Encode regex.
	 *
	 * @param string $url URL to encode.
	 *
	 * @return string
	 */
	private function encode_regex( $url ) {
		$url = preg_replace( '/[^a-zA-Z0-9\s](.*)[^a-zA-Z0-9\s][imsxeADSUXJu]*/', '$1', $url ); // Strip delimiters.
		$url = preg_replace( "/[\r\n\t].*?$/s", '', $url ); // Remove newlines.
		$url = preg_replace( '/[^\PC\s]/u', '', $url ); // Remove any invalid characters.
		$url = str_replace( ' ', '%20', $url ); // Make sure spaces are quoted.
		$url = str_replace( '%24', '$', $url );
		$url = ltrim( $url, '/' ); // No leading slash.
		$url = preg_replace( '@^\^/@', '^', $url ); // If pattern has a ^ at the start then ensure we don't have a slash immediately.

		return $url;
	}
}
PK     ¥ŠU]X¥E°œ  œ  .  includes/modules/woocommerce/class-wc-vars.phpnu „[µü¤        <?php
/**
 * Register additional variables for WooCommerce.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

defined( 'ABSPATH' ) || exit;

/**
 * WC Variables class.
 */
class WC_Vars extends Opengraph {

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'rank_math/vars/register_extra_replacements', 'register' );
	}

	/**
	 * Registers variable replacements for WooCommerce products.
	 */
	public function register() {
		rank_math_register_var_replacement(
			'wc_price',
			[
				'name'        => esc_html__( 'Product\'s price.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Product\'s price of the current product', 'seo-by-rank-math' ),
				'variable'    => 'wc_price',
				'example'     => $this->get_product_price(),
			],
			[ $this, 'get_product_price' ]
		);

		rank_math_register_var_replacement(
			'wc_sku',
			[
				'name'        => esc_html__( 'Product\'s SKU.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Product\'s SKU of the current product', 'seo-by-rank-math' ),
				'variable'    => 'wc_sku',
				'example'     => $this->get_product_sku(),
			],
			[ $this, 'get_product_sku' ]
		);

		rank_math_register_var_replacement(
			'wc_shortdesc',
			[
				'name'        => esc_html__( 'Product\'s short description.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Product\'s short description of the current product', 'seo-by-rank-math' ),
				'variable'    => 'wc_shortdesc',
				'example'     => $this->get_short_description(),
			],
			[ $this, 'get_short_description' ]
		);

		rank_math_register_var_replacement(
			'wc_brand',
			[
				'name'        => esc_html__( 'Product\'s brand.', 'seo-by-rank-math' ),
				'description' => esc_html__( 'Product\'s brand of the current product', 'seo-by-rank-math' ),
				'variable'    => 'wc_brand',
				'example'     => $this->get_product_brand(),
			],
			[ $this, 'get_product_brand' ]
		);
	}

	/**
	 * Retrieves the product price.
	 *
	 * @return string
	 */
	public function get_product_price() {
		$product = $this->get_product();
		if ( ! is_object( $product ) ) {
			return '';
		}

		if ( method_exists( $product, 'get_price' ) ) {
			return wp_strip_all_tags( wc_price( $product->get_price() ), true );
		}

		return '';
	}

	/**
	 * Retrieves the product SKU.
	 *
	 * @return string
	 */
	public function get_product_sku() {
		$product = $this->get_product();
		if ( ! is_object( $product ) ) {
			return '';
		}

		if ( method_exists( $product, 'get_sku' ) ) {
			return $product->get_sku();
		}

		return '';
	}

	/**
	 * Checks if product class has a short description method.
	 * Otherwise it returns the value of the post_excerpt from the post attribute.
	 *
	 * @param WC_Product $product The product.
	 *
	 * @return string
	 */
	public function get_short_description( $product = null ) {
		if ( empty( $product ) ) {
			$product = $this->get_product();
		}

		if ( ! is_object( $product ) ) {
			return '';
		}

		if ( method_exists( $product, 'get_short_description' ) ) {
			return $product->get_short_description();
		}

		return $product->post->post_excerpt;
	}

	/**
	 * Retrieves the product brand.
	 *
	 * @return string
	 */
	public function get_product_brand() {
		$product = $this->get_product();
		if ( ! is_object( $product ) ) {
			return '';
		}

		return $this->get_brands( $product->get_id() );
	}
}
PK     ¥ŠU]˜B¸¾c  c  5  includes/modules/woocommerce/assets/js/woocommerce.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,{a:r}),r},d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}};const t=jQuery;var r=e.n(t);const n=lodash,i=wp.hooks,o=wp.data;function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,u(n.key),n)}}function u(e){var t=function(e,t){if("object"!=c(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==c(t)?t:t+""}var s=new(function(){return e=function e(){var t,r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,n=null,(r=u(r="map"))in t?Object.defineProperty(t,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[r]=n},(t=[{key:"swap",value:function(e,t){var r=this;if(!(e=e||""))return"";var n=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return e.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(n,function(e){return r.replace(t,e)}).trim()}},{key:"replace",value:function(e,t){var n=t.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(n)){var i="term_description"===n?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():r()(i).val()}return n.includes("customfield(")?(n=n.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[n]:"":(e=e||this.getMap(),(n="seo_description"===(n="seo_title"===(n=n.includes("(")?n.split("(")[0]:n)?"title":n)?"excerpt":n)in e?e[n]:"")}},{key:"getMap",value:function(){var e=this;return null!==this.map||(this.map={},r().each(rankMath.variables,function(t,r){t=t.toLowerCase().replace(/%+/g,"").split("(")[0],e.map[t]=r.example})),this.map}},{key:"setVariable",value:function(e,t){null!==this.map?this.map[e]=t:void 0!==rankMath.variables[e]&&(rankMath.variables[e].example=t)}}])&&a(e.prototype,t),n&&a(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}());const l=function(){return!((0,n.isNil)(window.wp)||(0,n.isNil)(wp.data)||(0,n.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,n.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function f(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){d(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function d(e,t,r){return(t=h(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,h(n.key),n)}}function h(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=p(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}var b=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.excerpt=r()("#excerpt"),this.elemPrice=r()("#_sale_price"),this.elemRegPrice=r()("#_regular_price"),this._data={excerpt:!1},this.refreshWCPrice=this.refreshWCPrice.bind(this),this.events=this.events.bind(this),this.ensureIframe=this.ensureIframe.bind(this),this.events(),this.hooks()},(t=[{key:"hooks",value:function(){void 0!==this.excerpt&&((0,i.addFilter)("rank_math_content","rank-math",this.getContent.bind(this),11),(0,i.addFilter)("rank_math_dataCollector_data","rank-math",this.syncExcerpt.bind(this),11))}},{key:"getContent",value:function(e){return e+="undefined"!=typeof tinymce&&tinymce.activeEditor&&"excerpt"===tinymce.activeEditor.id?tinymce.activeEditor.getContent():this.excerpt.val()}},{key:"syncExcerpt",value:function(e){return(0,n.has)(e,"excerpt")&&!1!==this._data.excerpt?f(f({},e),{},{excerpt:this._data.excerpt}):e}},{key:"events",value:function(){var e=this;"undefined"!=typeof tinymce&&tinymce.activeEditor&&void 0!==tinymce.editors.excerpt&&tinymce.editors.excerpt.on("keyup change",(0,n.debounce)(function(){rankMathEditor.refresh("content")},500)),tinymce.on("AddEditor",this.ensureIframe),this.debounceWCPrice=(0,n.debounce)(this.refreshWCPrice,500),this.elemPrice.on("input",this.debounceWCPrice),this.elemRegPrice.on("input",this.debounceWCPrice),this.ensureIframe(),l()&&this.excerpt.on("input",(0,n.debounce)(function(t){e._data.excerpt=t.currentTarget.value,(0,o.dispatch)("rank-math").updateSerpDescription(e._data.excerpt)},500))}},{key:"refreshWCPrice",value:function(){s.setVariable("wc_price",this.getWooCommerceProductPrice()),(0,i.doAction)("rank_math_update_description_preview")}},{key:"getWooCommerceProductPrice",value:function(){var e=this.elemPrice.val()?this.elemPrice.val():this.elemRegPrice.val();return accounting.formatMoney(e,{symbol:woocommerce_admin_meta_boxes.currency_format_symbol,decimal:woocommerce_admin_meta_boxes.currency_format_decimal_sep,thousand:woocommerce_admin_meta_boxes.currency_format_thousand_sep,precision:woocommerce_admin_meta_boxes.currency_format_num_decimals,format:woocommerce_admin_meta_boxes.currency_format})}},{key:"ensureIframe",value:function(){var e=this;tinymce.editors&&!(0,n.isUndefined)(tinymce.editors.excerpt)&&tinymce.editors.excerpt.on("keyup change",(0,n.debounce)(function(){e._data.excerpt=tinymce.get("excerpt").getContent(),(0,o.dispatch)("rank-math").updateSerpDescription(e._data.excerpt)},500))}}])&&y(e.prototype,t),c&&y(e,c),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,c}();r()(function(){new b})}();PK     ¥ŠU]áo¹£  £  0  includes/modules/woocommerce/class-opengraph.phpnu „[µü¤        <?php
/**
 * Add Open Graph data for the WooCommerce module.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Traits\Hooker;
use RankMath\OpenGraph\Image as OpenGraph_Image;

defined( 'ABSPATH' ) || exit;

/**
 * WC Opengraph class.
 */
class Opengraph extends Sitemap {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function opengraph() {
		$this->filter( 'language_attributes', 'og_product_namespace', 11 );
		$this->filter( 'rank_math/opengraph/desc', 'og_desc_product_taxonomy' );
		$this->action( 'rank_math/opengraph/facebook', 'og_enhancement', 50 );
		$this->action( 'rank_math/opengraph/facebook/add_additional_images', 'set_opengraph_image' );
	}

	/**
	 * Add the OpenGraph namespace.
	 *
	 * @param string $output The original namespace.
	 *
	 * @return string
	 */
	public function og_product_namespace( $output ) {
		if ( is_singular( 'product' ) ) {
			$output = preg_replace( '/prefix="([^"]+)"/', 'prefix="$1 product: https://ogp.me/ns/product#"', $output );
		}

		return $output;
	}

	/**
	 * Make sure the OpenGraph description is put out.
	 *
	 * @param string $desc The current description, will be overwritten if we're on a product page.
	 *
	 * @return string
	 */
	public function og_desc_product_taxonomy( $desc ) {
		if ( is_product_taxonomy() ) {
			$term_desc = term_description();
			if ( ! empty( $term_desc ) ) {
				$desc = wp_strip_all_tags( $term_desc, true );
				$desc = strip_shortcodes( $desc );
			}
		}

		return $desc;
	}

	/**
	 * Adds the other product images to the OpenGraph output.
	 *
	 * @param OpenGraph $opengraph The current opengraph network object.
	 */
	public function og_enhancement( $opengraph ) {
		$product = $this->get_product();
		if ( ! is_object( $product ) ) {
			return;
		}

		$brand = WooCommerce::get_brands( get_the_ID() );
		if ( ! empty( $brand ) ) {
			$opengraph->tag( 'product:brand', $brand );
		}

		/**
		 * Allow developers to prevent the output of the price in the OpenGraph tags.
		 *
		 * @param bool unsigned Defaults to true.
		 */
		if ( $this->do_filter( 'woocommerce/og_price', ! $product->is_type( 'variable' ) ) ) {
			$opengraph->tag( 'product:price:amount', $product->get_price() );
			$opengraph->tag( 'product:price:currency', get_woocommerce_currency() );
		}

		if ( $product->is_in_stock() ) {
			$opengraph->tag( 'product:availability', 'instock' );
		}
	}

	/**
	 * Adds the opengraph images.
	 *
	 * @param OpenGraph_Image $opengraph_image The OpenGraph image to use.
	 */
	public function set_opengraph_image( OpenGraph_Image $opengraph_image ) {
		if ( ! function_exists( 'is_product_category' ) || is_product_category() ) {
			global $wp_query;
			$cat          = $wp_query->get_queried_object();
			$thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
			$opengraph_image->add_image_by_id( $thumbnail_id );
		}

		/**
		 * Passing a truthy value to the filter will effectively short-circuit the process of adding gallery images.
		 *
		 * @param bool $return Short-circuit return value. Either false or true.
		 */
		if ( ! $this->do_filter( 'woocommerce/opengraph/add_gallery_images', false ) ) {
			return;
		}

		$product = $this->get_product();
		if ( ! is_object( $product ) ) {
			return;
		}

		$this->set_image_ids( $product, $opengraph_image );
	}

	/**
	 * Set images for the given product.
	 *
	 * @param WC_Product      $product         The product to get the image ids for.
	 * @param OpenGraph_Image $opengraph_image The OpenGraph image to use.
	 */
	protected function set_image_ids( $product, $opengraph_image ) {
		$img_ids = method_exists( $product, 'get_gallery_image_ids' ) ?
			$product->get_gallery_image_ids() : $product->get_gallery_attachment_ids();

		if ( ! is_array( $img_ids ) || empty( $img_ids ) ) {
			return;
		}

		foreach ( $img_ids as $img_id ) {
			$opengraph_image->add_image_by_id( $img_id );
		}
	}
}
PK     ¥ŠU]`l{
  {
  ,  includes/modules/woocommerce/class-admin.phpnu „[µü¤        <?php
/**
 * The WooCommerce module - admin side functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Module\Base;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'woocommerce',
				'directory' => $directory,
			]
		);
		parent::__construct();

		// Permalink Manager.
		$this->filter( 'rank_math/settings/general', 'add_general_settings' );
		$this->filter( 'rank_math/flush_fields', 'flush_fields' );

		$this->action( 'rank_math/admin/editor_scripts', 'enqueue' );
	}

	/**
	 * Enqueue script to analyze product's short description.
	 */
	public function enqueue() {
		$screen = get_current_screen();
		if ( ! Admin_Helper::is_post_edit() || 'product' !== $screen->post_type || ! $this->do_filter( 'woocommerce/analyze_short_description', true ) ) {
			return;
		}

		wp_enqueue_script( 'rank-math-description-analysis', rank_math()->plugin_url() . 'includes/modules/woocommerce/assets/js/woocommerce.js', [ 'rank-math-editor' ], rank_math()->version, true );
	}

	/**
	 * Add module settings into general optional panel.
	 *
	 * @param array $tabs Array of option panel tabs.
	 *
	 * @return array
	 */
	public function add_general_settings( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'woocommerce' => [
					'icon'  => 'rm-icon rm-icon-cart',
					'title' => esc_html__( 'WooCommerce', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'  => sprintf( esc_html__( 'Choose how you want Rank Math to handle your WooCommerce SEO. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'woocommerce-settings', 'Options Panel WooCommerce Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => $this->directory . '/views/options-general.php',
					'json'  => [
						'brandTaxonomies' => Helper::get_object_taxonomies( 'product', 'choices', false ),
					],
				],
			],
			7
		);

		return $tabs;
	}

	/**
	 * Fields after updation of which we need to flush rewrite rules.
	 *
	 * @param array $fields Fields to flush rewrite rules on.
	 *
	 * @return array
	 */
	public function flush_fields( $fields ) {
		$fields[] = 'wc_remove_product_base';
		$fields[] = 'wc_remove_category_base';
		$fields[] = 'wc_remove_category_parent_slugs';

		return $fields;
	}
}
PK     ¥ŠU]ŒÛ      &  includes/modules/woocommerce/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]ŒÛ      ,  includes/modules/woocommerce/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]ßîi6  6  6  includes/modules/woocommerce/views/options-general.phpnu „[µü¤        <?php
/**
 * WooCommerce general settings.
 *
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'wc_remove_product_base',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Remove base', 'seo-by-rank-math' ),
		'desc'    => sprintf(
			/* translators: 1. Example text 2. Example text */
			esc_html__( 'Remove prefix like %1$s from product URL chosen at %2$s', 'seo-by-rank-math' ),
			'<code>/shop/*</code>, <code>/product/*</code>',
			'<br /><code>' . __( 'WordPress Dashboard > Settings > Permalinks > Product permalinks Example: default: /product/accessories/action-figures/acme/ - becomes: /accessories/action-figures/acme/', 'seo-by-rank-math' ) . '</code>'
		),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'wc_remove_category_base',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Remove category base', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Remove prefix from category URL.', 'seo-by-rank-math' ) .
			'<br><code>' . esc_html__( 'default: /product-category/accessories/action-figures/ - changed: /accessories/action-figures/', 'seo-by-rank-math' ) . '</code>',
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'wc_remove_category_parent_slugs',
		'type'    => 'toggle',
		'name'    => esc_html__( ' Remove parent slugs', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Remove parent slugs from category URL.', 'seo-by-rank-math' ) .
			'<br><code>' . esc_html__( 'default: /product-category/accessories/action-figures/ - changed: /product-category/action-figures/', 'seo-by-rank-math' ) . '</code>',
		'default' => 'off',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'wc_remove_generator',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Remove Generator Tag', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Remove WooCommerce generator tag from the source code.', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'remove_shop_snippet_data',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Remove Schema Markup on Shop Archives', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Remove Schema Markup Data from WooCommerce Shop archive pages.', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'product_brand',
		'type'    => 'select',
		'name'    => esc_html__( 'Brand', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Select Product Brand Taxonomy to use in Schema.org & OpenGraph markup.', 'seo-by-rank-math' ),
		'options' => Helper::get_object_taxonomies( 'product', 'choices', false ),
	]
);
PK     ¥ŠU]Z=Bä@  @  :  includes/modules/woocommerce/class-product-redirection.phpnu „[µü¤        <?php
/**
 * The WooCommerce module's product redirection features.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Sitepress;
use RankMath\Helpers\Param;
use RankMath\Helpers\Str;
use RankMath\Redirections\Redirection;

defined( 'ABSPATH' ) || exit;

/**
 * WooCommerce class.
 */
class Product_Redirection {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( Helper::is_module_active( 'redirections' ) ) {
			$this->filter( 'rank_math/redirection/pre_search', 'pre_redirection', 10, 3 );
			return;
		}

		$this->action( 'wp', 'redirect' );
	}

	/**
	 * Pre-filter the redirection.
	 *
	 * @param string $check Check.
	 *
	 * @return string|array
	 */
	public function pre_redirection( $check ) {
		if ( $new_link = $this->get_redirection_url() ) { // phpcs:ignore
			return [
				'url_to'      => $new_link,
				'header_code' => 301,
			];
		}

		return $check;
	}

	/**
	 * Redirect product with base to the new link.
	 */
	public function redirect() {
		if ( $link = $this->get_redirection_url() ) { // phpcs:ignore
			Helper::redirect( $link, 301 );
			exit;
		}
	}

	/**
	 * Get Product URL.
	 *
	 * @return string Modified URL
	 */
	private function get_redirection_url() {
		if ( ! $this->can_redirect() ) {
			return false;
		}

		$url                 = $this->get_source_url();
		$is_product          = is_product();
		$permalink_structure = wc_get_permalink_structure();
		$base                = $is_product ? $permalink_structure['product_base'] : $permalink_structure['category_base'];

		$base     = explode( '/', ltrim( $base, '/' ) );
		$new_link = $url;

		// Early Bail if new_link length is less then the base.
		if ( count( explode( '/', $new_link ) ) <= count( $base ) ) {
			return false;
		}

		// On Single product page redirect base with shop and product.
		if ( $is_product ) {
			$base[]   = 'product';
			$base[]   = 'shop';
			$new_link = $this->remove_base_from_url( $new_link );
		}

		foreach ( array_unique( $base ) as $remove ) {
			if ( '%product_cat%' === $remove ) {
				continue;
			}

			$new_link = ! Str::starts_with( '/', $new_link ) ? '/' . $new_link : $new_link;
			$new_link = preg_replace( "#/{$remove}/#i", '', $new_link, 1 );
		}

		$new_link = implode( '/', array_map( 'rawurlencode', explode( '/', ltrim( $new_link, '/' ) ) ) ); // encode everything but slashes.

		return $new_link === $this->strip_ignored_parts( $url ) ? false : trailingslashit( home_url( strtolower( $new_link ) ) );
	}

	/**
	 * Remove all bases from the product link.
	 *
	 * @param  string $link Product link.
	 * @return string Modified URL
	 */
	private function remove_base_from_url( $link ) {
		if ( is_feed() ) {
			return $link;
		}

		if ( Sitepress::get()->is_active() ) {
			global $sitepress_settings;

			// Early bail if auto-translation is enabled in WPML.
			if (
				isset( $sitepress_settings['custom_posts_sync_option'] ) &&
				isset( $sitepress_settings['custom_posts_sync_option']['product'] ) &&
				0 !== (int) $sitepress_settings['custom_posts_sync_option']['product']
			) {
				return $link;
			}
		}

		$link = trim( str_replace( Helper::get_home_url(), '', get_permalink() ), '/' );

		return $link;
	}

	/**
	 * Get source URL.
	 *
	 * @return string
	 */
	private function get_source_url() {
		global $wp;
		$url = defined( 'TRP_PLUGIN_DIR' ) ? $wp->request : Param::server( 'REQUEST_URI' );
		$url = str_replace( home_url( '/' ), '', $url );
		$url = urldecode( $url );
		$url = trim( Redirection::strip_subdirectory( $url ), '/' );

		$url = explode( '?', $url );
		$url = trim( $url[0], '/' );

		if ( $this->is_amp_endpoint() ) {
			$url = \str_replace( '/' . \amp_get_slug(), '', $url );
		}

		return $url;
	}

	/**
	 * Is AMP url.
	 *
	 * @return bool
	 */
	private function is_amp_endpoint() {
		return \function_exists( 'is_amp_endpoint' ) && \function_exists( 'amp_is_canonical' ) && is_amp_endpoint() && ! amp_is_canonical();
	}

	/**
	 * Remove unneeded parts from the URI.
	 *
	 * @param string $uri Original URI.
	 *
	 * @return string
	 */
	private function strip_ignored_parts( $uri ) {
		$ignore_url_parts = [
			'#/comment-page-([0-9]{1,})$#',
		];

		$ignore_url_parts = $this->do_filter( 'woocommerce/product_redirection_ignore_url_parts', $ignore_url_parts );
		foreach ( $ignore_url_parts as $pattern ) {
			$uri = preg_replace( $pattern, '', $uri );
		}

		return implode( '/', array_map( 'rawurlencode', explode( '/', $uri ) ) );
	}

	/**
	 * Can redirect to the new product link.
	 *
	 * @return bool
	 */
	private function can_redirect() {
		global $wp_query;

		if (
			$this->do_filter( 'woocommerce/product_redirection', true ) &&
			! isset( $_GET['elementor-preview'] ) && // phpcs:ignore
			! isset( $wp_query->query_vars['schema-preview'] ) &&
			( ( Helper::get_settings( 'general.wc_remove_product_base' ) && is_product() ) ||
			( Helper::get_settings( 'general.wc_remove_category_base' ) && is_product_category() ) )
		) {
			return true;
		}

		return false;
	}
}
PK     ¥ŠU]©¦áxÅ  Å  +  includes/modules/woocommerce/class-base.phpnu „[µü¤        <?php
/**
 * The Module Base Class
 *
 * ALl the classes inherit from this class
 *
 * @since      1.0.238
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Helper;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Base class.
 *
 * This is the parent class for all WooCommerce-related functionality
 * in the RankMath plugin. It contains common methods and utilities
 * that are shared across the WooCommerce module.
 */
class Base {

	/**
	 * Holds the product object.
	 *
	 * @var WC_Product
	 */
	private $product = null;

	/**
	 * Returns the product object when the current page is the product page.
	 *
	 * @return null|WC_Product
	 */
	public function get_product() {
		if ( ! is_null( $this->product ) ) {
			return $this->product;
		}

		$product_id    = Param::get( 'post', get_queried_object_id(), FILTER_VALIDATE_INT );
		$this->product = (
			! function_exists( 'wc_get_product' ) ||
			! $product_id ||
			(
				! is_admin() &&
				! is_singular( 'product' )
			)
		) ? null : wc_get_product( $product_id );

		return $this->product;
	}

	/**
	 * Returns the array of brand taxonomy.
	 *
	 * @param int $product_id The id to get the product brands for.
	 *
	 * @return bool|array
	 */
	public static function get_brands( $product_id ) {
		$brand    = '';
		$taxonomy = Helper::get_settings( 'general.product_brand' );
		if ( $taxonomy && taxonomy_exists( $taxonomy ) ) {
			$brands = get_the_terms( $product_id, $taxonomy );
			$brand  = is_wp_error( $brands ) || empty( $brands[0] ) ? '' : $brands[0]->name;
		}

		return apply_filters( 'rank_math/woocommerce/product_brand', $brand );
	}
}
PK     ¥ŠU]Úu’u  u  8  includes/modules/woocommerce/class-permalink-watcher.phpnu „[µü¤        <?php
/**
 * The product permalink watcher class.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Sitepress;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Permalink_Watcher class.
 */
class Permalink_Watcher {

	use Hooker;

	/**
	 * Hold product base.
	 *
	 * @var string
	 */
	private $product_base;

	/**
	 * Hold product categories.
	 *
	 * @var array
	 */
	private $categories;

	/**
	 * Remove product base.
	 *
	 * @var bool
	 */
	private $remove_product_base;

	/**
	 * Remove category base.
	 *
	 * @var bool
	 */
	private $remove_category_base;

	/**
	 * Remove parent slugs.
	 *
	 * @var bool
	 */
	private $remove_parent_slugs;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->remove_product_base  = Helper::get_settings( 'general.wc_remove_product_base' );
		$this->remove_category_base = Helper::get_settings( 'general.wc_remove_category_base' );
		$this->remove_parent_slugs  = Helper::get_settings( 'general.wc_remove_category_parent_slugs' );

		if ( $this->remove_product_base && ! (bool) Param::get( 'elementor-preview' ) ) {
			$this->filter( 'post_type_link', 'post_type_link', 1, 2 );
		}

		if ( $this->remove_category_base || $this->remove_parent_slugs ) {
			$this->action( 'created_product_cat', 'flush_rules' );
			$this->action( 'delete_product_cat', 'flush_rules' );
			$this->action( 'edited_product_cat', 'flush_rules' );

			$this->filter( 'term_link', 'term_link', 0, 3 );
			$this->filter( 'rewrite_rules_array', 'add_rewrite_rules', 99 );
		}
	}

	/**
	 * Flush rewrite rules (soft flush).
	 *
	 * @return void
	 */
	public function flush_rules() {
		flush_rewrite_rules( false );
	}

	/**
	 * Replace product permalink according to settings.
	 *
	 * @param string  $permalink The existing permalink URL.
	 * @param WP_Post $post WP_Post object.
	 *
	 * @return string
	 */
	public function post_type_link( $permalink, $post ) {
		if ( $this->can_change_link( 'product', $post->post_type ) ) {
			return $permalink;
		}

		return str_replace( $this->get_product_base(), '/', $permalink );
	}

	/**
	 * Replace category permalink according to settings.
	 *
	 * @param string $link     Term link URL.
	 * @param object $term     Term object.
	 * @param string $taxonomy Taxonomy slug.
	 *
	 * @return string
	 */
	public function term_link( $link, $term, $taxonomy ) {
		if ( $this->can_change_link( 'product_cat', $taxonomy ) ) {
			return $link;
		}

		$permalink_structure  = wc_get_permalink_structure();
		$category_base        = trailingslashit( $permalink_structure['category_rewrite_slug'] );
		$is_language_switcher = ( class_exists( 'Sitepress' ) && strpos( $link, 'lang=' ) );

		if ( $this->remove_category_base ) {
			$link          = str_replace( $category_base, '', $link );
			$category_base = '';
		}

		if ( $this->remove_parent_slugs && ! $is_language_switcher ) {
			$link = home_url( user_trailingslashit( $category_base . $term->slug ) );
		}

		return $link;
	}

	/**
	 * Add rewrite rules.
	 *
	 * @param array $rules The compiled array of rewrite rules.
	 *
	 * @return array
	 */
	public function add_rewrite_rules( $rules ) {
		global $wp_rewrite;

		wp_cache_flush();

		/**
		 * Remove WPML filters while getting terms, to get all languages
		 */
		Sitepress::get()->remove_term_filters();

		$feed = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';

		$permalink_structure = wc_get_permalink_structure();
		$category_base       = $this->remove_category_base ? '' : $permalink_structure['category_rewrite_slug'];
		$use_parent_slug     = Str::contains( '%product_cat%', $permalink_structure['product_rewrite_slug'] );

		$product_rules  = [];
		$category_rules = [];
		foreach ( $this->get_categories() as $category ) {
			$cat_path = $this->get_category_fullpath( $category );
			$cat_slug = $category_base . ( $this->remove_parent_slugs ? $category['slug'] : $cat_path );
			$cat_slug = urldecode( $cat_slug );

			$category_rules[ "{$cat_slug}/?\$" ]                                  = 'index.php?product_cat=' . $category['slug'];
			$category_rules[ "{$cat_slug}/embed/?\$" ]                            = 'index.php?product_cat=' . $category['slug'] . '&embed=true';
			$category_rules[ "{$cat_slug}/{$wp_rewrite->feed_base}/{$feed}/?\$" ] = 'index.php?product_cat=' . $category['slug'] . '&feed=$matches[1]';
			$category_rules[ "{$cat_slug}/{$feed}/?\$" ]                          = 'index.php?product_cat=' . $category['slug'] . '&feed=$matches[1]';
			$category_rules[ "{$cat_slug}/{$wp_rewrite->pagination_base}/?([0-9]{1,})/?\$" ] = 'index.php?product_cat=' . $category['slug'] . '&paged=$matches[1]';

			if ( $this->remove_product_base && $use_parent_slug ) {
				$cat_path                                   = urldecode( $cat_path );
				$product_rules[ $cat_path . '/([^/]+)/?$' ] = 'index.php?product=$matches[1]';
				$product_rules[ $cat_path . '/([^/]+)/' . $wp_rewrite->comments_pagination_base . '-([0-9]{1,})/?$' ] = 'index.php?product=$matches[1]&cpage=$matches[2]';
			}
		}

		/**
		 * Register WPML filters back
		 */
		Sitepress::get()->restore_term_filters();

		$rules = empty( $rules ) ? [] : $rules;
		return $category_rules + $product_rules + $rules;
	}

	/**
	 * Returns categories array.
	 *
	 * ['category id' => ['slug' => 'category slug', 'parent' => 'parent category id']]
	 *
	 * @return array
	 */
	private function get_categories() {
		if ( is_null( $this->categories ) ) {
			$categories = get_categories(
				[
					'taxonomy'   => 'product_cat',
					'hide_empty' => false,
				]
			);

			$slugs = [];
			foreach ( $categories as $category ) {
				$slugs[ $category->term_id ] = [
					'parent' => $category->parent,
					'slug'   => $category->slug,
				];
			}

			$this->categories = $slugs;
		}

		return $this->categories;
	}

	/**
	 * Recursively builds category full path.
	 *
	 * @param object $category Term object.
	 *
	 * @return string
	 */
	private function get_category_fullpath( $category ) {
		$categories = $this->get_categories();
		$parent     = $category['parent'];

		if ( $parent > 0 && array_key_exists( $parent, $categories ) ) {
			return $this->get_category_fullpath( $categories[ $parent ] ) . '/' . $category['slug'];
		}

		return $category['slug'];
	}

	/**
	 * Get product base.
	 *
	 * @return string
	 */
	private function get_product_base() {
		if ( is_null( $this->product_base ) ) {
			$permalink_structure = wc_get_permalink_structure();
			$this->product_base  = $permalink_structure['product_rewrite_slug'];
			if ( strpos( $this->product_base, '%product_cat%' ) !== false ) {
				$this->product_base = str_replace( '%product_cat%', '', $this->product_base );
			}
			$this->product_base = '/' . trim( $this->product_base, '/' ) . '/';
		}

		return $this->product_base;
	}

	/**
	 * Check if the link can be changed or not.
	 *
	 * @param string $check   Check string.
	 * @param string $against Against this.
	 *
	 * @return bool
	 */
	private function can_change_link( $check, $against ) {
		return $check !== $against || ! get_option( 'permalink_structure' );
	}
}
PK     ¥ŠU]àHÛkS  S  .  includes/modules/woocommerce/class-sitemap.phpnu „[µü¤        <?php
/**
 * WooCommerce product sitemaps adjustments.
 *
 * @since      1.0.32
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Attachment;

defined( 'ABSPATH' ) || exit;

/**
 * WC Sitemap class.
 */
class Sitemap extends Base {

	use Hooker;

	/**
	 * Register hooks.
	 */
	public function sitemap() {
		$this->filter( 'rank_math/sitemap/exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );
		$this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_taxonomies', 10, 2 );
		$this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_post_type_archive_link', 10, 2 );
		$this->filter( 'rank_math/sitemap/urlimages', 'add_product_images_to_xml_sitemap', 10, 2 );
	}

	/**
	 * Make sure product variations and shop coupons are not included in the XML sitemap.
	 *
	 * @param bool   $value     Whether or not to include this post type in the XML sitemap.
	 * @param string $post_type The post type of the post.
	 *
	 * @return bool
	 */
	public function sitemap_exclude_post_type( $value, $post_type ) {
		if ( in_array( $post_type, [ 'product_variation', 'shop_coupon' ], true ) ) {
			return true;
		}

		return $value;
	}

	/**
	 * Make sure product attribute taxonomies are not included in the XML sitemap.
	 *
	 * @param bool   $value    Whether or not to include this post type in the XML sitemap.
	 * @param string $taxonomy The taxonomy to check against.
	 *
	 * @return bool
	 */
	public function sitemap_taxonomies( $value, $taxonomy ) {
		if ( in_array( $taxonomy, [ 'product_type', 'product_shipping_class', 'shop_order_status' ], true ) ) {
			return true;
		}

		if ( Str::starts_with( 'pa_', $taxonomy ) ) {
			return true;
		}

		return $value;
	}

	/**
	 * Filters the archive link on the product sitemap.
	 *
	 * @param string $link      The archive link.
	 * @param string $post_type The post type to check against.
	 *
	 * @return bool
	 */
	public function sitemap_post_type_archive_link( $link, $post_type ) {
		if ( 'product' !== $post_type || ! function_exists( 'wc_get_page_id' ) ) {
			return $link;
		}

		$shop_page_id = wc_get_page_id( 'shop' );
		$home_page_id = (int) get_option( 'page_on_front' );
		if ( 1 > $shop_page_id || 'publish' !== get_post_status( $shop_page_id ) || $home_page_id === $shop_page_id ) {
			return false;
		}

		$robots = Helper::get_post_meta( 'robots', $shop_page_id );
		if ( ! empty( $robots ) && is_array( $robots ) && in_array( 'noindex', $robots, true ) ) {
			return false;
		}

		return $link;
	}

	/**
	 * Add the product gallery images to the XML sitemap.
	 *
	 * @param array $images  The array of images for the post.
	 * @param int   $post_id The ID of the post object.
	 *
	 * @return array
	 */
	public function add_product_images_to_xml_sitemap( $images, $post_id ) {
		if ( metadata_exists( 'post', $post_id, '_product_image_gallery' ) ) {
			$product_gallery = get_post_meta( $post_id, '_product_image_gallery', true );
			$attachments     = array_filter( explode( ',', $product_gallery ) );
			foreach ( $attachments as $attachment_id ) {
				$image_src = wp_get_attachment_image_src( $attachment_id, 'full' );
				if ( empty( $image_src ) ) {
					continue;
				}

				$image    = [
					'src'   => $this->do_filter( 'sitemap/xml_img_src', $image_src[0], $post_id ),
					'title' => get_the_title( $attachment_id ),
					'alt'   => Attachment::get_alt_tag( $attachment_id ),
				];
				$images[] = $image;

				unset( $image, $image_src );
			}
		}

		return $images;
	}
}
PK     ¥ŠU]?.2­  ­  2  includes/modules/woocommerce/class-woocommerce.phpnu „[µü¤        <?php
/**
 * The WooCommerce module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\WooCommerce
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\WooCommerce;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * WooCommerce class.
 */
class WooCommerce extends WC_Vars {

	use Hooker;

	/**
	 * Remove product base.
	 *
	 * @var bool
	 */
	private $remove_product_base;

	/**
	 * Remove category base.
	 *
	 * @var bool
	 */
	private $remove_category_base;

	/**
	 * Remove parent slugs.
	 *
	 * @var bool
	 */
	private $remove_parent_slugs;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->remove_product_base  = Helper::get_settings( 'general.wc_remove_product_base' );
		$this->remove_category_base = Helper::get_settings( 'general.wc_remove_category_base' );
		$this->remove_parent_slugs  = Helper::get_settings( 'general.wc_remove_category_parent_slugs' );

		if ( is_admin() ) {
			new Admin();
		}

		$this->integrations();

		if ( $this->should_redirect() ) {
			new Product_Redirection();
			new Permalink_Watcher();
		}

		parent::__construct();

		$this->filter( 'rank_math/recalculate_score/data', 'recalculate_score_data', 10, 2 );
	}

	/**
	 * Check if we should redirect product permalinks.
	 *
	 * @return bool
	 */
	public function should_redirect() {
		$remove_base = $this->remove_product_base || $this->remove_category_base || $this->remove_parent_slugs;
		if ( ! $remove_base ) {
			return false;
		}

		if ( ! function_exists( 'affiliate_wp' ) || ! isset( $_SERVER['REQUEST_URI'] ) ) {
			return $remove_base;
		}

		$referral_var = affiliate_wp()->tracking->get_referral_var();
		if ( strpos( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/' . $referral_var . '/' ) === false ) {
			return $remove_base;
		}

		return false;
	}

	/**
	 * Initialize integrations.
	 */
	public function integrations() {
		if ( is_admin() ) {
			return;
		}

		// Permalink Manager.
		if ( $this->remove_product_base ) {
			$this->action( 'request', 'request', 11 );
		}

		if ( Helper::get_settings( 'general.wc_remove_generator' ) ) {
			remove_action( 'get_the_generator_html', 'wc_generator_tag', 10 );
			remove_action( 'get_the_generator_xhtml', 'wc_generator_tag', 10 );
		}

		$this->sitemap();
		$this->opengraph();
		$this->filter( 'rank_math/frontend/description', 'metadesc' );
		$this->filter( 'rank_math/frontend/robots', 'robots' );
	}

	/**
	 * Replace request if product was found.
	 *
	 * @param array $request Current request.
	 *
	 * @return array
	 */
	public function request( $request ) {
		global $wp, $wpdb;
		$url = $wp->request;

		if ( empty( $url ) ) {
			return $request;
		}

		$replace = [];
		$url     = explode( '/', $url );
		$slug    = array_pop( $url );

		if ( 'feed' === $slug ) {
			$replace['feed'] = $slug;
			$slug            = array_pop( $url );
		}

		if ( 'amp' === $slug ) {
			$replace['amp'] = $slug;
			$slug           = array_pop( $url );
		}

		if ( ! empty( $slug ) && 0 === strpos( $slug, 'comment-page-' ) ) {
			$replace['cpage'] = substr( $slug, strlen( 'comment-page-' ) );
			$slug             = array_pop( $url );
		}

		if ( ! empty( $slug ) && 0 === strpos( $slug, 'schema-preview' ) ) {
			$replace['schema-preview'] = '';
			$slug                      = array_pop( $url );
		}

		$query = "SELECT COUNT(ID) as count_id FROM {$wpdb->posts} WHERE post_name = %s AND post_type = %s";
		$num   = intval( DB_Helper::get_var( $wpdb->prepare( $query, [ $slug, 'product' ] ) ) );
		if ( $num > 0 ) {
			$replace['page']      = '';
			$replace['name']      = $slug;
			$replace['product']   = $slug;
			$replace['post_type'] = 'product';

			return $replace;
		}

		return $request;
	}

	/**
	 * Change robots for WooCommerce pages according to the settings.
	 *
	 * @param array $robots Array of robots to sanitize.
	 *
	 * @return array Modified robots.
	 */
	public function robots( $robots ) {

		// Early Bail if current page is WooCommerce OnePage Checkout.
		if ( function_exists( 'is_wcopc_checkout' ) && is_wcopc_checkout() ) {
			return $robots;
		}

		if ( is_cart() || is_checkout() || is_account_page() ) {
			remove_action( 'wp_head', 'wc_page_noindex' );
			return [
				'index'  => 'noindex',
				'follow' => 'follow',
			];
		}

		return $robots;
	}

	/**
	 * Returns the meta description. Checks which value should be used when the given meta description is empty.
	 *
	 * It will use the short_description if that one is set. Otherwise it will use the full
	 * product description limited to 156 characters. If everything is empty, it will return an empty string.
	 *
	 * @param string $metadesc The meta description to check.
	 *
	 * @return string The meta description.
	 */
	public function metadesc( $metadesc ) {
		if ( '' !== $metadesc || ! is_singular( 'product' ) ) {
			return $metadesc;
		}

		$product = $this->get_product_by_id( get_the_id() );
		if ( ! is_object( $product ) ) {
			return '';
		}

		$short_desc = $this->get_short_description( $product );
		if ( '' !== $short_desc ) {
			return $short_desc;
		}

		$long_desc = $this->get_long_description( $product );
		return '' !== $long_desc ? Str::truncate( $long_desc, 156 ) : '';
	}

	/**
	 * Returns the product for given product_id.
	 *
	 * @param int $product_id The id to get the product for.
	 *
	 * @return null|WC_Product
	 */
	protected function get_product_by_id( $product_id ) {
		if ( function_exists( 'wc_get_product' ) ) {
			return wc_get_product( $product_id );
		}

		if ( function_exists( 'get_product' ) ) {
			return get_product( $product_id );
		}

		return null;
	}

	/**
	 * Checks if product class has a description method.
	 * Otherwise it returns the value of the post_content.
	 *
	 * @param WC_Product $product The product.
	 *
	 * @return string
	 */
	protected function get_long_description( $product ) {
		if ( method_exists( $product, 'get_description' ) ) {
			return $product->get_description();
		}

		return $product->post->post_content;
	}

	/**
	 * Update the values used for recalculating SEO score for products.
	 *
	 * @param array $values The values to be sent to the analyzer.
	 * @param int   $post_id The post ID.
	 *
	 * @return array
	 */
	public function recalculate_score_data( $values, $post_id ) {
		if ( 'product' === get_post_type( $post_id ) ) {
			$values['content'] = $values['content'] . ' ' . get_the_excerpt( $post_id );
		}

		return $values;
	}
}
PK     ¥ŠU]všÔI  I  ,  includes/modules/links/Admin/class-admin.phpnu „[µü¤        <?php
/**
 * The Links module admin page registration.
 *
 * @since      1.0.266
 * @package    RankMath
 * @subpackage RankMath\Links\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Links\Admin;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Page;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->filter( 'rank_math/admin_pages', 'add_links_page' );
		$this->action( 'init', 'register_admin_page' );
	}

	/**
	 * Add Links page to Rank Math admin menu.
	 *
	 * @param array $pages Existing pages.
	 * @return array
	 */
	public function add_links_page( $pages ) {
		$pages[] = 'rank-math_page_rank-math-links-page';
		return $pages;
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		new Page(
			'rank-math-links-page',
			esc_html__( 'Link Genius', 'seo-by-rank-math' ),
			[
				'position'   => 4,
				'parent'     => 'rank-math',
				'menu_title' => esc_html__( 'Link Genius', 'seo-by-rank-math' ),
				'capability' => 'rank_math_link_builder',
				'render'     => function () {
					echo '<div id="rank-math-links-page-container"></div>';
				},
				'classes'    => [ 'rank-math-page' ],
				'assets'     => [
					'styles'  => [
						'rank-math-common' => '',
					],
					'scripts' => [
						'lodash'               => '',
						'wp-components'        => '',
						'wp-element'           => '',
						'rank-math-components' => '',
						'rank-math-links-page' => RANK_MATH_URL . 'includes/modules/links/assets/js/links-page.js',
					],
					'json'    => [
						'links' => [
							'postTypes' => Helper::choices_post_types(),
							'imagesUrl' => RANK_MATH_URL . 'includes/modules/links/assets/images/',
						],
					],
				],
			]
		);

		/**
		 * Fires after the Links admin page is registered.
		 *
		 * PRO plugin (Link Genius) hooks here to dequeue the Free bundle
		 * and enqueue its own full-featured React app instead.
		 *
		 * @since 1.0.266
		 */
		do_action( 'rank_math/links/admin_page_registered' );
	}
}
PK     ¥ŠU]Ügìn*=  *=  4  includes/modules/links/assets/images/bulk-update.jpgnu „[µü¤        ÿØÿà JFIF  H H  ÿâØICC_PROFILE   È    0  mntrRGB XYZ à        acsp                             öÖ     Ó-                                                   	desc   ð   $rXYZ     gXYZ  (   bXYZ  <   wtpt  P   rTRC  d   (gTRC  d   (bTRC  d   (cprt  Œ   <mluc          enUS       s R G BXYZ       o¢  8õ  �XYZ       b™  ·…  ÚXYZ       $   „  ¶ÏXYZ       öÖ     Ó-para        ff  ò§  Y  Ð  
[        mluc          enUS        G o o g l e   I n c .   2 0 1 6ÿÛ C P7<F<2PFAFZUP_xÈ‚xnnxõ¯¹‘ÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ CUZZxixë‚‚ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ VJ" ÿÄ              ÿÄ !     !1AQ2"BÿÄ              ÿÄ               ÿÚ   ? õ©Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((�&‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š           	SzÀhcÞðÍPP                                                                                 @Q                                                                                               MTÐ@qS         žº‡}LyûîêÈ–µ×Êç½ë#XÊúÕÎõ�9ù¹ù+Ê¼õ¹¦.½¹ªãñ÷]sXi@                                                                             @T  UeA@                                                                                 U@        5SA ÅLP       7UŽ÷è~^œZïn²Ü`@o8¬õ“P@k�šôñ·G‹Y«�1Yh                                                                           EM  gz€ÐÆvÞ  .*(                                                                             ‚  nÆ}ƒbfÕP„P       5SA ÅLP       Ëäüusù?åßÔ^¿Q¶?AG~6ãŸËú¿§ÉúŠÀ
ƒ¯Å®Nß%Xôf•30ÑJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJB   :ÆÜûÐgúëÏã—.¸
 
‹ ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! ¥! E@ zÊç×Ó§Zç»A¯�ÑÏ‡@ ÅLP       5SA ÅLP       ž²ãI ò|™5‡£åáçÜšÜf€*.lMÚ  }ëÓñc�ÇÍ×§œ˜ÍXÒƒ-                                                                           	ª€€ ÎóZŸ-`  *¢€                                                                            "4€€nTñ� ™‘@ P        ÕM 1@        ž²¸|ŸÒÎå]=ÍÄzºøë–üK¬ã�éþZgÄºŽmñÆîºóñ:sÌKWŽ#b²Ð                                                                             #H, "Š                                                                                ˆÒ
           MTÐ@qS        u=`43éh !�)AD (                                                                         	»

 
%O@Ð””B‚‰J
%P                                                                           Ð™ (€(”          ÕM 1@       ïñŒtë*g Æéu­àð¨Ïµõ§…Îs~“7í©ôÏ�¨§ZÏ­kÉáQ�ëí¯[�^z®Ž|ó5Ñ                                                                       Ï­û?®Rh'£Ñå|ƒ>´ÍkÉäÑ�&áœƒ^“Öžus�O_m_¦|}·>�šž—yÔÞ@ô›Òç'�Lèô¾àKÏWSÊóÌÐo                                                                        \ºß·V|ýƒ»‹ëZÞSyÎ�KœžA=×xLàkÏU7…ç˜¨        	ªš .*b€            Š                                                                                 B(   $P(                                                                                              š© €â¦(                                                                                                                                                                                                   	ªš .*JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)ASJ                                                                                                                                                                                                         )Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((�&‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š                                                                                                                                                                                                   j¦‚ Š˜   1ßSª<ÿ é»­sÞÿ AÜqÏ–ë§¼†s¼Ó{Àhg;Í]ß Ã¿’k|up®_'pi\3½ÕÞ´ª¼ÿ é5¬ù~ÁØcÞC;Àlg{Ì3ª]÷5¾và-W.·í¬ï´¬ûÆ=ÿ ôÃÖÞc9ÖiÖÌ¥rÎþÙëäÛôõ^lïsõ×žóp=âuÞferÏ’¯=}ƒ¨Ç¼_X{ÅÎ³A¡�ïï¿ tªóû×N: è                                                                                                                                                             	ªš .*b€ |™q¶;üžnjæÓiÏçþ�ëZó¹©¼h&u¸]Ýk9cóA»¹®üýòá™»¯G90~^N?ù2§9¹€ß.?7ë·,|œÝ>4ï~Ýxâc'?`çû©>ÛÎ6›ÎÐNºßÄÎµ®¸ÔÎtîë¿ÇŸNyÆ×~sè~_×N?òÇË›Yçw0“~Ø»ºß\îéÏAŸ¼Öw~Ý{çkç´�ÝN·jç;‡YºüZßÉ¿ü¹ü\îk§ÉŸüƒ�?‡}}¯ðÞw�¸|™‘Æë{zN¹˜YRîá–7œlyÃÖâç;‡�Ë¿g­Ï¥›‡�ÐLº¼õ¸ß<ÌcxÚõÑëaçW8ÐkŸü¯Åú’r×ÅŸ`î                                                                                                                                                             	ªš .*b€  3ç31@O8žq óŒŸÛ¨ç9� &á„PŠL<â€žq<ã@$PÜ©çŸ8³„Å<âyÆ€LÈn\Pó‰­yÍh|ã=ñ] sçŒÆâ€ÏœYŠ>qf(		Š>pó� ç×5yæ6                                                                                                                                                              	ªš .*b€  ›°JPQ Q P  ¢P ((” ¢R‚‰ºPQ)ADP¥  Q)AD¥@€¢ ¢(( ¢ ¢R‚‚PQ*€  ¢R‚‰@P@Q7LÚ
 
!AD¥”Jˆn‚‰J
%@                                                                                                                              5SA ÅLP Žÿ g¬ çbú]áŸ ¾ÏZ™Ã~AŸZzÕÞSÈ×žªx^y€½kk}c>@õ§³Éàg­</�^u:ê.buÍö—jø_ ž�G“ÌÝÖ¹ÓÊç �k5½ÊÏ�=jzûkÊxÓ\ígË\äzß³Ó]c>A®tÞŽq:ÀMèô›Î™Î‚ïU3WÊyÐ=Ñœ/�3¯·Lß§<çí¼ë~Ë0ël÷öoG”ÞAs³{3ƒÀ×Û[¿Lç?mn}×ÖžWÈ'­=/–fÐ=jæéäÜú³ª�iÆ/YAŸKÏIåyäu7¥ëÞtÖž“3WÈ%=/�O zÓÒù<ýƒy¿Lo_mæ}1¼ý‚Z×:™ËY�zÚžµ­å<‚oIê›Î®rtnéå`3›«é|§�=ié|ý3¹®v§[öq�o4ô¾µ|›È3�/£Á¼ƒ|íiŽsq P                                                                                                                             ÕM 1@   E E E  @P@PP@PP@A@A@E @A@E E E B(E3 H $P  A@A@@Ü­ ™‘@                                                                                                                                 ÕM 1@                                                                                                                                                                                                   MTÐ@qS   PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP@  MTÐ@qS                                                                                                                                                                                                   ÕM 1@                                                                                                                                                                                                   MTÐ@qS                                                                                                                                                                                                   ÕM 1@ ªÇzTõŒný1» íëÓÏëZãvƒ¶êzÄßÆ3ÓÖ±Ëî¦ÚÞ±sk‡Û§ è                                                       	pßÇ·sA×Ö±ÇÖ€íëXã›ª¾±k…o7è*zÆ/Ó ëëXã»©›´Šž±Ÿÿ ,fýƒ¯¬=cž³Öè;zÃÓ—î/à:ÔõŽ{¬Ý ïš¬ñøÐ                                                !ëïf9gZþ±=c�­3wAÛÖ-rþ'­_XzÇ¦îƒ·¬ZáÎíußü‚úÃÖ9æ&Ú¾°õŽ;iöùµ\øt                                                     U4 \TÅ  ë+@9ø<: çþx¹ÄlŸI˜ÐùO-€Æð¼äh                                                        FwŠØ~€1œÃ`9ø<: çàðèŸƒÃ Ï¦|}º Ç“Ã`1àÞ~›ÏÁáÐs#@                                                îV|: çàðèŸ…ðØ~€1á©ô 3˜yh<›ÅlyÈÐ                                                     	ªš .*b€ 	º¬èâƒ#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@2fªA 5*ê`@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24+†˜
 &ê¸4#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#@24#H	šÓ?Ö€ ÕM 1@ u¦t­˜£Ó�Ú´³j±Çã`                                                     &‚Ž~šÍ™þ´Ïô SS¤ÝŠãòh:z3§,ß¥çô„Å                                                     ž¶CÕk Ó0 gWWYôu³oØ;z\ÚãºéÀ6                                                      &±èyÖ�ŸëLÿ Z  U4 \TÅ  Ö™Ð\N²®(9øO 3ÎF€                                                      òª Ïõ¦ Ð š˜º˜
Îñu°üÌt                                                     ÜªfE M0Ó@uq5p¬¬øtËÃ|äh                                                      Ÿ- ™Š Ïõ¦­  	ªš .*b€ ë@2U)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@Jb¨ j4€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€‹‚€ 3£H	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	J %*€”ªR¨	�   š© €â¦(                                                                                                                                                                                                   	ªš .*b€                                                                                                                                                                                                   š© €â¦(    ¢ ¢(( ¢(                                                                                        ¢ ¢((  €¢ ¢ ¢( € €¢P                                                                             5SA ÅLP Žö6ÇyAŒìõ«ãé<è×:ØÏ�kžAyÝÝ^·pç"õ”Î´öÖsôÏ�Oz{_	¼ý‚ïKÇU�çéxÈ                                                                                      Ï[1¦zË€çïì÷«œ&ó ögU<êç;A}mk­˜™ÏÚõ—�zÖuô™ÂyÐ7³;gxÓ9ÐuõôÏ´ÌØyÐk:gßÙ7q3� ¾¶¯³9MäZ¢yÓÀ7ÏU:ëìç�Äë6‚ûLî§�Ó8Üõ¦uö¾SÏØ:â¦~(                                                                             š© €â¦(  	º
P!
PQ)AP¥ …(…((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((™ª  )@„)@T¥ …(…(…(…(…(…(…(…(…((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰J
%((” ¢R‚‰T  MTÐ@qS  gZgAaPH@ B@HE!
 �ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $MÆ“A1¦q U41aŠ	@ BA!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„Pþ´Ïõ  5SA ÅLP �i�c¾£Ç>¹ÝÐ3¯£:ûgÎã\çØ/ZÎt×YSÇÐ/³Û174ö×î9æ:gà1vµ�&çÛ;ú{=±¸Mý¯¿·<çI´±Yçñ                                                                             7Už²‚æšœä]Æ™Æ€MTÐ00ßÀsë¹§¯¦w�Ý<è7ÎÓºq‹Ö9º{7>™òû?Ñ�)çAÛž«N|dt                                                                                 ÔôºÆóöæÕLÈ Ïõ¦­  	ªš .*b€ ëLè)
P!
P R�R�”žV”ÊÂ”B”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPTÒ› ˜Ó8Ð	ªš+9«@„)@�J!J!JT¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥þ´Ïõ  5SA ÅLP 7„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@LÅ @HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!„P@HE!Š  j¦‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š    €(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(  j¦‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š  ‰J
%((” ¢R‚‰J
%((” ¢R‚‰J

3ëxûÃÞC>ð÷€ÐÏ¼=à43ïxûÃÞBfæ¨                                                                                                                                                                       š© €â¦(  Î´Î�¸B(	´„PJ	 $"€�ŠDþ´ŸÐV{Ù�3ò~†õµ=oý7õ×Öÿ ÓÖÿ Ô}oý=oý@Öÿ ÓÖÿ Ô}oý=oý@Öÿ ÓÖ Ÿ[]ñçøÿ ^Œb·P                                                                                                                                                                    5SA ÅLP �i�ÀÀ:ÖØè®tÌ34ô¾˜ÓÒý1~Úþ3 ¾�LÃpôgL. ˜ 'õSú
ÏÉøÓ?'à<ûú‹¿¨èæ×9O';ÍEgÊy×K‰pÓò›‘ºÆ…3)¹7U oãýz1çøÿ ^Œb·P                                                                                                                                                                    5SA ÅLP �i�Á*ÐqiA!”pÎJPT‹J	U Îò¹…((•h	ý*A¦~OÆ™ù?çßÔ]Ï´ts ¥@    ëÑŽ}»ã¸ "€                                                                                                                                                                    	ªš .*b€ 	¸ 3ÐÂ40� Ì#@3ÐÂ40� Ì#@31@r¨{ñáþxècŸùáþxècŸùáþxècŸùáþxècŸùáþxècŸùáþxècÎc`                                                                                                                                                                       &ªh  ¸©Š                                                                                                                                                                                                   j¦‚ Š…”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPTÒ€€                                                                                                                                                                                                        ?ÿÙPK     ¥ŠU]Xú¬°‰`  ‰`  5  includes/modules/links/assets/images/keyword-maps.jpgnu „[µü¤        ÿØÿà JFIF  H H  ÿâØICC_PROFILE   È    0  mntrRGB XYZ à        acsp                             öÖ     Ó-                                                   	desc   ð   $rXYZ     gXYZ  (   bXYZ  <   wtpt  P   rTRC  d   (gTRC  d   (bTRC  d   (cprt  Œ   <mluc          enUS       s R G BXYZ       o¢  8õ  �XYZ       b™  ·…  ÚXYZ       $   „  ¶ÏXYZ       öÖ     Ó-para        ff  ò§  Y  Ð  
[        mluc          enUS        G o o g l e   I n c .   2 0 1 6ÿÛ C P7<F<2PFAFZUP_xÈ‚xnnxõ¯¹‘ÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ CUZZxixë‚‚ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ $D" ÿÄ             ÿÄ !     !1A"2BÿÄ              ÿÄ            1ÿÚ   ? õ‚‚


































































































































€ *b€                                                                                                                                                                                                   š©  *b€	»0qß{~/Ÿ{ÿ AÔc¼;Àlg¬Nðÿ §Õï±œõšžý@lrþ•®Á±žðë¡žðï¡žðï¡žñ;Àlrïë^½LÇ/?éMÿ O ê1žþ/xw�fÐP                                                                                                                                                                 R€ MÓ Q*Ð”P  MTÐ 1@gßãFå?¿WÖçü]ñôÏ ç•�Ý¯FxŒïùý<ÝŒÝ®ßÏâgùŸý7u×ù›þ`ÏùÚ¯ã~|EõæƒÏææý_[®ÛþlïùƒžUë8˜Æx¾�6æ3Ö»ï‹‰üÁÊèíüþ'ó,»«®¹â¼PqÏþ�}ÿ ògùÍo|Ü›.»]¿™üÁËwâg­ußóMÿ 8f»žücÏùë¯Ÿ0                                                                                                                                                                 YôÒ@gÿ „�úk[‡ Á[ää¦nÖù9À  ÕM  1S           ‰         @                                                                                                                                                                 P
P” ¥ )@
P”  ÕM  1Q@                                                                                                                                                                                                   MTÐ Å5SA ÅLP  JPQ)AD¸PP                                                                                                                                                        ÕM 1@g×ãI¹AÇ­¦ûøÖø?˜3ÞÄïcÍ?˜3Öºøgùµç 6                                                                                                                                                      Š€                                    ¢(	ªš .*b€	 £4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ(43JÒƒC4 ÐÍ\ T ¥sõ¿RüZW?;M´)XŸ(:U®;ºt´®]-J®;ºéãA                          TPU4 \TÅ5S@ÀÅ€ 
€‚































































































i†˜
 ¨  çë�u 9ùÈ»�ÀŸ1°÷Êo‡P¹9×R–ùkÆFà                          *(	ªš .*b€š© a¦~½}N¾óë3A¼ôu¬æ|_ÀkÏ£×¤ó‡¬úzk§?º}úMöÄÒ¦{k=\pšéã>Wé¾£?šž¾ƒ]§Yå7ÎÐvÍ­1ãñ°                                                                                                                                        Ó0 P                                    E5SA ÅLPU4TÅÜ©Î4<œã@&d7*€Ï8s� Ï8s� Ï8±@g•å@HsŠE                                                                                                                                         Ó0 P Mü�8úÝÍLõ ïÑ\.ÕõºÔ¬yü/Ðn�c—­Önƒ¿XuŽVülÚo¨çãSÝ éÖcŽÕ¿×=bîÇ;µ¯_€ßXuŽ_@uëœ®®}ÀuÏU\üc                   
Šj¦‚ Š˜ &¨� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� ÈÐ� Êâ€ *  1¾)Ã`1ÁÃ`3žbsõ°àãŽŒó–€g|§€Æx]óZž~'€Çy�€™‘@                  E5SA ÅLP4
®[¿[ó¿JÏ­g uóÑÐ:}£è¥sßKAµsèß@è1çiºŽ} çÑÐ:}5›pŒoéAÐsé¯øJçºfƒ¥W:g¯ ÙSwã9è>Ž�Ðsèè>Ž�Ñ+&è:+¿} çÑ¾�ÐsésA¢§­g¨ƒ}StÏ_ZJk0¥sÒƒ¥+ž/è7šV3õ}h5Fô•�ôtÕr«ž�±7~ ´ctè¥sëë_ Õ‹ä                                                                                                   E@ Ð@Æ�‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ ‘ “?è( *(	ªš .*b€š 9òÖc@9î'.€9ç•ß-€Ç$lwŽ„9#`1É¾]ó†ã`9ï”åÐ€Æy9tË–üâ¨1¸‘ÑŒòÜø 9î/-(9òsõ°sã<º 9ò»��Ï?—Hœ¶<¤t@Iñ9l>S|º¤(ßœj ž±Ž]f›7Ï?[¦bÀ0P÷—@Ì#`3˜»Š ç4å°äå°ù3Ë 	>3õÑˆ¼´ åË~qTôyP                                                                                                   44g¥cÙãAÐ                            Dÿ ªŸô ÕM 1@                                                                                                                                                            E@Æ™Æ�ÏÙã„                            ?ê§ý E5SA ÅLPS ¥rÛS}mjWõ¦zÐw¥Ç™»ºýËkyøR¹ôÆúÐw£†z×_A°                                                                                                                                                 E@ LT€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€*ÐÌ E5SA ÅLP@c|³üÝ@rþg 9pg‰® 1ÊÏ� ç¾>§ 9p¾|Ç@                                                                                                                                                  E@                                    ÕM 1@MTÐJUÀ•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P•@JU)T¥P®`( "  h&úŒLrÿ oqæþ›Aô3ÕWð÷^€J´ˆ
Sþ9îîè:QÏ7pì>ÎÁÐ¬ç«Œzõ´G<÷0þ€è9övƒ–û3Ø:Œg´ß`èV<ú¦è5UÍ¯:               *(	ªš .*b€š© b¦
9o¹¦ûQËµì;3ÕÑŸ^™ìF;NÁÐsí3ßÐuû;AŽÙß`è®=·çÕÆwÔNÁ±ŽÓ°tÏU°                                                                                                                                    M0Ó@ 4æÿ oæþ{_G|Ö?žŸøx�C9æ(-B,þ9nMuH{wçk¼&�:s®Ð€ÏœøÏ¬u‰Ç�3Î»B—)¾uÞ$.tåÖ·Î¦ù×x�üc[�Â›^qb€               ¨ &ªh  ¸©Šj¦�†˜ ã¾~§.Ð€ãÛ”ãÎjù®œáÈ9êJéÊç�sÜøÆf½9Àrçã<íz!0aË´ 8nižuÛœ9Àrå¬Èé[ún:Ã�qšrëÎ,?95Ó                                                                                                                                     ša¦€*                                     ¨ &ªh  ¸©Šj¦�ŠÉôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§Ðhgéôú}†~ŸA¡Ÿ§ÐhgéôLEÀP E@ už±ËýÓ—í´ÚW/ò÷Ö;@J¤@Pg×¨çª»èc=¯@Ð•:úîÃ¬†;úÖh(›é:ÀhLõYõêcž{o QŽþ›èÏK¾�¡ŒõZÝ£ÍÃ          ÕM 1@éh(Š …§@Ð•@”J  PQ

%@ J€    …@”JPQ)AD((                                                                                                                      " €<ŸïšóM¯£ïÅrþ9AŸü|Üzœüùåº
Ÿô3ã�»ºìœƒŽ\7k®ùÃ€r\täÏ ÏØ™³]"o�cÖÖfºòr?k¯ŸÅç0½~§×]óNA�'¬úé\éºë€q_®œbó€åõ>»rq€ç˜ßük’šçë\™€¸          ¢€š© €â¦(	ªžçÓZÜú›€�C£|¦yïÄÍYñ™ ›©ZääÖØ�`3ë~¥Ö·A:N—|¦y¼éëLÈnu§KÊo�N—53ÊòK«�NŽŽW�N—5�Èyý½jg¥Ü©È'KÒr@^ŽŽ~' ½œ�ÒV¹HM_ŒòÖgÀg}äÏ •¯)ËY€ÎïÒ®ârGŸFù3Ì·ñšÔøÏ f·Œf7€                                                                                                                     ¨                                    ¢€š© €â¦(     "€"€ 
     "€"€&á˜  $"€‚€‚€"€Š       "€Š                                                                                                                      "   —ÿ ÓÜrßõÕÄï^›…Ç—úk~wuq)Þ«œÜ_:‹­ƒ;é¡3V€%:¢‚‰LÐQ�ÒƒBf¨                    ¨ &ªh  ¸©Š  (—€¢R‚‰N°J�`4'XPQ.J                                                                                                                                                 " 	¿Šh<Ÿëúæô§Šå¾5§:Ï¼c?^¯ò‘çã]|nâtãÑ¿ŽþŽ·WÎ9v×ürßþ�œ÷ÏÔViÖã|¦ø7Þ¦n·üÎž´ï[á?˜'[«ãõx_>`&�n$Ëi™                    TPU4 \TÅŸ_�&åÀqÝÔëk|;»­tçâp	Œï­­ç“€c­3wu¾<@giw1Ó|¦ù;º›ë[ààóëk¶~1ÇÖð                                                                                                                                                 ÆyÆ€gœ9Æ€Nq@                              E5SA ÅLP4f”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”¥†iA¡šPhf”«€  Š€                                    *(	ªš .*b€š© `b‚



































































































i†˜
 ¨                                    €	ªš .*b€š© b¦(                                                                                                                                                      &˜i€                                         š© €â¦(	ªš*b€                                                                                                                                                     i†˜
                                        	ªš .*b€š© b¦(                                                                                                                                                      &˜i€                                         š© €â¦(	ªš+9«AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPT*n�º¸Ãx
                                        	ªš .*b€ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	                                         ÕM 1@MTßÀf™éA¾“¦@n�0}ˆh7Ñšç�çà.úLôÎ :ttç€:ttÂƒ]1¨›é:dú:`LÓuŒ=[é3k-yÀj§Lúgè7×Õ¬@èÏUÍ¯ ÖìN�LÀo£¦ tÍ7Yò›úÔßLþ 7Òæ¹}oÏà.ìLôšÈ:ttÂ}N—6¹¯�t                                                                                                                                                             ÕM 1@ äß- Æy^ZžNZ"rÐò±@g|œ´<œ´<‘ ÜN[žNZžHÐ	ÅžW1@MÊœ´Då åb€›‰˜rÐ	™ 3¾NZžW1@gpå äå ås"€                                                                                                                                                             j¦‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š                                                                                                                                                                                                   j¦‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š  ‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€‚€ j¦‚ Š˜                                                                                                                                                                                                    &ªh  ¸©Š>¶cNéøŸw]?ÏõÙzœP@                                                                                                                                                                                              MTÐ@qS?ôütsÿ OÃ‰Ö?ÏõÙÇüÿ ]—§MØÇQ]7Úg°tûúÕ†zÄï±ŽÎ�±Ï}™ì;;Àlc¼\õA¡�õ¼Æ;Åï¡œõW W-õ´ìF;Ã¼ÆzZ
3Ö3¾�Ðrí®¾cž{^ð6¦ú†:Åë¡ž±;Àlsßmg¯€ÐÏXÎûAŒöw€ØÇx¹êƒC=`43ÖBn³Ð61Þà61Þ'`è1Þ-ø{ìÏ`è1Þ-ø}ý^ðë°ë¼Æ;Ã°lsïë[êCáÖcáØ6&(                                                                                                                                    	ªš .*b€çþŸŽŽéøq:Çùþ»8ÿ Ÿë²ôã>ÿ ¦×}Êœâ+�Òk·8s€åç>·ëñ¬ó˜°~³ö»ó‡YŸk´9ÀpÌÕšíÎà8ý\ÍuçAËsWÅtäÏ0õ•�Ív‰È8ýO®üáÎŸŠëÿ •=Ï©¸ëšfk·8rYk¦çÃ<ýj†ÚMvçp³Üÿ Õ®V‚}®üáÎ>õk¶bo�pÚ¹]¸ÃœÍLÍwçp]3?õkœX­37]¹Ãœ)¸ÌÚïÉÎ–f·çå`9{ýO®›æêò?ZÍ×Npç�üeÖ' å63•Þà8mY®ÜaÎ„Úë™ñ®q`8î}#¯' áöºùükœX›Sk¿8s€ã÷1~î:o•Ï?Ãêývçpf¬øëÎƒ—œú×¬øÞyÅ€ãÊmv‡8WwÆàÎ´™Š                                                                                                                                    j¦‚ Š˜ 9ÿ §ã£òáÃ®çúìåãÌ×eêp                                                                                                                                                                                              ÕM 1@E"€                                                                                                                                                                                                	ªš .*b€                                                                                                                                                                     ›ªÎ�Jf,¥X›ð
V7Òç j”Å€”¢ÀJU„¥X@JU„¥X@JU„¥X@JU„¥X@JU„¥X@JU„¥X@JU‰¸š¬ã@&ªh  ¸©ŠzÙŠÏ¿ÀsþŸZÏnçjí€ïÞã†f—l~ðï}fã9AèïñÃéôûÆwý>¹Í‰>ƒ¿_ís?õqõh:ç¶»Ç¹‰”÷ÙžÜçÆwt·ý1?¥qË«˜Ùí{Ç§ÐwïñÆjm£=VœÉØ                                                                                                                                                  gZgAp0ÏÞº9{@OÖë>Ð%^™M éÑÓž,ú:rú¸�'Lë éž—5Í|þƒ{¬õõ}~14«ºÎ~®çÀ::`Ðté+ºttæ Ý^œÀo¥éˆ€é›U�-€hh&4Î4j¦‚ Š˜ &åPçŒl><}u�óšq�€ÆøÃŒlyÈœc`&gÆwÆVÀc|f™ãžS|c`1ž0ãŽ0ÏØó‰Æ69æ4                                                                                                                                                  :Ó:‚R‚³ëÍZPsßž(�Ü)A9^JP9!J	ÊÂ”Äåi@äÌ)@„)@Š” Dåi@„)A9^JP9NV”B”È©J
jR��3� š© €â¦(                                                                                                                                                                      $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�ŠB(	 $"€�Š  	ªš .*b€	 R¹îý:JW:Pt¥gwã9èË¥è>“°tú^�ºW=Ý_:ˆÎìMô•Ï¥ Ý+ŸEJ9ÕèúÕès~3¾¾ƒcžú:AŽ“ tÏI¾�ÒŽ}¡\ú_;ô£µ:QŒõWtb�cŸZu è9õ§Zƒžú:Tg57Aµsé«ðbêo tW.Ž�Ð¬ßŒÐt£�Ó}¢¹t×Ÿ@ÚQÏÖýJ9æ·~ŒTß@è®]5çA´gÖ³Ð:}h:}¡XßIÐ:Uré¯;A´gÖ§@èŒtu ØÇIÐ:+ŸG@ØçÖ¯@Ú¹ç¯­nüú:Ðt¥sßKçA±�Ôè)\éÐ:QÎ�¥+žú_:•�õõ7AÒŽwVƒcŸG@è9ôt£u=z€èŒg£}tsÍ^�±Ï­^�²¹ôPt£ŸKAºW>’ƒª¹ç¦³A                                                                                                  MTÐ@qSÕŽS—@ù9t™ñž] så7R<üN såsË`1¾O9�óS|º çžW–ÀråytÏ“—@å7Ë æDß5°øMòê�Ï)Ã¢ƒå7Ë |œº çÊç–Àc|§.ˆyÏ­n,PsäåÐ99l99l.—@ÌMòØg–§ÅŽS‡@ù8t™ñ9l9MðèŸ&ytß5°ågÆ€så7Ë¨yå¬Æ€sõ‰žk¤ 1žW–ÀsàÏ.€9ï“<º çÊùó�YYåÕ 1žW–”ù\òØ{äÏ-€Ï'-€çž~®çÆÀrá®[Ï•Ìl9N] så8uÏ“—@ù\ÈØ{ŸLòÜPc“Ÿ�€åÊòèŸ.€1™×šèŸ'.€9òrè›å°¸^] säåÐ.—@§Öó(                                                                                                  š© €â¦(   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	ªš .*b€š© „\Pf „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „ha˜F€f „h`Òh¬ã@&ªh  ¸©Šj¦�Š˜h¬_¥Æ)Ð:}5šn¦úD¬tPl¬t”*¹Ó tú:Aœß‰¾¾ƒcžú:AÏ£ tú7Ð7UË¥è+ ÝÝútƒ«ºTè>Ž�Ðsèè>Ž�Ðg7ânƒcŸM_€ÐçN�Ðsèè*_ŒÐm\ú:AÏ¥ó ØŠ                                                                                                                                                   j¦‚cLã@&ªh  ¸©Šj¦�†˜ ÄúFÀc”åÐ<òÞb€Æâo—@óÊï–ÀsäåÐ9N] c”åÐs|¶Ÿ)Ëª@c“–ÔÏ)¾] säåÐ>W1°ÜHè€Ïœ]ÅŠDåÐ99l99l>N] g17ŒòÔø 1Êrè§.€3>'-€Ç)Ë |®c`2¸                                                                                                                                                    	ªš	�3� š© €â¦(	ªš*b€                                                                                                                                                                                             š© ˜Ó8Ð	ªš .*b€š© b¦(                                                                                                                                                                                             	ªš	�3� š© €â¦(	ªš*b€                                                                                                                                                                                             š© ˜Ó8Ð	ªš .*b€š© b³š´JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AYÝ7Y±¦|´j¦‚ Š˜ "€Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� Ì#@3ÐÂ40� ™Š &ªh  ¸©Š 3ïfÖcÏëÞÔï]KŠzzÃ¬y»Ó½Y-éë±æïNô’Þž°ënôïI-éë±æïNô’Þž°ënôïI-éë±æïNô’Þž°ënôïI-éë±æïNô’Þž±kËžõßüöâw˜¼õ®€9t                                                                                                                                                                                 &ªh  ¸©Šÿ cßâñ:ózýe¯_¬´cÐk0�Œ�B25ÈÔ c#P�Œ�B25ÈÔMPÏ×£ü¿|ýz?ËñÏ§^@fÔ                                                                                                                                                                                 MTÐ@qS=þ6Ç¿Åâuæõú˜¾¿YhÅÓ4b”ÅÖÆ)L5wõ¬b”5¼5ŠSlb”Ã[¥0ÖÊÅ)†¶Î¥½3õèÿ /ÇŸ?^�òüOKáÔm@                                                                                                                                                                                ÕM 1@cßãi¹AäõŸR=þgóÇtÎ^xG£ùáüñi!ç„z?žÏ
!ç„z?žÏ
!ç„z?žÏ
!ç„z?žÏ
!ç„z?žÏ
!ç„z?žÏ
!ç„z?žÏ
!çÌúôŸáüñ¼Èç½×^|ãB]¨€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€(€( &ªh  ¸©Š  €                                                                                                                                                                                               
Šj¦‚ Š˜                                                                   ž·à-³Òôƒé­ÐQž“°l¬ttŽ}¥ú^�±ŽŽ�±œÚo¨t›è
çÒt£ìß@ØÇ�^�¡�ö� Ç�­€9úô¹ëà7G=ôt”cÎ›èèèú^�±ŽÚ¿F7ÑÐ61¾Ž�±Ž— hc}&úê¹f·ž�¡7YèÏU­ÐQŽ“°tèèìèé:AÏ¦³ÕŠÇ­fè:Œg£°lc£=b_‰Ð41ÑÐ69ô½cé­ß€´sëêÐl0                                                                 ÕM 1@                                                                 ôÐ{å9u 9æ5¹ñ¨œÖf»D€Æy7!ÊjÆâÀr„u„>SqÖóŸÖk¡Ë3Hëœ9t‹Ë<‘Ö$ÌøÆå×X�÷ÊòéyøÖþ,Ï|Ôšê@r„u‰<çÆ}g×B”Ò:ÂŸ&ùt„,óõ¹ñ¨œ7Ë¤ 8Í\òéžâMu‰Êjç—H°¢ùÆ÷È	ëŽ¤<áé´Ü åúréžVäß.�€åÊç–âÀrÜ9u„-ò×œn Ç¬Hè@rß&yu„>N] ÏŒÍtHpšéŸ)¹c;æƒ[Ü3Ìhù3	Š                                                                 ¢€š© €â¦(                                                                                                                                                                                                 *(	ªš .*b€                                                                                                                                                                                                                                                                   š© €â¦(                                                                                                                                                                                                   	ªš .*b€                                                                                                                                                                                                   š© €â³Š
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
š&€ ©Š                                                                                                                                                                                                   j¦€ ©Š                                                                                                                                                                 jSL¥j¥j¥j¥j¥j¥j«V&‚š˜zü7ÜOèåï~³]óË>úwþ‡ôp¥YJwþ‡ôp¥$§èG
RJwþ‡ôp¥$§èG
RJwþ‡ôp¥$§èG
RJwþ‡ôp¥$§èG
RJwþ‡ôp¥$§èG
RJwþ†£…3~’S×›UÏüÿ u§ÕME 1@                                                                                                                                                                L4ÀP ÝN“Òftcv'@è9Ý(:Ï}¦hÏ–€MTÐ0õøaëðo¬7ïõœkÆúf�çáújã#¯&ù4—8GNNSIs„tå™õtÆagÄæ¦®9A×|§+©ŽduääÒ\¢ÇNNM%ÎÒ|Lý4Æ!yún&¬¸Â:òo•Ô—%ÏÕõ‰Ÿ¢=çøèçþŽŒúÛ‚j¦¢€Š˜                                                                                                                                                                 	¦`( ›•™­€ÆùLòèœ¶äÏ-€™‘@ÕM_†¿æ÷úÃ~ÿ XkÆúÞjÜs)‹®�/NE0×^ŽœêS¯Lß¬PÃ]:^œŠa®½éÎ›¦éÑÓ�aN½'Nt0×Mõñ3~±CuèéÈ0§n“uÎ•1i}jgê.~«—£üÿ ÿ ÏñÑŸ[pMTÔP 1S                                                                                                                                                                5 %*ÂR¬ %*ÂR¬ %*ÂR¬ %F¡ ÄßÅÃß�Ýc�za1Õ8—›�8×¦a0¢^n4ã^™„Â‰y¸Ó�zf
%æãN5é˜L(—›�8×¦a0¢^n4ã^™„Â‰y¸Ó�zf
%æãN5é˜L(—›�8×¦a0¢^n4ã^™„Â‰y¸Ó�zf
%æãW<kÑ0˜Q,øÉ�ƒ—bj¦€                                                                                                                                                                                                     j€€â¦(                                                                                                                                                                                                   	ªš .*JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)AD¥”JPQ)ASJ                                                                                                                                                                                                         ÿÙPK     ¥ŠU]›m3Í“Ï  “Ï  .  includes/modules/links/assets/js/links-page.jsnu „[µü¤        !function(){"use strict";var e={920:function(e,t,n){n.d(t,{A:function(){return i}});var a=n(601),r=n.n(a),o=n(314),l=n.n(o)()(r());l.push([e.id,'@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{transform:translateY(0px)}to{transform:translateY(-5px)}}@-webkit-keyframes bounce{from{transform:translateY(0px)}to{transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{transform:translateY(0px)}to{transform:translateY(-5px)}}@-webkit-keyframes bounce{from{transform:translateY(0px)}to{transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header{display:flex;flex-flow:row wrap}.blurred{pointer-events:none;filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{align-self:center;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{align-items:center;flex-flow:row wrap;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:flex;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}#rank-math-links-page-container .rank-math-links-page.rank-math-wrap{margin-right:0}#rank-math-links-page-container .rank-math-tab-panel{width:100%}#rank-math-links-page-container .rank-math-tab-panel .components-tab-panel__tab-content{padding:0;background:rgba(0,0,0,0);border-bottom:none}.rank-math-tab-content{position:relative;margin-top:16px;margin-left:20px;margin-right:40px}.rank-math-section-card{position:relative;background:#fff;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:16px;overflow:hidden}.rank-math-pro-col-header{position:relative}.rank-math-pro-col-header .rank-math-pro-badge{display:inline-block;margin-left:4px;padding:1px 5px;border-radius:3px;background:#fff3cd;color:#856404;font-size:11px;font-weight:600;vertical-align:middle;line-height:1.4;letter-spacing:.3px}.rank-math-pro-cell{position:relative;overflow:hidden}.rank-math-pro-cell .rank-math-pro-blur-text{filter:blur(4px);user-select:none;color:#50575e;pointer-events:none}.rank-math-pro-cell .rank-math-pro-upgrade-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.rank-math-pro-cell .rank-math-pro-upgrade-overlay a{font-size:11px;color:#2271b1;font-weight:500;white-space:nowrap;text-decoration:none}.rank-math-pro-cell .rank-math-pro-upgrade-overlay a:hover{text-decoration:underline}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body{text-align:center;padding:16px 0}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-icon{display:block;font-size:36px;color:#f0b849;margin-bottom:12px}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body p{font-size:14px;color:#50575e;margin:0 0 16px;line-height:1.5}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-features{list-style:none;margin:0 0 20px;padding:0;text-align:left}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-features li{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;color:#50575e}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-features li::before{content:"âœ“";color:#4ab147;font-weight:700;flex-shrink:0}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-actions{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}.rank-math-upgrade-pro-modal .rank-math-upgrade-pro-modal-body .rank-math-upgrade-pro-actions .rank-math-upgrade-pro-btn{min-width:160px}.rank-math-pro-tab-preview{position:relative}.rank-math-pro-tab-preview img{display:block;width:100%;height:auto}.rank-math-pro-tab-preview #rank-math-pro-cta{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;display:flex;align-items:center;justify-content:center}.rank-math-table-header.has-toggle-filters{flex-direction:column;align-items:stretch;gap:0;padding:0}.rank-math-table-toggle-row{display:flex;justify-content:space-between;align-items:stretch;padding:0 24px 0 0;gap:16px;flex-wrap:wrap;border-bottom:1px solid #e0e0e0;min-height:52px}.rank-math-table-toggle-left{display:flex;align-items:stretch;gap:0}.rank-math-table-toggle-left .rank-math-toggle-button-group.is-tab-style{align-items:stretch}.rank-math-table-toggle-left .rank-math-toggle-button-group.is-tab-style .rank-math-toggle-button{display:flex;align-items:center;padding-bottom:0;border-bottom-width:2px;margin-bottom:-1px;outline:none}.rank-math-table-toggle-right{display:flex;align-items:center;gap:12px}.rank-math-link-type-badge{display:inline-block;padding:3px 10px;border-radius:4px;font-size:12px;font-weight:500}.rank-math-link-type-badge.internal{background-color:#d4edda;color:#155724}.rank-math-link-type-badge.external{background-color:#d1ecf1;color:#0c5460}',""]);const i=l},314:function(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",a=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),a&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),a&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,a,r,o){"string"==typeof e&&(e=[[null,e,void 0]]);var l={};if(a)for(var i=0;i<this.length;i++){var s=this[i][0];null!=s&&(l[s]=!0)}for(var c=0;c<e.length;c++){var m=[].concat(e[c]);a&&l[m[0]]||(void 0!==o&&(void 0===m[5]||(m[1]="@layer".concat(m[5].length>0?" ".concat(m[5]):""," {").concat(m[1],"}")),m[5]=o),n&&(m[2]?(m[1]="@media ".concat(m[2]," {").concat(m[1],"}"),m[2]=n):m[2]=n),r&&(m[4]?(m[1]="@supports (".concat(m[4],") {").concat(m[1],"}"),m[4]=r):m[4]="".concat(r)),t.push(m))}},t}},601:function(e){e.exports=function(e){return e[1]}},72:function(e){var t=[];function n(e){for(var n=-1,a=0;a<t.length;a++)if(t[a].identifier===e){n=a;break}return n}function a(e,a){for(var o={},l=[],i=0;i<e.length;i++){var s=e[i],c=a.base?s[0]+a.base:s[0],m=o[c]||0,u="".concat(c," ").concat(m);o[c]=m+1;var p=n(u),d={css:s[1],media:s[2],sourceMap:s[3],supports:s[4],layer:s[5]};if(-1!==p)t[p].references++,t[p].updater(d);else{var h=r(d,a);a.byIndex=i,t.splice(i,0,{identifier:u,updater:h,references:1})}l.push(u)}return l}function r(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,r){var o=a(e=e||[],r=r||{});return function(e){e=e||[];for(var l=0;l<o.length;l++){var i=n(o[l]);t[i].references--}for(var s=a(e,r),c=0;c<o.length;c++){var m=n(o[c]);0===t[m].references&&(t[m].updater(),t.splice(m,1))}o=s}}},659:function(e){var t={};e.exports=function(e,n){var a=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(n)}},540:function(e){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:function(e,t,n){e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825:function(e){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var a="";n.supports&&(a+="@supports (".concat(n.supports,") {")),n.media&&(a+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(a+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),a+=n.css,r&&(a+="}"),n.media&&(a+="}"),n.supports&&(a+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(a,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:function(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var o=t[a]={id:a,exports:{}};return e[a](o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},n.nc=void 0;const a=wp.element,r=wp.i18n,o=lodash,l=wp.apiFetch;var i=n.n(l);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var s=a&&a.prototype instanceof i?a:i,c=Object.create(s.prototype);return m(c,"_invoke",function(n,a,r){var o,i,s,c=0,m=r||[],u=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return o=t,i=0,s=e,p.n=n,l}};function d(n,a){for(i=n,s=a,t=0;!u&&c&&!r&&t<m.length;t++){var r,o=m[t],d=p.p,h=o[2];n>3?(r=h===a)&&(s=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=d&&((r=n<2&&d<o[1])?(i=0,p.v=a,p.n=o[1]):d<h&&(r=n<3||o[0]>a||a>h)&&(o[4]=n,o[5]=a,p.n=h,i=0))}if(r||n>1)return l;throw u=!0,a}return function(r,m,h){if(c>1)throw TypeError("Generator is already running");for(u&&1===m&&d(m,h),i=m,s=h;(t=i<2?e:s)||!u;){o||(i?i<3?(i>1&&(p.n=-1),d(i,s)):p.n=s:p.v=s);try{if(c=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(s=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(u=p.n<0)?s:n.call(a,p))!==l)break}catch(t){o=e,i=1,s=t}finally{c=1}}return{value:t,done:u}}}(n,r,o),!0),c}var l={};function i(){}function s(){}function u(){}t=Object.getPrototypeOf;var p=[][a]?t(t([][a]())):(m(t={},a,function(){return this}),t),d=u.prototype=i.prototype=Object.create(p);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,m(e,r,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=u,m(d,"constructor",u),m(u,"constructor",s),s.displayName="GeneratorFunction",m(u,r,"GeneratorFunction"),m(d),m(d,r,"Generator"),m(d,a,function(){return this}),m(d,"toString",function(){return"[object Generator]"}),(c=function(){return{w:o,m:h}})()}function m(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}m=function(e,t,n,a){function o(t,n){m(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},m(e,t,n,a)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach(function(t){d(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function d(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=s(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=s(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e,t,n,a,r,o,l){try{var i=e[o](l),s=i.value}catch(e){return void n(e)}i.done?t(s):Promise.resolve(s).then(a,r)}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,l,i=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var k=function(e,t){var n=Object.entries(t).filter(function(e){var t=f(e,2)[1];return""!==t&&null!=t}).map(function(e){var t=f(e,2),n=t[0],a=t[1];return Array.isArray(a)?a.map(function(e){return"".concat(encodeURIComponent(n),"[]=").concat(encodeURIComponent(e))}).join("&"):"".concat(encodeURIComponent(n),"=").concat(encodeURIComponent(a))}).join("&");return i()({path:"".concat(e,"?").concat(n)})};const g=function(e){var t=e.dataEndpoint,n=e.statsEndpoint,r=e.initialFilters,o=void 0===r?{}:r,l=f((0,a.useState)([]),2),i=l[0],s=l[1],m=f((0,a.useState)(null),2),u=m[0],b=m[1],g=f((0,a.useState)(!0),2),y=g[0],_=g[1],w=f((0,a.useState)(o),2),v=w[0],x=w[1],E=f((0,a.useState)({orderby:o.orderby||"",order:o.order||"ASC"}),2),S=E[0],C=E[1],P=f((0,a.useState)({page:1,perPage:10,total:0,pages:0}),2),O=P[0],j=P[1],A=(0,a.useRef)(!1),I=(0,a.useRef)(!0);(0,a.useEffect)(function(){return I.current=!0,function(){I.current=!1}},[]);var T=(0,a.useCallback)(function(){var e,a=(e=c().m(function e(a,r,o,l){var i,m,u,d,h,g;return c().w(function(e){for(;;)switch(e.p=e.n){case 0:if(!A.current){e.n=1;break}return e.a(2);case 1:return A.current=!0,_(!0),i=p(p({},a),{},{orderby:r.orderby,order:r.order,page:o,per_page:l}),e.p=2,e.n=3,Promise.all([k(t,i),n?k(n,{}):Promise.resolve(null)]);case 3:if(m=e.v,u=f(m,2),d=u[0],h=u[1],I.current){e.n=4;break}return e.a(2);case 4:g=d.posts?"posts":"links",s(d[g]||[]),j(function(e){return p(p({},e),{},{page:o,perPage:l,total:d.total||0,pages:d.pages||0})}),h&&b(h),e.n=6;break;case 5:e.p=5,e.v,I.current&&s([]);case 6:return e.p=6,I.current&&_(!1),A.current=!1,e.f(6);case 7:return e.a(2)}},e,null,[[2,5,6,7]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function l(e){h(o,a,r,l,i,"next",e)}function i(e){h(o,a,r,l,i,"throw",e)}l(void 0)})});return function(e,t,n,r){return a.apply(this,arguments)}}(),[t,n]);(0,a.useEffect)(function(){T(v,S,O.page,O.perPage)},[v,S,O.page,O.perPage]);var N=(0,a.useCallback)(function(e,t){x(function(n){return p(p({},n),{},d({},e,t))}),j(function(e){return p(p({},e),{},{page:1})})},[]),M=(0,a.useCallback)(function(e){j(function(t){return p(p({},t),{},{page:e})})},[]),R=(0,a.useCallback)(function(e){j(function(t){return p(p({},t),{},{page:1,perPage:e})})},[]),z=(0,a.useCallback)(function(e,t){C({orderby:e,order:t}),j(function(e){return p(p({},e),{},{page:1})})},[]);return{data:i,stats:u,loading:y,pagination:O,filters:v,sortConfig:S,handleFilterChange:N,handlePageChange:M,handlePerPageChange:R,handleSortChange:z}};function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,l,i=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var w="post_type",v="is_orphan",x="seo_score_range",E="link_type",S="source_id",C="target_post_id";function P(){var e=window.location.hash;if(!e||"#"===e)return{tabName:"posts",searchParams:new URLSearchParams};var t=y(e.replace("#","").split("?"),2),n=t[0],a=t[1];return{tabName:n||"posts",searchParams:new URLSearchParams(a||"")}}function O(e,t){var n=P().searchParams;n.delete(w),n.delete(v),n.delete(x),t.post_type&&t.post_type.length>0&&n.set(w,t.post_type.join(",")),t.is_orphan&&n.set(v,t.is_orphan),t.seo_score_range&&n.set(x,t.seo_score_range),n.set("page","1");var a=n.toString();window.location.hash=a?"".concat(e,"?").concat(a):e}function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?A(Object(n),!0).forEach(function(t){T(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function T(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=j(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=j(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==j(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function N(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,l,i=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return M(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?M(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var R=window.rankMathComponents,z=R.ListTable,U=R.TableSkeleton,B=function(e){var t=e.score;if(!t)return wp.element.createElement("span",{className:"rank-math-seo-score na"},wp.element.createElement("strong",null,(0,r.__)("Not Set","seo-by-rank-math")));var n="bad";return t>80?n="great":t>50&&(n="good"),wp.element.createElement("span",{className:"rank-math-seo-score ".concat(n)},wp.element.createElement("strong",null,t," / 100"))};const F=function(){var e=P(),t=e.tabName,n=function(e){var t=e.get(w)||"",n=t?t.split(",").filter(Boolean):[];return{post_type:n.length>0?n:[],is_orphan:e.get(v)||"",seo_score_range:e.get(x)||""}}(e.searchParams),l=N((0,a.useState)(function(){return{post_type:n.post_type||[],is_orphan:n.is_orphan||"",seo_score_range:n.seo_score_range||""}}),2),i=l[0],s=l[1],c=g({dataEndpoint:"/rankmath/v1/links/posts",statsEndpoint:"/rankmath/v1/links/posts-stats",initialFilters:{search:"",post_type:n.post_type||[],is_orphan:n.is_orphan||"",seo_score_range:n.seo_score_range||"",orderby:"post_title",order:"ASC"}}),m=c.data,u=c.stats,p=c.loading,d=c.pagination,h=c.filters,f=c.sortConfig,b=c.handleFilterChange,k=c.handlePageChange,y=c.handlePerPageChange,_=c.handleSortChange,j=(0,a.useCallback)(function(e,t){var n={};"incoming"===t?n.target_post_id=e:(n.source_id=e,"internal"===t?n.link_type="internal":"external"===t&&(n.link_type="external")),function(e){var t=new URLSearchParams;e.source_id&&t.set(S,e.source_id),e.target_post_id&&t.set(C,e.target_post_id),e.link_type&&t.set(E,e.link_type);var n=t.toString();window.location.hash=n?"links?".concat(n):"links"}(n)},[]),A=(0,a.useMemo)(function(){return[{key:"post_title",label:(0,r.__)("Post Title","seo-by-rank-math"),isSortable:!0,isHideable:!1,render:function(e,t){return wp.element.createElement(React.Fragment,null,t.edit_url?wp.element.createElement("a",{href:t.edit_url,target:"_blank",rel:"noopener noreferrer"},e||(0,r.__)("(no title)","seo-by-rank-math")):e||(0,r.__)("(no title)","seo-by-rank-math"),t.post_url&&wp.element.createElement("div",{className:"rank-math-post-url"},t.post_url))}},{key:"internal_link_count",label:(0,r.__)("Internal Links","seo-by-rank-math"),isSortable:!0,render:function(e,t){var n=parseInt(e,10)||0;return 0===n?wp.element.createElement("span",{className:"rank-math-count-badge"},n):wp.element.createElement("button",{type:"button",className:"rank-math-count-badge rank-math-count-badge-link rank-math-tooltip",onClick:function(){return j(t.post_id,"internal")}},n,wp.element.createElement("span",null,(0,r.__)("View internal links from this post","seo-by-rank-math")))}},{key:"external_link_count",label:(0,r.__)("External Links","seo-by-rank-math"),isSortable:!0,render:function(e,t){var n=parseInt(e,10)||0;return 0===n?wp.element.createElement("span",{className:"rank-math-count-badge"},n):wp.element.createElement("button",{type:"button",className:"rank-math-count-badge rank-math-count-badge-link rank-math-tooltip",onClick:function(){return j(t.post_id,"external")}},n,wp.element.createElement("span",null,(0,r.__)("View external links from this post","seo-by-rank-math")))}},{key:"incoming_link_count",label:(0,r.__)("Incoming Links","seo-by-rank-math"),isSortable:!0,render:function(e,t){var n=parseInt(e,10)||0;return 0===n?wp.element.createElement("span",{className:"rank-math-orphan-warning rank-math-tooltip",title:(0,r.__)("Orphan post â€” no incoming links","seo-by-rank-math")},wp.element.createElement("i",{className:"dashicons dashicons-warning"}),wp.element.createElement("span",null,(0,r.__)("This post has no internal links. We recommend that you add links to this URL in other posts of your website.","seo-by-rank-math"))):wp.element.createElement("button",{type:"button",className:"rank-math-count-badge rank-math-count-badge-link rank-math-tooltip",onClick:function(){return j(t.post_id,"incoming")}},n,wp.element.createElement("span",null,(0,r.__)("View incoming links to this post","seo-by-rank-math")))}},{key:"seo_score",label:(0,r.__)("SEO Score","seo-by-rank-math"),isSortable:!0,render:function(e){return wp.element.createElement(B,{score:e})}},{key:"post_type_label",label:(0,r.__)("Type","seo-by-rank-math"),isSortable:!1,render:function(e,t){return e||t.post_type}}]},[j]),T=[{label:(0,r.__)("All Posts","seo-by-rank-math"),value:"",statusType:"all"},{label:(0,r.__)("Orphan Posts","seo-by-rank-math"),value:"orphan",statusType:"orphan"},{label:(0,r.__)("With Incoming Links","seo-by-rank-math"),value:"linked",statusType:"linked"}],M=[{label:(0,r.__)("All Scores","seo-by-rank-math"),value:"",statusType:"all"},{label:(0,r.__)("Great","seo-by-rank-math"),value:"great",statusType:"great"},{label:(0,r.__)("Good","seo-by-rank-math"),value:"good",statusType:"good"},{label:(0,r.__)("Bad","seo-by-rank-math"),value:"bad",statusType:"bad"},{label:(0,r.__)("Not Set","seo-by-rank-math"),value:"no-score",statusType:"no-score"}],R=(0,a.useMemo)(function(){return[{key:"post_type",label:(0,r.__)("Post Type","seo-by-rank-math"),multiSelect:!0,allLabel:(0,r.__)("All Types","seo-by-rank-math"),options:(t=(0,o.map)((0,o.entries)(null===(e=window.rankMath.links)||void 0===e?void 0:e.postTypes),function(e){var t=N(e,2);return{value:t[0],label:t[1]}}),(0,o.reject)(t,{value:"attachment"}))}];var e,t},[]),F=(0,a.useCallback)(function(e){var t=f.orderby===e&&"ASC"===f.order?"DESC":"ASC";_(e,t)},[f,_]),L=(0,a.useCallback)(function(e){s(e),O(t,e),void 0!==e.post_type&&b("post_type",e.post_type)},[t,b]),D=(0,a.useCallback)(function(e){s(e),function(e){var t=P().searchParams;t.delete(w),t.delete(v),t.delete(x),t.set("page","1");var n=t.toString();window.location.hash=n?"".concat(e,"?").concat(n):e}(t),b("post_type",[])},[t,b]),W=(0,a.useCallback)(function(e){b("is_orphan",e);var n=I(I({},i),{},{is_orphan:e});s(n),O(t,n)},[i,t,b]),G=(0,a.useCallback)(function(e){b("seo_score_range",e);var n=I(I({},i),{},{seo_score_range:e});s(n),O(t,n)},[i,t,b]),Y=(0,a.useMemo)(function(){return u?[{label:(0,r.__)("Total Posts","seo-by-rank-math"),value:(u.total_posts||0).toLocaleString()},{label:(0,r.__)("Orphan Posts","seo-by-rank-math"),value:(u.orphan_posts||0).toLocaleString()}]:[]},[u]),$=(0,a.useMemo)(function(){return{key:f.orderby,direction:"ASC"===f.order?"asc":"desc"}},[f]);return p&&0===m.length?wp.element.createElement(U,{columns:6,rows:10}):wp.element.createElement("div",{className:"rank-math-section-card"},wp.element.createElement(z,{headers:A,rows:m,exportFilename:"rank-math-posts",stats:Y,currentPage:d.page,rowsPerPage:d.perPage,totalItems:d.total,totalPages:d.pages,onPageChange:k,onRowsPerPageChange:y,sortConfig:$,onSortChange:F,activeFilters:h,onFilterChange:function(e){Object.entries(e).forEach(function(e){var t=N(e,2),n=t[0],a=t[1];b(n,a)})},primaryToggle:{options:T,value:h.is_orphan||"",onChange:W},secondaryToggle:{options:M,value:h.seo_score_range||"",onChange:G},filters:R,appliedFilters:i,onApplyFilters:L,onClearFilters:D,storageKey:"links-posts"}))},L=wp.components,D=React;function W(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function G(e,t){let n,a,r=[];for(let o=0;o<e.length;o++){const l=e[o];if("string"!==l.type){if(void 0===t[l.value])throw new Error(`Invalid interpolation, missing component node: \`${l.value}\``);if("object"!=typeof t[l.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${l.value}\``);if("componentClose"===l.type)throw new Error(`Missing opening component token: \`${l.value}\``);if("componentOpen"===l.type){n=t[l.value],a=o;break}r.push(t[l.value])}else r.push(l.value)}if(n){const o=function(e,t){const n=t[e];let a=0;for(let r=e+1;r<t.length;r++){const e=t[r];if(e.value===n.value){if("componentOpen"===e.type){a++;continue}if("componentClose"===e.type){if(0===a)return r;a--}}}throw new Error("Missing closing component token `"+n.value+"`")}(a,e),l=G(e.slice(a+1,o),t),i=(0,D.cloneElement)(n,{},l);if(r.push(i),o<e.length-1){const n=G(e.slice(o+1),t);r=r.concat(n)}}return r=r.filter(Boolean),0===r.length?null:1===r.length?r[0]:(0,D.createElement)(D.Fragment,null,...r)}function Y(e){const{mixedString:t,components:n,throwErrors:a}=e;if(!n)return t;if("object"!=typeof n){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const r=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(W)}(t);try{return G(r,n)}catch(e){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}const $=function(e){var t=e.tags,n=e.components,a=e.children;return n=n||{},!1===(0,o.isUndefined)(t)&&(t=t.split(",")).forEach(function(e){var t=e;n[e]=wp.element.createElement(t,null)}),Y({mixedString:a,components:n})};function K(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=rankMath.links[e]||"";if(!a)return"#";if(!t)return a;var r={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=a,l="",i=a.indexOf("#");-1!==i&&(o=a.substring(0,i),l=a.substring(i));var s=Object.keys(r).map(function(e){return"".concat(e,"=").concat(r[e])}).join("&"),c=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+c+s+l+n}n.dn(K);var H=function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,o.includes)(e,"?")||(e+="?"),e+n.toString()};const V=function(e){var t=e.width,n=void 0===t?40:t,a=e.showProNotice,l=void 0!==a&&a,i=e.isBulkEdit,s=void 0!==i&&i,c=e.isResearch,m=void 0!==c&&c,u=e.creditsRequired,p=void 0===u?0:u,d=e.isKeywordIntent,h=void 0!==d&&d,f=e.medium,b=void 0===f?"":f;if(l)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(L.Button,{href:K("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Get PRO Now â†’","seo-by-rank-math"))))}(n,b);if(h)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(L.Button,{href:K("pro",t),target:"_blank",className:"button button-primary is-green"},(0,r.__)("Update Now","seo-by-rank-math"))))}(n,b);var k=(0,o.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),g=k.isUserRegistered,y=k.plan,_="free"===y,w=k.credits>p,v=k.isMigrating;if(w&&m&&!_&&k.credits<500&&(w=!1),g&&y&&w&&!v&&!_)return null;var x,E="width-"+n;return!g||!y||w&&_?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+E},wp.element.createElement("h3",null,(0,r.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!g&&!s&&(0,r.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),g&&!y&&!s&&!_&&(0,r.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),g&&!s&&_&&(0,r.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),s&&(0,r.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,r.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,r.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n,s,_),!g&&wp.element.createElement(L.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,r.__)("Connect Now","seo-by-rank-math")),g&&(!y||_)&&wp.element.createElement(L.Button,{href:H(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",_),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")))):v?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+E},wp.element.createElement("h3",null,(0,r.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,r.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,r.__)("reach out to the support team.","seo-by-rank-math")),(0,r.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+E},wp.element.createElement("h3",null,(0,r.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(x=k.resetDate)?wp.element.createElement($,{components:{strong:wp.element.createElement("strong",null)}},(0,r.sprintf)((0,r.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+x+"{{/strong}}")):(0,r.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(L.Button,{href:H(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",_),className:"button button-primary is-green",target:"_blank"},(0,r.__)("Learn More","seo-by-rank-math")),wp.element.createElement(L.Button,{variant:"link",href:H(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",_),className:"button button-secondary",target:"_blank"},(0,r.__)("Missing Credits?","seo-by-rank-math"))))};function q(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,l,i=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return J(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?J(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function J(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.dn(V);var Q=window.rankMathComponents,X=Q.ListTable,Z=Q.TableSkeleton,ee=function(e){var t=e.onClose;return wp.element.createElement(L.Modal,{onRequestClose:t,className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!0},wp.element.createElement(V,{showProNotice:!0,medium:"Links"}))},te=function(e){var t=e.type;return wp.element.createElement("span",{className:"rank-math-link-type-badge ".concat(t)},"internal"===t?(0,r.__)("Internal","seo-by-rank-math"):(0,r.__)("External","seo-by-rank-math"))};const ne=function(){var e,t,n,l=q((0,a.useState)(!1),2),i=l[0],s=l[1],c=(e=P().searchParams,t=e.get(E)||"",n="","internal"===t?n="1":"external"===t&&(n="0"),{source_id:parseInt(e.get(S),10)||0,target_post_id:parseInt(e.get(C),10)||0,is_internal:n}),m=g({dataEndpoint:"/rankmath/v1/links/links",statsEndpoint:"/rankmath/v1/links/links-stats",initialFilters:{search:"",source_id:c.source_id,target_post_id:c.target_post_id,is_internal:c.is_internal,orderby:"id",order:"DESC"}}),u=m.data,p=m.stats,d=m.loading,h=m.pagination,f=m.filters,b=m.sortConfig,k=m.handleFilterChange,y=m.handlePageChange,_=m.handlePerPageChange,w=m.handleSortChange,v=(0,a.useMemo)(function(){return[{key:"source_title",label:(0,r.__)("Source Post","seo-by-rank-math"),isSortable:!0,isHideable:!1,render:function(e,t){return wp.element.createElement(React.Fragment,null,t.source_edit_url?wp.element.createElement("a",{href:t.source_edit_url,target:"_blank",rel:"noopener noreferrer"},e||(0,r.__)("(no title)","seo-by-rank-math")):e||(0,r.__)("(no title)","seo-by-rank-math"),t.source_url&&wp.element.createElement("div",{className:"rank-math-post-url"},t.source_url))}},{key:"url",label:(0,r.__)("Destination","seo-by-rank-math"),isSortable:!0,isHideable:!1,render:function(e,t){return wp.element.createElement(React.Fragment,null,wp.element.createElement("a",{href:e,target:"_blank",rel:"noopener noreferrer"},t.target_title||e),t.target_title&&wp.element.createElement("div",{className:"rank-math-post-url"},e))}},{key:"type",label:(0,r.__)("Link Type","seo-by-rank-math"),isSortable:!0,render:function(e){return wp.element.createElement(te,{type:e})}}]},[]),x=[{label:(0,r.__)("All","seo-by-rank-math"),value:""},{label:(0,r.__)("Internal","seo-by-rank-math"),value:"1",statusType:"internal"},{label:(0,r.__)("External","seo-by-rank-math"),value:"0",statusType:"external"}],O=[{label:(0,r.__)("All","seo-by-rank-math"),value:"",statusType:"all"},{label:(0,r.__)("Success","seo-by-rank-math"),value:"2xx",statusType:"success"},{label:(0,r.__)("Broken","seo-by-rank-math"),value:"broken",statusType:"error"},{label:(0,r.__)("Redirects","seo-by-rank-math"),value:"3xx",statusType:"warning"},{label:(0,r.__)("Robots Blocked","seo-by-rank-math"),value:"robots_blocked",statusType:"blocked"},{label:(0,r.__)("Marked Safe","seo-by-rank-math"),value:"marked_safe",statusType:"markedSafe"},{label:(0,r.__)("Unchecked","seo-by-rank-math"),value:"unchecked",statusType:"unchecked"}],j=(0,a.useCallback)(function(e){""!==e&&s(!0)},[s]),A=(0,a.useCallback)(function(e){var t=b.orderby===e&&"ASC"===b.order?"DESC":"ASC";w(e,t)},[b,w]),I=(0,a.useMemo)(function(){return p?[{label:(0,r.__)("Total Links","seo-by-rank-math"),value:(0,o.get)(p,"total",0)},{label:(0,r.__)("Internal Links","seo-by-rank-math"),value:(0,o.get)(p,"internal",0)},{label:(0,r.__)("External Links","seo-by-rank-math"),value:(0,o.get)(p,"external",0)}]:[]},[p]),T=(0,a.useMemo)(function(){return{key:b.orderby,direction:"ASC"===b.order?"asc":"desc"}},[b]);return d&&0===u.length?wp.element.createElement(Z,{columns:3,rows:10}):wp.element.createElement("div",{className:"rank-math-section-card"},i&&wp.element.createElement(ee,{onClose:function(){return s(!1)}}),wp.element.createElement(X,{headers:v,rows:u,stats:I,currentPage:h.page,rowsPerPage:h.perPage,totalItems:h.total,totalPages:h.pages,onPageChange:y,onRowsPerPageChange:_,sortConfig:T,onSortChange:A,activeFilters:f,onFilterChange:function(e){Object.entries(e).forEach(function(e){var t=q(e,2),n=t[0],a=t[1];k(n,a)})},primaryToggle:{options:x,value:void 0!==f.is_internal&&""!==f.is_internal?String(f.is_internal):"",filterKey:"is_internal",onChange:function(e){k("is_internal",e),function(e){var t=P().searchParams;t.delete(E),"1"===e?t.set(E,"internal"):"0"===e&&t.set(E,"external");var n=t.toString();window.location.hash=n?"links?".concat(n):"links"}(e)}},secondaryToggle:{options:O,value:"",onChange:j},storageKey:"links-links"}))};const ae=function(){var e,t=(null===(e=window.rankMath.links)||void 0===e?void 0:e.imagesUrl)||"";return wp.element.createElement("div",{className:"rank-math-pro-tab-preview"},wp.element.createElement("img",{src:t+"bulk-update.jpg",alt:""}),wp.element.createElement(V,{showProNotice:!0,width:"width-50",medium:"Bulk+Update"}))};const re=function(){var e,t=(null===(e=window.rankMath.links)||void 0===e?void 0:e.imagesUrl)||"";return wp.element.createElement("div",{className:"rank-math-pro-tab-preview"},wp.element.createElement("img",{src:t+"keyword-maps.jpg",alt:""}),wp.element.createElement(V,{showProNotice:!0,width:"width-50",medium:"Keyword+Maps"}))},oe=window.rankMathComponents;function le(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,l,i=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);s=!0);}catch(e){c=!0,r=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ie(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ie(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ie(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var se=function(e){return e&&"#"!==e?e.replace("#","").split("?")[0]:"posts"};const ce=function(){var e=le((0,a.useState)(window.location.hash),2),t=e[0],n=e[1];(0,a.useEffect)(function(){var e=function(){n(window.location.hash)};return window.addEventListener("hashchange",e),function(){return window.removeEventListener("hashchange",e)}},[]);var o=se(t);return wp.element.createElement(React.Fragment,null,wp.element.createElement(oe.DashboardHeader,{page:(0,r.__)("Link Genius","seo-by-rank-math")}),wp.element.createElement("div",{className:"wrap rank-math-wrap rank-math-links-page"},wp.element.createElement(oe.TabPanel,{key:o,className:"rank-math-tabs",activeClass:"is-active",initialTabName:o,tabs:[{id:"posts",name:"posts",title:(0,r.__)("Posts","seo-by-rank-math"),view:F,className:"rank-math-posts-tab rank-math-tab"},{id:"links",name:"links",title:(0,r.__)("Links","seo-by-rank-math"),view:ne,className:"rank-math-links-tab rank-math-tab"},{id:"bulk-update",name:"bulk-update",title:(0,r.__)("Bulk Update","seo-by-rank-math"),view:ae,className:"rank-math-bulk-update-tab rank-math-tab"},{id:"keyword-maps",name:"keyword-maps",title:(0,r.__)("Keyword Maps","seo-by-rank-math"),view:re,className:"rank-math-keyword-maps-tab rank-math-tab"}],onSelect:function(e){se(window.location.hash)!==e&&(window.location.hash=e)}},function(e){return wp.element.createElement("div",{className:"rank-math-tab-content rank-math-tab-content-"+e.name},(0,a.createElement)(e.view,{key:e.name}))})))};var me=n(72),ue=n.n(me),pe=n(825),de=n.n(pe),he=n(659),fe=n.n(he),be=n(56),ke=n.n(be),ge=n(540),ye=n.n(ge),_e=n(113),we=n.n(_e),ve=n(920),xe={};xe.styleTagTransform=we(),xe.setAttributes=ke(),xe.insert=fe().bind(null,"head"),xe.domAPI=de(),xe.insertStyleElement=ye();ue()(ve.A,xe);ve.A&&ve.A.locals&&ve.A.locals;var Ee=document.getElementById("rank-math-links-page-container");Ee&&(0,a.createRoot)(Ee).render((0,a.createElement)(ce))}();PK     ¥ŠU]ëÚ+¹  ¹  6  includes/modules/links/assets/src/scss/_variables.scssnu „[µü¤        /**
 * SCSS Variables
 *
 * Design tokens for the Links module (Free)
 * Aligned with WordPress admin color palette and PRO design system
 */

// ============================================
// Colors - Primary
// ============================================
$color-primary: #2271b1;
$color-primary-hover: #135e96;
$color-primary-dark: #0a4b78;
$color-primary-light: #e0e5f0;
$color-primary-lightest: #f0f4f8;

// ============================================
// Colors - Semantic
// ============================================
$color-success: #4ab147;
$color-success-bg: #d4edda;
$color-success-text: #155724;
$color-success-dark: #2d7a2a;

$color-danger: #d63638;
$color-danger-hover: #b32d2e;
$color-danger-bg: #f8d7da;
$color-danger-text: #721c24;

$color-warning: #f0b849;
$color-warning-bg: #fff3cd;
$color-warning-text: #856404;

$color-info: #00a0d2;
$color-info-bg: #d1ecf1;
$color-info-text: #0c5460;

// ============================================
// Colors - Grays & Text
// ============================================
$color-text-primary: #1e1e1e;
$color-text-secondary: #50575e;
$color-text-tertiary: #757575;
$color-text-muted: #a0a5aa;
$color-text-dark: #1d2327;
$color-text-light: #646970;

$color-border: #e0e0e0;
$color-border-light: #f0f0f0;
$color-border-dark: #dcdcde;
$color-border-input: #8c8f94;

$color-bg-white: #fff;
$color-bg-light: #f8f9fa;
$color-bg-lighter: #fafafa;
$color-bg-hover: #f6f7f7;
$color-bg-gray: #f0f0f1;

// Skeleton loading colors
$color-skeleton-base: #f2f3f5;
$color-skeleton-highlight: #e9eaed;

// ============================================
// Spacing
// ============================================
$spacing-xs: 4px;
$spacing-sm: 8px;
$spacing-md: 12px;
$spacing-lg: 16px;
$spacing-xl: 20px;
$spacing-2xl: 24px;
$spacing-3xl: 32px;
$spacing-4xl: 40px;

// ============================================
// Border Radius
// ============================================
$radius-sm: 3px;
$radius-md: 4px;
$radius-lg: 6px;
$radius-xl: 8px;

// ============================================
// Transitions
// ============================================
$transition-fast: 0.15s ease;
$transition-normal: 0.2s ease;

// ============================================
// Shadows
// ============================================
$shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
$shadow-focus: 0 0 0 1px #2271b1;

// ============================================
// Typography
// ============================================
$font-size-xs: 11px;
$font-size-sm: 12px;
$font-size-base: 13px;
$font-size-md: 14px;
$font-size-lg: 18px;

$font-weight-normal: 400;
$font-weight-medium: 500;
$font-weight-semibold: 600;
$font-weight-bold: 700;

$line-height-normal: 1.4;
$line-height-relaxed: 1.5;

// ============================================
// Component-specific
// ============================================

// Table
$table-header-bg: $color-bg-light;
$table-row-hover: #f5f5f5;
$table-cell-padding: $spacing-lg $spacing-xl;

// Badge
$badge-padding: 4px 10px;
$badge-font-size: $font-size-sm;
$badge-radius: $radius-md;

// Button
$button-padding: 8px $spacing-lg;
$button-height: 36px;

// Input
$input-height: 38px;
$input-padding: 6px $spacing-md;
$input-border-width: 1px;

// Breakpoints
$breakpoint-mobile: 782px;
PK     ¥ŠU]ñŸUÞv  v  6  includes/modules/links/assets/src/scss/links-page.scssnu „[µü¤        /**
 * Links Page Styles (Free)
 *
 * Matches the PRO Link Genius UI design system.
 */

@import 'variables';

// ============================================
// PRO CTA variables & imports (required by _pro-cta.scss)
// ============================================
$namespace:  'rank-math';
$rm_brand:   #6666c3;
$primary:    #069de3;
$text:       #242628;
$dark_gray:  #7f868d;
$dark-gray:  #7f868d;
$color-1:    #10AC84;
$color-3:    #ed5e5e;
$light_gray: #dadfe4;

@import '../../../../../../assets/admin/scss/_mixins';
@import '../../../../../../assets/admin/scss/partials/common/_pro-cta';
@import '../../../../../../assets/admin/scss/sidebar/_modal';

// ============================================
// TabPanel wrapper reset
// ============================================
#rank-math-links-page-container {
	.rank-math-links-page.rank-math-wrap {
		margin-right: 0;
	}

	.rank-math-tab-panel {
		width: 100%;

		.components-tab-panel__tab-content {
			padding: 0;
			background: transparent;
			border-bottom: none;
		}
	}
}

// ============================================
// Tab content wrapper
// ============================================
.rank-math-tab-content {
	position: relative;
	margin-top: 16px;
	margin-left: 20px;
	margin-right: 40px;
}

// ============================================
// Section card
// ============================================
.rank-math-section-card {
	position: relative;
	background: $color-bg-white;
	border: 1px solid $color-border;
	border-radius: $radius-md;
	margin-bottom: 16px;
	overflow: hidden;
}

// ============================================
// PRO column blurring (Links tab)
// ============================================
.rank-math-pro-col-header {
	position: relative;

	.rank-math-pro-badge {
		display: inline-block;
		margin-left: $spacing-xs;
		padding: 1px 5px;
		border-radius: $radius-sm;
		background: $color-warning-bg;
		color: $color-warning-text;
		font-size: $font-size-xs;
		font-weight: $font-weight-semibold;
		vertical-align: middle;
		line-height: 1.4;
		letter-spacing: 0.3px;
	}
}

.rank-math-pro-cell {
	position: relative;
	overflow: hidden;

	.rank-math-pro-blur-text {
		filter: blur(4px);
		user-select: none;
		color: $color-text-secondary;
		pointer-events: none;
	}

	.rank-math-pro-upgrade-overlay {
		position: absolute;
		inset: 0;
		display: flex;
		align-items: center;
		justify-content: center;

		a {
			font-size: $font-size-xs;
			color: $color-primary;
			font-weight: $font-weight-medium;
			white-space: nowrap;
			text-decoration: none;

			&:hover {
				text-decoration: underline;
			}
		}
	}
}

// ============================================
// Upgrade PRO Modal
// ============================================
.rank-math-upgrade-pro-modal {
	.rank-math-upgrade-pro-modal-body {
		text-align: center;
		padding: $spacing-lg 0;

		.rank-math-upgrade-pro-icon {
			display: block;
			font-size: 36px;
			color: $color-warning;
			margin-bottom: $spacing-md;
		}

		p {
			font-size: $font-size-md;
			color: $color-text-secondary;
			margin: 0 0 $spacing-lg;
			line-height: $line-height-relaxed;
		}

		.rank-math-upgrade-pro-features {
			list-style: none;
			margin: 0 0 $spacing-xl;
			padding: 0;
			text-align: left;

			li {
				display: flex;
				align-items: center;
				gap: $spacing-sm;
				padding: $spacing-xs 0;
				font-size: $font-size-base;
				color: $color-text-secondary;

				&::before {
					content: 'âœ“';
					color: $color-success;
					font-weight: $font-weight-bold;
					flex-shrink: 0;
				}
			}
		}

		.rank-math-upgrade-pro-actions {
			display: flex;
			align-items: center;
			justify-content: center;
			gap: $spacing-md;
			flex-wrap: wrap;

			.rank-math-upgrade-pro-btn {
				min-width: 160px;
			}
		}
	}
}

// ============================================
// PRO tab preview (image + CTA overlay)
// ============================================
.rank-math-pro-tab-preview {
	position: relative;

	img {
		display: block;
		width: 100%;
		height: auto;
	}

	#rank-math-pro-cta {
		position: absolute;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		margin: 0;
		display: flex;
		align-items: center;
		justify-content: center;
	}
}

// ============================================
// Toggle filters layout (Links / Posts tabs)
// ============================================
.rank-math-table-header.has-toggle-filters {
	flex-direction: column;
	align-items: stretch;
	gap: 0;
	padding: 0;
}

.rank-math-table-toggle-row {
	display: flex;
	justify-content: space-between;
	align-items: stretch;
	padding: 0 $spacing-2xl 0 0;
	gap: $spacing-lg;
	flex-wrap: wrap;
	border-bottom: 1px solid $color-border;
	min-height: 52px;
}

.rank-math-table-toggle-left {
	display: flex;
	align-items: stretch;
	gap: 0;

	.rank-math-toggle-button-group.is-tab-style {
		align-items: stretch;

		.rank-math-toggle-button {
			display: flex;
			align-items: center;
			padding-bottom: 0;
			border-bottom-width: 2px;
			margin-bottom: -1px;
			outline: none;
		}
	}
}

.rank-math-table-toggle-right {
	display: flex;
	align-items: center;
	gap: $spacing-md;
}

// ============================================
// Link type badge (Internal / External)
// ============================================
.rank-math-link-type-badge {
	display: inline-block;
	padding: 3px 10px;
	border-radius: 4px;
	font-size: 12px;
	font-weight: 500;

	&.internal {
		background-color: #d4edda;
		color: #155724;
	}

	&.external {
		background-color: #d1ecf1;
		color: #0c5460;
	}
}
PK     ¥ŠU]¾ÞÆ§à  à  /  includes/modules/links/assets/src/links-page.jsnu „[µü¤        /**
 * Links page entry point.
 *
 * Mounts the React app on #rank-math-links-page-container.
 */

/**
 * WordPress dependencies
 */
import { createElement, createRoot } from '@wordpress/element'

/**
 * Internal dependencies
 */
import LinksPage from './features/links-page/LinksPage'
import './scss/links-page.scss'

const container = document.getElementById( 'rank-math-links-page-container' )
if ( container ) {
	createRoot( container ).render( createElement( LinksPage ) )
}
PK     ¥ŠU]!‰°Š  Š  H  includes/modules/links/assets/src/features/links-page/tabs/BulkUpdate.jsnu „[µü¤        /**
 * Internal dependencies
 */
import ErrorCTA from '@components/ErrorCTA'

const BulkUpdate = () => {
	const imagesUrl = window.rankMath.links?.imagesUrl || ''

	return (
		<div className="rank-math-pro-tab-preview">
			<img src={ imagesUrl + 'bulk-update.jpg' } alt="" />
			<ErrorCTA showProNotice={ true } width="width-50" medium="Bulk+Update" />
		</div>
	)
}

export default BulkUpdate
PK     ¥ŠU]ÕÌ¿
Â*  Â*  C  includes/modules/links/assets/src/features/links-page/tabs/Posts.jsnu „[µü¤        /**
 * Posts tab component.
 *
 * Shows posts with their internal/external/incoming link counts and SEO score.
 * Uses the shared ListTable component from @rank-math/components.
 */

/**
 * External dependencies
 */
import { entries, map, reject } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useCallback, useMemo } from '@wordpress/element'

/**
 * Internal dependencies
 */
import useTableData from '../hooks/useTableData'
import {
	parseHashParams,
	getPostsFiltersFromURL,
	setPostsFiltersInHash,
	clearPostsFiltersFromHash,
	navigateToLinksTab,
} from '../urlState'

const { ListTable, TableSkeleton } = window.rankMathComponents

/**
 * Get available post type options from localized data.
 *
 * @return {Array} Array of {label, value} options.
 */
const getPostTypeOptions = () => {
	const postTypes = map(
		entries( window.rankMath.links?.postTypes ),
		( [ value, label ] ) => ( { value, label } )
	)
	return reject( postTypes, { value: 'attachment' } )
}

/**
 * Render SEO score badge.
 *
 * @param {number} score SEO score value (0-100).
 */
const SeoScoreBadge = ( { score } ) => {
	if ( ! score ) {
		return (
			<span className="rank-math-seo-score na">
				<strong>{ __( 'Not Set', 'seo-by-rank-math' ) }</strong>
			</span>
		)
	}
	let scoreClass = 'bad'
	if ( score > 80 ) {
		scoreClass = 'great'
	} else if ( score > 50 ) {
		scoreClass = 'good'
	}
	return (
		<span className={ `rank-math-seo-score ${ scoreClass }` }>
			<strong>{ score } / 100</strong>
		</span>
	)
}

/**
 * Posts tab.
 *
 * @return {JSX.Element} Posts tab content.
 */
const Posts = () => {
	// Read initial filters from URL hash
	const { tabName, searchParams } = parseHashParams()
	const urlFilters = getPostsFiltersFromURL( searchParams )

	const [ appliedFilters, setAppliedFilters ] = useState( () => ( {
		post_type: urlFilters.post_type || [],
		is_orphan: urlFilters.is_orphan || '',
		seo_score_range: urlFilters.seo_score_range || '',
	} ) )

	const {
		data: posts,
		stats,
		loading,
		pagination,
		filters,
		sortConfig,
		handleFilterChange,
		handlePageChange,
		handlePerPageChange,
		handleSortChange,
	} = useTableData( {
		dataEndpoint: '/rankmath/v1/links/posts',
		statsEndpoint: '/rankmath/v1/links/posts-stats',
		initialFilters: {
			search: '',
			post_type: urlFilters.post_type || [],
			is_orphan: urlFilters.is_orphan || '',
			seo_score_range: urlFilters.seo_score_range || '',
			orderby: 'post_title',
			order: 'ASC',
		},
	} )

	// Navigate to Links tab filtered by this post's links
	const handleNavigateToLinks = useCallback( ( postId, linkType ) => {
		const linkFilters = {}
		if ( linkType === 'incoming' ) {
			linkFilters.target_post_id = postId
		} else {
			linkFilters.source_id = postId
			if ( linkType === 'internal' ) {
				linkFilters.link_type = 'internal'
			} else if ( linkType === 'external' ) {
				linkFilters.link_type = 'external'
			}
		}
		navigateToLinksTab( linkFilters )
	}, [] )

	// Table headers definition
	const headers = useMemo( () => [
		{
			key: 'post_title',
			label: __( 'Post Title', 'seo-by-rank-math' ),
			isSortable: true,
			isHideable: false,
			render: ( value, row ) => (
				<>
					{ row.edit_url ? (
						<a href={ row.edit_url } target="_blank" rel="noopener noreferrer">
							{ value || __( '(no title)', 'seo-by-rank-math' ) }
						</a>
					) : (
						value || __( '(no title)', 'seo-by-rank-math' )
					) }
					{ row.post_url && (
						<div className="rank-math-post-url">{ row.post_url }</div>
					) }
				</>
			),
		},
		{
			key: 'internal_link_count',
			label: __( 'Internal Links', 'seo-by-rank-math' ),
			isSortable: true,
			render: ( value, row ) => {
				const count = parseInt( value, 10 ) || 0
				if ( count === 0 ) {
					return <span className="rank-math-count-badge">{ count }</span>
				}
				return (
					<button
						type="button"
						className="rank-math-count-badge rank-math-count-badge-link rank-math-tooltip"
						onClick={ () => handleNavigateToLinks( row.post_id, 'internal' ) }
					>
						{ count }
						<span>{ __( 'View internal links from this post', 'seo-by-rank-math' ) }</span>
					</button>
				)
			},
		},
		{
			key: 'external_link_count',
			label: __( 'External Links', 'seo-by-rank-math' ),
			isSortable: true,
			render: ( value, row ) => {
				const count = parseInt( value, 10 ) || 0
				if ( count === 0 ) {
					return <span className="rank-math-count-badge">{ count }</span>
				}
				return (
					<button
						type="button"
						className="rank-math-count-badge rank-math-count-badge-link rank-math-tooltip"
						onClick={ () => handleNavigateToLinks( row.post_id, 'external' ) }
					>
						{ count }
						<span>{ __( 'View external links from this post', 'seo-by-rank-math' ) }</span>
					</button>
				)
			},
		},
		{
			key: 'incoming_link_count',
			label: __( 'Incoming Links', 'seo-by-rank-math' ),
			isSortable: true,
			render: ( value, row ) => {
				const count = parseInt( value, 10 ) || 0
				if ( count === 0 ) {
					return (
						<span className="rank-math-orphan-warning rank-math-tooltip" title={ __( 'Orphan post â€” no incoming links', 'seo-by-rank-math' ) }>
							<i className="dashicons dashicons-warning" />
							<span>{ __( 'This post has no internal links. We recommend that you add links to this URL in other posts of your website.', 'seo-by-rank-math' ) }</span>
						</span>
					)
				}
				return (
					<button
						type="button"
						className="rank-math-count-badge rank-math-count-badge-link rank-math-tooltip"
						onClick={ () => handleNavigateToLinks( row.post_id, 'incoming' ) }
					>
						{ count }
						<span>{ __( 'View incoming links to this post', 'seo-by-rank-math' ) }</span>
					</button>
				)
			},
		},
		{
			key: 'seo_score',
			label: __( 'SEO Score', 'seo-by-rank-math' ),
			isSortable: true,
			render: ( value ) => <SeoScoreBadge score={ value } />,
		},
		{
			key: 'post_type_label',
			label: __( 'Type', 'seo-by-rank-math' ),
			isSortable: false,
			render: ( value, row ) => value || row.post_type,
		},
	], [ handleNavigateToLinks ] )

	// Orphan filter toggle options â€” statusType drives active/hover color
	const orphanOptions = [
		{ label: __( 'All Posts', 'seo-by-rank-math' ), value: '', statusType: 'all' },
		{ label: __( 'Orphan Posts', 'seo-by-rank-math' ), value: 'orphan', statusType: 'orphan' },
		{ label: __( 'With Incoming Links', 'seo-by-rank-math' ), value: 'linked', statusType: 'linked' },
	]

	// SEO score range filter toggle options â€” statusType drives colored pill colors
	const seoScoreOptions = [
		{ label: __( 'All Scores', 'seo-by-rank-math' ), value: '', statusType: 'all' },
		{ label: __( 'Great', 'seo-by-rank-math' ), value: 'great', statusType: 'great' },
		{ label: __( 'Good', 'seo-by-rank-math' ), value: 'good', statusType: 'good' },
		{ label: __( 'Bad', 'seo-by-rank-math' ), value: 'bad', statusType: 'bad' },
		{ label: __( 'Not Set', 'seo-by-rank-math' ), value: 'no-score', statusType: 'no-score' },
	]

	// Post type filter via FilterStaging (multi-select)
	const filterStagingFilters = useMemo( () => [
		{
			key: 'post_type',
			label: __( 'Post Type', 'seo-by-rank-math' ),
			multiSelect: true,
			allLabel: __( 'All Types', 'seo-by-rank-math' ),
			options: getPostTypeOptions(),
		},
	], [] )

	const handleSortChange2 = useCallback( ( key ) => {
		const newOrder = sortConfig.orderby === key && sortConfig.order === 'ASC' ? 'DESC' : 'ASC'
		handleSortChange( key, newOrder )
	}, [ sortConfig, handleSortChange ] )

	// Apply staged filters to URL hash and to API
	const handleApplyFilters = useCallback( ( pendingFilters ) => {
		setAppliedFilters( pendingFilters )
		setPostsFiltersInHash( tabName, pendingFilters )
		if ( pendingFilters.post_type !== undefined ) {
			handleFilterChange( 'post_type', pendingFilters.post_type )
		}
	}, [ tabName, handleFilterChange ] )

	const handleClearFilters = useCallback( ( clearedFilters ) => {
		setAppliedFilters( clearedFilters )
		clearPostsFiltersFromHash( tabName )
		handleFilterChange( 'post_type', [] )
	}, [ tabName, handleFilterChange ] )

	// Sync toggle filters immediately to URL hash
	const handleOrphanChange = useCallback( ( value ) => {
		handleFilterChange( 'is_orphan', value )
		const newFilters = { ...appliedFilters, is_orphan: value }
		setAppliedFilters( newFilters )
		setPostsFiltersInHash( tabName, newFilters )
	}, [ appliedFilters, tabName, handleFilterChange ] )

	const handleSeoScoreChange = useCallback( ( value ) => {
		handleFilterChange( 'seo_score_range', value )
		const newFilters = { ...appliedFilters, seo_score_range: value }
		setAppliedFilters( newFilters )
		setPostsFiltersInHash( tabName, newFilters )
	}, [ appliedFilters, tabName, handleFilterChange ] )

	// Stats for the pagination footer
	const footerStats = useMemo( () => {
		if ( ! stats ) {
			return []
		}

		return [
			{ label: __( 'Total Posts', 'seo-by-rank-math' ), value: ( stats.total_posts || 0 ).toLocaleString() },
			{ label: __( 'Orphan Posts', 'seo-by-rank-math' ), value: ( stats.orphan_posts || 0 ).toLocaleString() },
		]
	}, [ stats ] )

	// Controlled sort config for ListTable
	const tableSortConfig = useMemo( () => ( {
		key: sortConfig.orderby,
		direction: sortConfig.order === 'ASC' ? 'asc' : 'desc',
	} ), [ sortConfig ] )

	if ( loading && posts.length === 0 ) {
		return <TableSkeleton columns={ 6 } rows={ 10 } />
	}

	return (
		<div className="rank-math-section-card">
			<ListTable
				headers={ headers }
				rows={ posts }
				exportFilename="rank-math-posts"
				stats={ footerStats }
				// Server-side pagination
				currentPage={ pagination.page }
				rowsPerPage={ pagination.perPage }
				totalItems={ pagination.total }
				totalPages={ pagination.pages }
				onPageChange={ handlePageChange }
				onRowsPerPageChange={ handlePerPageChange }
				// Server-side sorting
				sortConfig={ tableSortConfig }
				onSortChange={ handleSortChange2 }
				// Server-side filtering (search handled by ListTable's debounced search)
				activeFilters={ filters }
				onFilterChange={ ( newFilters ) => {
					Object.entries( newFilters ).forEach( ( [ key, value ] ) => {
						handleFilterChange( key, value )
					} )
				} }
				// Orphan filter as primaryToggle (tab style)
				primaryToggle={ {
					options: orphanOptions,
					value: filters.is_orphan || '',
					onChange: handleOrphanChange,
				} }
				// SEO score filter as secondaryToggle (colored pills)
				secondaryToggle={ {
					options: seoScoreOptions,
					value: filters.seo_score_range || '',
					onChange: handleSeoScoreChange,
				} }
				// Post type filter via FilterStaging (multi-select dropdown)
				filters={ filterStagingFilters }
				appliedFilters={ appliedFilters }
				onApplyFilters={ handleApplyFilters }
				onClearFilters={ handleClearFilters }
				storageKey="links-posts"
			/>

		</div>
	)
}

export default Posts
PK     ¥ŠU]Mù*Ž  Ž  I  includes/modules/links/assets/src/features/links-page/tabs/KeywordMaps.jsnu „[µü¤        /**
 * Internal dependencies
 */
import ErrorCTA from '@components/ErrorCTA'

const KeywordMaps = () => {
	const imagesUrl = window.rankMath.links?.imagesUrl || ''

	return (
		<div className="rank-math-pro-tab-preview">
			<img src={ imagesUrl + 'keyword-maps.jpg' } alt="" />
			<ErrorCTA showProNotice={ true } width="width-50" medium="Keyword+Maps" />
		</div>
	)
}

export default KeywordMaps
PK     ¥ŠU]„ú®éL  L  C  includes/modules/links/assets/src/features/links-page/tabs/Links.jsnu „[µü¤        /**
 * Links tab component.
 *
 * Shows links with URL, source post, and type.
 * PRO-only filters (anchor type, nofollow status) appear in the filter row
 * but open an upgrade CTA when applied.
 */

/**
 * External dependencies
 */
import { get } from 'lodash'

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useCallback, useMemo } from '@wordpress/element'
import { Modal } from '@wordpress/components'

/**
 * Internal dependencies
 */
import useTableData from '../hooks/useTableData'
import { parseHashParams, URL_PARAMS, setLinkTypeInHash } from '../urlState'
import ErrorCTA from '@components/ErrorCTA'

const { ListTable, TableSkeleton } = window.rankMathComponents

/**
 * PRO upgrade modal.
 *
 * @param {Function} onClose Callback to close the modal.
 */
const ProCTAModal = ( { onClose } ) => (
	<Modal
		onRequestClose={ onClose }
		className="rank-math-contentai-modal rank-math-modal rank-math-error-modal"
		shouldCloseOnClickOutside={ true }
	>
		<ErrorCTA showProNotice={ true } medium="Links" />
	</Modal>
)

/**
 * Read link filters from the URL hash (set when navigating from Posts tab counts).
 *
 * @return {Object} Initial filter values from URL.
 */
const getLinksFiltersFromURL = () => {
	const { searchParams } = parseHashParams()
	const linkType = searchParams.get( URL_PARAMS.LINK_TYPE ) || ''
	let isInternal = ''
	if ( linkType === 'internal' ) {
		isInternal = '1'
	} else if ( linkType === 'external' ) {
		isInternal = '0'
	}
	return {
		source_id: parseInt( searchParams.get( URL_PARAMS.SOURCE_ID ), 10 ) || 0,
		target_post_id: parseInt( searchParams.get( URL_PARAMS.TARGET_POST_ID ), 10 ) || 0,
		is_internal: isInternal,
	}
}

/**
 * Link type badge.
 *
 * @param {string} type 'internal' or 'external'
 */
const LinkTypeBadge = ( { type } ) => (
	<span className={ `rank-math-link-type-badge ${ type }` }>
		{ type === 'internal' ? __( 'Internal', 'seo-by-rank-math' ) : __( 'External', 'seo-by-rank-math' ) }
	</span>
)

/**
 * Links tab.
 *
 * @return {JSX.Element} Links tab content.
 */
const Links = () => {
	const [ upgradeModalOpen, setUpgradeModalOpen ] = useState( false )

	// Read initial filters from URL hash (set when clicking counts in Posts tab)
	const urlFilters = getLinksFiltersFromURL()

	const {
		data: links,
		stats,
		loading,
		pagination,
		filters,
		sortConfig,
		handleFilterChange,
		handlePageChange,
		handlePerPageChange,
		handleSortChange,
	} = useTableData( {
		dataEndpoint: '/rankmath/v1/links/links',
		statsEndpoint: '/rankmath/v1/links/links-stats',
		initialFilters: {
			search: '',
			source_id: urlFilters.source_id,
			target_post_id: urlFilters.target_post_id,
			is_internal: urlFilters.is_internal,
			orderby: 'id',
			order: 'DESC',
		},
	} )

	// Table headers
	const headers = useMemo( () => [
		{
			key: 'source_title',
			label: __( 'Source Post', 'seo-by-rank-math' ),
			isSortable: true,
			isHideable: false,
			render: ( value, row ) => (
				<>
					{ row.source_edit_url ? (
						<a href={ row.source_edit_url } target="_blank" rel="noopener noreferrer">
							{ value || __( '(no title)', 'seo-by-rank-math' ) }
						</a>
					) : (
						value || __( '(no title)', 'seo-by-rank-math' )
					) }
					{ row.source_url && (
						<div className="rank-math-post-url">{ row.source_url }</div>
					) }
				</>
			),
		},
		{
			key: 'url',
			label: __( 'Destination', 'seo-by-rank-math' ),
			isSortable: true,
			isHideable: false,
			render: ( value, row ) => (
				<>
					<a href={ value } target="_blank" rel="noopener noreferrer">
						{ row.target_title || value }
					</a>
					{ row.target_title && (
						<div className="rank-math-post-url">{ value }</div>
					) }
				</>
			),
		},
		{
			key: 'type',
			label: __( 'Link Type', 'seo-by-rank-math' ),
			isSortable: true,
			render: ( value ) => <LinkTypeBadge type={ value } />,
		},
	], [] )

	// Link type toggle options
	const linkTypeOptions = [
		{ label: __( 'All', 'seo-by-rank-math' ), value: '' },
		{ label: __( 'Internal', 'seo-by-rank-math' ), value: '1', statusType: 'internal' },
		{ label: __( 'External', 'seo-by-rank-math' ), value: '0', statusType: 'external' },
	]

	// Link status toggle options (PRO-only â€” clicking any non-All value opens upgrade modal)
	const linkStatusOptions = [
		{ label: __( 'All', 'seo-by-rank-math' ), value: '', statusType: 'all' },
		{ label: __( 'Success', 'seo-by-rank-math' ), value: '2xx', statusType: 'success' },
		{ label: __( 'Broken', 'seo-by-rank-math' ), value: 'broken', statusType: 'error' },
		{ label: __( 'Redirects', 'seo-by-rank-math' ), value: '3xx', statusType: 'warning' },
		{ label: __( 'Robots Blocked', 'seo-by-rank-math' ), value: 'robots_blocked', statusType: 'blocked' },
		{ label: __( 'Marked Safe', 'seo-by-rank-math' ), value: 'marked_safe', statusType: 'markedSafe' },
		{ label: __( 'Unchecked', 'seo-by-rank-math' ), value: 'unchecked', statusType: 'unchecked' },
	]

	const handleStatusToggle = useCallback( ( value ) => {
		if ( value !== '' ) {
			setUpgradeModalOpen( true )
		}
	}, [ setUpgradeModalOpen ] )

	const handleSortChange2 = useCallback( ( key ) => {
		const newOrder = sortConfig.orderby === key && sortConfig.order === 'ASC' ? 'DESC' : 'ASC'
		handleSortChange( key, newOrder )
	}, [ sortConfig, handleSortChange ] )

	// Footer stats
	const footerStats = useMemo( () => {
		if ( ! stats ) {
			return []
		}

		return [
			{
				label: __( 'Total Links', 'seo-by-rank-math' ),
				value: get( stats, 'total', 0 ),
			},
			{
				label: __( 'Internal Links', 'seo-by-rank-math' ),
				value: get( stats, 'internal', 0 ),
			},
			{
				label: __( 'External Links', 'seo-by-rank-math' ),
				value: get( stats, 'external', 0 ),
			},
		]
	}, [ stats ] )

	// Controlled sort config
	const tableSortConfig = useMemo( () => ( {
		key: sortConfig.orderby,
		direction: sortConfig.order === 'ASC' ? 'asc' : 'desc',
	} ), [ sortConfig ] )

	if ( loading && links.length === 0 ) {
		return <TableSkeleton columns={ 3 } rows={ 10 } />
	}

	return (
		<div className="rank-math-section-card">
			{ upgradeModalOpen && (
				<ProCTAModal onClose={ () => setUpgradeModalOpen( false ) } />
			) }
			<ListTable
				headers={ headers }
				rows={ links }
				stats={ footerStats }
				// Server-side pagination
				currentPage={ pagination.page }
				rowsPerPage={ pagination.perPage }
				totalItems={ pagination.total }
				totalPages={ pagination.pages }
				onPageChange={ handlePageChange }
				onRowsPerPageChange={ handlePerPageChange }
				// Server-side sorting
				sortConfig={ tableSortConfig }
				onSortChange={ handleSortChange2 }
				// Server-side filtering
				activeFilters={ filters }
				onFilterChange={ ( newFilters ) => {
					Object.entries( newFilters ).forEach( ( [ key, value ] ) => {
						handleFilterChange( key, value )
					} )
				} }
				// Link type toggle (tab style)
				primaryToggle={ {
					options: linkTypeOptions,
					value: filters.is_internal !== undefined && filters.is_internal !== '' ? String( filters.is_internal ) : '',
					filterKey: 'is_internal',
					onChange: ( value ) => {
						handleFilterChange( 'is_internal', value )
						setLinkTypeInHash( value )
					},
				} }
				// Link status toggle (colored pills â€” PRO-only, opens upgrade modal)
				secondaryToggle={ {
					options: linkStatusOptions,
					value: '',
					onChange: handleStatusToggle,
				} }
				storageKey="links-links"
			/>

		</div>
	)
}

export default Links
PK     ¥ŠU]Çè€·
  ·
  B  includes/modules/links/assets/src/features/links-page/LinksPage.jsnu „[µü¤        /**
 * LinksPage component.
 *
 * Main Links admin page with Posts and Links tabs.
 * Uses DashboardHeader and TabPanel from @rank-math/components.
 */

/**
 * WordPress dependencies
 */
import { __ } from '@wordpress/i18n'
import { useState, useEffect, createElement } from '@wordpress/element'

/**
 * Internal dependencies
 */
import Posts from './tabs/Posts'
import Links from './tabs/Links'
import BulkUpdate from './tabs/BulkUpdate'
import KeywordMaps from './tabs/KeywordMaps'
import { DashboardHeader, TabPanel } from '@rank-math/components'

/**
 * Parse URL hash to get active tab name.
 *
 * @param {string} hash URL hash string.
 * @return {string} Active tab name ('posts' or 'links').
 */
const getTabFromHash = ( hash ) => {
	if ( ! hash || hash === '#' ) {
		return 'posts'
	}
	const tabName = hash.replace( '#', '' ).split( '?' )[ 0 ]
	return tabName
}

const getTabs = () => [
	{
		id: 'posts',
		name: 'posts',
		title: __( 'Posts', 'seo-by-rank-math' ),
		view: Posts,
		className: 'rank-math-posts-tab rank-math-tab',
	},
	{
		id: 'links',
		name: 'links',
		title: __( 'Links', 'seo-by-rank-math' ),
		view: Links,
		className: 'rank-math-links-tab rank-math-tab',
	},
	{
		id: 'bulk-update',
		name: 'bulk-update',
		title: __( 'Bulk Update', 'seo-by-rank-math' ),
		view: BulkUpdate,
		className: 'rank-math-bulk-update-tab rank-math-tab',
	},
	{
		id: 'keyword-maps',
		name: 'keyword-maps',
		title: __( 'Keyword Maps', 'seo-by-rank-math' ),
		view: KeywordMaps,
		className: 'rank-math-keyword-maps-tab rank-math-tab',
	},
]

/**
 * Main Links page component.
 */
const LinksPage = () => {
	const [ currentHash, setCurrentHash ] = useState( window.location.hash )

	useEffect( () => {
		const handleHashChange = () => {
			setCurrentHash( window.location.hash )
		}
		window.addEventListener( 'hashchange', handleHashChange )
		return () => window.removeEventListener( 'hashchange', handleHashChange )
	}, [] )

	const activeTab = getTabFromHash( currentHash )

	return (
		<>
			<DashboardHeader page={ __( 'Link Genius', 'seo-by-rank-math' ) } />
			<div className="wrap rank-math-wrap rank-math-links-page">
				<TabPanel
					key={ activeTab }
					className="rank-math-tabs"
					activeClass="is-active"
					initialTabName={ activeTab }
					tabs={ getTabs() }
					onSelect={ ( tabName ) => {
						const currentTabName = getTabFromHash( window.location.hash )
						if ( currentTabName !== tabName ) {
							window.location.hash = tabName
						}
					} }
				>
					{ ( tab ) => (
						<div className={ 'rank-math-tab-content rank-math-tab-content-' + tab.name }>
							{ createElement( tab.view, { key: tab.name } ) }
						</div>
					) }
				</TabPanel>
			</div>
		</>
	)
}

export default LinksPage
PK     ¥ŠU]�Â    K  includes/modules/links/assets/src/features/links-page/hooks/useTableData.jsnu „[µü¤        /**
 * useTableData hook.
 *
 * Fetches paginated, filterable table data from a REST endpoint.
 */

/**
 * WordPress dependencies
 */
import { useState, useEffect, useCallback, useRef } from '@wordpress/element'
import apiFetch from '@wordpress/api-fetch'

/**
 * Fetch data from a REST endpoint with query args.
 *
 * @param {string} endpoint REST endpoint path (e.g. '/rankmath/v1/links/posts').
 * @param {Object} params   Query parameters.
 * @return {Promise<Object>} Response data.
 */
const fetchData = ( endpoint, params ) => {
	const query = Object.entries( params )
		.filter( ( [ , v ] ) => v !== '' && v !== null && v !== undefined )
		.map( ( [ k, v ] ) => {
			if ( Array.isArray( v ) ) {
				return v.map( ( item ) => `${ encodeURIComponent( k ) }[]=${ encodeURIComponent( item ) }` ).join( '&' )
			}
			return `${ encodeURIComponent( k ) }=${ encodeURIComponent( v ) }`
		} )
		.join( '&' )

	return apiFetch( { path: `${ endpoint }?${ query }` } )
}

/**
 * useTableData hook.
 *
 * @param {Object} options                Hook options.
 * @param {string} options.dataEndpoint   REST endpoint for rows.
 * @param {string} options.statsEndpoint  REST endpoint for stats.
 * @param {Object} options.initialFilters Initial filter values.
 * @return {Object} Table state and handlers.
 */
const useTableData = ( { dataEndpoint, statsEndpoint, initialFilters = {} } ) => {
	const [ data, setData ] = useState( [] )
	const [ stats, setStats ] = useState( null )
	const [ loading, setLoading ] = useState( true )
	const [ filters, setFilters ] = useState( initialFilters )
	const [ sortConfig, setSortConfig ] = useState( {
		orderby: initialFilters.orderby || '',
		order: initialFilters.order || 'ASC',
	} )
	const [ pagination, setPagination ] = useState( {
		page: 1,
		perPage: 10,
		total: 0,
		pages: 0,
	} )

	const fetchingRef = useRef( false )
	const isMountedRef = useRef( true )

	useEffect( () => {
		isMountedRef.current = true
		return () => {
			isMountedRef.current = false
		}
	}, [] )

	const fetchAll = useCallback( async ( currentFilters, currentSort, currentPage, perPage ) => {
		if ( fetchingRef.current ) {
			return
		}
		fetchingRef.current = true
		setLoading( true )

		const params = {
			...currentFilters,
			orderby: currentSort.orderby,
			order: currentSort.order,
			page: currentPage,
			per_page: perPage,
		}

		try {
			const [ dataResponse, statsResponse ] = await Promise.all( [
				fetchData( dataEndpoint, params ),
				statsEndpoint ? fetchData( statsEndpoint, {} ) : Promise.resolve( null ),
			] )

			if ( ! isMountedRef.current ) {
				return
			}

			// Determine data key from response (posts or links).
			const dataKey = dataResponse.posts ? 'posts' : 'links'
			setData( dataResponse[ dataKey ] || [] )
			setPagination( ( prev ) => ( {
				...prev,
				page: currentPage,
				perPage,
				total: dataResponse.total || 0,
				pages: dataResponse.pages || 0,
			} ) )

			if ( statsResponse ) {
				setStats( statsResponse )
			}
		} catch ( error ) {
			if ( isMountedRef.current ) {
				setData( [] )
			}
		} finally {
			if ( isMountedRef.current ) {
				setLoading( false )
			}
			fetchingRef.current = false
		}
	}, [ dataEndpoint, statsEndpoint ] ) // eslint-disable-line react-hooks/exhaustive-deps

	// Re-fetch when filters, sort, or page changes.
	useEffect( () => {
		fetchAll( filters, sortConfig, pagination.page, pagination.perPage )
	}, [ filters, sortConfig, pagination.page, pagination.perPage ] ) // eslint-disable-line react-hooks/exhaustive-deps

	const handleFilterChange = useCallback( ( key, value ) => {
		setFilters( ( prev ) => ( { ...prev, [ key ]: value } ) )
		setPagination( ( prev ) => ( { ...prev, page: 1 } ) )
	}, [] )

	const handlePageChange = useCallback( ( newPage ) => {
		setPagination( ( prev ) => ( { ...prev, page: newPage } ) )
	}, [] )

	const handlePerPageChange = useCallback( ( newPerPage ) => {
		setPagination( ( prev ) => ( { ...prev, page: 1, perPage: newPerPage } ) )
	}, [] )

	const handleSortChange = useCallback( ( orderby, order ) => {
		setSortConfig( { orderby, order } )
		setPagination( ( prev ) => ( { ...prev, page: 1 } ) )
	}, [] )

	return {
		data,
		stats,
		loading,
		pagination,
		filters,
		sortConfig,
		handleFilterChange,
		handlePageChange,
		handlePerPageChange,
		handleSortChange,
	}
}

export default useTableData
PK     ¥ŠU]‚”ºÂ  Â  A  includes/modules/links/assets/src/features/links-page/urlState.jsnu „[µü¤        /**
 * URL State Management Utilities
 *
 * Handles URL hash parameter synchronization for table state.
 * Format: #tabname?param=value
 */

export const URL_PARAMS = {
	POST_TYPE: 'post_type',
	IS_ORPHAN: 'is_orphan',
	SEO_SCORE_RANGE: 'seo_score_range',
	LINK_TYPE: 'link_type',
	SOURCE_ID: 'source_id',
	TARGET_POST_ID: 'target_post_id',
}

/**
 * Parse current hash to get tab name and search params.
 *
 * @return {Object} Object with tabName and searchParams.
 */
export function parseHashParams() {
	const hash = window.location.hash // eslint-disable-line no-undef

	if ( ! hash || hash === '#' ) {
		return { tabName: 'posts', searchParams: new URLSearchParams() } // eslint-disable-line no-undef
	}

	const hashWithoutPrefix = hash.replace( '#', '' )
	const [ tabName, queryString ] = hashWithoutPrefix.split( '?' )

	return {
		tabName: tabName || 'posts',
		searchParams: new URLSearchParams( queryString || '' ), // eslint-disable-line no-undef
	}
}

/**
 * Extract Posts tab filters from URL search params.
 *
 * @param {URLSearchParams} searchParams URL search parameters.
 * @return {Object} Filter object for Posts tab.
 */
export function getPostsFiltersFromURL( searchParams ) {
	const postTypeParam = searchParams.get( URL_PARAMS.POST_TYPE ) || ''
	const postTypes = postTypeParam ? postTypeParam.split( ',' ).filter( Boolean ) : []

	return {
		post_type: postTypes.length > 0 ? postTypes : [],
		is_orphan: searchParams.get( URL_PARAMS.IS_ORPHAN ) || '',
		seo_score_range: searchParams.get( URL_PARAMS.SEO_SCORE_RANGE ) || '',
	}
}

/**
 * Set Posts tab filters in URL hash.
 *
 * @param {string} tabName Current tab name.
 * @param {Object} filters Filter object to serialize.
 */
export function setPostsFiltersInHash( tabName, filters ) {
	const { searchParams } = parseHashParams()

	searchParams.delete( URL_PARAMS.POST_TYPE )
	searchParams.delete( URL_PARAMS.IS_ORPHAN )
	searchParams.delete( URL_PARAMS.SEO_SCORE_RANGE )

	if ( filters.post_type && filters.post_type.length > 0 ) {
		searchParams.set( URL_PARAMS.POST_TYPE, filters.post_type.join( ',' ) )
	}
	if ( filters.is_orphan ) {
		searchParams.set( URL_PARAMS.IS_ORPHAN, filters.is_orphan )
	}
	if ( filters.seo_score_range ) {
		searchParams.set( URL_PARAMS.SEO_SCORE_RANGE, filters.seo_score_range )
	}

	// Reset to page 1 when filters change.
	searchParams.set( 'page', '1' )

	const queryString = searchParams.toString()
	window.location.hash = queryString ? `${ tabName }?${ queryString }` : tabName // eslint-disable-line no-undef
}

/**
 * Clear all Posts tab filters from URL hash.
 *
 * @param {string} tabName Current tab name.
 */
export function clearPostsFiltersFromHash( tabName ) {
	const { searchParams } = parseHashParams()
	searchParams.delete( URL_PARAMS.POST_TYPE )
	searchParams.delete( URL_PARAMS.IS_ORPHAN )
	searchParams.delete( URL_PARAMS.SEO_SCORE_RANGE )

	// Reset to page 1 when filters are cleared.
	searchParams.set( 'page', '1' )

	const queryString = searchParams.toString()
	window.location.hash = queryString ? `${ tabName }?${ queryString }` : tabName // eslint-disable-line no-undef
}

/**
 * Set link_type filter in URL hash for Links tab.
 *
 * @param {string} isInternal Filter value: '1' (internal), '0' (external), or '' (all).
 */
export function setLinkTypeInHash( isInternal ) {
	const { searchParams } = parseHashParams()

	searchParams.delete( URL_PARAMS.LINK_TYPE )

	if ( isInternal === '1' ) {
		searchParams.set( URL_PARAMS.LINK_TYPE, 'internal' )
	} else if ( isInternal === '0' ) {
		searchParams.set( URL_PARAMS.LINK_TYPE, 'external' )
	}

	const queryString = searchParams.toString()
	window.location.hash = queryString ? `links?${ queryString }` : 'links' // eslint-disable-line no-undef
}

/**
 * Navigate to Links tab with pre-set source/target filters.
 *
 * @param {string} tabName   Current tab name ('posts').
 * @param {Object} linkFilters Object with source_id, target_post_id, link_type.
 */
export function navigateToLinksTab( linkFilters ) {
	const searchParams = new URLSearchParams() // eslint-disable-line no-undef

	if ( linkFilters.source_id ) {
		searchParams.set( URL_PARAMS.SOURCE_ID, linkFilters.source_id )
	}
	if ( linkFilters.target_post_id ) {
		searchParams.set( URL_PARAMS.TARGET_POST_ID, linkFilters.target_post_id )
	}
	if ( linkFilters.link_type ) {
		searchParams.set( URL_PARAMS.LINK_TYPE, linkFilters.link_type )
	}

	const queryString = searchParams.toString()
	window.location.hash = queryString ? `links?${ queryString }` : 'links' // eslint-disable-line no-undef
}
PK     ¥ŠU]owE!ò  ò  1  includes/modules/links/class-contentprocessor.phpnu „[µü¤        <?php
/**
 * The Content Processor.
 *
 * Extract and save links from the content of a given post.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Links
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Links;

use RankMath\Helpers\Str;
use RankMath\Helper;
use RankMath\Sitemap\Classifier;

defined( 'ABSPATH' ) || exit;

/**
 * ContentProcessor class.
 */
class ContentProcessor {

	/**
	 * Singleton instance.
	 *
	 * @var ContentProcessor
	 */
	private static $instance = null;

	/**
	 * Link storage.
	 *
	 * @var Storage
	 */
	public $storage;

	/**
	 * Link classifier.
	 *
	 * @var Classifier
	 */
	protected $classifier;

	/**
	 * Get singleton instance.
	 *
	 * @return ContentProcessor
	 */
	public static function get() {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 * The Constructor
	 */
	public function __construct() {
		$this->storage    = new Storage();
		$this->classifier = new Classifier( home_url() );
	}

	/**
	 * Process the content.
	 *
	 * @param int    $post_id The post ID.
	 * @param string $content The content.
	 */
	public function process( $post_id, $content ) {
		/**
		 * Filter: 'rank_math/links/extract' - Allow PRO to override extraction with enhanced single-pass version.
		 *
		 * @param null   $extracted_data Default null. Return array with 'links' and 'counts' to override.
		 * @param string $content        The post content.
		 * @param int    $post_id        The post ID.
		 */
		$extracted_data = apply_filters( 'rank_math/links/extract', null, $content, $post_id );

		if ( null !== $extracted_data ) {
			// PRO provided complete extraction - use it.
			$this->process_extracted_links( $post_id, $extracted_data );
			return;
		}

		// FREE's normal extraction continues.
		$links  = $this->extract( $content );
		$counts = [
			'internal_link_count' => 0,
			'external_link_count' => 0,
		];

		$new_links      = [];
		$post_permalink = $this->normalize_link( get_permalink( $post_id ) );
		foreach ( $links as $link ) {
			$normalized_link = $this->normalize_link( $link );
			if ( $post_permalink === $normalized_link ) {
				continue;
			}

			$this->process_link( $link, $new_links, $counts );
		}

		$old_links = $this->get_stored_internal_links( $post_id );
		$this->storage->cleanup( $post_id );
		$this->storage->save_links( $post_id, $new_links );
		$this->storage->update_link_counts( $post_id, $counts, array_merge( $new_links, $old_links ) );
	}

	/**
	 * Extract href property values from HTML string.
	 *
	 * @param string $content Content to extract links from.
	 *
	 * @return array The extracted links.
	 */
	public function extract( $content ) {
		$links = [];
		if ( false === Str::contains( 'href', $content ) ) {
			return $links;
		}

		$regexp = '<a\s[^>]*href=("??)([^" >]*?)\\1[^>]*>';

		// Case insensitive & ungreedy modifiers.
		if ( preg_match_all( "/$regexp/iU", $content, $matches, PREG_SET_ORDER ) ) {
			foreach ( $matches as $match ) {
				$links[] = trim( $match[2], "'" );
			}
		}

		return $links;
	}

	/**
	 * Retrieves the stored internal links for the supplied post.
	 *
	 * @param int $post_id The post to fetch links for.
	 *
	 * @return Link[] List of internal links connected to the post.
	 */
	public function get_stored_internal_links( $post_id ) {
		$links = $this->storage->get_links( $post_id );
		return array_filter( $links, [ $this, 'filter_internal_link' ] );
	}

	/**
	 * Check if link is valid.
	 *
	 * @param string $link Link to check.
	 *
	 * @return string|false Link type if valid, false if not valid.
	 */
	public function is_valid_link_type( $link ) {
		$type = false;
		if ( ! empty( $link ) && '#' !== $link[0] ) {
			$type = $this->classifier->classify( $link );
		}

		if ( Classifier::TYPE_INTERNAL === $type && preg_match( '/\.(jpg|jpeg|png|gif|bmp|pdf|mp3|zip)$/i', $link ) ) {
			$type = false;
		}

		/**
		 * Filter: 'rank_math/links/link_type' - Allow developers to filter the link type.
		 */
		return apply_filters( 'rank_math/links/link_type', $type, $link );
	}

	/**
	 * Normalize a link: remove trailing slash, remove fragment identifier, remove home_url.
	 *
	 * @param string $link The link to normalize.
	 * @return string
	 */
	public function normalize_link( $link ) {
		$normalized = untrailingslashit( str_replace( home_url(), '', explode( '#', $link )[0] ) );
		return $normalized;
	}

	/**
	 * Filter internal links.
	 *
	 * @param Link $link Link to test.
	 *
	 * @return bool True if internal, false if external.
	 */
	public function filter_internal_link( Link $link ) {
		return $link->get_type() === Classifier::TYPE_INTERNAL;
	}

	/**
	 * Gets the post id from a modified link.
	 *
	 * @param string $link Link to process.
	 * @return int
	 */
	public function maybe_product_id( $link ) {
		// Early bail if Remove Base option is not enabled.
		if ( ! Helper::get_settings( 'general.wc_remove_product_base' ) ) {
			return 0;
		}

		$product = get_page_by_path( basename( untrailingslashit( $link ) ), OBJECT, [ 'product' ] );
		if ( ! $product ) {
			return 0;
		}
		return $product->ID;
	}

	/**
	 * Process links extracted by PRO plugin with enhanced data.
	 *
	 * @param int   $post_id        The post ID.
	 * @param array $extracted_data Array with 'links' and 'counts' keys.
	 *
	 * @return void
	 */
	private function process_extracted_links( $post_id, $extracted_data ) {
		$new_links = isset( $extracted_data['links'] ) ? $extracted_data['links'] : [];
		$counts    = isset( $extracted_data['counts'] ) ? $extracted_data['counts'] : [
			'internal_link_count' => 0,
			'external_link_count' => 0,
		];

		// Convert type counts to expected format.
		if ( isset( $counts['internal'] ) ) {
			$counts['internal_link_count'] = $counts['internal'];
			unset( $counts['internal'] );
		}
		if ( isset( $counts['external'] ) ) {
			$counts['external_link_count'] = $counts['external'];
			unset( $counts['external'] );
		}

		$old_links = $this->get_stored_internal_links( $post_id );
		$this->storage->cleanup( $post_id );
		$this->storage->save_links( $post_id, $new_links );
		$this->storage->update_link_counts( $post_id, $counts, array_merge( $new_links, $old_links ) );
	}

	/**
	 * Process a link.
	 *
	 * @param string $link      Link to process.
	 * @param array  $new_links Links to add after process.
	 * @param array  $counts    Counts array.
	 */
	private function process_link( $link, &$new_links, &$counts ) {
		$link_type = $this->is_valid_link_type( $link );
		if ( empty( $link_type ) ) {
			return;
		}

		$target_post_id = 0;
		if ( Classifier::TYPE_INTERNAL === $link_type ) {
			$target_post_id = url_to_postid( $link );

			if ( 0 === $target_post_id ) {
				// Maybe a product with altered url!
				$target_post_id = $this->maybe_product_id( $link );
			}
		}
		$counts[ "{$link_type}_link_count" ] += 1;

		$new_links[] = new Link( $link, $target_post_id, $link_type );
	}
}
PK     ¥ŠU]j‚C´D	  D	  %  includes/modules/links/class-link.phpnu „[µü¤        <?php
/**
 * The SEO Link class.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Links
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Links;

defined( 'ABSPATH' ) || exit;

/**
 * Link class.
 */
class Link {

	/**
	 * Link URL.
	 *
	 * @var string
	 */
	protected $url;

	/**
	 * Link post ID.
	 *
	 * @var int
	 */
	protected $target_post_id;

	/**
	 * Link type.
	 *
	 * @var string
	 */
	protected $type;

	/**
	 * Extra properties for PRO features.
	 *
	 * @var array
	 */
	private $extra_properties = [];

	/**
	 * Sets the properties for the object.
	 *
	 * @param string $url            The URL.
	 * @param int    $target_post_id ID to the post where the link refers to.
	 * @param string $type           The URL type: internal or external.
	 */
	public function __construct( $url, $target_post_id, $type ) {
		$this->url            = $url;
		$this->target_post_id = $target_post_id;
		$this->type           = $type;
	}

	/**
	 * Magic setter for dynamic properties (PRO features).
	 *
	 * @param string $name  Property name.
	 * @param mixed  $value Property value.
	 */
	public function __set( $name, $value ) {
		$this->extra_properties[ $name ] = $value;
	}

	/**
	 * Magic getter for dynamic properties (PRO features).
	 *
	 * @param string $name Property name.
	 * @return mixed Property value or null.
	 */
	public function __get( $name ) {
		return isset( $this->extra_properties[ $name ] ) ? $this->extra_properties[ $name ] : null;
	}

	/**
	 * Magic isset for dynamic properties (PRO features).
	 *
	 * @param string $name Property name.
	 * @return bool True if property exists.
	 */
	public function __isset( $name ) {
		return isset( $this->extra_properties[ $name ] );
	}

	/**
	 * Returns the URL.
	 *
	 * @return string The URL.
	 */
	public function get_url() {
		return $this->url;
	}

	/**
	 * Returns the target post ID.
	 *
	 * @return int The target post ID.
	 */
	public function get_target_post_id() {
		return (int) $this->target_post_id;
	}

	/**
	 * Return the link type (internal/external).
	 *
	 * @return string The link type.
	 */
	public function get_type() {
		return $this->type;
	}
}
PK     ¥ŠU]ò—"  "  (  includes/modules/links/class-storage.phpnu „[µü¤        <?php
/**
 * The DB interface.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Links
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Links;

use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Storage class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
class Storage {

	/**
	 * Get query builder.
	 *
	 * @return \RankMath\Admin\Database\Query_Builder
	 */
	public function table() {
		return \RankMath\Helpers\DB::query_builder( 'rank_math_internal_links' );
	}

	/**
	 * Removes all data for a given post.
	 *
	 * @param  int $post_id The post ID to remove the records for.
	 *
	 * @return int|false The number of rows updated, or false on error.
	 */
	public function cleanup( $post_id ) {
		return $this->table()->where( 'post_id', $post_id )->delete();
	}

	/**
	 * Get array of links from the database for given post.
	 *
	 * @param int $post_id The post to get the links for.
	 *
	 * @return Link[] The links array.
	 */
	public function get_links( $post_id ) {
		$links   = [];
		$results = $this->table()
			->select( [ 'url', 'post_id', 'target_post_id', 'type' ] )
			->where( 'post_id', $post_id )
			->get();

		foreach ( $results as $link ) {
			$links[] = new Link( $link->url, $link->target_post_id, $link->type );
		}

		return $links;
	}

	/**
	 * Save links for a post.
	 *
	 * @param integer $post_id The post ID to save.
	 * @param Link[]  $links   The links to save.
	 *
	 * @return void
	 */
	public function save_links( $post_id, array $links ) {
		// Reduces lock count from N to 1, reducing lock duration by ~95%.
		if ( empty( $links ) ) {
			return;
		}

		/**
		 * Filter: Allow extensions to override link saving behavior.
		 *
		 * Return non-null to bypass default save and handle it yourself.
		 *
		 * @param null|bool $override  Whether to override. Return true to bypass default save.
		 * @param int       $post_id   Post ID.
		 * @param array     $links     Array of Link objects to save.
		 * @param Storage   $storage   Storage instance for table access.
		 */
		$override = apply_filters( 'rank_math/links/save_links', null, $post_id, $links, $this );
		if ( null !== $override ) {
			return;
		}

		global $wpdb;
		$table = $wpdb->prefix . 'rank_math_internal_links';

		// Build VALUES for batch INSERT.
		$values = [];
		foreach ( $links as $link ) {
			$values[] = $wpdb->prepare(
				'(%s, %d, %d, %s)',
				$link->get_url(),
				$post_id,
				$link->get_target_post_id(),
				$link->get_type()
			);
		}

		// Execute single INSERT with multiple VALUES.
		$wpdb->query(
			"INSERT INTO {$table} (url, post_id, target_post_id, type) VALUES " . implode( ', ', $values )
		);
	}

	/**
	 * Update the link counts for a post and its referenced posts.
	 *
	 * @param int      $post_id Post to update.
	 * @param int|null $counts  Links count.
	 * @param Link[]   $links   Links to update incoming link count.
	 */
	public function update_link_counts( $post_id, $counts, array $links ) {
		$counts = wp_parse_args(
			$counts,
			[
				'internal_link_count' => 0,
				'external_link_count' => 0,
			]
		);

		$this->save_meta_data( $post_id, $counts );
		$this->update_incoming_links( $post_id, $links );
	}

	/**
	 * Update the incoming link count.
	 *
	 * @param int    $post_id Post which is processed.
	 * @param Link[] $links   Links we need to update the incoming link count of.
	 *
	 * @return void
	 */
	public function update_incoming_links( $post_id, $links ) {
		$post_ids = $this->get_internal_post_ids( $links );
		$post_ids = array_merge( [ $post_id ], $post_ids );
		$this->update_incoming_link_count( $post_ids );
	}

	/**
	 * Get post IDs from the link objects.
	 *
	 * @param Link[] $links Links we need to update the incoming link count of.
	 *
	 * @return int[] List of post IDs.
	 */
	protected function get_internal_post_ids( $links ) {
		$post_ids = [];
		foreach ( $links as $link ) {
			$post_ids[] = $link->get_target_post_id();
		}

		return array_filter( $post_ids );
	}

	/**
	 * Update the incoming link count.
	 *
	 * @param array $post_ids The posts to update the link count for.
	 */
	public function update_incoming_link_count( array $post_ids ) {
		$results = $this->table()
			->selectCount( 'id', 'incoming' )
			->select( 'target_post_id as post_id' )
			->whereIn( 'target_post_id', $post_ids )
			->groupBy( 'target_post_id' )->get();

		$post_ids_non_zero = [];
		foreach ( $results as $result ) {
			$this->save_meta_data( $result->post_id, [ 'incoming_link_count' => $result->incoming ] );
			$post_ids_non_zero[] = $result->post_id;
		}

		$post_ids_zero = array_diff( $post_ids, $post_ids_non_zero );
		foreach ( $post_ids_zero as $post_id ) {
			$this->save_meta_data( $post_id, [ 'incoming_link_count' => 0 ] );
		}
	}

	/**
	 * Save the link count to the database.
	 *
	 * Previous SELECT-then-INSERT/UPDATE pattern caused deadlocks when
	 * multiple posts linked to the same target post.
	 *
	 * @param int   $post_id   The ID to save the link count for.
	 * @param array $meta_data The total amount of links.
	 */
	public function save_meta_data( $post_id, array $meta_data ) {
		global $wpdb;

		$table = $wpdb->prefix . 'rank_math_internal_meta';

		// Build field assignments for ON DUPLICATE KEY UPDATE.
		$allowed_keys = [ 'incoming_link_count', 'internal_link_count', 'external_link_count' ];
		$update_parts = [];
		foreach ( $meta_data as $key => $value ) {
			if ( ! in_array( $key, $allowed_keys, true ) ) {
				continue;
			}
			$update_parts[] = $wpdb->prepare( "{$key} = %d", $value );
		}

		// Single operation eliminates SELECT-then-INSERT gap.
		return $wpdb->query(
			$wpdb->prepare(
				"INSERT INTO {$table}
				(object_id, incoming_link_count, internal_link_count, external_link_count)
				VALUES (%d, %d, %d, %d)
				ON DUPLICATE KEY UPDATE " . implode( ', ', $update_parts ),
				$post_id,
				$meta_data['incoming_link_count'] ?? 0,
				$meta_data['internal_link_count'] ?? 0,
				$meta_data['external_link_count'] ?? 0
			)
		);
	}
}
PK     ¥ŠU]?ŸR=¤'  ¤'  &  includes/modules/links/class-links.phpnu „[µü¤        <?php
/**
 * The Link Counter module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Links
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Links;

use WP_Post;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Database\Database;
use RankMath\Admin\Post_Columns;
use RankMath\Links\Admin\Admin;
use RankMath\Links\Api\Controller;

defined( 'ABSPATH' ) || exit;

/**
 * Links class.
 */
class Links {

	use Hooker;

	/**
	 * Links data.
	 *
	 * @var array
	 */
	private $links_data = [];

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'save_post', 'save_post', 10, 2 );
		$this->action( 'delete_post', 'delete_post' );
		$this->action( 'rank_math/post/column/seo_details', 'post_column_content', 11, 3 );
		$this->action( 'rank_math/links/internal_links', 'cron_job' );
		$this->action( 'rest_api_init', 'register_rest_routes' );

		if ( is_admin() ) {
			new Admin();
		}
	}

	/**
	 * Register REST API routes.
	 */
	public function register_rest_routes() {
		$controller = new Controller();
		$controller->register_routes();
	}

	/**
	 * Process and save the links in a post.
	 *
	 * @param int     $post_id The post ID to check.
	 * @param WP_Post $post    The post object.
	 */
	public function save_post( $post_id, $post ) {
		if ( ! $post instanceof WP_Post || ! $this->is_processable( $post ) ) {
			return;
		}

		// Skip processing during meta-box-loader requests to avoid duplicate processing.
		// The actual save happens in the subsequent request.
		// phpcs:ignore WordPress.Security.NonceVerification.Recommended
		if ( isset( $_GET['meta-box-loader'] ) ) {
			return;
		}

		$this->process( $post_id, $post->post_content );
	}

	/**
	 * Remove the links data when the post is deleted.
	 *
	 * @param int $post_id The post ID.
	 */
	public function delete_post( $post_id ) {
		if ( ! $this->is_processable( get_post( $post_id ) ) ) {
			return;
		}

		$processor = ContentProcessor::get();

		// Get links to update linked objects.
		$links = $processor->get_stored_internal_links( $post_id );

		// Remove all links for this post.
		$processor->storage->cleanup( $post_id );

		// Update link counts.
		$processor->storage->update_link_counts( $post_id, [], $links );
	}

	/**
	 * Post column content.
	 *
	 * @param int   $post_id   Post ID.
	 * @param array $post_data Current post SEO data.
	 * @param array $data      All posts SEO data.
	 */
	public function post_column_content( $post_id, $post_data, $data ) {
		if ( ! Post_Columns::is_post_indexable( $post_id ) || empty( $data ) ) {
			return;
		}

		if ( empty( $this->links_data ) ) {
			$this->get_links_data( array_keys( $data ) );
		}

		$counts = ! empty( $this->links_data[ $post_id ] ) ? $this->links_data[ $post_id ] : (object) [
			'internal_link_count' => 0,
			'external_link_count' => 0,
			'incoming_link_count' => 0,
		];

		/**
		 * Filter to customize link count display in post list.
		 *
		 * Allows other plugins (like Rank Math PRO) to make link counts clickable.
		 *
		 * @param string $html    The HTML output for link counts.
		 * @param int    $post_id Post ID.
		 * @param object $counts  Link counts object with internal_link_count, external_link_count, incoming_link_count.
		 */
		$output = $this->do_filter(
			'links/post_column_display',
			$this->get_default_link_count_html( $post_id, $counts ),
			$post_id,
			$counts
		);

		echo wp_kses_post( $output );
	}

	/**
	 * Get default HTML for link counts display.
	 *
	 * @param int    $post_id Post ID.
	 * @param object $counts  Link counts object.
	 *
	 * @return string HTML output.
	 */
	private function get_default_link_count_html( $post_id, $counts ) {
		ob_start();
		?>
		<span class="rank-math-column-display rank-math-link-count">
			<strong><?php esc_html_e( 'Links: ', 'seo-by-rank-math' ); ?></strong>
			<?php
			/**
			 * Filter to customize individual link count item display.
			 *
			 * @param string $html      The HTML for this count item.
			 * @param string $type      Link type: 'internal', 'external', or 'incoming'.
			 * @param int    $count     The count value.
			 * @param int    $post_id   Post ID.
			 * @param object $counts    All link counts object.
			 */
			echo wp_kses_post( $this->get_link_count_item_html( 'internal', $counts->internal_link_count, $post_id ) );
			?>
			<span class="divider"></span>
			<?php
			echo wp_kses_post( $this->get_link_count_item_html( 'external', $counts->external_link_count, $post_id ) );
			?>
			<span class="divider"></span>
			<?php
			echo wp_kses_post( $this->get_link_count_item_html( 'incoming', $counts->incoming_link_count, $post_id ) );
			?>
		</span>
		<?php
		return ob_get_clean();
	}

	/**
	 * Get HTML for a single link count item.
	 *
	 * Renders as a clickable link when count > 0, plain span otherwise.
	 *
	 * @param string $type    Link type: 'internal', 'external', or 'incoming'.
	 * @param int    $count   The count value.
	 * @param int    $post_id Post ID (used to build the Links page URL).
	 *
	 * @return string HTML output.
	 */
	private function get_link_count_item_html( $type, $count, $post_id ) {
		$icons = [
			'internal' => 'dashicons-admin-links',
			'external' => 'dashicons-external',
			'incoming' => 'dashicons-external internal',
		];

		$titles = [
			'internal' => __( 'Internal Links', 'seo-by-rank-math' ),
			'external' => __( 'External Links', 'seo-by-rank-math' ),
			'incoming' => __( 'Incoming Links', 'seo-by-rank-math' ),
		];

		$inner = sprintf(
			'<span class="dashicons %1$s"></span><span>%2$s</span>',
			esc_attr( $icons[ $type ] ),
			esc_html( $count )
		);

		if ( empty( $count ) ) {
			return sprintf(
				'<span class="rank-math-link-count-item" data-link-type="%1$s" title="%2$s">%3$s</span>',
				esc_attr( $type ),
				esc_attr( $titles[ $type ] ),
				$inner
			);
		}

		$params = 'incoming' === $type
			? [
				'target_post_id' => absint( $post_id ),
				'link_type'      => 'internal',
			]
			: [
				'source_id' => absint( $post_id ),
				'link_type' => $type,
			];

		$url = Helper::get_admin_url( 'links-page' ) . '#links?' . http_build_query( $params );

		return sprintf(
			'<a href="%1$s" class="rank-math-link-count-item rank-math-link-count-clickable" data-link-type="%2$s" title="%3$s">%4$s</a>',
			esc_url( $url ),
			esc_attr( $type ),
			esc_attr( $titles[ $type ] ),
			$inner
		);
	}

	/**
	 * Process old posts if this is an old installation.
	 */
	public function cron_job() {
		$post_types = Helper::get_accessible_post_types();
		unset( $post_types['attachment'] );

		$posts = get_posts(
			[
				'post_type'   => array_keys( $post_types ),
				'post_status' => [ 'publish', 'future' ],
				'meta_query'  => [
					[
						'key'     => 'rank_math_internal_links_processed',
						'compare' => 'NOT EXISTS',
					],
				],
			]
		);

		// Early Bail.
		if ( empty( $posts ) ) {
			wp_clear_scheduled_hook( 'rank_math/links/internal_links' );
			return;
		}

		// Process.
		foreach ( $posts as $post ) {
			$this->save_post( $post->ID, $post );
		}
	}

	/**
	 * Process a post (static method for use by PRO plugin).
	 *
	 * @param int     $post_id The post ID.
	 * @param WP_Post $post    The post object.
	 */
	public static function process_post_links( $post_id, $post ) {
		if ( ! $post instanceof \WP_Post || ! self::is_post_processable( $post ) ) {
			return;
		}

		self::process( $post_id, $post->post_content );
	}

	/**
	 * Check if the post is processable (static method for use by PRO plugin).
	 *
	 * @param WP_Post $post The post object.
	 * @return bool True if processable.
	 */
	public static function is_post_processable( $post ) {
		/**
		 * Filter to prevent processing the post.
		 *
		 * @param boolean $value Whether to process the post.
		 * @param WP_POST $post  The Post object.
		 */
		if ( wp_is_post_revision( $post->ID ) || ! apply_filters( 'rank_math/links/process_post', true, $post ) ) {
			return false;
		}

		if ( in_array( $post->post_status, [ 'auto-draft', 'trash' ], true ) ) {
			return false;
		}

		$post_types = Helper::get_accessible_post_types();
		unset( $post_types['attachment'] );

		return isset( $post_types[ $post->post_type ] );
	}

	/**
	 * Process the content for a given post.
	 *
	 * @param int    $post_id The post ID.
	 * @param string $content The content.
	 */
	private static function process( $post_id, $content ) {
		/**
		 * Filter to change the content passed to the Link processor.
		 *
		 * @param string $content Post content.
		 * @param int    $post_id Post ID.
		 */
		$content = apply_filters( 'rank_math/links/content', $content, $post_id );
		$content = str_replace( ']]>', ']]&gt;', $content );

		$processor = ContentProcessor::get();
		$processor->process( $post_id, $content );
		update_post_meta( $post_id, 'rank_math_internal_links_processed', true );
	}

	/**
	 * Check if the post is processable.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool True if processable.
	 */
	private function is_processable( $post ) {
		/**
		 * Filter to prevent processing the post.
		 *
		 * @param boolean $value Whether to process the post.
		 * @param WP_POST $post  The Post object.
		 */
		if ( wp_is_post_revision( $post->ID ) || ! $this->do_filter( 'links/process_post', true, $post ) ) {
			return false;
		}

		if ( in_array( $post->post_status, [ 'auto-draft', 'trash' ], true ) ) {
			return false;
		}

		$post_types = Helper::get_accessible_post_types();
		unset( $post_types['attachment'] );

		return isset( $post_types[ $post->post_type ] );
	}

	/**
	 * Get links data by post id.
	 *
	 * @param array $post_ids The post ids.
	 */
	private function get_links_data( $post_ids ) {
		$results          = Database::table( 'rank_math_internal_meta' )->select( '*' )->whereIn( 'object_id', $post_ids )->groupBy( 'object_id' )->get();
		$this->links_data = array_combine( array_column( $results, 'object_id' ), $results );
	}
}
PK     ¥ŠU]1Z‚³e  e  /  includes/modules/links/Api/class-controller.phpnu „[µü¤        <?php
/**
 * Links REST API controller.
 *
 * Handles links-related endpoints for the Free plugin admin page:
 * /posts, /posts-stats, /links, /links-stats.
 *
 * @since      1.0.266
 * @package    RankMath
 * @subpackage RankMath\Links\Api
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Links\Api;

use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Response;
use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Controller class.
 *
 * Provides REST endpoints for basic links and posts data using
 * only Free plugin tables (rank_math_internal_meta, rank_math_internal_links).
 * PRO plugin can override responses via filters to supply richer data.
 */
class Controller {

	/**
	 * REST API namespace.
	 *
	 * @var string
	 */
	const NAMESPACE = 'rankmath/v1';

	/**
	 * Cache group for object caching.
	 *
	 * @var string
	 */
	const CACHE_GROUP = 'rank_math_links';

	/**
	 * Cache TTL in seconds (30 minutes).
	 *
	 * @var int
	 */
	const CACHE_TTL = 1800;

	/**
	 * Register REST API routes.
	 */
	public function register_routes() {
		// GET /rankmath/v1/links/posts.
		register_rest_route(
			self::NAMESPACE,
			'/links/posts',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_posts' ],
				'permission_callback' => [ $this, 'check_permission' ],
				'args'                => $this->get_posts_args(),
			]
		);

		// GET /rankmath/v1/links/posts-stats.
		register_rest_route(
			self::NAMESPACE,
			'/links/posts-stats',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_posts_stats' ],
				'permission_callback' => [ $this, 'check_permission' ],
			]
		);

		// GET /rankmath/v1/links/links.
		register_rest_route(
			self::NAMESPACE,
			'/links/links',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_links' ],
				'permission_callback' => [ $this, 'check_permission' ],
				'args'                => $this->get_links_args(),
			]
		);

		// GET /rankmath/v1/links/links-stats.
		register_rest_route(
			self::NAMESPACE,
			'/links/links-stats',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'get_links_stats' ],
				'permission_callback' => [ $this, 'check_permission' ],
			]
		);
	}

	/**
	 * Permission callback: require manage_options capability.
	 *
	 * @return bool|\WP_Error
	 */
	public function check_permission() {
		if ( ! current_user_can( 'manage_options' ) ) {
			return new \WP_Error(
				'rest_forbidden',
				esc_html__( 'You do not have permission to access this resource.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}
		return true;
	}

	/**
	 * Get posts with link metrics.
	 *
	 * @param WP_REST_Request $request Request.
	 * @return WP_REST_Response
	 */
	public function get_posts( $request ) {
		$data = $this->get_posts_data(
			[
				'page'            => $request->get_param( 'page' ),
				'per_page'        => $request->get_param( 'per_page' ),
				'search'          => $request->get_param( 'search' ),
				'post_type'       => $request->get_param( 'post_type' ),
				'is_orphan'       => $request->get_param( 'is_orphan' ),
				'seo_score_range' => $request->get_param( 'seo_score_range' ),
				'post_id'         => $request->get_param( 'post_id' ),
				'orderby'         => $request->get_param( 'orderby' ),
				'order'           => $request->get_param( 'order' ),
			]
		);

		return rest_ensure_response( $data );
	}

	/**
	 * Query post link stats and return the data array.
	 *
	 * Shared by the REST endpoint and the Abilities API so neither needs to
	 * construct a WP_REST_Request. The REST endpoint wraps the return value
	 * in rest_ensure_response(); abilities call this method directly.
	 *
	 * @param array $args {
	 *     Raw or pre-sanitized query arguments.
	 *
	 *     @type int    $page            1-based page number. Default 1.
	 *     @type int    $per_page        Rows per page (max 100). Default 50.
	 *     @type string $search          Partial post-title search. Default ''.
	 *     @type array  $post_type       Allowed post types. Default [].
	 *     @type string $is_orphan       Orphan filter: 'orphan', 'linked', or ''. Default ''.
	 *     @type string $seo_score_range SEO score filter: great, good, bad, no-score, or ''. Default ''.
	 *     @type int    $post_id         Filter to a single post by ID. Default 0.
	 *     @type string $orderby         Order-by field. Default 'post_title'.
	 *     @type string $order           Sort direction: ASC or DESC. Default 'ASC'.
	 * }
	 * @return array { posts: array, total: int, pages: int }
	 */
	public function get_posts_data( array $args ): array {
		$page     = max( 1, (int) ( $args['page'] ?? 1 ) );
		$per_page = min( 100, max( 1, (int) ( $args['per_page'] ?? 50 ) ) );
		$offset   = ( $page - 1 ) * $per_page;

		$normalized = [
			'search'          => sanitize_text_field( (string) ( $args['search'] ?? '' ) ),
			'post_type'       => (array) ( $args['post_type'] ?? [] ),
			'is_orphan'       => sanitize_text_field( (string) ( $args['is_orphan'] ?? '' ) ),
			'seo_score_range' => sanitize_text_field( (string) ( $args['seo_score_range'] ?? '' ) ),
			'post_id'         => absint( $args['post_id'] ?? 0 ),
			'orderby'         => sanitize_text_field( (string) ( $args['orderby'] ?? 'post_title' ) ),
			'order'           => sanitize_text_field( (string) ( $args['order'] ?? 'ASC' ) ),
			'offset'          => $offset,
			'per_page'        => $per_page,
		];

		/**
		 * Filter to allow overriding the posts REST response.
		 *
		 * Return a non-null array to bypass the Free plugin's query entirely.
		 * Expected format: [ 'posts' => array, 'total' => int, 'pages' => int ]
		 *
		 * @since 1.0.266
		 *
		 * @param null|array $override Return override data or null to use Free's query.
		 * @param array      $normalized Normalized query arguments.
		 */
		$override = apply_filters( 'rank_math/links/rest_posts_response', null, $normalized );
		if ( null !== $override ) {
			return (array) $override;
		}

		$results = $this->query_posts( $normalized );
		$total   = $this->query_posts_count( $normalized );

		return [
			'posts' => $results,
			'total' => (int) $total,
			'pages' => (int) ceil( $total / $per_page ),
		];
	}

	/**
	 * Get aggregate posts statistics.
	 *
	 * @return WP_REST_Response
	 */
	public function get_posts_stats() {
		/**
		 * Filter to allow overriding the posts-stats REST response.
		 *
		 * @since 1.0.266
		 *
		 * @param null|array $override Return override data or null to use Free's query.
		 */
		$override = apply_filters( 'rank_math/links/rest_posts_stats_response', null );
		if ( null !== $override ) {
			return rest_ensure_response( $override );
		}

		$cache_key = 'posts_stats';
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return rest_ensure_response( $cached );
		}

		global $wpdb;

		$stats = $wpdb->get_row(
			"SELECT
				COUNT(DISTINCT m.object_id) as total_posts,
				SUM(CASE WHEN m.incoming_link_count IS NULL OR m.incoming_link_count = 0 THEN 1 ELSE 0 END) as orphan_posts,
				SUM(CASE WHEN m.internal_link_count > 0 THEN 1 ELSE 0 END) as posts_with_internal,
				SUM(CASE WHEN m.external_link_count > 0 THEN 1 ELSE 0 END) as posts_with_external
			FROM {$wpdb->prefix}rank_math_internal_meta m
			INNER JOIN {$wpdb->posts} p ON m.object_id = p.ID
			WHERE p.post_status = 'publish'"
		);

		$response = [
			'total_posts'         => (int) ( $stats->total_posts ?? 0 ),
			'orphan_posts'        => (int) ( $stats->orphan_posts ?? 0 ),
			'posts_with_internal' => (int) ( $stats->posts_with_internal ?? 0 ),
			'posts_with_external' => (int) ( $stats->posts_with_external ?? 0 ),
		];

		wp_cache_set( $cache_key, $response, self::CACHE_GROUP, self::CACHE_TTL );

		return rest_ensure_response( $response );
	}

	/**
	 * Get links with basic columns.
	 *
	 * @param WP_REST_Request $request Request.
	 * @return WP_REST_Response
	 */
	public function get_links( $request ) {
		return rest_ensure_response(
			$this->get_links_data(
				[
					'page'           => $request->get_param( 'page' ),
					'per_page'       => $request->get_param( 'per_page' ),
					'search'         => $request->get_param( 'search' ),
					'source_id'      => $request->get_param( 'source_id' ),
					'target_post_id' => $request->get_param( 'target_post_id' ),
					'is_internal'    => $request->get_param( 'is_internal' ),
					'orderby'        => $request->get_param( 'orderby' ),
					'order'          => $request->get_param( 'order' ),
				]
			)
		);
	}

	/**
	 * Fetch and normalize link rows without REST plumbing.
	 *
	 * Shared by the REST endpoint and the Abilities API runner so neither
	 * needs to construct a WP_REST_Request object.
	 *
	 * @param array $args {
	 *     Query arguments (all optional).
	 *
	 *     @type int    $page           1-based page number (default 1).
	 *     @type int    $per_page       Rows per page, capped at 100 (default 50).
	 *     @type string $search         URL search string.
	 *     @type int    $source_id      Source post ID.
	 *     @type int    $target_post_id Target post ID.
	 *     @type string $is_internal    '1' = internal only, '0' = external only, '' = all.
	 *     @type string $orderby        Column to sort by.
	 *     @type string $order          Sort direction.
	 * }
	 * @return array { links: array, total: int, pages: int }
	 */
	public function get_links_data( array $args ): array {
		$page     = max( 1, (int) ( $args['page'] ?? 1 ) );
		$per_page = min( 100, max( 1, (int) ( $args['per_page'] ?? 50 ) ) );
		$offset   = ( $page - 1 ) * $per_page;

		$normalized = [
			'search'         => sanitize_text_field( (string) ( $args['search'] ?? '' ) ),
			'source_id'      => absint( $args['source_id'] ?? 0 ),
			'target_post_id' => absint( $args['target_post_id'] ?? 0 ),
			'is_internal'    => sanitize_text_field( (string) ( $args['is_internal'] ?? '' ) ),
			'orderby'        => sanitize_text_field( (string) ( $args['orderby'] ?? '' ) ),
			'order'          => sanitize_text_field( (string) ( $args['order'] ?? '' ) ),
			'offset'         => $offset,
			'per_page'       => $per_page,
		];

		/**
		 * Filter to allow overriding the links REST response.
		 *
		 * Return a non-null array to bypass the Free plugin's query entirely.
		 * Expected format: [ 'links' => array, 'total' => int, 'pages' => int ]
		 *
		 * @since 1.0.266
		 *
		 * @param null|array $override   Return override data or null to use Free's query.
		 * @param array      $normalized Normalized query arguments.
		 */
		$override = apply_filters( 'rank_math/links/rest_links_response', null, $normalized );
		if ( null !== $override ) {
			return (array) $override;
		}

		$results = $this->query_links( $normalized );
		$total   = $this->query_links_count( $normalized );

		return [
			'links' => $results,
			'total' => (int) $total,
			'pages' => (int) ceil( $total / $per_page ),
		];
	}

	/**
	 * Get basic links statistics (total, internal, external).
	 *
	 * @return WP_REST_Response
	 */
	public function get_links_stats() {
		/**
		 * Filter to allow overriding the links-stats REST response.
		 *
		 * @since 1.0.266
		 *
		 * @param null|array $override Return override data or null to use Free's query.
		 */
		$override = apply_filters( 'rank_math/links/rest_links_stats_response', null );
		if ( null !== $override ) {
			return rest_ensure_response( $override );
		}

		$cache_key = 'links_stats';
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return rest_ensure_response( $cached );
		}

		global $wpdb;
		$table = $wpdb->prefix . 'rank_math_internal_links';

		$stats = $wpdb->get_row(
			"SELECT
				COUNT(*) as total,
				SUM(CASE WHEN type = 'internal' THEN 1 ELSE 0 END) as internal,
				SUM(CASE WHEN type = 'external' THEN 1 ELSE 0 END) as external
			FROM {$table}"
		);

		$response = [
			'total'    => (int) ( $stats->total ?? 0 ),
			'internal' => (int) ( $stats->internal ?? 0 ),
			'external' => (int) ( $stats->external ?? 0 ),
		];

		wp_cache_set( $cache_key, $response, self::CACHE_GROUP, self::CACHE_TTL );

		return rest_ensure_response( $response );
	}

	/**
	 * Query posts with link metrics from Free tables.
	 *
	 * @param array $args Query arguments.
	 * @return array
	 */
	private function query_posts( $args ) {
		$cache_key = 'posts_' . md5( wp_json_encode( $args ) );
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return $cached;
		}

		global $wpdb;

		$where_sql = $this->build_posts_where( $args );
		$orderby   = $this->validate_posts_orderby( $args['orderby'] );
		$order     = $this->validate_order( $args['order'], 'ASC' );
		$limit_sql = $wpdb->prepare( 'LIMIT %d OFFSET %d', $args['per_page'], $args['offset'] );

		$results = $wpdb->get_results(
			"SELECT p.ID as post_id,
					p.post_title,
					p.post_type,
					p.post_modified,
					m.internal_link_count,
					m.external_link_count,
					m.incoming_link_count,
					pm_score.meta_value as seo_score
			FROM {$wpdb->prefix}rank_math_internal_meta m
			INNER JOIN {$wpdb->posts} p ON m.object_id = p.ID
			LEFT JOIN {$wpdb->postmeta} pm_score ON p.ID = pm_score.post_id AND pm_score.meta_key = 'rank_math_seo_score'
			WHERE {$where_sql}
			ORDER BY {$orderby} {$order}
			{$limit_sql}"
		);

		foreach ( $results as $row ) {
			$row->internal_link_count = (int) ( $row->internal_link_count ?? 0 );
			$row->external_link_count = (int) ( $row->external_link_count ?? 0 );
			$row->incoming_link_count = (int) ( $row->incoming_link_count ?? 0 );
			$row->seo_score           = $row->seo_score ? (int) $row->seo_score : 0;
			$row->is_orphan           = 0 === $row->incoming_link_count;
			$row->edit_url            = get_edit_post_link( $row->post_id, '&' );
			$row->post_url            = $this->get_relative_permalink( $row->post_id );
			$post_type_obj            = get_post_type_object( $row->post_type );
			$row->post_type_label     = $post_type_obj ? $post_type_obj->labels->singular_name : ucfirst( $row->post_type );
		}

		wp_cache_set( $cache_key, $results, self::CACHE_GROUP, self::CACHE_TTL );

		return $results;
	}

	/**
	 * Count posts matching query arguments.
	 *
	 * @param array $args Query arguments.
	 * @return int
	 */
	private function query_posts_count( $args ) {
		$cache_key = 'posts_count_' . md5( wp_json_encode( $args ) );
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return $cached;
		}

		global $wpdb;

		$where_sql = $this->build_posts_where( $args );
		$joins     = "INNER JOIN {$wpdb->posts} p ON m.object_id = p.ID";

		if ( ! empty( $args['seo_score_range'] ) ) {
			$joins .= " LEFT JOIN {$wpdb->postmeta} pm_score ON p.ID = pm_score.post_id AND pm_score.meta_key = 'rank_math_seo_score'";
		}

		$count = (int) $wpdb->get_var(
			"SELECT COUNT(DISTINCT m.object_id)
			FROM {$wpdb->prefix}rank_math_internal_meta m
			{$joins}
			WHERE {$where_sql}"
		);

		wp_cache_set( $cache_key, $count, self::CACHE_GROUP, self::CACHE_TTL );

		return $count;
	}

	/**
	 * Query links from Free tables.
	 *
	 * @param array $args Query arguments.
	 * @return array
	 */
	private function query_links( $args ) {
		$cache_key = 'links_' . md5( wp_json_encode( $args ) );
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return $cached;
		}

		global $wpdb;

		$where_sql = $this->build_links_where( $args );
		$orderby   = $this->validate_links_orderby( $args['orderby'] );
		$order     = $this->validate_order( $args['order'], 'DESC' );
		$limit_sql = $wpdb->prepare( 'LIMIT %d OFFSET %d', $args['per_page'], $args['offset'] );
		$table     = $wpdb->prefix . 'rank_math_internal_links';

		$results = $wpdb->get_results(
			"SELECT l.id, l.url, l.post_id, l.target_post_id, l.type,
					sp.post_title as source_title,
					tp.post_title as target_title
			FROM {$table} l
			LEFT JOIN {$wpdb->posts} sp ON l.post_id = sp.ID
			LEFT JOIN {$wpdb->posts} tp ON l.target_post_id = tp.ID
			WHERE {$where_sql}
			ORDER BY {$orderby} {$order}
			{$limit_sql}"
		);

		foreach ( $results as $row ) {
			$row->source_url      = $this->get_relative_permalink( $row->post_id );
			$row->source_edit_url = $row->post_id ? get_edit_post_link( $row->post_id, '&' ) : '';
			$row->target_url      = ( 'internal' === $row->type ) ? $this->get_relative_permalink( $row->target_post_id ) : '';
		}

		wp_cache_set( $cache_key, $results, self::CACHE_GROUP, self::CACHE_TTL );

		return $results;
	}

	/**
	 * Count links matching query arguments.
	 *
	 * @param array $args Query arguments.
	 * @return int
	 */
	private function query_links_count( $args ) {
		$cache_key = 'links_count_' . md5( wp_json_encode( $args ) );
		$cached    = wp_cache_get( $cache_key, self::CACHE_GROUP );
		if ( false !== $cached ) {
			return $cached;
		}

		global $wpdb;
		$table     = $wpdb->prefix . 'rank_math_internal_links';
		$where_sql = $this->build_links_where( $args );

		$count = (int) $wpdb->get_var(
			"SELECT COUNT(*) FROM {$table} l WHERE {$where_sql}"
		);

		wp_cache_set( $cache_key, $count, self::CACHE_GROUP, self::CACHE_TTL );

		return $count;
	}

	/**
	 * Build WHERE clause for posts query.
	 *
	 * @param array $args Query arguments.
	 * @return string
	 */
	private function build_posts_where( $args ) {
		global $wpdb;

		$where = [ "p.post_status = 'publish'" ];

		// Post type filter.
		$post_types = array_filter( array_map( 'sanitize_text_field', (array) $args['post_type'] ) );
		if ( ! empty( $post_types ) ) {
			$placeholders = implode( ', ', array_fill( 0, count( $post_types ), '%s' ) );
			// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
			$where[] = $wpdb->prepare( 'p.post_type IN (' . $placeholders . ')', ...$post_types );
		} else {
			$where[] = "p.post_type IN ('post', 'page')";
		}

		// Orphan filter.
		if ( isset( $args['is_orphan'] ) && '' !== $args['is_orphan'] ) {
			if ( 'orphan' === $args['is_orphan'] ) {
				$where[] = '(m.incoming_link_count IS NULL OR m.incoming_link_count = 0)';
			} elseif ( 'linked' === $args['is_orphan'] ) {
				$where[] = 'm.incoming_link_count > 0';
			}
		}

		// SEO score range filter.
		if ( ! empty( $args['seo_score_range'] ) ) {
			switch ( $args['seo_score_range'] ) {
				case 'great':
					$where[] = 'CAST(pm_score.meta_value AS UNSIGNED) > 80';
					break;
				case 'good':
					$where[] = 'CAST(pm_score.meta_value AS UNSIGNED) BETWEEN 51 AND 80';
					break;
				case 'bad':
					$where[] = 'CAST(pm_score.meta_value AS UNSIGNED) <= 50';
					break;
				case 'no-score':
					$where[] = "(pm_score.meta_value IS NULL OR pm_score.meta_value = '')";
					break;
			}
		}

		// Post ID filter.
		if ( ! empty( $args['post_id'] ) ) {
			$where[] = $wpdb->prepare( 'p.ID = %d', $args['post_id'] );
		}

		// Search filter.
		if ( ! empty( $args['search'] ) ) {
			$where[] = $wpdb->prepare(
				'p.post_title LIKE %s',
				'%' . $wpdb->esc_like( $args['search'] ) . '%'
			);
		}

		return implode( ' AND ', $where );
	}

	/**
	 * Build WHERE clause for links query.
	 *
	 * @param array $args Query arguments.
	 * @return string
	 */
	private function build_links_where( $args ) {
		global $wpdb;

		$where = [ '1=1' ];

		if ( ! empty( $args['source_id'] ) ) {
			$where[] = $wpdb->prepare( 'l.post_id = %d', $args['source_id'] );
		}

		if ( ! empty( $args['target_post_id'] ) ) {
			$where[] = $wpdb->prepare( 'l.target_post_id = %d', $args['target_post_id'] );
		}

		if ( isset( $args['is_internal'] ) && '' !== $args['is_internal'] ) {
			$type    = '1' === $args['is_internal'] ? 'internal' : 'external';
			$where[] = $wpdb->prepare( 'l.type = %s', $type );
		}

		if ( ! empty( $args['search'] ) ) {
			$where[] = $wpdb->prepare(
				'l.url LIKE %s',
				'%' . $wpdb->esc_like( $args['search'] ) . '%'
			);
		}

		return implode( ' AND ', $where );
	}

	/**
	 * Validate ORDER direction.
	 *
	 * @param string $order         Input order.
	 * @param string $default_order Default order.
	 * @return string
	 */
	private function validate_order( $order, $default_order = 'DESC' ) {
		$order = strtoupper( $order );
		return in_array( $order, [ 'ASC', 'DESC' ], true ) ? $order : $default_order;
	}

	/**
	 * Validate and return ORDER BY column for posts query.
	 *
	 * @param string $orderby Input orderby.
	 * @return string
	 */
	private function validate_posts_orderby( $orderby ) {
		$map = [
			'post_title'          => 'p.post_title',
			'internal_link_count' => 'm.internal_link_count',
			'external_link_count' => 'm.external_link_count',
			'incoming_link_count' => 'm.incoming_link_count',
			'seo_score'           => 'pm_score.meta_value',
			'post_modified'       => 'p.post_modified',
		];
		return isset( $map[ $orderby ] ) ? $map[ $orderby ] : 'p.post_title';
	}

	/**
	 * Validate and return ORDER BY column for links query.
	 *
	 * @param string $orderby Input orderby.
	 * @return string
	 */
	private function validate_links_orderby( $orderby ) {
		$map = [
			'id'           => 'l.id',
			'url'          => 'l.url',
			'type'         => 'l.type',
			'source_title' => 'sp.post_title',
		];
		return isset( $map[ $orderby ] ) ? $map[ $orderby ] : 'l.id';
	}

	/**
	 * Get relative permalink (without home_url prefix).
	 *
	 * @param int $post_id Post ID.
	 * @return string
	 */
	private function get_relative_permalink( $post_id ) {
		if ( empty( $post_id ) ) {
			return '';
		}
		$permalink = get_permalink( $post_id );
		if ( ! $permalink ) {
			return '';
		}
		return str_replace( untrailingslashit( home_url() ), '', $permalink );
	}

	/**
	 * Get argument definitions for the /posts endpoint.
	 *
	 * @return array
	 */
	private function get_posts_args() {
		return [
			'page'            => [
				'description' => esc_html__( 'Page number.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 1,
			],
			'per_page'        => [
				'description' => esc_html__( 'Items per page.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 50,
				'maximum'     => 100,
			],
			'search'          => [
				'description'       => esc_html__( 'Search in post title.', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => '',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'post_type'       => [
				'description'       => esc_html__( 'Filter by post type. Supports multiple values.', 'seo-by-rank-math' ),
				'type'              => 'array',
				'items'             => [ 'type' => 'string' ],
				'default'           => [],
				'sanitize_callback' => function ( $param ) {
					return array_map( 'sanitize_text_field', (array) $param );
				},
			],
			'is_orphan'       => [
				'description'       => esc_html__( 'Filter by orphan status (orphan, linked).', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => '',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'seo_score_range' => [
				'description'       => esc_html__( 'Filter by SEO score range (great, good, bad, no-score).', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => '',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'post_id'         => [
				'description'       => esc_html__( 'Filter by post ID.', 'seo-by-rank-math' ),
				'type'              => 'integer',
				'default'           => 0,
				'sanitize_callback' => 'absint',
			],
			'orderby'         => [
				'description'       => esc_html__( 'Order by field.', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => 'post_title',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'order'           => [
				'description'       => esc_html__( 'Order direction (ASC, DESC).', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => 'ASC',
				'sanitize_callback' => 'sanitize_text_field',
			],
		];
	}

	/**
	 * Get argument definitions for the /links endpoint.
	 *
	 * @return array
	 */
	private function get_links_args() {
		return [
			'page'           => [
				'description' => esc_html__( 'Page number.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 1,
			],
			'per_page'       => [
				'description' => esc_html__( 'Items per page.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 50,
				'maximum'     => 100,
			],
			'search'         => [
				'description'       => esc_html__( 'Search in URL.', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => '',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'source_id'      => [
				'description' => esc_html__( 'Filter by source post ID.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 0,
			],
			'target_post_id' => [
				'description' => esc_html__( 'Filter by target post ID.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'default'     => 0,
			],
			'is_internal'    => [
				'description'       => esc_html__( 'Filter by link type (1 = internal, 0 = external).', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => '',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'orderby'        => [
				'description'       => esc_html__( 'Order by field.', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => 'id',
				'sanitize_callback' => 'sanitize_text_field',
			],
			'order'          => [
				'description'       => esc_html__( 'Order direction (ASC, DESC).', 'seo-by-rank-math' ),
				'type'              => 'string',
				'default'           => 'DESC',
				'sanitize_callback' => 'sanitize_text_field',
			],
		];
	}
}
PK     ¥ŠU]³ñ¡  ¡  1  includes/modules/content-ai/assets/img/loader.svgnu „[µü¤        <svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#6c7781"><g fill="none" fill-rule="evenodd"><g transform="translate(1 1)" stroke-width="2"><circle stroke-opacity=".5" cx="18" cy="18" r="18"/><path d="M36 18c0-9.94-8.06-18-18-18"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/></path></g></g></svg>
PK     ¥ŠU]<‘è%m  m  9  includes/modules/content-ai/assets/js/content-ai-media.jsnu „[µü¤        !function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},dn:function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})}},t={};e.r(t),e.d(t,{isAutoCompleterOpen:function(){return q},updateAIAttributes:function(){return K},updateData:function(){return Y},updatePreviousResults:function(){return $}});var n={};e.r(n),e.d(n,{appUi:function(){return Z}});var r={};e.r(r),e.d(r,{getContentAiAttributes:function(){return te},getData:function(){return ne},getPreviousResults:function(){return ae},getScore:function(){return re},isAutoCompleterOpen:function(){return ee}});const a=jQuery;var o=e.n(a);const i=lodash,l=wp.i18n,c=wp.apiFetch;var u=e.n(c),s="generate_image_alt_v2";function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function f(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=m(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const b=function(e){return new Promise(function(t,n){var r=wp.data.select("rank-math-content-ai").getData();(function(e){return new Promise(function(t,n){var r=new window.Image;r.crossOrigin="anonymous",r.onload=function(){var a=document.createElement("canvas"),o=a.getContext("2d");a.width=r.width,a.height=r.height,o.drawImage(r,0,0);try{var i=e.toLowerCase().split("."),l=i[i.length-1],c="image/jpeg";switch(l){case"png":c="image/png";break;case"gif":c="image/gif";break;case"webp":c="image/webp";break;case"svg":c="image/svg+xml";break;default:c="image/jpeg"}var u=a.toDataURL(c);t(u)}catch(e){n(e)}},r.onerror=function(){n(new Error("Failed to load image"))},r.src=e})})(e).then(function(a){var o=function(e){var t=e.split("/");return(0,i.last)(t)||"image.jpg"}(e);fetch(r.url+s,{method:"POST",body:JSON.stringify({images:[{id:o,image:a}],username:r.connectData.username,api_key:r.connectData.api_key,site_url:r.connectData.site_url,plugin_version:rankMath.version,language:r.language}),headers:{"Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){if(e.altTexts&&e.altTexts[o])return t(e.altTexts[o]),void function(e){var t;if(!(0,i.isUndefined)(e.usage)&&!(0,i.isEmpty)(e.usage.feature)){var n=e.usage,r=null!==(t=wp.data.select("rank-math-content-ai").getData().usageDetails)&&void 0!==t?t:{};wp.data.dispatch("rank-math-content-ai").updateData("usageDetails",d(d({},r),{},f({},n.feature,n))),u()({method:"POST",path:"/rankmath/v1/ca/saveOutput",data:{usage:n}})}}(e);n((0,l.__)("Failed to generate alt text.","seo-by-rank-math"))}).catch(function(e){n(e)})}).catch(function(e){n(e)})})};e.dn(b);const y=function(){return!rankMath.contentAI.isUserRegistered||!rankMath.contentAI.plan||rankMath.contentAI.isMigrating};e.dn(y);const h=function(e){return e&&null!==e.remaining&&void 0!==e.remaining?e.remaining:null};e.dn(h);const g=function(e){var t=wp.data.select("rank-math-content-ai").getData().usageDetails;if(!t)return!1;var n=t[e];return!!n&&h(n)<=0};e.dn(g);const v=wp.element,w=wp.components,k=React;function _(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function E(e,t){let n,r,a=[];for(let o=0;o<e.length;o++){const i=e[o];if("string"!==i.type){if(void 0===t[i.value])throw new Error(`Invalid interpolation, missing component node: \`${i.value}\``);if("object"!=typeof t[i.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${i.value}\``);if("componentClose"===i.type)throw new Error(`Missing opening component token: \`${i.value}\``);if("componentOpen"===i.type){n=t[i.value],r=o;break}a.push(t[i.value])}else a.push(i.value)}if(n){const o=function(e,t){const n=t[e];let r=0;for(let a=e+1;a<t.length;a++){const e=t[a];if(e.value===n.value){if("componentOpen"===e.type){r++;continue}if("componentClose"===e.type){if(0===r)return a;r--}}}throw new Error("Missing closing component token `"+n.value+"`")}(r,e),i=E(e.slice(r+1,o),t),l=(0,k.cloneElement)(n,{},i);if(a.push(l),o<e.length-1){const n=E(e.slice(o+1),t);a=a.concat(n)}}return a=a.filter(Boolean),0===a.length?null:1===a.length?a[0]:(0,k.createElement)(k.Fragment,null,...a)}function O(e){const{mixedString:t,components:n,throwErrors:r}=e;if(!n)return t;if("object"!=typeof n){if(r)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const a=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(_)}(t);try{return E(a,n)}catch(e){if(r)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}const A=function(e){var t=e.tags,n=e.components,r=e.children;return n=n||{},!1===(0,i.isUndefined)(t)&&(t=t.split(",")).forEach(function(e){var t=e;n[e]=wp.element.createElement(t,null)}),O({mixedString:r,components:n})};function P(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,i="",l=r.indexOf("#");-1!==l&&(o=r.substring(0,l),i=r.substring(l));var c=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),u=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+u+c+i+n}e.dn(P);var j=function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,i.includes)(e,"?")||(e+="?"),e+n.toString()};const S=function(e){var t=e.width,n=void 0===t?40:t,r=e.showProNotice,a=void 0!==r&&r,o=e.isBulkEdit,c=void 0!==o&&o,u=e.isResearch,s=void 0!==u&&u,m=e.creditsRequired,p=void 0===m?0:m,d=e.isKeywordIntent,f=void 0!==d&&d,b=e.medium,y=void 0===b?"":b;if(a)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,l.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,l.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(w.Button,{href:P("pro",t),target:"_blank",className:"button button-primary is-green"},(0,l.__)("Get PRO Now â†’","seo-by-rank-math"))))}(n,y);if(f)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,l.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,l.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(w.Button,{href:P("pro",t),target:"_blank",className:"button button-primary is-green"},(0,l.__)("Update Now","seo-by-rank-math"))))}(n,y);var h=(0,i.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),g=h.isUserRegistered,v=h.plan,k="free"===v,_=h.credits>p,E=h.isMigrating;if(_&&s&&!k&&h.credits<500&&(_=!1),g&&v&&_&&!E&&!k)return null;var O,S="width-"+n;return!g||!v||_&&k?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+S},wp.element.createElement("h3",null,(0,l.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!g&&!c&&(0,l.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),g&&!v&&!c&&!k&&(0,l.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),g&&!c&&k&&(0,l.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),c&&(0,l.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,l.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,l.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n,c,k),!g&&wp.element.createElement(w.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,l.__)("Connect Now","seo-by-rank-math")),g&&(!v||k)&&wp.element.createElement(w.Button,{href:j(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",k),className:"button button-primary is-green",target:"_blank"},(0,l.__)("Learn More","seo-by-rank-math")))):E?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+S},wp.element.createElement("h3",null,(0,l.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,l.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,l.__)("reach out to the support team.","seo-by-rank-math")),(0,l.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+S},wp.element.createElement("h3",null,(0,l.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(O=h.resetDate)?wp.element.createElement(A,{components:{strong:wp.element.createElement("strong",null)}},(0,l.sprintf)((0,l.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+O+"{{/strong}}")):(0,l.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(w.Button,{href:j(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",k),className:"button button-primary is-green",target:"_blank"},(0,l.__)("Learn More","seo-by-rank-math")),wp.element.createElement(w.Button,{variant:"link",href:j(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",k),className:"button button-secondary",target:"_blank"},(0,l.__)("Missing Credits?","seo-by-rank-math"))))};e.dn(S);const T=function(e){var t,n=e.showProNotice,r=void 0!==n&&n,a=e.isBulkEdit,l=void 0!==a&&a,c=e.creditsRequired,u=void 0===c?0:c,s=e.isKeywordIntent,m=void 0!==s&&s;(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&(t="elementor"===rankMath.currentEditor?"#elementor-editor-wrapper":"#wpwrap",o()(t).append('<div id="rank-math-content-ai-modal-wrapper"></div>'));setTimeout(function(){(0,v.render)(wp.element.createElement(w.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!1,onRequestClose:function(e){(0,i.isUndefined)(e)||(o()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.body.classList.remove("modal-open"))}},wp.element.createElement(S,{width:100,showProNotice:r,isBulkEdit:l,creditsRequired:u,isKeywordIntent:m})),document.getElementById("rank-math-content-ai-modal-wrapper"))},100)};function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function I(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function M(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach(function(t){x(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function x(e,t,n){return(t=B(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,B(r.key),r)}}function B(e){var t=function(e,t){if("object"!=C(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=C(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==C(t)?t:t+""}e.dn(T);var R=function(){return e=function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.injectGenerateAltTextButton(),o()(window).on("elementor:init",function(){t.injectGenerateAltTextButton()})},t=[{key:"injectGenerateAltTextButton",value:function(){var e=this;void 0!==wp.media&&void 0!==wp.media.view.Attachment.Details.TwoColumn&&(wp.media.view.Attachment.Details.TwoColumn=wp.media.view.Attachment.Details.TwoColumn.extend({template:function(t){return e.getTemplate("attachment-details-two-column",t,!0)},events:M(M({},wp.media.view.Attachment.Details.TwoColumn.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})})),"classic"===rankMath.currentEditor&&(wp.media.view.ImageDetails=wp.media.view.ImageDetails.extend({template:function(t){return e.getTemplate("image-details",t)},events:M(M({},wp.media.view.ImageDetails.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})})),void 0!==wp.media&&(wp.media.view.Attachment.Details=wp.media.view.Attachment.Details.extend({template:function(t){return e.getTemplate("attachment-details",t)},events:M(M({},wp.media.view.Attachment.Details.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})}))}},{key:"getTemplate",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=wp.media.template(e)(t),a=document.createElement("div");if(a.innerHTML=r,!a.querySelector("#alt-text-description"))return r;var o='<button class="rank-math-generate-alt-button" data-two-column="'+n+'"><i class="rm-icon rm-icon-content-ai"></i>'+(0,l.__)("Generate Alt","seo-by-rank-math")+"</button><br />",i=a.querySelector("#alt-text-description");return i.innerHTML=o+i.innerHTML,a.innerHTML}},{key:"generateAltTextForImage",value:function(e){var t=this;if(e.preventDefault(),e.stopPropagation(),y()||g(s))return o()(".media-modal-close").trigger("click"),void T({});var n=this.model.attributes.url;if(n){var r=e.currentTarget,a=r.innerHTML;r.disabled=!0,r.innerHTML=(0,l.__)("Generatingâ€¦","seo-by-rank-math");var i="true"===r.getAttribute("data-two-column");b(n).then(function(e){t.model.set("alt",e),"classic"!==rankMath.currentEditor&&t.model.save();var n=i?"#attachment-details-two-column-alt-text":"#attachment-details-alt-text",o=document.querySelector(n);o&&(o.value=e),r.innerHTML=a}).catch(function(e){console.error(e),r.classList.add("failed"),r.innerHTML=(0,l.__)("Failed","seo-by-rank-math"),setTimeout(function(){r.classList.remove("failed"),r.innerHTML=a},3e3)}).finally(function(){r.disabled=!1})}}}],t&&D(e.prototype,t),n&&D(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();const N=R,L=wp.data,U=wp.blockEditor;function F(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function H(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function W(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=G(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=G(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==G(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q(e){if(!e)return F("isAutoCompleterOpen",e);var t=(0,L.select)("core/block-editor").getSelectedBlock();(0,i.isNull)(t)||(0,(0,L.dispatch)(U.store).removeBlock)(t.clientId);return F("isAutoCompleterOpen",e)}function K(e,t){var n=(0,L.select)("rank-math-content-ai").getContentAiAttributes();return n[e]="language"!==e||t?t:rankMath.contentAI.language,F("contentAiAttributes",n)}function Y(e,t){var n=(0,L.select)("rank-math-content-ai").getData();return n[e]=t,F("data",function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?H(Object(n),!0).forEach(function(t){W(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},n))}function $(e){return F("previousResults",e)}function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function J(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function V(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?J(Object(n),!0).forEach(function(t){Q(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):J(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Q(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=z(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=z(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==z(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var X={isAutoCompleterOpen:!1,contentAiAttributes:{},data:rankMath.contentAI,previousResults:[]};function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:X,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?V(V({},e),{},Q({},t.key,t.value)):e}function ee(e){return e.appUi.isAutoCompleterOpen}function te(e){return e.appUi.contentAiAttributes}function ne(e){return e.appUi.data}function re(e){var t=e.appUi.data.score;return!t||(0,i.isEmpty)(Object.values(t))?0:(t=(0,i.map)(Object.values(t),i.toNumber),(0,i.round)((0,i.sum)(t)/t.length))}function ae(e){return e.appUi.previousResults}(0,L.register)((0,L.createReduxStore)("rank-math-content-ai",{reducer:(0,L.combineReducers)(n),selectors:r,actions:t}));function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function ie(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,le(r.key),r)}}function le(e){var t=function(e,t){if("object"!=oe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=oe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==oe(t)?t:t+""}var ce=function(){return e=function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.data=wp.data.select("rank-math-content-ai").getData(),new N,setTimeout(function(){t.addBulkGenerateButton(t.data)},1e3),this.altTextField=document.querySelector("#attachment_alt"),this.imageUrl=document.querySelector("#attachment_url"),this.altTextField&&this.imageUrl&&this.injectGenerateAltTextButton()},t=[{key:"addBulkGenerateButton",value:function(e){var t=o()(".media-toolbar-secondary");if(!(t.length<=0)){var n='<i class="rm-icon rm-icon-content-ai"></i> '+(0,l.__)("Generate Alt with AI","seo-by-rank-math"),r=o()('<button class="button media-button button-primary button-large delete-selected-button rank-math-bulk-generate-button hidden" disabled="disabled">'+n+"</button>");t.prepend(r),r.on("click",function(){if(y()||g(s))T({});else{var e=o()(".attachment.selected").map(function(){return o()(this).data("id")}).get();e.length<=0||(r[0].innerHTML=(0,l.__)("Generatingâ€¦","seo-by-rank-math"),u()({method:"POST",path:"/rankmath/v1/ca/generateAlt",data:{attachmentIds:e}}).catch(function(e){console.log(e),r[0].innerHTML=n}).then(function(){r[0].innerHTML=n,window.location.reload()}))}});var a=wp.media.frame.state("library").get("selection");(0,i.isUndefined)(a)||(a.on("selection:single",function(){r[0].removeAttribute("disabled")}),a.on("selection:unsingle",function(){o()(".attachment.selected").length||r[0].setAttribute("disabled","disabled")}))}}},{key:"injectGenerateAltTextButton",value:function(){var e=document.createElement("button");e.classList.add("rank-math-generate-alt-button"),e.innerHTML='<i class="rm-icon rm-icon-content-ai"></i>'+(0,l.__)("Generate Alt","seo-by-rank-math"),this.altTextField.insertAdjacentElement("afterend",e),this.altTextField.insertAdjacentHTML("afterend","<br>"),this.generateAltTextButton=e,e.addEventListener("click",this.generateAltTextForImage.bind(this))}},{key:"generateAltTextForImage",value:function(e){var t=this;if(e.preventDefault(),e.stopPropagation(),y()||g(s))T({});else{var n=this.imageUrl.value;this.generateAltTextButton.innerHTML=(0,l.__)("Generatingâ€¦","seo-by-rank-math"),b(n).then(function(e){t.altTextField.value=e,t.generateAltTextButton.innerHTML='<i class="rm-icon rm-icon-content-ai"></i>'+(0,l.__)("Generate Alt","seo-by-rank-math")}).catch(function(e){console.error("Failed to generate alt text:",e),t.generateAltTextButton.classList.add("failed"),t.generateAltTextButton.innerHTML=(0,l.__)("Failed","seo-by-rank-math"),setTimeout(function(){t.generateAltTextButton.classList.remove("failed"),t.generateAltTextButton.innerHTML='<i class="rm-icon rm-icon-content-ai"></i>'+(0,l.__)("Generate Alt","seo-by-rank-math")},2e3)})}}}],t&&ie(e.prototype,t),n&&ie(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();window.addEventListener("load",function(){new ce})}();PK     ¥ŠU]Òql{HV HV 8  includes/modules/content-ai/assets/js/content-ai-page.jsnu „[µü¤        !function(){var e={634:function(e){e.exports=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function t(t){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?e(Object(r),!0).forEach((function(e){n(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a="â€‹";const r=(e,t,n,a)=>(e=""+e,t=""+t,a&&(e=e.trim(),t=t.trim()),n?e==t:e.toLowerCase()==t.toLowerCase()),i=(e,t)=>e&&Array.isArray(e)&&e.map((e=>o(e,t)));function o(e,t){var n,a={};for(n in e)t.indexOf(n)<0&&(a[n]=e[n]);return a}function s(e){var t=document.createElement("div");return e.replace(/\&#?[0-9a-z]+;/gi,(function(e){return t.innerHTML=e,t.innerText}))}function l(e){return(new DOMParser).parseFromString(e.trim(),"text/html").body.firstElementChild}function c(e,t){for(t=t||"previous";e=e[t+"Sibling"];)if(3==e.nodeType)return e}function u(e){return"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/`|'/g,"&#039;"):e}function d(e){var t=Object.prototype.toString.call(e).split(" ")[1].slice(0,-1);return e===Object(e)&&"Array"!=t&&"Function"!=t&&"RegExp"!=t&&"HTMLUnknownElement"!=t}function m(e,t,n){function a(e,t){for(var n in t)if(t.hasOwnProperty(n)){if(d(t[n])){d(e[n])?a(e[n],t[n]):e[n]=Object.assign({},t[n]);continue}if(Array.isArray(t[n])){e[n]=Object.assign([],t[n]);continue}e[n]=t[n]}}return e instanceof Object||(e={}),a(e,t),n&&a(e,n),e}function p(){const e=[],t={};for(let n of arguments)for(let a of n)d(a)?t[a.value]||(e.push(a),t[a.value]=1):e.includes(a)||e.push(a);return e}function h(e){return String.prototype.normalize?"string"==typeof e?e.normalize("NFD").replace(/[\u0300-\u036f]/g,""):void 0:e}var g=()=>/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent);function f(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function _(e){return e&&e.classList&&e.classList.contains(this.settings.classNames.tag)}function b(e,t){var n=window.getSelection();return t=t||n.getRangeAt(0),"string"==typeof e&&(e=document.createTextNode(e)),t&&(t.deleteContents(),t.insertNode(e)),e}function v(e,t,n){return e?(t&&(e.__tagifyTagData=n?t:m({},e.__tagifyTagData||{},t)),e.__tagifyTagData):(console.warn("tag element doesn't exist",e,t),t)}function w(e){if(e&&e.parentNode){var t=e,n=window.getSelection(),a=n.getRangeAt(0);n.rangeCount&&(a.setStartAfter(t),a.collapse(!0),n.removeAllRanges(),n.addRange(a))}}function k(e,t){e.forEach((e=>{if(v(e.previousSibling)||!e.previousSibling){var n=document.createTextNode(a);e.before(n),t&&w(n)}}))}var y={delimiters:",",pattern:null,tagTextProp:"value",maxTags:1/0,callbacks:{},addTagOnBlur:!0,onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\.|\:|\s/,mixTagsInterpolator:["[[","]]"],backspace:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:()=>{},trim:!0,a11y:{focusableTags:!1},mixMode:{insertAfterTag:"Â "},autoComplete:{enabled:!0,rightKey:!1},classNames:{namespace:"tagify",mixMode:"tagify--mix",selectMode:"tagify--select",input:"tagify__input",focus:"tagify--focus",tagNoAnimation:"tagify--noAnim",tagInvalid:"tagify--invalid",tagNotAllowed:"tagify--notAllowed",scopeLoading:"tagify--loading",hasMaxTags:"tagify--hasMaxTags",hasNoTags:"tagify--noTags",empty:"tagify--empty",inputInvalid:"tagify__input--invalid",dropdown:"tagify__dropdown",dropdownWrapper:"tagify__dropdown__wrapper",dropdownHeader:"tagify__dropdown__header",dropdownFooter:"tagify__dropdown__footer",dropdownItem:"tagify__dropdown__item",dropdownItemActive:"tagify__dropdown__item--active",dropdownItemHidden:"tagify__dropdown__item--hidden",dropdownInital:"tagify__dropdown--initial",tag:"tagify__tag",tagText:"tagify__tag-text",tagX:"tagify__tag__removeBtn",tagLoading:"tagify__tag--loading",tagEditing:"tagify__tag--editable",tagFlash:"tagify__tag--flash",tagHide:"tagify__tag--hide"},dropdown:{classname:"",enabled:2,maxItems:10,searchKeys:["value","searchBy"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,highlightFirst:!1,closeOnSelect:!0,clearOnSelect:!0,position:"all",appendTarget:null},hooks:{beforeRemoveTag:()=>Promise.resolve(),beforePaste:()=>Promise.resolve(),suggestionClick:()=>Promise.resolve()}};function E(){this.dropdown={};for(let e in this._dropdown)this.dropdown[e]="function"==typeof this._dropdown[e]?this._dropdown[e].bind(this):this._dropdown[e];this.dropdown.refs()}var x={refs(){this.DOM.dropdown=this.parseTemplate("dropdown",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-wrapper']")},getHeaderRef(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-header']")},getFooterRef(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-footer']")},getAllSuggestionsRefs(){return[...this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector)]},show(e){var t,n,a,i=this.settings,o="mix"==i.mode&&!i.enforceWhitelist,s=!i.whitelist||!i.whitelist.length,l="manual"==i.dropdown.position;if(e=void 0===e?this.state.inputText:e,!(s&&!o&&!i.templates.dropdownItemNoMatch||!1===i.dropdown.enable||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(e),e&&!this.suggestedListItems.length&&(this.trigger("dropdown:noMatch",e),i.templates.dropdownItemNoMatch&&(a=i.templates.dropdownItemNoMatch.call(this,{value:e}))),!a){if(this.suggestedListItems.length)e&&o&&!this.state.editing.scope&&!r(this.suggestedListItems[0].value,e)&&this.suggestedListItems.unshift({value:e});else{if(!e||!o||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:e}]}n=""+(d(t=this.suggestedListItems[0])?t.value:t),i.autoComplete&&n&&0==n.indexOf(e)&&this.input.autocomplete.suggest.call(this,t)}this.dropdown.fill(a),i.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(i.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=e||!0,this.state.dropdown.query=e,this.setStateSelection(),l||setTimeout((()=>{this.dropdown.position(),this.dropdown.render()})),setTimeout((()=>{this.trigger("dropdown:show",this.DOM.dropdown)}))}},hide(e){var t=this.DOM,n=t.scope,a=t.dropdown,r="manual"==this.settings.dropdown.position&&!e;if(a&&document.body.contains(a)&&!r)return window.removeEventListener("resize",this.dropdown.position),this.dropdown.events.binding.call(this,!1),n.setAttribute("aria-expanded",!1),a.parentNode.removeChild(a),setTimeout((()=>{this.state.dropdown.visible=!1}),100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger("dropdown:hide",a),this},toggle(e){this.dropdown[this.state.dropdown.visible&&!e?"hide":"show"]()},render(){var e,t,n=((t=this.DOM.dropdown.cloneNode(!0)).style.cssText="position:fixed; top:-9999px; opacity:0",document.body.appendChild(t),e=t.clientHeight,t.parentNode.removeChild(t),e),a=this.settings;return"number"==typeof a.dropdown.enabled&&a.dropdown.enabled>=0?(this.DOM.scope.setAttribute("aria-expanded",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(a.classNames.dropdownInital),this.dropdown.position(n),a.dropdown.appendTarget.appendChild(this.DOM.dropdown),setTimeout((()=>this.DOM.dropdown.classList.remove(a.classNames.dropdownInital)))),this):this},fill(e){e="string"==typeof e?e:this.dropdown.createListHTML(e||this.suggestedListItems);var t,n=this.settings.templates.dropdownContent.call(this,e);this.DOM.dropdown.content.innerHTML=(t=n)?t.replace(/\>[\r\n ]+\</g,"><").split(/>\s+</).join("><").trim():""},fillHeaderFooter(){var e=this.dropdown.filterListItems(this.state.dropdown.query),t=this.parseTemplate("dropdownHeader",[e]),n=this.parseTemplate("dropdownFooter",[e]),a=this.dropdown.getHeaderRef(),r=this.dropdown.getFooterRef();t&&a?.parentNode.replaceChild(t,a),n&&r?.parentNode.replaceChild(n,r)},refilter(e){e=e||this.state.dropdown.query||"",this.suggestedListItems=this.dropdown.filterListItems(e),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger("dropdown:updated",this.DOM.dropdown)},position(e){var t=this.settings.dropdown;if("manual"!=t.position){var n,a,r,i,o,s,l=this.DOM.dropdown,c=t.placeAbove,u=t.appendTarget===document.body,d=u?window.pageYOffset:t.appendTarget.scrollTop,m=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,p=m.clientHeight,h=Math.max(m.clientWidth||0,window.innerWidth||0)>480?t.position:"all",g=this.DOM["input"==h?"input":"scope"];if(e=e||l.clientHeight,this.state.dropdown.visible){if("text"==h?(r=(n=function(){const e=document.getSelection();if(e.rangeCount){const t=e.getRangeAt(0),n=t.startContainer,a=t.startOffset;let r,i;if(a>0)return i=document.createRange(),i.setStart(n,a-1),i.setEnd(n,a),r=i.getBoundingClientRect(),{left:r.right,top:r.top,bottom:r.bottom};if(n.getBoundingClientRect)return n.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,a=n.top,i=n.left,o="auto"):(s=function(e){for(var t=0,n=0;e&&e!=m;)t+=e.offsetLeft||0,n+=e.offsetTop||0,e=e.parentNode;return{left:t,top:n}}(t.appendTarget),a=(n=g.getBoundingClientRect()).top-s.top,r=n.bottom-1-s.top,i=n.left-s.left,o=n.width+"px"),!u){let e=function(){for(var e=0,n=t.appendTarget.parentNode;n;)e+=n.scrollTop||0,n=n.parentNode;return e}();a+=e,r+=e}a=Math.floor(a),r=Math.ceil(r),c=void 0===c?p-n.bottom<e:c,l.style.cssText="left:"+(i+window.pageXOffset)+"px; width:"+o+";"+(c?"top: "+(a+d)+"px":"top: "+(r+d)+"px"),l.setAttribute("placement",c?"top":"bottom"),l.setAttribute("position",h)}}},events:{binding(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];var t=this.dropdown.events.callbacks,n=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:t.onKeyDown.bind(this),onMouseOver:t.onMouseOver.bind(this),onMouseLeave:t.onMouseLeave.bind(this),onClick:t.onClick.bind(this),onScroll:t.onScroll.bind(this)},a=e?"addEventListener":"removeEventListener";"manual"!=this.settings.dropdown.position&&(document[a]("scroll",n.position,!0),window[a]("resize",n.position),window[a]("keydown",n.onKeyDown)),this.DOM.dropdown[a]("mouseover",n.onMouseOver),this.DOM.dropdown[a]("mouseleave",n.onMouseLeave),this.DOM.dropdown[a]("mousedown",n.onClick),this.DOM.dropdown.content[a]("scroll",n.onScroll)},callbacks:{onKeyDown(e){if(this.state.hasFocus&&!this.state.composing){var t=this.DOM.dropdown.querySelector(this.settings.classNames.dropdownItemActiveSelector),n=this.dropdown.getSuggestionDataByNode(t);switch(e.key){case"ArrowDown":case"ArrowUp":case"Down":case"Up":e.preventDefault();var a=this.dropdown.getAllSuggestionsRefs(),r="ArrowUp"==e.key||"Up"==e.key;t&&(t=this.dropdown.getNextOrPrevOption(t,!r)),t&&t.matches(this.settings.classNames.dropdownItemSelector)||(t=a[r?a.length-1:0]),this.dropdown.highlightOption(t,!0);break;case"Escape":case"Esc":this.dropdown.hide();break;case"ArrowRight":if(this.state.actions.ArrowLeft)return;case"Tab":if("mix"!=this.settings.mode&&t&&!this.settings.autoComplete.rightKey&&!this.state.editing){e.preventDefault();var i=this.dropdown.getMappedValue(n);return this.input.autocomplete.set.call(this,i),!1}return!0;case"Enter":e.preventDefault(),this.settings.hooks.suggestionClick(e,{tagify:this,tagData:n,suggestionElm:t}).then((()=>{if(t)return this.dropdown.selectOption(t),t=this.dropdown.getNextOrPrevOption(t,!r),void this.dropdown.highlightOption(t);this.dropdown.hide(),"mix"!=this.settings.mode&&this.addTags(this.state.inputText.trim(),!0)})).catch((e=>e));break;case"Backspace":{if("mix"==this.settings.mode||this.state.editing.scope)return;const e=this.input.raw.call(this);""!=e&&8203!=e.charCodeAt(0)||(!0===this.settings.backspace?this.removeTags():"edit"==this.settings.backspace&&setTimeout(this.editTag.bind(this),0))}}}},onMouseOver(e){var t=e.target.closest(this.settings.classNames.dropdownItemSelector);t&&this.dropdown.highlightOption(t)},onMouseLeave(e){this.dropdown.highlightOption()},onClick(e){if(0==e.button&&e.target!=this.DOM.dropdown&&e.target!=this.DOM.dropdown.content){var t=e.target.closest(this.settings.classNames.dropdownItemSelector),n=this.dropdown.getSuggestionDataByNode(t);this.state.actions.selectOption=!0,setTimeout((()=>this.state.actions.selectOption=!1),50),this.settings.hooks.suggestionClick(e,{tagify:this,tagData:n,suggestionElm:t}).then((()=>{t?this.dropdown.selectOption(t,e):this.dropdown.hide()})).catch((e=>console.warn(e)))}},onScroll(e){var t=e.target,n=t.scrollTop/(t.scrollHeight-t.parentNode.clientHeight)*100;this.trigger("dropdown:scroll",{percentage:Math.round(n)})}}},getSuggestionDataByNode(e){var t=e&&e.getAttribute("value");return this.suggestedListItems.find((e=>e.value==t))||null},getNextOrPrevOption(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var n=this.dropdown.getAllSuggestionsRefs(),a=n.findIndex((t=>t===e));return t?n[a+1]:n[a-1]},highlightOption(e,t){var n,a=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(a),this.state.ddItemElm.removeAttribute("aria-selected")),!e)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);n=this.dropdown.getSuggestionDataByNode(e),this.state.ddItemData=n,this.state.ddItemElm=e,e.classList.add(a),e.setAttribute("aria-selected",!0),t&&(e.parentNode.scrollTop=e.clientHeight+e.offsetTop-e.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,n),this.dropdown.position())},selectOption(e,t){var n=this.settings.dropdown,a=n.clearOnSelect,r=n.closeOnSelect;if(!e)return this.addTags(this.state.inputText,!0),void(r&&this.dropdown.hide());t=t||{};var i=e.getAttribute("value"),o="noMatch"==i,s=this.suggestedListItems.find((e=>(e.value??e)==i));this.trigger("dropdown:select",{data:s,elm:e,event:t}),i&&(s||o)?(this.state.editing?this.onEditTagDone(null,m({__isValid:!0},this.normalizeTags([s])[0])):this["mix"==this.settings.mode?"addMixTags":"addTags"]([s||this.input.raw.call(this)],a),this.DOM.input.parentNode&&(setTimeout((()=>{this.DOM.input.focus(),this.toggleFocusClass(!0)})),r&&setTimeout(this.dropdown.hide.bind(this)),e.addEventListener("transitionend",(()=>{this.dropdown.fillHeaderFooter(),setTimeout((()=>e.remove()),100)}),{once:!0}),e.classList.add(this.settings.classNames.dropdownItemHidden))):r&&setTimeout(this.dropdown.hide.bind(this))},selectAll(e){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems("");var t=this.dropdown.filterListItems("");return e||(t=this.state.dropdown.suggestions),this.addTags(t,!0),this},filterListItems(e,t){var n,a,r,i,o,s=this.settings,l=s.dropdown,c=(t=t||{},[]),u=[],m=s.whitelist,p=l.maxItems>=0?l.maxItems:1/0,g=l.searchKeys,f=0;if(!(e="select"==s.mode&&this.value.length&&this.value[0][s.tagTextProp]==e?"":e)||!g.length)return c=l.includeSelectedTags?m:m.filter((e=>!this.isTagDuplicate(d(e)?e.value:e))),this.state.dropdown.suggestions=c,c.slice(0,p);function _(e,t){return t.toLowerCase().split(" ").every((t=>e.includes(t.toLowerCase())))}for(o=l.caseSensitive?""+e:(""+e).toLowerCase();f<m.length;f++){let e,s;n=m[f]instanceof Object?m[f]:{value:m[f]};let p=Object.keys(n).some((e=>g.includes(e)))?g:["value"];l.fuzzySearch&&!t.exact?(r=p.reduce(((e,t)=>e+" "+(n[t]||"")),"").toLowerCase().trim(),l.accentedSearch&&(r=h(r),o=h(o)),e=0==r.indexOf(o),s=r===o,a=_(r,o)):(e=!0,a=p.some((e=>{var a=""+(n[e]||"");return l.accentedSearch&&(a=h(a),o=h(o)),l.caseSensitive||(a=a.toLowerCase()),s=a===o,t.exact?a===o:0==a.indexOf(o)}))),i=!l.includeSelectedTags&&this.isTagDuplicate(d(n)?n.value:n),a&&!i&&(s&&e?u.push(n):"startsWith"==l.sortby&&e?c.unshift(n):c.push(n))}return this.state.dropdown.suggestions=u.concat(c),"function"==typeof l.sortby?l.sortby(u.concat(c),o):u.concat(c).slice(0,p)},getMappedValue(e){var t=this.settings.dropdown.mapValueTo;return t?"function"==typeof t?t(e):e[t]||e.value:e.value},createListHTML(e){return m([],e).map(((e,n)=>{"string"!=typeof e&&"number"!=typeof e||(e={value:e});var a=this.dropdown.getMappedValue(e);return a="string"==typeof a?u(a):a,this.settings.templates.dropdownItem.apply(this,[t(t({},e),{},{mappedValue:a}),this])})).join("")}};const T="@yaireo/tagify/";var S,C={empty:"empty",exceed:"number of tags exceeded",pattern:"pattern mismatch",duplicate:"already exists",notAllowed:"not allowed"},A={wrapper:(e,t)=>`<tags class="${t.classNames.namespace} ${t.mode?`${t.classNames[t.mode+"Mode"]}`:""} ${e.className}"\n                    ${t.readonly?"readonly":""}\n                    ${t.disabled?"disabled":""}\n                    ${t.required?"required":""}\n                    ${"select"===t.mode?"spellcheck='false'":""}\n                    tabIndex="-1">\n            <span ${!t.readonly&&t.userInput?"contenteditable":""} tabIndex="0" data-placeholder="${t.placeholder||"&#8203;"}" aria-placeholder="${t.placeholder||""}"\n                class="${t.classNames.input}"\n                role="textbox"\n                aria-autocomplete="both"\n                aria-multiline="${"mix"==t.mode}"></span>\n                &#8203;\n        </tags>`,tag(e,t){let n=t.settings;return`<tag title="${e.title||e.value}"\n                    contenteditable='false'\n                    spellcheck='false'\n                    tabIndex="${n.a11y.focusableTags?0:-1}"\n                    class="${n.classNames.tag} ${e.class||""}"\n                    ${this.getAttributes(e)}>\n            <x title='' class="${n.classNames.tagX}" role='button' aria-label='remove tag'></x>\n            <div>\n                <span class="${n.classNames.tagText}">${e[n.tagTextProp]||e.value}</span>\n            </div>\n        </tag>`},dropdown(e){var t=e.dropdown,n="manual"==t.position,a=`${e.classNames.dropdown}`;return`<div class="${n?"":a} ${t.classname}" role="listbox" aria-labelledby="dropdown">\n                    <div data-selector='tagify-suggestions-wrapper' class="${e.classNames.dropdownWrapper}"></div>\n                </div>`},dropdownContent(e){var t=this.settings,n=this.state.dropdown.suggestions;return`\n            ${t.templates.dropdownHeader.call(this,n)}\n            ${e}\n            ${t.templates.dropdownFooter.call(this,n)}\n        `},dropdownItem(e){return`<div ${this.getAttributes(e)}\n                    class='${this.settings.classNames.dropdownItem} ${e.class?e.class:""}'\n                    tabindex="0"\n                    role="option">${e.mappedValue||e.value}</div>`},dropdownHeader(e){return`<header data-selector='tagify-suggestions-header' class="${this.settings.classNames.dropdownHeader}"></header>`},dropdownFooter(e){var t=e.length-this.settings.dropdown.maxItems;return t>0?`<footer data-selector='tagify-suggestions-footer' class="${this.settings.classNames.dropdownFooter}">\n                ${t} more items. Refine your search.\n            </footer>`:""},dropdownItemNoMatch:null},P={customBinding(){this.customEventsList.forEach((e=>{this.on(e,this.settings.callbacks[e])}))},binding(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];var t,n=this.events.callbacks,a=e?"addEventListener":"removeEventListener";if(!this.state.mainEvents||!e){for(var r in this.state.mainEvents=e,e&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on("tagify.removeAllTags",this.removeAllTags.bind(this))),t=this.listeners.main=this.listeners.main||{focus:["input",n.onFocusBlur.bind(this)],keydown:["input",n.onKeydown.bind(this)],click:["scope",n.onClickScope.bind(this)],dblclick:["scope",n.onDoubleClickScope.bind(this)],paste:["input",n.onPaste.bind(this)],drop:["input",n.onDrop.bind(this)],compositionstart:["input",n.onCompositionStart.bind(this)],compositionend:["input",n.onCompositionEnd.bind(this)]})this.DOM[t[r][0]][a](r,t[r][1]);clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(n.observeOriginalInputValue.bind(this),500);var i=this.listeners.main.inputMutationObserver||new MutationObserver(n.onInputDOMChange.bind(this));i.disconnect(),"mix"==this.settings.mode&&i.observe(this.DOM.input,{childList:!0})}},bindGlobal(e){var t,n=this.events.callbacks,a=e?"removeEventListener":"addEventListener";if(this.listeners&&(e||!this.listeners.global))for(t of(this.listeners.global=this.listeners.global||[{type:this.isIE?"keydown":"input",target:this.DOM.input,cb:n[this.isIE?"onInputIE":"onInput"].bind(this)},{type:"keydown",target:window,cb:n.onWindowKeyDown.bind(this)},{type:"blur",target:this.DOM.input,cb:n.onFocusBlur.bind(this)},{type:"click",target:document,cb:n.onClickAnywhere.bind(this)}],this.listeners.global))t.target[a](t.type,t.cb)},unbindGlobal(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur(e){var t=this.settings,n=e.target?this.trim(e.target.textContent):"",a=this.value?.[0]?.[t.tagTextProp],r=e.type,i=t.dropdown.enabled>=0,o={relatedTarget:e.relatedTarget},s=this.state.actions.selectOption&&(i||!t.dropdown.closeOnSelect),l=this.state.actions.addNew&&i,c=e.relatedTarget&&_.call(this,e.relatedTarget)&&this.DOM.scope.contains(e.relatedTarget);if("blur"==r){if(e.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),t.onChangeAfterBlur&&this.triggerChangeEvent()}if(!s&&!l)if(this.state.hasFocus="focus"==r&&+new Date,this.toggleFocusClass(this.state.hasFocus),"mix"!=t.mode){if("focus"==r)return this.trigger("focus",o),void(0!==t.dropdown.enabled&&t.userInput||this.dropdown.show(this.value.length?"":void 0));"blur"==r&&(this.trigger("blur",o),this.loading(!1),"select"==t.mode&&(c&&(this.removeTags(),n=""),a===n&&(n="")),n&&!this.state.actions.selectOption&&t.addTagOnBlur&&this.addTags(n,!0)),this.DOM.input.removeAttribute("style"),this.dropdown.hide()}else"focus"==r?this.trigger("focus",o):"blur"==e.type&&(this.trigger("blur",o),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart(e){this.state.composing=!0},onCompositionEnd(e){this.state.composing=!1},onWindowKeyDown(e){var t,n=document.activeElement,a=_.call(this,n)&&this.DOM.scope.contains(document.activeElement),r=a&&n.hasAttribute("readonly");if(a&&!r)switch(t=n.nextElementSibling,e.key){case"Backspace":this.settings.readonly||(this.removeTags(n),(t||this.DOM.input).focus());break;case"Enter":setTimeout(this.editTag.bind(this),0,n)}},onKeydown(e){var t=this.settings;if(!this.state.composing&&t.userInput){"select"==t.mode&&t.enforceWhitelist&&this.value.length&&"Tab"!=e.key&&e.preventDefault();var n=this.trim(e.target.textContent);if(this.trigger("keydown",{event:e}),"mix"==t.mode){switch(e.key){case"Left":case"ArrowLeft":this.state.actions.ArrowLeft=!0;break;case"Delete":case"Backspace":if(this.state.editing)return;var a=document.getSelection(),r="Delete"==e.key&&a.anchorOffset==(a.anchorNode.length||0),i=a.anchorNode.previousSibling,o=1==a.anchorNode.nodeType||!a.anchorOffset&&i&&1==i.nodeType&&a.anchorNode.previousSibling;s(this.DOM.input.innerHTML);var l,u,d,m=this.getTagElms(),p=1===a.anchorNode.length&&a.anchorNode.nodeValue==String.fromCharCode(8203);if("edit"==t.backspace&&o)return l=1==a.anchorNode.nodeType?null:a.anchorNode.previousElementSibling,setTimeout(this.editTag.bind(this),0,l),void e.preventDefault();if(g()&&o instanceof Element)return d=c(o),o.hasAttribute("readonly")||o.remove(),this.DOM.input.focus(),void setTimeout((()=>{w(d),this.DOM.input.click()}));if("BR"==a.anchorNode.nodeName)return;if((r||o)&&1==a.anchorNode.nodeType?u=0==a.anchorOffset?r?m[0]:null:m[Math.min(m.length,a.anchorOffset)-1]:r?u=a.anchorNode.nextElementSibling:o instanceof Element&&(u=o),3==a.anchorNode.nodeType&&!a.anchorNode.nodeValue&&a.anchorNode.previousElementSibling&&e.preventDefault(),(o||r)&&!t.backspace)return void e.preventDefault();if("Range"!=a.type&&!a.anchorOffset&&a.anchorNode==this.DOM.input&&"Delete"!=e.key)return void e.preventDefault();if("Range"!=a.type&&u&&u.hasAttribute("readonly"))return void w(c(u));"Delete"==e.key&&p&&v(a.anchorNode.nextSibling)&&this.removeTags(a.anchorNode.nextSibling),clearTimeout(S),S=setTimeout((()=>{var e=document.getSelection();s(this.DOM.input.innerHTML),!r&&e.anchorNode.previousSibling,this.value=[].map.call(m,((e,t)=>{var n=v(e);if(e.parentNode||n.readonly)return n;this.trigger("remove",{tag:e,index:t,data:n})})).filter((e=>e))}),20)}return!0}switch(e.key){case"Backspace":"select"==t.mode&&t.enforceWhitelist&&this.value.length?this.removeTags():this.state.dropdown.visible&&"manual"!=t.dropdown.position||""!=e.target.textContent&&8203!=n.charCodeAt(0)||(!0===t.backspace?this.removeTags():"edit"==t.backspace&&setTimeout(this.editTag.bind(this),0));break;case"Esc":case"Escape":if(this.state.dropdown.visible)return;e.target.blur();break;case"Down":case"ArrowDown":this.state.dropdown.visible||this.dropdown.show();break;case"ArrowRight":{let e=this.state.inputSuggestion||this.state.ddItemData;if(e&&t.autoComplete.rightKey)return void this.addTags([e],!0);break}case"Tab":{let a="select"==t.mode;if(!n||a)return!0;e.preventDefault()}case"Enter":if(this.state.dropdown.visible&&"manual"!=t.dropdown.position)return;e.preventDefault(),setTimeout((()=>{this.state.dropdown.visible||this.state.actions.selectOption||this.addTags(n,!0)}))}}},onInput(e){this.postUpdate();var t=this.settings;if("mix"==t.mode)return this.events.callbacks.onMixTagsInput.call(this,e);var n=this.input.normalize.call(this),a=n.length>=t.dropdown.enabled,r={value:n,inputElm:this.DOM.input},i=this.validateTag({value:n});"select"==t.mode&&this.toggleScopeValidation(i),r.isValid=i,this.state.inputText!=n&&(this.input.set.call(this,n,!1),-1!=n.search(t.delimiters)?this.addTags(n)&&this.input.set.call(this):t.dropdown.enabled>=0&&this.dropdown[a?"show":"hide"](n),this.trigger("input",r))},onMixTagsInput(e){var t,n,a,r,i,o,s,l,c=this.settings,u=this.value.length,d=this.getTagElms(),p=document.createDocumentFragment(),h=window.getSelection().getRangeAt(0),f=[].map.call(d,(e=>v(e).value));if("deleteContentBackward"==e.inputType&&g()&&this.events.callbacks.onKeydown.call(this,{target:e.target,key:"Backspace"}),k(this.getTagElms()),this.value.slice().forEach((e=>{e.readonly&&!f.includes(e.value)&&p.appendChild(this.createTagElem(e))})),p.childNodes.length&&(h.insertNode(p),this.setRangeAtStartEnd(!1,p.lastChild)),d.length!=u)return this.value=[].map.call(this.getTagElms(),(e=>v(e))),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(o=window.getSelection()).rangeCount>0&&3==o.anchorNode.nodeType){if((h=o.getRangeAt(0).cloneRange()).collapse(!0),h.setStart(o.focusNode,0),a=(t=h.toString().slice(0,h.endOffset)).split(c.pattern).length-1,(n=t.match(c.pattern))&&(r=t.slice(t.lastIndexOf(n[n.length-1]))),r){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:r.match(c.pattern)[0],value:r.replace(c.pattern,"")},this.state.tag.baseOffset=o.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(c.delimiters))return this.state.tag.value=this.state.tag.value.replace(c.delimiters,""),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,c.dropdown.clearOnSelect),void this.dropdown.hide();i=this.state.tag.value.length>=c.dropdown.enabled;try{s=(s=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&s.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(e){}(s||a<this.state.mixMode.matchedPatternCount)&&(i=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=a}setTimeout((()=>{this.update({withoutChangeEvent:!0}),this.trigger("input",m({},this.state.tag,{textContent:this.DOM.input.textContent})),this.state.tag&&this.dropdown[i?"show":"hide"](this.state.tag.value)}),10)},onInputIE(e){var t=this;setTimeout((function(){t.events.callbacks.onInput.call(t,e)}))},observeOriginalInputValue(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere(e){e.target==this.DOM.scope||this.DOM.scope.contains(e.target)||(this.toggleFocusClass(!1),this.state.hasFocus=!1)},onClickScope(e){var t=this.settings,n=e.target.closest("."+t.classNames.tag),a=+new Date-this.state.hasFocus;if(e.target!=this.DOM.scope){if(!e.target.classList.contains(t.classNames.tagX))return n?(this.trigger("click",{tag:n,index:this.getNodeIndex(n),data:v(n),event:e}),void(1!==t.editTags&&1!==t.editTags.clicks||this.events.callbacks.onDoubleClickScope.call(this,e))):void(e.target==this.DOM.input&&("mix"==t.mode&&this.fixFirefoxLastTagNoCaret(),a>500)?this.state.dropdown.visible?this.dropdown.hide():0===t.dropdown.enabled&&"mix"!=t.mode&&this.dropdown.show(this.value.length?"":void 0):"select"!=t.mode||0!==t.dropdown.enabled||this.state.dropdown.visible||this.dropdown.show());this.removeTags(e.target.parentNode)}else this.DOM.input.focus()},onPaste(e){e.preventDefault();var t,n,a=this.settings;if("select"==a.mode&&a.enforceWhitelist||!a.userInput)return!1;a.readonly||(t=e.clipboardData||window.clipboardData,n=t.getData("Text"),a.hooks.beforePaste(e,{tagify:this,pastedText:n,clipboardData:t}).then((t=>{void 0===t&&(t=n),t&&(this.injectAtCaret(t,window.getSelection().getRangeAt(0)),"mix"==this.settings.mode?this.events.callbacks.onMixTagsInput.call(this,e):this.settings.pasteAsTags?this.addTags(this.state.inputText+t,!0):this.state.inputText=t)})).catch((e=>e)))},onDrop(e){e.preventDefault()},onEditTagInput(e,t){var n=e.closest("."+this.settings.classNames.tag),a=this.getNodeIndex(n),r=v(n),i=this.input.normalize.call(this,e),o={[this.settings.tagTextProp]:i,__tagId:r.__tagId},s=this.validateTag(o);this.editTagChangeDetected(m(r,o))||!0!==e.originalIsValid||(s=!0),n.classList.toggle(this.settings.classNames.tagInvalid,!0!==s),r.__isValid=s,n.title=!0===s?r.title||r.value:s,i.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=i),this.dropdown.show(i)),this.trigger("edit:input",{tag:n,index:a,data:m({},this.value[a],{newValue:i}),event:t})},onEditTagPaste(e,t){var n=(t.clipboardData||window.clipboardData).getData("Text");t.preventDefault();var a=b(n);this.setRangeAtStartEnd(!1,a)},onEditTagFocus(e){this.state.editing={scope:e,input:e.querySelector("[contenteditable]")}},onEditTagBlur(e){if(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(e)){var t,n,a=this.settings,r=e.closest("."+a.classNames.tag),i=v(r),o=this.input.normalize.call(this,e),s={[a.tagTextProp]:o,__tagId:i.__tagId},l=i.__originalData,c=this.editTagChangeDetected(m(i,s)),u=this.validateTag(s);if(o)if(c){if(t=this.hasMaxTags(),n=m({},l,{[a.tagTextProp]:this.trim(o),__isValid:u}),a.transformTag.call(this,n,l),!0!==(u=(!t||!0===l.__isValid)&&this.validateTag(n))){if(this.trigger("invalid",{data:n,tag:r,message:u}),a.editTags.keepInvalid)return;a.keepInvalidTags?n.__isValid=u:n=l}else a.keepInvalidTags&&(delete n.title,delete n["aria-invalid"],delete n.class);this.onEditTagDone(r,n)}else this.onEditTagDone(r,l);else this.onEditTagDone(r)}},onEditTagkeydown(e,t){if(!this.state.composing)switch(this.trigger("edit:keydown",{event:e}),e.key){case"Esc":case"Escape":t.parentNode.replaceChild(t.__tagifyTagData.__originalHTML,t),this.state.editing=!1;case"Enter":case"Tab":e.preventDefault(),e.target.blur()}},onDoubleClickScope(e){var t,n,a=e.target.closest("."+this.settings.classNames.tag),r=v(a),i=this.settings;a&&i.userInput&&!1!==r.editable&&(t=a.classList.contains(this.settings.classNames.tagEditing),n=a.hasAttribute("readonly"),"select"==i.mode||i.readonly||t||n||!this.settings.editTags||this.editTag(a),this.toggleFocusClass(!0),this.trigger("dblclick",{tag:a,index:this.getNodeIndex(a),data:v(a)}))},onInputDOMChange(e){e.forEach((e=>{e.addedNodes.forEach((e=>{if("<div><br></div>"==e.outerHTML)e.replaceWith(document.createElement("br"));else if(1==e.nodeType&&e.querySelector(this.settings.classNames.tagSelector)){let t=document.createTextNode("");3==e.childNodes[0].nodeType&&"BR"!=e.previousSibling.nodeName&&(t=document.createTextNode("\n")),e.replaceWith(t,...[...e.childNodes].slice(0,-1)),w(t)}else if(_.call(this,e))if(3!=e.previousSibling?.nodeType||e.previousSibling.textContent||e.previousSibling.remove(),e.previousSibling&&"BR"==e.previousSibling.nodeName){e.previousSibling.replaceWith("\n"+a);let t=e.nextSibling,n="";for(;t;)n+=t.textContent,t=t.nextSibling;n.trim()&&w(e.previousSibling)}else e.previousSibling&&!v(e.previousSibling)||e.before(a)})),e.removedNodes.forEach((e=>{e&&"BR"==e.nodeName&&_.call(this,t)&&(this.removeTags(t),this.fixFirefoxLastTagNoCaret())}))}));var t=this.DOM.input.lastChild;t&&""==t.nodeValue&&t.remove(),t&&"BR"==t.nodeName||this.DOM.input.appendChild(document.createElement("br"))}}};function O(e,t){if(!e){console.warn("Tagify:","input element not found",e);const t=new Proxy(this,{get:()=>()=>t});return t}if(e.__tagify)return console.warn("Tagify: ","input element is already Tagified - Same instance is returned.",e),e.__tagify;var n;m(this,function(e){var t=document.createTextNode("");function n(e,n,a){a&&n.split(/\s+/g).forEach((n=>t[e+"EventListener"].call(t,n,a)))}return{off(e,t){return n("remove",e,t),this},on(e,t){return t&&"function"==typeof t&&n("add",e,t),this},trigger(n,a,r){var i;if(r=r||{cloneData:!0},n)if(e.settings.isJQueryPlugin)"remove"==n&&(n="removeTag"),jQuery(e.DOM.originalInput).triggerHandler(n,[a]);else{try{var o="object"==typeof a?a:{value:a};if((o=r.cloneData?m({},o):o).tagify=this,a.event&&(o.event=this.cloneEvent(a.event)),a instanceof Object)for(var s in a)a[s]instanceof HTMLElement&&(o[s]=a[s]);i=new CustomEvent(n,{detail:o})}catch(e){console.warn(e)}t.dispatchEvent(i)}}}}(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,t=t||{},this.getPersistedData=(n=t.id,e=>{let t,a="/"+e;if(1==localStorage.getItem(T+n+"/v",1))try{t=JSON.parse(localStorage[T+n+a])}catch(e){}return t}),this.setPersistedData=(e=>e?(localStorage.setItem(T+e+"/v",1),(t,n)=>{let a="/"+n,r=JSON.stringify(t);t&&n&&(localStorage.setItem(T+e+a,r),dispatchEvent(new Event("storage")))}):()=>{})(t.id),this.clearPersistedData=(e=>t=>{const n=T+"/"+e+"/";if(t)localStorage.removeItem(n+t);else for(let e in localStorage)e.includes(n)&&localStorage.removeItem(e)})(t.id),this.applySettings(e,t),this.state={inputText:"",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(e),E.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),e.autofocus&&this.DOM.input.focus(),e.__tagify=this}return O.prototype={_dropdown:x,getSetTagData:v,helpers:{sameStr:r,removeCollectionProp:i,omit:o,isObject:d,parseHTML:l,escapeHTML:u,extend:m,concatWithoutDups:p,getUID:f,isNodeTag:_},customEventsList:["change","add","remove","invalid","input","click","keydown","focus","blur","edit:input","edit:beforeUpdate","edit:updated","edit:start","edit:keydown","dropdown:show","dropdown:hide","dropdown:select","dropdown:updated","dropdown:noMatch","dropdown:scroll"],dataProps:["__isValid","__removed","__originalData","__originalHTML","__tagId"],trim(e){return this.settings.trim&&e&&"string"==typeof e?e.trim():e},parseHTML:l,templates:A,parseTemplate(e,t){return l((e=this.settings.templates[e]||e).apply(this,t))},set whitelist(e){const t=e&&Array.isArray(e);this.settings.whitelist=t?e:[],this.setPersistedData(t?e:[],"whitelist")},get whitelist(){return this.settings.whitelist},generateClassSelectors(e){for(let t in e){let n=t;Object.defineProperty(e,n+"Selector",{get(){return"."+this[n].split(" ")[0]}})}},applySettings(e,n){y.templates=this.templates;var a=m({},y,"mix"==n.mode?{dropdown:{position:"text"}}:{}),r=this.settings=m({},a,n);if(r.disabled=e.hasAttribute("disabled"),r.readonly=r.readonly||e.hasAttribute("readonly"),r.placeholder=u(e.getAttribute("placeholder")||r.placeholder||""),r.required=e.hasAttribute("required"),this.generateClassSelectors(r.classNames),void 0===r.dropdown.includeSelectedTags&&(r.dropdown.includeSelectedTags=r.duplicates),this.isIE&&(r.autoComplete=!1),["whitelist","blacklist"].forEach((t=>{var n=e.getAttribute("data-"+t);n&&(n=n.split(r.delimiters))instanceof Array&&(r[t]=n)})),"autoComplete"in n&&!d(n.autoComplete)&&(r.autoComplete=y.autoComplete,r.autoComplete.enabled=n.autoComplete),"mix"==r.mode&&(r.pattern=r.pattern||/@/,r.autoComplete.rightKey=!0,r.delimiters=n.delimiters||null,r.tagTextProp&&!r.dropdown.searchKeys.includes(r.tagTextProp)&&r.dropdown.searchKeys.push(r.tagTextProp)),e.pattern)try{r.pattern=new RegExp(e.pattern)}catch(e){}if(r.delimiters){r._delimiters=r.delimiters;try{r.delimiters=new RegExp(this.settings.delimiters,"g")}catch(e){}}r.disabled&&(r.userInput=!1),this.TEXTS=t(t({},C),r.texts||{}),("select"!=r.mode||n.dropdown?.enabled)&&r.userInput||(r.dropdown.enabled=0),r.dropdown.appendTarget=n.dropdown?.appendTarget||document.body;let i=this.getPersistedData("whitelist");Array.isArray(i)&&(this.whitelist=Array.isArray(r.whitelist)?p(r.whitelist,i):i)},getAttributes(e){var t,n=this.getCustomAttributes(e),a="";for(t in n)a+=" "+t+(void 0!==e[t]?`="${n[t]}"`:"");return a},getCustomAttributes(e){if(!d(e))return"";var t,n={};for(t in e)"__"!=t.slice(0,2)&&"class"!=t&&e.hasOwnProperty(t)&&void 0!==e[t]&&(n[t]=u(e[t]));return n},setStateSelection(){var e=window.getSelection(),t={anchorOffset:e.anchorOffset,anchorNode:e.anchorNode,range:e.getRangeAt&&e.rangeCount&&e.getRangeAt(0)};return this.state.selection=t,t},getCSSVars(){var e,t=getComputedStyle(this.DOM.scope,null);this.CSSVars={tagHideTransition:(e=>{let t=e.value;return"s"==e.unit?1e3*t:t})(function(e){if(!e)return{};var t=(e=e.trim().split(" ")[0]).split(/\d+/g).filter((e=>e)).pop().trim();return{value:+e.split(t).filter((e=>e))[0].trim(),unit:t}}((e="tag-hide-transition",t.getPropertyValue("--"+e))))}},build(e){var t=this.DOM;this.settings.mixMode.integrated?(t.originalInput=null,t.scope=e,t.input=e):(t.originalInput=e,t.originalInput_tabIndex=e.tabIndex,t.scope=this.parseTemplate("wrapper",[e,this.settings]),t.input=t.scope.querySelector(this.settings.classNames.inputSelector),e.parentNode.insertBefore(t.scope,e),e.tabIndex=-1)},destroy(){this.events.unbindGlobal.call(this),this.DOM.scope.parentNode.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(this.listeners.main.originalInputValueObserverInterval)},loadOriginalValues(e){var t,n=this.settings;if(this.state.blockChangeEvent=!0,void 0===e){const t=this.getPersistedData("value");e=t&&!this.DOM.originalInput.value?t:n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),e)if("mix"==n.mode)this.parseMixTags(e),(t=this.DOM.input.lastChild)&&"BR"==t.tagName||this.DOM.input.insertAdjacentHTML("beforeend","<br>");else{try{JSON.parse(e)instanceof Array&&(e=JSON.parse(e))}catch(e){}this.addTags(e,!0).forEach((e=>e&&e.classList.add(n.classNames.tagNoAnimation)))}else this.postUpdate();this.state.lastOriginalValueReported=n.mixMode.integrated?"":this.DOM.originalInput.value},cloneEvent(e){var t={};for(var n in e)"path"!=n&&(t[n]=e[n]);return t},loading(e){return this.state.isLoading=e,this.DOM.scope.classList[e?"add":"remove"](this.settings.classNames.scopeLoading),this},tagLoading(e,t){return e&&e.classList[t?"add":"remove"](this.settings.classNames.tagLoading),this},toggleClass(e,t){"string"==typeof e&&this.DOM.scope.classList.toggle(e,t)},toggleScopeValidation(e){var t=!0===e||void 0===e;!this.settings.required&&e&&e===this.TEXTS.empty&&(t=!0),this.toggleClass(this.settings.classNames.tagInvalid,!t),this.DOM.scope.title=t?"":e},toggleFocusClass(e){this.toggleClass(this.settings.classNames.focus,!!e)},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var e=this.DOM.originalInput,t=this.state.lastOriginalValueReported!==e.value,n=new CustomEvent("change",{bubbles:!0});t&&(this.state.lastOriginalValueReported=e.value,n.simulated=!0,e._valueTracker&&e._valueTracker.setValue(Math.random()),e.dispatchEvent(n),this.trigger("change",this.state.lastOriginalValueReported),e.value=this.state.lastOriginalValueReported)}},events:P,fixFirefoxLastTagNoCaret(){},setRangeAtStartEnd(e,t){if(t){e="number"==typeof e?e:!!e,t=t.lastChild||t;var n=document.getSelection();if(n.focusNode instanceof Element&&!this.DOM.input.contains(n.focusNode))return!0;try{n.rangeCount>=1&&["Start","End"].forEach((a=>n.getRangeAt(0)["set"+a](t,e||t.length)))}catch(e){}}},insertAfterTag(e,t){if(t=t||this.settings.mixMode.insertAfterTag,e&&e.parentNode&&t)return t="string"==typeof t?document.createTextNode(t):t,e.parentNode.insertBefore(t,e.nextSibling),t},editTagChangeDetected(e){var t=e.__originalData;for(var n in t)if(!this.dataProps.includes(n)&&e[n]!=t[n])return!0;return!1},getTagTextNode(e){return e.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode(e,t){this.getTagTextNode(e).innerHTML=u(t)},editTag(e,t){e=e||this.getLastTag(),t=t||{},this.dropdown.hide();var n=this.settings,a=this.getTagTextNode(e),r=this.getNodeIndex(e),i=v(e),o=this.events.callbacks,s=this,l=!0;if(a){if(!(i instanceof Object&&"editable"in i)||i.editable)return i=v(e,{__originalData:m({},i),__originalHTML:e.cloneNode(!0)}),v(i.__originalHTML,i.__originalData),a.setAttribute("contenteditable",!0),e.classList.add(n.classNames.tagEditing),a.addEventListener("focus",o.onEditTagFocus.bind(this,e)),a.addEventListener("blur",(function(){setTimeout((()=>o.onEditTagBlur.call(s,s.getTagTextNode(e))))})),a.addEventListener("input",o.onEditTagInput.bind(this,a)),a.addEventListener("paste",o.onEditTagPaste.bind(this,a)),a.addEventListener("keydown",(t=>o.onEditTagkeydown.call(this,t,e))),a.addEventListener("compositionstart",o.onCompositionStart.bind(this)),a.addEventListener("compositionend",o.onCompositionEnd.bind(this)),t.skipValidation||(l=this.editTagToggleValidity(e)),a.originalIsValid=l,this.trigger("edit:start",{tag:e,index:r,data:i,isValid:l}),a.focus(),this.setRangeAtStartEnd(!1,a),this}else console.warn("Cannot find element in Tag template: .",n.classNames.tagTextSelector)},editTagToggleValidity(e,t){var n;if(t=t||v(e))return(n=!("__isValid"in t)||!0===t.__isValid)||this.removeTagsFromValue(e),this.update(),e.classList.toggle(this.settings.classNames.tagNotAllowed,!n),t.__isValid=n,t.__isValid;console.warn("tag has no data: ",e,t)},onEditTagDone(e,t){t=t||{};var n={tag:e=e||this.state.editing.scope,index:this.getNodeIndex(e),previousData:v(e),data:t};this.trigger("edit:beforeUpdate",n,{cloneData:!1}),this.state.editing=!1,delete t.__originalData,delete t.__originalHTML,e&&t[this.settings.tagTextProp]?(e=this.replaceTag(e,t),this.editTagToggleValidity(e,t),this.settings.a11y.focusableTags?e.focus():w(e)):e&&this.removeTags(e),this.trigger("edit:updated",n),this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag(e,t){t&&t.value||(t=e.__tagifyTagData),t.__isValid&&1!=t.__isValid&&m(t,this.getInvalidTagAttrs(t,t.__isValid));var n=this.createTagElem(t);return e.parentNode.replaceChild(n,e),this.updateValueByDOMTags(),n},updateValueByDOMTags(){this.value.length=0,[].forEach.call(this.getTagElms(),(e=>{e.classList.contains(this.settings.classNames.tagNotAllowed.split(" ")[0])||this.value.push(v(e))})),this.update()},injectAtCaret(e,t){return!(t=t||this.state.selection?.range)&&e?(this.appendMixTags(e),this):(b(e,t),this.setRangeAtStartEnd(!1,e),this.updateValueByDOMTags(),this.update(),this)},input:{set(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var n=this.settings.dropdown.closeOnSelect;this.state.inputText=e,t&&(this.DOM.input.innerHTML=u(""+e)),!e&&n&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw(){return this.DOM.input.textContent},validate(){var e=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!e),e},normalize(e){var t=e||this.DOM.input,n=[];t.childNodes.forEach((e=>3==e.nodeType&&n.push(e.nodeValue))),n=n.join("\n");try{n=n.replace(/(?:\r\n|\r|\n)/g,this.settings.delimiters.source.charAt(0))}catch(e){}return n=n.replace(/\s/g," "),this.trim(n)},autocomplete:{suggest(e){if(this.settings.autoComplete.enabled){"string"==typeof(e=e||{value:""})&&(e={value:e});var t=this.dropdown.getMappedValue(e);if("number"!=typeof t){var n=t.substr(0,this.state.inputText.length).toLowerCase(),a=t.substring(this.state.inputText.length);t&&this.state.inputText&&n==this.state.inputText.toLowerCase()?(this.DOM.input.setAttribute("data-suggest",a),this.state.inputSuggestion=e):(this.DOM.input.removeAttribute("data-suggest"),delete this.state.inputSuggestion)}}},set(e){var t=this.DOM.input.getAttribute("data-suggest"),n=e||(t?this.state.inputText+t:null);return!!n&&("mix"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+n)):(this.input.set.call(this,n),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx(e){return this.value.findIndex((t=>t.__tagId==(e||{}).__tagId))},getNodeIndex(e){var t=0;if(e)for(;e=e.previousElementSibling;)t++;return t},getTagElms(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a="."+[...this.settings.classNames.tag.split(" "),...t].join(".");return[].slice.call(this.DOM.scope.querySelectorAll(a))},getLastTag(){var e=this.DOM.scope.querySelectorAll(`${this.settings.classNames.tagSelector}:not(.${this.settings.classNames.tagHide}):not([readonly])`);return e[e.length-1]},isTagDuplicate(e,t,n){var a=0;if("select"==this.settings.mode)return!1;for(let i of this.value)r(this.trim(""+e),i.value,t)&&n!=i.__tagId&&a++;return a},getTagIndexByValue(e){var t=[],n=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach(((a,i)=>{a.__tagifyTagData&&r(this.trim(a.__tagifyTagData.value),e,n)&&t.push(i)})),t},getTagElmByValue(e){var t=this.getTagIndexByValue(e)[0];return this.getTagElms()[t]},flashTag(e){e&&(e.classList.add(this.settings.classNames.tagFlash),setTimeout((()=>{e.classList.remove(this.settings.classNames.tagFlash)}),100))},isTagBlacklisted(e){return e=this.trim(e.toLowerCase()),this.settings.blacklist.filter((t=>(""+t).toLowerCase()==e)).length},isTagWhitelisted(e){return!!this.getWhitelistItem(e)},getWhitelistItem(e,t,n){t=t||"value";var a,i=this.settings;return(n=n||i.whitelist).some((n=>{var o="string"==typeof n?n:n[t]||n.value;if(r(o,e,i.dropdown.caseSensitive,i.trim))return a="string"==typeof n?{value:n}:n,!0})),a||"value"!=t||"value"==i.tagTextProp||(a=this.getWhitelistItem(e,i.tagTextProp,n)),a},validateTag(e){var t=this.settings,n="value"in e?"value":t.tagTextProp,a=this.trim(e[n]+"");return(e[n]+"").trim()?"mix"!=t.mode&&t.pattern&&t.pattern instanceof RegExp&&!t.pattern.test(a)?this.TEXTS.pattern:!t.duplicates&&this.isTagDuplicate(a,t.dropdown.caseSensitive,e.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(a)||t.enforceWhitelist&&!this.isTagWhitelisted(a)?this.TEXTS.notAllowed:!t.validate||t.validate(e):this.TEXTS.empty},getInvalidTagAttrs(e,t){return{"aria-invalid":!0,class:`${e.class||""} ${this.settings.classNames.tagNotAllowed}`.trim(),title:t}},hasMaxTags(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly(e,t){var n=this.settings;document.activeElement.blur(),n[t||"readonly"]=e,this.DOM.scope[(e?"set":"remove")+"Attribute"](t||"readonly",!0),this.settings.userInput=!0,this.setContentEditable(!e)},setContentEditable(e){this.settings.userInput&&(this.DOM.input.contentEditable=e,this.DOM.input.tabIndex=e?0:-1)},setDisabled(e){this.setReadonly(e,"disabled")},normalizeTags(e){var t=this.settings,n=t.whitelist,a=t.delimiters,r=t.mode,i=t.tagTextProp,o=[],s=!!n&&n[0]instanceof Object,l=Array.isArray(e),c=l&&e[0].value,u=e=>(e+"").split(a).filter((e=>e)).map((e=>({[i]:this.trim(e),value:this.trim(e)})));if("number"==typeof e&&(e=e.toString()),"string"==typeof e){if(!e.trim())return[];e=u(e)}else l&&(e=[].concat(...e.map((e=>null!=e.value?e:u(e)))));return s&&!c&&(e.forEach((e=>{var t=o.map((e=>e.value)),n=this.dropdown.filterListItems.call(this,e[i],{exact:!0});this.settings.duplicates||(n=n.filter((e=>!t.includes(e.value))));var a=n.length>1?this.getWhitelistItem(e[i],i,n):n[0];a&&a instanceof Object?o.push(a):"mix"!=r&&(null==e.value&&(e.value=e[i]),o.push(e))})),o.length&&(e=o)),e},parseMixTags(e){var t=this.settings,n=t.mixTagsInterpolator,a=t.duplicates,r=t.transformTag,i=t.enforceWhitelist,o=t.maxTags,s=t.tagTextProp,l=[];e=e.split(n[0]).map(((e,t)=>{var c,u,d,m=e.split(n[1]),p=m[0],h=l.length==o;try{if(p==+p)throw Error;u=JSON.parse(p)}catch(e){u=this.normalizeTags(p)[0]||{value:p}}if(r.call(this,u),h||!(m.length>1)||i&&!this.isTagWhitelisted(u.value)||!a&&this.isTagDuplicate(u.value)){if(e)return t?n[0]+e:e}else u[c=u[s]?s:"value"]=this.trim(u[c]),d=this.createTagElem(u),l.push(u),d.classList.add(this.settings.classNames.tagNoAnimation),m[0]=d.outerHTML,this.value.push(u);return m.join("")})).join(""),this.DOM.input.innerHTML=e,this.DOM.input.appendChild(document.createTextNode("")),this.DOM.input.normalize();var c=this.getTagElms();return c.forEach(((e,t)=>v(e,l[t]))),this.update({withoutChangeEvent:!0}),k(c,this.state.hasFocus),e},replaceTextWithNode(e,t){if(this.state.tag||t){t=t||this.state.tag.prefix+this.state.tag.value;var n,a,r=this.state.selection||window.getSelection(),i=r.anchorNode,o=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return i.splitText(r.anchorOffset-o),-1==(n=i.nodeValue.lastIndexOf(t))||(a=i.splitText(n),e&&i.parentNode.replaceChild(e,a)),!0}},selectTag(e,t){var n=this.settings;if(!n.enforceWhitelist||this.isTagWhitelisted(t.value)){this.input.set.call(this,t[n.tagTextProp]||t.value,!0),this.state.actions.selectOption&&setTimeout((()=>this.setRangeAtStartEnd(!1,this.DOM.input)));var a=this.getLastTag();return a?this.replaceTag(a,t):this.appendTag(e),this.value[0]=t,this.update(),this.trigger("add",{tag:e,data:t}),[e]}},addEmptyTag(e){var t=m({value:""},e||{}),n=this.createTagElem(t);v(n,t),this.appendTag(n),this.editTag(n,{skipValidation:!0})},addTags(e,t,n){var a=[],r=this.settings,i=[],o=document.createDocumentFragment();if(n=n||r.skipInvalid,!e||0==e.length)return a;switch(e=this.normalizeTags(e),r.mode){case"mix":return this.addMixTags(e);case"select":t=!1,this.removeAllTags()}return this.DOM.input.removeAttribute("style"),e.forEach((e=>{var t,s={},l=Object.assign({},e,{value:e.value+""});if(e=Object.assign({},l),r.transformTag.call(this,e),e.__isValid=this.hasMaxTags()||this.validateTag(e),!0!==e.__isValid){if(n)return;if(m(s,this.getInvalidTagAttrs(e,e.__isValid),{__preInvalidData:l}),e.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(e.value)),!r.createInvalidTags)return void i.push(e.value)}if("readonly"in e&&(e.readonly?s["aria-readonly"]=!0:delete e.readonly),t=this.createTagElem(e,s),a.push(t),"select"==r.mode)return this.selectTag(t,e);o.appendChild(t),e.__isValid&&!0===e.__isValid?(this.value.push(e),this.trigger("add",{tag:t,index:this.value.length-1,data:e})):(this.trigger("invalid",{data:e,index:this.value.length,tag:t,message:e.__isValid}),r.keepInvalidTags||setTimeout((()=>this.removeTags(t,!0)),1e3)),this.dropdown.position()})),this.appendTag(o),this.update(),e.length&&t&&(this.input.set.call(this,r.createInvalidTags?"":i.join(r._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),r.dropdown.enabled&&this.dropdown.refilter(),a},addMixTags(e){if((e=this.normalizeTags(e))[0].prefix||this.state.tag)return this.prefixedTextToTag(e[0]);var t=document.createDocumentFragment();return e.forEach((e=>{var n=this.createTagElem(e);t.appendChild(n)})),this.appendMixTags(t),t},appendMixTags(e){var t=!!this.state.selection;t?this.injectAtCaret(e):(this.DOM.input.focus(),(t=this.setStateSelection()).range.setStart(this.DOM.input,t.range.endOffset),t.range.setEnd(this.DOM.input,t.range.endOffset),this.DOM.input.appendChild(e),this.updateValueByDOMTags(),this.update())},prefixedTextToTag(e){var t,n=this.settings,a=this.state.tag.delimiters;if(n.transformTag.call(this,e),e.prefix=e.prefix||this.state.tag?this.state.tag.prefix:(n.pattern.source||n.pattern)[0],t=this.createTagElem(e),this.replaceTextWithNode(t)||this.DOM.input.appendChild(t),setTimeout((()=>t.classList.add(this.settings.classNames.tagNoAnimation)),300),this.value.push(e),this.update(),!a){var r=this.insertAfterTag(t)||t;setTimeout(w,0,r)}return this.state.tag=null,this.trigger("add",m({},{tag:t},{data:e})),t},appendTag(e){var t=this.DOM,n=t.input;t.scope.insertBefore(e,n)},createTagElem(e,n){e.__tagId=f();var a,r=m({},e,t({value:u(e.value+"")},n));return function(e){for(var t,n=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,null,!1);t=n.nextNode();)t.textContent.trim()||t.parentNode.removeChild(t)}(a=this.parseTemplate("tag",[r,this])),v(a,e),a},reCheckInvalidTags(){var e=this.settings;this.getTagElms(e.classNames.tagNotAllowed).forEach(((t,n)=>{var a=v(t),r=this.hasMaxTags(),i=this.validateTag(a),o=!0===i&&!r;if("select"==e.mode&&this.toggleScopeValidation(i),o)return a=a.__preInvalidData?a.__preInvalidData:{value:a.value},this.replaceTag(t,a);t.title=r||i}))},removeTags(e,t,n){var a,r=this.settings;if(e=e&&e instanceof HTMLElement?[e]:e instanceof Array?e:e?[e]:[this.getLastTag()],a=e.reduce(((e,t)=>{t&&"string"==typeof t&&(t=this.getTagElmByValue(t));var n=v(t);return t&&n&&!n.readonly&&e.push({node:t,idx:this.getTagIdx(n),data:v(t,{__removed:!0})}),e}),[]),n="number"==typeof n?n:this.CSSVars.tagHideTransition,"select"==r.mode&&(n=0,this.input.set.call(this)),1==a.length&&"select"!=r.mode&&a[0].node.classList.contains(r.classNames.tagNotAllowed)&&(t=!0),a.length)return r.hooks.beforeRemoveTag(a,{tagify:this}).then((()=>{function e(e){e.node.parentNode&&(e.node.parentNode.removeChild(e.node),t?r.keepInvalidTags&&this.trigger("remove",{tag:e.node,index:e.idx}):(this.trigger("remove",{tag:e.node,index:e.idx,data:e.data}),this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),r.keepInvalidTags&&this.reCheckInvalidTags()))}n&&n>10&&1==a.length?function(t){t.node.style.width=parseFloat(window.getComputedStyle(t.node).width)+"px",document.body.clientTop,t.node.classList.add(r.classNames.tagHide),setTimeout(e.bind(this),n,t)}.call(this,a[0]):a.forEach(e.bind(this)),t||(this.removeTagsFromValue(a.map((e=>e.node))),this.update(),"select"==r.mode&&this.setContentEditable(!0))})).catch((e=>{}))},removeTagsFromDOM(){[].slice.call(this.getTagElms()).forEach((e=>e.parentNode.removeChild(e)))},removeTagsFromValue(e){(e=Array.isArray(e)?e:[e]).forEach((e=>{var t=v(e),n=this.getTagIdx(t);n>-1&&this.value.splice(n,1)}))},removeAllTags(e){e=e||{},this.value=[],"mix"==this.settings.mode?this.DOM.input.innerHTML="":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout((()=>{this.DOM.input.focus()})),"select"==this.settings.mode&&(this.input.set.call(this),this.setContentEditable(!0)),this.update(e)},postUpdate(){this.state.blockChangeEvent=!1;var e=this.settings,t=e.classNames,n="mix"==e.mode?e.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(t.hasMaxTags,this.value.length>=e.maxTags),this.toggleClass(t.hasNoTags,!this.value.length),this.toggleClass(t.empty,!n),"select"==e.mode&&this.toggleScopeValidation(this.value?.[0]?.__isValid)},setOriginalInputValue(e){var t=this.DOM.originalInput;this.settings.mixMode.integrated||(t.value=e,t.tagifyValue=t.value,this.setPersistedData(e,"value"))},update(e){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){var t=this.getInputValue();this.setOriginalInputValue(t),this.settings.onChangeAfterBlur&&(e||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent(),this.postUpdate()}.bind(this),100)},getInputValue(){var e=this.getCleanValue();return"mix"==this.settings.mode?this.getMixedTagsAsString(e):e.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(e):JSON.stringify(e):""},getCleanValue(e){return i(e||this.value,this.dataProps)},getMixedTagsAsString(){var e="",t=this,n=this.settings,a=n.originalInputValueFormat||JSON.stringify,r=n.mixTagsInterpolator;return function n(i){i.childNodes.forEach((i=>{if(1==i.nodeType){const s=v(i);if("BR"==i.tagName&&(e+="\r\n"),s&&_.call(t,i)){if(s.__removed)return;e+=r[0]+a(o(s,t.dataProps))+r[1]}else i.getAttribute("style")||["B","I","U"].includes(i.tagName)?e+=i.textContent:"DIV"!=i.tagName&&"P"!=i.tagName||(e+="\r\n",n(i))}else e+=i.textContent}))}(this.DOM.input),e}},O.prototype.removeTag=O.prototype.removeTags,O}()},184:function(e,t){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)){if(n.length){var o=r.apply(null,n);o&&e.push(o)}}else if("object"===i){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){e.push(n.toString());continue}for(var s in n)a.call(n,s)&&n[s]&&e.push(s)}}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(n=function(){return r}.apply(t,[]))||(e.exports=n)}()},787:function(e,t,n){var a;(function(){function r(e){"use strict";var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `Â«Â«Â«` and `Â»Â»Â»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var n={};for(var a in t)t.hasOwnProperty(a)&&(n[a]=t[a].defaultValue);return n}var i={},o={},s={},l=r(!0),c="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:r(!0),allOn:function(){"use strict";var e=r(!0),t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=!0);return t}()};function d(e,t){"use strict";var n=t?"Error in "+t+" extension->":"Error in unnamed extension",a={valid:!0,error:""};i.helper.isArray(e)||(e=[e]);for(var r=0;r<e.length;++r){var o=n+" sub-extension "+r+": ",s=e[r];if("object"!=typeof s)return a.valid=!1,a.error=o+"must be an object, but "+typeof s+" given",a;if(!i.helper.isString(s.type))return a.valid=!1,a.error=o+'property "type" must be a string, but '+typeof s.type+" given",a;var l=s.type=s.type.toLowerCase();if("language"===l&&(l=s.type="lang"),"html"===l&&(l=s.type="output"),"lang"!==l&&"output"!==l&&"listener"!==l)return a.valid=!1,a.error=o+"type "+l+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',a;if("listener"===l){if(i.helper.isUndefined(s.listeners))return a.valid=!1,a.error=o+'. Extensions of type "listener" must have a property called "listeners"',a}else if(i.helper.isUndefined(s.filter)&&i.helper.isUndefined(s.regex))return a.valid=!1,a.error=o+l+' extensions must define either a "regex" property or a "filter" method',a;if(s.listeners){if("object"!=typeof s.listeners)return a.valid=!1,a.error=o+'"listeners" property must be an object but '+typeof s.listeners+" given",a;for(var c in s.listeners)if(s.listeners.hasOwnProperty(c)&&"function"!=typeof s.listeners[c])return a.valid=!1,a.error=o+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+c+" must be a function but "+typeof s.listeners[c]+" given",a}if(s.filter){if("function"!=typeof s.filter)return a.valid=!1,a.error=o+'"filter" must be a function, but '+typeof s.filter+" given",a}else if(s.regex){if(i.helper.isString(s.regex)&&(s.regex=new RegExp(s.regex,"g")),!(s.regex instanceof RegExp))return a.valid=!1,a.error=o+'"regex" property must either be a string or a RegExp object, but '+typeof s.regex+" given",a;if(i.helper.isUndefined(s.replace))return a.valid=!1,a.error=o+'"regex" extensions must implement a replace string or function',a}}return a}function m(e,t){"use strict";return"Â¨E"+t.charCodeAt(0)+"E"}i.helper={},i.extensions={},i.setOption=function(e,t){"use strict";return l[e]=t,this},i.getOption=function(e){"use strict";return l[e]},i.getOptions=function(){"use strict";return l},i.resetOptions=function(){"use strict";l=r(!0)},i.setFlavor=function(e){"use strict";if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");i.resetOptions();var t=u[e];for(var n in c=e,t)t.hasOwnProperty(n)&&(l[n]=t[n])},i.getFlavor=function(){"use strict";return c},i.getFlavorOptions=function(e){"use strict";if(u.hasOwnProperty(e))return u[e]},i.getDefaultOptions=function(e){"use strict";return r(e)},i.subParser=function(e,t){"use strict";if(i.helper.isString(e)){if(void 0===t){if(o.hasOwnProperty(e))return o[e];throw Error("SubParser named "+e+" not registered!")}o[e]=t}},i.extension=function(e,t){"use strict";if(!i.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=i.helper.stdExtName(e),i.helper.isUndefined(t)){if(!s.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return s[e]}"function"==typeof t&&(t=t()),i.helper.isArray(t)||(t=[t]);var n=d(t,e);if(!n.valid)throw Error(n.error);s[e]=t},i.getAllExtensions=function(){"use strict";return s},i.removeExtension=function(e){"use strict";delete s[e]},i.resetExtensions=function(){"use strict";s={}},i.validateExtension=function(e){"use strict";var t=d(e,null);return!!t.valid||(console.warn(t.error),!1)},i.hasOwnProperty("helper")||(i.helper={}),i.helper.isString=function(e){"use strict";return"string"==typeof e||e instanceof String},i.helper.isFunction=function(e){"use strict";return e&&"[object Function]"==={}.toString.call(e)},i.helper.isArray=function(e){"use strict";return Array.isArray(e)},i.helper.isUndefined=function(e){"use strict";return void 0===e},i.helper.forEach=function(e,t){"use strict";if(i.helper.isUndefined(e))throw new Error("obj param is required");if(i.helper.isUndefined(t))throw new Error("callback param is required");if(!i.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(i.helper.isArray(e))for(var n=0;n<e.length;n++)t(e[n],n,e);else{if("object"!=typeof e)throw new Error("obj does not seem to be an array or an iterable object");for(var a in e)e.hasOwnProperty(a)&&t(e[a],a,e)}},i.helper.stdExtName=function(e){"use strict";return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},i.helper.escapeCharactersCallback=m,i.helper.escapeCharacters=function(e,t,n){"use strict";var a="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";n&&(a="\\\\"+a);var r=new RegExp(a,"g");return e=e.replace(r,m)},i.helper.unescapeHTMLEntities=function(e){"use strict";return e.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")};var p=function(e,t,n,a){"use strict";var r,i,o,s,l,c=a||"",u=c.indexOf("g")>-1,d=new RegExp(t+"|"+n,"g"+c.replace(/g/g,"")),m=new RegExp(t,c.replace(/g/g,"")),p=[];do{for(r=0;o=d.exec(e);)if(m.test(o[0]))r++||(s=(i=d.lastIndex)-o[0].length);else if(r&&! --r){l=o.index+o[0].length;var h={left:{start:s,end:i},match:{start:i,end:o.index},right:{start:o.index,end:l},wholeMatch:{start:s,end:l}};if(p.push(h),!u)return p}}while(r&&(d.lastIndex=i));return p};i.helper.matchRecursiveRegExp=function(e,t,n,a){"use strict";for(var r=p(e,t,n,a),i=[],o=0;o<r.length;++o)i.push([e.slice(r[o].wholeMatch.start,r[o].wholeMatch.end),e.slice(r[o].match.start,r[o].match.end),e.slice(r[o].left.start,r[o].left.end),e.slice(r[o].right.start,r[o].right.end)]);return i},i.helper.replaceRecursiveRegExp=function(e,t,n,a,r){"use strict";if(!i.helper.isFunction(t)){var o=t;t=function(){return o}}var s=p(e,n,a,r),l=e,c=s.length;if(c>0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var d=0;d<c;++d)u.push(t(e.slice(s[d].wholeMatch.start,s[d].wholeMatch.end),e.slice(s[d].match.start,s[d].match.end),e.slice(s[d].left.start,s[d].left.end),e.slice(s[d].right.start,s[d].right.end))),d<c-1&&u.push(e.slice(s[d].wholeMatch.end,s[d+1].wholeMatch.start));s[c-1].wholeMatch.end<e.length&&u.push(e.slice(s[c-1].wholeMatch.end)),l=u.join("")}return l},i.helper.regexIndexOf=function(e,t,n){"use strict";if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==!1)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var a=e.substring(n||0).search(t);return a>=0?a+(n||0):a},i.helper.splitAtIndex=function(e,t){"use strict";if(!i.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},i.helper.encodeEmailAddress=function(e){"use strict";var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e=e.replace(/./g,(function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var n=Math.random();e=n>.9?t[2](e):n>.45?t[1](e):t[0](e)}return e}))},i.helper.padEnd=function(e,t,n){"use strict";return t>>=0,n=String(n||" "),e.length>t?String(e):((t-=e.length)>n.length&&(n+=n.repeat(t/n.length)),String(e)+n.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){"use strict";alert(e)},log:function(e){"use strict";alert(e)},error:function(e){"use strict";throw e}}),i.helper.regexes={asteriskDashAndColon:/([*_:~])/g},i.helper.emojis={"+1":"ðŸ‘�","-1":"ðŸ‘Ž",100:"ðŸ’¯",1234:"ðŸ”¢","1st_place_medal":"ðŸ¥‡","2nd_place_medal":"ðŸ¥ˆ","3rd_place_medal":"ðŸ¥‰","8ball":"ðŸŽ±",a:"ðŸ…°ï¸�",ab:"ðŸ†Ž",abc:"ðŸ”¤",abcd:"ðŸ”¡",accept:"ðŸ‰‘",aerial_tramway:"ðŸš¡",airplane:"âœˆï¸�",alarm_clock:"â�°",alembic:"âš—ï¸�",alien:"ðŸ‘½",ambulance:"ðŸš‘",amphora:"ðŸ�º",anchor:"âš“ï¸�",angel:"ðŸ‘¼",anger:"ðŸ’¢",angry:"ðŸ˜ ",anguished:"ðŸ˜§",ant:"ðŸ�œ",apple:"ðŸ�Ž",aquarius:"â™’ï¸�",aries:"â™ˆï¸�",arrow_backward:"â—€ï¸�",arrow_double_down:"â�¬",arrow_double_up:"â�«",arrow_down:"â¬‡ï¸�",arrow_down_small:"ðŸ”½",arrow_forward:"â–¶ï¸�",arrow_heading_down:"â¤µï¸�",arrow_heading_up:"â¤´ï¸�",arrow_left:"â¬…ï¸�",arrow_lower_left:"â†™ï¸�",arrow_lower_right:"â†˜ï¸�",arrow_right:"âž¡ï¸�",arrow_right_hook:"â†ªï¸�",arrow_up:"â¬†ï¸�",arrow_up_down:"â†•ï¸�",arrow_up_small:"ðŸ”¼",arrow_upper_left:"â†–ï¸�",arrow_upper_right:"â†—ï¸�",arrows_clockwise:"ðŸ”ƒ",arrows_counterclockwise:"ðŸ”„",art:"ðŸŽ¨",articulated_lorry:"ðŸš›",artificial_satellite:"ðŸ›°",astonished:"ðŸ˜²",athletic_shoe:"ðŸ‘Ÿ",atm:"ðŸ�§",atom_symbol:"âš›ï¸�",avocado:"ðŸ¥‘",b:"ðŸ…±ï¸�",baby:"ðŸ‘¶",baby_bottle:"ðŸ�¼",baby_chick:"ðŸ�¤",baby_symbol:"ðŸš¼",back:"ðŸ”™",bacon:"ðŸ¥“",badminton:"ðŸ�¸",baggage_claim:"ðŸ›„",baguette_bread:"ðŸ¥–",balance_scale:"âš–ï¸�",balloon:"ðŸŽˆ",ballot_box:"ðŸ—³",ballot_box_with_check:"â˜‘ï¸�",bamboo:"ðŸŽ�",banana:"ðŸ�Œ",bangbang:"â€¼ï¸�",bank:"ðŸ�¦",bar_chart:"ðŸ“Š",barber:"ðŸ’ˆ",baseball:"âš¾ï¸�",basketball:"ðŸ�€",basketball_man:"â›¹ï¸�",basketball_woman:"â›¹ï¸�&zwj;â™€ï¸�",bat:"ðŸ¦‡",bath:"ðŸ›€",bathtub:"ðŸ›�",battery:"ðŸ”‹",beach_umbrella:"ðŸ�–",bear:"ðŸ�»",bed:"ðŸ›�",bee:"ðŸ��",beer:"ðŸ�º",beers:"ðŸ�»",beetle:"ðŸ�ž",beginner:"ðŸ”°",bell:"ðŸ””",bellhop_bell:"ðŸ›Ž",bento:"ðŸ�±",biking_man:"ðŸš´",bike:"ðŸš²",biking_woman:"ðŸš´&zwj;â™€ï¸�",bikini:"ðŸ‘™",biohazard:"â˜£ï¸�",bird:"ðŸ�¦",birthday:"ðŸŽ‚",black_circle:"âš«ï¸�",black_flag:"ðŸ�´",black_heart:"ðŸ–¤",black_joker:"ðŸƒ�",black_large_square:"â¬›ï¸�",black_medium_small_square:"â—¾ï¸�",black_medium_square:"â—¼ï¸�",black_nib:"âœ’ï¸�",black_small_square:"â–ªï¸�",black_square_button:"ðŸ”²",blonde_man:"ðŸ‘±",blonde_woman:"ðŸ‘±&zwj;â™€ï¸�",blossom:"ðŸŒ¼",blowfish:"ðŸ�¡",blue_book:"ðŸ“˜",blue_car:"ðŸš™",blue_heart:"ðŸ’™",blush:"ðŸ˜Š",boar:"ðŸ�—",boat:"â›µï¸�",bomb:"ðŸ’£",book:"ðŸ“–",bookmark:"ðŸ”–",bookmark_tabs:"ðŸ“‘",books:"ðŸ“š",boom:"ðŸ’¥",boot:"ðŸ‘¢",bouquet:"ðŸ’�",bowing_man:"ðŸ™‡",bow_and_arrow:"ðŸ�¹",bowing_woman:"ðŸ™‡&zwj;â™€ï¸�",bowling:"ðŸŽ³",boxing_glove:"ðŸ¥Š",boy:"ðŸ‘¦",bread:"ðŸ�ž",bride_with_veil:"ðŸ‘°",bridge_at_night:"ðŸŒ‰",briefcase:"ðŸ’¼",broken_heart:"ðŸ’”",bug:"ðŸ�›",building_construction:"ðŸ�—",bulb:"ðŸ’¡",bullettrain_front:"ðŸš…",bullettrain_side:"ðŸš„",burrito:"ðŸŒ¯",bus:"ðŸšŒ",business_suit_levitating:"ðŸ•´",busstop:"ðŸš�",bust_in_silhouette:"ðŸ‘¤",busts_in_silhouette:"ðŸ‘¥",butterfly:"ðŸ¦‹",cactus:"ðŸŒµ",cake:"ðŸ�°",calendar:"ðŸ“†",call_me_hand:"ðŸ¤™",calling:"ðŸ“²",camel:"ðŸ�«",camera:"ðŸ“·",camera_flash:"ðŸ“¸",camping:"ðŸ�•",cancer:"â™‹ï¸�",candle:"ðŸ•¯",candy:"ðŸ�¬",canoe:"ðŸ›¶",capital_abcd:"ðŸ” ",capricorn:"â™‘ï¸�",car:"ðŸš—",card_file_box:"ðŸ—ƒ",card_index:"ðŸ“‡",card_index_dividers:"ðŸ—‚",carousel_horse:"ðŸŽ ",carrot:"ðŸ¥•",cat:"ðŸ�±",cat2:"ðŸ�ˆ",cd:"ðŸ’¿",chains:"â›“",champagne:"ðŸ�¾",chart:"ðŸ’¹",chart_with_downwards_trend:"ðŸ“‰",chart_with_upwards_trend:"ðŸ“ˆ",checkered_flag:"ðŸ��",cheese:"ðŸ§€",cherries:"ðŸ�’",cherry_blossom:"ðŸŒ¸",chestnut:"ðŸŒ°",chicken:"ðŸ�”",children_crossing:"ðŸš¸",chipmunk:"ðŸ�¿",chocolate_bar:"ðŸ�«",christmas_tree:"ðŸŽ„",church:"â›ªï¸�",cinema:"ðŸŽ¦",circus_tent:"ðŸŽª",city_sunrise:"ðŸŒ‡",city_sunset:"ðŸŒ†",cityscape:"ðŸ�™",cl:"ðŸ†‘",clamp:"ðŸ—œ",clap:"ðŸ‘�",clapper:"ðŸŽ¬",classical_building:"ðŸ�›",clinking_glasses:"ðŸ¥‚",clipboard:"ðŸ“‹",clock1:"ðŸ•�",clock10:"ðŸ•™",clock1030:"ðŸ•¥",clock11:"ðŸ•š",clock1130:"ðŸ•¦",clock12:"ðŸ•›",clock1230:"ðŸ•§",clock130:"ðŸ•œ",clock2:"ðŸ•‘",clock230:"ðŸ•�",clock3:"ðŸ•’",clock330:"ðŸ•ž",clock4:"ðŸ•“",clock430:"ðŸ•Ÿ",clock5:"ðŸ•”",clock530:"ðŸ• ",clock6:"ðŸ••",clock630:"ðŸ•¡",clock7:"ðŸ•–",clock730:"ðŸ•¢",clock8:"ðŸ•—",clock830:"ðŸ•£",clock9:"ðŸ•˜",clock930:"ðŸ•¤",closed_book:"ðŸ“•",closed_lock_with_key:"ðŸ”�",closed_umbrella:"ðŸŒ‚",cloud:"â˜�ï¸�",cloud_with_lightning:"ðŸŒ©",cloud_with_lightning_and_rain:"â›ˆ",cloud_with_rain:"ðŸŒ§",cloud_with_snow:"ðŸŒ¨",clown_face:"ðŸ¤¡",clubs:"â™£ï¸�",cocktail:"ðŸ�¸",coffee:"â˜•ï¸�",coffin:"âš°ï¸�",cold_sweat:"ðŸ˜°",comet:"â˜„ï¸�",computer:"ðŸ’»",computer_mouse:"ðŸ–±",confetti_ball:"ðŸŽŠ",confounded:"ðŸ˜–",confused:"ðŸ˜•",congratulations:"ãŠ—ï¸�",construction:"ðŸš§",construction_worker_man:"ðŸ‘·",construction_worker_woman:"ðŸ‘·&zwj;â™€ï¸�",control_knobs:"ðŸŽ›",convenience_store:"ðŸ�ª",cookie:"ðŸ�ª",cool:"ðŸ†’",policeman:"ðŸ‘®",copyright:"Â©ï¸�",corn:"ðŸŒ½",couch_and_lamp:"ðŸ›‹",couple:"ðŸ‘«",couple_with_heart_woman_man:"ðŸ’‘",couple_with_heart_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ‘¨",couple_with_heart_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ‘©",couplekiss_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘¨",couplekiss_man_woman:"ðŸ’�",couplekiss_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘©",cow:"ðŸ�®",cow2:"ðŸ�„",cowboy_hat_face:"ðŸ¤ ",crab:"ðŸ¦€",crayon:"ðŸ–�",credit_card:"ðŸ’³",crescent_moon:"ðŸŒ™",cricket:"ðŸ��",crocodile:"ðŸ�Š",croissant:"ðŸ¥�",crossed_fingers:"ðŸ¤ž",crossed_flags:"ðŸŽŒ",crossed_swords:"âš”ï¸�",crown:"ðŸ‘‘",cry:"ðŸ˜¢",crying_cat_face:"ðŸ˜¿",crystal_ball:"ðŸ”®",cucumber:"ðŸ¥’",cupid:"ðŸ’˜",curly_loop:"âž°",currency_exchange:"ðŸ’±",curry:"ðŸ�›",custard:"ðŸ�®",customs:"ðŸ›ƒ",cyclone:"ðŸŒ€",dagger:"ðŸ—¡",dancer:"ðŸ’ƒ",dancing_women:"ðŸ‘¯",dancing_men:"ðŸ‘¯&zwj;â™‚ï¸�",dango:"ðŸ�¡",dark_sunglasses:"ðŸ•¶",dart:"ðŸŽ¯",dash:"ðŸ’¨",date:"ðŸ“…",deciduous_tree:"ðŸŒ³",deer:"ðŸ¦Œ",department_store:"ðŸ�¬",derelict_house:"ðŸ�š",desert:"ðŸ�œ",desert_island:"ðŸ��",desktop_computer:"ðŸ–¥",male_detective:"ðŸ•µï¸�",diamond_shape_with_a_dot_inside:"ðŸ’ ",diamonds:"â™¦ï¸�",disappointed:"ðŸ˜ž",disappointed_relieved:"ðŸ˜¥",dizzy:"ðŸ’«",dizzy_face:"ðŸ˜µ",do_not_litter:"ðŸš¯",dog:"ðŸ�¶",dog2:"ðŸ�•",dollar:"ðŸ’µ",dolls:"ðŸŽŽ",dolphin:"ðŸ�¬",door:"ðŸšª",doughnut:"ðŸ�©",dove:"ðŸ•Š",dragon:"ðŸ�‰",dragon_face:"ðŸ�²",dress:"ðŸ‘—",dromedary_camel:"ðŸ�ª",drooling_face:"ðŸ¤¤",droplet:"ðŸ’§",drum:"ðŸ¥�",duck:"ðŸ¦†",dvd:"ðŸ“€","e-mail":"ðŸ“§",eagle:"ðŸ¦…",ear:"ðŸ‘‚",ear_of_rice:"ðŸŒ¾",earth_africa:"ðŸŒ�",earth_americas:"ðŸŒŽ",earth_asia:"ðŸŒ�",egg:"ðŸ¥š",eggplant:"ðŸ�†",eight_pointed_black_star:"âœ´ï¸�",eight_spoked_asterisk:"âœ³ï¸�",electric_plug:"ðŸ”Œ",elephant:"ðŸ�˜",email:"âœ‰ï¸�",end:"ðŸ”š",envelope_with_arrow:"ðŸ“©",euro:"ðŸ’¶",european_castle:"ðŸ�°",european_post_office:"ðŸ�¤",evergreen_tree:"ðŸŒ²",exclamation:"â�—ï¸�",expressionless:"ðŸ˜‘",eye:"ðŸ‘�",eye_speech_bubble:"ðŸ‘�&zwj;ðŸ—¨",eyeglasses:"ðŸ‘“",eyes:"ðŸ‘€",face_with_head_bandage:"ðŸ¤•",face_with_thermometer:"ðŸ¤’",fist_oncoming:"ðŸ‘Š",factory:"ðŸ�­",fallen_leaf:"ðŸ�‚",family_man_woman_boy:"ðŸ‘ª",family_man_boy:"ðŸ‘¨&zwj;ðŸ‘¦",family_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_girl:"ðŸ‘¨&zwj;ðŸ‘§",family_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_man_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦",family_man_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_man_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§",family_man_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_woman_boy_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_woman_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§",family_man_woman_girl_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_woman_girl_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_boy:"ðŸ‘©&zwj;ðŸ‘¦",family_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_girl:"ðŸ‘©&zwj;ðŸ‘§",family_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_woman_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦",family_woman_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_woman_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§",family_woman_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",fast_forward:"â�©",fax:"ðŸ“ ",fearful:"ðŸ˜¨",feet:"ðŸ�¾",female_detective:"ðŸ•µï¸�&zwj;â™€ï¸�",ferris_wheel:"ðŸŽ¡",ferry:"â›´",field_hockey:"ðŸ�‘",file_cabinet:"ðŸ—„",file_folder:"ðŸ“�",film_projector:"ðŸ“½",film_strip:"ðŸŽž",fire:"ðŸ”¥",fire_engine:"ðŸš’",fireworks:"ðŸŽ†",first_quarter_moon:"ðŸŒ“",first_quarter_moon_with_face:"ðŸŒ›",fish:"ðŸ�Ÿ",fish_cake:"ðŸ�¥",fishing_pole_and_fish:"ðŸŽ£",fist_raised:"âœŠ",fist_left:"ðŸ¤›",fist_right:"ðŸ¤œ",flags:"ðŸŽ�",flashlight:"ðŸ”¦",fleur_de_lis:"âšœï¸�",flight_arrival:"ðŸ›¬",flight_departure:"ðŸ›«",floppy_disk:"ðŸ’¾",flower_playing_cards:"ðŸŽ´",flushed:"ðŸ˜³",fog:"ðŸŒ«",foggy:"ðŸŒ�",football:"ðŸ�ˆ",footprints:"ðŸ‘£",fork_and_knife:"ðŸ�´",fountain:"â›²ï¸�",fountain_pen:"ðŸ–‹",four_leaf_clover:"ðŸ�€",fox_face:"ðŸ¦Š",framed_picture:"ðŸ–¼",free:"ðŸ†“",fried_egg:"ðŸ�³",fried_shrimp:"ðŸ�¤",fries:"ðŸ�Ÿ",frog:"ðŸ�¸",frowning:"ðŸ˜¦",frowning_face:"â˜¹ï¸�",frowning_man:"ðŸ™�&zwj;â™‚ï¸�",frowning_woman:"ðŸ™�",middle_finger:"ðŸ–•",fuelpump:"â›½ï¸�",full_moon:"ðŸŒ•",full_moon_with_face:"ðŸŒ�",funeral_urn:"âš±ï¸�",game_die:"ðŸŽ²",gear:"âš™ï¸�",gem:"ðŸ’Ž",gemini:"â™Šï¸�",ghost:"ðŸ‘»",gift:"ðŸŽ�",gift_heart:"ðŸ’�",girl:"ðŸ‘§",globe_with_meridians:"ðŸŒ�",goal_net:"ðŸ¥…",goat:"ðŸ��",golf:"â›³ï¸�",golfing_man:"ðŸ�Œï¸�",golfing_woman:"ðŸ�Œï¸�&zwj;â™€ï¸�",gorilla:"ðŸ¦�",grapes:"ðŸ�‡",green_apple:"ðŸ��",green_book:"ðŸ“—",green_heart:"ðŸ’š",green_salad:"ðŸ¥—",grey_exclamation:"â�•",grey_question:"â�”",grimacing:"ðŸ˜¬",grin:"ðŸ˜�",grinning:"ðŸ˜€",guardsman:"ðŸ’‚",guardswoman:"ðŸ’‚&zwj;â™€ï¸�",guitar:"ðŸŽ¸",gun:"ðŸ”«",haircut_woman:"ðŸ’‡",haircut_man:"ðŸ’‡&zwj;â™‚ï¸�",hamburger:"ðŸ�”",hammer:"ðŸ”¨",hammer_and_pick:"âš’",hammer_and_wrench:"ðŸ› ",hamster:"ðŸ�¹",hand:"âœ‹",handbag:"ðŸ‘œ",handshake:"ðŸ¤�",hankey:"ðŸ’©",hatched_chick:"ðŸ�¥",hatching_chick:"ðŸ�£",headphones:"ðŸŽ§",hear_no_evil:"ðŸ™‰",heart:"â�¤ï¸�",heart_decoration:"ðŸ’Ÿ",heart_eyes:"ðŸ˜�",heart_eyes_cat:"ðŸ˜»",heartbeat:"ðŸ’“",heartpulse:"ðŸ’—",hearts:"â™¥ï¸�",heavy_check_mark:"âœ”ï¸�",heavy_division_sign:"âž—",heavy_dollar_sign:"ðŸ’²",heavy_heart_exclamation:"â�£ï¸�",heavy_minus_sign:"âž–",heavy_multiplication_x:"âœ–ï¸�",heavy_plus_sign:"âž•",helicopter:"ðŸš�",herb:"ðŸŒ¿",hibiscus:"ðŸŒº",high_brightness:"ðŸ”†",high_heel:"ðŸ‘ ",hocho:"ðŸ”ª",hole:"ðŸ•³",honey_pot:"ðŸ�¯",horse:"ðŸ�´",horse_racing:"ðŸ�‡",hospital:"ðŸ�¥",hot_pepper:"ðŸŒ¶",hotdog:"ðŸŒ­",hotel:"ðŸ�¨",hotsprings:"â™¨ï¸�",hourglass:"âŒ›ï¸�",hourglass_flowing_sand:"â�³",house:"ðŸ� ",house_with_garden:"ðŸ�¡",houses:"ðŸ�˜",hugs:"ðŸ¤—",hushed:"ðŸ˜¯",ice_cream:"ðŸ�¨",ice_hockey:"ðŸ�’",ice_skate:"â›¸",icecream:"ðŸ�¦",id:"ðŸ†”",ideograph_advantage:"ðŸ‰�",imp:"ðŸ‘¿",inbox_tray:"ðŸ“¥",incoming_envelope:"ðŸ“¨",tipping_hand_woman:"ðŸ’�",information_source:"â„¹ï¸�",innocent:"ðŸ˜‡",interrobang:"â�‰ï¸�",iphone:"ðŸ“±",izakaya_lantern:"ðŸ�®",jack_o_lantern:"ðŸŽƒ",japan:"ðŸ—¾",japanese_castle:"ðŸ�¯",japanese_goblin:"ðŸ‘º",japanese_ogre:"ðŸ‘¹",jeans:"ðŸ‘–",joy:"ðŸ˜‚",joy_cat:"ðŸ˜¹",joystick:"ðŸ•¹",kaaba:"ðŸ•‹",key:"ðŸ”‘",keyboard:"âŒ¨ï¸�",keycap_ten:"ðŸ”Ÿ",kick_scooter:"ðŸ›´",kimono:"ðŸ‘˜",kiss:"ðŸ’‹",kissing:"ðŸ˜—",kissing_cat:"ðŸ˜½",kissing_closed_eyes:"ðŸ˜š",kissing_heart:"ðŸ˜˜",kissing_smiling_eyes:"ðŸ˜™",kiwi_fruit:"ðŸ¥�",koala:"ðŸ�¨",koko:"ðŸˆ�",label:"ðŸ�·",large_blue_circle:"ðŸ”µ",large_blue_diamond:"ðŸ”·",large_orange_diamond:"ðŸ”¶",last_quarter_moon:"ðŸŒ—",last_quarter_moon_with_face:"ðŸŒœ",latin_cross:"âœ�ï¸�",laughing:"ðŸ˜†",leaves:"ðŸ�ƒ",ledger:"ðŸ“’",left_luggage:"ðŸ›…",left_right_arrow:"â†”ï¸�",leftwards_arrow_with_hook:"â†©ï¸�",lemon:"ðŸ�‹",leo:"â™Œï¸�",leopard:"ðŸ�†",level_slider:"ðŸŽš",libra:"â™Žï¸�",light_rail:"ðŸšˆ",link:"ðŸ”—",lion:"ðŸ¦�",lips:"ðŸ‘„",lipstick:"ðŸ’„",lizard:"ðŸ¦Ž",lock:"ðŸ”’",lock_with_ink_pen:"ðŸ”�",lollipop:"ðŸ�­",loop:"âž¿",loud_sound:"ðŸ”Š",loudspeaker:"ðŸ“¢",love_hotel:"ðŸ�©",love_letter:"ðŸ’Œ",low_brightness:"ðŸ”…",lying_face:"ðŸ¤¥",m:"â“‚ï¸�",mag:"ðŸ”�",mag_right:"ðŸ”Ž",mahjong:"ðŸ€„ï¸�",mailbox:"ðŸ“«",mailbox_closed:"ðŸ“ª",mailbox_with_mail:"ðŸ“¬",mailbox_with_no_mail:"ðŸ“­",man:"ðŸ‘¨",man_artist:"ðŸ‘¨&zwj;ðŸŽ¨",man_astronaut:"ðŸ‘¨&zwj;ðŸš€",man_cartwheeling:"ðŸ¤¸&zwj;â™‚ï¸�",man_cook:"ðŸ‘¨&zwj;ðŸ�³",man_dancing:"ðŸ•º",man_facepalming:"ðŸ¤¦&zwj;â™‚ï¸�",man_factory_worker:"ðŸ‘¨&zwj;ðŸ�­",man_farmer:"ðŸ‘¨&zwj;ðŸŒ¾",man_firefighter:"ðŸ‘¨&zwj;ðŸš’",man_health_worker:"ðŸ‘¨&zwj;âš•ï¸�",man_in_tuxedo:"ðŸ¤µ",man_judge:"ðŸ‘¨&zwj;âš–ï¸�",man_juggling:"ðŸ¤¹&zwj;â™‚ï¸�",man_mechanic:"ðŸ‘¨&zwj;ðŸ”§",man_office_worker:"ðŸ‘¨&zwj;ðŸ’¼",man_pilot:"ðŸ‘¨&zwj;âœˆï¸�",man_playing_handball:"ðŸ¤¾&zwj;â™‚ï¸�",man_playing_water_polo:"ðŸ¤½&zwj;â™‚ï¸�",man_scientist:"ðŸ‘¨&zwj;ðŸ”¬",man_shrugging:"ðŸ¤·&zwj;â™‚ï¸�",man_singer:"ðŸ‘¨&zwj;ðŸŽ¤",man_student:"ðŸ‘¨&zwj;ðŸŽ“",man_teacher:"ðŸ‘¨&zwj;ðŸ�«",man_technologist:"ðŸ‘¨&zwj;ðŸ’»",man_with_gua_pi_mao:"ðŸ‘²",man_with_turban:"ðŸ‘³",tangerine:"ðŸ�Š",mans_shoe:"ðŸ‘ž",mantelpiece_clock:"ðŸ•°",maple_leaf:"ðŸ��",martial_arts_uniform:"ðŸ¥‹",mask:"ðŸ˜·",massage_woman:"ðŸ’†",massage_man:"ðŸ’†&zwj;â™‚ï¸�",meat_on_bone:"ðŸ�–",medal_military:"ðŸŽ–",medal_sports:"ðŸ�…",mega:"ðŸ“£",melon:"ðŸ�ˆ",memo:"ðŸ“�",men_wrestling:"ðŸ¤¼&zwj;â™‚ï¸�",menorah:"ðŸ•Ž",mens:"ðŸš¹",metal:"ðŸ¤˜",metro:"ðŸš‡",microphone:"ðŸŽ¤",microscope:"ðŸ”¬",milk_glass:"ðŸ¥›",milky_way:"ðŸŒŒ",minibus:"ðŸš�",minidisc:"ðŸ’½",mobile_phone_off:"ðŸ“´",money_mouth_face:"ðŸ¤‘",money_with_wings:"ðŸ’¸",moneybag:"ðŸ’°",monkey:"ðŸ�’",monkey_face:"ðŸ�µ",monorail:"ðŸš�",moon:"ðŸŒ”",mortar_board:"ðŸŽ“",mosque:"ðŸ•Œ",motor_boat:"ðŸ›¥",motor_scooter:"ðŸ›µ",motorcycle:"ðŸ��",motorway:"ðŸ›£",mount_fuji:"ðŸ—»",mountain:"â›°",mountain_biking_man:"ðŸšµ",mountain_biking_woman:"ðŸšµ&zwj;â™€ï¸�",mountain_cableway:"ðŸš ",mountain_railway:"ðŸšž",mountain_snow:"ðŸ�”",mouse:"ðŸ�­",mouse2:"ðŸ��",movie_camera:"ðŸŽ¥",moyai:"ðŸ—¿",mrs_claus:"ðŸ¤¶",muscle:"ðŸ’ª",mushroom:"ðŸ�„",musical_keyboard:"ðŸŽ¹",musical_note:"ðŸŽµ",musical_score:"ðŸŽ¼",mute:"ðŸ”‡",nail_care:"ðŸ’…",name_badge:"ðŸ“›",national_park:"ðŸ�ž",nauseated_face:"ðŸ¤¢",necktie:"ðŸ‘”",negative_squared_cross_mark:"â�Ž",nerd_face:"ðŸ¤“",neutral_face:"ðŸ˜�",new:"ðŸ†•",new_moon:"ðŸŒ‘",new_moon_with_face:"ðŸŒš",newspaper:"ðŸ“°",newspaper_roll:"ðŸ—ž",next_track_button:"â�­",ng:"ðŸ†–",no_good_man:"ðŸ™…&zwj;â™‚ï¸�",no_good_woman:"ðŸ™…",night_with_stars:"ðŸŒƒ",no_bell:"ðŸ”•",no_bicycles:"ðŸš³",no_entry:"â›”ï¸�",no_entry_sign:"ðŸš«",no_mobile_phones:"ðŸ“µ",no_mouth:"ðŸ˜¶",no_pedestrians:"ðŸš·",no_smoking:"ðŸš­","non-potable_water":"ðŸš±",nose:"ðŸ‘ƒ",notebook:"ðŸ““",notebook_with_decorative_cover:"ðŸ“”",notes:"ðŸŽ¶",nut_and_bolt:"ðŸ”©",o:"â­•ï¸�",o2:"ðŸ…¾ï¸�",ocean:"ðŸŒŠ",octopus:"ðŸ�™",oden:"ðŸ�¢",office:"ðŸ�¢",oil_drum:"ðŸ›¢",ok:"ðŸ†—",ok_hand:"ðŸ‘Œ",ok_man:"ðŸ™†&zwj;â™‚ï¸�",ok_woman:"ðŸ™†",old_key:"ðŸ—�",older_man:"ðŸ‘´",older_woman:"ðŸ‘µ",om:"ðŸ•‰",on:"ðŸ”›",oncoming_automobile:"ðŸš˜",oncoming_bus:"ðŸš�",oncoming_police_car:"ðŸš”",oncoming_taxi:"ðŸš–",open_file_folder:"ðŸ“‚",open_hands:"ðŸ‘�",open_mouth:"ðŸ˜®",open_umbrella:"â˜‚ï¸�",ophiuchus:"â›Ž",orange_book:"ðŸ“™",orthodox_cross:"â˜¦ï¸�",outbox_tray:"ðŸ“¤",owl:"ðŸ¦‰",ox:"ðŸ�‚",package:"ðŸ“¦",page_facing_up:"ðŸ“„",page_with_curl:"ðŸ“ƒ",pager:"ðŸ“Ÿ",paintbrush:"ðŸ–Œ",palm_tree:"ðŸŒ´",pancakes:"ðŸ¥ž",panda_face:"ðŸ�¼",paperclip:"ðŸ“Ž",paperclips:"ðŸ–‡",parasol_on_ground:"â›±",parking:"ðŸ…¿ï¸�",part_alternation_mark:"ã€½ï¸�",partly_sunny:"â›…ï¸�",passenger_ship:"ðŸ›³",passport_control:"ðŸ›‚",pause_button:"â�¸",peace_symbol:"â˜®ï¸�",peach:"ðŸ�‘",peanuts:"ðŸ¥œ",pear:"ðŸ��",pen:"ðŸ–Š",pencil2:"âœ�ï¸�",penguin:"ðŸ�§",pensive:"ðŸ˜”",performing_arts:"ðŸŽ­",persevere:"ðŸ˜£",person_fencing:"ðŸ¤º",pouting_woman:"ðŸ™Ž",phone:"â˜Žï¸�",pick:"â›�",pig:"ðŸ�·",pig2:"ðŸ�–",pig_nose:"ðŸ�½",pill:"ðŸ’Š",pineapple:"ðŸ��",ping_pong:"ðŸ�“",pisces:"â™“ï¸�",pizza:"ðŸ�•",place_of_worship:"ðŸ›�",plate_with_cutlery:"ðŸ�½",play_or_pause_button:"â�¯",point_down:"ðŸ‘‡",point_left:"ðŸ‘ˆ",point_right:"ðŸ‘‰",point_up:"â˜�ï¸�",point_up_2:"ðŸ‘†",police_car:"ðŸš“",policewoman:"ðŸ‘®&zwj;â™€ï¸�",poodle:"ðŸ�©",popcorn:"ðŸ�¿",post_office:"ðŸ�£",postal_horn:"ðŸ“¯",postbox:"ðŸ“®",potable_water:"ðŸš°",potato:"ðŸ¥”",pouch:"ðŸ‘�",poultry_leg:"ðŸ�—",pound:"ðŸ’·",rage:"ðŸ˜¡",pouting_cat:"ðŸ˜¾",pouting_man:"ðŸ™Ž&zwj;â™‚ï¸�",pray:"ðŸ™�",prayer_beads:"ðŸ“¿",pregnant_woman:"ðŸ¤°",previous_track_button:"â�®",prince:"ðŸ¤´",princess:"ðŸ‘¸",printer:"ðŸ–¨",purple_heart:"ðŸ’œ",purse:"ðŸ‘›",pushpin:"ðŸ“Œ",put_litter_in_its_place:"ðŸš®",question:"â�“",rabbit:"ðŸ�°",rabbit2:"ðŸ�‡",racehorse:"ðŸ�Ž",racing_car:"ðŸ�Ž",radio:"ðŸ“»",radio_button:"ðŸ”˜",radioactive:"â˜¢ï¸�",railway_car:"ðŸšƒ",railway_track:"ðŸ›¤",rainbow:"ðŸŒˆ",rainbow_flag:"ðŸ�³ï¸�&zwj;ðŸŒˆ",raised_back_of_hand:"ðŸ¤š",raised_hand_with_fingers_splayed:"ðŸ–�",raised_hands:"ðŸ™Œ",raising_hand_woman:"ðŸ™‹",raising_hand_man:"ðŸ™‹&zwj;â™‚ï¸�",ram:"ðŸ��",ramen:"ðŸ�œ",rat:"ðŸ�€",record_button:"â�º",recycle:"â™»ï¸�",red_circle:"ðŸ”´",registered:"Â®ï¸�",relaxed:"â˜ºï¸�",relieved:"ðŸ˜Œ",reminder_ribbon:"ðŸŽ—",repeat:"ðŸ”�",repeat_one:"ðŸ”‚",rescue_worker_helmet:"â›‘",restroom:"ðŸš»",revolving_hearts:"ðŸ’ž",rewind:"â�ª",rhinoceros:"ðŸ¦�",ribbon:"ðŸŽ€",rice:"ðŸ�š",rice_ball:"ðŸ�™",rice_cracker:"ðŸ�˜",rice_scene:"ðŸŽ‘",right_anger_bubble:"ðŸ—¯",ring:"ðŸ’�",robot:"ðŸ¤–",rocket:"ðŸš€",rofl:"ðŸ¤£",roll_eyes:"ðŸ™„",roller_coaster:"ðŸŽ¢",rooster:"ðŸ�“",rose:"ðŸŒ¹",rosette:"ðŸ�µ",rotating_light:"ðŸš¨",round_pushpin:"ðŸ“�",rowing_man:"ðŸš£",rowing_woman:"ðŸš£&zwj;â™€ï¸�",rugby_football:"ðŸ�‰",running_man:"ðŸ�ƒ",running_shirt_with_sash:"ðŸŽ½",running_woman:"ðŸ�ƒ&zwj;â™€ï¸�",sa:"ðŸˆ‚ï¸�",sagittarius:"â™�ï¸�",sake:"ðŸ�¶",sandal:"ðŸ‘¡",santa:"ðŸŽ…",satellite:"ðŸ“¡",saxophone:"ðŸŽ·",school:"ðŸ�«",school_satchel:"ðŸŽ’",scissors:"âœ‚ï¸�",scorpion:"ðŸ¦‚",scorpius:"â™�ï¸�",scream:"ðŸ˜±",scream_cat:"ðŸ™€",scroll:"ðŸ“œ",seat:"ðŸ’º",secret:"ãŠ™ï¸�",see_no_evil:"ðŸ™ˆ",seedling:"ðŸŒ±",selfie:"ðŸ¤³",shallow_pan_of_food:"ðŸ¥˜",shamrock:"â˜˜ï¸�",shark:"ðŸ¦ˆ",shaved_ice:"ðŸ�§",sheep:"ðŸ�‘",shell:"ðŸ�š",shield:"ðŸ›¡",shinto_shrine:"â›©",ship:"ðŸš¢",shirt:"ðŸ‘•",shopping:"ðŸ›�",shopping_cart:"ðŸ›’",shower:"ðŸš¿",shrimp:"ðŸ¦�",signal_strength:"ðŸ“¶",six_pointed_star:"ðŸ”¯",ski:"ðŸŽ¿",skier:"â›·",skull:"ðŸ’€",skull_and_crossbones:"â˜ ï¸�",sleeping:"ðŸ˜´",sleeping_bed:"ðŸ›Œ",sleepy:"ðŸ˜ª",slightly_frowning_face:"ðŸ™�",slightly_smiling_face:"ðŸ™‚",slot_machine:"ðŸŽ°",small_airplane:"ðŸ›©",small_blue_diamond:"ðŸ”¹",small_orange_diamond:"ðŸ”¸",small_red_triangle:"ðŸ”º",small_red_triangle_down:"ðŸ”»",smile:"ðŸ˜„",smile_cat:"ðŸ˜¸",smiley:"ðŸ˜ƒ",smiley_cat:"ðŸ˜º",smiling_imp:"ðŸ˜ˆ",smirk:"ðŸ˜�",smirk_cat:"ðŸ˜¼",smoking:"ðŸš¬",snail:"ðŸ�Œ",snake:"ðŸ��",sneezing_face:"ðŸ¤§",snowboarder:"ðŸ�‚",snowflake:"â�„ï¸�",snowman:"â›„ï¸�",snowman_with_snow:"â˜ƒï¸�",sob:"ðŸ˜­",soccer:"âš½ï¸�",soon:"ðŸ”œ",sos:"ðŸ†˜",sound:"ðŸ”‰",space_invader:"ðŸ‘¾",spades:"â™ ï¸�",spaghetti:"ðŸ��",sparkle:"â�‡ï¸�",sparkler:"ðŸŽ‡",sparkles:"âœ¨",sparkling_heart:"ðŸ’–",speak_no_evil:"ðŸ™Š",speaker:"ðŸ”ˆ",speaking_head:"ðŸ—£",speech_balloon:"ðŸ’¬",speedboat:"ðŸš¤",spider:"ðŸ•·",spider_web:"ðŸ•¸",spiral_calendar:"ðŸ—“",spiral_notepad:"ðŸ—’",spoon:"ðŸ¥„",squid:"ðŸ¦‘",stadium:"ðŸ�Ÿ",star:"â­�ï¸�",star2:"ðŸŒŸ",star_and_crescent:"â˜ªï¸�",star_of_david:"âœ¡ï¸�",stars:"ðŸŒ ",station:"ðŸš‰",statue_of_liberty:"ðŸ—½",steam_locomotive:"ðŸš‚",stew:"ðŸ�²",stop_button:"â�¹",stop_sign:"ðŸ›‘",stopwatch:"â�±",straight_ruler:"ðŸ“�",strawberry:"ðŸ�“",stuck_out_tongue:"ðŸ˜›",stuck_out_tongue_closed_eyes:"ðŸ˜�",stuck_out_tongue_winking_eye:"ðŸ˜œ",studio_microphone:"ðŸŽ™",stuffed_flatbread:"ðŸ¥™",sun_behind_large_cloud:"ðŸŒ¥",sun_behind_rain_cloud:"ðŸŒ¦",sun_behind_small_cloud:"ðŸŒ¤",sun_with_face:"ðŸŒž",sunflower:"ðŸŒ»",sunglasses:"ðŸ˜Ž",sunny:"â˜€ï¸�",sunrise:"ðŸŒ…",sunrise_over_mountains:"ðŸŒ„",surfing_man:"ðŸ�„",surfing_woman:"ðŸ�„&zwj;â™€ï¸�",sushi:"ðŸ�£",suspension_railway:"ðŸšŸ",sweat:"ðŸ˜“",sweat_drops:"ðŸ’¦",sweat_smile:"ðŸ˜…",sweet_potato:"ðŸ� ",swimming_man:"ðŸ�Š",swimming_woman:"ðŸ�Š&zwj;â™€ï¸�",symbols:"ðŸ”£",synagogue:"ðŸ•�",syringe:"ðŸ’‰",taco:"ðŸŒ®",tada:"ðŸŽ‰",tanabata_tree:"ðŸŽ‹",taurus:"â™‰ï¸�",taxi:"ðŸš•",tea:"ðŸ�µ",telephone_receiver:"ðŸ“ž",telescope:"ðŸ”­",tennis:"ðŸŽ¾",tent:"â›ºï¸�",thermometer:"ðŸŒ¡",thinking:"ðŸ¤”",thought_balloon:"ðŸ’­",ticket:"ðŸŽ«",tickets:"ðŸŽŸ",tiger:"ðŸ�¯",tiger2:"ðŸ�…",timer_clock:"â�²",tipping_hand_man:"ðŸ’�&zwj;â™‚ï¸�",tired_face:"ðŸ˜«",tm:"â„¢ï¸�",toilet:"ðŸš½",tokyo_tower:"ðŸ—¼",tomato:"ðŸ�…",tongue:"ðŸ‘…",top:"ðŸ”�",tophat:"ðŸŽ©",tornado:"ðŸŒª",trackball:"ðŸ–²",tractor:"ðŸšœ",traffic_light:"ðŸš¥",train:"ðŸš‹",train2:"ðŸš†",tram:"ðŸšŠ",triangular_flag_on_post:"ðŸš©",triangular_ruler:"ðŸ“�",trident:"ðŸ”±",triumph:"ðŸ˜¤",trolleybus:"ðŸšŽ",trophy:"ðŸ�†",tropical_drink:"ðŸ�¹",tropical_fish:"ðŸ� ",truck:"ðŸšš",trumpet:"ðŸŽº",tulip:"ðŸŒ·",tumbler_glass:"ðŸ¥ƒ",turkey:"ðŸ¦ƒ",turtle:"ðŸ�¢",tv:"ðŸ“º",twisted_rightwards_arrows:"ðŸ”€",two_hearts:"ðŸ’•",two_men_holding_hands:"ðŸ‘¬",two_women_holding_hands:"ðŸ‘­",u5272:"ðŸˆ¹",u5408:"ðŸˆ´",u55b6:"ðŸˆº",u6307:"ðŸˆ¯ï¸�",u6708:"ðŸˆ·ï¸�",u6709:"ðŸˆ¶",u6e80:"ðŸˆµ",u7121:"ðŸˆšï¸�",u7533:"ðŸˆ¸",u7981:"ðŸˆ²",u7a7a:"ðŸˆ³",umbrella:"â˜”ï¸�",unamused:"ðŸ˜’",underage:"ðŸ”ž",unicorn:"ðŸ¦„",unlock:"ðŸ”“",up:"ðŸ†™",upside_down_face:"ðŸ™ƒ",v:"âœŒï¸�",vertical_traffic_light:"ðŸš¦",vhs:"ðŸ“¼",vibration_mode:"ðŸ“³",video_camera:"ðŸ“¹",video_game:"ðŸŽ®",violin:"ðŸŽ»",virgo:"â™�ï¸�",volcano:"ðŸŒ‹",volleyball:"ðŸ��",vs:"ðŸ†š",vulcan_salute:"ðŸ––",walking_man:"ðŸš¶",walking_woman:"ðŸš¶&zwj;â™€ï¸�",waning_crescent_moon:"ðŸŒ˜",waning_gibbous_moon:"ðŸŒ–",warning:"âš ï¸�",wastebasket:"ðŸ—‘",watch:"âŒšï¸�",water_buffalo:"ðŸ�ƒ",watermelon:"ðŸ�‰",wave:"ðŸ‘‹",wavy_dash:"ã€°ï¸�",waxing_crescent_moon:"ðŸŒ’",wc:"ðŸš¾",weary:"ðŸ˜©",wedding:"ðŸ’’",weight_lifting_man:"ðŸ�‹ï¸�",weight_lifting_woman:"ðŸ�‹ï¸�&zwj;â™€ï¸�",whale:"ðŸ�³",whale2:"ðŸ�‹",wheel_of_dharma:"â˜¸ï¸�",wheelchair:"â™¿ï¸�",white_check_mark:"âœ…",white_circle:"âšªï¸�",white_flag:"ðŸ�³ï¸�",white_flower:"ðŸ’®",white_large_square:"â¬œï¸�",white_medium_small_square:"â—½ï¸�",white_medium_square:"â—»ï¸�",white_small_square:"â–«ï¸�",white_square_button:"ðŸ”³",wilted_flower:"ðŸ¥€",wind_chime:"ðŸŽ�",wind_face:"ðŸŒ¬",wine_glass:"ðŸ�·",wink:"ðŸ˜‰",wolf:"ðŸ�º",woman:"ðŸ‘©",woman_artist:"ðŸ‘©&zwj;ðŸŽ¨",woman_astronaut:"ðŸ‘©&zwj;ðŸš€",woman_cartwheeling:"ðŸ¤¸&zwj;â™€ï¸�",woman_cook:"ðŸ‘©&zwj;ðŸ�³",woman_facepalming:"ðŸ¤¦&zwj;â™€ï¸�",woman_factory_worker:"ðŸ‘©&zwj;ðŸ�­",woman_farmer:"ðŸ‘©&zwj;ðŸŒ¾",woman_firefighter:"ðŸ‘©&zwj;ðŸš’",woman_health_worker:"ðŸ‘©&zwj;âš•ï¸�",woman_judge:"ðŸ‘©&zwj;âš–ï¸�",woman_juggling:"ðŸ¤¹&zwj;â™€ï¸�",woman_mechanic:"ðŸ‘©&zwj;ðŸ”§",woman_office_worker:"ðŸ‘©&zwj;ðŸ’¼",woman_pilot:"ðŸ‘©&zwj;âœˆï¸�",woman_playing_handball:"ðŸ¤¾&zwj;â™€ï¸�",woman_playing_water_polo:"ðŸ¤½&zwj;â™€ï¸�",woman_scientist:"ðŸ‘©&zwj;ðŸ”¬",woman_shrugging:"ðŸ¤·&zwj;â™€ï¸�",woman_singer:"ðŸ‘©&zwj;ðŸŽ¤",woman_student:"ðŸ‘©&zwj;ðŸŽ“",woman_teacher:"ðŸ‘©&zwj;ðŸ�«",woman_technologist:"ðŸ‘©&zwj;ðŸ’»",woman_with_turban:"ðŸ‘³&zwj;â™€ï¸�",womans_clothes:"ðŸ‘š",womans_hat:"ðŸ‘’",women_wrestling:"ðŸ¤¼&zwj;â™€ï¸�",womens:"ðŸšº",world_map:"ðŸ—º",worried:"ðŸ˜Ÿ",wrench:"ðŸ”§",writing_hand:"âœ�ï¸�",x:"â�Œ",yellow_heart:"ðŸ’›",yen:"ðŸ’´",yin_yang:"â˜¯ï¸�",yum:"ðŸ˜‹",zap:"âš¡ï¸�",zipper_mouth_face:"ðŸ¤�",zzz:"ðŸ’¤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},i.Converter=function(e){"use strict";var t={},n=[],a=[],r={},o=c,m={parsed:{},raw:"",format:""};function p(e,t){if(t=t||null,i.helper.isString(e)){if(t=e=i.helper.stdExtName(e),i.extensions[e])return console.warn("DEPRECATION WARNING: "+e+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(e,t){"function"==typeof e&&(e=e(new i.Converter));i.helper.isArray(e)||(e=[e]);var r=d(e,t);if(!r.valid)throw Error(r.error);for(var o=0;o<e.length;++o)switch(e[o].type){case"lang":n.push(e[o]);break;case"output":a.push(e[o]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(i.extensions[e],e);if(i.helper.isUndefined(s[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=s[e]}"function"==typeof e&&(e=e()),i.helper.isArray(e)||(e=[e]);var r=d(e,t);if(!r.valid)throw Error(r.error);for(var o=0;o<e.length;++o){switch(e[o].type){case"lang":n.push(e[o]);break;case"output":a.push(e[o])}if(e[o].hasOwnProperty("listeners"))for(var l in e[o].listeners)e[o].listeners.hasOwnProperty(l)&&h(l,e[o].listeners[l])}}function h(e,t){if(!i.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+typeof e+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+typeof t+" given");r.hasOwnProperty(e)||(r[e]=[]),r[e].push(t)}!function(){for(var n in e=e||{},l)l.hasOwnProperty(n)&&(t[n]=l[n]);if("object"!=typeof e)throw Error("Converter expects the passed parameter to be an object, but "+typeof e+" was passed instead.");for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);t.extensions&&i.helper.forEach(t.extensions,p)}(),this._dispatch=function(e,t,n,a){if(r.hasOwnProperty(e))for(var i=0;i<r[e].length;++i){var o=r[e][i](e,t,this,n,a);o&&void 0!==o&&(t=o)}return t},this.listen=function(e,t){return h(e,t),this},this.makeHtml=function(e){if(!e)return e;var r={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:n,outputModifiers:a,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/Â¨/g,"Â¨T")).replace(/\$/g,"Â¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g,"&nbsp;"),t.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,n=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(n,"")}(e)),e="\n\n"+e+"\n\n",e=(e=i.subParser("detab")(e,t,r)).replace(/^[ \t]+$/gm,""),i.helper.forEach(n,(function(n){e=i.subParser("runExtension")(n,e,t,r)})),e=i.subParser("metadata")(e,t,r),e=i.subParser("hashPreCodeTags")(e,t,r),e=i.subParser("githubCodeBlocks")(e,t,r),e=i.subParser("hashHTMLBlocks")(e,t,r),e=i.subParser("hashCodeTags")(e,t,r),e=i.subParser("stripLinkDefinitions")(e,t,r),e=i.subParser("blockGamut")(e,t,r),e=i.subParser("unhashHTMLSpans")(e,t,r),e=(e=(e=i.subParser("unescapeSpecialChars")(e,t,r)).replace(/Â¨D/g,"$$")).replace(/Â¨T/g,"Â¨"),e=i.subParser("completeHTMLDocument")(e,t,r),i.helper.forEach(a,(function(n){e=i.subParser("runExtension")(n,e,t,r)})),m=r.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">Â¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var n=t.createElement("div");n.innerHTML=e;var a={preList:function(e){for(var t=e.querySelectorAll("pre"),n=[],a=0;a<t.length;++a)if(1===t[a].childElementCount&&"code"===t[a].firstChild.tagName.toLowerCase()){var r=t[a].firstChild.innerHTML.trim(),o=t[a].firstChild.getAttribute("data-language")||"";if(""===o)for(var s=t[a].firstChild.className.split(" "),l=0;l<s.length;++l){var c=s[l].match(/^language-(.+)$/);if(null!==c){o=c[1];break}}r=i.helper.unescapeHTMLEntities(r),n.push(r),t[a].outerHTML='<precode language="'+o+'" precodenum="'+a.toString()+'"></precode>'}else n.push(t[a].innerHTML),t[a].innerHTML="",t[a].setAttribute("prenum",a.toString());return n}(n)};!function e(t){for(var n=0;n<t.childNodes.length;++n){var a=t.childNodes[n];3===a.nodeType?/\S/.test(a.nodeValue)?(a.nodeValue=a.nodeValue.split("\n").join(" "),a.nodeValue=a.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(a),--n):1===a.nodeType&&e(a)}}(n);for(var r=n.childNodes,o="",s=0;s<r.length;s++)o+=i.subParser("makeMarkdown.node")(r[s],a);return o},this.setOption=function(e,n){t[e]=n},this.getOption=function(e){return t[e]},this.getOptions=function(){return t},this.addExtension=function(e,t){p(e,t=t||null)},this.useExtension=function(e){p(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var n=u[e];for(var a in o=e,n)n.hasOwnProperty(a)&&(t[a]=n[a])},this.getFlavor=function(){return o},this.removeExtension=function(e){i.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var r=e[t],o=0;o<n.length;++o)n[o]===r&&n[o].splice(o,1);for(;0<a.length;++o)a[0]===r&&a[0].splice(o,1)}},this.getAllExtensions=function(){return{language:n,output:a}},this.getMetadata=function(e){return e?m.raw:m.parsed},this.getMetadataFormat=function(){return m.format},this._setMetadataPair=function(e,t){m.parsed[e]=t},this._setMetadataFormat=function(e){m.format=e},this._setMetadataRaw=function(e){m.raw=e}},i.subParser("anchors",(function(e,t,n){"use strict";var a=function(e,a,r,o,s,l,c){if(i.helper.isUndefined(c)&&(c=""),r=r.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)o="";else if(!o){if(r||(r=a.toLowerCase().replace(/ ?\n/g," ")),o="#"+r,i.helper.isUndefined(n.gUrls[r]))return e;o=n.gUrls[r],i.helper.isUndefined(n.gTitles[r])||(c=n.gTitles[r])}var u='<a href="'+(o=o.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"';return""!==c&&null!==c&&(u+=' title="'+(c=(c=c.replace(/"/g,"&quot;")).replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(o)&&(u+=' rel="noopener noreferrer" target="Â¨E95Eblank"'),u+=">"+a+"</a>"};return e=(e=(e=(e=(e=n.converter._dispatch("anchors.before",e,t,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,a)).replace(/\[([^\[\]]+)]()()()()()/g,a),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,(function(e,n,a,r,o){if("\\"===a)return n+r;if(!i.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,o),l="";return t.openLinksInNewWindow&&(l=' rel="noopener noreferrer" target="Â¨E95Eblank"'),n+'<a href="'+s+'"'+l+">"+r+"</a>"}))),e=n.converter._dispatch("anchors.after",e,t,n)}));var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,g=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,f=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,_=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,b=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,v=function(e){"use strict";return function(t,n,a,r,o,s,l){var c=a=a.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback),u="",d="",m=n||"",p=l||"";return/^www\./i.test(a)&&(a=a.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' rel="noopener noreferrer" target="Â¨E95Eblank"'),m+'<a href="'+a+'"'+d+">"+c+"</a>"+u+p}},w=function(e,t){"use strict";return function(n,a,r){var o="mailto:";return a=a||"",r=i.subParser("unescapeSpecialChars")(r,e,t),e.encodeEmails?(o=i.helper.encodeEmailAddress(o+r),r=i.helper.encodeEmailAddress(r)):o+=r,a+'<a href="'+o+'">'+r+"</a>"}};i.subParser("autoLinks",(function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("autoLinks.before",e,t,n)).replace(f,v(t))).replace(b,w(t,n)),e=n.converter._dispatch("autoLinks.after",e,t,n)})),i.subParser("simplifiedAutoLinks",(function(e,t,n){"use strict";return t.simplifiedAutoLink?(e=n.converter._dispatch("simplifiedAutoLinks.before",e,t,n),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(g,v(t)):e.replace(h,v(t))).replace(_,w(t,n)),e=n.converter._dispatch("simplifiedAutoLinks.after",e,t,n)):e})),i.subParser("blockGamut",(function(e,t,n){"use strict";return e=n.converter._dispatch("blockGamut.before",e,t,n),e=i.subParser("blockQuotes")(e,t,n),e=i.subParser("headers")(e,t,n),e=i.subParser("horizontalRule")(e,t,n),e=i.subParser("lists")(e,t,n),e=i.subParser("codeBlocks")(e,t,n),e=i.subParser("tables")(e,t,n),e=i.subParser("hashHTMLBlocks")(e,t,n),e=i.subParser("paragraphs")(e,t,n),e=n.converter._dispatch("blockGamut.after",e,t,n)})),i.subParser("blockQuotes",(function(e,t,n){"use strict";e=n.converter._dispatch("blockQuotes.before",e,t,n),e+="\n\n";var a=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(a,(function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/Â¨0/g,"")).replace(/^[ \t]+$/gm,""),e=i.subParser("githubCodeBlocks")(e,t,n),e=(e=(e=i.subParser("blockGamut")(e,t,n)).replace(/(^|\n)/g,"$1  ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,(function(e,t){var n=t;return n=(n=n.replace(/^  /gm,"Â¨0")).replace(/Â¨0/g,"")})),i.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,n)})),e=n.converter._dispatch("blockQuotes.after",e,t,n)})),i.subParser("codeBlocks",(function(e,t,n){"use strict";e=n.converter._dispatch("codeBlocks.before",e,t,n);return e=(e=(e+="Â¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=Â¨0))/g,(function(e,a,r){var o=a,s=r,l="\n";return o=i.subParser("outdent")(o,t,n),o=i.subParser("encodeCode")(o,t,n),o=(o=(o=i.subParser("detab")(o,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),o="<pre><code>"+o+l+"</code></pre>",i.subParser("hashBlock")(o,t,n)+s}))).replace(/Â¨0/,""),e=n.converter._dispatch("codeBlocks.after",e,t,n)})),i.subParser("codeSpans",(function(e,t,n){"use strict";return void 0===(e=n.converter._dispatch("codeSpans.before",e,t,n))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,(function(e,a,r,o){var s=o;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=a+"<code>"+(s=i.subParser("encodeCode")(s,t,n))+"</code>",s=i.subParser("hashHTMLSpans")(s,t,n)})),e=n.converter._dispatch("codeSpans.after",e,t,n)})),i.subParser("completeHTMLDocument",(function(e,t,n){"use strict";if(!t.completeHTMLDocument)return e;e=n.converter._dispatch("completeHTMLDocument.before",e,t,n);var a="html",r="<!DOCTYPE HTML>\n",i="",o='<meta charset="utf-8">\n',s="",l="";for(var c in void 0!==n.metadata.parsed.doctype&&(r="<!DOCTYPE "+n.metadata.parsed.doctype+">\n","html"!==(a=n.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==a||(o='<meta charset="utf-8">')),n.metadata.parsed)if(n.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":i="<title>"+n.metadata.parsed.title+"</title>\n";break;case"charset":o="html"===a||"html5"===a?'<meta charset="'+n.metadata.parsed.charset+'">\n':'<meta name="charset" content="'+n.metadata.parsed.charset+'">\n';break;case"language":case"lang":s=' lang="'+n.metadata.parsed[c]+'"',l+='<meta name="'+c+'" content="'+n.metadata.parsed[c]+'">\n';break;default:l+='<meta name="'+c+'" content="'+n.metadata.parsed[c]+'">\n'}return e=r+"<html"+s+">\n<head>\n"+i+o+l+"</head>\n<body>\n"+e.trim()+"\n</body>\n</html>",e=n.converter._dispatch("completeHTMLDocument.after",e,t,n)})),i.subParser("detab",(function(e,t,n){"use strict";return e=(e=(e=(e=(e=(e=n.converter._dispatch("detab.before",e,t,n)).replace(/\t(?=\t)/g,"    ")).replace(/\t/g,"Â¨AÂ¨B")).replace(/Â¨B(.+?)Â¨A/g,(function(e,t){for(var n=t,a=4-n.length%4,r=0;r<a;r++)n+=" ";return n}))).replace(/Â¨A/g,"    ")).replace(/Â¨B/g,""),e=n.converter._dispatch("detab.after",e,t,n)})),i.subParser("ellipsis",(function(e,t,n){"use strict";return e=(e=n.converter._dispatch("ellipsis.before",e,t,n)).replace(/\.\.\./g,"â€¦"),e=n.converter._dispatch("ellipsis.after",e,t,n)})),i.subParser("emoji",(function(e,t,n){"use strict";if(!t.emoji)return e;return e=(e=n.converter._dispatch("emoji.before",e,t,n)).replace(/:([\S]+?):/g,(function(e,t){return i.helper.emojis.hasOwnProperty(t)?i.helper.emojis[t]:e})),e=n.converter._dispatch("emoji.after",e,t,n)})),i.subParser("encodeAmpsAndAngles",(function(e,t,n){"use strict";return e=(e=(e=(e=(e=n.converter._dispatch("encodeAmpsAndAngles.before",e,t,n)).replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;")).replace(/<(?![a-z\/?$!])/gi,"&lt;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),e=n.converter._dispatch("encodeAmpsAndAngles.after",e,t,n)})),i.subParser("encodeBackslashEscapes",(function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("encodeBackslashEscapes.before",e,t,n)).replace(/\\(\\)/g,i.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,i.helper.escapeCharactersCallback),e=n.converter._dispatch("encodeBackslashEscapes.after",e,t,n)})),i.subParser("encodeCode",(function(e,t,n){"use strict";return e=(e=n.converter._dispatch("encodeCode.before",e,t,n)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/([*_{}\[\]\\=~-])/g,i.helper.escapeCharactersCallback),e=n.converter._dispatch("encodeCode.after",e,t,n)})),i.subParser("escapeSpecialCharsWithinTagAttributes",(function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,n)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,(function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)}))).replace(/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,(function(e){return e.replace(/([\\`*_~=|])/g,i.helper.escapeCharactersCallback)})),e=n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,n)})),i.subParser("githubCodeBlocks",(function(e,t,n){"use strict";return t.ghCodeBlocks?(e=n.converter._dispatch("githubCodeBlocks.before",e,t,n),e=(e=(e+="Â¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,(function(e,a,r,o){var s=t.omitExtraWLInCodeBlocks?"":"\n";return o=i.subParser("encodeCode")(o,t,n),o="<pre><code"+(r?' class="'+r+" language-"+r+'"':"")+">"+(o=(o=(o=i.subParser("detab")(o,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+s+"</code></pre>",o=i.subParser("hashBlock")(o,t,n),"\n\nÂ¨G"+(n.ghCodeBlocks.push({text:e,codeblock:o})-1)+"G\n\n"}))).replace(/Â¨0/,""),n.converter._dispatch("githubCodeBlocks.after",e,t,n)):e})),i.subParser("hashBlock",(function(e,t,n){"use strict";return e=(e=n.converter._dispatch("hashBlock.before",e,t,n)).replace(/(^\n+|\n+$)/g,""),e="\n\nÂ¨K"+(n.gHtmlBlocks.push(e)-1)+"K\n\n",e=n.converter._dispatch("hashBlock.after",e,t,n)})),i.subParser("hashCodeTags",(function(e,t,n){"use strict";e=n.converter._dispatch("hashCodeTags.before",e,t,n);return e=i.helper.replaceRecursiveRegExp(e,(function(e,a,r,o){var s=r+i.subParser("encodeCode")(a,t,n)+o;return"Â¨C"+(n.gHtmlSpans.push(s)-1)+"C"}),"<code\\b[^>]*>","</code>","gim"),e=n.converter._dispatch("hashCodeTags.after",e,t,n)})),i.subParser("hashElement",(function(e,t,n){"use strict";return function(e,t){var a=t;return a=(a=(a=a.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),a="\n\nÂ¨K"+(n.gHtmlBlocks.push(a)-1)+"K\n\n"}})),i.subParser("hashHTMLBlocks",(function(e,t,n){"use strict";e=n.converter._dispatch("hashHTMLBlocks.before",e,t,n);var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],r=function(e,t,a,r){var i=e;return-1!==a.search(/\bmarkdown\b/)&&(i=a+n.converter.makeHtml(t)+r),"\n\nÂ¨K"+(n.gHtmlBlocks.push(i)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,(function(e,t){return"&lt;"+t+"&gt;"})));for(var o=0;o<a.length;++o)for(var s,l=new RegExp("^ {0,3}(<"+a[o]+"\\b[^>]*>)","im"),c="<"+a[o]+"\\b[^>]*>",u="</"+a[o]+">";-1!==(s=i.helper.regexIndexOf(e,l));){var d=i.helper.splitAtIndex(e,s),m=i.helper.replaceRecursiveRegExp(d[1],r,c,u,"im");if(m===d[1])break;e=d[0].concat(m)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,n)),e=(e=i.helper.replaceRecursiveRegExp(e,(function(e){return"\n\nÂ¨K"+(n.gHtmlBlocks.push(e)-1)+"K\n\n"}),"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,i.subParser("hashElement")(e,t,n)),e=n.converter._dispatch("hashHTMLBlocks.after",e,t,n)})),i.subParser("hashHTMLSpans",(function(e,t,n){"use strict";function a(e){return"Â¨C"+(n.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=n.converter._dispatch("hashHTMLSpans.before",e,t,n)).replace(/<[^>]+?\/>/gi,(function(e){return a(e)}))).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,(function(e){return a(e)}))).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,(function(e){return a(e)}))).replace(/<[^>]+?>/gi,(function(e){return a(e)})),e=n.converter._dispatch("hashHTMLSpans.after",e,t,n)})),i.subParser("unhashHTMLSpans",(function(e,t,n){"use strict";e=n.converter._dispatch("unhashHTMLSpans.before",e,t,n);for(var a=0;a<n.gHtmlSpans.length;++a){for(var r=n.gHtmlSpans[a],i=0;/Â¨C(\d+)C/.test(r);){var o=RegExp.$1;if(r=r.replace("Â¨C"+o+"C",n.gHtmlSpans[o]),10===i){console.error("maximum nesting of 10 spans reached!!!");break}++i}e=e.replace("Â¨C"+a+"C",r)}return e=n.converter._dispatch("unhashHTMLSpans.after",e,t,n)})),i.subParser("hashPreCodeTags",(function(e,t,n){"use strict";e=n.converter._dispatch("hashPreCodeTags.before",e,t,n);return e=i.helper.replaceRecursiveRegExp(e,(function(e,a,r,o){var s=r+i.subParser("encodeCode")(a,t,n)+o;return"\n\nÂ¨G"+(n.ghCodeBlocks.push({text:e,codeblock:s})-1)+"G\n\n"}),"^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>","^ {0,3}</code>\\s*</pre>","gim"),e=n.converter._dispatch("hashPreCodeTags.after",e,t,n)})),i.subParser("headers",(function(e,t,n){"use strict";e=n.converter._dispatch("headers.before",e,t,n);var a=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),r=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,o=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(r,(function(e,r){var o=i.subParser("spanGamut")(r,t,n),s=t.noHeaderId?"":' id="'+l(r)+'"',c="<h"+a+s+">"+o+"</h"+a+">";return i.subParser("hashBlock")(c,t,n)}))).replace(o,(function(e,r){var o=i.subParser("spanGamut")(r,t,n),s=t.noHeaderId?"":' id="'+l(r)+'"',c=a+1,u="<h"+c+s+">"+o+"</h"+c+">";return i.subParser("hashBlock")(u,t,n)}));var s=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function l(e){var a,r;if(t.customizedHeaderId){var o=e.match(/\{([^{]+?)}\s*$/);o&&o[1]&&(e=o[1])}return a=e,r=i.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(a=r+a),a=t.ghCompatibleHeaderId?a.replace(/ /g,"-").replace(/&amp;/g,"").replace(/Â¨T/g,"").replace(/Â¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^Â¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?a.replace(/ /g,"-").replace(/&amp;/g,"&").replace(/Â¨T/g,"Â¨").replace(/Â¨D/g,"$").replace(/["']/g,"-").toLowerCase():a.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(a=r+a),n.hashLinkCounts[a]?a=a+"-"+n.hashLinkCounts[a]++:n.hashLinkCounts[a]=1,a}return e=e.replace(s,(function(e,r,o){var s=o;t.customizedHeaderId&&(s=o.replace(/\s?\{([^{]+?)}\s*$/,""));var c=i.subParser("spanGamut")(s,t,n),u=t.noHeaderId?"":' id="'+l(o)+'"',d=a-1+r.length,m="<h"+d+u+">"+c+"</h"+d+">";return i.subParser("hashBlock")(m,t,n)})),e=n.converter._dispatch("headers.after",e,t,n)})),i.subParser("horizontalRule",(function(e,t,n){"use strict";e=n.converter._dispatch("horizontalRule.before",e,t,n);var a=i.subParser("hashBlock")("<hr />",t,n);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),e=n.converter._dispatch("horizontalRule.after",e,t,n)})),i.subParser("images",(function(e,t,n){"use strict";function a(e,t,a,r,o,s,l,c){var u=n.gUrls,d=n.gTitles,m=n.gDimensions;if(a=a.toLowerCase(),c||(c=""),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)r="";else if(""===r||null===r){if(""!==a&&null!==a||(a=t.toLowerCase().replace(/ ?\n/g," ")),r="#"+a,i.helper.isUndefined(u[a]))return e;r=u[a],i.helper.isUndefined(d[a])||(c=d[a]),i.helper.isUndefined(m[a])||(o=m[a].width,s=m[a].height)}t=t.replace(/"/g,"&quot;").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback);var p='<img src="'+(r=r.replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'" alt="'+t+'"';return c&&i.helper.isString(c)&&(p+=' title="'+(c=c.replace(/"/g,"&quot;").replace(i.helper.regexes.asteriskDashAndColon,i.helper.escapeCharactersCallback))+'"'),o&&s&&(p+=' width="'+(o="*"===o?"auto":o)+'"',p+=' height="'+(s="*"===s?"auto":s)+'"'),p+=" />"}return e=(e=(e=(e=(e=(e=n.converter._dispatch("images.before",e,t,n)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,(function(e,t,n,r,i,o,s,l){return a(e,t,n,r=r.replace(/\s/g,""),i,o,s,l)}))).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,a)).replace(/!\[([^\[\]]+)]()()()()()/g,a),e=n.converter._dispatch("images.after",e,t,n)})),i.subParser("italicsAndBold",(function(e,t,n){"use strict";function a(e,t,n){return t+e+n}return e=n.converter._dispatch("italicsAndBold.before",e,t,n),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,(function(e,t){return a(t,"<strong><em>","</em></strong>")}))).replace(/\b__(\S[\s\S]*?)__\b/g,(function(e,t){return a(t,"<strong>","</strong>")}))).replace(/\b_(\S[\s\S]*?)_\b/g,(function(e,t){return a(t,"<em>","</em>")})):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,(function(e,t){return/\S$/.test(t)?a(t,"<strong><em>","</em></strong>"):e}))).replace(/__(\S[\s\S]*?)__/g,(function(e,t){return/\S$/.test(t)?a(t,"<strong>","</strong>"):e}))).replace(/_([^\s_][\s\S]*?)_/g,(function(e,t){return/\S$/.test(t)?a(t,"<em>","</em>"):e})),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,(function(e,t,n){return a(n,t+"<strong><em>","</em></strong>")}))).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,(function(e,t,n){return a(n,t+"<strong>","</strong>")}))).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,(function(e,t,n){return a(n,t+"<em>","</em>")})):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,(function(e,t){return/\S$/.test(t)?a(t,"<strong><em>","</em></strong>"):e}))).replace(/\*\*(\S[\s\S]*?)\*\*/g,(function(e,t){return/\S$/.test(t)?a(t,"<strong>","</strong>"):e}))).replace(/\*([^\s*][\s\S]*?)\*/g,(function(e,t){return/\S$/.test(t)?a(t,"<em>","</em>"):e})),e=n.converter._dispatch("italicsAndBold.after",e,t,n)})),i.subParser("lists",(function(e,t,n){"use strict";function a(e,a){n.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var r=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,o=/\n[ \t]*\n(?!Â¨0)/.test(e+="Â¨0");return t.disableForced4SpacesIndentedSublists&&(r=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(r,(function(e,a,r,s,l,c,u){u=u&&""!==u.trim();var d=i.subParser("outdent")(l,t,n),m="";return c&&t.tasklists&&(m=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,(function(){var e='<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';return u&&(e+=" checked"),e+=">"}))),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,(function(e){return"Â¨A"+e})),a||d.search(/\n{2,}/)>-1?(d=i.subParser("githubCodeBlocks")(d,t,n),d=i.subParser("blockGamut")(d,t,n)):(d=(d=i.subParser("lists")(d,t,n)).replace(/\n$/,""),d=(d=i.subParser("hashHTMLBlocks")(d,t,n)).replace(/\n\n+/g,"\n\n"),d=o?i.subParser("paragraphs")(d,t,n):i.subParser("spanGamut")(d,t,n)),d="<li"+m+">"+(d=d.replace("Â¨A",""))+"</li>\n"}))).replace(/Â¨0/g,""),n.gListLevel--,a&&(e=e.replace(/\s+$/,"")),e}function r(e,t){if("ol"===t){var n=e.match(/^ *(\d+)\./);if(n&&"1"!==n[1])return' start="'+n[1]+'"'}return""}function o(e,n,i){var o=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===n?o:s,c="";if(-1!==e.search(l))!function t(u){var d=u.search(l),m=r(e,n);-1!==d?(c+="\n\n<"+n+m+">\n"+a(u.slice(0,d),!!i)+"</"+n+">\n",l="ul"===(n="ul"===n?"ol":"ul")?o:s,t(u.slice(d))):c+="\n\n<"+n+m+">\n"+a(u,!!i)+"</"+n+">\n"}(e);else{var u=r(e,n);c="\n\n<"+n+u+">\n"+a(e,!!i)+"</"+n+">\n"}return c}return e=n.converter._dispatch("lists.before",e,t,n),e+="Â¨0",e=(e=n.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,(function(e,t,n){return o(t,n.search(/[*+-]/g)>-1?"ul":"ol",!0)})):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,(function(e,t,n,a){return o(n,a.search(/[*+-]/g)>-1?"ul":"ol",!1)}))).replace(/Â¨0/,""),e=n.converter._dispatch("lists.after",e,t,n)})),i.subParser("metadata",(function(e,t,n){"use strict";if(!t.metadata)return e;function a(e){n.metadata.raw=e,(e=(e=e.replace(/&/g,"&amp;").replace(/"/g,"&quot;")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,(function(e,t,a){return n.metadata.parsed[t]=a,""}))}return e=(e=(e=(e=n.converter._dispatch("metadata.before",e,t,n)).replace(/^\s*Â«Â«Â«+(\S*?)\n([\s\S]+?)\nÂ»Â»Â»+\n/,(function(e,t,n){return a(n),"Â¨M"}))).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,(function(e,t,r){return t&&(n.metadata.format=t),a(r),"Â¨M"}))).replace(/Â¨M/g,""),e=n.converter._dispatch("metadata.after",e,t,n)})),i.subParser("outdent",(function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("outdent.before",e,t,n)).replace(/^(\t|[ ]{1,4})/gm,"Â¨0")).replace(/Â¨0/g,""),e=n.converter._dispatch("outdent.after",e,t,n)})),i.subParser("paragraphs",(function(e,t,n){"use strict";for(var a=(e=(e=(e=n.converter._dispatch("paragraphs.before",e,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),r=[],o=a.length,s=0;s<o;s++){var l=a[s];l.search(/Â¨(K|G)(\d+)\1/g)>=0?r.push(l):l.search(/\S/)>=0&&(l=(l=i.subParser("spanGamut")(l,t,n)).replace(/^([ \t]*)/g,"<p>"),l+="</p>",r.push(l))}for(o=r.length,s=0;s<o;s++){for(var c="",u=r[s],d=!1;/Â¨(K|G)(\d+)\1/.test(u);){var m=RegExp.$1,p=RegExp.$2;c=(c="K"===m?n.gHtmlBlocks[p]:d?i.subParser("encodeCode")(n.ghCodeBlocks[p].text,t,n):n.ghCodeBlocks[p].codeblock).replace(/\$/g,"$$$$"),u=u.replace(/(\n\n)?Â¨(K|G)\d+\2(\n\n)?/,c),/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(u)&&(d=!0)}r[s]=u}return e=(e=(e=r.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),n.converter._dispatch("paragraphs.after",e,t,n)})),i.subParser("runExtension",(function(e,t,n,a){"use strict";if(e.filter)t=e.filter(t,a.converter,n);else if(e.regex){var r=e.regex;r instanceof RegExp||(r=new RegExp(r,"g")),t=t.replace(r,e.replace)}return t})),i.subParser("spanGamut",(function(e,t,n){"use strict";return e=n.converter._dispatch("spanGamut.before",e,t,n),e=i.subParser("codeSpans")(e,t,n),e=i.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,n),e=i.subParser("encodeBackslashEscapes")(e,t,n),e=i.subParser("images")(e,t,n),e=i.subParser("anchors")(e,t,n),e=i.subParser("autoLinks")(e,t,n),e=i.subParser("simplifiedAutoLinks")(e,t,n),e=i.subParser("emoji")(e,t,n),e=i.subParser("underline")(e,t,n),e=i.subParser("italicsAndBold")(e,t,n),e=i.subParser("strikethrough")(e,t,n),e=i.subParser("ellipsis")(e,t,n),e=i.subParser("hashHTMLSpans")(e,t,n),e=i.subParser("encodeAmpsAndAngles")(e,t,n),t.simpleLineBreaks?/\n\nÂ¨K/.test(e)||(e=e.replace(/\n+/g,"<br />\n")):e=e.replace(/  +\n/g,"<br />\n"),e=n.converter._dispatch("spanGamut.after",e,t,n)})),i.subParser("strikethrough",(function(e,t,n){"use strict";return t.strikethrough&&(e=(e=n.converter._dispatch("strikethrough.before",e,t,n)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,(function(e,a){return function(e){return t.simplifiedAutoLink&&(e=i.subParser("simplifiedAutoLinks")(e,t,n)),"<del>"+e+"</del>"}(a)})),e=n.converter._dispatch("strikethrough.after",e,t,n)),e})),i.subParser("stripLinkDefinitions",(function(e,t,n){"use strict";var a=function(e,a,r,o,s,l,c){return a=a.toLowerCase(),r.match(/^data:.+?\/.+?;base64,/)?n.gUrls[a]=r.replace(/\s/g,""):n.gUrls[a]=i.subParser("encodeAmpsAndAngles")(r,t,n),l?l+c:(c&&(n.gTitles[a]=c.replace(/"|'/g,"&quot;")),t.parseImgDimensions&&o&&s&&(n.gDimensions[a]={width:o,height:s}),"")};return e=(e=(e=(e+="Â¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=Â¨0)|(?=\n\[))/gm,a)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=Â¨0))/gm,a)).replace(/Â¨0/,"")})),i.subParser("tables",(function(e,t,n){"use strict";if(!t.tables)return e;function a(e,a){return"<td"+a+">"+i.subParser("spanGamut")(e,t,n)+"</td>\n"}function r(e){var r,o=e.split("\n");for(r=0;r<o.length;++r)/^ {0,3}\|/.test(o[r])&&(o[r]=o[r].replace(/^ {0,3}\|/,"")),/\|[ \t]*$/.test(o[r])&&(o[r]=o[r].replace(/\|[ \t]*$/,"")),o[r]=i.subParser("codeSpans")(o[r],t,n);var s,l,c,u,d=o[0].split("|").map((function(e){return e.trim()})),m=o[1].split("|").map((function(e){return e.trim()})),p=[],h=[],g=[],f=[];for(o.shift(),o.shift(),r=0;r<o.length;++r)""!==o[r].trim()&&p.push(o[r].split("|").map((function(e){return e.trim()})));if(d.length<m.length)return e;for(r=0;r<m.length;++r)g.push((s=m[r],/^:[ \t]*--*$/.test(s)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(s)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(s)?' style="text-align:center;"':""));for(r=0;r<d.length;++r)i.helper.isUndefined(g[r])&&(g[r]=""),h.push((l=d[r],c=g[r],u=void 0,u="",l=l.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(u=' id="'+l.replace(/ /g,"_").toLowerCase()+'"'),"<th"+u+c+">"+(l=i.subParser("spanGamut")(l,t,n))+"</th>\n"));for(r=0;r<p.length;++r){for(var _=[],b=0;b<h.length;++b)i.helper.isUndefined(p[r][b]),_.push(a(p[r][b],g[b]));f.push(_)}return function(e,t){for(var n="<table>\n<thead>\n<tr>\n",a=e.length,r=0;r<a;++r)n+=e[r];for(n+="</tr>\n</thead>\n<tbody>\n",r=0;r<t.length;++r){n+="<tr>\n";for(var i=0;i<a;++i)n+=t[r][i];n+="</tr>\n"}return n+"</tbody>\n</table>\n"}(h,f)}return e=(e=(e=(e=n.converter._dispatch("tables.before",e,t,n)).replace(/\\(\|)/g,i.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|Â¨0)/gm,r)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|Â¨0)/gm,r),e=n.converter._dispatch("tables.after",e,t,n)})),i.subParser("underline",(function(e,t,n){"use strict";return t.underline?(e=n.converter._dispatch("underline.before",e,t,n),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,(function(e,t){return"<u>"+t+"</u>"}))).replace(/\b__(\S[\s\S]*?)__\b/g,(function(e,t){return"<u>"+t+"</u>"})):(e=e.replace(/___(\S[\s\S]*?)___/g,(function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e}))).replace(/__(\S[\s\S]*?)__/g,(function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e}))).replace(/(_)/g,i.helper.escapeCharactersCallback),e=n.converter._dispatch("underline.after",e,t,n)):e})),i.subParser("unescapeSpecialChars",(function(e,t,n){"use strict";return e=(e=n.converter._dispatch("unescapeSpecialChars.before",e,t,n)).replace(/Â¨E(\d+)E/g,(function(e,t){var n=parseInt(t);return String.fromCharCode(n)})),e=n.converter._dispatch("unescapeSpecialChars.after",e,t,n)})),i.subParser("makeMarkdown.blockquote",(function(e,t){"use strict";var n="";if(e.hasChildNodes())for(var a=e.childNodes,r=a.length,o=0;o<r;++o){var s=i.subParser("makeMarkdown.node")(a[o],t);""!==s&&(n+=s)}return n="> "+(n=n.trim()).split("\n").join("\n> ")})),i.subParser("makeMarkdown.codeBlock",(function(e,t){"use strict";var n=e.getAttribute("language"),a=e.getAttribute("precodenum");return"```"+n+"\n"+t.preList[a]+"\n```"})),i.subParser("makeMarkdown.codeSpan",(function(e){"use strict";return"`"+e.innerHTML+"`"})),i.subParser("makeMarkdown.emphasis",(function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="*";for(var a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);n+="*"}return n})),i.subParser("makeMarkdown.header",(function(e,t,n){"use strict";var a=new Array(n+1).join("#"),r="";if(e.hasChildNodes()){r=a+" ";for(var o=e.childNodes,s=o.length,l=0;l<s;++l)r+=i.subParser("makeMarkdown.node")(o[l],t)}return r})),i.subParser("makeMarkdown.hr",(function(){"use strict";return"---"})),i.subParser("makeMarkdown.image",(function(e){"use strict";var t="";return e.hasAttribute("src")&&(t+="!["+e.getAttribute("alt")+"](",t+="<"+e.getAttribute("src")+">",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t})),i.subParser("makeMarkdown.links",(function(e,t){"use strict";var n="";if(e.hasChildNodes()&&e.hasAttribute("href")){var a=e.childNodes,r=a.length;n="[";for(var o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);n+="](",n+="<"+e.getAttribute("href")+">",e.hasAttribute("title")&&(n+=' "'+e.getAttribute("title")+'"'),n+=")"}return n})),i.subParser("makeMarkdown.list",(function(e,t,n){"use strict";var a="";if(!e.hasChildNodes())return"";for(var r=e.childNodes,o=r.length,s=e.getAttribute("start")||1,l=0;l<o;++l)if(void 0!==r[l].tagName&&"li"===r[l].tagName.toLowerCase()){a+=("ol"===n?s.toString()+". ":"- ")+i.subParser("makeMarkdown.listItem")(r[l],t),++s}return(a+="\n\x3c!-- --\x3e\n").trim()})),i.subParser("makeMarkdown.listItem",(function(e,t){"use strict";for(var n="",a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);return/\n$/.test(n)?n=n.split("\n").join("\n    ").replace(/^ {4}$/gm,"").replace(/\n\n+/g,"\n\n"):n+="\n",n})),i.subParser("makeMarkdown.node",(function(e,t,n){"use strict";n=n||!1;var a="";if(3===e.nodeType)return i.subParser("makeMarkdown.txt")(e,t);if(8===e.nodeType)return"\x3c!--"+e.data+"--\x3e\n\n";if(1!==e.nodeType)return"";switch(e.tagName.toLowerCase()){case"h1":n||(a=i.subParser("makeMarkdown.header")(e,t,1)+"\n\n");break;case"h2":n||(a=i.subParser("makeMarkdown.header")(e,t,2)+"\n\n");break;case"h3":n||(a=i.subParser("makeMarkdown.header")(e,t,3)+"\n\n");break;case"h4":n||(a=i.subParser("makeMarkdown.header")(e,t,4)+"\n\n");break;case"h5":n||(a=i.subParser("makeMarkdown.header")(e,t,5)+"\n\n");break;case"h6":n||(a=i.subParser("makeMarkdown.header")(e,t,6)+"\n\n");break;case"p":n||(a=i.subParser("makeMarkdown.paragraph")(e,t)+"\n\n");break;case"blockquote":n||(a=i.subParser("makeMarkdown.blockquote")(e,t)+"\n\n");break;case"hr":n||(a=i.subParser("makeMarkdown.hr")(e,t)+"\n\n");break;case"ol":n||(a=i.subParser("makeMarkdown.list")(e,t,"ol")+"\n\n");break;case"ul":n||(a=i.subParser("makeMarkdown.list")(e,t,"ul")+"\n\n");break;case"precode":n||(a=i.subParser("makeMarkdown.codeBlock")(e,t)+"\n\n");break;case"pre":n||(a=i.subParser("makeMarkdown.pre")(e,t)+"\n\n");break;case"table":n||(a=i.subParser("makeMarkdown.table")(e,t)+"\n\n");break;case"code":a=i.subParser("makeMarkdown.codeSpan")(e,t);break;case"em":case"i":a=i.subParser("makeMarkdown.emphasis")(e,t);break;case"strong":case"b":a=i.subParser("makeMarkdown.strong")(e,t);break;case"del":a=i.subParser("makeMarkdown.strikethrough")(e,t);break;case"a":a=i.subParser("makeMarkdown.links")(e,t);break;case"img":a=i.subParser("makeMarkdown.image")(e,t);break;default:a=e.outerHTML+"\n\n"}return a})),i.subParser("makeMarkdown.paragraph",(function(e,t){"use strict";var n="";if(e.hasChildNodes())for(var a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);return n=n.trim()})),i.subParser("makeMarkdown.pre",(function(e,t){"use strict";var n=e.getAttribute("prenum");return"<pre>"+t.preList[n]+"</pre>"})),i.subParser("makeMarkdown.strikethrough",(function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="~~";for(var a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);n+="~~"}return n})),i.subParser("makeMarkdown.strong",(function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="**";for(var a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t);n+="**"}return n})),i.subParser("makeMarkdown.table",(function(e,t){"use strict";var n,a,r="",o=[[],[]],s=e.querySelectorAll("thead>tr>th"),l=e.querySelectorAll("tbody>tr");for(n=0;n<s.length;++n){var c=i.subParser("makeMarkdown.tableCell")(s[n],t),u="---";if(s[n].hasAttribute("style"))switch(s[n].getAttribute("style").toLowerCase().replace(/\s/g,"")){case"text-align:left;":u=":---";break;case"text-align:right;":u="---:";break;case"text-align:center;":u=":---:"}o[0][n]=c.trim(),o[1][n]=u}for(n=0;n<l.length;++n){var d=o.push([])-1,m=l[n].getElementsByTagName("td");for(a=0;a<s.length;++a){var p=" ";void 0!==m[a]&&(p=i.subParser("makeMarkdown.tableCell")(m[a],t)),o[d].push(p)}}var h=3;for(n=0;n<o.length;++n)for(a=0;a<o[n].length;++a){var g=o[n][a].length;g>h&&(h=g)}for(n=0;n<o.length;++n){for(a=0;a<o[n].length;++a)1===n?":"===o[n][a].slice(-1)?o[n][a]=i.helper.padEnd(o[n][a].slice(-1),h-1,"-")+":":o[n][a]=i.helper.padEnd(o[n][a],h,"-"):o[n][a]=i.helper.padEnd(o[n][a],h);r+="| "+o[n].join(" | ")+" |\n"}return r.trim()})),i.subParser("makeMarkdown.tableCell",(function(e,t){"use strict";var n="";if(!e.hasChildNodes())return"";for(var a=e.childNodes,r=a.length,o=0;o<r;++o)n+=i.subParser("makeMarkdown.node")(a[o],t,!0);return n.trim()})),i.subParser("makeMarkdown.txt",(function(e){"use strict";var t=e.nodeValue;return t=(t=t.replace(/ +/g," ")).replace(/Â¨NBSP;/g," "),t=(t=(t=(t=(t=(t=(t=(t=(t=i.helper.unescapeHTMLEntities(t)).replace(/([*_~|`])/g,"\\$1")).replace(/^(\s*)>/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}));void 0===(a=function(){"use strict";return i}.call(t,n,t,e))||(e.exports=a)}).call(this)}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var i=t[a]={exports:{}};return e[a].call(i.exports,i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{isAutoCompleterOpen:function(){return Ft},updateAIAttributes:function(){return Vt}});var t={};n.r(t),n.d(t,{appUi:function(){return Yt}});var a={};n.r(a),n.d(a,{getContentAiAttributes:function(){return Qt},isAutoCompleterOpen:function(){return Jt}});var r=jQuery,i=n.n(r),o=lodash,s=wp.i18n,l=wp.hooks,c=wp.element,u=wp.data,d=wp.plugins,m=wp.components,p={Blog_Post_Idea:"https://rankmath.com/kb/content-ai-blog-post-idea-tool/",Blog_Post_Outline:"https://rankmath.com/kb/content-ai-blog-post-outline-tool/",Blog_Post_Introduction:"https://rankmath.com/kb/content-ai-blog-post-introduction-tool/",Blog_Post_Conclusion:"https://rankmath.com/kb/content-ai-blog-post-conclusion-tool/",Post_Title:"https://rankmath.com/kb/content-ai-post-title-tool/",Topic_Research:"https://rankmath.com/kb/content-ai-topic-research-tool/?play-video=jbl6YfxdDMA",SEO_Title:"https://rankmath.com/kb/content-ai-seo-title-tool/?play-video=IGzjfbZ0r8g",SEO_Description:"https://rankmath.com/kb/content-ai-seo-description-tool/?play-video=chKiMSDIN14",Paragraph_Writing:"https://rankmath.com/kb/content-ai-paragraph-writing-tool/",Sentence_Expander:"https://rankmath.com/kb/content-ai-sentence-expander-tool/",Paragraph_Rewritter:"https://rankmath.com/kb/content-ai-paragraph-rewritter-tool/",Text_Summarizer:"https://rankmath.com/kb/content-ai-text-summarizer-tool/",Fix_Grammar:"https://rankmath.com/kb/content-ai-fix-grammar-tool/",Analogy:"https://rankmath.com/kb/content-ai-analogy-tool/",Product_Description:"https://rankmath.com/kb/content-ai-product-description-tool/",Product_Pros_and_Cons:"https://rankmath.com/kb/content-ai-product-pros-and-cons-tool/",Product_Review:"https://rankmath.com/kb/content-ai-product-review-tool/",Frequently_Asked_Questions:"https://rankmath.com/kb/content-ai-frequently-asked-questions-tool/",Comment_Reply:"https://rankmath.com/kb/content-ai-comment-reply-tool/",Personal_Bio:"https://rankmath.com/kb/content-ai-personal-bio-tool/",Company_Bio:"https://rankmath.com/kb/content-ai-company-bio-tool/",Job_Description:"https://rankmath.com/kb/content-ai-job-description-tool/",Testimonial:"https://rankmath.com/kb/content-ai-testimonial-tool/",Facebook_Post:"https://rankmath.com/kb/content-ai-facebook-post-tool/?play-video=_tBBi26JAiU",Facebook_Comment_Reply:"https://rankmath.com/kb/content-ai-facebook-comment-reply-tool/",Tweet:"https://rankmath.com/kb/content-ai-tweet-tool/",Tweet_Reply:"https://rankmath.com/kb/content-ai-tweet-reply-tool/",Instagram_Caption:"https://rankmath.com/kb/content-ai-instagram-caption-tool/?play-video=GHk4JwcOpRY",Email:"https://rankmath.com/kb/content-ai-email-tool/?play-video=hJSmY0_WTK0",Email_Reply:"https://rankmath.com/kb/content-ai-email-reply-tool/?play-video=j5R8TGVtDLY",AIDA:"https://rankmath.com/kb/content-ai-aida-tool/?play-video=pHH1w_yNy4o",IDCA:"https://rankmath.com/kb/content-ai-idca-tool/",PAS:"https://rankmath.com/kb/content-ai-pas-tool/",HERO:"https://rankmath.com/kb/content-ai-hero-tool/",BAB:"https://rankmath.com/kb/content-ai-bab-tool/",SPIN:"https://rankmath.com/kb/content-ai-spin-tool/",Youtube_Video_Script:"https://rankmath.com/kb/content-ai-youtube-video-script-tool/",Youtube_Video_Description:"https://rankmath.com/kb/content-ai-youtube-video-description-tool/",Podcast_Episode_Outline:"https://rankmath.com/kb/content-ai-podcast-episode-outline-tool/",Recipe:"https://rankmath.com/kb/content-ai-recipe-tool/",Freeform_Writing:"https://rankmath.com/kb/content-ai-freeform-writing-tool/",AI_Command:"https://rankmath.com/kb/content-ai-command-tool/",SEO_Meta:"https://rankmath.com/kb/content-ai-seo-meta-tool/?play-video=fqC81KMX5IY",Open_Graph:"https://rankmath.com/kb/content-ai-open-graph-tool/",Write:"https://rankmath.com/kb/content-ai-editor/"},h=function(e){var t=p[e];return arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&(0,o.includes)(t,"play-video")&&(t=t.substring(0,t.indexOf("?"))),!(0,o.isUndefined)(t)&&"".concat(t,"?utm_source=Plugin&utm_medium=AI+Tool&utm_campaign=WP")},g=function(){return[{endpoint:"Blog_Post_Idea",title:(0,s.__)("Blog Post Idea","rank-math"),description:(0,s.__)("Get fresh ideas for engaging blog posts that resonate with your niche and audience, ensuring captivating content.","rank-math"),category:"blog",icon:"rm-icon rm-icon-edit",helpLink:h("Blog_Post_Idea"),params:{topic_brief:{isRequired:!0,label:(0,s.__)("Describe Your Industry/Niche","rank-math"),placeholder:(0,s.__)("e.g. Technology blog that covers latest gadgets, tech news, and reviews","rank-math")},audience:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},language:{isRequired:!1}},output:{default:5,max:20}},{endpoint:"Blog_Post_Outline",title:(0,s.__)("Blog Post Outline","rank-math"),description:(0,s.__)("Structure blog posts with a clear flow, guiding readers effortlessly for better understanding and engagement.","rank-math"),category:"blog",icon:"rm-icon rm-icon-howto",helpLink:h("Blog_Post_Outline"),params:{topic:{isRequired:!0},main_points:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"Blog_Post_Introduction",title:(0,s.__)("Blog Post Introduction","rank-math"),description:(0,s.__)("Craft attractive intros that captivate readers' interest, compelling them to explore further into your blog.","rank-math"),category:"blog",icon:"rm-icon rm-icon-acf",helpLink:h("Blog_Post_Introduction"),params:{title:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"Blog_Post_Conclusion",title:(0,s.__)("Blog Post Conclusion","rank-math"),description:(0,s.__)("End your blog posts with impactful summaries, reinforcing key takeaways and leaving a lasting impression.","rank-math"),category:"blog",icon:"rm-icon rm-icon-support",helpLink:h("Blog_Post_Conclusion"),params:{topic:{isRequired:!0},main_argument:{isRequired:!0},call_to_action:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"Post_Title",title:(0,s.__)("Post Title","rank-math"),description:(0,s.__)("Create eye-catching headlines for articles and blogs, grabbing readers' attention and boosting engagement.","rank-math"),category:"blog",icon:"rm-icon rm-icon-heading",helpLink:h("Post_Title"),params:{post_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:5,max:25}},{endpoint:"Topic_Research",title:(0,s.__)("Topic Research","rank-math"),description:(0,s.__)("Dive deep into comprehensive reports on specific topics, uncovering trends, history, and industry players.","rank-math"),category:"seo",icon:"rm-icon rm-icon-analyzer",helpLink:h("Topic_Research"),params:{topic:{isRequired:!0},relevance:{isRequired:!1},format:{isRequired:!0},focus_keyword:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"SEO_Title",title:(0,s.__)("SEO Title","rank-math"),description:(0,s.__)("Optimize headlines for enhanced visibility, organic traffic, and a stronger online presence.","rank-math"),category:"seo",icon:"rm-icon rm-icon-seo-title",helpLink:h("SEO_Title"),params:{post_title:{isRequired:!0},focus_keyword:{isRequired:!1},post_brief:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:5,max:25}},{endpoint:"SEO_Description",title:(0,s.__)("SEO Description","rank-math"),description:(0,s.__)("Craft concise and persuasive summaries that captivate readers and search engines, improving click-through rates.","rank-math"),category:"seo",icon:"rm-icon rm-icon-seo-description",helpLink:h("SEO_Description"),params:{seo_title:{isRequired:!0},focus_keyword:{isRequired:!1},post_brief:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:25}},{endpoint:"Paragraph",title:(0,s.__)("Paragraph","rank-math"),description:(0,s.__)("Generate well-structured and informative paragraphs, seamlessly blending into your content for better readability.","rank-math"),category:"blog",icon:"rm-icon rm-icon-text-align-left",helpLink:h("Paragraph_Writing"),params:{topic:{isRequired:!0},main_argument:{isRequired:!0},tone:{isRequired:!1},audience:{isRequired:!1},supporting_points:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"Paragraph_Rewriter",title:(0,s.__)("Paragraph Rewriter","rank-math"),description:(0,s.__)("Refine paragraphs while preserving meaning, ensuring originality, and enhancing clarity.","rank-math"),category:"blog",icon:"rm-icon rm-icon-book",helpLink:h("Paragraph_Rewritter"),params:{original_paragraph:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"Sentence_Expander",title:(0,s.__)("Sentence Expander","rank-math"),description:(0,s.__)("Transform incomplete sentences into polished expressions, adding depth and clarity to your writing.","rank-math"),category:"misc",icon:"rm-icon rm-icon-misc",helpLink:h("Sentence_Expander"),params:{sentence:{isRequired:!0},topic:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:5}},{endpoint:"Text_Summarizer",title:(0,s.__)("Text Summarizer","rank-math"),description:(0,s.__)("Condense complex texts into concise summaries, highlighting crucial points and essential information.","rank-math"),category:"misc",icon:"rm-icon rm-icon-page",helpLink:h("Text_Summarizer"),params:{text:{isRequired:!0},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"Fix_Grammar",title:(0,s.__)("Fix Grammar","rank-math"),description:(0,s.__)("Utilize AI-powered grammar correction to polish your written content, eliminating errors and improving clarity.","rank-math"),category:"misc",icon:"rm-icon rm-icon-help",helpLink:h("Fix_Grammar"),params:{text:{isRequired:!0,label:(0,s.__)("Text","rank-math"),placeholder:(0,s.__)("Enter the text to fix grammar","rank-math")}},output:{default:1,max:1}},{endpoint:"Analogy",title:(0,s.__)("Analogy","rank-math"),description:(0,s.__)("Enhance clarity by rephrasing text using alternative words, providing a fresh perspective without altering meaning.","rank-math"),category:"misc",icon:"rm-icon rm-icon-sitemap",helpLink:h("Analogy"),params:{text:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"Product_Description",title:(0,s.__)("Product Description","rank-math"),description:(0,s.__)("Craft compelling descriptions that effectively showcase the unique benefits and features of your product.","rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-mobile",helpLink:h("Product_Description"),params:{product_name:{isRequired:!0},features_and_benefits:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"Product_Pros_And_Cons",title:(0,s.__)("Product Pros & Cons","rank-math"),description:(0,s.__)("Present balanced overviews outlining the advantages and limitations, aiding informed decisions.","rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-thumbs-up",helpLink:h("Product_Pros_and_Cons"),params:{product_name:{isRequired:!0},features_and_benefits:{isRequired:!0},limitations_and_drawbacks:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"Product_Review",title:(0,s.__)("Product Review","rank-math"),description:(0,s.__)("Provide detailed evaluations covering strengths, weaknesses, and practical recommendations.","rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-star",helpLink:h("Product_Review"),params:{features_and_benefits:{isRequired:!0},product_name:{isRequired:!0},limitations_and_drawbacks:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Frequently_Asked_Questions",title:(0,s.__)("Frequently Asked Questions","rank-math"),description:(0,s.__)("Address common queries with comprehensive answers, offering valuable information and guidance.","rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-faq",helpLink:h("Frequently_Asked_Questions"),params:{topic:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Comment_Reply",title:(0,s.__)("Comment Reply","rank-math"),description:(0,s.__)("Engage your audience with thoughtful and engaging responses, fostering meaningful interactions.","rank-math"),category:"blog",icon:"rm-icon rm-icon-comments",helpLink:h("Comment_Reply"),params:{reply_brief:{isRequired:!0},original_comment:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"Personal_Bio",title:(0,s.__)("Personal Bio","rank-math"),description:(0,s.__)("Create professional and captivating biographies highlighting accomplishments, expertise, and personality.","rank-math"),category:"misc",icon:"rm-icon rm-icon-user",helpLink:h("Personal_Bio"),params:{personal_information:{isRequired:!0},purpose:{isRequired:!0},personal_achievements:{isRequired:!0},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"Company_Bio",title:(0,s.__)("Company Bio","rank-math"),description:(0,s.__)("Craft informative overviews of your company's history, values, mission, and team, building credibility.","rank-math"),category:"misc",icon:"rm-icon rm-icon-restaurant",helpLink:h("Company_Bio"),params:{company_name:{isRequired:!0},purpose:{isRequired:!0},company_information:{isRequired:!0},company_history:{isRequired:!1},team:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"Job_Description",title:(0,s.__)("Job Description","rank-math"),description:(0,s.__)("Create enticing and comprehensive descriptions outlining requirements, responsibilities, and opportunities.","rank-math"),category:"misc",icon:"rm-icon rm-icon-job",helpLink:h("Job_Description"),params:{company_name:{isRequired:!0},job_title:{isRequired:!0},requirements:{isRequired:!0},responsibilities:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"Testimonial",title:(0,s.__)("Testimonial","rank-math"),description:(0,s.__)("Develop persuasive testimonials sharing positive experiences, endorsing your product, service, or brand.","rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-schema",helpLink:h("Testimonial"),params:{topic:{isRequired:!0,label:(0,s.__)("Product or Service","rank-math")},features_and_benefits:{isRequired:!0},limitations_and_drawbacks:{isRequired:!1},focus_keyword:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Facebook_Post",title:(0,s.__)("Facebook Post","rank-math"),description:(0,s.__)("Create intriguing and shareable content for Facebook, captivating your audience and boosting engagement.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-facebook",helpLink:h("Facebook_Post"),params:{topic_brief:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Facebook_Comment_Reply",title:(0,s.__)("Facebook Comment Reply","rank-math"),description:(0,s.__)("Generate relevant responses to Facebook comments, build relationships & encourage interaction.","rank-math"),category:"marketing-comments-reply",icon:"rm-icon rm-icon-comments-reply",helpLink:h("Facebook_Comment_Reply"),params:{reply_brief:{isRequired:!0,label:(0,s.__)("Reply brief","rank-math")},comment:{isRequired:!0},post_brief:{isRequired:!1,label:(0,s.__)("Post brief","rank-math")},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Tweet",title:(0,s.__)("Tweet","rank-math"),description:(0,s.__)("Create engaging tweets, boost interaction, and foster connections with your followers.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-twitter",helpLink:h("Tweet"),params:{topic_brief:{isRequired:!0},hashtags:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Tweet_Reply",title:(0,s.__)("Tweet Reply","rank-math"),description:(0,s.__)("Generate optimized replies for tweets to promote engagement and strengthen connections.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-comments-reply",helpLink:h("Tweet_Reply"),params:{reply_brief:{isRequired:!0,label:(0,s.__)("Reply brief","rank-math")},tweet:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Instagram_Caption",title:(0,s.__)("Instagram Caption","rank-math"),description:(0,s.__)("Craft catchy captions for Instagram posts to increase engagement and grab attention.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-instagram",helpLink:h("Instagram_Caption"),params:{post_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Email",title:(0,s.__)("Email","rank-math"),description:(0,s.__)("Create effective emails for promotions, announcements, and follow-ups to achieve marketing goals.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-mail",helpLink:h("Email"),params:{email_brief:{isRequired:!0},call_to_action:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Email_Reply",title:(0,s.__)("Email Reply","rank-math"),description:(0,s.__)("Craft courteous email replies to promote interaction and strengthen relationships.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-mail-reply",helpLink:h("Email_Reply"),params:{email:{isRequired:!0},reply_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"AIDA",title:(0,s.__)("AIDA","rank-math"),description:(0,s.__)("Write persuasive text using the Attention-Interest-Desire-Action formula to drive action.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-light-bulb",helpLink:h("AIDA"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"IDCA",title:(0,s.__)("IDCA","rank-math"),description:(0,s.__)("Create compelling messages using the Identify-Develop-Communicate-Ask strategy to resonate.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-help",helpLink:h("IDCA"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"PAS",title:(0,s.__)("PAS","rank-math"),description:(0,s.__)("Address customer problems with the Problem-Agitate-Solution technique to fulfill needs.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-tick",helpLink:h("PAS"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"HERO",title:(0,s.__)("HERO","rank-math"),description:(0,s.__)("Craft captivating headlines using the HERO formula to engage, reveal, and offer value.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-text",helpLink:h("HERO"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"SPIN",title:(0,s.__)("SPIN","rank-math"),description:(0,s.__)("Describe customer problems, highlight implications, and offer solutions using the SPIN method.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-social",helpLink:h("SPIN"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"BAB",title:(0,s.__)("BAB","rank-math"),description:(0,s.__)("Create a compelling Before-After-Bridge narrative to demonstrate product or service value.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-dataset",helpLink:h("BAB"),params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"Youtube_Video_Script",title:(0,s.__)("YouTube Video Script","rank-math"),description:(0,s.__)("Develop engaging video scripts for YouTube to inform, entertain, and align.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-youtube",helpLink:h("Youtube_Video_Script"),params:{topic:{isRequired:!0},visual_elements:{isRequired:!1},key_points:{isRequired:!0},call_to_action:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Youtube_Video_Description",title:(0,s.__)("YouTube Video Description","rank-math"),description:(0,s.__)("Generate informative and engaging video descriptions for YouTube.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-video",helpLink:h("Youtube_Video_Description"),params:{topic:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!0},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Podcast_Episode_Outline",title:(0,s.__)("Podcast Episode Outline","rank-math"),description:(0,s.__)("Create detailed outlines for podcast episodes, including topics and takeaways.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-podcast",helpLink:h("Podcast_Episode_Outline"),params:{topic:{isRequired:!0},host:{isRequired:!1},co_host:{isRequired:!1},key_points:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Recipe",title:(0,s.__)("Recipe","rank-math"),description:(0,s.__)("Create detailed and easy-to-follow recipes with ingredients, instructions, and nutrition.","rank-math"),category:"food-cooking",icon:"rm-icon rm-icon-recipe",helpLink:h("Recipe"),params:{cuisine:{isRequired:!0},type:{isRequired:!0},ingredients:{isRequired:!0},dietary_restrictions:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"Freeform_Writing",title:(0,s.__)("Freeform Writing","rank-math"),description:(0,s.__)("Generate text based on prompts or topics, allowing for imaginative or technical writing.","rank-math"),category:"misc",icon:"rm-icon rm-icon-page",helpLink:h("Freeform_Writing"),params:{text:{isRequired:!0,label:(0,s.__)("What do you want to write?","rank-math")},main_points:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"AI_Command",title:(0,s.__)("AI Command","rank-math"),description:(0,s.__)("Ask AI anything and receive relevant and informative responses for questions or requests.","rank-math"),category:"misc",icon:"rm-icon rm-icon-code",helpLink:h("AI_Command"),params:{command:{isRequired:!0},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"SEO_Meta",title:(0,s.__)("SEO Meta","rank-math"),description:(0,s.__)("Optimize headlines and descriptions to improve visibility on search engines.","rank-math"),category:"seo",icon:"rm-icon rm-icon-seo",helpLink:h("SEO_Meta"),params:{topic:{isRequired:!0},post_brief:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:25}},{endpoint:"Opengraph",title:(0,s.__)("Open Graph","rank-math"),description:(0,s.__)("Boost content visibility on social media with topic-specific meta tags for easy discovery.","rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-social",helpLink:h("Open_Graph"),params:{topic:{isRequired:!0},post_brief:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:5}}]},f=n(184),_=n.n(f),b=n(634),v=n.n(b);function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},k.apply(this,arguments)}function y(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,(r=a.key,i=void 0,i=function(e,t){if("object"!==w(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==w(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(r,"string"),"symbol"===w(i)?i:String(i)),a)}var r,i}function E(e,t){return E=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},E(e,t)}function x(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=S(e);if(t){var r=S(this).constructor;n=Reflect.construct(a,arguments,r)}else n=a.apply(this,arguments);return function(e,t){if(t&&("object"===w(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return T(e)}(this,n)}}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function S(e){return S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},S(e)}var C=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&E(e,t)}(i,e);var t,n,a,r=x(i);function i(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),(t=r.call(this,e))._handleRef=t._handleRef.bind(T(t)),t}return t=i,(n=[{key:"componentDidMount",value:function(){var e=this;this.tagify=new(v())(this.component,this.props.settings||{}),this.props.settings.callbacks.setup&&setTimeout((function(){e.props.settings.callbacks.setup.call(e.tagify),e.tagify.DOM.input.setAttribute("contenteditable",!0),e.tagify.DOM.input.addEventListener("blur",e.props.settings.callbacks.blur)}),100),this.props.settings.callbacks.dragEnd&&this.tagify.DOM.scope.addEventListener("dragend",this.props.settings.callbacks.dragEnd),(0,l.doAction)("rank_math_tagify_init",this)}},{key:"shouldComponentUpdate",value:function(e){return this.tagify.settings.whitelist=e.settings.whitelist,e.showDropdown&&this.tagify.dropdown.show.call(this.tagify,e.showDropdown),!1===e.showDropdown&&this.tagify.dropdown.hide.call(this.tagify,!0),!1}},{key:"_handleRef",value:function(e){this.component=e}},{key:"render",value:function(){var e={ref:this._handleRef,id:this.props.id,name:this.props.name,className:this.props.className,placeholder:this.props.placeholder};return"textarea"===this.props.mode?wp.element.createElement("textarea",k({},e,{defaultValue:this.props.initialValue})):wp.element.createElement("input",k({},e,{defaultValue:this.props.initialValue}))}},{key:"toArray",value:function(){return this.tagify.value.map((function(e){return e.value}))}},{key:"toString",value:function(){return this.toArray().join(",")}},{key:"queryTags",value:function(){return this.tagify.DOM.scope.querySelectorAll("tag")}}])&&y(t.prototype,n),a&&y(t,a),Object.defineProperty(t,"prototype",{writable:!1}),i}(c.Component),A=function(e){if("[object Object]"!==Object.prototype.toString.call(e))return"";var t,n,a,r="",o=Object.keys(e);for(n=o.length;n--;)"class"!==(t=o[n])&&e.hasOwnProperty(t)&&e[t]&&(r+=""+t+(e[t]?'="'.concat((a=e[t],a=i()("<textarea />").html(a).text(),((new DOMParser).parseFromString(a,"text/html").body.textContent||"").replace(/["<>]/g,"")||""),'"'):""));return r},P=function(e){return{topic_brief:{label:(0,s.__)("Topic Brief","rank-math"),placeholder:(0,s.__)("Enter a short summary of your topic","rank-math"),type:"textarea",maxlength:"400"},audience:{label:(0,s.__)("Audience","rank-math"),tooltip:(0,s.__)("The target audience for the content.","rank-math"),placeholder:(0,s.__)("Select or Write Custom","rank-math"),options:[{value:"General Audience",icon:"ðŸŒ�"},{value:"Consumers",icon:"ðŸ›�"},{value:"Students",icon:"ðŸ“š"},{value:"Professionals",icon:"ðŸ’¼"},{value:"Business Owners",icon:"ðŸ�­"},{value:"Job Seekers",icon:"ðŸ”�"},{value:"Investors",icon:"ðŸ’°"},{value:"Entrepreneurs",icon:"ðŸš€"},{value:"Social Media Users",icon:"ðŸ“±"},{value:"Travelers",icon:"ðŸ›«"},{value:"Pet Owners",icon:"ðŸ�¾"},{value:"Seniors",icon:"ðŸ§“"},{value:"Gaming Enthusiasts",icon:"ðŸŽ®"},{value:"Environmentalists",icon:"ðŸŒ�"},{value:"Sports Fans",icon:"âš½ï¸�"},{value:"Health Enthusiasts",icon:"ðŸ’Š"},{value:"Tech Enthusiasts",icon:"ðŸ’»"},{value:"Parents",icon:"ðŸ‘¨â€�ðŸ‘§â€�ðŸ‘¦"},{value:"Artists",icon:"ðŸŽ¨"},{value:"Musicians",icon:"ðŸŽ¸"},{value:"Photographers",icon:"ðŸ“·"},{value:"Writers",icon:"âœ�ï¸�"},{value:"Retirees",icon:"ðŸ‘´"},{value:"Healthcare Professionals",icon:"ðŸ‘©â€�âš•ï¸�"},{value:"Educators",icon:"ðŸ‘©â€�ðŸ�«"},{value:"Activists",icon:"ðŸ‘©â€�âš–ï¸�"},{value:"Foodies",icon:"ðŸ�•"},{value:"Cooks",icon:"ðŸ‘©â€�ðŸ�³"},{value:"Fitness Enthusiasts",icon:"ðŸ�‹ï¸�â€�â™€ï¸�"},{value:"Bargain Hunters",icon:"ðŸ›�"},{value:"Fashionistas",icon:"ðŸ‘—"},{value:"Outdoor Enthusiasts",icon:"ðŸ�•"},{value:"Indoor Hobbyists",icon:"ðŸŽ¨"},{value:"Gardeners",icon:"ðŸŒ±"},{value:"DIYers",icon:"ðŸ”§"},{value:"Crafters",icon:"ðŸ§¶"},{value:"Collectors",icon:"ðŸ“š"},{value:"Dancers",icon:"ðŸ’ƒ"},{value:"Gamers",icon:"ðŸŽ®"},{value:"Movie Buffs",icon:"ðŸŽ¥"},{value:"TV Enthusiasts",icon:"ðŸ“º"},{value:"Video Creators",icon:"ðŸŽ¥"},{value:"Engineers",icon:"ðŸ”§"},{value:"Designers",icon:"ðŸŽ¨"},{value:"Podcast Listeners",icon:"ðŸŽ§"},{value:"Bloggers",icon:"ðŸ“�"},{value:"Authors",icon:"ðŸ“š"}],default:rankMath.ca_audience,maxlength:"200"},tone:{label:(0,s.__)("Tone","rank-math"),tooltip:(0,s.__)("The tone of the content.","rank-math"),placeholder:(0,s.__)("Select or Write Custom","rank-math"),options:[{value:"Formal",icon:"ðŸ¤µ"},{value:"Informal",icon:"ðŸ¤—"},{value:"Friendly",icon:"ðŸ˜Š"},{value:"Casual",icon:"ðŸ’�â€�â™€ï¸�"},{value:"Conversational",icon:"ðŸ—£ï¸�"},{value:"Descriptive",icon:"ðŸ“š"},{value:"Persuasive",icon:"ðŸ¤�"},{value:"Creative",icon:"ðŸŽ¨"},{value:"Technical",icon:"ðŸ”§"},{value:"Analytical",icon:"ðŸ“Š"},{value:"Journalese",icon:"ðŸ“°"},{value:"Poetic",icon:"ðŸŒº"},{value:"Factual",icon:"ðŸ“Š"},{value:"Emotional",icon:"ðŸ’”"},{value:"Satirical",icon:"ðŸ˜…"},{value:"Empathetic",icon:"ðŸ˜”"},{value:"Opinionated",icon:"ðŸ’¬"},{value:"Humorous",icon:"ðŸ˜‚"},{value:"Story-telling",icon:"ðŸ“š"},{value:"Narrative",icon:"ðŸ“–"},{value:"Expository",icon:"ðŸ“š"},{value:"Argumentative",icon:"ðŸ—£ï¸�"},{value:"Objective",icon:"ðŸ“Š"},{value:"Subjective",icon:"ðŸ’¬"}],default:rankMath.ca_tone,maxlength:"200"},style:{label:(0,s.__)("Style","rank-math"),tooltip:(0,s.__)("The style of the content.","rank-math"),help_link:"https://rankmath.com/kb/blog-post-idea/?utm_source=Plugin&utm_medium=AI+Tool+Style&utm_campaign=WP#style",placeholder:(0,s.__)("Select or Write Custom","rank-math"),options:[{value:"Listicle",icon:"ðŸ”¢"},{value:"Tutorial",icon:"ðŸ“–"},{value:"Review",icon:"â­�ï¸�"},{value:"Case Study",icon:"ðŸ•µï¸�â€�â™‚ï¸�"},{value:"Opinion",icon:"ðŸ—£ï¸�"},{value:"News",icon:"ðŸ“°"},{value:"Newsjacking",icon:"ðŸ—ž"},{value:"Personal",icon:"ðŸ’¬"},{value:"Story-telling",icon:"ðŸ“š"},{value:"Guide",icon:"ðŸ—ºï¸�"},{value:"Research-based",icon:"ðŸ”¬"},{value:"Interview",icon:"ðŸŽ¤"},{value:"Infographic",icon:"ðŸ“Š"},{value:"Debate",icon:"ðŸ¤”"},{value:"Video Blog",icon:"ðŸŽ¥"},{value:"Vlog",icon:"ðŸ“¹"},{value:"Podcast",icon:"ðŸŽ§"},{value:"Audio Blog",icon:"ðŸŽ™"},{value:"Quiz",icon:"ðŸŽ²"},{value:"Contest",icon:"ðŸŽ‰"},{value:"Poll",icon:"ðŸ“Š"},{value:"Comparison",icon:"ðŸ”Ž"},{value:"How-to",icon:"ðŸ“–"},{value:"FAQ",icon:"â�“"}],maxlength:"200"},language:{label:(0,s.__)("Output Language","rank-math"),placeholder:(0,s.__)("","rank-math"),type:"select",options:[{value:"US English",icon:"ðŸ‡ºðŸ‡¸"},{value:"UK English",icon:"ðŸ‡¬ðŸ‡§"},{value:"Bulgarian",icon:"ðŸ‡§ðŸ‡¬"},{value:"Chinese",icon:"ðŸ‡¨ðŸ‡³"},{value:"Czech",icon:"ðŸ‡¨ðŸ‡¿"},{value:"Danish",icon:"ðŸ‡©ðŸ‡°"},{value:"Dutch",icon:"ðŸ‡³ðŸ‡±"},{value:"Estonian",icon:"ðŸ‡ªðŸ‡ª"},{value:"Finnish",icon:"ðŸ‡«ðŸ‡®"},{value:"French",icon:"ðŸ‡«ðŸ‡·"},{value:"German",icon:"ðŸ‡©ðŸ‡ª"},{value:"Greek",icon:"ðŸ‡¬ðŸ‡·"},{value:"Hebrew",icon:"ðŸ‡®ðŸ‡±"},{value:"Hungarian",icon:"ðŸ‡­ðŸ‡º"},{value:"Indonesian",icon:"ðŸ‡®ðŸ‡©"},{value:"Italian",icon:"ðŸ‡®ðŸ‡¹"},{value:"Japanese",icon:"ðŸ‡¯ðŸ‡µ"},{value:"Korean",icon:"ðŸ‡°ðŸ‡·"},{value:"Latvian",icon:"ðŸ‡±ðŸ‡»"},{value:"Lithuanian",icon:"ðŸ‡±ðŸ‡¹"},{value:"Norwegian",icon:"ðŸ‡³ðŸ‡´"},{value:"Polish",icon:"ðŸ‡µðŸ‡±"},{value:"Portuguese",icon:"ðŸ‡µðŸ‡¹"},{value:"Romanian",icon:"ðŸ‡·ðŸ‡´"},{value:"Russian",icon:"ðŸ‡·ðŸ‡º"},{value:"Slovak",icon:"ðŸ‡¸ðŸ‡°"},{value:"Slovenian",icon:"ðŸ‡¸ðŸ‡®"},{value:"Spanish",icon:"ðŸ‡ªðŸ‡¸"},{value:"Swedish",icon:"ðŸ‡¸ðŸ‡ª"},{value:"Turkish",icon:"ðŸ‡¹ðŸ‡·"}],default:rankMath.ca_language,maxTags:1},topic:{label:(0,s.__)("Topic","rank-math"),placeholder:(0,s.__)("Enter a short summary of your topic","rank-math"),maxlength:"200"},main_points:{label:(0,s.__)("Main points &amp; ideas","rank-math"),placeholder:(0,s.__)("Enter the main points you want to cover, separated by comma","rank-math"),type:"textarea",maxlength:"400"},focus_keyword:{label:(0,s.__)("Focus Keyword","rank-math"),placeholder:(0,s.__)("Enter the main keywords to focus on","rank-math"),maxlength:"200",options:[],default:[]},title:{label:(0,s.__)("Post title","rank-math"),placeholder:(0,s.__)("Enter your post title","rank-math"),maxlength:200},main_argument:{label:(0,s.__)("Main Argument","rank-math"),placeholder:(0,s.__)("Enter the main point you want to make","rank-math"),type:"textarea",maxlength:"400"},call_to_action:{label:(0,s.__)("Call to Action","rank-math"),placeholder:(0,s.__)("Select or Write Custom","rank-math"),type:"select",options:["Subscribe to our newsletter","Follow social media accounts","Download a resource or guide","Share the blog post on social media","Comment on the blog post","Check out related resources","Sign up for a webinar or event","Contact for more information","Purchase a product or service"],maxlength:"300"},post_brief:{label:(0,s.__)("Post Brief","rank-math"),placeholder:(0,s.__)("Enter a short summary of your post","rank-math"),type:"textarea",maxlength:"400"},length:{label:(0,s.__)("Length","rank-math"),placeholder:(0,s.__)("","rank-math"),type:"button",options:[{value:"short"},{value:"medium"},{value:"long"}],maxlength:200,default:"medium"},relevance:{label:(0,s.__)("Relevance","rank-math"),placeholder:(0,s.__)("Select or Write Custom","rank-math"),options:[{value:"Recent",icon:"ðŸ—“ï¸�"},{value:"Historical",icon:"ðŸ“œ"},{value:"Regional",icon:"ðŸ—ºï¸�"},{value:"Comparative",icon:"âš–ï¸�"},{value:"Specific",icon:"ðŸŽ¯"},{value:"Longitudinal",icon:"ðŸ“ˆ"},{value:"Cross-cultural",icon:"ðŸŒ�"},{value:"Theoretical",icon:"ðŸ“š"},{value:"Empirical",icon:"ðŸ“Š"},{value:"Applied",icon:"ðŸ› ï¸�"}],maxlength:200},format:{label:(0,s.__)("Format","rank-math"),placeholder:(0,s.__)("Select or Write desired output format","rank-math"),options:["Summary","List","Outline"],maxlength:200},post_title:{label:(0,s.__)("Post Title","rank-math"),placeholder:(0,s.__)("Enter your post title","rank-math"),maxlength:200},seo_title:{label:(0,s.__)("SEO Title","rank-math"),placeholder:(0,s.__)("Enter your SEO title","rank-math"),maxlength:200},supporting_points:{label:(0,s.__)("Supporting Points","rank-math"),placeholder:(0,s.__)("The supporting points you want to include in the paragraph","rank-math"),type:"textarea",maxlength:500},original_paragraph:{label:(0,s.__)("Original Paragraph","rank-math"),placeholder:(0,s.__)("Enter the paragraph you want to rephrase","rank-math"),type:"textarea",maxlength:1e3},sentence:{label:(0,s.__)("Sentence","rank-math"),placeholder:(0,s.__)("Enter a short or incomplete sentence","rank-math"),type:"textarea",maxlength:200},text:{label:(0,s.__)("Original Text","rank-math"),placeholder:(0,s.__)("Enter the text to summarize","rank-math"),type:"textarea",maxlength:2e3},product_name:{label:(0,s.__)("Product Name","rank-math"),placeholder:(0,s.__)("Enter the name of the product","rank-math"),maxlength:"200"},features_and_benefits:{label:(0,s.__)("Features and Benefits","rank-math"),placeholder:(0,s.__)("Enter a list of features and benefits, separated by commas","rank-math"),type:"textarea",maxlength:600},limitations_and_drawbacks:{label:(0,s.__)("Limitations and Drawbacks","rank-math"),placeholder:(0,s.__)("","rank-math"),type:"textarea",maxlength:600},reply_brief:{label:(0,s.__)("Reply Brief","rank-math"),placeholder:(0,s.__)("Enter a short summary of the required response","rank-math"),type:"textarea",maxlength:400},original_comment:{label:(0,s.__)("Original Comment","rank-math"),placeholder:(0,s.__)("The original comment that requires a response","rank-math"),type:"textarea",maxlength:600},personal_information:{label:(0,s.__)("Personal Information","rank-math"),placeholder:(0,s.__)("Enter personal details, such as your name, age, occupation, etc.","rank-math"),type:"textarea",maxlength:400},purpose:{label:(0,s.__)("Purpose","rank-math"),placeholder:(0,s.__)("What is the purpose of this bio?","rank-math"),maxlength:200},personal_achievements:{label:(0,s.__)("Personal Achievements","rank-math"),placeholder:(0,s.__)("Enter a list of your personal achievements, separated by commas","rank-math"),type:"textarea",maxlength:400},company_name:{label:(0,s.__)("Company Name","rank-math"),placeholder:(0,s.__)("Enter the name of your company","rank-math"),maxlength:200},company_information:{label:(0,s.__)("Company Information","rank-math"),placeholder:(0,s.__)("Enter company details, such as the company name, location, and industry","rank-math"),type:"textarea",maxlength:500},company_history:{label:(0,s.__)("Company History","rank-math"),placeholder:(0,s.__)("Enter a brief history of the company","rank-math"),type:"textarea",maxlength:500},team:{label:(0,s.__)("Team","rank-math"),placeholder:(0,s.__)("Enter a brief description of the team","rank-math"),type:"textarea",maxlength:500},job_title:{label:(0,s.__)("Job Title","rank-math"),placeholder:(0,s.__)("Enter the job title.","rank-math"),maxlength:200},requirements:{label:(0,s.__)("Requirements","rank-math"),placeholder:(0,s.__)("Enter the key requirements for the position, separated by commas","rank-math"),type:"textarea",maxlength:400},responsibilities:{label:(0,s.__)("Responsibilities","rank-math"),placeholder:(0,s.__)("Enter a list of responsibilities, separated by commas","rank-math"),type:"textarea",maxlength:400},comment:{label:(0,s.__)("Comment","rank-math"),placeholder:(0,s.__)("The comment you want to reply to.","rank-math"),type:"textarea",maxlength:600},hashtags:{label:(0,s.__)("Hashtags","rank-math"),placeholder:(0,s.__)("Enter one or more hashtags, separated by commas","rank-math"),maxlength:200},tweet:{label:(0,s.__)("Tweet","rank-math"),placeholder:(0,s.__)("Enter the original tweet to reply to.","rank-math"),type:"textarea",maxlength:400},email_brief:{label:(0,s.__)("Email Brief","rank-math"),placeholder:(0,s.__)("Enter a brief description of the email","rank-math"),type:"textarea",maxlength:500},email:{label:(0,s.__)("Email","rank-math"),placeholder:(0,s.__)("Enter the original email","rank-math"),type:"textarea",maxlength:1e3},product_description:{label:(0,s.__)("Product Description","rank-math"),placeholder:(0,s.__)("Introduce your product here. Provide a detailed description of its features and benefits, highlighting what sets it apart from competitors and why it's the perfect solution for your target audience.","rank-math"),type:"textarea",maxlength:200},visual_elements:{label:(0,s.__)("Visual Elements","rank-math"),placeholder:(0,s.__)("Enter the visual elements you want to include in the video","rank-math"),type:"textarea",maxlength:400},key_points:{label:(0,s.__)("Key Points","rank-math"),placeholder:(0,s.__)("Enter the main points you want to cover, separated by commas.","rank-math"),type:"textarea",maxlength:"400"},host:{label:(0,s.__)("Host","rank-math"),placeholder:(0,s.__)("Enter the name of the host of the podcast","rank-math"),type:"textarea",maxlength:200},co_host:{label:(0,s.__)("Guest(s) or co-host","rank-math"),placeholder:(0,s.__)("Enter the name(s) separated by comma","rank-math"),type:"textarea",maxlength:200},cuisine:{label:(0,s.__)("Cuisine","rank-math"),placeholder:(0,s.__)("e.g. Italian, Chinese, Mexican","rank-math"),maxlength:200},type:{label:(0,s.__)("Type of Dish","rank-math"),placeholder:(0,s.__)("e.g. soup, salad, casserole","rank-math"),maxlength:200},ingredients:{label:(0,s.__)("Ingredients","rank-math"),placeholder:(0,s.__)("Enter the ingredients needed for the recipe, separated by commas (e.g. flour, sugar, eggs, milk)","rank-math"),type:"textarea",maxlength:1e3},dietary_restrictions:{label:(0,s.__)("Dietary restrictions","rank-math"),placeholder:(0,s.__)("List any dietary restrictions that the recipe should adhere to (e.g. gluten-free, vegan, low-carb)","rank-math"),type:"textarea",maxlength:400},command:{label:(0,s.__)("Command","rank-math"),placeholder:(0,s.__)("Enter your command","rank-math"),type:"textarea",maxlength:1e3},instructions:{label:(0,s.__)("Instructions","rank-math"),type:"textarea",placeholder:(0,s.__)("Enter instructions","rank-math"),maxlength:600},document_title:{label:(0,s.__)("Document Title","rank-math"),placeholder:(0,s.__)("Enter the document title","rank-math"),maxlength:200}}[e]},O=function(e){var t=e.id,n=e.data,a=e.value,r=e.endpoint,i=h(void 0===r?"":r,!0);return wp.element.createElement("label",{htmlFor:t},(0,o.unescape)(n.label),i&&wp.element.createElement("a",{href:i+"#"+t,rel:"noreferrer",target:"_blank",title:n.tooltip},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help rank-math-tooltip"})),n.maxlength&&wp.element.createElement("span",{className:"limit"},wp.element.createElement("span",{className:"count"},(0,o.size)((0,o.isArray)(a)?a.join(" "):a)),"/",n.maxlength))},I=function(e,t,n,a){var r=wp.data.select("rank-math-content-ai").getContentAiAttributes();return wp.element.createElement("form",{className:"rank-math-ai-tools"},(0,o.map)(e,(function(e,i){var s=P(i);s.placeholder=(0,o.isEmpty)(e.placeholder)?s.placeholder:e.placeholder,s.label=(0,o.isEmpty)(e.label)?s.label:e.label;var l=e.isRequired,u=(0,o.isArray)(t[i])?t[i].join(" "):t[i],d=_()("form-field",{"is-required":l,"limit-reached":!(0,o.isUndefined)(s.maxlength)&&!(0,o.isUndefined)(u)&&u.length>s.maxlength}),p=(0,o.isUndefined)(r[i])?function(e,t){return(0,o.isUndefined)(e.default)?t:e.default}(e,s.default):r[i];if(!(0,o.isEmpty)(s.options)&&"button"===s.type)return wp.element.createElement("div",{className:d,key:i},wp.element.createElement(O,{id:i,data:s,value:"",endpoint:n}),wp.element.createElement(m.__experimentalToggleGroupControl,{value:p},(0,o.map)(s.options,(function(e,t){return wp.element.createElement(m.ToolbarButton,{key:t,value:e.value,isPressed:e.value===p,onClick:function(){return a(i,e.value)}},(0,o.isEmpty)(e.label)?e.value:e.label)}))));if(!(0,o.isUndefined)(s.options)){var h=(0,c.createRef)(),g={add:function(e){var n=(0,o.isArray)(t[i])?[e.detail.data.value]:e.detail.data.value;!(0,o.isUndefined)(t[i])&&(0,o.isArray)(t[i])&&(n=t[i]).push(e.detail.data.value),a(i,n)},remove:function(e){if(!(0,o.isArray)(t[i]))return a(i,""),!1;var n=(0,o.remove)(t[i],(function(t){return t!==e.detail.data.value}));return a(i,n),!1}},f={addTagOnBlur:!0,maxTags:s.maxTags?s.maxTags:"100",whitelist:s.options,focusableTags:!0,transformTag:function(e){e.value=e.value.replaceAll(",","")},templates:{tag:function(e){var t=(0,o.isUndefined)(e.icon)?"":e.icon;try{return"<tag ".concat(A(e)," title='").concat(e.value,"' contenteditable='false' spellcheck=\"false\" class='tagify__tag'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<x title='remove tag' class='tagify__tag__removeBtn'></x>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t").concat(t,"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class='tagify__tag-text'>").concat(e.value,"</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</tag>")}catch(e){}},dropdownItem:function(e){var t=(0,o.isUndefined)(e.icon)?"":e.icon;try{return"<div ".concat(A(e)," class='tagify__dropdown__item' >\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t").concat(t,"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>").concat(e.value,"</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>")}catch(e){console.error(e)}}},dropdown:{enabled:0,maxItems:100,closeOnSelect:!0},callbacks:g};return wp.element.createElement("div",{className:d+" content-ai-tagify rank-math-focus-keyword",key:i},wp.element.createElement(O,{id:i,data:s,value:t[i],endpoint:n}),wp.element.createElement(C,{id:i,ref:h,mode:"input",settings:f,placeholder:s.placeholder,initialValue:p}))}return(0,o.isEmpty)(s.type)||"textarea"!==s.type?wp.element.createElement("div",{className:d,key:i},wp.element.createElement(O,{id:i,data:s,value:p,endpoint:n}),wp.element.createElement(m.TextControl,{id:i,onChange:function(e){return a(i,e)},placeholder:s.placeholder,className:l?"is-required":"",required:l?"required":"",value:p})):wp.element.createElement("div",{className:d,key:i},wp.element.createElement(O,{id:i,data:s,value:t[i],endpoint:n}),wp.element.createElement(m.TextareaControl,{id:i,onChange:function(e){return a(i,e)},placeholder:s.placeholder,className:l?"is-required":"",rows:s.rows?s.rows:"5",required:l?"required":"",value:p}))})))},N=wp.apiFetch,M=n.n(N),R=(0,s.__)("Sorry, the request has failed. If the issue persists, please contact our Support for assistance.","rank-math"),j=rankMath.contentAICredits,q=function(e,t,n,a,r,i,s){if(s<2&&"could_not_generate"===e.code)D(t,n,a,r,i,s+1);else{var l=rankMath.contentAIErrors;a({error:(0,o.isUndefined)(l[e.code])?R:l[e.code]})}},D=function e(t,n,a,r,s){var l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;i().ajax({url:rankMath.contentAiUrl+t,type:"POST",data:n,success:function(e){if((0,o.isEmpty)(e.error)){!function(e,t,n,a){var r={endpoint:t,attributes:n,outputs:(0,o.isEmpty)(e.meta)?e.results:e.meta};a&&(r.isChat=!0),(0,o.isUndefined)(e.credits)||(r.credits={credits:e.credits,plan:e.plan,refreshDate:e.refreshDate}),M()({method:"POST",path:"/rankmath/v1/ca/saveOutput",data:r}).then((function(e){a||(0,o.isUndefined)(rankMath.contentAIHistory)||(rankMath.contentAIHistory=e)})).catch((function(e){console.log(e)}))}(e,t,n,r);var c=(0,o.isEmpty)(e.meta)?e.results:e.meta;if(!(0,o.isEmpty)(e.warning)){var u=rankMath.contentAIErrors;c.push({warning:(0,o.isUndefined)(u[e.warning])?R:u[e.warning]})}a(c),function(e,t){if(!(0,o.isUndefined)(e.credits)){var n=e.credits;(0,o.isEmpty)(n)||(n=n.available-n.taken,j=n=n<0?0:n,t&&t(n),i()(".credits-remaining").length&&i()(".credits-remaining strong").text(n))}}(e,s)}else q(e.error,t,n,a,r,s,l)},error:function(i){try{var c=JSON.parse(i.responseText);if(!(0,o.isEmpty)(c.err_key)){if("not_found"===c.err_key&&l<2)return void M()({method:"GET",path:"/rankmath/v1/ca/migrateUser"}).then((function(i){"completed"===i&&e(t,n,a,r,s,l+1)})).catch((function(e){console.log(e)}));var u=rankMath.contentAIErrors;return void a({error:(0,o.isUndefined)(u[c.err_key])?R:u[c.err_key]})}}catch(e){a({error:R})}a({error:R})}})},B=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=rankMath.connectData;t=(0,o.merge)(t,{username:i.username,api_key:i.api_key,site_url:i.site_url,plugin_version:rankMath.version,debug:"1"}),j?(!(0,o.isUndefined)(t.language)&&t.language||(t.language=rankMath.ca_language),D(e,t,n,a,r)):q({code:"account_limit_reached"},e,t,n,a,r,1)},L=function(e,t){var n={choices:t.default},a=wp.data.select("rank-math-content-ai").getContentAiAttributes();return(0,o.map)(e,(function(e,t){var r=(0,o.isUndefined)(a[t])?function(e,t){return(0,o.isUndefined)(t.default)?P(e).default:t.default}(t,e):a[t];(0,o.isUndefined)(r)||(n[t]=r)})),n},z=n(787),H=n.n(z),F=wp.blocks,V=new(H().Converter)({noHeaderId:!0,tables:!0,literalMidWordUnderscores:!0,omitExtraWLInCodeBlocks:!0,simpleLineBreaks:!0,strikethrough:!0}),W=function(e){return e.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/,(function(e,t,n,a){return"".concat(t,"\n").concat(n,"\n").concat(a)}))},U=function(e){return e.replace(/(^|\n)â€¢( +)/g,"$1*$2")},$=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,o.isString)(e)?t?V.makeMarkdown(e):rankMath.isContentAIPage||"gutenberg"===rankMath.currentEditor?(0,F.serialize)((0,F.rawHandler)({HTML:V.makeHtml(W(U(e))),mode:"BLOCKS"})):V.makeHtml(W(U(e))):e},G=function(){return new Worker(URL.createObjectURL(new Blob(["\n\tlet words = [];\n\tlet currentWordIndex = 0;\n\tlet currentLetterIndex = 0;\n\tlet typingSpeed = 25; // Adjust the typing speed as needed\n\t\n\tfunction typeWords() {\n\t\tif ( currentWordIndex >= words.length ) {\n\t\t\tpostMessage('rank_math_process_complete')\n\t\t\treturn\n\t\t}\n\t\n\t\tconst currentWord = words[ currentWordIndex ];\n\t\tif ( currentLetterIndex < currentWord.length ) {\n\t\t\tpostMessage( currentWord );\n\t\t\tcurrentLetterIndex = currentLetterIndex + currentWord.length;\n\t\t} else {\n\t\t\tcurrentWordIndex++;\n\t\t\tcurrentLetterIndex = 0;\n\t\t\tpostMessage(' '); // Add space between words\n\t\t}\n\t\n\t\tsetTimeout( typeWords, typingSpeed );\n\t}\n\t\n\tself.onmessage = function (event) {\n\t\twords = event.data.split(' ');\n\t\ttypeWords();\n\t};\n\t"],{type:"application/javascript"})))};function K(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Y(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Y(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var J=function(e){var t=e.value,n=e.showWordCount,a=void 0===n||n,r=e.addTypingEffect,i=void 0===r||r,o=t.split(" "),l=K((0,c.useState)(i?"":t),2),u=l[0],d=l[1],m=K((0,c.useState)(null),2),p=m[0],h=m[1];i&&((0,c.useEffect)((function(){var e=G();return h(e),e.onmessage=function(e){"rank_math_process_complete"!==e.data&&d((function(t){return t+e.data}))},function(){e.terminate()}}),[]),(0,c.useEffect)((function(){p&&(d(""),p.postMessage(t))}),[t,p]));var g=u.length<o.length?"content typing":"content";return wp.element.createElement(React.Fragment,null,a&&wp.element.createElement("div",{className:"word-count"},(0,s.sprintf)((0,s.__)("Words: %d","rank-math"),u.split(" ").length)),wp.element.createElement("div",{className:g,dangerouslySetInnerHTML:{__html:$(u)}}))},Q=function(e){return"".concat(e,"-").concat((new Date).getTime())},X=function(e){var t=elementor.$preview[0].contentWindow.document,n=t.getElementsByClassName("rank-math-active");n.length||(n=(n=t.getElementsByClassName("elementor-widget-container"))[n.length-1]),i()(n).trigger("click");var a=i()(n).find("[data-elementor-setting-key]"),r=a.data();setTimeout((function(){if("title"===r.elementorSettingKey){var t=i()('[data-setting="title"]');t.val(t.val()+" "+e),a.text(a.text()+" "+e)}else{var n=tinymce.activeEditor;n.selection.select(n.getBody(),!0),n.selection.collapse(!1),n.insertContent(" "+e)}}),300),i()(n).removeClass("rank-math-active")},Z=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!function(){var e=elementor.settings.page.getEditedView().getContainer();if(!e.children.length){var t={model:{custom:"",elType:"widget",widgetType:"text-editor"},options:{at:void 0,side:"top",default:"",value:"",text:"",html:""},container:e};$e.run("preview/drop",t)}}(),setTimeout((function(){!function(e,t){var n=elementor.$preview[0].contentWindow.document,a=Array.from(n.getElementsByClassName("elementor-widget-container"));if((0,o.forEach)(a.reverse(),(function(e){e.innerText&&i()(e).addClass("rank-math-active")})),e=$(e),t){var r=G();r.onmessage=function(e){var t=e.data;t&&"rank_math_process_complete"!==t&&X(t)},r.postMessage(e)}else X(e)}(e,t)}),500)},ee=wp.compose;function te(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ne(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ne(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var ae=function(e){var t=e.value,n=e.label,a=void 0===n?"":n,r=e.disabled,i=void 0!==r&&r,o=e.onClick,l=void 0===o?"":o,u=te((0,c.useState)(),2),d=u[0],p=u[1];l&&(t=(0,F.serialize)(wp.data.select("core/block-editor").getBlocks())),a=a||(0,s.__)("Copy","rank-math");var h=(0,ee.useCopyToClipboard)(t);return wp.element.createElement(m.Button,{variant:"secondary",className:"button structured-data-copy is-small",ref:h,disabled:i,onClick:function(){p(!0),setTimeout((function(){p(!1)}),700)}},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"}),d?(0,s.__)("Copied!","rank-math"):a)},re=function(e){var t=e.value,n=e.index,a=void 0===n?0:n,r=e.isPage,l=void 0!==r&&r,c=e.endpoint,d=e.typingEffect,p=void 0===d||d,h=e.isSerpPreview,g=void 0!==h&&h,f=function(e,t){if("Frequently_Asked_Questions"!==t)return e;var n='<div class="wp-block-rank-math-faq-block">',a=[];return a.questions=(0,o.map)(e,(function(e){return n+='<div class="rank-math-faq-item"><h3 class="rank-math-question">'+e.question+'</h3><div class="rank-math-answer">'+e.answer+"</div></div>",{id:Q("faq-question"),title:e.question,content:e.answer,visible:!0}})),n+="</div>",'\x3c!-- wp:rank-math/faq-block {"questions":'+JSON.stringify(a.questions)+"} --\x3e"+n+"\x3c!-- /wp:rank-math/faq-block --\x3e"}(t,c),_=t;return(0,o.isArray)(t)&&(_="",(0,o.map)(t,(function(e){_+="<h2>"+e.question+"</h2><span>"+e.answer+"</span>"}))),(0,o.isObject)(t)&&!(0,o.isArray)(t)&&(_="",(0,o.map)(t,(function(e,t){_+="<h4>"+(0,o.startCase)(t)+"</h4><span>"+e+"</span>"}))),wp.element.createElement("div",{className:"output-item",key:a},wp.element.createElement("div",{className:"output-actions"},wp.element.createElement(ae,{value:(0,o.isString)(f)?f:_}),((0,o.isUndefined)(rankMath.currentEditor)||(0,o.includes)(["gutenberg","classic","elementor"],rankMath.currentEditor)||g)&&!l&&wp.element.createElement(m.Button,{variant:"secondary",className:"button structured-data-test is-small",onClick:function(){var e=!1;if(!l){if("SEO_Title"===c||"SEO_Meta"===c&&!(0,o.isEmpty)(t.title)){var n=(0,o.isUndefined)(t.title)?t:t.title;(0,u.dispatch)("rank-math").updateSerpTitle(n),(0,u.dispatch)("rank-math").updateTitle(n),e=!0}if("SEO_Description"===c||"SEO_Meta"===c&&!(0,o.isEmpty)(t.description)){var a=(0,o.isUndefined)(t.description)?t:t.description;(0,u.dispatch)("rank-math").updateSerpDescription(a),(0,u.dispatch)("rank-math").updateDescription(a),e=!0}if("Opengraph"===c){var r="twitter"===wp.data.select("rank-math").getSocialTab();(0,o.isEmpty)(t.title)||(r?(0,u.dispatch)("rank-math").updateTwitterTitle(t.title):(0,u.dispatch)("rank-math").updateFacebookTitle(t.title),e=!0),(0,o.isEmpty)(t.description)||(r?(0,u.dispatch)("rank-math").updateTwitterDescription(t.description):(0,u.dispatch)("rank-math").updateFacebookDescription(t.description),e=!0)}}e?i()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click"):function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(e=$(e),"elementor"===rankMath.currentEditor)return Z(e,!1),void i()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click");if("classic"===rankMath.currentEditor)return tinymce.activeEditor.insertContent(" "+e),void i()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click");var n=(0,u.select)("core/block-editor").getSelectedBlock(),a=(0,u.select)("core/block-editor").getBlocks(),r=0;(0,o.isNull)(n)?r=a.length:(r=a.map((function(e){return e.clientId===n.clientId})).indexOf(!0),r=n.attributes.content?r+1:r);var s="";s="Frequently_Asked_Questions"===t?(0,F.createBlock)("rank-math/faq-block",{questions:(0,o.map)(e,(function(e){return{id:Q("faq-question"),title:e.question,content:e.answer.replaceAll(/(?:\r\n|\r|\n)/g,"<br>").trim(),visible:!0}}))}):(0,F.rawHandler)({HTML:e,mode:"BLOCKS"}).map((function(e){return(0,F.createBlock)(e.name,e.attributes,e.innerBlocks)})),(0,u.dispatch)("core/block-editor").insertBlocks(s,r),i()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click")}(t,c)}},wp.element.createElement("i",{className:"rm-icon rm-icon-plus"}),wp.element.createElement("span",null,(0,s.__)("Insert","rank-math")))),wp.element.createElement(J,{value:_,addTypingEffect:p}))},ie=function(e){var t=e.value;return wp.element.createElement("div",{className:"content-ai-error",dangerouslySetInnerHTML:{__html:t}})},oe=function(e,t,n){var a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(!(0,o.isEmpty)(e)){if((0,o.isObject)(e)&&!(0,o.isArray)(e)){var i="";return(0,o.forEach)(Object.keys(e),(function(t){var n="";(0,o.forEach)(e[t],(function(e){n+=e+"<br /><br />"})),i+="<div><h4>"+(0,o.startCase)(t)+"</h4>"+n+"</div>"})),wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement(re,{value:i,isPage:t,endpoint:n,typingEffect:a,isSerpPreview:r}))}return(0,o.isArray)(e)?wp.element.createElement("div",{className:"inner-wrapper"},"Frequently_Asked_Questions"!==n&&(0,o.map)(e,(function(e,i){return(0,o.isEmpty)(e.warning)?wp.element.createElement(re,{value:e,key:i,index:i,isPage:t,endpoint:n,typingEffect:a,isSerpPreview:r}):wp.element.createElement(ie,{value:'<div class="notice notice-error">'+e.warning+"</div>"})})),"Frequently_Asked_Questions"===n&&!(0,o.isArray)(e[0])&&wp.element.createElement(re,{value:e,isPage:t,endpoint:n,typingEffect:a,isSerpPreview:r}),"Frequently_Asked_Questions"===n&&(0,o.isArray)(e[0])&&(0,o.map)(e,(function(e){return wp.element.createElement(re,{value:e,isPage:t,endpoint:n,typingEffect:a,isSerpPreview:r})}))):(0,o.isArray)(e)||(0,o.isObject)(e)?void 0:wp.element.createElement(ie,{value:e})}},se=function(e){return e&&e(""),(0,o.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))||(document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.querySelector(".rank-math-contentai-modal-overlay").remove(),document.body.classList.remove("modal-open")),!0},le=function(e){var t=e.title,n=e.helpLink,a=(0,s.sprintf)((0,s.__)("Learn how to use this %s Tool effectively.","rank-math"),"<strong>".concat(t,"</strong>")),r=(0,o.includes)(n,"play-video");return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{key:"title",className:"rank-math-video-tutorial"},wp.element.createElement("div",{className:"info"},wp.element.createElement("p",null,wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:a}})),wp.element.createElement("a",{className:r?"":"button button-primary is-red",href:n,target:"_blank",rel:"noreferrer"},r&&wp.element.createElement("span",{className:"rm-icon-youtube"}),!r&&(0,s.__)("Click Here","rank-math")))),wp.element.createElement("p",null,wp.element.createElement("em",null,(0,s.__)("1 Word Output = 1 Credit","rank-math"))))},ce=React;function ue(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function de(e,t){let n,a,r=[];for(let i=0;i<e.length;i++){const o=e[i];if("string"!==o.type){if(void 0===t[o.value])throw new Error(`Invalid interpolation, missing component node: \`${o.value}\``);if("object"!=typeof t[o.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${o.value}\``);if("componentClose"===o.type)throw new Error(`Missing opening component token: \`${o.value}\``);if("componentOpen"===o.type){n=t[o.value],a=i;break}r.push(t[o.value])}else r.push(o.value)}if(n){const i=function(e,t){const n=t[e];let a=0;for(let r=e+1;r<t.length;r++){const e=t[r];if(e.value===n.value){if("componentOpen"===e.type){a++;continue}if("componentClose"===e.type){if(0===a)return r;a--}}}throw new Error("Missing closing component token `"+n.value+"`")}(a,e),o=de(e.slice(a+1,i),t),s=(0,ce.cloneElement)(n,{},o);if(r.push(s),i<e.length-1){const n=de(e.slice(i+1),t);r=r.concat(n)}}return r=r.filter(Boolean),0===r.length?null:1===r.length?r[0]:(0,ce.createElement)(ce.Fragment,null,...r)}function me(e){const{mixedString:t,components:n,throwErrors:a}=e;if(!n)return t;if("object"!=typeof n){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const r=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(ue)}(t);try{return de(r,n)}catch(e){if(a)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}var pe=function(e){var t=e.tags,n=e.components,a=e.children;return n=n||{},!1===(0,o.isUndefined)(t)&&(t=t.split(",")).forEach((function(e){var t=e;n[e]=wp.element.createElement(t,null)})),me({mixedString:a,components:n})},he=function(e,t){"free"===rankMath.contentAIPlan&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,o.includes)(e,"?")||(e+="?"),e+n.toString()},ge=function(e){var t=e.width,n=void 0===t?40:t,a=e.showProNotice,r=void 0!==a&&a,i=e.isBulkEdit,o=void 0!==i&&i,l=e.isResearch,c=void 0!==l&&l,u=e.creditsRequired,d=void 0===u?0:u;if(r)return function(e){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,s.__)("ðŸ”’ This is a PRO-Only Feature","rank-math")),wp.element.createElement("p",null,(0,s.__)("We are sorry but this feature is only available to Rank Math PRO/Business/Agency Users. Unlock this feature and many more by getting a Rank Math plan.","rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Bulk Edit SEO Tags","rank-math")),wp.element.createElement("li",null,(0,s.__)("Advanced Google Analytics 4 Integration","rank-math")),wp.element.createElement("li",null,(0,s.__)("Keyword Rank Tracker","rank-math")),wp.element.createElement("li",null,(0,s.__)("Free Content AI Trial","rank-math")),wp.element.createElement("li",null,(0,s.__)("SEO Performance Email Reports","rank-math"))),wp.element.createElement(m.Button,{href:rankMath.links.pro,target:"_blank",className:"button button-primary is-green"},(0,s.__)("Learn More","rank-math"))))}(n);var p=rankMath.isUserRegistered,h=rankMath.contentAIPlan,g="free"===h,f=rankMath.contentAICredits>d,_=rankMath.contentAiMigrating;if(f&&c&&!g&&rankMath.contentAICredits<500&&(f=!1),p&&h&&f&&!_&&!g)return null;var b,v="width-"+n;return!p||!h||f&&g?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+v},wp.element.createElement("h3",null,(0,s.__)("ðŸš€ Supercharge Your Content With AI","rank-math")),wp.element.createElement("p",null,!p&&!o&&(0,s.__)("Start using Content AI by connecting your RankMath.com Account","rank-math"),p&&!h&&!o&&!g&&(0,s.__)("To access this Content AI feature, you need to have an active subscription plan.","rank-math"),p&&!o&&g&&(0,s.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","rank-math"),o&&(0,s.__)("You are one step away from unlocking this premium feature along with many more.","rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Bulk Update Your SEO Meta using AI","rank-math")),wp.element.createElement("li",null,(0,s.__)("Get Access to 40+ AI SEO Tools","rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Expert-Written Prompts","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Content Research","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click WooCommerce Product Descriptions","rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","rank-math")),wp.element.createElement("li",null,(0,s.__)("On-Page SEO Suggestions","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Bulk SEO Meta","rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","rank-math")),wp.element.createElement("li",null,(0,s.__)("Multiple RankBot Sessions","rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click SEO Content","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click SEO Meta","rank-math")),wp.element.createElement("li",null,(0,s.__)("40+ Specialized AI Tools","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","rank-math")),wp.element.createElement("li",null,(0,s.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","rank-math")),wp.element.createElement("li",null,(0,s.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","rank-math")))}(n,o,g),!p&&wp.element.createElement(m.Button,{href:rankMath.connectSiteUrl,className:"button button-primary is-green"},(0,s.__)("Connect Now","rank-math")),p&&(!h||g)&&wp.element.createElement(m.Button,{href:he(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button"),className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","rank-math")))):_?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+v},wp.element.createElement("h3",null,(0,s.__)("Server Maintenance Underway","rank-math")),wp.element.createElement("p",null,(0,s.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,s.__)("reach out to the support team.","rank-math")),(0,s.__)(" We are sorry for the inconvenience.","rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+v},wp.element.createElement("h3",null,(0,s.__)("â›”ï¸� Content AI Credit Alert!","rank-math")),wp.element.createElement("p",null,(b=rankMath.contentAIRefreshDate?rankMath.contentAIRefreshDate:"")?wp.element.createElement(pe,{components:{strong:wp.element.createElement("strong",null)}},(0,s.sprintf)((0,s.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","rank-math"),"{{strong}}"+b+"{{/strong}}")):(0,s.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","rank-math")),wp.element.createElement(m.Button,{href:he(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button"),className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","rank-math")),wp.element.createElement(m.Button,{variant:"link",href:he(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button"),className:"button button-secondary",target:"_blank"},(0,s.__)("Missing Credits?","rank-math"))))},fe=function(){return!rankMath.isUserRegistered||!rankMath.contentAIPlan||!rankMath.contentAICredits||rankMath.contentAiMigrating};function _e(e){return _e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_e(e)}function be(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function ve(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_e(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==_e(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_e(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e){return function(e){if(Array.isArray(e))return Ee(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ye(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||ye(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ye(e,t){if(e){if("string"==typeof e)return Ee(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ee(e,t):void 0}}function Ee(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var xe=function(e){var t,n=e.data,a=e.setEndpoint,r=void 0!==a&&a,l=e.isPage,d=void 0!==l&&l,p=e.setCredits,h=void 0!==p&&p,g=e.callApi,f=void 0!==g&&g,_=n.endpoint,b=n.title,v=n.params,w=n.icon,k=n.output,y=n.helpLink,E=ke((0,c.useState)(L(v,k)),2),x=E[0],T=E[1],S=ke((0,c.useState)(),2),C=S[0],A=S[1],P=ke((0,c.useState)(),2),O=P[0],N=P[1],M=ke((0,c.useState)(!1),2),R=M[0],j=M[1],q=ke((0,c.useState)([]),2),D=q[0],z=q[1],H=ke((0,c.useState)([]),2),F=H[0],V=H[1],W=function(e){return(0,o.compact)((0,o.map)(rankMath.contentAIHistory,(function(t){if(t.key===e)return t.output})))}(_);(0,c.useEffect)((function(){if((0,o.isArray)(D)&&"Frequently_Asked_Questions"!==_){(0,o.isString)(F)&&V("");for(var e=0,t=function(t){if(t>0){var n=(0,o.isObject)(D[t-1])?Object.values(D[t-1]).join(" "):D[t-1];e+=110*n.split(" ").length}setTimeout((function(){return V((function(e){return[].concat(we(e),[D[t]])}))}),e)},n=0;n<=D.length-1;n++)t(n)}else V(D)}),[D]),(0,c.useEffect)((function(){f&&(A(!0),N(!0),j(!1),B(_,x,U,!1,h))}),[]);var U=function(e){(0,o.isEmpty)(e.error)?z(e.faqs?e.faqs:e):z('<div class="notice notice-error">'+e.error+"</div>"),A(!1),N(!1)},$=(0,c.useCallback)((function(e,t){x[e]=t,T(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach((function(t){ve(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},x)),(0,u.dispatch)("rank-math-content-ai").updateAIAttributes(e,t),setTimeout((function(){N(i()("form.rank-math-ai-tools").find(".limit-reached").length)}),500)}),[]);return wp.element.createElement(m.Modal,{className:"rank-math-contentai-modal rank-math-modal",overlayClassName:"rank-math-modal-overlay rank-math-contentai-modal-overlay",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:w})," ",b),shouldCloseOnClickOutside:!0,onRequestClose:function(e){return function(e,t,n,a){if((0,o.isNull)((0,u.dispatch)("rank-math"))||(0,u.dispatch)("rank-math-content-ai").isAutoCompleterOpen(!1),!(0,o.isUndefined)(e)){if("blur"===e.type){if(!(0,o.includes)(e.target.classList,"rank-math-contentai-modal"))return!1;var r=!0;return(0,o.forEach)(t,(function(e,t){e.isRequired&&!(0,o.isEmpty)(n[t])&&(r=!1)})),!!r&&se(a)}return"Escape"!==e.key||(0,o.isNull)(document.querySelector(".tagify__dropdown"))?se(a):(document.querySelector(".tagify__dropdown").remove(),!1)}}(e,v,x,r)}},wp.element.createElement("div",{className:fe()?"columns column-body blurred":"columns column-body"},wp.element.createElement("div",{className:"column column-input"},wp.element.createElement("div",{className:"column-inner"},I(v,x,_,$),wp.element.createElement("p",{className:"required-fields"},wp.element.createElement("i",null,wp.element.createElement("span",null,"*")," ",(0,s.__)("Required fields.","rank-math")))),wp.element.createElement("div",{className:"footer"},wp.element.createElement(m.__experimentalNumberControl,{min:"1",max:k.max,value:null!==(t=x.choices)&&void 0!==t?t:k.default,onChange:function(e){return $("choices",e)}}),wp.element.createElement("span",{className:"output-label"},(0,s.__)("Outputs","rank-math")),wp.element.createElement(m.Button,{className:"button button-primary",disabled:O,onClick:function(){var e=i()("form.rank-math-ai-tools").get(0);e.checkValidity()?(A(!0),N(!0),j(!1),B(_,x,U,!1,h)):e.reportValidity()}},wp.element.createElement("span",{className:"text"},C?(0,s.__)("Generatingâ€¦","rank-math"):(0,o.isEmpty)(D)?(0,s.__)("Generate","rank-math"):(0,s.__)("Generate More","rank-math"))))),wp.element.createElement("div",{className:"column column-output"},wp.element.createElement("div",{className:"column-output-heading"},wp.element.createElement("h3",null,wp.element.createElement("span",null,(0,s.__)("Output","rank-math"))),!(0,o.isEmpty)(W)&&wp.element.createElement(m.Button,{className:"button button-secondary button-small output-history",onClick:function(){j(!R)}},(0,s.__)("History","rank-math"))),C&&wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("div",{className:"output-item loading"},wp.element.createElement("div",{className:"rank-math-loader"}))),!C&&!R&&(0,o.isEmpty)(D)&&wp.element.createElement(React.Fragment,null,wp.element.createElement("p",{style:{fontSize:"1rem",marginTop:0}},(0,s.__)("Suggestions will appear here.","rank-math")),y&&wp.element.createElement(le,{helpLink:y,title:b})),!R&&oe(F,d,_,!0,f),!C&&R&&oe((0,o.reverse)(W),d,_,!1,f),!R&&f&&!C&&wp.element.createElement("div",{className:"notice notice-info",dangerouslySetInnerHTML:{__html:(0,s.sprintf)((0,s.__)("%s to access all the Content AI tools","rank-math"),'<a href="'+rankMath.adminurl+'?page=rank-math-content-ai-page#ai-tools" target="_blank">'+(0,s.__)("Click here","rank-math")+"</a>")}}))),fe()&&wp.element.createElement(ge,{width:60}))},Te=function(e){var t=e.search,n=e.setSearch,a=(0,c.useCallback)((function(e){var t=i()(".rank-math-content-ai-search-field input"),n=document.activeElement;if("/"===e.key&&t.length&&n!==t[0]&&(0,o.includes)(["BODY","DIV","BUTTON","SPAN"],n.tagName))return e.preventDefault(),t.trigger("focus"),!1}),[]);return(0,c.useEffect)((function(){return window.addEventListener("keydown",a),function(){window.removeEventListener("keydown",a)}}),[a]),wp.element.createElement("div",{className:"search-field"},wp.element.createElement(m.SearchControl,{value:t,className:"rank-math-content-ai-search-field",onChange:function(e){n(e)}}))},Se=function(){return wp.element.createElement(pe,{components:{strong:wp.element.createElement("strong",null)}},(0,s.__)("Thank you for choosing Rank Math! {{strong}}Enjoy 750 Credits monthly for life{{/strong}} as a token of our appreciation! ðŸŽ�","rank-math"))},Ce=function(e){var t=e.isPage,n=void 0!==t&&t,a=e.addNotice,r=void 0===a||a;if(rankMath.contentAIPlan&&"free"===rankMath.contentAIPlan){if(!r)return wp.element.createElement(React.Fragment,null,Se(),wp.element.createElement("br",null));var i=_()("rank-math-content-ai-notice",{"is-page":n});return wp.element.createElement(m.Notice,{status:n?"success":"warning",className:i,isDismissible:!1},Se())}};function Ae(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Pe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Pe(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var Oe=function(e){var t=e.showMinimal,n=void 0!==t&&t,a=e.isPage,r=void 0!==a&&a,i=e.setCredits,l=void 0!==i&&i,u=e.hasContentAiError,d=void 0!==u&&u,p=Ae((0,c.useState)("all"),2),h=p[0],f=p[1],_=Ae((0,c.useState)(),2),b=_[0],v=_[1],w=Ae((0,c.useState)(),2),k=w[0],y=w[1],E={all:(0,s.__)("All","rank-math"),seo:(0,s.__)("SEO","rank-math"),blog:(0,s.__)("Blog","rank-math"),"marketing-sales":(0,s.__)("Marketing & Sales","rank-math"),ecommerce:(0,s.__)("eCommerce","rank-math"),misc:(0,s.__)("Misc","rank-math")};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:d?"rank-math-ui module-listing blurred":"rank-math-ui module-listing"},!r&&wp.element.createElement(Ce,null),wp.element.createElement("div",{className:"content-ai-header"},wp.element.createElement("div",{className:"content-ai-filter"},!r&&wp.element.createElement(m.SelectControl,{options:(0,o.map)(E,(function(e,t){return{value:t,label:e}})),onChange:function(e){return f(e)}}),!n&&r&&wp.element.createElement("div",null,(0,o.map)(E,(function(e,t){return wp.element.createElement(m.Button,{className:h===t?"active":"",key:t,onClick:function(){return f(t)}},e)}))),wp.element.createElement(Te,{search:b,setSearch:v}))),wp.element.createElement("div",{className:"grid"},(0,o.map)(g(),(function(e,t){if(("all"===h||h===e.category)&&(!b||(0,o.lowerCase)(e.title).includes((0,o.lowerCase)(b))||(0,o.lowerCase)(e.endpoint).includes((0,o.lowerCase)(b))))return wp.element.createElement(m.Button,{key:t,className:"rank-math-box",onClick:function(){y(e)}},wp.element.createElement("i",{className:e.endpoint+" ai-icon "+e.icon}),wp.element.createElement("header",null,wp.element.createElement("h3",null,e.title),!n&&wp.element.createElement("p",null,e.description)))}))),k&&wp.element.createElement(xe,{data:k,setEndpoint:y,isPage:r,setCredits:l})),d&&wp.element.createElement(ge,null))},Ie=function(){var e=(0,u.select)("core/block-editor").getSelectedBlock(),t=(0,u.select)("core/block-editor").getBlocks();if(!(0,o.isEmpty)(e)){var n=t.map((function(t){return t.clientId===e.clientId})).indexOf(!0)+1;return{block:e,position:n,clientId:e.clientId}}if((0,o.isEmpty)(t))return{block:[],position:0};var a=t[t.length-1];return{block:a,position:t.length,clientId:a.clientId}},Ne=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=800-e,n=[];if("elementor"===rankMath.currentEditor){var a,r=elementor.$preview[0].contentWindow.document;r.getElementsByClassName("elementor-element-editable");a=r.getElementsByClassName("elementor-widget-container");var s=Array.from(a),l=!1;return(0,o.forEach)(s.reverse(),(function(a){if(e>=800)return!1;if(a.innerText){i()(a).parents(".elementor-element-editable").length&&(i()(r).find(".rank-math-active").removeClass("rank-math-active"),i()(a).addClass("rank-math-active"),l=!0),l||(i()(a).addClass("rank-math-active"),l=!0);var s=a.querySelectorAll("*"),c=Array.from(s);(0,o.forEach)(c.reverse(),(function(a){if(e>=600)return!1;var r=(0,o.includes)(["h1","h2","h3","h4","h5","h6"],a.localName)?"Heading: "+a.innerText:a.innerText;if(r&&!(0,o.includes)(["div","b","i","u","em"],a.localName))if(r.length<=t)n.push(r),e+=r.length,t-=r.length;else{var i=r.match(/[^\.!\?]+[\.!\?]+/g);(0,o.forEach)(i.reverse(),(function(a){e<600&&(n.push(a),e+=a.length,t-=a.length)}))}}))}})),$(n.reverse().join("\n\n"),!0)}if("undefined"!=typeof tinymce&&null!==tinymce.activeEditor&&!0!==tinymce.activeEditor.isHidden()&&"content"===tinymce.activeEditor.id){var c=tinyMCE.activeEditor.selection.getSelectedBlocks();return(0,o.forEach)(c.reverse(),(function(a){if(e>=800)return!1;var r=(0,o.includes)(["h1","h2","h3","h4","h5","h6"],a.localName)?"<"+a.localName+">"+a.innerText+"</"+a.localName+">":a.innerHTML;if(r.length<=t)n.push(r),e+=r.length,t-=r.length;else{var i=r.match(/[^\.!\?]+[\.!\?]+/g);(0,o.forEach)(i.reverse(),(function(a){e<800&&(n.push(a),e+=a.length,t-=a.length)}))}})),$(n.reverse().join("\n\n"),!0)}var d=Ie();if((0,o.isEmpty)(d.block))return"";var m=d.clientId,p=[];return(0,o.forEach)((0,u.select)("core/block-editor").getBlocks(),(function(e){if("rank-math/command"!==e.name&&p.push(e),e.clientId===m)return!1})),(0,o.forEach)(p.reverse(),(function(a){if(e>=800)return!1;if(!(0,o.isUndefined)(a.attributes.content)){var r="core/heading"===a.name?"<h"+a.attributes.level+">"+a.attributes.content+"</h"+a.attributes.level+">":"<p>"+a.attributes.content+"</p>";if(r.length<=t)n.push(r),e+=r.length,t-=r.length;else{var i=r.match(/[^\.!\?]+[\.!\?]+/g);(0,o.isEmpty)(i)||(0,o.forEach)(i.reverse(),(function(a){e<800&&(n.push(a),e+=a.length,t-=a.length)}))}}})),$(n.reverse().join("\n\n"),!0)},Me=wp.blockEditor,Re=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";a&&(0,u.dispatch)("core/block-editor").updateBlockAttributes(t,{content:a});var r=G();r.onmessage=function(e){var a=e.data;if(a)if("classic"!==rankMath.currentEditor){if(t){var r,o,s,l=(0,u.select)("core/block-editor").getBlock(t),c="<br>"===a,d=l.attributes.content;if("rank_math_process_complete"!==a)d?d+="<br>"===a||c?a:" "+a:d=a,(0,u.dispatch)("core/block-editor").updateBlockAttributes(l.clientId,{content:d}),r=document.getElementById("block-"+l.clientId),o=getSelection(),s=document.createRange(),o.removeAllRanges(),s.selectNodeContents(r),s.collapse(!1),o.addRange(s);else n&&((0,u.dispatch)("core/block-editor").updateBlockAttributes(l.clientId,{content:d+n,className:""}),setTimeout((function(){i()(".rank-math-content-ai-command-buttons .rank-math-content-ai-use").trigger("focus")}),100))}}else tinymce.activeEditor.insertContent("rank_math_process_complete"!==a?" "+a:"")},r.postMessage(e)},je=(0,s.__)("Generatingâ€¦","rank-math"),qe=(0,u.dispatch)(Me.store),De=qe.updateBlockAttributes,Be=qe.removeBlock,Le='<div class="rank-math-content-ai-command-buttons">'+('<button class="button button-small rank-math-content-ai-use" tabindex="0"><span contenteditable="false">'+(0,s.__)("Use","rank-math")+"</span></button>")+('<button class="button button-small rank-math-content-ai-regenerate" tabindex="0"><span contenteditable="false">'+(0,s.__)("Regenerate","rank-math")+"</span></button>")+('<button class="button button-small rank-math-content-ai-write-more" tabindex="0"><span contenteditable="false">'+(0,s.__)("Write More","rank-math")+"</span></button>")+"</div>",ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";B(e,t,(function(e){if(e.error){var t='<div class="rank-math-content-ai-command-buttons"><button class="button button-small rank-math-content-ai-dismiss" contenteditable="false" contenteditable="true">'+(0,s.__)("Dismiss","rank-math")+"</button></div>";De(n,{content:e.error+t,className:"rank-math-content-ai-command",isAiGenerated:!0})}else e=(0,o.isArray)(e)?e[0]:e,(0,o.isNull)(n)?Re(e):(De(n,{content:"",className:"rank-math-content-ai-command typing",isAiGenerated:!0}),Re(e,n,Le,a))}))},He=function(){var e=(0,u.select)("core/block-editor").getSelectedBlock(),t=e.attributes.content.replace(/<div .*<\/div>/g,"").replaceAll("  ",""),n=(0,F.rawHandler)({HTML:t,mode:"BLOCKS"}).map((function(e){return(0,F.createBlock)(e.name,e.attributes,e.innerBlocks)}));if(e.attributes.replaceBlock)return(0,u.dispatch)("core/block-editor").replaceBlock(e.attributes.selectedId,n),void Be(e.clientId);(0,u.dispatch)("core/block-editor").replaceBlock(e.clientId,n)},Fe=function(){var e=(0,u.select)("core/block-editor").getSelectedBlock(),t=e.clientId,n=e.attributes.endpoint,a=e.attributes.params;De(t,{content:je}),ze(n,a,t)},Ve=function(e){if(800===e.length)return e;if(e.length>800){var t=0,n=[],a=e.match(/[^\.!\?]+[\.!\?]+/g);return(0,o.isEmpty)(a)||(0,o.forEach)(a.reverse(),(function(e){t<800&&(n.push(e),t+=e.length)})),n.reverse().join(" ")}return Ne(e.length)+"\n"+e},We=function(){var e=(0,u.select)("core/block-editor").getSelectedBlock(),t=e.clientId,n=e.attributes.content.replace(/<div .*<\/div>/g,"").replace("<br>","").replaceAll("  ","");De(t,{content:n+""+je}),ze("Continue_Writing",{sentence:Ve(n),choices:1},t,n)};i()(document).on("click",".rank-math-content-ai-dismiss",(function(){var e=(0,u.select)("core/block-editor").getSelectedBlock();Be(e.clientId)})),i()(document).on("keydown",".rank-math-content-ai-use",(function(e){"Enter"===e.code&&He()})),i()(document).on("click",".rank-math-content-ai-use",(function(){He()})),i()(document).on("keydown",".rank-math-content-ai-regenerate",(function(e){"Enter"===e.code&&Fe()})),i()(document).on("click",".rank-math-content-ai-regenerate",(function(){Fe()})),i()(document).on("keydown",".rank-math-content-ai-write-more",(function(e){"Enter"===e.code&&We()})),i()(document).on("click",".rank-math-content-ai-write-more",(function(){We()}));var Ue=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3?arguments[3]:void 0,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];(0,o.isNull)(n)||De(n,{content:(0,s.__)("Generatingâ€¦","rank-math"),className:"typing rank-math-content-ai-command",endpoint:e,params:t,replaceBlock:r,selectedId:a}),ze(e,t,n)},Ge=function(){return!((0,o.isNil)(window.wp)||(0,o.isNil)(wp.data)||(0,o.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,o.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))};function Ke(e){return Ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ke(e)}function Ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function Je(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ke(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==Ke(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ke(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Qe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Xe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xe(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var Ze=function(e){var t=e.hasContentAiError,n=void 0!==t&&t,a=Qe((0,c.useState)({document_title:"undefined"!=typeof rankMathEditor?rankMathEditor.assessor.dataCollector.getData().title:"",text:"",instructions:"",tone:rankMath.ca_tone,focus_keyword:[],length:"medium",choices:1}),2),r=a[0],i=a[1],l=Qe((0,c.useState)(!1),2),d=l[0],p=l[1],h=Ge()||rankMath.isContentAIPage;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:n?"rank-math-ui module-listing blurred":"rank-math-ui module-listing"},wp.element.createElement("div",{className:"rank-math-focus-keyword"},wp.element.createElement(m.Notice,{status:"warning",isDismissible:!1},wp.element.createElement(Ce,{addNotice:!1}),wp.element.createElement(pe,{components:{link:wp.element.createElement("a",{href:"https://rankmath.com/kb/content-ai-editor/?utm_source=Plugin&utm_medium=Write+Tab+Notice&utm_campaign=WP#write-tab",target:"_blank",rel:"noopener noreferrer"})}},(0,s.__)("{{link}}Click here{{/link}} to learn how to use it.","rank-math")))),I({instructions:{isRequired:!1},tone:{isRequired:!1},focus_keyword:{isRequired:!1},length:{isRequired:!0}},r,"Write",(function(e,t){r[e]=t,i(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ye(Object(n),!0).forEach((function(t){Je(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ye(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},r)),(0,u.dispatch)("rank-math-content-ai").updateAIAttributes(e,t)})),wp.element.createElement(m.Button,{className:"write-button is-primary",onClick:function(){if(r.text=Ne(),i(r),!h)return p(!0),void B("Write",r,(function(e){var t=(0,o.isArray)(e)?e[0]:e;"elementor"===rankMath.currentEditor?Z(t):Re(t),p(!1)}));var e=Ie();if((0,o.isEmpty)(e)||(0,o.isEmpty)(e.block)||!(0,o.isEmpty)(e.block.attributes.content)){var t=(0,F.createBlock)("rank-math/command",{content:""});(0,u.dispatch)("core/block-editor").insertBlocks(t,(0,o.isEmpty)(e)?1:e.position),e=t}else{var n=(0,F.createBlock)("rank-math/command",{content:"",className:"rank-math-content-ai-command"});(0,u.dispatch)("core/block-editor").replaceBlock(e.clientId,n),e=n}Ue("Write",r,e.clientId)}},wp.element.createElement(React.Fragment,null,d?(0,s.__)("Generatingâ€¦","rank-math"):(0,s.__)("Generate","rank-math"),h&&wp.element.createElement("span",null,"CTRL + /"))),wp.element.createElement("p",{style:{marginTop:"10px",opacity:"0.7"}},wp.element.createElement("em",null,(0,s.__)("1 Word Output = 1 Credit","rank-math")))),n&&wp.element.createElement(ge,null))};function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}function tt(e){return function(e){if(Array.isArray(e))return st(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ot(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function at(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?nt(Object(n),!0).forEach((function(t){rt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function rt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==et(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==et(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===et(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function it(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||ot(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ot(e,t){if(e){if("string"==typeof e)return st(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?st(e,t):void 0}}function st(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var lt={all:(0,s.__)("All","rank-math"),recent:(0,s.__)("Recent","rank-math"),custom:(0,s.__)("Custom +","rank-math"),seo:(0,s.__)("SEO","rank-math"),blog:(0,s.__)("Blog","rank-math"),"marketing-sales":(0,s.__)("Marketing & Sales","rank-math"),ecommerce:(0,s.__)("eCommerce","rank-math"),misc:(0,s.__)("Misc","rank-math")},ct=function(e){var t=e.isOpen,n=e.toggleModal,a=e.setMessage,r=it((0,c.useState)(),2),l=r[0],u=r[1],d=it((0,c.useState)("custom"),2),p=d[0],h=d[1],g=it((0,c.useState)("all"),2),f=g[0],b=g[1],v=it((0,c.useState)(rankMath.contentAIPrompts),2),w=v[0],k=v[1],y=it((0,c.useState)(!1),2),E=y[0],x=y[1],T=it((0,c.useState)(!1),2),S=T[0],C=T[1],A=it((0,c.useState)(!1),2),P=A[0],O=A[1],I=it((0,c.useState)({prompt_name:"",prompt:"",prompt_category:"custom"}),2),N=I[0],R=I[1],j=it((0,c.useState)(!1),2),q=j[0],D=j[1];(0,c.useEffect)((function(){if("recent"!==f||(0,o.isEmpty)(rankMath.contentAIRecentPrompts))if("all"!==f){var e=(0,o.compact)((0,o.map)(rankMath.contentAIPrompts,(function(e){return e.PromptCategory===f&&!(0,o.isUndefined)(e.Prompt)&&e})));k("custom"===f?(0,o.reverse)(e):e)}else k(rankMath.contentAIPrompts);else{var t=(0,o.map)(rankMath.contentAIRecentPrompts,(function(e){return(0,o.find)(rankMath.contentAIPrompts,(function(t){return t.PromptName===e}))}));k(t)}}),[f,E]),(0,c.useEffect)((function(){setTimeout((function(){D(!1)}),5e3)}),[q]);var B="free"===rankMath.contentAIPlan?"blurred":"";return t&&wp.element.createElement(m.Modal,{title:(0,s.__)("Prompts Library","rank-math"),closeButtonLabel:(0,s.__)("Close","rank-math"),shouldCloseOnClickOutside:!1,shouldCloseOnEsc:!0,onRequestClose:function(){return n(!1)},className:"rank-math-contentai-modal rank-math-prompt-modal rank-math-modal",overlayClassName:"rank-math-modal-overlay rank-math-contentai-modal-overlay"},wp.element.createElement("div",{className:B},wp.element.createElement("div",{className:"content-ai-filter"},wp.element.createElement("div",null,(0,o.map)(lt,(function(e,t){var n=_()(t,{active:t===f});return wp.element.createElement(m.Button,{className:n,key:t,onClick:function(){b(t),h(0)}},e)}))),wp.element.createElement(m.Button,{className:"update-library is-secondary is-small",key:"update-library",onClick:function(){O(!0),i().ajax({url:rankMath.contentAiUrl+"default_prompts",type:"GET",success:function(e){O(!1),(0,o.isEmpty)(e)?console.log("No data found"):M()({method:"POST",path:"/rankmath/v1/ca/savePrompts",data:{prompts:e}}).then((function(e){rankMath.contentAIPrompts=e,k(e),h(0)})).catch((function(e){console.log(e)}))},error:function(){console.error("Failed, please try again later"),O(!1)}})}},P?(0,s.__)("Updating...","rank-math"):(0,s.__)("Update Library","rank-math"))),wp.element.createElement("div",{className:"grid"},wp.element.createElement("div",{className:"column column-first"},wp.element.createElement("h3",null,(0,s.__)("Prompt List","rank-math")),!(0,o.isEmpty)(w)&&wp.element.createElement(React.Fragment,null,wp.element.createElement(Te,{search:l,setSearch:u}),wp.element.createElement("div",{className:"prompt-list"},"all"===f&&wp.element.createElement(m.Button,{className:"custom"===p?"prompt-item active":"prompt-item",key:"add-custom",onClick:function(){return h("custom")}},wp.element.createElement("i",null,"ðŸ§ª"),wp.element.createElement("span",null,(0,s.__)("Add Custom Prompt +","rank-math"))),(0,o.map)(w,(function(e,t){if(!((0,o.isUndefined)(e)||(0,o.isUndefined)(e.Prompt)||l&&!(0,o.lowerCase)(e.PromptName).includes((0,o.lowerCase)(l)))){var n=_()("prompt-item "+t,{active:t===p,"custom-prompt":"custom"===e.PromptCategory}),a=_()("delete-prompt",{"rank-math-loader":E===t});return wp.element.createElement(m.Button,{className:n,key:t,onClick:function(){return h(t)}},wp.element.createElement("i",null,e.PromptIcon?e.PromptIcon:"ðŸ–Œï¸�"),wp.element.createElement("span",null,e.PromptName),"custom"===e.PromptCategory&&wp.element.createElement("span",{role:"button",tabIndex:"0",onKeyDown:void 0,className:a,onClick:function(){x(t),M()({method:"POST",path:"/rankmath/v1/ca/updatePrompt",data:{prompt:e.PromptName}}).then((function(e){rankMath.contentAIPrompts=e,k(e),h(0),x(!1)})).catch((function(e){x(!1),console.log(e)}))}},E!==t&&wp.element.createElement("i",{className:"dashicons dashicons-no-alt"})))}}))))),wp.element.createElement("div",{className:"column column-second"},"custom"===p&&"all"===f&&wp.element.createElement("div",{className:"custom-prompt-form"},wp.element.createElement("div",{className:"form-field"},wp.element.createElement(m.TextControl,{label:(0,s.__)("Prompt Name","rank-math"),onChange:function(e){N.prompt_name=e,R(at({},N))},className:q&&!N.prompt_name?"is-required":""})),wp.element.createElement("div",{className:"form-field"},wp.element.createElement("div",{className:N.prompt.length>=2e3?"limit limit-reached":"limit"},wp.element.createElement("span",{className:"count"},N.prompt.length),"/2000"),wp.element.createElement(m.TextareaControl,{label:(0,s.__)("Prompt Text","rank-math"),help:(0,s.__)("Use [brackets] to insert placeholders.","rank-math"),onChange:function(e){N.prompt=e,R(at({},N))},maxLength:"2000",className:q&&!N.prompt?"is-required":""})),wp.element.createElement("div",{className:"form-field"},wp.element.createElement(m.BaseControl,{className:"save-prompt"},wp.element.createElement(m.Button,{variant:"primary",className:"is-large",onClick:function(){if(N.prompt_name&&N.prompt){var e=(0,o.find)(w,(function(e){return e.PromptName===N.prompt_name}));(0,o.isUndefined)(e)?(C(!0),M()({method:"POST",path:"/rankmath/v1/ca/updatePrompt",data:{prompt:{PromptName:N.prompt_name,Prompt:N.prompt,PromptCategory:N.prompt_category}}}).then((function(e){rankMath.contentAIPrompts=e,b("custom"),k(tt(e)),setTimeout((function(){h(0),C(!1)}),300)})).catch((function(e){console.log(e),C(!1)}))):alert("Prompt with this name already exists")}else D(!0)}},S&&wp.element.createElement("span",{className:"rank-math-loader"}),!S&&(0,s.__)("Save Prompt","rank-math"))))),("custom"!==p||"all"!==f)&&!(0,o.isEmpty)(w)&&!(0,o.isEmpty)(w[p])&&wp.element.createElement("div",{className:"prompt-details"},wp.element.createElement("div",{className:"prompt-preview"},wp.element.createElement("h3",null,(0,s.__)("Preview","rank-math")),wp.element.createElement("div",{className:"prompt-preview-content"},wp.element.createElement("p",{dangerouslySetInnerHTML:{__html:(0,o.isUndefined)(w[p].Prompt)?"":w[p].Prompt.replaceAll("[","<span>[").replaceAll("]","]</span>")}}))),wp.element.createElement("div",{className:"form-field"},wp.element.createElement(m.BaseControl,{className:"use-prompt"},wp.element.createElement(m.Button,{variant:"primary",className:"is-large",onClick:function(){M()({method:"POST",path:"/rankmath/v1/ca/updateRecentPrompt",data:{prompt:w[p].PromptName}}).then((function(){rankMath.contentAIRecentPrompts.unshift(w[p].PromptName)})).catch((function(e){console.log(e)})),a(w[p].Prompt.replaceAll("[","<span>[").replaceAll("]","]</span>")),n(!1)}},(0,s.__)("Use Prompt","rank-math")))))))),B&&wp.element.createElement(ge,{width:"60",isResearch:!0}))},ut=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";M()({method:"POST",path:"/rankmath/v1/ca/deleteOutput",data:{isChat:e,index:t}}).catch((function(e){console.log(e)}))};function dt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return mt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var pt=function(e){var t=e.setCredits,n=void 0!==t&&t,a=e.hasContentAiError,r=void 0!==a&&a,l="free"===rankMath.contentAIPlan,u=dt((0,c.useState)(!1),2),d=u[0],p=u[1],h=dt((0,c.useState)(!1),2),g=h[0],f=h[1],b=dt((0,c.useState)(""),2),v=b[0],w=b[1],k=dt((0,c.useState)(rankMath.contentAIChats),2),y=k[0],E=k[1],x=dt((0,c.useState)(l&&y.length?0:""),2),T=x[0],S=x[1],C=rankMath.isContentAIPage;l&&y.length&&(0,o.isUndefined)(wp.blocks.getBlockType("core/paragraph"))&&wp.blockLibrary.registerCoreBlocks(),(0,c.useEffect)((function(){i()(".chat-input span").on("click",(function(e){if(window.getSelection&&document.createRange){var t=window.getSelection();""===t.toString()&&window.setTimeout((function(){var n=e.target,a=document.createRange();a.selectNodeContents(n),t.removeAllRanges(),t.addRange(a)}),1)}}))}),[v]);var A,P=["How do backlinks affect SEO?","Why is keyword research important for SEO?","What are some effective SEO strategies for small businesses?","Can you explain the difference between on-page and off-page SEO?","List trending topics in [Industry] that I should write about.","How can I optimize my website for local search queries?","What are some effective strategies for managing [product/service description] reputation on social media?","Develop a content strategy for [product/service description] to increase organic search traffic."],O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];w(""),f(!0),""===T&&S(0);var a=""===T,r=""!==T?T:rankMath.contentAIChats.length,i=(0,o.isEmpty)(y[r])?[]:y[r];t||i.unshift({role:"user",content:e||v}),a?y.unshift(i):y[r]=i,E(y),setTimeout((function(){B("Chat",{messages:(0,o.reverse)(i),session:r,isNew:a,regenerate:t,site_type:"ecommerce",site_name:rankMath.blogName,language:rankMath.ca_language,choices:1},(function(e){(0,o.reverse)(i),e&&i.unshift({role:"assistant",content:e[0],isNew:!0}),f(!1)}),!0,n)}),100)};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:r?"blurred":""},wp.element.createElement("div",{className:"tab-header"},wp.element.createElement("span",{className:"tab-header-title"},wp.element.createElement("i",{className:"rm-icon rm-icon-bot"})," RankBot ",wp.element.createElement("span",null,"- ",(0,s.__)("Your Personal Assistant","rank-math"))),wp.element.createElement("a",{href:"https://rankmath.com/kb/how-to-use-rankbot-ai-tool/?play-video=OBxuy8u0eCY&utm_source=Plugin&utm_medium=RankBot+Tab&utm_campaign=WP",rel:"noreferrer",target:"_blank",title:(0,s.__)("Know more about RankBot","rank-math")},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help rank-math-tooltip"})),!C&&""!==T&&wp.element.createElement(m.Button,{className:"clear-history is-small button-link-delete",onClick:function(){y.splice(T,1),E(y),ut(!0,T),setTimeout((function(){S("")}),10)}},(0,s.__)("Delete Session","rank-math"))),!C&&wp.element.createElement(Ce,null),wp.element.createElement("div",{className:"rank-math-content-chat-page"},!(0,o.isEmpty)(y)&&wp.element.createElement("div",{className:"chat-sidebar"},wp.element.createElement("div",{className:"chat-sidebar-content"},!C&&wp.element.createElement(m.SelectControl,{value:T,options:(A=[],l&&y.length||A.push({label:(0,s.__)("New Chat","rank-math"),value:""}),(0,o.map)(y,(function(e,t){A.push({label:e[0].content.replace(/(<([^>]+)>)/gi,"").split(/\s+/).slice(0,8).join(" ")+"...",value:t})})),A),onChange:function(e){S(e)}}),C&&!l&&wp.element.createElement(m.Button,{className:_()("history-button button new-chat",{active:""===T}),onClick:function(){S("")}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"})," ",(0,s.__)("New Chat","rank-math")),C&&(0,o.map)(y,(function(e,t){var n=e.length>2?e[e.length-2].content:e[0].content;return wp.element.createElement("div",{role:"button",tabIndex:"0",className:_()("history-button button",{active:T===t}),key:t,onClick:function(){S(t)},onKeyDown:void 0},wp.element.createElement("i",{className:"rm-icon rm-icon-comments"}),n.split(/\s+/).slice(0,8).join(" ")+"...",wp.element.createElement(m.Button,{className:"delete-session",onClick:function(){y.splice(t,1),E(y),ut(!0,t),setTimeout((function(){S("")}),10)},title:(0,s.__)("Delete Session","rank-math")},wp.element.createElement("i",{className:"dashicons dashicons-no-alt"})))})),C&&l&&wp.element.createElement(m.Button,{className:"button is-green",href:"https://rankmath.com/content-ai/#pricing",target:"_blank"},(0,s.__)("Buy PRO plan for Multiple Sessions","rank-math")))),wp.element.createElement("div",{className:"chat-container"},wp.element.createElement("div",{className:"chat-messages"},g&&wp.element.createElement("div",{className:"chat-message loading"},wp.element.createElement("div",{className:"rank-math-loader"})),""===T&&wp.element.createElement((function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"prompt-examples"},wp.element.createElement("h2",null,(0,s.__)("Examples","rank-math")),wp.element.createElement("p",null,(0,s.__)("Here are some examples of questions you can ask RankBot","rank-math")),wp.element.createElement("div",{className:"grid"},(0,o.map)(P,(function(e,t){return wp.element.createElement("div",{role:"button",tabIndex:"0",onClick:function(){w(e.replaceAll("[","<span>[").replaceAll("]","]</span>"))},key:t,dangerouslySetInnerHTML:{__html:e.replaceAll("[","<span>[").replaceAll("]","]</span>")}})})))))}),null),!(0,o.isEmpty)(y)&&""!==T&&(0,o.map)(y[T],(function(e,t){if(!(0,o.isEmpty)(e.content)){var n="user"===e.role,a=n?(0,s.__)("You:","rank-math"):(0,s.__)("RankBot:","rank-math"),r=(0,o.uniqueId)(),i=e.isNew;return e.isNew=!1,wp.element.createElement("div",{className:n?"chat-message user":"chat-message",key:t},wp.element.createElement("div",{className:"message-actions"},wp.element.createElement("span",null,a),!n&&wp.element.createElement(ae,{value:e.content})),wp.element.createElement("div",{className:"message",id:"block-"+r},i&&wp.element.createElement(J,{value:e.content,showWordCount:!1}),!i&&wp.element.createElement("div",{dangerouslySetInnerHTML:{__html:$(e.content)}})))}}))),(!l||!T)&&wp.element.createElement("div",{className:"chat-input"},wp.element.createElement("div",{className:"chat-input-actions"},wp.element.createElement(Me.RichText,{tagName:"div",className:"chat-input-textarea",value:v.slice(0,2e3),allowedFormats:[],disableLineBreaks:!0,onChange:function(e){var t=document.getElementsByClassName("chat-input-textarea")[0];if(e.length>2e3){e=e.slice(0,2e3),t.innerHTML=v;var n=document.createRange(),a=window.getSelection(),r=t.childNodes[t.childNodes.length-1];n.setStart(r,r.textContent.length),n.collapse(!0),a.removeAllRanges(),a.addRange(n)}w(e)},onKeyUp:function(e){if("Enter"===e.key){if(e.shiftKey){w(v+"\n");var t=window.getSelection(),n=t.getRangeAt(0),a=document.createElement("br");n.insertNode(a);var r=a.nextSibling,i=document.createRange();return i.setStart(r,0),i.collapse(!0),t.removeAllRanges(),void t.addRange(i)}(0,o.isEmpty)((0,o.trim)(v))||g||O()}},preserveWhiteSpace:"true",placeholder:(0,s.__)("Type your message hereâ€¦","rank-math")}),wp.element.createElement("div",{className:"chat-input-buttons"},wp.element.createElement(m.Button,{className:"prompts-button button",onClick:function(){return p(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-htaccess"})," ",C?(0,s.__)("Prompts Library","rank-math"):""),wp.element.createElement(ct,{isOpen:d,toggleModal:p,setMessage:w}),""!==T&&!g&&wp.element.createElement(m.Tooltip,{text:(0,s.__)("Regenerate Response","rank-math")},wp.element.createElement(m.Button,{className:"regenerate-response button button-small",onClick:function(){var e=y[T],t=e[1].content;e.shift(),y[T]=e,E(y),O(t,!0)},showTooltip:!0},wp.element.createElement(m.Dashicon,{icon:"controls-repeat"}))),wp.element.createElement("div",{className:v.length>=2e3?"limit limit-reached":"limit"},wp.element.createElement("span",{className:"count"},v.length),"/",(0,s.__)("2000","rank-math")),wp.element.createElement(m.Button,{className:"button is-primary is-large","aria-label":(0,s.__)("Send","rank-math"),disabled:(0,o.isEmpty)((0,o.trim)(v))||g,onClick:function(){return O()}},wp.element.createElement("span",{className:"rm-icon rm-icon-send"})))))))),r&&wp.element.createElement(ge,null))},ht=function(e){var t=wp.data.select("rank-math-content-ai").getContentAiAttributes();return e||(e=(0,o.isEmpty)(t.instructions)?"":t.instructions),{document_title:"undefined"!=typeof rankMathEditor?rankMathEditor.assessor.dataCollector.getData().title:"",text:Ne(),instructions:e,tone:(0,o.isEmpty)(t.tone)?rankMath.ca_tone:t.tone,focus_keyword:(0,o.isEmpty)(t.focus_keyword)?"":t.focus_keyword,length:(0,o.isEmpty)(t.length)?"medium":t.length,choices:1}},gt=wp.keyboardShortcuts;function ft(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _t(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _t(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var bt=function e(t){var n="";return t.forEach((function(t){"rank-math/command"!==t.name&&t.attributes&&t.attributes.content&&(n+=t.attributes.content+" "),t.innerBlocks&&t.innerBlocks.length>0&&(n+=e(t.innerBlocks))})),n},vt=function(){var e=(0,u.useSelect)((function(){return(0,u.select)("core/editor").getEditedPostContent()})),t=bt((0,u.select)("core/block-editor").getBlocks());return wp.element.createElement("div",{className:"actions-wrapper"},wp.element.createElement(ae,{value:t,disabled:!t,label:(0,s.__)("Copy as Text","rank-math")}),wp.element.createElement(ae,{disabled:!t,value:e,label:(0,s.__)("Copy as Blocks","rank-math"),onClick:!0}),wp.element.createElement(m.Button,{disabled:!t,onClick:function(){var e=(0,u.select)("core/block-editor").getBlocks(),t=wp.blocks.createBlock("rank-math/command",{content:"",className:"rank-math-content-ai-command"});e.push(t),M()({method:"POST",path:"/rankmath/v1/ca/createPost",data:{content:(0,F.serialize)(e)}}).catch((function(e){console.log(e)})).then((function(e){window.location.href=e}))},className:"button is-secondary is-small"},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"})," ",(0,s.__)("Create New Post","rank-math")))},wt=function(){var e=ft((0,c.useState)(!1),2),t=e[0],n=e[1],a=ft((0,c.useState)(!0),2),r=a[0],i=a[1];return wp.element.createElement("div",{className:t?"wp-block-column interface-interface-skeleton__sidebar has-collapsed":"wp-block-column interface-interface-skeleton__sidebar"},t&&wp.element.createElement(m.Button,{className:"collapsed",onClick:function(){return n(!1)},icon:"align-pull-right",title:(0,s.__)("Expand Sidebar","rank-math")}),!t&&wp.element.createElement("div",{className:"interface-complementary-area edit-post-sidebar rank-math-tabs"},wp.element.createElement("div",{role:"tablist","aria-orientation":"horizontal",className:"components-panel__header interface-complementary-area-header"},wp.element.createElement(m.Button,{className:r?"is-active":"",onClick:function(){return i(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-edit",title:(0,s.__)("Write","rank-math")}),wp.element.createElement("span",null,(0,s.__)("Write","rank-math"))),wp.element.createElement(m.Button,{className:r?"":"is-active",onClick:function(){return i(!1)}},wp.element.createElement("i",{className:"rm-icon rm-icon-page",title:(0,s.__)("AI Tools","rank-math")}),wp.element.createElement("span",null,(0,s.__)("AI Tools","rank-math"))),wp.element.createElement(m.Button,{onClick:function(){return n(!0)},icon:"no-alt",title:(0,s.__)("Collapse Sidebar","rank-math")})),wp.element.createElement("div",{className:r?"rank-math-content-ai-wrapper rank-math-tab-content-write":"rank-math-content-ai-wrapper rank-math-tab-content-write rank-math-tab-content-tools"},wp.element.createElement("div",{className:"rank-math-tab-content-ai-tools"},r&&wp.element.createElement(Ze,null),!r&&wp.element.createElement(Oe,{showMinimal:!0})))))},kt=function(){return setTimeout((function(){var e=document.getElementById("editor2").dataset;wp.editPost.initializeEditor("editor","rm_content_editor",e.postId,JSON.parse(e.settings),{}),(0,u.select)("core/edit-post").isFeatureActive("fullscreenMode")&&(0,u.dispatch)("core/edit-post").toggleFeature("fullscreenMode")}),200),wp.element.createElement(gt.ShortcutProvider,null,wp.element.createElement("div",{className:"wp-block-columns rank-math-content-ai-wrapper",id:"rank-math-content-editor-page"},wp.element.createElement("div",{className:"wp-block-column"},wp.element.createElement(vt,null),wp.element.createElement("div",{id:"editor"})),wp.element.createElement(wt,null)))};function yt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Et(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Et(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Et(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var xt=function(){var e=yt((0,c.useState)(rankMath.contentAIHistory),2),t=e[0],n=e[1];return wp.element.createElement("div",{className:"history-container"},wp.element.createElement("div",{className:"tab-header"},wp.element.createElement("span",{className:"tab-header-title"},wp.element.createElement("span",{className:"rm-icon rm-icon-dataset"})," ",(0,s.__)("AI History","rank-math")),!(0,o.isEmpty)(t)&&wp.element.createElement(m.Button,{className:"button clear-history is-small is-link button-link-delete",onClick:function(){ut(!1),n([])}},(0,s.__)("Clear History","rank-math"))),wp.element.createElement("div",{className:"inner-wrapper"},!(0,o.isEmpty)(t)&&(0,o.map)(t,(function(e,t){var n=function(e,t){if(!(0,o.isObject)(e))return $(e);var n="";return"Frequently_Asked_Questions"===t?((0,o.map)(e,(function(e){n+="<h4>"+e.question+"</h4><span>"+e.answer+"</span>"})),n):((0,o.map)(e,(function(e,t){n+="<h4>"+(0,o.startCase)(t)+"</h4><span>"+e+"</span>"})),$(n))}(e.output,e.key);return wp.element.createElement("div",{className:"output-item",key:t},wp.element.createElement("div",{className:"tool-name"},e.key),wp.element.createElement("div",{className:"output-actions"},wp.element.createElement(ae,{value:n})),wp.element.createElement("div",{className:"word-count"},(0,s.__)("Words:","rank-math")," ",n.split(" ").length),wp.element.createElement("div",{className:"content",dangerouslySetInnerHTML:{__html:n}}))})),(0,o.isEmpty)(t)&&wp.element.createElement("div",{className:"no-output"},(0,s.__)("No AI History found.","rank-math"))))},Tt=function(){var e=window.location.hash?window.location.hash.replace("#",""):"ai-tools";return(0,c.useEffect)((function(){!fe()&&"content-editor"!==e&&(0,o.isUndefined)(wp.blocks.getBlockType("core/paragraph"))&&wp.blockLibrary.registerCoreBlocks()}),[]),wp.element.createElement(React.Fragment,null,wp.element.createElement(m.TabPanel,{className:"rank-math-tabs",activeClass:"is-active",tabs:[{name:"ai-tools",id:"ai-tools",title:(0,s.__)("AI Tools","rank-math"),view:Oe,className:"rank-math-ai-tools-tab rank-math-tab"},{name:"content-editor",id:"content-editor",title:(0,s.__)("Content Editor","rank-math"),view:kt,className:"rank-math-content-editor-tab rank-math-tab"},{name:"chat",id:"chat",title:(0,s.__)("Chat","rank-math"),view:pt,className:"rank-math-chat-tab rank-math-tab"},{name:"history",id:"history",title:(0,s.__)("History","rank-math"),view:xt,className:"rank-math-history-tab rank-math-tab"}],initialTabName:e,onSelect:function(e){window.location.hash=e}},(function(e){var t=fe()&&"history"!==e.id?" blurred":"";return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-tab-content dashboard-wrapper rank-math-tab-content-"+e.name+t},wp.element.createElement(Ce,{isPage:"true"}),(0,c.createElement)(e.view,{isPage:!0})),t&&wp.element.createElement(ge,{width:"40"}))})))},St=wp.richText,Ct=function(e){var t=e.width,n=void 0===t?40:t,a=rankMath.isUserRegistered,r=rankMath.contentAIPlan,i=rankMath.contentAICredits>0,o=rankMath.contentAiMigrating;if(a&&r&&i&&!o)return null;var l="width-"+n;return a&&r?o?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+l},wp.element.createElement("h3",null,(0,s.__)("Server Maintenance Underway","rank-math")),wp.element.createElement("p",null,(0,s.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","rank-math"),wp.element.createElement("a",{href:"https://rankmath.com/support/",target:"_blank",rel:"noreferrer"},(0,s.__)("reach out to the support team.","rank-math")),(0,s.__)(" We are sorry for the inconvenience.","rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+l},wp.element.createElement("h3",null,(0,s.__)("â›”ï¸� Content AI Credit Alert!","rank-math")),wp.element.createElement("p",null,(0,s.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","rank-math")),wp.element.createElement(m.Button,{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Credits+Button&utm_campaign=WP",className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+l},wp.element.createElement("h3",null,(0,s.__)("ðŸš€ Supercharge Your Content With AI","rank-math")),wp.element.createElement("p",null,!a&&(0,s.__)("Start using Content AI by connecting your RankMath.com Account","rank-math"),a&&!r&&(0,s.__)("To access this Content AI feature, you need to have an active subscription plan.","rank-math")),function(e){return 40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click SEO Content","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click SEO Meta","rank-math")),wp.element.createElement("li",null,(0,s.__)("40+ Specialized AI Tools","rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","rank-math")),wp.element.createElement("li",null,(0,s.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","rank-math")),wp.element.createElement("li",null,(0,s.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","rank-math")))}(n),!a&&wp.element.createElement(m.Button,{href:rankMath.connectSiteUrl,className:"button button-primary is-green"},(0,s.__)("Connect Now","rank-math")),a&&!r&&wp.element.createElement(m.Button,{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Plan+Button&utm_campaign=WP",className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","rank-math"))))},At=(0,s.__)("Generatingâ€¦","rank-math"),Pt=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(fe()){var r=(0,o.find)(g(),["endpoint",e]);return(0,o.isUndefined)(r)&&((r=(0,o.find)(g(),["endpoint","Blog_Post_Idea"])).title=(0,o.startCase)(e)),(0,o.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&i()("#wpwrap").append('<div id="rank-math-content-ai-modal-wrapper"></div>'),void setTimeout((function(){(0,c.render)(wp.element.createElement(m.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",onRequestClose:function(){i()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove()},shouldCloseOnClickOutside:!0},wp.element.createElement(Ct,{width:100})),document.getElementById("rank-math-content-ai-modal-wrapper"))}),100)}var s=(0,F.createBlock)("rank-math/command",{content:At,className:"rank-math-content-ai-command"}),l=(0,u.select)("core/block-editor").getBlocks().map((function(e){return e.clientId===n.clientId})).indexOf(!0);(0,u.dispatch)("core/block-editor").insertBlocks(s,l+1),Ue(e,t,s.clientId,n.clientId,a)},Ot=(0,ee.createHigherOrderComponent)((function(e){return function(t){if(t&&!(0,o.includes)(["core/paragraph","core/heading"],t.name))return wp.element.createElement(e,t);var n=(0,o.isEmpty)(t.attributes.content.text)?t.attributes.content:t.attributes.content.text;if((0,o.isEmpty)(n))return wp.element.createElement(e,t);var a=rankMath.ca_language,r=[{title:"ðŸ’»  "+(0,s.__)("Run as Command","rank-math"),onClick:function(){return Pt("AI_Command",{command:n,language:a,choices:1},t)}},{title:"ðŸ“–  "+(0,s.__)("Write More","rank-math"),onClick:function(){return Pt("Continue_Writing",{sentence:Ne(),choices:1},t)}},{title:"ðŸ“�  "+(0,s.__)("Improve","rank-math"),onClick:function(){return Pt("Paragraph_Rewriter",{original_paragraph:n,language:a,choices:1},t)}}];return(0,o.isNull)(t)||"core/paragraph"!==t.name||r.push({title:"ðŸ“™  "+(0,s.__)("Summarize","rank-math"),onClick:function(){return Pt("Text_Summarizer",{text:n,language:a,choices:1},t)}},{title:"ðŸ’­  "+(0,s.__)("Write Analogy","rank-math"),onClick:function(){return Pt("Analogy",{text:n,language:a,choices:1},t)}}),r.push({title:"âœ¨  "+(0,s.__)("Fix Grammar","rank-math"),onClick:function(){return Pt("Fix_Grammar",{text:n,choices:1},t)}}),wp.element.createElement(React.Fragment,null,wp.element.createElement(e,t),wp.element.createElement(Me.BlockControls,null,wp.element.createElement(m.ToolbarGroup,null,wp.element.createElement(m.ToolbarDropdownMenu,{icon:"rm-icon rm-icon-content-ai",label:(0,s.__)("Content AI Commands","rank-math"),controls:r}))))}}));function It(e){return function(e){if(Array.isArray(e))return Nt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Nt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Nt(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Nt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var Mt=function(e){return{name:"content-ai-tools",className:"content-ai-autocompleters",triggerPrefix:e,isDebounced:!0,allowContext:function(e,t){return!(/\S/.test(e)||/\S/.test(t))},options:function(){return g()},getOptionKeywords:function(e){var t=e.endpoint,n=e.title,a=e.searchTerms,r=n.split(/\s+/);return r.push(r.join(" ")),(0,o.isUndefined)(a)?[t].concat(It(r)):a},getOptionLabel:function(e){return wp.element.createElement("span",null,wp.element.createElement("i",{className:"ai-icon "+e.icon})," ",e.title)},getOptionCompletion:function(e){if(!e.endpoint)return!1;(0,o.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&i()("#wpwrap").append('<div id="rank-math-content-ai-modal-wrapper"></div>'),wp.data.dispatch("rank-math-content-ai").isAutoCompleterOpen(!0),setTimeout((function(){(0,c.render)(wp.element.createElement(xe,{data:e}),document.getElementById("rank-math-content-ai-modal-wrapper"))}),100)}}},Rt=function(){var e=(0,o.isUndefined)((0,u.select)("rank-math"))?[]:(0,u.select)("rank-math").getHighlightedParagraphs();if((0,o.isEmpty)(e))return"";var t=(0,u.select)("core/block-editor").getSelectedBlock();return(0,o.isEmpty)(t)||!(0,o.includes)(e,t.clientId)?(i()(".block-editor-block-popover").show(),""):(i()(".block-editor-block-popover").hide(),wp.element.createElement(m.Popover,{placement:"top-start",focusOnMount:"firstElement",key:"rank-math-popover",expandOnMobile:!0,noArrow:!1,anchor:document.getElementById("block-"+t.clientId)},wp.element.createElement(m.Button,{variant:"primary",onClick:function(){var e=(0,o.isEmpty)(t.attributes.content.text)?t.attributes.content:t.attributes.content.text;Pt("Text_Summarizer",{text:e,language:rankMath.ca_language,format:"paragraph",choices:1},t,!0)}},(0,s.__)("Shorten with AI","rank-math"))))},jt=function(e){return new Promise((function(t,n){var a=rankMath.connectData;fetch(rankMath.contentAiUrl+"generate_image_alt",{method:"POST",body:JSON.stringify({images:[e],username:a.username,api_key:a.api_key,site_url:a.site_url,plugin_version:rankMath.version}),headers:{"Content-Type":"application/json"}}).then((function(e){return e.json()})).then((function(a){if(a.altTexts&&a.altTexts[e])return t(a.altTexts[e]),void function(e){if(!(0,o.isUndefined)(e.credits)){var t=e.credits;(0,o.isEmpty)(t)||(t=(t=t.available-t.taken)<0?0:t,M()({method:"POST",path:"/rankmath/v1/ca/updateCredits",data:{credits:t}}).then((function(){(0,o.isUndefined)(rankMath.ca_credits)||(rankMath.ca_credits=t),(0,o.isUndefined)(rankMath.contentAICredits)||(rankMath.contentAICredits=t),i()(".credits-remaining").length&&i()(".credits-remaining strong").text(t)})))}}(a);n((0,s.__)("Failed to generate alt text.","rank-math"))})).catch((function(e){n(e)}))}))};function qt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,s=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Dt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var Bt=(0,ee.createHigherOrderComponent)((function(e){return function(t){if("core/image"!==t.name||(0,o.isEmpty)(t.attributes.url))return wp.element.createElement(e,t);var n=qt((0,c.useState)(!1),2),a=n[0],r=n[1],l=qt((0,c.useState)(""),2),u=l[0],d=l[1],p=qt((0,c.useState)(""),2),h=p[0],g=p[1],f=t.attributes,_=t.setAttributes,b=f.url,v=f.alt;u&&(_({alt:u}),d(""),g("error"),setTimeout((function(){_({alt:v}),r(!1),g("")}),2e3));return wp.element.createElement(c.Fragment,null,wp.element.createElement(e,t),wp.element.createElement(Me.InspectorControls,null,wp.element.createElement(m.Button,{variant:"tertiary",size:"compact",className:h+" rank-math-generate-alt",onClick:function(){if(fe()||rankMath.contentAICredits<50)return t=(e={creditsRequired:50}).showProNotice,n=void 0!==t&&t,a=e.isBulkEdit,l=void 0!==a&&a,u=e.creditsRequired,p=void 0===u?0:u,(0,o.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&i()("#wpwrap").append('<div id="rank-math-content-ai-modal-wrapper"></div>'),void setTimeout((function(){(0,c.render)(wp.element.createElement(m.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!0,onRequestClose:function(e){(0,o.isUndefined)(e)||(i()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.body.classList.remove("modal-open"))}},wp.element.createElement(ge,{width:100,showProNotice:n,isBulkEdit:l,creditsRequired:p})),document.getElementById("rank-math-content-ai-modal-wrapper"))}),100);var e,t,n,a,l,u,p;b?(r(!0),d(""),jt(b).then((function(e){e?(_({alt:e}),r(!1)):d((0,s.__)("Failed to generate alt text.","rank-math"))})).catch((function(e){d(e)}))):d((0,s.__)("Image URL is missing.","rank-math"))},disabled:a},h&&(0,s.__)("Failed","rank-math"),!h&&a&&(0,s.__)("Generatingâ€¦","rank-math"),!h&&!a&&wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,s.__)("Generate Alt","rank-math")),!a&&wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,s.__)("50 Content AI credits will be used to generate the Alt","rank-math"))))))}}),"withInspectorControl"),Lt=function(e){i()(e.target).parent().attr("data-mce-selected",!1);var t=i()(e.target).parents("p"),n=document.createElement("p");n.textContent=(0,s.__)("Generatingâ€¦","rank-math");var a=t.html();t.before(n),B("Text_Summarizer",{text:a,language:rankMath.ca_language,format:"paragraph",choices:1},(function(e){n.textContent=e[0]}))},zt=function(){(0,gt.useShortcut)("rank-math-contentai-write",(0,c.useCallback)((function(){var e=Ie(),t=(0,F.createBlock)("rank-math/command");(0,o.isEmpty)(e.block)||e.block.attributes.content?(0,u.dispatch)("core/block-editor").insertBlock(t,e.position):(0,u.dispatch)("core/block-editor").replaceBlock(e.clientId,t),Ue("Write",ht(),t.clientId)}),[]));var e=(0,u.useSelect)((function(e){return e(gt.store).getShortcutKeyCombination("rank-math-contentai-write")}),[]);if(!(0,o.isNull)(e))return null;(0,(0,u.useDispatch)(gt.store).registerShortcut)({name:"rank-math-contentai-write",category:"global",keyCombination:{modifier:"ctrl",character:"/"}})};function Ht(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}function Ft(e){if(!e)return Ht("isAutoCompleterOpen",e);var t=(0,u.select)("core/block-editor").getSelectedBlock();(0,o.isNull)(t)||(0,(0,u.dispatch)(Me.store).removeBlock)(t.clientId);return Ht("isAutoCompleterOpen",e)}function Vt(e,t){var n=(0,u.select)("rank-math-content-ai").getContentAiAttributes();return n[e]="language"!==e||t?t:rankMath.ca_language,Ht("contentAiAttributes",n)}function Wt(e){return Wt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wt(e)}function Ut(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function $t(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ut(Object(n),!0).forEach((function(t){Gt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ut(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Gt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Wt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==Wt(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Wt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Kt={isAutoCompleterOpen:!1,contentAiAttributes:{}};function Yt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Kt,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?$t($t({},e),{},Gt({},t.key,t.value)):e}function Jt(e){return e.appUi.isAutoCompleterOpen}function Qt(e){return e.appUi.contentAiAttributes}(0,u.register)((0,u.createReduxStore)("rank-math-content-ai",{reducer:(0,u.combineReducers)(t),selectors:a,actions:e}));(0,l.addFilter)("rank_math_before_serp_devices","rank-math",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"SEO_Meta",n=_()("rank-math-content-ai-meta-button button button-small button-primary",{"is-new":!rankMath.ca_viewed,"field-group":"SEO_Meta"!==t});return wp.element.createElement(m.Button,{className:n,disabled:fe(),onClick:function(){(0,o.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&i()("body").append('<div id="rank-math-content-ai-modal-wrapper"></div>');var e=wp.data.select("rank-math"),n=(0,o.find)(g(),["endpoint",t]),a=n.params;a.topic.default=e.getSerpTitle(),a.post_brief.default=e.getSerpDescription(),a.focus_keyword.default=e.getKeywords().split(","),n.output.default=1,n.params=a,(0,c.render)(wp.element.createElement(xe,{data:n,callApi:!0}),document.getElementById("rank-math-content-ai-modal-wrapper"))}},wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,s.__)("Generate With AI","rank-math"))})),(Ge()||rankMath.isContentAIPage)&&((0,l.addFilter)("rank_math_block_faq_actions","rank-math",(function(e,t,n){return wp.element.createElement(React.Fragment,null,e,wp.element.createElement(m.Button,{icon:"rm-icon rm-icon-content-ai",className:"rank-math-faq-content-ai",label:(0,s.__)("Generate Answer with Content AI","rank-math"),disabled:fe(),showTooltip:!0,onClick:function(){n.setQuestionProp("content",(0,s.__)("Generatingâ€¦","rank-math")),B("AI_Command",{command:t.title,choices:1},(function(e){var t="";setTimeout((function(){var a=e[0].replaceAll(/(?:\r\n|\r|\n)/g,"<br>").split(" "),r=0,i=!1,o=setInterval((function(){t?t+="<br>"===a[r]||i?a[r]:" "+a[r]:t=a[r],i="<br>"===a[r],n.setQuestionProp("content",t),++r>=a.length&&clearInterval(o)}),50)}),100)}))}}))})),(0,St.registerFormatType)("rank-math/content-ai",{title:(0,s.__)("Content AI","rank-math"),tagName:"p",className:null,edit:Rt}),(0,l.addFilter)("editor.BlockEdit","rank-math",Ot),fe()||((0,l.addFilter)("editor.Autocomplete.completers","rank-math/content-ai/tools",(function(e,t){return"core/paragraph"===t||"rank-math/command"===t?[].concat(It(e),[Mt("//")]):e})),(0,l.addFilter)("editor.Autocomplete.completers","rank-math/content-ai/tools2",(function(e,t){return"core/paragraph"===t||"rank-math/command"===t?[].concat(It(e),[Mt("// ")]):e}))),(0,l.addFilter)("editor.BlockEdit","rank-math/add-alt-generator",Bt)),function(){if("classic"===rankMath.currentEditor){var e=[];(0,l.addAction)("rank_math_content_refresh","rank-math",(function(){(0,o.isUndefined)(window.tinymce)||setTimeout((function(){var t=window.tinymce.get(window.wpActiveEditor);if(!(0,o.isNull)(t)){var n=t.annotator.getAll("rank-math-annotations");(0,o.isEmpty)(n)?(0,o.isEmpty)(e)||(0,o.forEach)(e,(function(e){return e.remove()})):(0,o.forEach)(n["rank-math-annotation"],(function(t){var n=t.getElementsByClassName("rank-math-content-ai-tooltip");n.length||((n=document.createElement("button")).className="rank-math-content-ai-tooltip",n.textContent=(0,s.__)("Shorten with AI","rank-math"),n.addEventListener("click",Lt),e.push(n),t.appendChild(n))}))}}),1e3)}))}}(),(Ge()||rankMath.isContentAIPage)&&function(){var e=(0,u.dispatch)(Me.store).updateBlockAttributes,t=function(){var e=(0,u.select)("core/block-editor").getSelectedBlock();(0,o.isNull)(e)||Ue("Write",ht(e.attributes.content),e.clientId)},n=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=document.activeElement.childNodes[1];if(!(0,o.isUndefined)(t)){var n=window.getSelection(),a=document.createRange();a.setStart(t,e?0:t.length),a.collapse(!0),n.removeAllRanges(),n.addRange(a)}};i()(document).on("click",".rank-math-content-ai-command-button",(function(){t()})),i()(document).on("keydown",".rank-math-content-ai-command-button",(function(e){"Enter"!==e.code?"ArrowLeft"===e.code&&(e.preventDefault(),n()):t()}));var a=!1,r='<button class="rank-math-content-ai-command-button" title="'+(0,s.__)("Click or Press Enter","rank-math")+'" contenteditable="false"><i class="rm-icon rm-icon-enter-key"></i></button>';document.addEventListener("keyup",(function(t){var i=(0,u.select)("core/block-editor").getSelectedBlock();if(!(0,o.isNull)(i)){var s=i.clientId,l=i.attributes.content;if((0,o.startsWith)(l,"//")&&"core/paragraph"===i.name){var c=(0,F.createBlock)("rank-math/command",{content:i.attributes.content.replace("//","<span>//</span>"),className:"rank-math-content-ai-command"});(0,u.dispatch)("core/block-editor").replaceBlock(s,c),s=c.clientId}if("rank-math/command"!==i.name)return!1;if(a&&(0,o.includes)(["ArrowLeft","ArrowRight"],t.code))return n("ArrowLeft"===t.code),void(a=!1);if("Backspace"!==t.code&&(a="KeyA"===t.code),"Backspace"!==t.code||!a&&l.replace(/(<div[^>]*>[\s\S]*<\/div>)/,"").replace(/(<span[^>]*>[\s\S]*<\/span>)/,"")&&"/"!==l.replace(/(<([^>]+)>)/gi,"")){var d=(0,o.isUndefined)(i.attributes.className)?[]:i.attributes.className.split(" ");""===l.replace("//","").replace(" ","").replace(new RegExp(r,"i"),"").replace(/(<([^>]+)>)/gi,"")?e(s,{content:l.replace(new RegExp(r,"i"),"")}):(0,o.includes)(d,"typing")||l.includes("rank-math-content-ai-command-button")||e(s,{content:l+=r,className:"rank-math-content-ai-command"})}else{var m=(0,F.createBlock)("core/paragraph");(0,u.dispatch)("core/block-editor").replaceBlock(s,m)}}})),document.addEventListener("keydown",(function(t){if(!("Enter"!==t.code||t.shiftKey||t.metaKey||"button"===t.target.localName||fe())){var n=(0,u.select)("core/block-editor").getSelectedBlock();if(!(0,o.isNull)(n)&&"rank-math/command"===n.name){var a=n.attributes.content;if(a.replace("//","").replace(" ","").replace(/(<([^>]+)>)/gi,"")){var r=n.clientId;e(r,{content:"",className:""}),(0,u.select)("rank-math-content-ai").isAutoCompleterOpen()||Ue("Write",ht(a),r)}}}}))}(),(0,l.addAction)("rank_math_loaded","rank-math",(function(){(0,l.addFilter)("rank_math_content_ai_tabs","rank-math",(function(e){return"divi"!==rankMath.currentEditor&&e.push({name:"write",title:wp.element.createElement(c.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-edit",title:(0,s.__)("Write","rank-math")}),wp.element.createElement("span",null,(0,s.__)("Write","rank-math"))),view:Ze,className:"rank-math-write-tab"}),e.push({name:"ai-tools",title:wp.element.createElement(c.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-page",title:(0,s.__)("AI Tools","rank-math")}),wp.element.createElement("span",null,(0,s.__)("AI Tools","rank-math"))),view:Oe,className:"rank-math-ai-tools-tab"},{name:"chat",title:wp.element.createElement(c.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-comments",title:(0,s.__)("Chat","rank-math")}),wp.element.createElement("span",null,(0,s.__)("Chat","rank-math"))),view:pt,className:"rank-math-chat-tab"}),"free"===rankMath.contentAIPlan&&(e.push(e[0]),e=(0,o.tail)(e)),e}))})),(0,l.addFilter)("blocks.registerBlockType","rank-math",(function(e,t){return"core/paragraph"!==t||(e.attributes.placeholder={type:"string",default:(0,s.__)("Type / to choose a block or // to use Content AI","rank-math")}),e})),i()((function(){var e=document.getElementById("rank-math-content-ai-page");if(!(0,o.isNull)(e)&&((0,c.render)(wp.element.createElement(Tt,null),e),i()("#wp-admin-bar-rank-math-content-ai-page").on("click","a",(function(){setTimeout((function(){var e=window.location.hash.replace("#","");i()("#tab-panel-0-"+e).length&&i()("#tab-panel-0-"+e).trigger("click")}),100)})),rankMath.isContentAIPage)){var t=window.location,n=t.pathname;(0,u.subscribe)((function(){var e=(0,u.select)("core/editor").isAutosavingPost(),a=(0,u.select)("core/block-editor").getBlocks();1===a.length&&"core/paragraph"===a[0].name&&""===a[0].attributes.content&&"rank-math-command"!==a[0].attributes.className&&(0,u.dispatch)("core/block-editor").updateBlockAttributes(a[0].clientId,{className:"rank-math-command"}),e&&(setTimeout((function(){(0,u.dispatch)("core/editor").savePost()}),500),!(0,o.isNull)(window.history.state)&&window.history.state.id&&window.history.replaceState("","Content AI",t.origin+n+"?page=rank-math-content-ai-page#content-editor"))}))}})),i()(window).on("load",(function(){!fe()&&rankMath.registerWriteShortcut&&(Ge()||rankMath.isContentAIPage)&&(0,d.registerPlugin)("rank-math-content-ai-write-shortcut",{render:function(){return wp.element.createElement(zt,null)}})}))}()}();PK     ¥ŠU]\ù”!i !i 3  includes/modules/content-ai/assets/js/content-ai.jsnu „[µü¤        !function(){var e={552:function(e,t,n){var r;(function(){function a(e){"use strict";var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `Â«Â«Â«` and `Â»Â»Â»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r].defaultValue);return n}var o={},i={},s={},l=a(!0),c="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:a(!0),allOn:function(){"use strict";var e=a(!0),t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=!0);return t}()};function m(e,t){"use strict";var n=t?"Error in "+t+" extension->":"Error in unnamed extension",r={valid:!0,error:""};o.helper.isArray(e)||(e=[e]);for(var a=0;a<e.length;++a){var i=n+" sub-extension "+a+": ",s=e[a];if("object"!=typeof s)return r.valid=!1,r.error=i+"must be an object, but "+typeof s+" given",r;if(!o.helper.isString(s.type))return r.valid=!1,r.error=i+'property "type" must be a string, but '+typeof s.type+" given",r;var l=s.type=s.type.toLowerCase();if("language"===l&&(l=s.type="lang"),"html"===l&&(l=s.type="output"),"lang"!==l&&"output"!==l&&"listener"!==l)return r.valid=!1,r.error=i+"type "+l+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',r;if("listener"===l){if(o.helper.isUndefined(s.listeners))return r.valid=!1,r.error=i+'. Extensions of type "listener" must have a property called "listeners"',r}else if(o.helper.isUndefined(s.filter)&&o.helper.isUndefined(s.regex))return r.valid=!1,r.error=i+l+' extensions must define either a "regex" property or a "filter" method',r;if(s.listeners){if("object"!=typeof s.listeners)return r.valid=!1,r.error=i+'"listeners" property must be an object but '+typeof s.listeners+" given",r;for(var c in s.listeners)if(s.listeners.hasOwnProperty(c)&&"function"!=typeof s.listeners[c])return r.valid=!1,r.error=i+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+c+" must be a function but "+typeof s.listeners[c]+" given",r}if(s.filter){if("function"!=typeof s.filter)return r.valid=!1,r.error=i+'"filter" must be a function, but '+typeof s.filter+" given",r}else if(s.regex){if(o.helper.isString(s.regex)&&(s.regex=new RegExp(s.regex,"g")),!(s.regex instanceof RegExp))return r.valid=!1,r.error=i+'"regex" property must either be a string or a RegExp object, but '+typeof s.regex+" given",r;if(o.helper.isUndefined(s.replace))return r.valid=!1,r.error=i+'"regex" extensions must implement a replace string or function',r}}return r}function d(e,t){"use strict";return"Â¨E"+t.charCodeAt(0)+"E"}o.helper={},o.extensions={},o.setOption=function(e,t){"use strict";return l[e]=t,this},o.getOption=function(e){"use strict";return l[e]},o.getOptions=function(){"use strict";return l},o.resetOptions=function(){"use strict";l=a(!0)},o.setFlavor=function(e){"use strict";if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");o.resetOptions();var t=u[e];for(var n in c=e,t)t.hasOwnProperty(n)&&(l[n]=t[n])},o.getFlavor=function(){"use strict";return c},o.getFlavorOptions=function(e){"use strict";if(u.hasOwnProperty(e))return u[e]},o.getDefaultOptions=function(e){"use strict";return a(e)},o.subParser=function(e,t){"use strict";if(o.helper.isString(e)){if(void 0===t){if(i.hasOwnProperty(e))return i[e];throw Error("SubParser named "+e+" not registered!")}i[e]=t}},o.extension=function(e,t){"use strict";if(!o.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=o.helper.stdExtName(e),o.helper.isUndefined(t)){if(!s.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return s[e]}"function"==typeof t&&(t=t()),o.helper.isArray(t)||(t=[t]);var n=m(t,e);if(!n.valid)throw Error(n.error);s[e]=t},o.getAllExtensions=function(){"use strict";return s},o.removeExtension=function(e){"use strict";delete s[e]},o.resetExtensions=function(){"use strict";s={}},o.validateExtension=function(e){"use strict";var t=m(e,null);return!!t.valid||(console.warn(t.error),!1)},o.hasOwnProperty("helper")||(o.helper={}),o.helper.isString=function(e){"use strict";return"string"==typeof e||e instanceof String},o.helper.isFunction=function(e){"use strict";return e&&"[object Function]"==={}.toString.call(e)},o.helper.isArray=function(e){"use strict";return Array.isArray(e)},o.helper.isUndefined=function(e){"use strict";return void 0===e},o.helper.forEach=function(e,t){"use strict";if(o.helper.isUndefined(e))throw new Error("obj param is required");if(o.helper.isUndefined(t))throw new Error("callback param is required");if(!o.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(o.helper.isArray(e))for(var n=0;n<e.length;n++)t(e[n],n,e);else{if("object"!=typeof e)throw new Error("obj does not seem to be an array or an iterable object");for(var r in e)e.hasOwnProperty(r)&&t(e[r],r,e)}},o.helper.stdExtName=function(e){"use strict";return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},o.helper.escapeCharactersCallback=d,o.helper.escapeCharacters=function(e,t,n){"use strict";var r="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";n&&(r="\\\\"+r);var a=new RegExp(r,"g");return e=e.replace(a,d)},o.helper.unescapeHTMLEntities=function(e){"use strict";return e.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")};var p=function(e,t,n,r){"use strict";var a,o,i,s,l,c=r||"",u=c.indexOf("g")>-1,m=new RegExp(t+"|"+n,"g"+c.replace(/g/g,"")),d=new RegExp(t,c.replace(/g/g,"")),p=[];do{for(a=0;i=m.exec(e);)if(d.test(i[0]))a++||(s=(o=m.lastIndex)-i[0].length);else if(a&&! --a){l=i.index+i[0].length;var h={left:{start:s,end:o},match:{start:o,end:i.index},right:{start:i.index,end:l},wholeMatch:{start:s,end:l}};if(p.push(h),!u)return p}}while(a&&(m.lastIndex=o));return p};o.helper.matchRecursiveRegExp=function(e,t,n,r){"use strict";for(var a=p(e,t,n,r),o=[],i=0;i<a.length;++i)o.push([e.slice(a[i].wholeMatch.start,a[i].wholeMatch.end),e.slice(a[i].match.start,a[i].match.end),e.slice(a[i].left.start,a[i].left.end),e.slice(a[i].right.start,a[i].right.end)]);return o},o.helper.replaceRecursiveRegExp=function(e,t,n,r,a){"use strict";if(!o.helper.isFunction(t)){var i=t;t=function(){return i}}var s=p(e,n,r,a),l=e,c=s.length;if(c>0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var m=0;m<c;++m)u.push(t(e.slice(s[m].wholeMatch.start,s[m].wholeMatch.end),e.slice(s[m].match.start,s[m].match.end),e.slice(s[m].left.start,s[m].left.end),e.slice(s[m].right.start,s[m].right.end))),m<c-1&&u.push(e.slice(s[m].wholeMatch.end,s[m+1].wholeMatch.start));s[c-1].wholeMatch.end<e.length&&u.push(e.slice(s[c-1].wholeMatch.end)),l=u.join("")}return l},o.helper.regexIndexOf=function(e,t,n){"use strict";if(!o.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==!1)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var r=e.substring(n||0).search(t);return r>=0?r+(n||0):r},o.helper.splitAtIndex=function(e,t){"use strict";if(!o.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},o.helper.encodeEmailAddress=function(e){"use strict";var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e=e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var n=Math.random();e=n>.9?t[2](e):n>.45?t[1](e):t[0](e)}return e})},o.helper.padEnd=function(e,t,n){"use strict";return t|=0,n=String(n||" "),e.length>t?String(e):((t-=e.length)>n.length&&(n+=n.repeat(t/n.length)),String(e)+n.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){"use strict";alert(e)},log:function(e){"use strict";alert(e)},error:function(e){"use strict";throw e}}),o.helper.regexes={asteriskDashAndColon:/([*_:~])/g},o.helper.emojis={"+1":"ðŸ‘�","-1":"ðŸ‘Ž",100:"ðŸ’¯",1234:"ðŸ”¢","1st_place_medal":"ðŸ¥‡","2nd_place_medal":"ðŸ¥ˆ","3rd_place_medal":"ðŸ¥‰","8ball":"ðŸŽ±",a:"ðŸ…°ï¸�",ab:"ðŸ†Ž",abc:"ðŸ”¤",abcd:"ðŸ”¡",accept:"ðŸ‰‘",aerial_tramway:"ðŸš¡",airplane:"âœˆï¸�",alarm_clock:"â�°",alembic:"âš—ï¸�",alien:"ðŸ‘½",ambulance:"ðŸš‘",amphora:"ðŸ�º",anchor:"âš“ï¸�",angel:"ðŸ‘¼",anger:"ðŸ’¢",angry:"ðŸ˜ ",anguished:"ðŸ˜§",ant:"ðŸ�œ",apple:"ðŸ�Ž",aquarius:"â™’ï¸�",aries:"â™ˆï¸�",arrow_backward:"â—€ï¸�",arrow_double_down:"â�¬",arrow_double_up:"â�«",arrow_down:"â¬‡ï¸�",arrow_down_small:"ðŸ”½",arrow_forward:"â–¶ï¸�",arrow_heading_down:"â¤µï¸�",arrow_heading_up:"â¤´ï¸�",arrow_left:"â¬…ï¸�",arrow_lower_left:"â†™ï¸�",arrow_lower_right:"â†˜ï¸�",arrow_right:"âž¡ï¸�",arrow_right_hook:"â†ªï¸�",arrow_up:"â¬†ï¸�",arrow_up_down:"â†•ï¸�",arrow_up_small:"ðŸ”¼",arrow_upper_left:"â†–ï¸�",arrow_upper_right:"â†—ï¸�",arrows_clockwise:"ðŸ”ƒ",arrows_counterclockwise:"ðŸ”„",art:"ðŸŽ¨",articulated_lorry:"ðŸš›",artificial_satellite:"ðŸ›°",astonished:"ðŸ˜²",athletic_shoe:"ðŸ‘Ÿ",atm:"ðŸ�§",atom_symbol:"âš›ï¸�",avocado:"ðŸ¥‘",b:"ðŸ…±ï¸�",baby:"ðŸ‘¶",baby_bottle:"ðŸ�¼",baby_chick:"ðŸ�¤",baby_symbol:"ðŸš¼",back:"ðŸ”™",bacon:"ðŸ¥“",badminton:"ðŸ�¸",baggage_claim:"ðŸ›„",baguette_bread:"ðŸ¥–",balance_scale:"âš–ï¸�",balloon:"ðŸŽˆ",ballot_box:"ðŸ—³",ballot_box_with_check:"â˜‘ï¸�",bamboo:"ðŸŽ�",banana:"ðŸ�Œ",bangbang:"â€¼ï¸�",bank:"ðŸ�¦",bar_chart:"ðŸ“Š",barber:"ðŸ’ˆ",baseball:"âš¾ï¸�",basketball:"ðŸ�€",basketball_man:"â›¹ï¸�",basketball_woman:"â›¹ï¸�&zwj;â™€ï¸�",bat:"ðŸ¦‡",bath:"ðŸ›€",bathtub:"ðŸ›�",battery:"ðŸ”‹",beach_umbrella:"ðŸ�–",bear:"ðŸ�»",bed:"ðŸ›�",bee:"ðŸ��",beer:"ðŸ�º",beers:"ðŸ�»",beetle:"ðŸ�ž",beginner:"ðŸ”°",bell:"ðŸ””",bellhop_bell:"ðŸ›Ž",bento:"ðŸ�±",biking_man:"ðŸš´",bike:"ðŸš²",biking_woman:"ðŸš´&zwj;â™€ï¸�",bikini:"ðŸ‘™",biohazard:"â˜£ï¸�",bird:"ðŸ�¦",birthday:"ðŸŽ‚",black_circle:"âš«ï¸�",black_flag:"ðŸ�´",black_heart:"ðŸ–¤",black_joker:"ðŸƒ�",black_large_square:"â¬›ï¸�",black_medium_small_square:"â—¾ï¸�",black_medium_square:"â—¼ï¸�",black_nib:"âœ’ï¸�",black_small_square:"â–ªï¸�",black_square_button:"ðŸ”²",blonde_man:"ðŸ‘±",blonde_woman:"ðŸ‘±&zwj;â™€ï¸�",blossom:"ðŸŒ¼",blowfish:"ðŸ�¡",blue_book:"ðŸ“˜",blue_car:"ðŸš™",blue_heart:"ðŸ’™",blush:"ðŸ˜Š",boar:"ðŸ�—",boat:"â›µï¸�",bomb:"ðŸ’£",book:"ðŸ“–",bookmark:"ðŸ”–",bookmark_tabs:"ðŸ“‘",books:"ðŸ“š",boom:"ðŸ’¥",boot:"ðŸ‘¢",bouquet:"ðŸ’�",bowing_man:"ðŸ™‡",bow_and_arrow:"ðŸ�¹",bowing_woman:"ðŸ™‡&zwj;â™€ï¸�",bowling:"ðŸŽ³",boxing_glove:"ðŸ¥Š",boy:"ðŸ‘¦",bread:"ðŸ�ž",bride_with_veil:"ðŸ‘°",bridge_at_night:"ðŸŒ‰",briefcase:"ðŸ’¼",broken_heart:"ðŸ’”",bug:"ðŸ�›",building_construction:"ðŸ�—",bulb:"ðŸ’¡",bullettrain_front:"ðŸš…",bullettrain_side:"ðŸš„",burrito:"ðŸŒ¯",bus:"ðŸšŒ",business_suit_levitating:"ðŸ•´",busstop:"ðŸš�",bust_in_silhouette:"ðŸ‘¤",busts_in_silhouette:"ðŸ‘¥",butterfly:"ðŸ¦‹",cactus:"ðŸŒµ",cake:"ðŸ�°",calendar:"ðŸ“†",call_me_hand:"ðŸ¤™",calling:"ðŸ“²",camel:"ðŸ�«",camera:"ðŸ“·",camera_flash:"ðŸ“¸",camping:"ðŸ�•",cancer:"â™‹ï¸�",candle:"ðŸ•¯",candy:"ðŸ�¬",canoe:"ðŸ›¶",capital_abcd:"ðŸ” ",capricorn:"â™‘ï¸�",car:"ðŸš—",card_file_box:"ðŸ—ƒ",card_index:"ðŸ“‡",card_index_dividers:"ðŸ—‚",carousel_horse:"ðŸŽ ",carrot:"ðŸ¥•",cat:"ðŸ�±",cat2:"ðŸ�ˆ",cd:"ðŸ’¿",chains:"â›“",champagne:"ðŸ�¾",chart:"ðŸ’¹",chart_with_downwards_trend:"ðŸ“‰",chart_with_upwards_trend:"ðŸ“ˆ",checkered_flag:"ðŸ��",cheese:"ðŸ§€",cherries:"ðŸ�’",cherry_blossom:"ðŸŒ¸",chestnut:"ðŸŒ°",chicken:"ðŸ�”",children_crossing:"ðŸš¸",chipmunk:"ðŸ�¿",chocolate_bar:"ðŸ�«",christmas_tree:"ðŸŽ„",church:"â›ªï¸�",cinema:"ðŸŽ¦",circus_tent:"ðŸŽª",city_sunrise:"ðŸŒ‡",city_sunset:"ðŸŒ†",cityscape:"ðŸ�™",cl:"ðŸ†‘",clamp:"ðŸ—œ",clap:"ðŸ‘�",clapper:"ðŸŽ¬",classical_building:"ðŸ�›",clinking_glasses:"ðŸ¥‚",clipboard:"ðŸ“‹",clock1:"ðŸ•�",clock10:"ðŸ•™",clock1030:"ðŸ•¥",clock11:"ðŸ•š",clock1130:"ðŸ•¦",clock12:"ðŸ•›",clock1230:"ðŸ•§",clock130:"ðŸ•œ",clock2:"ðŸ•‘",clock230:"ðŸ•�",clock3:"ðŸ•’",clock330:"ðŸ•ž",clock4:"ðŸ•“",clock430:"ðŸ•Ÿ",clock5:"ðŸ•”",clock530:"ðŸ• ",clock6:"ðŸ••",clock630:"ðŸ•¡",clock7:"ðŸ•–",clock730:"ðŸ•¢",clock8:"ðŸ•—",clock830:"ðŸ•£",clock9:"ðŸ•˜",clock930:"ðŸ•¤",closed_book:"ðŸ“•",closed_lock_with_key:"ðŸ”�",closed_umbrella:"ðŸŒ‚",cloud:"â˜�ï¸�",cloud_with_lightning:"ðŸŒ©",cloud_with_lightning_and_rain:"â›ˆ",cloud_with_rain:"ðŸŒ§",cloud_with_snow:"ðŸŒ¨",clown_face:"ðŸ¤¡",clubs:"â™£ï¸�",cocktail:"ðŸ�¸",coffee:"â˜•ï¸�",coffin:"âš°ï¸�",cold_sweat:"ðŸ˜°",comet:"â˜„ï¸�",computer:"ðŸ’»",computer_mouse:"ðŸ–±",confetti_ball:"ðŸŽŠ",confounded:"ðŸ˜–",confused:"ðŸ˜•",congratulations:"ãŠ—ï¸�",construction:"ðŸš§",construction_worker_man:"ðŸ‘·",construction_worker_woman:"ðŸ‘·&zwj;â™€ï¸�",control_knobs:"ðŸŽ›",convenience_store:"ðŸ�ª",cookie:"ðŸ�ª",cool:"ðŸ†’",policeman:"ðŸ‘®",copyright:"Â©ï¸�",corn:"ðŸŒ½",couch_and_lamp:"ðŸ›‹",couple:"ðŸ‘«",couple_with_heart_woman_man:"ðŸ’‘",couple_with_heart_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ‘¨",couple_with_heart_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ‘©",couplekiss_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘¨",couplekiss_man_woman:"ðŸ’�",couplekiss_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘©",cow:"ðŸ�®",cow2:"ðŸ�„",cowboy_hat_face:"ðŸ¤ ",crab:"ðŸ¦€",crayon:"ðŸ–�",credit_card:"ðŸ’³",crescent_moon:"ðŸŒ™",cricket:"ðŸ��",crocodile:"ðŸ�Š",croissant:"ðŸ¥�",crossed_fingers:"ðŸ¤ž",crossed_flags:"ðŸŽŒ",crossed_swords:"âš”ï¸�",crown:"ðŸ‘‘",cry:"ðŸ˜¢",crying_cat_face:"ðŸ˜¿",crystal_ball:"ðŸ”®",cucumber:"ðŸ¥’",cupid:"ðŸ’˜",curly_loop:"âž°",currency_exchange:"ðŸ’±",curry:"ðŸ�›",custard:"ðŸ�®",customs:"ðŸ›ƒ",cyclone:"ðŸŒ€",dagger:"ðŸ—¡",dancer:"ðŸ’ƒ",dancing_women:"ðŸ‘¯",dancing_men:"ðŸ‘¯&zwj;â™‚ï¸�",dango:"ðŸ�¡",dark_sunglasses:"ðŸ•¶",dart:"ðŸŽ¯",dash:"ðŸ’¨",date:"ðŸ“…",deciduous_tree:"ðŸŒ³",deer:"ðŸ¦Œ",department_store:"ðŸ�¬",derelict_house:"ðŸ�š",desert:"ðŸ�œ",desert_island:"ðŸ��",desktop_computer:"ðŸ–¥",male_detective:"ðŸ•µï¸�",diamond_shape_with_a_dot_inside:"ðŸ’ ",diamonds:"â™¦ï¸�",disappointed:"ðŸ˜ž",disappointed_relieved:"ðŸ˜¥",dizzy:"ðŸ’«",dizzy_face:"ðŸ˜µ",do_not_litter:"ðŸš¯",dog:"ðŸ�¶",dog2:"ðŸ�•",dollar:"ðŸ’µ",dolls:"ðŸŽŽ",dolphin:"ðŸ�¬",door:"ðŸšª",doughnut:"ðŸ�©",dove:"ðŸ•Š",dragon:"ðŸ�‰",dragon_face:"ðŸ�²",dress:"ðŸ‘—",dromedary_camel:"ðŸ�ª",drooling_face:"ðŸ¤¤",droplet:"ðŸ’§",drum:"ðŸ¥�",duck:"ðŸ¦†",dvd:"ðŸ“€","e-mail":"ðŸ“§",eagle:"ðŸ¦…",ear:"ðŸ‘‚",ear_of_rice:"ðŸŒ¾",earth_africa:"ðŸŒ�",earth_americas:"ðŸŒŽ",earth_asia:"ðŸŒ�",egg:"ðŸ¥š",eggplant:"ðŸ�†",eight_pointed_black_star:"âœ´ï¸�",eight_spoked_asterisk:"âœ³ï¸�",electric_plug:"ðŸ”Œ",elephant:"ðŸ�˜",email:"âœ‰ï¸�",end:"ðŸ”š",envelope_with_arrow:"ðŸ“©",euro:"ðŸ’¶",european_castle:"ðŸ�°",european_post_office:"ðŸ�¤",evergreen_tree:"ðŸŒ²",exclamation:"â�—ï¸�",expressionless:"ðŸ˜‘",eye:"ðŸ‘�",eye_speech_bubble:"ðŸ‘�&zwj;ðŸ—¨",eyeglasses:"ðŸ‘“",eyes:"ðŸ‘€",face_with_head_bandage:"ðŸ¤•",face_with_thermometer:"ðŸ¤’",fist_oncoming:"ðŸ‘Š",factory:"ðŸ�­",fallen_leaf:"ðŸ�‚",family_man_woman_boy:"ðŸ‘ª",family_man_boy:"ðŸ‘¨&zwj;ðŸ‘¦",family_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_girl:"ðŸ‘¨&zwj;ðŸ‘§",family_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_man_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦",family_man_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_man_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§",family_man_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_woman_boy_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_woman_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§",family_man_woman_girl_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_woman_girl_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_boy:"ðŸ‘©&zwj;ðŸ‘¦",family_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_girl:"ðŸ‘©&zwj;ðŸ‘§",family_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_woman_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦",family_woman_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_woman_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§",family_woman_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",fast_forward:"â�©",fax:"ðŸ“ ",fearful:"ðŸ˜¨",feet:"ðŸ�¾",female_detective:"ðŸ•µï¸�&zwj;â™€ï¸�",ferris_wheel:"ðŸŽ¡",ferry:"â›´",field_hockey:"ðŸ�‘",file_cabinet:"ðŸ—„",file_folder:"ðŸ“�",film_projector:"ðŸ“½",film_strip:"ðŸŽž",fire:"ðŸ”¥",fire_engine:"ðŸš’",fireworks:"ðŸŽ†",first_quarter_moon:"ðŸŒ“",first_quarter_moon_with_face:"ðŸŒ›",fish:"ðŸ�Ÿ",fish_cake:"ðŸ�¥",fishing_pole_and_fish:"ðŸŽ£",fist_raised:"âœŠ",fist_left:"ðŸ¤›",fist_right:"ðŸ¤œ",flags:"ðŸŽ�",flashlight:"ðŸ”¦",fleur_de_lis:"âšœï¸�",flight_arrival:"ðŸ›¬",flight_departure:"ðŸ›«",floppy_disk:"ðŸ’¾",flower_playing_cards:"ðŸŽ´",flushed:"ðŸ˜³",fog:"ðŸŒ«",foggy:"ðŸŒ�",football:"ðŸ�ˆ",footprints:"ðŸ‘£",fork_and_knife:"ðŸ�´",fountain:"â›²ï¸�",fountain_pen:"ðŸ–‹",four_leaf_clover:"ðŸ�€",fox_face:"ðŸ¦Š",framed_picture:"ðŸ–¼",free:"ðŸ†“",fried_egg:"ðŸ�³",fried_shrimp:"ðŸ�¤",fries:"ðŸ�Ÿ",frog:"ðŸ�¸",frowning:"ðŸ˜¦",frowning_face:"â˜¹ï¸�",frowning_man:"ðŸ™�&zwj;â™‚ï¸�",frowning_woman:"ðŸ™�",middle_finger:"ðŸ–•",fuelpump:"â›½ï¸�",full_moon:"ðŸŒ•",full_moon_with_face:"ðŸŒ�",funeral_urn:"âš±ï¸�",game_die:"ðŸŽ²",gear:"âš™ï¸�",gem:"ðŸ’Ž",gemini:"â™Šï¸�",ghost:"ðŸ‘»",gift:"ðŸŽ�",gift_heart:"ðŸ’�",girl:"ðŸ‘§",globe_with_meridians:"ðŸŒ�",goal_net:"ðŸ¥…",goat:"ðŸ��",golf:"â›³ï¸�",golfing_man:"ðŸ�Œï¸�",golfing_woman:"ðŸ�Œï¸�&zwj;â™€ï¸�",gorilla:"ðŸ¦�",grapes:"ðŸ�‡",green_apple:"ðŸ��",green_book:"ðŸ“—",green_heart:"ðŸ’š",green_salad:"ðŸ¥—",grey_exclamation:"â�•",grey_question:"â�”",grimacing:"ðŸ˜¬",grin:"ðŸ˜�",grinning:"ðŸ˜€",guardsman:"ðŸ’‚",guardswoman:"ðŸ’‚&zwj;â™€ï¸�",guitar:"ðŸŽ¸",gun:"ðŸ”«",haircut_woman:"ðŸ’‡",haircut_man:"ðŸ’‡&zwj;â™‚ï¸�",hamburger:"ðŸ�”",hammer:"ðŸ”¨",hammer_and_pick:"âš’",hammer_and_wrench:"ðŸ› ",hamster:"ðŸ�¹",hand:"âœ‹",handbag:"ðŸ‘œ",handshake:"ðŸ¤�",hankey:"ðŸ’©",hatched_chick:"ðŸ�¥",hatching_chick:"ðŸ�£",headphones:"ðŸŽ§",hear_no_evil:"ðŸ™‰",heart:"â�¤ï¸�",heart_decoration:"ðŸ’Ÿ",heart_eyes:"ðŸ˜�",heart_eyes_cat:"ðŸ˜»",heartbeat:"ðŸ’“",heartpulse:"ðŸ’—",hearts:"â™¥ï¸�",heavy_check_mark:"âœ”ï¸�",heavy_division_sign:"âž—",heavy_dollar_sign:"ðŸ’²",heavy_heart_exclamation:"â�£ï¸�",heavy_minus_sign:"âž–",heavy_multiplication_x:"âœ–ï¸�",heavy_plus_sign:"âž•",helicopter:"ðŸš�",herb:"ðŸŒ¿",hibiscus:"ðŸŒº",high_brightness:"ðŸ”†",high_heel:"ðŸ‘ ",hocho:"ðŸ”ª",hole:"ðŸ•³",honey_pot:"ðŸ�¯",horse:"ðŸ�´",horse_racing:"ðŸ�‡",hospital:"ðŸ�¥",hot_pepper:"ðŸŒ¶",hotdog:"ðŸŒ­",hotel:"ðŸ�¨",hotsprings:"â™¨ï¸�",hourglass:"âŒ›ï¸�",hourglass_flowing_sand:"â�³",house:"ðŸ� ",house_with_garden:"ðŸ�¡",houses:"ðŸ�˜",hugs:"ðŸ¤—",hushed:"ðŸ˜¯",ice_cream:"ðŸ�¨",ice_hockey:"ðŸ�’",ice_skate:"â›¸",icecream:"ðŸ�¦",id:"ðŸ†”",ideograph_advantage:"ðŸ‰�",imp:"ðŸ‘¿",inbox_tray:"ðŸ“¥",incoming_envelope:"ðŸ“¨",tipping_hand_woman:"ðŸ’�",information_source:"â„¹ï¸�",innocent:"ðŸ˜‡",interrobang:"â�‰ï¸�",iphone:"ðŸ“±",izakaya_lantern:"ðŸ�®",jack_o_lantern:"ðŸŽƒ",japan:"ðŸ—¾",japanese_castle:"ðŸ�¯",japanese_goblin:"ðŸ‘º",japanese_ogre:"ðŸ‘¹",jeans:"ðŸ‘–",joy:"ðŸ˜‚",joy_cat:"ðŸ˜¹",joystick:"ðŸ•¹",kaaba:"ðŸ•‹",key:"ðŸ”‘",keyboard:"âŒ¨ï¸�",keycap_ten:"ðŸ”Ÿ",kick_scooter:"ðŸ›´",kimono:"ðŸ‘˜",kiss:"ðŸ’‹",kissing:"ðŸ˜—",kissing_cat:"ðŸ˜½",kissing_closed_eyes:"ðŸ˜š",kissing_heart:"ðŸ˜˜",kissing_smiling_eyes:"ðŸ˜™",kiwi_fruit:"ðŸ¥�",koala:"ðŸ�¨",koko:"ðŸˆ�",label:"ðŸ�·",large_blue_circle:"ðŸ”µ",large_blue_diamond:"ðŸ”·",large_orange_diamond:"ðŸ”¶",last_quarter_moon:"ðŸŒ—",last_quarter_moon_with_face:"ðŸŒœ",latin_cross:"âœ�ï¸�",laughing:"ðŸ˜†",leaves:"ðŸ�ƒ",ledger:"ðŸ“’",left_luggage:"ðŸ›…",left_right_arrow:"â†”ï¸�",leftwards_arrow_with_hook:"â†©ï¸�",lemon:"ðŸ�‹",leo:"â™Œï¸�",leopard:"ðŸ�†",level_slider:"ðŸŽš",libra:"â™Žï¸�",light_rail:"ðŸšˆ",link:"ðŸ”—",lion:"ðŸ¦�",lips:"ðŸ‘„",lipstick:"ðŸ’„",lizard:"ðŸ¦Ž",lock:"ðŸ”’",lock_with_ink_pen:"ðŸ”�",lollipop:"ðŸ�­",loop:"âž¿",loud_sound:"ðŸ”Š",loudspeaker:"ðŸ“¢",love_hotel:"ðŸ�©",love_letter:"ðŸ’Œ",low_brightness:"ðŸ”…",lying_face:"ðŸ¤¥",m:"â“‚ï¸�",mag:"ðŸ”�",mag_right:"ðŸ”Ž",mahjong:"ðŸ€„ï¸�",mailbox:"ðŸ“«",mailbox_closed:"ðŸ“ª",mailbox_with_mail:"ðŸ“¬",mailbox_with_no_mail:"ðŸ“­",man:"ðŸ‘¨",man_artist:"ðŸ‘¨&zwj;ðŸŽ¨",man_astronaut:"ðŸ‘¨&zwj;ðŸš€",man_cartwheeling:"ðŸ¤¸&zwj;â™‚ï¸�",man_cook:"ðŸ‘¨&zwj;ðŸ�³",man_dancing:"ðŸ•º",man_facepalming:"ðŸ¤¦&zwj;â™‚ï¸�",man_factory_worker:"ðŸ‘¨&zwj;ðŸ�­",man_farmer:"ðŸ‘¨&zwj;ðŸŒ¾",man_firefighter:"ðŸ‘¨&zwj;ðŸš’",man_health_worker:"ðŸ‘¨&zwj;âš•ï¸�",man_in_tuxedo:"ðŸ¤µ",man_judge:"ðŸ‘¨&zwj;âš–ï¸�",man_juggling:"ðŸ¤¹&zwj;â™‚ï¸�",man_mechanic:"ðŸ‘¨&zwj;ðŸ”§",man_office_worker:"ðŸ‘¨&zwj;ðŸ’¼",man_pilot:"ðŸ‘¨&zwj;âœˆï¸�",man_playing_handball:"ðŸ¤¾&zwj;â™‚ï¸�",man_playing_water_polo:"ðŸ¤½&zwj;â™‚ï¸�",man_scientist:"ðŸ‘¨&zwj;ðŸ”¬",man_shrugging:"ðŸ¤·&zwj;â™‚ï¸�",man_singer:"ðŸ‘¨&zwj;ðŸŽ¤",man_student:"ðŸ‘¨&zwj;ðŸŽ“",man_teacher:"ðŸ‘¨&zwj;ðŸ�«",man_technologist:"ðŸ‘¨&zwj;ðŸ’»",man_with_gua_pi_mao:"ðŸ‘²",man_with_turban:"ðŸ‘³",tangerine:"ðŸ�Š",mans_shoe:"ðŸ‘ž",mantelpiece_clock:"ðŸ•°",maple_leaf:"ðŸ��",martial_arts_uniform:"ðŸ¥‹",mask:"ðŸ˜·",massage_woman:"ðŸ’†",massage_man:"ðŸ’†&zwj;â™‚ï¸�",meat_on_bone:"ðŸ�–",medal_military:"ðŸŽ–",medal_sports:"ðŸ�…",mega:"ðŸ“£",melon:"ðŸ�ˆ",memo:"ðŸ“�",men_wrestling:"ðŸ¤¼&zwj;â™‚ï¸�",menorah:"ðŸ•Ž",mens:"ðŸš¹",metal:"ðŸ¤˜",metro:"ðŸš‡",microphone:"ðŸŽ¤",microscope:"ðŸ”¬",milk_glass:"ðŸ¥›",milky_way:"ðŸŒŒ",minibus:"ðŸš�",minidisc:"ðŸ’½",mobile_phone_off:"ðŸ“´",money_mouth_face:"ðŸ¤‘",money_with_wings:"ðŸ’¸",moneybag:"ðŸ’°",monkey:"ðŸ�’",monkey_face:"ðŸ�µ",monorail:"ðŸš�",moon:"ðŸŒ”",mortar_board:"ðŸŽ“",mosque:"ðŸ•Œ",motor_boat:"ðŸ›¥",motor_scooter:"ðŸ›µ",motorcycle:"ðŸ��",motorway:"ðŸ›£",mount_fuji:"ðŸ—»",mountain:"â›°",mountain_biking_man:"ðŸšµ",mountain_biking_woman:"ðŸšµ&zwj;â™€ï¸�",mountain_cableway:"ðŸš ",mountain_railway:"ðŸšž",mountain_snow:"ðŸ�”",mouse:"ðŸ�­",mouse2:"ðŸ��",movie_camera:"ðŸŽ¥",moyai:"ðŸ—¿",mrs_claus:"ðŸ¤¶",muscle:"ðŸ’ª",mushroom:"ðŸ�„",musical_keyboard:"ðŸŽ¹",musical_note:"ðŸŽµ",musical_score:"ðŸŽ¼",mute:"ðŸ”‡",nail_care:"ðŸ’…",name_badge:"ðŸ“›",national_park:"ðŸ�ž",nauseated_face:"ðŸ¤¢",necktie:"ðŸ‘”",negative_squared_cross_mark:"â�Ž",nerd_face:"ðŸ¤“",neutral_face:"ðŸ˜�",new:"ðŸ†•",new_moon:"ðŸŒ‘",new_moon_with_face:"ðŸŒš",newspaper:"ðŸ“°",newspaper_roll:"ðŸ—ž",next_track_button:"â�­",ng:"ðŸ†–",no_good_man:"ðŸ™…&zwj;â™‚ï¸�",no_good_woman:"ðŸ™…",night_with_stars:"ðŸŒƒ",no_bell:"ðŸ”•",no_bicycles:"ðŸš³",no_entry:"â›”ï¸�",no_entry_sign:"ðŸš«",no_mobile_phones:"ðŸ“µ",no_mouth:"ðŸ˜¶",no_pedestrians:"ðŸš·",no_smoking:"ðŸš­","non-potable_water":"ðŸš±",nose:"ðŸ‘ƒ",notebook:"ðŸ““",notebook_with_decorative_cover:"ðŸ“”",notes:"ðŸŽ¶",nut_and_bolt:"ðŸ”©",o:"â­•ï¸�",o2:"ðŸ…¾ï¸�",ocean:"ðŸŒŠ",octopus:"ðŸ�™",oden:"ðŸ�¢",office:"ðŸ�¢",oil_drum:"ðŸ›¢",ok:"ðŸ†—",ok_hand:"ðŸ‘Œ",ok_man:"ðŸ™†&zwj;â™‚ï¸�",ok_woman:"ðŸ™†",old_key:"ðŸ—�",older_man:"ðŸ‘´",older_woman:"ðŸ‘µ",om:"ðŸ•‰",on:"ðŸ”›",oncoming_automobile:"ðŸš˜",oncoming_bus:"ðŸš�",oncoming_police_car:"ðŸš”",oncoming_taxi:"ðŸš–",open_file_folder:"ðŸ“‚",open_hands:"ðŸ‘�",open_mouth:"ðŸ˜®",open_umbrella:"â˜‚ï¸�",ophiuchus:"â›Ž",orange_book:"ðŸ“™",orthodox_cross:"â˜¦ï¸�",outbox_tray:"ðŸ“¤",owl:"ðŸ¦‰",ox:"ðŸ�‚",package:"ðŸ“¦",page_facing_up:"ðŸ“„",page_with_curl:"ðŸ“ƒ",pager:"ðŸ“Ÿ",paintbrush:"ðŸ–Œ",palm_tree:"ðŸŒ´",pancakes:"ðŸ¥ž",panda_face:"ðŸ�¼",paperclip:"ðŸ“Ž",paperclips:"ðŸ–‡",parasol_on_ground:"â›±",parking:"ðŸ…¿ï¸�",part_alternation_mark:"ã€½ï¸�",partly_sunny:"â›…ï¸�",passenger_ship:"ðŸ›³",passport_control:"ðŸ›‚",pause_button:"â�¸",peace_symbol:"â˜®ï¸�",peach:"ðŸ�‘",peanuts:"ðŸ¥œ",pear:"ðŸ��",pen:"ðŸ–Š",pencil2:"âœ�ï¸�",penguin:"ðŸ�§",pensive:"ðŸ˜”",performing_arts:"ðŸŽ­",persevere:"ðŸ˜£",person_fencing:"ðŸ¤º",pouting_woman:"ðŸ™Ž",phone:"â˜Žï¸�",pick:"â›�",pig:"ðŸ�·",pig2:"ðŸ�–",pig_nose:"ðŸ�½",pill:"ðŸ’Š",pineapple:"ðŸ��",ping_pong:"ðŸ�“",pisces:"â™“ï¸�",pizza:"ðŸ�•",place_of_worship:"ðŸ›�",plate_with_cutlery:"ðŸ�½",play_or_pause_button:"â�¯",point_down:"ðŸ‘‡",point_left:"ðŸ‘ˆ",point_right:"ðŸ‘‰",point_up:"â˜�ï¸�",point_up_2:"ðŸ‘†",police_car:"ðŸš“",policewoman:"ðŸ‘®&zwj;â™€ï¸�",poodle:"ðŸ�©",popcorn:"ðŸ�¿",post_office:"ðŸ�£",postal_horn:"ðŸ“¯",postbox:"ðŸ“®",potable_water:"ðŸš°",potato:"ðŸ¥”",pouch:"ðŸ‘�",poultry_leg:"ðŸ�—",pound:"ðŸ’·",rage:"ðŸ˜¡",pouting_cat:"ðŸ˜¾",pouting_man:"ðŸ™Ž&zwj;â™‚ï¸�",pray:"ðŸ™�",prayer_beads:"ðŸ“¿",pregnant_woman:"ðŸ¤°",previous_track_button:"â�®",prince:"ðŸ¤´",princess:"ðŸ‘¸",printer:"ðŸ–¨",purple_heart:"ðŸ’œ",purse:"ðŸ‘›",pushpin:"ðŸ“Œ",put_litter_in_its_place:"ðŸš®",question:"â�“",rabbit:"ðŸ�°",rabbit2:"ðŸ�‡",racehorse:"ðŸ�Ž",racing_car:"ðŸ�Ž",radio:"ðŸ“»",radio_button:"ðŸ”˜",radioactive:"â˜¢ï¸�",railway_car:"ðŸšƒ",railway_track:"ðŸ›¤",rainbow:"ðŸŒˆ",rainbow_flag:"ðŸ�³ï¸�&zwj;ðŸŒˆ",raised_back_of_hand:"ðŸ¤š",raised_hand_with_fingers_splayed:"ðŸ–�",raised_hands:"ðŸ™Œ",raising_hand_woman:"ðŸ™‹",raising_hand_man:"ðŸ™‹&zwj;â™‚ï¸�",ram:"ðŸ��",ramen:"ðŸ�œ",rat:"ðŸ�€",record_button:"â�º",recycle:"â™»ï¸�",red_circle:"ðŸ”´",registered:"Â®ï¸�",relaxed:"â˜ºï¸�",relieved:"ðŸ˜Œ",reminder_ribbon:"ðŸŽ—",repeat:"ðŸ”�",repeat_one:"ðŸ”‚",rescue_worker_helmet:"â›‘",restroom:"ðŸš»",revolving_hearts:"ðŸ’ž",rewind:"â�ª",rhinoceros:"ðŸ¦�",ribbon:"ðŸŽ€",rice:"ðŸ�š",rice_ball:"ðŸ�™",rice_cracker:"ðŸ�˜",rice_scene:"ðŸŽ‘",right_anger_bubble:"ðŸ—¯",ring:"ðŸ’�",robot:"ðŸ¤–",rocket:"ðŸš€",rofl:"ðŸ¤£",roll_eyes:"ðŸ™„",roller_coaster:"ðŸŽ¢",rooster:"ðŸ�“",rose:"ðŸŒ¹",rosette:"ðŸ�µ",rotating_light:"ðŸš¨",round_pushpin:"ðŸ“�",rowing_man:"ðŸš£",rowing_woman:"ðŸš£&zwj;â™€ï¸�",rugby_football:"ðŸ�‰",running_man:"ðŸ�ƒ",running_shirt_with_sash:"ðŸŽ½",running_woman:"ðŸ�ƒ&zwj;â™€ï¸�",sa:"ðŸˆ‚ï¸�",sagittarius:"â™�ï¸�",sake:"ðŸ�¶",sandal:"ðŸ‘¡",santa:"ðŸŽ…",satellite:"ðŸ“¡",saxophone:"ðŸŽ·",school:"ðŸ�«",school_satchel:"ðŸŽ’",scissors:"âœ‚ï¸�",scorpion:"ðŸ¦‚",scorpius:"â™�ï¸�",scream:"ðŸ˜±",scream_cat:"ðŸ™€",scroll:"ðŸ“œ",seat:"ðŸ’º",secret:"ãŠ™ï¸�",see_no_evil:"ðŸ™ˆ",seedling:"ðŸŒ±",selfie:"ðŸ¤³",shallow_pan_of_food:"ðŸ¥˜",shamrock:"â˜˜ï¸�",shark:"ðŸ¦ˆ",shaved_ice:"ðŸ�§",sheep:"ðŸ�‘",shell:"ðŸ�š",shield:"ðŸ›¡",shinto_shrine:"â›©",ship:"ðŸš¢",shirt:"ðŸ‘•",shopping:"ðŸ›�",shopping_cart:"ðŸ›’",shower:"ðŸš¿",shrimp:"ðŸ¦�",signal_strength:"ðŸ“¶",six_pointed_star:"ðŸ”¯",ski:"ðŸŽ¿",skier:"â›·",skull:"ðŸ’€",skull_and_crossbones:"â˜ ï¸�",sleeping:"ðŸ˜´",sleeping_bed:"ðŸ›Œ",sleepy:"ðŸ˜ª",slightly_frowning_face:"ðŸ™�",slightly_smiling_face:"ðŸ™‚",slot_machine:"ðŸŽ°",small_airplane:"ðŸ›©",small_blue_diamond:"ðŸ”¹",small_orange_diamond:"ðŸ”¸",small_red_triangle:"ðŸ”º",small_red_triangle_down:"ðŸ”»",smile:"ðŸ˜„",smile_cat:"ðŸ˜¸",smiley:"ðŸ˜ƒ",smiley_cat:"ðŸ˜º",smiling_imp:"ðŸ˜ˆ",smirk:"ðŸ˜�",smirk_cat:"ðŸ˜¼",smoking:"ðŸš¬",snail:"ðŸ�Œ",snake:"ðŸ��",sneezing_face:"ðŸ¤§",snowboarder:"ðŸ�‚",snowflake:"â�„ï¸�",snowman:"â›„ï¸�",snowman_with_snow:"â˜ƒï¸�",sob:"ðŸ˜­",soccer:"âš½ï¸�",soon:"ðŸ”œ",sos:"ðŸ†˜",sound:"ðŸ”‰",space_invader:"ðŸ‘¾",spades:"â™ ï¸�",spaghetti:"ðŸ��",sparkle:"â�‡ï¸�",sparkler:"ðŸŽ‡",sparkles:"âœ¨",sparkling_heart:"ðŸ’–",speak_no_evil:"ðŸ™Š",speaker:"ðŸ”ˆ",speaking_head:"ðŸ—£",speech_balloon:"ðŸ’¬",speedboat:"ðŸš¤",spider:"ðŸ•·",spider_web:"ðŸ•¸",spiral_calendar:"ðŸ—“",spiral_notepad:"ðŸ—’",spoon:"ðŸ¥„",squid:"ðŸ¦‘",stadium:"ðŸ�Ÿ",star:"â­�ï¸�",star2:"ðŸŒŸ",star_and_crescent:"â˜ªï¸�",star_of_david:"âœ¡ï¸�",stars:"ðŸŒ ",station:"ðŸš‰",statue_of_liberty:"ðŸ—½",steam_locomotive:"ðŸš‚",stew:"ðŸ�²",stop_button:"â�¹",stop_sign:"ðŸ›‘",stopwatch:"â�±",straight_ruler:"ðŸ“�",strawberry:"ðŸ�“",stuck_out_tongue:"ðŸ˜›",stuck_out_tongue_closed_eyes:"ðŸ˜�",stuck_out_tongue_winking_eye:"ðŸ˜œ",studio_microphone:"ðŸŽ™",stuffed_flatbread:"ðŸ¥™",sun_behind_large_cloud:"ðŸŒ¥",sun_behind_rain_cloud:"ðŸŒ¦",sun_behind_small_cloud:"ðŸŒ¤",sun_with_face:"ðŸŒž",sunflower:"ðŸŒ»",sunglasses:"ðŸ˜Ž",sunny:"â˜€ï¸�",sunrise:"ðŸŒ…",sunrise_over_mountains:"ðŸŒ„",surfing_man:"ðŸ�„",surfing_woman:"ðŸ�„&zwj;â™€ï¸�",sushi:"ðŸ�£",suspension_railway:"ðŸšŸ",sweat:"ðŸ˜“",sweat_drops:"ðŸ’¦",sweat_smile:"ðŸ˜…",sweet_potato:"ðŸ� ",swimming_man:"ðŸ�Š",swimming_woman:"ðŸ�Š&zwj;â™€ï¸�",symbols:"ðŸ”£",synagogue:"ðŸ•�",syringe:"ðŸ’‰",taco:"ðŸŒ®",tada:"ðŸŽ‰",tanabata_tree:"ðŸŽ‹",taurus:"â™‰ï¸�",taxi:"ðŸš•",tea:"ðŸ�µ",telephone_receiver:"ðŸ“ž",telescope:"ðŸ”­",tennis:"ðŸŽ¾",tent:"â›ºï¸�",thermometer:"ðŸŒ¡",thinking:"ðŸ¤”",thought_balloon:"ðŸ’­",ticket:"ðŸŽ«",tickets:"ðŸŽŸ",tiger:"ðŸ�¯",tiger2:"ðŸ�…",timer_clock:"â�²",tipping_hand_man:"ðŸ’�&zwj;â™‚ï¸�",tired_face:"ðŸ˜«",tm:"â„¢ï¸�",toilet:"ðŸš½",tokyo_tower:"ðŸ—¼",tomato:"ðŸ�…",tongue:"ðŸ‘…",top:"ðŸ”�",tophat:"ðŸŽ©",tornado:"ðŸŒª",trackball:"ðŸ–²",tractor:"ðŸšœ",traffic_light:"ðŸš¥",train:"ðŸš‹",train2:"ðŸš†",tram:"ðŸšŠ",triangular_flag_on_post:"ðŸš©",triangular_ruler:"ðŸ“�",trident:"ðŸ”±",triumph:"ðŸ˜¤",trolleybus:"ðŸšŽ",trophy:"ðŸ�†",tropical_drink:"ðŸ�¹",tropical_fish:"ðŸ� ",truck:"ðŸšš",trumpet:"ðŸŽº",tulip:"ðŸŒ·",tumbler_glass:"ðŸ¥ƒ",turkey:"ðŸ¦ƒ",turtle:"ðŸ�¢",tv:"ðŸ“º",twisted_rightwards_arrows:"ðŸ”€",two_hearts:"ðŸ’•",two_men_holding_hands:"ðŸ‘¬",two_women_holding_hands:"ðŸ‘­",u5272:"ðŸˆ¹",u5408:"ðŸˆ´",u55b6:"ðŸˆº",u6307:"ðŸˆ¯ï¸�",u6708:"ðŸˆ·ï¸�",u6709:"ðŸˆ¶",u6e80:"ðŸˆµ",u7121:"ðŸˆšï¸�",u7533:"ðŸˆ¸",u7981:"ðŸˆ²",u7a7a:"ðŸˆ³",umbrella:"â˜”ï¸�",unamused:"ðŸ˜’",underage:"ðŸ”ž",unicorn:"ðŸ¦„",unlock:"ðŸ”“",up:"ðŸ†™",upside_down_face:"ðŸ™ƒ",v:"âœŒï¸�",vertical_traffic_light:"ðŸš¦",vhs:"ðŸ“¼",vibration_mode:"ðŸ“³",video_camera:"ðŸ“¹",video_game:"ðŸŽ®",violin:"ðŸŽ»",virgo:"â™�ï¸�",volcano:"ðŸŒ‹",volleyball:"ðŸ��",vs:"ðŸ†š",vulcan_salute:"ðŸ––",walking_man:"ðŸš¶",walking_woman:"ðŸš¶&zwj;â™€ï¸�",waning_crescent_moon:"ðŸŒ˜",waning_gibbous_moon:"ðŸŒ–",warning:"âš ï¸�",wastebasket:"ðŸ—‘",watch:"âŒšï¸�",water_buffalo:"ðŸ�ƒ",watermelon:"ðŸ�‰",wave:"ðŸ‘‹",wavy_dash:"ã€°ï¸�",waxing_crescent_moon:"ðŸŒ’",wc:"ðŸš¾",weary:"ðŸ˜©",wedding:"ðŸ’’",weight_lifting_man:"ðŸ�‹ï¸�",weight_lifting_woman:"ðŸ�‹ï¸�&zwj;â™€ï¸�",whale:"ðŸ�³",whale2:"ðŸ�‹",wheel_of_dharma:"â˜¸ï¸�",wheelchair:"â™¿ï¸�",white_check_mark:"âœ…",white_circle:"âšªï¸�",white_flag:"ðŸ�³ï¸�",white_flower:"ðŸ’®",white_large_square:"â¬œï¸�",white_medium_small_square:"â—½ï¸�",white_medium_square:"â—»ï¸�",white_small_square:"â–«ï¸�",white_square_button:"ðŸ”³",wilted_flower:"ðŸ¥€",wind_chime:"ðŸŽ�",wind_face:"ðŸŒ¬",wine_glass:"ðŸ�·",wink:"ðŸ˜‰",wolf:"ðŸ�º",woman:"ðŸ‘©",woman_artist:"ðŸ‘©&zwj;ðŸŽ¨",woman_astronaut:"ðŸ‘©&zwj;ðŸš€",woman_cartwheeling:"ðŸ¤¸&zwj;â™€ï¸�",woman_cook:"ðŸ‘©&zwj;ðŸ�³",woman_facepalming:"ðŸ¤¦&zwj;â™€ï¸�",woman_factory_worker:"ðŸ‘©&zwj;ðŸ�­",woman_farmer:"ðŸ‘©&zwj;ðŸŒ¾",woman_firefighter:"ðŸ‘©&zwj;ðŸš’",woman_health_worker:"ðŸ‘©&zwj;âš•ï¸�",woman_judge:"ðŸ‘©&zwj;âš–ï¸�",woman_juggling:"ðŸ¤¹&zwj;â™€ï¸�",woman_mechanic:"ðŸ‘©&zwj;ðŸ”§",woman_office_worker:"ðŸ‘©&zwj;ðŸ’¼",woman_pilot:"ðŸ‘©&zwj;âœˆï¸�",woman_playing_handball:"ðŸ¤¾&zwj;â™€ï¸�",woman_playing_water_polo:"ðŸ¤½&zwj;â™€ï¸�",woman_scientist:"ðŸ‘©&zwj;ðŸ”¬",woman_shrugging:"ðŸ¤·&zwj;â™€ï¸�",woman_singer:"ðŸ‘©&zwj;ðŸŽ¤",woman_student:"ðŸ‘©&zwj;ðŸŽ“",woman_teacher:"ðŸ‘©&zwj;ðŸ�«",woman_technologist:"ðŸ‘©&zwj;ðŸ’»",woman_with_turban:"ðŸ‘³&zwj;â™€ï¸�",womans_clothes:"ðŸ‘š",womans_hat:"ðŸ‘’",women_wrestling:"ðŸ¤¼&zwj;â™€ï¸�",womens:"ðŸšº",world_map:"ðŸ—º",worried:"ðŸ˜Ÿ",wrench:"ðŸ”§",writing_hand:"âœ�ï¸�",x:"â�Œ",yellow_heart:"ðŸ’›",yen:"ðŸ’´",yin_yang:"â˜¯ï¸�",yum:"ðŸ˜‹",zap:"âš¡ï¸�",zipper_mouth_face:"ðŸ¤�",zzz:"ðŸ’¤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},o.Converter=function(e){"use strict";var t={},n=[],r=[],a={},i=c,d={parsed:{},raw:"",format:""};function p(e,t){if(t=t||null,o.helper.isString(e)){if(t=e=o.helper.stdExtName(e),o.extensions[e])return console.warn("DEPRECATION WARNING: "+e+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(e,t){"function"==typeof e&&(e=e(new o.Converter));o.helper.isArray(e)||(e=[e]);var a=m(e,t);if(!a.valid)throw Error(a.error);for(var i=0;i<e.length;++i)switch(e[i].type){case"lang":n.push(e[i]);break;case"output":r.push(e[i]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(o.extensions[e],e);if(o.helper.isUndefined(s[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=s[e]}"function"==typeof e&&(e=e()),o.helper.isArray(e)||(e=[e]);var a=m(e,t);if(!a.valid)throw Error(a.error);for(var i=0;i<e.length;++i){switch(e[i].type){case"lang":n.push(e[i]);break;case"output":r.push(e[i])}if(e[i].hasOwnProperty("listeners"))for(var l in e[i].listeners)e[i].listeners.hasOwnProperty(l)&&h(l,e[i].listeners[l])}}function h(e,t){if(!o.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+typeof e+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+typeof t+" given");a.hasOwnProperty(e)||(a[e]=[]),a[e].push(t)}!function(){for(var n in e=e||{},l)l.hasOwnProperty(n)&&(t[n]=l[n]);if("object"!=typeof e)throw Error("Converter expects the passed parameter to be an object, but "+typeof e+" was passed instead.");for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.extensions&&o.helper.forEach(t.extensions,p)}(),this._dispatch=function(e,t,n,r){if(a.hasOwnProperty(e))for(var o=0;o<a[e].length;++o){var i=a[e][o](e,t,this,n,r);i&&void 0!==i&&(t=i)}return t},this.listen=function(e,t){return h(e,t),this},this.makeHtml=function(e){if(!e)return e;var a={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:n,outputModifiers:r,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/Â¨/g,"Â¨T")).replace(/\$/g,"Â¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g,"&nbsp;"),t.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,n=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(n,"")}(e)),e="\n\n"+e+"\n\n",e=(e=o.subParser("detab")(e,t,a)).replace(/^[ \t]+$/gm,""),o.helper.forEach(n,function(n){e=o.subParser("runExtension")(n,e,t,a)}),e=o.subParser("metadata")(e,t,a),e=o.subParser("hashPreCodeTags")(e,t,a),e=o.subParser("githubCodeBlocks")(e,t,a),e=o.subParser("hashHTMLBlocks")(e,t,a),e=o.subParser("hashCodeTags")(e,t,a),e=o.subParser("stripLinkDefinitions")(e,t,a),e=o.subParser("blockGamut")(e,t,a),e=o.subParser("unhashHTMLSpans")(e,t,a),e=(e=(e=o.subParser("unescapeSpecialChars")(e,t,a)).replace(/Â¨D/g,"$$")).replace(/Â¨T/g,"Â¨"),e=o.subParser("completeHTMLDocument")(e,t,a),o.helper.forEach(r,function(n){e=o.subParser("runExtension")(n,e,t,a)}),d=a.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">Â¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var n=t.createElement("div");n.innerHTML=e;var r={preList:function(e){for(var t=e.querySelectorAll("pre"),n=[],r=0;r<t.length;++r)if(1===t[r].childElementCount&&"code"===t[r].firstChild.tagName.toLowerCase()){var a=t[r].firstChild.innerHTML.trim(),i=t[r].firstChild.getAttribute("data-language")||"";if(""===i)for(var s=t[r].firstChild.className.split(" "),l=0;l<s.length;++l){var c=s[l].match(/^language-(.+)$/);if(null!==c){i=c[1];break}}a=o.helper.unescapeHTMLEntities(a),n.push(a),t[r].outerHTML='<precode language="'+i+'" precodenum="'+r.toString()+'"></precode>'}else n.push(t[r].innerHTML),t[r].innerHTML="",t[r].setAttribute("prenum",r.toString());return n}(n)};!function e(t){for(var n=0;n<t.childNodes.length;++n){var r=t.childNodes[n];3===r.nodeType?/\S/.test(r.nodeValue)?(r.nodeValue=r.nodeValue.split("\n").join(" "),r.nodeValue=r.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(r),--n):1===r.nodeType&&e(r)}}(n);for(var a=n.childNodes,i="",s=0;s<a.length;s++)i+=o.subParser("makeMarkdown.node")(a[s],r);return i},this.setOption=function(e,n){t[e]=n},this.getOption=function(e){return t[e]},this.getOptions=function(){return t},this.addExtension=function(e,t){p(e,t=t||null)},this.useExtension=function(e){p(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var n=u[e];for(var r in i=e,n)n.hasOwnProperty(r)&&(t[r]=n[r])},this.getFlavor=function(){return i},this.removeExtension=function(e){o.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var a=e[t],i=0;i<n.length;++i)n[i]===a&&n[i].splice(i,1);for(;0<r.length;++i)r[0]===a&&r[0].splice(i,1)}},this.getAllExtensions=function(){return{language:n,output:r}},this.getMetadata=function(e){return e?d.raw:d.parsed},this.getMetadataFormat=function(){return d.format},this._setMetadataPair=function(e,t){d.parsed[e]=t},this._setMetadataFormat=function(e){d.format=e},this._setMetadataRaw=function(e){d.raw=e}},o.subParser("anchors",function(e,t,n){"use strict";var r=function(e,r,a,i,s,l,c){if(o.helper.isUndefined(c)&&(c=""),a=a.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)i="";else if(!i){if(a||(a=r.toLowerCase().replace(/ ?\n/g," ")),i="#"+a,o.helper.isUndefined(n.gUrls[a]))return e;i=n.gUrls[a],o.helper.isUndefined(n.gTitles[a])||(c=n.gTitles[a])}var u='<a href="'+(i=i.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"';return""!==c&&null!==c&&(u+=' title="'+(c=(c=c.replace(/"/g,"&quot;")).replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(i)&&(u+=' rel="noopener noreferrer" target="Â¨E95Eblank"'),u+=">"+r+"</a>"};return e=(e=(e=(e=(e=n.converter._dispatch("anchors.before",e,t,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,r)).replace(/\[([^\[\]]+)]()()()()()/g,r),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,n,r,a,i){if("\\"===r)return n+a;if(!o.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,i),l="";return t.openLinksInNewWindow&&(l=' rel="noopener noreferrer" target="Â¨E95Eblank"'),n+'<a href="'+s+'"'+l+">"+a+"</a>"})),e=n.converter._dispatch("anchors.after",e,t,n)});var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,f=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,g=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,b=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,y=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,v=function(e){"use strict";return function(t,n,r,a,i,s,l){var c=r=r.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback),u="",m="",d=n||"",p=l||"";return/^www\./i.test(r)&&(r=r.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(m=' rel="noopener noreferrer" target="Â¨E95Eblank"'),d+'<a href="'+r+'"'+m+">"+c+"</a>"+u+p}},_=function(e,t){"use strict";return function(n,r,a){var i="mailto:";return r=r||"",a=o.subParser("unescapeSpecialChars")(a,e,t),e.encodeEmails?(i=o.helper.encodeEmailAddress(i+a),a=o.helper.encodeEmailAddress(a)):i+=a,r+'<a href="'+i+'">'+a+"</a>"}};o.subParser("autoLinks",function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("autoLinks.before",e,t,n)).replace(g,v(t))).replace(y,_(t,n)),e=n.converter._dispatch("autoLinks.after",e,t,n)}),o.subParser("simplifiedAutoLinks",function(e,t,n){"use strict";return t.simplifiedAutoLink?(e=n.converter._dispatch("simplifiedAutoLinks.before",e,t,n),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(f,v(t)):e.replace(h,v(t))).replace(b,_(t,n)),e=n.converter._dispatch("simplifiedAutoLinks.after",e,t,n)):e}),o.subParser("blockGamut",function(e,t,n){"use strict";return e=n.converter._dispatch("blockGamut.before",e,t,n),e=o.subParser("blockQuotes")(e,t,n),e=o.subParser("headers")(e,t,n),e=o.subParser("horizontalRule")(e,t,n),e=o.subParser("lists")(e,t,n),e=o.subParser("codeBlocks")(e,t,n),e=o.subParser("tables")(e,t,n),e=o.subParser("hashHTMLBlocks")(e,t,n),e=o.subParser("paragraphs")(e,t,n),e=n.converter._dispatch("blockGamut.after",e,t,n)}),o.subParser("blockQuotes",function(e,t,n){"use strict";e=n.converter._dispatch("blockQuotes.before",e,t,n),e+="\n\n";var r=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(r=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(r,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/Â¨0/g,"")).replace(/^[ \t]+$/gm,""),e=o.subParser("githubCodeBlocks")(e,t,n),e=(e=(e=o.subParser("blockGamut")(e,t,n)).replace(/(^|\n)/g,"$1  ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(e,t){var n=t;return n=(n=n.replace(/^  /gm,"Â¨0")).replace(/Â¨0/g,"")}),o.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,n)}),e=n.converter._dispatch("blockQuotes.after",e,t,n)}),o.subParser("codeBlocks",function(e,t,n){"use strict";e=n.converter._dispatch("codeBlocks.before",e,t,n);return e=(e=(e+="Â¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=Â¨0))/g,function(e,r,a){var i=r,s=a,l="\n";return i=o.subParser("outdent")(i,t,n),i=o.subParser("encodeCode")(i,t,n),i=(i=(i=o.subParser("detab")(i,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(l=""),i="<pre><code>"+i+l+"</code></pre>",o.subParser("hashBlock")(i,t,n)+s})).replace(/Â¨0/,""),e=n.converter._dispatch("codeBlocks.after",e,t,n)}),o.subParser("codeSpans",function(e,t,n){"use strict";return void 0===(e=n.converter._dispatch("codeSpans.before",e,t,n))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,r,a,i){var s=i;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=r+"<code>"+(s=o.subParser("encodeCode")(s,t,n))+"</code>",s=o.subParser("hashHTMLSpans")(s,t,n)}),e=n.converter._dispatch("codeSpans.after",e,t,n)}),o.subParser("completeHTMLDocument",function(e,t,n){"use strict";if(!t.completeHTMLDocument)return e;e=n.converter._dispatch("completeHTMLDocument.before",e,t,n);var r="html",a="<!DOCTYPE HTML>\n",o="",i='<meta charset="utf-8">\n',s="",l="";for(var c in void 0!==n.metadata.parsed.doctype&&(a="<!DOCTYPE "+n.metadata.parsed.doctype+">\n","html"!==(r=n.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==r||(i='<meta charset="utf-8">')),n.metadata.parsed)if(n.metadata.parsed.hasOwnProperty(c))switch(c.toLowerCase()){case"doctype":break;case"title":o="<title>"+n.metadata.parsed.title+"</title>\n";break;case"charset":i="html"===r||"html5"===r?'<meta charset="'+n.metadata.parsed.charset+'">\n':'<meta name="charset" content="'+n.metadata.parsed.charset+'">\n';break;case"language":case"lang":s=' lang="'+n.metadata.parsed[c]+'"',l+='<meta name="'+c+'" content="'+n.metadata.parsed[c]+'">\n';break;default:l+='<meta name="'+c+'" content="'+n.metadata.parsed[c]+'">\n'}return e=a+"<html"+s+">\n<head>\n"+o+i+l+"</head>\n<body>\n"+e.trim()+"\n</body>\n</html>",e=n.converter._dispatch("completeHTMLDocument.after",e,t,n)}),o.subParser("detab",function(e,t,n){"use strict";return e=(e=(e=(e=(e=(e=n.converter._dispatch("detab.before",e,t,n)).replace(/\t(?=\t)/g,"    ")).replace(/\t/g,"Â¨AÂ¨B")).replace(/Â¨B(.+?)Â¨A/g,function(e,t){for(var n=t,r=4-n.length%4,a=0;a<r;a++)n+=" ";return n})).replace(/Â¨A/g,"    ")).replace(/Â¨B/g,""),e=n.converter._dispatch("detab.after",e,t,n)}),o.subParser("ellipsis",function(e,t,n){"use strict";return e=(e=n.converter._dispatch("ellipsis.before",e,t,n)).replace(/\.\.\./g,"â€¦"),e=n.converter._dispatch("ellipsis.after",e,t,n)}),o.subParser("emoji",function(e,t,n){"use strict";if(!t.emoji)return e;return e=(e=n.converter._dispatch("emoji.before",e,t,n)).replace(/:([\S]+?):/g,function(e,t){return o.helper.emojis.hasOwnProperty(t)?o.helper.emojis[t]:e}),e=n.converter._dispatch("emoji.after",e,t,n)}),o.subParser("encodeAmpsAndAngles",function(e,t,n){"use strict";return e=(e=(e=(e=(e=n.converter._dispatch("encodeAmpsAndAngles.before",e,t,n)).replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;")).replace(/<(?![a-z\/?$!])/gi,"&lt;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),e=n.converter._dispatch("encodeAmpsAndAngles.after",e,t,n)}),o.subParser("encodeBackslashEscapes",function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("encodeBackslashEscapes.before",e,t,n)).replace(/\\(\\)/g,o.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,o.helper.escapeCharactersCallback),e=n.converter._dispatch("encodeBackslashEscapes.after",e,t,n)}),o.subParser("encodeCode",function(e,t,n){"use strict";return e=(e=n.converter._dispatch("encodeCode.before",e,t,n)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/([*_{}\[\]\\=~-])/g,o.helper.escapeCharactersCallback),e=n.converter._dispatch("encodeCode.after",e,t,n)}),o.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,n)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,o.helper.escapeCharactersCallback)})).replace(/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,o.helper.escapeCharactersCallback)}),e=n.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,n)}),o.subParser("githubCodeBlocks",function(e,t,n){"use strict";return t.ghCodeBlocks?(e=n.converter._dispatch("githubCodeBlocks.before",e,t,n),e=(e=(e+="Â¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,r,a,i){var s=t.omitExtraWLInCodeBlocks?"":"\n";return i=o.subParser("encodeCode")(i,t,n),i="<pre><code"+(a?' class="'+a+" language-"+a+'"':"")+">"+(i=(i=(i=o.subParser("detab")(i,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+s+"</code></pre>",i=o.subParser("hashBlock")(i,t,n),"\n\nÂ¨G"+(n.ghCodeBlocks.push({text:e,codeblock:i})-1)+"G\n\n"})).replace(/Â¨0/,""),n.converter._dispatch("githubCodeBlocks.after",e,t,n)):e}),o.subParser("hashBlock",function(e,t,n){"use strict";return e=(e=n.converter._dispatch("hashBlock.before",e,t,n)).replace(/(^\n+|\n+$)/g,""),e="\n\nÂ¨K"+(n.gHtmlBlocks.push(e)-1)+"K\n\n",e=n.converter._dispatch("hashBlock.after",e,t,n)}),o.subParser("hashCodeTags",function(e,t,n){"use strict";e=n.converter._dispatch("hashCodeTags.before",e,t,n);return e=o.helper.replaceRecursiveRegExp(e,function(e,r,a,i){var s=a+o.subParser("encodeCode")(r,t,n)+i;return"Â¨C"+(n.gHtmlSpans.push(s)-1)+"C"},"<code\\b[^>]*>","</code>","gim"),e=n.converter._dispatch("hashCodeTags.after",e,t,n)}),o.subParser("hashElement",function(e,t,n){"use strict";return function(e,t){var r=t;return r=(r=(r=r.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),r="\n\nÂ¨K"+(n.gHtmlBlocks.push(r)-1)+"K\n\n"}}),o.subParser("hashHTMLBlocks",function(e,t,n){"use strict";e=n.converter._dispatch("hashHTMLBlocks.before",e,t,n);var r=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],a=function(e,t,r,a){var o=e;return-1!==r.search(/\bmarkdown\b/)&&(o=r+n.converter.makeHtml(t)+a),"\n\nÂ¨K"+(n.gHtmlBlocks.push(o)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"&lt;"+t+"&gt;"}));for(var i=0;i<r.length;++i)for(var s,l=new RegExp("^ {0,3}(<"+r[i]+"\\b[^>]*>)","im"),c="<"+r[i]+"\\b[^>]*>",u="</"+r[i]+">";-1!==(s=o.helper.regexIndexOf(e,l));){var m=o.helper.splitAtIndex(e,s),d=o.helper.replaceRecursiveRegExp(m[1],a,c,u,"im");if(d===m[1])break;e=m[0].concat(d)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,o.subParser("hashElement")(e,t,n)),e=(e=o.helper.replaceRecursiveRegExp(e,function(e){return"\n\nÂ¨K"+(n.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,o.subParser("hashElement")(e,t,n)),e=n.converter._dispatch("hashHTMLBlocks.after",e,t,n)}),o.subParser("hashHTMLSpans",function(e,t,n){"use strict";function r(e){return"Â¨C"+(n.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=n.converter._dispatch("hashHTMLSpans.before",e,t,n)).replace(/<[^>]+?\/>/gi,function(e){return r(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return r(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return r(e)})).replace(/<[^>]+?>/gi,function(e){return r(e)}),e=n.converter._dispatch("hashHTMLSpans.after",e,t,n)}),o.subParser("unhashHTMLSpans",function(e,t,n){"use strict";e=n.converter._dispatch("unhashHTMLSpans.before",e,t,n);for(var r=0;r<n.gHtmlSpans.length;++r){for(var a=n.gHtmlSpans[r],o=0;/Â¨C(\d+)C/.test(a);){var i=RegExp.$1;if(a=a.replace("Â¨C"+i+"C",n.gHtmlSpans[i]),10===o){console.error("maximum nesting of 10 spans reached!!!");break}++o}e=e.replace("Â¨C"+r+"C",a)}return e=n.converter._dispatch("unhashHTMLSpans.after",e,t,n)}),o.subParser("hashPreCodeTags",function(e,t,n){"use strict";e=n.converter._dispatch("hashPreCodeTags.before",e,t,n);return e=o.helper.replaceRecursiveRegExp(e,function(e,r,a,i){var s=a+o.subParser("encodeCode")(r,t,n)+i;return"\n\nÂ¨G"+(n.ghCodeBlocks.push({text:e,codeblock:s})-1)+"G\n\n"},"^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>","^ {0,3}</code>\\s*</pre>","gim"),e=n.converter._dispatch("hashPreCodeTags.after",e,t,n)}),o.subParser("headers",function(e,t,n){"use strict";e=n.converter._dispatch("headers.before",e,t,n);var r=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),a=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,i=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(a,function(e,a){var i=o.subParser("spanGamut")(a,t,n),s=t.noHeaderId?"":' id="'+l(a)+'"',c="<h"+r+s+">"+i+"</h"+r+">";return o.subParser("hashBlock")(c,t,n)})).replace(i,function(e,a){var i=o.subParser("spanGamut")(a,t,n),s=t.noHeaderId?"":' id="'+l(a)+'"',c=r+1,u="<h"+c+s+">"+i+"</h"+c+">";return o.subParser("hashBlock")(u,t,n)});var s=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function l(e){var r,a;if(t.customizedHeaderId){var i=e.match(/\{([^{]+?)}\s*$/);i&&i[1]&&(e=i[1])}return r=e,a=o.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(r=a+r),r=t.ghCompatibleHeaderId?r.replace(/ /g,"-").replace(/&amp;/g,"").replace(/Â¨T/g,"").replace(/Â¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^Â¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?r.replace(/ /g,"-").replace(/&amp;/g,"&").replace(/Â¨T/g,"Â¨").replace(/Â¨D/g,"$").replace(/["']/g,"-").toLowerCase():r.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(r=a+r),n.hashLinkCounts[r]?r=r+"-"+n.hashLinkCounts[r]++:n.hashLinkCounts[r]=1,r}return e=e.replace(s,function(e,a,i){var s=i;t.customizedHeaderId&&(s=i.replace(/\s?\{([^{]+?)}\s*$/,""));var c=o.subParser("spanGamut")(s,t,n),u=t.noHeaderId?"":' id="'+l(i)+'"',m=r-1+a.length,d="<h"+m+u+">"+c+"</h"+m+">";return o.subParser("hashBlock")(d,t,n)}),e=n.converter._dispatch("headers.after",e,t,n)}),o.subParser("horizontalRule",function(e,t,n){"use strict";e=n.converter._dispatch("horizontalRule.before",e,t,n);var r=o.subParser("hashBlock")("<hr />",t,n);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,r)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,r)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,r),e=n.converter._dispatch("horizontalRule.after",e,t,n)}),o.subParser("images",function(e,t,n){"use strict";function r(e,t,r,a,i,s,l,c){var u=n.gUrls,m=n.gTitles,d=n.gDimensions;if(r=r.toLowerCase(),c||(c=""),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)a="";else if(""===a||null===a){if(""!==r&&null!==r||(r=t.toLowerCase().replace(/ ?\n/g," ")),a="#"+r,o.helper.isUndefined(u[r]))return e;a=u[r],o.helper.isUndefined(m[r])||(c=m[r]),o.helper.isUndefined(d[r])||(i=d[r].width,s=d[r].height)}t=t.replace(/"/g,"&quot;").replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback);var p='<img src="'+(a=a.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'" alt="'+t+'"';return c&&o.helper.isString(c)&&(p+=' title="'+(c=c.replace(/"/g,"&quot;").replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"'),i&&s&&(p+=' width="'+(i="*"===i?"auto":i)+'"',p+=' height="'+(s="*"===s?"auto":s)+'"'),p+=" />"}return e=(e=(e=(e=(e=(e=n.converter._dispatch("images.before",e,t,n)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,r)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,n,a,o,i,s,l){return r(e,t,n,a=a.replace(/\s/g,""),o,i,s,l)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,r)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,r)).replace(/!\[([^\[\]]+)]()()()()()/g,r),e=n.converter._dispatch("images.after",e,t,n)}),o.subParser("italicsAndBold",function(e,t,n){"use strict";function r(e,t,n){return t+e+n}return e=n.converter._dispatch("italicsAndBold.before",e,t,n),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return r(t,"<strong><em>","</em></strong>")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return r(t,"<strong>","</strong>")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return r(t,"<em>","</em>")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?r(t,"<strong><em>","</em></strong>"):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?r(t,"<strong>","</strong>"):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?r(t,"<em>","</em>"):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,n){return r(n,t+"<strong><em>","</em></strong>")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,n){return r(n,t+"<strong>","</strong>")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,n){return r(n,t+"<em>","</em>")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?r(t,"<strong><em>","</em></strong>"):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?r(t,"<strong>","</strong>"):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?r(t,"<em>","</em>"):e}),e=n.converter._dispatch("italicsAndBold.after",e,t,n)}),o.subParser("lists",function(e,t,n){"use strict";function r(e,r){n.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,i=/\n[ \t]*\n(?!Â¨0)/.test(e+="Â¨0");return t.disableForced4SpacesIndentedSublists&&(a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(a,function(e,r,a,s,l,c,u){u=u&&""!==u.trim();var m=o.subParser("outdent")(l,t,n),d="";return c&&t.tasklists&&(d=' class="task-list-item" style="list-style-type: none;"',m=m.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';return u&&(e+=" checked"),e+=">"})),m=m.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"Â¨A"+e}),r||m.search(/\n{2,}/)>-1?(m=o.subParser("githubCodeBlocks")(m,t,n),m=o.subParser("blockGamut")(m,t,n)):(m=(m=o.subParser("lists")(m,t,n)).replace(/\n$/,""),m=(m=o.subParser("hashHTMLBlocks")(m,t,n)).replace(/\n\n+/g,"\n\n"),m=i?o.subParser("paragraphs")(m,t,n):o.subParser("spanGamut")(m,t,n)),m="<li"+d+">"+(m=m.replace("Â¨A",""))+"</li>\n"})).replace(/Â¨0/g,""),n.gListLevel--,r&&(e=e.replace(/\s+$/,"")),e}function a(e,t){if("ol"===t){var n=e.match(/^ *(\d+)\./);if(n&&"1"!==n[1])return' start="'+n[1]+'"'}return""}function i(e,n,o){var i=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,l="ul"===n?i:s,c="";if(-1!==e.search(l))!function t(u){var m=u.search(l),d=a(e,n);-1!==m?(c+="\n\n<"+n+d+">\n"+r(u.slice(0,m),!!o)+"</"+n+">\n",l="ul"===(n="ul"===n?"ol":"ul")?i:s,t(u.slice(m))):c+="\n\n<"+n+d+">\n"+r(u,!!o)+"</"+n+">\n"}(e);else{var u=a(e,n);c="\n\n<"+n+u+">\n"+r(e,!!o)+"</"+n+">\n"}return c}return e=n.converter._dispatch("lists.before",e,t,n),e+="Â¨0",e=(e=n.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,n){return i(t,n.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,n,r){return i(n,r.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/Â¨0/,""),e=n.converter._dispatch("lists.after",e,t,n)}),o.subParser("metadata",function(e,t,n){"use strict";if(!t.metadata)return e;function r(e){n.metadata.raw=e,(e=(e=e.replace(/&/g,"&amp;").replace(/"/g,"&quot;")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,r){return n.metadata.parsed[t]=r,""})}return e=(e=(e=(e=n.converter._dispatch("metadata.before",e,t,n)).replace(/^\s*Â«Â«Â«+(\S*?)\n([\s\S]+?)\nÂ»Â»Â»+\n/,function(e,t,n){return r(n),"Â¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,a){return t&&(n.metadata.format=t),r(a),"Â¨M"})).replace(/Â¨M/g,""),e=n.converter._dispatch("metadata.after",e,t,n)}),o.subParser("outdent",function(e,t,n){"use strict";return e=(e=(e=n.converter._dispatch("outdent.before",e,t,n)).replace(/^(\t|[ ]{1,4})/gm,"Â¨0")).replace(/Â¨0/g,""),e=n.converter._dispatch("outdent.after",e,t,n)}),o.subParser("paragraphs",function(e,t,n){"use strict";for(var r=(e=(e=(e=n.converter._dispatch("paragraphs.before",e,t,n)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),a=[],i=r.length,s=0;s<i;s++){var l=r[s];l.search(/Â¨(K|G)(\d+)\1/g)>=0?a.push(l):l.search(/\S/)>=0&&(l=(l=o.subParser("spanGamut")(l,t,n)).replace(/^([ \t]*)/g,"<p>"),l+="</p>",a.push(l))}for(i=a.length,s=0;s<i;s++){for(var c="",u=a[s],m=!1;/Â¨(K|G)(\d+)\1/.test(u);){var d=RegExp.$1,p=RegExp.$2;c=(c="K"===d?n.gHtmlBlocks[p]:m?o.subParser("encodeCode")(n.ghCodeBlocks[p].text,t,n):n.ghCodeBlocks[p].codeblock).replace(/\$/g,"$$$$"),u=u.replace(/(\n\n)?Â¨(K|G)\d+\2(\n\n)?/,c),/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(u)&&(m=!0)}a[s]=u}return e=(e=(e=a.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),n.converter._dispatch("paragraphs.after",e,t,n)}),o.subParser("runExtension",function(e,t,n,r){"use strict";if(e.filter)t=e.filter(t,r.converter,n);else if(e.regex){var a=e.regex;a instanceof RegExp||(a=new RegExp(a,"g")),t=t.replace(a,e.replace)}return t}),o.subParser("spanGamut",function(e,t,n){"use strict";return e=n.converter._dispatch("spanGamut.before",e,t,n),e=o.subParser("codeSpans")(e,t,n),e=o.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,n),e=o.subParser("encodeBackslashEscapes")(e,t,n),e=o.subParser("images")(e,t,n),e=o.subParser("anchors")(e,t,n),e=o.subParser("autoLinks")(e,t,n),e=o.subParser("simplifiedAutoLinks")(e,t,n),e=o.subParser("emoji")(e,t,n),e=o.subParser("underline")(e,t,n),e=o.subParser("italicsAndBold")(e,t,n),e=o.subParser("strikethrough")(e,t,n),e=o.subParser("ellipsis")(e,t,n),e=o.subParser("hashHTMLSpans")(e,t,n),e=o.subParser("encodeAmpsAndAngles")(e,t,n),t.simpleLineBreaks?/\n\nÂ¨K/.test(e)||(e=e.replace(/\n+/g,"<br />\n")):e=e.replace(/  +\n/g,"<br />\n"),e=n.converter._dispatch("spanGamut.after",e,t,n)}),o.subParser("strikethrough",function(e,t,n){"use strict";return t.strikethrough&&(e=(e=n.converter._dispatch("strikethrough.before",e,t,n)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,r){return function(e){return t.simplifiedAutoLink&&(e=o.subParser("simplifiedAutoLinks")(e,t,n)),"<del>"+e+"</del>"}(r)}),e=n.converter._dispatch("strikethrough.after",e,t,n)),e}),o.subParser("stripLinkDefinitions",function(e,t,n){"use strict";var r=function(e,r,a,i,s,l,c){return r=r.toLowerCase(),a.match(/^data:.+?\/.+?;base64,/)?n.gUrls[r]=a.replace(/\s/g,""):n.gUrls[r]=o.subParser("encodeAmpsAndAngles")(a,t,n),l?l+c:(c&&(n.gTitles[r]=c.replace(/"|'/g,"&quot;")),t.parseImgDimensions&&i&&s&&(n.gDimensions[r]={width:i,height:s}),"")};return e=(e=(e=(e+="Â¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=Â¨0)|(?=\n\[))/gm,r)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=Â¨0))/gm,r)).replace(/Â¨0/,"")}),o.subParser("tables",function(e,t,n){"use strict";if(!t.tables)return e;function r(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function a(e,r){var a="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(a=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),"<th"+a+r+">"+(e=o.subParser("spanGamut")(e,t,n))+"</th>\n"}function i(e,r){return"<td"+r+">"+o.subParser("spanGamut")(e,t,n)+"</td>\n"}function s(e){var s,l=e.split("\n");for(s=0;s<l.length;++s)/^ {0,3}\|/.test(l[s])&&(l[s]=l[s].replace(/^ {0,3}\|/,"")),/\|[ \t]*$/.test(l[s])&&(l[s]=l[s].replace(/\|[ \t]*$/,"")),l[s]=o.subParser("codeSpans")(l[s],t,n);var c=l[0].split("|").map(function(e){return e.trim()}),u=l[1].split("|").map(function(e){return e.trim()}),m=[],d=[],p=[],h=[];for(l.shift(),l.shift(),s=0;s<l.length;++s)""!==l[s].trim()&&m.push(l[s].split("|").map(function(e){return e.trim()}));if(c.length<u.length)return e;for(s=0;s<u.length;++s)p.push(r(u[s]));for(s=0;s<c.length;++s)o.helper.isUndefined(p[s])&&(p[s]=""),d.push(a(c[s],p[s]));for(s=0;s<m.length;++s){for(var f=[],g=0;g<d.length;++g)o.helper.isUndefined(m[s][g]),f.push(i(m[s][g],p[g]));h.push(f)}return function(e,t){for(var n="<table>\n<thead>\n<tr>\n",r=e.length,a=0;a<r;++a)n+=e[a];for(n+="</tr>\n</thead>\n<tbody>\n",a=0;a<t.length;++a){n+="<tr>\n";for(var o=0;o<r;++o)n+=t[a][o];n+="</tr>\n"}return n+"</tbody>\n</table>\n"}(d,h)}return e=(e=(e=(e=n.converter._dispatch("tables.before",e,t,n)).replace(/\\(\|)/g,o.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|Â¨0)/gm,s)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|Â¨0)/gm,s),e=n.converter._dispatch("tables.after",e,t,n)}),o.subParser("underline",function(e,t,n){"use strict";return t.underline?(e=n.converter._dispatch("underline.before",e,t,n),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return"<u>"+t+"</u>"})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return"<u>"+t+"</u>"}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e})).replace(/(_)/g,o.helper.escapeCharactersCallback),e=n.converter._dispatch("underline.after",e,t,n)):e}),o.subParser("unescapeSpecialChars",function(e,t,n){"use strict";return e=(e=n.converter._dispatch("unescapeSpecialChars.before",e,t,n)).replace(/Â¨E(\d+)E/g,function(e,t){var n=parseInt(t);return String.fromCharCode(n)}),e=n.converter._dispatch("unescapeSpecialChars.after",e,t,n)}),o.subParser("makeMarkdown.blockquote",function(e,t){"use strict";var n="";if(e.hasChildNodes())for(var r=e.childNodes,a=r.length,i=0;i<a;++i){var s=o.subParser("makeMarkdown.node")(r[i],t);""!==s&&(n+=s)}return n="> "+(n=n.trim()).split("\n").join("\n> ")}),o.subParser("makeMarkdown.codeBlock",function(e,t){"use strict";var n=e.getAttribute("language"),r=e.getAttribute("precodenum");return"```"+n+"\n"+t.preList[r]+"\n```"}),o.subParser("makeMarkdown.codeSpan",function(e){"use strict";return"`"+e.innerHTML+"`"}),o.subParser("makeMarkdown.emphasis",function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="*";for(var r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);n+="*"}return n}),o.subParser("makeMarkdown.header",function(e,t,n){"use strict";var r=new Array(n+1).join("#"),a="";if(e.hasChildNodes()){a=r+" ";for(var i=e.childNodes,s=i.length,l=0;l<s;++l)a+=o.subParser("makeMarkdown.node")(i[l],t)}return a}),o.subParser("makeMarkdown.hr",function(){"use strict";return"---"}),o.subParser("makeMarkdown.image",function(e){"use strict";var t="";return e.hasAttribute("src")&&(t+="!["+e.getAttribute("alt")+"](",t+="<"+e.getAttribute("src")+">",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),o.subParser("makeMarkdown.links",function(e,t){"use strict";var n="";if(e.hasChildNodes()&&e.hasAttribute("href")){var r=e.childNodes,a=r.length;n="[";for(var i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);n+="](",n+="<"+e.getAttribute("href")+">",e.hasAttribute("title")&&(n+=' "'+e.getAttribute("title")+'"'),n+=")"}return n}),o.subParser("makeMarkdown.list",function(e,t,n){"use strict";var r="";if(!e.hasChildNodes())return"";for(var a=e.childNodes,i=a.length,s=e.getAttribute("start")||1,l=0;l<i;++l)if(void 0!==a[l].tagName&&"li"===a[l].tagName.toLowerCase()){r+=("ol"===n?s.toString()+". ":"- ")+o.subParser("makeMarkdown.listItem")(a[l],t),++s}return(r+="\n\x3c!-- --\x3e\n").trim()}),o.subParser("makeMarkdown.listItem",function(e,t){"use strict";for(var n="",r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);return/\n$/.test(n)?n=n.split("\n").join("\n    ").replace(/^ {4}$/gm,"").replace(/\n\n+/g,"\n\n"):n+="\n",n}),o.subParser("makeMarkdown.node",function(e,t,n){"use strict";n=n||!1;var r="";if(3===e.nodeType)return o.subParser("makeMarkdown.txt")(e,t);if(8===e.nodeType)return"\x3c!--"+e.data+"--\x3e\n\n";if(1!==e.nodeType)return"";switch(e.tagName.toLowerCase()){case"h1":n||(r=o.subParser("makeMarkdown.header")(e,t,1)+"\n\n");break;case"h2":n||(r=o.subParser("makeMarkdown.header")(e,t,2)+"\n\n");break;case"h3":n||(r=o.subParser("makeMarkdown.header")(e,t,3)+"\n\n");break;case"h4":n||(r=o.subParser("makeMarkdown.header")(e,t,4)+"\n\n");break;case"h5":n||(r=o.subParser("makeMarkdown.header")(e,t,5)+"\n\n");break;case"h6":n||(r=o.subParser("makeMarkdown.header")(e,t,6)+"\n\n");break;case"p":n||(r=o.subParser("makeMarkdown.paragraph")(e,t)+"\n\n");break;case"blockquote":n||(r=o.subParser("makeMarkdown.blockquote")(e,t)+"\n\n");break;case"hr":n||(r=o.subParser("makeMarkdown.hr")(e,t)+"\n\n");break;case"ol":n||(r=o.subParser("makeMarkdown.list")(e,t,"ol")+"\n\n");break;case"ul":n||(r=o.subParser("makeMarkdown.list")(e,t,"ul")+"\n\n");break;case"precode":n||(r=o.subParser("makeMarkdown.codeBlock")(e,t)+"\n\n");break;case"pre":n||(r=o.subParser("makeMarkdown.pre")(e,t)+"\n\n");break;case"table":n||(r=o.subParser("makeMarkdown.table")(e,t)+"\n\n");break;case"code":r=o.subParser("makeMarkdown.codeSpan")(e,t);break;case"em":case"i":r=o.subParser("makeMarkdown.emphasis")(e,t);break;case"strong":case"b":r=o.subParser("makeMarkdown.strong")(e,t);break;case"del":r=o.subParser("makeMarkdown.strikethrough")(e,t);break;case"a":r=o.subParser("makeMarkdown.links")(e,t);break;case"img":r=o.subParser("makeMarkdown.image")(e,t);break;default:r=e.outerHTML+"\n\n"}return r}),o.subParser("makeMarkdown.paragraph",function(e,t){"use strict";var n="";if(e.hasChildNodes())for(var r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);return n=n.trim()}),o.subParser("makeMarkdown.pre",function(e,t){"use strict";var n=e.getAttribute("prenum");return"<pre>"+t.preList[n]+"</pre>"}),o.subParser("makeMarkdown.strikethrough",function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="~~";for(var r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);n+="~~"}return n}),o.subParser("makeMarkdown.strong",function(e,t){"use strict";var n="";if(e.hasChildNodes()){n+="**";for(var r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t);n+="**"}return n}),o.subParser("makeMarkdown.table",function(e,t){"use strict";var n,r,a="",i=[[],[]],s=e.querySelectorAll("thead>tr>th"),l=e.querySelectorAll("tbody>tr");for(n=0;n<s.length;++n){var c=o.subParser("makeMarkdown.tableCell")(s[n],t),u="---";if(s[n].hasAttribute("style"))switch(s[n].getAttribute("style").toLowerCase().replace(/\s/g,"")){case"text-align:left;":u=":---";break;case"text-align:right;":u="---:";break;case"text-align:center;":u=":---:"}i[0][n]=c.trim(),i[1][n]=u}for(n=0;n<l.length;++n){var m=i.push([])-1,d=l[n].getElementsByTagName("td");for(r=0;r<s.length;++r){var p=" ";void 0!==d[r]&&(p=o.subParser("makeMarkdown.tableCell")(d[r],t)),i[m].push(p)}}var h=3;for(n=0;n<i.length;++n)for(r=0;r<i[n].length;++r){var f=i[n][r].length;f>h&&(h=f)}for(n=0;n<i.length;++n){for(r=0;r<i[n].length;++r)1===n?":"===i[n][r].slice(-1)?i[n][r]=o.helper.padEnd(i[n][r].slice(-1),h-1,"-")+":":i[n][r]=o.helper.padEnd(i[n][r],h,"-"):i[n][r]=o.helper.padEnd(i[n][r],h);a+="| "+i[n].join(" | ")+" |\n"}return a.trim()}),o.subParser("makeMarkdown.tableCell",function(e,t){"use strict";var n="";if(!e.hasChildNodes())return"";for(var r=e.childNodes,a=r.length,i=0;i<a;++i)n+=o.subParser("makeMarkdown.node")(r[i],t,!0);return n.trim()}),o.subParser("makeMarkdown.txt",function(e){"use strict";var t=e.nodeValue;return t=(t=t.replace(/ +/g," ")).replace(/Â¨NBSP;/g," "),t=(t=(t=(t=(t=(t=(t=(t=(t=o.helper.unescapeHTMLEntities(t)).replace(/([*_~|`])/g,"\\$1")).replace(/^(\s*)>/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")});void 0===(r=function(){"use strict";return o}.call(t,n,t,e))||(e.exports=r)}).call(this)},942:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,o(n)))}return e}function o(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return a.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(a.default=a,e.exports=a):void 0===(n=function(){return a}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";var e={};n.r(e),n.d(e,{isAutoCompleterOpen:function(){return wo},updateAIAttributes:function(){return ko},updateData:function(){return Eo},updatePreviousResults:function(){return Do}});var t={};n.r(t),n.d(t,{appUi:function(){return To}});var r={};n.r(r),n.d(r,{getContentAiAttributes:function(){return No},getData:function(){return Io},getPreviousResults:function(){return Fo},getScore:function(){return jo},isAutoCompleterOpen:function(){return Po}});const a=jQuery;var o=n.n(a);const i=lodash,s=wp.i18n,l=wp.hooks,c=wp.components,u=wp.element,m=wp.plugins,d=wp.data,p=wp.editor;const h=function(){return!((0,i.isNil)(window.wp)||(0,i.isNil)(wp.data)||(0,i.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,i.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))},f=function(){return!(0,i.isNull)(document.getElementById("site-editor"))};n.dn(f);const g=function(){if(!f())return!1;var e=wp.data.select("core/editor"),t=e.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===t)return!0;var n=e.getCurrentTemplateId()||t;return!(!(0,i.endsWith)(n,"//home")&&!(0,i.endsWith)(n,"//front-page"))||!(!(0,i.endsWith)(n,"//page")&&!(0,i.endsWith)(n,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};n.dn(g);const b=wp.compose,y=wp.apiFetch;var v=n.n(y);function _(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,i="",s=r.indexOf("#");-1!==s&&(o=r.substring(0,s),i=r.substring(s));var l=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),c=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+c+l+i+n}n.dn(_);const w=function(e){return e&&null!==e.remaining&&void 0!==e.remaining?e.remaining:null};n.dn(w);const k=function(e){var t=(0,d.useSelect)(function(t){var n=t("rank-math-content-ai").getData().usageDetails;return n?n[e]:void 0});if(!t)return null;var n=t.used||0,r=w(t);return{total:n+(r||0),used:n,remaining:r}};function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function D(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function S(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?A(Object(n),!0).forEach(function(t){O(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function O(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=E(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==E(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(k);var x=function(e,t,n){e.objectID=rankMath.objectID,t(!0),v()({method:"POST",path:"/rankmath/v1/ca/researchKeyword",data:e}).catch(function(e){t(!1),alert(e.message)}).then(function(r){if(t(!1),n("researchedData",r.data),r.usageDetails){var a,o=null!==(a=(0,d.select)("rank-math-content-ai").getData().usageDetails)&&void 0!==a?a:{};(0,d.dispatch)("rank-math-content-ai").updateData("usageDetails",S(S({},o),r.usageDetails))}n("keyword",e.keyword),n("country",e.country),(0,l.doAction)("rank_math_content_ai_changed",r.keyword)})};const T=function(e){var t=e.data,n=e.updateData,r=e.showError,a=e.isFree,m=e.hasCredits,d=e.loading,p=e.setLoading,h=D((0,u.useState)(t.keyword),2),f=h[0],g=h[1],b=D((0,u.useState)(t.country),2),y=b[0],v=b[1],w=k("research"),E=f===t.keyword&&y===t.country,C=w?w.remaining:null,A=null!==C?(0,s.sprintf)((0,s.__)("1 request will be used (%d remaining)","seo-by-rank-math"),C):(0,s.__)("1 request will be used","seo-by-rank-math");return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-ca-top-section"},(0,i.includes)(["elementor","divi"],rankMath.currentEditor)&&wp.element.createElement(c.Button,{onClick:function(){return o()(".rank-math-general-tab").trigger("click")}},wp.element.createElement("i",{className:"dashicons dashicons-arrow-left-alt"}),(0,s.__)("Back","seo-by-rank-math")),wp.element.createElement(c.SelectControl,{value:y,onChange:function(e){return v(e)},options:t.countries,disabled:!m||a,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"rank-math-ca-keywords-wrapper"},wp.element.createElement("div",{className:"rank-math-ca-credits-wrapper"},wp.element.createElement(c.TextControl,{label:(0,s.__)("Focus Keyword","seo-by-rank-math"),value:f,disabled:!m||a,onChange:function(e){return g(e)},onKeyDown:function(e){"Enter"===e.key&&e.preventDefault()},help:(0,l.applyFilters)("rank_math_content_ai_help_text",function(){if(null!==w){if(0===w.total&&(null===w.remaining||w.remaining<=0))return wp.element.createElement(React.Fragment,null,(0,s.__)("Not available in your plan. ","seo-by-rank-math"),wp.element.createElement("a",{href:_("content-ai-pricing-tables","Sidebar Upgrade Text"),rel:"noreferrer",target:"_blank"},(0,s.__)("Upgrade","seo-by-rank-math")));var e=w.total>0?w.total:w.used+(w.remaining||0);return wp.element.createElement(React.Fragment,null,(0,s.sprintf)((0,s.__)("You've used %1$d of %2$d research requests this month.","seo-by-rank-math"),w.used,e))}return wp.element.createElement(React.Fragment,null,(0,s.__)("Upgrade to buy more credits from ","seo-by-rank-math"),wp.element.createElement("a",{href:_("content-ai-pricing-tables","Sidebar Upgrade Text"),rel:"noreferrer",target:"_blank",title:(0,s.__)("Content AI Pricing.","seo-by-rank-math")},(0,s.__)("here.","seo-by-rank-math")))}()),placeholder:(0,s.__)("Suggested length 2-3 Words","seo-by-rank-math"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement("div",{className:"help-text"},(0,s.__)("To learn how to use it","seo-by-rank-math")," ",wp.element.createElement("a",{href:_("content-ai-settings","Content AI Sidebar KB Link"),target:"_blank",rel:"noreferrer"},(0,s.__)("Click here","seo-by-rank-math"))),E&&!d&&!r&&m&&!a&&!(0,i.isEmpty)(t.researchedData)&&wp.element.createElement(c.Button,{className:"rank-math-ca-force-update",onClick:function(){return x({keyword:f,country:y,forceUpdate:E},p,n)},label:A,showTooltip:!0},wp.element.createElement("i",{className:"dashicons dashicons-image-rotate"})),!E&&!d&&!r&&m&&!a&&wp.element.createElement(c.Button,{className:"is-primary",onClick:function(){return x({keyword:f,country:y,forceUpdate:E},p,n)},label:A,showTooltip:!0,disabled:!f},(0,s.__)("Research","seo-by-rank-math")))))};n.dn(T);var P=n(942),N=n.n(P);const I=function(e){var t=e.score;return wp.element.createElement("div",{className:"rank-math-ca-score"},wp.element.createElement("div",{className:"score-text"},(0,s.__)("Score:","seo-by-rank-math")," ",t,wp.element.createElement("span",null," / ",(0,s.__)("100","seo-by-rank-math"))),wp.element.createElement("div",{className:"score-wrapper"},wp.element.createElement("span",{className:"score-dot",style:{left:((0,i.inRange)(t,0,5)?5:t)+"%"}})))};function j(e){return 100<e?"bad-fk dark":80<e?"good-fk":50<e?"ok-fk":"bad-fk"}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function B(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function M(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?B(Object(n),!0).forEach(function(t){R(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):B(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function R(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=F(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=F(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==F(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return q(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?q(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(I),n.dn(j);const z=(0,b.compose)((0,d.withSelect)(function(e,t){var n=1518,r=12,a=2,o=5,s=3,l=0,c=0,u=0,m=8,d=19;if(!t.showError){var p=t.researcher.getResearch("wordCount"),h=rankMathEditor.assessor.analyzer.defaultAnalyses.contentHasAssets;n=p(t.content),r=(0,i.isUndefined)(h)||(0,i.isUndefined)(t.researcher.paper)?0:h.getImages(t.researcher.paper,t.content),a=(0,i.isUndefined)(h)?0:h.getVideos(t.content),o=(t.content.match(/<h2\b[^>]*>(.*?)<\/h2>/g)||[]).length,s=(t.content.match(/<h3\b[^>]*>(.*?)<\/h3>/g)||[]).length,l=(t.content.match(/<h4\b[^>]*>(.*?)<\/h4>/g)||[]).length,c=(t.content.match(/<h5\b[^>]*>(.*?)<\/h5>/g)||[]).length,u=(t.content.match(/<h6\b[^>]*>(.*?)<\/h6>/g)||[]).length;var f=t.researcher.getResearch("getLinkStats")(t.content);m=f.internalTotal,d=f.externalTotal}return M(M({},t),{},{postStats:{wordCount:n,images:r,videos:a,mediaCount:r+a,h2:o,h3:s,h4:l,h5:c,h6:u,headingCount:o+s+l+c+u,internal:m,external:d,linkCount:m+d}})}))(function(e){var t=L((0,u.useState)(""),2),n=t[0],r=t[1];(0,u.useEffect)(function(){(0,i.forEach)(e.recommendations,function(e,t){if("total"!==t){var n=a(t),r=(0,i.isUndefined)(e.total)?e:e.total,s=(0,i.ceil)(150*r/100);o(t,n,r,!1,!0,s)}})},[e.postStats]);var a=function(t){return(0,i.has)(e.postStats,t)?e.postStats[t]:0},o=function(t,n,r,a){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i=arguments.length>5?arguments[5]:void 0;if(e.showError)return 0;var s=n===r?100:n/r*100;if(0===r&&n<=2&&(s=100),a)return s>100&&s<=125?100:s;var l=s>80?100:n/r*80;return s>125&&"wordCount"!==t&&(l=0),o&&e.updateAiScore(t,l),s>100&&"wordCount"===t||s>100&&n<=i?100:s},l=function(e){var t=[],c=null!==(arguments.length>1&&void 0!==arguments[1]?arguments[1]:null);return(0,i.forEach)(e,function(e,u){if("total"!==u){var m=(0,i.isUndefined)(e.total)?e:e.total,d=a(u),p=N()(u,{"has-children":!(0,i.isUndefined)(e.total),show:u===n}),h=(0,i.ceil)(150*m/100),f=o(u,d,m,c,!1,h);t.push(wp.element.createElement("div",{key:u,className:p+" "+j(f),onClick:function(){return r(n!==u?u:"")},role:"presentation"},wp.element.createElement("h4",null,c?u:(0,i.startCase)(u)),c&&wp.element.createElement("span",null,d," / ",m),!c&&wp.element.createElement(React.Fragment,null,wp.element.createElement("strong",null,d),wp.element.createElement("span",{className:"desc"},(0,s.__)("Use","seo-by-rank-math")," ",m," ",(0,s.__)("to","seo-by-rank-math")," ",h)),(0,i.isObject)(e)&&l(e,u)))}}),c?wp.element.createElement("div",{className:"submenu"},t):t};return wp.element.createElement("div",{className:"rank-math-ca-recommendations"},l(e.recommendations))});function H(e){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(e)}var U=["tabId","onClick","children","selected"];function V(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Y(r.key),r)}}function W(e,t,n){return t=G(t),function(e,t){if(t&&("object"==H(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,$()?Reflect.construct(t,n||[],G(e).constructor):t.apply(e,n))}function $(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return($=function(){return!!e})()}function G(e){return G=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},G(e)}function K(e,t){return K=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},K(e,t)}function J(e,t,n){return(t=Y(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e){var t=function(e,t){if("object"!=H(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=H(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==H(t)?t:t+""}function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Z.apply(null,arguments)}var Q=function(e){var t=e.tabId,n=e.onClick,r=e.children,a=e.selected,o=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,U);return wp.element.createElement(c.Button,Z({role:"tab",tabIndex:a?null:-1,"aria-selected":a,id:t,onClick:n},o),r)},X=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),J(e=W(this,t,arguments),"handleClick",function(t){var n=e.props.onSelect,r=void 0===n?i.noop:n;e.setState({selected:t}),r(t)}),J(e,"onNavigate",function(e,t){t.click()});var n=e.props,r=n.tabs,a=n.initialTabName;return e.state={selected:a||(r.length>0?r[0].name:null)},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&K(e,t)}(t,e),function(e,t,n){return t&&V(e.prototype,t),n&&V(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"render",value:function(){var e=this,t=this.state.selected,n=this.props,r=n.activeClass,a=void 0===r?"is-active":r,o=n.className,s=n.instanceId,l=n.orientation,u=void 0===l?"horizontal":l,m=n.tabs,d=(0,i.find)(m,{name:t}),p=s+"-"+d.name,h=m.slice(4);return wp.element.createElement("div",{className:o},wp.element.createElement(c.NavigableMenu,{role:"tablist",orientation:u,onNavigate:this.onNavigate,className:"components-tab-panel__tabs "+t},m.slice(0,4).map(function(n){return wp.element.createElement(Q,{className:N()("components-tab-panel__tabs-item",n.className,J({},a,n.name===t)),tabId:s+"-"+n.name,"aria-controls":s+"-"+n.name+"-view",selected:n.name===t,key:n.name,onClick:(0,i.partial)(e.handleClick,n.name)},n.title)}),h.map(function(n){return wp.element.createElement(Q,{className:N()("components-tab-panel__tabs-item",n.className,J({},a,n.name===t)),tabId:s+"-"+n.name,"aria-controls":s+"-"+n.name+"-view",selected:n.name===t,key:n.name,onClick:(0,i.partial)(e.handleClick,n.name)},n.title)})),d&&wp.element.createElement("div",{"aria-labelledby":p,role:"tabpanel",id:p+"-view",className:"components-tab-panel__tab-content"},this.props.children(d)))}}])}(u.Component);const ee=(0,b.withInstanceId)(X),te=function(e){return e.replace(/<\/?[a-z][^>]*?>/gi,"")};n.dn(te);const ne=function(e){return e.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};n.dn(ne);const re=function(e){return e.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};n.dn(re);const ae=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,t)};n.dn(ae);const oe=function(e){return e.replace(/<!--[\s\S]*?-->/g,"")};function ie(e){return e.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/(\r\n|\n|\r)/gm,"")}n.dn(oe);var se={};(0,i.isUndefined)(rankMath.assessor)||(0,i.forEach)(rankMath.assessor.diacritics,function(e,t){return se[t]=new RegExp(e,"g")});const le=function(e){if((0,i.isUndefined)(e))return e;for(var t in se)e=e.replace(se[t],t);return e};function ce(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ue(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ue(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(le);const me=(0,b.compose)((0,d.withDispatch)(function(e){return{toggleEditor:function(){e("rank-math").toggleSnippetEditor(!0)}}}))(function(e){var t=ce((0,u.useState)("content"),2),n=t[0],r=t[1],a=ce((0,u.useState)(""),2),o=a[0],l=a[1];(0,u.useEffect)(function(){p()},[]);var m=function(t,n){var r,a=e.content;if(t=(0,i.isString)(t)?le(t).toLowerCase():t,"heading"===n){t=t.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&");var o=new RegExp("<h[2-6][^>]*>.*?"+t+".*?</h[2-6]>","g"),s=a.match(o);return(0,i.isNull)(s)?0:s.length}return"title"===n&&(a=e.title),"description"===n&&(a=e.description),(r=a,(0,i.isUndefined)(r)?"":(0,i.flow)([te,re])(r)).split(t).length-1},d=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e.showError)return o===t.keyword?wp.element.createElement("span",{className:"rank-math-tooltip-data"},(0,s.__)("Copied","seo-by-rank-math")):t.competition||t.cpc||t.search_volume?wp.element.createElement("span",{className:"rank-math-tooltip-data"},wp.element.createElement("span",null,(0,s.__)("Ad Competition:","seo-by-rank-math")," ",(0,i.round)(100*t.competition)),wp.element.createElement("span",null,(0,s.__)("CPC:","seo-by-rank-math")," $",(0,i.round)(t.cpc,2)),wp.element.createElement("span",null,(0,s.__)("Volume:","seo-by-rank-math")," ",(0,i.round)(t.search_volume))):wp.element.createElement("span",{className:"rank-math-tooltip-data"},n?(0,s.__)("Click to copy keyword","seo-by-rank-math"):(0,s.__)("No data available","seo-by-rank-math"))},p=function(){"function"!=typeof ClipboardJS||e.showError||new ClipboardJS(".rank-math-tooltip strong",{text:function(e){return e.getAttribute("data-key")}}).on("success",function(){setTimeout(function(){l("")},3e3)})};return wp.element.createElement(u.Fragment,null,wp.element.createElement(c.PanelBody,{initialOpen:!0},wp.element.createElement(c.SelectControl,{label:(0,s.__)("Use Keyword in","seo-by-rank-math"),value:n,options:[{value:"content",label:(0,s.__)("Content","seo-by-rank-math")},{value:"heading",label:(0,s.__)("Headings","seo-by-rank-math")},{value:"title",label:(0,s.__)("SEO Title","seo-by-rank-math")},{value:"description",label:(0,s.__)("SEO Description","seo-by-rank-math")}],onChange:function(e){return r(e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),wp.element.createElement(c.Button,{className:"is-link",href:_("content-ai-keywords","Sidebar Keywords KB Icon"),rel:"noreferrer",target:"_blank",id:"rank-math-help-icon",label:(0,s.__)("Know more about Keywords.","seo-by-rank-math"),showTooltip:!0},"ï¹–"),wp.element.createElement(React.Fragment,null,wp.element.createElement("span",{className:"components-form-token-field__help"},(0,s.__)("Click on any keyword to copy it.","seo-by-rank-math")),wp.element.createElement("br",null),(0,i.includes)(["title","description"],n)&&wp.element.createElement("span",{className:"components-form-token-field__help"},(0,s.__)("Please use only one or two keywords from here.","seo-by-rank-math")),wp.element.createElement("ul",null,function(){if((0,i.isEmpty)(e.researchedData.keywords))return wp.element.createElement("h3",{className:"no-data"},(0,s.__)("There are no recommended Keywords for this researched keyword.","seo-by-rank-math"));var t=[],r={};return(0,i.forEach)(e.researchedData.keywords,function(a,o){(0,i.isEmpty)(a)||(r[o]={},(0,i.forEach)(a,function(a){if(!(0,i.isEmpty)(a.keyword)){var s=e.showError?a.count:m(a.keyword,o),c=j(function(e,t,n,r,a){var o=t/n*100;return a[r][e]=o>100?0:o>80?100:o,o}(a.keyword,s,a.average,o,r)),u=N()("rank-math-tooltip",{show:o===n});t.push(wp.element.createElement("li",{className:u+" "+c,onClick:function(){return l(a.keyword)},role:"presentation"},wp.element.createElement("strong",{"data-key":a.keyword},a.keyword,wp.element.createElement("span",null,s," / ",a.average)),d(a)))}}))}),function(t){var n=0,r=0;(0,i.forEach)(t,function(e,t){var a=Object.values(e),o=(0,i.sum)(a);"title"!==t&&"description"!==t||100!==(0,i.max)(a)||(o=100*a.length),n+=o,r+=a.length}),n/=r,(0,i.isNaN)(n)||e.updateAiScore("keywords",n)}(r),t}())),function(){if("content"!==n||(0,i.isEmpty)(e.researchedData.related_keywords))return!1;var t=[];return(0,i.forEach)(e.researchedData.related_keywords,function(e){t.push(wp.element.createElement("li",{className:"rank-math-tooltip show",onClick:function(){return l(e)},role:"presentation"},wp.element.createElement("strong",{"data-key":e},e),d({keyword:e},!0)))}),wp.element.createElement("div",{className:"rank-math-related-keywords"},wp.element.createElement("h3",null,(0,s.__)("Related Keywords","seo-by-rank-math")),wp.element.createElement("ul",null,t))}()))});function de(e){return de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},de(e)}function pe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,he(r.key),r)}}function he(e){var t=function(e,t){if("object"!=de(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=de(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==de(t)?t:t+""}function fe(e,t,n){return t=be(t),function(e,t){if(t&&("object"==de(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,ge()?Reflect.construct(t,n||[],be(e).constructor):t.apply(e,n))}function ge(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ge=function(){return!!e})()}function be(e){return be=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},be(e)}function ye(e,t){return ye=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ye(e,t)}var ve=function(e){function t(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=fe(this,t,arguments)).state={iconClass:"rm-icon-copy",selected:""},e.setState=e.setState.bind(e),e.initializeClipboard(e.setState),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ye(e,t)}(t,e),function(e,t,n){return t&&pe(e.prototype,t),n&&pe(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"initializeClipboard",value:function(e){var t=this;"function"==typeof ClipboardJS&&new ClipboardJS(".rank-math-copy-questions, .rank-math-questions-item h3",{text:function(e){if(!(0,i.isNull)(e.getAttribute("data-key")))return e.getAttribute("data-key");if(!h())return document.getElementById("rank-math-ca-questions-data").innerHTML;var n=[];return(0,i.forEach)(t.props.researchedData.related_questions,function(e){n.push({id:(0,i.uniqueId)("faq-question-"),title:e,content:"",visible:!0})}),"\x3c!-- wp:rank-math/faq-block "+JSON.stringify({questions:n})+' --\x3e<div class="wp-block-rank-math-faq-block"></div>\x3c!-- /wp:rank-math/faq-block --\x3e'}}).on("success",function(){setTimeout(function(){e({iconClass:"rm-icon-copy"})},3e3)})}},{key:"render",value:function(){var e=this,t=[];return(0,i.isEmpty)(this.props.researchedData.related_questions)?wp.element.createElement("h3",{className:"no-data"},(0,s.__)("There are no recommended Questions for this researched keyword.","seo-by-rank-math")):((0,i.forEach)(this.props.researchedData.related_questions,function(n,r){t.push(wp.element.createElement("div",{className:"rank-math-questions-item",key:r},wp.element.createElement("h3",{className:"rank-math-tooltip","data-key":n,onClick:function(){return e.setState({selected:n})},role:"presentation"},n,e.getTooltipContent(n))))}),wp.element.createElement(u.Fragment,null,wp.element.createElement(c.PanelBody,{initialOpen:!0},wp.element.createElement("div",{className:"rank-math-section-heading"},wp.element.createElement("h2",null,(0,s.__)("Related Questions","seo-by-rank-math"),wp.element.createElement("a",{href:_("content-ai-settings","Sidebar Questions KB Icon"),rel:"noreferrer",target:"_blank",id:"rank-math-help-icon",title:(0,s.__)("Know more about Questions.","seo-by-rank-math")},"ï¹–")),wp.element.createElement(c.Button,{onClick:function(){e.setState({iconClass:"rm-icon-tick"})},className:"rank-math-copy-questions button-secondary rank-math-tooltip left"},wp.element.createElement("i",{className:"rm-icon "+this.state.iconClass}),wp.element.createElement("span",null,(0,s.__)("Copy this data as a FAQ Block.","seo-by-rank-math")))),wp.element.createElement("span",{className:"components-form-token-field__help"},(0,s.__)("Click on any question to copy it.","seo-by-rank-math")),wp.element.createElement("div",{id:"rank-math-ca-questions-data"},t))))}},{key:"getTooltipContent",value:function(e){return this.state.selected===e&&wp.element.createElement("span",{className:"rank-math-tooltip-data"},(0,s.__)("Copied","seo-by-rank-math"))}}])}(u.Component);const _e=ve;const we=function(e){var t=[];return(0,i.isEmpty)(e.researchedData.links)?wp.element.createElement("h3",{className:"no-data"},(0,s.__)("There are no recommended Links for this researched keyword.","seo-by-rank-math")):((0,i.forEach)(e.researchedData.links,function(e,n){return t.push(wp.element.createElement("li",{key:n},wp.element.createElement("a",{href:e,rel:"noreferrer",target:"_blank"},e)))}),wp.element.createElement(u.Fragment,null,wp.element.createElement(c.PanelBody,{initialOpen:!0},wp.element.createElement("div",{className:"rank-math-section-heading"},wp.element.createElement("h2",null,(0,s.__)("Related External Links","seo-by-rank-math"),wp.element.createElement(c.Button,{className:"is-link",href:_("content-ai-links","Sidebar Links KB Icon"),rel:"noreferrer",target:"_blank",id:"rank-math-help-icon",label:(0,s.__)("Know more about Links.","seo-by-rank-math"),showTooltip:!0},"ï¹–")),wp.element.createElement("p",null,(0,s.__)("Use some of these external links in the content area. It is recommended to add","seo-by-rank-math")," ",wp.element.createElement("a",{href:_("about-and-mentions-schema","Use Some External Links"),rel:"noreferrer",target:"_blank"},(0,s.__)("about or mention Schema.","seo-by-rank-math")))),wp.element.createElement("ul",null,t))))};const ke=function(e){return wp.element.createElement(ee,{className:"rank-math-contentai-tabs",activeClass:"is-active",tabs:[{name:"keywords",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("span",null,(0,s.__)("Keywords","seo-by-rank-math"))),view:me,className:"rank-math-keywords-tab"},{name:"questions",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("span",null,(0,s.__)("Questions","seo-by-rank-math"))),view:_e,className:"rank-math-questions-tab"},{name:"links",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("span",null,(0,s.__)("Links","seo-by-rank-math"))),view:we,className:"rank-math-recommended-links-tab"}],data:e},function(t,n){return wp.element.createElement("div",{className:"rank-math-contentai-tab-content-"+t.name,key:n},(0,u.createElement)(t.view,e))})};function Ee(e){return Ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ee(e)}function De(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?De(Object(n),!0).forEach(function(t){Ae(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ae(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Ee(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ee(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ee(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Se.apply(null,arguments)}n.dn(ke);const Oe=(0,b.compose)((0,d.withSelect)(function(e,t){var n=rankMathEditor.assessor.analyzer.researcher,r=n.paper,a=e("rank-math").getKeywords().split(",")[0];return Ce(Ce({},t),{},{score:e("rank-math-content-ai").getScore(),researcher:n,keyword:(0,i.isEmpty)(t.data.keyword)?a:t.data.keyword,content:(0,i.isUndefined)(r)?"":r.getTextLower(),title:(0,i.isUndefined)(r)?"":r.getTitle().toLowerCase(),description:(0,i.isUndefined)(r)?"":r.getDescription().toLowerCase(),hasThumbnail:(0,i.isUndefined)(r)?"":r.hasThumbnail()})}),(0,d.withDispatch)(function(e,t){return{updateAiScore:function(n,r){var a=t.data.score;a[n]=(0,i.round)(r,2),e("rank-math").updateAIScore(a)}}}))(function(e){var t=e.researchedData||{},n=N()("rank-math-content-ai-data",{loading:e.loading,blurred:e.showError}),r=t.recommendations?(0,i.pick)(t.recommendations,e.data.enabledTests):{};return wp.element.createElement("div",{className:n},wp.element.createElement("span",{className:"loader-text"},wp.element.createElement("span",null,(0,s.__)("Fetching Search Results","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("Analysing Your Competitors","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("Crunching the Numbers","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("Cooking a Personalized SEO Plan","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("Final Touches to the SEO Recommendations","seo-by-rank-math"))),(0,i.isString)(t)&&wp.element.createElement("h3",{className:"no-data",dangerouslySetInnerHTML:{__html:t}}),!(0,i.isEmpty)(t)&&!(0,i.isString)(t)&&wp.element.createElement("div",null,wp.element.createElement("h3",{className:"rank-math-ca-section-title"},(0,s.__)("Content AI","seo-by-rank-math"),wp.element.createElement("span",null,(0,s.__)("New!","seo-by-rank-math")),wp.element.createElement(c.Button,{className:"is-link",href:_("content-ai-settings","Sidebar KB Icon"),rel:"noreferrer",target:"_blank",id:"rank-math-help-icon",label:(0,s.__)("Content AI Knowledge Base.","seo-by-rank-math"),showTooltip:!0},"ï¹–")),wp.element.createElement(I,{score:e.score}),wp.element.createElement(z,Se({},e,{recommendations:r})),wp.element.createElement(ke,Se({},e,{researchedData:t}))))}),xe=React;function Te(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function Pe(e,t){let n,r,a=[];for(let o=0;o<e.length;o++){const i=e[o];if("string"!==i.type){if(void 0===t[i.value])throw new Error(`Invalid interpolation, missing component node: \`${i.value}\``);if("object"!=typeof t[i.value])throw new Error(`Invalid interpolation, component node must be a ReactElement or null: \`${i.value}\``);if("componentClose"===i.type)throw new Error(`Missing opening component token: \`${i.value}\``);if("componentOpen"===i.type){n=t[i.value],r=o;break}a.push(t[i.value])}else a.push(i.value)}if(n){const o=function(e,t){const n=t[e];let r=0;for(let a=e+1;a<t.length;a++){const e=t[a];if(e.value===n.value){if("componentOpen"===e.type){r++;continue}if("componentClose"===e.type){if(0===r)return a;r--}}}throw new Error("Missing closing component token `"+n.value+"`")}(r,e),i=Pe(e.slice(r+1,o),t),s=(0,xe.cloneElement)(n,{},i);if(a.push(s),o<e.length-1){const n=Pe(e.slice(o+1),t);a=a.concat(n)}}return a=a.filter(Boolean),0===a.length?null:1===a.length?a[0]:(0,xe.createElement)(xe.Fragment,null,...a)}function Ne(e){const{mixedString:t,components:n,throwErrors:r}=e;if(!n)return t;if("object"!=typeof n){if(r)throw new Error(`Interpolation Error: unable to process \`${t}\` because components is not an object`);return t}const a=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(Te)}(t);try{return Pe(a,n)}catch(e){if(r)throw new Error(`Interpolation Error: unable to process \`${t}\` because of error \`${e.message}\``);return t}}const Ie=function(e){var t=e.tags,n=e.components,r=e.children;return n=n||{},!1===(0,i.isUndefined)(t)&&(t=t.split(",")).forEach(function(e){var t=e;n[e]=wp.element.createElement(t,null)}),Ne({mixedString:r,components:n})};var je=function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(t+="+Free+Plan");var n=new URLSearchParams({utm_source:"Plugin",utm_medium:t,utm_campaign:"WP"});return(0,i.includes)(e,"?")||(e+="?"),e+n.toString()};const Fe=function(e){var t=e.width,n=void 0===t?40:t,r=e.showProNotice,a=void 0!==r&&r,o=e.isBulkEdit,l=void 0!==o&&o,u=e.isResearch,m=void 0!==u&&u,d=e.creditsRequired,p=void 0===d?0:d,h=e.isKeywordIntent,f=void 0!==h&&h,g=e.medium,b=void 0===g?"":g;if(a)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,s.__)("ðŸ”’ This is a PRO-Only Feature","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("We are sorry, but this feature is only available to Rank Math PRO/Business/Agency users. Upgrade to a Rank Math plan to unlock this feature and many more powerful SEO tools, including:","seo-by-rank-math")),wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Automatic Link Audit to Identify SEO Issues","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("AI-Powered Keyword Mapping","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Free 15-Day Content AI Trial","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Built-in Keyword Rank Tracker","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("SEO Performance Email Reports","seo-by-rank-math"))),wp.element.createElement(c.Button,{href:_("pro",t),target:"_blank",className:"button button-primary is-green"},(0,s.__)("Get PRO Now â†’","seo-by-rank-math"))))}(n,b);if(f)return function(e,t){return wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+e},wp.element.createElement("h3",null,(0,s.__)("â›”ï¸� Update Required","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("Your current plugin version does not support this feature. Please update Rank Math PRO to version 3.0.83 or later to unlock full functionality.","seo-by-rank-math")),wp.element.createElement(c.Button,{href:_("pro",t),target:"_blank",className:"button button-primary is-green"},(0,s.__)("Update Now","seo-by-rank-math"))))}(n,b);var y=(0,i.isUndefined)(wp.data.select("rank-math-content-ai"))?rankMath.contentAI:wp.data.select("rank-math-content-ai").getData(),v=y.isUserRegistered,w=y.plan,k="free"===w,E=y.credits>p,D=y.isMigrating;if(E&&m&&!k&&y.credits<500&&(E=!1),v&&w&&E&&!D&&!k)return null;var C,A="width-"+n;return!v||!w||E&&k?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+A},wp.element.createElement("h3",null,(0,s.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!v&&!l&&(0,s.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),v&&!w&&!l&&!k&&(0,s.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math"),v&&!l&&k&&(0,s.__)("To access this Content AI feature, you have to purchase a Content AI Subscription.","seo-by-rank-math"),l&&(0,s.__)("You are one step away from unlocking this premium feature along with many more.","seo-by-rank-math")),function(e,t,n){return t?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Bulk Update Your SEO Meta using AI","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Get Access to 40+ AI SEO Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Expert-Written Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Content Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click WooCommerce Product Descriptions","seo-by-rank-math"))):n?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("On-Page SEO Suggestions","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Bulk SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Multiple RankBot Sessions","seo-by-rank-math"))):40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click Article Generation","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n,l,k),!v&&wp.element.createElement(c.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,s.__)("Connect Now","seo-by-rank-math")),v&&(!w||k)&&wp.element.createElement(c.Button,{href:je(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Plan+Button",k),className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","seo-by-rank-math")))):D?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+A},wp.element.createElement("h3",null,(0,s.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.links.support,target:"_blank",rel:"noreferrer"},(0,s.__)("reach out to the support team.","seo-by-rank-math")),(0,s.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+A},wp.element.createElement("h3",null,(0,s.__)("â›”ï¸� Content AI Credit Alert!","seo-by-rank-math")),wp.element.createElement("p",null,(C=y.resetDate)?wp.element.createElement(Ie,{components:{strong:wp.element.createElement("strong",null)}},(0,s.sprintf)((0,s.__)("Your monthly Content AI credits have been fully utilized. You can wait till %s for your credits to refresh or upgrade to continue enjoying seamless content creation","seo-by-rank-math"),"{{strong}}"+C+"{{/strong}}")):(0,s.__)("Your monthly Content AI credits have been fully utilized. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and access more credits.","seo-by-rank-math")),wp.element.createElement(c.Button,{href:je(rankMath.links["content-ai"]+"?play-video=ioPeVIntJWw&","Buy+Credits+Button",k),className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","seo-by-rank-math")),wp.element.createElement(c.Button,{variant:"link",href:je(rankMath.links["content-ai-restore-credits"],"Buy+Credits+Button",k),className:"button button-secondary",target:"_blank"},(0,s.__)("Missing Credits?","seo-by-rank-math"))))};function Be(){return Be=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Be.apply(null,arguments)}function Me(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Re(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Re(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Re(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Fe);const Le=function(e){var t=Me((0,u.useState)(!1),2),n=t[0],r=t[1],a=e.data,o=e.updateData,s=a.researchedData,l=(0,i.isEmpty)(a.plan)||"free"===a.plan,m=a.isUserRegistered&&a.credits>=500,d=(0,i.isEmpty)(s)&&(!m||l);return d&&(s={keywords:{content:{"rank math":{keyword:"rank math",average:17,count:12},"rank math vs yoast seo":{keyword:"rank math vs yoast seo",average:1,count:1},"what is rank math":{keyword:"what is rank math",average:1,count:1},"rank math schema":{keyword:"rank math schema",average:1,count:1},"rank math configuration":{keyword:"rank math configuration",average:1,count:1},"rank math pro version":{keyword:"rank math pro version",average:1,count:2},"rank math comparison":{keyword:"rank math comparison",average:1,count:1},"rank math for seo":{keyword:"rank math for seo",average:1,count:1},"seo by rank math":{keyword:"seo by rank math",average:1,count:0}}},related_keywords:["rank math plugin","rank math pricing","rank math vs yoast","rank math review","rank math premium","how to use rank math","rank math training","rank math woocommerce","wordpress seo plugin"],recommendations:{wordCount:1829,linkCount:{total:16},headingCount:{total:9},mediaCount:{total:18}}}),wp.element.createElement(u.Fragment,null,wp.element.createElement(c.PanelBody,{className:"rank-math-content-ai-wrapper research",initialOpen:!0},wp.element.createElement(T,{data:a,updateData:o,hasCredits:m,isFree:l,loading:n,setLoading:r,showError:d}),wp.element.createElement(Oe,Be({},e,{researchedData:s,loading:n,showError:d})),d&&wp.element.createElement(Fe,{isResearch:!0})))};n.dn(Le);const qe=wp.blocks;function ze(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var s=o()('<div class="notice notice-'+t+" "+a+' is-dismissible"><p>'+e+"</p></div>").hide();i||n.siblings(".notice").remove(),n.after(s),s.slideDown(),o()(document).trigger("wp-updates-notice-added"),o()("html,body").animate({scrollTop:s.offset().top-50},"slow"),r&&setTimeout(function(){s.fadeOut(function(){s.remove()})},r)}n.dn(ze);const He=function(e){var t=wp.data.select("rank-math-content-ai").getData().usageDetails;if(!t)return!1;var n=t[e];return!!n&&w(n)<=0};function Ue(e){return Ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ue(e)}function Ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function We(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ve(Object(n),!0).forEach(function(t){Ge(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ve(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ge(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Ue(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ue(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ue(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(He);var Ke=(0,s.__)("Sorry, the request has failed. If the issue persists, please contact our Support for assistance.","seo-by-rank-math"),Je=function(e){var t=e.endpoint,n=e.attributes,r=e.callback,a=e.isChat,l=e.repeat,c=void 0===l?0:l,u=e.data,m=void 0===u?{}:u;o().ajax({url:m.url+t,type:"POST",data:n,success:function(e){if((0,i.isEmpty)(e.error))if("default_prompts"!==t){!function(e){if(e.input_truncated){var t=(0,s.__)("AI Fix was applied only considering the beginning of the content, as the full content is too large to be processed by the AI.","seo-by-rank-math");if(h())(0,d.dispatch)("core/notices").createWarningNotice(t,{id:"aiInputTruncated"});else{var n=o()(".wp-header-end").length?o()(".wp-header-end"):o()(".rank-math-header");n.length&&ze(t,"warning",n)}}}(e),function(e){var r=e.result,o={endpoint:t,attributes:n,outputs:(0,i.isEmpty)(r.meta)?r.results:r.meta,isChat:a};(0,i.isUndefined)(r.credits)||(o.credits={credits:r.credits,plan:r.plan,refreshDate:r.refreshDate}),(0,i.isUndefined)(r.usage)||(o.usage=r.usage),v()({method:"POST",path:"/rankmath/v1/ca/saveOutput",data:o}).then(function(e){a||(0,i.isUndefined)(m.history)||(0,d.dispatch)("rank-math-content-ai").updateData("history",e)}).catch(function(e){console.log(e)})}({result:e});var l=(0,i.isEmpty)(e.meta)?e.results:e.meta;if(!(0,i.isEmpty)(e.warning)){var u=m.errors;l.push({warning:(0,i.isUndefined)(u[e.warning])?Ke:u[e.warning]})}if(r(l),!(0,i.isUndefined)(e.usage)){var p,f=e.usage,g=null!==(p=(0,d.select)("rank-math-content-ai").getData().usageDetails)&&void 0!==p?p:{};(0,d.dispatch)("rank-math-content-ai").updateData("usageDetails",We(We({},g),{},Ge({},f.feature,f)))}}else r(e);else!function(e){var t=e.error;if(c<2&&"could_not_generate"===t.code)Je({repeat:c+1});else{var n=m.errors;r({error:(0,i.isUndefined)(n[t.code])?Ke:n[t.code]})}}({error:e.error})},error:function(e){try{var t=JSON.parse(e.responseText);if(!(0,i.isEmpty)(t.err_key)){var n=m.errors,a=(0,i.isUndefined)(t.message)?Ke:t.message;return void r({error:(0,i.isUndefined)(n[t.err_key])?a:n[t.err_key]})}}catch(t){413===e.status&&(Ke=(0,s.__)("Error: The request payload is too large!","seo-by-rank-math")),r({error:Ke})}r({error:Ke})}})};const Ye=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=(0,d.select)("rank-math-content-ai").getData(),o=a.connectData;t=(0,i.merge)(t,{username:o.username,api_key:o.api_key,site_url:o.site_url,plugin_version:rankMath.version}),He(e)?n({error:a.errors.account_limit_reached}):(!(0,i.isUndefined)(t.language)&&t.language||(t.language=a.language),Je({endpoint:e,attributes:t,callback:n,isChat:r,data:a}))};n.dn(Ye);var Ze="&#8203;";function Qe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Xe(e){return function(e){if(Array.isArray(e))return Qe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Qe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qe(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var et={isEnabled:function(){var e;return null===(e=window.TAGIFY_DEBUG)||void 0===e||e},log:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r;this.isEnabled()&&(r=console).log.apply(r,["[Tagify]:"].concat(Xe(t)))},warn:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r;this.isEnabled()&&(r=console).warn.apply(r,["[Tagify]:"].concat(Xe(t)))}},tt=function(e,t,n,r){return e=""+e,t=""+t,r&&(e=e.trim(),t=t.trim()),n?e==t:e.toLowerCase()==t.toLowerCase()},nt=function(e,t){return e&&Array.isArray(e)&&e.map(function(e){return rt(e,t)})};function rt(e,t){var n,r={};for(n in e)t.indexOf(n)<0&&(r[n]=e[n]);return r}function at(e){return(new DOMParser).parseFromString(e.trim(),"text/html").body.firstElementChild}function ot(e,t){for(t=t||"previous";e=e[t+"Sibling"];)if(3==e.nodeType)return e}function it(e){return"string"==typeof e?e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/`|'/g,"&#039;"):e}function st(e){var t=Object.prototype.toString.call(e).split(" ")[1].slice(0,-1);return e===Object(e)&&"Array"!=t&&"Function"!=t&&"RegExp"!=t&&"HTMLUnknownElement"!=t}function lt(e,t,n){var r,a;function o(e,t){for(var n in t)if(t.hasOwnProperty(n)){if(st(t[n])){st(e[n])?o(e[n],t[n]):e[n]=Object.assign({},t[n]);continue}if(Array.isArray(t[n])){e[n]=Object.assign([],t[n]);continue}e[n]=t[n]}}return r=e,(null!=(a=Object)&&"undefined"!=typeof Symbol&&a[Symbol.hasInstance]?a[Symbol.hasInstance](r):r instanceof a)||(e={}),o(e,t),n&&o(e,n),e}function ct(){var e=[],t={},n=!0,r=!1,a=void 0;try{for(var o,i=arguments[Symbol.iterator]();!(n=(o=i.next()).done);n=!0){var s=o.value,l=!0,c=!1,u=void 0;try{for(var m,d=s[Symbol.iterator]();!(l=(m=d.next()).done);l=!0){var p=m.value;st(p)?t[p.value]||(e.push(p),t[p.value]=1):e.includes(p)||e.push(p)}}catch(e){c=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(c)throw u}}}}catch(e){r=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(r)throw a}}return e}function ut(e){return String.prototype.normalize?"string"==typeof e?e.normalize("NFD").replace(/[\u0300-\u036f]/g,""):void 0:e}var mt=function(){return/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent)};function dt(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)})}function pt(e){var t,n=ft.call(this,e),r=null==e||null===(t=e.classList)||void 0===t?void 0:t.contains(this.settings.classNames.tag);return n&&r}function ht(e){return ft.call(this,e)&&(null==e?void 0:e.closest(this.settings.classNames.tagSelector))}function ft(e){var t;return(null==e||null===(t=e.closest)||void 0===t?void 0:t.call(e,this.settings.classNames.namespaceSelector))===this.DOM.scope}function gt(e,t){var n=window.getSelection();return t=t||n.getRangeAt(0),"string"==typeof e&&(e=document.createTextNode(e)),t&&(t.deleteContents(),t.insertNode(e)),e}function bt(e,t,n){return e?(t&&(e.__tagifyTagData=n?t:lt({},e.__tagifyTagData||{},t)),e.__tagifyTagData):(et.warn("tag element doesn't exist",{tagElm:e,data:t}),t)}function yt(e){if(e&&e.parentNode){var t=e,n=window.getSelection(),r=n.getRangeAt(0);n.rangeCount&&(r.setStartAfter(t),r.collapse(!0),n.removeAllRanges(),n.addRange(r))}}function vt(e,t){e.forEach(function(e){if(bt(e.previousSibling)||!e.previousSibling){var n=document.createTextNode("â€‹");e.before(n),t&&yt(n)}})}var _t={delimiters:",",pattern:null,tagTextProp:"value",maxTags:1/0,callbacks:{},addTagOnBlur:!0,addTagOn:["blur","tab","enter"],onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,focusable:!0,focusInputOnRemove:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\.|\:|\s/,mixTagsInterpolator:["[[","]]"],backspace:!0,allowCaretBetweenTags:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:function(){},trim:!0,a11y:{focusableTags:!1,inputAriaLabel:"Tags input field"},mixMode:{insertAfterTag:"Â "},autoComplete:{enabled:!0,rightKey:!1,tabKey:!1},classNames:{namespace:"tagify",mixMode:"tagify--mix",selectMode:"tagify--select",input:"tagify__input",focus:"tagify--focus",tagNoAnimation:"tagify--noAnim",tagInvalid:"tagify--invalid",tagNotAllowed:"tagify--notAllowed",scopeLoading:"tagify--loading",hasMaxTags:"tagify--hasMaxTags",hasNoTags:"tagify--noTags",empty:"tagify--empty",inputInvalid:"tagify__input--invalid",dropdown:"tagify__dropdown",dropdownWrapper:"tagify__dropdown__wrapper",dropdownHeader:"tagify__dropdown__header",dropdownFooter:"tagify__dropdown__footer",dropdownItem:"tagify__dropdown__item",dropdownItemActive:"tagify__dropdown__item--active",dropdownItemHidden:"tagify__dropdown__item--hidden",dropdownItemSelected:"tagify__dropdown__item--selected",dropdownInital:"tagify__dropdown--initial",tag:"tagify__tag",tagText:"tagify__tag-text",tagX:"tagify__tag__removeBtn",tagLoading:"tagify__tag--loading",tagEditing:"tagify__tag--editable",tagFlash:"tagify__tag--flash",tagHide:"tagify__tag--hide"},dropdown:{classname:"",enabled:2,maxItems:10,searchKeys:["value","searchBy"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,escapeHTML:!0,highlightFirst:!0,closeOnSelect:!0,clearOnSelect:!0,position:"all",appendTarget:null},hooks:{beforeRemoveTag:function(){return Promise.resolve()},beforePaste:function(){return Promise.resolve()},suggestionClick:function(){return Promise.resolve()},beforeKeyDown:function(){return Promise.resolve()}}};function wt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){wt(e,t,n[t])})}return e}function Et(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ct(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function At(){for(var e in this.dropdown={},this._dropdown)this.dropdown[e]="function"==typeof this._dropdown[e]?this._dropdown[e].bind(this):this._dropdown[e];this.dropdown.refs(),this.DOM.dropdown.__tagify=this}var St,Ot,xt=(St=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Ct(e,t,n[t])})}return e}({},{events:{binding:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.dropdown.events.callbacks,n=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:t.onKeyDown.bind(this),onMouseOver:t.onMouseOver.bind(this),onMouseLeave:t.onMouseLeave.bind(this),onClick:t.onClick.bind(this),onScroll:t.onScroll.bind(this)},r=e?"addEventListener":"removeEventListener";"manual"!=this.settings.dropdown.position&&(document[r]("scroll",n.position,!0),window[r]("resize",n.position),window[r]("keydown",n.onKeyDown)),this.DOM.dropdown[r]("mouseover",n.onMouseOver),this.DOM.dropdown[r]("mouseleave",n.onMouseLeave),this.DOM.dropdown[r]("mousedown",n.onClick),this.DOM.dropdown.content[r]("scroll",n.onScroll)},callbacks:{onKeyDown:function(e){var t=this;if(this.state.hasFocus&&!this.state.composing){var n=this.settings,r=n.dropdown.includeSelectedTags,a=this.DOM.dropdown.querySelector(n.classNames.dropdownItemActiveSelector),o=this.dropdown.getSuggestionDataByNode(a),i="mix"==n.mode,s="select"==n.mode;n.hooks.beforeKeyDown(e,{tagify:this}).then(function(l){switch(e.key){case"ArrowDown":case"ArrowUp":case"Down":case"Up":e.preventDefault();var c=t.dropdown.getAllSuggestionsRefs(),u="ArrowUp"==e.key||"Up"==e.key;a&&(a=t.dropdown.getNextOrPrevOption(a,!u)),a&&a.matches(n.classNames.dropdownItemSelector)||(a=c[u?c.length-1:0]),t.dropdown.highlightOption(a,!0);break;case"PageUp":case"PageDown":var m;e.preventDefault();var d=t.dropdown.getAllSuggestionsRefs(),p=Math.floor(t.DOM.dropdown.content.clientHeight/(null===(m=d[0])||void 0===m?void 0:m.offsetHeight))||1,h="PageUp"===e.key;if(a){var f=d.indexOf(a),g=h?Math.max(0,f-p):Math.min(d.length-1,f+p);a=d[g]}else a=d[0];t.dropdown.highlightOption(a,!0);break;case"Home":case"End":e.preventDefault();var b=t.dropdown.getAllSuggestionsRefs();a=b["Home"===e.key?0:b.length-1],t.dropdown.highlightOption(a,!0);break;case"Escape":case"Esc":t.dropdown.hide();break;case"ArrowRight":if(t.state.actions.ArrowLeft||n.autoComplete.rightKey||n.allowCaretBetweenTags)return;case"Tab":var y=!n.autoComplete.rightKey||!n.autoComplete.tabKey;if(!i&&!s&&a&&y&&!t.state.editing&&o){e.preventDefault();var v=t.dropdown.getMappedValue(o);return t.state.autoCompleteData=o,t.input.autocomplete.set.call(t,v),!1}return!0;case"Enter":e.preventDefault(),t.state.actions.selectOption=!0,setTimeout(function(){return t.state.actions.selectOption=!1},100),n.hooks.suggestionClick(e,{tagify:t,tagData:o,suggestionElm:a}).then(function(){if(a){var n=r?a:t.dropdown.getNextOrPrevOption(a,!u);t.dropdown.selectOption(a,e,function(){if(n){var e=n.getAttribute("value");n=t.dropdown.getSuggestionNodeByValue(e),t.dropdown.highlightOption(n)}})}else t.dropdown.hide(),i||t.addTags(t.state.inputText.trim(),!0)}).catch(function(e){return et.warn(e)});break;case"Backspace":if(i||t.state.editing.scope)return;var _=t.input.raw.call(t);""!=_&&8203!=_.charCodeAt(0)||(!0===n.backspace?t.removeTags():"edit"==n.backspace&&setTimeout(t.editTag.bind(t),0))}})}},onMouseOver:function(e){var t=e.target.closest(this.settings.classNames.dropdownItemSelector);this.dropdown.highlightOption(t)},onMouseLeave:function(e){this.dropdown.highlightOption()},onClick:function(e){var t=this;if(0==e.button&&e.target!=this.DOM.dropdown&&e.target!=this.DOM.dropdown.content){var n=e.target.closest(this.settings.classNames.dropdownItemSelector),r=this.dropdown.getSuggestionDataByNode(n);this.state.actions.selectOption=!0,setTimeout(function(){return t.state.actions.selectOption=!1},100),this.settings.hooks.suggestionClick(e,{tagify:this,tagData:r,suggestionElm:n}).then(function(){n?t.dropdown.selectOption(n,e):t.dropdown.hide()}).catch(function(e){return et.warn(e)})}},onScroll:function(e){var t=e.target,n=t.scrollTop/(t.scrollHeight-t.parentNode.clientHeight)*100;this.trigger("dropdown:scroll",{percentage:Math.round(n)})}}},refilter:function(e){e=e||this.state.dropdown.query||"",this.suggestedListItems=this.dropdown.filterListItems(e),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger("dropdown:updated",this.DOM.dropdown)},getSuggestionDataByNode:function(e){for(var t,n=e&&e.getAttribute("value"),r=this.suggestedListItems.length;r--;){if(st(t=this.suggestedListItems[r])&&t.value==n)return t;if(t==n)return{value:t}}},getSuggestionNodeByValue:function(e){return this.dropdown.getAllSuggestionsRefs().find(function(t){return t.getAttribute("value")===e})},getNextOrPrevOption:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.dropdown.getAllSuggestionsRefs(),r=n.findIndex(function(t){return t===e});return t?n[r+1]:n[r-1]},highlightOption:function(e,t){var n,r=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(r),this.state.ddItemElm.removeAttribute("aria-selected")),!e)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);n=this.dropdown.getSuggestionDataByNode(e),this.state.ddItemData=n,this.state.ddItemElm=e,e.classList.add(r),e.setAttribute("aria-selected",!0),t&&(e.parentNode.scrollTop=e.clientHeight+e.offsetTop-e.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,n),this.dropdown.position())},selectOption:function(e,t,n){var r=this,a=this.settings,o=a.dropdown.includeSelectedTags,i=a.dropdown,s=i.clearOnSelect,l=i.closeOnSelect;if(!e)return this.addTags(this.state.inputText,!0),void(l&&this.dropdown.hide());t=t||{};var c=e.getAttribute("value"),u="noMatch"==c,m="mix"==a.mode,d=this.suggestedListItems.find(function(e){var t;return(null!==(t=e.value)&&void 0!==t?t:e)==c});if(this.trigger("dropdown:select",{data:d,elm:e,event:t}),d||u){if(this.state.editing){var p=this.normalizeTags([d])[0];d=a.transformTag.call(this,p)||p,this.onEditTagDone(null,lt({__isValid:!0},d))}else this[m?"addMixTags":"addTags"]([d||this.input.raw.call(this)],s);(m||this.DOM.input.parentNode)&&(setTimeout(function(){r.DOM.input.focus(),r.toggleFocusClass(!0)}),l&&setTimeout(this.dropdown.hide.bind(this)),o?n&&n():(e.addEventListener("transitionend",function(){r.dropdown.fillHeaderFooter(),setTimeout(function(){e.remove(),r.dropdown.refilter(),n&&n()},100)},{once:!0}),e.classList.add(this.settings.classNames.dropdownItemHidden)))}else l&&setTimeout(this.dropdown.hide.bind(this))},selectAll:function(e){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems("");var t=this.dropdown.filterListItems("");return e||(t=this.state.dropdown.suggestions),this.addTags(t,!0),this},filterListItems:function(e,t){var n,r,a,o,i,s,l=function(){var e,l,c=void 0,u=void 0;e=h[v],r=(null!=(l=Object)&&"undefined"!=typeof Symbol&&l[Symbol.hasInstance]?l[Symbol.hasInstance](e):e instanceof l)?h[v]:{value:h[v]};var f,g=Object.keys(r).some(function(e){return y.includes(e)})?y:["value"];m.fuzzySearch&&!t.exact?(o=g.reduce(function(e,t){return e+" "+(r[t]||"")},"").toLowerCase().trim(),m.accentedSearch&&(o=ut(o),s=ut(s)),c=0==o.indexOf(s),u=o===s,f=o,a=s.toLowerCase().split(" ").every(function(e){return f.includes(e.toLowerCase())})):(c=!0,a=g.some(function(e){var n=""+(r[e]||"");return m.accentedSearch&&(n=ut(n),s=ut(s)),m.caseSensitive||(n=n.toLowerCase()),u=n===s,t.exact?n===s:0==n.indexOf(s)})),i=!m.includeSelectedTags&&n.isTagDuplicate(st(r)?r.value:r),a&&!i&&(u&&c?p.push(r):"startsWith"==m.sortby&&c?d.unshift(r):d.push(r))},c=this,u=this.settings,m=u.dropdown,d=(t=t||{},[]),p=[],h=u.whitelist,f=m.maxItems>=0?m.maxItems:1/0,g=m.includeSelectedTags,b="function"==typeof m.sortby,y=m.searchKeys,v=0;if(!(e="select"==u.mode&&this.value.length&&this.value[0][u.tagTextProp]==e?"":e)||!y.length){d=g?h:h.filter(function(e){return!c.isTagDuplicate(st(e)?e.value:e)});var _=b?m.sortby(d,s):d.slice(0,f);return this.state.dropdown.suggestions=_,_}for(s=m.caseSensitive?""+e:(""+e).toLowerCase();v<h.length;v++)n=this,l();return this.state.dropdown.suggestions=p.concat(d),_=b?m.sortby(p.concat(d),s):p.concat(d).slice(0,f),this.state.dropdown.suggestions=_,_},getMappedValue:function(e){var t=this.settings.dropdown.mapValueTo;return t?"function"==typeof t?t(e):e[t]||e.value:e.value},createListHTML:function(e){var t=this;return lt([],e).map(function(e,n){"string"!=typeof e&&"number"!=typeof e||(e={value:e});var r=t.dropdown.getMappedValue(e);return r="string"==typeof r&&t.settings.dropdown.escapeHTML?it(r):r,t.settings.templates.dropdownItem.apply(t,[Et(kt({},e),{mappedValue:r}),t])}).join("")}}),Ot=null!=(Ot={refs:function(){this.DOM.dropdown=this.parseTemplate("dropdown",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-wrapper']")},getHeaderRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-header']")},getFooterRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-footer']")},getAllSuggestionsRefs:function(){return function(e){return function(e){if(Array.isArray(e))return Dt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Dt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector))},show:function(e){var t,n,r,a=this,o=this.settings,i="mix"==o.mode&&!o.enforceWhitelist,s=!o.whitelist||!o.whitelist.length,l="manual"==o.dropdown.position;if(e=void 0===e?this.state.inputText:e,!(s&&!i&&!o.templates.dropdownItemNoMatch||!1===o.dropdown.enabled||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(e),e&&!this.suggestedListItems.length&&(this.trigger("dropdown:noMatch",e),o.templates.dropdownItemNoMatch&&(r=o.templates.dropdownItemNoMatch.call(this,{value:e}))),!r){if(this.suggestedListItems.length)e&&i&&!this.state.editing.scope&&!tt(this.suggestedListItems[0].value,e)&&this.suggestedListItems.unshift({value:e});else{if(!e||!i||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:e}]}n=""+(st(t=this.suggestedListItems[0])?t.value:t),o.autoComplete&&n&&0==n.indexOf(e)&&this.input.autocomplete.suggest.call(this,t)}this.dropdown.fill(r),o.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(o.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=e||!0,this.state.dropdown.query=e,this.setStateSelection(),l||setTimeout(function(){a.dropdown.position(),a.dropdown.render()}),setTimeout(function(){a.trigger("dropdown:show",a.DOM.dropdown)})}},hide:function(e){var t=this,n=this.DOM,r=n.scope,a=n.dropdown,o="manual"==this.settings.dropdown.position&&!e;if(a&&document.body.contains(a)&&!o)return window.removeEventListener("resize",this.dropdown.position),this.dropdown.events.binding.call(this,!1),r.setAttribute("aria-expanded",!1),a.parentNode.removeChild(a),setTimeout(function(){t.state.dropdown.visible=!1},100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger("dropdown:hide",a),this},toggle:function(e){this.dropdown[this.state.dropdown.visible&&!e?"hide":"show"]()},getAppendTarget:function(){var e=this.settings.dropdown;return"function"==typeof e.appendTarget?e.appendTarget():e.appendTarget},render:function(){var e,t,n=this,r=((t=this.DOM.dropdown.cloneNode(!0)).style.cssText="position:fixed; top:-9999px; opacity:0",document.body.appendChild(t),e=t.clientHeight,t.parentNode.removeChild(t),e),a=this.settings,o=this.dropdown.getAppendTarget();return!1===a.dropdown.enabled||(this.DOM.scope.setAttribute("aria-expanded",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(a.classNames.dropdownInital),this.dropdown.position(r),o.appendChild(this.DOM.dropdown),setTimeout(function(){return n.DOM.dropdown.classList.remove(a.classNames.dropdownInital)}))),this},fill:function(e){e="string"==typeof e?e:this.dropdown.createListHTML(e||this.suggestedListItems);var t,n=this.settings.templates.dropdownContent.call(this,e);this.DOM.dropdown.content.innerHTML=(t=n)?t.replace(/\>[\r\n ]+\</g,"><").split(/>\s+</).join("><").trim():""},fillHeaderFooter:function(){var e=this.dropdown.filterListItems(this.state.dropdown.query),t=this.parseTemplate("dropdownHeader",[e]),n=this.parseTemplate("dropdownFooter",[e]),r=this.dropdown.getHeaderRef(),a=this.dropdown.getFooterRef();t&&(null==r||r.parentNode.replaceChild(t,r)),n&&(null==a||a.parentNode.replaceChild(n,a))},position:function(e){var t,n=this.settings.dropdown,r=this.dropdown.getAppendTarget();if("manual"!=n.position&&r){var a,o,i,s,l,c,u,m,d,p,h=this.DOM.dropdown,f=n.RTL,g=r===document.body,b=r===this.DOM.scope,y=g?window.pageYOffset:r.scrollTop,v=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,_=v.clientHeight,w=Math.max(v.clientWidth||0,window.innerWidth||0),k=w>480?n.position:"all",E=this.DOM["input"==k?"input":"scope"];if(e=e||h.clientHeight,this.state.dropdown.visible){if("text"==k?(i=(a=function(){var e=document.getSelection();if(e.rangeCount){var t,n,r=e.getRangeAt(0),a=r.startContainer,o=r.startOffset;if(o>0)return(n=document.createRange()).setStart(a,o-1),n.setEnd(a,o),{left:(t=n.getBoundingClientRect()).right,top:t.top,bottom:t.bottom};if(a.getBoundingClientRect)return a.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,o=a.top,s=a.left,l="auto"):(c=function(e){var t=0,n=0;for(e=e.parentNode;e&&e!=v;)t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.parentNode;return{top:t,left:n}}(r),a=E.getBoundingClientRect(),o=b?-1:a.top-c.top,i=(b?a.height:a.bottom-c.top)-1,s=b?-1:a.left-c.left,l=a.width+"px"),!g){var D=function(){for(var e=0,t=n.appendTarget.parentNode;t;)e+=t.scrollTop||0,t=t.parentNode;return e}();o+=D,i+=D}o=Math.floor(o),i=Math.ceil(i),m=w-s<120,d=((u=null!==(t=n.placeAbove)&&void 0!==t?t:_-a.bottom<e)?o:i)+y,p=s+(f&&a.width||0)+window.pageXOffset,p="text"==k&&m?"right: 0;":"left: ".concat(p,"px;"),h.style.cssText="".concat(p," top: ").concat(d,"px; min-width: ").concat(l,"; max-width: ").concat(l),h.setAttribute("placement",u?"top":"bottom"),h.setAttribute("position",k)}}}})?Ot:{},Object.getOwnPropertyDescriptors?Object.defineProperties(St,Object.getOwnPropertyDescriptors(Ot)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(Ot)).forEach(function(e){Object.defineProperty(St,e,Object.getOwnPropertyDescriptor(Ot,e))}),St),Tt="@yaireo/tagify/",Pt={empty:"empty",exceed:"number of tags exceeded",pattern:"pattern mismatch",duplicate:"already exists",notAllowed:"not allowed"},Nt={wrapper:function(e,t){return'<tags class="'.concat(t.classNames.namespace," ").concat(t.mode?"".concat(t.classNames[t.mode+"Mode"]):""," ").concat(e.className,'"\n                    ').concat(t.readonly?"readonly":"","\n                    ").concat(t.disabled?"disabled":"","\n                    ").concat(t.required?"required":"","\n                    ").concat("select"===t.mode?"spellcheck='false'":"",'\n                    tabIndex="-1">\n                    ').concat(this.settings.templates.input.call(this),"\n                ").concat(Ze,"\n        </tags>")},input:function(){var e=this.settings,t=e.placeholder||Ze;return"<span ".concat(!e.readonly&&e.userInput?"contenteditable":"",' data-can-editable tabIndex="0" data-placeholder="').concat(t,'" aria-placeholder="').concat(e.placeholder||"",'"\n                    class="').concat(e.classNames.input,'"\n                    role="textbox"\n                    autocapitalize="false"\n                    autocorrect="off"\n                    aria-label="').concat(e.a11y.inputAriaLabel,'"\n                    aria-autocomplete="both"\n                    aria-multiline="').concat("mix"==e.mode,'"></span>')},tag:function(e,t){var n=t.settings;return'<tag title="'.concat(e.title||e.value,"\"\n                    contenteditable='false'\n                    tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'"\n                    class="').concat(n.classNames.tag," ").concat(e.class||"",'"\n                    ').concat(this.getAttributes(e),">\n            <x title='' tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'" class="').concat(n.classNames.tagX,"\" role='button' aria-label='remove tag'></x>\n            <div>\n                <span ").concat("select"===n.mode&&n.userInput?"contenteditable='true'":"",' autocapitalize="false" autocorrect="off" spellcheck=\'false\' class="').concat(n.classNames.tagText,'">').concat(e[n.tagTextProp]||e.value,"</span>\n            </div>\n        </tag>")},dropdown:function(e){var t=e.dropdown,n="manual"==t.position;return'<div class="'.concat(n?"":e.classNames.dropdown," ").concat(t.classname,'" role="listbox" aria-labelledby="dropdown" dir="').concat(t.RTL?"rtl":"","\">\n                    <div data-selector='tagify-suggestions-wrapper' class=\"").concat(e.classNames.dropdownWrapper,'"></div>\n                </div>')},dropdownContent:function(e){var t=this.settings.templates,n=this.state.dropdown.suggestions;return"\n            ".concat(t.dropdownHeader.call(this,n),"\n            ").concat(e,"\n            ").concat(t.dropdownFooter.call(this,n),"\n        ")},dropdownItem:function(e){return"<div ".concat(this.getAttributes(e),"\n                    class='").concat(this.settings.classNames.dropdownItem," ").concat(this.isTagDuplicate(e.value)?this.settings.classNames.dropdownItemSelected:""," ").concat(e.class||"",'\'\n                    tabindex="0"\n                    role="option">').concat(e.mappedValue||e.value,"</div>")},dropdownHeader:function(e){return"<header data-selector='tagify-suggestions-header' class=\"".concat(this.settings.classNames.dropdownHeader,'"></header>')},dropdownFooter:function(e){var t=e.length-this.settings.dropdown.maxItems;return t>0?"<footer data-selector='tagify-suggestions-footer' class=\"".concat(this.settings.classNames.dropdownFooter,'">\n                ').concat(t," more items. Refine your search.\n            </footer>"):""},dropdownItemNoMatch:null};function It(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function jt(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Ft(e){var t=document.createTextNode(""),n={};function r(e,n,r){r&&n.split(/\s+/g).forEach(function(n){return t[e+"EventListener"].call(t,n,r)})}return{removeAllCustomListeners:function(){Object.entries(n).forEach(function(e){var t=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return It(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?It(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e,2),n=t[0];t[1].forEach(function(e){return r("remove",n,e)})}),n={}},off:function(e,t){return e&&(t?r("remove",e,t):e.split(/\s+/g).forEach(function(e){var t;null===(t=n[e])||void 0===t||t.forEach(function(t){return r("remove",e,t)}),delete n[e]})),this},on:function(e,t){return t&&"function"==typeof t&&(e.split(/\s+/g).forEach(function(e){Array.isArray(n[e])?n[e].push(t):n[e]=[t]}),r("add",e,t)),this},trigger:function(n,r,a){var o,i;if(a=a||{cloneData:!0},n)if(e.settings.isJQueryPlugin)"remove"==n&&(n="removeTag"),jQuery(e.DOM.originalInput).triggerHandler(n,[r]);else{try{var s="object"==(void 0===r?"undefined":(i=r)&&"undefined"!=typeof Symbol&&i.constructor===Symbol?"symbol":typeof i)?r:{value:r};if((s=a.cloneData?lt({},s):s).tagify=this,r.event&&(s.event=this.cloneEvent(r.event)),jt(r,Object))for(var l in r)jt(r[l],HTMLElement)&&(s[l]=r[l]);o=new CustomEvent(n,{detail:s})}catch(e){et.warn(e)}t.dispatchEvent(o)}}}}function Bt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Mt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Rt(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Lt(e){return function(e){if(Array.isArray(e))return Bt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Bt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var qt={customBinding:function(){var e=this;this.customEventsList.forEach(function(t){e.on(t,e.settings.callbacks[t])})},binding:function(){var e,t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=this.settings,r=this.events.callbacks,a=t?"addEventListener":"removeEventListener";if(!(this.state.mainEvents&&t||n.disabled||n.readonly)){for(var o in this.state.mainEvents=t,t&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on("tagify.removeAllTags",this.removeAllTags.bind(this))),e=this.listeners.main=this.listeners.main||{keydown:["input",r.onKeydown.bind(this)],click:["scope",r.onClickScope.bind(this)],dblclick:"select"!=n.mode&&["scope",r.onDoubleClickScope.bind(this)],paste:["input",r.onPaste.bind(this)],drop:["input",r.onDrop.bind(this)],compositionstart:["input",r.onCompositionStart.bind(this)],compositionend:["input",r.onCompositionEnd.bind(this)]})e[o]&&this.DOM[e[o][0]][a](o,e[o][1]);var i=this.listeners.main.inputMutationObserver||new MutationObserver(r.onInputDOMChange.bind(this));i.disconnect(),"mix"==n.mode&&i.observe(this.DOM.input,{childList:!0}),this.events.bindOriginaInputListener.call(this),t&&(this.listeners.main=void 0)}},bindOriginaInputListener:function(e){var t=(e||0)+500;this.listeners.main&&(clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(this.events.callbacks.observeOriginalInputValue.bind(this),t))},bindGlobal:function(e){var t,n=this.events.callbacks,r=e?"removeEventListener":"addEventListener";if(this.listeners&&(e||!this.listeners.global)){this.listeners.global=this.listeners.global||[{type:this.isIE?"keydown":"input",target:this.DOM.input,cb:n[this.isIE?"onInputIE":"onInput"].bind(this)},{type:"keydown",target:window,cb:n.onWindowKeyDown.bind(this)},{type:"focusin",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"focusout",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"click",target:document,cb:n.onClickAnywhere.bind(this),useCapture:!0}];var a=!0,o=!1,i=void 0;try{for(var s,l=this.listeners.global[Symbol.iterator]();!(a=(s=l.next()).done);a=!0)(t=s.value).target[r](t.type,t.cb,!!t.useCapture)}catch(e){o=!0,i=e}finally{try{a||null==l.return||l.return()}finally{if(o)throw i}}e&&(this.listeners.global=void 0)}},unbindGlobal:function(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur:function(e){var t,n,r=this.settings,a=ht.call(this,e.relatedTarget),o=pt.call(this,e.target),i=e.target.classList.contains(r.classNames.tagX),s="focusin"==e.type,l="focusout"==e.type;i&&"mix"!=r.mode&&r.focusInputOnRemove&&this.DOM.input.focus(),a&&s&&!o&&!i&&this.toggleFocusClass(this.state.hasFocus=+new Date);var c=e.target?this.trim(this.DOM.input.textContent):"",u=null===(n=this.value)||void 0===n||null===(t=n[0])||void 0===t?void 0:t[r.tagTextProp],m=r.dropdown.enabled>=0,d={relatedTarget:e.relatedTarget},p=this.state.actions.selectOption&&(m||!r.dropdown.closeOnSelect),h=this.state.actions.addNew&&m;if(l){var f;if("mix"!=r.mode&&(e.relatedTarget&&(null===(f=this.DOM.dropdown)||void 0===f?void 0:f.contains(e.relatedTarget))||this.repositionScopeInput("reset",{focus:!1})),e.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),r.onChangeAfterBlur&&this.triggerChangeEvent()}if(!(p||h||i))if(this.state.hasFocus=!(!s&&!a)&&+new Date,this.toggleFocusClass(this.state.hasFocus),"mix"!=r.mode){if(s){if(!r.focusable)return;var g=0===r.dropdown.enabled&&!this.state.dropdown.visible,b=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector);return this.trigger("focus",d),void(g&&!o&&(this.dropdown.show(this.value.length?"":void 0),"select"===r.mode&&this.setRangeAtStartEnd(!1,b)))}if(l){if(this.trigger("blur",d),this.loading(!1),"select"==r.mode){if(this.value.length){var y=this.getTagElms()[0];c=this.trim(y.textContent)}u===c&&(c="")}c&&!this.state.actions.selectOption&&r.addTagOnBlur&&r.addTagOn.includes("blur")&&this.addTags(c,!0)}a||(this.DOM.input.removeAttribute("style"),this.dropdown.hide())}else s?this.trigger("focus",d):l&&(this.trigger("blur",d),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart:function(e){this.state.composing=!0},onCompositionEnd:function(e){this.state.composing=!1},onWindowKeyDown:function(e){var t,n=this.settings,r=document.activeElement,a=ht.call(this,r)&&this.DOM.scope.contains(r),o=r===this.DOM.input,i=a&&r.hasAttribute("readonly"),s=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector),l=this.state.dropdown.visible;if(("Tab"===e.key&&l||this.state.hasFocus||a&&!i)&&!o){t=r.nextElementSibling;var c=e.target.classList.contains(n.classNames.tagX);switch(e.key){case"Backspace":n.readonly||this.state.editing||(this.removeTags(r),(t||this.DOM.input).focus());break;case"Enter":if(c)return void this.removeTags(e.target.parentNode);n.a11y.focusableTags&&pt.call(this,r)&&setTimeout(this.editTag.bind(this),0,r);break;case"ArrowDown":this.state.dropdown.visible||"mix"==n.mode||this.dropdown.show();break;case"Tab":null==s||s.focus()}}},onKeydown:function(e){var t=this,n=this.settings;if(!this.state.composing&&n.userInput){"select"==n.mode&&n.enforceWhitelist&&this.value.length&&"Tab"!=e.key&&e.preventDefault();var r=this.trim(e.target.textContent);this.trigger("keydown",{event:e}),n.hooks.beforeKeyDown(e,{tagify:this}).then(function(a){if("mix"==n.mode){switch(e.key){case"Left":case"ArrowLeft":t.state.actions.ArrowLeft=!0;break;case"Delete":case"Backspace":if(t.state.editing)return;var o=document.getSelection(),i="Delete"==e.key&&o.anchorOffset==(o.anchorNode.length||0),s=o.anchorNode.previousSibling,l=1==o.anchorNode.nodeType||!o.anchorOffset&&s&&1==s.nodeType&&o.anchorNode.previousSibling;!function(e){var t=document.createElement("div");e.replace(/\&#?[0-9a-z]+;/gi,function(e){return t.innerHTML=e,t.innerText})}(t.DOM.input.innerHTML);var c,u,m,d=t.getTagElms(),p=1===o.anchorNode.length&&o.anchorNode.nodeValue==String.fromCharCode(8203);if("edit"==n.backspace&&l)return c=1==o.anchorNode.nodeType?null:o.anchorNode.previousElementSibling,setTimeout(t.editTag.bind(t),0,c),void e.preventDefault();if(mt()&&Rt(l,Element))return m=ot(l),l.hasAttribute("readonly")||l.remove(),t.DOM.input.focus(),void setTimeout(function(){yt(m),t.DOM.input.click()});if("BR"==o.anchorNode.nodeName)return;if((i||l)&&1==o.anchorNode.nodeType?u=0==o.anchorOffset?i?d[0]:null:d[Math.min(d.length,o.anchorOffset)-1]:i?u=o.anchorNode.nextElementSibling:Rt(l,Element)&&(u=l),3==o.anchorNode.nodeType&&!o.anchorNode.nodeValue&&o.anchorNode.previousElementSibling&&e.preventDefault(),(l||i)&&!n.backspace)return void e.preventDefault();if("Range"!=o.type&&!o.anchorOffset&&o.anchorNode==t.DOM.input&&"Delete"!=e.key)return void e.preventDefault();if("Range"!=o.type&&u&&u.hasAttribute("readonly"))return void yt(ot(u));"Delete"==e.key&&p&&bt(o.anchorNode.nextSibling)&&t.removeTags(o.anchorNode.nextSibling);break;case"Enter":if(e.preventDefault(),t.state.tag)return;var h=window.getSelection();h.getRangeAt(0).insertNode(document.createElement("br")),h.collapseToEnd()}return!0}var f="manual"==n.dropdown.position;switch(e.key){case"Backspace":var g=t.getTagElmBeforeInput();"select"==n.mode&&n.enforceWhitelist&&t.value.length?g&&t.removeTags(g):t.state.dropdown.visible&&"manual"!=n.dropdown.position||""!=e.target.textContent&&8203!=r.charCodeAt(0)||(!0===n.backspace?g&&t.removeTags(g):"edit"==n.backspace&&g&&setTimeout(function(){return t.editTag(g)},0));break;case"Esc":case"Escape":if(t.state.dropdown.visible)return;e.target.blur();break;case"Down":case"ArrowDown":t.state.dropdown.visible||t.dropdown.show();break;case"ArrowLeft":t.repositionScopeInput("left")&&e.preventDefault();break;case"ArrowRight":if(t.repositionScopeInput("right")){e.preventDefault();break}var b=t.state.inputSuggestion||t.state.ddItemData;if(b&&n.autoComplete.rightKey)return void t.addTags([b],!0);break;case"Tab":if(!n.addTagOn.includes(e.key.toLowerCase()))break;case"Enter":if(t.state.dropdown.visible&&!f)return;var y=t.state.autoCompleteData||r;if(!y&&"Tab"===e.key)return!0;e.preventDefault(),setTimeout(function(){t.state.dropdown.visible&&!f||t.state.actions.selectOption||!n.addTagOn.includes(e.key.toLowerCase())||(t.addTags([y],!0),t.state.autoCompleteData=null)})}}).catch(function(e){return e})}},onInput:function(e){this.postUpdate();var t=this.settings;if("mix"==t.mode)return this.events.callbacks.onMixTagsInput.call(this,e);var n=this.input.normalize.call(this,void 0,{trim:!1}),r=n.length>=t.dropdown.enabled,a={value:n,inputElm:this.DOM.input},o=this.validateTag({value:n});"select"==t.mode&&this.toggleScopeValidation(o),a.isValid=o,this.state.inputText!=n&&(this.input.set.call(this,n,!1),-1!=n.search(t.delimiters)?this.addTags(n)&&this.input.set.call(this):t.dropdown.enabled>=0&&this.dropdown[r?"show":"hide"](n),this.trigger("input",a))},onMixTagsInput:function(e){var t,n,r,a,o,i,s,l,c=this,u=this.settings,m=this.value.length,d=this.getTagElms(),p=document.createDocumentFragment(),h=window.getSelection().getRangeAt(0),f=[].map.call(d,function(e){return bt(e).value});if("deleteContentBackward"==e.inputType&&mt()&&this.events.callbacks.onKeydown.call(this,{target:e.target,key:"Backspace"}),vt(this.getTagElms()),this.value.slice().forEach(function(e){e.readonly&&!f.includes(e.value)&&p.appendChild(c.createTagElem(e))}),p.childNodes.length&&(h.insertNode(p),this.setRangeAtStartEnd(!1,p.lastChild)),d.length!=m)return this.value=[].map.call(this.getTagElms(),function(e){return bt(e)}),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(i=window.getSelection()).rangeCount>0&&3==i.anchorNode.nodeType){if((h=i.getRangeAt(0).cloneRange()).collapse(!0),h.setStart(i.focusNode,0),r=(t=h.toString().slice(0,h.endOffset)).split(u.pattern).length-1,(n=t.match(u.pattern))&&(a=t.slice(t.lastIndexOf(n[n.length-1]))),a){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:a.match(u.pattern)[0],value:a.replace(u.pattern,"")},this.state.tag.baseOffset=i.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(u.delimiters))return this.state.tag.value=this.state.tag.value.replace(u.delimiters,""),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,u.dropdown.clearOnSelect),void this.dropdown.hide();o=this.state.tag.value.length>=u.dropdown.enabled;try{s=(s=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&s.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(e){}(s||r<this.state.mixMode.matchedPatternCount)&&(o=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=r}setTimeout(function(){c.update({withoutChangeEvent:!0}),c.trigger("input",lt({},c.state.tag,{textContent:c.DOM.input.textContent})),c.state.tag&&c.dropdown[o?"show":"hide"](c.state.tag.value)},10)},onInputIE:function(e){var t=this;setTimeout(function(){t.events.callbacks.onInput.call(t,e)})},observeOriginalInputValue:function(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere:function(e){if(e.target!=this.DOM.scope&&!this.DOM.scope.contains(e.target)){this.toggleFocusClass(!1),this.state.hasFocus=!1;var t=e.target.closest(this.settings.classNames.dropdownSelector);(null==t?void 0:t.__tagify)!=this&&this.dropdown.hide()}},onClickScope:function(e){var t=this.settings,n=e.target.closest("."+t.classNames.tag);e.target,this.DOM.scope;var r=+new Date-this.state.hasFocus;if(!e.target.classList.contains(t.classNames.tagX))return n&&!this.state.editing?(this.trigger("click",{tag:n,index:this.getNodeIndex(n),data:bt(n),event:e}),void(1!==t.editTags&&1!==t.editTags.clicks&&"select"!=t.mode||this.events.callbacks.onDoubleClickScope.call(this,e))):void(e.target==this.DOM.input&&("mix"==t.mode&&this.fixFirefoxLastTagNoCaret(),r>500||!t.focusable)?this.state.dropdown.visible?this.dropdown.hide():0===t.dropdown.enabled&&"mix"!=t.mode&&this.dropdown.show(this.value.length?"":void 0):"select"!=t.mode||0!==t.dropdown.enabled||this.state.dropdown.visible||(this.events.callbacks.onDoubleClickScope.call(this,function(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Mt(e,t,n[t])})}return e}({},e),{target:this.getTagElms()[0]})),!t.userInput&&this.dropdown.show()));this.removeTags(e.target.parentNode)},onPaste:function(e){var t=this;e.preventDefault();var n,r,a,o=this.settings;if(!o.userInput)return!1;o.readonly||(r=e.clipboardData||window.clipboardData,a=r.getData("Text"),o.hooks.beforePaste(e,{tagify:this,pastedText:a,clipboardData:r}).then(function(o){if(void 0===o&&(o=a),o)if("mix"==t.settings.mode){if(t.settings.pasteAsTags){var i=t.convertPastedTextToMixTags(o),s=t.parseMixTags(i,{skipDOM:!0}),l=s.__tagifyTagsData||[];t.injectAtCaret(s,window.getSelection().getRangeAt(0)),l.forEach(function(e){return t.value.push(e)});var c=t.getTagElms().slice(-l.length);c.forEach(function(e,t){return bt(e,l[t])}),t.update(),vt(c)}else t.injectAtCaret(o,window.getSelection().getRangeAt(0));t.events.callbacks.onMixTagsInput.call(t,e)}else t.injectAtCaret(o,window.getSelection().getRangeAt(0)),t.settings.pasteAsTags?n=t.addTags(t.state.inputText+o,!0):(t.state.inputText=o,t.dropdown.show(o));t.trigger("paste",{event:e,pastedText:a,clipboardData:r,tagsElems:n})}).catch(function(e){return e}))},onDrop:function(e){e.preventDefault()},onEditTagInput:function(e,t){var n,r=e.closest("."+this.settings.classNames.tag),a=this.getNodeIndex(r),o=bt(r),i=this.input.normalize.call(this,e),s=(Mt(n={},this.settings.tagTextProp,i),Mt(n,"__tagId",o.__tagId),n),l=this.validateTag(s);this.editTagChangeDetected(lt(o,s))||!0!==e.originalIsValid||(l=!0),r.classList.toggle(this.settings.classNames.tagInvalid,!0!==l),o.__isValid=l,r.title=!0===l?o.title||o.value:l,i.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=i),this.dropdown.show(i)),this.trigger("edit:input",{tag:r,index:a,data:lt({},this.value[a],{newValue:i}),event:t})},onEditTagPaste:function(e,t){var n=(t.clipboardData||window.clipboardData).getData("Text");t.preventDefault();var r=gt(n);this.setRangeAtStartEnd(!1,r)},onEditTagClick:function(e,t){this.events.callbacks.onClickScope.call(this,t)},onEditTagFocus:function(e){this.state.editing={scope:e,input:e.querySelector("[contenteditable]")}},onEditTagBlur:function(e,t){var n=pt.call(this,t.relatedTarget);if("select"==this.settings.mode&&n&&t.relatedTarget.contains(t.target))this.dropdown.hide();else if(this.state.editing&&(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(document.activeElement)||this.trigger("blur",{}),this.DOM.scope.contains(e))){var r,a,o,i=this.settings,s=e.closest("."+i.classNames.tag),l=bt(s),c=this.input.normalize.call(this,e),u=(Mt(r={},i.tagTextProp,c),Mt(r,"__tagId",l.__tagId),r),m=l.__originalData,d=this.editTagChangeDetected(lt(l,u)),p=this.validateTag(u);if(c)if(d){var h;if(a=this.hasMaxTags(),o=lt({},m,(Mt(h={},i.tagTextProp,this.trim(c)),Mt(h,"__isValid",p),h)),i.transformTag.call(this,o,m),!0!==(p=(!a||!0===m.__isValid)&&this.validateTag(o))){if(this.trigger("invalid",{data:o,tag:s,message:p}),i.editTags.keepInvalid)return;i.keepInvalidTags?o.__isValid=p:o=m}else i.keepInvalidTags&&(delete o.title,delete o["aria-invalid"],delete o.class);this.onEditTagDone(s,o)}else this.onEditTagDone(s,m);else this.onEditTagDone(s)}},onEditTagkeydown:function(e,t){if(!this.state.composing)switch(this.trigger("edit:keydown",{event:e}),e.key){case"Esc":case"Escape":this.state.editing=!1,t.__tagifyTagData.__originalData.value?t.parentNode.replaceChild(t.__tagifyTagData.__originalHTML,t):t.remove();break;case"Enter":case"Tab":e.preventDefault(),setTimeout(function(){return e.target.blur()},0)}},onDoubleClickScope:function(e){var t=e.target.closest("."+this.settings.classNames.tag);if(t){var n,r,a=bt(t),o=this.settings;!1!==(null==a?void 0:a.editable)&&(n=t.classList.contains(this.settings.classNames.tagEditing),r=t.hasAttribute("readonly"),o.readonly||n||r||!this.settings.editTags||!o.userInput||(this.events.callbacks.onEditTagFocus.call(this,t),this.editTag(t)),this.toggleFocusClass(!0),"select"!=o.mode&&this.trigger("dblclick",{tag:t,index:this.getNodeIndex(t),data:bt(t)}))}},onInputDOMChange:function(e){var t=this,n=this.DOM.input.lastChild;e.forEach(function(e){e.addedNodes.forEach(function(e){if("<div><br></div>"==e.outerHTML)e.replaceWith(document.createElement("br"));else if(1==e.nodeType&&e.querySelector(t.settings.classNames.tagSelector)){var n,r=document.createTextNode("");3==e.childNodes[0].nodeType&&"BR"!=e.previousSibling.nodeName&&(r=document.createTextNode("\n")),(n=e).replaceWith.apply(n,Lt([r].concat(Lt(Lt(e.childNodes).slice(0,-1))))),yt(r)}else if(pt.call(t,e)){var a;if(3!=(null===(a=e.previousSibling)||void 0===a?void 0:a.nodeType)||e.previousSibling.textContent||e.previousSibling.remove(),e.previousSibling&&"BR"==e.previousSibling.nodeName){e.previousSibling.replaceWith("\nâ€‹");for(var o=e.nextSibling,i="";o;)i+=o.textContent,o=o.nextSibling;i.trim()&&yt(e.previousSibling)}else e.previousSibling&&!bt(e.previousSibling)||e.before("â€‹")}}),e.removedNodes.forEach(function(e){e&&"BR"==e.nodeName&&pt.call(t,n)&&(t.removeTags(n),t.fixFirefoxLastTagNoCaret())})}),n&&""==n.nodeValue&&n.remove(),n&&"BR"==n.nodeName||this.DOM.input.appendChild(document.createElement("br"))}}};function zt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ht(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function Vt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Ht(e,t,n[t])})}return e}function Wt(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function $t(e){return function(e){if(Array.isArray(e))return zt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return zt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?zt(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gt(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function Kt(e,t){if(!e){et.warn("input element not found",e);var n=new Proxy(this,{get:function(){return function(){return n}}});return n}if(e.__tagify)return et.warn("input element is already Tagified - Same instance is returned.",e),e.__tagify;var r;lt(this,Ft(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,t=t||{},this.getPersistedData=(r=t.id,function(e){var t;if(r){var n,a="/"+e;if(1===(null===(t=localStorage)||void 0===t?void 0:t.getItem(Tt+r+"/v")))try{n=JSON.parse(localStorage[Tt+r+a])}catch(e){}return n}}),this.setPersistedData=function(e){var t;return e?(null===(t=localStorage)||void 0===t||t.setItem(Tt+e+"/v",1),function(t,n){var r,a="/"+n,o=JSON.stringify(t);t&&n&&(null===(r=localStorage)||void 0===r||r.setItem(Tt+e+a,o),dispatchEvent(new Event("storage")))}):function(){}}(t.id),this.clearPersistedData=function(e){return function(t){var n=Tt+"/"+e+"/";if(t)localStorage.removeItem(n+t);else for(var r in localStorage)r.includes(n)&&localStorage.removeItem(r)}}(t.id),this.applySettings(e,t),this.state={inputText:"",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(e),At.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),e.autofocus&&this.DOM.input.focus(),e.__tagify=this}function Jt(e){return Jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jt(e)}function Yt(){return Yt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Yt.apply(null,arguments)}function Zt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Qt(r.key),r)}}function Qt(e){var t=function(e,t){if("object"!=Jt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Jt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Jt(t)?t:t+""}function Xt(e,t,n){return t=tn(t),function(e,t){if(t&&("object"==Jt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,en()?Reflect.construct(t,n||[],tn(e).constructor):t.apply(e,n))}function en(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(en=function(){return!!e})()}function tn(e){return tn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},tn(e)}function nn(e,t){return nn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},nn(e,t)}Kt.prototype={_dropdown:xt,placeCaretAfterNode:yt,getSetTagData:bt,helpers:{sameStr:tt,removeCollectionProp:nt,omit:rt,isObject:st,parseHTML:at,escapeHTML:it,extend:lt,concatWithoutDups:ct,getUID:dt,isNodeTag:pt},customEventsList:["change","add","remove","invalid","input","paste","click","keydown","focus","blur","edit:input","edit:beforeUpdate","edit:updated","edit:start","edit:keydown","dropdown:show","dropdown:hide","dropdown:select","dropdown:updated","dropdown:noMatch","dropdown:scroll"],dataProps:["__isValid","__removed","__originalData","__originalHTML","__tagId"],trim:function(e){return this.settings.trim&&e&&"string"==typeof e?e.trim():e},parseHTML:at,templates:Nt,parseTemplate:function(e,t){return at((e=this.settings.templates[e]||e).apply(this,t))},set whitelist(e){var t=e&&Array.isArray(e);this.settings.whitelist=t?e:[],this.setPersistedData(t?e:[],"whitelist")},get whitelist(){return this.settings.whitelist},set userInput(e){this.settings.userInput=!!e,this.setContentEditable(!!e)},get userInput(){return this.settings.userInput},generateClassSelectors:function(e){var t=function(t){var n=t;Object.defineProperty(e,n+"Selector",{get:function(){return"."+this[n].split(" ")[0]}})};for(var n in e)t(n)},applySettings:function(e,t){var n,r;_t.templates=this.templates;var a=lt({},_t,"mix"==t.mode?{pasteAsTags:!1,dropdown:{position:"text"}}:{});this.origSettings=lt({},t);var o=this.settings=lt({},a,t);if(o.disabled=e.hasAttribute("disabled"),o.readonly=o.readonly||e.hasAttribute("readonly"),o.placeholder=it(e.getAttribute("placeholder")||o.placeholder||""),o.required=e.hasAttribute("required"),this.generateClassSelectors(o.classNames),this.isIE&&(o.autoComplete=!1),["whitelist","blacklist"].forEach(function(t){var n=e.getAttribute("data-"+t);n&&Ut(n=n.split(o.delimiters),Array)&&(o[t]=n)}),"autoComplete"in t&&!st(t.autoComplete)&&(o.autoComplete=_t.autoComplete,o.autoComplete.enabled=t.autoComplete),"mix"==o.mode&&(o.pattern=o.pattern||/@/,o.autoComplete.rightKey=!0,o.delimiters=t.delimiters||null,o.tagTextProp&&!o.dropdown.searchKeys.includes(o.tagTextProp)&&o.dropdown.searchKeys.push(o.tagTextProp)),e.pattern)try{o.pattern=new RegExp(e.pattern)}catch(e){}if(o.delimiters){o._delimiters=o.delimiters;try{o.delimiters=new RegExp(this.settings.delimiters,"g")}catch(e){}}(o.disabled||o.readonly)&&(o.userInput=!1),this.TEXTS=Vt({},Pt,o.texts||{}),"select"==o.mode&&(o.dropdown.includeSelectedTags=!0),("select"!=o.mode||(null===(n=t.dropdown)||void 0===n?void 0:n.enabled))&&o.userInput||(o.dropdown.enabled=0),o.disabled&&(o.dropdown.enabled=!1),o.dropdown.appendTarget=(null===(r=t.dropdown)||void 0===r?void 0:r.appendTarget)||document.body,void 0===o.dropdown.includeSelectedTags&&(o.dropdown.includeSelectedTags=o.duplicates);var i=this.getPersistedData("whitelist");Array.isArray(i)&&(this.whitelist=Array.isArray(o.whitelist)?ct(o.whitelist,i):i)},getAttributes:function(e){var t,n=this.getCustomAttributes(e),r="";for(t in n)r+=" "+t+(void 0!==e[t]?'="'.concat(n[t],'"'):"");return r},getCustomAttributes:function(e){if(!st(e))return"";var t,n={};for(t in e)"__"!=t.slice(0,2)&&"class"!=t&&e.hasOwnProperty(t)&&void 0!==e[t]&&(n[t]=it(e[t]));return n},setStateSelection:function(){var e=window.getSelection(),t={anchorOffset:e.anchorOffset,anchorNode:e.anchorNode,range:e.getRangeAt&&e.rangeCount&&e.getRangeAt(0)};return this.state.selection=t,t},getCSSVars:function(){var e,t,n=getComputedStyle(this.DOM.scope,null);this.CSSVars={tagHideTransition:(e=function(e){if(!e)return{};var t=(e=e.trim().split(" ")[0]).split(/\d+/g).filter(function(e){return e}).pop().trim();return{value:+e.split(t).filter(function(e){return e})[0].trim(),unit:t}}(n.getPropertyValue("--tag-hide-transition")),t=e.value,"s"==e.unit?1e3*t:t)}},build:function(e){var t=this.DOM,n=e.closest("label");this.settings.mixMode.integrated?(t.originalInput=null,t.scope=e,t.input=e):(t.originalInput=e,t.originalInput_tabIndex=e.tabIndex,t.scope=this.parseTemplate("wrapper",[e,this.settings]),t.input=t.scope.querySelector(this.settings.classNames.inputSelector),e.parentNode.insertBefore(t.scope,e),e.tabIndex=-1),n&&n.setAttribute("for","")},destroy:function(){var e,t,n;this.events.unbindGlobal.call(this),null===(e=this.DOM.scope.parentNode)||void 0===e||e.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),this.removeAllCustomListeners(),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(null===(n=this.listeners)||void 0===n||null===(t=n.main)||void 0===t?void 0:t.originalInputValueObserverInterval)},loadOriginalValues:function(e){var t,n=this.settings;if(this.state.blockChangeEvent=!0,void 0===e){var r=this.getPersistedData("value");e=r&&!this.DOM.originalInput.value?r:n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),e)if("mix"==n.mode)this.parseMixTags(e),(t=this.DOM.input.lastChild)&&"BR"==t.tagName||this.DOM.input.insertAdjacentHTML("beforeend","<br>");else{try{Ut(JSON.parse(e),Array)&&(e=JSON.parse(e))}catch(e){}this.addTags(e,!0).forEach(function(e){return e&&e.classList.add(n.classNames.tagNoAnimation)})}else this.postUpdate();this.state.lastOriginalValueReported=n.mixMode.integrated?"":this.DOM.originalInput.value},cloneEvent:function(e){var t={};for(var n in e)"path"!=n&&(t[n]=e[n]);return t},loading:function(e){return this.state.isLoading=e,this.DOM.scope.classList[e?"add":"remove"](this.settings.classNames.scopeLoading),this},tagLoading:function(e,t){return e&&e.classList[t?"add":"remove"](this.settings.classNames.tagLoading),this},toggleClass:function(e,t){"string"==typeof e&&this.DOM.scope.classList.toggle(e,t)},toggleScopeValidation:function(e){var t=!0===e||void 0===e;!this.settings.required&&e&&e===this.TEXTS.empty&&(t=!0),this.toggleClass(this.settings.classNames.tagInvalid,!t),this.DOM.scope.title=t?"":e},toggleFocusClass:function(e){this.toggleClass(this.settings.classNames.focus,!!e)},setPlaceholder:function(e){var t=this;["data","aria"].forEach(function(n){return t.DOM.input.setAttribute("".concat(n,"-placeholder"),e)})},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var e=this.DOM.originalInput,t=this.state.lastOriginalValueReported!==e.value,n=new CustomEvent("change",{bubbles:!0});t&&(this.state.lastOriginalValueReported=e.value,n.simulated=!0,e._valueTracker&&e._valueTracker.setValue(Math.random()),e.dispatchEvent(n),this.trigger("change",this.state.lastOriginalValueReported),e.value=this.state.lastOriginalValueReported)}},events:qt,fixFirefoxLastTagNoCaret:function(){},setRangeAtStartEnd:function(e,t){if(t){e="number"==typeof e?e:!!e,t=t.lastChild||t;var n=document.getSelection();if(Ut(n.focusNode,Element)&&!this.DOM.input.contains(n.focusNode))return!0;try{n.rangeCount>=1&&["Start","End"].forEach(function(r){return n.getRangeAt(0)["set"+r](t,e||t.length)})}catch(e){console.warn(e)}}},insertAfterTag:function(e,t){if(t=t||this.settings.mixMode.insertAfterTag,e&&e.parentNode&&t)return t="string"==typeof t?document.createTextNode(t):t,e.parentNode.insertBefore(t,e.nextSibling),t},editTagChangeDetected:function(e){var t=e.__originalData;for(var n in t)if(!this.dataProps.includes(n)&&e[n]!=t[n])return!0;return!1},getTagTextNode:function(e){return e.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode:function(e,t){this.getTagTextNode(e).innerHTML=it(t)},editTag:function(e,t){var n=this;e=e||this.getLastTag(),t=t||{};var r=this.settings,a=this.getTagTextNode(e),o=this.getNodeIndex(e),i=bt(e),s=this.events.callbacks,l=!0,c="select"==r.mode;if(!c&&this.dropdown.hide(),a){if(!Ut(i,Object)||!("editable"in i)||i.editable)return i=bt(e,{__originalData:lt({},i),__originalHTML:e.cloneNode(!0)}),bt(i.__originalHTML,i.__originalData),a.setAttribute("contenteditable",!0),e.classList.add(r.classNames.tagEditing),this.events.callbacks.onEditTagFocus.call(this,e),a.addEventListener("click",s.onEditTagClick.bind(this,e)),a.addEventListener("blur",s.onEditTagBlur.bind(this,this.getTagTextNode(e))),a.addEventListener("input",s.onEditTagInput.bind(this,a)),a.addEventListener("paste",s.onEditTagPaste.bind(this,a)),a.addEventListener("keydown",function(t){return s.onEditTagkeydown.call(n,t,e)}),a.addEventListener("compositionstart",s.onCompositionStart.bind(this)),a.addEventListener("compositionend",s.onCompositionEnd.bind(this)),t.skipValidation||(l=this.editTagToggleValidity(e)),a.originalIsValid=l,this.trigger("edit:start",{tag:e,index:o,data:i,isValid:l}),a.focus(),!c&&this.setRangeAtStartEnd(!1,a),0===r.dropdown.enabled&&!c&&this.dropdown.show(),this.state.hasFocus=!0,this}else et.warn("Cannot find element in Tag template: .",r.classNames.tagTextSelector)},editTagToggleValidity:function(e,t){var n;if(t=t||bt(e))return(n=!("__isValid"in t)||!0===t.__isValid)||this.removeTagsFromValue(e),this.update(),e.classList.toggle(this.settings.classNames.tagNotAllowed,!n),t.__isValid=n,t.__isValid;et.warn("tag has no data: ",e,t)},onEditTagDone:function(e,t){e=e||this.state.editing.scope,t=t||{};var n,r,a=this.settings,o={tag:e,index:this.getNodeIndex(e),previousData:bt(e),data:t};this.trigger("edit:beforeUpdate",o,{cloneData:!1}),this.state.editing=!1,delete t.__originalData,delete t.__originalHTML,e&&e.parentNode&&((void 0!==(r=t[a.tagTextProp])?null===(n=(r+="").trim)||void 0===n?void 0:n.call(r):a.tagTextProp in t?void 0:t.value)?(e=this.replaceTag(e,t),this.editTagToggleValidity(e,t),a.a11y.focusableTags?e.focus():"select"!=a.mode&&yt(e)):this.removeTags(e)),this.trigger("edit:updated",o),a.dropdown.closeOnSelect&&this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag:function(e,t){t&&""!==t.value&&void 0!==t.value||(t=e.__tagifyTagData),t.__isValid&&1!=t.__isValid&&lt(t,this.getInvalidTagAttrs(t,t.__isValid));var n=this.createTagElem(t);return e.parentNode.replaceChild(n,e),this.updateValueByDOMTags(),n},updateValueByDOMTags:function(){var e=this;this.value.length=0;var t=this.settings.classNames,n=[t.tagNotAllowed.split(" ")[0],t.tagHide];[].forEach.call(this.getTagElms(),function(t){$t(t.classList).some(function(e){return n.includes(e)})||e.value.push(bt(t))}),this.update(),this.dropdown.refilter()},injectAtCaret:function(e,t){var n;if(t=t||(null===(n=this.state.selection)||void 0===n?void 0:n.range),"string"==typeof e&&(e=document.createTextNode(e)),!e)return this;var r=11===e.nodeType?Array.prototype.slice.call(e.childNodes):[e];if(!r.length)return this;if(!t)return this.appendMixTags(e),this;if(!this.DOM.scope.contains(null==t?void 0:t.startContainer))return this;gt(e,t);var a=r[r.length-1]||e;return(null==a?void 0:a.parentNode)&&yt(a),this.setStateSelection(),this.updateValueByDOMTags(),this.update(),this},input:{set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.settings,r=n.dropdown.closeOnSelect;this.state.inputText=e,t&&(this.DOM.input.innerHTML=it(""+e),e&&this.toggleClass(n.classNames.empty,!this.DOM.input.innerHTML)),!e&&r&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw:function(){return this.DOM.input.textContent},validate:function(){var e=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!e),e},normalize:function(e,t){var n=e||this.DOM.input,r=[];n.childNodes.forEach(function(e){return 3==e.nodeType&&r.push(e.nodeValue)}),r=r.join("\n");try{r=r.replace(/(?:\r\n|\r|\n)/g,this.settings.delimiters.source.charAt(0))}catch(e){}return r=r.replace(/\s/g," "),(null==t?void 0:t.trim)?this.trim(r):r},autocomplete:{suggest:function(e){if(this.settings.autoComplete.enabled){"object"!==(void 0===(e=e||{value:""})?"undefined":Gt(e))&&(e={value:e});var t=this.dropdown.getMappedValue(e);if("number"!=typeof t){var n=this.state.inputText.toLowerCase(),r=t.substr(0,this.state.inputText.length).toLowerCase(),a=t.substring(this.state.inputText.length);t&&this.state.inputText&&r==n?(this.DOM.input.setAttribute("data-suggest",a),this.state.inputSuggestion=e):(this.DOM.input.removeAttribute("data-suggest"),delete this.state.inputSuggestion)}}},set:function(e){var t=this.DOM.input.getAttribute("data-suggest"),n=e||(t?this.state.inputText+t:null);return!!n&&("mix"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+n)):(this.input.set.call(this,n),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx:function(e){return this.value.findIndex(function(t){return t.__tagId==(e||{}).__tagId})},getNodeIndex:function(e){var t=0;if(e)for(;e=e.previousElementSibling;)t++;return t},getTagElms:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r="."+$t(this.settings.classNames.tag.split(" ")).concat($t(t)).join(".");return[].slice.call(this.DOM.scope.querySelectorAll(r))},getLastTag:function(){var e=this.settings.classNames,t=this.DOM.scope.querySelectorAll("".concat(e.tagSelector,":not(.").concat(e.tagHide,"):not([readonly])"));return t[t.length-1]},getTagElmBeforeInput:function(){var e=this.DOM.input&&this.DOM.input.previousElementSibling;return pt.call(this,e)?e:void 0},isTagDuplicate:function(e,t,n){var r=0,a=!0,o=!1,i=void 0;try{for(var s,l=this.value[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var c=s.value;tt(this.trim(""+e),c.value,t)&&n!=c.__tagId&&r++}}catch(e){o=!0,i=e}finally{try{a||null==l.return||l.return()}finally{if(o)throw i}}return r},getTagIndexByValue:function(e){var t=this,n=[],r=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach(function(a,o){a.__tagifyTagData&&tt(t.trim(a.__tagifyTagData.value),e,r)&&n.push(o)}),n},getTagElmByValue:function(e){var t=this.getTagIndexByValue(e)[0];return this.getTagElms()[t]},flashTag:function(e){var t=this;e&&(e.classList.add(this.settings.classNames.tagFlash),setTimeout(function(){e.classList.remove(t.settings.classNames.tagFlash)},100))},isTagBlacklisted:function(e){return e=this.trim(e.toLowerCase()),this.settings.blacklist.filter(function(t){return(""+t).toLowerCase()==e}).length},isTagWhitelisted:function(e){return!!this.getWhitelistItem(e)},getWhitelistItem:function(e,t,n){t=t||"value";var r,a=this.settings;return(n=n||a.whitelist).some(function(n){var o="object"==(void 0===n?"undefined":Gt(n))?n[t]||n.value:n;if(tt(o,e,a.dropdown.caseSensitive,a.trim))return r="object"==(void 0===n?"undefined":Gt(n))?n:{value:n},!0}),r||"value"!=t||"value"==a.tagTextProp||(r=this.getWhitelistItem(e,a.tagTextProp,n)),r},validateTag:function(e){var t=this.settings,n="value"in e?"value":t.tagTextProp,r=this.trim(e[n]+"");return(e[n]+"").trim()?"mix"!=t.mode&&t.pattern&&Ut(t.pattern,RegExp)&&!t.pattern.test(r)?this.TEXTS.pattern:!t.duplicates&&this.isTagDuplicate(r,t.dropdown.caseSensitive,e.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(r)||t.enforceWhitelist&&!this.isTagWhitelisted(r)?this.TEXTS.notAllowed:!t.validate||t.validate(e):this.TEXTS.empty},getInvalidTagAttrs:function(e,t){return{"aria-invalid":!0,class:"".concat(e.class||""," ").concat(this.settings.classNames.tagNotAllowed).trim(),title:t}},hasMaxTags:function(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly:function(e,t){var n=this.settings;this.DOM.scope.contains(document.activeElement)&&document.activeElement.blur(),n[t||"readonly"]=e,this.DOM.scope[(e?"set":"remove")+"Attribute"](t||"readonly",!0),this.settings.userInput=!0,this.setContentEditable(!e),e||(this.events.binding.call(this,!0),this.events.binding.call(this),n.dropdown.enabled=this.origSettings.dropdown.enabled)},setContentEditable:function(e){this.DOM.scope.querySelectorAll("[data-can-editable]").forEach(function(t){t.contentEditable=e,t.tabIndex=e?0:-1})},setDisabled:function(e){this.setReadonly(e,"disabled")},normalizeTags:function(e){var t=this,n=this.settings,r=n.whitelist,a=n.delimiters,o=n.mode,i=n.tagTextProp,s=[],l=!!r&&Ut(r[0],Object),c=Array.isArray(e),u=c&&e[0].value,m=function(e){return(e+"").split(a).reduce(function(e,n){var r,a=t.trim(n);return a&&e.push((Ht(r={},i,a),Ht(r,"value",a),r)),e},[])};if("number"==typeof e&&(e=e.toString()),"string"==typeof e){if(!e.trim())return[];e=m(e)}else c&&(e=e.reduce(function(e,n){if(st(n)){var r=lt({},n);i in r||(i="value"),r[i]=t.trim(r[i]),(r[i]||0===r[i])&&e.push(r)}else if(null!=n&&""!==n&&void 0!==n){var a;(a=e).push.apply(a,$t(m(n)))}return e},[]));return l&&!u&&(e.forEach(function(e){var n=s.map(function(e){return e.value}),r=t.dropdown.filterListItems.call(t,e[i],{exact:!0});t.settings.duplicates||(r=r.filter(function(e){return!n.includes(e.value)}));var a=r.length>1?t.getWhitelistItem(e[i],i,r):r[0];a&&Ut(a,Object)?s.push(a):"mix"!=o&&(null==e.value&&(e.value=e[i]),s.push(e))}),s.length&&(e=s)),e},parseMixTags:function(e,t){var n=this,r=this.settings,a=r.mixTagsInterpolator,o=r.duplicates,i=r.transformTag,s=r.enforceWhitelist,l=r.maxTags,c=r.tagTextProp,u=null==t?void 0:t.skipDOM,m=u?document.createDocumentFragment():null,d=[];if(e=e.split(a[0]).map(function(e,t){var r,p,h,f=e.split(a[1]),g=f[0],b=d.length==l;if(u&&0==t&&e)return m.appendChild(document.createTextNode(e)),"";try{if(g==+g)throw Error;p=JSON.parse(g)}catch(e){p=n.normalizeTags(g)[0]||{value:g}}if(i.call(n,p),b||!(f.length>1)||s&&!n.isTagWhitelisted(p.value)||!o&&n.isTagDuplicate(p.value)){if(e)return u?(m.appendChild(document.createTextNode(a[0]+e)),""):t?a[0]+e:e}else{if(p[r=p[c]?c:"value"]=n.trim(p[r]),h=n.createTagElem(p),d.push(p),h.classList.add(n.settings.classNames.tagNoAnimation),u)return m.appendChild(h),f[1]&&m.appendChild(document.createTextNode(f[1])),"";f[0]=h.outerHTML,n.value.push(p)}return f.join("")}).join(""),u)return m.__tagifyTagsData=d,m;this.DOM.input.innerHTML=e,this.DOM.input.appendChild(document.createTextNode("")),this.DOM.input.normalize();var p=this.getTagElms();return p.forEach(function(e,t){return bt(e,d[t])}),this.update({withoutChangeEvent:!0}),vt(p,this.state.hasFocus),e},convertPastedTextToMixTags:function(e){var t=this.settings,n=t.pattern,r=t.whitelist,a=t.mixTagsInterpolator,o=t.mixTagsAllowedAfter,i=t.tagTextProp;if(!n||!(null==r?void 0:r.length))return e;var s=n.source?n.source.split("|"):[n],l={};s.forEach(function(e){var t=e.replace(/\\/g,"");l[t]=r.map(function(e){var t;return t="string"==typeof e?e:e[i]||e.value,{originalItem:e,value:t=String(t),searchValue:t.toLowerCase()}}).sort(function(e,t){return t.value.length-e.value.length})});for(var c,u=new RegExp(n.source,"g"),m=[];null!==(c=u.exec(e));){var d=c[0],p=c.index,h=p+d.length,f=e.slice(h),g=l[d];if(g){var b=null,y=0,v=!0,_=!1,w=void 0;try{for(var k,E=g[Symbol.iterator]();!(v=(k=E.next()).done);v=!0){var D=k.value,C=D.value.length;if(f.slice(0,C).toLowerCase()===D.searchValue){var A=f[C];if(!A||o.test(A)){b=D,y=C;break}}}}catch(e){_=!0,w=e}finally{try{v||null==E.return||E.return()}finally{if(_)throw w}}if(b){var S="string"==typeof b.originalItem?{value:b.value,prefix:d}:Wt(Vt({},b.originalItem),{prefix:d});if(!0===this.validateTag(S)){var O="".concat(a[0]).concat(JSON.stringify(S)).concat(a[1]);m.push({start:p,end:h+y,replacement:O}),u.lastIndex=h+y}}}}var x=e;return m.reverse().forEach(function(e){var t=e.start,n=e.end,r=e.replacement;x=x.slice(0,t)+r+x.slice(n)}),x},replaceTextWithNode:function(e,t){if(this.state.tag||t){t=t||this.state.tag.prefix+this.state.tag.value;var n,r,a=this.state.selection||window.getSelection(),o=a.anchorNode,i=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return o.splitText(a.anchorOffset-i),-1==(n=o.nodeValue.lastIndexOf(t))||(r=o.splitText(n),e&&o.parentNode.replaceChild(e,r)),!0}},prepareNewTagNode:function(e,t){t=t||{};var n=this.settings,r=[],a={},o=Object.assign({},e,{value:e.value+""});if(e=Object.assign({},o),n.transformTag.call(this,e),e.__isValid=this.hasMaxTags()||this.validateTag(e),!0!==e.__isValid){if(t.skipInvalid)return;if(lt(a,this.getInvalidTagAttrs(e,e.__isValid),{__preInvalidData:o}),e.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(e.value)),!n.createInvalidTags)return void r.push(e.value)}return"readonly"in e&&(e.readonly?a["aria-readonly"]=!0:delete e.readonly),{tagElm:this.createTagElem(e,a),tagData:e,aggregatedInvalidInput:r}},postProcessNewTagNode:function(e,t){var n=this,r=this.settings,a=t.__isValid;a&&!0===a?this.value.push(t):(this.trigger("invalid",{data:t,index:this.value.length,tag:e,message:a}),r.keepInvalidTags||setTimeout(function(){return n.removeTags(e,!0)},1e3)),this.dropdown.position()},selectTag:function(e,t){var n=this;if(!this.settings.enforceWhitelist||this.isTagWhitelisted(t.value)){this.state.actions.selectOption&&setTimeout(function(){return n.setRangeAtStartEnd(!1,n.DOM.input)});var r=this.getLastTag();return r?this.replaceTag(r,t):this.appendTag(e),this.value[0]=t,this.update(),this.trigger("add",{tag:e,data:t}),[e]}},addEmptyTag:function(e){var t=lt({value:""},e||{}),n=this.createTagElem(t);bt(n,t),this.appendTag(n),this.editTag(n,{skipValidation:!0}),this.toggleFocusClass(!0)},addTags:function(e,t,n){var r=this,a=[],o=this.settings,i=[],s=document.createDocumentFragment(),l=[];if(!e||0==e.length)return a;switch(e=this.normalizeTags(e),o.mode){case"mix":return this.addMixTags(e);case"select":t=!1,this.removeAllTags()}return this.DOM.input.removeAttribute("style"),e.forEach(function(e){var t=r.prepareNewTagNode(e,{skipInvalid:n||o.skipInvalid});if(t){var c=t.tagElm;if(e=t.tagData,i=t.aggregatedInvalidInput,a.push(c),"select"==o.mode)return r.selectTag(c,e);s.appendChild(c),r.postProcessNewTagNode(c,e),l.push({tagElm:c,tagData:e})}}),this.appendTag(s),l.forEach(function(e){var t=e.tagElm,n=e.tagData;return r.trigger("add",{tag:t,index:r.getTagIdx(n),data:n})}),this.update(),e.length&&t&&(this.input.set.call(this,o.createInvalidTags?"":i.join(o._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),this.dropdown.refilter(),a},addMixTags:function(e){var t=this;if((e=this.normalizeTags(e))[0].prefix||this.state.tag)return this.prefixedTextToTag(e[0]);var n=document.createDocumentFragment(),r=[];return e.forEach(function(e){var a=t.prepareNewTagNode(e);n.appendChild(a.tagElm),t.insertAfterTag(a.tagElm),t.postProcessNewTagNode(a.tagElm,a.tagData),r.push({tagElm:a.tagElm,tagData:a.tagData})}),this.appendMixTags(n,r),n.children},appendMixTags:function(e,t){var n,r=null===(n=this.state.selection)||void 0===n?void 0:n.range,a=!!r&&this.DOM.scope.contains(r.startContainer),o=e?11===e.nodeType?Array.prototype.slice.call(e.childNodes):[e]:[];if(a)this.injectAtCaret(e);else{this.DOM.input.focus();var i=this.setStateSelection();(null==i?void 0:i.range)&&(i.range.setStart(this.DOM.input,i.range.endOffset),i.range.setEnd(this.DOM.input,i.range.endOffset)),this.DOM.input.appendChild(e),this.updateValueByDOMTags(),this.update();var s=o[o.length-1];(null==s?void 0:s.parentNode)&&yt(s),this.setStateSelection()}var l=(null==t?void 0:t.length)?t:o.filter(function(e){return 1===e.nodeType});(null==l?void 0:l.length)&&this.trigger("add",{tags:l})},prefixedTextToTag:function(e){var t,n,r,a=this,o=this.settings,i=null===(t=this.state.tag)||void 0===t?void 0:t.delimiters;if(e.prefix=e.prefix||this.state.tag?this.state.tag.prefix:(o.pattern.source||o.pattern)[0],r=this.prepareNewTagNode(e),n=r.tagElm,this.replaceTextWithNode(n)||this.DOM.input.appendChild(n),setTimeout(function(){return n.classList.add(a.settings.classNames.tagNoAnimation)},300),this.update(),!i){var s=this.insertAfterTag(n)||n;setTimeout(yt,0,s)}return this.state.tag=null,this.postProcessNewTagNode(n,r.tagData),this.trigger("add",{tag:r,data:e}),n},appendTag:function(e){var t=this.DOM,n=t.input;t.scope.insertBefore(e,n)},repositionScopeInput:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.DOM.input,r=this.DOM.scope,a=this.settings,o=n&&n.parentNode,i="reset"===e,s=void 0!==t.focus?t.focus:!i;if("mix"==a.mode||this.state.dropdown.visible)return!1;if(!n||!r||o!=r)return!1;if(i){var l=this.getTagElms(),c=l[l.length-1];return!!c&&c.nextElementSibling!==n&&(c.after(n),s&&n.focus(),!0)}if(!a.allowCaretBetweenTags)return!1;if("left"===e||"ArrowLeft"===e){var u=this.getTagElmBeforeInput();return!!u&&(r.insertBefore(n,u),s&&n.focus(),!0)}if("right"===e||"ArrowRight"===e){var m=n.nextElementSibling;return!!pt.call(this,m)&&(m.after(n),s&&n.focus(),!0)}return!1},createTagElem:function(e,t){var n;e.__tagId=dt();var r,a=lt({},e,Vt((Ht(n={},this.settings.tagTextProp,it((e[this.settings.tagTextProp]||e.value)+"")),Ht(n,"title",it((e.title||e.value)+"")),Ht(n,"value",it(e.value+"")),n),t));return function(e){for(var t,n=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,null,!1);t=n.nextNode();)t.textContent.trim()||t.parentNode.removeChild(t)}(r=this.parseTemplate("tag",[a,this])),bt(r,e),r},reCheckInvalidTags:function(){var e=this,t=this.settings;this.getTagElms(t.classNames.tagNotAllowed).forEach(function(n,r){var a=bt(n),o=e.hasMaxTags(),i=e.validateTag(a),s=!0===i&&!o;if("select"==t.mode&&e.toggleScopeValidation(i),s)return a=a.__preInvalidData?a.__preInvalidData:{value:a.value},e.replaceTag(n,a);n.title=o||i})},removeTags:function(e,t,n){var r,a=this,o=this.settings;if(e=e&&Ut(e,HTMLElement)?[e]:Ut(e,Array)?e:e?[e]:[this.getLastTag()].filter(function(e){return e}),r=e.reduce(function(e,t){t&&"string"==typeof t&&(t=a.getTagElmByValue(t));var n=bt(t);return t&&n&&!n.readonly&&e.push({node:t,idx:a.getTagIdx(n),data:bt(t,{__removed:!0})}),e},[]),n="number"==typeof n?n:this.CSSVars.tagHideTransition,"select"==o.mode&&(n=0,this.input.set.call(this)),1==r.length&&"select"!=o.mode&&r[0].node.classList.contains(o.classNames.tagNotAllowed)&&(t=!0),r.length)return o.hooks.beforeRemoveTag(r,{tagify:this}).then(function(){var e=function(e){e.node.parentNode&&(e.node.parentNode.removeChild(e.node),t?o.keepInvalidTags&&this.trigger("remove",{tag:e.node,index:e.idx}):(this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),o.keepInvalidTags&&this.reCheckInvalidTags(),this.trigger("remove",{tag:e.node,index:e.idx,data:e.data})))};t||(a.removeTagsFromValue(r.map(function(e){return e.node})),a.update(),"select"==o.mode&&o.userInput&&a.setContentEditable(!0)),n&&n>10&&1==r.length?function(t){t.node.style.width=parseFloat(window.getComputedStyle(t.node).width)+"px",document.body.clientTop,t.node.classList.add(o.classNames.tagHide),setTimeout(e.bind(this),n,t)}.call(a,r[0]):r.forEach(e.bind(a))}).catch(function(e){})},removeTagsFromDOM:function(){this.getTagElms().forEach(function(e){return e.remove()})},removeTagsFromValue:function(e){var t=this;(e=Array.isArray(e)?e:[e]).forEach(function(e){var n=bt(e),r=t.getTagIdx(n);r>-1&&t.value.splice(r,1)})},removeAllTags:function(e){var t=this;e=e||{},this.value=[],"mix"==this.settings.mode?this.DOM.input.innerHTML="":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout(function(){t.DOM.input.focus()}),"select"==this.settings.mode&&(this.input.set.call(this),this.settings.userInput&&this.setContentEditable(!0));var n=this.state.blockChangeEvent?void 0:function(){!t.state.blockChangeEvent&&t.trigger("remove",{})};this.update(e,n)},postUpdate:function(){this.state.blockChangeEvent=!1;var e,t,n=this.settings,r=n.classNames,a="mix"==n.mode?n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(r.hasMaxTags,this.value.length>=n.maxTags),this.toggleClass(r.hasNoTags,!this.value.length),this.toggleClass(r.empty,!a),"select"==n.mode&&this.toggleScopeValidation(null===(t=this.value)||void 0===t||null===(e=t[0])||void 0===e?void 0:e.__isValid)},setOriginalInputValue:function(e){var t=this.DOM.originalInput;this.settings.mixMode.integrated||(t.value=e,t.tagifyValue=t.value)},update:function(e,t){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){this.setPersistedData(n,"value"),this.settings.onChangeAfterBlur&&(e||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent(),this.postUpdate(),null==t||t()}.bind(this),100),this.events.bindOriginaInputListener.call(this,100);var n=this.getInputValue();this.setOriginalInputValue(n)},getInputValue:function(){var e=this.getCleanValue();return"mix"==this.settings.mode?this.getMixedTagsAsString(e):e.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(e):JSON.stringify(e):""},getCleanValue:function(e){return nt(e||this.value,this.dataProps)},getMixedTagsAsString:function(){var e="",t=this,n=this.settings,r=n.originalInputValueFormat||JSON.stringify,a=n.mixTagsInterpolator;return function n(o){o.childNodes.forEach(function(o){if(1==o.nodeType){var i=bt(o);if("BR"==o.tagName&&(e+="\r\n"),i&&pt.call(t,o)){if(i.__removed)return;e+=a[0]+r(rt(i,t.dataProps))+a[1]}else o.getAttribute("style")||["B","I","U"].includes(o.tagName)?e+=o.textContent:"DIV"!=o.tagName&&"P"!=o.tagName||(e+="\r\n",n(o))}else e+=o.textContent})}(this.DOM.input),e}},Kt.prototype.removeTag=Kt.prototype.removeTags;var rn=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=Xt(this,t,[e]))._handleRef=n._handleRef.bind(n),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nn(e,t)}(t,e),function(e,t,n){return t&&Zt(e.prototype,t),n&&Zt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(t,[{key:"componentDidMount",value:function(){var e=this;this.tagify||(this.tagify=new Kt(this.component,this.props.settings||{})),this.props.settings.callbacks.setup&&setTimeout(function(){e.props.settings.callbacks.setup.call(e.tagify),e.tagify.DOM.input.setAttribute("contenteditable",!0),e.tagify.DOM.input.addEventListener("blur",e.props.settings.callbacks.blur)},100),this.props.settings.callbacks.dragEnd&&this.tagify.DOM.scope.addEventListener("dragend",this.props.settings.callbacks.dragEnd),(0,l.doAction)("rank_math_tagify_init",this)}},{key:"shouldComponentUpdate",value:function(e){return this.tagify.settings.whitelist=e.settings.whitelist,e.showDropdown&&this.tagify.dropdown.show.call(this.tagify,e.showDropdown),!1===e.showDropdown&&this.tagify.dropdown.hide.call(this.tagify,!0),!1}},{key:"_handleRef",value:function(e){this.component=e}},{key:"render",value:function(){var e={ref:this._handleRef,id:this.props.id,name:this.props.name,className:this.props.className,placeholder:this.props.placeholder};return"textarea"===this.props.mode?wp.element.createElement("textarea",Yt({},e,{defaultValue:this.props.initialValue})):wp.element.createElement("input",Yt({},e,{defaultValue:this.props.initialValue}))}},{key:"toArray",value:function(){return this.tagify.value.map(function(e){return e.value})}},{key:"toString",value:function(){return this.toArray().join(",")}},{key:"queryTags",value:function(){return this.tagify.DOM.scope.querySelectorAll("tag")}}])}(u.Component);const an=rn,on=function(e){return e=o()("<textarea />").html(e).text(),((new DOMParser).parseFromString(e,"text/html").body.textContent||"").replace(/["<>]/g,"")||""};n.dn(on);const sn=function(e){if("[object Object]"!==Object.prototype.toString.call(e))return"";var t,n,r="",a=Object.keys(e);for(n=a.length;n--;)"class"!==(t=a[n])&&e.hasOwnProperty(t)&&e[t]&&(r+=""+t+(e[t]?'="'.concat(on(e[t]),'"'):""));return r};n.dn(sn);const ln=function(e){return{topic_brief:{label:(0,s.__)("Topic Brief","seo-by-rank-math"),placeholder:(0,s.__)("Enter a short summary of your topic","seo-by-rank-math"),type:"textarea",maxlength:"400"},audience:{label:(0,s.__)("Audience","seo-by-rank-math"),tooltip:(0,s.__)("The target audience for the content.","seo-by-rank-math"),placeholder:(0,s.__)("Select or Write Custom","seo-by-rank-math"),options:[{value:"General Audience",icon:"ðŸŒ�"},{value:"Consumers",icon:"ðŸ›�"},{value:"Students",icon:"ðŸ“š"},{value:"Professionals",icon:"ðŸ’¼"},{value:"Business Owners",icon:"ðŸ�­"},{value:"Job Seekers",icon:"ðŸ”�"},{value:"Investors",icon:"ðŸ’°"},{value:"Entrepreneurs",icon:"ðŸš€"},{value:"Social Media Users",icon:"ðŸ“±"},{value:"Travelers",icon:"ðŸ›«"},{value:"Pet Owners",icon:"ðŸ�¾"},{value:"Seniors",icon:"ðŸ§“"},{value:"Gaming Enthusiasts",icon:"ðŸŽ®"},{value:"Environmentalists",icon:"ðŸŒ�"},{value:"Sports Fans",icon:"âš½ï¸�"},{value:"Health Enthusiasts",icon:"ðŸ’Š"},{value:"Tech Enthusiasts",icon:"ðŸ’»"},{value:"Parents",icon:"ðŸ‘¨â€�ðŸ‘§â€�ðŸ‘¦"},{value:"Artists",icon:"ðŸŽ¨"},{value:"Musicians",icon:"ðŸŽ¸"},{value:"Photographers",icon:"ðŸ“·"},{value:"Writers",icon:"âœ�ï¸�"},{value:"Retirees",icon:"ðŸ‘´"},{value:"Healthcare Professionals",icon:"ðŸ‘©â€�âš•ï¸�"},{value:"Educators",icon:"ðŸ‘©â€�ðŸ�«"},{value:"Activists",icon:"ðŸ‘©â€�âš–ï¸�"},{value:"Foodies",icon:"ðŸ�•"},{value:"Cooks",icon:"ðŸ‘©â€�ðŸ�³"},{value:"Fitness Enthusiasts",icon:"ðŸ�‹ï¸�â€�â™€ï¸�"},{value:"Bargain Hunters",icon:"ðŸ›�"},{value:"Fashionistas",icon:"ðŸ‘—"},{value:"Outdoor Enthusiasts",icon:"ðŸ�•"},{value:"Indoor Hobbyists",icon:"ðŸŽ¨"},{value:"Gardeners",icon:"ðŸŒ±"},{value:"DIYers",icon:"ðŸ”§"},{value:"Crafters",icon:"ðŸ§¶"},{value:"Collectors",icon:"ðŸ“š"},{value:"Dancers",icon:"ðŸ’ƒ"},{value:"Gamers",icon:"ðŸŽ®"},{value:"Movie Buffs",icon:"ðŸŽ¥"},{value:"TV Enthusiasts",icon:"ðŸ“º"},{value:"Video Creators",icon:"ðŸŽ¥"},{value:"Engineers",icon:"ðŸ”§"},{value:"Designers",icon:"ðŸŽ¨"},{value:"Podcast Listeners",icon:"ðŸŽ§"},{value:"Bloggers",icon:"ðŸ“�"},{value:"Authors",icon:"ðŸ“š"}],default:rankMath.contentAI.audience,maxlength:"200"},tone:{label:(0,s.__)("Tone","seo-by-rank-math"),tooltip:(0,s.__)("The tone of the content.","seo-by-rank-math"),placeholder:(0,s.__)("Select or Write Custom","seo-by-rank-math"),options:[{value:"Formal",icon:"ðŸ¤µ"},{value:"Informal",icon:"ðŸ¤—"},{value:"Friendly",icon:"ðŸ˜Š"},{value:"Casual",icon:"ðŸ’�â€�â™€ï¸�"},{value:"Conversational",icon:"ðŸ—£ï¸�"},{value:"Descriptive",icon:"ðŸ“š"},{value:"Persuasive",icon:"ðŸ¤�"},{value:"Creative",icon:"ðŸŽ¨"},{value:"Technical",icon:"ðŸ”§"},{value:"Analytical",icon:"ðŸ“Š"},{value:"Journalese",icon:"ðŸ“°"},{value:"Poetic",icon:"ðŸŒº"},{value:"Factual",icon:"ðŸ“Š"},{value:"Emotional",icon:"ðŸ’”"},{value:"Satirical",icon:"ðŸ˜…"},{value:"Empathetic",icon:"ðŸ˜”"},{value:"Opinionated",icon:"ðŸ’¬"},{value:"Humorous",icon:"ðŸ˜‚"},{value:"Story-telling",icon:"ðŸ“š"},{value:"Narrative",icon:"ðŸ“–"},{value:"Expository",icon:"ðŸ“š"},{value:"Argumentative",icon:"ðŸ—£ï¸�"},{value:"Objective",icon:"ðŸ“Š"},{value:"Subjective",icon:"ðŸ’¬"}],default:rankMath.contentAI.tone,maxlength:"200"},style:{label:(0,s.__)("Style","seo-by-rank-math"),tooltip:(0,s.__)("The style of the content.","seo-by-rank-math"),help_link:"https://rankmath.com/kb/blog-post-idea/?utm_source=Plugin&utm_medium=AI+Tool+Style&utm_campaign=WP#style",placeholder:(0,s.__)("Select or Write Custom","seo-by-rank-math"),options:[{value:"Listicle",icon:"ðŸ”¢"},{value:"Tutorial",icon:"ðŸ“–"},{value:"Review",icon:"â­�ï¸�"},{value:"Case Study",icon:"ðŸ•µï¸�â€�â™‚ï¸�"},{value:"Opinion",icon:"ðŸ—£ï¸�"},{value:"News",icon:"ðŸ“°"},{value:"Newsjacking",icon:"ðŸ—ž"},{value:"Personal",icon:"ðŸ’¬"},{value:"Story-telling",icon:"ðŸ“š"},{value:"Guide",icon:"ðŸ—ºï¸�"},{value:"Research-based",icon:"ðŸ”¬"},{value:"Interview",icon:"ðŸŽ¤"},{value:"Infographic",icon:"ðŸ“Š"},{value:"Debate",icon:"ðŸ¤”"},{value:"Video Blog",icon:"ðŸŽ¥"},{value:"Vlog",icon:"ðŸ“¹"},{value:"Podcast",icon:"ðŸŽ§"},{value:"Audio Blog",icon:"ðŸŽ™"},{value:"Quiz",icon:"ðŸŽ²"},{value:"Contest",icon:"ðŸŽ‰"},{value:"Poll",icon:"ðŸ“Š"},{value:"Comparison",icon:"ðŸ”Ž"},{value:"How-to",icon:"ðŸ“–"},{value:"FAQ",icon:"â�“"}],maxlength:"200"},language:{label:(0,s.__)("Output Language","seo-by-rank-math"),placeholder:(0,s.__)("","seo-by-rank-math"),type:"select",options:[{value:"US English",icon:"ðŸ‡ºðŸ‡¸"},{value:"UK English",icon:"ðŸ‡¬ðŸ‡§"},{value:"Arabic",icon:"ðŸ‡¦ðŸ‡ª"},{value:"Bulgarian",icon:"ðŸ‡§ðŸ‡¬"},{value:"Chinese",icon:"ðŸ‡¨ðŸ‡³"},{value:"Czech",icon:"ðŸ‡¨ðŸ‡¿"},{value:"Danish",icon:"ðŸ‡©ðŸ‡°"},{value:"Dutch",icon:"ðŸ‡³ðŸ‡±"},{value:"Estonian",icon:"ðŸ‡ªðŸ‡ª"},{value:"Finnish",icon:"ðŸ‡«ðŸ‡®"},{value:"French",icon:"ðŸ‡«ðŸ‡·"},{value:"German",icon:"ðŸ‡©ðŸ‡ª"},{value:"Greek",icon:"ðŸ‡¬ðŸ‡·"},{value:"Hebrew",icon:"ðŸ‡®ðŸ‡±"},{value:"Hungarian",icon:"ðŸ‡­ðŸ‡º"},{value:"Indonesian",icon:"ðŸ‡®ðŸ‡©"},{value:"Italian",icon:"ðŸ‡®ðŸ‡¹"},{value:"Japanese",icon:"ðŸ‡¯ðŸ‡µ"},{value:"Korean",icon:"ðŸ‡°ðŸ‡·"},{value:"Latvian",icon:"ðŸ‡±ðŸ‡»"},{value:"Lithuanian",icon:"ðŸ‡±ðŸ‡¹"},{value:"Norwegian",icon:"ðŸ‡³ðŸ‡´"},{value:"Polish",icon:"ðŸ‡µðŸ‡±"},{value:"Portuguese",icon:"ðŸ‡µðŸ‡¹"},{value:"Romanian",icon:"ðŸ‡·ðŸ‡´"},{value:"Russian",icon:"ðŸ‡·ðŸ‡º"},{value:"Slovak",icon:"ðŸ‡¸ðŸ‡°"},{value:"Slovenian",icon:"ðŸ‡¸ðŸ‡®"},{value:"Spanish",icon:"ðŸ‡ªðŸ‡¸"},{value:"Swedish",icon:"ðŸ‡¸ðŸ‡ª"},{value:"Turkish",icon:"ðŸ‡¹ðŸ‡·"}],default:rankMath.contentAI.language,maxTags:1},topic:{label:(0,s.__)("Topic","seo-by-rank-math"),placeholder:(0,s.__)("Enter a short summary of your topic","seo-by-rank-math"),maxlength:"200"},main_points:{label:(0,s.__)("Main points &amp; ideas","seo-by-rank-math"),placeholder:(0,s.__)("Enter the main points you want to cover, separated by comma","seo-by-rank-math"),type:"textarea",maxlength:"400"},focus_keyword:{label:(0,s.__)("Focus Keyword","seo-by-rank-math"),placeholder:(0,s.__)("Enter the main keywords to focus on","seo-by-rank-math"),maxlength:"200",options:[],default:[]},title:{label:(0,s.__)("Post title","seo-by-rank-math"),placeholder:(0,s.__)("Enter your post title","seo-by-rank-math"),maxlength:200},main_argument:{label:(0,s.__)("Main Argument","seo-by-rank-math"),placeholder:(0,s.__)("Enter the main point you want to make","seo-by-rank-math"),type:"textarea",maxlength:"400"},call_to_action:{label:(0,s.__)("Call to Action","seo-by-rank-math"),placeholder:(0,s.__)("Select or Write Custom","seo-by-rank-math"),type:"select",options:["Subscribe to our newsletter","Follow social media accounts","Download a resource or guide","Share the blog post on social media","Comment on the blog post","Check out related resources","Sign up for a webinar or event","Contact for more information","Purchase a product or service"],maxlength:"300"},post_brief:{label:(0,s.__)("Post Brief","seo-by-rank-math"),placeholder:(0,s.__)("Enter a short summary of your post","seo-by-rank-math"),type:"textarea",maxlength:"400"},length:{label:(0,s.__)("Length","seo-by-rank-math"),placeholder:(0,s.__)("","seo-by-rank-math"),type:"button",options:[{value:"short"},{value:"medium"},{value:"long"}],maxlength:200,default:"medium"},relevance:{label:(0,s.__)("Relevance","seo-by-rank-math"),placeholder:(0,s.__)("Select or Write Custom","seo-by-rank-math"),options:[{value:"Recent",icon:"ðŸ—“ï¸�"},{value:"Historical",icon:"ðŸ“œ"},{value:"Regional",icon:"ðŸ—ºï¸�"},{value:"Comparative",icon:"âš–ï¸�"},{value:"Specific",icon:"ðŸŽ¯"},{value:"Longitudinal",icon:"ðŸ“ˆ"},{value:"Cross-cultural",icon:"ðŸŒ�"},{value:"Theoretical",icon:"ðŸ“š"},{value:"Empirical",icon:"ðŸ“Š"},{value:"Applied",icon:"ðŸ› ï¸�"}],maxlength:200},format:{label:(0,s.__)("Format","seo-by-rank-math"),placeholder:(0,s.__)("Select or Write desired output format","seo-by-rank-math"),options:["Summary","List","Outline"],maxlength:200},post_title:{label:(0,s.__)("Post Title","seo-by-rank-math"),placeholder:(0,s.__)("Enter your post title","seo-by-rank-math"),maxlength:200},seo_title:{label:(0,s.__)("SEO Title","seo-by-rank-math"),placeholder:(0,s.__)("Enter your SEO title","seo-by-rank-math"),maxlength:200},supporting_points:{label:(0,s.__)("Supporting Points","seo-by-rank-math"),placeholder:(0,s.__)("The supporting points you want to include in the paragraph","seo-by-rank-math"),type:"textarea",maxlength:500},original_paragraph:{label:(0,s.__)("Original Paragraph","seo-by-rank-math"),placeholder:(0,s.__)("Enter the paragraph you want to rephrase","seo-by-rank-math"),type:"textarea",maxlength:1e3},sentence:{label:(0,s.__)("Sentence","seo-by-rank-math"),placeholder:(0,s.__)("Enter a short or incomplete sentence","seo-by-rank-math"),type:"textarea",maxlength:200},text:{label:(0,s.__)("Original Text","seo-by-rank-math"),placeholder:(0,s.__)("Enter the text to summarize","seo-by-rank-math"),type:"textarea",maxlength:2e3},product_name:{label:(0,s.__)("Product Name","seo-by-rank-math"),placeholder:(0,s.__)("Enter the name of the product","seo-by-rank-math"),maxlength:"200"},features_and_benefits:{label:(0,s.__)("Features and Benefits","seo-by-rank-math"),placeholder:(0,s.__)("Enter a list of features and benefits, separated by commas","seo-by-rank-math"),type:"textarea",maxlength:600},limitations_and_drawbacks:{label:(0,s.__)("Limitations and Drawbacks","seo-by-rank-math"),placeholder:(0,s.__)("","seo-by-rank-math"),type:"textarea",maxlength:600},reply_brief:{label:(0,s.__)("Reply Brief","seo-by-rank-math"),placeholder:(0,s.__)("Enter a short summary of the required response","seo-by-rank-math"),type:"textarea",maxlength:400},original_comment:{label:(0,s.__)("Original Comment","seo-by-rank-math"),placeholder:(0,s.__)("The original comment that requires a response","seo-by-rank-math"),type:"textarea",maxlength:600},personal_information:{label:(0,s.__)("Personal Information","seo-by-rank-math"),placeholder:(0,s.__)("Enter personal details, such as your name, age, occupation, etc.","seo-by-rank-math"),type:"textarea",maxlength:400},purpose:{label:(0,s.__)("Purpose","seo-by-rank-math"),placeholder:(0,s.__)("What is the purpose of this bio?","seo-by-rank-math"),maxlength:200},personal_achievements:{label:(0,s.__)("Personal Achievements","seo-by-rank-math"),placeholder:(0,s.__)("Enter a list of your personal achievements, separated by commas","seo-by-rank-math"),type:"textarea",maxlength:400},company_name:{label:(0,s.__)("Company Name","seo-by-rank-math"),placeholder:(0,s.__)("Enter the name of your company","seo-by-rank-math"),maxlength:200},company_information:{label:(0,s.__)("Company Information","seo-by-rank-math"),placeholder:(0,s.__)("Enter company details, such as the company name, location, and industry","seo-by-rank-math"),type:"textarea",maxlength:500},company_history:{label:(0,s.__)("Company History","seo-by-rank-math"),placeholder:(0,s.__)("Enter a brief history of the company","seo-by-rank-math"),type:"textarea",maxlength:500},team:{label:(0,s.__)("Team","seo-by-rank-math"),placeholder:(0,s.__)("Enter a brief description of the team","seo-by-rank-math"),type:"textarea",maxlength:500},job_title:{label:(0,s.__)("Job Title","seo-by-rank-math"),placeholder:(0,s.__)("Enter the job title.","seo-by-rank-math"),maxlength:200},requirements:{label:(0,s.__)("Requirements","seo-by-rank-math"),placeholder:(0,s.__)("Enter the key requirements for the position, separated by commas","seo-by-rank-math"),type:"textarea",maxlength:400},responsibilities:{label:(0,s.__)("Responsibilities","seo-by-rank-math"),placeholder:(0,s.__)("Enter a list of responsibilities, separated by commas","seo-by-rank-math"),type:"textarea",maxlength:400},comment:{label:(0,s.__)("Comment","seo-by-rank-math"),placeholder:(0,s.__)("The comment you want to reply to.","seo-by-rank-math"),type:"textarea",maxlength:600},hashtags:{label:(0,s.__)("Hashtags","seo-by-rank-math"),placeholder:(0,s.__)("Enter one or more hashtags, separated by commas","seo-by-rank-math"),maxlength:200},tweet:{label:(0,s.__)("Tweet","seo-by-rank-math"),placeholder:(0,s.__)("Enter the original tweet to reply to.","seo-by-rank-math"),type:"textarea",maxlength:400},email_brief:{label:(0,s.__)("Email Brief","seo-by-rank-math"),placeholder:(0,s.__)("Enter a brief description of the email","seo-by-rank-math"),type:"textarea",maxlength:500},email:{label:(0,s.__)("Email","seo-by-rank-math"),placeholder:(0,s.__)("Enter the original email","seo-by-rank-math"),type:"textarea",maxlength:1e3},product_description:{label:(0,s.__)("Product Description","seo-by-rank-math"),placeholder:(0,s.__)("Introduce your product here. Provide a detailed description of its features and benefits, highlighting what sets it apart from competitors and why it's the perfect solution for your target audience.","seo-by-rank-math"),type:"textarea",maxlength:200},visual_elements:{label:(0,s.__)("Visual Elements","seo-by-rank-math"),placeholder:(0,s.__)("Enter the visual elements you want to include in the video","seo-by-rank-math"),type:"textarea",maxlength:400},key_points:{label:(0,s.__)("Key Points","seo-by-rank-math"),placeholder:(0,s.__)("Enter the main points you want to cover, separated by commas.","seo-by-rank-math"),type:"textarea",maxlength:"400"},host:{label:(0,s.__)("Host","seo-by-rank-math"),placeholder:(0,s.__)("Enter the name of the host of the podcast","seo-by-rank-math"),type:"textarea",maxlength:200},co_host:{label:(0,s.__)("Guest(s) or co-host","seo-by-rank-math"),placeholder:(0,s.__)("Enter the name(s) separated by comma","seo-by-rank-math"),type:"textarea",maxlength:200},cuisine:{label:(0,s.__)("Cuisine","seo-by-rank-math"),placeholder:(0,s.__)("e.g. Italian, Chinese, Mexican","seo-by-rank-math"),maxlength:200},type:{label:(0,s.__)("Type of Dish","seo-by-rank-math"),placeholder:(0,s.__)("e.g. soup, salad, casserole","seo-by-rank-math"),maxlength:200},ingredients:{label:(0,s.__)("Ingredients","seo-by-rank-math"),placeholder:(0,s.__)("Enter the ingredients needed for the recipe, separated by commas (e.g. flour, sugar, eggs, milk)","seo-by-rank-math"),type:"textarea",maxlength:1e3},dietary_restrictions:{label:(0,s.__)("Dietary restrictions","seo-by-rank-math"),placeholder:(0,s.__)("List any dietary restrictions that the recipe should adhere to (e.g. gluten-free, vegan, low-carb)","seo-by-rank-math"),type:"textarea",maxlength:400},command:{label:(0,s.__)("Command","seo-by-rank-math"),placeholder:(0,s.__)("Enter your command","seo-by-rank-math"),type:"textarea",maxlength:1e3},instructions:{label:(0,s.__)("Instructions","seo-by-rank-math"),type:"textarea",placeholder:(0,s.__)("Enter instructions","seo-by-rank-math"),maxlength:600},document_title:{label:(0,s.__)("Document Title","seo-by-rank-math"),placeholder:(0,s.__)("Enter the document title","seo-by-rank-math"),maxlength:200}}[e]};n.dn(ln);var cn={paragraph:"https://rankmath.com/kb/content-ai-paragraph-writing-tool/",paragraph_rewriter:"https://rankmath.com/kb/content-ai-paragraph-rewriter-tool/",topic_research:"https://rankmath.com/kb/content-ai-topic-research-tool/?play-video=jbl6YfxdDMA",seo_title:"https://rankmath.com/kb/content-ai-seo-title-tool/?play-video=IGzjfbZ0r8g",seo_description:"https://rankmath.com/kb/content-ai-seo-description-tool/?play-video=chKiMSDIN14",facebook_post:"https://rankmath.com/kb/content-ai-facebook-post-tool/?play-video=_tBBi26JAiU",instagram_caption:"https://rankmath.com/kb/content-ai-instagram-caption-tool/?play-video=GHk4JwcOpRY",email:"https://rankmath.com/kb/content-ai-email-tool/?play-video=hJSmY0_WTK0",email_reply:"https://rankmath.com/kb/content-ai-email-reply-tool/?play-video=j5R8TGVtDLY",aida:"https://rankmath.com/kb/content-ai-aida-tool/?play-video=pHH1w_yNy4o",seo_meta:"https://rankmath.com/kb/content-ai-seo-meta-tool/?play-video=fqC81KMX5IY",opengraph:"https://rankmath.com/kb/content-ai-open-graph-tool/",ai_command:"https://rankmath.com/kb/content-ai-command-tool/",write:"https://rankmath.com/kb/content-ai-editor/"};const un=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=cn[e];if(!n){var r=(0,i.replace)(e,/_/g,"-");n="https://rankmath.com/kb/content-ai-".concat(r,"-tool/")}return t&&(0,i.includes)(n,"play-video")&&(n=(0,i.head)((0,i.split)(n,"?"))),"".concat(n).concat((0,i.includes)(n,"?")?"&":"?").concat("utm_source=Plugin&utm_medium=AI+Tool&utm_campaign=WP")};n.dn(un);const mn=function(e){var t=e.id,n=e.data,r=e.value,a=e.endpoint,o=un(void 0===a?"":a,!0);return wp.element.createElement("label",{htmlFor:t},(0,i.unescape)(n.label),o&&wp.element.createElement("a",{href:o+"#"+t,rel:"noreferrer",target:"_blank",title:n.tooltip},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help rank-math-tooltip"})),n.maxlength&&wp.element.createElement("span",{className:"limit"},wp.element.createElement("span",{className:"count"},(0,i.size)((0,i.isArray)(r)?r.join(" "):r)),"/",n.maxlength))};n.dn(mn);const dn=function(e,t,n,r,a){var o=wp.data.select("rank-math-content-ai").getContentAiAttributes();return wp.element.createElement("form",{className:"rank-math-ai-tools"},(0,i.map)(e,function(e,l){var m=ln(l);m.placeholder=(0,i.isEmpty)(e.placeholder)?m.placeholder:e.placeholder,m.label=(0,i.isEmpty)(e.label)?m.label:e.label;var d=e.isRequired,p=(0,i.isArray)(t[l])?t[l].join(" "):t[l],h=N()("form-field",{"is-required":d,"limit-reached":!(0,i.isUndefined)(m.maxlength)&&!(0,i.isUndefined)(p)&&p.length>m.maxlength}),f=(0,i.isUndefined)(o[l])?function(e,t){return(0,i.isUndefined)(e.default)?t:e.default}(e,m.default):o[l];if(!(0,i.isEmpty)(m.options)&&"button"===m.type)return wp.element.createElement("div",{className:h,key:l},wp.element.createElement(mn,{id:l,data:m,value:"",endpoint:n}),wp.element.createElement(c.__experimentalToggleGroupControl,{value:f,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0},(0,i.map)(m.options,function(e,t){return wp.element.createElement(c.ToolbarButton,{key:t,value:e.value,isPressed:e.value===f,onClick:function(){return r(l,e.value)}},(0,i.isEmpty)(e.label)?e.value:e.label)})));if(!(0,i.isUndefined)(m.options)){var g=(0,u.createRef)(),b={add:function(e){var n=(0,i.isArray)(t[l])?[e.detail.data.value]:e.detail.data.value;!(0,i.isUndefined)(t[l])&&(0,i.isArray)(t[l])&&(n=t[l]).push(e.detail.data.value),r(l,n)},remove:function(e){if(!(0,i.isArray)(t[l]))return r(l,""),!1;var n=(0,i.remove)(t[l],function(t){return t!==e.detail.data.value});return r(l,n),!1}},y={addTagOnBlur:!0,maxTags:m.maxTags?m.maxTags:"100",whitelist:m.options,focusableTags:!0,transformTag:function(e){e.value=e.value.replaceAll(",","")},templates:{tag:function(e){var t=(0,i.isUndefined)(e.icon)?"":e.icon;try{return"<tag ".concat(sn(e)," title='").concat(e.value,"' contenteditable='false' spellcheck=\"false\" class='tagify__tag'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<x title='remove tag' class='tagify__tag__removeBtn'></x>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t").concat(t,"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class='tagify__tag-text'>").concat(e.value,"</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</tag>")}catch(e){}},dropdownItem:function(e){var t=(0,i.isUndefined)(e.icon)?"":e.icon;try{return"<div ".concat(sn(e)," class='tagify__dropdown__item'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t").concat(t,"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>").concat(e.value,"</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>")}catch(e){console.error(e)}}},dropdown:{enabled:0,maxItems:100,closeOnSelect:!0},callbacks:b};return wp.element.createElement("div",{className:h+" content-ai-tagify rank-math-focus-keyword",key:l},wp.element.createElement(mn,{id:l,data:m,value:t[l],endpoint:n}),wp.element.createElement(an,{id:l,ref:g,mode:"input",settings:y,placeholder:m.placeholder,initialValue:f}))}return(0,i.isEmpty)(m.type)||"textarea"!==m.type?wp.element.createElement("div",{className:h,key:l},wp.element.createElement(mn,{id:l,data:m,value:f,endpoint:n}),wp.element.createElement(c.TextControl,{id:l,onChange:function(e){return r(l,e)},placeholder:m.placeholder,className:d?"is-required":"",required:d?"required":"",value:f,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})):wp.element.createElement("div",{className:h,key:l},wp.element.createElement(mn,{id:l,data:m,value:t[l],endpoint:n}),wp.element.createElement(c.TextareaControl,{id:l,onChange:function(e){return r(l,e)},placeholder:m.placeholder,className:d?"is-required":"",rows:m.rows?m.rows:"5",required:d?"required":"",value:(0,i.isUndefined)(f)?"":f,__nextHasNoMarginBottom:!0}),a&&"main_points"===l&&!(0,i.isEmpty)(t.topic)&&wp.element.createElement(c.Button,{variant:"link",className:"generate",onClick:function(){t.title=t.topic,r(l,(0,s.__)("Generatingâ€¦","seo-by-rank-math")),Ye("Main_Points",t,function(e){r(l,e[0]),r("topic",t.topic),document.getElementById("main_points").value=e[0]})}},(0,s.__)("Generate with AI","seo-by-rank-math")))}))};n.dn(dn);const pn=function(){return"undefined"!=typeof tinymce&&null!==tinymce.activeEditor&&!0!==tinymce.activeEditor.isHidden()&&"content"===tinymce.activeEditor.id};n.dn(pn);const hn=function(){var e=(0,d.select)("core/block-editor").getSelectedBlock(),t=(0,d.select)("core/block-editor").getBlocks();if(!(0,i.isEmpty)(e)){var n=t.map(function(t){return t.clientId===e.clientId}).indexOf(!0)+1;return{block:e,position:n,clientId:e.clientId}}if((0,i.isEmpty)(t))return{block:[],position:0};var r=t[t.length-1];return{block:r,position:t.length,clientId:r.clientId}};n.dn(hn);const fn=function(e){return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?(0,i.isUndefined)(e.attributes.content)||(0,i.isEmpty)(e.attributes.content.text)?e.attributes.content:e.attributes.content.text:(0,i.isEmpty)(e.attributes.content)&&(0,i.isEmpty)(e.innerBlocks)};n.dn(fn);var gn=n(552),bn=new(n.n(gn)().Converter)({noHeaderId:!0,tables:!0,literalMidWordUnderscores:!0,omitExtraWLInCodeBlocks:!0,simpleLineBreaks:!0,strikethrough:!0}),yn=function(e){return e.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/,function(e,t,n,r){return"".concat(t,"\n").concat(n,"\n").concat(r)})},vn=function(e){return e.replace(/(^|\n)â€¢( +)/g,"$1*$2")};const _n=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,i.isString)(e)?t?bn.makeMarkdown(e):rankMath.contentAI.isContentAIPage||"gutenberg"===rankMath.currentEditor?(0,qe.serialize)((0,qe.rawHandler)({HTML:bn.makeHtml(yn(vn(e))),mode:"BLOCKS"})):bn.makeHtml(yn(vn(e))):e};n.dn(_n);const wn=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=800-e,n=[];if("elementor"===rankMath.currentEditor){var r,a=elementor.$preview[0].contentWindow.document;a.getElementsByClassName("elementor-element-editable");r=a.getElementsByClassName("elementor-widget-container");var s=Array.from(r),l=!1;return(0,i.forEach)(s.reverse(),function(r){if(e>=800)return!1;if(r.innerText){o()(r).parents(".elementor-element-editable").length&&(o()(a).find(".rank-math-active").removeClass("rank-math-active"),o()(r).addClass("rank-math-active"),l=!0),l||(o()(r).addClass("rank-math-active"),l=!0);var s=r.querySelectorAll("*"),c=Array.from(s);(0,i.forEach)(c.reverse(),function(r){if(e>=600)return!1;var a=(0,i.includes)(["h1","h2","h3","h4","h5","h6"],r.localName)?"Heading: "+r.innerText:r.innerText;if(a&&!(0,i.includes)(["div","b","i","u","em"],r.localName))if(a.length<=t)n.push(a),e+=a.length,t-=a.length;else{var o=a.match(/[^\.!\?]+[\.!\?]+/g);(0,i.forEach)(o.reverse(),function(r){e<600&&(n.push(r),e+=r.length,t-=r.length)})}})}}),_n(n.reverse().join("\n\n"),!0)}if(pn()){var c=tinyMCE.activeEditor.selection.getSelectedBlocks();return(0,i.forEach)(c.reverse(),function(r){if(e>=800)return!1;var a=(0,i.includes)(["h1","h2","h3","h4","h5","h6"],r.localName)?"<"+r.localName+">"+r.innerText+"</"+r.localName+">":r.innerHTML;if(a.length<=t)n.push(a),e+=a.length,t-=a.length;else{var o=a.match(/[^\.!\?]+[\.!\?]+/g);(0,i.forEach)(o.reverse(),function(r){e<800&&(n.push(r),e+=r.length,t-=r.length)})}}),_n(n.reverse().join("\n\n"),!0)}var u=hn();if((0,i.isEmpty)(u.block))return"";var m=u.clientId,p=[];return(0,i.forEach)((0,d.select)("core/block-editor").getBlocks(),function(e){if("rank-math/command"!==e.name&&p.push(e),e.clientId===m)return!1}),(0,i.forEach)(p.reverse(),function(r){if(e>=800)return!1;var a=fn(r);if(!(0,i.isEmpty)(a)){var o="core/heading"===r.name?"<h"+r.attributes.level+">"+a+"</h"+r.attributes.level+">":"<p>"+a+"</p>";if(o.length<=t)n.push(o),e+=o.length,t-=o.length;else{var s=o.match(/[^\.!\?]+[\.!\?]+/g);(0,i.isEmpty)(s)||(0,i.forEach)(s.reverse(),function(r){e<800&&(n.push(r),e+=r.length,t-=r.length)})}}}),_n(n.reverse().join("\n\n"),!0)};n.dn(wn);var kn=function(){return"\n\tlet words = [];\n\tlet currentWordIndex = 0;\n\tlet currentLetterIndex = 0;\n\tlet typingSpeed = ".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:25,"\n\t\n\tfunction typeWords() {\n\t\tif ( currentWordIndex >= words.length ) {\n\t\t\tpostMessage('rank_math_process_complete')\n\t\t\treturn\n\t\t}\n\t\n\t\tconst currentWord = words[ currentWordIndex ];\n\t\tif ( currentLetterIndex < currentWord.length ) {\n\t\t\tpostMessage( currentWord );\n\t\t\tcurrentLetterIndex = currentLetterIndex + currentWord.length;\n\t\t} else {\n\t\t\tcurrentWordIndex++;\n\t\t\tcurrentLetterIndex = 0;\n\t\t\tpostMessage(' '); // Add space between words\n\t\t}\n\t\n\t\tsetTimeout( typeWords, typingSpeed );\n\t}\n\t\n\tself.onmessage = function (event) {\n\t\twords = event.data.split(' ');\n\t\ttypeWords();\n\t};\n\t")};const En=function(){var e="blog_post_outline"!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?25:10;return new Worker(URL.createObjectURL(new Blob([kn(e)],{type:"application/javascript"})))};n.dn(En);var Dn=function(e){var t=elementor.$preview[0].contentWindow.document,n=t.getElementsByClassName("rank-math-active");n.length||(n=(n=t.getElementsByClassName("elementor-widget-container"))[n.length-1]),o()(n).trigger("click");var r=o()(n).find("[data-elementor-setting-key]"),a=r.data();setTimeout(function(){if("title"===a.elementorSettingKey){var t=o()('[data-setting="title"]');t.val(t.val()+" "+e),r.text(r.text()+" "+e)}else{var n=tinymce.activeEditor;n.selection.select(n.getBody(),!0),n.selection.collapse(!1),n.insertContent(" "+e)}},300),o()(n).removeClass("rank-math-active")};const Cn=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!function(){var e=elementor.settings.page.getEditedView().getContainer();if(!e.children.length){var t={model:{custom:"",elType:"widget",widgetType:"text-editor"},options:{at:void 0,side:"top",default:"",value:"",text:"",html:""},container:e};$e.run("preview/drop",t)}}(),setTimeout(function(){!function(e,t){var n=elementor.$preview[0].contentWindow.document,r=Array.from(n.getElementsByClassName("elementor-widget-container"));if((0,i.forEach)(r.reverse(),function(e){e.innerText&&o()(e).addClass("rank-math-active")}),e=_n(e),t){var a=En();a.onmessage=function(e){var t=e.data;t&&"rank_math_process_complete"!==t&&Dn(t)},a.postMessage(e)}else Dn(e)}(e,t)},500)};n.dn(Cn);const An=wp.blockEditor;const Sn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";r&&(0,d.dispatch)("core/block-editor").updateBlockAttributes(t,{content:r});var a=En();a.onmessage=function(e){var r=e.data;if(r)if("classic"!==rankMath.currentEditor){if(t){var a=(0,d.select)("core/block-editor").getBlock(t),i="<br>"===r,s=fn(a);"rank_math_process_complete"!==r?(s?s+="<br>"===r||i?r:" "+r:s=r,(0,d.dispatch)("core/block-editor").updateBlockAttributes(a.clientId,{content:s}),function(e){var t,n=(t=e)?t.nodeType?t:t.jquery?t[0]||null:"string"==typeof t?document.querySelector(t):(Array.isArray(t)||t.length)&&t[0]||null:null;if(n){var r=n.querySelector&&n.querySelector('[contenteditable="true"]')||n;if(r&&r.nodeType){var a=getSelection&&getSelection();if(a){var o=document.createRange();r.focus&&r.focus(),a.removeAllRanges(),o.selectNodeContents(r),o.collapse(!1),a.addRange(o)}}}}(document.getElementById("block-"+a.clientId))):n&&((0,d.dispatch)("core/block-editor").updateBlockAttributes(a.clientId,{content:s+n,className:""}),setTimeout(function(){o()(".rank-math-content-ai-command-buttons .rank-math-content-ai-use").trigger("focus")},100))}}else tinymce.activeEditor.insertContent("rank_math_process_complete"!==r?" "+r:"")},a.postMessage(e)};n.dn(Sn);(0,s.__)("Generatingâ€¦","seo-by-rank-math");var On=(0,d.dispatch)(An.store),xn=On.updateBlockAttributes,Tn=(On.removeBlock,function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";Ye(e,t,function(e){e.error?xn(n,{content:e.error,className:"rank-math-content-ai-command",isAiGenerated:!1,hasApiError:!0}):(e=(0,i.isArray)(e)?e[0]:e,(0,i.isNull)(n)?Sn(e):(xn(n,{content:"",className:"rank-math-content-ai-command",isAiGenerated:!0}),Sn(e,n,null,r)))})});const Pn=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];(0,i.isNull)(n)||xn(n,{content:(0,s.__)("Generatingâ€¦","seo-by-rank-math"),className:"typing rank-math-content-ai-command",endpoint:e,params:t,replaceBlock:a,selectedId:r}),Tn(e,t,n)};n.dn(Pn);const Nn=function(){return wp.element.createElement("p",{className:"transparency-notice",style:{fontStyle:"italic",position:"relative",zIndex:100,marginBottom:0,opacity:.6}},wp.element.createElement("i",{dangerouslySetInnerHTML:{__html:(0,s.sprintf)((0,s.__)("%1$sNote:%2$s Your input is processed using AI. Please review and edit before publishing.","seo-by-rank-math"),"<strong>","</strong>")}}))};n.dn(Nn);const In=new Set(["fix_seo_tests","write","bulk_seo_meta","long_form_content","opengraph","continue_writing","topic_research","chat","product_description","paragraph_rewriter","blog_post_idea","blog_post_outline","text_summarizer","seo_description","frequently_asked_questions","paragraph","ai_command","seo_title","blog_post_introduction","facebook_post","post_title","youtube_video_script","fix_grammar","tweet","blog_post_conclusion","company_bio","product_review","recipe","freeform_writing","spin","keyword_variations","analogy","youtube_video_description","product_pros_and_cons","testimonial","instagram_caption","email","hero","aida","comment_reply","personal_bio","tweet_reply","main_points","idca","sentence_expander","bab","podcast_episode_outline","email_reply","pas","job_description","facebook_comment_reply","bulk_keyword_intent","keyword_intent"]),jn=function(e){var t=e.featureKey,n=e.label,r=k(t),a=(0,d.useSelect)(function(e){return"expert"===e("rank-math-content-ai").getData().plan});if(null===r)return null;if(0===r.total&&(null===r.remaining||r.remaining<=0))return wp.element.createElement("p",{className:"components-base-control__help rank-math-feature-usage"},(0,s.__)("Not available in your plan.","seo-by-rank-math")," ",wp.element.createElement("a",{href:"https://rankmath.com/content-ai/#pricing",target:"_blank",rel:"noreferrer"},(0,s.__)("Upgrade","seo-by-rank-math")));var o,i=n||(0,s.__)("uses","seo-by-rank-math");if(a&&In.has(t))return o="chat"===t?(0,s.sprintf)((0,s.__)("You've sent %d messages this month. Your plan includes Unlimited usage.","seo-by-rank-math"),r.used):(0,s.sprintf)((0,s.__)("You've used %d requests this month. Your plan includes Unlimited usage.","seo-by-rank-math"),r.used),wp.element.createElement("p",{className:"components-base-control__help rank-math-feature-usage"},o);var l=r.total,c=(0,s.sprintf)((0,s.__)("You've used %1$d of %2$d %3$s this month.","seo-by-rank-math"),r.used,l,i);return wp.element.createElement("p",{className:"components-base-control__help rank-math-feature-usage"},c)};n.dn(jn);var Fn="write",Bn="chat",Mn="generate_image_alt_v2";function Rn(e){return Rn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rn(e)}function Ln(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function qn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Rn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Rn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Rn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Hn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Hn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Hn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Un=function(e){var t=zn((0,u.useState)({document_title:"undefined"!=typeof rankMathEditor?rankMathEditor.assessor.dataCollector.getData().title:"",text:"",instructions:"",tone:rankMath.contentAI.tone,focus_keyword:[],length:"medium",choices:1}),2),n=t[0],r=t[1],a=zn((0,u.useState)(!1),2),o=a[0],l=a[1],m=h()||e.data.isContentAIPage;return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:e.hasError?"rank-math-ui module-listing blurred":"rank-math-ui module-listing"},wp.element.createElement("div",{className:"rank-math-focus-keyword"},wp.element.createElement(c.Notice,{status:"warning",isDismissible:!1},wp.element.createElement(Ie,{components:{link:wp.element.createElement("a",{href:"https://rankmath.com/kb/content-ai-editor/?utm_source=Plugin&utm_medium=Write+Tab+Notice&utm_campaign=WP#write-tab",target:"_blank",rel:"noopener noreferrer"})}},(0,s.__)("{{link}}Click here{{/link}} to learn how to use it.","seo-by-rank-math")))),dn({instructions:{isRequired:!1},tone:{isRequired:!1},focus_keyword:{isRequired:!1},length:{isRequired:!0}},n,"Write",function(e,t){n[e]=t,r(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ln(Object(n),!0).forEach(function(t){qn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ln(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},n)),(0,d.dispatch)("rank-math-content-ai").updateAIAttributes(e,t)}),wp.element.createElement(c.Button,{className:"write-button is-primary",onClick:function(){if(n.text=wn(),r(n),!m)return l(!0),void Ye("Write",n,function(e){var t=(0,i.isArray)(e)?e[0]:e;"elementor"===rankMath.currentEditor?Cn(t):Sn(t),l(!1)});var e=hn();if((0,i.isEmpty)(e)||(0,i.isEmpty)(e.block)||!fn(e.block,!1)){var t=(0,qe.createBlock)("rank-math/command",{content:""});(0,d.dispatch)("core/block-editor").insertBlocks(t,(0,i.isEmpty)(e)?1:e.position),e=t}else{var a=(0,qe.createBlock)("rank-math/command",{content:"",className:"rank-math-content-ai-command"});(0,d.dispatch)("core/block-editor").replaceBlock(e.clientId,a),e=a}Pn("Write",n,e.clientId)}},wp.element.createElement(React.Fragment,null,o?(0,s.__)("Generatingâ€¦","seo-by-rank-math"):(0,s.__)("Generate","seo-by-rank-math"),m&&wp.element.createElement("span",null,"CTRL + /"))),wp.element.createElement(jn,{featureKey:Fn,label:(0,s.__)("write requests","seo-by-rank-math")}),wp.element.createElement(Nn,null)),e.hasError&&!e.isContentAIPage&&wp.element.createElement(Fe,null))};function Vn(e){return Vn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vn(e)}function Wn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function $n(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Wn(Object(n),!0).forEach(function(t){Gn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Wn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Gn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Vn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Vn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Vn(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Kn=function(){return[{endpoint:"blog_post_wizard",usageKey:"long_form_content",title:(0,s.__)("Blog Post Wizard","seo-by-rank-math"),description:(0,s.__)("Create a complete blog post in one go. Just fill in some details and Content AI will create a complete blog post for you.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-pencil",output:{default:5,max:20}},{endpoint:"blog_post_idea",title:(0,s.__)("Blog Post Idea","seo-by-rank-math"),description:(0,s.__)("Get fresh ideas for engaging blog posts that resonate with your niche and audience, ensuring captivating content.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-edit",params:{topic_brief:{isRequired:!0,label:(0,s.__)("Describe Your Industry/Niche","seo-by-rank-math"),placeholder:(0,s.__)("e.g. Technology blog that covers latest gadgets, tech news, and reviews","seo-by-rank-math")},audience:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},language:{isRequired:!1}},output:{default:5,max:20}},{endpoint:"blog_post_outline",title:(0,s.__)("Blog Post Outline","seo-by-rank-math"),description:(0,s.__)("Structure blog posts with a clear flow, guiding readers effortlessly for better understanding and engagement.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-howto",params:{topic:{isRequired:!0},main_points:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"blog_post_introduction",title:(0,s.__)("Blog Post Introduction","seo-by-rank-math"),description:(0,s.__)("Craft attractive intros that captivate readers' interest, compelling them to explore further into your blog.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-acf",params:{title:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"blog_post_conclusion",title:(0,s.__)("Blog Post Conclusion","seo-by-rank-math"),description:(0,s.__)("End your blog posts with impactful summaries, reinforcing key takeaways and leaving a lasting impression.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-support",params:{topic:{isRequired:!0},main_argument:{isRequired:!0},call_to_action:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"post_title",title:(0,s.__)("Post Title","seo-by-rank-math"),description:(0,s.__)("Create eye-catching headlines for articles and blogs, grabbing readers' attention and boosting engagement.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-heading",params:{post_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},style:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:5,max:25}},{endpoint:"topic_research",title:(0,s.__)("Topic Research","seo-by-rank-math"),description:(0,s.__)("Dive deep into comprehensive reports on specific topics, uncovering trends, history, and industry players.","seo-by-rank-math"),category:"seo",icon:"rm-icon rm-icon-analyzer",params:{topic:{isRequired:!0},relevance:{isRequired:!1},format:{isRequired:!0},focus_keyword:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"seo_title",title:(0,s.__)("SEO Title","seo-by-rank-math"),description:(0,s.__)("Optimize headlines for enhanced visibility, organic traffic, and a stronger online presence.","seo-by-rank-math"),category:"seo",icon:"rm-icon rm-icon-seo-title",params:{post_title:{isRequired:!0},focus_keyword:{isRequired:!1},post_brief:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:5,max:25}},{endpoint:"seo_description",title:(0,s.__)("SEO Description","seo-by-rank-math"),description:(0,s.__)("Craft concise and persuasive summaries that captivate readers and search engines, improving click-through rates.","seo-by-rank-math"),category:"seo",icon:"rm-icon rm-icon-seo-description",params:{seo_title:{isRequired:!0},focus_keyword:{isRequired:!1},post_brief:{isRequired:!1},tone:{isRequired:!1},audience:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:25}},{endpoint:"paragraph",title:(0,s.__)("Paragraph","seo-by-rank-math"),description:(0,s.__)("Generate well-structured and informative paragraphs, seamlessly blending into your content for better readability.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-text-align-left",params:{topic:{isRequired:!0},main_argument:{isRequired:!0},tone:{isRequired:!1},audience:{isRequired:!1},supporting_points:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"paragraph_rewriter",title:(0,s.__)("Paragraph Rewriter","seo-by-rank-math"),description:(0,s.__)("Refine paragraphs while preserving meaning, ensuring originality, and enhancing clarity.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-book",params:{original_paragraph:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"sentence_expander",title:(0,s.__)("Sentence Expander","seo-by-rank-math"),description:(0,s.__)("Transform incomplete sentences into polished expressions, adding depth and clarity to your writing.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-misc",params:{sentence:{isRequired:!0},topic:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:5}},{endpoint:"text_summarizer",title:(0,s.__)("Text Summarizer","seo-by-rank-math"),description:(0,s.__)("Condense complex texts into concise summaries, highlighting crucial points and essential information.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-page",params:{text:{isRequired:!0},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"fix_grammar",title:(0,s.__)("Fix Grammar","seo-by-rank-math"),description:(0,s.__)("Utilize AI-powered grammar correction to polish your written content, eliminating errors and improving clarity.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-help",params:{text:{isRequired:!0,label:(0,s.__)("Text","seo-by-rank-math"),placeholder:(0,s.__)("Enter the text to fix grammar","seo-by-rank-math")}},output:{default:1,max:1}},{endpoint:"analogy",title:(0,s.__)("Analogy","seo-by-rank-math"),description:(0,s.__)("Enhance clarity by rephrasing text using alternative words, providing a fresh perspective without altering meaning.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-sitemap",params:{text:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"product_description",title:(0,s.__)("Product Description","seo-by-rank-math"),description:(0,s.__)("Craft compelling descriptions that effectively showcase the unique benefits and features of your product.","seo-by-rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-mobile",params:{product_name:{isRequired:!0},features_and_benefits:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"product_pros_and_cons",title:(0,s.__)("Product Pros & Cons","seo-by-rank-math"),description:(0,s.__)("Present balanced overviews outlining the advantages and limitations, aiding informed decisions.","seo-by-rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-thumbs-up",params:{product_name:{isRequired:!0},features_and_benefits:{isRequired:!0},limitations_and_drawbacks:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:2,max:5}},{endpoint:"product_review",title:(0,s.__)("Product Review","seo-by-rank-math"),description:(0,s.__)("Provide detailed evaluations covering strengths, weaknesses, and practical recommendations.","seo-by-rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-star",params:{features_and_benefits:{isRequired:!0},product_name:{isRequired:!0},limitations_and_drawbacks:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"frequently_asked_questions",title:(0,s.__)("Frequently Asked Questions","seo-by-rank-math"),description:(0,s.__)("Address common queries with comprehensive answers, offering valuable information and guidance.","seo-by-rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-faq",params:{topic:{isRequired:!0},features_and_benefits:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"comment_reply",title:(0,s.__)("Comment Reply","seo-by-rank-math"),description:(0,s.__)("Engage your audience with thoughtful and engaging responses, fostering meaningful interactions.","seo-by-rank-math"),category:"blog",icon:"rm-icon rm-icon-comments",params:{reply_brief:{isRequired:!0},original_comment:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:8}},{endpoint:"personal_bio",title:(0,s.__)("Personal Bio","seo-by-rank-math"),description:(0,s.__)("Create professional and captivating biographies highlighting accomplishments, expertise, and personality.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-user",params:{personal_information:{isRequired:!0},purpose:{isRequired:!0},personal_achievements:{isRequired:!0},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"company_bio",title:(0,s.__)("Company Bio","seo-by-rank-math"),description:(0,s.__)("Craft informative overviews of your company's history, values, mission, and team, building credibility.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-restaurant",params:{company_name:{isRequired:!0},purpose:{isRequired:!0},company_information:{isRequired:!0},company_history:{isRequired:!1},team:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"job_description",title:(0,s.__)("Job Description","seo-by-rank-math"),description:(0,s.__)("Create enticing and comprehensive descriptions outlining requirements, responsibilities, and opportunities.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-job",params:{company_name:{isRequired:!0},job_title:{isRequired:!0},requirements:{isRequired:!0},responsibilities:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:3}},{endpoint:"testimonial",title:(0,s.__)("Testimonial","seo-by-rank-math"),description:(0,s.__)("Develop persuasive testimonials sharing positive experiences, endorsing your product, service, or brand.","seo-by-rank-math"),category:"ecommerce",icon:"rm-icon rm-icon-schema",params:{topic:{isRequired:!0,label:(0,s.__)("Product or Service","seo-by-rank-math")},features_and_benefits:{isRequired:!0},limitations_and_drawbacks:{isRequired:!1},focus_keyword:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"facebook_post",title:(0,s.__)("Facebook Post","seo-by-rank-math"),description:(0,s.__)("Create intriguing and shareable content for Facebook, captivating your audience and boosting engagement.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-facebook",params:{topic_brief:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"facebook_comment_reply",title:(0,s.__)("Facebook Comment Reply","seo-by-rank-math"),description:(0,s.__)("Generate relevant responses to Facebook comments, build relationships & encourage interaction.","seo-by-rank-math"),category:"marketing-comments-reply",icon:"rm-icon rm-icon-comments-reply",params:{reply_brief:{isRequired:!0,label:(0,s.__)("Reply brief","seo-by-rank-math")},comment:{isRequired:!0},post_brief:{isRequired:!1,label:(0,s.__)("Post brief","seo-by-rank-math")},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"tweet",title:(0,s.__)("Tweet","seo-by-rank-math"),description:(0,s.__)("Create engaging tweets, boost interaction, and foster connections with your followers.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-twitter",params:{topic_brief:{isRequired:!0},hashtags:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"tweet_reply",title:(0,s.__)("Tweet Reply","seo-by-rank-math"),description:(0,s.__)("Generate optimized replies for tweets to promote engagement and strengthen connections.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-comments-reply",params:{reply_brief:{isRequired:!0,label:(0,s.__)("Reply brief","seo-by-rank-math")},tweet:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"instagram_caption",title:(0,s.__)("Instagram Caption","seo-by-rank-math"),description:(0,s.__)("Craft catchy captions for Instagram posts to increase engagement and grab attention.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-instagram",params:{post_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"email",title:(0,s.__)("Email","seo-by-rank-math"),description:(0,s.__)("Create effective emails for promotions, announcements, and follow-ups to achieve marketing goals.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-mail",params:{email_brief:{isRequired:!0},call_to_action:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"email_reply",title:(0,s.__)("Email Reply","seo-by-rank-math"),description:(0,s.__)("Craft courteous email replies to promote interaction and strengthen relationships.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-mail-reply",params:{email:{isRequired:!0},reply_brief:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"aida",title:(0,s.__)("AIDA","seo-by-rank-math"),description:(0,s.__)("Write persuasive text using the Attention-Interest-Desire-Action formula to drive action.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-light-bulb",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"idca",title:(0,s.__)("IDCA","seo-by-rank-math"),description:(0,s.__)("Create compelling messages using the Identify-Develop-Communicate-Ask strategy to resonate.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-help",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"pas",title:(0,s.__)("PAS","seo-by-rank-math"),description:(0,s.__)("Address customer problems with the Problem-Agitate-Solution technique to fulfill needs.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-tick",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"hero",title:(0,s.__)("HERO","seo-by-rank-math"),description:(0,s.__)("Craft captivating headlines using the HERO formula to engage, reveal, and offer value.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-text",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"spin",title:(0,s.__)("SPIN","seo-by-rank-math"),description:(0,s.__)("Describe customer problems, highlight implications, and offer solutions using the SPIN method.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-social",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"bab",title:(0,s.__)("BAB","seo-by-rank-math"),description:(0,s.__)("Create a compelling Before-After-Bridge narrative to demonstrate product or service value.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-dataset",params:{product_name:{isRequired:!0},product_description:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:2}},{endpoint:"youtube_video_script",title:(0,s.__)("YouTube Video Script","seo-by-rank-math"),description:(0,s.__)("Develop engaging video scripts for YouTube to inform, entertain, and align.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-youtube",params:{topic:{isRequired:!0},visual_elements:{isRequired:!1},key_points:{isRequired:!0},call_to_action:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"youtube_video_description",title:(0,s.__)("YouTube Video Description","seo-by-rank-math"),description:(0,s.__)("Generate informative and engaging video descriptions for YouTube.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-video",params:{topic:{isRequired:!0},audience:{isRequired:!1},focus_keyword:{isRequired:!0},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"podcast_episode_outline",title:(0,s.__)("Podcast Episode Outline","seo-by-rank-math"),description:(0,s.__)("Create detailed outlines for podcast episodes, including topics and takeaways.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-podcast",params:{topic:{isRequired:!0},host:{isRequired:!1},co_host:{isRequired:!1},key_points:{isRequired:!0},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"recipe",title:(0,s.__)("Recipe","seo-by-rank-math"),description:(0,s.__)("Create detailed and easy-to-follow recipes with ingredients, instructions, and nutrition.","seo-by-rank-math"),category:"food-cooking",icon:"rm-icon rm-icon-recipe",params:{cuisine:{isRequired:!0},type:{isRequired:!0},ingredients:{isRequired:!0},dietary_restrictions:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:10}},{endpoint:"freeform_writing",title:(0,s.__)("Freeform Writing","seo-by-rank-math"),description:(0,s.__)("Generate text based on prompts or topics, allowing for imaginative or technical writing.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-page",params:{text:{isRequired:!0,label:(0,s.__)("What do you want to write?","seo-by-rank-math")},main_points:{isRequired:!1},audience:{isRequired:!1},tone:{isRequired:!1},length:{isRequired:!0},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"ai_command",title:(0,s.__)("AI Command","seo-by-rank-math"),description:(0,s.__)("Ask AI anything and receive relevant and informative responses for questions or requests.","seo-by-rank-math"),category:"misc",icon:"rm-icon rm-icon-code",params:{command:{isRequired:!0},language:{isRequired:!1}},output:{default:1,max:1}},{endpoint:"seo_meta",title:(0,s.__)("SEO Meta","seo-by-rank-math"),description:(0,s.__)("Optimize headlines and descriptions to improve visibility on search engines.","seo-by-rank-math"),category:"seo",icon:"rm-icon rm-icon-seo",params:{topic:{isRequired:!0},post_brief:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:3,max:25}},{endpoint:"opengraph",title:(0,s.__)("Open Graph","seo-by-rank-math"),description:(0,s.__)("Boost content visibility on social media with topic-specific meta tags for easy discovery.","seo-by-rank-math"),category:"marketing-sales",icon:"rm-icon rm-icon-social",params:{topic:{isRequired:!0},post_brief:{isRequired:!1},audience:{isRequired:!1},focus_keyword:{isRequired:!1},tone:{isRequired:!1},language:{isRequired:!1}},output:{default:1,max:5}}].map(function(e){return $n($n({},e),{},{helpLink:un(e.endpoint)})})};n.dn(Kn);const Jn=function(e,t){var n={choices:t.default},r=wp.data.select("rank-math-content-ai").getContentAiAttributes();return(0,i.map)(e,function(e,t){var a=(0,i.isUndefined)(r[t])?function(e,t){return(0,i.isUndefined)(t.default)?ln(e).default:t.default}(t,e):r[t];(0,i.isUndefined)(a)||(n[t]=a)}),n};function Yn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Zn(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Zn(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Jn);const Qn=function(e){var t=e.value,n=e.showWordCount,r=void 0===n||n,a=e.addTypingEffect,o=void 0===a||a,i=e.endpoint,l=void 0===i?"":i,c=t.split(" "),m=Yn((0,u.useState)(o?"":t),2),d=m[0],p=m[1],h=Yn((0,u.useState)(null),2),f=h[0],g=h[1];o&&((0,u.useEffect)(function(){var e=En(l);return g(e),e.onmessage=function(e){"rank_math_process_complete"!==e.data&&p(function(t){return t+e.data})},function(){e.terminate()}},[]),(0,u.useEffect)(function(){f&&(p(""),f.postMessage(t))},[t,f]));var b=d.length<c.length?"content typing":"content";return wp.element.createElement(React.Fragment,null,r&&wp.element.createElement("div",{className:"word-count"},(0,s.sprintf)((0,s.__)("Words: %d","seo-by-rank-math"),d.split(" ").length)),wp.element.createElement("div",{className:b,dangerouslySetInnerHTML:{__html:_n(d)}}))};n.dn(Qn);const Xn=function(e){return"".concat(e,"-").concat((new Date).getTime())};n.dn(Xn);const er=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(e=_n(e),"elementor"===rankMath.currentEditor)return Cn(e,!1),void o()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click");if("classic"===rankMath.currentEditor)return tinymce.activeEditor.insertContent(" "+e),void o()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click");var n=(0,d.select)("core/block-editor").getSelectedBlock(),r=(0,d.select)("core/block-editor").getBlocks(),a=0;(0,i.isNull)(n)?a=r.length:(a=r.map(function(e){return e.clientId===n.clientId}).indexOf(!0),a=fn(n)?a+1:a);var s="";"frequently_asked_questions"===t?s=(0,qe.createBlock)("rank-math/faq-block",{questions:(0,i.map)(e,function(e){return{id:Xn("faq-question"),title:e.question,content:e.answer.replaceAll(/(?:\r\n|\r|\n)/g,"<br>").trim(),visible:!0}})}):s=(0,qe.rawHandler)({HTML:e,mode:"BLOCKS"}).map(function(e){return(0,qe.createBlock)(e.name,e.attributes,e.innerBlocks)});(0,d.dispatch)("core/block-editor").insertBlocks(s,a),o()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click")};function tr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return nr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(er);const rr=function(e){var t=e.value,n=e.label,r=void 0===n?"":n,a=e.disabled,o=void 0!==a&&a,i=e.onClick,l=void 0===i?"":i,m=tr((0,u.useState)(),2),d=m[0],p=m[1];l&&(t=(0,qe.serialize)(wp.data.select("core/block-editor").getBlocks())),r=r||(0,s.__)("Copy","seo-by-rank-math");var h=(0,b.useCopyToClipboard)(t);return wp.element.createElement(c.Button,{variant:"secondary",className:"button structured-data-copy is-small",ref:h,disabled:o,onClick:function(){p(!0),setTimeout(function(){p(!1)},700)}},wp.element.createElement("i",{className:"rm-icon rm-icon-copy"}),d?(0,s.__)("Copied!","seo-by-rank-math"):r)};n.dn(rr);const ar=function(e){var t=e.value,n=e.index,r=void 0===n?0:n,a=e.isPage,l=void 0!==a&&a,u=e.endpoint,m=e.typingEffect,p=void 0===m||m,h=e.isSerpPreview,f=void 0!==h&&h,g=function(e,t){if("frequently_asked_questions"!==t)return e;var n='<div class="wp-block-rank-math-faq-block">',r=[];return r.questions=(0,i.map)(e,function(e){return n+='<div class="rank-math-faq-item"><h3 class="rank-math-question">'+e.question+'</h3><div class="rank-math-answer">'+e.answer+"</div></div>",{id:Xn("faq-question"),title:e.question,content:e.answer,visible:!0}}),n+="</div>",'\x3c!-- wp:rank-math/faq-block {"questions":'+JSON.stringify(r.questions)+"} --\x3e"+n+"\x3c!-- /wp:rank-math/faq-block --\x3e"}(t,u),b=t;return(0,i.isArray)(t)&&(b="",(0,i.map)(t,function(e){b+="<h2>"+e.question+"</h2><span>"+e.answer+"</span>"})),(0,i.isObject)(t)&&!(0,i.isArray)(t)&&(b="",(0,i.map)(t,function(e,t){b+="<h4>"+(0,i.startCase)(t)+"</h4><span>"+e+"</span>"})),wp.element.createElement("div",{className:"output-item",key:r},wp.element.createElement("div",{className:"output-actions"},wp.element.createElement(rr,{value:(0,i.isString)(g)?g:b}),((0,i.isUndefined)(rankMath.currentEditor)||(0,i.includes)(["gutenberg","classic","elementor"],rankMath.currentEditor)||f)&&!l&&wp.element.createElement(c.Button,{variant:"secondary",className:"button structured-data-test is-small",onClick:function(){var e=!1;if(!l){if("seo_title"===u||"seo_meta"===u&&!(0,i.isEmpty)(t.title)){var n=(0,i.isUndefined)(t.title)?t:t.title;(0,d.dispatch)("rank-math").updateSerpTitle(n),(0,d.dispatch)("rank-math").updateTitle(n),e=!0}if("seo_description"===u||"seo_meta"===u&&!(0,i.isEmpty)(t.description)){var r=(0,i.isUndefined)(t.description)?t:t.description;(0,d.dispatch)("rank-math").updateSerpDescription(r),(0,d.dispatch)("rank-math").updateDescription(r),e=!0}if("opengraph"===u){var a="twitter"===wp.data.select("rank-math").getSocialTab();(0,i.isEmpty)(t.title)||(a?(0,d.dispatch)("rank-math").updateTwitterTitle(t.title):(0,d.dispatch)("rank-math").updateFacebookTitle(t.title),e=!0),(0,i.isEmpty)(t.description)||(a?(0,d.dispatch)("rank-math").updateTwitterDescription(t.description):(0,d.dispatch)("rank-math").updateFacebookDescription(t.description),e=!0)}}e?o()(".rank-math-contentai-modal-overlay .components-modal__header button").trigger("click"):er(t,u)}},wp.element.createElement("i",{className:"rm-icon rm-icon-plus"}),wp.element.createElement("span",null,(0,s.__)("Insert","seo-by-rank-math")))),wp.element.createElement(Qn,{value:b,addTypingEffect:p,endpoint:u}))};n.dn(ar);var or=function(e){var t=e.value;return wp.element.createElement("div",{className:"content-ai-error",dangerouslySetInnerHTML:{__html:t}})};const ir=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(!(0,i.isEmpty)(e)){if((0,i.isObject)(e)&&!(0,i.isArray)(e)){var o="";return(0,i.forEach)(Object.keys(e),function(t){var n="";(0,i.forEach)(e[t],function(e){n+=e+"<br /><br />"}),o+="<div><h4>"+(0,i.startCase)(t)+"</h4>"+n+"</div>"}),wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement(ar,{value:o,isPage:t,endpoint:n,typingEffect:r,isSerpPreview:a}))}return(0,i.isArray)(e)?wp.element.createElement("div",{className:"inner-wrapper"},"frequently_asked_questions"!==n&&(0,i.map)(e,function(e,o){return(0,i.isEmpty)(e.warning)?wp.element.createElement(ar,{value:e,key:o,index:o,isPage:t,endpoint:n,typingEffect:r,isSerpPreview:a}):wp.element.createElement(or,{value:'<div class="notice notice-error">'+e.warning+"</div>"})}),"frequently_asked_questions"===n&&!(0,i.isArray)(e[0])&&wp.element.createElement(ar,{value:e,isPage:t,endpoint:n,typingEffect:r,isSerpPreview:a}),"frequently_asked_questions"===n&&(0,i.isArray)(e[0])&&(0,i.map)(e,function(e){return wp.element.createElement(ar,{value:e,isPage:t,endpoint:n,typingEffect:r,isSerpPreview:a})})):(0,i.isArray)(e)||(0,i.isObject)(e)?void 0:wp.element.createElement(or,{value:e})}};n.dn(ir);const sr=function(e){return(0,i.compact)((0,i.map)(rankMath.contentAI.history,function(t){if(t.key===e)return t.output}))};n.dn(sr);var lr=function(e){return e&&e(""),(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))||(document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.querySelector(".rank-math-contentai-modal-overlay").remove(),document.body.classList.remove("modal-open")),!0};const cr=function(e,t,n,r){if((0,i.isNull)((0,d.dispatch)("rank-math"))||(0,d.dispatch)("rank-math-content-ai").isAutoCompleterOpen(!1),!(0,i.isUndefined)(e)){if("blur"===e.type){if(!(0,i.includes)(e.target.classList,"rank-math-contentai-modal"))return!1;var a=!0;return(0,i.forEach)(t,function(e,t){e.isRequired&&!(0,i.isEmpty)(n[t])&&(a=!1)}),!!a&&lr(r)}return"Escape"!==e.key||(0,i.isNull)(document.querySelector(".tagify__dropdown"))?lr(r):(document.querySelector(".tagify__dropdown").remove(),!1)}};n.dn(cr);const ur=function(e){var t=e.title,n=e.helpLink,r=(0,s.sprintf)((0,s.__)("Learn how to use this %s Tool effectively.","seo-by-rank-math"),"<strong>".concat(t,"</strong>")),a=(0,i.includes)(n,"play-video");return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{key:"title",className:"rank-math-video-tutorial"},wp.element.createElement("div",{className:"info"},wp.element.createElement("p",null,wp.element.createElement("span",{dangerouslySetInnerHTML:{__html:r}})),wp.element.createElement("a",{className:a?"":"button button-primary is-red",href:n,target:"_blank",rel:"noreferrer"},a&&wp.element.createElement("span",{className:"rm-icon-youtube"}),!a&&(0,s.__)("Click Here","seo-by-rank-math")))),wp.element.createElement(Nn,null))};n.dn(ur);const mr=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";v()({method:"POST",path:"/rankmath/v1/ca/createPost",data:{content:e,title:t}}).catch(function(e){console.log(e)}).then(function(e){window.location.href=e})};n.dn(mr);const dr=function(e){var t,n=e.endpoint,r=e.originalEndpoint,a=e.apiContent,l=e.output,u=e.attributes,m=e.generating,d=e.results,p=e.steps,h=e.setSteps,f=e.isDisabled,g=e.onChange,b=e.setGenerating,y=e.setDisabled,v=e.setHistory,_=e.setData,w=e.setResults,k="blog_post_wizard"===r;return wp.element.createElement("div",{className:"footer"},!k&&wp.element.createElement(React.Fragment,null,wp.element.createElement(c.__experimentalNumberControl,{min:"1",max:l.max,value:null!==(t=u.choices)&&void 0!==t?t:l.default,onChange:function(e){return g("choices",e)},__nextHasNoMarginBottom:!0}),wp.element.createElement("span",{className:"output-label"},(0,s.__)("Outputs","seo-by-rank-math"))),wp.element.createElement(c.Button,{variant:k?(0,i.isEmpty)(d)?"primary":"secondary":"primary",className:"button",disabled:f,onClick:function(){var e=o()("form.rank-math-ai-tools").get(0);e.checkValidity()?(b(!0),y(!0),v(!1),k&&"long_form_content"===p.endpoint?Ye("long_form_content",p.attributes,a,!1):Ye(n,u,a,!1)):e.reportValidity()}},wp.element.createElement("span",{className:"text"},function(e,t,n){return e?(0,s.__)("Generatingâ€¦","seo-by-rank-math"):(0,i.isEmpty)(t)||"blog_post_wizard"!==n?(0,i.isEmpty)(t)?(0,s.__)("Generate","seo-by-rank-math"):(0,s.__)("Generate More","seo-by-rank-math"):(0,s.__)("Regenerate","seo-by-rank-math")}(m,d,r))),k&&"long_form_content"!==p.endpoint&&wp.element.createElement(c.Button,{variant:(0,i.isEmpty)(d)?"secondary":"primary",className:"button",disabled:f||(0,i.isEmpty)(d)&&"blog_post_idea"!==p.endpoint,onClick:function(){if("blog_post_outline"===n){var e=u.topic;return u={outline:_n(d[0],!0),language:(0,i.isEmpty)(u.language)?"":u.language,tone:(0,i.isEmpty)(u.tone)?"":u.tone,audience:(0,i.isEmpty)(u.audience)?"":u.audience,style:(0,i.isEmpty)(u.style)?"":u.style,choices:1},_(""),w([]),b(!0),Ye("long_form_content",u,a,!1),void h({endpoint:"long_form_content",content:"",topic:e,attributes:u})}var t=(0,i.isEmpty)(d)?"":d[0];h({endpoint:"blog_post_outline",content:t}),_(""),w([])}},wp.element.createElement("span",{className:"text"},function(e,t){return"blog_post_idea"===e&&(0,i.isEmpty)(t)?(0,s.__)("Skip","seo-by-rank-math"):"blog_post_outline"===e?(0,s.__)("Write Post","seo-by-rank-math"):(0,s.__)("Next Step","seo-by-rank-math")}(n,d))),k&&"long_form_content"===p.endpoint&&!(0,i.isEmpty)(d)&&rankMath.contentAI.isContentAIPage&&wp.element.createElement(c.Button,{variant:(0,i.isEmpty)(d)?"secondary":"primary",className:"button",onClick:function(){return mr(_n(d[0]),p.topic)}},wp.element.createElement("span",{className:"text"},rankMath.contentAI.isContentAIPage?(0,s.__)("Create New Post","seo-by-rank-math"):(0,s.__)("Insert","seo-by-rank-math"))))};function pr(e){return pr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pr(e)}function hr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function fr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=pr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=pr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==pr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gr(e){return function(e){if(Array.isArray(e))return vr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||yr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function br(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||yr(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yr(e,t){if(e){if("string"==typeof e)return vr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?vr(e,t):void 0}}function vr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(dr);var _r=function(e){var t=[(0,s.__)("Post Title","seo-by-rank-math"),(0,s.__)("Post Outline","seo-by-rank-math"),(0,s.__)("Write Post","seo-by-rank-math")],n=e.endpoint;return wp.element.createElement("div",{className:"wizard-navigation"},wp.element.createElement("label",{className:"dot-label"},(0,s.__)("Steps","seo-by-rank-math")),(0,i.map)(t,function(e,t){var r="";return 0===t&&(r="active"),1===t&&(r="blog_post_outline"===n||"long_form_content"===n?"active":""),"long_form_content"===n&&2===t&&(r="active"),wp.element.createElement(c.Button,{variant:"link",className:r,href:"#",label:e,showTooltip:!0},wp.element.createElement("span",null))}))};const wr=function(e){var t=e.tool,n=e.setTool,r=void 0!==n&&n,a=e.isContentAIPage,l=void 0!==a&&a,m=e.callApi,p=void 0!==m&&m,h=e.plan,f=t.title,g=t.icon,b=t.output,y=t.helpLink,v=t.endpoint,_=t.params,w=e.hasError,k=br((0,u.useState)(Jn(_,b)),2),E=k[0],D=k[1],C=br((0,u.useState)(),2),A=C[0],S=C[1],O=br((0,u.useState)(),2),x=O[0],T=O[1],P=br((0,u.useState)(!1),2),N=P[0],I=P[1],j=br((0,u.useState)([]),2),F=j[0],B=j[1],M=br((0,u.useState)([]),2),R=M[0],L=M[1],q=br((0,u.useState)({endpoint:"blog_post_idea"}),2),z=q[0],H=q[1],U=sr(v),V=v,W="blog_post_wizard"===v;if(W){w="free"===h||w,v="long_form_content"===z.endpoint?"blog_post_outline":z.endpoint;var $=(0,i.find)(Kn(),["endpoint",v]);"blog_post_outline"!==v||(0,i.isEmpty)(z.content)||($.params.topic.default=z.content),_=$.params,b.default=1,(0,i.isEmpty)(E.main_points)&&(E=Jn(_,b))}(0,u.useEffect)(function(){if((0,i.isArray)(F)&&"frequently_asked_questions"!==v){(0,i.isString)(R)&&L("");for(var e=0,t=function(t){if(t>0){var n=(0,i.isObject)(F[t-1])?Object.values(F[t-1]).join(" "):F[t-1];e+=110*n.split(" ").length}setTimeout(function(){return L(function(e){return[].concat(gr(e),[F[t]])})},e)},n=0;n<=F.length-1;n++)t(n)}else L(F)},[F]),(0,u.useEffect)(function(){p&&(S(!0),T(!0),I(!1),Ye(v,E,G))},[]);var G=function(e){(0,i.isEmpty)(e.error)?("blog_post_wizard"===V&&L(""),B(e.faqs?e.faqs:e)):B('<div class="notice notice-error">'+e.error+"</div>"),S(!1),T(!1)},K=(0,u.useCallback)(function(e,t){E[e]=t,D(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hr(Object(n),!0).forEach(function(t){fr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},E)),(0,d.dispatch)("rank-math-content-ai").updateAIAttributes(e,t),setTimeout(function(){T(o()("form.rank-math-ai-tools").find(".limit-reached").length)},500)},[]);return wp.element.createElement(c.Modal,{className:"rank-math-contentai-modal rank-math-modal",overlayClassName:"rank-math-modal-overlay rank-math-contentai-modal-overlay",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:g})," ",f," ","blog_post_wizard"===V?_r(z):""),shouldCloseOnClickOutside:!0,onRequestClose:function(e){return cr(e,_,E,r)}},wp.element.createElement("div",{className:w?"columns column-body blurred":"columns column-body"},wp.element.createElement("div",{className:"column column-input"},wp.element.createElement("div",{className:"column-inner"},dn(_,E,v,K,"blog_post_wizard"===V),wp.element.createElement("p",{className:"required-fields"},wp.element.createElement("i",null,wp.element.createElement("span",null,"*")," ",(0,s.__)("Required fields.","seo-by-rank-math"))),wp.element.createElement(jn,{featureKey:W?v:V,label:(0,s.sprintf)((0,s.__)("%s requests","seo-by-rank-math"),f)})),wp.element.createElement(dr,{output:b,attributes:E,generating:A,results:F,endpoint:v,originalEndpoint:V,isDisabled:x,steps:z,apiContent:G,setSteps:H,onChange:K,setData:L,setResults:B,setGenerating:S,setDisabled:T,setHistory:I})),wp.element.createElement("div",{className:"column column-output"},wp.element.createElement("div",{className:"column-output-heading"},wp.element.createElement("h3",null,wp.element.createElement("span",null,(0,s.__)("Output","seo-by-rank-math")),W&&wp.element.createElement("span",null,"Â -Â ",(0,i.startCase)(z.endpoint))),!(0,i.isEmpty)(U)&&wp.element.createElement(c.Button,{className:"button button-secondary button-small output-history",onClick:function(){I(!N)}},(0,s.__)("History","seo-by-rank-math"))),A&&wp.element.createElement("div",{className:"inner-wrapper"},wp.element.createElement("div",{className:"output-item loading"},wp.element.createElement("div",{className:"rank-math-loader"}))),!A&&!N&&(0,i.isEmpty)(F)&&wp.element.createElement(React.Fragment,null,wp.element.createElement("p",{style:{fontSize:"1rem",marginTop:0}},(0,s.__)("Suggestions will appear here.","seo-by-rank-math")),y&&wp.element.createElement(ur,{helpLink:y,title:f})),!N&&ir(R,l,v,!0,p),!A&&N&&ir((0,i.reverse)(U),l,v,!1,p),!N&&p&&!A&&wp.element.createElement("div",{className:"notice notice-info",dangerouslySetInnerHTML:{__html:(0,s.sprintf)((0,s.__)("%s to access all the Content AI tools","seo-by-rank-math"),'<a href="'+rankMath.adminurl+'?page=rank-math-content-ai-page#ai-tools" target="_blank">'+(0,s.__)("Click here","seo-by-rank-math")+"</a>")}}))),w&&wp.element.createElement(Fe,{width:60}))};n.dn(wr);const kr=function(e){var t=e.search,n=e.setSearch,r=(0,u.useCallback)(function(e){var t=o()(".rank-math-content-ai-search-field input"),n=document.activeElement;if("/"===e.key&&t.length&&n!==t[0]&&(0,i.includes)(["BODY","DIV","BUTTON","SPAN"],n.tagName))return e.preventDefault(),t.trigger("focus"),!1},[]);return(0,u.useEffect)(function(){return window.addEventListener("keydown",r),function(){window.removeEventListener("keydown",r)}},[r]),wp.element.createElement("div",{className:"search-field"},wp.element.createElement(c.SearchControl,{__nextHasNoMarginBottom:!0,value:t,className:"rank-math-content-ai-search-field",onChange:function(e){n(e)}}))};function Er(){return Er=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Er.apply(null,arguments)}function Dr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Cr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Cr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Cr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(kr);const Ar=function(e){var t=e.showMinimal,n=void 0!==t&&t,r=e.isContentAIPage,a=void 0!==r&&r,o=Dr((0,u.useState)("all"),2),l=o[0],m=o[1],d=Dr((0,u.useState)(),2),p=d[0],h=d[1],f=Dr((0,u.useState)(),2),g=f[0],b=f[1],y={all:(0,s.__)("All","seo-by-rank-math"),seo:(0,s.__)("SEO","seo-by-rank-math"),blog:(0,s.__)("Blog","seo-by-rank-math"),"marketing-sales":(0,s.__)("Marketing & Sales","seo-by-rank-math"),ecommerce:(0,s.__)("eCommerce","seo-by-rank-math"),misc:(0,s.__)("Misc","seo-by-rank-math")};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:e.hasError?"rank-math-ui module-listing blurred":"rank-math-ui module-listing"},wp.element.createElement("div",{className:"content-ai-header"},wp.element.createElement("div",{className:"content-ai-filter"},!a&&wp.element.createElement(c.SelectControl,{options:(0,i.map)(y,function(e,t){return{value:t,label:e}}),onChange:function(e){return m(e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),!n&&a&&wp.element.createElement("div",null,(0,i.map)(y,function(e,t){return wp.element.createElement(c.Button,{className:l===t?"active":"",key:t,onClick:function(){return m(t)}},e)})),wp.element.createElement(kr,{search:p,setSearch:h}))),wp.element.createElement("div",{className:"grid"},(0,i.map)(Kn(),function(e,t){if(("all"===l||l===e.category)&&(!p||(0,i.lowerCase)(e.title).includes((0,i.lowerCase)(p))||(0,i.lowerCase)(e.endpoint).includes((0,i.lowerCase)(p))))return wp.element.createElement(c.Button,{key:t,className:"rank-math-box",onClick:function(){b(e)}},wp.element.createElement("i",{className:e.endpoint+" ai-icon "+e.icon}),"blog_post_wizard"===e.endpoint&&wp.element.createElement("div",{className:"dot-container",title:(0,s.__)("Multistep Wizard","seo-by-rank-math")},wp.element.createElement("div",{className:"dot"}),wp.element.createElement("div",{className:"dot"}),wp.element.createElement("div",{className:"dot"})),wp.element.createElement("header",null,wp.element.createElement("h3",null,e.title),!n&&wp.element.createElement("p",null,e.description)))})),g&&wp.element.createElement(wr,Er({},e,{tool:g,setTool:b}))),e.hasError&&!a&&wp.element.createElement(Fe,null))};function Sr(e){return Sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sr(e)}function Or(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function xr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Or(Object(n),!0).forEach(function(t){Tr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Or(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Tr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Sr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Sr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Sr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Nr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Nr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Nr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Ar);var Ir={all:(0,s.__)("All","seo-by-rank-math"),recent:(0,s.__)("Recent","seo-by-rank-math"),custom:(0,s.__)("Custom +","seo-by-rank-math"),seo:(0,s.__)("SEO","seo-by-rank-math"),blog:(0,s.__)("Blog","seo-by-rank-math"),"marketing-sales":(0,s.__)("Marketing & Sales","seo-by-rank-math"),ecommerce:(0,s.__)("eCommerce","seo-by-rank-math"),misc:(0,s.__)("Misc","seo-by-rank-math")};const jr=function(e){var t=wp.data.select("rank-math-content-ai").getData(),n=e.isOpen,r=e.toggleModal,a=e.setMessage,o=e.updateData,l=Pr((0,u.useState)(),2),m=l[0],d=l[1],p=Pr((0,u.useState)("custom"),2),h=p[0],f=p[1],g=Pr((0,u.useState)("all"),2),b=g[0],y=g[1],_=Pr((0,u.useState)(t.prompts),2),w=_[0],k=_[1],E=Pr((0,u.useState)(!1),2),D=E[0],C=E[1],A=Pr((0,u.useState)(!1),2),S=A[0],O=A[1],x=Pr((0,u.useState)(!1),2),T=x[0],P=x[1],I=Pr((0,u.useState)(!1),2),j=I[0],F=I[1],B=Pr((0,u.useState)({prompt_name:"",prompt:"",prompt_category:"custom"}),2),M=B[0],R=B[1];(0,u.useEffect)(function(){if("recent"!==b||(0,i.isEmpty)(t.recentPrompts))if("all"!==b){var e=(0,i.compact)((0,i.map)(t.prompts,function(e){return e.PromptCategory===b&&!(0,i.isUndefined)(e.Prompt)&&e}));k("custom"===b?(0,i.reverse)(e):e)}else k(t.prompts);else{var n=(0,i.map)(t.recentPrompts,function(e){return(0,i.find)(t.prompts,function(t){return t.PromptName===e})});k(n)}},[b,D]),(0,u.useEffect)(function(){setTimeout(function(){F(!1)},5e3)},[j]);var L="free"===t.plan?"blurred":"";return n&&wp.element.createElement(c.Modal,{title:(0,s.__)("Prompts Library","seo-by-rank-math"),closeButtonLabel:(0,s.__)("Close","seo-by-rank-math"),shouldCloseOnClickOutside:!1,shouldCloseOnEsc:!0,onRequestClose:function(){return r(!1)},className:"rank-math-contentai-modal rank-math-prompt-modal rank-math-modal",overlayClassName:"rank-math-modal-overlay rank-math-contentai-modal-overlay"},wp.element.createElement("div",{className:L},wp.element.createElement("div",{className:"content-ai-filter"},wp.element.createElement("div",null,(0,i.map)(Ir,function(e,t){var n=N()(t,{active:t===b});return wp.element.createElement(c.Button,{className:n,key:t,onClick:function(){y(t),f(0)}},e)})),wp.element.createElement(c.Button,{className:"update-library is-secondary is-small",key:"update-library",onClick:function(){P(!0),Ye("default_prompts",{},function(e){v()({method:"POST",path:"/rankmath/v1/ca/savePrompts",data:{prompts:e}}).then(function(e){o("prompts",e),k(e),f(0),P(!1)}).catch(function(e){console.log(e),P(!1)})})}},T?(0,s.__)("Updatingâ€¦","seo-by-rank-math"):(0,s.__)("Update Library","seo-by-rank-math"))),wp.element.createElement("div",{className:"grid"},wp.element.createElement("div",{className:"column column-first"},wp.element.createElement("h3",null,(0,s.__)("Prompt List","seo-by-rank-math")),!(0,i.isEmpty)(w)&&wp.element.createElement(React.Fragment,null,wp.element.createElement(kr,{search:m,setSearch:d}),wp.element.createElement("div",{className:"prompt-list"},"all"===b&&wp.element.createElement(c.Button,{className:"custom"===h?"prompt-item active":"prompt-item",key:"add-custom",onClick:function(){return f("custom")}},wp.element.createElement("i",null,"ðŸ§ª"),wp.element.createElement("span",null,(0,s.__)("Add Custom Prompt +","seo-by-rank-math"))),(0,i.map)(w,function(e,t){if(!((0,i.isUndefined)(e)||(0,i.isUndefined)(e.Prompt)||m&&!e.PromptName.toLowerCase().includes(m.toLowerCase()))){var n=N()("prompt-item "+t,{active:t===h,"custom-prompt":"custom"===e.PromptCategory}),r=N()("delete-prompt",{"rank-math-loader":D===t});return wp.element.createElement(c.Button,{className:n,key:t,onClick:function(){return f(t)}},wp.element.createElement("i",null,e.PromptIcon?e.PromptIcon:"ðŸ–Œï¸�"),wp.element.createElement("span",null,e.PromptName),"custom"===e.PromptCategory&&wp.element.createElement("span",{role:"button",tabIndex:"0",onKeyDown:void 0,className:r,onClick:function(){C(t),v()({method:"POST",path:"/rankmath/v1/ca/updatePrompt",data:{prompt:e.PromptName}}).then(function(e){o("prompts",e),f(0),C(!1)}).catch(function(e){C(!1),console.log(e)})}},D!==t&&wp.element.createElement("i",{className:"dashicons dashicons-no-alt"})))}})))),wp.element.createElement("div",{className:"column column-second"},"custom"===h&&"all"===b&&wp.element.createElement("div",{className:"custom-prompt-form"},wp.element.createElement("div",{className:"form-field"},wp.element.createElement(c.TextControl,{label:(0,s.__)("Prompt Name","seo-by-rank-math"),onChange:function(e){M.prompt_name=e,R(xr({},M))},className:j&&!M.prompt_name?"is-required":"",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"form-field"},wp.element.createElement("div",{className:M.prompt.length>=2e3?"limit limit-reached":"limit"},wp.element.createElement("span",{className:"count"},M.prompt.length),"/2000"),wp.element.createElement(c.TextareaControl,{label:(0,s.__)("Prompt Text","seo-by-rank-math"),help:(0,s.__)("Use [brackets] to insert placeholders.","seo-by-rank-math"),onChange:function(e){M.prompt=e,R(xr({},M))},maxLength:"2000",className:j&&!M.prompt?"is-required":"",__nextHasNoMarginBottom:!0})),wp.element.createElement("div",{className:"form-field"},wp.element.createElement(c.BaseControl,{className:"save-prompt",__nextHasNoMarginBottom:!0},wp.element.createElement(c.Button,{variant:"primary",className:"is-large",onClick:function(){if(M.prompt_name&&M.prompt){var e=(0,i.find)(w,function(e){return e.PromptName===M.prompt_name});(0,i.isUndefined)(e)?(O(!0),v()({method:"POST",path:"/rankmath/v1/ca/updatePrompt",data:{prompt:{PromptName:M.prompt_name,Prompt:M.prompt,PromptCategory:M.prompt_category}}}).then(function(e){t.prompts=e,o("prompts",e),y("custom"),setTimeout(function(){f(0),O(!1)},300)}).catch(function(e){console.log(e),O(!1)})):alert((0,s.__)("Prompt with this name already exists","seo-by-rank-math"))}else F(!0)}},S&&wp.element.createElement("span",{className:"rank-math-loader"}),!S&&(0,s.__)("Save Prompt","seo-by-rank-math"))))),("custom"!==h||"all"!==b)&&!(0,i.isEmpty)(w)&&!(0,i.isEmpty)(w[h])&&wp.element.createElement("div",{className:"prompt-details"},wp.element.createElement("div",{className:"prompt-preview"},wp.element.createElement("h3",null,(0,s.__)("Preview","seo-by-rank-math")),wp.element.createElement("div",{className:"prompt-preview-content"},wp.element.createElement("p",{dangerouslySetInnerHTML:{__html:(0,i.isUndefined)(w[h].Prompt)?"":w[h].Prompt.replaceAll("[","<span>[").replaceAll("]","]</span>")}}))),wp.element.createElement("div",{className:"form-field"},wp.element.createElement(c.BaseControl,{className:"use-prompt",__nextHasNoMarginBottom:!0},wp.element.createElement(c.Button,{variant:"primary",className:"is-large",onClick:function(){v()({method:"POST",path:"/rankmath/v1/ca/updateRecentPrompt",data:{prompt:w[h].PromptName}}).then(function(){t.recentPrompts.unshift(w[h].PromptName),o("recentPrompts",t.recentPrompts)}).catch(function(e){console.log(e)}),a(w[h].Prompt.replaceAll("[","<span>[").replaceAll("]","]</span>")),r(!1)}},(0,s.__)("Use Prompt","seo-by-rank-math")))))))),L&&wp.element.createElement(Fe,{width:"60",isResearch:!0}))};n.dn(jr);const Fr=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;v()({method:"POST",path:"/rankmath/v1/ca/deleteOutput",data:{isChat:e,index:t}}).catch(function(e){console.log(e)})};function Br(){return Br=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Br.apply(null,arguments)}function Mr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Rr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Rr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Fr);const Lr=function(e){var t=e.data,n=e.isContentAIPage,r=void 0!==n&&n,a="free"===t.plan,l=Mr((0,u.useState)(!1),2),m=l[0],d=l[1],p=Mr((0,u.useState)(!1),2),h=p[0],f=p[1],g=Mr((0,u.useState)(""),2),b=g[0],y=g[1],v=Mr((0,u.useState)(t.chats),2),_=v[0],w=v[1],k=Mr((0,u.useState)(a&&_.length?0:""),2),E=k[0],D=k[1];a&&_.length&&(0,i.isUndefined)(wp.blocks.getBlockType("core/paragraph"))&&wp.blockLibrary.registerCoreBlocks(),(0,u.useEffect)(function(){o()(".chat-input span").on("click",function(e){if(window.getSelection&&document.createRange){var t=window.getSelection();""===t.toString()&&window.setTimeout(function(){var n=e.target,r=document.createRange();r.selectNodeContents(n),t.removeAllRanges(),t.addRange(r)},1)}})},[b]);var C,A=["How do backlinks affect SEO?","Why is keyword research important for SEO?","What are some effective SEO strategies for small businesses?","Can you explain the difference between on-page and off-page SEO?","List trending topics in [Industry] that I should write about.","How can I optimize my website for local search queries?","What are some effective strategies for managing [product/service description] reputation on social media?","Develop a content strategy for [product/service description] to increase organic search traffic."],S=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];y(""),f(!0),""===E&&D(0);var r=""===E,a=""!==E?E:t.chats.length,s=(0,i.isEmpty)(_[a])?[]:_[a];n||s.unshift({role:"user",content:e||b}),r?_.unshift(s):_[a]=s,w(_),setTimeout(function(){Ye("Chat",{messages:(0,i.reverse)(s),session:a,isNew:r,regenerate:n,site_type:"ecommerce",site_name:rankMath.blogName,language:t.language,choices:1},function(e){if(!(0,i.isEmpty)(e.error)){f(!1);var t=o()(".rank-math-breadcrumbs-wrap").length?o()(".rank-math-breadcrumbs-wrap"):o()(".rank-math-header");return t.length?void ze(e.error,"error",t,!1,"rank-math-content-ai-notice is-page"):void alert(e.error)}(0,i.reverse)(s),e&&s.unshift({role:"assistant",content:e[0],isNew:!0}),f(!1)},!0)},100)};return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:e.hasError?"blurred":""},wp.element.createElement("div",{className:"tab-header"},wp.element.createElement("span",{className:"tab-header-title"},wp.element.createElement("i",{className:"rm-icon rm-icon-bot"})," RankBot ",wp.element.createElement("span",null,"- ",(0,s.__)("Your Personal Assistant","seo-by-rank-math"))),wp.element.createElement("a",{href:"https://rankmath.com/kb/how-to-use-rankbot-ai-tool/?play-video=OBxuy8u0eCY&utm_source=Plugin&utm_medium=RankBot+Tab&utm_campaign=WP",rel:"noreferrer",target:"_blank",title:(0,s.__)("Know more about RankBot","seo-by-rank-math")},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help rank-math-tooltip"})),!r&&""!==E&&wp.element.createElement(c.Button,{className:"clear-history is-small button-link-delete",onClick:function(){_.splice(E,1),w(_),Fr(!0,E),setTimeout(function(){D("")},10)}},(0,s.__)("Delete Session","seo-by-rank-math"))),wp.element.createElement("div",{className:"rank-math-content-chat-page"},!(0,i.isEmpty)(_)&&wp.element.createElement("div",{className:"chat-sidebar"},wp.element.createElement("div",{className:"chat-sidebar-content"},!r&&wp.element.createElement(c.SelectControl,{value:E,options:(C=[],a&&_.length||C.push({label:(0,s.__)("New Chat","seo-by-rank-math"),value:""}),(0,i.map)(_,function(e,t){C.push({label:e[0].content.replace(/(<([^>]+)>)/gi,"").split(/\s+/).slice(0,8).join(" ")+"...",value:t})}),C),onChange:function(e){D(e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),r&&!a&&wp.element.createElement(c.Button,{className:N()("history-button button new-chat",{active:""===E}),onClick:function(){D("")}},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"})," ",(0,s.__)("New Chat","seo-by-rank-math")),r&&(0,i.map)(_,function(e,t){var n=e.length>2?e[e.length-2].content:e[0].content;return wp.element.createElement("div",{role:"button",tabIndex:"0",className:N()("history-button button",{active:E===t}),key:t,onClick:function(){D(t)},onKeyDown:void 0},wp.element.createElement("i",{className:"rm-icon rm-icon-comments"}),n.split(/\s+/).slice(0,8).join(" ")+"...",wp.element.createElement(c.Button,{className:"delete-session",onClick:function(){_.splice(t,1),w(_),Fr(!0,t),setTimeout(function(){D("")},10)},title:(0,s.__)("Delete Session","seo-by-rank-math")},wp.element.createElement("i",{className:"dashicons dashicons-no-alt"})))}),r&&a&&wp.element.createElement(c.Button,{className:"button is-green",href:"https://rankmath.com/content-ai/#pricing",target:"_blank"},(0,s.__)("Buy PRO plan for Multiple Sessions","seo-by-rank-math")))),wp.element.createElement("div",{className:"chat-container"},wp.element.createElement("div",{className:"chat-messages"},h&&wp.element.createElement("div",{className:"chat-message loading"},wp.element.createElement("div",{className:"rank-math-loader"})),""===E&&wp.element.createElement(function(){return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"prompt-examples"},wp.element.createElement("h2",null,(0,s.__)("Examples","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("Here are some examples of questions you can ask RankBot","seo-by-rank-math")),wp.element.createElement("div",{className:"grid"},(0,i.map)(A,function(e,t){return wp.element.createElement("div",{role:"button",tabIndex:"0",onClick:function(){y(e.replaceAll("[","<span>[").replaceAll("]","]</span>"))},key:t,dangerouslySetInnerHTML:{__html:e.replaceAll("[","<span>[").replaceAll("]","]</span>")}})}))))},null),!(0,i.isEmpty)(_)&&""!==E&&(0,i.map)(_[E],function(e,t){if(!(0,i.isEmpty)(e.content)){var n="user"===e.role,r=n?(0,s.__)("You:","seo-by-rank-math"):(0,s.__)("RankBot:","seo-by-rank-math"),a=(0,i.uniqueId)(),o=e.isNew;return e.isNew=!1,wp.element.createElement("div",{className:n?"chat-message user":"chat-message",key:t},wp.element.createElement("div",{className:"message-actions"},wp.element.createElement("span",null,r),!n&&wp.element.createElement(rr,{value:e.content})),wp.element.createElement("div",{className:"message",id:"block-"+a},o&&wp.element.createElement(Qn,{value:e.content,showWordCount:!1}),!o&&wp.element.createElement("div",{dangerouslySetInnerHTML:{__html:_n(e.content)}})))}})),(!a||!E)&&wp.element.createElement("div",{className:"chat-input"},wp.element.createElement("div",{className:"chat-input-actions"},wp.element.createElement(An.RichText,{tagName:"div",className:"chat-input-textarea",value:b.slice(0,2e3),allowedFormats:[],disableLineBreaks:!0,onChange:function(e){var t=document.getElementsByClassName("chat-input-textarea")[0];if(e.length>2e3){e=e.slice(0,2e3),t.innerHTML=b;var n=document.createRange(),r=window.getSelection(),a=t.childNodes[t.childNodes.length-1];n.setStart(a,a.textContent.length),n.collapse(!0),r.removeAllRanges(),r.addRange(n)}y(e)},onKeyUp:function(e){if("Enter"===e.key){if(e.shiftKey){y(b+"\n");var t=window.getSelection(),n=t.getRangeAt(0),r=document.createElement("br");n.insertNode(r);var a=r.nextSibling,o=document.createRange();return o.setStart(a,0),o.collapse(!0),t.removeAllRanges(),void t.addRange(o)}(0,i.isEmpty)((0,i.trim)(b))||h||S()}},preserveWhiteSpace:"true",placeholder:(0,s.__)("Type your message hereâ€¦","seo-by-rank-math")}),wp.element.createElement("div",{className:"chat-input-buttons"},wp.element.createElement(c.Button,{className:"prompts-button button",onClick:function(){return d(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-htaccess"})," ",r?(0,s.__)("Prompts Library","seo-by-rank-math"):""),wp.element.createElement(jr,Br({},e,{isOpen:m,toggleModal:d,setMessage:y})),""!==E&&!h&&wp.element.createElement(c.Tooltip,{text:(0,s.__)("Regenerate Response","seo-by-rank-math")},wp.element.createElement(c.Button,{className:"regenerate-response button button-small",onClick:function(){var e=_[E],t=e[1].content;e.shift(),_[E]=e,w(_),S(t,!0)},showTooltip:!0},wp.element.createElement(c.Dashicon,{icon:"controls-repeat"}))),wp.element.createElement("div",{className:b.length>=2e3?"limit limit-reached":"limit"},wp.element.createElement("span",{className:"count"},b.length),"/",(0,s.__)("2000","seo-by-rank-math")),wp.element.createElement(c.Button,{className:"button is-primary is-large","aria-label":(0,s.__)("Send","seo-by-rank-math"),disabled:(0,i.isEmpty)((0,i.trim)(b))||h,onClick:function(){return S()}},wp.element.createElement("span",{className:"rm-icon rm-icon-send"})))),wp.element.createElement(jn,{featureKey:Bn,label:(0,s.__)("messages","seo-by-rank-math")}),wp.element.createElement(Nn,null))))),e.hasError&&!r&&wp.element.createElement(Fe,null))};function qr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return zr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?zr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function zr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Lr);function Hr(e){return Hr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hr(e)}function Ur(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Vr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Hr(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Hr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Hr(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(function(e){var t=e.callback,n=qr((void 0)(""),2),r=n[0],a=n[1],o=(void 0)("rank-math-tooltip rank-math-button update-credits",{loading:r});return wp.element.createElement(void 0,{className:o,onClick:function(){a(!0),(void 0)({method:"POST",path:"/rankmath/v1/ca/getCredits"}).catch(function(e){a(""),alert(e.message)}).then(function(e){e.error?alert(e.error):t(e),a("")})}},wp.element.createElement("i",{className:"dashicons dashicons-image-rotate"}),wp.element.createElement("span",null,(void 0)("Click to refresh the available credits.","seo-by-rank-math")))});const Wr=(0,b.compose)((0,d.withSelect)(function(e){var t=e("rank-math-content-ai").getData();return{data:t,hasError:!t.isUserRegistered||!t.plan||t.isMigrating}}),(0,d.withDispatch)(function(e){return{updateData:function(t,n){e("rank-math-content-ai").updateData(t,n)}}}))(function(e){return wp.element.createElement(c.PanelBody,{className:"rank-math-content-ai-wrapper",initialOpen:!0},wp.element.createElement(ee,{className:"rank-math-tabs",activeClass:"is-active",tabs:(t=[{name:"content-ai",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-analyzer",title:(0,s.__)("Research","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("Research","seo-by-rank-math"))),view:Le,className:"rank-math-general-tab"}],"divi"!==rankMath.currentEditor&&t.push({name:"write",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-edit",title:(0,s.__)("Write","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("Write","seo-by-rank-math"))),view:Un,className:"rank-math-write-tab"}),t.push({name:"ai-tools",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-page",title:(0,s.__)("AI Tools","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("AI Tools","seo-by-rank-math"))),view:Ar,className:"rank-math-ai-tools-tab"},{name:"chat",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-comments",title:(0,s.__)("Chat","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("Chat","seo-by-rank-math"))),view:Lr,className:"rank-math-chat-tab"}),"free"===rankMath.contentAI.plan&&(t.push(t[0]),t=(0,i.tail)(t)),t)},function(t){return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-tab-content-"+t.name},(0,u.createElement)(t.view,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ur(Object(n),!0).forEach(function(t){Vr(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ur(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},e))))}));var t}),$r=wp.keyboardShortcuts;function Gr(){return Gr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Gr.apply(null,arguments)}function Kr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Jr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jr(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Yr=function(e){var t="";return e.forEach(function(e){"rank-math/command"!==e.name&&e.attributes&&fn(e)&&(t+=fn(e)+" "),e.innerBlocks&&e.innerBlocks.length>0&&(t+=Yr(e.innerBlocks))}),t},Zr=function(){var e=(0,d.useSelect)(function(){return(0,d.select)("core/editor").getEditedPostContent()}),t=Yr((0,d.select)("core/block-editor").getBlocks());return wp.element.createElement("div",{className:"actions-wrapper"},wp.element.createElement(rr,{value:t,disabled:!t,label:(0,s.__)("Copy as Text","seo-by-rank-math")}),wp.element.createElement(rr,{disabled:!t,value:e,label:(0,s.__)("Copy as Blocks","seo-by-rank-math"),onClick:!0}),wp.element.createElement(c.Button,{disabled:!t,onClick:function(){var e=(0,d.select)("core/block-editor").getBlocks(),t=wp.blocks.createBlock("rank-math/command",{content:"",className:"rank-math-content-ai-command"});e.push(t),mr((0,qe.serialize)(e))},className:"button is-secondary is-small"},wp.element.createElement("i",{className:"rm-icon rm-icon-circle-plus"})," ",(0,s.__)("Create New Post","seo-by-rank-math")))},Qr=function(e){var t=Kr((0,u.useState)(!1),2),n=t[0],r=t[1],a=Kr((0,u.useState)(!0),2),o=a[0],i=a[1];return wp.element.createElement("div",{className:n?"wp-block-column interface-interface-skeleton__sidebar has-collapsed":"wp-block-column interface-interface-skeleton__sidebar"},n&&wp.element.createElement(c.Button,{className:"collapsed",onClick:function(){return r(!1)},icon:"align-pull-right",title:(0,s.__)("Expand Sidebar","seo-by-rank-math")}),!n&&wp.element.createElement("div",{className:"interface-complementary-area edit-post-sidebar rank-math-tabs"},wp.element.createElement("div",{role:"tablist","aria-orientation":"horizontal",className:"components-panel__header interface-complementary-area-header"},wp.element.createElement(c.Button,{className:o?"is-active":"",onClick:function(){return i(!0)}},wp.element.createElement("i",{className:"rm-icon rm-icon-edit",title:(0,s.__)("Write","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("Write","seo-by-rank-math"))),wp.element.createElement(c.Button,{className:o?"":"is-active",onClick:function(){return i(!1)}},wp.element.createElement("i",{className:"rm-icon rm-icon-page",title:(0,s.__)("AI Tools","seo-by-rank-math")}),wp.element.createElement("span",null,(0,s.__)("AI Tools","seo-by-rank-math"))),wp.element.createElement(c.Button,{onClick:function(){return r(!0)},icon:"no-alt",title:(0,s.__)("Collapse Sidebar","seo-by-rank-math")})),wp.element.createElement("div",{className:o?"rank-math-content-ai-wrapper rank-math-tab-content-write":"rank-math-content-ai-wrapper rank-math-tab-content-write rank-math-tab-content-tools"},wp.element.createElement("div",{className:"rank-math-tab-content-ai-tools"},o&&wp.element.createElement(Un,e),!o&&wp.element.createElement(Ar,Gr({},e,{showMinimal:!0,isContentAIPage:!1}))))))};const Xr=function(e){return setTimeout(function(){var e=document.getElementById("editor2").dataset,t=window.location.href,n=window.history.replaceState.bind(window.history),r=window.history.pushState.bind(window.history),a=function(e){return function(t,n,r){r&&r.toString().includes("post.php")||e(t,n,r)}};window.history.replaceState=a(n),window.history.pushState=a(r),wp.editPost.initializeEditor("editor","rm_content_editor",e.postId,JSON.parse(e.settings),{}),setTimeout(function(){window.history.replaceState=n,window.history.pushState=r,window.location.href!==t&&window.history.replaceState(null,"",t)},1e3),(0,d.select)("core/edit-post").isFeatureActive("fullscreenMode")&&(0,d.dispatch)("core/edit-post").toggleFeature("fullscreenMode")},200),wp.element.createElement($r.ShortcutProvider,null,wp.element.createElement("div",{className:"wp-block-columns rank-math-content-ai-wrapper",id:"rank-math-content-editor-page"},wp.element.createElement("div",{className:"wp-block-column"},wp.element.createElement(Zr,null),wp.element.createElement("div",{id:"editor"})),wp.element.createElement(Qr,e)))};function ea(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ta(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ta(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ta(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Xr);const na=function(e){var t=ea((0,u.useState)(e.data.history),2),n=t[0],r=t[1];return wp.element.createElement("div",{className:"history-container"},wp.element.createElement("div",{className:"tab-header"},wp.element.createElement("span",{className:"tab-header-title"},wp.element.createElement("span",{className:"rm-icon rm-icon-dataset"})," ",(0,s.__)("AI History","seo-by-rank-math")),!(0,i.isEmpty)(n)&&wp.element.createElement(c.Button,{className:"button clear-history is-small is-link button-link-delete",onClick:function(){Fr(!1),r([])}},(0,s.__)("Clear History","seo-by-rank-math"))),wp.element.createElement("div",{className:"inner-wrapper"},!(0,i.isEmpty)(n)&&(0,i.map)(n,function(e,t){var n=function(e,t){if(!(0,i.isObject)(e))return _n(e);var n="";return"frequently_asked_questions"===t?((0,i.map)(e,function(e){n+="<h4>"+e.question+"</h4><span>"+e.answer+"</span>"}),n):((0,i.map)(e,function(e,t){n+="<h4>"+(0,i.startCase)(t)+"</h4><span>"+e+"</span>"}),_n(n))}(e.output,e.key);if(!(0,i.isUndefined)(n))return wp.element.createElement("div",{className:"output-item",key:t},wp.element.createElement("div",{className:"tool-name"},e.key),wp.element.createElement("div",{className:"output-actions"},wp.element.createElement(rr,{value:n})),wp.element.createElement("div",{className:"word-count"},(0,s.__)("Words:","seo-by-rank-math")," ",n.split(" ").length),wp.element.createElement("div",{className:"content",dangerouslySetInnerHTML:{__html:n}}))}),(0,i.isEmpty)(n)&&wp.element.createElement("div",{className:"no-output"},(0,s.__)("No AI History found.","seo-by-rank-math"))))};function ra(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||oa(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function aa(e){return function(e){if(Array.isArray(e))return ia(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||oa(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function oa(e,t){if(e){if("string"==typeof e)return ia(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ia(e,t):void 0}}function ia(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(na);var sa=function(){return wp.element.createElement("li",{className:"rank-math-usage-item rank-math-usage-item--skeleton"},wp.element.createElement("span",{className:"rank-math-usage-skeleton-label"}),wp.element.createElement("span",{className:"rank-math-usage-skeleton-value"}))};const la=(0,b.compose)((0,d.withSelect)(function(e){return{data:e("rank-math-content-ai").getData()}}),(0,d.withDispatch)(function(e){return{updateData:function(t,n){e("rank-math-content-ai").updateData(t,n)}}}))(function(e){var t,n=e.data,r=e.updateData,a=n.usageDetails,o="expert"===n.plan,m=ra((0,u.useState)(!1),2),d=m[0],p=m[1],h=ra((0,u.useState)(null),2),f=h[0],g=h[1],b=ra((0,u.useState)(!1),2),y=b[0],k=b[1],E=(0,u.useRef)(!1),D=(t=[{key:"research",label:(0,s.__)("Keyword Research","seo-by-rank-math")},{key:Mn,label:(0,s.__)("Image Alt Text","seo-by-rank-math")},{key:Fn,label:(0,s.__)("Write","seo-by-rank-math")},{key:Bn,label:(0,s.__)("Chat (RankBot)","seo-by-rank-math")},{key:"bulk_seo_meta",label:(0,s.__)("Bulk SEO Meta","seo-by-rank-math")},{key:"fix_seo_tests",label:(0,s.__)("Fix with AI","seo-by-rank-math")},{key:"continue_writing",label:(0,s.__)("Write More","seo-by-rank-math")}].concat(aa(Kn().map(function(e){return{key:e.usageKey||e.endpoint,label:e.title}}))),(0,l.applyFilters)("rank_math_content_ai_usage_features",t)),C=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?k(!0):p(!0),g(null),v()({method:"POST",path:"/rankmath/v1/ca/getCredits"}).then(function(e){e.error?g(e.error):(e.usageDetails&&r("usageDetails",e.usageDetails),(0,i.isUndefined)(e.credits)||r("credits",e.credits))}).catch(function(e){g(e.message||(0,s.__)("Could not fetch usage data. Please try again.","seo-by-rank-math"))}).finally(function(){p(!1),k(!1)})};return(0,u.useEffect)(function(){E.current||!(0,i.isNull)(a)&&!(0,i.isUndefined)(a)||(E.current=!0,C())},[]),wp.element.createElement("div",{className:"rank-math-usage-tab-wrapper"},wp.element.createElement("div",{className:"tab-header"},wp.element.createElement("span",{className:"tab-header-title"},wp.element.createElement("span",{className:"rm-icon rm-icon-analytics"})," ",(0,s.__)("AI Usage","seo-by-rank-math")),!d&&wp.element.createElement("div",{className:"rank-math-usage-refresh-wrapper"},wp.element.createElement(c.Button,{className:"button is-small update-credits",isBusy:y,disabled:y,onClick:function(){return C(!0)}},wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("div",null,y?(0,s.__)("Refreshingâ€¦","seo-by-rank-math"):(0,s.__)("Refresh","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("If you don't see the latest usage data, click Refresh to sync it from your account.","seo-by-rank-math")))))),wp.element.createElement("div",{className:"inner-wrapper"},f&&wp.element.createElement("div",{className:"rank-math-usage-error notice notice-error"},wp.element.createElement("p",null,f)),wp.element.createElement("div",{className:"rank-math-usage-header"},wp.element.createElement("span",null,(0,s.__)("Features","seo-by-rank-math")),wp.element.createElement("span",null,(0,s.__)("Usage this Month","seo-by-rank-math"))),wp.element.createElement("ul",{className:"rank-math-usage-list"},d&&(0,i.map)(D.slice(0,8),function(e){var t=e.key;return wp.element.createElement(sa,{key:t})}),!d&&(0,i.map)(D,function(e){var t=e.key,n=e.label,r=a&&a[t],i=w(r),l=r?(r.used||0)+(i||0):0,c=!r||0===l&&null===i,u=!c&&null!==i&&i<=0&&0===l,m="â€”";return o&&In.has(t)?m=r?"".concat(r.used," / ").concat((0,s.__)("Unlimited","seo-by-rank-math")):"0 / ".concat((0,s.__)("Unlimited","seo-by-rank-math")):c||u?!c&&u&&(m=wp.element.createElement("a",{href:_("content-ai-pricing-tables","Usage Tab"),target:"_blank",rel:"noreferrer"},(0,s.__)("Upgrade","seo-by-rank-math"))):m="".concat(r.used," / ").concat(l),wp.element.createElement("li",{key:t,className:"rank-math-usage-item"},wp.element.createElement("span",{className:"rank-math-usage-item-label"},n),wp.element.createElement("span",{className:"rank-math-usage-item-value"},m))}))))});function ca(e){return ca="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ca(e)}function ua(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ma(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ca(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ca(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ca(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const da=(0,b.compose)((0,d.withSelect)(function(e,t){return{data:t,hasError:!t.isUserRegistered||!t.plan||t.isMigrating}}),(0,d.withDispatch)(function(e){return{updateData:function(t,n){e("rank-math-content-ai").updateData(t,n)}}}))(function(e){var t=window.location.hash?window.location.hash.replace("#",""):"ai-tools";return!e.hasError&&"content-editor"!==t&&(0,i.isUndefined)(wp.blocks.getBlockType("core/paragraph"))&&wp.blockLibrary.registerCoreBlocks(),wp.element.createElement(React.Fragment,null,wp.element.createElement(c.TabPanel,{className:"rank-math-tabs",activeClass:"is-active",tabs:[{name:"ai-tools",id:"ai-tools",title:(0,s.__)("AI Tools","seo-by-rank-math"),view:Ar,className:"rank-math-ai-tools-tab rank-math-tab"},{name:"content-editor",id:"content-editor",title:(0,s.__)("Content Editor","seo-by-rank-math"),view:Xr,className:"rank-math-content-editor-tab rank-math-tab"},{name:"chat",id:"chat",title:(0,s.__)("Chat","seo-by-rank-math"),view:Lr,className:"rank-math-chat-tab rank-math-tab"},{name:"history",id:"history",title:(0,s.__)("History","seo-by-rank-math"),view:na,className:"rank-math-history-tab rank-math-tab"},{name:"usage",id:"usage",title:(0,s.__)("Usage","seo-by-rank-math"),view:la,className:"rank-math-usage-tab rank-math-tab"}],initialTabName:t,onSelect:function(e){window.location.hash=e}},function(t){var n=e.hasError&&"history"!==t.id&&"usage"!==t.id?" blurred":"";return wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"rank-math-tab-content dashboard-wrapper rank-math-tab-content-"+t.name+n},(0,u.createElement)(t.view,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ua(Object(n),!0).forEach(function(t){ma(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ua(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},e))),n&&wp.element.createElement(Fe,{width:"40"}))}))});function pa(e){return pa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pa(e)}function ha(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fa(r.key),r)}}function fa(e){var t=function(e,t){if("object"!=pa(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=pa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==pa(t)?t:t+""}var ga=function(){return function(e,t,n){return t&&ha(e.prototype,t),n&&ha(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(function e(){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),rankMath.contentAI.isUserRegistered){var t=(0,d.select)("rank-math-content-ai").getData();this.ca_keyword=t.keyword,this.data=t.researchedData,this.init=this.init.bind(this),this.contentLength=this.contentLength.bind(this),this.contentLengthBoundary=this.contentLengthBoundary.bind(this),this.keywordDensity=this.keywordDensity.bind(this),this.removeTests=this.removeTests.bind(this),this.researchesTests=rankMath.assessor.researchesTests,this.ca_keyword=wp.data.select("rank-math-content-ai").getData().keyword,(0,l.addAction)("rank_math_loaded","rank-math",this.init),(0,l.addAction)("rank_math_keyword_refresh","rank-math",this.init),(0,l.addAction)("rank_math_content_ai_changed","rank-math",this.init)}},[{key:"init",value:function(e){e&&(this.ca_keyword=e),this.keyword=rankMathEditor.assessor.getPrimaryKeyword(),(0,i.isEmpty)(this.data)||(this.filters(),this.removeTests(),e&&rankMathEditor.refresh("content"))}},{key:"removeTests",value:function(){if(this.ca_keyword===this.keyword){var e=this.data.recommendations;rankMath.assessor.researchesTests=(0,i.filter)(rankMath.assessor.researchesTests,function(t){return!(!e.mediaCount&&"contentHasAssets"===t)&&(!(!e.linkCount.internal&&"linksHasInternal"===t)&&!!(e.linkCount.external||"linksHasExternals"!==t&&"linksNotAllExternals"!==t))})}else rankMath.assessor.researchesTests=this.researchesTests}},{key:"filters",value:function(){(0,l.addFilter)("rankMath_analysis_contentLength","rank-math",this.contentLength),(0,l.addFilter)("rankMath_analysis_contentLength_boundaries","rank-math",this.contentLengthBoundary),(0,l.addFilter)("rankMath_analysis_keywordDensity","rank-math",this.keywordDensity)}},{key:"contentLength",value:function(e){if(this.ca_keyword!==this.keyword)return e;var t=this.data.recommendations.wordCount,n=(0,i.ceil)(150*t/100);return{hasScore:e.hasScore,failed:(0,s.sprintf)((0,s.__)("Content is %1$s words long. Consider using at least %2$s words.","seo-by-rank-math"),"%1$d",t),tooltipText:(0,s.sprintf)((0,s.__)("Minimum recommended content length should be %1$d words.","seo-by-rank-math"),t),emptyContent:(0,s.sprintf)((0,s.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/?utm_source=Plugin&utm_campaign=WP#overall-content-length" target="_blank">'+t+" - "+n+(0,s.__)(" words","seo-by-rank-math")+"</a>")}}},{key:"contentLengthBoundary",value:function(e){if(this.ca_keyword!==this.keyword)return e;var t=this.data.recommendations.wordCount,n=(0,i.ceil)(150*t/100);return{recommended:{boundary:n,score:8},belowRecommended:{boundary:(0,i.ceil)(n/2),score:5},low:{boundary:t,score:2}}}},{key:"keywordDensity",value:function(e,t){if((0,i.isEmpty)(this.data.keywords.content)||(0,i.isEmpty)(this.data.keywords.content[this.keyword]))return e;var n=t/this.data.keywords.content[this.keyword].average*100;return n>80?1.1:100<n?2.5:80<n?1.1:50<n?.8:.5}}])}();const ba=ga;function ya(e){return ya="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ya(e)}function va(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=ya(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ya(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ya(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const _a=(0,d.withSelect)(function(e){return{isLoaded:e("rank-math").isLoaded(),score:e("rank-math-content-ai").getScore()}})(function(e){var t=e.isLoaded,n=e.score,r="free"===rankMath.contentAI.plan,a=N()("rank-math-toolbar-score content-ai-score",va(va(va({},j(n),!0),"loading",!t),"is-free",r));return wp.element.createElement("div",{className:a},r&&wp.element.createElement("span",{className:"rank-math-free-badge"},(0,s.__)("Free","seo-by-rank-math")),wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),wp.element.createElement("span",{className:"content-ai-score"},n," / 100"))});function wa(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=wa(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const ka=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=wa(e))&&(r&&(r+=" "),r+=t);return r};const Ea=(0,u.forwardRef)(({className:e,isPressed:t,...n},r)=>{const a={...n,className:ka(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,u.createElement)("svg",{...a,ref:r})});Ea.displayName="SVG";const Da=(0,xe.createElement)(Ea,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,xe.createElement)(e=>(0,u.createElement)("path",e),{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"}));function Ca(e){var t;return e=e.replace(/,/g,""),e=le(e),t=e,e=(0,i.isUndefined)(t)?"":(0,i.flow)([ne,ae,te,oe,ie])(t)}var Aa=function(e){tinymce.activeEditor.setContent(e),rankMathEditor.assessor.dataCollector.handleContentChange()},Sa=function(){return rankMathEditor.assessor.dataCollector.getContent()},Oa=function(e){return(0,i.includes)(["a","abbr","acronym","b","bdo","big","br","cite","code","dfn","em","i","img","input","kbd","label","q","s","samp","small","span","strong","sub","sup","textarea","time","tt","u","var"],(0,i.toLower)(e))},xa=function(e,t){if("elementor"!==rankMath.currentEditor)if("classic"!==rankMath.currentEditor){var n=(0,d.dispatch)("core/block-editor"),r=n.replaceBlock,a=n.removeBlock;(0,i.forEach)(e,function(e){var n=e.action,o=e.refBlockId,s=e.content,l=e.position,c=(0,i.find)(t,function(e){return e.clientId===o});if(c)switch(n){case"replace":s=Na((0,qe.serialize)(c),s),r(o,(0,qe.rawHandler)({HTML:s}));break;case"delete":a(o);break;case"insert":var u=t.indexOf(c);if(-1===u)return;u="before"===l?u:u+1;var m=s.match(/<([a-z0-9]+)([^>]*)>(.*?)<\/\1>/g)||[],p="";(0,i.forEach)(m,function(e){p+=Na("",e)});var h=(0,qe.rawHandler)({HTML:p});(0,i.forEach)(h,function(e){(0,d.dispatch)("core/block-editor").insertBlock(e,u),u++});break;default:console.warn("Unknown action: ".concat(n))}else console.warn("Block with ID ".concat(o," not found."))})}else!function(e,t){var n=tinymce.activeEditor.getContent(),r=document.createElement("div");r.innerHTML=n,(0,i.forEach)(e,function(e){var n=e.action,a=e.refBlockId,o=e.content,i=e.position,s=r.querySelector('[data-rm-block-id="'.concat(a,'"]'));if(s){var l=t[a],c=document.createElement("div");switch(n){case"replace":o=Na(l,o),c.innerHTML=o;var u=c.firstElementChild;u&&s.replaceWith(u);break;case"delete":s.remove();break;case"insert":c.innerHTML=Na("",o);var m=c.firstElementChild;if(!m)return void console.warn("Invalid HTML to insert.");"before"===i?s.parentNode.insertBefore(m,s):s.parentNode.insertBefore(m,s.nextSibling);break;default:console.warn("Unknown action: ".concat(n))}Aa(r.innerHTML)}else console.warn("Block with ID ".concat(a," not found."))})}(e,t);else(0,l.doAction)("rank_math_replace_ai_content",e)},Ta=function(e){if(e)if("classic"!==rankMath.currentEditor){e=e.replace(/<mark class="rank-math-highlight" style="background-color: #fee894">(.+?)<\/mark>/g,"$1");var t=(0,qe.rawHandler)({HTML:e});Pa(t)}else!function(){var e=Sa().replaceAll(/<mark\b[^>]*class=["']rank-math-highlight["'][^>]*>(.*?)<\/mark>/gi,"$1");Aa(e)}()},Pa=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(["classic","gutenberg"].includes(rankMath.currentEditor))if("classic"!==rankMath.currentEditor){var n=(0,d.select)("core/block-editor").getBlocks().map(function(e){return e.clientId});(0,d.dispatch)("core/block-editor").replaceBlocks(n,e)}else Aa(t)},Na=function(e,t){e=e.replaceAll("\n","");var n=ja(e),r=ja(t),a=[];(0,i.forEach)(r,function(e){(0,i.includes)(n,e)||a.push(e)});var o=t,s=t.replace(/<[^>]*>/g," ");return(0,i.forEach)(a,function(e){var t=s.indexOf(e);if(-1!==t){for(var n=e,r=s[t+e.length];r&&!/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/.test(r);)n+=r,t++,r=s[t+e.length];n=(0,i.trim)(n),o=o.replace(new RegExp(Ia(n),"i"),'<mark class="rank-math-highlight" style="background-color: #fee894">'.concat(n,"</mark>"))}}),o},Ia=function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},ja=function(e){var t=e.split(/(?<!\d)\.(?!\d)|[!?]|\n|<br>|:|<p>|<\/p>/)||[e];return t=t.map(function(e){return e.replace(/<(?!br[\s/>])[^>]*>/gi," ")}),(0,i.compact)((0,i.map)(t,function(e){return(0,i.trim)(e)}))},Fa=wp.element.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("g",{clipPath:"url(#clip0_3091_13042)"},wp.element.createElement("path",{d:"M12 14.5L13 16.5L14 14.5L16 13.5L14 12.5L13 10.5L12 12.5L10 13.5L12 14.5ZM12.8887 3.61133L13.6667 5.16667L14.4447 3.61133L16 2.83333L14.4447 2.05533L13.6667 0.5L12.8887 2.05533L11.3333 2.83333L12.8887 3.61133Z",fill:"url(#paint0_linear_3091_13042)"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.50336 10.33L6.66669 14.6574L8.83003 10.33L13.1574 8.16669L8.83003 6.00336L6.66669 1.67603L4.50336 6.00336L0.176025 8.16669L4.50336 10.33ZM3.30691 8.16669L5.54688 9.2865L6.66669 11.5265L7.78651 9.2865L10.0265 8.16669L7.78651 7.04688L6.66669 4.80691L5.54688 7.04688L3.30691 8.16669Z",fill:"url(#paint1_linear_3091_13042)"})),wp.element.createElement("defs",null,wp.element.createElement("linearGradient",{id:"paint0_linear_3091_13042",x1:"14.684",y1:"1.60572",x2:"6.35101",y2:"6.48577",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"})),wp.element.createElement("linearGradient",{id:"paint1_linear_3091_13042",x1:"10.3101",y1:"2.57313",x2:"3.26935",y2:"13.5686",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"})),wp.element.createElement("clipPath",{id:"clip0_3091_13042"},wp.element.createElement("rect",{width:"16",height:"16",fill:"white",transform:"translate(0 0.5)"})))),Ba=wp.element.createElement("svg",{width:"16",height:"10",viewBox:"0 0 16 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M15.1499 0.350024C14.9249 0.125024 14.5749 0.125024 14.3499 0.350024L5.84994 8.60003L1.64994 4.47502C1.42494 4.25002 1.07494 4.27502 0.849942 4.47502C0.624942 4.70002 0.649942 5.05002 0.849942 5.27502L5.27494 9.57502C5.42494 9.72502 5.62494 9.80002 5.84994 9.80002C6.07494 9.80002 6.24994 9.72502 6.42494 9.57502L15.1499 1.10002C15.3749 0.925024 15.3749 0.575024 15.1499 0.350024Z",fill:"white"})),Ma=wp.element.createElement("svg",{width:"14",height:"16",viewBox:"0 0 14 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M13.55 6.69923C13.45 6.39923 13.15 6.24923 12.85 6.32423C12.55 6.42423 12.4 6.72423 12.475 7.02423C12.65 7.57423 12.75 8.14923 12.75 8.72423C12.75 9.59923 12.55 10.4242 12.175 11.1992C11.2 13.1992 9.225 14.4492 7 14.4492C3.825 14.4492 1.25 11.8742 1.25 8.74923C1.25 5.62423 3.825 3.04923 7 3.04923C7.575 3.04923 8.15 3.12423 8.675 3.29923L7.825 3.69923C7.55 3.82423 7.425 4.17423 7.55 4.44923C7.65 4.64923 7.85 4.77423 8.05 4.77423C8.125 4.77423 8.2 4.74923 8.275 4.72423L10.475 3.69923C10.6 3.62423 10.725 3.52423 10.775 3.37423C10.825 3.22423 10.825 3.07423 10.75 2.94923L9.75 0.749227C9.625 0.474227 9.275 0.349227 9 0.474227C8.725 0.599227 8.6 0.949227 8.725 1.22423L9.2 2.27423C8.5 2.02423 7.75 1.89923 6.975 1.89923C3.225 1.92423 0.125 4.97423 0.125 8.74923C0.125 12.5242 3.225 15.5742 7 15.5742C9.65 15.5742 12.025 14.0992 13.175 11.7242C13.625 10.7992 13.875 9.79923 13.875 8.74923C13.875 8.04923 13.75 7.34923 13.55 6.69923Z",fill:"#017CBA"})),Ra=wp.element.createElement("svg",{width:"14",height:"12",viewBox:"0 0 14 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M7.8687 6.06869L12.9591 0.978287C13.1841 0.753287 13.1841 0.403287 12.9591 0.178287C12.7341 -0.0467133 12.3841 -0.0467133 12.1591 0.178287L7.0687 5.26869L1.97829 0.178271C1.75329 -0.0467285 1.40329 -0.0467285 1.17829 0.178271C0.953288 0.403271 0.953288 0.753271 1.17829 0.978271L6.2687 6.06869L1.1098 11.0276C0.884797 11.2526 0.884797 11.6026 1.1098 11.8276C1.2098 11.9276 1.3598 12.0026 1.5098 12.0026C1.6598 12.0026 1.8098 11.9526 1.9098 11.8276L7.0687 6.86869L12.0277 11.8276C12.1277 11.9276 12.2777 12.0026 12.4277 12.0026C12.5777 12.0026 12.7277 11.9526 12.8277 11.8276C13.0527 11.6026 13.0527 11.2526 12.8277 11.0276L7.8687 6.06869Z",fill:"#757575"})),La=wp.element.createElement("svg",{width:"16",height:"14",viewBox:"0 0 16 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M14.1999 2.09994C13.3499 1.24994 12.2499 0.774944 11.0749 0.749944C9.89991 0.724944 8.79991 1.14994 7.97491 1.97494L3.82491 6.12494L2.59991 4.89994C2.32491 4.62494 1.89991 4.52494 1.52491 4.64994C1.14991 4.77494 0.874909 5.12494 0.824908 5.52494L0.449908 9.14994C0.399908 9.47494 0.524909 9.77494 0.749909 9.99994C0.949908 10.1999 1.19991 10.2999 1.47491 10.2999C1.49991 10.2999 1.54991 10.2999 1.59991 10.2999L5.22491 9.89994C5.62491 9.84994 5.94991 9.59994 6.09991 9.19994C6.24991 8.79994 6.14991 8.39994 5.84991 8.12494L4.62491 6.89994L8.77491 2.74994C9.37491 2.14994 10.1749 1.84994 11.0499 1.87494C11.9249 1.89994 12.7749 2.27494 13.3999 2.89994C14.7249 4.22494 14.7749 6.29994 13.5499 7.52494L8.77491 12.2999C8.54991 12.5249 8.54991 12.8749 8.77491 13.0999C8.87491 13.1999 9.02491 13.2749 9.17491 13.2749C9.32491 13.2749 9.47491 13.2249 9.57491 13.0999L14.3499 8.32494C16.0249 6.64994 15.9499 3.84994 14.1999 2.09994ZM1.57491 9.17494L1.92491 5.82494L4.89991 8.79994L1.57491 9.17494Z",fill:"#017CBA"})),qa=wp.element.createElement("svg",{width:"12",height:"12",viewBox:"0 0 11 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement("path",{d:"M10.4423 7.38225C10.3238 7.32181 10.1863 7.31037 10.0594 7.35038C9.93248 7.39039 9.82639 7.47865 9.76397 7.59614C9.3934 8.30474 8.84109 8.90208 8.16364 9.32693C7.48619 9.75179 6.70796 9.98889 5.90871 10.0139C5.10945 10.039 4.3179 9.85107 3.61518 9.46946C2.91247 9.08785 2.32384 8.52627 1.90963 7.84226C1.49543 7.15824 1.27053 6.3764 1.25799 5.57685C1.24545 4.7773 1.44572 3.98879 1.83828 3.29213C2.23083 2.59546 2.80156 2.0157 3.49197 1.61224C4.18237 1.20878 4.96764 0.996145 5.76729 0.996115C5.95529 0.996161 6.14309 1.00841 6.32951 1.03278C6.43098 0.663682 6.66627 0.345602 6.98951 0.140556C6.58876 0.0474722 6.17871 0.000316554 5.76729 0C4.79357 0.00377237 3.83831 0.265979 2.99912 0.759827C2.15992 1.25368 1.46688 1.96146 0.990796 2.81086C0.514716 3.66026 0.272668 4.62083 0.289385 5.59441C0.306102 6.56799 0.580986 7.51967 1.08595 8.35223C1.59091 9.18478 2.30785 9.86836 3.1635 10.3331C4.01916 10.7979 4.98285 11.0271 5.95612 10.9974C6.9294 10.9678 7.87735 10.6803 8.70311 10.1643C9.52888 9.6483 10.2029 8.92234 10.6562 8.06059C10.7166 7.94206 10.7281 7.80453 10.6881 7.67765C10.6481 7.55076 10.5598 7.44467 10.4423 7.38225Z",fill:"#949494"}),wp.element.createElement("path",{d:"M10.4423 7.38225C10.3238 7.32181 10.1863 7.31037 10.0594 7.35038C9.93248 7.39039 9.82639 7.47865 9.76397 7.59614C9.3934 8.30474 8.84109 8.90208 8.16364 9.32693C7.48619 9.75179 6.70796 9.98889 5.90871 10.0139C5.10945 10.039 4.3179 9.85107 3.61518 9.46946C2.91247 9.08785 2.32384 8.52627 1.90963 7.84226C1.49543 7.15824 1.27053 6.3764 1.25799 5.57685C1.24545 4.7773 1.44572 3.98879 1.83828 3.29213C2.23083 2.59546 2.80156 2.0157 3.49197 1.61224C4.18237 1.20878 4.96764 0.996145 5.76729 0.996115C5.95529 0.996161 6.14309 1.00841 6.32951 1.03278C6.43098 0.663682 6.66627 0.345602 6.98951 0.140556C6.58876 0.0474722 6.17871 0.000316554 5.76729 0C4.79357 0.00377237 3.83831 0.265979 2.99912 0.759827C2.15992 1.25368 1.46688 1.96146 0.990796 2.81086C0.514716 3.66026 0.272668 4.62083 0.289385 5.59441C0.306102 6.56799 0.580986 7.51967 1.08595 8.35223C1.59091 9.18478 2.30785 9.86836 3.1635 10.3331C4.01916 10.7979 4.98285 11.0271 5.95612 10.9974C6.9294 10.9678 7.87735 10.6803 8.70311 10.1643C9.52888 9.6483 10.2029 8.92234 10.6562 8.06059C10.7166 7.94206 10.7281 7.80453 10.6881 7.67765C10.6481 7.55076 10.5598 7.44467 10.4423 7.38225Z",fill:"url(#paint0_linear_3105_12223)"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.96062 4.45502C4.7077 4.47078 4.47112 4.58534 4.30192 4.77398C4.13272 4.96262 4.04445 5.21022 4.05617 5.46335C4.0445 5.71587 4.13295 5.96278 4.30231 6.15045C4.47166 6.33811 4.70823 6.45136 4.96062 6.46558C5.08587 6.45932 5.20865 6.42841 5.32193 6.37463C5.43522 6.32084 5.53678 6.24523 5.6208 6.15213C5.70481 6.05903 5.76963 5.95027 5.81155 5.83208C5.85347 5.71389 5.87165 5.58858 5.86506 5.46335C5.8784 5.20981 5.7907 4.96132 5.62117 4.77232C5.45164 4.58332 5.21411 4.46922 4.96062 4.45502Z",fill:"#949494"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.96062 4.45502C4.7077 4.47078 4.47112 4.58534 4.30192 4.77398C4.13272 4.96262 4.04445 5.21022 4.05617 5.46335C4.0445 5.71587 4.13295 5.96278 4.30231 6.15045C4.47166 6.33811 4.70823 6.45136 4.96062 6.46558C5.08587 6.45932 5.20865 6.42841 5.32193 6.37463C5.43522 6.32084 5.53678 6.24523 5.6208 6.15213C5.70481 6.05903 5.76963 5.95027 5.81155 5.83208C5.85347 5.71389 5.87165 5.58858 5.86506 5.46335C5.8784 5.20981 5.7907 4.96132 5.62117 4.77232C5.45164 4.58332 5.21411 4.46922 4.96062 4.45502Z",fill:"url(#paint1_linear_3105_12223)"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.41952 2.87834C8.22664 2.9615 8.01843 3.00314 7.80841 3.00057C7.46879 2.9948 7.14053 2.87736 6.87433 2.66639C6.60813 2.45542 6.41881 2.16266 6.33562 1.83334C6.17075 1.82403 6.00549 1.82403 5.84062 1.83334C4.99143 1.83403 4.1688 2.12946 3.51318 2.66918C2.85757 3.2089 2.40961 3.95946 2.2458 4.7927C2.08199 5.62595 2.21247 6.49022 2.61498 7.23797C3.01748 7.98571 3.66705 8.57057 4.45278 8.89268C5.23851 9.21479 6.11169 9.25419 6.92324 9.00415C7.73479 8.75411 8.43439 8.23013 8.9026 7.52168C9.37082 6.81322 9.57861 5.96421 9.4905 5.1196C9.4024 4.27499 9.02386 3.48714 8.41952 2.89057V2.87834ZM6.70229 6.90558C6.70229 7.02714 6.654 7.14372 6.56805 7.22967C6.48209 7.31563 6.36551 7.36392 6.24396 7.36392C6.1224 7.36392 6.00582 7.31563 5.91986 7.22967C5.83391 7.14372 5.78562 7.02714 5.78562 6.90558V6.86891C5.51487 7.13559 5.15118 7.28676 4.77117 7.29058C4.31972 7.25465 3.90074 7.04183 3.60545 6.69847C3.31015 6.3551 3.16245 5.90899 3.1945 5.45724C3.16407 5.00587 3.31234 4.56063 3.60733 4.21763C3.90231 3.87463 4.32033 3.66138 4.77117 3.6239C5.14665 3.63505 5.5034 3.79045 5.76729 4.05779C5.77296 3.93623 5.82669 3.82191 5.91665 3.73997C6.00662 3.65802 6.12545 3.61517 6.24701 3.62085C6.36857 3.62652 6.48289 3.68025 6.56484 3.77021C6.64678 3.86018 6.68963 3.97901 6.68396 4.10057L6.70229 6.90558ZM8.26674 6.90558C8.26674 7.02714 8.21845 7.14372 8.1325 7.22967C8.04654 7.31563 7.92996 7.36392 7.80841 7.36392C7.68685 7.36392 7.57027 7.31563 7.48431 7.22967C7.39836 7.14372 7.35007 7.02714 7.35007 6.90558V4.10057C7.35007 3.97901 7.39836 3.86243 7.48431 3.77648C7.57027 3.69052 7.68685 3.64224 7.80841 3.64224C7.92996 3.64224 8.04654 3.69052 8.1325 3.77648C8.21845 3.86243 8.26674 3.97901 8.26674 4.10057V6.90558Z",fill:"#949494"}),wp.element.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.41952 2.87834C8.22664 2.9615 8.01843 3.00314 7.80841 3.00057C7.46879 2.9948 7.14053 2.87736 6.87433 2.66639C6.60813 2.45542 6.41881 2.16266 6.33562 1.83334C6.17075 1.82403 6.00549 1.82403 5.84062 1.83334C4.99143 1.83403 4.1688 2.12946 3.51318 2.66918C2.85757 3.2089 2.40961 3.95946 2.2458 4.7927C2.08199 5.62595 2.21247 6.49022 2.61498 7.23797C3.01748 7.98571 3.66705 8.57057 4.45278 8.89268C5.23851 9.21479 6.11169 9.25419 6.92324 9.00415C7.73479 8.75411 8.43439 8.23013 8.9026 7.52168C9.37082 6.81322 9.57861 5.96421 9.4905 5.1196C9.4024 4.27499 9.02386 3.48714 8.41952 2.89057V2.87834ZM6.70229 6.90558C6.70229 7.02714 6.654 7.14372 6.56805 7.22967C6.48209 7.31563 6.36551 7.36392 6.24396 7.36392C6.1224 7.36392 6.00582 7.31563 5.91986 7.22967C5.83391 7.14372 5.78562 7.02714 5.78562 6.90558V6.86891C5.51487 7.13559 5.15118 7.28676 4.77117 7.29058C4.31972 7.25465 3.90074 7.04183 3.60545 6.69847C3.31015 6.3551 3.16245 5.90899 3.1945 5.45724C3.16407 5.00587 3.31234 4.56063 3.60733 4.21763C3.90231 3.87463 4.32033 3.66138 4.77117 3.6239C5.14665 3.63505 5.5034 3.79045 5.76729 4.05779C5.77296 3.93623 5.82669 3.82191 5.91665 3.73997C6.00662 3.65802 6.12545 3.61517 6.24701 3.62085C6.36857 3.62652 6.48289 3.68025 6.56484 3.77021C6.64678 3.86018 6.68963 3.97901 6.68396 4.10057L6.70229 6.90558ZM8.26674 6.90558C8.26674 7.02714 8.21845 7.14372 8.1325 7.22967C8.04654 7.31563 7.92996 7.36392 7.80841 7.36392C7.68685 7.36392 7.57027 7.31563 7.48431 7.22967C7.39836 7.14372 7.35007 7.02714 7.35007 6.90558V4.10057C7.35007 3.97901 7.39836 3.86243 7.48431 3.77648C7.57027 3.69052 7.68685 3.64224 7.80841 3.64224C7.92996 3.64224 8.04654 3.69052 8.1325 3.77648C8.21845 3.86243 8.26674 3.97901 8.26674 4.10057V6.90558Z",fill:"url(#paint2_linear_3105_12223)"}),wp.element.createElement("path",{d:"M7.85729 2.33445C8.34668 2.33445 8.74341 1.93773 8.74341 1.44834C8.74341 0.958951 8.34668 0.562224 7.85729 0.562224C7.36791 0.562224 6.97118 0.958951 6.97118 1.44834C6.97118 1.93773 7.36791 2.33445 7.85729 2.33445Z",fill:"#949494"}),wp.element.createElement("path",{d:"M7.85729 2.33445C8.34668 2.33445 8.74341 1.93773 8.74341 1.44834C8.74341 0.958951 8.34668 0.562224 7.85729 0.562224C7.36791 0.562224 6.97118 0.958951 6.97118 1.44834C6.97118 1.93773 7.36791 2.33445 7.85729 2.33445Z",fill:"url(#paint3_linear_3105_12223)"}),wp.element.createElement("defs",null,wp.element.createElement("linearGradient",{id:"paint0_linear_3105_12223",x1:"8.42545",y1:"0.760183",x2:"2.33068",y2:"9.77897",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"})),wp.element.createElement("linearGradient",{id:"paint1_linear_3105_12223",x1:"8.42545",y1:"0.760183",x2:"2.33068",y2:"9.77897",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"})),wp.element.createElement("linearGradient",{id:"paint2_linear_3105_12223",x1:"8.42545",y1:"0.760183",x2:"2.33068",y2:"9.77897",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"})),wp.element.createElement("linearGradient",{id:"paint3_linear_3105_12223",x1:"8.42545",y1:"0.760183",x2:"2.33068",y2:"9.77897",gradientUnits:"userSpaceOnUse"},wp.element.createElement("stop",{stopColor:"#DA4892"}),wp.element.createElement("stop",{offset:"1",stopColor:"#6C4D90"}))));function za(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ha(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ha(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ha(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Ua=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=t.id,a=t.previousResults;if((0,i.includes)(["keywordInTitle","titleStartWithKeyword","titleSentiment","titleHasNumber","titleHasPowerWords"],r)&&(e=!e&&n?t.seo_title:e,(0,d.dispatch)("rank-math").updateSerpTitle(e),(0,d.dispatch)("rank-math").updateTitle(e),(0,d.dispatch)("rank-math").toggleSnippetEditor(!0)),"keywordInMetaDescription"===r&&(e=!e&&n?t.description:e,(0,d.dispatch)("rank-math").updateSerpDescription(e),(0,d.dispatch)("rank-math").updateDescription(e),(0,d.dispatch)("rank-math").toggleSnippetEditor(!0)),"keywordInPermalink"===r&&(e=!e&&n?t.url:e,(0,d.dispatch)("rank-math").updatePermalink(e),rankMathEditor.updatePermalink(Ca(e),!0),rankMathEditor.updatePermalinkSanitize(Ca(e)),(0,d.dispatch)("rank-math").toggleSnippetEditor(!0)),t.isContentTest){if(!e&&n)return"elementor"===rankMath.currentEditor?void(0,l.doAction)("rank_math_content_test_reject",t.blocks):void Pa(t.blocks,t.originalContent);Pa(t.blocks,t.originalContent),xa(JSON.parse(e),t.blocks)}n||(a.push(e),(0,d.dispatch)("rank-math-content-ai").updatePreviousResults(a))},Va=function(e){var t=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.forEach)(e,function(e){if(e.innerBlocks&&e.innerBlocks.length>0)t(e.innerBlocks,n);else{var r=(0,qe.serialize)(e);(0,i.trim)(r.replace(/<!--[^]*?-->/g,"").replace(/<[^>]*>/g,""))&&(n[e.clientId]=r.replace(/<!--[^]*?-->/g,""))}}),n};return t(e)};const Wa=(0,b.compose)((0,d.withSelect)(function(e,t){var n=t.id,r=t.data,a=t.seoTitle,o=t.seoDescription,s=t.keyword,l=t.blocks,c=t.originalContent,u=e("rank-math-content-ai").getPreviousResults();return{id:n,keyword:s,title:r.title,seo_title:a,url:r.slug,description:o,excerpt:(0,i.isEmpty)(r.excerpt)?"":r.excerpt,content:h()?e("core/editor").getEditedPostContent():r.content,blocks:l,originalContent:c,content_blocks:h()?Va(l):l,previousResults:u,isSnippetEditorOpen:e("rank-math").isSnippetEditorOpen(),isContentTest:(0,i.includes)(["keywordIn10Percent","keywordInContent","lengthContent","keywordInSubheadings","keywordInImageAlt","keywordDensity","contentHasShortParagraphs"],n)}}),(0,d.withDispatch)(function(e,t){return{reject:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=t.previousResults;Ua(e?n[0]:"",t,!0)},removeSnackBar:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&Ua("",t,!0),t.isContentTest&&function(){if("classic"===rankMath.currentEditor){var e=tinymce.activeEditor.getContent(),t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("[data-rm-block-id]").forEach(function(e){e.removeAttribute("data-rm-block-id")}),Aa(t.innerHTML)}}(),e("rank-math-content-ai").updatePreviousResults([]),document.getElementById("rank-math-content-ai-snackbar").remove()}}}))(function(e){var t=e.id,n=e.previousResults,r=e.isSnippetEditorOpen,a=e.isContentTest,o=e.reject,m=e.removeSnackBar,d=za((0,u.useState)(n.length),2),p=d[0],h=d[1],f=za((0,u.useState)(!1),2),g=f[0],b=f[1],y=za((0,u.useState)(!1),2),v=y[0],_=y[1],w=za((0,u.useState)(!0),2),k=w[0],E=w[1],D=!(0,i.isBoolean)(v),C=["keywordInTitle","keywordInMetaDescription","keywordInPermalink","titleStartWithKeyword","titleSentiment","titleHasNumber","titleHasPowerWords"],A=function(){E(!0);var r=(0,l.applyFilters)("rank_math_content_ai_payload_blocks",e.content_blocks);if(C.includes(t)||Object.keys(r).length){var a=(0,i.includes)(["keywordInTitle","titleStartWithKeyword","titleSentiment","titleHasNumber","titleHasPowerWords","keywordInPermalink","lengthContent","keywordDensity"],t),o=(0,i.includes)(["keywordIn10Percent","keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","contentHasShortParagraphs"],t),s="\x3c!-- SCRIPT REMOVED --\x3e";_(!0),Ye("fix_seo_tests",{test_type:t,focus_keyword:e.keyword,post_title:e.title,post_seo_title:e.seo_title,post_seo_description:e.description,post_permalink:e.url,post_content:a?ae(e.content,s):null,content_blocks:o?(0,i.mapValues)(r,function(e){return ae(e,s)}):null,post_excerpt:ae(e.excerpt,s),previous_results:n},function(t){(0,i.isEmpty)(t.error)?(_(!1),t=t[0],Ua(t,e,!1),h(n.length)):_(t.error)})}else E(!1)},S=function(t){Ua(n[t-1],e,!0),h(t),b(!1)};return(0,u.useEffect)(function(){A()},[]),wp.element.createElement("div",null,!0===v&&wp.element.createElement("div",{className:"snackbar-loader"},wp.element.createElement("span",null),wp.element.createElement("span",null),wp.element.createElement("span",null),wp.element.createElement("span",null)),(!v||D)&&wp.element.createElement("div",{className:"snackbar-content"},wp.element.createElement("div",{className:"snackbar-header"},wp.element.createElement("h2",{className:"main-title"},(0,s.__)("Content AI","seo-by-rank-math"),"Â ",wp.element.createElement("span",null,"â€¢"),"Â ",r?(0,s.__)("Snippet Editor","seo-by-rank-math"):(0,s.__)("Post Editor","seo-by-rank-math")),wp.element.createElement(c.Button,{size:"small",className:"close-snackbar",onClick:function(){return m(!0)},icon:Da,label:(0,s.__)("Close","seo-by-rank-math")})),wp.element.createElement("div",{className:"snackbar-body"},wp.element.createElement("div",{className:"pagination-container"},wp.element.createElement("h4",null,Fa,(0,s.__)("Generated Content","seo-by-rank-math")),n.length>1&&wp.element.createElement("div",{className:"snackbar-pagination"},p>1&&wp.element.createElement(c.Button,{size:"small",className:"previous",onClick:function(){return S(p-1)},label:(0,s.__)("Previous","seo-by-rank-math")}),wp.element.createElement("span",null,p," / ",n.length),p<n.length&&wp.element.createElement(c.Button,{size:"small",className:"next",onClick:function(){return S(p+1)},label:(0,s.__)("Next","seo-by-rank-math")}))),wp.element.createElement("p",{className:"desc"},D&&v,!D&&(k?(0,s.__)("The highlighted content has been generated by AI for your review. Carefully evaluate the suggested changes and use the options below to accept or reject them.","seo-by-rank-math"):(0,s.__)("No valid content blocks found. Please add some content blocks to the post.","seo-by-rank-math"))),!D&&k&&wp.element.createElement("div",{className:"snackbar-actions"},wp.element.createElement(c.Button,{variant:"secondary",className:"approve-content",onClick:function(){a&&((0,l.doAction)("rank_math_content_test_approve",e.content),["gutenberg","classic"].includes(rankMath.currentEditor)&&Ta(e.content)),m()}},Ba,(0,s.__)("Approve","seo-by-rank-math")),wp.element.createElement(c.Button,{variant:"secondary",className:"regenerate-content",onClick:function(){a&&Ua("",e,!0),A()}},Ma,(0,s.__)("Regenerate","seo-by-rank-math")),!g&&wp.element.createElement(c.Button,{variant:"secondary",className:"reject-content",onClick:function(){o(),b(!0)}},Ra,(0,s.__)("Reject","seo-by-rank-math")),g&&wp.element.createElement(c.Button,{variant:"secondary",className:"undo-content",onClick:function(){o(!0),b(!1)}},La,(0,s.__)("Undo","seo-by-rank-math"))))))}),$a=function(){return!rankMath.contentAI.isUserRegistered||!rankMath.contentAI.plan||rankMath.contentAI.isMigrating};n.dn($a);const Ga=function(e){var t,n=e.showProNotice,r=void 0!==n&&n,a=e.isBulkEdit,s=void 0!==a&&a,l=e.creditsRequired,m=void 0===l?0:l,d=e.isKeywordIntent,p=void 0!==d&&d;(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&(t="elementor"===rankMath.currentEditor?"#elementor-editor-wrapper":"#wpwrap",o()(t).append('<div id="rank-math-content-ai-modal-wrapper"></div>'));setTimeout(function(){(0,u.render)(wp.element.createElement(c.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",shouldCloseOnClickOutside:!1,onRequestClose:function(e){(0,i.isUndefined)(e)||(o()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove(),document.body.classList.remove("modal-open"))}},wp.element.createElement(Fe,{width:100,showProNotice:r,isBulkEdit:s,creditsRequired:m,isKeywordIntent:p})),document.getElementById("rank-math-content-ai-modal-wrapper"))},100)};function Ka(e){return function(e){if(Array.isArray(e))return Ja(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ja(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ja(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ja(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Ga);var Ya=function(e){return(0,i.isEmpty)(e)?e:e.flatMap(function(e){return"core/gallery"!==e.name?[e].concat(Ka(Ya(e.innerBlocks||[]))):[e,e]}).filter(function(e,t,n){return n.findIndex(function(t){return t.clientId===e.clientId})===t})},Za=function(){return"classic"===rankMath.currentEditor?function(){if(!pn())return{};var e={},t=tinymce.activeEditor,n=t.getContent(),r=document.createElement("div");r.innerHTML=n;var a=0,o=function(t){if(t.nodeType===Node.ELEMENT_NODE&&!Oa(t.tagName)){var n=(0,i.filter)(t.children,function(e){return e.nodeType===Node.ELEMENT_NODE&&!Oa(e.tagName)});if((0,i.isEmpty)(n)){a++;var r="block-".concat(a);t.setAttribute("data-rm-block-id",r),e[r]=t.outerHTML}else(0,i.forEach)(n,o)}};return(0,i.forEach)(r.children,o),t.setContent(r.innerHTML),e}():"gutenberg"===rankMath.currentEditor?Ya(wp.data.select("core/block-editor").getBlocks()):(0,l.applyFilters)("rank_math_content_ai_original_blocks",[])};const Qa=function(e){var t=e.id,n=e.result;if(!function(e,t){if(t.hasScore()||"post"!==rankMath.objectType)return!1;var n=["keywordIn10Percent","keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","contentHasShortParagraphs"];return!((0,i.includes)(n,e)&&!(0,i.includes)(["gutenberg","classic","elementor"],rankMath.currentEditor)||(0,i.includes)(n,e)&&"classic"===rankMath.currentEditor&&("undefined"==typeof tinymce||tinymce.editors.some(function(e){return"content"!==e.id})))&&((0,i.includes)(["keywordInTitle","keywordInMetaDescription","keywordInPermalink","titleStartWithKeyword","titleSentiment","titleHasNumber","titleHasPowerWords"],e)||(0,i.includes)(n,e))}(t,n))return null;var r=rankMathEditor.assessor.analyzer.researcher.paper,a=r.getKeyword();return(0,i.isEmpty)(a)&&(0,i.includes)((0,i.toLower)(t),"keyword")?null:wp.element.createElement(c.Button,{variant:"link",className:"rank-math-ai-button",showTooltip:!0,tooltipPosition:"top",label:(0,s.__)("Fix with AI","seo-by-rank-math"),onClick:function(){$a()?Ga({showProNotice:!1}):function(e){var t=document.createElement("div");t.id="rank-math-content-ai-snackbar",document.body.appendChild(t);var n=rankMathEditor.assessor.dataCollector.getData(),r=wp.data.select("rank-math"),a=r.getKeywords().split(","),o="classic"===rankMath.currentEditor;(0,u.createRoot)(document.getElementById(t.id)).render(wp.element.createElement(Wa,{id:e,seoTitle:r.getSerpTitle(),seoDescription:r.getSerpDescription(),keyword:a[0],data:n,blocks:Za(),originalContent:o?Sa():""}))}(t)}},qa,(0,s.__)("Fix with AI","seo-by-rank-math"))};function Xa(e){return Xa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xa(e)}function eo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function to(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eo(Object(n),!0).forEach(function(t){no(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function no(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Xa(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Xa(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Xa(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(Qa);const ro=function(e){return new Promise(function(t,n){var r=wp.data.select("rank-math-content-ai").getData();(function(e){return new Promise(function(t,n){var r=new window.Image;r.crossOrigin="anonymous",r.onload=function(){var a=document.createElement("canvas"),o=a.getContext("2d");a.width=r.width,a.height=r.height,o.drawImage(r,0,0);try{var i=e.toLowerCase().split("."),s=i[i.length-1],l="image/jpeg";switch(s){case"png":l="image/png";break;case"gif":l="image/gif";break;case"webp":l="image/webp";break;case"svg":l="image/svg+xml";break;default:l="image/jpeg"}var c=a.toDataURL(l);t(c)}catch(e){n(e)}},r.onerror=function(){n(new Error("Failed to load image"))},r.src=e})})(e).then(function(a){var o=function(e){var t=e.split("/");return(0,i.last)(t)||"image.jpg"}(e);fetch(r.url+Mn,{method:"POST",body:JSON.stringify({images:[{id:o,image:a}],username:r.connectData.username,api_key:r.connectData.api_key,site_url:r.connectData.site_url,plugin_version:rankMath.version,language:r.language}),headers:{"Content-Type":"application/json"}}).then(function(e){return e.json()}).then(function(e){if(e.altTexts&&e.altTexts[o])return t(e.altTexts[o]),void function(e){var t;if(!(0,i.isUndefined)(e.usage)&&!(0,i.isEmpty)(e.usage.feature)){var n=e.usage,r=null!==(t=wp.data.select("rank-math-content-ai").getData().usageDetails)&&void 0!==t?t:{};wp.data.dispatch("rank-math-content-ai").updateData("usageDetails",to(to({},r),{},no({},n.feature,n))),v()({method:"POST",path:"/rankmath/v1/ca/saveOutput",data:{usage:n}})}}(e);n((0,s.__)("Failed to generate alt text.","seo-by-rank-math"))}).catch(function(e){n(e)})}).catch(function(e){n(e)})})};function ao(e){return ao="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ao(e)}function oo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?oo(Object(n),!0).forEach(function(t){so(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):oo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function so(e,t,n){return(t=co(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lo(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,co(r.key),r)}}function co(e){var t=function(e,t){if("object"!=ao(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=ao(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==ao(t)?t:t+""}n.dn(ro);var uo=function(){return function(e,t,n){return t&&lo(e.prototype,t),n&&lo(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.injectGenerateAltTextButton(),o()(window).on("elementor:init",function(){t.injectGenerateAltTextButton()})},[{key:"injectGenerateAltTextButton",value:function(){var e=this;void 0!==wp.media&&void 0!==wp.media.view.Attachment.Details.TwoColumn&&(wp.media.view.Attachment.Details.TwoColumn=wp.media.view.Attachment.Details.TwoColumn.extend({template:function(t){return e.getTemplate("attachment-details-two-column",t,!0)},events:io(io({},wp.media.view.Attachment.Details.TwoColumn.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})})),"classic"===rankMath.currentEditor&&(wp.media.view.ImageDetails=wp.media.view.ImageDetails.extend({template:function(t){return e.getTemplate("image-details",t)},events:io(io({},wp.media.view.ImageDetails.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})})),void 0!==wp.media&&(wp.media.view.Attachment.Details=wp.media.view.Attachment.Details.extend({template:function(t){return e.getTemplate("attachment-details",t)},events:io(io({},wp.media.view.Attachment.Details.prototype.events),{},{"click .rank-math-generate-alt-button":this.generateAltTextForImage})}))}},{key:"getTemplate",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=wp.media.template(e)(t),a=document.createElement("div");if(a.innerHTML=r,!a.querySelector("#alt-text-description"))return r;var o='<button class="rank-math-generate-alt-button" data-two-column="'+n+'"><i class="rm-icon rm-icon-content-ai"></i>'+(0,s.__)("Generate Alt","seo-by-rank-math")+"</button><br />",i=a.querySelector("#alt-text-description");return i.innerHTML=o+i.innerHTML,a.innerHTML}},{key:"generateAltTextForImage",value:function(e){var t=this;if(e.preventDefault(),e.stopPropagation(),$a()||He(Mn))return o()(".media-modal-close").trigger("click"),void Ga({});var n=this.model.attributes.url;if(n){var r=e.currentTarget,a=r.innerHTML;r.disabled=!0,r.innerHTML=(0,s.__)("Generatingâ€¦","seo-by-rank-math");var i="true"===r.getAttribute("data-two-column");ro(n).then(function(e){t.model.set("alt",e),"classic"!==rankMath.currentEditor&&t.model.save();var n=i?"#attachment-details-two-column-alt-text":"#attachment-details-alt-text",o=document.querySelector(n);o&&(o.value=e),r.innerHTML=a}).catch(function(e){console.error(e),r.classList.add("failed"),r.innerHTML=(0,s.__)("Failed","seo-by-rank-math"),setTimeout(function(){r.classList.remove("failed"),r.innerHTML=a},3e3)}).finally(function(){r.disabled=!1})}}}])}();const mo=uo,po=function(e){var t=wp.data.select("rank-math-content-ai").getContentAiAttributes();return e||(e=(0,i.isEmpty)(t.instructions)?"":t.instructions),{document_title:"undefined"!=typeof rankMathEditor?rankMathEditor.assessor.dataCollector.getData().title:"",text:wn(),instructions:e,tone:(0,i.isEmpty)(t.tone)?rankMath.contentAI.tone:t.tone,focus_keyword:(0,i.isEmpty)(t.focus_keyword)?"":t.focus_keyword,length:(0,i.isEmpty)(t.length)?"medium":t.length,choices:1}};n.dn(po);const ho=function(){(0,$r.useShortcut)("rank-math-contentai-write",(0,u.useCallback)(function(){var e=hn(),t=(0,qe.createBlock)("rank-math/command");(0,i.isEmpty)(e.block)||fn(e.block)?(0,d.dispatch)("core/block-editor").insertBlock(t,e.position):(0,d.dispatch)("core/block-editor").replaceBlock(e.clientId,t),Pn("Write",po(),t.clientId)},[]));var e=(0,d.useSelect)(function(e){return e($r.store).getShortcutKeyCombination("rank-math-contentai-write")},[]);if(!(0,i.isNull)(e))return null;(0,(0,d.useDispatch)($r.store).registerShortcut)({name:"rank-math-contentai-write",category:"global",keyCombination:{modifier:"ctrl",character:"/"}})};n.dn(ho);var fo=function(e){o()(e.target).parent().attr("data-mce-selected",!1);var t=o()(e.target).parents("p"),n=document.createElement("p");n.textContent=(0,s.__)("Generatingâ€¦","seo-by-rank-math");var r=t.html();t.before(n),Ye("text_summarizer",{text:r,language:rankMath.contentAI.language,format:"paragraph",choices:1},function(e){n.textContent=e[0]})};const go=function(){if("classic"===rankMath.currentEditor){var e=[],t=function(){(0,i.isEmpty)(e)||(0,i.forEach)(e,function(e){return e.remove()})};(0,l.addAction)("rank_math_annotations_removed","rank-math",function(){return t()}),(0,l.addAction)("rank_math_data_changed","rank-math",function(e,n){"dirtyMetadata"===e&&(0,i.isEmpty)(n)&&t()}),(0,l.addAction)("rank_math_content_refresh","rank-math",function(){(0,i.isUndefined)(window.tinymce)||setTimeout(function(){var n=window.tinymce.get(window.wpActiveEditor);if(!(0,i.isNull)(n)){var r=n.annotator.getAll("rank-math-annotations");(0,i.isEmpty)(r)?t():(0,i.forEach)(r["rank-math-annotation"],function(t){var n=t.getElementsByClassName("rank-math-content-ai-tooltip");n.length||((n=document.createElement("button")).className="rank-math-content-ai-tooltip",n.textContent=(0,s.__)("Shorten with AI","seo-by-rank-math"),n.addEventListener("click",fo),e.push(n),t.appendChild(n))})}},1e3)})}};function bo(e,t){return{type:"RANK_MATH_APP_UI",key:e,value:t}}function yo(e){return yo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yo(e)}function vo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=yo(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=yo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==yo(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wo(e){if(!e)return bo("isAutoCompleterOpen",e);var t=(0,d.select)("core/block-editor").getSelectedBlock();(0,i.isNull)(t)||(0,(0,d.dispatch)(An.store).removeBlock)(t.clientId);return bo("isAutoCompleterOpen",e)}function ko(e,t){var n=(0,d.select)("rank-math-content-ai").getContentAiAttributes();return n[e]="language"!==e||t?t:rankMath.contentAI.language,bo("contentAiAttributes",n)}function Eo(e,t){var n=(0,d.select)("rank-math-content-ai").getData();return n[e]=t,bo("data",function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vo(Object(n),!0).forEach(function(t){_o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vo(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},n))}function Do(e){return bo("previousResults",e)}function Co(e){return Co="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Co(e)}function Ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function So(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ao(Object(n),!0).forEach(function(t){Oo(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ao(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Oo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Co(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Co(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.dn(go);var xo={isAutoCompleterOpen:!1,contentAiAttributes:{},data:rankMath.contentAI,previousResults:[]};function To(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:xo,t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?So(So({},e),{},Oo({},t.key,t.value)):e}function Po(e){return e.appUi.isAutoCompleterOpen}function No(e){return e.appUi.contentAiAttributes}function Io(e){return e.appUi.data}function jo(e){var t=e.appUi.data.score;return!t||(0,i.isEmpty)(Object.values(t))?0:(t=(0,i.map)(Object.values(t),i.toNumber),(0,i.round)((0,i.sum)(t)/t.length))}function Fo(e){return e.appUi.previousResults}(0,d.register)((0,d.createReduxStore)("rank-math-content-ai",{reducer:(0,d.combineReducers)(t),selectors:r,actions:e}));const Bo=wp.richText;const Mo=function(e){var t=e.width,n=void 0===t?40:t,r=rankMath.contentAI.isUserRegistered,a=rankMath.contentAI.plan,o=rankMath.contentAI.isMigrating;if(r&&a&&!o)return null;var i="width-"+n;return r&&a?o?wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{style:{textAlign:"center"},className:"rank-math-cta-box less-padding top-20 "+i},wp.element.createElement("h3",null,(0,s.__)("Server Maintenance Underway","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("We are working on improving your Content AI experience. Please wait for 5 minutes and then refresh to start using the optimized Content AI. If you see this for more than 5 minutes, please ","seo-by-rank-math"),wp.element.createElement("a",{href:"https://rankmath.com/support/",target:"_blank",rel:"noreferrer"},(0,s.__)("reach out to the support team.","seo-by-rank-math")),(0,s.__)(" We are sorry for the inconvenience.","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box less-padding top-20 "+i},wp.element.createElement("h3",null,(0,s.__)("â›”ï¸� Monthly Limit Reached!","seo-by-rank-math")),wp.element.createElement("p",null,(0,s.__)("You've reached the monthly limit for this feature. To continue enjoying seamless content creation, simply click the button below to upgrade your plan and get more usage.","seo-by-rank-math")),wp.element.createElement(c.Button,{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Credits+Button&utm_campaign=WP",className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","seo-by-rank-math")))):wp.element.createElement("div",{id:"rank-math-pro-cta",className:"center rank-math-content-ai-warning-wrapper"},wp.element.createElement("div",{className:"rank-math-cta-box blue-ticks top-20 less-padding "+i},wp.element.createElement("h3",null,(0,s.__)("ðŸš€ Supercharge Your Content With AI","seo-by-rank-math")),wp.element.createElement("p",null,!r&&(0,s.__)("Start using Content AI by connecting your RankMath.com Account","seo-by-rank-math"),r&&!a&&(0,s.__)("To access this Content AI feature, you need to have an active subscription plan.","seo-by-rank-math")),function(e){return 40===e?wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("1-Click SEO Content","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click SEO Meta","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("40+ Specialized AI Tools","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("1-Click Competitor Research","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("125+ Pre-Built Prompts","seo-by-rank-math"))):wp.element.createElement("ul",null,wp.element.createElement("li",null,(0,s.__)("Gain access to 40+ advanced AI tools, empowering your content strategy.","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Experience the revolutionary AI-powered Content Editor for unparalleled efficiency.","seo-by-rank-math")),wp.element.createElement("li",null,(0,s.__)("Engage with RankBot, your personal AI Chat Assistant, for real-time assistance.","seo-by-rank-math")))}(n),!r&&wp.element.createElement(c.Button,{href:rankMath.contentAI.connectSiteUrl,className:"button button-primary is-green"},(0,s.__)("Connect Now","seo-by-rank-math")),r&&!a&&wp.element.createElement(c.Button,{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Plan+Button&utm_campaign=WP",className:"button button-primary is-green",target:"_blank"},(0,s.__)("Learn More","seo-by-rank-math"))))};n.dn(Mo);var Ro=(0,s.__)("Generatingâ€¦","seo-by-rank-math");const Lo=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if($a()){var a=(0,i.find)(Kn(),["endpoint",e]);return(0,i.isUndefined)(a)&&((a=(0,i.find)(Kn(),["endpoint","Blog_Post_Idea"])).title=(0,i.startCase)(e)),(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&o()("#wpwrap").append('<div id="rank-math-content-ai-modal-wrapper"></div>'),void setTimeout(function(){(0,u.createRoot)(document.getElementById("rank-math-content-ai-modal-wrapper")).render(wp.element.createElement(c.Modal,{className:"rank-math-contentai-modal rank-math-modal rank-math-error-modal",onRequestClose:function(){o()(".components-modal__screen-overlay").remove(),document.getElementById("rank-math-content-ai-modal-wrapper").remove()},shouldCloseOnClickOutside:!0},wp.element.createElement(Mo,{width:100})))},100)}var s=(0,qe.createBlock)("rank-math/command",{content:Ro,className:"rank-math-content-ai-command"}),l=(0,d.select)("core/block-editor").getBlocks().map(function(e){return e.clientId===n.clientId}).indexOf(!0);(0,d.dispatch)("core/block-editor").insertBlocks(s,l+1),Pn(e,t,s.clientId,n.clientId,r)};n.dn(Lo);const qo=(0,b.createHigherOrderComponent)(function(e){return function(t){if(t&&!(0,i.includes)(["core/paragraph","core/heading"],t.name))return wp.element.createElement(e,t);var n=fn(t);if((0,i.isEmpty)(n))return wp.element.createElement(e,t);var r=wp.data.select("rank-math-content-ai").getData().language,a=[{title:"ðŸ’»  "+(0,s.__)("Run as Command","seo-by-rank-math"),onClick:function(){return Lo("ai_command",{command:n,language:r,choices:1},t)}},{title:"ðŸ“–  "+(0,s.__)("Write More","seo-by-rank-math"),onClick:function(){return Lo("continue_writing",{sentence:wn(),choices:1},t)}},{title:"ðŸ“�  "+(0,s.__)("Improve","seo-by-rank-math"),onClick:function(){return Lo("paragraph_rewriter",{original_paragraph:n,language:r,choices:1},t)}}];return(0,i.isNull)(t)||"core/paragraph"!==t.name||a.push({title:"ðŸ“™  "+(0,s.__)("Summarize","seo-by-rank-math"),onClick:function(){return Lo("text_summarizer",{text:n,language:r,choices:1},t)}},{title:"ðŸ’­  "+(0,s.__)("Write Analogy","seo-by-rank-math"),onClick:function(){return Lo("analogy",{text:n,language:r,choices:1},t)}}),a.push({title:"âœ¨  "+(0,s.__)("Fix Grammar","seo-by-rank-math"),onClick:function(){return Lo("fix_grammar",{text:n,choices:1},t)}}),wp.element.createElement(React.Fragment,null,wp.element.createElement(e,t),wp.element.createElement(An.BlockControls,null,wp.element.createElement(c.ToolbarGroup,null,wp.element.createElement(c.ToolbarDropdownMenu,{icon:"rm-icon rm-icon-content-ai",label:(0,s.__)("Content AI Commands","seo-by-rank-math"),controls:(0,l.applyFilters)("rank_math_content_ai_toolbar_controls",a)}))))}});function zo(e){return function(e){if(Array.isArray(e))return Ho(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ho(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ho(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ho(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var Uo=function(e){return{name:"content-ai-tools",className:"content-ai-autocompleters",triggerPrefix:e,isDebounced:!0,allowContext:function(e,t){return!(/\S/.test(e)||/\S/.test(t))},options:function(){return Kn()},getOptionKeywords:function(e){var t=e.endpoint,n=e.title,r=e.searchTerms,a=n.split(/\s+/);return a.push(a.join(" ")),(0,i.isUndefined)(r)?[t].concat(zo(a)):r},getOptionLabel:function(e){return wp.element.createElement("span",null,wp.element.createElement("i",{className:"ai-icon "+e.icon})," ",e.title)},getOptionCompletion:function(e){if(!e.endpoint)return!1;(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&o()("#wpwrap").append('<div id="rank-math-content-ai-modal-wrapper"></div>'),wp.data.dispatch("rank-math-content-ai").isAutoCompleterOpen(!0),setTimeout(function(){(0,u.createRoot)(document.getElementById("rank-math-content-ai-modal-wrapper")).render(wp.element.createElement(wr,{tool:e}))},100)}}},Vo=function(){var e=(0,i.isUndefined)((0,d.select)("rank-math"))?[]:(0,d.select)("rank-math").getHighlightedParagraphs();if((0,i.isEmpty)(e))return"";var t=(0,d.select)("core/block-editor").getSelectedBlock();return(0,i.isEmpty)(t)||!(0,i.includes)(e,t.clientId)?(o()(".block-editor-block-popover").show(),""):(o()(".block-editor-block-popover").hide(),wp.element.createElement(c.Popover,{placement:"top-start",focusOnMount:"firstElement",key:"rank-math-popover",expandOnMobile:!0,noArrow:!1,anchor:document.getElementById("block-"+t.clientId)},wp.element.createElement(c.Button,{variant:"primary",onClick:function(){var e=fn(t);Lo("text_summarizer",{text:e,language:wp.data.select("rank-math-content-ai").getData().language,format:"paragraph",choices:1},t,!0)}},(0,s.__)("Shorten with AI","seo-by-rank-math"))))};const Wo=function(){(0,Bo.registerFormatType)("rank-math/content-ai",{title:(0,s.__)("Content AI","seo-by-rank-math"),tagName:"p",className:null,edit:Vo}),(0,l.addFilter)("editor.BlockEdit","rank-math",qo),$a()||((0,l.addFilter)("editor.Autocomplete.completers","rank-math/content-ai/tools",function(e,t){return"core/paragraph"===t||"rank-math/command"===t?[].concat(zo(e),[Uo("//")]):e}),(0,l.addFilter)("editor.Autocomplete.completers","rank-math/content-ai/tools2",function(e,t){return"core/paragraph"===t||"rank-math/command"===t?[].concat(zo(e),[Uo("// ")]):e}))};function $o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Go(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Go(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Go(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(Wo);const Ko=(0,b.createHigherOrderComponent)(function(e){return function(t){if("core/image"!==t.name||(0,i.isEmpty)(t.attributes.url))return wp.element.createElement(e,t);var n=$o((0,u.useState)(!1),2),r=n[0],a=n[1],o=$o((0,u.useState)(""),2),l=o[0],m=o[1],d=$o((0,u.useState)(""),2),p=d[0],h=d[1],f=t.attributes,g=t.setAttributes,b=f.url,y=f.alt;l&&(g({alt:l}),m(""),h("error"),setTimeout(function(){g({alt:y}),a(!1),h("")},2e3));return wp.element.createElement(u.Fragment,null,wp.element.createElement(e,t),wp.element.createElement(An.InspectorControls,null,wp.element.createElement(c.Button,{variant:"tertiary",size:"compact",className:p+" rank-math-generate-alt",onClick:function(){$a()||He(Mn)?Ga({}):b?(a(!0),m(""),ro(b).then(function(e){e?(g({alt:e}),a(!1)):m((0,s.__)("Failed to generate alt text.","seo-by-rank-math"))}).catch(function(e){m(e)})):m((0,s.__)("Image URL is missing.","seo-by-rank-math"))},disabled:r},p&&(0,s.__)("Failed","seo-by-rank-math"),!p&&r&&(0,s.__)("Generatingâ€¦","seo-by-rank-math"),!p&&!r&&wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,s.__)("Generate Alt","seo-by-rank-math")),!r&&wp.element.createElement("span",{className:"rank-math-tooltip"},wp.element.createElement("em",{className:"dashicons-before dashicons-editor-help"}),wp.element.createElement("span",null,(0,s.__)("50 Content AI credits will be used to generate the Alt","seo-by-rank-math"))))))}},"withInspectorControl"),Jo=function(){var e=(0,d.select)("rank-math-content-ai").getData();(0,l.addFilter)("rankMath.analytics.contentAI","rank-math",function(){return function(){var t=N()("button-secondary rank-math-content-ai",{"is-new":!e.viewed});return wp.element.createElement(c.Button,{className:t,onClick:function(){o()(".rank-math-toolbar-score.content-ai-score").length?o()(".rank-math-toolbar-score.content-ai-score").parent().trigger("click"):o()(".rank-math-content-ai-tab").trigger("click")}},wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,s.__)("Content AI","seo-by-rank-math"))}}),(0,l.addFilter)("rank_math_before_serp_devices","rank-math",function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"seo_meta",r=N()("rank-math-content-ai-meta-button button button-small button-primary",{"is-new":!e.viewed,"field-group":"seo_meta"!==n});return wp.element.createElement(c.Button,{className:r,disabled:$a(),onClick:function(){(0,i.isNull)(document.getElementById("rank-math-content-ai-modal-wrapper"))&&o()("body").append('<div id="rank-math-content-ai-modal-wrapper"></div>');var e=(0,d.select)("rank-math"),t=(0,i.find)(Kn(),["endpoint",n]),r=t.params;r.topic.default=e.getSerpTitle(),r.post_brief.default=e.getSerpDescription(),r.focus_keyword.default=e.getKeywords().split(","),t.output.default=1,t.params=r,(0,u.createRoot)(document.getElementById("rank-math-content-ai-modal-wrapper")).render(wp.element.createElement(wr,{tool:t,callApi:!0}))}},wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),(0,s.__)("Generate With AI","seo-by-rank-math"))}),(h()||e.isContentAIPage)&&((0,l.addFilter)("rank_math_block_faq_actions","rank-math",function(e,t,n){return wp.element.createElement(React.Fragment,null,e,wp.element.createElement(c.Button,{icon:"rm-icon rm-icon-content-ai",className:"rank-math-faq-content-ai",label:(0,s.__)("Generate Answer with Content AI","seo-by-rank-math"),disabled:$a(),showTooltip:!0,onClick:function(){n.setQuestionProp("content",(0,s.__)("Generatingâ€¦","seo-by-rank-math")),Ye("ai_command",{command:t.title,choices:1},function(e){var t="";setTimeout(function(){var r=e[0].replaceAll(/(?:\r\n|\r|\n)/g,"<br>").split(" "),a=0,o=!1,i=setInterval(function(){t?t+="<br>"===r[a]||o?r[a]:" "+r[a]:t=r[a],o="<br>"===r[a],n.setQuestionProp("content",t),++a>=r.length&&clearInterval(i)},50)},100)})}}))}),Wo(),(0,l.addFilter)("editor.BlockEdit","rank-math/add-alt-generator",Ko))};n.dn(Jo);const Yo=function(){var e=null,t=null;(0,d.subscribe)(function(){var n=(0,d.select)(An.store).getSelectedBlock(),r=n?n.clientId:null,a=n?fn(n):null;r===e&&a===t||n&&"core/paragraph"===n.name&&function(e){var t=fn(e);if(t&&(0,i.startsWith)(t.trim(),"//")){var n=(0,qe.createBlock)("rank-math/command",{content:"",className:"rank-math-content-ai-command"});(0,d.dispatch)(An.store).replaceBlock(e.clientId,n)}}(n),e=r,t=a})};n.dn(Yo);const Zo=window.rankMathComponents;function Qo(e){return Qo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qo(e)}function Xo(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ei(r.key),r)}}function ei(e){var t=function(e,t){if("object"!=Qo(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Qo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Qo(t)?t:t+""}var ti=function(){(0,d.useSelect)(function(){return g()||!(0,i.isUndefined)((0,d.select)("core/editor"))&&(0,i.endsWith)((0,d.select)("core/editor").getCurrentTemplateId(),"//page")});return f(),wp.element.createElement(u.Fragment,null,wp.element.createElement(p.PluginSidebarMoreMenuItem,{target:"seo-by-rank-math-content-ai-sidebar",icon:wp.element.createElement(_a,null)},(0,s.__)("Content AI","seo-by-rank-math")),wp.element.createElement(p.PluginSidebar,{name:"seo-by-rank-math-content-ai-sidebar",title:"Content AI",className:"rank-math-sidebar-panel rank-math-sidebar-content-ai-panel"},wp.element.createElement(Wr,null)))},ni=function(){return function(e,t,n){return t&&Xo(e.prototype,t),n&&Xo(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}(function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.init(),this.events(),this.addPrePublishPanel(this.data),this.registerWriteShortcut(this.data),this.loadContentAIPage(this.data),this.changePlaceholder=this.changePlaceholder.bind(this),this.setup=this.setup.bind(this),(0,l.addAction)("rank_math_loaded","rank-math",this.setup),(0,l.addFilter)("blocks.registerBlockType","rank-math",this.changePlaceholder),(0,l.addFilter)("rankMath.checklists.FixWithAI","rank-math-pro",function(){return Qa})},[{key:"init",value:function(){Jo(),Yo(),go(),this.data=(0,d.select)("rank-math-content-ai").getData(),this.data.isContentAIPage||(new mo,new ba)}},{key:"setup",value:function(){this.addHeaderButton(),this.addSidebarTab();var e=document.getElementById("cmb2-metabox-rank_math_metabox_content_ai");e&&setTimeout(function(){(0,u.createRoot)(e).render((0,u.createElement)(Wr))},1e3)}},{key:"events",value:function(){if("classic"!==rankMath.currentEditor&&(o()(document).on("click",".rank-math-open-contentai",function(e){e.preventDefault();var t=(0,d.dispatch)("core/edit-post");return(0,i.isNull)(t)?(o()(".rank-math-content-ai-tab").trigger("click"),!1):(t.openGeneralSidebar("rank-math-content-ai/seo-by-rank-math-content-ai-sidebar"),!1)}),h()&&(0,i.includes)(window.location.search,"tab=content-ai"))){var e="rank-math-content-ai/seo-by-rank-math-content-ai-sidebar";(0,d.select)("core/edit-post").getActiveGeneralSidebarName()!==e&&(0,d.dispatch)("core/edit-post").openGeneralSidebar(e)}}},{key:"addSidebarTab",value:function(){(0,l.addFilter)("rank_math_sidebar_tabs","rank-math",function(e){return e.push({name:"contentAI",title:wp.element.createElement(u.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-content-ai"}),wp.element.createElement("span",null,(0,s.__)("Content AI","seo-by-rank-math"))),view:Wr,className:"rank-math-content-ai-tab hidden is-active"}),e})}},{key:"changePlaceholder",value:function(e,t){return"core/paragraph"!==t||(e.attributes.placeholder={type:"string",default:(0,s.__)("Type / to choose a block or // to use Content AI","seo-by-rank-math")}),e}},{key:"addHeaderButton",value:function(){h()&&(0,m.registerPlugin)("rank-math-content-ai",{icon:wp.element.createElement(_a,null),render:ti})}},{key:"addPrePublishPanel",value:function(e){h()&&(0,m.registerPlugin)("rank-math-content-ai-box",{render:function(){return!(!(0,i.isEmpty)(e.score)||!(0,i.isEmpty)(e.keyword))&&wp.element.createElement(p.PluginPrePublishPanel,{title:(0,s.__)("Content AI","seo-by-rank-math"),icon:"rm-icon rm-icon-content-ai",initialOpen:"true",className:"rank-math-content-ai-box"},wp.element.createElement("p",null,(0,s.__)("Improve your content with a personal Content AI.","seo-by-rank-math")),wp.element.createElement(c.Button,{className:"button-primary",onClick:function(){o()(".editor-post-publish-panel__header-cancel-button button").trigger("click"),o()(".rank-math-toolbar-score").parent().hasClass("is-pressed")||o()(".rank-math-toolbar-score").trigger("click"),setTimeout(function(){o()(".rank-math-content-ai-tab").trigger("click")},100)}},(0,s.__)("Improve Now","seo-by-rank-math")))}})}},{key:"registerWriteShortcut",value:function(e){e.registerWriteShortcut&&(h()||e.isContentAIPage)&&(0,m.registerPlugin)("rank-math-content-ai-write-shortcut",{render:function(){return wp.element.createElement(ho,null)}})}},{key:"loadContentAIPage",value:function(e){var t=document.getElementById("rank-math-content-ai-page");if(!(0,i.isNull)(t)){(0,u.createRoot)(t).render(wp.element.createElement(React.Fragment,null,wp.element.createElement(Zo.DashboardHeader,{page:"content_ai"}),wp.element.createElement("div",{className:"wrap rank-math-wrap"},wp.element.createElement(da,e)))),o()("#wp-admin-bar-rank-math-content-ai-page").on("click","a",function(){setTimeout(function(){var e=window.location.hash.replace("#","");o()("#tab-panel-0-"+e).length&&o()("#tab-panel-0-"+e).trigger("click")},100)});var n=window.location,r=n.pathname;(0,d.subscribe)(function(){var e=(0,d.select)("core/editor").isAutosavingPost(),t=(0,d.select)("core/block-editor").getBlocks();1===t.length&&"core/paragraph"===t[0].name&&(0,i.isEmpty)(fn(t[0]))&&"rank-math-command"!==t[0].attributes.className&&(0,d.dispatch)("core/block-editor").updateBlockAttributes(t[0].clientId,{className:"rank-math-command"}),e&&(setTimeout(function(){(0,d.dispatch)("core/editor").savePost()},500),!(0,i.isNull)(window.history.state)&&window.history.state.id&&window.history.replaceState("","Content AI",n.origin+r+"?page=rank-math-content-ai-page#content-editor"))})}}}])}();new ni}()}();PK     ¥ŠU]x¥dÝY•  Y•  5  includes/modules/content-ai/assets/css/content-ai.cssnu „[µü¤        :root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#wpwrap button.rank-math-content-ai,#elementor-editor-wrapper button.rank-math-content-ai,#rank-math-rm-app-root button.rank-math-content-ai{font-size:12px;line-height:1;position:absolute;top:15px;right:42px;display:-webkit-box;display:-ms-flexbox;display:flex;min-height:22px;padding:0 5px}#wpwrap button.rank-math-content-ai.is-new,#elementor-editor-wrapper button.rank-math-content-ai.is-new,#rank-math-rm-app-root button.rank-math-content-ai.is-new{border-color:#ed5e5e;-webkit-box-shadow:0 0 2px #ed5e5e;box-shadow:0 0 2px #ed5e5e}#wpwrap button.rank-math-content-ai.is-new:before,#elementor-editor-wrapper button.rank-math-content-ai.is-new:before,#rank-math-rm-app-root button.rank-math-content-ai.is-new:before{font-size:9px;font-weight:600;line-height:1;position:absolute;top:-23px;right:7px;padding:3px 4px;content:"New!";-webkit-animation:bounce .8s infinite alternate;animation:bounce .8s infinite alternate;color:#fff;border-radius:2px 2px 0 2px;background:#ed5e5e}#wpwrap button.rank-math-content-ai.is-new:after,#elementor-editor-wrapper button.rank-math-content-ai.is-new:after,#rank-math-rm-app-root button.rank-math-content-ai.is-new:after{position:absolute;top:-9px;right:7px;width:0;height:0;content:"";-webkit-animation:bounce .8s infinite alternate;animation:bounce .8s infinite alternate;border:0 solid rgba(0,0,0,0);border-top:4px solid #ed5e5e;border-right-width:0;border-left-width:11px}#wpwrap button.rank-math-content-ai i,#elementor-editor-wrapper button.rank-math-content-ai i,#rank-math-rm-app-root button.rank-math-content-ai i{width:13px;font-size:13px;line-height:14px;margin-right:5px;background:linear-gradient(-135deg, #ff4492, #434e8f);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}.editor-post-publish-panel__prepublish .rank-math-content-ai-box{background-color:#fff8e5}.editor-post-publish-panel__prepublish .rank-math-content-ai-box .components-panel__body-title button .dashicon{width:17px;height:17px;font-size:12px;background:linear-gradient(-135deg, #ff4492, #434e8f);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}.editor-post-publish-panel__prepublish .rank-math-content-ai-box .components-panel__body-title button .dashicon:before{vertical-align:-2px}.editor-post-publish-panel__prepublish .rank-math-content-ai-box p{margin-top:4px}.editor-post-publish-panel__prepublish .rank-math-content-ai-box p:before{content:"ï�ˆ";font-family:"dashicons";color:#e59901;font-size:2rem;opacity:.7;float:left;margin-right:10px;line-height:1}.editor-post-publish-panel__prepublish .rank-math-content-ai-box>button{margin-left:42px}@-webkit-keyframes loader{0%{-webkit-transform:translate3d(0, 50px, 0);transform:translate3d(0, 50px, 0);opacity:0}40%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}100%{-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0);opacity:0}}@keyframes loader{0%{-webkit-transform:translate3d(0, 50px, 0);transform:translate3d(0, 50px, 0);opacity:0}40%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}100%{-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0);opacity:0}}@-webkit-keyframes loader2{0%{-webkit-transform:translate3d(0, 50px, 0);transform:translate3d(0, 50px, 0);opacity:0}40%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}100%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}}@keyframes loader2{0%{-webkit-transform:translate3d(0, 50px, 0);transform:translate3d(0, 50px, 0);opacity:0}40%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}100%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);opacity:1}}#wpwrap div.rank-math-ca-top-section,#elementor-editor-wrapper div.rank-math-ca-top-section,#rank-math-rm-app-root div.rank-math-ca-top-section{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px 16px;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#wpwrap div.rank-math-ca-top-section button,#elementor-editor-wrapper div.rank-math-ca-top-section button,#rank-math-rm-app-root div.rank-math-ca-top-section button{height:30px;padding:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;color:#069de3}#wpwrap div.rank-math-ca-top-section button i,#elementor-editor-wrapper div.rank-math-ca-top-section button i,#rank-math-rm-app-root div.rank-math-ca-top-section button i{font-size:12px;display:-webkit-box;display:-ms-flexbox;display:flex;width:auto;margin-right:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#wpwrap div.rank-math-ca-top-section .components-select-control,#elementor-editor-wrapper div.rank-math-ca-top-section .components-select-control,#rank-math-rm-app-root div.rank-math-ca-top-section .components-select-control{border-radius:4px}#wpwrap div.rank-math-ca-top-section .components-select-control select,#elementor-editor-wrapper div.rank-math-ca-top-section .components-select-control select,#rank-math-rm-app-root div.rank-math-ca-top-section .components-select-control select{max-width:136px;height:30px;padding-left:8px;color:#7f868d}#wpwrap div.rank-math-ca-top-section .components-select-control .components-input-control__backdrop,#elementor-editor-wrapper div.rank-math-ca-top-section .components-select-control .components-input-control__backdrop,#rank-math-rm-app-root div.rank-math-ca-top-section .components-select-control .components-input-control__backdrop{border-color:#b5bfc9}#wpwrap div.rank-math-ca-top-section .components-base-control__field,#elementor-editor-wrapper div.rank-math-ca-top-section .components-base-control__field,#rank-math-rm-app-root div.rank-math-ca-top-section .components-base-control__field{margin-bottom:0}button.rank-math-ca-force-update{position:absolute;z-index:0;right:1px;bottom:38px;display:block;width:34px;height:34px;padding:0;-webkit-transform:scaleX(-1);transform:scaleX(-1);text-align:center;color:#606060;background:#fff}button.rank-math-ca-force-update i{font-size:1rem;line-height:20px}button.rank-math-ca-force-update.left span{-webkit-transform:scaleX(-1) translate3d(10%, 0, 0);transform:scaleX(-1) translate3d(10%, 0, 0)}div.rank-math-ca-keywords-wrapper{padding:10px 16px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;background-color:hsl(210,15.625%,97.4509803922%)}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper{position:relative;color:#606060}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper label{font-weight:600;margin-bottom:35px}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper .components-base-control__help{color:inherit}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper .help-text{position:absolute;top:23px}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper input{font-size:1rem;font-weight:600;height:36px;background:#fff}div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper .components-base-control__help{margin-bottom:0}div.rank-math-ca-keywords-wrapper button:not(.rank-math-ca-force-update){margin-top:7px;padding:10px 22px}div.rank-math-ca-keywords-wrapper button:not(.rank-math-ca-force-update)[disabled]{opacity:.5 !important}#rank-math-rm-app-root button.rank-math-ca-force-update{bottom:27px}.rank-math-ca-score{position:relative;padding:20px 18px}.rank-math-ca-score .score-wrapper{position:relative;overflow:hidden;width:100%;height:10px;border-radius:10px;background:-webkit-gradient(linear, left top, right top, from(#e93f30), color-stop(50%, #ffbe5f), to(#58bb58));background:linear-gradient(90deg, #e93f30 0%, #ffbe5f 50%, #58bb58 100%)}.rank-math-ca-score .score-dot{position:absolute;top:-2px;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;margin-left:-14px;-webkit-transition:1s left linear;transition:1s left linear;border:2px solid #fff;border-radius:50%;background:rgba(0,0,0,0)}.rank-math-ca-score .score-dot:before{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;width:10px;height:10px;content:"";border:1px solid rgba(0,0,0,.1);border-radius:10px}.rank-math-ca-score .score-text{font-size:1rem;font-weight:500;line-height:1;margin-bottom:10px;text-align:center}.rank-math-ca-score .score-text span{font-size:.75rem;font-weight:normal}.rank-math-ca-recommendations{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.rank-math-ca-recommendations>div{line-height:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;padding:25px 16px 12px;border-bottom:1px solid #ddd;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-preferred-size:50%;flex-basis:50%}.rank-math-ca-recommendations>div h4{font-size:12px;font-weight:500;margin:0 0 10px;text-transform:uppercase}.rank-math-ca-recommendations>div strong{font-size:22px;line-height:1;position:relative;margin-bottom:10px;color:#242628}.rank-math-ca-recommendations>div strong:before{position:absolute;top:8px;left:-14px;width:8px;height:8px;content:"";border-radius:4px;background:#b5bfc9}.rank-math-ca-recommendations>div.good-fk strong:before{background:#52a652}.rank-math-ca-recommendations>div.ok-fk strong:before{background:#ff9800}.rank-math-ca-recommendations>div.bad-fk strong:before{background:#f0776f}.rank-math-ca-recommendations>div.bad-fk.dark strong:before{background:#e93f30}.rank-math-ca-recommendations>div span.desc{font-size:13px;margin-bottom:10px;color:#606060}.rank-math-ca-recommendations>div.has-children{cursor:pointer}.rank-math-ca-recommendations>div.has-children:after{font-family:"Dashicons";font-size:12px;content:"ï�‡";opacity:.6}.rank-math-ca-recommendations>div.has-children:hover:after{color:#069de3}.rank-math-ca-recommendations>div.has-children .submenu{position:absolute;right:16px;left:16px;z-index:9;display:none;margin-top:78px;padding:10px;border-radius:5px;background-color:hsl(210,15.625%,97.4509803922%);-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-ca-recommendations>div.has-children .submenu div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-ca-recommendations>div.has-children .submenu div h4{font-size:13px;margin-right:5px;margin-bottom:0;text-transform:capitalize}.rank-math-ca-recommendations>div.has-children .submenu div span{font-size:12px;line-height:1;padding:4px 8px;color:#f0776f;border-radius:20px;background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-ca-recommendations>div.has-children .submenu div.ok-fk span{color:#e59901;background:rgb(255,235.58125,207.2)}.rank-math-ca-recommendations>div.has-children .submenu div.good-fk span{color:#52a652;background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-ca-recommendations>div.has-children .submenu div.dark span{color:hsl(3.7209302326,81.1320754717%,98.8235294118%);background:hsl(3.9130434783,77.9661016949%,66.862745098%)}.rank-math-ca-recommendations>div.has-children.show{padding-bottom:40px}.rank-math-ca-recommendations>div.has-children.show:after{font-size:30px;margin-top:-19px;content:"ï…‚";color:hsl(210,15.625%,97.4509803922%)}.rank-math-ca-recommendations>div.has-children.show .submenu{display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-ca-recommendations>div.has-children.show .submenu:before{position:absolute;top:-8px;right:20%;width:0;height:0;content:"";border-width:0 6px 8px 6px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) hsl(210,15.625%,97.4509803922%) rgba(0,0,0,0)}.rank-math-ca-recommendations>div.has-children.show.headingCount{padding-bottom:68px}.rank-math-ca-recommendations>div.has-children.show.headingCount .submenu{margin-bottom:5px;padding-bottom:0;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.rank-math-ca-recommendations>div.has-children.show.headingCount .submenu:before{right:auto;left:20%}.rank-math-ca-recommendations>div.has-children.show.headingCount .submenu div{margin-bottom:10px;-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%}div.rank-math-contentai-tab-content-keywords .components-panel__body{padding:20px 16px 16px}div.rank-math-contentai-tab-content-keywords .components-flex{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}div.rank-math-contentai-tab-content-keywords .components-flex label{padding-bottom:0;font-weight:600;font-size:14px}div.rank-math-contentai-tab-content-keywords .components-flex .components-form-token-field__help{margin-top:10px}div.rank-math-contentai-tab-content-keywords .components-flex .components-input-control__container{max-width:135px;border-radius:4px}div.rank-math-contentai-tab-content-keywords .components-flex .components-input-control__container select{height:30px;font-size:13px;color:#7f868d}div.rank-math-contentai-tab-content-keywords .components-flex .components-input-control__container .components-input-control__backdrop{border-color:#b5bfc9}div.rank-math-contentai-tab-content-keywords ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:20px -3px 0}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip{display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:hsl(3.9130434783,77.9661016949%,94.862745098%);border-radius:50px;margin-right:3px;margin-left:2px;margin-bottom:7px;padding:5px 8px 5px 10px;height:auto;min-height:32px;-webkit-box-sizing:border-box;box-sizing:border-box}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.show{display:-webkit-box;display:-ms-flexbox;display:flex}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:130px}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip strong{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:rgb(235.1886792453,75.3773584906,64.8113207547);font-size:13px;font-weight:500;line-height:1.4;color:#ed5e5e}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip strong span{font-size:11px;line-height:22px;margin-left:5px;padding:0 8px;background:hsl(3.9130434783,77.9661016949%,98.362745098%);border-radius:11px;text-align:center;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.ok-fk{background:rgb(255,235.58125,207.2)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.ok-fk strong{color:hsl(40,99.1304347826%,35.0980392157%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.ok-fk strong span{background-color:rgb(255,252.15625,248)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.good-fk{background:hsl(120,42.5531914894%,91.137254902%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.good-fk strong{color:hsl(120,33.8709677419%,38.6274509804%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.good-fk strong span{background-color:hsl(120,42.5531914894%,98.137254902%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.dark{background:hsl(3.9130434783,77.9661016949%,66.862745098%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.dark strong{color:hsl(3.7209302326,81.1320754717%,98.8235294118%)}div.rank-math-contentai-tab-content-keywords ul li.rank-math-tooltip.dark strong span{color:rgb(231.886440678,78.9813559322,68.313559322);background:hsl(3.9130434783,77.9661016949%,90.862745098%)}div.rank-math-contentai-tab-content-keywords .rank-math-related-keywords{margin-top:1.5rem}div.rank-math-contentai-tab-content-keywords .rank-math-related-keywords ul li{background:hsl(210,15.625%,97.4509803922%)}div.rank-math-contentai-tab-content-keywords .rank-math-related-keywords ul li strong{color:#242628}div.rank-math-contentai-tab-content-questions .rank-math-section-heading h2{font-weight:600}div.rank-math-contentai-tab-content-questions .rank-math-section-heading button{width:32px;height:32px;padding:0 !important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}div.rank-math-contentai-tab-content-questions .rank-math-section-heading button:hover{color:#069de3}div.rank-math-contentai-tab-content-questions .rank-math-section-heading button:hover:after{display:none}div.rank-math-contentai-tab-content-questions .rank-math-section-heading button i{font-size:15px;height:auto}div.rank-math-contentai-tab-content-questions .rank-math-section-heading button i.rm-icon-tick{font-size:10px;font-weight:bold;vertical-align:0;color:#52a652}div.rank-math-contentai-tab-content-questions .components-form-token-field__help{display:block;margin-top:-10px;margin-bottom:10px}div.rank-math-contentai-tab-content-questions h3.rank-math-tooltip{font-size:13px;font-weight:500;line-height:1.2;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 7px;padding:12px;border-radius:5px;background-color:hsl(210,15.625%,97.4509803922%);color:#242628;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:auto}div.rank-math-contentai-tab-content-links div.rank-math-section-heading{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}div.rank-math-contentai-tab-content-links div.rank-math-section-heading h2{font-size:15px;width:100%;margin-bottom:10px !important;padding:0}div.rank-math-contentai-tab-content-links div.rank-math-section-heading p{margin-bottom:0}div.rank-math-contentai-tab-content-links ul{margin-left:15px;list-style:disclosure-closed;word-wrap:break-word}div.rank-math-contentai-tab-content-links ul li{font-weight:normal;list-style:disclosure-closed;line-height:1.4;margin-bottom:7px}div.rank-math-contentai-tab-content-links ul li a{text-decoration:none;color:inherit;border-bottom:1px dotted}div.rank-math-contentai-tab-content-links ul li a:hover,div.rank-math-contentai-tab-content-links ul li a:focus{color:#069de3}#rank_math_metabox_content_ai .rank-math-ca-credits{top:-28px;right:90px}#rank_math_metabox_content_ai .rank-math-ca-credits>span{display:none}#rank_math_metabox_content_ai .rank-math-ca-credits .update-credits.rank-math-tooltip span{left:-50px;height:auto}#rank_math_metabox_content_ai .rank-math-ca-credits .update-credits.rank-math-tooltip span:after{left:75%}#rank_math_metabox_content_ai .inside{margin:0;padding:0}#rank_math_metabox_content_ai .inside .error.inline{display:none}#rank_math_metabox_content_ai .inside .rank-math-ca-top-section .components-button{visibility:hidden}#rank_math_metabox_content_ai .inside .components-panel__body{border-top:none}#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-ca-top-section,#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-ca-keywords-wrapper,#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-content-ai-data h3.rank-math-ca-section-title,#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-ca-score,#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-ca-recommendations>div,#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-contentai-tabs .components-tab-panel__tabs,#rank_math_metabox_content_ai .inside .components-panel__body .components-panel__body{padding-right:12px;padding-left:12px}#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-tab-content-ai-tools{overflow:auto;max-height:500px}#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-contentai-tabs .components-tab-panel__tab-content{overflow-y:scroll;max-height:500px}#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-contentai-tabs .rank-math-section-heading h2{margin:0 !important;padding:0}#rank_math_metabox_content_ai .inside .components-panel__body .rank-math-ca-force-update{top:56.5px}.block-editor__container #rank_math_metabox_content_ai{display:none !important}body.rtl #wpwrap button.rank-math-content-ai,body.rtl #rank-math-rm-app-root button.rank-math-content-ai,body.rtl #elementor-editor-wrapper button.rank-math-content-ai{left:42px;right:auto}body.rtl #wpwrap button.rank-math-content-ai i,body.rtl #rank-math-rm-app-root button.rank-math-content-ai i,body.rtl #elementor-editor-wrapper button.rank-math-content-ai i{margin-right:0;margin-left:5px}body.rtl #wpwrap div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper button.rank-math-ca-force-update,body.rtl #rank-math-rm-app-root div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper button.rank-math-ca-force-update,body.rtl #elementor-editor-wrapper div.rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper button.rank-math-ca-force-update{left:1px;right:auto}@-webkit-keyframes snackbar_loading{0%{left:-100%}100%{left:100%}}@keyframes snackbar_loading{0%{left:-100%}100%{left:100%}}.rank-math-ai-button.is-link{text-decoration:none}#rank-math-content-ai-snackbar{position:fixed;z-index:999999;bottom:25px;left:50px}#rank-math-content-ai-snackbar>div{-webkit-box-sizing:border-box;box-sizing:border-box;width:350px;min-height:150px;font-size:18px;position:relative;border-radius:6px;-webkit-box-shadow:0px 20px 40px 10px rgba(0,0,0,.2);box-shadow:0px 20px 40px 10px rgba(0,0,0,.2);background:#fff}#rank-math-content-ai-snackbar>div .snackbar-loader{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:calc(150px - 2rem);padding-top:15px}#rank-math-content-ai-snackbar>div .snackbar-loader span{width:100%;height:16px;color:rgba(0,0,0,0);background-color:#eee;background-color:#f0f0f0;overflow:hidden;position:relative}#rank-math-content-ai-snackbar>div .snackbar-loader span:first-child{width:70%}#rank-math-content-ai-snackbar>div .snackbar-loader span:nth-child(2){width:80%;-webkit-animation-delay:.3s;animation-delay:.3s}#rank-math-content-ai-snackbar>div .snackbar-loader span:nth-child(3){width:90%;-webkit-animation-delay:.6s;animation-delay:.6s}#rank-math-content-ai-snackbar>div .snackbar-loader span:last-child{-webkit-animation-delay:.9s;animation-delay:.9s}#rank-math-content-ai-snackbar>div .snackbar-loader span:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:-webkit-gradient(linear, left top, right top, from(transparent), color-stop(rgba(255, 255, 255, 0.8)), to(transparent));background:linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.8), transparent);-webkit-animation:snackbar_loading 3s infinite;animation:snackbar_loading 3s infinite}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #e0e0e0}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header .main-title{margin:0;font-size:14px;font-weight:500;color:#1e1e1e}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header .main-title span{color:#9b9b9b}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header button{display:block;text-decoration:none}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header button.close-snackbar{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;-webkit-box-shadow:none;box-shadow:none;line-height:1}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header button.close-snackbar svg{width:20px;height:20px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header .snackbar-pagination{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header .snackbar-pagination button{font-size:14px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-header .snackbar-pagination span{font-size:14px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px;padding:16px 20px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .pagination-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .pagination-container h4{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;margin:0;font-size:13px;font-weight:500;color:#1e1e1e}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .desc{padding:8px 16px;margin:0;color:rgba(0,0,0,.88);background:rgba(232,166,35,.1);font-size:13px;line-height:19px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:13px;color:#1e1e1e}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;padding:5px;-webkit-box-shadow:none;box-shadow:none;line-height:1}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.previous{margin-right:4px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.next{margin-left:4px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small:hover{color:#017cba;background:rgba(1,124,186,.1)}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.next::after,#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.previous::after{display:inline-block;content:"";width:7px;height:7px;border-color:rgba(36,59,83,.3)}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.next::after{-webkit-transform:rotate(-45deg) translateX(-2px) translateY(-2px);transform:rotate(-45deg) translateX(-2px) translateY(-2px);border-bottom:1px solid;border-right:1px solid}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-pagination .components-button.is-small.previous::after{-webkit-transform:rotate(-45deg) translateX(2px) translateY(2px);transform:rotate(-45deg) translateX(2px) translateY(2px);border-top:1px solid;border-left:1px solid}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary{-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;padding-top:8px;padding-bottom:8px;-webkit-transition:.2s all ease-in-out;transition:.2s all ease-in-out}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.approve-content{color:#fff;background:#017cba;border-color:#017cba;-webkit-box-shadow:none;box-shadow:none}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.approve-content .rm-icon{font-size:16px}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.approve-content:hover{background:#006ba1}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.reject-content{color:#757575;-webkit-box-shadow:0 0 0 1px #c6c6c6;box-shadow:0 0 0 1px #c6c6c6}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.reject-content:hover{-webkit-box-shadow:0 0 0 1px #f24f65;box-shadow:0 0 0 1px #f24f65;color:#f24f65;background:-webkit-gradient(linear, left bottom, left top, from(rgba(246, 98, 118, 0.04)), to(rgba(246, 98, 118, 0.04))),#fff;background:linear-gradient(0deg, rgba(246, 98, 118, 0.04), rgba(246, 98, 118, 0.04)),#fff}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.reject-content:hover svg path{fill:#f24f65}#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.undo-content:hover,#rank-math-content-ai-snackbar>div .snackbar-content .snackbar-body .snackbar-actions .components-button.is-secondary.regenerate-content:hover{background:rgba(1,124,186,.08)}body.et_divi_theme #rank-math-content-ai-snackbar,body.elementor-editor-active #rank-math-content-ai-snackbar{left:unset;right:20px}div.rank-math-content-ai-wrapper .rank-math-ca-credits{position:absolute;top:15px;z-index:99;right:75px}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits{position:absolute;z-index:inherit;left:-22px;display:inline;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits i{font-size:11px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transform:scaleX(-1);transform:scaleX(-1);-webkit-box-align:center;-ms-flex-align:center;align-items:center}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits i:before{margin-bottom:2px;margin-left:1px}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits.loading i:before{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits.rank-math-tooltip span{top:100%;bottom:auto}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits.rank-math-tooltip span:after{top:-8px;-webkit-transform:rotate(180deg);transform:rotate(180deg);left:47%}div.rank-math-content-ai-wrapper .rank-math-ca-credits .update-credits.rank-math-tooltip:hover span{top:130%;bottom:auto;height:49px}div.rank-math-content-ai-wrapper .rank-math-tabs .components-tab-panel__tabs{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}div.rank-math-content-ai-wrapper .rank-math-tabs .components-tab-panel__tabs button{width:auto;padding:0 .5rem}div.rank-math-content-ai-wrapper .rank-math-tabs .components-tab-panel__tab-content{border-top:1px solid #dadfe4}div.rank-math-content-ai-wrapper.is-opened{padding:0 !important;background:#fff}div.rank-math-content-ai-wrapper .components-panel__body{padding:20px 16px 16px;border-top:0;position:relative}div.rank-math-content-ai-wrapper .rank-math-ca-warning{padding:25px 16px;text-align:center;border-top:1px solid #ddd;border-bottom:1px solid #ddd;background-color:#fff8e5}div.rank-math-content-ai-wrapper .rank-math-ca-warning h3{font-size:18px;margin-bottom:8px}div.rank-math-content-ai-wrapper .rank-math-ca-warning p{font-size:15px;margin-bottom:10px;color:#606060}div.rank-math-content-ai-wrapper .rank-math-ca-warning a{font-size:14px;height:32px}div.rank-math-content-ai-wrapper .rank-math-content-ai-data .loader-text{font-size:18px;position:absolute;z-index:-1;top:50px;right:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:25px;text-align:center}div.rank-math-content-ai-wrapper .rank-math-content-ai-data .loader-text span{line-height:1.3;position:absolute;top:100%;right:0;bottom:0;left:0;margin-top:50px;opacity:0}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading{position:relative;min-height:200px}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading:after{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;content:"";background-color:hsla(0,0%,100%,.85)}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text{z-index:99}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span{padding:16px;-webkit-animation-name:loader;animation-name:loader;-webkit-animation-duration:6s;animation-duration:6s;-webkit-animation-fill-mode:both;animation-fill-mode:both}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span:first-child{-webkit-animation-delay:0s;animation-delay:0s}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span:nth-child(2){-webkit-animation-delay:4s;animation-delay:4s}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span:nth-child(3){-webkit-animation-delay:8s;animation-delay:8s}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span:nth-child(4){-webkit-animation-delay:12s;animation-delay:12s}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading .loader-text span:nth-child(5){-webkit-animation-name:loader2;animation-name:loader2;-webkit-animation-delay:16s;animation-delay:16s}div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title{font-size:15px;font-weight:500;margin-bottom:0;padding:18px 16px;border-bottom:1px solid #ddd}div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title span{font-size:12px;line-height:18px;display:inline-block;margin:0 2px 0 5px;padding:0 5px;vertical-align:2px;text-transform:uppercase;color:#e91e63;border-radius:3px;background:rgba(233,30,99,.1)}div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3{text-transform:initial}div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.no-data{font-size:15px;line-height:1.5;margin-top:20px;padding:12px;text-transform:initial;background-color:rgba(0,0,0,0)}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;border-bottom:1px solid #ddd}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .rank-math-section-heading{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:15px}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .rank-math-section-heading h2{font-size:15px;font-weight:600;margin:0;padding:0}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs button:not(:disabled){font-size:14px;line-height:1;margin-bottom:-1px;padding:0 10px;-webkit-box-shadow:none;box-shadow:none}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs button:not(:disabled).is-active:before{bottom:0;border-bottom:2px solid #069de3}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs button:not(:disabled):focus{color:#069de3;-webkit-box-shadow:none;box-shadow:none}div.rank-math-content-ai-wrapper .rank-math-contentai-tabs button:not(:disabled) i{vertical-align:-5px}div.rank-math-content-ai-wrapper #rank-math-help-icon{font-size:13px;line-height:12px;display:inline-block;width:12px;height:12px;margin:0 5px 0 4px;text-align:center;color:#fff;border-radius:50%;background-color:#7f868d}div.rank-math-content-ai-wrapper #rank-math-help-icon:hover{background-color:#069de3}.rank-math-sidebar-content-ai-panel.components-panel{position:static}.rank-math-sidebar-content-ai-panel.components-panel .rank-math-content-ai-wrapper .rank-math-ca-top-section button{display:none}.rank-math-sidebar-content-ai-panel.components-panel .rank-math-content-ai-wrapper .rank-math-tabs{position:relative;z-index:0}.rank-math-sidebar-content-ai-panel.components-panel:hover .update-credits{display:inline !important}PK     ¥ŠU]úËŸP@Þ @Þ :  includes/modules/content-ai/assets/css/content-ai-page.cssnu „[µü¤        :root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:"dashicons";font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:"ï…•";text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:hsl(3.9130434783,77.9661016949%,71.862745098%);background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#f29c96 !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,65.9661016949%,68.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,62.9661016949%,64.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,69.9661016949%,88.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,72.9661016949%,84.862745098%)}.rank-math-focus-keyword .tagify__tag.ok-fk{color:rgb(255,158.921875,18.5);background:rgb(255,235.58125,207.2)}.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:rgb(255,235.58125,207.2) !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#ffbe5f !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:rgb(242.952,171.166,66.248)}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:rgb(238.41,162.026875,50.39)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:rgb(251.048,214.1215,160.152)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:hsl(35.625,95%,75.6274509804%)}.rank-math-focus-keyword .tagify__tag.good-fk{color:hsl(120,42.5531914894%,58.137254902%);background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(120,42.5531914894%,91.137254902%) !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#79c979 !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(120,30.5531914894%,55.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:hsl(120,27.5531914894%,51.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:hsl(120,37.5531914894%,78.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:hsl(120,37.5531914894%,71.137254902%)}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"ïŒµ"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{content:attr(data-placeholder);-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:1;-webkit-transform:none;transform:none;color:rgba(0,0,0,.25);color:var(--placeholder-color-focus);height:1em;line-height:1em;margin:auto 0;white-space:nowrap;pointer-events:none}.rank-math-focus-keyword .tagify__input:after{content:attr(data-suggest);display:inline-block;vertical-align:middle;position:absolute;min-width:calc(100% - 1.5em);text-overflow:ellipsis;overflow:hidden;white-space:pre;color:var(--tag-text-color);opacity:.3;pointer-events:none;max-width:100px}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px);transition:.2s ease-out;opacity:0;-webkit-transform:translateX(6px);transform:translateX(6px);min-width:0px;display:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.rank-math-focus-keyword .tagify.tagify--noTags.tagify--empty span{width:100%}.tagify__dropdown{position:absolute;z-index:99999999;background:#fff;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,.18);box-shadow:0 9px 18px 0 rgba(25,30,35,.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.prompt-examples .grid,.rank-math-tab-content-ai-tools .grid,.rank-math-prompt-modal .grid,#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.rank-math-generate-alt-button{padding:10px 9px 8px;margin-bottom:4px;border:1px solid #069de3;border-radius:2px;color:#069de3;background:#dcedf7;text-align:left;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-generate-alt-button:hover{background:#c5e1f2}.rank-math-generate-alt-button .rm-icon{font-size:17px;float:left;height:17px;margin-right:4px}.rank-math-generate-alt-button.failed{color:#fff;border-color:#ee6a5e;background:#ee6a5e;pointer-events:none}.edit-post-sidebar__panel div[role=tabpanel] div.css-0,.editor-sidebar__panel div[role=tabpanel] div.css-0{position:relative}.edit-post-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt,.editor-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt{position:absolute;top:40px;right:5px}.edit-post-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt.error,.editor-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt.error{color:#ee6a5e}.edit-post-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rm-icon,.editor-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rm-icon{margin-right:3px}.edit-post-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rank-math-tooltip span,.editor-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rank-math-tooltip span{-webkit-transform:none;transform:none;right:0;left:auto}.edit-post-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rank-math-tooltip span:after,.editor-sidebar__panel div[role=tabpanel] div.css-0 button.rank-math-generate-alt .rank-math-tooltip span:after{-webkit-transform:none;transform:none;right:3px;left:auto;top:98%}.rank-math-bulk-generate-button.button-primary{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-bulk-generate-button.button-primary i{margin-right:5px}@font-face{font-family:"Rank-Math";font-weight:normal;font-style:normal;font-display:block;src:url("../fonts/Rank-Math.ttf?v1.0.95") format("truetype"),url("../fonts/Rank-Math.woff?v1.0.95") format("woff"),url("../fonts/Rank-Math.svg?v1.0.95#Rank-Math") format("svg")}[class^=rm-icon-],[class*=" rm-icon-"]{font-family:"Rank-Math" !important;font-weight:normal;font-style:normal;font-variant:normal;line-height:1;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.rm-icon-content-ai:before{content:"î¤‰"}.rm-icon-bot:before{content:"î¨ "}.rm-icon-enter-key:before{content:"î¤ˆ"}.rm-icon-send:before{content:"î¤‡"}.rm-icon-seo-description:before{content:"î¨µ"}.rm-icon-search-console:before{content:"îµ±"}.rm-icon-adsense:before{content:"î®™"}.rm-icon-role-manager:before{content:"î¨º"}.rm-icon-software:before{content:"îªš"}.rm-icon-calendar:before{content:"î©ƒ"}.rm-icon-cart:before{content:"îµ³"}.rm-icon-post-format:before{content:"î±¤"}.rm-icon-fact-check:before{content:"î¯·"}.rm-icon-tick:before{content:"î®�"}.rm-icon-recipe:before{content:"î°»"}.rm-icon-circle-plus:before{content:"î®Ÿ"}.rm-icon-service:before{content:"î±¦"}.rm-icon-cross:before{content:"î¯ª"}.rm-icon-code:before{content:"î±§"}.rm-icon-settings:before{content:"î© "}.rm-icon-comments-reply:before{content:"î±¿"}.rm-icon-comments:before{content:"î´µ"}.rm-icon-dataset:before{content:"î³¸"}.rm-icon-schema:before{content:"î®—"}.rm-icon-direction:before{content:"î³‰"}.rm-icon-desktop:before{content:"î©§"}.rm-icon-mail:before{content:"î¶Ž"}.rm-icon-import:before{content:"î©š"}.rm-icon-export:before{content:"î©�"}.rm-icon-eye:before{content:"î®¤"}.rm-icon-facebook:before{content:"î¶¥"}.rm-icon-htaccess:before{content:"î©¯"}.rm-icon-robots:before{content:"î©°"}.rm-icon-movie:before{content:"î·�"}.rm-icon-category:before{content:"î©¶"}.rm-icon-images:before{content:"î­ª"}.rm-icon-google:before{content:"î¤…"}.rm-icon-course:before{content:"î±°"}.rm-icon-heart-filled:before{content:"î®¬"}.rm-icon-home:before{content:"î´�"}.rm-icon-image:before{content:"îª "}.rm-icon-info:before{content:"î®´"}.rm-icon-instagram:before{content:"î»º"}.rm-icon-stories:before{content:"î³§"}.rm-icon-acf:before{content:"î³«"}.rm-icon-book:before{content:"î±³"}.rm-icon-light-bulb:before{content:"î½ "}.rm-icon-howto:before{content:"î®¼"}.rm-icon-faq:before{content:"î®½"}.rm-icon-local-seo:before{content:"îª‡"}.rm-icon-job:before{content:"î´º"}.rm-icon-misc:before{content:"îª�"}.rm-icon-mail-reply:before{content:"î¿ž"}.rm-icon-podcast:before{content:"î¿®"}.rm-icon-copy:before{content:"î¤†"}.rm-icon-mobile:before{content:"î¨®"}.rm-icon-social:before{content:"î±¶"}.rm-icon-music:before{content:"î¯ˆ"}.rm-icon-sitemap:before{content:"î©�"}.rm-icon-post:before{content:"îµ�"}.rm-icon-attachment:before{content:"î¶ƒ"}.rm-icon-edit:before{content:"î±¸"}.rm-icon-pencil:before{content:"ï‚¨"}.rm-icon-plus:before{content:"î¯Ž"}.rm-icon-help:before{content:"î¯’"}.rm-icon-restaurant:before{content:"î±–"}.rm-icon-analyzer:before{content:"îª©"}.rm-icon-search:before{content:"îª«"}.rm-icon-star-filled:before{content:"îª³"}.rm-icon-star:before{content:"îªµ"}.rm-icon-support:before{content:"îµ¤"}.rm-icon-tag:before{content:"î¶‘"}.rm-icon-target:before{content:"î¶•"}.rm-icon-text-align-left:before{content:"ïŒµ"}.rm-icon-text:before{content:"ïŒ¸"}.rm-icon-heading:before{content:"ïŒ»"}.rm-icon-thumbs-up:before{content:"ï�…"}.rm-icon-instant-indexing:before{content:"î¯¡"}.rm-icon-toolbox:before{content:"î´Ÿ"}.rm-icon-trash:before{content:"îªº"}.rm-icon-redirection:before{content:"î­°"}.rm-icon-twitter:before{content:"ï��"}.rm-icon-link:before{content:"îªƒ"}.rm-icon-seo-title:before{content:"ï��"}.rm-icon-user:before{content:"ï�˜"}.rm-icon-users:before{content:"î«„"}.rm-icon-video:before{content:"î­³"}.rm-icon-404:before{content:"î¯¨"}.rm-icon-seo:before{content:"ï�»"}.rm-icon-page:before{content:"î²†"}.rm-icon-youtube:before{content:"ï’…"}.rm-icon-rank-math:before{content:"î¤„"}.rm-icon-bank-3:before{content:"î¤€"}.rm-icon-map-marker-11:before{content:"î¤�"}.rm-icon-wallet-1-dollar:before{content:"î¤‚"}.rm-icon-info-circle:before{content:"î¤ƒ"}.rm-icon-bulb-1:before{content:"î¤Š"}.rm-icon-off:before{content:"ï’†"}.rm-icon-ai-visibility:before{content:"ï’‡"}@font-face{font-family:"Rank-Math";font-weight:normal;font-style:normal;font-display:block;src:url("../../../../../assets/admin/fonts/Rank-Math.ttf?v1.0.76") format("truetype"),url("../../../../../assets/admin/fonts/Rank-Math.woff?v1.0.76") format("woff"),url("../../../../../assets/admin/fonts/Rank-Math.svg?v1.0.76#Rank-Math") format("svg")}.prompt-examples .grid,.rank-math-tab-content-ai-tools .grid,.rank-math-prompt-modal .grid,#rank-math-pro-cta .rank-math-cta-header,#rank-math-pro-cta .rank-math-cta-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.content-ai-autocompleters i,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i,div.rank-math-tab-content-ai-tools .rank-math-box i{font-size:28px;line-height:50px;display:inline-block;color:#ccc;border-radius:6px;background:linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);height:50px;width:50px}.rank-math-tab-content-history .output-item .content .wp-block-code,.chat-message .message .wp-block-code,div.rank-math-content-ai-command>.rich-text .wp-block-code{color:#fff;border-color:#000;background:#242628}.rank-math-button-devices .button.button-small:nth-child(2){margin-right:5px}.button.button-small.rank-math-content-ai-meta-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff;border-color:#069de3;background:#069de3}.button.button-small.rank-math-content-ai-meta-button i{margin-right:5px}.rank-math-header .credits-remaining{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#7f868d}.rank-math-header .credits-remaining strong{margin-left:2px;color:#000}.content-ai-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-preferred-size:100%;flex-basis:100%}.content-ai-filter{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.content-ai-filter div{margin:0}.content-ai-filter div button{display:inline-block;height:auto;margin-right:.5rem;padding:5px 14px;list-style-type:none;cursor:pointer;color:#fff;border:1px solid rgba(6,157,227,.2);border-radius:15px;background-color:#2c3338}.content-ai-filter div button.active:not(:disabled),.content-ai-filter div button:hover:not(:disabled),.content-ai-filter div button:focus:not(:disabled){color:#fff;border-color:#069de3;background:#069de3}.content-ai-filter .search-field{margin-bottom:1rem;margin-left:1rem}.content-ai-filter .search-field .components-search-control{position:relative}.content-ai-filter .search-field .components-search-control:after{line-height:1.3;position:absolute;padding:0 4px 1px;content:"/";color:#b5bfc9;border:1px solid #b5bfc9;border-radius:3px;position:absolute;top:5px;right:4px}.content-ai-filter .search-field .components-search-control .components-input-control__container{border:1px solid #b5bfc9;border-radius:6px}.content-ai-filter .search-field .components-search-control .components-input-control__prefix{position:absolute;left:-5px}.content-ai-filter .search-field .components-search-control .components-input-control__prefix svg{fill:#7f868d}.content-ai-filter .search-field .components-search-control .components-input-control__suffix{z-index:1;background-color:#fff;max-width:1.8rem}.content-ai-filter .search-field .components-search-control .components-input-control__backdrop{display:none}.content-ai-filter .search-field .components-search-control input.components-search-control__input,.content-ai-filter .search-field .components-search-control input.components-input-control__input{width:100%;height:30px;min-height:30px;padding:0 1.5rem 0 2rem;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;background:#fff}.content-ai-filter .search-field .components-search-control input.components-search-control__input::-webkit-input-placeholder, .content-ai-filter .search-field .components-search-control input.components-input-control__input::-webkit-input-placeholder{color:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input::-moz-placeholder, .content-ai-filter .search-field .components-search-control input.components-input-control__input::-moz-placeholder{color:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input:-ms-input-placeholder, .content-ai-filter .search-field .components-search-control input.components-input-control__input:-ms-input-placeholder{color:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input::-ms-input-placeholder, .content-ai-filter .search-field .components-search-control input.components-input-control__input::-ms-input-placeholder{color:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input::placeholder,.content-ai-filter .search-field .components-search-control input.components-input-control__input::placeholder{color:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input:hover,.content-ai-filter .search-field .components-search-control input.components-search-control__input:focus,.content-ai-filter .search-field .components-search-control input.components-search-control__input:active,.content-ai-filter .search-field .components-search-control input.components-input-control__input:hover,.content-ai-filter .search-field .components-search-control input.components-input-control__input:focus,.content-ai-filter .search-field .components-search-control input.components-input-control__input:active{border-color:#069de3;background-color:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button, .content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-input-control__suffix button, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-search-control__icon button, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button, .content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button,.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-input-control__suffix button,.content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-search-control__icon button,.content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button svg, .content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-input-control__suffix button svg, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-search-control__icon button svg, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-input-control__suffix button svg{fill:#242628}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button svg, .content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button svg, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button svg, .content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button svg{fill:#242628}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button svg,.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-input-control__suffix button svg,.content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-search-control__icon button svg,.content-ai-filter .search-field .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-input-control__suffix button svg{fill:#242628}.content-ai-filter .search-field .components-search-control__icon,.content-ai-filter .search-field .components-search-control .components-input-control__suffix{position:absolute;right:auto;left:1px;height:100%}.content-ai-filter .search-field .components-search-control__icon svg,.content-ai-filter .search-field .components-search-control .components-input-control__suffix svg{margin:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);fill:#7f868d}.content-ai-error .notice{display:block !important;margin:5px 0 10px}div.form-field{position:relative;padding-top:10px;padding-bottom:10px}div.form-field:first-of-type{padding-top:0}div.form-field button.generate{float:right}div.form-field .components-base-control input,div.form-field .components-base-control textarea,div.form-field .components-base-control select{font-size:.875rem;width:100%;min-height:34px;border-color:#7f868d;border-radius:5px}div.form-field .components-base-control input:hover,div.form-field .components-base-control input:focus,div.form-field .components-base-control textarea:hover,div.form-field .components-base-control textarea:focus,div.form-field .components-base-control select:hover,div.form-field .components-base-control select:focus{border-color:#069de3;-webkit-box-shadow:#069de3 0 0 0 1px inset;box-shadow:#069de3 0 0 0 1px inset}div.form-field .components-base-control textarea{line-height:1.4}div.form-field .components-base-control input[type=text]{-webkit-box-sizing:border-box;box-sizing:border-box;min-height:38px;margin:0}div.form-field .components-base-control input[type=text]:focus,div.form-field .components-base-control input[type=text]:active{border-color:#069de3;background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}div.form-field .components-base-control .components-toggle-group-control{border-color:#7f868d;border-radius:4px}div.form-field a.rank-math-tooltip{margin-left:3px}div.form-field a.rank-math-tooltip span{bottom:-20%;left:125px;display:none}div.form-field a.rank-math-tooltip span:after{top:45%;left:-10px;-webkit-transform:rotate(90deg);transform:rotate(90deg)}div.form-field .components-select-control__field{margin-bottom:0}div.form-field .components-select-control select:focus+.components-input-control__suffix+.components-input-control__backdrop{border-color:#069de3;outline-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}div.form-field .components-input-control__backdrop{border-color:#7f868d;border-radius:4px}div.form-field.is-required label:after{font-size:.875rem;margin-left:3px;content:"*";vertical-align:middle;color:red}div.form-field label{font-size:.825rem;font-weight:600;display:block;margin-bottom:6px;text-transform:initial}div.form-field label .limit{float:right;font-size:12px;font-weight:normal;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:right;opacity:0;color:#7f868d}div.form-field label .limit-reached{color:#ed5e5e}div.form-field.limit-reached input,div.form-field.limit-reached textarea,div.form-field.limit-reached tags.tagify{border-color:#ed5e5e}div.form-field.limit-reached .limit{opacity:1;color:#ed5e5e}div.form-field.limit-reached input:focus,div.form-field.limit-reached textarea:focus{border-color:#ed5e5e;-webkit-box-shadow:0 0 0 1px #ed5e5e;box-shadow:0 0 0 1px #ed5e5e}div.form-field:hover label .limit{opacity:1}.content-ai-tagify .limit{display:none}.content-ai-tagify .tagify{margin-bottom:0;border-color:#7f868d;background:#fff}.content-ai-tagify .tagify:hover,.content-ai-tagify .tagify:focus{border-color:#069de3;-webkit-box-shadow:#069de3 0 0 0 1px inset;box-shadow:#069de3 0 0 0 1px inset}.content-ai-tagify .tagify__tag:first-child .tagify__tag-text:before{display:none}.content-ai-tagify .tagify .tagify__input:empty:before{opacity:.75}.content-ai-tagify .tagify .tagify__tag{background:hsl(210,15.625%,92.4509803922%)}.content-ai-tagify .tagify .tagify__tag__removeBtn:hover,.content-ai-tagify .tagify .tagify__tag__removeBtn:focus{background:#f0776f}.content-ai-tagify .tagify--focus{border-color:#069de3}.tagify__dropdown{font-size:.875rem;cursor:pointer}.tagify__dropdown span{margin-left:2px}.rank-math-tab-content-ai-tools .grid,.rank-math-prompt-modal .grid{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;gap:.9375rem}.module-listing .rank-math-box{-webkit-box-flex:0;-ms-flex:0 0 288px;flex:0 0 288px;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:1.875rem 1.25rem 2rem;-webkit-transition:.2s all linear;transition:.2s all linear}.module-listing .rank-math-box:hover,.module-listing .rank-math-box:focus{cursor:pointer;border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.module-listing .rank-math-box .dot-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:30px;position:absolute;top:10px;right:10px}.module-listing .rank-math-box .dot-container:before{content:"";position:absolute;top:50%;left:0;right:0;height:2px;margin-top:-1px;background-color:#069de3}.module-listing .rank-math-box .dot-container .dot{width:6px;height:6px;background:#fff;border:1px solid #069de3;border-radius:50%;background:#069de3;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border-radius:50%;z-index:1}.module-listing .rank-math-box i{text-align:center}.module-listing .rank-math-box header h3{font-size:1.125rem;margin:.75rem 0 .75rem}.module-listing .rank-math-box header h3 .rank-math-pro-badge{font-weight:500}.module-listing .rank-math-box header h3 .rank-math-pro-badge.beta{color:#e91e63;background:rgba(233,30,99,.1)}.module-listing .rank-math-box header p{font-size:.938rem;margin-bottom:0;padding:0}.rank-math-contentai-modal-overlay{position:fixed !important;z-index:9999999 !important;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background-color:rgba(0,0,0,.5)}.rank-math-contentai-modal-overlay .rank-math-modal{font-size:.875rem;overflow:hidden;width:960px}.rank-math-contentai-modal-overlay .rank-math-modal>div{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.rank-math-contentai-modal-overlay .rank-math-modal>div>div{width:100%;max-height:calc(100% - 30px)}.rank-math-contentai-modal-overlay .rank-math-modal>div>div>div{height:100%}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header span{display:none !important}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header button{cursor:pointer;position:relative;border:none;outline:none;background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .components-modal__header-heading{font-size:1rem}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .components-modal__header-heading i{margin-right:5px;vertical-align:-2px}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;text-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:50px auto 0}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;position:relative;color:#5b6065;font-size:13px;letter-spacing:.5px;text-transform:uppercase}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a:before{display:block;content:attr(title);padding-bottom:10px;color:#5b6065;font-weight:600}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a:after{content:"";-webkit-transform:translate(-50%, 23px);transform:translate(-50%, 23px);background-color:#cbd2d9;height:3px;width:100%;position:absolute;top:15px;left:0;pointer-events:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation span{display:inline-block;position:relative;z-index:10;border:2px solid #cbd2d9;border-radius:50%;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;background:#cbd2d9;line-height:20px;height:18px;width:18px}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation .step-label:before{color:#069de3}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation .step-label:after{display:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation .step-label+a:after{-webkit-transform:translate(-60%, 23px);transform:translate(-60%, 23px);width:162%}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a.active span{border:2px solid #069de3;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;color:#fff;background:#069de3}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a.active:after{background:-webkit-gradient(linear, left top, right top, from(#58bb58), to(#069de3));background:linear-gradient(to right, #58bb58 0%, #069de3 100%)}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a.active:before{color:#069de3}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a.done span{border-color:#58bb58;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff;color:#fff;background-color:#58bb58}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a.done:after{background-color:#58bb58}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation{margin:0;text-align:left;width:30%;position:absolute;right:20px;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-weight:normal}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a{cursor:default;-webkit-box-shadow:none;box-shadow:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a:before{display:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a:after{-webkit-transform:translate(-100%, -7px);transform:translate(-100%, -7px)}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a:first-of-type:after{display:none}.rank-math-contentai-modal-overlay .rank-math-modal>div .components-modal__header .wizard-navigation a span{display:block !important}.rank-math-contentai-modal-overlay .rank-math-modal .column-body{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column{position:relative;-webkit-box-flex:0;-ms-flex:0 0 35%;flex:0 0 35%;background-color:hsl(210,15.625%,97.4509803922%)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column-inner{overflow-x:auto;height:calc(100% - 64px);padding:20px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column h3{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:0;margin-bottom:1.25rem;line-height:1}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column h3 span{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column h3 button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column h3 button:last-child{margin-left:8px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column h3 button i{margin-right:5px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .required-fields{margin-bottom:0}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .required-fields span{color:#ed5e5e}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer{position:absolute;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:12px 20px;border-top:1px solid #dadfe4;background-color:hsl(210,15.625%,97.4509803922%)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .components-input-control__backdrop,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer input{border-color:#7f868d;border-radius:4px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer input:hover+.components-input-control__backdrop,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer input:focus+.components-input-control__backdrop{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3 inset;box-shadow:0 0 0 1px #069de3 inset}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer input[type=number]::-webkit-inner-spin-button{opacity:1}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .components-input-control{width:50px;margin-right:5px;padding:0}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .components-input-control input{min-height:40px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .components-input-control input::-webkit-inner-spin-button{opacity:1}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .button-secondary{background:#fff}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column .footer .output-label{font-size:13px;margin-right:auto}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output{overflow-y:scroll;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:20px;border-left:1px solid #dadfe4;background:#fff}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .column-output-heading{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .column-output-heading button{margin-bottom:1.25rem}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial{text-align:center;border-left:3px solid #e59901;background-color:rgb(255,250.084375,242.9)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial a{display:inline-block;margin-top:1rem;text-decoration:none}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial .rm-icon-youtube{font-size:3.5rem;width:auto;height:auto;-webkit-transition:.25s all linear;transition:.25s all linear;color:red}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial p{font-size:1rem;margin:0 auto}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial .info{margin:0;padding:2rem;cursor:pointer}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial .info,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial .info:hover,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .rank-math-video-tutorial .info:focus{border:none;outline:none;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item{margin-bottom:1rem;position:relative;padding:2rem 1rem 1rem;-webkit-transition:all .2s linear;transition:all .2s linear;border:1px solid rgba(16,172,132,.075);border-radius:5px;background:rgba(16,172,132,.075)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item:hover,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item:focus{border-color:#10ac84}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item:hover .output-actions,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item:focus .output-actions{-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;opacity:1}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions{position:absolute;top:.5rem;right:0;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px;padding:0 1rem .5rem .5rem;opacity:0;background:#f0f9f6}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions button{margin-right:5px;color:#fff;border:0;background:rgb(13.829787234,148.670212766,114.0957446809)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions button:hover,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions button:focus{color:#fff;border-color:rgb(13.829787234,148.670212766,114.0957446809);background:#10ac84}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions button:last-of-type{margin-right:0}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .output-actions button i{margin-right:4px;vertical-align:-2px}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .word-count{font-size:.75rem;position:absolute;top:.5rem;color:rgba(36,38,40,.7)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content{font-size:.875rem;line-height:1.5;overflow-x:auto;-webkit-user-select:all;-moz-user-select:all;user-select:all;color:rgb(.8085106383,8.6914893617,6.670212766)}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h1,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h2,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h3,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h4,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h5,.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h6{margin:0 0 1rem}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h1{font-size:1.75rem;font-weight:600}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h2{font-size:1.25rem;font-weight:700}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content h3{font-size:1.1rem;font-weight:500}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item.loading{padding-top:1rem}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content p{font-size:inherit;margin:0 0 1rem}.rank-math-contentai-modal-overlay .rank-math-modal .column-body .column.column-output .inner-wrapper .output-item .content p:last-of-type{margin-bottom:0}@-webkit-keyframes blink{to{visibility:hidden}}@keyframes blink{to{visibility:hidden}}.rank-math-contentai-modal-overlay .rank-math-modal .notice{margin:0 0 1rem;padding:.5rem 1rem}.rank-math-tab-content-ai-tools button.rank-math-box{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:auto;border:1px solid #b5bfc9}.rank-math-content-ai-wrapper #editor .edit-post-layout{position:static}.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__header{display:none}.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__body .interface-interface-skeleton__notices,.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__body .interface-interface-skeleton__sidebar,.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__body .interface-interface-skeleton__actions,.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__body .edit-post-visual-editor__post-title-wrapper{display:none}.rank-math-content-ai-wrapper #editor .edit-post-layout .interface-interface-skeleton__body>:where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:100%}.rank-math-content-ai-wrapper #rank-math-pro-cta .rank-math-cta-box{max-width:88%}.rank-math-content-ai-wrapper #rank-math-pro-cta .rank-math-cta-box h3{font-size:.9rem}.rank-math-content-ai-wrapper #rank-math-pro-cta .rank-math-cta-box p,.rank-math-content-ai-wrapper #rank-math-pro-cta .rank-math-cta-box ul,.rank-math-content-ai-wrapper #rank-math-pro-cta .rank-math-cta-box li{font-size:.85rem}.rank-math-content-ai-wrapper>.wp-block-column:first-of-type>div:last-of-type{position:relative;height:calc(100% - 45px);background:#fff}.rank-math-content-ai-wrapper>.wp-block-column:first-of-type>div:last-of-type>div{overflow-x:auto;height:100%}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools{padding:1rem}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header ul{display:none}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header select,.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .components-input-control__backdrop{line-height:30px;height:auto;border-color:#7f868d;border-radius:4px}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header select:focus,.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header select:focus~.components-input-control__backdrop{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3 inset;box-shadow:0 0 0 1px #069de3 inset}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%;margin:0}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter>.components-base-control{margin-right:1rem}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter div>button{margin-bottom:0}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter .search-field{width:100%;margin-left:0}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter input[type=search]{width:100%;margin:0;padding:0 1.5rem;border:1px solid #7f868d;border-radius:4px;background:#fff}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter input[type=search]:hover{border-color:#069de3}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .content-ai-header .content-ai-filter input[type=search]:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding:.5rem;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #b5bfc9;border-radius:4px;background:#fbfbfb}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box:hover{border-color:#069de3;background:rgb(243.5038626609,251.1510729614,254.6961373391)}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box i{margin-left:2px;text-align:center}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-content-ai:before{color:inherit;background:none;-webkit-background-clip:unset;background-clip:unset;-webkit-text-fill-color:unset}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box .dot-container{top:auto}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box header{margin-left:5px}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box header h3{font-size:.875rem;font-weight:normal;line-height:1;z-index:auto;margin:0;text-transform:none}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .rank-math-box header p{display:none}.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools input:focus,.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools textarea:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-content-ai-wrapper .rank-math-tab-content-write,.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools,.rank-math-content-ai-wrapper .rank-math-tab-content-chat{position:relative}.rank-math-content-ai-wrapper .rank-math-tab-content-write .components-notice,.rank-math-content-ai-wrapper .rank-math-tab-content-ai-tools .components-notice,.rank-math-content-ai-wrapper .rank-math-tab-content-chat .components-notice{margin:0 0 1rem}.rank-math-content-ai-wrapper .rank-math-tab-content-write{overflow-x:scroll;max-height:calc(100% - 50px);padding:1rem}.rank-math-content-ai-wrapper .rank-math-tab-content-write label{font-size:.875rem;font-weight:500;display:block;margin-bottom:5px}.rank-math-content-ai-wrapper .rank-math-tab-content-write .write-button{margin-top:.5rem}.rank-math-content-ai-wrapper .rank-math-tab-content-write .write-button span{font-size:.625rem;margin-left:5px;padding:4px 6px;border-radius:3px;background:rgba(0,0,0,.25)}.rank-math-content-ai-wrapper .rank-math-tab-content-tools{overflow-x:scroll;max-height:calc(100% - 62px);padding:1rem}.rank-math-content-ai-wrapper .rank-math-tab-content-chat .tab-header{border:0;border-bottom:1px solid #dadfe4}.rank-math-content-ai-wrapper .rank-math-tab-content-chat .tab-header-title span{display:none}.rank-math-content-ai-wrapper .rank-math-tab-content-chat .rank-math-content-chat-page{height:auto}.rank-math-content-ai-wrapper .chat-container{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;border:0}.rank-math-content-ai-wrapper .chat-sidebar{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;height:auto;border-width:0 0 1px 0;border-color:#dadfe4}.rank-math-content-ai-wrapper .chat-messages .prompt-examples>h2{font-size:1.25rem !important;margin-bottom:1rem}.rank-math-content-ai-wrapper .chat-messages .prompt-examples .grid>div{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-content-ai-wrapper .chat-messages .prompt-examples .grid>div:nth-of-type(1n+5){display:none}.rank-math-content-ai-wrapper .chat-messages .chat-message{max-width:100%}.rank-math-content-ai-wrapper .chat-messages .chat-message .message{font-size:.875rem}.rank-math-content-ai-wrapper .chat-input{border-color:#dadfe4;border-bottom:1px solid #dadfe4;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.rank-math-content-ai-wrapper .chat-input-buttons .prompts-button i.rm-icon{margin-right:0}.rank-math-content-ai-wrapper .clear-history{float:right}.components-dropdown-menu .rm-icon-content-ai{background:linear-gradient(-135deg, #ff4492, #434e8f);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}div.rank-math-content-ai-command{font-family:sans-serif;font-size:1.063rem;line-height:1.5;position:relative;z-index:9;overflow-x:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:.5rem 1rem;letter-spacing:.5px;border:10px solid;border-width:2px;border-image-source:linear-gradient(to left, #743ad5, #d53a9d);border-image-slice:1;background:#efeff9}div.rank-math-content-ai-command.typing{pointer-events:none}div.rank-math-content-ai-command>.rich-text{margin-left:30px;white-space:normal !important}div.rank-math-content-ai-command>.rich-text>span{margin:0 0 0 -10px;opacity:0}div.rank-math-content-ai-command>.rich-text:focus *[data-rich-text-format-boundary]{background:rgba(0,0,0,0)}div.rank-math-content-ai-command>.rich-text>*:nth-last-child(2){margin-bottom:0}div.rank-math-content-ai-command button{height:100%;cursor:pointer;color:#6666c3;border:none;background-color:rgba(0,0,0,0)}div.rank-math-content-ai-command button i{vertical-align:middle}div.rank-math-content-ai-command:after,div.rank-math-content-ai-command.has-block-overlay:not(.is-multi-selected):after{font-family:"Rank-Math" !important;font-size:1.5rem;position:absolute !important;top:.188rem !important;right:auto !important;left:.875rem !important;content:"î¤‰" !important;outline:none !important;background:linear-gradient(-135deg, #ff4492, #434e8f);-webkit-background-clip:text;background-clip:text;-webkit-box-shadow:none !important;box-shadow:none !important;-webkit-text-fill-color:rgba(0,0,0,0)}div.rank-math-content-ai-command-buttons{margin-top:10px}div.rank-math-content-ai-command-buttons button.button.button-small{font-size:.875rem !important;font-weight:500;margin-right:5px;padding:0 12px;color:#6666c3;border:1px solid #6666c3}div.rank-math-content-ai-command-buttons button.button.button-small:focus{color:#6666c3;border-color:#6666c3;-webkit-box-shadow:0 0 0 1px #6666c3;box-shadow:0 0 0 1px #6666c3}div.rank-math-content-ai-command-buttons button.button.button-small:hover{color:#fff;border-color:#6666c3;background:#6666c3}div.rank-math-content-ai-command-buttons button.button.button-small:hover:focus{border-color:#fff}.content-ai-autocompleters{font-size:.85rem;padding:6px}.content-ai-autocompleters span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.content-ai-autocompleters i.rm-icon-404,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-404,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-404{color:#ff6f6f;background:rgba(255,111,111,.15)}.content-ai-autocompleters i.rm-icon-mobile,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mobile,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mobile{color:#448aff;background:rgba(68,138,255,.15)}.content-ai-autocompleters i.rm-icon-acf,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-acf,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-acf{color:#4caf50;background:rgba(76,175,80,.15)}.content-ai-autocompleters i.rm-icon-users,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-users,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-users{color:#ff4081;background:rgba(255,64,129,.15)}.content-ai-autocompleters i.rm-icon-comments,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments{color:#b8423f;background:rgba(184,66,63,.15)}.content-ai-autocompleters i.rm-icon-images,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-images,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-images{color:#00bcd4;background:rgba(0,188,212,.15)}.content-ai-autocompleters i.rm-icon-link,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-link,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-link{color:#dba240;background:rgba(219,162,64,.15)}.content-ai-autocompleters i.rm-icon-local-seo,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-local-seo,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-local-seo{color:#ff9f43;background:rgba(255,159,67,.15)}.content-ai-autocompleters i.rm-icon-post,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-post,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-post{color:#679cf7;background:rgba(103,156,247,.15)}.content-ai-autocompleters i.rm-icon-podcast,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-podcast,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-podcast{color:#a95be7;background:rgba(169,91,231,.15)}.content-ai-autocompleters i.rm-icon-redirection,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-redirection,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-redirection{color:#f7b267;background:rgba(247,178,103,.15)}.content-ai-autocompleters i.rm-icon-schema,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-schema,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-schema{color:#843224;background:rgba(132,50,36,.15)}.content-ai-autocompleters i.rm-icon-role-manager,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-role-manager,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-role-manager{color:#87a627;background:rgba(135,166,39,.15)}.content-ai-autocompleters i.rm-icon-search-console,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-search-console,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-search-console{color:#3c88d8;background:rgba(60,136,216,.15)}.content-ai-autocompleters i.rm-icon-analyzer,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-analyzer,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-analyzer{color:#e3765c;background:rgba(227,118,92,.15)}.content-ai-autocompleters i.rm-icon-sitemap,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-sitemap,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-sitemap{color:#049404;background:rgba(4,148,4,.15)}.content-ai-autocompleters i.rm-icon-cart,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-cart,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-cart{color:#a13cf7;background:rgba(161,60,247,.15)}.content-ai-autocompleters i.rm-icon-video,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-video,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-video{color:#c4302b;background:rgba(196,48,43,.15)}.content-ai-autocompleters i.rm-icon-stories,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-stories,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-stories{color:#180ca4;background:rgba(24,12,164,.15)}.content-ai-autocompleters i.rm-icon-instant-indexing,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-instant-indexing,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-instant-indexing{color:#a40fa4;background:rgba(164,15,164,.15)}.content-ai-autocompleters i.rm-icon-content-ai,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-content-ai,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-content-ai{color:#e91e63;background:rgba(233,30,99,.07)}.content-ai-autocompleters i.rm-icon-content-ai:before,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-content-ai:before,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-content-ai:before{background:linear-gradient(-135deg, #ff4081, #3f51b5);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0)}.content-ai-autocompleters i.rm-icon-edit,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-edit,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-edit{color:#673ab7;background:rgba(103,58,183,.15)}.content-ai-autocompleters i.rm-icon-faq,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-faq,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-faq{color:#ff5722;background:rgba(255,87,34,.15)}.content-ai-autocompleters i.rm-icon-support,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-support,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-support{color:#009688;background:rgba(0,150,136,.15)}.content-ai-autocompleters i.rm-icon-job,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-job,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-job{color:#ff4081;background:rgba(255,64,129,.15)}.content-ai-autocompleters i.rm-icon-post-format,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-post-format,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-post-format{color:#607d8b;background:rgba(96,125,139,.15)}.content-ai-autocompleters i.rm-icon-book,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-book,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-book{color:#ff6f00;background:rgba(255,111,0,.15)}.content-ai-autocompleters i.rm-icon-misc,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-misc,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-misc{color:#c51162;background:rgba(197,17,98,.15)}.content-ai-autocompleters i.rm-icon-page,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-page,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-page{color:#9c27b0;background:rgba(156,39,176,.15)}.content-ai-autocompleters i.rm-icon-help,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-help,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-help{color:#1a237e;background:rgba(26,35,126,.15)}.content-ai-autocompleters i.rm-icon-thumbs-up,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-thumbs-up,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-thumbs-up{color:#00bfa5;background:rgba(0,191,165,.15)}.content-ai-autocompleters i.rm-icon-star,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-star,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-star{color:#e3aa0b;background:rgba(227,170,11,.15)}.content-ai-autocompleters i.rm-icon-user,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-user,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-user{color:#006064;background:rgba(0,96,100,.15)}.content-ai-autocompleters i.rm-icon-restaurant,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-restaurant,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-restaurant{color:#272649;background:rgba(26,24,78,.15)}.content-ai-autocompleters i.rm-icon-facebook,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-facebook,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-facebook{color:#3b5998;background:rgba(59,89,152,.15)}.content-ai-autocompleters i.rm-icon-comments-reply,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments-reply,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments-reply{color:#3b5998;background:rgba(59,89,152,.15)}.content-ai-autocompleters i.rm-icon-twitter,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-twitter,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-twitter{color:#03a9f4;background:rgba(3,169,244,.15)}.content-ai-autocompleters i.rm-icon-comments-reply.Tweet_Reply,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments-reply.Tweet_Reply,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-comments-reply.Tweet_Reply{color:#03a9f4;background:rgba(3,169,244,.15)}.content-ai-autocompleters i.rm-icon-instagram,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-instagram,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-instagram{color:#ff4081;background:rgba(255,64,129,.15)}.content-ai-autocompleters i.rm-icon-mail,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mail,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mail{color:#d93025;background:rgba(217,48,37,.15)}.content-ai-autocompleters i.rm-icon-mail-reply,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mail-reply,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-mail-reply{color:#d93025;background:rgba(217,48,37,.15)}.content-ai-autocompleters i.rm-icon-light-bulb,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-light-bulb,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-light-bulb{color:#dca720;background:rgba(251,192,45,.15)}.content-ai-autocompleters i.rm-icon-tick,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-tick,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-tick{color:#4caf50;background:rgba(76,175,80,.15)}.content-ai-autocompleters i.rm-icon-text,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-text,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-text{color:#009688;background:rgba(0,150,136,.15)}.content-ai-autocompleters i.rm-icon-social,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-social,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-social{color:#ff5722;background:rgba(255,87,34,.15)}.content-ai-autocompleters i.rm-icon-dataset,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-dataset,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-dataset{color:#587c22;background:rgba(88,124,34,.15)}.content-ai-autocompleters i.rm-icon-youtube,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-youtube,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-youtube{color:#c4302b;background:rgba(196,48,43,.15)}.content-ai-autocompleters i.rm-icon-recipe,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-recipe,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-recipe{color:#4caf50;background:rgba(76,175,80,.15)}.content-ai-autocompleters i.rm-icon-code,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-code,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-code{color:#222;background:rgba(34,34,34,.15)}.content-ai-autocompleters i.rm-icon-seo,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo{color:#6d4c41;background:rgba(109,76,65,.15)}.content-ai-autocompleters i.rm-icon-pencil,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-pencil,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-pencil{color:#1e88e5;background:rgba(30,136,229,.15)}.content-ai-autocompleters i.rm-icon-howto,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-howto,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-howto{color:#b71c1c;background:rgba(183,28,28,.15)}.content-ai-autocompleters i.rm-icon-heading,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-heading,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-heading{color:#0d47a1;background:rgba(13,71,161,.15)}.content-ai-autocompleters i.rm-icon-seo-title,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo-title,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo-title{color:#d50000;background:rgba(213,0,0,.15)}.content-ai-autocompleters i.rm-icon-seo-description,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo-description,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-seo-description{color:#f57f17;background:rgba(245,127,23,.15)}.content-ai-autocompleters i.rm-icon-text-align-left,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-text-align-left,div.rank-math-tab-content-ai-tools .rank-math-box i.rm-icon-text-align-left{color:#388e3c;background:rgba(56,142,60,.15)}.content-ai-autocompleters i.ai-icon.rm-icon,.rank-math-tab-content-write .rank-math-tab-content-ai-tools .rank-math-box i.ai-icon.rm-icon,div.rank-math-tab-content-ai-tools .rank-math-box i.ai-icon.rm-icon{font-size:1rem;line-height:16px;-webkit-box-sizing:border-box;box-sizing:border-box;width:24px;height:24px;margin-right:7px !important;padding:4px;border-radius:3px}.rank-math-tab-content-ai-tools.dashboard-wrapper .rank-math-box i.ai-icon.rm-icon{font-size:28px;line-height:50px;width:50px;height:50px;padding:0;border-radius:6px}body.rank-math_page_rank-math-content-ai-page #wpbody-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}body.rank-math_page_rank-math-content-ai-page #wpbody-content>div{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}body.rank-math_page_rank-math-content-ai-page #wpbody-content>div.notice{margin-left:0}body.rank-math_page_rank-math-content-ai-page #wpbody-content>div.rank-math-breadcrumbs-wrap{margin-top:20px}body.rank-math_page_rank-math-content-ai-page #wpbody-content .rank-math-header{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}body.rank-math_page_rank-math-content-ai-page #wpbody-content .rank-math-tabs .components-tab-panel__tabs button{border-bottom:none}body.rank-math_page_rank-math-content-ai-page #wpbody-content .rank-math-tabs .components-tab-panel__tabs button.is-active:after{position:absolute;z-index:1;bottom:-1px;left:0;visibility:visible;width:100%;height:1px;content:"";background:#fafafb}body.rank-math_page_rank-math-content-ai-page #wpbody-content .rank-math-tabs .components-tab-panel__tab-content{position:relative}.rank-math-tab-content-chat{width:1120px;max-width:100%;height:100%}.rank-math-tab-content-chat.blurred+#rank-math-pro-cta{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.rank-math-tab-content-chat.blurred+#rank-math-pro-cta .rank-math-cta-box{margin-left:19%}.rank-math-tab-content-chat .rank-math-content-chat-page{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;height:70vh;min-height:350px}.rank-math-tab-content-chat .tab-header{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #b5bfc9;border-bottom:0}.chat-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-sizing:border-box;box-sizing:border-box;width:calc(100% - 305px);max-width:1120px;height:100%;border:1px solid #b5bfc9;background:#fff}.chat-sidebar{overflow-x:scroll;-ms-flex-preferred-size:33.33%;flex-basis:33.33%;max-width:300px;height:calc(100% - 2px);border:1px solid #b5bfc9;border-right:0;background:#fff}.chat-sidebar-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:.875rem}.chat-sidebar .button{line-height:1;position:relative;overflow:hidden;height:auto;margin-bottom:.5rem;padding:.875rem;text-align:left;text-overflow:ellipsis;color:#242628;border:1px solid #b5bfc9;border-radius:5px}.chat-sidebar .button i{font-style:normal;margin-right:5px;vertical-align:-2px}.chat-sidebar .button .delete-session{font-size:.65rem;font-weight:900;line-height:20px;position:absolute;top:10px;right:4px;display:none;width:20px;height:auto;padding:0;text-align:center;border-radius:20px;background:hsl(0,79.8882681564%,69.9019607843%)}.chat-sidebar .button .delete-session:hover,.chat-sidebar .button .delete-session:focus{background:#ed5e5e}.chat-sidebar .button .delete-session i.dashicons{display:block;margin:0;color:#fff}.chat-sidebar .button:hover{color:#069de3;border-color:#069de3;background:#f8f9fa}.chat-sidebar .button:hover .delete-session{display:block}.chat-sidebar .button.active:not(:disabled){color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.chat-sidebar .button.active:not(:disabled):hover,.chat-sidebar .button.active:not(:disabled):focus{border-color:#fff;-webkit-box-shadow:0 0 0 2px #069de3;box-shadow:0 0 0 2px #069de3}.chat-sidebar .button.new-chat,.chat-sidebar .button.new-chat i{font-weight:500}.chat-sidebar .button.is-green,.chat-sidebar .button.is-green:hover,.chat-sidebar .button.is-green:focus{color:#fff}.tab-header{font-size:1rem;font-weight:500;padding:.875rem;border-bottom:1px solid #b5bfc9;background:#f8f9fa}.tab-header-title .rm-icon{vertical-align:-1.5px}.tab-header .button{font-weight:normal;float:right;margin-top:-2px;text-decoration:none}.tab-header .button:hover:not(:disabled),.tab-header .button:focus:not(:disabled){color:#ed5e5e}.chat-messages{display:-webkit-box;display:-ms-flexbox;display:flex;overflow-y:scroll;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;padding:.875rem}.chat-messages .prompt-examples{max-width:750px;margin:0 auto auto}.chat-messages .prompt-examples h2,.chat-messages .prompt-examples p{text-align:center}.chat-messages .prompt-examples h2{font-size:1.5rem}.chat-messages .prompt-examples p{display:block}.chat-messages .prompt-examples .grid>div{display:block;-webkit-box-flex:0;-ms-flex:0 0 48%;flex:0 0 48%;cursor:pointer}.chat-messages .prompt-examples .grid>div:nth-child(1n+6){display:block}.chat-message{font-size:1rem;-ms-flex-item-align:start;align-self:flex-start;min-width:100px;max-width:70%;margin-top:10px;padding:10px;color:#fff;border-radius:8px;background-image:linear-gradient(45deg, #724bb7 0%, #4098d7 100%);-webkit-box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16);box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16)}.chat-message.user{-ms-flex-item-align:end;align-self:flex-end;color:#242628;background:rgba(218,223,228,.4)}.chat-message .message-actions{font-size:.875rem;margin-bottom:5px}.chat-message .message-actions>span{opacity:.5}.chat-message button.button.is-secondary{line-height:20px;float:right;min-height:20px;margin-top:-2px;padding:0 5px;cursor:pointer;opacity:0;color:#fff;border:1px solid rgba(0,0,0,0);background:rgba(0,0,0,0)}.chat-message button.button.is-secondary i{margin-right:4px;vertical-align:text-bottom}.chat-message button.button.is-secondary:hover:not(:disabled),.chat-message button.button.is-secondary:focus:not(:disabled){color:#fff;border-color:#fff;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.chat-message:hover button.button.is-secondary{opacity:1}.chat-message .message{line-height:1.4}.chat-message .message p{font-size:1rem;margin-top:0}.chat-message .message p:last-of-type{margin-bottom:0}.chat-message .message span{font-family:monospace;color:rgb(203.3404907975,16.1595092025,177.754601227);background:rgb(253.5128834356,236.2871165644,251.1582822086)}.chat-message .message a{color:#fff}.chat-message .message table tr td{background-color:rgba(0,0,0,0) !important}.chat-message .rank-math-loader{--c: linear-gradient(#fff 0 0) no-repeat}.chat-input{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.875rem;border-top:1px solid #b5bfc9;background:#f8f9fa;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chat-input .rank-math-feature-usage{width:100%}.chat-input .transparency-notice{margin-top:0;-ms-flex-item-align:baseline;align-self:baseline}.chat-input-actions{position:relative;width:100%}.chat-input-actions .components-base-control__field{margin-bottom:0}.chat-input-actions .regenerate-response{height:34px !important;margin:0 5px;padding:0 7px !important}.chat-input-actions .regenerate-response .dashicon{margin-right:0 !important;vertical-align:-6px}.chat-input-actions .chat-input-buttons{position:absolute;bottom:1px;left:1px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-sizing:border-box;box-sizing:border-box;width:calc(100% - 2px);padding:8px 14px;border-radius:5px;background:#fff}.chat-input-actions .chat-input-buttons .limit{-webkit-box-flex:initial;-ms-flex-positive:initial;flex-grow:initial;margin-right:5px;font-size:12px;font-weight:normal;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:right;opacity:0;color:#7f868d}.chat-input-actions .chat-input-buttons .limit-reached{color:#ed5e5e}.chat-input-actions .chat-input-buttons .limit-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.chat-input-actions:hover .limit,.chat-input-actions:focus .limit,.chat-input-actions:focus-within .limit{opacity:1}.chat-input textarea,.chat-input .chat-input-textarea{font-size:1rem;line-height:1.4;overflow:auto;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:100px;max-height:200px;margin:0;padding:14px 14px 50px 14px;border:1px solid #b5bfc9;border-radius:5px;background:#fff}.chat-input textarea:hover,.chat-input textarea:focus,.chat-input .chat-input-textarea:hover,.chat-input .chat-input-textarea:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.chat-input textarea span:not([data-rich-text-placeholder]),.chat-input .chat-input-textarea span:not([data-rich-text-placeholder]){font-family:monospace;color:rgb(203.3404907975,16.1595092025,177.754601227);background:rgb(253.5128834356,236.2871165644,251.1582822086)}.chat-input .button.is-primary{line-height:1;height:34px;padding:0 12px}.chat-input .button.is-primary[disabled]{cursor:not-allowed;opacity:.7}.chat-input .button.is-primary .rm-icon{font-size:20px;margin-right:0;vertical-align:-4.5px}.chat-input .button.is-primary .loader{width:25px;-webkit-animation:loading 1s infinite linear alternate;animation:loading 1s infinite linear alternate;background:var(--c) 0 50%,var(--c) 50% 50%,var(--c) 100% 50%;aspect-ratio:1;--c: linear-gradient(#000 0 0) no-repeat}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}.chat-input .chat-input-buttons .prompts-button{line-height:32px;padding:0 10px;color:#fff;border-color:#212f3e;background:#212f3e}.chat-input .chat-input-buttons .prompts-button:hover:not(:disabled),.chat-input .chat-input-buttons .prompts-button:focus:not(:disabled){color:#fff;border-color:rgb(50.7157894737,72.2315789474,95.2842105263);background:rgb(50.7157894737,72.2315789474,95.2842105263)}.chat-input .chat-input-buttons .prompts-button i{margin-right:5px;vertical-align:-1px}.prompt-examples{max-width:350px;margin-bottom:0;margin-left:1.25rem}.prompt-examples h2{font-size:1rem;margin-bottom:1rem;text-align:left}.prompt-examples p{font-size:1rem;display:none;margin-bottom:2rem}.prompt-examples .grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;gap:.9375rem}.prompt-examples .grid>div{font-size:1rem;line-height:1.4;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:1rem;cursor:pointer;-webkit-transition:-webkit-box-shadow .2s ease-in-out;transition:-webkit-box-shadow .2s ease-in-out;transition:box-shadow .2s ease-in-out;transition:box-shadow .2s ease-in-out, -webkit-box-shadow .2s ease-in-out;border-radius:10px;background:rgba(218,223,228,.4)}.prompt-examples .grid>div:nth-child(1n+6){display:none}.prompt-examples .grid>div:hover,.prompt-examples .grid>div:focus{-webkit-box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16);box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16)}.prompt-examples .grid>div span{font-family:monospace;color:rgb(203.3404907975,16.1595092025,177.754601227);background:rgb(253.5128834356,236.2871165644,251.1582822086)}.rank-math-prompt-modal .content-ai-filter{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;height:60px;padding:1rem}.rank-math-prompt-modal .components-modal__content{overflow:hidden;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-top:0 !important}.rank-math-prompt-modal .components-modal__content>div{position:relative}.rank-math-prompt-modal .components-modal__content>div:not(.components-modal__header){min-height:calc(100% - 30px)}.rank-math-prompt-modal .grid{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;-ms-flex-wrap:wrap;flex-wrap:wrap;height:calc(100% - 60px);border-top:1px solid #dadfe4;gap:0}.rank-math-prompt-modal .grid .column{overflow-x:auto}.rank-math-prompt-modal .grid .column-first{-webkit-box-flex:0;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;height:100%;padding:1rem;border-right:1px solid #dadfe4}.rank-math-prompt-modal .grid .column-first .components-search-control{position:relative}.rank-math-prompt-modal .grid .column-first .components-search-control:after{line-height:1.3;position:absolute;padding:0 4px 1px;content:"/";color:#b5bfc9;border:1px solid #b5bfc9;border-radius:3px;position:absolute;top:5px;right:4px}.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__container{border:1px solid #b5bfc9;border-radius:6px}.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__prefix{position:absolute;left:-5px}.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__prefix svg{fill:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__suffix{z-index:1;background-color:#fff;max-width:1.8rem}.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__backdrop{display:none}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input{width:100%;height:30px;min-height:30px;padding:0 1.5rem 0 2rem;-webkit-transition:.25s all ease-in-out;transition:.25s all ease-in-out;background:#fff}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input::-webkit-input-placeholder, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input::-webkit-input-placeholder{color:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input::-moz-placeholder, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input::-moz-placeholder{color:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:-ms-input-placeholder, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:-ms-input-placeholder{color:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input::-ms-input-placeholder, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input::-ms-input-placeholder{color:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input::placeholder,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input::placeholder{color:#7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:hover,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:focus,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:active,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:hover,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:focus,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:active{border-color:#069de3;background-color:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-input-control__suffix button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-search-control__icon button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-input-control__suffix button,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-search-control__icon button,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-input-control__suffix button{min-width:26px;margin-top:3px;margin-right:0;margin-bottom:0;padding:0;border:0;background:rgba(0,0,0,0)}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-input-control__suffix button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-search-control__icon button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-moz-placeholder)+.components-input-control__suffix button svg{fill:#242628}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button svg, .rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:-ms-input-placeholder)+.components-input-control__suffix button svg{fill:#242628}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button svg,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-input-control__suffix button svg,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-search-control__icon button svg,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-input-control__input:not(:placeholder-shown)+.components-input-control__suffix button svg{fill:#242628}.rank-math-prompt-modal .grid .column-first .components-search-control__icon,.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__suffix{position:absolute;right:auto;left:1px;height:100%}.rank-math-prompt-modal .grid .column-first .components-search-control__icon svg,.rank-math-prompt-modal .grid .column-first .components-search-control .components-input-control__suffix svg{margin:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);fill:#7f868d}.rank-math-prompt-modal .grid .column-first h3{font-size:1.3em;margin-bottom:1rem}.rank-math-prompt-modal .grid .column-first .components-search-control{margin-bottom:1rem}.rank-math-prompt-modal .grid .column-first .components-search-control input{height:36px}.rank-math-prompt-modal .grid .column-first .components-search-control:after{top:5.5px;right:8px}.rank-math-prompt-modal .grid .column-first .components-search-control__icon{left:5px}.rank-math-prompt-modal .grid .column-first .prompt-list button{font-size:1rem;font-weight:500;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:auto;margin-bottom:1rem;padding:.875rem;cursor:pointer;text-align:left;border:0;border:1px solid #b5bfc9;border-radius:5px;background:#fff}.rank-math-prompt-modal .grid .column-first .prompt-list button i{font-style:normal;height:auto;margin-right:8px}.rank-math-prompt-modal .grid .column-first .prompt-list button:hover,.rank-math-prompt-modal .grid .column-first .prompt-list button:focus{border-color:#fff;-webkit-box-shadow:0 0 0 2px #069de3;box-shadow:0 0 0 2px #069de3}.rank-math-prompt-modal .grid .column-first .prompt-list button.active{color:#fff;border-color:#069de3;background:#069de3}.rank-math-prompt-modal .grid .column-first .prompt-list button.active:hover,.rank-math-prompt-modal .grid .column-first .prompt-list button.active:focus{border-color:#fff}.rank-math-prompt-modal .grid .column-first .prompt-list button .delete-prompt{font-size:.65rem;font-weight:900;line-height:20px;position:absolute;top:14px;right:4px;display:none;width:20px;height:auto;padding:0;text-align:center;border-radius:20px;background-color:hsl(0,79.8882681564%,69.9019607843%)}.rank-math-prompt-modal .grid .column-first .prompt-list button .delete-prompt:hover,.rank-math-prompt-modal .grid .column-first .prompt-list button .delete-prompt:focus{background-color:#ed5e5e}.rank-math-prompt-modal .grid .column-first .prompt-list button .delete-prompt i.dashicons{display:block;margin:0;color:#fff}.rank-math-prompt-modal .grid .column-first .prompt-list button .delete-prompt.rank-math-loader{display:block;border-radius:0;background-color:rgba(0,0,0,0);--c: linear-gradient(#fff 0 0) no-repeat}.rank-math-prompt-modal .grid .column-first .prompt-list button:hover .delete-prompt{display:block}.rank-math-prompt-modal .grid .column-second{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;padding:1rem;background:#fff}.rank-math-prompt-modal .grid .column-second h3{margin-bottom:1rem}.rank-math-prompt-modal .grid .column-second .prompt-preview-content{line-height:1.4;margin-bottom:1rem;padding:1rem;white-space:pre-line;border-radius:3px;background:rgba(218,223,228,.4);-webkit-box-shadow:inset 0 0 3px 0 rgba(0,0,0,.25);box-shadow:inset 0 0 3px 0 rgba(0,0,0,.25)}.rank-math-prompt-modal .grid .column-second .prompt-preview-content p{font-size:1rem;margin-top:0}.rank-math-prompt-modal .grid .column-second .prompt-preview-content p:last-of-type{margin-bottom:0}.rank-math-prompt-modal .grid .column-second .prompt-preview-content p span{font-family:monospace;color:rgb(203.3404907975,16.1595092025,177.754601227);background:rgb(253.5128834356,236.2871165644,251.1582822086)}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field:last-of-type{padding-top:0}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field label{font-size:1rem}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field p{font-size:.875rem}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field .limit{position:absolute;right:0;font-size:12px;font-weight:normal;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:right;opacity:0;color:#7f868d}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field .limit-reached{color:#ed5e5e}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field:hover .limit,.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field:focus-within .limit{opacity:1}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field .is-required label{color:#ed5e5e}.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field .is-required input,.rank-math-prompt-modal .grid .column-second .custom-prompt-form .form-field .is-required textarea{border-color:#ed5e5e}.rank-math-prompt-modal .grid .column-second .components-base-control__help{margin-bottom:0}.rank-math-prompt-modal .grid .column-second .save-prompt,.rank-math-prompt-modal .grid .column-second .use-prompt{text-align:right}.rank-math-prompt-modal .grid .column-second .save-prompt .rank-math-loader,.rank-math-prompt-modal .grid .column-second .use-prompt .rank-math-loader{--c: linear-gradient(#fff 0 0) no-repeat}.rank-math-prompt-modal .grid .column-second button{padding:0 1.5rem}.rank-math-tab-content-history .history-container{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:1120px;height:70vh;min-height:350px;border:1px solid #b5bfc9;background:#fff}.rank-math-tab-content-history .inner-wrapper{overflow-x:auto;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;padding:3rem 1rem 1rem}.rank-math-tab-content-history .output-item{margin-bottom:3.5rem;position:relative;padding:2rem 1rem 1rem;-webkit-transition:all .2s linear;transition:all .2s linear;border:1px solid rgba(16,172,132,.075);border-radius:5px;background:rgba(16,172,132,.075)}.rank-math-tab-content-history .output-item:hover,.rank-math-tab-content-history .output-item:focus{border-color:#10ac84}.rank-math-tab-content-history .output-item:hover .output-actions,.rank-math-tab-content-history .output-item:focus .output-actions{-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;opacity:1}.rank-math-tab-content-history .output-item .output-actions{position:absolute;top:.5rem;right:0;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:10px;padding:0 1rem .5rem .5rem;opacity:0;background:#f0f9f6}.rank-math-tab-content-history .output-item .output-actions button{margin-right:5px;color:#fff;border:0;background:rgb(13.829787234,148.670212766,114.0957446809)}.rank-math-tab-content-history .output-item .output-actions button:hover,.rank-math-tab-content-history .output-item .output-actions button:focus{color:#fff;border-color:rgb(13.829787234,148.670212766,114.0957446809);background:#10ac84}.rank-math-tab-content-history .output-item .output-actions button:last-of-type{margin-right:0}.rank-math-tab-content-history .output-item .output-actions button i{margin-right:4px;vertical-align:-2px}.rank-math-tab-content-history .output-item .word-count{font-size:.75rem;position:absolute;top:.5rem;color:rgba(36,38,40,.7)}.rank-math-tab-content-history .output-item .content{font-size:.875rem;line-height:1.5;overflow-x:auto;-webkit-user-select:all;-moz-user-select:all;user-select:all;color:rgb(.8085106383,8.6914893617,6.670212766)}.rank-math-tab-content-history .output-item .content h1,.rank-math-tab-content-history .output-item .content h2,.rank-math-tab-content-history .output-item .content h3,.rank-math-tab-content-history .output-item .content h4,.rank-math-tab-content-history .output-item .content h5,.rank-math-tab-content-history .output-item .content h6{margin:0 0 1rem}.rank-math-tab-content-history .output-item .content h1{font-size:1.75rem;font-weight:600}.rank-math-tab-content-history .output-item .content h2{font-size:1.25rem;font-weight:700}.rank-math-tab-content-history .output-item .content h3{font-size:1.1rem;font-weight:500}.rank-math-tab-content-history .output-item .tool-name{font-weight:500;position:absolute;top:-2rem;left:0;padding:3px 5px;color:#6666c3;border-radius:3px;background:hsl(240,43.661971831%,95.2352941176%)}.rank-math-tab-content-history .output-item .content,.rank-math-tab-content-history .output-item .content p{font-size:1rem}.rank-math-tab-content-history .output-item .content>*:first-child{margin-top:0}.rank-math-tab-content-history .output-item .content>*:last-child{margin-bottom:0}.rank-math-tab-content-history .output-actions{background:rgba(0,0,0,0)}.rank-math-tab-content-content-editor .editor-styles-wrapper{font-family:inherit}.rank-math-tab-content-content-editor .components-popover{z-index:999999;opacity:1}.rank-math-tab-content-content-editor .components-popover:before,.rank-math-tab-content-content-editor .components-popover:after{display:none}.rank-math-tab-content-content-editor .actions-wrapper{height:44px;padding:0 1rem;text-align:right;border-bottom:1px solid #b5bfc9}.rank-math-tab-content-content-editor .actions-wrapper .components-button{margin-top:9px;margin-right:10px;background:#fff}.rank-math-tab-content-content-editor .actions-wrapper .components-button:last-of-type{margin-right:0}.rank-math-tab-content-content-editor .actions-wrapper .components-button:hover,.rank-math-tab-content-content-editor .actions-wrapper .components-button:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-tab-content-content-editor .actions-wrapper .components-button i{font-size:14px;margin-right:5px;vertical-align:text-top}.rank-math-tab-content-content-editor .wp-block-columns{height:70vh;min-height:350px;border:1px solid #b5bfc9}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:first-child{-ms-flex-preferred-size:66.66%;flex-basis:66.66%}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column #editor .editor-editor-interface{height:100%}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child{overflow:hidden;-ms-flex-preferred-size:33.33%;flex-basis:33.33%;max-width:300px;border-left:1px solid #b5bfc9}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs{width:100%;height:100%;margin:0}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .components-panel__header{z-index:10;height:auto;border-bottom-color:#b5bfc9;background:#f8f9fa}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .components-panel__header button{font-size:.875rem;font-weight:500;position:relative;height:44px;outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .components-panel__header button i{margin-right:5px}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .components-panel__header button.is-active:after,.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .components-panel__header button:hover:after{visibility:visible;width:100%;height:3px;content:"";background:#069de3;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .rank-math-tab-content-ai-tools{padding:0}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child .rank-math-tabs .rank-math-tab-content-ai-tools .content-ai-header{position:sticky;z-index:10;top:0;margin:-1rem -1rem 1rem;padding:1rem;background:-webkit-gradient(linear, left top, left bottom, from(rgb(255, 255, 255)), color-stop(80%, rgba(255, 255, 255, 0.7)), to(rgba(255, 255, 255, 0)));background:linear-gradient(180deg, rgb(255, 255, 255) 0%, rgba(255, 255, 255, 0.7) 80%, rgba(255, 255, 255, 0) 100%)}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child.has-collapsed{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-width:48px}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child.has-collapsed button{margin-top:7px}.rank-math-tab-content-content-editor .wp-block-columns .wp-block-column:last-child.has-collapsed{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.rank-math-tab-content-content-editor .is-root-container{min-height:100%;padding:1rem 2rem 1rem}.rank-math-tab-content-content-editor .is-root-container p{font-size:1.125rem;line-height:1.6}.rank-math-tab-content-usage .rank-math-usage-tab-wrapper{max-width:1120px}.rank-math-tab-content-usage .rank-math-usage-tab-wrapper .tab-header{border-bottom:none;padding-left:0;padding-right:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-tab-content-usage .rank-math-usage-tab-wrapper .tab-header .update-credits .rank-math-tooltip{color:inherit}.rank-math-tab-content-usage .rank-math-usage-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .875rem;border:1px solid #dadfe4;border-bottom:0;border-radius:4px 4px 0 0;background:#f6f7f7;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#50575e}.rank-math-tab-content-usage .rank-math-usage-header+.rank-math-usage-list{border-top-left-radius:0;border-top-right-radius:0}.rank-math-tab-content-usage .rank-math-usage-list{margin:0;padding:0;list-style:none;border:1px solid #dadfe4;border-radius:4px;overflow:hidden}.rank-math-tab-content-usage .rank-math-usage-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.625rem .875rem;margin-bottom:0;border-bottom:1px solid #dadfe4;background-color:#fff;font-size:.875rem}.rank-math-tab-content-usage .rank-math-usage-item:last-child{border-bottom:0}.rank-math-tab-content-usage .rank-math-usage-item-label{color:#1e1e1e}.rank-math-tab-content-usage .rank-math-usage-item-value{font-weight:500;color:#3c434a;white-space:nowrap}.rank-math-tab-content-usage .rank-math-usage-item-value a{color:#2271b1;text-decoration:none}.rank-math-tab-content-usage .rank-math-usage-item-value a:hover{text-decoration:underline}@-webkit-keyframes rank-math-usage-shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}@keyframes rank-math-usage-shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}.rank-math-tab-content-usage .rank-math-usage-item--skeleton{pointer-events:none}.rank-math-tab-content-usage .rank-math-usage-item--skeleton .rank-math-usage-skeleton-label,.rank-math-tab-content-usage .rank-math-usage-item--skeleton .rank-math-usage-skeleton-value{display:inline-block;height:.875rem;border-radius:3px;background:-webkit-gradient(linear, left top, right top, color-stop(25%, #ececec), color-stop(50%, #f5f5f5), color-stop(75%, #ececec));background:linear-gradient(90deg, #ececec 25%, #f5f5f5 50%, #ececec 75%);background-size:800px 100%;-webkit-animation:rank-math-usage-shimmer 1.4s infinite linear;animation:rank-math-usage-shimmer 1.4s infinite linear}.rank-math-tab-content-usage .rank-math-usage-item--skeleton .rank-math-usage-skeleton-label{width:55%}.rank-math-tab-content-usage .rank-math-usage-item--skeleton .rank-math-usage-skeleton-value{width:15%}.rank-math-tab-content-usage .rank-math-usage-error{margin-bottom:.75rem}.rank-math-tab-content-usage .rank-math-usage-error p{margin:0}.rank-math-loader{width:25px;-webkit-animation:loading 1s infinite linear alternate;animation:loading 1s infinite linear alternate;background:var(--c) 0 50%,var(--c) 50% 50%,var(--c) 100% 50%;aspect-ratio:1;--c: linear-gradient(#000 0 0) no-repeat}#rank_math_metabox_content_ai div.rank-math-ca-credits .update-credits{position:static}#rank_math_metabox_content_ai div.rank-math-ca-credits .update-credits i:before{margin-bottom:0}#rank_math_metabox_content_ai div.rank-math-ca-credits .update-credits.rank-math-tooltip span{left:0}#rank_math_metabox_content_ai div.rank-math-ca-credits .update-credits.rank-math-tooltip span:after{left:52%}.rank-math-rm-modal .rank-math-content-ai-wrapper.is-opened{padding-top:20px !important}.rank-math-rm-modal .rank-math-content-ai-wrapper.is-opened .rank-math-ca-credits{top:5px;margin-top:0;color:#444}.rank-math-rm-modal .rank-math-content-ai-wrapper.is-opened .rank-math-ca-credits button.update-credits{color:#444}.rank-math-content-ai-notice.is-page{margin:15px 0 15px}.rank-math-feature-usage{font-style:italic;position:relative;z-index:100;margin-top:.5em !important;margin-bottom:0;opacity:.6}PK     ¥ŠU]©Æ?"  "  :  includes/modules/content-ai/assets/css/content-ai-dark.cssnu „[µü¤        .tab-header,.chat-container,.chat-sidebar,.chat-input,.chat-input textarea,.chat-input .chat-input-textarea,.chat-input-actions .chat-input-buttons,div.form-field .components-base-control input[type=text]:focus,div.form-field .components-base-control input[type=text]:active,.rank-math-contentai-modal.rank-math-modal .components-text-control__input,.rank-math-contentai-modal-overlay .rank-math-modal .column .footer input,.components-modal__frame.rank-math-contentai-modal.rank-math-modal .components-input-control__container,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input{background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .chat-input-actions .button:hover{border-color:#212f3e !important;background:#212f3e !important}.rank-math-contentai-modal-overlay .rank-math-modal .column .footer input,.components-modal__frame.rank-math-contentai-modal.rank-math-modal .components-input-control__container{color:#fff}.rank-math-contentai-modal-overlay .rank-math-modal .column.column-output .tutorial{background:#686868}.rank-math-contentai-modal.rank-math-modal .components-text-control__input{border:1px solid #7f868d}.rank-math-prompt-modal .grid .column-first .components-search-control:after{top:5px}.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:hover,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:focus,.rank-math-prompt-modal .grid .column-first .components-search-control input.components-search-control__input:active{background:rgba(0,0,0,0)}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button{margin-top:15px}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button{margin-top:15px}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button{margin-top:15px}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-moz-placeholder)+.components-search-control__icon button svg{fill:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:-ms-input-placeholder)+.components-search-control__icon button svg{fill:#7f868d}.content-ai-filter .search-field .components-search-control input.components-search-control__input:not(:placeholder-shown)+.components-search-control__icon button svg{fill:#7f868d}.content-ai-tagify .tagify .tagify__tag{background:#686868}.content-ai-header .components-input-control__container{background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .rank-math-tab-content-chat .button:hover:not(:disabled){background:rgba(0,0,0,0);color:#ed5e5e}.rank-math-contentai-modal-overlay ::-webkit-input-placeholder{color:#616263}div.form-field .components-base-control .components-toggle-group-control{background:#686868}div.form-field .components-base-control .components-toggle-group-control .components-button{color:#fff}.rank-math-tabs button.rank-math-content-ai{background-color:rgba(0,0,0,0) !important}.rank-math-tabs .rank-math-ca-keywords-wrapper{background-color:rgba(0,0,0,.15)}.rank-math-tabs .rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper{color:#e0e1e3}.rank-math-tabs .rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper input{background-color:rgba(0,0,0,.1)}.rank-math-tabs .rank-math-ca-keywords-wrapper .rank-math-ca-credits-wrapper .rank-math-ca-force-update{background:#33363b}.rank-math-tabs div.rank-math-contentai-tab-content-questions h3{color:#e0e1e3;background-color:rgba(0,0,0,.15)}.rank-math-tabs .rank-math-ca-recommendations>div h4,.rank-math-tabs .rank-math-ca-recommendations>div strong,.rank-math-tabs .rank-math-ca-recommendations>div span{color:#e0e1e3}.rank-math-tabs .rank-math-ca-recommendations>div.has-children .submenu div h4{color:#26292c}.rank-math-tabs .rank-math-contentai-tab-content-questions .rank-math-section-heading h2,.rank-math-tabs .rank-math-contentai-tab-content-questions button i,.rank-math-tabs .rank-math-contentai-tab-content-related-searches .rank-math-section-heading h2,.rank-math-tabs .rank-math-contentai-tab-content-related-searches button i{color:#e0e1e3}.rank-math-tabs .rank-math-contentai-tab-content-questions button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link),.rank-math-tabs .rank-math-contentai-tab-content-related-searches button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){background:#26292c}.rank-math-tabs .rank-math-ai-tools .components-toggle-group-control{background-color:rgba(0,0,0,0)}.rank-math-tabs .rank-math-ai-tools .content-ai-tagify,.rank-math-tabs .rank-math-ai-tools .tagify{background-color:rgba(0,0,0,0)}.rank-math-tabs .rank-math-ai-tools .tagify__tag{background:#686868}.rank-math-tabs .rank-math-tab-content-ai-tools .components-search-control__input{min-height:30px;background-color:rgba(0,0,0,0) !important}.rank-math-tabs .rank-math-tab-content-ai-tools button.rank-math-box{background-color:rgba(0,0,0,0)}.rank-math-tabs .rank-math-tab-content-ai-tools button.rank-math-box h3{color:#fff}.rank-math-contentai-modal-overlay .rank-math-modal .column,.rank-math-contentai-modal-overlay .rank-math-modal .footer{background-color:rgba(0,0,0,0) !important}.rank-math-contentai-modal-overlay .rank-math-modal .column .tutorial,.rank-math-contentai-modal-overlay .rank-math-modal .footer .tutorial{background-color:#222}.rank-math-contentai-modal-overlay .rank-math-modal .column .inner-wrapper .output-item .output-actions{background:rgba(0,0,0,0) !important}.rank-math-contentai-modal-overlay .rank-math-modal .column .inner-wrapper .output-item .word-count,.rank-math-contentai-modal-overlay .rank-math-modal .column .inner-wrapper .output-item .content{color:#fff !important}.rank-math-contentai-modal-overlay .rank-math-modal .content-ai-tagify .tagify{background-color:rgba(0,0,0,0)}.rank-math-contentai-modal-overlay .rank-math-modal .content-ai-tagify .tagify .tagify__tag{background-color:#686868}div.rank-math-content-ai-wrapper .rank-math-content-ai-data.loading:after{background-color:rgba(0,0,0,.85)}div.rank-math-content-ai-wrapper .rank-math-ca-keywords-wrapper,div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title,div.rank-math-content-ai-wrapper .rank-math-ca-recommendations>div,div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs{border-color:#34383c}div.rank-math-content-ai-wrapper .rank-math-ca-keywords-wrapper .rank-math-ca-keywords-wrapper,div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title .rank-math-ca-keywords-wrapper,div.rank-math-content-ai-wrapper .rank-math-ca-recommendations>div .rank-math-ca-keywords-wrapper,div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs .rank-math-ca-keywords-wrapper{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}div.rank-math-content-ai-wrapper .rank-math-ca-keywords-wrapper.has-children .submenu,div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title.has-children .submenu,div.rank-math-content-ai-wrapper .rank-math-ca-recommendations>div.has-children .submenu,div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs.has-children .submenu{background-color:#26292c}div.rank-math-content-ai-wrapper .rank-math-ca-keywords-wrapper.has-children .submenu div h4,div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title.has-children .submenu div h4,div.rank-math-content-ai-wrapper .rank-math-ca-recommendations>div.has-children .submenu div h4,div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs.has-children .submenu div h4{color:#e0e1e3}div.rank-math-content-ai-wrapper .rank-math-ca-keywords-wrapper.has-children.show .submenu:before,div.rank-math-content-ai-wrapper .rank-math-content-ai-data h3.rank-math-ca-section-title.has-children.show .submenu:before,div.rank-math-content-ai-wrapper .rank-math-ca-recommendations>div.has-children.show .submenu:before,div.rank-math-content-ai-wrapper .rank-math-contentai-tabs .components-tab-panel__tabs.has-children.show .submenu:before{border-color:rgba(0,0,0,0) rgba(0,0,0,0) #26292c rgba(0,0,0,0)}div.rank-math-content-ai-wrapper .rank-math-ca-score .score-dot{border-color:#404349}PK     ¥ŠU]Îj:�3  3  +  includes/modules/content-ai/class-admin.phpnu „[µü¤        <?php
/**
 * The Content AI module.
 *
 * @since      1.0.219
 * @package    RankMath
 * @subpackage RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Arr;
use RankMath\CMB2;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin {
	use Hooker;

	/**
	 * Content_AI object.
	 *
	 * @var object
	 */
	public $content_ai;

	/**
	 * Class constructor.
	 *
	 * @param Object $content_ai Content_AI class object.
	 */
	public function __construct( $content_ai ) {
		if ( ! is_admin() ) {
			return;
		}

		$this->content_ai = $content_ai;
		$this->filter( 'rank_math/analytics/post_data', 'add_contentai_data' );
		$this->filter( 'rank_math/settings/general', 'add_settings' );
		$this->action( 'cmb2_admin_init', 'add_content_ai_metabox', 11 );
		$this->action( 'rank_math/deregister_site', 'remove_credits_data' );
		$this->filter( 'rank_math/status/rank_math_info', 'content_ai_info' );
		$this->action( 'rank_math/connect/account_connected', 'refresh_content_ai_credits' );
	}

	/**
	 * Add Content AI score in Single Page Site Analytics.
	 *
	 * @param  array $data array.
	 * @return array $data sorted array.
	 */
	public function add_contentai_data( $data ) {
		$post_id                = $data['object_id'];
		$content_ai_data        = Helper::get_post_meta( 'contentai_score', $post_id );
		$content_ai_score       = ! empty( $content_ai_data ) ? round( array_sum( array_values( $content_ai_data ) ) / count( $content_ai_data ) ) : 0;
		$data['contentAiScore'] = absint( $content_ai_score );

		return $data;
	}

	/**
	 * Remove credits data when site is disconnected.
	 */
	public function remove_credits_data() {
		delete_option( 'rank_math_ca_credits' );
	}

	/**
	 * Add module settings in the General Settings panel.
	 *
	 * @param  array $tabs Array of option panel tabs.
	 * @return array
	 */
	public function add_settings( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'content-ai' => [
					'icon'  => 'rm-icon rm-icon-content-ai',
					'title' => esc_html__( 'Content AI', 'seo-by-rank-math' ),
					/* translators: Link to kb article */
					'desc'  => sprintf( esc_html__( 'Get sophisticated AI suggestions for related Keywords, Questions & Links to include in the SEO meta & Content Area. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'content-ai-settings', 'Options Panel Content AI Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
					'file'  => __DIR__ . '/views/options.php',
					'json'  => [
						'countries'   => Helper::choices_contentai_countries(),
						'credits'     => Helper::get_credits(),
						'refreshDate' => Helper::get_content_ai_refresh_date(),
						'tone'        => Helper::choices_contentai_tone(),
						'audience'    => Helper::choices_contentai_audience(),
						'language'    => Helper::choices_contentai_language(),
					],
				],
			],
			8
		);

		return $tabs;
	}

	/**
	 * Add link suggestion metabox.
	 */
	public function add_content_ai_metabox() {
		if ( ! $this->content_ai->can_add_tab() || 'classic' !== Helper::get_current_editor() ) {
			return;
		}

		$id  = 'rank_math_metabox_content_ai';
		$cmb = new_cmb2_box(
			[
				'id'               => $id,
				'title'            => esc_html__( 'Content AI', 'seo-by-rank-math' ),
				'object_types'     => array_keys( Helper::get_accessible_post_types() ),
				'context'          => 'side',
				'priority'         => 'high',
				'mb_callback_args' => [
					'__block_editor_compatible_meta_box' => false,
					'__back_compat_meta_box'             => \rank_math_is_gutenberg(),
				],
			]
		);

		CMB2::pre_init( $cmb );

		// Move content AI metabox below the Publish box.
		$this->reorder_content_ai_metabox( $id );
	}

	/**
	 * Add Content AI details in System Info
	 *
	 * @param array $rankmath Array of rankmath.
	 */
	public function content_ai_info( $rankmath ) {
		$refresh_date = Helper::get_content_ai_refresh_date();
		$content_ai   = [
			'ca_plan'         => [
				'label' => esc_html__( 'Content AI Plan', 'seo-by-rank-math' ),
				'value' => \ucwords( Helper::get_content_ai_plan() ),
			],
			'ca_credits'      => [
				'label' => esc_html__( 'Content AI Credits', 'seo-by-rank-math' ),
				'value' => Helper::get_content_ai_credits(),
			],
			'ca_refresh_date' => [
				'label' => esc_html__( 'Content AI Refresh Date', 'seo-by-rank-math' ),
				'value' => $refresh_date ? wp_date( 'Y-m-d g:i a', $refresh_date ) : '',
			],
		];

		array_splice( $rankmath['fields'], 3, 0, $content_ai );

		return $rankmath;
	}

	/**
	 * Refresh Content AI credits when account is connected.
	 *
	 * @return void
	 */
	public function refresh_content_ai_credits() {
		Helper::get_content_ai_credits( true );
	}

	/**
	 * Reorder the Content AI metabox in Classic editor.
	 *
	 * @param string $id Metabox ID.
	 * @return void
	 */
	private function reorder_content_ai_metabox( $id ) {
		$post_type = Helper::get_post_type();
		if ( ! $post_type ) {
			return;
		}

		$user  = wp_get_current_user();
		$order = (array) get_user_option( 'meta-box-order_' . $post_type, $user->ID );
		if ( ! empty( $order['normal'] ) && false !== strpos( $order['normal'], $id ) ) {
			return;
		}

		$order['side'] = ! isset( $order['side'] ) ? '' : $order['side'];
		if ( false !== strpos( $order['side'], $id ) ) {
			return;
		}

		if ( false === strpos( $order['side'], 'submitdiv' ) ) {
			$order['side'] = 'submitdiv,' . $order['side'];
		}

		if ( ',' === substr( $order['side'], -1 ) ) {
			$order['side'] = substr( $order['side'], 0, -1 );
		}

		$current_order = [];
		$current_order = explode( ',', $order['side'] );

		$key = array_search( 'submitdiv', $current_order, true );
		if ( false === $key ) {
			return;
		}

		$new_order = array_merge(
			array_slice( $current_order, 0, $key + 1 ),
			[ $id ]
		);

		if ( count( $current_order ) > $key ) {
			$new_order = array_merge(
				$new_order,
				array_slice( $current_order, $key + 1 )
			);
		}

		$order['side'] = implode( ',', array_unique( $new_order ) );
		update_user_option( $user->ID, 'meta-box-order_' . $post_type, $order, true );
	}
}
PK     ¥ŠU]ƒÝvjæ   æ   *  includes/modules/content-ai/views/main.phpnu „[µü¤        <?php
/**
 * Content AI Page main view.
 *
 * @package RankMath
 * @subpackage RankMath\Role_Manager
 */

defined( 'ABSPATH' ) || exit;
?>
<div id="rank-math-content-ai-page">
	<div class="rank-math-box container">
	</div>
</div>
PK     ¥ŠU]í°ŽÓX0  X0  -  includes/modules/content-ai/views/options.phpnu „[µü¤        <?php
/**
 * Content AI general settings.
 *
 * @package    RankMath
 * @subpackage RankMath\ContentAI
 */

use RankMath\Helper;
use RankMath\KB;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

if ( ! Helper::is_site_connected() ) {
	$cmb->add_field(
		[
			'id'      => 'rank_math_content_ai_settings',
			'type'    => 'raw',
			'content' => '<div id="setting-panel-content-ai" class="rank-math-tab rank-math-options-panel-content exclude">
				<div class="wp-core-ui rank-math-ui connect-wrap">
					<a href="' . Admin_Helper::get_activate_url( Helper::get_settings_url( 'general', 'content-ai' ) ) . '" class="button button-primary button-connect button-animated" name="rank_math_activate">'
					. esc_html__( 'Connect Your Rank Math Account', 'seo-by-rank-math' )
					. '</a>
				</div>
				<div id="rank-math-pro-cta" class="content-ai-settings">
					<div class="rank-math-cta-box width-100 no-shadow no-padding no-border">
						<h3>' . esc_html__( 'Benefits of Connecting Rank Math Account', 'seo-by-rank-math' ) . '</h3>
						<ul>
							<li>' . esc_html__( 'Gain Access to 40+ Advanced AI Tools.', 'seo-by-rank-math' ) . '</li>
							<li>' . esc_html__( 'Experience the Revolutionary AI-Powered Content Editor.', 'seo-by-rank-math' ) . '</li>
							<li>' . esc_html__( 'Engage with RankBot, Our AI Chatbot, For SEO Advice.', 'seo-by-rank-math' ) . '</li>
							<li>' . esc_html__( 'Escape the Writer\'s Block Using AI to Write Inside WordPress.', 'seo-by-rank-math' ) . '</li>
						</ul>
					</div>
				</div>
			</div>',
		]
	);
	return;
}

$cmb->add_field(
	[
		'id'      => 'content_ai_country',
		'type'    => 'select',
		'name'    => esc_html__( 'Default Country', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Content AI tailors keyword research to the target country for highly relevant suggestions. You can override this in individual posts/pages/CPTs.', 'seo-by-rank-math' ),
		'options' => Helper::choices_contentai_countries(),
		'default' => 'all',
	]
);

$cmb->add_field(
	[
		'id'         => 'content_ai_tone',
		'type'       => 'select',
		'name'       => esc_html__( 'Default Tone', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'This feature enables the default primary tone or writing style that characterizes your content. You can override this in individual tools.', 'seo-by-rank-math' ),
		'default'    => 'Formal',
		'attributes' => ( 'data-s2' ),
		'options'    => [
			'Analytical'     => esc_html__( 'Analytical', 'seo-by-rank-math' ),
			'Argumentative'  => esc_html__( 'Argumentative', 'seo-by-rank-math' ),
			'Casual'         => esc_html__( 'Casual', 'seo-by-rank-math' ),
			'Conversational' => esc_html__( 'Conversational', 'seo-by-rank-math' ),
			'Creative'       => esc_html__( 'Creative', 'seo-by-rank-math' ),
			'Descriptive'    => esc_html__( 'Descriptive', 'seo-by-rank-math' ),
			'Emotional'      => esc_html__( 'Emotional', 'seo-by-rank-math' ),
			'Empathetic'     => esc_html__( 'Empathetic', 'seo-by-rank-math' ),
			'Expository'     => esc_html__( 'Expository', 'seo-by-rank-math' ),
			'Factual'        => esc_html__( 'Factual', 'seo-by-rank-math' ),
			'Formal'         => esc_html__( 'Formal', 'seo-by-rank-math' ),
			'Friendly'       => esc_html__( 'Friendly', 'seo-by-rank-math' ),
			'Humorous'       => esc_html__( 'Humorous', 'seo-by-rank-math' ),
			'Informal'       => esc_html__( 'Informal', 'seo-by-rank-math' ),
			'Journalese'     => esc_html__( 'Journalese', 'seo-by-rank-math' ),
			'Narrative'      => esc_html__( 'Narrative', 'seo-by-rank-math' ),
			'Objective'      => esc_html__( 'Objective', 'seo-by-rank-math' ),
			'Opinionated'    => esc_html__( 'Opinionated', 'seo-by-rank-math' ),
			'Persuasive'     => esc_html__( 'Persuasive', 'seo-by-rank-math' ),
			'Poetic'         => esc_html__( 'Poetic', 'seo-by-rank-math' ),
			'Satirical'      => esc_html__( 'Satirical', 'seo-by-rank-math' ),
			'Story-telling'  => esc_html__( 'Story-telling', 'seo-by-rank-math' ),
			'Subjective'     => esc_html__( 'Subjective', 'seo-by-rank-math' ),
			'Technical'      => esc_html__( 'Technical', 'seo-by-rank-math' ),
		],
	],
);

$cmb->add_field(
	[
		'id'         => 'content_ai_audience',
		'type'       => 'select',
		'name'       => esc_html__( 'Default Audience', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'This option lets you set the default audience that usually reads your content. You can override this in individual tools.', 'seo-by-rank-math' ),
		'default'    => 'General Audience',
		'attributes' => ( 'data-s2' ),
		'options'    => [
			'Activists'                => esc_html__( 'Activists', 'seo-by-rank-math' ),
			'Artists'                  => esc_html__( 'Artists', 'seo-by-rank-math' ),
			'Authors'                  => esc_html__( 'Authors', 'seo-by-rank-math' ),
			'Bargain Hunters'          => esc_html__( 'Bargain Hunters', 'seo-by-rank-math' ),
			'Bloggers'                 => esc_html__( 'Bloggers', 'seo-by-rank-math' ),
			'Business Owners'          => esc_html__( 'Business Owners', 'seo-by-rank-math' ),
			'Collectors'               => esc_html__( 'Collectors', 'seo-by-rank-math' ),
			'Cooks'                    => esc_html__( 'Cooks', 'seo-by-rank-math' ),
			'Crafters'                 => esc_html__( 'Crafters', 'seo-by-rank-math' ),
			'Dancers'                  => esc_html__( 'Dancers', 'seo-by-rank-math' ),
			'DIYers'                   => esc_html__( 'DIYers', 'seo-by-rank-math' ),
			'Designers'                => esc_html__( 'Designers', 'seo-by-rank-math' ),
			'Educators'                => esc_html__( 'Educators', 'seo-by-rank-math' ),
			'Engineers'                => esc_html__( 'Engineers', 'seo-by-rank-math' ),
			'Entrepreneurs'            => esc_html__( 'Entrepreneurs', 'seo-by-rank-math' ),
			'Environmentalists'        => esc_html__( 'Environmentalists', 'seo-by-rank-math' ),
			'Fashionistas'             => esc_html__( 'Fashionistas', 'seo-by-rank-math' ),
			'Fitness Enthusiasts'      => esc_html__( 'Fitness Enthusiasts', 'seo-by-rank-math' ),
			'Foodies'                  => esc_html__( 'Foodies', 'seo-by-rank-math' ),
			'Gaming Enthusiasts'       => esc_html__( 'Gaming Enthusiasts', 'seo-by-rank-math' ),
			'Gardeners'                => esc_html__( 'Gardeners', 'seo-by-rank-math' ),
			'General Audience'         => esc_html__( 'General Audience', 'seo-by-rank-math' ),
			'Health Enthusiasts'       => esc_html__( 'Health Enthusiasts', 'seo-by-rank-math' ),
			'Healthcare Professionals' => esc_html__( 'Healthcare Professionals', 'seo-by-rank-math' ),
			'Indoor Hobbyists'         => esc_html__( 'Indoor Hobbyists', 'seo-by-rank-math' ),
			'Investors'                => esc_html__( 'Investors', 'seo-by-rank-math' ),
			'Job Seekers'              => esc_html__( 'Job Seekers', 'seo-by-rank-math' ),
			'Movie Buffs'              => esc_html__( 'Movie Buffs', 'seo-by-rank-math' ),
			'Musicians'                => esc_html__( 'Musicians', 'seo-by-rank-math' ),
			'Outdoor Enthusiasts'      => esc_html__( 'Outdoor Enthusiasts', 'seo-by-rank-math' ),
			'Parents'                  => esc_html__( 'Parents', 'seo-by-rank-math' ),
			'Pet Owners'               => esc_html__( 'Pet Owners', 'seo-by-rank-math' ),
			'Photographers'            => esc_html__( 'Photographers', 'seo-by-rank-math' ),
			'Podcast Listeners'        => esc_html__( 'Podcast Listeners', 'seo-by-rank-math' ),
			'Professionals'            => esc_html__( 'Professionals', 'seo-by-rank-math' ),
			'Retirees'                 => esc_html__( 'Retirees', 'seo-by-rank-math' ),
			'Russian'                  => esc_html__( 'Russian', 'seo-by-rank-math' ),
			'Seniors'                  => esc_html__( 'Seniors', 'seo-by-rank-math' ),
			'Social Media Users'       => esc_html__( 'Social Media Users', 'seo-by-rank-math' ),
			'Sports Fans'              => esc_html__( 'Sports Fans', 'seo-by-rank-math' ),
			'Students'                 => esc_html__( 'Students', 'seo-by-rank-math' ),
			'Tech Enthusiasts'         => esc_html__( 'Tech Enthusiasts', 'seo-by-rank-math' ),
			'Travelers'                => esc_html__( 'Travelers', 'seo-by-rank-math' ),
			'TV Enthusiasts'           => esc_html__( 'TV Enthusiasts', 'seo-by-rank-math' ),
			'Video Creators'           => esc_html__( 'Video Creators', 'seo-by-rank-math' ),
			'Writers'                  => esc_html__( 'Writers', 'seo-by-rank-math' ),
		],
	],
);

$cmb->add_field(
	[
		'id'         => 'content_ai_language',
		'type'       => 'select',
		'name'       => esc_html__( 'Default Language', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'This option lets you set the default language for content generated using Content AI. You can override this in individual tools.', 'seo-by-rank-math' ),
		'default'    => Helper::content_ai_default_language(),
		'attributes' => ( 'data-s2' ),
		'options'    => [
			'US English' => esc_html__( 'US English', 'seo-by-rank-math' ),
			'UK English' => esc_html__( 'UK English', 'seo-by-rank-math' ),
			'Arabic'     => esc_html__( 'Arabic', 'seo-by-rank-math' ),
			'Bulgarian'  => esc_html__( 'Bulgarian', 'seo-by-rank-math' ),
			'Chinese'    => esc_html__( 'Chinese', 'seo-by-rank-math' ),
			'Czech'      => esc_html__( 'Czech', 'seo-by-rank-math' ),
			'Danish'     => esc_html__( 'Danish', 'seo-by-rank-math' ),
			'Dutch'      => esc_html__( 'Dutch', 'seo-by-rank-math' ),
			'Estonian'   => esc_html__( 'Estonian', 'seo-by-rank-math' ),
			'Finnish'    => esc_html__( 'Finnish', 'seo-by-rank-math' ),
			'French'     => esc_html__( 'French', 'seo-by-rank-math' ),
			'German'     => esc_html__( 'German', 'seo-by-rank-math' ),
			'Greek'      => esc_html__( 'Greek', 'seo-by-rank-math' ),
			'Hebrew'     => esc_html__( 'Hebrew', 'seo-by-rank-math' ),
			'Hungarian'  => esc_html__( 'Hungarian', 'seo-by-rank-math' ),
			'Indonesian' => esc_html__( 'Indonesian', 'seo-by-rank-math' ),
			'Italian'    => esc_html__( 'Italian', 'seo-by-rank-math' ),
			'Japanese'   => esc_html__( 'Japanese', 'seo-by-rank-math' ),
			'Korean'     => esc_html__( 'Korean', 'seo-by-rank-math' ),
			'Latvian'    => esc_html__( 'Latvian', 'seo-by-rank-math' ),
			'Lithuanian' => esc_html__( 'Lithuanian', 'seo-by-rank-math' ),
			'Norwegian'  => esc_html__( 'Norwegian', 'seo-by-rank-math' ),
			'Polish'     => esc_html__( 'Polish', 'seo-by-rank-math' ),
			'Portuguese' => esc_html__( 'Portuguese', 'seo-by-rank-math' ),
			'Romanian'   => esc_html__( 'Romanian', 'seo-by-rank-math' ),
			'Russian'    => esc_html__( 'Russian', 'seo-by-rank-math' ),
			'Slovak'     => esc_html__( 'Slovak', 'seo-by-rank-math' ),
			'Slovenian'  => esc_html__( 'Slovenian', 'seo-by-rank-math' ),
			'Spanish'    => esc_html__( 'Spanish', 'seo-by-rank-math' ),
			'Swedish'    => esc_html__( 'Swedish', 'seo-by-rank-math' ),
			'Turkish'    => esc_html__( 'Turkish', 'seo-by-rank-math' ),
		],
	],
);

$post_types = Helper::choices_post_types();
if ( isset( $post_types['attachment'] ) ) {
	unset( $post_types['attachment'] );
}

$cmb->add_field(
	[
		'id'      => 'content_ai_post_types',
		'type'    => 'multicheck_inline',
		'name'    => esc_html__( 'Select Post Type', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Choose the type of posts/pages/CPTs where you want to use Content AI.', 'seo-by-rank-math' ),
		'options' => $post_types,
		'default' => array_keys( $post_types ),
	]
);

$credits = Helper::get_credits();
if ( Helper::is_site_connected() && false !== $credits ) {
	$update_credits = '<a href="#" class="rank-math-tooltip update-credit">
		<i class="dashicons dashicons-image-rotate"></i>
		<span>' . esc_html__( 'Click to refresh the available credits.', 'seo-by-rank-math' ) . '</span>
	</a>';

	$refresh_date = Helper::get_content_ai_refresh_date();
	$cmb->add_field(
		[
			'id'      => 'content_ai_credits',
			'type'    => 'raw',
			/* translators: 1. Credits left 2. Buy more credits link */
			'content' => '<div class="cmb-row buy-more-credits rank-math-exclude-from-search">' . $update_credits . sprintf( esc_html__( '%1$s credits left this month. Credits will renew on %2$s or you can upgrade to get more credits %3$s.', 'seo-by-rank-math' ), '<strong>' . $credits . '</strong>', wp_date( 'Y-m-d g:i a', $refresh_date ), '<a href="' . KB::get( 'content-ai-pricing-tables', 'Buy CAI Credits Options Panel' ) . '" target="_blank">' . esc_html__( 'here', 'seo-by-rank-math' ) . '</a>' ) . '</div>',
		]
	);
}
PK     ¥ŠU]\�W¿¬,  ¬,  2  includes/modules/content-ai/class-bulk-actions.phpnu „[µü¤        <?php
/**
 * Add Content AI Bulk Action options.
 *
 * @since      1.0.212
 * @package    RankMath
 * @subpackage RankMath\Content_AI_Page
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Paper\Paper;
use RankMath\Admin\Admin_Helper;
use RankMath\Post;
use RankMath\Term;

defined( 'ABSPATH' ) || exit;

/**
 * Bulk_Actions class.
 */
class Bulk_Actions {
	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init' );
		$this->action( 'admin_init', 'init_admin', 15 );
		$this->action( 'rank_math/content_ai/generate_alt', 'generate_image_alt' );
		$this->filter( 'rank_math/database/tools', 'add_tools' );
		$this->filter( 'rank_math/tools/content_ai_cancel_bulk_edit_process', 'cancel_bulk_edit_process' );
	}

	/**
	 * Init function.
	 */
	public function init() {
		Bulk_Edit_SEO_Meta::get();
		Bulk_Image_Alt::get();
	}

	/**
	 * Init.
	 */
	public function init_admin() {
		// Add Bulk actions for Posts.
		$post_types = Helper::get_settings( 'general.content_ai_post_types', [] );
		foreach ( $post_types as $post_type ) {
			$this->filter( "bulk_actions-edit-{$post_type}", 'bulk_actions', 9 );
			$this->filter( "handle_bulk_actions-edit-{$post_type}", 'handle_bulk_actions', 10, 3 );
		}

		// Add Bulk Generate on Attachment page.
		$this->filter( 'bulk_actions-upload', 'bulk_actions_attachment' );
		$this->filter( 'handle_bulk_actions-upload', 'handle_bulk_actions', 10, 3 );

		// Add Bulk Actions for Taxonomies.
		$taxonomies = Helper::get_accessible_taxonomies();
		unset( $taxonomies['post_format'] );
		$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
		foreach ( $taxonomies as $taxonomy => $label ) {
			$this->filter( "bulk_actions-edit-{$taxonomy}", 'bulk_actions' );
			$this->filter( "handle_bulk_actions-edit-{$taxonomy}", 'handle_bulk_actions', 10, 3 );
		}

		$this->filter( 'wp_bulk_edit_seo_meta_post_args', 'update_background_process_args' );
		$this->filter( 'wp_bulk_image_alt_post_args', 'update_background_process_args' );
	}

	/**
	 * Add bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  array $actions Actions.
	 * @return array          New actions.
	 */
	public function bulk_actions( $actions ) {
		if ( ! Helper::has_cap( 'content_ai' ) ) {
			return $actions;
		}

		$actions['rank_math_ai_options']                             = __( '&#8595; Rank Math Content AI', 'seo-by-rank-math' );
		$actions['rank_math_content_ai_fetch_seo_title']             = esc_html__( 'Write SEO Title with AI', 'seo-by-rank-math' );
		$actions['rank_math_content_ai_fetch_seo_description']       = esc_html__( 'Write SEO Description with AI', 'seo-by-rank-math' );
		$actions['rank_math_content_ai_fetch_seo_title_description'] = esc_html__( 'Write SEO Title & Description with AI', 'seo-by-rank-math' );
		$actions['rank_math_content_ai_fetch_image_alt']             = esc_html__( 'Write Image Alt Text with AI', 'seo-by-rank-math' );

		return $actions;
	}

	/**
	 * Add bulk actions for Attachment.
	 *
	 * @param  array $actions Actions.
	 * @return array          New actions.
	 */
	public function bulk_actions_attachment( $actions ) {
		if ( ! Helper::has_cap( 'content_ai' ) ) {
			return $actions;
		}

		$actions['rank_math_ai_options']                 = __( '&#8595; Rank Math Content AI', 'seo-by-rank-math' );
		$actions['rank_math_content_ai_fetch_image_alt'] = esc_html__( 'Write Image Alt Text with AI', 'seo-by-rank-math' );

		return $actions;
	}

	/**
	 * Handle bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  string $redirect   Redirect URL.
	 * @param  string $doaction   Performed action.
	 * @param  array  $object_ids Post IDs.
	 *
	 * @return string New redirect URL.
	 */
	public function handle_bulk_actions( $redirect, $doaction, $object_ids ) {
		if ( empty( $object_ids ) || ! in_array( $doaction, [ 'rank_math_content_ai_fetch_seo_title', 'rank_math_content_ai_fetch_seo_description', 'rank_math_content_ai_fetch_seo_title_description', 'rank_math_content_ai_fetch_image_alt' ], true ) ) {
			return $redirect;
		}

		if ( ! empty( get_option( 'rank_math_content_ai_posts' ) ) ) {
			Helper::add_notification(
				esc_html__( 'Another bulk editing process is already running. Please try again later after the existing process is complete.', 'seo-by-rank-math' ),
				[
					'type'    => 'warning',
					'id'      => 'rank_math_content_ai_posts_error',
					'classes' => 'rank-math-notice',
				]
			);

			return $redirect;
		}

		if ( 'rank_math_content_ai_fetch_image_alt' === $doaction ) {
			$this->generate_image_alt( $object_ids );
			return $redirect;
		}

		$action = 'both';
		if ( 'rank_math_content_ai_fetch_seo_title' === $doaction ) {
			$action = 'title';
		}

		if ( 'rank_math_content_ai_fetch_seo_description' === $doaction ) {
			$action = 'description';
		}

		$is_post_list = Admin_Helper::is_post_list();
		$data         = [
			'action'      => $action,
			'language'    => Helper::get_settings( 'general.content_ai_language', Helper::content_ai_default_language() ),
			'posts'       => [],
			'is_taxonomy' => ! $is_post_list,
		];

		$method = $is_post_list ? 'get_post_data' : 'get_term_data';
		foreach ( $object_ids as $object_id ) {
			$data['posts'][] = $this->$method( $object_id, $action );
		}

		Bulk_Edit_SEO_Meta::get()->start( $data );

		return $redirect;
	}

	/**
	 * Generate Image Alt for the attachmed Ids.
	 *
	 * @param array $object_ids Attachment Ids.
	 */
	public function generate_image_alt( $object_ids ) {
		$data = [
			'action' => 'image_alt',
			'posts'  => [],
		];

		foreach ( $object_ids as $object_id ) {
			if ( get_post_type( $object_id ) === 'attachment' ) {
				$data['posts'][ $object_id ] = [ wp_get_attachment_url( $object_id ) ];
				continue;
			}
			// Get all <img> tags from the post content.
			$images = [];
			preg_match_all( '/<img\\s[^>]+>/i', get_post_field( 'post_content', $object_id ), $images );

			// Keep only the image tags that have src attribute but no alt attribute.
			$images = array_filter(
				$images[0],
				function ( $image ) {
					return preg_match( '/src=[\'"]?([^\'" >]+)[\'" >]/i', $image, $matches ) && ( ! preg_match( '/alt="([^"]*)"/i', $image, $matches ) || preg_match( '/alt=""/i', $image, $matches ) );
				}
			);

			if ( empty( $images ) ) {
				continue;
			}

			$object                      = get_post( $object_id );
			$data['posts'][ $object_id ] = array_filter( array_values( $images ) );
		}

		Bulk_Image_Alt::get()->start( $data );
	}

	/**
	 * Change the timeout value in Background_Process to resolve the issue with notifications not appearing after completion in v1.2.
	 *
	 * @param array $args Process args.
	 *
	 * @return array
	 */
	public function update_background_process_args( $args ) {
		$args['timeout'] = 0.01;

		return $args;
	}

	/**
	 * Add database tools.
	 *
	 * @param array $tools Array of tools.
	 *
	 * @return array
	 */
	public function add_tools( $tools ) {
		$posts = get_option( 'rank_math_content_ai_posts' );

		// Early Bail if process is not running.
		if ( empty( $posts ) ) {
			return $tools;
		}

		$processed = get_option( 'rank_math_content_ai_posts_processed' );

		$tools['content_ai_cancel_bulk_edit_process'] = [
			'title'       => esc_html__( 'Cancel Content AI Bulk Editing Process', 'seo-by-rank-math' ),
			'description' => sprintf(
				// Translators: placeholders are the number of posts that were processed.
				esc_html__( 'Terminate the ongoing Content AI Bulk Editing Process to halt any pending modifications and revert to the previous state. The bulk metadata has been generated for %1$d out of %1$d posts so far.', 'seo-by-rank-math' ),
				$processed,
				count( $posts )
			),
			'button_text' => esc_html__( 'Terminate', 'seo-by-rank-math' ),
		];

		return $tools;
	}

	/**
	 * Function to cancel the Bulk Edit process.
	 */
	public function cancel_bulk_edit_process() {
		Bulk_Edit_SEO_Meta::get()->cancel();
		Helper::remove_notification( 'rank_math_content_ai_posts_started' );
		return __( 'Bulk Editing Process Successfully Cancelled', 'seo-by-rank-math' );
	}

	/**
	 * Get Post data.
	 *
	 * @param integer $object_id Post ID.
	 * @param string  $action    The action being performed (title, description, or both).
	 *
	 * @return array Post data.
	 */
	private function get_post_data( $object_id, $action = 'both' ) {
		$object = get_post( $object_id );
		return [
			'post_id'       => $object_id,
			'post_type'     => 'download' === $object->post_type ? 'Product' : ucfirst( $object->post_type ),
			'title'         => get_the_title( $object_id ),
			'focus_keyword' => Post::get_meta( 'focus_keyword', $object_id ),
			'summary'       => Helper::replace_vars( $this->get_content_for_ai( $object, $action ), $object ),
		];
	}

	/**
	 * Get Term data.
	 *
	 * @param integer $object_id Term ID.
	 * @param string  $action    The action being performed (title, description, or both).
	 *
	 * @return array Term data.
	 */
	private function get_term_data( $object_id, $action = 'both' ) {
		$object = get_term( $object_id );
		return [
			'post_id'       => $object_id,
			'post_type'     => $object->taxonomy,
			'title'         => $object->name,
			'focus_keyword' => Term::get_meta( 'focus_keyword', $object, $object->taxonomy ),
			'summary'       => Helper::replace_vars( $this->get_content_for_ai( $object, $action ), $object ),
		];
	}

	/**
	 * Get content for AI processing based on object type and action.
	 *
	 * @param object $current_object Object instance (WP_Post or WP_Term).
	 * @param string $action The action being performed (title, description, or both).
	 *
	 * @return string Content to use for AI generation.
	 */
	private function get_content_for_ai( $current_object, $action = 'both' ) {
		// For description generation, don't use current SEO descriptions.
		if ( $action === 'description' || $action === 'both' ) {
			return $this->get_content_without_seo_meta( $current_object );
		}

		// For title generation, prioritize existing SEO description.
		return $current_object instanceof \WP_Post
		? Post::get_meta( 'description', $current_object->ID, $this->get_content_without_seo_meta( $current_object ) )
		: Term::get_meta( 'description', $current_object, $current_object->taxonomy, $this->get_content_without_seo_meta( $current_object ) );
	}

	/**
	 * Get content from object without using SEO meta description.
	 *
	 * @param object $current_object Object instance (WP_Post or WP_Term).
	 *
	 * @return string Content from the object.
	 */
	private function get_content_without_seo_meta( $current_object ) {
		$is_post = $current_object instanceof \WP_Post;

		// For terms: term description > template.
		if ( ! $is_post ) {
			return ! empty( $current_object->description ) ? $current_object->description : Str::truncate( Paper::get_from_options( "tax_{$current_object->taxonomy}_description", $current_object ), 160 );
		}

		// For posts: excerpt > content > template.
		if ( ! empty( $current_object->post_excerpt ) ) {
			return $current_object->post_excerpt;
		}

		$content = wp_strip_all_tags( $current_object->post_content );
		if ( ! empty( $content ) ) {
			return Str::truncate( $content, 300 );
		}

		return Str::truncate( Paper::get_from_options( "pt_{$current_object->post_type}_description", $current_object ), 160 );
	}
}
PK     ¥ŠU]’N” ‘
  ‘
  0  includes/modules/content-ai/class-content-ai.phpnu „[µü¤        <?php
/**
 * The Content AI module.
 *
 * @since      1.0.71
 * @package    RankMath
 * @subpackage RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Url;

defined( 'ABSPATH' ) || exit;

/**
 * Content_AI class.
 */
class Content_AI {
	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'rest_api_init', 'init_rest_api' );
		new Content_AI_Page( $this );
		new Bulk_Actions();

		if ( ! Helper::has_cap( 'content_ai' ) ) {
			return;
		}

		new Admin( $this );
		new Assets( $this );
	}

	/**
	 * Load the REST API endpoints.
	 */
	public function init_rest_api() {
		$rest = new Rest();
		$rest->register_routes();
	}

	/**
	 * Whether to load Content AI data.
	 */
	public static function can_add_tab() {
		return in_array( Helper::get_post_type(), (array) Helper::get_settings( 'general.content_ai_post_types' ), true );
	}

	/**
	 * Localized data to use on the Content AI page.
	 *
	 * @param array $data Localized data for posts.
	 */
	public function localized_data( $data = [] ) {
		$refresh_date = Helper::get_content_ai_refresh_date();
		Helper::add_json(
			'contentAI',
			array_merge(
				$data,
				[
					'audience'              => (array) Helper::get_settings( 'general.content_ai_audience', 'General Audience' ),
					'tone'                  => (array) Helper::get_settings( 'general.content_ai_tone', 'Formal' ),
					'language'              => Helper::get_settings( 'general.content_ai_language', Helper::content_ai_default_language() ),
					'history'               => Helper::get_outputs(),
					'chats'                 => Helper::get_chats(),
					'recentPrompts'         => Helper::get_recent_prompts(),
					'prompts'               => Helper::get_prompts(),
					'isUserRegistered'      => Helper::is_site_connected(),
					'connectData'           => Admin_Helper::get_registration_data(),
					'connectSiteUrl'        => Admin_Helper::get_activate_url( Url::get_current_url() ),
					'credits'               => Helper::get_content_ai_credits(),
					'plan'                  => Helper::get_content_ai_plan(),
					'usageDetails'          => Helper::get_usage_details(),
					'errors'                => Helper::get_content_ai_errors(),
					'registerWriteShortcut' => version_compare( get_bloginfo( 'version' ), '6.2', '>=' ),
					'isMigrating'           => get_site_transient( 'rank_math_content_ai_migrating_user' ),
					'url'                   => CONTENT_AI_URL . '/ai/',
					'resetDate'             => $refresh_date ? wp_date( 'Y-m-d g:ia', $refresh_date ) : '',
				]
			)
		);
	}
}
PK     ¥ŠU]¿³;ÜS  ÜS  *  includes/modules/content-ai/class-rest.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.71
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Controller;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Rest class.
 */
class Rest extends WP_REST_Controller {

	/**
	 * Registered data.
	 *
	 * @var array|false
	 */
	private $registered;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace  = \RankMath\Rest\Rest_Helper::BASE . '/ca';
		$this->registered = Admin_Helper::get_registration_data();
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/researchKeyword',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'research_keyword' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => $this->get_research_keyword_args(),
			]
		);

		register_rest_route(
			$this->namespace,
			'/getCredits',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'get_credits' ],
				'permission_callback' => [ $this, 'has_permission' ],
			]
		);

		register_rest_route(
			$this->namespace,
			'/createPost',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'create_post' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'content' => [
						'description' => esc_html__( 'The content of the new post.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => true,
					],
					'title'   => [
						'description' => esc_html__( 'The title of the new post.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/saveOutput',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'save_output' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'outputs'    => [
						'description' => esc_html__( 'An array of AI-generated and existing outputs to be saved.', 'seo-by-rank-math' ),
						'type'        => 'array',
						'required'    => false,
					],
					'endpoint'   => [
						'description' => esc_html__( 'The API endpoint for which the output was generated.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => false,
					],
					'isChat'     => [
						'description' => esc_html__( 'Indicates if the request was for the Chat endpoint.', 'seo-by-rank-math' ),
						'type'        => 'boolean',
						'required'    => false,
					],
					'attributes' => [
						'description' => esc_html__( 'The parameters used to generate the AI output.', 'seo-by-rank-math' ),
						'type'        => 'object',
						'required'    => false,
					],
					'credits'    => [
						'description' => esc_html__( 'Credit usage details returned by the API.', 'seo-by-rank-math' ),
						'type'        => 'object',
						'required'    => false,
					],
					'usage'      => [
						'description' => esc_html__( 'Per-tool usage data returned by the API.', 'seo-by-rank-math' ),
						'type'        => 'object',
						'required'    => false,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/deleteOutput',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'delete_output' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'isChat' => [
						'description' => esc_html__( 'Indicates if the request to delete the output was for the Chat endpoint.', 'seo-by-rank-math' ),
						'type'        => 'boolean',
						'required'    => false,
					],
					'index'  => [
						'description' => esc_html__( 'The output index to delete, applicable only to the Chat endpoint.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => false,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateRecentPrompt',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_recent_prompt' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'prompt' => [
						'description' => esc_html__( 'The selected prompt to be updated in the recent prompts.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => true,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/updatePrompt',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_prompt' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'prompt' => [
						'description'       => esc_html__( 'The prompt data to be saved in the database.', 'seo-by-rank-math' ),
						'required'          => true,
						'validate_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'is_param_empty' ],
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/savePrompts',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'save_prompts' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'prompts' => [
						'description' => esc_html__( 'A list of prompts received from the API to be saved in the database.', 'seo-by-rank-math' ),
						'type'        => 'array',
						'required'    => true,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/pingContentAI',
			[
				'methods'             => WP_REST_Server::READABLE,
				'callback'            => [ $this, 'ping_content_ai' ],
				'permission_callback' => [ $this, 'has_ping_permission' ],
				'args'                => [
					'plan'        => [
						'description' => esc_html__( 'Content AI plan to update in the Database.', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => true,
					],
					'refreshDate' => [
						'description' => esc_html__( 'Content AI reset date to update in the Database', 'seo-by-rank-math' ),
						'type'        => 'string',
						'required'    => true,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/generateAlt',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'generate_alt' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'attachmentIds' => [
						'description' => esc_html__( 'List of attachment IDs for which to generate alt text.', 'seo-by-rank-math' ),
						'type'        => 'array',
						'required'    => true,
					],
				],
			]
		);

		register_rest_route(
			$this->namespace,
			'/updateCredits',
			[
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => [ $this, 'update_credits' ],
				'permission_callback' => [ $this, 'has_permission' ],
				'args'                => [
					'credits' => [
						'description' => esc_html__( 'Credit usage details returned by the API.', 'seo-by-rank-math' ),
						'type'        => 'integer',
						'required'    => true,
					],
				],
			]
		);
	}

	/**
	 * Check API key in request.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return bool                     Whether the API key matches or not.
	 */
	public function has_ping_permission( WP_REST_Request $request ) {
		if ( empty( $this->registered ) ) {
			return false;
		}

		return $request->get_param( 'apiKey' ) === $this->registered['api_key'] &&
			$request->get_param( 'username' ) === $this->registered['username'];
	}

	/**
	 * Determines if the current user can manage analytics.
	 *
	 * @return true
	 */
	public function has_permission() {
		if ( ! Helper::has_cap( 'content_ai' ) || empty( $this->registered ) ) {
			return new WP_Error(
				'rest_cannot_access',
				__( 'Sorry, only authenticated users can research the keyword.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Get Content AI Credits.
	 *
	 * @return array Credits and usage details.
	 */
	public function get_credits() {
		$data = Helper::get_content_ai_credits( true, true );
		if ( ! empty( $data['error'] ) ) {
			$error_texts = Helper::get_content_ai_errors();
			return [
				'error'        => ! empty( $error_texts[ $data['error'] ] ) ? wp_specialchars_decode( $error_texts[ $data['error'] ], ENT_QUOTES ) : $data['error'],
				'credits'      => isset( $data['credits'] ) ? $data['credits'] : '',
				'usageDetails' => Helper::get_usage_details(),
			];
		}

		return [
			'credits'      => $data['credits'],
			'usageDetails' => $data['usage_details'] ?? null,
		];
	}

	/**
	 * Research a keyword.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function research_keyword( WP_REST_Request $request ) {
		$object_id    = $request->get_param( 'objectID' );
		$country      = $request->get_param( 'country' );
		$keyword      = mb_strtolower( $request->get_param( 'keyword' ) );
		$force_update = $request->get_param( 'forceUpdate' );
		$keyword_data = get_option( 'rank_math_ca_data' );
		$post_type    = 0 === $object_id ? 'page' : get_post_type( $object_id );

		if ( ! in_array( $post_type, (array) Helper::get_settings( 'general.content_ai_post_types' ), true ) ) {
			return [
				'data' => esc_html__( 'Content AI is not enabled on this Post type.', 'seo-by-rank-math' ),
			];
		}

		if ( ! apply_filters( 'rank_math/content_ai/call_api', true ) ) {
			return [
				'data' => 'show_dummy_data',
			];
		}

		if (
			! $force_update &&
			! empty( $keyword_data ) &&
			! empty( $keyword_data[ $country ] ) &&
			! empty( $keyword_data[ $country ][ $keyword ] )
		) {
			update_post_meta(
				$object_id,
				'rank_math_ca_keyword',
				[
					'keyword' => $keyword,
					'country' => $country,
				]
			);

			return [
				'data'    => $keyword_data[ $country ][ $keyword ],
				'keyword' => $keyword,
			];
		}

		$data = $this->get_researched_data( $keyword, $post_type, $country, $force_update );
		if ( ! empty( $data['error'] ) ) {
			return $this->get_errored_data( $data['error'] );
		}

		$usage = ! empty( $data['usage'] ) ? $data['usage'] : null;

		if ( ! empty( $usage['feature'] ) ) {
			$remaining = isset( $usage['remaining'] ) ? (int) $usage['remaining'] : null;
			Helper::update_feature_usage( sanitize_key( $usage['feature'] ), $usage['used'] ?? 0, $remaining );
		}

		$data = $data['data']['details'];
		$this->get_recommendations( $data );

		update_post_meta(
			$object_id,
			'rank_math_ca_keyword',
			[
				'keyword' => $keyword,
				'country' => $country,
			]
		);
		$keyword_data[ $country ][ $keyword ] = $data;
		update_option( 'rank_math_ca_data', $keyword_data, false );

		return [
			'data'         => $keyword_data[ $country ][ $keyword ],
			'keyword'      => $keyword,
			'usageDetails' => Helper::get_usage_details(),
		];
	}

	/**
	 * Get the arguments for the researchKeyword route.
	 *
	 * @return array
	 */
	public function get_research_keyword_args() {
		return [
			'keyword'      => [
				'description' => esc_html__( 'The keyword to be researched.', 'seo-by-rank-math' ),
				'type'        => 'string',
				'required'    => true,
			],
			'country'      => [
				'description' => esc_html__( 'The country for which the keyword should be researched.', 'seo-by-rank-math' ),
				'type'        => 'string',
				'required'    => true,
			],
			'objectID'     => [
				'description' => esc_html__( 'The ID of the post initiating the keyword research request.', 'seo-by-rank-math' ),
				'type'        => 'integer',
				'required'    => true,
			],
			'force_update' => [
				'description' => esc_html__( 'If true, forces a fresh research request.', 'seo-by-rank-math' ),
				'type'        => 'boolean',
				'required'    => false,
			],
		];
	}

	/**
	 * Create a new Post from Content AI Page.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_post( WP_REST_Request $request ) {
		$content       = $request->get_param( 'content' );
		$title         = $request->get_param( 'title' );
		$title         = $title ? $title : 'Content AI Post';
		$blocks        = parse_blocks( $content );
		$current_block = ! empty( $blocks ) ? current( $blocks ) : '';
		if (
			! empty( $current_block ) &&
			$current_block['blockName'] === 'core/heading' &&
			$current_block['attrs']['level'] === 1
		) {
			$title = wp_strip_all_tags( $current_block['innerHTML'] );
		}

		$post_id = wp_insert_post(
			[
				'post_title'   => $title,
				'post_content' => $content,
			]
		);

		return wp_specialchars_decode( add_query_arg( 'tab', 'content-ai', get_edit_post_link( $post_id ) ) );
	}

	/**
	 * Save the API output.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function save_output( WP_REST_Request $request ) {
		$outputs    = $request->get_param( 'outputs' );
		$endpoint   = $request->get_param( 'endpoint' );
		$is_chat    = $request->get_param( 'isChat' );
		$attributes = $request->get_param( 'attributes' );
		$usage      = $request->get_param( 'usage' );

		// Persist per-tool usage returned by the API alongside the tool result.
		if ( ! empty( $usage['feature'] ) ) {
			$remaining = isset( $usage['remaining'] ) ? (int) $usage['remaining'] : null;
			Helper::update_feature_usage( sanitize_key( $usage['feature'] ), $usage['used'] ?? 0, $remaining );
		}

		if ( empty( $outputs ) || empty( $endpoint ) ) {
			return true;
		}

		if ( $is_chat ) {
			Helper::update_chats( current( $outputs ), end( $attributes['messages'] ), $attributes['session'], $attributes['isNew'], $attributes['regenerate'] );
			return true;
		}

		return Helper::update_outputs( $endpoint, $outputs );
	}

	/**
	 * Delete the API output.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_output( WP_REST_Request $request ) {
		$is_chat = $request->get_param( 'isChat' );
		if ( $is_chat ) {
			return Helper::delete_chats( $request->get_param( 'index' ) );
		}

		return Helper::delete_outputs();
	}

	/**
	 * Update the Prompts.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_prompt( WP_REST_Request $request ) {
		$prompt = $request->get_param( 'prompt' );

		if ( is_string( $prompt ) ) {
			return Helper::delete_prompt( $prompt );
		}

		return Helper::update_prompts( $prompt );
	}

	/**
	 * Save the Prompts.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function save_prompts( WP_REST_Request $request ) {
		$prompts = $request->get_param( 'prompts' );
		if ( empty( $prompts ) ) {
			return false;
		}

		return Helper::save_default_prompts( $prompts );
	}

	/**
	 * Update the Recent Prompts.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_recent_prompt( WP_REST_Request $request ) {
		$prompt = $request->get_param( 'prompt' );
		return Helper::update_recent_prompts( $prompt );
	}

	/**
	 * Endpoint to update the AI plan and credits.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function ping_content_ai( WP_REST_Request $request ) {
		$credits       = ! empty( $request->get_param( 'credits' ) ) ? json_decode( $request->get_param( 'credits' ), true ) : [];
		$usage_details = $request->get_param( 'usageDetails' );
		$data          = [
			'credits'       => ! empty( $credits['available'] ) ? $credits['available'] - $credits['taken'] : 0,
			'plan'          => $request->get_param( 'plan' ),
			'refresh_date'  => $request->get_param( 'refreshDate' ),
			'usage_details' => ! empty( $usage_details ) ? $usage_details : null,
		];

		Helper::update_credits( $data );

		return true;
	}

	/**
	 * Endpoint to generate Image Alt.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function generate_alt( WP_REST_Request $request ) {
		$ids = $request->get_param( 'attachmentIds' );
		if ( empty( $ids ) ) {
			return false;
		}

		do_action( 'rank_math/content_ai/generate_alt', $ids );

		return true;
	}

	/**
	 * Endpoint to Update the credits data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_credits( WP_REST_Request $request ) {
		$credits = $request->get_param( 'credits' );
		Helper::update_credits( $credits );
		return true;
	}

	/**
	 * Get data from the API.
	 *
	 * @param string $keyword      Researched keyword.
	 * @param string $post_type    Researched post type.
	 * @param string $country      Researched country.
	 * @param bool   $force_update Whether to force update the researched data.
	 *
	 * @return array
	 */
	private function get_researched_data( $keyword, $post_type, $country, $force_update = false ) {
		$args = [
			'username'       => rawurlencode( $this->registered['username'] ),
			'api_key'        => rawurlencode( $this->registered['api_key'] ),
			'keyword'        => rawurlencode( $keyword ),
			'post_type'      => rawurlencode( $post_type ),
			'site_url'       => rawurlencode( Helper::get_home_url() ),
			'new_api'        => 1,
			'plugin_version' => rank_math()->version,
		];

		if ( 'all' !== $country ) {
			$args['locale'] = rawurlencode( $country );
		}

		if ( $force_update ) {
			$args['force_refresh'] = 1;
		}

		$url = add_query_arg(
			$args,
			CONTENT_AI_URL . '/ai/research'
		);

		$data = wp_remote_get(
			$url,
			[
				'timeout' => 60,
			]
		);

		$response_code = wp_remote_retrieve_response_code( $data );
		if ( 200 !== $response_code ) {
			return [
				'error' => $this->research_keyword_error( $data, $response_code ),
			];
		}

		$data = wp_remote_retrieve_body( $data );
		$data = json_decode( $data, true );

		if ( empty( $data['error'] ) && empty( $data['data']['details'] ) ) {
			return [
				'error' => esc_html__( 'No data found for the researched keyword.', 'seo-by-rank-math' ),
			];
		}

		return $data;
	}

	/**
	 * Update the error message based on the pre-defined Content AI errors defined in the plugin.
	 *
	 * @param array $response      API response.
	 * @param int   $response_code API response code.
	 *
	 * @return string Error message.
	 */
	private function research_keyword_error( $response, $response_code ) {
		if ( $response_code === 410 ) {
			return wp_kses_post(
				sprintf(
					// Translators: link to the update page.
					__( 'There is a new version of Content AI available! %s the Rank Math SEO plugin to use this feature.', 'seo-by-rank-math' ),
					'<a href="' . esc_url( self_admin_url( 'update-core.php' ) ) . '">' . __( 'Please update', 'seo-by-rank-math' ) . '</a>'
				)
			);
		}

		$error_texts = Helper::get_content_ai_errors();
		$data        = wp_remote_retrieve_body( $response );
		$data        = json_decode( $data, true );

		return isset( $data['message'] ) && isset( $error_texts[ $data['message'] ] ) ? $error_texts[ $data['message'] ] : $response['response']['message'];
	}

	/**
	 * Get errored data.
	 *
	 * @param array $error Error data received from the API.
	 *
	 * @return array
	 */
	private function get_errored_data( $error ) {
		if ( empty( $error['code'] ) ) {
			return [
				'data' => $error,
			];
		}

		if ( 'invalid_domain' === $error['code'] ) {
			return [
				'data' => esc_html__( 'This feature is not available on the localhost.', 'seo-by-rank-math' ),
			];
		}

		if ( 'domain_limit_reached' === $error['code'] ) {
			return [
				'data' => esc_html__( 'You have used all the free credits which are allowed to this domain.', 'seo-by-rank-math' ),
			];
		}

		return [
			'data'    => '',
			'credits' => $error['code'],
		];
	}

	/**
	 * Get the Recommendations data.
	 *
	 * @param array $data Researched data.
	 */
	private function get_recommendations( &$data ) {
		foreach ( $data['recommendations'] as $key => $value ) {
			if ( ! is_array( $value ) ) {
				continue;
			}

			$data['recommendations'][ $key ]['total'] = array_sum( $value );
		}
	}
}
PK     ¥ŠU]Ãßm™  ™  5  includes/modules/content-ai/class-event-scheduler.phpnu „[µü¤        <?php
/**
 * The Event Scheduler for Content AI to update the prompts and credits data.
 *
 * @since      1.0.123
 * @package    RankMath
 * @subpackage RankMath\ContentAI
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use WP_Block_Type_Registry;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Event_Scheduler class.
 */
class Event_Scheduler {

	use Hooker;

	/**
	 * The single instance of the class.
	 *
	 * @var Event_Scheduler
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_Command instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Event_Scheduler
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Event_Scheduler ) ) {
			self::$instance = new Event_Scheduler();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( ! Helper::is_site_connected() ) {
			return;
		}

		$credits = get_option( 'rank_math_ca_credits' );
		if ( ! empty( $credits['refresh_date'] ) ) {
			wp_schedule_single_event( absint( $credits['refresh_date'] ) + 60, 'rank_math/content-ai/update_plan' );
		}

		$this->action( 'rank_math/content-ai/update_prompts', 'update_prompts_data' );
		$this->action( 'rank_math/content-ai/update_plan', 'update_content_ai_plan' );
		$this->action( 'admin_footer', 'update_prompts_on_new_site' );
	}

	/**
	 * Fetch and update the prompts data daily.
	 *
	 * @return void
	 */
	public function update_prompts_data() {
		if ( ! Helper::get_credits() || ! Helper::get_content_ai_plan() ) {
			return;
		}

		$registered = Admin_Helper::get_registration_data();
		if ( empty( $registered ) || empty( $registered['username'] ) ) {
			return;
		}

		$prompt_data   = [];
		$data          = wp_remote_post(
			CONTENT_AI_URL . '/ai/default_prompts',
			[
				'headers' => [
					'Content-type' => 'application/json',
				],
				'body'    => wp_json_encode(
					[
						'username'       => $registered['username'],
						'api_key'        => $registered['api_key'],
						'site_url'       => $registered['site_url'],
						'plugin_version' => rank_math()->version,
					]
				),
			]
		);
		$response_code = wp_remote_retrieve_response_code( $data );
		if ( is_wp_error( $data ) || ! in_array( $response_code, [ 200, 201 ], true ) ) {
			return;
		}

		update_option( 'rank_math_prompts_updated', true );
		$data = wp_remote_retrieve_body( $data );
		$data = json_decode( $data, true );
		if ( empty( $data ) ) {
			return;
		}

		Helper::save_default_prompts( $data );
	}

	/**
	 * Run the credits endpoint to update the plan on reset date.
	 *
	 * @return void
	 */
	public function update_content_ai_plan() {
		Helper::get_content_ai_credits( true );
		wp_clear_scheduled_hook( 'rank_math/content-ai/update_plan' );
	}

	/**
	 * Function to update Prompts data on new sites.
	 *
	 * @return void
	 */
	public function update_prompts_on_new_site() {
		$prompts = Helper::get_prompts();
		if ( get_option( 'rank_math_prompts_updated' ) || ! empty( $prompts ) ) {
			return;
		}

		do_action( 'rank_math/content-ai/update_prompts' );
	}
}
PK     ¥ŠU]­C"$…'  …'  4  includes/modules/content-ai/class-bulk-image-alt.phpnu „[µü¤        <?php
/**
 * Bulk Image Alt generation using the Content AI API.
 *
 * @since      1.0.218
 * @package    RankMath
 * @subpackage RankMath\ContentAI
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Bulk_Image_Alt class.
 */
class Bulk_Image_Alt extends \WP_Background_Process {

	/**
	 * Action.
	 *
	 * @var string
	 */
	protected $action = 'bulk_image_alt';

	/**
	 * Main instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Bulk_Image_Alt
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Bulk_Image_Alt ) ) {
			$instance = new Bulk_Image_Alt();
		}

		return $instance;
	}

	/**
	 * Start creating batches.
	 *
	 * @param array $data Posts data.
	 */
	public function start( $data ) {
		Helper::add_notification(
			esc_html__( 'Bulk image alt generation started. It might take few minutes to complete the process.', 'seo-by-rank-math' ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_content_ai_posts_started',
				'classes' => 'rank-math-notice',
			]
		);

		update_option( 'rank_math_content_ai_posts', array_keys( $data['posts'] ) );

		foreach ( $data['posts'] as $post_id => $images ) {
			$chunks = array_chunk( $images, 5, true );
			foreach ( $chunks as $chunk ) {
				$this->push_to_queue(
					[
						'post_id' => $post_id,
						'images'  => array_values( $chunk ),
					]
				);
			}
		}

		$this->save()->dispatch();
	}

	/**
	 * Task to perform.
	 *
	 * @param string $data Posts to process.
	 */
	public function wizard( $data ) {
		$this->task( $data );
	}

	/**
	 * Cancel the Bulk edit process.
	 */
	public function cancel() {
		delete_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts_processed' );
		parent::clear_scheduled_event();
	}

	/**
	 * Complete.
	 *
	 * Override if applicable, but ensure that the below actions are
	 * performed, or, call parent::complete().
	 */
	protected function complete() {
		$posts = get_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts_processed' );
		Helper::add_notification(
			// Translators: placeholder is the number of modified posts.
			sprintf( _n( 'Image alt attributes successfully updated in %d post.', 'Image alt attributes successfully updated in %d posts.', count( $posts ), 'seo-by-rank-math' ), count( $posts ) ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_content_ai_posts',
				'classes' => 'rank-math-notice',
			]
		);

		parent::complete();
	}

	/**
	 * Task to perform.
	 *
	 * @param array $data Posts to process.
	 *
	 * @return bool
	 */
	protected function task( $data ) {
		try {
			if ( empty( $data['images'] ) ) {
				$this->update_content_ai_posts_count();
				return false;
			}

			$is_attachment = get_post_type( $data['post_id'] ) === 'attachment';
			$api_output    = json_decode( wp_remote_retrieve_body( $this->get_image_alts( $data, $is_attachment ) ), true );

			// Early bail if API returns and error.
			if ( ! empty( $api_output['error'] ) ) {
				$notice = ! empty( $api_output['message'] ) ? $api_output['message'] : esc_html__( 'Bulk image alt generation failed.', 'seo-by-rank-math' );
				Helper::add_notification(
					$notice,
					[
						'type'    => 'error',
						'id'      => 'rank_math_content_ai_posts',
						'classes' => 'rank-math-notice',
					]
				);

				$this->cancel();

				return;
			}

			if ( empty( $api_output['altTexts'] ) ) {
				$this->update_content_ai_posts_count();
				return false;
			}

			$this->update_image_alt( $api_output['altTexts'], $data, $is_attachment );

			$this->update_content_ai_posts_count();

			if ( ! empty( $api_output['usage']['feature'] ) ) {
				$usage = $api_output['usage'];
				Helper::update_feature_usage( $usage['feature'], $usage['used'] ?? 0, $usage['remaining'] ?? null );
			}

			if ( Helper::is_feature_quota_exhausted( 'generate_image_alt_v2' ) ) {
				$posts_processed = get_option( 'rank_math_content_ai_posts_processed' );
				delete_option( 'rank_math_content_ai_posts' );
				delete_option( 'rank_math_content_ai_posts_processed' );
				Helper::add_notification(
					// Translators: placeholder is the number of modified posts.
					sprintf( esc_html__( 'Image alt attributes successfully updated in %d posts. The process was stopped as you have reached the monthly limit for this feature.', 'seo-by-rank-math' ), (int) $posts_processed ),
					[
						'type'    => 'success',
						'id'      => 'rank_math_content_ai_posts',
						'classes' => 'rank-math-notice',
					]
				);

				wp_clear_scheduled_hook( 'wp_bulk_image_alt_cron' );
			}

			return false;
		} catch ( \Exception $error ) {
			return true;
		}
	}

	/**
	 * Get Posts to bulk update the data.
	 *
	 * @param array   $data          Data to process.
	 * @param boolean $is_attachment Whether the current post is attachment.
	 *
	 * @return array
	 */
	private function get_image_alts( $data, $is_attachment ) {
		$connect_data = Admin_Helper::get_registration_data();

		// Convert images to the new format with base64 data.
		$images     = [];
		$image_urls = $is_attachment ? $data['images'] : $this->extract_urls_from_tags( $data['images'] );

		foreach ( $image_urls as $image_url ) {
			$image_id    = $this->get_image_id_from_url( $image_url );
			$base64_data = $this->convert_image_to_base64( $image_url );

			if ( ! empty( $base64_data ) ) {
				$images[] = [
					'id'    => $image_id,
					'image' => $base64_data,
				];
			}
		}

		if ( empty( $images ) ) {
			return;
		}

		$request_data = [
			'images'         => $images,
			'username'       => $connect_data['username'],
			'api_key'        => $connect_data['api_key'],
			'site_url'       => $connect_data['site_url'],
			'plugin_version' => rank_math()->version,
			'language'       => Helper::get_settings( 'general.content_ai_language', Helper::content_ai_default_language() ),
		];

		return wp_remote_post(
			CONTENT_AI_URL . '/ai/generate_image_alt_v2',
			[
				'headers' => [
					'content-type' => 'application/json',
				],
				'timeout' => 60000,
				'body'    => wp_json_encode( $request_data ),
			]
		);
	}

	/**
	 * Extract URLs from image tags.
	 *
	 * @param array $image_tags Array of image HTML tags.
	 * @return array Array of image URLs.
	 */
	private function extract_urls_from_tags( $image_tags ) {
		$urls = [];
		foreach ( $image_tags as $image_tag ) {
			$url = $this->get_image_source( $image_tag );
			if ( ! empty( $url ) ) {
				$urls[] = $url;
			}
		}
		return $urls;
	}

	/**
	 * Convert image URL to base64 encoded data.
	 *
	 * @param string $image_url Image URL to convert.
	 * @return string Base64 encoded image data.
	 */
	private function convert_image_to_base64( $image_url ) {
		// Validate URL.
		if ( ! filter_var( $image_url, FILTER_VALIDATE_URL ) ) {
			return '';
		}

		// Get image content.
		$response = wp_remote_get( $image_url, [ 'timeout' => 30 ] );
		if ( is_wp_error( $response ) ) {
			return '';
		}

		$response_code = wp_remote_retrieve_response_code( $response );
		if ( 200 !== $response_code ) {
			return '';
		}

		$image_content = wp_remote_retrieve_body( $response );
		if ( empty( $image_content ) ) {
			return '';
		}

		// Get image info to determine MIME type.
		$image_info = wp_check_filetype( $image_url );
		$mime_type  = ! empty( $image_info['type'] ) ? $image_info['type'] : 'image/jpeg';

		// Convert to base64 with proper data URL format.
		$base64 = base64_encode( $image_content ); // phpcs:ignore -- Verified as safe usage.
		return 'data:' . $mime_type . ';base64,' . $base64;
	}

	/**
	 * Extract filename from image URL.
	 *
	 * @param string $image_url Image URL.
	 * @return string Filename.
	 */
	private function get_image_id_from_url( $image_url ) {
		$url_parts = explode( '/', $image_url );
		$filename  = end( $url_parts );

		if ( empty( $filename ) ) {
			$filename = 'image.jpg';
		}

		// Remove query parameters if present.
		$filename = strtok( $filename, '?' );

		return $filename;
	}

	/**
	 * Keep count of the Content AI posts that were processed.
	 *
	 * @return void
	 */
	private function update_content_ai_posts_count() {
		$content_ai_posts_count = get_option( 'rank_math_content_ai_posts_processed', 0 ) + 1;
		update_option( 'rank_math_content_ai_posts_processed', $content_ai_posts_count, false );
	}

	/**
	 * Update Image alt value.
	 *
	 * @param array   $alt_texts     Alt texts returned by the API.
	 * @param array   $data          Data to process.
	 * @param boolean $is_attachment Whether the current post is attachment.
	 *
	 * @return void
	 */
	private function update_image_alt( $alt_texts, $data, $is_attachment ) {
		if ( $is_attachment ) {
			update_post_meta( $data['post_id'], '_wp_attachment_image_alt', sanitize_text_field( current( $alt_texts ) ) );

			return;
		}

		$post = get_post( $data['post_id'] );

		foreach ( $data['images'] as $image ) {
			$image_src = $this->get_image_source( $image );
			$image_id  = $this->get_image_id_from_url( $image_src );
			$image_alt = ! empty( $alt_texts[ $image_id ] ) ? $alt_texts[ $image_id ] : '';
			if ( ! $image_alt ) {
				continue;
			}

			// Remove any existing empty alt attributes.
			$img_tag = preg_replace( '/ alt=(""|\'\')/i', '', $image );
			// Add the new alt attribute.
			$img_tag = str_replace( '<img ', '<img alt="' . esc_attr( $image_alt ) . '" ', $img_tag );

			// Replace the old img tag with the new one in the post content.
			$post->post_content = str_replace( $image, $img_tag, $post->post_content );
		}

		wp_update_post( $post );
	}

	/**
	 * Get Image source from image tag.
	 *
	 * @param string $image Image tag.
	 *
	 * @return string
	 */
	private function get_image_source( $image ) {
		// The $data['images'] contains an array of img tags, so we need to extract the src attribute from each one.
		preg_match( '/src=[\'"]?([^\'" >]+)[\'" >]/i', $image, $matches );
		return $matches[1];
	}
}
PK     ¥ŠU]YÏE¶³  ³  D  includes/modules/content-ai/blocks/command/assets/js/index.asset.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase -- This filename format is required to dynamically load the necessary block dependencies.
/**
 * Block script dependencies.
 *
 * @package    RankMath
 * @subpackage RankMath\ContentAI
 * @author     Rank Math <support@rankmath.com>
 */

return [
	'dependencies' => [
		'wp-element',
		'wp-block-editor',
		'lodash',
	],
	'version'      => rank_math()->version,
];
PK     ¥ŠU]V7¨x x =  includes/modules/content-ai/blocks/command/assets/js/index.jsnu „[µü¤        !function(){var e={552:function(e,t,r){var n;(function(){function a(e){"use strict";var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `Â«Â«Â«` and `Â»Â»Â»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n].defaultValue);return r}var o={},s={},i={},c=a(!0),l="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:a(!0),allOn:function(){"use strict";var e=a(!0),t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=!0);return t}()};function d(e,t){"use strict";var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};o.helper.isArray(e)||(e=[e]);for(var a=0;a<e.length;++a){var s=r+" sub-extension "+a+": ",i=e[a];if("object"!=typeof i)return n.valid=!1,n.error=s+"must be an object, but "+typeof i+" given",n;if(!o.helper.isString(i.type))return n.valid=!1,n.error=s+'property "type" must be a string, but '+typeof i.type+" given",n;var c=i.type=i.type.toLowerCase();if("language"===c&&(c=i.type="lang"),"html"===c&&(c=i.type="output"),"lang"!==c&&"output"!==c&&"listener"!==c)return n.valid=!1,n.error=s+"type "+c+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',n;if("listener"===c){if(o.helper.isUndefined(i.listeners))return n.valid=!1,n.error=s+'. Extensions of type "listener" must have a property called "listeners"',n}else if(o.helper.isUndefined(i.filter)&&o.helper.isUndefined(i.regex))return n.valid=!1,n.error=s+c+' extensions must define either a "regex" property or a "filter" method',n;if(i.listeners){if("object"!=typeof i.listeners)return n.valid=!1,n.error=s+'"listeners" property must be an object but '+typeof i.listeners+" given",n;for(var l in i.listeners)if(i.listeners.hasOwnProperty(l)&&"function"!=typeof i.listeners[l])return n.valid=!1,n.error=s+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+l+" must be a function but "+typeof i.listeners[l]+" given",n}if(i.filter){if("function"!=typeof i.filter)return n.valid=!1,n.error=s+'"filter" must be a function, but '+typeof i.filter+" given",n}else if(i.regex){if(o.helper.isString(i.regex)&&(i.regex=new RegExp(i.regex,"g")),!(i.regex instanceof RegExp))return n.valid=!1,n.error=s+'"regex" property must either be a string or a RegExp object, but '+typeof i.regex+" given",n;if(o.helper.isUndefined(i.replace))return n.valid=!1,n.error=s+'"regex" extensions must implement a replace string or function',n}}return n}function p(e,t){"use strict";return"Â¨E"+t.charCodeAt(0)+"E"}o.helper={},o.extensions={},o.setOption=function(e,t){"use strict";return c[e]=t,this},o.getOption=function(e){"use strict";return c[e]},o.getOptions=function(){"use strict";return c},o.resetOptions=function(){"use strict";c=a(!0)},o.setFlavor=function(e){"use strict";if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");o.resetOptions();var t=u[e];for(var r in l=e,t)t.hasOwnProperty(r)&&(c[r]=t[r])},o.getFlavor=function(){"use strict";return l},o.getFlavorOptions=function(e){"use strict";if(u.hasOwnProperty(e))return u[e]},o.getDefaultOptions=function(e){"use strict";return a(e)},o.subParser=function(e,t){"use strict";if(o.helper.isString(e)){if(void 0===t){if(s.hasOwnProperty(e))return s[e];throw Error("SubParser named "+e+" not registered!")}s[e]=t}},o.extension=function(e,t){"use strict";if(!o.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=o.helper.stdExtName(e),o.helper.isUndefined(t)){if(!i.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return i[e]}"function"==typeof t&&(t=t()),o.helper.isArray(t)||(t=[t]);var r=d(t,e);if(!r.valid)throw Error(r.error);i[e]=t},o.getAllExtensions=function(){"use strict";return i},o.removeExtension=function(e){"use strict";delete i[e]},o.resetExtensions=function(){"use strict";i={}},o.validateExtension=function(e){"use strict";var t=d(e,null);return!!t.valid||(console.warn(t.error),!1)},o.hasOwnProperty("helper")||(o.helper={}),o.helper.isString=function(e){"use strict";return"string"==typeof e||e instanceof String},o.helper.isFunction=function(e){"use strict";return e&&"[object Function]"==={}.toString.call(e)},o.helper.isArray=function(e){"use strict";return Array.isArray(e)},o.helper.isUndefined=function(e){"use strict";return void 0===e},o.helper.forEach=function(e,t){"use strict";if(o.helper.isUndefined(e))throw new Error("obj param is required");if(o.helper.isUndefined(t))throw new Error("callback param is required");if(!o.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(o.helper.isArray(e))for(var r=0;r<e.length;r++)t(e[r],r,e);else{if("object"!=typeof e)throw new Error("obj does not seem to be an array or an iterable object");for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)}},o.helper.stdExtName=function(e){"use strict";return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},o.helper.escapeCharactersCallback=p,o.helper.escapeCharacters=function(e,t,r){"use strict";var n="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";r&&(n="\\\\"+n);var a=new RegExp(n,"g");return e=e.replace(a,p)},o.helper.unescapeHTMLEntities=function(e){"use strict";return e.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")};var h=function(e,t,r,n){"use strict";var a,o,s,i,c,l=n||"",u=l.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+l.replace(/g/g,"")),p=new RegExp(t,l.replace(/g/g,"")),h=[];do{for(a=0;s=d.exec(e);)if(p.test(s[0]))a++||(i=(o=d.lastIndex)-s[0].length);else if(a&&! --a){c=s.index+s[0].length;var m={left:{start:i,end:o},match:{start:o,end:s.index},right:{start:s.index,end:c},wholeMatch:{start:i,end:c}};if(h.push(m),!u)return h}}while(a&&(d.lastIndex=o));return h};o.helper.matchRecursiveRegExp=function(e,t,r,n){"use strict";for(var a=h(e,t,r,n),o=[],s=0;s<a.length;++s)o.push([e.slice(a[s].wholeMatch.start,a[s].wholeMatch.end),e.slice(a[s].match.start,a[s].match.end),e.slice(a[s].left.start,a[s].left.end),e.slice(a[s].right.start,a[s].right.end)]);return o},o.helper.replaceRecursiveRegExp=function(e,t,r,n,a){"use strict";if(!o.helper.isFunction(t)){var s=t;t=function(){return s}}var i=h(e,r,n,a),c=e,l=i.length;if(l>0){var u=[];0!==i[0].wholeMatch.start&&u.push(e.slice(0,i[0].wholeMatch.start));for(var d=0;d<l;++d)u.push(t(e.slice(i[d].wholeMatch.start,i[d].wholeMatch.end),e.slice(i[d].match.start,i[d].match.end),e.slice(i[d].left.start,i[d].left.end),e.slice(i[d].right.start,i[d].right.end))),d<l-1&&u.push(e.slice(i[d].wholeMatch.end,i[d+1].wholeMatch.start));i[l-1].wholeMatch.end<e.length&&u.push(e.slice(i[l-1].wholeMatch.end)),c=u.join("")}return c},o.helper.regexIndexOf=function(e,t,r){"use strict";if(!o.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==!1)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var n=e.substring(r||0).search(t);return n>=0?n+(r||0):n},o.helper.splitAtIndex=function(e,t){"use strict";if(!o.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},o.helper.encodeEmailAddress=function(e){"use strict";var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e=e.replace(/./g,function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e})},o.helper.padEnd=function(e,t,r){"use strict";return t|=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){"use strict";alert(e)},log:function(e){"use strict";alert(e)},error:function(e){"use strict";throw e}}),o.helper.regexes={asteriskDashAndColon:/([*_:~])/g},o.helper.emojis={"+1":"ðŸ‘�","-1":"ðŸ‘Ž",100:"ðŸ’¯",1234:"ðŸ”¢","1st_place_medal":"ðŸ¥‡","2nd_place_medal":"ðŸ¥ˆ","3rd_place_medal":"ðŸ¥‰","8ball":"ðŸŽ±",a:"ðŸ…°ï¸�",ab:"ðŸ†Ž",abc:"ðŸ”¤",abcd:"ðŸ”¡",accept:"ðŸ‰‘",aerial_tramway:"ðŸš¡",airplane:"âœˆï¸�",alarm_clock:"â�°",alembic:"âš—ï¸�",alien:"ðŸ‘½",ambulance:"ðŸš‘",amphora:"ðŸ�º",anchor:"âš“ï¸�",angel:"ðŸ‘¼",anger:"ðŸ’¢",angry:"ðŸ˜ ",anguished:"ðŸ˜§",ant:"ðŸ�œ",apple:"ðŸ�Ž",aquarius:"â™’ï¸�",aries:"â™ˆï¸�",arrow_backward:"â—€ï¸�",arrow_double_down:"â�¬",arrow_double_up:"â�«",arrow_down:"â¬‡ï¸�",arrow_down_small:"ðŸ”½",arrow_forward:"â–¶ï¸�",arrow_heading_down:"â¤µï¸�",arrow_heading_up:"â¤´ï¸�",arrow_left:"â¬…ï¸�",arrow_lower_left:"â†™ï¸�",arrow_lower_right:"â†˜ï¸�",arrow_right:"âž¡ï¸�",arrow_right_hook:"â†ªï¸�",arrow_up:"â¬†ï¸�",arrow_up_down:"â†•ï¸�",arrow_up_small:"ðŸ”¼",arrow_upper_left:"â†–ï¸�",arrow_upper_right:"â†—ï¸�",arrows_clockwise:"ðŸ”ƒ",arrows_counterclockwise:"ðŸ”„",art:"ðŸŽ¨",articulated_lorry:"ðŸš›",artificial_satellite:"ðŸ›°",astonished:"ðŸ˜²",athletic_shoe:"ðŸ‘Ÿ",atm:"ðŸ�§",atom_symbol:"âš›ï¸�",avocado:"ðŸ¥‘",b:"ðŸ…±ï¸�",baby:"ðŸ‘¶",baby_bottle:"ðŸ�¼",baby_chick:"ðŸ�¤",baby_symbol:"ðŸš¼",back:"ðŸ”™",bacon:"ðŸ¥“",badminton:"ðŸ�¸",baggage_claim:"ðŸ›„",baguette_bread:"ðŸ¥–",balance_scale:"âš–ï¸�",balloon:"ðŸŽˆ",ballot_box:"ðŸ—³",ballot_box_with_check:"â˜‘ï¸�",bamboo:"ðŸŽ�",banana:"ðŸ�Œ",bangbang:"â€¼ï¸�",bank:"ðŸ�¦",bar_chart:"ðŸ“Š",barber:"ðŸ’ˆ",baseball:"âš¾ï¸�",basketball:"ðŸ�€",basketball_man:"â›¹ï¸�",basketball_woman:"â›¹ï¸�&zwj;â™€ï¸�",bat:"ðŸ¦‡",bath:"ðŸ›€",bathtub:"ðŸ›�",battery:"ðŸ”‹",beach_umbrella:"ðŸ�–",bear:"ðŸ�»",bed:"ðŸ›�",bee:"ðŸ��",beer:"ðŸ�º",beers:"ðŸ�»",beetle:"ðŸ�ž",beginner:"ðŸ”°",bell:"ðŸ””",bellhop_bell:"ðŸ›Ž",bento:"ðŸ�±",biking_man:"ðŸš´",bike:"ðŸš²",biking_woman:"ðŸš´&zwj;â™€ï¸�",bikini:"ðŸ‘™",biohazard:"â˜£ï¸�",bird:"ðŸ�¦",birthday:"ðŸŽ‚",black_circle:"âš«ï¸�",black_flag:"ðŸ�´",black_heart:"ðŸ–¤",black_joker:"ðŸƒ�",black_large_square:"â¬›ï¸�",black_medium_small_square:"â—¾ï¸�",black_medium_square:"â—¼ï¸�",black_nib:"âœ’ï¸�",black_small_square:"â–ªï¸�",black_square_button:"ðŸ”²",blonde_man:"ðŸ‘±",blonde_woman:"ðŸ‘±&zwj;â™€ï¸�",blossom:"ðŸŒ¼",blowfish:"ðŸ�¡",blue_book:"ðŸ“˜",blue_car:"ðŸš™",blue_heart:"ðŸ’™",blush:"ðŸ˜Š",boar:"ðŸ�—",boat:"â›µï¸�",bomb:"ðŸ’£",book:"ðŸ“–",bookmark:"ðŸ”–",bookmark_tabs:"ðŸ“‘",books:"ðŸ“š",boom:"ðŸ’¥",boot:"ðŸ‘¢",bouquet:"ðŸ’�",bowing_man:"ðŸ™‡",bow_and_arrow:"ðŸ�¹",bowing_woman:"ðŸ™‡&zwj;â™€ï¸�",bowling:"ðŸŽ³",boxing_glove:"ðŸ¥Š",boy:"ðŸ‘¦",bread:"ðŸ�ž",bride_with_veil:"ðŸ‘°",bridge_at_night:"ðŸŒ‰",briefcase:"ðŸ’¼",broken_heart:"ðŸ’”",bug:"ðŸ�›",building_construction:"ðŸ�—",bulb:"ðŸ’¡",bullettrain_front:"ðŸš…",bullettrain_side:"ðŸš„",burrito:"ðŸŒ¯",bus:"ðŸšŒ",business_suit_levitating:"ðŸ•´",busstop:"ðŸš�",bust_in_silhouette:"ðŸ‘¤",busts_in_silhouette:"ðŸ‘¥",butterfly:"ðŸ¦‹",cactus:"ðŸŒµ",cake:"ðŸ�°",calendar:"ðŸ“†",call_me_hand:"ðŸ¤™",calling:"ðŸ“²",camel:"ðŸ�«",camera:"ðŸ“·",camera_flash:"ðŸ“¸",camping:"ðŸ�•",cancer:"â™‹ï¸�",candle:"ðŸ•¯",candy:"ðŸ�¬",canoe:"ðŸ›¶",capital_abcd:"ðŸ” ",capricorn:"â™‘ï¸�",car:"ðŸš—",card_file_box:"ðŸ—ƒ",card_index:"ðŸ“‡",card_index_dividers:"ðŸ—‚",carousel_horse:"ðŸŽ ",carrot:"ðŸ¥•",cat:"ðŸ�±",cat2:"ðŸ�ˆ",cd:"ðŸ’¿",chains:"â›“",champagne:"ðŸ�¾",chart:"ðŸ’¹",chart_with_downwards_trend:"ðŸ“‰",chart_with_upwards_trend:"ðŸ“ˆ",checkered_flag:"ðŸ��",cheese:"ðŸ§€",cherries:"ðŸ�’",cherry_blossom:"ðŸŒ¸",chestnut:"ðŸŒ°",chicken:"ðŸ�”",children_crossing:"ðŸš¸",chipmunk:"ðŸ�¿",chocolate_bar:"ðŸ�«",christmas_tree:"ðŸŽ„",church:"â›ªï¸�",cinema:"ðŸŽ¦",circus_tent:"ðŸŽª",city_sunrise:"ðŸŒ‡",city_sunset:"ðŸŒ†",cityscape:"ðŸ�™",cl:"ðŸ†‘",clamp:"ðŸ—œ",clap:"ðŸ‘�",clapper:"ðŸŽ¬",classical_building:"ðŸ�›",clinking_glasses:"ðŸ¥‚",clipboard:"ðŸ“‹",clock1:"ðŸ•�",clock10:"ðŸ•™",clock1030:"ðŸ•¥",clock11:"ðŸ•š",clock1130:"ðŸ•¦",clock12:"ðŸ•›",clock1230:"ðŸ•§",clock130:"ðŸ•œ",clock2:"ðŸ•‘",clock230:"ðŸ•�",clock3:"ðŸ•’",clock330:"ðŸ•ž",clock4:"ðŸ•“",clock430:"ðŸ•Ÿ",clock5:"ðŸ•”",clock530:"ðŸ• ",clock6:"ðŸ••",clock630:"ðŸ•¡",clock7:"ðŸ•–",clock730:"ðŸ•¢",clock8:"ðŸ•—",clock830:"ðŸ•£",clock9:"ðŸ•˜",clock930:"ðŸ•¤",closed_book:"ðŸ“•",closed_lock_with_key:"ðŸ”�",closed_umbrella:"ðŸŒ‚",cloud:"â˜�ï¸�",cloud_with_lightning:"ðŸŒ©",cloud_with_lightning_and_rain:"â›ˆ",cloud_with_rain:"ðŸŒ§",cloud_with_snow:"ðŸŒ¨",clown_face:"ðŸ¤¡",clubs:"â™£ï¸�",cocktail:"ðŸ�¸",coffee:"â˜•ï¸�",coffin:"âš°ï¸�",cold_sweat:"ðŸ˜°",comet:"â˜„ï¸�",computer:"ðŸ’»",computer_mouse:"ðŸ–±",confetti_ball:"ðŸŽŠ",confounded:"ðŸ˜–",confused:"ðŸ˜•",congratulations:"ãŠ—ï¸�",construction:"ðŸš§",construction_worker_man:"ðŸ‘·",construction_worker_woman:"ðŸ‘·&zwj;â™€ï¸�",control_knobs:"ðŸŽ›",convenience_store:"ðŸ�ª",cookie:"ðŸ�ª",cool:"ðŸ†’",policeman:"ðŸ‘®",copyright:"Â©ï¸�",corn:"ðŸŒ½",couch_and_lamp:"ðŸ›‹",couple:"ðŸ‘«",couple_with_heart_woman_man:"ðŸ’‘",couple_with_heart_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ‘¨",couple_with_heart_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ‘©",couplekiss_man_man:"ðŸ‘¨&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘¨",couplekiss_man_woman:"ðŸ’�",couplekiss_woman_woman:"ðŸ‘©&zwj;â�¤ï¸�&zwj;ðŸ’‹&zwj;ðŸ‘©",cow:"ðŸ�®",cow2:"ðŸ�„",cowboy_hat_face:"ðŸ¤ ",crab:"ðŸ¦€",crayon:"ðŸ–�",credit_card:"ðŸ’³",crescent_moon:"ðŸŒ™",cricket:"ðŸ��",crocodile:"ðŸ�Š",croissant:"ðŸ¥�",crossed_fingers:"ðŸ¤ž",crossed_flags:"ðŸŽŒ",crossed_swords:"âš”ï¸�",crown:"ðŸ‘‘",cry:"ðŸ˜¢",crying_cat_face:"ðŸ˜¿",crystal_ball:"ðŸ”®",cucumber:"ðŸ¥’",cupid:"ðŸ’˜",curly_loop:"âž°",currency_exchange:"ðŸ’±",curry:"ðŸ�›",custard:"ðŸ�®",customs:"ðŸ›ƒ",cyclone:"ðŸŒ€",dagger:"ðŸ—¡",dancer:"ðŸ’ƒ",dancing_women:"ðŸ‘¯",dancing_men:"ðŸ‘¯&zwj;â™‚ï¸�",dango:"ðŸ�¡",dark_sunglasses:"ðŸ•¶",dart:"ðŸŽ¯",dash:"ðŸ’¨",date:"ðŸ“…",deciduous_tree:"ðŸŒ³",deer:"ðŸ¦Œ",department_store:"ðŸ�¬",derelict_house:"ðŸ�š",desert:"ðŸ�œ",desert_island:"ðŸ��",desktop_computer:"ðŸ–¥",male_detective:"ðŸ•µï¸�",diamond_shape_with_a_dot_inside:"ðŸ’ ",diamonds:"â™¦ï¸�",disappointed:"ðŸ˜ž",disappointed_relieved:"ðŸ˜¥",dizzy:"ðŸ’«",dizzy_face:"ðŸ˜µ",do_not_litter:"ðŸš¯",dog:"ðŸ�¶",dog2:"ðŸ�•",dollar:"ðŸ’µ",dolls:"ðŸŽŽ",dolphin:"ðŸ�¬",door:"ðŸšª",doughnut:"ðŸ�©",dove:"ðŸ•Š",dragon:"ðŸ�‰",dragon_face:"ðŸ�²",dress:"ðŸ‘—",dromedary_camel:"ðŸ�ª",drooling_face:"ðŸ¤¤",droplet:"ðŸ’§",drum:"ðŸ¥�",duck:"ðŸ¦†",dvd:"ðŸ“€","e-mail":"ðŸ“§",eagle:"ðŸ¦…",ear:"ðŸ‘‚",ear_of_rice:"ðŸŒ¾",earth_africa:"ðŸŒ�",earth_americas:"ðŸŒŽ",earth_asia:"ðŸŒ�",egg:"ðŸ¥š",eggplant:"ðŸ�†",eight_pointed_black_star:"âœ´ï¸�",eight_spoked_asterisk:"âœ³ï¸�",electric_plug:"ðŸ”Œ",elephant:"ðŸ�˜",email:"âœ‰ï¸�",end:"ðŸ”š",envelope_with_arrow:"ðŸ“©",euro:"ðŸ’¶",european_castle:"ðŸ�°",european_post_office:"ðŸ�¤",evergreen_tree:"ðŸŒ²",exclamation:"â�—ï¸�",expressionless:"ðŸ˜‘",eye:"ðŸ‘�",eye_speech_bubble:"ðŸ‘�&zwj;ðŸ—¨",eyeglasses:"ðŸ‘“",eyes:"ðŸ‘€",face_with_head_bandage:"ðŸ¤•",face_with_thermometer:"ðŸ¤’",fist_oncoming:"ðŸ‘Š",factory:"ðŸ�­",fallen_leaf:"ðŸ�‚",family_man_woman_boy:"ðŸ‘ª",family_man_boy:"ðŸ‘¨&zwj;ðŸ‘¦",family_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_girl:"ðŸ‘¨&zwj;ðŸ‘§",family_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_man_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦",family_man_man_boy_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_man_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§",family_man_man_girl_boy:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_man_girl_girl:"ðŸ‘¨&zwj;ðŸ‘¨&zwj;ðŸ‘§&zwj;ðŸ‘§",family_man_woman_boy_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_man_woman_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§",family_man_woman_girl_boy:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_man_woman_girl_girl:"ðŸ‘¨&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_boy:"ðŸ‘©&zwj;ðŸ‘¦",family_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_girl:"ðŸ‘©&zwj;ðŸ‘§",family_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",family_woman_woman_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦",family_woman_woman_boy_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘¦&zwj;ðŸ‘¦",family_woman_woman_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§",family_woman_woman_girl_boy:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘¦",family_woman_woman_girl_girl:"ðŸ‘©&zwj;ðŸ‘©&zwj;ðŸ‘§&zwj;ðŸ‘§",fast_forward:"â�©",fax:"ðŸ“ ",fearful:"ðŸ˜¨",feet:"ðŸ�¾",female_detective:"ðŸ•µï¸�&zwj;â™€ï¸�",ferris_wheel:"ðŸŽ¡",ferry:"â›´",field_hockey:"ðŸ�‘",file_cabinet:"ðŸ—„",file_folder:"ðŸ“�",film_projector:"ðŸ“½",film_strip:"ðŸŽž",fire:"ðŸ”¥",fire_engine:"ðŸš’",fireworks:"ðŸŽ†",first_quarter_moon:"ðŸŒ“",first_quarter_moon_with_face:"ðŸŒ›",fish:"ðŸ�Ÿ",fish_cake:"ðŸ�¥",fishing_pole_and_fish:"ðŸŽ£",fist_raised:"âœŠ",fist_left:"ðŸ¤›",fist_right:"ðŸ¤œ",flags:"ðŸŽ�",flashlight:"ðŸ”¦",fleur_de_lis:"âšœï¸�",flight_arrival:"ðŸ›¬",flight_departure:"ðŸ›«",floppy_disk:"ðŸ’¾",flower_playing_cards:"ðŸŽ´",flushed:"ðŸ˜³",fog:"ðŸŒ«",foggy:"ðŸŒ�",football:"ðŸ�ˆ",footprints:"ðŸ‘£",fork_and_knife:"ðŸ�´",fountain:"â›²ï¸�",fountain_pen:"ðŸ–‹",four_leaf_clover:"ðŸ�€",fox_face:"ðŸ¦Š",framed_picture:"ðŸ–¼",free:"ðŸ†“",fried_egg:"ðŸ�³",fried_shrimp:"ðŸ�¤",fries:"ðŸ�Ÿ",frog:"ðŸ�¸",frowning:"ðŸ˜¦",frowning_face:"â˜¹ï¸�",frowning_man:"ðŸ™�&zwj;â™‚ï¸�",frowning_woman:"ðŸ™�",middle_finger:"ðŸ–•",fuelpump:"â›½ï¸�",full_moon:"ðŸŒ•",full_moon_with_face:"ðŸŒ�",funeral_urn:"âš±ï¸�",game_die:"ðŸŽ²",gear:"âš™ï¸�",gem:"ðŸ’Ž",gemini:"â™Šï¸�",ghost:"ðŸ‘»",gift:"ðŸŽ�",gift_heart:"ðŸ’�",girl:"ðŸ‘§",globe_with_meridians:"ðŸŒ�",goal_net:"ðŸ¥…",goat:"ðŸ��",golf:"â›³ï¸�",golfing_man:"ðŸ�Œï¸�",golfing_woman:"ðŸ�Œï¸�&zwj;â™€ï¸�",gorilla:"ðŸ¦�",grapes:"ðŸ�‡",green_apple:"ðŸ��",green_book:"ðŸ“—",green_heart:"ðŸ’š",green_salad:"ðŸ¥—",grey_exclamation:"â�•",grey_question:"â�”",grimacing:"ðŸ˜¬",grin:"ðŸ˜�",grinning:"ðŸ˜€",guardsman:"ðŸ’‚",guardswoman:"ðŸ’‚&zwj;â™€ï¸�",guitar:"ðŸŽ¸",gun:"ðŸ”«",haircut_woman:"ðŸ’‡",haircut_man:"ðŸ’‡&zwj;â™‚ï¸�",hamburger:"ðŸ�”",hammer:"ðŸ”¨",hammer_and_pick:"âš’",hammer_and_wrench:"ðŸ› ",hamster:"ðŸ�¹",hand:"âœ‹",handbag:"ðŸ‘œ",handshake:"ðŸ¤�",hankey:"ðŸ’©",hatched_chick:"ðŸ�¥",hatching_chick:"ðŸ�£",headphones:"ðŸŽ§",hear_no_evil:"ðŸ™‰",heart:"â�¤ï¸�",heart_decoration:"ðŸ’Ÿ",heart_eyes:"ðŸ˜�",heart_eyes_cat:"ðŸ˜»",heartbeat:"ðŸ’“",heartpulse:"ðŸ’—",hearts:"â™¥ï¸�",heavy_check_mark:"âœ”ï¸�",heavy_division_sign:"âž—",heavy_dollar_sign:"ðŸ’²",heavy_heart_exclamation:"â�£ï¸�",heavy_minus_sign:"âž–",heavy_multiplication_x:"âœ–ï¸�",heavy_plus_sign:"âž•",helicopter:"ðŸš�",herb:"ðŸŒ¿",hibiscus:"ðŸŒº",high_brightness:"ðŸ”†",high_heel:"ðŸ‘ ",hocho:"ðŸ”ª",hole:"ðŸ•³",honey_pot:"ðŸ�¯",horse:"ðŸ�´",horse_racing:"ðŸ�‡",hospital:"ðŸ�¥",hot_pepper:"ðŸŒ¶",hotdog:"ðŸŒ­",hotel:"ðŸ�¨",hotsprings:"â™¨ï¸�",hourglass:"âŒ›ï¸�",hourglass_flowing_sand:"â�³",house:"ðŸ� ",house_with_garden:"ðŸ�¡",houses:"ðŸ�˜",hugs:"ðŸ¤—",hushed:"ðŸ˜¯",ice_cream:"ðŸ�¨",ice_hockey:"ðŸ�’",ice_skate:"â›¸",icecream:"ðŸ�¦",id:"ðŸ†”",ideograph_advantage:"ðŸ‰�",imp:"ðŸ‘¿",inbox_tray:"ðŸ“¥",incoming_envelope:"ðŸ“¨",tipping_hand_woman:"ðŸ’�",information_source:"â„¹ï¸�",innocent:"ðŸ˜‡",interrobang:"â�‰ï¸�",iphone:"ðŸ“±",izakaya_lantern:"ðŸ�®",jack_o_lantern:"ðŸŽƒ",japan:"ðŸ—¾",japanese_castle:"ðŸ�¯",japanese_goblin:"ðŸ‘º",japanese_ogre:"ðŸ‘¹",jeans:"ðŸ‘–",joy:"ðŸ˜‚",joy_cat:"ðŸ˜¹",joystick:"ðŸ•¹",kaaba:"ðŸ•‹",key:"ðŸ”‘",keyboard:"âŒ¨ï¸�",keycap_ten:"ðŸ”Ÿ",kick_scooter:"ðŸ›´",kimono:"ðŸ‘˜",kiss:"ðŸ’‹",kissing:"ðŸ˜—",kissing_cat:"ðŸ˜½",kissing_closed_eyes:"ðŸ˜š",kissing_heart:"ðŸ˜˜",kissing_smiling_eyes:"ðŸ˜™",kiwi_fruit:"ðŸ¥�",koala:"ðŸ�¨",koko:"ðŸˆ�",label:"ðŸ�·",large_blue_circle:"ðŸ”µ",large_blue_diamond:"ðŸ”·",large_orange_diamond:"ðŸ”¶",last_quarter_moon:"ðŸŒ—",last_quarter_moon_with_face:"ðŸŒœ",latin_cross:"âœ�ï¸�",laughing:"ðŸ˜†",leaves:"ðŸ�ƒ",ledger:"ðŸ“’",left_luggage:"ðŸ›…",left_right_arrow:"â†”ï¸�",leftwards_arrow_with_hook:"â†©ï¸�",lemon:"ðŸ�‹",leo:"â™Œï¸�",leopard:"ðŸ�†",level_slider:"ðŸŽš",libra:"â™Žï¸�",light_rail:"ðŸšˆ",link:"ðŸ”—",lion:"ðŸ¦�",lips:"ðŸ‘„",lipstick:"ðŸ’„",lizard:"ðŸ¦Ž",lock:"ðŸ”’",lock_with_ink_pen:"ðŸ”�",lollipop:"ðŸ�­",loop:"âž¿",loud_sound:"ðŸ”Š",loudspeaker:"ðŸ“¢",love_hotel:"ðŸ�©",love_letter:"ðŸ’Œ",low_brightness:"ðŸ”…",lying_face:"ðŸ¤¥",m:"â“‚ï¸�",mag:"ðŸ”�",mag_right:"ðŸ”Ž",mahjong:"ðŸ€„ï¸�",mailbox:"ðŸ“«",mailbox_closed:"ðŸ“ª",mailbox_with_mail:"ðŸ“¬",mailbox_with_no_mail:"ðŸ“­",man:"ðŸ‘¨",man_artist:"ðŸ‘¨&zwj;ðŸŽ¨",man_astronaut:"ðŸ‘¨&zwj;ðŸš€",man_cartwheeling:"ðŸ¤¸&zwj;â™‚ï¸�",man_cook:"ðŸ‘¨&zwj;ðŸ�³",man_dancing:"ðŸ•º",man_facepalming:"ðŸ¤¦&zwj;â™‚ï¸�",man_factory_worker:"ðŸ‘¨&zwj;ðŸ�­",man_farmer:"ðŸ‘¨&zwj;ðŸŒ¾",man_firefighter:"ðŸ‘¨&zwj;ðŸš’",man_health_worker:"ðŸ‘¨&zwj;âš•ï¸�",man_in_tuxedo:"ðŸ¤µ",man_judge:"ðŸ‘¨&zwj;âš–ï¸�",man_juggling:"ðŸ¤¹&zwj;â™‚ï¸�",man_mechanic:"ðŸ‘¨&zwj;ðŸ”§",man_office_worker:"ðŸ‘¨&zwj;ðŸ’¼",man_pilot:"ðŸ‘¨&zwj;âœˆï¸�",man_playing_handball:"ðŸ¤¾&zwj;â™‚ï¸�",man_playing_water_polo:"ðŸ¤½&zwj;â™‚ï¸�",man_scientist:"ðŸ‘¨&zwj;ðŸ”¬",man_shrugging:"ðŸ¤·&zwj;â™‚ï¸�",man_singer:"ðŸ‘¨&zwj;ðŸŽ¤",man_student:"ðŸ‘¨&zwj;ðŸŽ“",man_teacher:"ðŸ‘¨&zwj;ðŸ�«",man_technologist:"ðŸ‘¨&zwj;ðŸ’»",man_with_gua_pi_mao:"ðŸ‘²",man_with_turban:"ðŸ‘³",tangerine:"ðŸ�Š",mans_shoe:"ðŸ‘ž",mantelpiece_clock:"ðŸ•°",maple_leaf:"ðŸ��",martial_arts_uniform:"ðŸ¥‹",mask:"ðŸ˜·",massage_woman:"ðŸ’†",massage_man:"ðŸ’†&zwj;â™‚ï¸�",meat_on_bone:"ðŸ�–",medal_military:"ðŸŽ–",medal_sports:"ðŸ�…",mega:"ðŸ“£",melon:"ðŸ�ˆ",memo:"ðŸ“�",men_wrestling:"ðŸ¤¼&zwj;â™‚ï¸�",menorah:"ðŸ•Ž",mens:"ðŸš¹",metal:"ðŸ¤˜",metro:"ðŸš‡",microphone:"ðŸŽ¤",microscope:"ðŸ”¬",milk_glass:"ðŸ¥›",milky_way:"ðŸŒŒ",minibus:"ðŸš�",minidisc:"ðŸ’½",mobile_phone_off:"ðŸ“´",money_mouth_face:"ðŸ¤‘",money_with_wings:"ðŸ’¸",moneybag:"ðŸ’°",monkey:"ðŸ�’",monkey_face:"ðŸ�µ",monorail:"ðŸš�",moon:"ðŸŒ”",mortar_board:"ðŸŽ“",mosque:"ðŸ•Œ",motor_boat:"ðŸ›¥",motor_scooter:"ðŸ›µ",motorcycle:"ðŸ��",motorway:"ðŸ›£",mount_fuji:"ðŸ—»",mountain:"â›°",mountain_biking_man:"ðŸšµ",mountain_biking_woman:"ðŸšµ&zwj;â™€ï¸�",mountain_cableway:"ðŸš ",mountain_railway:"ðŸšž",mountain_snow:"ðŸ�”",mouse:"ðŸ�­",mouse2:"ðŸ��",movie_camera:"ðŸŽ¥",moyai:"ðŸ—¿",mrs_claus:"ðŸ¤¶",muscle:"ðŸ’ª",mushroom:"ðŸ�„",musical_keyboard:"ðŸŽ¹",musical_note:"ðŸŽµ",musical_score:"ðŸŽ¼",mute:"ðŸ”‡",nail_care:"ðŸ’…",name_badge:"ðŸ“›",national_park:"ðŸ�ž",nauseated_face:"ðŸ¤¢",necktie:"ðŸ‘”",negative_squared_cross_mark:"â�Ž",nerd_face:"ðŸ¤“",neutral_face:"ðŸ˜�",new:"ðŸ†•",new_moon:"ðŸŒ‘",new_moon_with_face:"ðŸŒš",newspaper:"ðŸ“°",newspaper_roll:"ðŸ—ž",next_track_button:"â�­",ng:"ðŸ†–",no_good_man:"ðŸ™…&zwj;â™‚ï¸�",no_good_woman:"ðŸ™…",night_with_stars:"ðŸŒƒ",no_bell:"ðŸ”•",no_bicycles:"ðŸš³",no_entry:"â›”ï¸�",no_entry_sign:"ðŸš«",no_mobile_phones:"ðŸ“µ",no_mouth:"ðŸ˜¶",no_pedestrians:"ðŸš·",no_smoking:"ðŸš­","non-potable_water":"ðŸš±",nose:"ðŸ‘ƒ",notebook:"ðŸ““",notebook_with_decorative_cover:"ðŸ“”",notes:"ðŸŽ¶",nut_and_bolt:"ðŸ”©",o:"â­•ï¸�",o2:"ðŸ…¾ï¸�",ocean:"ðŸŒŠ",octopus:"ðŸ�™",oden:"ðŸ�¢",office:"ðŸ�¢",oil_drum:"ðŸ›¢",ok:"ðŸ†—",ok_hand:"ðŸ‘Œ",ok_man:"ðŸ™†&zwj;â™‚ï¸�",ok_woman:"ðŸ™†",old_key:"ðŸ—�",older_man:"ðŸ‘´",older_woman:"ðŸ‘µ",om:"ðŸ•‰",on:"ðŸ”›",oncoming_automobile:"ðŸš˜",oncoming_bus:"ðŸš�",oncoming_police_car:"ðŸš”",oncoming_taxi:"ðŸš–",open_file_folder:"ðŸ“‚",open_hands:"ðŸ‘�",open_mouth:"ðŸ˜®",open_umbrella:"â˜‚ï¸�",ophiuchus:"â›Ž",orange_book:"ðŸ“™",orthodox_cross:"â˜¦ï¸�",outbox_tray:"ðŸ“¤",owl:"ðŸ¦‰",ox:"ðŸ�‚",package:"ðŸ“¦",page_facing_up:"ðŸ“„",page_with_curl:"ðŸ“ƒ",pager:"ðŸ“Ÿ",paintbrush:"ðŸ–Œ",palm_tree:"ðŸŒ´",pancakes:"ðŸ¥ž",panda_face:"ðŸ�¼",paperclip:"ðŸ“Ž",paperclips:"ðŸ–‡",parasol_on_ground:"â›±",parking:"ðŸ…¿ï¸�",part_alternation_mark:"ã€½ï¸�",partly_sunny:"â›…ï¸�",passenger_ship:"ðŸ›³",passport_control:"ðŸ›‚",pause_button:"â�¸",peace_symbol:"â˜®ï¸�",peach:"ðŸ�‘",peanuts:"ðŸ¥œ",pear:"ðŸ��",pen:"ðŸ–Š",pencil2:"âœ�ï¸�",penguin:"ðŸ�§",pensive:"ðŸ˜”",performing_arts:"ðŸŽ­",persevere:"ðŸ˜£",person_fencing:"ðŸ¤º",pouting_woman:"ðŸ™Ž",phone:"â˜Žï¸�",pick:"â›�",pig:"ðŸ�·",pig2:"ðŸ�–",pig_nose:"ðŸ�½",pill:"ðŸ’Š",pineapple:"ðŸ��",ping_pong:"ðŸ�“",pisces:"â™“ï¸�",pizza:"ðŸ�•",place_of_worship:"ðŸ›�",plate_with_cutlery:"ðŸ�½",play_or_pause_button:"â�¯",point_down:"ðŸ‘‡",point_left:"ðŸ‘ˆ",point_right:"ðŸ‘‰",point_up:"â˜�ï¸�",point_up_2:"ðŸ‘†",police_car:"ðŸš“",policewoman:"ðŸ‘®&zwj;â™€ï¸�",poodle:"ðŸ�©",popcorn:"ðŸ�¿",post_office:"ðŸ�£",postal_horn:"ðŸ“¯",postbox:"ðŸ“®",potable_water:"ðŸš°",potato:"ðŸ¥”",pouch:"ðŸ‘�",poultry_leg:"ðŸ�—",pound:"ðŸ’·",rage:"ðŸ˜¡",pouting_cat:"ðŸ˜¾",pouting_man:"ðŸ™Ž&zwj;â™‚ï¸�",pray:"ðŸ™�",prayer_beads:"ðŸ“¿",pregnant_woman:"ðŸ¤°",previous_track_button:"â�®",prince:"ðŸ¤´",princess:"ðŸ‘¸",printer:"ðŸ–¨",purple_heart:"ðŸ’œ",purse:"ðŸ‘›",pushpin:"ðŸ“Œ",put_litter_in_its_place:"ðŸš®",question:"â�“",rabbit:"ðŸ�°",rabbit2:"ðŸ�‡",racehorse:"ðŸ�Ž",racing_car:"ðŸ�Ž",radio:"ðŸ“»",radio_button:"ðŸ”˜",radioactive:"â˜¢ï¸�",railway_car:"ðŸšƒ",railway_track:"ðŸ›¤",rainbow:"ðŸŒˆ",rainbow_flag:"ðŸ�³ï¸�&zwj;ðŸŒˆ",raised_back_of_hand:"ðŸ¤š",raised_hand_with_fingers_splayed:"ðŸ–�",raised_hands:"ðŸ™Œ",raising_hand_woman:"ðŸ™‹",raising_hand_man:"ðŸ™‹&zwj;â™‚ï¸�",ram:"ðŸ��",ramen:"ðŸ�œ",rat:"ðŸ�€",record_button:"â�º",recycle:"â™»ï¸�",red_circle:"ðŸ”´",registered:"Â®ï¸�",relaxed:"â˜ºï¸�",relieved:"ðŸ˜Œ",reminder_ribbon:"ðŸŽ—",repeat:"ðŸ”�",repeat_one:"ðŸ”‚",rescue_worker_helmet:"â›‘",restroom:"ðŸš»",revolving_hearts:"ðŸ’ž",rewind:"â�ª",rhinoceros:"ðŸ¦�",ribbon:"ðŸŽ€",rice:"ðŸ�š",rice_ball:"ðŸ�™",rice_cracker:"ðŸ�˜",rice_scene:"ðŸŽ‘",right_anger_bubble:"ðŸ—¯",ring:"ðŸ’�",robot:"ðŸ¤–",rocket:"ðŸš€",rofl:"ðŸ¤£",roll_eyes:"ðŸ™„",roller_coaster:"ðŸŽ¢",rooster:"ðŸ�“",rose:"ðŸŒ¹",rosette:"ðŸ�µ",rotating_light:"ðŸš¨",round_pushpin:"ðŸ“�",rowing_man:"ðŸš£",rowing_woman:"ðŸš£&zwj;â™€ï¸�",rugby_football:"ðŸ�‰",running_man:"ðŸ�ƒ",running_shirt_with_sash:"ðŸŽ½",running_woman:"ðŸ�ƒ&zwj;â™€ï¸�",sa:"ðŸˆ‚ï¸�",sagittarius:"â™�ï¸�",sake:"ðŸ�¶",sandal:"ðŸ‘¡",santa:"ðŸŽ…",satellite:"ðŸ“¡",saxophone:"ðŸŽ·",school:"ðŸ�«",school_satchel:"ðŸŽ’",scissors:"âœ‚ï¸�",scorpion:"ðŸ¦‚",scorpius:"â™�ï¸�",scream:"ðŸ˜±",scream_cat:"ðŸ™€",scroll:"ðŸ“œ",seat:"ðŸ’º",secret:"ãŠ™ï¸�",see_no_evil:"ðŸ™ˆ",seedling:"ðŸŒ±",selfie:"ðŸ¤³",shallow_pan_of_food:"ðŸ¥˜",shamrock:"â˜˜ï¸�",shark:"ðŸ¦ˆ",shaved_ice:"ðŸ�§",sheep:"ðŸ�‘",shell:"ðŸ�š",shield:"ðŸ›¡",shinto_shrine:"â›©",ship:"ðŸš¢",shirt:"ðŸ‘•",shopping:"ðŸ›�",shopping_cart:"ðŸ›’",shower:"ðŸš¿",shrimp:"ðŸ¦�",signal_strength:"ðŸ“¶",six_pointed_star:"ðŸ”¯",ski:"ðŸŽ¿",skier:"â›·",skull:"ðŸ’€",skull_and_crossbones:"â˜ ï¸�",sleeping:"ðŸ˜´",sleeping_bed:"ðŸ›Œ",sleepy:"ðŸ˜ª",slightly_frowning_face:"ðŸ™�",slightly_smiling_face:"ðŸ™‚",slot_machine:"ðŸŽ°",small_airplane:"ðŸ›©",small_blue_diamond:"ðŸ”¹",small_orange_diamond:"ðŸ”¸",small_red_triangle:"ðŸ”º",small_red_triangle_down:"ðŸ”»",smile:"ðŸ˜„",smile_cat:"ðŸ˜¸",smiley:"ðŸ˜ƒ",smiley_cat:"ðŸ˜º",smiling_imp:"ðŸ˜ˆ",smirk:"ðŸ˜�",smirk_cat:"ðŸ˜¼",smoking:"ðŸš¬",snail:"ðŸ�Œ",snake:"ðŸ��",sneezing_face:"ðŸ¤§",snowboarder:"ðŸ�‚",snowflake:"â�„ï¸�",snowman:"â›„ï¸�",snowman_with_snow:"â˜ƒï¸�",sob:"ðŸ˜­",soccer:"âš½ï¸�",soon:"ðŸ”œ",sos:"ðŸ†˜",sound:"ðŸ”‰",space_invader:"ðŸ‘¾",spades:"â™ ï¸�",spaghetti:"ðŸ��",sparkle:"â�‡ï¸�",sparkler:"ðŸŽ‡",sparkles:"âœ¨",sparkling_heart:"ðŸ’–",speak_no_evil:"ðŸ™Š",speaker:"ðŸ”ˆ",speaking_head:"ðŸ—£",speech_balloon:"ðŸ’¬",speedboat:"ðŸš¤",spider:"ðŸ•·",spider_web:"ðŸ•¸",spiral_calendar:"ðŸ—“",spiral_notepad:"ðŸ—’",spoon:"ðŸ¥„",squid:"ðŸ¦‘",stadium:"ðŸ�Ÿ",star:"â­�ï¸�",star2:"ðŸŒŸ",star_and_crescent:"â˜ªï¸�",star_of_david:"âœ¡ï¸�",stars:"ðŸŒ ",station:"ðŸš‰",statue_of_liberty:"ðŸ—½",steam_locomotive:"ðŸš‚",stew:"ðŸ�²",stop_button:"â�¹",stop_sign:"ðŸ›‘",stopwatch:"â�±",straight_ruler:"ðŸ“�",strawberry:"ðŸ�“",stuck_out_tongue:"ðŸ˜›",stuck_out_tongue_closed_eyes:"ðŸ˜�",stuck_out_tongue_winking_eye:"ðŸ˜œ",studio_microphone:"ðŸŽ™",stuffed_flatbread:"ðŸ¥™",sun_behind_large_cloud:"ðŸŒ¥",sun_behind_rain_cloud:"ðŸŒ¦",sun_behind_small_cloud:"ðŸŒ¤",sun_with_face:"ðŸŒž",sunflower:"ðŸŒ»",sunglasses:"ðŸ˜Ž",sunny:"â˜€ï¸�",sunrise:"ðŸŒ…",sunrise_over_mountains:"ðŸŒ„",surfing_man:"ðŸ�„",surfing_woman:"ðŸ�„&zwj;â™€ï¸�",sushi:"ðŸ�£",suspension_railway:"ðŸšŸ",sweat:"ðŸ˜“",sweat_drops:"ðŸ’¦",sweat_smile:"ðŸ˜…",sweet_potato:"ðŸ� ",swimming_man:"ðŸ�Š",swimming_woman:"ðŸ�Š&zwj;â™€ï¸�",symbols:"ðŸ”£",synagogue:"ðŸ•�",syringe:"ðŸ’‰",taco:"ðŸŒ®",tada:"ðŸŽ‰",tanabata_tree:"ðŸŽ‹",taurus:"â™‰ï¸�",taxi:"ðŸš•",tea:"ðŸ�µ",telephone_receiver:"ðŸ“ž",telescope:"ðŸ”­",tennis:"ðŸŽ¾",tent:"â›ºï¸�",thermometer:"ðŸŒ¡",thinking:"ðŸ¤”",thought_balloon:"ðŸ’­",ticket:"ðŸŽ«",tickets:"ðŸŽŸ",tiger:"ðŸ�¯",tiger2:"ðŸ�…",timer_clock:"â�²",tipping_hand_man:"ðŸ’�&zwj;â™‚ï¸�",tired_face:"ðŸ˜«",tm:"â„¢ï¸�",toilet:"ðŸš½",tokyo_tower:"ðŸ—¼",tomato:"ðŸ�…",tongue:"ðŸ‘…",top:"ðŸ”�",tophat:"ðŸŽ©",tornado:"ðŸŒª",trackball:"ðŸ–²",tractor:"ðŸšœ",traffic_light:"ðŸš¥",train:"ðŸš‹",train2:"ðŸš†",tram:"ðŸšŠ",triangular_flag_on_post:"ðŸš©",triangular_ruler:"ðŸ“�",trident:"ðŸ”±",triumph:"ðŸ˜¤",trolleybus:"ðŸšŽ",trophy:"ðŸ�†",tropical_drink:"ðŸ�¹",tropical_fish:"ðŸ� ",truck:"ðŸšš",trumpet:"ðŸŽº",tulip:"ðŸŒ·",tumbler_glass:"ðŸ¥ƒ",turkey:"ðŸ¦ƒ",turtle:"ðŸ�¢",tv:"ðŸ“º",twisted_rightwards_arrows:"ðŸ”€",two_hearts:"ðŸ’•",two_men_holding_hands:"ðŸ‘¬",two_women_holding_hands:"ðŸ‘­",u5272:"ðŸˆ¹",u5408:"ðŸˆ´",u55b6:"ðŸˆº",u6307:"ðŸˆ¯ï¸�",u6708:"ðŸˆ·ï¸�",u6709:"ðŸˆ¶",u6e80:"ðŸˆµ",u7121:"ðŸˆšï¸�",u7533:"ðŸˆ¸",u7981:"ðŸˆ²",u7a7a:"ðŸˆ³",umbrella:"â˜”ï¸�",unamused:"ðŸ˜’",underage:"ðŸ”ž",unicorn:"ðŸ¦„",unlock:"ðŸ”“",up:"ðŸ†™",upside_down_face:"ðŸ™ƒ",v:"âœŒï¸�",vertical_traffic_light:"ðŸš¦",vhs:"ðŸ“¼",vibration_mode:"ðŸ“³",video_camera:"ðŸ“¹",video_game:"ðŸŽ®",violin:"ðŸŽ»",virgo:"â™�ï¸�",volcano:"ðŸŒ‹",volleyball:"ðŸ��",vs:"ðŸ†š",vulcan_salute:"ðŸ––",walking_man:"ðŸš¶",walking_woman:"ðŸš¶&zwj;â™€ï¸�",waning_crescent_moon:"ðŸŒ˜",waning_gibbous_moon:"ðŸŒ–",warning:"âš ï¸�",wastebasket:"ðŸ—‘",watch:"âŒšï¸�",water_buffalo:"ðŸ�ƒ",watermelon:"ðŸ�‰",wave:"ðŸ‘‹",wavy_dash:"ã€°ï¸�",waxing_crescent_moon:"ðŸŒ’",wc:"ðŸš¾",weary:"ðŸ˜©",wedding:"ðŸ’’",weight_lifting_man:"ðŸ�‹ï¸�",weight_lifting_woman:"ðŸ�‹ï¸�&zwj;â™€ï¸�",whale:"ðŸ�³",whale2:"ðŸ�‹",wheel_of_dharma:"â˜¸ï¸�",wheelchair:"â™¿ï¸�",white_check_mark:"âœ…",white_circle:"âšªï¸�",white_flag:"ðŸ�³ï¸�",white_flower:"ðŸ’®",white_large_square:"â¬œï¸�",white_medium_small_square:"â—½ï¸�",white_medium_square:"â—»ï¸�",white_small_square:"â–«ï¸�",white_square_button:"ðŸ”³",wilted_flower:"ðŸ¥€",wind_chime:"ðŸŽ�",wind_face:"ðŸŒ¬",wine_glass:"ðŸ�·",wink:"ðŸ˜‰",wolf:"ðŸ�º",woman:"ðŸ‘©",woman_artist:"ðŸ‘©&zwj;ðŸŽ¨",woman_astronaut:"ðŸ‘©&zwj;ðŸš€",woman_cartwheeling:"ðŸ¤¸&zwj;â™€ï¸�",woman_cook:"ðŸ‘©&zwj;ðŸ�³",woman_facepalming:"ðŸ¤¦&zwj;â™€ï¸�",woman_factory_worker:"ðŸ‘©&zwj;ðŸ�­",woman_farmer:"ðŸ‘©&zwj;ðŸŒ¾",woman_firefighter:"ðŸ‘©&zwj;ðŸš’",woman_health_worker:"ðŸ‘©&zwj;âš•ï¸�",woman_judge:"ðŸ‘©&zwj;âš–ï¸�",woman_juggling:"ðŸ¤¹&zwj;â™€ï¸�",woman_mechanic:"ðŸ‘©&zwj;ðŸ”§",woman_office_worker:"ðŸ‘©&zwj;ðŸ’¼",woman_pilot:"ðŸ‘©&zwj;âœˆï¸�",woman_playing_handball:"ðŸ¤¾&zwj;â™€ï¸�",woman_playing_water_polo:"ðŸ¤½&zwj;â™€ï¸�",woman_scientist:"ðŸ‘©&zwj;ðŸ”¬",woman_shrugging:"ðŸ¤·&zwj;â™€ï¸�",woman_singer:"ðŸ‘©&zwj;ðŸŽ¤",woman_student:"ðŸ‘©&zwj;ðŸŽ“",woman_teacher:"ðŸ‘©&zwj;ðŸ�«",woman_technologist:"ðŸ‘©&zwj;ðŸ’»",woman_with_turban:"ðŸ‘³&zwj;â™€ï¸�",womans_clothes:"ðŸ‘š",womans_hat:"ðŸ‘’",women_wrestling:"ðŸ¤¼&zwj;â™€ï¸�",womens:"ðŸšº",world_map:"ðŸ—º",worried:"ðŸ˜Ÿ",wrench:"ðŸ”§",writing_hand:"âœ�ï¸�",x:"â�Œ",yellow_heart:"ðŸ’›",yen:"ðŸ’´",yin_yang:"â˜¯ï¸�",yum:"ðŸ˜‹",zap:"âš¡ï¸�",zipper_mouth_face:"ðŸ¤�",zzz:"ðŸ’¤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},o.Converter=function(e){"use strict";var t={},r=[],n=[],a={},s=l,p={parsed:{},raw:"",format:""};function h(e,t){if(t=t||null,o.helper.isString(e)){if(t=e=o.helper.stdExtName(e),o.extensions[e])return console.warn("DEPRECATION WARNING: "+e+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(e,t){"function"==typeof e&&(e=e(new o.Converter));o.helper.isArray(e)||(e=[e]);var a=d(e,t);if(!a.valid)throw Error(a.error);for(var s=0;s<e.length;++s)switch(e[s].type){case"lang":r.push(e[s]);break;case"output":n.push(e[s]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(o.extensions[e],e);if(o.helper.isUndefined(i[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=i[e]}"function"==typeof e&&(e=e()),o.helper.isArray(e)||(e=[e]);var a=d(e,t);if(!a.valid)throw Error(a.error);for(var s=0;s<e.length;++s){switch(e[s].type){case"lang":r.push(e[s]);break;case"output":n.push(e[s])}if(e[s].hasOwnProperty("listeners"))for(var c in e[s].listeners)e[s].listeners.hasOwnProperty(c)&&m(c,e[s].listeners[c])}}function m(e,t){if(!o.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+typeof e+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+typeof t+" given");a.hasOwnProperty(e)||(a[e]=[]),a[e].push(t)}!function(){for(var r in e=e||{},c)c.hasOwnProperty(r)&&(t[r]=c[r]);if("object"!=typeof e)throw Error("Converter expects the passed parameter to be an object, but "+typeof e+" was passed instead.");for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.extensions&&o.helper.forEach(t.extensions,h)}(),this._dispatch=function(e,t,r,n){if(a.hasOwnProperty(e))for(var o=0;o<a[e].length;++o){var s=a[e][o](e,t,this,r,n);s&&void 0!==s&&(t=s)}return t},this.listen=function(e,t){return m(e,t),this},this.makeHtml=function(e){if(!e)return e;var a={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:r,outputModifiers:n,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/Â¨/g,"Â¨T")).replace(/\$/g,"Â¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g,"&nbsp;"),t.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,r=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(r,"")}(e)),e="\n\n"+e+"\n\n",e=(e=o.subParser("detab")(e,t,a)).replace(/^[ \t]+$/gm,""),o.helper.forEach(r,function(r){e=o.subParser("runExtension")(r,e,t,a)}),e=o.subParser("metadata")(e,t,a),e=o.subParser("hashPreCodeTags")(e,t,a),e=o.subParser("githubCodeBlocks")(e,t,a),e=o.subParser("hashHTMLBlocks")(e,t,a),e=o.subParser("hashCodeTags")(e,t,a),e=o.subParser("stripLinkDefinitions")(e,t,a),e=o.subParser("blockGamut")(e,t,a),e=o.subParser("unhashHTMLSpans")(e,t,a),e=(e=(e=o.subParser("unescapeSpecialChars")(e,t,a)).replace(/Â¨D/g,"$$")).replace(/Â¨T/g,"Â¨"),e=o.subParser("completeHTMLDocument")(e,t,a),o.helper.forEach(n,function(r){e=o.subParser("runExtension")(r,e,t,a)}),p=a.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">Â¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var n={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],n=0;n<t.length;++n)if(1===t[n].childElementCount&&"code"===t[n].firstChild.tagName.toLowerCase()){var a=t[n].firstChild.innerHTML.trim(),s=t[n].firstChild.getAttribute("data-language")||"";if(""===s)for(var i=t[n].firstChild.className.split(" "),c=0;c<i.length;++c){var l=i[c].match(/^language-(.+)$/);if(null!==l){s=l[1];break}}a=o.helper.unescapeHTMLEntities(a),r.push(a),t[n].outerHTML='<precode language="'+s+'" precodenum="'+n.toString()+'"></precode>'}else r.push(t[n].innerHTML),t[n].innerHTML="",t[n].setAttribute("prenum",n.toString());return r}(r)};!function e(t){for(var r=0;r<t.childNodes.length;++r){var n=t.childNodes[r];3===n.nodeType?/\S/.test(n.nodeValue)?(n.nodeValue=n.nodeValue.split("\n").join(" "),n.nodeValue=n.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(n),--r):1===n.nodeType&&e(n)}}(r);for(var a=r.childNodes,s="",i=0;i<a.length;i++)s+=o.subParser("makeMarkdown.node")(a[i],n);return s},this.setOption=function(e,r){t[e]=r},this.getOption=function(e){return t[e]},this.getOptions=function(){return t},this.addExtension=function(e,t){h(e,t=t||null)},this.useExtension=function(e){h(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var r=u[e];for(var n in s=e,r)r.hasOwnProperty(n)&&(t[n]=r[n])},this.getFlavor=function(){return s},this.removeExtension=function(e){o.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var a=e[t],s=0;s<r.length;++s)r[s]===a&&r[s].splice(s,1);for(;0<n.length;++s)n[0]===a&&n[0].splice(s,1)}},this.getAllExtensions=function(){return{language:r,output:n}},this.getMetadata=function(e){return e?p.raw:p.parsed},this.getMetadataFormat=function(){return p.format},this._setMetadataPair=function(e,t){p.parsed[e]=t},this._setMetadataFormat=function(e){p.format=e},this._setMetadataRaw=function(e){p.raw=e}},o.subParser("anchors",function(e,t,r){"use strict";var n=function(e,n,a,s,i,c,l){if(o.helper.isUndefined(l)&&(l=""),a=a.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)s="";else if(!s){if(a||(a=n.toLowerCase().replace(/ ?\n/g," ")),s="#"+a,o.helper.isUndefined(r.gUrls[a]))return e;s=r.gUrls[a],o.helper.isUndefined(r.gTitles[a])||(l=r.gTitles[a])}var u='<a href="'+(s=s.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"';return""!==l&&null!==l&&(u+=' title="'+(l=(l=l.replace(/"/g,"&quot;")).replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(s)&&(u+=' rel="noopener noreferrer" target="Â¨E95Eblank"'),u+=">"+n+"</a>"};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[([^\[\]]+)]()()()()()/g,n),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,function(e,r,n,a,s){if("\\"===n)return r+a;if(!o.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var i=t.ghMentionsLink.replace(/\{u}/g,s),c="";return t.openLinksInNewWindow&&(c=' rel="noopener noreferrer" target="Â¨E95Eblank"'),r+'<a href="'+i+'"'+c+">"+a+"</a>"})),e=r.converter._dispatch("anchors.after",e,t,r)});var m=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,g=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,f=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,_=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,b=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,w=function(e){"use strict";return function(t,r,n,a,s,i,c){var l=n=n.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback),u="",d="",p=r||"",h=c||"";return/^www\./i.test(n)&&(n=n.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&i&&(u=i),e.openLinksInNewWindow&&(d=' rel="noopener noreferrer" target="Â¨E95Eblank"'),p+'<a href="'+n+'"'+d+">"+l+"</a>"+u+h}},k=function(e,t){"use strict";return function(r,n,a){var s="mailto:";return n=n||"",a=o.subParser("unescapeSpecialChars")(a,e,t),e.encodeEmails?(s=o.helper.encodeEmailAddress(s+a),a=o.helper.encodeEmailAddress(a)):s+=a,n+'<a href="'+s+'">'+a+"</a>"}};o.subParser("autoLinks",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(f,w(t))).replace(b,k(t,r)),e=r.converter._dispatch("autoLinks.after",e,t,r)}),o.subParser("simplifiedAutoLinks",function(e,t,r){"use strict";return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(g,w(t)):e.replace(m,w(t))).replace(_,k(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e}),o.subParser("blockGamut",function(e,t,r){"use strict";return e=r.converter._dispatch("blockGamut.before",e,t,r),e=o.subParser("blockQuotes")(e,t,r),e=o.subParser("headers")(e,t,r),e=o.subParser("horizontalRule")(e,t,r),e=o.subParser("lists")(e,t,r),e=o.subParser("codeBlocks")(e,t,r),e=o.subParser("tables")(e,t,r),e=o.subParser("hashHTMLBlocks")(e,t,r),e=o.subParser("paragraphs")(e,t,r),e=r.converter._dispatch("blockGamut.after",e,t,r)}),o.subParser("blockQuotes",function(e,t,r){"use strict";e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var n=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(n=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(n,function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/Â¨0/g,"")).replace(/^[ \t]+$/gm,""),e=o.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=o.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1  ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(e,t){var r=t;return r=(r=r.replace(/^  /gm,"Â¨0")).replace(/Â¨0/g,"")}),o.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,r)}),e=r.converter._dispatch("blockQuotes.after",e,t,r)}),o.subParser("codeBlocks",function(e,t,r){"use strict";e=r.converter._dispatch("codeBlocks.before",e,t,r);return e=(e=(e+="Â¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=Â¨0))/g,function(e,n,a){var s=n,i=a,c="\n";return s=o.subParser("outdent")(s,t,r),s=o.subParser("encodeCode")(s,t,r),s=(s=(s=o.subParser("detab")(s,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(c=""),s="<pre><code>"+s+c+"</code></pre>",o.subParser("hashBlock")(s,t,r)+i})).replace(/Â¨0/,""),e=r.converter._dispatch("codeBlocks.after",e,t,r)}),o.subParser("codeSpans",function(e,t,r){"use strict";return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,n,a,s){var i=s;return i=(i=i.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),i=n+"<code>"+(i=o.subParser("encodeCode")(i,t,r))+"</code>",i=o.subParser("hashHTMLSpans")(i,t,r)}),e=r.converter._dispatch("codeSpans.after",e,t,r)}),o.subParser("completeHTMLDocument",function(e,t,r){"use strict";if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var n="html",a="<!DOCTYPE HTML>\n",o="",s='<meta charset="utf-8">\n',i="",c="";for(var l in void 0!==r.metadata.parsed.doctype&&(a="<!DOCTYPE "+r.metadata.parsed.doctype+">\n","html"!==(n=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==n||(s='<meta charset="utf-8">')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(l))switch(l.toLowerCase()){case"doctype":break;case"title":o="<title>"+r.metadata.parsed.title+"</title>\n";break;case"charset":s="html"===n||"html5"===n?'<meta charset="'+r.metadata.parsed.charset+'">\n':'<meta name="charset" content="'+r.metadata.parsed.charset+'">\n';break;case"language":case"lang":i=' lang="'+r.metadata.parsed[l]+'"',c+='<meta name="'+l+'" content="'+r.metadata.parsed[l]+'">\n';break;default:c+='<meta name="'+l+'" content="'+r.metadata.parsed[l]+'">\n'}return e=a+"<html"+i+">\n<head>\n"+o+s+c+"</head>\n<body>\n"+e.trim()+"\n</body>\n</html>",e=r.converter._dispatch("completeHTMLDocument.after",e,t,r)}),o.subParser("detab",function(e,t,r){"use strict";return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g,"    ")).replace(/\t/g,"Â¨AÂ¨B")).replace(/Â¨B(.+?)Â¨A/g,function(e,t){for(var r=t,n=4-r.length%4,a=0;a<n;a++)r+=" ";return r})).replace(/Â¨A/g,"    ")).replace(/Â¨B/g,""),e=r.converter._dispatch("detab.after",e,t,r)}),o.subParser("ellipsis",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("ellipsis.before",e,t,r)).replace(/\.\.\./g,"â€¦"),e=r.converter._dispatch("ellipsis.after",e,t,r)}),o.subParser("emoji",function(e,t,r){"use strict";if(!t.emoji)return e;return e=(e=r.converter._dispatch("emoji.before",e,t,r)).replace(/:([\S]+?):/g,function(e,t){return o.helper.emojis.hasOwnProperty(t)?o.helper.emojis[t]:e}),e=r.converter._dispatch("emoji.after",e,t,r)}),o.subParser("encodeAmpsAndAngles",function(e,t,r){"use strict";return e=(e=(e=(e=(e=r.converter._dispatch("encodeAmpsAndAngles.before",e,t,r)).replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;")).replace(/<(?![a-z\/?$!])/gi,"&lt;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),e=r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)}),o.subParser("encodeBackslashEscapes",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,o.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,o.helper.escapeCharactersCallback),e=r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)}),o.subParser("encodeCode",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/([*_{}\[\]\\=~-])/g,o.helper.escapeCharactersCallback),e=r.converter._dispatch("encodeCode.after",e,t,r)}),o.subParser("escapeSpecialCharsWithinTagAttributes",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,o.helper.escapeCharactersCallback)})).replace(/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\`*_~=|])/g,o.helper.escapeCharactersCallback)}),e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)}),o.subParser("githubCodeBlocks",function(e,t,r){"use strict";return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="Â¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,function(e,n,a,s){var i=t.omitExtraWLInCodeBlocks?"":"\n";return s=o.subParser("encodeCode")(s,t,r),s="<pre><code"+(a?' class="'+a+" language-"+a+'"':"")+">"+(s=(s=(s=o.subParser("detab")(s,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+i+"</code></pre>",s=o.subParser("hashBlock")(s,t,r),"\n\nÂ¨G"+(r.ghCodeBlocks.push({text:e,codeblock:s})-1)+"G\n\n"})).replace(/Â¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e}),o.subParser("hashBlock",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\nÂ¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",e=r.converter._dispatch("hashBlock.after",e,t,r)}),o.subParser("hashCodeTags",function(e,t,r){"use strict";e=r.converter._dispatch("hashCodeTags.before",e,t,r);return e=o.helper.replaceRecursiveRegExp(e,function(e,n,a,s){var i=a+o.subParser("encodeCode")(n,t,r)+s;return"Â¨C"+(r.gHtmlSpans.push(i)-1)+"C"},"<code\\b[^>]*>","</code>","gim"),e=r.converter._dispatch("hashCodeTags.after",e,t,r)}),o.subParser("hashElement",function(e,t,r){"use strict";return function(e,t){var n=t;return n=(n=(n=n.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),n="\n\nÂ¨K"+(r.gHtmlBlocks.push(n)-1)+"K\n\n"}}),o.subParser("hashHTMLBlocks",function(e,t,r){"use strict";e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var n=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],a=function(e,t,n,a){var o=e;return-1!==n.search(/\bmarkdown\b/)&&(o=n+r.converter.makeHtml(t)+a),"\n\nÂ¨K"+(r.gHtmlBlocks.push(o)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,t){return"&lt;"+t+"&gt;"}));for(var s=0;s<n.length;++s)for(var i,c=new RegExp("^ {0,3}(<"+n[s]+"\\b[^>]*>)","im"),l="<"+n[s]+"\\b[^>]*>",u="</"+n[s]+">";-1!==(i=o.helper.regexIndexOf(e,c));){var d=o.helper.splitAtIndex(e,i),p=o.helper.replaceRecursiveRegExp(d[1],a,l,u,"im");if(p===d[1])break;e=d[0].concat(p)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,o.subParser("hashElement")(e,t,r)),e=(e=o.helper.replaceRecursiveRegExp(e,function(e){return"\n\nÂ¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"},"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,o.subParser("hashElement")(e,t,r)),e=r.converter._dispatch("hashHTMLBlocks.after",e,t,r)}),o.subParser("hashHTMLSpans",function(e,t,r){"use strict";function n(e){return"Â¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,function(e){return n(e)})).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(e){return n(e)})).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(e){return n(e)})).replace(/<[^>]+?>/gi,function(e){return n(e)}),e=r.converter._dispatch("hashHTMLSpans.after",e,t,r)}),o.subParser("unhashHTMLSpans",function(e,t,r){"use strict";e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var n=0;n<r.gHtmlSpans.length;++n){for(var a=r.gHtmlSpans[n],o=0;/Â¨C(\d+)C/.test(a);){var s=RegExp.$1;if(a=a.replace("Â¨C"+s+"C",r.gHtmlSpans[s]),10===o){console.error("maximum nesting of 10 spans reached!!!");break}++o}e=e.replace("Â¨C"+n+"C",a)}return e=r.converter._dispatch("unhashHTMLSpans.after",e,t,r)}),o.subParser("hashPreCodeTags",function(e,t,r){"use strict";e=r.converter._dispatch("hashPreCodeTags.before",e,t,r);return e=o.helper.replaceRecursiveRegExp(e,function(e,n,a,s){var i=a+o.subParser("encodeCode")(n,t,r)+s;return"\n\nÂ¨G"+(r.ghCodeBlocks.push({text:e,codeblock:i})-1)+"G\n\n"},"^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>","^ {0,3}</code>\\s*</pre>","gim"),e=r.converter._dispatch("hashPreCodeTags.after",e,t,r)}),o.subParser("headers",function(e,t,r){"use strict";e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),a=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,s=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(a,function(e,a){var s=o.subParser("spanGamut")(a,t,r),i=t.noHeaderId?"":' id="'+c(a)+'"',l="<h"+n+i+">"+s+"</h"+n+">";return o.subParser("hashBlock")(l,t,r)})).replace(s,function(e,a){var s=o.subParser("spanGamut")(a,t,r),i=t.noHeaderId?"":' id="'+c(a)+'"',l=n+1,u="<h"+l+i+">"+s+"</h"+l+">";return o.subParser("hashBlock")(u,t,r)});var i=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function c(e){var n,a;if(t.customizedHeaderId){var s=e.match(/\{([^{]+?)}\s*$/);s&&s[1]&&(e=s[1])}return n=e,a=o.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(n=a+n),n=t.ghCompatibleHeaderId?n.replace(/ /g,"-").replace(/&amp;/g,"").replace(/Â¨T/g,"").replace(/Â¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^Â¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?n.replace(/ /g,"-").replace(/&amp;/g,"&").replace(/Â¨T/g,"Â¨").replace(/Â¨D/g,"$").replace(/["']/g,"-").toLowerCase():n.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(n=a+n),r.hashLinkCounts[n]?n=n+"-"+r.hashLinkCounts[n]++:r.hashLinkCounts[n]=1,n}return e=e.replace(i,function(e,a,s){var i=s;t.customizedHeaderId&&(i=s.replace(/\s?\{([^{]+?)}\s*$/,""));var l=o.subParser("spanGamut")(i,t,r),u=t.noHeaderId?"":' id="'+c(s)+'"',d=n-1+a.length,p="<h"+d+u+">"+l+"</h"+d+">";return o.subParser("hashBlock")(p,t,r)}),e=r.converter._dispatch("headers.after",e,t,r)}),o.subParser("horizontalRule",function(e,t,r){"use strict";e=r.converter._dispatch("horizontalRule.before",e,t,r);var n=o.subParser("hashBlock")("<hr />",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,n),e=r.converter._dispatch("horizontalRule.after",e,t,r)}),o.subParser("images",function(e,t,r){"use strict";function n(e,t,n,a,s,i,c,l){var u=r.gUrls,d=r.gTitles,p=r.gDimensions;if(n=n.toLowerCase(),l||(l=""),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)a="";else if(""===a||null===a){if(""!==n&&null!==n||(n=t.toLowerCase().replace(/ ?\n/g," ")),a="#"+n,o.helper.isUndefined(u[n]))return e;a=u[n],o.helper.isUndefined(d[n])||(l=d[n]),o.helper.isUndefined(p[n])||(s=p[n].width,i=p[n].height)}t=t.replace(/"/g,"&quot;").replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback);var h='<img src="'+(a=a.replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'" alt="'+t+'"';return l&&o.helper.isString(l)&&(h+=' title="'+(l=l.replace(/"/g,"&quot;").replace(o.helper.regexes.asteriskDashAndColon,o.helper.escapeCharactersCallback))+'"'),s&&i&&(h+=' width="'+(s="*"===s?"auto":s)+'"',h+=' height="'+(i="*"===i?"auto":i)+'"'),h+=" />"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,function(e,t,r,a,o,s,i,c){return n(e,t,r,a=a.replace(/\s/g,""),o,s,i,c)})).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,n)).replace(/!\[([^\[\]]+)]()()()()()/g,n),e=r.converter._dispatch("images.after",e,t,r)}),o.subParser("italicsAndBold",function(e,t,r){"use strict";function n(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return n(t,"<strong><em>","</em></strong>")})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return n(t,"<strong>","</strong>")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(e,t){return n(t,"<em>","</em>")}):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?n(t,"<strong><em>","</em></strong>"):e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?n(t,"<strong>","</strong>"):e})).replace(/_([^\s_][\s\S]*?)_/g,function(e,t){return/\S$/.test(t)?n(t,"<em>","</em>"):e}),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,function(e,t,r){return n(r,t+"<strong><em>","</em></strong>")})).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,function(e,t,r){return n(r,t+"<strong>","</strong>")})).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,function(e,t,r){return n(r,t+"<em>","</em>")}):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(e,t){return/\S$/.test(t)?n(t,"<strong><em>","</em></strong>"):e})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(e,t){return/\S$/.test(t)?n(t,"<strong>","</strong>"):e})).replace(/\*([^\s*][\s\S]*?)\*/g,function(e,t){return/\S$/.test(t)?n(t,"<em>","</em>"):e}),e=r.converter._dispatch("italicsAndBold.after",e,t,r)}),o.subParser("lists",function(e,t,r){"use strict";function n(e,n){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,s=/\n[ \t]*\n(?!Â¨0)/.test(e+="Â¨0");return t.disableForced4SpacesIndentedSublists&&(a=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(Â¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(a,function(e,n,a,i,c,l,u){u=u&&""!==u.trim();var d=o.subParser("outdent")(c,t,r),p="";return l&&t.tasklists&&(p=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,function(){var e='<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';return u&&(e+=" checked"),e+=">"})),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,function(e){return"Â¨A"+e}),n||d.search(/\n{2,}/)>-1?(d=o.subParser("githubCodeBlocks")(d,t,r),d=o.subParser("blockGamut")(d,t,r)):(d=(d=o.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=o.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=s?o.subParser("paragraphs")(d,t,r):o.subParser("spanGamut")(d,t,r)),d="<li"+p+">"+(d=d.replace("Â¨A",""))+"</li>\n"})).replace(/Â¨0/g,""),r.gListLevel--,n&&(e=e.replace(/\s+$/,"")),e}function a(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function s(e,r,o){var s=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,i=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,c="ul"===r?s:i,l="";if(-1!==e.search(c))!function t(u){var d=u.search(c),p=a(e,r);-1!==d?(l+="\n\n<"+r+p+">\n"+n(u.slice(0,d),!!o)+"</"+r+">\n",c="ul"===(r="ul"===r?"ol":"ul")?s:i,t(u.slice(d))):l+="\n\n<"+r+p+">\n"+n(u,!!o)+"</"+r+">\n"}(e);else{var u=a(e,r);l="\n\n<"+r+u+">\n"+n(e,!!o)+"</"+r+">\n"}return l}return e=r.converter._dispatch("lists.before",e,t,r),e+="Â¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r){return s(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)}):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(Â¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(e,t,r,n){return s(r,n.search(/[*+-]/g)>-1?"ul":"ol",!1)})).replace(/Â¨0/,""),e=r.converter._dispatch("lists.after",e,t,r)}),o.subParser("metadata",function(e,t,r){"use strict";if(!t.metadata)return e;function n(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&amp;").replace(/"/g,"&quot;")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,function(e,t,n){return r.metadata.parsed[t]=n,""})}return e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*Â«Â«Â«+(\S*?)\n([\s\S]+?)\nÂ»Â»Â»+\n/,function(e,t,r){return n(r),"Â¨M"})).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,function(e,t,a){return t&&(r.metadata.format=t),n(a),"Â¨M"})).replace(/Â¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)}),o.subParser("outdent",function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"Â¨0")).replace(/Â¨0/g,""),e=r.converter._dispatch("outdent.after",e,t,r)}),o.subParser("paragraphs",function(e,t,r){"use strict";for(var n=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),a=[],s=n.length,i=0;i<s;i++){var c=n[i];c.search(/Â¨(K|G)(\d+)\1/g)>=0?a.push(c):c.search(/\S/)>=0&&(c=(c=o.subParser("spanGamut")(c,t,r)).replace(/^([ \t]*)/g,"<p>"),c+="</p>",a.push(c))}for(s=a.length,i=0;i<s;i++){for(var l="",u=a[i],d=!1;/Â¨(K|G)(\d+)\1/.test(u);){var p=RegExp.$1,h=RegExp.$2;l=(l="K"===p?r.gHtmlBlocks[h]:d?o.subParser("encodeCode")(r.ghCodeBlocks[h].text,t,r):r.ghCodeBlocks[h].codeblock).replace(/\$/g,"$$$$"),u=u.replace(/(\n\n)?Â¨(K|G)\d+\2(\n\n)?/,l),/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(u)&&(d=!0)}a[i]=u}return e=(e=(e=a.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)}),o.subParser("runExtension",function(e,t,r,n){"use strict";if(e.filter)t=e.filter(t,n.converter,r);else if(e.regex){var a=e.regex;a instanceof RegExp||(a=new RegExp(a,"g")),t=t.replace(a,e.replace)}return t}),o.subParser("spanGamut",function(e,t,r){"use strict";return e=r.converter._dispatch("spanGamut.before",e,t,r),e=o.subParser("codeSpans")(e,t,r),e=o.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=o.subParser("encodeBackslashEscapes")(e,t,r),e=o.subParser("images")(e,t,r),e=o.subParser("anchors")(e,t,r),e=o.subParser("autoLinks")(e,t,r),e=o.subParser("simplifiedAutoLinks")(e,t,r),e=o.subParser("emoji")(e,t,r),e=o.subParser("underline")(e,t,r),e=o.subParser("italicsAndBold")(e,t,r),e=o.subParser("strikethrough")(e,t,r),e=o.subParser("ellipsis")(e,t,r),e=o.subParser("hashHTMLSpans")(e,t,r),e=o.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\nÂ¨K/.test(e)||(e=e.replace(/\n+/g,"<br />\n")):e=e.replace(/  +\n/g,"<br />\n"),e=r.converter._dispatch("spanGamut.after",e,t,r)}),o.subParser("strikethrough",function(e,t,r){"use strict";return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,n){return function(e){return t.simplifiedAutoLink&&(e=o.subParser("simplifiedAutoLinks")(e,t,r)),"<del>"+e+"</del>"}(n)}),e=r.converter._dispatch("strikethrough.after",e,t,r)),e}),o.subParser("stripLinkDefinitions",function(e,t,r){"use strict";var n=function(e,n,a,s,i,c,l){return n=n.toLowerCase(),a.match(/^data:.+?\/.+?;base64,/)?r.gUrls[n]=a.replace(/\s/g,""):r.gUrls[n]=o.subParser("encodeAmpsAndAngles")(a,t,r),c?c+l:(l&&(r.gTitles[n]=l.replace(/"|'/g,"&quot;")),t.parseImgDimensions&&s&&i&&(r.gDimensions[n]={width:s,height:i}),"")};return e=(e=(e=(e+="Â¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=Â¨0)|(?=\n\[))/gm,n)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=Â¨0))/gm,n)).replace(/Â¨0/,"")}),o.subParser("tables",function(e,t,r){"use strict";if(!t.tables)return e;function n(e){return/^:[ \t]*--*$/.test(e)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(e)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(e)?' style="text-align:center;"':""}function a(e,n){var a="";return e=e.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(a=' id="'+e.replace(/ /g,"_").toLowerCase()+'"'),"<th"+a+n+">"+(e=o.subParser("spanGamut")(e,t,r))+"</th>\n"}function s(e,n){return"<td"+n+">"+o.subParser("spanGamut")(e,t,r)+"</td>\n"}function i(e){var i,c=e.split("\n");for(i=0;i<c.length;++i)/^ {0,3}\|/.test(c[i])&&(c[i]=c[i].replace(/^ {0,3}\|/,"")),/\|[ \t]*$/.test(c[i])&&(c[i]=c[i].replace(/\|[ \t]*$/,"")),c[i]=o.subParser("codeSpans")(c[i],t,r);var l=c[0].split("|").map(function(e){return e.trim()}),u=c[1].split("|").map(function(e){return e.trim()}),d=[],p=[],h=[],m=[];for(c.shift(),c.shift(),i=0;i<c.length;++i)""!==c[i].trim()&&d.push(c[i].split("|").map(function(e){return e.trim()}));if(l.length<u.length)return e;for(i=0;i<u.length;++i)h.push(n(u[i]));for(i=0;i<l.length;++i)o.helper.isUndefined(h[i])&&(h[i]=""),p.push(a(l[i],h[i]));for(i=0;i<d.length;++i){for(var g=[],f=0;f<p.length;++f)o.helper.isUndefined(d[i][f]),g.push(s(d[i][f],h[f]));m.push(g)}return function(e,t){for(var r="<table>\n<thead>\n<tr>\n",n=e.length,a=0;a<n;++a)r+=e[a];for(r+="</tr>\n</thead>\n<tbody>\n",a=0;a<t.length;++a){r+="<tr>\n";for(var o=0;o<n;++o)r+=t[a][o];r+="</tr>\n"}return r+"</tbody>\n</table>\n"}(p,m)}return e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,o.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|Â¨0)/gm,i)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|Â¨0)/gm,i),e=r.converter._dispatch("tables.after",e,t,r)}),o.subParser("underline",function(e,t,r){"use strict";return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,t){return"<u>"+t+"</u>"})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,t){return"<u>"+t+"</u>"}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e})).replace(/__(\S[\s\S]*?)__/g,function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e})).replace(/(_)/g,o.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e}),o.subParser("unescapeSpecialChars",function(e,t,r){"use strict";return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/Â¨E(\d+)E/g,function(e,t){var r=parseInt(t);return String.fromCharCode(r)}),e=r.converter._dispatch("unescapeSpecialChars.after",e,t,r)}),o.subParser("makeMarkdown.blockquote",function(e,t){"use strict";var r="";if(e.hasChildNodes())for(var n=e.childNodes,a=n.length,s=0;s<a;++s){var i=o.subParser("makeMarkdown.node")(n[s],t);""!==i&&(r+=i)}return r="> "+(r=r.trim()).split("\n").join("\n> ")}),o.subParser("makeMarkdown.codeBlock",function(e,t){"use strict";var r=e.getAttribute("language"),n=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[n]+"\n```"}),o.subParser("makeMarkdown.codeSpan",function(e){"use strict";return"`"+e.innerHTML+"`"}),o.subParser("makeMarkdown.emphasis",function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="*";for(var n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);r+="*"}return r}),o.subParser("makeMarkdown.header",function(e,t,r){"use strict";var n=new Array(r+1).join("#"),a="";if(e.hasChildNodes()){a=n+" ";for(var s=e.childNodes,i=s.length,c=0;c<i;++c)a+=o.subParser("makeMarkdown.node")(s[c],t)}return a}),o.subParser("makeMarkdown.hr",function(){"use strict";return"---"}),o.subParser("makeMarkdown.image",function(e){"use strict";var t="";return e.hasAttribute("src")&&(t+="!["+e.getAttribute("alt")+"](",t+="<"+e.getAttribute("src")+">",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t}),o.subParser("makeMarkdown.links",function(e,t){"use strict";var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var n=e.childNodes,a=n.length;r="[";for(var s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);r+="](",r+="<"+e.getAttribute("href")+">",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r}),o.subParser("makeMarkdown.list",function(e,t,r){"use strict";var n="";if(!e.hasChildNodes())return"";for(var a=e.childNodes,s=a.length,i=e.getAttribute("start")||1,c=0;c<s;++c)if(void 0!==a[c].tagName&&"li"===a[c].tagName.toLowerCase()){n+=("ol"===r?i.toString()+". ":"- ")+o.subParser("makeMarkdown.listItem")(a[c],t),++i}return(n+="\n\x3c!-- --\x3e\n").trim()}),o.subParser("makeMarkdown.listItem",function(e,t){"use strict";for(var r="",n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);return/\n$/.test(r)?r=r.split("\n").join("\n    ").replace(/^ {4}$/gm,"").replace(/\n\n+/g,"\n\n"):r+="\n",r}),o.subParser("makeMarkdown.node",function(e,t,r){"use strict";r=r||!1;var n="";if(3===e.nodeType)return o.subParser("makeMarkdown.txt")(e,t);if(8===e.nodeType)return"\x3c!--"+e.data+"--\x3e\n\n";if(1!==e.nodeType)return"";switch(e.tagName.toLowerCase()){case"h1":r||(n=o.subParser("makeMarkdown.header")(e,t,1)+"\n\n");break;case"h2":r||(n=o.subParser("makeMarkdown.header")(e,t,2)+"\n\n");break;case"h3":r||(n=o.subParser("makeMarkdown.header")(e,t,3)+"\n\n");break;case"h4":r||(n=o.subParser("makeMarkdown.header")(e,t,4)+"\n\n");break;case"h5":r||(n=o.subParser("makeMarkdown.header")(e,t,5)+"\n\n");break;case"h6":r||(n=o.subParser("makeMarkdown.header")(e,t,6)+"\n\n");break;case"p":r||(n=o.subParser("makeMarkdown.paragraph")(e,t)+"\n\n");break;case"blockquote":r||(n=o.subParser("makeMarkdown.blockquote")(e,t)+"\n\n");break;case"hr":r||(n=o.subParser("makeMarkdown.hr")(e,t)+"\n\n");break;case"ol":r||(n=o.subParser("makeMarkdown.list")(e,t,"ol")+"\n\n");break;case"ul":r||(n=o.subParser("makeMarkdown.list")(e,t,"ul")+"\n\n");break;case"precode":r||(n=o.subParser("makeMarkdown.codeBlock")(e,t)+"\n\n");break;case"pre":r||(n=o.subParser("makeMarkdown.pre")(e,t)+"\n\n");break;case"table":r||(n=o.subParser("makeMarkdown.table")(e,t)+"\n\n");break;case"code":n=o.subParser("makeMarkdown.codeSpan")(e,t);break;case"em":case"i":n=o.subParser("makeMarkdown.emphasis")(e,t);break;case"strong":case"b":n=o.subParser("makeMarkdown.strong")(e,t);break;case"del":n=o.subParser("makeMarkdown.strikethrough")(e,t);break;case"a":n=o.subParser("makeMarkdown.links")(e,t);break;case"img":n=o.subParser("makeMarkdown.image")(e,t);break;default:n=e.outerHTML+"\n\n"}return n}),o.subParser("makeMarkdown.paragraph",function(e,t){"use strict";var r="";if(e.hasChildNodes())for(var n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);return r=r.trim()}),o.subParser("makeMarkdown.pre",function(e,t){"use strict";var r=e.getAttribute("prenum");return"<pre>"+t.preList[r]+"</pre>"}),o.subParser("makeMarkdown.strikethrough",function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="~~";for(var n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);r+="~~"}return r}),o.subParser("makeMarkdown.strong",function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="**";for(var n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t);r+="**"}return r}),o.subParser("makeMarkdown.table",function(e,t){"use strict";var r,n,a="",s=[[],[]],i=e.querySelectorAll("thead>tr>th"),c=e.querySelectorAll("tbody>tr");for(r=0;r<i.length;++r){var l=o.subParser("makeMarkdown.tableCell")(i[r],t),u="---";if(i[r].hasAttribute("style"))switch(i[r].getAttribute("style").toLowerCase().replace(/\s/g,"")){case"text-align:left;":u=":---";break;case"text-align:right;":u="---:";break;case"text-align:center;":u=":---:"}s[0][r]=l.trim(),s[1][r]=u}for(r=0;r<c.length;++r){var d=s.push([])-1,p=c[r].getElementsByTagName("td");for(n=0;n<i.length;++n){var h=" ";void 0!==p[n]&&(h=o.subParser("makeMarkdown.tableCell")(p[n],t)),s[d].push(h)}}var m=3;for(r=0;r<s.length;++r)for(n=0;n<s[r].length;++n){var g=s[r][n].length;g>m&&(m=g)}for(r=0;r<s.length;++r){for(n=0;n<s[r].length;++n)1===r?":"===s[r][n].slice(-1)?s[r][n]=o.helper.padEnd(s[r][n].slice(-1),m-1,"-")+":":s[r][n]=o.helper.padEnd(s[r][n],m,"-"):s[r][n]=o.helper.padEnd(s[r][n],m);a+="| "+s[r].join(" | ")+" |\n"}return a.trim()}),o.subParser("makeMarkdown.tableCell",function(e,t){"use strict";var r="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,a=n.length,s=0;s<a;++s)r+=o.subParser("makeMarkdown.node")(n[s],t,!0);return r.trim()}),o.subParser("makeMarkdown.txt",function(e){"use strict";var t=e.nodeValue;return t=(t=t.replace(/ +/g," ")).replace(/Â¨NBSP;/g," "),t=(t=(t=(t=(t=(t=(t=(t=(t=o.helper.unescapeHTMLEntities(t)).replace(/([*_~|`])/g,"\\$1")).replace(/^(\s*)>/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")});void 0===(n=function(){"use strict";return o}.call(t,r,t,e))||(e.exports=n)}).call(this)}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){"use strict";const e=wp.blocks,t=wp.blockEditor,n=wp.data,a=wp.element,o=wp.i18n,s=function(){return!rankMath.contentAI.isUserRegistered||!rankMath.contentAI.plan||rankMath.contentAI.isMigrating};r.dn(s);const i=lodash,c=jQuery;var l=r.n(c);const u=wp.apiFetch;var d=r.n(u);const p=function(){return!((0,i.isNil)(window.wp)||(0,i.isNil)(wp.data)||(0,i.isNil)(wp.data.select("core/editor"))||!window.document.body.classList.contains("block-editor-page")||!(0,i.isFunction)(wp.data.select("core/editor").getEditedPostAttribute))};function h(e,t,r,n){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",n=n||!1;var s=l()('<div class="notice notice-'+t+" "+a+' is-dismissible"><p>'+e+"</p></div>").hide();o||r.siblings(".notice").remove(),r.after(s),s.slideDown(),l()(document).trigger("wp-updates-notice-added"),l()("html,body").animate({scrollTop:s.offset().top-50},"slow"),n&&setTimeout(function(){s.fadeOut(function(){s.remove()})},n)}r.dn(h);const m=function(e){return e&&null!==e.remaining&&void 0!==e.remaining?e.remaining:null};r.dn(m);const g=function(e){var t=wp.data.select("rank-math-content-ai").getData().usageDetails;if(!t)return!1;var r=t[e];return!!r&&m(r)<=0};function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function _(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_(Object(r),!0).forEach(function(t){w(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function w(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=f(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=f(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==f(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}r.dn(g);var k=(0,o.__)("Sorry, the request has failed. If the issue persists, please contact our Support for assistance.","seo-by-rank-math"),v=function(e){var t=e.endpoint,r=e.attributes,a=e.callback,s=e.isChat,c=e.repeat,u=void 0===c?0:c,m=e.data,g=void 0===m?{}:m;l().ajax({url:g.url+t,type:"POST",data:r,success:function(e){if((0,i.isEmpty)(e.error))if("default_prompts"!==t){!function(e){if(e.input_truncated){var t=(0,o.__)("AI Fix was applied only considering the beginning of the content, as the full content is too large to be processed by the AI.","seo-by-rank-math");if(p())(0,n.dispatch)("core/notices").createWarningNotice(t,{id:"aiInputTruncated"});else{var r=l()(".wp-header-end").length?l()(".wp-header-end"):l()(".rank-math-header");r.length&&h(t,"warning",r)}}}(e),function(e){var a=e.result,o={endpoint:t,attributes:r,outputs:(0,i.isEmpty)(a.meta)?a.results:a.meta,isChat:s};(0,i.isUndefined)(a.credits)||(o.credits={credits:a.credits,plan:a.plan,refreshDate:a.refreshDate}),(0,i.isUndefined)(a.usage)||(o.usage=a.usage),d()({method:"POST",path:"/rankmath/v1/ca/saveOutput",data:o}).then(function(e){s||(0,i.isUndefined)(g.history)||(0,n.dispatch)("rank-math-content-ai").updateData("history",e)}).catch(function(e){console.log(e)})}({result:e});var c=(0,i.isEmpty)(e.meta)?e.results:e.meta;if(!(0,i.isEmpty)(e.warning)){var m=g.errors;c.push({warning:(0,i.isUndefined)(m[e.warning])?k:m[e.warning]})}if(a(c),!(0,i.isUndefined)(e.usage)){var f,_=e.usage,y=null!==(f=(0,n.select)("rank-math-content-ai").getData().usageDetails)&&void 0!==f?f:{};(0,n.dispatch)("rank-math-content-ai").updateData("usageDetails",b(b({},y),{},w({},_.feature,_)))}}else a(e);else!function(e){var t=e.error;if(u<2&&"could_not_generate"===t.code)v({repeat:u+1});else{var r=g.errors;a({error:(0,i.isUndefined)(r[t.code])?k:r[t.code]})}}({error:e.error})},error:function(e){try{var t=JSON.parse(e.responseText);if(!(0,i.isEmpty)(t.err_key)){var r=g.errors,n=(0,i.isUndefined)(t.message)?k:t.message;return void a({error:(0,i.isUndefined)(r[t.err_key])?n:r[t.err_key]})}}catch(t){413===e.status&&(k=(0,o.__)("Error: The request payload is too large!","seo-by-rank-math")),a({error:k})}a({error:k})}})};const y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=(0,n.select)("rank-math-content-ai").getData(),s=o.connectData;t=(0,i.merge)(t,{username:s.username,api_key:s.api_key,site_url:s.site_url,plugin_version:rankMath.version}),g(e)?r({error:o.errors.account_limit_reached}):(!(0,i.isUndefined)(t.language)&&t.language||(t.language=o.language),v({endpoint:e,attributes:t,callback:r,isChat:a,data:o}))};r.dn(y);const P=function(){return"undefined"!=typeof tinymce&&null!==tinymce.activeEditor&&!0!==tinymce.activeEditor.isHidden()&&"content"===tinymce.activeEditor.id};r.dn(P);const j=function(){var e=(0,n.select)("core/block-editor").getSelectedBlock(),t=(0,n.select)("core/block-editor").getBlocks();if(!(0,i.isEmpty)(e)){var r=t.map(function(t){return t.clientId===e.clientId}).indexOf(!0)+1;return{block:e,position:r,clientId:e.clientId}}if((0,i.isEmpty)(t))return{block:[],position:0};var a=t[t.length-1];return{block:a,position:t.length,clientId:a.clientId}};r.dn(j);const x=function(e){return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?(0,i.isUndefined)(e.attributes.content)||(0,i.isEmpty)(e.attributes.content.text)?e.attributes.content:e.attributes.content.text:(0,i.isEmpty)(e.attributes.content)&&(0,i.isEmpty)(e.innerBlocks)};r.dn(x);var E=r(552),S=new(r.n(E)().Converter)({noHeaderId:!0,tables:!0,literalMidWordUnderscores:!0,omitExtraWLInCodeBlocks:!0,simpleLineBreaks:!0,strikethrough:!0}),C=function(e){return e.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/,function(e,t,r,n){return"".concat(t,"\n").concat(r,"\n").concat(n)})},z=function(e){return e.replace(/(^|\n)â€¢( +)/g,"$1*$2")};const M=function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,i.isString)(t)?r?S.makeMarkdown(t):rankMath.contentAI.isContentAIPage||"gutenberg"===rankMath.currentEditor?(0,e.serialize)((0,e.rawHandler)({HTML:S.makeHtml(C(z(t))),mode:"BLOCKS"})):S.makeHtml(C(z(t))):t};r.dn(M);const A=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=800-e,r=[];if("elementor"===rankMath.currentEditor){var a,o=elementor.$preview[0].contentWindow.document;o.getElementsByClassName("elementor-element-editable");a=o.getElementsByClassName("elementor-widget-container");var s=Array.from(a),c=!1;return(0,i.forEach)(s.reverse(),function(n){if(e>=800)return!1;if(n.innerText){l()(n).parents(".elementor-element-editable").length&&(l()(o).find(".rank-math-active").removeClass("rank-math-active"),l()(n).addClass("rank-math-active"),c=!0),c||(l()(n).addClass("rank-math-active"),c=!0);var a=n.querySelectorAll("*"),s=Array.from(a);(0,i.forEach)(s.reverse(),function(n){if(e>=600)return!1;var a=(0,i.includes)(["h1","h2","h3","h4","h5","h6"],n.localName)?"Heading: "+n.innerText:n.innerText;if(a&&!(0,i.includes)(["div","b","i","u","em"],n.localName))if(a.length<=t)r.push(a),e+=a.length,t-=a.length;else{var o=a.match(/[^\.!\?]+[\.!\?]+/g);(0,i.forEach)(o.reverse(),function(n){e<600&&(r.push(n),e+=n.length,t-=n.length)})}})}}),M(r.reverse().join("\n\n"),!0)}if(P()){var u=tinyMCE.activeEditor.selection.getSelectedBlocks();return(0,i.forEach)(u.reverse(),function(n){if(e>=800)return!1;var a=(0,i.includes)(["h1","h2","h3","h4","h5","h6"],n.localName)?"<"+n.localName+">"+n.innerText+"</"+n.localName+">":n.innerHTML;if(a.length<=t)r.push(a),e+=a.length,t-=a.length;else{var o=a.match(/[^\.!\?]+[\.!\?]+/g);(0,i.forEach)(o.reverse(),function(n){e<800&&(r.push(n),e+=n.length,t-=n.length)})}}),M(r.reverse().join("\n\n"),!0)}var d=j();if((0,i.isEmpty)(d.block))return"";var p=d.clientId,h=[];return(0,i.forEach)((0,n.select)("core/block-editor").getBlocks(),function(e){if("rank-math/command"!==e.name&&h.push(e),e.clientId===p)return!1}),(0,i.forEach)(h.reverse(),function(n){if(e>=800)return!1;var a=x(n);if(!(0,i.isEmpty)(a)){var o="core/heading"===n.name?"<h"+n.attributes.level+">"+a+"</h"+n.attributes.level+">":"<p>"+a+"</p>";if(o.length<=t)r.push(o),e+=o.length,t-=o.length;else{var s=o.match(/[^\.!\?]+[\.!\?]+/g);(0,i.isEmpty)(s)||(0,i.forEach)(s.reverse(),function(n){e<800&&(r.push(n),e+=n.length,t-=n.length)})}}}),M(r.reverse().join("\n\n"),!0)};r.dn(A);var L=function(){return"\n\tlet words = [];\n\tlet currentWordIndex = 0;\n\tlet currentLetterIndex = 0;\n\tlet typingSpeed = ".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:25,"\n\t\n\tfunction typeWords() {\n\t\tif ( currentWordIndex >= words.length ) {\n\t\t\tpostMessage('rank_math_process_complete')\n\t\t\treturn\n\t\t}\n\t\n\t\tconst currentWord = words[ currentWordIndex ];\n\t\tif ( currentLetterIndex < currentWord.length ) {\n\t\t\tpostMessage( currentWord );\n\t\t\tcurrentLetterIndex = currentLetterIndex + currentWord.length;\n\t\t} else {\n\t\t\tcurrentWordIndex++;\n\t\t\tcurrentLetterIndex = 0;\n\t\t\tpostMessage(' '); // Add space between words\n\t\t}\n\t\n\t\tsetTimeout( typeWords, typingSpeed );\n\t}\n\t\n\tself.onmessage = function (event) {\n\t\twords = event.data.split(' ');\n\t\ttypeWords();\n\t};\n\t")};const B=function(){var e="blog_post_outline"!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?25:10;return new Worker(URL.createObjectURL(new Blob([L(e)],{type:"application/javascript"})))};r.dn(B);const I=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";a&&(0,n.dispatch)("core/block-editor").updateBlockAttributes(t,{content:a});var o=B();o.onmessage=function(e){var a=e.data;if(a)if("classic"!==rankMath.currentEditor){if(t){var o=(0,n.select)("core/block-editor").getBlock(t),s="<br>"===a,i=x(o);"rank_math_process_complete"!==a?(i?i+="<br>"===a||s?a:" "+a:i=a,(0,n.dispatch)("core/block-editor").updateBlockAttributes(o.clientId,{content:i}),function(e){var t,r=(t=e)?t.nodeType?t:t.jquery?t[0]||null:"string"==typeof t?document.querySelector(t):(Array.isArray(t)||t.length)&&t[0]||null:null;if(r){var n=r.querySelector&&r.querySelector('[contenteditable="true"]')||r;if(n&&n.nodeType){var a=getSelection&&getSelection();if(a){var o=document.createRange();n.focus&&n.focus(),a.removeAllRanges(),o.selectNodeContents(n),o.collapse(!1),a.addRange(o)}}}}(document.getElementById("block-"+o.clientId))):r&&((0,n.dispatch)("core/block-editor").updateBlockAttributes(o.clientId,{content:i+r,className:""}),setTimeout(function(){l()(".rank-math-content-ai-command-buttons .rank-math-content-ai-use").trigger("focus")},100))}}else tinymce.activeEditor.insertContent("rank_math_process_complete"!==a?" "+a:"")},o.postMessage(e)};r.dn(I);var T=(0,o.__)("Generatingâ€¦","seo-by-rank-math"),O=(0,n.dispatch)(t.store),H=O.updateBlockAttributes,N=O.removeBlock,$=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";y(e,t,function(e){e.error?H(r,{content:e.error,className:"rank-math-content-ai-command",isAiGenerated:!1,hasApiError:!0}):(e=(0,i.isArray)(e)?e[0]:e,(0,i.isNull)(r)?I(e):(H(r,{content:"",className:"rank-math-content-ai-command",isAiGenerated:!0}),I(e,r,null,n)))})},R=function(r,a){var o=(0,n.select)(t.store).getBlock(r),s=x(o).replace(/<div .*<\/div>/g,"").replaceAll("  ",""),i=(0,e.rawHandler)({HTML:s,mode:"BLOCKS"}).map(function(t){return(0,e.createBlock)(t.name,t.attributes,t.innerBlocks)});if(a.replaceBlock)return(0,n.dispatch)(t.store).replaceBlock(a.selectedId,i),void N(r);(0,n.dispatch)(t.store).replaceBlock(r,i)},D=function(e,t,r){H(e,{content:T,isAiGenerated:!0}),$(t,r,e)},q=function(e){if(800===e.length)return e;if(e.length>800){var t=0,r=[],n=e.match(/[^\.!\?]+[\.!\?]+/g);return(0,i.isEmpty)(n)||(0,i.forEach)(n.reverse(),function(e){t<800&&(r.push(e),t+=e.length)}),r.reverse().join(" ")}return A(e.length)+"\n"+e},U=function(e){var r=(0,n.select)(t.store).getBlock(e),a=x(r).replace(/<div .*<\/div>/g,"").replace("<br>","").replaceAll("  ","");H(e,{content:a+""+T,isAiGenerated:!0}),$("continue_writing",{sentence:q(a),choices:1},e,a)};const W=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];(0,i.isNull)(r)||H(r,{content:(0,o.__)("Generatingâ€¦","seo-by-rank-math"),className:"typing rank-math-content-ai-command",endpoint:e,params:t,replaceBlock:a,selectedId:n}),$(e,t,r)};r.dn(W);const V=function(e){var t=wp.data.select("rank-math-content-ai").getContentAiAttributes();return e||(e=(0,i.isEmpty)(t.instructions)?"":t.instructions),{document_title:"undefined"!=typeof rankMathEditor?rankMathEditor.assessor.dataCollector.getData().title:"",text:A(),instructions:e,tone:(0,i.isEmpty)(t.tone)?rankMath.contentAI.tone:t.tone,focus_keyword:(0,i.isEmpty)(t.focus_keyword)?"":t.focus_keyword,length:(0,i.isEmpty)(t.length)?"medium":t.length,choices:1}};r.dn(V);const G=function(e){var r=e.attributes,i=e.onReplace,c=e.setAttributes,l=e.clientId,u=r.content,d=r.isAiGenerated,p=r.hasApiError,h=r.endpoint,m=r.params,g=(0,t.useBlockProps)({className:"rank-math-content-ai-command"}),f=(0,n.useDispatch)(t.store),_=f.updateBlockAttributes,b=f.removeBlock,w=R,k=(0,a.useRef)(null);(0,a.useEffect)(function(){var e=k.current;if(e){e.focus();var t=document.createRange(),r=window.getSelection();t.selectNodeContents(e),t.collapse(!1),r.removeAllRanges(),r.addRange(t)}},[]);var v=function(){var e=x({attributes:r});e.trim()&&(_(l,{content:"",className:""}),W("Write",V(e),l))},y=function(){b(l)},P=function(){w(l,r)},j=function(){D(l,h,m)},E=function(){U(l)},S=u.replace(/(<([^>]+)>)/gi,"").trim();return wp.element.createElement("div",g,wp.element.createElement(t.BlockControls,null),s()&&wp.element.createElement("div",{className:"rich-text",ref:k},rankMath.contentAI.isUserRegistered?rankMath.contentAI.plan?wp.element.createElement(React.Fragment,null,(0,o.__)("You have exhausted your Content AI Credits.","seo-by-rank-math"),wp.element.createElement("a",{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Credits+Button&utm_campaign=WP",target:"_blank",rel:"noreferrer"},(0,o.__)("Get more","seo-by-rank-math"))):wp.element.createElement(React.Fragment,null,(0,o.__)("You do not have a Content AI plan.","seo-by-rank-math"),wp.element.createElement("a",{href:"https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Plan+Button&utm_campaign=WP"},(0,o.__)("Choose your plan","seo-by-rank-math"))):wp.element.createElement(React.Fragment,null,(0,o.__)("Start using Content AI by connecting your RankMath account.","seo-by-rank-math"),wp.element.createElement("a",{href:rankMath.connectSiteUrl},(0,o.__)("Connect Now","seo-by-rank-math")))),!s()&&wp.element.createElement(React.Fragment,null,wp.element.createElement(t.RichText,{tagName:"div",allowedFormats:[],value:u,onChange:function(e){c({content:e})},onSplit:function(){return!1},onReplace:i,"data-empty":!u,onKeyDown:function(e){"Enter"!==e.key||d||(e.preventDefault(),v())},ref:k}),wp.element.createElement("div",{className:"rank-math-content-ai-command-buttons"},p?wp.element.createElement("button",{className:"button button-small rank-math-content-ai-dismiss",title:(0,o.__)("Dismiss","seo-by-rank-math"),onClick:y,contentEditable:!1},(0,o.__)("Dismiss","seo-by-rank-math")):d?wp.element.createElement("div",{className:"rank-math-content-ai-command-buttons"},wp.element.createElement("button",{className:"button button-small rank-math-content-ai-use",onClick:P},wp.element.createElement("span",null,(0,o.__)("Use","seo-by-rank-math"))),wp.element.createElement("button",{className:"button button-small rank-math-content-ai-regenerate",onClick:j},wp.element.createElement("span",null,(0,o.__)("Regenerate","seo-by-rank-math"))),wp.element.createElement("button",{className:"button button-small rank-math-content-ai-write-more",onClick:E},wp.element.createElement("span",null,(0,o.__)("Write More","seo-by-rank-math")))):S.length>0?wp.element.createElement(React.Fragment,null,wp.element.createElement("button",{className:"rank-math-content-ai-command-button",title:(0,o.__)("Click or Press Enter","seo-by-rank-math"),onClick:v,contentEditable:!1},wp.element.createElement("i",{className:"rm-icon rm-icon-enter-key"})),wp.element.createElement("button",{className:"rank-math-command-dismiss-button",title:(0,o.__)("Dismiss","seo-by-rank-math"),onClick:y,contentEditable:!1},(0,o.__)("Close","seo-by-rank-math"))):null)))};r.dn(G);const F=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"rank-math/command","title":"AI Assistant [Content AI]","icon":"star","category":"rank-math-blocks","description":"Generate content without any hassle, powered by Rank Math\'s Content AI.","keywords":["ai","content","rank math","rankmath","content ai","seo"],"textdomain":"rank-math-pro","editorScript":"file:../js/index.js","attributes":{"content":{"type":"string","source":"html","selector":"p","default":"<span>//</span>","__experimentalRole":"content"}}}');function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}function K(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function J(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=Z(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=Z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Z(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Q=F.name,X={icon:wp.element.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 17.08 18.02"},wp.element.createElement("g",{id:"Layer_2","data-name":"Layer 2"},wp.element.createElement("g",{id:"Layer_1-2","data-name":"Layer 1"},wp.element.createElement("path",{d:"M16.65,12.08a.83.83,0,0,0-1.11.35A7.38,7.38,0,1,1,9,1.63a7.11,7.11,0,0,1,.92.06A2.52,2.52,0,0,1,11,.23,8.87,8.87,0,0,0,9,0a9,9,0,1,0,8,13.19A.83.83,0,0,0,16.65,12.08Z"}),wp.element.createElement("path",{d:"M7.68,7.29A1.58,1.58,0,0,0,6.2,8.94a1.57,1.57,0,0,0,1.48,1.64A1.56,1.56,0,0,0,9.16,8.94,1.57,1.57,0,0,0,7.68,7.29Z"}),wp.element.createElement("path",{d:"M13.34,4.71a2.45,2.45,0,0,1-1,.2A2.53,2.53,0,0,1,9.93,3,7.18,7.18,0,0,0,9.12,3a6,6,0,1,0,4.22,1.73ZM10.53,11.3a.75.75,0,1,1-1.5,0v-.06a2.4,2.4,0,0,1-1.66.69,2.81,2.81,0,0,1-2.58-3,2.82,2.82,0,0,1,2.58-3A2.39,2.39,0,0,1,9,6.64a.75.75,0,0,1,1.5.07Zm2.56,0a.75.75,0,1,1-1.5,0V6.71a.75.75,0,1,1,1.5,0Z"}),wp.element.createElement("circle",{cx:"12.42",cy:"2.37",r:"1.45"})))),edit:G};(0,e.registerBlockType)(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?K(Object(r),!0).forEach(function(t){J(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):K(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({name:Q},F),X)}()}();PK     ¥ŠU]¨]P�`  `  @  includes/modules/content-ai/blocks/command/assets/src/block.jsonnu „[µü¤        {
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "rank-math/command",
	"title": "AI Assistant [Content AI]",
	"icon": "star",
	"category": "rank-math-blocks",
	"description": "Generate content without any hassle, powered by Rank Math's Content AI.",
	"keywords": [ "ai", "content", "rank math", "rankmath", "content ai", "seo" ],
	"textdomain": "rank-math-pro",
	"editorScript": "file:../js/index.js",
	"attributes": {
		"content": {
			"type": "string",
			"source": "html",
			"selector": "p",
			"default": "<span>//</span>",
			"__experimentalRole": "content"
		}
	}
}
PK     ¥ŠU]z,Jc  c  =  includes/modules/content-ai/blocks/command/assets/src/edit.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import {
	RichText,
	useBlockProps,
	BlockControls,
	store as blockEditorStore,
} from '@wordpress/block-editor'
import { useDispatch } from '@wordpress/data'
import { useRef, useEffect } from '@wordpress/element'
import { __ } from '@wordpress/i18n'

/**
 * Internal dependencies
 */
import hasError from '../../../../assets/src/helpers/hasError'
import insertCommandBox, { useBlock, regenerateOutput, writeMore } from '../../../../assets/src/shortcutCommand/insertCommandBox'
import getWriteAttributes from '../../../../assets/src/helpers/getWriteAttributes'
import getBlockContent from '../../../../assets/src/helpers/getBlockContent'

const getErrorMessage = () => {
	// This function can be simplified now that the error message comes from the API.
	// It's still useful for showing general errors not from the API.

	if ( ! rankMath.contentAI.isUserRegistered ) {
		return (
			<>
				{ __( 'Start using Content AI by connecting your RankMath account.', 'seo-by-rank-math' ) }
				<a href={ rankMath.connectSiteUrl }>{ __( 'Connect Now', 'seo-by-rank-math' ) }</a>
			</>
		)
	}

	if ( ! rankMath.contentAI.plan ) {
		return (
			<>
				{ __( 'You do not have a Content AI plan.', 'seo-by-rank-math' ) }
				<a href="https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Plan+Button&utm_campaign=WP">
					{ __( 'Choose your plan', 'seo-by-rank-math' ) }
				</a>
			</>
		)
	}

	return (
		<>
			{ __( 'You have exhausted your Content AI Credits.', 'seo-by-rank-math' ) }
			<a href="https://rankmath.com/kb/how-to-use-content-ai/?play-video=ioPeVIntJWw&utm_source=Plugin&utm_medium=Buy+Credits+Button&utm_campaign=WP" target="_blank" rel="noreferrer">
				{ __( 'Get more', 'seo-by-rank-math' ) }
			</a>
		</>
	)
}

export default ( {
	attributes,
	onReplace,
	setAttributes,
	clientId,
} ) => {
	// Note the addition of `hasApiError` in the attributes destructuring.
	const { content, isAiGenerated, hasApiError, endpoint, params } = attributes
	const blockProps = useBlockProps( {
		className: 'rank-math-content-ai-command',
	} )
	const { updateBlockAttributes, removeBlock } = useDispatch( blockEditorStore )
	const blockHook = useBlock // assign the hook to a variable

	const contentEditableRef = useRef( null )
	useEffect( () => {
		const { current: contentEditable } = contentEditableRef
		if ( ! contentEditable ) {
			return
		}
		contentEditable.focus()

		const range = document.createRange()
		const selection = window.getSelection()
		range.selectNodeContents( contentEditable )
		range.collapse( false )
		selection.removeAllRanges()
		selection.addRange( range )
	}, [] )

	const handleRunCommand = () => {
		const text = getBlockContent( { attributes } )

		if ( ! text.trim() ) {
			return
		}

		updateBlockAttributes(
			clientId,
			{
				content: '',
				className: '',
			}
		)

		insertCommandBox( 'Write', getWriteAttributes( text ), clientId )
	}

	const handleDismissCommand = () => {
		removeBlock( clientId )
	}

	const handleUseBlock = () => {
		blockHook( clientId, attributes )
	}

	const handleRegenerateOutput = () => {
		regenerateOutput( clientId, endpoint, params )
	}

	const handleWriteMore = () => {
		writeMore( clientId )
	}

	const handleKeyDown = ( event ) => {
		if ( event.key === 'Enter' && ! isAiGenerated ) {
			event.preventDefault()
			handleRunCommand()
		}
	}

	const contentTrimmed = content.replace( /(<([^>]+)>)/ig, '' ).trim()

	const renderActionButtons = () => {
		// This is the correct condition to show the dismiss button on API error.
		if ( hasApiError ) {
			return (
				<button
					className="button button-small rank-math-content-ai-dismiss"
					title={ __( 'Dismiss', 'seo-by-rank-math' ) }
					onClick={ handleDismissCommand }
					contentEditable={ false }
				>
					{ __( 'Dismiss', 'seo-by-rank-math' ) }
				</button>
			)
		}

		if ( isAiGenerated ) {
			return (
				<div className="rank-math-content-ai-command-buttons">
					<button
						className="button button-small rank-math-content-ai-use"
						onClick={ handleUseBlock }
					>
						<span>{ __( 'Use', 'seo-by-rank-math' ) }</span>
					</button>
					<button
						className="button button-small rank-math-content-ai-regenerate"
						onClick={ handleRegenerateOutput }
					>
						<span>{ __( 'Regenerate', 'seo-by-rank-math' ) }</span>
					</button>
					<button
						className="button button-small rank-math-content-ai-write-more"
						onClick={ handleWriteMore }
					>
						<span>{ __( 'Write More', 'seo-by-rank-math' ) }</span>
					</button>
				</div>
			)
		}

		// This is the condition for the initial command box.
		if ( contentTrimmed.length > 0 ) {
			return (
				<>
					<button
						className="rank-math-content-ai-command-button"
						title={ __( 'Click or Press Enter', 'seo-by-rank-math' ) }
						onClick={ handleRunCommand }
						contentEditable={ false }
					>
						<i className="rm-icon rm-icon-enter-key"></i>
					</button>
					<button
						className="rank-math-command-dismiss-button"
						title={ __( 'Dismiss', 'seo-by-rank-math' ) }
						onClick={ handleDismissCommand }
						contentEditable={ false }
					>
						{ __( 'Close', 'seo-by-rank-math' ) }
					</button>
				</>
			)
		}

		return null
	}

	return (
		<div { ...blockProps }>
			<BlockControls />
			{
				hasError() &&
				<div className="rich-text" ref={ contentEditableRef }>
					{ getErrorMessage() }
				</div>
			}

			{ ! hasError() &&
				<>
					<RichText
						tagName="div"
						allowedFormats={ [] }
						value={ content }
						onChange={ ( newContent ) => {
							setAttributes( { content: newContent } )
						} }
						onSplit={ () => false }
						onReplace={ onReplace }
						data-empty={ content ? false : true }
						onKeyDown={ handleKeyDown }
						ref={ contentEditableRef }
					/>

					<div className="rank-math-content-ai-command-buttons">
						{ renderActionButtons() }
					</div>
				</>
			}
		</div>
	)
}PK     ¥ŠU]
(3}z  z  >  includes/modules/content-ai/blocks/command/assets/src/index.jsnu „[µü¤        /**
 * WordPress dependencies
 */
import { registerBlockType } from '@wordpress/blocks'

/**
 * Internal dependencies
 */
import edit from './edit'
import metadata from './block.json'

const { name } = metadata

export { metadata, name }

export const settings = {
	icon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17.08 18.02"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path d="M16.65,12.08a.83.83,0,0,0-1.11.35A7.38,7.38,0,1,1,9,1.63a7.11,7.11,0,0,1,.92.06A2.52,2.52,0,0,1,11,.23,8.87,8.87,0,0,0,9,0a9,9,0,1,0,8,13.19A.83.83,0,0,0,16.65,12.08Z"/><path d="M7.68,7.29A1.58,1.58,0,0,0,6.2,8.94a1.57,1.57,0,0,0,1.48,1.64A1.56,1.56,0,0,0,9.16,8.94,1.57,1.57,0,0,0,7.68,7.29Z" /><path d="M13.34,4.71a2.45,2.45,0,0,1-1,.2A2.53,2.53,0,0,1,9.93,3,7.18,7.18,0,0,0,9.12,3a6,6,0,1,0,4.22,1.73ZM10.53,11.3a.75.75,0,1,1-1.5,0v-.06a2.4,2.4,0,0,1-1.66.69,2.81,2.81,0,0,1-2.58-3,2.82,2.82,0,0,1,2.58-3A2.39,2.39,0,0,1,9,6.64a.75.75,0,0,1,1.5.07Zm2.56,0a.75.75,0,1,1-1.5,0V6.71a.75.75,0,1,1,1.5,0Z" /><circle cx="12.42" cy="2.37" r="1.45" /></g></g></svg>,
	edit,
}

registerBlockType( { name, ...metadata }, settings )
PK     ¥ŠU]�äÛ½  ½  B  includes/modules/content-ai/blocks/command/class-block-command.phpnu „[µü¤        <?php
/**
 * The TOC Block
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\ContentAI
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use WP_Block_Type_Registry;
use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Content AI Command Block class.
 */
class Block_Command {

	use Hooker;

	/**
	 * Block type name.
	 *
	 * @var string
	 */
	private $block_type = 'rank-math/command';

	/**
	 * The single instance of the class.
	 *
	 * @var Block_Command
	 */
	protected static $instance = null;

	/**
	 * Retrieve main Block_Command instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Block_Command
	 */
	public static function get() {
		if ( is_null( self::$instance ) && ! ( self::$instance instanceof Block_Command ) ) {
			self::$instance = new Block_Command();
		}

		return self::$instance;
	}

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( WP_Block_Type_Registry::get_instance()->is_registered( $this->block_type ) ) {
			return;
		}

		register_block_type( RANK_MATH_PATH . 'includes/modules/content-ai/blocks/command/assets/src/block.json' );
	}
}
PK     ¥ŠU]ì‡®°1  1  5  includes/modules/content-ai/class-content-ai-page.phpnu „[µü¤        <?php
/**
 * The Role Manager Module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Content_AI_Page
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Page;
use RankMath\Helpers\Param;
use WP_Block_Editor_Context;

defined( 'ABSPATH' ) || exit;

/**
 * Content_AI_Page class.
 */
class Content_AI_Page {
	use Hooker;

	/**
	 * Content_AI object.
	 *
	 * @var object
	 */
	public $content_ai;

	/**
	 * Class constructor.
	 *
	 * @param Object $content_ai Content_AI class object.
	 */
	public function __construct( $content_ai ) {
		$this->content_ai = $content_ai;
		$this->action( 'rank_math/admin_bar/items', 'admin_bar_items', 11 );
		$this->action( 'init', 'init' );
		$this->filter( 'wp_insert_post_data', 'remove_unused_generated_content' );

		if ( Param::get( 'page' ) !== 'rank-math-content-ai-page' ) {
			return;
		}

		$this->action( 'admin_footer', 'content_editor_settings' );
		add_filter( 'should_load_block_editor_scripts_and_styles', '__return_true' );
	}

	/**
	 * Init function.
	 */
	public function init() {
		$this->register_post_type();
		$this->register_admin_page();
		Block_Command::get();
		Event_Scheduler::get();
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		if ( 'rank-math-content-ai-page' === Param::get( 'page' ) ) {
			$this->content_ai->localized_data( [ 'isContentAIPage' => true ] );
		}

		new Page(
			'rank-math-content-ai-page',
			esc_html__( 'Content AI', 'seo-by-rank-math' ),
			[
				'position'   => 4,
				'parent'     => 'rank-math',
				'menu_title' => esc_html__( 'Content AI', 'seo-by-rank-math' ),
				'capability' => 'rank_math_content_ai',
				'render'     => __DIR__ . '/views/main.php',
				'classes'    => [ 'rank-math-page' ],
				'assets'     => [
					'styles'  => [
						'wp-edit-post'              => '',
						'rank-math-common'          => '',
						'rank-math-cmb2'            => '',
						'wp-block-library'          => '',
						'rank-math-content-ai-page' => $uri . '/assets/css/content-ai-page.css',
					],
					'scripts' => [
						'lodash'               => '',
						'wp-components'        => '',
						'wp-block-library'     => '',
						'wp-format-library'    => '',
						'wp-edit-post'         => '',
						'wp-blocks'            => '',
						'wp-element'           => '',
						'wp-editor'            => '',
						'rank-math-components' => '',
						'rank-math-analyzer'   => rank_math()->plugin_url() . 'assets/admin/js/analyzer.js',
						'rank-math-content-ai' => rank_math()->plugin_url() . 'includes/modules/content-ai/assets/js/content-ai.js',
					],
				],
			]
		);
	}

	/**
	 * Add admin bar item.
	 *
	 * @param Admin_Bar_Menu $menu Menu class instance.
	 */
	public function admin_bar_items( $menu ) {
		$url = Helper::get_admin_url( 'content-ai-page' );
		$menu->add_sub_menu(
			'content-ai-page',
			[
				'title'    => esc_html__( 'Content AI', 'seo-by-rank-math' ),
				'href'     => $url,
				'priority' => 50,
			]
		);

		$items = [
			'content-ai-tools'   => [
				'title' => esc_html__( 'AI Tools', 'seo-by-rank-math' ),
				'href'  => $url . '#ai-tools',
				'meta'  => [ 'title' => esc_html__( 'Content AI Tools', 'seo-by-rank-math' ) ],
			],

			'content-ai-editor'  => [
				'title' => esc_html__( 'Content Editor', 'seo-by-rank-math' ),
				'href'  => $url . '#content-editor',
				'meta'  => [ 'title' => esc_html__( 'Content AI Editor', 'seo-by-rank-math' ) ],
			],

			'content-ai-chat'    => [
				'title' => esc_html__( 'Chat', 'seo-by-rank-math' ),
				'href'  => $url . '#chat',
				'meta'  => [ 'title' => esc_html__( 'Content AI Chat', 'seo-by-rank-math' ) ],
			],

			'content-ai-history' => [
				'title' => esc_html__( 'History', 'seo-by-rank-math' ),
				'href'  => $url . '#history',
				'meta'  => [ 'title' => esc_html__( 'Content AI History', 'seo-by-rank-math' ) ],
			],
		];

		foreach ( $items as $id => $args ) {
			$menu->add_sub_menu( $id, $args, 'content-ai-page' );
		}
	}

	/**
	 * Add Content Editor Settings.
	 */
	public function content_editor_settings() {
		$post                 = $this->get_content_editor_post();
		$block_editor_context = new WP_Block_Editor_Context( [ 'post' => $post ] );

		// Flag that we're loading the block editor.
		$current_screen = get_current_screen();
		$current_screen->is_block_editor( true );

		$editor_settings = [
			'availableTemplates'   => [],
			'disablePostFormats'   => true,
			'autosaveInterval'     => 0,
			'richEditingEnabled'   => user_can_richedit(),
			'supportsLayout'       => function_exists( 'wp_theme_has_theme_json' ) ? wp_theme_has_theme_json() : false,
			'supportsTemplateMode' => false,
			'enableCustomFields'   => false,
		];

		$editor_settings = get_block_editor_settings( $editor_settings, $block_editor_context );

		/**
		 * Scripts
		 */
		wp_enqueue_media( [ 'post' => $post->ID ] );
		?>

		<div id="editor2" data-settings='<?php echo esc_attr( wp_json_encode( $editor_settings ) ); ?>' data-post-id="<?php echo esc_attr( $post->ID ); ?>"></div>
		<?php

		wp_set_script_translations( 'rank-math-content-ai', 'seo-by-rank-math' );
		wp_set_script_translations( 'rank-math-content-ai-page', 'seo-by-rank-math' );
	}

	/**
	 * Remove unused content generated from the Toolbar option of the Content AI.
	 *
	 * @param array $data An array of slashed, sanitized, and processed post data.
	 */
	public function remove_unused_generated_content( $data ) {
		$blocks = parse_blocks( $data['post_content'] );
		if ( empty( $blocks ) ) {
			return $data;
		}

		$update = false;
		foreach ( $blocks as $key => $block ) {
			if ( 'rank-math/command' === $block['blockName'] ) {
				unset( $blocks[ $key ] );
				$update = true;
			}
		}

		if ( $update ) {
			$data['post_content'] = serialize_blocks( $blocks );
		}

		return $data;
	}

	/**
	 * Register Content AI post type to use the post in Content Editor.
	 */
	private function register_post_type() {
		register_post_type(
			'rm_content_editor',
			[
				'label'               => 'RM Content Editor',
				'public'              => false,
				'publicly_queryable'  => false,
				'show_ui'             => false,
				'show_in_rest'        => true,
				'has_archive'         => false,
				'show_in_menu'        => false,
				'show_in_nav_menus'   => false,
				'delete_with_user'    => false,
				'exclude_from_search' => false,
				'capability_type'     => 'page',
				'map_meta_cap'        => true,
				'hierarchical'        => false,
				'rewrite'             => false,
				'query_var'           => false,
				'supports'            => [ 'editor' ],
			]
		);
	}

	/**
	 * Get Content Editor post.
	 *
	 * @return int Post ID.
	 */
	private function get_content_editor_post() {
		$posts = get_posts(
			[
				'post_type'   => 'rm_content_editor',
				'numberposts' => 1,
				'post_status' => 'any',
			]
		);

		if ( empty( $posts ) ) {
			$post_id = wp_insert_post(
				[
					'post_type'    => 'rm_content_editor',
					'post_content' => '<!-- wp:rank-math/command /-->',
				]
			);

			return get_post( $post_id );
		}

		$ai_post = current( $posts );
		$content = $ai_post->post_content;
		$blocks  = parse_blocks( $content );
		if ( ! empty( $blocks ) && count( $blocks ) < 2 && 'core/paragraph' === $blocks[0]['blockName'] ) {
			$content = do_blocks( $ai_post->post_content );
			$content = trim( preg_replace( '/<p[^>]*><\\/p[^>]*>/', '', $content ) );
		}

		if ( ! $content ) {
			wp_update_post(
				[
					'ID'           => $ai_post->ID,
					'post_content' => '<!-- wp:rank-math/command /-->',
				]
			);
		}

		return $ai_post;
	}
}
PK     ¥ŠU]põ—R  R  8  includes/modules/content-ai/class-bulk-edit-seo-meta.phpnu „[µü¤        <?php
/**
 * Bulk Edit SEO Meta data from Content AI API.
 *
 * @since      1.0.108
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Bulk_Edit_SEO_Meta class.
 */
class Bulk_Edit_SEO_Meta extends \WP_Background_Process {

	/**
	 * Action.
	 *
	 * @var string
	 */
	protected $action = 'bulk_edit_seo_meta';

	/**
	 * Main instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Bulk_Edit_SEO_Meta
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Bulk_Edit_SEO_Meta ) ) {
			$instance = new Bulk_Edit_SEO_Meta();
		}

		return $instance;
	}

	/**
	 * Start creating batches.
	 *
	 * @param array $data Posts data.
	 */
	public function start( $data ) {
		Helper::add_notification(
			esc_html__( 'Bulk editing SEO meta started. It might take few minutes to complete the process.', 'seo-by-rank-math' ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_content_ai_posts_started',
				'classes' => 'rank-math-notice',
			]
		);

		$action   = $data['action'];
		$posts    = $data['posts'];
		$language = $data['language'];

		update_option( 'rank_math_content_ai_posts', $posts );
		$chunks = array_chunk( $posts, 10, true );
		foreach ( $chunks as $chunk ) {
			$this->push_to_queue(
				[
					'posts'       => $chunk,
					'action'      => $action,
					'language'    => $language,
					'is_taxonomy' => ! empty( $data['is_taxonomy'] ),
				]
			);
		}

		$this->save()->dispatch();
	}

	/**
	 * Task to perform.
	 *
	 * @param string $data Posts to process.
	 */
	public function wizard( $data ) {
		$this->task( $data );
	}

	/**
	 * Cancel the Bulk edit process.
	 */
	public function cancel() {
		delete_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts_processed' );
		parent::clear_scheduled_event();
	}

	/**
	 * Complete.
	 *
	 * Override if applicable, but ensure that the below actions are
	 * performed, or, call parent::complete().
	 */
	protected function complete() {
		$posts = get_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts' );
		delete_option( 'rank_math_content_ai_posts_processed' );
		Helper::add_notification(
			// Translators: placeholder is the number of modified items.
			sprintf( _n( 'SEO meta successfully updated in %d item.', 'SEO meta successfully updated in %d items.', count( $posts ), 'seo-by-rank-math' ), count( $posts ) ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_content_ai_posts',
				'classes' => 'rank-math-notice',
			]
		);

		parent::complete();
	}

	/**
	 * Task to perform.
	 *
	 * @param array $data Posts to process.
	 *
	 * @return bool
	 */
	protected function task( $data ) {
		try {
			$posts = json_decode( wp_remote_retrieve_body( $this->get_posts( $data ) ), true );
			if ( empty( $posts['meta'] ) ) {
				return false;
			}

			foreach ( $posts['meta'] as $post_id => $data ) {
				$method = ! empty( $data['object_type'] ) && 'term' === $data['object_type'] ? 'update_term_meta' : 'update_post_meta';
				if ( ! empty( $data['title'] ) ) {
					$method( $post_id, 'rank_math_title', sanitize_text_field( $data['title'] ) );
				}

				if ( ! empty( $data['description'] ) ) {
					$method( $post_id, 'rank_math_description', sanitize_textarea_field( $data['description'] ) );
				}
			}

			$this->update_content_ai_posts_count( count( $posts['meta'] ) );

			if ( ! empty( $posts['usage']['feature'] ) ) {
				$usage = $posts['usage'];
				Helper::update_feature_usage( $usage['feature'], $usage['used'] ?? 0, $usage['remaining'] ?? null );
			}

			if ( Helper::is_feature_quota_exhausted( 'bulk_seo_meta' ) ) {
				$posts_processed = get_option( 'rank_math_content_ai_posts_processed' );
				delete_option( 'rank_math_content_ai_posts' );
				delete_option( 'rank_math_content_ai_posts_processed' );
				Helper::add_notification(
					// Translators: placeholder is the number of modified posts.
					sprintf( esc_html__( 'SEO meta successfully updated in %d posts. The process was stopped as you have reached the monthly limit for this feature.', 'seo-by-rank-math' ), (int) $posts_processed ),
					[
						'type'    => 'success',
						'id'      => 'rank_math_content_ai_posts',
						'classes' => 'rank-math-notice',
					]
				);

				wp_clear_scheduled_hook( 'wp_bulk_edit_seo_meta_cron' );
			}

			return false;
		} catch ( \Exception $error ) {
			return true;
		}
	}

	/**
	 * Get Posts to bulk update the data.
	 *
	 * @param array $data Data to process.
	 *
	 * @return array
	 */
	private function get_posts( $data ) {
		$connect_data = Admin_Helper::get_registration_data();
		$posts        = array_values( $data['posts'] );
		$action       = $data['action'];
		$language     = $data['language'];
		$data         = [
			'posts'          => $posts,
			'output'         => $action,
			'language'       => $language,
			'choices'        => 1,
			'username'       => $connect_data['username'],
			'api_key'        => $connect_data['api_key'],
			'site_url'       => $connect_data['site_url'],
			'is_taxonomy'    => ! empty( $data['is_taxonomy'] ),
			'plugin_version' => rank_math()->version,
		];

		return wp_remote_post(
			CONTENT_AI_URL . '/ai/bulk_seo_meta',
			[
				'headers' => [
					'content-type' => 'application/json',
				],
				'timeout' => 60,
				'body'    => wp_json_encode( $data ),
			]
		);
	}

	/**
	 * Keep count of the Content AI posts that were processed.
	 *
	 * @param int $count Number of posts processed.
	 *
	 * @return void
	 */
	private function update_content_ai_posts_count( $count ) {
		$content_ai_posts_count = get_option( 'rank_math_content_ai_posts_processed', 0 ) + $count;
		update_option( 'rank_math_content_ai_posts_processed', $content_ai_posts_count, false );
	}
}
PK     ¥ŠU]CLŽ0"  "  ,  includes/modules/content-ai/class-assets.phpnu „[µü¤        <?php
/**
 * The Content AI module.
 *
 * @since      1.0.219
 * @package    RankMath
 * @subpackage RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ContentAI;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Assets {
	use Hooker;

	/**
	 * Content_AI object.
	 *
	 * @var object
	 */
	public $content_ai;

	/**
	 * Class constructor.
	 *
	 * @param Object $content_ai Content_AI class object.
	 */
	public function __construct( $content_ai ) {
		$this->content_ai = $content_ai;
		$this->action( 'rank_math/admin/editor_scripts', 'editor_scripts', 20 );
		$this->action( 'rank_math/admin/editor_scripts', 'enqueue_block_assets', 20 );
		$this->filter( 'rank_math/elementor/dark_styles', 'add_dark_style' );
		$this->action( 'admin_enqueue_scripts', 'media_scripts', 20 );
	}

	/**
	 * Add dark style.
	 *
	 * @param array $styles The dark mode styles.
	 */
	public function add_dark_style( $styles = [] ) {

		$styles['rank-math-content-ai-dark'] = rank_math()->plugin_url() . 'includes/modules/content-ai/assets/css/content-ai-dark.css';

		return $styles;
	}

	/**
	 * Enqueue Content AI files in the enabled post types.
	 *
	 * @param WP_Screen $screen Post screen object.
	 *
	 * @return void
	 */
	public function editor_scripts( $screen ) {
		if ( ! $this->content_ai->can_add_tab() || ! Helper::get_current_editor() ) {
			return;
		}

		wp_register_style( 'rank-math-common', rank_math()->plugin_url() . 'assets/admin/css/common.css', null, rank_math()->version );
		wp_enqueue_style(
			'rank-math-content-ai',
			rank_math()->plugin_url() . 'includes/modules/content-ai/assets/css/content-ai.css',
			[ 'rank-math-common' ],
			rank_math()->version
		);

		wp_enqueue_script(
			'rank-math-content-ai',
			rank_math()->plugin_url() . 'includes/modules/content-ai/assets/js/content-ai.js',
			[ 'rank-math-editor' ],
			rank_math()->version,
			true
		);

		wp_set_script_translations( 'rank-math-content-ai', 'seo-by-rank-math' );

		$this->content_ai->localized_data( $this->get_post_localized_data( $screen ) );
	}

	/**
	 * Enqueue block assets.
	 */
	public function enqueue_block_assets() {
		if ( ! $this->content_ai->can_add_tab() || ! Helper::get_current_editor() ) {
			return;
		}

		wp_enqueue_style(
			'rank-math-content-ai-page',
			rank_math()->plugin_url() . 'includes/modules/content-ai/assets/css/content-ai-page.css',
			[ 'rank-math-common' ],
			rank_math()->version
		);
	}

	/**
	 * Enqueue our inject-generate-alt-text script on the Edit Media page (post.php with post_type=attachment).
	 */
	public function media_scripts() {
		$screen = \function_exists( 'get_current_screen' ) ? get_current_screen() : false;
		if ( ! $screen || 'attachment' !== $screen->post_type ) {
			return;
		}

		wp_enqueue_script(
			'rank-math-content-ai-media',
			rank_math()->plugin_url() . 'includes/modules/content-ai/assets/js/content-ai-media.js',
			[ 'jquery', 'wp-api-fetch', 'lodash', 'wp-element', 'wp-components' ],
			rank_math()->version,
			true
		);

		wp_enqueue_style(
			'rank-math-content-ai-page',
			rank_math()->plugin_url() . 'includes/modules/content-ai/assets/css/content-ai-page.css',
			[ 'rank-math-common', 'wp-components' ],
			rank_math()->version
		);

		$this->content_ai->localized_data();
	}

	/**
	 * Add meta data to use in gutenberg.
	 *
	 * @param Screen $screen Screen object.
	 *
	 * @return array
	 */
	private function get_post_localized_data( $screen ) {
		$values    = [];
		$countries = [];
		foreach ( Helper::choices_contentai_countries() as $value => $label ) {
			$countries[] = [
				'value' => $value,
				'label' => $label,
			];
		}

		$values = [
			'country'   => Helper::get_settings( 'general.content_ai_country', 'all' ),
			'countries' => $countries,
			'viewed'    => true,
			'keyword'   => '',
			'score'     => [
				'keywords'     => 0,
				'wordCount'    => 0,
				'linkCount'    => 0,
				'headingCount' => 0,
				'mediaCount'   => 0,
			],
		];

		/**
		 * Filter the enabled tests for Content AI research.
		 *
		 * @since 1.0.243
		 * @return array
		 */
		$values['enabledTests'] = $this->do_filter(
			'content_ai/research_tests',
			[
				'wordCount',
				'linkCount',
				'headingCount',
				'mediaCount',
			]
		);

		$content_ai_viewed = get_option( 'rank_math_content_ai_viewed', false );
		if ( ! $content_ai_viewed ) {
			$values['viewed'] = false;
			update_option( 'rank_math_content_ai_viewed', true, false );
		}

		$researched_values = $screen->get_meta( $screen->get_object_type(), $screen->get_object_id(), 'rank_math_ca_keyword' );
		if ( empty( $researched_values ) ) {
			return $values;
		}

		$data    = get_option( 'rank_math_ca_data' );
		$keyword = empty( $researched_values['keyword'] ) ? '' : $researched_values['keyword'];
		$country = empty( $researched_values['country'] ) ? '' : $researched_values['country'];
		if (
			! empty( $data[ $country ] ) &&
			! empty( $data[ $country ][ mb_strtolower( $keyword ) ] )
		) {
			$values['researchedData'] = $data[ $country ][ mb_strtolower( $keyword ) ];
		}

		$values['keyword'] = $keyword;
		$values['country'] = $country;
		$content_ai_data   = $screen->get_meta( $screen->get_object_type(), $screen->get_object_id(), 'rank_math_contentai_score' );
		$values['score']   = (object) $content_ai_data;

		return $values;
	}
}
PK     ¥ŠU]ÖØ@f®
  ®
  (  includes/modules/status/class-backup.phpnu „[µü¤        <?php
/**
 * The functionality related to the Backup.
 *
 * @since      1.0.240
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Backup class.
 */
class Backup {
	/**
	 * Get backups from the database.
	 *
	 * @param {bool} $return_object Whether to retrun the backup data or only the keys with formatted date.
	 */
	public static function get_backups( $return_object = false ) {
		$backups = get_option( 'rank_math_backups', [] );
		if ( empty( $backups ) ) {
			$backups = [];
		} elseif ( ! is_array( $backups ) ) {
			$backups = (array) $backups;
		}

		if ( empty( $backups ) || $return_object ) {
			return $backups;
		}

		$data = [];
		foreach ( array_keys( $backups ) as $backup ) {
			$data[ $backup ] = esc_html( date_i18n( 'M jS Y, H:i a', $backup ) );
		}

		return $data;
	}

	/**
	 * Create Backup.
	 */
	public static function create_backup() {
		$key = Helper::get_current_time();
		if ( is_null( $key ) ) {
			return [
				'type'    => 'error',
				'message' => esc_html__( 'Unable to create backup this time.', 'seo-by-rank-math' ),
			];
		}

		$backups = self::get_backups( true );
		$backups = [ $key => Import_Export_Settings::get_export_data() ] + $backups;
		update_option( 'rank_math_backups', $backups, false );

		return [
			'type'    => 'success',
			'message' => esc_html__( 'Backup created successfully.', 'seo-by-rank-math' ),
			'backups' => self::get_backups(),
		];
	}

	/**
	 * Create Backup.
	 *
	 * @param string $key Backup key to be restored.
	 */
	public static function restore_backup( $key ) {
		$backups = self::get_backups( true );
		if ( ! array_key_exists( $key, $backups ) ) {
			return [
				'type'    => 'error',
				'message' => esc_html__( 'Backup does not exist.', 'seo-by-rank-math' ),
			];
		}

		Import_Export_Settings::do_import_data( $backups[ $key ], true );

		return [
			'type'    => 'success',
			'message' => esc_html__( 'Backup restored successfully.', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Delete Backup.
	 *
	 * @param string $key Backup key to be restored.
	 */
	public static function delete_backup( $key ) {
		$backups = self::get_backups( true );
		if ( ! isset( $backups[ $key ] ) ) {
			return [
				'type'    => 'error',
				'message' => esc_html__( 'No backup key found to delete.', 'seo-by-rank-math' ),
				'backups' => self::get_backups(),
			];
		}

		unset( $backups[ $key ] );
		update_option( 'rank_math_backups', $backups, false );

		return [
			'type'    => 'success',
			'message' => esc_html__( 'Backup successfully deleted.', 'seo-by-rank-math' ),
			'backups' => self::get_backups(),
		];
	}
}
PK     ¥ŠU]ZÀ®ÍF�  F�  +  includes/modules/status/assets/js/status.jsnu „[µü¤        !function(){"use strict";var e,t,n={261:function(e,t,n){n.r(t),n.d(t,{default:function(){return _}});var r=n(470),a=n(303),o=n(386),i=n(842),l=n.n(i);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach(function(t){m(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=c(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=c(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const h=function(e){var t=p((0,o.useState)((0,r.__)("Save Changes","seo-by-rank-math")),2),n=t[0],i=t[1],c=p((0,o.useState)(!1),2),u=c[0],m=c[1];return wp.element.createElement("footer",null,wp.element.createElement(a.Button,{type:"submit",variant:"primary",size:"xlarge",disabled:u,onClick:function(){i((0,r.__)("Savingâ€¦","seo-by-rank-math")),m(!0),l()({method:"POST",path:"/rankmath/v1/status/updateViewData",data:s({},e)}).catch(function(e){console.error(e.message),i((0,r.__)("Failed! Try again","seo-by-rank-math"))}).then(function(e){i(e?(0,r.__)("Saved","seo-by-rank-math"):(0,r.__)("Failed! Try again","seo-by-rank-math"))}).finally(function(){setTimeout(function(){m(!1),i((0,r.__)("Save Changes","seo-by-rank-math"))},1e3)})}},n))};n.dn(h);const d=function(e){var t=e.title,n=e.description,a=e.warning,o=void 0===a?"":a;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("p",null,n),o&&wp.element.createElement("p",{className:"description warning"},wp.element.createElement("strong",null,wp.element.createElement("span",{className:"warning"},(0,r.__)("Warning: ","seo-by-rank-math")),o)))};function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},b.apply(null,arguments)}n.dn(d);const y=function(e){var t=e.data,n=e.updateViewData,o=t.autoUpdate,i=t.updateNotificationEmail,l=t.isPluginUpdateDisabled,c=t.rollbackVersion;return wp.element.createElement("div",{className:"rank-math-auto-update-form field-form rank-math-box"},wp.element.createElement(d,{title:(0,r.__)("Auto Update","seo-by-rank-math"),description:l?(0,r.__)("You cannot turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released, because site wide plugins auto-update option is disabled on your site.","seo-by-rank-math"):(0,r.__)("Turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released. The beta versions of Rank Math as soon as they are released. The beta versions will never install automatically.","seo-by-rank-math")}),!l&&wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_auto_update"},(0,r.__)("Auto Update Plugin","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(a.ToggleControl,{id:"enable_auto_update",checked:o,onChange:function(e){t.autoUpdate=e,n(t)}}))))),wp.element.createElement("div",{id:"control_update_notification_email"},wp.element.createElement("p",null,(0,r.__)("When auto-updates are turned off, you can enable update notifications, to send an email to the site administrator when an update is available for Rank Math.","seo-by-rank-math")),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_update_notification_email"},(0,r.__)("Update Notification Email","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(a.ToggleControl,{id:"enable_update_notification_email",checked:i,onChange:function(e){t.updateNotificationEmail=e,n(t)}})))))),!l&&c&&wp.element.createElement(a.Notice,{variant:"alt",status:"warning"},wp.element.createElement("p",null,(0,r.__)("Rank Math will not auto-update because you have rolled back to a previous version. Update to the latest version manually to make this option work again.","seo-by-rank-math"))),wp.element.createElement(h,b({panel:"auto_update"},t)))};function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v.apply(null,arguments)}n.dn(y);const w=function(e){var t=e.data,n=e.updateViewData,o=t.betaOptin,i=t.isPluginUpdateDisabled;return wp.element.createElement("div",{className:"rank-math-beta-optin-form field-form rank-math-box"},wp.element.createElement(d,{title:(0,r.__)("Beta Opt-in","seo-by-rank-math"),description:i?(0,r.__)("You cannot turn on the Beta Tester feature because site wide plugins auto-update option is disabled on your site.","seo-by-rank-math"):(0,r.__)("You can take part in shaping Rank Math by test-driving the newest features and letting us know what you think. Turn on the Beta Tester feature to get notified about new beta releases. The beta version will not install automatically and you always have the option to ignore it.","seo-by-rank-math"),warning:i?"":(0,r.__)("It is not recommended to use the beta version on live production sites.","seo-by-rank-math")}),!i&&wp.element.createElement(React.Fragment,null,wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"beta_tester"},(0,r.__)("Beta Tester","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(a.ToggleControl,{id:"beta_tester",checked:o,onChange:function(e){t.betaOptin=e,n(t)}}))))),wp.element.createElement(h,v({panel:"beta_optin"},t))))};n.dn(w);var g=n(110);function E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const S=function(e){var t=e.data,n=t.latestVersion,i=t.isRollbackVersion,l=t.isPluginUpdateDisabled,c=t.availableVersions,u=t.updateCoreUrl,s=t.rollbackNonce;if((0,g.isEmpty)(c))return"";var m=rankMath.version,p=E((0,o.useState)(c[1]),2),f=p[0],h=p[1],b=E((0,o.useState)(!1),2),y=b[0],v=b[1],w=(0,g.reduce)(c,function(e,t){return e[t]=t,e},{});return wp.element.createElement("form",{className:"rank-math-rollback-form field-form rank-math-box",method:"post",action:""},wp.element.createElement(d,{title:(0,r.__)("Rollback to Previous Version","seo-by-rank-math"),description:(0,r.__)("If you are facing issues after an update, you can reinstall a previous version with this tool.","seo-by-rank-math"),warning:(0,r.__)("Previous versions may not be secure or stable. Proceed with caution and always create a backup.","seo-by-rank-math")}),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"your-verions"},(0,r.__)("Your Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,m),i&&wp.element.createElement(React.Fragment,null,wp.element.createElement("br",null),wp.element.createElement("span",{className:"rollback-version-label"},(0,r.__)("Rolled Back Version: ","seo-by-rank-math")),(0,r.__)("Auto updates will not work, please update the plugin manually.","seo-by-rank-math")),m===n?wp.element.createElement("p",{className:"description"},(0,r.__)("You are using the latest version of the plugin.","seo-by-rank-math")):wp.element.createElement("p",{className:"description"},(0,r.__)("This is the version you are using on this site.","seo-by-rank-math")))),m!==n&&wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"latest-stable"},(0,r.__)("Latest Stable Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,n),l&&m<n&&wp.element.createElement("a",{href:u,className:"update-link"},(0,r.__)("Update Now","seo-by-rank-math")),wp.element.createElement("p",{className:"description"},(0,r.__)("This is the latest version of the plugin.","seo-by-rank-math")))),wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"rollback_version"},(0,r.__)("Rollback Version","seo-by-rank-math"))),wp.element.createElement("td",null,wp.element.createElement(a.SelectControl,{variant:"default",id:"rm_rollback_version",name:"rm_rollback_version",value:f,options:w,disabledOptions:[m],onChange:function(e){return h(e)}}),wp.element.createElement("p",{className:"description"},(0,r.__)("Roll back to this version.","seo-by-rank-math")))))),wp.element.createElement("footer",null,wp.element.createElement(a.TextControl,{type:"hidden",name:"_wpnonce",value:s}),wp.element.createElement(a.Button,{type:"submit",variant:"primary",size:"xlarge",id:"rm-rollback-button",onClick:function(){return v(!0)}},(0,r.__)("Install Version ","seo-by-rank-math"),f),y&&wp.element.createElement("div",{className:"alignright rollback-loading-indicator"},wp.element.createElement("span",{className:"loading-indicator-text"},(0,r.__)("Reinstalling, please waitâ€¦","seo-by-rank-math")),wp.element.createElement("span",{className:"spinner is-active"}))))};n.dn(S);const _=function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(S,e),wp.element.createElement(w,e),wp.element.createElement(y,e))};n.dn(_)},669:function(e){e.exports=jQuery},110:function(e){e.exports=lodash},265:function(e){e.exports=rankMathAnalyzer},303:function(e){e.exports=window.rankMathComponents},842:function(e){e.exports=wp.apiFetch},976:function(e){e.exports=wp.components},894:function(e){e.exports=wp.compose},386:function(e){e.exports=wp.element},566:function(e){e.exports=wp.hooks},470:function(e){e.exports=wp.i18n}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var o=r[e]={exports:{}};return n[e](o,o.exports,a),o.exports}a.m=n,a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce(function(t,n){return a.f[n](e,t),t},[]))},a.u=function(e){return{318:"importExport",353:"databaseTools",906:"systemStatus"}[e]+".js"},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},e={},t="rank-math:",a.l=function(n,r,o,i){if(e[n])e[n].push(r);else{var l,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),s=0;s<u.length;s++){var m=u[s];if(m.getAttribute("src")==n||m.getAttribute("data-webpack")==t+o){l=m;break}}l||(c=!0,(l=document.createElement("script")).charset="utf-8",a.nc&&l.setAttribute("nonce",a.nc),l.setAttribute("data-webpack",t+o),l.src=n),e[n]=[r];var p=function(t,r){l.onerror=l.onload=null,clearTimeout(f);var a=e[n];if(delete e[n],l.parentNode&&l.parentNode.removeChild(l),a&&a.forEach(function(e){return e(r)}),t)return t(r)},f=setTimeout(p.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=p.bind(null,l.onerror),l.onload=p.bind(null,l.onload),c&&document.head.appendChild(l)}},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.dn=function(e){(Object.getOwnPropertyDescriptor(e,"name")||{}).writable||Object.defineProperty(e,"name",{value:"default",configurable:!0})},function(){var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!e||!/^http(s?):/.test(e));)e=n[r--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e}(),function(){var e={533:0};a.f.j=function(t,n){var r=a.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(function(n,a){r=e[t]=[n,a]});n.push(r[2]=o);var i=a.p+a.u(t),l=new Error;a.l(i,function(n){if(a.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;l.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",l.name="ChunkLoadError",l.type=o,l.request=i,r[1](l)}},"chunk-"+t,t)}};var t=function(t,n){var r,o,i=n[0],l=n[1],c=n[2],u=0;if(i.some(function(t){return 0!==e[t]})){for(r in l)a.o(l,r)&&(a.m[r]=l[r]);if(c)c(a)}for(t&&t(n);u<i.length;u++)o=i[u],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0},n=self.webpackChunkrank_math=self.webpackChunkrank_math||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var o={};a.r(o),a.d(o,{updateViewData:function(){return he}});var i={};a.r(i),a.d(i,{appUi:function(){return we}});var l={};a.r(l),a.d(l,{getViewData:function(){return ge}});const c=React,u=ReactDOM;function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(null,arguments)}var m;!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(m||(m={}));const p="popstate";function f(e,t){if(!1===e||null==e)throw new Error(t)}function h(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function d(e,t){return{usr:e.state,key:e.key,idx:t}}function b(e,t,n,r){return void 0===n&&(n=null),s({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?v(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function y(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function v(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function w(e,t,n,r){void 0===r&&(r={});let{window:a=document.defaultView,v5Compat:o=!1}=r,i=a.history,l=m.Pop,c=null,u=h();function h(){return(i.state||{idx:null}).idx}function v(){l=m.Pop;let e=h(),t=null==e?null:e-u;u=e,c&&c({action:l,location:g.location,delta:t})}function w(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"==typeof e?e:y(e);return n=n.replace(/ $/,"%20"),f(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,i.replaceState(s({},i.state,{idx:u}),""));let g={get action(){return l},get location(){return e(a,i)},listen(e){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(p,v),c=e,()=>{a.removeEventListener(p,v),c=null}},createHref:e=>t(a,e),createURL:w,encodeLocation(e){let t=w(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){l=m.Push;let r=b(g.location,e,t);n&&n(r,e),u=h()+1;let s=d(r,u),p=g.createHref(r);try{i.pushState(s,"",p)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;a.location.assign(p)}o&&c&&c({action:l,location:g.location,delta:1})},replace:function(e,t){l=m.Replace;let r=b(g.location,e,t);n&&n(r,e),u=h();let a=d(r,u),s=g.createHref(r);i.replaceState(a,"",s),o&&c&&c({action:l,location:g.location,delta:0})},go:e=>i.go(e)};return g}var g;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(g||(g={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function E(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}const k=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function S(e,t){void 0===t&&(t="/");let n,{pathname:r,search:a="",hash:o=""}="string"==typeof e?v(e):e;if(r)if(i=r,k.test(i))n=r;else{if(r.includes("//")){let e=r;r=D(r),h(!1,"Pathnames cannot have embedded double slashes - normalizing "+e+" -> "+r)}n=r.startsWith("/")?_(r.substring(1),"/"):_(r,t)}else n=t;var i;return{pathname:n,search:R(a),hash:A(o)}}function _(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)}),n.length>1?n.join("/"):"/"}function O(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function P(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.length>0)}function j(e,t){let n=P(e);return t?n.map((e,t)=>t===n.length-1?e.pathname:e.pathnameBase):n.map(e=>e.pathnameBase)}function N(e,t,n,r){let a;void 0===r&&(r=!1),"string"==typeof e?a=v(e):(a=s({},e),f(!a.pathname||!a.pathname.includes("?"),O("?","pathname","search",a)),f(!a.pathname||!a.pathname.includes("#"),O("#","pathname","hash",a)),f(!a.search||!a.search.includes("#"),O("#","search","hash",a)));let o,i=""===e||""===a.pathname,l=i?"/":a.pathname;if(null==l)o=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let c=S(a,o),u=l&&"/"!==l&&l.endsWith("/"),m=(i||"."===l)&&n.endsWith("/");return c.pathname.endsWith("/")||!u&&!m||(c.pathname+="/"),c}const D=e=>e.replace(/\/\/+/g,"/"),T=e=>D(e.join("/")),R=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",A=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;const C=["post","put","patch","delete"],x=(new Set(C),["get",...C]);new Set(x),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function U(){return U=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},U.apply(null,arguments)}const V=c.createContext(null);const M=c.createContext(null);const F=c.createContext(null);const I=c.createContext({outlet:null,matches:[],isDataRoute:!1});function L(){return null!=c.useContext(F)}function B(){return L()||f(!1),c.useContext(F).location}function z(e){c.useContext(M).static||c.useLayoutEffect(e)}function W(){let{isDataRoute:e}=c.useContext(I);return e?function(){let{router:e}=Y($.UseNavigateStable),t=J(H.UseNavigateStable),n=c.useRef(!1);return z(()=>{n.current=!0}),c.useCallback(function(r,a){void 0===a&&(a={}),n.current&&("number"==typeof r?e.navigate(r):e.navigate(r,U({fromRouteId:t},a)))},[e,t])}():function(){L()||f(!1);let e=c.useContext(V),{basename:t,future:n,navigator:r}=c.useContext(M),{matches:a}=c.useContext(I),{pathname:o}=B(),i=JSON.stringify(j(a,n.v7_relativeSplatPath)),l=c.useRef(!1);return z(()=>{l.current=!0}),c.useCallback(function(n,a){if(void 0===a&&(a={}),!l.current)return;if("number"==typeof n)return void r.go(n);let c=N(n,JSON.parse(i),o,"path"===a.relative);null==e&&"/"!==t&&(c.pathname="/"===c.pathname?t:T([t,c.pathname])),(a.replace?r.replace:r.push)(c,a.state,a)},[t,r,i,o,e])}()}c.Component;var $=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}($||{}),H=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(H||{});function Y(e){let t=c.useContext(V);return t||f(!1),t}function J(e){let t=function(){let e=c.useContext(I);return e||f(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||f(!1),n.route.id}function K(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}c.startTransition;function q(e){let{basename:t="/",children:n=null,location:r,navigationType:a=m.Pop,navigator:o,static:i=!1,future:l}=e;L()&&f(!1);let u=t.replace(/^\/*/,"/"),s=c.useMemo(()=>({basename:u,navigator:o,static:i,future:U({v7_relativeSplatPath:!1},l)}),[u,l,o,i]);"string"==typeof r&&(r=v(r));let{pathname:p="/",search:h="",hash:d="",state:b=null,key:y="default"}=r,w=c.useMemo(()=>{let e=E(p,u);return null==e?null:{location:{pathname:e,search:h,hash:d,state:b,key:y},navigationType:a}},[u,p,h,d,b,y,a]);return null==w?null:c.createElement(M.Provider,{value:s},c.createElement(F.Provider,{children:n,value:w}))}new Promise(()=>{});c.Component;function Q(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const G=c.startTransition;u.flushSync,c.useId;function X(e){let{basename:t,children:n,future:r,window:a}=e,o=c.useRef();var i;null==o.current&&(o.current=(void 0===(i={window:a,v5Compat:!0})&&(i={}),w(function(e,t){let{pathname:n,search:r,hash:a}=e.location;return b("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")},function(e,t){return"string"==typeof t?t:y(t)},null,i)));let l=o.current,[u,s]=c.useState({action:l.action,location:l.location}),{v7_startTransition:m}=r||{},p=c.useCallback(e=>{m&&G?G(()=>s(e)):s(e)},[s,m]);return c.useLayoutEffect(()=>l.listen(p),[l,p]),c.useEffect(()=>K(r),[r]),c.createElement(q,{basename:t,children:n,location:u.location,navigationType:u.action,navigator:l,future:r})}"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement;var Z,ee;function te(e){let t=c.useRef(Q(e)),n=c.useRef(!1),r=B(),a=c.useMemo(()=>function(e,t){let n=Q(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}(r.search,n.current?null:t.current),[r.search]),o=W(),i=c.useCallback((e,t)=>{const r=Q("function"==typeof e?e(a):e);n.current=!0,o("?"+r,t)},[o,a]);return[a,i]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Z||(Z={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(ee||(ee={}));var ne=a(386),re=a(110),ae=a(842),oe=a.n(ae),ie=a(894);const le=wp.data,ce=function(e){var t=e.title;return wp.element.createElement("div",{className:"rank-math-skeleton rank-math-system-status rank-math-ui container"},wp.element.createElement("div",{className:"rank-math-box"},wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("div",{className:"copy-button-wrapper"}),wp.element.createElement("div",{className:"rank-math-panel components-panel"},(0,re.map)(Array.from({length:8}),function(e,t){return wp.element.createElement("div",{key:t,className:"components-panel__body"})}))))};a.dn(ce);var ue=a(261);const se=(0,ie.compose)((0,le.withSelect)(function(e){return{data:e("rank-math-status").getViewData("version_control")}}),(0,le.withDispatch)(function(e){var t="version_control";return{getViewData:function(){oe()({method:"POST",path:"/rankmath/v1/status/getViewData",data:{activeTab:t}}).catch(function(e){alert(e.message)}).then(function(n){e("rank-math-status").updateViewData(t,n)})},updateViewData:function(n){e("rank-math-status").updateViewData(t,n)}}}))(function(e){var t=e.data,n=e.getViewData,r=e.updateViewData;return(0,ne.useEffect)(function(){(0,re.isEmpty)(t)&&n()},[]),(0,re.isUndefined)(t)?wp.element.createElement(ce,{title:"Version Control"}):wp.element.createElement("div",{className:"rank-math-ui container version-control"},wp.element.createElement(ue.default,{data:t,updateViewData:r}))});function me(e){return me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},me(e)}function pe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function fe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=me(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=me(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==me(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return n=e,r=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pe(Object(n),!0).forEach(function(t){fe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pe(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},t),{type:"RANK_MATH_APP_UI",key:n,value:r};var n,r}function de(e){return de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},de(e)}function be(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ye(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach(function(t){ve(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ve(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=de(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=de(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==de(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===t.type?ye(ye({},e),{},ve({},t.key,t.value)):e}function ge(e,t){return e.appUi[t]}(0,le.register)((0,le.createReduxStore)("rank-math-status",{reducer:(0,le.combineReducers)(i),selectors:l,actions:o}));var Ee=a(470),ke=(0,ne.lazy)(function(){return Promise.resolve().then(a.bind(a,261))}),Se=(0,ne.lazy)(function(){return a.e(353).then(a.bind(a,943))}),_e=(0,ne.lazy)(function(){return a.e(906).then(a.bind(a,458))}),Oe=(0,ne.lazy)(function(){return a.e(318).then(a.bind(a,281))}),Pe=rankMath,je=Pe.isAdvancedMode,Ne=Pe.isPluginActiveForNetwork,De=Pe.canUser;const Te=(0,re.filter)([je&&(!Ne||De.setupNetwork)&&De.installPlugins&&{name:"version_control",title:(0,Ee.__)("Version Control","seo-by-rank-math"),view:ke},je&&(!Ne||De.manageOptions)&&{name:"tools",title:(0,Ee.__)("Database Tools","seo-by-rank-math"),view:Se},De.manageOptions&&{name:"status",title:(0,Ee.__)("System Status","seo-by-rank-math"),view:_e},je&&De.manageOptions&&{name:"import_export",title:(0,Ee.__)("Import & Export","seo-by-rank-math"),view:Oe}],Boolean);var Re=a(303);function Ae(e){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ae(e)}function Ce(e){return function(e){if(Array.isArray(e))return xe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return xe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?xe(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach(function(t){Me(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Me(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=Ae(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=Ae(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ae(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Fe=(0,ie.compose)((0,le.withSelect)(function(e,t){var n=t.searchParams.get("view"),r=e("rank-math-status");return Ve(Ve({},t),{},{data:r.getViewData(n),activeTab:n})}),(0,le.withDispatch)(function(e,t){var n=t.activeTab,r=t.setSearchParams;return{onTabChange:function(e){e!==n&&r(function(t){return(0,re.fromPairs)([].concat(Ce(t),[["view",e]]))})},getViewData:function(){oe()({method:"POST",path:"/rankmath/v1/status/getViewData",data:{activeTab:n}}).catch(function(e){alert(e.message)}).then(function(t){e("rank-math-status").updateViewData(n,t)})},updateViewData:function(t){e("rank-math-status").updateViewData(n,t)}}}))(function(e){var t=e.data,n=e.activeTab,r=e.onTabChange,a=e.getViewData,o=e.updateViewData;return(0,ne.useEffect)(function(){(0,re.isEmpty)(t)&&a()},[n]),wp.element.createElement(React.Fragment,null,wp.element.createElement(Re.DashboardHeader,{page:n}),wp.element.createElement("span",{className:"wp-header-end"}),wp.element.createElement("div",{className:"wrap rank-math-wrap rank-math-tools-wrap dashboard"},wp.element.createElement(ne.Suspense,null,wp.element.createElement(Re.TabPanel,{tabs:Te,key:n,initialTabName:n,onSelect:r},function(e){var n=e.name,r=e.title,a=e.view;return(0,re.isUndefined)(t)?wp.element.createElement(ce,{title:r,name:n}):wp.element.createElement("div",{className:"rank-math-ui container ".concat(n)},wp.element.createElement(a,{data:t,updateViewData:o}))}))))});function Ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Le(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Le(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const Be=function(){var e=Ie(te({view:Te[0].name}),2),t=e[0],n=e[1];return wp.element.createElement(Fe,{searchParams:t,setSearchParams:n})};var ze;a.dn(Be),ze=function(){var e=document.getElementById("rank-math-tools-wrapper");e&&(0,ne.createRoot)(e).render(wp.element.createElement(X,null,wp.element.createElement(Be,null)));var t=document.getElementById("rank-math-version-control-wrapper");t&&(0,ne.createRoot)(t).render(wp.element.createElement(se,null))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",ze):ze())}();PK     ¥ŠU]OW5»ª  ª  2  includes/modules/status/assets/js/databaseTools.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[353],{142:function(e,t,n){n.d(t,{A:function(){return o}}),n.dn(o);var r=n(669),a=n.n(r);function o(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",s=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var i=a()('<div class="notice notice-'+t+" "+o+' is-dismissible"><p>'+e+"</p></div>").hide();s||n.siblings(".notice").remove(),n.after(i),i.slideDown(),a()(document).trigger("wp-updates-notice-added"),a()("html,body").animate({scrollTop:i.offset().top-50},"slow"),r&&setTimeout(function(){i.fadeOut(function(){i.remove()})},r)}},943:function(e,t,n){n.r(t),n.d(t,{default:function(){return v}});var r=n(110),a=n(470),o=n(386),s=n(303),i=n(669),l=n.n(i),c=n(142),u=n(333),f=n(214);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}var d=rankMath.batchSize,p=0,h=function(e,t,n,o){0===p&&(0,u.A)((0,a.__)("Starting SEO score recalculation","seo-by-rank-math"),t,n);var s=(0,r.isUndefined)(o.offset)?0:o.offset,i=p+1,l=(0,r.keys)(e).length+s,c=!(0,r.isUndefined)(o.update_all_scores)&&o.update_all_scores?rankMath.totalPosts:rankMath.totalPostsWithoutScore;(0,f.A)(e,t,n,function(){(p+=d)>=c?(0,u.A)((0,a.__)("The SEO Scores have been recalculated successfully!","seo-by-rank-math"),t,n):(o.offset=p,y("update_seo_score",t,n,o))},i,l,c)},y=function(e,t,n,r){var o=l()(".wp-header-end");l().ajax({url:rankMath.api.root+"rankmath/v1/toolsAction",method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.restNonce)},data:{action:e,args:r}}).fail(function(e){e&&(e.responseJSON&&e.responseJSON.message?(0,c.A)(e.responseJSON.message,"error",o):(0,c.A)(e.statusText,"error",o))}).done(function(s){if(s){if("update_seo_score"===e)return void h(s,t,n,r);if("string"==typeof s)return void(0,c.A)(s,"success",o,!1);if("object"===m(s)&&s.status&&s.message)return void(0,c.A)(s.message,s.status,o,!1)}(0,c.A)((0,a.__)("Something went wrong. Please try again later.","seo-by-rank-math"),"error",o)})};function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,s,i=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw a}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const v=function(e){var t=e.data.tools,n=b((0,o.useState)([]),2),i=n[0],l=n[1],c=b((0,o.useState)(!0),2),u=c[0],f=c[1];return wp.element.createElement("table",{className:"rank-math-status-table striped rank-math-tools-table widefat rank-math-box"},wp.element.createElement("tbody",{className:"tools"},(0,r.map)(t,function(e,t){var n=e.title,r=e.description,o=e.button_text,c=e.confirm_text;return wp.element.createElement("tr",{key:t,className:t},wp.element.createElement("th",null,wp.element.createElement("h4",{className:"name"},n),wp.element.createElement("p",{className:"description",dangerouslySetInnerHTML:{__html:r}})),wp.element.createElement("td",{className:"run-tool"},wp.element.createElement(s.Button,{isDestructive:!0,size:"large",className:"tools-action",onClick:function(){if(c&&!confirm(c))return!1;y(t,i,l,u?{update_all_scores:!0}:{})}},o),"update_seo_score"===t&&rankMath.totalPostsWithoutScore>0&&wp.element.createElement("div",{className:"update_all_scores"},wp.element.createElement(s.CheckboxControl,{label:(0,a.__)("Include posts/pages where the score is already set","seo-by-rank-math"),checked:u,onChange:f}))))}),0!==i.length&&wp.element.createElement("tr",{key:"update-score-logger"},wp.element.createElement("td",{colSpan:2},wp.element.createElement(s.TextareaControl,{disable:"true",value:i.join("\n"),className:"import-progress-area large-text",rows:"8",style:{marginRight:"20px",background:"#eee"}})))))};n.dn(v)},333:function(e,t,n){function r(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.d(t,{A:function(){return o}});const o=function(e,t,n){var a=new Date,o="["+(10>a.getHours()?"0":"")+a.getHours()+":"+(10>a.getMinutes()?"0":"")+a.getMinutes()+":"+(10>a.getSeconds()?"0":"")+a.getSeconds()+"] "+e;t.push(o),n(r(t))};n.dn(o)},214:function(e,t,n){n.d(t,{A:function(){return d}});var r=n(669),a=n.n(r),o=n(110),s=n(470),i=n(265),l=n(333),c=n(566),u={};(0,o.isUndefined)(rankMath.assessor)||(0,o.forEach)(rankMath.assessor.diacritics,function(e,t){return u[t]=new RegExp(e,"g")});const f=function(e){if((0,o.isUndefined)(e))return e;for(var t in u)e=e.replace(u[t],t);return e};n.dn(f);var m=[];const d=function(e,t,n,r,u,d,p){var h={};if("complete"!==e)return new Promise(function(t){(0,o.forEach)(e,function(e,t){if(-1===m.indexOf(t)){m.push(t);var n=new i.ResultManager,r=wp.i18n,a=new i.Paper;a.setTitle(e.title),a.setDescription(e.description),a.setText(e.content),a.setKeyword(e.keyword),a.setKeywords(e.keywords),a.setPermalink(e.url),a.setUrl(e.url),a.setSchema(e.schemas),a.setPostType(e.post_type),e.thumbnail&&a.setThumbnail(e.thumbnail),e.thumbnailAlt&&a.setThumbnailAltText(f(e.thumbnailAlt)),a.setContentAI(e.hasContentAi);var s=function(e){var t=rankMath.assessor.researchesTests;return t=(0,o.difference)(t,["keywordNotUsed"]),e.isProduct?(t=(0,o.difference)(t,["keywordInSubheadings","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasNumber","contentHasTOC"]),(0,c.applyFilters)("rank_math_update_score_researches_tests",t,e)):t}(e);new i.Analyzer({i18n:r,analysis:s}).analyzeSome(s,a).then(function(r){n.update(a.getKeyword(),r,!0);var o=n.getScore(a.getKeyword());e.isProduct&&(o=e.isReviewEnabled?o+1:o,o=e.hasProductSchema?o+1:o),h[t]=o})}}),t()}).then(function(){a().ajax({url:rankMath.api.root+"rankmath/v1/updateSeoScore",method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.restNonce)},data:{action:"rank_math_update_seo_score",postScores:h},success:function(){(0,l.A)((0,s.sprintf)((0,s.__)("Calculating SEO score for posts %1$s - %2$s out of %3$s","seo-by-rank-math"),u,d,p),t,n),r()},error:function(e){(0,l.A)(e.statusText,t,n)}})});r()};n.dn(d)}}]);PK     ¥ŠU]:K.}û  û  1  includes/modules/status/assets/js/systemStatus.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[906],{458:function(e,t,n){n.r(t),n.d(t,{default:function(){return h}});var r=n(470),a=n(386),l=n(894),o=n(303);function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,l,o,c=[],s=!0,i=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=l.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){i=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const i=function(e){var t=e.errorLog,n=e.errorLogPath,s=e.errorLogSize,i=e.errorLogError,m=c((0,a.useState)(!1),2),u=m[0],p=m[1],f=(0,l.useCopyToClipboard)(t,function(){p(!0),setTimeout(function(){p(!1)},2e3)});return(0,a.useEffect)(function(){var e=document.getElementById("rank-math-status-error-log");e&&(e.scrollTop=e.scrollHeight)},[]),wp.element.createElement("div",{className:"rank-math-system-status rank-math-box"},wp.element.createElement("header",null,wp.element.createElement("h3",null,(0,r.__)("Error Log","seo-by-rank-math"))),wp.element.createElement("p",{className:"description",dangerouslySetInnerHTML:{__html:(0,r.sprintf)((0,r.__)("If you have %s enabled, errors will be stored in a log file. Here you can find the last 100 lines in reversed order so that you or the Rank Math support team can view it easily. The file cannot be edited here.","seo-by-rank-math"),'<a href="https://wordpress.org/support/article/debugging-in-wordpress/" target=_blank" >WP_DEBUG_LOG</a>')}}),i&&wp.element.createElement("strong",{className:"error-log-cannot-display"},i),!i&&wp.element.createElement(React.Fragment,null,wp.element.createElement("div",{className:"copy-button-wrapper"},wp.element.createElement(o.Button,{ref:f},(0,r.__)("Copy Log to Clipboard","seo-by-rank-math")),u&&wp.element.createElement("span",{className:"success"},(0,r.__)("Copied!","seo-by-rank-math"))),wp.element.createElement("div",{id:"error-log-wrapper"},wp.element.createElement(o.TextareaControl,{rows:16,cols:80,value:t,variant:"code-box",className:"code",id:"rank-math-status-error-log",disabled:!0})),t&&wp.element.createElement("div",{className:"error-log-info"},wp.element.createElement("code",null,n),wp.element.createElement("em",null,"Â (",s,")"))))};n.dn(i);var m=n(110),u=n(976);const p=function(e){return wp.element.createElement(u.Panel,{className:"rank-math-panel"},(0,m.map)(e,function(e,t){var n=e.label,r=e.fields,a=e.show_count;if(!(0,m.isEmpty)(r)){var l="(".concat((0,m.entries)(r).length,")"),c="".concat(n," ").concat(a?l:"");return wp.element.createElement(u.PanelBody,{key:t,title:c,initialOpen:!1},wp.element.createElement(u.PanelRow,null,wp.element.createElement(o.Table,{size:"small",fields:(0,m.map)(r,function(e){return[e.label,e.value]}),addHeader:!1})))}}))};function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,l,o,c=[],s=!0,i=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=l.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){i=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.dn(p);const y=function(e){var t=e.systemInfo,n=e.systemInfoCopy,c=f((0,a.useState)(!1),2),s=c[0],i=c[1],m=(0,l.useCopyToClipboard)(n,function(){i(!0),setTimeout(function(){i(!1)},3e3)});return wp.element.createElement("div",{className:"rank-math-system-status rank-math-box"},wp.element.createElement("header",null,wp.element.createElement("h3",null,(0,r.__)("System Info","seo-by-rank-math"))),wp.element.createElement("div",{className:"copy-button-wrapper"},wp.element.createElement(o.Button,{ref:m},(0,r.__)("Copy System Info to Clipboard","seo-by-rank-math")),s&&wp.element.createElement("span",{className:"success"},(0,r.__)("Copied!","seo-by-rank-math"))),wp.element.createElement(p,t))};n.dn(y);const h=function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(y,e.data),wp.element.createElement(i,e.data))};n.dn(h)}}]);PK     ¥ŠU]Œí;yžH  žH  1  includes/modules/status/assets/js/importExport.jsnu „[µü¤        "use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([[318],{142:function(e,t,n){n.d(t,{A:function(){return o}}),n.dn(o);var r=n(669),a=n.n(r);function o(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];t=t||"error",r=r||!1;var l=a()('<div class="notice notice-'+t+" "+o+' is-dismissible"><p>'+e+"</p></div>").hide();i||n.siblings(".notice").remove(),n.after(l),l.slideDown(),a()(document).trigger("wp-updates-notice-added"),a()("html,body").animate({scrollTop:l.offset().top-50},"slow"),r&&setTimeout(function(){l.fadeOut(function(){l.remove()})},r)}},281:function(e,t,n){n.r(t),n.d(t,{default:function(){return R}});var r=n(566),a=n(470),o=n(976);function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=rankMath.links[e]||"";if(!r)return"#";if(!t)return r;var a={utm_source:"Plugin",utm_medium:encodeURIComponent(t),utm_campaign:"WP"},o=r,i="",l=r.indexOf("#");-1!==l&&(o=r.substring(0,l),i=r.substring(l));var s=Object.keys(a).map(function(e){return"".concat(e,"=").concat(a[e])}).join("&"),c=o.includes("?")&&!o.endsWith("?")?"&":"?";return o+c+s+i+n}n.dn(i);var l=n(669),s=n.n(l),c=n(842),m=n.n(c),u=n(386),p=n(303),f=n(142);function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const b=function(){var e=d((0,u.useState)(!1),2),t=e[0],n=e[1],r=new FormData;return r.append("import-me",t),wp.element.createElement("div",{id:"rank-math-import-form",className:"rank-math-export-form field-form"},wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"import-me"},wp.element.createElement("strong",null,(0,a.__)("Settings File","seo-by-rank-math")))),wp.element.createElement("div",null,wp.element.createElement(o.FormFileUpload,{accept:".json",onChange:function(e){return n(e.currentTarget.files[0])},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0},wp.element.createElement("span",{className:"import-file-button"},(0,a.__)("Choose File","seo-by-rank-math")),t&&wp.element.createElement("span",null,t.name)),wp.element.createElement("br",null),wp.element.createElement("span",{className:"validation-message"},(0,a.__)("Please select a file to import.","seo-by-rank-math"))),wp.element.createElement("div",{className:"description"},(0,a.__)('Import settings by locating settings file and clicking "Import settings".',"seo-by-rank-math")),wp.element.createElement("footer",null,wp.element.createElement(p.Button,{variant:"primary",disabled:!1===t,onClick:function(){confirm((0,a.__)("Are you sure you want to import settings into Rank Math? Don't worry, your current configuration will be saved as a backup.","seo-by-rank-math"))&&m()({method:"POST",headers:{},path:"/rankmath/v1/status/importSettings",body:r}).catch(function(e){alert(e.message)}).then(function(e){var t=s()(".rank-math-breadcrumbs-wrap");e.error?(0,f.A)(e.error,"error",t):(0,f.A)(e.success,"success",t),n(!1)})}},(0,a.__)("Import","seo-by-rank-math"))))};n.dn(b);var y=n(110);function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var w={general:(0,a.__)("General Settings","seo-by-rank-math"),titles:(0,a.__)("Titles & Metas","seo-by-rank-math"),sitemap:(0,a.__)("Sitemap Settings","seo-by-rank-math"),"role-manager":(0,a.__)("Role Manager Settings","seo-by-rank-math"),redirections:(0,a.__)("Redirections","seo-by-rank-math")};const v=function(){var e=g((0,u.useState)(Object.keys(w)),2),t=e[0],n=e[1],r=(0,y.map)((0,y.entries)(w),function(e){var t=g(e,2);return{id:t[0],label:t[1]}});return wp.element.createElement("div",{id:"rank-math-export-form",className:"rank-math-export-form field-form"},wp.element.createElement(p.CheckboxList,{variant:"default",value:t,onChange:n,options:r}),wp.element.createElement("p",{className:"description"},(0,a.__)("Choose the panels to export.","seo-by-rank-math")),wp.element.createElement("footer",null,wp.element.createElement(p.Button,{variant:"primary",disabled:(0,y.isEmpty)(t),onClick:function(){m()({method:"POST",headers:{},path:"/rankmath/v1/status/exportSettings",data:{panels:t}}).catch(function(e){alert(e.message)}).then(function(e){var t=new Blob([e],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download="rank-math-settings-".concat((new Date).toISOString().replace(/[:.]/g,"-"),".json"),document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)})}},(0,a.__)("Export","seo-by-rank-math"))))};n.dn(v);const _=[{name:"rank-math-import-form",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-import"}),wp.element.createElement("span",{className:"rank-math-tab-text"},(0,a.__)("Import Settings","seo-by-rank-math"))),view:b},{name:"rank-math-export-form",title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-export"}),wp.element.createElement("span",{className:"rank-math-tab-text"},(0,a.__)("Export Settings","seo-by-rank-math"))),view:v}],E=function(){return wp.element.createElement("div",{className:"import-export-settings"},wp.element.createElement("h2",null,(0,a.__)("Plugin Settings","seo-by-rank-math")),wp.element.createElement("p",{className:"description"},(0,a.__)("Import or export your Rank Math settings. This option is useful for replicating Rank Math settings across multiple websites. ","seo-by-rank-math"),wp.element.createElement("a",{href:i("import-export-settings","Options Panel Import Export Page"),target:"_blank",rel:"noreferrer"},(0,a.__)("Learn more about the Import/Export options.","seo-by-rank-math"))),wp.element.createElement("div",{className:"rank-math-box no-padding"},wp.element.createElement(o.TabPanel,{tabs:_},function(e){var t=e.view;return wp.element.createElement("div",{className:"rank-math-box-content"},wp.element.createElement(t,null))})))};function S(e,t,n){return s().ajax({url:rankMath.ajaxurl,type:n||"POST",dataType:"json",data:s().extend(!0,{action:"rank_math_"+e,security:rankMath.security},t)})}n.dn(E),n.dn(S);var A=n(214),x=n(333),N=function(e,t,n,r,o,i){if(0===t.length){var l=(0,a.__)("Import finished.","seo-by-rank-math");return(0,x.A)(l,n,r),void i()}var s=t.shift(),c="deactivate"===s?"Deactivating plugin":"Importing "+s;o=o||1,"recalculate"===s&&(c=(0,a.__)("Starting SEO score recalculation","seo-by-rank-math")),(0,x.A)(c,n,r),S("import_plugin",{perform:s,pluginSlug:e,paged:o}).done(function(l){if(o=1,l&&l.page&&l.page<l.total_pages&&(o=l.page+1,t.unshift(s)),"recalculate"===s&&l.total_items>0){var c=l.start,m=l.end,u=l.total_items;(0,A.A)(l.data,n,r,function(){N(e,t,n,r,o,i)},c,m,u)}else"recalculate"===s&&0===l.total_items&&(l.message=(0,a.__)("No posts found with SEO score.","seo-by-rank-math")),(0,x.A)(l.success?l.message:l.error,n,r),N(e,t,n,r,o,i)}).fail(function(a){(0,x.A)(a.statusText,n,r),N(e,t,n,r,null,i)})};const O=N;function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,l=[],s=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){c=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return I(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?I(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}const T=function(e){var t=e.slug,n=e.choices,r=e.pluginName,o=e.importablePlugins,i=e.updateViewData;"redirections"!==t&&(n.recalculate=(0,a.__)("Calculate SEO Scores","seo-by-rank-math"));var l=C((0,u.useState)((0,y.keys)(n)),2),c=l[0],m=l[1],d=C((0,u.useState)(!1),2),h=d[0],b=d[1],g=C((0,u.useState)([]),2),k=g[0],w=g[1],v=s()(".wp-header-end");return wp.element.createElement("div",{className:"rank-math-box-content"},wp.element.createElement(p.CheckboxList,{variant:"default",value:c,onChange:m,options:(0,y.map)(n,function(e,t){return{id:t,label:e}})}),0!==k.length&&wp.element.createElement(p.TextareaControl,{disable:"true",value:k.join("\n"),className:"import-progress-area large-text",rows:"8",style:{marginRight:"20px",background:"#eee"}}),wp.element.createElement("footer",null,wp.element.createElement(p.Button,{variant:"primary",onClick:function(){if(confirm((0,a.sprintf)((0,a.__)("Are you sure you want to import data from %s?","seo-by-rank-math"),r)))if(c.length<1)(0,f.A)((0,a.__)("Select data to import.","seo-by-rank-math"),"error",v,5e3);else{b(!0);var e=c;e.push("deactivate"),(0,x.A)("Import started...",k,w),O(t,e,k,w,null,function(){b(!0),setTimeout(function(){w([])},1e4)})}},disabled:h},(0,a.__)("Import","seo-by-rank-math")),wp.element.createElement(p.Button,{isDestructive:!0,onClick:function(){confirm((0,a.sprintf)((0,a.__)("Are you sure you want erase all traces of %s?","seo-by-rank-math"),r))&&S("clean_plugin",{pluginSlug:t}).done(function(e){if(e.success){var n=o;delete n[t],i({importablePlugins:n})}(0,f.A)(e.success?e.message:e.error,e.success?"success":"error",v,5e3)})}},(0,a.__)("Clean","seo-by-rank-math"))))};function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},P.apply(null,arguments)}n.dn(T);const j=function(e){var t=e.data,n=e.updateViewData,r=t.importablePlugins,l=(0,y.map)(r,function(e,t){return{slug:t,name:"import-plugin-".concat(t),choices:e.choices,pluginName:e.name,title:wp.element.createElement(React.Fragment,null,wp.element.createElement("i",{className:"rm-icon rm-icon-import"}),wp.element.createElement("span",null,e.name))}});return wp.element.createElement("div",{className:"import-plugins"},wp.element.createElement("h2",null,(0,a.__)("Other Plugins","seo-by-rank-math")),wp.element.createElement("p",{className:"description"},(0,a.__)("If you were using another plugin to add important SEO information to your website before switching to Rank Math SEO, you can import the settings and data here. ","seo-by-rank-math"),wp.element.createElement("a",{href:i("import-export-settings","Options Panel Import Export Page Other Plugins"),target:"_blank",rel:"noreferrer"},(0,a.__)("Learn more about the Import/Export options.","seo-by-rank-math"))),wp.element.createElement("div",{className:"rank-math-box no-padding rank-math-export-form field-form"},wp.element.createElement("div",{className:"with-action at-top"},(0,y.isEmpty)(r)?wp.element.createElement("p",{className:"empty-notice"},(0,a.__)("No plugin detected with importable data.","seo-by-rank-math")):wp.element.createElement(o.TabPanel,{tabs:l},function(e){return wp.element.createElement(T,P({key:e.slug},e,{importablePlugins:r,updateViewData:n}))}))))};n.dn(j);const M=function(e){var t=e.data,n=e.updateViewData,r=t.backups,o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;m()({method:"POST",path:"/rankmath/v1/status/runBackup",data:{action:e,key:t}}).catch(function(e){alert(e.message)}).then(function(e){var t=s()(".wp-header-end");(0,f.A)(e.message,e.type,t),!1!==e.backups&&n({backups:e.backups})})};return wp.element.createElement("div",{className:"settings-backup"},wp.element.createElement(p.Button,{variant:"primary",className:"alignright",onClick:function(){return o("create")}},(0,a.__)("Create Backup","seo-by-rank-math")),wp.element.createElement("h3",null,(0,a.__)("Settings Backup","seo-by-rank-math")),wp.element.createElement("p",{className:"description"},(0,a.__)("Take a backup of your plugin settings in case you wish to restore them in future. Use it as backup before making substantial changes to Rank Math settings. For taking a backup of the SEO data of your content, use the XML Export option.","seo-by-rank-math")),wp.element.createElement("div",{className:"rank-math-settings-backup-form field-form"},wp.element.createElement("div",{className:"list-table with-action"},wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,!(0,y.isEmpty)(r)&&(0,y.map)(r,function(e,t){return wp.element.createElement("tr",{key:t},wp.element.createElement("th",null,(0,a.sprintf)((0,a.__)("Backup: %s","seo-by-rank-math"),e)),wp.element.createElement("td",null,wp.element.createElement(p.Button,{size:"small",variant:"secondary",onClick:function(){confirm((0,a.__)("Are you sure you want to restore this backup? Your current configuration will be overwritten.","seo-by-rank-math"))&&o("restore",t)}},(0,a.__)("Restore","seo-by-rank-math")),wp.element.createElement(p.Button,{size:"small",isDestructive:!0,onClick:function(){confirm((0,a.__)("Are you sure you want to delete this backup?","seo-by-rank-math"))&&o("delete",t)}},(0,a.__)("Delete","seo-by-rank-math"))))})))),(0,y.isEmpty)(r)&&wp.element.createElement("p",{id:"rank-math-no-backup-message"},(0,a.__)("There is no backup.","seo-by-rank-math"))))};n.dn(M);const R=function(e){return wp.element.createElement("div",{className:"rank-math-import-export"},wp.element.createElement(E,null),(0,r.applyFilters)("rank_math_status_import_export_tabs","",e),wp.element.createElement(j,e),wp.element.createElement(M,e))};n.dn(R)},333:function(e,t,n){function r(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}n.d(t,{A:function(){return o}});const o=function(e,t,n){var a=new Date,o="["+(10>a.getHours()?"0":"")+a.getHours()+":"+(10>a.getMinutes()?"0":"")+a.getMinutes()+":"+(10>a.getSeconds()?"0":"")+a.getSeconds()+"] "+e;t.push(o),n(r(t))};n.dn(o)},214:function(e,t,n){n.d(t,{A:function(){return f}});var r=n(669),a=n.n(r),o=n(110),i=n(470),l=n(265),s=n(333),c=n(566),m={};(0,o.isUndefined)(rankMath.assessor)||(0,o.forEach)(rankMath.assessor.diacritics,function(e,t){return m[t]=new RegExp(e,"g")});const u=function(e){if((0,o.isUndefined)(e))return e;for(var t in m)e=e.replace(m[t],t);return e};n.dn(u);var p=[];const f=function(e,t,n,r,m,f,d){var h={};if("complete"!==e)return new Promise(function(t){(0,o.forEach)(e,function(e,t){if(-1===p.indexOf(t)){p.push(t);var n=new l.ResultManager,r=wp.i18n,a=new l.Paper;a.setTitle(e.title),a.setDescription(e.description),a.setText(e.content),a.setKeyword(e.keyword),a.setKeywords(e.keywords),a.setPermalink(e.url),a.setUrl(e.url),a.setSchema(e.schemas),a.setPostType(e.post_type),e.thumbnail&&a.setThumbnail(e.thumbnail),e.thumbnailAlt&&a.setThumbnailAltText(u(e.thumbnailAlt)),a.setContentAI(e.hasContentAi);var i=function(e){var t=rankMath.assessor.researchesTests;return t=(0,o.difference)(t,["keywordNotUsed"]),e.isProduct?(t=(0,o.difference)(t,["keywordInSubheadings","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasNumber","contentHasTOC"]),(0,c.applyFilters)("rank_math_update_score_researches_tests",t,e)):t}(e);new l.Analyzer({i18n:r,analysis:i}).analyzeSome(i,a).then(function(r){n.update(a.getKeyword(),r,!0);var o=n.getScore(a.getKeyword());e.isProduct&&(o=e.isReviewEnabled?o+1:o,o=e.hasProductSchema?o+1:o),h[t]=o})}}),t()}).then(function(){a().ajax({url:rankMath.api.root+"rankmath/v1/updateSeoScore",method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",rankMath.restNonce)},data:{action:"rank_math_update_seo_score",postScores:h},success:function(){(0,s.A)((0,i.sprintf)((0,i.__)("Calculating SEO score for posts %1$s - %2$s out of %3$s","seo-by-rank-math"),m,f,d),t,n),r()},error:function(e){(0,s.A)(e.statusText,t,n)}})});r()};n.dn(f)}}]);PK     ¥ŠU]Š½Km  Km  3  includes/modules/status/assets/js/versionControl.jsnu „[µü¤        <<<<<<< Updated upstream
"use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([["versionControl"],{"./includes/modules/status/assets/src/tabs/version-control/AutoUpdatePanel.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@rank-math/components"),l=n("./includes/modules/status/assets/src/tabs/version-control/Footer.js"),o=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}t.default=function(e){var t=e.data,n=e.updateViewData,i=t.autoUpdate,c=t.updateNotificationEmail,u=t.isPluginUpdateDisabled,m=t.rollbackVersion;return wp.element.createElement("div",{className:"rank-math-auto-update-form field-form rank-math-box"},wp.element.createElement(o.default,{title:(0,a.__)("Auto Update","rank-math"),description:u?(0,a.__)("You cannot turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released, because site wide plugins auto-update option is disabled on your site.","rank-math"):(0,a.__)("Turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released. The beta versions of Rank Math as soon as they are released. The beta versions will never install automatically.","rank-math")}),!u&&wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_auto_update"},(0,a.__)("Auto Update Plugin","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"enable_auto_update",checked:i,onChange:function(e){t.autoUpdate=e,n(t)}}))))),wp.element.createElement("div",{id:"control_update_notification_email"},wp.element.createElement("p",null,(0,a.__)("When auto-updates are turned off, you can enable update notifications, to send an email to the site administrator when an update is available for Rank Math.","rank-math")),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_update_notification_email"},(0,a.__)("Update Notification Email","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"enable_update_notification_email",checked:c,onChange:function(e){t.updateNotificationEmail=e,n(t)}})))))),!u&&m&&wp.element.createElement(r.Notice,{variant:"alt",status:"warning"},wp.element.createElement("p",null,(0,a.__)("Rank Math will not auto-update because you have rolled back to a previous version. Update to the latest version manually to make this option work again.","rank-math"))),wp.element.createElement(l.default,s({panel:"auto_update"},t)))}},"./includes/modules/status/assets/src/tabs/version-control/BetaOptInPanel.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@rank-math/components"),l=n("./includes/modules/status/assets/src/tabs/version-control/Footer.js"),o=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(this,arguments)}t.default=function(e){var t=e.data,n=e.updateViewData,i=t.betaOptin,c=t.isPluginUpdateDisabled;return wp.element.createElement("div",{className:"rank-math-beta-optin-form field-form rank-math-box"},wp.element.createElement(o.default,{title:(0,a.__)("Beta Opt-in","rank-math"),description:c?(0,a.__)("You cannot turn on the Beta Tester feature because site wide plugins auto-update option is disabled on your site.","rank-math"):(0,a.__)("You can take part in shaping Rank Math by test-driving the newest features and letting us know what you think. Turn on the Beta Tester feature to get notified about new beta releases. The beta version will not install automatically and you always have the option to ignore it.","rank-math"),warning:c?"":(0,a.__)("It is not recommended to use the beta version on live production sites.","rank-math")}),!c&&wp.element.createElement(React.Fragment,null,wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"beta_tester"},(0,a.__)("Beta Tester","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"beta_tester",checked:i,onChange:function(e){t.betaOptin=e,n(t)}}))))),wp.element.createElement(l.default,s({panel:"beta_optin"},t))))}},"./includes/modules/status/assets/src/tabs/version-control/Footer.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@wordpress/element"),l=n("@wordpress/api-fetch"),o=n.n(l),s=n("@rank-math/components");function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==i(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!==i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===i(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,s=[],i=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);i=!0);}catch(e){c=!0,r=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}t.default=function(e){var t=p((0,r.useState)((0,a.__)("Save Changes","rank-math")),2),n=t[0],l=t[1],i=p((0,r.useState)(!1),2),c=i[0],m=i[1];return wp.element.createElement("footer",null,wp.element.createElement(s.Button,{type:"submit",variant:"primary",size:"xlarge",disabled:c,onClick:function(){l((0,a.__)("Savingâ€¦","rank-math")),m(!0),o()({method:"POST",path:"/rankmath/v1/status/updateViewData",data:u({},e)}).catch((function(e){console.error(e.message),l((0,a.__)("Failed! Try again","rank-math"))})).then((function(e){l(e?(0,a.__)("Saved","rank-math"):(0,a.__)("Failed! Try again","rank-math"))})).finally((function(){setTimeout((function(){m(!1),l((0,a.__)("Save Changes","rank-math"))}),1e3)}))}},n))}},"./includes/modules/status/assets/src/tabs/version-control/Header.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n");t.default=function(e){var t=e.title,n=e.description,r=e.warning,l=void 0===r?"":r;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("p",null,n),l&&wp.element.createElement("p",{className:"description warning"},wp.element.createElement("strong",null,wp.element.createElement("span",{className:"warning"},(0,a.__)("Warning: ","rank-math")),l)))}},"./includes/modules/status/assets/src/tabs/version-control/VersionControlPanel.js":function(e,t,n){n.r(t);var a=n("lodash"),r=n("@wordpress/i18n"),l=n("@wordpress/element"),o=n("@rank-math/components"),s=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,s=[],i=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);i=!0);}catch(e){c=!0,r=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}t.default=function(e){var t=e.data,n=t.latestVersion,c=t.isRollbackVersion,u=t.isPluginUpdateDisabled,m=t.availableVersions,p=t.updateCoreUrl,d=t.rollbackNonce,f=rankMath.version,h=i((0,l.useState)(m[1]),2),b=h[0],w=h[1],v=i((0,l.useState)(!1),2),y=v[0],_=v[1],k=(0,a.reduce)(m,(function(e,t){return e[t]=t,e}),{});return wp.element.createElement("form",{className:"rank-math-rollback-form field-form rank-math-box",method:"post",action:""},wp.element.createElement(s.default,{title:(0,r.__)("Rollback to Previous Version","rank-math"),description:(0,r.__)("If you are facing issues after an update, you can reinstall a previous version with this tool.","rank-math"),warning:(0,r.__)("Previous versions may not be secure or stable. Proceed with caution and always create a backup.","rank-math")}),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"your-verions"},(0,r.__)("Your Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,f),c&&wp.element.createElement(React.Fragment,null,wp.element.createElement("br",null),wp.element.createElement("span",{className:"rollback-version-label"},(0,r.__)("Rolled Back Version: ","rank-math")),(0,r.__)("Auto updates will not work, please update the plugin manually.","rank-math")),f===n?wp.element.createElement("p",{className:"description"},(0,r.__)("You are using the latest version of the plugin.","rank-math")):wp.element.createElement("p",{className:"description"},(0,r.__)("This is the version you are using on this site.","rank-math")))),f!==n&&wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"latest-stable"},(0,r.__)("Latest Stable Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,n),u&&f<n&&wp.element.createElement("a",{href:p,className:"update-link"},(0,r.__)("Update Now","rank-math")),wp.element.createElement("p",{className:"description"},(0,r.__)("This is the latest version of the plugin.","rank-math")))),wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"rollback_version"},(0,r.__)("Rollback Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(o.SelectControl,{variant:"default",id:"rm_rollback_version",name:"rm_rollback_version",value:b,options:k,disabledOptions:[f],onChange:function(e){return w(e)}}),wp.element.createElement("p",{className:"description"},(0,r.__)("Roll back to this version.","rank-math")))))),wp.element.createElement("footer",null,wp.element.createElement(o.TextControl,{type:"hidden",name:"_wpnonce",value:d}),wp.element.createElement(o.Button,{type:"submit",variant:"primary",size:"xlarge",id:"rm-rollback-button",onClick:function(){return _(!0)}},(0,r.__)("Install Version ","rank-math"),b),y&&wp.element.createElement("div",{className:"alignright rollback-loading-indicator"},wp.element.createElement("span",{className:"loading-indicator-text"},(0,r.__)("Reinstalling, please waitâ€¦","rank-math")),wp.element.createElement("span",{className:"spinner is-active"}))))}},"./includes/modules/status/assets/src/tabs/version-control/index.js":function(e,t,n){n.r(t);var a=n("./includes/modules/status/assets/src/tabs/version-control/AutoUpdatePanel.js"),r=n("./includes/modules/status/assets/src/tabs/version-control/BetaOptInPanel.js"),l=n("./includes/modules/status/assets/src/tabs/version-control/VersionControlPanel.js");t.default=function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(l.default,e),wp.element.createElement(r.default,e),wp.element.createElement(a.default,e))}}}]);
=======
"use strict";(self.webpackChunkrank_math=self.webpackChunkrank_math||[]).push([["versionControl"],{"./includes/modules/status/assets/src/tabs/version-control/AutoUpdatePanel.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@rank-math/components"),l=n("./includes/modules/status/assets/src/tabs/version-control/Footer.js"),o=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(null,arguments)}t.default=function(e){var t=e.data,n=e.updateViewData,i=t.autoUpdate,c=t.updateNotificationEmail,u=t.isPluginUpdateDisabled,m=t.rollbackVersion;return wp.element.createElement("div",{className:"rank-math-auto-update-form field-form rank-math-box"},wp.element.createElement(o.default,{title:(0,a.__)("Auto Update","rank-math"),description:u?(0,a.__)("You cannot turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released, because site wide plugins auto-update option is disabled on your site.","rank-math"):(0,a.__)("Turn on auto-updates to automatically update to stable versions of Rank Math as soon as they are released. The beta versions of Rank Math as soon as they are released. The beta versions will never install automatically.","rank-math")}),!u&&wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_auto_update"},(0,a.__)("Auto Update Plugin","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"enable_auto_update",checked:i,onChange:function(e){t.autoUpdate=e,n(t)}}))))),wp.element.createElement("div",{id:"control_update_notification_email"},wp.element.createElement("p",null,(0,a.__)("When auto-updates are turned off, you can enable update notifications, to send an email to the site administrator when an update is available for Rank Math.","rank-math")),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"enable_update_notification_email"},(0,a.__)("Update Notification Email","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"enable_update_notification_email",checked:c,onChange:function(e){t.updateNotificationEmail=e,n(t)}})))))),!u&&m&&wp.element.createElement(r.Notice,{variant:"alt",status:"warning"},wp.element.createElement("p",null,(0,a.__)("Rank Math will not auto-update because you have rolled back to a previous version. Update to the latest version manually to make this option work again.","rank-math"))),wp.element.createElement(l.default,s({panel:"auto_update"},t)))}},"./includes/modules/status/assets/src/tabs/version-control/BetaOptInPanel.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@rank-math/components"),l=n("./includes/modules/status/assets/src/tabs/version-control/Footer.js"),o=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(null,arguments)}t.default=function(e){var t=e.data,n=e.updateViewData,i=t.betaOptin,c=t.isPluginUpdateDisabled;return wp.element.createElement("div",{className:"rank-math-beta-optin-form field-form rank-math-box"},wp.element.createElement(o.default,{title:(0,a.__)("Beta Opt-in","rank-math"),description:c?(0,a.__)("You cannot turn on the Beta Tester feature because site wide plugins auto-update option is disabled on your site.","rank-math"):(0,a.__)("You can take part in shaping Rank Math by test-driving the newest features and letting us know what you think. Turn on the Beta Tester feature to get notified about new beta releases. The beta version will not install automatically and you always have the option to ignore it.","rank-math"),warning:c?"":(0,a.__)("It is not recommended to use the beta version on live production sites.","rank-math")}),!c&&wp.element.createElement(React.Fragment,null,wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",{className:"field-row field-type-switch"},wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"beta_tester"},(0,a.__)("Beta Tester","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(r.ToggleControl,{id:"beta_tester",checked:i,onChange:function(e){t.betaOptin=e,n(t)}}))))),wp.element.createElement(l.default,s({panel:"beta_optin"},t))))}},"./includes/modules/status/assets/src/tabs/version-control/Footer.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n"),r=n("@wordpress/element"),l=n("@wordpress/api-fetch"),o=n.n(l),s=n("@rank-math/components");function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,s=[],i=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);i=!0);}catch(e){c=!0,r=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}t.default=function(e){var t=p((0,r.useState)((0,a.__)("Save Changes","rank-math")),2),n=t[0],l=t[1],i=p((0,r.useState)(!1),2),c=i[0],m=i[1];return wp.element.createElement("footer",null,wp.element.createElement(s.Button,{type:"submit",variant:"primary",size:"xlarge",disabled:c,onClick:function(){l((0,a.__)("Savingâ€¦","rank-math")),m(!0),o()({method:"POST",path:"/rankmath/v1/status/updateViewData",data:u({},e)}).catch((function(e){console.error(e.message),l((0,a.__)("Failed! Try again","rank-math"))})).then((function(e){l(e?(0,a.__)("Saved","rank-math"):(0,a.__)("Failed! Try again","rank-math"))})).finally((function(){setTimeout((function(){m(!1),l((0,a.__)("Save Changes","rank-math"))}),1e3)}))}},n))}},"./includes/modules/status/assets/src/tabs/version-control/Header.js":function(e,t,n){n.r(t);var a=n("@wordpress/i18n");t.default=function(e){var t=e.title,n=e.description,r=e.warning,l=void 0===r?"":r;return wp.element.createElement(React.Fragment,null,wp.element.createElement("header",null,wp.element.createElement("h3",null,t)),wp.element.createElement("p",null,n),l&&wp.element.createElement("p",{className:"description warning"},wp.element.createElement("strong",null,wp.element.createElement("span",{className:"warning"},(0,a.__)("Warning: ","rank-math")),l)))}},"./includes/modules/status/assets/src/tabs/version-control/VersionControlPanel.js":function(e,t,n){n.r(t);var a=n("lodash"),r=n("@wordpress/i18n"),l=n("@wordpress/element"),o=n("@rank-math/components"),s=n("./includes/modules/status/assets/src/tabs/version-control/Header.js");function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,s=[],i=!0,c=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);i=!0);}catch(e){c=!0,r=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw r}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}t.default=function(e){var t=e.data,n=t.latestVersion,c=t.isRollbackVersion,u=t.isPluginUpdateDisabled,m=t.availableVersions,p=t.updateCoreUrl,d=t.rollbackNonce,f=rankMath.version,h=i((0,l.useState)(m[1]),2),b=h[0],w=h[1],v=i((0,l.useState)(!1),2),y=v[0],_=v[1],k=(0,a.reduce)(m,(function(e,t){return e[t]=t,e}),{});return wp.element.createElement("form",{className:"rank-math-rollback-form field-form rank-math-box",method:"post",action:""},wp.element.createElement(s.default,{title:(0,r.__)("Rollback to Previous Version","rank-math"),description:(0,r.__)("If you are facing issues after an update, you can reinstall a previous version with this tool.","rank-math"),warning:(0,r.__)("Previous versions may not be secure or stable. Proceed with caution and always create a backup.","rank-math")}),wp.element.createElement("table",{className:"form-table"},wp.element.createElement("tbody",null,wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"your-verions"},(0,r.__)("Your Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,f),c&&wp.element.createElement(React.Fragment,null,wp.element.createElement("br",null),wp.element.createElement("span",{className:"rollback-version-label"},(0,r.__)("Rolled Back Version: ","rank-math")),(0,r.__)("Auto updates will not work, please update the plugin manually.","rank-math")),f===n?wp.element.createElement("p",{className:"description"},(0,r.__)("You are using the latest version of the plugin.","rank-math")):wp.element.createElement("p",{className:"description"},(0,r.__)("This is the version you are using on this site.","rank-math")))),f!==n&&wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"latest-stable"},(0,r.__)("Latest Stable Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement("strong",null,n),u&&f<n&&wp.element.createElement("a",{href:p,className:"update-link"},(0,r.__)("Update Now","rank-math")),wp.element.createElement("p",{className:"description"},(0,r.__)("This is the latest version of the plugin.","rank-math")))),wp.element.createElement("tr",null,wp.element.createElement("th",{scope:"row"},wp.element.createElement("label",{htmlFor:"rollback_version"},(0,r.__)("Rollback Version","rank-math"))),wp.element.createElement("td",null,wp.element.createElement(o.SelectControl,{variant:"default",id:"rm_rollback_version",name:"rm_rollback_version",value:b,options:k,disabledOptions:[f],onChange:function(e){return w(e)}}),wp.element.createElement("p",{className:"description"},(0,r.__)("Roll back to this version.","rank-math")))))),wp.element.createElement("footer",null,wp.element.createElement(o.TextControl,{type:"hidden",name:"_wpnonce",value:d}),wp.element.createElement(o.Button,{type:"submit",variant:"primary",size:"xlarge",id:"rm-rollback-button",onClick:function(){return _(!0)}},(0,r.__)("Install Version ","rank-math"),b),y&&wp.element.createElement("div",{className:"alignright rollback-loading-indicator"},wp.element.createElement("span",{className:"loading-indicator-text"},(0,r.__)("Reinstalling, please waitâ€¦","rank-math")),wp.element.createElement("span",{className:"spinner is-active"}))))}},"./includes/modules/status/assets/src/tabs/version-control/index.js":function(e,t,n){n.r(t);var a=n("./includes/modules/status/assets/src/tabs/version-control/AutoUpdatePanel.js"),r=n("./includes/modules/status/assets/src/tabs/version-control/BetaOptInPanel.js"),l=n("./includes/modules/status/assets/src/tabs/version-control/VersionControlPanel.js");t.default=function(e){return wp.element.createElement(React.Fragment,null,wp.element.createElement(l.default,e),wp.element.createElement(r.default,e),wp.element.createElement(a.default,e))}}}]);
>>>>>>> Stashed changes
PK     ¥ŠU]§ùî°ö  ö  -  includes/modules/status/assets/css/status.cssnu „[µü¤        /*!
 * Plugin:	Rank Math - Status & Tools
 * URL:		https://rankmath.com/wordpress/plugin/seo-suite/
 * Name:	status.css
 */@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-auto-update-form .rank-math-notice{border:none}.rank-math-beta-optin-form .rank-math-button,.rank-math-auto-update-form .rank-math-button{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:145px}.rank-math-status-table{margin-top:20px}.rank-math-status-table tr th,.rank-math-status-table tr td{padding:10px}.rank-math-status-table thead tr th{color:#32373c}.rank-math-status-table thead tr th h2{font-size:14px;margin:0}.rank-math-status-table tbody tr td:first-child{width:33%}.rank-math-status-table .update_all_scores{display:block;font-size:13px;margin-top:10px;line-height:1.3}.rank-math-status-table .update_all_scores input{vertical-align:middle}.rank-math-tools-table.widefat{padding:0;border-color:#b5bfc9}.rank-math-tools-table.widefat tr:first-of-type th{border-radius:6px 0 0 0}.rank-math-tools-table.widefat tr:first-of-type td{border-radius:0 6px 0 0}.rank-math-tools-table.widefat tr:nth-child(odd){background:#f8f9fa}.rank-math-tools-table.widefat tr th,.rank-math-tools-table.widefat tr td{font-size:1.1em;font-weight:400;padding:2em;border-bottom:1px solid #b5bfc9}.rank-math-tools-table.widefat tr:last-of-type th,.rank-math-tools-table.widefat tr:last-of-type td{border-bottom:0}.rank-math-tools-table.widefat h4{margin:0 0 .825rem}.rank-math-panel{border-color:#c3c4c7}.rank-math-panel .components-panel__body{border-color:#c3c4c7}.rank-math-panel .components-panel__body>.components-panel__body-title{background:#f8f9fa}.rank-math-panel .components-panel__body-toggle.components-button{min-height:46px;padding:1em 1.5em;color:#2c3338;font-size:15px;font-weight:600}.rank-math-panel .components-panel__body-toggle.components-button svg{width:30px;height:30px;fill:#50575e}.rank-math-panel .components-panel__body-toggle.components-button:focus{-webkit-box-shadow:none;box-shadow:none;outline:2px solid #2271b1;outline-offset:-1px;color:#1d2327}.rank-math-panel .components-panel__row{margin:1em 8px 0}.copy-button-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.5rem;margin:2rem 0}.copy-button-wrapper .success{color:#007017}.error-log-info{margin-top:1rem}.rank-math-ui.status p.description{font-size:1rem}@media screen and (max-width: 782px){.rank-math-system-status .rank-math-table td{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;word-wrap:break-word}.rank-math-system-status .rank-math-table td:first-child{padding-bottom:0;font-weight:600}}.rank-math-import-export .components-tab-panel__tabs{-ms-flex-wrap:wrap;flex-wrap:wrap;border-bottom:1px solid #b5bfc9;border-radius:6px 6px 0 0;background:#f8f9fa}.rank-math-import-export .components-tab-panel__tabs-item{height:46px;padding:0 15px;border-right:1px solid #b5bfc9;color:#5b6065;font-size:.825rem}.rank-math-import-export .components-tab-panel__tabs-item .rm-icon{margin-right:6px;font-size:18px;font-weight:600;vertical-align:-4px}.rank-math-import-export .components-tab-panel__tabs-item:first-of-type{border-top-left-radius:6px}.rank-math-import-export .components-tab-panel__tabs-item::after{bottom:-1px;background:#fff;outline:none}.rank-math-import-export .components-tab-panel__tabs-item:hover,.rank-math-import-export .components-tab-panel__tabs-item.is-active{color:#069de3}.rank-math-import-export .components-tab-panel__tabs-item.is-active{background:#fff}.import-plugins footer button:first-child{margin-right:4px}.rank-math-export-form .rank-math-checkbox-list label{margin-left:4px;cursor:pointer}#rank-math-import-form .components-form-file-upload{margin:1em 0}#rank-math-import-form .components-form-file-upload input[type=file]{display:block !important}#rank-math-import-form .components-form-file-upload .components-button{display:none}#rank-math-import-form br{display:none}#rank-math-import-form label{font-size:14px}.rank-math-skeleton.rank-math-system-status .copy-button-wrapper::after{content:"";display:block;width:220px;height:38px;border-radius:3px}.rank-math-skeleton.rank-math-system-status .components-panel__body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1em 1.5em;background:#f8f9fa}.rank-math-skeleton.rank-math-system-status .components-panel__body::before,.rank-math-skeleton.rank-math-system-status .components-panel__body::after{content:"";display:block;height:15px;border-radius:16px}.rank-math-skeleton.rank-math-system-status .components-panel__body::after{width:20px}.rank-math-skeleton.rank-math-system-status .components-panel__body::before{width:100px}.rank-math-skeleton.rank-math-system-status .components-panel__body:nth-child(odd)::before{width:120px}.rank-math-skeleton.rank-math-system-status .copy-button-wrapper::after,.rank-math-skeleton.rank-math-system-status .components-panel__body::before,.rank-math-skeleton.rank-math-system-status .components-panel__body::after{background:rgba(0,0,0,.11);-webkit-animation:pulse 2s ease-in-out .5s infinite;animation:pulse 2s ease-in-out .5s infinite}body.rank-math_page_rank-math-status.rank-math-start-update-score{overflow:hidden}body.rank-math_page_rank-math-status.rank-math-start-update-score #wpadminbar{display:none}.rank-math-tools-wrap{width:100%;margin-bottom:-65px}footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:1rem}.rank-math-page .rank-math-breadcrumbs .divider{margin:0 8px}.wp-header-end+.notice{margin-top:25px;margin-right:40px}PK     ¥ŠU]/ »öÁ  Á  /  includes/modules/status/class-system-status.phpnu „[µü¤        <?php
/**
 * This class handles the content in Status & Tools > System Status.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Google\Authentication;
use RankMath\Admin\Admin_Helper;
use RankMath\Google\Permissions;

defined( 'ABSPATH' ) || exit;

/**
 * System_Status class.
 */
class System_Status {

	/**
	 * Get localized JSON data based on the Page view.
	 */
	public static function get_json_data() {
		global $wpdb;
		$info = [];

		$plan             = Admin_Helper::get_registration_data();
		$tokens           = Authentication::tokens();
		$modules          = Helper::get_active_modules();
		$permissions      = Permissions::get_status();
		$permissions_data = '';

		if ( ! empty( $permissions ) ) {
			$permissions_data = implode(
				', ',
				array_map(
					fn( $k, $v ) => "$k: $v",
					array_keys( $permissions ),
					$permissions
				)
			);
		}

		$rankmath = [
			'label'  => esc_html__( 'Rank Math', 'seo-by-rank-math' ),
			'fields' => [
				'version'          => [
					'label' => esc_html__( 'Version', 'seo-by-rank-math' ),
					'value' => get_option( 'rank_math_version' ),
				],
				'database_version' => [
					'label' => esc_html__( 'Database version', 'seo-by-rank-math' ),
					'value' => get_option( 'rank_math_db_version' ),
				],
				'plugin_plan'      => [
					'label' => esc_html__( 'Plugin subscription plan', 'seo-by-rank-math' ),
					'value' => isset( $plan['plan'] ) ? \ucwords( $plan['plan'] ) : esc_html__( 'Free', 'seo-by-rank-math' ),
				],
				'active_modules'   => [
					'label' => esc_html__( 'Active modules', 'seo-by-rank-math' ),
					'value' => empty( $modules ) ? esc_html__( '(none)', 'seo-by-rank-math' ) : join( ', ', $modules ),
				],
				'refresh_token'    => [
					'label' => esc_html__( 'Google Refresh token', 'seo-by-rank-math' ),
					'value' => empty( $tokens['refresh_token'] ) ? esc_html__( 'No token', 'seo-by-rank-math' ) : esc_html__( 'Token exists', 'seo-by-rank-math' ),
				],
				'permissions'      => [
					'label' => esc_html__( 'Google Permission', 'seo-by-rank-math' ),
					'value' => $permissions_data,
				],
			],
		];

		$database_tables = DB_Helper::get_results(
			$wpdb->prepare(
				"SELECT
				table_name AS 'name'
				FROM information_schema.TABLES
				WHERE table_schema = %s
				AND table_name LIKE %s
				ORDER BY name ASC;",
				DB_NAME,
				'%rank\\_math%'
			)
		);

		$tables = [];
		foreach ( $database_tables as $table ) {
			$name            = \str_replace( $wpdb->prefix, '', $table->name );
			$tables[ $name ] = true;
		}

		$should_exist = [
			'rank_math_404_logs'                  => esc_html__( 'Database Table: 404 Log', 'seo-by-rank-math' ),
			'rank_math_redirections'              => esc_html__( 'Database Table: Redirection', 'seo-by-rank-math' ),
			'rank_math_redirections_cache'        => esc_html__( 'Database Table: Redirection Cache', 'seo-by-rank-math' ),
			'rank_math_internal_links'            => esc_html__( 'Database Table: Internal Link', 'seo-by-rank-math' ),
			'rank_math_internal_meta'             => esc_html__( 'Database Table: Internal Link Meta', 'seo-by-rank-math' ),
			'rank_math_analytics_gsc'             => esc_html__( 'Database Table: Google Search Console', 'seo-by-rank-math' ),
			'rank_math_analytics_objects'         => esc_html__( 'Database Table: Flat Posts', 'seo-by-rank-math' ),
			'rank_math_analytics_ga'              => esc_html__( 'Database Table: Google Analytics', 'seo-by-rank-math' ),
			'rank_math_analytics_adsense'         => esc_html__( 'Database Table: Google AdSense', 'seo-by-rank-math' ),
			'rank_math_analytics_keyword_manager' => esc_html__( 'Database Table: Keyword Manager', 'seo-by-rank-math' ),
			'rank_math_analytics_inspections'     => esc_html__( 'Database Table: Inspections', 'seo-by-rank-math' ),
		];

		if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) {
			unset(
				$should_exist['rank_math_analytics_ga'],
				$should_exist['rank_math_analytics_adsense'],
				$should_exist['rank_math_analytics_keyword_manager']
			);
		}

		foreach ( $should_exist as $name => $label ) {
			$rankmath['fields'][ $name ] = [
				'label' => $label,
				'value' => isset( $tables[ $name ] ) ? self::get_table_size( $name ) : esc_html__( 'Not found', 'seo-by-rank-math' ),
			];
		}

		// Core debug data.
		if ( ! class_exists( 'WP_Debug_Data' ) ) {
			require_once ABSPATH . 'wp-admin/includes/class-wp-debug-data.php'; // @phpstan-ignore-line
		}

		if ( ! function_exists( 'got_url_rewrite' ) ) {
			require_once ABSPATH . 'wp-admin/includes/misc.php'; // @phpstan-ignore-line
		}

		if ( ! function_exists( 'get_home_path' ) ) {
			require_once ABSPATH . 'wp-admin/includes/file.php'; // @phpstan-ignore-line
		}

		if ( false === function_exists( 'get_core_updates' ) ) {
			require_once ABSPATH . 'wp-admin/includes/update.php'; // @phpstan-ignore-line
		}

		if ( ! class_exists( 'WP_Site_Health' ) ) {
			require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php'; // @phpstan-ignore-line
		}

		$rankmath_data = apply_filters( 'rank_math/status/rank_math_info', $rankmath );
		$core_data     = \WP_Debug_Data::debug_data();

		// Keep only relevant data.
		$core_data = array_intersect_key(
			$core_data,
			array_flip(
				[
					'wp-core',
					'wp-dropins',
					'wp-active-theme',
					'wp-parent-theme',
					'wp-mu-plugins',
					'wp-plugins-active',
					'wp-server',
					'wp-database',
					'wp-constants',
					'wp-filesystem',
				]
			)
		);

		$system_info = [ 'rank-math' => $rankmath_data ] + $core_data;
		return array_merge(
			[
				'systemInfo'     => $system_info,
				'systemInfoCopy' => esc_attr( \WP_Debug_Data::format( $system_info, 'debug' ) ),
			],
			\RankMath\Status\Error_Log::get_error_log_localized_data()
		);
	}

	/**
	 * Get Table size.
	 *
	 * @param string $table Table name.
	 *
	 * @return int Table size.
	 */
	public static function get_table_size( $table ) {
		global $wpdb;
		$size = (int) DB_Helper::get_var( "SELECT SUM((data_length + index_length)) AS size FROM information_schema.TABLES WHERE table_schema='" . $wpdb->dbname . "' AND (table_name='" . $wpdb->prefix . $table . "')" );
		return size_format( $size );
	}
}
PK     ¥ŠU]ŒÛ      !  includes/modules/status/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU],X‡’    8  includes/modules/status/class-import-export-settings.phpnu „[µü¤        <?php
/**
 * The Import Export Settings Class
 *
 * @since      1.0.240
 * @package    RankMath
 * @subpackage RankMath\Admin
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use WP_REST_Response;
use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Status\Backup;

defined( 'ABSPATH' ) || exit;

/**
 * Import_Export_Settings class.
 */
class Import_Export_Settings {
	/**
	 * Handle export.
	 */
	public static function export() {
		$panels = Param::post( 'panels', [], FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );

		return wp_json_encode( self::get_export_data( $panels ) );
	}

	/**
	 * Handle import.
	 */
	public static function import() {
		$file = Helper::handle_file_upload();
		if ( isset( $file['error'] ) ) {
			return [
				'error' => esc_html__( 'Settings could not be imported:', 'seo-by-rank-math' ) . ' ' . $file['error'],
			];
		}

		if ( ! isset( $file['file'] ) ) {
			return [
				'error' => esc_html__( 'Settings could not be imported: Upload failed.', 'seo-by-rank-math' ),
			];
		}

		// Parse Options.
		$wp_filesystem = Helper::get_filesystem();
		if ( is_null( $wp_filesystem ) || ! Helper::is_filesystem_direct() ) {
			return [
				'error' => esc_html__( 'Uploaded file could not be read.', 'seo-by-rank-math' ),
			];
		}

		$settings = $wp_filesystem->get_contents( $file['file'] );
		$settings = json_decode( $settings, true );

		\wp_delete_file( $file['file'] );

		if ( is_array( $settings ) && self::do_import_data( $settings ) ) {
			return [
				'success' => esc_html__( 'Settings successfully imported. Your old configuration has been saved as a backup.', 'seo-by-rank-math' ),
			];
		}

		return [
			'error' => esc_html__( 'No settings found to be imported.', 'seo-by-rank-math' ),
		];
	}

	/**
	 * Does import data.
	 *
	 * @param  array $data           Import data.
	 * @param  bool  $suppress_hooks Suppress hooks or not.
	 * @return bool
	 */
	public static function do_import_data( array $data, $suppress_hooks = false ) {
		self::run_import_hooks( 'pre_import', $data, $suppress_hooks );
		Backup::create_backup();

		// Import options.
		$down = self::set_options( $data );

		// Import capabilities.
		if ( ! empty( $data['role-manager'] ) ) {
			$down = true;
			Helper::set_capabilities( $data['role-manager'] );
		}

		// Import redirections.
		if ( ! empty( $data['redirections'] ) ) {
			$down = true;
			self::set_redirections( $data['redirections'] );
		}

		self::run_import_hooks( 'after_import', $data, $suppress_hooks );

		return $down;
	}

	/**
	 * Set options from data.
	 *
	 * @param array $data An array of data.
	 */
	private static function set_options( $data ) {
		$set  = false;
		$hash = [
			'modules' => 'rank_math_modules',
			'general' => 'rank-math-options-general',
			'titles'  => 'rank-math-options-titles',
			'sitemap' => 'rank-math-options-sitemap',
		];

		foreach ( $hash as $key => $option_key ) {
			if ( ! empty( $data[ $key ] ) ) {
				$set = true;
				update_option( $option_key, $data[ $key ] );
			}
		}

		return $set;
	}

	/**
	 * Set redirections.
	 *
	 * @param array $redirections An array of redirections to import.
	 */
	private static function set_redirections( $redirections ) {
		foreach ( $redirections as $key => $redirection ) {
			$matched = \RankMath\Redirections\DB::match_redirections_source( $redirection['sources'] );
			if ( ! empty( $matched ) || ! is_serialized( $redirection['sources'] ) ) {
				continue;
			}

			$sources = unserialize( trim( $redirection['sources'] ), [ 'allowed_classes' => false ] ); // phpcs:ignore -- We are going to move Redirections sources to JSON, that will fix this issue.
			if ( ! is_array( $sources ) || $sources instanceof \__PHP_Incomplete_Class ) {
				continue;
			}

			\RankMath\Redirections\DB::add(
				[
					'url_to'      => $redirection['url_to'],
					'sources'     => self::sanitize_sources( $sources ),
					'header_code' => $redirection['header_code'],
					'hits'        => $redirection['hits'],
					'created'     => $redirection['created'],
					'updated'     => $redirection['updated'],
				]
			);
		}
	}

	/**
	 * Sanitize the redirection source before storing it.
	 *
	 * @param array $sources An array of redirection sources.
	 */
	private static function sanitize_sources( $sources ) {
		$data = [];
		foreach ( $sources as $source ) {
			if ( empty( $source['pattern'] ) ) {
				continue;
			}

			$data[] = [
				'ignore'     => ! empty( $source['ignore'] ) ? 'case' : '',
				'pattern'    => wp_strip_all_tags( $source['pattern'], true ),
				'comparison' => in_array( $source['comparison'], [ 'exact', 'contains', 'start', 'end', 'regex' ], true ) ? $source['comparison'] : 'exact',
			];
		}

		return $data;
	}

	/**
	 * Run import hooks
	 *
	 * @param string $hook     Hook to fire.
	 * @param array  $data     Import data.
	 * @param bool   $suppress Suppress hooks or not.
	 */
	private static function run_import_hooks( $hook, $data, $suppress ) {
		if ( ! $suppress ) {
			/**
			 * Fires while importing settings.
			 *
			 * @since 0.9.0
			 *
			 * @param array $data Import data.
			 */
			do_action( 'rank_math/import/settings/' . $hook, $data );
		}
	}

	/**
	 * Gets export data.
	 *
	 * @param array $panels Which panels to export. All panels will be exported if this param is empty.
	 * @return array
	 */
	public static function get_export_data( array $panels = [] ) {
		if ( ! $panels ) {
			$panels = [ 'general', 'titles', 'sitemap', 'role-manager', 'redirections' ];
		}

		if ( ! \RankMath\Helpers\DB::check_table_exists( 'rank_math_redirections' ) ) {
			$redirections_index = array_search( 'redirections', $panels, true );
			if ( false !== $redirections_index ) {
				unset( $panels[ $redirections_index ] );
			}
		}

		$settings = rank_math()->settings->all_raw();
		$data     = [];
		foreach ( $panels as $panel ) {
			if ( isset( $settings[ $panel ] ) ) {
				$data[ $panel ] = $settings[ $panel ];
				continue;
			}

			if ( 'role-manager' === $panel ) {
				$data['role-manager'] = Helper::get_roles_capabilities();
			}

			if ( 'redirections' === $panel ) {
				$items = \RankMath\Redirections\DB::get_redirections( [ 'limit' => 1000 ] );

				$data['redirections'] = $items['redirections'];
			}

			$data = apply_filters( 'rank_math/export/settings', $data, $panel );
		}

		$data['modules'] = get_option( 'rank_math_modules', [] );

		return $data;
	}
}
PK     ¥ŠU]Þuäïü  ü  &  includes/modules/status/views/main.phpnu „[µü¤        <?php
/**
 * Status & Tools main view file.
 *
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 * @license    GPL-2.0+
 * @link       https://rankmath.com/wordpress/plugin/seo-suite/
 * @copyright  2019 Rank Math
 */

defined( 'ABSPATH' ) || exit;

use RankMath\Rollback_Version;

// Header.
if ( Rollback_Version::should_rollback() ) {
	$rollback = new Rollback_Version();
	$rollback->rollback();
	return;
}
?>
<div id="rank-math-tools-wrapper"></div>
PK     ¥ŠU]ŒÛ      '  includes/modules/status/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]¡)™9©  ©  &  includes/modules/status/class-rest.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.71
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Controller;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Rest class.
 */
class Rest extends WP_REST_Controller {
	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE . '/status';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/getViewData',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'get_view_data' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
			]
		);
		register_rest_route(
			$this->namespace,
			'/updateViewData',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'update_view_data' ],
				'permission_callback' => [ '\\RankMath\\Rest\\Rest_Helper', 'can_manage_options' ],
			]
		);
		register_rest_route(
			$this->namespace,
			'/importSettings',
			[
				'methods'             => 'POST',
				'callback'            => [ '\\RankMath\\Status\\Import_Export_Settings', 'import' ],
				'permission_callback' => [ $this, 'has_import_export_permission' ],
			]
		);
		register_rest_route(
			$this->namespace,
			'/exportSettings',
			[
				'methods'             => 'POST',
				'callback'            => [ '\\RankMath\\Status\\Import_Export_Settings', 'export' ],
				'permission_callback' => [ $this, 'has_import_export_permission' ],
			]
		);
		register_rest_route(
			$this->namespace,
			'/runBackup',
			[
				'methods'             => 'POST',
				'callback'            => [ $this, 'run_backup' ],
				'permission_callback' => [ $this, 'has_import_export_permission' ],
			]
		);
	}

	/**
	 * Rest permission_callback method to check if user has the capability to import/export the data.
	 */
	public function has_import_export_permission() {
		if ( ! Helper::has_cap( 'general' ) ) {
			return new WP_Error(
				'rest_cannot_access',
				__( 'Sorry, you are not authorized to Import/Export the settings.', 'seo-by-rank-math' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Run Backup.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return int Credits.
	 */
	public function run_backup( WP_REST_Request $request ) {
		$action = $request->get_param( 'action' );
		if ( ! in_array( $action, [ 'create', 'delete', 'restore' ], true ) ) {
			return new WP_REST_Response(
				[
					'type'    => 'error',
					'message' => esc_html__( 'Invalid action selected.', 'seo-by-rank-math' ),
				]
			);
		}

		$key    = $request->get_param( 'key' );
		$method = "{$action}_backup";
		$data   = Backup::$method( $key );
		return new WP_REST_Response(
			[
				'type'    => $data['type'],
				'message' => $data['message'],
				'backups' => isset( $data['backups'] ) ? $data['backups'] : false,
			]
		);
	}

	/**
	 * Get View data
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return array View Data.
	 */
	public function get_view_data( WP_REST_Request $request ) {
		$view = $request->get_param( 'activeTab' );
		$hash = [
			'version_control' => '\RankMath\Version_Control',
			'tools'           => '\RankMath\Tools\Database_Tools',
			'status'          => '\RankMath\Status\System_Status',
			'import_export'   => '\RankMath\Admin\Import_Export',
		];
		if ( ! isset( $hash[ $view ] ) ) {
			return [];
		}

		return apply_filters(
			"rank_math/status/$view/json_data",
			$hash[ $view ]::get_json_data()
		);
	}

	/**
	 * Update Version Control data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 */
	public function update_view_data( WP_REST_Request $request ) {
		$panel  = $request->get_param( 'panel' );
		$method = "update_{$panel}";
		return $this->$method( $request );
	}

	/**
	 * Update the Auto Update panel data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 */
	private function update_auto_update( $request ) {
		$enable_auto_update = $request->get_param( 'autoUpdate' );
		$enable_auto_update = $enable_auto_update ? 'on' : 'off';
		Helper::toggle_auto_update_setting( $enable_auto_update );

		$enable_notifications = (bool) $request->get_param( 'updateNotificationEmail' );
		$settings             = get_option( 'rank-math-options-general', [] );

		$settings['update_notification_email'] = $enable_notifications;
		update_option( 'rank-math-options-general', $settings );

		return true;
	}

	/**
	 * Update the Auto Update panel data.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 */
	private function update_beta_optin( $request ) {
		$beta_optin = $request->get_param( 'betaOptin' );

		$settings               = get_option( 'rank-math-options-general', [] );
		$settings['beta_optin'] = $beta_optin;
		update_option( 'rank-math-options-general', $settings );

		return true;
	}
}
PK     ¥ŠU]Q>kî�
  �
  +  includes/modules/status/class-error-log.phpnu „[µü¤        <?php
/**
 * Locate, retrieve, and display the server's error log.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use RankMath\Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Error_Log class.
 */
class Error_Log {

	/**
	 * Log path.
	 *
	 * @var string|bool
	 */
	private static $log_path = null;

	/**
	 * File content.
	 *
	 * @var array
	 */
	private static $contents = null;

	/**
	 * Get Error Log JSON data to be used on the System Status page.
	 *
	 * @return array Error Log data.
	 */
	public static function get_error_log_localized_data() {
		$error_log_load_error = self::error_log_load_error();
		// Early bail if Error log file could not be loaded.
		if ( $error_log_load_error ) {
			return [
				'errorLogError' => $error_log_load_error,
			];
		}

		return [
			'errorLog'     => self::get_error_log_rows( 100 ),
			'errorLogPath' => esc_html( basename( self::get_log_path() ) ),
			'errorLogSize' => is_array( self::$contents ) ? esc_html( Str::human_number( strlen( join( '', self::$contents ) ) ) ) : '0',
		];
	}

	/**
	 * Get last x rows from the error log.
	 *
	 * @param  integer $limit Max number of rows to return.
	 *
	 * @return string[]       Array of rows of text.
	 */
	private static function get_error_log_rows( $limit = -1 ) {
		if ( is_null( self::$contents ) ) {
			$wp_filesystem  = Helper::get_filesystem();
			self::$contents = $wp_filesystem->get_contents_array( self::get_log_path() );
		}

		if ( -1 === $limit ) {
			return join( '', self::$contents );
		}

		return is_array( self::$contents ) ? join( '', array_slice( self::$contents, -$limit ) ) : '';
	}

	/**
	 * Show error if the log cannot be loaded.
	 */
	private static function error_log_load_error() {
		$log_file      = self::get_log_path();
		$wp_filesystem = Helper::get_filesystem();

		if (
			empty( $log_file ) ||
			is_null( $wp_filesystem ) ||
			! Helper::is_filesystem_direct() ||
			! $wp_filesystem->exists( $log_file ) ||
			! $wp_filesystem->is_readable( $log_file )
		) {
			return esc_html__( 'The error log cannot be retrieved.', 'seo-by-rank-math' );
		}

		// Error log must be smaller than 100 MB.
		$size = $wp_filesystem->size( $log_file );
		if ( $size > 100000000 ) {
			return esc_html__( 'The error log cannot be retrieved: Error log file is too large.', 'seo-by-rank-math' );
		}

		return false;
	}

	/**
	 * Get error log file location.
	 *
	 * @return string Path to log file.
	 */
	private static function get_log_path() {
		if ( is_null( self::$log_path ) ) {
			self::$log_path = ini_get( 'error_log' );
		}

		return self::$log_path;
	}
}
PK     ¥ŠU];‘bö½	  ½	  (  includes/modules/status/class-status.phpnu „[µü¤        <?php
/**
 * The Status & Tools internal module.
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Status;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Module\Base;
use RankMath\Admin\Page;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Status class.
 */
class Status extends Base {

	use Hooker;

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * Module page.
	 *
	 * @var object
	 */
	public $page;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'rest_api_init', 'init_rest_api' );
		if ( Helper::is_heartbeat() ) {
			return;
		}

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'status',
				'directory' => $directory,
			]
		);

		parent::__construct();
	}

	/**
	 * Load the REST API endpoints.
	 */
	public function init_rest_api() {
		$rest = new Rest();
		$rest->register_routes();
	}

	/**
	 * Register admin page.
	 */
	public function register_admin_page() {
		$uri = untrailingslashit( plugin_dir_url( __FILE__ ) );

		$this->page = new Page(
			'rank-math-status',
			esc_html__( 'Status & Tools', 'seo-by-rank-math' ),
			[
				'position' => 70,
				'parent'   => 'rank-math',
				'classes'  => [ 'rank-math-page' ],
				'render'   => $this->directory . '/views/main.php',
				'assets'   => [
					'styles'  => [
						'wp-components'    => '',
						'rank-math-common' => '',
						'rank-math-status' => $uri . '/assets/css/status.css',
					],
					'scripts' => [
						'lodash'               => '',
						'rank-math-components' => '',
						'rank-math-dashboard'  => '',
						'rank-math-status'     => $uri . '/assets/js/status.js',
					],
					'json'    => $this->get_json_data( Param::get( 'view', 'version_control' ) ),
				],
			]
		);
	}

	/**
	 * Get localized JSON data based on the Page view.
	 *
	 * @param string $view Current Page view.
	 */
	private function get_json_data( $view ) {
		return [
			'isAdvancedMode'           => Helper::is_advanced_mode(),
			'isPluginActiveForNetwork' => Helper::is_plugin_active_for_network(),
			'canUser'                  => [
				'manageOptions'  => current_user_can( 'manage_options' ),
				'setupNetwork'   => current_user_can( 'setup_network' ),
				'installPlugins' => current_user_can( 'install_plugins' ),
			],
		];
	}
}
PK     ¥ŠU]0"ºÕ        includes/modules/llms/index.phpnu „[µü¤        <?php // Silence is golden.PK     ¥ŠU]Lj6‹  ‹  !  includes/modules/llms/options.phpnu „[µü¤        <?php
/**
 * The llms.txt settings.
 *
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'llms_info',
		'type'    => 'notice',
		'what'    => 'info',
		'classes' => 'nob nopt rank-math-notice',
		'content' => sprintf(
			// Translators: placeholder is the llms.txt file URL.
			__( 'Your <code>llms.txt</code> file is available at <a href="%1$s" target="_blank">%2$s</a>.', 'seo-by-rank-math' ),
			esc_url( home_url( '/llms.txt' ) ),
			esc_html( home_url( '/llms.txt' ) )
		),
	]
);

$post_types = Helper::choices_post_types();
if ( isset( $post_types['attachment'] ) ) {
	unset( $post_types['attachment'] );
}

$cmb->add_field(
	[
		'id'      => 'llms_post_types',
		'name'    => esc_html__( 'Select Post Types', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Select the post types to be included in the llms.txt file.', 'seo-by-rank-math' ),
		'type'    => 'multicheck',
		'options' => $post_types,
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'llms_taxonomies',
		'name'    => esc_html__( 'Select Taxonomies', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Select the taxonomies to be included in the llms.txt file.', 'seo-by-rank-math' ),
		'type'    => 'multicheck',
		'options' => wp_list_pluck( Helper::get_accessible_taxonomies(), 'label', 'name' ),
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'         => 'llms_limit',
		'name'       => esc_html__( 'Posts/Terms Limit', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Maximum number of links to include for each post type.', 'seo-by-rank-math' ),
		'type'       => 'text',
		'classes'    => 'small-text',
		'default'    => 50,
		'attributes' => [
			'type' => 'number',
			'min'  => 1,
		],
	]
);

$cmb->add_field(
	[
		'id'         => 'llms_extra_content',
		'name'       => esc_html__( 'Additional Content', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Add any extra text or links you\'d like to include in your llms.txt file manually.', 'seo-by-rank-math' ),
		'type'       => 'textarea',
		'attributes' => [ 'rows' => 6 ],
	]
);
PK     ¥ŠU]ùíÆH"  "  (  includes/modules/llms/class-llms-txt.phpnu „[µü¤        <?php
/**
 * The llms.txt module.
 *
 * @package    RankMath
 * @subpackage RankMath\LLMS
 */

namespace RankMath\LLMS;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Arr;
use RankMath\Sitemap\Sitemap;
use RankMath\Sitemap\Router;
use RankMath\Helpers\Url;
use WP_Query;

defined( 'ABSPATH' ) || exit;

/**
 * LLMS_Txt class.
 */
class LLMS_Txt {
	use Hooker;

	/**
	 * Class constructor.
	 *
	 * Registers hooks and filters for the llms.txt module.
	 */
	public function __construct() {
		$this->action( 'init', 'add_rewrite_rule' );
		$this->action( 'template_redirect', 'maybe_serve_llms_txt' );
		$this->filter( 'rank_math/settings/general', 'add_settings' );
		$this->action( 'wp_loaded', 'remove_canonical_redirect' );
	}

	/**
	 * Remove the canonical redirect for the llms.txt file.
	 *
	 * @hook wp_loaded
	 * @return void
	 */
	public function remove_canonical_redirect() {
		if ( strpos( Url::get_current_url(), '/llms.txt' ) !== false ) {
			remove_filter( 'template_redirect', 'redirect_canonical' );
		}
	}

	/**
	 * Add the llms.txt settings tab to the General settings panel.
	 *
	 * @hook rank_math/settings/general
	 *
	 * @param array $tabs Option panel tabs.
	 * @return array Modified tabs array with llms.txt tab added.
	 */
	public function add_settings( $tabs ) {
		Arr::insert(
			$tabs,
			[
				'llms' => [
					'icon'    => 'rm-icon rm-icon-bot',
					'title'   => esc_html__( 'Edit llms.txt', 'seo-by-rank-math' ),
					'desc'    => esc_html__( 'Configure your llms.txt file for custom crawling/indexing rules.', 'seo-by-rank-math' ),
					'file'    => __DIR__ . '/options.php',
					'classes' => 'rank-math-advanced-option',
					'json'    => [
						'llmsUrl' => esc_url( home_url( '/llms.txt' ) ),
					],
				],
			],
			5
		);
		return $tabs;
	}

	/**
	 * Add the rewrite rule and query var for llms.txt.
	 *
	 * @hook init
	 * @return void
	 */
	public function add_rewrite_rule() {
		add_rewrite_rule( '^llms\.txt$', 'index.php?llms_txt=1', 'top' );
		add_rewrite_tag( '%llms_txt%', '1' );
	}

	/**
	 * Serve the llms.txt file if the endpoint is hit.
	 *
	 * @hook template_redirect
	 * @return void
	 */
	public function maybe_serve_llms_txt() {
		if ( intval( get_query_var( 'llms_txt' ) ) !== 1 ) {
			return;
		}

		if ( substr( Url::get_current_url(), -1 ) === '/' ) {
			wp_safe_redirect( home_url( '/llms.txt' ) );
			exit;
		}

		$this->output();
		exit;
	}

	/**
	 * Output the llms.txt file content in Markdown format.
	 *
	 * @action rank_math/llms_txt/before_output Fires before llms.txt output is sent.
	 * @action rank_math/llms_txt/after_output Fires after llms.txt output is sent.
	 * @filter rank_math/llms_txt/posts_query_args Filter WP_Query args for posts.
	 * @filter rank_math/llms_txt/posts Filter post IDs to include.
	 * @filter rank_math/llms_txt/terms Filter term IDs to include.
	 * @filter rank_math/llms_txt/extra_content Filter extra content output.
	 *
	 * @return void
	 */
	public function output() {
		if ( headers_sent() ) {
			return;
		}

		header( 'Content-Type: text/plain; charset=utf-8' );
		header( 'X-Robots-Tag: noindex, nofollow', true );
		/**
		 * Fires before the llms.txt output is sent to the browser.
		 *
		 * @since 1.0.250
		 */
		$this->do_action( 'llms_txt/before_output' );

		$limit = absint( Helper::get_settings( 'general.llms_limit', 100 ) );
		$this->add_header_content();
		$this->add_post_types_data( $limit );
		$this->add_taxonomies_data( $limit );
		$this->add_extra_content();

		/**
		 * Fires after the llms.txt output is sent to the browser.
		 *
		 * @since 1.0.250
		 */
		$this->do_action( 'llms_txt/after_output' );
	}

	/**
	 * Adds header content to the llms.txt output.
	 *
	 * @return void
	 */
	private function add_header_content() {
		$site_title  = Helper::get_settings( 'titles.knowledgegraph_name', get_bloginfo( 'name' ) );
		$site_desc   = Helper::get_settings( 'titles.organization_description', get_bloginfo( 'description' ) );
		$site_title .= $site_desc ? ': ' . $site_desc : '';

		$this->output_line( 'Generated by Rank Math SEO, this is an llms.txt file designed to help LLMs better understand and index this website.' );
		$this->output_line( '' );
		$this->output_line( '# ' . esc_html( $site_title ) );

		if ( ! Helper::is_module_active( 'sitemap' ) ) {
			return;
		}

		$this->output_line( '' );
		$sitemap_url = Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' );
		$this->output_line( '## Sitemaps' );
		$this->output_line( '[XML Sitemap](' . esc_url( $sitemap_url ) . '): Includes all crawlable and indexable pages.' );
		// Add an extra blank line after the header content.
		$this->output_line( '' );
	}

	/**
	 * Adds post type data to the llms.txt output.
	 *
	 * @param int $limit The maximum number of posts to include per post type.
	 * @return void
	 */
	private function add_post_types_data( $limit ) {
		$post_types = Helper::get_settings( 'general.llms_post_types', [] );
		if ( empty( $post_types ) ) {
			return;
		}

		foreach ( $post_types as $post_type ) {
			$args = [
				'post_type'      => $post_type,
				'post_status'    => 'publish',
				'posts_per_page' => $limit,
				'no_found_rows'  => true,
			];

			/**
			 * Filter the WP_Query arguments used to fetch posts for llms.txt.
			 *
			 * @since 1.0.250
			 * @param array $args The WP_Query arguments.
			 * @return array Modified WP_Query arguments.
			 */
			$args  = $this->do_filter( 'llms_txt/posts_query_args', $args );
			$query = new \WP_Query( $args );

			/**
			 * Filter the list of post IDs to be included in llms.txt for a post type.
			 *
			 * @since 1.0.250
			 * @param array $posts List of posts.
			 * @param array $args     The WP_Query arguments.
			 * @return array Modified list of post IDs.
			 */
			$posts = $this->do_filter( 'llms_txt/posts', $query->posts, $args );
			if ( empty( $posts ) ) {
				continue;
			}

			$label = get_post_type_object( $post_type )->labels->name;
			$this->output_line( '## ' . esc_html( $label ) );

			foreach ( $posts as $object ) {
				if ( ! Helper::is_post_indexable( $object ) ) {
					continue;
				}

				$title                = get_the_title( $object );
				$link                 = get_permalink( $object );
				$object->post_content = do_shortcode( $object->post_content );
				$desc                 = wp_strip_all_tags( Helper::replace_vars( '%excerpt%', $object ) );

				$this->output_line(
					$desc
						? '- [' . esc_html( $title ) . '](' . esc_url( $link ) . '): ' . esc_html( $desc )
						: '- [' . esc_html( $title ) . '](' . esc_url( $link ) . ')'
				);
			}
			$this->output_line( '' );
		}
	}

	/**
	 * Adds taxonomy data to the llms.txt output.
	 *
	 * @param int $limit The maximum number of terms to include per taxonomy.
	 * @return void
	 */
	private function add_taxonomies_data( $limit ) {
		$taxonomies = Helper::get_settings( 'general.llms_taxonomies', [] );
		if ( empty( $taxonomies ) ) {
			return;
		}

		foreach ( $taxonomies as $taxonomy ) {
			$tax_obj = get_taxonomy( $taxonomy );
			if ( ! $tax_obj ) {
				continue;
			}

			$terms = get_terms(
				[
					'taxonomy'   => $taxonomy,
					'hide_empty' => true,
					'number'     => $limit,
				]
			);

			/**
			 * Filter the list of terms to be included in llms.txt for a taxonomy.
			 *
			 * @since 1.0.250
			 * @param array  $terms    List of terms.
			 * @param string $taxonomy Taxonomy name.
			 * @return array Modified list of term IDs.
			 */
			$terms = $this->do_filter( 'llms_txt/terms', $terms, $taxonomy );
			if ( empty( $terms ) ) {
				continue;
			}

			$label = $tax_obj->labels->name;
			$this->output_line( '## ' . esc_html( $label ) );
			foreach ( $terms as $term ) {
				if ( $term && Helper::is_term_indexable( $term ) ) {
					$name = $term->name;
					$link = get_term_link( $term );
					$this->output_line( '- [' . esc_html( $name ) . '](' . esc_url( $link ) . ')' );
				}
			}
			$this->output_line( '' );
		}
	}

	/**
	 * Adds extra content to the end of the llms.txt output.
	 *
	 * @return void
	 */
	private function add_extra_content() {
		/**
		 * Filter the extra content output at the end of llms.txt.
		 *
		 * @since 1.0.250
		 * @param string $extra The extra content string.
		 * @return string Modified extra content.
		 */
		$extra = $this->do_filter( 'llms_txt/extra_content', Helper::get_settings( 'general.llms_extra_content', '' ) );
		if ( ! empty( $extra ) ) {
			$this->output_line( esc_html( str_replace( "\n", "\n", $extra ) ) );
		}
	}

	/**
	 * Outputs a line with a newline character (\n).
	 *
	 * @param string $content The content to output.
	 * @return void
	 */
	private function output_line( $content ) {
		echo esc_html( $content ) . "\n";
	}
}
PK     ¥ŠU]7´•  •  0  includes/modules/sitemap/class-sitemap-index.phpnu „[µü¤        <?php
/**
 * The sitemap index runner class.
 *
 * @since      1.0.42
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap;

use RankMath\Runner;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Sitemap Index class.
 */
class Sitemap_Index implements Runner {

	use Hooker;

	/**
	 * The hooks.
	 */
	public function hooks() {
		$this->filter( 'robots_txt', 'add_sitemap_directive', 0, 2 );
		$this->filter( 'redirect_canonical', 'redirect_canonical' );
	}

	/**
	 * Adds the sitemap index to robots.txt.
	 *
	 * @param string $output    robots.txt output.
	 * @param bool   $is_public Whether the site is public or not.
	 *
	 * @return string robots.txt output.
	 */
	public function add_sitemap_directive( $output, $is_public ) {
		if (
			'0' === $is_public ||
			Str::contains( 'Sitemap:', $output ) ||
			Str::contains( 'sitemap:', $output )
		) {
			return $output;
		}

		$sitemap_url = esc_url( Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' ) );
		return $output . "\nSitemap: {$sitemap_url}\n";
	}

	/**
	 * Stop trailing slashes on `sitemap.xml` URLs.
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 *
	 * @param string $redirect The redirect URL currently determined.
	 *
	 * @return boolean|string $redirect
	 */
	public function redirect_canonical( $redirect ) {
		if ( get_query_var( 'sitemap' ) || get_query_var( 'xsl' ) ) {
			return false;
		}

		return $redirect;
	}
}
PK     ¥ŠU]›ó(°p6  p6  /  includes/modules/sitemap/class-image-parser.phpnu „[µü¤        <?php
/**
 * Parse images from a post.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use WP_Query;
use DOMDocument;
use RankMath\Helper;
use RankMath\Helpers\Attachment;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;
use RankMath\Helpers\Arr;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Image_Parser class.
 */
class Image_Parser {

	use Hooker;

	/**
	 * Holds the `home_url()` value to speed up loops.
	 *
	 * @var string
	 */
	protected $home_url = '';

	/**
	 * Holds site URL hostname.
	 *
	 * @var string
	 */
	protected $host = '';

	/**
	 * Holds site URL protocol.
	 *
	 * @var string
	 */
	protected $scheme = 'http';

	/**
	 * Cached set of attachments for multiple posts.
	 *
	 * @var array
	 */
	protected $attachments = [];

	/**
	 * Holds blog charset value for use in DOM parsing.
	 *
	 * @var string
	 */
	protected $charset = 'UTF-8';

	/**
	 * Hold post.
	 *
	 * @var object
	 */
	private $post = null;

	/**
	 * Hold parsed images data.
	 *
	 * @var array
	 */
	private $images = [];

	/**
	 * Set up URL properties for reuse.
	 */
	public function __construct() {
		$this->home_url = home_url();
		$parsed_home    = wp_parse_url( $this->home_url );

		if ( ! empty( $parsed_home['host'] ) ) {
			$this->host = str_replace( 'www.', '', $parsed_home['host'] );
		}

		if ( ! empty( $parsed_home['scheme'] ) ) {
			$this->scheme = $parsed_home['scheme'];
		}

		$this->charset = esc_attr( get_bloginfo( 'charset' ) );
	}

	/**
	 * Get set of image data sets for the given post.
	 *
	 * @param object $post Post object to get images for.
	 *
	 * @return array
	 */
	public function get_images( $post ) {
		if ( ! Helper::get_settings( 'sitemap.include_images' ) ) {
			return false;
		}

		$this->post = $post;
		if ( ! is_object( $this->post ) ) {
			return $this->images;
		}

		$this->get_post_thumbnail();
		$this->get_post_images();
		$this->get_post_galleries();
		$this->get_is_attachment();
		$this->get_custom_field_images();

		// Reset.
		$images       = $this->images;
		$this->images = [];
		$this->post   = null;

		/**
		 * Filter images to be included for the post in XML sitemap.
		 *
		 * @param array $images  Array of image items.
		 * @param int   $post_id ID of the post.
		 */
		return $this->do_filter( 'sitemap/urlimages', $images, $post->ID );
	}

	/**
	 * Get term images.
	 *
	 * @param object $term Term to get images from description for.
	 *
	 * @return array
	 */
	public function get_term_images( $term ) {
		if ( ! Helper::get_settings( 'sitemap.include_images' ) ) {
			return false;
		}

		$images = $this->parse_html_images( $term->description );
		foreach ( $this->parse_galleries( $term->description ) as $attachment ) {
			$images[] = [
				'src' => $this->get_absolute_url( $this->image_url( $attachment->ID ) ),
			];
		}

		return $images;
	}

	/**
	 * Get post thumbnail.
	 */
	private function get_post_thumbnail() {
		$thumbnail_id = get_post_thumbnail_id( $this->post->ID );
		if (
			! Helper::get_settings( 'sitemap.include_featured_image' ) ||
			! Attachment::attachment_in_sitemap( $thumbnail_id )
		) {
			return;
		}

		$this->get_image_item( $this->get_absolute_url( $this->image_url( $thumbnail_id ) ) );
	}

	/**
	 * Get images from post content.
	 */
	private function get_post_images() {
		/**
		 * Filter: 'rank_math/sitemap/content_before_parse_html_images' - Filters the post content
		 * before it is parsed for images.
		 *
		 * @param string $content The raw/unprocessed post content.
		 */
		$content = $this->do_filter( 'sitemap/content_before_parse_html_images', $this->post->post_content, $this->post->ID );
		$content = do_blocks( $content );

		foreach ( $this->parse_html_images( $content ) as $image ) {
			$this->get_image_item( $image['src'] );
		}
	}

	/**
	 * Get post galleries.
	 */
	private function get_post_galleries() {
		foreach ( $this->parse_galleries( $this->post->post_content, $this->post->ID ) as $attachment ) {
			$this->get_image_item( $this->get_absolute_url( $this->image_url( $attachment->ID ) ) );
		}
	}

	/**
	 * Get image if post is attachment.
	 */
	private function get_is_attachment() {
		if ( 'attachment' === $this->post->post_type && wp_attachment_is_image( $this->post ) ) {
			$this->get_image_item( $this->get_absolute_url( $this->image_url( $this->post->ID ) ) );
		}
	}

	/**
	 * Get images from custom fields.
	 */
	private function get_custom_field_images() {
		$customs = Helper::get_settings( 'sitemap.pt_' . $this->post->post_type . '_image_customfields' );
		if ( empty( $customs ) ) {
			return;
		}

		$customs = Arr::from_string( $customs, "\n" );
		foreach ( $customs as $key ) {
			$src = get_post_meta( $this->post->ID, $key, true );
			if ( Str::is_non_empty( $src ) && Helper::is_image_url( $src ) ) {
				$this->get_image_item( $src );
			}
		}
	}

	/**
	 * Parse `<img />` tags in content.
	 *
	 * @param string $content Content string to parse.
	 *
	 * @return array
	 */
	private function parse_html_images( $content ) {
		$images   = [];
		$document = $this->get_document( $content );
		if ( false === $document ) {
			return $images;
		}

		foreach ( $document->getElementsByTagName( 'img' ) as $img ) {
			$src = $this->get_image_src( $img );
			if ( false === $src ) {
				continue;
			}

			$images[] = [ 'src' => $src ];
		}

		return $images;
	}

	/**
	 * Get DOM document.
	 *
	 * @param string $content Content to parse.
	 *
	 * @return bool|DOMDocument
	 */
	private function get_document( $content ) {
		if ( ! class_exists( 'DOMDocument' ) || empty( $content ) ) {
			return false;
		}

		// Prevent DOMDocument from bubbling warnings about invalid HTML.
		libxml_use_internal_errors( true );

		$post_dom = new DOMDocument();
		$post_dom->loadHTML( '<?xml encoding="' . $this->charset . '">' . $content );

		// Clear the errors, so they don't get kept in memory.
		libxml_clear_errors();

		return $post_dom;
	}

	/**
	 * Get image source from node.
	 *
	 * @param DOMNode $node Node instance.
	 *
	 * @return bool|string
	 */
	private function get_image_src( $node ) {
		$src = $node->getAttribute( 'src' );
		if ( $node->hasAttribute( 'data-sitemapexclude' ) || empty( $src ) ) {
			return false;
		}

		$class = $node->getAttribute( 'class' );
		if ( // This detects WP-inserted images, which we need to upsize. R.
			! empty( $class )
			&& ! Str::contains( 'size-full', $class )
			&& preg_match( '|wp-image-(?P<id>\d+)|', $class, $matches )
			&& get_post_status( $matches['id'] )
		) {
			$src = $this->image_url( $matches['id'] );
		}

		$src     = $this->get_absolute_url( $src );
		$no_host = esc_url( $src ) !== $src;
		if ( ! $this->do_filter( 'sitemap/include_external_image', false ) ) {
			$no_host = ! Str::contains( $this->host, $src ) || esc_url( $src ) !== $src;
		}

		return $no_host ? false : $src;
	}

	/**
	 * Parse gallery shortcodes in a given content.
	 *
	 * @param string $content Content string.
	 * @param int    $post_id Optional ID of post being parsed.
	 *
	 * @return array Set of attachment objects.
	 */
	private function parse_galleries( $content, $post_id = 0 ) {
		$attachments = [];
		$galleries   = $this->get_content_galleries( $content );

		foreach ( $galleries as $gallery ) {
			$id = $post_id;
			if ( ! empty( $gallery['id'] ) ) {
				$id = intval( $gallery['id'] );
			}

			// Forked from core gallery_shortcode() to have exact same logic. R.
			if ( ! empty( $gallery['ids'] ) ) {
				$gallery['include'] = $gallery['ids'];
			}

			$attachments = array_merge( $attachments, $this->get_gallery_attachments( $id, $gallery ) );
		}

		return array_unique( $attachments, SORT_REGULAR );
	}

	/**
	 * Retrieves galleries from the passed content.
	 * Forked from core to skip executing shortcodes for performance.
	 *
	 * @param string $content Content to parse for shortcodes.
	 *
	 * @return array A list of arrays, each containing gallery data.
	 */
	private function get_content_galleries( $content ) {
		if ( ! preg_match_all( '/' . get_shortcode_regex( [ 'gallery' ] ) . '/s', $content, $matches, PREG_SET_ORDER ) ) {
			return [];
		}

		$galleries = [];
		foreach ( $matches as $shortcode ) {
			if ( 'gallery' !== $shortcode[2] ) {
				continue;
			}

			$attributes  = shortcode_parse_atts( $shortcode[3] );
			$galleries[] = '' === $attributes ? [] : $attributes;
		}

		return $galleries;
	}

	/**
	 * Set image item array with filters applied.
	 *
	 * @param string $src Image URL.
	 */
	private function get_image_item( $src ) {
		$image = [];

		/**
		 * Filter image URL to be included in XML sitemap for the post.
		 *
		 * @param string $src  Image URL.
		 * @param object $post Post object.
		 */
		$image['src'] = $this->do_filter( 'sitemap/xml_img_src', $src, $this->post );
		if ( Str::is_empty( $image['src'] ) ) {
			return;
		}

		/**
		 * Filter image data to be included in XML sitemap for the post.
		 *
		 * @param array  $image Array of image data. {
		 *     @type string $src Image URL.
		 * }
		 * @param object $post  Post object.
		 */
		$this->images[] = $this->do_filter( 'sitemap/xml_img', $image, $this->post );
	}

	/**
	 * Get attached image URL with filters applied. Adapted from core for speed.
	 *
	 * @param int $post_id ID of the post.
	 *
	 * @return string
	 */
	private function image_url( $post_id ) {
		$src = $this->normalize_image_url( $post_id );

		return false === $src ? '' : apply_filters( 'wp_get_attachment_url', $src, $post_id ); // phpcs:ignore
	}

	/**
	 * Get attached image URL.
	 *
	 * @param int $post_id ID of the post.
	 *
	 * @return bool|string
	 */
	private function normalize_image_url( $post_id ) {
		$uploads    = $this->get_upload_dir();
		$attachment = get_post_meta( $post_id, '_wp_attached_file', true );

		if ( false !== $uploads['error'] || empty( $attachment ) ) {
			return false;
		}

		// Check that the upload base exists in the file location.
		if ( 0 === strpos( $attachment, $uploads['basedir'] ) ) {
			return str_replace( $uploads['basedir'], $uploads['baseurl'], $attachment );
		}

		if ( false !== strpos( $attachment, 'wp-content/uploads' ) ) {
			return $uploads['baseurl'] . substr( $attachment, ( strpos( $attachment, 'wp-content/uploads' ) + 18 ) );
		}

		// It's a newly uploaded file, therefore $attachment is relative to the baseurl.
		return $uploads['baseurl'] . '/' . $attachment;
	}

	/**
	 * Get WordPress upload directory.
	 *
	 * @return bool|array
	 */
	private function get_upload_dir() {
		static $rank_math_wp_uploads;

		if ( empty( $rank_math_wp_uploads ) ) {
			$rank_math_wp_uploads = wp_upload_dir();
		}

		return $rank_math_wp_uploads;
	}

	/**
	 * Make absolute URL for domain or protocol-relative one.
	 *
	 * @param string $src URL to process.
	 *
	 * @return string
	 */
	private function get_absolute_url( $src ) {
		if ( Str::is_empty( $src ) ) {
			return $src;
		}

		if ( true === Url::is_relative( $src ) ) {
			return '/' !== $src[0] ? $src :
				$this->home_url . $src; // The URL is relative, we'll have to make it absolute.
		}

		// If not starting with protocol, we add the scheme as the standard requires a protocol.
		return ! Str::starts_with( 'http', $src ) ? $this->scheme . ':' . $src : $src;
	}

	/**
	 * Returns the attachments for a gallery.
	 *
	 * @param int   $id      The post ID.
	 * @param array $gallery The gallery config.
	 *
	 * @return array The selected attachments.
	 */
	private function get_gallery_attachments( $id, $gallery ) {
		// When there are attachments to include.
		if ( ! empty( $gallery['include'] ) ) {
			return $this->get_gallery_attachments_for_included( $gallery['include'] );
		}

		return empty( $id ) ? [] : $this->get_gallery_attachments_for_parent( $id, $gallery );
	}

	/**
	 * Returns the attachments for the given ID.
	 *
	 * @param int   $id      The post ID.
	 * @param array $gallery The gallery config.
	 *
	 * @return array The selected attachments.
	 */
	private function get_gallery_attachments_for_parent( $id, $gallery ) {
		$query = [
			'posts_per_page' => -1,
			'post_parent'    => $id,
		];

		// When there are posts that should be excluded from result set.
		if ( ! empty( $gallery['exclude'] ) ) {
			$query['post__not_in'] = wp_parse_id_list( $gallery['exclude'] );
		}

		return $this->get_attachments( $query );
	}

	/**
	 * Returns an array with attachments for the post IDs that will be included.
	 *
	 * @param array $include_ids Array with ids to include.
	 *
	 * @return array The found attachments.
	 */
	private function get_gallery_attachments_for_included( $include_ids ) {
		$ids_to_include = wp_parse_id_list( $include_ids );
		$attachments    = $this->get_attachments(
			[
				'posts_per_page' => count( $ids_to_include ),
				'post__in'       => $ids_to_include,
			]
		);

		$gallery_attachments = [];
		foreach ( $attachments as $val ) {
			$gallery_attachments[ $val->ID ] = $val;
		}

		return $gallery_attachments;
	}

	/**
	 * Returns the attachments.
	 *
	 * @param array $args Array with query args.
	 *
	 * @return array The found attachments.
	 */
	protected function get_attachments( $args ) {
		$default_args = [
			'post_status'         => 'inherit',
			'post_type'           => 'attachment',
			'post_mime_type'      => 'image',

			// Defaults taken from function get_posts.
			'orderby'             => 'date',
			'order'               => 'DESC',
			'meta_key'            => '',
			'meta_value'          => '',
			'suppress_filters'    => true,
			'ignore_sticky_posts' => true,
			'no_found_rows'       => true,
		];

		$args = wp_parse_args( $args, $default_args );

		$get_attachments = new WP_Query();
		return $get_attachments->query( $args );
	}
}
PK     ¥ŠU]–Š¥¬º  º  9  includes/modules/sitemap/class-redirect-core-sitemaps.phpnu „[µü¤        <?php
/**
 * Redirect core sitemaps.
 *
 * Disable WP core sitemap feature added in version 5.5 and
 * use Rank Math's sitemaps instead.
 *
 * @since      1.0.47
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Redirect Core Sitemaps class.
 */
class Redirect_Core_Sitemaps {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		/**
		 * Disable the WP core XML sitemaps.
		 */
		add_filter( 'wp_sitemaps_enabled', '__return_false' );
		$this->action( 'template_redirect', 'redirect_core_sitemaps' );
	}

	/**
	 * Redirect Core sitemap links to Rank Math Sitemaps.
	 */
	public function redirect_core_sitemaps() {
		// Early Bail.
		if ( empty( $_SERVER['REQUEST_URI'] ) ) {
			return;
		}

		$path = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );

		// Early bail if it's not a WP Core sitemap link.
		if ( ! Str::starts_with( '/wp-sitemap', $path ) ) {
			return;
		}

		$redirect = $this->get_redirect_url( $path );

		if ( ! $redirect ) {
			return;
		}

		Helper::redirect( home_url( $redirect ), 301 );
		exit;
	}

	/**
	 * Get Redirect URL by path.
	 *
	 * @param string $path The original path.
	 *
	 * @return string The URL to redirect.
	 */
	private function get_redirect_url( $path ) {
		if ( '/wp-sitemap.xml' === $path ) {
			return '/' . Sitemap::get_sitemap_index_slug() . '.xml';
		}

		if ( preg_match( '/^\/wp-sitemap-(posts|taxonomies)-(\w+)-(\d+)\.xml$/', $path, $matches ) ) {
			$index = ( (int) $matches[3] - 1 );
			$index = 0 !== $index ? (string) $index : '';

			return '/' . $matches[2] . '-sitemap' . $index . '.xml';
		}

		if ( preg_match( '/^\/wp-sitemap-users-(\d+)\.xml$/', $path, $matches ) ) {
			$index = ( (int) $matches[1] - 1 );
			$index = 0 !== $index ? (string) $index : '';

			return '/author-sitemap' . $index . '.xml';
		}

		return false;
	}
}
PK     ¥ŠU]Í!çìž  ž  )  includes/modules/sitemap/abstract-xml.phpnu „[µü¤        <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
/**
 * The Sitemap xml and stylesheet abstract class.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * XML.
 */
abstract class XML {

	use Hooker;

	/**
	 * HTTP protocol to use in headers.
	 *
	 * @var string
	 */
	protected $http_protocol = null;

	/**
	 * Holds charset of output, might be converted.
	 *
	 * @var string
	 */
	protected $output_charset = 'UTF-8';

	/**
	 * Send file headers.
	 *
	 * @param array $headers Array of headers.
	 * @param bool  $is_xsl True if sending headers are for XSL.
	 */
	protected function send_headers( $headers = [], $is_xsl = false ) {
		$defaults = [
			'X-Robots-Tag'  => 'noindex',
			'Content-Type'  => 'text/xml; charset=' . $this->get_output_charset(),
			'Pragma'        => 'public',
			'Cache-Control' => 'no-cache, no-store, must-revalidate, max-age=0',
			'Expires'       => 0,
		];

		$headers = wp_parse_args( $headers, $defaults );

		/**
		 * Filter the sitemap HTTP headers.
		 *
		 * @param array $headers HTTP headers.
		 * @param bool  $is_xsl Whether these headers are for XSL.
		 */
		$headers = $this->do_filter( 'sitemap/http_headers', $headers, $is_xsl );

		header( $this->get_protocol() . ' 200 OK', true, 200 );

		foreach ( $headers as $header => $value ) {
			header( $header . ': ' . $value );
		}
	}

	/**
	 * Get HTTP protocol.
	 *
	 * @return string
	 */
	protected function get_protocol() {
		if ( ! is_null( $this->http_protocol ) ) {
			return $this->http_protocol;
		}

		$this->http_protocol = ! empty( $_SERVER['SERVER_PROTOCOL'] ) ? sanitize_text_field( $_SERVER['SERVER_PROTOCOL'] ) : 'HTTP/1.1';
		return $this->http_protocol;
	}

	/**
	 * Get `charset` for the output.
	 *
	 * @return string
	 */
	protected function get_output_charset() {
		return $this->output_charset;
	}
}
PK     ¥ŠU]�/0¦È<  È<  (  includes/modules/sitemap/class-admin.phpnu „[µü¤        <?php
/**
 * The Sitemap module admin side functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Traits\Ajax;
use RankMath\Module\Base;
use RankMath\Admin\Register_Options_Page;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Admin class.
 */
class Admin extends Base {

	use Ajax;

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * The Constructor.
	 */
	public function __construct() {

		$directory = __DIR__;
		$this->config(
			[
				'id'        => 'sitemap',
				'directory' => $directory,
			]
		);
		parent::__construct();

		$this->action( 'init', 'register_setting_page', 999 );
		$this->action( 'admin_footer', 'admin_scripts' );
		$this->filter( 'rank_math/settings/sitemap', 'post_type_settings' );
		$this->filter( 'rank_math/settings/sitemap', 'taxonomy_settings' );

		// Attachment.
		$this->filter( 'media_send_to_editor', 'media_popup_html', 10, 2 );

		if ( Helper::has_cap( 'sitemap' ) ) {
			$this->filter( 'attachment_fields_to_edit', 'media_popup_fields', 20, 2 );
			$this->filter( 'attachment_fields_to_save', 'media_popup_fields_save', 20, 2 );
		}

		$this->ajax( 'remove_nginx_notice', 'remove_nginx_notice' );
	}

	/**
	 * Register setting page.
	 */
	public function register_setting_page() {
		$sitemap_url = Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' );

		$tabs = [
			'general' => [
				'icon'      => 'rm-icon rm-icon-settings',
				'title'     => esc_html__( 'General', 'seo-by-rank-math' ),
				'file'      => $this->directory . '/settings/general.php',
				'desc'      => esc_html__( 'This tab contains General settings related to the XML sitemaps.', 'seo-by-rank-math' ) . ' <a href="' . KB::get( 'sitemap-general', 'Options Panel Sitemap General Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>',
				/* translators: sitemap url */
				'after_row' => $this->get_notice_start() . sprintf( esc_html__( 'Your sitemap index can be found here: %s', 'seo-by-rank-math' ), '<a href="' . $sitemap_url . '" target="_blank">' . $sitemap_url . '</a>' ) . '</p></div>' . $this->get_nginx_notice(),
				'json'      => [
					'sitemapUrl'   => $sitemap_url,
					'nginxNotice'  => $this->get_nginx_notice(),
					'isWPMLActive' => class_exists( 'SitePress' ),
				],
			],
		];

		$rank_math_sitemap_page = Helper::get_settings( 'sitemap.html_sitemap_page' );
		if ( $rank_math_sitemap_page ) {
			$rank_math_sitemap_page = [
				'id'   => $rank_math_sitemap_page,
				'name' => get_the_title( $rank_math_sitemap_page ),
				'url'  => get_permalink( $rank_math_sitemap_page ),
			];
		}

		$tabs['html_sitemap'] = [
			'icon'    => 'rm-icon rm-icon-sitemap',
			'title'   => esc_html__( 'HTML Sitemap', 'seo-by-rank-math' ),
			'file'    => $this->directory . '/settings/html-sitemap.php',
			'desc'    => esc_html__( 'This tab contains settings related to the HTML sitemap.', 'seo-by-rank-math' ) . ' <a href="' . KB::get( 'sitemap-general', 'Options Panel Sitemap HTML Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>',
			'classes' => 'html-sitemap',
			'json'    => [
				'htmlSitemapPage' => $rank_math_sitemap_page,
			],
		];

		if ( Helper::is_author_archive_indexable() ) {
			$roles   = Helper::get_roles();
			$default = $roles;
			unset( $default['administrator'], $default['editor'], $default['author'] );
			$tabs['authors'] = [
				'icon'  => 'rm-icon rm-icon-users',
				'title' => esc_html__( 'Authors', 'seo-by-rank-math' ),
				/* translators: Learn more link. */
				'desc'  => sprintf( esc_html__( 'Set the sitemap options for author archive pages. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'configure-sitemaps', 'Options Panel Sitemap Authors Tab' ) . '#authors" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'file'  => $this->directory . '/settings/authors.php',
				'json'  => [
					'roles'        => $roles,
					'defaultRoles' => array_keys( $default ),
				],
			];
		}

		$tabs = $this->do_filter( 'settings/sitemap', $tabs );

		new Register_Options_Page(
			[
				'key'        => 'rank-math-options-sitemap',
				'title'      => esc_html__( 'Sitemap Settings', 'seo-by-rank-math' ),
				'menu_title' => esc_html__( 'Sitemap Settings', 'seo-by-rank-math' ),
				'capability' => 'rank_math_sitemap',
				'folder'     => 'titles',
				'tabs'       => $tabs,
			]
		);
	}

	/**
	 * Add post type tabs in the Sitemap Settings options panel.
	 *
	 * @param array $tabs Hold tabs for the options panel.
	 *
	 * @return array
	 */
	public function post_type_settings( $tabs ) {
		$icons  = Helper::choices_post_type_icons();
		$things = [
			'attachment' => esc_html__( 'attachments', 'seo-by-rank-math' ),
			'product'    => esc_html__( 'your product pages', 'seo-by-rank-math' ),
		];
		$urls   = [
			'post'       => KB::get( 'sitemap-post', 'Options Panel Sitemap Posts Tab' ),
			'page'       => KB::get( 'sitemap-page', 'Options Panel Sitemap Page Tab' ),
			'attachment' => KB::get( 'sitemap-media', 'Options Panel Sitemap Attachments Tab' ),
			'product'    => KB::get( 'sitemap-product', 'Options Panel Sitemap Product Tab' ),
		];

		// Post type label separator.
		$tabs['p_types'] = [
			'title' => esc_html__( 'Post Types:', 'seo-by-rank-math' ),
			'type'  => 'separator',
		];

		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			$object      = get_post_type_object( $post_type );
			$sitemap_url = Router::get_base_url( $object->name . '-sitemap.xml' );
			$notice_end  = '</p><div class="rank-math-cmb-dependency hidden" data-relation="or"><span class="hidden" data-field="pt_' . $post_type . '_sitemap" data-comparison="=" data-value="on"></span></div></div>';
			$name        = strtolower( $object->label );

			/* translators: Post Type label */
			$thing = isset( $things[ $post_type ] ) ? $things[ $post_type ] : sprintf( __( 'single %s', 'seo-by-rank-math' ), $name );
			$url   = isset( $urls[ $post_type ] ) ? $urls[ $post_type ] : KB::get( 'configure-sitemaps' );

			$tabs[ 'sitemap-post-type-' . $object->name ] = [
				'title'     => 'attachment' === $post_type ? esc_html__( 'Attachments', 'seo-by-rank-math' ) : $object->label,
				'icon'      => isset( $icons[ $object->name ] ) ? $icons[ $object->name ] : $icons['default'],
				/* translators: %1$s: thing, %2$s: Learn more link. */
				'desc'      => sprintf( esc_html__( 'Change Sitemap settings of %1$s. %2$s.', 'seo-by-rank-math' ), $thing, '<a href="' . $url . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'post_type' => $object->name,
				'file'      => $this->directory . '/settings/post-types.php',
				/* translators: Post Type Sitemap Url */
				'after_row' => $this->get_notice_start() . sprintf( esc_html__( 'Sitemap URL: %s', 'seo-by-rank-math' ), '<a href="' . $sitemap_url . '" target="_blank">' . $sitemap_url . '</a>' ) . $notice_end,
				'json'      => [
					'isRedirectAttachment' => Helper::get_settings( 'general.attachment_redirect_urls', false ),
					$object->name          => [
						'sitemapUrl' => $sitemap_url,
					],
				],
			];

			if ( 'attachment' === $post_type ) {
				$tabs[ 'sitemap-post-type-' . $object->name ]['after_row'] = $this->get_notice_start() . esc_html__( 'Please note that this will add the attachment page URLs to the sitemap, not direct image URLs.', 'seo-by-rank-math' ) . $notice_end;
				$tabs[ 'sitemap-post-type-' . $object->name ]['classes']   = 'rank-math-advanced-option';
			}
		}

		return $tabs;
	}

	/**
	 * Add taxonomy tabs in the Sitemap Settings options panel.
	 *
	 * @param array $tabs Hold tabs for the options panel.
	 *
	 * @return array
	 */
	public function taxonomy_settings( $tabs ) {
		$icons = Helper::choices_taxonomy_icons();

		// Taxonomy label separator.
		$tabs['t_types'] = [
			'title' => esc_html__( 'Taxonomies:', 'seo-by-rank-math' ),
			'type'  => 'separator',
		];

		foreach ( Helper::get_accessible_taxonomies() as $taxonomy ) {
			if ( 'post_format' === $taxonomy->name ) {
				continue;
			}

			$hash_links = [
				'category'    => '#categories',
				'post_tag'    => '#tags',
				'product_cat' => '#product-categories',
				'product_tag' => '#product-tags',
			];

			$sitemap_url = Router::get_base_url( $taxonomy->name . '-sitemap.xml' );
			$notice_end  = '</p><div class="rank-math-cmb-dependency hidden" data-relation="or"><span class="hidden" data-field="tax_' . $taxonomy->name . '_sitemap" data-comparison="=" data-value="on"></span></div></div>';

			$taxonomy_name = strtolower( $taxonomy->name );
			$url           = isset( $hash_links[ $taxonomy_name ] ) ? KB::get( 'configure-sitemaps', 'Options Panel Sitemap ' . $taxonomy->labels->name . ' Tab' ) . $hash_links[ $taxonomy_name ] : KB::get( 'configure-sitemaps' );
			switch ( $taxonomy->name ) {
				case 'product_cat':
				case 'product_tag':
					/* translators: Taxonomy singular label */
					$thing = sprintf( __( 'your product %s pages', 'seo-by-rank-math' ), strtolower( $taxonomy->labels->singular_name ) );
					break;

				default:
					/* translators: Taxonomy singular label */
					$thing = sprintf( __( '%s archives', 'seo-by-rank-math' ), strtolower( $taxonomy->labels->singular_name ) );
					$name  = strtolower( $taxonomy->labels->name );
			}

			$tabs[ 'sitemap-taxonomy-' . $taxonomy->name ] = [
				'icon'      => isset( $icons[ $taxonomy->name ] ) ? $icons[ $taxonomy->name ] : $icons['default'],
				'title'     => $taxonomy->label,
				/* translators: %1$s: thing, %2$s: Learn more link. */
				'desc'      => sprintf( esc_html__( 'Change Sitemap settings of %1$s. %2$s.', 'seo-by-rank-math' ), $thing, '<a href="' . $url . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'taxonomy'  => $taxonomy->name,
				'file'      => $this->directory . '/settings/taxonomies.php',
				/* translators: Taxonomy Sitemap Url */
				'after_row' => $this->get_notice_start() . sprintf( esc_html__( 'Sitemap URL: %s', 'seo-by-rank-math' ), '<a href="' . $sitemap_url . '" target="_blank">' . $sitemap_url . '</a>' ) . $notice_end,
				'json'      => [
					$taxonomy->name => [
						'sitemapUrl' => $sitemap_url,
					],
				],
			];
		}

		return $tabs;
	}

	/**
	 * Adds new "exclude from sitemap" checkbox to the media popup in the post editor.
	 *
	 * @param array  $form_fields Default form fields.
	 * @param object $post        Current post.
	 *
	 * @return array New form fields
	 */
	public function media_popup_fields( $form_fields, $post ) {
		$exclude   = get_post_meta( $post->ID, 'rank_math_exclude_sitemap', true );
		$checkbox  = '<label><input type="checkbox" name="attachments[' . $post->ID . '][rank_math_media_exclude_sitemap]" ' . checked( $exclude, true, 0 ) . ' /> ';
		$checkbox .= esc_html__( 'Exclude this attachment from sitemap', 'seo-by-rank-math' ) . '</label>';

		$form_fields['rank_math_exclude_sitemap'] = [ 'tr' => "\t\t<tr><td>$checkbox</td></tr>\n" ];

		return $form_fields;
	}

	/**
	 * Saves new "exclude from sitemap" field as post meta for the attachment.
	 *
	 * @param array $post       Attachment ID.
	 * @param array $attachment Attachment data.
	 *
	 * @return array Post
	 */
	public function media_popup_fields_save( $post, $attachment ) {

		if ( isset( $attachment['rank_math_media_exclude_sitemap'] ) ) {
			update_post_meta( $post['ID'], 'rank_math_exclude_sitemap', true );
		} else {
			delete_post_meta( $post['ID'], 'rank_math_exclude_sitemap' );
		}

		Cache_Watcher::invalidate_post( $post['ID'] );

		return $post;
	}

	/**
	 * Adds the "data-sitemapexclude" HTML attribute to the img tag in the post
	 * editor when necessary.
	 *
	 * @param string $html          Original img HTML tag.
	 * @param int    $attachment_id Attachment ID.
	 *
	 * @return string New img HTML tag.
	 */
	public function media_popup_html( $html, $attachment_id ) {
		$post = get_post( $attachment_id );
		if ( Str::starts_with( 'image', $post->post_mime_type ) && get_post_meta( $attachment_id, 'rank_math_exclude_sitemap', true ) ) {
			$html = str_replace( ' class="', ' data-sitemapexclude="true" class="', $html );
		}
		return $html;
	}

	/**
	 * Remove Sitemap nginx notice.
	 *
	 * @since 1.0.73
	 */
	public function remove_nginx_notice() {
		check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
		$this->has_cap_ajax( 'sitemap' );
		update_option( 'rank_math_remove_nginx_notice', true, false );
		$this->success();
	}

	/**
	 * Get opening tags for the notice HTML.
	 *
	 * @return string
	 */
	private function get_notice_start() {
		return '<div class="notice notice-alt notice-info info inline rank-math-notice"><p>';
	}

	/**
	 * Get nginx notice.
	 *
	 * @since 1.0.41
	 *
	 * @return string
	 */
	private function get_nginx_notice() {
		if ( 'rank-math-options-sitemap' !== Param::get( 'page' ) || empty( Param::server( 'SERVER_SOFTWARE' ) ) || get_option( 'rank_math_remove_nginx_notice' ) ) {
			return '';
		}

		$server_software = explode( '/', Param::server( 'SERVER_SOFTWARE' ) );
		if ( ! in_array( 'nginx', array_map( 'strtolower', $server_software ), true ) ) {
			return '';
		}

		$sitemap_base = Router::get_sitemap_base() ? Router::get_sitemap_base() : '';

		$message = sprintf(
			/* Translators: the placeholder is for the sitemap base url. */
			__( 'Since you are using an NGINX server, you may need to add the following code to your %s <strong>if your Sitemap pages are not loading</strong>. If you are unsure how to do it, please contact your hosting provider.', 'seo-by-rank-math' ),
			'<a href="https://help.dreamhost.com/hc/en-us/articles/216455077-Nginx-configuration-file-locations/?utm_campaign=Rank+Math" target="_blank">' . __( 'configuration file', 'seo-by-rank-math' ) . '</a>'
		);

		return '<div class="sitemap-nginx-notice notice notice-alt notice-warning rank-math-notice">' .
		'<p>' . $message .
			' <a href="#"><span class="show">' . __( 'Click here to see the code.', 'seo-by-rank-math' ) . '</span><span class="hide">' . __( 'Hide', 'seo-by-rank-math' ) . '</span></a>
			<a href="#" class="sitemap-close-notice">' . __( 'I already added', 'seo-by-rank-math' ) . '</a>
		</p>
 <pre>
 # START Nginx Rewrites for Rank Math Sitemaps
 rewrite ^/' . $sitemap_base . Sitemap::get_sitemap_index_slug() . '\\.xml$ /index.php?sitemap=1 last;
 rewrite ^/' . $sitemap_base . '([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
 # END Nginx Rewrites for Rank Math Sitemaps
 </pre>
		 </div>';
	}

	/**
	 * Add some inline JS for the sitemap settings admin page.
	 */
	public function admin_scripts() {
		if ( 'rank-math-options-sitemap' !== Param::get( 'page' ) ) {
			return;
		}

		?>
		<script>
			jQuery( function( $ ) {
				$( '.cmb2-id-html-sitemap-seo-titles input' ).on( 'change', function() {
					if ( 'seo_titles' === $( this ).filter(':checked').val() ) {
						$( '#html_sitemap_sort option[value="alphabetical"]' ).prop( 'disabled', true );
						if ( $( '#html_sitemap_sort option:selected' ).prop( 'disabled' ) ) {
							$( '#html_sitemap_sort option:first' ).prop( 'selected', true );
						}
					} else {
						$( '#html_sitemap_sort option[value="alphabetical"]' ).prop( 'disabled', false );
					}
				} ).trigger( 'change' );
			} );
		</script>
		<?php
	}
}
PK     ¥ŠU]ŒÛ      "  includes/modules/sitemap/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]5—ã½,  ½,  ,  includes/modules/sitemap/class-generator.phpnu „[µü¤        <?php
/**
 * The sitemap generator.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Generator class.
 */
class Generator extends XML {

	use Hooker;

	/**
	 * XSL stylesheet for styling a sitemap for web browsers.
	 *
	 * @var string
	 */
	protected $stylesheet = '';

	/**
	 * Holds the get_bloginfo( 'charset' ) value to reuse for performance.
	 *
	 * @var string
	 */
	protected $charset = 'UTF-8';

	/**
	 * If data encoding needs to be converted for output.
	 *
	 * @var boolean
	 */
	protected $needs_conversion = false;

	/**
	 * Timezone.
	 *
	 * @var Timezone
	 */
	public $timezone;

	/**
	 * Providers array.
	 *
	 * @var Provider
	 */
	public $providers = [];

	/**
	 * The maximum number of entries per sitemap page.
	 *
	 * @var int
	 */
	private $max_entries;

	/**
	 * Set up object properties.
	 */
	public function __construct() {

		$this->stylesheet     = preg_replace( '/(^http[s]?:)/', '', Router::get_base_url( 'main-sitemap.xsl' ) );
		$this->stylesheet     = '<?xml-stylesheet type="text/xsl" href="' . $this->stylesheet . '"?>';
		$this->charset        = get_bloginfo( 'charset' );
		$this->output_charset = $this->charset;
		$this->timezone       = new Timezone();

		if (
			'UTF-8' !== $this->charset
			&& function_exists( 'mb_list_encodings' )
			&& in_array( $this->charset, mb_list_encodings(), true )
		) {
			$this->output_charset = 'UTF-8';
		}

		$this->needs_conversion = $this->output_charset !== $this->charset;
		$this->instantiate();
	}

	/**
	 * Instantiate required objects.
	 */
	private function instantiate() {
		// Initialize sitemap providers classes.
		$this->providers = [
			new \RankMath\Sitemap\Providers\Post_Type(),
			new \RankMath\Sitemap\Providers\Taxonomy(),
		];

		// Author Provider.
		if ( true === Helper::is_author_archive_indexable() ) {
			$this->providers[] = new \RankMath\Sitemap\Providers\Author();
		}

		$external_providers = $this->do_filter( 'sitemap/providers', [] );
		foreach ( $external_providers as $provider ) {
			if ( is_object( $provider ) ) {
				$this->providers[] = $provider;
			}
		}
	}

	/**
	 * Produce final XML output with debug information.
	 *
	 * @param  string $type Sitemap type.
	 * @param  int    $page Page number to retrieve.
	 * @return string
	 */
	public function get_output( $type, $page ) {
		$output = '<?xml version="1.0" encoding="' . esc_attr( $this->get_output_charset() ) . '"?>';

		if ( $this->stylesheet ) {
			/**
			 * Filter the stylesheet URL for the XML sitemap.
			 *
			 * @param string $stylesheet Stylesheet URL.
			 */
			$output .= $this->do_filter( "sitemap/{$type}_stylesheet_url", $this->stylesheet ) . "\n";
		}

		$content = $this->build_sitemap( $type, $page );

		if ( '' !== $content ) {
			return $output . $content;
		}

		return '';
	}

	/**
	 * Attempts to build the requested sitemap.
	 *
	 * @param  string $type Sitemap type.
	 * @param  int    $page Page number to retrieve.
	 * @return string
	 */
	public function build_sitemap( $type, $page ) {
		$this->max_entries = absint( Helper::get_settings( 'sitemap.items_per_page', 100 ) );

		/**
		 * Filter the type of sitemap to build.
		 *
		 * @param string $type Sitemap type, determined by the request.
		 */
		$type = $this->do_filter( 'sitemap/build_type', $type );
		if ( '1' === $type ) {
			return $this->build_root_map();
		}

		foreach ( $this->providers as $provider ) {
			if ( ! $provider->handles_type( $type ) ) {
				continue;
			}

			$links = $provider->get_sitemap_links( $type, $this->max_entries, $page );
			if ( empty( $links ) && ( empty( $provider->should_show_empty ) || $page > 1 ) ) {
				continue;
			}

			return $this->get_sitemap( $links, $type, $page );
		}

		return $this->do_filter( "sitemap/{$type}/content", '' );
	}

	/**
	 * Build the root sitemap (example.com/sitemap_index.xml) which lists sub-sitemaps for other content types.
	 */
	public function build_root_map() {
		$links = [];
		foreach ( $this->providers as $provider ) {
			$links = array_merge( $links, $provider->get_index_links( $this->max_entries ) );
		}

		if ( empty( $links ) ) {
			return '';
		}

		return $this->get_index( $links );
	}

	/**
	 * Produce XML output for sitemap index.
	 *
	 * @param  array $links Set of sitemaps index links.
	 * @return string
	 */
	public function get_index( $links ) {

		$xml = '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

		foreach ( $links as $link ) {
			$xml .= $this->sitemap_index_url( $link );
		}

		/**
		 * Filter to append sitemaps to the index.
		 *
		 * @param string $index String to append to sitemaps index, defaults to empty.
		 */
		$xml .= $this->do_filter( 'sitemap/index', '' );
		$xml .= '</sitemapindex>';

		return $xml;
	}

	/**
	 * Produce XML output for urlset.
	 *
	 * @param  array  $links        Set of sitemap links.
	 * @param  string $type         Sitemap type.
	 * @param  int    $current_page Current sitemap page number.
	 * @return string
	 */
	public function get_sitemap( $links, $type, $current_page ) {

		$urlset = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" '
			. 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd '
			. 'http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" '
			. 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

		/**
		 * Filters the `urlset` for a sitemap by type.
		 *
		 * @param string $urlset The output for the sitemap's `urlset`.
		 */
		$xml = $this->do_filter( "sitemap/{$type}_urlset", $urlset );

		foreach ( $links as $url ) {
			$method = $type . '_sitemap_url';
			$xml   .= has_filter( "rank_math/sitemap/{$method}" ) ? $this->do_filter( "sitemap/{$method}", $url, $this ) : $this->sitemap_url( $url );
		}

		/**
		 * Filter to add extra URLs to the XML sitemap by type.
		 *
		 * Only runs for the first page, not on all.
		 *
		 * @param string $content String content to add, defaults to empty.
		 */
		if ( 1 === $current_page ) {
			$xml .= $this->do_filter( "sitemap/{$type}_content", '' );
		}

		$xml .= '</urlset>';

		return $xml;
	}

	/**
	 * Build the `<sitemap>` tag for a given URL.
	 *
	 * @param  array $url Array of parts that make up this entry.
	 * @return string
	 */
	protected function sitemap_index_url( $url ) {

		$date = null;
		if ( ! empty( $url['lastmod'] ) ) {
			$date = $this->timezone->format_date( $url['lastmod'] );
		}

		$output  = $this->newline( '<sitemap>', 1 );
		$output .= $this->newline( '<loc>' . htmlspecialchars( $url['loc'] ) . '</loc>', 2 );
		$output .= empty( $date ) ? '' : $this->newline( '<lastmod>' . htmlspecialchars( $date ) . '</lastmod>', 2 );
		$output .= $this->newline( '</sitemap>', 1 );

		return $output;
	}

	/**
	 * Build the `<url>` tag for a given URL.
	 *
	 * Public access for backwards compatibility reasons.
	 *
	 * @param  array $url Array of parts that make up this entry.
	 * @return string
	 */
	public function sitemap_url( $url ) {

		$date = null;
		if ( ! empty( $url['mod'] ) ) {
			// Create a DateTime object date in the correct timezone.
			$date = $this->timezone->format_date( $url['mod'] );
		}

		$output  = $this->newline( '<url>', 1 );
		$output .= $this->newline( '<loc>' . $this->encode_url_rfc3986( htmlspecialchars( $url['loc'] ) ) . '</loc>', 2 );
		$output .= empty( $date ) ? '' : $this->newline( '<lastmod>' . htmlspecialchars( $date ) . '</lastmod>', 2 );
		$output .= $this->sitemap_images( $url );
		$output .= $this->newline( '</url>', 1 );

		/**
		 * Filters the output for the sitemap url tag.
		 *
		 * @param string $output The output for the sitemap url tag.
		 * @param array  $url    The sitemap url array on which the output is based.
		 */
		return $this->do_filter( 'sitemap/url', $output, $url );
	}

	/**
	 * Sitemap Images.
	 *
	 * @param  array $url Array of parts that make up this entry.
	 * @return string
	 */
	public function sitemap_images( $url ) {
		if ( empty( $url['images'] ) ) {
			return '';
		}

		$output = '';
		foreach ( $url['images'] as $img ) {

			if ( empty( $img['src'] ) ) {
				continue;
			}

			$output .= $this->newline( '<image:image>', 2 );
			$output .= $this->newline( '<image:loc>' . esc_html( $this->encode_url_rfc3986( $img['src'] ) ) . '</image:loc>', 3 );
			$output .= $this->newline( '</image:image>', 2 );
		}

		return $output;
	}

	/**
	 * Convret encoding if needed.
	 *
	 * @param string  $data   Data to be added.
	 * @param string  $tag    Tag to create CDATA for.
	 * @param integer $indent Tab indent count.
	 */
	public function add_cdata( $data, $tag, $indent = 0 ) {
		if ( $this->needs_conversion ) {
			$data = mb_convert_encoding( $data, $this->output_charset, $this->charset );
		}

		$data = _wp_specialchars( html_entity_decode( $data, ENT_QUOTES, $this->output_charset ) );

		return $this->newline( "<{$tag}><![CDATA[{$data}]]></{$tag}>", $indent );
	}

	/**
	 * Apply some best effort conversion to comply with RFC3986.
	 *
	 * @param  string $url URL to encode.
	 * @return string
	 */
	public function encode_url_rfc3986( $url ) {
		if ( filter_var( $url, FILTER_VALIDATE_URL ) ) {
			return $url;
		}

		$url = $this->encode_url_path( $url );
		$url = $this->encode_url_query( $url );

		return $url;
	}

	/**
	 * Apply some best effort conversion to comply with RFC3986.
	 *
	 * @param  string $url URL to encode.
	 * @return string
	 */
	private function encode_url_path( $url ) {
		$path = wp_parse_url( $url, PHP_URL_PATH );
		if ( empty( $path ) || '/' === $path ) {
			return $url;
		}

		$encoded_path = explode( '/', $path );

		// First decode the path, to prevent double encoding.
		$encoded_path = array_map( 'rawurldecode', $encoded_path );

		$encoded_path = array_map( 'rawurlencode', $encoded_path );
		$encoded_path = implode( '/', $encoded_path );
		$encoded_path = str_replace( '%7E', '~', $encoded_path ); // PHP <5.3.

		return str_replace( $path, $encoded_path, $url );
	}

	/**
	 * Apply some best effort conversion to comply with RFC3986.
	 *
	 * @param  string $url URL to encode.
	 * @return string
	 */
	private function encode_url_query( $url ) {
		$query = wp_parse_url( $url, PHP_URL_QUERY );
		if ( empty( $query ) ) {
			return $url;
		}

		parse_str( $query, $parsed_query );

		if ( defined( 'PHP_QUERY_RFC3986' ) ) { // PHP 5.4+.
			$parsed_query = http_build_query( $parsed_query, '', '&amp;', PHP_QUERY_RFC3986 );
		} else {
			$parsed_query = http_build_query( $parsed_query, '', '&amp;' );
			$parsed_query = str_replace( '+', '%20', $parsed_query );
			$parsed_query = str_replace( '%7E', '~', $parsed_query );
		}

		return str_replace( $query, $parsed_query, $url );
	}

	/**
	 * Write a newline with indent count.
	 *
	 * @param  string  $content Content to write.
	 * @param  integer $indent  Count of indent.
	 * @return string
	 */
	public function newline( $content, $indent = 0 ) {
		return str_repeat( "\t", $indent ) . $content . "\n";
	}
}
PK     ¥ŠU]„?®~Ó  Ó  +  includes/modules/sitemap/class-timezone.phpnu „[µü¤        <?php
/**
 * Sitemap date format class.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use DateTime;
use Exception;
use DateTimeZone;

defined( 'ABSPATH' ) || exit;

/**
 * Timezone.
 */
class Timezone {

	/**
	 * Format arbitrary UTC datetime string to desired form in site's time zone.
	 *
	 * @param string $datetime_string The input datetime string in UTC time zone.
	 * @param string $format          Date format to use.
	 *
	 * @return string
	 */
	public function format_date( $datetime_string, $format = DATE_W3C ) {
		if ( empty( $datetime_string ) || false === $this->is_valid_datetime( $datetime_string ) ) {
			return '';
		}

		$date_time = new DateTime( $datetime_string, new DateTimeZone( 'UTC' ) );

		return false === $date_time ? '' : $date_time->format( $format );
	}

	/**
	 * Check if a string is a valid datetime.
	 *
	 * @param  string $datetime String input to check as valid input for DateTime class.
	 * @return boolean
	 */
	private function is_valid_datetime( $datetime ) {
		if ( substr( $datetime, 0, 1 ) === '-' ) {
			return false;
		}

		try {
			return new DateTime( $datetime ) !== false;
		} catch ( Exception $exc ) {
			return false;
		}
	}
}
PK     ¥ŠU] èj‘  ‘  .  includes/modules/sitemap/class-sitemap-xml.phpnu „[µü¤        <?php
/**
 * Render XML output for sitemaps.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Sitemap XML class.
 */
class Sitemap_XML extends XML {

	use Hooker;

	/**
	 * Hold sitemap type.
	 *
	 * @var string
	 */
	public $type;

	/**
	 * Sitemap cache.
	 *
	 * @var Cache
	 */
	public $cache;

	/**
	 * Hold the current page.
	 *
	 * @var int
	 */
	private $current_page = 1;

	/**
	 * Content of the sitemap to output.
	 *
	 * @var string
	 */
	protected $sitemap = '';

	/**
	 * Whether or not the XML sitemap was served from cache or not.
	 *
	 * @var boolean
	 */
	private $transient = false;

	/**
	 * Holds the stats for the sitemap generation.
	 *
	 * @var array
	 */
	private $stats = [];

	/**
	 * The Constructor.
	 *
	 * @param string $type Sitemap type.
	 */
	public function __construct( $type ) {
		remove_all_actions( 'widgets_init' );
		$this->filter( 'user_has_cap', 'filter_user_has_cap' );

		$this->type  = $type;
		$this->cache = new Cache();
		$this->set_n( get_query_var( 'sitemap_n' ) );
		$this->output();
	}

	/**
	 * Generate sitemap now.
	 */
	private function output() {
		global $wp_query;

		$this->init_stats();
		if ( ! $this->has_sitemap_in_cache() ) {
			$this->build_sitemap();
		}

		if ( empty( $this->sitemap ) ) {
			$wp_query->set_404();
			status_header( 404 );
			return;
		}

		$this->send_headers();
		echo $this->sitemap; // phpcs:ignore
		$this->output_credits();
		remove_all_actions( 'wp_footer' );
		die;
	}

	/**
	 * Output XML credits.
	 */
	private function output_credits() {
		if ( ! $this->do_filter( 'sitemap/remove_credit', false ) ) {
			echo "\n<!-- XML Sitemap generated by Rank Math SEO Plugin (c) Rank Math - rankmath.com -->";
		}

		if ( ! WP_DEBUG_DISPLAY || ! WP_DEBUG ) {
			return;
		}

		$time     = timer_stop( 0, 3 );
		$sql      = get_num_queries() - $this->stats['query'];
		$memory   = size_format( memory_get_usage() - $this->stats['memory'], 2 );
		$template = $this->transient ? 'Served from cache in %s second(s) (Memory usage: %s)' : 'This sitemap was originally generated in %s second(s). (Memory usage: %s) - %s queries';
		$template = sprintf( $template, $time, $memory, $sql );
		echo "\n<!-- {$template} -->"; // phpcs:ignore

		if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
			$queries = print_r( $GLOBALS['wpdb']->queries, true ); // phpcs:ignore
			echo "\n<!-- {$queries} -->"; // phpcs:ignore
		}
	}

	/**
	 * Try to get the sitemap from cache.
	 *
	 * @return boolean If the sitemap has been retrieved from cache.
	 */
	private function has_sitemap_in_cache() {
		$this->transient = false;
		if ( true !== Sitemap::is_cache_enabled() ) {
			return false;
		}

		$this->sitemap = $this->cache->get_sitemap( $this->type, $this->current_page );

		if ( ! empty( $this->sitemap ) ) {
			$this->transient = true;
			return true;
		}

		// No cache was found, refresh it because cache is enabled.
		$this->build_sitemap();
		if ( ! empty( $this->sitemap ) ) {
			return $this->cache->store_sitemap( $this->type, $this->current_page, $this->sitemap );
		}

		return false;
	}

	/**
	 * Attempts to build the requested sitemap.
	 */
	public function build_sitemap() {
		$generator     = new Generator();
		$this->sitemap = $generator->get_output( $this->type, $this->current_page );
	}

	/**
	 * Set the sitemap current page to allow creating partial sitemaps with wp-cli
	 * in a one-off process.
	 *
	 * @param integer $current_page The part that should be generated.
	 */
	public function set_n( $current_page ) {
		if ( ! empty( $current_page ) && is_scalar( $current_page ) ) {
			$this->maybe_redirect( $current_page );
			$this->current_page = max( intval( $current_page ), 1 );
		}
	}

	/**
	 * Inits building some sitemap generation stats.
	 */
	private function init_stats() {
		timer_start();
		$this->stats['query']  = get_num_queries();
		$this->stats['memory'] = memory_get_usage();
	}

	/**
	 * Redirect page if $current_page has leading zeros.
	 *
	 * @param  mixed $current_page The page number.
	 * @return void
	 */
	private function maybe_redirect( $current_page ) {
		// Redirect when there are only zeros.
		if ( '' !== $current_page && intval( $current_page ) < 1 ) {
			Helper::redirect( preg_replace( '/0+\.xml$/', '.xml', Helper::get_current_page_url() ) );
			die();
		}

		// Redirect when there are leading zeros.
		$zeros_stripped = ltrim( $current_page, '0' );
		if ( (string) $zeros_stripped !== (string) $current_page ) {
			Helper::redirect( preg_replace( '/' . preg_quote( $current_page, '/' ) . '\.xml$/', $zeros_stripped . '.xml', Helper::get_current_page_url() ) );
			die();
		}
	}
}
PK     ¥ŠU]o«ì8»A  »A  6  includes/modules/sitemap/providers/class-post-type.phpnu „[µü¤        <?php
/**
 * The sitemap provider for post types.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap\Providers;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Traits\Hooker;
use RankMath\Sitemap\Router;
use RankMath\Sitemap\Sitemap;
use RankMath\Sitemap\Classifier;
use RankMath\Sitemap\Image_Parser;

defined( 'ABSPATH' ) || exit;

/**
 * Post type provider class.
 */
class Post_Type implements Provider {

	use Hooker;

	/**
	 * Holds the `home_url()` value to speed up loops.
	 *
	 * @var string
	 */
	protected $home_url = null;

	/**
	 * Holds image parser instance.
	 *
	 * @var Image_Parser
	 */
	protected $image_parser = null;

	/**
	 * Holds link classifier.
	 *
	 * @var Classifier
	 */
	protected $classifier = null;

	/**
	 * Static front page ID.
	 *
	 * @var int
	 */
	protected $page_on_front_id = null;

	/**
	 * Posts page ID.
	 *
	 * @var int
	 */
	protected $page_for_posts_id = null;

	/**
	 * Check if provider supports given item type.
	 *
	 * @param string $type Type string to check for.
	 *
	 * @return boolean
	 */
	public function handles_type( $type ) {
		if (
			false === post_type_exists( $type ) ||
			! Helper::get_settings( 'sitemap.pt_' . $type . '_sitemap' ) ||
			( 'attachment' === $type && Helper::get_settings( 'general.attachment_redirect_urls', true ) )
		) {
			return false;
		}

		/**
		 * Filter decision if post type is excluded from the XML sitemap.
		 *
		 * @param bool   $exclude Default false.
		 * @param string $type    Post type name.
		 */
		return ! $this->do_filter( 'sitemap/exclude_post_type', false, $type );
	}

	/**
	 * Get set of sitemaps index link data.
	 *
	 * @param int $max_entries Entries per sitemap.
	 *
	 * @return array
	 */
	public function get_index_links( $max_entries ) {
		global $wpdb;

		$post_types          = Helper::get_accessible_post_types();
		$post_types          = array_filter( $post_types, [ $this, 'handles_type' ] );
		$last_modified_times = Sitemap::get_last_modified_gmt( $post_types, true );
		$index               = [];

		foreach ( $post_types as $post_type ) {

			$total_count = $this->get_post_type_count( $post_type );
			if ( 0 === $total_count ) {
				continue;
			}

			$max_pages = 1;
			if ( $total_count > $max_entries ) {
				$max_pages = (int) ceil( $total_count / $max_entries );
			}

			$all_dates = [];
			if ( $max_pages > 1 ) {
				$sql = "
				SELECT post_modified_gmt
					FROM ( SELECT @rownum:=@rownum rownum, $wpdb->posts.post_modified_gmt
					FROM ( SELECT @rownum:=0 ) r, $wpdb->posts
						WHERE post_status IN ( 'publish', 'inherit' )
						AND post_type = %s
						ORDER BY post_modified_gmt ASC
					)
					x WHERE rownum %% %d = 0 ORDER BY post_modified_gmt DESC";

				$all_dates = DB_Helper::get_col( $wpdb->prepare( $sql, $post_type, $max_entries ) );
			}

			for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) {
				$current_page = ( $max_pages > 1 ) ? ( $page_counter + 1 ) : '';
				$date         = false;

				if ( isset( $all_dates[ $page_counter ] ) ) {
					$date = $all_dates[ $page_counter ];
				} elseif ( ! empty( $last_modified_times[ $post_type ] ) ) {
					$date = $last_modified_times[ $post_type ];
				}

				$item = $this->do_filter(
					'sitemap/index/entry',
					[
						'loc'     => Router::get_base_url( $post_type . '-sitemap' . $current_page . '.xml' ),
						'lastmod' => $date,
					],
					'post',
					$post_type,
				);

				if ( ! $item ) {
					continue;
				}

				$index[] = $item;
			}
		}

		return $index;
	}

	/**
	 * Get set of sitemap link data.
	 *
	 * @param string $type         Sitemap type.
	 * @param int    $max_entries  Entries per sitemap.
	 * @param int    $current_page Current page of the sitemap.
	 *
	 * @return array
	 */
	public function get_sitemap_links( $type, $max_entries, $current_page ) {
		$links     = [];
		$steps     = $max_entries;
		$offset    = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0;
		$total     = ( $offset + $max_entries );
		$typecount = $this->get_post_type_count( $type );

		Sitemap::maybe_redirect( $typecount, $max_entries );
		if ( $total > $typecount ) {
			$total = $typecount;
		}

		if ( 1 === $current_page ) {
			$links = array_merge( $links, $this->get_first_links( $type ) );
		}

		if ( 0 === $typecount ) {
			return $links;
		}

		$stacked_urls = [];
		while ( $total > $offset ) {
			$posts   = $this->get_posts( $type, $steps, $offset );
			$offset += $steps;

			if ( empty( $posts ) ) {
				continue;
			}

			foreach ( $posts as $post ) {
				$post_id = (int) $post->ID;
				if ( ! Sitemap::is_object_indexable( $post_id ) ) {
					continue;
				}

				$url = $this->get_url( $post );
				if ( ! isset( $url['loc'] ) ) {
					continue;
				}

				/**
				 * Filter URL entry before it gets added to the sitemap.
				 *
				 * @param array  $url  Array of URL parts.
				 * @param string $type URL type.
				 * @param object $user Data object for the URL.
				 */
				$url = $this->do_filter( 'sitemap/entry', $url, 'post', $post );
				if ( empty( $url ) ) {
					continue;
				}

				$stacked_urls[] = $url['loc'];
				if ( $post_id === $this->get_page_for_posts_id() || $post_id === $this->get_page_on_front_id() ) {
					array_unshift( $links, $url );
					continue;
				}
				$links[] = $url;
			}

			unset( $post, $url );
		}

		return $links;
	}

	/**
	 * Update the query to exclude canonical posts.
	 *
	 * @param string $join_filter  The join filter.
	 * @param string $where_filter The where filter.
	 * @param array  $post_types   The post types.
	 *
	 * @return void
	 */
	private function maybe_update_query_to_exclude_posts_with_canonical_urls( &$join_filter, &$where_filter, $post_types ) {
		/**
		 * Allows to decide if canonical urls should be excluded from the sitemap.
		 *
		 * @param bool $exlude_posts_with_canonical_urls
		 * @param array|string $post_types The post types.
		 */
		$exlude_posts_with_canonical_urls = $this->do_filter( 'sitemap/exlude_posts_with_canonical_urls', false, $post_types );
		if ( ! $exlude_posts_with_canonical_urls ) {
			return;
		}

		global $wpdb;
		$join_filter  .= " LEFT JOIN {$wpdb->postmeta} AS pm_canonical ON ( p.ID = pm_canonical.post_id AND pm_canonical.meta_key = 'rank_math_canonical_url' )";
		$where_filter .= ' AND pm_canonical.meta_value IS NULL';
	}

	/**
	 * Get count of posts for post type.
	 *
	 * @param string $post_types Post types to retrieve count for.
	 *
	 * @return int
	 */
	protected function get_post_type_count( $post_types ) {
		global $wpdb;

		$posts_to_exclude = 'page' === $post_types ? $this->get_blog_page_id() : '';
		$post_status      = 'attachment' === $post_types ? [ 'publish', 'inherit' ] : [ 'publish' ];

		/**
		 * Filter to add a JOIN clause for get_post_type_count(post types) query.
		 *
		 * @param string $join       SQL join clause, defaults to an empty string.
		 * @param array  $post_types Post types.
		 */
		$join_filter = $this->do_filter( 'sitemap/post_count/join', '', $post_types );

		/**
		 * Filter to add a WHERE clause for get_post_type_count(post types) query.
		 *
		 * @param string $where      SQL WHERE query, defaults to an empty string.
		 * @param array  $post_types Post types.
		 */
		$where_filter = $this->do_filter( 'sitemap/post_count/where', '', $post_types );

		$this->maybe_update_query_to_exclude_posts_with_canonical_urls( $join_filter, $where_filter, $post_types );

		$sql = "SELECT COUNT( DISTINCT p.ID ) as count FROM {$wpdb->posts} as p
		{$join_filter}
		LEFT JOIN {$wpdb->postmeta} AS pm ON ( p.ID = pm.post_id AND pm.meta_key = 'rank_math_robots' )
		WHERE (
			( pm.meta_key = 'rank_math_robots' AND pm.meta_value NOT LIKE '%noindex%' ) OR
			pm.post_id IS NULL
		)
		AND p.post_type = '{$post_types}' AND p.post_status IN ( '" . join( "', '", esc_sql( $post_status ) ) . "' ) AND p.post_password = ''
		AND p.ID != '{$posts_to_exclude}'
		{$where_filter}";

		return (int) DB_Helper::get_var( $sql );
	}

	/**
	 * Produces set of links to prepend at start of first sitemap page.
	 *
	 * @param string $post_type Post type to produce links for.
	 *
	 * @return array
	 */
	protected function get_first_links( $post_type ) {

		$links         = [];
		$needs_archive = true;

		if ( ! $this->get_page_on_front_id() && ( 'post' === $post_type || 'page' === $post_type ) ) {
			$needs_archive = false;
			$links[]       = [
				'loc' => $this->get_home_url(),
				'mod' => Sitemap::get_last_modified_gmt( $post_type ),
			];
		} elseif ( $this->get_page_on_front_id() && 'post' === $post_type && $this->get_page_for_posts_id() ) {
			$needs_archive = false;
			$post_id       = $this->get_page_for_posts_id();

			if ( Sitemap::is_object_indexable( $post_id ) ) {
				$links[] = $this->get_single_post_row_data( get_post( $post_id ) );
			}
		}

		if ( ! $needs_archive ) {
			return array_filter( $links );
		}

		$archive_url = $this->get_post_type_archive_link( $post_type );

		/**
		 * Filter the URL Rank Math SEO uses in the XML sitemap for this post type archive.
		 *
		 * @param string $archive_url The URL of this archive
		 * @param string $post_type   The post type this archive is for.
		 */
		$archive_url = $this->do_filter( 'sitemap/post_type_archive_link', $archive_url, $post_type );

		if ( $archive_url ) {
			$links[] = [
				'loc' => $archive_url,
				'mod' => Sitemap::get_last_modified_gmt( $post_type ),
			];
		}

		return $links;
	}

	/**
	 * Get URL for a post type archive.
	 *
	 * @param string $post_type Post type.
	 *
	 * @return string|boolean URL or false if it should be excluded.
	 */
	protected function get_post_type_archive_link( $post_type ) {
		// Post archive should be excluded if it isn't front page or posts page.
		if ( 'post' === $post_type && get_option( 'show_on_front' ) !== 'posts' && ! $this->get_page_for_posts_id() ) {
			return false;
		}

		return get_post_type_archive_link( $post_type );
	}

	/**
	 * Retrieve set of posts with optimized query routine.
	 *
	 * @param array $post_types Post type to retrieve.
	 * @param int   $count      Count of posts to retrieve.
	 * @param int   $offset     Starting offset.
	 *
	 * @return object[]
	 */
	protected function get_posts( $post_types, $count, $offset ) {
		global $wpdb;

		$posts_to_exclude = 'page' === $post_types ? $this->get_blog_page_id() : '';
		$post_status      = 'attachment' === $post_types ? [ 'publish', 'inherit' ] : [ 'publish' ];

		/**
		 * Filter to add a JOIN clause for get_posts(types) query.
		 *
		 * @param string $join       SQL join clause, defaults to an empty string.
		 * @param array  $post_types Post types.
		 */
		$join_filter = $this->do_filter( 'sitemap/get_posts/join', '', $post_types );

		/**
		 * Filter to add a WHERE clause for get_posts(types) query.
		 *
		 * @param string $where      SQL WHERE query, defaults to an empty string.
		 * @param array  $post_types Post types.
		 */
		$where_filter = $this->do_filter( 'sitemap/get_posts/where', '', $post_types );

		$this->maybe_update_query_to_exclude_posts_with_canonical_urls( $join_filter, $where_filter, [ $post_types ] );

		$sql = "
			SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_modified_gmt, post_date, post_date_gmt, post_type
			FROM (
				SELECT DISTINCT p.ID FROM {$wpdb->posts} as p
				{$join_filter}
				LEFT JOIN {$wpdb->postmeta} AS pm ON ( p.ID = pm.post_id AND pm.meta_key = 'rank_math_robots' )
				WHERE (
					( pm.meta_key = 'rank_math_robots' AND pm.meta_value NOT LIKE '%noindex%' ) OR
					pm.post_id IS NULL
				)
				AND p.post_type = '{$post_types}' AND p.post_status IN ( '" . join( "', '", esc_sql( $post_status ) ) . "' ) AND p.post_password = ''
				AND p.ID != '{$posts_to_exclude}'
				{$where_filter}
				ORDER BY p.post_modified DESC LIMIT %d OFFSET %d
			)
			o JOIN {$wpdb->posts} l ON l.ID = o.ID
		";

		$posts = DB_Helper::get_results( $wpdb->prepare( $sql, $count, $offset ) );

		$post_ids = [];
		foreach ( $posts as $post ) {
			$post->post_status = 'publish';
			$post->filter      = 'sample';
			$post_ids[]        = $post->ID;
		}

		update_meta_cache( 'post', $post_ids );

		return $posts;
	}

	/**
	 * Get where clause to query data.
	 *
	 * @param array $post_types Post types slug.
	 *
	 * @return string
	 */
	protected function get_sql_where_clause( $post_types ) {
		global $wpdb;

		$join   = '';
		$status = "{$wpdb->posts}.post_status = 'publish'";

		// Based on WP_Query->get_posts(). R.
		if ( in_array( 'attachment', $post_types, true ) ) {
			$join   = " LEFT JOIN {$wpdb->posts} AS p2 ON ({$wpdb->posts}.post_parent = p2.ID) ";
			$status = "p2.post_status = 'publish'";
		}

		$where_clause = "
		{$join}
		WHERE {$status}
			AND {$wpdb->posts}.post_type IN ( '" . join( "', '", esc_sql( $post_types ) ) . "' )
			AND {$wpdb->posts}.post_password = ''
		";

		return $where_clause;
	}

	/**
	 * Produce array of URL parts for given post object.
	 *
	 * @param object $post Post object to get URL parts for.
	 *
	 * @return array|boolean
	 */
	protected function get_url( $post ) {
		/**
		 * Filter the post object before it gets added to the sitemap.
		 * This allows you to add custom properties to the post object, or replace it entirely.
		 *
		 * @param object $post Post object.
		 */
		$post = $this->do_filter( 'sitemap/post_object', $post );

		if ( ! $post ) {
			return false;
		}

		return $this->get_single_post_row_data( $post );
	}

	/**
	 * Get the url parts for a single post.
	 *
	 * @param object $post Post object.
	 *
	 * @return array|false
	 */
	private function get_single_post_row_data( $post ) {
		/**
		 * Filter the URL Rank Math SEO uses in the XML sitemap.
		 *
		 * Note that only absolute local URLs are allowed as the check after this removes external URLs.
		 *
		 * @param string $url  URL to use in the XML sitemap
		 * @param object $post Post object for the URL.
		 */
		$url = [ 'loc' => $this->do_filter( 'sitemap/xml_post_url', get_permalink( $post ), $post ) ];

		/**
		 * Do not include external URLs.
		 *
		 * @see https://wordpress.org/plugins/page-links-to/ can rewrite permalinks to external URLs.
		 */
		if ( 'external' === $this->get_classifier()->classify( $url['loc'] ) ) {
			return false;
		}
		$canonical = Helper::get_post_meta( 'canonical_url', $post->ID );

		if ( '' !== $canonical && $canonical !== $url['loc'] ) {
			/*
			 * Let's assume that if a canonical is set for this page and it's different from
			 * the URL of this post, that page is either already in the XML sitemap OR is on
			 * an external site, either way, we shouldn't include it here.
			 */
			return false;
		}

		$modified = max( $post->post_modified_gmt, $post->post_date_gmt );
		if ( '0000-00-00 00:00:00' !== $modified ) {
			$url['mod'] = $modified;
		}

		$url['images'] = ! is_null( $this->get_image_parser() ) ? $this->get_image_parser()->get_images( $post ) : [];

		return $url;
	}

	/**
	 * Get front page ID.
	 *
	 * @return int
	 */
	protected function get_page_on_front_id() {
		if ( is_null( $this->page_on_front_id ) ) {
			$this->page_on_front_id = intval( get_option( 'page_on_front' ) );
		}

		return $this->page_on_front_id;
	}

	/**
	 * Get page for posts ID.
	 *
	 * @return int
	 */
	protected function get_page_for_posts_id() {
		if ( is_null( $this->page_for_posts_id ) ) {
			$this->page_for_posts_id = intval( get_option( 'page_for_posts' ) );
		}

		return $this->page_for_posts_id;
	}

	/**
	 * Get the Image Parser.
	 *
	 * @return Image_Parser
	 */
	protected function get_image_parser() {
		if ( is_null( $this->image_parser ) ) {
			$this->image_parser = new Image_Parser();
		}

		return $this->image_parser;
	}

	/**
	 * Get the link classifier.
	 *
	 * @return Classifier
	 */
	protected function get_classifier() {
		if ( is_null( $this->classifier ) ) {
			$this->classifier = new Classifier( $this->get_home_url() );
		}

		return $this->classifier;
	}

	/**
	 * Get Home URL.
	 *
	 * This has been moved from the constructor because wp_rewrite is not available on plugins_loaded in multisite.
	 * It will now be requested on need and not on initialization.
	 *
	 * @return string
	 */
	protected function get_home_url() {
		if ( is_null( $this->home_url ) ) {
			$this->home_url = user_trailingslashit( get_home_url() );
		}

		return $this->home_url;
	}

	/**
	 * Get Blog page id.
	 *
	 * @return int
	 */
	private function get_blog_page_id() {
		return get_option( 'show_on_front' ) === 'page' && $this->get_page_for_posts_id() ? $this->get_page_for_posts_id() : '';
	}
}
PK     ¥ŠU]ŒÛ      ,  includes/modules/sitemap/providers/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]0.1~H"  H"  5  includes/modules/sitemap/providers/class-taxonomy.phpnu „[µü¤        <?php
/**
 * The sitemap provider for taxonomies.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap\Providers;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Sitemap\Router;
use RankMath\Sitemap\Sitemap;
use RankMath\Sitemap\Image_Parser;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Taxonomy provider
 */
class Taxonomy implements Provider {

	use Hooker;

	/**
	 * Holds image parser instance.
	 *
	 * @var Image_Parser
	 */
	protected static $image_parser;

	/**
	 * Check if provider supports given item type.
	 *
	 * @param  string $type Type string to check for.
	 * @return boolean
	 */
	public function handles_type( $type ) {
		if ( is_a( $type, 'WP_Taxonomy' ) ) {
			$type = $type->name;
		}

		if (
			empty( $type ) ||
			false === taxonomy_exists( $type ) ||
			false === Helper::is_taxonomy_viewable( $type ) ||
			false === Helper::get_settings( 'sitemap.tax_' . $type . '_sitemap' ) ||
			in_array( $type, [ 'link_category', 'nav_menu', 'post_format' ], true )
		) {
			return false;
		}

		/**
		 * Filter decision if taxonomy is excluded from the XML sitemap.
		 *
		 * @param bool   $exclude Default false.
		 * @param string $type    Taxonomy name.
		 */
		return ! $this->do_filter( 'sitemap/exclude_taxonomy', false, $type );
	}

	/**
	 * Get set of sitemaps index link data.
	 *
	 * @param  int $max_entries Entries per sitemap.
	 * @return array
	 */
	public function get_index_links( $max_entries ) {
		$taxonomies = Helper::get_accessible_taxonomies();
		$taxonomies = array_filter( $taxonomies, [ $this, 'handles_type' ] );
		if ( empty( $taxonomies ) ) {
			return [];
		}

		// Retrieve all the taxonomies and their terms so we can do a proper count on them.
		/**
		 * Filter the setting of excluding empty terms from the XML sitemap.
		 *
		 * @param boolean $exclude        Defaults to true.
		 * @param array   $taxonomy_name Array of names for the taxonomies being processed.
		 */
		$hide_empty = $this->do_filter( 'sitemap/exclude_empty_terms', true, $taxonomies );

		$all_taxonomies = [];
		foreach ( $taxonomies as $taxonomy_name => $object ) {
			$or_meta_query = ! Helper::is_taxonomy_indexable( $taxonomy_name ) ? [] :
				[
					'key'     => 'rank_math_robots',
					'compare' => 'NOT EXISTS',
				];

			$all_taxonomies[ $taxonomy_name ] = get_terms(
				[
					'taxonomy'   => $taxonomy_name,
					'hide_empty' => $hide_empty,
					'fields'     => 'ids',
					'orderby'    => 'name',
					'meta_query' => [
						'relation' => 'OR',
						[
							'key'     => 'rank_math_robots',
							'value'   => 'noindex',
							'compare' => 'NOT LIKE',
						],
						$or_meta_query,
					],
				]
			);
		}

		$index = [];
		foreach ( $all_taxonomies as $tax_name => $terms ) {
			if ( is_wp_error( $terms ) ) {
				continue;
			}

			$max_pages   = 1;
			$total_count = empty( $terms ) ? 1 : count( $terms );
			if ( $total_count > $max_entries ) {
				$max_pages = (int) ceil( $total_count / $max_entries );
			}

			$tax = $taxonomies[ $tax_name ];
			if ( ! is_array( $tax->object_type ) || count( $tax->object_type ) === 0 ) {
				continue;
			}

			$last_modified_gmt = Sitemap::get_last_modified_gmt( $tax->object_type );
			for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) {
				$current_page = ( $max_pages > 1 ) ? ( $page_counter + 1 ) : '';
				$terms_page   = array_splice( $terms, 0, $max_entries );
				if ( ! $terms_page ) {
					continue;
				}

				$query = new \WP_Query(
					[
						'post_type'      => $tax->object_type,
						'tax_query'      => [
							[
								'taxonomy' => $tax_name,
								'terms'    => $terms_page,
							],
						],
						'orderby'        => 'modified',
						'order'          => 'DESC',
						'posts_per_page' => 1,
					]
				);

				$item = $this->do_filter(
					'sitemap/index/entry',
					[
						'loc'     => Router::get_base_url( $tax_name . '-sitemap' . $current_page . '.xml' ),
						'lastmod' => $query->have_posts() ? $query->posts[0]->post_modified_gmt : $last_modified_gmt,
					],
					'term',
					$tax_name,
				);

				if ( ! $item ) {
					continue;
				}

				$index[] = $item;
			}
		}

		return $index;
	}

	/**
	 * Get set of sitemap link data.
	 *
	 * @param  string $type         Sitemap type.
	 * @param  int    $max_entries  Entries per sitemap.
	 * @param  int    $current_page Current page of the sitemap.
	 * @return array
	 */
	public function get_sitemap_links( $type, $max_entries, $current_page ) {
		$links    = [];
		$taxonomy = get_taxonomy( $type );
		$terms    = $this->get_terms( $taxonomy, $max_entries, $current_page );
		Sitemap::maybe_redirect( count( $this->get_terms( $taxonomy, 0, $current_page ) ), $max_entries );

		foreach ( $terms as $term ) {
			$url = [];
			if ( ! Sitemap::is_object_indexable( $term, 'term' ) ) {
				continue;
			}

			$link = $this->get_term_link( $term );
			if ( ! $link ) {
				continue;
			}

			$url['loc']    = $link;
			$url['mod']    = $this->get_lastmod( $term );
			$url['images'] = ! is_null( $this->get_image_parser() ) ? $this->get_image_parser()->get_term_images( $term ) : [];

			/** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */
			$url = $this->do_filter( 'sitemap/entry', $url, 'term', $term );

			if ( ! empty( $url ) ) {
				$links[] = $url;
			}
		}

		return $links;
	}

	/**
	 * Get the Image Parser.
	 *
	 * @return Image_Parser
	 */
	protected function get_image_parser() {
		if ( class_exists( 'RankMath\Sitemap\Image_Parser' ) && ! isset( self::$image_parser ) ) {
			self::$image_parser = new Image_Parser();
		}

		return self::$image_parser;
	}

	/**
	 * Get terms for taxonomy.
	 *
	 * @param  object $taxonomy     Taxonomy name.
	 * @param  int    $max_entries  Entries per sitemap.
	 * @param  int    $current_page Current page of the sitemap.
	 * @return false|array
	 */
	private function get_terms( $taxonomy, $max_entries, $current_page ) {
		$offset     = $current_page > 1 ? ( ( $current_page - 1 ) * $max_entries ) : 0;
		$hide_empty = ! Helper::get_settings( 'sitemap.tax_' . $taxonomy->name . '_include_empty' );

		// Getting terms.
		$terms = get_terms(
			[
				'taxonomy'               => $taxonomy->name,
				'orderby'                => 'term_order',
				'hide_empty'             => $hide_empty,
				'offset'                 => $offset,
				'number'                 => $max_entries,
				'exclude'                => wp_parse_id_list( Helper::get_settings( 'sitemap.exclude_terms' ) ),

				/*
				 * Limits aren't included in queries when hierarchical is set to true (by default).
				 *
				 * @link: https://github.com/WordPress/WordPress/blob/5.3/wp-includes/class-wp-term-query.php#L558-L567
				 */
				'hierarchical'           => false,
				'update_term_meta_cache' => false,
				'meta_query'             => [
					'relation' => 'OR',
					[
						'key'     => 'rank_math_robots',
						'value'   => 'noindex',
						'compare' => 'NOT LIKE',
					],
					[
						'key'     => 'rank_math_robots',
						'compare' => 'NOT EXISTS',
					],
				],
			]
		);

		if ( is_wp_error( $terms ) || empty( $terms ) ) {
			return [];
		}

		return $terms;
	}

	/**
	 * Get term link.
	 *
	 * @param  WP_Term $term Term object.
	 * @return string
	 */
	private function get_term_link( $term ) {
		$url       = get_term_link( $term, $term->taxonomy );
		$canonical = Helper::get_term_meta( 'canonical_url', $term, $term->taxonomy );
		if ( $canonical && $canonical !== $url ) {
			/*
			 * Let's assume that if a canonical is set for this term and it's different from
			 * the URL of this term, that page is either already in the XML sitemap OR is on
			 * an external site, either way, we shouldn't include it here.
			 */
			return false;
		}

		return $url;
	}

	/**
	 * Get last modified date of post by term.
	 *
	 * @param  WP_Term $term Term object.
	 * @return string
	 */
	public function get_lastmod( $term ) {
		global $wpdb;

		return DB_Helper::get_var(
			$wpdb->prepare(
				"
			SELECT MAX(p.post_modified_gmt) AS lastmod
			FROM	$wpdb->posts AS p
			INNER JOIN $wpdb->term_relationships AS term_rel
				ON		term_rel.object_id = p.ID
			INNER JOIN $wpdb->term_taxonomy AS term_tax
				ON		term_tax.term_taxonomy_id = term_rel.term_taxonomy_id
				AND		term_tax.taxonomy = %s
				AND		term_tax.term_id = %d
			WHERE	p.post_status IN ('publish', 'inherit')
				AND		p.post_password = ''
		",
				$term->taxonomy,
				$term->term_id
			)
		);
	}
}
PK     ¥ŠU]mónø}  }  9  includes/modules/sitemap/providers/interface-provider.phpnu „[µü¤        <?php
/**
 * The sitemap provider interface.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap\Providers;

defined( 'ABSPATH' ) || exit;

/**
 * Provider interface.
 */
interface Provider {

	/**
	 * Check if provider supports given item type.
	 *
	 * @param  string $type Type string to check for.
	 * @return boolean
	 */
	public function handles_type( $type );

	/**
	 * Get set of sitemaps index link data.
	 *
	 * @param  int $max_entries Entries per sitemap.
	 * @return array
	 */
	public function get_index_links( $max_entries );

	/**
	 * Get set of sitemap link data.
	 *
	 * @param  string $type         Sitemap type.
	 * @param  int    $max_entries  Entries per sitemap.
	 * @param  int    $current_page Current page of the sitemap.
	 * @return array
	 */
	public function get_sitemap_links( $type, $max_entries, $current_page );
}
PK     ¥ŠU]ù)îÏ_   _   3  includes/modules/sitemap/providers/class-author.phpnu „[µü¤        <?php
/**
 * The sitemap provider for author archives.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap\Providers;

use DateTime;
use DateTimeZone;
use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Sitemap\Router;
use RankMath\Sitemap\Sitemap;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Author class.
 */
class Author implements Provider {

	use Hooker;

	/**
	 * Holds the Sitemap slug.
	 *
	 * @var string
	 */
	protected $sitemap_slug = null;


	/**
	 * The constructor.
	 */
	public function __construct() {
		$this->sitemap_slug = Router::get_sitemap_slug( 'author' );

		$this->filter( 'rank_math/sitemap/author/query', 'exclude_users', 5 );
		$this->filter( 'rank_math/sitemap/author/query', 'exclude_roles', 5 );
		$this->filter( 'rank_math/sitemap/author/query', 'exclude_post_types', 5 );
	}

	/**
	 * Check if provider supports given item type.
	 *
	 * @param  string $type Type string to check for.
	 * @return boolean
	 */
	public function handles_type( $type ) {
		return $this->sitemap_slug === $type && Helper::get_settings( 'sitemap.authors_sitemap' );
	}

	/**
	 * Get set of sitemaps index link data.
	 *
	 * @param  int $max_entries Entries per sitemap.
	 * @return array
	 */
	public function get_index_links( $max_entries ) {
		if ( ! Helper::get_settings( 'sitemap.authors_sitemap' ) ) {
			return [];
		}

		$users = $this->get_index_users();
		if ( empty( $users ) ) {
			return [];
		}

		$page       = 1;
		$index      = [];
		$user_pages = array_chunk( $users, $max_entries );

		if ( 1 === count( $user_pages ) ) {
			$page = 0;
		}

		foreach ( $user_pages as $user_page ) {
			$current_page = $page > 0 ? $page : '';
			$user         = array_shift( $user_page ); // Time descending, first user on page is most recently updated.
			$item         = $this->do_filter(
				'sitemap/index/entry',
				[
					'loc'     => Router::get_base_url( $this->sitemap_slug . '-sitemap' . $current_page . '.xml' ),
					'lastmod' => '@' . $user->last_update,
				],
				'author',
				$user
			);

			if ( ! $item ) {
				continue;
			}

			$index[] = $item;

			++$page;
		}

		return $index;
	}

	/**
	 * Get set of sitemap link data.
	 *
	 * @param  string $type         Sitemap type.
	 * @param  int    $max_entries  Entries per sitemap.
	 * @param  int    $current_page Current page of the sitemap.
	 * @return array
	 */
	public function get_sitemap_links( $type, $max_entries, $current_page ) {
		$links = [];

		if ( $current_page < 1 ) {
			$current_page = 1;
		}

		$users = $this->get_users(
			[
				'offset' => ( $current_page - 1 ) * $max_entries,
				'number' => $max_entries,
			]
		);

		if ( empty( $users ) ) {
			return $links;
		}

		Sitemap::maybe_redirect( count( $users ), $max_entries );
		foreach ( $users as $user ) {
			$url = $this->get_sitemap_url( $user );
			if ( ! empty( $url ) ) {
				$links[] = $url;
			}
		}

		return $links;
	}

	/**
	 * Get sitemap urlset.
	 *
	 * @param WP_User $user User instance.
	 *
	 * @return bool|array
	 */
	private function get_sitemap_url( $user ) {
		$author_link = get_author_posts_url( $user->ID );
		if ( empty( $author_link ) ) {
			return false;
		}

		$mod = isset( $user->last_update ) ? $user->last_update : strtotime( $user->user_registered );

		$date = new DateTime();
		$date->setTimestamp( $mod );
		$date->setTimezone( new DateTimeZone( 'UTC' ) );

		$url = [
			'loc' => $author_link,
			'mod' => $date->format( DATE_W3C ),
		];

		/** This filter is documented at includes/modules/sitemap/providers/class-post-type.php */
		return $this->do_filter( 'sitemap/entry', $url, 'user', $user );
	}

	/**
	 * Retrieve users, taking account of all necessary exclusions.
	 *
	 * @param  array $args Arguments to add.
	 * @return array
	 */
	public function get_users( $args = [] ) {
		$defaults = [
			'orderby'    => 'meta_value_num',
			'order'      => 'DESC',
			// phpcs:ignore WordPress.DB.SlowDBQuery -- Needed to generate the author sitemap by comparing values stored in the meta table
			'meta_query' => [
				'relation' => 'AND',
				[
					'relation' => 'OR',
					[
						'key' => 'last_update',
					],
					[
						'key'     => 'last_update',
						'compare' => 'NOT EXISTS',
					],
				],
				[
					'relation' => 'OR',
					[
						'key'     => 'rank_math_robots',
						'value'   => 'noindex',
						'compare' => 'NOT LIKE',
					],
					[
						'key'     => 'rank_math_robots',
						'compare' => 'NOT EXISTS',
					],
				],
			],
		];

		$args = $this->do_filter( 'sitemap/author/query', wp_parse_args( $args, $defaults ) );

		if ( Helper::get_settings( 'sitemap.include_authors_without_posts' ) ) {
			$args['has_published_posts'] = false;
		}

		return get_users( $args );
	}

	/**
	 * Exclude users.
	 *
	 * @param array $args Array of user query arguments.
	 *
	 * @return array
	 */
	public function exclude_users( $args ) {
		$exclude = Helper::get_settings( 'sitemap.exclude_users' );
		if ( ! empty( $exclude ) ) {
			$args['exclude'] = wp_parse_id_list( $exclude );
		}

		return $args;
	}

	/**
	 * Exclude roles.
	 *
	 * @param array $args Array of user query arguments.
	 *
	 * @return array
	 */
	public function exclude_roles( $args ) {
		$exclude_roles = Helper::get_settings( 'sitemap.exclude_roles' );
		if ( ! empty( $exclude_roles ) ) {
			$args['role__not_in'] = $exclude_roles;
		}

		return $args;
	}

	/**
	 * Exclude post types.
	 *
	 * @param array $args Array of user query arguments.
	 *
	 * @return array
	 */
	public function exclude_post_types( $args ) {
		// Exclude post types.
		$public_post_types = get_post_types( [ 'public' => true ] );

		// We're not supporting sitemaps for author pages for attachments.
		unset( $public_post_types['attachment'] );

		if ( ! Helper::get_settings( 'sitemap.include_authors_without_posts' ) ) {
			$args['has_published_posts'] = array_keys( $public_post_types );
		}

		return $args;
	}

	/**
	 * Get all users according to author sitemap settings.
	 *
	 * @return array
	 */
	private function get_index_users() {
		global $wpdb;
		$table_prefix                  = $wpdb->get_blog_prefix();
		$include_authors_without_posts = Helper::get_settings( 'sitemap.include_authors_without_posts' );
		$exclude_users                 = Helper::get_settings( 'sitemap.exclude_users' );
		$exclude_roles                 = Helper::get_settings( 'sitemap.exclude_roles' );
		$exclude_users_query           = ! $exclude_users ? '' : 'AND post_author NOT IN ( ' . esc_sql( $exclude_users ) . ' )';
		$exclude_roles_query           = '';
		$meta_query                    = "(
		 		( um.meta_key = 'rank_math_robots' AND um.meta_value NOT LIKE '%noindex%' )
		 		OR um.user_id IS NULL
			)
			AND (  umt1.meta_key = 'last_update' OR umt1.user_id IS NULL )
			";
		if ( $exclude_roles ) {
			$exclude_roles_query = "AND ( umt.meta_key ='{$table_prefix}capabilities' AND ( ";
			foreach ( $exclude_roles as $key => $role ) {
				$exclude_roles_query .= 0 === $key ? " umt.meta_value NOT LIKE '%" . esc_sql( $role ) . "%'" : " AND umt.meta_value NOT LIKE '%" . esc_sql( $role ) . "%'";
			}

			$exclude_roles_query .= ' ) )';
		}

		$meta_query .= $exclude_roles_query;

		$include_authors_without_posts_query = $include_authors_without_posts ? '' : "AND u.ID IN (
			SELECT post_author
			FROM {$wpdb->posts} as p
			WHERE p.post_status = 'publish' AND p.post_password = ''
			{$exclude_users_query}
		)";

		$sql = "
		SELECT u.ID, umt1.meta_value as last_update
		FROM {$wpdb->users} as u
		    LEFT JOIN {$wpdb->usermeta} AS um ON ( u.ID = um.user_id AND um.meta_key = 'rank_math_robots' )
		    LEFT JOIN {$wpdb->usermeta} AS umt ON ( u.ID = umt.user_id AND umt.meta_key = '{$table_prefix}capabilities' )
		    LEFT JOIN {$wpdb->usermeta} AS umt1 ON ( u.ID = umt1.user_id AND umt1.meta_key = 'last_update' )
		    WHERE ( {$meta_query} )
		    {$include_authors_without_posts_query}
		ORDER BY umt1.meta_value DESC
		 ";

		return DB_Helper::get_results( $sql );
	}
}
PK     ¥ŠU]F³Ÿó  ó  )  includes/modules/sitemap/class-router.phpnu „[µü¤        <?php
/**
 * The sitemap URL rewrite setup and handling functionality.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Url;

defined( 'ABSPATH' ) || exit;

/**
 * Router class.
 */
class Router {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init', 1 );
		$this->action( 'parse_query', 'request_sitemap', 1 );
		$this->action( 'template_redirect', 'template_redirect', 0 );
		$this->action( 'after_setup_theme', 'reduce_query_load', 99 );
	}

	/**
	 * Sets up rewrite rules.
	 */
	public function init() {
		global $wp;

		$base = self::get_sitemap_base();
		$wp->add_query_var( 'sitemap' );
		$wp->add_query_var( 'sitemap_n' );
		$wp->add_query_var( 'xsl' );

		add_rewrite_rule( $base . Sitemap::get_sitemap_index_slug() . '\\.xml$', 'index.php?sitemap=1', 'top' );
		add_rewrite_rule( $base . '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' );
		add_rewrite_rule( $base . '([a-z]+)?-?sitemap\.xsl$', 'index.php?xsl=$matches[1]', 'top' );
	}

	/**
	 * Serves sitemap when needed using correct sitemap module.
	 *
	 * @param WP_Query $query The WP_Query instance (passed by reference).
	 */
	public function request_sitemap( $query ) {
		if ( ! $query->is_main_query() ) {
			return;
		}

		$xsl = self::get_sitemap_slug( get_query_var( 'xsl' ) );
		if ( ! empty( $xsl ) ) {
			$this->filter( 'user_has_cap', 'filter_user_has_cap' );
			$stylesheet = new Stylesheet();
			$stylesheet->output( $xsl );
			return;
		}

		$type = get_query_var( 'sitemap' );
		if ( empty( $type ) ) {
			return;
		}

		new Sitemap_XML( $type );
	}

	/**
	 * Check the current request URI, if we can determine it's probably an XML sitemap, kill loading the widgets.
	 */
	public function reduce_query_load() {
		if ( ! isset( $_SERVER['REQUEST_URI'] ) ) {
			return;
		}
		$request   = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
		$extension = substr( $request, -4 );
		if ( Str::contains( 'sitemap', $request ) && in_array( $extension, [ '.xml', '.xsl' ], true ) ) {
			remove_all_actions( 'widgets_init' );
		}
	}

	/**
	 * Redirects `sitemap.xml` to `sitemap_index.xml`.
	 */
	public function template_redirect() {
		if ( ! $this->needs_sitemap_index_redirect() ) {
			return;
		}

		Helper::redirect( home_url( '/' . Sitemap::get_sitemap_index_slug() . '.xml' ), 301 );
		exit;
	}

	/**
	 * Checks whether the current request needs to be redirected to sitemap_index.xml.
	 *
	 * @return bool True if redirect is needed, false otherwise.
	 */
	public function needs_sitemap_index_redirect() {
		global $wp_query;

		return $wp_query->is_404 && home_url( '/sitemap.xml' ) === Url::get_current_url();
	}

	/**
	 * Create base URL for the sitemap.
	 *
	 * @param string $page Page to append to the base URL.
	 *
	 * @return string base URL (incl page)
	 */
	public static function get_base_url( $page ) {
		$page = self::get_page_url( $page );
		$base = self::get_sitemap_base();
		return home_url( $base . $page );
	}

	/**
	 * Create base URL for the sitemap.
	 *
	 * @since 1.0.43
	 *
	 * @return string Sitemap base.
	 */
	public static function get_sitemap_base() {
		global $wp_rewrite;

		$base = $wp_rewrite->using_index_permalinks() ? $wp_rewrite->index . '/' : '';

		/**
		 * Filter the base URL of the sitemaps.
		 *
		 * @param string $base The string that should be added to home_url() to make the full base URL.
		 */
		return apply_filters( 'rank_math/sitemap/base_url', $base );
	}

	/**
	 * Get sitemap slug.
	 *
	 * @param string $type Sitemap type.
	 * @return string
	 */
	public static function get_sitemap_slug( $type ) {
		/**
		 * Filter the slug of the sitemap.
		 *
		 * @param string $slug Slug of the sitemap.
		 */
		return apply_filters( "rank_math/sitemap/{$type}/slug", $type );
	}

	/**
	 * Get page URL for the sitemap.
	 *
	 * @param string $page Page to append to the base URL.
	 *
	 * @return string
	 */
	public static function get_page_url( $page ) {
		global $wp_rewrite;

		if ( $wp_rewrite->using_permalinks() ) {
			return $page;
		}

		if ( Sitemap::get_sitemap_index_slug() . '.xml' === $page ) {
			return '?sitemap=1';
		}

		$page = \preg_replace( '/([^\/]+?)-sitemap([0-9]+)?\.xml$/', '?sitemap=$1&sitemap_n=$2', $page );
		$page = \preg_replace( '/([a-z]+)?-?sitemap\.xsl$/', '?xsl=$1', $page );
		$page = str_replace( 'locations.kml', '?sitemap=locations', $page );

		return $page;
	}
}
PK     ¥ŠU]ŒÛ      +  includes/modules/sitemap/settings/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]<fžp	  	  -  includes/modules/sitemap/settings/authors.phpnu „[µü¤        <?php
/**
 * Sitemap settings - Authors tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$roles   = Helper::get_roles();
$default = $roles;
unset( $default['administrator'], $default['editor'], $default['author'] );

$dep = [
	'relation' => 'OR',
	[ 'authors_sitemap', 'on' ],
	[ 'authors_html_sitemap', 'on' ],
];

$cmb->add_field(
	[
		'id'      => 'authors_sitemap',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include in Sitemap', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include author archives in the XML sitemap.', 'seo-by-rank-math' ),
		'default' => 'on',
	]
);

$cmb->add_field(
	[
		'id'      => 'authors_html_sitemap',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include in HTML Sitemap', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include author archives in the HTML sitemap if it\'s enabled.', 'seo-by-rank-math' ),
		'default' => 'on',
		'classes' => [
			'rank-math-html-sitemap',
			! Helper::get_settings( 'sitemap.html_sitemap' ) ? 'hidden' : '',
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'include_authors_without_posts',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include Authors Without Posts', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enable this option to include authors in the sitemap even if they have not created any posts. This ensures all author archives are listed, regardless of content availability.', 'seo-by-rank-math' ),
		'default' => 'off',
		'classes' => 'rank-math-advanced-option cmb2-top-border',
		'dep'     => $dep,
	]
);

$cmb->add_field(
	[
		'id'                => 'exclude_roles',
		'type'              => 'multicheck',
		'name'              => esc_html__( 'Exclude User Roles', 'seo-by-rank-math' ),
		'desc'              => esc_html__( 'Selected roles will be excluded from the XML &amp; HTML sitemaps.', 'seo-by-rank-math' ),
		'options'           => $roles,
		'default'           => $default,
		'select_all_button' => false,
		'dep'               => $dep,
	]
);

$cmb->add_field(
	[
		'id'   => 'exclude_users',
		'type' => 'text',
		'name' => esc_html__( 'Exclude Users', 'seo-by-rank-math' ),
		'desc' => esc_html__( 'Add user IDs, separated by commas, to exclude them from the sitemap.', 'seo-by-rank-math' ),
		'dep'  => $dep,
	]
);
PK     ¥ŠU]+SÎ®§  §  0  includes/modules/sitemap/settings/taxonomies.phpnu „[µü¤        <?php
/**
 * Sitemap settings - taxonomy tabs.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$taxonomy_name = $tab['taxonomy'];
$prefix        = "tax_{$taxonomy_name}_";
$is_enabled    = 'category' === $taxonomy_name ? 'on' : 'off';

$cmb->add_field(
	[
		'id'      => $prefix . 'sitemap',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include in Sitemap', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include archive pages for terms of this taxonomy in the XML sitemap.', 'seo-by-rank-math' ),
		'default' => $is_enabled,
	]
);

$cmb->add_field(
	[
		'id'      => $prefix . 'html_sitemap',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include in HTML Sitemap', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include archive pages for terms of this taxonomy in the HTML sitemap.', 'seo-by-rank-math' ),
		'default' => $is_enabled,
		'classes' => [
			'rank-math-html-sitemap',
			! Helper::get_settings( 'sitemap.html_sitemap' ) ? 'hidden' : '',
		],
	]
);

$cmb->add_field(
	[
		'id'      => $prefix . 'include_empty',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include Empty Terms', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include archive pages of terms that have no posts associated.', 'seo-by-rank-math' ),
		'default' => 'off',
		'dep'     => [ [ $prefix . 'sitemap', 'on' ] ],
		'classes' => 'rank-math-advanced-option',
	]
);
PK     ¥ŠU]yíâ—ö  ö  0  includes/modules/sitemap/settings/post-types.phpnu „[µü¤        <?php
/**
 * Sitemap settings - post type tabs.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$attributes        = [];
$current_post_type = $tab['post_type'];
$prefix            = "pt_{$current_post_type}_";

if ( 'attachment' === $current_post_type && Helper::get_settings( 'general.attachment_redirect_urls', true ) ) {
	$cmb->add_field(
		[
			'id'      => 'attachment_redirect_urls_notice',
			'type'    => 'notice',
			'what'    => 'warning',
			/* translators: The settings page link */
			'content' => sprintf( __( 'To configure meta tags for your media attachment pages, you need to first %s to parent.', 'seo-by-rank-math' ), '<a href="' . esc_url( Helper::get_settings_url( 'general', 'links' ) ) . '">' . esc_html__( 'disable redirect attachments', 'seo-by-rank-math' ) . '</a>' ),
		]
	);
	$attributes['disabled'] = 'disabled';
}

$cmb->add_field(
	[
		'id'         => $prefix . 'sitemap',
		'type'       => 'toggle',
		'name'       => esc_html__( 'Include in Sitemap', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Include this post type in the XML sitemap.', 'seo-by-rank-math' ),
		'default'    => 'attachment' === $current_post_type ? 'off' : 'on',
		'attributes' => $attributes,
	]
);

$cmb->add_field(
	[
		'id'         => $prefix . 'html_sitemap',
		'type'       => 'toggle',
		'name'       => esc_html__( 'Include in HTML Sitemap', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Include this post type in the HTML sitemap if it\'s enabled.', 'seo-by-rank-math' ),
		'default'    => 'attachment' === $current_post_type ? 'off' : 'on',
		'attributes' => $attributes,
		'classes'    => [
			'rank-math-html-sitemap',
			! Helper::get_settings( 'sitemap.html_sitemap' ) ? 'hidden' : '',
		],
	]
);

if ( 'attachment' !== $current_post_type ) {
	$cmb->add_field(
		[
			'id'      => $prefix . 'image_customfields',
			'type'    => 'textarea_small',
			'name'    => esc_html__( 'Image Custom Fields', 'seo-by-rank-math' ),
			'desc'    => esc_html__( 'Insert custom field (post meta) names which contain image URLs to include them in the sitemaps. Add one per line.', 'seo-by-rank-math' ),
			'dep'     => [ [ $prefix . 'sitemap', 'on' ] ],
			'classes' => 'rank-math-advanced-option',
		]
	);
}
PK     ¥ŠU]^ˆ­�­  ­  2  includes/modules/sitemap/settings/html-sitemap.phpnu „[µü¤        <?php
/**
 * Sitemap settings - HTML Sitemap tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'html_sitemap',
		'type'    => 'toggle',
		'name'    => esc_html__( 'HTML Sitemap', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enable the HTML sitemap.', 'seo-by-rank-math' ),
		'default' => 'off',
	]
);

$cmb->add_field(
	[
		'id'      => 'html_sitemap_display',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Display Format', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Choose how you want to display the HTML sitemap.', 'seo-by-rank-math' ),
		'options' => [
			'shortcode' => esc_html__( 'Shortcode', 'seo-by-rank-math' ),
			'page'      => esc_html__( 'Page', 'seo-by-rank-math' ),
		],
		'default' => 'shortcode',
		'dep'     => [ [ 'html_sitemap', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'         => 'html_sitemap_shortcode',
		'type'       => 'text',
		'name'       => esc_html__( 'Shortcode', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Use this shortcode to display the HTML sitemap.', 'seo-by-rank-math' ),
		'default'    => '[rank_math_html_sitemap]',
		'dep'        => [
			'relation' => 'AND',
			[ 'html_sitemap', 'on' ],
			[ 'html_sitemap_display', 'shortcode' ],
		],
		'classes'    => 'rank-math-code',
		'attributes' => [
			'disabled' => 'disabled',
		],
	]
);

$rank_math_sitemap_page         = Helper::get_settings( 'sitemap.html_sitemap_page' );
$rank_math_sitemap_page_options = [ '' => __( 'Select Page', 'seo-by-rank-math' ) ];
$rank_math_sitemap_page_after   = '<p class="rank-math-selected-page-message hidden">' . esc_html__( 'Selected page: ', 'seo-by-rank-math' ) . '<span class="rank-math-selected-page"></span></p>';

if ( $rank_math_sitemap_page ) {
	$rank_math_sitemap_page_options[ $rank_math_sitemap_page ] = get_the_title( $rank_math_sitemap_page );

	$rank_math_sitemap_page_after = '<p class="rank-math-selected-page-message">' . sprintf(
		/* translators: link to the selected page */
		__( 'Selected page: <a href="%s" target="_blank" class="rank-math-selected-page">%s</a>', 'seo-by-rank-math' ), // phpcs:ignore
		get_permalink( $rank_math_sitemap_page ),
		get_permalink( $rank_math_sitemap_page )
	) . '</p>';
}

$cmb->add_field(
	[
		'id'         => 'html_sitemap_page',
		'type'       => 'select',
		'name'       => esc_html__( 'Page', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Select the page to display the HTML sitemap. Once the settings are saved, the sitemap will be displayed below the content of the selected page.', 'seo-by-rank-math' ),
		'options'    => $rank_math_sitemap_page_options,
		'dep'        => [
			'relation' => 'AND',
			[ 'html_sitemap', 'on' ],
			[ 'html_sitemap_display', 'page' ],
		],
		'after'      => $rank_math_sitemap_page_after,
		'attributes' => [
			'data-placeholder' => esc_html__( 'Select a page', 'seo-by-rank-math' ),
			'data-s2-pages'    => 'true',
		],
	]
);

$cmb->add_field(
	[
		'id'      => 'html_sitemap_sort',
		'type'    => 'select',
		'name'    => esc_html__( 'Sort By', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Choose how you want to sort the items in the HTML sitemap.', 'seo-by-rank-math' ),
		'options' => [
			// Published Date, Modified Date, Alphabetical, Post ID.
			'published'    => esc_html__( 'Published Date', 'seo-by-rank-math' ),
			'modified'     => esc_html__( 'Modified Date', 'seo-by-rank-math' ),
			'alphabetical' => esc_html__( 'Alphabetical', 'seo-by-rank-math' ),
			'post_id'      => esc_html__( 'Post ID', 'seo-by-rank-math' ),
		],
		'default' => 'published',
		'dep'     => [ [ 'html_sitemap', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'html_sitemap_show_dates',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Show Dates', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Show published dates for each post & page.', 'seo-by-rank-math' ),
		'default' => 'on',
		'dep'     => [ [ 'html_sitemap', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'html_sitemap_seo_titles',
		'type'    => 'radio_inline',
		'name'    => esc_html__( 'Item Titles', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Show the post/term titles, or the SEO titles in the HTML sitemap.', 'seo-by-rank-math' ),
		'options' => [
			'titles'     => esc_html__( 'Item Titles', 'seo-by-rank-math' ),
			'seo_titles' => esc_html__( 'SEO Titles', 'seo-by-rank-math' ),
		],
		'dep'     => [ [ 'html_sitemap', 'on' ] ],
		'default' => 'titles',
	]
);
PK     ¥ŠU]öÌJ
  
  -  includes/modules/sitemap/settings/general.phpnu „[µü¤        <?php
/**
 * Sitemap settings - General tab.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

defined( 'ABSPATH' ) || exit;

if ( class_exists( 'SitePress' ) ) {
	$cmb->add_field(
		[
			'id'      => 'multilingual_sitemap_notice',
			'type'    => 'notice',
			'what'    => 'warning',
			'content' => sprintf(
				/* translators: hreflang tags documentation link */
				esc_html__( 'Rank Math generates the default Sitemaps only and WPML takes care of the rest. When a search engine bot visits any post/page, it is shown hreflang tag that helps it crawl the translated pages. This is one of the recommended methods by Google. Please %s', 'seo-by-rank-math' ),
				'<a href="https://support.google.com/webmasters/answer/189077?hl=en" target="blank">' . esc_html__( 'read here', 'seo-by-rank-math' ) . '</a>'
			),
		]
	);
}

$cmb->add_field(
	[
		'id'         => 'items_per_page',
		'type'       => 'text',
		'name'       => esc_html__( 'Links Per Sitemap', 'seo-by-rank-math' ),
		'desc'       => esc_html__( 'Max number of links on each sitemap page.', 'seo-by-rank-math' ),
		'default'    => '200',
		'attributes' => [ 'type' => 'number' ],
		'classes'    => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'include_images',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Images in Sitemaps', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include reference to images from the post content in sitemaps. This helps search engines index the important images on your pages.', 'seo-by-rank-math' ),
		'default' => 'on',
	]
);

$cmb->add_field(
	[
		'id'      => 'include_featured_image',
		'type'    => 'toggle',
		'name'    => esc_html__( 'Include Featured Images', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Include the Featured Image too, even if it does not appear directly in the post content.', 'seo-by-rank-math' ),
		'default' => 'off',
		'dep'     => [ [ 'include_images', 'on' ] ],
	]
);

$cmb->add_field(
	[
		'id'      => 'exclude_posts',
		'type'    => 'text',
		'name'    => esc_html__( 'Exclude Posts', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Enter post IDs of posts you want to exclude from the sitemap, separated by commas. This option **applies** to all posts types including posts, pages, and custom post types.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
	]
);

$cmb->add_field(
	[
		'id'      => 'exclude_terms',
		'type'    => 'text',
		'name'    => esc_html__( 'Exclude Terms', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Add term IDs, separated by comma. This option is applied for all taxonomies.', 'seo-by-rank-math' ),
		'classes' => 'rank-math-advanced-option',
	]
);
PK     ¥ŠU].»ÌKk$  k$  *  includes/modules/sitemap/class-sitemap.phpnu „[µü¤        <?php
/**
 * The Sitemap module.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Helpers\Sitepress;
use RankMath\Traits\Hooker;
use RankMath\Sitemap\Html\Sitemap as Html_Sitemap;

defined( 'ABSPATH' ) || exit;

/**
 * Sitemap class.
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */
class Sitemap {

	use Hooker;

	/**
	 * Sitemap Index object.
	 *
	 * @var Sitemap_Index
	 */
	public $index;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		if ( is_admin() ) {
			new Admin();
		}

		if ( is_admin() || wp_doing_cron() ) {
			new Cache_Watcher();
		}

		new Router();
		$this->index = new Sitemap_Index();
		$this->index->hooks();
		new Redirect_Core_Sitemaps();
		new Html_Sitemap();

		add_action( 'rank_math/sitemap/hit_index', [ __CLASS__, 'hit_index' ] );

		$this->filter( 'rank_math/admin/notice/new_post_type', 'new_post_type_notice', 10, 2 );

		if ( class_exists( 'SitePress' ) ) {
			$this->filter( 'rank_math/sitemap/build_type', 'rank_math_build_sitemap_filter' );
			$this->filter( 'rank_math/sitemap/entry', 'exclude_hidden_language_posts', 10, 3 );
		}

		$this->action( 'rank_math/settings/after_save', 'clear_cache' );
	}

	/**
	 * Exclude posts under hidden language.
	 *
	 * @since 1.0.5
	 *
	 * @param string $url  Post URL.
	 * @param string $type URL type.
	 * @param object $post Object with some post information.
	 *
	 * @return string
	 */
	public function exclude_hidden_language_posts( $url, $type, $post ) {
		if ( 'post' !== $type ) {
			return $url;
		}

		global $sitepress;
		// Check that at least ID is set in post object.
		if ( ! isset( $post->ID ) ) {
			return $url;
		}

		// Get list of hidden languages.
		$hidden_languages = $sitepress->get_setting( 'hidden_languages', [] );

		// If there are no hidden languages return original URL.
		if ( empty( $hidden_languages ) ) {
			return $url;
		}

		// Get language information for post.
		$language_info = $sitepress->post_translations()->get_element_lang_code( $post->ID );

		// If language code is one of the hidden languages return empty string to skip the post.
		if ( in_array( $language_info, $hidden_languages, true ) ) {
			return '';
		}

		return $url;
	}

	/**
	 * Prevent get_permalink from translating and remove filter added by WPML to get terms in current language.
	 *
	 * @since 1.0.5
	 *
	 * @param string $type Sitemap type.
	 *
	 * @return string
	 */
	public function rank_math_build_sitemap_filter( $type ) {
		if ( Sitepress::get()->is_per_domain() ) {
			return $type;
		}

		global $sitepress_settings;

		// Before to build the sitemap and as we are on front-end just make sure the links won't be translated. The setting should not be updated in DB.
		$sitepress_settings['auto_adjust_ids'] = 0;

		/**
		 * Remove WPML filters while getting terms, to get all languages
		 */
		Sitepress::get()->remove_term_filters();

		return $type;
	}

	/**
	 * Add new CPT notice.
	 *
	 * @param  string $notice New CPT notice.
	 * @param  int    $count  Count of new post types detected.
	 * @return string
	 */
	public function new_post_type_notice( $notice, $count ) {
		/* Translators: placeholder is the post type name. */
		$notice = __( 'Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href="%2$s">Titles &amp; Meta page</a> and <a href="%3$s">the Sitemap</a>.', 'seo-by-rank-math' );

		if ( $count > 1 ) {
			/* Translators: placeholder is the post type names separated with commas. */
			$notice = __( 'Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href="%2$s">Titles &amp; Meta page</a> and <a href="%3$s">the Sitemap</a>.', 'seo-by-rank-math' );
		}

		return $notice;
	}

	/**
	 * Hit sitemap index to pre-generate the cache.
	 */
	public static function hit_index() {
		wp_remote_get( Router::get_base_url( self::get_sitemap_index_slug() . '.xml' ) );
	}

	/**
	 * Exclude object from sitemap.
	 *
	 * @param  int     $object_id   Object id.
	 * @param  string  $object_type Object type. Accepts: post, term, user.
	 * @param  boolean $is_include  Add or Remove object.
	 */
	public static function exclude_object( $object_id, $object_type, $is_include ) {
		$field_id = "exclude_{$object_type}s";
		$ids      = Helper::get_settings( 'sitemap.' . $field_id );

		if ( empty( $ids ) ) {
			$ids = $object_id;
		} else {
			$ids = array_filter( wp_parse_id_list( $ids ) );

			// Add object.
			if ( $is_include && ! in_array( $object_id, $ids, true ) ) {
				$ids[] = $object_id;
			}

			// Remove object.
			if ( ! $is_include && in_array( $object_id, $ids, true ) ) {
				$ids = array_diff( $ids, [ $object_id ] );
			}

			$ids = implode( ',', $ids );
		}

		$opt = cmb2_options( 'rank-math-options-sitemap' );
		$opt->update( $field_id, $ids, true );
	}

	/**
	 * Get the GMT modification date for the last modified post in the post type.
	 *
	 * @param  string|array $post_types Post type or array of types.
	 * @param  boolean      $return_all Flag to return array of values.
	 * @return string|array|false
	 *
	 * @copyright Copyright (C) 2008-2019, Yoast BV
	 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
	 */
	public static function get_last_modified_gmt( $post_types, $return_all = false ) {
		global $wpdb;

		if ( empty( $post_types ) ) {
			return false;
		}

		static $post_type_dates = null;
		if ( ! is_array( $post_types ) ) {
			$post_types = [ $post_types ];
		}

		foreach ( $post_types as $post_type ) {
			if ( ! isset( $post_type_dates[ $post_type ] ) ) { // If we hadn't seen post type before. R.
				$post_type_dates = null;
				break;
			}
		}

		if ( is_null( $post_type_dates ) ) {
			$post_type_dates = [];
			$post_type_names = get_post_types( [ 'public' => true ] );

			if ( ! empty( $post_type_names ) ) {
				$sql = "
				SELECT post_type, MAX( GREATEST( p.post_modified_gmt, p.post_date_gmt ) ) AS date
				FROM $wpdb->posts as p
				LEFT JOIN {$wpdb->postmeta} AS pm ON ( p.ID = pm.post_id AND pm.meta_key = 'rank_math_robots')
				WHERE (
					( pm.meta_key = 'rank_math_robots' AND pm.meta_value NOT LIKE '%noindex%' ) OR
				    pm.post_id IS NULL
				)
				AND p.post_status IN ( 'publish','inherit' )
					AND p.post_type IN ('" . implode( "','", $post_type_names ) . "')
				GROUP BY p.post_type
				ORDER BY p.post_modified_gmt DESC";

				foreach ( DB_Helper::get_results( $sql ) as $obj ) {
					$post_type_dates[ $obj->post_type ] = $obj->date;
				}
			}
		}

		$dates = array_intersect_key( $post_type_dates, array_flip( $post_types ) );
		if ( count( $dates ) > 0 ) {
			return $return_all ? $dates : max( $dates );
		}

		return false;
	}

	/**
	 * Check if cache is enabled.
	 *
	 * @return boolean
	 */
	public static function is_cache_enabled() {
		static $xml_sitemap_caching;
		if ( isset( $xml_sitemap_caching ) ) {
			return $xml_sitemap_caching;
		}

		/**
		 * Filter to enable/disable XML sitemap caching.
		 *
		 * @param boolean $true Enable or disable caching.
		 */
		$xml_sitemap_caching = apply_filters( 'rank_math/sitemap/enable_caching', true );
		return $xml_sitemap_caching;
	}

	/**
	 * Check if `object` is indexable.
	 *
	 * @param int/object $data_object Post|Term Object.
	 * @param string     $type        Object Type.
	 *
	 * @return boolean
	 */
	public static function is_object_indexable( $data_object, $type = 'post' ) {
		/**
		 * Filter: 'rank_math/sitemap/include_noindex' - Include noindex data in Sitemap.
		 *
		 * @param bool   $value Whether to include noindex terms in Sitemap.
		 * @param string $type  Object Type.
		 *
		 * @return boolean
		 */
		if ( apply_filters( 'rank_math/sitemap/include_noindex', false, $type ) ) {
			return true;
		}

		$method = 'post' === $type ? 'is_post_indexable' : 'is_term_indexable';

		return Helper::$method( $data_object );
	}

	/**
	 * Redirect duplicate sitemaps.
	 *
	 * @param int $count       Total number of entries.
	 * @param int $max_entries Entries per sitemap.
	 */
	public static function maybe_redirect( $count, $max_entries ) {
		$current_page = (int) get_query_var( 'sitemap_n' );
		if ( ! $current_page && $count > $max_entries ) {
			Helper::redirect( preg_replace( '/\.xml$/', '1.xml', Helper::get_current_page_url() ) );
			die();
		}

		if ( $count < $max_entries && $current_page ) {
			Helper::redirect( preg_replace( '/' . preg_quote( $current_page, '/' ) . '\.xml$/', '.xml', Helper::get_current_page_url() ) );
			die();
		}
	}

	/**
	 * Get the sitemap index slug.
	 */
	public static function get_sitemap_index_slug() {
		/**
		 * Filter: 'rank_math/sitemap/index_slug' - Modify the sitemap index slug.
		 *
		 * @param string $slug Sitemap index slug.
		 *
		 * @return string
		 */
		return apply_filters( 'rank_math/sitemap/index/slug', 'sitemap_index' );
	}

	/**
	 * Ensure sitemap cache is invalidated when settings change.
	 */
	public function clear_cache() {
		Cache::invalidate_storage();
	}
}
PK     ¥ŠU]�IH%  H%  0  includes/modules/sitemap/class-cache-watcher.phpnu „[µü¤        <?php
/**
 * The sitemap cache watcher.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Sitemap\Sitemap;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Cache_Watcher class.
 */
class Cache_Watcher {

	use Hooker;

	/**
	 * Holds the options that, when updated, should cause the cache to clear.
	 *
	 * @var array
	 */
	protected static $cache_clear = [];

	/**
	 * Holds the flag to clear all cache.
	 *
	 * @var boolean
	 */
	protected static $clear_all = false;

	/**
	 * Holds the array of types to clear.
	 *
	 * @var array
	 */
	protected static $clear_types = [];

	/**
	 * Holds the array of post types being imported.
	 *
	 * @var array
	 */
	private $importing_post_types = [];

	/**
	 * The constructor.
	 */
	public function __construct() {
		$this->action( 'save_post', 'save_post' );
		$this->action( 'transition_post_status', 'status_transition', 10, 3 );
		$this->action( 'admin_footer', 'status_transition_bulk_finished' );

		$this->action( 'edited_terms', 'invalidate_term', 10, 2 );
		$this->action( 'clean_term_cache', 'invalidate_term', 10, 2 );
		$this->action( 'clean_object_term_cache', 'invalidate_term', 10, 2 );

		$this->action( 'delete_user', 'invalidate_author' );
		$this->action( 'user_register', 'invalidate_author' );
		$this->action( 'profile_update', 'invalidate_author' );

		$this->action( 'rank_math/sitemap/invalidate_object_type', 'invalidate_object_type', 10, 2 );

		add_action( 'shutdown', [ __CLASS__, 'clear_queued' ] );
		add_action( 'update_option', [ __CLASS__, 'clear_on_option_update' ] );
		add_action( 'deleted_term_relationships', [ __CLASS__, 'invalidate' ] );

		// Clear cache when user updates any of these options.
		self::register_clear_on_option_update( 'home' );
		self::register_clear_on_option_update( 'permalink_structure' );
		self::register_clear_on_option_update( 'rank_math_modules' );
		self::register_clear_on_option_update( 'rank-math-options-titles' );
		self::register_clear_on_option_update( 'rank-math-options-general' );
		self::register_clear_on_option_update( 'rank-math-options-sitemap' );
		self::register_clear_on_option_update( 'date_format' );
	}

	/**
	 * Check for relevant post type before invalidation.
	 *
	 * @param int $post_id Post ID to possibly invalidate for.
	 */
	public function save_post( $post_id ) {
		$post = get_post( $post_id );
		if ( ! empty( $post->post_password ) || 'auto-draft' === $post->post_status ) {
			return false;
		}

		update_user_meta( $post->post_author, 'last_update', get_post_modified_time( 'U', false, $post ) );
		$this->invalidate_post( $post_id );
		$this->invalidate_author( $post->post_author );
	}

	/**
	 * Hooked into transition_post_status. Will initiate search engine pings
	 * if the post is being published, is a post type that a sitemap is built for
	 * and is a post that is included in sitemaps.
	 *
	 * @param string   $new_status New post status.
	 * @param string   $old_status Old post status.
	 * @param \WP_Post $post       Post object.
	 */
	public function status_transition( $new_status, $old_status, $post ) {
		if ( 'publish' !== $new_status ) {
			return;
		}

		if ( defined( 'WP_IMPORTING' ) ) {
			$this->status_transition_bulk( $new_status, $old_status, $post );
			return;
		}

		if ( $this->can_exclude( $post ) ) {
			return;
		}

		if ( WP_CACHE ) {
			wp_schedule_single_event( ( time() + 300 ), 'rank_math/sitemap/hit_index' );
		}
	}

	/**
	 * Can exclude post type.
	 *
	 * @param \WP_Post $post Post object.
	 *
	 * @return bool
	 */
	private function can_exclude( $post ) {
		$post_type = get_post_type( $post );
		wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' );

		// None of our interest.
		// If the post type is excluded in options, we can stop.
		return 'nav_menu_item' === $post_type || ! Sitemap::is_object_indexable( $post->ID );
	}

	/**
	 * While bulk importing, just save unique `post_types`.
	 *
	 * When importing is done, if we have a `post_type` that is saved in the sitemap
	 * try to ping the search engines
	 *
	 * @param string   $new_status New post status.
	 * @param string   $old_status Old post status.
	 * @param \WP_Post $post       Post object.
	 */
	private function status_transition_bulk( $new_status, $old_status, $post ) {
		$this->importing_post_types[] = get_post_type( $post );
		$this->importing_post_types   = array_unique( $this->importing_post_types );
	}

	/**
	 * After import finished, walk through imported `post_types` and update info.
	 */
	public function status_transition_bulk_finished() {
		if ( ! defined( 'WP_IMPORTING' ) || empty( $this->importing_post_types ) ) {
			return;
		}

		if ( false === $this->maybe_ping_search_engines() ) {
			return;
		}

		if ( WP_CACHE ) {
			do_action( 'rank_math/sitemap/hit_index' );
		}
	}

	/**
	 * Check if we can ping search engines.
	 *
	 * @return bool
	 */
	private function maybe_ping_search_engines() {
		$ping                  = false;
		$accessible_post_types = Helper::get_accessible_post_types();

		foreach ( $this->importing_post_types as $post_type ) {
			wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' );

			if ( in_array( $post_type, $accessible_post_types, true ) ) {
				$ping = true;
			}
		}

		return $ping;
	}

	/**
	 * Helper to invalidate in hooks where type is passed as second argument.
	 *
	 * @param int    $unused    Unused term ID value.
	 * @param string $taxonomy  Taxonomy to invalidate.
	 */
	public static function invalidate_term( $unused, $taxonomy ) {
		if ( false !== Helper::get_settings( 'sitemap.tax_' . $taxonomy . '_sitemap' ) ) {
			self::invalidate( $taxonomy );
		}
	}

	/**
	 * Delete cache transients for index and specific type.
	 *
	 * Always deletes the main index sitemaps cache, as that's always invalidated by any other change.
	 *
	 * @param string $type Sitemap type to invalidate.
	 */
	public static function invalidate( $type ) {
		self::clear( [ $type ] );
	}

	/**
	 * Invalidate sitemap cache for the post type of a post.
	 * Don't invalidate for revisions.
	 *
	 * @param int $post_id Post ID to invalidate type for.
	 */
	public static function invalidate_post( $post_id ) {
		if ( wp_is_post_revision( $post_id ) ) {
			return;
		}

		self::invalidate( get_post_type( $post_id ) );
	}

	/**
	 * Invalidate sitemap cache for authors.
	 *
	 * @param int $user_id User ID.
	 */
	public static function invalidate_author( $user_id ) {
		$user = get_user_by( 'id', $user_id );
		if ( 'user_register' === current_action() || 'profile_update' === current_action() ) {
			update_user_meta( $user_id, 'last_update', time() );
		}

		if ( $user && ! is_null( $user->roles ) && ! in_array( 'subscriber', $user->roles, true ) ) {
			self::invalidate( 'author' );
		}
	}

	/**
	 * Function to clear the Sitemap Cache.
	 *
	 * @param string $object_type Object type for destination where to save.
	 * @param int    $object_id   Object id for destination where to save.
	 *
	 * @return void
	 */
	public static function invalidate_object_type( $object_type, $object_id ) {
		if ( 'post' === $object_type ) {
			self::invalidate_post( $object_id );
			return;
		}

		if ( 'user' === $object_type ) {
			self::invalidate_author( $object_id );
			return;
		}

		if ( 'term' === $object_type ) {
			$term = get_term( $object_id );
			self::invalidate_term( $object_id, $term->taxonomy );
		}
	}

	/**
	 * Delete cache transients for given sitemaps types or all by default.
	 *
	 * @param array $types Set of sitemap types to delete cache transients for.
	 */
	public static function clear( $types = [] ) {
		if ( ! Sitemap::is_cache_enabled() ) {
			return;
		}

		// No types provided, clear all.
		if ( empty( $types ) ) {
			self::$clear_all = true;
			return;
		}

		// Always invalidate the index sitemap as well.
		if ( ! in_array( '1', $types, true ) ) {
			array_unshift( $types, '1' );
		}

		foreach ( $types as $type ) {
			if ( ! in_array( $type, self::$clear_types, true ) ) {
				self::$clear_types[] = $type;
			}
		}
	}

	/**
	 * Invalidate storage for cache types queued to clear.
	 */
	public static function clear_queued() {
		if ( self::$clear_all ) {
			Cache::invalidate_storage();
			self::$clear_all   = false;
			self::$clear_types = [];
			return;
		}

		foreach ( self::$clear_types as $type ) {
			Cache::invalidate_storage( $type );
		}

		self::$clear_types = [];
	}

	/**
	 * Adds a hook that when given option is updated, the cache is cleared.
	 *
	 * @param string $option Option name.
	 * @param string $type   Sitemap type.
	 */
	public static function register_clear_on_option_update( $option, $type = '' ) {
		self::$cache_clear[ $option ] = $type;
	}

	/**
	 * Clears the transient cache when a given option is updated, if that option has been registered before.
	 *
	 * @param string $option The option name that's being updated.
	 */
	public static function clear_on_option_update( $option ) {
		if ( ! array_key_exists( $option, self::$cache_clear ) ) {
			return;
		}

		// Clear all caches.
		if ( empty( self::$cache_clear[ $option ] ) ) {
			self::clear();
			return;
		}

		// Clear specific provided type(s).
		$types = (array) self::$cache_clear[ $option ];
		self::clear( $types );
	}
}
PK     ¥ŠU]Ïøî»(  »(  (  includes/modules/sitemap/sitemap-xsl.phpnu „[µü¤        <?php
/**
 * The XSL stylesheet output.
 *
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 */

use RankMath\KB;
use RankMath\Helper;
use RankMath\Sitemap\Router;
use RankMath\Sitemap\Sitemap;

defined( 'ABSPATH' ) || exit;

// Echo so opening tag doesn't get confused for PHP.
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<xsl:stylesheet version="2.0"
	xmlns:html="http://www.w3.org/TR/REC-html40"
	xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
	xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
	xmlns:kml="http://www.opengis.net/kml/2.2"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:atom="http://www.w3.org/2005/Atom">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
				<xsl:choose>
					<xsl:when test="kml:kml">
						<title><?php echo esc_html( $kml_title ); ?></title>
					</xsl:when>
					<xsl:otherwise>
						<title><?php echo esc_html( $title ); ?></title>
					</xsl:otherwise>
				</xsl:choose>
				<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
				<style type="text/css">
					body {
						font-size: 14px;
						font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
						margin: 0;
						color: #545353;
					}
					a {
						color: #05809e;
						text-decoration: none;
					}
					h1 {
						font-size: 24px;
						font-family: Verdana,Geneva,sans-serif;
						font-weight: normal;
						margin: 0;
					}

					#description {
						background-color: #4275f4;
						padding: 20px 40px;
						color: #fff;
						padding: 30px 30px 20px;
					}
					#description h1,
					#description p,
					#description a {
						color: #fff;
						margin: 0;
						font-size: 1.1em;
					}
					#description h1 {
						font-size: 2em;
						margin-bottom: 1em;
					}
					#description p {
						margin-top: 5px;
					}
					#description a {
						border-bottom: 1px dotted;
					}

					#content {
						padding: 20px 30px;
						background: #fff;
						max-width: 75%;
						margin: 0 auto;
					}
					table {
						border: none;
						border-collapse: collapse;
						font-size: .9em;
						width: 100%;
					}
					th {
						background-color: #4275f4;
						color: #fff;
						text-align: left;
						padding: 15px 10px;
						font-size: 14px;
						cursor: pointer;
					}
					td {
						padding: 10px;
						border-bottom: 1px solid #ddd;
					}
					tbody tr:nth-child(even) {
						background-color: #f7f7f7;
					}
					table td a {
						display: block;
					}
					table td a img {
						max-height: 30px;
						margin: 6px 3px;
					}
				</style>
			</head>
			<body>

				<xsl:choose>
					<xsl:when test="kml:kml">

						<div id="description">

							<h1><?php esc_html_e( 'KML File', 'seo-by-rank-math' ); ?></h1>

							<?php if ( false === $this->do_filter( 'sitemap/remove_credit', false ) ) : ?>
								<p>
									<?php
									printf(
										wp_kses_post(
											/* translators: link to rankmath.com */
											__( 'This KML File is generated by <a href="%s" target="_blank">Rank Math WordPress SEO Plugin</a>. It is used to provide location information to Google.', 'seo-by-rank-math' )
										),
										esc_url( KB::get( 'seo-suite' ) )
									);
									?>
								</p>
							<?php endif; ?>

							<p>
								<?php
								printf(
									wp_kses_post(
										/* translators: link to rankmath.com */
										__( 'Learn more about <a href="%s" target="_blank">KML File</a>.', 'seo-by-rank-math' )
									),
									'https://developers.google.com/kml/documentation/'
								);
								?>
							</p>

						</div>

						<div id="content">
							<p class="expl">
								This KML file contains <xsl:value-of select="count(kml:kml/kml:Document/kml:Folder/kml:Placemark)"/> Locations.
							</p>
							<p class="expl">
								<?php
								printf(
									/* translators: xsl value count */
									wp_kses_post( __( '<a href="%s">&#8592; Sitemap Index</a>', 'seo-by-rank-math' ) ),
									esc_url( Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' ) )
								);
								?>
							</p>
							<table id="sitemap" cellpadding="3">
								<thead>
									<tr>
										<th width="25%"><?php esc_html_e( 'Name', 'seo-by-rank-math' ); ?></th>
										<th width="40%"><?php esc_html_e( 'Address', 'seo-by-rank-math' ); ?></th>
										<th width="15%"><?php esc_html_e( 'Phone number', 'seo-by-rank-math' ); ?></th>
										<th width="10%"><?php esc_html_e( 'Latitude', 'seo-by-rank-math' ); ?></th>
										<th width="10%"><?php esc_html_e( 'Longitude', 'seo-by-rank-math' ); ?></th>
									</tr>
								</thead>
								<tbody>
									<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
									<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
									<xsl:for-each select="kml:kml/kml:Document/kml:Folder/kml:Placemark">
										<tr>
											<td>
												<xsl:variable name="itemURL">
													<xsl:value-of select="atom:link/@href"/>
												</xsl:variable>
												<a href="{$itemURL}">
													<xsl:value-of select="kml:name"/>
												</a>
											</td>
											<td>
												<xsl:value-of select="kml:address"/>
											</td>
											<td>
												<xsl:value-of select="kml:phoneNumber"/>
											</td>
											<td>
												<xsl:value-of select="kml:LookAt/kml:latitude"/>
											</td>
											<td>
												<xsl:value-of select="kml:LookAt/kml:longitude"/>
											</td>
										</tr>
									</xsl:for-each>
								</tbody>
							</table>
						</div>
					</xsl:when>
					<xsl:otherwise>

						<div id="description">

							<h1><?php esc_html_e( 'XML Sitemap', 'seo-by-rank-math' ); ?></h1>

							<?php if ( false === $this->do_filter( 'sitemap/remove_credit', false ) ) : ?>
								<p>
									<?php
									printf(
										wp_kses_post(
											/* translators: link to rankmath.com */
											__( 'This XML Sitemap is generated by <a href="%s" target="_blank">Rank Math WordPress SEO Plugin</a>. It is what search engines like Google use to crawl and re-crawl posts/pages/products/images/archives on your website.', 'seo-by-rank-math' )
										),
										esc_url( KB::get( 'seo-suite' ) )
									);
									?>
								</p>
							<?php endif; ?>

							<p>
								<?php
								printf(
									wp_kses_post(
										/* translators: link to rankmath.com */
										__( 'Learn more about <a href="%s" target="_blank">XML Sitemaps</a>.', 'seo-by-rank-math' )
									),
									'http://sitemaps.org'
								);
								?>
							</p>

						</div>

						<div id="content">
							<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) &gt; 0">

								<p>
									<?php
									printf(
										/* translators: xsl value count */
										wp_kses_post( __( 'This XML Sitemap Index file contains <strong>%s</strong> sitemaps.', 'seo-by-rank-math' ) ),
										'<xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/>'
									);
									?>
								</p>

								<table id="sitemap" cellpadding="3">

									<thead>
										<tr>
											<th width="75%"><?php esc_html_e( 'Sitemap', 'seo-by-rank-math' ); ?></th>
											<th width="25%"><?php esc_html_e( 'Last Modified', 'seo-by-rank-math' ); ?></th>
										</tr>
									</thead>

									<tbody>
										<xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
											<xsl:variable name="sitemapURL">
												<xsl:value-of select="sitemap:loc"/>
											</xsl:variable>
											<tr>
												<td>
													<a href="{$sitemapURL}"><xsl:value-of select="sitemap:loc"/></a>
												</td>
												<td>
													<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))"/>
												</td>
											</tr>
										</xsl:for-each>
									</tbody>

								</table>

							</xsl:if>
							<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) &lt; 1">
								<p>
									<?php
									printf(
										/* translators: xsl value count */
										wp_kses_post( __( 'This XML Sitemap contains <strong>%s</strong> URLs.', 'seo-by-rank-math' ) ),
										'<xsl:value-of select="count(sitemap:urlset/sitemap:url)"/>'
									);
									?>
								</p>

								<p class="expl">
									<?php
									printf(
										/* translators: xsl value count */
										wp_kses_post( __( '<a href="%s">&#8592; Sitemap Index</a>', 'seo-by-rank-math' ) ),
										esc_url( Router::get_base_url( Sitemap::get_sitemap_index_slug() . '.xml' ) )
									);
									?>
								</p>

								<table id="sitemap" cellpadding="3">

									<thead>
										<tr>
											<th width="75%"><?php esc_html_e( 'URL', 'seo-by-rank-math' ); ?></th>
											<?php if ( Helper::get_settings( 'sitemap.include_images' ) ) : // phpcs:ignore ?><th width="5%"><?php esc_html_e( 'Images', 'seo-by-rank-math' ); ?></th><?php endif; ?>
											<th title="Last Modification Time" width="20%"><?php esc_html_e( 'Last Mod.', 'seo-by-rank-math' ); ?></th>
										</tr>
									</thead>

									<tbody>
										<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
										<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
										<xsl:for-each select="sitemap:urlset/sitemap:url">
											<tr>
												<td>
													<xsl:variable name="itemURL">
														<xsl:value-of select="sitemap:loc"/>
													</xsl:variable>
													<a href="{$itemURL}">
														<xsl:value-of select="sitemap:loc"/>
													</a>
												</td>
												<?php if ( Helper::get_settings( 'sitemap.include_images' ) ) : ?>
												<td>
													<xsl:value-of select="count(image:image)"/>
												</td>
												<?php endif; ?>
												<td>
													<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))"/>
												</td>
											</tr>
										</xsl:for-each>
									</tbody>

								</table>

							</xsl:if>
						</div>
					</xsl:otherwise>
				</xsl:choose>

			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>
PK     ¥ŠU]À¿‹ƒF  F  -  includes/modules/sitemap/class-stylesheet.phpnu „[µü¤        <?php
/**
 * The stylesheet class for the sitemaps.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Stylesheet class.
 */
class Stylesheet extends XML {

	use Hooker;

	/**
	 * Hold sitemap type.
	 *
	 * @var string
	 */
	public $type;

	/**
	 * Output the XSL for the XML sitemap.
	 *
	 * @param string $type Sitemap type.
	 */
	public function output( $type ) {
		$this->type = $type;

		$expires = gmdate( 'D, d M Y H:i:s', ( time() + YEAR_IN_SECONDS ) );
		$this->send_headers(
			[
				'Cache-Control' => 'maxage=' . YEAR_IN_SECONDS,
				'Expires'       => $expires . ' GMT',
				'Etag'          => md5( $expires . $this->type ),
			],
			true
		);

		/* translators: 1. separator, 2. blogname */
		$title = sprintf( __( 'XML Sitemap %1$s %2$s', 'seo-by-rank-math' ), '-', get_bloginfo( 'name', 'display' ) );

		/* translators: 1. separator, 2. blogname */
		$kml_title = sprintf( __( 'Locations Sitemap %1$s %2$s', 'seo-by-rank-math' ), '-', get_bloginfo( 'name', 'display' ) );

		if ( 'main' !== $type ) {
			/**
			 * Fires for the output of XSL for XML sitemaps, other than type "main".
			 */
			$this->do_action( "sitemap/xsl_{$type}", $title, $kml_title );
			die;
		}

		require_once 'sitemap-xsl.php';
		die;
	}
}
PK     ¥ŠU]ÿQ¶q  q  (  includes/modules/sitemap/class-cache.phpnu „[µü¤        <?php
/**
 * Handle sitemap caching and invalidation.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;
use RankMath\Admin\Database\Database;

defined( 'ABSPATH' ) || exit;

/**
 * Cache class.
 */
class Cache {

	/**
	 * Cache mode.
	 *
	 * @var string
	 */
	private $mode = 'db';

	/**
	 * The $wp_filesystem object.
	 *
	 * @var object WP_Filesystem
	 */
	private $wp_filesystem;

	/**
	 * Prefix of the filename for sitemap caches.
	 *
	 * @var string
	 */
	const STORAGE_KEY_PREFIX = 'rank_math_';

	/**
	 * The constructor.
	 */
	public function __construct() {
		$this->wp_filesystem = Helper::get_filesystem();
		$this->mode          = $this->is_writable() ? 'file' : 'db';

		/**
		 * Change sitemap caching mode (can be "file" or "db").
		 */
		$this->mode = apply_filters( 'rank_math/sitemap/cache_mode', $this->mode );
	}

	/**
	 * Is the file writable?
	 *
	 * @return bool
	 */
	public function is_writable() {
		if ( is_null( $this->wp_filesystem ) || ! Helper::is_filesystem_direct() ) {
			return false;
		}

		$directory_separator = '/';
		$folder_path         = $this->get_cache_directory();
		$test_file           = $folder_path . $this->get_storage_key();

		// If folder doesn't exist?
		if ( ! file_exists( $folder_path ) ) {
			// Can we create the folder?
			// returns true if yes and false if not.
			$permissions = ( defined( 'FS_CHMOD_DIR' ) ) ? FS_CHMOD_DIR : 0755;
			return $this->wp_filesystem->mkdir( $folder_path, $permissions );
		}

		// Does the file exist?
		// File exists. Is it writable?
		if ( file_exists( $test_file ) && ! $this->wp_filesystem->is_writable( $test_file ) ) {
			// Nope, it's not writable.
			return false;
		}

		// Folder exists, but is it actually writable?
		return $this->wp_filesystem->is_writable( $folder_path );
	}

	/**
	 * Get the sitemap that is cached.
	 *
	 * @param  string $type Sitemap type.
	 * @param  int    $page Page number to retrieve.
	 * @param  bool   $html Is HTML sitemap.
	 * @return false|string false on no cache found otherwise sitemap file.
	 */
	public function get_sitemap( $type, $page, $html = false ) {
		$filename = $this->get_storage_key( $type, $page, $html );
		if ( false === $filename || is_null( $this->wp_filesystem ) ) {
			return false;
		}

		$path = self::get_cache_directory() . $filename;
		if ( 'file' === $this->mode
			&& is_a( $this->wp_filesystem, 'WP_Filesystem_Direct' )
			&& $this->wp_filesystem->exists( $path ) ) {
			return $this->wp_filesystem->get_contents( $path );
		}

		$filename = "sitemap_{$type}_$filename";
		$sitemap  = get_transient( $filename );
		return maybe_unserialize( $sitemap );
	}

	/**
	 * Store the sitemap page from cache.
	 *
	 * @param  string $type    Sitemap type.
	 * @param  int    $page    Page number to store.
	 * @param  string $sitemap Sitemap body to store.
	 * @param  bool   $html    Is HTML sitemap.
	 * @return boolean
	 */
	public function store_sitemap( $type, $page, $sitemap, $html = false ) {
		$filename = $this->get_storage_key( $type, $page, $html );
		if ( false === $filename || is_null( $this->wp_filesystem ) ) {
			return false;
		}

		if ( 'file' === $this->mode ) {
			$stored = $this->wp_filesystem->put_contents( self::get_cache_directory() . $filename, $sitemap, FS_CHMOD_FILE );
			if ( true === $stored ) {
				self::cached_files( $filename, $type );
				return $stored;
			}
		}

		$filename = "sitemap_{$type}_$filename";
		return set_transient( $filename, maybe_serialize( $sitemap ), DAY_IN_SECONDS * 100 );
	}

	/**
	 * Get filename for sitemap.
	 *
	 * @param  null|string $type The type to get the key for. Null or '1' for index cache.
	 * @param  int         $page The page of cache to get the key for.
	 * @param  boolean     $html Whether to add html extension.
	 * @return boolean|string The key where the cache is stored on. False if the key could not be generated.
	 */
	private function get_storage_key( $type = null, $page = 1, $html = false ) {
		$type = is_null( $type ) ? '1' : $type;

		$filename = self::STORAGE_KEY_PREFIX . md5( "{$type}_{$page}_" . home_url() ) . '.' . ( $html ? 'html' : 'xml' );

		return $filename;
	}

	/**
	 * Get cache directory.
	 *
	 * @return string
	 */
	public static function get_cache_directory() {
		$dir     = wp_upload_dir();
		$default = $dir['basedir'] . '/rank-math';

		/**
		 * Filter XML sitemap cache directory.
		 *
		 * @param string $unsigned Default cache directory
		 */
		$filtered = apply_filters( 'rank_math/sitemap/cache_directory', $default );

		if ( ! is_string( $filtered ) || '' === $filtered ) {
			$filtered = $default;
		}

		return trailingslashit( $filtered );
	}

	/**
	 * Read/Write cached files.
	 *
	 * @param  mixed  $value Pass null to get option,
	 *                       Pass false to delete option,
	 *                       Pass value to update option.
	 * @param  string $type  Sitemap type.
	 * @return mixed
	 */
	public static function cached_files( $value = null, $type = '' ) {
		if ( '' !== $type ) {
			$options           = Helper::option( 'sitemap_cache_files' );
			$options[ $value ] = $type;
			return Helper::option( 'sitemap_cache_files', $options );
		}

		return Helper::option( 'sitemap_cache_files', $value );
	}

	/**
	 * Invalidate sitemap cache.
	 *
	 * @param null|string $type The type to get the key for. Null for all caches.
	 */
	public static function invalidate_storage( $type = null ) {
		/**
		 * Filter: 'rank_math/sitemap/invalidate_storage' - Allow developers to disable sitemap cache invalidation.
		 */
		if ( ! apply_filters( 'rank_math/sitemap/invalidate_storage', true, $type ) ) {
			return;
		}

		$wp_filesystem = Helper::get_filesystem();
		if ( is_null( $wp_filesystem ) ) {
			return;
		}

		$directory = self::get_cache_directory();

		if ( is_null( $type ) ) {
			$wp_filesystem->delete( $directory, true );
			wp_mkdir_p( $directory );
			self::clear_transients();
			self::cached_files( false );
			Helper::clear_cache( 'sitemap' );
			return;
		}

		$data  = [];
		$files = self::cached_files();
		foreach ( $files as $file => $sitemap_type ) {
			if ( $type !== $sitemap_type ) {
				$data[ $file ] = $sitemap_type;
				continue;
			}

			$wp_filesystem->delete( $directory . $file );
		}

		self::clear_transients( $type );
		self::cached_files( $data );
		Helper::clear_cache( 'sitemap/' . $type );

		/**
		 * Action: 'rank_math/sitemap/invalidated_storage' - Runs after sitemap cache invalidation.
		 */
		do_action( 'rank_math/sitemap/invalidated_storage', $type );
	}

	/**
	 * Reset ALL transient caches.
	 *
	 * @param null|string $type The type to get the key for. Null for all caches.
	 */
	private static function clear_transients( $type = null ) {

		if ( is_null( $type ) ) {
			return Database::table( 'options' )
				->whereLike( 'option_name', '_transient_sitemap_' )
				->delete();
		}

		return Database::table( 'options' )
			->whereLike( 'option_name', '_transient_sitemap_' . $type )
			->delete();
	}
}
PK     ¥ŠU]ó2Éþ	  	  5  includes/modules/sitemap/html-sitemap/class-terms.phpnu „[µü¤        <?php
/**
 * The HTML sitemap generator for terms.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap\Html;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Database\Database;
use RankMath\Sitemap\Sitemap as SitemapBase;

defined( 'ABSPATH' ) || exit;

/**
 * Terms class.
 */
class Terms {

	use Hooker;

	/**
	 * Get all terms from a given taxonomy.
	 *
	 * @param string $taxonomy    Taxonomy name.
	 * @param int    $parent_term Parent term ID.
	 *
	 * @return array
	 */
	private function get_terms( $taxonomy, $parent_term = 0 ) {
		$sort_map = [
			'published'    => [
				'field' => 'term_id',
				'order' => 'DESC',
			],
			'modified'     => [
				'field' => 'term_id',
				'order' => 'DESC',
			],
			'alphabetical' => [
				'field' => 'name',
				'order' => 'ASC',
			],
			'post_id'      => [
				'field' => 'term_id',
				'order' => 'DESC',
			],
		];

		$sort_setting = Helper::get_settings( 'sitemap.html_sitemap_sort' );
		$sort         = ( isset( $sort_map[ $sort_setting ] ) ) ? $sort_map[ $sort_setting ] : $sort_map['published'];

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap/sort_items' - Allow changing the sort order of the HTML sitemap.
		 *
		 * @var array $sort {
		 *    @type string $field The field to sort by.
		 *    @type string $order The sort order.
		 * }
		 * @var string $taxonomy The taxonomy name.
		 * @var string $order    The item type.
		 */
		$sort = $this->do_filter( 'sitemap/html_sitemap/sort_items', $sort, 'terms', $taxonomy );

		$exclude     = wp_parse_id_list( Helper::get_settings( 'sitemap.exclude_terms' ) );
		$terms_table = Database::table( 'terms' );
		$tt_table    = Database::table( 'term_taxonomy' );

		$query = $terms_table->where( 'taxonomy', $taxonomy )
			->select( [ $terms_table->table . '.term_id', 'name', 'slug', 'taxonomy' ] )
			->leftJoin( $tt_table->table, $terms_table->table . '.term_id', $tt_table->table . '.term_id' )
			->where( 'parent', $parent_term );

		if ( ! empty( $exclude ) ) {
			$query->whereNotIn( $terms_table->table . '.term_id', $exclude );
		}

		$terms = $query->orderBy( $sort['field'], $sort['order'] )->get();

		return $this->get_indexable_terms( $terms, $taxonomy );
	}

	/**
	 * Generate the HTML sitemap for a given taxonomy.
	 *
	 * @param string $taxonomy   Taxonomy name.
	 * @param bool   $show_dates Whether to show dates.
	 * @param array  $args       Array with term query arguments.
	 *
	 * @return string
	 */
	public function generate_sitemap( $taxonomy, $show_dates, $args = [] ) {
		$args['taxonomy'] = $taxonomy;
		$terms            = get_terms( $args );
		$terms            = $this->get_indexable_terms( $terms, $taxonomy );
		if ( empty( $terms ) ) {
			return '';
		}

		$output[] = '<div class="rank-math-html-sitemap__section rank-math-html-sitemap__section--taxonomy rank-math-html-sitemap__section--' . $taxonomy . '">';
		$output[] = '<h2 class="rank-math-html-sitemap__title">' . esc_html( get_taxonomy( $taxonomy )->labels->name ) . '</h2>';
		$output[] = '<ul class="rank-math-html-sitemap__list">';
		$output[] = $this->generate_terms_list( $terms, $taxonomy );
		$output[] = '</ul>';
		$output[] = '</div>';

		$output = implode( '', $output );

		return $output;
	}

	/**
	 * Get the term list HTML.
	 *
	 * @param array  $terms    The terms to output.
	 * @param object $taxonomy The taxonomy object.
	 *
	 * @return string
	 */
	private function generate_terms_list( $terms, $taxonomy ) {
		if ( empty( $terms ) ) {
			return '';
		}

		if ( is_taxonomy_hierarchical( $taxonomy ) ) {
			return $this->generate_terms_list_hierarchical( $terms, $taxonomy );
		}

		return $this->generate_terms_list_flat( $terms, $taxonomy );
	}

	/**
	 * Get the term list HTML for non-hierarchical taxonomies.
	 *
	 * @param array  $terms    The terms to output.
	 * @param string $taxonomy Taxonomy name.
	 *
	 * @return string
	 */
	private function generate_terms_list_flat( $terms, $taxonomy ) {
		$output = [];
		foreach ( $terms as $term ) {
			$output[] = '<li class="rank-math-html-sitemap__item">'
				. '<a href="' . esc_url( $this->get_term_link( (int) $term->term_id, $taxonomy ) ) . '" class="rank-math-html-sitemap__link">'
				. esc_html( $this->get_term_title( $term, $taxonomy ) )
				. '</a>'
				. '</li>';
		}

		return implode( '', $output );
	}

	/**
	 * Get the term list HTML for hierarchical taxonomies. This will output the
	 * terms in a nested list.
	 *
	 * @param array  $terms    The terms to output.
	 * @param string $taxonomy The taxonomy name.
	 * @param bool   $remove_children Whether to remove terms that have a parent.
	 *
	 * @return string
	 */
	private function generate_terms_list_hierarchical( $terms, $taxonomy, $remove_children = true ) {
		$output = [];
		if ( $remove_children ) {
			// Remove initial with parents because they are queried below in $this->get_terms!
			$terms = $this->remove_with_parent( $terms );
		}
		foreach ( $terms as $term ) {
			$output[] = '<li class="rank-math-html-sitemap__item">'
							. '<a href="' . esc_url( $this->get_term_link( (int) $term->term_id, $taxonomy ) ) . '" class="rank-math-html-sitemap__link">'
							. esc_html( $this->get_term_title( $term, $taxonomy ) )
							. '</a>';

			$children = $this->get_terms( $taxonomy, $term->term_id );

			if ( ! empty( $children ) ) {
				$output[] = '<ul class="rank-math-html-sitemap__list">';
				$output[] = $this->generate_terms_list_hierarchical( $children, $taxonomy, false );
				$output[] = '</ul>';
			}
			$output[] = '</li>';
		}

		return implode( '', $output );
	}

	/**
	 * Get the term link.
	 *
	 * @param int    $term_id  The term ID.
	 * @param string $taxonomy The taxonomy name.
	 *
	 * @return string
	 */
	private function get_term_link( $term_id, $taxonomy ) {
		$term = get_term( $term_id, $taxonomy );
		if ( is_wp_error( $term ) ) {
			return '';
		}

		return get_term_link( $term );
	}

	/**
	 * Get the term title.
	 *
	 * @param object $term     The term data.
	 * @param string $taxonomy The taxonomy name.
	 *
	 * @return string
	 */
	private function get_term_title( $term, $taxonomy ) {
		if ( Helper::get_settings( 'sitemap.html_sitemap_seo_titles' ) !== 'seo_titles' ) {
			return $term->name;
		}

		// Custom SEO title.
		$meta = get_term_meta( $term->term_id, 'rank_math_title', true );
		if ( ! empty( $meta ) ) {
			return Helper::replace_vars( $meta, get_term( $term->term_id, $taxonomy ) );
		}

		// Default SEO title from the global settings.
		$template = Helper::get_settings( "titles.tax_{$taxonomy}_title" );
		if ( ! empty( $template ) ) {
			return Helper::replace_vars( $template, get_term( $term->term_id, $taxonomy ) );
		}

		// Fallback to term name.
		return $term->name;
	}

	/**
	 * Removes terms that have a parent (and the parent is available in the list) from the list.
	 *
	 * @param array $terms The terms list.
	 *
	 * @return array
	 */
	private function remove_with_parent( $terms ) {
		$term_ids = array_column( $terms, 'term_id' );
		return array_filter(
			$terms,
			function ( $term ) use ( $term_ids ) {
				return ! $term->parent || ! in_array( $term->parent, $term_ids, true );
			}
		);
	}

	/**
	 * Remove terms that are not indexable.
	 *
	 * @param array  $terms    Array of terms.
	 * @param string $taxonomy Taxonomy name that `$terms` are part of.
	 * @return array
	 */
	private function get_indexable_terms( $terms, $taxonomy ) {
		return array_filter(
			$terms,
			function ( $term ) use ( $taxonomy ) {
				return SitemapBase::is_object_indexable( get_term( $term->term_id, $taxonomy ), 'term' );
			}
		);
	}
}
PK     ¥ŠU]§Š†]    7  includes/modules/sitemap/html-sitemap/class-authors.phpnu „[µü¤        <?php
/**
 * The HTML sitemap generator for authors.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap\Html;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Database\Database;
use RankMath\Sitemap\Providers\Author;

defined( 'ABSPATH' ) || exit;

/**
 * Terms class.
 */
class Authors extends Author {

	use Hooker;

	/**
	 * Get all authors.
	 *
	 * @return array
	 */
	private function get_authors() {
		$sort_map = [
			'published'    => [
				'field' => 'user_registered',
				'order' => 'DESC',
			],
			'modified'     => [
				'field' => 'user_registered',
				'order' => 'DESC',
			],
			'alphabetical' => [
				'field' => 'display_name',
				'order' => 'ASC',
			],
			'post_id'      => [
				'field' => 'ID',
				'order' => 'DESC',
			],
		];

		$sort_setting = Helper::get_settings( 'sitemap.html_sitemap_sort' );
		$sort         = ( isset( $sort_map[ $sort_setting ] ) ) ? $sort_map[ $sort_setting ] : $sort_map['published'];

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap/sort_items' - Allow changing the sort order of the HTML sitemap.
		 *
		 * @var array $sort {
		 *    @type string $field The field to sort by.
		 *    @type string $order The sort order.
		 * }
		 * @var string $order The item type.
		 * @var string $empty Empty string (unused).
		 */
		$sort     = $this->do_filter( 'sitemap/html_sitemap/sort_items', $sort, 'authors', '' );
		$defaults = [
			'orderby' => $sort['field'],
			'order'   => $sort['order'],
		];
		$args     = $this->do_filter( 'sitemap/author/query', wp_parse_args( [ 'posts_per_page' => -1 ], $defaults ) );
		$users    = $this->get_users( $args );

		if ( empty( $users ) ) {
			return [];
		}

		return $users;
	}

	/**
	 * Check if user is not in the excluded roles and doesn't have noindex set.
	 *
	 * @param object $user Partial user data from database.
	 *
	 * @return bool
	 */
	private function should_include_user( $user ) {
		$excluded_roles = (array) Helper::get_settings( 'sitemap.exclude_roles' );
		$roles          = (array) get_userdata( $user->ID )->roles;
		$intersect      = array_intersect( $roles, $excluded_roles );
		if ( ! empty( $intersect ) ) {
			return false;
		}

		$robots = get_user_meta( $user->ID, 'rank_math_robots', true );
		if ( is_array( $robots ) && in_array( 'noindex', $robots, true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Generate the HTML sitemap for authors.
	 *
	 * @return string
	 */
	public function generate_sitemap() {
		$users = $this->get_authors();
		if ( empty( $users ) ) {
			return '';
		}

		$output[] = '<div class="rank-math-html-sitemap__section rank-math-html-sitemap__section--authors">';
		$output[] = '<h2 class="rank-math-html-sitemap__title">' . esc_html__( 'Authors', 'seo-by-rank-math' ) . '</h2>';
		$output[] = '<ul class="rank-math-html-sitemap__list">';
		$output[] = $this->generate_authors_list( $users );
		$output[] = '</ul>';
		$output[] = '</div>';

		$output = implode( '', $output );

		return $output;
	}

	/**
	 * Generate HTML list of authors.
	 *
	 * @param array $authors List of authors.
	 *
	 * @return string
	 */
	private function generate_authors_list( $authors ) {
		if ( empty( $authors ) ) {
			return '';
		}

		$output = [];
		foreach ( $authors as $author ) {
			$output[] = '<li class="rank-math-html-sitemap__item">'
				. '<a href="' . esc_url( $this->get_author_link( $author ) ) . '" class="rank-math-html-sitemap__link">'
				. esc_html( $this->get_author_title( $author ) )
				. '</a>'
				. '</li>';
		}

		return implode( '', $output );
	}

	/**
	 * Get the author link.
	 *
	 * @param object $author Author data from database (not a WP_User object).
	 *
	 * @return string
	 */
	private function get_author_link( $author ) {
		return get_author_posts_url( $author->ID, $author->user_nicename );
	}

	/**
	 * Get the author title.
	 *
	 * @param object $author The author data.
	 *
	 * @return string
	 */
	private function get_author_title( $author ) {
		if ( Helper::get_settings( 'sitemap.html_sitemap_seo_titles' ) !== 'seo_titles' ) {
			return $author->display_name;
		}

		// Custom SEO title.
		$meta = get_user_meta( $author->ID, 'rank_math_title', true );
		if ( ! empty( $meta ) ) {
			return Helper::replace_vars( $meta, $author );
		}

		// Default SEO title from the global settings.
		$template = Helper::get_settings( 'titles.pt_author_title' );
		if ( ! empty( $template ) ) {
			return Helper::replace_vars( $template, $author );
		}

		// Fallback to author name.
		return $author->display_name;
	}
}
PK     ¥ŠU]mÜužô&  ô&  5  includes/modules/sitemap/html-sitemap/class-posts.phpnu „[µü¤        <?php
/**
 * The HTML sitemap generator for posts.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap\Html;

use RankMath\Helper;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Traits\Hooker;
use RankMath\Admin\Database\Database;
use RankMath\Sitemap\Sitemap as SitemapBase;

defined( 'ABSPATH' ) || exit;

/**
 * Posts class.
 */
class Posts {

	use Hooker;

	/**
	 * An array of posts that have a parent.
	 *
	 * @var array
	 */
	private $children = [];

	/**
	 * Get all posts from a given post type.
	 *
	 * @param string $post_type   Post type.
	 * @param array  $post_parents An array of post parent ids.
	 *
	 * @return array
	 */
	private function get_posts( $post_type, $post_parents = [] ) {
		global $wpdb;
		$sort_map = [
			'published'    => [
				'field' => 'post_date',
				'order' => 'DESC',
			],
			'modified'     => [
				'field' => 'post_modified',
				'order' => 'DESC',
			],
			'alphabetical' => [
				'field' => 'post_title',
				'order' => 'ASC',
			],
			'post_id'      => [
				'field' => 'ID',
				'order' => 'DESC',
			],
		];

		$sort_setting = Helper::get_settings( 'sitemap.html_sitemap_sort' );
		$sort         = ( isset( $sort_map[ $sort_setting ] ) ) ? $sort_map[ $sort_setting ] : $sort_map['published'];

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap/sort_items' - Allow changing the sort order of the HTML sitemap.
		 *
		 * @var array $sort {
		 *    @type string $field The field to sort by.
		 *    @type string $order The sort order.
		 * }
		 * @var string $post_type The post type name.
		 * @var string $order     The item type.
		 */
		$sort = $this->do_filter( 'sitemap/html_sitemap/sort_items', $sort, 'posts', $post_type );

		$statuses = [ 'publish' ];

		/**
		 * Filter to add a JOIN clause for the HTML get_posts(type, post_parent[]) query.
		 *
		 * @param string $join       SQL join clause, defaults to an empty string.
		 * @param array  $post_type  The Post type.
		 */
		$join_filter = $this->do_filter( 'html_sitemap/get_posts/join', '', $post_type );

		/**
		 * Filter to add a WHERE clause for the HTML sitemap get_posts(type, post_parent[] ) query.
		 *
		 * @param string $where      SQL WHERE query, defaults to an empty string.
		 * @param array  $post_type  The Post type.
		 */
		$where_filter = $this->do_filter( 'html_sitemap/get_posts/where', '', $post_type );

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap_post_statuses' - Allow changing the post statuses that should be included in the sitemap.
		 *
		 * @var array  $statuses Post statuses.
		 * @var string $post_type Post type name.
		 */
		$statuses  = $this->do_filter( 'sitemap/html_sitemap_post_statuses', $statuses, $post_type );
		$get_child = ! empty( $post_parents ) ? " WHERE post_parent !='' " : '';
		$sql       = "
			SELECT l.ID, post_title, post_name, post_parent, post_date, post_type, l.post_modified
			FROM (
				SELECT DISTINCT p.ID, p.post_modified FROM {$wpdb->posts} as p
				{$join_filter}
				LEFT JOIN {$wpdb->postmeta} AS pm ON ( p.ID = pm.post_id AND pm.meta_key = 'rank_math_robots' )
				WHERE (
					( pm.meta_key = 'rank_math_robots' AND pm.meta_value NOT LIKE '%noindex%' ) OR
					pm.post_id IS NULL
				)
				AND p.post_type IN ( '" . $post_type . "' ) AND p.post_status IN ( '" . join( "', '", esc_sql( $statuses ) ) . "' )
				{$where_filter}
				ORDER BY p.post_modified DESC
			)
			o JOIN {$wpdb->posts} l ON l.ID = o.ID " . $get_child . " ORDER BY " . $sort['field'] . " " . $sort['order']; // phpcs:ignore
		return DB_Helper::get_results( $wpdb->prepare( $sql ) );
	}

	/**
	 * Generate the HTML sitemap for a given post type.
	 *
	 * @param string $post_type Post type name.
	 * @param bool   $show_dates Whether to show dates.
	 *
	 * @return string
	 */
	public function generate_sitemap( $post_type, $show_dates ) {
		$posts = $this->get_posts( $post_type );

		if ( empty( $posts ) ) {
			return '';
		}

		$output[] = '<div class="rank-math-html-sitemap__section rank-math-html-sitemap__section--post-type rank-math-html-sitemap__section--' . $post_type . '">';
		$output[] = '<h2 class="rank-math-html-sitemap__title">' . esc_html( get_post_type_object( $post_type )->labels->name ) . '</h2>';
		$output[] = '<ul class="rank-math-html-sitemap__list">';
		$output[] = $this->generate_posts_list( $posts, $show_dates, $post_type );
		$output[] = '</ul>';
		$output[] = '</div>';

		$output = implode( '', $output );

		return $output;
	}

	/**
	 * Generate the post list HTML.
	 *
	 * @param array  $posts Array of posts.
	 * @param bool   $show_dates Whether to show dates.
	 * @param string $post_type Post type name.
	 *
	 * @return string
	 */
	private function generate_posts_list( $posts, $show_dates, $post_type ) {
		if ( empty( $posts ) ) {
			return '';
		}

		if ( is_post_type_hierarchical( $post_type ) ) {
			$post_ids  = [];
			$post_list = [];
			array_map(
				function ( $post ) use ( &$post_ids, &$post_list ) {
					$post_ids[]             = $post->ID;
					$post_list[ $post->ID ] = $post;
				},
				$posts
			);

			$children = $this->get_posts( $post_type, $post_ids );
			foreach ( $children as $child ) {
				// Confirm if child has a parent available, the parent might not be index-able and re-add the child to $posts!
				$parent = array_filter(
					$post_list,
					function ( $post ) use ( $child ) {
						return $child->post_parent === $post->ID;
					}
				);

				if ( empty( $parent ) ) {
					$child->child_has_no_parent = true;
					$post_list[ $child->ID ]    = $child;
					continue;
				}
				$this->children[ $post_type ][ $child->post_parent ][ $child->ID ] = $child;
			}

			$post_list = $this->remove_with_parent( $post_list );
			return $this->generate_posts_list_hierarchical( $post_list, $show_dates, $post_type );
		}

		return $this->generate_posts_list_flat( $posts, $show_dates );
	}

	/**
	 * Get the post list HTML for non-hierarchical post types.
	 *
	 * @param array $posts The posts to output.
	 * @param bool  $show_dates Whether to show the post dates.
	 *
	 * @return string
	 */
	private function generate_posts_list_flat( $posts, $show_dates ) {
		$output = [];
		foreach ( $posts as $post ) {
			if ( ! SitemapBase::is_object_indexable( absint( $post->ID ) ) ) {
				continue;
			}

			$url = $this->do_filter( 'sitemap/entry', [ 'loc' => esc_url( $this->get_post_link( $post ) ) ], 'post', $post );
			if ( empty( $url['loc'] ) ) {
				continue;
			}

			$output[] = '<li class="rank-math-html-sitemap__item">'
			. '<a href="' . esc_url( $this->get_post_link( $post ) ) . '" class="rank-math-html-sitemap__link">'
			. esc_html( $this->get_post_title( $post ) )
			. '</a>'
			. ( $show_dates ? ' <span class="rank-math-html-sitemap__date">(' . esc_html( mysql2date( get_option( 'date_format' ), $post->post_date ) ) . ')</span>' : '' )
			. '</li>';
		}

		return implode( '', $output );
	}

	/**
	 * Get the post list HTML for hierarchical post types. This will output the
	 * posts in a nested list.
	 *
	 * @param array  $posts      The posts to output.
	 * @param bool   $show_dates Whether to show the post dates.
	 * @param string $post_type  Post type name.
	 * @param bool   $child      Whether the passed posts are children.
	 *
	 * @return string
	 */
	private function generate_posts_list_hierarchical( $posts, $show_dates, $post_type, $child = false ) {
		$output  = [];
		$exclude = wp_parse_id_list( Helper::get_settings( 'sitemap.exclude_posts' ) );

		foreach ( $posts as $post ) {
			$check_parent_index = empty( $post->post_parent ) ? 0 : SitemapBase::is_object_indexable( $post->post_parent );
			$is_indexable       = SitemapBase::is_object_indexable( absint( $post->ID ) );

			if ( ( ! $check_parent_index || $child ) && $is_indexable ) {
				$output[] = '<li class="rank-math-html-sitemap__item">'
				. '<a href="' . esc_url( get_permalink( $post->ID ) ) . '" class="rank-math-html-sitemap__link">'
				. esc_html( $this->get_post_title( $post ) )
				. '</a>'
				. ( $show_dates ? ' <span class="rank-math-html-sitemap__date">(' . esc_html( mysql2date( get_option( 'date_format' ), $post->post_date ) ) . ')</span>' : '' );
			}

			if ( ! empty( $this->children[ $post_type ][ $post->ID ] ) ) {
				if ( $is_indexable ) {
					$output[] = '<ul class="rank-math-html-sitemap__list">';
				}

				$output[] = $this->generate_posts_list_hierarchical(  $this->children[ $post_type ][ $post->ID ], $show_dates, $post_type, true ); // phpcs:ignore

				if ( $is_indexable ) {
					$output[] = '</ul>';
				}
			}

			if ( $is_indexable ) {
				$output[] = '</li>';
			}
		}

		return implode( '', $output );
	}

	/**
	 * Get the post permalink.
	 *
	 * @param object $post The post object.
	 *
	 * @return string
	 */
	private function get_post_link( $post ) {
		return get_permalink( $post->ID );
	}

	/**
	 * Get the post title.
	 *
	 * @param object $post The post data.
	 *
	 * @return string
	 */
	private function get_post_title( $post ) {
		if ( Helper::get_settings( 'sitemap.html_sitemap_seo_titles' ) !== 'seo_titles' ) {
			return $post->post_title;
		}

		// Custom SEO title.
		$meta = get_post_meta( $post->ID, 'rank_math_title', true );
		if ( ! empty( $meta ) ) {
			return Helper::replace_vars( $meta, get_post( $post->ID ) );
		}

		// Default SEO title from the global settings.
		$template = Helper::get_settings( "titles.pt_{$post->post_type}_title" );
		if ( ! empty( $template ) ) {
			return Helper::replace_vars( $template, get_post( $post->ID ) );
		}

		// Fallback to post title.
		return $post->post_title;
	}

	/**
	 * Removes posts with a parent to avoid them being rendered twice.
	 *
	 * @param array $posts Array of post objects.
	 *
	 * @return array
	 */
	private function remove_with_parent( $posts ) {
		return array_filter(
			$posts,
			function ( $post ) {
				return ! $post->post_parent || isset( $post->child_has_no_parent );
			}
		);
	}
}
PK     ¥ŠU]˜ºýH    7  includes/modules/sitemap/html-sitemap/class-sitemap.phpnu „[µü¤        <?php
/**
 * The Sitemap module - HTML Sitemap feature.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Sitemap\Html;

use RankMath\Helper;
use RankMath\Sitemap\Providers\Taxonomy;
use RankMath\Traits\Hooker;
use RankMath\Sitemap\Cache;

defined( 'ABSPATH' ) || exit;

/**
 * Sitemap class.
 */
class Sitemap extends Taxonomy {

	use Hooker;

	/**
	 * Generators.
	 *
	 * @var array
	 */
	private $generators;

	/**
	 * Cache.
	 *
	 * @var object
	 */
	private $cache;

	/**
	 * Constructor.
	 */
	public function __construct() {
		if ( ! Helper::get_settings( 'sitemap.html_sitemap' ) ) {
			return;
		}

		$this->cache      = new Cache();
		$this->generators = [
			'posts'   => new Posts(),
			'terms'   => new Terms(),
			'authors' => new Authors(),
		];

		$display_mode = Helper::get_settings( 'sitemap.html_sitemap_display' );
		if ( 'page' === $display_mode ) {
			$this->action( 'the_content', 'show_on_page' );
		} elseif ( 'shortcode' === $display_mode ) {
			add_shortcode( 'rank_math_html_sitemap', [ $this, 'shortcode' ] );

			// Compatibility code for the [aioseo_html_sitemap] shortcode.
			add_shortcode( 'aioseo_html_sitemap', [ $this, 'shortcode' ] );
		}
	}

	/**
	 * Get the HTML sitemap cache.
	 *
	 * @param string $name     Name of the cache.
	 *
	 * @return string
	 */
	private function get_cache( $name ) {
		if ( true !== \RankMath\Sitemap\Sitemap::is_cache_enabled() ) {
			return false;
		}
		return $this->cache->get_sitemap( $name, 1, true );
	}

	/**
	 * Set the HTML sitemap cache.
	 *
	 * @param string $name     Name of the cache.
	 * @param string $content  Content of the cache.
	 */
	private function set_cache( $name, $content ) {
		$this->cache->store_sitemap( $name, 1, $content, true );
	}

	/**
	 * Get generator.
	 *
	 * @param string $generator Generator name.
	 *
	 * @return object
	 */
	private function get_generator( $generator ) {
		if ( ! isset( $this->generators[ $generator ] ) ) {
			return false;
		}

		return $this->generators[ $generator ];
	}

	/**
	 * Get the HTML sitemap output.
	 *
	 * @return string
	 */
	public function get_output() {
		$post_types = self::get_post_types();
		$taxonomies = self::get_taxonomies();

		/**
		 * Filter the setting of excluding empty terms from the XML sitemap.
		 *
		 * @param boolean $exclude        Defaults to true.
		 * @param array   $taxonomies     Array of names for the taxonomies being processed.
		 */

		$show_dates = Helper::get_settings( 'sitemap.html_sitemap_show_dates' );
		$output     = [];

		$output[] = '<div class="rank-math-html-sitemap">';
		foreach ( $post_types as $post_type ) {
			$cached = $this->get_cache( $post_type );
			if ( ! empty( $cached ) ) {
				$output[] = $cached;
				continue;
			}

			$sitemap = $this->get_generator( 'posts' )->generate_sitemap( $post_type, $show_dates );
			$this->set_cache( $post_type, $sitemap );
			$output[] = $sitemap;
		}

		if ( ! empty( $taxonomies ) ) {
			foreach ( $taxonomies as $taxonomy => $object ) {

				$cached = $this->get_cache( $taxonomy );
				if ( ! empty( $cached ) ) {
					$output[] = $cached;
					continue;
				}

				$hide_empty = ! Helper::get_settings( 'sitemap.tax_' . $taxonomy . '_include_empty' );
				$sitemap    = $this->get_generator( 'terms' )->generate_sitemap(
					$taxonomy,
					$show_dates,
					[
						'hide_empty' => $hide_empty,
						'exclude'    => wp_parse_id_list( Helper::get_settings( 'sitemap.exclude_terms' ) ),
					]
				);
				$this->set_cache( $taxonomy, $sitemap );
				$output[] = $sitemap;
			}
		}

		if ( $this->should_show_author_sitemap() ) {
			$cached = $this->get_cache( 'author' );
			if ( ! empty( $cached ) ) {
				$output[] = $cached;
			} else {
				$sitemap = $this->get_generator( 'authors' )->generate_sitemap();
				$this->set_cache( 'author', $sitemap );
				$output[] = $sitemap;
			}
		}

		$output[] = '</div>';

		return implode( '', $output );
	}

	/**
	 * Get post types to be included in the HTML sitemap.
	 *
	 * @return array
	 */
	public static function get_post_types() {
		$post_types = [];
		foreach ( Helper::get_accessible_post_types() as $post_type ) {
			if ( ! Helper::get_settings( "sitemap.pt_{$post_type}_html_sitemap" ) ) {
				continue;
			}

			$post_types[] = $post_type;
		}

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap_post_types' - Allow changing the post types to be included in the HTML sitemap.
		 *
		 * @var array $post_types The post types to be included in the HTML sitemap.
		 */
		return apply_filters( 'rank_math/sitemap/html_sitemap_post_types', $post_types );
	}

	/**
	 * Check if author sitemap should be shown or not.
	 */
	private function should_show_author_sitemap() {
		$show = Helper::get_settings( 'sitemap.authors_html_sitemap' );
		if ( ! $show ) {
			return false;
		}

		$disable_author_archives = Helper::get_settings( 'titles.disable_author_archives' );
		if ( $disable_author_archives ) {
			return false;
		}

		$robots = Helper::get_settings( 'titles.author_robots' );
		if ( is_array( $robots ) && in_array( 'noindex', $robots, true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Get taxonomies to be included in the HTML sitemap.
	 *
	 * @return array
	 */
	public static function get_taxonomies() {
		$taxonomies = [];
		foreach ( Helper::get_accessible_taxonomies() as $taxonomy ) {
			if ( ! Helper::get_settings( "sitemap.tax_{$taxonomy->name}_html_sitemap" ) ) {
				continue;
			}

			$taxonomies[ $taxonomy->name ] = $taxonomy;
		}

		/**
		 * Filter: 'rank_math/sitemap/html_sitemap_taxonomies' - Allow changing the taxonomies to be included in the HTML sitemap.
		 *
		 * @var array $taxonomies The taxonomies to be included in the HTML sitemap.
		 */
		return apply_filters( 'rank_math/sitemap/html_sitemap_taxonomies', $taxonomies );
	}

	/**
	 * Show sitemap on a page (after content).
	 *
	 * @param mixed $content The page content.
	 */
	public function show_on_page( $content ) {
		if ( ! is_page() ) {
			return $content;
		}

		if ( ! is_main_query() || ! in_the_loop() ) {
			return $content;
		}

		$post_id = get_the_ID();
		if ( (int) Helper::get_settings( 'sitemap.html_sitemap_page' ) !== $post_id ) {
			return $content;
		}

		return $content . $this->get_output();
	}

	/**
	 * Shortcode callback.
	 */
	public function shortcode() {
		return $this->get_output();
	}
}
PK     ¥ŠU]pÒ¤™S  S  -  includes/modules/sitemap/class-classifier.phpnu „[µü¤        <?php
/**
 * The link classifier finds out if a link points to internal content or external content.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Sitemap
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath\Sitemap;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Classifier class.
 */
class Classifier {

	const TYPE_EXTERNAL = 'external';
	const TYPE_INTERNAL = 'internal';

	/**
	 * Base host.
	 *
	 * @var string
	 */
	protected $base_host = '';

	/**
	 * Base path.
	 *
	 * @var string
	 */
	protected $base_path = '';

	/**
	 * Constructor setting the base url.
	 *
	 * @param string $base_url The base url to set.
	 */
	public function __construct( $base_url ) {

		$this->base_host = Helper::get_url_part( $base_url, 'host' );

		$base_path = Helper::get_url_part( $base_url, 'path' );
		if ( $base_path ) {
			$this->base_path = trailingslashit( $base_path );
		}
	}

	/**
	 * Determines if the given link is an outbound or an internal link.
	 *
	 * @param  string $link The link to classify.
	 * @return string Returns outbound or internal.
	 */
	public function classify( $link ) {
		$url_parts = wp_parse_url( $link );

		// Because parse_url may return false.
		if ( ! is_array( $url_parts ) ) {
			$url_parts = [];
		}

		// Short-circuit if filter returns non-null.
		$filtered = apply_filters( 'rank_math/links/is_external', null, $url_parts );
		if ( null !== $filtered ) {
			return $filtered ? self::TYPE_EXTERNAL : self::TYPE_INTERNAL;
		}

		if ( $this->contains_protocol( $url_parts ) && $this->is_external_link( $url_parts ) ) {
			return self::TYPE_EXTERNAL;
		}

		return self::TYPE_INTERNAL;
	}

	/**
	 * Returns true when the link starts with `https://` or `http://`.
	 *
	 * @param  array $url_parts The URL parts to use.
	 * @return bool True if the URL starts with a protocol.
	 */
	protected function contains_protocol( array $url_parts ) {
		return isset( $url_parts['scheme'] ) && null !== $url_parts['scheme'];
	}

	/**
	 * Checks if the link contains the `home_url`. Returns true if this isn't the case.
	 *
	 * @param  array $url_parts The URL parts to use.
	 * @return bool True when the link doesn't contain the home url.
	 */
	protected function is_external_link( array $url_parts ) {
		if ( $this->has_valid_scheme( $url_parts ) || $this->has_different_host( $url_parts ) ) {
			return true;
		}

		// There is no base path.
		if ( empty( $this->base_path ) ) {
			return false;
		}

		// When there is a path.
		if ( isset( $url_parts['path'] ) ) {
			return ( strpos( $url_parts['path'], $this->base_path ) === false );
		}

		return true;
	}

	/**
	 * Checks if the link contains valid scheme.
	 *
	 * @param  array $url_parts The URL parts to use.
	 * @return bool
	 */
	private function has_valid_scheme( array $url_parts ) {
		return isset( $url_parts['scheme'] ) && ! in_array( $url_parts['scheme'], [ 'http', 'https' ], true );
	}

	/**
	 * Checks if the base host is equal to the host.
	 *
	 * @param  array $url_parts The URL parts to use.
	 * @return bool
	 */
	private function has_different_host( array $url_parts ) {
		return isset( $url_parts['host'] ) && $url_parts['host'] !== $this->base_host;
	}
}
PK     ¥ŠU]ÃAI©    :  includes/modules/version-control/class-version-control.phpnu „[µü¤        <?php
/**
 * The Version Control internal module.
 *
 * @package    RankMath
 * @subpackage RankMath\Version_Control
 */

namespace RankMath;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Version_Control class.
 */
class Version_Control {

	use Hooker;

	/**
	 * Module ID.
	 *
	 * @var string
	 */
	public $id = '';

	/**
	 * Module directory.
	 *
	 * @var string
	 */
	public $directory = '';

	/**
	 * Plugin info transient key.
	 *
	 * @var string
	 */
	const TRANSIENT = 'rank_math_wporg_plugin_info';

	/**
	 * WordPress.org plugins API URL.
	 *
	 * @var string
	 */
	const API_URL = 'https://api.wordpress.org/plugins/info/1.0/seo-by-rank-math.json';

	/**
	 * Constructor.
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() ) {
			return;
		}

		if ( Helper::is_rest() ) {
			return;
		}

		$this->config(
			[
				'id'        => 'status',
				'directory' => __DIR__,
			]
		);

		$this->hooks();
	}

	/**
	 * Register version control hooks.
	 */
	public function hooks() {
		if ( Helper::get_settings( 'general.beta_optin' ) ) {
			$beta_optin = new Beta_Optin();
			$beta_optin->hooks();
		}
	}

	/**
	 * Get localized JSON data based on the Page view.
	 */
	public static function get_json_data() {
		$versions = array_reverse( array_keys( Beta_Optin::get_available_versions( Helper::get_settings( 'general.beta_optin' ) ) ) );
		array_splice( $versions, 10 );
		return [
			'latestVersion'           => Beta_Optin::get_latest_version(),
			'isRollbackVersion'       => Rollback_Version::is_rollback_version(),
			'isPluginUpdateDisabled'  => Helper::is_plugin_update_disabled(),
			'availableVersions'       => $versions,
			'updateCoreUrl'           => self_admin_url( 'update-core.php' ),
			'rollbackVersion'         => get_option( 'rank_math_rollback_version', false ),
			'rollbackNonce'           => wp_create_nonce( 'rank-math-rollback' ),
			'betaOptin'               => boolval( Helper::get_settings( 'general.beta_optin' ) ),
			'autoUpdate'              => boolval( Helper::get_auto_update_setting() ),
			'updateNotificationEmail' => boolval( Helper::get_settings( 'general.update_notification_email' ) ),
		];
	}

	/**
	 * Get Rank Math plugin information.
	 *
	 * @return mixed Plugin information array or false on fail.
	 */
	public static function get_plugin_info() {
		$cache = get_transient( self::TRANSIENT );
		if ( $cache ) {
			return $cache;
		}

		$request = wp_remote_get( self::API_URL, [ 'timeout' => 20 ] );
		if ( ! is_wp_error( $request ) && is_array( $request ) ) {
			$response = json_decode( $request['body'], true );
			set_transient( self::TRANSIENT, $response, ( 12 * HOUR_IN_SECONDS ) );
			return $response;
		}

		return false;
	}

	/**
	 * Get plugin data to use in the `update_plugins` transient.
	 *
	 * @param  string $version New version.
	 * @param  string $package New version download URL.
	 * @return array           An array of plugin metadata.
	 */
	public static function get_plugin_data( $version, $package ) {
		return [
			'id'          => 'w.org/plugins/seo-by-rank-math',
			'slug'        => 'seo-by-rank-math',
			'plugin'      => 'seo-by-rank-math/rank-math.php',
			'new_version' => $version,
			'url'         => 'https://wordpress.org/plugins/seo-by-rank-math/',
			'package'     => $package,
			'icons'       =>
			[
				'2x'  => 'https://ps.w.org/seo-by-rank-math/assets/icon-256x256.png?rev=2034417',
				'1x'  => 'https://ps.w.org/seo-by-rank-math/assets/icon.svg?rev=2034417',
				'svg' => 'https://ps.w.org/seo-by-rank-math/assets/icon.svg?rev=2034417',
			],
			'banners'     =>
			[
				'2x' => 'https://ps.w.org/seo-by-rank-math/assets/banner-1544x500.png?rev=2034417',
				'1x' => 'https://ps.w.org/seo-by-rank-math/assets/banner-772x250.png?rev=2034417',
			],
			'banners_rtl' => [],
		];
	}
}
PK     ¥ŠU]ŸA_†  †  ,  includes/modules/version-control/display.phpnu „[µü¤        <?php
/**
 * The Version Control View to be used on Network Admin.
 *
 * @package    RankMath
 * @subpackage RankMath\Version_Control
 */

namespace RankMath;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

if ( Rollback_Version::should_rollback() ) {
	$rollback = new Rollback_Version();
	$rollback->rollback();
	return;
}

echo '<div id="rank-math-version-control-wrapper"></div>';
PK     ¥ŠU]ŒÛ      *  includes/modules/version-control/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]ïÖMF1%  1%  5  includes/modules/version-control/class-beta-optin.phpnu „[µü¤        <?php
/**
 * The Beta Opt-in functionality.
 *
 * @package    RankMath
 * @subpackage RankMath\Version_Control
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Str;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Beta_Optin class.
 */
class Beta_Optin {

	use Hooker;

	/**
	 * Beta changelog URL.
	 *
	 * @var string
	 */
	const BETA_CHANGELOG_URL = 'https://rankmath.com/changelog/beta/';

	/**
	 * Placeholder for opening tag inserted with JS.
	 *
	 * @var string
	 */
	const NOTICE_START_MARKER = '&#x25B7;';

	/**
	 * Placeholder for closing tag inserted with JS.
	 *
	 * @var string
	 */
	const NOTICE_END_MARKER = '&#x25C1;';

	/**
	 * Holds the fetched trunk version in memory to avoid fetching multiple times.
	 *
	 * @var mixed
	 */
	public $trunk_version = false;

	/**
	 * Actions and filters.
	 *
	 * @return void
	 */
	public function hooks() {
		$this->filter( 'site_transient_update_plugins', 'transient_update_plugins' );
		$this->action( 'in_plugin_update_message-seo-by-rank-math/rank-math.php', 'plugin_update_message' );
		$this->action( 'install_plugins_pre_plugin-information', 'beta_plugin_information' );
		$this->action( 'admin_footer', 'beta_changelog_link_js' );
	}

	/**
	 * Replace plugin info popup for beta versions.
	 */
	public function beta_plugin_information() {
		if ( 'seo-by-rank-math' !== Param::request( 'plugin' ) ) {
			return;
		}

		$transient = get_site_transient( 'update_plugins' );
		if ( self::has_beta_update( $transient ) ) {
			// No-js fallback.
			echo '<html><head></head><body style="margin: 0;"><iframe src="' . esc_attr( self::BETA_CHANGELOG_URL ) . '" style="width: 100%; height: 100%;"></body></html>';
			exit;
		}
	}

	/**
	 * Check if Rank Math update is a beta update in the transient.
	 *
	 * @param  mixed $transient Transient value.
	 * @return boolean          If it is a beta update or not.
	 */
	public static function has_beta_update( $transient ) {
		return (
			is_object( $transient )
			&& ! empty( $transient->response )
			&& ! empty( $transient->response['seo-by-rank-math/rank-math.php'] )
			&& ! empty( $transient->response['seo-by-rank-math/rank-math.php']->is_beta )
		);
	}

	/**
	 * Get all available versions of Rank Math.
	 *
	 * @param boolean $beta  Include beta versions.
	 *
	 * @return array List of versions and download URLs.
	 */
	public static function get_available_versions( $beta = false ) {
		$versions    = [];
		$plugin_info = Version_Control::get_plugin_info();
		if ( empty( $plugin_info['versions'] ) ) {
			return $versions;
		}

		foreach ( (array) $plugin_info['versions'] as $version => $url ) {
			if ( ! self::is_eligible_version( $version, $beta ) ) {
				continue;
			}
			$versions[ $version ] = $url;
		}

		uksort( $versions, 'version_compare' );

		return $versions;
	}

	/**
	 * Check if version should be in the dropdown.
	 *
	 * @param  string  $version Version number.
	 * @param  boolean $beta    If beta versions should be included or not.
	 *
	 * @return boolean          If version should be in the dropdown.
	 */
	public static function is_eligible_version( $version, $beta ) {
		if ( 'trunk' === $version ) {
			return false;
		}

		if ( ! $beta && Str::contains( 'beta', $version ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Get latest version available.
	 *
	 * @return string Latest version number.
	 */
	public static function get_latest_version() {
		$plugin_info = Version_Control::get_plugin_info();
		return $plugin_info['version'];
	}

	/**
	 * Get latest beta version available.
	 *
	 * @return string Latest beta version number.
	 */
	public function get_latest_beta_version() {
		$version = get_transient( 'rank_math_trunk_version' );
		if ( ! $version || $this->is_check_requested() ) {
			$version = $this->fetch_trunk_version();
		}

		$beta = 0;
		if ( Str::contains( 'beta', $version ) ) {
			$beta = $version;
		}

		return $beta;
	}

	/**
	 * Fetch latest plugin file from public SVN and get version number.
	 *
	 * @return string
	 */
	public function fetch_trunk_version() {
		if ( false !== $this->trunk_version ) {
			return $this->trunk_version;
		}

		$this->trunk_version = 0;

		$response = wp_remote_get( 'https://plugins.svn.wordpress.org/seo-by-rank-math/trunk/rank-math.php' );
		if ( is_wp_error( $response ) || ! is_array( $response ) ) {
			return $this->trunk_version;
		}

		$plugin_file = wp_remote_retrieve_body( $response );

		preg_match( '/Version:\s+([0-9a-zA-Z.-]+)\s*$/m', $plugin_file, $matches );
		if ( empty( $matches[1] ) ) {
			return $this->trunk_version;
		}

		$this->trunk_version = $matches[1];
		set_transient( 'rank_math_trunk_version', $this->trunk_version, ( 12 * HOUR_IN_SECONDS ) );
		return $this->trunk_version;
	}

	/**
	 * Inject beta in the `update_plugins` transient to be able to update to it.
	 *
	 * @param  mixed $value Original value.
	 *
	 * @return mixed New value.
	 */
	public function transient_update_plugins( $value ) {
		$beta_version = $this->get_latest_beta_version();
		$new_version  = isset( $value->response['seo-by-rank-math/rank-math.php'] ) && ! empty( $value->response['seo-by-rank-math/rank-math.php']->new_version ) ? $value->response['seo-by-rank-math/rank-math.php']->new_version : 0;

		if ( ! $beta_version ) {
			return $value;
		}

		if ( version_compare( $beta_version, rank_math()->version, '>' ) && version_compare( $beta_version, $new_version, '>' ) ) {
			$value = $this->inject_beta( $value, $beta_version );
		}

		return $value;
	}

	/**
	 * Inject beta update in the transient value.
	 *
	 * @param  mixed  $value        Transient value.
	 * @param  string $beta_version Beta version number.
	 *
	 * @return mixed New transient value.
	 */
	public function inject_beta( $value, $beta_version ) {
		if ( empty( $value ) ) {
			$value = new \stdClass();
		}

		if ( empty( $value->response ) ) {
			$value->response = [];
		}

		$value->response['seo-by-rank-math/rank-math.php'] = new \stdClass();

		$plugin_data = Version_Control::get_plugin_data( $beta_version, 'https://downloads.wordpress.org/plugin/seo-by-rank-math.zip' );
		foreach ( $plugin_data as $prop_key => $prop_value ) {
			$value->response['seo-by-rank-math/rank-math.php']->{$prop_key} = $prop_value;
		}

		$value->response['seo-by-rank-math/rank-math.php']->is_beta        = true;
		$value->response['seo-by-rank-math/rank-math.php']->upgrade_notice = self::NOTICE_START_MARKER . ' ' . __( 'This update will install a beta version of Rank Math.', 'seo-by-rank-math' ) . ' ' . self::NOTICE_END_MARKER;

		if ( empty( $value->no_update ) ) {
			$value->no_update = [];
		}

		unset( $value->no_update['seo-by-rank-math/rank-math.php'] );

		return $value;
	}

	/**
	 * Add warning about beta version in the update notice.
	 *
	 * @param  array $plugin_data An array of plugin metadata.
	 * @return void
	 */
	public function plugin_update_message( $plugin_data ) {
		if ( empty( $plugin_data['is_beta'] ) ) {
			return;
		}

		printf(
			'</p><p class="rank-math-beta-update-notice">%s',
			esc_html__( 'This update will install a beta version of Rank Math.', 'seo-by-rank-math' )
		);
	}

	/**
	 * Add Javascript to open beta changelog link in a new tab instead of the modal.
	 *
	 * @return void
	 */
	public function beta_changelog_link_js() {
		$screen = get_current_screen();

		$applicable_screens = [
			'update-core',
			'plugins',
			'update-core-network',
			'plugins-network',
		];

		if ( empty( $screen->base ) || ! in_array( $screen->base, $applicable_screens, true ) ) {
			return;
		}

		$transient = get_site_transient( 'update_plugins' );
		if ( ! self::has_beta_update( $transient ) ) {
			return;
		}
		?>
		<script type="text/javascript">
			jQuery( document ).ready( function( $ ) {
				// Change our link.
				$('.open-plugin-details-modal').each( function( index, element ) {
					if ( element.href.indexOf( 'plugin=seo-by-rank-math&section=changelog' ) !== -1 ) {
						// Found our link.
						$( element )
							.removeClass( 'open-plugin-details-modal thickbox' )
							.attr( 'href', '<?php echo esc_js( self::BETA_CHANGELOG_URL ); ?>' )
							.attr( 'target', '_blank' );
						return false;
					}
				} );

				// Change our notice.
				<?php if ( 'update-core' === $screen->base || 'update-core-network' === $screen->base ) { ?>
					$('td.plugin-title').each( function( index, element ) {
						var contents = $( element ).html();
						if ( contents.indexOf( '<?php echo esc_js( html_entity_decode( self::NOTICE_START_MARKER ) ); ?>' ) !== -1 && contents.indexOf( '<?php echo esc_js( html_entity_decode( self::NOTICE_END_MARKER ) ); ?>' ) !== -1 ) {
							contents = contents
								.replace( '<?php echo esc_js( html_entity_decode( self::NOTICE_START_MARKER ) ); ?>', '</p><div class="update-message notice inline notice-warning notice-alt rank-math-beta-update-notice"><p>' )
								.replace( '<?php echo esc_js( html_entity_decode( self::NOTICE_END_MARKER ) ); ?>', '</p></div><p style="display: none;">' );

							$( element ).html( contents );

							return false;
						}
					} );
				<?php } ?>
			} );
		</script>
		<style>
			.update-message.rank-math-beta-update-notice {
				font-weight: bold;
				margin-top: 20px;
			}
			.update-message.rank-math-beta-update-notice > p:before {
				content: "\f534";
			}
		</style>
		<?php
	}

	/**
	 * If user requested check with force-check parameter.
	 *
	 * @return bool
	 */
	public function is_check_requested() {
		return (bool) Param::get( 'force-check' );
	}
}
PK     ¥ŠU]’z‚Þl  l  ;  includes/modules/version-control/class-rollback-version.phpnu „[µü¤        <?php
/**
 * The Version Rollback Class.
 *
 * @package    RankMath
 * @subpackage RankMath\Version_Control
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Param;

defined( 'ABSPATH' ) || exit;

/**
 * Rollback_Version class.
 */
class Rollback_Version {

	use Hooker;

	/**
	 * Rollback version option key.
	 *
	 * @var string
	 */
	const ROLLBACK_VERSION_OPTION = 'rank_math_rollback_version';

	/**
	 * Check if currently installed version is a rollback version.
	 *
	 * @return boolean Whether it is rollback or not.
	 */
	public static function is_rollback_version() {
		$is_rollback = boolval( get_option( self::ROLLBACK_VERSION_OPTION, false ) );
		if ( ! $is_rollback ) {
			return false;
		}

		$current_version = rank_math()->version;
		$latest_version  = Beta_Optin::get_latest_version();
		if ( $current_version === $latest_version ) {
			delete_option( self::ROLLBACK_VERSION_OPTION );
			return false;
		}

		return true;
	}

	/**
	 * Check if we should roll back in this request or not.
	 */
	public static function should_rollback() {
		if ( ! Param::post( 'rm_rollback_version' ) ) {
			return false;
		}

		if ( ! current_user_can( 'update_plugins' ) ) {
			return false;
		}

		if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['_wpnonce'] ), 'rank-math-rollback' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Reinstall previous version.
	 *
	 * @return boolean Whether the installation was successful.
	 */
	public function rollback() {
		$title        = __( 'Rollback Plugin', 'seo-by-rank-math' );
		$parent_file  = 'plugins.php';
		$submenu_file = 'plugins.php';
		$new_version  = Param::post( 'rm_rollback_version' );

		wp_enqueue_script( 'updates' );
		$plugin = 'seo-by-rank-math/rank-math.php';
		$nonce  = 'upgrade-plugin_' . $plugin;
		$url    = 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $plugin );
		if ( ! class_exists( '\Plugin_Upgrader' ) ) {
			require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // @phpstan-ignore-line
		}

		update_option( self::ROLLBACK_VERSION_OPTION, $new_version );
		// Downgrade version number if necessary.
		if ( version_compare( rank_math()->version, $new_version, '>' ) ) {
			update_option( 'rank_math_version', $new_version );
		}

		add_filter( 'pre_site_transient_update_plugins', [ $this, 'pre_transient_update_plugins' ], 20 );
		add_filter( 'gettext', [ $this, 'change_updater_strings' ], 20, 2 );
		$upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) ) );
		echo '<div class="rank-math-rollback-status">';
		$upgrader->upgrade( $plugin );
		echo '</div>';
		remove_filter( 'pre_site_transient_update_plugins', [ $this, 'pre_transient_update_plugins' ], 20 );
		remove_filter( 'gettext', [ $this, 'change_updater_strings' ], 20, 2 );

		return true;
	}

	/**
	 * Inject old version in the `update_plugins` transient for downgrading.
	 *
	 * @return object New `update_plugins` data object.
	 */
	public function pre_transient_update_plugins() {
		$versions       = Beta_Optin::get_available_versions( true );
		$selected       = Param::post( 'rm_rollback_version' );
		$package        = $versions[ $selected ];
		$data           = new \stdClass();
		$data->response = [];
		$data->response['seo-by-rank-math/rank-math.php'] = new \stdClass();

		$plugin_data = Version_Control::get_plugin_data( $selected, $package );
		foreach ( $plugin_data as $prop_key => $prop_value ) {
			$data->response['seo-by-rank-math/rank-math.php']->{$prop_key} = $prop_value;
		}
		return $data;
	}

	/**
	 * Hooked to gettext filter to change strings in the Updater for the rollback process.
	 *
	 * @param  string $translation Translated text.
	 * @param  string $text        Original text.
	 *
	 * @return string New translated text.
	 */
	public function change_updater_strings( $translation, $text ) {
		if ( 'Plugin updated successfully.' === $text ) {
			return __( 'Plugin rollback successful.', 'seo-by-rank-math' );
		}

		if ( 'Installing the latest version&#8230;' === $text ) {
			return __( 'Installing the rollback version&#8230;', 'seo-by-rank-math' );
		}

		return $translation;
	}
}
PK     ¥ŠU]ûáA1j  j  ?  includes/modules/database-tools/class-yoast-howto-converter.phpnu „[µü¤        <?php
/**
 * The Yoast HowTo Block Converter.
 *
 * @since      1.0.37
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast_HowTo_Converter class.
 */
class Yoast_HowTo_Converter {

	/**
	 * Convert HowTo blocks to Rank Math.
	 *
	 * @param array $block Block to convert.
	 *
	 * @return array
	 */
	public function convert( $block ) {
		$attrs     = $block['attrs'];
		$new_block = [
			'blockName' => 'rank-math/howto-block',
			'attrs'     => [
				'hasDuration'       => isset( $attrs['hasDuration'] ) ? $attrs['hasDuration'] : '',
				'days'              => isset( $attrs['days'] ) ? $attrs['days'] : '',
				'hours'             => isset( $attrs['hours'] ) ? $attrs['hours'] : '',
				'minutes'           => isset( $attrs['minutes'] ) ? $attrs['minutes'] : '',
				'description'       => isset( $attrs['jsonDescription'] ) ? $attrs['jsonDescription'] : '',
				'listStyle'         => isset( $attrs['unorderedList'] ) && $attrs['unorderedList'] ? 'ol' : '',
				'timeLabel'         => isset( $attrs['durationText'] ) ? $attrs['durationText'] : '',
				'textAlign'         => 'left',
				'titleWrapper'      => 'h3',
				'listCssClasses'    => '',
				'titleCssClasses'   => '',
				'contentCssClasses' => '',
				'steps'             => array_map( [ $this, 'get_step' ], $attrs['steps'] ),
				'className'         => isset( $attrs['className'] ) ? $attrs['className'] : '',
			],
		];

		$new_block['innerContent'][] = $this->get_html( $new_block['attrs'] );

		return $new_block;
	}

	/**
	 * Replace block in content.
	 *
	 * @param string $post_content Post content.
	 * @param array  $blocks       Blocks.
	 *
	 * @return string
	 */
	public function replace( $post_content, $blocks ) {
		preg_match_all( '/<!-- wp:yoast\/how-to-block.*-->.*<!-- \/wp:yoast\/how-to-block -->/iUs', $post_content, $matches );

		foreach ( $matches[0] as $index => $match ) {
			$post_content = \str_replace( $match, $blocks[ $index ], $post_content );
		}

		return $post_content;
	}

	/**
	 * Format steps.
	 *
	 * @param array $step Steps.
	 *
	 * @return array
	 */
	public function get_step( $step ) {
		return [
			'id'      => uniqid( 'howto-step-' ),
			'visible' => true,
			'title'   => $step['jsonName'],
			'content' => $step['jsonText'],
		];
	}

	/**
	 * Generate HTML.
	 *
	 * @param array $attributes Block attributes.
	 *
	 * @return string
	 */
	private function get_html( $attributes ) {
		// HTML.
		$out = [ '<div class="wp-block-rank-math-howto-block">' ];

		// Steps.
		foreach ( $attributes['steps'] as $step ) {
			if ( empty( $step['visible'] ) ) {
				continue;
			}

			$out[] = '<div class="rank-math-howto-step">';

			if ( ! empty( $step['title'] ) ) {
				$out[] = sprintf(
					'<%1$s class="rank-math-howto-title">%2$s</%1$s>',
					$attributes['titleWrapper'],
					$step['title']
				);
			}

			if ( ! empty( $step['content'] ) ) {
				$out[] = sprintf(
					'<div class="rank-math-howto-content">%1$s</div>',
					$step['content']
				);
			}

			$out[] = '</div>';
		}

		$out[] = '</div>';

		return join( '', $out );
	}
}
PK     ¥ŠU]…z*7¼  ¼  6  includes/modules/database-tools/class-yoast-blocks.phpnu „[µü¤        <?php
/**
 * The Yoast Block Converter imports editor blocks (FAQ, HowTo, Local Business) from Yoast to Rank Math.
 *
 * @since      1.0.37
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast_Blocks class.
 */
class Yoast_Blocks extends \WP_Background_Process {

	/**
	 * FAQ Converter.
	 *
	 * @var Yoast_FAQ_Converter
	 */
	private $faq_converter;

	/**
	 * FAQ Converter.
	 *
	 * @var Yoast_HowTo_Converter
	 */
	private $howto_converter;

	/**
	 * TOC Converter.
	 *
	 * @var Yoast_TOC_Converter
	 */
	private $toc_converter;

	/**
	 * Local Converter.
	 *
	 * @var Yoast_Local_Converter
	 */
	private $local_converter;

	/**
	 * Action.
	 *
	 * @var string
	 */
	protected $action = 'convert_yoast_blocks';

	/**
	 * Holds blocks for each post.
	 *
	 * @var array
	 */
	private static $yoast_blocks = [];

	/**
	 * Main instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Yoast_Blocks
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Yoast_Blocks ) ) {
			$instance = new Yoast_Blocks();
		}

		return $instance;
	}

	/**
	 * Start creating batches.
	 *
	 * @param array $posts Posts to process.
	 */
	public function start( $posts ) {
		$chunks = array_chunk( $posts, 10 );
		foreach ( $chunks as $chunk ) {
			$this->push_to_queue( $chunk );
		}

		$this->save()->dispatch();
	}

	/**
	 * Complete.
	 *
	 * Override if applicable, but ensure that the below actions are
	 * performed, or, call parent::complete().
	 */
	protected function complete() {
		$posts = get_option( 'rank_math_yoast_block_posts' );
		delete_option( 'rank_math_yoast_block_posts' );
		Helper::add_notification(
			// Translators: placeholder is the number of modified posts.
			sprintf( _n( 'Blocks successfully converted in %d post.', 'Blocks successfully converted in %d posts.', $posts['count'], 'seo-by-rank-math' ), $posts['count'] ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_yoast_block_posts',
				'classes' => 'rank-math-notice',
			]
		);

		parent::complete();
	}

	/**
	 * Task to perform.
	 *
	 * @param string $posts Posts to process.
	 */
	public function wizard( $posts ) {
		$this->task( $posts );
	}

	/**
	 * Task to perform.
	 *
	 * @param array $posts Posts to process.
	 *
	 * @return bool
	 */
	protected function task( $posts ) {
		try {
			remove_filter( 'pre_kses', 'wp_pre_kses_block_attributes', 10 );
			$this->faq_converter   = new Yoast_FAQ_Converter();
			$this->howto_converter = new Yoast_HowTo_Converter();
			$this->local_converter = new Yoast_Local_Converter();
			$this->toc_converter   = new Yoast_TOC_Converter();
			foreach ( $posts as $post_id ) {
				self::$yoast_blocks = [];
				$post               = get_post( $post_id );
				$this->convert( $post );
			}
			return false;
		} catch ( \Exception $error ) {
			return true;
		}
	}

	/**
	 * Convert post.
	 *
	 * @param WP_Post $post Post object.
	 */
	public function convert( $post ) {
		$dirty  = false;
		$blocks = $this->parse_blocks( $post->post_content );

		$content = '';
		if ( isset( $blocks['yoast/faq-block'] ) && ! empty( $blocks['yoast/faq-block'] ) ) {
			$dirty   = true;
			$content = $this->faq_converter->replace( $post->post_content, $blocks['yoast/faq-block'] );
		}

		if ( isset( $blocks['yoast/how-to-block'] ) && ! empty( $blocks['yoast/how-to-block'] ) ) {
			$dirty   = true;
			$content = $this->howto_converter->replace( $post->post_content, $blocks['yoast/how-to-block'] );
		}

		if ( isset( $blocks['yoast-seo/table-of-contents'] ) && ! empty( $blocks['yoast-seo/table-of-contents'] ) ) {
			$dirty   = true;
			$content = $this->toc_converter->replace( $post->post_content, $blocks['yoast-seo/table-of-contents'] );
		}

		if ( ! empty( array_intersect( array_keys( $blocks ), $this->local_converter->yoast_blocks ) ) ) {
			$dirty   = true;
			$content = $this->local_converter->replace( $post->post_content, $blocks );
		}

		if ( $dirty ) {
			$post->post_content = $content;
			wp_update_post( $post );
		}
	}

	/**
	 * Find posts with Yoast blocks.
	 *
	 * @return array
	 */
	public function find_posts() {
		$posts = get_option( 'rank_math_yoast_block_posts' );
		if ( ! empty( $posts['posts'] ) ) {
			return $posts;
		}

		// FAQs Posts.
		$args = [
			's'             => 'wp:yoast/faq-block',
			'post_status'   => 'any',
			'numberposts'   => -1,
			'fields'        => 'ids',
			'no_found_rows' => true,
			'post_type'     => 'any',
		];
		$faqs = get_posts( $args );

		// HowTo Posts.
		$args['s'] = 'wp:yoast/how-to-block';
		$howto     = get_posts( $args );

		// TOC Posts.
		$args['s'] = 'wp:yoast-seo/table-of-contents';
		$toc       = get_posts( $args );

		// Local Business Posts.
		$args['s']      = ':yoast-seo-local/';
		$local_business = get_posts( $args );
		$posts          = array_merge( $faqs, $howto, $toc, $local_business );

		$posts_data = [
			'posts' => $posts,
			'count' => count( $posts ),
		];
		update_option( 'rank_math_yoast_block_posts', $posts_data, false );

		return $posts_data;
	}

	/**
	 * Parse blocks to get data.
	 *
	 * @param string $content Post content to parse.
	 *
	 * @return array
	 */
	private function parse_blocks( $content ) {
		$parsed_blocks = $this->filter_parsed_blocks( parse_blocks( $content ) );

		$blocks = [];
		foreach ( $parsed_blocks as $block ) {
			if ( empty( $block['blockName'] ) ) {
				continue;
			}

			$name = strtolower( $block['blockName'] );
			if ( ! isset( $blocks[ $name ] ) || ! is_array( $blocks[ $name ] ) ) {
				$blocks[ $name ] = [];
			}

			if ( ! isset( $block['innerContent'] ) ) {
				$block['innerContent'] = [];
			}

			if ( 'yoast/faq-block' === $name ) {
				$block             = $this->faq_converter->convert( $block );
				$blocks[ $name ][] = \serialize_block( $block );
			}

			if ( 'yoast/how-to-block' === $name ) {
				$block             = $this->howto_converter->convert( $block );
				$blocks[ $name ][] = \serialize_block( $block );
			}

			if ( 'yoast-seo/table-of-contents' === $name ) {
				$block             = $this->toc_converter->convert( $block );
				$blocks[ $name ][] = \serialize_block( $block );
			}

			if ( in_array( $name, $this->local_converter->yoast_blocks, true ) ) {
				$block             = $this->local_converter->convert( $block );
				$blocks[ $name ][] = \serialize_block( $block );
			}
		}

		return $blocks;
	}

	/**
	 * Does a deep filter for blocks.
	 *
	 * @param array $blocks The blocks array.
	 *
	 * @return array
	 */
	private function filter_parsed_blocks( $blocks ) {
		$block_names = [
			'yoast-seo/table-of-contents',
			'yoast/how-to-block',
			'yoast/faq-block',
		];

		foreach ( $blocks as $block ) {
			if ( in_array( $block['blockName'], $block_names, true ) ) {
				self::$yoast_blocks[] = $block;
			}
			if ( ! empty( $block['innerBlocks'] ) ) {
				$this->filter_parsed_blocks( $block['innerBlocks'] );
			}
		}

		return self::$yoast_blocks;
	}
}
PK     ¥ŠU]¾tÇ‘    7  includes/modules/database-tools/class-aioseo-blocks.phpnu „[µü¤        <?php
/**
 * The AIOSEO Block Converter imports editor blocks (TOC) from AIOSEO to Rank Math.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * AIOSEO_Blocks class.
 */
class AIOSEO_Blocks extends \WP_Background_Process {

	/**
	 * TOC Converter.
	 *
	 * @var AIOSEO_TOC_Converter
	 */
	private $toc_converter;

	/**
	 * Action.
	 *
	 * @var string
	 */
	protected $action = 'convert_aioseo_blocks';

	/**
	 * Main instance.
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return AIOSEO_Blocks
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof AIOSEO_Blocks ) ) {
			$instance = new AIOSEO_Blocks();
		}

		return $instance;
	}

	/**
	 * Start creating batches.
	 *
	 * @param array $posts Posts to process.
	 */
	public function start( $posts ) {
		$chunks = array_chunk( $posts, 10 );
		foreach ( $chunks as $chunk ) {
			$this->push_to_queue( $chunk );
		}

		$this->save()->dispatch();
	}

	/**
	 * Complete.
	 *
	 * Override if applicable, but ensure that the below actions are
	 * performed, or, call parent::complete().
	 */
	protected function complete() {
		$posts = get_option( 'rank_math_aioseo_block_posts' );
		delete_option( 'rank_math_aioseo_block_posts' );
		Helper::add_notification(
			// Translators: placeholder is the number of modified posts.
			sprintf( _n( 'Blocks successfully converted in %d post.', 'Blocks successfully converted in %d posts.', $posts['count'], 'seo-by-rank-math' ), $posts['count'] ),
			[
				'type'    => 'success',
				'id'      => 'rank_math_aioseo_block_posts',
				'classes' => 'rank-math-notice',
			]
		);

		parent::complete();
	}

	/**
	 * Task to perform.
	 *
	 * @param string $posts Posts to process.
	 */
	public function wizard( $posts ) {
		$this->task( $posts );
	}

	/**
	 * Task to perform.
	 *
	 * @param array $posts Posts to process.
	 *
	 * @return bool
	 */
	protected function task( $posts ) {
		try {
			remove_filter( 'pre_kses', 'wp_pre_kses_block_attributes', 10 );
			$this->toc_converter = new AIOSEO_TOC_Converter();
			foreach ( $posts as $post_id ) {
				$post = get_post( $post_id );
				$this->convert( $post );
			}
			return false;
		} catch ( \Exception $error ) {
			return true;
		}
	}

	/**
	 * Convert post.
	 *
	 * @param WP_Post $post Post object.
	 */
	public function convert( $post ) {
		$dirty   = false;
		$blocks  = $this->parse_blocks( $post->post_content );
		$content = '';

		if ( isset( $blocks['aioseo/table-of-contents'] ) && ! empty( $blocks['aioseo/table-of-contents'] ) ) {
			$dirty   = true;
			$content = $this->toc_converter->replace( $post->post_content, $blocks['aioseo/table-of-contents'] );
		}

		if ( $dirty ) {
			$post->post_content = $content;
			wp_update_post( $post );
		}
	}

	/**
	 * Find posts with AIOSEO blocks.
	 *
	 * @return array
	 */
	public function find_posts() {
		$posts = get_option( 'rank_math_aioseo_block_posts' );
		if ( false !== $posts ) {
			return $posts;
		}

		// TOC Posts.
		$args = [
			's'             => 'wp:aioseo/table-of-contents ',
			'post_status'   => 'any',
			'numberposts'   => -1,
			'fields'        => 'ids',
			'no_found_rows' => true,
			'post_type'     => 'any',
		];

		$toc_posts  = get_posts( $args );
		$posts_data = [
			'posts' => $toc_posts,
			'count' => count( $toc_posts ),
		];
		update_option( 'rank_math_aioseo_block_posts', $posts_data, false );

		return $posts_data;
	}

	/**
	 * Parse blocks to get data.
	 *
	 * @param string $content Post content to parse.
	 *
	 * @return array
	 */
	private function parse_blocks( $content ) {
		$parsed_blocks = parse_blocks( $content );

		$blocks = [];
		foreach ( $parsed_blocks as $block ) {
			if ( empty( $block['blockName'] ) ) {
				continue;
			}

			$name = strtolower( $block['blockName'] );
			if ( ! isset( $blocks[ $name ] ) || ! is_array( $blocks[ $name ] ) ) {
				$blocks[ $name ] = [];
			}

			if ( ! isset( $block['innerContent'] ) ) {
				$block['innerContent'] = [];
			}

			if ( 'aioseo/table-of-contents' === $name ) {
				$block             = $this->toc_converter->convert( $block );
				$blocks[ $name ][] = \serialize_block( $block );
			}
		}

		return $blocks;
	}
}
PK     ¥ŠU]Â¸àI�  �  6  includes/modules/database-tools/class-update-score.phpnu „[µü¤        <?php
/**
 * The tool to update SEO score on existing posts.
 *
 * @since      1.0.97
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

use RankMath\Helper;
use RankMath\Helpers\Param;
use RankMath\Traits\Hooker;
use RankMath\Paper\Paper;
use RankMath\Admin\Metabox\Screen;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Update_Score class.
 */
class Update_Score {

	use Hooker;

	/**
	 * Batch size.
	 *
	 * @var int
	 */
	private $batch_size;

	/**
	 * Screen object.
	 *
	 * @var object
	 */
	public $screen;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->batch_size = absint( apply_filters( 'rank_math/recalculate_scores_batch_size', 25 ) );

		$this->filter( 'rank_math/tools/update_seo_score', 'update_seo_score', 10, 2 );

		$this->screen = new Screen();
		$this->screen->load_screen( 'post' );

		if ( Param::get( 'page' ) === 'rank-math-status' ) {
			$this->action( 'admin_enqueue_scripts', 'enqueue' );
		}
	}

	/**
	 * Enqueue scripts & add JSON data needed to update the SEO score on existing posts.
	 */
	public function enqueue() {
		$scripts = [
			'lodash'             => '',
			'wp-data'            => '',
			'wp-core-data'       => '',
			'wp-compose'         => '',
			'wp-components'      => '',
			'wp-element'         => '',
			'wp-block-editor'    => '',
			'wp-wordcount'       => '',
			'rank-math-analyzer' => rank_math()->plugin_url() . 'assets/admin/js/analyzer.js',
		];

		foreach ( $scripts as $handle => $src ) {
			wp_enqueue_script( $handle, $src, [], rank_math()->version, true );
		}

		global $post;
		$temp_post = $post;
		if ( is_null( $post ) ) {
			$posts = get_posts(
				[
					'fields'         => 'id',
					'posts_per_page' => 1,
					'post_type'      => $this->get_post_types(),
				]
			);
			$post  = isset( $posts[0] ) ? $posts[0] : null; //phpcs:ignore -- Overriding $post is required to load the localized data for the post.
		}

		$this->screen->localize();
		$post = $temp_post; //phpcs:ignore -- Overriding $post is required to load the localized data for the post.

		Helper::add_json( 'totalPostsWithoutScore', $this->find( false ) );
		Helper::add_json( 'totalPosts', $this->find( true ) );
		Helper::add_json( 'batchSize', $this->batch_size );
	}

	/**
	 * Function to Update the SEO score.
	 *
	 * @param string               $message The message to return.
	 * @param WP_REST_Request|null $request The request object.
	 *
	 * @return array|string The message to return.
	 */
	public function update_seo_score( $message = '', $request = null ) {
		if ( ! $request ) {
			// For backward compatibility where $request is not passed.
			$args = Param::post( 'args', [], FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
		} else {
			$params = $request->get_params();
			$args   = $params['args'] ?? [];
		}

		$offset = isset( $args['offset'] ) ? absint( $args['offset'] ) : 0;

		// We get "paged" when running from the importer.
		$paged = Param::post( 'paged', 0 );
		if ( $paged ) {
			$offset = ( $paged - 1 ) * $this->batch_size;
		}

		$update_all = ! empty( $args['update_all_scores'] );
		$query_args = [
			'post_type'      => $this->get_post_types(),
			'posts_per_page' => $this->batch_size,
			'offset'         => $offset,
			'orderby'        => 'ID',
			'order'          => 'ASC',
			'status'         => 'any',
			'meta_query'     => [
				'relation' => 'AND',
				[
					'key'     => 'rank_math_focus_keyword',
					'value'   => '',
					'compare' => '!=',
				],
			],
		];

		if ( ! $update_all ) {
			$query_args['meta_query'][] = [
				'relation' => 'OR',
				[
					'key'     => 'rank_math_seo_score',
					'compare' => 'NOT EXISTS',
				],
				[
					'key'     => 'rank_math_seo_score',
					'value'   => '',
					'compare' => '=',
				],
			];
		}

		$posts = get_posts( $query_args );

		if ( empty( $posts ) ) {
			return 'complete'; // Don't translate this string.
		}

		add_filter(
			'rank_math/replacements/non_cacheable',
			function ( $non_cacheable ) {
				$non_cacheable[] = 'excerpt';
				$non_cacheable[] = 'excerpt_only';
				$non_cacheable[] = 'seo_description';
				$non_cacheable[] = 'keywords';
				$non_cacheable[] = 'focuskw';
				return $non_cacheable;
			}
		);

		rank_math()->variables->setup();
		$data = [];
		foreach ( $posts as $post ) {
			$post_id   = $post->ID;
			$post_type = $post->post_type;
			$title     = get_post_meta( $post_id, 'rank_math_title', true );
			$title     = $title ? $title : Paper::get_from_options( "pt_{$post_type}_title", $post, '%title% %sep% %sitename%' );
			$keywords  = array_map( 'trim', explode( ',', Helper::get_post_meta( 'focus_keyword', $post_id ) ) );
			$keyword   = $keywords[0];

			$values = [
				'title'        => Helper::replace_vars( '%seo_title%', $post ),
				'description'  => Helper::replace_vars( '%seo_description%', $post ),
				'keywords'     => $keywords,
				'keyword'      => $keyword,
				'content'      => wpautop( $post->post_content ),
				'url'          => urldecode( get_the_permalink( $post_id ) ),
				'hasContentAi' => ! empty( Helper::get_post_meta( 'contentai_score', $post_id ) ),
				'post_type'    => $post_type,
			];

			if ( has_post_thumbnail( $post_id ) ) {
				$thumbnail_id           = get_post_thumbnail_id( $post_id );
				$values['thumbnail']    = get_the_post_thumbnail_url( $post_id );
				$values['thumbnailAlt'] = get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true );
			}

			/**
			 * Filter the values sent to the analyzer to calculate the SEO score.
			 *
			 * @param array $values The values to be sent to the analyzer.
			 */
			$data[ $post_id ] = $this->do_filter( 'recalculate_score/data', $values, $post_id );
		}

		return $data;
	}

	/**
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Update_Score
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Update_Score ) ) {
			$instance = new Update_Score();
		}

		return $instance;
	}

	/**
	 * Find posts with focus keyword but no SEO score.
	 *
	 * @param  bool $update_all Whether to update all posts or only those without a score.
	 * @return int
	 */
	public function find( $update_all = true ) {
		global $wpdb;
		$post_types  = $this->get_post_types();
		$placeholder = implode( ', ', array_fill( 0, count( $post_types ), '%s' ) );
		$query       = "SELECT COUNT(ID) FROM {$wpdb->posts} as p
			LEFT JOIN {$wpdb->postmeta} as pm ON p.ID = pm.post_id AND pm.meta_key = 'rank_math_focus_keyword'
			WHERE p.post_type IN ({$placeholder}) AND p.post_status = 'publish' AND pm.meta_value != ''";

		if ( ! $update_all ) {
			$query .= " AND (SELECT COUNT(*) FROM {$wpdb->postmeta} as pm2 WHERE pm2.post_id = p.ID AND pm2.meta_key = 'rank_math_seo_score' AND pm2.meta_value != '') = 0";
		}

		$update_score_post_ids = DB_Helper::get_var( $wpdb->prepare( $query, $post_types ) );

		return (int) $update_score_post_ids;
	}

	/**
	 * Get post types.
	 *
	 * @return array
	 */
	private function get_post_types() {
		$post_types = get_post_types( [ 'public' => true ] );
		if ( isset( $post_types['attachment'] ) ) {
			unset( $post_types['attachment'] );
		}

		return $this->do_filter( 'tool/post_types', array_keys( $post_types ) );
	}
}
PK     ¥ŠU]â£¹¼½  ½  =  includes/modules/database-tools/class-yoast-toc-converter.phpnu „[µü¤        <?php
/**
 * The Yoast TOC Block Converter.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

use RankMath\Helpers\HTML;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast_TOC_Converter class.
 */
class Yoast_TOC_Converter {

	/**
	 * Convert TOC blocks to Rank Math.
	 *
	 * @param array $block Block to convert.
	 *
	 * @return array
	 */
	public function convert( $block ) {
		$exclude_headings = [];
		if ( ! empty( $block['attrs']['maxHeadingLevel'] ) ) {
			for ( $i = $block['attrs']['maxHeadingLevel'] + 1; $i <= 6; $i++ ) {
				$exclude_headings[] = "h{$i}";
			}
		}

		$new_block = [
			'blockName' => 'rank-math/toc-block',
			'attrs'     => [
				'title'           => $this->get_toc_title( $block['innerHTML'] ),
				'headings'        => $this->get_headings( $block['innerHTML'] ),
				'listStyle'       => 'ul',
				'titleWrapper'    => 'h2',
				'excludeHeadings' => $exclude_headings,
			],
		];

		$new_block['innerContent'][] = $this->get_html( $block['innerHTML'] );

		return $new_block;
	}

	/**
	 * Replace block in content.
	 *
	 * @param string $post_content Post content.
	 * @param array  $blocks       Blocks.
	 *
	 * @return string
	 */
	public function replace( $post_content, $blocks ) {
		preg_match_all( '/<!-- wp:yoast-seo\/table-of-contents.*-->.*<!-- \/wp:yoast-seo\/table-of-contents -->/iUs', $post_content, $matches );

		foreach ( $matches[0] as $index => $match ) {
			$post_content = \str_replace( $match, $blocks[ $index ], $post_content );
		}

		return $post_content;
	}

	/**
	 * Extract headings from the block content.
	 *
	 * @param string $content Block content.
	 *
	 * @return array
	 */
	public function get_headings( $content ) {
		preg_match_all( '|<a\s*href="([^"]+)"[^>]+>([^<]+)</a>|', $content, $matches );
		if ( empty( $matches ) || empty( $matches[0] ) ) {
			return [];
		}

		$headings = [];
		foreach ( $matches[0] as $link ) {
			$attrs      = HTML::extract_attributes( $link );
			$headings[] = [
				'key'     => uniqid( 'toc-' ),
				'link'    => $attrs['href'] ?? '',
				'content' => wp_strip_all_tags( $link ),
				'level'   => $attrs['data-level'] ?? '',
				'disable' => false,
			];
		}
		return $headings;
	}

	/**
	 * Get TOC title.
	 *
	 * @param string $html Block HTML.
	 *
	 * @return string
	 */
	public function get_toc_title( $html ) {
		preg_match( '#<h2.*?>(.*?)</h2>#i', $html, $found );
		return ! empty( $found[1] ) ? $found[1] : '';
	}

	/**
	 * Generate HTML.
	 *
	 * @param string $html Block html.
	 *
	 * @return string
	 */
	private function get_html( $html ) {
		$html = str_replace( 'wp-block-yoast-seo-table-of-contents yoast-table-of-contents', 'wp-block-rank-math-toc-block', $html );
		$html = str_replace( '</h2><ul>', '</h2><nav><ul>', $html );
		$html = str_replace( '</ul></div>', '</nav></ul></div>', $html );
		$html = preg_replace( '/data-level="([^"]*)"/', '', $html );

		return $html;
	}
}
PK     ¥ŠU]#êEŽ(  (  >  includes/modules/database-tools/class-aioseo-toc-converter.phpnu „[µü¤        <?php
/**
 * The AIOSEO TOC Block Converter.
 *
 * @since      1.0.104
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

defined( 'ABSPATH' ) || exit;

/**
 * AIOSEO_TOC_Converter class.
 */
class AIOSEO_TOC_Converter {

	/**
	 * Convert TOC blocks to Rank Math.
	 *
	 * @param array $block Block to convert.
	 *
	 * @return array
	 */
	public function convert( $block ) {
		$attributes = $block['attrs'];
		$headings   = [];
		$this->get_headings( $attributes['headings'], $headings );
		$new_block = [
			'blockName' => 'rank-math/toc-block',
			'attrs'     => [
				'title'           => '',
				'headings'        => $headings,
				'listStyle'       => $attributes['listStyle'] ?? 'ul',
				'titleWrapper'    => 'h2',
				'excludeHeadings' => [],
			],
		];

		$new_block['innerContent'][] = $this->get_html( $block['innerHTML'] );
		return $new_block;
	}

	/**
	 * Replace block in content.
	 *
	 * @param string $post_content Post content.
	 * @param array  $blocks       Blocks.
	 *
	 * @return string
	 */
	public function replace( $post_content, $blocks ) {
		preg_match_all( '/<!-- wp:aioseo\/table-of-contents.*-->.*<!-- \/wp:aioseo\/table-of-contents -->/iUs', $post_content, $matches );

		foreach ( $matches[0] as $index => $match ) {
			$post_content = \str_replace( $match, $blocks[ $index ], $post_content );
		}

		return $post_content;
	}

	/**
	 * Get headings from the content.
	 *
	 * @param array $data     Block data.
	 * @param array $headings Headings.
	 *
	 * @return void
	 */
	public function get_headings( $data, &$headings ) {
		foreach ( $data as $heading ) {
			$headings[] = [
				'key'     => $heading['blockClientId'],
				'link'    => '#' . $heading['anchor'],
				'content' => ! empty( $heading['editedContent'] ) ? $heading['editedContent'] : $heading['content'],
				'level'   => ! empty( $heading['editedLevel'] ) ? $heading['editedLevel'] : $heading['level'],
				'disable' => ! empty( $heading['hidden'] ),
			];

			if ( ! empty( $heading['headings'] ) ) {
				$this->get_headings( $heading['headings'], $headings );
			}
		}
	}

	/**
	 * Get TOC title.
	 *
	 * @param string $html Block HTML.
	 *
	 * @return string
	 */
	public function get_toc_title( $html ) {
		preg_match( '#<h2.*?>(.*?)</h2>#i', $html, $found );
		return ! empty( $found[1] ) ? $found[1] : '';
	}

	/**
	 * Generate HTML.
	 *
	 * @param string $html Block html.
	 *
	 * @return string
	 */
	private function get_html( $html ) {
		$html = str_replace( 'wp-block-aioseo-table-of-contents', 'wp-block-rank-math-toc-block', $html );
		$html = str_replace( '<div class="wp-block-rank-math-toc-block"><ul>', '<div class="wp-block-rank-math-toc-block"><nav><ul>', $html );
		$html = str_replace( '</ul></div>', '</nav></ul></div>', $html );

		return $html;
	}
}
PK     ¥ŠU]Ÿ<Hö7  ö7  8  includes/modules/database-tools/class-database-tools.phpnu „[µü¤        <?php
/**
 * The Database_Tools is responsible for the Database Tools inside Status & Tools.
 *
 * @package    RankMath
 * @subpackage RankMath\Database_Tools
 */

namespace RankMath\Tools;

use RankMath\Helper;
use RankMath\Helpers\Str;
use RankMath\Helpers\Arr;
use RankMath\Helpers\Schedule;
use RankMath\Installer;
use RankMath\Traits\Hooker;
use RankMath\Helpers\DB as DB_Helper;
use RankMath\Helpers\Sitepress;

defined( 'ABSPATH' ) || exit;

/**
 * Database_Tools class.
 */
class Database_Tools {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		if ( Helper::is_heartbeat() || ! Helper::is_advanced_mode() ) {
			return;
		}

		Yoast_Blocks::get();
		AIOSEO_Blocks::get();
		Update_Score::get();
		$this->hooks();
	}

	/**
	 * Register version control hooks.
	 */
	public function hooks() {
		if ( Helper::is_rest() && Str::contains( 'toolsAction', add_query_arg( [] ) ) ) {
			foreach ( $this->get_tools() as $id => $tool ) {
				if ( ! method_exists( $this, $id ) ) {
					continue;
				}

				add_filter( 'rank_math/tools/' . $id, [ $this, $id ] );
			}
		}
	}

	/**
	 * Get localized JSON data to be used on the Database Tools view of the Status & Tools page.
	 */
	public static function get_json_data() {
		return [
			'tools' => self::get_tools(),
		];
	}

	/**
	 * Function to clear all the transients from the database.
	 */
	public function clear_transients() {
		global $wpdb;

		$transients = DB_Helper::get_col(
			"SELECT `option_name` AS `name`
			FROM  $wpdb->options
			WHERE `option_name` LIKE '%\\_transient\\_rank_math%'
			ORDER BY `option_name`"
		);

		if ( empty( $transients ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No Rank Math transients found.', 'seo-by-rank-math' ),
			];
		}

		$count = 0;
		foreach ( $transients as $transient ) {
			delete_option( $transient );
			++$count;
		}

		// Translators: placeholder is the number of transients deleted.
		return sprintf( _n( '%d Rank Math transient cleared.', '%d Rank Math transients cleared.', $count, 'seo-by-rank-math' ), $count );
	}

	/**
	 * Function to reset the SEO Analyzer.
	 */
	public function clear_seo_analysis() {
		$stored = get_option( 'rank_math_seo_analysis_results' );
		if ( empty( $stored ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'SEO Analyzer data has already been cleared.', 'seo-by-rank-math' ),
			];
		}

		delete_option( 'rank_math_seo_analysis_results' );
		delete_option( 'rank_math_seo_analysis_date' );

		return __( 'SEO Analyzer data successfully deleted.', 'seo-by-rank-math' );
	}

	/**
	 * Function to delete all the Internal Links data.
	 */
	public function delete_links() {
		global $wpdb;

		$exists = DB_Helper::get_var( "SELECT EXISTS ( SELECT 1 FROM {$wpdb->prefix}rank_math_internal_links )" );
		if ( empty( $exists ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No Internal Links data found.', 'seo-by-rank-math' ),
			];
		}

		DB_Helper::query( "TRUNCATE TABLE {$wpdb->prefix}rank_math_internal_links" );
		DB_Helper::query( "TRUNCATE TABLE {$wpdb->prefix}rank_math_internal_meta" );

		return __( 'Internal Links successfully deleted.', 'seo-by-rank-math' );
	}

	/**
	 * Function to delete all the 404 log items.
	 */
	public function delete_log() {
		global $wpdb;

		$exists = DB_Helper::get_var( "SELECT EXISTS ( SELECT 1 FROM {$wpdb->prefix}rank_math_404_logs )" );
		if ( empty( $exists ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No 404 log data found.', 'seo-by-rank-math' ),
			];
		}

		DB_Helper::query( "TRUNCATE TABLE {$wpdb->prefix}rank_math_404_logs;" );

		return __( '404 Log successfully deleted.', 'seo-by-rank-math' );
	}

	/**
	 * Function to delete all Redirections data.
	 */
	public function delete_redirections() {
		global $wpdb;

		$exists = DB_Helper::get_var( "SELECT EXISTS ( SELECT 1 FROM {$wpdb->prefix}rank_math_redirections )" );
		if ( empty( $exists ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No Redirections found.', 'seo-by-rank-math' ),
			];
		}

		DB_Helper::query( "TRUNCATE TABLE {$wpdb->prefix}rank_math_redirections;" );
		DB_Helper::query( "TRUNCATE TABLE {$wpdb->prefix}rank_math_redirections_cache;" );

		return __( 'Redirection rules successfully deleted.', 'seo-by-rank-math' );
	}

	/**
	 * Re-create Database Tables.
	 *
	 * @return string
	 */
	public function recreate_tables() {
		// Base.
		Installer::create_tables( get_option( 'rank_math_modules', [] ) );

		// ActionScheduler.
		$this->maybe_recreate_actionscheduler_tables();

		// Analytics module.
		if ( Helper::is_module_active( 'analytics' ) ) {
			Schedule::async_action(
				'rank_math/analytics/workflow/create_tables',
				[],
				'rank-math'
			);
		}

		return __( 'Table re-creation started. It might take a couple of minutes.', 'seo-by-rank-math' );
	}

	/**
	 * Recreate ActionScheduler tables if missing.
	 */
	public function maybe_recreate_actionscheduler_tables() {
		global $wpdb;

		if ( Helper::is_woocommerce_active() ) {
			return;
		}

		if (
			! class_exists( 'ActionScheduler_HybridStore' )
			|| ! class_exists( 'ActionScheduler_StoreSchema' )
			|| ! class_exists( 'ActionScheduler_LoggerSchema' )
		) {
			return;
		}

		$table_list = [
			'actionscheduler_actions',
			'actionscheduler_logs',
			'actionscheduler_groups',
			'actionscheduler_claims',
		];

		$found_tables = DB_Helper::get_col( "SHOW TABLES LIKE '{$wpdb->prefix}actionscheduler%'" );
		foreach ( $table_list as $table_name ) {
			if ( ! in_array( $wpdb->prefix . $table_name, $found_tables, true ) ) {
				$this->recreate_actionscheduler_tables();
				return;
			}
		}
	}

	/**
	 * Force the data store schema updates.
	 */
	public function recreate_actionscheduler_tables() {
		$store = new \ActionScheduler_HybridStore();
		add_action( 'action_scheduler/created_table', [ $store, 'set_autoincrement' ], 10, 2 );

		$store_schema  = new \ActionScheduler_StoreSchema();
		$logger_schema = new \ActionScheduler_LoggerSchema();
		$store_schema->register_tables( true );
		$logger_schema->register_tables( true );

		remove_action( 'action_scheduler/created_table', [ $store, 'set_autoincrement' ], 10 );
	}

	/**
	 * Function to convert Yoast blocks in posts to Rank Math blocks (FAQ & HowTo).
	 *
	 * @return string
	 */
	public function yoast_blocks() {
		$posts = Yoast_Blocks::get()->find_posts();
		if ( empty( $posts['posts'] ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No posts found to convert.', 'seo-by-rank-math' ),
			];
		}

		Yoast_Blocks::get()->start( $posts['posts'] );

		return __( 'Conversion started. A success message will be shown here once the process completes. You can close this page.', 'seo-by-rank-math' );
	}

	/**
	 * Function to convert AIOSEO blocks in posts to Rank Math blocks (TOC).
	 *
	 * @return string
	 */
	public function aioseo_blocks() {
		$posts = AIOSEO_Blocks::get()->find_posts();
		if ( empty( $posts['posts'] ) ) {
			return [
				'status'  => 'error',
				'message' => __( 'No posts found to convert.', 'seo-by-rank-math' ),
			];
		}

		AIOSEO_Blocks::get()->start( $posts['posts'] );

		return __( 'Conversion started. A success message will be shown here once the process completes. You can close this page.', 'seo-by-rank-math' );
	}

	/**
	 * Get tools.
	 *
	 * @return array
	 */
	private static function get_tools() {
		$tools = [];

		if ( Helper::is_module_active( 'seo-analysis' ) ) {
			$tools['clear_seo_analysis'] = [
				'title'       => __( 'Flush SEO Analyzer Data', 'seo-by-rank-math' ),
				'description' => __( "Need a clean slate or not able to run the SEO Analyzer tool? Flushing the analysis data might fix the issue. Flushing SEO Analyzer data is entirely safe and doesn't remove any critical data from your website.", 'seo-by-rank-math' ),
				'button_text' => __( 'Clear SEO Analyzer', 'seo-by-rank-math' ),
			];
		}

		$tools['clear_transients'] = [
			'title'       => __( 'Remove Rank Math Transients', 'seo-by-rank-math' ),
			'description' => __( 'If you see any issue while using Rank Math or one of its options - clearing the Rank Math transients fixes the problem in most cases. Deleting transients does not delete ANY data added using Rank Math.', 'seo-by-rank-math' ),
			'button_text' => __( 'Remove transients', 'seo-by-rank-math' ),
		];

		if ( Helper::is_module_active( '404-monitor' ) ) {
			$tools['delete_log'] = [
				'title'        => __( 'Clear 404 Log', 'seo-by-rank-math' ),
				'description'  => __( 'Is the 404 error log getting out of hand? Use this option to clear ALL 404 logs generated by your website in the Rank Math 404 Monitor.', 'seo-by-rank-math' ),
				'confirm_text' => __( 'Are you sure you want to delete the 404 log? This action is irreversible.', 'seo-by-rank-math' ),
				'button_text'  => __( 'Clear 404 Log', 'seo-by-rank-math' ),
			];
		}

		$tools['recreate_tables'] = [
			'title'       => __( 'Re-create Missing Database Tables', 'seo-by-rank-math' ),
			'description' => __( 'Check if required tables exist and create them if not.', 'seo-by-rank-math' ),
			'button_text' => __( 'Re-create Tables', 'seo-by-rank-math' ),
		];

		if ( Helper::is_module_active( 'analytics' ) ) {
			$tools['analytics_fix_collations'] = [
				'title'       => __( 'Fix Analytics table collations', 'seo-by-rank-math' ),
				'description' => __( 'In some cases, the Analytics database tables or columns don\'t match with each other, which can cause database errors. This tool can fix that issue.', 'seo-by-rank-math' ),
				'button_text' => __( 'Fix Collations', 'seo-by-rank-math' ),
			];
		}

		$block_posts = Yoast_Blocks::get()->find_posts();
		if ( is_array( $block_posts ) && ! empty( $block_posts['count'] ) ) {
			$tools['yoast_blocks'] = [
				'title'        => __( 'Yoast Block Converter', 'seo-by-rank-math' ),
				'description'  => __( 'Convert FAQ, HowTo, & Table of Contents Blocks created using Yoast. Use this option to easily move your previous blocks into Rank Math.', 'seo-by-rank-math' ),
				'confirm_text' => __( 'Are you sure you want to convert Yoast blocks into Rank Math blocks? This action is irreversible.', 'seo-by-rank-math' ),
				'button_text'  => __( 'Convert Blocks', 'seo-by-rank-math' ),
			];
		}

		$aio_block_posts = AIOSEO_Blocks::get()->find_posts();
		if ( is_array( $aio_block_posts ) && ! empty( $aio_block_posts['count'] ) ) {
			$tools['aioseo_blocks'] = [
				'title'        => __( 'AIOSEO Block Converter', 'seo-by-rank-math' ),
				'description'  => __( 'Convert TOC block created using AIOSEO. Use this option to easily move your previous blocks into Rank Math.', 'seo-by-rank-math' ),
				'confirm_text' => __( 'Are you sure you want to convert AIOSEO blocks into Rank Math blocks? This action is irreversible.', 'seo-by-rank-math' ),
				'button_text'  => __( 'Convert Blocks', 'seo-by-rank-math' ),
			];
		}

		if ( Helper::is_module_active( 'link-counter' ) ) {
			$tools['delete_links'] = [
				'title'        => __( 'Delete Internal Links Data', 'seo-by-rank-math' ),
				'description'  => __( 'In some instances, the internal links data might show an inflated number or no number at all. Deleting the internal links data might fix the issue.', 'seo-by-rank-math' ),
				'confirm_text' => __( 'Are you sure you want to delete Internal Links Data? This action is irreversible.', 'seo-by-rank-math' ),
				'button_text'  => __( 'Delete Internal Links', 'seo-by-rank-math' ),
			];
		}

		if ( Helper::is_module_active( 'redirections' ) ) {
			$tools['delete_redirections'] = [
				'title'        => __( 'Delete Redirections Rules', 'seo-by-rank-math' ),
				'description'  => __( 'Getting a redirection loop or need a fresh start? Delete all the redirections using this tool. Note: This process is irreversible and will delete ALL your redirection rules.', 'seo-by-rank-math' ),
				'confirm_text' => __( 'Are you sure you want to delete all the Redirection Rules? This action is irreversible.', 'seo-by-rank-math' ),
				'button_text'  => __( 'Delete Redirections', 'seo-by-rank-math' ),
			];
		}

		if ( ! empty( Update_Score::get()->find() ) ) {
			$tools['update_seo_score'] = [
				'title'       => __( 'Update SEO Scores', 'seo-by-rank-math' ),
				'description' => __( 'This tool will calculate the SEO score for the posts/pages that have a Focus Keyword set. Note: This process may take some time and the browser tab must be kept open while it is running.', 'seo-by-rank-math' ),
				'button_text' => __( 'Recalculate Scores', 'seo-by-rank-math' ),
			];
		}

		if ( Helper::is_module_active( 'analytics' ) && Helper::has_cap( 'analytics' ) ) {

			Arr::insert(
				$tools,
				[
					'analytics_clear_caches' => [
						'title'       => __( 'Purge Analytics Cache', 'seo-by-rank-math' ),
						'description' => __( 'Clear analytics cache to re-calculate all the stats again.', 'seo-by-rank-math' ),
						'button_text' => __( 'Clear Cache', 'seo-by-rank-math' ),
					],
				],
				3
			);

			$description = __( 'Missing some posts/pages in the Analytics data? Clear the index and build a new one for more accurate stats.', 'seo-by-rank-math' );

			$sitepress = Sitepress::get()->is_active() ? Sitepress::get()->get_var() : false;
			if ( Sitepress::get()->is_per_domain() && ! empty( $sitepress->get_setting( 'auto_adjust_ids', null ) ) ) {
				$description .= '<br /><br /><i>' . sprintf(
					/* translators: 1: settings URL, 2: settings text */
					__( 'To properly rebuild Analytics posts in secondary languages, please disable the %1$s when using a different domain per language.', 'seo-by-rank-math' ),
					'<a href="' . esc_url( admin_url( 'admin.php?page=sitepress-multilingual-cms/menu/languages.php#lang-sec-8' ) ) . '">' . __( 'Make themes work multilingual option in WPML settings', 'seo-by-rank-math' ) . '</a>'
				) . '</i>';
			}

			Arr::insert(
				$tools,
				[
					'analytics_reindex_posts' => [
						'title'       => __( 'Rebuild Index for Analytics', 'seo-by-rank-math' ),
						'description' => $description,
						'button_text' => __( 'Rebuild Index', 'seo-by-rank-math' ),
					],
				],
				3
			);
		}

		/**
		 * Filters the list of tools available on the Database Tools page.
		 *
		 * @param array $tools The tools.
		 */
		$tools = apply_filters( 'rank_math/database/tools', $tools );

		return $tools;
	}
}
PK     ¥ŠU]ýÍ›ÎL
  L
  =  includes/modules/database-tools/class-yoast-faq-converter.phpnu „[µü¤        <?php
/**
 * The Yoast FAQ Block Converter.
 *
 * @since      1.0.37
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast_FAQ_Converter class.
 */
class Yoast_FAQ_Converter {

	/**
	 * Convert FAQ blocks to Rank Math.
	 *
	 * @param array $block Block to convert.
	 *
	 * @return array
	 */
	public function convert( $block ) {
		$new_block = [
			'blockName' => 'rank-math/faq-block',
			'attrs'     => [
				'listStyle'         => '',
				'textAlign'         => 'left',
				'titleWrapper'      => 'h3',
				'listCssClasses'    => '',
				'titleCssClasses'   => '',
				'contentCssClasses' => '',
				'questions'         => array_map( [ $this, 'get_question' ], $block['attrs']['questions'] ),
				'className'         => isset( $block['attrs']['className'] ) ? $block['attrs']['className'] : '',
			],
		];

		$new_block['innerContent'][] = $this->get_html( $new_block['attrs'] );

		return $new_block;
	}

	/**
	 * Replace block in content.
	 *
	 * @param string $post_content Post content.
	 * @param array  $blocks       Blocks.
	 *
	 * @return string
	 */
	public function replace( $post_content, $blocks ) {
		preg_match_all( '/<!-- wp:yoast\/faq-block.*-->.*<!-- \/wp:yoast\/faq-block -->/iUs', $post_content, $matches );

		foreach ( $matches[0] as $index => $match ) {
			$post_content = \str_replace( $match, $blocks[ $index ], $post_content );
		}

		return $post_content;
	}

	/**
	 * Format questions.
	 *
	 * @param array $question Question.
	 *
	 * @return array
	 */
	public function get_question( $question ) {
		return [
			'id'      => uniqid( 'faq-question-' ),
			'visible' => true,
			'title'   => $question['jsonQuestion'],
			'content' => $question['jsonAnswer'],
		];
	}

	/**
	 * Generate HTML.
	 *
	 * @param array $attributes Block attributes.
	 *
	 * @return string
	 */
	private function get_html( $attributes ) {
		// HTML.
		$out = [ '<div class="wp-block-rank-math-faq-block">' ];

		// Questions.
		foreach ( $attributes['questions'] as $question ) {
			if ( empty( $question['title'] ) || empty( $question['content'] ) || empty( $question['visible'] ) ) {
				continue;
			}

			$out[] = '<div class="rank-math-faq-item">';
			$out[] = sprintf(
				'<%1$s class="rank-math-question">%2$s</%1$s>',
				$attributes['titleWrapper'],
				$question['title']
			);

			$out[] = sprintf(
				'<div class="rank-math-answer">%2$s</div>',
				$attributes['titleWrapper'],
				$question['content']
			);

			$out[] = '</div>';
		}

		$out[] = '</div>';

		return join( '', $out );
	}
}
PK     ¥ŠU]ô-&  &  ?  includes/modules/database-tools/class-yoast-local-converter.phpnu „[µü¤        <?php
/**
 * The Yoast Local Business Block Converter.
 *
 * @since      1.0.48
 * @package    RankMath
 * @subpackage RankMath\Status
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Tools;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Yoast_Local_Converter class.
 */
class Yoast_Local_Converter {

	/**
	 * Yoast's Local Business Blocks.
	 *
	 * @var array
	 */
	public $yoast_blocks = [
		'yoast-seo-local/store-locator',
		'yoast-seo-local/address',
		'yoast-seo-local/map',
		'yoast-seo-local/opening-hours',
	];

	/**
	 * Convert Local Business blocks to Rank Math.
	 *
	 * @param array $block Block to convert.
	 *
	 * @return array
	 */
	public function convert( $block ) {
		$block['attrs']['type'] = str_replace( 'yoast-seo-local/', '', $block['blockName'] );

		$new_block = [
			'blockName' => 'rank-math/local-business',
			'attrs'     => $this->get_attributes( $block['attrs'] ),
		];

		$new_block['innerContent'] = '';

		return $new_block;
	}

	/**
	 * Replace block in content.
	 *
	 * @param string $post_content Post content.
	 * @param array  $blocks       Blocks.
	 *
	 * @return string
	 */
	public function replace( $post_content, $blocks ) {
		foreach ( $blocks as $block_name => $block ) {
			if ( ! in_array( $block_name, $this->yoast_blocks, true ) ) {
				continue;
			}

			$block_name = str_replace( 'yoast-seo-local/', '', $block_name );
			preg_match_all( "/<!-- wp:yoast-seo-local\/{$block_name}.*-->.*<!-- \/wp:yoast-seo-local\/{$block_name} -->/iUs", $post_content, $matches );
			foreach ( $matches[0] as $index => $match ) {
				$post_content = \str_replace( $match, $block[ $index ], $post_content );
			}
		}

		return $post_content;
	}

	/**
	 * Get Block attributes.
	 *
	 * @param array $attrs Yoast Block Attributes.
	 */
	private function get_attributes( $attrs ) {
		$default_opening_days = 'Monday,	Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday';
		if ( 'opening-hours' === $attrs['type'] ) {
			$days         = explode( ', ', $default_opening_days );
			$default_days = [];

			foreach ( $days as $day ) {
				if ( isset( $attrs[ "show{$day}" ] ) ) {
					$default_days[ $day ] = ! empty( $attrs[ "show{$day}" ] );
				}
			}

			if ( ! empty( $default_days ) ) {
				$default_opening_days = implode( ',', array_filter( array_keys( $default_days ) ) );
			}
		}
		return [
			'type'                   => isset( $attrs['type'] ) ? $attrs['type'] : 'address',
			'locations'              => 0,
			'terms'                  => [],
			'limit'                  => isset( $attrs['maxNumber'] ) ? $attrs['maxNumber'] : 0,
			'show_company_name'      => isset( $attrs['hideName'] ) ? ! $attrs['hideName'] : true,
			'show_company_address'   => isset( $attrs['hideCompanyAddress'] ) ? ! $attrs['hideCompanyAddress'] : true,
			'show_on_one_line'       => isset( $attrs['showOnOneLine'] ) ? ! $attrs['showOnOneLine'] : false,
			'show_state'             => isset( $attrs['showState'] ) ? $attrs['showState'] : true,
			'show_country'           => isset( $attrs['showCountry'] ) ? $attrs['showCountry'] : true,
			'show_telephone'         => isset( $attrs['showPhone'] ) ? $attrs['showPhone'] : true,
			'show_secondary_number'  => isset( $attrs['showPhone2nd'] ) ? $attrs['showPhone2nd'] : true,
			'show_fax'               => isset( $attrs['showFax'] ) ? $attrs['showFax'] : false,
			'show_email'             => isset( $attrs['showEmail'] ) ? $attrs['showEmail'] : true,
			'show_url'               => isset( $attrs['showURL'] ) ? $attrs['showURL'] : true,
			'show_logo'              => isset( $attrs['showLogo'] ) ? $attrs['showLogo'] : true,
			'show_vat_id'            => isset( $attrs['showVatId'] ) ? $attrs['showVatId'] : false,
			'show_tax_id'            => isset( $attrs['showTaxId'] ) ? $attrs['showTaxId'] : false,
			'show_coc_id'            => isset( $attrs['showCocId'] ) ? $attrs['showCocId'] : false,
			'show_priceRange'        => isset( $attrs['showPriceRange'] ) ? $attrs['showPriceRange'] : false,
			'show_opening_hours'     => isset( $attrs['showOpeningHours'] ) ? $attrs['showOpeningHours'] : false,
			'show_days'              => $default_opening_days,
			'hide_closed_days'       => isset( $attrs['hideClosedDays'] ) ? $attrs['hideClosedDays'] : false,
			'show_opening_now_label' => isset( $attrs['showOpenLabel'] ) ? $attrs['showOpenLabel'] : false,
			'opening_hours_note'     => isset( $attrs['extraComment'] ) ? $attrs['extraComment'] : '',
			'show_map'               => isset( $attrs['showMap'] ) ? $attrs['showMap'] : false,
			'map_type'               => isset( $attrs['mapType'] ) ? $attrs['mapType'] : 'roadmap',
			'map_width'              => isset( $attrs['mapWidth'] ) ? $attrs['mapWidth'] : '500',
			'map_height'             => isset( $attrs['mapHeight'] ) ? $attrs['mapHeight'] : '300',
			'zoom_level'             => isset( $attrs['zoomLevel'] ) ? $attrs['zoomLevel'] : -1,
			'allow_zoom'             => true,
			'allow_scrolling'        => isset( $attrs['allowScrolling'] ) ? $attrs['allowScrolling'] : true,
			'allow_dragging'         => isset( $attrs['allowDragging'] ) ? $attrs['allowDragging'] : true,
			'show_route_planner'     => isset( $attrs['showRoute'] ) ? $attrs['showRoute'] : true,
			'route_label'            => Helper::get_settings( 'titles.route_label' ),
			'show_category_filter'   => isset( $attrs['showCategoryFilter'] ) ? $attrs['showCategoryFilter'] : false,
			'show_marker_clustering' => isset( $attrs['markerClustering'] ) ? $attrs['markerClustering'] : true,
			'show_infowindow'        => isset( $attrs['defaultShowInfoWindow'] ) ? $attrs['defaultShowInfoWindow'] : true,
			'show_radius'            => isset( $attrs['showRadius'] ) ? $attrs['showRadius'] : true,
			'show_nearest_location'  => isset( $attrs['showNearest'] ) ? $attrs['showNearest'] : true,
			'search_radius'          => isset( $attrs['searchRadius'] ) ? $attrs['searchRadius'] : '10',
		];
	}
}
PK     ¥ŠU]ŒÛ      &  includes/modules/web-stories/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]½°ÃÓ  Ó  2  includes/modules/web-stories/class-web-stories.phpnu „[µü¤        <?php
/**
 * The Web Stories module.
 *
 * @since      1.0.45
 * @package    RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Web_Stories;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Web_Stories class.
 */
class Web_Stories {

	use Hooker;

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->action( 'web_stories_story_head', 'remove_web_stories_meta_tags', 0 );
		$this->action( 'web_stories_story_head', 'add_rank_math_tags' );
		$this->action( 'rank_math/json_ld', 'change_publisher_logo', 99, 2 );
	}

	/**
	 * Remove all meta tags added by the Web Stories plugin.
	 */
	public function remove_web_stories_meta_tags() {
		add_filter( 'web_stories_enable_metadata', '__return_false' );
		add_filter( 'web_stories_enable_schemaorg_metadata', '__return_false' );
		add_filter( 'web_stories_enable_open_graph_metadata', '__return_false' );
		add_filter( 'web_stories_enable_twitter_metadata', '__return_false' );
		remove_action( 'web_stories_story_head', 'rel_canonical' );
	}

	/**
	 * Add Rank Math meta tags.
	 */
	public function add_rank_math_tags() {
		do_action( 'rank_math/head' );
	}

	/**
	 * Change Publisher logo on Web Stories posts.
	 *
	 * @param array  $data    Array of JSON-LD data.
	 * @param JsonLD $json_ld The JsonLD instance.
	 *
	 * @return array
	 */
	public function change_publisher_logo( $data, $json_ld ) {
		if ( ! is_singular( 'web-story' ) || ! $json_ld->can_add_global_entities( $data ) || ! isset( $data['publisher'] ) ) {
			return $data;
		}

		global $post;
		$story = new \Google\Web_Stories\Model\Story();
		$story->load_from_post( $post );

		$url = $story->get_publisher_logo_url();
		if ( ! $url ) {
			return $data;
		}

		$size                      = $story->get_publisher_logo_size();
		$data['publisher']['logo'] = [
			'@type'  => 'ImageObject',
			'@id'    => home_url( '/#logo' ),
			'url'    => $url,
			'width'  => $size[0],
			'height' => $size[1],
		];

		return $data;
	}
}
PK     ¥ŠU]ÚÚõ/Í#  Í#  %  includes/modules/acf/assets/js/acf.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},dn:function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})}};const e=jQuery;var n=t.n(e);const r=lodash;var i=function(t){var e=function(t){var e=(0,r.find)(rankMath.acf.headlines,function(e,n){return t.key===n});return e&&(e=parseInt(e,10)),(e<1||e>6)&&(e=!1),e}(t);return t.content=e?"<h"+e+">"+t.content+"</h"+e+">":"<p>"+t.content+"</p>",t};const a=function(t){return t=(0,r.map)(t,function(t){return"text"!==t.type?t:(t.content=t.$el.find("input[type=text][id^=acf]").val(),t=i(t))})};t.dn(a);const o=function(t){return t=(0,r.map)(t,function(t){return"textarea"!==t.type||(t.content="<p>"+t.$el.find("textarea[id^=acf]").val()+"</p>"),t})};t.dn(o);const u=function(t){return t=(0,r.map)(t,function(t){return"email"!==t.type||(t.content=t.$el.find("input[type=email][id^=acf]").val()),t})};t.dn(u);const c=function(t){return t=(0,r.map)(t,function(t){if("url"!==t.type)return t;var e=t.$el.find("input[type=url][id^=acf]").val();return t.content=e?'<a href="'+e+'">'+e+"</a>":"",t})};t.dn(c);const f=function(t){return(0,r.map)(t,function(t){if("link"!==t.type)return t;var e=t.$el.find("input[type=hidden].input-title").val(),n=t.$el.find("input[type=hidden].input-url").val(),r=t.$el.find("input[type=hidden].input-target").val();return t.content='<a href="'+n+'" target="'+r+'">'+e+"</a>",t})};t.dn(f);var l=function(t){var e=t.$el.find("textarea")[0],n=e.id,r=e.value;return function(t){return"undefined"!=typeof tinyMCE&&void 0!==tinyMCE.editors&&0!==tinyMCE.editors.length&&null!==tinyMCE.get(t)&&!tinyMCE.get(t).isHidden()}(n)&&(r=tinyMCE.get(n)&&tinyMCE.get(n).getContent()||""),r};const p=function(t){return t=(0,r.map)(t,function(t){return"wysiwyg"!==t.type||(t.content=l(t)),t})};function y(t){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(t)}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function d(t){var e=function(t,e){if("object"!=y(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==y(e)?e:e+""}t.dn(p);var h=new(function(){return t=function t(){var e,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,r={},(n=d(n="cache"))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r},(e=[{key:"refresh",value:function(t){var e=this,n=this.getUncached(t);0!==n.length&&window.wp.ajax.post("query-attachments",{query:{post__in:n}}).done(function(t){(0,r.each)(t,function(t){e.setCache(t.id,t),window.RankMathACFAnalysis.refresh()})})}},{key:"get",value:function(t){var e=this.getCache(t);if(!e)return!1;var n=window.wp.media.attachment(t);return n.has("alt")&&(e.alt=n.get("alt")),n.has("title")&&(e.title=n.get("title")),e}},{key:"getAttachmentContent",value:function(t){var e="";if(h.get(t,"attachment")){var n=h.get(t,"attachment");e+='<img src="'+n.url+'" alt="'+n.alt+'" title="'+n.title+'">'}return e}},{key:"setCache",value:function(t,e){this.cache[t]=e}},{key:"getCache",value:function(t){return t in this.cache&&this.cache[t]}},{key:"getUncached",value:function(t){var e=this;return(t=(0,r.uniq)(t)).filter(function(t){return!1===e.get(t)})}}])&&s(t.prototype,e),n&&s(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}());const m=function(t){var e=[];return t=(0,r.map)(t,function(t){if("image"!==t.type)return t;t.content="";var n=t.$el.find("input[type=hidden]").val();return e.push(n),t.content+=h.getAttachmentContent(n),t}),h.refresh(e),t};t.dn(m);const v=function(t){var e=[];return t=(0,r.map)(t,function(t){return"gallery"!==t.type||(t.content="",t.$el.find(".acf-gallery-attachment input[type=hidden]").each(function(){var r=n()(this).val();e.push(r),t.content+=h.getAttachmentContent(r)})),t}),h.refresh(e),t};t.dn(v);const b=function(t){return t=(0,r.map)(t,function(t){if("taxonomy"!==t.type)return t;var e=[];if(t.$el.find('.acf-taxonomy-field[data-type="multi_select"]').length>0){var n=acf.select2.version>=4?"select":"input";e=(0,r.map)(t.$el.find('.acf-taxonomy-field[data-type="multi_select"] '+n).select2("data"),"text")}else t.$el.find('.acf-taxonomy-field[data-type="checkbox"]').length>0?e=(0,r.map)(t.$el.find('.acf-taxonomy-field[data-type="checkbox"] input[type="checkbox"]:checked').next(),"textContent"):t.$el.find("input[type=checkbox]:checked").length>0?e=(0,r.map)(t.$el.find("input[type=checkbox]:checked").parent(),"textContent"):t.$el.find("select option:checked").length>0&&(e=(0,r.map)(t.$el.find("select option:checked"),"textContent"));return(e=(0,r.map)(e,function(t){return t.trim()})).length>0&&(t.content="<ul>\n<li>"+e.join("</li>\n<li>")+"</li>\n</ul>"),t})};function g(t){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},g(t)}function k(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,w(r.key),r)}}function w(t){var e=function(t,e){if("object"!=g(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=g(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==g(e)?e:e+""}t.dn(b);var x={text:a,textarea:o,email:u,url:c,link:f,wysiwyg:p,image:m,gallery:v,taxonomy:b},C=new(function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},(e=[{key:"getFieldContent",value:function(){var t=this.excludeNames(this.excludeTypes(this.getData())),e=(0,r.uniq)((0,r.map)(t,"type"));return n().each(e,function(e,n){n in x&&(t=x[n](t))}),t}},{key:"append",value:function(t){var e=this.getFieldContent();return(0,r.each)(e,function(e){void 0!==e.content&&""!==e.content&&(t+="\n"+e.content)}),t}},{key:"getData",value:function(){var t=["flexible_content","repeater","group"],e=[],i=[],a=(0,r.map)(acf.get_fields(),function(r){var a=n().extend(!0,{},acf.get_data(n()(r)));return a.$el=n()(r),a.post_meta_key=a.name,-1===t.indexOf(a.type)?e.push(a):i.push(a),a});return 0===i.length||(0,r.each)(e,function(t){(0,r.each)(i,function(e){n().contains(e.$el[0],t.$el[0])&&("flexible_content"!==e.type&&"repeater"!==e.type||(e.children=e.children||[],e.children.push(t),t.parent=e,t.post_meta_key=e.name+"_"+(e.children.length-1)+"_"+t.name),"group"===e.type&&(e.children=[t],t.parent=e,t.post_meta_key=e.name+"_"+t.name))})}),a}},{key:"excludeTypes",value:function(t){return(0,r.filter)(t,function(t){return!(0,r.includes)(rankMath.acf.blacklistTypes,t.type)})}},{key:"excludeNames",value:function(t){return(0,r.filter)(t,function(t){return!(0,r.includes)(rankMath.acf.names,t.name)})}}])&&k(t.prototype,e),i&&k(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,i}());const j=wp.hooks;function S(t){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},S(t)}function $(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,_(r.key),r)}}function _(t){var e=function(t,e){if("object"!=S(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==S(e)?e:e+""}var P=function(){return t=function t(){var e,i,a,o=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,a=0,(i=_(i="analysisTimeout"))in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,this.maybeRefresh=this.maybeRefresh.bind(this),this.refresh=(0,r.debounce)(this.maybeRefresh,rankMath.acf.refreshRate),(0,j.addFilter)("rank_math_content","rank-math",C.append.bind(C),11),n()(".acf-field").on("change",function(){o.refresh()})},(e=[{key:"maybeRefresh",value:function(){rankMathEditor.refresh("content")}}])&&$(t.prototype,e),i&&$(t,i),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,i}();window.RankMathACFAnalysis=new P}();PK     ¥ŠU]·ÏÂo
  o
  "  includes/modules/acf/class-acf.phpnu „[µü¤        <?php
/**
 * The ACF Module
 *
 * @since      1.0.33
 * @package    RankMath
 * @subpackage RankMath\ACF
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ACF;

use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * ACF class.
 */
class ACF {
	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {
		if ( ! Admin_Helper::is_post_edit() && ! Admin_Helper::is_term_edit() ) {
			return;
		}

		$this->action( 'rank_math/admin/editor_scripts', 'enqueue' );
	}

	/**
	 * Enqueue styles and scripts for the metabox on the post editor & term editor screens.
	 */
	public function enqueue() {
		if ( Helper::is_elementor_editor() ) {
			return;
		}

		if ( ! Admin_Helper::is_post_edit() && ! Admin_Helper::is_term_edit() ) {
			return;
		}

		wp_enqueue_script( 'rank-math-acf-post-analysis', rank_math()->plugin_url() . 'includes/modules/acf/assets/js/acf.js', [ 'wp-hooks', 'rank-math-analyzer' ], rank_math()->version, true );

		Helper::add_json( 'acf', $this->get_config() );
	}

	/**
	 * Get ACF module config data.
	 *
	 * @return array The config data.
	 */
	private function get_config() {

		/**
		 * Filter the ACF config data.
		 *
		 * @param array $config Config data array.
		 */
		return $this->do_filter(
			'acf/config',
			[
				'pluginName'     => 'rank-math-acf',
				'headlines'      => [],
				'names'          => [],
				'refreshRate'    => $this->get_refresh_rate(),
				'blacklistTypes' => $this->get_blacklist_type(),
			]
		);
	}

	/**
	 * Retrieves the default blacklist - the field types we won't include in the SEO analysis.
	 *
	 * @return array The blacklisted field types.
	 */
	private function get_blacklist_type() {

		/**
		 * Filter the blacklisted ACF field types.
		 *
		 * @param array $blacklist The blacklisted field types.
		 */
		return $this->do_filter(
			'acf/blacklist/types',
			[
				'number',
				'password',
				'file',
				'select',
				'checkbox',
				'radio',
				'true_false',
				'post_object',
				'page_link',
				'relationship',
				'user',
				'date_picker',
				'color_picker',
				'message',
				'tab',
				'repeater',
				'flexible_content',
				'group',
			]
		);
	}

	/**
	 * Get refresh rate to be used.
	 *
	 * @return int The number of milliseconds between runs.
	 */
	private function get_refresh_rate() {

		/**
		 * Filter the refresh rate for changes to ACF fields.
		 *
		 * @param int $refresh_rate Refresh rates in milliseconds.
		 */
		$refresh_rate = $this->do_filter( 'acf/refresh_rate', 1000 );
		$refresh_rate = intval( $refresh_rate, 10 );

		return max( 200, $refresh_rate );
	}
}
PK     ¥ŠU]„�[O2  O2  <  includes/modules/instant-indexing/class-instant-indexing.phpnu „[µü¤        <?php
/**
 * Instant Indexing module.
 *
 * @since      1.0.56
 * @package    RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Instant_Indexing;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Module\Base;
use RankMath\Traits\Hooker;
use RankMath\Traits\Ajax;
use RankMath\Admin\Options;
use RankMath\Admin\Register_Options_Page;
use RankMath\Helpers\Param;
use RankMath\Helpers\Sitepress;

defined( 'ABSPATH' ) || exit;

/**
 * Instant_Indexing class.
 */
class Instant_Indexing extends Base {

	use Hooker;
	use Ajax;

	/**
	 * API Object.
	 *
	 * @var string
	 */
	private $api;

	/**
	 * Keep log of submitted objects to avoid double submissions.
	 *
	 * @var array
	 */
	private $submitted = [];

	/**
	 * Store previous post status that we can check against in save_post.
	 *
	 * @var array
	 */
	private $previous_post_status = [];

	/**
	 * Store original permalinks for when they get trashed.
	 *
	 * @var array
	 */
	private $previous_post_permalinks = [];

	/**
	 * Restrict to one request every X seconds to a given URL.
	 */
	const THROTTLE_LIMIT = 5;

	/**
	 * Constructor.
	 */
	public function __construct() {
		parent::__construct();

		if ( ! $this->is_configured() ) {
			Api::get()->reset_key();
		}

		$this->action( 'init', 'register_instant_indexing_settings', 125 );
		$post_types = $this->get_auto_submit_post_types();
		if ( ! empty( $post_types ) ) {
			$this->filter( 'wp_insert_post_data', 'before_save_post', 10, 4 );
		}

		foreach ( $post_types as $post_type ) {
			$this->action( 'save_post_' . $post_type, 'save_post', 10, 3 );
			$this->filter( "bulk_actions-edit-{$post_type}", 'post_bulk_actions', 11 );
			$this->filter( "handle_bulk_actions-edit-{$post_type}", 'handle_post_bulk_actions', 10, 3 );
		}

		$this->filter( 'post_row_actions', 'post_row_actions', 10, 2 );
		$this->filter( 'page_row_actions', 'post_row_actions', 10, 2 );
		$this->filter( 'admin_init', 'handle_post_row_actions' );

		$this->action( 'wp', 'serve_api_key' );
		$this->action( 'rest_api_init', 'init_rest_api' );
	}

	/**
	 * Load the REST API endpoints.
	 */
	public function init_rest_api() {
		$rest = new Rest();
		$rest->register_routes();
	}

	/**
	 * Add bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  array $actions Actions.
	 * @return array          New actions.
	 */
	public function post_bulk_actions( $actions ) {
		$actions['rank_math_indexnow'] = esc_html__( 'Instant Indexing: Submit Pages', 'seo-by-rank-math' );
		return $actions;
	}

	/**
	 * Action links for the post listing screens.
	 *
	 * @param array  $actions Action links.
	 * @param object $post    Current post object.
	 * @return array
	 */
	public function post_row_actions( $actions, $post ) {
		if ( ! Helper::has_cap( 'general' ) ) {
			return $actions;
		}

		if ( 'publish' !== $post->post_status ) {
			return $actions;
		}

		$post_types = $this->get_auto_submit_post_types();
		if ( ! in_array( $post->post_type, $post_types, true ) ) {
			return $actions;
		}

		$link = wp_nonce_url(
			add_query_arg(
				[
					'action'        => 'rank_math_instant_index_post',
					'index_post_id' => $post->ID,
					'method'        => 'bing_submit',
				]
			),
			'rank_math_instant_index_post'
		);

		$actions['indexnow_submit'] = '<a href="' . esc_url( $link ) . '" class="rm-instant-indexing-action rm-indexnow-submit">' . __( 'Instant Indexing: Submit Page', 'seo-by-rank-math' ) . '</a>';

		return $actions;
	}

	/**
	 * Handle post row action link actions.
	 *
	 * @return void
	 */
	public function handle_post_row_actions() {
		if ( 'rank_math_instant_index_post' !== Param::get( 'action' ) ) {
			return;
		}

		$post_id = absint( Param::get( 'index_post_id' ) );
		if ( ! $post_id ) {
			return;
		}

		if ( ! wp_verify_nonce( Param::get( '_wpnonce' ), 'rank_math_instant_index_post' ) ) {
			return;
		}

		if ( ! Helper::has_cap( 'general' ) ) {
			return;
		}

		$this->api_submit( get_permalink( $post_id ), true );

		Helper::redirect( remove_query_arg( [ 'action', 'index_post_id', 'method', '_wpnonce' ] ) );
		exit;
	}

	/**
	 * Handle bulk actions for applicable posts, pages, CPTs.
	 *
	 * @param  string $redirect   Redirect URL.
	 * @param  string $doaction   Performed action.
	 * @param  array  $object_ids Post IDs.
	 *
	 * @return string             New redirect URL.
	 */
	public function handle_post_bulk_actions( $redirect, $doaction, $object_ids ) {
		if ( 'rank_math_indexnow' !== $doaction || empty( $object_ids ) ) {
			return $redirect;
		}

		if ( ! Helper::has_cap( 'general' ) ) {
			return $redirect;
		}

		$urls = [];
		foreach ( $object_ids as $object_id ) {
			$urls[] = get_permalink( $object_id );
		}

		$this->api_submit( $urls, true );

		return $redirect;
	}

	/**
	 * Register admin page.
	 */
	public function register_instant_indexing_settings() {
		$tabs = [
			'url-submission' => [
				'icon'    => 'rm-icon rm-icon-instant-indexing',
				'title'   => esc_html__( 'Submit URLs', 'seo-by-rank-math' ),
				'desc'    => esc_html__( 'Send URLs directly to the IndexNow API.', 'seo-by-rank-math' ) . ' <a href="' . KB::get( 'instant-indexing', 'Indexing Submit URLs' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>',
				'classes' => 'rank-math-advanced-option',
				'file'    => __DIR__ . '/views/console.php',
			],
			'settings'       => [
				'icon'  => 'rm-icon rm-icon-settings',
				'title' => esc_html__( 'Settings', 'seo-by-rank-math' ),
				/* translators: Link to kb article */
				'desc'  => sprintf( esc_html__( 'Instant Indexing module settings. %s.', 'seo-by-rank-math' ), '<a href="' . KB::get( 'instant-indexing', 'Indexing Settings' ) . '" target="_blank">' . esc_html__( 'Learn more', 'seo-by-rank-math' ) . '</a>' ),
				'file'  => __DIR__ . '/views/options.php',
			],
			'history'        => [
				'icon'    => 'rm-icon rm-icon-htaccess',
				'title'   => esc_html__( 'History', 'seo-by-rank-math' ),
				'desc'    => esc_html__( 'The last 100 IndexNow API requests.', 'seo-by-rank-math' ),
				'classes' => 'rank-math-advanced-option',
				'file'    => __DIR__ . '/views/history.php',
			],
		];

		if ( 'easy' === Helper::get_settings( 'general.setup_mode', 'advanced' ) ) {
			// Move ['settings'] to the top.
			$tabs = [ 'settings' => $tabs['settings'] ] + $tabs;
		}

		/**
		 * Allow developers to add new sections in the IndexNow settings.
		 *
		 * @param array $tabs
		 */
		$tabs = $this->do_filter( 'settings/instant_indexing', $tabs );

		new Register_Options_Page(
			[
				'key'        => 'rank-math-options-instant-indexing',
				'title'      => esc_html__( 'Instant Indexing', 'seo-by-rank-math' ),
				'menu_title' => esc_html__( 'Instant Indexing', 'seo-by-rank-math' ),
				'capability' => 'rank_math_general',
				'tabs'       => $tabs,
				'position'   => 11,
			]
		);
	}

	/**
	 * Store previous post status & permalink before saving the post.
	 *
	 * @param  array $data                Post data.
	 * @param  array $postarr             Raw post data.
	 * @param  array $unsanitized_postarr Unsanitized post data.
	 * @param  bool  $update              Whether this is an existing post being updated or not.
	 */
	public function before_save_post( $data, $postarr, $unsanitized_postarr, $update = false ) {
		if ( ! $update ) {
			return $data;
		}

		$this->previous_post_status[ $postarr['ID'] ]     = get_post_status( $postarr['ID'] );
		$this->previous_post_permalinks[ $postarr['ID'] ] = str_replace( '__trashed', '', get_permalink( $postarr['ID'] ) );

		return $data;
	}

	/**
	 * When a post from a watched post type is published or updated, submit its URL
	 * to the API and add notice about it.
	 *
	 * @param  int    $post_id Post ID.
	 * @param  object $post    Post object.
	 *
	 * @return void
	 */
	public function save_post( $post_id, $post ) {
		if ( defined( 'RANK_MATH_IMPORTING_CSV' ) && RANK_MATH_IMPORTING_CSV ) {
			return;
		}
		// Check if already submitted.
		if ( in_array( $post_id, $this->submitted, true ) ) {
			return;
		}

		// Check if post status changed to publish or trash.
		if ( ! in_array( $post->post_status, [ 'publish', 'trash' ], true ) ) {
			return;
		}

		// If new status is trash, check if previous status was publish.
		if ( 'trash' === $post->post_status && 'publish' !== $this->previous_post_status[ $post_id ] ) {
			return;
		}

		if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id ) || ! empty( Helper::get_post_meta( 'lock_modified_date', $post_id ) ) ) {
			return;
		}

		if ( ! Helper::is_post_indexable( $post_id ) ) {
			return;
		}

		// Check if it's a hidden product.
		if ( 'product' === $post->post_type && Helper::is_woocommerce_active() ) {
			$product = wc_get_product( $post_id );
			if ( $product && ! $product->is_visible() ) {
				return;
			}
		}

		$url = get_permalink( $post );
		if ( 'trash' === $post->post_status ) {
			$url = $this->previous_post_permalinks[ $post_id ];
		}

		if ( Sitepress::get()->is_active() ) {
			$details = apply_filters( 'wpml_post_language_details', null, $post_id );
			$code    = $details['language_code'] ?? '';
			$url     = apply_filters( 'wpml_permalink', get_the_permalink( $post_id ), $code );

			$sitepress = Sitepress::get()->get_var();
			$urls      = $sitepress->get_setting( 'urls' );
			if ( isset( $urls['directory_for_default_language'] ) && $urls['directory_for_default_language'] ) {
				$lang = $sitepress->get_current_language();
				if ( 0 !== strpos( $url, '/' . $lang ) ) {
					$url = get_home_url() . $post->post_name;
				}
			}
		}

		/**
		 * Filter the URL to be submitted to IndexNow.
		 * Returning false will prevent the URL from being submitted.
		 *
		 * @param string  $url  URL to be submitted.
		 * @param WP_POST $post Post object.
		 */
		$send_url = $this->do_filter( 'instant_indexing/publish_url', $url, $post );

		// Early exit if filter is set to false.
		if ( ! $send_url ) {
			return;
		}

		$this->api_submit( $send_url, false );
		$this->submitted[] = $post_id;
	}

	/**
	 * Is module configured.
	 *
	 * @return boolean
	 */
	private function is_configured() {
		return (bool) Helper::get_settings( 'instant_indexing.indexnow_api_key' );
	}

	/**
	 * Serve API key for search engines.
	 */
	public function serve_api_key() {
		global $wp;

		$api          = Api::get();
		$key          = $api->get_key();
		$key_location = $api->get_key_location( 'serve_api_key' );
		$current_url  = home_url( $wp->request );

		if ( isset( $current_url ) && $key_location === $current_url ) {
			header( 'Content-Type: text/plain' );
			header( 'X-Robots-Tag: noindex' );
			status_header( 200 );
			echo esc_html( $key );

			exit();
		}
	}

	/**
	 * Submit URL to IndexNow API.
	 *
	 * @param string $url                  URL to be submitted.
	 * @param bool   $is_manual_submission Whether the URL is submitted manually by the user.
	 *
	 * @return bool
	 */
	private function api_submit( $url, $is_manual_submission ) {
		$api = Api::get();

		/**
		 * Filter the URL to be submitted to IndexNow.
		 * Returning false will prevent the URL from being submitted.
		 *
		 * @param bool   $is_manual_submission Whether the URL is submitted manually by the user.
		 */
		$url = $this->do_filter( 'instant_indexing/submit_url', $url, $is_manual_submission );
		if ( ! $url ) {
			return false;
		}

		$api_logs = $api->get_log();
		if ( ! $is_manual_submission && ! empty( $api_logs ) ) {
			$logs = array_values( array_reverse( $api_logs ) );
			if ( ! empty( $logs[0] ) && $logs[0]['url'] === $url && time() - $logs[0]['time'] < self::THROTTLE_LIMIT ) {
				return false;
			}
		}

		$submitted = $api->submit( $url, $is_manual_submission );

		if ( ! $is_manual_submission ) {
			return $submitted;
		}

		$count = is_array( $url ) ? count( $url ) : 1;
		$this->add_submit_message_notice( $submitted, $count );

		return $submitted;
	}

	/**
	 * Add notice after submitting one or more URLs.
	 *
	 * @param bool $success Whether the submission was successful.
	 * @param int  $count   Number of submitted URLs.
	 *
	 * @return void
	 */
	private function add_submit_message_notice( $success, $count ) {
		$notification_type    = 'error';
		$notification_message = __( 'Error submitting page to IndexNow.', 'seo-by-rank-math' );

		if ( $success ) {
			$notification_type    = 'success';
			$notification_message = sprintf(
				/* translators: %s: Number of pages submitted. */
				_n( '%s page submitted to IndexNow.', '%s pages submitted to IndexNow.', $count, 'seo-by-rank-math' ),
				$count
			);
		}

		Helper::add_notification( $notification_message, [ 'type' => $notification_type ] );
	}

	/**
	 * Get post types where auto-submit is enabled.
	 *
	 * @return array
	 */
	private function get_auto_submit_post_types() {
		$post_types = Helper::get_settings( 'instant_indexing.bing_post_types', [] );
		return $post_types;
	}
}
PK     ¥ŠU]ŒÛ      1  includes/modules/instant-indexing/views/index.phpnu „[µü¤        <?php // Silence is golden.
PK     ¥ŠU]æ~vä	  ä	  3  includes/modules/instant-indexing/views/options.phpnu „[µü¤        <?php
/**
 * IndexNow Settings.
 *
 * @since      1.0.56
 * @package    RankMath
 * @subpackage RankMath\Settings
 */

namespace RankMath\Instant_Indexing;

use RankMath\Helper;

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'bing_post_types',
		'type'    => 'multicheck',
		'name'    => esc_html__( 'Auto-Submit Post Types', 'seo-by-rank-math' ),
		'desc'    => esc_html__( 'Submit posts from these post types automatically to the IndexNow API when a post is published, updated, or trashed.', 'seo-by-rank-math' ),
		'options' => Helper::choices_post_types(),
	]
);

$cmb->add_field(
	[
		'id'          => 'indexnow_api_key',
		'name'        => esc_html__( 'API Key', 'seo-by-rank-math' ),
		'desc'        => esc_html__( 'The IndexNow API key proves the ownership of the site. It is generated automatically. You can change the key if it becomes known to third parties.', 'seo-by-rank-math' ),
		'type'        => 'text',
		'after_field' => '<a href="#" id="indexnow_reset_key" class="button button-secondary large-button"><span class="dashicons dashicons-update"></span> ' . esc_html__( 'Change Key', 'seo-by-rank-math' ) . '</a>',
		'classes'     => 'rank-math-advanced-option',
		'attributes'  => [
			'readonly' => 'readonly',
		],
	]
);

$key_location    = Api::get()->get_key_location( 'settings_field' );
$field_label     = esc_html__( 'API Key Location', 'seo-by-rank-math' );
$check_key_label = esc_html__( 'Check Key', 'seo-by-rank-math' );

// Translators: %s is the words "Check Key".
$field_desc = sprintf( esc_html__( 'Use the %1$s button to verify that the key is accessible for search engines. Clicking on it should open the key file in your browser and show the API key.', 'seo-by-rank-math' ), '<strong>' . $check_key_label . '</strong>' );

$location_field = '<div class="cmb-row cmb-type-text cmb2-id-indexnow-api-key-location table-layout rank-math-advanced-option" data-fieldtype="text">
<div class="cmb-th">
<label for="indexnow_api_key_location">' . $field_label . '</label>
</div>
	<div class="cmb-td">
<code id="indexnow_api_key_location">' . esc_url( $key_location ) . '</code>
<p class="cmb2-metabox-description">' . $field_desc . '</p>
<a href="' . esc_url( $key_location ) . '" id="indexnow_check_key" class="button button-secondary large-button" target="_blank"><span class="dashicons dashicons-search"></span> ' . $check_key_label . '</a>
	</div>
</div>';

$cmb->add_field(
	[
		'id'      => 'indexnow_api_key_location',
		'type'    => 'raw',
		'content' => $location_field,
	]
);
PK     ¥ŠU]¹2¡W  W  3  includes/modules/instant-indexing/views/console.phpnu „[µü¤        <?php
/**
 * IndexNow Options: Console tab.
 *
 * @since   1.0.56
 * @package Rank_Math
 */

defined( 'ABSPATH' ) || exit;

$cmb->add_field(
	[
		'id'      => 'indexnow_description',
		'type'    => 'raw',
		'content' => '<div class="bing-api-description description"><p>' . esc_html__( 'Insert URLs to send to the IndexNow API (one per line, up to 10,000):', 'seo-by-rank-math' ) . '</p></div>',
	]
);

$cmb->add_field(
	[
		'id'              => 'indexnow_urls',
		'type'            => 'textarea_small',
		'sanitization_cb' => '__return_false',
		'attributes'      => [
			'class'       => 'instant-indexing-urls',
			'placeholder' => trailingslashit( home_url() ) . _x( 'hello-world', 'URL slug placeholder', 'seo-by-rank-math' ),
		],
		'after_field'     => '<a href="#" id="indexnow_submit" class="button button-primary large-button" style="margin-top: 20px;">' . esc_html__( 'Submit URLs', 'seo-by-rank-math' ) . '</a> <span class="spinner" id="indexnow_spinner"></span>',
	]
);

$cmb->add_field(
	[
		'id'         => 'educational_note',
		'type'       => 'notice',
		'what'       => 'info',
		'save_field' => false,
		'content'    => sprintf(
			/* translators: Note text */
			esc_html__( '%s The URLs will be submitted to Bing and Yandex only, and not to Google.', 'seo-by-rank-math' ),
			'<b>' . esc_html__( 'Note:', 'seo-by-rank-math' ) . '</b>'
		),
	]
);
PK     ¥ŠU]ÉzjY	  	  3  includes/modules/instant-indexing/views/history.phpnu „[µü¤        <?php
/**
 * IndexNow Options: History tab.
 *
 * @since   1.0.56
 * @package Rank_Math
 */

defined( 'ABSPATH' ) || exit;

$history_content  = '';
$history_content .= '<a href="#" id="indexnow_clear_history" class="button alignright hidden">' . esc_html__( 'Clear History', 'seo-by-rank-math' ) . '</a>';
$history_content .= '<div class="history-filter-links hidden" id="indexnow_history_filters"><a href="#" data-filter="all" class="current">' . esc_html__( 'All', 'seo-by-rank-math' ) . '</a> | <a href="#" data-filter="manual">' . esc_html__( 'Manual', 'seo-by-rank-math' ) . '</a> | <a href="#" data-filter="auto">' . esc_html__( 'Auto', 'seo-by-rank-math' ) . '</a></div>';
$history_content .= '<div class="clear"></div>';
$history_content .= '<table class="wp-list-table widefat striped" id="indexnow_history"><thead><tr><th class="col-date">' . esc_html__( 'Time', 'seo-by-rank-math' ) . '</th><th class="col-url">' . esc_html__( 'URL', 'seo-by-rank-math' ) . '</th><th class="col-status">' . esc_html__( 'Response', 'seo-by-rank-math' ) . '</th></tr></thead><tbody>';
$history_content .= '</tbody></table>';

$cmb->add_field(
	[
		'id'      => 'indexnow_history',
		'type'    => 'raw',
		/* translators: daily quota */
		'content' => $history_content,
	]
);

$help_contents = '';

$help_contents .= '<a href="#" id="indexnow_show_response_codes">' . esc_html__( 'Response Code Help', 'seo-by-rank-math' ) . '<span class="dashicons dashicons-arrow-down"></span></a>';

$help_contents .= '<table class="wp-list-table widefat striped hidden" id="indexnow_response_codes"><thead><tr><th class="col-response-code">' . esc_html__( 'Response Code', 'seo-by-rank-math' ) . '</th><th class="col-response-message">' . esc_html__( 'Response Message', 'seo-by-rank-math' ) . '</th><th class="col-reasons">' . esc_html__( 'Reasons', 'seo-by-rank-math' ) . '</th></tr></thead><tbody>';
$help_contents .= '<tr><td class="col-response-code">200</td><td class="col-response-message">' . esc_html__( 'OK', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'The URL was successfully submitted to the IndexNow API.', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '<tr><td class="col-response-code">202</td><td class="col-response-message">' . esc_html__( 'Accepted', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'The URL was successfully submitted to the IndexNow API, but the API key will be checked later.', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '<tr><td class="col-response-code">400</td><td class="col-response-message">' . esc_html__( 'Bad Request', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'The request was invalid.', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '<tr><td class="col-response-code">403</td><td class="col-response-message">' . esc_html__( 'Forbidden', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'The key was invalid (e.g. key not found, file found but key not in the file).', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '<tr><td class="col-response-code">422</td><td class="col-response-message">' . esc_html__( 'Unprocessable Entity', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'The URLs don\'t belong to the host or the key is not matching the schema in the protocol.', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '<tr><td class="col-response-code">429</td><td class="col-response-message">' . esc_html__( 'Too Many Requests', 'seo-by-rank-math' ) . '</td><td class="col-reasons">' . esc_html__( 'Too Many Requests (potential Spam).', 'seo-by-rank-math' ) . '</td></tr>';
$help_contents .= '</tbody></table>';

$cmb->add_field(
	[
		'id'      => 'indexnow_help',
		'type'    => 'raw',
		/* translators: daily quota */
		'content' => $help_contents,
	]
);
PK     ¥ŠU]E]L)ò  ò  0  includes/modules/instant-indexing/class-rest.phpnu „[µü¤        <?php
/**
 * The Global functionality of the plugin.
 *
 * Defines the functionality loaded on admin.
 *
 * @since      1.0.49
 * @package    RankMath
 * @subpackage RankMath\Rest
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Instant_Indexing;

use RankMath\Helper;
use WP_Error;
use WP_REST_Server;
use WP_REST_Request;
use WP_REST_Controller;
use WP_REST_Response;
use RankMath\Helpers\Arr;

defined( 'ABSPATH' ) || exit;

/**
 * Rest class.
 */
class Rest extends WP_REST_Controller {

	/**
	 * Constructor.
	 */
	public function __construct() {
		$this->namespace = \RankMath\Rest\Rest_Helper::BASE . '/in';
	}

	/**
	 * Register REST routes.
	 *
	 * @return void
	 */
	public function register_routes() {
		$namespace = $this->namespace;

		register_rest_route(
			$namespace,
			'/submitUrls',
			[
				[
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => [ $this, 'submit_urls' ],
					'permission_callback' => [ $this, 'has_permission' ],
					'args'                => [
						'urls' => [
							'description' => __( 'The list of urls to submit to the Instant Indexing API.', 'seo-by-rank-math' ),
							'type'        => 'string',
							'required'    => true,
						],
					],
				],
			]
		);

		register_rest_route(
			$namespace,
			'/getLog',
			[
				[
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => [ $this, 'get_log' ],
					'permission_callback' => [ $this, 'has_permission' ],
					'args'                => [
						'filter' => [
							'description' => __( 'Filter log by type.', 'seo-by-rank-math' ),
							'type'        => 'string',
							'enum'        => [ 'all', 'manual', 'auto' ],
							'default'     => 'all',
						],
					],
				],
			]
		);

		register_rest_route(
			$namespace,
			'/clearLog',
			[
				[
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => [ $this, 'clear_log' ],
					'permission_callback' => [ $this, 'has_permission' ],
					'args'                => [
						'filter' => [
							'description' => __( 'Clear log by type.', 'seo-by-rank-math' ),
							'type'        => 'string',
							'enum'        => [ 'all', 'manual', 'auto' ],
							'default'     => 'all',
						],
					],
				],
			]
		);

		register_rest_route(
			$namespace,
			'/resetKey',
			[
				[
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => [ $this, 'reset_key' ],
					'permission_callback' => [ $this, 'has_permission' ],
				],
			]
		);
	}

	/**
	 * Submit URLs.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error
	 */
	public function submit_urls( WP_REST_Request $request ) {
		$urls = $request->get_param( 'urls' );
		if ( empty( $urls ) ) {
			return new WP_Error( 'empty_urls', __( 'No URLs provided.', 'seo-by-rank-math' ) );
		}

		$urls = Arr::from_string( $urls, "\n" );
		$urls = array_values( array_unique( array_filter( $urls, 'wp_http_validate_url' ) ) );

		if ( ! $urls ) {
			return new WP_Error( 'invalid_urls', __( 'Invalid URLs provided.', 'seo-by-rank-math' ) );
		}

		$result = Api::get()->submit( $urls );
		if ( ! $result ) {
			return new WP_Error( 'submit_failed', __( 'Failed to submit URLs. See details in the History tab.', 'seo-by-rank-math' ) );
		}

		$urls_number = count( $urls );
		return new WP_REST_Response(
			[
				'success' => true,
				'message' => sprintf(
					// Translators: %s is the number of URLs submitted.
					_n(
						'Successfully submitted %s URL.',
						'Successfully submitted %s URLs.',
						$urls_number,
						'seo-by-rank-math'
					),
					$urls_number
				),
			]
		);
	}

	/**
	 * Get log.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_log( WP_REST_Request $request ) {
		$filter = $request->get_param( 'filter' );
		$result = Api::get()->get_log();
		$total  = count( $result );
		foreach ( $result as $key => $value ) {
			$result[ $key ]['timeFormatted'] = wp_date( 'Y-m-d H:i:s', $value['time'] );
			// Translators: placeholder is human-readable time, e.g. "1 hour".
			$result[ $key ]['timeHumanReadable'] = sprintf( __( '%s ago', 'seo-by-rank-math' ), human_time_diff( $value['time'] ) );

			if ( 'manual' === $filter && empty( $result[ $key ]['manual_submission'] ) ) {
				unset( $result[ $key ] );
			} elseif ( 'auto' === $filter && ! empty( $result[ $key ]['manual_submission'] ) ) {
				unset( $result[ $key ] );
			}
		}

		$result = array_values( array_reverse( $result ) );

		return new WP_REST_Response(
			[
				'data'  => $result,
				'total' => $total,
			]
		);
	}

	/**
	 * Clear log.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error
	 */
	public function clear_log( WP_REST_Request $request ) {
		Api::get()->clear_log();
		return new WP_REST_Response( [ 'status' => 'ok' ] );
	}

	/**
	 * Reset key.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return WP_REST_Response|WP_Error
	 */
	public function reset_key( WP_REST_Request $request ) {
		$api = Api::get();
		$api->reset_key();
		$key      = $api->get_key();
		$location = $api->get_key_location( 'reset_key' );
		return new WP_REST_Response(
			[
				'status'   => 'ok',
				'key'      => $key,
				'location' => $location,
			]
		);
	}

	/**
	 * Determine if the current user can manage instant indexing.
	 *
	 * @return bool
	 */
	public function has_permission() {
		return Helper::has_cap( 'general' );
	}
}
PK     ¥ŠU]’=T     /  includes/modules/instant-indexing/class-api.phpnu „[µü¤        <?php
/**
 * IndexNow API
 *
 * @since      1.0.56
 * @package    RankMath
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Instant_Indexing;

use RankMath\Helper;
use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * API class.
 *
 * @codeCoverageIgnore
 */
class Api {

	use Hooker;

	/**
	 * IndexNow API URL.
	 *
	 * @var string
	 */
	private $api_url = 'https://api.indexnow.org/indexnow/';

	/**
	 * IndexNow API key.
	 *
	 * @var string
	 */
	protected $api_key = '';

	/**
	 * Was the last request successful.
	 *
	 * @var bool
	 */
	protected $is_success = false;

	/**
	 * Last error.
	 *
	 * @var string
	 */
	protected $last_error = '';

	/**
	 * Last response.
	 *
	 * @var array
	 */
	protected $last_response = '';

	/**
	 * Last response header code.
	 *
	 * @var int
	 */
	protected $last_code = 0;

	/**
	 * Next submission is a manual submission.
	 *
	 * @var bool
	 */
	public $is_manual = true;

	/**
	 * User agent used for the API requests.
	 *
	 * @var string
	 */
	protected $user_agent = '';

	/**
	 * User agent used for the API requests.
	 *
	 * @var string
	 */
	protected $version = '';

	/**
	 * Main instance
	 *
	 * Ensure only one instance is loaded or can be loaded.
	 *
	 * @return Api
	 */
	public static function get() {
		static $instance;

		if ( is_null( $instance ) && ! ( $instance instanceof Api ) ) {
			$instance             = new Api();
			$instance->user_agent = 'RankMath/' . md5( esc_url( home_url( '/' ) ) );
			$instance->version    = rank_math()->version;
		}

		return $instance;
	}

	/**
	 * Make request to the IndexNow API.
	 *
	 * @param array $urls URLs to submit.
	 * @param bool  $manual Whether the request is manual or not.
	 *
	 * @return bool
	 */
	public function submit( $urls, $manual = null ) {
		$this->reset();

		if ( ! is_null( $manual ) ) {
			$this->is_manual = (bool) $manual;
		}

		$data = $this->get_payload( $urls );

		$response = wp_remote_post(
			'https://api.indexnow.org/indexnow/',
			[
				'body'    => $data,
				'headers' => [
					'Content-Type'  => 'application/json',
					'User-Agent'    => $this->user_agent,
					'X-Source-Info' => 'https://rankmath.com/' . $this->version . '/' . ( $this->is_manual ? '1' : '' ),
				],
			]
		);

		if ( is_wp_error( $response ) ) {
			$this->last_error = 'WP_Error: ' . $response->get_error_message();
			$this->log( (array) $urls, 0, $this->last_error );
			return false;
		}

		$this->last_code     = wp_remote_retrieve_response_code( $response );
		$this->last_response = wp_remote_retrieve_body( $response );
		if ( in_array( $this->last_code, [ 200, 202, 204 ], true ) ) {
			$this->is_success = true;
			$this->log( (array) $urls, $this->last_code, 'OK' );
			return true;
		}

		$message = wp_remote_retrieve_response_message( $response );
		$this->set_error_message( $message );

		$this->log( (array) $urls, $this->last_code, $this->last_error );
		return false;
	}

	/**
	 * Get the last error message.
	 *
	 * @return string
	 */
	public function get_error() {
		return $this->last_error;
	}

	/**
	 * Get the last response code.
	 *
	 * @return int
	 */
	public function get_response_code() {
		return $this->last_code;
	}

	/**
	 * Get the last response.
	 *
	 * @return string
	 */
	public function get_response() {
		return $this->last_response;
	}

	/**
	 * Get the host parameter value to send to the API.
	 *
	 * @return string
	 */
	public function get_host() {
		$host = wp_parse_url( home_url(), PHP_URL_HOST );
		if ( empty( $host ) ) {
			$host = 'localhost';
		}

		/**
		 * Filter the host parameter value to send to the API.
		 *
		 * @param string $host Host.
		 */
		return $this->do_filter( 'instant_indexing/indexnow_host', $host );
	}

	/**
	 * Get the API key.
	 *
	 * @return string
	 */
	public function get_key() {
		if ( ! empty( $this->api_key ) ) {
			return $this->api_key;
		}

		$api_key = Helper::get_settings( 'instant_indexing.indexnow_api_key' );

		/**
		 * Filter the API key.
		 *
		 * @param string $api_key API key.
		 */
		$this->api_key = $this->do_filter( 'instant_indexing/indexnow_key', $api_key );

		return $this->api_key;
	}

	/**
	 * Alias for get_key().
	 */
	public function get_api_key() {
		return $this->get_key();
	}

	/**
	 * Get the API key location.
	 *
	 * @param string $context Key context.
	 * @return string
	 */
	public function get_key_location( $context = '' ) {
		/**
		 * Filter the API key location.
		 *
		 * @param string $location Location.
		 */
		return $this->do_filter( 'instant_indexing/indexnow_key_location', trailingslashit( home_url() ) . $this->get_key() . '.txt', $context );
	}

	/**
	 * Log the request.
	 *
	 * @param array  $urls    URLs to submit.
	 * @param int    $status  Response code.
	 * @param string $message Response message.
	 */
	public function log( $urls, $status, $message = '' ) {
		$log = get_option( 'rank_math_indexnow_log', [] );
		$url = $this->get_loggable_url( $urls );

		if ( ! $url ) {
			return;
		}

		$log[] = [
			'url'               => $url,
			'status'            => (int) $status,
			'manual_submission' => (bool) $this->is_manual,
			'message'           => $message,
			'time'              => time(),
		];

		// Only keep the last 100 entries.
		$log = array_slice( $log, -100 );

		update_option( 'rank_math_indexnow_log', $log, false );
	}

	/**
	 * Get the loggable URL from an array of URLs.
	 * If multiple URLs are submitted, return the first one and [+12]
	 *
	 * @param array $urls URLs to submit.
	 *
	 * @return string
	 */
	public function get_loggable_url( $urls ) {
		$urls       = array_values( (array) $urls );
		$count_urls = count( $urls );
		if ( ! $count_urls ) {
			return '';
		}

		$url = $urls[0];
		if ( $count_urls > 1 ) {
			$url .= ' [+' . ( $count_urls - 1 ) . ']';
		}

		return $url;
	}

	/**
	 * Get the log.
	 *
	 * @return array
	 */
	public function get_log() {
		return get_option( 'rank_math_indexnow_log', [] );
	}

	/**
	 * Clear the log.
	 */
	public function clear_log() {
		delete_option( 'rank_math_indexnow_log' );
	}

	/**
	 * Reset object properties.
	 */
	private function reset() {
		$this->last_error    = '';
		$this->last_code     = 0;
		$this->last_response = '';
		$this->is_success    = false;
	}

	/**
	 * Get the additional data to send to the API.
	 *
	 * @param array $urls URLs to submit.
	 *
	 * @return array
	 */
	private function get_payload( $urls ) {
		return wp_json_encode(
			[
				'host'        => $this->get_host(),
				'key'         => $this->get_key(),
				'keyLocation' => $this->get_key_location( 'request_payload' ),
				'urlList'     => (array) $urls,
			]
		);
	}

	/**
	 * Get the error message from the response message.
	 *
	 * @param string $message Response message.
	 */
	private function set_error_message( $message ) {
		if ( ! empty( $message ) ) {
			$this->last_error = $message;
			return;
		}

		$message     = __( 'Unknown error.', 'seo-by-rank-math' );
		$message_map = [
			400 => __( 'Invalid request.', 'seo-by-rank-math' ),
			403 => __( 'Invalid API key.', 'seo-by-rank-math' ),
			422 => __( 'Invalid URL.', 'seo-by-rank-math' ),
			429 => __( 'Too many requests.', 'seo-by-rank-math' ),
			500 => __( 'Internal server error.', 'seo-by-rank-math' ),
		];

		if ( isset( $message_map[ $this->last_code ] ) ) {
			$message = $message_map[ $this->last_code ];
		}

		$this->last_error = $message;
	}


	/**
	 * Generate and save a new API key.
	 */
	public function reset_key() {
		$settings                     = Helper::get_settings( 'instant_indexing', [] );
		$settings['indexnow_api_key'] = $this->generate_api_key();
		$this->api_key                = $settings['indexnow_api_key'];
		update_option( 'rank-math-options-instant-indexing', $settings );
	}

	/**
	 * Generate new random API key.
	 */
	private function generate_api_key() {
		$api_key = wp_generate_uuid4();
		$api_key = preg_replace( '[-]', '', $api_key );

		return $api_key;
	}
}
PK     ¥ŠU]2’îîC&  C&    includes/class-rewrite.phpnu „[µü¤        <?php
/**
 * This class handles the category and author rewrites.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 *
 * @copyright Copyright (C) 2008-2019, Yoast BV
 * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
 */

namespace RankMath;

use RankMath\Traits\Hooker;
use RankMath\Helpers\Sitepress;
use RankMath\Helpers\DB as DB_Helper;

defined( 'ABSPATH' ) || exit;

/**
 * Rewrite class.
 */
class Rewrite {

	use Hooker;

	/**
	 * The Constructor.
	 */
	public function __construct() {

		if ( Helper::get_settings( 'general.strip_category_base' ) ) {
			$this->filter( 'query_vars', 'query_vars' );
			$this->filter( 'request', 'request' );
			$this->filter( 'category_rewrite_rules', 'category_rewrite_rules' );
			$this->filter( 'term_link', 'no_category_base', 10, 3 );

			add_action( 'created_category', 'RankMath\\Helper::schedule_flush_rewrite' );
			add_action( 'delete_category', 'RankMath\\Helper::schedule_flush_rewrite' );
			add_action( 'edited_category', 'RankMath\\Helper::schedule_flush_rewrite' );
		}

		if ( ! Helper::get_settings( 'titles.disable_author_archives' ) ) {
			if ( ! empty( Helper::get_settings( 'titles.url_author_base' ) ) ) {
				add_action( 'init', 'RankMath\\Rewrite::change_author_base', 4 );
			}

			$this->filter( 'author_link', 'author_link', 10, 3 );
			$this->filter( 'request', 'author_request' );
		}
	}

	/**
	 * Change the URL to the author's page.
	 *
	 * @param  string $link            The URL to the author's page.
	 * @param  int    $author_id       The author's ID.
	 * @param  string $author_nicename The author's nice name.
	 * @return string
	 */
	public function author_link( $link, $author_id, $author_nicename ) {
		$custom_url = get_user_meta( $author_id, 'rank_math_permalink', true );
		if ( $custom_url ) {
			$link = str_replace( $author_nicename, $custom_url, $link );
		}

		return $link;
	}

	/**
	 * Redirect the old user permalink to the new one.
	 *
	 * @param  array $query_vars Query vars to check for author_name var.
	 *
	 * @return array
	 */
	public function author_request( $query_vars ) {
		global $wpdb;

		if ( ! array_key_exists( 'author_name', $query_vars ) ) {
			return $query_vars;
		}

		$author_id = DB_Helper::get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='rank_math_permalink' AND meta_value = %s", $query_vars['author_name'] ) );
		if ( $author_id ) {
			$query_vars['author'] = $author_id;
			unset( $query_vars['author_name'] );
		}

		return $query_vars;
	}

	/**
	 * Remove the rewrite rules.
	 */
	public function remove_rules() {
		$this->remove_filter( 'query_vars', 'query_vars' );
		$this->remove_filter( 'request', 'request' );
		$this->remove_filter( 'category_rewrite_rules', 'category_rewrite_rules' );
		$this->remove_filter( 'term_link', 'no_category_base', 10 );

		remove_action( 'init', 'RankMath\\Rewrite::change_author_base', 4 );
	}

	/**
	 * Change the base for author permalinks.
	 */
	public static function change_author_base() {
		global $wp_rewrite;

		/**
		 * Filter: Change the author base.
		 *
		 * @param string $base The author base.
		 */
		$base = apply_filters( 'rank_math/author_base', sanitize_title_with_dashes( Helper::get_settings( 'titles.url_author_base' ), '', 'save' ) );
		if ( empty( $base ) ) {
			return;
		}

		$wp_rewrite->author_base      = $base;
		$wp_rewrite->author_structure = '/' . $wp_rewrite->author_base . '/%author%';
	}

	/**
	 * Add the redirect var to the query vars if the "strip category bases" option is enabled.
	 *
	 * @param  array $query_vars Query vars to filter.
	 *
	 * @return array
	 */
	public function query_vars( $query_vars ) {
		$query_vars[] = 'rank_math_category_redirect';

		return $query_vars;
	}

	/**
	 * Redirect the original category URL to the new one.
	 *
	 * @param  array $query_vars Query vars to check for redirect var.
	 * @return array
	 */
	public function request( $query_vars ) {
		if ( isset( $query_vars['rank_math_category_redirect'] ) ) {
			$catlink = trailingslashit( get_option( 'home' ) ) . user_trailingslashit( $query_vars['rank_math_category_redirect'], 'category' );
			Helper::redirect( $catlink, 301 );
			exit;
		}

		return $query_vars;
	}

	/**
	 * This function was taken and slightly adapted from WP No Category Base plugin by Saurabh Gupta.
	 *
	 * @return array
	 */
	public function category_rewrite_rules() {
		global $wp_rewrite;

		$category_rewrite = $this->get_category_rules();

		$old_base                            = str_replace( '%category%', '(.+)', $wp_rewrite->get_category_permastruct() );
		$old_base                            = trim( $old_base, '/' );
		$category_rewrite[ $old_base . '$' ] = 'index.php?rank_math_category_redirect=$matches[1]';

		return $category_rewrite;
	}

	/**
	 * Remove the category base from the category link.
	 *
	 * @param  string $link     Term link.
	 * @param  object $term     Current Term Object.
	 * @param  string $taxonomy Current Taxonomy.
	 * @return string
	 */
	public function no_category_base( $link, $term, $taxonomy ) {
		if ( 'category' !== $taxonomy ) {
			return $link;
		}

		$category_base = get_option( 'category_base' );
		if ( empty( $category_base ) ) {
			global $wp_rewrite;
			$category_base = trim( str_replace( '%category%', '', $wp_rewrite->get_category_permastruct() ), '/' );
		}

		// Remove initial slash, if there is one (we remove the trailing slash in the regex replacement and don't want to end up short a slash).
		if ( '/' === substr( $category_base, 0, 1 ) ) {
			$category_base = substr( $category_base, 1 );
		}

		$category_base .= '/';

		return preg_replace( '`' . preg_quote( $category_base, '`' ) . '`u', '', $link, 1 );
	}
	/**
	 * Get category re-write rules.
	 *
	 * @return array
	 */
	private function get_category_rules() {
		global $wp_rewrite;

		$category_rewrite = [];
		$categories       = $this->get_categories();
		$blog_prefix      = $this->get_blog_prefix();

		if ( empty( $categories ) ) {
			return $category_rewrite;
		}

		foreach ( $categories as $category ) {
			$category_nicename = $this->get_category_parents( $category ) . $category->slug;
			$category_rewrite  = $this->add_category_rewrites( $category_rewrite, $category_nicename, $blog_prefix, $wp_rewrite->pagination_base );

			// Add rules for upper case encoded nicename.
			$category_nicename_filtered = $this->convert_encoded_to_upper( $category_nicename );

			if ( $category_nicename !== $category_nicename_filtered ) {
				$category_rewrite = $this->add_category_rewrites( $category_rewrite, $category_nicename_filtered, $blog_prefix, $wp_rewrite->pagination_base );
			}
		}

		return $category_rewrite;
	}

	/**
	 * Adds required category rewrites rules.
	 *
	 * @param array  $category_rewrite   The current set of rules.
	 * @param string $category_nicename   Category nicename.
	 * @param string $blog_prefix     Multisite blog prefix.
	 * @param string $pagination_base WP_Query pagination base.
	 *
	 * @return array The added set of rules.
	 */
	private function add_category_rewrites( $category_rewrite, $category_nicename, $blog_prefix, $pagination_base ) {

		$category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ]    = 'index.php?category_name=$matches[1]&feed=$matches[2]';
		$category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/' . $pagination_base . '/?([0-9]{1,})/?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
		$category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/?$' ]                                       = 'index.php?category_name=$matches[1]';

		return $category_rewrite;
	}

	/**
	 * Walks through category nicename and convert encoded parts
	 * into uppercase using $this->encode_to_upper().
	 *
	 * @param string $name The encoded category URI string.
	 *
	 * @return string The converted URI string.
	 */
	private function convert_encoded_to_upper( $name ) {
		// Checks if name has any encoding in it.
		if ( strpos( $name, '%' ) === false ) {
			return $name;
		}

		$names = explode( '/', $name );
		$names = array_map( [ $this, 'encode_to_upper' ], $names );

		return implode( '/', $names );
	}

	/**
	 * Converts the encoded URI string to uppercase.
	 *
	 * @param string $encoded The encoded string.
	 *
	 * @return string The uppercased string.
	 */
	private function encode_to_upper( $encoded ) {
		if ( strpos( $encoded, '%' ) === false ) {
			return $encoded;
		}

		return strtoupper( $encoded );
	}

	/**
	 * Retrieve category parents with separator.
	 *
	 * @param WP_Term $category Category instance.
	 *
	 * @return string
	 */
	private function get_category_parents( $category ) {
		if ( $category->parent === $category->cat_ID || absint( $category->parent ) < 1 ) {
			return '';
		}

		$parents = get_category_parents( $category->parent, false, '/', true );
		return is_wp_error( $parents ) ? '' : $parents;
	}

	/**
	 * Get categories with WPML compatibility.
	 *
	 * @return array
	 */
	private function get_categories() {
		/**
		 * Remove WPML filters while getting terms, to get all languages
		 */
		Sitepress::get()->remove_term_filters();

		$categories = get_categories( [ 'hide_empty' => false ] );

		/**
		 * Register WPML filters back
		 */
		Sitepress::get()->restore_term_filters();

		return $categories;
	}

	/**
	 * Get the blog prefix.
	 *
	 * @return string
	 */
	private function get_blog_prefix() {
		$permalink_structure = get_option( 'permalink_structure' );
		if ( is_multisite() && ! is_subdomain_install() && is_main_site() && 0 === strpos( $permalink_structure, '/blog/' ) ) {
			return 'blog/';
		}

		return '';
	}
}
PK     ¥ŠU]2ÔtŸ  Ÿ  %  includes/3rdparty/wpml/class-wpml.phpnu „[µü¤        <?php
/**
 * WPML Integration.
 *
 * @since      1.0.256
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ThirdParty;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * WPML class.
 */
class WPML {

	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'save_post', 'save_post', 10, 3 );
		$this->filter( 'rank_math/schema/update', 'update_schema', 10, 2 );
	}

	/**
	 * Update schema action handler.
	 *
	 * @param int   $object_id Object ID.
	 * @param array $schemas Schemas.
	 *
	 * @return void
	 */
	public function update_schema( $object_id, $schemas ) {
		$settings      = get_option( 'icl_sitepress_settings', [] );
		$custom_fields = $settings['translation-management']['custom_fields_translation'] ?? [];

		foreach ( $schemas as $meta_id => $schema ) {
			$type     = is_array( $schema['@type'] ) ? $schema['@type'][0] : $schema['@type'];
			$meta_key = 'rank_math_schema_' . $type;

			if ( ! isset( $custom_fields[ $meta_key ] ) ) {
				$custom_fields[ $meta_key ] = '2';
			}

			$settings['translation-management']['custom_fields_translation'] = $custom_fields;
		}

		update_option( 'icl_sitepress_settings', $settings );
	}

	/**
	 * Save post action handler.
	 *
	 * @param int     $post_id Post ID.
	 * @param WP_Post $post    Post object.
	 * @param bool    $update  Whether this is an existing post being updated or not.
	 *
	 * @return void
	 */
	public function save_post( $post_id, $post, $update ) {
		if (
			'revision' === $post->post_type ||
			'publish' !== $post->post_status ||
			! isset( $_POST['skip_sitepress_actions'] ) ||
			! sanitize_text_field( wp_unslash( $_POST['skip_sitepress_actions'] ) ) ||
			( isset( $_POST['post_ID'] ) && (int) $_POST['post_ID'] !== $post_id )
		) {
			return;
		}

		global $rm_wpml_translated_post_id;

		if ( ! $update || ! $rm_wpml_translated_post_id ) {
			$rm_wpml_translated_post_id = $post_id;
			return;
		}

		$rm_wpml_translated_post_id = 0;
		$content                    = $post->post_content;
		$block_updated              = $this->maybe_update_schema_blocks( $content, $post_id );
		$shortcode_updated          = $this->maybe_update_schema_shortcodes( $content );

		if ( ! $block_updated && ! $shortcode_updated ) {
			return;
		}

		wp_update_post(
			[
				'ID'           => $post_id,
				'post_content' => $content,
			]
		);
	}

	/**
	 * Maybe update schema blocks.
	 *
	 * @param string $content Post content.
	 * @param int    $post_id Post ID.
	 */
	private function maybe_update_schema_blocks( &$content, $post_id ) {
		preg_match_all( '/<!--\s*wp:rank-math\/rich-snippet\s*(\{.*\})\s*\/-->/m', $content, $blocks, PREG_SET_ORDER );
		if ( empty( $blocks ) ) {
			return false;
		}

		foreach ( $blocks as $block ) {
			$attr            = json_decode( $block[1], true );
			$attr['post_id'] = $post_id;
			$content         = str_replace( $block[0], '<!-- wp:rank-math/rich-snippet ' . wp_json_encode( $attr, JSON_UNESCAPED_SLASHES ) . ' /-->', $content );
		}

		return true;
	}

	/**
	 * Maybe update schema shortcodes.
	 *
	 * @param string $content Post content.
	 */
	private function maybe_update_schema_shortcodes( &$content ) {
		$pattern = '/\[rank_math_rich_snippet\s+([^\]]*)\]/';
		if ( ! preg_match_all( $pattern, $content, $shortcodes, PREG_SET_ORDER ) ) {
			return false;
		}

		$updated = false;
		foreach ( $shortcodes as $shortcode ) {
			$attributes = $shortcode[1];

			// Remove id attribute with double quotes: id="...".
			$new_attributes = preg_replace( '/id\s*=\s*"[^"]*"/', 'id=""', $attributes );

			// Remove id attribute with single quotes: id='...'.
			$new_attributes = preg_replace( "/id\s*=\s*'[^']*'/", "id=''", $new_attributes );

			if ( $new_attributes !== $attributes ) {
				$content = str_replace( $shortcode[0], '[rank_math_rich_snippet ' . $new_attributes . ']', $content );
				$updated = true;
			}
		}

		return $updated;
	}
}
PK     ¥ŠU]ÀÒâv    /  includes/3rdparty/elementor/class-elementor.phpnu „[µü¤        <?php
/**
 * Elementor integration.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Elementor;

use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMath\Helpers\Editor;

defined( 'ABSPATH' ) || exit;

/**
 * Elementor class.
 */
class Elementor {

	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'init', 'init' );
		$this->filter( 'rank_math/frontend/robots', 'robots' );
		$this->filter( 'rank_math/frontend/disable_integration', 'disable_frontend_integration' );
	}

	/**
	 * Initialize.
	 */
	public function init() {
		if ( ! $this->can_add_seo_tab() ) {
			return;
		}

		$this->action( 'elementor/editor/before_enqueue_scripts', 'enqueue' );
		add_action( 'elementor/editor/footer', [ rank_math()->json, 'output' ], 0 );
		$this->action( 'elementor/editor/footer', 'start_capturing', 0 );
		$this->action( 'elementor/editor/footer', 'end_capturing', 999 );
		$this->filter( 'rank_math/sitemap/content_before_parse_html_images', 'apply_builder_in_content', 10, 2 );
	}

	/**
	 * Disable frontend integration on Elementor Maintenance page.
	 *
	 * @since 1.0.91
	 *
	 * @param boolean $value Whether to run the frontend integration.
	 */
	public function disable_frontend_integration( $value ) {
		$mode = get_option( 'elementor_maintenance_mode_mode' );
		if ( ! in_array( $mode, [ 'maintenance', 'coming_soon' ], true ) ) {
			return $value;
		}

		if ( ! get_option( 'elementor_maintenance_mode_template_id' ) ) {
			return $value;
		}

		$exclude_mode = get_option( 'elementor_maintenance_mode_exclude_mode', [] );
		if ( 'logged_in' === $exclude_mode && is_user_logged_in() ) {
			return $value;
		}

		if ( 'custom' !== $exclude_mode ) {
			return true;
		}

		$exclude_roles = get_option( 'elementor_maintenance_mode_exclude_roles', [] );
		$user          = wp_get_current_user();
		$user_roles    = $user->roles;

		if ( is_multisite() && is_super_admin() ) {
			$user_roles[] = 'super_admin';
		}

		$compare_roles = array_intersect( $user_roles, $exclude_roles );

		return ! empty( $compare_roles ) ? $value : true;
	}

	/**
	 * Start capturing buffer.
	 */
	public function start_capturing() {
		ob_start();
	}

	/**
	 * End capturing buffer and add button.
	 */
	public function end_capturing() {
		$output  = \ob_get_clean();
		$search  = '/(<(div|button) class="elementor-component-tab elementor-panel-navigation-tab" data-tab="global">.*<\/(div|button)>)/m';
		$replace = '${1}<${2} class="elementor-component-tab elementor-panel-navigation-tab" data-tab="rank-math">SEO</${2}>';
		// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- This comes from the output buffer, escaping it would break the output.
		echo \preg_replace(
			$search,
			$replace,
			$output
		);
	}

	/**
	 * Enqueue scripts.
	 */
	public function enqueue() {
		$deps = [
			'wp-core-data',
			'wp-components',
			'wp-block-editor',
			'wp-element',
			'wp-data',
			'wp-api-fetch',
			'wp-media-utils',
			'site-health',
			'rank-math-analyzer',
			'backbone-marionette',
			'elementor-common-modules',
			'rank-math-app',
		];

		if ( wp_script_is( 'elementor-v2-editor-app-bar', 'registered' ) ) {
			$deps[] = 'elementor-v2-editor-app-bar';
		}

		$mode = \Elementor\Core\Settings\Manager::get_settings_managers( 'editorPreferences' )->get_model()->get_settings( 'ui_theme' );
		wp_deregister_style( 'rank-math-editor' );

		wp_enqueue_style( 'wp-components' );
		wp_enqueue_style( 'site-health' );
		wp_enqueue_style( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/css/elementor.css', [ 'rank-math-common' ], rank_math()->version );
		$media_query = '';

		$dark_styles = $this->do_filter(
			'elementor/dark_styles',
			[
				'rank-math-elementor-dark' => rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/css/elementor-dark.css',
			]
		);

		if ( 'light' !== $mode ) {
			$media_query = 'auto' === $mode ? '(prefers-color-scheme: dark)' : 'all';
			foreach ( $dark_styles as $handle => $src ) {
				wp_enqueue_style( $handle, $src, [], rank_math()->version, $media_query );
			}
		}

		Helper::add_json( 'elementorDarkMode', $dark_styles );

		wp_enqueue_script( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/js/elementor.js', $deps, rank_math()->version, true );
		rank_math()->variables->setup();
		rank_math()->variables->setup_json();
	}

	/**
	 * Filters the post content before it is parsed for Sitmeap images..
	 * Used to apply the Elementor page editor on the post content.
	 *
	 * @since 1.0.38
	 *
	 * @param string $content The post content.
	 * @param int    $post_id The post ID.
	 *
	 * @return string The post content.
	 */
	public function apply_builder_in_content( $content, $post_id ) {
		if ( \Elementor\Plugin::$instance->db->is_built_with_elementor( $post_id ) ) {
			return \Elementor\Plugin::$instance->frontend->get_builder_content( $post_id );
		}

		return $content;
	}

	/**
	 * Add SEO tab in Elementor Page Builder.
	 *
	 * @return bool
	 */
	private function can_add_seo_tab() {
		/**
		 * Filter to show/hide SEO Tab in the Elementor Editor.
		 */
		if ( ! $this->do_filter( 'elementor/add_seo_tab', true ) ) {
			return false;
		}

		$post_type = isset( $_GET['post'] ) ? get_post_type( absint( $_GET['post'] ) ) : '';
		if ( $post_type && ! Helper::get_settings( 'titles.pt_' . $post_type . '_add_meta_box' ) ) {
			return false;
		}

		return Editor::can_add_editor();
	}

	/**
	 * Change robots for Elementor Templates pages
	 *
	 * @param array $robots Array of robots to sanitize.
	 *
	 * @return array Modified robots.
	 */
	public function robots( $robots ) {
		if ( is_singular( 'elementor_library' ) ) {
			$robots['index']  = 'noindex';
			$robots['follow'] = 'nofollow';
		}

		return $robots;
	}
}
PK     ¥ŠU]ly¾¡—! —! 2  includes/3rdparty/elementor/assets/js/elementor.jsnu „[µü¤        !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},dn:function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})}},e={};t.r(e),t.d(e,{deleteSchema:function(){return De},lockModifiedDate:function(){return C},refreshResults:function(){return zt},resetDirtyMetadata:function(){return k},resetRedirection:function(){return L},resetStore:function(){return w},saveSchema:function(){return se},saveTemplate:function(){return le},schemaUpdated:function(){return ne},setEditingSchemaId:function(){return re},setEditorTab:function(){return ue},setTemplateTab:function(){return ae},setVersion:function(){return Ht},toggleFrontendScore:function(){return g},toggleIsDiviPageSettingsBarActive:function(){return Gt},toggleIsDiviRankMathModalActive:function(){return $t},toggleLoaded:function(){return Nt},toggleSchemaEditor:function(){return te},toggleSchemaTemplates:function(){return ee},toggleSnippetEditor:function(){return ft},updateAIScore:function(){return pe},updateAdvancedRobots:function(){return v},updateAnalysisScore:function(){return F},updateAppData:function(){return d},updateAppUi:function(){return m},updateBreadcrumbTitle:function(){return A},updateCanonicalUrl:function(){return b},updateDescription:function(){return U},updateEditSchema:function(){return ce},updateEditSchemas:function(){return ie},updateFacebookDescription:function(){return S},updateFacebookHasOverlay:function(){return P},updateFacebookImage:function(){return B},updateFacebookImageID:function(){return T},updateFacebookImageOverlay:function(){return I},updateFacebookTitle:function(){return _},updateFeaturedImage:function(){return R},updateHasRedirect:function(){return z},updateHighlightedParagraphs:function(){return Vt},updateKeywords:function(){return h},updatePermalink:function(){return j},updatePillarContent:function(){return y},updatePostID:function(){return O},updatePrimaryTermID:function(){return x},updateRedirection:function(){return N},updateRedirectionItem:function(){return K},updateRobots:function(){return E},updateSchemas:function(){return oe},updateSelectedKeyword:function(){return Kt},updateSerpDescription:function(){return pt},updateSerpSlug:function(){return lt},updateSerpTitle:function(){return Dt},updateSnippetPreviewType:function(){return dt},updateSocialTab:function(){return Lt},updateTitle:function(){return M},updateTwitterAppCountry:function(){return xt},updateTwitterAppDescription:function(){return St},updateTwitterAppGoogleplayID:function(){return Mt},updateTwitterAppGoogleplayName:function(){return Ut},updateTwitterAppGoogleplayUrl:function(){return Rt},updateTwitterAppIpadID:function(){return It},updateTwitterAppIpadName:function(){return Ot},updateTwitterAppIpadUrl:function(){return jt},updateTwitterAppIphoneID:function(){return Bt},updateTwitterAppIphoneName:function(){return Tt},updateTwitterAppIphoneUrl:function(){return Pt},updateTwitterAuthor:function(){return Ft},updateTwitterCardType:function(){return ht},updateTwitterDescription:function(){return gt},updateTwitterHasOverlay:function(){return Et},updateTwitterImage:function(){return vt},updateTwitterImageID:function(){return bt},updateTwitterImageOverlay:function(){return At},updateTwitterPlayerSize:function(){return kt},updateTwitterPlayerStreamCtype:function(){return _t},updateTwitterPlayerStreamUrl:function(){return wt},updateTwitterPlayerUrl:function(){return Ct},updateTwitterTitle:function(){return yt},updateTwitterUseFacebook:function(){return mt}});var n={};t.r(n),t.d(n,{appData:function(){return ge},appUi:function(){return Ce}});var r={};t.r(r),t.d(r,{getAdvancedRobots:function(){return Pe},getAnalysisScore:function(){return _e},getAppData:function(){return ke},getBreadcrumbTitle:function(){return Oe},getCanonicalUrl:function(){return Ie},getDescription:function(){return nn},getDirtyMetadata:function(){return we},getEditSchemas:function(){return En},getEditingSchema:function(){return An},getEditorTab:function(){return kn},getFacebookAuthor:function(){return qe},getFacebookDescription:function(){return We},getFacebookHasOverlay:function(){return Je},getFacebookImage:function(){return Ze},getFacebookImageID:function(){return Qe},getFacebookImageOverlay:function(){return Xe},getFacebookTitle:function(){return Ve},getFeaturedImage:function(){return rn},getFeaturedImageHtml:function(){return un},getHighlightedParagraphs:function(){return Ge},getKeywords:function(){return Se},getPermalink:function(){return en},getPillarContent:function(){return Be},getPostID:function(){return Ye},getPreviewSchema:function(){return Cn},getPrimaryTermID:function(){return an},getRedirectionID:function(){return on},getRedirectionItem:function(){return Dn},getRedirectionType:function(){return cn},getRedirectionUrl:function(){return sn},getRichSnippets:function(){return je},getRobots:function(){return Te},getSchemas:function(){return vn},getSelectedKeyword:function(){return xe},getSerpDescription:function(){return mn},getSerpSlug:function(){return dn},getSerpTitle:function(){return fn},getShowScoreFrontend:function(){return Me},getSnippetPreviewType:function(){return yn},getSocialTab:function(){return Ne},getTemplateTab:function(){return wn},getTitle:function(){return tn},getTwitterAppCountry:function(){return Vn},getTwitterAppDescription:function(){return Un},getTwitterAppGoogleplayID:function(){return Hn},getTwitterAppGoogleplayName:function(){return Gn},getTwitterAppGoogleplayUrl:function(){return $n},getTwitterAppIpadID:function(){return Kn},getTwitterAppIpadName:function(){return Ln},getTwitterAppIpadUrl:function(){return zn},getTwitterAppIphoneID:function(){return Rn},getTwitterAppIphoneName:function(){return xn},getTwitterAppIphoneUrl:function(){return Nn},getTwitterAuthor:function(){return Pn},getTwitterCardType:function(){return Sn},getTwitterDescription:function(){return Tn},getTwitterHasOverlay:function(){return jn},getTwitterImage:function(){return On},getTwitterImageID:function(){return In},getTwitterImageOverlay:function(){return Mn},getTwitterPlayerSize:function(){return qn},getTwitterPlayerStream:function(){return Qn},getTwitterPlayerStreamCtype:function(){return Zn},getTwitterPlayerUrl:function(){return Wn},getTwitterTitle:function(){return Bn},getTwitterUseFacebook:function(){return _n},hasRedirect:function(){return ln},hasSchemaUpdated:function(){return bn},isDiviPageSettingsBarActive:function(){return ze},isDiviRankMathModalActive:function(){return He},isLoaded:function(){return Re},isModifiedDateLocked:function(){return Ue},isPro:function(){return Le},isRefreshing:function(){return Ke},isSchemaEditorOpen:function(){return gn},isSchemaTemplatesOpen:function(){return Fn},isSnippetEditorOpen:function(){return hn}});const u=jQuery;var a=t.n(u);const i=wp.data,o=wp.mediaUtils,c=wp.hooks,s=rankMathAnalyzer;function D(t){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},D(t)}function l(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,p(r.key),r)}}function p(t){var e=function(t,e){if("object"!=D(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=D(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==D(e)?e:e+""}var f=new(function(){return t=function t(){var e,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,r=null,(n=p(n="map"))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r},(e=[{key:"swap",value:function(t,e){var n=this;if(!(t=t||""))return"";var r=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return t.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(r,function(t){return n.replace(e,t)}).trim()}},{key:"replace",value:function(t,e){var n=e.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(n)){var r="term_description"===n?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():a()(r).val()}return n.includes("customfield(")?(n=n.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[n]:"":(t=t||this.getMap(),(n="seo_description"===(n="seo_title"===(n=n.includes("(")?n.split("(")[0]:n)?"title":n)?"excerpt":n)in t?t[n]:"")}},{key:"getMap",value:function(){var t=this;return null!==this.map||(this.map={},a().each(rankMath.variables,function(e,n){e=e.toLowerCase().replace(/%+/g,"").split("(")[0],t.map[e]=n.example})),this.map}},{key:"setVariable",value:function(t,e){null!==this.map?this.map[t]=e:void 0!==rankMath.variables[t]&&(rankMath.variables[t].example=e)}}])&&l(t.prototype,e),n&&l(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}());function d(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,c.applyFilters)("rank_math_sanitize_data",e,t,n),null!==r&&(r=(0,c.applyFilters)("rank_math_sanitize_meta_value",r,t,n)),r=null===r?e:r,(0,c.doAction)("rank_math_data_changed",t,e,n),{type:"RANK_MATH_APP_DATA",key:t,value:e,metaKey:n,metaValue:r}}function m(t,e){return(0,c.doAction)("rank_math_update_app_ui",t,e),{type:"RANK_MATH_APP_UI",key:t,value:e}}function h(t){return f.setVariable("focuskw",t.split(",")[0]),rankMathEditor.refresh("keyword"),d("keywords",t,"rank_math_focus_keyword")}function y(t){return d("pillarContent",t,"rank_math_pillar_content",!0===t?"on":"off")}function g(t){return d("showScoreFrontend",t,"rank_math_dont_show_seo_score",!0===t?"off":"on")}function F(t){return d("score",t,"rank_math_seo_score")}function b(t){return d("canonicalUrl",t,"rank_math_canonical_url")}function v(t){return d("advancedRobots",t,"rank_math_advanced_robots")}function E(t){return d("robots",t,"rank_math_robots",Object.keys(t))}function A(t){return d("breadcrumbTitle",t,"rank_math_breadcrumb_title")}function C(t){return d("lockModifiedDate",t,"rank_math_lock_modified_date")}function k(){return d("dirtyMetadata",{})}function w(t){return{type:"RESET_STORE",value:t}}function _(t){return d("facebookTitle",t,"rank_math_facebook_title")}function S(t){return d("facebookDescription",t,"rank_math_facebook_description")}function B(t){return d("facebookImage",t,"rank_math_facebook_image")}function T(t){return d("facebookImageID",t,"rank_math_facebook_image_id")}function P(t){return d("facebookHasOverlay",t,"rank_math_facebook_enable_image_overlay",!0===t?"on":"off")}function I(t){return d("facebookImageOverlay",t,"rank_math_facebook_image_overlay")}function O(t){return rankMath.objectID=t,d("postID",t)}function j(t){return d("permalink",t,"permalink")}function M(t){return d("title",t,"rank_math_title")}function U(t){return d("description",t,"rank_math_description")}function R(t){return d("featuredImage",t)}function x(t,e){return d("primaryTerm",parseInt(t),"rank_math_primary_"+e)}function N(t,e){return d(t,e)}function K(t){return m("redirectionItem",t)}function L(){return m("redirectionItem",{})}function z(t){return m("hasRedirect",t)}const H=lodash,G=function(t){return t.replace(/<\/?[a-z][^>]*?>/gi,"")};t.dn(G);const $=function(t){return t.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};t.dn($);const V=function(t){return t.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};t.dn(V);const W=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,e)};t.dn(W);const q=function(t){return t.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};t.dn(q);const Q=function(t){return t.replace(/<!--[\s\S]*?-->/g,"")};t.dn(Q);const Z=function(t){return t.replace(/&\S+?;/g,"")};function J(t){return(0,H.isUndefined)(t)||!t?"":(0,H.flow)([$,W,G,Q,Z,V,q])(t)}t.dn(Z);const X=wp.autop;var Y="[^<>&/\\[\\]\0- =]+?",tt=new RegExp("\\["+Y+"( [^\\]]+?)?\\]","g"),et=new RegExp("\\[/"+Y+"\\]","g");const nt=function(t){return t.replace(tt,"").replace(et,"")};t.dn(nt);const rt=function(t,e){var n=function(t,e){for(var n,r=/<p(?:[^>]+)?>(.*?)<\/p>/gi,u=[];null!==(n=r.exec(t));)u.push(n);return(0,H.map)(u,function(t){return e?J(t[1]):t[1]})}(t=(0,H.flow)([nt,Q,X.autop])(t),e=e||!1);return 0<n.length?n:[e?J(t):t]};t.dn(rt),t.dn(at);var ut=document.createElement("div");function at(t){return t&&"string"==typeof t&&(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),ut.innerHTML=t,t=ut.textContent,ut.textContent=""),t}t.dn(st);var it=function(t,e){return t=(t=J(t)).replace(/\r?\n|\r/g," "),e?(0,H.truncate)(t,{length:e,separator:" "}):t},ot=function(t){if((0,H.isEmpty)(t))return"";t=W(t),t=$(t),t=(0,H.unescape)(t).replace(/\[caption[^\]]*\](.*)\[\/caption\]/g,"");var e=(0,H.filter)(rt(t,!0),function(t){return""!==t.trim()});if(!e.length)return"";var n=rankMathEditor.getPrimaryKeyword();if(""!==n){var r=(0,H.filter)(e,function(t){return(0,H.includes)(t.toLowerCase(),n.toLowerCase())});if(0<r.length)return it(r[0],160)}return it(e[0],160)},ct=function(t){return!(0,H.isUndefined)(t)&&!(0,H.isEmpty)(t)&&J(t)};function st(t){var e=rankMathEditor.assessor.dataCollector.getData(),n=e.excerpt,r=ot(e.content),u=(0,H.isUndefined)(n)||(0,H.isEmpty)(n)?r:(0,H.unescape)(n);if(f.setVariable("excerpt",u),f.setVariable("seo_description",u),""!==(t=at((0,c.applyFilters)("rankMath/description",t))))return J(t);var a=(0,H.unescape)(rankMath.assessor.serpData.descriptionTemplate);return"term"===rankMath.objectType?ct(a)||ct(n)||r:ct(n)||ct(a)||r}function Dt(t){return t=f.swap(""!==t?t:rankMath.assessor.serpData.titleTemplate),rankMathEditor.refresh("title"),m("serpTitle",at(t))}function lt(t){return t=""!==t?t:rankMathEditor.assessor.dataCollector.getSlug(),rankMathEditor.refresh("permalink"),m("serpSlug",t)}function pt(t){return t=f.swap(st(t)),rankMathEditor.refresh("description"),m("serpDescription",t)}function ft(t){return m("isSnippetEditorOpen",t)}function dt(t){return m("snippetPreviewType",t)}function mt(t){return d("twitterUseFacebook",t,"rank_math_twitter_use_facebook",!0===t?"on":"off")}function ht(t){return d("twitterCardType",t,"rank_math_twitter_card_type")}function yt(t){return d("twitterTitle",t,"rank_math_twitter_title")}function gt(t){return d("twitterDescription",t,"rank_math_twitter_description")}function Ft(t){return d("twitterAuthor",t,"rank_math_twitter_author")}function bt(t){return d("twitterImageID",t,"rank_math_twitter_image_id")}function vt(t){return d("twitterImage",t,"rank_math_twitter_image")}function Et(t){return d("twitterHasOverlay",t,"rank_math_twitter_enable_image_overlay",!0===t?"on":"off")}function At(t){return d("twitterImageOverlay",t,"rank_math_twitter_image_overlay")}function Ct(t){return d("twitterPlayerUrl",t,"rank_math_twitter_player_url")}function kt(t){return d("twitterPlayerSize",t,"rank_math_twitter_player_size")}function wt(t){return d("twitterPlayerStream",t,"rank_math_twitter_player_stream")}function _t(t){return d("twitterPlayerStreamCtype",t,"rank_math_twitter_player_stream_ctype")}function St(t){return d("twitterAppDescription",t,"rank_math_twitter_app_description")}function Bt(t){return d("twitterAppIphoneID",t,"rank_math_twitter_app_iphone_id")}function Tt(t){return d("twitterAppIphoneName",t,"rank_math_twitter_app_iphone_name")}function Pt(t){return d("twitterAppIphoneUrl",t,"rank_math_twitter_app_iphone_url")}function It(t){return d("twitterAppIpadID",t,"rank_math_twitter_app_ipad_id")}function Ot(t){return d("twitterAppIpadName",t,"rank_math_twitter_app_ipad_name")}function jt(t){return d("twitterAppIpadUrl",t,"rank_math_twitter_app_ipad_url")}function Mt(t){return d("twitterAppGoogleplayID",t,"rank_math_twitter_app_googleplay_id")}function Ut(t){return d("twitterAppGoogleplayName",t,"rank_math_twitter_app_googleplay_name")}function Rt(t){return d("twitterAppGoogleplayUrl",t,"rank_math_twitter_app_googleplay_url")}function xt(t){return d("twitterAppCountry",t,"rank_math_twitter_app_country")}function Nt(t){return m("isLoaded",t)}function Kt(t){return m("selectedKeyword",t)}function Lt(t){return m("socialTab",t)}function zt(){return m("refreshResults",Date.now())}function Ht(){return m("isPro",!0)}function Gt(t){return m("isDiviPageSettingsBarActive",t)}function $t(t){return m("isDiviRankMathModalActive",t)}function Vt(t){return m("highlightedParagraphs",t)}const Wt=wp.i18n,qt=wp.apiFetch;var Qt=t.n(qt);function Zt(t){return Zt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zt(t)}function Jt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Xt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Jt(Object(n),!0).forEach(function(e){Yt(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Yt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Zt(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Zt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Zt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function te(t){return m("isSchemaEditorOpen",t)}function ee(t){return m("isSchemaTemplatesOpen",t)}function ne(t){return m("schemaUpdated",t)}function re(t){return m("editingSchemaId",t)}function ue(t){return m("editorTab",t)}function ae(t){return m("templateTab",t)}function ie(t){return m("editSchemas",t)}function oe(t){return d("schemas",t)}function ce(t,e){var n=Xt({},(0,i.select)("rank-math").getEditSchemas());return n[t]=e,m("editSchemas",n)}function se(t,e){var n=Xt({},(0,i.select)("rank-math").getSchemas());return n[t]=e,d("schemas",n)}function De(t){var e=Xt({},(0,i.select)("rank-math").getSchemas());return delete e[t],(0,c.doAction)("rank_math_schema_trash",t),d("schemas",e,"rank_math_delete_"+t,"")}function le(t,e,n){return Qt()({method:"POST",path:"rankmath/v1/saveTemplate",data:{schema:t,postId:n}}).then(function(n){e({loading:!1,showNotice:!0,postId:n.id}),setTimeout(function(){e({showNotice:!1}),(0,H.get)(rankMath,"isTemplateScreen",!1)&&(document.title=(0,Wt.__)("Edit Schema","seo-by-rank-math"),window.history.pushState(null,"",n.link.replace(/&amp;/g,"&")))},2e3),rankMath.schemaTemplates.push({schema:t,title:t.metadata.title,type:t["@type"]})}),e({loading:!0}),{type:"DONT_WANT_TO_DO_SOMETHING"}}function pe(t){return d("contentAIScore",t,"rank_math_contentai_score",t)}function fe(t){return fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fe(t)}function de(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function me(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?de(Object(n),!0).forEach(function(e){he(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):de(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function he(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=fe(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==fe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ye=function(t){var e=t.assessor.serpData,n=t.assessor.hasRedirection;return{postID:null,title:e.title?e.title:e.titleTemplate,description:e.description,keywords:e.focusKeywords?e.focusKeywords:"",pillarContent:e.pillarContent,featuredImage:"",permalink:!1,primaryTerm:e.primaryTerm,robots:e.robots,advancedRobots:e.advancedRobots,canonicalUrl:e.canonicalUrl,breadcrumbTitle:e.breadcrumbTitle,showScoreFrontend:e.showScoreFrontend,lockModifiedDate:e.lockModifiedDate,redirectionID:n?(0,H.get)(t.assessor,"redirection.id",""):"",redirectionType:n?(0,H.get)(t.assessor,"redirection.header_code",""):"",redirectionUrl:n?(0,H.get)(t.assessor,"redirection.url_to",""):"",facebookTitle:e.facebookTitle,facebookImage:e.facebookImage,facebookImageID:e.facebookImageID,facebookAuthor:e.facebookAuthor,facebookDescription:e.facebookDescription,facebookHasOverlay:e.facebookHasOverlay,facebookImageOverlay:e.facebookImageOverlay,twitterTitle:e.twitterTitle,twitterImage:e.twitterImage,twitterAuthor:e.twitterAuthor,twitterImageID:e.twitterImageID,twitterCardType:e.twitterCardType,twitterUseFacebook:e.twitterUseFacebook,twitterDescription:e.twitterDescription,twitterHasOverlay:e.twitterHasOverlay,twitterImageOverlay:e.twitterImageOverlay,twitterPlayerUrl:e.twitterPlayerUrl,twitterPlayerSize:e.twitterPlayerSize,twitterPlayerStream:e.twitterPlayerStream,twitterPlayerStreamCtype:e.twitterPlayerStreamCtype,twitterAppDescription:e.twitterAppDescription,twitterAppIphoneName:e.twitterAppIphoneName,twitterAppIphoneID:e.twitterAppIphoneID,twitterAppIphoneUrl:e.twitterAppIphoneUrl,twitterAppIpadName:e.twitterAppIpadName,twitterAppIpadID:e.twitterAppIpadID,twitterAppIpadUrl:e.twitterAppIpadUrl,twitterAppGoogleplayName:e.twitterAppGoogleplayName,twitterAppGoogleplayID:e.twitterAppGoogleplayID,twitterAppGoogleplayUrl:e.twitterAppGoogleplayUrl,twitterAppCountry:e.twitterAppCountry,schemas:(0,H.get)(t,"schemas",{}),score:0,dirtyMetadata:{}}};function ge(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ye(rankMath),e=arguments.length>1?arguments[1]:void 0,n=me({},t.dirtyMetadata);return!1!==e.metaKey&&(n[e.metaKey]=e.metaValue),"RESET_STORE"===e.type?me({},ye(e.value)):"RANK_MATH_APP_DATA"===e.type?"dirtyMetadata"===e.key?me(me({},t),{},{dirtyMetadata:e.value}):me(me({},t),{},he(he({},e.key,e.value),"dirtyMetadata",n)):t}function Fe(t){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fe(t)}function be(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function ve(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?be(Object(n),!0).forEach(function(e){Ee(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Ee(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Fe(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Fe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Ae={isLoaded:!1,isPro:!1,selectedKeyword:{tag:"",index:0,data:{value:""}},hasRedirect:rankMath.assessor.hasRedirection&&!(0,H.isEmpty)((0,H.get)(rankMath.assessor,"redirection.id",""))&&!(0,H.isEmpty)((0,H.get)(rankMath.assessor,"redirection.url_to","")),serpTitle:"",serpSlug:"",serpDescription:(0,H.get)(rankMath.assessor,"serpData.description",""),isSnippetEditorOpen:!1,snippetPreviewType:"",refreshResults:"",redirectionItem:{},socialTab:"facebook",highlightedParagraphs:[],editorTab:"",templateTab:"",editSchemas:{},editingSchemaId:"",isSchemaEditorOpen:!1,isSchemaTemplatesOpen:!1,schemaUpdated:!1,isDiviRankMathModalActive:!1,isDiviPageSettingsBarActive:!1};function Ce(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ae,e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?ve(ve({},t),{},Ee({},e.key,e.value)):t}function ke(t){return t.appData}function we(t){return t.appData.dirtyMetadata}function _e(t){return t.appData.score}function Se(t){return t.appData.keywords}function Be(t){return t.appData.pillarContent}function Te(t){return t.appData.robots}function Pe(t){return t.appData.advancedRobots}function Ie(t){return t.appData.canonicalUrl}function Oe(t){return t.appData.breadcrumbTitle}function je(t){return"todo"}function Me(t){return t.appData.showScoreFrontend}function Ue(t){return t.appData.lockModifiedDate}function Re(t){return t.appUi.isLoaded}function xe(t){return t.appUi.selectedKeyword}function Ne(t){return t.appUi.socialTab}function Ke(t){return t.appUi.refreshResults}function Le(t){return t.appUi.isPro}function ze(t){return t.appUi.isDiviPageSettingsBarActive}function He(t){return t.appUi.isDiviRankMathModalActive}function Ge(t){return t.appUi.highlightedParagraphs}function Ve(t){return t.appData.facebookTitle}function We(t){return t.appData.facebookDescription}function qe(t){return t.appData.facebookAuthor}function Qe(t){return t.appData.facebookImageID}function Ze(t){return t.appData.facebookImage}function Je(t){return t.appData.facebookHasOverlay}function Xe(t){return""!==t.appData.facebookImageOverlay?t.appData.facebookImageOverlay:"play"}function Ye(t){return t.appData.postID}function tn(t){return t.appData.title}function en(t){return t.appData.permalink}function nn(t){return t.appData.description}function rn(t){return t.appData.featuredImage}function un(t){var e=t.appData.featuredImage;return'<img src="'.concat(e.source_url,'" alt="').concat(e.alt_text,'" >')}function an(t){return t.appData.primaryTerm}function on(t){return String(t.appData.redirectionID)}function cn(t){return t.appData.redirectionType}function sn(t){return t.appData.redirectionUrl}function Dn(t){return t.appUi.redirectionItem}function ln(t){return t.appUi.hasRedirect}const pn=wp.url;function fn(t){return at(t.appUi.serpTitle)}function dn(t){return(0,pn.safeDecodeURIComponent)(t.appUi.serpSlug)}function mn(t){return t.appUi.serpDescription}function hn(t){return t.appUi.isSnippetEditorOpen}function yn(t){return t.appUi.snippetPreviewType}function gn(t){return t.appUi.isSchemaEditorOpen}function Fn(t){return t.appUi.isSchemaTemplatesOpen}function bn(t){return t.appUi.schemaUpdated}function vn(t){return t.appData.schemas}function En(t){return t.appUi.editSchemas}function An(t){return{id:t.appUi.editingSchemaId,data:t.appUi.editSchemas[t.appUi.editingSchemaId]}}function Cn(t){return t.appData.schemas[t.appUi.editingSchemaId]}function kn(t){return t.appUi.editorTab}function wn(t){return t.appUi.templateTab}function _n(t){return t.appData.twitterUseFacebook}function Sn(t){return t.appData.twitterCardType}function Bn(t){return t.appData.twitterTitle}function Tn(t){return t.appData.twitterDescription}function Pn(t){return t.appData.twitterAuthor}function In(t){return t.appData.twitterImageID}function On(t){return t.appData.twitterImage}function jn(t){return t.appData.twitterHasOverlay}function Mn(t){return""!==t.appData.twitterImageOverlay?t.appData.twitterImageOverlay:"play"}function Un(t){return t.appData.twitterAppDescription}function Rn(t){return t.appData.twitterAppIphoneID}function xn(t){return t.appData.twitterAppIphoneName}function Nn(t){return t.appData.twitterAppIphoneUrl}function Kn(t){return t.appData.twitterAppIpadID}function Ln(t){return t.appData.twitterAppIpadName}function zn(t){return t.appData.twitterAppIpadUrl}function Hn(t){return t.appData.twitterAppGoogleplayID}function Gn(t){return t.appData.twitterAppGoogleplayName}function $n(t){return t.appData.twitterAppGoogleplayUrl}function Vn(t){return t.appData.twitterAppCountry}function Wn(t){return t.appData.twitterPlayerUrl}function qn(t){return t.appData.twitterPlayerSize}function Qn(t){return t.appData.twitterPlayerStream}function Zn(t){return t.appData.twitterPlayerStreamCtype}var Jn=(0,i.registerStore)("rank-math",{reducer:(0,i.combineReducers)(n),selectors:r,actions:e});function Xn(){return Jn}var Yn={};(0,H.isUndefined)(rankMath.assessor)||(0,H.forEach)(rankMath.assessor.diacritics,function(t,e){return Yn[e]=new RegExp(t,"g")});const tr=function(t){if((0,H.isUndefined)(t))return t;for(var e in Yn)t=t.replace(Yn[e],e);return t};t.dn(tr);var er={"&amp;":"&","&quot;":'"',"&#39;":"'"},nr=/&(?:amp|quot|#(0+)?39);/g,rr=RegExp(nr.source);const ur=function(t){return t&&rr.test(t)?t.replace(nr,function(t){return er[t]||"'"}):t||""};function ar(t){return ar="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ar(t)}function ir(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,or(r.key),r)}}function or(t){var e=function(t,e){if("object"!=ar(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==ar(e)?e:e+""}var cr=function(){return t=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.analyzer=new s.Analyzer({i18n:Wt,analyses:rankMath.assessor.researchesTests}),this.dataCollector=e,this.registerRefresh(),this.updateKeywordResult=this.updateKeywordResult.bind(this),this.sanitizeData=this.sanitizeData.bind(this),(0,c.addAction)("rankMath_analysis_keywordUsage_updated","rank-math",this.updateKeywordResult),(0,c.addFilter)("rank_math_sanitize_meta_value","rank-math",this.sanitizeData),(0,c.addFilter)("rank_math_sanitize_data","rank-math",this.sanitizeData)},e=[{key:"updateKeywordResult",value:function(t,e){rankMathEditor.resultManager.update(t,{keywordNotUsed:e}),t===this.getSelectedKeyword().toLowerCase()&&(0,i.dispatch)("rank-math").refreshResults()}},{key:"sanitizeData",value:function(t,e){return"schemas"===e||(0,H.isObject)(t)||(0,H.isEmpty)(t)?t:(n=t,(0,H.isUndefined)(n)?"":(0,H.flow)([$,W,G,Q])(n));var n}},{key:"getPaper",value:function(t,e){var n=Xn().getState(),r=this.dataCollector.getData(),u=new s.Paper("",{locale:rankMath.localeFull});u.setTitle(n.appUi.serpTitle),u.setPermalink(r.slug),u.setDescription(n.appUi.serpDescription),u.setUrl(r.permalink),u.setText(ur((0,c.applyFilters)("rank_math_content",r.content))),u.setKeyword(t),u.setKeywords(e),u.setSchema(n.appData.schemas),(0,H.isUndefined)(r.featuredImage)||(u.setThumbnail(r.featuredImage.source_url),u.setThumbnailAltText(tr(r.featuredImage.alt_text)));var a=(0,i.select)("rank-math-content-ai");if(!(0,H.isEmpty)(a)){var o=a.getData(),D=a.getScore();u.setContentAI(D||!(0,H.isEmpty)(o.keyword))}return u}},{key:"registerRefresh",value:function(){var t=this;this.refresh=(0,H.debounce)(function(e){var n=Xn().getState();if(!1!==n.appUi.isLoaded){var r=n.appData.keywords.split(","),u=[];(0,c.doAction)("rank_math_"+e+"_refresh"),r.map(function(e,n){var a=t.getPaper(tr(e),r),o=0===n?rankMath.assessor.researchesTests:t.filterTests(t.getSecondaryKeywordTests());u.push(t.analyzer.analyzeSome(o,a).then(function(t){rankMathEditor.resultManager.update(a.getKeyword(),t,0===n),0===n&&(0,i.dispatch)("rank-math").updateAnalysisScore(rankMathEditor.resultManager.getScore(a.getKeyword()))})),Promise.all(u).then(function(){(0,i.dispatch)("rank-math").refreshResults()})})}},500)}},{key:"getSecondaryKeywordTests",value:function(){return["keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","lengthPermalink","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasPowerWords","titleHasNumber","contentHasTOC","contentHasShortParagraphs","contentHasAssets"]}},{key:"getPrimaryKeyword",value:function(){var t=Xn().getState().appData.keywords;return t?tr(t.split(",")[0]):""}},{key:"getSelectedKeyword",value:function(){var t=Xn().getState(),e=""!==t.appUi.selectedKeyword.data.value?t.appUi.selectedKeyword.data.value:t.appData.keywords.split(",")[0];return tr(e)}},{key:"getResearch",value:function(t){return this.analyzer.researcher.getResearch(t)}},{key:"filterTests",value:function(t){return(0,H.intersection)(t,rankMath.assessor.researchesTests)}}],e&&ir(t.prototype,e),n&&ir(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();const sr=cr,Dr=function(){return!(0,H.isNull)(document.getElementById("site-editor"))};t.dn(Dr);const lr=function(){if(!Dr())return!1;var t=wp.data.select("core/editor"),e=t.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===e)return!0;var n=t.getCurrentTemplateId()||e;return!(!(0,H.endsWith)(n,"//home")&&!(0,H.endsWith)(n,"//front-page"))||!(!(0,H.endsWith)(n,"//page")&&!(0,H.endsWith)(n,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};function pr(t){return pr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pr(t)}function fr(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,dr(r.key),r)}}function dr(t){var e=function(t,e){if("object"!=pr(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=pr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==pr(e)?e:e+""}t.dn(lr);const mr=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),(rankMath.is_front_page||lr())&&((0,c.addFilter)("rankMath_analysis_contentLength","rank-math",this.contentLength),(0,c.addFilter)("rankMath_analysis_contentLength_boundaries","rank-math",this.contentLengthBoundary))},(e=[{key:"contentLength",value:function(t){return{hasScore:t.hasScore,failed:(0,Wt.__)("Content is %1$d words long. Consider using at least 300 words.","seo-by-rank-math"),tooltipText:(0,Wt.__)("Minimum recommended content length should be 300 words.","seo-by-rank-math"),emptyContent:(0,Wt.sprintf)((0,Wt.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/?utm_source=Plugin&utm_campaign=WP#overall-content-length" target="_blank">'+(0,Wt.__)("300 words","seo-by-rank-math")+"</a>")}}},{key:"contentLengthBoundary",value:function(){return{recommended:{boundary:299,score:8},belowRecommended:{boundary:200,score:5},low:{boundary:50,score:2}}}}])&&fr(t.prototype,e),n&&fr(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();function hr(t){return hr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},hr(t)}function yr(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,gr(r.key),r)}}function gr(t){var e=function(t,e){if("object"!=hr(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=hr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==hr(e)?e:e+""}const Fr=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},(e=[{key:"setup",value:function(t){Xn(),this.resultManager=new s.ResultManager,this.assessor=new sr(t),new mr,(0,c.doAction)("rank_math_loaded")}},{key:"refresh",value:function(t){this.assessor.refresh(t)}},{key:"getPrimaryKeyword",value:function(){return this.assessor.getPrimaryKeyword()}},{key:"getSelectedKeyword",value:function(){return this.assessor.getSelectedKeyword()}},{key:"updatePermalink",value:function(t){throw"Implement the function"}},{key:"updatePermalinkSanitize",value:function(t){throw"Implement the function"}}])&&yr(t.prototype,e),n&&yr(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();function br(t){return br="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},br(t)}function vr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function Er(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?vr(Object(n),!0).forEach(function(e){Cr(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):vr(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function Ar(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,kr(r.key),r)}}function Cr(t,e,n){return(e=kr(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function kr(t){var e=function(t,e){if("object"!=br(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=br(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==br(e)?e:e+""}const wr=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Cr(this,"initialize",!1),this.dataUpdated=!1,this._data={id:!1,slug:!1,permalink:!1,content:!1,title:!1,excerpt:!1,featuredImage:!1},this.refresh=this.refresh.bind(this),this.savePost=this.savePost.bind(this),this.saveRedirection=this.saveRedirection.bind(this),this.saveSchemas=this.saveSchemas.bind(this),this.subscribeToElementor(),(0,c.addAction)("rank_math_elementor_before_save","rank-math",this.beforeSave),setTimeout(this.elementorPreviewLoaded.bind(this),5e3)},(e=[{key:"elementorPreviewLoaded",value:function(){var t=this;(0,c.addAction)("rank_math_data_changed","rank-math",function(e){(0,H.includes)(["dirtyMetadata","score","lockModifiedDate"],e)||t.dataUpdated||t.activateSaveButton()}),(0,c.addAction)("rank_math_update_app_ui","rank-math",function(e){"hasRedirect"===e&&t.activateSaveButton()})}},{key:"activateSaveButton",value:function(){window.top.$e.internal("document/save/set-is-modified",{status:!0})}},{key:"collectGutenbergData",value:function(){return{id:this.getPostID(),slug:this.getSlug(),permalink:this.getPermalink(),content:this.getContent(),title:this.getTitle(),excerpt:this.getExcerpt(),featuredImage:this.getFeaturedImage()}}},{key:"getPostID",value:function(){return elementor.config.document.id}},{key:"getTitle",value:function(){return elementor.settings.page.model.get("post_title")}},{key:"getContent",value:function(){var t=this,e=[];return this.getContentArea().find('[data-element_type="widget"]').each(function(n,r){var u=a()(r).html();(u=u.trim())&&(u=u.replace(/<div[^>]*class=["'][^"']*elementor-element-overlay[^"']*["'][^>]*>[^]*?<\/div>/gi,""),e.push(t.decodeEntities(u)))}),e.join("")}},{key:"decodeEntities",value:function(t){return t?t=t.replace("â€“","-"):""}},{key:"getContentArea",value:function(){if(this._contentArea)return this._contentArea;var t=elementor.$preview.contents().find('[data-elementor-type="'+ElementorConfig.document.type+'"]');return t.length<1?a()("<div />"):(this._contentArea=t,t)}},{key:"getExcerpt",value:function(){return elementor.settings.page.model.get("post_excerpt")}},{key:"getPermalink",value:function(){return rankMath.is_front_page?rankMath.homeUrl+"/":this.getSlug()?rankMath.permalinkFormat.replace(/%(postname|pagename)%/,this.getSlug()).trimRight("/"):""}},{key:"getSlug",value:function(){return(0,pn.safeDecodeURIComponent)((0,i.select)("rank-math").getPermalink())}},{key:"getFeaturedImage",value:function(){var t=elementor.settings.page.model.get("post_featured_image");if(!(0,H.isUndefined)(t)&&(t=""===t.id?0:parseInt(t.id),this.isValidMediaId(t))){var e=(0,i.select)("core").getMedia(t);if(!(0,H.isUndefined)(e))return e}}},{key:"isValidMediaId",value:function(t){return"number"==typeof t&&0<t}},{key:"subscribeToElementor",value:function(){(0,i.dispatch)("rank-math").updatePermalink(rankMath.postName),this.subscriber=(0,H.debounce)(this.refresh,500),(0,i.subscribe)(this.subscriber),elementor.settings.page.model.on("change",this.subscriber)}},{key:"beforeSave",value:function(){window.rankMathDataCollector.savePost(),window.rankMathDataCollector.saveRedirection(),window.rankMathDataCollector.saveSchemas()}},{key:"refresh",value:function(){var t=Er({},this._data);this._data=this.collectGutenbergData(),this.handleEditorChange(t),!(0,H.isEqual)(t,this._data)&&t.id&&elementor.channels.editor.trigger("status:change",!0)}},{key:"savePost",value:function(){var t=this,e=(0,i.select)("rank-math").getDirtyMetadata();(0,H.isEmpty)(e)||(Qt()({method:"POST",path:"rankmath/v1/updateMeta",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,meta:e,content:this.getContent()}}).then(function(e){t.dataUpdated=!0,(0,H.isString)(e.slug)&&(0,i.dispatch)("rank-math").updatePermalink(e.slug),(0,c.doAction)("rank_math_metadata_updated",e),t.dataUpdated=!1}),(0,i.dispatch)("rank-math").resetDirtyMetadata())}},{key:"saveRedirection",value:function(){var t=(0,i.select)("rank-math").getRedirectionItem();(0,H.isEmpty)(t)||(t.objectID=this.getPostID(),t.redirectionSources=this.getPermalink(),Qt()({method:"POST",path:"rankmath/v1/updateRedirection",data:t}).then(function(t){"delete"===t.action?(0,i.dispatch)("rank-math").updateRedirection("redirectionID",0):"new"===t.action&&(0,i.dispatch)("rank-math").updateRedirection("redirectionID",t.id)}),(0,i.dispatch)("rank-math").resetRedirection())}},{key:"saveSchemas",value:function(){var t=this,e=(0,i.select)("rank-math").getSchemas();if(!(0,H.isEmpty)(e)&&(0,i.select)("rank-math").hasSchemaUpdated()){var n=(0,i.select)("rank-math").getEditSchemas();Qt()({method:"POST",path:"rankmath/v1/updateSchemas",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,schemas:e}}).then(function(r){if(t.dataUpdated=!0,(0,H.isEmpty)(r))(0,i.dispatch)("rank-math").updateSchemas(e);else{var u=Er({},e),a=Er({},n);(0,H.map)(r,function(t,e){u["schema-"+t]=Er({},u[e]),a["schema-"+t]=Er({},a[e]),delete u[e],delete a[e]}),(0,i.dispatch)("rank-math").schemaUpdated(!1),(0,i.dispatch)("rank-math").updateSchemas(u),(0,i.dispatch)("rank-math").updateEditSchemas(a)}t.dataUpdated=!1})}}},{key:"handleEditorChange",value:function(t){var e=this,n={id:"handleIDChange",slug:"handleSlugChange",title:"handleTitleChange",excerpt:"handleExcerptChange",content:"handleContentChange",featuredImage:"handleFeaturedImageChange"};if((0,H.isInteger)(t.id))return this.initialize?void(0,H.forEach)(n,function(n,r){e._data[r]!==t[r]&&e[n](e._data[r])}):(this.initialize=!0,(0,H.forEach)(n,function(t,n){e[t](e._data[n])}),void rankMathEditor.refresh("init"));(0,i.dispatch)("rank-math").refreshResults()}},{key:"handleIDChange",value:function(t){(0,i.dispatch)("rank-math").updatePostID(t),(0,i.dispatch)("rank-math").toggleLoaded(!0)}},{key:"handleSlugChange",value:function(){rankMathEditor.refresh("permalink")}},{key:"handleTitleChange",value:function(t){f.setVariable("title",t),(0,i.dispatch)("rank-math").updateSerpTitle((0,i.select)("rank-math").getTitle()),rankMathEditor.refresh("title")}},{key:"handleExcerptChange",value:function(t){f.setVariable("excerpt",t),f.setVariable("excerpt_only",t),f.setVariable("wc_shortdesc",t),f.setVariable("seo_description",t),(0,i.dispatch)("rank-math").updateSerpDescription((0,i.select)("rank-math").getDescription())}},{key:"handleFeaturedImageChange",value:function(t){(0,i.dispatch)("rank-math").updateFeaturedImage(t),rankMathEditor.refresh("featuredImage")}},{key:"handleContentChange",value:function(){(0,i.dispatch)("rank-math").updateSerpDescription((0,i.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"getData",value:function(){return this._data}}])&&Ar(t.prototype,e),n&&Ar(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}(),_r=Marionette;var Sr=t.n(_r);const Br=wp.element,Tr=Sr().ItemView.extend({root:null,template:!1,id:"elementor-panel-rank-math",className:"rank-math-elementor rank-math-sidebar-panel",initialize:function(){a()("#elementor-panel-elements-search-area").hide()},onShow:function(){this.root=(0,Br.createRoot)(document.getElementById("elementor-panel-rank-math"));var t=(0,Br.createElement)((0,c.applyFilters)("rank_math_app",{}));this.root.render(t)},onDestroy:function(){this.root.unmount(),a()("#elementor-panel-elements-search-area").show()}}),Pr=function(t){return t["rank-math"]={region:t.global.region,view:Tr,options:{}},t};function Ir(t){return Ir="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ir(t)}function Or(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,jr(r.key),r)}}function jr(t){var e=function(t,e){if("object"!=Ir(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Ir(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ir(e)?e:e+""}t.dn(Pr);const Mr=function(){return t=function t(){var e,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,r={},(n=jr(n="links"))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,this.onThemeChange=this.onThemeChange.bind(this),elementor.settings.editorPreferences.model.on("change",this.onThemeChange)},(e=[{key:"onThemeChange",value:function(t){var e=this,n=(0,H.get)(t,"changed.ui_theme",!1);!1!==n&&(0,H.forEach)(rankMath.elementorDarkMode,function(t,r){var u=e.getLink(r+"-css",t);"light"!==n?u.attr("media","auto"===n?"(prefers-color-scheme: dark)":"").appendTo(elementorCommon.elements.$body):u.remove()})}},{key:"getLink",value:function(t,e){return this.links[t]||this.createLink(t,e),this.links[t]}},{key:"createLink",value:function(t,e){this.links[t]=a()("#"+t).length?a()("#"+t):null,this.links[t]||(this.links[t]=a()("<link>",{id:t,rel:"stylesheet",href:e}))}}])&&Or(t.prototype,e),n&&Or(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}(),Ur=wp.components;function Rr(t){return Rr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rr(t)}function xr(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Nr(r.key),r)}}function Nr(t){var e=function(t,e){if("object"!=Rr(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=Rr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Rr(e)?e:e+""}const Kr=function(){return t=function t(){var e=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),rankMath.showLockModifiedDate&&(this.addTopBarButton(),a()(function(){return e.init()}))},e=[{key:"init",value:function(){this.previewLoaded(),this.onDocumentLoaded(),this.onContentChange()}},{key:"addTopBarButton",value:function(){var t=this,e=window.elementorV2;(0,H.isUndefined)(e)||e.editorAppBar.documentOptionsMenu.registerToggleAction({id:"rank-math-lock-modified-date",priority:10,useProps:function(){return{title:(0,Wt.__)("Update (Lock Modified Date)","seo-by-rank-math"),icon:function(){return wp.element.createElement(Ur.Dashicon,{icon:"calendar"})},onClick:function(){t.triggerUpdate()}}}})}},{key:"previewLoaded",value:function(){var t=this;elementor.once("preview:loaded",function(){elementor.getRegion("panel").currentView.footer.currentView.addSubMenuItem("saver-options",{icon:"eicon-date",name:"rank-math-lock-modified-date",title:(0,Wt.__)("Update (Lock Modified Date)","seo-by-rank-math"),callback:function(e){e.currentTarget.classList.contains("elementor-disabled")||t.triggerUpdate()}})})}},{key:"onDocumentLoaded",value:function(){var t=this;elementor.on("document:loaded",function(e){t.activateButton("draft"===e.container.settings.get("post_status")),t.lockModifiedDate(!1)})}},{key:"onContentChange",value:function(){var t=this;$e.commandsInternal.on("run:after",function(e,n,r){switch(n){case"document/save/set-is-modified":t.activateButton(r.status);break;case"document/save/save":case"document/save/default":delete elementorCommon.ajax.requestConstants.lock_modified_date,t.lockModifiedDate(!1)}})}},{key:"triggerUpdate",value:function(){this.lockModifiedDate(!0),elementorCommon.ajax.addRequestConstant("lock_modified_date",!0),$e.run("document/save/default")}},{key:"activateButton",value:function(t){var e=document.getElementById("elementor-panel-footer-sub-menu-item-rank-math-lock-modified-date");e&&(e.classList.remove("elementor-disabled"),t||e.classList.add("elementor-disabled"))}},{key:"lockModifiedDate",value:function(t){wp.data.dispatch("rank-math").lockModifiedDate(t)}}],e&&xr(t.prototype,e),n&&xr(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();wp.blocks;var Lr=function(t,e){t=t.replaceAll("\n","");var n=Hr(t),r=Hr(e),u=[];(0,H.forEach)(r,function(t){(0,H.includes)(n,t)||u.push(t)});var a=e,i=e.replace(/<[^>]*>/g," ");return(0,H.forEach)(u,function(t){var e=i.indexOf(t);if(-1!==e){for(var n=t,r=i[e+t.length];r&&!/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/.test(r);)n+=r,e++,r=i[e+t.length];n=(0,H.trim)(n),a=a.replace(new RegExp(zr(n),"i"),'<mark class="rank-math-highlight" style="background-color: #fee894">'.concat(n,"</mark>"))}}),a},zr=function(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},Hr=function(t){var e=t.split(/(?<!\d)\.(?!\d)|[!?]|\n|<br>|:|<p>|<\/p>/)||[t];return e=e.map(function(t){return t.replace(/<(?!br[\s/>])[^>]*>/gi," ")}),(0,H.compact)((0,H.map)(e,function(t){return(0,H.trim)(t)}))};function Gr(t){if("undefined"==typeof elementor||"undefined"==typeof $e)return Zr("Elementor is not available"),"";if(!t||"string"!=typeof t)return Zr("Invalid widget ID provided"),"";try{if(t.includes("-"))return Wr(t).getSetting("tab_content");var e=elementor.getContainer(t);if(!e)return Zr("Widget with ID not found: "+t),"";var n=e.model.get("widgetType"),r=e.model.get("settings").attributes,u="";switch(n){case"heading":u="<".concat(r.header_size,">").concat(r.title,"</").concat(r.header_size,">");break;case"text-editor":u=r.editor;break;default:u=r.title||r.text||r.content||r.editor||""}return u}catch(t){return Zr("Error getting widget text"),""}}function $r(){var t=["heading","text-editor","accordion","tabs"];if("undefined"==typeof elementor||"undefined"==typeof $e)return Zr("Elementor is not available"),[];try{var e=function(n){n.children&&n.children.forEach(function(n){var u=null==n?void 0:n.model.get("widgetType");u&&t.includes(u)&&("accordion"===u||"tabs"===u?n.children.forEach(function(t,e){r[n.model.get("id")+"-"+e]=t}):r[n.model.get("id")]=n),n.children&&e(n)})},n=elementor.documents.getCurrent();if(!n)return Zr("No document found"),[];var r={};return e(n.container),r}catch(t){return Zr("Error finding containers: "+t),[]}}function Vr(t,e){t.forEach(function(t){var n=t.refBlockId,r="",u=t.content.match(/<([a-z0-9]+)([^>]*)>([^]*?)<\/\1>/gi);if("replace"===t.action){var a=Gr(n);if(!u.length)return void qr(n,Lr(a,t.content))}e.hasOwnProperty(n)||(e[n]=n),u.forEach(function(u,a){r=function(t,n,r,u,a){if(!t){var i=Gr(n);if(0===a)return qr(n,Lr(i,r)),u}var o=e[n];if(r.startsWith("<h"))return e[n]=Qr(t||"after",o,Lr("",r)),"h";if("p"!==u)e[n]=Qr(t||"after",o,Lr("",r));else{var c=Gr(o);qr(o,Lr("",c+r))}return"p"}(t.position,n,u,r,a)})})}function Wr(t){var e=t.split("-");return elementor.getContainer(e[0]).children[e[1]]}function qr(t,e){if(t&&"string"==typeof t)if(e&&"string"==typeof e)try{if(!elementor.documents.getCurrent())return void Zr("No document found");if(t.includes("-")){var n=Wr(t);if(n)return void $e.run("document/elements/settings",{container:n,settings:{tab_content:e}})}var r=elementor.getContainer(t);if(!r)return void Zr("Widget with ID not found: "+t);var u=r.model.get("widgetType"),a="title";switch(u){case"heading":a="title",e=e.replace(/<\/?h[1-6][^>]*>/gi,"");break;case"text-editor":a="editor";break;case"tabs":case"accordion":a="tabs"}var i={};i[a]=e,$e.run("document/elements/settings",{container:r,settings:i})}catch(t){Zr("Error updating widget text: "+t)}else Zr("Invalid text provided. Text must be a non-empty string.");else Zr("Invalid widget ID provided")}function Qr(t,e,n){if(!t||!["before","after"].includes(t))return Zr('Position must be "before" or "after"'),e;if(!e||"string"!=typeof e)return Zr("Invalid reference widget ID"),e;if(!n||"string"!=typeof n)return Zr("Content must be a non-empty string"),e;try{if(!elementor.documents.getCurrent())return Zr("No document found"),e;if(e.includes("-")){var r=Wr(e);return r?($e.run("document/elements/settings",{container:r,settings:{tab_content:r.getSetting("tab_content")+n}}),e):(Zr("Referenced Tab not found: "+e),e)}if(!elementor.getContainer(e))return Zr("Reference widget not found: "+e),e;var u,a,i,o=n.match(/<h([1-6])[^>]*>(.*?)<\/h[1-6]>/i);if(o)u="heading",i="h"+o[1],a={title:o[2],header_size:i};else u="text-editor",a={editor:n};var c=elementor.getContainer(e),s=c.parent.model.get("elements").findIndex(c.model);return $e.run("document/elements/create",{container:c.parent,model:{elType:"widget",widgetType:u,settings:a},options:{at:"before"===t?s:s+1}}).model.get("id")}catch(t){return Zr("Error inserting widget: "+t),e}}function Zr(t){console.error("â�Œ "+t)}function Jr(t){var e=$r(),n=Object.keys(t);Object.keys(e).forEach(function(t){n.includes(t)||$e.run("document/elements/delete",{container:e[t]})}),Object.keys(t).forEach(function(e){qr(e,t[e])})}function Xr(){var t=$r(),e={};return Object.keys(t).forEach(function(t){e[t]=Gr(t)}),e}var Yr=(0,Ur.createSlotFill)("RankMathAfterEditor"),tu=Yr.Fill,eu=Yr.Slot,nu=function(t){var e=t.children,n=t.className;return wp.element.createElement(tu,null,wp.element.createElement(Ur.PanelRow,{className:n},e))};nu.Slot=eu;const ru=nu;var uu=(0,Ur.createSlotFill)("RankMathAdvancedTab"),au=uu.Fill,iu=uu.Slot,ou=function(t){var e=t.children,n=t.className;return wp.element.createElement(au,null,wp.element.createElement(Ur.PanelRow,{className:n},e))};ou.Slot=iu;const cu=ou;var su=(0,Ur.createSlotFill)("RankMathAfterFocusKeyword"),Du=su.Fill,lu=su.Slot,pu=function(t){var e=t.children,n=t.className;return wp.element.createElement(Du,null,wp.element.createElement("div",{className:n},e))};pu.Slot=lu;const fu=pu;function du(t){return du="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},du(t)}function mu(){var t,e,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",u=n.toStringTag||"@@toStringTag";function a(n,r,u,a){var c=r&&r.prototype instanceof o?r:o,s=Object.create(c.prototype);return hu(s,"_invoke",function(n,r,u){var a,o,c,s=0,D=u||[],l=!1,p={p:0,n:0,v:t,a:f,f:f.bind(t,4),d:function(e,n){return a=e,o=0,c=t,p.n=n,i}};function f(n,r){for(o=n,c=r,e=0;!l&&s&&!u&&e<D.length;e++){var u,a=D[e],f=p.p,d=a[2];n>3?(u=d===r)&&(c=a[(o=a[4])?5:(o=3,3)],a[4]=a[5]=t):a[0]<=f&&((u=n<2&&f<a[1])?(o=0,p.v=r,p.n=a[1]):f<d&&(u=n<3||a[0]>r||r>d)&&(a[4]=n,a[5]=r,p.n=d,o=0))}if(u||n>1)return i;throw l=!0,r}return function(u,D,d){if(s>1)throw TypeError("Generator is already running");for(l&&1===D&&f(D,d),o=D,c=d;(e=o<2?t:c)||!l;){a||(o?o<3?(o>1&&(p.n=-1),f(o,c)):p.n=c:p.v=c);try{if(s=2,a){if(o||(u="next"),e=a[u]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,o<2&&(o=0)}else 1===o&&(e=a.return)&&e.call(a),o<2&&(c=TypeError("The iterator does not provide a '"+u+"' method"),o=1);a=t}else if((e=(l=p.n<0)?c:n.call(r,p))!==i)break}catch(e){a=t,o=1,c=e}finally{s=1}}return{value:e,done:l}}}(n,u,a),!0),s}var i={};function o(){}function c(){}function s(){}e=Object.getPrototypeOf;var D=[][r]?e(e([][r]())):(hu(e={},r,function(){return this}),e),l=s.prototype=o.prototype=Object.create(D);function p(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,hu(t,u,"GeneratorFunction")),t.prototype=Object.create(l),t}return c.prototype=s,hu(l,"constructor",s),hu(s,"constructor",c),c.displayName="GeneratorFunction",hu(s,u,"GeneratorFunction"),hu(l),hu(l,u,"Generator"),hu(l,r,function(){return this}),hu(l,"toString",function(){return"[object Generator]"}),(mu=function(){return{w:a,m:p}})()}function hu(t,e,n,r){var u=Object.defineProperty;try{u({},"",{})}catch(t){u=0}hu=function(t,e,n,r){function a(e,n){hu(t,e,function(t){return this._invoke(e,n,t)})}e?u?u(t,e,{value:n,enumerable:!r,configurable:!r,writable:!r}):t[e]=n:(a("next",0),a("throw",1),a("return",2))},hu(t,e,n,r)}function yu(t,e,n,r,u,a,i){try{var o=t[a](i),c=o.value}catch(t){return void n(t)}o.done?e(c):Promise.resolve(c).then(r,u)}function gu(t){return function(){var e=this,n=arguments;return new Promise(function(r,u){var a=t.apply(e,n);function i(t){yu(a,r,u,i,o,"next",t)}function o(t){yu(a,r,u,i,o,"throw",t)}i(void 0)})}}function Fu(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function bu(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Eu(r.key),r)}}function vu(t,e,n){return e&&bu(t.prototype,e),n&&bu(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Eu(t){var e=function(t,e){if("object"!=du(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=du(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==du(e)?e:e+""}function Au(t,e,n){return e=wu(e),function(t,e){if(e&&("object"==du(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,Cu()?Reflect.construct(e,n||[],wu(t).constructor):e.apply(t,n))}function Cu(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(Cu=function(){return!!t})()}function ku(){return ku="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var r=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=wu(t)););return t}(t,e);if(r){var u=Object.getOwnPropertyDescriptor(r,e);return u.get?u.get.call(arguments.length<3?t:n):u.value}},ku.apply(null,arguments)}function wu(t){return wu=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},wu(t)}function _u(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Su(t,e)}function Su(t,e){return Su=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Su(t,e)}var Bu=function(){return o.MediaUpload},Tu={},Pu=function(t){function e(){return Fu(this,e),Au(this,e,arguments)}return _u(e,t),vu(e,[{key:"setup",value:function(t){var n,r,u,a,i;this.registerSlots=this.registerSlots.bind(this),(0,c.addAction)("rank_math_loaded","rank-math",this.registerSlots,0),(0,c.addFilter)("editor.MediaUpload","rank-math/replace-media-upload",Bu),(n=e,r="setup",u=this,i=ku(wu(1&(a=3)?n.prototype:n),r,u),2&a&&"function"==typeof i?function(t){return i.apply(u,t)}:i)([t])}},{key:"registerSlots",value:function(){this.RankMathAfterEditor=ru,this.RankMathAfterFocusKeyword=fu,this.RankMathAdvancedTab=cu,this.slots={AfterEditor:ru,AfterFocusKeyword:fu,AdvancedTab:cu}}},{key:"updatePermalink",value:function(t){(0,i.dispatch)("rank-math").updatePermalink(t)}},{key:"updatePermalinkSanitize",value:function(t){t=this.assessor.getResearch("slugify")(t),(0,i.dispatch)("rank-math").updatePermalink(t)}}])}(Fr);function Iu(){Tu={}}new Kr,a()(function(){window.rankMathEditor=new Pu,window.rankMathGutenberg=window.rankMathEditor,new Mr,elementor.once("preview:loaded",function(){$e.components.get("panel/elements").addTab("rank-math",{title:"SEO"}),window.rankMathDataCollector=new wr,window.rankMathEditor.setup(window.rankMathDataCollector),(0,i.dispatch)("rank-math").refreshResults()});var t=null;elementor.on("preview:loaded",gu(mu().m(function e(){var n,r,u,a;return mu().w(function(e){for(;;)switch(e.n){case 0:if((0,c.addFilter)("rank_math_content_ai_payload_blocks","rank-math",Xr),(0,c.addFilter)("rank_math_content_ai_original_blocks","rank-math",Xr),(0,c.addAction)("rank_math_replace_ai_content","rank-math",function(t){Vr(t,Tu)}),(0,c.addAction)("rank_math_content_test_approve","rank-math",function(){var t;t=$r(),Object.keys(t).forEach(function(t){qr(t,Gr(t).replace(/<mark\s+class="rank-math-highlight"\s+style="background-color:\s*#fee894;?"[^>]*>(.*?)<\/mark>/gi,"$1"))}),Iu()}),(0,c.addAction)("rank_math_content_test_reject","rank-math",function(t){Jr(t),Iu()}),n=elementor.config.document,(r=n.id)&&n.type){e.n=1;break}return e.a(2);case 1:if(t&&r!==t){e.n=2;break}return t=r,e.a(2);case 2:return t=r,e.n=3,Qt()({path:"/wp/v2/".concat(n.type.replace("wp-","")+"s","/").concat(t,"?_fields=slug")});case 3:u=e.v,a=u.slug,(0,i.dispatch)("rank-math").updatePermalink(a),(0,i.dispatch)("rank-math").refreshResults();case 4:return e.a(2)}},e)})))}),a()(window).on("elementor:init",function(){elementor.hooks.addFilter("panel/elements/regionViews",Pr);var t=function(){function t(){return Fu(this,t),Au(this,t,arguments)}return _u(t,$e.modules.hookUI.Before),vu(t,[{key:"getCommand",value:function(){return"document/save/save"}},{key:"getId",value:function(){return"custom-updater-before-save"}},{key:"getConditions",value:function(){return!0}},{key:"apply",value:function(t,e){(0,c.doAction)("rank_math_elementor_before_save",t,e)}}])}();$e.hooks.registerUIBefore(new t)})}();PK     ¥ŠU]Î¨h'ô ô 9  includes/3rdparty/elementor/assets/css/elementor-dark.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type=text],.rank-math-tabs input[type=number],.rank-math-tabs input[type=url],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px;width:100%}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=text]:hover,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=number]:hover,.rank-math-tabs input[type=url]:focus,.rank-math-tabs input[type=url]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=url]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type=radio]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227%}.block-editor .rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{max-width:268px}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 65%;flex:0 0 65%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-sidebar-panel .rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{width:182%}.block-editor .rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{max-width:268px}.rank-math-primary-term-picker{margin:20px 0 0;padding:16px 0;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker .components-base-control{width:100%}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media(min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media(min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:hsl(210,5.7851239669%,37.5490196078%);border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:"";background:#069de3;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.rank-math-sidebar-panel .components-panel__body,.rank-math-sidebar-panel .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.rank-math-sidebar-panel .components-panel__body .button,.rank-math-sidebar-panel .components-panel__body .button-secondary,.rank-math-sidebar-panel .components-panel__body .is-secondary,.rank-math-sidebar-panel .components-modal__content .button,.rank-math-sidebar-panel .components-modal__content .button-secondary,.rank-math-sidebar-panel .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button.active,.rank-math-sidebar-panel .components-panel__body .button-secondary.active,.rank-math-sidebar-panel .components-panel__body .is-secondary.active,.rank-math-sidebar-panel .components-modal__content .button.active,.rank-math-sidebar-panel .components-modal__content .button-secondary.active,.rank-math-sidebar-panel .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:hsl(210,5.7851239669%,40.5490196078%);border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.rank-math-sidebar-panel .components-panel__body .button:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .button:focus:not(:disabled),.rank-math-modal .components-panel__body .button:hover:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .button:focus:not(:disabled),.rank-math-modal .components-modal__content .button:hover:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:hover:not(:disabled){color:#069de3;border-color:#069de3;background:#f8f9fa}.rank-math-sidebar-panel .components-panel__body .button:focus,.rank-math-sidebar-panel .components-panel__body .button-secondary:focus,.rank-math-sidebar-panel .components-panel__body .is-secondary:focus,.rank-math-sidebar-panel .components-modal__content .button:focus,.rank-math-sidebar-panel .components-modal__content .button-secondary:focus,.rank-math-sidebar-panel .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-sidebar-panel .components-panel__body .button .dashicons,.rank-math-sidebar-panel .components-panel__body .button-secondary .dashicons,.rank-math-sidebar-panel .components-panel__body .is-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .button .dashicons,.rank-math-sidebar-panel .components-modal__content .button-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.rank-math-sidebar-panel .components-panel__body .button.disabled,.rank-math-sidebar-panel .components-panel__body .button-secondary.disabled,.rank-math-sidebar-panel .components-panel__body .is-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .button.disabled,.rank-math-sidebar-panel .components-modal__content .button-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.rank-math-sidebar-panel .components-panel__body .button-primary,.rank-math-sidebar-panel .components-panel__body .is-primary,.rank-math-sidebar-panel .components-modal__content .button-primary,.rank-math-sidebar-panel .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none;border-radius:3px}.rank-math-sidebar-panel .components-panel__body .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .button-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .button-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-primary:hover:not(:disabled){color:#fff;border-color:#08a7f1;background:#08a7f1}.rank-math-sidebar-panel .components-panel__body .button-primary:focus,.rank-math-sidebar-panel .components-panel__body .is-primary:focus,.rank-math-sidebar-panel .components-modal__content .button-primary:focus,.rank-math-sidebar-panel .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-sidebar-panel .components-panel__body .button-primary[disabled],.rank-math-sidebar-panel .components-panel__body .is-primary[disabled],.rank-math-sidebar-panel .components-modal__content .button-primary[disabled],.rank-math-sidebar-panel .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important;color:rgb(159.0364806867,222.8712446352,252.4635193133) !important}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default),.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:rgb(56.5071428571,126.0357142857,217.9928571429);background:rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default),.rank-math-sidebar-panel .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10ac84;background:#10ac84}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:rgb(14.6978723404,158.0021276596,121.2574468085);background:rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default),.rank-math-sidebar-panel .components-modal__content .is-red:not(.default),.rank-math-modal .components-panel__body .is-red:not(.default),.rank-math-modal .components-modal__content .is-red:not(.default){border-color:#ed5e5e;background:#ed5e5e}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):hover,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):hover,.rank-math-modal .components-modal__content .is-red:not(.default):focus{border-color:hsl(0,79.8882681564%,61.9019607843%);background:hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%);box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .button-link-delete,.rank-math-sidebar-panel .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .button-link-delete:hover,.rank-math-sidebar-panel .components-panel__body .button-link-delete:focus,.rank-math-sidebar-panel .components-modal__content .button-link-delete:hover,.rank-math-sidebar-panel .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.rank-math-sidebar-panel .components-panel__body .button-link,.rank-math-sidebar-panel .components-panel__body .is-link,.rank-math-sidebar-panel .components-modal__content .button-link,.rank-math-sidebar-panel .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button-small,.rank-math-sidebar-panel .components-panel__body .is-small,.rank-math-sidebar-panel .components-modal__content .button-small,.rank-math-sidebar-panel .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.rank-math-sidebar-panel .components-panel__body .button-xlarge,.rank-math-sidebar-panel .components-panel__body .is-large,.rank-math-sidebar-panel .components-modal__content .button-xlarge,.rank-math-sidebar-panel .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.rank-math-sidebar-panel .components-panel__body .button-animated,.rank-math-sidebar-panel .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.rank-math-sidebar-panel .components-panel__body .button-animated i,.rank-math-sidebar-panel .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.rank-math-sidebar-panel .components-panel__body .button-animated:before,.rank-math-sidebar-panel .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:"";-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon:hover,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}.rank-math-sidebar-panel .components-panel__body .rank-math-highlight-button,.rank-math-sidebar-panel .components-modal__content .rank-math-highlight-button,.rank-math-modal .components-panel__body .rank-math-highlight-button,.rank-math-modal .components-modal__content .rank-math-highlight-button{padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-sidebar-panel .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.rank-math-sidebar-panel .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media(min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:14px;height:14px;margin-right:5px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id="1-review"]{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:"";-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked~.rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type=text].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items{gap:4px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]{padding:0;background:rgba(0,0,0,0);width:auto;min-width:80px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover{background:rgba(0,0,0,0)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled){-webkit-box-shadow:none;box-shadow:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score{font-size:12px;font-weight:600;position:relative}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk{color:rgb(227.9533898305,36.5466101695,103.1228813559);border-color:rgb(227.9533898305,36.5466101695,103.1228813559);background:rgb(252.113559322,231.686440678,238.7915254237)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk{color:rgb(179.1666666667,110.5714285714,14.3333333333);border-color:rgb(179.1666666667,110.5714285714,14.3333333333);background:hsl(35.0310559006,85.1851851852%,92.9411764706%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk{color:hsl(163.3846153846,61.320754717%,36.568627451%);border-color:hsl(163.3846153846,61.320754717%,36.568627451%);background:hsl(163.3846153846,61.320754717%,91.568627451%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score{padding:10px 5px 8px 3px;color:#212f3e;border:1px solid hsl(210,15.625%,69.9019607843%);border-radius:2px;background:#dadfe4;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon{font-size:15px;float:left;height:15px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target{font-size:15px;font-weight:600}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score{font-size:12px;font-weight:600;display:inline-block}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading{pointer-events:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk{color:#e12925;border-color:#e12925;background:#fce5e2}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk{color:#b36f0e;border-color:#b36f0e;background:rgb(255,233.4,193.8)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk{color:#439f40;border-color:#439f40;background:#e3f4e3}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score{color:#fff;background:#b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk{background:hsl(1.2765957447,75.8064516129%,71.3725490196%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk{background:orange}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk{border-color:rgb(66.3911290323,158.8004032258,63.6995967742);background:rgb(106.9596774194,194.5927419355,104.4072580645)}.components-menu-group .rank-math-toolbar-score .seo-score,.components-menu-group .rank-math-toolbar-score .content-ai-score{display:none}.components-menu-group .rank-math-toolbar-score i{font-size:1.25rem}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:"dashicons";font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:"ï…•";text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:hsl(3.9130434783,77.9661016949%,71.862745098%);background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#f29c96 !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,65.9661016949%,68.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,62.9661016949%,64.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,69.9661016949%,88.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,72.9661016949%,84.862745098%)}.rank-math-focus-keyword .tagify__tag.ok-fk{color:rgb(255,158.921875,18.5);background:rgb(255,235.58125,207.2)}.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:rgb(255,235.58125,207.2) !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#ffbe5f !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:rgb(242.952,171.166,66.248)}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:rgb(238.41,162.026875,50.39)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:rgb(251.048,214.1215,160.152)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:hsl(35.625,95%,75.6274509804%)}.rank-math-focus-keyword .tagify__tag.good-fk{color:hsl(120,42.5531914894%,58.137254902%);background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(120,42.5531914894%,91.137254902%) !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#79c979 !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(120,30.5531914894%,55.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:hsl(120,27.5531914894%,51.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:hsl(120,37.5531914894%,78.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:hsl(120,37.5531914894%,71.137254902%)}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"ïŒµ"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{content:attr(data-placeholder);-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:1;-webkit-transform:none;transform:none;color:rgba(0,0,0,.25);color:var(--placeholder-color-focus);height:1em;line-height:1em;margin:auto 0;white-space:nowrap;pointer-events:none}.rank-math-focus-keyword .tagify__input:after{content:attr(data-suggest);display:inline-block;vertical-align:middle;position:absolute;min-width:calc(100% - 1.5em);text-overflow:ellipsis;overflow:hidden;white-space:pre;color:var(--tag-text-color);opacity:.3;pointer-events:none;max-width:100px}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px);transition:.2s ease-out;opacity:0;-webkit-transform:translateX(6px);transform:translateX(6px);min-width:0px;display:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.rank-math-focus-keyword .tagify.tagify--noTags.tagify--empty span{width:100%}.tagify__dropdown{position:absolute;z-index:99999999;background:#fff;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,.18);box-shadow:0 9px 18px 0 rgba(25,30,35,.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent{-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:6px 8px 6px 12px;margin-left:8px;margin-right:2px;border-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:-2px;left:-8px;width:16px;height:16px;color:rgba(0,0,0,.4) !important;background:#fff !important;-webkit-box-shadow:0px 1px 3px rgba(0,0,0,.15);box-shadow:0px 1px 3px rgba(0,0,0,.15);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn:hover{color:#d9655d !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type{padding-right:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type>div{margin-right:6px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container{display:-webkit-box;display:-ms-flexbox;display:flex;border-top-right-radius:20px;border-bottom-right-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:3px;width:22px;padding-left:3px;border:0;border-radius:16px;color:#fff;font-size:12px;font-weight:500;line-height:14px;z-index:10;overflow:hidden;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover{width:-webkit-max-content;width:-moz-max-content;width:max-content;padding-right:7px;padding-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover .intent{visibility:visible}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .icon::before{font-size:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .intent{font-size:11px;font-weight:400;visibility:hidden}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{height:18px;color:rgba(0,0,0,.4);background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent:hover{color:rgba(0,0,0,.7)}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent{padding-right:27px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container{position:absolute;right:4px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after,.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{content:"";display:block}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{width:30px;-webkit-mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));-webkit-mask-image:linear-gradient(to right, transparent, #000);mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));mask-image:linear-gradient(to right, transparent, #000);z-index:5}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after{position:absolute;inset:0;left:30px;z-index:1;border-top-right-radius:16px;border-bottom-right-radius:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{height:100%}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:"ïŒµ";text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:"ï…‡";background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:rgb(255,163.3333333333,95);-webkit-box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95);box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95)}.rank-math-checklist li .rank-math-help-icon{margin:0 !important}.rank-math-checklist li .rank-math-ai-button.is-link{gap:3px;padding:4px 5px;margin-left:4px;border-radius:3px;color:#b34a91;background:rgba(179,74,145,.1);font-size:12px;-webkit-transition:.2s all ease-in-out;transition:.2s all ease-in-out}.rank-math-checklist li .rank-math-ai-button.is-link:hover{background:rgba(179,74,145,.17)}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:5px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:"ïŒµ";margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:"ï…‡"}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:"!";text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{margin-left:5px}.suggestion-item button.suggestion-title{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:left;background:none;border:0;padding:0;cursor:default;vertical-align:sub}.suggestion-item button.suggestion-title a{vertical-align:sub}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:"ï…€" !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease,padding .2s ease,margin .2s ease;transition:width .2s ease,padding .2s ease,margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial,sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:rgba(0,0,0,0)}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid rgba(0,0,0,0);border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,.16);box-shadow:0 2px 5px 1px rgba(64,60,67,.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:gray;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media(min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:"Â·"}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:"Â·"}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px #fff}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:rgba(0,0,0,0) !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial,sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id="1-review"]{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#f44336;-webkit-transition:.25s all linear;transition:.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type=text],.rank-math-editor .field-group input[type=url],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type=text]:hover,.rank-math-editor .field-group input[type=url]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type=text]:focus,.rank-math-editor .field-group input[type=url]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:rgba(0,0,0,0);-webkit-box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1);box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .components-tab-panel__tabs>button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, rgb(255, 233, 25) 0%, rgb(251, 192, 0) 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:"";background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink .6s;animation:blink .6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink .8s;animation:wink .8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}.rank-math-post-publish .rank-math-social-share-buttons,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs>.components-tab-panel__tabs{background-color:#26292c}.rank-math-tabs>.components-tab-panel__tabs button{color:inherit}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{color:#70d5f5}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{color:#fff;background:#70d5f5;-webkit-box-shadow:0 0 0 4px #70d5f5;box-shadow:0 0 0 4px #70d5f5}.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-tabs>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{font-weight:normal}.rank-math-tabs>.components-tab-panel__tab-content .serp-preview-title{color:#6d7882}.rank-math-tabs>.components-tab-panel__tab-content select{background:#34383c}.rank-math-tabs>.components-tab-panel__tab-content input[type=checkbox]{cursor:pointer;border-color:#64666a;background:#34383c}.rank-math-tabs>.components-tab-panel__tab-content input[type=checkbox]:checked{border-color:#11a0d2;background:#11a0d2}.rank-math-tabs>.components-tab-panel__tab-content .components-form-toggle__track{border-color:#e0e1e3;background:rgba(0,0,0,0)}.rank-math-tabs>.components-tab-panel__tab-content .components-form-toggle__thumb{border-color:#e0e1e3;background:#e0e1e3}.rank-math-tabs>.components-tab-panel__tab-content .is-checked span.components-form-toggle__track{border-color:#11a0d2;background:#11a0d2}.rank-math-tabs>.components-tab-panel__tab-content .is-checked span.components-form-toggle__thumb{border-color:#fff;background:#fff}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body{border-color:#34383c;background:#404349 !important}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){color:#e0e1e3}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{background:rgba(0,0,0,0)}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button{opacity:.6}.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button:not(.is-default):hover,.rank-math-tabs>.components-tab-panel__tab-content .components-panel__body .rank-math-datepicker>button:focus:not(:disabled){opacity:.9;color:#fff;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button{opacity:.6}.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button:not(.is-default):hover,.rank-math-tabs>.components-tab-panel__tab-content .variable-group .components-button:focus:not(:disabled){opacity:.9;color:#fff;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-advanced>.components-panel__body,.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-schema>.components-panel__body{background:#404349}.rank-math-tabs .components-panel__body-toggle.components-button{color:#e0e1e3}.rank-math-tabs .components-panel__body-toggle.components-button:focus:not(:disabled),.rank-math-tabs .components-panel__body-toggle.components-button:focus:not(:disabled){color:#e0e1e3;background:rgba(0,0,0,0)}.rank-math-tabs .components-panel__body-toggle.components-button .components-panel__arrow{color:inherit}.rank-math-tabs input[type=text],.rank-math-tabs input[type=number],.rank-math-tabs input[type=url],.rank-math-tabs textarea,.rank-math-tabs select{color:#e0e1e3;border-color:#64666a;background:#34383c}.rank-math-tabs input[type=text]:-moz-read-only, .rank-math-tabs input[type=number]:-moz-read-only, .rank-math-tabs input[type=url]:-moz-read-only, .rank-math-tabs textarea:-moz-read-only, .rank-math-tabs select:-moz-read-only{color:#e0e1e3 !important;background:#34383c !important}.rank-math-tabs input[type=text]:read-only,.rank-math-tabs input[type=number]:read-only,.rank-math-tabs input[type=url]:read-only,.rank-math-tabs textarea:read-only,.rank-math-tabs select:read-only{color:#e0e1e3 !important;background:#34383c !important}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=url]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{color:#e0e1e3;background:#34383c}.rank-math-tabs ::-webkit-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::-moz-placeholder{color:#a4afb7 !important}.rank-math-tabs :-ms-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::-ms-input-placeholder{color:#a4afb7 !important}.rank-math-tabs ::placeholder{color:#a4afb7 !important}.rank-math-schema-in-use{color:#e0e1e3}.rank-math-schema-section-title{font-weight:600 !important;color:#e0e1e3}.rank-math-schema-tabs .components-panel__body{background:rgba(0,0,0,0) !important}.rank-math-schema-tabs .schema-group--children>.schema-group-or-property-container>.schema-group-or-property{border-color:#404349;background:#404349}.rank-math-tooltip label{color:#a4afb7}.rank-math-tooltip label:hover{color:#70d5f5}.rank-math-tooltip label:after{border-color:rgba(0,0,0,0) rgba(0,0,0,0) #5c5f64}.rank-math-tooltip input:checked+label{color:#70d5f5}.rank-math-tooltip-content{color:#cacdd1;background:#5c5f64}.rank-math-checklist .rank-math-group-score.test-ok{color:hsl(120,33.8709677419%,98.6274509804%);background:#52a652}.rank-math-checklist .rank-math-group-score.test-warning{color:#fff;background:#e59901}.rank-math-checklist .rank-math-group-score.test-fail{color:#fff;background:#f0776f}.rank-math-checklist li:before{color:#fff;background:#f0776f;position:absolute;top:0;left:-1px}.rank-math-checklist li.test-ok:before{color:hsl(120,33.8709677419%,98.6274509804%);background:#52a652}.rank-math-checklist li.test-warning:before{color:#fff;background:#e59901}.rank-math-checklist li.test-check-bad:before{color:#e58601;background:rgba(0,0,0,0);-webkit-box-shadow:inset 0 0 0 2px #e58601;box-shadow:inset 0 0 0 2px #e58601}.rank-math-checklist li.test-check-ok:before{color:#e59901;background:rgba(0,0,0,0);-webkit-box-shadow:inset 0 0 0 2px #e59901;box-shadow:inset 0 0 0 2px #e59901}.rank-math-checklist li.test-check-good:before{color:#52a652;background:rgba(0,0,0,0);-webkit-box-shadow:inset 0 0 0 2px #52a652;box-shadow:inset 0 0 0 2px #52a652}.rank-math-modal,.rank-math-modal.rank-math-modal-trends-tool{background:#26292c}.rank-math-modal .trends-tool-frame-sidebar,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar{background-color:rgba(0,0,0,0);border-color:#404349}.rank-math-modal .trends-tool-frame-sidebar .remove-keyword,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .remove-keyword{border-color:#7f868d}.rank-math-modal .trends-tool-frame-sidebar .keyword-field input,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .keyword-field input{color:#fff}.rank-math-modal .components-text-control__input::-webkit-input-placeholder,.rank-math-modal.rank-math-modal-trends-tool .components-text-control__input::-webkit-input-placeholder{color:#fff}.rank-math-modal .trends-tool-frame-sidebar .compare-keyword-bar,.rank-math-modal .components-text-control__input,.rank-math-modal .components-select-control__input,.rank-math-modal.rank-math-modal-trends-tool .trends-tool-frame-sidebar .compare-keyword-bar,.rank-math-modal.rank-math-modal-trends-tool .components-text-control__input,.rank-math-modal.rank-math-modal-trends-tool .components-select-control__input{background:#404349;border:none;color:#fff}.rank-math-modal .rank-math-trends-cta-wrapper:before,.rank-math-modal.rank-math-modal-trends-tool .rank-math-trends-cta-wrapper:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;background:rgba(38,41,44,.4);z-index:1}.rank-math-modal .components-modal__content .components-modal__header,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header{background-color:#26292c;color:#e0e1e3;-webkit-box-shadow:0 0 8px rgba(0,0,0,.3019607843);box-shadow:0 0 8px rgba(0,0,0,.3019607843);border:none}.rank-math-modal .components-modal__content .components-modal__header-heading,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header-heading{color:#e0e1e3}.rank-math-modal .components-modal__content .components-modal__header button,.rank-math-modal.rank-math-modal-trends-tool .components-modal__content .components-modal__header button{color:#fff}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box{background-color:#404349;z-index:1}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box h3,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box h3{color:#e0e1e3}.rank-math-modal #rank-math-pro-cta .rank-math-cta-box ul li,.rank-math-modal.rank-math-modal-trends-tool #rank-math-pro-cta .rank-math-cta-box ul li{color:#fff}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs{border-bottom:0;background:#404349}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link),.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-weight:500;color:#e0e1e3}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{color:#70d5f5}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active i,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active i{color:inherit}.rank-math-modal .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after,.rank-math-modal.rank-math-modal-trends-tool .rank-math-tabs .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{background:#70d5f5}.rank-math-modal .field-group,.rank-math-modal.rank-math-modal-trends-tool .field-group{background:#404349}.rank-math-modal .field-group .components-base-control__help,.rank-math-modal.rank-math-modal-trends-tool .field-group .components-base-control__help{color:inherit}.rank-math-modal .field-group .length-indicator-wrapper .length-indicator,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #34383c), color-stop(19%, #34383c), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #34383c), color-stop(39%, #34383c), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #34383c), color-stop(59%, #34383c), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #34383c), color-stop(79%, #34383c), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #34383c 19%, #34383c 19%, #f16b17 20%, #f1a104 38%, #34383c 39%, #34383c 39%, #f1a404 40%, #d9b507 58%, #34383c 59%, #34383c 59%, #d4b509 60%, #7bb02c 78%, #34383c 79%, #34383c 79%, #76ae2e 80%, #2da24c 100%)}.rank-math-modal .field-group .length-indicator-wrapper .length-indicator span,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper .length-indicator span{background:#34383c}.rank-math-modal .field-group .length-indicator-wrapper.invalid .length-indicator,.rank-math-modal.rank-math-modal-trends-tool .field-group .length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #34383c), color-stop(19%, #34383c), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #34383c), color-stop(39%, #34383c), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #34383c), color-stop(59%, #34383c), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #34383c), color-stop(79%, #34383c), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #34383c 19%, #34383c 19%, #e33d2a 20%, #e33d2a 38%, #34383c 39%, #34383c 39%, #e33d2a 40%, #e33d2a 58%, #34383c 59%, #34383c 59%, #e33d2a 60%, #e33d2a 78%, #34383c 79%, #34383c 79%, #e33d2a 80%, #e33d2a 100%)}.rank-math-modal .field-group input[type=text],.rank-math-modal .field-group input[type=url],.rank-math-modal .field-group textarea,.rank-math-modal .field-group select,.rank-math-modal.rank-math-modal-trends-tool .field-group input[type=text],.rank-math-modal.rank-math-modal-trends-tool .field-group input[type=url],.rank-math-modal.rank-math-modal-trends-tool .field-group textarea,.rank-math-modal.rank-math-modal-trends-tool .field-group select{background:#34383c}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-name,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-name,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{color:#fff}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time{color:#6e767d}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper{border-color:#2f3336;background:#1d2022}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#1a1c1e}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-caption,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-caption,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-caption{color:#6e767d;background:#1d2022}.rank-math-modal .rank-math-social-preview-twitter .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-twitter .rank-math-social-preview-caption .rank-math-social-preview-title,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-caption .rank-math-social-preview-title{color:#d9d9d9}.rank-math-modal .rank-math-social-preview-facebook .rank-math-social-preview-meta,.rank-math-modal.rank-math-modal-trends-tool .rank-math-social-preview-facebook .rank-math-social-preview-meta{border-color:#2f3336;background:#1d2022}.rank-math-modal .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link),.rank-math-modal.rank-math-modal-trends-tool .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){background:#404349}.rank-math-modal .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover,.rank-math-modal.rank-math-modal-trends-tool .rank-math-editor-social button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{color:inherit}.rank-math-variables-dropdown{border-color:#34383c;background:#404349;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.rank-math-variables-dropdown li{border-color:#34383c}.rank-math-variables-dropdown li:hover{background:#34383c}.rank-math-variables-dropdown li:after{background:#34383c}.tagify{border-color:#64666a;background:#26292c}.tagify__input::before{color:#a4afb7}.tagify__tag.bad-fk{color:rgb(179.320754717,28.641509434,18.679245283);background:hsl(3.7209302326,81.1320754717%,86.8235294118%)}.tagify__tag.bad-fk.selected{color:#fff;background:#f0776f}.tagify__tag.bad-fk.selected .tagify__tag__removebtn{color:#fff;background:rgb(218.1689433962,99.8535612111,92.0310566038)}.tagify__tag.bad-fk.selected .tagify__tag__removebtn:hover{background:rgb(206.7014150943,90.7638767003,83.0985849057)}.tagify__tag.bad-fk .tagify__tag__removebtn{color:#fff;background:hsl(3.7209302326,73.1320754717%,80.8235294118%)}.tagify__tag.bad-fk .tagify__tag__removebtn:hover{background:hsl(3.7209302326,76.1320754717%,76.8235294118%)}.tagify__tag.ok-fk{color:hsl(40,99.1304347826%,30.0980392157%);background:hsl(40,99.1304347826%,80.0980392157%)}.tagify__tag.ok-fk.selected{color:#fff;background:#e59901}.tagify__tag.ok-fk.selected .tagify__tag__removebtn{color:hsl(40,99.1304347826%,95.0980392157%);background:hsl(40,87.1304347826%,40.0980392157%)}.tagify__tag.ok-fk.selected .tagify__tag__removebtn:hover{background:hsl(40,84.1304347826%,37.0980392157%)}.tagify__tag.ok-fk .tagify__tag__removebtn{color:hsl(40,99.1304347826%,95.0980392157%);background:hsl(40,91.1304347826%,57.0980392157%)}.tagify__tag.ok-fk .tagify__tag__removebtn:hover{background:hsl(40,94.1304347826%,52.0980392157%)}.tagify__tag.good-fk{color:hsl(120,33.8709677419%,43.6274509804%);background:hsl(120,33.8709677419%,76.6274509804%)}.tagify__tag.good-fk.selected{color:hsl(120,33.8709677419%,98.6274509804%);background:#52a652}.tagify__tag.good-fk.selected .tagify__tag__removebtn{color:hsl(120,33.8709677419%,98.6274509804%);background:hsl(120,31.8709677419%,40.6274509804%)}.tagify__tag.good-fk.selected .tagify__tag__removebtn:hover{background:hsl(120,18.8709677419%,36.6274509804%)}.tagify__tag.good-fk .tagify__tag__removebtn{color:hsl(120,33.8709677419%,98.6274509804%);background:hsl(120,28.8709677419%,63.6274509804%)}.tagify__tag.good-fk .tagify__tag__removebtn:hover{background:hsl(120,28.8709677419%,56.6274509804%)}#rank-math-compare-keywords-trigger{border-color:#64666a;background:#26292c}PK     ¥ŠU]ÿ@½omå må 4  includes/3rdparty/elementor/assets/css/elementor.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type=text],.rank-math-tabs input[type=number],.rank-math-tabs input[type=url],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px;width:100%}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=text]:hover,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=number]:hover,.rank-math-tabs input[type=url]:focus,.rank-math-tabs input[type=url]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=url]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type=radio]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227%}.block-editor .rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{max-width:268px}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 65%;flex:0 0 65%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-sidebar-panel .rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{width:182%}.block-editor .rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{max-width:268px}.rank-math-primary-term-picker{margin:20px 0 0;padding:16px 0;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker .components-base-control{width:100%}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media(min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media(min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:hsl(210,5.7851239669%,37.5490196078%);border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:"";background:#069de3;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.rank-math-sidebar-panel .components-panel__body,.rank-math-sidebar-panel .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.rank-math-sidebar-panel .components-panel__body .button,.rank-math-sidebar-panel .components-panel__body .button-secondary,.rank-math-sidebar-panel .components-panel__body .is-secondary,.rank-math-sidebar-panel .components-modal__content .button,.rank-math-sidebar-panel .components-modal__content .button-secondary,.rank-math-sidebar-panel .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button.active,.rank-math-sidebar-panel .components-panel__body .button-secondary.active,.rank-math-sidebar-panel .components-panel__body .is-secondary.active,.rank-math-sidebar-panel .components-modal__content .button.active,.rank-math-sidebar-panel .components-modal__content .button-secondary.active,.rank-math-sidebar-panel .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:hsl(210,5.7851239669%,40.5490196078%);border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.rank-math-sidebar-panel .components-panel__body .button:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .button:focus:not(:disabled),.rank-math-modal .components-panel__body .button:hover:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .button:focus:not(:disabled),.rank-math-modal .components-modal__content .button:hover:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:hover:not(:disabled){color:#069de3;border-color:#069de3;background:#f8f9fa}.rank-math-sidebar-panel .components-panel__body .button:focus,.rank-math-sidebar-panel .components-panel__body .button-secondary:focus,.rank-math-sidebar-panel .components-panel__body .is-secondary:focus,.rank-math-sidebar-panel .components-modal__content .button:focus,.rank-math-sidebar-panel .components-modal__content .button-secondary:focus,.rank-math-sidebar-panel .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-sidebar-panel .components-panel__body .button .dashicons,.rank-math-sidebar-panel .components-panel__body .button-secondary .dashicons,.rank-math-sidebar-panel .components-panel__body .is-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .button .dashicons,.rank-math-sidebar-panel .components-modal__content .button-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.rank-math-sidebar-panel .components-panel__body .button.disabled,.rank-math-sidebar-panel .components-panel__body .button-secondary.disabled,.rank-math-sidebar-panel .components-panel__body .is-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .button.disabled,.rank-math-sidebar-panel .components-modal__content .button-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.rank-math-sidebar-panel .components-panel__body .button-primary,.rank-math-sidebar-panel .components-panel__body .is-primary,.rank-math-sidebar-panel .components-modal__content .button-primary,.rank-math-sidebar-panel .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none;border-radius:3px}.rank-math-sidebar-panel .components-panel__body .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .button-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .button-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-primary:hover:not(:disabled){color:#fff;border-color:#08a7f1;background:#08a7f1}.rank-math-sidebar-panel .components-panel__body .button-primary:focus,.rank-math-sidebar-panel .components-panel__body .is-primary:focus,.rank-math-sidebar-panel .components-modal__content .button-primary:focus,.rank-math-sidebar-panel .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-sidebar-panel .components-panel__body .button-primary[disabled],.rank-math-sidebar-panel .components-panel__body .is-primary[disabled],.rank-math-sidebar-panel .components-modal__content .button-primary[disabled],.rank-math-sidebar-panel .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important;color:rgb(159.0364806867,222.8712446352,252.4635193133) !important}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default),.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:rgb(56.5071428571,126.0357142857,217.9928571429);background:rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default),.rank-math-sidebar-panel .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10ac84;background:#10ac84}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:rgb(14.6978723404,158.0021276596,121.2574468085);background:rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default),.rank-math-sidebar-panel .components-modal__content .is-red:not(.default),.rank-math-modal .components-panel__body .is-red:not(.default),.rank-math-modal .components-modal__content .is-red:not(.default){border-color:#ed5e5e;background:#ed5e5e}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):hover,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):hover,.rank-math-modal .components-modal__content .is-red:not(.default):focus{border-color:hsl(0,79.8882681564%,61.9019607843%);background:hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%);box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .button-link-delete,.rank-math-sidebar-panel .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .button-link-delete:hover,.rank-math-sidebar-panel .components-panel__body .button-link-delete:focus,.rank-math-sidebar-panel .components-modal__content .button-link-delete:hover,.rank-math-sidebar-panel .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.rank-math-sidebar-panel .components-panel__body .button-link,.rank-math-sidebar-panel .components-panel__body .is-link,.rank-math-sidebar-panel .components-modal__content .button-link,.rank-math-sidebar-panel .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button-small,.rank-math-sidebar-panel .components-panel__body .is-small,.rank-math-sidebar-panel .components-modal__content .button-small,.rank-math-sidebar-panel .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.rank-math-sidebar-panel .components-panel__body .button-xlarge,.rank-math-sidebar-panel .components-panel__body .is-large,.rank-math-sidebar-panel .components-modal__content .button-xlarge,.rank-math-sidebar-panel .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.rank-math-sidebar-panel .components-panel__body .button-animated,.rank-math-sidebar-panel .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.rank-math-sidebar-panel .components-panel__body .button-animated i,.rank-math-sidebar-panel .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.rank-math-sidebar-panel .components-panel__body .button-animated:before,.rank-math-sidebar-panel .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:"";-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon:hover,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}.rank-math-sidebar-panel .components-panel__body .rank-math-highlight-button,.rank-math-sidebar-panel .components-modal__content .rank-math-highlight-button,.rank-math-modal .components-panel__body .rank-math-highlight-button,.rank-math-modal .components-modal__content .rank-math-highlight-button{padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-sidebar-panel .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.rank-math-sidebar-panel .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media(min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:14px;height:14px;margin-right:5px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id="1-review"]{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:"";-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked~.rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type=text].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items{gap:4px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]{padding:0;background:rgba(0,0,0,0);width:auto;min-width:80px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover{background:rgba(0,0,0,0)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled){-webkit-box-shadow:none;box-shadow:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score{font-size:12px;font-weight:600;position:relative}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk{color:rgb(227.9533898305,36.5466101695,103.1228813559);border-color:rgb(227.9533898305,36.5466101695,103.1228813559);background:rgb(252.113559322,231.686440678,238.7915254237)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk{color:rgb(179.1666666667,110.5714285714,14.3333333333);border-color:rgb(179.1666666667,110.5714285714,14.3333333333);background:hsl(35.0310559006,85.1851851852%,92.9411764706%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk{color:hsl(163.3846153846,61.320754717%,36.568627451%);border-color:hsl(163.3846153846,61.320754717%,36.568627451%);background:hsl(163.3846153846,61.320754717%,91.568627451%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score{padding:10px 5px 8px 3px;color:#212f3e;border:1px solid hsl(210,15.625%,69.9019607843%);border-radius:2px;background:#dadfe4;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon{font-size:15px;float:left;height:15px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target{font-size:15px;font-weight:600}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score{font-size:12px;font-weight:600;display:inline-block}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading{pointer-events:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk{color:#e12925;border-color:#e12925;background:#fce5e2}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk{color:#b36f0e;border-color:#b36f0e;background:rgb(255,233.4,193.8)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk{color:#439f40;border-color:#439f40;background:#e3f4e3}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score{color:#fff;background:#b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk{background:hsl(1.2765957447,75.8064516129%,71.3725490196%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk{background:orange}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk{border-color:rgb(66.3911290323,158.8004032258,63.6995967742);background:rgb(106.9596774194,194.5927419355,104.4072580645)}.components-menu-group .rank-math-toolbar-score .seo-score,.components-menu-group .rank-math-toolbar-score .content-ai-score{display:none}.components-menu-group .rank-math-toolbar-score i{font-size:1.25rem}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:"dashicons";font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:"ï…•";text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:hsl(3.9130434783,77.9661016949%,71.862745098%);background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#f29c96 !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,65.9661016949%,68.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,62.9661016949%,64.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,69.9661016949%,88.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,72.9661016949%,84.862745098%)}.rank-math-focus-keyword .tagify__tag.ok-fk{color:rgb(255,158.921875,18.5);background:rgb(255,235.58125,207.2)}.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:rgb(255,235.58125,207.2) !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#ffbe5f !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:rgb(242.952,171.166,66.248)}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:rgb(238.41,162.026875,50.39)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:rgb(251.048,214.1215,160.152)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:hsl(35.625,95%,75.6274509804%)}.rank-math-focus-keyword .tagify__tag.good-fk{color:hsl(120,42.5531914894%,58.137254902%);background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(120,42.5531914894%,91.137254902%) !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#79c979 !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(120,30.5531914894%,55.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:hsl(120,27.5531914894%,51.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:hsl(120,37.5531914894%,78.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:hsl(120,37.5531914894%,71.137254902%)}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"ïŒµ"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{content:attr(data-placeholder);-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:1;-webkit-transform:none;transform:none;color:rgba(0,0,0,.25);color:var(--placeholder-color-focus);height:1em;line-height:1em;margin:auto 0;white-space:nowrap;pointer-events:none}.rank-math-focus-keyword .tagify__input:after{content:attr(data-suggest);display:inline-block;vertical-align:middle;position:absolute;min-width:calc(100% - 1.5em);text-overflow:ellipsis;overflow:hidden;white-space:pre;color:var(--tag-text-color);opacity:.3;pointer-events:none;max-width:100px}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px);transition:.2s ease-out;opacity:0;-webkit-transform:translateX(6px);transform:translateX(6px);min-width:0px;display:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.rank-math-focus-keyword .tagify.tagify--noTags.tagify--empty span{width:100%}.tagify__dropdown{position:absolute;z-index:99999999;background:#fff;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,.18);box-shadow:0 9px 18px 0 rgba(25,30,35,.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent{-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:6px 8px 6px 12px;margin-left:8px;margin-right:2px;border-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:-2px;left:-8px;width:16px;height:16px;color:rgba(0,0,0,.4) !important;background:#fff !important;-webkit-box-shadow:0px 1px 3px rgba(0,0,0,.15);box-shadow:0px 1px 3px rgba(0,0,0,.15);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn:hover{color:#d9655d !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type{padding-right:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type>div{margin-right:6px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container{display:-webkit-box;display:-ms-flexbox;display:flex;border-top-right-radius:20px;border-bottom-right-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:3px;width:22px;padding-left:3px;border:0;border-radius:16px;color:#fff;font-size:12px;font-weight:500;line-height:14px;z-index:10;overflow:hidden;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover{width:-webkit-max-content;width:-moz-max-content;width:max-content;padding-right:7px;padding-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover .intent{visibility:visible}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .icon::before{font-size:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .intent{font-size:11px;font-weight:400;visibility:hidden}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{height:18px;color:rgba(0,0,0,.4);background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent:hover{color:rgba(0,0,0,.7)}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent{padding-right:27px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container{position:absolute;right:4px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after,.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{content:"";display:block}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{width:30px;-webkit-mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));-webkit-mask-image:linear-gradient(to right, transparent, #000);mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));mask-image:linear-gradient(to right, transparent, #000);z-index:5}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after{position:absolute;inset:0;left:30px;z-index:1;border-top-right-radius:16px;border-bottom-right-radius:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{height:100%}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:"ïŒµ";text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:"ï…‡";background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:rgb(255,163.3333333333,95);-webkit-box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95);box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95)}.rank-math-checklist li .rank-math-help-icon{margin:0 !important}.rank-math-checklist li .rank-math-ai-button.is-link{gap:3px;padding:4px 5px;margin-left:4px;border-radius:3px;color:#b34a91;background:rgba(179,74,145,.1);font-size:12px;-webkit-transition:.2s all ease-in-out;transition:.2s all ease-in-out}.rank-math-checklist li .rank-math-ai-button.is-link:hover{background:rgba(179,74,145,.17)}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:5px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:"ïŒµ";margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:"ï…‡"}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:"!";text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{margin-left:5px}.suggestion-item button.suggestion-title{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:left;background:none;border:0;padding:0;cursor:default;vertical-align:sub}.suggestion-item button.suggestion-title a{vertical-align:sub}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:"ï…€" !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease,padding .2s ease,margin .2s ease;transition:width .2s ease,padding .2s ease,margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial,sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:rgba(0,0,0,0)}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid rgba(0,0,0,0);border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,.16);box-shadow:0 2px 5px 1px rgba(64,60,67,.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:gray;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media(min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:"Â·"}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:"Â·"}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px #fff}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:rgba(0,0,0,0) !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial,sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id="1-review"]{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#f44336;-webkit-transition:.25s all linear;transition:.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type=text],.rank-math-editor .field-group input[type=url],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type=text]:hover,.rank-math-editor .field-group input[type=url]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type=text]:focus,.rank-math-editor .field-group input[type=url]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:rgba(0,0,0,0);-webkit-box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1);box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .components-tab-panel__tabs>button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, rgb(255, 233, 25) 0%, rgb(251, 192, 0) 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:"";background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink .6s;animation:blink .6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink .8s;animation:wink .8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-post-publish .rank-math-social-share-buttons,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu,.rank-math-post-publish .rank-math-social-share-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}.rank-math-tabs>.components-tab-panel__tabs{background:#f8f9fa;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1),inset 0px 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1),inset 0px 1px 1px rgba(0,0,0,.1)}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){height:34px;font-size:11px;line-height:17px;text-transform:uppercase;-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:#f6e7ee;-webkit-box-shadow:0 0 0 4px #f6e7ee;box-shadow:0 0 0 4px #f6e7ee}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{color:#d30c5c;font-weight:normal}.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after,.rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover:after{display:none}.rank-math-tabs>.components-tab-panel__tab-content>div>div:first-child{border-top:0;border-bottom:0}.rank-math-tabs>.components-tab-panel__tab-content select,.rank-math-tabs>.components-tab-panel__tab-content input[type=text]{min-height:30px}.rank-math-tabs>.components-tab-panel__tab-content textarea{line-height:1.42857143;font-family:inherit}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-focus-keyword{background:#fff}.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-advanced>.components-panel__body,.rank-math-tabs>.components-tab-panel__tab-content .rank-math-tab-content-schema>.components-panel__body{background:#fff}.rank-math-tabs .components-panel__body{padding:15px 10px;margin-bottom:10px}.rank-math-tabs .components-panel__body-title{margin:-16px}.rank-math-tabs .components-panel__body-title button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){color:#6d7882}.rank-math-tabs .components-panel__body-title:hover{background:rgba(0,0,0,0) !important}.rank-math-tabs .components-panel__body-toggle.components-button{color:#6d7882;padding:10px 15px}.rank-math-tabs .components-panel__body .rank-math-ca-credits{top:auto;margin-top:5px;right:15px}.rank-math-tabs .rank-math-datepicker>button{color:inherit}.serp-preview{padding:10px;border-radius:5px}.components-tab-panel__tab-content .rank-math-tab-content-general>div:first-child{background:rgba(0,0,0,0);padding:0 10px 5px}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title .seo-score{display:block}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title:before{font-weight:500}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-result{position:absolute;top:-1px;left:0}.rank-math-tooltip label{cursor:pointer}.rank-math-tooltip label:before{height:21px;vertical-align:middle}.rank-math-tooltip label:hover{color:#d30c5c}.rank-math-tooltip input:checked+label{color:#d30c5c}.rank-math-modal{max-height:763px;border-radius:3px}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:13px;text-transform:none;height:44px}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{display:block;background:#d30c5c}.rank-math-modal .serp-preview-title:before{font-weight:500}.rank-math-modal .rank-math-button-devices .components-button.active,.rank-math-modal .rank-math-button-devices .components-button:hover{background:#f6e7ee !important}.rank-math-sidebar-panel .rank-math-tabs .rank-math-content-ai-wrapper.is-opened{padding-top:25px !important}.rank-math-sidebar-panel .rank-math-tabs .rank-math-content-ai-wrapper.is-opened .rank-math-ca-credits{margin-top:-21px}PK     ¥ŠU]d:{"±  ±  1  includes/3rdparty/loco/class-loco-i18n-inline.phpnu „[µü¤        <?php
/**
 * Loco Translate inline i18n helper for injecting translations without JSON files.
 *
 * @since      1.0.256
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\ThirdParty\Loco;

use RankMath\Traits\Hooker;
use RankMath\Helper;
use RankMath\Helpers\Str;

defined( 'ABSPATH' ) || exit;

/**
 * Loco_I18n_Inline class.
 */
class Loco_I18n_Inline {

	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'rank-math/admin_enqueue_scripts', 'inject_settings_locale' );
	}

	/**
	 * Inject inline JED locale for settings screens when Loco is active.
	 */
	public function inject_settings_locale() {
		// Load translations from all Loco locations (Customization, System, Author).
		$json = $this->get_jed_json( 'rank-math', false );
		if ( empty( $json ) ) {
			return;
		}

		$inline = sprintf(
			'try{if(window.wp&&wp.i18n&&wp.i18n.setLocaleData){wp.i18n.setLocaleData(%s,"rank-math");var __rm=wp.i18n.getLocaleData&&wp.i18n.getLocaleData("rank-math");if(__rm){wp.i18n.setLocaleData(__rm,"seo-by-rank-math");}}}catch(e){}',
			$json
		);

		wp_add_inline_script( 'common', $inline, 'before' );
	}

	/**
	 * Build a JED locale JSON from the best available MO/PO for the current locale.
	 *
	 * @param string $domain    Text domain (e.g. 'rank-math').
	 * @param bool   $loco_only Whether to restrict to Loco-managed files only.
	 * @return string JSON string suitable for wp.i18n.setLocaleData(), or empty string.
	 */
	private function get_jed_json( $domain, $loco_only = true ) {
		$locale = get_user_locale();

		$file = $this->find_translation_file( $domain, $locale, $loco_only );
		if ( ! $file ) {
			return '';
		}

		return $this->build_jed_json( $file, $domain, $locale );
	}

	/**
	 * Build JED JSON from translation file.
	 *
	 * @param string $file   Path to MO or PO file.
	 * @param string $domain Text domain.
	 * @param string $locale Locale.
	 * @return string JSON string or false.
	 */
	private function build_jed_json( $file, $domain, $locale ) {
		require_once ABSPATH . WPINC . '/pomo/mo.php';
		require_once ABSPATH . WPINC . '/pomo/po.php';

		$translations = Str::ends_with( '.mo', $file ) ? new \MO() : new \PO();
		if ( ! $translations->import_from_file( $file ) ) {
			return false;
		}

		$data = [
			'' => [
				'domain' => $domain,
				'lang'   => $locale,
			],
		];

		if ( ! empty( $translations->headers['plural-forms'] ) ) {
			$data['']['plural-forms'] = $translations->headers['plural-forms'];
		}

		foreach ( $translations->entries as $entry ) {
			if ( empty( $entry->translations ) ) {
				continue;
			}
			$key          = empty( $entry->context ) ? $entry->singular : $entry->context . "\004" . $entry->singular;
			$data[ $key ] = $entry->translations;
		}

		return wp_json_encode( $data );
	}

	/**
	 * Find translation file for domain/locale.
	 *
	 * @param string $domain    Text domain.
	 * @param string $locale    Locale.
	 * @param bool   $loco_only Restrict to Loco files only.
	 * @return string|false File path or false.
	 */
	private function find_translation_file( $domain, $locale, $loco_only ) {
		$paths = [];

		// 1) Loco "Customization" location.
		$paths[] = WP_CONTENT_DIR . '/languages/loco/plugins/' . $domain . '-' . $locale . '.mo';
		$paths[] = WP_CONTENT_DIR . '/languages/loco/plugins/' . $domain . '-' . $locale . '.po';

		// 2) Loco "System" location (global WP languages dir).
		if ( ! $loco_only ) {
			$paths[] = WP_LANG_DIR . '/plugins/' . $domain . '-' . $locale . '.mo';
			$paths[] = WP_LANG_DIR . '/plugins/' . $domain . '-' . $locale . '.po';
		}

		// 3) Loco "Author" location (plugin bundled languages directory).
		$paths[] = RANK_MATH_PATH . 'languages/' . $domain . '-' . $locale . '.mo';
		$paths[] = RANK_MATH_PATH . 'languages/' . $domain . '-' . $locale . '.po';

		foreach ( $paths as $path ) {
			if ( is_file( $path ) && is_readable( $path ) ) {
				return $path;
			}
		}

		return false;
	}
}
PK     ¥ŠU]Á”šGŸ' Ÿ' (  includes/3rdparty/divi/assets/js/divi.jsnu „[µü¤        !function(){var t={6942:function(t,e){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=o(t,i(r)))}return t}function i(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return a.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var e="";for(var r in t)n.call(t,r)&&t[r]&&(e=o(e,r));return e}function o(t,e){return e?t?t+" "+e:t+e:t}t.exports?(a.default=a,t.exports=a):void 0===(r=function(){return a}.apply(e,[]))||(t.exports=r)}()}},e={};function r(n){var a=e[n];if(void 0!==a)return a.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.dn=function(t){(Object.getOwnPropertyDescriptor(t,"name")||{}).writable||Object.defineProperty(t,"name",{value:"default",configurable:!0})},function(){"use strict";var t={};r.r(t),r.d(t,{deleteSchema:function(){return Ie},lockModifiedDate:function(){return z},refreshResults:function(){return ue},resetDirtyMetadata:function(){return G},resetRedirection:function(){return ot},resetStore:function(){return H},saveSchema:function(){return Pe},saveTemplate:function(){return Ee},schemaUpdated:function(){return ve},setEditingSchemaId:function(){return we},setEditorTab:function(){return ke},setTemplateTab:function(){return Se},setVersion:function(){return ce},toggleFrontendScore:function(){return U},toggleIsDiviPageSettingsBarActive:function(){return se},toggleIsDiviRankMathModalActive:function(){return le},toggleLoaded:function(){return ae},toggleSchemaEditor:function(){return ye},toggleSchemaTemplates:function(){return be},toggleSnippetEditor:function(){return jt},updateAIScore:function(){return Oe},updateAdvancedRobots:function(){return $},updateAnalysisScore:function(){return F},updateAppData:function(){return R},updateAppUi:function(){return C},updateBreadcrumbTitle:function(){return K},updateCanonicalUrl:function(){return N},updateDescription:function(){return et},updateEditSchema:function(){return De},updateEditSchemas:function(){return _e},updateFacebookDescription:function(){return W},updateFacebookHasOverlay:function(){return Y},updateFacebookImage:function(){return q},updateFacebookImageID:function(){return Q},updateFacebookImageOverlay:function(){return J},updateFacebookTitle:function(){return V},updateFeaturedImage:function(){return rt},updateHasRedirect:function(){return ut},updateHighlightedParagraphs:function(){return pe},updateKeywords:function(){return B},updatePermalink:function(){return Z},updatePillarContent:function(){return x},updatePostID:function(){return X},updatePrimaryTermID:function(){return nt},updateRedirection:function(){return at},updateRedirectionItem:function(){return it},updateRobots:function(){return L},updateSchemas:function(){return Te},updateSelectedKeyword:function(){return ie},updateSerpDescription:function(){return Mt},updateSerpSlug:function(){return At},updateSerpTitle:function(){return Ot},updateSnippetPreviewType:function(){return Rt},updateSocialTab:function(){return oe},updateTitle:function(){return tt},updateTwitterAppCountry:function(){return ne},updateTwitterAppDescription:function(){return Wt},updateTwitterAppGoogleplayID:function(){return te},updateTwitterAppGoogleplayName:function(){return ee},updateTwitterAppGoogleplayUrl:function(){return re},updateTwitterAppIpadID:function(){return Jt},updateTwitterAppIpadName:function(){return Xt},updateTwitterAppIpadUrl:function(){return Zt},updateTwitterAppIphoneID:function(){return qt},updateTwitterAppIphoneName:function(){return Qt},updateTwitterAppIphoneUrl:function(){return Yt},updateTwitterAuthor:function(){return Ft},updateTwitterCardType:function(){return Bt},updateTwitterDescription:function(){return Ut},updateTwitterHasOverlay:function(){return Lt},updateTwitterImage:function(){return $t},updateTwitterImageID:function(){return Nt},updateTwitterImageOverlay:function(){return Kt},updateTwitterPlayerSize:function(){return Gt},updateTwitterPlayerStreamCtype:function(){return Vt},updateTwitterPlayerStreamUrl:function(){return Ht},updateTwitterPlayerUrl:function(){return zt},updateTwitterTitle:function(){return xt},updateTwitterUseFacebook:function(){return Ct}});var e={};r.r(e),r.d(e,{appData:function(){return Be},appUi:function(){return Le}});var n={};r.r(n),r.d(n,{getAdvancedRobots:function(){return qe},getAnalysisScore:function(){return Ge},getAppData:function(){return Ke},getBreadcrumbTitle:function(){return Ye},getCanonicalUrl:function(){return Qe},getDescription:function(){return br},getDirtyMetadata:function(){return ze},getEditSchemas:function(){return Ur},getEditingSchema:function(){return Fr},getEditorTab:function(){return $r},getFacebookAuthor:function(){return lr},getFacebookDescription:function(){return sr},getFacebookHasOverlay:function(){return mr},getFacebookImage:function(){return fr},getFacebookImageID:function(){return pr},getFacebookImageOverlay:function(){return dr},getFacebookTitle:function(){return cr},getFeaturedImage:function(){return vr},getFeaturedImageHtml:function(){return wr},getHighlightedParagraphs:function(){return ur},getKeywords:function(){return He},getPermalink:function(){return yr},getPillarContent:function(){return Ve},getPostID:function(){return hr},getPreviewSchema:function(){return Nr},getPrimaryTermID:function(){return kr},getRedirectionID:function(){return Sr},getRedirectionItem:function(){return Dr},getRedirectionType:function(){return _r},getRedirectionUrl:function(){return Tr},getRichSnippets:function(){return Je},getRobots:function(){return We},getSchemas:function(){return xr},getSelectedKeyword:function(){return er},getSerpDescription:function(){return Ar},getSerpSlug:function(){return Or},getSerpTitle:function(){return Er},getShowScoreFrontend:function(){return Xe},getSnippetPreviewType:function(){return jr},getSocialTab:function(){return rr},getTemplateTab:function(){return Lr},getTitle:function(){return gr},getTwitterAppCountry:function(){return cn},getTwitterAppDescription:function(){return Jr},getTwitterAppGoogleplayID:function(){return an},getTwitterAppGoogleplayName:function(){return on},getTwitterAppGoogleplayUrl:function(){return un},getTwitterAppIpadID:function(){return en},getTwitterAppIpadName:function(){return rn},getTwitterAppIpadUrl:function(){return nn},getTwitterAppIphoneID:function(){return Xr},getTwitterAppIphoneName:function(){return Zr},getTwitterAppIphoneUrl:function(){return tn},getTwitterAuthor:function(){return Vr},getTwitterCardType:function(){return zr},getTwitterDescription:function(){return Hr},getTwitterHasOverlay:function(){return Qr},getTwitterImage:function(){return qr},getTwitterImageID:function(){return Wr},getTwitterImageOverlay:function(){return Yr},getTwitterPlayerSize:function(){return ln},getTwitterPlayerStream:function(){return pn},getTwitterPlayerStreamCtype:function(){return fn},getTwitterPlayerUrl:function(){return sn},getTwitterTitle:function(){return Gr},getTwitterUseFacebook:function(){return Kr},hasRedirect:function(){return Pr},hasSchemaUpdated:function(){return Br},isDiviPageSettingsBarActive:function(){return ir},isDiviRankMathModalActive:function(){return or},isLoaded:function(){return tr},isModifiedDateLocked:function(){return Ze},isPro:function(){return ar},isRefreshing:function(){return nr},isSchemaEditorOpen:function(){return Rr},isSchemaTemplatesOpen:function(){return Cr},isSnippetEditorOpen:function(){return Mr}});const a=jQuery;var i=r.n(a);const o=wp.apiFetch;var u=r.n(o);const c=wp.data,s=wp.mediaUtils,l=wp.element,p=wp.hooks,f=wp.components;var m=(0,f.createSlotFill)("RankMathAfterEditor"),d=m.Fill,h=m.Slot,g=function(t){var e=t.children,r=t.className;return wp.element.createElement(d,null,wp.element.createElement(f.PanelRow,{className:r},e))};g.Slot=h;const y=g;var b=(0,f.createSlotFill)("RankMathAdvancedTab"),v=b.Fill,w=b.Slot,k=function(t){var e=t.children,r=t.className;return wp.element.createElement(v,null,wp.element.createElement(f.PanelRow,{className:r},e))};k.Slot=w;const S=k;var _=(0,f.createSlotFill)("RankMathAfterFocusKeyword"),T=_.Fill,D=_.Slot,P=function(t){var e=t.children,r=t.className;return wp.element.createElement(T,null,wp.element.createElement("div",{className:r},e))};P.Slot=D;const I=P,E=rankMathAnalyzer;function O(t){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},O(t)}function A(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,M(n.key),n)}}function M(t){var e=function(t,e){if("object"!=O(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==O(e)?e:e+""}var j=new(function(){return t=function t(){var e,r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,n=null,(r=M(r="map"))in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n},(e=[{key:"swap",value:function(t,e){var r=this;if(!(t=t||""))return"";var n=new RegExp(/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/,"giu");return t.replace(" %page%","").replace("%sep% %sep%","%sep%").replace(n,function(t){return r.replace(e,t)}).trim()}},{key:"replace",value:function(t,e){var r=e.toLowerCase().slice(1,-1);if(["term_description","user_description"].includes(r)){var n="term_description"===r?"#rank_math_description_editor":"#description";return"undefined"!=typeof tinymce&&void 0!==tinymce.editors.rank_math_description_editor?tinymce.editors.rank_math_description_editor.getContent():i()(n).val()}return r.includes("customfield(")?(r=r.replace("customfield(","").replace(")",""))in rankMath.customFields?rankMath.customFields[r]:"":(t=t||this.getMap(),(r="seo_description"===(r="seo_title"===(r=r.includes("(")?r.split("(")[0]:r)?"title":r)?"excerpt":r)in t?t[r]:"")}},{key:"getMap",value:function(){var t=this;return null!==this.map||(this.map={},i().each(rankMath.variables,function(e,r){e=e.toLowerCase().replace(/%+/g,"").split("(")[0],t.map[e]=r.example})),this.map}},{key:"setVariable",value:function(t,e){null!==this.map?this.map[t]=e:void 0!==rankMath.variables[t]&&(rankMath.variables[t].example=e)}}])&&A(t.prototype,e),r&&A(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}());function R(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return e=(0,p.applyFilters)("rank_math_sanitize_data",e,t,r),null!==n&&(n=(0,p.applyFilters)("rank_math_sanitize_meta_value",n,t,r)),n=null===n?e:n,(0,p.doAction)("rank_math_data_changed",t,e,r),{type:"RANK_MATH_APP_DATA",key:t,value:e,metaKey:r,metaValue:n}}function C(t,e){return(0,p.doAction)("rank_math_update_app_ui",t,e),{type:"RANK_MATH_APP_UI",key:t,value:e}}function B(t){return j.setVariable("focuskw",t.split(",")[0]),rankMathEditor.refresh("keyword"),R("keywords",t,"rank_math_focus_keyword")}function x(t){return R("pillarContent",t,"rank_math_pillar_content",!0===t?"on":"off")}function U(t){return R("showScoreFrontend",t,"rank_math_dont_show_seo_score",!0===t?"off":"on")}function F(t){return R("score",t,"rank_math_seo_score")}function N(t){return R("canonicalUrl",t,"rank_math_canonical_url")}function $(t){return R("advancedRobots",t,"rank_math_advanced_robots")}function L(t){return R("robots",t,"rank_math_robots",Object.keys(t))}function K(t){return R("breadcrumbTitle",t,"rank_math_breadcrumb_title")}function z(t){return R("lockModifiedDate",t,"rank_math_lock_modified_date")}function G(){return R("dirtyMetadata",{})}function H(t){return{type:"RESET_STORE",value:t}}function V(t){return R("facebookTitle",t,"rank_math_facebook_title")}function W(t){return R("facebookDescription",t,"rank_math_facebook_description")}function q(t){return R("facebookImage",t,"rank_math_facebook_image")}function Q(t){return R("facebookImageID",t,"rank_math_facebook_image_id")}function Y(t){return R("facebookHasOverlay",t,"rank_math_facebook_enable_image_overlay",!0===t?"on":"off")}function J(t){return R("facebookImageOverlay",t,"rank_math_facebook_image_overlay")}function X(t){return rankMath.objectID=t,R("postID",t)}function Z(t){return R("permalink",t,"permalink")}function tt(t){return R("title",t,"rank_math_title")}function et(t){return R("description",t,"rank_math_description")}function rt(t){return R("featuredImage",t)}function nt(t,e){return R("primaryTerm",parseInt(t),"rank_math_primary_"+e)}function at(t,e){return R(t,e)}function it(t){return C("redirectionItem",t)}function ot(){return C("redirectionItem",{})}function ut(t){return C("hasRedirect",t)}const ct=lodash,st=function(t){return t.replace(/<\/?[a-z][^>]*?>/gi,"")};r.dn(st);const lt=function(t){return t.replace(/<style[^>]*>([\S\s]*?)<\/style>/gim,"")};r.dn(lt);const pt=function(t){return t.replace(/&nbsp;|&#160;/gi," ").replace(/\s{2,}/g," ").replace(/\s\./g,".").replace(/^\s+|\s+$/g,"")};r.dn(pt);const ft=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,e)};r.dn(ft);const mt=function(t){return t.replace(/[â€˜â€™â€›`]/g,"'").replace(/[â€œâ€�ã€�ã€žã€Ÿâ€Ÿâ€ž]/g,'"')};r.dn(mt);const dt=function(t){return t.replace(/<!--[\s\S]*?-->/g,"")};r.dn(dt);const ht=function(t){return t.replace(/&\S+?;/g,"")};function gt(t){return(0,ct.isUndefined)(t)||!t?"":(0,ct.flow)([lt,ft,st,dt,ht,pt,mt])(t)}r.dn(ht);const yt=wp.autop;var bt="[^<>&/\\[\\]\0- =]+?",vt=new RegExp("\\["+bt+"( [^\\]]+?)?\\]","g"),wt=new RegExp("\\[/"+bt+"\\]","g");const kt=function(t){return t.replace(vt,"").replace(wt,"")};r.dn(kt);const St=function(t,e){var r=function(t,e){for(var r,n=/<p(?:[^>]+)?>(.*?)<\/p>/gi,a=[];null!==(r=n.exec(t));)a.push(r);return(0,ct.map)(a,function(t){return e?gt(t[1]):t[1]})}(t=(0,ct.flow)([kt,dt,yt.autop])(t),e=e||!1);return 0<r.length?r:[e?gt(t):t]};r.dn(St),r.dn(Tt);var _t=document.createElement("div");function Tt(t){return t&&"string"==typeof t&&(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"").replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),_t.innerHTML=t,t=_t.textContent,_t.textContent=""),t}r.dn(Et);var Dt=function(t,e){return t=(t=gt(t)).replace(/\r?\n|\r/g," "),e?(0,ct.truncate)(t,{length:e,separator:" "}):t},Pt=function(t){if((0,ct.isEmpty)(t))return"";t=ft(t),t=lt(t),t=(0,ct.unescape)(t).replace(/\[caption[^\]]*\](.*)\[\/caption\]/g,"");var e=(0,ct.filter)(St(t,!0),function(t){return""!==t.trim()});if(!e.length)return"";var r=rankMathEditor.getPrimaryKeyword();if(""!==r){var n=(0,ct.filter)(e,function(t){return(0,ct.includes)(t.toLowerCase(),r.toLowerCase())});if(0<n.length)return Dt(n[0],160)}return Dt(e[0],160)},It=function(t){return!(0,ct.isUndefined)(t)&&!(0,ct.isEmpty)(t)&&gt(t)};function Et(t){var e=rankMathEditor.assessor.dataCollector.getData(),r=e.excerpt,n=Pt(e.content),a=(0,ct.isUndefined)(r)||(0,ct.isEmpty)(r)?n:(0,ct.unescape)(r);if(j.setVariable("excerpt",a),j.setVariable("seo_description",a),""!==(t=Tt((0,p.applyFilters)("rankMath/description",t))))return gt(t);var i=(0,ct.unescape)(rankMath.assessor.serpData.descriptionTemplate);return"term"===rankMath.objectType?It(i)||It(r)||n:It(r)||It(i)||n}function Ot(t){return t=j.swap(""!==t?t:rankMath.assessor.serpData.titleTemplate),rankMathEditor.refresh("title"),C("serpTitle",Tt(t))}function At(t){return t=""!==t?t:rankMathEditor.assessor.dataCollector.getSlug(),rankMathEditor.refresh("permalink"),C("serpSlug",t)}function Mt(t){return t=j.swap(Et(t)),rankMathEditor.refresh("description"),C("serpDescription",t)}function jt(t){return C("isSnippetEditorOpen",t)}function Rt(t){return C("snippetPreviewType",t)}function Ct(t){return R("twitterUseFacebook",t,"rank_math_twitter_use_facebook",!0===t?"on":"off")}function Bt(t){return R("twitterCardType",t,"rank_math_twitter_card_type")}function xt(t){return R("twitterTitle",t,"rank_math_twitter_title")}function Ut(t){return R("twitterDescription",t,"rank_math_twitter_description")}function Ft(t){return R("twitterAuthor",t,"rank_math_twitter_author")}function Nt(t){return R("twitterImageID",t,"rank_math_twitter_image_id")}function $t(t){return R("twitterImage",t,"rank_math_twitter_image")}function Lt(t){return R("twitterHasOverlay",t,"rank_math_twitter_enable_image_overlay",!0===t?"on":"off")}function Kt(t){return R("twitterImageOverlay",t,"rank_math_twitter_image_overlay")}function zt(t){return R("twitterPlayerUrl",t,"rank_math_twitter_player_url")}function Gt(t){return R("twitterPlayerSize",t,"rank_math_twitter_player_size")}function Ht(t){return R("twitterPlayerStream",t,"rank_math_twitter_player_stream")}function Vt(t){return R("twitterPlayerStreamCtype",t,"rank_math_twitter_player_stream_ctype")}function Wt(t){return R("twitterAppDescription",t,"rank_math_twitter_app_description")}function qt(t){return R("twitterAppIphoneID",t,"rank_math_twitter_app_iphone_id")}function Qt(t){return R("twitterAppIphoneName",t,"rank_math_twitter_app_iphone_name")}function Yt(t){return R("twitterAppIphoneUrl",t,"rank_math_twitter_app_iphone_url")}function Jt(t){return R("twitterAppIpadID",t,"rank_math_twitter_app_ipad_id")}function Xt(t){return R("twitterAppIpadName",t,"rank_math_twitter_app_ipad_name")}function Zt(t){return R("twitterAppIpadUrl",t,"rank_math_twitter_app_ipad_url")}function te(t){return R("twitterAppGoogleplayID",t,"rank_math_twitter_app_googleplay_id")}function ee(t){return R("twitterAppGoogleplayName",t,"rank_math_twitter_app_googleplay_name")}function re(t){return R("twitterAppGoogleplayUrl",t,"rank_math_twitter_app_googleplay_url")}function ne(t){return R("twitterAppCountry",t,"rank_math_twitter_app_country")}function ae(t){return C("isLoaded",t)}function ie(t){return C("selectedKeyword",t)}function oe(t){return C("socialTab",t)}function ue(){return C("refreshResults",Date.now())}function ce(){return C("isPro",!0)}function se(t){return C("isDiviPageSettingsBarActive",t)}function le(t){return C("isDiviRankMathModalActive",t)}function pe(t){return C("highlightedParagraphs",t)}const fe=wp.i18n;function me(t){return me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},me(t)}function de(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function he(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?de(Object(r),!0).forEach(function(e){ge(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):de(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function ge(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=me(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=me(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==me(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ye(t){return C("isSchemaEditorOpen",t)}function be(t){return C("isSchemaTemplatesOpen",t)}function ve(t){return C("schemaUpdated",t)}function we(t){return C("editingSchemaId",t)}function ke(t){return C("editorTab",t)}function Se(t){return C("templateTab",t)}function _e(t){return C("editSchemas",t)}function Te(t){return R("schemas",t)}function De(t,e){var r=he({},(0,c.select)("rank-math").getEditSchemas());return r[t]=e,C("editSchemas",r)}function Pe(t,e){var r=he({},(0,c.select)("rank-math").getSchemas());return r[t]=e,R("schemas",r)}function Ie(t){var e=he({},(0,c.select)("rank-math").getSchemas());return delete e[t],(0,p.doAction)("rank_math_schema_trash",t),R("schemas",e,"rank_math_delete_"+t,"")}function Ee(t,e,r){return u()({method:"POST",path:"rankmath/v1/saveTemplate",data:{schema:t,postId:r}}).then(function(r){e({loading:!1,showNotice:!0,postId:r.id}),setTimeout(function(){e({showNotice:!1}),(0,ct.get)(rankMath,"isTemplateScreen",!1)&&(document.title=(0,fe.__)("Edit Schema","seo-by-rank-math"),window.history.pushState(null,"",r.link.replace(/&amp;/g,"&")))},2e3),rankMath.schemaTemplates.push({schema:t,title:t.metadata.title,type:t["@type"]})}),e({loading:!0}),{type:"DONT_WANT_TO_DO_SOMETHING"}}function Oe(t){return R("contentAIScore",t,"rank_math_contentai_score",t)}function Ae(t){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ae(t)}function Me(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function je(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Me(Object(r),!0).forEach(function(e){Re(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Me(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Re(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Ae(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Ae(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Ae(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Ce=function(t){var e=t.assessor.serpData,r=t.assessor.hasRedirection;return{postID:null,title:e.title?e.title:e.titleTemplate,description:e.description,keywords:e.focusKeywords?e.focusKeywords:"",pillarContent:e.pillarContent,featuredImage:"",permalink:!1,primaryTerm:e.primaryTerm,robots:e.robots,advancedRobots:e.advancedRobots,canonicalUrl:e.canonicalUrl,breadcrumbTitle:e.breadcrumbTitle,showScoreFrontend:e.showScoreFrontend,lockModifiedDate:e.lockModifiedDate,redirectionID:r?(0,ct.get)(t.assessor,"redirection.id",""):"",redirectionType:r?(0,ct.get)(t.assessor,"redirection.header_code",""):"",redirectionUrl:r?(0,ct.get)(t.assessor,"redirection.url_to",""):"",facebookTitle:e.facebookTitle,facebookImage:e.facebookImage,facebookImageID:e.facebookImageID,facebookAuthor:e.facebookAuthor,facebookDescription:e.facebookDescription,facebookHasOverlay:e.facebookHasOverlay,facebookImageOverlay:e.facebookImageOverlay,twitterTitle:e.twitterTitle,twitterImage:e.twitterImage,twitterAuthor:e.twitterAuthor,twitterImageID:e.twitterImageID,twitterCardType:e.twitterCardType,twitterUseFacebook:e.twitterUseFacebook,twitterDescription:e.twitterDescription,twitterHasOverlay:e.twitterHasOverlay,twitterImageOverlay:e.twitterImageOverlay,twitterPlayerUrl:e.twitterPlayerUrl,twitterPlayerSize:e.twitterPlayerSize,twitterPlayerStream:e.twitterPlayerStream,twitterPlayerStreamCtype:e.twitterPlayerStreamCtype,twitterAppDescription:e.twitterAppDescription,twitterAppIphoneName:e.twitterAppIphoneName,twitterAppIphoneID:e.twitterAppIphoneID,twitterAppIphoneUrl:e.twitterAppIphoneUrl,twitterAppIpadName:e.twitterAppIpadName,twitterAppIpadID:e.twitterAppIpadID,twitterAppIpadUrl:e.twitterAppIpadUrl,twitterAppGoogleplayName:e.twitterAppGoogleplayName,twitterAppGoogleplayID:e.twitterAppGoogleplayID,twitterAppGoogleplayUrl:e.twitterAppGoogleplayUrl,twitterAppCountry:e.twitterAppCountry,schemas:(0,ct.get)(t,"schemas",{}),score:0,dirtyMetadata:{}}};function Be(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ce(rankMath),e=arguments.length>1?arguments[1]:void 0,r=je({},t.dirtyMetadata);return!1!==e.metaKey&&(r[e.metaKey]=e.metaValue),"RESET_STORE"===e.type?je({},Ce(e.value)):"RANK_MATH_APP_DATA"===e.type?"dirtyMetadata"===e.key?je(je({},t),{},{dirtyMetadata:e.value}):je(je({},t),{},Re(Re({},e.key,e.value),"dirtyMetadata",r)):t}function xe(t){return xe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xe(t)}function Ue(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function Fe(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Ue(Object(r),!0).forEach(function(e){Ne(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Ue(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Ne(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=xe(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=xe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==xe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var $e={isLoaded:!1,isPro:!1,selectedKeyword:{tag:"",index:0,data:{value:""}},hasRedirect:rankMath.assessor.hasRedirection&&!(0,ct.isEmpty)((0,ct.get)(rankMath.assessor,"redirection.id",""))&&!(0,ct.isEmpty)((0,ct.get)(rankMath.assessor,"redirection.url_to","")),serpTitle:"",serpSlug:"",serpDescription:(0,ct.get)(rankMath.assessor,"serpData.description",""),isSnippetEditorOpen:!1,snippetPreviewType:"",refreshResults:"",redirectionItem:{},socialTab:"facebook",highlightedParagraphs:[],editorTab:"",templateTab:"",editSchemas:{},editingSchemaId:"",isSchemaEditorOpen:!1,isSchemaTemplatesOpen:!1,schemaUpdated:!1,isDiviRankMathModalActive:!1,isDiviPageSettingsBarActive:!1};function Le(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$e,e=arguments.length>1?arguments[1]:void 0;return"RANK_MATH_APP_UI"===e.type?Fe(Fe({},t),{},Ne({},e.key,e.value)):t}function Ke(t){return t.appData}function ze(t){return t.appData.dirtyMetadata}function Ge(t){return t.appData.score}function He(t){return t.appData.keywords}function Ve(t){return t.appData.pillarContent}function We(t){return t.appData.robots}function qe(t){return t.appData.advancedRobots}function Qe(t){return t.appData.canonicalUrl}function Ye(t){return t.appData.breadcrumbTitle}function Je(t){return"todo"}function Xe(t){return t.appData.showScoreFrontend}function Ze(t){return t.appData.lockModifiedDate}function tr(t){return t.appUi.isLoaded}function er(t){return t.appUi.selectedKeyword}function rr(t){return t.appUi.socialTab}function nr(t){return t.appUi.refreshResults}function ar(t){return t.appUi.isPro}function ir(t){return t.appUi.isDiviPageSettingsBarActive}function or(t){return t.appUi.isDiviRankMathModalActive}function ur(t){return t.appUi.highlightedParagraphs}function cr(t){return t.appData.facebookTitle}function sr(t){return t.appData.facebookDescription}function lr(t){return t.appData.facebookAuthor}function pr(t){return t.appData.facebookImageID}function fr(t){return t.appData.facebookImage}function mr(t){return t.appData.facebookHasOverlay}function dr(t){return""!==t.appData.facebookImageOverlay?t.appData.facebookImageOverlay:"play"}function hr(t){return t.appData.postID}function gr(t){return t.appData.title}function yr(t){return t.appData.permalink}function br(t){return t.appData.description}function vr(t){return t.appData.featuredImage}function wr(t){var e=t.appData.featuredImage;return'<img src="'.concat(e.source_url,'" alt="').concat(e.alt_text,'" >')}function kr(t){return t.appData.primaryTerm}function Sr(t){return String(t.appData.redirectionID)}function _r(t){return t.appData.redirectionType}function Tr(t){return t.appData.redirectionUrl}function Dr(t){return t.appUi.redirectionItem}function Pr(t){return t.appUi.hasRedirect}const Ir=wp.url;function Er(t){return Tt(t.appUi.serpTitle)}function Or(t){return(0,Ir.safeDecodeURIComponent)(t.appUi.serpSlug)}function Ar(t){return t.appUi.serpDescription}function Mr(t){return t.appUi.isSnippetEditorOpen}function jr(t){return t.appUi.snippetPreviewType}function Rr(t){return t.appUi.isSchemaEditorOpen}function Cr(t){return t.appUi.isSchemaTemplatesOpen}function Br(t){return t.appUi.schemaUpdated}function xr(t){return t.appData.schemas}function Ur(t){return t.appUi.editSchemas}function Fr(t){return{id:t.appUi.editingSchemaId,data:t.appUi.editSchemas[t.appUi.editingSchemaId]}}function Nr(t){return t.appData.schemas[t.appUi.editingSchemaId]}function $r(t){return t.appUi.editorTab}function Lr(t){return t.appUi.templateTab}function Kr(t){return t.appData.twitterUseFacebook}function zr(t){return t.appData.twitterCardType}function Gr(t){return t.appData.twitterTitle}function Hr(t){return t.appData.twitterDescription}function Vr(t){return t.appData.twitterAuthor}function Wr(t){return t.appData.twitterImageID}function qr(t){return t.appData.twitterImage}function Qr(t){return t.appData.twitterHasOverlay}function Yr(t){return""!==t.appData.twitterImageOverlay?t.appData.twitterImageOverlay:"play"}function Jr(t){return t.appData.twitterAppDescription}function Xr(t){return t.appData.twitterAppIphoneID}function Zr(t){return t.appData.twitterAppIphoneName}function tn(t){return t.appData.twitterAppIphoneUrl}function en(t){return t.appData.twitterAppIpadID}function rn(t){return t.appData.twitterAppIpadName}function nn(t){return t.appData.twitterAppIpadUrl}function an(t){return t.appData.twitterAppGoogleplayID}function on(t){return t.appData.twitterAppGoogleplayName}function un(t){return t.appData.twitterAppGoogleplayUrl}function cn(t){return t.appData.twitterAppCountry}function sn(t){return t.appData.twitterPlayerUrl}function ln(t){return t.appData.twitterPlayerSize}function pn(t){return t.appData.twitterPlayerStream}function fn(t){return t.appData.twitterPlayerStreamCtype}var mn=(0,c.registerStore)("rank-math",{reducer:(0,c.combineReducers)(e),selectors:n,actions:t});function dn(){return mn}var hn={};(0,ct.isUndefined)(rankMath.assessor)||(0,ct.forEach)(rankMath.assessor.diacritics,function(t,e){return hn[e]=new RegExp(t,"g")});const gn=function(t){if((0,ct.isUndefined)(t))return t;for(var e in hn)t=t.replace(hn[e],e);return t};r.dn(gn);var yn={"&amp;":"&","&quot;":'"',"&#39;":"'"},bn=/&(?:amp|quot|#(0+)?39);/g,vn=RegExp(bn.source);const wn=function(t){return t&&vn.test(t)?t.replace(bn,function(t){return yn[t]||"'"}):t||""};function kn(t){return kn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kn(t)}function Sn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,_n(n.key),n)}}function _n(t){var e=function(t,e){if("object"!=kn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=kn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==kn(e)?e:e+""}var Tn=function(){return t=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.analyzer=new E.Analyzer({i18n:fe,analyses:rankMath.assessor.researchesTests}),this.dataCollector=e,this.registerRefresh(),this.updateKeywordResult=this.updateKeywordResult.bind(this),this.sanitizeData=this.sanitizeData.bind(this),(0,p.addAction)("rankMath_analysis_keywordUsage_updated","rank-math",this.updateKeywordResult),(0,p.addFilter)("rank_math_sanitize_meta_value","rank-math",this.sanitizeData),(0,p.addFilter)("rank_math_sanitize_data","rank-math",this.sanitizeData)},e=[{key:"updateKeywordResult",value:function(t,e){rankMathEditor.resultManager.update(t,{keywordNotUsed:e}),t===this.getSelectedKeyword().toLowerCase()&&(0,c.dispatch)("rank-math").refreshResults()}},{key:"sanitizeData",value:function(t,e){return"schemas"===e||(0,ct.isObject)(t)||(0,ct.isEmpty)(t)?t:(r=t,(0,ct.isUndefined)(r)?"":(0,ct.flow)([lt,ft,st,dt])(r));var r}},{key:"getPaper",value:function(t,e){var r=dn().getState(),n=this.dataCollector.getData(),a=new E.Paper("",{locale:rankMath.localeFull});a.setTitle(r.appUi.serpTitle),a.setPermalink(n.slug),a.setDescription(r.appUi.serpDescription),a.setUrl(n.permalink),a.setText(wn((0,p.applyFilters)("rank_math_content",n.content))),a.setKeyword(t),a.setKeywords(e),a.setSchema(r.appData.schemas),(0,ct.isUndefined)(n.featuredImage)||(a.setThumbnail(n.featuredImage.source_url),a.setThumbnailAltText(gn(n.featuredImage.alt_text)));var i=(0,c.select)("rank-math-content-ai");if(!(0,ct.isEmpty)(i)){var o=i.getData(),u=i.getScore();a.setContentAI(u||!(0,ct.isEmpty)(o.keyword))}return a}},{key:"registerRefresh",value:function(){var t=this;this.refresh=(0,ct.debounce)(function(e){var r=dn().getState();if(!1!==r.appUi.isLoaded){var n=r.appData.keywords.split(","),a=[];(0,p.doAction)("rank_math_"+e+"_refresh"),n.map(function(e,r){var i=t.getPaper(gn(e),n),o=0===r?rankMath.assessor.researchesTests:t.filterTests(t.getSecondaryKeywordTests());a.push(t.analyzer.analyzeSome(o,i).then(function(t){rankMathEditor.resultManager.update(i.getKeyword(),t,0===r),0===r&&(0,c.dispatch)("rank-math").updateAnalysisScore(rankMathEditor.resultManager.getScore(i.getKeyword()))})),Promise.all(a).then(function(){(0,c.dispatch)("rank-math").refreshResults()})})}},500)}},{key:"getSecondaryKeywordTests",value:function(){return["keywordInContent","lengthContent","keywordInSubheadings","keywordDensity","lengthPermalink","linksHasExternals","linksNotAllExternals","linksHasInternal","titleSentiment","titleHasPowerWords","titleHasNumber","contentHasTOC","contentHasShortParagraphs","contentHasAssets"]}},{key:"getPrimaryKeyword",value:function(){var t=dn().getState().appData.keywords;return t?gn(t.split(",")[0]):""}},{key:"getSelectedKeyword",value:function(){var t=dn().getState(),e=""!==t.appUi.selectedKeyword.data.value?t.appUi.selectedKeyword.data.value:t.appData.keywords.split(",")[0];return gn(e)}},{key:"getResearch",value:function(t){return this.analyzer.researcher.getResearch(t)}},{key:"filterTests",value:function(t){return(0,ct.intersection)(t,rankMath.assessor.researchesTests)}}],e&&Sn(t.prototype,e),r&&Sn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();const Dn=Tn,Pn=function(){return!(0,ct.isNull)(document.getElementById("site-editor"))};r.dn(Pn);const In=function(){if(!Pn())return!1;var t=wp.data.select("core/editor"),e=t.getCurrentPostId();if(rankMath.frontPageId&&rankMath.frontPageId===e)return!0;var r=t.getCurrentTemplateId()||e;return!(!(0,ct.endsWith)(r,"//home")&&!(0,ct.endsWith)(r,"//front-page"))||!(!(0,ct.endsWith)(r,"//page")&&!(0,ct.endsWith)(r,"//index"))&&"/"===new URLSearchParams(window.location.search).get("p")};function En(t){return En="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},En(t)}function On(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,An(n.key),n)}}function An(t){var e=function(t,e){if("object"!=En(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=En(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==En(e)?e:e+""}r.dn(In);const Mn=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),(rankMath.is_front_page||In())&&((0,p.addFilter)("rankMath_analysis_contentLength","rank-math",this.contentLength),(0,p.addFilter)("rankMath_analysis_contentLength_boundaries","rank-math",this.contentLengthBoundary))},(e=[{key:"contentLength",value:function(t){return{hasScore:t.hasScore,failed:(0,fe.__)("Content is %1$d words long. Consider using at least 300 words.","seo-by-rank-math"),tooltipText:(0,fe.__)("Minimum recommended content length should be 300 words.","seo-by-rank-math"),emptyContent:(0,fe.sprintf)((0,fe.__)("Content should be %1$s long.","seo-by-rank-math"),'<a href="https://rankmath.com/kb/score-100-in-tests/?utm_source=Plugin&utm_campaign=WP#overall-content-length" target="_blank">'+(0,fe.__)("300 words","seo-by-rank-math")+"</a>")}}},{key:"contentLengthBoundary",value:function(){return{recommended:{boundary:299,score:8},belowRecommended:{boundary:200,score:5},low:{boundary:50,score:2}}}}])&&On(t.prototype,e),r&&On(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function jn(t){return jn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jn(t)}function Rn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Cn(n.key),n)}}function Cn(t){var e=function(t,e){if("object"!=jn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=jn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==jn(e)?e:e+""}const Bn=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},(e=[{key:"setup",value:function(t){dn(),this.resultManager=new E.ResultManager,this.assessor=new Dn(t),new Mn,(0,p.doAction)("rank_math_loaded")}},{key:"refresh",value:function(t){this.assessor.refresh(t)}},{key:"getPrimaryKeyword",value:function(){return this.assessor.getPrimaryKeyword()}},{key:"getSelectedKeyword",value:function(){return this.assessor.getSelectedKeyword()}},{key:"updatePermalink",value:function(t){throw"Implement the function"}},{key:"updatePermalinkSanitize",value:function(t){throw"Implement the function"}}])&&Rn(t.prototype,e),r&&Rn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function xn(t){return xn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xn(t)}function Un(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function Fn(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Un(Object(r),!0).forEach(function(e){Gn(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Un(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Nn(){var t,e,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function i(r,n,a,i){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return $n(s,"_invoke",function(r,n,a){var i,u,c,s=0,l=a||[],p=!1,f={p:0,n:0,v:t,a:m,f:m.bind(t,4),d:function(e,r){return i=e,u=0,c=t,f.n=r,o}};function m(r,n){for(u=r,c=n,e=0;!p&&s&&!a&&e<l.length;e++){var a,i=l[e],m=f.p,d=i[2];r>3?(a=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=m&&((a=r<2&&m<i[1])?(u=0,f.v=n,f.n=i[1]):m<d&&(a=r<3||i[0]>n||n>d)&&(i[4]=r,i[5]=n,f.n=d,u=0))}if(a||r>1)return o;throw p=!0,n}return function(a,l,d){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&m(l,d),u=l,c=d;(e=u<2?t:c)||!p;){i||(u?u<3?(u>1&&(f.n=-1),m(u,c)):f.n=c:f.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=t}else if((e=(p=f.n<0)?c:r.call(n,f))!==o)break}catch(e){i=t,u=1,c=e}finally{s=1}}return{value:e,done:p}}}(r,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][n]?e(e([][n]())):($n(e={},n,function(){return this}),e),p=s.prototype=u.prototype=Object.create(l);function f(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,$n(t,a,"GeneratorFunction")),t.prototype=Object.create(p),t}return c.prototype=s,$n(p,"constructor",s),$n(s,"constructor",c),c.displayName="GeneratorFunction",$n(s,a,"GeneratorFunction"),$n(p),$n(p,a,"Generator"),$n(p,n,function(){return this}),$n(p,"toString",function(){return"[object Generator]"}),(Nn=function(){return{w:i,m:f}})()}function $n(t,e,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}$n=function(t,e,r,n){function i(e,r){$n(t,e,function(t){return this._invoke(e,r,t)})}e?a?a(t,e,{value:r,enumerable:!n,configurable:!n,writable:!n}):t[e]=r:(i("next",0),i("throw",1),i("return",2))},$n(t,e,r,n)}function Ln(t,e,r,n,a,i,o){try{var u=t[i](o),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,a)}function Kn(t){return function(){var e=this,r=arguments;return new Promise(function(n,a){var i=t.apply(e,r);function o(t){Ln(i,n,a,o,u,"next",t)}function u(t){Ln(i,n,a,o,u,"throw",t)}o(void 0)})}}function zn(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Hn(n.key),n)}}function Gn(t,e,r){return(e=Hn(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Hn(t){var e=function(t,e){if("object"!=xn(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=xn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==xn(e)?e:e+""}var Vn=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Gn(this,"initialize",!1),this.etSettingsData={title:"",excerpt:"",featuredImage:""},this._featuredImage=null,this._featuredImageInProcess=!1,this._data={id:!1,slug:!1,permalink:!1,content:!1,title:!1,excerpt:!1,featuredImage:!1},this.refresh=this.refresh.bind(this),this.savePost=this.savePost.bind(this),this.saveRedirection=this.saveRedirection.bind(this),this.saveSchemas=this.saveSchemas.bind(this),this.subscribeToDivi()},e=[{key:"collectPostData",value:function(){return{id:this.getPostID(),slug:this.getSlug(),permalink:this.getPermalink(),content:this.getContent(),title:this.getTitle(),excerpt:this.getExcerpt(),featuredImage:this.getFeaturedImage()}}},{key:"getPostID",value:function(){return parseInt((0,ct.get)(ETBuilderBackendDynamic,"postId",0))}},{key:"getTitle",value:function(){return this.etSettingsData.title}},{key:"setTitle",value:function(t){this.etSettingsData.title=t}},{key:"getContent",value:function(){var t=[];return this.getContentArea().find(".et_pb_section").each(function(){t.push(i()(this).html())}),t.join("")}},{key:"getContentArea",value:function(){if(this._etAppFrameElem||(this._etAppFrameElem=(0,ct.get)(ET_Builder,"Frames.app.frameElement",document.querySelector("iframe#et-fb-app-frame"))),!this._etAppFrameElem)return i()("<div />");var t=this._etAppFrameElem.contentWindow.document,e=i()((0,ct.isNull)(t.querySelector("#theme-builder-area--post_content"))?t.querySelector("body"):t.querySelector("#theme-builder-area--post_content"));return e.length<1?i()("<div />"):e}},{key:"getExcerpt",value:function(){return this.etSettingsData.excerpt}},{key:"setExcerpt",value:function(t){this.etSettingsData.excerpt=t}},{key:"getPermalink",value:function(){return rankMath.is_front_page?rankMath.homeUrl+"/":this.getSlug()?rankMath.permalinkFormat.replace(/%(postname|pagename)%/,this.getSlug()).trimRight("/"):""}},{key:"getSlug",value:function(){return(0,Ir.safeDecodeURIComponent)((0,c.select)("rank-math").getPermalink())}},{key:"getFeaturedImage",value:function(){if(this._featuredImage)return this._featuredImage;this.setFeaturedImage()}},{key:"setFeaturedImage",value:(o=Kn(Nn().m(function t(e){return Nn().w(function(t){for(;;)switch(t.n){case 0:if(void 0!==e){t.n=2;break}return t.n=1,this.fetchFeaturedImageId();case 1:e=t.v;case 2:if(!this.isValidMediaId(e)||!e){t.n=4;break}return t.n=3,this.fetchWpMedia(e);case 3:this._featuredImage=t.v,t.n=5;break;case 4:this._featuredImage=!1;case 5:return t.a(2)}},t,this)})),function(t){return o.apply(this,arguments)})},{key:"fetchFeaturedImageId",value:(a=Kn(Nn().m(function t(){var e,r=this;return Nn().w(function(t){for(;;)switch(t.n){case 0:if(!this._featuredImageInProcess){t.n=1;break}return t.a(2,this._featuredImage);case 1:return this._featuredImageInProcess=!0,e=null,t.n=2,u()({path:"/rankmath/v1/getFeaturedImageId",method:"POST",data:{postId:(0,ct.get)(ETBuilderBackendDynamic,"postId",0)}}).then(function(t){e=!!t.success&&t.featImgId,r._featuredImageInProcess=!1});case 2:return t.a(2,e)}},t,this)})),function(){return a.apply(this,arguments)})},{key:"fetchWpMedia",value:(n=Kn(Nn().m(function t(e){var r;return Nn().w(function(t){for(;;)switch(t.n){case 0:return r={},t.n=1,u()({path:"/wp/v2/media/".concat(e),method:"GET"}).then(function(t){return r=t});case 1:return t.a(2,r)}},t)})),function(t){return n.apply(this,arguments)})},{key:"isValidMediaId",value:function(t){return"number"==typeof t&&0<t}},{key:"subscribeToDivi",value:function(){var t=this;this.setTitle((0,ct.get)(ETBuilderBackendDynamic,"postTitle","")),this.setExcerpt((0,ct.get)(ETBuilderBackendDynamic,"postMeta.post_excerpt","")),this.setFeaturedImage((0,ct.get)(ETBuilderBackendDynamic,"currentPage.thumbnailId",0)),(0,c.dispatch)("rank-math").updatePermalink(rankMath.postName),this.subscriber=(0,ct.debounce)(this.refresh,500),(0,c.subscribe)(this.subscriber),i()(".et-fb-page-settings-bar").find(".et-fb-button--save-draft, .et-fb-button--publish").on("click",function(){setTimeout(function(){t.savePost(),t.saveRedirection(),t.saveSchemas()},500)}),(0,p.addFilter)("et.builder.store.setting.update","rank-math",function(e,r){if(e)switch(r){case"et_pb_post_settings_title":t.setTitle(e),t.subscriber();break;case"et_pb_post_settings_excerpt":t.setExcerpt(e),t.subscriber();break;case"et_pb_post_settings_image":t.setFeaturedImage(parseInt(e)),t.subscriber()}return e}),window.addEventListener("message",function(e){"et_fb_section_content_change"===e.data.etBuilderEvent&&t.subscriber()})}},{key:"refresh",value:function(){var t=Fn({},this._data);this._data=this.collectPostData(),this.handleEditorChange(t),!(0,ct.isEqual)(t,this._data)&&t.id&&(0,c.dispatch)("rank-math").refreshResults()}},{key:"savePost",value:function(){var t=(0,c.select)("rank-math").getDirtyMetadata();(0,ct.isEmpty)(t)||(u()({method:"POST",path:"/rankmath/v1/updateMeta",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,meta:t}}).then(function(t){(0,ct.isString)(t.slug)&&(0,c.dispatch)("rank-math").updatePermalink(t.slug),(0,p.doAction)("rank_math_metadata_updated",t)}),(0,c.dispatch)("rank-math").resetDirtyMetadata())}},{key:"saveRedirection",value:function(){var t=(0,c.select)("rank-math").getRedirectionItem();(0,ct.isEmpty)(t)||(t.objectID=this.getPostID(),t.redirectionSources=this.getPermalink(),u()({method:"POST",path:"/rankmath/v1/updateRedirection",data:t}).then(function(t){"delete"===t.action?(0,c.dispatch)("rank-math").updateRedirection("redirectionID",0):"new"===t.action&&(0,c.dispatch)("rank-math").updateRedirection("redirectionID",t.id)}),(0,c.dispatch)("rank-math").resetRedirection())}},{key:"saveSchemas",value:function(){var t=(0,c.select)("rank-math").getSchemas();if(!(0,ct.isEmpty)(t)&&!(0,ct.isEqual)(t,(0,ct.get)(rankMath,"schemas",{}))){var e=(0,c.select)("rank-math").getEditSchemas();u()({method:"POST",path:"/rankmath/v1/updateSchemas",data:{objectID:rankMath.objectID,objectType:rankMath.objectType,schemas:t}}).then(function(r){if((0,ct.isEmpty)(r))(0,c.dispatch)("rank-math").updateSchemas(t);else{var n=Fn({},t),a=Fn({},e);(0,ct.map)(r,function(t,e){n["schema-"+t]=Fn({},n[e]),a["schema-"+t]=Fn({},a[e]),delete n[e],delete a[e]}),(0,c.dispatch)("rank-math").updateSchemas(n),(0,c.dispatch)("rank-math").updateEditSchemas(a)}})}}},{key:"handleEditorChange",value:function(t){var e=this,r={id:"handleIDChange",slug:"handleSlugChange",title:"handleTitleChange",excerpt:"handleExcerptChange",content:"handleContentChange",featuredImage:"handleFeaturedImageChange"};if((0,ct.isInteger)(t.id))return this.initialize?void(0,ct.forEach)(r,function(r,n){e._data[n]!==t[n]&&e[r](e._data[n])}):(this.initialize=!0,(0,ct.forEach)(r,function(t,r){e[t](e._data[r])}),void rankMathEditor.refresh("init"));(0,c.dispatch)("rank-math").refreshResults()}},{key:"handleIDChange",value:function(t){(0,c.dispatch)("rank-math").updatePostID(t),(0,c.dispatch)("rank-math").toggleLoaded(!0)}},{key:"handleSlugChange",value:function(){rankMathEditor.refresh("permalink")}},{key:"handleTitleChange",value:function(t){j.setVariable("title",t),(0,c.dispatch)("rank-math").updateSerpTitle((0,c.select)("rank-math").getTitle()),rankMathEditor.refresh("title")}},{key:"handleExcerptChange",value:function(t){j.setVariable("excerpt",t),j.setVariable("excerpt_only",t),j.setVariable("wc_shortdesc",t),j.setVariable("seo_description",t),(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription())}},{key:"handleFeaturedImageChange",value:function(t){(0,c.dispatch)("rank-math").updateFeaturedImage(t),rankMathEditor.refresh("featuredImage")}},{key:"handleContentChange",value:function(){(0,c.dispatch)("rank-math").updateSerpDescription((0,c.select)("rank-math").getDescription()),rankMathEditor.refresh("content")}},{key:"getData",value:function(){return this._data}}],e&&zn(t.prototype,e),r&&zn(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r,n,a,o}();const Wn=Vn;var qn=r(6942),Qn=r.n(qn),Yn=function(){return wp.element.createElement("span",{className:"rank-math-rm-modal-toggle-button-icon",style:{display:"block",fill:"rgb(255, 255, 255)",width:"0px",height:"0px",marginTop:"-10px",marginLeft:"-1px"}},wp.element.createElement("svg",{viewBox:"0 0 462.03 462.03",xmlns:"http://www.w3.org/2000/svg",width:"20"},wp.element.createElement("g",null,wp.element.createElement("path",{d:"m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"}),wp.element.createElement("path",{d:"m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"}))))},Jn=function(){return wp.element.createElement("button",{type:"button","data-tip":"Rank Math SEO",onClick:function(){(0,c.dispatch)("rank-math").toggleIsDiviRankMathModalActive(!(0,c.select)("rank-math").isDiviRankMathModalActive())},className:Qn()("rank-math-rm-modal-toggle-button","et_fb_ignore_iframe","et-fb-button","et-fb-button--elevate","et-fb-button--primary","et-fb-button--round","et-fb-button--Tooltip"),style:{width:"40px",height:"40px"}},wp.element.createElement(Yn,null))};const Xn=function(){return wp.element.createElement("div",{className:"rank-math-rm-settings-bar"},wp.element.createElement(Jn,null))};function Zn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){s=!0,a=t}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return ta(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ta(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ta(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}const ea=function(t){var e=Zn((0,l.useState)(!1),2),r=e[0],n=e[1];return(0,l.useEffect)(function(){(0,c.dispatch)("rank-math").lockModifiedDate(!1)},[]),wp.element.createElement(React.Fragment,null,wp.element.createElement(f.Button,{className:"et-fb-button--success",variant:"tertiary",onClick:function(){return n(!r)}},wp.element.createElement(f.Dashicon,{icon:r?"arrow-down-alt2":"arrow-up-alt2"})),r&&wp.element.createElement(f.Button,{className:"et-fb-button--success rank-math-lock-modified-date",variant:"tertiary",onClick:function(){(0,c.dispatch)("rank-math").lockModifiedDate(!0);var e=window.ET_Builder.Frames.app.frameElement.contentWindow.ETBuilderBackend.conditionalTags;e.lock_modified_date=!0,t.publishButton.click(),n(!1),setTimeout(function(){delete e.lock_modified_date,(0,c.dispatch)("rank-math").lockModifiedDate(!1)},3e3)}},(0,fe.__)("Save (Lock Modified Date)","seo-by-rank-math")))};function ra(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return na(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?na(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,a=function(){};return{s:a,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return o=t.done,t},e:function(t){u=!0,i=t},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw i}}}}function na(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}r.dn(ea);const aa={init:function(){this.cacheProps(),this.toggleBodyClasses(),this.initSettingsBar(),this.addEventListeners(),this.initLockModifiedDate()},cacheProps:function(){this.$document=i()(document),this.$body=i()("body"),this.publishButton=i()(".et-fb-button--publish"),this.rmModalHiddingTimer=null,this.rmPrevModalActiveState=!1,this.rmSettingsBarMediaQuery=window.matchMedia("(min-width: 768px)"),this.rmSettingsBarRootSelector="#rank-math-rm-settings-bar-root",this.$rmSettingsBarRoot=i()(this.rmSettingsBarRootSelector).detach(),this.$etPageSettingsBar=i()(".et-fb-page-settings-bar"),this.$etPageSettingsBarToggleButton=this.$etPageSettingsBar.find(".et-fb-page-settings-bar__toggle-button"),this.$etPageSettingsBarColumn=this.$etPageSettingsBar.find(".et-fb-page-settings-bar__column"),this.etSettingsBarObserver=new MutationObserver(this.onEtSettingsBarClassAttrChange.bind(this))},toggleBodyClasses:function(){var t=this.isEtSettingsBarActive();this.$body.toggleClass("rank-math-et-settings-bar-is-active",t),this.$body.toggleClass("rank-math-et-settings-bar-is-inactive",!t)},initSettingsBar:function(){var t=this.getEtSettingsBarPosition();this.onRmSettingsBarMediaQueryChange(),(0,l.createRoot)(this.$rmSettingsBarRoot[0]).render(wp.element.createElement(Xn,null)),this.removePositionalClassNames(this.$body,"rank-math-et-settings-bar-is"),this.$body.addClass("rank-math-et-settings-bar-is-".concat(t)),this.attachRmSettingsBar(t)},initLockModifiedDate:function(){rankMath.showLockModifiedDate&&(this.publishButton.after('<div id="rank-math-lock-modified-date-wrapper"></div>'),(0,l.createRoot)(document.getElementById("rank-math-lock-modified-date-wrapper")).render(wp.element.createElement(ea,{publishButton:this.publishButton})))},addEventListeners:function(){this.$document.on("click",this.onDocumentClick.bind(this)),this.rmSettingsBarMediaQuery.addListener(this.onRmSettingsBarMediaQueryChange.bind(this)),this.etSettingsBarObserver.observe(this.$etPageSettingsBar[0],{attributeFilter:["class"]})},onDocumentClick:function(t){this.hideModalOnOutsideClick(t.target)},onRmSettingsBarMediaQueryChange:function(){this.detachRmSettingsBar(),this.attachRmSettingsBar(this.getEtSettingsBarPosition())},onEtSettingsBarClassAttrChange:function(){var t=this.isEtSettingsBarActive(),e=this.getEtSettingsBarPosition();this.removePositionalClassNames(this.$body,"rank-math-et-settings-bar-is"),this.$body.addClass("rank-math-et-settings-bar-is-".concat(e)),(0,c.dispatch)("rank-math").toggleIsDiviPageSettingsBarActive(t),this.toggleBodyClasses(),this.detachRmSettingsBar(),this.isEtSettingsBarDragged()?(this.rmPrevModalActiveState=(0,c.select)("rank-math").isDiviRankMathModalActive(),this.rmPrevModalActiveState&&(this.rmModalHiddingTimer=setTimeout(function(){(0,c.dispatch)("rank-math").toggleIsDiviRankMathModalActive(!1)},200))):(clearTimeout(this.rmModalHiddingTimer),this.attachRmSettingsBar(e),(0,c.dispatch)("rank-math").toggleIsDiviRankMathModalActive(this.rmPrevModalActiveState||(0,c.select)("rank-math").isDiviRankMathModalActive()),this.rmPrevModalActiveState=!1)},attachRmSettingsBar:function(t){this.isRmSettingsBarAttached()||(this.toggleRmSettingsBarClassNames(t),this.isEtSettingsBarActive()?this.rmSettingsBarMediaQuery.matches?this.$etPageSettingsBarColumn.filter(".et-fb-page-settings-bar__column--main").append(this.$rmSettingsBarRoot):this.$etPageSettingsBarColumn.filter(".et-fb-page-settings-bar__column--left").prepend(this.$rmSettingsBarRoot):this.$etPageSettingsBarToggleButton.after(this.$rmSettingsBarRoot))},detachRmSettingsBar:function(){this.isRmSettingsBarAttached()&&(this.$rmSettingsBarRoot=this.$etPageSettingsBar.find(this.rmSettingsBarRootSelector).detach())},toggleRmSettingsBarClassNames:function(t){this.removePositionalClassNames(this.$rmSettingsBarRoot),this.$rmSettingsBarRoot.addClass("rank-math-rm-settings-bar-root-".concat(t)),this.$rmSettingsBarRoot.toggleClass(["rank-math-rm-settings-bar-root-is-mobile","rank-math-rm-settings-bar-root-is-mobile-".concat(t)].join(" "),!this.rmSettingsBarMediaQuery.matches),this.$rmSettingsBarRoot.toggleClass(["rank-math-rm-settings-bar-root-is-desktop","rank-math-rm-settings-bar-root-is-desktop-".concat(t)].join(" "),this.rmSettingsBarMediaQuery.matches)},isRmSettingsBarAttached:function(){return i().contains(document.documentElement,this.$rmSettingsBarRoot[0])},isEtSettingsBarActive:function(){return this.$etPageSettingsBar.hasClass("et-fb-page-settings-bar--active")},isEtSettingsBarDragged:function(){return this.$etPageSettingsBar.hasClass("et-fb-page-settings-bar--dragged")&&!this.isEtSettingsBarActive()},removePositionalClassNames:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=["".concat(e,"-left"),"".concat(e,"-right"),"".concat(e,"-top"),"".concat(e,"-top-left"),"".concat(e,"-top-right"),"".concat(e,"-bottom"),"".concat(e,"-bottom-left"),"".concat(e,"-bottom-right")].join("|"),n=new RegExp("(".concat(r,")$"),"gim");t.removeClass(function(t,e){var r,a=[],i=ra(e.split(" "));try{for(i.s();!(r=i.n()).done;){var o=r.value;n.test(o)&&a.push(o)}}catch(t){i.e(t)}finally{i.f()}return a})},getEtSettingsBarPosition:function(){var t=this.$etPageSettingsBar;return t.hasClass("et-fb-page-settings-bar--horizontal")&&!t.hasClass("et-fb-page-settings-bar--top")?"bottom":t.hasClass("et-fb-page-settings-bar--top")&&!t.hasClass("et-fb-page-settings-bar--corner")?"top":t.hasClass("et-fb-page-settings-bar--bottom-corner")?t.hasClass("et-fb-page-settings-bar--left-corner")?"bottom-left":"bottom-right":t.hasClass("et-fb-page-settings-bar--top-corner")?t.hasClass("et-fb-page-settings-bar--left-corner")?"top-left":"top-right":t.hasClass("et-fb-page-settings-bar--vertical--right")?"right":t.hasClass("et-fb-page-settings-bar--vertical--left")?"left":""},hideModalOnOutsideClick:function(t){if((0,c.select)("rank-math").isDiviRankMathModalActive()){var e=".rank-math-rm-modal";i()(t).parents(e)||t.closest(".components-modal__screen-overlay.rank-math-modal-overlay")||t.closest(".rank-math-rm-modal-toggle-button")||t.contains(document.querySelector(e))||(0,c.dispatch)("rank-math").toggleIsDiviRankMathModalActive(!1)}}};const ia=(0,c.withSelect)(function(t){return{primaryTermId:t("rank-math").getPrimaryTermID()}})(function(t){var e=t.taxonomySlug,r=t.primaryTermId,n=t.options;if(n.length<2||!e)return null;return wp.element.createElement(f.SelectControl,{className:"rank-math-primary-term-select",label:(0,fe.__)("Select Primary Term","seo-by-rank-math"),value:r,options:n,onChange:function(t){(0,c.dispatch)("rank-math").updatePrimaryTermID(parseInt(t),e)},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})});function oa(t){return oa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},oa(t)}function ua(){var t,e,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",a=r.toStringTag||"@@toStringTag";function i(r,n,a,i){var c=n&&n.prototype instanceof u?n:u,s=Object.create(c.prototype);return ca(s,"_invoke",function(r,n,a){var i,u,c,s=0,l=a||[],p=!1,f={p:0,n:0,v:t,a:m,f:m.bind(t,4),d:function(e,r){return i=e,u=0,c=t,f.n=r,o}};function m(r,n){for(u=r,c=n,e=0;!p&&s&&!a&&e<l.length;e++){var a,i=l[e],m=f.p,d=i[2];r>3?(a=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=m&&((a=r<2&&m<i[1])?(u=0,f.v=n,f.n=i[1]):m<d&&(a=r<3||i[0]>n||n>d)&&(i[4]=r,i[5]=n,f.n=d,u=0))}if(a||r>1)return o;throw p=!0,n}return function(a,l,d){if(s>1)throw TypeError("Generator is already running");for(p&&1===l&&m(l,d),u=l,c=d;(e=u<2?t:c)||!p;){i||(u?u<3?(u>1&&(f.n=-1),m(u,c)):f.n=c:f.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=t}else if((e=(p=f.n<0)?c:r.call(n,f))!==o)break}catch(e){i=t,u=1,c=e}finally{s=1}}return{value:e,done:p}}}(r,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][n]?e(e([][n]())):(ca(e={},n,function(){return this}),e),p=s.prototype=u.prototype=Object.create(l);function f(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,ca(t,a,"GeneratorFunction")),t.prototype=Object.create(p),t}return c.prototype=s,ca(p,"constructor",s),ca(s,"constructor",c),c.displayName="GeneratorFunction",ca(s,a,"GeneratorFunction"),ca(p),ca(p,a,"Generator"),ca(p,n,function(){return this}),ca(p,"toString",function(){return"[object Generator]"}),(ua=function(){return{w:i,m:f}})()}function ca(t,e,r,n){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}ca=function(t,e,r,n){function i(e,r){ca(t,e,function(t){return this._invoke(e,r,t)})}e?a?a(t,e,{value:r,enumerable:!n,configurable:!n,writable:!n}):t[e]=r:(i("next",0),i("throw",1),i("return",2))},ca(t,e,r,n)}function sa(t,e,r,n,a,i,o){try{var u=t[i](o),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,a)}function la(t){return function(){var e=this,r=arguments;return new Promise(function(n,a){var i=t.apply(e,r);function o(t){sa(i,n,a,o,u,"next",t)}function u(t){sa(i,n,a,o,u,"throw",t)}o(void 0)})}}function pa(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ma(n.key),n)}}function fa(t,e,r){return(e=ma(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ma(t){var e=function(t,e){if("object"!=oa(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=oa(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==oa(e)?e:e+""}var da=function(){return t=function t(){var e=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),i()(document).on("click",".et-fb-button--toggle-setting",function(){clearTimeout(e.initRecursionTimer),e.attemptsRun=0,e.init.call(e)})},e=[{key:"init",value:(a=la(ua().m(function t(){return ua().w(function(t){for(;;)switch(t.n){case 0:if(void 0!==this.hasPostPrimaryTaxonomySupport){t.n=1;break}return t.n=1,this.cacheTaxonomyData();case 1:if(this.hasPostPrimaryTaxonomySupport){t.n=2;break}return t.a(2);case 2:if(this.attemptsRun++,!(this.attemptsRun>this.maxAttempts)){t.n=3;break}return t.a(2);case 3:this.cacheDom()?(this.renderContainer(),this.renderComponent(),this.bindEvents()):this.initRecursionTimer=setTimeout(this.init.bind(this),this.attemptInterval);case 4:return t.a(2)}},t,this)})),function(){return a.apply(this,arguments)})},{key:"cacheTaxonomyData",value:(n=la(ua().m(function t(){var e,r,n=this;return ua().w(function(t){for(;;)switch(t.n){case 0:return e=(0,ct.get)(rankMath,"assessor.primaryTaxonomy.name")||"",r=(0,ct.get)(ETBuilderBackendDynamic,"getTaxonomies",{}),this.primaryTaxonomyTerms=r[e]||[],t.n=1,u()({path:"/wp/v2/taxonomies"}).then(function(t){n.primaryTaxonomy=Object.keys(r).includes(e)&&t[e]?t[e]:{}});case 1:this.hasPostPrimaryTaxonomySupport=!i().isEmptyObject(this.primaryTaxonomy),this.primaryTaxonomyValue=(0,ct.get)(ETBuilderBackendDynamic,"pageSettingsValues.et_pb_post_settings_".concat(this.primaryTaxonomy.rest_base),"");case 2:return t.a(2)}},t,this)})),function(){return n.apply(this,arguments)})},{key:"cacheDom",value:function(){return this.$diviSettingsModal=i()(document).find(".et-fb-modal__page-settings"),!!this.$diviSettingsModal.length&&(this.$diviTermSettingInputs=this.$diviSettingsModal.find(".et-fb-option--".concat(this.primaryTaxonomy.rest_base)),this.$diviTermSettingArea=this.$diviTermSettingInputs.parents(".et-fb-form__group"),this.$diviTermSettingArea.length||(this.$diviTermSettingArea=this.workaroundForFalseDiviTaxonomySelector()),this.$PrimaryTermSelectContainer=i()('<div id="rank-math-primary-term-input" />'),!0)}},{key:"workaroundForFalseDiviTaxonomySelector",value:function(){var t=this.primaryTaxonomy.name.toLowerCase();return this.$diviSettingsModal.find(".et-fb-form__label-text").filter(function(e,r){return i()(r).text().toLowerCase()===t}).parents(".et-fb-form__group")}},{key:"renderContainer",value:function(){this.$diviTermSettingArea.after(this.$PrimaryTermSelectContainer)}},{key:"renderComponent",value:function(t){var e={taxonomySlug:this.primaryTaxonomy.slug,options:this.formatActiveTerms(t)};(0,l.createRoot)(this.$PrimaryTermSelectContainer[0]).render((0,l.createElement)(ia,e))}},{key:"bindEvents",value:function(){var t=this;(0,p.addFilter)("et.builder.store.setting.update","rank-math",function(e,r){return"et_pb_post_settings_".concat(t.primaryTaxonomy.rest_base)===r&&t.renderComponent(e),e})}},{key:"formatActiveTerms",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.primaryTaxonomyValue;return this.primaryTaxonomyTerms.length&&e.trim()?e.split(",").map(function(e){var r=(0,ct.find)(t.primaryTaxonomyTerms,["term_id",parseInt(e)])||{};return{label:r.name,value:r.term_id}}):[]}}],e&&pa(t.prototype,e),r&&pa(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r,n,a}();fa(da,"initRecursionTimer",void 0),fa(da,"attemptsRun",0),fa(da,"maxAttempts",10),fa(da,"attemptInterval",1e3);var ha=["className","children"];function ga(){return ga=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},ga.apply(null,arguments)}const ya=function(t){var e=t.className,r=t.children,n=function(t,e){if(null==t)return{};var r,n,a=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)r=i[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}(t,ha),a=Qn()("rank-math-rm-modal-button",e);return wp.element.createElement("button",ga({type:"button",className:a},n),r)};var ba=function(){return wp.element.createElement("div",{className:"et-fb-icon et-fb-icon--close",style:{fill:"rgb(255, 255, 255)",width:"28px",minWidth:"28px",height:"28px",margin:"-6px"}},wp.element.createElement("svg",{viewBox:"0 0 28 28",preserveAspectRatio:"xMidYMid meet",shapeRendering:"geometricPrecision"},wp.element.createElement("g",null,wp.element.createElement("path",{d:"M15.59 14l4.08-4.082a1.124 1.124 0 0 0-1.587-1.588L14 12.411 9.918 8.329A1.124 1.124 0 0 0 8.33 9.92L12.411 14l-4.082 4.082a1.124 1.124 0 0 0 1.59 1.589L14 15.589l4.082 4.082a1.124 1.124 0 0 0 1.589-1.59L15.589 14h.001z",fillRule:"evenodd"}))))},va=function(){var t=Qn()("rank-math-rm-modal-header-discard-button");return wp.element.createElement(ya,{className:t,onClick:function(){(0,c.dispatch)("rank-math").toggleIsDiviRankMathModalActive(!1)}},wp.element.createElement(ba,null))},wa=function(){var t=Qn()("rank-math-rm-modal-header");return wp.element.createElement("header",{className:t},wp.element.createElement("div",{className:"rank-math-rm-modal-header"},wp.element.createElement("div",{className:"rank-math-rm-modal-header-title"},"Rank Math SEO"),wp.element.createElement("ul",{className:"rank-math-rm-modal-header-options"},wp.element.createElement("li",{className:"rank-math-rm-modal-header-option"},wp.element.createElement(va,null)))))},ka=function(t){var e=t.children,r=Qn()("rank-math-rm-modal-content","rank-math-sidebar-panel");return wp.element.createElement("div",{className:r},e)};const Sa=(0,c.withSelect)(function(t){return{rmUiActive:(0,t("rank-math").isDiviRankMathModalActive)()}})(function(t){var e=t.rmUiActive,r=Qn()("rank-math-rm-modal",{"rank-math-rm-modal-is-hidden":!e}),n=Qn()("rank-math-rm-modal-inner");return wp.element.createElement("div",{className:r},wp.element.createElement("div",{className:n},wp.element.createElement(wa,null),wp.element.createElement(ka,null,(0,p.applyFilters)("rank_math_app",{})())))});var _a=(0,f.withFilters)("rankMath.diviAppModal")(Sa);const Ta=function(){return wp.element.createElement(f.SlotFillProvider,null,wp.element.createElement("div",{className:"rank-math-rm-app"},wp.element.createElement(_a,null)))};function Da(t){return Da="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Da(t)}function Pa(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ia(n.key),n)}}function Ia(t){var e=function(t,e){if("object"!=Da(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=Da(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Da(e)?e:e+""}function Ea(t,e,r){return e=Ma(e),function(t,e){if(e&&("object"==Da(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,Oa()?Reflect.construct(e,r||[],Ma(t).constructor):e.apply(t,r))}function Oa(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(Oa=function(){return!!t})()}function Aa(){return Aa="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=Ma(t)););return t}(t,e);if(n){var a=Object.getOwnPropertyDescriptor(n,e);return a.get?a.get.call(arguments.length<3?t:r):a.value}},Aa.apply(null,arguments)}function Ma(t){return Ma=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Ma(t)}function ja(t,e){return ja=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},ja(t,e)}var Ra=function(){return s.MediaUpload},Ca=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Ea(this,e,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&ja(t,e)}(e,t),r=e,n=[{key:"setup",value:function(t){var r,n,a,i,o;u().use(u().createRootURLMiddleware(rankMath.api.root)),u().use(u().createNonceMiddleware(rankMath.restNonce)),this.registerSlots=this.registerSlots.bind(this),(0,p.addAction)("rank_math_loaded","rank-math",this.registerSlots,0),(0,p.addFilter)("editor.MediaUpload","rank-math/replace-media-upload",Ra),(r=e,n="setup",a=this,o=Aa(Ma(1&(i=3)?r.prototype:r),n,a),2&i&&"function"==typeof o?function(t){return o.apply(a,t)}:o)([t])}},{key:"registerSlots",value:function(){this.RankMathAfterEditor=y,this.RankMathAfterFocusKeyword=I,this.RankMathAdvancedTab=S,this.slots={AfterEditor:y,AfterFocusKeyword:I,AdvancedTab:S}}},{key:"updatePermalink",value:function(t){(0,c.dispatch)("rank-math").updatePermalink(t)}},{key:"updatePermalinkSanitize",value:function(t){t=this.assessor.getResearch("slugify")(t),(0,c.dispatch)("rank-math").updatePermalink(t)}}],n&&Pa(r.prototype,n),a&&Pa(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(Bn);window.addEventListener("message",function(t){"et_builder_api_ready"===t.data.etBuilderEvent&&(wp.i18n.setLocaleData(wp.i18n.getLocaleData("seo-by-rank-math"),"seo-by-rank-math"),window.rankMathEditor=new Ca,window.rankMathGutenberg=window.rankMathEditor,window.rankMathEditor.setup(new Wn),aa.init(),new da,(0,l.createRoot)(document.getElementById("rank-math-rm-app-root")).render((0,l.createElement)(Ta)),(0,c.dispatch)("rank-math").refreshResults(),i()(".rank-math-rm-modal").draggable())})}()}();PK     ¥ŠU]*ÛuÒ  Ò  .  includes/3rdparty/divi/assets/js/divi-admin.jsnu „[µü¤        !function(){var e={6942:function(e,t){var n;!function(){"use strict";var i={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,r(n)))}return e}function r(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)i.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()}},t={};function n(i){var o=t[i];if(void 0!==o)return o.exports;var r=t[i]={exports:{}};return e[i](r,r.exports,n),r.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";const e=jQuery;var t=n.n(e);const i=wp.i18n,o=wp.element;var r=n(6942),a=n.n(r),s=["type","isDismissible","children"];function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},d.apply(null,arguments)}const l=function(e){var t=e.type,n=void 0===t?"info":t,i=e.isDismissible,o=void 0!==i&&i,r=e.children,l=function(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,s),c=a()("notice","notice-"+n,{"is-dismissible":o});return wp.element.createElement("div",d({className:c},l),r)};function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,_(i.key),i)}}function _(e){var t=function(e,t){if("object"!=c(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=c(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==c(t)?t:t+""}var p=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.cacheDom(),this.renderSeoSettingsNotice(),this.disableDiviSeoInputs()},(n=[{key:"cacheDom",value:function(){this.$etSeoSettingsArea=t()("#wrap-seo"),this.$etDisabledTextInputs=t()("#divi_seo_home_titletext").add("#divi_seo_home_descriptiontext").add("#divi_seo_home_keywordstext").add("#divi_seo_home_separate").add("#divi_seo_single_field_title").add("#divi_seo_single_field_description").add("#divi_seo_single_field_keywords").add("#divi_seo_single_separate").add("#divi_seo_index_separate"),this.$etDisabledSelectInputs=t()("#divi_seo_home_type").add("#divi_seo_single_type").add("#divi_seo_index_type"),this.$etDisabledToggleInputs=t()("#divi_seo_home_title").add("#divi_seo_home_description").add("#divi_seo_home_keywords").add("#divi_seo_home_canonical").add("#divi_seo_single_title").add("#divi_seo_single_description").add("#divi_seo_single_keywords").add("#divi_seo_single_canonical").add("#divi_seo_index_canonical").add("#divi_seo_index_description")}},{key:"renderSeoSettingsNotice",value:function(){var e="rank-math-divi-seo-admin-notice-container";this.$etSeoSettingsArea.find(".et-tab-content").prepend(t()('<div id="'.concat(e,'" />'))),document.querySelectorAll("#"+e).forEach(function(e){(0,o.createRoot)(e).render(this.getAdminNotice())},this)}},{key:"disableDiviSeoInputs",value:function(){this.$etDisabledTextInputs.attr("readonly",!0).css({cursor:"not-allowed"}),this.$etDisabledSelectInputs.css({cursor:"not-allowed"}).find("option").attr("disabled",!0),this.$etDisabledToggleInputs.attr("disabled",!0).find("+ .et_pb_yes_no_button").css({cursor:"not-allowed"}).on("mousedown keydown",function(){var e=t()(this);e.is(".et_pb_on_state")?e.removeClass("et_pb_on_state").addClass("et_pb_off_state"):e.is(".et_pb_off_state")&&e.addClass("et_pb_on_state").removeClass("et_pb_off_state")})}},{key:"getAdminNotice",value:function(){return wp.element.createElement(l,{style:{margin:"0",marginBottom:"30px",padding:"12px",borderTopColor:"#e4e4e5",borderRightColor:"#e4e4e5",borderBottomColor:"#e4e4e5"}},wp.element.createElement("p",null,(0,o.createInterpolateElement)((0,i.__)("The below options are handled via the Rank Math SEO <settings_page_link/>.","seo-by-rank-math"),{settings_page_link:wp.element.createElement("a",{href:"/wp-admin/admin.php?page=rank-math-options-titles"},(0,i.__)("settings page","seo-by-rank-math"))})))}}])&&u(e.prototype,n),r&&u(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,r}();t()(function(){new p})}()}();PK     ¥ŠU]ñÃbúd!  d!  /  includes/3rdparty/divi/assets/js/divi-iframe.jsnu „[µü¤        !function(){var t={1549:function(t,n,r){var o=r(2032),e=r(3862),i=r(6721),u=r(2749),c=r(5749);function a(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}a.prototype.clear=o,a.prototype.delete=e,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},79:function(t,n,r){var o=r(3702),e=r(80),i=r(4739),u=r(8655),c=r(1175);function a(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}a.prototype.clear=o,a.prototype.delete=e,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},8223:function(t,n,r){var o=r(6110)(r(9325),"Map");t.exports=o},3661:function(t,n,r){var o=r(3040),e=r(7670),i=r(289),u=r(4509),c=r(2949);function a(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var o=t[n];this.set(o[0],o[1])}}a.prototype.clear=o,a.prototype.delete=e,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},1873:function(t,n,r){var o=r(9325).Symbol;t.exports=o},4932:function(t){t.exports=function(t,n){for(var r=-1,o=null==t?0:t.length,e=Array(o);++r<o;)e[r]=n(t[r],r,t);return e}},6025:function(t,n,r){var o=r(5288);t.exports=function(t,n){for(var r=t.length;r--;)if(o(t[r][0],n))return r;return-1}},7422:function(t,n,r){var o=r(1769),e=r(7797);t.exports=function(t,n){for(var r=0,i=(n=o(n,t)).length;null!=t&&r<i;)t=t[e(n[r++])];return r&&r==i?t:void 0}},2552:function(t,n,r){var o=r(1873),e=r(659),i=r(9350),u=o?o.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?e(t):i(t)}},5083:function(t,n,r){var o=r(1882),e=r(7296),i=r(3805),u=r(7473),c=/^\[object .+?Constructor\]$/,a=Function.prototype,s=Object.prototype,f=a.toString,p=s.hasOwnProperty,l=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||e(t))&&(o(t)?l:c).test(u(t))}},7556:function(t,n,r){var o=r(1873),e=r(4932),i=r(6449),u=r(4394),c=o?o.prototype:void 0,a=c?c.toString:void 0;t.exports=function t(n){if("string"==typeof n)return n;if(i(n))return e(n,t)+"";if(u(n))return a?a.call(n):"";var r=n+"";return"0"==r&&1/n==-1/0?"-0":r}},1769:function(t,n,r){var o=r(6449),e=r(8586),i=r(1802),u=r(3222);t.exports=function(t,n){return o(t)?t:e(t,n)?[t]:i(u(t))}},5481:function(t,n,r){var o=r(9325)["__core-js_shared__"];t.exports=o},4840:function(t,n,r){var o="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;t.exports=o},2651:function(t,n,r){var o=r(4218);t.exports=function(t,n){var r=t.__data__;return o(n)?r["string"==typeof n?"string":"hash"]:r.map}},6110:function(t,n,r){var o=r(5083),e=r(392);t.exports=function(t,n){var r=e(t,n);return o(r)?r:void 0}},659:function(t,n,r){var o=r(1873),e=Object.prototype,i=e.hasOwnProperty,u=e.toString,c=o?o.toStringTag:void 0;t.exports=function(t){var n=i.call(t,c),r=t[c];try{t[c]=void 0;var o=!0}catch(t){}var e=u.call(t);return o&&(n?t[c]=r:delete t[c]),e}},392:function(t){t.exports=function(t,n){return null==t?void 0:t[n]}},2032:function(t,n,r){var o=r(1042);t.exports=function(){this.__data__=o?o(null):{},this.size=0}},3862:function(t){t.exports=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n}},6721:function(t,n,r){var o=r(1042),e=Object.prototype.hasOwnProperty;t.exports=function(t){var n=this.__data__;if(o){var r=n[t];return"__lodash_hash_undefined__"===r?void 0:r}return e.call(n,t)?n[t]:void 0}},2749:function(t,n,r){var o=r(1042),e=Object.prototype.hasOwnProperty;t.exports=function(t){var n=this.__data__;return o?void 0!==n[t]:e.call(n,t)}},5749:function(t,n,r){var o=r(1042);t.exports=function(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=o&&void 0===n?"__lodash_hash_undefined__":n,this}},8586:function(t,n,r){var o=r(6449),e=r(4394),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,n){if(o(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!e(t))||(u.test(t)||!i.test(t)||null!=n&&t in Object(n))}},4218:function(t){t.exports=function(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}},7296:function(t,n,r){var o,e=r(5481),i=(o=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";t.exports=function(t){return!!i&&i in t}},3702:function(t){t.exports=function(){this.__data__=[],this.size=0}},80:function(t,n,r){var o=r(6025),e=Array.prototype.splice;t.exports=function(t){var n=this.__data__,r=o(n,t);return!(r<0)&&(r==n.length-1?n.pop():e.call(n,r,1),--this.size,!0)}},4739:function(t,n,r){var o=r(6025);t.exports=function(t){var n=this.__data__,r=o(n,t);return r<0?void 0:n[r][1]}},8655:function(t,n,r){var o=r(6025);t.exports=function(t){return o(this.__data__,t)>-1}},1175:function(t,n,r){var o=r(6025);t.exports=function(t,n){var r=this.__data__,e=o(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this}},3040:function(t,n,r){var o=r(1549),e=r(79),i=r(8223);t.exports=function(){this.size=0,this.__data__={hash:new o,map:new(i||e),string:new o}}},7670:function(t,n,r){var o=r(2651);t.exports=function(t){var n=o(this,t).delete(t);return this.size-=n?1:0,n}},289:function(t,n,r){var o=r(2651);t.exports=function(t){return o(this,t).get(t)}},4509:function(t,n,r){var o=r(2651);t.exports=function(t){return o(this,t).has(t)}},2949:function(t,n,r){var o=r(2651);t.exports=function(t,n){var r=o(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this}},2224:function(t,n,r){var o=r(104);t.exports=function(t){var n=o(t,function(t){return 500===r.size&&r.clear(),t}),r=n.cache;return n}},1042:function(t,n,r){var o=r(6110)(Object,"create");t.exports=o},9350:function(t){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},9325:function(t,n,r){var o=r(4840),e="object"==typeof self&&self&&self.Object===Object&&self,i=o||e||Function("return this")();t.exports=i},1802:function(t,n,r){var o=r(2224),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,u=o(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(e,function(t,r,o,e){n.push(o?e.replace(i,"$1"):r||t)}),n});t.exports=u},7797:function(t,n,r){var o=r(4394);t.exports=function(t){if("string"==typeof t||o(t))return t;var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},7473:function(t){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},5288:function(t){t.exports=function(t,n){return t===n||t!=t&&n!=n}},8156:function(t,n,r){var o=r(7422);t.exports=function(t,n,r){var e=null==t?void 0:o(t,n);return void 0===e?r:e}},6449:function(t){var n=Array.isArray;t.exports=n},1882:function(t,n,r){var o=r(2552),e=r(3805);t.exports=function(t){if(!e(t))return!1;var n=o(t);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}},3805:function(t){t.exports=function(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}},346:function(t){t.exports=function(t){return null!=t&&"object"==typeof t}},4394:function(t,n,r){var o=r(2552),e=r(346);t.exports=function(t){return"symbol"==typeof t||e(t)&&"[object Symbol]"==o(t)}},104:function(t,n,r){var o=r(3661);function e(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var r=function(){var o=arguments,e=n?n.apply(this,o):o[0],i=r.cache;if(i.has(e))return i.get(e);var u=t.apply(this,o);return r.cache=i.set(e,u)||i,u};return r.cache=new(e.Cache||o),r}e.Cache=o,t.exports=e},3222:function(t,n,r){var o=r(7556);t.exports=function(t){return null==t?"":o(t)}}},n={};function r(o){var e=n[o];if(void 0!==e)return e.exports;var i=n[o]={exports:{}};return t[o](i,i.exports,r),i.exports}r.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(n,{a:n}),n},r.d=function(t,n){for(var o in n)r.o(n,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},function(){"use strict";const t=jQuery;var n=r.n(t),o=r(8156),e=r.n(o),i=["et_builder_api_ready","et_fb_section_content_change"].join(" ");n()(window).on(i,function(t){window.parent.postMessage({etBuilderEvent:t.type},e()(ETBuilderBackendDynamic,"currentPage.url","*"))})}()}();PK     ¥ŠU]’›ýc	 c	 *  includes/3rdparty/divi/assets/css/divi.cssnu „[µü¤        @-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}:root{--rankmath-wp-adminbar-height: 0}.rank-math-tabs input[type=text],.rank-math-tabs input[type=number],.rank-math-tabs input[type=url],.rank-math-tabs textarea,.rank-math-tabs select{border-color:#7f868d;border-radius:4px;width:100%}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=text]:hover,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=number]:hover,.rank-math-tabs input[type=url]:focus,.rank-math-tabs input[type=url]:hover,.rank-math-tabs textarea:focus,.rank-math-tabs textarea:hover,.rank-math-tabs select:focus,.rank-math-tabs select:hover{border-color:#069de3;outline:none}.rank-math-tabs input[type=text]:focus,.rank-math-tabs input[type=number]:focus,.rank-math-tabs input[type=url]:focus,.rank-math-tabs textarea:focus,.rank-math-tabs select:focus{background:#fff;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-tabs input[type=radio]:before{-webkit-box-sizing:inherit;box-sizing:inherit}.rank-math-link-control svg{max-width:24px}.rank-math-sidebar-panel .components-base-control__label{font-weight:600;display:block;margin-bottom:10px}.rank-math-sidebar-panel .components-toggle-control__label{font-weight:600}.rank-math-sidebar-panel .components-base-control__help{font-weight:normal;margin-top:0}.rank-math-sidebar-panel .components-base-control__help.rank-math-notice{margin:1rem 0;border-width:0 0 0 4px;border-radius:4px}.rank-math-sidebar-panel,.rank-math-modal-overlay{line-height:1.4em}.rank-math-sidebar-panel .hidden,.rank-math-modal-overlay .hidden{display:none}.rank-math-sidebar-panel p,.rank-math-modal-overlay p{line-height:1.5}.rank-math-sidebar-panel strong,.rank-math-modal-overlay strong{font-weight:600}.rank-math-sidebar-panel>div,.rank-math-modal-overlay>div{outline:0}.rank-math-sidebar-panel .notice,.rank-math-sidebar-panel div.error,.rank-math-sidebar-panel div.updated,.rank-math-modal-overlay .notice,.rank-math-modal-overlay div.error,.rank-math-modal-overlay div.updated{margin:5px 15px 2px;padding:1px 12px;color:#444;border-left-width:4px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.rank-math-sidebar-panel .notice p,.rank-math-sidebar-panel div.error p,.rank-math-sidebar-panel div.updated p,.rank-math-modal-overlay .notice p,.rank-math-modal-overlay div.error p,.rank-math-modal-overlay div.updated p{margin:.5em 0;padding:2px}.rank-math-sidebar-panel .notice-info,.rank-math-modal-overlay .notice-info{border-left-color:#00a0d2}.rank-math-sidebar-panel .notice-info.notice-alt,.rank-math-modal-overlay .notice-info.notice-alt{background-color:#e5f5fa}.rank-math-sidebar-panel .notice-warning.notice-alt,.rank-math-modal-overlay .notice-warning.notice-alt{border-left-color:#ffb900;background-color:#fff8e5}.rank-math-sidebar-panel .notice-error.notice-alt,.rank-math-modal-overlay .notice-error.notice-alt{border-left-color:#dc3232;background-color:#fbeaea}.rank-math-sidebar-panel .notice-success.notice-alt,.rank-math-modal-overlay .notice-success.notice-alt{border-left-color:#00a0d2;background-color:#e5f5fa}.rank-math-tab-content-schema .variable-group .components-button{top:30px}.rank-math-tab-content-schema .variable-group .rank-math-variables-dropdown{top:59px;width:100%}.rank-math-tab-content-social p:last-of-type{margin-bottom:0}.rank-math-tab-content-advanced .rank-math-redirect .components-toggle-control.is-close .components-base-control__field{margin-bottom:0}.rank-math-robots-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-robots-list .components-base-control{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 55%;flex:0 0 55%}#side-sortables .rank-math-robots-list .components-base-control{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control__field{margin-bottom:0}.rank-math-robots-list .components-base-control__field label{cursor:pointer}#side-sortables .rank-math-robots-list .components-base-control__field label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 44%;flex:0 0 44%}#side-sortables .rank-math-robots-list .components-base-control:nth-child(even){-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}.rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{float:right;width:227%}.block-editor .rank-math-robots-list .components-base-control:nth-child(even) .rank-math-tooltip-content{max-width:268px}.rank-math-robots-list.advanced-robots .components-base-control{margin-top:6px;-webkit-box-flex:0;-ms-flex:0 0 65%;flex:0 0 65%}.rank-math-robots-list.advanced-robots .components-base-control:nth-child(even){margin-top:0;-webkit-box-flex:0;-ms-flex:0 0 33%;flex:0 0 33%}.rank-math-sidebar-panel .rank-math-robots-list.advanced-robots .rank-math-tooltip-content{width:162%}.rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{width:182%}.block-editor .rank-math-sidebar-panel .rank-math-robots-list .rank-math-tooltip-content{max-width:268px}.rank-math-primary-term-picker{margin:20px 0 0;padding:16px 0;padding-bottom:24px;border-top:1px solid #e2e4e7;border-bottom:1px solid #e2e4e7}.rank-math-primary-term-picker .components-base-control{width:100%}.rank-math-primary-term-picker label{font-weight:600;margin-bottom:8px !important;color:#191e23}@media(min-width: 782px){body .edit-post-layout.is-sidebar-opened .edit-post-layout__content{margin-right:300px}body .edit-post-layout.is-sidebar-opened .edit-post-plugin-sidebar__sidebar-layout,body .edit-post-layout.is-sidebar-opened .edit-post-sidebar{width:300px}}.rank-math-datepicker__dialog .components-popover__content{padding:10px}@media(min-width: 782px){.rank-math-datepicker__dialog .components-popover__content{width:270px}}.rank-math-tabs>.components-tab-panel__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f8f9fa;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem}.rank-math-tabs>.components-tab-panel__tabs.contentAI{display:none}.rank-math-tabs>.components-tab-panel__tabs button{font-weight:normal;position:relative;display:block;overflow:visible;padding:3px 7px;color:hsl(210,5.7851239669%,37.5490196078%);border-radius:0;background:none;-webkit-box-shadow:none;box-shadow:none;height:50px;width:48px}.rank-math-tabs>.components-tab-panel__tabs button:hover{color:inherit;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button:hover i{border-radius:20em;background:#d9e9ed;-webkit-box-shadow:0 0 0 8px #d9e9ed;box-shadow:0 0 0 8px #d9e9ed}.rank-math-tabs>.components-tab-panel__tabs button:focus{font-weight:normal;outline:none;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button i{font-size:17px;vertical-align:-4px;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button i.rm-icon-schema{font-size:18px;vertical-align:-4px}.rank-math-tabs>.components-tab-panel__tabs button span{display:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active{width:auto;margin-bottom:-1px;color:#242628}.rank-math-tabs>.components-tab-panel__tabs button.is-active:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs>.components-tab-panel__tabs button.is-active i{-webkit-box-shadow:none;box-shadow:none;margin-right:7px;margin-left:0}.rank-math-tabs>.components-tab-panel__tabs button.is-active span{display:inline-block}.rank-math-tabs>.components-tab-panel__tabs button.is-active:after{visibility:visible;width:100%;height:3px;content:"";background:#069de3;-webkit-box-shadow:none;box-shadow:none;position:absolute;bottom:-1px;left:0}.rank-math-tabs>.components-tab-panel__tabs button.hidden{display:none !important}.rank-math-tabs .cmb2-metabox-description{font-style:normal}.rank-math-tabs .rank-math-datepicker{position:relative}.rank-math-tabs .rank-math-datepicker>button{position:absolute;top:31px;right:2px;height:24px;padding:0 3px}.rank-math-tabs .rank-math-datepicker>button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-tabs .rank-math-frontend-score .components-base-control__field{margin-bottom:0}.rank-math-tabs .rank-math-frontend-score .components-toggle-control__label{margin-bottom:0}.rank-math-sidebar-panel .components-panel__body,.rank-math-sidebar-panel .components-modal__content,.rank-math-modal .components-panel__body,.rank-math-modal .components-modal__content{margin-bottom:0;border-bottom:0}.rank-math-sidebar-panel .components-panel__body .button,.rank-math-sidebar-panel .components-panel__body .button-secondary,.rank-math-sidebar-panel .components-panel__body .is-secondary,.rank-math-sidebar-panel .components-modal__content .button,.rank-math-sidebar-panel .components-modal__content .button-secondary,.rank-math-sidebar-panel .components-modal__content .is-secondary,.rank-math-modal .components-panel__body .button,.rank-math-modal .components-panel__body .button-secondary,.rank-math-modal .components-panel__body .is-secondary,.rank-math-modal .components-modal__content .button,.rank-math-modal .components-modal__content .button-secondary,.rank-math-modal .components-modal__content .is-secondary{font-size:14px;line-height:38px;height:auto;min-height:30px;padding:0 20px;color:hsl(210,5.7851239669%,44.5490196078%);border:1px solid #7f868d;border-radius:3px;background:#f8f9fa;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button.active,.rank-math-sidebar-panel .components-panel__body .button-secondary.active,.rank-math-sidebar-panel .components-panel__body .is-secondary.active,.rank-math-sidebar-panel .components-modal__content .button.active,.rank-math-sidebar-panel .components-modal__content .button-secondary.active,.rank-math-sidebar-panel .components-modal__content .is-secondary.active,.rank-math-modal .components-panel__body .button.active,.rank-math-modal .components-panel__body .button-secondary.active,.rank-math-modal .components-panel__body .is-secondary.active,.rank-math-modal .components-modal__content .button.active,.rank-math-modal .components-modal__content .button-secondary.active,.rank-math-modal .components-modal__content .is-secondary.active{color:hsl(210,5.7851239669%,40.5490196078%);border-color:#7f868d;background:#f8f9fa;-webkit-box-shadow:inset 0 2px 5px -3px #7f8292;box-shadow:inset 0 2px 5px -3px #7f8292}.rank-math-sidebar-panel .components-panel__body .button:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .button:focus:not(:disabled),.rank-math-modal .components-panel__body .button:hover:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-secondary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .button:focus:not(:disabled),.rank-math-modal .components-modal__content .button:hover:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-secondary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-secondary:hover:not(:disabled){color:#069de3;border-color:#069de3;background:#f8f9fa}.rank-math-sidebar-panel .components-panel__body .button:focus,.rank-math-sidebar-panel .components-panel__body .button-secondary:focus,.rank-math-sidebar-panel .components-panel__body .is-secondary:focus,.rank-math-sidebar-panel .components-modal__content .button:focus,.rank-math-sidebar-panel .components-modal__content .button-secondary:focus,.rank-math-sidebar-panel .components-modal__content .is-secondary:focus,.rank-math-modal .components-panel__body .button:focus,.rank-math-modal .components-panel__body .button-secondary:focus,.rank-math-modal .components-panel__body .is-secondary:focus,.rank-math-modal .components-modal__content .button:focus,.rank-math-modal .components-modal__content .button-secondary:focus,.rank-math-modal .components-modal__content .is-secondary:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-sidebar-panel .components-panel__body .button .dashicons,.rank-math-sidebar-panel .components-panel__body .button-secondary .dashicons,.rank-math-sidebar-panel .components-panel__body .is-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .button .dashicons,.rank-math-sidebar-panel .components-modal__content .button-secondary .dashicons,.rank-math-sidebar-panel .components-modal__content .is-secondary .dashicons,.rank-math-modal .components-panel__body .button .dashicons,.rank-math-modal .components-panel__body .button-secondary .dashicons,.rank-math-modal .components-panel__body .is-secondary .dashicons,.rank-math-modal .components-modal__content .button .dashicons,.rank-math-modal .components-modal__content .button-secondary .dashicons,.rank-math-modal .components-modal__content .is-secondary .dashicons{margin:0 3px 0 0}.rank-math-sidebar-panel .components-panel__body .button.disabled,.rank-math-sidebar-panel .components-panel__body .button-secondary.disabled,.rank-math-sidebar-panel .components-panel__body .is-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .button.disabled,.rank-math-sidebar-panel .components-modal__content .button-secondary.disabled,.rank-math-sidebar-panel .components-modal__content .is-secondary.disabled,.rank-math-modal .components-panel__body .button.disabled,.rank-math-modal .components-panel__body .button-secondary.disabled,.rank-math-modal .components-panel__body .is-secondary.disabled,.rank-math-modal .components-modal__content .button.disabled,.rank-math-modal .components-modal__content .button-secondary.disabled,.rank-math-modal .components-modal__content .is-secondary.disabled{pointer-events:none}.rank-math-sidebar-panel .components-panel__body .button-primary,.rank-math-sidebar-panel .components-panel__body .is-primary,.rank-math-sidebar-panel .components-modal__content .button-primary,.rank-math-sidebar-panel .components-modal__content .is-primary,.rank-math-modal .components-panel__body .button-primary,.rank-math-modal .components-panel__body .is-primary,.rank-math-modal .components-modal__content .button-primary,.rank-math-modal .components-modal__content .is-primary{color:#fff;border-color:#069de3;background:#069de3;text-shadow:none;border-radius:3px}.rank-math-sidebar-panel .components-panel__body .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-panel__body .is-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .button-primary:hover:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:focus:not(:disabled),.rank-math-sidebar-panel .components-modal__content .is-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .button-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .button-primary:hover:not(:disabled),.rank-math-modal .components-panel__body .is-primary:focus:not(:disabled),.rank-math-modal .components-panel__body .is-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .button-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .button-primary:hover:not(:disabled),.rank-math-modal .components-modal__content .is-primary:focus:not(:disabled),.rank-math-modal .components-modal__content .is-primary:hover:not(:disabled){color:#fff;border-color:#08a7f1;background:#08a7f1}.rank-math-sidebar-panel .components-panel__body .button-primary:focus,.rank-math-sidebar-panel .components-panel__body .is-primary:focus,.rank-math-sidebar-panel .components-modal__content .button-primary:focus,.rank-math-sidebar-panel .components-modal__content .is-primary:focus,.rank-math-modal .components-panel__body .button-primary:focus,.rank-math-modal .components-panel__body .is-primary:focus,.rank-math-modal .components-modal__content .button-primary:focus,.rank-math-modal .components-modal__content .is-primary:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3;box-shadow:0 0 0 1px #fff,0 0 0 3px #069de3}.rank-math-sidebar-panel .components-panel__body .button-primary[disabled],.rank-math-sidebar-panel .components-panel__body .is-primary[disabled],.rank-math-sidebar-panel .components-modal__content .button-primary[disabled],.rank-math-sidebar-panel .components-modal__content .is-primary[disabled],.rank-math-modal .components-panel__body .button-primary[disabled],.rank-math-modal .components-panel__body .is-primary[disabled],.rank-math-modal .components-modal__content .button-primary[disabled],.rank-math-modal .components-modal__content .is-primary[disabled]{border-color:#069de3 !important;background:#069de3 !important;color:rgb(159.0364806867,222.8712446352,252.4635193133) !important}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default),.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default),.rank-math-modal .components-panel__body .is-blue:not(.default),.rank-math-modal .components-modal__content .is-blue:not(.default){border-color:#4e8cde;background:#4e8cde}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):hover,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):hover,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{border-color:rgb(56.5071428571,126.0357142857,217.9928571429);background:rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-blue:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-blue:not(.default):focus,.rank-math-modal .components-panel__body .is-blue:not(.default):focus,.rank-math-modal .components-modal__content .is-blue:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(56.5071428571,126.0357142857,217.9928571429)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default),.rank-math-sidebar-panel .components-modal__content .is-green:not(.default),.rank-math-modal .components-panel__body .is-green:not(.default),.rank-math-modal .components-modal__content .is-green:not(.default){border-color:#10ac84;background:#10ac84}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):hover,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):hover,.rank-math-modal .components-modal__content .is-green:not(.default):focus{border-color:rgb(14.6978723404,158.0021276596,121.2574468085);background:rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-green:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-green:not(.default):focus,.rank-math-modal .components-panel__body .is-green:not(.default):focus,.rank-math-modal .components-modal__content .is-green:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085);box-shadow:0 0 0 1px #fff,0 0 0 3px rgb(14.6978723404,158.0021276596,121.2574468085)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default),.rank-math-sidebar-panel .components-modal__content .is-red:not(.default),.rank-math-modal .components-panel__body .is-red:not(.default),.rank-math-modal .components-modal__content .is-red:not(.default){border-color:#ed5e5e;background:#ed5e5e}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):hover,.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):hover,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):hover,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):hover,.rank-math-modal .components-modal__content .is-red:not(.default):focus{border-color:hsl(0,79.8882681564%,61.9019607843%);background:hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .is-red:not(.default):focus,.rank-math-sidebar-panel .components-modal__content .is-red:not(.default):focus,.rank-math-modal .components-panel__body .is-red:not(.default):focus,.rank-math-modal .components-modal__content .is-red:not(.default):focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%);box-shadow:0 0 0 1px #fff,0 0 0 3px hsl(0,79.8882681564%,61.9019607843%)}.rank-math-sidebar-panel .components-panel__body .button-link-delete,.rank-math-sidebar-panel .components-modal__content .button-link-delete,.rank-math-modal .components-panel__body .button-link-delete,.rank-math-modal .components-modal__content .button-link-delete{color:#ee6a5e;border-color:#ee6a5e;background:rgba(0,0,0,0)}.rank-math-sidebar-panel .components-panel__body .button-link-delete:hover,.rank-math-sidebar-panel .components-panel__body .button-link-delete:focus,.rank-math-sidebar-panel .components-modal__content .button-link-delete:hover,.rank-math-sidebar-panel .components-modal__content .button-link-delete:focus,.rank-math-modal .components-panel__body .button-link-delete:hover,.rank-math-modal .components-panel__body .button-link-delete:focus,.rank-math-modal .components-modal__content .button-link-delete:hover,.rank-math-modal .components-modal__content .button-link-delete:focus{color:#fff;border-color:#ee6a5e;background:#ee6a5e;-webkit-box-shadow:0 0 0 1px #ee6a5e;box-shadow:0 0 0 1px #ee6a5e}.rank-math-sidebar-panel .components-panel__body .button-link,.rank-math-sidebar-panel .components-panel__body .is-link,.rank-math-sidebar-panel .components-modal__content .button-link,.rank-math-sidebar-panel .components-modal__content .is-link,.rank-math-modal .components-panel__body .button-link,.rank-math-modal .components-panel__body .is-link,.rank-math-modal .components-modal__content .button-link,.rank-math-modal .components-modal__content .is-link{border:0;background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .button-small,.rank-math-sidebar-panel .components-panel__body .is-small,.rank-math-sidebar-panel .components-modal__content .button-small,.rank-math-sidebar-panel .components-modal__content .is-small,.rank-math-modal .components-panel__body .button-small,.rank-math-modal .components-panel__body .is-small,.rank-math-modal .components-modal__content .button-small,.rank-math-modal .components-modal__content .is-small{font-size:12px;line-height:24px;min-height:24px;padding:0 8px}.rank-math-sidebar-panel .components-panel__body .button-xlarge,.rank-math-sidebar-panel .components-panel__body .is-large,.rank-math-sidebar-panel .components-modal__content .button-xlarge,.rank-math-sidebar-panel .components-modal__content .is-large,.rank-math-modal .components-panel__body .button-xlarge,.rank-math-modal .components-panel__body .is-large,.rank-math-modal .components-modal__content .button-xlarge,.rank-math-modal .components-modal__content .is-large{font-size:16px;line-height:44px;height:46px}.rank-math-sidebar-panel .components-panel__body .button-animated,.rank-math-sidebar-panel .components-modal__content .button-animated,.rank-math-modal .components-panel__body .button-animated,.rank-math-modal .components-modal__content .button-animated{font-size:24px;line-height:82px;height:auto;min-height:30px;padding:0 40px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);text-align:center;border-radius:82px}.rank-math-sidebar-panel .components-panel__body .button-animated i,.rank-math-sidebar-panel .components-modal__content .button-animated i,.rank-math-modal .components-panel__body .button-animated i,.rank-math-modal .components-modal__content .button-animated i{line-height:85px}.rank-math-sidebar-panel .components-panel__body .button-animated:before,.rank-math-sidebar-panel .components-modal__content .button-animated:before,.rank-math-modal .components-panel__body .button-animated:before,.rank-math-modal .components-modal__content .button-animated:before{content:"";-webkit-animation:hvr-ripple-out 1s linear infinite;animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon,.rank-math-modal .components-panel__body .rank-math-help-icon,.rank-math-modal .components-modal__content .rank-math-help-icon{margin:0 4px;vertical-align:.5px;text-decoration:none;color:#b5bfc9;-webkit-box-shadow:none;box-shadow:none}.rank-math-sidebar-panel .components-panel__body .rank-math-help-icon:hover,.rank-math-sidebar-panel .components-modal__content .rank-math-help-icon:hover,.rank-math-modal .components-panel__body .rank-math-help-icon:hover,.rank-math-modal .components-modal__content .rank-math-help-icon:hover{color:#069de3}.rank-math-sidebar-panel .components-panel__body .rank-math-highlight-button,.rank-math-sidebar-panel .components-modal__content .rank-math-highlight-button,.rank-math-modal .components-panel__body .rank-math-highlight-button,.rank-math-modal .components-modal__content .rank-math-highlight-button{padding:0;height:auto;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-sidebar-panel .rank-math-edit-snippet,.rank-math-modal .rank-math-edit-snippet{height:30px;margin:1rem 0;border-color:#069de3;background:#069de3}.rank-math-sidebar-panel .rank-math-edit-snippet:hover,.rank-math-modal .rank-math-edit-snippet:hover{border-color:#08a7f1;background:#08a7f1}@media(min-width: 600px){.rank-math-tabs .components-checkbox-control__input-container{width:14px;height:14px;margin-right:5px}.rank-math-tabs .components-checkbox-control__input-container svg{width:20px;height:18px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]{width:16px;height:16px}.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked,.rank-math-tabs .components-checkbox-control__input[type=checkbox]:checked:focus{border-color:#069de3;background:#069de3}}body.rtl .rank-math-tabs>.components-tab-panel__tabs button.is-active i,body.rtl .rank-math-tabs>.components-tab-panel__tabs button i{margin-right:0;margin-left:5px}body.rtl .rank-math-tabs>.components-tab-panel__tabs button[id="1-review"]{margin-right:auto;margin-left:0}.rank-math-sidebar-panel .rank-math-tooltip{display:inline}.rank-math-sidebar-panel .rank-math-tooltip label{position:relative;margin-left:1px;vertical-align:.5px;color:#b5bfc9}.rank-math-sidebar-panel .rank-math-tooltip label:hover{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip label:after{display:none;content:"";-webkit-transform:translate(-50%, 3px);transform:translate(-50%, 3px);border-style:solid;height:0;width:0;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #edf0f2;border-width:0 10px 8px;position:absolute;top:100%;left:50%}.rank-math-sidebar-panel .rank-math-tooltip input{display:none !important}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label{opacity:1;color:#069de3}.rank-math-sidebar-panel .rank-math-tooltip input:checked+label:after{display:block}.rank-math-sidebar-panel .rank-math-tooltip input:checked~.rank-math-tooltip-content{display:block}.rank-math-sidebar-panel .rank-math-tooltip-content{font-weight:normal;line-height:1.3;display:none;width:100%;margin:7px 0 0;padding:8px 10px;color:#737982;border-radius:3px;background:#edf0f2}.rank-math-sidebar-panel .rank-math-tooltip-content a{text-decoration:underline}div.rank-math-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow-y:scroll;width:665px;max-width:100%;height:94vh;max-height:735px;border:0;-webkit-box-shadow:0 5px 30px 0 rgba(0,0,0,.2);box-shadow:0 5px 30px 0 rgba(0,0,0,.2)}div.rank-math-modal .components-modal__content{padding:0;margin-top:50px}div.rank-math-modal .components-modal__content:before{margin:0}div.rank-math-modal .components-modal__content .components-modal__children-container,div.rank-math-modal .components-modal__content .components-panel__body,div.rank-math-modal .components-modal__content form{height:100%}div.rank-math-modal .components-modal__content>div>div{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs{height:100%}div.rank-math-modal .components-modal__content>div>div .rank-math-schema-tabs .components-tab-panel__tab-content{height:calc(100% - 50px)}div.rank-math-modal .components-modal__content .rank-math-editor{overflow:auto}div.rank-math-modal .components-modal__content form{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}div.rank-math-modal .components-panel__body{border:0}div.rank-math-modal .components-modal__header{height:51px;margin:0;padding:0 1rem;border-bottom:1px solid #dadfe4;z-index:999}div.rank-math-modal .components-modal__header .components-modal__header-heading{font-size:14px}div.rank-math-modal .components-modal__header button{padding:0 10px}@media(max-width: 782px){.rank-math-modal{width:100%;height:100%;max-height:100%}}.variable-group{position:relative}.variable-group .components-button{height:26px;padding:3px;color:inherit;position:absolute;top:2px;right:2px}.variable-group .components-button:not(.is-default):hover{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.variable-group .components-button .dashicon{margin-right:0}.variable-group input,.variable-group textarea{margin:0;padding-right:40px !important}.rank-math-variables-dropdown{z-index:999;display:none;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;max-width:450px;max-height:290px;border:1px solid #b5bfc9;border-radius:4px;background:#fff;position:absolute;top:38px;right:0}body.rtl{right:auto;left:38px}.rank-math-variables-dropdown .components-base-control{padding:10px 10px 0}.rank-math-variables-dropdown input[type=text].components-text-control__input{border-color:#b5bfc9;-webkit-box-shadow:none !important;box-shadow:none !important;height:34px;width:100%}.rank-math-variables-dropdown ul{margin:0}.rank-math-variables-dropdown li{font-size:12px;position:relative;margin:0;padding:10px;cursor:pointer;border-bottom:1px solid #b5bfc9}.rank-math-variables-dropdown li span{font-style:italic;line-height:1.3;display:block;padding-top:3px}.rank-math-variables-dropdown li:hover{background:#f8f9fa}.rank-math-variables-dropdown li:after{display:inline-block;margin-top:5px;padding:.25em .4em;content:attr(data-var);white-space:nowrap;border-radius:.25rem;background-color:#f0f2f4}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items{gap:4px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"],.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]{padding:0;background:rgba(0,0,0,0);width:auto;min-width:80px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover{background:rgba(0,0,0,0)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled),.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled){-webkit-box-shadow:none;box-shadow:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.bad-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #e12925}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.ok-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #b36f0e}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:hover:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:focus:not(:disabled)>div.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:hover:not(:disabled)>div.good-fk{-webkit-box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40;box-shadow:inset 0 0 0 1px #fff,0 0 0 .5px #439f40}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.content-ai-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.content-ai-score{font-size:12px;font-weight:600;position:relative}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.bad-fk{color:rgb(227.9533898305,36.5466101695,103.1228813559);border-color:rgb(227.9533898305,36.5466101695,103.1228813559);background:rgb(252.113559322,231.686440678,238.7915254237)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.ok-fk{color:rgb(179.1666666667,110.5714285714,14.3333333333);border-color:rgb(179.1666666667,110.5714285714,14.3333333333);background:hsl(35.0310559006,85.1851851852%,92.9411764706%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"]:not(.is-pressed) .rank-math-toolbar-score.content-ai-score.good-fk{color:hsl(163.3846153846,61.320754717%,36.568627451%);border-color:hsl(163.3846153846,61.320754717%,36.568627451%);background:hsl(163.3846153846,61.320754717%,91.568627451%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score{padding:10px 5px 8px 3px;color:#212f3e;border:1px solid hsl(210,15.625%,69.9019607843%);border-radius:2px;background:#dadfe4;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon{font-size:15px;float:left;height:15px}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .rm-icon-target,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .rm-icon-target{font-size:15px;font-weight:600}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score .seo-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score .seo-score{font-size:12px;font-weight:600;display:inline-block}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.loading,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.loading{pointer-events:none}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.bad-fk{color:#e12925;border-color:#e12925;background:#fce5e2}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.ok-fk{color:#b36f0e;border-color:#b36f0e;background:rgb(255,233.4,193.8)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"] .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"] .rank-math-toolbar-score.good-fk{color:#439f40;border-color:#439f40;background:#e3f4e3}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score{color:#fff;background:#b5bfc9}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.bad-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.bad-fk{background:hsl(1.2765957447,75.8064516129%,71.3725490196%)}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.ok-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.ok-fk{background:orange}.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.editor-editor-interface:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Rank Math"].is-pressed .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-toggled .rank-math-toolbar-score.good-fk,.edit-post-layout:not(.show-icon-labels) .interface-pinned-items button.components-button[aria-label="Content AI"].is-pressed .rank-math-toolbar-score.good-fk{border-color:rgb(66.3911290323,158.8004032258,63.6995967742);background:rgb(106.9596774194,194.5927419355,104.4072580645)}.components-menu-group .rank-math-toolbar-score .seo-score,.components-menu-group .rank-math-toolbar-score .content-ai-score{display:none}.components-menu-group .rank-math-toolbar-score i{font-size:1.25rem}@-webkit-keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}@keyframes tags--bump{30%{-webkit-transform:scale(1.2);transform:scale(1.2)}}.rank-math-focus-keyword .tagify{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #8d96a0;padding:0;cursor:text;position:relative;border-radius:4px;margin-bottom:16px;overflow:auto}.rtl #side-sortables .rank-math-focus-keyword .tagify{padding-right:5px}.rank-math-focus-keyword .tagify:hover{border-color:#8d96a0}.rank-math-focus-keyword .tagify.tagify--focus{border-color:#00a0d2;-webkit-box-shadow:0 0 0 1px #00a0d2;box-shadow:0 0 0 1px #00a0d2}.rank-math-focus-keyword .tagify+input,.rank-math-focus-keyword .tagify+textarea{display:none !important}.tagify__tag+.rank-math-focus-keyword .tagify__tag{min-width:20px}.tagify__tag+.rank-math-focus-keyword .tagify__tag::before{display:none}.rank-math-focus-keyword .tagify__tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0 5px 5px;position:relative;z-index:1;cursor:pointer;padding:4px 6px 4px 10px;border-radius:14px;font-size:14px;line-height:17px}.rank-math-focus-keyword .tagify__tag:focus{outline:none}.rank-math-focus-keyword .tagify__tag.tagify--editable>div{color:#000}.rank-math-focus-keyword .tagify__tag.dragsort--dragElem{display:none}.rank-math-focus-keyword .tagify__tag>div{vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;line-height:inherit;border-radius:3px;-webkit-transition:none;transition:none;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:inherit}.rank-math-focus-keyword .tagify__tag>div:before{color:green;-webkit-box-shadow:none;box-shadow:none;position:relative}.rank-math-focus-keyword .tagify__tag>div>*{white-space:pre-wrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:top;min-width:10px;line-height:17px;max-width:initial;-webkit-transition:none;transition:none}.rank-math-focus-keyword .tagify__tag>div>*[contenteditable]{outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text;margin:-2px;padding:2px}.rank-math-focus-keyword .tagify__tag.tagify--noAnim{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag.tagify--hide{width:0 !important;padding-left:0;padding-right:0;margin-left:0;margin-right:0;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:.3s;transition:.3s;pointer-events:none}.rank-math-focus-keyword .tagify__tag.tagify--mark div::before{-webkit-animation:none;animation:none}.rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{font-family:"dashicons";font-size:12px;margin-right:5px;vertical-align:-1px;display:inline-block;content:"ï…•";text-align:center;color:currentColor;border-radius:50%}.rank-math-focus-keyword .tagify__tag.bad-fk{color:hsl(3.9130434783,77.9661016949%,71.862745098%);background:hsl(3.9130434783,77.9661016949%,94.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(3.9130434783,77.9661016949%,94.862745098%) !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected{color:#fff;background:#f29c96}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.bad-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#f29c96 !important}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,65.9661016949%,68.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk.selected .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,62.9661016949%,64.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn{color:#fff;background:hsl(3.9130434783,69.9661016949%,88.862745098%)}.rank-math-focus-keyword .tagify__tag.bad-fk .tagify__tag__removeBtn:hover{background:hsl(3.9130434783,72.9661016949%,84.862745098%)}.rank-math-focus-keyword .tagify__tag.ok-fk{color:rgb(255,158.921875,18.5);background:rgb(255,235.58125,207.2)}.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:rgb(255,235.58125,207.2) !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected{color:#fff;background:#ffbe5f}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.ok-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#ffbe5f !important}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn{color:#fff;background:rgb(242.952,171.166,66.248)}.rank-math-focus-keyword .tagify__tag.ok-fk.selected .tagify__tag__removeBtn:hover{background:rgb(238.41,162.026875,50.39)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn{color:#fff;background:rgb(251.048,214.1215,160.152)}.rank-math-focus-keyword .tagify__tag.ok-fk .tagify__tag__removeBtn:hover{background:hsl(35.625,95%,75.6274509804%)}.rank-math-focus-keyword .tagify__tag.good-fk{color:hsl(120,42.5531914894%,58.137254902%);background:hsl(120,42.5531914894%,91.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:hsl(120,42.5531914894%,91.137254902%) !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected{color:#fff;background:#79c979}.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::before,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container:hover::after,.rank-math-focus-keyword .tagify__tag.good-fk.selected .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{background:#79c979 !important}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn{color:#fff;background:hsl(120,30.5531914894%,55.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk.selected .tagify__tag__removeBtn:hover{background:hsl(120,27.5531914894%,51.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn{color:#fff;background:hsl(120,37.5531914894%,78.137254902%)}.rank-math-focus-keyword .tagify__tag.good-fk .tagify__tag__removeBtn:hover{background:hsl(120,37.5531914894%,71.137254902%)}.rank-math-focus-keyword .tagify__tag__removeBtn{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5;font:14px/18px Dashicons;color:#fff;height:18px;width:18px;text-align:center;cursor:pointer;margin-left:4px;border-radius:50px;background:rgba(0,0,0,.35)}.rank-math-focus-keyword .tagify__tag__removeBtn::after{content:"ïŒµ"}.rank-math-focus-keyword .tagify__tag__removeBtn:hover{color:#fff !important;background:rgba(86,86,86,.35);border-radius:50px}.rank-math-focus-keyword .tagify__tag__removeBtn:hover+div>span{opacity:1}.rank-math-focus-keyword .tagify--hasMaxTags .tagify__input{display:none}.rank-math-focus-keyword .tagify__input{display:block;min-width:20px;margin:5px;padding:7px 6px 6px;line-height:1;position:relative}.rank-math-focus-keyword .tagify__input::before{content:attr(data-placeholder);-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:1;-webkit-transform:none;transform:none;color:rgba(0,0,0,.25);color:var(--placeholder-color-focus);height:1em;line-height:1em;margin:auto 0;white-space:nowrap;pointer-events:none}.rank-math-focus-keyword .tagify__input:after{content:attr(data-suggest);display:inline-block;vertical-align:middle;position:absolute;min-width:calc(100% - 1.5em);text-overflow:ellipsis;overflow:hidden;white-space:pre;color:var(--tag-text-color);opacity:.3;pointer-events:none;max-width:100px}.rank-math-focus-keyword .tagify__input:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.5;-webkit-transform:none;transform:none;width:auto}.rank-math-focus-keyword .tagify__input:focus{outline:none}.rank-math-focus-keyword .tagify__input:focus::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:0;-webkit-transform:translatex(6px);transform:translatex(6px);transition:.2s ease-out;opacity:0;-webkit-transform:translateX(6px);transform:translateX(6px);min-width:0px;display:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus::before{display:none}}.rank-math-focus-keyword .tagify__input:focus:empty::before{-webkit-transition:.2s ease-out;transition:.2s ease-out;opacity:.3;-webkit-transform:none;transform:none}@supports(-moz-appearance: none){.rank-math-focus-keyword .tagify__input:focus:empty::before{display:inline-block}}.rank-math-focus-keyword .tagify__input::after{content:attr(data-suggest);color:#000;opacity:.3;pointer-events:none}.rank-math-focus-keyword .tagify.tagify--noTags.tagify--empty span{width:100%}.tagify__dropdown{position:absolute;z-index:99999999;background:#fff;max-height:350px;overflow:auto;border:1px solid #e8e9ec;border-radius:4px;-webkit-box-shadow:0 9px 18px 0 rgba(25,30,35,.18);box-shadow:0 9px 18px 0 rgba(25,30,35,.18);-webkit-box-sizing:border-box;box-sizing:border-box}.tagify__dropdown__item{-webkit-box-sizing:inherit;box-sizing:inherit;padding:6px 13px;cursor:pointer;position:relative;outline:none;color:#717780;border-top:1px solid #edf0f2}.tagify__dropdown__item--active,.tagify__dropdown__item:active{background:#0095cd;color:#fff}body.rtl .rank-math-focus-keyword .tagify__tag{padding-right:10px;padding-left:6px}body.rtl .rank-math-focus-keyword .tagify__tag .tagify__tag__removeBtn{margin-right:4px;margin-left:0}body.rtl .rank-math-focus-keyword .tagify__tag:first-child .tagify__tag-text:before{margin-right:0;margin-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent{-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:6px 8px 6px 12px;margin-left:8px;margin-right:2px;border-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:-2px;left:-8px;width:16px;height:16px;color:rgba(0,0,0,.4) !important;background:#fff !important;-webkit-box-shadow:0px 1px 3px rgba(0,0,0,.15);box-shadow:0px 1px 3px rgba(0,0,0,.15);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent .tagify__tag__removeBtn:hover{color:#d9655d !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type{padding-right:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type>div{margin-right:6px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container{display:-webkit-box;display:-ms-flexbox;display:flex;border-top-right-radius:20px;border-bottom-right-radius:20px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:3px;width:22px;padding-left:3px;border:0;border-radius:16px;color:#fff;font-size:12px;font-weight:500;line-height:14px;z-index:10;overflow:hidden;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover{width:-webkit-max-content;width:-moz-max-content;width:max-content;padding-right:7px;padding-left:5px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper:hover .intent{visibility:visible}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .icon::before{font-size:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper .intent{font-size:11px;font-weight:400;visibility:hidden}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent{height:18px;color:rgba(0,0,0,.4);background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper.is-show-intent:hover{color:rgba(0,0,0,.7)}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent{padding-right:27px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container{position:absolute;right:4px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after,.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{content:"";display:block}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::before{width:30px;-webkit-mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));-webkit-mask-image:linear-gradient(to right, transparent, #000);mask-image:-webkit-gradient(linear, left top, right top, from(transparent), to(#000));mask-image:linear-gradient(to right, transparent, #000);z-index:5}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container:not(.is-loading):hover::after{position:absolute;inset:0;left:30px;z-index:1;border-top-right-radius:16px;border-bottom-right-radius:16px}.rank-math-focus-keyword .tagify__tag.has-keyword-intent:first-of-type.float-keyword-intent:first-of-type .rank-math-keyword-intent-container .rank-math-keyword-intent-wrapper{height:100%}.rank-math-focus-keyword{position:relative}.rank-math-focus-keyword .components-panel__body-title{margin-bottom:0;padding:16px;padding-bottom:10px;background:rgba(0,0,0,0) !important}.rank-math-focus-keyword .components-notice{margin:0 0 10px;color:#555d66;border-radius:4px}.rank-math-focus-keyword .components-notice__content{margin:0}.rank-math-focus-keyword .components-notice a{font-weight:500}.rank-math-modal.rank-math-focus-keywords-cta-modal{height:auto}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta{position:relative}.rank-math-modal.rank-math-focus-keywords-cta-modal #rank-math-pro-cta .rank-math-cta-box{-webkit-box-shadow:none;box-shadow:none;padding:0 0 1rem 0}.rank-math-modal.rank-math-focus-keywords-cta-modal .components-modal__content::before{margin-bottom:0}.rank-math-checklist{background:#fff}.rank-math-checklist .components-panel__body-title,.rank-math-checklist .components-panel__body-toggle.components-button{font-size:14px;outline:0 !important}.rank-math-checklist li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;position:relative;padding-left:24px;line-height:1.4;margin-bottom:6px}.rank-math-checklist li:before{font-family:dashicons;font-size:14px;line-height:16px;content:"ïŒµ";text-align:center;color:#fff;border-radius:50em;background:#f29c96;position:absolute;top:1px;left:-1px;height:16px;width:16px}.rank-math-checklist li.test-ok:before{content:"ï…‡";background:#79c979}.rank-math-checklist li.test-warning:before{background:#ffbe5f}.rank-math-checklist li.test-check-good:before{background:#fff;color:#79c979;-webkit-box-shadow:inset 0 0 0 2px #79c979;box-shadow:inset 0 0 0 2px #79c979}.rank-math-checklist li.test-check-ok:before{background:#fff;color:#ffbe5f;-webkit-box-shadow:inset 0 0 0 2px #ffbe5f;box-shadow:inset 0 0 0 2px #ffbe5f}.rank-math-checklist li.test-check-bad:before{background:#fff;color:rgb(255,163.3333333333,95);-webkit-box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95);box-shadow:inset 0 0 0 2px rgb(255,163.3333333333,95)}.rank-math-checklist li .rank-math-help-icon{margin:0 !important}.rank-math-checklist li .rank-math-ai-button.is-link{gap:3px;padding:4px 5px;margin-left:4px;border-radius:3px;color:#b34a91;background:rgba(179,74,145,.1);font-size:12px;-webkit-transition:.2s all ease-in-out;transition:.2s all ease-in-out}.rank-math-checklist li .rank-math-ai-button.is-link:hover{background:rgba(179,74,145,.17)}.rank-math-checklist li.seo-check-fleschReading.okay:before,.rank-math-checklist li.seo-check-fleschReading.fairly-difficult:before{background:#ffbe5f}.rank-math-checklist li.seo-check-fleschReading.difficult:before{background:#eac0c2}.rank-math-group-score{font-size:11px;font-weight:normal;line-height:21px;padding:0 7px;letter-spacing:.05em;color:#fff;border-radius:20em;background:#f29c96;margin-top:-2px;margin-left:5px}.rank-math-group-score:before{font-family:dashicons;font-size:13px;line-height:12px;content:"ïŒµ";margin-top:3px;margin-right:2px;vertical-align:middle}.rank-math-group-score.test-ok{background:#79c979}.rank-math-group-score.test-ok:before{content:"ï…‡"}.rank-math-group-score.test-warning{padding:3px 10px 3px 5px;background:#ffbe5f}.rank-math-group-score.test-warning:before{font-size:11px;font-weight:500;margin-top:1px;padding:0 4px 0 6px;content:"!";text-align:center}body.rtl .rank-math-group-score{margin:0 10px 0 0}.serp-preview-noindex{display:none}.noindex-preview .serp-preview-body{opacity:.6}.noindex-preview .serp-preview-body{pointer-events:none}.noindex-preview .serp-preview-noindex{z-index:1;display:block;margin-top:10px;padding:5px 10px;border-left:4px solid #f0b849;border-radius:4px;background:#fef8ee}.noindex-preview .serp-preview-noindex h3{font-weight:700;line-height:1.4;margin:5px 0 0;letter-spacing:1px;text-transform:uppercase;color:#32383d}.noindex-preview .serp-preview-noindex p{font-size:14px;width:400px;max-width:100%;margin:5px 0;color:#333}.suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #b5bfc9}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{margin-left:5px}.suggestion-item button.suggestion-title{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:left;background:none;border:0;padding:0;cursor:default;vertical-align:sub}.suggestion-item button.suggestion-title a{vertical-align:sub}.suggestion-item .dashicons{cursor:pointer;background:none;-webkit-box-shadow:none;box-shadow:none;border:0;position:relative;width:20px;height:20px;margin-top:5px;margin-left:2px;margin-right:2px;padding:0px;display:inline-block}.suggestion-item .dashicons-admin-links::before{position:absolute;top:0px;left:0px}.suggestion-item .dashicons-clipboard::before{position:absolute;top:0px;left:0px}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:"ï…€" !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}#rank_math_metabox_link_suggestions .postbox-header .hndle{-webkit-box-pack:normal;-ms-flex-pack:normal;justify-content:normal}.rank-math-button-devices{float:right}.rank-math-button-devices .button.button-small{font-size:14px;line-height:32px;display:inline-block;height:30px;min-height:26px;padding:0 8px;cursor:pointer;-webkit-transition:.25s all linear;transition:.25s all linear;color:#7f8292;border:1px solid #b5bfc9;border-radius:3px;background:#f3f5f6}.rank-math-button-devices .button.button-small:first-child{margin-right:5px}.rank-math-button-devices .button.button-small:hover{color:#069de3;border-color:#069de3}.rank-math-button-devices .button.button-small.active{color:#fff;border-color:#069de3;background:#069de3;-webkit-box-shadow:none;box-shadow:none}.serp-preview{background:#fff}.serp-preview *{-webkit-box-sizing:border-box;box-sizing:border-box}.serp-preview-title{margin-bottom:5px}.serp-preview-title:before{font-size:14px;font-weight:600;line-height:24px;content:attr(data-title);letter-spacing:.05em}.serp-preview-title .seo-score{font-weight:600;display:none;float:right;padding:4px 6px;color:#fff;border-radius:3px;background:#ffbe5f}.show-icon-labels .serp-preview-title .seo-score{display:block}.serp-preview-title .seo-score.bad-fk{background:#f29c96}.serp-preview-title .seo-score.good-fk{background:#79c979}.serp-preview-wrapper{position:relative;padding-top:5px;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{cursor:pointer;-webkit-transition:width .2s ease,padding .2s ease,margin .2s ease;transition:width .2s ease,padding .2s ease,margin .2s ease}.serp-preview .group{position:relative;width:100%}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial,sans-serif;font-size:13px;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:600px;margin:0;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.serp-preview .serp-description mark,.serp-preview .serp-title mark,.serp-preview .serp-url mark{font-weight:bold;color:inherit;background-color:rgba(0,0,0,0)}.serp-preview .serp-title{font-size:16px;font-weight:normal;line-height:1.5;margin-bottom:3px;padding-bottom:0;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;padding-right:5px;color:#202124}.serp-preview .serp-url:after{position:absolute;top:-2px;margin-left:10px;content:url('data:image/svg+xml; utf8, <svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg>');opacity:.4;height:17px;width:17px}.serp-preview .serp-description{line-height:1.4;white-space:normal;text-overflow:unset;word-wrap:break-word;color:#555d66}.serp-preview .rank-math-rating-preview{margin-bottom:4px;margin-left:-1px}.serp-preview .serp-ratings{line-height:1;position:relative;display:inline;margin-right:5px;vertical-align:-1px;color:#ccc}.serp-preview .serp-ratings span{font-size:14px;width:14px;height:14px}.serp-preview .serp-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#f9b709}.serp-preview .serp-result span{margin-top:-1px}.serp-preview .serp-rating-label,.serp-preview .serp-rating-value{color:#70757a}.rank-math-editor-general .serp-preview-title{margin-bottom:0}.rank-math-editor-general .serp-preview-title:before{line-height:36px}.serp-preview-favicon{display:none}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:0;-webkit-transition:.2s max-height ease-in-out;transition:.2s max-height ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.rank-math-editor .serp-preview-input{position:relative;max-width:598px;pointer-events:none}.rank-math-editor .serp-preview-input input[disabled]{font:16px arial,sans-serif;padding:5px 16px;color:#000;border:1px solid rgba(0,0,0,0);border-radius:24px;background:#fff;-webkit-box-shadow:0 2px 5px 1px rgba(64,60,67,.16);box-shadow:0 2px 5px 1px rgba(64,60,67,.16);height:46px;width:100%}.rank-math-editor .serp-preview-input .serp-icon-mic,.rank-math-editor .serp-preview-input .serp-icon-search{display:inline-block;width:24px;position:absolute;top:0;right:48px}.rank-math-editor .serp-preview-input .serp-icon-mic{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right center;background-size:24px 24px;height:48px;width:24px}.rank-math-editor .serp-preview-input .serp-icon-search{right:16px}.rank-math-editor .serp-preview-input .serp-icon-search svg{fill:#4285f4;height:48px;width:24px}.serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;margin:0;padding:27px 12px 12px;color:#777}.serp-preview-menus ul li.current{color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-menus ul li.current img{margin-right:3px}.serp-preview-menus ul li img,.serp-preview-menus ul li svg{display:inline-block;width:16px;margin-right:1px;vertical-align:-3px;fill:#5f6368}.serp-preview-menus ul.menus-right{float:right}.serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;color:gray;border-top:1px solid #ebebeb}.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{width:400px;margin:auto;border-bottom:1px solid rgba(60,64,67,.08)}.mobile-preview .serp-preview-input{max-width:399px}.mobile-preview .serp-preview-input input[disabled]{height:41px;padding-left:43px}.mobile-preview .serp-preview-input .serp-icon-mic{display:none}.mobile-preview .serp-preview-input .serp-icon-search{top:0;left:4px;width:40px;height:41px;padding-right:8px;padding-left:8px;text-align:center;border-radius:0 20px 20px 0}.mobile-preview .serp-preview-input .serp-icon-search svg{height:41px;fill:#9aa0a6}.mobile-preview .serp-preview-menus{padding:0 10px}.mobile-preview .serp-preview-menus ul{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.mobile-preview .serp-preview-menus ul li{font-family:inherit;font-size:14px;font-weight:500;line-height:34px;padding:6px 0 0;text-align:center}.mobile-preview .serp-preview-menus ul li.current{color:#202124;border-bottom:2px solid #202124}.mobile-preview .serp-preview-menus ul li img,.mobile-preview .serp-preview-menus ul li svg{display:none}.mobile-preview .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;margin:10px auto auto;padding:10px;word-wrap:break-word;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column wrap;flex-flow:column wrap}.mobile-preview .rank-math-rating-preview{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.mobile-preview .rank-math-rating-preview .serp-ratings{margin:2px 0 0 5px;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.mobile-preview .rank-math-rating-preview .serp-ratings .dashicon{font-size:14px}.mobile-preview .rank-math-rating-preview .serp-result{color:#f9b709}.mobile-preview .rank-math-rating-preview .serp-rating-label{width:100%;margin-bottom:2px;color:#202124;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.mobile-preview .rank-math-rating-preview .serp-rating-value{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.rank-math-editor .mobile-preview .serp-title{color:#1558d6}.rank-math-editor .mobile-preview .group:first-child{max-width:250px;display:-webkit-box;display:-ms-flexbox;display:flex}.rank-math-editor .mobile-preview .serp-preview-bg{display:none}.rank-math-editor .mobile-preview .serp-preview-favicon{display:block;height:16px;margin-top:7px;margin-right:7px}.rank-math-editor .mobile-preview .serp-url{font-size:12px;margin-bottom:12px;color:#3c4043}.expanded-preview.desktop-preview .serp-preview-bg{overflow:visible}@media(min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{max-height:168px}}.expanded-preview.mobile-preview .serp-preview-bg{display:block;overflow:visible;max-height:99px}.expanded-preview.mobile-preview .serp-title{margin-bottom:10px}.expanded-preview.mobile-preview .serp-description{color:#3c4041}body.rtl .rank-math-button-devices{float:left}body.rtl .rank-math-button-devices .button.button-small:first-child{margin-right:0;margin-left:5px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-icon-mic{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus li,body.rtl .serp-preview-bg .serp-preview-menus ul{float:right}body.rtl .serp-preview-bg .serp-preview-menus li.menus-right,body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-preview-input .serp-icon-search{left:0;border-radius:20px 0 0 20px}body.rtl .mobile-preview .serp-preview-favicon{margin-right:0;margin-left:6px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{min-height:118px;vertical-align:top}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:500px;margin:0 auto;padding:30px 0}.rank-math-social-preview-item-wrapper{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;margin:auto;border:1px solid #dddfe2;border-radius:0 0 3px 3px;background:#fff}.rank-math-social-preview-item .error-msg{line-height:1;display:none;width:528px;max-width:100%;margin:auto;padding-top:10px}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:auto;min-height:initial}.rank-math-social-preview-image-overlay{-webkit-transform:translate(-50%, -50%) scale(0.45);transform:translate(-50%, -50%) scale(0.45);position:absolute;top:50%;left:50%}.rank-math-social-preview-image .error-msg{line-height:1;display:none}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;padding:10px 10px 5px;color:#1d2129;background:#f2f3f5}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 3px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-top:3px;padding-bottom:3px;text-transform:uppercase;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-meta{position:relative;display:none;display:block;clear:both;margin:0 auto;margin-bottom:15px}.rank-math-social-preview-meta .social-profile-image{position:absolute;left:-58px;float:left;width:46px;height:46px;border-radius:50%;background:#dcc7c7}.rank-math-social-preview-meta .social-name{font-size:14px;font-weight:700;color:#14171a}.rank-math-social-preview-meta .social-username,.rank-math-social-preview-meta .social-time{font-size:12px;font-weight:normal;margin-left:5px;color:#657786}.rank-math-social-preview-meta .social-time:before{margin-right:5px;content:"Â·"}.rank-math-social-preview-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-title{font-size:1.0625rem}.rank-math-social-preview-facebook .rank-math-social-preview-description{font-size:.9375rem;overflow:hidden;max-height:1.3em;margin-bottom:5px;white-space:nowrap;text-overflow:ellipsis;color:#606770}.rank-math-social-preview-facebook .rank-math-social-preview-meta{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:66px;margin-bottom:0;padding:12px;border:1px solid #dddfe2;border-bottom:0;border-radius:3px 3px 0 0;background:#fff}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{position:relative;left:auto;width:40px;height:40px;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-name{margin-bottom:3px;color:#365899}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span{width:auto}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span:first-child:after{margin:0 5px;content:"Â·"}.rank-math-social-preview-facebook .rank-math-social-preview-meta .social-time span svg{vertical-align:middle}.rank-math-social-preview-facebook .rank-math-social-preview-meta .dashicons.dashicons-admin-site{font-size:12px;line-height:18px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item{max-width:582px;padding-left:58px}.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-text,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-username,.rank-math-social-preview-twitter .rank-math-social-preview-meta .social-time{font-size:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{clear:both;max-width:100%;border:1px solid #ccd6dd;border-radius:14px}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#fff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#f5f8fa}.rank-math-social-preview-twitter .rank-math-social-preview-title{font-weight:normal;overflow:hidden;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis;color:#14171a}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:15px;line-height:1.3125;overflow:hidden;max-height:2.5em;text-overflow:ellipsis;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{font-size:15px;padding-top:5px;text-transform:initial;color:#657786}.rank-math-social-preview-twitter .rank-math-social-preview-publisher .dashicon{margin-right:3px;-webkit-text-stroke:1px #fff}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-description{max-height:4.5rem}.rank-math-social-preview-twitter .rank-math-social-preview-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-meta.twitter-meta{display:block}body.rtl .social-tabs-navigation a .dashicons,body.rtl .rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:0;margin-left:8px}body.rtl .rank-math-social-preview-facebook .rank-math-social-preview-meta .social-profile-image{float:right;margin-right:0;margin-left:10px}body.rtl .rank-math-social-preview-twitter .rank-math-social-preview-item{padding-right:58px;padding-left:0}body.rtl .rank-math-social-preview-twitter .social-profile-image{right:-58px;left:auto}.rank-math-modal-overlay .rank-math-social-preview-item,.rank-math-modal-overlay .rank-math-social-preview-image img{display:block}.length-indicator-wrapper{position:relative;display:block;position:absolute;top:22px;right:15px;background-color:rgba(0,0,0,0) !important;border:none !important}.length-indicator-wrapper .length-indicator{position:relative;display:inline-block;overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);height:8px;width:180px;margin-left:10px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;border-radius:0 2px 2px 0;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper.invalid .length-indicator{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;color:#7f868d}#rank-math-width-tester{position:absolute;top:0;left:0;margin:0;padding:0;font-weight:normal;white-space:nowrap;font-family:arial,sans-serif}#rank-math-width-tester.title{font-size:20px}#rank-math-width-tester.description{font-size:14px}body.rtl .length-indicator-wrapper{right:auto;left:15px}body.rtl .length-indicator-wrapper .length-indicator{margin-left:0;margin-right:10px}.rank-math-editor{overflow:hidden}.rank-math-editor>.components-tab-panel__tabs{padding:0 17px;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;background:#f8f9fa;border-bottom:1px solid #b5bfc9}.rank-math-editor>.components-tab-panel__tabs button{width:auto;border:0 !important;padding:3px 15px}.rank-math-editor>.components-tab-panel__tabs button span{display:inline-block}.rank-math-editor>.components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-editor>.components-tab-panel__tabs button[id="1-review"]{margin-left:auto}.rank-math-editor>.components-tab-panel__tabs button .rm-icon-heart-filled{color:#f44336;-webkit-transition:.25s all linear;transition:.25s all linear;margin-right:0 !important}.rank-math-editor>.components-tab-panel__tabs button:not(.is-active):hover .rm-icon-heart-filled{color:#e93f30;text-shadow:0 0 5px #f5aaa3}.rank-math-editor>.components-tab-panel__tab-content{padding:20px;position:relative}.rank-math-editor .field-group{position:relative;margin-top:12px;padding:20px 15px 15px;border-radius:4px;background:#f0f2f4}.rank-math-editor .field-group:last-of-type{margin-bottom:0}.rank-math-editor .field-group label:not(.components-toggle-control__label){font-weight:600;margin-bottom:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor .field-group .components-toggle-control__label{font-weight:600}.rank-math-editor .field-group .components-base-control__field{margin-bottom:0 !important}.rank-math-editor .field-group .components-textarea-control__input{display:block}.rank-math-editor .field-group .components-base-control__help{margin:0;color:#7f868d;padding-top:5px}.rank-math-editor .field-group .notice{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control .components-base-control__field{margin-bottom:0}.rank-math-editor .field-group .components-toggle-control+.components-base-control{margin-top:12px}.rank-math-editor .field-group input[type=text],.rank-math-editor .field-group input[type=url],.rank-math-editor .field-group textarea,.rank-math-editor .field-group select{background-color:#fff;margin:0}.rank-math-editor .field-group input[type=text]:hover,.rank-math-editor .field-group input[type=url]:hover,.rank-math-editor .field-group textarea:hover,.rank-math-editor .field-group select:hover{border-color:#069de3}.rank-math-editor .field-group input[type=text]:focus,.rank-math-editor .field-group input[type=url]:focus,.rank-math-editor .field-group textarea:focus,.rank-math-editor .field-group select:focus{border-color:#069de3;-webkit-box-shadow:0 0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.rank-math-editor .field-group .rank-math-description-variables .rank-math-variables-dropdown{bottom:100%;top:auto}.rank-math-editor .serp-preview-wrapper{padding:15px 0 10px}.rank-math-editor .serp-title{font-size:20px;line-height:1.3}.rank-math-editor .serp-url{margin:7px 0 7px}.rank-math-editor .serp-description{font-size:14px;line-height:1.57}.rank-math-editor-social .components-tab-panel__tabs{width:266px;height:48px;margin:10px auto 0;border-radius:4px;background:rgba(0,0,0,0);-webkit-box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1);box-shadow:0 0px 6px rgba(50,50,93,.1),0 0px 3px rgba(0,0,0,.1)}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:16px;line-height:48px;float:left;display:inline-block;width:50%;height:auto;padding:0;text-align:center;color:#939393;border:0;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):first-child{border-radius:3px 0 0 3px}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):last-child{border-radius:0 3px 3px 0}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus{color:#fff;background:#3b5998}.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active.button-twitter,.rank-math-editor-social .components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):focus.button-twitter{background:#55acee}.rank-math-editor-social .components-tab-panel__tabs .dashicon{margin-right:5px;vertical-align:-4px;-webkit-transition:none;transition:none}.rank-math-editor-social .components-tab-panel__tabs>button{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.rank-math-editor-social .notice{margin:5px 0 20px}.rank-math-editor-social .components-base-control .is-destructive{margin-left:10px;vertical-align:vertical-align}.rank-math-editor-social .components-base-control__label{font-weight:600;margin-bottom:10px;margin-left:2px}.rank-math-editor-social .components-base-control+.components-base-control:last-of-type,.rank-math-editor-social .components-base-control+.components-base-control.components-toggle-control{border-bottom:0;padding-bottom:0;margin-bottom:0}.ask-review{text-align:center}.ask-review h3{font-size:2em;margin:1em 0}.ask-review p{font-size:16px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #e2e4e7;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;text-decoration:none;color:#aaa;height:40px;width:40px}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;position:relative;border-left:1px solid #e2e4e7;background:#f0f2f4;border-radius:0 6px 6px 0;height:60px;width:70px}.smiley{padding:5px;position:relative;margin:9px auto 0 auto;border-radius:100%;background:linear-gradient(135deg, rgb(255, 233, 25) 0%, rgb(251, 192, 0) 100%);height:40px;width:40px;-webkit-box-sizing:border-box;box-sizing:border-box}.mouth{-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:-30%;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:40px;border-bottom-left-radius:40px;background:#b57700;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:30%;width:60%;position:absolute;bottom:18%;left:50%}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 5px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;border-radius:100%;background:#b57700;height:8px;width:8px}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{display:block;content:"";background:#fed800;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);height:0;width:0;position:absolute;top:-15px;left:5px}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;margin-left:-20%;border-top-left-radius:40px;border-top-right-radius:40px;border-bottom-right-radius:40px;border-bottom-left-radius:40px;height:10%;width:40%}.smiley.normal .eyes{margin-top:30%}.smiley.normal .eye{height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:blink .6s;animation:blink .6s}.smiley.angry .mouth,.smiley.angry .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s}.smiley.angry .mouth{bottom:18%;left:50%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px;height:20%;width:40%}.smiley.angry .eyes{margin-top:35%}.smiley.angry .eye::after{top:-3px;left:-5px;width:120%;height:50%;-webkit-transform:rotate(-35deg);transform:rotate(-35deg);border-radius:0}.smiley.angry .eye:first-of-type::after{right:-5px;left:auto;-webkit-transform:rotate(35deg);transform:rotate(35deg)}.smiley.happy .mouth{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s}.smiley.happy .eyes{-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s}.smiley.happy .eye:nth-of-type(2){height:8px;margin-top:0;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation:wink .8s;animation:wink .8s}@-webkit-keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@keyframes blink{0%{height:8px;margin-top:0}25%{height:2px;margin-top:8px}50%{height:8px;margin-top:0}75%{height:2px;margin-top:8px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@-webkit-keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@keyframes wink{0%{height:8px;margin-top:0}30%{height:4px;margin-top:4px}70%{height:4px;margin-top:4px}100%{height:8px;margin-top:0}}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-post-publish .rank-math-social-share-buttons,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.rank-math-post-publish p{margin-top:0}.rank-math-post-publish .rank-math-share-button{font-size:22px;line-height:30px;margin-right:5px;padding:0;-webkit-transition:.2s all linear;transition:.2s all linear;text-align:center;color:#fff;border-radius:30px;background:#d14836;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.rank-math-post-publish .rank-math-share-button:last-of-type{margin-right:0}.rank-math-post-publish .rank-math-share-button:hover{opacity:.9}.rank-math-post-publish .rank-math-share-button a{display:block;text-decoration:none;color:inherit}.rank-math-post-publish .rank-math-share-button a:focus{-webkit-box-shadow:none;box-shadow:none}.rank-math-post-publish .rank-math-share-button .dashicon{vertical-align:-2px}.rank-math-post-publish .rank-math-share-button.rm-facebook{background:#1877f2}.rank-math-post-publish .rank-math-share-button.rm-twitter{background:#1da1f2}#rank-math-compare-keywords-trigger{position:absolute;right:0;top:-31px;height:22px;min-height:22px;width:22px;line-height:22px;padding:0;text-decoration:none;text-align:center;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}#rank-math-compare-keywords-trigger .button-icon{margin:0 auto}#rank-math-compare-keywords-trigger svg{width:16px;height:16px;vertical-align:-2px}.rank-math-sidebar-panel #rank-math-compare-keywords-trigger{top:15px;right:16px}#side-sortables #rank-math-compare-keywords-trigger{top:23px}.rank-math-modal.rank-math-trends-cta-modal{width:930px;max-height:580px}.rank-math-modal.rank-math-trends-cta-modal img{max-width:99.3%}.rank-math-modal.rank-math-trends-cta-modal #rank-math-pro-cta{z-index:initial}body.rtl #rank-math-compare-keywords-trigger{left:16px;right:auto}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@-webkit-keyframes bounce{from{-webkit-transform:translateY(0px);transform:translateY(0px)}to{-webkit-transform:translateY(-5px);transform:translateY(-5px)}}@keyframes loading{0%{background-size:20% 50%,20% 50%,20% 50%}20%{background-size:20% 20%,20% 50%,20% 50%}40%{background-size:20% 100%,20% 20%,20% 50%}60%{background-size:20% 50%,20% 100%,20% 20%}80%{background-size:20% 50%,20% 50%,20% 100%}100%{background-size:20% 50%,20% 50%,20% 50%}}#rank-math-pro-cta .rank-math-cta-body,#rank-math-pro-cta .rank-math-cta-header,.rank-math-tabs>.components-tab-panel__tabs .rank-math-extra-menu,.rank-math-post-publish .rank-math-social-share-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.blurred{pointer-events:none;-webkit-filter:blur(2px);filter:blur(2px)}.blurred:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";background:rgba(248,249,250,.1)}#rank-math-pro-cta{position:relative;z-index:100;margin-top:2rem}#rank-math-pro-cta.center{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:0}#rank-math-pro-cta.analytics{width:560px;max-width:100%;margin:2rem auto 0}#rank-math-pro-cta.no-margin{margin:0}#rank-math-pro-cta .rank-math-cta-box{-ms-flex-item-align:center;align-self:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:90%;padding:2rem 1.5rem;border:2px solid #6666c3;border-radius:4px;background:#fff;-webkit-box-shadow:0 4px 14px 0 rgba(34,36,55,.28);box-shadow:0 4px 14px 0 rgba(34,36,55,.28);justify-self:center}#rank-math-pro-cta .rank-math-cta-box.no-shadow{-webkit-box-shadow:none;box-shadow:none}#rank-math-pro-cta .rank-math-cta-box.no-padding{padding:0}#rank-math-pro-cta .rank-math-cta-box.no-border{border:none}#rank-math-pro-cta .rank-math-cta-box.less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-box.less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.top-20{-ms-flex-item-align:start;align-self:flex-start;margin-top:10%}#rank-math-pro-cta .rank-math-cta-box h3{font-size:1.25rem;font-weight:600;line-height:1.4;margin-top:0;margin-bottom:1.5rem;color:#242628}@media screen and (min-width: 48rem){#rank-math-pro-cta .rank-math-cta-box.width-100{width:100%;max-width:100%}#rank-math-pro-cta .rank-math-cta-box.width-80{max-width:80%}#rank-math-pro-cta .rank-math-cta-box.width-70{max-width:70%}#rank-math-pro-cta .rank-math-cta-box.width-60{max-width:60%}#rank-math-pro-cta .rank-math-cta-box.width-60 h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-box.width-50{max-width:50%}#rank-math-pro-cta .rank-math-cta-box.width-40{max-width:40%}#rank-math-pro-cta .rank-math-cta-box.width-30{max-width:30%}}#rank-math-pro-cta .rank-math-cta-box.blue-ticks ul li:before{background:#069de3}#rank-math-pro-cta .rank-math-cta-table{margin-bottom:2rem;border:1px solid #dadfe4;border-radius:6px;background:#fff}#rank-math-pro-cta .rank-math-cta-table .less-padding{padding:1.5rem}#rank-math-pro-cta .rank-math-cta-table .less-padding h3{margin-bottom:1rem}#rank-math-pro-cta .rank-math-cta-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem .825rem;border-bottom:1px solid #dadfe4}#rank-math-pro-cta .rank-math-cta-header h2{font-size:1.125rem;font-weight:500;margin:0}#rank-math-pro-cta .rank-math-cta-body{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.25rem 1.5rem 1.25rem .825rem}#rank-math-pro-cta .rank-math-cta-body svg,#rank-math-pro-cta .rank-math-cta-body .dashicon{margin-right:1.25rem;fill:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body span.dashicon{font-size:50px;width:50px;height:50px;color:#ed5e5e}#rank-math-pro-cta .rank-math-cta-body p{font-size:1rem;-webkit-box-flex:1;-ms-flex:1;flex:1}#rank-math-pro-cta .rank-math-cta-body .button{line-height:40px;margin-left:1.25rem}#rank-math-pro-cta .rank-math-cta-text{display:block;color:#7f868d}#rank-math-pro-cta .rank-math-cta-text span{margin-right:3px}#rank-math-pro-cta p,#rank-math-pro-cta ul{font-size:1rem;color:#7f868d}#rank-math-pro-cta p{margin-top:0}#rank-math-pro-cta ul{margin-bottom:1.5rem}#rank-math-pro-cta ul li{font-size:1rem;line-height:1.5;margin-bottom:1rem;padding:0;border:0}#rank-math-pro-cta ul li:before{font-family:"dashicons";font-size:16px;line-height:18px;display:inline-block;width:18px;margin-right:8px;content:"ï…ž";text-align:center;vertical-align:-2px;color:#fff;border-radius:50%;background:#10ac84}#rank-math-pro-cta .button{font-weight:500;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:auto;max-width:100%;margin:0 auto;padding:0 2rem;text-align:center}#rank-math-pro-cta .button.is-link{margin-left:15px;padding:0;font-size:10px;background-color:rgba(0,0,0,0)}.rank-math-error-modal.rank-math-contentai-modal{background-color:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;height:auto}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content{margin-top:0}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content .components-modal__header{border:none}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta{position:static}.rank-math-error-modal.rank-math-contentai-modal .components-modal__content #rank-math-pro-cta .rank-math-cta-box{margin-top:0;max-width:100%}:root{--rankmath-wp-adminbar-height: 0}:root{--rankmath-et-seetings-bar-height: 90px;--rankmath-rm-modal-header-height: 58px;--rankmath-rm-modal-spacing: 30px;--rankmath-rm-modal-width: 400px}#rank-math-rm-app-root{position:absolute;z-index:1;top:0;left:0;height:0;width:0;overflow:visible}.rank-math-rm-app{position:absolute;top:0;left:0;height:0;width:0;overflow:visible}#rank-math-rm-settings-bar-root{position:absolute}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root *{pointer-events:auto}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top-left,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom-left{left:calc(50% + 45px)}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-top-right,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-bottom-right{right:calc(50% + 45px)}body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-left,body.rank-math-et-settings-bar-is-inactive #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-right{top:calc(50% + 45px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-top-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-top-right{top:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-bottom-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-bottom-right{bottom:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-mobile-right{top:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom-left{left:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-top-right,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-bottom-right{right:calc(100% + 24px)}body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-left,body.rank-math-et-settings-bar-is-active #rank-math-rm-settings-bar-root.rank-math-rm-settings-bar-root-is-desktop-right{top:calc(100% + 24px)}.rank-math-rm-modal-toggle-button{background-image:linear-gradient(45deg, #724BB7 0%, #4098D7 100%) !important}.rank-math-rm-modal-button{display:block;height:auto;max-width:100%;margin:0;text-align:center;text-decoration:none;line-height:1;color:inherit;background-color:rgba(0,0,0,0);border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;white-space:nowrap;cursor:pointer}.rank-math-rm-modal-button::-moz-focus-inner{border-style:none;padding:0}body.rank-math-et-settings-bar-is-top .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-right .rank-math-rm-modal{top:calc(var(--rankmath-wp-adminbar-height) + var(--rankmath-et-seetings-bar-height))}body.rank-math-et-settings-bar-is-top .rank-math-rm-modal,body.rank-math-et-settings-bar-is-top-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom-right .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom .rank-math-rm-modal{left:var(--rankmath-rm-modal-spacing)}body.rank-math-et-settings-bar-is-top-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-left .rank-math-rm-modal,body.rank-math-et-settings-bar-is-bottom-left .rank-math-rm-modal{left:calc(100vw - var(--rankmath-rm-modal-width) - var(--rankmath-rm-modal-spacing))}.rank-math-rm-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:normal;position:relative;top:calc(var(--rankmath-rm-modal-spacing) + var(--rankmath-wp-adminbar-height));display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:var(--rankmath-rm-modal-width);padding-top:var(--rankmath-rm-modal-header-height);background:#fff;-webkit-box-shadow:0 5px 30px rgba(44,135,218,.2);box-shadow:0 5px 30px rgba(44,135,218,.2);-webkit-font-smoothing:subpixel-antialiased}.rank-math-rm-modal-is-hidden{display:none}.rank-math-rm-modal-content{position:relative;z-index:0;overflow:hidden;overflow-y:auto;max-height:calc(100vh - var(--rankmath-wp-adminbar-height) - var(--rankmath-et-seetings-bar-height) - var(--rankmath-rm-modal-spacing) - var(--rankmath-rm-modal-header-height))}body.rank-math-et-settings-bar-is-left .rank-math-rm-modal-content,body.rank-math-et-settings-bar-is-right .rank-math-rm-modal-content{max-height:calc(100vh - var(--rankmath-wp-adminbar-height) - var(--rankmath-rm-modal-spacing)*2 - var(--rankmath-rm-modal-header-height))}.rank-math-rm-modal-content h1,.rank-math-rm-modal-content h2,.rank-math-rm-modal-content h3,.rank-math-rm-modal-content h4,.rank-math-rm-modal-content h5,.rank-math-rm-modal-content h6{padding-bottom:0}.rank-math-rm-modal-header{position:absolute;z-index:1;top:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:var(--rankmath-rm-modal-header-height);padding-right:21px;padding-left:26px;color:#fff;background-color:#6c2eb9;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:move}.rank-math-rm-modal-header-title{font-family:"Open Sans",Helvetica,Roboto,Arial,sans-serif;font-size:18px;font-weight:600;font-style:normal;line-height:16px;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;letter-spacing:0;text-transform:none;color:#fff}.rank-math-rm-modal-header-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.rank-math-rm-modal-header-option{display:block}.rank-math-rm-modal-header-discard-button{width:100%;height:100%;padding:4px}.rank-math-rm-modal-header-discard-button svg{position:relative;top:2px;width:26px;height:26px;fill:#fff}#rank-math-primary-term-input .rank-math-primary-term-select{margin-bottom:20px}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__label{display:inline-block;font-family:"Open Sans",Helvetica,Roboto,Arial,sans-serif;color:#32373c;font-weight:600;line-height:20px;margin:0;padding:0;border:0;font-size:14px;white-space:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#rank-math-primary-term-input .rank-math-primary-term-select .components-select-control__input{background-color:#f1f5f9;border-radius:3px;font-family:"Open Sans",Helvetica,Roboto,Arial,sans-serif;padding-left:10px;outline:0;color:#4c5866;font-size:13px;font-weight:600;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__suffix svg path{fill:#4c5866}#rank-math-primary-term-input .rank-math-primary-term-select .components-input-control__backdrop{border:0;-webkit-box-shadow:none;box-shadow:none}body.rtl #rank-math-rm-app-root{left:auto;right:0}body.rtl #rank-math-rm-app-root .rank-math-rm-modal{left:auto;right:var(--rankmath-rm-modal-spacing)}body.rtl #rank-math-rm-app-root .rank-math-rm-modal .serp-preview-title .seo-score{float:left}body.rtl #rank-math-rm-app-root .rank-math-rm-modal #rank-math-compare-keywords-trigger{left:16px;right:auto}#rank-math-lock-modified-date-wrapper{margin-left:1px}#rank-math-lock-modified-date-wrapper button{-webkit-box-shadow:none;box-shadow:none;outline:none;height:40px;border-radius:3px}#rank-math-lock-modified-date-wrapper button.rank-math-lock-modified-date{position:absolute;right:0;top:-105%}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title .seo-score{display:block}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-preview-title::before{font-weight:500;letter-spacing:0}.components-tab-panel__tab-content .rank-math-tab-content-general .serp-result{position:absolute;top:-1px;left:0}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs{background:#7e3bd0;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:100%;line-height:1;display:block;width:auto;padding:13px 20px;-webkit-transition:background .5s ease-in-out;transition:background .5s ease-in-out;vertical-align:baseline;text-decoration:none;color:#fff;background:rgba(0,0,0,0)}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link) i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover{background:#7435c1}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not([id]){margin-left:auto}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active){padding:13px 19px 13px 26px}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{margin-bottom:0}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active,.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:hover{background:#8f42eb}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link)::before,.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tabs button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link)::after{display:none}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tab-content .rank-math-ca-credits{right:15px;margin-top:10px;color:#fff}.rank-math-rm-modal .rank-math-tabs .components-tab-panel__tab-content .rank-math-ca-credits button.update-credits{height:auto;color:#fff}.rank-math-modal .components-modal__header-heading{padding-bottom:0}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active::after{background:#2c87da !important}.rank-math-tabs>.components-tab-panel__tab-content>div>div:first-child{margin-top:10px;border-top:0;border-bottom:0}.rank-math-tabs>.components-tab-panel__tab-content select,.rank-math-tabs>.components-tab-panel__tab-content input[type=text]{min-height:30px}.rank-math-tabs>.components-tab-panel__tab-content textarea{font-family:inherit;line-height:1.42857143}.rank-math-tabs .cmb2-metabox-description{font-weight:400}.rank-math-tabs .rank-math-datepicker>button{color:inherit}.rank-math-tooltip label{cursor:pointer}.rank-math-tooltip label:before{height:21px;vertical-align:middle}.rank-math-tooltip label:hover{color:#d30c5c}.rank-math-tooltip input:checked+label{color:#d30c5c}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link){font-size:13px;height:44px;text-transform:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):hover i,.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link):not(.is-active):hover i{background:rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active{-webkit-box-shadow:none;box-shadow:none}.rank-math-modal .rank-math-tabs>.components-tab-panel__tabs button:not(.is-secondary):not(.is-primary):not(.is-tertiary):not(.is-link).is-active:after{display:block;background:#d30c5c}.rank-math-modal .rank-math-button-devices .components-button.active,.rank-math-modal .rank-math-button-devices .components-button:hover{background:#f6e7ee !important}.rank-math-modal.rank-math-modal-trends-tool{width:930px;max-height:580px}PK     ¥ŠU]±b€­+  ­+  %  includes/3rdparty/divi/class-divi.phpnu „[µü¤        <?php
/**
 * Divi integration.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Divi;

use RankMath\KB;
use RankMath\Helper;
use RankMath\Helpers\Editor;
use RankMath\Helpers\Str;
use RankMath\Schema\DB as Schema_DB;
use RankMath\Schema\Admin as Schema_Admin;
use RankMath\Traits\Hooker;
use RankMath\Admin\Metabox\Screen;
use WP_Dependencies;

defined( 'ABSPATH' ) || exit;

/**
 * Divi class.
 */
class Divi {

	use Hooker;

	/**
	 * Screen object.
	 *
	 * @var Screen
	 */
	private $screen;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->action( 'wp', 'init' );
	}

	/**
	 * Initialize.
	 */
	public function init() {
		if ( ! $this->can_add_seo_tab() ) {
			return;
		}

		$this->screen = new Screen();
		$this->screen->load_screen( 'post' );

		$this->action( 'template_redirect', 'set_window_lodash', 0 );
		$this->action( 'wp_enqueue_scripts', 'register_rankmath_react' );
		$this->action( 'wp_enqueue_scripts', 'add_json_data', 0 );
		$this->action( 'wp_footer', 'footer_enqueue_scripts', 11 );
		remove_action( 'wp_footer', [ rank_math()->json, 'output' ], 0 );
		add_action( 'wp_footer', [ rank_math()->json, 'output' ], 11 );
		$this->filter( 'script_loader_tag', 'add_et_tag', 10, 3 );
	}

	/**
	 * Set the global lodash variable.
	 *
	 * Lodash's `noConflict` would prevent UnderscoreJS from taking over the underscore (_)
	 * global variable. Because Underscore.js will later also be assigned to the underscore (_)
	 * global this function should run as early as possible.
	 */
	public function set_window_lodash() {
		wp_register_script( 'rm-set-window-lodash', '', [ 'lodash' ], rank_math()->version, false );
		wp_enqueue_script( 'rm-set-window-lodash' );
		wp_add_inline_script(
			'rm-set-window-lodash',
			join(
				"\r\n ",
				[
					'window.isLodash = function() {',
					"if ( typeof window._ !== 'function' || typeof window._.forEach !== 'function' ) {",
					'return false;',
					'}',
					'var isLodash = true;',
					'window._.forEach(',
					"[ 'cloneDeep', 'at', 'add', 'ary', 'attempt' ],",
					'function( fn ) {',
					"if ( isLodash && typeof window._[ fn ] !== 'function' ) {",
					'isLodash = false;',
					'}',
					'}',
					');',
					'return isLodash;',
					'}',
					'if ( window.isLodash() ) { window.lodash = window._.noConflict(); }',
				]
			)
		);
	}

	/**
	 * Register RankMath React and ReactDOM.
	 *
	 * Registers the native WP version of react with a custom handle for use in the
	 * RankMath module. Divi builder dequeues and deregisters native WP react scripts
	 * and replaces them with their own copy of React. Their copy might not be of the
	 * same version as the one RankMath requires.
	 */
	public function register_rankmath_react() {
		$path   = site_url( '/wp-includes/js/dist/vendor/' );
		$suffix = wp_scripts_get_suffix();
		wp_register_script( 'rm-react', "{$path}react{$suffix}.js", [ 'wp-polyfill', 'react' ], '16.13.1', true );
		wp_register_script( 'rm-react-dom', "{$path}react-dom{$suffix}.js", [ 'rm-react', 'react-dom' ], '16.13.1', true );
	}

	/**
	 * Add JSON data.
	 */
	public function add_json_data() {
		$this->maybe_load_editor_deps();

		if ( Helper::has_cap( 'onpage_snippet' ) ) {

			// Schema.
			$schemas = $this->get_schema_data( get_the_ID() );
			Helper::add_json( 'schemas', $schemas );
			Helper::add_json( 'customSchemaImage', esc_url( rank_math()->plugin_url() . 'includes/modules/schema/assets/img/custom-schema-builder.jpg' ) );

			// Trends.
			$trends_upgrade_link = KB::get( 'pro', 'Divi General Tab Trends' );
			Helper::add_json( 'trendsUpgradeLink', esc_url_raw( $trends_upgrade_link ) );
			Helper::add_json( 'trendsPreviewImage', esc_url( rank_math()->plugin_url() . 'assets/admin/img/trends-preview.jpg' ) );
		}

		Helper::add_json(
			'api',
			[
				'root'  => esc_url_raw( get_rest_url() ),
				'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
			]
		);

		Helper::add_json(
			'keywordsApi',
			[
				'url' => 'https://api.rankmath.com/ltkw/v1/',
			]
		);

		Helper::add_json( 'links', KB::get_links() );

		Helper::add_json(
			'validationl10n',
			[
				'regexErrorDefault'    => __( 'Please use the correct format.', 'seo-by-rank-math' ),
				'requiredErrorDefault' => __( 'This field is required.', 'seo-by-rank-math' ),
				'emailErrorDefault'    => __( 'Please enter a valid email address.', 'seo-by-rank-math' ),
				'urlErrorDefault'      => __( 'Please enter a valid URL.', 'seo-by-rank-math' ),
			]
		);

		Helper::add_json( 'capitalizeTitle', Helper::get_settings( 'titles.capitalize_titles' ) );
		Helper::add_json( 'blogName', get_bloginfo( 'name' ) );

		if ( is_admin_bar_showing() && Helper::has_cap( 'admin_bar' ) ) {
			Helper::add_json( 'objectID', get_the_ID() );
			Helper::add_json( 'objectType', 'post' );
		}
	}

	/**
	 * Enqueue scripts.
	 */
	public function footer_enqueue_scripts() {
		/**
		 * Allow other plugins to enqueue/dequeue admin styles or scripts before plugin assets.
		 */
		$this->do_action( 'admin/before_editor_scripts' );

		$divi_deps = [
			'jquery',
			'lodash',
			'rm-react',
			'rm-react-dom',
			'rm-set-window-lodash',
			'et-dynamic-asset-helpers',
			'wp-api-fetch',
			'wp-block-editor',
			'wp-components',
			'wp-compose',
			'wp-core-data',
			'wp-data',
			'wp-element',
			'wp-hooks',
			'wp-media-utils',
			'wp-wordcount',
			'rank-math-analyzer',
			'rank-math-app',
		];

		if ( is_admin_bar_showing() && Helper::has_cap( 'admin_bar' ) ) {
			wp_enqueue_style( 'rank-math', rank_math()->assets() . 'css/rank-math.css', null, rank_math()->version );
			wp_enqueue_script( 'rank-math', rank_math()->assets() . 'js/rank-math.js', [ 'jquery' ], rank_math()->version, true );
		}

		wp_enqueue_style( 'rank-math-common', rank_math()->plugin_url() . 'assets/admin/css/common.css', null, rank_math()->version );
		wp_enqueue_style( 'wp-components' );
		wp_enqueue_style( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/css/divi.css', [], rank_math()->version );

		wp_register_script( 'rank-math-analyzer', rank_math()->plugin_url() . 'assets/admin/js/analyzer.js', null, rank_math()->version, true );
		wp_enqueue_script( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi.js', $divi_deps, rank_math()->version, true );
		wp_enqueue_script( 'rank-math-divi-iframe', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi-iframe.js', [ 'jquery', 'lodash' ], rank_math()->version, true );

		wp_set_script_translations( 'rank-math-app', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		wp_set_script_translations( 'rank-math-divi-iframe', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		wp_set_script_translations( 'rank-math-editor', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		wp_set_script_translations( 'rank-math-analyzer', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );

		if ( Helper::is_module_active( 'rich-snippet' ) ) {
			wp_enqueue_style( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/css/schema.css', [ 'wp-components' ], rank_math()->version );

			wp_enqueue_script( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/js/schema-gutenberg.js', [ 'rank-math-editor' ], rank_math()->version, true );
			wp_set_script_translations( 'rank-math-schema', 'seo-by-rank-math', rank_math()->plugin_dir() . 'languages/' );
		}

		rank_math()->variables->setup();
		rank_math()->variables->setup_json();

		$this->screen->localize();

		$this->print_react_containers();

		/**
		 * Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
		 */
		$this->do_action( 'admin/editor_scripts', $this->screen );
	}

	/**
	 * Add et attributes to script tags.
	 *
	 * @param string $tag The <script> tag for the enqueued script.
	 * @param string $handle The script's registered handle.
	 *
	 * @return string
	 */
	public function add_et_tag( $tag, $handle ) {
		$script_handles = [
			'rm-react',
			'rm-react-dom',
			'lodash',
			'moment',
			'rank-math',
			'rank-math-analyzer',
			'rank-math-schema',
			'rank-math-editor',
			'rank-math-content-ai',
			'rank-math-app',
			// Scripts required by pro version.
			'wp-plugins',
			'jquery-ui-autocomplete',
			'rank-math-pro-editor',
			'rank-math-schema-pro',
			'rank-math-pro-schema-filters',
			'rank-math-pro-news',
		];

		$exclude_handles = [
			'wp-util',
			'wp-backbone',
			'wp-plupload',
			'wp-mediaelement',
			'wp-color-picker',
			'wp-color-picker-alpha',
			'wp-embed',
			'wp-hooks',
		];

		if ( in_array( $handle, $exclude_handles, true ) ) {
			return $tag;
		}

		if ( Str::starts_with( 'wp-', $handle ) || in_array( $handle, $script_handles, true ) ) {
			// These tags load in parent window only, not in Divi iframe.
			$tag = preg_replace(
				'/<script\b(?![^>]*\bclass=)([^>]*)>/i',
				'<script class="et_fb_ignore_iframe"$1>',
				$tag
			);
		}

		return $tag;
	}

	/**
	 * Print React containers onto the screen.
	 */
	public function print_react_containers() {
		echo '<div id="rank-math-rm-app-root" class="et_fb_ignore_iframe"></div>';
		echo '<div id="rank-math-rm-settings-bar-root" class="et_fb_ignore_iframe"></div>';
	}


	/**
	 * Can add SEO in Divi Page Builder.
	 *
	 * @return bool
	 */
	private function can_add_seo_tab() {
		if (
			! Helper::is_divi_frontend_editor() ||
			! defined( 'ET_BUILDER_PRODUCT_VERSION' ) ||
			! version_compare( '4.9.2', ET_BUILDER_PRODUCT_VERSION, 'le' )
		) {
			return false;
		}

		/**
		 * Filter to show/hide SEO Tab in Divi Editor.
		 */
		if ( ! $this->do_filter( 'divi/add_seo_tab', true ) ) {
			return false;
		}

		$post_type = get_post_type();
		if ( $post_type && ! Helper::get_settings( 'titles.pt_' . $post_type . '_add_meta_box' ) ) {
			return false;
		}

		return Editor::can_add_editor();
	}

	/**
	 * Get Schema Data.
	 *
	 * @param int $post_id Post ID.
	 *
	 * @return array $schemas Schema Data.
	 */
	private function get_schema_data( $post_id ) {
		$schemas = Schema_DB::get_schemas( $post_id );
		if ( ! empty( $schemas ) || metadata_exists( 'post', $post_id, 'rank_math_rich_snippet' ) ) {
			return $schemas;
		}

		$post_type    = get_post_type( $post_id );
		$default_type = ucfirst( Helper::get_default_schema_type( $post_id ) );
		if ( ! $default_type ) {
			return [];
		}

		$schemas['new-9999'] = [
			'@type'    => $default_type,
			'metadata' => [
				'title'     => Helper::sanitize_schema_title( $default_type ),
				'type'      => 'template',
				'shortcode' => uniqid( 's-' ),
				'isPrimary' => true,
			],
		];

		return $schemas;
	}

	/**
	 * Ensures required dependencies are loaded when toolbar is hidden.
	 *
	 * @return void
	 */
	private function maybe_load_editor_deps() {
		if ( is_admin_bar_showing() ) {
			return;
		}

		Helper::add_json( 'security', wp_create_nonce( 'rank-math-ajax-nonce' ) );
		Helper::add_json( 'restNonce', ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ) );
	}
}
PK     ¥ŠU]žžžÓ      +  includes/3rdparty/divi/class-divi-admin.phpnu „[µü¤        <?php
/**
 * Divi admin integration.
 *
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath\Divi;

use RankMath\Traits\Hooker;

defined( 'ABSPATH' ) || exit;

/**
 * Divi class.
 */
class Divi_Admin {

	use Hooker;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->init();
	}

	/**
	 * Initialize Divi admin.
	 */
	public function init() {
		$screen = get_current_screen();
		if ( 'toplevel_page_et_divi_options' === $screen->id ) {
			$this->action( 'admin_enqueue_scripts', 'enqueue_divi_admin_scripts' );
		}
	}

	/**
	 * Enqueue scripts for Divi admin options screen.
	 */
	public function enqueue_divi_admin_scripts() {
		wp_enqueue_script(
			'rank-math-divi-admin',
			rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi-admin.js',
			[
				'jquery',
				'react',
				'react-dom',
				'wp-components',
				'wp-element',
				'wp-i18n',
				'wp-polyfill',
			],
			rank_math()->version,
			true
		);
	}
}
PK     ¥ŠU]�ã&~
  ~
    includes/class-updates.phpnu „[µü¤        <?php
/**
 * Functions and actions related to updates.
 *
 * @since      0.9.0
 * @package    RankMath
 * @subpackage RankMath\Core
 * @author     Rank Math <support@rankmath.com>
 */

namespace RankMath;

use RankMath\Helper;
use RankMath\Traits\Hooker;


defined( 'ABSPATH' ) || exit;

/**
 * Updates class
 */
class Updates implements Runner {

	use Hooker;

	/**
	 * Updates that need to be run
	 *
	 * @var array
	 */
	private static $updates = [
		'1.0.84'    => 'updates/update-1.0.84.php',
		'1.0.86'    => 'updates/update-1.0.86.php',
		'1.0.89'    => 'updates/update-1.0.89.php',
		'1.0.98'    => 'updates/update-1.0.98.php',
		'1.0.103.1' => 'updates/update-1.0.103.1.php',
		'1.0.104'   => 'updates/update-1.0.104.php',
		'1.0.107.3' => 'updates/update-1.0.107.3.php',
		'1.0.110'   => 'updates/update-1.0.110.php',
		'1.0.201'   => 'updates/update-1.0.201.php',
		'1.0.201.1' => 'updates/update-1.0.201.1.php',
		'1.0.202'   => 'updates/update-1.0.202.php',
		'1.0.211'   => 'updates/update-1.0.211.php',
		'1.0.232'   => 'updates/update-1.0.232.php',
		'1.0.237'   => 'updates/update-1.0.237.php',
		'1.0.238'   => 'updates/update-1.0.238.php',
		'1.0.239'   => 'updates/update-1.0.239.php',
		'1.0.250'   => 'updates/update-1.0.250.php',
		'1.0.251'   => 'updates/update-1.0.251.php',
		'1.0.264'   => 'updates/update-1.0.264.php',
		'1.0.273'   => 'updates/update-1.0.273.php',
	];

	/**
	 * Register hooks.
	 */
	public function hooks() {
		$this->action( 'admin_init', 'do_updates' );
	}

	/**
	 * Check if any update is required.
	 */
	public function do_updates() {
		$installed_version = get_option( 'rank_math_version', '1.0.0' );

		// Maybe it's the first install.
		if ( ! $installed_version ) {
			return;
		}

		if ( version_compare( $installed_version, rank_math()->version, '<' ) ) {
			$this->perform_updates();
		}
	}

	/**
	 * Perform all updates.
	 */
	public function perform_updates() {
		$installed_version = get_option( 'rank_math_version', '1.0.0' );

		foreach ( self::$updates as $version => $path ) {
			if ( version_compare( $installed_version, $version, '<' ) ) {
				include $path;
				update_option( 'rank_math_version', $version );
			}
		}

		// Save install date.
		if ( false === boolval( get_option( 'rank_math_install_date' ) ) ) {
			update_option( 'rank_math_install_date', Helper::get_current_time() );
		}

		// Clear rollback option if necessary.
		if ( rank_math()->version !== get_option( 'rank_math_rollback_version' ) ) {
			delete_option( 'rank_math_rollback_version' );
		}

		update_option( 'rank_math_version', rank_math()->version, false );
		update_option( 'rank_math_db_version', rank_math()->db_version, false );
	}
}
PK       �ŠU]Š/t‹   ‹   '                vendor/composer/autoload_namespaces.phpnu „[µü¤        PK       �ŠU]ç•ŽKÝ:  Ý:  %            â   vendor/composer/InstalledVersions.phpnu „[µü¤        PK       �ŠU] Õ.  .              <  vendor/composer/LICENSEnu „[µü¤        PK       �ŠU]Ûú­+m»  m»  %            ‰@  vendor/composer/autoload_classmap.phpnu „[µü¤        PK       �ŠU]”~Ï%”9  ”9              Kü  vendor/composer/installed.jsonnu „[µü¤        PK       �ŠU]º�›  ›  "            -6 vendor/composer/platform_check.phpnu „[µü¤        PK       �ŠU]© �ðÙ  Ù  #            : vendor/composer/autoload_static.phpnu „[µü¤        PK       �ŠU]Æ5KyÄ>  Ä>              p vendor/composer/ClassLoader.phpnu „[µü¤        PK       �ŠU]1€Õ¼z  z  !            ƒR vendor/composer/autoload_psr4.phpnu „[µü¤        PK       �ŠU].¾}Í    "            NT vendor/composer/autoload_files.phpnu „[µü¤        PK       �ŠU]9Xw                ¢V vendor/composer/installed.phpnu „[µü¤        PK       �ŠU]¾¦<Ê  Ê  !            c vendor/composer/autoload_real.phpnu „[µü¤        PK       �ŠU]ŒÛ                  )j vendor/cmb2/cmb2/index.phpnu „[µü¤        PK       �ŠU] =g—M‰  M‰              �j vendor/cmb2/cmb2/LICENSEnu „[µü¤        PK       �ŠU]/Ï¡§C
  C
  %            $ô vendor/cmb2/cmb2/playwright.config.jsnu „[µü¤        PK       �ŠU]ê”¾	  ¾	  (            ¼þ vendor/cmb2/cmb2/scripts/build-banner.jsnu „[µü¤        PK       �ŠU]ûJåÈ      #            Ò vendor/cmb2/cmb2/.codex/config.tomlnu „[µü¤        PK       �ŠU]@ýðÞî  î              =	 vendor/cmb2/cmb2/composer.jsonnu „[µü¤        PK       �ŠU]¢»5ö                  y vendor/cmb2/cmb2/js/index.phpnu „[µü¤        PK       �ŠU]¤w/®›  ®›  5            á vendor/cmb2/cmb2/js/jquery-ui-timepicker-addon.min.jsnu „[µü¤        PK       ‚ŠU]J5Åá›  á›              ôª vendor/cmb2/cmb2/js/cmb2.jsnu „[µü¤        PK       ‚ŠU]ù-*|  *|               G vendor/cmb2/cmb2/js/cmb2.min.jsnu „[µü¤        PK       ‚ŠU]î	ó®    *            ™Ã vendor/cmb2/cmb2/.beads/interactions.jsonlnu „[µü¤        PK       ‚ŠU]“ùC+t
  t
  #            Ý vendor/cmb2/cmb2/.beads/config.yamlnu „[µü¤        PK       ‚ŠU]ñ¬ÈÛ&  &  0            Óç vendor/cmb2/cmb2/.beads/hooks/prepare-commit-msgnu „[µü¤        PK       ‚ŠU]ú[{Âî  î  (            Yí vendor/cmb2/cmb2/.beads/hooks/pre-commitnu „[µü¤        PK       ‚ŠU]¢cü    +            Ÿò vendor/cmb2/cmb2/.beads/hooks/post-checkoutnu „[µü¤        PK       ‚ŠU]]4ïî  î  (            ý÷ vendor/cmb2/cmb2/.beads/hooks/post-mergenu „[µü¤        PK       ‚ŠU]·R¯à  à  &            Cý vendor/cmb2/cmb2/.beads/hooks/pre-pushnu „[µü¤        PK       ‚ŠU]›�ã±»   »   %            y vendor/cmb2/cmb2/.beads/metadata.jsonnu „[µü¤        PK       ‚ŠU]ŽNFÞÏ  Ï  $            ‰ vendor/cmb2/cmb2/.beads/issues.jsonlnu „[µü¤        PK       ‚ŠU]ªo¬/
  
  $            ¬ vendor/cmb2/cmb2/tools/phpcs/run.phpnu „[µü¤        PK       ‚ŠU]�õoP      .            
 vendor/cmb2/cmb2/tools/phpcs/maybe-install.phpnu „[µü¤        PK       ‚ŠU]Ü&Ú-õ  õ  *            h vendor/cmb2/cmb2/tools/phpcs/composer.jsonnu „[µü¤        PK       ‚ŠU]í*\è                · vendor/cmb2/cmb2/init.phpnu „[µü¤        PK       ‚ŠU]â£Š¤  ¤              / vendor/cmb2/cmb2/.jshintrcnu „[µü¤        PK       ‚ŠU]ûxÛ    #            1 vendor/cmb2/cmb2/.wp-env-tests.jsonnu „[µü¤        PK       ‚ŠU]™�á{  {              j2 vendor/cmb2/cmb2/bootstrap.phpnu „[µü¤        PK       ‚ŠU]`P³äe  e  *            3: vendor/cmb2/cmb2/includes/CMB2_Options.phpnu „[µü¤        PK       ‚ŠU]>«{fÔ  fÔ  "            òR vendor/cmb2/cmb2/includes/CMB2.phpnu „[µü¤        PK       ‚ŠU]tÙMô2  ô2  .            ª' vendor/cmb2/cmb2/includes/helper-functions.phpnu „[µü¤        PK       ‚ŠU]þÄ×	  	  =            üZ vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Select.phpnu „[µü¤        PK       ‚ŠU]�g»8’  ’  <            pd vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Radio.phpnu „[µü¤        PK       ‚ŠU]ð5—Df  f  9            nm vendor/cmb2/cmb2/includes/types/CMB2_Type_Picker_Base.phpnu „[µü¤        PK       ‚ŠU]Ù("Ÿ  Ÿ  ;            =s vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Base.phpnu „[µü¤        PK       ‚ŠU]¡Ðq‰Ó  Ó  N            G† vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Datetime_Timestamp_Timezone.phpnu „[µü¤        PK       ‚ŠU]kèfJ  J  I            ˜� vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Radio_Hierarchical.phpnu „[µü¤        PK       ‚ŠU]Ãhý	˜  ˜  :            [‘ vendor/cmb2/cmb2/includes/types/CMB2_Type_Counter_Base.phpnu „[µü¤        PK       ‚ŠU]ë�I�  �  2            ]Ÿ vendor/cmb2/cmb2/includes/types/CMB2_Type_Text.phpnu „[µü¤        PK       ‚ŠU]ò{ÒÔª  ª  ;            @¥ vendor/cmb2/cmb2/includes/types/CMB2_Type_Textarea_Code.phpnu „[µü¤        PK       ‚ŠU]i�ÒØÆ!  Æ!  7            U© vendor/cmb2/cmb2/includes/types/CMB2_Type_File_Base.phpnu „[µü¤        PK       ‚ŠU]$›T,    3            ‚Ë vendor/cmb2/cmb2/includes/types/CMB2_Type_Radio.phpnu „[µü¤        PK       ‚ŠU]C²Ü”  ”  2            Ð vendor/cmb2/cmb2/includes/types/CMB2_Type_Base.phpnu „[µü¤        PK       ‚ŠU]�w’  ’  7            ÷ã vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Time.phpnu „[µü¤        PK       ‚ŠU]Ú§W#å  å  3            ðæ vendor/cmb2/cmb2/includes/types/CMB2_Type_Title.phpnu „[µü¤        PK       ‚ŠU]ž¹QM	  	  7            8ë vendor/cmb2/cmb2/includes/types/CMB2_Type_File_List.phpnu „[µü¤        PK       ‚ŠU]Ëª3/    A            µô vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Multicheck.phpnu „[µü¤        PK       ‚ŠU]ZÈ¤  ¤  2            7ü vendor/cmb2/cmb2/includes/types/CMB2_Type_File.phpnu „[µü¤        PK       ‚ŠU]1ÂSÎÂ  Â  8            = vendor/cmb2/cmb2/includes/types/CMB2_Type_Multi_Base.phpnu „[µü¤        PK       ‚ŠU]sÔ‚¡    5            g vendor/cmb2/cmb2/includes/types/CMB2_Type_Wysiwyg.phpnu „[µü¤        PK       ‚ŠU]`s+ú—  —  =            ë+ vendor/cmb2/cmb2/includes/types/CMB2_Type_Select_Timezone.phpnu „[µü¤        PK       ‚ŠU]ñ�~•ì  ì  J            ï. vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Select_Hierarchical.phpnu „[µü¤        PK       ‚ŠU]ì4î‡V	  V	  E            U5 vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Datetime_Timestamp.phpnu „[µü¤        PK       ‚ŠU]khþ–Ÿ  Ÿ  4             ? vendor/cmb2/cmb2/includes/types/CMB2_Type_Select.phpnu „[µü¤        PK       ‚ŠU]¾-  -  9            #B vendor/cmb2/cmb2/includes/types/CMB2_Type_Colorpicker.phpnu „[µü¤        PK       ‚ŠU]—:[	  	  4            ¹M vendor/cmb2/cmb2/includes/types/CMB2_Type_Oembed.phpnu „[µü¤        PK       ‚ŠU]/I†B  B  8            &R vendor/cmb2/cmb2/includes/types/CMB2_Type_Multicheck.phpnu „[µü¤        PK       ƒŠU]ÎM(à  à  7            ÐU vendor/cmb2/cmb2/includes/types/CMB2_Type_Text_Date.phpnu „[µü¤        PK       ƒŠU]®ü:j    6            Y vendor/cmb2/cmb2/includes/types/CMB2_Type_Checkbox.phpnu „[µü¤        PK       ƒŠU]óC¤g�  �  N            ‚_ vendor/cmb2/cmb2/includes/types/CMB2_Type_Taxonomy_Multicheck_Hierarchical.phpnu „[µü¤        PK       ƒŠU]Òu\F    6            �c vendor/cmb2/cmb2/includes/types/CMB2_Type_Textarea.phpnu „[µü¤        PK       ƒŠU]ö-E\Þ=  Þ=  5            h vendor/cmb2/cmb2/includes/shim/WP_REST_Controller.phpnu „[µü¤        PK       ƒŠU]‹‚€   €   %            J¦ vendor/cmb2/cmb2/includes/CMB2_JS.phpnu „[µü¤        PK       ƒŠU]§l˜Þ    /            Ç vendor/cmb2/cmb2/includes/CMB2_Hookup_Field.phpnu „[µü¤        PK       ƒŠU]¢»5ö      #            —Þ vendor/cmb2/cmb2/includes/index.phpnu „[µü¤        PK       ƒŠU]œWÓ‡D  ‡D  +            ß vendor/cmb2/cmb2/includes/CMB2_Sanitize.phpnu „[µü¤        PK       ƒŠU]öIáÐ  Ð  A            ç# vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller_Boxes.phpnu „[µü¤        PK       ƒŠU]Ô˜?tž+  ž+  ;            (B vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller.phpnu „[µü¤        PK       ƒŠU]­»7í?  í?  B            1n vendor/cmb2/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.phpnu „[µü¤        PK       ƒŠU]wìÕà[  à[  0            �® vendor/cmb2/cmb2/includes/rest-api/CMB2_REST.phpnu „[µü¤        PK       ƒŠU]“h¤
  ¤
  .            Ð
	 vendor/cmb2/cmb2/includes/CMB2_Hookup_Base.phpnu „[µü¤        PK       ƒŠU]–¦‚õ¶  õ¶  (            Ò	 vendor/cmb2/cmb2/includes/CMB2_Field.phpnu „[µü¤        PK       ƒŠU]j/,MŸS  ŸS  (            Í	 vendor/cmb2/cmb2/includes/CMB2_Types.phpnu „[µü¤        PK       ƒŠU]VV¸x$  $  '            !
 vendor/cmb2/cmb2/includes/CMB2_Ajax.phpnu „[µü¤        PK       ƒŠU]°x\¤  ¤  (            }E
 vendor/cmb2/cmb2/includes/CMB2_Boxes.phpnu „[µü¤        PK       ƒŠU]Áv�•2  •2  0            yR
 vendor/cmb2/cmb2/includes/CMB2_Field_Display.phpnu „[µü¤        PK       ƒŠU]S›ÂvÃm  Ãm  )            n…
 vendor/cmb2/cmb2/includes/CMB2_Hookup.phpnu „[µü¤        PK       ƒŠU]YÎ1$Þ,  Þ,  1            Šó
 vendor/cmb2/cmb2/includes/CMB2_Options_Hookup.phpnu „[µü¤        PK       ƒŠU]ýïøz  z  /            É  vendor/cmb2/cmb2/includes/CMB2_Show_Filters.phpnu „[µü¤        PK       ƒŠU]·—‘
ŸX  ŸX  (            ¢2 vendor/cmb2/cmb2/includes/CMB2_Utils.phpnu „[µü¤        PK       ƒŠU]®¢X°>  °>  '            ™‹ vendor/cmb2/cmb2/includes/CMB2_Base.phpnu „[µü¤        PK       ƒŠU]ûRLz�  �               Ê vendor/cmb2/cmb2/AGENTS.mdnu „[µü¤        PK       ƒŠU]ˆÏ)Db  b  .            wß vendor/cmb2/cmb2/.agents/skills/beads/SKILL.mdnu „[µü¤        PK       ƒŠU]'í!ž¯   ¯   8            7è vendor/cmb2/cmb2/.agents/skills/beads/agents/openai.yamlnu „[µü¤        PK       ƒŠU]ÞRM"˜  "˜  !            Né vendor/cmb2/cmb2/css/cmb2-rtl.cssnu „[µü¤        PK       ƒŠU]¢»5ö                  Á� vendor/cmb2/cmb2/css/index.phpnu „[µü¤        PK       ƒŠU]Ýª…m˜  ˜              *‚ vendor/cmb2/cmb2/css/cmb2.cssnu „[µü¤        PK       ƒŠU]&°úÜp�  p�  !            ~ vendor/cmb2/cmb2/css/cmb2.min.cssnu „[µü¤        PK       ƒŠU]DUVÁ‹�  ‹�  %            ?œ vendor/cmb2/cmb2/css/cmb2-rtl.min.cssnu „[µü¤        PK       ƒŠU]¿éØ€s  s  ,             vendor/wordpress/mcp-adapter/mcp-adapter.phpnu „[µü¤        PK       ƒŠU]�d�Ø  Ø  *            î# vendor/wordpress/mcp-adapter/composer.jsonnu „[µü¤        PK       ƒŠU]¡ôFN¬F  ¬F  '             - vendor/wordpress/mcp-adapter/LICENSE.mdnu „[µü¤        PK       ƒŠU]2¬Yõ  õ  0            #t vendor/wordpress/mcp-adapter/includes/Plugin.phpnu „[µü¤        PK       ƒŠU]ŽE@5b  b  L            x} vendor/wordpress/mcp-adapter/includes/Abilities/DiscoverAbilitiesAbility.phpnu „[µü¤        PK       ƒŠU]½àS»    I            V� vendor/wordpress/mcp-adapter/includes/Abilities/GetAbilityInfoAbility.phpnu „[µü¤        PK       ƒŠU]JÄ/¨D	  D	  I            Ó§ vendor/wordpress/mcp-adapter/includes/Abilities/McpAbilityHelperTrait.phpnu „[µü¤        PK       ƒŠU]WÁœ2S  S  I            �± vendor/wordpress/mcp-adapter/includes/Abilities/ExecuteAbilityAbility.phpnu „[µü¤        PK       ƒŠU]¨¬ìk9  9  f            \Ì vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/ErrorLogMcpObservabilityHandler.phpnu „[µü¤        PK       ƒŠU]7ã×c  c  b            +Õ vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/ConsoleObservabilityHandler.phpnu „[µü¤        PK       ƒŠU]ek³Xã  ã  b             Ü vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/McpObservabilityHelperTrait.phpnu „[µü¤        PK       ƒŠU]¿¯‡ìº  º  q            •ê vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/Contracts/McpObservabilityHandlerInterface.phpnu „[µü¤        PK       ƒŠU]T#“f#  #  b            ðî vendor/wordpress/mcp-adapter/includes/Infrastructure/Observability/NullMcpObservabilityHandler.phpnu „[µü¤        PK       ƒŠU]�àBÔ-  -  V            ¥ó vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/McpErrorFactory.phpnu „[µü¤        PK       ƒŠU]¹Ï0ûø  ø  i            /! vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/Contracts/McpErrorHandlerInterface.phpnu „[µü¤        PK       ƒŠU]¦BA�o  o  Z            À$ vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/NullMcpErrorHandler.phpnu „[µü¤        PK       ƒŠU]�9ëÍW  W  ^            ¹( vendor/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/ErrorLogMcpErrorHandler.phpnu „[µü¤        PK       ƒŠU]~—·ù…!  …!  ?            ž- vendor/wordpress/mcp-adapter/includes/Cli/StdioServerBridge.phpnu „[µü¤        PK       „ŠU]ú9Û¶d  d  8            ’O vendor/wordpress/mcp-adapter/includes/Cli/McpCommand.phpnu „[µü¤        PK       „ŠU]Ö8ê®>  >  F            ^c vendor/wordpress/mcp-adapter/includes/Servers/DefaultServerFactory.phpnu „[µü¤        PK       „ŠU]-ÁØjB  jB  C            u vendor/wordpress/mcp-adapter/includes/Core/McpComponentRegistry.phpnu „[µü¤        PK       „ŠU]=@§¸-  ¸-  8            ï· vendor/wordpress/mcp-adapter/includes/Core/McpServer.phpnu „[µü¤        PK       „ŠU]MÀ:Xf  f  B            æ vendor/wordpress/mcp-adapter/includes/Core/McpTransportFactory.phpnu „[µü¤        PK       „ŠU]zÕMîÜ%  Ü%  9            çõ vendor/wordpress/mcp-adapter/includes/Core/McpAdapter.phpnu „[µü¤        PK       „ŠU]v=öYÕ  Õ  A            , vendor/wordpress/mcp-adapter/includes/Transport/HttpTransport.phpnu „[µü¤        PK       „ŠU]$p~Žv  v  U            r. vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestContext.phpnu „[µü¤        PK       „ŠU]çi˜�  �  W            m4 vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpSessionValidator.phpnu „[µü¤        PK       „ŠU]\l=Á   Á   U            ƒC vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestHandler.phpnu „[µü¤        PK       „ŠU]Ã†lî  î  Q            Éd vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/SessionManager.phpnu „[µü¤        PK       „ŠU]2ý¡nÑ  Ñ  V            8€ vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportContext.phpnu „[µü¤        PK       „ŠU]¯HŸ=©!  ©!  P            �’ vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/RequestRouter.phpnu „[µü¤        PK       „ŠU]®­Ò¾    Z            ¸´ vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportHelperTrait.phpnu „[µü¤        PK       „ŠU]øIß&A  A  Y            S¹ vendor/wordpress/mcp-adapter/includes/Transport/Infrastructure/JsonRpcResponseBuilder.phpnu „[µü¤        PK       „ŠU]N•Ò*,  ,  W            Ç vendor/wordpress/mcp-adapter/includes/Transport/Contracts/McpRestTransportInterface.phpnu „[µü¤        PK       „ŠU]ÃÝµÉä  ä  S            ÐË vendor/wordpress/mcp-adapter/includes/Transport/Contracts/McpTransportInterface.phpnu „[µü¤        PK       „ŠU]sY`Ã  Ã  4            7Ð vendor/wordpress/mcp-adapter/includes/Autoloader.phpnu „[µü¤        PK       „ŠU]Rã�Z  Z  M            ^Ù vendor/wordpress/mcp-adapter/includes/Handlers/Resources/ResourcesHandler.phpnu „[µü¤        PK       „ŠU]�þ�<.4  .4  E            5ð vendor/wordpress/mcp-adapter/includes/Handlers/Tools/ToolsHandler.phpnu „[µü¤        PK       „ŠU]¸™5ÆN  N  E            Ø$ vendor/wordpress/mcp-adapter/includes/Handlers/HandlerHelperTrait.phpnu „[µü¤        PK       „ŠU]ŒAÕµ  µ  O            ›2 vendor/wordpress/mcp-adapter/includes/Handlers/Initialize/InitializeHandler.phpnu „[µü¤        PK       „ŠU]%ñBÄ  Ä  I            Ï9 vendor/wordpress/mcp-adapter/includes/Handlers/Prompts/PromptsHandler.phpnu „[µü¤        PK       „ŠU]åp“'	  '	  G            V vendor/wordpress/mcp-adapter/includes/Handlers/System/SystemHandler.phpnu „[µü¤        PK       „ŠU]r¸A™Y*  Y*  C            ª_ vendor/wordpress/mcp-adapter/includes/Domain/Utils/McpValidator.phpnu „[µü¤        PK       „ŠU]�¡ýx  x  H            vŠ vendor/wordpress/mcp-adapter/includes/Domain/Utils/SchemaTransformer.phpnu „[µü¤        PK       „ŠU]xZ#    J            f– vendor/wordpress/mcp-adapter/includes/Domain/Utils/McpAnnotationMapper.phpnu „[µü¤        PK       „ŠU]ÆËo&  &  F            õ« vendor/wordpress/mcp-adapter/includes/Domain/Resources/McpResource.phpnu „[µü¤        PK       „ŠU].Q—Î  Î  O            €Ò vendor/wordpress/mcp-adapter/includes/Domain/Resources/McpResourceValidator.phpnu „[µü¤        PK       „ŠU]D1¿  ¿  W            Íì vendor/wordpress/mcp-adapter/includes/Domain/Resources/RegisterAbilityAsMcpResource.phpnu „[µü¤        PK       „ŠU]u,qÙ™&  ™&  G             vendor/wordpress/mcp-adapter/includes/Domain/Tools/McpToolValidator.phpnu „[µü¤        PK       „ŠU]�’]é(#  (#  >            #) vendor/wordpress/mcp-adapter/includes/Domain/Tools/McpTool.phpnu „[µü¤        PK       „ŠU]ìQD…  …  O            ¹L vendor/wordpress/mcp-adapter/includes/Domain/Tools/RegisterAbilityAsMcpTool.phpnu „[µü¤        PK       …ŠU]}­_	j)  j)  B            ½] vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPrompt.phpnu „[µü¤        PK       …ŠU]^«lL°  °  S            ™‡ vendor/wordpress/mcp-adapter/includes/Domain/Prompts/RegisterAbilityAsMcpPrompt.phpnu „[µü¤        PK       …ŠU].3>e7  7  \            Ì� vendor/wordpress/mcp-adapter/includes/Domain/Prompts/Contracts/McpPromptBuilderInterface.phpnu „[µü¤        PK       …ŠU]~*'y  y  I            �¤ vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptBuilder.phpnu „[µü¤        PK       …ŠU]PkQè½6  ½6  K            �½ vendor/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptValidator.phpnu „[µü¤        PK       …ŠU]x
¦È                ¹ô vendor/autoload.phpnu „[µü¤        PK       …ŠU]'™¹n  n  7            ÿ÷ vendor/donatj/phpuseragentparser/.helpers/constants.phpnu „[µü¤        PK       …ŠU]BÇ¶Œ  Œ  8            Ôù vendor/donatj/phpuseragentparser/examples/procedural.phpnu „[µü¤        PK       …ŠU]‚ô'c  c  =            Èû vendor/donatj/phpuseragentparser/examples/object-oriented.phpnu „[µü¤        PK       †ŠU]æ¯ÐlÞ  Þ  +            ˜ý vendor/donatj/phpuseragentparser/.mddoc.xmlnu „[µü¤        PK       †ŠU]ìâƒX    .            Ñ vendor/donatj/phpuseragentparser/composer.jsonnu „[µü¤        PK       †ŠU]ÿ!§B  B  +            B vendor/donatj/phpuseragentparser/LICENSE.mdnu „[µü¤        PK       †ŠU]’ðóØ  Ø  )            ß vendor/donatj/phpuseragentparser/Makefilenu „[µü¤        PK       †ŠU]“�2#  2#  8             vendor/donatj/phpuseragentparser/src/UserAgentParser.phpnu „[µü¤        PK       †ŠU]m)Ži  i  <            ª> vendor/donatj/phpuseragentparser/src/UserAgent/Platforms.phpnu „[µü¤        PK       †ŠU]nÜþ©�  �  B            D vendor/donatj/phpuseragentparser/src/UserAgent/UserAgentParser.phpnu „[µü¤        PK       †ŠU][�«ÔÏ  Ï  E            rI vendor/donatj/phpuseragentparser/src/UserAgent/UserAgentInterface.phpnu „[µü¤        PK       †ŠU]À5šN	  N	  ;            ¶K vendor/donatj/phpuseragentparser/src/UserAgent/Browsers.phpnu „[µü¤        PK       †ŠU]ÿ’º/  /  <            oU vendor/donatj/phpuseragentparser/src/UserAgent/UserAgent.phpnu „[µü¤        PK       †ŠU]oòèQd  d  7            
Z vendor/donatj/phpuseragentparser/src/UserAgent/Bots.phpnu „[µü¤        PK       †ŠU]0Âò)  )  G            Õg vendor/a5hleyrich/wp-background-processing/classes/wp-async-request.phpnu „[µü¤        PK       †ŠU]³™ùZ  ùZ  L            uw vendor/a5hleyrich/wp-background-processing/classes/wp-background-process.phpnu „[µü¤        PK       ‡ŠU]ŽJïÓè  è  G            êÒ vendor/a5hleyrich/wp-background-processing/wp-background-processing.phpnu „[µü¤        PK       ‡ŠU]˜OÎ  Î  8            IÖ vendor/a5hleyrich/wp-background-processing/composer.jsonnu „[µü¤        PK       ‡ŠU]•.ZŒž  ž  ?            Ú vendor/a5hleyrich/wp-background-processing/.circleci/config.ymlnu „[µü¤        PK       ‡ŠU]½Ó7»$;  $;  6            Œâ vendor/a5hleyrich/wp-background-processing/license.txtnu „[µü¤        PK       ‡ŠU]TË{Lg  g  5             vendor/a5hleyrich/wp-background-processing/.phpcs.xmlnu „[µü¤        PK       ‡ŠU]Q6JÀ8  8  3            â) vendor/a5hleyrich/wp-background-processing/Makefilenu „[µü¤        PK       ‡ŠU]À5DÏ  Ï  8            }+ vendor/woocommerce/action-scheduler/action-scheduler.phpnu „[µü¤        PK       ‡ŠU]÷ÝQ§T  T  b            ´7 vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.phpnu „[µü¤        PK       ‡ŠU]ã=™“@  @  V            š; vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.phpnu „[µü¤        PK       ‡ŠU]ì—™  ™  <            `? vendor/woocommerce/action-scheduler/deprecated/functions.phpnu „[µü¤        PK       ‡ŠU]—¸À#  #  S            eT vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.phpnu „[µü¤        PK       ‡ŠU]»?Z—Z  Z  W            Y vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.phpnu „[µü¤        PK       ‡ŠU]R
Ö:    H            ìn vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.phpnu „[µü¤        PK       ‡ŠU]èö<?ƒ)  ƒ)  I            pw vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.phpnu „[µü¤        PK       ‡ŠU]¬�¯û!  !  E            l¡ vendor/woocommerce/action-scheduler/classes/migration/LogMigrator.phpnu „[µü¤        PK       ‡ŠU]ât·j*  *  O            § vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.phpnu „[µü¤        PK       ‡ŠU]kcÚO|  |  @            «© vendor/woocommerce/action-scheduler/classes/migration/Runner.phpnu „[µü¤        PK       ‡ŠU]�ŒWõ(  (  C            —º vendor/woocommerce/action-scheduler/classes/migration/Scheduler.phpnu „[µü¤        PK       ‡ŠU]o€ATË  Ë  L            2Ç vendor/woocommerce/action-scheduler/classes/migration/DryRun_LogMigrator.phpnu „[µü¤        PK       ‡ŠU]¡XÔ£+  +  Y            yÉ vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.phpnu „[µü¤        PK       ‡ŠU]ñ.×«  «  H            -Ñ vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.phpnu „[µü¤        PK       ‡ŠU]�åµ|  |  D            Pâ vendor/woocommerce/action-scheduler/classes/migration/Controller.phpnu „[µü¤        PK       ‡ŠU]’T˜”n  n  @            @ü vendor/woocommerce/action-scheduler/classes/migration/Config.phpnu „[µü¤        PK       ‡ŠU]¥ÇÕñè  è  F             vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.phpnu „[µü¤        PK       ‡ŠU]M¶.L‡  ‡  L            | vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.phpnu „[µü¤        PK       ‡ŠU]Yv^@  @  M            4 vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.phpnu „[µü¤        PK       ‡ŠU][•‚„ì  ì  J            <D vendor/woocommerce/action-scheduler/classes/ActionScheduler_OptionLock.phpnu „[µü¤        PK       ‡ŠU]_MŒ»j  j  H            ¢T vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.phpnu „[µü¤        PK       ‡ŠU]ô)K[Ÿ  Ÿ  N            „c vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.phpnu „[µü¤        PK       ‡ŠU]C;a@3  3  X            ¡x vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.phpnu „[µü¤        PK       ‡ŠU]O§£
  
  Q            \… vendor/woocommerce/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.phpnu „[µü¤        PK       ˆŠU]×‹žÛÏ  Ï  V            â� vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.phpnu „[µü¤        PK       ˆŠU]¨ÝÊ²ø%  ø%  K            7– vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.phpnu „[µü¤        PK       ˆŠU]ð¼
¯?  ¯?  M            ª¼ vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.phpnu „[µü¤        PK       ˆŠU]/Ðº  º  S            Öü vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.phpnu „[µü¤        PK       ˆŠU]³¸J�  �  R            	 vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.phpnu „[µü¤        PK       ˆŠU]ÐñüAvT  vT  I            $ vendor/woocommerce/action-scheduler/classes/ActionScheduler_ListTable.phpnu „[µü¤        PK       ˆŠU]/åÂ(�  �  T            s vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.phpnu „[µü¤        PK       ˆŠU]÷êB  B  k            '… vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.phpnu „[µü¤        PK       ˆŠU]TŒ¢�  �  W            � vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.phpnu „[µü¤        PK       ˆŠU]ji1ú  ú  i            – vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.phpnu „[µü¤        PK       ˆŠU]¿ð/`Ñ   Ñ   S            )  vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.phpnu „[µü¤        PK       ˆŠU]ôÀÒu    [            }Á vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.phpnu „[µü¤        PK       ˆŠU]Ej„×†1  †1  W            #à vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.phpnu „[µü¤        PK       ˆŠU]ÒëuÉ  É  i            0 vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.phpnu „[µü¤        PK       ˆŠU]ØZï±  ±  P            ’ vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.phpnu „[µü¤        PK       ˆŠU]hÏ   Ï   I            Ã, vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.phpnu „[µü¤        PK       ˆŠU]™¸ç¬Œ  Œ  K            . vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.phpnu „[µü¤        PK       ˆŠU]±È dJ  J  L            1 vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.phpnu „[µü¤        PK       ˆŠU]ð.w>ó  ó  Z            Ø2 vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.phpnu „[µü¤        PK       ˆŠU]‡,µÏ¸  ¸  H            UB vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.phpnu „[µü¤        PK       ˆŠU][Qj  j  L            …V vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.phpnu „[µü¤        PK       ‰ŠU]ýœWq  q  I            kh vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.phpnu „[µü¤        PK       ‰ŠU]dø6\      I            U{ vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.phpnu „[µü¤        PK       ‰ŠU]‚þ[    L            n„ vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Cancel_Command.phpnu „[µü¤        PK       ‰ŠU]'O„[e
  e
  L            ò‘ vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.phpnu „[µü¤        PK       ‰ŠU]¦=Î C  C  J            Óœ vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.phpnu „[µü¤        PK       ‰ŠU]N¬ª7  7  J            �¤ vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.phpnu „[µü¤        PK       ‰ŠU]æÂ’yß  ß  N            A± vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.phpnu „[µü¤        PK       ‰ŠU]·8¥€Î
  Î
  B            ž¿ vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.phpnu „[µü¤        PK       ‰ŠU]Lø Ù  Ù  X            ÞÊ vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.phpnu „[µü¤        PK       ‰ŠU]=�3”   ”   E            ?ä vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.phpnu „[µü¤        PK       ‰ŠU]@CQE  E  E            H vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.phpnu „[µü¤        PK       ‰ŠU]ãã÷ÜÇ  Ç  ^            " vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.phpnu „[µü¤        PK       ‰ŠU]q´âY  Y  R            W= vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_NullAction.phpnu „[µü¤        PK       ‰ŠU]Ké¹Ü(  (  V            2@ vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.phpnu „[µü¤        PK       ‰ŠU]^�3ks  s  V            àA vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.phpnu „[µü¤        PK       ‰ŠU]Ž°UH  H  N            ÙE vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.phpnu „[µü¤        PK       ŠŠU]….>–  –  H            ŸU vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.phpnu „[µü¤        PK       ŠŠU]ùˆKU  U  P            ­] vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.phpnu „[µü¤        PK       ŠŠU]|„#g  g  [            ‚} vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.phpnu „[µü¤        PK       ŠŠU]0C›Ê5  Ê5  ^            t… vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.phpnu „[µü¤        PK       ŠŠU]Òr�Í;  ;  W            Ì» vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.phpnu „[µü¤        PK       ŠŠU]@ò#  #  Y            ŽÄ vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.phpnu „[µü¤        PK       ŠŠU]³èƒ    N            :Ø vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.phpnu „[µü¤        PK       ŠŠU]t[®zæ  æ  d            ×ß vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.phpnu „[µü¤        PK       ŠŠU]
k~¦    X            Qí vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.phpnu „[µü¤        PK       ŠŠU]i|ÉÒ/b  /b  \            æ  vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.phpnu „[µü¤        PK       ŠŠU]q'_à�,  �,  I            ¡c vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.phpnu „[µü¤        PK       ŠŠU]î¢\¹98  98  O            §� vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.phpnu „[µü¤        PK       ‹ŠU]ü3|Á	  Á	  Q            _É vendor/woocommerce/action-scheduler/classes/ActionScheduler_SystemInformation.phpnu „[µü¤        PK       ‹ŠU]Š[’�Å  Å  V            ¡Ó vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.phpnu „[µü¤        PK       ‹ŠU]Ã^ü?	  ?	  X            ìÖ vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.phpnu „[µü¤        PK       ‹ŠU]¤þ‘o  o  Z            ³à vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.phpnu „[µü¤        PK       ‹ŠU]›¾è{I
  I
  Z            ¬ç vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.phpnu „[µü¤        PK       ‹ŠU]¾3<wÈ  È  R            ò vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.phpnu „[µü¤        PK       ŒŠU]k¬È>÷  ÷  V            Éô vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.phpnu „[µü¤        PK       ŒŠU]çs  s  X            F vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.phpnu „[µü¤        PK       ŒŠU]w°¡u‰  ‰  N            A vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.phpnu „[µü¤        PK       ŒŠU]f¹g9M  M  1            H$ vendor/woocommerce/action-scheduler/functions.phpnu „[µü¤        PK       ŒŠU] =g—M‰  M‰  /            Áq vendor/woocommerce/action-scheduler/license.txtnu „[µü¤        PK       ŒŠU]_Wl†  †  <            mû vendor/woocommerce/action-scheduler/lib/WP_Async_Request.phpnu „[µü¤        PK       ŒŠU]3e›3r  r  Y            _
 vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.phpnu „[µü¤        PK       ŒŠU]NÅ»_-  _-  J            Z vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.phpnu „[µü¤        PK       �ŠU]vbZä    Z            3= vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.phpnu „[µü¤        PK       �ŠU]&K(#J  J  ?            ÉK vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSEnu „[µü¤        PK       �ŠU]ñuMEQ  Q  Y            ‚P vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.phpnu „[µü¤        PK       �ŠU]ÿ'¤©  ©  T            \` vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.phpnu „[µü¤        PK       ŽŠU]Ð­£w  w  U            ‰d vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.phpnu „[µü¤        PK       ŽŠU]f÷„ÈÑ  Ñ  W            …j vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.phpnu „[µü¤        PK       ŽŠU]¥è¢"ù  ù  W            Ýq vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.phpnu „[µü¤        PK       ŽŠU]�f-´
  
  X            ]u vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.phpnu „[µü¤        PK       �ŠU]P{/ê…  …  U            õ vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.phpnu „[µü¤        PK       �ŠU]ëËF  F  )            ÿ„ vendor/wp-media/wp-mixpanel/composer.jsonnu „[µü¤        PK       �ŠU]¬bèÓ‚  ‚  .            žŒ vendor/wp-media/wp-mixpanel/src/WPConsumer.phpnu „[µü¤        PK       �ŠU]¥µEZ|  |  )            ~” vendor/wp-media/wp-mixpanel/src/Optin.phpnu „[µü¤        PK       �ŠU]GÃ¸ÔÞ  Þ  ,            Sœ vendor/wp-media/wp-mixpanel/src/Tracking.phpnu „[µü¤        PK       �ŠU]pçiv    2            �¶ vendor/wp-media/wp-mixpanel/src/TrackingPlugin.phpnu „[µü¤        PK       �ŠU]Ï“·im  m  D            Ä vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelGroups.phpnu „[µü¤        PK       ‘ŠU]ëæ»œÀ  À  J            âÚ vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelBaseProducer.phpnu „[µü¤        PK       ‘ŠU]A#x’Û*  Û*  D            ó vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelPeople.phpnu „[µü¤        PK       ‘ŠU] y¡lþ  þ  D            k vendor/wp-media/wp-mixpanel/src/Classes/Producers/MixpanelEvents.phpnu „[µü¤        PK       ‘ŠU]O²b:  :  =            Ý7 vendor/wp-media/wp-mixpanel/src/Classes/Base/MixpanelBase.phpnu „[µü¤        PK       ‘ŠU](sf""$  "$  4            „@ vendor/wp-media/wp-mixpanel/src/Classes/Mixpanel.phpnu „[µü¤        PK       ‘ŠU]ãúQ[e  e  O            
e vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/AbstractConsumer.phpnu „[µü¤        PK       ‘ŠU]¿ÏzÎ  Î  K            îk vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/CurlConsumer.phpnu „[µü¤        PK       ‘ŠU]�ŒF×Ä  Ä  K            7ˆ vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/FileConsumer.phpnu „[µü¤        PK       ‘ŠU]?•©!÷#  ÷#  M            vŒ vendor/wp-media/wp-mixpanel/src/Classes/ConsumerStrategies/SocketConsumer.phpnu „[µü¤        PK       ‘ŠU]ŠÌß                ê° uninstall.phpnu „[µü¤        PK       ‘ŠU]TåqÒü  ü              .¿ assets/vendor/diacritics/ru.phpnu „[µü¤        PK       ‘ŠU]­¤´ÿ  ÿ              yÂ assets/vendor/diacritics/en.phpnu „[µü¤        PK       ‘ŠU]íJ»‡  ‡              ÇÛ assets/vendor/diacritics/de.phpnu „[µü¤        PK       ‘ŠU]H*åeÚ. Ú. #            �ô assets/vendor/schema/schema-map.phpnu „[µü¤        PK       ‘ŠU]¹˜;Ev  v              Ê# assets/vendor/powerwords/ja.phpnu „[µü¤        PK       ‘ŠU]DiÂ                  �* assets/vendor/powerwords/fi.phpnu „[µü¤        PK       ‘ŠU]mt÷iÿ  ÿ              þ1 assets/vendor/powerwords/it.phpnu „[µü¤        PK       ‘ŠU]ƒK                  L9 assets/vendor/powerwords/fr.phpnu „[µü¤        PK       ‘ŠU]Ëðè4/  4/              ›> assets/vendor/powerwords/en.phpnu „[µü¤        PK       ‘ŠU]bq§’.  ’.              n assets/vendor/powerwords/de.phpnu „[µü¤        PK       ‘ŠU]ï¦Ÿ>‚  ‚              ÿœ assets/vendor/powerwords/hu.phpnu „[µü¤        PK       ‘ŠU]ööËu  u              Ð¢ assets/vendor/powerwords/sv.phpnu „[µü¤        PK       ’ŠU]�ÀlÈ31  31              ”³ assets/vendor/powerwords/id.phpnu „[µü¤        PK       ’ŠU]7è¿æ-  æ-              å assets/vendor/powerwords/nl.phpnu „[µü¤        PK       ’ŠU]0>Ê¬á  á              K  assets/vendor/powerwords/es.phpnu „[µü¤        PK       ’ŠU]<¨æŠÒ Ò $            {  assets/vendor/select2/select2.min.jsnu „[µü¤        PK       ’ŠU]ë4I!L;  L;  %            ¡8! assets/vendor/select2/select2.min.cssnu „[µü¤        PK       ’ŠU]ØW1˜­Ò  ­Ò  =            Bt! assets/vendor/date-range-picker/jquery.daterangepicker.min.jsnu „[µü¤        PK       ’ŠU]î,‹T      7            \G" assets/vendor/date-range-picker/daterangepicker.min.cssnu „[µü¤        PK       ’ŠU]f±x¿$  ¿$  3            Ãf" assets/vendor/date-range-picker/daterangepicker.cssnu „[µü¤        PK       ’ŠU]t¤Ñ×Ü  Ü               å‹" assets/admin/fonts/Rank-Math.ttfnu „[µü¤        PK       ’ŠU]1”¡�ÌL  ÌL  !            # assets/admin/fonts/Rank-Math.woffnu „[µü¤        PK       ’ŠU]ü_œ¯m m              .Y# assets/admin/fonts/Rank-Math.svgnu „[µü¤        PK       ’ŠU]!¿+ã  ã              �Æ$ assets/admin/img/icon-gif.pngnu „[µü¤        PK       ’ŠU]³ñ¡  ¡              ±Ó$ assets/admin/img/loader.svgnu „[µü¤        PK       ’ŠU]®n—‚Ú  ‚Ú  #            �Õ$ assets/admin/img/trends-preview.jpgnu „[µü¤        PK       ’ŠU]¨ó=ïR  R              r°% assets/admin/img/icon-play.pngnu „[µü¤        PK       ’ŠU]M/ôY�K  �K  '            Ã% assets/admin/img/social-placeholder.jpgnu „[µü¤        PK       ’ŠU]èÀstÉ  É              ê& assets/admin/img/logo.svgnu „[µü¤        PK       ’ŠU]{�oÁ  Á              ü& assets/admin/img/menu-icon.svgnu „[µü¤        PK       ’ŠU]í·½’v
  v
              & assets/admin/img/pillar.svgnu „[µü¤        PK       ’ŠU]Å’æiõB  õB              Ì$& assets/admin/img/score-100.pngnu „[µü¤        PK       ’ŠU]¹ÂœÐI ÐI "            h& assets/admin/js/generalSettings.jsnu „[µü¤        PK       ’ŠU]'=É�   �               1²' assets/admin/js/blocks.jsnu „[µü¤        PK       ’ŠU]�&´fúÂ  úÂ              
S( assets/admin/js/settings.jsnu „[µü¤        PK       ’ŠU]•6�ÆI$  I$              O) assets/admin/js/registration.jsnu „[µü¤        PK       ’ŠU]–é;Š  Š              ç:) assets/admin/js/dashboard.jsnu „[µü¤        PK       ’ŠU]õÛœ†ûÕ  ûÕ               ½F) assets/admin/js/titleSettings.jsnu „[µü¤        PK       ’ŠU]O,¼Zö5 ö5             * assets/admin/js/gutenberg.jsnu „[µü¤        PK       ’ŠU]Ú» m3  m3  $            JS+ assets/admin/js/gutenberg-formats.jsnu „[µü¤        PK       ’ŠU]Ur“†2  †2              ‡+ assets/admin/js/wplink.jsnu „[µü¤        PK       ’ŠU]Gá†y¾  ¾              Ú¹+ assets/admin/js/modules.jsnu „[µü¤        PK       ’ŠU]ôñ\%  %  )            (x, assets/admin/js/gutenberg-primary-term.jsnu „[µü¤        PK       ’ŠU]�ˆ©ˆU U             Œ�, assets/admin/js/classic.jsnu „[µü¤        PK       ’ŠU]ß®ÍÉ‚X  ‚X              õò- assets/admin/js/common.jsnu „[µü¤        PK       ’ŠU]ú´e¨Ca Ca             ÀK. assets/admin/js/components.jsnu „[µü¤        PK       ’ŠU]¤ê{(Þ4 Þ4              P­2 assets/admin/js/rank-math-app.jsnu „[µü¤        PK       ’ŠU]ªÃB¤d  ¤d              ~â5 assets/admin/js/validate.jsnu „[µü¤        PK       ’ŠU]¡­µM‰  ‰               mG6 assets/admin/js/custom-fields.jsnu „[µü¤        PK       ’ŠU]rÃûIR  R  %            FP6 assets/admin/js/glue-custom-fields.jsnu „[µü¤        PK       ’ŠU]¶ŠØ¼"y "y             íX6 assets/admin/js/analyzer.jsnu „[µü¤        PK       ’ŠU]pë‘:“I  “I              ZÒ; assets/admin/js/post-list.jsnu „[µü¤        PK       ’ŠU]+j@h,  h,              9< assets/admin/js/option-panel.jsnu „[µü¤        PK       ’ŠU]Äu­Õî Õî             ðH< assets/admin/js/wizard.jsnu „[µü¤        PK       ’ŠU]¨`ÐAM  AM  "            8> assets/admin/js/sitemapSettings.jsnu „[µü¤        PK       ’ŠU]˜@8ËÉ3  É3  *            ¡…> assets/admin/js/instantIndexingSettings.jsnu „[µü¤        PK       ’ŠU]ìæ,#FÓ FÓ             Ä¹> assets/admin/css/gutenberg.cssnu „[µü¤        PK       ’ŠU]ùq*‰“Ñ  “Ñ  !            X�@ assets/admin/css/setup-wizard.cssnu „[µü¤        PK       ’ŠU]Q®éþ³  þ³              <_A assets/admin/css/common.cssnu „[µü¤        PK       ’ŠU]`Á�šu  u  !            …B assets/admin/css/option-panel.cssnu „[µü¤        PK       ’ŠU]cñ~õ_“ _“             ïˆB assets/admin/css/divi.cssnu „[µü¤        PK       ’ŠU]$bÕX÷L  ÷L              —D assets/admin/css/cmb2.cssnu „[µü¤        PK       ’ŠU]/ÀºÒ°4  °4              ×iD assets/admin/css/metabox.cssnu „[µü¤        PK       ’ŠU]›b€{€M  €M  #            ÓžD assets/admin/css/elementor-dark.cssnu „[µü¤        PK       ’ŠU]üæ\á  á              ¦ìD assets/admin/css/blocks.cssnu „[µü¤        PK       ’ŠU]Ï/2U  2U              ÒE assets/admin/css/schema.cssnu „[µü¤        PK       ’ŠU]^´hÖ  Ö  %            O^E assets/admin/css/dashboard-widget.cssnu „[µü¤        PK       ’ŠU]Yš�ß4o 4o             z|E assets/admin/css/elementor.cssnu „[µü¤        PK       ’ŠU]e¤xÒ2  2              üëF assets/admin/css/post-list.cssnu „[µü¤        PK       ’ŠU]\ª=ÀH  ÀH              ZG assets/admin/css/dashboard.cssnu „[µü¤        PK       ’ŠU]hR;H?  ?              hgG assets/front/js/rank-math.jsnu „[µü¤        PK       ’ŠU]Á¤¶2m  m  (            ókG assets/front/css/rank-math-seo-score.cssnu „[µü¤        PK       ’ŠU]#F  F  "            ¸{G assets/front/css/rank-math.min.cssnu „[µü¤        PK       ’ŠU]Ü½œŸ�  �  +            P~G assets/front/css/rank-math-contact-info.cssnu „[µü¤        PK       ’ŠU]·G  G              8�G assets/front/css/rank-math.cssnu „[µü¤        PK       ’ŠU]êFl"–9  –9              ÍƒG rank-math.phpnu „[µü¤        PK       ’ŠU]€2ÉÃ>  >               ½G composer.jsonnu „[µü¤        PK       ’ŠU]õ"|Íêj êj             ÉG languages/rank-math.potnu „[µü¤        PK       ’ŠU]Neœo  œo  
            L4K readme.txtnu „[µü¤        PK       ’ŠU]ßNÏZÉ  É              "¤K wpml-config.xmlnu „[µü¤        PK       “ŠU]QƒqÃ†  †              *°K includes/class-defaults.phpnu „[µü¤        PK       “ŠU]Ý¸Ÿ‹‡  ‡  $            û´K includes/helpers/class-post-type.phpnu „[µü¤        PK       “ŠU]—§ÁÀŠ  Š  %            ÖÈK includes/helpers/class-attachment.phpnu „[µü¤        PK       “ŠU]¨Ÿ  Ÿ              µÙK includes/helpers/class-db.phpnu „[µü¤        PK       “ŠU]M}UE¯  ¯  #            ¡øK includes/helpers/class-schedule.phpnu „[µü¤        PK       “ŠU]ô»{†e  †e  "            £L includes/helpers/class-choices.phpnu „[µü¤        PK       “ŠU]…©E»¿  ¿              {tL includes/helpers/class-str.phpnu „[µü¤        PK       “ŠU]õf©‹[)  [)  &            ˆ�L includes/helpers/class-conditional.phpnu „[µü¤        PK       “ŠU]ê.ð+  +  "            9¹L includes/helpers/class-options.phpnu „[µü¤        PK       “ŠU]Fîæ±  ±  !            ¶ÀL includes/helpers/class-locale.phpnu „[µü¤        PK       “ŠU]`¨¢Â  Â              ¸ÄL includes/helpers/class-arr.phpnu „[µü¤        PK       “ŠU]\H8â®  ®  $            ÈÕL includes/helpers/class-sitepress.phpnu „[µü¤        PK       “ŠU]ÁÙw3Œ	  Œ	               ÊåL includes/helpers/class-param.phpnu „[µü¤        PK       “ŠU]PÒ$›  ›  $            ¦ïL includes/helpers/class-analytics.phpnu „[µü¤        PK       “ŠU]ŒÛ                  •÷L includes/helpers/index.phpnu „[µü¤        PK       “ŠU]ÃÆ=åyX  yX  $            û÷L includes/helpers/class-wordpress.phpnu „[µü¤        PK       “ŠU]0-Þ³3?  3?  %            ÈPM includes/helpers/class-content-ai.phpnu „[µü¤        PK       “ŠU]Y¼xÔ  Ô  !            P�M includes/helpers/class-schema.phpnu „[µü¤        PK       “ŠU]ñö©    #            u M includes/helpers/class-taxonomy.phpnu „[µü¤        PK       “ŠU]Šfðƒý  ý  !            ÓµM includes/helpers/class-editor.phpnu „[µü¤        PK       “ŠU]/ÃÂ¸  ¸              !¹M includes/helpers/class-api.phpnu „[µü¤        PK       “ŠU]Æ#n&€  €  #            'ÇM includes/helpers/class-security.phpnu „[µü¤        PK       “ŠU]5¿â›7  7              úÌM includes/helpers/class-html.phpnu „[µü¤        PK       “ŠU]ˆcE¨  ¨              €ÔM includes/helpers/class-url.phpnu „[µü¤        PK       “ŠU]c"ý                väM includes/template-tags.phpnu „[µü¤        PK       “ŠU]GY‚õ  õ              ßìM includes/class-metadata.phpnu „[µü¤        PK       “ŠU]l2Ì"  Ì"  "            ûM includes/opengraph/class-slack.phpnu „[µü¤        PK       “ŠU]¦>-ÿi  i  &            =N includes/opengraph/class-opengraph.phpnu „[µü¤        PK       “ŠU]Ï%ºXÂK  ÂK  "            ü4N includes/opengraph/class-image.phpnu „[µü¤        PK       “ŠU]Ö ~ã“"  “"  %            �N includes/opengraph/class-facebook.phpnu „[µü¤        PK       “ŠU]ŒÛ                  ø£N includes/opengraph/index.phpnu „[µü¤        PK       “ŠU]=u?k   k   $            `¤N includes/opengraph/class-twitter.phpnu „[µü¤        PK       “ŠU]$äL€ú  ú  ,            ÅN includes/opengraph/class-facebook-locale.phpnu „[µü¤        PK       “ŠU]�á¼Ì‡-  ‡-              uÝN includes/class-cmb2.phpnu „[µü¤        PK       “ŠU]?P°¸q
  q
              CO includes/module/class-base.phpnu „[µü¤        PK       “ŠU]WÎe— X   X  !            O includes/module/class-manager.phpnu „[µü¤        PK       “ŠU]FY«p  p               ónO includes/module/class-module.phpnu „[µü¤        PK       “ŠU]yŠrà2  à2              ³€O includes/class-kb.phpnu „[µü¤        PK       “ŠU]Ìø
  
               Ø³O includes/class-compatibility.phpnu „[µü¤        PK       “ŠU]Ê³�)|  |              :¾O includes/interface-runner.phpnu „[µü¤        PK       “ŠU]pÐ@=Ó  Ó  +            ÀO includes/abilities/interface-subscriber.phpnu „[µü¤        PK       “ŠU]Jû                  1ÂO includes/abilities/index.phpnu „[µü¤        PK       “ŠU]lŸîƒe  e  7            ™ÂO includes/abilities/analytics/class-get-top-keywords.phpnu „[µü¤        PK       “ŠU]ŒÛ      &            eÝO includes/abilities/analytics/index.phpnu „[µü¤        PK       “ŠU]t#D¡
  ¡
  :            ×ÝO includes/abilities/analytics/class-top-keywords-runner.phpnu „[µü¤        PK       “ŠU] ÐBV³  ³  1            âèO includes/abilities/analytics/class-subscriber.phpnu „[µü¤        PK       “ŠU]È{·­ú  ú  6            öïO includes/abilities/seo-analysis/class-fix-site-seo.phpnu „[µü¤        PK       “ŠU]Hƒ„ž    6            VP includes/abilities/seo-analysis/class-audit-result.phpnu „[µü¤        PK       “ŠU]àÿü$
  $
  6            ¿	P includes/abilities/seo-analysis/class-fix-hint-map.phpnu „[µü¤        PK       “ŠU]ãÙûº  º  6            IP includes/abilities/seo-analysis/class-audit-runner.phpnu „[µü¤        PK       “ŠU]ŒÛ      )            i-P includes/abilities/seo-analysis/index.phpnu „[µü¤        PK       “ŠU]@¾©‘Ì  Ì  1            Þ-P includes/abilities/seo-analysis/class-finding.phpnu „[µü¤        PK       “ŠU]±ñìf3  f3  4            7P includes/abilities/seo-analysis/class-fix-runner.phpnu „[µü¤        PK       “ŠU]Vcqço  o  8            ÕjP includes/abilities/seo-analysis/class-audit-site-seo.phpnu „[µü¤        PK       “ŠU]ÔZü�Ð  Ð  4            ¬�P includes/abilities/seo-analysis/class-subscriber.phpnu „[µü¤        PK       “ŠU]ŒÛ      #            à‰P includes/abilities/schema/index.phpnu „[µü¤        PK       “ŠU]hå']å  å  3            OŠP includes/abilities/schema/class-get-post-schema.phpnu „[µü¤        PK       “ŠU] %¿R˜  ˜  .            —¢P includes/abilities/schema/class-subscriber.phpnu „[µü¤        PK       “ŠU]àUÕš1   1   K            �©P includes/abilities/ai-visibility/class-get-ai-visibility-brand-insights.phpnu „[µü¤        PK       “ŠU]™ ñÜ    E            9ÊP includes/abilities/ai-visibility/class-create-ai-visibility-brand.phpnu „[µü¤        PK       “ŠU]ŒÛ      *            ¼àP includes/abilities/ai-visibility/index.phpnu „[µü¤        PK       “ŠU]s”.  .  E            2áP includes/abilities/ai-visibility/class-get-ai-visibility-overview.phpnu „[µü¤        PK       “ŠU]3š;¾  ¾  J            ÕúP includes/abilities/ai-visibility/class-get-ai-visibility-brand-queries.phpnu „[µü¤        PK       “ŠU]X¨ÿ"  "  5            Q includes/abilities/ai-visibility/class-subscriber.phpnu „[µü¤        PK       “ŠU]iûF? '   '  <            ”Q includes/abilities/content-analysis/class-get-seo-scores.phpnu „[µü¤        PK       “ŠU]++®ŽU  U  B             BQ includes/abilities/content-analysis/class-analyze-post-content.phpnu „[µü¤        PK       “ŠU]TÐæŒŠ  Š  C            gaQ includes/abilities/content-analysis/class-content-analysis-data.phpnu „[µü¤        PK       “ŠU]Íh+H    8            dxQ includes/abilities/content-analysis/class-subscriber.phpnu „[µü¤        PK       “ŠU]ŒÛ      %            è€Q includes/abilities/post-seo/index.phpnu „[µü¤        PK       “ŠU]ìQþVS  S  7            Y�Q includes/abilities/post-seo/class-get-post-seo-meta.phpnu „[µü¤        PK       “ŠU]îã²=¦  ¦  0            ‘Q includes/abilities/post-seo/class-subscriber.phpnu „[µü¤        PK       “ŠU]ÁB	  	  &            ˜Q includes/abilities/class-abilities.phpnu „[µü¤        PK       “ŠU]‡û%üæ  æ  (            ¡Q includes/abilities/interface-ability.phpnu „[µü¤        PK       “ŠU]ŒÛ      (            ½¤Q includes/abilities/link-genius/index.phpnu „[µü¤        PK       “ŠU][ªmjˆ  ˆ  8            1¥Q includes/abilities/link-genius/class-get-link-report.phpnu „[µü¤        PK       “ŠU]Ã[ÑCß	  ß	  ;            !»Q includes/abilities/link-genius/class-link-report-runner.phpnu „[µü¤        PK       “ŠU]}”Ïí  í  :            kÅQ includes/abilities/link-genius/class-post-links-runner.phpnu „[µü¤        PK       “ŠU][5V³ð  ð  3            ÂÎQ includes/abilities/link-genius/class-subscriber.phpnu „[µü¤        PK       “ŠU]Ñ*¯�n  n  7            ×Q includes/abilities/link-genius/class-get-post-links.phpnu „[µü¤        PK       “ŠU]ŒÛ                  êíQ includes/index.phpnu „[µü¤        PK       “ŠU]ŒÛ                  HîQ includes/metaboxes/index.phpnu „[µü¤        PK       “ŠU]}	'  '              °îQ includes/class-term.phpnu „[µü¤        PK       “ŠU]ÒB’­¥  ¥              ûQ includes/class-settings.phpnu „[µü¤        PK       “ŠU]|W¢è                	R includes/class-json-manager.phpnu „[µü¤        PK       “ŠU]oÆ¶I  I               wR includes/traits/class-wizard.phpnu „[µü¤        PK       “ŠU]@tÑÆ¢
  ¢
              R includes/traits/class-ajax.phpnu „[µü¤        PK       “ŠU]ŒÛ                   "R includes/traits/index.phpnu „[µü¤        PK       “ŠU]«ÇìHI  I               e"R includes/traits/class-hooker.phpnu „[µü¤        PK       “ŠU]
Š{»í  í  #            þ4R includes/traits/class-shortcode.phpnu „[µü¤        PK       “ŠU]ð²Vü  ü              >8R includes/traits/class-meta.phpnu „[µü¤        PK       “ŠU]Õ6
  6
              ˆ>R includes/traits/class-cache.phpnu „[µü¤        PK       “ŠU]#—²                IR includes/class-common.phpnu „[µü¤        PK       “ŠU]@'  '  %            geR includes/class-frontend-seo-score.phpnu „[µü¤        PK       “ŠU]+Žåã‘  ‘  $            ØŒR includes/class-thumbnail-overlay.phpnu „[µü¤        PK       “ŠU]bè2d¼  ¼              ½¬R includes/class-post.phpnu „[µü¤        PK       “ŠU]Sœ¦C  C  "            À¿R includes/class-data-encryption.phpnu „[µü¤        PK       “ŠU]Ì§·)D  D              UÐR includes/cli/class-commands.phpnu „[µü¤        PK       “ŠU](Sþ£—]  —]              èÓR includes/class-installer.phpnu „[µü¤        PK       “ŠU]Sšx÷0  0  #            Ë1S includes/admin/class-list-table.phpnu „[µü¤        PK       “ŠU]7ÉÑ¥É  É  (            N8S includes/admin/watcher/class-watcher.phpnu „[µü¤        PK       “ŠU]à%Ñé-  é-  %            oXS includes/admin/class-admin-helper.phpnu „[µü¤        PK       “ŠU]“‘S<ƒ  ƒ  .            ­†S includes/admin/class-register-options-page.phpnu „[µü¤        PK       “ŠU]” ”	                 Ž‰S includes/admin/class-options.phpnu „[µü¤        PK       “ŠU]gˆt´z&  z&  #            æ¥S includes/admin/class-admin-menu.phpnu „[µü¤        PK       “ŠU] µˆ0$  0$  #            ³ÌS includes/admin/class-pro-notice.phpnu „[µü¤        PK       “ŠU] âÒK¨  ¨  %            6ñS includes/admin/class-admin-header.phpnu „[µü¤        PK       “ŠU]‚ØúiH  iH              3T includes/admin/class-admin.phpnu „[µü¤        PK       “ŠU]ŒÛ                  êJT includes/admin/index.phpnu „[µü¤        PK       “ŠU]Gf\L„  „  %            NKT includes/admin/class-registration.phpnu „[µü¤        PK       “ŠU]SÙq®¯   ¯   "            'kT includes/admin/views/dashboard.phpnu „[µü¤        PK       “ŠU]ŒÛ                  (lT includes/admin/views/index.phpnu „[µü¤        PK       “ŠU]U¸#  #               ’lT includes/admin/class-notices.phpnu „[µü¤        PK       “ŠU]­}z¡»%  »%  *            ö�T includes/admin/class-sanitize-settings.phpnu „[µü¤        PK       “ŠU]sN.öo©  o©  )            ¶T includes/admin/importers/class-aioseo.phpnu „[µü¤        PK       “ŠU]ŒÛ      "            Ó_U includes/admin/importers/index.phpnu „[µü¤        PK       “ŠU]ãlêMÃ   Ã   3            A`U includes/admin/importers/class-aio-rich-snippet.phpnu „[µü¤        PK       “ŠU]Q(vZ  Z  /            g�U includes/admin/importers/class-redirections.phpnu „[µü¤        PK       “ŠU]SK·O<  O<  2             ŠU includes/admin/importers/class-plugin-importer.phpnu „[µü¤        PK       “ŠU]7¬iv  iv  +            ÑÆU includes/admin/importers/class-seopress.phpnu „[µü¤        PK       “ŠU].ß¦wY  wY  0            •=V includes/admin/importers/class-wp-schema-pro.phpnu „[µü¤        PK       ”ŠU]À�½%f¢  f¢  (            l—V includes/admin/importers/class-yoast.phpnu „[µü¤        PK       ”ŠU]ùéÐ§d  d  +            *:W includes/admin/importers/class-detector.phpnu „[µü¤        PK       ”ŠU]ÙÌ�à9  9  )            éNW includes/admin/importers/class-status.phpnu „[µü¤        PK       ”ŠU]Øõ
¦    -            {\W includes/admin/wizard/class-schema-markup.phpnu „[µü¤        PK       ”ŠU]o[ô“ä   ä   -            ÚhW includes/admin/wizard/class-compatibility.phpnu „[µü¤        PK       ”ŠU]Ö^?×f  f  $            ŠW includes/admin/wizard/class-role.phpnu „[µü¤        PK       ”ŠU]ŒÛ      %            ÕŽW includes/admin/wizard/views/index.phpnu „[µü¤        PK       ”ŠU]T'äÞ§N  §N  1            F�W includes/admin/wizard/views/search-console-ui.phpnu „[µü¤        PK       ”ŠU]¿y:rw	  w	  .            NÞW includes/admin/wizard/views/google-connect.phpnu „[µü¤        PK       ”ŠU]ff\J  J  '            #èW includes/admin/wizard/views/content.phpnu „[µü¤        PK       ”ŠU]-QÜÅ3  3  1            ÄëW includes/admin/wizard/views/rank-math-connect.phpnu „[µü¤        PK       ”ŠU]à¸ÉI
  
  &            XøW includes/admin/wizard/class-import.phpnu „[µü¤        PK       ”ŠU]Ø†çH¼  ¼  3            ¯X includes/admin/wizard/class-monitor-redirection.phpnu „[µü¤        PK       ”ŠU]4•íþ®  ®  ,            ÎX includes/admin/wizard/class-optimization.phpnu „[µü¤        PK       ”ŠU]±sÐÒ9  9  '            ØX includes/admin/wizard/class-sitemap.phpnu „[µü¤        PK       ”ŠU]A0$É+  +  /            hX includes/admin/wizard/interface-wizard-step.phpnu „[µü¤        PK       ”ŠU]·¤ó  ó  %            òX includes/admin/wizard/class-ready.phpnu „[µü¤        PK       ”ŠU]ûzi¢  ¢  .            :$X includes/admin/wizard/class-search-console.phpnu „[µü¤        PK       ”ŠU]ˆ9;,³  ³  )            ::X includes/admin/wizard/class-your-site.phpnu „[µü¤        PK       ”ŠU]^z;æ¹  ¹  %            FZX includes/admin/class-bulk-actions.phpnu „[µü¤        PK       ”ŠU]ñ¶Ý+¡  ¡  +            TtX includes/admin/class-lock-modified-date.phpnu „[µü¤        PK       ”ŠU]gAbíã  ã  3            P�X includes/admin/notifications/class-notification.phpnu „[µü¤        PK       ”ŠU]�‡˜�j   j   :            –”X includes/admin/notifications/class-notification-center.phpnu „[µü¤        PK       ”ŠU]‹•ƒw¨
  ¨
  &            jµX includes/admin/class-import-export.phpnu „[µü¤        PK       ”ŠU]q_<lž2  ž2  $            hÀX includes/admin/class-cmb2-fields.phpnu „[µü¤        PK       ”ŠU]�÷…¾­  ­  #            ZóX includes/admin/class-admin-init.phpnu „[µü¤        PK       ”ŠU]dH«ü&  &  )            ZüX includes/admin/class-dashboard-widget.phpnu „[µü¤        PK       ”ŠU]˜(`€  €  ,            ÙY includes/admin/class-admin-dashboard-nav.phpnu „[µü¤        PK       ”ŠU]qK"                µ!Y includes/admin/class-page.phpnu „[µü¤        PK       ”ŠU]&Ñ‡ÁE  E  %            ?Y includes/admin/class-setup-wizard.phpnu „[µü¤        PK       ”ŠU]9n�ú~  ~  #            ®RY includes/admin/class-ask-review.phpnu „[µü¤        PK       ”ŠU]{ä¼;                  rY includes/admin/class-api.phpnu „[µü¤        PK       ”ŠU]Ô�%ÆN#  N#  %            ëŒY includes/admin/class-post-filters.phpnu „[µü¤        PK       ”ŠU]R„ý0  0  0            Ž°Y includes/admin/metabox/class-taxonomy-screen.phpnu „[µü¤        PK       ”ŠU]¥íä¿ð7  ð7  '            ÂY includes/admin/metabox/class-screen.phpnu „[µü¤        PK       ”ŠU]Gm„æË  Ë  +            eúY includes/admin/metabox/interface-screen.phpnu „[µü¤        PK       ”ŠU]L Mà0  à0  ,            ‹þY includes/admin/metabox/class-post-screen.phpnu „[µü¤        PK       ”ŠU]¥¯}£&0  &0  (            Ç/Z includes/admin/metabox/class-metabox.phpnu „[µü¤        PK       ”ŠU]~UÎƒ  ƒ  ,            E`Z includes/admin/metabox/class-user-screen.phpnu „[µü¤        PK       ”ŠU]Ñ0ðö�d  �d  &            $iZ includes/admin/class-option-center.phpnu „[µü¤        PK       ”ŠU]yô
ù¡3  ¡3  '            
ÎZ includes/admin/class-admin-bar-menu.phpnu „[µü¤        PK       ”ŠU]~ž5)î"  î"              [ includes/admin/class-assets.phpnu „[µü¤        PK       ”ŠU]ŒÛ      !            ?%[ includes/admin/database/index.phpnu „[µü¤        PK       ”ŠU]ðº6ß  ß  (            ¬%[ includes/admin/database/class-escape.phpnu „[µü¤        PK       ”ŠU]iòn8a  a  (            ã*[ includes/admin/database/class-select.phpnu „[µü¤        PK       ”ŠU]¢=Î¯‘  ‘  )            œ6[ includes/admin/database/class-groupby.phpnu „[µü¤        PK       ”ŠU]r Ô=  =  /            †;[ includes/admin/database/class-query-builder.phpnu „[µü¤        PK       ”ŠU]X†RgA	  A	  '            "Y[ includes/admin/database/class-joins.phpnu „[µü¤        PK       •ŠU]¦q˜b    *            ºb[ includes/admin/database/class-database.phpnu „[µü¤        PK       •ŠU]J¥“å(  å(  '            3f[ includes/admin/database/class-where.phpnu „[µü¤        PK       •ŠU]iÄc  c  )            o�[ includes/admin/database/class-clauses.phpnu „[µü¤        PK       •ŠU]õ/b›¢  ¢  )            +›[ includes/admin/database/class-orderby.phpnu „[µü¤        PK       •ŠU]©Ì     +            &£[ includes/admin/database/class-translate.phpnu „[µü¤        PK       •ŠU]Ô[q§¥C  ¥C  %            ’¯[ includes/admin/class-post-columns.phpnu „[µü¤        PK       •ŠU]è´IßÅ  Å  *            Œó[ includes/admin/class-admin-breadcrumbs.phpnu „[µü¤        PK       •ŠU]ÞÔËoÛ2  Û2  %            «ø[ includes/admin/class-cmb2-options.phpnu „[µü¤        PK       •ŠU][«3¤  ¤  #            Û+\ includes/updates/update-1.0.232.phpnu „[µü¤        PK       •ŠU]}¢�)[  [  #            Ò.\ includes/updates/update-1.0.110.phpnu „[µü¤        PK       •ŠU]tØßO  O  %            €2\ includes/updates/update-1.0.201.1.phpnu „[µü¤        PK       •ŠU]­ýq�  �  #            $5\ includes/updates/update-1.0.211.phpnu „[µü¤        PK       •ŠU].£Da?  ?  %            ø7\ includes/updates/update-1.0.107.3.phpnu „[µü¤        PK       •ŠU]Ôª    "            Œ;\ includes/updates/update-1.0.86.phpnu „[µü¤        PK       •ŠU]R‘	    #            á>\ includes/updates/update-1.0.237.phpnu „[µü¤        PK       •ŠU]ùß}Mk  k  #            MB\ includes/updates/update-1.0.273.phpnu „[µü¤        PK       •ŠU]0U(ý      "            E\ includes/updates/update-1.0.89.phpnu „[µü¤        PK       •ŠU]‹adü'  '  #            ýH\ includes/updates/update-1.0.264.phpnu „[µü¤        PK       •ŠU]P#¦Ýl  l  #            wM\ includes/updates/update-1.0.251.phpnu „[µü¤        PK       •ŠU]Ð%3³J  J  #            6P\ includes/updates/update-1.0.104.phpnu „[µü¤        PK       •ŠU]$�YÚý  ý  #            ÓS\ includes/updates/update-1.0.201.phpnu „[µü¤        PK       •ŠU]aç0:  :  %            #Y\ includes/updates/update-1.0.103.1.phpnu „[µü¤        PK       –ŠU]ylí�  �  #            ²\\ includes/updates/update-1.0.202.phpnu „[µü¤        PK       –ŠU]Ìçjo°  °  #            •`\ includes/updates/update-1.0.239.phpnu „[µü¤        PK       –ŠU]ƒ§¤»Ô  Ô  #            ˜g\ includes/updates/update-1.0.250.phpnu „[µü¤        PK       –ŠU]¹¦!·ò  ò  #            ¿k\ includes/updates/update-1.0.238.phpnu „[µü¤        PK       –ŠU]º	lû»  »  "            o\ includes/updates/update-1.0.98.phpnu „[µü¤        PK       –ŠU]M'–:à  à  "            w\ includes/updates/update-1.0.84.phpnu „[µü¤        PK       –ŠU]&¼Êœ  œ  -            C€\ includes/replace-variables/class-variable.phpnu „[µü¤        PK       –ŠU]~cÿo*  *  4            <�\ includes/replace-variables/class-basic-variables.phpnu „[µü¤        PK       –ŠU]=tŸ    3            »º\ includes/replace-variables/class-term-variables.phpnu „[µü¤        PK       –ŠU]$Öñ4    7            Ê\ includes/replace-variables/class-advanced-variables.phpnu „[µü¤        PK       –ŠU]„m?¨N   N   )            ‘æ\ includes/replace-variables/class-base.phpnu „[µü¤        PK       –ŠU]CË­û¸"  ¸"  -            8] includes/replace-variables/class-replacer.phpnu „[µü¤        PK       –ŠU]0Ýž�  �  ,            M*] includes/replace-variables/class-manager.phpnu „[µü¤        PK       –ŠU]-œ%  %  5            FB] includes/replace-variables/class-author-variables.phpnu „[µü¤        PK       –ŠU]`ã Å  Å  *            ÐO] includes/replace-variables/class-cache.phpnu „[µü¤        PK       –ŠU]„fšT0D  0D  3            ïS] includes/replace-variables/class-post-variables.phpnu „[µü¤        PK       –ŠU]ø ˆk/  /               ‚˜] includes/rest/class-sanitize.phpnu „[µü¤        PK       –ŠU]v¯·Ïó  ó              §] includes/rest/class-front.phpnu „[µü¤        PK       –ŠU]¤m{±t/  t/              Aº] includes/rest/class-admin.phpnu „[µü¤        PK       –ŠU]ÖÚu4  4              ê] includes/rest/class-post.phpnu „[µü¤        PK       –ŠU]®:÷� ;   ;              ‚þ] includes/rest/class-shared.phpnu „[µü¤        PK       –ŠU]ÏLÛ	  	  $            Ð9^ includes/rest/class-setup-wizard.phpnu „[µü¤        PK       –ŠU]nÄÙùR  R  #            -K^ includes/rest/class-rest-helper.phpnu „[µü¤        PK       –ŠU]À}f                 Òj^ includes/rest/class-headless.phpnu „[µü¤        PK       –ŠU]ŒÛ                  )|^ includes/settings/index.phpnu „[µü¤        PK       –ŠU]-N‹X  X  ,            �|^ includes/settings/general/rss-vars-table.phpnu „[µü¤        PK       –ŠU]ŒÛ      #            D‚^ includes/settings/general/index.phpnu „[µü¤        PK       –ŠU]$Adû  û  )            ³‚^ includes/settings/general/breadcrumbs.phpnu „[µü¤        PK       –ŠU]fšO�½  ½  $            ˜^ includes/settings/general/others.phpnu „[µü¤        PK       –ŠU]Ìû~¸    #            ¬^ includes/settings/general/links.phpnu „[µü¤        PK       –ŠU]rP•ÑH  H  &            o¿^ includes/settings/general/htaccess.phpnu „[µü¤        PK       –ŠU]‹rÌ¼P  P  '            Ç^ includes/settings/general/webmaster.phpnu „[µü¤        PK       –ŠU]©ÿ  ÿ  "            ´Û^ includes/settings/titles/local.phpnu „[µü¤        PK       –ŠU]’‰¯T  T  %            ä^ includes/settings/titles/homepage.phpnu „[µü¤        PK       –ŠU]¦º�ñ1  1  #            ®ö^ includes/settings/titles/social.phpnu „[µü¤        PK       –ŠU]ŒÛ      "            2_ includes/settings/titles/index.phpnu „[µü¤        PK       –ŠU]¤…Œ�  �  #             _ includes/settings/titles/global.phpnu „[µü¤        PK       –ŠU]9–k¯G  G  #            t_ includes/settings/titles/author.phpnu „[µü¤        PK       –ŠU]ßö  ö  '            (_ includes/settings/titles/taxonomies.phpnu „[µü¤        PK       –ŠU]R
ÓSD  SD  '            [>_ includes/settings/titles/post-types.phpnu „[µü¤        PK       –ŠU]AuH#    !            ƒ_ includes/settings/titles/misc.phpnu „[µü¤        PK       –ŠU];SË‹                s™_ includes/class-update-email.phpnu „[µü¤        PK       –ŠU]sò1-  1-              Ò®_ includes/class-helper.phpnu „[µü¤        PK       –ŠU]Ë–ÙÞˆ  ˆ  $            LÜ_ includes/frontend/class-comments.phpnu „[µü¤        PK       –ŠU]/ø‚ž  ž  '            (é_ includes/frontend/class-redirection.phpnu „[µü¤        PK       –ŠU]Û*#Çr0  r0  &            ò_ includes/frontend/class-shortcodes.phpnu „[µü¤        PK       –ŠU]è¼æK@3  @3               å"` includes/frontend/class-head.phpnu „[µü¤        PK       –ŠU]ü{"  "  $            uV` includes/frontend/class-frontend.phpnu „[µü¤        PK       –ŠU]ÍiüÕG  ÕG  '            Öx` includes/frontend/class-breadcrumbs.phpnu „[µü¤        PK       –ŠU]3zóXþ  þ  )            Á` includes/frontend/paper/class-archive.phpnu „[µü¤        PK       –ŠU]¯]§g4  g4  '            YÊ` includes/frontend/paper/class-paper.phpnu „[µü¤        PK       –ŠU]»³T�²  ²  &            ÿ` includes/frontend/paper/class-misc.phpnu „[µü¤        PK       –ŠU]’Ý    &            a includes/frontend/paper/class-date.phpnu „[µü¤        PK       –ŠU]Ô]Aÿ      (            ’
a includes/frontend/paper/class-search.phpnu „[µü¤        PK       –ŠU]‘‘ˆB'  '  +            
a includes/frontend/paper/class-error-404.phpnu „[µü¤        PK       –ŠU]�2-\  \  +            Œa includes/frontend/paper/interface-paper.phpnu „[µü¤        PK       –ŠU]Hr¬çŸ  Ÿ  *            Ca includes/frontend/paper/class-taxonomy.phpnu „[µü¤        PK       –ŠU]´_é”'  '  *            <'a includes/frontend/paper/class-singular.phpnu „[µü¤        PK       –ŠU]7ê¢û«  «  &            ¤Na includes/frontend/paper/class-blog.phpnu „[µü¤        PK       –ŠU]¡°Gú  ú  &            ¥Wa includes/frontend/paper/class-shop.phpnu „[µü¤        PK       –ŠU]®fcúø	  ø	  (            õ^a includes/frontend/paper/class-author.phpnu „[µü¤        PK       –ŠU]–CÎaQ   Q   +            Eia includes/frontend/class-link-attributes.phpnu „[µü¤        PK       —ŠU]ÚÙ§Í3  3              ñ‰a includes/class-user.phpnu „[µü¤        PK       —ŠU]¾@�>o2  o2              k�a includes/class-tracking.phpnu „[µü¤        PK       —ŠU]ÖÁÿì  ì              %Ãa includes/class-auto-updater.phpnu „[µü¤        PK       —ŠU]ŒÛ      %            `Ìa includes/modules/robots-txt/index.phpnu „[µü¤        PK       —ŠU]†3Ï    0            ÑÌa includes/modules/robots-txt/class-robots-txt.phpnu „[µü¤        PK       —ŠU]Uã:Ô  Ô  '            3Ûa includes/modules/robots-txt/options.phpnu „[µü¤        PK       —ŠU]ç?=“A  A  0            ^ça includes/modules/buddypress/class-buddypress.phpnu „[µü¤        PK       —ŠU]—‚º@f  f  +            ÿöa includes/modules/buddypress/class-admin.phpnu „[µü¤        PK       —ŠU]Ù9'ö	  ö	  4            Àûa includes/modules/buddypress/views/options-titles.phpnu „[µü¤        PK       —ŠU]mr|¸0  0  4            b includes/modules/buddypress/paper/class-bp-group.phpnu „[µü¤        PK       —ŠU]BÏä^B  B  3            ®b includes/modules/buddypress/paper/class-bp-user.phpnu „[µü¤        PK       —ŠU]ŒÛ                  Sb includes/modules/index.phpnu „[µü¤        PK       —ŠU]u\+Â4  Â4  '            ¹b includes/modules/analytics/class-db.phpnu „[µü¤        PK       —ŠU]šî•K  K  )            ÒJb includes/modules/analytics/class-ajax.phpnu „[µü¤        PK       —ŠU]ñ¬/ßæ	  æ	  >            B–b includes/modules/analytics/assets/img/report-icon-external.pngnu „[µü¤        PK       —ŠU]¡›«  «  5            – b includes/modules/analytics/assets/img/report-logo.pngnu „[µü¤        PK       —ŠU]"Á^I¬ I¬ <            ¦ºb includes/modules/analytics/assets/img/single-post-report.jpgnu „[µü¤        PK       —ŠU]Û\Æë ë 7            [gd includes/modules/analytics/assets/img/rank-math-pro.jpgnu „[µü¤        PK       —ŠU]Ð[Ð÷À	 À	 -            ­}e includes/modules/analytics/assets/js/stats.jsnu „[µü¤        PK       —ŠU]»Tÿß¤x  ¤x  1            %>o includes/modules/analytics/assets/js/admin-bar.jsnu „[µü¤        PK       —ŠU]«w%ªO  ªO  3            *·o includes/modules/analytics/assets/css/admin-bar.cssnu „[µü¤        PK       —ŠU]*]±Á Á /            7p includes/modules/analytics/assets/css/stats.cssnu „[µü¤        PK       —ŠU]Ï7�6‹:  ‹:  3            W q includes/modules/analytics/google/class-request.phpnu „[µü¤        PK       —ŠU]äVB¸d#  d#  3            E[q includes/modules/analytics/google/class-console.phpnu „[µü¤        PK       —ŠU]j„½î|  |  5            q includes/modules/analytics/google/class-analytics.phpnu „[µü¤        PK       —ŠU]¢IjÁL  L  :            í™q includes/modules/analytics/google/class-authentication.phpnu „[µü¤        PK       —ŠU]„iO	²  ²  :            £§q includes/modules/analytics/google/class-url-inspection.phpnu „[µü¤        PK       —ŠU]xbÉ"à  à  7            ¿¼q includes/modules/analytics/google/class-permissions.phpnu „[µü¤        PK       —ŠU]º—g2¢  ¢  /            Éq includes/modules/analytics/google/class-api.phpnu „[µü¤        PK       ˜ŠU]=Žíi5  i5  ,            Ñq includes/modules/analytics/class-summary.phpnu „[µü¤        PK       ˜ŠU]òÇNNL  NL  .            Ìr includes/modules/analytics/class-analytics.phpnu „[µü¤        PK       ˜ŠU]ŒÛ      $            xSr includes/modules/analytics/index.phpnu „[µü¤        PK       ˜ŠU]ãS‚ý  ý  6            èSr includes/modules/analytics/views/email-reports/cta.phpnu „[µü¤        PK       ˜ŠU]x?ï£  £  9            KVr includes/modules/analytics/views/email-reports/report.phpnu „[µü¤        PK       ˜ŠU]�¶×‡³  ³  7            WXr includes/modules/analytics/views/email-reports/stat.phpnu „[µü¤        PK       ˜ŠU]_´h`í  í  9            q_r includes/modules/analytics/views/email-reports/header.phpnu „[µü¤        PK       ˜ŠU]|`+[ó  ó  8            Çfr includes/modules/analytics/views/email-reports/style.phpnu „[µü¤        PK       ˜ŠU]^‡_ç  ç  C            "‡r includes/modules/analytics/views/email-reports/sections/summary.phpnu „[µü¤        PK       ˜ŠU]�‹y;ù  ù  E            |�r includes/modules/analytics/views/email-reports/sections/positions.phpnu „[µü¤        PK       ˜ŠU]¿"oq�  �  ?            ê”r includes/modules/analytics/views/email-reports/header-after.phpnu „[µü¤        PK       ˜ŠU]Ôïg  g  9            é›r includes/modules/analytics/views/email-reports/footer.phpnu „[µü¤        PK       ˜ŠU]¢jlÙR  R  .            ¹žr includes/modules/analytics/views/dashboard.phpnu „[µü¤        PK       ˜ŠU]0"ºÕ      *            i¡r includes/modules/analytics/views/index.phpnu „[µü¤        PK       ˜ŠU]Iä%  %  ,            Þ¡r includes/modules/analytics/views/options.phpnu „[µü¤        PK       ˜ŠU]¦u°gÄ  Ä  ,            _½r includes/modules/analytics/class-objects.phpnu „[µü¤        PK       ˜ŠU]×‚ï�¥  ¥  ,            Ér includes/modules/analytics/class-watcher.phpnu „[µü¤        PK       ˜ŠU]LI¼¶%  ¶%  .            €Úr includes/modules/analytics/rest/class-rest.phpnu „[µü¤        PK       ˜ŠU]#üF.3  .3  5            ” s includes/modules/analytics/class-analytics-common.phpnu „[µü¤        PK       ˜ŠU](›	ƒDj  Dj  *            '4s includes/modules/analytics/class-stats.phpnu „[µü¤        PK       ˜ŠU]‹X§#W  W  3            Åžs includes/modules/analytics/class-url-inspection.phpnu „[µü¤        PK       ™ŠU]±¹Ö6V  V  :            ªs includes/modules/analytics/workflows/class-inspections.phpnu „[µü¤        PK       ™ŠU]¡ÿ è	  è	  6            ?Ás includes/modules/analytics/workflows/class-console.phpnu „[µü¤        PK       ™ŠU]Rá:O  O  3            �Ës includes/modules/analytics/workflows/class-jobs.phpnu „[µü¤        PK       ™ŠU]9ßõ    4            ?ès includes/modules/analytics/workflows/class-oauth.phpnu „[µü¤        PK       ™ŠU] ŸUÇÐ  Ð  3            Áús includes/modules/analytics/workflows/class-base.phpnu „[µü¤        PK       ™ŠU]ôBÕ  Õ  6            ôt includes/modules/analytics/workflows/class-objects.phpnu „[µü¤        PK       ™ŠU]Jb7S  S  7            /t includes/modules/analytics/workflows/class-workflow.phpnu „[µü¤        PK       ™ŠU]µ,7gº&  º&  -            é)t includes/modules/analytics/class-keywords.phpnu „[µü¤        PK       ™ŠU]ruí’Ÿ  Ÿ  *             Qt includes/modules/analytics/class-posts.phpnu „[µü¤        PK       ™ŠU]ÜN‘’(  ’(  )            ù\t includes/modules/analytics/class-gtag.phpnu „[µü¤        PK       ™ŠU]oñ	Yš@  š@  2            ä…t includes/modules/analytics/class-email-reports.phpnu „[µü¤        PK       ™ŠU]3x»‚Ã  Ã  4            àÆt includes/modules/analytics/class-analytics-stats.phpnu „[µü¤        PK       ™ŠU]¯V1�Å€  Å€  7            Ít includes/modules/seo-analysis/assets/js/seo-analysis.jsnu „[µü¤        PK       ™ŠU]²ª (ã^  ã^  9            3Nu includes/modules/seo-analysis/assets/css/seo-analysis.cssnu „[µü¤        PK       ™ŠU]F'¸+	  +	  -            ­u includes/modules/seo-analysis/class-admin.phpnu „[µü¤        PK       ™ŠU]ŒÛ      '            ·u includes/modules/seo-analysis/index.phpnu „[µü¤        PK       ™ŠU]k­€žD  D  ,            z·u includes/modules/seo-analysis/views/main.phpnu „[µü¤        PK       ™ŠU]ŒÛ      -            ¹u includes/modules/seo-analysis/views/index.phpnu „[µü¤        PK       ™ŠU]$ÿWá›X  ›X  4            “¹u includes/modules/seo-analysis/seo-analysis-tests.phpnu „[µü¤        PK       ™ŠU]Õx¤ÞÊ  Ê  .            ’v includes/modules/seo-analysis/class-result.phpnu „[µü¤        PK       ™ŠU]m-ó;/1  /1  4            º!v includes/modules/seo-analysis/class-seo-analyzer.phpnu „[µü¤        PK       ™ŠU]káèM  M  4            MSv includes/modules/seo-analysis/class-seo-analysis.phpnu „[µü¤        PK       ™ŠU](ÓÂ’  ’  $            þ[v includes/modules/schema/class-db.phpnu „[µü¤        PK       ™ŠU]ÙŽË/ƒY  ƒY  (            äuv includes/modules/schema/class-jsonld.phpnu „[µü¤        PK       ™ŠU]h�ÓÑ) Ñ) <            ¿Ïv includes/modules/schema/assets/img/custom-schema-builder.jpgnu „[µü¤        PK       ™ŠU]¤†ª ¯h ¯h 5            üùw includes/modules/schema/assets/js/schema-gutenberg.jsnu „[µü¤        PK       ™ŠU]êûB�Ó �Ó 4            cz includes/modules/schema/assets/js/schema-template.jsnu „[µü¤        PK       ™ŠU]·fV�Ù  Ù  2            7} includes/modules/schema/assets/css/schema-dark.cssnu „[µü¤        PK       ™ŠU]8Î³ãh  h  -            <P} includes/modules/schema/assets/css/schema.cssnu „[µü¤        PK       ™ŠU]üT‡õ  õ  +            ³¸} includes/modules/schema/class-opengraph.phpnu „[µü¤        PK       ™ŠU]Ú¢O—2  —2  3            É} includes/modules/schema/class-snippet-shortcode.phpnu „[µü¤        PK       ™ŠU]“<m$ã  ã  9            ýû} includes/modules/schema/shortcode/softwareapplication.phpnu „[µü¤        PK       ™ŠU]Îïi�  �  ,            Iÿ} includes/modules/schema/shortcode/recipe.phpnu „[µü¤        PK       ™ŠU]äö³Mo  o  ,            2~ includes/modules/schema/shortcode/person.phpnu „[µü¤        PK       ™ŠU]ŒÛ      +            ý~ includes/modules/schema/shortcode/index.phpnu „[µü¤        PK       ™ŠU]çµÜ    1            t~ includes/modules/schema/shortcode/videoobject.phpnu „[µü¤        PK       ™ŠU]tÄÖ–  –  0            ×~ includes/modules/schema/shortcode/restaurant.phpnu „[µü¤        PK       ™ŠU]™Ùêyß	  ß	  +            Í~ includes/modules/schema/shortcode/event.phpnu „[µü¤        PK       ™ŠU]*SqJ  J  ,            !~ includes/modules/schema/shortcode/course.phpnu „[µü¤        PK       ™ŠU]…±™p  p  *            ­(~ includes/modules/schema/shortcode/book.phpnu „[µü¤        PK       ™ŠU]– hnÏ  Ï  0            w-~ includes/modules/schema/shortcode/jobposting.phpnu „[µü¤        PK       ™ŠU][À¦^/  /  -            ¦3~ includes/modules/schema/shortcode/service.phpnu „[µü¤        PK       ™ŠU]|¨ú!©  ©  -            26~ includes/modules/schema/shortcode/product.phpnu „[µü¤        PK       ™ŠU]9©<r¨  ¨  +            8:~ includes/modules/schema/shortcode/music.phpnu „[µü¤        PK       šŠU]w:£Æý  ý  '            ;<~ includes/modules/schema/class-admin.phpnu „[µü¤        PK       šŠU]&¬“ñÇ  Ç  2            �[~ includes/modules/schema/snippets/class-website.phpnu „[µü¤        PK       šŠU]÷qò ‹  ‹  2            ¸b~ includes/modules/schema/snippets/class-article.phpnu „[µü¤        PK       šŠU]½häQ	  Q	  8            ¥h~ includes/modules/schema/snippets/class-products-page.phpnu „[µü¤        PK       šŠU]"ÉEé.  é.  >            ^r~ includes/modules/schema/snippets/class-product-woocommerce.phpnu „[µü¤        PK       šŠU]dñ&ÿô  ô  3            µ¡~ includes/modules/schema/snippets/class-singular.phpnu „[µü¤        PK       šŠU]ŒÇØ    6            ®~ includes/modules/schema/snippets/class-product-edd.phpnu „[µü¤        PK       šŠU]h¢‘F•
  •
  2            zº~ includes/modules/schema/snippets/class-product.phpnu „[µü¤        PK       šŠU]6Ê3›º  º  6            qÅ~ includes/modules/schema/snippets/class-breadcrumbs.phpnu „[µü¤        PK       šŠU]è«VùM  M  4            ‘Ë~ includes/modules/schema/snippets/class-publisher.phpnu „[µü¤        PK       šŠU]…¸­#  #  8            BÒ~ includes/modules/schema/snippets/class-wc-attributes.phpnu „[µü¤        PK       šŠU]OÐ!pÙ  Ù  7            ÍØ~ includes/modules/schema/snippets/class-primaryimage.phpnu „[µü¤        PK       šŠU]= }Â    1            Ý~ includes/modules/schema/snippets/class-author.phpnu „[µü¤        PK       šŠU]pQóFÚ  Ú  2            oë~ includes/modules/schema/snippets/class-webpage.phpnu „[µü¤        PK       šŠU]ŒÛ      !            «ó~ includes/modules/schema/index.phpnu „[µü¤        PK       šŠU]]òýþ×  ×  1            ô~ includes/modules/schema/views/metabox-options.phpnu „[µü¤        PK       šŠU]”L>s=!  =!  *            P÷~ includes/modules/schema/class-frontend.phpnu „[µü¤        PK       šŠU]>Yy÷    (            ç includes/modules/schema/class-schema.phpnu „[µü¤        PK       šŠU]R;/Ý  Ý  -            J includes/modules/schema/interface-snippet.phpnu „[µü¤        PK       šŠU]ÌÆ--  -  .            „ includes/modules/schema/blocks/class-admin.phpnu „[µü¤        PK       šŠU](ö³½  ½  8            $ includes/modules/schema/blocks/views/options-general.phpnu „[µü¤        PK       šŠU]H‘º1A  A  /            4+ includes/modules/schema/blocks/howto/block.jsonnu „[µü¤        PK       šŠU]\jžµ  µ  ;            Ô1 includes/modules/schema/blocks/howto/assets/scss/howto.scssnu „[µü¤        PK       šŠU]g.Oú  ú  >            ô: includes/modules/schema/blocks/howto/assets/js/index.asset.phpnu „[µü¤        PK       šŠU]¼€s\ýC  ýC  7            \= includes/modules/schema/blocks/howto/assets/js/index.jsnu „[µü¤        PK       šŠU]	ÓB0X  X  G            À� includes/modules/schema/blocks/howto/assets/src/components/inspector.jsnu „[µü¤        PK       šŠU]c´'7}  }  B            �’ includes/modules/schema/blocks/howto/assets/src/components/Step.jsnu „[µü¤        PK       šŠU]>møâÚ  Ú  7            ~  includes/modules/schema/blocks/howto/assets/src/save.jsnu „[µü¤        PK       šŠU]JË`ìœ  œ  =            ¿¤ includes/modules/schema/blocks/howto/assets/src/transforms.jsnu „[µü¤        PK       šŠU]o<í¶  ¶  7            È¨ includes/modules/schema/blocks/howto/assets/src/edit.jsnu „[µü¤        PK       šŠU]ša‰t  t  8            åÂ includes/modules/schema/blocks/howto/assets/src/index.jsnu „[µü¤        PK       šŠU]•ÝMš^  ^  :            ÁÄ includes/modules/schema/blocks/howto/assets/src/example.jsnu „[µü¤        PK       šŠU]¥�}Õ    9            ‰Æ includes/modules/schema/blocks/howto/assets/css/howto.cssnu „[µü¤        PK       šŠU]¿¢Ž¡/  ¡/  :            ôÑ includes/modules/schema/blocks/howto/class-block-howto.phpnu „[µü¤        PK       šŠU]¯FÛÌ%  %  0            ÿ€ includes/modules/schema/blocks/schema/block.jsonnu „[µü¤        PK       šŠU],BLq	  q	  =            „€ includes/modules/schema/blocks/schema/assets/scss/schema.scssnu „[µü¤        PK       šŠU]ØÉ(ç    ?            b€ includes/modules/schema/blocks/schema/assets/js/index.asset.phpnu „[µü¤        PK       šŠU]|h¨X$  $  8            í€ includes/modules/schema/blocks/schema/assets/js/index.jsnu „[µü¤        PK       šŠU]U_}"  "  8            y)€ includes/modules/schema/blocks/schema/assets/src/edit.jsnu „[µü¤        PK       šŠU]U˜"<  <  9            1€ includes/modules/schema/blocks/schema/assets/src/index.jsnu „[µü¤        PK       šŠU]ažëé3  3  ;            ¨2€ includes/modules/schema/blocks/schema/assets/css/schema.cssnu „[µü¤        PK       šŠU]B! "  "  <            FA€ includes/modules/schema/blocks/schema/class-block-schema.phpnu „[µü¤        PK       šŠU]‹÷nŠ    -            ÔG€ includes/modules/schema/blocks/toc/block.jsonnu „[µü¤        PK       šŠU]$Ñ’âç  ç  6            AL€ includes/modules/schema/blocks/toc/class-block-toc.phpnu „[µü¤        PK       šŠU]Ëk>‘;  ;  7            Ž`€ includes/modules/schema/blocks/toc/assets/scss/toc.scssnu „[µü¤        PK       šŠU]Säd§Ë   Ë   B            0d€ includes/modules/schema/blocks/toc/assets/scss/toc_list_style.scssnu „[µü¤        PK       šŠU]â¨à/  /  <            me€ includes/modules/schema/blocks/toc/assets/js/index.asset.phpnu „[µü¤        PK       šŠU]­ß«£â3  â3  5            h€ includes/modules/schema/blocks/toc/assets/js/index.jsnu „[µü¤        PK       šŠU]D,öQ˜  ˜  5            Oœ€ includes/modules/schema/blocks/toc/assets/src/save.jsnu „[µü¤        PK       šŠU]$.‚£y	  y	  5            L € includes/modules/schema/blocks/toc/assets/src/list.jsnu „[µü¤        PK       šŠU]g€%°Ì  Ì  8            *ª€ includes/modules/schema/blocks/toc/assets/src/toolbar.jsnu „[µü¤        PK       šŠU]è�ÉÏ    ;            ^®€ includes/modules/schema/blocks/toc/assets/src/deprecated.jsnu „[µü¤        PK       šŠU]³zf‹  ‹  6            Ë²€ includes/modules/schema/blocks/toc/assets/src/utils.jsnu „[µü¤        PK       ›ŠU]ñ2O  O  5            ¼Ì€ includes/modules/schema/blocks/toc/assets/src/edit.jsnu „[µü¤        PK       ›ŠU]Åæ;D  D  6            pÜ€ includes/modules/schema/blocks/toc/assets/src/index.jsnu „[µü¤        PK       ›ŠU]t†’b*  *  @            Þ€ includes/modules/schema/blocks/toc/assets/src/inspectControls.jsnu „[µü¤        PK       ›ŠU]ãÜÝÕ   Õ   @            ´å€ includes/modules/schema/blocks/toc/assets/css/toc_list_style.cssnu „[µü¤        PK       ›ŠU]û˜Æ5  5  5            ùæ€ includes/modules/schema/blocks/toc/assets/css/toc.cssnu „[µü¤        PK       ›ŠU]'�þQ  Q  -            “í€ includes/modules/schema/blocks/faq/block.jsonnu „[µü¤        PK       ›ŠU]g.Oú  ú  <            Aò€ includes/modules/schema/blocks/faq/assets/js/index.asset.phpnu „[µü¤        PK       ›ŠU]A¾–ü'>  '>  5            §ô€ includes/modules/schema/blocks/faq/assets/js/index.jsnu „[µü¤        PK       ›ŠU]XgÃÄ.  .  D            33� includes/modules/schema/blocks/faq/assets/src/components/Question.jsnu „[µü¤        PK       ›ŠU]›†•å  å  E            ÕE� includes/modules/schema/blocks/faq/assets/src/components/Inspector.jsnu „[µü¤        PK       ›ŠU]µƒtYé  é  5            /U� includes/modules/schema/blocks/faq/assets/src/save.jsnu „[µü¤        PK       ›ŠU]aï?€k  k  ;            }Y� includes/modules/schema/blocks/faq/assets/src/transforms.jsnu „[µü¤        PK       ›ŠU]Ù�Óä»  »  5            S\� includes/modules/schema/blocks/faq/assets/src/edit.jsnu „[µü¤        PK       ›ŠU]øÜ®9p  p  6            sh� includes/modules/schema/blocks/faq/assets/src/index.jsnu „[µü¤        PK       ›ŠU]Öh¬É`  `  8            Ij� includes/modules/schema/blocks/faq/assets/src/example.jsnu „[µü¤        PK       ›ŠU]'úV!é  é  6            l� includes/modules/schema/blocks/faq/class-block-faq.phpnu „[µü¤        PK       ›ŠU]Á¨—-  -  5            `€� includes/modules/schema/blocks/shared/ImagePreview.jsnu „[µü¤        PK       ›ŠU]³Ê+¶    6            ò‚� includes/modules/schema/blocks/shared/MediaUploader.jsnu „[µü¤        PK       ›ŠU]�£|‹  ‹  .            j‰� includes/modules/schema/blocks/class-block.phpnu „[µü¤        PK       ›ŠU]Æ<j2  2  5            S•� includes/modules/schema/blocks/class-block-parser.phpnu „[µü¤        PK       ›ŠU]9©ì«  «  (            ê¡� includes/modules/schema/class-blocks.phpnu „[µü¤        PK       ›ŠU]ŒÛ      $            íª� includes/modules/local-seo/index.phpnu „[µü¤        PK       ›ŠU]ŒÛ      *            ]«� includes/modules/local-seo/views/index.phpnu „[µü¤        PK       ›ŠU]ÆÔÿ‘Ê)  Ê)  3            Ó«� includes/modules/local-seo/views/titles-options.phpnu „[µü¤        PK       ›ŠU]wpÀ#È"  È"  -             Ö� includes/modules/local-seo/class-kml-file.phpnu „[µü¤        PK       ›ŠU]Ë…Vþ¬1  ¬1  .            %ù� includes/modules/local-seo/class-local-seo.phpnu „[µü¤        PK       œŠU]®ÿñ•�  •�  7            /+‚ includes/modules/role-manager/assets/js/role-manager.jsnu „[µü¤        PK       œŠU]øêC—Ž  Ž  8            +­‚ includes/modules/role-manager/class-user-role-editor.phpnu „[µü¤        PK       �ŠU]¤”â´  ´  4            !´‚ includes/modules/role-manager/class-role-manager.phpnu „[µü¤        PK       �ŠU]ŒÛ      '            9¼‚ includes/modules/role-manager/index.phpnu „[µü¤        PK        ŠU]úó¨´  ´  /            ¬¼‚ includes/modules/role-manager/class-members.phpnu „[µü¤        PK        ŠU]4ý>    :            ¿Â‚ includes/modules/role-manager/class-capability-manager.phpnu „[µü¤        PK       ¡ŠU]£ˆ~º<  <  3            @Ö‚ includes/modules/image-seo/class-add-attributes.phpnu „[µü¤        PK       ¡ŠU](X÷    *            ßæ‚ includes/modules/image-seo/class-admin.phpnu „[µü¤        PK       ¡ŠU]ŒÛ      $            >ì‚ includes/modules/image-seo/index.phpnu „[µü¤        PK       ¡ŠU]öß–V—  —  .            ®ì‚ includes/modules/image-seo/class-image-seo.phpnu „[µü¤        PK       ¡ŠU]W:¶Ã	  	  &            £ï‚ includes/modules/image-seo/options.phpnu „[µü¤        PK       ¡ŠU]¾/ê»  »  ,            ù‚ includes/modules/404-monitor/class-table.phpnu „[µü¤        PK       ¡ŠU]1|Ëfp  p  )            ƒ includes/modules/404-monitor/class-db.phpnu „[µü¤        PK       ¡ŠU]:¼ÞÏ   Ï   9            ç$ƒ includes/modules/404-monitor/assets/scss/404-monitor.scssnu „[µü¤        PK       ¡ŠU]üw  w  5            &ƒ includes/modules/404-monitor/assets/js/404-monitor.jsnu „[µü¤        PK       ¡ŠU]^ˆ�w¦   ¦   7            û*ƒ includes/modules/404-monitor/assets/css/404-monitor.cssnu „[µü¤        PK       ¡ŠU]í…bÔ  Ô  ,            ,ƒ includes/modules/404-monitor/class-admin.phpnu „[µü¤        PK       ¡ŠU]ŒÛ      &            8Dƒ includes/modules/404-monitor/index.phpnu „[µü¤        PK       ¢ŠU]>´j    >            ªDƒ includes/modules/404-monitor/views/help-tab-screen-content.phpnu „[µü¤        PK       ¢ŠU]åewï  ï  +            Hƒ includes/modules/404-monitor/views/main.phpnu „[µü¤        PK       ¢ŠU]ŒÛ      ,            gKƒ includes/modules/404-monitor/views/index.phpnu „[µü¤        PK       ¢ŠU]ìjóB^  ^  4            ßKƒ includes/modules/404-monitor/views/help-tab-bulk.phpnu „[µü¤        PK       ¢ŠU]M`»ÉV
  V
  .            ¡Mƒ includes/modules/404-monitor/views/options.phpnu „[µü¤        PK       ¢ŠU]@É£ê  ê  8            UXƒ includes/modules/404-monitor/views/help-tab-overview.phpnu „[µü¤        PK       ¢ŠU]V¨"    7            §\ƒ includes/modules/404-monitor/views/help-tab-actions.phpnu „[µü¤        PK       ¢ŠU]µ[¸Ò¾  ¾  .            &`ƒ includes/modules/404-monitor/class-monitor.phpnu „[µü¤        PK       ¢ŠU]Ø])Ü�  �  4            B€ƒ includes/modules/ai-visibility/Admin/class-admin.phpnu „[µü¤        PK       ¢ŠU]¿ôV³æ ³æ 9            C‘ƒ includes/modules/ai-visibility/assets/js/ai-visibility.jsnu „[µü¤        PK       ¢ŠU]Ž�Ü[ô  ô  :            _x‡ includes/modules/ai-visibility/assets/src/ai-visibility.jsnu „[µü¤        PK       ¢ŠU],,M%G  G  0            ½z‡ includes/modules/ai-visibility/assets/src/App.jsnu „[µü¤        PK       ¢ŠU]QÔDý
  
  <            dˆ‡ includes/modules/ai-visibility/assets/src/Connect/style.scssnu „[µü¤        PK       ¢ŠU]d¿¯">  >  B            ÚŽ‡ includes/modules/ai-visibility/assets/src/Connect/NotRegistered.jsnu „[µü¤        PK       ¢ŠU]©¡@S  S  :            Š“‡ includes/modules/ai-visibility/assets/src/Connect/index.jsnu „[µü¤        PK       ¢ŠU]¯ÍðD‘  ‘  D            G™‡ includes/modules/ai-visibility/assets/src/Dashboard/BrandsTable.scssnu „[µü¤        PK       ¢ŠU]C‚BKØ  Ø  C            L¥‡ includes/modules/ai-visibility/assets/src/Dashboard/GatedPreview.jsnu „[µü¤        PK       ¢ŠU]ª!²�
  
  B            —²‡ includes/modules/ai-visibility/assets/src/Dashboard/Dashboard.scssnu „[µü¤        PK       ¢ŠU]Ä<–Çµ  µ  I            ¹‡ includes/modules/ai-visibility/assets/src/Dashboard/BrandsTableToolbar.jsnu „[µü¤        PK       ¢ŠU]ìf“£    B            A¾‡ includes/modules/ai-visibility/assets/src/Dashboard/BrandsTable.jsnu „[µü¤        PK       ¢ŠU]’’ù2Ð   Ð   E            ¾Î‡ includes/modules/ai-visibility/assets/src/Dashboard/GatedPreview.scssnu „[µü¤        PK       £ŠU]Ø·%o(  o(  <            Ð‡ includes/modules/ai-visibility/assets/src/Dashboard/index.jsnu „[µü¤        PK       £ŠU]…Pi¼£  £  K            Þø‡ includes/modules/ai-visibility/assets/src/Dashboard/BrandsTableToolbar.scssnu „[µü¤        PK       £ŠU]{9ú	£.  £.  >            üû‡ includes/modules/ai-visibility/assets/src/scss/_variables.scssnu „[µü¤        PK       £ŠU]Ï'BÐ  Ð  E            +ˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysesTable.scssnu „[µü¤        PK       £ŠU]º5›ž5  5  G            R/ˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysesFilterBar.jsnu „[µü¤        PK       £ŠU]®Ìk_˜  ˜  C            þAˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysesTable.jsnu „[µü¤        PK       £ŠU]u�‰‘§
  §
  I            	Nˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysesFilterBar.scssnu „[µü¤        PK       £ŠU]QPgÆ    G            )Yˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysisRunDetail.jsnu „[µü¤        PK       £ŠU]n'³¥%  %  @            ¥qˆ includes/modules/ai-visibility/assets/src/Analyses/Analyses.scssnu „[µü¤        PK       £ŠU]7BQ,  ,  I            :xˆ includes/modules/ai-visibility/assets/src/Analyses/AnalysisRunDetail.scssnu „[µü¤        PK       £ŠU].{²õ  õ  ;            ß~ˆ includes/modules/ai-visibility/assets/src/Analyses/index.jsnu „[µü¤        PK       £ŠU]uÐëô  ô  2            ?”ˆ includes/modules/ai-visibility/assets/src/App.scssnu „[µü¤        PK       £ŠU])÷Iï¢6  ¢6  <            •™ˆ includes/modules/ai-visibility/assets/src/Reports/Reports.jsnu „[µü¤        PK       £ŠU] x‹ç  ç  >            £Ðˆ includes/modules/ai-visibility/assets/src/Reports/Reports.scssnu „[µü¤        PK       £ŠU]ÏÓZ   Z   :            øçˆ includes/modules/ai-visibility/assets/src/Reports/index.jsnu „[µü¤        PK       £ŠU]éäÙh  h  K            ¼èˆ includes/modules/ai-visibility/assets/src/BrandDetail/CompetitorsTable.scssnu „[µü¤        PK       £ŠU]˜Â÷{ä  ä  D            Ÿìˆ includes/modules/ai-visibility/assets/src/BrandDetail/BrandHeader.jsnu „[µü¤        PK       £ŠU]è9" i  i  F            ÷øˆ includes/modules/ai-visibility/assets/src/BrandDetail/BrandHeader.scssnu „[µü¤        PK       £ŠU] º_þx  x  D            Ö‰ includes/modules/ai-visibility/assets/src/BrandDetail/RunDetail.scssnu „[µü¤        PK       £ŠU]4 Æ    F            Â‰ includes/modules/ai-visibility/assets/src/BrandDetail/BrandDetail.scssnu „[µü¤        PK       £ŠU]q<Ä¥à  à  B            F‰ includes/modules/ai-visibility/assets/src/BrandDetail/RunDetail.jsnu „[µü¤        PK       £ŠU] 1A
  A
  F            ˜‰ includes/modules/ai-visibility/assets/src/BrandDetail/BrandOverview.jsnu „[µü¤        PK       £ŠU]žÔd¹M
  M
  I            O!‰ includes/modules/ai-visibility/assets/src/BrandDetail/CompetitorsTable.jsnu „[µü¤        PK       £ŠU]G ÖÞÿ  ÿ  D            ,‰ includes/modules/ai-visibility/assets/src/BrandDetail/BrandTopbar.jsnu „[µü¤        PK       £ŠU]MÃì`g  g  E            ˆ/‰ includes/modules/ai-visibility/assets/src/BrandDetail/QueriesTable.jsnu „[µü¤        PK       £ŠU]G™/O  O  G            dD‰ includes/modules/ai-visibility/assets/src/BrandDetail/QueriesTable.scssnu „[µü¤        PK       £ŠU]ÈjxÂò  ò  H            *I‰ includes/modules/ai-visibility/assets/src/BrandDetail/BrandOverview.scssnu „[µü¤        PK       £ŠU]Y‰×¾    >            ”N‰ includes/modules/ai-visibility/assets/src/BrandDetail/index.jsnu „[µü¤        PK       £ŠU],Ê�u  u  =            c‰ includes/modules/ai-visibility/assets/src/utils/formatDate.jsnu „[µü¤        PK       £ŠU]L¼Ì÷V  V  ?            ÿi‰ includes/modules/ai-visibility/assets/src/utils/downloadJson.jsnu „[µü¤        PK       £ŠU]†á2…ô  ô  @            Äl‰ includes/modules/ai-visibility/assets/src/utils/analysisState.jsnu „[µü¤        PK       £ŠU]:NÌ×  ×  ;            (q‰ includes/modules/ai-visibility/assets/src/utils/urlState.jsnu „[µü¤        PK       £ŠU]Sîu’¨  ¨  K            j}‰ includes/modules/ai-visibility/assets/src/shared/components/EmptyState.scssnu „[µü¤        PK       £ŠU]XHý”  ”  I            �…‰ includes/modules/ai-visibility/assets/src/shared/components/StatCard.scssnu „[µü¤        PK       £ŠU]Ï“‚	  ‚	  L            š“‰ includes/modules/ai-visibility/assets/src/shared/components/ActionButtons.jsnu „[µü¤        PK       £ŠU]>s7£    N            ˜�‰ includes/modules/ai-visibility/assets/src/shared/components/SectionHeader.scssnu „[µü¤        PK       £ŠU]0m    I            ( ‰ includes/modules/ai-visibility/assets/src/shared/components/StatusIcon.jsnu „[µü¤        PK       £ŠU]fŽÔä¬  ¬  E            ­§‰ includes/modules/ai-visibility/assets/src/shared/components/Button.jsnu „[µü¤        PK       £ŠU]cËQ¥n  n  M            Î°‰ includes/modules/ai-visibility/assets/src/shared/components/SentimentBadge.jsnu „[µü¤        PK       £ŠU]Ì]ºq  q  H            ¹Å‰ includes/modules/ai-visibility/assets/src/shared/components/DataTable.jsnu „[µü¤        PK       £ŠU]Eï¨f?  ?  O            ¢Ì‰ includes/modules/ai-visibility/assets/src/shared/components/SentimentBadge.scssnu „[µü¤        PK       £ŠU]¾§/ŒŽ   Ž   J            `Ñ‰ includes/modules/ai-visibility/assets/src/shared/components/StartTime.scssnu „[µü¤        PK       £ŠU]ûËMpM  M  K            hÒ‰ includes/modules/ai-visibility/assets/src/shared/components/ScoreBadge.scssnu „[µü¤        PK       £ŠU]>>å«  «  I            0Ö‰ includes/modules/ai-visibility/assets/src/shared/components/EmptyState.jsnu „[µü¤        PK       £ŠU] õxž  ž  I            TÜ‰ includes/modules/ai-visibility/assets/src/shared/components/PageTopbar.jsnu „[µü¤        PK       £ŠU]|19sÇ  Ç  L            kâ‰ includes/modules/ai-visibility/assets/src/shared/components/LoadingButton.jsnu „[µü¤        PK       £ŠU]N ŒFÏ  Ï  H            ®é‰ includes/modules/ai-visibility/assets/src/shared/components/DateInput.jsnu „[µü¤        PK       £ŠU]í�OÝv  v  K            õí‰ includes/modules/ai-visibility/assets/src/shared/components/StatusToggle.jsnu „[µü¤        PK       ¤ŠU]nn(8    N            æó‰ includes/modules/ai-visibility/assets/src/shared/components/TranscriptModal.jsnu „[µü¤        PK       ¤ŠU]{…üŒ  Œ  L            oŠ includes/modules/ai-visibility/assets/src/shared/components/CountryFlag.scssnu „[µü¤        PK       ¤ŠU]8^î¯ë  ë  H            wŠ includes/modules/ai-visibility/assets/src/shared/components/StartTime.jsnu „[µü¤        PK       ¤ŠU]Gü    I            ÚŠ includes/modules/ai-visibility/assets/src/shared/components/ScoreBadge.jsnu „[µü¤        PK       ¤ŠU]Ú"OÝ  Ý  P            UŠ includes/modules/ai-visibility/assets/src/shared/components/TranscriptModal.scssnu „[µü¤        PK       ¤ŠU]ÈëN    J            ²0Š includes/modules/ai-visibility/assets/src/shared/components/DataTable.scssnu „[µü¤        PK       ¤ŠU]à5Ré.  .  O            <2Š includes/modules/ai-visibility/assets/src/shared/components/TranscriptViewer.jsnu „[µü¤        PK       ¤ŠU]pÔ�‹      J            éOŠ includes/modules/ai-visibility/assets/src/shared/components/StatusBadge.jsnu „[µü¤        PK       ¤ŠU]¹ˆHU*  *  K            cUŠ includes/modules/ai-visibility/assets/src/shared/components/CountBadge.scssnu „[µü¤        PK       ¤ŠU]Ó—¢  ¢  H            XŠ includes/modules/ai-visibility/assets/src/shared/components/RankBadge.jsnu „[µü¤        PK       ¤ŠU]™=6ƒ7  7  L            "]Š includes/modules/ai-visibility/assets/src/shared/components/SectionHeader.jsnu „[µü¤        PK       ¤ŠU]*ØÖÛ8  8  G            Õ`Š includes/modules/ai-visibility/assets/src/shared/components/Button.scssnu „[µü¤        PK       ¤ŠU]
<8    N            „~Š includes/modules/ai-visibility/assets/src/shared/components/ActionButtons.scssnu „[µü¤        PK       ¤ŠU]‡¡>!Ò  Ò  J            ™Š includes/modules/ai-visibility/assets/src/shared/components/DateInput.scssnu „[µü¤        PK       ¤ŠU]®ÙŽ6    K            bœŠ includes/modules/ai-visibility/assets/src/shared/components/PageTopbar.scssnu „[µü¤        PK       ¤ŠU]
ú˜sj  j  Q            êžŠ includes/modules/ai-visibility/assets/src/shared/components/TranscriptViewer.scssnu „[µü¤        PK       ¤ŠU]úTû  û  J            Õ°Š includes/modules/ai-visibility/assets/src/shared/components/RankBadge.scssnu „[µü¤        PK       ¤ŠU]`&úù<  <  I            JµŠ includes/modules/ai-visibility/assets/src/shared/components/CountBadge.jsnu „[µü¤        PK       ¤ŠU]l2\mÁ  Á  D            ÿ¸Š includes/modules/ai-visibility/assets/src/shared/components/index.jsnu „[µü¤        PK       ¤ŠU]Ë½~  ~  L            4¾Š includes/modules/ai-visibility/assets/src/shared/components/StatusBadge.scssnu „[µü¤        PK       ¤ŠU]¨D€¥j  j  K            .ÂŠ includes/modules/ai-visibility/assets/src/shared/components/StatusIcon.scssnu „[µü¤        PK       ¤ŠU]�*ãý  ý  M            ÉŠ includes/modules/ai-visibility/assets/src/shared/components/StatusToggle.scssnu „[µü¤        PK       ¤ŠU] ^PÅÈ  È  J            �ÎŠ includes/modules/ai-visibility/assets/src/shared/components/CountryFlag.jsnu „[µü¤        PK       ¤ŠU]Qm¾A  A  G            ÏÖŠ includes/modules/ai-visibility/assets/src/shared/components/StatCard.jsnu „[µü¤        PK       ¤ŠU]Ùòòò�  �  P            ‡âŠ includes/modules/ai-visibility/assets/src/shared/services/api/aiVisibilityApi.jsnu „[µü¤        PK       ¤ŠU]Óôu@/  /  B            ¤õŠ includes/modules/ai-visibility/assets/src/shared/hooks/useFetch.jsnu „[µü¤        PK       ¤ŠU],ÈóÕT  T  F            EüŠ includes/modules/ai-visibility/assets/src/shared/hooks/useDashboard.jsnu „[µü¤        PK       ¤ŠU]×¡Ëì}  }  L            ‹ includes/modules/ai-visibility/assets/src/shared/hooks/useTrialActivation.jsnu „[µü¤        PK       ¤ŠU](—Á³r"  r"  M            ‹ includes/modules/ai-visibility/assets/src/shared/Modals/ActivateTrialModal.jsnu „[µü¤        PK       ¤ŠU]Þûê]Ñ  Ñ  I            ÷;‹ includes/modules/ai-visibility/assets/src/shared/Modals/ConfirmModal.scssnu „[µü¤        PK       ¤ŠU]ÃµBM7	  7	  G            AD‹ includes/modules/ai-visibility/assets/src/shared/Modals/ConfirmModal.jsnu „[µü¤        PK       ¤ŠU]„= lv  v  K            ïM‹ includes/modules/ai-visibility/assets/src/shared/Modals/UpgradePlanModal.jsnu „[µü¤        PK       ¤ŠU]�ã#\    J            àY‹ includes/modules/ai-visibility/assets/src/shared/Modals/AccessGateModal.jsnu „[µü¤        PK       ¤ŠU]sâ#µ  µ  K            fb‹ includes/modules/ai-visibility/assets/src/shared/Modals/CheckoutIframe.scssnu „[µü¤        PK       ¤ŠU]íp·ÏM7  M7  H            –e‹ includes/modules/ai-visibility/assets/src/shared/Modals/AddBrandModal.jsnu „[µü¤        PK       ¤ŠU]¬ö¾kÂ  Â  M            [�‹ includes/modules/ai-visibility/assets/src/shared/Modals/UpgradePlanModal.scssnu „[µü¤        PK       ¤ŠU]Ç[–u  u  M            š«‹ includes/modules/ai-visibility/assets/src/shared/Modals/FeatureChecklist.scssnu „[µü¤        PK       ¤ŠU] Yó  ó  O            Œ®‹ includes/modules/ai-visibility/assets/src/shared/Modals/UpgradeToUnlockModal.jsnu „[µü¤        PK       ¤ŠU]Qg3Ì'  '  K            þ¶‹ includes/modules/ai-visibility/assets/src/shared/Modals/ContentOverlay.scssnu „[µü¤        PK       ¤ŠU]
cgÁ  Á  L             ¼‹ includes/modules/ai-visibility/assets/src/shared/Modals/AccessGateModal.scssnu „[µü¤        PK       ¤ŠU]˜~Ù  Ù  K            ÝÊ‹ includes/modules/ai-visibility/assets/src/shared/Modals/FeatureChecklist.jsnu „[µü¤        PK       ¤ŠU]& <+Š  Š  J            1Ñ‹ includes/modules/ai-visibility/assets/src/shared/Modals/AddBrandModal.scssnu „[µü¤        PK       ¤ŠU]:<°*V  V  O            5ë‹ includes/modules/ai-visibility/assets/src/shared/Modals/ActivateTrialModal.scssnu „[µü¤        PK       ¤ŠU]�mc±§  §  @            
ü‹ includes/modules/ai-visibility/assets/src/shared/Modals/index.jsnu „[µü¤        PK       ¤ŠU]ó~ml¶	  ¶	  I            !ÿ‹ includes/modules/ai-visibility/assets/src/shared/Modals/CheckoutIframe.jsnu „[µü¤        PK       ¤ŠU]ËA¶Ï	  	  <            P	Œ includes/modules/ai-visibility/Api/class-base-controller.phpnu „[µü¤        PK       ¤ŠU]ŽŽX•”Y  ”Y  >            ÅŒ includes/modules/ai-visibility/Api/class-brands-controller.phpnu „[µü¤        PK       ¤ŠU]ºn"  "  =            ÇvŒ includes/modules/ai-visibility/Api/class-trial-controller.phpnu „[µü¤        PK       ¤ŠU]'	À    @            V„Œ includes/modules/ai-visibility/Api/class-checkout-controller.phpnu „[µü¤        PK       ¤ŠU]=ÖËk    6            Ù�Œ includes/modules/ai-visibility/class-ai-visibility.phpnu „[µü¤        PK       ¤ŠU]X5'�»#  »#  .            X”Œ includes/modules/ai-visibility/class-cache.phpnu „[µü¤        PK       ¤ŠU]ÊÁäE.  E.  -            q¸Œ includes/modules/redirections/class-table.phpnu „[µü¤        PK       ¤ŠU]�äH™Î2  Î2  *            çŒ includes/modules/redirections/class-db.phpnu „[µü¤        PK       ¤ŠU]›/ÝGš  š  0            ;� includes/modules/redirections/class-debugger.phpnu „[µü¤        PK       ¤ŠU]uâ]‚G•  G•  7            5)� includes/modules/redirections/assets/js/redirections.jsnu „[µü¤        PK       ¤ŠU]::É†>  >  9            ã¾� includes/modules/redirections/assets/css/redirections.cssnu „[µü¤        PK       ¤ŠU]Ÿ$å î)  î)  3            ŠÌ� includes/modules/redirections/class-redirection.phpnu „[µü¤        PK       ¤ŠU]ët;rÁ+  Á+  -            Ûö� includes/modules/redirections/class-admin.phpnu „[µü¤        PK       ¤ŠU]™Aå	ÿ  ÿ  ?            ù"Ž includes/modules/redirections/views/help-tab-screen-content.phpnu „[µü¤        PK       ¤ŠU]¬™†·  ·  ,            g&Ž includes/modules/redirections/views/main.phpnu „[µü¤        PK       ¤ŠU]‹èŸÞ†  †  1            z,Ž includes/modules/redirections/views/debugging.phpnu „[µü¤        PK       ¤ŠU]Ø(tl3  3  5            a8Ž includes/modules/redirections/views/help-tab-bulk.phpnu „[µü¤        PK       ¤ŠU]É]–F  F  /            ù9Ž includes/modules/redirections/views/options.phpnu „[µü¤        PK       ¤ŠU]V–C+=  =  9            žBŽ includes/modules/redirections/views/help-tab-overview.phpnu „[µü¤        PK       ¤ŠU]ª½w‘-  -  8            DGŽ includes/modules/redirections/views/help-tab-actions.phpnu „[µü¤        PK       ¤ŠU]'èèÎG  G  4            ÙJŽ includes/modules/redirections/class-redirections.phpnu „[µü¤        PK       ¥ŠU]ÞRUâ˜  ˜  5            „aŽ includes/modules/redirections/class-import-export.phpnu „[µü¤        PK       ¥ŠU]‰ã¹‡+  ‡+  /            �pŽ includes/modules/redirections/class-watcher.phpnu „[µü¤        PK       ¥ŠU]çqäç'  ç'  2            gœŽ includes/modules/redirections/class-redirector.phpnu „[µü¤        PK       ¥ŠU]æ¡-U    /            °ÄŽ includes/modules/redirections/class-metabox.phpnu „[µü¤        PK       ¥ŠU]xK¶R%  %  -            ÙŽ includes/modules/redirections/class-cache.phpnu „[µü¤        PK       ¥ŠU]Ki0 _  _  .            “åŽ includes/modules/redirections/class-export.phpnu „[µü¤        PK       ¥ŠU]X¥E°œ  œ  .            P � includes/modules/woocommerce/class-wc-vars.phpnu „[µü¤        PK       ¥ŠU]˜B¸¾c  c  5            J� includes/modules/woocommerce/assets/js/woocommerce.jsnu „[µü¤        PK       ¥ŠU]áo¹£  £  0            *� includes/modules/woocommerce/class-opengraph.phpnu „[µü¤        PK       ¥ŠU]`l{
  {
  ,            :� includes/modules/woocommerce/class-admin.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      &            ìD� includes/modules/woocommerce/index.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      ,            ^E� includes/modules/woocommerce/views/index.phpnu „[µü¤        PK       ¥ŠU]ßîi6  6  6            ÖE� includes/modules/woocommerce/views/options-general.phpnu „[µü¤        PK       ¥ŠU]Z=Bä@  @  :            rQ� includes/modules/woocommerce/class-product-redirection.phpnu „[µü¤        PK       ¥ŠU]©¦áxÅ  Å  +            f� includes/modules/woocommerce/class-base.phpnu „[µü¤        PK       ¥ŠU]Úu’u  u  8            <m� includes/modules/woocommerce/class-permalink-watcher.phpnu „[µü¤        PK       ¥ŠU]àHÛkS  S  .            Š� includes/modules/woocommerce/class-sitemap.phpnu „[µü¤        PK       ¥ŠU]?.2­  ­  2            Ê˜� includes/modules/woocommerce/class-woocommerce.phpnu „[µü¤        PK       ¥ŠU]všÔI  I  ,            Ù²� includes/modules/links/Admin/class-admin.phpnu „[µü¤        PK       ¥ŠU]Ügìn*=  *=  4            ~»� includes/modules/links/assets/images/bulk-update.jpgnu „[µü¤        PK       ¥ŠU]Xú¬°‰`  ‰`  5            ù� includes/modules/links/assets/images/keyword-maps.jpgnu „[µü¤        PK       ¥ŠU]›m3Í“Ï  “Ï  .            úY� includes/modules/links/assets/js/links-page.jsnu „[µü¤        PK       ¥ŠU]ëÚ+¹  ¹  6            ë)‘ includes/modules/links/assets/src/scss/_variables.scssnu „[µü¤        PK       ¥ŠU]ñŸUÞv  v  6            
7‘ includes/modules/links/assets/src/scss/links-page.scssnu „[µü¤        PK       ¥ŠU]¾ÞÆ§à  à  /            æL‘ includes/modules/links/assets/src/links-page.jsnu „[µü¤        PK       ¥ŠU]!‰°Š  Š  H            %O‘ includes/modules/links/assets/src/features/links-page/tabs/BulkUpdate.jsnu „[µü¤        PK       ¥ŠU]ÕÌ¿
Â*  Â*  C            'Q‘ includes/modules/links/assets/src/features/links-page/tabs/Posts.jsnu „[µü¤        PK       ¥ŠU]Mù*Ž  Ž  I            \|‘ includes/modules/links/assets/src/features/links-page/tabs/KeywordMaps.jsnu „[µü¤        PK       ¥ŠU]„ú®éL  L  C            c~‘ includes/modules/links/assets/src/features/links-page/tabs/Links.jsnu „[µü¤        PK       ¥ŠU]Çè€·
  ·
  B            "œ‘ includes/modules/links/assets/src/features/links-page/LinksPage.jsnu „[µü¤        PK       ¥ŠU]�Â    K            K§‘ includes/modules/links/assets/src/features/links-page/hooks/useTableData.jsnu „[µü¤        PK       ¥ŠU]‚”ºÂ  Â  A            Í¸‘ includes/modules/links/assets/src/features/links-page/urlState.jsnu „[µü¤        PK       ¥ŠU]owE!ò  ò  1             Ë‘ includes/modules/links/class-contentprocessor.phpnu „[µü¤        PK       ¥ŠU]j‚C´D	  D	  %            Sç‘ includes/modules/links/class-link.phpnu „[µü¤        PK       ¥ŠU]ò—"  "  (            ìð‘ includes/modules/links/class-storage.phpnu „[µü¤        PK       ¥ŠU]?ŸR=¤'  ¤'  &            f	’ includes/modules/links/class-links.phpnu „[µü¤        PK       ¥ŠU]1Z‚³e  e  /            `1’ includes/modules/links/Api/class-controller.phpnu „[µü¤        PK       ¥ŠU]³ñ¡  ¡  1            Ö–’ includes/modules/content-ai/assets/img/loader.svgnu „[µü¤        PK       ¥ŠU]<‘è%m  m  9            Ø˜’ includes/modules/content-ai/assets/js/content-ai-media.jsnu „[µü¤        PK       ¥ŠU]Òql{HV HV 8            À“ includes/modules/content-ai/assets/js/content-ai-page.jsnu „[µü¤        PK       ¥ŠU]\ù”!i !i 3            p]— includes/modules/content-ai/assets/js/content-ai.jsnu „[µü¤        PK       ¥ŠU]x¥dÝY•  Y•  5            ôÆ� includes/modules/content-ai/assets/css/content-ai.cssnu „[µü¤        PK       ¥ŠU]úËŸP@Þ @Þ :            ²\ž includes/modules/content-ai/assets/css/content-ai-page.cssnu „[µü¤        PK       ¥ŠU]©Æ?"  "  :            \;  includes/modules/content-ai/assets/css/content-ai-dark.cssnu „[µü¤        PK       ¥ŠU]Îj:�3  3  +            Ø]  includes/modules/content-ai/class-admin.phpnu „[µü¤        PK       ¥ŠU]ƒÝvjæ   æ   *            fv  includes/modules/content-ai/views/main.phpnu „[µü¤        PK       ¥ŠU]í°ŽÓX0  X0  -            ¦w  includes/modules/content-ai/views/options.phpnu „[µü¤        PK       ¥ŠU]\�W¿¬,  ¬,  2            [¨  includes/modules/content-ai/class-bulk-actions.phpnu „[µü¤        PK       ¥ŠU]’N” ‘
  ‘
  0            iÕ  includes/modules/content-ai/class-content-ai.phpnu „[µü¤        PK       ¥ŠU]¿³;ÜS  ÜS  *            Zà  includes/modules/content-ai/class-rest.phpnu „[µü¤        PK       ¥ŠU]Ãßm™  ™  5            �4¡ includes/modules/content-ai/class-event-scheduler.phpnu „[µü¤        PK       ¥ŠU]­C"$…'  …'  4            ŽA¡ includes/modules/content-ai/class-bulk-image-alt.phpnu „[µü¤        PK       ¥ŠU]YÏE¶³  ³  D            wi¡ includes/modules/content-ai/blocks/command/assets/js/index.asset.phpnu „[µü¤        PK       ¥ŠU]V7¨x x =            žk¡ includes/modules/content-ai/blocks/command/assets/js/index.jsnu „[µü¤        PK       ¥ŠU]¨]P�`  `  @            ä¢ includes/modules/content-ai/blocks/command/assets/src/block.jsonnu „[µü¤        PK       ¥ŠU]z,Jc  c  =            éæ¢ includes/modules/content-ai/blocks/command/assets/src/edit.jsnu „[µü¤        PK       ¥ŠU]
(3}z  z  >            ¹þ¢ includes/modules/content-ai/blocks/command/assets/src/index.jsnu „[µü¤        PK       ¥ŠU]�äÛ½  ½  B            ¡£ includes/modules/content-ai/blocks/command/class-block-command.phpnu „[µü¤        PK       ¥ŠU]ì‡®°1  1  5            Ð£ includes/modules/content-ai/class-content-ai-page.phpnu „[µü¤        PK       ¥ŠU]põ—R  R  8            f'£ includes/modules/content-ai/class-bulk-edit-seo-meta.phpnu „[µü¤        PK       ¥ŠU]CLŽ0"  "  ,             ?£ includes/modules/content-ai/class-assets.phpnu „[µü¤        PK       ¥ŠU]ÖØ@f®
  ®
  (            žT£ includes/modules/status/class-backup.phpnu „[µü¤        PK       ¥ŠU]ZÀ®ÍF�  F�  +            ¤_£ includes/modules/status/assets/js/status.jsnu „[µü¤        PK       ¥ŠU]OW5»ª  ª  2            Eí£ includes/modules/status/assets/js/databaseTools.jsnu „[µü¤        PK       ¥ŠU]:K.}û  û  1            Q¤ includes/modules/status/assets/js/systemStatus.jsnu „[µü¤        PK       ¥ŠU]Œí;yžH  žH  1            ­ ¤ includes/modules/status/assets/js/importExport.jsnu „[µü¤        PK       ¥ŠU]Š½Km  Km  3            ¬i¤ includes/modules/status/assets/js/versionControl.jsnu „[µü¤        PK       ¥ŠU]§ùî°ö  ö  -            Z×¤ includes/modules/status/assets/css/status.cssnu „[µü¤        PK       ¥ŠU]/ »öÁ  Á  /            ­ò¤ includes/modules/status/class-system-status.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      !            Í¥ includes/modules/status/index.phpnu „[µü¤        PK       ¥ŠU],X‡’    8            :¥ includes/modules/status/class-import-export-settings.phpnu „[µü¤        PK       ¥ŠU]Þuäïü  ü  &            ¨%¥ includes/modules/status/views/main.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      '            ú'¥ includes/modules/status/views/index.phpnu „[µü¤        PK       ¥ŠU]¡)™9©  ©  &            m(¥ includes/modules/status/class-rest.phpnu „[µü¤        PK       ¥ŠU]Q>kî�
  �
  +            l=¥ includes/modules/status/class-error-log.phpnu „[µü¤        PK       ¥ŠU];‘bö½	  ½	  (            dH¥ includes/modules/status/class-status.phpnu „[µü¤        PK       ¥ŠU]0"ºÕ                  yR¥ includes/modules/llms/index.phpnu „[µü¤        PK       ¥ŠU]Lj6‹  ‹  !            ãR¥ includes/modules/llms/options.phpnu „[µü¤        PK       ¥ŠU]ùíÆH"  "  (            ¿[¥ includes/modules/llms/class-llms-txt.phpnu „[µü¤        PK       ¥ŠU]7´•  •  0            (~¥ includes/modules/sitemap/class-sitemap-index.phpnu „[µü¤        PK       ¥ŠU]›ó(°p6  p6  /            …¥ includes/modules/sitemap/class-image-parser.phpnu „[µü¤        PK       ¥ŠU]–Š¥¬º  º  9            ì»¥ includes/modules/sitemap/class-redirect-core-sitemaps.phpnu „[µü¤        PK       ¥ŠU]Í!çìž  ž  )            Å¥ includes/modules/sitemap/abstract-xml.phpnu „[µü¤        PK       ¥ŠU]�/0¦È<  È<  (            Î¥ includes/modules/sitemap/class-admin.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      "            &¦ includes/modules/sitemap/index.phpnu „[µü¤        PK       ¥ŠU]5—ã½,  ½,  ,            ”¦ includes/modules/sitemap/class-generator.phpnu „[µü¤        PK       ¥ŠU]„?®~Ó  Ó  +            ­8¦ includes/modules/sitemap/class-timezone.phpnu „[µü¤        PK       ¥ŠU] èj‘  ‘  .            Û>¦ includes/modules/sitemap/class-sitemap-xml.phpnu „[µü¤        PK       ¥ŠU]o«ì8»A  »A  6            ÊR¦ includes/modules/sitemap/providers/class-post-type.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      ,            ë”¦ includes/modules/sitemap/providers/index.phpnu „[µü¤        PK       ¥ŠU]0.1~H"  H"  5            c•¦ includes/modules/sitemap/providers/class-taxonomy.phpnu „[µü¤        PK       ¥ŠU]mónø}  }  9            ¸¦ includes/modules/sitemap/providers/interface-provider.phpnu „[µü¤        PK       ¥ŠU]ù)îÏ_   _   3            ö¼¦ includes/modules/sitemap/providers/class-author.phpnu „[µü¤        PK       ¥ŠU]F³Ÿó  ó  )            ¸Ý¦ includes/modules/sitemap/class-router.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      +            ñ¦ includes/modules/sitemap/settings/index.phpnu „[µü¤        PK       ¥ŠU]<fžp	  	  -            {ñ¦ includes/modules/sitemap/settings/authors.phpnu „[µü¤        PK       ¥ŠU]+SÎ®§  §  0            çú¦ includes/modules/sitemap/settings/taxonomies.phpnu „[µü¤        PK       ¥ŠU]yíâ—ö  ö  0            î § includes/modules/sitemap/settings/post-types.phpnu „[µü¤        PK       ¥ŠU]^ˆ­�­  ­  2            D
§ includes/modules/sitemap/settings/html-sitemap.phpnu „[µü¤        PK       ¥ŠU]öÌJ
  
  -            S§ includes/modules/sitemap/settings/general.phpnu „[µü¤        PK       ¥ŠU].»ÌKk$  k$  *            /'§ includes/modules/sitemap/class-sitemap.phpnu „[µü¤        PK       ¥ŠU]�IH%  H%  0            ôK§ includes/modules/sitemap/class-cache-watcher.phpnu „[µü¤        PK       ¥ŠU]Ïøî»(  »(  (            œq§ includes/modules/sitemap/sitemap-xsl.phpnu „[µü¤        PK       ¥ŠU]À¿‹ƒF  F  -            ¯š§ includes/modules/sitemap/class-stylesheet.phpnu „[µü¤        PK       ¥ŠU]ÿQ¶q  q  (            R¡§ includes/modules/sitemap/class-cache.phpnu „[µü¤        PK       ¥ŠU]ó2Éþ	  	  5            ¾§ includes/modules/sitemap/html-sitemap/class-terms.phpnu „[µü¤        PK       ¥ŠU]§Š†]    7            ‰Ü§ includes/modules/sitemap/html-sitemap/class-authors.phpnu „[µü¤        PK       ¥ŠU]mÜužô&  ô&  5            
ï§ includes/modules/sitemap/html-sitemap/class-posts.phpnu „[µü¤        PK       ¥ŠU]˜ºýH    7            c¨ includes/modules/sitemap/html-sitemap/class-sitemap.phpnu „[µü¤        PK       ¥ŠU]pÒ¤™S  S  -            â/¨ includes/modules/sitemap/class-classifier.phpnu „[µü¤        PK       ¥ŠU]ÃAI©    :            ’=¨ includes/modules/version-control/class-version-control.phpnu „[µü¤        PK       ¥ŠU]ŸA_†  †  ,            M¨ includes/modules/version-control/display.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      *            øN¨ includes/modules/version-control/index.phpnu „[µü¤        PK       ¥ŠU]ïÖMF1%  1%  5            nO¨ includes/modules/version-control/class-beta-optin.phpnu „[µü¤        PK       ¥ŠU]’z‚Þl  l  ;            u¨ includes/modules/version-control/class-rollback-version.phpnu „[µü¤        PK       ¥ŠU]ûáA1j  j  ?            Û…¨ includes/modules/database-tools/class-yoast-howto-converter.phpnu „[µü¤        PK       ¥ŠU]…z*7¼  ¼  6            ´’¨ includes/modules/database-tools/class-yoast-blocks.phpnu „[µü¤        PK       ¥ŠU]¾tÇ‘    7            Ö®¨ includes/modules/database-tools/class-aioseo-blocks.phpnu „[µü¤        PK       ¥ŠU]Â¸àI�  �  6            SÀ¨ includes/modules/database-tools/class-update-score.phpnu „[µü¤        PK       ¥ŠU]â£¹¼½  ½  =            VÝ¨ includes/modules/database-tools/class-yoast-toc-converter.phpnu „[µü¤        PK       ¥ŠU]#êEŽ(  (  >            €é¨ includes/modules/database-tools/class-aioseo-toc-converter.phpnu „[µü¤        PK       ¥ŠU]Ÿ<Hö7  ö7  8            õ¨ includes/modules/database-tools/class-database-tools.phpnu „[µü¤        PK       ¥ŠU]ýÍ›ÎL
  L
  =            t-© includes/modules/database-tools/class-yoast-faq-converter.phpnu „[µü¤        PK       ¥ŠU]ô-&  &  ?            -8© includes/modules/database-tools/class-yoast-local-converter.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      &            ÂO© includes/modules/web-stories/index.phpnu „[µü¤        PK       ¥ŠU]½°ÃÓ  Ó  2            4P© includes/modules/web-stories/class-web-stories.phpnu „[µü¤        PK       ¥ŠU]ÚÚõ/Í#  Í#  %            iX© includes/modules/acf/assets/js/acf.jsnu „[µü¤        PK       ¥ŠU]·ÏÂo
  o
  "            ‹|© includes/modules/acf/class-acf.phpnu „[µü¤        PK       ¥ŠU]„�[O2  O2  <            L‡© includes/modules/instant-indexing/class-instant-indexing.phpnu „[µü¤        PK       ¥ŠU]ŒÛ      1            º© includes/modules/instant-indexing/views/index.phpnu „[µü¤        PK       ¥ŠU]æ~vä	  ä	  3            „º© includes/modules/instant-indexing/views/options.phpnu „[µü¤        PK       ¥ŠU]¹2¡W  W  3            ËÄ© includes/modules/instant-indexing/views/console.phpnu „[µü¤        PK       ¥ŠU]ÉzjY	  	  3            …Ê© includes/modules/instant-indexing/views/history.phpnu „[µü¤        PK       ¥ŠU]E]L)ò  ò  0            ñÙ© includes/modules/instant-indexing/class-rest.phpnu „[µü¤        PK       ¥ŠU]’=T     /            Cð© includes/modules/instant-indexing/class-api.phpnu „[µü¤        PK       ¥ŠU]2’îîC&  C&              ªª includes/class-rewrite.phpnu „[µü¤        PK       ¥ŠU]2ÔtŸ  Ÿ  %            76ª includes/3rdparty/wpml/class-wpml.phpnu „[µü¤        PK       ¥ŠU]ÀÒâv    /            +Fª includes/3rdparty/elementor/class-elementor.phpnu „[µü¤        PK       ¥ŠU]ly¾¡—! —! 2            ™]ª includes/3rdparty/elementor/assets/js/elementor.jsnu „[µü¤        PK       ¥ŠU]Î¨h'ô ô 9            ’« includes/3rdparty/elementor/assets/css/elementor-dark.cssnu „[µü¤        PK       ¥ŠU]ÿ@½omå må 4            ï‹­ includes/3rdparty/elementor/assets/css/elementor.cssnu „[µü¤        PK       ¥ŠU]d:{"±  ±  1            Àq¯ includes/3rdparty/loco/class-loco-i18n-inline.phpnu „[µü¤        PK       ¥ŠU]Á”šGŸ' Ÿ' (            Ò�¯ includes/3rdparty/divi/assets/js/divi.jsnu „[µü¤        PK       ¥ŠU]*ÛuÒ  Ò  .            É©° includes/3rdparty/divi/assets/js/divi-admin.jsnu „[µü¤        PK       ¥ŠU]ñÃbúd!  d!  /            ù¾° includes/3rdparty/divi/assets/js/divi-iframe.jsnu „[µü¤        PK       ¥ŠU]’›ýc	 c	 *            ¼à° includes/3rdparty/divi/assets/css/divi.cssnu „[µü¤        PK       ¥ŠU]±b€­+  ­+  %            yê² includes/3rdparty/divi/class-divi.phpnu „[µü¤        PK       ¥ŠU]žžžÓ      +            {³ includes/3rdparty/divi/class-divi-admin.phpnu „[µü¤        PK       ¥ŠU]�ã&~
  ~
              Ö³ includes/class-updates.phpnu „[µü¤        PK    JJäð ž%³   